ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDFkZWIzMzEuLjA3ZTMyYTg3IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTUwNCw3ICs1MDQsNyBAQAogRTogbGludXhAYnJvZG8uZGUKIFc6IGh0dHA6Ly93d3cuYnJvZG8uZGUvCiBQOiAxMDI0RC83MjVCMzdDNiAgMTkwRiAzRTc3IDlDODkgM0I2RCBCRUNEICA0NkVFIDY3QzMgMDMwOCA3MjVCIDM3QzYKLUQ6IHBhcnRzIG9mIENQVUZyZXEgY29kZSwgQUNQSSBidWdmaXhlcworRDogcGFydHMgb2YgQ1BVRnJlcSBjb2RlLCBBQ1BJIGJ1Z2ZpeGVzLCBQQ01DSUEgcmV3cml0ZSwgY3B1ZnJlcXV0aWxzCiBTOiBUdWViaW5nZW4sIEdlcm1hbnkKIAogTjogQW5kcmllcyBCcm91d2VyCkBAIC04NTcsNiArODU3LDEwIEBACiBTOiBSb3VuZCBSb2NrLCBUWCAgNzg2ODIKIFM6IFVTQQogCitOOiBNYXR0aWEgRG9uZ2lsaQorRTogbWFsYXR0aWFAZ21haWwuY29tCitEOiBjcHVmcmVxdXRpbHMgKHByZWN1cnNvciB0byBjcHVwb3dlcnV0aWxzKQorCiBOOiBCZW4gRG9va3MKIEU6IGJlbi1saW51eEBmbHVmZi5vcmcKIEU6IGJlbkBzaW10ZWMuY28udWsKQEAgLTE4ODMsNiArMTg4NywxMSBAQAogUzogMTA5OCBWQSBBbXN0ZXJkYW0gCiBTOiBUaGUgTmV0aGVybGFuZHMKIAorTjogR29yYW4gS29ydWdhCitFOiBrb3J1Z2FnQHNpb2wubmV0CitEOiBjcHVmcmVxdXRpbHMgKHByZWN1cnNvciB0byBjcHVwb3dlcnV0aWxzKQorUzogU2xvdmVuaWEKKwogTjogSmlyaSBLb3NpbmEKIEU6IGppa29zQGppa29zLmN6CiBFOiBqa29zaW5hQHN1c2UuY3oKQEAgLTI5MTYsNiArMjkyNSwxMiBAQAogUzogNzkwOTggRnJlaWJ1cmcKIFM6IEdlcm1hbnkKIAorTjogVGhvbWFzIFJlbm5pbmdlcgorRTogdHJlbm5Ac3VzZS5kZQorRDogY3B1cG93ZXJ1dGlscworUzogU1VTRSBMaW51eCBHbWJICitTOiBHZXJtYW55CisKIE46IEpvZXJnIFJldXRlcgogRToganJldXRlckB5YWluYS5kZQogVzogaHR0cDovL3lhaW5hLmRlL2pyZXV0ZXIvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAppbmRleCAxZjg5NDI0Li42NWJiZDI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKQEAgLTI3Miw2ICsyNzIsOCBAQAogCS0gaG93IHRvIGdldCBwcmludGsgZm9ybWF0IHNwZWNpZmllcnMgcmlnaHQKIHByaW9fdHJlZS50eHQKIAktIGluZm8gb24gcmFkaXgtcHJpb3JpdHktc2VhcmNoLXRyZWUgdXNlIGZvciBpbmRleGluZyB2bWFzLgorcmFtb29wcy50eHQKKwktIGRvY3VtZW50YXRpb24gb2YgdGhlIHJhbW9vcHMgb29wcy9wYW5pYyBsb2dnaW5nIG1vZHVsZS4KIHJidHJlZS50eHQKIAktIGluZm8gb24gd2hhdCByZWQtYmxhY2sgdHJlZXMgYXJlIGFuZCB3aGF0IHRoZXkgYXJlIGZvci4KIHJvYnVzdC1mdXRleC1BQkkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3BzdG9yZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCmluZGV4IGRkZjQ1MWUuLmZmMWRmNGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvcHN0b3JlCkBAIC0zOSwzICszOSw5IEBACiAJCW11bHRpcGxlKSBmaWxlcyBiYXNlZCBvbiB0aGUgcmVjb3JkIHNpemUgb2YgdGhlIHVuZGVybHlpbmcKIAkJcGVyc2lzdGVudCBzdG9yYWdlIHVudGlsIGF0IGxlYXN0IHRoaXMgYW1vdW50IGlzIHJlYWNoZWQuCiAJCURlZmF1bHQgaXMgMTAgS2J5dGVzLgorCisJCVBzdG9yZSBvbmx5IHN1cHBvcnRzIG9uZSBiYWNrZW5kIGF0IGEgdGltZS4gSWYgbXVsdGlwbGUKKwkJYmFja2VuZHMgYXJlIGF2YWlsYWJsZSwgdGhlIHByZWZlcnJlZCBiYWNrZW5kIG1heSBiZQorCQlzZXQgYnkgcGFzc2luZyB0aGUgcHN0b3JlLmJhY2tlbmQ9IGFyZ3VtZW50IHRvIHRoZSBrZXJuZWwgYXQKKwkJYm9vdCB0aW1lLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXNjc2lfaG9zdCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3Mtc2NzaV9ob3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YTRmODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXNjc2lfaG9zdApAQCAtMCwwICsxLDEzIEBACitXaGF0OgkJL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdFgvaXNjaV9pZAorRGF0ZToJCUp1bmUgMjAxMQorQ29udGFjdDoJRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBlbnVtZXJhdGVkIGhvc3QgSUQgZm9yIHRoZSBJbnRlbAorCQlTQ1UgY29udHJvbGxlci4gVGhlIEludGVsKFIpIEM2MDAgU2VyaWVzIENoaXBzZXQgU0FUQS9TQVMKKwkJU3RvcmFnZSBDb250cm9sIFVuaXQgZW1iZWRzIHVwIHRvIHR3byA0LXBvcnQgY29udHJvbGxlcnMgaW4KKwkJYSBzaW5nbGUgUENJIGRldmljZS4gIFRoZSBjb250cm9sbGVycyBhcmUgZW51bWVyYXRlZCBpbiBvcmRlcgorCQl3aGljaCB1c3VhbGx5IG1lYW5zIHRoZSBsb3dlc3QgbnVtYmVyIHNjc2lfaG9zdCBjb3JyZXNwb25kcworCQl3aXRoIHRoZSBmaXJzdCBjb250cm9sbGVyLCBidXQgdGhpcyBhc3NvY2lhdGlvbiBpcyBub3QKKwkJZ3VhcmFudGVlZC4gIFRoZSAnaXNjaV9pZCcgYXR0cmlidXRlIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcworCQl0aGUgY29udHJvbGxlciBpbmRleDogJzAnIGZvciB0aGUgZmlyc3QgY29udHJvbGxlciwKKwkJJzEnIGZvciB0aGUgc2Vjb25kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1pZGVhcGFkLWxhcHRvcCBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0taWRlYXBhZC1sYXB0b3AKaW5kZXggODA3ZmNhMi4uZmY1MzE4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1pZGVhcGFkLWxhcHRvcAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWlkZWFwYWQtbGFwdG9wCkBAIC00LDMgKzQsMjAgQEAKIENvbnRhY3Q6CSJJa2UgUGFuaGMgPGlrZS5wYW5AY2Fub25pY2FsLmNvbT4iCiBEZXNjcmlwdGlvbjoKIAkJQ29udHJvbCB0aGUgcG93ZXIgb2YgY2FtZXJhIG1vZHVsZS4gMSBtZWFucyBvbiwgMCBtZWFucyBvZmYuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vaWRlYXBhZC9jZmcKK0RhdGU6CQlKdW4gMjAxMQorS2VybmVsVmVyc2lvbjoJMy4xCitDb250YWN0OgkiSWtlIFBhbmhjIDxpa2UucGFuQGNhbm9uaWNhbC5jb20+IgorRGVzY3JpcHRpb246CisJCUlkZWFwYWQgY2FwYWJpbGl0eSBiaXRzLgorCQlCaXQgOC0xMDogMSAtIEludGVsIGdyYXBoaWMgb25seQorCQkgICAgICAgICAgMiAtIEFUSSBncmFwaGljIG9ubHkKKwkJICAgICAgICAgIDMgLSBOdmlkaWEgZ3JhcGhpYyBvbmx5CisJCSAgICAgICAgICA0IC0gSW50ZWwgYW5kIEFUSSBncmFwaGljCisJCSAgICAgICAgICA1IC0gSW50ZWwgYW5kIE52aWRpYSBncmFwaGljCisJCUJpdCAxNjogQmx1ZXRvb3RoIGV4aXN0ICgxIGZvciBleGlzdCkKKwkJQml0IDE3OiAzRyBleGlzdCAoMSBmb3IgZXhpc3QpCisJCUJpdCAxODogV2lmaSBleGlzdCAoMSBmb3IgZXhpc3QpCisJCUJpdCAxOTogQ2FtZXJhIGV4aXN0ICgxIGZvciBleGlzdCkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZSBiL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKaW5kZXggZmE2ZTI1Yi4uYzk0MDIzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCkBAIC04MCwyMiArODAsMTMgQEAKIFRoZSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIGxpbmVzIGlzIDgwIGNvbHVtbnMgYW5kIHRoaXMgaXMgYSBzdHJvbmdseQogcHJlZmVycmVkIGxpbWl0LgogCi1TdGF0ZW1lbnRzIGxvbmdlciB0aGFuIDgwIGNvbHVtbnMgd2lsbCBiZSBicm9rZW4gaW50byBzZW5zaWJsZSBjaHVua3MuCi1EZXNjZW5kYW50cyBhcmUgYWx3YXlzIHN1YnN0YW50aWFsbHkgc2hvcnRlciB0aGFuIHRoZSBwYXJlbnQgYW5kIGFyZSBwbGFjZWQKLXN1YnN0YW50aWFsbHkgdG8gdGhlIHJpZ2h0LiBUaGUgc2FtZSBhcHBsaWVzIHRvIGZ1bmN0aW9uIGhlYWRlcnMgd2l0aCBhIGxvbmcKLWFyZ3VtZW50IGxpc3QuIExvbmcgc3RyaW5ncyBhcmUgYXMgd2VsbCBicm9rZW4gaW50byBzaG9ydGVyIHN0cmluZ3MuIFRoZQotb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyB3aGVyZSBleGNlZWRpbmcgODAgY29sdW1ucyBzaWduaWZpY2FudGx5IGluY3JlYXNlcwotcmVhZGFiaWxpdHkgYW5kIGRvZXMgbm90IGhpZGUgaW5mb3JtYXRpb24uCitTdGF0ZW1lbnRzIGxvbmdlciB0aGFuIDgwIGNvbHVtbnMgd2lsbCBiZSBicm9rZW4gaW50byBzZW5zaWJsZSBjaHVua3MsIHVubGVzcworZXhjZWVkaW5nIDgwIGNvbHVtbnMgc2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgcmVhZGFiaWxpdHkgYW5kIGRvZXMgbm90IGhpZGUKK2luZm9ybWF0aW9uLiBEZXNjZW5kYW50cyBhcmUgYWx3YXlzIHN1YnN0YW50aWFsbHkgc2hvcnRlciB0aGFuIHRoZSBwYXJlbnQgYW5kCithcmUgcGxhY2VkIHN1YnN0YW50aWFsbHkgdG8gdGhlIHJpZ2h0LiBUaGUgc2FtZSBhcHBsaWVzIHRvIGZ1bmN0aW9uIGhlYWRlcnMKK3dpdGggYSBsb25nIGFyZ3VtZW50IGxpc3QuIEhvd2V2ZXIsIG5ldmVyIGJyZWFrIHVzZXItdmlzaWJsZSBzdHJpbmdzIHN1Y2ggYXMKK3ByaW50ayBtZXNzYWdlcywgYmVjYXVzZSB0aGF0IGJyZWFrcyB0aGUgYWJpbGl0eSB0byBncmVwIGZvciB0aGVtLgogCi12b2lkIGZ1bihpbnQgYSwgaW50IGIsIGludCBjKQotewotCWlmIChjb25kaXRpb24pCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgdGhpcyBpcyBhIGxvbmcgcHJpbnRrIHdpdGggIgotCQkJCQkJIjMgcGFyYW1ldGVycyBhOiAldSBiOiAldSAiCi0JCQkJCQkiYzogJXUgXG4iLCBhLCBiLCBjKTsKLQllbHNlCi0JCW5leHRfc3RhdGVtZW50OwotfQogCiAJCUNoYXB0ZXIgMzogUGxhY2luZyBCcmFjZXMgYW5kIFNwYWNlcwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCmluZGV4IDY3OTAzNGMuLjcyMGYyNDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlCkBAIC04LDQgKzgsNyBAQAogKi5kdmkKICoubG9nCiAqLm91dAotbWVkaWEvCisqLnBuZworKi5naWYKK21lZGlhLWluZGljZXMudG1wbAorbWVkaWEtZW50aXRpZXMudG1wbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IDNjZWJmYTAuLjY2NzI1YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDkgQEAKIAkgICAgZ2VuZXJpY2lycS54bWwgczM5MC1kcml2ZXJzLnhtbCB1aW8taG93dG8ueG1sIHNjc2kueG1sIFwKIAkgICAgODAyMTEueG1sIGRlYnVnb2JqZWN0cy54bWwgc2gueG1sIHJlZ3VsYXRvci54bWwgXAogCSAgICBhbHNhLWRyaXZlci1hcGkueG1sIHdyaXRpbmctYW4tYWxzYS1kcml2ZXIueG1sIFwKLQkgICAgdHJhY2Vwb2ludC54bWwgbWVkaWEueG1sIGRybS54bWwKKwkgICAgdHJhY2Vwb2ludC54bWwgZHJtLnhtbCBtZWRpYV9hcGkueG1sCisKK2luY2x1ZGUgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvTWFrZWZpbGUKIAogIyMjCiAjIFRoZSBidWlsZCBwcm9jZXNzIGlzIGFzIGZvbGxvd3MgKHRhcmdldHMpOgpAQCAtMzIsNyArMzQsNyBAQAogCiAjIyMKICMgVGhlIHRhcmdldHMgdGhhdCBtYXkgYmUgdXNlZC4KLVBIT05ZICs9IHhtbGRvY3Mgc2dtbGRvY3MgcHNkb2NzIHBkZmRvY3MgaHRtbGRvY3MgbWFuZG9jcyBpbnN0YWxsbWFuZG9jcyBjbGVhbmRvY3MgeG1sZG9jbGlua3MKK1BIT05ZICs9IHhtbGRvY3Mgc2dtbGRvY3MgcHNkb2NzIHBkZmRvY3MgaHRtbGRvY3MgbWFuZG9jcyBpbnN0YWxsbWFuZG9jcyBjbGVhbmRvY3MKIAogQk9PS1MgOj0gJChhZGRwcmVmaXggJChvYmopLywkKERPQ0JPT0tTKSkKIHhtbGRvY3M6ICQoQk9PS1MpCkBAIC00NSwyNyArNDcsMTQgQEAKIHBkZmRvY3M6ICQoUERGKQogCiBIVE1MIDo9ICQoc29ydCAkKHBhdHN1YnN0ICUueG1sLCAlLmh0bWwsICQoQk9PS1MpKSkKLWh0bWxkb2NzOiAkKEhUTUwpIHhtbGRvY2xpbmtzCitodG1sZG9jczogJChIVE1MKQogCSQoY2FsbCBidWlsZF9tYWluX2luZGV4KQogCSQoY2FsbCBidWlsZF9pbWFnZXMpCisJJChjYWxsIGluc3RhbGxfbWVkaWFfaW1hZ2VzKQogCiBNQU4gOj0gJChwYXRzdWJzdCAlLnhtbCwgJS45LCAkKEJPT0tTKSkKIG1hbmRvY3M6ICQoTUFOKQogCi1idWlsZF9pbWFnZXMgPSBta2RpciAtcCAkKG9ianRyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS8gJiYgXAotCSAgICAgICBjcCAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvKi5wbmcgXAotCSAgICAgICAgICAkKHNyY3RyZWUpL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvKi5naWYgXAotCQkgICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLwotCi14bWxkb2NsaW5rczoKLWlmbmVxICgkKG9ianRyZWUpLCQoc3JjdHJlZSkpCi0JZm9yIGRlcCBpbiBkdmIgbWVkaWEtZW50aXRpZXMudG1wbCBtZWRpYS1pbmRpY2VzLnRtcGwgdjRsOyBkbyBcCi0JCXJtIC1mICQob2JqdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLyQkZGVwIFwKLQkJJiYgbG4gLXMgJChzcmN0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svJCRkZXAgJChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svIFwKLQkJfHwgZXhpdDsgXAotCWRvbmUKLWVuZGlmCi0KIGluc3RhbGxtYW5kb2NzOiBtYW5kb2NzCiAJbWtkaXIgLXAgL3Vzci9sb2NhbC9tYW4vbWFuOS8KIAlpbnN0YWxsIERvY3VtZW50YXRpb24vRG9jQm9vay9tYW4vKi45Lmd6IC91c3IvbG9jYWwvbWFuL21hbjkvCkBAIC05NywxMSArODYsMTEgQEAKICAgICAgICAgKSA+ICQoZGlyICRAKS4kKG5vdGRpciAkQCkuY21kCiBlbmRlZgogCi0lLnhtbDogJS50bXBsIHhtbGRvY2xpbmtzIEZPUkNFCislLnhtbDogJS50bXBsIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfcnVsZSxkb2Nwcm9jKQogCiAjIyMKLSNSZWFkIGluIGFsbCBzYXZlZCBkZXBlbmRlbmN5IGZpbGVzIAorI1JlYWQgaW4gYWxsIHNhdmVkIGRlcGVuZGVuY3kgZmlsZXMKIGNtZF9maWxlcyA6PSAkKHdpbGRjYXJkICQoZm9yZWFjaCBmLCQoQk9PS1MpLCQoZGlyICQoZikpLiQobm90ZGlyICQoZikpLmNtZCkpCiAKIGlmbmVxICgkKGNtZF9maWxlcyksKQpAQCAtMTUwLDcgKzEzOSw3IEBACiAKIGluZGV4ID0gaW5kZXguaHRtbAogbWFpbl9pZHggPSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svJChpbmRleCkKLWJ1aWxkX21haW5faW5kZXggPSBybSAtcmYgJChtYWluX2lkeCkgJiYgXAorYnVpbGRfbWFpbl9pbmRleCA9IHJtIC1yZiAkKG1haW5faWR4KTsgXAogCQkgICBlY2hvICc8aDE+TGludXggS2VybmVsIEhUTUwgRG9jdW1lbnRhdGlvbjwvaDE+JyA+PiAkKG1haW5faWR4KSAmJiBcCiAJCSAgIGVjaG8gJzxoMj5LZXJuZWwgVmVyc2lvbjogJChLRVJORUxWRVJTSU9OKTwvaDI+JyA+PiAkKG1haW5faWR4KSAmJiBcCiAJCSAgIGNhdCAkKEhUTUwpID4+ICQobWFpbl9pZHgpCkBAIC0yNDIsNyArMjMxLDcgQEAKIAogY2xlYW4tZGlycyA6PSAkKHBhdHN1YnN0ICUueG1sLCUsJChET0NCT09LUykpIG1hbgogCi1jbGVhbmRvY3M6CitjbGVhbmRvY3M6IGNsZWFubWVkaWFkb2NzCiAJJChRKXJtIC1mICQoY2FsbCBvYmplY3RpZnksICQoY2xlYW4tZmlsZXMpKQogCSQoUSlybSAtcmYgJChjYWxsIG9iamVjdGlmeSwgJChjbGVhbi1kaXJzKSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJwcm9wZXJ0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzNjVmNi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnByb3BlcnR5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi08c2VjdGlvbiBpZD0iRkVfR0VUX1NFVF9QUk9QRVJUWSI+Ci08dGl0bGU+RkVfR0VUX1BST1BFUlRZL0ZFX1NFVF9QUk9QRVJUWTwvdGl0bGU+Ci0KLTxwcm9ncmFtbGlzdGluZz4KLS8qIFJlc2VydmVkIGZpZWxkcyBzaG91bGQgYmUgc2V0IHRvIDAgKi8KLXN0cnVjdCBkdHZfcHJvcGVydHkgewotCV9fdTMyIGNtZDsKLQl1bmlvbiB7Ci0JCV9fdTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQlfX3U4IGRhdGFbMzJdOwotCQkJX191MzIgbGVuOwotCQkJX191MzIgcmVzZXJ2ZWQxWzNdOwotCQkJdm9pZCAqcmVzZXJ2ZWQyOwotCQl9IGJ1ZmZlcjsKLQl9IHU7Ci0JaW50IHJlc3VsdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBudW0gb2YgcHJvcGVydGllcyBjYW5ub3QgZXhjZWVkIERUVl9JT0NUTF9NQVhfTVNHUyBwZXIgaW9jdGwgKi8KLSNkZWZpbmUgRFRWX0lPQ1RMX01BWF9NU0dTIDY0Ci0KLXN0cnVjdCBkdHZfcHJvcGVydGllcyB7Ci0JX191MzIgbnVtOwotCXN0cnVjdCBkdHZfcHJvcGVydHkgKnByb3BzOwotfTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0KLTxzZWN0aW9uIGlkPSJGRV9HRVRfUFJPUEVSVFkiPgotPHRpdGxlPkZFX0dFVF9QUk9QRVJUWTwvdGl0bGU+Ci08cGFyYT5ERVNDUklQVElPTgotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5UaGlzIGlvY3RsIGNhbGwgcmV0dXJucyBvbmUgb3IgbW9yZSBmcm9udGVuZCBwcm9wZXJ0aWVzLiBUaGlzIGNhbGwgb25seQotIHJlcXVpcmVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+U1lOT1BTSVMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSA8bGluayBsaW5rZW5kPSJGRV9HRVRfUFJPUEVSVFkiPkZFX0dFVF9QUk9QRVJUWTwvbGluaz4sCi0gZHR2X3Byb3BlcnRpZXMgJiN4MjJDNjtwcm9wcyk7PC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPlBBUkFNRVRFUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5IGFsaWduPSJjaGFyIj4KLTxwYXJhPmludCBmZDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmludCBudW08L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVxdWFscyA8bGluayBsaW5rZW5kPSJGRV9HRVRfUFJPUEVSVFkiPkZFX0dFVF9QUk9QRVJUWTwvbGluaz4gZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+c3RydWN0IGR0dl9wcm9wZXJ0eSAqcHJvcHM8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZyb250LWVuZCBwcm9wZXJ0eSBjb21tYW5kcyBhcmUgc3RvcmVkLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlM8L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PgotICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkVJTlZBTDwvcGFyYT48L2VudHJ5PgotICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkludmFsaWQgcGFyYW1ldGVyKHMpIHJlY2VpdmVkIG9yIG51bWJlciBvZiBwYXJhbWV0ZXJzIG91dCBvZiB0aGUgcmFuZ2UuPC9wYXJhPjwvZW50cnk+Ci0gPC9yb3c+PHJvdz4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5FTk9NRU08L3BhcmE+PC9lbnRyeT4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5PdXQgb2YgbWVtb3J5LjwvcGFyYT48L2VudHJ5PgotIDwvcm93Pjxyb3c+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RUZBVUxUPC9wYXJhPjwvZW50cnk+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RmFpbHVyZSB3aGlsZSBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UuPC9wYXJhPjwvZW50cnk+Ci0gPC9yb3c+PHJvdz4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5FT1BOT1RTVVBQPC9wYXJhPjwvZW50cnk+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+UHJvcGVydHkgdHlwZSBub3Qgc3VwcG9ydGVkLjwvcGFyYT48L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0iRkVfU0VUX1BST1BFUlRZIj4KLTx0aXRsZT5GRV9TRVRfUFJPUEVSVFk8L3RpdGxlPgotPHBhcmE+REVTQ1JJUFRJT04KLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHNldHMgb25lIG9yIG1vcmUgZnJvbnRlbmQgcHJvcGVydGllcy4gVGhpcyBjYWxsIG9ubHkKLSByZXF1aXJlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXZpY2UuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPlNZTk9QU0lTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gPGxpbmsgbGlua2VuZD0iRkVfU0VUX1BST1BFUlRZIj5GRV9TRVRfUFJPUEVSVFk8L2xpbms+LAotIGR0dl9wcm9wZXJ0aWVzICYjeDIyQzY7cHJvcHMpOzwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5QQVJBTUVURVJTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeSBhbGlnbj0iY2hhciI+Ci08cGFyYT5pbnQgZmQ8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5pbnQgbnVtPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FcXVhbHMgPGxpbmsgbGlua2VuZD0iRkVfU0VUX1BST1BFUlRZIj5GRV9TRVRfUFJPUEVSVFk8L2xpbms+IGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPnN0cnVjdCBkdHZfcHJvcGVydHkgKnByb3BzPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5Qb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmcm9udC1lbmQgcHJvcGVydHkgY29tbWFuZHMgYXJlIHN0b3JlZC48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PgotICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkVJTlZBTDwvcGFyYT48L2VudHJ5PgotICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkludmFsaWQgcGFyYW1ldGVyKHMpIHJlY2VpdmVkIG9yIG51bWJlciBvZiBwYXJhbWV0ZXJzIG91dCBvZiB0aGUgcmFuZ2UuPC9wYXJhPjwvZW50cnk+Ci0gPC9yb3c+PHJvdz4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5FTk9NRU08L3BhcmE+PC9lbnRyeT4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5PdXQgb2YgbWVtb3J5LjwvcGFyYT48L2VudHJ5PgotIDwvcm93Pjxyb3c+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RUZBVUxUPC9wYXJhPjwvZW50cnk+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RmFpbHVyZSB3aGlsZSBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UuPC9wYXJhPjwvZW50cnk+Ci0gPC9yb3c+PHJvdz4KLSAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5FT1BOT1RTVVBQPC9wYXJhPjwvZW50cnk+Ci0gIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+UHJvcGVydHkgdHlwZSBub3Qgc3VwcG9ydGVkLjwvcGFyYT48L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbj4KLQk8dGl0bGU+UHJvcGVydHkgdHlwZXM8L3RpdGxlPgotPHBhcmE+Ci1PbiA8bGluayBsaW5rZW5kPSJGRV9HRVRfUFJPUEVSVFkiPkZFX0dFVF9QUk9QRVJUWTwvbGluaz4vPGxpbmsgbGlua2VuZD0iRkVfU0VUX1BST1BFUlRZIj5GRV9TRVRfUFJPUEVSVFk8L2xpbms+LAotdGhlIGFjdHVhbCBhY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgZHR2X3Byb3BlcnR5IGNtZC9kYXRhIHBhaXJzLiBXaXRoIG9uZSBzaW5nbGUgaW9jdGwsIGlzIHBvc3NpYmxlIHRvCi1nZXQvc2V0IHVwIHRvIDY0IHByb3BlcnRpZXMuIFRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoIHByb3BlcnR5IGlzIGRlc2NyaWJlZCBvbiB0aGUgbmV4dCBzZWN0aW9ucy4KLTwvcGFyYT4KLQotPHBhcmE+VGhlIGF2YWlsYWJsZSBmcm9udGVuZCBwcm9wZXJ0eSB0eXBlcyBhcmU6PC9wYXJhPgotPHByb2dyYW1saXN0aW5nPgotI2RlZmluZSBEVFZfVU5ERUZJTkVECQkwCi0jZGVmaW5lIERUVl9UVU5FCQkxCi0jZGVmaW5lIERUVl9DTEVBUgkJMgotI2RlZmluZSBEVFZfRlJFUVVFTkNZCQkzCi0jZGVmaW5lIERUVl9NT0RVTEFUSU9OCQk0Ci0jZGVmaW5lIERUVl9CQU5EV0lEVEhfSFoJNQotI2RlZmluZSBEVFZfSU5WRVJTSU9OCQk2Ci0jZGVmaW5lIERUVl9ESVNFUUNfTUFTVEVSCTcKLSNkZWZpbmUgRFRWX1NZTUJPTF9SQVRFCQk4Ci0jZGVmaW5lIERUVl9JTk5FUl9GRUMJCTkKLSNkZWZpbmUgRFRWX1ZPTFRBR0UJCTEwCi0jZGVmaW5lIERUVl9UT05FCQkxMQotI2RlZmluZSBEVFZfUElMT1QJCTEyCi0jZGVmaW5lIERUVl9ST0xMT0ZGCQkxMwotI2RlZmluZSBEVFZfRElTRVFDX1NMQVZFX1JFUExZCTE0Ci0jZGVmaW5lIERUVl9GRV9DQVBBQklMSVRZX0NPVU5UCTE1Ci0jZGVmaW5lIERUVl9GRV9DQVBBQklMSVRZCTE2Ci0jZGVmaW5lIERUVl9ERUxJVkVSWV9TWVNURU0JMTcKLSNkZWZpbmUgRFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OCTE4Ci0jZGVmaW5lIERUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkcJMTkKLSNkZWZpbmUgRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQJMjAKLSNkZWZpbmUgRFRWX0lTREJUX1NCX1NFR01FTlRfSURYCTIxCi0jZGVmaW5lIERUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UCTIyCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfRkVDCQkJMjMKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OCQkyNAotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQJCTI1Ci0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcJMjYKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9GRUMJCQkyNwotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT04JCTI4Ci0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVAkJMjkKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9USU1FX0lOVEVSTEVBVklORwkzMAotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX0ZFQwkJCTMxCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfTU9EVUxBVElPTgkJMzIKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5UCQkzMwotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX1RJTUVfSU5URVJMRUFWSU5HCTM0Ci0jZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJMzUKLSNkZWZpbmUgRFRWX0NPREVfUkFURV9IUAkzNgotI2RlZmluZSBEVFZfQ09ERV9SQVRFX0xQCTM3Ci0jZGVmaW5lIERUVl9HVUFSRF9JTlRFUlZBTAkzOAotI2RlZmluZSBEVFZfVFJBTlNNSVNTSU9OX01PREUJMzkKLSNkZWZpbmUgRFRWX0hJRVJBUkNIWQkJNDAKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSX0VOQUJMRUQJNDEKLSNkZWZpbmUgRFRWX0lTREJTX1RTX0lECQk0MgotPC9wcm9ncmFtbGlzdGluZz4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9ImZlX3Byb3BlcnR5X2NvbW1vbiI+Ci0JPHRpdGxlPlBhcmFtZXRlcnMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBEaWdpdGFsIFRWIHN0YW5kYXJkczwvdGl0bGU+Ci0JPHNlY3Rpb24gaWQ9IkRUVl9GUkVRVUVOQ1kiPgotCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJPHBhcmE+Q2VudHJhbCBmcmVxdWVuY3kgb2YgdGhlIGNoYW5uZWwsIGluIEhaLjwvcGFyYT4KLQotCQk8cGFyYT5Ob3Rlczo8L3BhcmE+Ci0JCTxwYXJhPjEpRm9yIElTREItVCwgdGhlIGNoYW5uZWxzIGFyZSB1c3VhbGx5IHRyYW5zbWl0dGVkIHdpdGggYW4gb2Zmc2V0IG9mIDE0M2tIei4KLQkJCUUuZy4gYSB2YWxpZCBmcmVxdW5jeSBjb3VsZCBiZSA0NzQxNDMga0h6LiBUaGUgc3RlcHBpbmcgaXMgYm91bmQgdG8gdGhlIGJhbmR3aWR0aCBvZgotCQkJdGhlIGNoYW5uZWwgd2hpY2ggaXMgNk1Iei48L3BhcmE+Ci0KLQkJPHBhcmE+MilBcyBpbiBJU0RCLVRzYiB0aGUgY2hhbm5lbCBjb25zaXN0cyBvZiBvbmx5IG9uZSBvciB0aHJlZSBzZWdtZW50cyB0aGUKLQkJCWZyZXF1ZW5jeSBzdGVwIGlzIDQyOWtIeiwgMyo0MjkgcmVzcGVjdGl2ZWx5LiBBcyBmb3IgSVNEQi1UIHRoZQotCQkJY2VudHJhbCBmcmVxdWVuY3kgb2YgdGhlIGNoYW5uZWwgaXMgZXhwZWN0ZWQuPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJEVFZfQkFORFdJRFRIX0haIj4KLQkJPHRpdGxlPjxjb25zdGFudD5EVFZfQkFORFdJRFRIX0haPC9jb25zdGFudD48L3RpdGxlPgotCi0JCTxwYXJhPkJhbmR3aWR0aCBmb3IgdGhlIGNoYW5uZWwsIGluIEhaLjwvcGFyYT4KLQotCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6Ci0JCQk8Y29uc3RhbnQ+MTcxMjAwMDwvY29uc3RhbnQ+LAotCQkJPGNvbnN0YW50PjUwMDAwMDA8L2NvbnN0YW50PiwKLQkJCTxjb25zdGFudD42MDAwMDAwPC9jb25zdGFudD4sCi0JCQk8Y29uc3RhbnQ+NzAwMDAwMDwvY29uc3RhbnQ+LAotCQkJPGNvbnN0YW50PjgwMDAwMDA8L2NvbnN0YW50PiwKLQkJCTxjb25zdGFudD4xMDAwMDAwMDwvY29uc3RhbnQ+LgotCQk8L3BhcmE+Ci0KLQkJPHBhcmE+Tm90ZXM6PC9wYXJhPgotCi0JCTxwYXJhPjEpIEZvciBJU0RCLVQgaXQgc2hvdWxkIGJlIGFsd2F5cyA2MDAwMDAwSHogKDZNSHopPC9wYXJhPgotCQk8cGFyYT4yKSBGb3IgSVNEQi1Uc2IgaXQgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29ubmVjdGVkIHNlZ21lbnRzPC9wYXJhPgotCQk8cGFyYT4zKSBCYW5kd2lkdGggZG9lc24ndCBhcHBseSBmb3IgRFZCLUMgdHJhbnNtaXNzaW9ucywgYXMgdGhlIGJhbmR3aWR0aAotCQkJIGZvciBEVkItQyBkZXBlbmRzIG9uIHRoZSBzeW1ib2wgcmF0ZTwvcGFyYT4KLQkJPHBhcmE+NCkgQmFuZHdpZHRoIGluIElTREItVCBpcyBmaXhlZCAoNk1Ieikgb3IgY2FuIGJlIGVhc2lseSBkZXJpdmVkIGZyb20KLQkJCW90aGVyIHBhcmFtZXRlcnMgKERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWCwKLQkJCURUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UKS48L3BhcmE+Ci0JCTxwYXJhPjUpIERWQi1UIHN1cHBvcnRzIDYsIDcgYW5kIDhNSHouPC9wYXJhPgotCQk8cGFyYT42KSBJbiBhZGRpdGlvbiwgRFZCLVQyIHN1cHBvcnRzIDEuMTcyLCA1IGFuZCAxME1Iei48L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0JPHNlY3Rpb24gaWQ9IkRUVl9ERUxJVkVSWV9TWVNURU0iPgotCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9ERUxJVkVSWV9TWVNURU08L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJPHBhcmE+U3BlY2lmaWVzIHRoZSB0eXBlIG9mIERlbGl2ZXJ5IHN5c3RlbTwvcGFyYT4KLQotCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDwvcGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXR5cGVkZWYgZW51bSBmZV9kZWxpdmVyeV9zeXN0ZW0gewotCVNZU19VTkRFRklORUQsCi0JU1lTX0RWQkNfQU5ORVhfQUMsCi0JU1lTX0RWQkNfQU5ORVhfQiwKLQlTWVNfRFZCVCwKLQlTWVNfRFNTLAotCVNZU19EVkJTLAotCVNZU19EVkJTMiwKLQlTWVNfRFZCSCwKLQlTWVNfSVNEQlQsCi0JU1lTX0lTREJTLAotCVNZU19JU0RCQywKLQlTWVNfQVRTQywKLQlTWVNfQVRTQ01ILAotCVNZU19ETUJUSCwKLQlTWVNfQ01NQiwKLQlTWVNfREFCLAotCVNZU19EVkJUMiwKLX0gZmVfZGVsaXZlcnlfc3lzdGVtX3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotCi0JPC9zZWN0aW9uPgotCi0JPHNlY3Rpb24gaWQ9IkRUVl9UUkFOU01JU1NJT05fTU9ERSI+Ci0JCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1RSQU5TTUlTU0lPTl9NT0RFPC9jb25zdGFudD48L3RpdGxlPgotCi0JCTxwYXJhPlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNhcnJpZXJzIHVzZWQgYnkgdGhlIHN0YW5kYXJkPC9wYXJhPgotCi0JCTxwYXJhPlBvc3NpYmxlIHZhbHVlcyBhcmU6PC9wYXJhPgotPHByb2dyYW1saXN0aW5nPgotdHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgewotCVRSQU5TTUlTU0lPTl9NT0RFXzJLLAotCVRSQU5TTUlTU0lPTl9NT0RFXzhLLAotCVRSQU5TTUlTU0lPTl9NT0RFX0FVVE8sCi0JVFJBTlNNSVNTSU9OX01PREVfNEssCi0JVFJBTlNNSVNTSU9OX01PREVfMUssCi0JVFJBTlNNSVNTSU9OX01PREVfMTZLLAotCVRSQU5TTUlTU0lPTl9NT0RFXzMySywKLX0gZmVfdHJhbnNtaXRfbW9kZV90OwotPC9wcm9ncmFtbGlzdGluZz4KLQotCQk8cGFyYT5Ob3Rlczo8L3BhcmE+Ci0JCTxwYXJhPjEpIElTREItVCBzdXBwb3J0cyB0aHJlZSBjYXJyaWVyL3N5bWJvbC1zaXplOiA4SywgNEssIDJLLiBJdCBpcyBjYWxsZWQKLQkJCSdtb2RlJyBpbiB0aGUgc3RhbmRhcmQ6IE1vZGUgMSBpcyAySywgbW9kZSAyIGlzIDRLLCBtb2RlIDMgaXMgOEs8L3BhcmE+Ci0KLQkJPHBhcmE+MikgSWYgPGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+IGlzIHNldCB0aGUgPGNvbnN0YW50PlRSQU5TTUlTU0lPTl9NT0RFX0FVVE88L2NvbnN0YW50PiB0aGUKLQkJCWhhcmR3YXJlIHdpbGwgdHJ5IHRvIGZpbmQgdGhlIGNvcnJlY3QgRkZULXNpemUgKGlmIGNhcGFibGUpIGFuZCB3aWxsCi0JCQl1c2UgVE1DQyB0byBmaWxsIGluIHRoZSBtaXNzaW5nIHBhcmFtZXRlcnMuPC9wYXJhPgotCQk8cGFyYT4zKSBEVkItVCBzcGVjaWZpZXMgMksgYW5kIDhLIGFzIHZhbGlkIHNpemVzLjwvcGFyYT4KLQkJPHBhcmE+NCkgRFZCLVQyIHNwZWNpZmllcyAxSywgMkssIDRLLCA4SywgMTZLIGFuZCAzMksuPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJEVFZfR1VBUkRfSU5URVJWQUwiPgotCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9HVUFSRF9JTlRFUlZBTDwvY29uc3RhbnQ+PC90aXRsZT4KLQotCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXMgYXJlOjwvcGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXR5cGVkZWYgZW51bSBmZV9ndWFyZF9pbnRlcnZhbCB7Ci0JR1VBUkRfSU5URVJWQUxfMV8zMiwKLQlHVUFSRF9JTlRFUlZBTF8xXzE2LAotCUdVQVJEX0lOVEVSVkFMXzFfOCwKLQlHVUFSRF9JTlRFUlZBTF8xXzQsCi0JR1VBUkRfSU5URVJWQUxfQVVUTywKLQlHVUFSRF9JTlRFUlZBTF8xXzEyOCwKLQlHVUFSRF9JTlRFUlZBTF8xOV8xMjgsCi0JR1VBUkRfSU5URVJWQUxfMTlfMjU2LAotfSBmZV9ndWFyZF9pbnRlcnZhbF90OwotPC9wcm9ncmFtbGlzdGluZz4KLQotCQk8cGFyYT5Ob3Rlczo8L3BhcmE+Ci0JCTxwYXJhPjEpIElmIDxjb25zdGFudD5EVFZfR1VBUkRfSU5URVJWQUw8L2NvbnN0YW50PiBpcyBzZXQgdGhlIDxjb25zdGFudD5HVUFSRF9JTlRFUlZBTF9BVVRPPC9jb25zdGFudD4gdGhlIGhhcmR3YXJlIHdpbGwKLQkJCXRyeSB0byBmaW5kIHRoZSBjb3JyZWN0IGd1YXJkIGludGVydmFsIChpZiBjYXBhYmxlKSBhbmQgd2lsbCB1c2UgVE1DQyB0byBmaWxsCi0JCQlpbiB0aGUgbWlzc2luZyBwYXJhbWV0ZXJzLjwvcGFyYT4KLQkJPHBhcmE+MikgSW50ZXJ2YWxzIDEvMTI4LCAxOS8xMjggYW5kIDE5LzI1NiBhcmUgdXNlZCBvbmx5IGZvciBEVkItVDIgYXQgcHJlc2VudDwvcGFyYT4KLQk8L3NlY3Rpb24+Ci08L3NlY3Rpb24+Ci0KLTxzZWN0aW9uIGlkPSJpc2RidCI+Ci0JPHRpdGxlPklTREItVCBmcm9udGVuZDwvdGl0bGU+Ci0JPHBhcmE+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzaG9ydGx5IHdoYXQgYXJlIHRoZSBwb3NzaWJsZSBwYXJhbWV0ZXJzIGluIHRoZSBMaW51eAotCQlEVkItQVBJIGNhbGxlZCAiUzJBUEkiIGFuZCBub3cgRFZCIEFQSSA1IGluIG9yZGVyIHRvIHR1bmUgYW4gSVNEQi1UL0lTREItVHNiCi0JCWRlbW9kdWxhdG9yOjwvcGFyYT4KLQotCTxwYXJhPlRoaXMgSVNEQi1UL0lTREItVHNiIEFQSSBleHRlbnNpb24gc2hvdWxkIHJlZmxlY3QgYWxsIGluZm9ybWF0aW9uCi0JCW5lZWRlZCB0byB0dW5lIGFueSBJU0RCLVQvSVNEQi1Uc2IgaGFyZHdhcmUuIE9mIGNvdXJzZSBpdCBpcyBwb3NzaWJsZQotCQl0aGF0IHNvbWUgdmVyeSBzb3BoaXN0aWNhdGVkIGRldmljZXMgd29uJ3QgbmVlZCBjZXJ0YWluIHBhcmFtZXRlcnMgdG8KLQkJdHVuZS48L3BhcmE+Ci0KLQk8cGFyYT5UaGUgaW5mb3JtYXRpb24gZ2l2ZW4gaGVyZSBzaG91bGQgaGVscCBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGtub3cgaG93Ci0JCXRvIGhhbmRsZSBJU0RCLVQgYW5kIElTREItVHNiIGhhcmR3YXJlIHVzaW5nIHRoZSBMaW51eCBEVkItQVBJLjwvcGFyYT4KLQotCTxwYXJhPlRoZSBkZXRhaWxzIGdpdmVuIGhlcmUgYWJvdXQgSVNEQi1UIGFuZCBJU0RCLVRzYiBhcmUganVzdCBlbm91Z2ggdG8KLQkJYmFzaWNhbGx5IHNob3cgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBuZWVkZWQgcGFyYW1ldGVyIHZhbHVlcywKLQkJYnV0IHN1cmVseSBzb21lIGluZm9ybWF0aW9uIGlzIGxlZnQgb3V0LiBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbgotCQlzZWUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHM6PC9wYXJhPgotCi0JPHBhcmE+QVJJQiBTVEQtQjMxIC0gIlRyYW5zbWlzc2lvbiBTeXN0ZW0gZm9yIERpZ2l0YWwgVGVycmVzdHJpYWwKLQkJVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmciIGFuZDwvcGFyYT4KLQk8cGFyYT5BUklCIFRSLUIxNCAtICJPcGVyYXRpb25hbCBHdWlkZWxpbmVzIGZvciBEaWdpdGFsIFRlcnJlc3RyaWFsCi0JCVRlbGV2aXNpb24gQnJvYWRjYXN0aW5nIi48L3BhcmE+Ci0KLQk8cGFyYT5JbiBvcmRlciB0byByZWFkIHRoaXMgZG9jdW1lbnQgb25lIGhhcyB0byBoYXZlIHNvbWUga25vd2xlZGdlIHRoZQotCQljaGFubmVsIHN0cnVjdHVyZSBpbiBJU0RCLVQgYW5kIElTREItVHNiLiBJLmUuIGl0IGhhcyB0byBiZSBrbm93biB0bwotCQl0aGUgcmVhZGVyIHRoYXQgYW4gSVNEQi1UIGNoYW5uZWwgY29uc2lzdHMgb2YgMTMgc2VnbWVudHMsIHRoYXQgaXQgY2FuCi0JCWhhdmUgdXAgdG8gMyBsYXllciBzaGFyaW5nIHRob3NlIHNlZ21lbnRzLCBhbmQgdGhpbmdzIGxpa2UgdGhhdC48L3BhcmE+Ci0KLQk8cGFyYT5QYXJhbWV0ZXJzIHVzZWQgYnkgSVNEQi1UIGFuZCBJU0RCLVRzYi48L3BhcmE+Ci0KLQk8c2VjdGlvbiBpZD0iaXNkYnQtbmV3LXBhcm1zIj4KLQkJPHRpdGxlPklTREItVCBvbmx5IHBhcmFtZXRlcnM8L3RpdGxlPgotCi0JCTxzZWN0aW9uIGlkPSJpc2RidC1wYXJ0LXJlYyI+Ci0JCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+PC90aXRsZT4KLQotCQkJPHBhcmE+PGNvbnN0YW50PklmIERUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMCcgdGhpcyBiaXQtZmllbGQgcmVwcmVzZW50cyB3aGV0aGVyCi0JCQkJdGhlIGNoYW5uZWwgaXMgaW4gcGFydGlhbCByZWNlcHRpb24gbW9kZSBvciBub3QuPC9wYXJhPgotCi0JCQk8cGFyYT5JZiAnMScgPGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkFfKjwvY29uc3RhbnQ+IHZhbHVlcyBhcmUgYXNzaWduZWQgdG8gdGhlIGNlbnRlciBzZWdtZW50IGFuZAotCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBoYXMgdG8gYmUgJzEnLjwvcGFyYT4KLQotCQkJPHBhcmE+SWYgaW4gYWRkaXRpb24gPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScKLQkJCQk8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD4gcmVwcmVzZW50cyB3aGV0aGVyIHRoaXMgSVNEQi1Uc2IgY2hhbm5lbAotCQkJCWlzIGNvbnNpc3Rpbmcgb2Ygb25lIHNlZ21lbnQgYW5kIGxheWVyIG9yIHRocmVlIHNlZ21lbnRzIGFuZCB0d28gbGF5ZXJzLjwvcGFyYT4KLQotCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAwLCAxLCAtMSAoQVVUTyk8L3BhcmE+Ci0JCTwvc2VjdGlvbj4KLQotCQk8c2VjdGlvbiBpZD0iaXNkYnQtc291bmQtYmNhc3QiPgotCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD48L3RpdGxlPgotCi0JCQk8cGFyYT5UaGlzIGZpZWxkIHJlcHJlc2VudHMgd2hldGhlciB0aGUgb3RoZXIgRFRWX0lTREJUXyotcGFyYW1ldGVycyBhcmUKLQkJCQlyZWZlcnJpbmcgdG8gYW4gSVNEQi1UIGFuZCBhbiBJU0RCLVRzYiBjaGFubmVsLiAoU2VlIGFsc28KLQkJCQk8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD4pLjwvcGFyYT4KLQotCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAwLCAxLCAtMSAoQVVUTyk8L3BhcmE+Ci0JCTwvc2VjdGlvbj4KLQotCQk8c2VjdGlvbiBpZD0iaXNkYnQtc2ItY2gtaWQiPgotCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU1VCQ0hBTk5FTF9JRDwvY29uc3RhbnQ+PC90aXRsZT4KLQotCQkJPHBhcmE+VGhpcyBmaWVsZCBvbmx5IGFwcGxpZXMgaWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMScuPC9wYXJhPgotCi0JCQk8cGFyYT4oTm90ZSBvZiB0aGUgYXV0aG9yOiBUaGlzIG1pZ2h0IG5vdCBiZSB0aGUgY29ycmVjdCBkZXNjcmlwdGlvbiBvZiB0aGUKLQkJCQk8Y29uc3RhbnQ+U1VCQ0hBTk5FTC1JRDwvY29uc3RhbnQ+IGluIGFsbCBkZXRhaWxzLCBidXQgaXQgaXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGVjaG5pY2FsCi0JCQkJYmFja2dyb3VuZCBuZWVkZWQgdG8gcHJvZ3JhbSBhIGRldmljZSk8L3BhcmE+Ci0KLQkJCTxwYXJhPkFuIElTREItVHNiIGNoYW5uZWwgKDEgb3IgMyBzZWdtZW50cykgY2FuIGJlIGJyb2FkY2FzdGVkIGFsb25lIG9yIGluIGEKLQkJCQlzZXQgb2YgY29ubmVjdGVkIElTREItVHNiIGNoYW5uZWxzLiBJbiB0aGlzIHNldCBvZiBjaGFubmVscyBldmVyeQotCQkJCWNoYW5uZWwgY2FuIGJlIHJlY2VpdmVkIGluZGVwZW5kZW50bHkuIFRoZSBudW1iZXIgb2YgY29ubmVjdGVkCi0JCQkJSVNEQi1Uc2Igc2VnbWVudCBjYW4gdmFyeSwgZS5nLiBkZXBlbmRpbmcgb24gdGhlIGZyZXF1ZW5jeSBzcGVjdHJ1bQotCQkJCWJhbmR3aWR0aCBhdmFpbGFibGUuPC9wYXJhPgotCi0JCQk8cGFyYT5FeGFtcGxlOiBBc3N1bWUgOCBJU0RCLVRzYiBjb25uZWN0ZWQgc2VnbWVudHMgYXJlIGJyb2FkY2FzdGVkLiBUaGUKLQkJCQlicm9hZGNhc3RlciBoYXMgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIHRvIHB1dCB0aG9zZSBjaGFubmVscyBpbiB0aGUKLQkJCQlhaXI6IEFzc3VtaW5nIGEgbm9ybWFsIDEzLXNlZ21lbnQgSVNEQi1UIHNwZWN0cnVtIGhlIGNhbiBhbGlnbiB0aGUgOAotCQkJCXNlZ21lbnRzIGZyb20gcG9zaXRpb24gMS04IHRvIDUtMTMgb3IgYW55dGhpbmcgaW4gYmV0d2Vlbi48L3BhcmE+Ci0KLQkJCTxwYXJhPlRoZSB1bmRlcmx5aW5nIGxheWVyIG9mIHNlZ21lbnRzIGFyZSBzdWJjaGFubmVsczogZWFjaCBzZWdtZW50IGlzCi0JCQkJY29uc2lzdGluZyBvZiBzZXZlcmFsIHN1YmNoYW5uZWxzIHdpdGggYSBwcmVkZWZpbmVkIElEcy4gQSBzdWItY2hhbm5lbAotCQkJCWlzIHVzZWQgdG8gaGVscCB0aGUgZGVtb2R1bGF0b3IgdG8gc3luY2hyb25pemUgb24gdGhlIGNoYW5uZWwuPC9wYXJhPgotCi0JCQk8cGFyYT5BbiBJU0RCLVQgY2hhbm5lbCBpcyBhbHdheXMgY2VudGVyZWQgb3ZlciBhbGwgc3ViLWNoYW5uZWxzLiBBcyBmb3IKLQkJCQl0aGUgZXhhbXBsZSBhYm92ZSwgaW4gSVNEQi1Uc2IgaXQgaXMgbm8gbG9uZ2VyIGFzIHNpbXBsZSBhcyB0aGF0LjwvcGFyYT4KLQotCQkJPHBhcmE+PGNvbnN0YW50PlRoZSBEVFZfSVNEQlRfU0JfU1VCQ0hBTk5FTF9JRDwvY29uc3RhbnQ+IHBhcmFtZXRlciBpcyB1c2VkIHRvIGdpdmUgdGhlCi0JCQkJc3ViLWNoYW5uZWwgSUQgb2YgdGhlIHNlZ21lbnQgdG8gYmUgZGVtb2R1bGF0ZWQuPC9wYXJhPgotCi0JCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAgLi4gNDEsIC0xIChBVVRPKTwvcGFyYT4KLQkJPC9zZWN0aW9uPgotCi0JCTxzZWN0aW9uIGlkPSJpc2RidC1zYi1zZWctaWR4Ij4KLQotCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9JRFg8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCTxwYXJhPlRoaXMgZmllbGQgb25seSBhcHBsaWVzIGlmIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gaXMgJzEnLjwvcGFyYT4KLQotCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDwvY29uc3RhbnQ+IGdpdmVzIHRoZSBpbmRleCBvZiB0aGUgc2VnbWVudCB0byBiZQotCQkJCWRlbW9kdWxhdGVkIGZvciBhbiBJU0RCLVRzYiBjaGFubmVsIHdoZXJlIHNldmVyYWwgb2YgdGhlbSBhcmUKLQkJCQl0cmFuc21pdHRlZCBpbiB0aGUgY29ubmVjdGVkIG1hbm5lci48L3BhcmE+Ci0KLQkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCAuLiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiAtIDE8L3BhcmE+Ci0KLQkJCTxwYXJhPk5vdGU6IFRoaXMgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYnkgYW4gYXV0b21hdGljIGNoYW5uZWwgc2VhcmNoLjwvcGFyYT4KLQkJPC9zZWN0aW9uPgotCi0JCTxzZWN0aW9uIGlkPSJpc2RidC1zYi1zZWctY250Ij4KLQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCTxwYXJhPlRoaXMgZmllbGQgb25seSBhcHBsaWVzIGlmIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gaXMgJzEnLjwvcGFyYT4KLQotCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UPC9jb25zdGFudD4gZ2l2ZXMgdGhlIHRvdGFsIGNvdW50IG9mIGNvbm5lY3RlZCBJU0RCLVRzYgotCQkJCWNoYW5uZWxzLjwvcGFyYT4KLQotCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAxIC4uIDEzPC9wYXJhPgotCi0JCQk8cGFyYT5Ob3RlOiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGFuIGF1dG9tYXRpYyBjaGFubmVsIHNlYXJjaC48L3BhcmE+Ci0JCTwvc2VjdGlvbj4KLQotCQk8c2VjdGlvbiBpZD0iaXNkYi1oaWVycS1sYXllcnMiPgotCQkJPHRpdGxlPkhpZXJhcmNoaWNhbCBsYXllcnM8L3RpdGxlPgotCi0JCQk8cGFyYT5JU0RCLVQgY2hhbm5lbHMgY2FuIGJlIGNvZGVkIGhpZXJhcmNoaWNhbGx5LiBBcyBvcHBvc2VkIHRvIERWQi1UIGluCi0JCQkJSVNEQi1UIGhpZXJhcmNoaWNhbCBsYXllcnMgY2FuIGJlIGRlY29kZWQgc2ltdWx0YW5lb3VzbHkuIEZvciB0aGF0Ci0JCQkJcmVhc29uIGEgSVNEQi1UIGRlbW9kdWxhdG9yIGhhcyAzIHZpdGVyYmkgYW5kIDMgcmVlZC1zb2xvbW9uLWRlY29kZXJzLjwvcGFyYT4KLQotCQkJPHBhcmE+SVNEQi1UIGhhcyAzIGhpZXJhcmNoaWNhbCBsYXllcnMgd2hpY2ggZWFjaCBjYW4gdXNlIGEgcGFydCBvZiB0aGUKLQkJCQlhdmFpbGFibGUgc2VnbWVudHMuIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgb3ZlciBhbGwgbGF5ZXJzIGhhcwotCQkJCXRvIDEzIGluIElTREItVC48L3BhcmE+Ci0KLQkJCTxzZWN0aW9uIGlkPSJpc2RidC1sYXllci1lbmEiPgotCQkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRUQ8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCQk8cGFyYT5IaWVyYXJjaGljYWwgcmVjZXB0aW9uIGluIElTREItVCBpcyBhY2hpZXZlZCBieSBlbmFibGluZyBvciBkaXNhYmxpbmcKLQkJCQkJbGF5ZXJzIGluIHRoZSBkZWNvZGluZyBwcm9jZXNzLiBTZXR0aW5nIGFsbCBiaXRzIG9mCi0JCQkJCTxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJfRU5BQkxFRDwvY29uc3RhbnQ+IHRvICcxJyBmb3JjZXMgYWxsIGxheWVycyAoaWYgYXBwbGljYWJsZSkgdG8gYmUKLQkJCQkJZGVtb2R1bGF0ZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQuPC9wYXJhPgotCi0JCQkJPHBhcmE+SWYgdGhlIGNoYW5uZWwgaXMgaW4gdGhlIHBhcnRpYWwgcmVjZXB0aW9uIG1vZGUKLQkJCQkJKDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PiA9IDEpIHRoZSBjZW50cmFsIHNlZ21lbnQgY2FuIGJlIGRlY29kZWQKLQkJCQkJaW5kZXBlbmRlbnRseSBvZiB0aGUgb3RoZXIgMTIgc2VnbWVudHMuIEluIHRoYXQgbW9kZSBsYXllciBBIGhhcyB0bwotCQkJCQloYXZlIGEgPGNvbnN0YW50PlNFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBvZiAxLjwvcGFyYT4KLQotCQkJCTxwYXJhPkluIElTREItVHNiIG9ubHkgbGF5ZXIgQSBpcyB1c2VkLCBpdCBjYW4gYmUgMSBvciAzIGluIElTREItVHNiCi0JCQkJCWFjY29yZGluZyB0byA8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD4uIDxjb25zdGFudD5TRUdNRU5UX0NPVU5UPC9jb25zdGFudD4gbXVzdCBiZSBmaWxsZWQKLQkJCQkJYWNjb3JkaW5nbHkuPC9wYXJhPgotCi0JCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAweDEsIDB4MiwgMHg0ICh8LWFibGUpPC9wYXJhPgotCi0JCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEWzA6MF08L2NvbnN0YW50PiAtIGxheWVyIEE8L3BhcmE+Ci0JCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEWzE6MV08L2NvbnN0YW50PiAtIGxheWVyIEI8L3BhcmE+Ci0JCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEWzI6Ml08L2NvbnN0YW50PiAtIGxheWVyIEM8L3BhcmE+Ci0JCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEWzMxOjNdPC9jb25zdGFudD4gdW51c2VkPC9wYXJhPgotCQkJPC9zZWN0aW9uPgotCi0JCQk8c2VjdGlvbiBpZD0iaXNkYnQtbGF5ZXItZmVjIj4KLQkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfRkVDPC9jb25zdGFudD48L3RpdGxlPgotCi0JCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiA8Y29uc3RhbnQ+RkVDX0FVVE88L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18xXzI8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18yXzM8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18zXzQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ181XzY8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ183Xzg8L2NvbnN0YW50PjwvcGFyYT4KLQkJCTwvc2VjdGlvbj4KLQotCQkJPHNlY3Rpb24gaWQ9ImlzZGJ0LWxheWVyLW1vZCI+Ci0JCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVIqX01PRFVMQVRJT048L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5RQU1fQVVUTzwvY29uc3RhbnQ+LCBRUDxjb25zdGFudD5TSywgUUFNXzE2PC9jb25zdGFudD4sIDxjb25zdGFudD5RQU1fNjQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD48L3BhcmE+Ci0KLQkJCQk8cGFyYT5Ob3RlOiBJZiBsYXllciBDIGlzIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+IGxheWVyIEIgaGFzIHRvIGJlIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+LiBJZiBsYXllciBCIGlzIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+Ci0JCQkJCWFuZCA8Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD49MCBsYXllciBoYXMgdG8gYmUgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD4uPC9wYXJhPgotCQkJPC9zZWN0aW9uPgotCi0JCQk8c2VjdGlvbiBpZD0iaXNkYnQtbGF5ZXItc2VnLWNudCI+Ci0JCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVIqX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAtMSAoQVVUTyk8L3BhcmE+Ci0KLQkJCQk8cGFyYT5Ob3RlOiBUcnV0aCB0YWJsZSBmb3IgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBhbmQKLQkJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+TEFZRVI8L2NvbnN0YW50PipfU0VHTUVOVF9DT1VOVDwvcGFyYT4KLQotCQkJCTxpbmZvcm1hbHRhYmxlIGlkPSJpc2RidC1sYXllcl9zZWctY250LXRhYmxlIj4KLQkJCQkJPHRncm91cCBjb2xzPSI2Ij4KLQotCQkJCQkJPHRib2R5PgotCQkJCQkJCTxyb3c+Ci0JCQkJCQkJCTxlbnRyeT5QUjwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT5TQjwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT5MYXllciBBIHdpZHRoPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PkxheWVyIEIgd2lkdGg8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+TGF5ZXIgQyB3aWR0aDwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT50b3RhbCB3aWR0aDwvZW50cnk+Ci0JCQkJCQkJPC9yb3c+Ci0KLQkJCQkJCQk8cm93PgotCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4xIC4uIDEzPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjEzPC9lbnRyeT4KLQkJCQkJCQk8L3Jvdz4KLQotCQkJCQkJCTxyb3c+Ci0JCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MTwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4xIC4uIDEzPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MTM8L2VudHJ5PgotCQkJCQkJCTwvcm93PgotCi0JCQkJCQkJPHJvdz4KLQkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MTwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MDwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KLQkJCQkJCQk8L3Jvdz4KLQotCQkJCQkJCTxyb3c+Ci0JCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MTwvZW50cnk+Ci0JCQkJCQkJCTxlbnRyeT4yPC9lbnRyeT4KLQkJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgotCQkJCQkJCQk8ZW50cnk+MTM8L2VudHJ5PgotCQkJCQkJCTwvcm93PgotCQkJCQkJPC90Ym9keT4KLQotCQkJCQk8L3Rncm91cD4KLQkJCQk8L2luZm9ybWFsdGFibGU+Ci0KLQkJCTwvc2VjdGlvbj4KLQotCQkJPHNlY3Rpb24gaWQ9ImlzZGJ0X2xheWVyX3RfaW50ZXJsIj4KLQkJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfVElNRV9JTlRFUkxFQVZJTkc8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIDIsIDMsIC0xIChBVVRPKTwvcGFyYT4KLQotCQkJCTxwYXJhPk5vdGU6IFRoZSByZWFsIGludGVyLWxlYXZlciBkZXB0aC1uYW1lcyBkZXBlbmQgb24gdGhlIG1vZGUgKGZmdC1zaXplKTsgdGhlIHZhbHVlcwotCQkJCQloZXJlIGFyZSByZWZlcnJpbmcgdG8gd2hhdCBjYW4gYmUgZm91bmQgaW4gdGhlIFRNQ0Mtc3RydWN0dXJlIC0KLQkJCQkJaW5kZXBlbmRlbnQgb2YgdGhlIG1vZGUuPC9wYXJhPgotCQkJPC9zZWN0aW9uPgotCQk8L3NlY3Rpb24+Ci0JPC9zZWN0aW9uPgotCTxzZWN0aW9uIGlkPSJkdmJ0Mi1wYXJhbXMiPgotCQk8dGl0bGU+RFZCLVQyIHBhcmFtZXRlcnM8L3RpdGxlPgotCQkKLQkJPHBhcmE+VGhpcyBzZWN0aW9uIGNvdmVycyBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgb25seSB0byB0aGUgRFZCLVQyIGRlbGl2ZXJ5IG1ldGhvZC4gRFZCLVQyCi0JCQlzdXBwb3J0IGlzIGN1cnJlbnRseSBpbiB0aGUgZWFybHkgc3RhZ2VzIGRldmVsb3BtZW50IHNvIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gZ3JvdwotCQkJYW5kIGJlY29tZSBtb3JlIGRldGFpbGVkIHdpdGggdGltZS48L3BhcmE+Ci0KLQkJPHNlY3Rpb24gaWQ9ImR2YnQyLXBscC1pZCI+Ci0JCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9EVkJUMl9QTFBfSUQ8L2NvbnN0YW50PjwvdGl0bGU+Ci0KLQkJCTxwYXJhPkRWQi1UMiBzdXBwb3J0cyBQaHlzaWNhbCBMYXllciBQaXBlcyAoUExQKSB0byBhbGxvdyB0cmFuc21pc3Npb24gb2YKLQkJCQltYW55IGRhdGEgdHlwZXMgdmlhIGEgc2luZ2xlIG11bHRpcGxleC4gVGhlIEFQSSB3aWxsIHNvb24gc3VwcG9ydCB0aGlzCi0JCQkJYXQgd2hpY2ggcG9pbnQgdGhpcyBzZWN0aW9uIHdpbGwgYmUgZXhwYW5kZWQuPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JPC9zZWN0aW9uPgotPC9zZWN0aW9uPgotPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJzdGIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjhmMzcyLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZic3RiLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZnJvbnRlbmQuaC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLmgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzkyZjc4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZnJvbnRlbmQuaC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotPHByb2dyYW1saXN0aW5nPgotLyoKLSAqIGZyb250ZW5kLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTWFyY3VzIE1ldHpsZXIgJmx0O21hcmN1c0Bjb252ZXJnZW5jZS5kZSZndDsKLSAqICAgICAgICAgICAgICAgICAgUmFscGggIE1ldHpsZXIgJmx0O3JhbHBoQGNvbnZlcmdlbmNlLmRlJmd0OwotICogICAgICAgICAgICAgICAgICBIb2xnZXIgV2FlY2h0bGVyICZsdDtob2xnZXJAY29udmVyZ2VuY2UuZGUmZ3Q7Ci0gKiAgICAgICAgICAgICAgICAgIEFuZHJlIERyYXN6aWsgJmx0O2FkQGNvbnZlcmdlbmNlLmRlJmd0OwotICogICAgICAgICAgICAgICAgICBmb3IgY29udmVyZ2VuY2UgaW50ZWdyYXRlZCBtZWRpYSBHbWJICi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9EVkJGUk9OVEVORF9IXwotI2RlZmluZSBfRFZCRlJPTlRFTkRfSF8KLQotI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7Ci0KLXR5cGVkZWYgZW51bSBmZV90eXBlIHsKLSAgICAgICAgRkVfUVBTSywKLSAgICAgICAgRkVfUUFNLAotICAgICAgICBGRV9PRkRNLAotICAgICAgICBGRV9BVFNDCi19IGZlX3R5cGVfdDsKLQotCi10eXBlZGVmIGVudW0gZmVfY2FwcyB7Ci0gICAgICAgIEZFX0lTX1NUVVBJRCAgICAgICAgICAgICAgICAgICAgPSAwLAotICAgICAgICBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gICAgICAgICAgID0gMHgxLAotICAgICAgICBGRV9DQU5fRkVDXzFfMiAgICAgICAgICAgICAgICAgID0gMHgyLAotICAgICAgICBGRV9DQU5fRkVDXzJfMyAgICAgICAgICAgICAgICAgID0gMHg0LAotICAgICAgICBGRV9DQU5fRkVDXzNfNCAgICAgICAgICAgICAgICAgID0gMHg4LAotICAgICAgICBGRV9DQU5fRkVDXzRfNSAgICAgICAgICAgICAgICAgID0gMHgxMCwKLSAgICAgICAgRkVfQ0FOX0ZFQ181XzYgICAgICAgICAgICAgICAgICA9IDB4MjAsCi0gICAgICAgIEZFX0NBTl9GRUNfNl83ICAgICAgICAgICAgICAgICAgPSAweDQwLAotICAgICAgICBGRV9DQU5fRkVDXzdfOCAgICAgICAgICAgICAgICAgID0gMHg4MCwKLSAgICAgICAgRkVfQ0FOX0ZFQ184XzkgICAgICAgICAgICAgICAgICA9IDB4MTAwLAotICAgICAgICBGRV9DQU5fRkVDX0FVVE8gICAgICAgICAgICAgICAgID0gMHgyMDAsCi0gICAgICAgIEZFX0NBTl9RUFNLICAgICAgICAgICAgICAgICAgICAgPSAweDQwMCwKLSAgICAgICAgRkVfQ0FOX1FBTV8xNiAgICAgICAgICAgICAgICAgICA9IDB4ODAwLAotICAgICAgICBGRV9DQU5fUUFNXzMyICAgICAgICAgICAgICAgICAgID0gMHgxMDAwLAotICAgICAgICBGRV9DQU5fUUFNXzY0ICAgICAgICAgICAgICAgICAgID0gMHgyMDAwLAotICAgICAgICBGRV9DQU5fUUFNXzEyOCAgICAgICAgICAgICAgICAgID0gMHg0MDAwLAotICAgICAgICBGRV9DQU5fUUFNXzI1NiAgICAgICAgICAgICAgICAgID0gMHg4MDAwLAotICAgICAgICBGRV9DQU5fUUFNX0FVVE8gICAgICAgICAgICAgICAgID0gMHgxMDAwMCwKLSAgICAgICAgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gICA9IDB4MjAwMDAsCi0gICAgICAgIEZFX0NBTl9CQU5EV0lEVEhfQVVUTyAgICAgICAgICAgPSAweDQwMDAwLAotICAgICAgICBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyAgICAgID0gMHg4MDAwMCwKLSAgICAgICAgRkVfQ0FOX0hJRVJBUkNIWV9BVVRPICAgICAgICAgICA9IDB4MTAwMDAwLAotICAgICAgICBGRV9DQU5fOFZTQiAgICAgICAgICAgICAgICAgICAgID0gMHgyMDAwMDAsCi0gICAgICAgIEZFX0NBTl8xNlZTQiAgICAgICAgICAgICAgICAgICAgPSAweDQwMDAwMCwKLSAgICAgICAgRkVfSEFTX0VYVEVOREVEX0NBUFMgICAgICAgICAgICA9IDB4ODAwMDAwLCAgIC8qIFdlIG5lZWQgbW9yZSBiaXRzcGFjZSBmb3IgbmV3ZXIgQVBJcywgaW5kaWNhdGUgdGhpcy4gKi8KLSAgICAgICAgRkVfQ0FOX1RVUkJPX0ZFQyAgICAgICAgICAgICAgICA9IDB4ODAwMDAwMCwgIC8qIGZyb250ZW5kIHN1cHBvcnRzICJ0dXJibyBmZWMgbW9kdWxhdGlvbiIgKi8KLSAgICAgICAgRkVfQ0FOXzJHX01PRFVMQVRJT04gICAgICAgICAgICA9IDB4MTAwMDAwMDAsIC8qIGZyb250ZW5kIHN1cHBvcnRzICIybmQgZ2VuZXJhdGlvbiBtb2R1bGF0aW9uIiAoRFZCLVMyKSAqLwotICAgICAgICBGRV9ORUVEU19CRU5ESU5HICAgICAgICAgICAgICAgID0gMHgyMDAwMDAwMCwgLyogbm90IHN1cHBvcnRlZCBhbnltb3JlLCBkb24ndCB1c2UgKGZyb250ZW5kIHJlcXVpcmVzIGZyZXF1ZW5jeSBiZW5kaW5nKSAqLwotICAgICAgICBGRV9DQU5fUkVDT1ZFUiAgICAgICAgICAgICAgICAgID0gMHg0MDAwMDAwMCwgLyogZnJvbnRlbmQgY2FuIHJlY292ZXIgZnJvbSBhIGNhYmxlIHVucGx1ZyBhdXRvbWF0aWNhbGx5ICovCi0gICAgICAgIEZFX0NBTl9NVVRFX1RTICAgICAgICAgICAgICAgICAgPSAweDgwMDAwMDAwICAvKiBmcm9udGVuZCBjYW4gc3RvcCBzcHVyaW91cyBUUyBkYXRhIG91dHB1dCAqLwotfSBmZV9jYXBzX3Q7Ci0KLQotc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvIHsKLSAgICAgICAgY2hhciAgICAgICBuYW1lWzEyOF07Ci0gICAgICAgIGZlX3R5cGVfdCAgdHlwZTsKLSAgICAgICAgX191MzIgICAgICBmcmVxdWVuY3lfbWluOwotICAgICAgICBfX3UzMiAgICAgIGZyZXF1ZW5jeV9tYXg7Ci0gICAgICAgIF9fdTMyICAgICAgZnJlcXVlbmN5X3N0ZXBzaXplOwotICAgICAgICBfX3UzMiAgICAgIGZyZXF1ZW5jeV90b2xlcmFuY2U7Ci0gICAgICAgIF9fdTMyICAgICAgc3ltYm9sX3JhdGVfbWluOwotICAgICAgICBfX3UzMiAgICAgIHN5bWJvbF9yYXRlX21heDsKLSAgICAgICAgX191MzIgICAgICBzeW1ib2xfcmF0ZV90b2xlcmFuY2U7ICAgICAgIC8qIHBwbSAqLwotICAgICAgICBfX3UzMiAgICAgIG5vdGlmaWVyX2RlbGF5OyAgICAgICAgICAgICAgLyogREVQUkVDQVRFRCAqLwotICAgICAgICBmZV9jYXBzX3QgIGNhcHM7Ci19OwotCi0KLS8qKgotICogIENoZWNrIG91dCB0aGUgRGlTRXFDIGJ1cyBzcGVjIGF2YWlsYWJsZSBvbiBodHRwOi8vd3d3LmV1dGVsc2F0Lm9yZy8gZm9yCi0gKiAgdGhlIG1lYW5pbmcgb2YgdGhpcyBzdHJ1Y3QuLi4KLSAqLwotc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCB7Ci0gICAgICAgIF9fdTggbXNnIFs2XTsgICAvKiAgeyBmcmFtaW5nLCBhZGRyZXNzLCBjb21tYW5kLCBkYXRhIFszXSB9ICovCi0gICAgICAgIF9fdTggbXNnX2xlbjsgICAvKiAgdmFsaWQgdmFsdWVzIGFyZSAzLi4uNiAgKi8KLX07Ci0KLQotc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgewotICAgICAgICBfX3U4IG1zZyBbNF07ICAgLyogIHsgZnJhbWluZywgZGF0YSBbM10gfSAqLwotICAgICAgICBfX3U4IG1zZ19sZW47ICAgLyogIHZhbGlkIHZhbHVlcyBhcmUgMC4uLjQsIDAgbWVhbnMgbm8gbXNnICAqLwotICAgICAgICBpbnQgIHRpbWVvdXQ7ICAgLyogIHJldHVybiBmcm9tIGlvY3RsIGFmdGVyIHRpbWVvdXQgbXMgd2l0aCAqLwotfTsgICAgICAgICAgICAgICAgICAgICAgLyogIGVycm9yY29kZSB3aGVuIG5vIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkICAqLwotCi0KLXR5cGVkZWYgZW51bSBmZV9zZWNfdm9sdGFnZSB7Ci0gICAgICAgIFNFQ19WT0xUQUdFXzEzLAotICAgICAgICBTRUNfVk9MVEFHRV8xOCwKLSAgICAgICAgU0VDX1ZPTFRBR0VfT0ZGCi19IGZlX3NlY192b2x0YWdlX3Q7Ci0KLQotdHlwZWRlZiBlbnVtIGZlX3NlY190b25lX21vZGUgewotICAgICAgICBTRUNfVE9ORV9PTiwKLSAgICAgICAgU0VDX1RPTkVfT0ZGCi19IGZlX3NlY190b25lX21vZGVfdDsKLQotCi10eXBlZGVmIGVudW0gZmVfc2VjX21pbmlfY21kIHsKLSAgICAgICAgU0VDX01JTklfQSwKLSAgICAgICAgU0VDX01JTklfQgotfSBmZV9zZWNfbWluaV9jbWRfdDsKLQotCi10eXBlZGVmIGVudW0gZmVfc3RhdHVzIHsKLSAgICAgICAgRkVfSEFTX1NJR05BTCAgID0gMHgwMSwgICAvKiBmb3VuZCBzb21ldGhpbmcgYWJvdmUgdGhlIG5vaXNlIGxldmVsICovCi0gICAgICAgIEZFX0hBU19DQVJSSUVSICA9IDB4MDIsICAgLyogZm91bmQgYSBEVkIgc2lnbmFsICAqLwotICAgICAgICBGRV9IQVNfVklURVJCSSAgPSAweDA0LCAgIC8qIEZFQyBpcyBzdGFibGUgICovCi0gICAgICAgIEZFX0hBU19TWU5DICAgICA9IDB4MDgsICAgLyogZm91bmQgc3luYyBieXRlcyAgKi8KLSAgICAgICAgRkVfSEFTX0xPQ0sgICAgID0gMHgxMCwgICAvKiBldmVyeXRoaW5nJ3Mgd29ya2luZy4uLiAqLwotICAgICAgICBGRV9USU1FRE9VVCAgICAgPSAweDIwLCAgIC8qIG5vIGxvY2sgd2l0aGluIHRoZSBsYXN0IH4yIHNlY29uZHMgKi8KLSAgICAgICAgRkVfUkVJTklUICAgICAgID0gMHg0MCAgICAvKiBmcm9udGVuZCB3YXMgcmVpbml0aWFsaXplZCwgICovCi19IGZlX3N0YXR1c190OyAgICAgICAgICAgICAgICAgICAgLyogYXBwbGljYXRpb24gaXMgcmVjb21tZW5kZWQgdG8gcmVzZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaVNFcUMsIHRvbmUgYW5kIHBhcmFtZXRlcnMgKi8KLQotdHlwZWRlZiBlbnVtIGZlX3NwZWN0cmFsX2ludmVyc2lvbiB7Ci0gICAgICAgIElOVkVSU0lPTl9PRkYsCi0gICAgICAgIElOVkVSU0lPTl9PTiwKLSAgICAgICAgSU5WRVJTSU9OX0FVVE8KLX0gZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3Q7Ci0KLQotdHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7Ci0gICAgICAgIEZFQ19OT05FID0gMCwKLSAgICAgICAgRkVDXzFfMiwKLSAgICAgICAgRkVDXzJfMywKLSAgICAgICAgRkVDXzNfNCwKLSAgICAgICAgRkVDXzRfNSwKLSAgICAgICAgRkVDXzVfNiwKLSAgICAgICAgRkVDXzZfNywKLSAgICAgICAgRkVDXzdfOCwKLSAgICAgICAgRkVDXzhfOSwKLSAgICAgICAgRkVDX0FVVE8sCi0gICAgICAgIEZFQ18zXzUsCi0gICAgICAgIEZFQ185XzEwLAotfSBmZV9jb2RlX3JhdGVfdDsKLQotCi10eXBlZGVmIGVudW0gZmVfbW9kdWxhdGlvbiB7Ci0gICAgICAgIFFQU0ssCi0gICAgICAgIFFBTV8xNiwKLSAgICAgICAgUUFNXzMyLAotICAgICAgICBRQU1fNjQsCi0gICAgICAgIFFBTV8xMjgsCi0gICAgICAgIFFBTV8yNTYsCi0gICAgICAgIFFBTV9BVVRPLAotICAgICAgICBWU0JfOCwKLSAgICAgICAgVlNCXzE2LAotICAgICAgICBQU0tfOCwKLSAgICAgICAgQVBTS18xNiwKLSAgICAgICAgQVBTS18zMiwKLSAgICAgICAgRFFQU0ssCi19IGZlX21vZHVsYXRpb25fdDsKLQotdHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgewotICAgICAgICBUUkFOU01JU1NJT05fTU9ERV8ySywKLSAgICAgICAgVFJBTlNNSVNTSU9OX01PREVfOEssCi0gICAgICAgIFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8sCi0gICAgICAgIFRSQU5TTUlTU0lPTl9NT0RFXzRLLAotICAgICAgICBUUkFOU01JU1NJT05fTU9ERV8xSywKLSAgICAgICAgVFJBTlNNSVNTSU9OX01PREVfMTZLLAotICAgICAgICBUUkFOU01JU1NJT05fTU9ERV8zMkssCi19IGZlX3RyYW5zbWl0X21vZGVfdDsKLQotdHlwZWRlZiBlbnVtIGZlX2JhbmR3aWR0aCB7Ci0gICAgICAgIEJBTkRXSURUSF84X01IWiwKLSAgICAgICAgQkFORFdJRFRIXzdfTUhaLAotICAgICAgICBCQU5EV0lEVEhfNl9NSFosCi0gICAgICAgIEJBTkRXSURUSF9BVVRPLAotICAgICAgICBCQU5EV0lEVEhfNV9NSFosCi0gICAgICAgIEJBTkRXSURUSF8xMF9NSFosCi0gICAgICAgIEJBTkRXSURUSF8xXzcxMl9NSFosCi19IGZlX2JhbmR3aWR0aF90OwotCi0KLXR5cGVkZWYgZW51bSBmZV9ndWFyZF9pbnRlcnZhbCB7Ci0gICAgICAgIEdVQVJEX0lOVEVSVkFMXzFfMzIsCi0gICAgICAgIEdVQVJEX0lOVEVSVkFMXzFfMTYsCi0gICAgICAgIEdVQVJEX0lOVEVSVkFMXzFfOCwKLSAgICAgICAgR1VBUkRfSU5URVJWQUxfMV80LAotICAgICAgICBHVUFSRF9JTlRFUlZBTF9BVVRPLAotICAgICAgICBHVUFSRF9JTlRFUlZBTF8xXzEyOCwKLSAgICAgICAgR1VBUkRfSU5URVJWQUxfMTlfMTI4LAotICAgICAgICBHVUFSRF9JTlRFUlZBTF8xOV8yNTYsCi19IGZlX2d1YXJkX2ludGVydmFsX3Q7Ci0KLQotdHlwZWRlZiBlbnVtIGZlX2hpZXJhcmNoeSB7Ci0gICAgICAgIEhJRVJBUkNIWV9OT05FLAotICAgICAgICBISUVSQVJDSFlfMSwKLSAgICAgICAgSElFUkFSQ0hZXzIsCi0gICAgICAgIEhJRVJBUkNIWV80LAotICAgICAgICBISUVSQVJDSFlfQVVUTwotfSBmZV9oaWVyYXJjaHlfdDsKLQotCi1zdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICBzeW1ib2xfcmF0ZTsgIC8qIHN5bWJvbCByYXRlIGluIFN5bWJvbHMgcGVyIHNlY29uZCAqLwotICAgICAgICBmZV9jb2RlX3JhdGVfdCAgZmVjX2lubmVyOyAgICAvKiBmb3J3YXJkIGVycm9yIGNvcnJlY3Rpb24gKHNlZSBhYm92ZSkgKi8KLX07Ci0KLXN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgewotICAgICAgICBfX3UzMiAgICAgICAgICAgc3ltYm9sX3JhdGU7IC8qIHN5bWJvbCByYXRlIGluIFN5bWJvbHMgcGVyIHNlY29uZCAqLwotICAgICAgICBmZV9jb2RlX3JhdGVfdCAgZmVjX2lubmVyOyAgIC8qIGZvcndhcmQgZXJyb3IgY29ycmVjdGlvbiAoc2VlIGFib3ZlKSAqLwotICAgICAgICBmZV9tb2R1bGF0aW9uX3QgbW9kdWxhdGlvbjsgIC8qIG1vZHVsYXRpb24gdHlwZSAoc2VlIGFib3ZlKSAqLwotfTsKLQotc3RydWN0IGR2Yl92c2JfcGFyYW1ldGVycyB7Ci0gICAgICAgIGZlX21vZHVsYXRpb25fdCBtb2R1bGF0aW9uOyAgLyogbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICovCi19OwotCi1zdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyB7Ci0gICAgICAgIGZlX2JhbmR3aWR0aF90ICAgICAgYmFuZHdpZHRoOwotICAgICAgICBmZV9jb2RlX3JhdGVfdCAgICAgIGNvZGVfcmF0ZV9IUDsgIC8qIGhpZ2ggcHJpb3JpdHkgc3RyZWFtIGNvZGUgcmF0ZSAqLwotICAgICAgICBmZV9jb2RlX3JhdGVfdCAgICAgIGNvZGVfcmF0ZV9MUDsgIC8qIGxvdyBwcmlvcml0eSBzdHJlYW0gY29kZSByYXRlICovCi0gICAgICAgIGZlX21vZHVsYXRpb25fdCAgICAgY29uc3RlbGxhdGlvbjsgLyogbW9kdWxhdGlvbiB0eXBlIChzZWUgYWJvdmUpICovCi0gICAgICAgIGZlX3RyYW5zbWl0X21vZGVfdCAgdHJhbnNtaXNzaW9uX21vZGU7Ci0gICAgICAgIGZlX2d1YXJkX2ludGVydmFsX3QgZ3VhcmRfaW50ZXJ2YWw7Ci0gICAgICAgIGZlX2hpZXJhcmNoeV90ICAgICAgaGllcmFyY2h5X2luZm9ybWF0aW9uOwotfTsKLQotCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgewotICAgICAgICBfX3UzMiBmcmVxdWVuY3k7ICAgICAvKiAoYWJzb2x1dGUpIGZyZXF1ZW5jeSBpbiBIeiBmb3IgUUFNL09GRE0vQVRTQyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGluIGtIeiBmb3IgUVBTSyAqLwotICAgICAgICBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVycyBxcHNrOwotICAgICAgICAgICAgICAgIHN0cnVjdCBkdmJfcWFtX3BhcmFtZXRlcnMgIHFhbTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyBvZmRtOwotICAgICAgICAgICAgICAgIHN0cnVjdCBkdmJfdnNiX3BhcmFtZXRlcnMgdnNiOwotICAgICAgICB9IHU7Ci19OwotCi0KLXN0cnVjdCBkdmJfZnJvbnRlbmRfZXZlbnQgewotICAgICAgICBmZV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotfTsKLQotLyogUzJBUEkgQ29tbWFuZHMgKi8KLSNkZWZpbmUgRFRWX1VOREVGSU5FRCAgICAgICAgICAgMAotI2RlZmluZSBEVFZfVFVORSAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIERUVl9DTEVBUiAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgRFRWX0ZSRVFVRU5DWSAgICAgICAgICAgMwotI2RlZmluZSBEVFZfTU9EVUxBVElPTiAgICAgICAgICA0Ci0jZGVmaW5lIERUVl9CQU5EV0lEVEhfSFogICAgICAgIDUKLSNkZWZpbmUgRFRWX0lOVkVSU0lPTiAgICAgICAgICAgNgotI2RlZmluZSBEVFZfRElTRVFDX01BU1RFUiAgICAgICA3Ci0jZGVmaW5lIERUVl9TWU1CT0xfUkFURSAgICAgICAgIDgKLSNkZWZpbmUgRFRWX0lOTkVSX0ZFQyAgICAgICAgICAgOQotI2RlZmluZSBEVFZfVk9MVEFHRSAgICAgICAgICAgICAxMAotI2RlZmluZSBEVFZfVE9ORSAgICAgICAgICAgICAgICAxMQotI2RlZmluZSBEVFZfUElMT1QgICAgICAgICAgICAgICAxMgotI2RlZmluZSBEVFZfUk9MTE9GRiAgICAgICAgICAgICAxMwotI2RlZmluZSBEVFZfRElTRVFDX1NMQVZFX1JFUExZICAxNAotCi0vKiBCYXNpYyBlbnVtZXJhdGlvbiBzZXQgZm9yIHF1ZXJ5aW5nIHVubGltaXRlZCBjYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgRFRWX0ZFX0NBUEFCSUxJVFlfQ09VTlQgMTUKLSNkZWZpbmUgRFRWX0ZFX0NBUEFCSUxJVFkgICAgICAgMTYKLSNkZWZpbmUgRFRWX0RFTElWRVJZX1NZU1RFTSAgICAgMTcKLQotLyogSVNEQi1UIGFuZCBJU0RCLVRzYiAqLwotI2RlZmluZSBEVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT04gICAgIDE4Ci0jZGVmaW5lIERUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkcgICAgMTkKLQotI2RlZmluZSBEVFZfSVNEQlRfU0JfU1VCQ0hBTk5FTF9JRCAgICAgIDIwCi0jZGVmaW5lIERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWCAgICAgICAgMjEKLSNkZWZpbmUgRFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQgICAgICAyMgotCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfRkVDICAgICAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJBX01PRFVMQVRJT04gICAgICAgICAgICAgMjQKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQV9TRUdNRU5UX0NPVU5UICAgICAgICAgIDI1Ci0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkFfVElNRV9JTlRFUkxFQVZJTkcgICAgICAyNgotCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfRkVDICAgICAgICAgICAgICAgICAgICAyNwotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT04gICAgICAgICAgICAgMjgKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQl9TRUdNRU5UX0NPVU5UICAgICAgICAgIDI5Ci0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkcgICAgICAzMAotCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfRkVDICAgICAgICAgICAgICAgICAgICAzMQotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJDX01PRFVMQVRJT04gICAgICAgICAgICAgMzIKLSNkZWZpbmUgRFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5UICAgICAgICAgIDMzCi0jZGVmaW5lIERUVl9JU0RCVF9MQVlFUkNfVElNRV9JTlRFUkxFQVZJTkcgICAgICAzNAotCi0jZGVmaW5lIERUVl9BUElfVkVSU0lPTiAgICAgICAgIDM1Ci0KLSNkZWZpbmUgRFRWX0NPREVfUkFURV9IUCAgICAgICAgMzYKLSNkZWZpbmUgRFRWX0NPREVfUkFURV9MUCAgICAgICAgMzcKLSNkZWZpbmUgRFRWX0dVQVJEX0lOVEVSVkFMICAgICAgMzgKLSNkZWZpbmUgRFRWX1RSQU5TTUlTU0lPTl9NT0RFICAgMzkKLSNkZWZpbmUgRFRWX0hJRVJBUkNIWSAgICAgICAgICAgNDAKLQotI2RlZmluZSBEVFZfSVNEQlRfTEFZRVJfRU5BQkxFRCA0MQotCi0jZGVmaW5lIERUVl9JU0RCU19UU19JRCAgICAgICAgIDQyCi0KLSNkZWZpbmUgRFRWX0RWQlQyX1BMUF9JRAk0MwotCi0jZGVmaW5lIERUVl9NQVhfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICBEVFZfRFZCVDJfUExQX0lECi0KLXR5cGVkZWYgZW51bSBmZV9waWxvdCB7Ci0gICAgICAgIFBJTE9UX09OLAotICAgICAgICBQSUxPVF9PRkYsCi0gICAgICAgIFBJTE9UX0FVVE8sCi19IGZlX3BpbG90X3Q7Ci0KLXR5cGVkZWYgZW51bSBmZV9yb2xsb2ZmIHsKLSAgICAgICAgUk9MTE9GRl8zNSwgLyogSW1wbGllZCB2YWx1ZSBpbiBEVkItUywgZGVmYXVsdCBmb3IgRFZCLVMyICovCi0gICAgICAgIFJPTExPRkZfMjAsCi0gICAgICAgIFJPTExPRkZfMjUsCi0gICAgICAgIFJPTExPRkZfQVVUTywKLX0gZmVfcm9sbG9mZl90OwotCi10eXBlZGVmIGVudW0gZmVfZGVsaXZlcnlfc3lzdGVtIHsKLSAgICAgICAgU1lTX1VOREVGSU5FRCwKLSAgICAgICAgU1lTX0RWQkNfQU5ORVhfQUMsCi0gICAgICAgIFNZU19EVkJDX0FOTkVYX0IsCi0gICAgICAgIFNZU19EVkJULAotICAgICAgICBTWVNfRFNTLAotICAgICAgICBTWVNfRFZCUywKLSAgICAgICAgU1lTX0RWQlMyLAotICAgICAgICBTWVNfRFZCSCwKLSAgICAgICAgU1lTX0lTREJULAotICAgICAgICBTWVNfSVNEQlMsCi0gICAgICAgIFNZU19JU0RCQywKLSAgICAgICAgU1lTX0FUU0MsCi0gICAgICAgIFNZU19BVFNDTUgsCi0gICAgICAgIFNZU19ETUJUSCwKLSAgICAgICAgU1lTX0NNTUIsCi0gICAgICAgIFNZU19EQUIsCi0gICAgICAgIFNZU19EVkJUMiwKLX0gZmVfZGVsaXZlcnlfc3lzdGVtX3Q7Ci0KLXN0cnVjdCBkdHZfY21kc19oIHsKLSAgICAgICAgY2hhciAgICAqbmFtZTsgICAgICAgICAgLyogQSBkaXNwbGF5IG5hbWUgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLwotCi0gICAgICAgIF9fdTMyICAgY21kOyAgICAgICAgICAgIC8qIEEgdW5pcXVlIElEICovCi0KLSAgICAgICAgLyogRmxhZ3MgKi8KLSAgICAgICAgX191MzIgICBzZXQ6MTsgICAgICAgICAgLyogRWl0aGVyIGEgc2V0IG9yIGdldCBwcm9wZXJ0eSAqLwotICAgICAgICBfX3UzMiAgIGJ1ZmZlcjoxOyAgICAgICAvKiBEb2VzIHRoaXMgcHJvcGVydHkgdXNlIHRoZSBidWZmZXI/ICovCi0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWQ6MzA7ICAgIC8qIEFsaWduICovCi19OwotCi1zdHJ1Y3QgZHR2X3Byb3BlcnR5IHsKLSAgICAgICAgX191MzIgY21kOwotICAgICAgICBfX3UzMiByZXNlcnZlZFszXTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIF9fdTMyIGRhdGE7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggZGF0YVszMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiByZXNlcnZlZDFbM107Ci0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZXNlcnZlZDI7Ci0gICAgICAgICAgICAgICAgfSBidWZmZXI7Ci0gICAgICAgIH0gdTsKLSAgICAgICAgaW50IHJlc3VsdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBudW0gb2YgcHJvcGVydGllcyBjYW5ub3QgZXhjZWVkIERUVl9JT0NUTF9NQVhfTVNHUyBwZXIgaW9jdGwgKi8KLSNkZWZpbmUgRFRWX0lPQ1RMX01BWF9NU0dTIDY0Ci0KLXN0cnVjdCBkdHZfcHJvcGVydGllcyB7Ci0gICAgICAgIF9fdTMyIG51bTsKLSAgICAgICAgc3RydWN0IGR0dl9wcm9wZXJ0eSAqcHJvcHM7Ci19OwotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX0dFVF9QUk9QRVJUWSI+RkVfU0VUX1BST1BFUlRZPC9saW5rPiAgICAgICAgICAgIF9JT1coJ28nLCA4Miwgc3RydWN0IGR0dl9wcm9wZXJ0aWVzKQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9HRVRfUFJPUEVSVFkiPkZFX0dFVF9QUk9QRVJUWTwvbGluaz4gICAgICAgICAgICBfSU9SKCdvJywgODMsIHN0cnVjdCBkdHZfcHJvcGVydGllcykKLQotCi0vKioKLSAqIFdoZW4gc2V0LCB0aGlzIGZsYWcgd2lsbCBkaXNhYmxlIGFueSB6aWd6YWdnaW5nIG9yIG90aGVyICJub3JtYWwiIHR1bmluZwotICogYmVoYXZpb3VyLiBBZGRpdGlvbmFsbHksIHRoZXJlIHdpbGwgYmUgbm8gYXV0b21hdGljIG1vbml0b3Jpbmcgb2YgdGhlIGxvY2sKLSAqIHN0YXR1cywgYW5kIGhlbmNlIG5vIGZyb250ZW5kIGV2ZW50cyB3aWxsIGJlIGdlbmVyYXRlZC4gSWYgYSBmcm9udGVuZCBkZXZpY2UKLSAqIGlzIGNsb3NlZCwgdGhpcyBmbGFnIHdpbGwgYmUgYXV0b21hdGljYWxseSB0dXJuZWQgb2ZmIHdoZW4gdGhlIGRldmljZSBpcwotICogcmVvcGVuZWQgcmVhZC13cml0ZS4KLSAqLwotI2RlZmluZSBGRV9UVU5FX01PREVfT05FU0hPVCAweDAxCi0KLQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9HRVRfSU5GTyI+RkVfR0VUX0lORk88L2xpbms+ICAgICAgICAgICAgICAgIF9JT1IoJ28nLCA2MSwgc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvKQotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX0RJU0VRQ19SRVNFVF9PVkVSTE9BRCI+RkVfRElTRVFDX1JFU0VUX09WRVJMT0FEPC9saW5rPiAgIF9JTygnbycsIDYyKQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9ESVNFUUNfU0VORF9NQVNURVJfQ01EIj5GRV9ESVNFUUNfU0VORF9NQVNURVJfQ01EPC9saW5rPiAgX0lPVygnbycsIDYzLCBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kKQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9ESVNFUUNfUkVDVl9TTEFWRV9SRVBMWSI+RkVfRElTRVFDX1JFQ1ZfU0xBVkVfUkVQTFk8L2xpbms+IF9JT1IoJ28nLCA2NCwgc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkpCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX0RJU0VRQ19TRU5EX0JVUlNUIj5GRV9ESVNFUUNfU0VORF9CVVJTVDwvbGluaz4gICAgICAgX0lPKCdvJywgNjUpICAvKiBmZV9zZWNfbWluaV9jbWRfdCAqLwotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX1NFVF9UT05FIj5GRV9TRVRfVE9ORTwvbGluaz4gICAgICAgICAgICAgICAgX0lPKCdvJywgNjYpICAvKiBmZV9zZWNfdG9uZV9tb2RlX3QgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfU0VUX1ZPTFRBR0UiPkZFX1NFVF9WT0xUQUdFPC9saW5rPiAgICAgICAgICAgICBfSU8oJ28nLCA2NykgIC8qIGZlX3NlY192b2x0YWdlX3QgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfRU5BQkxFX0hJR0hfTE5CX1ZPTFRBR0UiPkZFX0VOQUJMRV9ISUdIX0xOQl9WT0xUQUdFPC9saW5rPiBfSU8oJ28nLCA2OCkgIC8qIGludCAqLwotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX1JFQURfU1RBVFVTIj5GRV9SRUFEX1NUQVRVUzwvbGluaz4gICAgICAgICAgICAgX0lPUignbycsIDY5LCBmZV9zdGF0dXNfdCkKLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfUkVBRF9CRVIiPkZFX1JFQURfQkVSPC9saW5rPiAgICAgICAgICAgICAgICBfSU9SKCdvJywgNzAsIF9fdTMyKQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9SRUFEX1NJR05BTF9TVFJFTkdUSCI+RkVfUkVBRF9TSUdOQUxfU1RSRU5HVEg8L2xpbms+ICAgIF9JT1IoJ28nLCA3MSwgX191MTYpCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX1JFQURfU05SIj5GRV9SRUFEX1NOUjwvbGluaz4gICAgICAgICAgICAgICAgX0lPUignbycsIDcyLCBfX3UxNikKLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1MiPkZFX1JFQURfVU5DT1JSRUNURURfQkxPQ0tTPC9saW5rPiBfSU9SKCdvJywgNzMsIF9fdTMyKQotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX1NFVF9GUk9OVEVORCI+RkVfU0VUX0ZST05URU5EPC9saW5rPiAgICAgICAgICAgIF9JT1coJ28nLCA3Niwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKQotI2RlZmluZSA8bGluayBsaW5rZW5kPSJGRV9HRVRfRlJPTlRFTkQiPkZFX0dFVF9GUk9OVEVORDwvbGluaz4gICAgICAgICAgICBfSU9SKCdvJywgNzcsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykKLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfU0VUX0ZST05URU5EX1RVTkVfTU9ERSI+RkVfU0VUX0ZST05URU5EX1RVTkVfTU9ERTwvbGluaz4gIF9JTygnbycsIDgxKSAvKiB1bnNpZ25lZCBpbnQgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iRkVfR0VUX0VWRU5UIj5GRV9HRVRfRVZFTlQ8L2xpbms+ICAgICAgICAgICAgICAgX0lPUignbycsIDc4LCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50KQotCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IkZFX0RJU0hORVRXT1JLX1NFTkRfTEVHQUNZX0NNRCI+RkVfRElTSE5FVFdPUktfU0VORF9MRUdBQ1lfQ01EPC9saW5rPiBfSU8oJ28nLCA4MCkgLyogdW5zaWduZWQgaW50ICovCi0KLSNlbmRpZiAvKl9EVkJGUk9OVEVORF9IXyovCi08L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9uZXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9uZXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUzODhkLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvbmV0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTx0aXRsZT5EVkIgTmV0d29yayBBUEk8L3RpdGxlPgotPHBhcmE+VGhlIERWQiBuZXQgZGV2aWNlIGVuYWJsZXMgZmVlZGluZyBvZiBNUEUgKG11bHRpIHByb3RvY29sIGVuY2Fwc3VsYXRpb24pIHBhY2tldHMKLXJlY2VpdmVkIHZpYSBEVkIgaW50byB0aGUgTGludXggbmV0d29yayBwcm90b2NvbCBzdGFjaywgZS5nLiBmb3IgaW50ZXJuZXQgdmlhIHNhdGVsbGl0ZQotYXBwbGljYXRpb25zLiBJdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL25ldDA8L2VtcGhhc2lzPi4gRGF0YSB0eXBlcyBhbmQKLWFuZCBpb2N0bCBkZWZpbml0aW9ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5jbHVkaW5nIDxlbXBoYXNpcyByb2xlPSJ0dCI+bGludXgvZHZiL25ldC5oPC9lbXBoYXNpcz4gaW4geW91cgotYXBwbGljYXRpb24uCi08L3BhcmE+Ci08c2VjdGlvbiBpZD0iZHZiX25ldF90eXBlcyI+Ci08dGl0bGU+RFZCIE5ldCBEYXRhIFR5cGVzPC90aXRsZT4KLTxwYXJhPlRvIGJlIHdyaXR0ZW4mI3gyMDI2OwotPC9wYXJhPgotPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmZTA5NC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2NCArMCwwIEBACi08IS0tIEdlbmVyYXRlZCBmaWxlISBEbyBub3QgZWRpdC4gLS0+Ci0KLTwhLS0gRnVuY3Rpb25zIC0tPgotPCFFTlRJVFkgZnVuYy1jbG9zZSAiPGxpbmsgbGlua2VuZD0nZnVuYy1jbG9zZSc+PGZ1bmN0aW9uPmNsb3NlKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1pb2N0bCAiPGxpbmsgbGlua2VuZD0nZnVuYy1pb2N0bCc+PGZ1bmN0aW9uPmlvY3RsKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1tbWFwICI8bGluayBsaW5rZW5kPSdmdW5jLW1tYXAnPjxmdW5jdGlvbj5tbWFwKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1tdW5tYXAgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtbXVubWFwJz48ZnVuY3Rpb24+bXVubWFwKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1vcGVuICI8bGluayBsaW5rZW5kPSdmdW5jLW9wZW4nPjxmdW5jdGlvbj5vcGVuKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1wb2xsICI8bGluayBsaW5rZW5kPSdmdW5jLXBvbGwnPjxmdW5jdGlvbj5wb2xsKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1yZWFkICI8bGluayBsaW5rZW5kPSdmdW5jLXJlYWQnPjxmdW5jdGlvbj5yZWFkKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy1zZWxlY3QgIjxsaW5rIGxpbmtlbmQ9J2Z1bmMtc2VsZWN0Jz48ZnVuY3Rpb24+c2VsZWN0KCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotPCFFTlRJVFkgZnVuYy13cml0ZSAiPGxpbmsgbGlua2VuZD0nZnVuYy13cml0ZSc+PGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPjwvbGluaz4iPgotCi08IUVOVElUWSBtZWRpYS1mdW5jLWNsb3NlICI8bGluayBsaW5rZW5kPSdtZWRpYS1mdW5jLWNsb3NlJz48ZnVuY3Rpb24+Y2xvc2UoKTwvZnVuY3Rpb24+PC9saW5rPiI+Ci08IUVOVElUWSBtZWRpYS1mdW5jLWlvY3RsICI8bGluayBsaW5rZW5kPSdtZWRpYS1mdW5jLWlvY3RsJz48ZnVuY3Rpb24+aW9jdGwoKTwvZnVuY3Rpb24+PC9saW5rPiI+Ci08IUVOVElUWSBtZWRpYS1mdW5jLW9wZW4gIjxsaW5rIGxpbmtlbmQ9J21lZGlhLWZ1bmMtb3Blbic+PGZ1bmN0aW9uPm9wZW4oKTwvZnVuY3Rpb24+PC9saW5rPiI+Ci0KLTwhLS0gSW9jdGxzIC0tPgotPCFFTlRJVFkgVklESU9DLUNST1BDQVAgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1jcm9wY2FwJz48Y29uc3RhbnQ+VklESU9DX0NST1BDQVA8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLURCRy1HLUNISVAtSURFTlQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1kYmctZy1jaGlwLWlkZW50Jz48Y29uc3RhbnQ+VklESU9DX0RCR19HX0NISVBfSURFTlQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLURCRy1HLVJFR0lTVEVSICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZGJnLWctcmVnaXN0ZXInPjxjb25zdGFudD5WSURJT0NfREJHX0dfUkVHSVNURVI8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLURCRy1TLVJFR0lTVEVSICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZGJnLWctcmVnaXN0ZXInPjxjb25zdGFudD5WSURJT0NfREJHX1NfUkVHSVNURVI8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLURRQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcWJ1Zic+PGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtRFFFVkVOVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWRxZXZlbnQnPjxjb25zdGFudD5WSURJT0NfRFFFVkVOVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtRU5DT0RFUi1DTUQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbmNvZGVyLWNtZCc+PGNvbnN0YW50PlZJRElPQ19FTkNPREVSX0NNRDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtRU5VTUFVRElPICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bWF1ZGlvJz48Y29uc3RhbnQ+VklESU9DX0VOVU1BVURJTzwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtRU5VTUFVRE9VVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW1hdWRpb291dCc+PGNvbnN0YW50PlZJRElPQ19FTlVNQVVET1VUPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNSU5QVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtaW5wdXQnPjxjb25zdGFudD5WSURJT0NfRU5VTUlOUFVUPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNT1VUUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bW91dHB1dCc+PGNvbnN0YW50PlZJRElPQ19FTlVNT1VUUFVUPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bXN0ZCc+PGNvbnN0YW50PlZJRElPQ19FTlVNU1REPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNLURWLVBSRVNFVFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtLWR2LXByZXNldHMnPjxjb25zdGFudD5WSURJT0NfRU5VTV9EVl9QUkVTRVRTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVudW0tZm10Jz48Y29uc3RhbnQ+VklESU9DX0VOVU1fRk1UPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNLUZSQU1FSU5URVJWQUxTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZW51bS1mcmFtZWludGVydmFscyc+PGNvbnN0YW50PlZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1FTlVNLUZSQU1FU0laRVMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMnPjxjb25zdGFudD5WSURJT0NfRU5VTV9GUkFNRVNJWkVTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLUFVRElPICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1hdWRpbyc+PGNvbnN0YW50PlZJRElPQ19HX0FVRElPPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLUFVRE9VVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctYXVkaW9vdXQnPjxjb25zdGFudD5WSURJT0NfR19BVURPVVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctQ1JPUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctY3JvcCc+PGNvbnN0YW50PlZJRElPQ19HX0NST1A8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctQ1RSTCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctY3RybCc+PGNvbnN0YW50PlZJRElPQ19HX0NUUkw8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRFYtUFJFU0VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1kdi1wcmVzZXQnPjxjb25zdGFudD5WSURJT0NfR19EVl9QUkVTRVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRFYtVElNSU5HUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZHYtdGltaW5ncyc+PGNvbnN0YW50PlZJRElPQ19HX0RWX1RJTUlOR1M8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRU5DLUlOREVYICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1lbmMtaW5kZXgnPjxjb25zdGFudD5WSURJT0NfR19FTkNfSU5ERVg8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRVhULUNUUkxTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1leHQtY3RybHMnPjxjb25zdGFudD5WSURJT0NfR19FWFRfQ1RSTFM8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRkJVRiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZmJ1Zic+PGNvbnN0YW50PlZJRElPQ19HX0ZCVUY8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRk1UICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mbXQnPjxjb25zdGFudD5WSURJT0NfR19GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctRlJFUVVFTkNZICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mcmVxdWVuY3knPjxjb25zdGFudD5WSURJT0NfR19GUkVRVUVOQ1k8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctSU5QVVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWlucHV0Jz48Y29uc3RhbnQ+VklESU9DX0dfSU5QVVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctSlBFR0NPTVAgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWpwZWdjb21wJz48Y29uc3RhbnQ+VklESU9DX0dfSlBFR0NPTVA8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLUctTVBFR0NPTVAgIjxsaW5rIGxpbmtlbmQ9Jyc+PGNvbnN0YW50PlZJRElPQ19HX01QRUdDT01QPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLU1PRFVMQVRPUiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctbW9kdWxhdG9yJz48Y29uc3RhbnQ+VklESU9DX0dfTU9EVUxBVE9SPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLU9VVFBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctb3V0cHV0Jz48Y29uc3RhbnQ+VklESU9DX0dfT1VUUFVUPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLVBBUk0gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXBhcm0nPjxjb25zdGFudD5WSURJT0NfR19QQVJNPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLVBSSU9SSVRZICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1wcmlvcml0eSc+PGNvbnN0YW50PlZJRElPQ19HX1BSSU9SSVRZPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLVNMSUNFRC1WQkktQ0FQICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1zbGljZWQtdmJpLWNhcCc+PGNvbnN0YW50PlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLVNURCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctc3RkJz48Y29uc3RhbnQ+VklESU9DX0dfU1REPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1HLVRVTkVSICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy10dW5lcic+PGNvbnN0YW50PlZJRElPQ19HX1RVTkVSPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1MT0ctU1RBVFVTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtbG9nLXN0YXR1cyc+PGNvbnN0YW50PlZJRElPQ19MT0dfU1RBVFVTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1PVkVSTEFZICI8bGluayBsaW5rZW5kPSd2aWRpb2Mtb3ZlcmxheSc+PGNvbnN0YW50PlZJRElPQ19PVkVSTEFZPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcWJ1Zic+PGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWUJVRiAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5YnVmJz48Y29uc3RhbnQ+VklESU9DX1FVRVJZQlVGPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWUNBUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5Y2FwJz48Y29uc3RhbnQ+VklESU9DX1FVRVJZQ0FQPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWUNUUkwgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xdWVyeWN0cmwnPjxjb25zdGFudD5WSURJT0NfUVVFUllDVFJMPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWU1FTlUgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xdWVyeWN0cmwnPjxjb25zdGFudD5WSURJT0NfUVVFUllNRU5VPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWVNURCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXF1ZXJ5c3RkJz48Y29uc3RhbnQ+VklESU9DX1FVRVJZU1REPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1RVUVSWS1EVi1QUkVTRVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQnPjxjb25zdGFudD5WSURJT0NfUVVFUllfRFZfUFJFU0VUPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1SRVFCVUZTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtcmVxYnVmcyc+PGNvbnN0YW50PlZJRElPQ19SRVFCVUZTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1TVFJFQU1PRkYgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdHJlYW1vbic+PGNvbnN0YW50PlZJRElPQ19TVFJFQU1PRkY8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNUUkVBTU9OICI8bGluayBsaW5rZW5kPSd2aWRpb2Mtc3RyZWFtb24nPjxjb25zdGFudD5WSURJT0NfU1RSRUFNT048L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQlNDUklCRS1FVkVOVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN1YnNjcmliZS1ldmVudCc+PGNvbnN0YW50PlZJRElPQ19TVUJTQ1JJQkVfRVZFTlQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtQVVESU8gIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWF1ZGlvJz48Y29uc3RhbnQ+VklESU9DX1NfQVVESU88L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtQVVET1VUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1hdWRpb291dCc+PGNvbnN0YW50PlZJRElPQ19TX0FVRE9VVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1DUk9QICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX1NfQ1JPUDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1DVFJMICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1jdHJsJz48Y29uc3RhbnQ+VklESU9DX1NfQ1RSTDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1EVi1QUkVTRVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWR2LXByZXNldCc+PGNvbnN0YW50PlZJRElPQ19TX0RWX1BSRVNFVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1EVi1USU1JTkdTICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1kdi10aW1pbmdzJz48Y29uc3RhbnQ+VklESU9DX1NfRFZfVElNSU5HUzwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1FWFQtQ1RSTFMgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWV4dC1jdHJscyc+PGNvbnN0YW50PlZJRElPQ19TX0VYVF9DVFJMUzwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1GQlVGICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1mYnVmJz48Y29uc3RhbnQ+VklESU9DX1NfRkJVRjwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1GTVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19TX0ZNVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1GUkVRVUVOQ1kgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZyZXF1ZW5jeSc+PGNvbnN0YW50PlZJRElPQ19TX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1IVy1GUkVRLVNFRUsgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zLWh3LWZyZXEtc2Vlayc+PGNvbnN0YW50PlZJRElPQ19TX0hXX0ZSRVFfU0VFSzwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1JTlBVVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctaW5wdXQnPjxjb25zdGFudD5WSURJT0NfU19JTlBVVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1KUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctanBlZ2NvbXAnPjxjb25zdGFudD5WSURJT0NfU19KUEVHQ09NUDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtUy1NUEVHQ09NUCAiPGxpbmsgbGlua2VuZD0nJz48Y29uc3RhbnQ+VklESU9DX1NfTVBFR0NPTVA8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtTU9EVUxBVE9SICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1tb2R1bGF0b3InPjxjb25zdGFudD5WSURJT0NfU19NT0RVTEFUT1I8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtT1VUUFVUICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1vdXRwdXQnPjxjb25zdGFudD5WSURJT0NfU19PVVRQVVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtUEFSTSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctcGFybSc+PGNvbnN0YW50PlZJRElPQ19TX1BBUk08L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtUFJJT1JJVFkgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXByaW9yaXR5Jz48Y29uc3RhbnQ+VklESU9DX1NfUFJJT1JJVFk8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtU1REICI8bGluayBsaW5rZW5kPSd2aWRpb2MtZy1zdGQnPjxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVMtVFVORVIgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLXR1bmVyJz48Y29uc3RhbnQ+VklESU9DX1NfVFVORVI8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1FTlVNLUZSQU1FLVNJWkUgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdWJkZXYtZW51bS1mcmFtZS1zaXplJz48Y29uc3RhbnQ+VklESU9DX1NVQkRFVl9FTlVNX0ZSQU1FX1NJWkU8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1FTlVNLU1CVVMtQ09ERSAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN1YmRldi1lbnVtLW1idXMtY29kZSc+PGNvbnN0YW50PlZJRElPQ19TVUJERVZfRU5VTV9NQlVTX0NPREU8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1HLUNST1AgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdWJkZXYtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX1NVQkRFVl9HX0NST1A8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1HLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN1YmRldi1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19TVUJERVZfR19GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1HLUZSQU1FLUlOVEVSVkFMICI8bGluayBsaW5rZW5kPSd2aWRpb2Mtc3ViZGV2LWctZnJhbWUtaW50ZXJ2YWwnPjxjb25zdGFudD5WSURJT0NfU1VCREVWX0dfRlJBTUVfSU5URVJWQUw8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1TLUNST1AgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1zdWJkZXYtZy1jcm9wJz48Y29uc3RhbnQ+VklESU9DX1NVQkRFVl9TX0NST1A8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1TLUZNVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN1YmRldi1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19TVUJERVZfU19GTVQ8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVNVQkRFVi1TLUZSQU1FLUlOVEVSVkFMICI8bGluayBsaW5rZW5kPSd2aWRpb2Mtc3ViZGV2LWctZnJhbWUtaW50ZXJ2YWwnPjxjb25zdGFudD5WSURJT0NfU1VCREVWX1NfRlJBTUVfSU5URVJWQUw8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVRSWS1FTkNPREVSLUNNRCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWVuY29kZXItY21kJz48Y29uc3RhbnQ+VklESU9DX1RSWV9FTkNPREVSX0NNRDwvY29uc3RhbnQ+PC9saW5rPiI+Ci08IUVOVElUWSBWSURJT0MtVFJZLUVYVC1DVFJMUyAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLWctZXh0LWN0cmxzJz48Y29uc3RhbnQ+VklESU9DX1RSWV9FWFRfQ1RSTFM8L2NvbnN0YW50PjwvbGluaz4iPgotPCFFTlRJVFkgVklESU9DLVRSWS1GTVQgIjxsaW5rIGxpbmtlbmQ9J3ZpZGlvYy1nLWZtdCc+PGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIFZJRElPQy1VTlNVQlNDUklCRS1FVkVOVCAiPGxpbmsgbGlua2VuZD0ndmlkaW9jLXN1YnNjcmliZS1ldmVudCc+PGNvbnN0YW50PlZJRElPQ19VTlNVQlNDUklCRV9FVkVOVDwvY29uc3RhbnQ+PC9saW5rPiI+Ci0KLTwhRU5USVRZIE1FRElBLUlPQy1ERVZJQ0UtSU5GTyAiPGxpbmsgbGlua2VuZD0nbWVkaWEtaW9jLWRldmljZS1pbmZvJz48Y29uc3RhbnQ+TUVESUFfSU9DX0RFVklDRV9JTkZPPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIE1FRElBLUlPQy1FTlVNLUVOVElUSUVTICI8bGluayBsaW5rZW5kPSdtZWRpYS1pb2MtZW51bS1lbnRpdGllcyc+PGNvbnN0YW50Pk1FRElBX0lPQ19FTlVNX0VOVElUSUVTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIE1FRElBLUlPQy1FTlVNLUxJTktTICI8bGluayBsaW5rZW5kPSdtZWRpYS1pb2MtZW51bS1saW5rcyc+PGNvbnN0YW50Pk1FRElBX0lPQ19FTlVNX0xJTktTPC9jb25zdGFudD48L2xpbms+Ij4KLTwhRU5USVRZIE1FRElBLUlPQy1TRVRVUC1MSU5LICI8bGluayBsaW5rZW5kPSdtZWRpYS1pb2Mtc2V0dXAtbGluayc+PGNvbnN0YW50Pk1FRElBX0lPQ19TRVRVUF9MSU5LPC9jb25zdGFudD48L2xpbms+Ij4KLQotPCEtLSBUeXBlcyAtLT4KLTwhRU5USVRZIHY0bDItc3RkLWlkICI8bGluayBsaW5rZW5kPSd2NGwyLXN0ZC1pZCc+djRsMl9zdGRfaWQ8L2xpbms+Ij4KLQotPCEtLSBFbnVtcyAtLT4KLTwhRU5USVRZIHY0bDItYnVmLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1Zi10eXBlJz52NGwyX2J1Zl90eXBlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLWNvbG9yc3BhY2UgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNvbG9yc3BhY2UnPnY0bDJfY29sb3JzcGFjZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1jdHJsLXR5cGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWN0cmwtdHlwZSc+djRsMl9jdHJsX3R5cGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXhwb3N1cmUtYXV0by10eXBlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1leHBvc3VyZS1hdXRvLXR5cGUnPnY0bDJfZXhwb3N1cmVfYXV0b190eXBlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLWZpZWxkICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1maWVsZCc+djRsMl9maWVsZDwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1mcm1pdmFsdHlwZXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybWl2YWx0eXBlcyc+djRsMl9mcm1pdmFsdHlwZXM8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtc2l6ZXR5cGVzICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXpldHlwZXMnPnY0bDJfZnJtc2l6ZXR5cGVzPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1idXMtcGl4ZWxjb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tYnVzLXBpeGVsY29kZSc+djRsMl9tYnVzX3BpeGVsY29kZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tZW1vcnkgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1lbW9yeSc+djRsMl9tZW1vcnk8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1hYzMtYml0cmF0ZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1hYzMtYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2FjM19iaXRyYXRlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tY3JjICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWNyYyc+djRsMl9tcGVnX2F1ZGlvX2NyYzwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWVtcGhhc2lzICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWVtcGhhc2lzJz52NGwyX21wZWdfYXVkaW9fZW1waGFzaXM8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1lbmNvZGluZyAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1lbmNvZGluZyc+djRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMS1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDFfYml0cmF0ZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDItYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wyX2JpdHJhdGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwzLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctYXVkaW8tbW9kZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1tb2RlJz52NGwyX21wZWdfYXVkaW9fbW9kZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tcGVnLWF1ZGlvLW1vZGUtZXh0ZW5zaW9uICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLW1vZGUtZXh0ZW5zaW9uJz52NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb248L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1hdWRpby1zYW1wbGluZy1mcmVxICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLXNhbXBsaW5nLWZyZXEnPnY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxPC9saW5rPiI+Ci08IUVOVElUWSBjaHJvbWEtc3BhdGlhbC1maWx0ZXItdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2Nocm9tYS1zcGF0aWFsLWZpbHRlci10eXBlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz4iPgotPCFFTlRJVFkgbHVtYS1zcGF0aWFsLWZpbHRlci10eXBlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0nbHVtYS1zcGF0aWFsLWZpbHRlci10eXBlJz52NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLW1lZGlhbi1maWx0ZXItdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLW1lZGlhbi1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctY3gyMzQxeC12aWRlby1zcGF0aWFsLWZpbHRlci1tb2RlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tc3BhdGlhbC1maWx0ZXItbW9kZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctY3gyMzQxeC12aWRlby10ZW1wb3JhbC1maWx0ZXItbW9kZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy1zdHJlYW0tdHlwZSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1zdHJlYW0tdHlwZSc+djRsMl9tcGVnX3N0cmVhbV90eXBlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctc3RyZWFtLXZiaS1mbXQnPnY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdDwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1tcGVnLXZpZGVvLWFzcGVjdCAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12aWRlby1hc3BlY3QnPnY0bDJfbXBlZ192aWRlb19hc3BlY3Q8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy12aWRlby1iaXRyYXRlLW1vZGUgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tYml0cmF0ZS1tb2RlJz52NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlPC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmcgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmcnPnY0bDJfbXBlZ192aWRlb19lbmNvZGluZzwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSAiZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcG93ZXItbGluZS1mcmVxdWVuY3knPnY0bDJfcG93ZXJfbGluZV9mcmVxdWVuY3k8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcHJpb3JpdHkgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByaW9yaXR5Jz52NGwyX3ByaW9yaXR5PC9saW5rPiI+Ci08IUVOVElUWSB2NGwyLXN1YmRldi1mb3JtYXQtd2hlbmNlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdWJkZXYtZm9ybWF0LXdoZW5jZSc+djRsMl9zdWJkZXZfZm9ybWF0X3doZW5jZTwvbGluaz4iPgotPCFFTlRJVFkgdjRsMi10dW5lci10eXBlICJlbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10dW5lci10eXBlJz52NGwyX3R1bmVyX3R5cGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcHJlZW1waGFzaXMgImVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXByZWVtcGhhc2lzJz52NGwyX3ByZWVtcGhhc2lzPC9saW5rPiI+Ci0KLTwhLS0gU3RydWN0dXJlcyAtLT4KLTwhRU5USVRZIHY0bDItYXVkaW8gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW8nPnY0bDJfYXVkaW88L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItYXVkaW9vdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW9vdXQnPnY0bDJfYXVkaW9vdXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItYnQtdGltaW5ncyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idC10aW1pbmdzJz52NGwyX2J0X3RpbWluZ3M8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItYnVmZmVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1ZmZlcic+djRsMl9idWZmZXI8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcGxhbmUgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcGxhbmUnPnY0bDJfcGxhbmU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY2FwYWJpbGl0eSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jYXBhYmlsaXR5Jz52NGwyX2NhcGFiaWxpdHk8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY2FwdHVyZXBhcm0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwdHVyZXBhcm0nPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY2xpcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jbGlwJz52NGwyX2NsaXA8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY29udHJvbCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jb250cm9sJz52NGwyX2NvbnRyb2w8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY3JvcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wJz52NGwyX2Nyb3A8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItY3JvcGNhcCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wY2FwJz52NGwyX2Nyb3BjYXA8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZGJnLWNoaXAtaWRlbnQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLWNoaXAtaWRlbnQnPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZGJnLW1hdGNoICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1tYXRjaCc+djRsMl9kYmdfbWF0Y2g8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZGJnLXJlZ2lzdGVyICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1yZWdpc3Rlcic+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZHYtZW51bS1wcmVzZXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZHYtZW51bS1wcmVzZXQnPnY0bDJfZHZfZW51bV9wcmVzZXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZHYtcHJlc2V0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWR2LXByZXNldCc+djRsMl9kdl9wcmVzZXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZHYtdGltaW5ncyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kdi10aW1pbmdzJz52NGwyX2R2X3RpbWluZ3M8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZW5jLWlkeCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4Jz52NGwyX2VuY19pZHg8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZW5jLWlkeC1lbnRyeSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmMtaWR4LWVudHJ5Jz52NGwyX2VuY19pZHhfZW50cnk8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZW5jb2Rlci1jbWQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jb2Rlci1jbWQnPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXZlbnQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXZlbnQnPnY0bDJfZXZlbnQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXZlbnQtc3Vic2NyaXB0aW9uICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV2ZW50LXN1YnNjcmlwdGlvbic+djRsMl9ldmVudF9zdWJzY3JpcHRpb248L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXZlbnQtdnN5bmMgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXZlbnQtdnN5bmMnPnY0bDJfZXZlbnRfdnN5bmM8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2wgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2wnPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZXh0LWNvbnRyb2xzICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4dC1jb250cm9scyc+djRsMl9leHRfY29udHJvbHM8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZm10ZGVzYyAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mbXRkZXNjJz52NGwyX2ZtdGRlc2M8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZm9ybWF0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZvcm1hdCc+djRsMl9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJhY3QgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhY3QnPnY0bDJfZnJhY3Q8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJhbWVidWZmZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhbWVidWZmZXInPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJlcXVlbmN5ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyZXF1ZW5jeSc+djRsMl9mcmVxdWVuY3k8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtaXZhbC1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsLXN0ZXB3aXNlJz52NGwyX2ZybWl2YWxfc3RlcHdpc2U8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtaXZhbGVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtaXZhbGVudW0nPnY0bDJfZnJtaXZhbGVudW08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtc2l6ZS1kaXNjcmV0ZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLWRpc2NyZXRlJz52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtc2l6ZS1zdGVwd2lzZSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLXN0ZXB3aXNlJz52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItZnJtc2l6ZWVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZWVudW0nPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItaHctZnJlcS1zZWVrICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWh3LWZyZXEtc2Vlayc+djRsMl9od19mcmVxX3NlZWs8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItaW5wdXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItaW5wdXQnPnY0bDJfaW5wdXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItanBlZ2NvbXByZXNzaW9uICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWpwZWdjb21wcmVzc2lvbic+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbWJ1cy1mcmFtZWZtdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tYnVzLWZyYW1lZm10Jz52NGwyX21idXNfZnJhbWVmbXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbW9kdWxhdG9yICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1vZHVsYXRvcic+djRsMl9tb2R1bGF0b3I8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItbXBlZy12YmktZm10LWl2dHYgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12YmktZm10LWl2dHYnPnY0bDJfbXBlZ192YmlfZm10X2l2dHY8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItb3V0cHV0ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW91dHB1dCc+djRsMl9vdXRwdXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItb3V0cHV0cGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1vdXRwdXRwYXJtJz52NGwyX291dHB1dHBhcm08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcGl4LWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1waXgtZm9ybWF0Jz52NGwyX3BpeF9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcGl4LWZvcm1hdC1tcGxhbmUgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcGl4LWZvcm1hdC1tcGxhbmUnPnY0bDJfcGl4X2Zvcm1hdF9tcGxhbmU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcGxhbmUtcGl4LWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wbGFuZS1waXgtZm9ybWF0Jz52NGwyX3BsYW5lX3BpeF9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcXVlcnljdHJsICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5Y3RybCc+djRsMl9xdWVyeWN0cmw8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcXVlcnltZW51ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5bWVudSc+djRsMl9xdWVyeW1lbnU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcmVjdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1yZWN0Jz52NGwyX3JlY3Q8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItcmVxdWVzdGJ1ZmZlcnMgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVxdWVzdGJ1ZmZlcnMnPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1jYXAgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1jYXAnPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1kYXRhICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktZGF0YSc+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc2xpY2VkLXZiaS1mb3JtYXQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc2xpY2VkLXZiaS1mb3JtYXQnPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LWZyYW1lLWludGVydmFsICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXN1YmRldi1mcmFtZS1pbnRlcnZhbCc+djRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWw8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LWZyYW1lLWludGVydmFsLWVudW0gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3ViZGV2LWZyYW1lLWludGVydmFsLWVudW0nPnY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LWZyYW1lLXNpemUtZW51bSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdWJkZXYtZnJhbWUtc2l6ZS1lbnVtJz52NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LWNyb3AgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3ViZGV2LWNyb3AnPnY0bDJfc3ViZGV2X2Nyb3A8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdWJkZXYtZm9ybWF0Jz52NGwyX3N1YmRldl9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3ViZGV2LW1idXMtY29kZS1lbnVtICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXN1YmRldi1tYnVzLWNvZGUtZW51bSc+djRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3RhbmRhcmQgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RhbmRhcmQnPnY0bDJfc3RhbmRhcmQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItc3RyZWFtcGFybSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zdHJlYW1wYXJtJz52NGwyX3N0cmVhbXBhcm08L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItdGltZWNvZGUgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdGltZWNvZGUnPnY0bDJfdGltZWNvZGU8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItdHVuZXIgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdHVuZXInPnY0bDJfdHVuZXI8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItdmJpLWZvcm1hdCAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi12YmktZm9ybWF0Jz52NGwyX3ZiaV9mb3JtYXQ8L2xpbms+Ij4KLTwhRU5USVRZIHY0bDItd2luZG93ICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXdpbmRvdyc+djRsMl93aW5kb3c8L2xpbms+Ij4KLQotPCFFTlRJVFkgbWVkaWEtZGV2aWNlLWluZm8gInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J21lZGlhLWRldmljZS1pbmZvJz5tZWRpYV9kZXZpY2VfaW5mbzwvbGluaz4iPgotPCFFTlRJVFkgbWVkaWEtZW50aXR5LWRlc2MgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J21lZGlhLWVudGl0eS1kZXNjJz5tZWRpYV9lbnRpdHlfZGVzYzwvbGluaz4iPgotPCFFTlRJVFkgbWVkaWEtbGlua3MtZW51bSAic3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0nbWVkaWEtbGlua3MtZW51bSc+bWVkaWFfbGlua3NfZW51bTwvbGluaz4iPgotPCFFTlRJVFkgbWVkaWEtcGFkLWRlc2MgInN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J21lZGlhLXBhZC1kZXNjJz5tZWRpYV9wYWRfZGVzYzwvbGluaz4iPgotPCFFTlRJVFkgbWVkaWEtbGluay1kZXNjICJzdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSdtZWRpYS1saW5rLWRlc2MnPm1lZGlhX2xpbmtfZGVzYzwvbGluaz4iPgotCi08IS0tIEVycm9yIENvZGVzIC0tPgotPCFFTlRJVFkgRUFDQ0VTICI8ZXJyb3Jjb2RlPkVBQ0NFUzwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVBR0FJTiAiPGVycm9yY29kZT5FQUdBSU48L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFQkFERiAiPGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVCVVNZICI8ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgotPCFFTlRJVFkgRUZBVUxUICI8ZXJyb3Jjb2RlPkVGQVVMVDwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVJTyAiPGVycm9yY29kZT5FSU88L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFSU5UUiAiPGVycm9yY29kZT5FSU5UUjwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVJTlZBTCAiPGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFTkZJTEUgIjxlcnJvcmNvZGU+RU5GSUxFPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgotPCFFTlRJVFkgRU5PTUVNICI8ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVOT1NQQyAiPGVycm9yY29kZT5FTk9TUEM8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFTk9UVFkgIjxlcnJvcmNvZGU+RU5PVFRZPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgotPCFFTlRJVFkgRU5YSU8gIjxlcnJvcmNvZGU+RU5YSU88L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFTUZJTEUgIjxlcnJvcmNvZGU+RU1GSUxFPC9lcnJvcmNvZGU+IGVycm9yIGNvZGUiPgotPCFFTlRJVFkgRVBFUk0gIjxlcnJvcmNvZGU+RVBFUk08L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci08IUVOVElUWSBFUElQRSAiPGVycm9yY29kZT5FUElQRTwvZXJyb3Jjb2RlPiBlcnJvciBjb2RlIj4KLTwhRU5USVRZIEVSQU5HRSAiPGVycm9yY29kZT5FUkFOR0U8L2Vycm9yY29kZT4gZXJyb3IgY29kZSI+Ci0KLTwhLS0gU3Vic2VjdGlvbnMgLS0+Ci08IUVOVElUWSBzdWItYmlibGlvIFNZU1RFTSAidjRsL2JpYmxpby54bWwiPgotPCFFTlRJVFkgc3ViLWNvbW1vbiBTWVNURU0gInY0bC9jb21tb24ueG1sIj4KLTwhRU5USVRZIHN1Yi1wbGFuYXItYXBpcyBTWVNURU0gInY0bC9wbGFuYXItYXBpcy54bWwiPgotPCFFTlRJVFkgc3ViLWNvbXBhdCBTWVNURU0gInY0bC9jb21wYXQueG1sIj4KLTwhRU5USVRZIHN1Yi1jb250cm9scyBTWVNURU0gInY0bC9jb250cm9scy54bWwiPgotPCFFTlRJVFkgc3ViLWRldi1jYXB0dXJlIFNZU1RFTSAidjRsL2Rldi1jYXB0dXJlLnhtbCI+Ci08IUVOVElUWSBzdWItZGV2LWNvZGVjIFNZU1RFTSAidjRsL2Rldi1jb2RlYy54bWwiPgotPCFFTlRJVFkgc3ViLWRldi1ldmVudCBTWVNURU0gInY0bC9kZXYtZXZlbnQueG1sIj4KLTwhRU5USVRZIHN1Yi1kZXYtZWZmZWN0IFNZU1RFTSAidjRsL2Rldi1lZmZlY3QueG1sIj4KLTwhRU5USVRZIHN1Yi1kZXYtb3NkIFNZU1RFTSAidjRsL2Rldi1vc2QueG1sIj4KLTwhRU5USVRZIHN1Yi1kZXYtb3V0cHV0IFNZU1RFTSAidjRsL2Rldi1vdXRwdXQueG1sIj4KLTwhRU5USVRZIHN1Yi1kZXYtb3ZlcmxheSBTWVNURU0gInY0bC9kZXYtb3ZlcmxheS54bWwiPgotPCFFTlRJVFkgc3ViLWRldi1yYWRpbyBTWVNURU0gInY0bC9kZXYtcmFkaW8ueG1sIj4KLTwhRU5USVRZIHN1Yi1kZXYtcmF3LXZiaSBTWVNURU0gInY0bC9kZXYtcmF3LXZiaS54bWwiPgotPCFFTlRJVFkgc3ViLWRldi1yZHMgU1lTVEVNICJ2NGwvZGV2LXJkcy54bWwiPgotPCFFTlRJVFkgc3ViLWRldi1zbGljZWQtdmJpIFNZU1RFTSAidjRsL2Rldi1zbGljZWQtdmJpLnhtbCI+Ci08IUVOVElUWSBzdWItZGV2LXN1YmRldiBTWVNURU0gInY0bC9kZXYtc3ViZGV2LnhtbCI+Ci08IUVOVElUWSBzdWItZGV2LXRlbGV0ZXh0IFNZU1RFTSAidjRsL2Rldi10ZWxldGV4dC54bWwiPgotPCFFTlRJVFkgc3ViLWRyaXZlciBTWVNURU0gInY0bC9kcml2ZXIueG1sIj4KLTwhRU5USVRZIHN1Yi1saWJ2NGwgU1lTVEVNICJ2NGwvbGlidjRsLnhtbCI+Ci08IUVOVElUWSBzdWItbGlyY19kZXZpY2VfaW50ZXJmYWNlIFNZU1RFTSAidjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwiPgotPCFFTlRJVFkgc3ViLXJlbW90ZV9jb250cm9sbGVycyBTWVNURU0gInY0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sIj4KLTwhRU5USVRZIHN1Yi1mZGwtYXBwZW5kaXggU1lTVEVNICJ2NGwvZmRsLWFwcGVuZGl4LnhtbCI+Ci08IUVOVElUWSBzdWItY2xvc2UgU1lTVEVNICJ2NGwvZnVuYy1jbG9zZS54bWwiPgotPCFFTlRJVFkgc3ViLWlvY3RsIFNZU1RFTSAidjRsL2Z1bmMtaW9jdGwueG1sIj4KLTwhRU5USVRZIHN1Yi1tbWFwIFNZU1RFTSAidjRsL2Z1bmMtbW1hcC54bWwiPgotPCFFTlRJVFkgc3ViLW11bm1hcCBTWVNURU0gInY0bC9mdW5jLW11bm1hcC54bWwiPgotPCFFTlRJVFkgc3ViLW9wZW4gU1lTVEVNICJ2NGwvZnVuYy1vcGVuLnhtbCI+Ci08IUVOVElUWSBzdWItcG9sbCBTWVNURU0gInY0bC9mdW5jLXBvbGwueG1sIj4KLTwhRU5USVRZIHN1Yi1yZWFkIFNZU1RFTSAidjRsL2Z1bmMtcmVhZC54bWwiPgotPCFFTlRJVFkgc3ViLXNlbGVjdCBTWVNURU0gInY0bC9mdW5jLXNlbGVjdC54bWwiPgotPCFFTlRJVFkgc3ViLXdyaXRlIFNZU1RFTSAidjRsL2Z1bmMtd3JpdGUueG1sIj4KLTwhRU5USVRZIHN1Yi1pbyBTWVNURU0gInY0bC9pby54bWwiPgotPCFFTlRJVFkgc3ViLWdyZXkgU1lTVEVNICJ2NGwvcGl4Zm10LWdyZXkueG1sIj4KLTwhRU5USVRZIHN1Yi1tNDIwIFNZU1RFTSAidjRsL3BpeGZtdC1tNDIwLnhtbCI+Ci08IUVOVElUWSBzdWItbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgotPCFFTlRJVFkgc3ViLW52MTJtIFNZU1RFTSAidjRsL3BpeGZtdC1udjEybS54bWwiPgotPCFFTlRJVFkgc3ViLW52MTJtdCBTWVNURU0gInY0bC9waXhmbXQtbnYxMm10LnhtbCI+Ci08IUVOVElUWSBzdWItbnYxNiBTWVNURU0gInY0bC9waXhmbXQtbnYxNi54bWwiPgotPCFFTlRJVFkgc3ViLXBhY2tlZC1yZ2IgU1lTVEVNICJ2NGwvcGl4Zm10LXBhY2tlZC1yZ2IueG1sIj4KLTwhRU5USVRZIHN1Yi1wYWNrZWQteXV2IFNZU1RFTSAidjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbCI+Ci08IUVOVElUWSBzdWItc2JnZ3IxNiBTWVNURU0gInY0bC9waXhmbXQtc2JnZ3IxNi54bWwiPgotPCFFTlRJVFkgc3ViLXNiZ2dyOCBTWVNURU0gInY0bC9waXhmbXQtc2JnZ3I4LnhtbCI+Ci08IUVOVElUWSBzdWItc2dicmc4IFNZU1RFTSAidjRsL3BpeGZtdC1zZ2JyZzgueG1sIj4KLTwhRU5USVRZIHN1Yi1zZ3JiZzggU1lTVEVNICJ2NGwvcGl4Zm10LXNncmJnOC54bWwiPgotPCFFTlRJVFkgc3ViLXV5dnkgU1lTVEVNICJ2NGwvcGl4Zm10LXV5dnkueG1sIj4KLTwhRU5USVRZIHN1Yi12eXV5IFNZU1RFTSAidjRsL3BpeGZtdC12eXV5LnhtbCI+Ci08IUVOVElUWSBzdWIteTE2IFNZU1RFTSAidjRsL3BpeGZtdC15MTYueG1sIj4KLTwhRU5USVRZIHN1Yi15NDFwIFNZU1RFTSAidjRsL3BpeGZtdC15NDFwLnhtbCI+Ci08IUVOVElUWSBzdWIteXV2NDEwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MTAueG1sIj4KLTwhRU5USVRZIHN1Yi15dXY0MTFwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MTFwLnhtbCI+Ci08IUVOVElUWSBzdWIteXV2NDIwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MjAueG1sIj4KLTwhRU5USVRZIHN1Yi15dXY0MjBtIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MjBtLnhtbCI+Ci08IUVOVElUWSBzdWIteXV2NDIycCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIycC54bWwiPgotPCFFTlRJVFkgc3ViLXl1eXYgU1lTVEVNICJ2NGwvcGl4Zm10LXl1eXYueG1sIj4KLTwhRU5USVRZIHN1Yi15dnl1IFNZU1RFTSAidjRsL3BpeGZtdC15dnl1LnhtbCI+Ci08IUVOVElUWSBzdWItc3JnZ2IxMCBTWVNURU0gInY0bC9waXhmbXQtc3JnZ2IxMC54bWwiPgotPCFFTlRJVFkgc3ViLXNyZ2diMTIgU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diMTIueG1sIj4KLTwhRU5USVRZIHN1Yi1zcmdnYjggU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diOC54bWwiPgotPCFFTlRJVFkgc3ViLXkxMCBTWVNURU0gInY0bC9waXhmbXQteTEwLnhtbCI+Ci08IUVOVElUWSBzdWIteTEyIFNZU1RFTSAidjRsL3BpeGZtdC15MTIueG1sIj4KLTwhRU5USVRZIHN1Yi15MTBiIFNZU1RFTSAidjRsL3BpeGZtdC15MTBiLnhtbCI+Ci08IUVOVElUWSBzdWItcGl4Zm10IFNZU1RFTSAidjRsL3BpeGZtdC54bWwiPgotPCFFTlRJVFkgc3ViLWNyb3BjYXAgU1lTVEVNICJ2NGwvdmlkaW9jLWNyb3BjYXAueG1sIj4KLTwhRU5USVRZIHN1Yi1kYmctZy1yZWdpc3RlciBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sIj4KLTwhRU5USVRZIHN1Yi1lbmNvZGVyLWNtZCBTWVNURU0gInY0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIj4KLTwhRU5USVRZIHN1Yi1lbnVtLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mbXQueG1sIj4KLTwhRU5USVRZIHN1Yi1lbnVtLWZyYW1laW50ZXJ2YWxzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbCI+Ci08IUVOVElUWSBzdWItZW51bS1mcmFtZXNpemVzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sIj4KLTwhRU5USVRZIHN1Yi1lbnVtYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpby54bWwiPgotPCFFTlRJVFkgc3ViLWVudW1hdWRpb291dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbCI+Ci08IUVOVElUWSBzdWItZW51bWlucHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIj4KLTwhRU5USVRZIHN1Yi1lbnVtb3V0cHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbCI+Ci08IUVOVElUWSBzdWItZW51bS1kdi1wcmVzZXRzIFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtLWR2LXByZXNldHMueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWR2LXByZXNldCBTWVNURU0gInY0bC92aWRpb2MtZy1kdi1wcmVzZXQueG1sIj4KLTwhRU5USVRZIHN1Yi1xdWVyeS1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwiPgotPCFFTlRJVFkgc3ViLWctZHYtdGltaW5ncyBTWVNURU0gInY0bC92aWRpb2MtZy1kdi10aW1pbmdzLnhtbCI+Ci08IUVOVElUWSBzdWItZW51bXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZW51bXN0ZC54bWwiPgotPCFFTlRJVFkgc3ViLWctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWF1ZGlvb3V0IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCI+Ci08IUVOVElUWSBzdWItZGJnLWctY2hpcC1pZGVudCBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwiPgotPCFFTlRJVFkgc3ViLWctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Ci08IUVOVElUWSBzdWItZy1jdHJsIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWN0cmwueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWVuYy1pbmRleCBTWVNURU0gInY0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWZidWYgU1lTVEVNICJ2NGwvdmlkaW9jLWctZmJ1Zi54bWwiPgotPCFFTlRJVFkgc3ViLWctZm10IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZtdC54bWwiPgotPCFFTlRJVFkgc3ViLWctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgotPCFFTlRJVFkgc3ViLWctaW5wdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctaW5wdXQueG1sIj4KLTwhRU5USVRZIHN1Yi1nLWpwZWdjb21wIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWpwZWdjb21wLnhtbCI+Ci08IUVOVElUWSBzdWItZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Ci08IUVOVElUWSBzdWItZy1vdXRwdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctb3V0cHV0LnhtbCI+Ci08IUVOVElUWSBzdWItZy1wYXJtIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXBhcm0ueG1sIj4KLTwhRU5USVRZIHN1Yi1nLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Ci08IUVOVElUWSBzdWItZy1zbGljZWQtdmJpLWNhcCBTWVNURU0gInY0bC92aWRpb2MtZy1zbGljZWQtdmJpLWNhcC54bWwiPgotPCFFTlRJVFkgc3ViLWctc3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXN0ZC54bWwiPgotPCFFTlRJVFkgc3ViLWctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KLTwhRU5USVRZIHN1Yi1sb2ctc3RhdHVzIFNZU1RFTSAidjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbCI+Ci08IUVOVElUWSBzdWItb3ZlcmxheSBTWVNURU0gInY0bC92aWRpb2Mtb3ZlcmxheS54bWwiPgotPCFFTlRJVFkgc3ViLXFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KLTwhRU5USVRZIHN1Yi1xdWVyeWJ1ZiBTWVNURU0gInY0bC92aWRpb2MtcXVlcnlidWYueG1sIj4KLTwhRU5USVRZIHN1Yi1xdWVyeWNhcCBTWVNURU0gInY0bC92aWRpb2MtcXVlcnljYXAueG1sIj4KLTwhRU5USVRZIHN1Yi1xdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgotPCFFTlRJVFkgc3ViLXF1ZXJ5c3RkIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwiPgotPCFFTlRJVFkgc3ViLXJlcWJ1ZnMgU1lTVEVNICJ2NGwvdmlkaW9jLXJlcWJ1ZnMueG1sIj4KLTwhRU5USVRZIHN1Yi1zLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KLTwhRU5USVRZIHN1Yi1zdHJlYW1vbiBTWVNURU0gInY0bC92aWRpb2Mtc3RyZWFtb24ueG1sIj4KLTwhRU5USVRZIHN1Yi1zdWJkZXYtZW51bS1mcmFtZS1pbnRlcnZhbCBTWVNURU0gInY0bC92aWRpb2Mtc3ViZGV2LWVudW0tZnJhbWUtaW50ZXJ2YWwueG1sIj4KLTwhRU5USVRZIHN1Yi1zdWJkZXYtZW51bS1mcmFtZS1zaXplIFNZU1RFTSAidjRsL3ZpZGlvYy1zdWJkZXYtZW51bS1mcmFtZS1zaXplLnhtbCI+Ci08IUVOVElUWSBzdWItc3ViZGV2LWVudW0tbWJ1cy1jb2RlIFNZU1RFTSAidjRsL3ZpZGlvYy1zdWJkZXYtZW51bS1tYnVzLWNvZGUueG1sIj4KLTwhRU5USVRZIHN1Yi1zdWJkZXYtZm9ybWF0cyBTWVNURU0gInY0bC9zdWJkZXYtZm9ybWF0cy54bWwiPgotPCFFTlRJVFkgc3ViLXN1YmRldi1nLWNyb3AgU1lTVEVNICJ2NGwvdmlkaW9jLXN1YmRldi1nLWNyb3AueG1sIj4KLTwhRU5USVRZIHN1Yi1zdWJkZXYtZy1mbXQgU1lTVEVNICJ2NGwvdmlkaW9jLXN1YmRldi1nLWZtdC54bWwiPgotPCFFTlRJVFkgc3ViLXN1YmRldi1nLWZyYW1lLWludGVydmFsIFNZU1RFTSAidjRsL3ZpZGlvYy1zdWJkZXYtZy1mcmFtZS1pbnRlcnZhbC54bWwiPgotPCFFTlRJVFkgc3ViLWNhcHR1cmUtYyBTWVNURU0gInY0bC9jYXB0dXJlLmMueG1sIj4KLTwhRU5USVRZIHN1Yi1rZXl0YWJsZS1jIFNZU1RFTSAidjRsL2tleXRhYmxlLmMueG1sIj4KLTwhRU5USVRZIHN1Yi12NGwyZ3JhYi1jIFNZU1RFTSAidjRsL3Y0bDJncmFiLmMueG1sIj4KLTwhRU5USVRZIHN1Yi12aWRlb2RldjItaCBTWVNURU0gInY0bC92aWRlb2RldjIuaC54bWwiPgotPCFFTlRJVFkgc3ViLXY0bDIgU1lTVEVNICJ2NGwvdjRsMi54bWwiPgotPCFFTlRJVFkgc3ViLWRxZXZlbnQgU1lTVEVNICJ2NGwvdmlkaW9jLWRxZXZlbnQueG1sIj4KLTwhRU5USVRZIHN1Yi1zdWJzY3JpYmUtZXZlbnQgU1lTVEVNICJ2NGwvdmlkaW9jLXN1YnNjcmliZS1ldmVudC54bWwiPgotPCFFTlRJVFkgc3ViLWludHJvIFNZU1RFTSAiZHZiL2ludHJvLnhtbCI+Ci08IUVOVElUWSBzdWItZnJvbnRlbmQgU1lTVEVNICJkdmIvZnJvbnRlbmQueG1sIj4KLTwhRU5USVRZIHN1Yi1kdmJwcm9wZXJ0eSBTWVNURU0gImR2Yi9kdmJwcm9wZXJ0eS54bWwiPgotPCFFTlRJVFkgc3ViLWRlbXV4IFNZU1RFTSAiZHZiL2RlbXV4LnhtbCI+Ci08IUVOVElUWSBzdWItdmlkZW8gU1lTVEVNICJkdmIvdmlkZW8ueG1sIj4KLTwhRU5USVRZIHN1Yi1hdWRpbyBTWVNURU0gImR2Yi9hdWRpby54bWwiPgotPCFFTlRJVFkgc3ViLWNhIFNZU1RFTSAiZHZiL2NhLnhtbCI+Ci08IUVOVElUWSBzdWItbmV0IFNZU1RFTSAiZHZiL25ldC54bWwiPgotPCFFTlRJVFkgc3ViLWtkYXBpIFNZU1RFTSAiZHZiL2tkYXBpLnhtbCI+Ci08IUVOVElUWSBzdWItZXhhbXBsZXMgU1lTVEVNICJkdmIvZXhhbXBsZXMueG1sIj4KLTwhRU5USVRZIHN1Yi1mcm9udGVuZC1oIFNZU1RFTSAiZHZiL2Zyb250ZW5kLmgueG1sIj4KLTwhRU5USVRZIHN1Yi1kdmJhcGkgU1lTVEVNICJkdmIvZHZiYXBpLnhtbCI+Ci08IUVOVElUWSBzdWItbWVkaWEgU1lTVEVNICJtZWRpYS54bWwiPgotPCFFTlRJVFkgc3ViLW1lZGlhLWVudGl0aWVzIFNZU1RFTSAibWVkaWEtZW50aXRpZXMudG1wbCI+Ci08IUVOVElUWSBzdWItbWVkaWEtaW5kaWNlcyBTWVNURU0gIm1lZGlhLWluZGljZXMudG1wbCI+Ci0KLTwhRU5USVRZIHN1Yi1tZWRpYS1jb250cm9sbGVyIFNZU1RFTSAidjRsL21lZGlhLWNvbnRyb2xsZXIueG1sIj4KLTwhRU5USVRZIHN1Yi1tZWRpYS1mdW5jLW9wZW4gU1lTVEVNICJ2NGwvbWVkaWEtZnVuYy1vcGVuLnhtbCI+Ci08IUVOVElUWSBzdWItbWVkaWEtZnVuYy1jbG9zZSBTWVNURU0gInY0bC9tZWRpYS1mdW5jLWNsb3NlLnhtbCI+Ci08IUVOVElUWSBzdWItbWVkaWEtZnVuYy1pb2N0bCBTWVNURU0gInY0bC9tZWRpYS1mdW5jLWlvY3RsLnhtbCI+Ci08IUVOVElUWSBzdWItbWVkaWEtaW9jLWRldmljZS1pbmZvIFNZU1RFTSAidjRsL21lZGlhLWlvYy1kZXZpY2UtaW5mby54bWwiPgotPCFFTlRJVFkgc3ViLW1lZGlhLWlvYy1lbnVtLWVudGl0aWVzIFNZU1RFTSAidjRsL21lZGlhLWlvYy1lbnVtLWVudGl0aWVzLnhtbCI+Ci08IUVOVElUWSBzdWItbWVkaWEtaW9jLWVudW0tbGlua3MgU1lTVEVNICJ2NGwvbWVkaWEtaW9jLWVudW0tbGlua3MueG1sIj4KLTwhRU5USVRZIHN1Yi1tZWRpYS1pb2Mtc2V0dXAtbGluayBTWVNURU0gInY0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwiPgotCi08IS0tIEZ1bmN0aW9uIFJlZmVyZW5jZSAtLT4KLTwhRU5USVRZIGNsb3NlIFNZU1RFTSAidjRsL2Z1bmMtY2xvc2UueG1sIj4KLTwhRU5USVRZIGlvY3RsIFNZU1RFTSAidjRsL2Z1bmMtaW9jdGwueG1sIj4KLTwhRU5USVRZIG1tYXAgU1lTVEVNICJ2NGwvZnVuYy1tbWFwLnhtbCI+Ci08IUVOVElUWSBtdW5tYXAgU1lTVEVNICJ2NGwvZnVuYy1tdW5tYXAueG1sIj4KLTwhRU5USVRZIG9wZW4gU1lTVEVNICJ2NGwvZnVuYy1vcGVuLnhtbCI+Ci08IUVOVElUWSBwb2xsIFNZU1RFTSAidjRsL2Z1bmMtcG9sbC54bWwiPgotPCFFTlRJVFkgcmVhZCBTWVNURU0gInY0bC9mdW5jLXJlYWQueG1sIj4KLTwhRU5USVRZIHNlbGVjdCBTWVNURU0gInY0bC9mdW5jLXNlbGVjdC54bWwiPgotPCFFTlRJVFkgd3JpdGUgU1lTVEVNICJ2NGwvZnVuYy13cml0ZS54bWwiPgotPCFFTlRJVFkgZ3JleSBTWVNURU0gInY0bC9waXhmbXQtZ3JleS54bWwiPgotPCFFTlRJVFkgbnYxMiBTWVNURU0gInY0bC9waXhmbXQtbnYxMi54bWwiPgotPCFFTlRJVFkgbnYxMm0gU1lTVEVNICJ2NGwvcGl4Zm10LW52MTJtLnhtbCI+Ci08IUVOVElUWSBudjE2IFNZU1RFTSAidjRsL3BpeGZtdC1udjE2LnhtbCI+Ci08IUVOVElUWSBwYWNrZWQtcmdiIFNZU1RFTSAidjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCI+Ci08IUVOVElUWSBwYWNrZWQteXV2IFNZU1RFTSAidjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbCI+Ci08IUVOVElUWSBzYmdncjE2IFNZU1RFTSAidjRsL3BpeGZtdC1zYmdncjE2LnhtbCI+Ci08IUVOVElUWSBzYmdncjggU1lTVEVNICJ2NGwvcGl4Zm10LXNiZ2dyOC54bWwiPgotPCFFTlRJVFkgc2dicmc4IFNZU1RFTSAidjRsL3BpeGZtdC1zZ2JyZzgueG1sIj4KLTwhRU5USVRZIHNncmJnOCBTWVNURU0gInY0bC9waXhmbXQtc2dyYmc4LnhtbCI+Ci08IUVOVElUWSB1eXZ5IFNZU1RFTSAidjRsL3BpeGZtdC11eXZ5LnhtbCI+Ci08IUVOVElUWSB2eXV5IFNZU1RFTSAidjRsL3BpeGZtdC12eXV5LnhtbCI+Ci08IUVOVElUWSB5MTYgU1lTVEVNICJ2NGwvcGl4Zm10LXkxNi54bWwiPgotPCFFTlRJVFkgeTQxcCBTWVNURU0gInY0bC9waXhmbXQteTQxcC54bWwiPgotPCFFTlRJVFkgeXV2NDEwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MTAueG1sIj4KLTwhRU5USVRZIHl1djQxMXAgU1lTVEVNICJ2NGwvcGl4Zm10LXl1djQxMXAueG1sIj4KLTwhRU5USVRZIHl1djQyMCBTWVNURU0gInY0bC9waXhmbXQteXV2NDIwLnhtbCI+Ci08IUVOVElUWSB5dXY0MjBtIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MjBtLnhtbCI+Ci08IUVOVElUWSB5dXY0MjJwIFNZU1RFTSAidjRsL3BpeGZtdC15dXY0MjJwLnhtbCI+Ci08IUVOVElUWSB5dXl2IFNZU1RFTSAidjRsL3BpeGZtdC15dXl2LnhtbCI+Ci08IUVOVElUWSB5dnl1IFNZU1RFTSAidjRsL3BpeGZtdC15dnl1LnhtbCI+Ci08IUVOVElUWSBzcmdnYjEwIFNZU1RFTSAidjRsL3BpeGZtdC1zcmdnYjEwLnhtbCI+Ci08IUVOVElUWSBzcmdnYjggU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diOC54bWwiPgotPCFFTlRJVFkgeTEwIFNZU1RFTSAidjRsL3BpeGZtdC15MTAueG1sIj4KLTwhRU5USVRZIGNyb3BjYXAgU1lTVEVNICJ2NGwvdmlkaW9jLWNyb3BjYXAueG1sIj4KLTwhRU5USVRZIGRiZy1nLXJlZ2lzdGVyIFNZU1RFTSAidjRsL3ZpZGlvYy1kYmctZy1yZWdpc3Rlci54bWwiPgotPCFFTlRJVFkgZW5jb2Rlci1jbWQgU1lTVEVNICJ2NGwvdmlkaW9jLWVuY29kZXItY21kLnhtbCI+Ci08IUVOVElUWSBlbnVtLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mbXQueG1sIj4KLTwhRU5USVRZIGVudW0tZnJhbWVpbnRlcnZhbHMgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW0tZnJhbWVpbnRlcnZhbHMueG1sIj4KLTwhRU5USVRZIGVudW0tZnJhbWVzaXplcyBTWVNURU0gInY0bC92aWRpb2MtZW51bS1mcmFtZXNpemVzLnhtbCI+Ci08IUVOVElUWSBlbnVtYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1hdWRpby54bWwiPgotPCFFTlRJVFkgZW51bWF1ZGlvb3V0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sIj4KLTwhRU5USVRZIGVudW1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZW51bWlucHV0LnhtbCI+Ci08IUVOVElUWSBlbnVtb3V0cHV0IFNZU1RFTSAidjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbCI+Ci08IUVOVElUWSBlbnVtLWR2LXByZXNldHMgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW0tZHYtcHJlc2V0cy54bWwiPgotPCFFTlRJVFkgZy1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbCI+Ci08IUVOVElUWSBxdWVyeS1kdi1wcmVzZXQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwiPgotPCFFTlRJVFkgZy1kdi10aW1pbmdzIFNZU1RFTSAidjRsL3ZpZGlvYy1nLWR2LXRpbWluZ3MueG1sIj4KLTwhRU5USVRZIGVudW1zdGQgU1lTVEVNICJ2NGwvdmlkaW9jLWVudW1zdGQueG1sIj4KLTwhRU5USVRZIGctYXVkaW8gU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW8ueG1sIj4KLTwhRU5USVRZIGctYXVkaW9vdXQgU1lTVEVNICJ2NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sIj4KLTwhRU5USVRZIGRiZy1nLWNoaXAtaWRlbnQgU1lTVEVNICJ2NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sIj4KLTwhRU5USVRZIGctY3JvcCBTWVNURU0gInY0bC92aWRpb2MtZy1jcm9wLnhtbCI+Ci08IUVOVElUWSBnLWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLWctY3RybC54bWwiPgotPCFFTlRJVFkgZy1lbmMtaW5kZXggU1lTVEVNICJ2NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbCI+Ci08IUVOVElUWSBnLWV4dC1jdHJscyBTWVNURU0gInY0bC92aWRpb2MtZy1leHQtY3RybHMueG1sIj4KLTwhRU5USVRZIGctZmJ1ZiBTWVNURU0gInY0bC92aWRpb2MtZy1mYnVmLnhtbCI+Ci08IUVOVElUWSBnLWZtdCBTWVNURU0gInY0bC92aWRpb2MtZy1mbXQueG1sIj4KLTwhRU5USVRZIGctZnJlcXVlbmN5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwiPgotPCFFTlRJVFkgZy1pbnB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1pbnB1dC54bWwiPgotPCFFTlRJVFkgZy1qcGVnY29tcCBTWVNURU0gInY0bC92aWRpb2MtZy1qcGVnY29tcC54bWwiPgotPCFFTlRJVFkgZy1tb2R1bGF0b3IgU1lTVEVNICJ2NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCI+Ci08IUVOVElUWSBnLW91dHB1dCBTWVNURU0gInY0bC92aWRpb2MtZy1vdXRwdXQueG1sIj4KLTwhRU5USVRZIGctcGFybSBTWVNURU0gInY0bC92aWRpb2MtZy1wYXJtLnhtbCI+Ci08IUVOVElUWSBnLXByaW9yaXR5IFNZU1RFTSAidjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCI+Ci08IUVOVElUWSBnLXNsaWNlZC12YmktY2FwIFNZU1RFTSAidjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbCI+Ci08IUVOVElUWSBnLXN0ZCBTWVNURU0gInY0bC92aWRpb2MtZy1zdGQueG1sIj4KLTwhRU5USVRZIGctdHVuZXIgU1lTVEVNICJ2NGwvdmlkaW9jLWctdHVuZXIueG1sIj4KLTwhRU5USVRZIGxvZy1zdGF0dXMgU1lTVEVNICJ2NGwvdmlkaW9jLWxvZy1zdGF0dXMueG1sIj4KLTwhRU5USVRZIG92ZXJsYXkgU1lTVEVNICJ2NGwvdmlkaW9jLW92ZXJsYXkueG1sIj4KLTwhRU5USVRZIHFidWYgU1lTVEVNICJ2NGwvdmlkaW9jLXFidWYueG1sIj4KLTwhRU5USVRZIHF1ZXJ5YnVmIFNZU1RFTSAidjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwiPgotPCFFTlRJVFkgcXVlcnljYXAgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y2FwLnhtbCI+Ci08IUVOVElUWSBxdWVyeWN0cmwgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwiPgotPCFFTlRJVFkgcXVlcnlzdGQgU1lTVEVNICJ2NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbCI+Ci08IUVOVElUWSByZXFidWZzIFNZU1RFTSAidjRsL3ZpZGlvYy1yZXFidWZzLnhtbCI+Ci08IUVOVElUWSBzLWh3LWZyZXEtc2VlayBTWVNURU0gInY0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sIj4KLTwhRU5USVRZIHN0cmVhbW9uIFNZU1RFTSAidjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwiPgotPCFFTlRJVFkgZHFldmVudCBTWVNURU0gInY0bC92aWRpb2MtZHFldmVudC54bWwiPgotPCFFTlRJVFkgc3Vic2NyaWJlX2V2ZW50IFNZU1RFTSAidjRsL3ZpZGlvYy1zdWJzY3JpYmUtZXZlbnQueG1sIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtaW5kaWNlcy50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGQ2MDMxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1pbmRpY2VzLnRtcGwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08IS0tIEdlbmVyYXRlZCBmaWxlISBEbyBub3QgZWRpdC4gLS0+Ci0KLTxpbmRleD48dGl0bGU+TGlzdCBvZiBUeXBlczwvdGl0bGU+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPjxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RkLWlkJz52NGwyX3N0ZF9pZDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1Zi10eXBlJz52NGwyX2J1Zl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY29sb3JzcGFjZSc+djRsMl9jb2xvcnNwYWNlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY3RybC10eXBlJz52NGwyX2N0cmxfdHlwZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4cG9zdXJlLWF1dG8tdHlwZSc+djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1maWVsZCc+djRsMl9maWVsZDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybWl2YWx0eXBlcyc+djRsMl9mcm1pdmFsdHlwZXM8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXpldHlwZXMnPnY0bDJfZnJtc2l6ZXR5cGVzPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbWVtb3J5Jz52NGwyX21lbW9yeTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tY3JjJz52NGwyX21wZWdfYXVkaW9fY3JjPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1lbXBoYXNpcyc+djRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1lbmNvZGluZyc+djRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1sMS1iaXRyYXRlJz52NGwyX21wZWdfYXVkaW9fbDFfYml0cmF0ZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbDItYml0cmF0ZSc+djRsMl9tcGVnX2F1ZGlvX2wyX2JpdHJhdGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWF1ZGlvLWwzLWJpdHJhdGUnPnY0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1hdWRpby1tb2RlJz52NGwyX21wZWdfYXVkaW9fbW9kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tbW9kZS1leHRlbnNpb24nPnY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbjwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctYXVkaW8tc2FtcGxpbmctZnJlcSc+djRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXE8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0nY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J2x1bWEtc3BhdGlhbC1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLW1lZGlhbi1maWx0ZXItdHlwZSc+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXNwYXRpYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLWN4MjM0MXgtdmlkZW8tdGVtcG9yYWwtZmlsdGVyLW1vZGUnPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1zdHJlYW0tdHlwZSc+djRsMl9tcGVnX3N0cmVhbV90eXBlPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy1zdHJlYW0tdmJpLWZtdCc+djRsMl9tcGVnX3N0cmVhbV92YmlfZm10PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItbXBlZy12aWRlby1hc3BlY3QnPnY0bDJfbXBlZ192aWRlb19hc3BlY3Q8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZpZGVvLWJpdHJhdGUtbW9kZSc+djRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLW1wZWctdmlkZW8tZW5jb2RpbmcnPnY0bDJfbXBlZ192aWRlb19lbmNvZGluZzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPmVudW0mbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXBvd2VyLWxpbmUtZnJlcXVlbmN5Jz52NGwyX3Bvd2VyX2xpbmVfZnJlcXVlbmN5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcHJpb3JpdHknPnY0bDJfcHJpb3JpdHk8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi10dW5lci10eXBlJz52NGwyX3R1bmVyX3R5cGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5lbnVtJm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1wcmVlbXBoYXNpcyc+djRsMl9wcmVlbXBoYXNpczwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItYXVkaW8nPnY0bDJfYXVkaW88L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWF1ZGlvb3V0Jz52NGwyX2F1ZGlvb3V0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1idC10aW1pbmdzJz52NGwyX2J0X3RpbWluZ3M8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWJ1ZmZlcic+djRsMl9idWZmZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNhcGFiaWxpdHknPnY0bDJfY2FwYWJpbGl0eTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY2FwdHVyZXBhcm0nPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNsaXAnPnY0bDJfY2xpcDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItY29udHJvbCc+djRsMl9jb250cm9sPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1jcm9wJz52NGwyX2Nyb3A8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWNyb3BjYXAnPnY0bDJfY3JvcGNhcDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZGJnLWNoaXAtaWRlbnQnPnY0bDJfZGJnX2NoaXBfaWRlbnQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1tYXRjaCc+djRsMl9kYmdfbWF0Y2g8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWRiZy1yZWdpc3Rlcic+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWR2LWVudW0tcHJlc2V0Jz52NGwyX2R2X2VudW1fcHJlc2V0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kdi1wcmVzZXQnPnY0bDJfZHZfcHJlc2V0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1kdi10aW1pbmdzJz52NGwyX2R2X3RpbWluZ3M8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWVuYy1pZHgnPnY0bDJfZW5jX2lkeDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZW5jLWlkeC1lbnRyeSc+djRsMl9lbmNfaWR4X2VudHJ5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1lbmNvZGVyLWNtZCc+djRsMl9lbmNvZGVyX2NtZDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZXh0LWNvbnRyb2wnPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWV4dC1jb250cm9scyc+djRsMl9leHRfY29udHJvbHM8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZtdGRlc2MnPnY0bDJfZm10ZGVzYzwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZm9ybWF0Jz52NGwyX2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJhY3QnPnY0bDJfZnJhY3Q8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZyYW1lYnVmZmVyJz52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcmVxdWVuY3knPnY0bDJfZnJlcXVlbmN5PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1pdmFsLXN0ZXB3aXNlJz52NGwyX2ZybWl2YWxfc3RlcHdpc2U8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybWl2YWxlbnVtJz52NGwyX2ZybWl2YWxlbnVtPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1mcm1zaXplLWRpc2NyZXRlJz52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWZybXNpemUtc3RlcHdpc2UnPnY0bDJfZnJtc2l6ZV9zdGVwd2lzZTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItZnJtc2l6ZWVudW0nPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWh3LWZyZXEtc2Vlayc+djRsMl9od19mcmVxX3NlZWs8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLWlucHV0Jz52NGwyX2lucHV0PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1qcGVnY29tcHJlc3Npb24nPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tb2R1bGF0b3InPnY0bDJfbW9kdWxhdG9yPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1tcGVnLXZiaS1mbXQtaXZ0dic+djRsMl9tcGVnX3ZiaV9mbXRfaXZ0djwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItb3V0cHV0Jz52NGwyX291dHB1dDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItb3V0cHV0cGFybSc+djRsMl9vdXRwdXRwYXJtPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1waXgtZm9ybWF0Jz52NGwyX3BpeF9mb3JtYXQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5Y3RybCc+djRsMl9xdWVyeWN0cmw8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXF1ZXJ5bWVudSc+djRsMl9xdWVyeW1lbnU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXJlY3QnPnY0bDJfcmVjdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItcmVxdWVzdGJ1ZmZlcnMnPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXNsaWNlZC12YmktY2FwJz52NGwyX3NsaWNlZF92YmlfY2FwPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zbGljZWQtdmJpLWRhdGEnPnY0bDJfc2xpY2VkX3ZiaV9kYXRhPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi1zbGljZWQtdmJpLWZvcm1hdCc+djRsMl9zbGljZWRfdmJpX2Zvcm1hdDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItc3RhbmRhcmQnPnY0bDJfc3RhbmRhcmQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXN0cmVhbXBhcm0nPnY0bDJfc3RyZWFtcGFybTwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+Ci08aW5kZXhlbnRyeT48cHJpbWFyeWllPnN0cnVjdCZuYnNwOzxsaW5rIGxpbmtlbmQ9J3Y0bDItdGltZWNvZGUnPnY0bDJfdGltZWNvZGU8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXR1bmVyJz52NGwyX3R1bmVyPC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4KLTxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsgbGlua2VuZD0ndjRsMi12YmktZm9ybWF0Jz52NGwyX3ZiaV9mb3JtYXQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPGluZGV4ZW50cnk+PHByaW1hcnlpZT5zdHJ1Y3QmbmJzcDs8bGluayBsaW5rZW5kPSd2NGwyLXdpbmRvdyc+djRsMl93aW5kb3c8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PgotPC9pbmRleD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI4YjRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL01ha2VmaWxlCkBAIC0wLDAgKzEsMzg2IEBACisjIyMKKyMgTWVkaWEgYnVpbGQgcnVsZXMgLSBBdXRvLWdlbmVyYXRlcyBtZWRpYSBjb250ZW50cy9pbmRleGVzIGFuZCAqLmggeG1sJ3MKKyMKKworU0hFTEw9L2Jpbi9iYXNoCisKK01FRElBX09CSl9ESVI9JChvYmp0cmVlKS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svCitNRURJQV9TUkNfRElSPSQoc3JjdHJlZSkvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhCisKK01FRElBX1RFTVAgPSAgbWVkaWEtZW50aXRpZXMudG1wbCBcCisJICAgICAgbWVkaWEtaW5kaWNlcy50bXBsIFwKKwkgICAgICB2aWRlb2RldjIuaC54bWwgXAorCSAgICAgIHY0bDIueG1sIFwKKwkgICAgICBhdWRpby5oLnhtbCBcCisJICAgICAgY2EuaC54bWwgXAorCSAgICAgIGRteC5oLnhtbCBcCisJICAgICAgZnJvbnRlbmQuaC54bWwgXAorCSAgICAgIG5ldC5oLnhtbCBcCisJICAgICAgdmlkZW8uaC54bWwgXAorCitJTUdGSUxFUyA6PSAkKHBhdHN1YnN0ICUuYjY0LCUsICQobm90ZGlyICQoc2hlbGwgbHMgJChNRURJQV9TUkNfRElSKS8qLmI2NCkpKQorT0JKSU1HRklMRVMgOj0gJChhZGRwcmVmaXggJChNRURJQV9PQkpfRElSKS8sICQoSU1HRklMRVMpKQorR0VORklMRVMgOj0gJChhZGRwcmVmaXggJChNRURJQV9PQkpfRElSKS8sICQoTUVESUFfVEVNUCkpCisKK1BIT05ZICs9IGNsZWFubWVkaWFkb2NzCisKK2NsZWFubWVkaWFkb2NzOgorCS1Acm0gYGZpbmQgJChNRURJQV9PQkpfRElSKSAtdHlwZSBsYCAkKEdFTkZJTEVTKSAkKE9CSklNR0ZJTEVTKSAyPi9kZXYvbnVsbAorCiskKG9iaikvbWVkaWFfYXBpLnhtbDogJChHRU5GSUxFUykgRk9SQ0UKKworIyQoTUVESUFfT0JKX0RJUikvbWVkaWFfYXBpLmh0bWw6ICQoTUVESUFfT0JKX0RJUikvbWVkaWFfYXBpLnhtbAorIyQoTUVESUFfT0JKX0RJUikvbWVkaWFfYXBpLnBkZjogJChNRURJQV9PQkpfRElSKS9tZWRpYV9hcGkueG1sCisjJChNRURJQV9PQkpfRElSKS9tZWRpYV9hcGkucHM6ICQoTUVESUFfT0JKX0RJUikvbWVkaWFfYXBpLnhtbAorCitWNExfU0dNTFMgPSBcCisJJChzaGVsbCBscyAkKE1FRElBX1NSQ19ESVIpL3Y0bC8qLnhtbHxwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIChtLC4qLyguKilcbiwpJykgXAorCWNhcHR1cmUuYy54bWwgXAorCWtleXRhYmxlLmMueG1sIFwKKwl2NGwyZ3JhYi5jLnhtbAorCitEVkJfU0dNTFMgPSBcCisJJChzaGVsbCBscyAkKE1FRElBX1NSQ19ESVIpL2R2Yi8qLnhtbHxwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIChtLC4qLyguKilcbiwpJykKKworTUVESUFfU0dNTFMgPSAgJChhZGRwcmVmaXggLi8sJChWNExfU0dNTFMpKSAkKGFkZHByZWZpeCAuLywkKERWQl9TR01MUykpICQoYWRkcHJlZml4IC4vLCQoTUVESUFfVEVNUCkpCisKK0ZVTkNTID0gXAorCWNsb3NlIFwKKwlpb2N0bCBcCisJbW1hcCBcCisJbXVubWFwIFwKKwlvcGVuIFwKKwlwb2xsIFwKKwlyZWFkIFwKKwlzZWxlY3QgXAorCXdyaXRlIFwKKworSU9DVExTID0gXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXCNkZWZpbmVccysoW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXCNkZWZpbmVccysoW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXCNkZWZpbmVccysoW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvY2EuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXCNkZWZpbmVccysoW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvZG14LmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL1wjZGVmaW5lXHMrKFteXHNdKylccytfSU8vJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL1wjZGVmaW5lXHMrKFtBLVpdW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvbmV0LmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL1wjZGVmaW5lXHMrKFteXHNdKylccytfSU8vJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL1wjZGVmaW5lXHMrKFteXHNdKylccytfSU8vJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvbWVkaWEuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXCNkZWZpbmVccysoW15cc10rKVxzK19JTy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC92NGwyLXN1YmRldi5oKSBcCisJVklESU9DX1NVQkRFVl9HX0ZSQU1FX0lOVEVSVkFMIFwKKwlWSURJT0NfU1VCREVWX1NfRlJBTUVfSU5URVJWQUwgXAorCVZJRElPQ19TVUJERVZfRU5VTV9NQlVTX0NPREUgXAorCVZJRElPQ19TVUJERVZfRU5VTV9GUkFNRV9TSVpFIFwKKwlWSURJT0NfU1VCREVWX0VOVU1fRlJBTUVfSU5URVJWQUwgXAorCitUWVBFUyA9IFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL150eXBlZGVmXHMrW15cc10rXHMrKFteXHNdKylcOy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXn1ccysoW2EtejAtOV9dK190KS8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaCkKKworRU5VTVMgPSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIC9eZW51bVxzKyhbXlxzXSspXHMrLycgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oKSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIC9eZW51bVxzKyhbXlxzXSspXHMrLycgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oKSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIC9eZW51bVxzKyhbXlxzXSspXHMrLycgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9jYS5oKSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIC9eZW51bVxzKyhbXlxzXSspXHMrLycgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXmVudW1ccysoW15cc10rKVxzKy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXmVudW1ccysoW15cc10rKVxzKy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvbmV0LmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL15lbnVtXHMrKFteXHNdKylccysvJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL15lbnVtXHMrKFteXHNdKylccysvJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvbWVkaWEuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXmVudW1ccysoW15cc10rKVxzKy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL15lbnVtXHMrKFteXHNdKylccysvJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvdjRsMi1zdWJkZXYuaCkKKworU1RSVUNUUyA9IFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL15zdHJ1Y3RccysoW15cc10rKVxzKy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAoL15zdHJ1Y3RccysoW15cc1x7XSspXHMqLyknICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAoL15zdHJ1Y3RccysoW15cc10rKVxzKy8pJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL2NhLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgKC9ec3RydWN0XHMrKFteXHNdKylccysvKScgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAoIS9kdHZcX2NtZHNcX2gvICYmIC9ec3RydWN0XHMrKFteXHNdKylccysvKScgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oKSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmICgvXnN0cnVjdFxzKyhbQS1aXVteXHNdKylccysvKScgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9uZXQuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAoL15zdHJ1Y3RccysoW15cc10rKVxzKy8pJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgpIFwKKwkkKHNoZWxsIHBlcmwgLW5lICdwcmludCAiJCQxICIgaWYgL15zdHJ1Y3RccysoW15cc10rKVxzKy8nICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9tZWRpYS5oKSBcCisJJChzaGVsbCBwZXJsIC1uZSAncHJpbnQgIiQkMSAiIGlmIC9ec3RydWN0XHMrKFteXHNdKylccysvJyAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvdjRsMi1zdWJkZXYuaCkgXAorCSQoc2hlbGwgcGVybCAtbmUgJ3ByaW50ICIkJDEgIiBpZiAvXnN0cnVjdFxzKyhbXlxzXSspXHMrLycgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L3Y0bDItbWVkaWFidXMuaCkKKworRVJST1JTID0gXAorCUUyQklHIFwKKwlFQUNDRVMgXAorCUVBR0FJTiBcCisJRUJBREYgXAorCUVCQURGRCBcCisJRUJBRFIgXAorCUVCQURSUUMgXAorCUVCVVNZIFwKKwlFQ0hJTEQgXAorCUVDT05OUkVTRVQgXAorCUVERUFETEsgXAorCUVET00gXAorCUVFWElTVCBcCisJRUZBVUxUIFwKKwlFRkJJRyBcCisJRUlMU0VRIFwKKwlFSU5JVCBcCisJRUlOUFJPR1JFU1MgXAorCUVJTlRSIFwKKwlFSU5WQUwgXAorCUVJTyBcCisJRU1GSUxFIFwKKwlFTkZJTEUgXAorCUVOT0JVRlMgXAorCUVOT0RBVEEgXAorCUVOT0RFViBcCisJRU5PRU5UIFwKKwlFTk9JT0NUTENNRCBcCisJRU5PTUVNIFwKKwlFTk9TUEMgXAorCUVOT1NSIFwKKwlFTk9TWVMgXAorCUVOT1RTVVAgXAorCUVOT1RTVVBQIFwKKwlFTk9UVFkgXAorCUVOWElPIFwKKwlFT1BOT1RTVVBQIFwKKwlFT1ZFUkZMT1cgXAorCUVQRVJNIFwKKwlFUElQRSBcCisJRVBST1RPIFwKKwlFUkFOR0UgXAorCUVSRU1PVEUgXAorCUVSRU1PVEVJTyBcCisJRVJFU1RBUlQgXAorCUVSRVNUQVJUU1lTIFwKKwlFU0hVVERPV04gXAorCUVTUElQRSBcCisJRVRJTUUgXAorCUVUSU1FRE9VVCBcCisJRVVTRVJTIFwKKwlFV09VTERCTE9DSyBcCisJRVhERVYgXAorCitFU0NBUEUgPSBcCisJLWUgInMvJi9cXCZhbXA7L2ciIFwKKwktZSAicy88L1xcJmx0Oy9nIiBcCisJLWUgInMvPi9cXCZndDsvZyIKKworRklMRU5BTUUgPSBcCisJLWUgcywiXlteXC9dKi8iLCwgXAorCS1lIHMvIlxcLnhtbCIvLyBcCisJLWUgcy8iXFwudG1wbCIvLyBcCisJLWUgcy9cXFwuLy0vZyBcCisJLWUgcy8iXmZ1bmMtIi8vIFwKKwktZSBzLyJecGl4Zm10LSIvLyBcCisJLWUgcy8iXnZpZGlvYy0iLy8KKworIyBHZW5lcmF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIHN0cnVjdHMgaW4gdmlkZW9kZXYyLmgueG1sLgorRE9DVU1FTlRFRCA9IFwKKwktZSAicy9cKGVudW0gKlwpdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fXChbYS16XSpfc3BhdGlhbF9maWx0ZXJfdHlwZVwpL1wxPGxpbmsgbGlua2VuZD1cIlwyXCI+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fXDI8XC9saW5rPi9nIiBcCisJLWUgInMvXChcKGVudW1cfHN0cnVjdFwpICpcKVwodjRsMl9bYS16QS1aMC05X10qXCkvXDE8bGluayBsaW5rZW5kPVwiXDNcIj5cMzxcL2xpbms+L2ciIFwKKwktZSAicy9cKFY0TDJfUElYX0ZNVF9bQS1aMC05X11cK1wpIC88bGluayBsaW5rZW5kPVwiXDFcIj5cMTxcL2xpbms+IC9nIiBcCisJLWUgIjphO3MvXChsaW5rZW5kPVwiLipcKV9cKC4qXCI+XCkvXDEtXDIvO3RhIiBcCisJLWUgInMvdjRsMlwtbXBlZ1wtdmJpXC1JVFYwL3Y0bDItbXBlZy12YmktaXR2MC0xL2ciCisKK0RWQl9ET0NVTUVOVEVEID0gXAorCS1lICJzL1wobGlua2VuZFw9XCJcKUZFX1NFVF9QUk9QRVJUWS9cMUZFX0dFVF9QUk9QRVJUWS9nIiBcCisJLWUgInMsXChzdHJ1Y3Rcc1wrXClcKFthLXowLTlfXVwrXClcKFxzXCt7XCksXDFcPGxpbmsgbGlua2VuZD1cIlwyXCI+XDJcPFwvbGlua1w+XDMsZyIgXAorCS1lICJzLFwofVxzXCtcKVwoW2EtejAtOV9dXCtfdFwrXCksXDFcPGxpbmsgbGlua2VuZD1cIlwyXCI+XDJcPFwvbGlua1w+LGciIFwKKwktZSAicyxcKGRlZmluZVxzXCtcKVwoRFRWX1tBLVowLTlfXVwrXClcKFxzXCtbMC05XVwrXCksXDFcPGxpbmsgbGlua2VuZD1cIlwyXCI+XDJcPFwvbGlua1w+XDMsZyIgXAorCS1lICJzLDxsaW5rXHNcK2xpbmtlbmQ9XCIuKlwiPlwoRFRWX0lPQ1RMX01BWF9NU0dTXHxkdHZfY21kc19oXHxfXy4qX29sZFwpPFwvbGluaz4sXDEsZyIgXAorCS1lICI6YTtzL1wobGlua2VuZD1cIi4qXClfXCguKlwiPlwpL1wxLVwyLzt0YSIgXAorCS1lICJzLFwoYXVkaW8tbWl4ZXJcfGF1ZGlvLWthcmFva2VcfGF1ZGlvLXN0YXR1c1x8Y2Etc2xvdC1pbmZvXHxjYS1kZXNjci1pbmZvXHxjYS1jYXBzXHxjYS1tc2dcfGNhLWRlc2NyXHxjYS1waWRcfGRteC1maWx0ZXJcfGRteC1jYXBzXHx2aWRlby1zeXN0ZW1cfHZpZGVvLWhpZ2hsaWdodFx8dmlkZW8tc3B1XHx2aWRlby1zcHUtcGFsZXR0ZVx8dmlkZW8tbmF2aS1wYWNrXCktdCxcMSxnIiBcCisJLWUgInMsRFRWLUlTREJULUxBWUVSW0EtQ10sRFRWLUlTREJULUxBWUVSLGciIFwKKwktZSAicyxcKGRlZmluZVxzXCtcKVwoW0EtWjAtOV9dXCtcKVwoXHNcK19JT1wpLFwxXDxsaW5rIGxpbmtlbmQ9XCJcMlwiPlwyXDxcL2xpbmtcPlwzLGciIFwKKwktZSAicyw8bGlua1xzXCtsaW5rZW5kPVwiLipcIj5cKF9fLipfT0xEXCk8XC9saW5rPixcMSxnIiBcCisKKyMKKyMgTWVkaWEgdGFyZ2V0cyBhbmQgZGVwZW5kZW5jaWVzCisjCisKK2luc3RhbGxfbWVkaWFfaW1hZ2VzID0gXAorCSQoUSljcCAkKE9CSklNR0ZJTEVTKSAkKE1FRElBX09CSl9ESVIpL21lZGlhX2FwaQorCiskKE1FRElBX09CSl9ESVIpLyU6ICQoTUVESUFfU1JDX0RJUikvJS5iNjQKKwkkKFEpYmFzZTY0IC1kICQ8ID4kQAorCiskKE1FRElBX09CSl9ESVIpL3Y0bDIueG1sOiAkKE9CSklNR0ZJTEVTKQorCUAkKCQocXVpZXQpZ2VuX3htbCkKKwlAKGxuIC1zZiAkKE1FRElBX1NSQ19ESVIpL3Y0bC8qeG1sICQoTUVESUFfT0JKX0RJUikvKQorCUAobG4gLXNmICQoTUVESUFfU1JDX0RJUikvZHZiLyp4bWwgJChNRURJQV9PQkpfRElSKS8pCisKKyQoTUVESUFfT0JKX0RJUikvdmlkZW9kZXYyLmgueG1sOiAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggJChNRURJQV9PQkpfRElSKS92NGwyLnhtbAorCUAkKCQocXVpZXQpZ2VuX3htbCkKKwlAKAkJCQkJXAorCWVjaG8gIjxwcm9ncmFtbGlzdGluZz4iKSA+ICRACisJQCgJCQkJCVwKKwlleHBhbmQgLS10YWJzPTggPCAkPCB8CQkJXAorCSAgc2VkICQoRVNDQVBFKSAkKERPQ1VNRU5URUQpIHwJCVwKKwkgIHNlZCAncy9pXC5lXC4vJmllOy8nKSA+PiAkQAorCUAoCQkJCQlcCisJZWNobyAiPC9wcm9ncmFtbGlzdGluZz4iKSA+PiAkQAorCiskKE1FRElBX09CSl9ESVIpL2F1ZGlvLmgueG1sOiAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggJChNRURJQV9PQkpfRElSKS92NGwyLnhtbAorCUAkKCQocXVpZXQpZ2VuX3htbCkKKwlAKAkJCQkJXAorCWVjaG8gIjxwcm9ncmFtbGlzdGluZz4iKSA+ICRACisJQCgJCQkJCVwKKwlleHBhbmQgLS10YWJzPTggPCAkPCB8CQkJXAorCSAgc2VkICQoRVNDQVBFKSAkKERWQl9ET0NVTUVOVEVEKSB8CVwKKwkgIHNlZCAncy9pXC5lXC4vJmllOy8nKSA+PiAkQAorCUAoCQkJCQlcCisJZWNobyAiPC9wcm9ncmFtbGlzdGluZz4iKSA+PiAkQAorCiskKE1FRElBX09CSl9ESVIpL2NhLmgueG1sOiAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL2NhLmggJChNRURJQV9PQkpfRElSKS92NGwyLnhtbAorCUAkKCQocXVpZXQpZ2VuX3htbCkKKwlAKAkJCQkJXAorCWVjaG8gIjxwcm9ncmFtbGlzdGluZz4iKSA+ICRACisJQCgJCQkJCVwKKwlleHBhbmQgLS10YWJzPTggPCAkPCB8CQkJXAorCSAgc2VkICQoRVNDQVBFKSAkKERWQl9ET0NVTUVOVEVEKSB8CVwKKwkgIHNlZCAncy9pXC5lXC4vJmllOy8nKSA+PiAkQAorCUAoCQkJCQlcCisJZWNobyAiPC9wcm9ncmFtbGlzdGluZz4iKSA+PiAkQAorCiskKE1FRElBX09CSl9ESVIpL2RteC5oLnhtbDogJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaCAkKE1FRElBX09CSl9ESVIpL3Y0bDIueG1sCisJQCQoJChxdWlldClnZW5feG1sKQorCUAoCQkJCQlcCisJZWNobyAiPHByb2dyYW1saXN0aW5nPiIpID4gJEAKKwlAKAkJCQkJXAorCWV4cGFuZCAtLXRhYnM9OCA8ICQ8IHwJCQlcCisJICBzZWQgJChFU0NBUEUpICQoRFZCX0RPQ1VNRU5URUQpIHwJXAorCSAgc2VkICdzL2lcLmVcLi8maWU7LycpID4+ICRACisJQCgJCQkJCVwKKwllY2hvICI8L3Byb2dyYW1saXN0aW5nPiIpID4+ICRACisKKyQoTUVESUFfT0JKX0RJUikvZnJvbnRlbmQuaC54bWw6ICQoc3JjdHJlZSkvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaCAkKE1FRElBX09CSl9ESVIpL3Y0bDIueG1sCisJQCQoJChxdWlldClnZW5feG1sKQorCUAoCQkJCQlcCisJZWNobyAiPHByb2dyYW1saXN0aW5nPiIpID4gJEAKKwlAKAkJCQkJXAorCWV4cGFuZCAtLXRhYnM9OCA8ICQ8IHwJCQlcCisJICBzZWQgJChFU0NBUEUpICQoRFZCX0RPQ1VNRU5URUQpIHwJXAorCSAgc2VkICdzL2lcLmVcLi8maWU7LycpID4+ICRACisJQCgJCQkJCVwKKwllY2hvICI8L3Byb2dyYW1saXN0aW5nPiIpID4+ICRACisKKyQoTUVESUFfT0JKX0RJUikvbmV0LmgueG1sOiAkKHNyY3RyZWUpL2luY2x1ZGUvbGludXgvZHZiL25ldC5oICQoTUVESUFfT0JKX0RJUikvdjRsMi54bWwKKwlAJCgkKHF1aWV0KWdlbl94bWwpCisJQCgJCQkJCVwKKwllY2hvICI8cHJvZ3JhbWxpc3Rpbmc+IikgPiAkQAorCUAoCQkJCQlcCisJZXhwYW5kIC0tdGFicz04IDwgJDwgfAkJCVwKKwkgIHNlZCAkKEVTQ0FQRSkgJChEVkJfRE9DVU1FTlRFRCkgfAlcCisJICBzZWQgJ3MvaVwuZVwuLyZpZTsvJykgPj4gJEAKKwlAKAkJCQkJXAorCWVjaG8gIjwvcHJvZ3JhbWxpc3Rpbmc+IikgPj4gJEAKKworJChNRURJQV9PQkpfRElSKS92aWRlby5oLnhtbDogJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oICQoTUVESUFfT0JKX0RJUikvdjRsMi54bWwKKwlAJCgkKHF1aWV0KWdlbl94bWwpCisJQCgJCQkJCVwKKwllY2hvICI8cHJvZ3JhbWxpc3Rpbmc+IikgPiAkQAorCUAoCQkJCQlcCisJZXhwYW5kIC0tdGFicz04IDwgJDwgfAkJCVwKKwkgIHNlZCAkKEVTQ0FQRSkgJChEVkJfRE9DVU1FTlRFRCkgfAlcCisJICBzZWQgJ3MvaVwuZVwuLyZpZTsvJykgPj4gJEAKKwlAKAkJCQkJXAorCWVjaG8gIjwvcHJvZ3JhbWxpc3Rpbmc+IikgPj4gJEAKKworJChNRURJQV9PQkpfRElSKS9tZWRpYS1lbnRpdGllcy50bXBsOiAkKE1FRElBX09CSl9ESVIpL3Y0bDIueG1sCisJQCQoJChxdWlldClnZW5feG1sKQorCUAoCQkJCQkJCQlcCisJZWNobyAiPCEtLSBHZW5lcmF0ZWQgZmlsZSEgRG8gbm90IGVkaXQuIC0tPiIpID4kQAorCUAoCQkJCQkJCQlcCisJZWNobyAtZSAiXG48IS0tIEZ1bmN0aW9ucyAtLT4iKSA+PiRACisJQCgJCQkJCQkJCVwKKwlmb3IgaWRlbnQgaW4gJChGVU5DUykgOyBkbwkJCQkJXAorCSAgZW50aXR5PWBlY2hvICQkaWRlbnQgfCB0ciBfIC1gIDsJCQkJXAorCSAgZWNobyAiPCFFTlRJVFkgZnVuYy0kJGVudGl0eSBcIjxsaW5rIgkJCQlcCisJICAgICJsaW5rZW5kPSdmdW5jLSQkZW50aXR5Jz48ZnVuY3Rpb24+JCRpZGVudCgpPC9mdW5jdGlvbj48L2xpbms+XCI+IiBcCisJICA+PiRAIDsJCQkJCQkJXAorCWRvbmUpCisJQCgJCQkJCQkJCVwKKwllY2hvIC1lICJcbjwhLS0gSW9jdGxzIC0tPiIpID4+JEAKKwlAKAkJCQkJCQkJXAorCWZvciBpZGVudCBpbiAkKElPQ1RMUykgOyBkbwkJCQkJXAorCSAgZW50aXR5PWBlY2hvICQkaWRlbnQgfCB0ciBfIC1gIDsJCQkJXAorCSAgaWQ9YGdyZXAgIjxyZWZuYW1lPiQkaWRlbnQiICQoTUVESUFfT0JKX0RJUikvdmlkaW9jLSoueG1sIHwgc2VkIC1yIHMsIl4uKi8oLiopLnhtbC4qIiwiXDEiLGAgOyBcCisJICBlY2hvICI8IUVOVElUWSAkJGVudGl0eSBcIjxsaW5rIgkJCQlcCisJICAgICJsaW5rZW5kPSckJGlkJz48Y29uc3RhbnQ+JCRpZGVudDwvY29uc3RhbnQ+PC9saW5rPlwiPiIJXAorCSAgPj4kQCA7CQkJCQkJCVwKKwlkb25lKQorCUAoCQkJCQkJCQlcCisJZWNobyAtZSAiXG48IS0tIFR5cGVzIC0tPiIpID4+JEAKKwlAKAkJCQkJCQkJXAorCWZvciBpZGVudCBpbiAkKFRZUEVTKSA7IGRvCQkJCQlcCisJICBlbnRpdHk9YGVjaG8gJCRpZGVudCB8IHRyIF8gLWAgOwkJCQlcCisJICBlY2hvICI8IUVOVElUWSAkJGVudGl0eSBcIjxsaW5rIgkJCQlcCisJICAgICJsaW5rZW5kPSckJGVudGl0eSc+JCRpZGVudDwvbGluaz5cIj4iID4+JEAgOwkJXAorCWRvbmUpCisJQCgJCQkJCQkJCVwKKwllY2hvIC1lICJcbjwhLS0gRW51bXMgLS0+IikgPj4kQAorCUAoCQkJCQkJCQlcCisJZm9yIGlkZW50IGluICQoRU5VTVMpIDsgZG8JCQkJCVwKKwkgIGVudGl0eT1gZWNobyAkJGlkZW50IHwgc2VkIC1lICJzL3Y0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX1woW2Etel0qX3NwYXRpYWxfZmlsdGVyX3R5cGVcKS9cMS8iIHwgdHIgXyAtYCA7IFwKKwkgIGVjaG8gIjwhRU5USVRZICQkZW50aXR5IFwiZW51bSZuYnNwOzxsaW5rIgkJCVwKKwkgICAgImxpbmtlbmQ9JyQkZW50aXR5Jz4kJGlkZW50PC9saW5rPlwiPiIgPj4kQCA7CQlcCisJZG9uZSkKKwlAKAkJCQkJCQkJXAorCWVjaG8gLWUgIlxuPCEtLSBTdHJ1Y3R1cmVzIC0tPiIpID4+JEAKKwlAKAkJCQkJCQkJXAorCWZvciBpZGVudCBpbiAkKFNUUlVDVFMpIDsgZG8JCQkJCVwKKwkgIGVudGl0eT1gZWNobyAkJGlkZW50IHwgdHIgXyAtIHwgc2VkIHMvdjRsMi1tcGVnLXZiaS1JVFYwL3Y0bDItbXBlZy12YmktaXR2MC0xL2dgIDsgXAorCSAgZWNobyAiPCFFTlRJVFkgJCRlbnRpdHkgXCJzdHJ1Y3QmbmJzcDs8bGluayIJCQlcCisJICAgICJsaW5rZW5kPSckJGVudGl0eSc+JCRpZGVudDwvbGluaz5cIj4iID4+JEAgOwkJXAorCWRvbmUpCisJQCgJCQkJCQkJCVwKKwllY2hvIC1lICJcbjwhLS0gRXJyb3IgQ29kZXMgLS0+IikgPj4kQAorCUAoCQkJCQkJCQlcCisJZm9yIGlkZW50IGluICQoRVJST1JTKSA7IGRvCQkJCQlcCisJICBlY2hvICI8IUVOVElUWSAkJGlkZW50IFwiPGVycm9yY29kZT4kJGlkZW50PC9lcnJvcmNvZGU+IglcCisJICAgICJlcnJvciBjb2RlXCI+IiA+PiRAIDsJCQkJCVwKKwlkb25lKQorCUAoCQkJCQkJCQlcCisJZWNobyAtZSAiXG48IS0tIFN1YnNlY3Rpb25zIC0tPiIpID4+JEAKKwlAKAkJCQkJCQkJXAorCWZvciBmaWxlIGluICQoTUVESUFfU0dNTFMpIDsgZG8JCQkJCVwKKwkgIGVudGl0eT1gZWNobyAiJCRmaWxlIiB8IHNlZCAkKEZJTEVOQU1FKSAtZSBzLyJeKFteLV0qKSIvc3ViXDEvYCA7IFwKKwkgIGlmICEgZWNobyAiJCRmaWxlIiB8CQkJCQkJXAorCSAgICBncmVwIC1xIC1FIC1lICdeKGZ1bmN8dmlkaW9jfHBpeGZtdCktJyA7IHRoZW4JCVwKKwkgICAgZWNobyAiPCFFTlRJVFkgc3ViLSQkZW50aXR5IFNZU1RFTSBcIiQkZmlsZVwiPiIgPj4kQCA7CVwKKwkgIGZpIDsJCQkJCQkJCVwKKwlkb25lKQorCUAoCQkJCQkJCQlcCisJZWNobyAtZSAiXG48IS0tIEZ1bmN0aW9uIFJlZmVyZW5jZSAtLT4iKSA+PiRACisJQCgJCQkJCQkJCVwKKwlmb3IgZmlsZSBpbiAkKE1FRElBX1NHTUxTKSA7IGRvCQkJCQlcCisJICBpZiBlY2hvICIkJGZpbGUiIHwJCQkJCQlcCisJICAgIGdyZXAgLXEgLUUgLWUgJyhmdW5jfHZpZGlvY3xwaXhmbXQpLScgOyB0aGVuCQlcCisJICAgIGVudGl0eT1gZWNobyAiJCRmaWxlIiB8c2VkICQoRklMRU5BTUUpYCA7CQkJXAorCSAgICBlY2hvICI8IUVOVElUWSAkJGVudGl0eSBTWVNURU0gXCIkJGZpbGVcIj4iID4+JEAgOwlcCisJICBmaSA7CQkJCQkJCQlcCisJZG9uZSkKKworIyBKYWRlIGNhbiBhdXRvLWdlbmVyYXRlIGEgbGlzdC1vZi10YWJsZXMsIHdoaWNoIGluY2x1ZGVzIGFsbCBzdHJ1Y3RzLAorIyBidXQgd2Ugb25seSB3YW50IGRhdGEgdHlwZXMsIGFsbCB0eXBlcywgYW5kIHNvcnRlZCBwbGVhc2UuCiskKE1FRElBX09CSl9ESVIpL21lZGlhLWluZGljZXMudG1wbDogJChNRURJQV9PQkpfRElSKS92NGwyLnhtbAorCUAkKCQocXVpZXQpZ2VuX3htbCkKKwlAKAkJCQkJCQkJXAorCWVjaG8gIjwhLS0gR2VuZXJhdGVkIGZpbGUhIERvIG5vdCBlZGl0LiAtLT4iKSA+JEAKKwlAKAkJCQkJCQkJXAorCWVjaG8gLWUgIlxuPGluZGV4Pjx0aXRsZT5MaXN0IG9mIFR5cGVzPC90aXRsZT4iKSA+PiRACisJQCgJCQkJCQkJCVwKKwlmb3IgaWRlbnQgaW4gJChUWVBFUykgOyBkbwkJCQkJXAorCSAgaWQ9YGVjaG8gJCRpZGVudCB8IHRyIF8gLWAgOwkJCQkJXAorCSAgZWNobyAiPGluZGV4ZW50cnk+PHByaW1hcnlpZT48bGluayIJCQkJXAorCSAgICAibGlua2VuZD0nJCRpZCc+JCRpZGVudDwvbGluaz48L3ByaW1hcnlpZT48L2luZGV4ZW50cnk+IiA+PiRAIDsgXAorCWRvbmUpCisJQCgJCQkJCQkJCVwKKwlmb3IgaWRlbnQgaW4gJChFTlVNUykgOyBkbwkJCQkJXAorCSAgaWQ9YGVjaG8gJCRpZGVudCB8IHNlZCAtZSAicy92NGwyX21wZWdfY3gyMzQxeF92aWRlb19cKFthLXpdKl9zcGF0aWFsX2ZpbHRlcl90eXBlXCkvXDEvIiB8IHRyIF8gLWA7IFwKKwkgIGVjaG8gIjxpbmRleGVudHJ5PjxwcmltYXJ5aWU+ZW51bSZuYnNwOzxsaW5rIgkJCVwKKwkgICAgImxpbmtlbmQ9JyQkaWQnPiQkaWRlbnQ8L2xpbms+PC9wcmltYXJ5aWU+PC9pbmRleGVudHJ5PiIgPj4kQCA7IFwKKwlkb25lKQorCUAoCQkJCQkJCQlcCisJZm9yIGlkZW50IGluICQoU1RSVUNUUykgOyBkbwkJCQkJXAorCSAgaWQ9YGVjaG8gJCRpZGVudCB8IHRyIF8gLSB8IHNlZCBzL3Y0bDItbXBlZy12YmktSVRWMC92NGwyLW1wZWctdmJpLWl0djAtMS9nYCA7IFwKKwkgIGVjaG8gIjxpbmRleGVudHJ5PjxwcmltYXJ5aWU+c3RydWN0Jm5ic3A7PGxpbmsiCQlcCisJICAgICJsaW5rZW5kPSckJGlkJz4kJGlkZW50PC9saW5rPjwvcHJpbWFyeWllPjwvaW5kZXhlbnRyeT4iID4+JEAgOyBcCisJZG9uZSkKKwlAKAkJCQkJCQkJXAorCWVjaG8gIjwvaW5kZXg+IikgPj4kQAorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvYmF5ZXIucG5nLmI2NCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9iYXllci5wbmcuYjY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZGYyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvYmF5ZXIucG5nLmI2NApAQCAtMCwwICsxLDE3MSBAQAoraVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWxnQUFBQ3FDQU1BQUFCR2ZjSFZBQUFBQVhOU1IwSUFyczRjNlFBQUF3QlFURlJGQUFJQQorQ0FJQ0FBUVZFUUVCQWdzQUpnRUNBQW9nQXdzVEFRb3BIUVlCTkFFQUFBeE5BUlFBRVJJUUFob0RBQndBQUJaRUhSUUtHUllLUXcwRgorQUNNQkFDVUFFUndwSFI0Y1ZSQUZCUjVyWmhBREFDUjJKaUloQkRBR0FpV0dnUTRBY3hRQUJEWUFDU2VRTVNZbEp5a21FU3hZbFE0QQorUFNZWklTMDVPU3NKSFM1Sk9DOGtBRU1EVUM4U0FEWExORFV6QURiRUFFc0FBRFgvMlJBQkNGSUFBRC9xeEIwQUFELy9CRmdBSzBWcAorV1Q0cjNod0EzUnNUUkVSQUFFZi81Q0lBMmlZQ0NVditXVWd6N2lJQU9rNWczQ2dWU1U1U2lEOHVCMnNBQm04QUUxWC9VMVJRT0Z5TAorNGprZklsei9SVjk4TTFqK0cySC9mVmsyM2p0RDRUMHBYbDlpZUZ0R2NWODk0VUlpWVdKZkFJd0E1MGdPVjJwKzRrc3NPMmorZEdaeAorYkcxcVZtai9PSEgvYUhKemZuQlg1bFE3QjUwQVpuYWhkWGQwQUtVRzVWMUFSbnovNm1FckNxZ0FBS3NBZW50NDZHQklXNEdoQUswQQorQUs4QjQyRnRBTElPaW45L0FMVUFpSU9CQUxrQVZJZi82V3hXZzRlQmk0U0tKckVBbW9WdGRZMmdlb1AvcllWWGhveU9xWVZ1SmJVaAorSXJnV1g1RC9qbzZKN25zelA3Z0FzSTlTNjN4bk43MHpacU8vZlp6Q09iNCtjWnIrNjRkeThvdFluSjZiN0ltRFJjTTU2SXFjV01Fbworb0piL044Wm9UTVJMN1k5L1FjaGNzYU9UbzZlb2hhai83WnFLWHNwWGo2djl4YWwrb0srN2Q3dlRVTStBZmNvNXI3Q3VtTFRWU3RLVgorYnM5dWtiYi85cXgvOXE5bDhxdWVvTHYvZTlSNjZiZUc3ckRJbU5SaGk5YUR3c1BBczhiV3pjSzJjZDY3anRxUDVNV1VvZHlCOGIrMQordE1yL3o4TC9qOStrYk9YV25OMlpzdEQ3eWM3UnpzN0x5OXhiMTgzVXdkRC8rc2kvcWVPbXZ1S0l4OWZqNHRQQ3R1V2lxT3JMK3RTMgoreTl2KytOUEsyZHZadCttMHVlcTgwK1dvM09lU3d1eS95ZXpHK2Q3Zi9lUy96L0RTM3VmLzZPbm80UEM3MU8zOXhQYjAydlBaLytuUgorK09yaTZlMzk5K3Z0K1BHeit1cjY1Zkw1NS9YYjR2Ymg3ZmZYL1BQWTh2UDkrdkx5NlBmMzZmanIvUGZNOHZqci8vZisvdm40OFAzNgorOXZ2Ky92emYrZnY0L2Z2dS8vejcrdjcvL1AvNy92LzgvL1FweEFBQUFBRmlTMGRFQUlnRkhVZ0FBQUFKY0VoWmN3QUFGWThBQUJXVworQVEyVFQ4Y0FBQUFIZEVsTlJRZmFDUlFYR1NsdHdiUFJBQUFnQUVsRVFWUjQydTJkRFh3VTFiWEFad0VKdEVhTkgxbmJoNjhmcG9XSworaUUxYW8yQmdvOVJxSXJFZytCSUZtcUxZTE9sTWNISGxVNkRpUW1ySk0yaktvMFFJQkhnVWpENUVUY1FJbEtxMGdLRG1BK1VqaVJBVAorQkNPQmtHekM1cmUvKys2OTg3RXpzenN6ZHpjN3M5amZQYTJ3Tyt6TVBlZmMvNTU3NXQ2N1o1aEIvMEVrL1c2Njh4Y2tjbVZtUVo1UworQ3ZMbWdzaGw0UUNpWnUrOG50Q09nV2x6VmZybDVaWkZybDZUL1ZZU3Y5eDVLM1BqOXdua2g5ZkZGeFFFNlZjVnFYWSs4UGpnSDVLMAorKy8wYkJ4RGFZY3NOMGkrdkxsVGJ6SDlrakVrbmtFRjN6cHRqTFBQbVhMMlZ3R0Mvbnh5c20rWVJ5YysvUzJiSE5ZVWdtdEprZjVSSQordlNjSDNIRXZpZnowNW1ocUI4RzY4ZDZ4Sk8zZWNTV2hIWFlmWWR2TTk5TEhHRXY2bUVGM3ptRko1R3I0OWU5cVZVaDdPL3dQL3cvOQorZ2Y0RVhuS3dicGpOR1FzNzc5YnZrdGx4elVMZzdUQ1F6dkRBSXRCdnpxTUQ3aGpyTUpheFB4MEN2M09kQnZxRkJSWkpzNDZ4Q0N3aQorTyt4TndOZlNjbG9tNkYyTDRqMUEvVXNHMWhnSTFqeVdVekxFS2YvZ1gwQ3dldkl6c3ZTbEpveWg4SVk1TG1QaEVGaEVoc0NJOWI3TAorb3kvdUkyR0JSYURmUEFUV2FHTzU5NmREQURoaW9KKzdQS3lJNVNCb0Y0TkZaQWNFYTZaanZMN01PZzlNQVd0UHh2NGFIZGxmTTMxNQorVE1IeTdHZzRwaWZONWNVeEJNc1Bpc3ViOWRScnFIYzF4QkNzQzd2SEg2alZsUU9PM2VHQmhjY2M5QityR0lXa1AvQUxCTllFQTN1WAoreHhhc29vTUdiVmFXeGhTczBrcjlOanM4emJFRTYwQzJVYk9UVEFPclI2L1pIakIvWld6QmV0K2d6UjB4Qm11SGZwdHRzUWJMSUVQMgorWnBzR1Zyc0JXTXNwV0JRc0dyRW9XRkVBSzFVVURiQmtRRWtKdStLbytXRHhEUm1BcFdtSCtXQ0YwdS9iQ0ZZSU15SUhLMzBDTDFrWgorWTFKMTd3bzUxc25oVzEvNGQ5QmRvWmxnY1p4N21jZXp6TTF5ZW1CcDIyRTJXQnpMNjZmc0V4VllqbXhCeHNOZWQxZ0hWcmE4WFgydworV0JjMkEvNGREYkNTcDR2LzJQckdiMUwxaGtLblo4c1JORkgzOWNlbDZLMWxReUZidkxjWlhmM1lybVdzTmxnNmRwZ01GbHRjM2RBTgorajMremF6V3JDVmJLQnVuOGx0Y2ZTM0ZZQnBiMEQ3MjFMK3VDeFhvcXhPNVZmRU1pQm1zYTZCTC8rVXhXcWhaWU1GeXRQU1ZkNXlNVQorcUt4SjNqbHViN2Y0RDVmK3htcURwVzJIdVdDeHIwcjY5YjdONm9BVjZKc1RqNlZZQnBhY2lQOUwwUWFMVlhRdjEzZXdVcWVCZGp5UworWk0wL0NmNnVCUmJrYWswM3VMU3JhQkhuV2ZzSkFKL0xFaTJUSXhaczdiUHlaUzZYWnd1MFhFYVdDaXdkTzB3Rmkzc1hnQy9LNFFEaQorcWZoRW9WOFFXTnRUOEZMSytMOTBnZGRIV3dqV2pOR3cxZEcvbWdXNy9qRk5zRmpZdmQvc0tuSzczS2g3UDRvU1dIdzNKT2NEa0pHcQorQlZieEJmRDVJaWRLcXB6T1YvM2diMDVyd0dKZlJYRUFmWU00MW5NS2ZNWHBnYVZoaDVsZ3NWc0FlSnZqOVlPTVhWckU2WUFsdkh3YQorWEpTRkxKUEJPZzhtOFcybHBMd0ZRNVlqTkZnYzZ0NDVPRkN4ME9WZ05SdTFpSVZFQnl6bnUrQXJJVWl4blBNZktHUlpBUmFDU1JwZgorRU54LzR3d2lWZ2c3VEFTTGM1MkNBNGY0QmlvYkNGbWFZRGxTdXNCVUM4R2FHZ0M2Vmdzc0ZuYXZTM1F0Qzd1WGl5SllNUDA5bzVtOAorTzJHZk9zVzhpbDFUdWRvaXNGNEZYOGhHdnkzbGMxeUdZQVhaWVNaWWErUkJpdHZ5OWh5WElWaWo3NDRSV1ArakRSYjh5Z2FDRkxkbQoreDdLb0pPL3R5V2oySnozL0pQaGpzc1k4bG5OTDkxY3ZzTkw4S090azFmTlk1aVR2M0QvQVAyVUpNYXVidkd2WllTSlk4SnYrVDA0KworOGVBeUJDc0ZkdkJYVmc2RjJVSzdrODVvRG9VczdONUZzaXdqU3NrN3Y1Y0trcUhzRDNuRWNtNEJuem54SElOVEVOYWFDVkpwY0JHbgorelhRaWxwWWRab0wxaVRoU0Ira1hCTmJ1OFZPaHpGaHdBSUNYclV6ZUYyUlBuVHBwNnF5L25BRzlZeldTZDVncGZxWmhSbC9Ba3BqWQorUDBIcnJ0QlpEUTQ2OFp1S0hWZ3FYZFlrNzkzQWc0emtsbFh5RFpmcTVGaGFkcGdKVmpNb3haM2czc0hyVjg0WnptTUI4THBqZEN5bQorRzNyL29EWGR3RmFEOTdFWkhHOUZ4UTUzVkhLc2FkT2g1SzgvcTUxalliRHdDL0ZTaXl3Rml4WDcvU2lyazJOcDJHRW1XQTJnSE92bgorRWZlM2FDZnZYaVRBMjdKOWxwVkxPbDdjTHZ5SDJnMlBhVTZRU21DeDRtWGNYRFRBU2thU21weHhFdncxVlhzb2ZCTFB0NzkvOUFnVQorMkRKcjVWRElGaDJyaDlJTTZ2WEEwckREZ3FHUVc0YjFhd0FOK25lRnZ6b0R2cFRQamxxVnZEOE53K1RvRkcyd3hLR1FPM2dVbW5FaworR21BbFMvTS9ZNUtYZzVwa0xiRDQ1RjNJc2RoZ3NFeE8zdkhTNUpNVjJtRHAyR0ZKOG83MUt6WUNLK1ZoU0pZanhYS3c0QTBEZUYwUAorTERGNXh4T1ZYTFFpbHRnMzg0UEFrdGFhbnhTbUcrRDlBa3J0RUZoV0xFS3pyNEp2K0ZzVU5PaXpPL1FqbG9ZZDVrNDM5QzZTVklJRAorZG9QUlBOYlRYZUE5NnlQVzZKUzNBRkNrV01ycEJnL3FYbW1ZY0VjYkxPMkl4VHJmQlJkZmNBcVlPWjFXRFlWb3p2R2YwczJ2a3hBcworNnlJV0dxcy9sOVpzbld0QnN4RllLSGE4Yk9FaXREaVBCUWZoYzQ5cHJoV3lxSHVsaVdoWDFISXN2STFKTDhlQ01KMENGMWV6ZUJ4aworaXoreExNZENTeVlmelJadWdiZDBnQ082T1Zab08weGQwbG5URFQ1N1FkaWt0cVlEdEJuT3ZNUFljYzdDUldocGdoU21XVzlxZ29WVworRUM2dTV1TUdoN3MzS21CTlF6SjkrVW5RcFRuenpqbUxUd0h3UlVWeGNlbVdCbmpudXN1cVJXaTBjdFg1Y1hsUjhkcTlIUUI4czFwdgorU1VmRERsTWpGa3hQUU8vSDVhdUt5L2Uyb2YwWGhtdUZLUTkzZ1RjdEh3cEhPMUNvbEErR3FrVm92bnRYRlFuZEc1V1pkMG02ZnFlOQorYllaemVqNlJQdmpaNnFBSlV0UDJ2TE5ycFAwYzUzYk5ZWFZtM3JYc01IbmJ6RnJKTDcyN1h0Q2JJQTBzcllBL3BWZzMzU0F1NmR4OQorQnB5UTNUZW90ODBvdWpjNkU2VHRXQnByMW1mb2JQUkRVcnpsU0VmSDEwZDNGY0ViQndzMytyblg3bTNvNlBqbTQzSzlqWDQ2ZHBpOAorMFk5ekZlODkxdEhaL0hIRk1vNXpFYXdWL3VvNCtIS3NWV0NkbGkxQysyRjJwN25SaitPSytPN2RVZVJpbzd2blBkVm9heklyMy9SdQorNGRaa2NlMmJJOXZ6bm1yNTFtUmgyd2Q3MmU5NVQ5SGRtaHpLREV0K3BhUDRNUVg5K1JmOWxVNjB3S0kvLzZKZ1ViQW9XSmN6V01SRgorUWVoUVNNRXlKV0pOTTdCM2VZd2oxcmU4S0VobmpNR2FaTlNzYVVWQjB0Y3JaYVBxYlZhTXl4aVZWbGNxUlAyMktMWmxqRXFMbEFwVgorcTk3dWlHMFpvd09PVnpib3lpdG1sVEVDSzZmbHkyVjZmcjdxZlh0TXdUcGFWS3lVVXRYNzR1WVlnZ1ZBczFvOWxYNUYxU0NHWURXQgorbDJiTVZNb3M1ZHNaTDRId3dUSVFGd1lybW1JQ1dORVVNOENLbnBnREZwbUVBVlpRTTI2MytzaHNsMVp4V3ovNkgvb0QvdWtQQzZ4NQorczQyTDZzNG1yRUZxQ2xna1JYOGhXUGVPTlJZendCcE4waTRDaThpT2tHQjVRN3hqYlAyQ1pHRHdvWDYySzI5UXkvVTMzUkI4YkVEUworU0xVa3BmVWxZakUzRU1tVklld0lKVFo3c0g0RmZRSHJxaHV1Vjh0TlFVZHV1SnJwVHlRMjI4aGcvVW9pQnl1WHNOMytBNjRPdGlQRQora2F1WUVQMGJzbHc0YzlNRDl4UElBOWQvNXdjL0pKSCt1V1VsYXVuTDZEaTNQMUd6UHhoTWFNZlY5MjBOMHE4cWN2Vk8yNy8zNC84MAorbGg5L2I4RDlENURJeiszQjdpdlpGemxZdjczK0FhS0c3eDlBYUVkOFliQitJVWRINWhka2RkUi85SDJpT3VYM1hyRTF1am5XM08rUQordFhzZHFSM1BSbmtvL0dVR1FYWDVqTnNZamtpOUI1SklXdldTZzNVcm1WdFk1allTTzlKL1NWN24vZWZ6T0pLc0RZSTFta1N1Z09HcAorN2FpK0hBc0xyTEVFMmFmajN1dkk3Smh6RXdUcmdKR0VBOVp0UlBYbGJ4L3dKTWxOQ0EvV2ZnTnBCLzR3d0NKeXk1UE03VVE1NnUwdworeDJvN1l0Qy9iU2FCMWVaeDZ4Y3FkOVhIRkt5WHBMcG5HdUxZUUJ3VG9nK1dGN3dtbG8zVGtJenA3U0IyWUowMjdGNjNwODBjc09vWAorZFhSM2Frc0hLQzJQS1ZqWkc4QnBQUUV2ellncFdQa3JoZDFrb2FXbkpxTW1obUNkcVhkM2RPcEpkNGU3M2h5d2puZ003QzJ2aUNsWQorTTdZYnRQbktyRmlEcFN1dFdZMHhCY3VvZTRISE5MQzZLVmdtZ3RVWWE3QU04bmNmQll1Q1JjR2lZSDNyd1JKK1VLWUxWb29rVm9MbAorMEd3M0ZGZ2g3VEFack5Sa1FWS053VktYQ0xJSXJOQnVVWUtsWlVaZndPSllkM0ZwZWVtcVphd09XSTRWQ3dTWjZiQXlZazBWMjUwMQorVlZueklCZ3NEVHZNQlN0MSt2TDVXUEtWdFpOQ2dNVzZpcUI2cGNzNDFsS3d0TnlpQUN0MWdtakdOSFdaL0lqQllqMTcrVDBqWCs5YQoreEdxQ05UNXdsWmJYclFNckpVQkViKzBmNUQ5TkR3Skx5dzV6d1VyZUx4NC84MFo2cWc1WXJHdkxNZXlrem5wbFBYaVR3WkxjOG8zSworTFFxd2txWDljbDVWZGJHSXdXTFhYSURHTmpjMGR3QndTZkZMUldYRUFvQi9OTjN4TGdCZXR3NnNEZUMwMEM1VVQvNUxYalZZbW5hWQorRE5ZZTBJb2V5ZGdJZTc1R0J5d08vU0MwdDYyaEFSWHBWNVM3Tmhjc2RvdVdXOVJnZGZGbStFR1hza3graEdDeFcveW9Uam5IY2g2bword3NVWGRNRGkwNTNSazk0Q1FGRmV3bVN3dGdzcDFvSXo0TTJ4bW1CcDIyRTZXQ3R4YXBLK3NodjhNVlVUTE04cDBMdXJDRlZSWGF1cQorQjI4cVdLajJoY3d0aTNUQXFrbE9SUmxXdnJwTWZvUmdlVTZDejRWZnZxTHlEQit4Mm1BNVVDVjYyT1YzdjZWOHhvSHBZT0hDKzZpYworOUNVWjBDcXd0TzB3SGF6MXlXUFNVZmI3R25naldRc3M5bDBVTDRRU1ZLZ2V2RVZnb2ZydHZGdHc5WTFkckE1WXFlbklqdVQ1VXFHeAordm9DRkNuelBGbHR6dmdvK2wxWEFEd1pMNk95L1NIVUlyQUZMZkgwYXpOQUNTOGNPSzhEQ3IxYUNQVnBnc2NYZGdTakZlazcxeW9xSAorbUFrV3J0K3U0WmJnaUtXdVlOY1hzSXJsTmU5ZG50SmxMcGN4V0c4cEMrSllCZGJEaXZyb1NyQjA3TEFBTEZ3OWFjd0gya01oN09EUAorWmZsTjZhcloxa1FzUGJlRUFBdmJzVElhUXlHNzlwUThIWEVwQ255SHpyRlNVSEdKUDhVZ3g0SWo4SW5ITkhJc1BUdE1CMnZqbUl5TQorakt6cGU1UWRvaHdLLzZHc0IyOVI4cTdybGlDd3htUkJNNmF0N3o3em0yaUFCYjdSTFBDdEJtc0ZsbGQyQS9DcGxYZUZ0UXR3dXh2TworQUhteEZEVlkybmFZRHBiVSsyTzB3VG9sUFBtQmN3YlZnemNWTEIyM2FFdzNnSzdmSmZkOXVvRXRCOGY0T3N3N1VMbmMrdnBqSGxZTAorcklEalAxVVcvalVacklDOFBGb1RMQjA3TEFNTDdFL1hCTXNubEJVdjR0VTd1b08xQkt3SzBTMlZRcnNlemhBczBQaTcxS2lCNVhhSwordjZzclpuWG5zYnlnZC90TVZXRm5rOEZxT1lBbnNiNThLVnQ3NWwzUER2TnpyRlMwRTNuQ3ltN0ZXS2dFcXhzVWFkU3JOeFVzeVMxdAord1c0SmNWY0lCVDJWcnlzS0VXdXQveUlmb3NzcjBTTUpPc0VxVmpmSGVsbzlPMnBSanZVVytGSlo5RmM5RkdyYllkRmRZV3J5L0c0ZworRzBYVVF5Rk9vamtQVXEvaWlLeElyN2xEb2RvdFJhekJYV0ZxY3RaSjhOZmtLQ1R2d25Rc1h3NjVRdzhzTkkvRkZ3eFBzUllzOUJ6SAorNDZEM01aMklwV09IVmRNTlkxSnJ3SHdOc0hUcTFac0pGZ2ZkOG9MQ0xZWmd3WmZyRmZOeGtjNWpmU0tmUzJRTndCSUtodi9KNG9pRgorWGt4Q0ZUUzFGNkYxN0xBTXJHUnRzRmhVRHo2ZzdBNkx3Rks1aGJNUUxHNE5XbC9neEpLTUhYbzVGdCt2ZHg5WEZReTNCQ3grRU5aZQoraE5heHd5cXdVdE5QYWtjc3p5azBBODd4NmptclpXWEZ6UVVMQWgxd0M4ejBWaG1DbFpyNlJqVEFRbE4zNE8xbCtIRVQ3alVOUUlhMAorQmxncER3TkZPV21ySmtoaHFPelZXWVRXdHNPYXRjTGs1REd2Z1RPeS9RMnFKWjIxRjhBWHE5Mm91b3E3YUs4ZmZNeGF0RmFvN1paZworc1BqOVdNdjlRSEZiR0NGWW5BczIzZnR4WmNXT2d4M29PZXpHTSs5QlQ4K3dhT1lkRG9hZmFpOUNhOXRoT2xoN2xxK0VzcjRHS0pKZQorMVNJMDNuenhCVlN2R3BXOS91d0ZhNVowVkc2NTlMYk9QRllqTm1QbEhnRCtuaHlWL1ZpY1ZFaTk5Nk5sck01K0xMRzNZUTlmbEcrNgorTXhtczNZRm5Hc3VmSUJtMEgwdkxEcXYyWXdHd1VYYy9WdkZlOFhOZmxMbzR5L1pqYWJwRmN4NXJmM3FVZHBDeXJ1THFnMGNPVnBlNworV2UyTmZvN2FBOUphNFlMYTJwbFdnYlhpK0V2U0l2VDIydDFqZFhhUWF0aGhNbGpyYS9CUGxmZThzVks1alNsb0J5bkxlaXIySHFsSAorNWVCWjYvWmpTVzZwVkx0RkNWYStZTWFlamROVG83M25uVFhZOHg3NnRmbDczaDJ5YmZja2U5N1oyT3g1VHliZDg4N0Zaczg3UzdibgorUFdqVHU5bS8wbkU0WkM4ZGx1MTVkMmkxZTluOFNrZW9uZkZ0LzVWT3VvWWQ5T2RmOU9kZmZRS0wvcTZRZ2tYQm9tQlJzUG9LbG8rQworOWU4TWxsR3pab0ZWNys0RVBtM3BCcVd4QlN0N0EvRHF5V1ZReHFpcnB3ditILzZCUmZ5YkY5QVk0ekpHSHQzdTlZRk9zOEJxVmxmaQorS2xJWFhqc1lVN0JXT0NZcEM2MU5VcjZmNU5oQXJKNFpZSzFQbjZhc3RLWjZteld0TllaZ25mN2FZeWpOUEZpelNlb3dRN0RHa2dpcQorUWRwV2YwUWhSNVZ2NjQrQ2NNQWlhaGVCUldaSHFGS1J1MVVDb2c3V2JRT2NST1d1Y2FuSUQ1UlNzMytQVWxyREtoVko1QlluUTJpSAordlFsOHJlcGV0ZFRqL1pYTXJleVRCTUwrNkViSEhTUnlSWW12NmZRWmxZREk1Wm52RUxVNytqb3lPNXczUFhPKzZZSkt1aU5YcjhsKworKzVoZkdrdjY3Y3lqVGhJMzMyOXZhbXJxVll1NjFUQ0syLzZJekMyUHdvaEZZQWVNV0I4R2QyOUlkWmdCVndiSlZWY0ZIeHRnRzB3awordGlIMklCblpCN0JLQ051OU5wUWR3WWV1Wk9LRDFJdlA3UU5ZU2YwR0JzbWc0RVA5bUJDNlhCM2lXTEI2OXZpSW4zbmdBOCtHYWplVQorTUtSMkJPdG5EMTNuUGJOdUg0SFVqY3dsK3R5K3BNTGd6OVgxQmF5UlpQcGw5c0dPUHVqWE5LU3M3a05qcVN1elY1SG9WMWVZRk9KbworVStSZzVSSzZwY3JlQnp0Q1RnSXdoRi9YdEtWa24wc2lxZlBlUmU2YlFzTEhXdVJPSnJSaklZaW1OTm5KcUt5em55ZjYzTmFrYUdybgorQXprNVpKL3NJcmFEcE02N1Z3Q3JjZjFHWFZuZkRqdGtMZ0FObGRYNmdzQXFBMkMvL3ZYV3YwYWNKUEJndlcvUWJtVWJBRGtRckkwYgorQ2V3b0FKMUdabFNIQXhZY0IrcjFMMWdKNzc3M29XZlFiRGQ0SE5zQkFTd0Q3U29id2dMTGYzeURnV3puN1REcVh0R09BeHNNN2ZCaQorc0hxbVRjaWZyaVA1V2ZrWXJBNlArbmxzS25GVllMQnFNcVpOMTVYMGpXRkZyR3FYZnJQRm5pSWZBbXRsaHE0WmdoM1BnbEozcWJFZAorWVlCVmI2U2ZxeDUzeUFiSHpCbTY0cWlGWVBsQWhVdGZ2eUpQV3poZ2VXZGt6OUp0ZHFaakE3VGpYNGJkeTl0eG9YYjhqQm1HZG1DdworMnJNTUp0emVtSURCYW5ZYkdGUlpqTUhhazJWZ2J6aVA3b1ZnVlJnOThQU1l1d09CWlRSanpkdnhMUEFZUG1HMU9DeXdxb3NNUGxSVQoramNGYXNjRGdjOW03TVZoR2orN3RjRGVFQTlicDhiVUdIMXV3QW9IMXRidUR4STRMQjdLQnNSMDhXQlAyQVA2UmIvNVFBanRrR2crVworMFNOajBiT1VrL2huUW9lOEVOOUdUd1JnNlEvc3h6eWRBbGgrWXp1ZWpmSXpvYXZBKzBaZ3JlTEJlbW1CZmdyZ0pRUXJuR2RDUTdETworWng4d1NJaDRzTm9NQStFcUFTeXlaMElqc1BZYmZOUERCU3VLVDdFbmlsZ1NXQVIyVUxBb1dCUXNDaFlGaTRKRndhSmdmVnZCYWpjQQorYXprRmk0SkZJeFlGaTRKRndhSmdVYkFvV0JRc0NoWk4zaWxZTkdKUnNDaFlGQ3dLVnBoZzVSQ0NWVUFHMXBDUzZBNkZjMGVTZ05VQgorY3U0akJLc2d1bURGRTRJVlR3WldtVDNLWUdXQzAwUmd4Uk9DRlU4TVZpRVpXTGtsWkdEbFZFVTNZcFhsa2tXc3dnSXlzS0FkVVFVcgorczQ0SXJMcE1NckNxTWtGVXdWbzRsekJpWmY3cmF4S3c2aks3U2NFQ1JHQ2hheEdCQlNXcVlFRWhBZ3NLQ1ZqUURtODB3VUpDQWhZUworRXJDUVJBOHNMRVJnNGU1dEk3SmpkMVRCUWp1aWlNRHlnZWdPaGZDQ1pHRDFrRVVzbnplcUVRdlpTd1NXanhBc1g1VEI4aEdDNVNNRQoreXhkdHNDNzdpT1VuQXdzS2pWaVhVOFFLQzZ4b1Jpd0tGZ1dMUml3S0ZnV0xna1hCb21CUnNDaFlGQ3dLRmdXTDNoVlNzQ2hZTkdKUgorc0NoWUZDd0tGZ1dMZ2tYQm9tQmhzR29Jd1RJb1IxSXBnbVdnNFBJd2svZHlndzgwSU1VZ1dPc0p3VEtzTmhObHNJb2xzUFJsa2dCVworcGY3SE9zSUZ5NmpheklvVlJOMHIyTEhic05yTUpCR3NqTmNhYTNTa2NUMWZsNmpCVmQvY29DTnRGWHo1bnowWk5jcnJxYTdlbUI4bQorV01WdERicnRIblIxb0M5ZS9ueGRNeVE3UEpVRzE2c29Ea3UvYW8rdVd4cWFQVHdwSzJZY3I5V1Y4VHhZeGVXNitqVWZjVFdFbzk3cAorOGR2MTJ6MCtjd1hmdlVlSTdOZzl2cmFXd0E0SUZsaVprYVdRYVJNVWJ5ZGs4S0hBVis3V0wrOHQxRzl2bjY2K252SnRGbkVCZkdHaworVzJSUVZod1hTdk5Eb0xOMFJiU2owdVVoc29OVURPdmFDeEdtZHJ4S3BpcmZPbWEwNE0vVkcram5MdmVGcGQ4S2g3S2Q3R3kxSWdlSQordWxld28yV0c2bnJqczBQWndhQ2E0WTJ0amEydGpZM3dML2czZm8zK2o5L2dGOUxvcnBRTzFYdCtqUGFEZG54dW8zQUo4Ykt5TmtqcgorbEl1eHY4MUFoTTgxdGlyc2FOV3lvNDN3ZXBIcXAzN2ZLZVF5TGNkYjlPVDRlU0VIYXpPNFhwanFBZjFtb1ZaOHV6NGp0M1R5WnB3MwordWg2Mmd5RlN6UTh1Zi9IL205anhieUlNZFFFVkNoWVZDaFlWQ2hZVktoUXNLaFFzS2hRc0tsUW9XRlFvV0ZRb1dDRDBnMFY4ZnZVTAorMlNkRGJLRHdtcXF1MXh0UVFkMVNxQ05CcC9XWXJLRGtwUjUva0V0OUJLZjV6RnNjVURUZkUvelNxK2xsWHdUZHE0aFlXd3ZtSWxsYQorOG83ODZNNlN3bWVYYmo2cnVPamhyWVZ6bDVZZEVvNDFGU3ljSzV6NW9kbmZoSmFkSmFnWjZYRzdoVUxMU0JtMFpGTlhvRGdpU2k4NgorYmVubWR0Ty9xWUdHc0d1cWVKZk9YYmkwckpWZlV0b25PSG5wNWg2Vmx4ZXF2UnhscnNva1hUYTNLanB6SFdxNlNkNDA4dkt6b3BlbAorTTVlV0hJcHNLRXhqQklrZmQxTEVjOTN3Qkh4bzJKUnVpZWJEOXd5eG9XT0o0dzdoejlReGt0aW5tTnAzTFl0dnhpM0hEMXNpK0VGcworMkpZNGhmOXl5SFhodTlJTGVoY1BGMC96bXhleTRJVjdCWGZGRFZ2U2pSdktsYW56SWo1U0tCMFk5ZzdROHJJcFlLVXhvWnJlbVpZZworZU91azZKcUFsemVyemhUQUNCZXNUR1prRHBUSnNLbGJlQU5iSG9INDNEYzVKM000dzl3aVh2UDVCQ1lPSFV1ek1RTzNvY2VsMWpIeAorT1ZneVlmODlaT0ozN3ZCUTZKUDdZRHNKak8waFhzTjRKbE5zK1NrY0loaTdxQXNEajNTaDA3NGNKWjNHM0dWYXo2SDlDN0FodStDdQordTg2aVl3Vk1rcUJPQXROdkczSk5DWDlrTWp3dzZKRDh0RXpleTJkTjg1N1F2VGs1c0g4SHZpTjAweE0ySmk1dE12WmZJajdtbGJ5YworaHJ6czU4OU1FOEVnOVo4S3JCTCt4YnFoL1Y3RWNYMGlFN2ZrRVByV3Q2eVRydm1jalpueVlRK09sNk9ZUVRVNFlzVkxFYVYvM0FlbQorOWR5WEk1akV6ZGp4ZFl0dHpPOXhPTEl6VGZ3UTlIeC9yRXNWSXo3YnZPVVJXMktOZU5xU0p2NjBCSGlhZWNQZ0tOalFJZDRQQ2N5RAorUEZqaXM1RVBqN0poMWtxWVRPSEFDUGdSditSbElIajVRYjk1WUpXSXVneTFQY2kvZW82SkV6cHozWEFoZEVCM0RkdmNKSHI1S2NXWgorNndiellJUU5sdmpBOUNlWTN5S2JONkdRSk1oN2d4a2NHRThrMko0U2o1MGJ4VXpod1JMenU5Ny9NcS9uNExXbHFBbnhqc092N2N3KworNFYrSE0xc3hXRWxpc25ucFo3WVhrUlhQTWJkSXVjRW00YlRvQzI0b1VjcE9OL1czSFZLQUJiNjZGa2VvRWlZTktvam8yY1FNQTd5WAorQTZkQkw3OWpIbGlGVWpQTU5UaGxlYzhXSjRGeVlpaXpKTmpMaVNjVlNDSXdJZ2ZMRHhaaVBIcUhNakkrSnlJZHVzQWp6RGkvNkVudworcHUyaHMzS3cvSEpQUnJ2akRnK09Demo5M0lqRUR5U3d2SDZvMkhEYlpnVllYWUk5aDY5Z3RnWGdISkc0emF4dFdTM1hNYkpyVHh5NAorVGVVTy9qdkFnNFh6ZGVZV3JOSjF6SXVCOUdGaTNJc1dnTlhMMk02alVXOFV6RnlrZjMrT2VRcHFqNzNzbGNZSTZPVUFXSDZRUnhvMworUWtlc2N5UDZvYjU0YjhBMXJZRi9QWGNJSml6K2l6L2pVd1crb1VzZm52ZGFGckgrelB3azBBRzlodzk1Z1d3b2hOOTEvRVdUUjZ4NworYkV1RTB3TFNpYXd3Ujk1a2Z0S3RjcGNjckJQWDlqc2tId3JCUkQ0cmhOSGpyUG8wOHlQV29QTllwVUVCaUFEc1RPeXV1NENrUW04bgorOUxJc1luMDVvdDhIRVlHVnU2OEt5cnBSY0xTRHQzKy90ajBsM0hCQ0VXNk90MTh4N0pSMERNKzYrR1U1VmkvTXNmYVkxWEcvWnY0WAorS05UaGM2d1NyUFBpaE1SdFFKRmo5VDVpRy9nQlB1Mi9nMDh6STNWWE5DVDBUYWdjS3cwcnZQVWUyME40VWdKNjJhLzJzZ1U1Rm1wegorUS85eEZ3S2RxZVZsZEdZZUQ4YlF1Q1dFOTJZcXNFUVoxODFyc2pUb2hIWE1mVUdYaG1BVllNazE5YTV3S0JOaUdpVStYdFNabjI2bworWW9iTVJhcms1ZUs3UWk4NjdSMWdnZmpndUxJNTZHZ0JNNUpYSndmZVNndDNoYUxHaVljd2o2RzhiQkpZYWJ3dThJWjBJSjRvZW9aNQorUE9qN0VleGxud3FNU01DeUp5RVpZa1A1RzVxKzRCSDNqZVFsVFlqa1hseENQQWtmUzZyRFlFa1RIUSsxbXVZYU8xT0hvMDNWRUw3bAorUEI2c0pFRm5mR3NNd1pKMGllTWp3UkNtaXNkZlVEZ0grTXpwdUpINDdnR0FKcUdoVEhpc0lEQjNsTWluRUJBc1h1RUVHOHpaL1RJdgorSndXOGJCSlk0cHlmZUxlUUo4YlRORUZsSC9ERnE3eGNnTStVZ3hGNWp0V3liaWlEcG9uRTc1SlBwQWI3NVQ0ZXJDVGg0RDRNVmk2VQorb1RiaFp0c2t1Vm40TG9sem9Ka2liY0pFQng2SnFoZzdWQ1VuSVQ1eHlWbnh0SGVFV01aTG1sbGdwUWtSUzV3dlRzSmdqY3pMemMwYworSEQ5TW5QVVhjeXp2NFh1WVJNWFhWK1psc3lJV2RFMW1mMmJjWmlIdVNCRkxSQTdtcXdsQlhnNE1vaTNyYm1ZZThrY09Ga3p1RXE3NQorQUEyM1M3QUd2cTFRcWdxWklmRDE3c0hqK0J5ckNoM2NhaGZBUWtjK0hZeGFOVyt4NjBaaDlHL0M2dVNJWU8wVGIvWnRQK21SY3F4TgordHJnbHF0U01QeTNYTExBQ09SYnZMb2dVQml1WG55NUtGTzlNQTNlRkowYjBlekhvdEVMSW82azVWdTlFNWhZeFkzOWV6TEZ3WjViRgorSTdEVVhzNVJwUDBRakpvK2dOVURoak5sNkRaSGZsZFloOEU2OGJOQjJ4VEQwNzdBWGVHbUJIVDNhaHBaZjJZZWxDMmVGaXJBUXZkVAorVEwvemdidkM1MUNHaFhWUjNoVnVOUXNzM0pETTlpbzVXTEEzKzIxVGd5Vk1DaWx2SnZlWkNWWWg4c2k1VVdqZVBZQkpJQ1hHRWVzNQorNk9VdW1aZHo1R20vWDVndGpCU3NMaGlmNGZtWFpQTllmdkFoQWd2Tll6MGtXNjVVZ0FXZXQ5bGVOQXNyUHpqY1A2NG04RzZwR3F4ZQoreHRZam0yNllhQk82RXA0bVp1OWVQeWd6RDZ4elYwanpXTENoclhLd3dMa1JhTnhUZ0NWT2NwMlR6Yk1oTDVzTEZwb3pHTXJjY29FUAorc3FPWXB3Sk45MkN3ZHZaUFZIaFpBVmFYbEVoR09CUUtjVWsrbFF6dkI2L0ZsUGZ2OTFSZ2tlVmFPVmorWHZobE9Ha1dXVGlJQjY3KworaEhvb2ZOUDIzWFlaV09ldysvenEweGFiQjVaaWloKzZTdzRXemhPRTVGMVU0TkpFMis5QnNKZUhtRDZQdGNrbThpUmZXZ0dIOGF3cAorZE5kZFNpK0xZSGw1TVBaSEFwWUFac3NqREI1OFlTT0p3bHJoemlkc2FBVUN5TllLZlhXTGI3Ylo2Z0pnZWNHSndiYTd6TnMrRUZqRgorYXRsNWo0MlpySmdnUFR3VWV5c3dRV2pNR1hFQUFBSnFTVVJCVlBwZWYzNjZnVjhyUEN1ZGRwOXBZUEdMa3J5N0hyRXg0K1Jnb1RVbworWWJvaFU1enpzL0ZCTE1qTGZwUEJndEZjWElTZUtLNFZudCszT01FV2gxNTlxdlR5NDRvSjBudElKeHhVWUtVVm9OdTduT0VNanM1ZQorWVhjRE9tSmptSEhDMS9GNUc5cmRrSXRXdjZFS2ZzWE0rM01Nczgwc3JzUjFkM2huQXhXTW05TEtnNVdUaDNUT1RHRFVNKytQTUdnTQorOVByQTRWSDhhZGlLS2EzbTZZZTJVVWp1d2hNdkFiQmdhbk5MSzQ1WVNkakp1WGcvaGg5NytaNFFYallUTERnWTNpWFEvUVFUNk14eAorN3dTOFBGbjA4bG4rZmhJN09lZG1KbzV3VWpEMGZpeG1tTFJzczI0NG5oZXkyY2NKVzNqd2Zxd0Vmci9PeUNVOXd2MjFDTmFsRWN3ZworOHdaRGFhY1FZNTl5aUUvTm1jQldJVHpudDVXeGkyREJBQ0pzUWhIM1kvR25tU2k5NjhTR2tMdThhRDlXanJTTTBoOXZlQWpzeDdMegorODJ6OE5xNzR3R2xtZ1pYR3pCVy9BWnNZS2JrUzkyUEY0eGlCczRxV3hVUGtYdmFGQkNNY3NFcHk4N0FvZDFydUxKbGJ3Ry9IbE8wdworaE1jS2xuNG9aRGROdVhtQlQrZE9ObThYS2NxWWRoYkNsamRMcTJzRnZNb0ZTL21PQkhVNWM2VUFzaTUzc3NpUitqVHpCRGFVdDdTcworU2J3SnpTbVRkSDgrOTNHWVgxVGxDRTR1VXlnRHZaeW45bktVd1NySnFaTGVQWk83dE5zcnRIVVlkVER1VEc5SUwvdGtZQkF2T1JudQorZWZmNlpiMHFTby9PY0FETTNQZnUxVkhXcTNmQXIyZGpsTmxYdWRRWGRDVFlqVjRMNnVDb2RmRUc5N1J3U0w3blhhMnpQd0t3cUZDSgorbWxDd3FGQ3dxRkN3cUZDd3FGQ2hZRkdoWUZHaFlGR2hRc0dpUXNHaVFzR2lRb1dDUllXQ1JZV0NSWVVLQllzS0JZc0tCWXNLRlFvVworRlFvV0ZRb1dGU29VTENxWHEvdy9nYnVkakk2Yk13WUFBQUFBU1VWT1JLNUNZSUk9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvY3JvcC5naWYuYjY0IGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2Nyb3AuZ2lmLmI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWQ5MzZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2Nyb3AuZ2lmLmI2NApAQCAtMCwwICsxLDEwNSBAQAorUjBsR09EbGh1UUpHQWVNQUFBQUFBSDkvZndDdkFQOEFBTkVBMGRFQUFLOEFyLy8vL3dDT0FBQUEwUUFBLy8vLy8vLy8vLy8vLy8vLworLy8vLy95d0FBQUFBdVFKR0FRQUUvdkRJU2F1OU9Pdk51LzlnS0k1a2FaNW9xcTVzNjc1d0xNOTBiZDk0cnU5ODcvL0FvSEJJTEJxUAoreUtSeXlXdzZuOUNvZEVxdFdxL1lySGJMN1hxLzRMQjRUQzZieitpMGVzMXV1OS93dUh4T3I5dnYrTHgreisvNy80Q0Jnb09FaFlhSAoraUltS2k0eU5qbytRa1pLVGxKV1dsNWlabXB1Y25aNmZvS0dpbzZTbHBxZW9xYXFycksydXI3Q3hzck8wdGJhM3VMbTZnUUM5dnIvQQord2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0Zll4YnRoMmQzZTMrRFJBZVBrNWVibjZPbmw0ZXp0N3UzcThmTHFBTnRnNy9qNQorK3Mvei9mNEIrd0lLSEFqc244RjA5ZXg1SWNpd29idURFTTFCaTBpeG9zV0xHRE5xckpoUUlaZGsvaHREaWh4SnNpVEppU1pUcWx6SgorTW1OSGoxcSt0Unpuc0tiTm16aHpEb3ozRWlZV21UTjcrdlFKZ09mUW1ONW1BanpLdENnOXBqK1RCb1U2MUNsQ3FsYUF0aFNLVlpkVgorZEZ5N050SEtNcXhZVzEvUG1UMmJoT3pLdFd4bHBaVVlGNHBibFhEcnZwcTdUcStUdStVR0NCNU11TERodzRnVEsxN011TEhqeDVBagorUzU1TXViTGx5NWd6YTk1TW1WeGV2MEVBa3hzZzhqTm9WWE5KMHp5OVJQUTQxUnROc3o2VjJ2UHN0bExUd2RZbyt6YXAycXQ5RzNFZAorWUxkTDRiR0FMMFZPaExoeGpMMlpmMUllWGJvTTU2V3R0Nkt1UFhSdWRNOHZWdStlaVR0NUg5aERqajl2eWZ5SVhyVFc4MGdmTzRPQworKy9qejY5L1B2Ny8vL3dBRy9pamdnQVFXYU9DQkNDYW80SUlNTnVqZ2dSZTRKNEl3QnhCZzRZVVlacWpoaGh4MjZPR0hJSVlvNG9naworbG9paE1CYmkxazA4NFZsa2xnTHNXUUtqQlJKcWdJd0VCSlJ5WTRVcVpzTmlkaGpNR09Na1FsTGduakVSd2tkQmp1VnBrMlFGVEI1QgorSDIvMkRVbEprUk5ZaFdRS1VUS3lKUXBkRmpIbGNVRmFTYVF4bzluR1FwaC9mQ2tEbTBPTUNWMlZaaDdpWnBibndDWWZCbkRLY2VjTworZlhxM29qb3Rja1JublhyOFNRR1dFdFFJcGh1S0VoRW9FSEtLZHlnSENVaVE2UUVKZERyRXBoV0Eyb0dvM1VYYUFhTUhPSHJDcEZtWQorMmdTcjZIMlhKNUFYb0hxQnA1eHl1aW1wUGZDYTZ3ZSs2dVdxQ2FpcWFnS3NUQXhyQmJMei9zbHFUcUVVdldnQnFMdmlTcXF2blhwcQorcmJiWlRwRHR0OXppU3NHM3VuS3JhYWJrbHR1dFdNcStVT3lzd2EzQTdBL3Rmakd2RHBXNmVLbTN2K2E2NjdpMzh2dnZ1UUx6VzdDbQorQUo4NzhML1c5b3V1Ui9YaThPNnphc29yUk1SbzNKdER2b2FXT2UydjRJSWM3TFVJRTR6d3RkMVNtN0M2S1o4TUxzbXpZQnpFeElGVgorcklMR0pzZ2NCODQzY0J6dHZncUhXbkt3dXA1czhycm9WaXZ3d0VjM0RITFIvaktjaXM1SzBKeG12RGV6UUxVZVBOdmdjMFRTQml4MAorMU91RzZuUzU2bm9iN3NzcXAxMzJ3dUlpN2NuV1UxajltczFjaGtEM0lGM1g4RFZFWWU5QXROaTM3TTJGM2NYaC9XZ0ZoalBTTncxLworSHhTNENTOTdNUGpIL3RzNXVRZmllcWJRdUNXUHp4QzVRWlBuY1BuWW9YeitCdWVLWStCbTZKM0FIc1BvLzVUT211cDVzQjV2eExKdgorMHZzTHRQdGpPMVc0RDBLejZyOW5rbndMd2ZjenZGZWFtNklBbW5kam5mY3N5MnZ0Yk0zcUFUMktraGtVTHdqNFNSSVRJYnpMV1l4OQorajlqODJMM0h2eWxqaXZ6ZUcxdEM5cUN6ZjQzNzljRVBpZ0FDQ0FZQUIwakFBaHJ3Z0FoTW9BSVh5TUFHT3ZDQkVJeWdBVk1WREJMbworTG4xWld4OFNtamVQNTIxQ0FFWWlYeXBBR01MMVhIQlBGOEJmSlZUb3VlMWRyWCsxR2dVSlpUSERGSnl3QlN5Y1JBNVB3RUY1ZUZBVAorTllSRkVFOXd3elhSWW9jNWMySDFZR2dCVzMyUUZrTWsxdmtvWnIzRnlRS0pKZWloL2xIODk0a290c0tMRnB3aTl6QjR2U3ZxenhyOAorb3hJWFBRSEdWYlJSQkVWVW54azNxTVRFdlMrR29uampCQkN3eHdNZzRJK2QwQ01JNHBqQk9VcXBqdEFDbS9jNElVaEFTdUNQZlBRagorSTFsQXlETEdBb3NrME9KVDFoaElDMFJTa3BEc295ZzlHVXBBaHRLUHA2UUFKRDlwQjBGK29KSld2T1FacTVGR011RXhGRkhrWXlSMQorT1VwV3FyS1B2SHlrSklYWnl6eTQwZ093WE5VUlowbU5XczZKazVQMEpDaFhLVXhIWHNDWHdRVGxLSWU1aDJPZVNvd3ZSS0VGTU9rSQorY2s0SWtiUnFvZ3l2YVUxdVpwT2QxVVJsTlhlcFNucml3WnNjU09heGxrbkhRZWttblJWd0loQXhnTTA5cnRLWEJyWG5LYWxKekZUZQorQVo4YjBPZjkvdmg1U0grQ0I2Q0xXaWNQRUFvSWlHcEFvaVF3cCtPWU9RMW5XZ3FhVDBUQlFUbDZUVU40dEg3b0V5ZVVLRG9jZE41Ugorblhuc0FVdjk4RkpPMmkra05CV1RUWmtZVUkzU2tKTGdYS0pNbHhUVTVneFZqYmY4SHhTUlNxT1k0ckNwY1hxcUxYR0t5Nm11QUtRagorRU9raXhQb0JUVjRGcFFPZFJVK2ppaWNxa2pHV3NDQ3JCOHdLbGtXbTlLaGZUYW9kMzZwTURWYlVSNFRDNkFRRW1vbTFzcEdxakxPcQorRWYxYVU0dWlENnBjbGFwYUVXc2t4Y3BSbHYwRTdEOXZXdFNjVGphdlZYWHJVaWNnVjBTVWxnTjBWWXRkMDRwWEZZQlZCS2MxUkd4dAorcE5WbnN2V3duM1d0WGp1M1dFTTJWck1YNVd4R1BkdGFHKzYyZGZ0a3JGQWQvdXRXeUhhMnE3azFibWpIT0ZvY1lmVml0VDNwYlRzWgorWFJTOE5nU3pKVVI0WFpkZGZhRzFzRjdWN1hURGVWWGxPcFc1WTNUdWNLRmJYTzhldDRwOTllMXlnZnZZclQ1WHN2VWw0bjM1bWx6OQordnBlL3pmWHZmQUVjQzhQK3Q2M1ViYStCc3dyZkY4cDNzRVp0TUdVaHpON2VZdmF2N1F1c2NERk1YQTJETnJHaWxmQ0hmeHZpelJKMQord1YxTXIzUlJIR0VQeDVXazBqQ3BlYmNielFCTGNiMUtWZkdOTTl2aTRMNll4UFExc1hwcDNPSExEaG5FK3hQeGtTVkFXRXc0dU1jegorcm15S2JmeUs4WllQd2ZGVk1KSVpMTVFOTjhxeWhWenhmb3ZjWDl0R05zYmRGVENROTFwZEhybVh3bUMyc0ppcG5PRXluMWpMTlhaeQorbDNFcy9nNHBYNWpQSmZiemtnSGQ1RFEvbWNWUmR2R2hEMURsUzF6NXJsbm1jSkM1N0FvdjA2aThIZU14cGhXZDZUTnZXZENkSmpSSworSkwxblN2ZjVGWmRHTkpNM2plcFdlSnB4b1A3WmVhMHNZL3ZPbWJlMVpzV3RTNWpuSlU2NjBwYUlOWHIvckdrNkMzblFSSTYwa1kvOQorYWxjbys3c2dHTFlmdE4yb1hDdHkxNWJ1dFp4bjdXeE8yMXJWL0RCMHE1RmRDV1h6bXRtbURyU2pvUTFsTktyYnpRL0dyWTlMZ08wUAorY0pzUC8wNHRYY0NkYkhIL21OekFubmVxbzIxdlZ1TWJ4dnBXY3FsVGhXWkxQbnJOMG02emR0OGNjVkw3R3VISW5laWRzVnRoWTYrNworMmw4ME04VlByZkJ6TTV5Vzk5NTR2cm03N3pEK091UkFIYm1naXIxWC9tb25HdFlxLzJsWXI3dHpOaWY0NFdPR2M4MUgwRzhQL0hzUAorQWZjMjRGYTc3S1hEY2NCMWZqclgwTzBNSFllYTR6U1grTWNaVGV1V0M1dnJ6ZkM2cmtYTldyR1BtK3psRHZZcW9sN3lucC84NTlZTworZXNYaFNtOUlOM3phZDAreXg5L2U3SVJidk84WS83dkdkd3gyTEEvKzRIQTNQTjhYWG0rWU8xem1FQS83NC9tTjlXZFQzdStXQnp6UworWlUxbW9NTjc1ZkkrL09jVEgvckZmMzNtampmOW9ndVA4NkhybkZKU2x4elYzMjMxRURTOUExclBBOTE1bnNpcEU3emRCdWY4emZGYgorWURVZjJPaGhIcjJyOFo3eTB3c2R0a1RIZmQyTHIvdmpVOExkNGJiKzN2UHJmRHhEWDgvU1ovZjNrMjl6a0ROZjVCTW1PZkVGUzNxbAorL3JzZDhyUi9mODdqWC9TTUh4M3pTZGR4c2pkeDF3ZGUyVWN2dVVjNnV4ZCt2VGRJbldkdVovZHl6UlJ6akFkN296YUFZNWQvQkFaLworNVNkLzUyZHk2WWR5ckhCdER5aDNxakI4SDJoM0lVaDlJNmgzTEtkNkxsZDVFM2g1RlpoNXNaZDM0dmVDa3hlRG9EZURvZ2VBOVNlQQorT0RoNzhkWm9NQmlCTWxoU0ZQaDZObmlCUTBpQTQ5ZDhGL2Q4L2hkOVFEaDlnb2VCaEZlRVpYZUVjNGQyektCMjM4WjJWWGQveXVkKworRzdoL0hkaC9pdmQvTlJpQW1xZUYrTWVGY1dkMlh5aUJTa2lEVEFpSE4xaDlSSWg2UnJpRFNOaURlZmlEYnhpRWNmaUVHVWlIa2tkKworVTJoK1ZZaCtWNmgra3lCQmxuaUptSmlKbXJpSmx1aUNxU2VJL25lWWhEbTJoR3ZYZUp6Z0N6RWpRa3hYZ25aNGdtQzRER0pvZkdTNAorQ2NBQUM3WFlmcEZYZTloM2V3aTRmZlNIaGZHamlxdndDMmVZaS9wbmUveW5mZk0zWW9pWU9xaG9pODk0ZGN1WGhzaTRoc3FZZ3R5bgorZ041WEh0MW1pOTNvZTZ6b2hhNkloNk9vaDZWb2dUcFNaKzNSRzcvSEFjR0hCeWdZaVNBNGlkQ1lpc2dVanFBNGpxSllhT1k0aHFZNAorTmVwWUNjSTRjd1dZYlFjWUs3N0lqTUJZajNLeEZ1MjRBZTk0Qi9IWWhsWjRpQXVaSEFGSkNRUDVrQm9Ra1hZd2thM25obnZZakF5Sgora1dCWGtQNTJrRDBnY0gyeGpRQnBqM0NJa2s2bmtzMlNrRk4ya1dpUmtaT2dKQnlaQVI1WkJ5RHBnNjUzamsxWUN3TTVqQURRL3BOOAorUXBNN3dKSWhSNGw3b1pPU29Jb3lDWHhNaVM4SldEc0xhSlJTK1Fnd1FqNVY2WTVYdVRGWktUeGJtWk92SUNSS0VwWVFPWlk0NEpUdgorQjVYeDBaV0tnQ1crRUlVYytJZ2VLSThxU0k5WWNaU2lVQ3hwMFloU2lIaFVTSkdTYUpGeVdUaDBXUWp2MGd1QjZJaUdDWW1JT1krSworR1JlQTJRbkhVeFNFbVplVHVaZVYyWmVYV1JlWnFRbDJBNW5IdUl2SjJJdkxlSk9MdVEybGVRbWNBNWxaNTVZOVU1Yk9jNVpIRVp0WAorY2wrOG1aSzhpSkN0NlhPMzA1aDZjRUsvS1piQnVaSzQyVUc2U1R6R2VRZEZsSncrYVp0ZTA1dys5SngvR1oxMFFFalVPVTdXNlRmWQordVVXektDemNHUWV3OUoya0ZaNlFNNTZiVko1K29aNkUvcUJQNnZtVGRCQ1VoVGlVL29pT3R5R2ZnUUJTMUdtZmM0Q2Y1V2lJSTRtVAorMHVHZmZ2QmF2eW1nY2tDZy9HaWdSTW1IMXFHZ200T1A1R1dWeTFtVHd4bDRRMktoZU5CMG1lbWdPL09LeWhDTDNRZWZ6QUdpZGRDTworUjBtaWNBQ2hxeWFoKzFtVTU4R2ljc0NSd2dpamJ5Q2o2ZGFQc3ZpUE1ZS2pxNE9oWmRVVFBPb0dQdHAxcEZpakZHb21STW9HU3ZtTgorZHJhYXdvbU52L2lhQ1hxZWgyT2s1MVNsMXNpYVdLcVFXbHFoWEpvRlU0cHI3Q2s2N25sV0tncWxaMm9GYVFvbFVaby81QmloK2htaworL0lrb0lmUUhjOHBVRktTWGJCaVNGWG1nWmNvZWRRb0dmN3FlV1JLbmdyQ2thZGVrZW1xamZQb2t4K21sYWtpbHFRQ3AvbUVvcVNrcQorcEpXYW9TR0txZFhZcDV0cW9pRGhxZHI0cHFGcXFpMUtxcXBwcWFiQXFiQ29xbHJwa3EzYXFLODZqYlc1QVlscVdxaUtEQ2k2cXFDYQorcTdRMUI0dHFYUjN3cTRWQXF5ZHFxMmFKcThicXFtNlFyR0NLV280S2xNRjZETU42cTZ3NnJiSXFwYkJxZ0hxVHJRKzZyZFFEcEorNgorcCtDNnJPYnFBOWJhTmN5NmJlaGFETjBhcmQvYXJxS2FCdkdhUkp6Z3JLbXFyc1RLcnZvNlYrK2FBLzNLUXdlYkJnQXJyTkNhbTlKYQorc1B0S0JnbUxBdk1xa2ZWS0RQY0tzZmtxc2NkS3NlTnFrQ3R3c2ZlWnNjT3dzYzRac1I0YlBnc2JBeFU3c2kwYkJnM0xyUStic2gyNworc3I0YXN5M3dzdG9qQ1RPYnJqUTZxVStLcy83cS9nVTh5enc2dXdVL2E2ODFtNTBxUzdRNTJ3Vkg2d0lrdXdaTHE3Rk5TNTdGQ3JWWgorbExURnFJRzkycDRqZGFjem1xZnJTcWxjcTdCb0dyTEFlWjJLY0xVbm03WHZ1YlZwVzdSVk1MVnNDcXhrKzZOQmU3WkRXN2NxVUxVdQoreTdZejJaUmUrd1J3S3d3bzY3UTNDN2psV2plRXE2SE5JbDRtcTdoeTY2WjA2N2dXZTdnd3BZT1NpWldQV3JuQnNMaGFTN0NhRzdpYworZTVKNG1hbk1DUWlKTzdxWFcxZFBlN3BmeWdSNE83bDk4TG9GRWJ1cU5idTBXN3RKY0x1dEMzV2l1N3NDNjYyWis3c3dHN3lScTV3MQordFhWN3k2VEhpNi9KcTd6TGF3VENpM3Z3V0x5L1FMcHphN3JXUzdVNm03M2U4WkhjZTVlOE8zQ05HNzZiT3dUay9vdGRKUnU5a1RxOQorSEZ1OTdJdTBNOU84YmZrRWd2c3E1NHVhOUd1ejludS8rQXV2K3R1UlV0Qy9TcUM3M1p1K0xibStCSXk2UGZDK2g2U2svOHNYaVdtbworRVF5L09rREJkTVFHREl5K0FjeTRBN3pCd0hPZUhvd2JhaERDQU55M0E0dTJKbnliTjVEQ1NxREFRY0RDR0d5WkdoekRUbFVETk53YQorcVF1QjE4aVgyWWk4NE12RGJpc0RQNXdzUVN5T1YwckVXWXJFRlF3RFN6d1dUVnlZbEVtb0dUeWhKQ25GQ09ndUIxeWQzSERGcFhxWQorV3F6RFhJeWdYbHkrbmhpWldOd0ZObXdET095OW1IdkVhMHlXT2ZpSm4vc0ZjVHdEYyt6QVQzbkhRQXlGbnZ2RzkwREd6a3VJQldxMgorTC95M2dxeTljd2lJWFppUGZJeklZcnlQL21VcmttbDhxSThzbmwvTGlMcElybXJReDBJc3BsQk1wcDM4RitOUnhVaEJCWDg4d3FVTAordzZuTXhxOFV4a3Y1QnFTOHg0TXFsSnJzcEYwOHk4OTdqN3pxZVd1UXk2eWJ4YnhjcUpzTXpGRVFtNnhjeVU3d3lpNXN4TExNekZrVgorVWJhY1FuWmd6RzJyeUhqYXkwTDd5OWI4d1Q2MXVtWHNKNmtyell4TXpZNDh6bE5Na09ZY3E5dDh1T29Nem40cnp1NnN3cG5IbGdpOAorQjl4OHk1ak10K3RNdlhhY3p6Mk1pUHg4eWY0Y3MvV3N6TDZzeGdhdHlqaVowQURkQi8vTXFBRXR2ZE5NME5VYzBlU01obUhiSnUvYQorMEZ2ODBKenMwVDh3UFQxQjBkbzhDTnhNMG1oczBpaDlCVE1DUGl3Tm5vV1F5ekF0bWpzODAxUlFKUEJ4L3RNelpTZGN1dE5Gek5IdAorN05OSHdDZ3RQTW02ekF2Y2FkUlJyTlNRKzJsZjBabkhuTlBHS2RXb1ROVlNNREdvaWRYblROUTB3Tld1NmRWZkRVNjlJTmJ5dkFnWAorYTliRWlkWk9nRGlvR2RLT3dLeHc3YUZ5YmJ2SEZZMnRtQWlKbXRjcnVOZE5nSnlsN05iVkpkaCtTZGg4UGN3NHlpd0dNQUdSYlFDVQoralFHUm5RS1h2UVdQZmNGMExMc1F6TmcrWElJZ2lpeVZMUUdVZmRtWlRRR3BiUUtyM2NwUGJjcWhlZFQxVzlDZ2piRGhxS0Jza3RtVAorWGRvSGtOcXRYZHFuTGRtN2ZkcVZUZHk3UGNhR1BNU3hQZFcxemJ6RC9HbkhQTm1tM2R1U1hkMFhJTjNUVGQzYWpkb1Z3TjFpSUorSworUFpyTmpRUVM5WjF3SXQzR1BkMjgvbTBCMkwzZDJlM2R4SjNkWTJEZW5BM0ljVG5lemczU1Vkdk53dTNiMWQzYXF0M2I4UDNlNm0zZAorQUg3SUlwdlI4N3ZSczkzUitEM0Q0OHFiZmJMYXVwM2U3RzNhdkQzZzFHM2M3VzBHRWw3ZnNQeTlEdjdnb2YzYzdwcklvbENhNGQzVAorSk82K2tRdVlzc1BoZ0wwV0s3N01MVTRFRDdtV1E0MEtPZzZvQ3Q2cElWN0hJMzdqZzJ2aTUwUStTVm9HeElqUjNwekpEaDNPRUUzawordG0za1I5NFJTYTdrMFZqak1pM2wrVXZsNWZxTVYwNEdGYVRsVUg3U1hMNkZrbHlIL2hybVorQUxaSDdQVVg3bUphN2ZhMklpZG43bgorZUo3bmVyN25KZ0xpREM3QXRDM25lZXpHOXd1WEcyam1ncjZLWGg3Qmh2NURpVDREMXFxdmphNmQvby8raDBLOXNwUHV1NVV1alhUTwordzVuKzJac09qb3RPd0o5ZXdxR09pMkFyeGFVZTZLZXU2SjBldzZzKzVLM3U2c1pJamRZYjYwazk2MmgrNlI2TDYvaXM2NHVZNW15dAordkw0ZTU4QWU3THd1c2NXTzZNZStYY2xlc012ZTdFcWN6VVFiN2RKT3hkU09zOVorN1M0UTZlMjY3ZHpleGs1TjZtM3EyYVllN3VWYworeUlWZTdyMEw2dWdlay9GTTdPeXV2dWR1ckFVZ0FmZCtBQVd3N3orUTd5Zmc3OTgwNnV0dWszRjl1dnl1Ny9xZTd3Q3ZBd3RQQWczLworVWRtTzZmUCt3UFZ1SmY1KzcvdXU4Qlh3OEJtUDhRclA3eDAvQVIwLzhnbC84Q0tmOGZodThocGY4aDRQOGlIZnVYcE03Z0F3OHdCUQorOHpaLzh6aWY4enJmMmUxZS92RVdqL0FJdi9MNGZnRVhEL1FYWC9SRkwvSkF2L1JMci9KRGIvUXByL1FtRC9FQ3o3NDZmL1ZZai9VOAorVCsrc2ppZ1l6L0pmbi9BWXNQQkM3L1Jrai9KSi8vUmkvL1FyLy9GS3ovSlUvK29tblBWMFgvZGJUL0ZkWHljby8vWkNid0VISC9aLworLy9kcmIvWjlIL2h0ei9ZcHIvRnA3K3p4L3J0MS8vaFhmL2VCN0xoa1AvUWs3L2VDbi9od3Iva2pmL2xCdi9kN3YvbUtqL2Fobis0eAorUC9DUW4vbzV6Tk0yanRJUG53R3Z2d1BlRHE2cVgvdVNmOTlJM1BrZUVQdEU3K0pWSDc2MXIvcTNmK2cremZ0KzcvdHl2OEhCbi9yRAorNytqdkx1ckp6K2pMLy9qTlQrblBiL3FFYnZYVGIvZjJmZWdQOHYzZ0gvN2lQLzdrWC83bS9uLys2RC83MDdyOTNLOGJuUEgrOEIvLworOGovLzlGLy85bi8vK0UvL29lejQ3Si8xU21ISkVIRGtwTlZlblBYbTNYOHdGRWV5Tk04UkNGYTJCVkE0bG1lNnRtOGcxM2UrOS9sVworVURna0ZnT3ZXMUs1WkRhZFQ2aFNWVVJHclZkc2R2bmpkbnRHY0hoWTFaYk5aM1JhM1prU3lXdDRYRjd6MXJ0aXZOaSs1L2Y5ZjhCQQord1VIQ1FzTkR4RVRGSGFPM3VVZklTRGE3dkVyTFM4eE16VTNPVHIxQXoxRFJVZEpTMHlCSFNkWFZ5TDNUVjloWTJkbWpSZHRiM054QgorMmlOVzM5ODVYZUZoNG1MalkrUms1V1VlWU9kbjZHanBhZXBxNjJ2c2JPMXQ3bTd2Yi9CdzhYSHljdk56OUhUMWRmWjI5M2Y0ZVBsNQorK25yN2UveDgvWDMrRzM3L2Y0QUJCUTRrV05EZ1FZUUpGUzVrMk5EaFE0Z1JKZEtMQUFBNwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiLy5naXRpZ25vcmUKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmIvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9hdWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2F1ZGlvLnhtbApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2F1ZGlvLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9hdWRpby54bWwKaW5kZXggZWViOTZiOC4uZDY0Mzg2MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9hdWRpby54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9hdWRpby54bWwKQEAgLTE0LDE3ICsxNCwxNyBAQAogYXVkaW8gZGV2aWNlLgogPC9wYXJhPgogCi08c2VjdGlvbiBpZD0iYXVkaW9fc3RyZWFtX3NvdXJjZV90Ij4KKzxzZWN0aW9uIGlkPSJhdWRpby1zdHJlYW0tc291cmNlLXQiPgogPHRpdGxlPmF1ZGlvX3N0cmVhbV9zb3VyY2VfdDwvdGl0bGU+CiA8cGFyYT5UaGUgYXVkaW8gc3RyZWFtIHNvdXJjZSBpcyBzZXQgdGhyb3VnaCB0aGUgQVVESU9fU0VMRUNUX1NPVVJDRSBjYWxsIGFuZCBjYW4gdGFrZQogdGhlIGZvbGxvd2luZyB2YWx1ZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGFyZSByZXBsYXlpbmcgZnJvbSBhbiBpbnRlcm5hbCAoZGVtdXgpIG9yCiBleHRlcm5hbCAodXNlciB3cml0ZSkgc291cmNlLgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSB7Ci0JIEFVRElPX1NPVVJDRV9ERU1VWCwKLQkgQVVESU9fU09VUkNFX01FTU9SWQotIH0gYXVkaW9fc3RyZWFtX3NvdXJjZV90OwordHlwZWRlZiBlbnVtIHsKKwlBVURJT19TT1VSQ0VfREVNVVgsCisJQVVESU9fU09VUkNFX01FTU9SWQorfSBhdWRpb19zdHJlYW1fc291cmNlX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogPHBhcmE+QVVESU9fU09VUkNFX0RFTVVYIHNlbGVjdHMgdGhlIGRlbXVsdGlwbGV4ZXIgKGZlZCBlaXRoZXIgYnkgdGhlIGZyb250ZW5kIG9yIHRoZQogRFZSIGRldmljZSkgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdmlkZW8gc3RyZWFtLiBJZiBBVURJT19TT1VSQ0VfTUVNT1JZCkBAIC0zMyw2MSArMzMsNjQgQEAKIDwvcGFyYT4KIAogPC9zZWN0aW9uPgotPHNlY3Rpb24gaWQ9ImF1ZGlvX3BsYXlfc3RhdGVfdCI+Cis8c2VjdGlvbiBpZD0iYXVkaW8tcGxheS1zdGF0ZS10Ij4KIDx0aXRsZT5hdWRpb19wbGF5X3N0YXRlX3Q8L3RpdGxlPgogPHBhcmE+VGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBBVURJT19HRVRfU1RBVFVTIGNhbGwgcmVwcmVzZW50aW5nIHRoZQogc3RhdGUgb2YgYXVkaW8gcGxheWJhY2suCiA8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBlbnVtIHsKLQkgQVVESU9fU1RPUFBFRCwKLQkgQVVESU9fUExBWUlORywKLQkgQVVESU9fUEFVU0VECi0gfSBhdWRpb19wbGF5X3N0YXRlX3Q7Cit0eXBlZGVmIGVudW0geworCUFVRElPX1NUT1BQRUQsCisJQVVESU9fUExBWUlORywKKwlBVURJT19QQVVTRUQKK30gYXVkaW9fcGxheV9zdGF0ZV90OwogPC9wcm9ncmFtbGlzdGluZz4KIAogPC9zZWN0aW9uPgotPHNlY3Rpb24gaWQ9ImF1ZGlvX2NoYW5uZWxfc2VsZWN0X3QiPgorPHNlY3Rpb24gaWQ9ImF1ZGlvLWNoYW5uZWwtc2VsZWN0LXQiPgogPHRpdGxlPmF1ZGlvX2NoYW5uZWxfc2VsZWN0X3Q8L3RpdGxlPgogPHBhcmE+VGhlIGF1ZGlvIGNoYW5uZWwgc2VsZWN0ZWQgdmlhIEFVRElPX0NIQU5ORUxfU0VMRUNUIGlzIGRldGVybWluZWQgYnkgdGhlCiBmb2xsb3dpbmcgdmFsdWVzLgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSB7Ci0JIEFVRElPX1NURVJFTywKLQkgQVVESU9fTU9OT19MRUZULAotCSBBVURJT19NT05PX1JJR0hULAotIH0gYXVkaW9fY2hhbm5lbF9zZWxlY3RfdDsKK3R5cGVkZWYgZW51bSB7CisJQVVESU9fU1RFUkVPLAorCUFVRElPX01PTk9fTEVGVCwKKwlBVURJT19NT05PX1JJR0hULAorCUFVRElPX01PTk8sCisJQVVESU9fU1RFUkVPX1NXQVBQRUQKK30gYXVkaW9fY2hhbm5lbF9zZWxlY3RfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKIDwvc2VjdGlvbj4KLTxzZWN0aW9uIGlkPSJzdHJ1Y3RfYXVkaW9fc3RhdHVzIj4KKzxzZWN0aW9uIGlkPSJhdWRpby1zdGF0dXMiPgogPHRpdGxlPnN0cnVjdCBhdWRpb19zdGF0dXM8L3RpdGxlPgogPHBhcmE+VGhlIEFVRElPX0dFVF9TVEFUVVMgY2FsbCByZXR1cm5zIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluZm9ybWluZyBhYm91dCB2YXJpb3VzCiBzdGF0ZXMgb2YgdGhlIHBsYXliYWNrIG9wZXJhdGlvbi4KIDwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdGF0dXMgewotCSBib29sZWFuIEFWX3N5bmNfc3RhdGU7Ci0JIGJvb2xlYW4gbXV0ZV9zdGF0ZTsKLQkgYXVkaW9fcGxheV9zdGF0ZV90IHBsYXlfc3RhdGU7Ci0JIGF1ZGlvX3N0cmVhbV9zb3VyY2VfdCBzdHJlYW1fc291cmNlOwotCSBhdWRpb19jaGFubmVsX3NlbGVjdF90IGNoYW5uZWxfc2VsZWN0OwotCSBib29sZWFuIGJ5cGFzc19tb2RlOwotIH0gYXVkaW9fc3RhdHVzX3Q7Cit0eXBlZGVmIHN0cnVjdCBhdWRpb19zdGF0dXMgeworCWJvb2xlYW4gQVZfc3luY19zdGF0ZTsKKwlib29sZWFuIG11dGVfc3RhdGU7CisJYXVkaW9fcGxheV9zdGF0ZV90IHBsYXlfc3RhdGU7CisJYXVkaW9fc3RyZWFtX3NvdXJjZV90IHN0cmVhbV9zb3VyY2U7CisJYXVkaW9fY2hhbm5lbF9zZWxlY3RfdCBjaGFubmVsX3NlbGVjdDsKKwlib29sZWFuIGJ5cGFzc19tb2RlOworCWF1ZGlvX21peGVyX3QgbWl4ZXJfc3RhdGU7Cit9IGF1ZGlvX3N0YXR1c190OwogPC9wcm9ncmFtbGlzdGluZz4KIAogPC9zZWN0aW9uPgotPHNlY3Rpb24gaWQ9InN0cnVjdF9hdWRpb19taXhlciI+Cis8c2VjdGlvbiBpZD0iYXVkaW8tbWl4ZXIiPgogPHRpdGxlPnN0cnVjdCBhdWRpb19taXhlcjwvdGl0bGU+CiA8cGFyYT5UaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IHRoZSBBVURJT19TRVRfTUlYRVIgY2FsbCB0byBzZXQgdGhlIGF1ZGlvCiB2b2x1bWUuCiA8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBzdHJ1Y3QgYXVkaW9fbWl4ZXIgewotCSB1bnNpZ25lZCBpbnQgdm9sdW1lX2xlZnQ7Ci0JIHVuc2lnbmVkIGludCB2b2x1bWVfcmlnaHQ7Ci0gfSBhdWRpb19taXhlcl90OwordHlwZWRlZiBzdHJ1Y3QgYXVkaW9fbWl4ZXIgeworCXVuc2lnbmVkIGludCB2b2x1bWVfbGVmdDsKKwl1bnNpZ25lZCBpbnQgdm9sdW1lX3JpZ2h0OworfSBhdWRpb19taXhlcl90OwogPC9wcm9ncmFtbGlzdGluZz4KIAogPC9zZWN0aW9uPgpAQCAtMTA5LDE3ICsxMTIsMTcgQEAKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKIDwvc2VjdGlvbj4KLTxzZWN0aW9uIGlkPSJzdHJ1Y3RfYXVkaW9fa2FyYW9rZSI+Cis8c2VjdGlvbiBpZD0iYXVkaW8ta2FyYW9rZSI+CiA8dGl0bGU+c3RydWN0IGF1ZGlvX2thcmFva2U8L3RpdGxlPgogPHBhcmE+VGhlIGlvY3RsIEFVRElPX1NFVF9LQVJBT0tFIHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiA8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZgotIHN0cnVjdCBhdWRpb19rYXJhb2tlewotCSBpbnQgdm9jYWwxOwotCSBpbnQgdm9jYWwyOwotCSBpbnQgbWVsb2R5OwotIH0gYXVkaW9fa2FyYW9rZV90OwordHlwZWRlZgorc3RydWN0IGF1ZGlvX2thcmFva2UgeworCWludCB2b2NhbDE7CisJaW50IHZvY2FsMjsKKwlpbnQgbWVsb2R5OworfSBhdWRpb19rYXJhb2tlX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogPHBhcmE+SWYgVm9jYWwxIG9yIFZvY2FsMiBhcmUgbm9uLXplcm8sIHRoZXkgZ2V0IG1peGVkIGludG8gbGVmdCBhbmQgcmlnaHQgdCBhdCA3MCUgZWFjaC4gSWYgYm90aCwKIFZvY2FsMSBhbmQgVm9jYWwyIGFyZSBub24temVybywgVm9jYWwxIGdldHMgbWl4ZWQgaW50byB0aGUgbGVmdCBjaGFubmVsIGFuZCBWb2NhbDIgaW50byB0aGUKQEAgLTEyOCw3ICsxMzEsNyBAQAogPC9wYXJhPgogCiA8L3NlY3Rpb24+Ci08c2VjdGlvbiBpZD0iYXVkaW9fYXR0cmlidXRlcyI+Cis8c2VjdGlvbiBpZD0iYXVkaW8tYXR0cmlidXRlcy10Ij4KIDx0aXRsZT5hdWRpbyBhdHRyaWJ1dGVzPC90aXRsZT4KIDxwYXJhPlRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBjYW4gYmUgc2V0IGJ5IGEgY2FsbCB0byBBVURJT19TRVRfQVRUUklCVVRFUzoKIDwvcGFyYT4KQEAgLTIxNyw4ICsyMjAsNyBAQAogPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FTk9ERVY8L3BhcmE+CkBAIC0yMjgsMTMgKzIzMCw2IEBACiA8L2VudHJ5PgogIDwvcm93Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUJVU1k8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTI3Niw4ICsyNzEsNyBAQAogPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FQkFERjwvcGFyYT4KQEAgLTMzMiw4ICszMjYsNyBAQAogPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FUEVSTTwvcGFyYT4KQEAgLTM1OCw3ICszNTEsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NUT1AiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU1RPUDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMzkxLDI1ICszODQsOSBAQAogPHBhcmE+RXF1YWxzIEFVRElPX1NUT1AgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1BMQVkiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fUExBWTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNDQzLDI1ICs0MjAsOSBAQAogPHBhcmE+RXF1YWxzIEFVRElPX1BMQVkgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1BBVVNFIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1BBVVNFPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC01MDMsMjUgKzQ2NCw0OSBAQAogPHBhcmE+RXF1YWxzIEFVRElPX1BBVVNFIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUworJnJldHVybi12YWx1ZS1kdmI7CisKKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iQVVESU9fQ09OVElOVUUiCityb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fQ09OVElOVUU8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Cis8cGFyYT5UaGlzIGlvY3RsIHJlc3RhcnRzIHRoZSBkZWNvZGluZyBhbmQgcGxheWluZyBwcm9jZXNzIHByZXZpb3VzbHkgcGF1c2VkCit3aXRoIEFVRElPX1BBVVNFIGNvbW1hbmQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgorPHBhcmE+SXQgb25seSB3b3JrcyBpZiB0aGUgc3RyZWFtIHdlcmUgcHJldmlvdXNseSBzdG9wcGVkIHdpdGggQVVESU9fUEFVU0U8L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSBBVURJT19DT05USU5VRSk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGZkPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IHJlcXVlc3Q8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyBBVURJT19DT05USU5VRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFTEVDVF9TT1VSQ0UiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VMRUNUX1NPVVJDRTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNTY3LDMyICs1NTIsOSBAQAogIHN0cmVhbS48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJBVURJT19TRVRfTVVURSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfTVVURTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNjQ2LDMyICs2MDgsOSBAQAogPHBhcmE+RkFMU0UgQXVkaW8gVW4tbXV0ZTwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9BVl9TWU5DIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9BVl9TWU5DPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC03MjUsMzIgKzY2NCw5IEBACiA8cGFyYT5GQUxTRSBBVi1zeW5jIE9GRjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9CWVBBU1NfTU9ERSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfQllQQVNTX01PREU8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTgwOCwzMiArNzI0LDkgQEAKIDxwYXJhPkZBTFNFIEJ5cGFzcyBpcyBlbmFibGVkPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SWxsZWdhbCBpbnB1dCBwYXJhbWV0ZXIuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iQVVESU9fQ0hBTk5FTF9TRUxFQ1QiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fQ0hBTk5FTF9TRUxFQ1Q8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTg3NywzMiArNzcwLDkgQEAKICBzdGVyZW8pLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPklsbGVnYWwgaW5wdXQgcGFyYW1ldGVyIGNoLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX0dFVF9TVEFUVVMiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fR0VUX1NUQVRVUzwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtOTQ1LDMyICs4MTUsOSBAQAogPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBBdWRpbyBEZXZpY2UuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iQVVESU9fR0VUX0NBUEFCSUxJVElFUyIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19HRVRfQ0FQQUJJTElUSUVTPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xMDEzLDMyICs4NjAsOSBAQAogPHBhcmE+UmV0dXJucyBhIGJpdCBhcnJheSBvZiBzdXBwb3J0ZWQgc291bmQgZm9ybWF0cy48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5jYXAgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJBVURJT19DTEVBUl9CVUZGRVIiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fQ0xFQVJfQlVGRkVSPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xMDcyLDI1ICs4OTYsOSBAQAogPHBhcmE+RXF1YWxzIEFVRElPX0NMRUFSX0JVRkZFUiBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9JRCIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfSUQ8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTExMzYsMzIgKzk0NCw5IEBACiA8cGFyYT5hdWRpbyBzdWItc3RyZWFtIGlkPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW52YWxpZCBzdWItc3RyZWFtIGlkLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9NSVhFUiIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfTUlYRVI8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTEyMDIsMzIgKzk4Nyw5IEBACiA8cGFyYT5taXhlciBzZXR0aW5ncy48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5taXggcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJBVURJT19TRVRfU1RSRUFNVFlQRSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5BVURJT19TRVRfU1RSRUFNVFlQRTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTI3MCwxNyArMTAzMiw5IEBACiA8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUlOVkFMPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xMjg4LDcgKzEwNDIsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9FWFRfSUQiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX0VYVF9JRDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTMzMCwxNyArMTA4NCw5IEBACiA8cGFyYT5hdWRpbyBzdWJfc3RyZWFtX2lkPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTEzNDgsNyArMTA5NCw3IEBACiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iQVVESU9fU0VUX0FUVFJJQlVURVMiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+QVVESU9fU0VUX0FUVFJJQlVURVM8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTEzOTEsMTcgKzExMzcsOSBAQAogPHBhcmE+YXVkaW8gYXR0cmlidXRlcyBhY2NvcmRpbmcgdG8gc2VjdGlvbiA/PzwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUlOVkFMPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xNDA5LDcgKzExNDcsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IkFVRElPX1NFVF9LQVJBT0tFIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPkFVRElPX1NFVF9LQVJBT0tFPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNDIyLDcgKzExNjAsNyBAQAogPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX1NUUkVBTVRZUEUsCis8cGFyYT5pbnQgaW9jdGwoZmQsIGludCByZXF1ZXN0ID0gQVVESU9fU0VUX0tBUkFPS0UsCiAgYXVkaW9fa2FyYW9rZV90ICYjeDIyQzY7a2FyYW9rZSk7PC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KQEAgLTE0NDAsNyArMTE3OCw3IEBACiA8cGFyYT5pbnQgcmVxdWVzdDwvcGFyYT4KIDwvZW50cnk+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RXF1YWxzIEFVRElPX1NFVF9TVFJFQU1UWVBFIGZvciB0aGlzCis8cGFyYT5FcXVhbHMgQVVESU9fU0VUX0tBUkFPS0UgZm9yIHRoaXMKICBjb21tYW5kLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PHJvdz48ZW50cnkKQEAgLTE0NTIsMTcgKzExOTAsOSBAQAogPHBhcmE+a2FyYW9rZSBzZXR0aW5ncyBhY2NvcmRpbmcgdG8gc2VjdGlvbiA/Py48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVJTlZBTDwvcGFyYT4KIDwvZW50cnk+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2NhLnhtbApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2NhLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9jYS54bWwKaW5kZXggYjFmMWQyZi4uNWM0YWRiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9jYS54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9jYS54bWwKQEAgLTgsNzUgKzgsODUgQEAKIDx0aXRsZT5DQSBEYXRhIFR5cGVzPC90aXRsZT4KIAogCi08c2VjdGlvbiBpZD0iY2Ffc2xvdF9pbmZvX3QiPgorPHNlY3Rpb24gaWQ9ImNhLXNsb3QtaW5mbyI+CiA8dGl0bGU+Y2Ffc2xvdF9pbmZvX3Q8L3RpdGxlPgogIDxwcm9ncmFtbGlzdGluZz4KLSAvJiN4MjJDNjsgc2xvdCBpbnRlcmZhY2UgdHlwZXMgYW5kIGluZm8gJiN4MjJDNjsvCit0eXBlZGVmIHN0cnVjdCBjYV9zbG90X2luZm8geworCWludCBudW07ICAgICAgICAgICAgICAgLyYjeDIyQzY7IHNsb3QgbnVtYmVyICYjeDIyQzY7LwogCi0gdHlwZWRlZiBzdHJ1Y3QgY2Ffc2xvdF9pbmZvX3MgewotCSBpbnQgbnVtOyAgICAgICAgICAgICAgIC8mI3gyMkM2OyBzbG90IG51bWJlciAmI3gyMkM2Oy8KKwlpbnQgdHlwZTsgICAgICAgICAgICAgIC8mI3gyMkM2OyBDQSBpbnRlcmZhY2UgdGhpcyBzbG90IHN1cHBvcnRzICYjeDIyQzY7LworI2RlZmluZSBDQV9DSSAgICAgICAgICAgIDEgICAgIC8mI3gyMkM2OyBDSSBoaWdoIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyNkZWZpbmUgQ0FfQ0lfTElOSyAgICAgICAyICAgICAvJiN4MjJDNjsgQ0kgbGluayBsYXllciBsZXZlbCBpbnRlcmZhY2UgJiN4MjJDNjsvCisjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgICAgLyYjeDIyQzY7IENJIHBoeXNpY2FsIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KKyNkZWZpbmUgQ0FfREVTQ1IgICAgICAgICA4ICAgICAvJiN4MjJDNjsgYnVpbHQtaW4gZGVzY3JhbWJsZXIgJiN4MjJDNjsvCisjZGVmaW5lIENBX1NDICAgICAgICAgIDEyOCAgICAgLyYjeDIyQzY7IHNpbXBsZSBzbWFydCBjYXJkIGludGVyZmFjZSAmI3gyMkM2Oy8KIAotCSBpbnQgdHlwZTsgICAgICAgICAgIC8mI3gyMkM2OyBDQSBpbnRlcmZhY2UgdGhpcyBzbG90IHN1cHBvcnRzICYjeDIyQzY7LwotICNkZWZpbmUgQ0FfQ0kgICAgICAgICAgICAxICAvJiN4MjJDNjsgQ0kgaGlnaCBsZXZlbCBpbnRlcmZhY2UgJiN4MjJDNjsvCi0gI2RlZmluZSBDQV9DSV9MSU5LICAgICAgIDIgIC8mI3gyMkM2OyBDSSBsaW5rIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KLSAjZGVmaW5lIENBX0NJX1BIWVMgICAgICAgNCAgLyYjeDIyQzY7IENJIHBoeXNpY2FsIGxheWVyIGxldmVsIGludGVyZmFjZSAmI3gyMkM2Oy8KLSAjZGVmaW5lIENBX1NDICAgICAgICAgIDEyOCAgLyYjeDIyQzY7IHNpbXBsZSBzbWFydCBjYXJkIGludGVyZmFjZSAmI3gyMkM2Oy8KLQotCSB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0gI2RlZmluZSBDQV9DSV9NT0RVTEVfUFJFU0VOVCAxIC8mI3gyMkM2OyBtb2R1bGUgKG9yIGNhcmQpIGluc2VydGVkICYjeDIyQzY7LwotICNkZWZpbmUgQ0FfQ0lfTU9EVUxFX1JFQURZICAgMgotIH0gY2Ffc2xvdF9pbmZvX3Q7CisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBDQV9DSV9NT0RVTEVfUFJFU0VOVCAxIC8mI3gyMkM2OyBtb2R1bGUgKG9yIGNhcmQpIGluc2VydGVkICYjeDIyQzY7LworI2RlZmluZSBDQV9DSV9NT0RVTEVfUkVBRFkgICAyCit9IGNhX3Nsb3RfaW5mb190OwogPC9wcm9ncmFtbGlzdGluZz4KIAogPC9zZWN0aW9uPgotPHNlY3Rpb24gaWQ9ImNhX2Rlc2NyX2luZm9fdCI+Cis8c2VjdGlvbiBpZD0iY2EtZGVzY3ItaW5mbyI+CiA8dGl0bGU+Y2FfZGVzY3JfaW5mb190PC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBzdHJ1Y3QgY2FfZGVzY3JfaW5mb19zIHsKLQkgdW5zaWduZWQgaW50IG51bTsgIC8mI3gyMkM2OyBudW1iZXIgb2YgYXZhaWxhYmxlIGRlc2NyYW1ibGVycyAoa2V5cykgJiN4MjJDNjsvCi0JIHVuc2lnbmVkIGludCB0eXBlOyAvJiN4MjJDNjsgdHlwZSBvZiBzdXBwb3J0ZWQgc2NyYW1ibGluZyBzeXN0ZW0gJiN4MjJDNjsvCi0gI2RlZmluZSBDQV9FQ0QgICAgICAgICAgIDEKLSAjZGVmaW5lIENBX05EUyAgICAgICAgICAgMgotICNkZWZpbmUgQ0FfRFNTICAgICAgICAgICA0Ci0gfSBjYV9kZXNjcl9pbmZvX3Q7Cis8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbnVtOyAgLyYjeDIyQzY7IG51bWJlciBvZiBhdmFpbGFibGUgZGVzY3JhbWJsZXJzIChrZXlzKSAmI3gyMkM2Oy8KKwl1bnNpZ25lZCBpbnQgdHlwZTsgLyYjeDIyQzY7IHR5cGUgb2Ygc3VwcG9ydGVkIHNjcmFtYmxpbmcgc3lzdGVtICYjeDIyQzY7LworI2RlZmluZSBDQV9FQ0QgICAgICAgICAgIDEKKyNkZWZpbmUgQ0FfTkRTICAgICAgICAgICAyCisjZGVmaW5lIENBX0RTUyAgICAgICAgICAgNAorfSBjYV9kZXNjcl9pbmZvX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogCiA8L3NlY3Rpb24+Ci08c2VjdGlvbiBpZD0iY2FfY2FwX3QiPgotPHRpdGxlPmNhX2NhcF90PC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBzdHJ1Y3QgY2FfY2FwX3MgewotCSB1bnNpZ25lZCBpbnQgc2xvdF9udW07ICAvJiN4MjJDNjsgdG90YWwgbnVtYmVyIG9mIENBIGNhcmQgYW5kIG1vZHVsZSBzbG90cyAmI3gyMkM2Oy8KLQkgdW5zaWduZWQgaW50IHNsb3RfdHlwZTsgLyYjeDIyQzY7IE9SIG9mIGFsbCBzdXBwb3J0ZWQgdHlwZXMgJiN4MjJDNjsvCi0JIHVuc2lnbmVkIGludCBkZXNjcl9udW07IC8mI3gyMkM2OyB0b3RhbCBudW1iZXIgb2YgZGVzY3JhbWJsZXIgc2xvdHMgKGtleXMpICYjeDIyQzY7LwotCSB1bnNpZ25lZCBpbnQgZGVzY3JfdHlwZTsvJiN4MjJDNjsgT1Igb2YgYWxsIHN1cHBvcnRlZCB0eXBlcyAmI3gyMkM2Oy8KKzxzZWN0aW9uIGlkPSJjYS1jYXBzIj4KKzx0aXRsZT5jYV9jYXBzX3Q8L3RpdGxlPgorPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBzdHJ1Y3QgY2FfY2FwcyB7CisJdW5zaWduZWQgaW50IHNsb3RfbnVtOyAgLyYjeDIyQzY7IHRvdGFsIG51bWJlciBvZiBDQSBjYXJkIGFuZCBtb2R1bGUgc2xvdHMgJiN4MjJDNjsvCisJdW5zaWduZWQgaW50IHNsb3RfdHlwZTsgLyYjeDIyQzY7IE9SIG9mIGFsbCBzdXBwb3J0ZWQgdHlwZXMgJiN4MjJDNjsvCisJdW5zaWduZWQgaW50IGRlc2NyX251bTsgLyYjeDIyQzY7IHRvdGFsIG51bWJlciBvZiBkZXNjcmFtYmxlciBzbG90cyAoa2V5cykgJiN4MjJDNjsvCisJdW5zaWduZWQgaW50IGRlc2NyX3R5cGU7LyYjeDIyQzY7IE9SIG9mIGFsbCBzdXBwb3J0ZWQgdHlwZXMgJiN4MjJDNjsvCiAgfSBjYV9jYXBfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKIDwvc2VjdGlvbj4KLTxzZWN0aW9uIGlkPSJjYV9tc2dfdCI+Cis8c2VjdGlvbiBpZD0iY2EtbXNnIj4KIDx0aXRsZT5jYV9tc2dfdDwvdGl0bGU+Ci0gPHByb2dyYW1saXN0aW5nPgotIC8mI3gyMkM2OyBhIG1lc3NhZ2UgdG8vZnJvbSBhIENJLUNBTSAmI3gyMkM2Oy8KLSB0eXBlZGVmIHN0cnVjdCBjYV9tc2dfcyB7Ci0JIHVuc2lnbmVkIGludCBpbmRleDsKLQkgdW5zaWduZWQgaW50IHR5cGU7Ci0JIHVuc2lnbmVkIGludCBsZW5ndGg7Ci0JIHVuc2lnbmVkIGNoYXIgbXNnWzI1Nl07Ci0gfSBjYV9tc2dfdDsKKzxwcm9ncmFtbGlzdGluZz4KKy8mI3gyMkM2OyBhIG1lc3NhZ2UgdG8vZnJvbSBhIENJLUNBTSAmI3gyMkM2Oy8KK3R5cGVkZWYgc3RydWN0IGNhX21zZyB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgY2hhciBtc2dbMjU2XTsKK30gY2FfbXNnX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogCiA8L3NlY3Rpb24+Ci08c2VjdGlvbiBpZD0iY2FfZGVzY3JfdCI+Cis8c2VjdGlvbiBpZD0iY2EtZGVzY3IiPgogPHRpdGxlPmNhX2Rlc2NyX3Q8L3RpdGxlPgotIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIHN0cnVjdCBjYV9kZXNjcl9zIHsKLQkgdW5zaWduZWQgaW50IGluZGV4OwotCSB1bnNpZ25lZCBpbnQgcGFyaXR5OwotCSB1bnNpZ25lZCBjaGFyIGN3WzhdOwotIH0gY2FfZGVzY3JfdDsKKzxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgc3RydWN0IGNhX2Rlc2NyIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHBhcml0eTsKKwl1bnNpZ25lZCBjaGFyIGN3WzhdOworfSBjYV9kZXNjcl90OwogPC9wcm9ncmFtbGlzdGluZz4KLSA8L3NlY3Rpb24+PC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iY2EtcGlkIj4KKzx0aXRsZT5jYS1waWQ8L3RpdGxlPgorPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBzdHJ1Y3QgY2FfcGlkIHsKKwl1bnNpZ25lZCBpbnQgcGlkOworCWludCBpbmRleDsJCS8mI3gyMkM2OyAtMSA9PSBkaXNhYmxlJiN4MjJDNjsvCit9IGNhX3BpZF90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj48L3NlY3Rpb24+CisKIDxzZWN0aW9uIGlkPSJjYV9mdW5jdGlvbl9jYWxscyI+CiA8dGl0bGU+Q0EgRnVuY3Rpb24gQ2FsbHM8L3RpdGxlPgogCkBAIC0xNDgsOCArMTU4LDcgQEAKIDxwYXJhPihibG9ja2luZyBtb2RlIGlzIHRoZSBkZWZhdWx0KTwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKzxwYXJhPlJFVFVSTiBWQUxVRTwvcGFyYT4KIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgogPHBhcmE+RU5PREVWPC9wYXJhPgpAQCAtMjA3LDggKzIxNiw3IEBACiA8cGFyYT5GaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIG9wZW4oKS48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Cis8cGFyYT5SRVRVUk4gVkFMVUU8L3BhcmE+CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVCQURGPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kZW11eC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2RlbXV4LnhtbApzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2RlbXV4LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9kZW11eC54bWwKaW5kZXggMWI4YzRlOS4uMzdjMTc5MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kZW11eC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9kZW11eC54bWwKQEAgLTcsMTUgKzcsMTkgQEAKIDxzZWN0aW9uIGlkPSJkbXhfdHlwZXMiPgogPHRpdGxlPkRlbXV4IERhdGEgVHlwZXM8L3RpdGxlPgogCi08c2VjdGlvbiBpZD0iZG14X291dHB1dF90Ij4KKzxzZWN0aW9uIGlkPSJkbXgtb3V0cHV0LXQiPgogPHRpdGxlPmRteF9vdXRwdXRfdDwvdGl0bGU+Ci0gPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bQotIHsKLQkgRE1YX09VVF9ERUNPREVSLAotCSBETVhfT1VUX1RBUCwKLQkgRE1YX09VVF9UU19UQVAKLSB9IGRteF9vdXRwdXRfdDsKKzxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bQoreworCURNWF9PVVRfREVDT0RFUiwgLyYjeDIyQzY7IFN0cmVhbWluZyBkaXJlY3RseSB0byBkZWNvZGVyLiAmI3gyMkM2Oy8KKwlETVhfT1VUX1RBUCwgICAgIC8mI3gyMkM2OyBPdXRwdXQgZ29pbmcgdG8gYSBtZW1vcnkgYnVmZmVyICYjeDIyQzY7LworCQkJIC8mI3gyMkM2OyAodG8gYmUgcmV0cmlldmVkIHZpYSB0aGUgcmVhZCBjb21tYW5kKS4mI3gyMkM2Oy8KKwlETVhfT1VUX1RTX1RBUCwgIC8mI3gyMkM2OyBPdXRwdXQgbXVsdGlwbGV4ZWQgaW50byBhIG5ldyBUUyAgJiN4MjJDNjsvCisJCQkgLyYjeDIyQzY7ICh0byBiZSByZXRyaWV2ZWQgYnkgcmVhZGluZyBmcm9tIHRoZSAmI3gyMkM2Oy8KKwkJCSAvJiN4MjJDNjsgbG9naWNhbCBEVlIgZGV2aWNlKS4gICAgICAgICAgICAgICAgICYjeDIyQzY7LworCURNWF9PVVRfVFNERU1VWF9UQVAgLyYjeDIyQzY7IExpa2UgVFNfVEFQIGJ1dCByZXRyaWV2ZWQgZnJvbSB0aGUgRE1YIGRldmljZSAmI3gyMkM2Oy8KK30gZG14X291dHB1dF90OwogPC9wcm9ncmFtbGlzdGluZz4KIDxwYXJhPjxlbXBoYXNpcyByb2xlPSJ0dCI+RE1YX09VVF9UQVA8L2VtcGhhc2lzPiBkZWxpdmVycyB0aGUgc3RyZWFtIG91dHB1dCB0byB0aGUgZGVtdXggZGV2aWNlIG9uIHdoaWNoIHRoZSBpb2N0bCBpcwogY2FsbGVkLgpAQCAtMjYsOTYgKzMwLDk1IEBACiA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJkbXhfaW5wdXRfdCI+Cis8c2VjdGlvbiBpZD0iZG14LWlucHV0LXQiPgogPHRpdGxlPmRteF9pbnB1dF90PC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBlbnVtCi0gewotCSBETVhfSU5fRlJPTlRFTkQsCi0JIERNWF9JTl9EVlIKLSB9IGRteF9pbnB1dF90OworPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBlbnVtCit7CisJRE1YX0lOX0ZST05URU5ELCAvJiN4MjJDNjsgSW5wdXQgZnJvbSBhIGZyb250LWVuZCBkZXZpY2UuICAmI3gyMkM2Oy8KKwlETVhfSU5fRFZSICAgICAgIC8mI3gyMkM2OyBJbnB1dCBmcm9tIHRoZSBsb2dpY2FsIERWUiBkZXZpY2UuICAmI3gyMkM2Oy8KK30gZG14X2lucHV0X3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZG14X3Blc190eXBlX3QiPgorPHNlY3Rpb24gaWQ9ImRteC1wZXMtdHlwZS10Ij4KIDx0aXRsZT5kbXhfcGVzX3R5cGVfdDwvdGl0bGU+Ci0gPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bQotIHsKLQkgRE1YX1BFU19BVURJTywKLQkgRE1YX1BFU19WSURFTywKLQkgRE1YX1BFU19URUxFVEVYVCwKLQkgRE1YX1BFU19TVUJUSVRMRSwKLQkgRE1YX1BFU19QQ1IsCi0JIERNWF9QRVNfT1RIRVIKLSB9IGRteF9wZXNfdHlwZV90OworPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBlbnVtCit7CisJRE1YX1BFU19BVURJTzAsCisJRE1YX1BFU19WSURFTzAsCisJRE1YX1BFU19URUxFVEVYVDAsCisJRE1YX1BFU19TVUJUSVRMRTAsCisJRE1YX1BFU19QQ1IwLAorCisJRE1YX1BFU19BVURJTzEsCisJRE1YX1BFU19WSURFTzEsCisJRE1YX1BFU19URUxFVEVYVDEsCisJRE1YX1BFU19TVUJUSVRMRTEsCisJRE1YX1BFU19QQ1IxLAorCisJRE1YX1BFU19BVURJTzIsCisJRE1YX1BFU19WSURFTzIsCisJRE1YX1BFU19URUxFVEVYVDIsCisJRE1YX1BFU19TVUJUSVRMRTIsCisJRE1YX1BFU19QQ1IyLAorCisJRE1YX1BFU19BVURJTzMsCisJRE1YX1BFU19WSURFTzMsCisJRE1YX1BFU19URUxFVEVYVDMsCisJRE1YX1BFU19TVUJUSVRMRTMsCisJRE1YX1BFU19QQ1IzLAorCisJRE1YX1BFU19PVEhFUgorfSBkbXhfcGVzX3R5cGVfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJkbXhfZXZlbnRfdCI+Ci08dGl0bGU+ZG14X2V2ZW50X3Q8L3RpdGxlPgotIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIGVudW0KLSB7Ci0JIERNWF9TQ1JBTUJMSU5HX0VWLAotCSBETVhfRlJPTlRFTkRfRVYKLSB9IGRteF9ldmVudF90OwotPC9wcm9ncmFtbGlzdGluZz4KLTwvc2VjdGlvbj4KLQotPHNlY3Rpb24gaWQ9ImRteF9zY3JhbWJsaW5nX3N0YXR1c190Ij4KLTx0aXRsZT5kbXhfc2NyYW1ibGluZ19zdGF0dXNfdDwvdGl0bGU+Ci0gPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bQotIHsKLQkgRE1YX1NDUkFNQkxJTkdfT0ZGLAotCSBETVhfU0NSQU1CTElOR19PTgotIH0gZG14X3NjcmFtYmxpbmdfc3RhdHVzX3Q7Ci08L3Byb2dyYW1saXN0aW5nPgotPC9zZWN0aW9uPgotCi08c2VjdGlvbiBpZD0iZG14X2ZpbHRlciI+Cis8c2VjdGlvbiBpZD0iZG14LWZpbHRlciI+CiA8dGl0bGU+c3RydWN0IGRteF9maWx0ZXI8L3RpdGxlPgogIDxwcm9ncmFtbGlzdGluZz4KICB0eXBlZGVmIHN0cnVjdCBkbXhfZmlsdGVyCi0gewotCSB1aW50OF90ICAgICAgICAgZmlsdGVyW0RNWF9GSUxURVJfU0laRV07Ci0JIHVpbnQ4X3QgICAgICAgICBtYXNrW0RNWF9GSUxURVJfU0laRV07Ci0gfSBkbXhfZmlsdGVyX3Q7Cit7CisJX191OCAgZmlsdGVyW0RNWF9GSUxURVJfU0laRV07CisJX191OCAgbWFza1tETVhfRklMVEVSX1NJWkVdOworCV9fdTggIG1vZGVbRE1YX0ZJTFRFUl9TSVpFXTsKK30gZG14X2ZpbHRlcl90OwogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImRteF9zY3RfZmlsdGVyX3BhcmFtcyI+Cis8c2VjdGlvbiBpZD0iZG14LXNjdC1maWx0ZXItcGFyYW1zIj4KIDx0aXRsZT5zdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zPC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gc3RydWN0IGRteF9zY3RfZmlsdGVyX3BhcmFtcwotIHsKLQkgdWludDE2X3QgICAgICAgICAgICBwaWQ7Ci0JIGRteF9maWx0ZXJfdCAgICAgICAgZmlsdGVyOwotCSB1aW50MzJfdCAgICAgICAgICAgIHRpbWVvdXQ7Ci0JIHVpbnQzMl90ICAgICAgICAgICAgZmxhZ3M7Ci0gI2RlZmluZSBETVhfQ0hFQ0tfQ1JDICAgICAgIDEKLSAjZGVmaW5lIERNWF9PTkVTSE9UICAgICAgICAgMgotICNkZWZpbmUgRE1YX0lNTUVESUFURV9TVEFSVCA0Ci0gfTsKKzxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMKK3sKKwlfX3UxNiAgICAgICAgICBwaWQ7CisJZG14X2ZpbHRlcl90ICAgZmlsdGVyOworCV9fdTMyICAgICAgICAgIHRpbWVvdXQ7CisJX191MzIgICAgICAgICAgZmxhZ3M7CisjZGVmaW5lIERNWF9DSEVDS19DUkMgICAgICAgMQorI2RlZmluZSBETVhfT05FU0hPVCAgICAgICAgIDIKKyNkZWZpbmUgRE1YX0lNTUVESUFURV9TVEFSVCA0CisjZGVmaW5lIERNWF9LRVJORUxfQ0xJRU5UICAgMHg4MDAwCit9OwogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImRteF9wZXNfZmlsdGVyX3BhcmFtcyI+Cis8c2VjdGlvbiBpZD0iZG14LXBlcy1maWx0ZXItcGFyYW1zIj4KIDx0aXRsZT5zdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zPC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gc3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtcwotIHsKLQkgdWludDE2X3QgICAgICAgICAgICBwaWQ7Ci0JIGRteF9pbnB1dF90ICAgICAgICAgaW5wdXQ7Ci0JIGRteF9vdXRwdXRfdCAgICAgICAgb3V0cHV0OwotCSBkbXhfcGVzX3R5cGVfdCAgICAgIHBlc190eXBlOwotCSB1aW50MzJfdCAgICAgICAgICAgIGZsYWdzOwotIH07Cis8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zCit7CisJX191MTYgICAgICAgICAgcGlkOworCWRteF9pbnB1dF90ICAgIGlucHV0OworCWRteF9vdXRwdXRfdCAgIG91dHB1dDsKKwlkbXhfcGVzX3R5cGVfdCBwZXNfdHlwZTsKKwlfX3UzMiAgICAgICAgICBmbGFnczsKK307CiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZG14X2V2ZW50Ij4KKzxzZWN0aW9uIGlkPSJkbXgtZXZlbnQiPgogPHRpdGxlPnN0cnVjdCBkbXhfZXZlbnQ8L3RpdGxlPgogIDxwcm9ncmFtbGlzdGluZz4KICBzdHJ1Y3QgZG14X2V2ZW50CkBAIC0xMzAsMTkgKzEzMyw0NCBAQAogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImRteF9zdGMiPgorPHNlY3Rpb24gaWQ9ImRteC1zdGMiPgogPHRpdGxlPnN0cnVjdCBkbXhfc3RjPC90aXRsZT4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gc3RydWN0IGRteF9zdGMgewotCSB1bnNpZ25lZCBpbnQgbnVtOyAgICAgICAvJiN4MjJDNjsgaW5wdXQgOiB3aGljaCBTVEM/IDAuLk4gJiN4MjJDNjsvCi0JIHVuc2lnbmVkIGludCBiYXNlOyAgICAgIC8mI3gyMkM2OyBvdXRwdXQ6IGRpdmlzb3IgZm9yIHN0YyB0byBnZXQgOTAga0h6IGNsb2NrICYjeDIyQzY7LwotCSB1aW50NjRfdCBzdGM7ICAgICAgICAgICAvJiN4MjJDNjsgb3V0cHV0OiBzdGMgaW4gJ2Jhc2UnJiN4MjJDNjs5MCBrSHogdW5pdHMgJiN4MjJDNjsvCi0gfTsKKzxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBkbXhfc3RjIHsKKwl1bnNpZ25lZCBpbnQgbnVtOwkvJiN4MjJDNjsgaW5wdXQgOiB3aGljaCBTVEM/IDAuLk4gJiN4MjJDNjsvCisJdW5zaWduZWQgaW50IGJhc2U7CS8mI3gyMkM2OyBvdXRwdXQ6IGRpdmlzb3IgZm9yIHN0YyB0byBnZXQgOTAga0h6IGNsb2NrICYjeDIyQzY7LworCV9fdTY0IHN0YzsJCS8mI3gyMkM2OyBvdXRwdXQ6IHN0YyBpbiAnYmFzZScmI3gyMkM2OzkwIGtIeiB1bml0cyAmI3gyMkM2Oy8KK307CiA8L3Byb2dyYW1saXN0aW5nPgotIDwvc2VjdGlvbj4KLQogPC9zZWN0aW9uPgogCis8c2VjdGlvbiBpZD0iZG14LWNhcHMiPgorPHRpdGxlPnN0cnVjdCBkbXhfY2FwczwvdGl0bGU+Cis8cHJvZ3JhbWxpc3Rpbmc+CisgdHlwZWRlZiBzdHJ1Y3QgZG14X2NhcHMgeworCV9fdTMyIGNhcHM7CisJaW50IG51bV9kZWNvZGVyczsKK30gZG14X2NhcHNfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJkbXgtc291cmNlLXQiPgorPHRpdGxlPmVudW0gZG14X3NvdXJjZV90PC90aXRsZT4KKzxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSB7CisJRE1YX1NPVVJDRV9GUk9OVDAgPSAwLAorCURNWF9TT1VSQ0VfRlJPTlQxLAorCURNWF9TT1VSQ0VfRlJPTlQyLAorCURNWF9TT1VSQ0VfRlJPTlQzLAorCURNWF9TT1VSQ0VfRFZSMCAgID0gMTYsCisJRE1YX1NPVVJDRV9EVlIxLAorCURNWF9TT1VSQ0VfRFZSMiwKKwlETVhfU09VUkNFX0RWUjMKK30gZG14X3NvdXJjZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworPC9zZWN0aW9uPgogPHNlY3Rpb24gaWQ9ImRteF9mY2FsbHMiPgogPHRpdGxlPkRlbXV4IEZ1bmN0aW9uIENhbGxzPC90aXRsZT4KIApAQCAtMjExLDggKzIzOSw3IEBACiA8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Cis8cGFyYT5SRVRVUk4gVkFMVUU8L3BhcmE+CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVOT0RFVjwvcGFyYT4KQEAgLTI3MSw4ICsyOTgsNyBAQAogPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FQkFERjwvcGFyYT4KQEAgLTM1Myw4ICszNzksNyBAQAogPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KQEAgLTQ1Nyw4ICs0ODIsNyBAQAogPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KQEAgLTQ5MSw3ICs1MTUsNyBAQAogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZG14X3N0YXJ0Ij4KKzxzZWN0aW9uIGlkPSJETVhfU1RBUlQiPgogPHRpdGxlPkRNWF9TVEFSVDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNTI1LDE3ICs1NDksOSBAQAogPHBhcmE+RXF1YWxzIERNWF9TVEFSVCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTU1Niw3ICs1NzIsNyBAQAogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZG14X3N0b3AiPgorPHNlY3Rpb24gaWQ9IkRNWF9TVE9QIj4KIDx0aXRsZT5ETVhfU1RPUDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNTkxLDE5ICs2MDcsMTAgQEAKIDxwYXJhPkVxdWFscyBETVhfU1RPUCBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJkbXhfc2V0X2ZpbHRlciI+Cis8c2VjdGlvbiBpZD0iRE1YX1NFVF9GSUxURVIiPgogPHRpdGxlPkRNWF9TRVRfRklMVEVSPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC02NTQsMjYgKzY2MSwxMCBAQAogPHBhcmE+UG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBmaWx0ZXIgcGFyYW1ldGVycy48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW52YWxpZCBhcmd1bWVudC48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJkbXhfc2V0X3Blc19maWx0ZXIiPgorPHNlY3Rpb24gaWQ9IkRNWF9TRVRfUEVTX0ZJTFRFUiI+CiA8dGl0bGU+RE1YX1NFVF9QRVNfRklMVEVSPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC03MjcsMjQgKzcxOCw5IEBACiA8cGFyYT5Qb2ludGVyIHRvIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbHRlciBwYXJhbWV0ZXJzLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVCVVNZPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC03NTYsNyArNzMyLDcgQEAKICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImRtc19zZXRfYnVmZmVyX3NpemUiPgorPHNlY3Rpb24gaWQ9IkRNWF9TRVRfQlVGRkVSX1NJWkUiPgogPHRpdGxlPkRNWF9TRVRfQlVGRkVSX1NJWkU8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTc5OSwyNyArNzc1LDEwIEBACiA8cGFyYT5TaXplIG9mIGNpcmN1bGFyIGJ1ZmZlci48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVOT01FTTwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+VGhlIGRyaXZlciB3YXMgbm90IGFibGUgdG8gYWxsb2NhdGUgYSBidWZmZXIgb2YgdGhlCi0gcmVxdWVzdGVkIHNpemUuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZG14X2dldF9ldmVudCI+Cis8c2VjdGlvbiBpZD0iRE1YX0dFVF9FVkVOVCI+CiA8dGl0bGU+RE1YX0dFVF9FVkVOVDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtODcyLDI0ICs4MzEsOSBAQAogPHBhcmE+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGV2ZW50IGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5ldiBwb2ludHMgdG8gYW4gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KIDwvZW50cnk+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgpAQCAtODk5LDcgKzg0Myw3IEBACiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJkbXhfZ2V0X3N0YyI+Cis8c2VjdGlvbiBpZD0iRE1YX0dFVF9TVEMiPgogPHRpdGxlPkRNWF9HRVRfU1RDPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC05NDYsMjQgKzg5MCw5IEBACiA8cGFyYT5Qb2ludGVyIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgc3RjIGlzIHRvIGJlIHN0b3JlZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5zdGMgcG9pbnRzIHRvIGFuIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUlOVkFMPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YmFwaS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2R2YmFwaS54bWwKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2R2YmFwaS54bWwKaW5kZXggOWZhZDg2Yy4uMmFiNmRkYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9kdmJhcGkueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmIvZHZiYXBpLnhtbApAQCAtMTE0LDggKzExNCwyOCBAQAogICAgICZzdWItZXhhbXBsZXM7CiAgIDwvY2hhcHRlcj4KIDwhLS0gRU5EIE9GIENIQVBURVJTIC0tPgorICA8YXBwZW5kaXggaWQ9ImF1ZGlvX2giPgorICAgIDx0aXRsZT5EVkIgQXVkaW8gSGVhZGVyIEZpbGU8L3RpdGxlPgorICAgICZzdWItYXVkaW8taDsKKyAgPC9hcHBlbmRpeD4KKyAgPGFwcGVuZGl4IGlkPSJjYV9oIj4KKyAgICA8dGl0bGU+RFZCIENvbmRpdGlvbmFsIEFjY2VzcyBIZWFkZXIgRmlsZTwvdGl0bGU+CisgICAgJnN1Yi1jYS1oOworICA8L2FwcGVuZGl4PgorICA8YXBwZW5kaXggaWQ9ImRteF9oIj4KKyAgICA8dGl0bGU+RFZCIERlbXV4IEhlYWRlciBGaWxlPC90aXRsZT4KKyAgICAmc3ViLWRteC1oOworICA8L2FwcGVuZGl4PgogICA8YXBwZW5kaXggaWQ9ImZyb250ZW5kX2giPgogICAgIDx0aXRsZT5EVkIgRnJvbnRlbmQgSGVhZGVyIEZpbGU8L3RpdGxlPgogICAgICZzdWItZnJvbnRlbmQtaDsKICAgPC9hcHBlbmRpeD4KKyAgPGFwcGVuZGl4IGlkPSJuZXRfaCI+CisgICAgPHRpdGxlPkRWQiBOZXR3b3JrIEhlYWRlciBGaWxlPC90aXRsZT4KKyAgICAmc3ViLW5ldC1oOworICA8L2FwcGVuZGl4PgorICA8YXBwZW5kaXggaWQ9InZpZGVvX2giPgorICAgIDx0aXRsZT5EVkIgVmlkZW8gSGVhZGVyIEZpbGU8L3RpdGxlPgorICAgICZzdWItdmlkZW8taDsKKyAgPC9hcHBlbmRpeD4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9kdmJwcm9wZXJ0eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2R2YnByb3BlcnR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdlMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9kdmJwcm9wZXJ0eS54bWwKQEAgLTAsMCArMSw4NTkgQEAKKzxzZWN0aW9uIGlkPSJGRV9HRVRfU0VUX1BST1BFUlRZIj4KKzx0aXRsZT48Y29uc3RhbnQ+RkVfR0VUX1BST1BFUlRZL0ZFX1NFVF9QUk9QRVJUWTwvY29uc3RhbnQ+PC90aXRsZT4KKzxwYXJhPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIERWQiB2ZXJzaW9uIDUgZXh0ZW50aW9uIG9mIHRoZSBEVkItQVBJLCBhbHNvCitjYWxsZWQgIlMyQVBJIiwgYXMgdGhpcyBBUEkgd2VyZSBhZGRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIERWQi1TMi4gSXQgd2FzCitkZXNpZ25lZCB0byBiZSBhYmxlIHRvIHJlcGxhY2UgdGhlIG9sZCBmcm9udGVuZCBBUEkuIFlldCwgdGhlIERJU0VRQyBhbmQKK3RoZSBjYXBhYmlsaXR5IGlvY3RscyB3ZXJlbid0IGltcGxlbWVudGVkIHlldCB2aWEgdGhlIG5ldyB3YXkuPC9wYXJhPgorPHBhcmE+VGhlIHR5cGljYWwgdXNhZ2UgZm9yIHRoZSA8Y29uc3RhbnQ+RkVfR0VUX1BST1BFUlRZL0ZFX1NFVF9QUk9QRVJUWTwvY29uc3RhbnQ+CitBUEkgaXMgdG8gcmVwbGFjZSB0aGUgaW9jdGwncyB3ZXJlIHRoZSA8bGluayBsaW5rZW5kPSJkdmItZnJvbnRlbmQtcGFyYW1ldGVycyI+CitzdHJ1Y3QgPGNvbnN0YW50PmR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzPC9jb25zdGFudD48L2xpbms+IHdlcmUgdXNlZC48L3BhcmE+Cis8c2VjdGlvbiBpZD0iZHR2LXByb3BlcnR5Ij4KKzx0aXRsZT5EVFYgcHJvcGVydHkgdHlwZTwvdGl0bGU+Cis8cHJvZ3JhbWxpc3Rpbmc+CisvKiBSZXNlcnZlZCBmaWVsZHMgc2hvdWxkIGJlIHNldCB0byAwICovCitzdHJ1Y3QgZHR2X3Byb3BlcnR5IHsKKwlfX3UzMiBjbWQ7CisJdW5pb24geworCQlfX3UzMiBkYXRhOworCQlzdHJ1Y3QgeworCQkJX191OCBkYXRhWzMyXTsKKwkJCV9fdTMyIGxlbjsKKwkJCV9fdTMyIHJlc2VydmVkMVszXTsKKwkJCXZvaWQgKnJlc2VydmVkMjsKKwkJfSBidWZmZXI7CisJfSB1OworCWludCByZXN1bHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogbnVtIG9mIHByb3BlcnRpZXMgY2Fubm90IGV4Y2VlZCBEVFZfSU9DVExfTUFYX01TR1MgcGVyIGlvY3RsICovCisjZGVmaW5lIERUVl9JT0NUTF9NQVhfTVNHUyA2NAorPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkdHYtcHJvcGVydGllcyI+Cis8dGl0bGU+RFRWIHByb3BlcnRpZXMgdHlwZTwvdGl0bGU+Cis8cHJvZ3JhbWxpc3Rpbmc+CitzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgeworCV9fdTMyIG51bTsKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwcm9wczsKK307Cis8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iRkVfR0VUX1BST1BFUlRZIj4KKzx0aXRsZT5GRV9HRVRfUFJPUEVSVFk8L3RpdGxlPgorPHBhcmE+REVTQ1JJUFRJT04KKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+VGhpcyBpb2N0bCBjYWxsIHJldHVybnMgb25lIG9yIG1vcmUgZnJvbnRlbmQgcHJvcGVydGllcy4gVGhpcyBjYWxsIG9ubHkKKyByZXF1aXJlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXZpY2UuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlNZTk9QU0lTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjEiPjx0Ym9keT48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0ID0gPGxpbmsgbGlua2VuZD0iRkVfR0VUX1BST1BFUlRZIj5GRV9HRVRfUFJPUEVSVFk8L2xpbms+LAorIGR0dl9wcm9wZXJ0aWVzICYjeDIyQzY7cHJvcHMpOzwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8cGFyYT5QQVJBTUVURVJTCis8L3BhcmE+Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeSBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgZmQ8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5pbnQgbnVtPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5FcXVhbHMgPGxpbmsgbGlua2VuZD0iRkVfR0VUX1BST1BFUlRZIj5GRV9HRVRfUFJPUEVSVFk8L2xpbms+IGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPnN0cnVjdCBkdHZfcHJvcGVydHkgKnByb3BzPC9wYXJhPgorPC9lbnRyeT48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5Qb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmcm9udC1lbmQgcHJvcGVydHkgY29tbWFuZHMgYXJlIHN0b3JlZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7Cis8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PgorICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkVPUE5PVFNVUFA8L3BhcmE+PC9lbnRyeT4KKyAgPGVudHJ5IGFsaWduPSJjaGFyIj48cGFyYT5Qcm9wZXJ0eSB0eXBlIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPjwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJGRV9TRVRfUFJPUEVSVFkiPgorPHRpdGxlPkZFX1NFVF9QUk9QRVJUWTwvdGl0bGU+Cis8cGFyYT5ERVNDUklQVElPTgorPC9wYXJhPgorPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIxIj48dGJvZHk+PHJvdz48ZW50cnkKKyBhbGlnbj0iY2hhciI+Cis8cGFyYT5UaGlzIGlvY3RsIGNhbGwgc2V0cyBvbmUgb3IgbW9yZSBmcm9udGVuZCBwcm9wZXJ0aWVzLiBUaGlzIGNhbGwgb25seQorIHJlcXVpcmVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldmljZS48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorPHBhcmE+U1lOT1BTSVMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+aW50IGlvY3RsKGludCBmZCwgaW50IHJlcXVlc3QgPSA8bGluayBsaW5rZW5kPSJGRV9TRVRfUFJPUEVSVFkiPkZFX1NFVF9QUk9QRVJUWTwvbGluaz4sCisgZHR2X3Byb3BlcnRpZXMgJiN4MjJDNjtwcm9wcyk7PC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzxwYXJhPlBBUkFNRVRFUlMKKzwvcGFyYT4KKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5IGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBmZDwvcGFyYT4KKzwvZW50cnk+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgorPC9lbnRyeT4KKyA8L3Jvdz48cm93PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPmludCBudW08L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPkVxdWFscyA8bGluayBsaW5rZW5kPSJGRV9TRVRfUFJPUEVSVFkiPkZFX1NFVF9QUk9QRVJUWTwvbGluaz4gZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+Cis8L2VudHJ5PgorIDwvcm93Pjxyb3c+PGVudHJ5CisgYWxpZ249ImNoYXIiPgorPHBhcmE+c3RydWN0IGR0dl9wcm9wZXJ0eSAqcHJvcHM8L3BhcmE+Cis8L2VudHJ5PjxlbnRyeQorIGFsaWduPSJjaGFyIj4KKzxwYXJhPlBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZyb250LWVuZCBwcm9wZXJ0eSBjb21tYW5kcyBhcmUgc3RvcmVkLjwvcGFyYT4KKzwvZW50cnk+CisgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKKzxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+CisgIDxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RU9QTk9UU1VQUDwvcGFyYT48L2VudHJ5PgorICA8ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPlByb3BlcnR5IHR5cGUgbm90IHN1cHBvcnRlZC48L3BhcmE+PC9lbnRyeT4KKyA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24+CisJPHRpdGxlPlByb3BlcnR5IHR5cGVzPC90aXRsZT4KKzxwYXJhPgorT24gPGxpbmsgbGlua2VuZD0iRkVfR0VUX1BST1BFUlRZIj5GRV9HRVRfUFJPUEVSVFk8L2xpbms+LzxsaW5rIGxpbmtlbmQ9IkZFX1NFVF9QUk9QRVJUWSI+RkVfU0VUX1BST1BFUlRZPC9saW5rPiwKK3RoZSBhY3R1YWwgYWN0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGR0dl9wcm9wZXJ0eSBjbWQvZGF0YSBwYWlycy4gV2l0aCBvbmUgc2luZ2xlIGlvY3RsLCBpcyBwb3NzaWJsZSB0bworZ2V0L3NldCB1cCB0byA2NCBwcm9wZXJ0aWVzLiBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaCBwcm9wZXJ0eSBpcyBkZXNjcmliZWQgb24gdGhlIG5leHQgc2VjdGlvbnMuCis8L3BhcmE+CisKKzxwYXJhPlRoZSBhdmFpbGFibGUgZnJvbnRlbmQgcHJvcGVydHkgdHlwZXMgYXJlIHNob3duIG9uIHRoZSBuZXh0IHNlY3Rpb24uPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZmVfcHJvcGVydHlfcGFyYW1ldGVycyI+CisJPHRpdGxlPkRpZ2l0YWwgVFYgcHJvcGVydHkgcGFyYW1ldGVyczwvdGl0bGU+CisJPHNlY3Rpb24gaWQ9IkRUVi1VTkRFRklORUQiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1VOREVGSU5FRDwvY29uc3RhbnQ+PC90aXRsZT4KKwk8cGFyYT5Vc2VkIGludGVybmFsbHkuIEEgR0VUL1NFVCBvcGVyYXRpb24gZm9yIGl0IHdvbid0IGNoYW5nZSBvciByZXR1cm4gYW55dGhpbmcuPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLVRVTkUiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+SW50ZXJwcmV0IHRoZSBjYWNoZSBvZiBkYXRhLCBidWlsZCBlaXRoZXIgYSB0cmFkaXRpb25hbCBmcm9udGVuZCB0dW5lcmVxdWVzdCBzbyB3ZSBjYW4gcGFzcyB2YWxpZGF0aW9uIGluIHRoZSA8Y29uc3RhbnQ+RkVfU0VUX0ZST05URU5EPC9jb25zdGFudD4gaW9jdGwuPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUNMRUFSIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9DTEVBUjwvY29uc3RhbnQ+PC90aXRsZT4KKwk8cGFyYT5SZXNldCBhIGNhY2hlIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGZyb250ZW5kIGhlcmUuIFRoaXMgZG9lcyBub3QgZWZmZWN0IGhhcmR3YXJlLjwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1GUkVRVUVOQ1kiPgorCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJPHBhcmE+Q2VudHJhbCBmcmVxdWVuY3kgb2YgdGhlIGNoYW5uZWwsIGluIEhaLjwvcGFyYT4KKworCQk8cGFyYT5Ob3Rlczo8L3BhcmE+CisJCTxwYXJhPjEpRm9yIElTREItVCwgdGhlIGNoYW5uZWxzIGFyZSB1c3VhbGx5IHRyYW5zbWl0dGVkIHdpdGggYW4gb2Zmc2V0IG9mIDE0M2tIei4KKwkJCUUuZy4gYSB2YWxpZCBmcmVxdW5jeSBjb3VsZCBiZSA0NzQxNDMga0h6LiBUaGUgc3RlcHBpbmcgaXMgYm91bmQgdG8gdGhlIGJhbmR3aWR0aCBvZgorCQkJdGhlIGNoYW5uZWwgd2hpY2ggaXMgNk1Iei48L3BhcmE+CisKKwkJPHBhcmE+MilBcyBpbiBJU0RCLVRzYiB0aGUgY2hhbm5lbCBjb25zaXN0cyBvZiBvbmx5IG9uZSBvciB0aHJlZSBzZWdtZW50cyB0aGUKKwkJCWZyZXF1ZW5jeSBzdGVwIGlzIDQyOWtIeiwgMyo0MjkgcmVzcGVjdGl2ZWx5LiBBcyBmb3IgSVNEQi1UIHRoZQorCQkJY2VudHJhbCBmcmVxdWVuY3kgb2YgdGhlIGNoYW5uZWwgaXMgZXhwZWN0ZWQuPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLU1PRFVMQVRJT04iPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX01PRFVMQVRJT048L2NvbnN0YW50PjwvdGl0bGU+Cis8cGFyYT5TcGVjaWZpZXMgdGhlIGZyb250ZW5kIG1vZHVsYXRpb24gdHlwZSBmb3IgY2FibGUgYW5kIHNhdGVsbGl0ZSB0eXBlcy4gVGhlIG1vZHVsYXRpb24gY2FuIGJlIG9uZSBvZiB0aGUgdHlwZXMgYmVsbG93OjwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KKyB0eXBlZGVmIGVudW0gZmVfbW9kdWxhdGlvbiB7CisJUVBTSywKKwlRQU1fMTYsCisJUUFNXzMyLAorCVFBTV82NCwKKwlRQU1fMTI4LAorCVFBTV8yNTYsCisJUUFNX0FVVE8sCisJVlNCXzgsCisJVlNCXzE2LAorCVBTS184LAorCUFQU0tfMTYsCisJQVBTS18zMiwKKwlEUVBTSywKKyB9IGZlX21vZHVsYXRpb25fdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtQkFORFdJRFRILUhaIj4KKwkJPHRpdGxlPjxjb25zdGFudD5EVFZfQkFORFdJRFRIX0haPC9jb25zdGFudD48L3RpdGxlPgorCisJCTxwYXJhPkJhbmR3aWR0aCBmb3IgdGhlIGNoYW5uZWwsIGluIEhaLjwvcGFyYT4KKworCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6CisJCQk8Y29uc3RhbnQ+MTcxMjAwMDwvY29uc3RhbnQ+LAorCQkJPGNvbnN0YW50PjUwMDAwMDA8L2NvbnN0YW50PiwKKwkJCTxjb25zdGFudD42MDAwMDAwPC9jb25zdGFudD4sCisJCQk8Y29uc3RhbnQ+NzAwMDAwMDwvY29uc3RhbnQ+LAorCQkJPGNvbnN0YW50PjgwMDAwMDA8L2NvbnN0YW50PiwKKwkJCTxjb25zdGFudD4xMDAwMDAwMDwvY29uc3RhbnQ+LgorCQk8L3BhcmE+CisKKwkJPHBhcmE+Tm90ZXM6PC9wYXJhPgorCisJCTxwYXJhPjEpIEZvciBJU0RCLVQgaXQgc2hvdWxkIGJlIGFsd2F5cyA2MDAwMDAwSHogKDZNSHopPC9wYXJhPgorCQk8cGFyYT4yKSBGb3IgSVNEQi1Uc2IgaXQgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29ubmVjdGVkIHNlZ21lbnRzPC9wYXJhPgorCQk8cGFyYT4zKSBCYW5kd2lkdGggZG9lc24ndCBhcHBseSBmb3IgRFZCLUMgdHJhbnNtaXNzaW9ucywgYXMgdGhlIGJhbmR3aWR0aAorCQkJIGZvciBEVkItQyBkZXBlbmRzIG9uIHRoZSBzeW1ib2wgcmF0ZTwvcGFyYT4KKwkJPHBhcmE+NCkgQmFuZHdpZHRoIGluIElTREItVCBpcyBmaXhlZCAoNk1Ieikgb3IgY2FuIGJlIGVhc2lseSBkZXJpdmVkIGZyb20KKwkJCW90aGVyIHBhcmFtZXRlcnMgKERUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWCwKKwkJCURUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UKS48L3BhcmE+CisJCTxwYXJhPjUpIERWQi1UIHN1cHBvcnRzIDYsIDcgYW5kIDhNSHouPC9wYXJhPgorCQk8cGFyYT42KSBJbiBhZGRpdGlvbiwgRFZCLVQyIHN1cHBvcnRzIDEuMTcyLCA1IGFuZCAxME1Iei48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtSU5WRVJTSU9OIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9JTlZFUlNJT048L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+VGhlIEludmVyc2lvbiBmaWVsZCBjYW4gdGFrZSBvbmUgb2YgdGhlc2UgdmFsdWVzOgorCTwvcGFyYT4KKwk8cHJvZ3JhbWxpc3Rpbmc+CisJdHlwZWRlZiBlbnVtIGZlX3NwZWN0cmFsX2ludmVyc2lvbiB7CisJCUlOVkVSU0lPTl9PRkYsCisJCUlOVkVSU0lPTl9PTiwKKwkJSU5WRVJTSU9OX0FVVE8KKwl9IGZlX3NwZWN0cmFsX2ludmVyc2lvbl90OworCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPHBhcmE+SXQgaW5kaWNhdGVzIGlmIHNwZWN0cmFsIGludmVyc2lvbiBzaG91bGQgYmUgcHJlc3VtZWQgb3Igbm90LiBJbiB0aGUgYXV0b21hdGljIHNldHRpbmcKKwkoPGNvbnN0YW50PklOVkVSU0lPTl9BVVRPPC9jb25zdGFudD4pIHRoZSBoYXJkd2FyZSB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNldHRpbmcgYnkKKwlpdHNlbGYuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLURJU0VRQy1NQVNURVIiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0RJU0VRQ19NQVNURVI8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+Q3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtU1lNQk9MLVJBVEUiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1NZTUJPTF9SQVRFPC9jb25zdGFudD48L3RpdGxlPgorCTxwYXJhPkRpZ2l0YWwgVFYgc3ltYm9sIHJhdGUsIGluIGJhdWRzIChzeW1ib2xzL3NlY29uZCkuIFVzZWQgb24gY2FibGUgc3RhbmRhcmRzLjwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1JTk5FUi1GRUMiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lOTkVSX0ZFQzwvY29uc3RhbnQ+PC90aXRsZT4KKwk8cGFyYT5Vc2VkIGNhYmxlL3NhdGVsbGl0ZSB0cmFuc21pc3Npb25zLiBUaGUgYWNjZXB0YWJsZSB2YWx1ZXMgYXJlOgorCTwvcGFyYT4KKwk8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfY29kZV9yYXRlIHsKKwlGRUNfTk9ORSA9IDAsCisJRkVDXzFfMiwKKwlGRUNfMl8zLAorCUZFQ18zXzQsCisJRkVDXzRfNSwKKwlGRUNfNV82LAorCUZFQ182XzcsCisJRkVDXzdfOCwKKwlGRUNfOF85LAorCUZFQ19BVVRPLAorCUZFQ18zXzUsCisJRkVDXzlfMTAsCit9IGZlX2NvZGVfcmF0ZV90OworCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPHBhcmE+d2hpY2ggY29ycmVzcG9uZCB0byBlcnJvciBjb3JyZWN0aW9uIHJhdGVzIG9mIDEvMiwgMi8zLCBldGMuLAorCW5vIGVycm9yIGNvcnJlY3Rpb24gb3IgYXV0byBkZXRlY3Rpb24uPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLVZPTFRBR0UiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1ZPTFRBR0U8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+VGhlIHZvbHRhZ2UgaXMgdXN1YWxseSB1c2VkIHdpdGggbm9uLURpU0VxQyBjYXBhYmxlIExOQnMgdG8gc3dpdGNoCisJdGhlIHBvbGFyemF0aW9uIChob3Jpem9udGFsL3ZlcnRpY2FsKS4gV2hlbiB1c2luZyBEaVNFcUMgZXB1aXBtZW50IHRoaXMKKwl2b2x0YWdlIGhhcyB0byBiZSBzd2l0Y2hlZCBjb25zaXN0ZW50bHkgdG8gdGhlIERpU0VxQyBjb21tYW5kcyBhcworCWRlc2NyaWJlZCBpbiB0aGUgRGlTRXFDIHNwZWMuPC9wYXJhPgorCTxwcm9ncmFtbGlzdGluZz4KKwkJdHlwZWRlZiBlbnVtIGZlX3NlY192b2x0YWdlIHsKKwkJU0VDX1ZPTFRBR0VfMTMsCisJCVNFQ19WT0xUQUdFXzE4CisJCX0gZmVfc2VjX3ZvbHRhZ2VfdDsKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLVRPTkUiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX1RPTkU8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+Q3VycmVudGx5IG5vdCB1c2VkLjwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1QSUxPVCI+CisJPHRpdGxlPjxjb25zdGFudD5EVFZfUElMT1Q8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+U2V0cyBEVkItUzIgcGlsb3Q8L3BhcmE+CisJPHNlY3Rpb24gaWQ9ImZlLXBpbG90LXQiPgorCQk8dGl0bGU+ZmVfcGlsb3QgdHlwZTwvdGl0bGU+CisJCTxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSBmZV9waWxvdCB7CisJUElMT1RfT04sCisJUElMT1RfT0ZGLAorCVBJTE9UX0FVVE8sCit9IGZlX3BpbG90X3Q7CisJCTwvcHJvZ3JhbWxpc3Rpbmc+CisJCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1ST0xMT0ZGIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9ST0xMT0ZGPC9jb25zdGFudD48L3RpdGxlPgorCQk8cGFyYT5TZXRzIERWQi1TMiByb2xsb2ZmPC9wYXJhPgorCisJPHNlY3Rpb24gaWQ9ImZlLXJvbGxvZmYtdCI+CisJCTx0aXRsZT5mZV9yb2xsb2ZmIHR5cGU8L3RpdGxlPgorCQk8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfcm9sbG9mZiB7CisJUk9MTE9GRl8zNSwgLyogSW1wbGllZCB2YWx1ZSBpbiBEVkItUywgZGVmYXVsdCBmb3IgRFZCLVMyICovCisJUk9MTE9GRl8yMCwKKwlST0xMT0ZGXzI1LAorCVJPTExPRkZfQVVUTywKK30gZmVfcm9sbG9mZl90OworCQk8L3Byb2dyYW1saXN0aW5nPgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtRElTRVFDLVNMQVZFLVJFUExZIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9ESVNFUUNfU0xBVkVfUkVQTFk8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+Q3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtRkUtQ0FQQUJJTElUWS1DT1VOVCI+CisJPHRpdGxlPjxjb25zdGFudD5EVFZfRkVfQ0FQQUJJTElUWV9DT1VOVDwvY29uc3RhbnQ+PC90aXRsZT4KKwk8cGFyYT5DdXJyZW50bHkgbm90IGltcGxlbWVudGVkLjwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1GRS1DQVBBQklMSVRZIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9GRV9DQVBBQklMSVRZPC9jb25zdGFudD48L3RpdGxlPgorCTxwYXJhPkN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLURFTElWRVJZLVNZU1RFTSI+CisJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC90aXRsZT4KKwkJPHBhcmE+U3BlY2lmaWVzIHRoZSB0eXBlIG9mIERlbGl2ZXJ5IHN5c3RlbTwvcGFyYT4KKwkJPHNlY3Rpb24gaWQ9ImZlLWRlbGl2ZXJ5LXN5c3RlbS10Ij4KKwkJPHRpdGxlPmZlX2RlbGl2ZXJ5X3N5c3RlbSB0eXBlPC90aXRsZT4KKwkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiA8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfZGVsaXZlcnlfc3lzdGVtIHsKKwlTWVNfVU5ERUZJTkVELAorCVNZU19EVkJDX0FOTkVYX0FDLAorCVNZU19EVkJDX0FOTkVYX0IsCisJU1lTX0RWQlQsCisJU1lTX0RTUywKKwlTWVNfRFZCUywKKwlTWVNfRFZCUzIsCisJU1lTX0RWQkgsCisJU1lTX0lTREJULAorCVNZU19JU0RCUywKKwlTWVNfSVNEQkMsCisJU1lTX0FUU0MsCisJU1lTX0FUU0NNSCwKKwlTWVNfRE1CVEgsCisJU1lTX0NNTUIsCisJU1lTX0RBQiwKKwlTWVNfRFZCVDIsCit9IGZlX2RlbGl2ZXJ5X3N5c3RlbV90OworPC9wcm9ncmFtbGlzdGluZz4KKwkJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUlTREJULVBBUlRJQUwtUkVDRVBUSU9OIj4KKwkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJPHBhcmE+SWYgPGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PiBpcyAnMCcgdGhpcyBiaXQtZmllbGQgcmVwcmVzZW50cyB3aGV0aGVyCisJCQl0aGUgY2hhbm5lbCBpcyBpbiBwYXJ0aWFsIHJlY2VwdGlvbiBtb2RlIG9yIG5vdC48L3BhcmE+CisKKwkJPHBhcmE+SWYgJzEnIDxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBXyo8L2NvbnN0YW50PiB2YWx1ZXMgYXJlIGFzc2lnbmVkIHRvIHRoZSBjZW50ZXIgc2VnbWVudCBhbmQKKwkJCTxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBoYXMgdG8gYmUgJzEnLjwvcGFyYT4KKworCQk8cGFyYT5JZiBpbiBhZGRpdGlvbiA8Y29uc3RhbnQ+RFRWX0lTREJUX1NPVU5EX0JST0FEQ0FTVElORzwvY29uc3RhbnQ+IGlzICcxJworCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+IHJlcHJlc2VudHMgd2hldGhlciB0aGlzIElTREItVHNiIGNoYW5uZWwKKwkJCWlzIGNvbnNpc3Rpbmcgb2Ygb25lIHNlZ21lbnQgYW5kIGxheWVyIG9yIHRocmVlIHNlZ21lbnRzIGFuZCB0d28gbGF5ZXJzLjwvcGFyYT4KKworCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIC0xIChBVVRPKTwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9IkRUVi1JU0RCVC1TT1VORC1CUk9BRENBU1RJTkciPgorCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJPHBhcmE+VGhpcyBmaWVsZCByZXByZXNlbnRzIHdoZXRoZXIgdGhlIG90aGVyIERUVl9JU0RCVF8qLXBhcmFtZXRlcnMgYXJlCisJCQlyZWZlcnJpbmcgdG8gYW4gSVNEQi1UIGFuZCBhbiBJU0RCLVRzYiBjaGFubmVsLiAoU2VlIGFsc28KKwkJCTxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50PikuPC9wYXJhPgorCisJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCwgMSwgLTEgKEFVVE8pPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUlTREJULVNCLVNVQkNIQU5ORUwtSUQiPgorCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD48L3RpdGxlPgorCisJCTxwYXJhPlRoaXMgZmllbGQgb25seSBhcHBsaWVzIGlmIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gaXMgJzEnLjwvcGFyYT4KKworCQk8cGFyYT4oTm90ZSBvZiB0aGUgYXV0aG9yOiBUaGlzIG1pZ2h0IG5vdCBiZSB0aGUgY29ycmVjdCBkZXNjcmlwdGlvbiBvZiB0aGUKKwkJCTxjb25zdGFudD5TVUJDSEFOTkVMLUlEPC9jb25zdGFudD4gaW4gYWxsIGRldGFpbHMsIGJ1dCBpdCBpcyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0ZWNobmljYWwKKwkJCWJhY2tncm91bmQgbmVlZGVkIHRvIHByb2dyYW0gYSBkZXZpY2UpPC9wYXJhPgorCisJCTxwYXJhPkFuIElTREItVHNiIGNoYW5uZWwgKDEgb3IgMyBzZWdtZW50cykgY2FuIGJlIGJyb2FkY2FzdGVkIGFsb25lIG9yIGluIGEKKwkJCXNldCBvZiBjb25uZWN0ZWQgSVNEQi1Uc2IgY2hhbm5lbHMuIEluIHRoaXMgc2V0IG9mIGNoYW5uZWxzIGV2ZXJ5CisJCQljaGFubmVsIGNhbiBiZSByZWNlaXZlZCBpbmRlcGVuZGVudGx5LiBUaGUgbnVtYmVyIG9mIGNvbm5lY3RlZAorCQkJSVNEQi1Uc2Igc2VnbWVudCBjYW4gdmFyeSwgZS5nLiBkZXBlbmRpbmcgb24gdGhlIGZyZXF1ZW5jeSBzcGVjdHJ1bQorCQkJYmFuZHdpZHRoIGF2YWlsYWJsZS48L3BhcmE+CisKKwkJPHBhcmE+RXhhbXBsZTogQXNzdW1lIDggSVNEQi1Uc2IgY29ubmVjdGVkIHNlZ21lbnRzIGFyZSBicm9hZGNhc3RlZC4gVGhlCisJCQlicm9hZGNhc3RlciBoYXMgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIHRvIHB1dCB0aG9zZSBjaGFubmVscyBpbiB0aGUKKwkJCWFpcjogQXNzdW1pbmcgYSBub3JtYWwgMTMtc2VnbWVudCBJU0RCLVQgc3BlY3RydW0gaGUgY2FuIGFsaWduIHRoZSA4CisJCQlzZWdtZW50cyBmcm9tIHBvc2l0aW9uIDEtOCB0byA1LTEzIG9yIGFueXRoaW5nIGluIGJldHdlZW4uPC9wYXJhPgorCisJCTxwYXJhPlRoZSB1bmRlcmx5aW5nIGxheWVyIG9mIHNlZ21lbnRzIGFyZSBzdWJjaGFubmVsczogZWFjaCBzZWdtZW50IGlzCisJCQljb25zaXN0aW5nIG9mIHNldmVyYWwgc3ViY2hhbm5lbHMgd2l0aCBhIHByZWRlZmluZWQgSURzLiBBIHN1Yi1jaGFubmVsCisJCQlpcyB1c2VkIHRvIGhlbHAgdGhlIGRlbW9kdWxhdG9yIHRvIHN5bmNocm9uaXplIG9uIHRoZSBjaGFubmVsLjwvcGFyYT4KKworCQk8cGFyYT5BbiBJU0RCLVQgY2hhbm5lbCBpcyBhbHdheXMgY2VudGVyZWQgb3ZlciBhbGwgc3ViLWNoYW5uZWxzLiBBcyBmb3IKKwkJCXRoZSBleGFtcGxlIGFib3ZlLCBpbiBJU0RCLVRzYiBpdCBpcyBubyBsb25nZXIgYXMgc2ltcGxlIGFzIHRoYXQuPC9wYXJhPgorCisJCTxwYXJhPjxjb25zdGFudD5UaGUgRFRWX0lTREJUX1NCX1NVQkNIQU5ORUxfSUQ8L2NvbnN0YW50PiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBnaXZlIHRoZQorCQkJc3ViLWNoYW5uZWwgSUQgb2YgdGhlIHNlZ21lbnQgdG8gYmUgZGVtb2R1bGF0ZWQuPC9wYXJhPgorCisJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMCAuLiA0MSwgLTEgKEFVVE8pPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUlTREJULVNCLVNFR01FTlQtSURYIj4KKwkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9JRFg8L2NvbnN0YW50PjwvdGl0bGU+CisJCTxwYXJhPlRoaXMgZmllbGQgb25seSBhcHBsaWVzIGlmIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gaXMgJzEnLjwvcGFyYT4KKwkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0lEWDwvY29uc3RhbnQ+IGdpdmVzIHRoZSBpbmRleCBvZiB0aGUgc2VnbWVudCB0byBiZQorCQkJZGVtb2R1bGF0ZWQgZm9yIGFuIElTREItVHNiIGNoYW5uZWwgd2hlcmUgc2V2ZXJhbCBvZiB0aGVtIGFyZQorCQkJdHJhbnNtaXR0ZWQgaW4gdGhlIGNvbm5lY3RlZCBtYW5uZXIuPC9wYXJhPgorCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAgLi4gPGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UPC9jb25zdGFudD4gLSAxPC9wYXJhPgorCQk8cGFyYT5Ob3RlOiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGFuIGF1dG9tYXRpYyBjaGFubmVsIHNlYXJjaC48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtSVNEQlQtU0ItU0VHTUVOVC1DT1VOVCI+CisJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PjwvdGl0bGU+CisJCTxwYXJhPlRoaXMgZmllbGQgb25seSBhcHBsaWVzIGlmIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gaXMgJzEnLjwvcGFyYT4KKwkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TRUdNRU5UX0NPVU5UPC9jb25zdGFudD4gZ2l2ZXMgdGhlIHRvdGFsIGNvdW50IG9mIGNvbm5lY3RlZCBJU0RCLVRzYgorCQkJY2hhbm5lbHMuPC9wYXJhPgorCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDEgLi4gMTM8L3BhcmE+CisJCTxwYXJhPk5vdGU6IFRoaXMgdmFsdWUgY2Fubm90IGJlIGRldGVybWluZWQgYnkgYW4gYXV0b21hdGljIGNoYW5uZWwgc2VhcmNoLjwvcGFyYT4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9ImlzZGItaGllcnEtbGF5ZXJzIj4KKwkJPHRpdGxlPjxjb25zdGFudD5EVFYtSVNEQlQtTEFZRVIqPC9jb25zdGFudD4gcGFyYW1ldGVyczwvdGl0bGU+CisJCTxwYXJhPklTREItVCBjaGFubmVscyBjYW4gYmUgY29kZWQgaGllcmFyY2hpY2FsbHkuIEFzIG9wcG9zZWQgdG8gRFZCLVQgaW4KKwkJCUlTREItVCBoaWVyYXJjaGljYWwgbGF5ZXJzIGNhbiBiZSBkZWNvZGVkIHNpbXVsdGFuZW91c2x5LiBGb3IgdGhhdAorCQkJcmVhc29uIGEgSVNEQi1UIGRlbW9kdWxhdG9yIGhhcyAzIHZpdGVyYmkgYW5kIDMgcmVlZC1zb2xvbW9uLWRlY29kZXJzLjwvcGFyYT4KKwkJPHBhcmE+SVNEQi1UIGhhcyAzIGhpZXJhcmNoaWNhbCBsYXllcnMgd2hpY2ggZWFjaCBjYW4gdXNlIGEgcGFydCBvZiB0aGUKKwkJCWF2YWlsYWJsZSBzZWdtZW50cy4gVGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyBvdmVyIGFsbCBsYXllcnMgaGFzCisJCQl0byAxMyBpbiBJU0RCLVQuPC9wYXJhPgorCQk8cGFyYT5UaGVyZSBhcmUgMyBwYXJhbWV0ZXIgc2V0cywgZm9yIExheWVycyBBLCBCIGFuZCBDLjwvcGFyYT4KKwkJPHNlY3Rpb24gaWQ9IkRUVi1JU0RCVC1MQVlFUi1FTkFCTEVEIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRUQ8L2NvbnN0YW50PjwvdGl0bGU+CisJCQk8cGFyYT5IaWVyYXJjaGljYWwgcmVjZXB0aW9uIGluIElTREItVCBpcyBhY2hpZXZlZCBieSBlbmFibGluZyBvciBkaXNhYmxpbmcKKwkJCQlsYXllcnMgaW4gdGhlIGRlY29kaW5nIHByb2Nlc3MuIFNldHRpbmcgYWxsIGJpdHMgb2YKKwkJCQk8Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRUQ8L2NvbnN0YW50PiB0byAnMScgZm9yY2VzIGFsbCBsYXllcnMgKGlmIGFwcGxpY2FibGUpIHRvIGJlCisJCQkJZGVtb2R1bGF0ZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQuPC9wYXJhPgorCQkJPHBhcmE+SWYgdGhlIGNoYW5uZWwgaXMgaW4gdGhlIHBhcnRpYWwgcmVjZXB0aW9uIG1vZGUKKwkJCQkoPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+ID0gMSkgdGhlIGNlbnRyYWwgc2VnbWVudCBjYW4gYmUgZGVjb2RlZAorCQkJCWluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVyIDEyIHNlZ21lbnRzLiBJbiB0aGF0IG1vZGUgbGF5ZXIgQSBoYXMgdG8KKwkJCQloYXZlIGEgPGNvbnN0YW50PlNFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBvZiAxLjwvcGFyYT4KKwkJCTxwYXJhPkluIElTREItVHNiIG9ubHkgbGF5ZXIgQSBpcyB1c2VkLCBpdCBjYW4gYmUgMSBvciAzIGluIElTREItVHNiCisJCQkJYWNjb3JkaW5nIHRvIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pi4gPGNvbnN0YW50PlNFR01FTlRfQ09VTlQ8L2NvbnN0YW50PiBtdXN0IGJlIGZpbGxlZAorCQkJCWFjY29yZGluZ2x5LjwvcGFyYT4KKwkJCTxwYXJhPlBvc3NpYmxlIHZhbHVlczogMHgxLCAweDIsIDB4NCAofC1hYmxlKTwvcGFyYT4KKwkJCTxwYXJhPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJfRU5BQkxFRFswOjBdPC9jb25zdGFudD4gLSBsYXllciBBPC9wYXJhPgorCQkJPHBhcmE+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEWzE6MV08L2NvbnN0YW50PiAtIGxheWVyIEI8L3BhcmE+CisJCQk8cGFyYT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSX0VOQUJMRURbMjoyXTwvY29uc3RhbnQ+IC0gbGF5ZXIgQzwvcGFyYT4KKwkJCTxwYXJhPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJfRU5BQkxFRFszMTozXTwvY29uc3RhbnQ+IHVudXNlZDwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBpZD0iRFRWLUlTREJULUxBWUVSLUZFQyI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfRkVDPC9jb25zdGFudD48L3RpdGxlPgorCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiA8Y29uc3RhbnQ+RkVDX0FVVE88L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18xXzI8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18yXzM8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ18zXzQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ181XzY8L2NvbnN0YW50PiwgPGNvbnN0YW50PkZFQ183Xzg8L2NvbnN0YW50PjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBpZD0iRFRWLUlTREJULUxBWUVSLU1PRFVMQVRJT04iPgorCQkJPHRpdGxlPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVIqX01PRFVMQVRJT048L2NvbnN0YW50PjwvdGl0bGU+CisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDxjb25zdGFudD5RQU1fQVVUTzwvY29uc3RhbnQ+LCBRUDxjb25zdGFudD5TSywgUUFNXzE2PC9jb25zdGFudD4sIDxjb25zdGFudD5RQU1fNjQ8L2NvbnN0YW50PiwgPGNvbnN0YW50PkRRUFNLPC9jb25zdGFudD48L3BhcmE+CisJCQk8cGFyYT5Ob3RlOiBJZiBsYXllciBDIGlzIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+IGxheWVyIEIgaGFzIHRvIGJlIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+LiBJZiBsYXllciBCIGlzIDxjb25zdGFudD5EUVBTSzwvY29uc3RhbnQ+CisJCQkJYW5kIDxjb25zdGFudD5EVFZfSVNEQlRfUEFSVElBTF9SRUNFUFRJT048L2NvbnN0YW50Pj0wIGxheWVyIGhhcyB0byBiZSA8Y29uc3RhbnQ+RFFQU0s8L2NvbnN0YW50Pi48L3BhcmE+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gaWQ9IkRUVi1JU0RCVC1MQVlFUi1TRUdNRU5ULUNPVU5UIj4KKwkJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSKl9TRUdNRU5UX0NPVU5UPC9jb25zdGFudD48L3RpdGxlPgorCQkJPHBhcmE+UG9zc2libGUgdmFsdWVzOiAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgLTEgKEFVVE8pPC9wYXJhPgorCQkJPHBhcmE+Tm90ZTogVHJ1dGggdGFibGUgZm9yIDxjb25zdGFudD5EVFZfSVNEQlRfU09VTkRfQlJPQURDQVNUSU5HPC9jb25zdGFudD4gYW5kCisJCQkJPGNvbnN0YW50PkRUVl9JU0RCVF9QQVJUSUFMX1JFQ0VQVElPTjwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+TEFZRVI8L2NvbnN0YW50PipfU0VHTUVOVF9DT1VOVDwvcGFyYT4KKwkJCTxpbmZvcm1hbHRhYmxlIGlkPSJpc2RidC1sYXllcl9zZWctY250LXRhYmxlIj4KKwkJCQk8dGdyb3VwIGNvbHM9IjYiPgorCQkJCQk8dGJvZHk+CisJCQkJCQk8cm93PgorCQkJCQkJCTxlbnRyeT5QUjwvZW50cnk+CisJCQkJCQkJPGVudHJ5PlNCPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+TGF5ZXIgQSB3aWR0aDwvZW50cnk+CisJCQkJCQkJPGVudHJ5PkxheWVyIEIgd2lkdGg8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT5MYXllciBDIHdpZHRoPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+dG90YWwgd2lkdGg8L2VudHJ5PgorCQkJCQkJPC9yb3c+CisJCQkJCQk8cm93PgorCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MDwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4xIC4uIDEzPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjEzPC9lbnRyeT4KKwkJCQkJCTwvcm93PgorCQkJCQkJPHJvdz4KKwkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MSAuLiAxMzwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjEgLi4gMTM8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4xMzwvZW50cnk+CisJCQkJCQk8L3Jvdz4KKwkJCQkJCTxyb3c+CisJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjA8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQk8L3Jvdz4KKwkJCQkJCTxyb3c+CisJCQkJCQkJPGVudHJ5PjE8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4xPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MTwvZW50cnk+CisJCQkJCQkJPGVudHJ5PjI8L2VudHJ5PgorCQkJCQkJCTxlbnRyeT4wPC9lbnRyeT4KKwkJCQkJCQk8ZW50cnk+MTM8L2VudHJ5PgorCQkJCQkJPC9yb3c+CisJCQkJCTwvdGJvZHk+CisJCQkJPC90Z3JvdXA+CisJCQk8L2luZm9ybWFsdGFibGU+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gaWQ9IkRUVi1JU0RCVC1MQVlFUi1USU1FLUlOVEVSTEVBVklORyI+CisJCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUipfVElNRV9JTlRFUkxFQVZJTkc8L2NvbnN0YW50PjwvdGl0bGU+CisJCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXM6IDAsIDEsIDIsIDMsIC0xIChBVVRPKTwvcGFyYT4KKwkJCTxwYXJhPk5vdGU6IFRoZSByZWFsIGludGVyLWxlYXZlciBkZXB0aC1uYW1lcyBkZXBlbmQgb24gdGhlIG1vZGUgKGZmdC1zaXplKTsgdGhlIHZhbHVlcworCQkJCWhlcmUgYXJlIHJlZmVycmluZyB0byB3aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgVE1DQy1zdHJ1Y3R1cmUgLQorCQkJCWluZGVwZW5kZW50IG9mIHRoZSBtb2RlLjwvcGFyYT4KKwkJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUFQSS1WRVJTSU9OIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9BUElfVkVSU0lPTjwvY29uc3RhbnQ+PC90aXRsZT4KKwk8cGFyYT5SZXR1cm5zIHRoZSBtYWpvci9taW5vciB2ZXJzaW9uIG9mIHRoZSBEVkIgQVBJPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUNPREUtUkFURS1IUCI+CisJPHRpdGxlPjxjb25zdGFudD5EVFZfQ09ERV9SQVRFX0hQPC9jb25zdGFudD48L3RpdGxlPgorCTxwYXJhPlVzZWQgb24gdGVycmVzdHJpYWwgdHJhbnNtaXNzaW9ucy4gVGhlIGFjY2VwdGFibGUgdmFsdWVzIGFyZToKKwk8L3BhcmE+CisJPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7CisJRkVDX05PTkUgPSAwLAorCUZFQ18xXzIsCisJRkVDXzJfMywKKwlGRUNfM180LAorCUZFQ180XzUsCisJRkVDXzVfNiwKKwlGRUNfNl83LAorCUZFQ183XzgsCisJRkVDXzhfOSwKKwlGRUNfQVVUTywKKwlGRUNfM181LAorCUZFQ185XzEwLAorfSBmZV9jb2RlX3JhdGVfdDsKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUNPREUtUkFURS1MUCI+CisJPHRpdGxlPjxjb25zdGFudD5EVFZfQ09ERV9SQVRFX0xQPC9jb25zdGFudD48L3RpdGxlPgorCTxwYXJhPlVzZWQgb24gdGVycmVzdHJpYWwgdHJhbnNtaXNzaW9ucy4gVGhlIGFjY2VwdGFibGUgdmFsdWVzIGFyZToKKwk8L3BhcmE+CisJPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7CisJRkVDX05PTkUgPSAwLAorCUZFQ18xXzIsCisJRkVDXzJfMywKKwlGRUNfM180LAorCUZFQ180XzUsCisJRkVDXzVfNiwKKwlGRUNfNl83LAorCUZFQ183XzgsCisJRkVDXzhfOSwKKwlGRUNfQVVUTywKKwlGRUNfM181LAorCUZFQ185XzEwLAorfSBmZV9jb2RlX3JhdGVfdDsKKwk8L3Byb2dyYW1saXN0aW5nPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLUdVQVJELUlOVEVSVkFMIj4KKwkJPHRpdGxlPjxjb25zdGFudD5EVFZfR1VBUkRfSU5URVJWQUw8L2NvbnN0YW50PjwvdGl0bGU+CisKKwkJPHBhcmE+UG9zc2libGUgdmFsdWVzIGFyZTo8L3BhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfZ3VhcmRfaW50ZXJ2YWwgeworCUdVQVJEX0lOVEVSVkFMXzFfMzIsCisJR1VBUkRfSU5URVJWQUxfMV8xNiwKKwlHVUFSRF9JTlRFUlZBTF8xXzgsCisJR1VBUkRfSU5URVJWQUxfMV80LAorCUdVQVJEX0lOVEVSVkFMX0FVVE8sCisJR1VBUkRfSU5URVJWQUxfMV8xMjgsCisJR1VBUkRfSU5URVJWQUxfMTlfMTI4LAorCUdVQVJEX0lOVEVSVkFMXzE5XzI1NiwKK30gZmVfZ3VhcmRfaW50ZXJ2YWxfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKwkJPHBhcmE+Tm90ZXM6PC9wYXJhPgorCQk8cGFyYT4xKSBJZiA8Y29uc3RhbnQ+RFRWX0dVQVJEX0lOVEVSVkFMPC9jb25zdGFudD4gaXMgc2V0IHRoZSA8Y29uc3RhbnQ+R1VBUkRfSU5URVJWQUxfQVVUTzwvY29uc3RhbnQ+IHRoZSBoYXJkd2FyZSB3aWxsCisJCQl0cnkgdG8gZmluZCB0aGUgY29ycmVjdCBndWFyZCBpbnRlcnZhbCAoaWYgY2FwYWJsZSkgYW5kIHdpbGwgdXNlIFRNQ0MgdG8gZmlsbAorCQkJaW4gdGhlIG1pc3NpbmcgcGFyYW1ldGVycy48L3BhcmE+CisJCTxwYXJhPjIpIEludGVydmFscyAxLzEyOCwgMTkvMTI4IGFuZCAxOS8yNTYgYXJlIHVzZWQgb25seSBmb3IgRFZCLVQyIGF0IHByZXNlbnQ8L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtVFJBTlNNSVNTSU9OLU1PREUiPgorCQk8dGl0bGU+PGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+PC90aXRsZT4KKworCQk8cGFyYT5TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjYXJyaWVycyB1c2VkIGJ5IHRoZSBzdGFuZGFyZDwvcGFyYT4KKworCQk8cGFyYT5Qb3NzaWJsZSB2YWx1ZXMgYXJlOjwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSBmZV90cmFuc21pdF9tb2RlIHsKKwlUUkFOU01JU1NJT05fTU9ERV8ySywKKwlUUkFOU01JU1NJT05fTU9ERV84SywKKwlUUkFOU01JU1NJT05fTU9ERV9BVVRPLAorCVRSQU5TTUlTU0lPTl9NT0RFXzRLLAorCVRSQU5TTUlTU0lPTl9NT0RFXzFLLAorCVRSQU5TTUlTU0lPTl9NT0RFXzE2SywKKwlUUkFOU01JU1NJT05fTU9ERV8zMkssCit9IGZlX3RyYW5zbWl0X21vZGVfdDsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisJCTxwYXJhPk5vdGVzOjwvcGFyYT4KKwkJPHBhcmE+MSkgSVNEQi1UIHN1cHBvcnRzIHRocmVlIGNhcnJpZXIvc3ltYm9sLXNpemU6IDhLLCA0SywgMksuIEl0IGlzIGNhbGxlZAorCQkJJ21vZGUnIGluIHRoZSBzdGFuZGFyZDogTW9kZSAxIGlzIDJLLCBtb2RlIDIgaXMgNEssIG1vZGUgMyBpcyA4SzwvcGFyYT4KKworCQk8cGFyYT4yKSBJZiA8Y29uc3RhbnQ+RFRWX1RSQU5TTUlTU0lPTl9NT0RFPC9jb25zdGFudD4gaXMgc2V0IHRoZSA8Y29uc3RhbnQ+VFJBTlNNSVNTSU9OX01PREVfQVVUTzwvY29uc3RhbnQ+IHRoZQorCQkJaGFyZHdhcmUgd2lsbCB0cnkgdG8gZmluZCB0aGUgY29ycmVjdCBGRlQtc2l6ZSAoaWYgY2FwYWJsZSkgYW5kIHdpbGwKKwkJCXVzZSBUTUNDIHRvIGZpbGwgaW4gdGhlIG1pc3NpbmcgcGFyYW1ldGVycy48L3BhcmE+CisJCTxwYXJhPjMpIERWQi1UIHNwZWNpZmllcyAySyBhbmQgOEsgYXMgdmFsaWQgc2l6ZXMuPC9wYXJhPgorCQk8cGFyYT40KSBEVkItVDIgc3BlY2lmaWVzIDFLLCAySywgNEssIDhLLCAxNksgYW5kIDMySy48L3BhcmE+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtSElFUkFSQ0hZIj4KKwk8dGl0bGU+PGNvbnN0YW50PkRUVl9ISUVSQVJDSFk8L2NvbnN0YW50PjwvdGl0bGU+CisJPHBhcmE+RnJvbnRlbmQgaGllcmFyY2h5PC9wYXJhPgorCTxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSBmZV9oaWVyYXJjaHkgeworCSBISUVSQVJDSFlfTk9ORSwKKwkgSElFUkFSQ0hZXzEsCisJIEhJRVJBUkNIWV8yLAorCSBISUVSQVJDSFlfNCwKKwkgSElFUkFSQ0hZX0FVVE8KKyB9IGZlX2hpZXJhcmNoeV90OworCTwvcHJvZ3JhbWxpc3Rpbmc+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJEVFYtSVNEQlMtVFMtSUQiPgorCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0lTREJTX1RTX0lEPC9jb25zdGFudD48L3RpdGxlPgorCTxwYXJhPkN1cnJlbnRseSB1bnVzZWQuPC9wYXJhPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iRFRWLURWQlQyLVBMUC1JRCI+CisJCTx0aXRsZT48Y29uc3RhbnQ+RFRWX0RWQlQyX1BMUF9JRDwvY29uc3RhbnQ+PC90aXRsZT4KKwkJPHBhcmE+RFZCLVQyIHN1cHBvcnRzIFBoeXNpY2FsIExheWVyIFBpcGVzIChQTFApIHRvIGFsbG93IHRyYW5zbWlzc2lvbiBvZgorCQkJbWFueSBkYXRhIHR5cGVzIHZpYSBhIHNpbmdsZSBtdWx0aXBsZXguIFRoZSBBUEkgd2lsbCBzb29uIHN1cHBvcnQgdGhpcworCQkJYXQgd2hpY2ggcG9pbnQgdGhpcyBzZWN0aW9uIHdpbGwgYmUgZXhwYW5kZWQuPC9wYXJhPgorCTwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iZnJvbnRlbmQtcHJvcGVydHktdGVycmVzdHJpYWwtc3lzdGVtcyI+CisJPHRpdGxlPlByb3BlcnRpZXMgdXNlZCBvbiB0ZXJyZXN0cmlhbCBkZWxpdmVyeSBzeXN0ZW1zPC90aXRsZT4KKwkJPHNlY3Rpb24gaWQ9ImR2YnQtcGFyYW1zIj4KKwkJCTx0aXRsZT5EVkItVCBkZWxpdmVyeSBzeXN0ZW08L3RpdGxlPgorCQkJPHBhcmE+VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBmb3IgRFZCLVQ6PC9wYXJhPgorCQkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUFQSS1WRVJTSU9OIj48Y29uc3RhbnQ+RFRWX0FQSV9WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ERUxJVkVSWS1TWVNURU0iPjxjb25zdGFudD5EVFZfREVMSVZFUllfU1lTVEVNPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNMRUFSIj48Y29uc3RhbnQ+RFRWX0NMRUFSPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1GUkVRVUVOQ1kiPjxjb25zdGFudD5EVFZfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1NT0RVTEFUSU9OIj48Y29uc3RhbnQ+RFRWX01PRFVMQVRJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUJBTkRXSURUSC1IWiI+PGNvbnN0YW50PkRUVl9CQU5EV0lEVEhfSFo8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOVkVSU0lPTiI+PGNvbnN0YW50PkRUVl9JTlZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNPREUtUkFURS1IUCI+PGNvbnN0YW50PkRUVl9DT0RFX1JBVEVfSFA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNPREUtUkFURS1MUCI+PGNvbnN0YW50PkRUVl9DT0RFX1JBVEVfTFA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUdVQVJELUlOVEVSVkFMIj48Y29uc3RhbnQ+RFRWX0dVQVJEX0lOVEVSVkFMPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UUkFOU01JU1NJT04tTU9ERSI+PGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSElFUkFSQ0hZIj48Y29uc3RhbnQ+RFRWX0hJRVJBUkNIWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPC9pdGVtaXplZGxpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gaWQ9ImR2YnQyLXBhcmFtcyI+CisJCQk8dGl0bGU+RFZCLVQyIGRlbGl2ZXJ5IHN5c3RlbTwvdGl0bGU+CisJCQk8cGFyYT5EVkItVDIgc3VwcG9ydCBpcyBjdXJyZW50bHkgaW4gdGhlIGVhcmx5IHN0YWdlcworCQkJb2YgZGV2ZWxvcG1lbnQsIHNvIGV4cGVjdCB0aGF0IHRoaXMgc2VjdGlvbiBtYXlncm93IGFuZCBiZWNvbWUKKwkJCW1vcmUgZGV0YWlsZWQgd2l0aCB0aW1lLjwvcGFyYT4KKwkJPHBhcmE+VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBmb3IgRFZCLVQyOjwvcGFyYT4KKwkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQVBJLVZFUlNJT04iPjxjb25zdGFudD5EVFZfQVBJX1ZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ0xFQVIiPjxjb25zdGFudD5EVFZfQ0xFQVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRlJFUVVFTkNZIj48Y29uc3RhbnQ+RFRWX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1NT0RVTEFUSU9OIj48Y29uc3RhbnQ+RFRWX01PRFVMQVRJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQkFORFdJRFRILUhaIj48Y29uc3RhbnQ+RFRWX0JBTkRXSURUSF9IWjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JTlZFUlNJT04iPjxjb25zdGFudD5EVFZfSU5WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNPREUtUkFURS1IUCI+PGNvbnN0YW50PkRUVl9DT0RFX1JBVEVfSFA8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ09ERS1SQVRFLUxQIj48Y29uc3RhbnQ+RFRWX0NPREVfUkFURV9MUDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1HVUFSRC1JTlRFUlZBTCI+PGNvbnN0YW50PkRUVl9HVUFSRF9JTlRFUlZBTDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UUkFOU01JU1NJT04tTU9ERSI+PGNvbnN0YW50PkRUVl9UUkFOU01JU1NJT05fTU9ERTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ISUVSQVJDSFkiPjxjb25zdGFudD5EVFZfSElFUkFSQ0hZPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLURWQlQyLVBMUC1JRCI+PGNvbnN0YW50PkRUVl9EVkJUMl9QTFBfSUQ8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJCTwvc2VjdGlvbj4KKwkJPHNlY3Rpb24gaWQ9ImlzZGJ0Ij4KKwkJPHRpdGxlPklTREItVCBkZWxpdmVyeSBzeXN0ZW08L3RpdGxlPgorCQk8cGFyYT5UaGlzIElTREItVC9JU0RCLVRzYiBBUEkgZXh0ZW5zaW9uIHNob3VsZCByZWZsZWN0IGFsbCBpbmZvcm1hdGlvbgorCQkJbmVlZGVkIHRvIHR1bmUgYW55IElTREItVC9JU0RCLVRzYiBoYXJkd2FyZS4gT2YgY291cnNlIGl0IGlzIHBvc3NpYmxlCisJCQl0aGF0IHNvbWUgdmVyeSBzb3BoaXN0aWNhdGVkIGRldmljZXMgd29uJ3QgbmVlZCBjZXJ0YWluIHBhcmFtZXRlcnMgdG8KKwkJCXR1bmUuPC9wYXJhPgorCQk8cGFyYT5UaGUgaW5mb3JtYXRpb24gZ2l2ZW4gaGVyZSBzaG91bGQgaGVscCBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGtub3cgaG93CisJCQl0byBoYW5kbGUgSVNEQi1UIGFuZCBJU0RCLVRzYiBoYXJkd2FyZSB1c2luZyB0aGUgTGludXggRFZCLUFQSS48L3BhcmE+CisJCTxwYXJhPlRoZSBkZXRhaWxzIGdpdmVuIGhlcmUgYWJvdXQgSVNEQi1UIGFuZCBJU0RCLVRzYiBhcmUganVzdCBlbm91Z2ggdG8KKwkJCWJhc2ljYWxseSBzaG93IHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgbmVlZGVkIHBhcmFtZXRlciB2YWx1ZXMsCisJCQlidXQgc3VyZWx5IHNvbWUgaW5mb3JtYXRpb24gaXMgbGVmdCBvdXQuIEZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uCisJCQlzZWUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHM6PC9wYXJhPgorCQk8cGFyYT5BUklCIFNURC1CMzEgLSAiVHJhbnNtaXNzaW9uIFN5c3RlbSBmb3IgRGlnaXRhbCBUZXJyZXN0cmlhbAorCQkJVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmciIGFuZDwvcGFyYT4KKwkJPHBhcmE+QVJJQiBUUi1CMTQgLSAiT3BlcmF0aW9uYWwgR3VpZGVsaW5lcyBmb3IgRGlnaXRhbCBUZXJyZXN0cmlhbAorCQkJVGVsZXZpc2lvbiBCcm9hZGNhc3RpbmciLjwvcGFyYT4KKwkJPHBhcmE+SW4gb3JkZXIgdG8gdW5kZXJzdGFuZCB0aGUgSVNEQiBzcGVjaWZpYyBwYXJhbWV0ZXJzLAorCQkJb25lIGhhcyB0byBoYXZlIHNvbWUga25vd2xlZGdlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSBpbgorCQkJSVNEQi1UIGFuZCBJU0RCLVRzYi4gSS5lLiBpdCBoYXMgdG8gYmUga25vd24gdG8KKwkJCXRoZSByZWFkZXIgdGhhdCBhbiBJU0RCLVQgY2hhbm5lbCBjb25zaXN0cyBvZiAxMyBzZWdtZW50cywKKwkJCXRoYXQgaXQgY2FuIGhhdmUgdXAgdG8gMyBsYXllciBzaGFyaW5nIHRob3NlIHNlZ21lbnRzLAorCQkJYW5kIHRoaW5ncyBsaWtlIHRoYXQuPC9wYXJhPgorCQk8cGFyYT5UaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGZvciBJU0RCLVQ6PC9wYXJhPgorCQk8aXRlbWl6ZWRsaXN0IG1hcms9J29wZW5jaXJjbGUnPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1BUEktVkVSU0lPTiI+PGNvbnN0YW50PkRUVl9BUElfVkVSU0lPTjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ERUxJVkVSWS1TWVNURU0iPjxjb25zdGFudD5EVFZfREVMSVZFUllfU1lTVEVNPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVRVTkUiPjxjb25zdGFudD5EVFZfVFVORTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1DTEVBUiI+PGNvbnN0YW50PkRUVl9DTEVBUjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1GUkVRVUVOQ1kiPjxjb25zdGFudD5EVFZfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLU1PRFVMQVRJT04iPjxjb25zdGFudD5EVFZfTU9EVUxBVElPTjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1CQU5EV0lEVEgtSFoiPjxjb25zdGFudD5EVFZfQkFORFdJRFRIX0haPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOVkVSU0lPTiI+PGNvbnN0YW50PkRUVl9JTlZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ09ERS1SQVRFLUhQIj48Y29uc3RhbnQ+RFRWX0NPREVfUkFURV9IUDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1DT0RFLVJBVEUtTFAiPjxjb25zdGFudD5EVFZfQ09ERV9SQVRFX0xQPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUdVQVJELUlOVEVSVkFMIj48Y29uc3RhbnQ+RFRWX0dVQVJEX0lOVEVSVkFMPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVRSQU5TTUlTU0lPTi1NT0RFIj48Y29uc3RhbnQ+RFRWX1RSQU5TTUlTU0lPTl9NT0RFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUhJRVJBUkNIWSI+PGNvbnN0YW50PkRUVl9ISUVSQVJDSFk8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtTEFZRVItRU5BQkxFRCI+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUl9FTkFCTEVEPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULVBBUlRJQUwtUkVDRVBUSU9OIj48Y29uc3RhbnQ+RFRWX0lTREJUX1BBUlRJQUxfUkVDRVBUSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULVNPVU5ELUJST0FEQ0FTVElORyI+PGNvbnN0YW50PkRUVl9JU0RCVF9TT1VORF9CUk9BRENBU1RJTkc8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtU0ItU1VCQ0hBTk5FTC1JRCI+PGNvbnN0YW50PkRUVl9JU0RCVF9TQl9TVUJDSEFOTkVMX0lEPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULVNCLVNFR01FTlQtSURYIj48Y29uc3RhbnQ+RFRWX0lTREJUX1NCX1NFR01FTlRfSURYPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULVNCLVNFR01FTlQtQ09VTlQiPjxjb25zdGFudD5EVFZfSVNEQlRfU0JfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JU0RCVC1MQVlFUi1GRUMiPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBX0ZFQzwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JU0RCVC1MQVlFUi1NT0RVTEFUSU9OIj48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQV9NT0RVTEFUSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULUxBWUVSLVNFR01FTlQtQ09VTlQiPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBX1NFR01FTlRfQ09VTlQ8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtTEFZRVItVElNRS1JTlRFUkxFQVZJTkciPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJBX1RJTUVfSU5URVJMRUFWSU5HPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULUxBWUVSLUZFQyI+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkJfRkVDPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULUxBWUVSLU1PRFVMQVRJT04iPjxjb25zdGFudD5EVFZfSVNEQlRfTEFZRVJCX01PRFVMQVRJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtTEFZRVItU0VHTUVOVC1DT1VOVCI+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkJfU0VHTUVOVF9DT1VOVDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JU0RCVC1MQVlFUi1USU1FLUlOVEVSTEVBVklORyI+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkJfVElNRV9JTlRFUkxFQVZJTkc8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtTEFZRVItRkVDIj48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQ19GRUM8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtSVNEQlQtTEFZRVItTU9EVUxBVElPTiI+PGNvbnN0YW50PkRUVl9JU0RCVF9MQVlFUkNfTU9EVUxBVElPTjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JU0RCVC1MQVlFUi1TRUdNRU5ULUNPVU5UIj48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQ19TRUdNRU5UX0NPVU5UPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJULUxBWUVSLVRJTUUtSU5URVJMRUFWSU5HIj48Y29uc3RhbnQ+RFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORzwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L2l0ZW1pemVkbGlzdD4KKwkJPC9zZWN0aW9uPgorCQk8c2VjdGlvbiBpZD0iYXRzYy1wYXJhbXMiPgorCQkJPHRpdGxlPkFUU0MgZGVsaXZlcnkgc3lzdGVtPC90aXRsZT4KKwkJCTxwYXJhPlRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgdmFsaWQgZm9yIEFUU0M6PC9wYXJhPgorCQkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUFQSS1WRVJTSU9OIj48Y29uc3RhbnQ+RFRWX0FQSV9WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ERUxJVkVSWS1TWVNURU0iPjxjb25zdGFudD5EVFZfREVMSVZFUllfU1lTVEVNPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNMRUFSIj48Y29uc3RhbnQ+RFRWX0NMRUFSPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1GUkVRVUVOQ1kiPjxjb25zdGFudD5EVFZfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1NT0RVTEFUSU9OIj48Y29uc3RhbnQ+RFRWX01PRFVMQVRJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUJBTkRXSURUSC1IWiI+PGNvbnN0YW50PkRUVl9CQU5EV0lEVEhfSFo8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTwvaXRlbWl6ZWRsaXN0PgorCQk8L3NlY3Rpb24+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJmcm9udGVuZC1wcm9wZXJ0eS1jYWJsZS1zeXN0ZW1zIj4KKwk8dGl0bGU+UHJvcGVydGllcyB1c2VkIG9uIGNhYmxlIGRlbGl2ZXJ5IHN5c3RlbXM8L3RpdGxlPgorCTxzZWN0aW9uIGlkPSJkdmJjLXBhcmFtcyI+CisJCTx0aXRsZT5EVkItQyBkZWxpdmVyeSBzeXN0ZW08L3RpdGxlPgorCQk8cGFyYT5UaGUgRFZCLUMgQW5uZXgtQS9DIGlzIHRoZSB3aWRlbHkgdXNlZCBjYWJsZSBzdGFuZGFyZC4gVHJhbnNtaXNzaW9uIHVzZXMgUUFNIG1vZHVsYXRpb24uPC9wYXJhPgorCQk8cGFyYT5UaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGZvciBEVkItQyBBbm5leCBBL0M6PC9wYXJhPgorCQk8aXRlbWl6ZWRsaXN0IG1hcms9J29wZW5jaXJjbGUnPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1BUEktVkVSU0lPTiI+PGNvbnN0YW50PkRUVl9BUElfVkVSU0lPTjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ERUxJVkVSWS1TWVNURU0iPjxjb25zdGFudD5EVFZfREVMSVZFUllfU1lTVEVNPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVRVTkUiPjxjb25zdGFudD5EVFZfVFVORTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1DTEVBUiI+PGNvbnN0YW50PkRUVl9DTEVBUjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1GUkVRVUVOQ1kiPjxjb25zdGFudD5EVFZfRlJFUVVFTkNZPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLU1PRFVMQVRJT04iPjxjb25zdGFudD5EVFZfTU9EVUxBVElPTjwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JTlZFUlNJT04iPjxjb25zdGFudD5EVFZfSU5WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVNZTUJPTC1SQVRFIj48Y29uc3RhbnQ+RFRWX1NZTUJPTF9SQVRFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOTkVSLUZFQyI+PGNvbnN0YW50PkRUVl9JTk5FUl9GRUM8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJPC9zZWN0aW9uPgorCTxzZWN0aW9uIGlkPSJkdmJjLWFubmV4LWItcGFyYW1zIj4KKwkJPHRpdGxlPkRWQi1DIEFubmV4IEIgZGVsaXZlcnkgc3lzdGVtPC90aXRsZT4KKwkJPHBhcmE+VGhlIERWQi1DIEFubmV4LUIgaXMgb25seSB1c2VkIG9uIGEgZmV3IENvdW50cmllcyBsaWtlIHRoZSBVbml0ZWQgU3RhdGVzLjwvcGFyYT4KKwkJPHBhcmE+VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBmb3IgRFZCLUMgQW5uZXggQjo8L3BhcmE+CisJCTxpdGVtaXplZGxpc3QgbWFyaz0nb3BlbmNpcmNsZSc+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUFQSS1WRVJTSU9OIj48Y29uc3RhbnQ+RFRWX0FQSV9WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLURFTElWRVJZLVNZU1RFTSI+PGNvbnN0YW50PkRUVl9ERUxJVkVSWV9TWVNURU08L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtVFVORSI+PGNvbnN0YW50PkRUVl9UVU5FPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUNMRUFSIj48Y29uc3RhbnQ+RFRWX0NMRUFSPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUZSRVFVRU5DWSI+PGNvbnN0YW50PkRUVl9GUkVRVUVOQ1k8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtTU9EVUxBVElPTiI+PGNvbnN0YW50PkRUVl9NT0RVTEFUSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOVkVSU0lPTiI+PGNvbnN0YW50PkRUVl9JTlZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJPC9zZWN0aW9uPgorCTwvc2VjdGlvbj4KKwk8c2VjdGlvbiBpZD0iZnJvbnRlbmQtcHJvcGVydHktc2F0ZWxsaXRhbC1zeXN0ZW1zIj4KKwk8dGl0bGU+UHJvcGVydGllcyB1c2VkIG9uIHNhdGVsbGl0YWwgZGVsaXZlcnkgc3lzdGVtczwvdGl0bGU+CisJPHNlY3Rpb24gaWQ9ImR2YnMtcGFyYW1zIj4KKwkJPHRpdGxlPkRWQi1TIGRlbGl2ZXJ5IHN5c3RlbTwvdGl0bGU+CisJCTxwYXJhPlRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgdmFsaWQgZm9yIERWQi1TOjwvcGFyYT4KKwkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQVBJLVZFUlNJT04iPjxjb25zdGFudD5EVFZfQVBJX1ZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ0xFQVIiPjxjb25zdGFudD5EVFZfQ0xFQVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRlJFUVVFTkNZIj48Y29uc3RhbnQ+RFRWX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JTlZFUlNJT04iPjxjb25zdGFudD5EVFZfSU5WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVNZTUJPTC1SQVRFIj48Y29uc3RhbnQ+RFRWX1NZTUJPTF9SQVRFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOTkVSLUZFQyI+PGNvbnN0YW50PkRUVl9JTk5FUl9GRUM8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJCTxwYXJhPkZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWlnaHQgYWRkIHRob3NlIHR3byBtaXNzaW5nIHBhcmFtZXRlcnM6PC9wYXJhPgorCQk8aXRlbWl6ZWRsaXN0IG1hcms9J29wZW5jaXJjbGUnPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ESVNFUUMtTUFTVEVSIj48Y29uc3RhbnQ+RFRWX0RJU0VRQ19NQVNURVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRElTRVFDLVNMQVZFLVJFUExZIj48Y29uc3RhbnQ+RFRWX0RJU0VRQ19TTEFWRV9SRVBMWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L2l0ZW1pemVkbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9ImR2YnMyLXBhcmFtcyI+CisJCTx0aXRsZT5EVkItUzIgZGVsaXZlcnkgc3lzdGVtPC90aXRsZT4KKwkJPHBhcmE+VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBmb3IgRFZCLVMyOjwvcGFyYT4KKwkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQVBJLVZFUlNJT04iPjxjb25zdGFudD5EVFZfQVBJX1ZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ0xFQVIiPjxjb25zdGFudD5EVFZfQ0xFQVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRlJFUVVFTkNZIj48Y29uc3RhbnQ+RFRWX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JTlZFUlNJT04iPjxjb25zdGFudD5EVFZfSU5WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVNZTUJPTC1SQVRFIj48Y29uc3RhbnQ+RFRWX1NZTUJPTF9SQVRFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOTkVSLUZFQyI+PGNvbnN0YW50PkRUVl9JTk5FUl9GRUM8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtVk9MVEFHRSI+PGNvbnN0YW50PkRUVl9WT0xUQUdFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVRPTkUiPjxjb25zdGFudD5EVFZfVE9ORTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1QSUxPVCI+PGNvbnN0YW50PkRUVl9QSUxPVDwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ST0xMT0ZGIj48Y29uc3RhbnQ+RFRWX1JPTExPRkY8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJPC9pdGVtaXplZGxpc3Q+CisJCTxwYXJhPkZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWlnaHQgYWRkIHRob3NlIHR3byBtaXNzaW5nIHBhcmFtZXRlcnM6PC9wYXJhPgorCQk8aXRlbWl6ZWRsaXN0IG1hcms9J29wZW5jaXJjbGUnPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1ESVNFUUMtTUFTVEVSIj48Y29uc3RhbnQ+RFRWX0RJU0VRQ19NQVNURVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRElTRVFDLVNMQVZFLVJFUExZIj48Y29uc3RhbnQ+RFRWX0RJU0VRQ19TTEFWRV9SRVBMWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQk8L2l0ZW1pemVkbGlzdD4KKwk8L3NlY3Rpb24+CisJPHNlY3Rpb24gaWQ9ImlzZGJzLXBhcmFtcyI+CisJCTx0aXRsZT5JU0RCLVMgZGVsaXZlcnkgc3lzdGVtPC90aXRsZT4KKwkJPHBhcmE+VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBmb3IgSVNEQi1TOjwvcGFyYT4KKwkJPGl0ZW1pemVkbGlzdCBtYXJrPSdvcGVuY2lyY2xlJz4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQVBJLVZFUlNJT04iPjxjb25zdGFudD5EVFZfQVBJX1ZFUlNJT048L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj48Y29uc3RhbnQ+RFRWX0RFTElWRVJZX1NZU1RFTTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1UVU5FIj48Y29uc3RhbnQ+RFRWX1RVTkU8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtQ0xFQVIiPjxjb25zdGFudD5EVFZfQ0xFQVI8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtRlJFUVVFTkNZIj48Y29uc3RhbnQ+RFRWX0ZSRVFVRU5DWTwvY29uc3RhbnQ+PC9saW5rPjwvcGFyYT48L2xpc3RpdGVtPgorCQkJPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9IkRUVi1JTlZFUlNJT04iPjxjb25zdGFudD5EVFZfSU5WRVJTSU9OPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLVNZTUJPTC1SQVRFIj48Y29uc3RhbnQ+RFRWX1NZTUJPTF9SQVRFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlOTkVSLUZFQyI+PGNvbnN0YW50PkRUVl9JTk5FUl9GRUM8L2NvbnN0YW50PjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKwkJCTxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSJEVFYtVk9MVEFHRSI+PGNvbnN0YW50PkRUVl9WT0xUQUdFPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCQk8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0iRFRWLUlTREJTLVRTLUlEIj48Y29uc3RhbnQ+RFRWX0lTREJTX1RTX0lEPC9jb25zdGFudD48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisJCTwvaXRlbWl6ZWRsaXN0PgorCTwvc2VjdGlvbj4KKwk8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2R2YnN0Yi5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2R2YnN0Yi5wZGYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZHZic3RiLnBkZgpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9kdmJzdGIucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZXhhbXBsZXMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9leGFtcGxlcy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay9kdmIvZXhhbXBsZXMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2V4YW1wbGVzLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2Zyb250ZW5kLnhtbApzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2Zyb250ZW5kLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9mcm9udGVuZC54bWwKaW5kZXggNjBjNjk3Ni4uNjE0MDdlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9mcm9udGVuZC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9mcm9udGVuZC54bWwKQEAgLTIwLDIyICsyMCw1MiBAQAogPHNlY3Rpb24gaWQ9ImZyb250ZW5kX3R5cGVzIj4KIDx0aXRsZT5Gcm9udGVuZCBEYXRhIFR5cGVzPC90aXRsZT4KIAotPHNlY3Rpb24gaWQ9ImZyb250ZW5kX3R5cGUiPgotPHRpdGxlPmZyb250ZW5kIHR5cGU8L3RpdGxlPgorPHNlY3Rpb24gaWQ9ImZlLXR5cGUtdCI+Cis8dGl0bGU+RnJvbnRlbmQgdHlwZTwvdGl0bGU+CiAKLTxwYXJhPkZvciBoaXN0b3JpY2FsIHJlYXNvbnMgZnJvbnRlbmQgdHlwZXMgYXJlIG5hbWVkIGFmdGVyIHRoZSB0eXBlIG9mIG1vZHVsYXRpb24gdXNlZCBpbgotdHJhbnNtaXNzaW9uLjwvcGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLQl0eXBlZGVmIGVudW0gZmVfdHlwZSB7Ci0JRkVfUVBTSywgICAvJiN4MjJDNjsgRFZCLVMgJiN4MjJDNjsvCi0JRkVfUUFNLCAgICAvJiN4MjJDNjsgRFZCLUMgJiN4MjJDNjsvCi0JRkVfT0ZETSAgICAvJiN4MjJDNjsgRFZCLVQgJiN4MjJDNjsvCi0JfSBmZV90eXBlX3Q7Ci08L3Byb2dyYW1saXN0aW5nPgorPHBhcmE+Rm9yIGhpc3RvcmljYWwgcmVhc29ucywgZnJvbnRlbmQgdHlwZXMgYXJlIG5hbWVkIGJ5IHRoZSB0eXBlIG9mIG1vZHVsYXRpb24gdXNlZCBpbgordHJhbnNtaXNzaW9uLiBUaGUgZm9udGVuZCB0eXBlcyBhcmUgZ2l2ZW4gYnkgZmVfdHlwZV90IHR5cGUsIGRlZmluZWQgYXM6PC9wYXJhPgogCis8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZlLXR5cGUiPgorPHRpdGxlPkZyb250ZW5kIHR5cGVzPC90aXRsZT4KKzx0Z3JvdXAgY29scz0iMyI+CisgICAmY3MtZGVmOworICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgIDxlbnRyeT5mZV90eXBlPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+RGVzY3JpcHRpb248L2VudHJ5PgorICAgICAgIDxlbnRyeT48bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj5EVFZfREVMSVZFUllfU1lTVEVNPC9saW5rPiBlcXVpdmFsZW50IHR5cGU8L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgPC90aGVhZD4KKyAgPHRib2R5IHZhbGlnbj0idG9wIj4KKyAgPHJvdz4KKyAgICAgPGVudHJ5IGlkPSJGRV9RUFNLIj48Y29uc3RhbnQ+RkVfUVBTSzwvY29uc3RhbnQ+PC9lbnRyeT4KKyAgICAgPGVudHJ5PkZvciBEVkItUyBzdGFuZGFyZDwvZW50cnk+CisgICAgIDxlbnRyeT48Y29uc3RhbnQ+U1lTX0RWQlM8L2NvbnN0YW50PjwvZW50cnk+CisgIDwvcm93PgorICA8cm93PgorICAgICA8ZW50cnkgaWQ9IkZFX1FBTSI+PGNvbnN0YW50PkZFX1FBTTwvY29uc3RhbnQ+PC9lbnRyeT4KKyAgICAgPGVudHJ5PkZvciBEVkItQyBhbm5leCBBL0Mgc3RhbmRhcmQ8L2VudHJ5PgorICAgICA8ZW50cnk+PGNvbnN0YW50PlNZU19EVkJDX0FOTkVYX0FDPC9jb25zdGFudD48L2VudHJ5PgorICA8L3Jvdz4KKyAgPHJvdz4KKyAgICAgPGVudHJ5IGlkPSJGRV9PRkRNIj48Y29uc3RhbnQ+RkVfT0ZETTwvY29uc3RhbnQ+PC9lbnRyeT4KKyAgICAgPGVudHJ5PkZvciBEVkItVCBzdGFuZGFyZDwvZW50cnk+CisgICAgIDxlbnRyeT48Y29uc3RhbnQ+U1lTX0RWQlQ8L2NvbnN0YW50PjwvZW50cnk+CisgIDwvcm93PgorICA8cm93PgorICAgICA8ZW50cnkgaWQ9IkZFX0FUU0MiPjxjb25zdGFudD5GRV9BVFNDPC9jb25zdGFudD48L2VudHJ5PgorICAgICA8ZW50cnk+Rm9yIEFUU0Mgc3RhbmRhcmQgKHRlcnJlc3RyaWFsKSBvciBmb3IgRFZCLUMgQW5uZXggQiAoY2FibGUpIHVzZWQgaW4gVVMuPC9lbnRyeT4KKyAgICAgPGVudHJ5Pjxjb25zdGFudD5TWVNfQVRTQzwvY29uc3RhbnQ+ICh0ZXJyZXN0cmlhbCkgb3IgPGNvbnN0YW50PlNZU19EVkJDX0FOTkVYX0I8L2NvbnN0YW50PiAoY2FibGUpPC9lbnRyeT4KKyAgPC9yb3c+Cis8L3Rib2R5PjwvdGdyb3VwPjwvdGFibGU+CisKKzxwYXJhPk5ld2VyIGZvcm1hdHMgbGlrZSBEVkItUzIsIElTREItVCwgSVNEQi1TIGFuZCBEVkItVDIgYXJlIG5vdCBkZXNjcmliZWQgYXQgdGhlIGFib3ZlLCBhcyB0aGV5J3JlCitzdXBwb3J0ZWQgdmlhIHRoZSBuZXcgPGxpbmsgbGlua2VuZD0iRkVfR0VUX1NFVF9QUk9QRVJUWSI+RkVfR0VUX1BST1BFUlRZL0ZFX0dFVF9TRVRfUFJPUEVSVFk8L2xpbms+IGlvY3RsJ3MsIHVzaW5nIHRoZSA8bGluayBsaW5rZW5kPSJEVFYtREVMSVZFUlktU1lTVEVNIj5EVFZfREVMSVZFUllfU1lTVEVNPC9saW5rPiBwYXJhbWV0ZXIuCis8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJmcm9udGVuZF9jYXBzIj4KKzxzZWN0aW9uIGlkPSJmZS1jYXBzLXQiPgogPHRpdGxlPmZyb250ZW5kIGNhcGFiaWxpdGllczwvdGl0bGU+CiAKIDxwYXJhPkNhcGFiaWxpdGllcyBkZXNjcmliZSB3aGF0IGEgZnJvbnRlbmQgY2FuIGRvLiBTb21lIGNhcGFiaWxpdGllcyBjYW4gb25seSBiZSBzdXBwb3J0ZWQgZm9yCkBAIC03Niw3ICsxMDYsNyBAQAogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2luZm8iPgorPHNlY3Rpb24gaWQ9ImR2Yi1mcm9udGVuZC1pbmZvIj4KIDx0aXRsZT5mcm9udGVuZCBpbmZvcm1hdGlvbjwvdGl0bGU+CiAKIDxwYXJhPkluZm9ybWF0aW9uIGFib3V0IHRoZSBmcm9udGVuZCBjYSBiZSBxdWVyaWVkIHdpdGgKQEAgLTk5LDcgKzEyOSw3IEBACiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZnJvbnRlbmRfZGlzZXFjIj4KKzxzZWN0aW9uIGlkPSJkdmItZGlzZXFjLW1hc3Rlci1jbWQiPgogPHRpdGxlPmRpc2VxYyBtYXN0ZXIgY29tbWFuZDwvdGl0bGU+CiAKIDxwYXJhPkEgbWVzc2FnZSBzZW50IGZyb20gdGhlIGZyb250ZW5kIHRvIERpU0VxQyBjYXBhYmxlIGVxdWlwbWVudC48L3BhcmE+CkBAIC0xMTAsNyArMTQwLDcgQEAKIAl9OwogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KLTxzZWN0aW9uIHJvbGU9InN1YnNlY3Rpb24iPgorPHNlY3Rpb24gcm9sZT0ic3Vic2VjdGlvbiIgaWQ9ImR2Yi1kaXNlcWMtc2xhdmUtcmVwbHkiPgogPHRpdGxlPmRpc2VxYyBzbGF2ZSByZXBseTwvdGl0bGU+CiAKIDxwYXJhPkEgcmVwbHkgdG8gdGhlIGZyb250ZW5kIGZyb20gRGlTRXFDIDIuMCBjYXBhYmxlIGVxdWlwbWVudC48L3BhcmE+CkBAIC0xMjMsNyArMTUzLDcgQEAKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJmcm9udGVuZF9kaXNlcWNfc2xhdmVfcmVwbHkiPgorPHNlY3Rpb24gaWQ9ImZlLXNlYy12b2x0YWdlLXQiPgogPHRpdGxlPmRpc2VxYyBzbGF2ZSByZXBseTwvdGl0bGU+CiA8cGFyYT5UaGUgdm9sdGFnZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlIHBvbGFyemF0aW9uCiAoaG9yaXpvbnRhbC92ZXJ0aWNhbCkuIFdoZW4gdXNpbmcgRGlTRXFDIGVwdWlwbWVudCB0aGlzIHZvbHRhZ2UgaGFzIHRvIGJlIHN3aXRjaGVkCkBAIC0xMzYsNyArMTY2LDcgQEAKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZWNfdG9uZSI+Cis8c2VjdGlvbiBpZD0iZmUtc2VjLXRvbmUtbW9kZS10Ij4KIDx0aXRsZT5TRUMgY29udGludW91cyB0b25lPC90aXRsZT4KIAogPHBhcmE+VGhlIGNvbnRpbnVvdXMgMjJLSHogdG9uZSBpcyB1c3VhbGx5IHVzZWQgd2l0aCBub24tRGlTRXFDIGNhcGFibGUgTE5CcyB0byBzd2l0Y2ggdGhlCkBAIC0xNTEsNyArMTgxLDcgQEAKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJmcm9udGVuZF9zZWNfYnVyc3QiPgorPHNlY3Rpb24gaWQ9ImZlLXNlYy1taW5pLWNtZC10Ij4KIDx0aXRsZT5TRUMgdG9uZSBidXJzdDwvdGl0bGU+CiAKIDxwYXJhPlRoZSAyMktIeiB0b25lIGJ1cnN0IGlzIHVzdWFsbHkgdXNlZCB3aXRoIG5vbi1EaVNFcUMgY2FwYWJsZSBzd2l0Y2hlcyB0byBzZWxlY3QKQEAgLTE2OCw3ICsxOTgsNyBAQAogPHBhcmE+PC9wYXJhPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZnJvbnRlbmRfc3RhdHVzIj4KKzxzZWN0aW9uIGlkPSJmZS1zdGF0dXMtdCI+CiA8dGl0bGU+ZnJvbnRlbmQgc3RhdHVzPC90aXRsZT4KIDxwYXJhPlNldmVyYWwgZnVuY3Rpb25zIG9mIHRoZSBmcm9udGVuZCBkZXZpY2UgdXNlIHRoZSBmZV9zdGF0dXMgZGF0YSB0eXBlIGRlZmluZWQKIGJ5PC9wYXJhPgpAQCAtMTg4LDMxICsyMTgsNTQgQEAKIAogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0iZnJvbnRlbmRfcGFyYW1zIj4KKzxzZWN0aW9uIGlkPSJkdmItZnJvbnRlbmQtcGFyYW1ldGVycyI+CiA8dGl0bGU+ZnJvbnRlbmQgcGFyYW1ldGVyczwvdGl0bGU+CiA8cGFyYT5UaGUga2luZCBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZnJvbnRlbmQgZGV2aWNlIGZvciB0dW5pbmcgZGVwZW5kIG9uCi10aGUga2luZCBvZiBoYXJkd2FyZSB5b3UgYXJlIHVzaW5nLiBBbGwga2luZHMgb2YgcGFyYW1ldGVycyBhcmUgY29tYmluZWQgYXMgYW4KLXVuaW9uIGluIHRoZSBGcm9udGVuZFBhcmFtZXRlcnMgc3RydWN0dXJlOjwvcGFyYT4KK3RoZSBraW5kIG9mIGhhcmR3YXJlIHlvdSBhcmUgdXNpbmcuPC9wYXJhPgorPHBhcmE+VGhlIHN0cnVjdCA8Y29uc3RhbnQ+ZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnM8L2NvbnN0YW50PiB1c2VzIGFuCit1bmlvbiB3aXRoIHNwZWNpZmljIHBlci1zeXN0ZW0gcGFyYW1ldGVycy4gSG93ZXZlciwgYXMgbmV3ZXIgZGVsaXZlcnkgc3lzdGVtcworcmVxdWlyZWQgbW9yZSBkYXRhLCB0aGUgc3RydWN0dXJlIHNpemUgd2VyZW4ndCBlbm91Z2ggdG8gZml0LCBhbmQganVzdAorZXh0ZW5kaW5nIGl0cyBzaXplIHdvdWxkIGJyZWFrIHRoZSBleGlzdGluZyBhcHBsaWNhdGlvbnMuIFNvLCB0aG9zZSBwYXJhbWV0ZXJzCit3ZXJlIHJlcGxhY2VkIGJ5IHRoZSB1c2FnZSBvZiA8bGluayBsaW5rZW5kPSJGRV9HRVRfU0VUX1BST1BFUlRZIj4KKzxjb25zdGFudD5GRV9HRVRfUFJPUEVSVFkvRkVfU0VUX1BST1BFUlRZPC9jb25zdGFudD48L2xpbms+IGlvY3RsJ3MuIFRoZQorbmV3IEFQSSBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gYWRkIG5ldyBwYXJhbWV0ZXJzIHRvIGV4aXN0aW5nIGRlbGl2ZXJ5IHN5c3RlbXMsCithbmQgdG8gYWRkIG5ld2VyIGRlbGl2ZXJ5IHN5c3RlbXMuPC9wYXJhPgorPHBhcmE+U28sIG5ld2VyIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIDxsaW5rIGxpbmtlbmQ9IkZFX0dFVF9TRVRfUFJPUEVSVFkiPgorPGNvbnN0YW50PkZFX0dFVF9QUk9QRVJUWS9GRV9TRVRfUFJPUEVSVFk8L2NvbnN0YW50PjwvbGluaz4gaW5zdGVhZCwgaW4KK29yZGVyIHRvIGJlIGFibGUgdG8gc3VwcG9ydCB0aGUgbmV3ZXIgU3lzdGVtIERlbGl2ZXJ5IGxpa2UgIERWQi1TMiwgRFZCLVQyLAorRFZCLUMyLCBJU0RCLCBldGMuPC9wYXJhPgorPHBhcmE+QWxsIGtpbmRzIG9mIHBhcmFtZXRlcnMgYXJlIGNvbWJpbmVkIGFzIGFuIHVuaW9uIGluIHRoZSBGcm9udGVuZFBhcmFtZXRlcnMgc3RydWN0dXJlOjwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgewotCSB1aW50MzJfdCBmcmVxdWVuY3k7ICAgICAgIC8mI3gyMkM2OyAoYWJzb2x1dGUpIGZyZXF1ZW5jeSBpbiBIeiBmb3IgUUFNL09GRE0gJiN4MjJDNjsvCi0JCQkJICAgLyYjeDIyQzY7IGludGVybWVkaWF0ZSBmcmVxdWVuY3kgaW4ga0h6IGZvciBRUFNLICYjeDIyQzY7LwotCSBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247Ci0JIHVuaW9uIHsKLQkJIHN0cnVjdCBkdmJfcXBza19wYXJhbWV0ZXJzIHFwc2s7Ci0JCSBzdHJ1Y3QgZHZiX3FhbV9wYXJhbWV0ZXJzICBxYW07Ci0JCSBzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyBvZmRtOwotCSB9IHU7Ci0gfTsKK3N0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyB7CisJdWludDMyX3QgZnJlcXVlbmN5OyAgICAgLyYjeDIyQzY7IChhYnNvbHV0ZSkgZnJlcXVlbmN5IGluIEh6IGZvciBRQU0vT0ZETSAmI3gyMkM2Oy8KKwkJCQkvJiN4MjJDNjsgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBpbiBrSHogZm9yIFFQU0sgJiN4MjJDNjsvCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uOworCXVuaW9uIHsKKwkJc3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnMgcXBzazsKKwkJc3RydWN0IGR2Yl9xYW1fcGFyYW1ldGVycyAgcWFtOworCQlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyBvZmRtOworCQlzdHJ1Y3QgZHZiX3ZzYl9wYXJhbWV0ZXJzICB2c2I7CisJfSB1OworfTsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci08cGFyYT5Gb3Igc2F0ZWxsaXRlIFFQU0sgZnJvbnRlbmRzIHlvdSBoYXZlIHRvIHVzZSB0aGUgPGNvbnN0YW50PlFQU0tQYXJhbWV0ZXJzPC9jb25zdGFudD4gbWVtYmVyIGRlZmluZWQgYnk8L3BhcmE+Cis8cGFyYT5JbiB0aGUgY2FzZSBvZiBRUFNLIGZyb250ZW5kcyB0aGUgPGNvbnN0YW50PmZyZXF1ZW5jeTwvY29uc3RhbnQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgaW50ZXJtZWRpYXRlCitmcmVxdWVuY3ksIGkuZS4gdGhlIG9mZnNldCB3aGljaCBpcyBlZmZlY3RpdmVseSBhZGRlZCB0byB0aGUgbG9jYWwgb3NjaWxsYXRvciBmcmVxdWVuY3kgKExPRikgb2YKK3RoZSBMTkIuIFRoZSBpbnRlcm1lZGlhdGUgZnJlcXVlbmN5IGhhcyB0byBiZSBzcGVjaWZpZWQgaW4gdW5pdHMgb2Yga0h6LiBGb3IgUUFNIGFuZAorT0ZETSBmcm9udGVuZHMgdGhlIDxjb25zdGFudD5mcmVxdWVuY3k8L2NvbnN0YW50PiBzcGVjaWZpZXMgdGhlIGFic29sdXRlIGZyZXF1ZW5jeSBhbmQgaXMgZ2l2ZW4gaW4gSHouCis8L3BhcmE+Cis8c2VjdGlvbiBpZD0iZHZiLXFwc2stcGFyYW1ldGVycyI+Cis8dGl0bGU+UVBTSyBwYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPkZvciBzYXRlbGxpdGUgUVBTSyBmcm9udGVuZHMgeW91IGhhdmUgdG8gdXNlIHRoZSA8Y29uc3RhbnQ+ZHZiX3Fwc2tfcGFyYW1ldGVyczwvY29uc3RhbnQ+IHN0cnVjdHVyZTo8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiAgc3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnMgewogCSB1aW50MzJfdCAgICAgICAgc3ltYm9sX3JhdGU7ICAvJiN4MjJDNjsgc3ltYm9sIHJhdGUgaW4gU3ltYm9scyBwZXIgc2Vjb25kICYjeDIyQzY7LwogCSBmZV9jb2RlX3JhdGVfdCAgZmVjX2lubmVyOyAgICAvJiN4MjJDNjsgZm9yd2FyZCBlcnJvciBjb3JyZWN0aW9uIChzZWUgYWJvdmUpICYjeDIyQzY7LwogIH07CiA8L3Byb2dyYW1saXN0aW5nPgotPHBhcmE+Zm9yIGNhYmxlIFFBTSBmcm9udGVuZCB5b3UgdXNlIHRoZSA8Y29uc3RhbnQ+UUFNUGFyYW1ldGVyczwvY29uc3RhbnQ+IHN0cnVjdHVyZTwvcGFyYT4KKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkdmItcWFtLXBhcmFtZXRlcnMiPgorPHRpdGxlPlFBTSBwYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPmZvciBjYWJsZSBRQU0gZnJvbnRlbmQgeW91IHVzZSB0aGUgPGNvbnN0YW50PmR2Yl9xYW1fcGFyYW1ldGVyczwvY29uc3RhbnQ+IHN0cnVjdHVyZTo8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiAgc3RydWN0IGR2Yl9xYW1fcGFyYW1ldGVycyB7CiAJIHVpbnQzMl90ICAgICAgICAgc3ltYm9sX3JhdGU7IC8mI3gyMkM2OyBzeW1ib2wgcmF0ZSBpbiBTeW1ib2xzIHBlciBzZWNvbmQgJiN4MjJDNjsvCkBAIC0yMjAsOCArMjczLDE5IEBACiAJIGZlX21vZHVsYXRpb25fdCAgbW9kdWxhdGlvbjsgIC8mI3gyMkM2OyBtb2R1bGF0aW9uIHR5cGUgKHNlZSBhYm92ZSkgJiN4MjJDNjsvCiAgfTsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci08cGFyYT5EVkItVCBmcm9udGVuZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgPGNvbnN0YW50Pk9GRE1QYXJhbXRlcnM8L2NvbnN0YW50PiBzdHJ1Y3R1cmUKLTwvcGFyYT4KKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkdmItdnNiLXBhcmFtZXRlcnMiPgorPHRpdGxlPlZTQiBwYXJhbWV0ZXJzPC90aXRsZT4KKzxwYXJhPkFUU0MgZnJvbnRlbmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxjb25zdGFudD5kdmJfdnNiX3BhcmFtZXRlcnM8L2NvbnN0YW50PiBzdHJ1Y3R1cmU6PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorc3RydWN0IGR2Yl92c2JfcGFyYW1ldGVycyB7CisJZmVfbW9kdWxhdGlvbl90IG1vZHVsYXRpb247CS8mI3gyMkM2OyBtb2R1bGF0aW9uIHR5cGUgKHNlZSBhYm92ZSkgJiN4MjJDNjsvCit9OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJkdmItb2ZkbS1wYXJhbWV0ZXJzIj4KKzx0aXRsZT5PRkRNIHBhcmFtZXRlcnM8L3RpdGxlPgorPHBhcmE+RFZCLVQgZnJvbnRlbmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIDxjb25zdGFudD5kdmJfb2ZkbV9wYXJhbWV0ZXJzPC9jb25zdGFudD4gc3RydWN0dXJlOjwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KICBzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyB7CiAJIGZlX2JhbmR3aWR0aF90ICAgICAgYmFuZHdpZHRoOwpAQCAtMjMzLDg2ICsyOTcsMTI0IEBACiAJIGZlX2hpZXJhcmNoeV90ICAgICAgaGllcmFyY2h5X2luZm9ybWF0aW9uOwogIH07CiA8L3Byb2dyYW1saXN0aW5nPgotPHBhcmE+SW4gdGhlIGNhc2Ugb2YgUVBTSyBmcm9udGVuZHMgdGhlIDxjb25zdGFudD5GcmVxdWVuY3k8L2NvbnN0YW50PiBmaWVsZCBzcGVjaWZpZXMgdGhlIGludGVybWVkaWF0ZQotZnJlcXVlbmN5LCBpLmUuIHRoZSBvZmZzZXQgd2hpY2ggaXMgZWZmZWN0aXZlbHkgYWRkZWQgdG8gdGhlIGxvY2FsIG9zY2lsbGF0b3IgZnJlcXVlbmN5IChMT0YpIG9mCi10aGUgTE5CLiBUaGUgaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBoYXMgdG8gYmUgc3BlY2lmaWVkIGluIHVuaXRzIG9mIGtIei4gRm9yIFFBTSBhbmQKLU9GRE0gZnJvbnRlbmRzIHRoZSBGcmVxdWVuY3kgc3BlY2lmaWVzIHRoZSBhYnNvbHV0ZSBmcmVxdWVuY3kgYW5kIGlzIGdpdmVuIGluCi1Iei4KLTwvcGFyYT4KKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJmZS1zcGVjdHJhbC1pbnZlcnNpb24tdCI+Cis8dGl0bGU+ZnJvbnRlbmQgc3BlY3RyYWwgaW52ZXJzaW9uPC90aXRsZT4KIDxwYXJhPlRoZSBJbnZlcnNpb24gZmllbGQgY2FuIHRha2Ugb25lIG9mIHRoZXNlIHZhbHVlczoKIDwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIGVudW0gZmVfc3BlY3RyYWxfaW52ZXJzaW9uIHsKLQkgSU5WRVJTSU9OX09GRiwKLQkgSU5WRVJTSU9OX09OLAotCSBJTlZFUlNJT05fQVVUTwotIH0gZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3Q7Cit0eXBlZGVmIGVudW0gZmVfc3BlY3RyYWxfaW52ZXJzaW9uIHsKKwlJTlZFUlNJT05fT0ZGLAorCUlOVkVSU0lPTl9PTiwKKwlJTlZFUlNJT05fQVVUTworfSBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8cGFyYT5JdCBpbmRpY2F0ZXMgaWYgc3BlY3RyYWwgaW52ZXJzaW9uIHNob3VsZCBiZSBwcmVzdW1lZCBvciBub3QuIEluIHRoZSBhdXRvbWF0aWMgc2V0dGluZwogKDxjb25zdGFudD5JTlZFUlNJT05fQVVUTzwvY29uc3RhbnQ+KSB0aGUgaGFyZHdhcmUgd2lsbCB0cnkgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzZXR0aW5nIGJ5CiBpdHNlbGYuCiA8L3BhcmE+Ci08cGFyYT5UaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgPGNvbnN0YW50PkZFQ19pbm5lcjwvY29uc3RhbnQ+IGZpZWxkIGFyZQorPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImZlLWNvZGUtcmF0ZS10Ij4KKzx0aXRsZT5mcm9udGVuZCBjb2RlIHJhdGU8L3RpdGxlPgorPHBhcmE+VGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIDxjb25zdGFudD5mZWNfaW5uZXI8L2NvbnN0YW50PiBmaWVsZCB1c2VkIG9uCis8bGluayByZWZlbmQ9ImR2Yi1xcHNrLXBhcmFtZXRlcnMiPjxjb25zdGFudD5zdHJ1Y3QgZHZiX3Fwc2tfcGFyYW1ldGVyczwvY29uc3RhbnQ+PC9saW5rPiBhbmQKKzxsaW5rIHJlZmVuZD0iZHZiLXFhbS1wYXJhbWV0ZXJzIj48Y29uc3RhbnQ+c3RydWN0IGR2Yl9xYW1fcGFyYW1ldGVyczwvY29uc3RhbnQ+PC9saW5rPiBhcmU6CiA8L3BhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7Ci0JIEZFQ19OT05FID0gMCwKLQkgRkVDXzFfMiwKLQkgRkVDXzJfMywKLQkgRkVDXzNfNCwKLQkgRkVDXzRfNSwKLQkgRkVDXzVfNiwKLQkgRkVDXzZfNywKLQkgRkVDXzdfOCwKLQkgRkVDXzhfOSwKLQkgRkVDX0FVVE8KLSB9IGZlX2NvZGVfcmF0ZV90OwordHlwZWRlZiBlbnVtIGZlX2NvZGVfcmF0ZSB7CisJRkVDX05PTkUgPSAwLAorCUZFQ18xXzIsCisJRkVDXzJfMywKKwlGRUNfM180LAorCUZFQ180XzUsCisJRkVDXzVfNiwKKwlGRUNfNl83LAorCUZFQ183XzgsCisJRkVDXzhfOSwKKwlGRUNfQVVUTywKKwlGRUNfM181LAorCUZFQ185XzEwLAorfSBmZV9jb2RlX3JhdGVfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8cGFyYT53aGljaCBjb3JyZXNwb25kIHRvIGVycm9yIGNvcnJlY3Rpb24gcmF0ZXMgb2YgMS8yLCAyLzMsIGV0Yy4sIG5vIGVycm9yIGNvcnJlY3Rpb24gb3IgYXV0bwogZGV0ZWN0aW9uLgogPC9wYXJhPgotPHBhcmE+Rm9yIGNhYmxlIGFuZCB0ZXJyZXN0cmlhbCBmcm9udGVuZHMgKFFBTSBhbmQgT0ZETSkgb25lIGFsc28gaGFzIHRvIHNwZWNpZnkgdGhlIHF1YWRyYXR1cmUKLW1vZHVsYXRpb24gbW9kZSB3aGljaCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZmUtbW9kdWxhdGlvbi10Ij4KKzx0aXRsZT5mcm9udGVuZCBtb2R1bGF0aW9uIHR5cGUgZm9yIFFBTSwgT0ZETSBhbmQgVlNCPC90aXRsZT4KKzxwYXJhPkZvciBjYWJsZSBhbmQgdGVycmVzdHJpYWwgZnJvbnRlbmRzLCBlLiBnLiBmb3IKKzxsaW5rIHJlZmVuZD0iZHZiLXFhbS1wYXJhbWV0ZXJzIj48Y29uc3RhbnQ+c3RydWN0IGR2Yl9xcHNrX3BhcmFtZXRlcnM8L2NvbnN0YW50PjwvbGluaz4sCis8bGluayByZWZlbmQ9ImR2Yi1vZmRtLXBhcmFtZXRlcnMiPjxjb25zdGFudD5zdHJ1Y3QgZHZiX3FhbV9wYXJhbWV0ZXJzPC9jb25zdGFudD48L2xpbms+IGFuZAorPGxpbmsgcmVmZW5kPSJkdmItdnNiLXBhcmFtZXRlcnMiPjxjb25zdGFudD5zdHJ1Y3QgZHZiX3FhbV9wYXJhbWV0ZXJzPC9jb25zdGFudD48L2xpbms+LAoraXQgbmVlZHMgdG8gc3BlY2lmeSB0aGUgcXVhZHJhdHVyZSBtb2R1bGF0aW9uIG1vZGUgd2hpY2ggY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgogIHR5cGVkZWYgZW51bSBmZV9tb2R1bGF0aW9uIHsKLSBRUFNLLAotCSBRQU1fMTYsCi0JIFFBTV8zMiwKLQkgUUFNXzY0LAotCSBRQU1fMTI4LAotCSBRQU1fMjU2LAotCSBRQU1fQVVUTworCVFQU0ssCisJUUFNXzE2LAorCVFBTV8zMiwKKwlRQU1fNjQsCisJUUFNXzEyOCwKKwlRQU1fMjU2LAorCVFBTV9BVVRPLAorCVZTQl84LAorCVZTQl8xNiwKKwlQU0tfOCwKKwlBUFNLXzE2LAorCUFQU0tfMzIsCisJRFFQU0ssCiAgfSBmZV9tb2R1bGF0aW9uX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgorPC9zZWN0aW9uPgogPHBhcmE+RmluYWxseSwgdGhlcmUgYXJlIHNldmVyYWwgbW9yZSBwYXJhbWV0ZXJzIGZvciBPRkRNOgogPC9wYXJhPgorPHNlY3Rpb24gaWQ9ImZlLXRyYW5zbWl0LW1vZGUtdCI+Cis8dGl0bGU+TnVtYmVyIG9mIGNhcnJpZXJzIHBlciBjaGFubmVsPC90aXRsZT4KIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIGVudW0gZmVfdHJhbnNtaXRfbW9kZSB7Ci0JIFRSQU5TTUlTU0lPTl9NT0RFXzJLLAotCSBUUkFOU01JU1NJT05fTU9ERV84SywKLQkgVFJBTlNNSVNTSU9OX01PREVfQVVUTwordHlwZWRlZiBlbnVtIGZlX3RyYW5zbWl0X21vZGUgeworCVRSQU5TTUlTU0lPTl9NT0RFXzJLLAorCVRSQU5TTUlTU0lPTl9NT0RFXzhLLAorCVRSQU5TTUlTU0lPTl9NT0RFX0FVVE8sCisJVFJBTlNNSVNTSU9OX01PREVfNEssCisJVFJBTlNNSVNTSU9OX01PREVfMUssCisJVFJBTlNNSVNTSU9OX01PREVfMTZLLAorCVRSQU5TTUlTU0lPTl9NT0RFXzMySywKICB9IGZlX3RyYW5zbWl0X21vZGVfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSBmZV9iYW5kd2lkdGggewotCSBCQU5EV0lEVEhfOF9NSFosCi0JIEJBTkRXSURUSF83X01IWiwKLQkgQkFORFdJRFRIXzZfTUhaLAotCSBCQU5EV0lEVEhfQVVUTwotIH0gZmVfYmFuZHdpZHRoX3Q7Cis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZmUtYmFuZHdpZHRoLXQiPgorPHRpdGxlPmZyb250ZW5kIGJhbmR3aWR0aDwvdGl0bGU+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfYmFuZHdpZHRoIHsKKwlCQU5EV0lEVEhfOF9NSFosCisJQkFORFdJRFRIXzdfTUhaLAorCUJBTkRXSURUSF82X01IWiwKKwlCQU5EV0lEVEhfQVVUTywKKwlCQU5EV0lEVEhfNV9NSFosCisJQkFORFdJRFRIXzEwX01IWiwKKwlCQU5EV0lEVEhfMV83MTJfTUhaLAorfSBmZV9iYW5kd2lkdGhfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSBmZV9ndWFyZF9pbnRlcnZhbCB7Ci0JIEdVQVJEX0lOVEVSVkFMXzFfMzIsCi0JIEdVQVJEX0lOVEVSVkFMXzFfMTYsCi0JIEdVQVJEX0lOVEVSVkFMXzFfOCwKLQkgR1VBUkRfSU5URVJWQUxfMV80LAotCSBHVUFSRF9JTlRFUlZBTF9BVVRPCi0gfSBmZV9ndWFyZF9pbnRlcnZhbF90OworPC9zZWN0aW9uPgorPHNlY3Rpb24gaWQ9ImZlLWd1YXJkLWludGVydmFsLXQiPgorPHRpdGxlPmZyb250ZW5kIGd1YXJkIGludmVydmFsPC90aXRsZT4KKzxwcm9ncmFtbGlzdGluZz4KK3R5cGVkZWYgZW51bSBmZV9ndWFyZF9pbnRlcnZhbCB7CisJR1VBUkRfSU5URVJWQUxfMV8zMiwKKwlHVUFSRF9JTlRFUlZBTF8xXzE2LAorCUdVQVJEX0lOVEVSVkFMXzFfOCwKKwlHVUFSRF9JTlRFUlZBTF8xXzQsCisJR1VBUkRfSU5URVJWQUxfQVVUTywKKwlHVUFSRF9JTlRFUlZBTF8xXzEyOCwKKwlHVUFSRF9JTlRFUlZBTF8xOV8xMjgsCisJR1VBUkRfSU5URVJWQUxfMTlfMjU2LAorfSBmZV9ndWFyZF9pbnRlcnZhbF90OwogPC9wcm9ncmFtbGlzdGluZz4KLSA8cHJvZ3JhbWxpc3Rpbmc+Ci0gdHlwZWRlZiBlbnVtIGZlX2hpZXJhcmNoeSB7Cis8L3NlY3Rpb24+Cis8c2VjdGlvbiBpZD0iZmUtaGllcmFyY2h5LXQiPgorPHRpdGxlPmZyb250ZW5kIGhpZXJhcmNoeTwvdGl0bGU+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit0eXBlZGVmIGVudW0gZmVfaGllcmFyY2h5IHsKIAkgSElFUkFSQ0hZX05PTkUsCiAJIEhJRVJBUkNIWV8xLAogCSBISUVSQVJDSFlfMiwKQEAgLTMyMCwxMCArNDIyLDExIEBACiAJIEhJRVJBUkNIWV9BVVRPCiAgfSBmZV9oaWVyYXJjaHlfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CiAKIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9ImZyb250ZW5kX2V2ZW50cyI+Cis8c2VjdGlvbiBpZD0iZHZiLWZyb250ZW5kLWV2ZW50Ij4KIDx0aXRsZT5mcm9udGVuZCBldmVudHM8L3RpdGxlPgogIDxwcm9ncmFtbGlzdGluZz4KICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50IHsKQEAgLTQxMiw4ICs1MTUsNyBAQAogPHBhcmE+KGJsb2NraW5nIG1vZGUgaXMgdGhlIGRlZmF1bHQpPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FTk9ERVY8L3BhcmE+CkBAIC00NzMsOCArNTc1LDcgQEAKIDxwYXJhPkZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gb3BlbigpLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKzxwYXJhPlJFVFVSTiBWQUxVRTwvcGFyYT4KIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgogPHBhcmE+RUJBREY8L3BhcmE+CkBAIC01MzAsOCArNjMxLDcgQEAKICB0byBiZSBzdG9yZWQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FQkFERjwvcGFyYT4KQEAgLTU5MiwzOCArNjkyLDggQEAKIDxwYXJhPlRoZSBiaXQgZXJyb3IgcmF0ZSBpcyBzdG9yZWQgaW50byAqYmVyLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FRkFVTFQ8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmJlciBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FTk9TSUdOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPlRoZXJlIGlzIG5vIHNpZ25hbCwgdGh1cyBubyBtZWFuaW5nZnVsIGJpdCBlcnJvciByYXRlLiBBbHNvCi0gcmV0dXJuZWQgaWYgdGhlIGZyb250LWVuZCBpcyBub3QgdHVybmVkIG9uLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FTk9TWVM8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0iRkVfUkVBRF9TTlIiPgpAQCAtNjcwLDM4ICs3NDAsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5zbnIgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RU5PU0lHTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5UaGVyZSBpcyBubyBzaWduYWwsIHRodXMgbm8gbWVhbmluZ2Z1bCBzaWduYWwgc3RyZW5ndGgKLSB2YWx1ZS4gQWxzbyByZXR1cm5lZCBpZiBmcm9udC1lbmQgaXMgbm90IHR1cm5lZCBvbi48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RU5PU1lTPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5GdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSJGRV9SRUFEX1NJR05BTF9TVFJFTkdUSCI+CkBAIC03NDgsMzggKzc4Nyw4IEBACiA8cGFyYT5UaGUgc2lnbmFsIHN0cmVuZ3RoIHZhbHVlIGlzIHN0b3JlZCBpbnRvICpzdHJlbmd0aC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5zdGF0dXMgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RU5PU0lHTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5UaGVyZSBpcyBubyBzaWduYWwsIHRodXMgbm8gbWVhbmluZ2Z1bCBzaWduYWwgc3RyZW5ndGgKLSB2YWx1ZS4gQWxzbyByZXR1cm5lZCBpZiBmcm9udC1lbmQgaXMgbm90IHR1cm5lZCBvbi48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RU5PU1lTPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5GdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorCismcmV0dXJuLXZhbHVlLWR2YjsKIDwvc2VjdGlvbj4KIAogPHNlY3Rpb24gaWQ9IkZFX1JFQURfVU5DT1JSRUNURURfQkxPQ0tTIj4KQEAgLTgzMywzMCArODQyLDggQEAKICBzbyBmYXIuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+dWJsb2NrcyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FTk9TWVM8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CisKKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0iRkVfU0VUX0ZST05URU5EIj4KQEAgLTkwOSwyNCArODk2LDEwIEBACiA8cGFyYT5Qb2ludHMgdG8gcGFyYW1ldGVycyBmb3IgdHVuaW5nIG9wZXJhdGlvbi48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CisKKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+cCBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTk4MiwyNSArOTU1LDkgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotCismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FRkFVTFQ8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPnAgcG9pbnRzIHRvIGludmFsaWQgYWRkcmVzcy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUlOVkFMPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xMDg0LDI0ICsxMDQxLDkgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5ldiBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FV09VTERCTE9DSzwvcGFyYT4KIDwvZW50cnk+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgpAQCAtMTExMywxMSArMTA1NSw2IEBACiA8cGFyYT5FT1ZFUkZMT1c8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KIDxwYXJhPk92ZXJmbG93IGluIGV2ZW50IHF1ZXVlIC0gb25lIG9yIG1vcmUgZXZlbnRzIHdlcmUgbG9zdC48L3BhcmE+CiA8L2VudHJ5PgogPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CkBAIC0xMTcwLDIzICsxMTA3LDcgQEAKICB0byBiZSBzdG9yZWQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+aW5mbyBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci08L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0iRkVfRElTRVFDX1JFU0VUX09WRVJMT0FEIj4KQEAgLTEyMjksMzAgKzExNTAsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVQRVJNPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5QZXJtaXNzaW9uIGRlbmllZCAobmVlZHMgcmVhZC93cml0ZSBhY2Nlc3MpLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yIGluIHRoZSBkZXZpY2UgZHJpdmVyLjwvcGFyYT4KLTwvZW50cnk+Ci08L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0iRkVfRElTRVFDX1NFTkRfTUFTVEVSX0NNRCI+CkBAIC0xMzAyLDQ1ICsxMjAwLDcgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FRkFVTFQ8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPlNlcSBwb2ludHMgdG8gYW4gaW52YWxpZCBhZGRyZXNzLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPlRoZSBkYXRhIHN0cnVjdHVyZSByZWZlcnJlZCB0byBieSBzZXEgaXMgaW52YWxpZCBpbiBzb21lCi0gd2F5LjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FUEVSTTwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+UGVybWlzc2lvbiBkZW5pZWQgKG5lZWRzIHJlYWQvd3JpdGUgYWNjZXNzKS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Ci08L2VudHJ5PgotPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIDwvc2VjdGlvbj4KIAogPHNlY3Rpb24gaWQ9IkZFX0RJU0VRQ19SRUNWX1NMQVZFX1JFUExZIj4KQEAgLTEzOTAsNDUgKzEyNTAsNyBAQAogPHBhcmE+UG9pbnRlciB0byB0aGUgY29tbWFuZCB0byBiZSByZWNlaXZlZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+U2VxIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+VGhlIGRhdGEgc3RydWN0dXJlIHJlZmVycmVkIHRvIGJ5IHNlcSBpcyBpbnZhbGlkIGluIHNvbWUKLSB3YXkuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVQRVJNPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5QZXJtaXNzaW9uIGRlbmllZCAobmVlZHMgcmVhZC93cml0ZSBhY2Nlc3MpLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yIGluIHRoZSBkZXZpY2UgZHJpdmVyLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIDwvc2VjdGlvbj4KIAogPHNlY3Rpb24gaWQ9IkZFX0RJU0VRQ19TRU5EX0JVUlNUIj4KQEAgLTE0NzYsNDUgKzEyOTgsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+U2VxIHBvaW50cyB0byBhbiBpbnZhbGlkIGFkZHJlc3MuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+VGhlIGRhdGEgc3RydWN0dXJlIHJlZmVycmVkIHRvIGJ5IHNlcSBpcyBpbnZhbGlkIGluIHNvbWUKLSB3YXkuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVQRVJNPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5QZXJtaXNzaW9uIGRlbmllZCAobmVlZHMgcmVhZC93cml0ZSBhY2Nlc3MpLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yIGluIHRoZSBkZXZpY2UgZHJpdmVyLjwvcGFyYT4KLTwvZW50cnk+Ci08L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPC9zZWN0aW9uPgogCiA8c2VjdGlvbiBpZD0iRkVfU0VUX1RPTkUiPgpAQCAtMTU2MCw0NCArMTM0NCw3IEBACiA8cGFyYT5UaGUgcmVxdWVzdGVkIHRvbmUgZ2VuZXJhdGlvbiBtb2RlIChvbi9vZmYpLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RU5PREVWPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5EZXZpY2UgZHJpdmVyIG5vdCBsb2FkZWQvYXZhaWxhYmxlLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQlVTWTwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RGV2aWNlIG9yIHJlc291cmNlIGJ1c3kuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW52YWxpZCBhcmd1bWVudC48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RVBFUk08L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkZpbGUgbm90IG9wZW5lZCB3aXRoIHJlYWQgcGVybWlzc2lvbnMuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IgaW4gdGhlIGRldmljZSBkcml2ZXIuPC9wYXJhPgotPC9lbnRyeT4KLTwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSJGRV9TRVRfVk9MVEFHRSI+CkBAIC0xNjQ1LDQ0ICsxMzkyLDcgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FTk9ERVY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCVVNZPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FUEVSTTwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSJGRV9FTkFCTEVfSElHSF9MTkJfVk9MVEFHRSI+CkBAIC0xNzMxLDQ0ICsxNDQxLDcgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FTk9ERVY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkRldmljZSBkcml2ZXIgbm90IGxvYWRlZC9hdmFpbGFibGUuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCVVNZPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5EZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnZhbGlkIGFyZ3VtZW50LjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FUEVSTTwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RmlsZSBub3Qgb3BlbmVkIHdpdGggcmVhZCBwZXJtaXNzaW9ucy48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvciBpbiB0aGUgZGV2aWNlIGRyaXZlci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiA8L3NlY3Rpb24+CiAKIDxzZWN0aW9uIGlkPSJGRV9TRVRfRlJPTlRFTkRfVFVORV9NT0RFIj4KQEAgLTE4MDAsMTEgKzE0NzMsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPHBhcmE+RVJST1JTPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz4KLTxlbnRyeSBhbGlnbj0iY2hhciI+PHBhcmE+RUlOVkFMPC9wYXJhPjwvZW50cnk+Ci08ZW50cnkgYWxpZ249ImNoYXIiPjxwYXJhPkludmFsaWQgYXJndW1lbnQuPC9wYXJhPjwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIDwvc2VjdGlvbj4KIAogPHNlY3Rpb24gaWQ9IkZFX0RJU0hORVRXT1JLX1NFTkRfTEVHQUNZX0NNRCI+CkBAIC0xODM4LDEyICsxNTA3LDcgQEAKIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTxwYXJhPkVSUk9SUzwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMSI+PHRib2R5Pjxyb3c+Ci08ZW50cnkgYWxpZ249ImNoYXIiPgotCTxwYXJhPlRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdXNlIGZvciB0aGlzIGNhbGw8L3BhcmE+Ci08L2VudHJ5PgotPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIDwvc2VjdGlvbj4KIAogPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9pbnRyby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL2ludHJvLnhtbApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2ludHJvLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9pbnRyby54bWwKaW5kZXggMGRjODNmNi4uYzc1ZGM3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi9pbnRyby54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9pbnRyby54bWwKQEAgLTE1NCw2ICsxNTQsMTAgQEAKIDwvbGlzdGl0ZW0+CiAgPGxpc3RpdGVtPgogCis8cGFyYT48ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXJOL2R2ck08L2VtcGhhc2lzPiw8L3BhcmE+Cis8L2xpc3RpdGVtPgorIDxsaXN0aXRlbT4KKwogPHBhcmE+PGVtcGhhc2lzIHJvbGU9InR0Ij4vZGV2L2R2Yi9hZGFwdGVyTi9jYU08L2VtcGhhc2lzPiw8L3BhcmE+PC9saXN0aXRlbT48L2l0ZW1pemVkbGlzdD4KIAogPHBhcmE+d2hlcmUgTiBlbnVtZXJhdGVzIHRoZSBEVkIgUENJIGNhcmRzIGluIGEgc3lzdGVtIHN0YXJ0aW5nCkBAIC0xNzUsMTAgKzE3OSwyNyBAQAogVGhlIERWQiBBUEkgaW5jbHVkZSBmaWxlcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYXBwbGljYXRpb24gc291cmNlcyB3aXRoCiBhIHBhcnRpYWwgcGF0aCBsaWtlOjwvcGFyYT4KIAotCis8cHJvZ3JhbWxpc3Rpbmc+CisJI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvYXVkaW8uaCYjeDAwM0U7Cis8L3Byb2dyYW1saXN0aW5nPgorPHByb2dyYW1saXN0aW5nPgorCSNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2NhLmgmI3gwMDNFOworPC9wcm9ncmFtbGlzdGluZz4KKzxwcm9ncmFtbGlzdGluZz4KKwkjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi9kbXguaCYjeDAwM0U7Cis8L3Byb2dyYW1saXN0aW5nPgogPHByb2dyYW1saXN0aW5nPgogCSNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL2Zyb250ZW5kLmgmI3gwMDNFOwogPC9wcm9ncmFtbGlzdGluZz4KKzxwcm9ncmFtbGlzdGluZz4KKwkjaW5jbHVkZSAmI3gwMDNDO2xpbnV4L2R2Yi9uZXQuaCYjeDAwM0U7Cis8L3Byb2dyYW1saXN0aW5nPgorPHByb2dyYW1saXN0aW5nPgorCSNpbmNsdWRlICYjeDAwM0M7bGludXgvZHZiL29zZC5oJiN4MDAzRTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8cHJvZ3JhbWxpc3Rpbmc+CisJI2luY2x1ZGUgJiN4MDAzQztsaW51eC9kdmIvdmlkZW8uaCYjeDAwM0U7Cis8L3Byb2dyYW1saXN0aW5nPgogCiA8cGFyYT5UbyBlbmFibGUgYXBwbGljYXRpb25zIHRvIHN1cHBvcnQgZGlmZmVyZW50IEFQSSB2ZXJzaW9uLCBhbgogYWRkaXRpb25hbCBpbmNsdWRlIGZpbGUgPGVtcGhhc2lzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmIva2RhcGkueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL2tkYXBpLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9rZGFwaS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmIvbmV0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmIvbmV0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2QzN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi9uZXQueG1sCkBAIC0wLDAgKzEsMjkgQEAKKzx0aXRsZT5EVkIgTmV0d29yayBBUEk8L3RpdGxlPgorPHBhcmE+VGhlIERWQiBuZXQgZGV2aWNlIGVuYWJsZXMgZmVlZGluZyBvZiBNUEUgKG11bHRpIHByb3RvY29sIGVuY2Fwc3VsYXRpb24pIHBhY2tldHMKK3JlY2VpdmVkIHZpYSBEVkIgaW50byB0aGUgTGludXggbmV0d29yayBwcm90b2NvbCBzdGFjaywgZS5nLiBmb3IgaW50ZXJuZXQgdmlhIHNhdGVsbGl0ZQorYXBwbGljYXRpb25zLiBJdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCA8ZW1waGFzaXMgcm9sZT0idHQiPi9kZXYvZHZiL2FkYXB0ZXIwL25ldDA8L2VtcGhhc2lzPi4gRGF0YSB0eXBlcyBhbmQKK2FuZCBpb2N0bCBkZWZpbml0aW9ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5jbHVkaW5nIDxlbXBoYXNpcyByb2xlPSJ0dCI+bGludXgvZHZiL25ldC5oPC9lbXBoYXNpcz4gaW4geW91cgorYXBwbGljYXRpb24uCis8L3BhcmE+Cis8c2VjdGlvbiBpZD0iZHZiX25ldF90eXBlcyI+Cis8dGl0bGU+RFZCIE5ldCBEYXRhIFR5cGVzPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9ImR2Yi1uZXQtaWYiPgorPHRpdGxlPnN0cnVjdCBkdmJfbmV0X2lmPC90aXRsZT4KKzxwcm9ncmFtbGlzdGluZz4KK3N0cnVjdCBkdmJfbmV0X2lmIHsKKwlfX3UxNiBwaWQ7CisJX191MTYgaWZfbnVtOworCV9fdTggIGZlZWR0eXBlOworI2RlZmluZSBEVkJfTkVUX0ZFRURUWVBFX01QRSAwCS8mI3gyMkM2OyBtdWx0aSBwcm90b2NvbCBlbmNhcHN1bGF0aW9uICYjeDIyQzY7LworI2RlZmluZSBEVkJfTkVUX0ZFRURUWVBFX1VMRSAxCS8mI3gyMkM2OyB1bHRyYSBsaWdodHdlaWdodCBlbmNhcHN1bGF0aW9uICYjeDIyQzY7LworfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzwvc2VjdGlvbj4KKzxzZWN0aW9uIGlkPSJuZXRfZmNhbGxzIj4KKzx0aXRsZT5EVkIgbmV0IEZ1bmN0aW9uIENhbGxzPC90aXRsZT4KKzxwYXJhPlRvIGJlIHdyaXR0ZW4mI3gyMDI2OworPC9wYXJhPgorPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi92aWRlby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvZHZiL3ZpZGVvLnhtbApzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHZiL3ZpZGVvLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi92aWRlby54bWwKaW5kZXggN2JiMjg3ZS4uMjVmYjgyMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2R2Yi92aWRlby54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2Yi92aWRlby54bWwKQEAgLTE4LDE1ICsxOCwxNiBAQAogPHNlY3Rpb24gaWQ9InZpZGVvX3R5cGVzIj4KIDx0aXRsZT5WaWRlbyBEYXRhIFR5cGVzPC90aXRsZT4KIAotPHNlY3Rpb24gaWQ9InZpZGVvX2Zvcm1hdF90Ij4KKzxzZWN0aW9uIGlkPSJ2aWRlby1mb3JtYXQtdCI+CiA8dGl0bGU+dmlkZW9fZm9ybWF0X3Q8L3RpdGxlPgogPHBhcmE+VGhlIDxlbXBoYXNpcyByb2xlPSJ0dCI+dmlkZW9fZm9ybWF0X3Q8L2VtcGhhc2lzPiBkYXRhIHR5cGUgZGVmaW5lZCBieQogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSB7Ci0JIFZJREVPX0ZPUk1BVF80XzMsCi0JIFZJREVPX0ZPUk1BVF8xNl85Ci0gfSB2aWRlb19mb3JtYXRfdDsKK3R5cGVkZWYgZW51bSB7CisJVklERU9fRk9STUFUXzRfMywgICAgIC8mI3gyMkM2OyBTZWxlY3QgNDozIGZvcm1hdCAmI3gyMkM2Oy8KKwlWSURFT19GT1JNQVRfMTZfOSwgICAgLyYjeDIyQzY7IFNlbGVjdCAxNjo5IGZvcm1hdC4gJiN4MjJDNjsvCisJVklERU9fRk9STUFUXzIyMV8xICAgIC8mI3gyMkM2OyAyLjIxOjEgJiN4MjJDNjsvCit9IHZpZGVvX2Zvcm1hdF90OwogPC9wcm9ncmFtbGlzdGluZz4KIDxwYXJhPmlzIHVzZWQgaW4gdGhlIFZJREVPX1NFVF9GT1JNQVQgZnVuY3Rpb24gKD8/KSB0byB0ZWxsIHRoZSBkcml2ZXIgd2hpY2ggYXNwZWN0IHJhdGlvCiB0aGUgb3V0cHV0IGhhcmR3YXJlIChlLmcuIFRWKSBoYXMuIEl0IGlzIGFsc28gdXNlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHZpZGVvX3N0YXR1cwpAQCAtMzYsMzQgKzM3LDM2IEBACiA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJ2aWRlb19kaXNwbGF5X2Zvcm1hdF90Ij4KLTx0aXRsZT52aWRlb19kaXNwbGF5X2Zvcm1hdF90PC90aXRsZT4KKzxzZWN0aW9uIGlkPSJ2aWRlby1kaXNwbGF5Zm9ybWF0LXQiPgorPHRpdGxlPnZpZGVvX2Rpc3BsYXlmb3JtYXRfdDwvdGl0bGU+CiA8cGFyYT5JbiBjYXNlIHRoZSBkaXNwbGF5IGZvcm1hdCBvZiB0aGUgdmlkZW8gc3RyZWFtIGFuZCBvZiB0aGUgZGlzcGxheSBoYXJkd2FyZSBkaWZmZXIgdGhlCiBhcHBsaWNhdGlvbiBoYXMgdG8gc3BlY2lmeSBob3cgdG8gaGFuZGxlIHRoZSBjcm9wcGluZyBvZiB0aGUgcGljdHVyZS4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZwogdGhlIFZJREVPX1NFVF9ESVNQTEFZX0ZPUk1BVCBjYWxsICg/Pykgd2hpY2ggYWNjZXB0cwogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSB7Ci0JIFZJREVPX1BBTl9TQ0FOLAotCSBWSURFT19MRVRURVJfQk9YLAotCSBWSURFT19DRU5URVJfQ1VUX09VVAotIH0gdmlkZW9fZGlzcGxheV9mb3JtYXRfdDsKK3R5cGVkZWYgZW51bSB7CisJVklERU9fUEFOX1NDQU4sICAgICAgIC8mI3gyMkM2OyB1c2UgcGFuIGFuZCBzY2FuIGZvcm1hdCAmI3gyMkM2Oy8KKwlWSURFT19MRVRURVJfQk9YLCAgICAgLyYjeDIyQzY7IHVzZSBsZXR0ZXJib3ggZm9ybWF0ICYjeDIyQzY7LworCVZJREVPX0NFTlRFUl9DVVRfT1VUICAvJiN4MjJDNjsgdXNlIGNlbnRlciBjdXQgb3V0IGZvcm1hdCAmI3gyMkM2Oy8KK30gdmlkZW9fZGlzcGxheWZvcm1hdF90OwogPC9wcm9ncmFtbGlzdGluZz4KIDxwYXJhPmFzIGFyZ3VtZW50LgogPC9wYXJhPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0idmlkZW9fc3RyZWFtX3NvdXJjZSI+Cis8c2VjdGlvbiBpZD0idmlkZW8tc3RyZWFtLXNvdXJjZS10Ij4KIDx0aXRsZT52aWRlbyBzdHJlYW0gc291cmNlPC90aXRsZT4KIDxwYXJhPlRoZSB2aWRlbyBzdHJlYW0gc291cmNlIGlzIHNldCB0aHJvdWdoIHRoZSBWSURFT19TRUxFQ1RfU09VUkNFIGNhbGwgYW5kIGNhbiB0YWtlCiB0aGUgZm9sbG93aW5nIHZhbHVlcywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIHJlcGxheWluZyBmcm9tIGFuIGludGVybmFsIChkZW11eGVyKSBvcgogZXh0ZXJuYWwgKHVzZXIgd3JpdGUpIHNvdXJjZS4KIDwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIGVudW0gewotCSBWSURFT19TT1VSQ0VfREVNVVgsCi0JIFZJREVPX1NPVVJDRV9NRU1PUlkKLSB9IHZpZGVvX3N0cmVhbV9zb3VyY2VfdDsKK3R5cGVkZWYgZW51bSB7CisJVklERU9fU09VUkNFX0RFTVVYLCAvJiN4MjJDNjsgU2VsZWN0IHRoZSBkZW11eCBhcyB0aGUgbWFpbiBzb3VyY2UgJiN4MjJDNjsvCisJVklERU9fU09VUkNFX01FTU9SWSAvJiN4MjJDNjsgSWYgdGhpcyBzb3VyY2UgaXMgc2VsZWN0ZWQsIHRoZSBzdHJlYW0KKwkJCSAgICAgICBjb21lcyBmcm9tIHRoZSB1c2VyIHRocm91Z2ggdGhlIHdyaXRlCisJCQkgICAgICAgc3lzdGVtIGNhbGwgJiN4MjJDNjsvCit9IHZpZGVvX3N0cmVhbV9zb3VyY2VfdDsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8cGFyYT5WSURFT19TT1VSQ0VfREVNVVggc2VsZWN0cyB0aGUgZGVtdWx0aXBsZXhlciAoZmVkIGVpdGhlciBieSB0aGUgZnJvbnRlbmQgb3IgdGhlCiBEVlIgZGV2aWNlKSBhcyB0aGUgc291cmNlIG9mIHRoZSB2aWRlbyBzdHJlYW0uIElmIFZJREVPX1NPVVJDRV9NRU1PUlkKQEAgLTcyLDQ5ICs3NSw5OCBAQAogPC9wYXJhPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0idmlkZW9fcGxheV9zdGF0ZSI+Cis8c2VjdGlvbiBpZD0idmlkZW8tcGxheS1zdGF0ZS10Ij4KIDx0aXRsZT52aWRlbyBwbGF5IHN0YXRlPC90aXRsZT4KIDxwYXJhPlRoZSBmb2xsb3dpbmcgdmFsdWVzIGNhbiBiZSByZXR1cm5lZCBieSB0aGUgVklERU9fR0VUX1NUQVRVUyBjYWxsIHJlcHJlc2VudGluZyB0aGUKIHN0YXRlIG9mIHZpZGVvIHBsYXliYWNrLgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHR5cGVkZWYgZW51bSB7Ci0JIFZJREVPX1NUT1BQRUQsCi0JIFZJREVPX1BMQVlJTkcsCi0JIFZJREVPX0ZSRUVaRUQKLSB9IHZpZGVvX3BsYXlfc3RhdGVfdDsKK3R5cGVkZWYgZW51bSB7CisJVklERU9fU1RPUFBFRCwgLyYjeDIyQzY7IFZpZGVvIGlzIHN0b3BwZWQgJiN4MjJDNjsvCisJVklERU9fUExBWUlORywgLyYjeDIyQzY7IFZpZGVvIGlzIGN1cnJlbnRseSBwbGF5aW5nICYjeDIyQzY7LworCVZJREVPX0ZSRUVaRUQgIC8mI3gyMkM2OyBWaWRlbyBpcyBmcmVlemVkICYjeDIyQzY7LworfSB2aWRlb19wbGF5X3N0YXRlX3Q7CiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0idmlkZW9fZXZlbnQiPgorPHNlY3Rpb24gaWQ9InZpZGVvLWNvbW1hbmQiPgorPHBhcmE+VGhlIHN0cnVjdHVyZSBtdXN0IGJlIHplcm9lZCBiZWZvcmUgdXNlIGJ5IHRoZSBhcHBsaWNhdGlvbgorVGhpcyBlbnN1cmVzIGl0IGNhbiBiZSBleHRlbmRlZCBzYWZlbHkgaW4gdGhlIGZ1dHVyZS48L3BhcmE+Cis8dGl0bGU+c3RydWN0IHZpZGVvLWNvbW1hbmQ8L3RpdGxlPgorPHByb2dyYW1saXN0aW5nPgorc3RydWN0IHZpZGVvX2NvbW1hbmQgeworCV9fdTMyIGNtZDsKKwlfX3UzMiBmbGFnczsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX3U2NCBwdHM7CisJCX0gc3RvcDsKKworCQlzdHJ1Y3QgeworCQkJLyYjeDIyQzY7IDAgb3IgMTAwMCBzcGVjaWZpZXMgbm9ybWFsIHNwZWVkLAorCQkJICAgMSBzcGVjaWZpZXMgZm9yd2FyZCBzaW5nbGUgc3RlcHBpbmcsCisJCQkgICAtMSBzcGVjaWZpZXMgYmFja3dhcmQgc2luZ2xlIHN0ZXBwaW5nLAorCQkJICAgJmd0Oz4xOiBwbGF5YmFjayBhdCBzcGVlZC8xMDAwIG9mIHRoZSBub3JtYWwgc3BlZWQsCisJCQkgICAmbHQ7LTE6IHJldmVyc2UgcGxheWJhY2sgYXQgKC1zcGVlZC8xMDAwKSBvZiB0aGUgbm9ybWFsIHNwZWVkLiAmI3gyMkM2Oy8KKwkJCV9fczMyIHNwZWVkOworCQkJX191MzIgZm9ybWF0OworCQl9IHBsYXk7CisKKwkJc3RydWN0IHsKKwkJCV9fdTMyIGRhdGFbMTZdOworCQl9IHJhdzsKKwl9OworfTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ2aWRlby1zaXplLXQiPgorPHRpdGxlPnN0cnVjdCB2aWRlb19zaXplLXQ8L3RpdGxlPgorPHByb2dyYW1saXN0aW5nPgordHlwZWRlZiBzdHJ1Y3QgeworCWludCB3OworCWludCBoOworCXZpZGVvX2Zvcm1hdF90IGFzcGVjdF9yYXRpbzsKK30gdmlkZW9fc2l6ZV90OworPC9wcm9ncmFtbGlzdGluZz4KKzwvc2VjdGlvbj4KKworCis8c2VjdGlvbiBpZD0idmlkZW8tZXZlbnQiPgogPHRpdGxlPnN0cnVjdCB2aWRlb19ldmVudDwvdGl0bGU+CiA8cGFyYT5UaGUgZm9sbG93aW5nIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgYSB2aWRlbyBldmVudCBhcyBpdCBpcyByZXR1cm5lZCBieSB0aGUgVklERU9fR0VUX0VWRU5UCiBjYWxsLgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIHN0cnVjdCB2aWRlb19ldmVudCB7Ci0JIGludDMyX3QgdHlwZTsKLQkgdGltZV90IHRpbWVzdGFtcDsKLQkgdW5pb24gewotCQkgdmlkZW9fZm9ybWF0X3QgdmlkZW9fZm9ybWF0OwotCSB9IHU7Ci0gfTsKK3N0cnVjdCB2aWRlb19ldmVudCB7CisJX19zMzIgdHlwZTsKKyNkZWZpbmUgVklERU9fRVZFTlRfU0laRV9DSEFOR0VECTEKKyNkZWZpbmUgVklERU9fRVZFTlRfRlJBTUVfUkFURV9DSEFOR0VECTIKKyNkZWZpbmUgVklERU9fRVZFTlRfREVDT0RFUl9TVE9QUEVEIAkzCisjZGVmaW5lIFZJREVPX0VWRU5UX1ZTWU5DIAkJNAorCV9fa2VybmVsX3RpbWVfdCB0aW1lc3RhbXA7CisJdW5pb24geworCQl2aWRlb19zaXplX3Qgc2l6ZTsKKwkJdW5zaWduZWQgaW50IGZyYW1lX3JhdGU7CS8mI3gyMkM2OyBpbiBmcmFtZXMgcGVyIDEwMDBzZWMgJiN4MjJDNjsvCisJCXVuc2lnbmVkIGNoYXIgdnN5bmNfZmllbGQ7CS8mI3gyMkM2OyB1bmtub3duL29kZC9ldmVuL3Byb2dyZXNzaXZlICYjeDIyQzY7LworCX0gdTsKK307CiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0idmlkZW9fc3RhdHVzIj4KKzxzZWN0aW9uIGlkPSJ2aWRlby1zdGF0dXMiPgogPHRpdGxlPnN0cnVjdCB2aWRlb19zdGF0dXM8L3RpdGxlPgogPHBhcmE+VGhlIFZJREVPX0dFVF9TVEFUVVMgY2FsbCByZXR1cm5zIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluZm9ybWluZyBhYm91dCB2YXJpb3VzCiBzdGF0ZXMgb2YgdGhlIHBsYXliYWNrIG9wZXJhdGlvbi4KIDwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSBzdHJ1Y3QgdmlkZW9fc3RhdHVzIHsKLQkgYm9vbGVhbiB2aWRlb19ibGFuazsKLQkgdmlkZW9fcGxheV9zdGF0ZV90IHBsYXlfc3RhdGU7Ci0JIHZpZGVvX3N0cmVhbV9zb3VyY2VfdCBzdHJlYW1fc291cmNlOwotCSB2aWRlb19mb3JtYXRfdCB2aWRlb19mb3JtYXQ7Ci0JIHZpZGVvX2Rpc3BsYXlmb3JtYXRfdCBkaXNwbGF5X2Zvcm1hdDsKLSB9Oworc3RydWN0IHZpZGVvX3N0YXR1cyB7CisJaW50ICAgICAgICAgICAgICAgICAgIHZpZGVvX2JsYW5rOyAgIC8mI3gyMkM2OyBibGFuayB2aWRlbyBvbiBmcmVlemU/ICYjeDIyQzY7LworCXZpZGVvX3BsYXlfc3RhdGVfdCAgICBwbGF5X3N0YXRlOyAgICAvJiN4MjJDNjsgY3VycmVudCBzdGF0ZSBvZiBwbGF5YmFjayAmI3gyMkM2Oy8KKwl2aWRlb19zdHJlYW1fc291cmNlX3Qgc3RyZWFtX3NvdXJjZTsgLyYjeDIyQzY7IGN1cnJlbnQgc291cmNlIChkZW11eC9tZW1vcnkpICYjeDIyQzY7LworCXZpZGVvX2Zvcm1hdF90ICAgICAgICB2aWRlb19mb3JtYXQ7ICAvJiN4MjJDNjsgY3VycmVudCBhc3BlY3QgcmF0aW8gb2Ygc3RyZWFtICYjeDIyQzY7LworCXZpZGVvX2Rpc3BsYXlmb3JtYXRfdCBkaXNwbGF5X2Zvcm1hdDsvJiN4MjJDNjsgc2VsZWN0ZWQgY3JvcHBpbmcgbW9kZSAmI3gyMkM2Oy8KK307CiA8L3Byb2dyYW1saXN0aW5nPgogPHBhcmE+SWYgdmlkZW9fYmxhbmsgaXMgc2V0IHZpZGVvIHdpbGwgYmUgYmxhbmtlZCBvdXQgaWYgdGhlIGNoYW5uZWwgaXMgY2hhbmdlZCBvciBpZiBwbGF5YmFjayBpcwogc3RvcHBlZC4gT3RoZXJ3aXNlLCB0aGUgbGFzdCBwaWN0dXJlIHdpbGwgYmUgZGlzcGxheWVkLiBwbGF5X3N0YXRlIGluZGljYXRlcyBpZiB0aGUgdmlkZW8gaXMKQEAgLTEyNywxNyArMTc5LDE3IEBACiA8L3BhcmE+CiA8L3NlY3Rpb24+CiAKLTxzZWN0aW9uIGlkPSJ2aWRlb19zdGlsbF9waWN0dXJlIj4KKzxzZWN0aW9uIGlkPSJ2aWRlby1zdGlsbC1waWN0dXJlIj4KIDx0aXRsZT5zdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZTwvdGl0bGU+CiA8cGFyYT5BbiBJLWZyYW1lIGRpc3BsYXllZCB2aWEgdGhlIFZJREVPX1NUSUxMUElDVFVSRSBjYWxsIGlzIHBhc3NlZCBvbiB3aXRoaW4gdGhlCiBmb2xsb3dpbmcgc3RydWN0dXJlLgogPC9wYXJhPgogPHByb2dyYW1saXN0aW5nPgotIC8mI3gyMkM2OyBwb2ludGVyIHRvIGFuZCBzaXplIG9mIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgJiN4MjJDNjsvCi0gc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgewotCSBjaGFyICYjeDIyQzY7aUZyYW1lOwotCSBpbnQzMl90IHNpemU7Ci0gfTsKKy8mI3gyMkM2OyBwb2ludGVyIHRvIGFuZCBzaXplIG9mIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgJiN4MjJDNjsvCitzdHJ1Y3QgdmlkZW9fc3RpbGxfcGljdHVyZSB7CisJY2hhciAmI3gyMkM2O2lGcmFtZTsgICAgICAgIC8mI3gyMkM2OyBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgJiN4MjJDNjsvCisJaW50MzJfdCBzaXplOworfTsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiA8L3NlY3Rpb24+CiAKQEAgLTE2NCwyNiArMjE2LDI2IEBACiA8L3Byb2dyYW1saXN0aW5nPgogPC9zZWN0aW9uPgogCi08c2VjdGlvbiBpZD0idmlkZW9fc3lzdGVtIj4KKzxzZWN0aW9uIGlkPSJ2aWRlby1zeXN0ZW0iPgogPHRpdGxlPnZpZGVvIHN5c3RlbTwvdGl0bGU+CiA8cGFyYT5BIGNhbGwgdG8gVklERU9fU0VUX1NZU1RFTSBzZXRzIHRoZSBkZXNpcmVkIHZpZGVvIHN5c3RlbSBmb3IgVFYgb3V0cHV0LiBUaGUKIGZvbGxvd2luZyBzeXN0ZW0gdHlwZXMgY2FuIGJlIHNldDoKIDwvcGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KLSB0eXBlZGVmIGVudW0gewotCSAgVklERU9fU1lTVEVNX1BBTCwKLQkgIFZJREVPX1NZU1RFTV9OVFNDLAotCSAgVklERU9fU1lTVEVNX1BBTE4sCi0JICBWSURFT19TWVNURU1fUEFMTmMsCi0JICBWSURFT19TWVNURU1fUEFMTSwKLQkgIFZJREVPX1NZU1RFTV9OVFNDNjAsCi0JICBWSURFT19TWVNURU1fUEFMNjAsCi0JICBWSURFT19TWVNURU1fUEFMTTYwCi0gfSB2aWRlb19zeXN0ZW1fdDsKK3R5cGVkZWYgZW51bSB7CisJIFZJREVPX1NZU1RFTV9QQUwsCisJIFZJREVPX1NZU1RFTV9OVFNDLAorCSBWSURFT19TWVNURU1fUEFMTiwKKwkgVklERU9fU1lTVEVNX1BBTE5jLAorCSBWSURFT19TWVNURU1fUEFMTSwKKwkgVklERU9fU1lTVEVNX05UU0M2MCwKKwkgVklERU9fU1lTVEVNX1BBTDYwLAorCSBWSURFT19TWVNURU1fUEFMTTYwCit9IHZpZGVvX3N5c3RlbV90OwogPC9wcm9ncmFtbGlzdGluZz4KIDwvc2VjdGlvbj4KIAotPHNlY3Rpb24gaWQ9InZpZGVvX2hpZ2hsaWdodCI+Cis8c2VjdGlvbiBpZD0idmlkZW8taGlnaGxpZ2h0Ij4KIDx0aXRsZT5zdHJ1Y3QgdmlkZW9faGlnaGxpZ2h0PC90aXRsZT4KIDxwYXJhPkNhbGxpbmcgdGhlIGlvY3RsIFZJREVPX1NFVF9ISUdITElHSFRTIHBvc3RzIHRoZSBTUFUgaGlnaGxpZ2h0IGluZm9ybWF0aW9uLiBUaGUKIGNhbGwgZXhwZWN0cyB0aGUgZm9sbG93aW5nIGZvcm1hdCBmb3IgdGhhdCBpbmZvcm1hdGlvbjoKQEAgLTIxMCw3ICsyNjIsNyBAQAogPC9wcm9ncmFtbGlzdGluZz4KIAogPC9zZWN0aW9uPgotPHNlY3Rpb24gaWQ9InZpZGVvX3NwdSI+Cis8c2VjdGlvbiBpZD0idmlkZW8tc3B1Ij4KIDx0aXRsZT52aWRlbyBTUFU8L3RpdGxlPgogPHBhcmE+Q2FsbGluZyBWSURFT19TRVRfU1BVIGRlYWN0aXZhdGVzIG9yIGFjdGl2YXRlcyBTUFUgZGVjb2RpbmcsIGFjY29yZGluZyB0byB0aGUKIGZvbGxvd2luZyBmb3JtYXQ6CkBAIC0yMjQsNyArMjc2LDcgQEAKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAKIDwvc2VjdGlvbj4KLTxzZWN0aW9uIGlkPSJ2aWRlb19zcHVfcGFsZXR0ZSI+Cis8c2VjdGlvbiBpZD0idmlkZW8tc3B1LXBhbGV0dGUiPgogPHRpdGxlPnZpZGVvIFNQVSBwYWxldHRlPC90aXRsZT4KIDxwYXJhPlRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2V0IHRoZSBTUFUgcGFsZXR0ZSBieSBjYWxsaW5nIFZJREVPX1NQVV9QQUxFVFRFOgogPC9wYXJhPgpAQCAtMjM3LDcgKzI4OSw3IEBACiA8L3Byb2dyYW1saXN0aW5nPgogCiA8L3NlY3Rpb24+Ci08c2VjdGlvbiBpZD0idmlkZW9fbmF2aV9wYWNrIj4KKzxzZWN0aW9uIGlkPSJ2aWRlby1uYXZpLXBhY2siPgogPHRpdGxlPnZpZGVvIE5BVkkgcGFjazwvdGl0bGU+CiA8cGFyYT5JbiBvcmRlciB0byBnZXQgdGhlIG5hdmlnYXRpb25hbCBkYXRhIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGhhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGlvY3RsCiBWSURFT19HRVRfTkFWSToKQEAgLTI1Miw3ICszMDQsNyBAQAogPC9zZWN0aW9uPgogCiAKLTxzZWN0aW9uIGlkPSJ2aWRlb19hdHRyaWJ1dGVzIj4KKzxzZWN0aW9uIGlkPSJ2aWRlby1hdHRyaWJ1dGVzLXQiPgogPHRpdGxlPnZpZGVvIGF0dHJpYnV0ZXM8L3RpdGxlPgogPHBhcmE+VGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQgYnkgYSBjYWxsIHRvIFZJREVPX1NFVF9BVFRSSUJVVEVTOgogPC9wYXJhPgpAQCAtMzQ3LDggKzM5OSw3IEBACiA8cGFyYT4oYmxvY2tpbmcgbW9kZSBpcyB0aGUgZGVmYXVsdCk8L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Cis8cGFyYT5SRVRVUk4gVkFMVUU8L3BhcmE+CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVOT0RFVjwvcGFyYT4KQEAgLTQwNiw4ICs0NTcsNyBAQAogPHBhcmE+RmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBvcGVuKCkuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FQkFERjwvcGFyYT4KQEAgLTQ2Miw4ICs1MTIsNyBAQAogPHBhcmE+U2l6ZSBvZiBidWYuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPgogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5FUEVSTTwvcGFyYT4KQEAgLTQ4OCw3ICs1MzcsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IlZJREVPX1NUT1AiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU1RPUDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtNTQzLDI2ICs1OTIsOSBAQAogPHBhcmE+RkFMU0U6IFNob3cgbGFzdCBkZWNvZGVkIGZyYW1lLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IsIHBvc3NpYmx5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCi0gRFZCIHN1YnN5c3RlbS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19QTEFZIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1BMQVk8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTU5NiwyNiArNjI4LDkgQEAKIDxwYXJhPkVxdWFscyBWSURFT19QTEFZIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvciwgcG9zc2libHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUKLSBEVkIgc3Vic3lzdGVtLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IlZJREVPX0ZSRUVaRSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19GUkVFWkU8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTY1MywyNiArNjY4LDkgQEAKIDxwYXJhPkVxdWFscyBWSURFT19GUkVFWkUgZm9yIHRoaXMgY29tbWFuZC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQotIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fQ09OVElOVUUiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fQ09OVElOVUU8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTcwNiwyNiArNzA0LDkgQEAKIDxwYXJhPkVxdWFscyBWSURFT19DT05USU5VRSBmb3IgdGhpcyBjb21tYW5kLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IsIHBvc3NpYmx5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCi0gRFZCIHN1YnN5c3RlbS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19TRUxFQ1RfU09VUkNFIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFTEVDVF9TT1VSQ0U8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTc2OSwyNiArNzUwLDkgQEAKIDxwYXJhPkluZGljYXRlcyB3aGljaCBzb3VyY2Ugc2hhbGwgYmUgdXNlZCBmb3IgdGhlIFZpZGVvIHN0cmVhbS48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQotIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0VUX0JMQU5LIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9CTEFOSzwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtODM1LDMzICs3OTksOSBAQAogPHBhcmE+RkFMU0U6IFNob3cgbGFzdCBkZWNvZGVkIGZyYW1lLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IsIHBvc3NpYmx5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlCi0gRFZCIHN1YnN5c3RlbS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbGxlZ2FsIGlucHV0IHBhcmFtZXRlcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CismcmV0dXJuLXZhbHVlLWR2YjsKIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IlZJREVPX0dFVF9TVEFUVVMiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fR0VUX1NUQVRVUzwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtOTAzLDMzICs4NDMsOSBAQAogPHBhcmE+UmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIFZpZGVvIERldmljZS48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+Ci08aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLCBwb3NzaWJseSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQotIERWQiBzdWJzeXN0ZW0uPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+c3RhdHVzIHBvaW50cyB0byBpbnZhbGlkIGFkZHJlc3M8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19HRVRfRVZFTlQiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fR0VUX0VWRU5UPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC05ODAsMjQgKzg5Niw5IEBACiAgc3RvcmVkLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5ldiBwb2ludHMgdG8gaW52YWxpZCBhZGRyZXNzPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVXT1VMREJMT0NLPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xMDA5LDE2ICs5MTAsMTEgQEAKIDxwYXJhPkVPVkVSRkxPVzwvcGFyYT4KIDwvZW50cnk+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+T3ZlcmZsb3cgaW4gZXZlbnQgcXVldWUgLSBvbmUgb3IgbW9yZSBldmVudHMgd2VyZSBsb3N0LjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19TRVRfRElTUExBWV9GT1JNQVQiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0RJU1BMQVlfRk9STUFUPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xMDYzLDMyICs5NTksOSBAQAogPHBhcmE+U2VsZWN0cyB0aGUgdmlkZW8gZm9ybWF0IHRvIGJlIHVzZWQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbGxlZ2FsIHBhcmFtZXRlciBmb3JtYXQuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU1RJTExQSUNUVVJFIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NUSUxMUElDVFVSRTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTEzMywzMiArMTAwNiw5IEBACiA8cGFyYT5Qb2ludGVyIHRvIGEgbG9jYXRpb24gd2hlcmUgYW4gSS1mcmFtZSBhbmQgc2l6ZSBpcyBzdG9yZWQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUZBVUxUPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5zcCBwb2ludHMgdG8gYW4gaW52YWxpZCBpZnJhbWUuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fRkFTVF9GT1JXQVJEIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0ZBU1RfRk9SV0FSRDwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTIwMCwzOSArMTA1MCwxNyBAQAogPHBhcmE+VGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcC48L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlRFUk5BTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SW50ZXJuYWwgZXJyb3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KIDxwYXJhPkVQRVJNPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CiA8cGFyYT5Nb2RlIFZJREVPX1NPVVJDRV9NRU1PUlkgbm90IHNlbGVjdGVkLjwvcGFyYT4KIDwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5WQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPklsbGVnYWwgcGFyYW1ldGVyIGZvcm1hdC48L3BhcmE+Ci08L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0xPV01PVElPTiIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TTE9XTU9USU9OPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xMjc0LDM5ICsxMTAyLDE3IEBACiA8cGFyYT5UaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCBlYWNoIGZyYW1lLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUlOVEVSTkFMPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5JbnRlcm5hbCBlcnJvci48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RVBFUk08L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KIDxwYXJhPk1vZGUgVklERU9fU09VUkNFX01FTU9SWSBub3Qgc2VsZWN0ZWQuPC9wYXJhPgogPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+SWxsZWdhbCBwYXJhbWV0ZXIgZm9ybWF0LjwvcGFyYT4KLTwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19HRVRfQ0FQQUJJTElUSUVTIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0dFVF9DQVBBQklMSVRJRVM8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTEzNTAsMjUgKzExNTYsOSBAQAogIGluZm9ybWF0aW9uLjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVGQVVMVDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+Y2FwIHBvaW50cyB0byBhbiBpbnZhbGlkIGlmcmFtZS48L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19TRVRfSUQiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fU0VUX0lEPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNDEwLDI0ICsxMjAwLDkgQEAKIDxwYXJhPnZpZGVvIHN1Yi1zdHJlYW0gaWQ8L3BhcmE+CiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgotPHBhcmE+RVJST1JTCi08L3BhcmE+CismcmV0dXJuLXZhbHVlLWR2YjsKIDxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5CiAgYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FSU5URVJOQUw8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkludGVybmFsIGVycm9yLjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTE0MzUsNyArMTIxMCw3IEBACiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fQ0xFQVJfQlVGRkVSIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX0NMRUFSX0JVRkZFUjwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTQ2OCwxOCArMTI0Myw5IEBACiA8cGFyYT5FcXVhbHMgVklERU9fQ0xFQVJfQlVGRkVSIGZvciB0aGlzIGNvbW1hbmQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgorJnJldHVybi12YWx1ZS1kdmI7CiAKLTwvc2VjdGlvbj48c2VjdGlvbgorPC9zZWN0aW9uPjxzZWN0aW9uIGlkPSJWSURFT19TRVRfU1RSRUFNVFlQRSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1RSRUFNVFlQRTwvdGl0bGU+CiA8cGFyYT5ERVNDUklQVElPTgogPC9wYXJhPgpAQCAtMTUyMiwyNSArMTI4OCw5IEBACiA8cGFyYT5zdHJlYW0gdHlwZTwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KLTxpbmZvcm1hbHRhYmxlPjx0Z3JvdXAgY29scz0iMiI+PHRib2R5Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+RUJBREY8L3BhcmE+Ci08L2VudHJ5PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPmZkIGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+dHlwZSBpcyBub3QgYSB2YWxpZCBvciBzdXBwb3J0ZWQgc3RyZWFtIHR5cGUuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0VUX0ZPUk1BVCIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfRk9STUFUPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNTgzLDE3ICsxMzMzLDkgQEAKIDxwYXJhPnZpZGVvIGZvcm1hdCBvZiBUViBhcyBkZWZpbmVkIGluIHNlY3Rpb24gPz8uPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTE2MDEsNyArMTM0Myw3IEBACiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0VUX1NZU1RFTSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1lTVEVNPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNjQ1LDE3ICsxMzg3LDkgQEAKIDxwYXJhPnZpZGVvIHN5c3RlbSBvZiBUViBvdXRwdXQuPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTE2NjMsNyArMTM5Nyw3IEBACiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0VUX0hJR0hMSUdIVCIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfSElHSExJR0hUPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNzA1LDI1ICsxNDM5LDkgQEAKIDxwYXJhPlNQVSBIaWdobGlnaHQgaW5mb3JtYXRpb24gYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz8uPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgotPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48cm93PjxlbnRyeQotIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVJTlZBTDwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+aW5wdXQgaXMgbm90IGEgdmFsaWQgaGlnaGxpZ2h0IHNldHRpbmcuPC9wYXJhPgotPC9lbnRyeT4KLSA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fU0VUX1NQVSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1BVPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xNzY2LDE3ICsxNDg0LDkgQEAKICB0byBzZWN0aW9uID8/LjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUlOVkFMPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xNzg1LDcgKzE0OTUsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IlZJREVPX1NFVF9TUFVfUEFMRVRURSIKIHJvbGU9InN1YnNlY3Rpb24iPjx0aXRsZT5WSURFT19TRVRfU1BVX1BBTEVUVEU8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTE4MjcsMTcgKzE1MzcsOSBAQAogPHBhcmE+U1BVIHBhbGV0dGUgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz8uPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KQEAgLTE4NDUsNyArMTU0Nyw3IEBACiA8L2VudHJ5PgogIDwvcm93PjwvdGJvZHk+PC90Z3JvdXA+PC9pbmZvcm1hbHRhYmxlPgogCi08L3NlY3Rpb24+PHNlY3Rpb24KKzwvc2VjdGlvbj48c2VjdGlvbiBpZD0iVklERU9fR0VUX05BVkkiCiByb2xlPSJzdWJzZWN0aW9uIj48dGl0bGU+VklERU9fR0VUX05BVkk8L3RpdGxlPgogPHBhcmE+REVTQ1JJUFRJT04KIDwvcGFyYT4KQEAgLTE4ODksMTcgKzE1OTEsOSBAQAogID8/LjwvcGFyYT4KIDwvZW50cnk+CiAgPC9yb3c+PC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+Ci08cGFyYT5FUlJPUlMKLTwvcGFyYT4KKyZyZXR1cm4tdmFsdWUtZHZiOwogPGluZm9ybWFsdGFibGU+PHRncm91cCBjb2xzPSIyIj48dGJvZHk+PHJvdz48ZW50cnkKICBhbGlnbj0iY2hhciI+Ci08cGFyYT5FQkFERjwvcGFyYT4KLTwvZW50cnk+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgotPHBhcmE+ZmQgaXMgbm90IGEgdmFsaWQgb3BlbiBmaWxlIGRlc2NyaXB0b3I8L3BhcmE+Ci08L2VudHJ5PgotIDwvcm93Pjxyb3c+PGVudHJ5Ci0gYWxpZ249ImNoYXIiPgogPHBhcmE+RUZBVUxUPC9wYXJhPgogPC9lbnRyeT48ZW50cnkKICBhbGlnbj0iY2hhciI+CkBAIC0xOTA3LDcgKzE2MDEsNyBAQAogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KIAotPC9zZWN0aW9uPjxzZWN0aW9uCis8L3NlY3Rpb24+PHNlY3Rpb24gaWQ9IlZJREVPX1NFVF9BVFRSSUJVVEVTIgogcm9sZT0ic3Vic2VjdGlvbiI+PHRpdGxlPlZJREVPX1NFVF9BVFRSSUJVVEVTPC90aXRsZT4KIDxwYXJhPkRFU0NSSVBUSU9OCiA8L3BhcmE+CkBAIC0xOTUxLDE3ICsxNjQ1LDkgQEAKIDxwYXJhPnZpZGVvIGF0dHJpYnV0ZXMgYWNjb3JkaW5nIHRvIHNlY3Rpb24gPz8uPC9wYXJhPgogPC9lbnRyeT4KICA8L3Jvdz48L3Rib2R5PjwvdGdyb3VwPjwvaW5mb3JtYWx0YWJsZT4KLTxwYXJhPkVSUk9SUwotPC9wYXJhPgorJnJldHVybi12YWx1ZS1kdmI7CiA8aW5mb3JtYWx0YWJsZT48dGdyb3VwIGNvbHM9IjIiPjx0Ym9keT48cm93PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KLTxwYXJhPkVCQURGPC9wYXJhPgotPC9lbnRyeT48ZW50cnkKLSBhbGlnbj0iY2hhciI+Ci08cGFyYT5mZCBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUgZGVzY3JpcHRvcjwvcGFyYT4KLTwvZW50cnk+Ci0gPC9yb3c+PHJvdz48ZW50cnkKLSBhbGlnbj0iY2hhciI+CiA8cGFyYT5FSU5WQUw8L3BhcmE+CiA8L2VudHJ5PjxlbnRyeQogIGFsaWduPSJjaGFyIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmJzdGIucG5nLmI2NCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9kdmJzdGIucG5nLmI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI1MmZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2R2YnN0Yi5wbmcuYjY0CkBAIC0wLDAgKzEsMzk4IEBACitpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBek1BQUFHYUNBWUFBQUE3SngyNUFBQUFCbUpMUjBRQUFBQUFBQUQ1UTd0L0FBQUFDWEJJCitXWE1BQUEzWEFBQU5pUUZtRU91aUFBQWdBRWxFUVZSNDJ1emRkMVJVMThJMjhHZGdLRlpVQkUwc2FGQTBLb3FGRmtFaEtoYkFRbXhKCitiSWtOTkVwTUVVd3NNWmFySk1acnc0S3hSRXhRY3pVcWlsMGpSQkExR0FqR1FxTFlDNFRlbWRuZkg3NmNqM0hvZFlEbnR4YUxtVGxsCit6dXc1N1ptejl6NHlJWVFBa1laemNuSkNTa29LR2pac3lNSWdJaUlpcXVQUzA5UFJvRUVEeUJobXFDYVF5V1JvMDZZTjNudnZQUllHCitFUkVSVVIxMzdOZ3gvUG5ubjVDektLZ21NREF3d0twVnF4aG1pSWlJaUFqMjl2WjQvLzMzb2NXaUlDSWlJaUtpbW9oaGhvaUlpSWlJCitHR2FJaUlpSWlJZ1lab2lJaUlpSWlCaG1pSWlJaUlpSVlZYUlpSWlJaUloaGhvaUlpSWlJaUdHR2lJaUlpSWdZWm9pSWlJaUlpQmhtCitpSWlJaUlpSUdHYUlpSWlJaUlnWVpvaUlpSWlJaUdHR2lJaUlpSWlJWVlhSWlJaUlpSWhoaG9pSWlJaUlHR2FJaUlpSWlJZ1lab2lJCitpSWlJaUJobWlJaUlpSWlJWVlhSWlJaUlpSWhoaG9pSWlJaUlxRkxJV1FSRWxTTXNMQXkydHJabzFLZ1I1SEp1YWxUeEVoSVM4UDMzCiszK1BERHorc001KzViZHUyZVBEZ0FabzJiY29WZ0NwbG0zSjBkTVM1YytmcXpHZisrdXV2c1dUSkVtNVRWQ2xTVTFPUms1T0RCdzhlCitvSFhyMWd3elJEVkpibTR1QUdEUm9rVXdNREJnZ1ZDRm16bHpKckt5c3VyVVozNzI3QmtzTEN6ZzRlSEJGWUFxM0lJRkM1Q1FrRkNuCitQbk5HUmdZQVlOV3FWVndCcU1KRlJVVmg0OGFOVUNxVmxmWWVERE5FbFd6R2pCa01NMVFwTm03Y1dPYytjOHVXTFRGanhnek1tREdECitLd0JWdUx0Mzd5SWtKS1RPZlc1bloyZHVVMVNwWWFZeXNjME1FUkVSRVJIVlNBd3pSRVJFUkVURU1FTkVSRVJFUk1Rd1EwUkVSRVJFCit4REJEUkVSRVJFUU1NMFJFUkVSRVJBd3pSRVJFUkVSRURETkVSRVJFUk1Rd1EwUkVSRVJFeERCRFJFUkVSRVRFTUVORVJFUkVSTVF3CitRMFJFUkVSRURETkVSRVJFUkVRTU0wUkVSRVJFUkF3elJFUkVSRVRFTUVORVJFUkVSTVF3UTBSRVJFUkV4REJEUkVSRVJFUU1NMFJFCitSRVJFUkF3elJFUkVSRVJFRERORVJFUkVSRVFNTTBSRVJFUkV4REJEUkVSRVJFVEVNRU5FUkVSRVJNUXdRMFJFUkVSRURETkVSRVJFCitSRVFNTTBSRVJFUkVSQXd6UkVSRVJFVEVNRU5FUkVSRVJNUXdRMFJFUkVSRVZHbmtMQUtpbXVuQmd3ZElTa29xOC9TR2hvWjQ3YlhYCitXSkNWNk5telp3Z01ETVM1Yytld2QrOWVGZ2lWU1ZaV0ZrSkNRbkQxNmxVOGV2UUlDb1VDaG9hRzZOQ2hBMnhzYk5DeFkwZklaREk4CitlZklFcDA2ZHd1VEprMHM4NzZDZ0lKaVltS0JMbHk0c2FLcTJZNVd1cmk2YU5tMEtRME5EYUdueGQzWmltQ0dxRS83ODgwOEVCZ2JpCitwNTkrUWtKQ2dzb3dMUzB0eUdReTZibFNxWVFRUW1XY2p6LytHR3ZYcm1WQlZvS3RXN2RpKy9idHVIYnRHb1FRTURRMFpLRlFxZjM3Cis3Ny93OGZIQnRtM2JrSkNRZ0NaTm1zRFMwaExHeHNaNDhPQUJ0bS9mamlkUG5zRFUxQlIyZG5ZSUN3dER6NTQ5U3h4bWxFb2w1czZkCitDeHNiRyt6WnM0Y0ZUcFYyckRweDRnUU9IRGlBSjArZXFBelQwOU9EVXFsRVRrNE9BRUJmWHgvZHVuV0R2YjA5M056YzBMZHZYNVZqCitHVkZCR0grSmFxaWhRNGRpMDZaTk9IcjBxTXJybHk1ZGdrS2hRRzV1cnZTblZDcVJsWldGMjdkdlk4bVNKUUNBN094c0ZtSWxtVEZqCitCczZlUGN0ZnU2bk1UcDQ4aVRmZmZCT3JWNitHbnA0ZTl1elpnK2ZQbitQVXFWUHc5L2ZIa1NOSDhQRGhReHc5ZWhSQ0NPemV2UnUzCitidDFDV2xwYXFkNGpKaVlHKy9idHcrUEhqMW5vVkduSHFuWHIxdUhjdVhNcXIrL2Z2eDhaR1JuSXpzNUdTa29LSWlJaThNMDMzMEJICitSd2RyMTY2RnZiMDlldlhxaGRPblQ3TVFpV0dHcURhenNySlNlVjVZMVRGZFhWMTA3TmdSWDMzMUZTWlBuaXo5RWxiVG5EcDFTdU9YCitVU2FUb1hIanh1amV2VHRYVUNxMUgzLzhFY09HRGNQejU4L1J0V3RYUkVSRVlNS0VDZERSMFZFOWdHdHB3Y1hGQmRldVhZT05qUTBBCitJRDA5dmNUdnMySERCZ0JBVGs0T2ZIMTlXZkJVcVRwMTZnUzUvUDlYQ0RJM041ZXV1alJzMkJBV0ZoYjQ2S09QOE50dnYrSElrU05vCiszcnc1cmwrL0RpY25KM3o2NmFkUUtwVXNSR0tZSWFxTmRIUjBTbDNIZU55NGNUWHl5c3lCQXdkcTFFa1g2MzVUYVYyOWVoVlRwa3lCCitVcWxFdzRZTmNmVG9VYlJzMmJMSWFabzBhWUlqUjQ3QXlNaW94RmRtN3R5NWc2Q2dJR2hyYXdNQXRtelpnb3lNREg0QlZHbGtNaGwwCitkWFZMTko2cnF5dkN3c0xRcWxVckFNQjMzMzJIanovK21JVklERE5FdGZrZ1VScU9qbzVZdW5ScGpmcU1kKzdjd2ZUcDAvbGxVNjJsCitWQ294WThZTTZhcnAvUG56MGI1OSt4Sk5hMlJrQkM4dnJ4SmZtZkgxOVlXVmxSVW1USmdBQUlpUGoyY25GYVJSeHlwVFUxTWNPblJJCitDdHdiTm16QTRjT0hXWWpFTUVOVWwrWG01aUloSVFINit2b3dNVEVwY0p6OEhRVUlJZFE2RGlqb0JLeTBDcHBuVWZONTl1d1puSjJkCitTOVY3bXhDaVZNdFcybVdxaVBja3l1L0VpUk9JaUlnQUFHaHJhOFBkM2IxVTAwK2FOQWxaV1ZuRmpwZWFtb3FkTzNkaTl1elptRDE3Cit0dlQ2Zi8vNzMySzNkNktxWkdscGlSa3paa2pQdmJ5OGl0M0hsbVkvWE5oK3Y2anRvQ1RIUlUxUmxtTlNhYzhCR0dhSXFFcGR1WElGCitDeFlzVUhzOU1URVJmbjUrc0xhMnhyVnIxNUNTa29KSmt5WkJYMThmYmRxMFFXUmtwTXJPTFRBd0VNT0hENGVwcVNuYXQyK1B4bzBiCitvMy8vL3ZEejh5dTBMVTV1Ymk3T256OFBEdzhQbUp1YlMrODdkKzVjR0JvYVFpNlh3OExDUXEyeDUrWExsMkZyYTRzN2QrNEFBRUpECitRK0hpNGdJWEZ4Zk1uejlmWmR6czdHejQrdnJDMnRvYSt2cjYwTkhSUWRldVhlSGo0MVBnU1Y1WmwrbFZ4NDRkdzhDQkEvSGFhNitoCitRNGNPNk5tekp3NGNPRkJuMTdPZ29DQzFYb3VvZUQvKytLUDAyTmJXRmtaR1JxV2Ezc2pJQ0R0MzdpeDJQSDkvZjhqbGNvd2RPeGFXCitscGF3dHJZR0FFUkhSK1BzMmJQOElqUlFhR2dvb3FLaTZtVFluRE5uanZUNDFxMWJ1SFRwa3RvNHBkbjNDeUZ3N2RvMWVIdDdvMTI3Citka2hNVElRUUF2NysvckN3c0lCY0xrZlRwazN4OGNjZlM5V3hjM056c1huelp2VHUzUnU2dXJxb1g3OCszbjMzWGJXZVJQZnYzNC94Cis0OGRMeDZqRml4ZEx3NUtTa2pCMzdsd01IejVjR3A2L2hrUnNiQ3ptejU4dkRjdjcrK0tMTDVDYm00dkRodzlqN05peDB1dHo1ODdGCitzMmZQeWxVV1pUa0gwTlRVUnFUeERBd014TjY5ZTJ2VU1nY0hCd3NBSWpFeHNkTGZTMXRiV3dBUUFNVGR1M2NMSFcvaHdvVmk1c3laCiswdk1yVjY2SUVTTkdDRjFkWFduNjMzNzdUZlR2MzEvbzYrdExyeTFZc0VBSUlVUjZlcm9ZUFhxMDBOUFRFN3QzN3hZNU9UbENDQ0Z1CiszNzR0K3ZidEt3Q0lIajE2aU5qWVdKWDNQWFhxbEhCeWNwTG0xNkpGQ3hFZEhTMDZkdXdvSEIwZGhZdUxpNmhmdjc0QUlIUjBkTVFmCitmL3doVGZ2WFgzK0owNmRQQzJOall3RkEyTnJhaXRPblQ0dlRwMCtMOFBCd2FieW5UNStLUG4zNmlPblRwNHZJeUVqeDZORWpjZWpRCitJZEdpUlFzQlFQVHQyMWVrcGFWVnlETGxVU2dVWXZiczJVSXVsNHN0VzdhSTdPeHNJWVFRMGRIUndzTENRalJxMUVnQUVJYUdocFh5Cit2WnVibXd0ZlgxK05XL2Z6eXJSZHUzWmk1c3laSWlBZ1FEeDU4cVJDNXQyMmJWdU4vTXdWb1ZXclZsTFplWHA2VnNwN0tKVkswYlZyCitWK0hsNVNXOTV1L3ZMNzJ2czdOem5UN1dlSHQ3Q3pzN080MWJybW5UcGdrQXdzREFRSXdZTVVLc1g3OWVSRVpHQ3FWU1dTR2Z1YXErCis5d1lOR2tqcjJsOS8vVlhpNmRxM2J5OU50M2p4WXBWaHBkbjNYN3AwU1l3ZVBWckk1WEtWNVJnOGVMQ3dzcklTN3U3dTR1MjMzNWFHCitmZjc1NStMSmt5ZmlyYmZlRW82T2ptTFdyRmxpMUtoUlFrdExTd0FRcnE2dWFzdDY3OTQ5YWY2REJ3OVdHeDRkSFMwZHMxOHRkNlZTCitLWll0V3lhOWYrL2V2VldHcjF5NVV1anE2b3FBZ0lBQ3YvdlNIZ2RMZXc1UUZwR1JrUUtBMm5sQlJRZ01EQlFHQmdhQ1lZWVlabXBaCittRGw0OEtBSURRMlYvaTVkdWlUT25qMHJ2djc2YTZHcnE2c1NadExTMGtSMmRyWjBvQVFnbkp5Y3hLRkRoMFJxYXFxWU9IR2lhTktrCitpVGg5K3JSUUtwVmk3Tml4QWtDQko1TXBLU21pYytmT0FvRG8xS21UU0VsSlVSdG42TkNoQW9EUTE5Y1hscGFXSWlJaVFocjJ4eDkvCitTSjlqeXBRcGF0T2FtSmdJQUdMRWlCRnF3N0t6czBXZlBuM0VxRkdqMUhidysvZnZsejZidDdkM2hTN1Rva1dMQkFDeFpzMGF0V0dQCitIeitXRHR4MUxjdzBhOVpNS25NZEhSM3B3RjRSNGFhMmhwbms1R1NwekFwYnB5ckMyYk5uaFV3bVUvblJJek16VS9xeEFJQzRlZk1tCit3NHlHOGZEd2tFNmd0YlMwaEo2ZVhvV0ZtNW9RWmthT0hDbE5OM3IwNkhMdit4Y3NXQ0FOczdHeFVmbGhUS2xVU3UvWG9FRURZV2xwCitLUzVjdUtBeS9lclZxNlhwWTJKaTFKYlgxTlMwMERDVC8zaFdVTGtybFVveFpNZ1E2YnZPSzZmMDlIVFJzV05IOGQxMzN4VTR6N0tVCitSV25PQVJobWlCaG1xaXpNRlBlWFA4emsrZUdISDZUaFgzMzFWWUh2Y2V6WU1RRkFORzNhVkdSbFpSVTR6cEVqUjZUNWZQSEZGMnJECitQL3JvSTJuNHMyZlAxSWIzNjlkUENrT2xDVE5idDI0VkFNUzVjK2ZVaG1WbVprcS9NRFZ0MmxTNm1sVGVaYnB4NDRiUTF0WVdob2FHCitoWmJIOE9IRDYyU1lNVEl5S25UOUsyKzRxYTFoNXA5Ly9sRXBwNjFidDFiSys0d2FOYXJBWDVQemdqa0FNV3ZXTElZWkRRd3orYThtCis1UDhyYjdpcENXRm14b3daMG5TT2pvN2wzdmR2Mzc1ZG1sOVlXSmphdFB2MjdaT0diOXEwU1czNHpaczNwZUc3ZHUxU0c5NnBVNmNpCit3MHhlMkNtczNPL2Z2eTlkMlhkeWNoSktwVkpNbXpaTk9EZzRDSVZDVWVBMDVUa09sdVFjUUpQRGpKdzFVWWxxbDVzM2I2bzA3aGRDCitJQzB0RFpjdVhjS0hIMzVZNERUNTcxOHhaTWlRQXNmSjZ4TFp5c3FxME80MWh3MGJCbU5qWXp4Ly9oeGJ0MjdGMHFWTFZlNHJrTmNyCitEUUFZR3h1clRaL1hEV2Q4Zkh5cFByT2ZueDhBSUR3OEhOSFIwV3JEbXpWcmhzZVBIeU1oSVFFM2J0eFF1ZjlMV1pkcDNicDFVQ2dVCitHRGh3WUtIbDBhaFJJNjZRcjhqZnB1cmV2WHZZc1dNSHZ2LytlK1RtNXFKZHUzWVlQSGd3SEIwZDBiOS8vMks3Sks3TkZBcEZoYzh6CitOallXaHc4Znh2SGp4OVdHelp3NUV5dFhyb1JDb2NDdVhidXdmUGx5TkczYWxDdHNEWkIzVStTOGRobEhqeDdGaVJNbmtKV1ZCUU1ECitBemc0T0dEQWdBRndjSEJBdDI3ZFN0MzdwU2JJdjh6NWoxZGwzZmZuMys4M2FOQ2cwUDErM2p4ZTFhSkZDK254dzRjUEsvenp0bW5UCitCdDk4OHczYzNkMXg2dFFwVEpvMENZY1BIMFpVVkZTaFhmNlg1emhZa25NQVRjWXdRMVRMNk9ucFFWOWZYK1cxZXZYcVlmanc0Vml3CitZSUhVa0w0dytYZnkrUStXRnk1Y0FBQTBiOTY4eUduNzkrK1BBd2NPSUQ0K0h0SFIwZWpSbzBlSmx6MXZKeTFLMGNnMU9Ua1oxNjVkCitnN2EyZHFHTnpzZU1HYVAySHVWWkppR0UxRVZvNTg2ZHEvVWs1djc5KzdoMjdacEdyWU81dWJsbERqZmZmLzg5dG0vZkRvVkNJWVdiCiszcjE3dzlYVnRWYUhtMWVEUTF4Y1hJVy94NVl0Vy9ER0cyOWcwS0JCQlo2OHVibTU0Y0NCQTBoUFQ4ZjI3ZHZ4K2VlZjE4bDlhRnBhCittc1p0VXk5ZXZDaHp1RGx5NUFpQ2dvS1FuWjJOeG8wYnc5SFJFZjM2OVlPOXZUMzY5T2xUSTc2VGYvLzlWM3I4K3V1dlYvcSt2NkRqCitvTXJKYzc0ZjZTcnIva3pUcDAvSHZuMzdjUDc4ZWZqNysyUGp4bzJGOWtKYWtXVlIzR2RubUNHcVE0UUc5anJ6OXR0djQrN2R1NldlCitMajQrWHJvWlgzRW5xcDA2ZFpJZVAzejRzRlJocGl6dTNyMHJkVCs1WnMyYUt0a1J2M2p4QWsrZlBnVlF2VmRmc3JPenNXclZLcXhhCit0YXJXYkRmNTE2OTc5KzVoNjlhdFVraWZPblZxcFZ5eDBBUk5talNScm1vQ1FFeE1USVhPUHlNakEzNStmbEFvRkNxL3lMNjZuZWZaCitzR0VENXMyYnAzTFNWbGZjdUhHanhwemtsL1JZbE5jclYzSnlNZzRmUGl6OUdPUG82Q2lGQTAxMjY5WXQ2WEh2M3IycmJkOWZsYlMwCit0T0RuNXdkemMzTmtaR1RnMUtsVG1EVnJWb0ZYMW1wN1dURE1FRldERnk5ZVlQbnk1UnEzWEQxNzlzVEdqUnRMUFYzK0U4aThrL2pDCitHQm9hU28rcllvZWFGN0tFRUxoLy8zNkpiekpZSHZsL05jL016S3kyNzFOUFR3L2ZmdnR0b2RVSHE0dVptVm1acnl6bzZla2hLeXNMCitlbnA2c0xTMGhKT1RFL3IzN3c4Ykd4dm82dW9pTURDdzF1NDM3T3pzY1BEZ1FRQXZ1K0t0U0FFQkFVaE5UWVdQajArUnY4cXVXTEVDCitUNTgreFlNSEQzRG8wQ0dWWDNQcmlwNDlleFpZRmE4NmZmYlpaL2poaHg5S2RkVXpqNDZPRHBSS0paUktKVHAwNklDaFE0ZkN3Y0VCCitmZnYyaGJHeE1SWXNXSURFeEVTTlBwNUdSVVZKejExY1hLcHQzMS9WMHRMU3BPUHZrU05Ic0cvZlBvd2ZQMTRqam9NTU0wUzEyTGx6Cis1ekJnd0FCTW5UcTExbnltNXMyYlEwZEhCems1T1lpT2pvWVFvdEI2MS9sdjBQWEdHMjlVK3JMVnIxOWZlaHdTRWxJbE8zRTlQVDNwCis4ZDkvLzExdDM0dE1Ka1A5K3ZVMXJtMURhZXJrNit2ckl6TXpVeVc4T0RvNkZ0azJxN1lhTzNhc0ZHYnUzTG1EcUtnbzZmNUg1U0dFCit3SVlOR3pCbXpCak1uVHUzeUhIajQrUHgxVmRmQVhoNUU4MjZHR2J5N2pPaVNmTHZjNHFqcTZzTGhVSUJwVktKamgwN1lzaVFJWEJ3CitjSUM5dlgyUjFZUTExYzZkTzZXYURpNHVMbWpYcmwyMTdmdXJVbFpXRmlaTW1JQ2xTNWRpNDhhTmVQVG9FZWJNbVlNQkF3YW8zWU9xCit0cGRGY1hqVFRLSUtvbFFxc1h6NWNnd1lNQUFBTUh6NDhGcDFjTSs3c1Y1Y1hCeHUzTGhSNkxoNTlYVmJ0V3FGamgwN1Z2cXltWnFhCitTaWZQZm41K1JWYnZTMDFOeGN5Wk04djlucTFidDVZYVRGNjRjSUYzVFMrRnZQWmNlbnA2c0xPend4ZGZmSUhnNEdBa0p5Y2pPRGdZCitpeFl0Z3AyZFhaMExNZ0RnNXVhbWNoTHkzWGZmVmNoOEwxNjhpSWlJQ0V5ZlByM1ljV2ZPbkNtdDI1Y3VYVUo0ZURoWFdnMm5xNnNMCitiVzF0eUdReW1KbVp3ZDNkSFFjT0hNQ0xGeTl3NjlZdHJGdTNEcU5HamFxUlFlYng0OGRTTlZwZFhWMnNYcjI2V3ZmOUZhVWt4NHlGCitDeGVpY2VQR21EOS9Qalp2M2l3ZGZ6MDlQVFhpT01nd1ExVEx2SGp4QW9NR0RjS1NKVXNBdkx4amNVRTlvRlRXVGpILzFaREtPckgrCis0SU1QcE1jQkFRR0ZqcGQzOHVQdTdsN3FYbk9LV3ZhOGVlWFYvYzdUcUZFaktXZ0ZCd2RqejU0OUJVNmZtNXVMS1ZPbXdNbkpxZHpMCitwS2VuaC83OSt3TjRXVmM1S0Npb3lHbnJXdGpKcS9Md2FuaXh0N2RuZUNtQ2pvNE9ObTNhSkQzZnRXc1hUcDgrWGVMcEV4TVQ0ZXJxCitxblpYOE5XclY4UE16QXoyOXZiRnpxTmx5NVlZUFhxMDlIenQyclhjd1dzQXBWSXBWVGNxYVhqSlgrVzNKcDNFNTBsSVNNRElrU09SCitrSkFBQU5pMGFSTzZkT2xTWmZ2KzhzaXJZcDJlbmw1Z0dhU2twQlE1L2ErLy9vcU5HemZDejg4UFdscGFjSFYxeGJ2dnZnc0ErT21uCituM0QwNk5FcVBRNHl6QkRWY3VmUG4wZlhybDF4OGVKRktKVkthR2xwNGJQUFBxdXk5MDlQVDFjNVFKU2xaNVg4WWFpd090bVRKazJDCitwYVVsQUdEejVzMEYxckcrZmZzMmdvT0RZV1ptaG5uejVxa05MNjd4ZGw3UFZnVWQ4UEtxZmR5K2ZWc2FucDJkamNlUEg2djhValZ0CisyalNzWDc5ZTZzMEhlRmxseDhYRkJkbloyWEJ6YzZ1UVpjci8rVHc4UE5TNjUweE1URVJJU0FpQWw0MXVVMU5UNjh3MmtYY0Fmelc4CitYTHg0a2VHbEdFT0hEc1dhTld1azUyNXViaVZxSnhRYUdncExTMHYwNjlkUHBkdllLMWV1SUNnb0NHUEdqQ254and2dnZmZWU5UGpBCitnUVBWV3BXUy92OEpzQkNpeG9XWFYvZTErZHNZRmhac2hCQTRkZW9VK3ZUcGd5dFhya0JYVnhmYnRtM0R0R25UMU1ZdDY3NC8vekd2CitMTWZFNG41QXpMdkNldm55WmR5K2ZWdWxERmFzV0NIdEl3dTZEVUZ5Y2pJbVQ1Nk1CUXNXNE0wMzM1UmVYN2R1bmZRZHU3dTdxeDJECit5M01jTE1rNUFNTU1VUzJrVkNyeDlkZGZZK0RBZ1lpUGowZHViaTdrY2puR2p4K1B0bTNiVnRseW5EeDVVdVY1WVZjSmlwSy91K2JmCitmLys5d0hIa2Nqa09IVHFFVHAwNklUNCtIaE1tVEZENUJUNGhJUUVUSjA1RW16WnRFQmdZV0dEZi9mbFBpdko2YmNwL1FQanp6ejhCCit2T3hPTkRrNVdXVzRyYTJ0TkkvNTgrZmo0TUdEZU9lZGQvRHZ2LzlpM0xoeEdEZHVuQlErUEQwOTBieDVjL1RvMFFPbXBxWXdNek5ECitVbElTL1AzOTFVN295cnBNdzRZTmc0ZUhCd0RnL3YzNzZOV3JGMWFzV0lIQXdFQnMyN1lOam82T01EQXdrQTRPM2J0M3IzV1g5Z3R6Cis3ZG8xWkdWbE1ieVUwU2VmZklKOSsvYWhXYk5tU0UxTmhhdXJLOXpjM0hEeTVFbVZYM3BUVTFNUkZCU0VkOTU1Qnk0dUxsaTJiSmxLCitkOHFabVptWU5XdVd0UDJXVkY2YmhMeVRyM256NWhWNzhrZVZhOTY4ZVlpTGk2dFI0ZVZWNTgrZlYxbVA5dTNiaDVpWUdQejk5OS80CisvZmZmY2Zqd1lTeGF0QWc5ZXZUQTRNR0RjZS9lUGJpNXVlSDY5ZXVGVnBFczY3NC9mMitCQlFXSzJOaFk2WEZCMWFvZlBIZ2dQWDc4CisrTEhhOEx5YURObloyYkN6czRPWGx4ZTh2YjFoYm00T0lRUWNIQndBQUdGaFlYai8vZmR4N05neDZieGkyclJwVUNxVjhQTHlVcG1uCitrWkdSVlB2ajhlUEhtREpsaWtyd0tNOXhzQ1RuQUpxZTlvazBub0dCZ2RpN2Q2L0dMTStUSjArRWc0T0QyaDJaWlRLWmlJeU1GRUlJCitFUndjTEFDSXhNVEVTbGtHUHo4L01XalFvQUx2Q20xblp5YysvZlRUWXVkeDVzd1o0ZXJxS3JTMHRLUnA5ZlQweEtSSms4VDI3ZHNMCituQ1lwS1VuTW16ZFBOR3JVU0x6Kyt1dGl4b3daNHNNUFB4UW1KaWJDM2QxZHhNWEZxVTBUR2hvcXhvOGZyN0tNWGJwMEVWOSsrYVVRCitRb2lUSjA4S0p5Y25sZUU5ZS9ZVTI3WnRrK1lSR3hzcldyZHVMUTEvL2ZYWHhmbno1NlhoT1RrNVlzbVNKZEpkay9QK0RBd014TUtGCitDMFZHUmthRkw1TkNvUkRmZlBPTmFOcTBxY3A0SmlZbTR0eTVjK0w5OTk4WGhvYUd3c1BEUXdRSEJ4ZDY1K2F5TWpjM0Y3Nit2blZxCitYOUMyYmRzNjg1bmo0dUxFa2lWTFJOdTJiVlgyTVlhR2hxSlpzMllDZ0dqVHBvMVl0R2lSMm5hM2YvOSswYmx6WjJrNnVWd3VSbzBhCitKWTRmUDE3bysvMzExMTlpOHVUSm9sMjdkbXI3bE42OWU0dGZmdm1sMXBlNXQ3ZTNzTE96cTFQYmxMZTNkNkYzb3Erb1k1V1RrNVBRCisxZFZWVzYveS96VnUzRmgwNmRKRmpCMDdWbXphdEVrOGZQaXdSUE12emI3LzExOS9GYk5telJKNmVub3ErMnR2YjI4Ukd4c3Ivdjc3CitiekZ2M2p6UnZIbHphYml1cnE3dzhQQVFGeTVjRUJrWkdlTHp6ejhYN2R1M1Y5bTIzTjNkUldCZ29QUStTcVZTTEYyNlZPWDQzS3haCitNK240NGV6c0xOcTNieSs4dmIxRmFHaW95TTNORmNIQndlTHR0OThXQUlTUmtaSHc4ZkZSK1p6bnpwMFREZzRPS3AvUjF0WldaWnN1Cis3WEd3TE9jQXBSVVpHU2tBaU5qWTJBcGZ0d0lEQTRXQmdZR1FDYlpjcFJxZ1NaTW04UFgxVmFuK1VKMi9MbzBaTXdZcEtTa3E3VGZrCitjamtjSFIxeDZ0UXBBQzk3RkxHM3QwZGlZcUwwQzMxdGtwV1ZoVC8rK0FOeGNYRm8yclFwZXZUb29kS2pTbVZJUzB0RFdGaVkxUE5WCitRVDM4WkdSazRQcjE2MGhJU0lDUmtSRzZkKzllcXA2QXlsb1cxNjlmUjF4Y0hJeU5qZEd6WjAvSTVYTEV4TVRBeE1SRTVlN0tGYWw3Cis5Kzd3OFBDUXJoRFZCU1ltSnZEMjlxNVRuMWtJZ2R1M2IrUFBQLzlFWEZ3Y2xFb2xqSTJOMGJWclYzVHExS2xHM3RGZFV5MVlzQUFoCitJU0VJRGc2dVU1ODVLaXFxeG5kN1hoMzcvdUs4ZVBFQzE2OWZSNzE2OWRDblR4K3BEZUUvLy95RGR1M2FsZm9tempXeExLS2lvdEM5CitlM2ZFeHNaV2VLMlZZOGVPNGYzMzMyZlh6RVFscFZBb3NHelpNaXhidGt5NkhQenE4QysrK0tMT2xJZWVuaDZzckt5cTlEMGJOR2dnCis5UlpYbUhyMTZrbFYwcXF5TFBJYVgrYlhvVU1IYmpoVWJqS1pESjA2ZFZLNUlTMFJWZisrdnpoR1JrWVlOR2lRMnV1VmZkc0NUU3lMCit5c1F3UTFRQ1Q1OCt4Wmd4WXhBV0ZsWmczWEV0TFMxWVdGaEk5V0NKaUlpSXFQS3hBd0NpWXB3NWN3YmR1blZEZUhoNGtiMThMRnk0CitrSVZGUkVSRXhEQkRWUDBVQ2dVV0wxNE1KeWNuSkNRa3FOM2ZKSTlNSm9PSmlRbEdqQmpCUWlNaUlpS3FRcXhtUmxTQVI0OGVZZno0Cis4UWdMQzVQNjl5K010clkydnZqaWkwcHJ5RWRFUkVSRURETkVKWExxMUNrTUhqd1l1cnE2SmJwNWxJR0JBU1pObXNTQ0l5SWlJcXBpCisvQ21aS0I4aEJQYnYzdzhBaFZZcnkwOVhWeGRlWGw2OElTQVJFUkVSd3d4UjlaTEpaTmkrZlR2V3IxOFBMUzJ0WXF1TzZlam9ZTWFNCitHU3c0SWlJaUlvWVpJczB3Wjg0Y25EbHpCbzBhTlNyMGhvZTZ1cnI0NktPUGF1VU5NWW1JaUlnWVpvaHFNRWRIUjRTR2hrSmJXN3ZBCitPMndybFVwNGVucXlvSWlJaUlnWVpvZzB6NnBWcTlDc1dUTzR1TGhBVzF0YmVsMVhWeGVUSjAvR2E2Kzl4a0lpSWlJaVlwZ2gwaXpyCisxcTFEUUVBQS92ZS8vK0h3NGNOWXZudzV0TFMwSUpQSmtKMmREUzh2THhZU0VSRVJFY01Na1dhNWNPRUNQdnZzTS9qNitzTEd4Z1l5CittUXplM3Q0SURBeUVFQUkyTmpibzJMRWpDNHFJaUlpb0d2RStNMFN2dUgvL1BzYU9IWXRwMDZaaDZ0U3BLc09HRGgyS1c3ZHVJU3NyCitpd1ZGUkVSRXhEQkRwRG5TMDlQaDV1WUdNek16ckZ1M3JzQnh6TXpNV0ZCRVJFUkVERE5FbXNYRHd3TlBuejdGMWF0WGVTTk1JaUlpCitJb1lab3BvaHI4SC9yNy8raXBZdFc3SkFpSWlJaUJobWlEUmZYb1AvTFZ1MndNYkdoZ1ZDUkVSRVZBT3dOek9xODRwcThFOUVSRVJFCitERE5FR3Fra0RmNkppSWlJU0RPeG1oblZhV3p3VDBSRVJGUUx3c3ozMzMrUDc3Ly9IZzBhTkdDcFVJVlRLQlRJeWNuQi8vNzNQeGdiCitHMnZFTXJIQlB4RVJFVkV0Q1RNeE1URUlEUTJGbDVjWFM0VXFYRlJVRk02ZlA0L016RXlOV0I0MitDY2lJaUtxUldFR0FKeWRuYkZxCisxU3FXQ2xWS21EbCsvTGhHTEFzYi9CTVJFUkhWRHV3QWdPb1VOdmduSWlJaXFqM1lBUURWS1d6d1QwUkVSTVF3UTFUanNNRS9FUkVSCitFY01NVVkzREJ2OUVSRVJFdFEvYnpGQ3R4d2IvUkVSRVJBd3pSRFVPRy93VEVSRVIxVjZzWmthMUdodjhFeEVSRVRITUVOVTRiUEJQCitSRVJFeERCRFZPT3d3VDhSRVJGUjdjYzJNMVRyc01FL0VSRVJFY01NVVkzREJ2OUVSRVJFZFFlcm1WR3R3Z2IvUkVSRVJBd3pSRFdPCitwamI0WDcxNk5Rd01EUGdGVVlXTGlvcXFjNS81NGNPSFdMMTZOWktUazdrQ1VLWHNyODNOemV2YzV6NTI3QmhXcjE3TkZhQVl5Y25KCit1SC8vUHRxMWE0ZUdEUnV5UURUa09NVXdRN1dDSmpiNGI5aXdJVXhNVEhEaXhBbG9hYkZHSjFXOE5tM2F3TWpJcUU1OVprZEhSOXkvCitmeDhIRGh6Z0NrQVZybDI3ZHVqWnMyZWQrc3l0V3JWQ216WnR1RTI5UXFsVUlpMHRUZVV2SnljSE1wa00rdnI2Nk5LbEN3dXBCTEt6CitzMkZxYWxxcHRXVVlacWpHMDlRRy94WVdGcmgzN3g2L0lLSUtkT2JNR1JZQ1VRWDY2S09QOE5GSEg5WHBNbEFvRklpT2prWjRlRGd1CitYNzZNeTVjdjQ4YU5HeEJDb0hQbnpuQnljb0tWbFJWc2JHd1FGUldGaFFzWDR1clZxMXg1TkFUREROVm9iUEJQUkVSRXBmSG8wU01wCit0RnkrZkJuWHJoT0psVVFBQUNBQVNVUkJWRjFEYW1vcVdyWnNDV3RyYTR3ZlB4NDJOamJvMDZjUEdqZHVyREx0alJzM1dJQU1NMFFWCitodzMraVlpSXFEQ3BxYW00ZXZVcXdzUERFUllXaHZEd2NEeDY5QWoxNjlkSDc5NjlZV1ZsaGRtelo4UGEyaHB0MjdabGdUSE1FRlVkCitUVzN3VDBSRVJGV3Z1T3BpMXRiV1dMaHdJV3hzYk5DdFd6Zkk1VHdOWnBnaHFpYWEyT0NmaUlpSXFrNTVxb3NSd3d4UnRkSFVCdjlFCitSRVJVT1ZoZGpCaG1xRlpnZzM4aUlxTGFqZFhGaUdHR2FpMDIrQ2NpSXFwZFdGMk1HR2FvVGpoeDRnVDI3ZHZIQnY5RVJFUTFGS3VMCitFY01NMVVtNXVibjQ4Y2Nmc1hYclZqYjRKeUlpcWdGWVhZd1lab2p3c3NGL2VubzYzbjc3YlRiNEp5SWkwbENzTGtZTU0wU3Z5R3Z3CityNldsaFVtVEpyRkFpSWlJTkFDcml4SERERkVKZUhoNDRObXpaMmpRb0FFdlB4TVJFVlVEVmhjamhobWlNbGkzYmgwQ0FnTHc2NisvCitZc2lRSVN3UUlpS2lLbENTNm1MVzF0YXd0TFJrZFRGaW1DRXF5SVVMRi9EWlo1OWh5NVl0YlBCUFJFUlVTVmhkakJobWlDclkvZnYzCitNWGJzV0V5Yk5vME4vb21JaUNvSXE0c1J3MHdWQ0FvS2dvbUpDYnAwNmNKdnB3N0thL0J2Wm1hR2RldldzVUNJaUlqS2lOWEZpR0dtCitpaW1WU3N5ZE94YzJOamJZczJjUHY1MDZLSy9CLzVVclY2Q3JxOHNDSVNJaUtnRldGeU9HR1Exdzh1Ukp4TVRFSURZMkZxdFhyOGJyCityNy9PYjZnT3lkL2d2MlhMbGl3UUlpS2lBaWdVQ3R5NGNVUGxxZ3VyaXhIRGpBYllzR0VEQUNBbkp3ZSt2cjVZdm54NWxiNy9xVk9uCis0T1RreExXaUdyREJQeEVSVWNGWVhZeW9Cb1NaTzNmdUlDZ29DTnJhMmxBb0ZOaXlaUXUrL1BKTDFLdFhyMHJlLzhDQkE5aTdkeS9ECitURFZnZzM4aUlxS1hXRjJNcUlhR0dWOWZYMWhaV2VITk45L0U3dDI3RVI4Zmo3MTc5MkxhdEdsVkVxU21UNThPQndjSHJoRlZqQTMrCitpWWlvcm1KMU1jMzI5T2xUaElTRVlQVG8wVVdPRnhNVGczLysrWWMvaU5mbE1KT2Ftb3FkTzNkaS9mcjFVcGdCZ1AvKzk3K1lPblVxCitaREpaaWVjbGhGQWJYNmxVUWt0THE4RHhuejE3Qm1kblp5UWxKWlZxbVlVUUVFSVVPdC95TEZORlRmdnFmQUNVcWl5ckFodjhFeEZSCitYY0hxWWpYTHpaczNNVzdjT01URnhhRnAwNmFGanJkbnp4NGNQWHFVWWFhYWFHbkNRdmo3KzBNdWwyUHMyTEd3dExTRXRiVTFBQ0E2CitPaHBuejU0dGR2cmMzRnljUDM4ZUhoNGVNRGMzQndBa0ppWmk3dHk1TURRMGhGd3VoNFdGQlU2ZlBxMHkzZVhMbDJGcmE0czdkKzRBCitBRUpEUStIaTRnSVhGeGZNbno5ZjdYMnlzN1BoNitzTGEydHI2T3ZyUTBkSEIxMjdkb1dQancreXNySXFaSm5LTzIxK1Y2OWV4Y1NKCitFMkZ2YjQvQmd3ZWpiZHUyNk4yN04zYnMyQ0dGbStxVTErRC93SUVEYlBCUFJFUzFTbXBxS2k1Y3VBQWZIeCs0dWJtaGRldldhTjI2CitOU1pPbklqUTBGRDA2ZE1ITzNic1FHeHNMSjQ4ZVlKZmZ2a0ZYM3p4QlFZTUdNQWdveUZzYkd5Z3E2dUxrSkNRSXNlN2NPRUNIQjBkCitXV0RWUmZ3ZmIyOXY0ZXpzTEtxYVVxa1VYYnQyRlY1ZVh0SnIvdjcrQW9BQVVPd3luVHAxU2pnNU9Vbmp0MmpSUWtSSFI0dU9IVHNLCitSMGRINGVMaUl1clhyeThBQ0IwZEhmSEhIMzlJMC83MTExL2k5T25Ud3RqWVdBQVF0cmEyNHZUcDArTDA2ZE1pUER4YzVYMmVQbjBxCisrdlRwSTZaUG55NGlJeVBGbzBlUHhLRkRoMFNMRmkwRUFORzNiMStSbHBaVzdtVXF6N1Q1YmRxMFNjaGtNdUhwNlNrVUNvVVFRb2kwCit0RFJoWjJjbkFJZ1ZLMVpVNmZjY0dSa3BBSWpZMkZnaGhCRG56NThYY3JsY2JOKyt2VVRUR3hnWWlMMTc5d29pSWlKTms1dWJLeUlqCitJNFdmbjUrWU5tMmFNRGMzRjlyYTJrSkxTMHQwNmRKRmZQREJCMkx6NXMwaUlpSkM1T1Rrc01CcWtINzkrb2xQUHZsRWVyNTM3MTdSCit0bTFiNlhsNmVyclEwOU1UUjQ0Y1lXRlZzY0RBUUdGZ1lDQ3FQY3ljUFh0V3lHUXljZmZ1WGVtMXpNeE1LV0FBRURkdjNpeDJQa09ICitEaFVBaEw2K3ZyQzB0QlFSRVJIU3NELysrRU5vYTJzTEFHTEtsQ2xxMDVxWW1BZ0FZc1NJRVFYT096czdXL1RwMDBlTUdqVktLSlZLCitsV0g3OSsrWGx0UGIyN3ZDbHFrODB6NTQ4RUFhZnVyVUtaVmhBUUVCQW9CbzFLaVJ5TXJLcXBZd0V4c2JLNHlNaklTN3UzdUpwMmVZCitJU0lpVGZIdzRVUHh2Ly85VDh5ZlAxLzA3OTlmTkd6WVVBQVFMVnUyRkNOR2pCQXJWcXdRWjg2Y0VVbEpTU3lzR203eDRzV2laOCtlCitoWWFaOCtmUEMyMXRiWkdRa01EQ3FxWXdVKzNWekRadTNBZ1hGeGUwYTlkT2VrMVBUdzh6Wjg2VW5xOWZ2NzdZK1ppYW1nSUFNak16CitFUmdZQ0FzTEMybFk5KzdkMGJkdlg2a3FXV250M0xrVFY2OWV4Wnc1YzlUYW5Bd2ZQaHo2K3ZvQWdLMWJ0eUkzTjdkQ2xxazgwOTYrCitmUnNLaFFJQUVCY1hwekxNMk5nWUFKQ1Nrb0s3ZCs5VytmZWRrWkhCQnY5RVJNVHFZbFFqT0RvNjRvOC8va0JDUWtLQnc4K2ZQNC91CiszYnVqU1pNbUxLeHFVcTBkQU1UR3h1THc0Y000ZnZ5NDJyQ1pNMmRpNWNxVlVDZ1UyTFZyRjVZdlgxNWs0eXR0YlcyMUUvYjhXclZxCitCUUNJajQ4djlYTDYrZmtCQU1MRHd4RWRIYTAydkZtelpuajgrREVTRWhKdzQ4WU5kTy9ldmR6TFZKNXArL1hyaDA4Ly9SUlpXVmtZCitPWEtreXJEOFlheTBuUjVVaEMrLy9KSU4vb21JU0NPeGR6RjZsWTJORFhSMGRCQVNFZ0pYVjFlMTRXd3ZVOGZEekpZdFcvREdHMjlnCiswS0JCQlo2c3U3bTU0Y0NCQTBoUFQ4ZjI3ZHZ4K2VlZmwvbTk4bnIvRXFWcytKNmNuSXhyMTY1Qlcxc2JUNTQ4S1hDY01XUEdxTDFQCitaUzVUY2RQSzVYSjgrKzIzS3ErbHA2Y2pJQ0FBTzNic2tGNVRLcFZWL3AwZk9YSUVGeTllWklOL0lpS3FkdXhkaklxanI2OFBhMnRyCitYTGh3UVMzTVpHUms0UExseS9qc3M4OVlVSFV4ekdSa1pNRFB6dzhLaFVLNmt2R3EvRmNkTm16WWdIbno1bFg1cnlCMzc5NkZFQUpLCitwUkpyMXF4UnVXSlNFOXk3ZHcvcjE2L0hyVnUzTUhYcVZDeFpzcVJhdXc1Y3NXSUZiR3hzdU9VUkVWR1Y0czBvcWF3Y0hCeHc5T2hSCit0ZGN2WDc2TTNOeGMyTnZiczVEcVlwZ0pDQWhBYW1vcWZIeDhpcnlhc1dMRkNqeDkraFFQSGp6QW9VT0hWSzZDVklXMHREUUFMNitBCiszTDkvSCszYnQ2OFJYMnhhV2hvV0xGZ0FmMzkvK1ByNllzMmFOWkRKWkxodzRVSzFMdGZ0MjdkeC8vNTlIaWlJaUtqU3NMb1lWU1JICitSMGNzWDc0Y2lZbUpLcSt6dlV3ZERqTkNDR3pZc0FGanhvekIzTGx6aXh3M1BqNGVYMzMxRllDWE45R3M2akJUdjM1OTZYRklTRWlOCitDRE5KU1Vsd2RIUkVSRVFFZ29LQ01HVElFSTFadGw2OWVzSEV4QVNUSmsyQ241OGYyODBRRVZHNXNib1lWYWE4ZGpQQndjRXFyN085CitqR2FvbHQ3TUxsNjhpSWlJQ0V5ZlByM1ljV2ZPbkFrZEhSMEF3S1ZMbHhBZUhsNmx5MnBxYWlvMW12Zno4eXV5ZlV0cWFxcEtMMnpWCitaZVhLbFlpSWlJQ0ppWWxHQlJrQWNIWjJCZ0Q4OE1NUGVQUE5OM0hpeEFsdWhVUkVWR0xzWFl5cVd2NTJNM255MnNzNE9EaXdnT3BpCittRm05ZWpYTXpNeEtWTWV3WmN1V0dEMTZ0UFI4N2RxMVpYclBva0pJWGxqSnpzNVdHOWFvVVNOWVcxc0RBSUtEZzdGbno1NEM1NUdiCittNHNwVTZhVXFqMUtXUnIrbDJUYXZON2g5UFQwMUlibDVPUlUrMG9YRlJVRjRHVjdKR2RuWjR3Y09STC8vUE1QdDBZaUlsS2hVQ2dRCitGUldGN2R1M1kvcjA2VktWbmdFREJtRDM3dDFvMHFRSkZpNWNpSWlJQ0NRbEplSGl4WXY0OXR0dk1XYk1HRlpucGdybDRPQ0E4K2ZQCitTOC9Ed3NMWVhxYXVocGtyVjY0Z0tDZ0lZOGFNVWJ0blMySGVlKzg5NmZHQkF3Znc5OTkvRjdqREswcmVTWHhCSVNDdnkrZmJ0MjlMCit3N096cy9INDhXTUFnS2VucHpUdXRHblRzSDc5ZW1SbFpVbXYzYmx6Qnk0dUxzak96b2FibTF1RkxGTjVwczNycGV6T25UdjQ4ODgvCitwZGN6TXpPeGUvZHVsVjhWeWh1cXlxSmJ0Mjc0NUpOUFlHQmdBRjFkWGNURXhLQmJ0Mjc0NnF1dnBHVWlJaUxOZFAzNmRkeTVjNmRTCis1djNvMFNNY1BIZ1FYbDVlY0hCd1FKTW1UZEM5ZTNjc1dyUUlMMTY4d1BqeDQzSHk1RWtrSkNRZ09qb2FPM2JzZ0x1N095d3NMTmp1CitoU3BWM3YxbTB0UFRBYnlzWXRhalJ3KzJsNmxyWVNZek14T3paczBDZ0ZMdGRQTGZVRk9oVUdEZXZIbHEzUXJuRHpqUG56OVhHU2FFCitrRTdxazVLU2tKeWNyRExjMXRaV21zZjgrZk54OE9CQnZQUE9PL2ozMzM4QkFPUEdqY080Y2VPa0VPSHA2WW5telp1alI0OGVNRFUxCitoWm1aR1pLU2t1RHY3NjhTME1xelRPV1pOdS9xa0JBQ2d3WU53c0tGQ3pGNzltejA2TkVEWGJ0MmxjWmJ0V29WbGl4WmdoOSsrS0hLCitWN3dsUzVaQVgxOGZQWHIwd04yN2R6RnIxaXhzM3J3WlhicDB3YUZEaDdobEVoRnBtTjkvL3gwalI0NUVyMTY5RUJBUVVPNzVzYm9ZCisxU1I1N1dadTNyd3BoUmxXTWRNUTR2OTRlM3NMWjJkblVWbjI3OTh2T25mdUxBQUlBRUl1bDR0Um8wYUo0OGVQRnpyTlgzLzlKU1pQCituaXphdFdzblRaZjMxN3QzYi9ITEw3K0kwTkJRTVg3OGVKVmhYYnAwRVY5KythVVFRb2lUSjA4S0p5Y25sZUU5ZS9ZVTI3WnRrOTRuCitOalpXdEc3ZFdocisrdXV2aS9Qbno2c3NTMDVPamxpeVpJbG8xS2lSeXJ3TURBekV3b1VMUlVaR2hqUnVlWmFwSWo1UFVsS1NjSEJ3CitVQm5IMmRsWnhNVEVDSVZDSWN6TnphWFhSNDBhSmRMVDAwVmxpNHlNRkFCRWJHeXM5TnF1WGJ1RXZyNittRHg1c3FoZnY3NDRkT2lRCittRHQzcnBETDVXTElrQ0hpMXExYjByZ0dCZ1ppNzk2OWdvaUlxdGFWSzFlRXE2dXJrTWxrd3NuSlNZU0VoSlI2SHJtNXVTSXlNbEw0CisrZm1KYWRPbUNYTnpjNkd0clMyMHRMUkVseTVkeEFjZmZDQTJiOTRzSWlJaVJFNU9EZ3VkTkZLL2Z2M0VzR0hEUkpzMmJZU2VucDQ0CitjdVFJQzZVYUJRWUdDZ01EQXlFVC8xZkhhTUdDQllpS2lrSmdZR0NkREhWcGFXa0lDd3VEbnA0ZUxDMHRDMnh2QXJ5c21uWDkrblVrCitKQ1RBeU1nSTNidDNMM1RjYWc2cGlJeU14Sk1uVC9EbW0yL0N4TVJFR3BhU2tvTFEwRkEwYjk0Y1BYdjJMSEYxdi9LSWlvcEM5KzdkCitFUnNiSzlWakZrTEEzdDRlVFpvMFFZY09IZURuNTRmRGh3K2pSWXNXbURObkRrSkRRL0hKSjUvZ3l5Ky9ST3ZXcmVIcjY2dFM1WkNJCitpQ3BQZUhnNHZ2NzZheHc3ZGd4RGhnekI0c1dMcFpvTXhTbXVkekVyS3l2MkxrWTF6cElsUytEdjc0L1UxRlRFeDhjakxpNk8xY3lxCiswYkZqeC9EKysrK0RGVXovVDRNR0RUQmd3SUJpeDZ0WHIxNkpkK2JWU1NhVG9VZVBIdWpSbzRmYXNFYU5HbFhyalRQekwrUEdqUnZSCitwMDhmL1BMTEx3Q0FFU05HNFBEaHd6aC8vandDQWdMdzZhZWZ3dC9mWHlNNkxpQWlxZ3ZDd3NMdzlkZGZJeWdvQ01PR0RVTllXSmpVCitFVTVCZUROS3Fpdnk3amZUb0VFRHRwZlJJQXd6Vkswc0xDd3dZOFlNekpzM0Q1R1JrU3FCNXQxMzM0V3JxeXUrL3ZwcmZQUE5OMWkrCitmTGxhdXg4aUlxb1l2LzMyRzc3KyttdWNQbjBhenM3T0NBOFBoNldscGNvNHZCa2wxV1hXMXRhUXkrVklTVWxoZXhtR0dhTC9iOW15CitaZmo1NTUveDdiZmZTbDF2NXdXYWdRTUh3c2ZIQjF1MmJJRmNMb2VGaFFYbXpKbUR4WXNYOHhjUklxSUtFQndjaktWTGwrTGN1WE53CitkWFhGbFN0WDBMdDNid0JGVnhlenNyTGl6U2lwVHFsWHJ4N016YzF4N2RvMWhobUdHYUwvejlEUUVDdFhyb1NucHljbVQ1NWNZS0RSCiswdEtDdDdjMzlQWDFNVy9lUEFRRUJHRDkrdlVxOXlBaUlxS1MrL1hYWDdGMDZWSmN1SEFCSTBlT1JFaElDTEt6czNIMjdGbXNXTEdDCisxY1dJQ3RDOGVYTUE0UDFsR0dhSVZIMzQ0WWZZdW5VclB2MzBVeHc0Y0VBdDBPUnhjM1BEMEtGRHNYTGxTclh1dVltSXFIam56NS9ICiswcVZMRVJ3Y2pGNjllbUhVcUZHNGMrY08rdlhyeCtwaVJNWHc5dmJHaXhjdldEdUVZWVpJbFphV0ZqWnMySUMrZmZ2aTFLbFRjSEp5CitVZ2swK1h0Y3ExZXZIcFl0VzhaQ0l5SXFoYjE3OTJMQ2hBa0FBRzF0YlNpVlNzVEd4c0xJeUFnalI0N0UyclZyV1YyTXFCalcxdFlZCitQSGd3QzRKaGhraWRqWTBOUHZ6d1EzaDZlaUl5TWhJNk9qcFNvRm0vZnIxMG85Q2E0czgvLzhURWlSUFJyRmt6YUdscDhRdW1DdmY4CisrWE1zWDc0Y3JxNnVkZVl6di9QT08zajQ4Q0ZQdUVzaE9Ua1pNVEV4MG8yZ2daY04rUUhneFlzWENBb0tRbEJRRUpZdFd3YVpUQ1pkCitoY243cjZPam8vSmNMcGRESnBOQlcxc2JMVnEwZ0tHaFlhMHBxMy8vL1JkdnZmVVdObXpZVUdmV2orKy8veDdyMTYrSHNiRXhONVlTCit5c3JLd3FCQmcxZ1FKWkNkblkzMDlIUWNPM2FzMHRZeGhoblNLQ3RYcm9TWm1SbldyVnVIeno3N0RES1pER3ZYcnNXV0xWdXdaczBhCit2UDMyMnhnNGNHQ04rQ3lKaVltNGZ2MDYzTjNkWVdCZ3dDK1hLdHpxMWF2eDhPSERPdldaRHg0OGlNYU5HOFBEdzRNclFDazRPanBLCitJU1luSjBmNnIxUXFrWjJkcmZaZkNJR3NyQ3pwZjk0SkhBQmtabVpLLzl1M2I0K09IVHZXcW0wcU96dTdUcTBiTVRFeGlJeU1oSmVYCitGemNVcW5CUlVWRzRlUEdpdE45Z21LRmF6OGpJQ0V1WExzV1hYMzZKZDk5OUY2MWF0WUpNSm9PK3ZqNXNiVzFWT2dXb0tWYXRXc1V3CitRNVhpK1BIamRlNHp0MjNiRnQ3ZTNnd3pWQ2xrTWhsQ1FrTHEzT2QyZG5iR3FsV3J1QUpRcFlTWnlqNVdzZTRMYVp6WnMyZWpRNGNPCittRDkvdnNyckV5Wk13UFRwMHpGaXhBaWNPWE9HQlVWRVJFUlV4ekhNa01iUjF0YkcrdlhyRVJBUWdPRGdZT24xdkNwbkREUkVSRVJFCitCTENhR1drb2UzdDd6Snc1RTgrZVBWTjVQUy9RQUtpUlZjNklpSWlJaUdHRzZnQmZYOThDWDJlZ0lTSWlJaUtHR2FxeEdHaUlpSWlJCitpR0dHR0dpSWlJaUlpR0dHaUlHR2lJaUlpQmhtaUJob2lJaUlpSWhoaGhob2lJaUlpSWhoaG9pQmhvaUlpSWdZWm9nWWFJaUlpSWlJCitZWWFJZ1lhSWlJaUlZWWFJZ1lhSWlJaUlHR2FJR0dpSWlJaUlpR0dHaUlHR2lJaUlpQmhtaUlHR2lJaUlpQmhtaUJob2lJaUlpSWhoCitob2lCaG9pSWlJZ1lab2dZYUlpSWlJZ1lab2dZYUlpSWlJaUlZWWFJZ1lhSWlJaUlHR2FJR0dpSWlJaUlHR2FJR0dpSWlJaUlpR0dHCitpSUdHaUlpSWlCaG1pQmhvaUlpSWlJaGhob2lCaG9pSWlJaGhob2lCaG9pSWlJaXFOY3hjdUhBQlo4NmNZYWxRaFl1S2ltS2dJU0lpCitJcUxLQ3pOcGFXa1lOR2dRUzRYcVBBWWFJaUlpb2hvVVp2N3puLy9nUC8vNUQwdUVpSUdHaUlpSXFHYUZHU0ppb0NtTUVBTGg0ZUU0CitjZUlFbmoxN0JtTmpZMWhhV3VMdHQ5OUd2WHIxa0ppWWlKOS8vaG5UcGsyVHBubnc0QUdTa3BMSy9KNkdob1o0N2JYWGloMHZLeXNMCitJU0VodUhyMUtoNDllZ1NGUWdGRFEwTjA2TkFCTmpZMjZOaXhJMlF5R1o0OGVZSlRwMDVoOHVUSlhMR3BXZ1VGQmNIRXhBUmR1blRSCittR1Y2OXV3WkFnTURjZTdjT2V6ZHUxZGwyTDE3OStEaDRRRURBd05zM2JvVkJnWUcvQktweXRiTEZ5OWVGRHE4YWRPbWFOV3FWWUhICityT2pvNkFLbmFkKytQUm8wYUZCaDYzWlIydzR4ekJBeDBHaUFGeTllWU5La1NUaHg0Z1NhTjI4T1cxdGIzTDkvSDc2K3Zzakt5b0tMCitpd3NlUG53SXVWeXVFbWIrL1BOUEJBWUc0cWVmZmtKQ1FvTEtQTFcwdENDVHlhVG5TcVVTUWdpVmNUNysrR09wM0F2eTc3Ly93c2ZICitCOXUyYlVOQ1FnS2FOR2tDUzB0TEdCc2I0OEdEQjlpK2ZUdWVQSGtDVTFOVDJOblpJU3dzREQxNzltU1lvV3FsVkNveGQrNWMyTmpZCitZTStlUGRXK1BGdTNic1gyN2R0eDdkbzFDQ0ZnYUdpb05zNmFOV3R3NHNRSkFJQ3RyUzA4UFQzNVJWS1YrT2VmZitEbjU0ZGR1M2FwCitIQ002ZGVxRThlUEhvMSsvZm9XR21hQ2dJUHoyMjI4NGZQZ3dBTURBd0FDelpzM0NSeDk5SklXWjhxemJKZGwycUlvSW9ockF3TUJBCis3TjI3dDFxWFFhbFVDazlQVDFHL2ZuMXgrdlRwWXNjUERnNFdBRVJpWW1LTkxmZU1qQXhoWVdFaEFJakpreWVMakl3TWFWaDJkcmJZCit2SG16cUZldm5nQWdPbmZ1WE9BOFFrSkNCQURwTHlRa3BNRHhzckt5eE8zYnQ4V1NKVXNFQURGcjFxeENsK3ZFaVJQQzJOaFlBQkF0CitXN1lVZS9ic0VkbloyU3JqS0JRS2NmVG9VZkhHRzI5STcrM3E2bHFydGd0emMzUGg2K3RicC9ZRmJkdTJyZEdmK2ZqeDR3S0EwTkhSCitFWThlUGFyMjVWRXFsU0lwS1VsMDdkcFZBQkNHaG9acTQyemJ0azBBRURLWlRKdzllN1pXcjEvZTN0N0N6czZ1VG0xVDN0N2V3dG5aCitXYU9YMGNmSFIrVTQ4dE5QUDVWNDJpNWR1Z2dBNHNTSkV4VzZicGRrMnlFaElpTWpCUUFSR3h0YjRmTU9EQXdVQmdZR1FvdHhqcWgwCitWMmltVDUrT0VTTkcxSW1lLzdadDI0YnIxNitqU1pNbTJMeDVNL1QxOWFWaE9qbzZjSGQzeDVreloxQ3ZYajA4ZXZTb3dIbFlXVm1wCitQQy9vVnpRQTBOWFZSY2VPSGZIVlYxOWg4dVRKeU1uSktYQzhIMy84RWNPR0RjUHo1OC9SdFd0WFJFUkVZTUtFQ2REUjBWRzcrdVBpCis0b0pyMTY3QnhzWUdBSkNlbnM0Vm1hclZoZzBiQUFBNU9Ubnc5ZlhWaVAxYTQ4YU4wYjE3OTBMSG1UNTlPaTVmdm95b3FDaTgvZmJiCisvQktweXMyYk53OXZ2dm1tOUR3a0pLU2tQOWdqTGk0T2RuWjJHRHg0Y0lXdTJ5WFpkcWhxTU13UU1kQVU2c2lSSXdBQVUxTlQxS3RYCityOEJ4M25yckxYenp6VGRJU1VsQlNrcUsybkFkSFIxb2FaVnVWek51M0Roa1oyZXJ2WDcxNmxWTW1USUZTcVVTRFJzMnhOR2pSOUd5CitaY3NpNTlXa1NSTWNPWElFUmtaR1NFdEw0MHBNMWViT25Uc0lDZ3FDdHJZMkFHRExsaTNJeU1qUWpKT0JZclpSS3lzcmRPM2FsVjhpCitWUXU1WEk3Rml4ZEx6LzM5L1V1MFB3OFBEOGZ6NTgveDBVY2ZWZHE2WGRyakd6SE1FREhRVktISGp4OUxKMkZGWGRXWVBuMDZXclJvCitJWTFmVUptVmhxT2pJNVl1WGFyeW1sS3B4SXdaTTZRck52UG56MGY3OXUxTE5EOGpJeU40ZVhueHlneFZLMTlmWDFoWldXSENoQWtBCitnUGo0ZURZWUppcWgwYU5IdzhURUJBQ1FsSlNFSFR0MkZEdk45OTkvaitiTm0yUGt5SkVzUUlZWklxcUxnYVpKa3lZQWdPVGtaQ3hZCitzS0RROFhSMWRURnAwaVQ4KysrLzVYN1BGeTllUUY5Zlh6cG81VGx4NGdRaUlpSUFBTnJhMm5CM2R5L1ZmQ2RObW9Tc3JDeXV2RlF0CitVbE5Uc1hQblRzeWVQUnV6WjgrV1h2L3ZmLytyMXZsRlZSQkNRS2xVbG1tNmtpckwvSWtLSTVmTDhmSEhIMHZQMTY1ZEM0VkNVZWo0CitLU2twK1BISEh6RjU4bVRvNmVsVjJMcGQxbTJuUE5OeVcyS1lJV0tnS2FQOE45RmR2MzQ5UHY3NDR3S3Jmd0dBajQ4UGJHMXR5L1YrCitTcVd5MEo3aWZ2enhSK214cmEwdGpJeU1TalZ2SXlNajdOeTVreXN1VlF0L2YzL0k1WEtNSFRzV2xwYVdzTGEyQmdCRVIwZmo3Tm16CitSVTY3Zi85K2pCOC9IaTR1TG5CeGNWR3BicE9VbElTNWMrZGkrUERoMHZCWHIycm1kK3pZTVF3Y09CQ3Z2ZllhT25Ub2dKNDllK0xBCitnUU5Gdm45S1NncCsrT0VIREI0OEdPdldyU3Z5UkMwd01CRERodytIcWFrcDJyZHZqOGFORzZOLy8vN3c4L01ydEIwY1VVbE5uVHBWCis2ajc1N3QyN1VrOWxoUjB6MHRMU01IMzY5SEt2MjJYZGRnQWdPenNidnI2K3NMYTJocjYrUG5SMGROQzFhMWY0K1BnVStnTWJ0NlhTCitwMFFpOW1aV0NiMmMxWWJlek9MaTRzUnJyNzJtMG91TWhZV0ZDQThQTDlWOHRMVzFwZW52M3IxYjZIZ2hJU0hDeE1Ta3dHR3RXcldTCis1dUhwNmNtTmdyMloxUmhLcFZKMDdkcFZlSGw1U2EvNSsvdEw2M05KZXBLNmQrK2VrTXZsQW9BWVBIaXcydkRvNkdocE95dG9mZ3FGCitRc3llUFZ2STVYS3haY3NXcWZlLzZPaG9ZV0ZoSVJvMWFxVFdJMU4wZExRWU8zYXMwTmZYbDViMW0yKytLWEQ1MHRQVHhlalJvNFdlCitucDdZdlh1M3lNbkpFVUlJY2Z2MmJkRzNiMThCUVBUbzBhTlNlalJpYjJhMXZ6ZXovRDcvL0hOcGZlemJ0MitoMjF6UG5qMUZ2Mzc5CitDaHhlbW5XN0xOdE9ucWRQbjRvK2ZmcUk2ZE9uaThqSVNQSG8wU054Nk5BaDBhSkZDMm41MDlMU2F1VzJWSlc5bVRITUVNTk1KUVdhCisyaEJtaEJEaTk5OS9GODJiTjFjSk5BREV4SWtUeGNPSEQwc2RaZzRlUENoQ1EwTlYvbjc5OVZleFpjc1cwYTVkdXdMRFRISnlzc3A3CityMW16aGhzRncweU5jZmJzV1NHVHlWU0NmR1ptcHRTOU9BQng4K2JOWXVkamFtcGFhSmdSUWdnVEU1TkN3OHlpUllzSzNYWWVQMzRzCitHalJvb0haQ2xwcWFLakl6TThYdTNidUxQT0ZUS3BWaTdOaXhBa0NCMzAxS1Nvcm8zTG16QUNBNmRlb2tVbEpTR0dZWVpzcnN3WU1ICitVckFISU1MQ3d0VEd1WExsaWdBZy9QMzlDNXhIU2RmdHNtNDdRcnk4ZlVHZlBuM0VxRkdqaEZLcFZCbTJmLzkrNlgyOXZiMXI1YlpVCitsV0dHMWN5SVdPV3NTRDE3OXNTMWE5ZlV1cTNjczJjUE9uZnVqRzNidHBXcUhyMmJteHRzYlcxVi92cjM3dzkzZDNmY3UzZXZ3R25pCis0dUpVbmpkczJKQXJIZFVZR3pkdWhJdUxDOXExYXllOXBxZW5oNWt6WjZwVTR5eU9YQzR2MC9DLy92b0xLMWV1aEtHaFlZRzlPcjMyCisybXNZTUdDQTJ1c05HalNBbnA0ZTdPM3RpM3pmb0tBZzdOKy9IMDJiTnNYVXFWUFZoamRzMkJBK1BqNEFnRnUzYnVFLy8va1BWd29xCitzOWF0VzJQY3VISFM4KysrKzA1dG5LMWJ0NkpwMDZaNDU1MTNDcHhIU2RmdHNtNDdBTEJ6NTA1Y3ZYb1ZjK2JNVWVzRVovanc0ZEt0CitEclp1M1lyYzNGeHVTK1hBTUVOVVNZSG02dFdydGVhenRXM2JGbWZPbk1HK2Zmdnd4aHR2U0srbnBxWmk1c3laUmQ0WDVsVTNiOTVFCitSa2FHOUplZW5vNmtwQ1JjdlhvVmZmdjJMZEU4aW1yMFNhUkpZbU5qY2Zqd1laVkcvM2xtenB3cGRkTzhhOWN1SkNRa1ZNb3lyRnUzCitEZ3FGQWdNSERvU3VybTZCNHpScTFLalE2Vis5aDlPcjh1NlhZMlZsVmVqOGh3MGJCbU5qWTdXVE42S3krT1NUVDZUSFAvLzhNMkpqCitZNlhueWNuSitPbW5uekJ4NGtTVmU2T1ZaZDB1ejdiajUrY0g0R1gzMEJzM2JsVDU4L1B6UTdObXpRQUFDUWtKdUhIakJyY2xoaGtpCit6UXMwUmZYK1ZWTS8yOWl4WTNIanhnMHNYYnBVNVZmZ1BYdjJZUExreVNXNlFxT25wd2Q5ZlgzcHIxNjllbWpjdURGNjkrNk56WnMzCitGemhOMDZaTlZaNi9lcVdHU0ZOdDJiSUZiN3p4aGtwbkdubGF0V29GTnpjM0FDOXY2THA5Ky9ZS2YzOGhoTlJJdW5QbnpoVStmNlZTCitpUXNYTGdBQW1qZHZYdWg0MnRyYTZOKy9QNENYWFZKSFIwZHo1YUF5NjlXckZ4d2NIS1IxTVArVnpaSTAvSy9zYlNjNU9SblhybDJECit0clkybmp4NWdwaVlHTFcvTVdQR3dOUFRFNTZlbnREUzB1SzJWQTV5YmhKRWxSTm9IajkrWEtLZVRtb2FQVDA5TEY2OEdFT0dETUdJCitFU1B3OU9sVEFNQlBQLzJFVWFOR1ljeVlNV1dlZDdkdTNkQ3FWU3UxMTVzMGFRSmpZMk04Zi80Y0FCQVRFOE1WalRSZVJrWUcvUHo4CitvRkFvQ3IxTGVIeDh2UFI0dzRZTm1EZHZYckhWeVVyanhZc1gwalphMU5XWHNvcVBqNWR1WGxqY0w4U2RPbldTSGo5OCtCQTlldlRnCitTa0psOXVtbm4wb24vMzUrZmxpeVpBa2FOV3FFclZ1M3d0YldGdDI2ZGF1MmJlZnUzYnRTTjh4cjFxeVJyc0FXOTM3Y2xoaG1pRFFxCiswTXlaTTZkR2g1blUxRlEwYU5DZzBCdGVXbGxaSVRnNEdMYTJ0dEtWRWw5ZjMzS0ZHWmxNaHQ5Kys2M0FZWFoyZGpoNDhDQUFJRFEwCitsQ3NaREU5UUp3QUFHQWRKUkVGVWFieUFnQUNrcHFiQ3g4ZW55THVFcjFpeEFrK2ZQc1dEQnc5dzZOQ2hjbTFEcjhwL0ZUTXpNN1BDCitQMlArS3A5NUozNkZNVFEwbEI2WDVPU09xQ2pEaGcxRHAwNmRjT3ZXTGFTa3BHRDc5dTJ3dDdmSDlldlhLNlFiL3ZKc08zbWhSQWlCCisrL2Z2bCtnR3o5eVdHR2FJTkRMUTFHVHU3dTZZTldzVzNucnJyVUxINmRDaEEzeDhmUERoaHg4Q0FQNzQ0NDhLWFlhSER4L0N5TWdJCitlbnA2R0R0MnJCUm03dHk1ZzZpb0tKaWJtM05GSTQwa2hNQ0dEUnN3WnN3WXpKMDd0OGh4NCtQajhkVlhYd0Y0ZVJQTmlnd3orVzhXCisrUGZmZjFmNDUyemV2RGwwZEhTUWs1T0Q2T2hvQ0NFSzNmZmx2L0ZmL3JaM1JHV2hwYVdGVHo3NVJPcElZOTI2ZFlpTWpFVGp4bzByCitaQnNxejdaVHYzNTk2WEZJU0VpSndneTNwWEtzQzl3Y2lLaXdvTEo4K2ZKaXg4dC9vOHlTM0dXNXBKS1NrbUJwYVNsZGJuZHpjMU01CitJQlRVZ3cyUnByaDQ4U0lpSWlKS1ZHOS81c3laVWtQa1M1Y3VJVHc4dk13QjZsV3RXN2VXNW4zaHdvVlM5VHhZRW5LNVhMb0JhRnhjCituTlNRdVNCUG5qd0I4TEt0VU1lT0hibVNVTGxObkRoUmFsOXkvLzU5N042OUd4TW1URUNEQmczS1BlL3liRHVtcHFaU0VQSHo4eXR5CisycnlPZExndE1jd1FVU1dFbWFDZ29DTHZzQXk4YkJlUXg4Ykdwc1FuV2NWWnRHZ1JPbmZ1TEIyVWRIUjBzR25USm1uNHJsMjdjUHIwCis2UkxQTHpFeEVhNnVybmoyN0JtL1hLcDBxMWV2aHBtWldiRmR2d0pBeTVZdE1YcjBhT241MnJWckN4d3ZyenBKZW5wNmdkdFlTa3FLCisydXQ2ZW5wU1krRzdkKzhpS0Npb3lHMjBvRzIxdU8zM2d3OCtrQjRIQkFRVU9sNWVTSE4zZDYveFY2NUpNOVNyVncrelpzMVNlYTAwCitEZitMV3JmTHMrMDBhdFJJQ2liQndjSFlzMmRQZ2RQbTV1Wml5cFFwY0hKeTRyYkVNRU5FbFJGbThuYXVSZjFDbEw5ZFVQN3VNdk5rCitabWFxWEJJdjdzUW9yM3JPaGcwYjFIcUFHanAwS05hc1dTTTlkM056UTJCZ1lMR2ZKVFEwRkphV2x1alhyeDlhdEdqQkw1Y3ExWlVyCitWeEFVRklReFk4YVUrRVRqdmZmZVU5bW1DcXJXa25kbDh2TGx5N2g5KzdiMHVrS2h3SW9WSzZTUWs3OVRBUUNZTjIrZTlOakR3d01QCitIejVVQy9vaElTRUFYdmJDbEpxYXFqSThmN2ZyQlRWTW5qUnBFaXd0TFFFQW16ZHZSbUppb3RvNHQyL2ZSbkJ3TU16TXpGU1doNmk4CitaczJhSmRVSzZOT25EeXdzTEVvOGJYSHJkbm0ySFU5UFQrbnh0R25Uc0g3OWVtUmxaVW12M2JsekJ5NHVMc2pPenBaNk5lUzJ4REJECitSSlVRWmhJU0VtQm5aNGVmZnZwSnBZR2lVcW5FamgwN3BCdDRMVisrdk1CZm9WOE5HenQyN0VCWVdCaGlZbUp3Nzk0OTNMMTdGemR2Ciszc1RGaXhleGFkTW0yTnZiUzIwTUJnNGNxRGEvVHo3NUJQdjI3VU96WnMyUW1wb0tWMWRYdUxtNTRlVEpreXEvV0tlbXBpSW9LQWp2Cit2UE1PWEZ4Y3NHelpNbnorK2VmOFlxbFNaV1ptU3I4VWw2WlhzdnczMUZRb0ZKZzNiNTdLandCNVB5d0FRSFoyTnV6czdPRGw1UVZ2CitiMitZbTV0RENDRjFWUnNXRm9iMzMzOGZ4NDRkQS9DeW9iU0hod2VBbDFWeGV2WHFoUlVyVmlBd01CRGJ0bTJEbzZNakRBd01wQk82Cis3dDI3cTl6UU0vK1BHYmR1M1ZKYmRybGNqa09IRHFGVHAwNklqNC9IaEFrVHBBYlFlZnVRaVJNbm9rMmJOZ2dNREt5UUtrQkVlVnEwCithSUdKRXljQ0FHYk1tRkdxYVl0YnQ4dXo3WXdiTjA2NnVXZE9UZzQ4UFQzUnZIbHo5T2pSQTZhbXBqQXpNME5TVWhMOC9mMmxIejI0CitMWldSSUtvQkRBd014TjY5ZTJ2VU1nY0hCd3NBSWpFeHNVYVd1VktwRkFZR0JtTEpraVhDeTh0TG1KbVppUll0V29naFE0WUlWMWRYCiswYlp0V3dGQW1KcWFpcDkvL2xsdGVqOC9QekZnd0FDaHJhMHRBSlQ2ejhEQVFPVG01aGE2ZkhGeGNXTEpraVhTY2dBUU1wbE1HQm9hCitpbWJObWdrQW9rMmJObUxSb2tVaUxpNnVWbTRYNXVibXd0Zlh0MDd0QzlxMmJhdXhuM24vL3YyaWMrZk8wdm9vbDh2RnFGR2p4UEhqCit4d3VkNXErLy9oS1RKMDhXN2RxMVU5c0dldmZ1TFg3NTVSZVZiWExwMHFWQ0xwZEw0elJyMWt4czI3Wk5DQ0dFczdPemFOKyt2ZkQyCis5aGFob2FFcTI0OUNvUkRmZlBPTmFOcTBxY3A3bUppWWlIUG56b24zMy85LzdkMS9kTlYxL2NEeEY5dmR4Z1p6VG40VkVUL3EyRElDCitBOUVnRWF4T0J4STlrT21SVUE2ZE9xRVFFVCtVTURyUU9YS0M2bVFIUzRxQWxITThtZ2RQSFRNTXpCTjRHSEZVMUNVSnlWa29uRkorCitqRE1Zc3JHTjdkTWZmdG5YeGE4cEc5eTdQUjUvN1c3M2ZuYnYrM012N0xuUGZYMTJlOUt0VzdkazJyUnB5ZWJObTVPR2hvWmswNlpOCit5WXdaTTVMdTNiczNlNDFObkRneGVleXh4MDU1TEVlT0hFbG16NTZkRkJZV0pyMTc5MDZtVHAyYWZPTWIzMGo2OWV1WDNIWFhYUm54CitPcHcvZjM0eWN1VElEdldhbWo5L2ZqSnUzTGlNZmd3N2R1eElDZ3NMazZxcXFoWmQvLzA4dHovSWErZWsrdnI2Wk5HaVJVbGhZZUVwCisvNy85NEFjL1NHcHFhazU3LzlyRGErbWtWMTk5TlltSVpNK2VQYTIrN1QvOTZVOUpVVkZSMGlscDdXbEFhQU9YWG5wcExGKyt2TmxiCitNZEpkYVdscFhIZmRkWEg0OE9HbTM5eGttcWVmZmpwdXVPR0drNy80aUYyN2RrVlpXVmtjT25Rbzh2UHpZOUNnUVRGMDZOQ3pubmIyCitBdnhDSm5idDJoWC8rTWMvb3FLaUlob2JHNk5uejU0eGNPREFLQ2twYWRmdkp4NDhlSEJNbXphdDZUZUhIVUcvZnYxaS92ejVIZW94CisvNitEQnc5R1dWbFo1T2ZueDdCaHc1cit5dm51M2J1amYvLytaMzA5MXRiV1JsbFpXVlJVVkVUUG5qMWp5SkFoa1VxbG9yeThQUHIxCis2M2ZPdjRqZUVyVzF0Zkgzdi84OUtpb3Fvcmk0T0s2ODhzcG1aM2RLWi9mZWUyK1VscGJHNXMyYk84eno2ZDU3NzQzdDI3ZTM2QzI3Cis2ZXpsbDErT29VT0h0dG4yeitlMVUxTlRFMlZsWlZGWldSazlldlNJd1lNSHQraUVPWm44V2pwcCsvYnRNWGp3NE5pelowLzA3ZHUzCitWYmU5YnQyNnVQMzIyNTJhR1Rpemt5RVQ4ZTZwcGt0S1NwcjlzYTUwa0s3M0M5cEtqeDQ5VHBrbmkyalpLVnJ6OHZLYUJwUGY2K1RiCitTbHREWGw1ZVhIUE5OWFlVRjFSYmhzejV2bmJ5OC9PYm5mblRhNmwxbVprQkFBREVEQUFBZ0pnQkFBQVFNd0FBZ0pnQkFBQVFNd0FBCitBR0lHQUFBUU13QUFBR0lHQUFCQXpBQUFBSWdaQUFCQXpBQUFBSWdaQUFBQU1RTUFBSWdaQUFBQU1RTUFBQ0JtQUFBQU1RTUFBQ0JtCitBQUFBeEF3QUFJQ1lBUUFBeEF3QUFJQ1lBUUFBRURNQUFJQ1lBUUFBRURNQUFBQmlCZ0FBRURNQUFBQmlCZ0FBUU13QUFBQ0lHUUFBCitRTXdBQUFDSUdRQUFBREVEQUFDSUdRQUFnRFNUc2dUUXR0YXVYUnRGUlVVV2dsYTNmZnYyRHZlWUt5b3FZdTNhdGRHOWUvY084NWdiCitHaHJpK1BIajBhVkxGMDk2LzE2M2lYWHIxc1hhdFdzOUFWcWd1cm82OHZQem8xT25UaFlqVGY2ZkVqUFFWaSt1MUxzdnI5bXpaMGRPCitUbzRGb1UzazVlVjFxTWRiVkZRVUd6ZHVqTEt5c2c3em1PdnE2cUs2dWpyeTh2S2ljK2ZPZm9ocVE1V1ZsVEY2OU9nTzlaano4L01qCitJdUxPTysvMEJEaUgydHJhcUttcGlZS0Nnc2pOemJVZ0xYRGt5SkdJaU1qS2FyczNnNGtaYUNQRGh3K1BKRWtzQkxTaXQ5NTZxOE05Cis1cnE2dWxpMWFsVXNYYm8wcXFxcVl1Yk1tVEZyMXF3b0xpNzJoT0M4TFZ5NE1CWXVYR2doem1MOSt2VXhkKzdjMkx0M2I5eDMzMzB4CitaODZjcGdqazRqTXpBd0JwTERjM042WlBueDdsNWVYeG94LzlLQjU2NktFWU1HQkFMRnEwS0Nvckt5MFF0Skh5OHZJWVAzNThqQnMzCitMb1lQSHg2N2R1MktCUXNXQ0JreEF3Q0lHa2hQaHc4ZmpydnZ2anNHRGh3WVZWVlZzVzNidGxpOWVuVjgrTU1mdGpoaUJnQVFOWkIrCitUcHc0RWN1WEw0L0xMNzg4MXE1ZEcydldySW1OR3pmR2tDRkRMSTZZQVFCRURhU245ZXZYeDVWWFhobmYrOTczWXRhc1dmSFBmLzR6CitKazZjYUdIRURBQWdhaUE5bVlzUk13Q0FxSUdNWWk1R3pBQUFvZ1l5aXJrWU1RTUFpQnJJT09aaXhBd0FJR29nbzVpTEVUTUFRRHVOCittb1VMRjRvYTJpVnpNV0lHQUdqblVmUHd3dytMR3RvVmN6RmlCZ0FRTlpCeHpNV0lHUUJBMUlnYU1rcDVlWGxNbUREQlhJeVlBUUJFCitqYWdoTTd4M0x1YklrU1BtWXNRTUFDQnFSQTNwelZ3TVlnWUFFRFZrSEhNeGlCa0FRTlNRVWN6RklHWUFBRkZEUmpFWGc1Z0JBRm85CithcFlzV1NKcWFEUG1ZaEF6QUVDYlJjMjBhZE5FRFczQ1hBd3QxU2xKa3NReWtQWlAxRTZkWXZEZ3dURnAwaVNMQVpDR0dob2E0c1VYCitYNHlOR3pkR2JXMXRYSHZ0dFRGeTVFanpETHd2aHc0ZGluWHIxc1hPblR2anFxdXVpakZqeGtSaFlhR0Y0UlRyMXEyTHpaczNpeGt5Cit3elhYWEJOVlZWWFJ0V3RYaXdHUXhwSWtpWXFLaXRpM2IxODBORFJFejU0OW8xZXZYcEdkblcxeE9Hc012LzMyMjNIZ3dJSG8yclZyCis5T25USndvS0Npd01aMVJkWFIxZHUzWVZNd0JBNjZ1cnE0dlZxMWZIa2lWTG9xcXFLbWJPbkJtelo4K080dUppaTBPVEV5ZE94RzkrCis4NXRZdEdoUkZCUVV4STkvL0dOdkorTjlFVE1BZ0tqaGdsdS9mbjNNblRzMzl1N2RHL1BuejQ4NWMrWjRXeUppQmdBUU5hU3Y4dkx5Cit1UHZ1dStPcHA1NktyMy85NjdGNDhXS25XZVlEY3pZekFLRE5PZnNaL2w0TWJjR1JHUURnZ25Pa3B1TXdGNE9ZQVFCRURSbkhYQXhpCitCZ0FRTldRVWN6RmNLR1ptQUlDTHpreE4rMkF1aGd2TmtSa0FJTzA0VXBOWnpNVWdaZ0FBUkUzR01SZURtQUVBRURVWnhWd002Y0RNCitEQUNROXN6VXBBOXpNYVFUUjJZQWdJempTTTJGWnk0R01RTUFJR295anJrWXhBd0FnS2pKS09aaVNIZG1aZ0NBakdlbXBuV1ppeUZUCitPRElEQUxRN2p0UjhNUDg3RjdOMDZkTDQydGUrWm1FUU13QUFvaVo5bVl0QnpBQUFpSnFNWWk2R1RHWm1CZ0JvOTh6VW5NcGNETzJCCitJek1BUUlmVEhvL1V2UG5tbS9IbW0yL0c5ZGRmZjlicm1ZdEJ6QUFBZFBDb09YYnNXRHo3N0xNeGZ2ejRpLzQ0ZHUzYUZTVWxKVTJQCitLU2NuNTdUWE14ZERlK050WmdCQWgzVStiei83NVM5L0dSTW1USWlsUzVkZTFNZXdjK2ZPdVBiYWF5TTdPenV5c3JMaWdRY2VPT1U2Cis1ZVhsTVdIQ2hCZzNibHdNSHo0OGR1M2FGUXNXTEJBeVpEeEhaZ0FBL2s5TGo5UWNPM1lzUHZyUmowWmxaV1ZrWjJmSGxDbFRZc1dLCitGWkZLcFM3by9TMHJLNHN2Zk9FTGNmVG8wVGh4NGtSRVJIVHAwaVhlZU9PTjZOR2pSeHcrZkRnV0wxNGN2L2pGTCtKem4vdGMzSC8vCisvVEZreUJBN0dqRURBTkJSbythblAvMXBMRml3SU9ycjZ5TWlJaWNuSjBhT0hCbC8rTU1mb3FpbzZJTGN4NWRlZWlrKy8vblBSM1YxCitkVFEwTkRSOVBqYzNOeVpObWhSWFgzMjF1UmpFREFDQXFQbi9xTG56emp0ajBLQkJwN3dOTFRjM053WU1HQkRQUFBOTTlPM2J0MDN2CisxNVl0VzJMTW1ERngvUGp4WmlIelhnVUZCZkg5NzMvZlhBeGlCZ0JBMUx3Yk5RY1BIb3o2K3ZyVFJrUk9UazVjY3NrbHNXSERocmpxCitxcXZhNUw1czJyUXB2dnpsTDBkZFhWMDBOamFlOWpwWldWa3haTWlRMkxadG01MkhtQUVBSUtLeXNqTDY5T2tUMWRYVlo3eE9kbloyCitwRktwZVB6eHgxdjlUR2NiTm15SThlUEhSMzE5L1JsRDVyMUI4N3ZmL1M1dXZmVldPNDUyeTluTUFBQmFhTldxVlUxek1tZlMwTkFRCitkWFYxY2ZQTk44ZXlaY3RhN1hzLzlkUlRjZU9OTjU3MWlNeDdKVWtTMy8zdWQrUDQ4ZU4ySEdJR0FLQWpPM2JzV0N4WnN1U2NNWE15CitKQm9iRzJQT25Ebng3VzkvKzR4ekxTMzF4Qk5QeE0wMzN4d25UcHlJbHI2cEprbVNlUHZ0dHkvNnFhTkJ6QUFBWEdUTGxpMkxvMGVQCit2cS9iTkRZMnhzcVZLK09tbTI2S2Q5NTU1d045MzBjZWVTUnV1KzIyOXhWRWVYbDUwYWxUcDRpSWVPMjExOEpVQWUyVm1Sa0FnSE9vCitxYW1KZ29LQ2lIajNyR1YxZFhYdjYvYTV1Ym54aVU5OElqWnMyQkM5ZS9kdThlMVdyMTRkVTZkT2JkRjhUQ3FWaXJxNnVoZ3dZRUJNCittREFoeG80ZEc2TkdqWXJPblR2YmdZZ1pBSUNPYk4rK2ZiRjE2OWJZdW5WclBQZmNjMUZXVmhaMWRYV1JsNWZYb29IOG5KeWNLQzR1CitqbWVmZlRZR0RScDB6dS8zNElNUHhuZSs4NTB6SGxYSnk4dUx1cnE2eU0zTmpTOSs4WXR4MDAwM3hkaXhZNk4vLy81MkZtSUdBSUF6CitxNit2ajVkZmZqbWVmLzc1K052Zi9oYWJObTJLL2Z2M1J5cVZpdXpzN0tpdHJUM2xObGxaV1pHWGx4ZS8vLzN2WSt6WXNXZmM5czkrCis5ck9ZTjI5ZXMwQnk5QVhFREFCQW0vblBmLzRUTDd6d1FtelpzaVUyYmRvVXI3NzZhdFRYMTBmbnpwMmp0cmEyMlZHV1gvM3FWM0hYCitYWGVkc28zNzdyc3ZGaTVjR0JIdm51YTVzYkhSMFJjUU13QUFGMVpkWFYyODhzb3JzWFhyMXRpOGVYT1VscGJHZ1FNSG1yNytwUzk5CitLZGF2WHg5WldlK2VrMm5hdEdueDYxLy9PaUlpK3ZmdkgxLzV5bGNjZlFFeEF3QmNLUHYyN1lzLy92R1BGdUlNRGg4K0hQLzYxNy9pCis2YWVmam9hR2h1amJ0Mi9jY2NjZHNYNzkrdmozdi84ZEgvclFoMkwwNk5IUnJWczNpM1VXSTBlT2pFOTk2bE1XUXN5SUdRQ2c5WlNXCitsc1oxMTEwWHZYcjFpaTVkdWxpUWN6ajVOMm15c3JLYVRxZk0yZTNldlR1V0wxOGUwNlpOc3hnZFhNb1NBQUJ0NGZYWFg0K2lvaUlMCitRYXNiUEhpd1JTQWkvTkZNQUFCQXpBQUFBSWdaQUFBQU1RTUFBSWdaQUFBQU1RTUFBQ0JtQUFBQU1RTUFBQ0JtQUFBQXhBd0FBSUNZCitBUUFBeEF3QUFJQ1lBUUFBRURNQUFJQ1lBUUFBRURNQUFBQmlCZ0FBRURNQUFBQmlCZ0FBUU13QUFBQ0lHUUFBUU13QUFBQ0lHUUFBCitBREVEQUFDSUdRQUFBREVEQUFBZ1pnQUFBREVEQUFBZ1pnQUFBTVFNQUFDQW1BRUFBTnFCbENVQUFEaC9WVlZWc1hmdjN2UDd3U3lWCitpazkrOHBPeGYvLytPSGp3NEJtdlYxeGNIQi81eUVkTytYeVNKUEhhYTYrZDlqWURCZ3lJTGwyNjJGR0lHUUFBbXZ2TFgvNFN0OXh5Cit5M2x0bzJmUG5yRi8vLzdZdlh0M3JGeTVNaDUrK09GSWtxVHA2eVVsSlRGeDRzUVlOV3JVR1dQbXozLytjMnpac2lXZWZQTEppSWdvCitLaXFLNmRPbng0d1pNOFFNWWdZQWdGUFYxTlJFUkVUdjNyMWp3WUlGOGRuUGZqWXV1K3l5U0tWU1VWcGFHcE1tVFlxSWlJOTk3R1B4CiszSFBQUlpJa2NmejQ4WGpycmJmaXlTZWZqR1hMbGpWdFk4U0lFVEZpeElpNDRvb3JZdDY4ZVUzZjQ0Yy8vR0ZNbkRqeGpQY2hLeXNyCis3cm5ubnJqbm5udGk0TUNCc1dQSGpuajg4Y2RqekpneGRoQmlCZ0NBMDZ1dXJvNmNuSno0NjEvL0dpVWxKYzIrMXFOSGo2YVBjM0p5CitvaytmUGsyWEw3Lzg4aGc5ZW5SY2V1bWxzWGp4NG1hM216MTdkanowMEVPeGMrZk9pSWdvTFMwOWE4eWNsQ1JKVkZSVXhNaVJJNFVNCis3Wm9UQUFBQXRJS2FtcG9ZUDM3OEtTSFRVak5teklqR3hzWm9hR2hvK2x3cWxZcUZDeGMyWFg3a2tVZmkyTEZqNTl6V0N5KzhFQWNPCitISWdaTTJiWU1ZZ1pBQURPSFRQanhvMzd3TGUvN0xMTFl0aXdZWEg4K1BGbW43L2xsbHVpWDc5K0VSRng1TWlSK08xdmYzdk9iYTFlCit2VHE2ZCs4ZUV5Wk1zR01RTXdBQW5OMjhlZk5peXBRcDU3V05MVnUyUkVGQlFiUFBwVktwbURWclZ0UGxuLy84NTgyTzN2eXZvMGVQCit4cU9QUGhwVHBreUp2THc4T3dZeEF3REFPWDZveXNxS1RwMDZuZGMyc3JPelQ3dU5iMzd6bTFGVVZCUVJFVys4OFViVG1jcE81OUZICitINDFqeDQ3RnQ3NzFMVHNGTVFNQXdNVlZXRmdZVTZkT2JicDgvLzMzbi9aNlNaTEVpaFVyWXRTb1VSOTRkZ2ZFREFBQXJXcm16Sm1SCitTcjE3SXRvdFc3YkU4ODgvZjhwMVhucnBwWGpsbFZlYWhRK0lHUUFBTHFvK2ZmckViYmZkMW5UNWRFZG5WcXhZRWNYRnhmSFZyMzdWCitnaUZtQUFCSUgzUG16R242K0lrbm5vZzllL1kwWGE2cXFvckhIbnNzSmsrZUhKMDdkN1pZaUJrQUFOTEgwS0ZENC9ycnI0K0lpTWJHCit4bmpnZ1FlYXZtYndIekVEQUVCYW16dDNidFBISzFldWpLcXFxcWJCL3hFalJzU25QLzFwaTRTWUFRQWcvZHh3d3cxTlp5bzdldlJvCityRnExS3JadDJ4WmxaV1VHL3hFekFBQ2s4UTl2V1ZuTlptZVdMVnNXRHo3NFlGeHl5U1Z4NjYyM1dpREVEQUFBNld2eTVNblJ2WHYzCitpSWpZdTNkdnJGbXpKdTY0NDQ3bzBxV0x4VUhNQUFEUWVob2JHMXQxZS9uNStURjkrdlJtbnpQNGo1Z0JBS0RWdmZQT08wMGYxOVRVCit0TW8ycDArZkhubDVlUkVSTVd6WXNQak1aejVqb1JFekFBQzBybWVlZWFicDQ3MTc5OGFPSFR2T2U1dTlldldLeVpNblIwUVkvRWZNCitBQURRZWc0ZE9oUlRwa3lKSVVPR3hJb1ZLNXA5N2VxcnI0NGJiN3d4ZnZLVG41elg5NWd6WjA0VUZoYkd4SWtUTFRnZFVzb1NBQUMwCit2bTdkdXNXYU5XdmE5SHRjY2NVVnNXblRwaWdzTExUZ2RFaU96QUFBWkxDaFE0ZGFCTVFNQUFDQW1BRUFBQkF6QUFBQVlnWUFBQkF6CitBQUFBWWdZQUFFRE1BQUFBWWdZQUFFRE1BQUFBaUJrQUFFRE1BQUFBaUJrQUFBQXhBd0FBSUdZQUFBQXhBd0FBSUdZQUFBREVEQUFBCitJR1lBQUFERURBQUFnSmdCQUFERWpDVUFBQURFREFBQWdKZ0JBQUFRTXdBQWdKZ0JBQUFRTXdBQUFHSUdBQUFRTXdBQUFHSUdBQUJBCit6QUFBQUlnWkFBQkF6QUFBQUlnWkFBQUFNUU1BQUlnWkFBQ0E5SkN5QkFCQVcralZxMWNVRkJSWUNGcGRaV1dsUlNBaUlqb2xTWkpZCitCZ0NndFZSVVZNVEdqUnN0QkcxcTZOQ2g4ZkdQZjl4Q2lCa3hBd0FBWkI0ek13QUFRRVpLdmI3OXhhWUxKWU91dGlJQUFFQkdjR1FHCitBQURJU1A4RnB4Wm5XUzBVMzdjQUFBQUFTVVZPUks1Q1lJST0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9maWVsZHNlcV9idC5naWYuYjY0IGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2ZpZWxkc2VxX2J0LmdpZi5iNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViNTU3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9maWVsZHNlcV9idC5naWYuYjY0CkBAIC0wLDAgKzEsNDQ3IEBACitSMGxHT0RsaGN3S2ZBdWNBQUFBQUFFbEpESyt2cjBnU0VsWU1EQzhrRFY1YkVCY0hPd1lHU0VRT0RtRWFHZ29LT0JrVFZDMHRWeUFnCithRGNKQzZPam95czhEQUFZR3FTa3hWOWZGRnRkRUptWm1VQTRFRjB3TUFBQWNBb1RIVFpISjBnWUdBY01Ud2NTTzI5SVNGVUhCMkFWCitGWGQzWUFjSE1SVVZRaUlBR2c0SFQzdDdleXdPSjNkM2R3Y0hTRUVnQUJNdURuZDNPR3BrU1FBQVlsWkdCekVFQkdKbERDc3RDeHdjCitXUWNIU3prUkdXQnRZQzBBQUNBM0FCQUtOaEFRVFRNd0RBMFZRRDRBQUVZVkZWVlZWU1FNSlFVTE9COGZRU2NuWUJnWVJENVZQbVptCitERVpSQjJaaURBb0tTZ0FBVkF3UU9INStsQndjUys3dTdob2FTVDQrWDNkM1dBQ1BBRE16TXlCUklEZ0FBR0JnYzBKQ0VIRUFBRXdOCitEUmt3REFvS09SOGtQWlI3ZXlBMUlBQnBBQmdOUUJBOUVBQlZBQXNMUnd3L0RBd01QZ0JOQUVORENnYzlCOHpNekFVRlFRQkRBRDRNCitEQXdPS2dBQWNRQTVBRXRMRllxS0FBME5UQzhIQnhFUkVRZ2ZDQUFyQUFBcEFDSXFNa2tHQmhvcUtud0FBQXNHUTZxcXFrb0tDZzRPCitNbGtjSEFvWkpDY3JXNlNrcEZRQUFBQUFPQkFPU3dBVkdoMFJPZ01QSFdabUIwMFFFR1VBQUZRYUdqRXlDMnc0T0xlM240cUtpb2lJCitpQkFWTUM0dVhoa1pVR0lBQUhKWVdIZDNBQUFBUGhBUVVRVUdMMEJBSUdnZ0lCZ0FHa0lWRlY5ZkVBd2NKUjhLSkE4TVU5RUFBQWNICitWUm9hWVdob2FEY0FBTHU3QUdabVpuQUFBR1JrWkdRVkZWaHFXRDRLQ2d3T1V6TXpEQUFBbWdrbEJ6RUhCekV4Q2xoWVdCTVRQQVlKCitReThmQ0ZwYUIvLy8vLy8vQUNJU1JFeFVEVVFyREF3TVZoSVNTRVlZR0hkM0lEaGNPRVJFUkVsSkFBa1BOVHNIRjFoWWNrZ0dCajA1CitDRllBQURnNE9DQVZPMGhDRERBd01MdTdpbHBhRFI4cUNEZytFQnhHSE4zZDNSRUdOam85Q0RROERCd1lSR1ptSEZNQUFCUStGQkUrCitFU0lpSWhzK0J4VTBGV1ZlQncwNERZcUtzeEFzRUI4aFFBd3VEQWMyQnd3cURBb3FDZ2NJTDFkTURRQUEwUTBpRFF3aURBY2tCeEFRCitFRHdBQUFBQVUwSkNEQWtKUHJ1N3U1b0FBRGc0YkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUFBTHdBTEFBQUFBQnpBcDhDCitBQWorQUhrSkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYCitNR1BLbkVtenBzMmJPSFBxM01rejV6MEFRSU1DU05IeVowV2pFNUdxTkFaQXFjR21UKzhWWk1vTDZrNnJFcDBLZkVKbDQ4OVZCY0VCCitHR2pCd2s4TEJKc3lGUXFVMTVNVWRRRFVXZlZrNEpOVmNjRVI1WlhDVDgrL2dBTi94RnAwTEVXdER4RWZSS280NHM4bjEvWWVKQ3lRCis4R08rMXhoU2J2d3hSV2FrbEJFaVhvVlc0ODg2Qk5XMEZRamt5ZW02bGFVS2RMcUtTdVpyUUl4dHBiTHFjNTFKYnNIQkZrdzhwWVVUCit3NHVIREsyU00wUG5DcUhQTml6OXVXR0ZvUzFmYjdoNXUwblFzaGYrYXIyRzJpc0FLbjRGcHFCeUhRaXZuOFlrWTNXSzlSb0FOWHgxCitrd1VuY0JWdzVRQ1NkQXNBOGppRFhJQWVFUVlYQU1iZ3AwWUtLUUFGWVZ4RVBiamdYbS9GQlVSbUQxcFF4ejFxc0RmVWRBVmxDTUNHCit2Rmc0bGhwTWdiT0tZWDZJQlk1ZkhYNjQyRkJ4MGNVTGJuS2xVRmRRa2dTMUl4QTkxbVdNQldKUllRRjdkWlEySFZCSXNkaGpiRzRSCitXVWVFNGYzVUZsUU42aFVpVUsxcHVWMVE5M1NwMjRMZ2xOWWxBR21tS0dKcnZCeEo0WVd4aVVrbUx6R3ltWjZVTG5xWEFsZ0M1VG1qCitRUkUycWQrTmt3REtDemlUd0FqY1Q2cmhWMVdXMjgwMTNEMTFVZkhmVnJJdGllQ25IdzBZVklFSGdub1JWdXRsbGdKL1grRjU0aFArCitmalQxRldSNjhXWGJYVjNkVTRjeG1Cb0RuR3BTYVpVcXJ1L05KUlVWclYzRFhySEJBbkNOcnJ3bU45Q3MxN2pJQzIrUVVVRVVZNFpoCitxeXhSNTJYMklsRndGV1NVVVUvOHRtT2JYQnJ6eEJORWh2ZWVZVkNkNXdkNVJEMVJhM2VWemFqR1BlQ29TcTh4NHFKMlpYRGdodmxxCityRkpCQlI2ejgyYUdiTGJlK1RxYmpUOWxOdENxNG5wSFVNYmxxUUVPVXIzTm14K1ZKSklWbDdhU1RvcVFhbi9aeWRiTU5OZHM4ODA0Cis1Nnp6emp6WGJHcEZXQTBxMElkS1dTV3Jzd0loeVV1VEF0bjNMOUlFMmRkc1FVenZlRi9HS1VKdHdWaXJTQVpFQ2xpTHBuVWRxbW5zCitvY2ttbDUwMGFnQ2t4NjI1WXhubHFVQ1Q2TmFVMmxiTCt6RCtBS1hOcFRISzA5THI1TWFDaytoM1dySVozZkRVTG5jOTBOZDRiMTJRCitWWTZ6SnRtaVRub2MrTFYrUVlpVWZ1aXlTNmxCOTZ3SEFLRE1BYTVUWkJDMjd2cnJzTWN1Kyt5MDEyNzc3YmpESGczTjREZ2o3YzhQCitZVFh6UFVVblR2eDFSZ2wvUEZsVWdCTXYyZ01wL3phSmF3VUZ0dWFiVDZmVXVkVEZqZnhZVmsyL3VWRVJDbVgzOHRIclRlL2lUYThDCitUaDFBNE1ldnl5a0NzU3RWOUJ0MWpmdnd5Mjg4bFE1Ylg1elljcjNzcFU4ZzFaTVE0Z2JDSDdIeElsR0xldHA3L3NPWU9qeGhQdGh6CitGWDQwVlJEUHFBNTRJSVNJcUFoa29OK0YwQ0ZCa3hmMEZCZTJzMVhOYVZHNkQ1VzA4c0tyR2NZK1p1UGE1YUIzSTdPQkkzTCtxSGtiCitFUFBYUGJpWnpBS0hTaDhPbTZZZEFLb3dRL1RMbmxVT2hyYndiUWVLaW5OaUZhVlN1WUVza1JlU0k0aU5lTkZGZzFTdEtnblJIOWxZCitOWllVU0VvcFg4TmdXcElEbFZVUkpGYXdTZDBKOTJpUVc1REtoSHprVG5oUzlVQUxGcTlPcDZNVnVXNVZHN1JGNm9GdDQ2R3Rya0VzCitwUmdqV2N2U1ZiQ0locndkVXF0VzN0TFd2T3FDbEZDQ1N6YmlJeEc2MVBVdGx4bkRYZkJxb3N1c0FnUTQyVEdTSHdQQWoyVERTcWJzCitra1Mxck1zdC96ZEx4amtNWXphNkpNV21zaGROUXF4MGZBa1lHYW5qeVc2SjBpaUhVa3E2NURpUVYyYUdXTUZCMFQxRW1iVkFtak1oCitsRHduUlJTME12d2NjbEkvV1pDT1RBUW5wU3dvUGdEK21JUlc2RW5LNnp5QktZWkttb3pRWWsvdnFJaUtQRUtvV05SQUh0UWtkQzlXCitUTm40RFBNbEtrSWxsbGR5WXk2MW1LSzFVQUUvQUkzYVFxMkNKRGJCaFcyb1hKRkgvWWV5ZWttbG9kZVNZVW5iNUJhQUlyRWdrM0NQCitRTmxVbWdpNTVVVk5Nb3hQTndwSmQ5NUhNazVwMU9qc2doZTVsR3dyVGExVjBuU3F6cXBhZFNYVm1ja09yN3JIZEFFeU5iRFJWVStBCitNRGl1bXZXc0hjbHFUTzZ4S2JTZU1BVmxQY2dxV2dNdlJlV2tXbTdOcTE0dG90YTkrdlVqYjJGSUxGL0ZFN1A4OWJDSVRheGlGOHZZCit4anIyc1pDTnJHUW5TOW5LV3ZheW1NMnNaamZMMmM1NjlyT2dEYTFvUjF1U2Z4SHZ0S2hOcldwWHk5cld1dmExc0kzKzdXa0JhVnJaCisydmEydU0wdGJOT28yOTc2OXJlN0ZRMXdoMHZjMy9LMnVNaE5ibkFONGhybE92ZTVwMjFaUXZJeGkrcGE5N3JZemE1MnQ4dmQ3bnIzCit1K0N0YmdaVU9CQlA0T084NkUydmV0ZkwzdmE2OTczd2phOTh6MXVJaEhCREZmak5yMzczeTkvKyt2ZS9BQTZ3Z0FlTVgyNGt4QnBnCitTTENDRjh6Z0JqdjR3UkNPc0lRblRPRUVXeU1oU3dpdmhqZk00UTZEbHdhaVljVjhSMHppRXB0WXZwNWdTRDdjd2VJV3UvakZNSTZ4CitqR2RNNHhyYitNWXNuZ1Y1QmVLSlV2ajR4MEFPc3BDSFRPUWlHL25JU0U2eWp5K1JFR0wwNHNsUWpyS1VwMHpsS2x2NXlsak9zcGFmCitUSXlFVkdFS1lBNnptTWRNNWpLYitjeG9UclArbXRjTTVpb2s1QVU0anJPYzUwem5HenRBTlBoUXNwNzN6T2MrSnpuRkMxbHhuUWROCis2RUxUV01jSTZiR2ZGODNvUmh1WnlRaHg4cFluVGVsS1d6ckxYVWJJbDluTTZVNTcrdE5xZGpOQzRHem9VcHQ2MEhkZVRKNGR6ZXBXCitMeHJRQ2hIMHFXZE42MFB2bUJlS2RyV3VkLzNvSmwvNjE4QU9OcFl6ZlpCTmcvcll5RTcybVVWOUVGTFgrdG5RZGtlcVNiZHFYbHY3CisycVdBZFVMT1lZWnVlL3ZiNEE2M3VNZE43bktiKzl6bzdqWVhJSUFRRGhEZzNmQ090N3puVGU5NjIvdmUrTTYzdnQ5ZGk0VEk0Z2dBCitEN2pBQjA3d2dodjg0QWhQdU1JWERuQlpKT1FkNklpNHhDZE84WXBiL09JWXo3akdOODd4aUw4aklleEl0OGorUjA3eWtxUGJEUWlCCit3Qi8yemZLV3UvemwrdWFBaXFOTmMxb2oraUM1eHJiT1d3M3BnMGhhMkVBUCtxV0piUkJqSy92b1NQODBzdzNpN0pvN25kRFRObGUxCitkMDUxUm1zYkliSit1dGJuZkhPRDVMenFZTjl6enczeWM2R2IvZXhXSm5wQmpKNzB0cnZkekVzdlNOTzNUbmNiUi8xalV3KzczcEY4Cis5WU5rdmU2QWwzSFhDL0wxdlJ0K3lHTXZTTm5Sem5qR3E1MGdiSCs3NU44ZWQ0TE1QZkNZYi9IZHA1WDN3M3YreDMwM3lOOHpuL25CCitFNlR3bi9kODRnbXkrTWE3UHVpUEgwamtKMC83bzFkK0lKY25mZUEzUDV2T3AvN3dvUy9JRU9aQS9PSWIvL2pJVDc3eWw4Lzg1anYvCisrY1VuQkVKK29JWHFXLy82Mk0rKzlyZit6LzN1ZS8vNzRLOCtMQktDaFdtWS8vem9UNy82MTgvKzlydi8vZkNQdi9teGtCQnprT1ArCisrTSsvL3ZmUC8vNzcvLzhBR0lBQ2VIL21rQkQyQUgwSW1JQUt1SURQeHdRSVFRamhGNEVTT0lFVUdINC9NSE82cDN1bVYxNi8xNEdyCitOeEN0OTNvaStHdXhKeEN6VjNzb0NHcTNKeEM1bDRGMHgzdnY0WHNkcUhmQlJ4Q2o1NEowdDRFOE5vT3A5NEVDRVlJakdJU1RWb0s4CitjSUlwZUlSc3RvSzgwSUk0K0hRd2VBOHl5SU5WVjRNRGNZTk4rSFE2aUd0U3FIcStKb1JlV0dsRWFJUklPSWJMOW1aWHVIdDR0b1hBCitoNEZubUlPM2hucHF1SE0reUF0QStJVjJPR1ZoU0laNm1JUm0ySVl2bUlaeFNJTU1BUVV2VUlpR2VJaitpSmlJaXJpSWpOaUlqdmlJCitrRmlJUzhCdUI1RUE4M0NKbUppSm1yaUpuTmlKbnZpSm9CaUtvbmlKT0pBUTJaQUpxSmlLcXJpS3JOaUtydmlLc0JpTHNqaUxxSmdOCitDUkVQYkpDTHVyaUx2TmlMdnZpTHdCaU13amlNeEppTDhaQVFoaENKeXJpTXpOaU1rRGdDS1pjS296aU4xRmlOMWlpS0NjQ0dmb2lGCitieGlJZWplSGRYaUg0dGdMZWJpSDVsaUdvN2FOVy9lRVVlaU52RWFGQW1HRjZsaHJXUWlIN3NocjREaU8rb2lIWG5hTy9raG1Tc2lFCis4emhyN0hpUFU2aU5Bd2x0OVdpUVZKZVArL2lRNU5pUC96aVJVeENRQ1ZsekJjbVFPZ2VQdkVBRUh2YVJJQm1TM3BVQkFvQVFyc0FICitLSm1TS3JtU0xObVNMdm1TTUJuK2t6STVreWpaREFrUkNnU1drenE1a3p3NVlLR1FFR0pRWVVJNWxFUlpsQlFtQmhnbWtrcTVsQ0M1CitDUWdoQUkxQWsxSTVsVlJabFRQcENnelJBRyt3bFZ6WmxWNzVsV0FabG1JNWxtUlpsbWE1bGZSUWtnZWhBQ2ZXbG03NWx2QlZYd2dSCitCM0pRbDNaNWwzaVpsM3E1bDN6WmwzNzVsNEJabDNHUUVPSndCb1o1bUlpWm1JcTVtSXpabUk3NW1KQVptWVlwRGdtaENXZDVtWmlaCittWnBwbGlUd2xDSUdsNkFabW0ycEFBaDVrVGJYalJxSmJRNEprZnBZamhUcGp4WnBtdENXa2FscGJSd3BqN0paYUF0Wm05YTJtcXdwCitqcTc1bXVZWW03bEphN1RKbTdwMm04VkpqNmlKbkxybW03OXBoOEVwbkhwSW5NdHBhc2Zwbkt6K3hwRk9VQVBlK1ozZ0daN2lPWjdrCitXWjdtZVo3b21aN2VxUUtVYUJBREFBTHdHWi95T1ovMFdaLzJlWi80bVovNnVaL3dHUU1KZ1FhN0VLQUNPcUFFV3FBR2VxQUltcUFLCit1cUFNR3FCb2tCRHJrQTRTT3FFVVdxRVdlcUVZbXFFYXVxRWMycUVTdWc0SnNRYnFPYUlrV3FJbW1wNExrSEo2d0o4czJxSXUrcUw3CitPUUNsZVoyRXRwdmF5WE5kR0oxM09KM1VPWWJXU2FPRmxwMDNhblV6Q3FSMFpxTkQybWpRcWFOQ3lLTTllb1EvYXFSMUpxUkoybWZLCitLYVc2Mlp4VnVtaEx5cVFqNktSUGlvSlJpcVZ5UnFWYnFtZFhTcVoxaHFSbnltZGQ2cVd2QjZaaFNudGpxcVoyQm9odGFxVU0wWjBuCisycWQrK3FmbXlaNEk4WjcrTUZxb2hucW8rT21mQ0FHZ0RkcW9qdnFva0xxZ0Q0b1FFZXFobG5xcG1KcXBIQXFpQ0NHaWdQcXBvTnFuCitLWG9RRUxDaWlIcXFxRnFvTWhwb2RycW1XcHFuZXZhbWNOcDRjanFua2xlbnJVcGpaZ3FyUnBhbXVZcGpiTXFyU0NhcnM0cDJ0V3FyCitib2VydnhwanV5cXNRK2FyeTFwandlcXNSVWFzeFdwMng0cXNTYWVzMGVwaXpVcXRRTWFSV3JtWjVGcXU1anFXYVlrUWJDbWE3TnF1CitjWmtRZEJtWThqcXY5RnF2ZnptWUNGR1lrcm12L05xdi9ncVpsSWtRbG5tdUJGdXc1TnFaQnlFQW4rbXVETnV3K0VDYUMrR1JURG14CitGRHVTYW1rUUoybVZHcnV4SEF1VE5va1FPTm1USWp1eUpBdGdQNGtRUVdtVUtydXlMQnYrWVVpSkVCbFdzVEk3czlYbGxBa2JsUjJiCitzenFyc1ZqSnF0MXFZOU1LcmtKbXJkY0tleEtwcldMYWh6K3JxM2dxdEVVR3JVc0xZMEhydEQ5R3RFVXJiTm1LdE1yR3JVdjdyVTRMCit0VkhyWWxOTHRhVmd0VmNMYkZtcnRjakd0VC9ydFVMTGtWSGdBSEk3dDNSYnQzWjd0M2lidDNxN3QzemJ0M0pMQTdlR0FaNHd1SVJiCit1SVo3dUlpYnVJcTd1SXpidUk0N3VLQ1FFSjFBREpSYnVaWjd1WmlidVpxN3VaemJ1Wjc3dVpUYkNRbnhCVlZRdXFaN3VxaWJ1cXE3Cit1cXpidXE3N3VyQmJ1bCtRRUxqZ3Q3Wjd1N2lidTMxN0RxSVJDSS83dThBYnZNTHJ1QmhBV3NaN3ZNaWJ2TXE3dk16YnZNNzd2TkFiCit2ZEk3dmRSYnZkYitlNzNZbTczYXU3M2MyNzNlKzczZ0c3N2lPNzdrVzc3bWU3N29tNzdxeTFWbkJFYmxzUlhObEVHYXdSYTZBUnIwCitLMG56RWhSQ2N4RGx3eFpTY1JkeFlTblJJeFJ3c3I0R2ZNQVBrUUpVeFF0QVlGZERoUmhxUUNTRWhSQ2g4VEJHZE1IdW14NXB0QjNrCitnU0s0VVFjYVl4WEtzc0FJWE1JbVBCQ3FBUnNYcE1GK0VCY1N4VUIwd1JWSk5EbmtaY0ZFZGNQUkpCN2JjVWtGVVV1QUV5c25ITVJCCitURk10N0VWcFVrUlRFVllaVk1FQ2hNRUdaRFYvY3lOMklVT3BvVXRSQk1SQ25NVUhyTUQ5SVJtK2trcUUwa0NUVWNOTmpNTXZIRVZTCitmTVljTmNKYTNNYnFtOEpMSXlsY0RNWjJBUmUzVmhWc2tUSXpzeTBlb3hWNkJEMytpbEV2NXZOVmJsekkzcXNrTVhJeC9hVEdoVVF3CisyRUhHSDRTL1R2RkZEclFWVkl6Q1Z2ekhocnpKM3B0VGxkTy9aSUlZcTNMSEIzVEJURXc2MjJGSDBiSERKT3pEYU16SnNBeSs5dkZECitxSHpHRnlSZENYSEtyeXpKMStFaEdsekpUUU0vdDJFL0lVektzWHpNMTlzOGFTd3p2REl6dVF6SmVKekh6SnkvUUxHL0cxd2lUWFU0CitrWXpNM056TjN2ek40QnpPNGp6T1pwVUNyM1RPcjRUTEg0RkU2UHhLY1VYTzhCelA4anpQOUZ6UDluelArSnpQK3J6UC9OelAvdnpQCitBUDFZdVRQUUJGM1FCbjNRVWV4WHJIUFFETjNRRGszUUNiMVhwZlBRRkYzUkZnMGhqdFV6R3IzUkhOM1JQR1BNWmlVekhqM1NKRjNTCitOd1BTWEFYK3lpYTkwaXhOMGhtOVZYcjFFeWg5VlRLZFdEV05XRU9GMC9LN1Z5T0NXRGQ5V0QvOVYwSHRWemw5V0VXdFdEME4xSm9jCiswa3ZOVlVPOVYwZE4xRHV0VjBudEJaaHcxVmlkMVZxOTFWemQxVjc5MVdBZDFtS04xWUV6MDFiMTB6ZndDbXE5MW16ZDFtNzkxbkFkCisxM0k5MTNSZDEycDlBMldkV0RsOURXUGQxMzc5MTRBOTFsNUFPQy9OZ1dSTFpEMzMxREdORldLb3RsdWIxenJOZVlkTlpMQVcxWWlWCisxUFpJdG9uZDFEVE4ySTVOcDVCdDFNalRqbFJiMlZPZFY1ZzkyWWdYMmtMdDJaOTlxNnd0MVpLdDJrRm0yb1c5ZzdRTlpKdHQxbFgxCiswNDM5MmlvWTIxQTkycmtkcm9UZFdFbk5DS202M015dG44c2czSXNkSHVyK29LblVYZDNXdmFIcUFOMTVsZE9FME56ZS9kM3l5UWpICit6VmlwWGR4THB0MXU1ZHZBVFhub2pWWTVEWVhtN1dPMmpkeVNrZGxVdTlzMjdkcnJ2YTN0ZlZidlRkcGZPOTZMVmQ3bWpkOCtyZC83CitiWHY5WGM3RUhkL3pUZDcxSGQ5bHUrQk9qZUFKbm16TXB0amIzZURtL2VBRExobUVDdDRpbnFxS09pKzhyVTQvWGFuWHZlSXNycW1jCithdUo2ZlIybE91STBmcXFyeWhlbjdWWUVYdHdHcnRUaDhkc1h2bVlaenRsVzlkOFM3dUZJSGVIeDNlT3QvZU5CcnVEYUUrT3ozZUVDCitudVNHWGVBVTN0bE8vdVFZbnVWRnp1SEZqZVNKbGRUcjZyQm1McHB5Q2VNSEhoNzYrcTl1L3VadzNwZ0JxK2FpUFJBS2UrWjREcG9RCitpK1ArdDgwTGpwQUZnQjdvZ2o3b2hGN29objdvaUo3b2lyN29nTzREWHQ3YldPRU5MVHZwbEw2eTN2RG82cFRUQXRBTmpON3BudjdwCitvTDdvamxEbFk2N2tXQjdsYXk1N1hON2xxRjdudlhma3BIN1pwczdqbUg1TzZyM3F4emJrSjM1T1J1N2dzWDVZTzU3YlRPNVh0NDdyCitTbGZyNXRUclZLNGVPWTVXU1QwTWJSRHQwajd0MUY3dDFuN3QySjd0MnI3dDNCN3RkSURzZ2ZUVDhGQUc1Rjd1NW43dTZKN3U2cjd1Cis3Tjd1N3Y3dTVBNFA0TTVIT1EwQkQ5RHQrSjd2K3I3djNENE12LzVYd1U3Ynd5N1JGbTdzZk5qcWY2WHNZZjd2ZmhYd3FqM3cwYTNxCitCdTlwdWk3bHIrN3J6TjduOXUyMEVKOVh4VDd4QjAvbkNRL211UzMrNXJKKzViU084TVJlOENDUFpoVWYyUmUvN0h4TzN3TkJmUlY0Cis4emlmODkwM2ZpcFA4T0ZoZndNWTlFSS85RVFmZ0FYWTgzckYzVHEvOUV5Zjh4ZVk4VFNQMjZjdThpdS81UzB2NVBPK1J3cGY4Z3pQCiswN011N0ZsL1FoOS85UzRmOWlHMDliUnQ4c0QrOVFKdjlpQTA5bVFQZDI0UFBHaXYybW9QOEd6LzhIUC9NM0FmOXdDNTk2WlM5NU45Cis5dzB2R2U0R2M0aWYrSXAvYi8yRzlCNlBGUkRYY1pJLytaUmYrUnYzY1k3dlZ2Vytjb3ZmK1o2UCtESUg5UkNPOG1DZitXalY5MzR2CitaaS92NmpFSTY2TC80YVRmOXFaL1ZxaWYrbTBHK0tBaStJZE4rRjRmKzNvLysweHQ5YmIvOThDZjBpU2Y5bDFQMVpJUkFubmUvRzMrCittZVlhbnQ1WThRMWpVUDNXZi8zWW4vM2F2LzNjMy8zZS8vM2dYLzNmZ1B1Zm91a0w2L3pvTDE4aGtQeW9MUmwvSHVyd0gvL3lqK2lPCitYdnhhUGhDU1h1bjZ2LzhTZHVuMi8rVUF3VXVnZ0c1WkRCNUVtRkRoUW9ZTkhUNkVHTkdnSTRHOFVnQ29tRkhqUm80ZFBYNEVHVkxrCit5SXdBVWxUMFZFcmxTcFl0WGI2RUdWUG1USm8xVlY2cWVBL0FQWkk5ZmY0RTJsTW5UNEZWcGh4Rm1sVHBVcVpOblQ2RkdsWHEwU281Citkd2JGbWxVcnlZczU4ZGtFRzFiczJKcWVLbmJkbWxidDJvb21VWktGRzFmdVRKd0NoN0xGbTNmazNhSlQvZjRGSEZocVZidFg5UjVHCituQkV0cjN0ZjV6NkdETmVzd01XSkxTZDJLekJsWk02ZDZWcitKWHBadEZxK3ZJd0tScDFhOVZQQ2pBMlBocDExY1dQUHRXMnZuR3dSCitZMnplV3pQend1QkorSERpeFkwZlI1NWMrWExtellXREF0MWJ1dERYWDZwY3g1NWQrM2J1M2IxL0J4OWUvUFV2MGFlZkJ6azdrSFAyCis3ZDIvYjQ3aDdHNzA5VUgrdHAvZmRXajk5a3Yzcis4L0FNK3JiRUFDNlRNd1Avd1M3RTFBQm1OejhNSFJJcFR3c2dJckhPMUNER05iCitjRVBMS1BSUUx4QkR4R3RFRXRmUzhNUzhVbFR4TUFCV3VTZEdHV2Vrc1VZYmI4UXhSeDEzNURISFNWNXJVVVFBSnVteFNDT1BSRExKCitHSC9rTDBpOExsSXlTaW1uTkhJVkJKMUVEQUF0dCtTeVN5Ky9CRE5NTWNja3Mwd3ptOFNTTkRQWFpMTk5OOS8wRXMwMHQ3citDRTQ3Cis3OFRUelRrVG83SlBQLytVOFlrOTJYb0NVRU1QUlZMUVFkVzZCbEZISDhWeFVVa25wYlJTU3kvRk5GTk5OK1cwVTA4L0JUVlVVVWNsCit0VlJUVDBVMVZWVlhaYlZWVjErRk5WWlpaNlcxVmx0dnhUVlhYWGZsdGRmRDZyQWdJd3ZxeU9pSmsxekR5a3Rqa09WRldXWXowbWxMCitjUHo0cUVzcVFydG1sVG9BQUNjRlFhUHQ4cFl2ajdXQUNpMnBDRllnYmpXeVVrNWYzNFYzMXhTQXlBaUlWUlRiVGFlTjFBQkNTeUFVCis1UWpJd3RSRlUxK05ET1psV0dvN011d0piUVc5cG81VnJ1RkZEU3FvMEVqZ1p2bGJoWXFGL2FEaTNtWUJVQ09qYmQyTk4yV1ZZMVVECitBRVdmQUdCaFh2ellkbUNOd0ZubGlTZW9XSmJoZ25mKzB4aGhxeFFEeDZQWFlPYkpHSG9yZXFMYmt0Qjh6UUp3QU9ibENXQ2JwZUxZCittYzFGZVdXdnYwWVZuSFJwcnVnYXNmTzlraGRqRkJVNjQ1OEozcWp0WjNtNUJnQ0tBdzdOYXAxSjFtZ1NqTnVDT2pRcUp0a29CWXlICitMRnFnVlpnRXUzSEhVWjFYY2EyTklSTHRqMUpJSE8rNGdYNzc0Q3MxaHJ2cVZhaVZXMmlOWHdzYW81M0FLWm1YT3VydStuSFpaNiswCitaVUhyYUQxeWcrVVd5Tmc2VVBiU1ppOVBLdjF6ZDUwdC91bU5VSDk3cHhST0FubGoycWVuL2xKMC9VajhuanErdFh5alNlb3c1bTZmCitOdzhkMnJTRnJsdDh0eXY2VVEyWVcyZi83L0lCcjJodzd3Ky9SNDJpRjVlK2V2Ly9UOU1rN0hXc09uRXBSbW5EWE96KyttZSsrZG1NCitnV2ZKM1BMNGN4V2xGY3RwOUZ1ZlFJWkZOYXNGNnlxc2U5MENBVGhDRW1Lb2Jxd2ozOXlxeHJlUXBLNkJLbnlXd293V211OEpKR0lUCitxOWpGTXFpOGluVHNZeUdEbStIK0Jyb1NGdEdJOXFGQ0JJZm1HaTRaQTF4Ym1tRUt2OFRFTFMzcmlkT3FGcGVvQUw5c2JhdGJWQk5oCitBOHQxTHNMQnJXVmxKT0lSMWJoR05yYlJqVytFWXh6bE9NZFFwY0FZZDhTak1lQ0hHQXZrRVkvcG9tTWdCVGxJUWhiU2tJZEVaQ0lWCit1VWhHTnRLUmo0UmtKQ1U1U1VwVzBwS1h4R1I5OHJSSlRuWnlTMXBEMVJNOU9VcFNubWxWb2l4bEtsWEpKVmdCd0JqUGcyVXNaVGxMCitXdGJTbHJmRVpTNTFtY3NPbFVvbnE5aGxNSVgrT1V4aUZ2TjU3VHJsaTR5NVRHWTJNNWpHU0p1cWVsbXFhWTdLUktDNjVxZXk2U2tXCituYXFhby9wbXFMYlpxWEZ5cXB5YjZxYXB3aG1xZFdvemphSTZwNmJpbWFsMFVsTnJ5c2hIUHZXNVQzNzIwNS8vQkdoQUJUcFFndW9UCitmdTMwVkdsYzBBS0dOdFNoRDRWb1JDVTZVWXBXMUtJWFphZ0x6Sk9xMGxTaW9COEZhVWhGU3RBb3pLZVZXc3VITzFTNlVwYTIxS1V2CitoV2xNWlRwVG10WlVwYk1JRFVMSitScGk5TUtuUHdWcVVJVTZWS0lXMWFoSFJXcFNmVXFNallieU5TK3dhVlNsT2xXcTF0UUJKbjNWCitiMUphVmE1MjFhc3l4V2xiUUhtcTB2UlVxV2RGYTFyVmlsU21Ga2FCN2d3TlZMODZWN3B5OWFxVWlXYXF0RnIrVjc3MmxhWmhWZGRZCitUVlhXdFJiV3NJYzlhbHYzazh5NCt0V3hqMTNwWFhWejBvcHNGYktYclN0Z215VllYL0lVc1o4RnJXRVZPMDlNbFVhdW1FV3RWeVZiCitUMUw5QmdvdmdHMXNaVHRiMnRiV3RyZkZiVzUxdTF2WUxnRUNZbVZzUld4eERPSVcxN2pIUlc1eWxidGM1amJYdWM4bHJpMmFTdGJYCitHSUszMThWdWRyVzcyeEZnMVZWN1RXMTRxNnBablpyVHM2RkZiM29UTzkzQlBsVzg3NVhxYXZPS0t2REMxNzVnelNsblNVVlk5ZmJYCit2MHRsYjJjYmUxOEN2MVMrbEJXSVpRdThZSGVRVjcvV1BPOS9KUnphMGI1VG5PNWxNSU1QbkZXdEVXRVdId1p4aUVVOFloS1gyTVFuCitSbkdLVmZ6aERBZ0F1S29xVFNoVU1XUCtHdGZZeGpmR2NZNTF2R01lOTlqSE13NUZnUGY3bWlXczJNaEhSbktTVmJ3Sjc3YnFOdzE0CitRNVNsUEdVcVY5bktWOFp5bHJXOFpTNUhtUjR1RG14d0JSSUhPWlRaekdkR2M1clZ2R1kydDluTmI0WnptZU1nWkFpSFJoTmR4bk9lCis5YnhuTHBPZ3lheXFiNFlKN0dBeDg4S3NFMGIwWVN2ODFvUmlXTkFFM3ZCM1Vmcm9BaE1heGhGT2RLYlR1dWhDbjViUzhJMjBreWY5CithZnRhbXFPWTFuU3EyVXBuZURxYTFPSU5OYUMxNW9RYTFOcld0OFoxcm5XOWExNzMydGUvQm5hdFZmRGJNRjg2TkdqWVJiS1Z2V3htCitOOXZaejRaMnRLVTliV29uR3cyc3ZuQm8xaEJzYm5mYjI5OEc5Z0wrdktwQXZ6cTFwblpxYUE2dGFuYitGNVhUeHE2SXA4Mk4ybGlUCitlOVR6UG5kK0M3M3VkdmNicU84KzlZRHhUZTl4Uy9QZUE3OHN1cW1yYm44My9OL1l4cWFyRWY3WWVodThzaFBIck1MYnkzQ0hPeHpnCis2WTQzeGk5YmNiM09HdHduUjNuS2ZUM3NGd2U4SXNpdWRzeGxQbk9hVC92YWJpMzB0bFcrYzU2ZlhOeDRSVEF2RkN6eXZtcGN3QlhoCitkOGZaL2ZHRmg1em9qaVU1ZlEvKzlNenFHOTRDU2JyU1U4MzBqVHVkNm55TnVqZW4vdld2R24zSUhOZDZ1N2wrZElISW0reXFMWGpKCitLd0psUHRmZDduZlA4cGRiRHZJeHg5bnZmd2Q4NE9FOFo1eGZuUmQzeG52aUZWOTNQd09kd3hYeHNKSWxQM25LbjdqRmUyKzZRR1Q4CitZODUzM3ZPZjczR1FDKzl5Z1JUK3VmS25SNzNrbWV4NFNWLzg3WFExZTUyUm52WityLzNzWG44OTNGa3ZhdGZuM3F1eGJ6WGFhYjkxCitpTU1WOTc2dmF0alZPWGJrU3hYNDJaNzk4RlZ0ZTltM3ZmbGRWYjQ5S3pLRVlIVGYrOThIZi9qRlAzN3lsOS84NTBkLzk1VkE3TTBXCitXaFpIZ0gvODVUOS8rdGZmL3ZmSGYvNzF2My80eTZMNGpRNk5FVWkvQVNUQUFqUkE5SE9EdUpPNjNydStxWHEraUJNKzZVczA2Z3UrCis0MnRBbThxKzFtSytDNXlwQnpRK3JKTkE0aHM5dnVNRnQrUEFtY3BBY05yQUU0UXBEd1RBNkF2QkNmeS9uUkk0RnFTcEZCU1ZjclBCCittSEpCR29UQkdKd3dDb1ErNjl2QkcxUkFzZHUrT1ZEQ0pXVENKblRDSjRUQ0tKVENLYVRDS2x6K1FrTEF2SzRUQ0N5WWhpNzB3aThFCit3ekFVd3pFa3d6STB3ek5Fd3k3RWdoazByOUN3Qnl1RXd6aVV3em1zUWlZNHd1Vmp3Q0pzUWFzalBVTURRaGtjd2N3clFUMUV3VHZVCit2Z1FqUlB6S1FyYnp3ejhNUWpiY0ZOTkt4SmpDUVhaYXdVVHN3VGI4UVVmc0x5R0VRQXVjUkpXcVJGRFJ3VkJzTUQ0a3dhempSQXFECitSSG1TT0ZOMGgxSDhsTjlvQW1Xd3hWdkV4VnpVeFYza3hWNzB4VjhFeG1DOFJmRXByMGg4RFJHUWdtUlV4bVZreG1aMHhtZUV4bWlVCit4bW1reG1RVWdWYk1sTklReG0za3htNzBSbUc4QWtQVVFGa3JOQkkweDFOaExSVWtSOE03UnkxTWxYVE13UWRUUjNZVXhIWXNGWGhrCitKM0R3bzMza3gzNzB4My8rQk1pQUZNaUI1TWRpZEVXZUljaUVWTWlGWkVpQzVKcGtRc2lHbE1pSnBFaUJCSWY1T3BXSzFNaU41TWcvCitXaFUxNk1pUUZNbUYzS05UQWNtUlJNbVU3TWRNWXNtV2RNbVhoTW1ZbE1tWnBNbWF0TW1ieE1tYzFNbWQ1TW1lOU1tZkJNcWdGTXFoCitKTXJ6dUpxS0dKWmlPUmJlR1Fua0Fab3VzYUx6NFJJc0FvbVdXWnI1UVNXVFFDWGlzWmFGY2FVSEVvaCtPU2huY1phaU5FdjBpSnlLCitzQmQ4Y2FDSzRCZC9BU01lZWlBWDhoeWtyQU9aNllnNkFSZ2llZzNlRVpvVTJKNlJLYU5uZ1prT0FSSUxPOHZFRkEzYjZaMllxUWlhCis2WjZNd0JtZDRaa29xc3N3Z3FHL1ZLS05BSmFqeE16eThVdmphUlpqQ014bm1RUndPRTMrQ1pKTHhXVE4zaEFiZ1NBYkd6cWJ0aFNJCit0YUhOMVJTZXpnRkx1ckViai9BRGwxbUZxK1RMMEFqTmpLR1luYUNDcFVHWXJLbWJranhNUm12TjZFU1JwUUdtaXFDYzNjRkl6TEhNCit1ZFROSmNJZ2pnak9tWEdaRndMTmFQcExOTW9meHpTWTV1U0ZyTm1oejVUTytNd0x4c1FkeXFBWDdPd0kzd0dlTGhHZUx1SEtGUHBPCit6bHlZT2tEUDhTbU1MdUVKVVRyS3F3RE1RdGtOdnhHSUdsck40WkhQQ3NXTDY4bWV3TVJQN3dFZjlWSE55NlRMM1V5Zmp2aE5MU0xQCitCU3JPSGtvY3d3Z1pnekVYTHNITDU3VFFHYzBMQWFwTzNVQlF1VW1nRnVxY0VQVk9pOWpNSGhJWjhUek80eUZPODBRUWd6R01sdW1LCitFUlVJSUFwUXhLVCswU2tkaVJNcVNXWnBtL2NSQ2JyMFVRZVNJWTZ3R3J3a1VQanNTeVRsenZuQUNNUEpDQW1kSHltbDBqZjlpQ1RpCitDT3hzSWxUYXppV2FJbEdLU21uQlM0MUl5b3pvbUpGaHBlOUVwYWpNaUxxaEZpQXhGMTVBelVOMXpEWU5IamlWMUVtbDFFcTExRXYxCitIenZheHl2Tml6N2FSMERDMUZBVjFWRWwxVkkxMVZORjFWUlYxVlZsMVZaMVZRTnhwbGlWMVZsOUhtZTRCVnJGMVZ6ZEpWUndCbFRRCisxVjhGVmxuaVZWOE4xbUxWMVdFMTFtU2wxVnR3Qm1WMTFsbFZsMVdTMW1tbDFtcTExbXZGMW16VjFtM2wxbTcxMW04TmsyS1RKbWRZCitGVWtBQUVrbzEzTk5WM1JWRldmQVNGRkJDNFBVRkFBZ1YxVXhWM1pObFh0ZDExWCtjVmRXaVZkNXpNRjZ6VmQxdFZlQ0hWaDhSWlYrCitYWlYvZFV0SWNkZysyVXVCVllPSHBkZ29xUWg5dFl1SzFkZ2p1VmlEM2RpUDdaR094VmVRSmRrY3FRaUZyWnFTVlZrYWdSK0dUYkRVCitnOW1ZVGJFTXlDbUI5UVI4d05tYzFkbWQ1ZG1lOWRtZkJkcWdGZHFoeGRsQ0VObUs0QWJRVTlxbFpWb2U0NGFqRlFockFJT3BwZHFxCit0ZHFyeGRxczFkcXQ1ZHF1OWRxcHRRYW81UVhUazlteU5kdFpvSUdUcFk5N1lBV2lkZHUzaGR1NEhkcmNjRm1oZzhXV0lpK2J2WTI5Cis3WXk2NEFXTWJjUlY3RVN4UFkzVk1OekRGWXpXQUZ3VERFWEpRbG5hNE52SW5RdTZCWnBMSk1TOGZRdkoxVnl5OEZ2QVZVWEJSU3pGCitBdHpDUmR6KzBqVmRwMUJjZzJYY1NYVGN0WFdNellWZG02QmNjUjA2V01SY3pZamQzS1dKempYWXp3VmQwU0xjMHhYZTRVV0sxTVhYCisxVTNFMXZVSzNXVmVtSmpkOWhPSWN6Q0Q2YVhlNnJYZTY4WGU3TlhlN2VYZTd2WGU2ZVVDOXFQWGl1QUFBakRmODBYZjlGWGY5V1hmCis5blhmOTRYZitEWGZXaERiOStPLys4WGYvTlZmL2ZNL2dRRGNkMENIQUJiZ0FTYmdBamJnQTBiZ0JGYmdCV2JnQUg0SHNXV0g3NVhnCitDYWJnQ3ZiZUJCUUlsSVdBUDVEZkR2YmdEd2JoK09VQXJDckZVTHhkWHRpTTVsWGhteEJiMy8zZHRSSmRneVZkNHFWaHd6VmVVR3hjCit0VjNlRlY3aDV5M2hTVHpoRk9aaDV1VmRmSFhoRjk2MDRLM2hKVjZOR3liK3dyc1ZSUjIyaTljZFl0MzFZY3ZWd3lDdTR1WXQ0azFFCitZa1ZUWWlZVzQ4Qnc0a0dFNGlqT1lOZmRZdWE5NGp5MDNack4zRFdPM1M0R3dTOEdyUmpHMXhrZTR6MkdpakpHWGtKVTNpbVc0OXh0CitZNEVZQWpwRTVFUldaQ3JFUW5VUjJCL1Fna2lXNUVtbTVFcTI1RXZHNUV6VzVFM201RWlHQmJIbHdqUVU1VkVtNVZJK3d6WDBYNE0xCitCM0pnNVZaMjVWZUc1VmlXNVZtbTVWcTI1VnRtWlhNUTJ6ZGM1RjcyWlVTMnd6U3VDRUxvNUdJMjVtTkc1azcrQVJMRzRpTFU0a0dHCitYVG9PWERzRzQxVE9ZejdHNXFqdzR6TkdZMTU0WENxRzVzZ3RaTHZsNW1jT1o4bVY1aU9tNWxXejVvclE0MnlHWjZvUTJ6L1d3MEJtCitESEQrUHVmYkdPZmFOVVZ6enVlOVRlZDFEdDB3anVlQ25vSnQ1bVo3aHR4LzN0dDk1dVpUYkF1OVpXaUFibUdCcnVhL2xXR0QxbWlFCitQbU9GeHVlSjVveHg1cjRESk9tU051bnlXNytJcm9oaGFJT1dkdW1YaHVtWWx1bVpwdW1hdHVtYnh1bVdwb1A2M2QrZTl1bWZ6ci8rCit4V2g4aFljeU1PcWpSdXFrVnVxbFp1cW1kdXFuaHVxb05tcDRFRnNCUE9tcnhtcVN4bUJ2cGc4SWVJQ2NCdXV3RnV1eHh1bGhZR1kzCis3bWM0eGwyUXRvMkF0dWpDd21OMzFtaUQ1bWdvOW1pMnRnMkhMbWUxUm1HOHJnMjNmbXUxaXV1K21PdDRydXU3dld1LzdneTlQbU4vCitWdXpIQU96QVJxdkJObzNDTnV4NWZ1akVmbXpJR09mSU85dlBUcjMreTNQa2luQUZQakR0MDBidDFGYnQxV2J0MW5idDE0YnQyRGJ0CitaaERield2YTI4WnQwQk85b2E0SU1mamEzd2J1NEJadXJ4VURzU1ZiMEVidXlWczlycTRJQVdnRTJZYnU2SmJ1Nlk1dFZ6aHJnYUM3Cit4ZFB1N2M0N01Hc1dnVlVBdVJYdjhTYnZvRFhhZHU0N3dWUHY5V2J2TmlNODNoWUljVGlEK2FidityYnYrOGJ2L05idi9lYnYvdmJ2CisrUllIc1VVODdpYndBbitEeG1QdWdXamI4bWJ3QmhkdkJiaHVjbTVzdmhiaXpaYUx5SlpzcGFMc2Q3WnNKajVzV05Sc0M1Y0x4b1ppCit4eFp4enEzb0RKOXNndTd3TWY1d1V3enhFeWNMRXI5YkU1ZnhzTUJ3RlY4djlLN3NGdWZqRjg5aFlSYmtHNWVNQ0tlMW5rUHlKRi8rCitPZkVWMkFFQWdTZUg4aWlYOGltbjhpcTM4aXZIOGl6WDhpZVBBYkdGdVpvRDh6QVhjMmk3T2ZqbWhYVkloelJYOHpWbjh6WjM4emVICis4emlYOHptbjh6UmZCN0hWT1NYWDh6MnZnWjlMY0Y2QUFEM1k4a0VuOUVJM2RDMGZnQWpuWnhPbWNDS0hpeHpYY1hkamNSOWZZaUJuCitYU20rWjBlZmNVVi9hQnZYOU0vZ2NYV085RjdZY0VyZlkwdFBYa3hmNkUrWFhVN2ZhNVZlYTFhM0NVZ2ZkYUVxZFZNWFkxUUhaRlgvCithRmwzWGxlZmNGanZhMSt2Q1ZxdjlZZmpjUTdIOWRQVjlYcm1kV0l2aXdndkFqNm5kaVZ2NU8rdUNFWTQ5RzNuOW03SDhtVVEyM29ZCis4M0VuOXpDdkI3RlZoenBYOTNWbjkzYW5jM1hBODJxWDk1Mys4M09VSlFSdngvZDg3M1pHQVBZU2IzUm9CM1V6Ri9WSXYvVmxyK0ZtCitMOElZQjNpWG9QRTNGdllLWC9pV01QWmpCN0JrTi9oS3greUVmdmFJLzNYSCsyRk0vSGVPZDRtSnAvaUN2L2poUmZnZFZIaVJMNFZ4Cit6bTREaDNuRjA3dlJGb2p3ZHZDYngzbnpGbHN5YSsrZTkzbjFmbS9BbGUvL0p2cWlOL3FqNys4QTUvRUJqL21tdHpzRVIxa0JXUENjCitwL3FxeHdjSTkvZ09TKzZ0bHp6UnhuYUJLRzNxRnZ1eEozdlhwbTBldCszY1Z2dTExN0hkQmx6Zkh1NjRsL3U1MzlyaTV2SGo1dnE4CitUN0hsanZybkx2dS9CM3l4dCs2c1IydEdmM2lXSC9rVXAzaWlNdm1UWi9hTTcraU5SM3pjNlBjYUQvbkpMd1dTUC9iR2QveiswazE1CitHMXg1a1cvNHRENTh6R2ZoVUY5OFNiZjR6aGZlejJmQjBPZjRjYTZFN2FMOTJyZjkzRm9Ddmc2RVMrRDkzdmY5M3dmKzRCZis0U2YrCis0amYrNCtkOUt3RGxUR0QrNW5mKzU0Zis2SmYrNmFmKzZyZis2MmQrVkRaekZtQ0Q3dmYrN3dmLzhCZi84U2YvOGpmLzgwZi83bWNCCitzYld1MjNmLzk2ZDlYRkQxUWtEKytyZi8rOGYvNHcrRUNOY3JnVVVWd0FVSVhnSUhFaXhvOENEQ2hBb1hNbXg0VUJJQVNRNG5VcXhvCis4YUpBaUJJeGN1em8wYUV6QUI5SGtpeVpRaVF2QUNsS3NteHBFWUF6bHpKbkl0Ukk4K1pObXpoM3R0VEo4K2ZIa0VDSGVqd3BVQ1hSCitwQmRoS20zcTBLZlRxQThqU3ExcUVLclZxa0t6Y2pYK21uTFZ2YkJpeDVJdGEvWXMyclJxMTdKVkN5QmEyN2h5NTlLdEc3WVZnRloyCis5L0x0R3hldlhyK0NCd3NHVFBndzRyblJBQ1J1N0JqdEtwUUFKbE91YlBreTVzeWFOM1B1N1BrejZOQ2lSNU11YmZvMDZ0U3FWN051Cis3Zm8xN05peVo3OFcrUGcyN3JDU0lPVHVmVmlBSkFHK2gvc0ZMcHc0OHJyR2t6T1hDMEZTOCtoeHVWS3ZidjA2OXV6YXQzUHY3djA3CisrUERpeDVNdmIvNDgrdlRxMTdOdjcvNDkvUGp5NTlPdmIvOCsvdno2OS9QdjcvOC9nQUVLT0NDQkJScDRJSUlKS3JnZ2d3MDYrQ0NFCitFVW80SVlVVlduZ2hoaGxxMk4wVEZ2Qml6RUlnSm1TTU1TbFFvVWFJYW9oSTBJb2ZidmdpakRHaWx3S0lJRjVEaFRIK0p4YlVva0UxCitOc1RqUUMwQ0tTT1JSUnFwMUNRZStySFNrajVhNEFjdjEvQllJb25YdVBqaE5lQ2tvT1UxSnVxWVFnb2U4ckpsbDd4WVFBVVZIb0xvCitCNDdnQ0RUa2tYSEtPYWRIMXdEQnl5clhQT0ZqaTB2dWVBOHY5Nnh5SlorOHFISG5qUitpR0tTTFZEekJDemg3OHVMb0UzWFFlU21tCittVnJrSXhCVyttZ29FQ3Z0eUtpSWhWcFFvbEZUWXFubGx2ZDhDcWVtc2NwNjZTU3JxRWxpSGFjR3VzcWpQUUlxNktTR0ZxckdTaDFlCitTZXFWa3pUNlJLV3pPdnNzbmRjQTBPdWJMcTZDWTRrRmdVbmlvOWVDNmFLSVhrSlphclVnbmtuRlNtdmllT2V4MExyN0xyenh5anN2Cit2UXgxQ1NhWVZ0YTdMNy85K3ZzdndBRUxQREQrd1FVYmZERENDU3U4TU1NTk8vd3d4QkZMUEhGMVZPaHJnYks4R051dVFpU1NxT2FICitIcWZMSW9ub0hsUkh5WXQ2dVpLS3hxQk01Y3RLNGtqRnVJTUt0QXFzQ0lVcGtKMERpWmt6eVNTT3pNdkx4cWhZVU5IVUJ1a3lpU2l1CisvR2JKWWxMMGhKczNMMm9zMEFRVmpXS05JcmZyc2NrR3ZhemptR2l1ZENyVDI4WmNkdGpHMkl4bjF0cUsyYk5BUHp2a2NiWmRlL3gxCit5YUlTMVBMTHZMQ1pJNVFoNTdqbzFGWGp1V2poY1F1MHRZaEZnenhRMGlmbktPcmdOSnVKSzVWTUc4MjJxRzRQaEhORkZ0ZWRzWm5WCisvdWd4eUhoL0N2WGxCcUdOTXBNekZ6NDI0aGROa25HbkF0R29lcFF6NXc1OHVhTXllclBVeDB1NnM1bCtDem4rMEQxQVBQb0VFSzRxCitEbzdqQXgwcVVKSzJvZFNpbDhrVFR5aUx4Z043MElyTVd6QjBzQllCc1NnVkEvM2U0bzJIOXppcXFzZmpLZjZWeTR1NXZ2Nk9wYjUwCitYUzk3QXRrZUw3bzNKbklOQkFobzRwK3E4Z2M4V3lGRVJOR2JYdld1UkxlS3ZFOGc4VFBVOXdoeUQrSGQ3M2dTdk5MNWpCZS9DMm9zCitnOFJMMy84SU9CRHNWV1IzQXVuZEFvRlhQN0tWcjN3blhCRUYwV2NiNmJVUVVDTGE0RVVTUlRXQk5BbDRUNG9Ta0NKb1BCMnlxNGRQCitZTit4bm5jemZVVUpaNnVBa2g5SVY1RklUY3BLMUdQZ3pUeFlRaFAyVUg5d1d0SHpWdlRCaWdBd2pFeWNIMEdlS0tVMUZxK054MEtpCis2cTc0dFFEQzBZZGZGSndZS1VKRzB4SCtDNDNFRW9qaUFnaXVLZjZ4aXNiTDAwQ3VNYWdqV25JaWRiU1pHTUdISWtBT2ttTmE1SmpxCitRSVJKbnIzdGxIRThaQmdOR0R5TlZhMlJUb1RTSGlrNVNUK3VpSlNxVzJVWE5kaEppMWpNVDVKQzQwRDh0S085Z1l0MXBSd2YwWEJsCit4RGE2Y3BscUdCUllaRGttQ3p6aGd5azRHaW9sdGN5bVhhbG9wcFNrRzMwWXRZc3NNUVZRT2lZcUJlYzN5Z210WE00OEpTcGZWb2RwCitwck9mNWJvbW5seGxrVEIxODRiaUJCSXA4Y1kxdytXTmx4VWNuOTdBTVR5SHRCTktrL0FETXBNNXo4ZlZNM0llVzZnL3RaWWpjT1F5CitwSVVrRlVDelNjeHJLRk42R1pWbmo1aXB0NFlTOHFIbnhKMUhkcmNLRlBVT21ZZmFLRVRQcWIrRUNxVCtvTlhVSHpBMUNhTDR4VStiCitoOEpZb0liV29pdW1RR2xCZlNidzNsaFRiUnJrZlIvc0tjZCtLa1FmVXJLWHd4U1JVYW1wVm1ReE5aNExlYXF5VXNEUHFhNkNWM3pjCitaVTE1TnN4ZmNsR1RicVdJVjF0SVBoR3VBcWlsL0NFNnIzU29wTFp5cmNWcnF6WjE2clM1L2kxVVkwV1dRL1ZxVThiKzFTSjIrcURICitjblVzUVZsVmtxOTc0ZWdneUtnQjVqVlFSS1NlUUZOUTJNNG1oQXE5bTkxcE8zalpWUG9SaFcrYkltdTVXaEFMMUJWMnVXb1JhVzJLCisyZFlHVWEyc1JhM3ZZdWdpMldKeElyYTFFbzFjeHI0OWNWR1hwMzFtYzgzMzJnd0tONC9GQlp6UldnUkE1UTQycnltMFl2WEdDeWpvCitick51STZNdWJRL3lXZC9oaW4zK3lkMHRYdWtiM2g2eUVMYjVCZXhHUFVxaWE5WFR1d3hORit2QVpsakorYzVzbVdXaTdWd2tMVS9wCitibzZxSzVvQXpPbmdhRFlOYnl1cDNHNmZkbUNHMUtGd3BCSVpnN1BsWUJPVE9MMTlzOXpIS2h3MitvS3VXaHRlY1VFbTRlRnlldXdFCisyQ1BSWFdjNjArekdUcm1aYTl4SVd0eERFeDlaeHBtbDhOWlFqTFNQQ2k3RHJlMnhoZ0hBWWZjbG1LTUx4aFpRSTRnM2hxS3R5WmQ5CitNalFwSnVjNXkraGUrT291Ui9BRnB2bXFaMzM0NHQ5Ri9Bd21RR2ZGenZuNmlLRlRnT2Z6NkZtdUl4RTA4NjV6ajBhUEpOR0xOaytqCisrZHlSVE5PNTA1NytOS2hETGVwUms3clVwajQxcWxPdDZsV3p1dFd1ZmpXc1k5MXEwZnJNVWdQK0VXU2dVTElVeTREb0hwTGhkYTROCis0bXZLZ01QRkIvRjFycFBIbUdGYlppV1g2YlZsTkpjU1RXdk4xcmRlUlIwQVVJZXFIdVV5M2FZTUR2a0loTjlLSzNkK1l3eEdtRTJaCitZS2ZFMjlNdWlMcUxyUkJrcHdTNUlzRU1pRER6N2NuSW05MWRCY0R3WERVWjNhcDdNcitxVEw4UkVtMUFuZVF5MUpaMVZGSmd5WEVUCit4Q3YwcnV6QVN6c1FkTU5iTWcrL09QUjBiUUVwSXdUWnZxNER0VGgrRkUyclBPUVZSL203RGVLSHliaTRtNzFUZzIxWGZoQ09Qd0hiCitwWDFrTXEyZHdFaDZKZWJYempZUGhhMXJseHVkSUMzMzk4aU4zZkZ1b3c3a0xYKzZ6bjBIYzVEZmVqTHpWQU1BbEhYRnJTK2Q2V1lpCisrYzduMjNPWWV3L2kxZ0grZTYrZUFBQVgreUhiYlM4SU9IalZUVmhobmQ1OUw3dS94eFRKcWZ2YXlsZG4rY2ZMam02czgyTGNGUGRkCitKTUZ1SmNhMzNNb0RtUVMxMGI3amU5Zzk2Nk16bmM5TERuaS9QN3pwZ2Q5U1F2enVzbDVaSGZGcGQvckJEeklKY015ZVJmTk1VK0ROCitMdmlFcUZ6dWZPYTYyNjBDRGpIVlBaUERSd253amNGNndHODg4WjdYL2QxNUptYlI1eHJzaXpvODdKVmVrT2xqWGU1K0dQbEFxSUE2CisyenlLOHBxMndPQlJXVnlOQWJ5b3ROZjEweDM5ZkJHTzN1T3ZwejlCZm54c2orYzg4TmczeU5XaENQQk5pcUsxSC92bGpocFl5UUNDCituUDRCSUo5VkNyVU1ZUEJGSEx2TTFwdGdIdkl4bi95a1gvTnBuK25sWHU0eFhyQWgyKy8rTk4zLzRaLzhaQXpXZ1ovM3pWOEhPaUFLCitadEp2TVpHdG5Zbjh5Qlg4bFo3M1hCb0lrdDc5UVo4SWtoN1lRVW5yWlI4TStvN05BRis1RVdEMFRaMEh2dUFSOXB5eFNlQUVOZ1hjCitFWTNLM0FtOVNlRFk2V0M3VmNiZFhjWktBQi9YQmFGSUlCdlZlTWdKZmlGbGpLRmwwQnJXV1ZianNZc0lQdHZ6Y2QxRm5ReVVBRUhHCitqSkMvaWVESWpWL0hWVWJzc2VGa2lNalRsYUVPK21BS29Gd1JiaHl3R1NKU2dLQ1FjWSt0U1dEQlplRDI2YUFkUWw4VlNrV2ErRUhWCitjTjZqYkNIelRRTEs4S0FMK3FBVHhtQ1VUTi8rc1JzcHJ1SGZFY1FxVk0zVHlaMWxQSXI0RFJlZ21GOGVEZDVlalFtdlRGK2xGT0lICiszZ000Z0lNWDlxRCsvUjJoN2pXZ0UzSWNGWURGMHEwaEZGckE5QUVmRlZnR0xobWdiWGpJQWk2ZE5CcGhBb0VqRlg1aVVrekN1SWxLCit3eEVpOExVS1E5UmlNdFpmeFhGZzIxMWNxTkNpOHpIZDA2RmYxM2tJNm5VZGxBQmprTXdUOVNDRUd1VEtCMldpczFFYjV3bGlMRTVqCis2U1hpMGcza1JISWMyQldkQ1ZhazYzRmRBMWJqbTh5VFpZM2pQZktlNnpXaE9rYUZ0RWlVQjNLZDNFM1VEL3BqUDhaZzFLWGVHZXBhCitwZkRqRTdMYjAxa2VFTnlKelZuSmpYeVFRYTZkMGxnQW9VRUs3VDNoMC9VaVE1RGhNMjVpSzk0azlSbGR3NW5qQjNaazdwa0lRYUNpCis5MHpDbzZDaUFqTGZ4Vm5sRDRLbEo2NWtVMUFCQjVwaVpSaERKcUtrQitwYndVSCtHN0ZKSGVFdDNTVFFvcmN4NE54SklnU0FvNWxNCitpOFpnbTdiWmxTUXVYbVdFbTBFbHhFa3Myc1Y1bThOZEpRcGl4aTlhUnE3bDVieE41YVJjSTh0VlpzdHB5V2EyWVZObVVtQUdTamNDCitBTUdKWVdrQ1FNTHRYR1VrWFRxeXBXM2VKbTdtcG03dVpwNjVEam5oUkp2aHpWSlNTSEE2RTA2MGpPc1lGbnNVWjQ3eHBuTStKM1JHCitwM1JPSjNWV3AzVmVKM1ptcDNadTU0RDRwbmQrSjNpR3AzaU9KM21XcDNuS3BIOGdwM211SjN1MnAzdXlKM3IyQjNPK0ozM1dwMzJTCitwNExBNW4zdUozL3laemMyNDM3NEdyYjBKNEVXcUhuK1o0R2NoSUV1S0lPQ0p6aG9vSUJNNG9ENEdvRHFCNFVXeUlVU0NFY0t5SVlXCitpSVFLU0liK1RxZ0k5a2VJY2lpRTlrZUhFc2lIQmtpSnN1aUk4a2VMQWtpSy9zZU1ScWpmZUFFbTVLaU83aWlQOXFpUC9paVFCcW1RCitEaW1SNm1qSVZXaCtoT2dOdkFLVE5xbVRQaW1VUnFtVVRpbVZWcW1WWGltVDNzQ1JKcWl1WFVPUmZpbVlocW1ZRnFrWHlNK0pBb2lFCitla0lwckNtYnRxbWJ2aW1jeHFtY3ppbWQxcW1kcnVrbGJDbUJoR2dWVElHZi9pbWdCcXFnRGlxaEZxcWhIaXFpSnFxZlZvR2VEa2pSCiszUU0rM0tta1RpcWxWcXFkZW9LWjVxZmZxS21sZHFxbmZ1cWM1cW4zSUNsKzhLbWluaXFxcHFxcUppcWpqaXFYUWsra2dxcXN6bXFuCitZcXJ2bk9sL3BDbXQ3aXF2MXFtbzVocXAzb2VwcmlxeEZxdXhHbXFyQXV2K3E5cEdyUGFxc3o1cktkanFtT0NxZitncXRGN3JydjVxCitqUDdIc0I2cnQzN3JxaWJydHZySG96WXJ0cDZycDBwcmpRYUloTnBBTXJ3cnZNYXJ2TTRydmRhcnZkNHJ2dWFydnI3ckF6UXFpS3JjCitGb1NEd0E0c3dSYXN3UjRzd2lhc3dpNHN3emFzd0c2QnZ3WkkwUkhDdmxhc3hWNHN4dTZyRFdScWdraW9BN2dEeUlhc3lJNHN5WmFzCit5WjRzeXFhc3lxNHN5TDVBeEFKSWlCSkRMOHdzemRhc3pkNHN6dWFzenU0c3ovYXN6ODRzTWJ3c2plcmFQY3dDeXg0dDBpYXQwcTZzCitBM0FzZ25qczBrYXQxRTV0eXJxc3ErNnB5c25zejI0dDEzYXQxL1pzMEY2dG94S3QwVkt0Mlo1dDFEYnRyV3JxUUh3czJyNHQzRmF0CiswUHIrUjh4K3JkM2VMZDd5Yk5ncXE0YVNiZHorTGVDR3JOcE9LOXNLaE5zR0x1S2lyZFh5cllqeW1kYm1MZVJHN3RmdTdiaWlxTjhtCitMdVpTN2VDdUs1cjZEUXFVQU9pR3J1aU9MdW1XcnVtZUx1cW1ydXF1THVoK3d0eVNxTXJSQWh2TUx1M1dydTNlTHU3bXJ1N3VMdS8yCitydS9PTGkyOExuOFVIUVN3cnZFZUwvSW1MK3VpZ05NZWlMV2lLL1JXcXJhK2FJQ3FYSitDSy9abTc2R0tLL1hxUjdsR0wvaE9xcnBTCithMzg4Yi9pZXI1eE9iN0RhUjdkcXIvdStML2V1YjMxOEwvcldMNXlPYitIeUFxZmFMLy9pcWZCV0w1OWQ3L3NPY1BiRzc3SUdpcm4yCitiLzNpYjhkNnJ2SStNQVJIY09xNnJ0aitLNTlSUXc1a3NBWnZNQWYrZDdBSGZ6QUloN0FJanpBSlp6QTEvSy8zNmxyeFNqQUx0ekFFCitNKy9hTm5EYlppNE5SKzNpVmk2TVpxM2s3akFQZ3kwSzU4ZWpsbTBORHpITGJpNzU4Z2ZVRXJFU3kyMEZ1NmpqOWpBVVJ6SE5VbTczCitBdkhsTGpFV2s2d1I1Ky9oWnJFWHU4TU5WM0dwNnJBVWwvRU9VN0g4MGtjUWZ6RWJiN0VNR3k0YmYzRVlwL0Y4MUswWjMzSGVvdkVCCitGMjBjZTdFYlA2M2ZoSUVKRERJaEY3SWhIeklpSjdJaUx6SWpON0lqRDNJZi9QQVk4MW5BT3F3bFh6SW1aekxEUW13VHk2aXVFY0lqCitoN0lvanpJcFAzSVlOSytCbUs4Q282LzZZcWoxRWpBc2c2c0I5eTJzcmpML01qQWdEOFQrMnZMNXRqTFdCbkFzQjdPeHp2TFkxakwrCitMNk12TGp2dnBoNHpLMHV5c0w2eU1FZHpxaEt6aVJvek00TnZNcWZ5TWw4eitQcHk0dzZFQUV1ek9HK3ZNOXNIL1hJejlHYXpoL3JOCitOcENDTzc4elBNZXpQTTh6UGRlelBkOHpQdWV6TzdORE9kZEhpRDZDREFTMFFBODBRUmUwUVI4MFFpZTBRaTgwUXdmMEkvU3pHcXN3CitHZWd6UlZlMFJWOTBQbThES3EvekRQY3hGcyt4S3o4eEhvLzA1RUwwZkt5eFJ5L3hIeXR6UjZjMEVZUDBMdy9FNDVJMFRmdXNIdE95CitiUWl4Uzlmd1NtdHpTKzgwRGNQME53dkVUTmUwVWVmc1RSZHpUZ1AxRVBjMFJ3dkVLY3lDVkU4MVZWZTFWVjgxVm1lMVZtODFWM2UxCitWQytCU2N0SGlGS0FLcFMxV1o4MVdxZTFXcTgxVzdlMVc3LytOVnlYTlFXRWRYd1VuUUJrZ0ZmbnRWN3ZOVjkzOVNsc3RJcjZqU05rCitBV0VYdG1FZk5tSW50bUl2Tm1NM3RtTS9ObUg3QUYzRFI0aUt3eGxjTm1abnRtWnZObWQzdG1kL05taUh0bWhmdGpoTTludllkVGRBCit0bXF2Tm11MzltTTdBbUFQaUNxajg3VjZzd1dEOHpqbk5yS2F0bnVjTTIxanF6b0h0aTcvTnJyYXRoUGp0bTRuZDZCU3M4UVNiUUlUCit0N01HdDJ4dk0zUkRxM0hETERRcnQzWXp0eWRiYzNWSGQyemI2RUNnUUJDVXQzbWZOM3FudDNxdk4zdTN0M3UvTjN5WE53VXo3bTBMCit4QXhFQUg3bnQzN3ZOMy8zdDMvL040QUh1SUFQT0g3UEFHKzNCL0dPUW53dk9JTTN1SVBETnd3VDdodnpRaGN6ZGVJS2RYMys4MEpSCitIeldIVC9HQnN3ZEtXemptT3JWd3c3R0lZeTZHSHpkUmR6aUwxMnhTVi9OU24zamlrdmgwLzdTTS8yMktZN2RJdHppTHYzaHpRNDlPCiszM2pjMHJoNG03aVE0L2lIcjRjZDgzaUgrM2gzeC9pUkQzbDRzNnZmUEVNWVhEbVdaN21XYnptWGQ3bVhmem1ZaDdtWVg3a09KTGw2CitoR2cxL0lLYXJ6bWJ0N21idnptY3g3bWN6em1kMTdtYVY0T1pwOGZFamptZjk3bWYvL21ZUDhPVWQrNXdmL2V6WGplM1pyZDJKemQzCitENjEzRy9xdVNuZVI2eStrT3l1aTA2MmlMM3B1TnpxNU9uZWw5NnFrVTNtaGZ6cXRYanJzQXJPbU0zcWV6NGlua3pxdGhqcWhDOFF1Cit1L3FubW5vT28zcXFiL3FxTTFxcjB6cW93bnF1c2pQK1JnODdzUmY3UGZOekp5YzZud0YwUXplN3N6ODd0Qy8wUXlkN3B3OEVCRXkwCitzV2U3dGcrN1JzZHdMaHQ1bEw5dGppdTdURE41ais4NnBsMXh1S010a1lzNnVLKzcyWTQ3cHUrNHVSdTFrenM2bE1PNzJiWjdyRk80Cit2aXN1dXBmSGt0ZDdUZDk3dGVmN3Ywc3R2d2Y3UUVSMVh6ODh4RWU4Vm9NMXRaLzZRRlJBWEdlOHhtODh4OE4xQlFROGVkZzFYa3M4Cit5WmY4dy8rMXQ3TzBRQXkyYTdlOHk3ODhZMHQyeGQvNlFGajJhTjg4enVlOHpvZDJhYy84ZnFBMnpBZTkwTHM4YktlOFQ4dTZyOHVxCityUU13Y3VmNk9ITzY1VDU2MGxjcXNGY3JkVSs5cFM2OWhXYTYwd3N6MUE5dnIyTTkxUTg2d3lPOTJHYzl5STlIKzNiK3ZkZW52WGo0Cis5dGxMYXRXWHI5LzR3Z0hjUGQ3bnZkN3ZQZC8zdmQvL1BlQUh2dURmUFRhNGZYaUVhRFlnZ2VJdlB1TTN2dU0vUHVSSHZ1UlBQdVZYCit2dUpuZytHREIvRU9QdWQzdnVkLy91RDdBdGxidlkwbi9OTEt1OFd2T01IYmUrWi9SNGliZnRxT1B0MlhQdXdqTGVyVHZPcXZQazBiCitmTlFqZk8wajdjS1QvcnYvL3RIZVB0UG52dTZQTk8rRFBaQVQvOUlHLyt3UHYvT3JyUEZ2UGIwbi94MHYvOCtyKy9RenJld2pzZDhrCitBdWlQUC9tWFArQVh2czliLzBCb2crVzN2L3UvUC94WHZqYTB2bmRNclBuZlAvNlhmeUo4LzM3TWR0ejdLa0R3RW5nUHdEMkJCeEVtCitWTGlRWVVPSER5RkdmRWpRb01BcVV6Qm0xTGora1dOSGp4OUJoaFE1RW1PVmd4UWxwbFM1a21WTGdTa0FuTVJYaW1aTm16ZHg1dFM1CitrMmRQbno5cGVqb0kwMlZSbzBkZEFraHgwQk5RcDAraFJ2MTU2V1JCcEZleFlrVnBrV1JYcjEvQmpqUTUwR3BXczJkVkVoMDRVMnBiCit0Mjk1Q24wWkUyMWR1eENWTW9XN2w2OWJxbVFyM2hWc2R5dXZpMkVSSjFZTWNpeXZ3b01oWjFYcm1HMWZ5NWZqRHFVYm1mUFp2QUlkCitaUkU5bW5ScDA2ZFJwMWE5bW5WcjBUNnFCdTQ4dTJWaGNXZHc1OWE5bTNkdjM3K0JCeGMrSExlNDJMU1JzNXdzb0p0cjU4K2hSMi90CitTSE55NnkwLzh6bzFpM3QzNzkvQmh4Yy9ubng1OCtlNUx6bCtuWDNEd2hWVXhaYy9uMzU5Ky9meDU5ZS9uMy8rL0FycjJ3c1FvZVV5CitRTS9BQXhGTThMeFRxaFBRUVlXeWM4Q2RDU21zME1JTE1jeFF3dzA1N05ERENWOEE4TUgyQ2lPbWx4TlJURkhGRlZsczBjVVhZWXhSCit4aE9KRVhIRTZ5YTdaNVlQZWV6Unh4ODlkS0RCR3grTUVNZ2prVXlTd3hBQkk1TEVzbmd4Y2NZcHFhelN5aGhyYk5KSkhEZlRVY2t2Cit3VVJTeUxtMmRORElNTkZNYzBrYnkreXN4Q3ZoakZOT0dMTjBETW8yWjh0eFJ6WDU3SFBDTVhtWkRFL3JzanZraFVNUlRWVFJSUmx0CisxTkZISVkxVTBrTU5ZWFBRd1FyTEpwTk5PZTNVMDA5QkRWWFVVVWt0MWRSTnM3SDAwcnNtZzJDSlNXR05WZFpaSlQxa3lGVnB5NjRwCit6SGp0bGFhLzdKUU5WOEVLTzJ5eFk1SCtEYXV4eDRabHRjdktmSTJXTDdrQzNheFp6blNWVnR1OWdHWDJXclNLVFZiY2NVVmE5czV2CiswY29SMm0zWmZZcGFRZEVWTE50MjZYV3EyM1BqelNwY2N2bnR0eVJWOHoxSzNYb0o5dWxkYXdPdWE5NkNHY2JwWG1FVFJtcGZmeWxPCisxbHlJSXpacTRJWTVydW5nak8zSzdwa3dTQzdaNUpOUlRsbmxsVmx1MmVXWFNkWUJZSkJYS3F5YVgzRE9XZWVkZWU3WjU1K0JEbHJvCitvWEd1Wm1hYVU1cU1FSmlaYnRycHAyRis1bGFrcnpyVHo2dkRaREpZcW85NmM4NnZ3WWF6VG0rNVRxdkxQYkZPTzBsQTRTMjdLS3ZWCitqdHRIcmNsMk95S3Z3ODViN3hmSHh0ZnVpUFNVVy9BZTJVYjRiNWJnSGx6eERPbjIrM0NIOE41YjhzbisrOGI0OFlZQ1gxeHpEQXUvCitQS21sQkpKdzg5RXBiTnh5enhXS2ZQTFZ3NjRjZGNEUEpsMzJ6bDlYS2JzbWxNbGQ5OTE1NzkzMzM0RVBYdmpoaWRmOTZOb0xFMEdLCis1Wmx2M3Zubm9ZOWUrdW1wcjk3NjVVVTQvdlhKcmluZSsrL0JENy80SnFhdS9hSHN6RitvN3ZTM1psOTl4OWx2MjMweTUzY0kvZnJiCit4MTlML2ZQWFgvNzUvNmUvKzlWdmZla3JvUGtPV0xzQXhzOXcvT01GQU1CaERBbE9rSUlWdE9BRk1aaEJEVzZRZ3gzVUlCWGdaMEFBCitVTUdESlRUaENWR1lRZ21DOEhUcGc0a0tZUmhER1pvUUhBM2szd3h4bUVNZFRsQU5EdVNGR25ZWVJDR2lzSWNPdE1BUWtaakVEUHFRCitpVTEwNGhPaEdFVXBUcEdLVmJUKzRoV3htRVV0YnBHTFhmVGlGOEVZUmpHT2tZeGxOT01aMFpoR05hNlJqVzEwNHh2aEdFYzV6cEdPCitkYlRqSGZHWVJ6M3VrWTk5OU9NZkFSbElRUTZTa0lVMDVDRVJ5UXNnckFJaDF3QkFFVjl5a0JCQ0RnQ1Z0S1NkQkdKSlRXWlNXQVN4CitKRGo4UU1sTUdnTWhCSG1nSml0SlNsUldNcE9hQkNWWkdBS0VSeWJrSHNhb0pCQ0s2RWxOR2tTWEVBd2xRMkN5eW52MDhwVUtVUU1qCit6OWZDaEZobGtpc3B5Qk9NOFlSRVR2TXVmcWdEUWlZQmpnRnQ1bHhQV0VVZFJnakoxQm5PbEEvRTJMbkt5UXNMMU9HWDcydmxKS3FDCitrRHY1RFVvcHFJTTAwNG1RSjFRU2RBSlJBd0RnK1FSNzRyT0I2VnhuT3htU3ozVENSSm9KTVliK09JRjVqWlJZSlFVU3pZcFZMSUJNCithbTdVTE93OENCWDZlUTl3U2xKWXE2Q0NSTC9aMEhHdTFKd0xRYWUxVXFETmhOSUZBTWE0Snl4SktzOXp5c1lxK1R4SU5yT0pFR1AwCitreGRVc0FBbVdmb1NtYnJIV3ZrOGx4cVdlbEZsSnNVZ1Q2aURSVG1hMWFPc0FwbjdMT0lUd0RFSmJnb3JCWUZ4bkUrUlNzOU9Xc3VSCitXS1VsVGU5QkJTRGdsSk02ZFNsUGU0aldvbFowbHJ6d0trTFVJRkc5NXJPdG9veW5KTjBhS05BWnd3STFOQ29JNjNCVXE2Z0JzcUNqCitMRC9yYXBVbnlES3lwRlJEQ3V6NUdXOVdjaFhTSEcwZFlGS1JWY0JUcTYxMWlUVUZZZ0VxREtXc1kyVnFZZzliU3JqZTlhM0x0Rnc1CitDL0xQVURxVnB6c2RDakwrMGVySUhvS1VycjFOYWwyWnFsdmFLc1FZckIwaFN2Tml6NWFpbGhmWHFJTkJxdnREWmhyRUtzWUF3aE9lCitBRUxIMUlHUmZwaWxNVXE3V1ViRzlCcWpyY2drU09sYS9hN0VvMEJnYlZ5UjJ0S0ZySk8xNzl0bFdsR1ozNWY2ZHFaMUhTaHg1Wm5nCitWbW9TZEdpZHhHeDVNWWxyQnZpdHFHeXVnQnRjRlZRZTFhNFAvR1U1VFdrVjl1SzJ1K00xWjJFeFNaQ0dGc1NSRGYwbkx5SXJFRWRXCitSSy83OWZGQ1VsQmFBRWpVcXJ5MExTM0JBWTRXb2hXNHhwWHVRV0RNMHJKUVlSVVF6aW1FQW1PQklYTllJQ0RVWkNpVlc4cWpEcGF0CitXNDV1YnIyNTRTdVhCY1V4c2NvMVZnR09PdUJTblZRQWh5ekptK2QwT2pMQUJla2xLNkgreEdZYi9walEvb3dzaHYrY0YzVFdvY0JuCitmckphbmF2VU01ZmxuNEthcDVQcjZ0TW9VMWtnUTBVSUVKWkM1Z0ZGMVoyNTVYSlpCQTNMT3dtMER2OHNvb3VEYTJaVHBwUEdoZ01ICitpWGM4RURVWG10Y0lTWEtqNlhvdUtnQTd4SS9HTkYwUE91bkFCTFBFMEdWd1RuMmFBZ3dMUk1Oa21ZUTBOU3pZZ200bTJZYWxxemZuCitLbFRyOHBndUtUWUlkd01GRGxkbkdBQ2hkTEY1MGF0ZVdvTTN2cXNnSlgzdCs1TDg5cHJmMWNJdHJUMHN6R0lmZHBYTTlEQXhFU3BsCisyYWozeWhNKzhKM0FFV3BVeHJUUmpqeXhsK2xzcDRscnZKTEY5RGJIYjZuU2x5QXoxWmkwaWg4dzNzUFFEaFdnTG9ZbUJGY1JrM243CitWWllBT085Y2xKTCtnaUw2dDk4OTk3bERya0hxdXR5am9TSkZpbFZGL25PbC83ektnNGs0elRWYUZOQXVuZW9yT2FJRlNTd1lJRnFRCitxRnk3ZWdXejNwSnJkQjB0UUNSdDBsc1M5YXF2bmUxdGQvdmI0UjUzdWMrZDduVzMrOTN4bm5lOUYxS0pmZmQ3MlBHM2RiOFBYb2dRCityWi9nQ1o5NEhFSVJnb3AzUEF3SE9EK0NrUER4bFM4aEMzMDRlY3R2bm9NMVpEelo2eGQ1OXlYd2RhUkhuZWs5dDhEUWczNStvbWNmCis2aThIKzhmSi9uQ3FiejNyM2VkNkVVNjE5TTNzUGU5UlovdmM5MU1TcnpEKzhaR2ZmT1V2bi9uTmQvN3pvUi85NDJOVjl3aUVFaWF3CituMzN0YjUvNzNmZis5OEVmZnZHUFgvdmFPejJVcEo5KzlhK2YvZEsvUWZrY21KMytZbFNNL3NjQ2cxbHh2M3U5ZEt4ajFLTDkzd3FECitEZXB2QUJHak1ZU1BmZVNQQUJYUUsrNVBrdkxQK2dKalYvaXZZZnpQOTg0dk1BUndBVFV3SkF4dzBQQW5BVGN3QkR1aUFUUHBBWkVICitTaVJ3QWd1bUFvSFBjd0pRQkdGUUl6cnc4dzVpL21Jd0JrbndnVXp3OS9aUEJWZlEvRndRU2pMd0JrVndCcDhvTzdxZ0I1UndDWm13CitDWjN3Q2FFd0NxVndDcW13Q3BlUUVCd3c4NkRrQXRxaEM3M3dDOEV3RE1Wd0RNbXdETTN3RE5Hd0N5OEFDR01QU3BEQkN1RXdEdVZ3CitEcXVRRXVDUGY3SWpIMlNIZEdZQi83UXdNS1NFZFFUeGExekhnUXJqQmZad2RHakhpZkl3RVRlbkQ3UFFFS0VrRUFleEVxK2tFUG5uCitFQjFSY3hiK3NZa2FjUk1WQnhKTDhBOFBnaEl0OFJSbkJCUDFSeE5CY1hBNmtZaytzUlhsUmhSMWtCUUZ3aFJSTVJkZFJCWHhoeFZsCitNVzVlMFlleUl3OUVvUmlOOFJpUk1SbVZjUm1ac1JtZDhSbWhzUmdGQVFJaU1ST2hwQUNBSVJ1MWNSdTVzUnU5OFJ2Qk1SekZjUnpKCitNUnNMZ0ExbkQwbzBJQnJac1IzZDhSMmhVUVB1VUlENnlRYUpNQVJ6c1BwT01BSjlrR0ZZMEJaNVlRanZVUU9Oa0JIcmNTRHgwUThsCitrUi83a1dEK2NTRVBRaUFSa2dBTDBoTVBjaUlYTUI5MzhBSjdzQ0hiNVNHdEVRTXhjZ0VyRWhiN2FRT0lJeVZWY2lWWmNqamdRQUNxCitjUldoQkJTa295WnQ4aVpYQXhUUThYQUs0dzVhOGllQk1paUR3empveHlEK0Q2SVNGQ1FwbFhJcHl5TURZSElVSVZJZ0tLQS9xTElxCityZklxK1lNQ2RoSUFvV1FKbVBJcndWSXBHV0FlUDdDZjlQQVg0NFlXOVpFSGIxRVgzWkp2dHRKdWZCRXRzU1lZNDg4czZWSnQxSElqCitneEFRMy9JdlY0UVhDUWhLRURFdjY1SXNWKzhnenRJdy9XUXZBUklYQWRNdEJWUHlDSk14cjhZdThiQ2Z1cUFET0xNelBmTXpRVE0wCitSWE0wU2JNMFRmTTBPVE1YcUJFcVEvSWdlR0FjWURNMlpYTTJhYk0yYmZNMmNUTTNkWE0zWVpNSDR0SnRDb01UVUhNNGliTTRqZk0wCiszUUF4YjY4R1IxSUJOUklnVTlBanR3VWtaVklrbTNNQVMxSVlML0k2NmU4NW81SVhvbE02cFlVNmUxRUl1YlArc3ZNdW1mTThLOFk3CitXMVArSU1KVFBIMkZQQWZUT3RuVFg5SXpNOWZ6UHZ2RlBhdXpJK1V6V3VpVE11MlRQOGtsUCtueElJYmdPQm0wUVIzVU5MR1FOZjlUCitJS0NCTnkzMFFqRTBRM2NUR242emJBb2pGeDQwUkVXMFFabEFPWWRQTVMyek1SWHlQYU1rTWwxME1rZXZNbE9VVHpBelFRVmlNV2NVCitUUnp6T3lIVFJWRVJSbDlQUm5NVVRXcTBMRkYwU0hWMFJTZTBSWDMwTDRGVS93U2lNSkVVVElvME1XOTBTc05rUjFtMFI1dTBFcDhVCitBZzlDU3JGMGJVd1VBZnRwRHlRZ1RkVjBUZG0wVGQzMFRlRTBUdVYwVHVrMFRSRmhOV3Z4TzNWaEJmaTBULzMwVHdFMVVBVjFVQW0xCitVQTMxVVBsVUZ6cVVhd3BERWVyMFVTRTFVaVdWVHVXeEtDMXlQdzMrZEZ6OHN6d1pNa0RIYzFHcDVnVXo5VURMTkgxQWNGVEZaVlByCitFMEE5bFZjR05FWUxGRldQQlVHTlZDRHNVVmJ0VDBrNWxWVmI5VEplTlVoakZWY1RnMWF0bEJmUWRGS1JOVm1WTlU3dk5DWjNWU0QyCitGRkdsZFZxcHRWb05WVkgzWjBrZGRWbTV0VnVSdFZLcmhRYXZkRXlWUkV1WGxFdTdWQkMvZEIvRGxGeVZwRXFYYzF6ZDlVak05Vm1aCitORjF6Y1YzWmtoZkVkRjU5QkY1UFZGNzkxVWZxZFZYYkVsL3pGVlNSWmk0SGxrY0Exa3lQdEdGN3BHQUp0QlFSTm1HejFWNzdWV0k3Cis1R0ZOdFo4V2RFUkZkbVFoMUZrTmxoY3FWRU5WZG1WWkZqYzVOR05QRmtSSmRtWnBsak5MMUZKTkVsT0ZOVEZVdFdMaHMxY0ZWR0grCithVVpVZDFZeGlEVmVlZUZXaXpZc2VoWldlUlZvcDBWb1FZWm9sMVpaU3RWOFRyVnF3YUpwZ2ZWcG9SWXVmaFZLQTFKckMvQnFheWRyCit5YllydUZaczQvTnJ3VlpxTTRacTA1WWtqalpnZWVFY1lpRnY5WFp2K2Jadi9mWnZBVGR3Qlhkd0NUZHZ5UUJQMTVJakJZSUhrcUJ4CitIZmR4SVRkeUpYZHlLYmR5TGZkeU1iZHhmUk5tZlpZWDJLRndRVGQwUlhkMENUYzVjVlk3STVaalBZUmluZlpnTDlZUzlWVngrVlYxCitIZFpzWHljV2FaZERXTGRyWGZkMUJ6RjIrN0pkYzdkamJSZDFjSGQ0TTJSM3hSWmRmVGR2Z0xjTkEyTmprZGRDUEJacit3a3B3eko3Cit0YmNwbnpKUFdYUXFzVEo4eFhkODgwTXJPYmQxZWNFcnQzZitmZG1YTzhieWROVlRJRkJTS09tM2ZuL3lKVTIyYzJrU0ovbTNmMnRTCitKOCtYZDNuQkorMjNnQTE0S0l2WGM5QjJia1ZpYmNIMFo5M1dWK0UyWXVTV2dUa3dnUzluZ1MzNEl4eVlYU0U0Z3ZzaWJCOTRiRGRZCitMREQ0Y1RTNGhEbWlnL2UxYlVGWUtrVFlnMGxZaFJuamhBOW5HT0V4aDNWNGg1MXhHdk1YZmJHeEhJVjRpSW00aU1meEhBTlliTmVSCitoNW00aVhNWVhBL3dZMU4zZWk5RWVVZVllWnNYYko0M0hhT1hpaldrZXM4V0w3MFlRNnhZaHJFNGkrZGtpM2xTU01lNFFzRDRkc1c0CitqU3VralBmMWpORTRUdFNZSzd0WWp0M1lodi9tZU9XWWptWFhqdS80RWljNFlSaFdqdC9ZZURXVERoMzVrU0daQ2lQVWU1ZitsQXZUCis4Skl4T1pNMStRelhNSWxIK0Ewak9aUkYyWkh0RUg3MTAxWnBPQ1JZV0haZCtJV2hJb2IzVlNKVGVTUHFGbUpSZVpZOVlwV0Q5NE5kCisrUzFnV1habEdaZi94WlJ0TkdtRmVRUjE5V1JidVplQjRwZDNlWWFQT1NOcVdZcHZPWm96UXBlaDEydVp1WmtQT1dBcStKaW4yWG9QCitBbTlKdDV6Titad0Q5M0IvV0lBWk4zUGQrWjNoT1o0dmQzUDd4MTQvRjUzeE9aL0wyWFREOVFqam1JL2RRWkNmbVpBTHVVcnlXQzdaCittSThYV1lIL21ZOEZPcHQ3dDZDZHQ1dnpKWkhiZUtFenVLRURPWms3bDZBbE9oVXBPbDRzZW93eEdvWDdhUkRhTjZXMTF5blhXV3dOCitnSHhoT3FiRjF3QkNHbDBLUTMxVk9xZVhjZ2Y4Mkc3K3NtTitEemlvaGZvTThGZEM3WFYvL1RlcGxWbzFBTGllVDVhQWh6cXE3WmNvCisrOWtvcTltYXB3Q2J1VmlidDlsZ2F2cGJ2bG1Zd3ptTWRUYWF0WHFOTzdXcm84S1pJUnFhclhtczRiaXNqL21zOVppcjFYb24ySHFyCitCU0tZeGJxbjNRWUpQU0N3Qlh1d0NidXdEZnV3RVR1eEZYdXhHVnV3RVpjdjI1b1pZR0N5S2J1eUxmdXlNVHV6Tlh1ek9idXpQWHV5CittZUdycjZVd2hLQ3hUZnUwVVR1MUdSc1EvTHBzQUxtTkgxcXY3L1dqVzBlMG0yV2t2YmlrYjFpalladWowZGVqYVp0T2JIdFljSnVLCitkZnVQZVh1TVl4dXRMVGE0YTl1VFpWaDZTYnExdWVhMWxkdTNCUmk0bmJ0RkRobzRFMXFScVp0cXNrTVo4cUc4emZ2K3ZORTd2ZFY3Cit2ZG03dmQzN3ZlSGJ2Q0VwY1ovWkJWcmd2dkU3di9WN3YvbTd2LzM3dndFOHdBWDh2bDFndUhHbE1Db2h2aFY4d1JtOHdlRTdDc0liCithZWlib1FGeVNTMGNmNkpZbkZIM095LzhaUDNIQTR2MWxGbTB3enYzd3hrdmdqZ3Z4VEZvd3RPUjhsVDh4VmZJQW9QUXhXRmN4VDN2CitpV284eHlVSThBNVB4M1BjOE9ZSDhYdzh4ZmV1eUkzOHlKRTh5WlY4eVptOHlaMzh5YUU4eXFWOHlxbTh5cTM4eXJFOHk3Vjh5N204Cit5NzM4eThFOHpNVjh6TW04ek0zOHpORWNJbkxzSU5aSm55b014TzFId29CTHpzbkpsUkl1SVZnTkFOaHJ4bFlKeXI0SmdsSUE3VVRNCitrb0RnR2hLTnhkUDh5MU1nM0FSaWtiYnB3MzcrcU9adWppSHdwY21lQzlrOGlpRk1TcUt1QVFnVURHTzhheFVraXJLbUxhbXVnWVNhCitMZEZWSGJBQW9LSDJxWjJzcWR4c0xiNVFuZEloeHRJanpkUmlxaUdnSk16OHhyejBLYXdHenIxU2ZkV04vZFlFQXJaMDdOWmtuYnFLCitidEFxZmJkeXZibWlMQ0gyL0NTa0NWLytDcHRLL2NtU2ZkOUF6TmlOZmRFRlloWDZxYnJhekNGMjNkWVY3dEpQelhMV2FZUjBydUZNCitEZExwYXV4RVRzYkZIY3ovU1pwYTdTWG1LdDBYZ3RWT3A4OFJqTUs0N04waFI5b0FnT1RvM04zSllzU0tmZDhUM2FqOFFLWkVpcURzCitYY09NZ2NYb0hhZWkvYm1xdlNIY3E0ZTB2YTkrU3VpKzdac21udUxSZkJJV0NYU0NhWmZRS3FhbUt1VERIZEwrODJuZFhTcmY4MndoCitnTDNUN3VIcFNxMjU5TjNsdTl5UjFJMmxmR3JiazZuZHB6M0F1ZzNvTzk2dlRNclpHbW5GMk8ybWloN2NXaDdwemR6T1N1M1BqQ0hSCitlUDNXYWFyUHlSN2tQRzdnLzF6clR3bVZLZ0xPd0ttbWtOM0FDTjNud1g3djlVY05pSTN2QVQvd0JmK09VdUNDZ1B3c3ZvNkNlTHdvCitNR2p3SGYveElUL3lKWC95S2IveUxmL3lNVC96Tlo4elFLdnpQZi96UVQvMFJYLzBTYi8wVGYvMFViK2lmR2pzVXIvMVhmLzFZUi8yCitQZjcxWXIvMmJmLzJZWi94Q203M2ViLzNmZi8zZ1QvNGhWL3V0WEQ0amYvNGtULzVnNzhGTDJmbWxmLzVvVC82ZjE5Y1I5eGVTZHg5CitNcno1NGR4dXIxK0F1OStGdG45N3dwLyttcXZmdzYwZnc4Yy85ZEtmckFWaUFzcmgvZUUvL3VWLy91bS8vdTMvL3ZFLy8vVWYvZzE4CitWUW9qRWdCQ21zQ0JCQXNhUElnd29jS0ZEQnNLak1RcjRqMEE5eUphdklneG84YU5IRHQ2L0FqU1l3b0FGcCtVTzRreXBjcVZMRnU2CitmQWt6cGt5VUV5eU9ESWt6cDg2ZFBEVUNTR0hSd2F5aFJJc2FQWW8wcWRLbFRKczZIYnJFNHNTS1BhdGF2UnB5cWtWdXFycDYvUW8yCityTml4Wk11YVBZdTJLemVwRkxHNmZmdjJwc1FNVCt2YXZZdlhxUU9iSk9INi9WdjFaMUIzaEFzYlBvdzRzZUxGakJzN2ZrejRCVnVxCitnQ3RienFnMUlyRmVuRHQ3L2d3NnRPalJwRXViUHMyWjJPVExyRm5MNVhWdkZ1VFp0R3ZiZnJ3MzR1disxcnd0QzQ3bzRMYnc0Y1FiCitTNWJZdHJkeXQ1bDViVVlOUGJyMDZhWlZJNmU4UER2UDE3R0xlLzgrUERldjNkckw4L3pOS3pqNDlleU5yellQSDJUejU5VHIyNzgvCisyanJzNVBIN2IrUXVXM3NDRGtpWWVPVDVoMkJHNk8xZ1NvTU9QZ2hoaEJKT1NHR0ZGbDZJWVlNSXZKZGdoODNWczB1SUlvNUlZb2ttCitub2hpaWlxdXlHS0k5WERZSVlLdkVaSmhqVGJlaUdPR08vQVZZNDhXb2FjZWdVS0NkOXgrMlBrSTMzejRMY21rZmZvMWh5UjhBQTVKCitwWGNHOWhWbGdrQld5YVZ3UlVLWnBYWktOa2xtbWFVOXlWK1kyazNaWlp1elhha21nbHU2U2FkNzE4VlozcGhtN3NsbkwyZ2VpU2R2CitiTlpKS0dKd0JncmZuSVV1R2huK2pJaTJwbWVma2pMNTU2UEtEY3Bvb1lkYW1oMTZ3dVFJYXFpaVdzaUpvNXhXMXB3c2k2ekthcXV1Cit2Z3ByckxMT1NtdXR0cTRxaTZtbi92VWFCQWlNQ215d29RckQ0NjdLS1pvcG9WK21hZXhma1U0S2JYMlZObHNacHNuU3VTbTFseUY3CityWnZMQXFvdFZzOUdTeTUwMDRZTGw3WGRkcGt0dW45eHV5NlgzN29MMTdqbDNrdmF1ZlJlcFc2OFZMYTdyMXZvblpKWHdRWWZ6RlJVCitkd1o4VlhOeHlBRnh4QkpQVEhIRkZsK01jY1lhYnd4eEhMb3luTk5yQXRDRmNNa21GM3hLc1NBTERGUkVscndCYzh3eXoweHp6VGJmCitqSFBPT3U4TXN5WWZyeXdmZnhTa1JYVFJSaCtORmdVL0F5MFNsZ0xRdzNQVVVrOU45YzZXcU16K2RHQXRwK2V2dDB0bnZaRzkrSTc5CittYjVnZzlSdjF3UUNmRFpPOEtwTjRMeHRaOFVmZldUZlhmYlhjNnZjSGR4VnNyMjNSMi83M1o3Y2dYY2tOdDVqbTMxNFJta1R2aDdnCitqZnUwZFJGbVhJNTU1cHB2em5ubm5uOE9ldWlpWDg2TzNvRTM5MGdBcXEvT2V1dXV2dzU3N0xMUFRudnRxajlpK3Q2OWNqRjY3NzcvCitEcnpvUldBOWVVZURRMDVrN25NbnJ2aTlqQmV2RzVaOUl6K2c1TkQvdUhXUTFCZXVmTnZNTjAvdTg5QS92ajF4MWwvUHkvSGxEMmM0CisrZ3M3QjM3ejRoZFAvdnEzblgrOSt2YmIxcjc3MzhjL3FmbE5ybjc3b3czK29JY2VFc3hoZ1F4c29BTWZDTUVJU25DQ0ZLeWdCUmRvCitqKzZkclRsWW1JWUhQd2ord2hDS2NJUWtMS0VKVDRqQ0ZIb1FDeG9FMjR3dUNNTVl5bkNHRnlRQjhkeDNFZjBWY0RiOVE5Ly9BTmduCitBVGFPZ0R2RXpRMXhHQkVkRnRFeFBiemVENEc0SnlFZWpvaExaTXdCaTZmRUtpNm1pZEI3SWhUTEpNWEFVVkdMaWJuaTVMSklSc1J3CitzWGhlL0dLVHdxZzc2UVVvamJVeFkrUFFBNFZnNkhHUGZPeWpILzhJeUVBS2NwQ0VMS1FlUjlEQ3JLWHFDSXhzcENNZkNjbElTbktTCitsS3lrSlMvSnlGeTlENGU5VW9JaFB3bktVSXF5a0ZBNEloTFJTTWZDckhGeWJYVGprdUE0dHpHbXNrQ214Q0VxWjduS3hyWFNsZmVCCitaZHRrT1VzN0h1NldxY3psNFhiSlMya2xrbW5BVEtVd0F6ZXdrMGx6bWsxUm1KR1ErTDcraDNGc205enNwamMxNXJGTnVrOWtKS09tCitPYzg1aTVSRkQ1c0sydHJMcWdiUGVNb1RaejRUcHcrRmhyUjg2bk9mWmxHYVBhOG5NcWpOYzZBRWhlZlYxc25PSEdadmxyUXg1dW5xCitsc3p3TFJOb3phVGpNL2RHVERvNmRHL0lqS2gwZkhtMmlxYnhvblBMYUJvM3VqeUllalNBRTEyWlNNbEkwcmFoSnhFbXFLbE5iNHJUCituT3AwcHp6dHFVOS9DdFNhbHVxZlhlUVBDOEtCMUtRcWRhbE1iYXBUbndyVnFFcDFxa2hsUVV0QjFxcytCSFdyWE8ycVY0R2FpRnE2CitEejJlS0lWWno0cld0S3Axcld4dHExdmZDdGU0bXZVU1YyVlljNm93aGJ6cWRhOTg3YXRmL3dyWXdBcDJzSVROYXhYcUdqRHU0RU91CitqRzJzWXg4YlYwLytpQlY5WklXc1pTK0wyYmZTbGFoczVBOWVDd3ZhMElwMnRJTTlMR2NIS0wzRlpuYTFyTFdzWkJHYTBDUnVyYXl0CityYTF0Tll2WWZkMlZ0THp0clc4RmE5cHJZbE94dHkydWNjLzYydkZnS2JhVlBhNXphN3RaNFNKeHQ3K3RyblY1RzF3d29ZKzR6KzF1CitacE43SUd5aWh4RWdLSzk1ejR2ZTlLcDN2ZXh0cjN2ZkM5L3lMaU8zOUdxT090S0IzL3pxZDcvODdhOS8vd3ZnQUF0NHdQaFZCMzNkCitOYVA0S25qQkRHNXdmQmt4MmZ6TjFyc1V0bXgwdGV0RXoxNTN3eHd1N1lIUnhkMEtpMWl1NEYxdVFwczc0aFM3OWNMTXVpZGxQdHZoCitHTXQ0Q3RsdE1VQlRxK0ljczdYRXNjV2VSV2lyNHlEUDljUGhvdTZNajN6ZEdvUCthM3c0RnJLUWVkemo5RTNZeVVGbThaSTcrMklrCithN202U21abmlLbXNZaWozR0QwSm1JZVp6NHptTkt0NXpXeHVzNXZmRE9jNG14a0hSTlpXYyt5QWh6enJlYzk4N3JPZi93em9RQXQ2CiswSVRPc3gzcVRLMWVwVUxPakc2MG94OGQ1d1JFR0lGVEJyT0tyY3hPSTI5NTA2THQ4bkNiYk9rVWk1bTVsUTYxaURHTlRVMXpldFVlCitQdTBRUVczcUNvLzZ4S1dPdFhkUlBWME5zM3JYd0VWMHM3NXM2KzdPbXAxa2hyU3hqNDNzTjlQWjFjZmtUenpZQU8xb1MzdmExSzYyCit0YStON1d4cmU5dlFqb2V2amFYb1pJdDczTWVXTkd4Si9lTmdWeGpYT0ZRMXI5K3RWMDhqRWRqcVB1Nnd4VnZyZWh1WDNmN1ROYnovCitiZGh2NzRyKzN2cSs3YjFQbWUrQzI1YmZMcllJakFFT2IzbHpFdFlLTi9pa3Naandpck9XNFJuT01zVC9MZkZ4VWx6anJUMjRMYmRHCitYZ2VyZk9Vc2IrOThtZjFReXFBakRUU3Z1YzF2anZPYzYzem5QTys1ejM5T2MzUUkvRlFKYnJuUmo3NXlDSitiMXVrbStXMDVYbFNQCitmL3pkSWQvdXlKMyszWXVmTWVOWXQvRFFPZVh1cVhPNjZqZVdpbXE3emxxVGo1WHJhSGNzMUxIc2NMRlQvZXVXSW5qYkg2dDJ5ckw5Cis3bko5T3l2OUxmZFZrNTNKWnVkNzFwZE83SzF4Z0FDTWI3empIdy81eUV0KzhwU3Z2T1V2ei9oYTBQMVJ6WGtIT2o0UCt0Q0xmdlNrCitMNzNwVDQvNjFLdis4Ky9ZUEtKNjlRZk15MzcydEsvOTVUbWc5VHZ1M2ZEK3VJVTVSd0VmK0UwUG5uNVg1ejJKY3ovTTNSdWZyWDdYCitKZkNEcitYaG83Ynd5OGM3OHFHcC9PcW50Zm5ObGpyMHR5ejlWMU5mKzR6TnU0UXRvZ0I4cUgvOTdHKy8rOThQLy9qTGYvNzByNy82CitDK0g2UURYSEcyRG92Ly8vRDRBQktJQURTSUFGYUlBSGlJRDk1dzM1aHljaXd3cjJCNEVSS0lFVFdIOEtjSDBZdFRXT2tBVWJ5SUVkCis2SUVmQ0lJaEtJSWpTSUlsYUlJYjZBTU1HQ2ZOSVE1bjRJSXZDSU14S0lNelNJTTFhSU0zaUlNNTZJTGlvSUpxSWpMZGNJSkJLSVJECitTSVFtNkFnWFdGTFpSMzVENW5zcDVYM2ZoMlRoTjBYRnQ0UnJaWDZVMW5SVkNGZmNGM054QjRYZzE0TmhZbmRhbUZaWGlIRlpTSVp0Cit4WVgrdi9lRVh5aGpVaWhHVkppR1ptV0dXMmNSdzlBR2VhaUhlOGlIZmVpSGZ3aUlnU2lJZzBpSWVVZ0hZWmdselFFUFpjQ0lqZWlJCitqd2lKa1NpSmswaUpsV2lKbDhpSThJQ0lVZElyRDFDSW53aUtvU2lLaERnTVNDaFRTcmlFYStpRVh1aUdSd2FIY1RSK2MyaUZwbmcyCitLQ2FMYXFXSzN2TjhyY2hocnhoTGNqaUhkYWg3YUhpTGFKV0xHN1NMdkpoa200Z2tZeWlMd3BoOHhGaU1UQ2hkN1phTXlzaGx6T2dqCit6aGlNdEFnMjZQRUJrQ0NPNDBpTzVXaU81NGlPNmFpTzY4aU83U2lPR0tDTlBkSWNSbEFNOVdpUDk0aVArYWlQKzhpUC9laVAvd2lRCis5V2dFOFJnanI2RUc3b2lRQ2FtUUMrbU9IK0NOV1lNZTFuaGxmemVUa2M1WGtWT1lVT0dGY0psbVkxSEhrUmNaaHhscFlvbjNrU1daCithaDFKZkNJWlplbGpEQ25na2k4Smt6RXBrek5Ka3pWcGt6ZUpremxwazZ1QWtuKzNDam9KbEVFcGxFTkpsQzdKa3lBWlIwV3BsRXZKCitsRUZwRENNcFhnQWdsVk5KbFZWcGxWZUpsVm1wbFZ2SmxWM1psVWlaVWw0cGxtTkpsbVZwbGxVSmxyOTBsbXZKbG0xcGxpc0psM0VwCitsM081TndFQkFEcz0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9maWVsZHNlcV90Yi5naWYuYjY0IGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL2ZpZWxkc2VxX3RiLmdpZi5iNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0YzE3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS9maWVsZHNlcV90Yi5naWYuYjY0CkBAIC0wLDAgKzEsNDQ1IEBACitSMGxHT0RsaGRRS2FBdWNBQUFBQUFFbEpESyt2cjFZTURCVVZaQzhrRFFBQVZrWVFFQmNIT3dZR1NDRUpIU0FnYUtPam95czhERE16CitDZ0FZR3ArZm4xOWZGSm1abVFvS08xMHdNQTBWSUFBQWNEc0lDQ3NNREFjTVQxTU1EMlptQUFjU08yOUlTRlVIQnlJQUdvaUlBQTRICitUMHBLREphRmhYZDNkMEVnQUJvYVZHWXlBQzRBS1hkM09EczdCd0FBTjFNQUtRQUFZbFpHQjJKbERCd2NXV0J0WUNBM0FCQVFUUUFBCitaUTBWUUQ0QUFGVlZWVWhqU0NRTUpRQUFmQk1ITWtRZ0lFdExTekF5REQ1VlBtWm1ERVpSQjJGaEVXWmlERm8yRVRrZEN3QUFWRVV0CitHdTd1N2pzN096YzNOM2QzV0FDUEFEVTFOVE16TXlCUklEZ0FBRUpDRUhFQUFFd05EWmVYQUFCcEFFUUZCU01qSXhnTlFEb29DQkE5CitFRWhJYndCVkFBdy9EQXdNUGdCTkFFTkRDZ2M5Qjh6TXpBQkRBRDRNREF3T0tqd0tDa1FXS1VzY0hBQUFjVXRMRlJNVEV3b2hDb3FLCitBQTBOVEJFUkVRZ2ZDQlVxSWdBcEFESUFBQTRVTHpnK0RFRWZIM3dBQUFjSFNhcXFxbGtjSERnTURLU2twRlFBQUJVVlJqRXdDR1ptCitCMDBRRURBd1hTVU1KR1VBQUphV2xoUVVVbng4alZRYUdnY0dMZ2dTR3k4R0JtdzRPR05BTDRxS2lvaUlpR0lBQUVzSEIzSllXSGQzCitBQUFBUGxjdExZUXlBR2dnSUJnQUdrSVZGUXdjSlJnWVNBOE1VOUVBQUFjSFZRQUFMUm9hWWJ1N0FFWTFIMlptWmx4ZEVIQUFBRDgyCitEbGhxV0V4R0hnd09Vek16REFBQW1nQTVLVEVIQjJabVBscGFCLy8vLy8vL0FDSVNSRXhVRFRKUEpVUXJEQXdNVmhJU1NFaElTSGQzCitJQzR4Q2poY09BNE9SRVJFUkJrVlhFbEpBRzVnWUZoWWNudDFaa2dHQmxZQUFBVUZNVGc0T0RvM0JUSnJBRkVTRW1abU1GNWpCd29HCitRMXBhRFVrS0NoeEdITjNkM1J3WVJHWm1IQ2dvS0ZNQUFDWW1KaTRZTGhRK0ZDSWlJaFUwRlQwQUtSNGVIbVZlQncwNERSQXNFQXd1CitEQWMyQndvcUNnQUFQRmRNRFFBQTBXQXFLZ3dpREVnWkdSa1FSQWNrQnhzVFBERXdEQkFRRUR3QUFFSkdEQUFBVTBGQlFFSkNETHU3Cit1MklZR0pvQUFCZ1lSamc0YkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUFBTEFBTEFBQUFBQjFBcG9DCitBQWorQUdFSkhFaXdvTUdEQ0JNcVhNaXdvY09IRUNOS25FaXhvc1dMR0ROcTNNaXhvOGVQSUVPS0hFbXlwTW1US0ZPcVhNbXlwY3VYCitNR09lbEFlZ3BrMEFKRnJTckxoVHBZUTNBSG9lREZwUXFNQ2ZRUUhJWEVoMG9sR0JZa1p0cEdrVFc1NkIwRVlCZlRNS0NVRUpFcWphCis3RHBRRElBYkJKc09KSEYxcWR1M2NPT3FWS3RUS2NXbkVPbm1sUUFMV2s2RWVwOEM0T3UzWVdDN0pVbEFnOVZVTDBLOHZjUk1SVXdDCitnRmRvWEJkRDYrV0U0QTBrUXFFNWtTcXdzdVdCZXBGZzh5cTN0ZXZYc1BQS2c0bjNZVzJIam5IUFpycDdvT0RlaG9IRHVpMnlzZkRICitpS0ZpNDJpVTZBMjBBNUc4NFNzUXJkRThpS2RQUjMxODFLUFk0TVArTnlTQkM0TDRsSFJKQUkwTVN3d0owKytCNW5TdkhxZEFKUFZ2CitMSGIvVTU0WUp6WDk5UlIrUU9uWDNudEtpZEVMQU5pTVlsY2UyREI0Rlg5dkhNZFlUZklRZU5aKzhkbEhrRmc5UVNpaFFFUXB5S0NECitIOXEwRTRYK0FmaEdUaXI2WmhNc2tXR1RVMzNZOEVXZmZGQzVPQitDT05YM1YxQml4VmdmZTdEZ1dGbEI3NjIxbm1STUFqQmRMd2sxCitCdzBTQUVCWjFtS3c1UEhkZFE5YU5ncDBqQjBuUVdmbnBhbm1EVFZOVTU2YUk2bEZnaE9Ma2JBY1RWSmg5eGwyOHVDSkJEUTJKa2tuCitFcU4wSnM4YnZXVFl5M2RtemZiVW5GY1dPaHhYc3pueG1XaEtIZW9vQU5BY21paHJCaEVGS2FHR0F0QVZvSDl4TjF5bUZhNjZHRkgrCitsdjRKWUVGRTdlUnBoaS8yMWVwaEpEcVJSNmZZMU1scW5sbkNraXRtZlpyYTVWbEk4Rm5tczg5Q211Unk2amtLVkVHTGxrYm50RXdHCitDd3VLeUsyVkUzSGZMaGFhcFFLTnVTeHJqcGtGNTBTZzlTbnZ2UFRXYSsrOStPYXI3Nzc4OWxzdlBEY0JzRTBUcWI2N2tWcFdEVlNoCitVTWJSeEtVRXkyM1hWNVlPRndSTnJja1pTOTNGWWxSczFzTktqWkxxRFNSVW5CQlJFbk5zTXNTMGJ2cnR5REQ2eCtsUkdXUHNxa0NaCitwU1ZjVDRNWnRDUk43TTZXczBBTTcwYlUwVWJQbGpETzh1UTRrQVExNzdhMHNjQTVUV0tWQVE4bVZKRUNVYm5xVFovaDNOWWIzMEhiCitzc0VRRlpuMTJteTM3ZmJiY01jdDk5eHhvNjJSV2xrbnEycittVnNyaGJmZVJ6bUJEWnN1Njh4ZFQzM1RHSERKR1ljNjI5K0pHNzdUCitnamZGSExtcXRpS1dGVFp2M0NBWnI5Q0tjUU9pQzY2cTZ1YWRkNHlZY2MreW5yZGF2NUVZTUhBSVl4MmRWbGp1bkduWnRXRjNFNXE1Cis1V2IzUWZINmEvenh5Q2V2L0x3QUIzeEZFb1VNbnhIQ3V1OU41TXl3L0tTeFFDcmJaUmFVTmhPVU1zVjJYUXp5eTBVMWZ2YjRxai84Cit4dGs3aWV5NCtUVERuMm5qQkpwTnRGMU41V3A2MFFRaEVBQmI5N2lrd1FJYndyRmE5cUltRUFRbVJHS01zWjJNYUVTbWRDbUZCRkNxCit6U2hJczZ4WFdVaDQwZ3RoU3RnRUFIWllTa3NpdElpY3R2V0lONEJtZFVuekU2b0VGYWxTUWFWWWp3REFWUjQxS0VrSnBSZitsNXFWCitwaVlGdU9FVWpFU3pHWlVQVGZXblFFbU9WZFlxSUFWbHhjRE1LZXd2ZHRLZjZhQkZ0cjRzNklXcThwK2RCb2cweHJSRlZDeDBZYldHCitFeUZzbFUxYUxmUkt5YWExR0hETk1VVzNRd3RtRE9TWGEzbHRpd0Y4UTF0dzlwMTJxUytGaUN4Sm9UeVh5T2tCcHo1T2tBd1prMVVmCitzbWdvYkVJNVVtVWVNYUQ4ZUVVb1NGalFsSTRTSWFkbHNuRUFFc01sUDRrVG9KRGxpYVJrRUhXSUVrb3BTZUNQU1B3Zll2SUFvTE5JCitKcFVFd2N6N21nSXhCcW1uUWpEc1VpODlOOGxuaVJJV3dJUWtsS1NKeXlSeFVKb2t5Z21oYk1tL0k2b3RiSDNSaWpGcDVKNEpGa1I3CitCSkZVM3JKWHdVYTZVeVNnZW1kZHhIUEVoWkJMbmlqK0FWUkRWRW0wOTdYbUJ0VEJwMEFIT3J4N3VrVWVaWE9JUVFrNmtsRllxQ0JqCitRZ0lTYnNCQnVPaVRvUmpOYUhnV0NpZU9hclFqaFZuSVJHc0N6cmlFNWFNb1RhbEtWOHJTbHJyMHBUQ05xVXhuU3RPYTJ2U21PTTJwCitUbmZLMDU3NjlLZEFEYXBRaDByVW9ocjFxRWhOcWxLWGlwQVJTT0twVUkycVZLZEsxYXBhOWFwWXphcFdvY29sZ3h3aUdHQU5xMWpICitTdGF5bXZXc2FFMnJXdGNhMW9URTRCUndqYXRjNTByWHV0cjFybmpOcTE3M0N0Y1lKRVFZU3dpc1lBZEwyTUlhOXJDSVRheGlGOHZZCit3QW9qSVZ1TnJHUW5TOW10QWdNaDBHQ3JaamZMMmM2eTlSQU9ZVVFuUmt2YTBwcjJ0S2hOcldwWHk5cld1bmEwOUhqKzZBTElRZHZhCisydmEydU0ydGJuZkwyOTc2OXJlMGJVRkNuc0NFNGhyM3VNaE5ybktYeTl6bU92ZTUwQzN1RXhLU2kxaFk5N3JZemE1MnQ4dmQ3bnIzCit1K0FOcjNWemtSQkl2UGE4NkUydmVsMTdpY2VzQXJqd2phOTg1L3ZiQllSMnZmak5yMzVaRzF1RXpKYStBQTZ3Z0hrclhJUVFON29JCitUckNDRi96YzZTS2t1dUtOc0lRblRHSHdraGNoNXQydmhqZU0zL1llUkI3dkhiQ0lSd3hnK3paRXRCeE9zWXI1SzFzU3UvakZ2aTN3CitRUTdNNEJyYitNYk1kZkJCSUZ6aEh2djR4OTI5OEVFeXZPSWlHN2tUSGpZSWlHSE01Q2JYMXNRTVFmR1JwOHpoL2g3a3YwN09Nb2xsCitiQkFhNC9qTFlGNndqZzNDWXlDYitjd1VGckwrUVloTTVUYm5OOGxGQ2JHVzV5eGdLQy9FRGxQSXM1NzN6T2MrKy9uUGdBNjBvQWROCithRDN6QVNGK2NJT2lGODNvUmp2NjBaQ090S1FuVGVsS0s5b0xDZkZHTnpiTjZVNTcrdE9nRHJXb1IwM3FVcHQ2MDk1SVNCU2F3ZXBXCit1L3JWc0k2MXJHZE42MXJiK3Rhc2prSkN6RkRvWHZ2NjE4QW05QjRRd2dkTEcvdll5RTYycGYxd1h6YzdlNzFXTmdpVzZVeHQrWEs1CitJRjRPczdhM3Zkd3hGNlRNYUE2M3VMbXI1b0t3K2Rub2JpMmNQeVRuYXJ1N3ZzMU90N3hYRysyQ1RQdmQrTmJ0dFFtU2JXNzdtOXZlCitKZ2k0eDAzd2NaZWJJT2VldDhKSnUyN2Z0RHZmRUxldG5SVWk1WVZidkJQMUpzaTlJeDd4ZlErazMvOE8rWmYrQXo2UWdSZjg1R1krCisrRUFTZm5GNU41eG9EK2M0eENlZWtJcTNmTjRaSDhqR1pZNXZqd3NFNUNJUE9vTkpMaENUby96b0ZWYTVRRmgrODJlL2ZEZ3g1L203CithWTRRSGd6ZzZsalB1dGEzenZXdWUvM3JZQSs3MksvdURBWWdwQjVlU0x2YTE4NzJ0cnY5N1hDUHU5em5UdmUwSnlJaDV1aUMzdmZPCis5Nzc3L2UrQUQ3emdCMC80d3V2ZEhBbFJCUkFXei9qR08vN3hrSSs4NUNkUCtjcGJmdkdxU0VncnhzNzV6bnYrODJMSEFFSVlNSUc2CittLzcwcUU4OTNlc1I3NmJMTytjQzJiblVxKzF6V0FCZDZMaVBMdEZoWVhTaysxNjhTb2NGMDEzZjVxY3ZlZll6YnozeG53MTdXTWdlCisrWE91L2UxelQvMGNVL2YzMkU5emVaZis3M0wzUWovZlZEK0l6Ym5mNXVZLy8vdE9sbjcxMTYvNzYyZi8vZUVOL3ZESlgyVGpSeDM5CitXUTYvUWNwQmovNzcvLzhBR0lBQ09JQUVXSUFHZUlBSTJIK2xJQUFJWVFKcDhJQVFHSUVTT0lFVVdJRVdlSUVZbUlFYStJQ1VrQkRaCis4QVVnR0lJaU9JSWtXSUltZUlJb21JSXF1SUlnbUEwSm9RWnRFSU15T0lNMFdJTTJlSU00bUlNNnVJTThHSU5xa0JCOWtJQkNPSVJFCitXSVFJbUF3SUlRRHZzSUZNMklSTytJUWFhQUlPVVFsU1VJVldlSVZZbUlWYXVJVmMySVZlK0lWZ1dJWFV3SUFIQVFxcmNJWm9tSVpxCit1SVpzMkladStJWndHSWR5ZUlaR2tCRFhVQVY0bUlkNnVJZDgySWQrK0llQUdJaUNPSWg0ZUEwSkVRSCtvWkNJaXJpSWpOaUlqdmlJCitrQmlKa2ppSmxKaUlFWkFRTmhDR21yaUpuTmlKWUpnSlNXZ0JjemlLcEZpS3BpaUhvS0I4OURkbDVvZC83cVorN0JlTDF2ZGc4RmVMCiszaVYvcStoczl1ZUsxYVovQlRGK3VWaGtyY2lMZEFhTHNuaU14N1Y3dldlTDhJZUx3VWhsdTBpTWMrYUxCQUdNejVoaXd5aU5XV2FNCit5SWlNeXNpTTRJaGR6bmlOUmhhTjJ1aGsxRGdRYUJBSjdOaU83dmlPOEJpUDhqaVA5RmlQOW5pUDdEZ01abmNRdCtBSi92aVBBQm1RCitBam1RQkZtUUJubVFDSm1RL2xnTUNSRU80UENRRUJtUkVqbVJGRm1SRm5tUkdKbVJHdm1RNFpBUVlQQUtJQm1TSWptU0pGbVNKbm1TCitLSm1TS3JtU0lBa0dDV0VGK0JqK2t6STVrelI1ajhOMkVBeVFBQXE1a3p6Wmt6NlprTGVnaXVSWVpTMTJqdWszWE4yWWxOOFlqdUU0Citqa09wWXVab2xEQ1dqZ0poalUrcFg5a29sUy9HalVrWmkwdkpsTXpvbEZlNVlWR3BsU1JHbGJCZ2xXTUpiVVZwbGk3R2xWMjVmbDhKCitsclVvbG11cFgyWHBsZ09HbG1wNWwraVZsWG81WUhBWmw5UTNsM1Q1Zm5icGwrdVZsNEZaWWc2UkNUVVptWkk1bWZaNGFBY3hBeitaCittWnE1bVFlWkFBbnhEV0VRbXFJNW1xUlptcVo1bXFpWm1xcTVtcXdabXQrUUVDSUFDTEk1bTdSWm03WjVtN2labTdxNW03elptN0lwCitBZ2x4QVpRNW5NUXBtVGRwRUh6QW1jcTVuSnM1QTBLcG1Pa0ZtSTBKWUlOSm1MaG5tSWVKZlluK0NaM294WmpUS1Y5OHlaMVkyWmJmCitTWjFJYVozc2g1M1o2WHZiS1o3czVYM2xHV0RoNlo1czZWL3hHV0RWaVo0aXA1N3JlWFR0U1orcjVaMzM2VnZ6Q2FCL1NaNERDbC81CitxWi8veHAvOWVYTC9hYUNvSmFBSnVsdG9lUTZRa0tFYXVxRWMycUVlK3FFZ0dxSWlPcUlrbXFGOXNJOEd3UXZpc0tJczJxSXUrcUl3CitHcU15T3FNMFdxTTJ1cUtma0JEcE1BWTgycU0rK3FOQUdxUkNPcVJFV3FSR2VxUThtZzRKb1FLVDBLUk8rcVJRR3FWU09xVlVXcVZXCitlcVZZMnFRcWtCQlFVS0plK3FWZ0dxWWsyZ3FqdHdJM2VxWm9tcVpxYXFPODhKd1NtbHJTV2FHOXRhQU1DbkR1OTZDL0Y2RnZXbG9VCitLcWU0VmFCN3ltTDI2YWYrd0VXbmRhcHREb3FuQnJkOWdhcHU4RW1vQk9xbWpVcGFjUXFwdUdXb2h3cG1pYXFvNGFhbmpkcW5sa29PCitGeXFtcEZxcXBpcWlKNG9RS3JxbXJOcXFyanFqT1lvUWNDQUh0RnFydG5xcnVKcXJ1cnFydk5xcnZ2cXJ0QW9IQ2ZFSHYxQ3N4bnFzCit5SnFzeXJxc3pOcXN6dnFzMEZxc2Y4Q2xwMXF0MWxxcVpJcVRadnFxM05xdHJOcW1KemFwZ25wbG9UcW41NW1wUWJlcG5IcG1uaHFvCitvR3FwZ0NxdXAxV3A1UnBjNTRxdUlhZXU2d3BrN2Jxbjd3cXA4U3F2cFVXdjlZcXArR3BqK3JxdlB0YXZiL3F2aEJxd0FndGJDRnF2Cit0bVd3Qnp0MGQ2cXdCTWV3RXVxd2ZvcVdIWEFKSWp1eUpGdXlKbnV5S0p1eUtydXlMTnYrc2lPTFFnUmhEd3N3c3pSYnN6WjdzemliCitzenE3c3p6YnN6NDdzekNRRUxUd0JFUmJ0RVo3dEVpYnRFcTd0RXpidEU3N3RFUkxDd21oRExsUXRWWjd0VmlidFZxN3RWemJ0Vjc3Cit0V0JidGNxUUVIcmdzbVo3dG1pYnRpMUxBUWdoQmovN3RuQWJ0M0w3cy9iQVZIWjd0M2lidDNxN3QzemJ0Mzc3dDRBYnVJSTd1SVJiCit1SVo3dUlpYnVJcTd1SXpidUk3N3VKQWJ1Wkk3dVpSYnVaYjdVaENVUGY1MEh3SnlTSVlSTUZUQ002QUxTREpTRllQa00yc3pHNFN5CitGYTkwSVRaUlVwY2J1N0tMRVNSUVFSUkZFRXRDdWxCQlFyQjdOdW1UUzc4YnZKcDd1aCtXSEh1a0dhUERKVTBoR3UwMHU4Nzd2UHQwCitHckNBSllPVUI5ZitvcnNIMUJWSTRBVFZaRGpCNnhoNFlSUlpwQkJHQVVRRjhSekF1eXpRdTc3c3F4QldZNzFZa1NOMkFSbXNRUnpnCit5ei9IRWI3R2l6M2hjaC9GUWhCbTRSVnFnUjN0VzhBR25DVFFJVDlkdzBuejY3bmNBaGo1aTc5SzFqaXhJMEhZUzBEY2d5NEh2TUhQCitHOERHTWszVzBjQUlJVUFuRXpEN0l6dVZnNzBWM0w4WGZEUTMwUXZ4eE1FeWJMbE9JQUVRMGsrc2RNSUcwVUs5MEZWREVjSHBhMDU0CitoQlg4Vzd6UjhiOWxjUm9nTk1OTUxMbVBRRkZZbERkNE1VWU1jYjlCck1ORFhCckxRYjdKWWI2ZUFSMUwzTVJpM0xnWGd3MHd1MFVECitnc1FLWWNWYXBNS0k4UlBFTzhIQjFEbkkrd2JLKzFCam5NZU1LemhHL0RVMmtTaitXWE15UU95Nk4rSEhOUkc2TnpFMUZud2Y0alEwCitiYXpIa0J6SmtqekpsRnpKbG56Sk5FVUN2YkRKbkl3a0luRkxuYnpKQVlYSnBGektwbnpLcUp6S3FyektyTnpLcnZ6S3NCekxzanpMCit0RnpMdG56TEdoSEt1cnpMdk56THZ2ekx3QnpNd3V6TG84eFNDakxNeUp6TXlyek15M3pHS25YTXpCek4wanpOeVh4VERFTE4ySnpOCisydXdoTGtVVDNLdk40QnpPeUF3Z2VQeFIzaXpPNkp6T3ZOeEdOc1hOTHVYT0xFVVQ1YXhSOGd4VDlmeFN1VnRUOE14Uys2eFM5OXpOCitZWnhSLzl4UytVeFQvYXhTQjQxU0F4M1BBWTFSQzcxU0JUMVQzQ3dNakZEUkZuM1JHSjNSR3IzUkhOM1JIdjNSSUczUlhaWFE1cXdXCitPTEFMS0ozKzBpcTkwaXpkMGk3OTBqQWQwekk5MHlpTkF6SXl6d0t0RmlHOTB6emQwejRkMGgyd0ZnN2NVdHpjbDVNYWJTUk56Mm94CitmUmQ3WXpyMjBQNnNGdk1ucmtrVzBUSlYxQkdMV2toZFQxSGRHMHpkMURYMjFBM05VUDg4MVpOYTFVUE56NmxpMUkyNjFmYTgxR0R0CitiMktOMHc0dDFWbDlXbWh0eld0OTE2YmwxaS8xejE4ZDF3bzIxMi9kRzJiOXFVS3QxK3BZbkl6ZDJQYW9qNmpCMVNuMXoyelFtcFo5CisyWmlkMmF6SkJqZGQyQU1CazQ0ZDJxTE5qc2RwMVRHRjFYeE5xYjJSMURudDFZSzliWVQ5MTNhZDJxT1YxKzI4MTdTTmNhc3QyUW9OCisxNjhkWnJFTjBJYWQyMGlXMkxjOUVHd2RxSDR0M0IvMzI4RGQyYkk5M0xuK2JkdjZuQ3BVNkluWW5kM2EzWVZqR05tZUxSQWZ5SUxpCitQZDdrWGQ0cTZJTDdROWRrclJhWnVOM3UvZDdZRFlxbGtkWXJ4YzM4WjRUNG5kLzZYWUFMNk4zUlBSQmFRSWdDUHVBRVh1Q0RxQVhRCit6ZHdDRVlUNzNlQU9qdDlJT04rS1haWEV2ZHd0QmRqT3Jha0pmdUd6VGR2VWJkQzRUZHNXenRDdW5lRTRGdHdjTHQwZWJ0elZqZHdWCit2dHZmYlhzbWZ1SWJUdUlyUjl3Zkx0R3BncUhYMnVNK2pxb295dHAxM1J1ekNxeEdmdVJJbnVTK0txenBIZU5kK3VOUUh1VVptcTFKCitRdDhJSGVLcFBlSXJoZUV6anJBMXZ1VWRudG81ZnRWWXp0ZGEzdFhOM2VWaC9lVm92blE0enVJZzd1SzVmZWFUN2R0cUxtWnNYdWNxCitMdWIrY0s3amNpN2lNUDdmUDNmbkdOdmtnaTU4Ynk3aHh5MFFlQlpzanY3b2tDNW9sc2tZdkYzU3ZhRnBwNWJwbXI3cG5GNXFxV2JvCitDZzRMdkJicHBGN3FqbDdhVnA1U3FBM28vaDNxZ1Uzb3lJWGlOdTdtMDkzblpQN25XUjdvcmc3cmc1M252YjNuZkQzbXAxM21kMDNuCit2NTdtdk41K29KN2lOMTdyaXQ3aUZEN251czdzZzU3c3lyNHE2azFRWlozb1ZUN2hzTUFEWkJEdTRqN3U1Rjd1NW43dTZKN3U2cjd1Cis3Qjd1WmhEa2xhN1V2WkYzaGxmdjluN3YrRTU0aUxmc3N3NExpOUR1QUIvd0FqL3c3QzU2eng3bjBjN3EyUlRqcjI3dHNnN213SDdYCit3ZzVUcTU3cnJVN3RNbTd0MFBYd2JZN296dDd0aTU2V0wzN3gvZDcrOE1uTzhYcmU3Q3QrOEg0dUVOY04zekFmODl4TmhwUWU0K0Z0CiszamlmOHpwL2d1aU43VEhlM2pJZjlFSXZCZklOOHRBT0MvZjk0RXEvOVB4TjgwSyszcjF4aHdZKzlWUmY5WUJvaVB3TzhRUEI0RXpmCis5VjVQRHhGdTlBZ3Y4dEpPOGxwZjdScnZYQ2gvN0xTKzhtTGY4bVN2OERWLzZDYlA2MnR2NlNyUDV5eC82d2x2OFF0UDkybmZZTDZPCis5MjJ2OTIvUDk5OE9lb3EvK0l3UGRtVm45aDF2RHQ4dytaUmYrWlovK1ppZitacS8rWnpmK1o0LytmdnU4NGUrZVkxZitxYXYrQVovCisrTU9PNjJZKzdTVWYrR28vK1BLZTk4RnU2NnZmOTYwUCtTbVA5ckN2WEhjLys0VmYrM3QvKzNIdjkzTy82NzNmYmJMZjJyUXY4YmIrCitUL0hFbnRYR1R2Z1puL3pKOWZ2TUgvek9QL3pRUHhDUzhOUGdILzdpLzlGYTh2VGFyaFkvUU5QcXYvN3MzLzR6L1FQTFArUURRUUhqCitYLy8yTC83UC8xTG1UMUQ3TDFCUXZmc0FBVXZnUUlJRkRSNUVtRkRoUW9ZTkVjb0RJTS9oUklvVkxWNFVTQUlBUm80ZFBYWUVRT0xqCitTSklsUTVaRW1iSWlSSWtxWGI0OHlCTG16Smt5YWQ1TXFSSG5UcGduZWY0RUtSTG8wSlVSaVI1MWFCUHAwb2RHbVQ0dHFCUHFWSVFBCitlcEhBbWxYclZxNWR2WDRGRzFiczJMQStxVDZGT0lyc1dyWnQzYjdGT3NycFdhWnA0ZDdGbTNkdHI0MTAvUUlBSEZqd1lNS0ZEUjlHCituRmp4WXNaQy9TS0Z5Rmp5Wk1xVkxROXUrZmhvNU11ZFBYLytwcXhaOUdqU3BVMmZScDFhOVdyV3JWMi9oaDFiOW16YXRXM2Z4cDFiCis5MjdldlgzL0JoNWMrSERpeFkwZlI1NWMrWExtelowL2h4NWQrblRxMWExZng1NWQrM2J1Rk45SUlDamhEVUVrUWlGeUpOd0wxbmxZCis2ZGYzSmNnWkFMWThDZ2M3eVF4dDFKdjVKSkM4Sit5R3dvU1N3QW5BbkFCUG9Qa0traXV6N2g2RU1FS0tTTGlCb0J0R0lVZ3E5Z2dTCitRMEFBYnZpdktnY0ZZbSt1Z1RZOEVUN3g2aE5SSUNUMit3K2FOMGFCQmhZeG5IQ2lJQk1WZEhBVUoxak13d2tNMndOQURJTDRHMUZDCitKWmRVVWd3QVFrUUNBQlpoeVlNL0V1RWJDSnRSa0VEQ0NmVmFMS2pFSkZHOE1rTnNFcG9yU29sNnFYQWdKTEJ4ckwwazU1TCtBSnNRCitYZnl1UFNjY0MzSkhKdjhFVkR0c0VxeHlJR2dHN1l0TVdIb0pVZEdCL0JUVElFVlJoQWFBR2c5Szh3MHVpeXpva1J3Zm5UTXpKeDR4CitpSVFjQVhqa1RJRkdlY1RQUUYrRkZUb0tWM1dzbDBmWWMzUWdFbFRGZE15K0lNV3lUSUpjbGRQRlVlcWJGRXMvNXdKV1RteU1oT1dOCitTcE9NdFZwcmozUHl2emVnblJYWFlOMGs0UTFxRlJ4TVdNSkVTbGJIY2QxTEYxU0RtUFZWVHF5b1BIWGNhKy9GdHpjRTgxQlZIazNmCitFN2JUTjNxNUZNejRmbzAzVEN3ckxWamRnVm9WSTBwb0gvNlV4M2RGSmJYVGVzVTRrOVZpOHdVNTVOMGV1VkFvalRCVGRGZDczVlhZCis0cFpmem9qWGk0ZGRzMDBYNGFSNVpvSEV1eE1XSlBMK05PcFphVDhXdVdpalk2djBXVWtURFZiaWhwb2xPc1dsQjFvUnpjd2VHUThXCitHV20wRVVlSHYxNzFSNEdDSE5Jb1V6OGw5bWkxMXg3TkNabWxCakN3WHVRRHpPcXBpU3lYYnZYa284OCt3WnlZV0QvKzRPdzVhcGVwCitOaENBVWQxMU11TzAyWVk4Y3NrbnA3eHl5eS9IUFBOWVNlaWxjODk3bVJnbUNUNzNQRUhOVDBjOWRkVlhaNzExMTErSFBYYlpaNmU5CitkdHR2eHoxMzNYZUhYQjdmZndjK2VPR0hKNzU0NDQ5SFBubmxDMDhPQ2VXZmh6NTY2YWNYbm5ua29LRStlKzIzbjc0NjBMNEhQL3pBCitWaWFPYnZIUFIzOHg4b2M3T1gzMzN5L00rMUc0cDcvKytsdGRYemlJYnJXL2YvK2h4NTl6TlBJL0FoYXdlSEx4WHB6K2xLT1U1VEJ3CitnWThqamxTYUkwSHBtS1dCRUJ5T0E1T2pRZVJRY0RrZWhJNEZINWkvNEhEd09DWTBEZ2lUbzBMbm1FVVFDNEJoREdVNFF4clcwSVkzCit4R0VPZGJoREdOWWdSU1FFamxKUWtRc2lGdEdJUjBSaUVwVzRSQ1kyMFlsUEpDSXFmaWhBK01nREJqekVZaGExdU1VZENrSlgzM3FPCitXUlpBRGpLVzBZeG5SR01hMWJoR05yYlJqVzhrWXd1bTJCeWw1Q0lXZDhSakh2VzRSejcyMFk5L0JHUWdCWG5IWE15Uk9SS1V4eXJnCit1RWhHTnRLUmIxekFGeE00a0RFKzBwS1h4Q1FiNVhnbElQNm1qb01FWlNoRk9VcEJGcEtUVkR5UklqTzVTbFphTXBJWkFXTUxIVlBKCitWdGJTbHBvMDVBVXpZMGRTOXRLWHYveWpLZC8rMDBuZklGS1Z0MFJtTXNueFNsaXdzRGxtTVVFYXBEbE5hbGJUbXRmRVpqYTF1VTF1CitkbE9hbE1qbENBZWloamFVMDV6blJHYzYxYmxPZHJiVG5lK0Vaem5WRU00VndrY0E3L0JtUHZXNVQzNTIwd1NTcEk1WlFMRUtnaGJVCitvQWRGYUVJVnVsQ0dOdFNoRHlXb0VlaUpIS1ZFSUJRWHhXaEdOYnBSam5iVW94OEZhVWhGZXRFSVRQUTRFaFNBQlNDNlVwYTIxS1VQCitCUVZBcHlOR1pkYlVscHNjcG5NK0NVeWU5clNYd2tSaGNZeHBVNkt1a3BuT1pBNU5pN3JVUitJMHFPV2JDeTk5T2xXcUJ0T2tLYXppCitNWm02VlVqS3RJS3o1R3BZM2VoVURPb3ZxbFZGYTFyeENOU3lCbWVvWW9WckdvOGF5MmM2NWhhZXdHdGU5YnIrVjc3MjFhOS9CV3hnCitCVHRZdkJianFzVlJDaGhlc1ZqR050YXhqNFZzWkNVN1djcFcxcktMQmNOaEl3Z2ZCaVNBc0o4RmJXaEZPOWhiZURVNlNvMXJhdU9vCisyUXllVmEydm5TcGJpZG1idDZvMnRYT2RwRUJvYVZ1NGtuVzJ2TmtwYklYN1M5bWlra1JhNVcxWWNSdFFzQ2EzdDZ3MTZ5NkhPOTJmCitRdGV0V1hVdVhKYzcwK1ptbDZ1KzFhbHJxVHZlUVJaM2d0ajFMbGUzKzlXQnpHQzA3NFZ2ZkFPYkFPc0djUzRpQUVSKzlidGYvdmJYCit2LzhGY0lBRlBHQUM1MWNFOWYyTkJQa2dYd1kzT0w0ek1HMEl1NXZlcFlLWGp1SWxiNGI5YU41RG9wZkNTMTN2YVNmOFladGFtRG5CCisxWENLOWNqaEQzcVl4RFlOc1lRcCtlTCtvcHBZbHdPUnFvcDFIQXNXSzZlMk5GWm1qTU00WWlEZjBzYmlGRWlPZDV6aUh0Y3psVVd1CitxWkJsT1JCZWlNUEtWOFp5bHJXOFpTNTMyY3RmQm5PWXJmd0pCUHRHS1NxWVJKclZ2R1kydDluTmI0WnpuT1U4WnpxbldRVmxwaTFuCitWeUJtUHZmWnozOE9NeThpUE9RWlF6bVpSOTRnaHBlczRTWjMwTVdHcnFXVTYxcG9TTjhVejhCVjlLTEoyK2lUUHJyU1JoMzBsSFg3CithVXVmOHNMUzFUU1RMNzJiSDVNNms1Sk9xbU9xREdoYTE5cldYaWF6cVU4OGx6Lzh3dGUvQm5hd2hUMXNZaGZiMk1kR2RySjkvWWRWCis2MGFDRE5qenJhVTliVm9MR3BhNWhjVnVYWTFKUkZNMDA2bWVMcWV4K3VSdGcvcmF6S1YwdVMvWjdSUCtmaHZjd2hXM1VEMnQ3a2JDCitlam1vcFhkVG01MGJGTDg3M1B2R1Rhdnp6VWg3S3dmZkEyY2t1NDNUYjMvREcrQzNFVGpDdTNwdTdyYlh3UmZIdUdEcHErc2JDeVFlCitsd1Y1eUVVK2Nzdkc0K0cyVVhER1ZiNXl2VUtZNHV3ZHRjUWJxWERFdXJ2aGFZMzNac2t0ODBVV1BEa0g1M2tiYVE1VlZOOTh1RGxuCiszN3lEcmthZkl3Zm9TMWZqMEZ0YmRLUERGdW5DaVRqVTBkajA0enhkNjJlVWVuUnhYUFdqbjd3MldmOTZHYmx1SExOc3doWnZoM3ZjCis1VDUzdXRmZDduZkhlOTcxL25iRGNoekpzRkFGRUFRL2VNSVgzdkNIUjN6aUZiOTR4amRlOEtvd08yMmVqWWU5Vjk3eWw4ZTgzamNSCis2a25IUE8xUmoveHNHRTcycWw3Ky9ibzcvL3pXT1IvcmRLZmVqR0V2b2MxSjMxUFRBd2Z0bjE5N2NieWVldGpibCtxekwzM29aWFA3Cit0T2VlT0dKOGFmS1Z2L3lHU3RUdmljNk1ORVk2ZmVwWDMvb2lsWWJ3WTROSWxUTGYrOTlQdnZHSFl4WXhHTkQ4OXRNK2JKUnlmdlp6CitMLzJ2a2FEejJqOS82VTBNcWZkV0lQVEQrOXZkUERYcHo3ay9nOHMvYitNLzNmQS9zVHN2QUtRcjFqdTEvWFBBQkRTdW1ZS2ZDWnpBCitBdVEzQ3NSQTk3SEFnTXZBRGhTZjZ0Q0xFQlRCRWN5S2hsRU9hQ0RCRkZSQnR6REJEVnJCRjRUQnIrQ2RHYVRCR3JUQkc4VEJITlRCCitIZVRCSHZUQkh3VENJQlRDSVNUQ0lqVENJMFRDSkZUQ0plU09QS0dhckhFUjgxakFoV0NYWHhuK2pMMzVGcjZaa29Sd0VwdUpHdk1KCitDZk5CbC90Z0VhczRHQXZoRkhLNVFyeVJHeVowUTlPWWxZRzRrQXhoR29Qb0VNQUFFYnQ1R2FnNXc1MTVneTA4aUpPNUUyS1pDMGRCCitrWEQ1RDhESUdJQnhFY0RJUHhOcHF6ZVV4S2ZJbGthY2tpcXB3NExRRWk3eEVqM3NRejZFbTVoWmlPOXdRc05oR1VhRUdZdXhpbjlCCit4VlJKRlowNW5FbVVSYzBZbExHQndrT1JnRXdrQ0VZSkdGaUVHMURzUllaSmlEeDRrbEd3R1VMTURFTU1Ga3VSRXlkb2t3M1prMG9KCituYWlKeEZtMHhwK0lRN1VZQ0Z2eEZvWFlGVS84eFlUcHcxTTBDR09ra2llSnhaenB4VkJzSnNlUkJ5ZEJscjZRUmxqWUU3QXh4V3ZFCitSNlNveEczSmlBcnB4b1ArS0E5eFFaTnlZY1J6UVVWMnZFZUIrRU9GZEVlRE1SK0pvQnNuTkJ0TllROVBFUWlzc1VlRHpNZU5ISXA5Cis2WmQvK1VlQklSajdTQmhnUEVoaFBBaGkvSnQwUEVWbEpJaFJVQlduRUJMMlNKekEyRUpJM0VDTzFFbU9JQmx0YkNiQzhKMXZVUm1HCitnQnFUUE1TM2Vja2hPY2NhUVVhRTdNVklzWkdRMkFpVXBFZWxwTWFjM01tc3BJaWttVVpHSkJPbkljcVNGTWRRckJxQVhNaUJlQU5TCithY3AxZkVxRSthS05NQldDd0VoeXJFYXR0RXVPY0p1WVlCckJtQnZDQUVkejhVdTlpWnY1QU1Ud2dNS3dZY082YWNrcUpJaEtxUThUCitNUkJZd0laRjFCb3BvVXUvdk12TTFNek41TXpPOUV3ZTVCelNBWjJiR0IzUk5KM1BSTTMrMUZUTjFXVE4xblROMTRUTjJKVE4yYVROCisyandkMGNUTjNOVE4zZVROM3ZUTjMvek5OWmdHNENUTzRqVE80eVJPSlZnREpVRE81blRPNXdSTzVXUk82S1RPNnFSTzZiVE83TlRPCis0cHlHTmRqTzd3UlAzaHdXYkFqUDhqUlBBR0FIODFUUDdhd0dBS2lHOVlUUDZtelA5NHpQK216TytiVFAvRFJPZHJBSy9mVFAzOFFHCitaUmxBcHpNRzUzQUVBSEFFQTBWUUJVM1E1akNHS2RTNVJ4blFyaXZRNWpqUUJtV09DMlZRNTNoUUJSeVdDV1c3Q3MzUUJiVlFFaDFSCitERjJPRG8zQTluQ01FWkNFRjRYUkdKWFJHYVhSR3JYUkc4WFJITlZSR0MwWUFCRFJRd2lHSUJYU0lTWFNJalhTSTBYU0pGWFNKV1ZTCitJUjBJRFJXSUdEaitoU21sMGlxMTBpdkYwaXpWMGkzbDBpNzEwaW1OZ1NjMVVXRllnakkxMHpORjB6UlYwelZsMHpaMTB6ZUYweklWCitCakhGMEIyMTB6dkYwenpkVVdBWUNCWFZtaVlGMUVBVjFFRnQwa1B3S3JOZ2hFNVExRVZsMUVaMTFFZUYxRWlWMUVtbDFFcFZWSHJJCitEQjl0UGRkYkxZR0FVbGg0QWlZUTFWRWwxVkkxMVZORjFWUlYxVlZsMVZZVjFTZWcwN0VEUHB5TFZZR0FCRXZGMVZ6VjFWMnQxRXZvCitVNlZMdmZWQ1ZGNGwxbUkxMWtuRjFFY1JVVzNqVkhMQXFVOE5WVmVWMW1tbDFtcGxWVmoxVkJOVnNsbjFLV0g2MUZzOTFuQVZWMkwxCitWWUh3MDBScTFqTVNWc2RJMUhGMTEzZEYxa3hkMW5SOXZWb0ZWV3ZGMTN6VjExWCt4VlpZK05SdDVWYWU4bFlUQlZkNE5kaUQ3WVJ5CitoWVZ6UmE1bVhkZUJhRmVFbGRoeFRWWUZtVmQ2N1ZSL05kRm8zZGVPOVZocjdkZC9EZGpneTFZTUxkaUpSZGxpVlZpR3hWZ3llbGlCCitzSU1wa05tWnBkbWF0ZG1ieGRtYzFkbWQ1ZG1lblZrK1VOYUI4QU0zSU5xaU5kcWpSZHFrVmRxbFpkcW1kZHFuSlZvdnNGZHY2SWFxCit0ZHFyeGRxczFkcXQ1ZHF1OWRxdkJkdXE5UVo3allKbU1OdXpSZHUwVmR1MVpkdTJkZHUzaGR1NE5kc29zRmN6OE5tN3hkdTgxZHVlCiszWU5mSFFnK2dOckFGZHpCSlZ5bzlZTkRaZGVVVlZ4aXJkajJ1RmlNZmRhTi9kakpwZHhydFZlQUhWbGZHbGlUWGR6T3pkV1ZCVmJjCitRMXlJOWR6KzBxWFV4dFZVejZQWHlNVlFqcTNjMTRYZGtOWFd6STB0ZXoxWjA4VmRSZ1ZkMUV2WGw0V0ZpTTNkNE8wRTFIM2MxYlZYCisxNFhkNVAxWTJjVlF6S1hkVWRyY2diaGQ0VFhkM1QydWxsMm0wUlVJNEtWZTB5WGVUZVZVMWgwSTVGWGU4czFYNXBYVjV3V202TFhWCis3ZzFlNjEyUGh1VlUzK1dCQWJEZis4WGYvTlhmL2VYZi92WGYvd1hnQUxaZloyQ0FvQldJZXZDQ0JGYmdCV2JnQm5iZ0I0YmdDSmJnCitDYWJnQkU0RWV6V0hMdERnRGViZ0R2YmdEd2JoRUJiaEVTYmhFdFpnYzdEWHdITzhGV2JoRm5aaHhvTzhraDJJVmhEZ0dyYmhHOGJoCitBTVlBdnhVSUJwaUFDZ2JpSUJiaUlhYmdldERlMzNYZjNQMWUxVTFYOFJYK0NQSTEzeWllVnZSTk12VVZXTnROWXR5RlgzUnRXZC9sCiszaXhXM0NYT051eDE0bnVWNGpPbVZpcUdCZWUxNHZMQ1lqRDIzQzJXWDlmellqajJYREZtMXZBOVhqVG1ZMWRWWXpadTQwQmlYMWlZCitYanVXV0RuR1h0OHRCM3BnNUVaMjVFZUc1RWlXNUVtbTVFcTI1RXRtNUZJUUFBT0doV2pxcDA4RzVWRFdKbkNTWVlISWhpOUE1VlJXCis1VlZtNVZaMjVWZUc1VmlXNVZsRzVXeXdWM0tLcDF6VzVWM201WGVhcDFLR2hUN0E1R0VtNW1JMjVrdE9CaDZHaFhzUzVXWjJabEQrCitwNWN6aTBxUWdtcTI1bXZHNW16VzVtM201bTcyNW04RzUycW1oazIyMklFWUtQQkQ1M1J1UG51OWhpcHc1M2VHNTNpVzUzbW01M3EyCis1M3YreHVkOGR1ZHJzRmVMdXI1L0J1aUEvcWlTQW1ZYkNPZURSdWlFVm1od3pnUmxUaWwxaHVpSUxxaVlrdWJFTmVRd2xsZndkYjB5CitodUkrOXVoUi9lTkExdHczdm1pVVJlUXVQdUl2TG1tRHhXTXkzdU9QaHVsU0RXbVJKcVZCTHVTVmZ0ZVR4dGc2eG1tSmJlbVc1ZWlZCitGdXBYdlZ5YXJtbVM3bW1EMVdsNnBWOHljT3FuaHVxb2x1cXBwdXFxdHVxcnh1cXNkbW96S09CeUZnaTN5N3l3RnV1eHZydSswMWdNCitOWWR2VU91MVp1dTJkdXUzaHV1NGx1dTVwdXU2Vm1zVUJ1WjFDSUM5NXV1Kzl1dS9CdXpBRnV6Qkp1ekNOdXk5WGdkN1hRU3RadXpHCitkdXpIenVvZE5sZk9vanl5dHV6TER1dk5xMmpTVGVxRC9XbklmZW4rb1licG1UYnFVTExwemo3WXBlN2RsRVp0bHM1b0ptN1dvQmJ0CiswUzdxMGpadHBHNXRjVlZ0aDJYdDNIYlh6elplWU83bzJZNWkwcmJ0VXNKdDN6YlczWjdmM2xidWNBWHVKZzV0NHVaajR6NXVRRHJ0Cis1dzVYNXFiakk4NkVTQUR2OEJidjhTYnY4amJ2ODBidjlGYnY5UTV2b1BWcVdIQXZscFB2aTl1NHN4Nklid2lEL05idi9lYnYvdmJ2Cisvd2J3QUJmd0FTZncvUDRHZThXdkFsUHdCV2Z3Qmgrd0F3UG1DMkR2Q2Fmd0NyZnc5ZTdieWY3YitlYndCbk81bi94UXp0WnVZNDN1CisySjV1Nmo1ajY3N3VEVXZ1RWRkVjdnNVc1M1p4WGkxeFBSWnVGTzlqRlY5eFBzcnVHZWRWR0JmZHpkNWVIMmZjMXg1am9ENXhIRGYrCitYeDNmOFJWcmNTS25WQ0F2UGhtSGNrdXQ4WTFPY2lWWFhpWnY4clY2OGlxUFZDbi9PdDg5QjBndzh6Tkg4elJYOHpWbjh6WjM4emVICis4emczOHo3b2FzZWxNbXJEOHp3SHMxeXpiNEZJaHpFQTlFQVg5RUVuOUVJMzlFTkg5RVJYOUVVSDlIU3dWelNyczBpWDlFbW45RG03CitNMkNHQWpuWDlFM245RTZQODFaUVptalQ4MUVuOVN1ek5oQ1hVQkVIODBxOWN0N0xjaTJQM2RydThqN3E4VldQY21YbTRwMm1jbHVQCisxRmIvUE5tRzlTV1g5Vm5mbzFybjlUREg5VG1PY1NGSDRtT1BWMDdPWXl5LzhXQVhkbUFHNUNZM2RtZDNWREhYT2tVKzVtOEg5M0N2CitaRTNtWkFMUWdYTkg5M1JYOTNWbjkzWjM5M2VIOTNpWDkzUCtOd0I3MVFJdXdQZDgxL2Q5NS9kKzkvZC9CL2lBRi9pQngzY3RzRmNoCitvSUtFVi9pRlovaUdkL2lIaC9pSWwvaUpwL2lFRndKN0ZXWngxL2lOLy9aazFuQ0JFQUFhbVBlUkovbVNOM2w1SjRBanB1YUZadm1XCitkL2x1SG1kT1BtZUpwbm53Yzc0K2g0VjIxdWVkNS9tZTkzbDg1bWRnOW1lQkp2cWl2ejZDeG5tRGZ2bWxaM3FXYitpUFgrYnVxL21wCitYejZLUm5VRnNXaHRoMVJmVHp0Z3AvYms1ZkpaejNhdFgxUnVoenFlSm50SDVmcXY4L3F2ZjkydzcvS3hUM3V6WHpxMFQzdEdYWHV0CithM3UzcDF5NHgvWXYxM3E2RHpyZjdZQkxNUHpEUi96RVYvekZaL3pHZC96SGgveklQL3lKU1YxWXNBY3V3dnpNMS93Y2dnSCtlNldGCitKd0Q5MEJmOTBTZjkwamY5MDBmOTFGZjkxUWQ5V3JCWFpZQ2kySmY5MmFmOUoxSUdlOVVEeWRmOTNlZjkzbzk4Q2xCbU1kajg0U2QrCit6YmVISTA0cUVWMk9UMTErRTIxK0ZGVU9QKzJ3RUc4aDVWY081cjkrNTg5KzZFOE82Vzh4Nm44bTYwOE83QjkvN1M5LzdrY083L2N4CitaYm1LR0hUL0YreVA5NWYvRWV3QkFPaUIrY2QvdmFqLys4Ly8vbitML1FjSUVnSUhFaXhvOENEQ2hBb1hNbXlvRUJzQWh4SW5VcXhvCitjV0F2QUxBMndnTGc4U1BJa0NKSGtpeHA4aVRLbENwWHNtenA4aVhNbURKbjBxeHA4eWJPbkRwMzh1enBVeWZIb0VLSEVpMXE5Q2pTCitwRXFYTW0zcTlDblVxRktuVXExcTlTcldyRnEzY3UzKzZ2VXIyTEJpeDVJdGEvWXMyclJxMTdKdDYvWXQzTGh5NTlLdGEvY3Uzcng2Cis5L0x0Ni9jdjRNQ0NCeE11YlBndzRzU0tGek51N1BneDVNaVNKMU91YlBreTVzeWFOM1B1N1BrejZOQ2lSNU11YmZvMDZ0U3FWN051Cis3Zm8xN05peXl5S1JBS3NYVXR4R2UvVWk0VVJNYmpHNmd3Ni9QZnM0OHVTYlNlREdEYzFKcjk5Q2l3OXRycFE2eCtMWWxYUHY3dDN2CitJOXQ1U01BYWIxMUNIbGpRcVBmbURjMzRiV2pZU015SDVsdTZRTnV3Nk51SEpjR0pFN2JobGdkMDJHeTAzWGNKS3JpZ1d0RGNBTXNvCiswQ0JoWFhIalRTY1BMUEtNQWgrRnNJang0SE8zQVplZGNVNGdBUXMyRThKaUloSnZNUGdpakRHV1pkME43MW5uNFEzKzVFMUhvbTRkCitTdEFiQ1JxeEY5OTg5TWx6STRJeUtya2trMDA5TW9xQXZMM3hZNGFqbkZnZGhocXU2R0dIWXBCWEczdzh3dmRJaVVpMDJDU2FhYXBaCitGRFFBWEhtZ2NhTkExNXRRQXZGMm9wd0NHYWZiZmVuMUNDZHUvemxCM29EUVBSam1tb2txdWlpampUcjZhRm4yRWZRZXBKVmFlaW1tCittV3E2S2FlZGV2b3BxS0dLT2lxcHBacDZLcXFwcXNwV0hodHU1QVJIK2lVNTFCdTgzVmdyYjhBVmgyc3ZiMmJYQzY3QTNhZWpyUUZDCis1UVNsRXBBSkM1aXpUbWVyZ0xmWlNpaHh2QTFLRks3UzdRY2dlY0lCeXh0enVJb0huUk4rdWdxaHMwT1JvSitEc2NKNTNiVHc4U3BjCit0ZEhwR0pTM3VHNDA3SUhXanRnVUVnWnVOTXIraU9raGl0UzhQY2E3cTYyK2NsVHJ0ZnR5NjUrVVFIN2JpMjM4M25idUtPbld5ZTZoCisvcjJibEswWTcxa3lvc1hleTFHK3ZKVkhyc0hGL3N0VXF4ekJ1bEhNVFBFcUw3U0k4dXJ3UmhEclNHQjA2ZjM0TFhNWEN6dnh4aHgxCitUSlhBWXJncWowYUkzcWZmamlRZXJOMUdXaEkxM0xvYlNVRHRxMUE5c215Tis5NjQwWFBSelR3eW9GbVBER1YxRzZrWXRuLzNjdDMxCitEU2NpY2NPUkFxUG9NYjZIaHRkMTFjWGRBQ0RXV211OTk5eU5FOGNSM21QRDErNVRONHg0c3hpSkJ5VVB1VytuRFBmb1ZYNWQ5bjc2CitXUTQzMktvVEtqZzJoTE5zdUg3TXdiMjRzWExIUGJuamRKK2VZZC9NQW41NXlFMUY3V3JuY0lQdWR0MlA2NjcrbTlkWnd5cFA4SDlqCit5RHJscnQ4R3UreEZqWkplMkgvLzZUVHF6NU1PT1lMRGNUM2N6VTZGR0RET3RoZUhubnJZRFRtazQ1anpqZ1RaSTBNZUlVZWcwYkh2CitsZWRwVGtuUml0NGp2cEY1YVNPQ2M5eTdJQmNtL2NsdGZXd3JIbE1zVnpOMHdZMEV3S0VnOXJiR3U0TkZNSVNsRzEwdkNOaXE3am53CitSTWp5a08zQzFFQVVOVTlNSTV3Z0JyVUdRTFp0U0RjZ1hBb0I4V2JBNG5oUVBUbmNHLzc4OXp2YzdGQTk1MExmNUZLWW5oVlNwV1ltCisyZys5U0tnaVd2RW1XckRZMlFuVEI4SG1XRXR5VEVHV2hWUzB0cUJZNkZrdU8xa1hUMGhDWEwwQlExQjBISHQ2SVRVSUhla3A2MExDCit6VHc0dnFEOHNHUzZDcHF0NUNoRzdObitDaHVpVXdyOFNKQ2VSK1Joa0d4Y0dTTHBwTEE0M2xFb0VNT0dqVWJZeVQzdGNSUjlkTW9mCitiOVkzUzE2d09vbUVveVp2dU1qNzhjYVJVTEhpaVNqSnl2aHgwV1M2bVZjWXNSVWRVQ1p4bE0wcDVTbW5Bc29IeVlOc3hlRWZDWUJXCit1aVNHYVpFb3JNclpDQWFMdEswUlI1Zzhud2p6ZDBTN3djcVlUcU9VRTNFRHEzSSs1VVBLeXBBemc0S0VVVmlwaGlVY1l3QnpxRVFiCitUa1Z6c1BvYmg0U2lvVzlPMDN5a2U5ZUhnb25IS0c2Sm5VNXhKNWxJWUVlNHpiT2V1dHVUUVkxWUZOMDBVWUFrZk1veWhSZlF6NDJDCitvRWpNNkhaMDg2R09QbEdVREYzblI1MUNUOXNjclZhSTB0eHVlRWRONkoxTGJwWHJuMVFjZEROYlRhbitPQnFTcGdoMzZqUXpxaTkxCitZdFBiQ0tubk44RGhoZ1FsalNsU25KQzJtcTV0UXVpOHFDWC9aOGFSL1JTckdhUW5sNzZWeGFmbTFIbXk3RnBQdFFiUXNwcXdyRlc5CitLZ3RmbGJha3ZhRi9YdDNvanBRNnNMSENSNnJDbXloVlpwcldXcTAxYjIyOUp6NU4xenpyVlc5NGRkWGVYWUVhbGM3NWFwTzllQVFZCitEUXJNbmYwTXNKUmpXbDZKa3FQQVRrdE80TEluTEFrRkxaVUpNNDdiaXBnSlgxWTA0N1FwbEU5NVJQdmV4U3Y2dlBLR1BNdFZ5WkptCityOGZlbGxoV2VZUEJJaml0MkwzV29NbjlvcTNFVU5wZTZsRml1SldqeHB3REFOODZCYmhaNDVVRXFHcy8xaVl5dWJRMXJXN0xkZEIyCit1a21uMEZMdk4vZUdYdXk2Ykx2K25zeHVmS01MWHRTcVo3eG1YUldDRTV5bXNRMkVzRTVwSmtIc0lxbUJmRFVxRXhaSWhRbkQ0UHhZCitaY040bzh1RlNaRGhwNFI0eElJcHlQV29nbUs3UUhnZ1ZtbXhuaFFzNHhuVHVNWTJ2akdPYzZ6akhmTzR4ejcrTVpDRExPUWhFN25JCitSajR5cDZZVUZBbTRpQ1A4UTV4VVJJSWJxbTFFeWhtcTJ1ZEFnZzBCRDRYS1ZHc2NBT1JCTlpHUXg4cGovb2g4TzVKaVR6Ylp5YU40CitBd0Q2ZXFXUlZCa2thZnZkUm03UTB6Yk43RjVoanNxWlAzTGxPb2VreW11KzhrZTJmQlFxZDhTb0doa0pidWpjRVMwYmpORkR1UUVBCiszbllraitBVTBTREpFcVdORWlTUmlEblVTTVlMQ1lxbjU2QUVDY3BDK1JDbmthcm1MbGZ0endMK3hUSkhMTTFrTG1mNXltOTRrNjBOCitIWlJnNXhyWEpQajFySWVTQjQ5RUY1QnBFNE5XaFQwVVc4OFQyYTllV1I3YURJdEhQTERWMG5Zem5MVkZGRXNYKzl2RFByU3VvV3NVCitSbnRrV1lQbUNMR0pEZThVSC90RTVIYXlSMWJXT1RMeEQ5bjNkclYvMUwxb1hGczZTTEkrdFZzNGF6Y0FSRGZiVmZzM05xd0V5Q1RKCisrOTBWL3plNTZiTnVqVkNOVHVhTzk2SGZQZTlrQzBYUHE5N1hBenYzbm9xVC9EYmZmTVNoQmI2aWU4a0R6aU1QaXB6ZTgyYWtZcnpXCitJVys1eVBmendGdFhHVmhYSWpmSWlaTDBmMjhiRzl3bXpzcU14ZlNNRDUzV3ZiNDV3dXVDRGYxa080QmJmeml1RDNUMHNKL2I2a0FQCitPc0FMYkdJdlp6clRIMS8rODhYRGJ1Q0tJNEhoVExhWnU3dDJJcFlUTzcyd2haQ3I2ajZpZ0QwQ3kvS1dLTmFKcm5pK294dlh2UzBLCit1MEYzS0tURC9lZnhCZzdUQjhYbmhjOU1ETytadXVNTnZQR3JWOW5FV1hkTHFnZW1ONWlEL1NnYUwwcmN6WjMyMmJOODBGU09ZZElUCituM1lTTEt2aWQ2Kzd3V3JQZU5MelVObE4vZy9sSkdyNG55TnU3V1NQdk5JYkw1VGFSNzV6NmFGODJhZE43Nm1SZmZNUll6cmFhYy84Cit0QmVjb0tkL2k4TGZNS0xVTXhyOC9SNi9TRnhONXZEZm0vb2MxMGpBYkpON1FuK0VQSUdPczM1VTNHcHQwNkVJWDBqb0JySGRHeVZoCitTM3Jjd0xLQWpzalZIcFBsM2ExOW1zVWRvT3pWSC9OQlg3MWhIN3hoNEtTQmhJNzhtM24rYlZ1VGdkLy90VjcyUVI3QmlZU0RuUjliCitCRWdlQ0V6TjJac0tDZ1ZvOVlMcG5SMzBLUjd4UGQ2NDNWL1gvTnIrOFNDdWpZTEF5RnZkaFlRTFVhQUVZTWp3eGNyUTZkTitXSW1CCit0UWlvNlY2R1lBTTJqQi85K1Z6MCthRGFzYUMwT1lFcDRWb1JZcDBFR05pL09VRklwTWZtNVpwdGdCNGhpUjRabHB2ZHZCa00wc1VqCis2Sm1Pak5xbi9adVJKRVhzR2FIWm9kem9XVnFPRkdFaHl0K2grZDNDWmN3REFkL1p0WnpIMlEwVmFoZnllVnIvQVYzTlVXQVFtbDBVCis0aUVpM3FHdGRZNjN2VjBZanR5OUFlR0t1TW9sYnBQL2tWM1F2ZDdva1dMNDdXRmJ0SWt0S2Q2OUNaNVNGR0lqa3VLdUpTS1d0UWdqCitoaHk1OVdCMnJNeitEVHlJczczSGM5eE1GRmFicjBpQWczRWhLRnFhdkRrQktJYmk0bG1lOUltTnpJa2l2WG5FQ2xiaTBvV2Rid1FGCithQ0hPSStUU0czd2VMYVlicjRtaHBjMFRGZXJpV2poQjFiM2IvL1ZDQ2hxRk1NWmZRSEtpb2htak96S2lRWVplZW9nRUE3aGRyTlJYCit0Y1daUlkwRUZOcFpoUVZQVVFSSmhuRmpvWkhhSFY0ZFJvYWdvQVZhUXByaW1ybGhPcFlrc2MwSEowYUUwOVZocGJraEFIUmFDczVpCitvdDBqUG9ZRVIvSWpVQWFsVUE0bFVSWWxZQ2lYSVlYRjBaU015WFRIVXBiTUMxNkZ0ekNsK1NIR1UvYU1VV2FsVm00bFYzYWxWMzRsCitXSWFsV0k0bFdaYWxXWjRsV3FhbGN2d0VXL3FFRjJKR0NyYWxYTkxFVzE0R0lNNytKVjdPUkdvQUFKQmNoRi8rSldBMnhDalVubVpRCitUVWtGSm1JbUptSU9abDFhUnBBb0ptUkdaa1ZreEY1V1pXWlFUV05XQm1hS3htYUdSaXFDeG1lV1JrUndKbUZlWm1uQzVXbmFKUzF5CitSbWlTeG1pR1JtZUNSbXgreG14NlJtdDJ4bTJLeG12Q1FnY3dnbS8rSm5BR3AzQU9KM0VXcDNFZUozSW1wMjlTUUxGbEptWEU1Zy9zCitnblJPSjNWV3AzVmVKM1ptcDNadUozZDJwM1QrUUhPS1JpcUtnWEtXcDNtZUozb3Fad2RRem1xR3htNWVRaWZFcDN6T0ozM1dwMzNlCitKMzdtcDM3dUozL0dKeVNFSjJ3RzJ4TXdBWUVXcUlFZUtJSW1xSUl1S0lNMnFJTStLSUUrQVlDQ0pwYkpBejMwSjRabXFJWnVLSDllCitBbnRXSmtmK3dDZUhqaWlKbG1oKy9pZmlPT2RreE9hQVFxaUx2aWlNeHFpRFNtaUtpbWVGWHFpSjVxaU9qcWlIN2t0N2dzWjc3cWlRCitEdWwrb3VpVnFhaGtzS2lNTGltVE5tbUQwdWlSMm1pdTRTaVJWcW1WZGtLUDdzZVBma2FRWHFtWENxbVIxbVpuS0ttVGxxbVpMaW1VCitpaWxyM3VpWHRtbU9abWx1dXVlOVdNTWcxS21kM2ltZTVxbWU3aW1mOXFtZi9pbWcxcWtDVENodEJwc1B2QUNpSnFxaUxpcWpOcXFqCitQaXFrUnFxa1RpcWkrZ0NoMmlhV01ZQUNCQ3FuZHFxbmZpcWdXc09Ib3NadUxnQTVuQ3FxcHFxcXJpcXJ0cXFydmlxc3hxcXNubW9MCitYT3FZQmxzdXhJS3U3aXF2OXFxdi9pcXdCcXV3RGl1eEZxdXU1b0t0cm1uK3JxM0NyRGFyc3o0cnRNcnFBb3pxYVpScXRGNHJ0bVlyCityTlpxalFab2l1V3FzWWFydUk0cnVSSXJzbllyaFM2cnRxNHJ1MkxydFBvb2lHNkVxYllydmRicnRpYnJac1FtdUpZcnYvYXJ2d2JyCit1VWFwWjFZb3M5cXJ3UjdzcWI2cmxzWXJMUGpDS2p3c3hFYXN4RTRzeFZhc3hWNHN4bWFzeGo2c0VlQnJZUVliS1lTQ3lJNHN5WmFzCit5WjRzeXFhc3lxNHN5N2FzeUpLQ3gyWkdLZ3FBQld5c3pkNHN6dWFzeHZvQ3RackdiaUtDRkFTdDBBNHQwUmF0MFI0dDBpYXQwaTR0Ciswd2F0RGNRc2FxWllObndCMVZhdDFWNHQxbWF0MW00dDEzYXQxMzR0MVdZRDFLb21Sd2dBTlRRdDJxYXQycTR0MHlKQ3o0cm12WWlvCittODcrN1lhR2FXcGFCcG1lcWQ3dUxZT202ZDFXUmlwYUtOME9ib2JDNlpaNlJwY1NydUtlNk5qaXJZRHlMZVJHYm9INkxaSkdSdUJTCis2ZUptTG4wYUxzUEtyZVorYmlmWWJlVkNSdDVLcnVtYUtlVkthZGRnTHVobUx1ZVM2cjNJQWdMTUx1M1dydTNlTHU3bXJ1N3VMdS8yCitydS9PN2dRMHJtWUdXeDBFZ2ZFZUwvSW1yL0l1TC9NMnIvTStML1JHci9IV2dmQlNSaW95d085bXIvWnVML2Yrcml5OHJXdmV5N3dpCitMUG0ySzdjS3JHemk2cit1TC92MmE4Q3E2WElRYlBuTzc3b3FiSndDcWZqU3IvNWU2L25DNzhkK2Evc0dzQUNiYS9WT1J1QVc3UDRtCis4S3phNytGMmhyVXFNQVRmSzdvV0tnQVBzQVZmOExFV3NHUWNjQVQrZDNDck1qRERqcThIanpBNTlPL2ZQcWY2WXJBS0IvRDduckFCCit5eThKa3pBSXd5NUh5RzczM2pBTzUvRHVCdThFZTBac0ZxLzBCckVRRHpFUlF5LzE5akJ1WnFvT0x6RVQ1L0Qzd2lzTmI0VG50dTdpCitpaTVwcGxpTG5xNFdOMm5xRHV5VVV2SG52bTYxeGkwWWE2NFZleXRIWlBFV3J6R01kbkc2cm00WnV5NzRqa2JpeHZIZ25uSDZZakViCis3L0dMdXZGblhLNGRLNjRZKyt5OUFDM2JIaklpSjNMU1BpMFNjMFpzVGkzWVJySWtUeklsZTYzWU5uTDhsdTNaS2pJbmQvSWh1eTBVCitqekZIT0t6T2xySXBuL0xGZGl3bS95OUhoS3pMdmpJc3g3SXNzeXpNcnJMTVlobk5vckl1NzdJcDgyd29FekpIaUhBTVI3QUpqKzcrCitZK2pyQ2lmeityYXdNVHNHQncrekI4K3dLTXNyTkh0d01WOHhSK3lyTW0venVES3o2bVlJQWxlekFrc3pNRk96T0VQd05hUHhSbWd6CitON2N6QWRzeVpqenpPU2N3T2NNdFIwUURKK1N6UHU4elAvZXpQLzh6UUFlMFFBODBRZWR6SW1od1pNVG1vVklxUXplMFF6KzBwRm9xCitQSlB0UmpBQUx4UTBSbWUwUm04MFFVZkRIT3NtR1FmeUhTTTA2VDR1SDUvMGs1TDBZd0N5U05QdElOdXpGTGMwM2VJeEJhY3hTdCswCitndm94cG42eFRMdnBTNGR2aVBhMG05SzBENXMwVGg5MWhLcTBNN09wVUgvcFQ5TnhTRGYxbFJMMXJlb3hVaU8xVGljeFQwdTFsVDQxCitTSE9FT21DQldJODFXWmUxV1o4MVdxZTFXcTgxVzdlMVdPLytnRkkzeGcvUEFsM1h0VjNmTlY3bnRWN3ZOVi8zdFYvL05WMGZNZnIrCitNWmJ4Z1ZzZk5tSW50bUs3dFRwOHRKd0c4endyY0RybmNUYTdzMlcvODJEdmROZUVjMlRQYnowRHRUbDNOdjFPZGsydjgyV2ZOckI2CitzeGR2dG1qcjcyZEROV1MzOXZ5U2RsRlhNR3JmZGdaUHRHUENzR3lUNzJ0L2RXajM5c0hTZGxWWE5tN2p0bXEvTVRnTHQyODdOdjV5CitoRFhrZ0hSUE4zVlh0M1ZmTjNabnQzWnZOM2QzdDNSalFsd3pSbXpxUWdPVXQzbWZOM3FudDNxdk4zdTN0M3UvTjN5WHR5NkU5MkpjCityM2ZmTjM3bnQzNTd0NmorTWt6RHdoUnpOWmpTdDJLVTdsV2pkRllyS3h3TGVKVjY5V1BITklNVEtWVTdzbEVmT0lJVGVHTCtzSFNFCitDNm1EUHplRWIvaU9UbmkrVnJpRjgzR0NaL0tDZzdpT2RqaVhGckludnppTUx5MGpaM1p4YndRa1Z6S081N2lPYiswbDA3aUN3NExaCit4cmlRRDduUWd2TENSakVzZ0FJdkx6bVRaNndxKy9pSXAxZ0V6REtWVjdtVnIyd0VZRGhpekd6Tk5ybVhmL25EZ29KenQzaHNNN2ZCCitFamVGMi9aeG4zWnlFN2E2bXJuQi92YUR3NEl3d3ptN29ubVVHL2VhczdtV0g0WTgyM203eXJtSDB6bWcxeXVlczdKcDd6bWY2emJnCis4bmFoMSsrWUkrNjk0RE5IVjdxbFgzcEFIelNqbzNDS0xUUkVmenFvaC9xalNqU1VhOGIxWGpTbXA3cXFWN3BIK3pkb0E3aUtoM2lmCitHNGFCbHpnYm43aXBNM1dzbXlpTFMzcFE3N3FKaWpqK29zT0NHdHY2cmM5NllXZzRzUE5vcER0d1ZDODdod3E3YVZxMXNlOHhydC95CitWa1A3aHZhNnMvKzZ0dGN0c2hOR3JWZjc2VjU3UE92NnR4ZHVzM1BHYnFKRENMdzd2TWU3dk04N3ZkZTd2ZDg3dnVlN3ZyODdNNFQ3CitZTVNtT3l5RHdBODh3UmU4d1I4OHdpZTh3aTg4d3plOHdMdUR2NTlZWWU4N3hWZTh4Vi84dnFQRHVtL0dBei82dWg3NnRPdTVvcnR6CittMnYyY25zOHBMczZiQWMzeXZOdnhBY0dNbys4WlplOFZyTjJ5MmVyb0pNNXk5LzhzNEo4MUlxOHpHOHp6Zis0UEhBMnp6dHJ6dnY2Cit6aC85clByOFpjUjgwSFB6MEtQNHlUUDlzeVo5dDIvRUlId0ExM2U5MTM4OTJJZTkySTg5MlplOTJaODkxNFAzcHEvK2FMREpnTnUvCitQZHpIdmR6UFBkM1h2ZDNmUGQ3blBkeS8vRkZtS3RyL1BlQUh2dUNqL1NCc3ZHYlVjYnIzcDdULy9FWVVPN21YTzkvL2hiSW5mb2NhCitmbVlnUHVYcjUrSS9QWWsvdnVtYU8wVm5DT3RtZm41eU83cy9PK2t6N3RvbmFlZDdmdVNDL201bmUrcmpwK2x6L0wyY0FRdmt2dTd2CitQdS8zdnUvL1B2QUh2L0FQUC9IblBncEV2bDhBUERJc1AvTTN2L00vUC9SSHYvUlBQL1ZYdi9VdlA4U3Z2dVhpc2pZVXYvZC9QL2lICitQL0dmZ2VWanhtNHFPWmluLzVJL3VmK0cvRVpNK1pYSHYveFRlWlpyUDJSd3Vmcm52eTZMdWNvRE42RmJQVUNRRXppUVlFR0JMV0FsCitsQWRBWGtLSER5RkdsRGlSWWtXTEZ6RmFYTmorTUdHdVdCOUJoaFE1a21SSmt5ZFJwbFQ1TVpmRGpSbGh4cFE1azJaQ0VnQmNyaks0CitrMmRQbnorQkJoVTZjSUhEbXpXUkpsV2FGQUFKaHd1R1JwVTZsU3BQaEFvWkx0VzZkZXZMaml2QmhoVTdWbVZMckJ5NXBsVUw4NmhDCituVlhoeHBWcnNLaE5uR3Z4NXMzWTlPbGN2MytuWG9YbFZXL2h2SVE5a2xXOG1QRkpzNE96R3Bhc3R1M2d0NEF4Wjk1WkYxYmx5Wi9YCis4azJJTGtScDA2ZFJwMWE5bW5WcjE2OWhsMmJtTWpKbzJ6VUp1MXUybTNkdjM3K0JCeGMrbkhoeDQ3dmQwVVo3bXpuYnU3RDR4SlkrCituWHIxMk9pTVBtKytmYVpvV0pjNmhSYy9ubng1OCtmUnAxZS9ubjE0U01xNXg2OUkrQWtUKy9meDU5ZS9uMy8rZi8vL0FRelF2aWZnCitrODlBaUNxVGg1NzJHR3pRd1FmWnV5UzdBeW1reUR2d0lNeFF3dzNUZSsrc0NpbWtUOEFSU1N6UnhBQUovQkJFQXhOY2tNTVhZY3hRCitRcnRXckJHV0MyUE1VY2YxUElSc09SdVpFL0hFSVlrczByOFVmUVNTdXhaM2JOSko4V2JzVERzbDVjUHh5U3R6N0pFd0ttMFQwc2d2Cit3VHdSeVMyNS9JeEpMTkhrTUVyUHl0ek9PM1dzaTFQT09WMUxwTUEyUHlOTWwrUDQ3TlBQUDQzVDVVNDhKYXVNQVdib1RGUlJPZFdaCitrRkEzblVvSUtzMG9wVlF3TWg4OXJMYkVHdXZVVTdJZXd6VFR0Uks4ck5KVC9lS016VkVuODI1U1ZHR042OUxhV01VTHNVOXh6VFdsCitVR210bGJMbjVERTExbUdqVW5WS1h3ditjNVhZWmFPYTlVZGt1OXBVMTJtcEJZblhaNkZkcWxSbXVRWEsyR3dsYzNXVmNja3QxOXh6CiswVTFYM1hYWmJkZmRjWTBZRk55bENKTW1sSHZ4elZmZmZmbnQxOTkvQVE1WTRIdWxrWGZlcEJLMDROMkZHVzdZWVhlL1BUZ3Y3OFNRCit4K0tMTWM1WTQ0MDU3dGpqajBFTytXS0RKYWFKTUpGUlRsbmxsVkVtdVdTWktrT0M1Wmxwcmhsa01SeDlPUzN2ZERhNTE1NWpFaFZvCitqSVFlMnFKVmpjWUk2YVJsNHBucGk0cCtPcUtvcFg2STZxcHB4UHFpcGJXdXlPbXVJYm9hYTdHckpsdHFyc0dXTW0yWUFHamI3YmZoCitqbHZ1dWVtdTIrNjc4YzRiMjdVWHl0dnZ2d0VQWEhDNDkwNzdwc0VSVDF6eHdOZk9pSVRISVk5YzhzbitLYS9jOHNzeHoxenp6YUZwCitQQ0pvTmc5ZDlORkpMMzN5emoyMzJ2VFZXVys5OU5SaGoxMzIyV212M2ZiYmNjOWQ5OTE1NzkzMzM0RVBYdmpoaVMvZStPT1JUMTc1Cis1Wmx2M3Zubm9ZOWUrdW1wcjk3NjY3SHZYUXdBVUU5b2xCc2V5Z1AxaFpDSzI2bXMrbjdiS2ZJaGd2dUc3aVZDSHdBSkhtTG9jTUxUCitkN3VoL0FIb0JlY2JzYlU5OEQwRUNhTjRBd0N3RWFrYndhMFhDWEVmL01MMlFQNjFUWUZHZ2VEVWprVVI4ckV2V3JCNFgvWkFtRFFuCitQT0loYjZCZlFyYkhFUTQ2SkE5T2FOc29rR0NoWjhsUElpdDBJRWNLK0lZWVRrUitPblJJYlZab1E2dzRCQWszYUNBQUpYSzRIY0lDCitDVTRZUmVmazhRWVNJakVpa2NuKzRSSWo2QkJvT09HSU41eklGaThDT3BpUVQ0eGMyV0FYUTVqR2tqM0NDU3dFd0JKN0VSa2JRa09LCitzTmdpR3RzM3cvMWxVSWkwNmtVRjh3aVpQLzRRTFVIa28zYlk5ek5ZbU5DRVJrR2pCTERoeFNvdVo1QTExRTRldEtQSXpnQ1NYaG5zCitaRUt3OFQ4MWpoSmMwT0NlVFFiWW1VZkljVXBpNktJUUNUbEp5RmhTbGc2QnBBd2hzNzMvQVJHUmg3UmFKS2tZdmpkK3p5RWpKQ0JICitGRW1yVzlLU2hXalVKRFlhSW9iSFVaQUVCMXpmWGFxSndQOWxFeHYwMitCZEhvRU5CT2FoZ2Y0VFp6Y1Rrb2R6NWdHRmNjVEdLTzR5CitDazZTa3A2ak1pWXNzTUZPV0lnaGtxeXNDQW1BR1Q4OXpoS0R0UndpRC9mWW1TUHkwbXErVEVqK0FaSDVMR0ppY29lYVRPWnlZRWxRCitPNUlBaTRwRXdpa1hNZ3BZWVBJR1NNQ2t4WENTUWxnOG9vSHl3RWJuanZMTmxiNTBwVzI3VVM4Nlo4REJ2R0dQblhOQ1NiY0lUanpXCitrNmlFWXVNKzMxRE1odmhUSWprVVpSWGZ0dEE5RWs2anNhUU5Mc21IQkhReWxEWnd3OHJiUWluSkV1cXpqc0ZzSDl3aVJhdU1UdkNFCitZbTNvUWFuSUVQSnQ3eEZZbkpCTTBaa1FGOTdvaE9TVHAwTnVRSUx0b1U0Q2Q4bG9VUkVMcEkrQ1RxU2RHU0JURWZTR0ozcHRvTERzCis0M0tXS1ZDQ1J2R2poZXdsTTVsNGc4YjJDcE52YXlNczdtbEJzMW8xSVpuTjRrTjF5dHEzYWpReWNyMExPUUhnQkhhSzRRWnY2RVVjCitaMG0rMnNDVGl1U0xvL3IrT01pK3d5YVd1U0M2UVRqMWVkeTNWVFVoTjNEQ1V4RXFTOHNleTQvejlDSUhBOHRWdU03V0psS0Z5Q2dhCitPOUpUQWxTWU1iem9ReXBaMEt2S2RyNGNyQzFLSVlKSk1id2hVaklsWDE1aEFWeC8vdlVocGlTc1lUM1pYQVVmQ0pKSnJhVU44K0RECitpL3lNaHZLdEh3NE5hTmNMYXhRSkIvUXNlVUZNQXZNUzhRMzZURWdkdGZwQmVUZ2hyZGl5WW9ZbndzRUNwbksxUDhTWmZTTkt2bkJDCitrWHQxaEVZY1pZWVQ4Z0cwYzZ2RWlUK2p1RCtlQmhpb2UxM3BVQmNjWmZsOE5MMGJob3o2N3VjMlhBWnlnaTFGNndMZDlrR3NhbWVWCitIKzZxK3FvYXhjN0ZUUUlPZHNnb1RwdERCQ3BRYmc1OG01Z3RlZWVPN2syM3RNMHhUZ3IrMkRaMFFuTE9iK0Nwa0xFcFRoWWZXWVYzCitJWFJla1JCSEV4NXhGRk9VOHFVeGJiUkhlSmNyWXVoZW01ZnloZ3RtbXRTbFJsWVREVU5rTzdKWUtSS29zcWxoamFmZnpucldreEV4CityWCtMM1pmaHV0WkplY1NvdVlLRWJQSlh3ekFyZHF5Um5XeGxMNXZaelhiMnM2RWRiV2xQbTlyVnR2YTFzWjF0YmZPYTI5MzI5cmZCCitIVzV4ajV2Y2JZV2RLOG1kYm5Xdm05M3MxblhqME4xdWVjK2IzdXJXSFFMcm5XOTk3L3RyalZzSUYvY2RjSUduMjRXRkE5dS9CNTV3CitoWGRiblBmbWROcjZ6VGROcHMxc1Q2czQwOUFHdTRpdmJlTUhuN2pIRGQ2MWl5Y3Q0Nm5yT05oT3JyV1JHMjNsUTJzNTBFcnVPZStNCitRQkkxdC9uTmNaNytjNTN2bk9jOTkvblBnVzd6N3FWOGJMV0p3U21Rbm5TbEw1M3BUWGY2MDZFZWRhbFBIZWt4Y0JuRmF4TjByVytkCis2MTBQT2pCeWRqdnZNQ0pOWmM4UVBkQkM5TExWcGo1aGN2dmIvek9tajR1OE5wQXcrOTBidEtZRXgyN3NlUGY3ZXREK3c0ZlRIUzF0CitoL3ZoRWM4RXVZZGM1WFgvKytQUG8zZUhPNFRza0xlOGVBTHZ3TUUzdnZDSjkvemJGejg3d3RqOThwZVhmTzc2WG5yTFovNUdteTk2Cis1ejhmZXlPRlhuYWpWNzNsVDQ4Nzc0akNCYjMzL2UrQkgzemhENS80eFRmKzhaSHZlejRJWHZTMW9RTUhvQjk5NlUrZit0VzMvdld4CituMzN0YngvNmRMZzZ5QjBDaHVTUG4vemxOei95VFJGMjIza25CZFZ5ZjY1Q2tYYisxNjhkTGEvcTF2MEx3cG1YOTR3d2szai8venZsCitNV0t1Y2RnUEFBMVFNZUtQK1dxdk51d1AveHhRLythTzh4ekMvdzZ3QXNGQ0FQZE80eFNvL1N5d0ExRWlBVFd2K2VyUEFVbFFJQ0NRCis4VjV2QWoxd0JVc0NBeWN2SVRpUUJXWHdJMEN3OVVTd0wwcndBYitQOEZSd0JtZlFCVkZQZ1VTaEZvaXdDSTN3Q0pFd0NaVndDWm13CitDWjN3Q1l1UUFSUXdkZ2lqQWpUaENyRXdDN1Z3Qzdtd0M3M3dDOEV3RE1Yd0NpdGdCeVV3SWJJQUN0VndEZG13RFord0FOU3ZkbEx2Cis5djZPOWRST2FyeEU5dlN3UkdpUENoMlBEdjh1OThST2dTb1BFUEhPRHVjUEQ5bHVEeG1SUlBvUWRtelBFUEZPRU5lUEVDWHhFT1h2CitCaFBDOEJyK3NSUDc0eEZUSnhJdnNld29VUTRWcUJLa0lCVlZjUlZac1JWZDhSVmhNUlpsY1JacE1SV3BRUUNtRUJKckl4dStvQmQ5Cis4UmVCTVJpRmNSaUpzUmlOOFJpUnNSZXp3UXhUTUNGc29CYWhNUnFsY1JwcE1SUGlrSGE4UXhrR1podTVzUnU5VVdCQUFCZERjQUhSCit3aEFlNWh6Uk1SM1p4UkNZa2Y0Y1lnTytNUjdsY1I0QkpnS3VjWFlLMEFkbHNBYnYwT0lZTUFkMVVFWDhFQzBvVUI5WEVBaDFid01OCitrZ1g1TVJIOWNRUUI4djVPVUJOaG9TQVgwZ0lSY2hBZElnWXZzZ0lia2lJYk1DS0paU0xKc1FjN3NnSXpzaElkQWhXR29DVmQ4aVZoCitNaVpsY2lacHNpWnQ4aVp4c2lWZlFRckhjU0Fkb2d4U0lTaUZjaWlKc2lqK2pmSW9rVElwbFhJcG1USW95NkFkRlJFdGppRW5xYklxCityZklxY1hJZDdsRjI1bkFVMFFRUktaSVRQWEVzOFFNVVBVY1V2UkpMU2hFYkxURXR2eklUUzNJVHlYSXV5eElxSDlJaFNNOHRyMlF0Cis4YkV0OWZKSndESXVZVUVzNmRJVHpkTGYvdkF2bllRdnVkSXZGWE5IQXRNbjViSXc1L0l3SlE0dDh2SXhkWVF4K1U0SXgrRXpRVE0wCitSWE0wU2JNMFRmTTBVVE0xVlJNMGw2OG5kUkV0NktBR1pITTJhYk0yYmZNMmNUTTNkWE0zZWJNM1pkUDdCUEkxdzI4MWliTTRqZk00CitWVFA5c2lZaE4vSWtMZkFqQlRNa1JUSldTRkl5SzlJNVVYSXJPN001c2RNQW9kTTZwWE02VWFVNmhUTWhMTEk3M1M4bFRaRTcwZlA5Cit2clArUEdFaFBNV3pVc2d6Rkd2alBOdHpXdFNUTGRrelA2bmxQZTBUSXVkeldPcnpMTy9UUDlOVE96WFFJWTZnQkJ6MFFTRTBRaVYwCitRaW0wUWkzMFFqRTBReCtVSjIxUU1CWGhBVUEwUkVWMFJFbTBSRTMwUkZFMFJWVjBSVUZVRWV5U2FRaWpDRFIwUm1tMFJtMDBRK0Z3CitPVFV5SVFwUk0zTWtNdUdUTUNtVEVTMFQ2ekRUUjNlRU14ZVVSNUZVUjRBMFFCMUNTSWRVRDRzVS9CSWlNNXRVVFJUVTVCd3pTemZrCitTUTBVOXFhMEU2dVVCNi9VUzJGRVNiblVJUnJCRXR6MFRlRTBUdVYwVHVtMFR1MzBUdkUwVDkzMEJNU3hRNjB6RGxnaFVBVjFVQW0xCitVQTMxVUJFMVVSVjFVUmsxVU9QZ1JaT0dNRTVBVHltMVVpMzFVdlArbEFpMlZPWVVTQnZwOFZOQk5SN0RNUmVoTkNITVVSMVJOVlhQCitrUjJEczFSaEFSNUROVlpsdFI0M2xRQVZFa0gvRXk3QmMwQkhFbEpaN2tCeFZUOXJsZU51TlZqaFQxZmhVejU1RlRNS0ZERUowbGgxCitaVC83c2oraHRWTUFORXh4Y0ZuSDAxZGREbGlyMVZPa3RURlhraHZJdFZ6TjlWelJOVjNWZFYzWnRWM2Q5VjNKZFJ3NHRCOWh0RGJLCitJQVB3TlYvMWRWLzV0Vi85OVY4Qk5tQUZkbUR4OVNsYkZWc1Q0aGpnZFdFWnRtRWQ5bDMvWUZnaHJrdlJGRUxBMUZtamRFd05rMXVCCitCaTByRmtMVWxGTXA3Mk8vRkZsZFZVbzExdlBLOUF4aEFVdEpOdThrRnVVbzltWGI0Mkl2TTJOVGxrZzVsdjhTazJaaFZrZFZra24rCitmZFpCYk5aSWNUWm5xWFJuZGNaamgzWTlRdFpXeC9WaHBYWnFxWlpkNVpWVUVSWVc3cFZndWJacnZmWnJCZFpnazBRd0ZiWnF6ZlpzCitwVFppZ1hZOVlmQmJQK1ZhTVZaU3RCVldtdlZtemROdHdUVm11eVlmOFpZeDROWnU0M051dC9WZzQvWTYrNVl4d25VNzIvWndGK052CitqVlp1QlpjK2xmWmwrbzl4RnlOeGx4UVdQSFZXT2JkelEyRlVYZE5WVDFWVlNiZDAxNFZWeDlZNllkVnpXVGRVN1hGdCtUTWgyaFJUCithYmQyYmRkTytSUnJDeGRRRzdWM2ZmZDNnWGRSSDVWd0FYZFNiL2Q0a1pkMk5SVjJwMVZvbTdabVRUWnJVUlpwNFc1bG03RmxuNWRCCitucFpZUnpaNzJhTm9yWFF3cVRkcGlmZHhzZGQ3blZadnRhYitLOUgzUE1EWFRNVjNmR1BQZXQzeFROczNQYlozWWgxaUNOMndmLzMzCitmNXR3WGgyeVh0SENDc2Z3Z0JFNGdSVTRETXV3Zk1NM0RRRTRnaVc0ZjNOVWJZS1FXaTBYTEJ3M2ZKVTFjdU9pYnMwWFB6TzRMTlFYCithL2gyaERVNGVndTNnejI0S2tBNGZFVVloUjJqaEt2bWhHVTRKVFlZZmxtNGhhZmloZUUzaG0rWUpEQjNUUmMzaUhGWWhRRjNoM200CitXQ2EzWkNyWGlIZUZocVZtOTVDemlxMzRpbE96TmYwVVBtUFRONzM0aThFNGpIa1RPRk1YUHNFQWk5RTRqYTFZT1MyWU9aMzNmczNqCitmVmwyZXVVWFRPZzNLdkVTanRFamYyVzJlL1c0UE9UNGV1bTRqbWV2aVNXR2FmKzRFL2g0YjJmMmp3TzVmdU9Ya0JIdmp1LyswbjRUCitlVHdXZVgwYldZOGZHWThuVTVJUGo1SUpPSTh2R1pPbCtHbThneVd4Y3BWWnVaVnJjaWQxRjNDQnNpbHB1Wlp0K1phWFVtejNiMmxyCitZeXBkK1plQmVaVzFrbm5GdFlpaDJDUnltR1dWZUltRndvZFpGb2lQbVNWT21XbHNPSnBGSXBtdmQ1bVoyVnNNK1dDZTJKcUZlSnFUCitwcHJCbVFhUjJIeTFlWnQ5d3BtdkY1cWplWWhGTmlFMnQzWHBXUjVCZDR0RjEzVDFlWi9KQlhWM21YSnJZM1hyZWFDNzhYWGJlRWRoCitBUldwY2FFWnVxRmo4UlpqMlh4NU1Sa3B1cUl0K3FLUGNSa2RHSDZmMGFFOStxTVgyaHFKV1hGaG9VZEx1Wk1yT1pKQkdmUzZlVjRRCisrWTh6MllRM0dZNVJlcFEvZWFYZFRwUWp0V2RMT2FiK2EzaW03N2VtZDFwTWNUcE1kUHBYajdTVW9VU2NqV2IzSnZpcG9mb0pCWmdpCitEWGlCcmZxcXNkb0xHN2lNWFJXQ28vcXJ3Ym9XS25nQXVkZVl5eGtrc0JtUzAxbWRlWUtkSWRtZGp4bWVvZGFzenpvVzB0cVRBNWV0Cis1Y0t0OFJxdW9WaXV5eG9XT0xLdTdmcWNPVml2OTdxbHdlV2JDVHNXQUZ0LzZmcXM3enFsMXhxeENZS3ZVOXF2amZpeCt6Z2hsaUFGCitRRHUwUlh1MFNidTBUZnUwVVR1MVZYdTFRMXVVNkhXb0hjSWVaSHUyYWJ1MmJmdTJjVHUzZFh1M2VidTNhVnV4czRVd2xJRzFpYnU0CitqZnU0VjlzVm1IcG9YbnVjQnhpMkJSTStZWWVzSWJ1WXJWTzZYWFc2TTVDSXJSdTdzOWE3RzRlNlVlNlBYS2U4emR2K3ZKdTdXK1hwCit2Tm03dlVVSG5sQnc3ZGJidmVtN3ZpY0h1RkJ2Y2ZSN3YvbWJncHF2dndFOHdBRW52aFZSd0EzOHdPZEcyeFI4d1JtOHdSMzh3U0U4Cit3aVY4d2ltOHdpMzh3akU4d3pWOHd6bTh3ejM4dzBFOHhFVjh4RW04eEUzOHhGRTh4VlY4eFZtOHhWMzh4V0U4c1JySmx0eU1pZnByCit1eTJFZ1FncWJyd01nOXdtbnlwQzJBNUlzaW9xYnJUSWdPYnMyTUFzcXZnSHoyTDh5Wm1EQkdoTXRCNmlMWVNJdDlxbXBMWnN0bjVHCitpRGlvelV3c0l1Q3NjNkRCaU54S2l5U3JjOFRBQ1U2THN1WnIxYUFNeXVXOE1MWm5oejdLeENJTXdTTGluWkNnaWVLOHhoTHBXYnhjCitPOWdydXhMQ2xIQkdrWHFCeHJUSzBneTlxakQrYWM0bC9UUHlLc0swcUp2MEhDSjZZWWNPcTh2dnd0TXR6STVPU1NLSTNDWGM2MWsrCitDcnVPeXMzSGk1d20vZFVMUThxOVI0RjY0UkdVYSs4S1hiTmVDOVJmaTc1b1BMY0V5OWNIM1NMRUMzU1VITmFSSFNucWZKRzJDWHh1CitmU0tFdkhDTWZNZS9iTml0TE1aSXdJVkdTOGV0ZmN2Wkt0bkJuU3VjUUFMVVNTRjg2TmtqNGhGOEM5ak9mTWNGL1ZoV3lNQXdRcjlxCitMTlVoSXB5STNjeVlLTGJDdmQrUjRoRkVLMUt5ckczd0MwR2dhY0xldmQyN3ZUTUNxb3Iyck1hWXpDRjZ3YVVHVDd5b3k5OHhQaU5NCitLYXhleTRic0hlSGxpOWZKQzh3cDRyYzZwNEJPUzVIb2FMSldTY0s4L1RsbUxPTmxQaWFjb09Icmk0RW1hTXYrNTZ2TytNZkxmanpNCitJMExPMHR6T3FNcU9rTHgvQU96Um0vellaNzdwZFVjTUhOM3BwWDdxcVI3Q2J3M1gzazB0SklEYnpFMHB1cTNxd1Q3c3hYN3N5YjdzCit6ZjdzMFQ3dDFYN3QyZjdCN2Z2dDRSNXkyQjFzUUNmdTdaNis1MTdrN243djJmdmVFUHp2LzU3QS9SSHdDVi9BQlIvakNqL3grL3NGCityenU3SGQ5enhCdnhHUis4QVpmeURRZkhzU2J5TlpraUxUOTh0WnQyTkYrbUhhSmliS2IwVFo5bWdCdGFUdWIwV2IvMVF5YjFrU1ZtCitYSC8yYVI5alJDbjBmOW9oTG9FZWVMLzNmZi8zZ1QvNGhYLzRpYi80amYvNGViOFBZTjlYQ09NWnF1RDVvVC82cFgvNnFiLzZyZi82CitzVC83dGYvNW4ySDVheVZCU2dINXhYLysvTW0vL0kvZnA2ZFlnVEJFcVR0QlN5SlFrSXVhcFRkYWE4NkUvZEVmbGRXZi9kM0QrMWtsCitEK08va0FFQ0ZpeDVBT1FKUElnd29jS0ZEQnM2ZkFneDRrTVNBQTdLbzljcG84YU5IRHQ2L0FneXBNaVJKRE5lT2toUm9zcVZMRnU2CitiQWlBeE1GTEpXdmF2SW1USkNTTEJWLzYvQWxVSlVHREFwOHdPWW8wcWRLbFRKczZmUW8xcXRTalQzZ1NEWW8xYTlDVUFpL20vQW8yCityTWlUQXJscVBZdjJaOHlEQnp5NGZRczNydHk1ZE92YXZZczNyOXRGVnRQNi9jdHc2TUZ3NEFvYlBvdzRzZUxGakJzN2ZneTVjTGkrCitnQ3NETnN0Z21ON05uRHQ3em5zQVpVWExwRW12RlVoVHJPclZYM2QyN1ZrNk5sYkJSYWZhdm8wN3Q5VCtxcSt2eXY3dDBxeFgxc1NMCitqeFVOUERuVzA3QlNHMzhPdlpQcmdiQ1ZXNGRJRzVaUjNkeTdlMy9LbTdydjYrUVZDc2NZUFQxeHNyRE1sbi92a0xsejlmVEJUczhPCitIMzcyN2QvNys5Y2RIbjc1bFhkZWZRWit4WjU3QXk0SWkzd0hQbWpUZmRVeGVOMSsvMTJJWVZRQlRraWhjZ1ZDQ09KeFpZM1c0WURNCitCZkpaaWlxdWVOY3dsSldvWEhiZmhFRmpqVGJlaUdPT091N0lZNDgrL2tqak55L0NDSnhaZkxDSVpKSXJCb0lja2ZBNUdHS1VIa2s0CitucE9sV1poaGxscFNOYVNWcFgwb1paZ21OZW5sZFZDS0dTYVZaY3FHNVpadS9yZGhsV3YrQlNhYVVTWkk0cHpBbldsbmlHcnFhVm1iCitidzdhWFp5QVdsWm5ueERpZWVqK25qSUpOQTg5a2s1S2FhV1dYb3BwcHBwdXltbW5rdmJSWmFOblpaZk5GNmFlaW1xcXFxN0thcXV1Cit2Z3BycktabUU2cW9XWmtsUUNtZTdzcHJyNzUyT2crWnRsckczRHgzSEl0c3Nzb3V5Mnl6emo0TGJiVFNIa3RNcmNNQ2xaMFdWV3pMCitiYmZlZmd0dXVPS09TMjY1NW02cmhiWFgrb1FySWRPK0MyKzg4a29iN0lqckV2dG9jNHBHK2VlOXMxWEhINkVDNDJhb3YxZ2x1cStCCitqQnJzRjU4Skc5Z3Z3ejRKT25ERkdxb3JzVVFJUDZ6ZXdobHI1VERINmtYOE1Vc1VXNHd5VXdXWDNOTEdJa1BuTWN0QU1YZEFPemJmCitqSFBPT3UvTWM4OCsvd3gwMERiUGdiSE1nVlVIaHh4S0w4MTAwMDQvRFhYVVVrOU5kZFZLdzFIK3ROSG1rY2dBRkVKL0RYYllZZ2NkCittcjFhcTVYdmZDK25SL0xaRHAyY2N0eGM5dWEyeGlRT3QzYkh3dGE5VXNoNUc5YzIzd3JCTFhmS0t3dk9rTXQvc3hZejRoSDV2VGhyCitnVHRPZDIyRlg4N0U0WlFqcEhqa1lqVytPVXhwZXc3ZDVKUVRqdm5BbW9mZTN0M29rVjRjNkt3cmRLS1N0dCtPbDR1Vno3NDdZWkg5CitEbnp3d2o4MjJlNjhHNGw3OHNyRHhhVFp2RE1FT2V6MlpjMDM2cWtUdW5yb25VdVBrK3pQQ3hROTl6aVo3cmoxMTcrWi9lYmJpMStUCis5OStIejM1TjVDTnUvdmxicGsvNSt2R1A1UDd6OE84L2t2a0pybjcyeXhMK0hLYy9BSUtrZjd4anpqa0dBTUVJU25DQ0ZLeWdCUytJCit3UXhxY0lNUWJBWDE2cGIrSFhOMFlZUWtMS0VKVDRqQ0ZLcHdoU3hzb1F0SGFJNFB1ZzB6enVDZ0RXK0l3eHh1OEJ4Nys5NUIvcWRBCitrQWl3ZWdBcklNb09pTGdFQnJFakRKd2RFSmZZa1NHQ3NJaEdyQmdTQmFkRUtHcWtpYXg3b2hZMUlrVzNFYkNLY0pMaDJiTDRSUzZHCitybGkvYXFNYjM3Z3BVQmx2ZHFTU2xSM3ZpTWM4eG9wV2MyUWRyblFGeDBBS3NvMzFhcDBQRjhJY1JFaGhrWXhzcENNZkNjbElTbktTCitsS3lrSlJkcEF6TnFMVHZYT0pjblB3bktVSnJyR3BvMEdxNm9jY2xVcW5LVnJMUWtJbnA0U0M5K1VUcWxsTmtZeWRpZksvSU5qVnBVCis0K1prK2NVd251Mld1UFNPTHV2R1N5ajZrbkxBMUtJd04wbkZZcUt2bGl4TDVoS1g2VGorQjJwZ205enNwamUvQ2M1d2luT2M1Q3luCitPYmZwd1Q2R0xqdTZhSUE3M3duUGVNcHpudlNzcHozdmljOTh1bE1YMUN3WkRjOEowSUFLZEtEbTVLSHpEdm5EZkMyQUhBeHRxRU1mCitDdEdJU25TaUZLMm9SUy9LMEJiMDgyUFp5VVVzUGdyU2tJcDBwQ1F0cVVsUGl0S1VxdlNqdWRob3hvU3pDb3pLZEtZMHJlbEZGd0JMCitIekpub1RidHFVOS9TbEdOcW5OekhWMnBVWStLMUtTcXRLVkR6ZC9kWWdyVXFFcTFwemc5S0VJYnBOQ3BhbldyRmhXcWVIeFlWS1dLCitkYXhrUFNsVHYvbzltSEoxcld4dGFGVU5lZFdFSG9TbmJhM3JWTDBxSU5hRnRheDg3YXRTejVwWDdUM1Zyb1NONmxzVmhGRG0rTUVOCitqRzJzWXg4TDJjaitTbmF5bEsyc1pTL0xXQys0VkdMWmlVSXpQZ3ZhMElwMnRLUXRyV2xQaTlyVXF2YXpVZGdzdzR5RTJkaktkcmEwCit4YXdmY3ZxK3JCWjJ0emJGSzRmMFdoMlArblc0eEVVcFlIOHJXSXRBbGJmTXhlaGg4M1RWblRaM3VsMTFyY0gyV3R6c2F2ZTRjbExmCitZS2tMM29nK042NXlGUWhkdzR0ZWN2aTJ1NmNMcm5iZm0xM3UrbEN0NlUzdmVNbUwxYm5XTjczckJhdDc0UXZndnNvM3JkL2RMM2p2CitTMTdtOEVJY0RHNndneDhNNFFoTGVNSVVyckNGTDh6Z1QxalhYOWxSd1NRK0RPSVFpM2pFSkM2eGlVK000aFNyK01NcTJQQzlNTE1DCitETXQ0eGpTdThZVjVnVnYvNmRiQTFPM3Y5N0FiNENBbmRjRFBveStQcDR2Z3VFcis5OGpUOWZIemdDemtLQy9WeGVzeU1wTjVtK1RvCis3dmpLdTNVeTc2QXM1VENYbE1qSEt6Q1hDNXZseE9hTEFEcG9zNXZmRE9jNHkzbk9kSzZ6bmUrTTV6WWJnTXJYeW80UXFBRG9RQXQ2CiswSVF1dEtFUGplaEVLM3JSZ0JZQ240ZUZLeHJrZWRLVXJyU2w4VXlBSERjd1g2QlloYWMvRGVwUWkzclVwQzYxcVUrTjZsUjcyZ2lQCit0bFYySWhDS1dNdDYxclN1dGExdmpldGM2M3JYdkk1MUJGb3RLbHhaUU5YRUxyYXhqNTFxVUdqYWlWcytzMTI5VE1mL2lubmFZd1oyCitvNnpzN0xxbU9aYk56alpib1EzY3F3aVgydVFPS1psbmgyMXZyM1hiT3UyMnVyY0s3blZLdTl6bFByY2Z6Znh1cnJJN3R3ZTVoU2YrCitEZkNBQzN6KzRBUXZ1TUVQanZDRUsvemZ4YkQyb2JJRGhsZElmT0lVcjdqRkw0N3hqR3Q4NHh6dnVNVEI0SEJBWVNZQkN5KzV5VStPCitjb1hmWXRsZGRIZStwUnB2b3M2YjN0UzJkM0s3c3R5WGIzWGZPdGF2enJrYTgvYUttK2IwdHJsM2xmdHpmYk44alM1UGVrK0RYcjZaCitFejNNUm5jcTBwMCtWWjV2MnVkWWp5clU2U2YxcVVlNTZnakVkOWVwdXZSZjVzdmZLVys3Mjk5KzhJWTNOZXBYY1FBZzdvNzN2T3Q5Cis3M3p2dTkvL0R2akFDLzd1RGdpNW5rWU85OFFyM3UwcnQ2cWF1WDUybjM1OWdHRVhlNURKbmtTelI1Nm1XbWMyNURkZjA4a1RjZWlXCitGelBtc2FoNTBEczM3Y3hzdXVvckt2b3BrcjcwVWo3OUxsUC8rb3AydnVYK0IrazBzbjhQL09DYm10VnpCL3RWMU5DRzVDdC8rY3h2Cit2dk9mRC8zb1MzLzYxRSsrR2d3L0oyRUxmL3ZjQjc2eUhjL3RnN0Q1MHVRdnYvbnJ2T2ZpVS80cVF1aTErOThQLy9qejJ0SHF2LzFCCitCQ0RwOCt0Ly8rVFBOUGpiL1htNWQxR3hKMGFWUjN2dlpYdkloSHNDS0ZHN3gzUUJ5SUJCaFgxckFtWUhpSUFUV0NicEZvRVQ1WUJxCitCNEViR0ZFRU9Fd0dhSUhGbFlBenRJQWc2RmFzbDAzNVVnOWVBSU14S0lNelNJTTFhSU0zaUlNNXFJTTdDSU9KZ0lGZWtoM3JFQUJECitTSVJGYUlSSGlJUkpxSVJMeUlSTjZJUkR1QTQvYUNXWU1RRThhSVZYaUlWWnVJUDF3SUtJczJRcUtJSDFKM3NITVc0bENHQW5lRVlwCitDSWIrSGRoNkh3aUdEU1dDMERSN1pnaGZhS2cxR3ZpR0svaC8vR1plZVRoUmNXZzBGVWlIdzJXSHBxU0dLc2lHTGVpR2VRaUl0a1NDCitnOGhYaFNnemVPaUhpZWlGK2JJRjlxQ0ptOGlKbmVpSm53aUtvU2lLbzBpS3BhaUpnaUNGVHBJZHJwQUNyZWlLcndpTHNTaUxzMGlMCit0V2lMdDRpTHJlZ0txVWdrWmlFR3BnaU13U2lNdzJpS1c5Q0Znc01jWDRaY01zZGVkRGRmMElWdTBCaCtQN2FNUXVkZnpaaDVoNFJZCiswL2hrMWVpTTFJaU5xS2VOMHFoVHZVQUM1NGlPNmFpTzY4aU83ZWlPN3dpUDhTaVA3emdLM2doMm96Q1ArYWlQKzhpUC9YaU85UmlPCit0K2VQQTBtUUJhbVB2VUNPN3dNQUM4bVFEZW1RRHdtUkVTbVJFMGtva1JWcGtSWVprRk4wa1J2SmtSM3BrUi9wa0JtSmdpQkpraVZwCitraDZKWHltcGtpdkprbTRURUFBNwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL252MTJtdC5naWYuYjY0IGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL252MTJtdC5naWYuYjY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4M2E3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvbnYxMm10LmdpZi5iNjQKQEAgLTAsMCArMSwzNyBAQAorUjBsR09EbGhGZ0ZuQU1abkFBQUFBQVlDQWdBQVNBd0ZCUUFBZEVnQUFDUU9Ea2dBU0NvUUVFZ0FkSFFBQURBVEVqVVZGSFFBU0RzWAorRjNRQWRFMGVIVk1oSUFCSVNBQkluRWhJQUlNME1vazJOSTg0Tms5UFQ1bzlPNXhJQUhSSW5GbFpXYXhFUWJoSlJnQjB2NzVMU0xoUQorVGJSVFVjQlJUckJYVmF0Y1dzSldWS2RmWFc5dmI2VmhYMGgwdjhSY1daaHBhSkp1YnBCd2I4WmlYOFppWUk1emM0dDFkWWQ0ZU1obgorWmI5MEFJTjhmSDkvZjhwcmFjcHRhOHR0YXN4emNNNTFkTTUyZE01M2RjOTRka2ljMzlGK2ZOT0VncG1abWRXSmg5ZVBqZGlUa3QrYworU051YW1kMmdudDZsbzNTLy81eS9uT0NxcWVLd3IrUzF0T2E3dXYrL2RPakJ3T3JHeHV6S3llM0t5dXpNeTV6Zi83L2ZuTy9TMGZIWAorMS8vZm5QUGQzZlRlM3ZYajR2Zm82UG51N3IvLy8vdjA5Ti8vLy8zNStmLy92Ly8vMy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3lIKworRkU1V01USk5WQ0J0WlcxdmNua2diR0Y1YjNWMEFDd0FBQUFBRmdGbkFBQUgvb0JuZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXVworbDVpWm1wdWNuWjZmb0tHaW82U2xwcWVvcWFxcnJLMnVyN0N4c3JPMHRiYTN1TG02dTd5OXZyL0F3Y0xEeE1YR21rTTN5c3ZNemM3UAorME5IUzBDalQxdGZZMTlYWjNOM1kyOTdoNHN4RGxRRGo2T0xuNmV6WjYrM3cwdS94OU0wQTVyLzN2dnE5L0x6K2tRRHFFcGlMSUM2RAordHhBeVVsaUxJUzJIc3lES2tuaUlJaXlMcnpDNjB0aUtveUNQcTBDcUVwbUtKQ3FRSmsrbE5MV3lWRXRTS1BQSjNEZHowc3RSTjBYbAorRExVVFZFeWFRUHZWbE5UelUxRlBSenNsNWZSVGFOQi9Rd05HSFRpMUlMNm51NVp1MHFxcEtWU3NWTUUrNHBxSkxDYXpsOUJhOG9xcAorakFJQS9nVENJT1hrVnNBVm81Mk9BQUJnVjZrbU14cjJDZ2JpbDlMTEdoL09JSjZyNlFnQkxBZnVNbTQ4WVl6UFQxc2lGN2E1cVV5RAordTFIaWJ0YVVXZkxvUzU1TlQrYTArRFNrbHFYUHhLNUVKa3VobTdOZFY4cE1ZVzlpM1lKc1Q4cTk5V3FtMk1Rbi9jaWhaUkJ1emFzdgorUmVucmRnbndNOHVGUXpwU09mcnJUY2loVzVLeW9naVlNODlWRjljVVdxN2kzK3NSVFZsQjVMeWo2bmdOZC81OHBuMG1NVW1ZNEVSNgorK1IybkdXQ0VNYlVJR1FFMlFVWWozRm5tM1ZpYklQZ2VKMTc4a0VGejRJbW40RjhhRUpiY1dZMThFY1FMVml6aVZvSVRPdkxTRmdYQQorNVI0aVZ2eGc0NDA0NW9pakJ5QVUwUU1JUUFZcHBKQXdQSGhJRklMeC9xVWVpZURGQ0lCMWlnakJnNDVVNG5oQmxWU2FBRUlRWWlUaQorMkl6WExiVEtGMW1VYWVhWmFKcjVSQWM1YUtlSUZTdHcwUkVyVmVoQVJacDRtcmxBbm1sQ3NjSUxVOHlwM3k1aUlMRUNCSTdBS2FlZworcTNEeFE1Y3VNZ0xnQ2c1dVpCd3VUcGlBaEJnUUtacVJLNDVDS3FZaWZ0WjMwYVcxV0VGREVGNTh4SWlubjRMNmFDTUlhYkhERGh5ZQorT3FndFlnU1Jvbk9Md0JxcnJLSW1nbEFRVWp5RWFsZzB4amxSTEtFdW90YXlGSW9saUxDNndoS3RzVlZGYWkyMjJXbzdLeUxUN2twVQorVmVDR0syNnhoSlRMbWJsWkdaS3V1dXRXMUMydFVjMUxiNzIzM1R1cVU5YzZtOUF0MndKckxiNjhKRUVHUC9yRzR1NGlCYVBucjdTOAorL29oaGdzUm5OT3h3TGdVL0xKVmg5WVI4UXdzbDNIQ09DeUhJSURJOTg2eU1qZ3drektCTXl5NjNnMUxOOEp6QWdza29xNHd6T3pULworM0UwTUlJaVFnZ00yQ0cwenRiVzg4TVVaREFnYzd5NWFGbEhCQ0RzazRlYkE4TnJ5eFFzWmQ3RG9WN29JUWNRS0JweWhSUk0vak9DRQorVlYzWDhrUVJjS1l0Q0Juc05zUUxGSFNMUFFqZWNMK2JpOWx4QXBDRkVqdU0wQVN6dVh3TnRkU01mNXlMbGtRRUFjSU9TbXpOOVM1TworQTZEeHMzSFBvZ1VJT1NCaFJRQVR5MUxFRS9kOHZxKzN0NUJoaEgwWUE2ekxGRUxvNDdxbG9jTkNoaEMvdW5vd0xSWXpETG5ldmJ2eQorZS9EQzI2NUxFcWdQc250SVRDc1B2Q0VlZjRmVjlDVlZ6OHJ5L3ZZT2p6d2gzS3ZrdlNyZ2grOTg1QUdQRGJyZ3ZsOVBidW9STmV2KworNndqSHp6ejI5TDh2Ny9HOGcxOHIwc2N0OFNrckVlWFR5ZmtpZ2FTOXNJZ1JCQ3dnZS9iU2x6Qk5BakFWL0JBQ0FYZ0lHQW1tT3hvOAorbHliSzhBQzVUR2RKaDRpZ0JBdWhPVWFVWVFPV3FRRUlNVkdiMmpWR0FoNmlSQTBOOWlZT0ZtSkU4UkZoSi9DeklQbjlxeERab1lSLworTkxFY0JOQ2xBVXpJSVNXV3c2Rk8rWEFRUU96S0FvY2p4VUtvVUJFSW1ZK3BJQUVZK0doQ0NoMHdUMk9Ba0VWSmtNYzhFdEdZQi9jQworcFJCS2pqVm1US0VSODVmQ0JobHBFUTJjNFNZR0VLQzNYV0lMQ1FoREd5VUJJQk5FNEJHN08wSUd0Wmc4U2tSSUVWK2syQ0pNL29TaQorUjBnU2hXczVRNGFZWTRrYWlLaUxsdkRDQlVqWkNOY1JNWWgzek1TWEZ1RURIR0FKUzFlNjVZMjB4S1ZHdlBKTnVyVFNqVWJRb3g4TgorNlpoQW9zRWYzWklrQUR4UVhzSFUwUVdJNlNOa0lyTklLbEpBSFNrcHdFdklVRUtLNkFLZnhybW5jWmJKVDRCU3hCWlVJSWdUbHNpYworWnlybkUxYlFKa3dzOGd4a2dpZWFJRURQRmthaUJsQ2FwUjIxZHh3bjdVV1FURXJFcENxbENNQlFFSlJyS2RRS25rQWFWRktpVUIyZworYUVFUENrNVlFcFJzaHlnVjdWd1JBVTNsYlJhWlFzSUErcWMra0JMQ1ZyaUtoYW9zMENwY3FJcFZOcHhhTndOWENHVEpvbGRXeUo1QworZmNWRGwzNVVwMGJsS1ZKanlUNmxOdlVnVy9UZlVwKzZqemtoSmhXcUJxeGZKUSs0UHFkNkZYWlhyZXBVdjhySHNXSzFxMmUxcWxuRgorU2xWYnNLV3Q0d3VyVzZPNnNheEtGYTVnWkNuKzVtclhpaWpOWm44RldtRFRFYlRCdXFNU0hERHNPRENnV0hFd3RySGVlQ3hrdWNHQgorWTFqMnNwak5yR1kzeTluT2V2YXpvQTJ0YUVkTDJ0S2E5clNvVGExcVY4dmExcnIydGJDTnJXeG5TOXZhMnZhMnVNM3RMUUlCQURzPQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL252MTJtdF9leGFtcGxlLmdpZi5iNjQgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvbnYxMm10X2V4YW1wbGUuZ2lmLmI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTEyMDc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL252MTJtdF9leGFtcGxlLmdpZi5iNjQKQEAgLTAsMCArMSwxMjEgQEAKK1IwbEdPRGxob0FIa0FPZTFBQUFBQUFBQVNBQUFkRWdBQUVnQVNFZ0FkQmdZR0hRQUFCb2FHblFBU0hRQWRDMGVIaWdvS0VJbEpFWW0KK0pTNHVMbHNzS3pZMk5nQklTRkl5TVFCSW5FQkFRRWhCUVVoSUFGQkJRVmhDUWtoSVNGNURRMk5EUW1kRFEzTkVRMDVPVG9OR1JIaEoKK1NKeElBSXRIUlk5SFJYUkluSmRJUmxwYVdwcExTYUpKUnFwSlI3QklSYTVLUjJOZlg3SktSMkJnWUd4ZFhXbGVYbVpmWDMxWldYSmMKK1hIcGFXUUIwdjI5ZFhMWktTSGhiV29sWFZwVlVVNUpWVTU1U1VKaFVVcWRRVHJwTFNLOU9US1JSVDZGU1VMUk5TN2hNU3JWTlNyNUwKK1NMOU1TcjFPUzd4UVRzQlJUcnRUVUw1V1U3bFlWc0pXVkVoMHY3ZGVXNHBxYWI1ZFc4UmNXYmRnWHJaalljWmdYbmQzZDhaaVg4WmkKK1lMOWxZN1JvWnNoblpiOTBBTEp1YkxGd2I4cHJhYkJ6Y2NwdGE3OXdic3R0YXF4NmVjeHpjS3Q4ZTRhR2hyOTNkYzEwY3M1MWRNNTIKK2RJbUppYjk3ZWM1M2RjOTRkcWlFaEtlSGhraWMzOUYrZktlS2lhV1BqOU9FZ3FTU2tiNlBqdFdKaDVxYW1xR2FtcUNjbk5lUGpaK2YKK245aVRrcjZhbXRpVWt0bVZrOStjU0w2ZW5kdWFtYitqbzkyZ25yK3BxZDZsbzdPenM3K3dzSFMvLzdXMXRaeS9uT0NxcWJtNXViKzQKK3VPS3dyK1MxdEwrL3Y5Ky9kT2E3dXYrL2RPakJ3T3JHeHV6S3llM0t5dXpNeTV6Zi83L2ZuTy9TMGQvZm5QSFgxK0RnNFAvZm5QUGQKKzNmVGUzdlhqNHZmbzZMLy92Ky92Ny9udTdyLy8vOS8vdi92MDlOLy8zOS8vLy8zNStmLy92Ly8vMy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8veUgrRVVOeVpXRjBaV1FnZDJsMGFDQkgKK1NVMVFBQ3dBQUFBQW9BSGtBQUFJL2dCckNSeElzS0RCZ3dnVEtseklzS0hEaHhBalNweElzYUxGaXhnemF0eklzYVBIanlCRGloeEoKK3NxVEpreWhUcWx6SnNxWExsekJqeXB4SnM2Yk5temh6NnR6SnM2ZlBuMENEQ2gxS3RLalJvMGlUS2wzS3RLblRwMUNqU3AxS3RhcFYKK2g2UWtXZHJLdGF2WHIyRERpaDBybHBGV3NtalRxa1ZyZHEzYnQyN2J3cDFMMTZ2Y3Vuam4zczNMTnkyalZSVS9NS2hBdUxEaHc0Z1QKK0sxN01lREdDd1kwalM1NGMrVEhseTVndlc4N011ZlBoelo1RGN3WXR1clJrQkdrcXZnQUVkUFZQMTY5Wis0UTlXM1pQMmhKeDg5U3QKK2szZHYyN3VCQjQrdFd2aE8zemlSSnplZVUvbE41eldoSzVST2s3cE02OWVaTDIrdC9YbDNodGhqL29aL09aNzg5K2puMFJPbldONWwKK2U1YnY0YWVmR1g5bC9aVHg3K09mbjUzNyt0ci81Y1pmZndBR2VOeUE0aUZvWG5IK0ZlamdjQWIreG1DRXpTbTQ0SU1RM21iaFFQcWgKKzFLRkpINEs0b1h3TmFqZ2hoaEpTdUoySzNwMW9Jb29wdmdqamloT0ZXSktOSStHWTQ0ajI4ZGdqaStENXFKS09JUkZacEpBZUlwa2sKK2tBdlpPTXNCQUFqUXlrZE9IaERBSjFRcVNWQWhBQUJ3cFVjZjBpSkNsMlRTMFpHTm1aRHBTSlljcGVrbGxtZnlhS01YTnRSQ1owYXYKK2pFSlFpSVVJQUFvQmNNYkpVU0VVeEhKa1FhK3dnbEVwZ0dLVUo0ZGExdkxrbW4xT2laRXNvVUM2VVNrRHJKbUpsSUt5Ritrc0NXRDUKK3FhVVd5ZEpGSGFnSWhDT2ovb0Z5RkNLcHNZSXAzQ1pQUkNLTFJYZGV1bXFyczVaYXk2a2F4VEdHbmlFU1MydW9OVVlLYXkzUFpoUUoKK0ZZbkk4bXFqdG01S3dBVmQxcGx0UWFuZ2tZVW5GRVVyTGJVdFJHcW5BS29jc09aR21sRHhSd3lSWnZMbHBNd0txQzJXNW1MRXloNVUKK3pLQXV0TmptZTVHOVdPSnI4RUNlckpxS1JJUWF1dEcvUnNqUmtSY0FGTnJSSzRrVVlRWkhHSHQ1d2JzYjVlZHNvLzFtRkVvUVZyUzYKK0w1c2FFV3VudDdKK04yMjFEeW5jVVE1T3NKclJrMlo2QVdwSE4xUnhiRWM2YTJUeVJzdktqSkFuY1VRdDlkUlVULzNERVVnY29mWFcKK1hIYzlDRU1wSzMweWxtS2FhUkFlYkZTdDl0by9WTEcyMUYwY1FZVW1Ea1hNRU5SdnMxM0YvaEZMWE5IMTMxd3ZncEN5N3Q2ZHQ5cHQKK0wzSEVIMjBBRHJnV3V5cmt0Tmd1WGxUMnpBdWxFc3JtbkhmdWVlYzZLTkVGdVF0NVFvVXBZQmRjODBhWGgxMUxKMlZ3OHZuc3MrZGcKK0IrMmNIM0lFSGc4ekJIUkRtdU5PZXc1bVBERTZSZ2dUWE90QndRdnZlUTVvVURGR3BuZWZ2dENUTkpjc3A3cWNSb21xUnE4UTRuRkQKK3BxTXVPWmx2TG14Ujl3Q1FiSkFwY2J6U2JFS29HRXQ5UTVWKzlJb1BTbEN5RVpkZGNoLzRkc0NFU2ppa2ZBbDVVcmRnTmorZVVPSUoKK2g1QkJlaEI0b1pUQVQzNFI4YzByRHZFRUE4YmtnVHZvZzA5QUtFTHlXYThsUzlOSnczd0dIUXBXMElMeHk2QnhIbmdJREw1a2hhZ3cKK0VrZHdTQjBYa2toVS9qcEJ4UmhJVnd2bitOQTlBNFBJQlNHaUcwejRMQ1pDSkowT3dWY0hLVTd3aEVpczNJRVNjc1FzdG1TSkRwbWkKKytpcFVPaXg2c1lFejZ1SVpXUUxHSURGSlBWdzA0eHBsV0NLQ3FIR09LMm5qZEpKNEtCYmQ4VWRBak5BZlVjaEhpZWdSSVdKY25Zb0cKK09hVHQxYkVXalB3aFRBNXBrRVJxNzVFQ2llUit0QmdqU01xUlBvV2NDQ1gzRk1wdm9VaVRtd3lrZzFBSlNKbU0wbFdsSENPTk12bkoKK0JISHlKdFdDRFN0YjZjb1lIc1NTbFBzSkQveGd4MXJhVXBVNmVjVVRpc2lhWGZLeWx6WWs1UnRuOG9vaTJNYVpTMEptVGphQkIyWmkKK3M1RTNNY1VhZWlmTkdkMWtFME9RelRkUEVwOFRZS0V2OEJ5TEd2UmdDUTFJb1FtSy9vaW5QcitpZ1hmdUU1NklPTUlVM2lDSVNXeWwKK24vOU02RUg5cWRCOXFpRUU3elFFUGhzS1R3M3dvU0lhZ0l4cE5xb1lGbUNnQWc1WVFRWTRTdExFR0VDakpUVU5EbzVBQWhNQUlRVWcKK2FBQktVMXJTazlMMHBpeFlBQU00NElLUjNwU2pCa2lOTm0rU2lpeEEwZ2gzbUNaTDhBQXcxSTBpRWo5SWd2OWt0Sk9pdm1BT3hvUWoKK0duTlNpVCtZamdheWtVVTBXNFFUVEhqMWhDL3d3MWpKMkpPdTFvQUo1cXVGV05tNlZad3c5WFF2c01NaXpyQ0VTR3dSSjBYMUpPcUEKK21SSENYb1NwU0sxRktQYmFWN3JxYXlkUE9NSWU2bkNFS0N6aWZwMjBTUlllVmo3RFhzU3pGWWxzRDZ4d2hETmM5cTkxdGNrb2pqQ0cKK1EzZ2lYVXBsL3NrZlBQalZXQ3B5SjZzZHd3N21FTGtNUFJZbnNnaUVvbUFaMjVWd2syR0pOZWRNZ3FzbzBONnlJYzUxaUN6d1FFUm0KK0ZsY2x5aVRJVytPS1d1QlNsN2pLYlpKdEtUTGQ2bG8zdkREQm1hdXd5bDNIMnFTOG1rSnZRcUs3RVBnV2hMNi8xZEE2czNrVCs0S1gKK3FuU3NpWC9MQ2VBdDdsZEUzalV2ZmdPYzJwY01tTUMraGRDQlNiSmdoRHo0dkFWK1NJVUpjdUg0WnBpdUV4YkpoZ3ZTNFJGRDE1RXkKKzZiQ0hJOXpkRUlQRXhBSlJNWXpGKzl5VXFIakYzWTJ3aTAwWmt4dlBlSTgxUHNtTmNaelpIQXZXSmlZZThvL25pK0tZbGVraFF5YXkKK1FCSWxFVGQ5Q1h6SUdwaVlya3lSUjFXU09jNWtYOFlrZGttTVBJbkxDaHhhL24yL0MyU0VZUFo2VmdyVW1aY1g1RGIvVEFGVFNoNUQKK29pemxXdUJLVnprcmdhRzhvTEdNcUtvT054aFlJU1NnT29rYzJtVjkzcVhyZ21tUlB2MHBVSGZxbFVMNHJCejdNY1RTMkFJMW5ZZXEKK1lUNG16Y0pzUG5GQ3dqV3VLcXRaV2tZUVEyL05uQUJJTkhvaU4rdXRjbGc1NmNKcUtWcE5lN1ZCK0l6aGcyeUNDbnNZcmtMNjFldjgKK01wZ2p6WlpycWxXdGtCV1NreUZpeXA1R1lzQUZLbXhDSTRXZ1E3UWQ4aTl2Ly9jZ3FCU3pBSDJ0a1dnOXE5ZkVMdlpCWkpHSVhNM2EKK0lNeStkWjJaL0JGTm85cThibVJJcmhmaXBrTFhMQlMvdWtncEN0Q0tjVDhFNGF4cVlWWVJVZ2d1VTFyaDJIcTN2cVVOY0g0ekpCVjEKK2FEVkMvdkk5NmdhSE1ZbDJVd2djd25BNHhMbXQ1WEdJMjl6d1ovR253VnhxYllzYTFod0hPTUVaeEF0bW1qVGViajQxdmhHQjUzL3oKK3VVTk9qWkVQdVJ0bEcxODUwZU9RODV0SHRnNXJWUjVCSEg3eWZVTWtmd3M1aGZPR2Q3dXhoMEozdkdzSTB3M1NQTFBiTGhRUFBCNUYKK0ZJZytzNEhMN0orTGV3MU1YYmpiWWh4T3dmNGVRY1NPOTgyOTNleVlvRUlXdm4wUWtwZlo1QlFoTkpsNWpKRDZUVzhocFlDQ1FQUmMKK3NqNFE0Z2xUelFqWEdSSSswTXViVis4QysrUC9McERMK2Z1ejZlRVlGUUE5Y3RXTlB1Q1FsNGlZeHl6TFdteXdndzBSVTVkcW5wSFEKKzFSRGFHNDhJRFRFWUl2WVpmUFVVY2RQdytUVUE3MEhmSUlsUGRrS2svdjhtN2hNLzl6Um0wZkpoMGpBaDVBRW5PSVN3a1lzOGtGR2MKKzRReDZPaWI0dFZvUUowTGFKVkZjY2hTL2ZOMFhGcVFPZEFOS1hrY2dIelpMNitkZTdOZDEvVWRJbUlTQUNVaFc4MWNkNDNWeExPYUEKK0ZnaUJ6bmFBR0ZpQkJxaUJTTlprQmZpQkRkaUJEeWlDcEhhQkppaGZCQmlDOVBkc0hMaUJIdGlDTVNpQkF5aC9Md2lES0ppQ054aCsKK0ttaURPMGlEQ3loSkdWaUNNa2lFUU5pRE1KRkNTT2gvTXlpQVFmaE1URFNCRkdpRVIvaURWZGlFQ09GT0ZQVlBDTFdGOGRTRlhsaFIKK0RCV0dlUUdHWkZpR1kzaUdkR0ZSR0RWVFA3VlJOdldHSkJXSGNnaFVibGlIbmtHSGVGZ2FlcmlIZVNoVUVlaUVMRmlFSkppRFZ4aUYKKy9pT0lnNFlvaUlQSWlDNkloVDRJaVVrb2hleTJoT29uaVV4SWhTdG9oWnVJaUU4SVRwK1lTcGJJZ0NkWWlJcG9panJJaVpGWWFvbVkKK2lwaUlSNXE0aWdvNGlrS29pcFBZaW9SSWJiUUloYkY0aTZISVgwTzRpSjNZaTVrb2pMS29pNDA0ak1ib2k3c0lpb0dvaktjWWpia28KK2pZZklpci9JVHBUWWRObG9FVXZtY2NuNFM5dklqZUZZaXRUb2lLOUlpczk0aks1SWpMQzRqTVdJakxiNGp1VUlqZk9vamp4b0VYTTIKK0VOSm5kOXI0TTNHbWo5TTNoUk9SajV1bkp0YzNrUDlZa09sVGlRZnpaSklDSmNJbWpobXhqd0pCa0F3WmpGL25KOWd5QzNnMkxOK1gKK2poU25rWUFuYUhieWZEVVlrcGRXa1lXamVyQ0hFYUltRUp6aS9pa1JDWklId1pGNTlpV1pwbTBTZVJFMjZaR2Y4SklDT1l1c1Z4QnIKK1I1TzF0enlUYzVJSkFXekNrcFJLZVpTYkJ5ckwwbzlNNHk2QkY1UnoxM2UzZDQrUFdDNjN0cFhlT0pRRGtXMVlHUkhtSWpUdHNtNVAKKzJYallranhGMlpVVkFTc2FWM0p3NlpWd0FwWmhXWmRtZVd1dkJ4RmVkbTdyVXpBRk4zazd1U2lxZ3pFbVdaaFRwbXdRY1piRE56SmQKK0ZuK254eXQxTXBjVmdTbDlGbmswZzVlSUJJS0JXU3NwTnhHUEJwaHhlV3NWUjVmV2FKaUFkd0JCTTVOMTlXZjNsanJMODViMWxYQjgKK29qR1dXUkhHa21YL1kzQ2NDWTVyaVcrcXc1SVVrV3RPZDJ1MG1acERTVGhxbVZxczFuRkxlV3RPQ1JFM0Exc1pBWFpYYVJIeC9qSXYKK1dzS1N2OGwvNU5pWUJTTjVHbEZ1QXROdUdhZDVQbm1SbjdsNVgvS2RsNWhKRHVNUUtZTTkvcklIRlpNUjVObDZJaEEwT2prUkhETSsKK0dMR2ZBd0dmOFNtVTBZYytWN0o3aVNrUks5TXlEVWttVnlKOEMwbVZGdUY5V0FKQTdYT1FBekZ3MjZlZ24wQjMvMGtSUFBORTVWSjkKK1pGSW8zZU9hRTFFMFJ4T1hLTm9sRkhBSklNcWVucWdTUXpkMVY1TTFTTWMxWDRPT0pvRTJVMGMxVmZjMk1oZUFHNUdqTjljMmZPTTMKK1BibzFTb2NSU3RweWliTTRqZk9rUndBNXZJaWdKOUYyaFJjNmNsZHRFMGRoMlFnN3NsTjRuWE40dUlOMjE1WVJYdXAyeFJPbUtQR20KK3pnTTkwdk5tVHpPbWZXU1VLeEUrQWxwRzdlV01KL0ZLL2x4SkVKYUhwMzNLUDZHM0U2OUFRQjVVUFlHS2pjR0pFalFrUVpES2pDaEIKK3FIazVaUnowcUM5QlFpUDBCQ0YwUUhvcVlwNXBFK2tuY1pFcXFKbnFTOG9wRU9OSGZyL1NqWFkwcS9PeFk4RkpxN1d3ZjZSWlRLdksKK3FxMmFkWGxwZnpMQnE3cnFlMVhVcXdXQnE3azZqcVhJckMzNVJhNktlL0VvajBlR3FYcTVqdGRLanlXaHFRZGFqK29JcmMzYWdPSWEKK3JTN2hyY29LcnRqcXErYjRxa1pXcnVaNnJ0UGFtZGNvcWVoV3F2YktwN1VJci9FcXI4S2FtZHBLZ3Z3YW5uWkdWUU9ybUMraHFjZjYKK3JUQjRzUHE2c0FUbXNKUHFFWVFLc2VtNmdSS0xrZFNxRTdta1R2aGFpNU0wcndBN2pUWXhUT3lxcmd4TFRjdmtHaGs3L3JFZk1Vb1cKK081azRVVTNYOUxIQStoQmFxSVowSVFoa1VFOVlJRkg1cExOd1lZWkNLeGFLc0FXTndFOXBXTFJyUWJSTXF4YUNnQUwrQkxSUG14WnMKK1NCRVo1WWVoUVFJZVVBRUdNQUU5cGJWNWVJZGlxeGdiY0FRcU1BSWRZQUdFMFlkbGV4bHUrN2FUUVFJUU1CZzg1Vk55S3hsQjViSWwKK3NWbTFzRjNOT0JLUjlRZDRzQVJua0FnNTRLd2FXeE5aQUFPQTBMTGpXbFZHNVFuSjlZMHFjVmRPQlZWU0ZiaGRtZ1ZYWmJOQW1xMHgKKzBWVzFGV1AveXEwdVlWWVVsRmFuVzQwMzRWWndOUkJ6aFlxRmFoT1ltMWVNNVZmczJMbEhGck1XaTFoSnRWaDhwYnNvTzdJeEVWbVQKK1ZWbW5WYTBvNGJlZHBiaWlLeE9pUlZxbWhhaXUvZ3VQcXNWYXJtV2RscXNTczBWTFlGV3ZJNUZidXhXYnRGdXc3eVZjeHR1dU0zRmMKK21WUzV6R3RqNnV1N3A3cGMwMGEveWJSTUF3RzQzYXNTOW9XL0JNc1NEd2JBT2FGZVJjUmUvWXNTL2tYQWl5dkEwM2F4SklzZWtCdkEKK0RseGREQnk5TnZiQUVIeTlMVExCRFZ6Qjl3VzlOL3JCQ3F6Qkc4eStLK0xCSTJ5L0FIZkJLK3hnSm56Q3FIdUVLc3lsTUZGaUl1eXUKK09nekNtK3FPTDFUREczdkRNZXpDTyt5L01ieStNK3lJUUl5K01BeWRNbHU4TWp3U25KYkROb3lBUzB5dktYYkVUeHl3UVl5UUZyZGwKK3FFbHN5RUZsUzVlUVl0YWdEL0VvSFdLUnRRQkFINWtRZnhtZnJKU1BGT3FRL1pxZ1hXSTJGTGxuV3Z6RTFuc1EvbnRzWmFoWnhGMGMKK0VVQXBFSXVXZkJ4WHhiRDVhU0lKazRvTUVZZVdhQzc1eUlpTXhudVdjQWVxU1lkY29KRmN4UkRSa3dnanltOGNZMzM4eEo1MlBSMDUKK3lpUkpvQWo3d25ZNUVLUmlheVVYYjAvOG5BM3hkSU5NbmJGbXZycTNrY0ppRVI3NnhPbkdseU5Ld21Yc1ByUXB4dDl4Yk5xbmRuMFgKK2xZSkh3Y0FwZWdVVGJwTm15MXNNU2ZPNWJCa1hvODBwRWR4bWJrUEpLTndDQU1mTUVPWEdlRVpVcWlsam9GR2N5N2FYZlBFR0hmUm0KK2I3STVsaUtRenJBTXludDVsd3puT3RxOHpRSXh6TUs1UEtmcGF4QjNmNzhNSjI0WnpST3gwS3FhejF1Q3lSanNFSy9YbDdKN3l1c0wKK2NpS1hFTDB5bUdWWnV4TVJMVUNuZFFZaC9uVkRXcVNIYzZSUVNaUVFiVWM2K25JN2g2VkhFS1dRN05CRG8ybFRlbk5HWjlNM2pYbXEKK2s1ejlQQkdoMmNhWXJOSkwrbkl3ZDNYQ2V0UnRYTXFFVE5JTi9aRG9Bd0Q4S0JDRWg2YWhvS2JPdzZZdlRSQkZTYWU0ODNaeDU4UVUKKy9TeVhJeEJrN1R4NjkydkRhZEVYdlJBc1Nad0ZzZFY0NTlYQ2szaUxGNUxUVE5UWU85VVA4YzZmTE5pSDZzMXc0Z1dweDZKTTVIbW0KKzE1NjEwRHFGalJDbDV6L0hLV2VzNlhjVjRjcXViS01HSVh1MDkzTytxWjZjOThxQ3pSQVk2c203N00rLzU2a0dnYUhPUjVnVllYeXQKK1MzQTF5ajdoekJDeHFoK3BiZGVtYlpZeG1qR2lFTnh5N2MrMWtIMk1XUkFNQ2d0alVxRjNmTm9vSEtzdS9sRis1M2NUNllmRTlwaUwKKzdnZC9TVnpOTTBLc01KRi9WRndRdkpxeUhCeXdBSGplVEx5N0lNdmVXM3ErS0Z6SThOM2QyUjNmWEJ6QlBlekRvWHVPN2EzZi9SM1kKKy92M2VVQ3pnOTYzZStUM2Y5VzNmQnE3Z0RJN0ZuSnV2Q2Z6ZkEzNnp4bzNmOUwydUFVN2dDKzdkRWE3aEc0N2hHUzZLeUp6Z0pGN2kKKzFtcmhKbTdlSDM3aUs5Nk9DQTdpQVA3aUxON2dLZTdpQlg3Z0V5N2k4ZXZoTkE3ajhwM2p3TGpqRkM3ak5yNFFPVnUxYnVHMFNENFcKK1NyN2tZdEhrVHE2MFVhNFdVRDdsWEhHMUU1RzFlWnNaY2J2bGpOSGxYcjRZWUI3bWlESG1aSDRZWm43bWJRdUlJKzdqS0Y3akVuN2oKK0Y2N2lQVDdqYzc3ZjdqM2tQeTduL25BZTV5MWU1SDhlejI0ZTZINWU1M1krNkRqTzU0aHU2SGdlNGtGZTFFQU80VUt1NC96TjR4dysKKzZZK2U1NVN1NlpsZTRZU3U1NHArNkl2ZTV6RkwwSXplNkpFdTZlNWQ2a1RzNktyTzZhL3U2YWR1NlgwTzZtOHU2blIrNTRVKzY3YisKKzZac3U2N3BPNjZNKzdNUU82SWwrNjhiTzY3OU81S2krNThqZTdLR2U3TUhlNnc1K0UzRjhyRjYyWkhHTTNkZ2xtYWIrRXRrKzNzNSsKKzdBMnh4NUV0QWxLOWFacmNJUlI1eHJJTlpiWTZrWGJzeHFzdHU1ck03UitheDNXY3g2SzU3a29TeUFhWkt2R09QQTRweUNPOTNoRkIKK3luQ1N5UFdPRU1hSkpBb1B6d1ZOQlNiTGs2djhKVkFkRWNPc0h3cS9kWk45RUE5dlpoY2ZvaXZKL3RnT01TMFZqNDhqSDVQRFl2TEEKK0RwNGFnUyt6L1BFSllaN3FNaWtTTHhDczBBTk13SGorNkFoVGFSSHJMT2h3NWo0YURSRTJ6eEdUa3AwWHNmTTlYNVdPb0N6Qi9Od3YKK244L1lUUE1LOGFBTS9abnFwalIyY085Y3Z5MExaQkVTelQwRkE4OWEvekpvR2RQYytQVW0rcGtQbmR2UWZla1hjU2NMMTNENjF0TlUKK1d0TllpdE0vcDIwSmJSQjYvelk1MTZSQTdmY0NjU2R4enpCREtqVS9iZE9JLy9jVkxkdURuemRYMHplSHJ4Q2FocGp2bmtrcjdUYUcKK0Qva0kwU3NoRXdDUWFhRnRyaEIyYzlLdTA5YkNBNlpvL1JCUXZYYXVYenQyY05ZWFlUY3lvMm0xVHp0djNadGtSdnRjdlRtd2Y1MGEKKzh6dENNODFzemRXMmcvdVYvbWFTZ0QzdTFWNXBVZ2tsZGVjbzR2TXgxeG1SMGI4UU12QUZqMDM5bHFMVy9Wa1JsZjN0anZ3OUdRK2cKKzJROXVROE9jR3ZIOTRWOFJkajJkcVkvdm81K1lCbHFwU2tLZ2lvM0lBQ0dnVlMyQ0JRMGVSRmlRVWhFd3J4SStoT2lGUXF5Q3RFVFEKK3FWV0t3Q2VJSFd0UmVuTElZYTBYZ0R5ZUpDaVJZc0ZaQnpDaTlBanlrQXlUTUR1cUxKZ3BBRWVOSEcxQ1hOanc1ME9jQjF2YUdBcXgKK1pOS0NTNWthTERVQXdGUUFFd24yZkVyUVU1YzZxRWpXekpwUktsVUtvc1phRGJ1MXpnMndXYU5TclJyckxRQkhUTlY2YmRyMjZkeXAKK0V3c0pERnZyN3RmQVl1SDZwVm8zc0ZxMmhmbFdkWFZnS3RMQ0JKMHl2VnhaczBGVVl6emwvdDBjbXJObndxSXJkLzU4TUxQcHdLaEIKK3N3N3RlalZzemJOdDJxWmRHSGZ1ckx0NVAvWDllMmh3NFQrSkYwZDUvS0Z5NUI2Wk4xK3VGM3JTNTlOVlM3ZCtHM3YyazlVTmV1ZGUKK09yejI4Y08zbDA4SW5ydDY2K3padHorUC9ycDhtTytoMjc4Zm43NWwvUjN4Ti8rdnVBQUY3SSsrQVlVN2tEZjNDalNRUWZRU1ZOREIKKzhpRE1qVUxZRnR5dk93bkhzL0RDRGNQcmtMVVFSY013US84K1hBL0ZGRTFVU3NYc1JneXRSQmJUYzNFNkdHT3NNYjhabzlzUklSbDcKK2ZBMUkvb1Q4TGtjQWpUeVN5Q0dCUXhLNUcydHJra0FseFNQeXljcCtGTkpLM2FKRWtNc0lwNlFTU0N6RjlMTENNczJjVXNzdDAzUlIKK3pjRGM3TzFNMnVCa3NSSk1PakZ6OFFRc0xPR3pUei8vQkRSUVFRY2xkRkFOOWl3MFVVVVhUZlJRUmgrRjlGRkhJNlcwMGo4bnRUUlQKK1NqSFZ0Rk5GTmVBakt6Y2lxS0JVVTA5Rk5WVlZWMlcxVlZZZklOVlZXV2VsVlZaWWE4VTFWMXh2MWJWWFgxSGw5VmRoZXcxMldHTm4KK2ZlQVJNSmRsdGxsbm40VTJXbW1ucGJaYWE2L0ZObHR0dCtXMlcyKy9CVGRjY2NjbHQxeHp6MFUzWFhYWFpiZGRkOStGTjE1NTU2VzMKK1hudnZ4VGRmZmZmbHQxOS8vKzAzSUFBNwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3BpcGVsaW5lLnBuZy5iNjQgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvcGlwZWxpbmUucG5nLmI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Q5YWMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3BpcGVsaW5lLnBuZy5iNjQKQEAgLTAsMCArMSwyMTMgQEAKK2lWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFsZ0FBQUVjQ0FNQUFBQXNtVG9KQUFBQUFYTlNSMElBcnM0YzZRQUFBd0JRVEZSRkFBRUEKK0VBRUJBd1VCQ2dNQkNBVUtBZ2tNSFFJREN3WVhGUVlEQmdrVkR3Z0ZDQXNIQ2hBU0p3a0RGQTRORWc0VERoQU5IZ3dIRGc4YUV4QUcKK0RCRWpCQlVaRVJNUUNCTlJEeFUwRXhjWkZSZ1ZGUmNnQ1JrekhCY1VEUmRDTlJFTEl4WVRBeDRtTEJVTUVCd2NFaHNpRHh3aEV4c3UKK0RoOFhKUmtRQnlBdERDTVVIeDRiQUNrMERTc2lHU2NzRkNSY0pTVWlHU1pDRGl3cUdDZzFMeVFiSXljcFZoc1BEeTB3TnlRVkVDeEEKK1BTSWZDUzg0QURKQ0VTdFdSaUlVTFN3cEFEZEhDRGtnRXkxL0Jqb3JFamhBRERoWEN6WnZJVE5QVXlzUUR6czhNakl2Q2owNEJUMU8KK1BERW9RakVoTURVM0x6WTlLVGRGVFRNWU56azJHRDZQQUVwZkVVVmpCRXhGQ0VwUEIxQXJLMEZqS0VWWllUc2NkRFlYRzBkNVNrQTUKK0ZFaUpRVU5BT1VSUEFGaENBMVJwUDBaSlZFTXZZVUF5QkZ0UldrWW5EbFIrUUVsZUFGMWprVG9qSGxWMUFHQjRQbE41WVU4N2NVd3MKK1NWUlhBR2FCV1ZKS1VsUlJSVlpsQUcxUFdGTlNCR3Q1QW1xVkFHK05BSE5wSzE3QldsOWlmRnM5S1dtblNHWjBZR0ZmcDFJdUNuV2oKK0FIdUtiV0JYb1ZOQWRHQlBEbmlXQUh1alRXbUxrMTRyQUgrY2gxOVhYMmFSWDJ0OEFJZUxpV2d2QUllZUFJYXFhMjFyT25laGRXMW0KK0FJbXNwV0pZajJ0TFczQzBBSXl2V1hhTkFvNnhiM1o1ZFhaemVudDRXSUtpUW9qQWVuK0NrWDFwY29TV2NZRE9vSDlmcDRFK1k0dXIKK2hvV0NYSXZHYjRtdXQzeHBxWU5ZbllkVU81ckR5WHhkalk2TFlKcWswSVJHYjVhelhabk1qSkdVZ0pXcXBKQjhsNWFVeUpONGtLSzEKK3JaNklZcXpnZTZYaG82R2RuYVdwZ3F5NnlaOXp2YVIwaHF6TWs2ck41Snh4dzZtRjI2bGJxN0MycExUR3dyQ2JzN093dmIrOHpjR2MKKzhycDQyTDJ4c01iWTNMK2p0TWZzejhXMm5NL3l4OGpIME1mQTdNV1U3OGgvM2NySXlOVG80TkxENmRLMXo5YmMxZGJUM05YT3Y5dnIKKy9PS1N3dXI4KytHdzR1VGgwZWY3OHVQVStPUEwzT2p6KytiR3lmSDM2ZXZvLyszYjZ2VDg4dlB3L2ZldTEvdisvL2JiLy9uSy9QblcKKzVmLysvL3JvK2Z2NDkvNy8vLzM3Ly83MS8vMy8vdi84c1plVG5RQUFBQUZpUzBkRUFJZ0ZIVWdBQUFBSmNFaFpjd0FBRlk0QUFCV08KK0FVVFVCRHNBQUFBSGRFbE5SUWZhQ1JRUEFpSkJFRk1MQUFBZ0FFbEVRVlI0MnUyZEQzd1U1YlgzMDBuV3dzNTBzaEE0bHlUR2lrUkUKK1F5MGFVQ2hLdkpacVRRR0JGTnVyVm8wRldxMlZxaEFxMGhjMHQxckF4dExMcHU2MWNVbDZnV3ROZTN2YjdaOUlLbStYcW4ydGtGaWgKK0dtd0ZBOVh3cHcxcy9VT3lDYzk3enZQTTdML3NiamFiWFRMWlBML1BoekE3TzdNN3M4OTN6am5QbWVjNWs4V2twTktnTFBrVFNFbXcKK3BDUllWbFNqcDVuLzMrM3hHR3NPTkh0MnZ4MXQwNFBOVGJ0UDhhVXVqeEF1SHZONlhqSGU3MjFwYm1xTHNwL0gwMjErY3JQNXdjZTgKK1RhOEV2aSt3S01IS0hLa3dqZi92QStELzc3U3JBS0RlZVRSaU8zL3ZjbnpEb1R6WGd5LytDRUtNYlZkdzVkaDl0TUd1YkFmdXVNamYKK0U3SG5mZ0FmL1g5eUpuNkF1cHF2MjA2Zk5mWWRYSHIvQWxvYzk0NEVLN1BCV2c5UXVyVnhsUTNzNzBWcytGbUFkUTBMQVA2QnkxY0EKK0tDVDJBc0JxWEttZTdtRWZhakJyMjVNYVRJamtTalBBMG1Ic1Zuei9HOGpnenlCbmE0TUdIL1V6ZGdIWXQ5WnJNTm92d2Nwa3NONEUKK2VKcGVIYkxCNVBEdGVsVDRML3dQNEZyKzk1TmlyUWEzNGQ4NWNCMWpYM2VBc0dWaGlQUnVSNjQ0V1BqT2FmeGdIWHc5dUQ4YXhML2sKKzMrZ2ozUDR2TGdKMFNyQXlHYXh6b0ZDc2ZwT2JKaDhhSlZNdHpVU01BM0paVHcvQWI4UktZY0QrUnZ1MmVoc0pKSUJ1OWxsRndkVzMKKzBsOE4xQjBDckRsZ3B6MUs0T2ZJa1JxZ1Q0Y09qTmtrV0JrTEZpTTRlalQ0blhqVnJjSC93YjlHNEJVVXdPY1oreENndGtoNzRDaTkKKzlJdTFKaWcvQmpoRGhtekNHVVR6Y2NhS054OWxBcXdTVUFWWTE3S3Z3N1U3UzJ3TG42ZlhSWEN6bjkwUDJkSVZaaHhZSWx4U2lDRTAKK1crOEYxbCtHWURVMGhHOTlQOS9nVnhpRUt4aUd2WVBNb0NNalQyYThmeHlSUWtRdzlIcEpnM0VCR0Ftc3I0UER6OEVheHo0RitVQmYKKytEanRNWjBXSi85WkJ1OFpEbFp3Zlg3ZmpURzB4OWliUFRGOTNENTJVRWRFTGdEOUxYWXcxOXp0ZUE3b25Nd0xBSHVJNzRTQjlRR0cKK2IzNzJES0F2TFFGNHhOLzdGUGxSLzE3Z2pEM0gvQktzekhXRllSYnI2c2lFQTdzTDRKYmdhNHpHMllkMnNDdXFhb0MxSDYzWVMzd0oKK25TVzNSeUZnc1EwY29RTHNObjRLZEQvM2d0Y2F1RzBIT0NJdFZnWUg3OEVZcTRmSFdPRmFETEE2dE1OSGUzU3QwbTBMMytJeGxuKy8KK0JxUDNpYjB4R3VlMkxSUXN0bXUrdlhqejEzbU1aWVJidWJob0Z3N3lYeVJZbWR3ckhNTjdoUi9mZ1ZHU2Ryb3ZWenZFVXB1WFlQaG4KK3dHOSt3SmNPYVREWjNHY09wVS9maUFDTG1iM0NQNW8wbmNlbUNjYW1RWTRFSytQeldEM3pZYXlOWXZjd1lVajBVaUNsZFRmKzl5WFEKKzJSTmxLbCs2QXcyWUxSQ3RVL0QrdUJaZ3hRRHI5aUlrcmF1SWVvMDY3T091OENmczM4RnhnaTkrWG9LVnlXQ3grd0JLRzV0MXREZlUKKzlNRTgxaGx5YnRraTNVNTl3OVhOdU9WTC9yK0lKYnUvNTh5WHdPZ0dkUGQwYVhBdXdYVTM4NGVBZFQ3WXR6WHFQUE8rSHV5YlBSZEEKKzloblc1WURSMnp6NDFudG5KRmlaREJiYmJuZlF2VUk3T0JhRjViRitaZHdlaEFMQ2orNG4ybjlxTERrSy84enhNZFNOamxBLzNVUDQKK3ZSRnFzZjQreGhHNFY4aDNHMHNCKy80cHRKanpCNWx1eUREVjFvdFVWWGQ5dmJHbXBYRnIwOXRkOTZtWGhhNWtUOVliNHBzZmJLeHYKK0VnTWREalp1RTJNVHpQZnJ1LzllWC84SHNhYldlTWNZM2VCdGFIckwrTGlEalZ0M0I3NXYyMjQvazJDTkZMMytEL2tiU0xDa0pGaFMKK0Vpd3BLUW1XbEFSTFNvSWxKU1hCa3BKZ1NVbXdwS1FrV0ZJU0xDa0pscFNVQkV0S2dpVWx3WktTa21CSlNiQ2tKRmhTVWhJc0tRbVcKK2xlUlAyOGY1MC9INUVpekxTbEhFREM5akN1R3hKNmNydG9VN1RrVmp4SnhrdUd1K1hWdk5wOXQwYlM5U0Z1NFJhMSsvUFR0L2MrUisKK3VGTGJmTUpZdE52TWJSazducTM0SkZpWnJQQjVoWWRzb0txcUE5U2pmYm02MVpoa09BZHdHMUQzSVZkMldoSkZHcDRDQis2WHc4SXEKK2tENmowUWJaUjNEM0YvaGU4Q1BqSFQxczNyMEVLOFBCNnJIQkxBUm1ieTdrUm01MzhpNFFZUDJKYWc0ZG13a09La1U2OWdqYnFjRWIKK3JPZGRnRDFzTDhERG9mdThEL0M0LzlnQ3lQSFRyTlZacDNvWGl4cFpqQ0NWWUkwZ3NIeThUaWhqZjFSdCtMZTdwU1d3MlU0YmpCWmcKK2ZhVUVrUkoxUUVUWnRlOFNoZWZEVDNDeHR1a1YxdFhTUW02eUJYZitkN05jMFQ5bzIvZDRTVWpDeWY4aVRKWmdqVEN3bmcyK0ZWS0cKK2phbnFNbjlvM1VnRExPS215MWc4M05yS1E2enp3YzQ5MysvWUZGRktwb0FxSXVrMDMvNWRtb0NQMWcvMDB4S3NqQWVycElXTFl6TUsKK29EVHc5QUNmcWdZMnc3QThyQ0RwSEVFVHpaYitrUGdDZUlwcUF6N0hPRDBQSTJ5WE1mWXBVY1MyZ0dvc0x3ZjdicThHMXpOdXduN0QKK0pGZ1pEMVpBRkJXZFR4VkJjalpIZXpKRktGaFBBZnlRd0xxRHUwTE9HQ3lzbWk4cUhTMEcrRGc2d1I0cUpIS0NWeTRhald0bjBsZWMKK1N6dmZEemN6Q1ZibWcxVlF4V1ZnczJFNm9hWS9IZ2NzUDNGVkt2QjZwR1VEQ0xDdTUzYU1CK2VFMEU5RTN5OW50eGV0NEdoNmEvUUQKK3EzUWk2MlVZeXlSWUl5emR3UHQvTzIvWGcrWDQrb0pGMWJOaEVWL2sxWWdXQ1ZkSVh2R2ZJdXBDUzZYejkvOCt4UUdRT3dkZG9YaDgKK0FCcXYvOEpOZjkvYTJnb1EwaldRWUdVMldIN1cwY2JKNmRMNmxMWU5zVmkzQW56TldIZnd5WFY3V0RDT1p5STRwN3B0UnZXL1hkVmIKK1Q4L0I0UDFUWnRuUmNjRkNXcW9FYTZSWXJDdlVmSFB0NUpoZ2ZUZVE1dXhvYnoxRFZkN0hFbEgwcklxL2NiNXdBeDN5Q0xURGJmNHoKK0l0MWd4UEVsTUFFN21DUXFGUy9CR2lsZ0lSaVhkZUR5VGtvV3NPN1cxaWhndllraGVDdUpQejduQkR1bVVUYnJWNUQzTnZPZFQyVkkKK2oyTzhoUnVkeHovOFlUOTdFWEw5Zm5TRnovblpxNEZucGJBK3o3eVFZR1Z5akxYY0FYYitNSUZGRVhtc0lGaTVnVTZrdjB0RnM2T0sKK2VHc0JmMWlGOWc5eWhMbk16MHZoK3UvbnBkM1ZOL2o3L0VFQnBXY0NZTW5nUGFPbHFDV2hTYXRkODR0VXRlREdIWkY1TEFLTHYreFIKK1RlR0xRL04xZGNabThmYUdFalYvNFZGMGhDb0hhYWFxbk9JcnRZWGl2dVAyTWxCbkJPdkVxNm9FU3lxK1FvYkM5RVI3dnlkeXE1RXEKK0NaYVVCRXRLZ2lVbHdaSktueXFtbFhSTHNLUlNyaEpsQkk1S2xtQ2xYK1VTTEtsMHFGS0NKWlVPMVVxd3BOS2haa1Z0bDJCSnBWenQKK3F0SXN3WkpLdlJTbFVvSWxsUTZ3RkFtV1ZPcWxLa3EzQkVzcTVhcFd5em9rV0ZJcFY0ZWlWRWl3cE5JU1pIVkxzS1JTcmxwRmFaQmcKK1NhVmVvQ2lkRWl5cGxLdGhaR1ljSkZocFY0RlNQZ0lIWlVtdzBxOEt0RmtkRWl5cFZLc2J3VklhZkJJc3FWU3JoTkNxN1pCZ1NhVTgKK2dpZTJ5dHE2SlZoU3FWV1ZTbFpMYmVpVVlFbWxWcDRDaGV4V2Vic0VTeXExNnF6Z1ptdGFod1JMS2cxbVN5bHZsR0JKcFZvdFFMR1cKK1Q0SWxsWEtycFl5QWpLa0VheWdFbVUrV0JHdElORTNKOUFtSEVxd2hJd3NrV0ZLcFY0bWkxRXV3cEZJdkpiTUhBRXF3aGtyTm1lME0KKys0RGw2K3c0KytyczdFblQrUTNSNlNSeXN4bTdodTNENUhRR0MxWjN4N0tjOFJOblgyWElkczFWYWRYVThlYlM3SWsyVytwSGxmamEKK1orUk1uQmc0Q1Z0NnorWXFXK0NIbXpyUk5yNngzOVBwVUpRQlBRakYxMGFuWTM3SE5laytuWWtYbTQyRHA2TjVPNU1IeTllUXM4THQKK0NxcHVmT2lyTkdqdE5hR3YzUE95V2xPSlZXZVZiVzNZQ1V5c1MrL3BUSFdHbmM1Vk9ZZjdPY0tDZ1NTek9tOGNYeE42QXU3eDZUMGIKKzE1SVZvU3k0THRZT0p3bFdzODBaL3NsbkdTeGFZVXVaMWVxdTdYUDBaeGNzMU5KK1RxZE5VYW9TUFoycXlLTS91MkR4Q3ovZmx3UlkKKzNma3JJei81N0lQbHFydW1LalZjZFVSZUpVTUJscXR1YW0zY28weTRzRU5uMzlNNTYyRFJWM29IREZaN1RsK0loZ0FzbDZzbVB4V0QKK0xGdWlRWFQyd1hLNU50cmluVTVWR2JRbGNqcmVpWDAvZVFqQVFodGNOVUN3V2krT3d0Q1FnT1Z5MmdiUGxXZGV0SzhiQ3JCYzduaDMKK2Jyb1ZwVHlCMDltNnhHVVJzRnhyeXdjRTFvR292L25RZ09WeU9nYWRJVnJpc2d4WVNGYjNJSDFoNDFLWFpjQnliYXdjQUZpKzBWRUoKK0dpS3dYTTZpd1hIVk5zOWxJYkNRck5pSFdwRkE5cjA5K3E4MFJHQzVWdFltRGxaQmRJQ0dDaXpYMm5XRFNqUEUrc1dIQ0N5WHN6cm0KK3NiWXFpcWUvODlGY2xnTExOYThsVWJEcVY3cXNCWlpyOW1BQ2VKdmJZbUM1NW5iRXVXRlkwcy9wRk5WWURDeTNMVUd3ZkJlN3JBYVcKK3N5UjVyZzZzZEZrTkxGZHNaK2lvNktlc1EzdU01aDA2c0Z3MXRZbUI5YURUY21DNVZpUTlSYW83eDJVOXNOWWVpSFc0MC9vYjc2ZTcKK0xBZVc2MkpmUW1ERk1saERDWlp6V3JKZ0hWNXBRYkJpbTZ6R2Z1N3FkQysxSUZnMWlVd3l5dktzdENCWXJxdVNCU3ZmWlVXd2xzUzYKK3h0djdpZDV2ckxFZ1dIVVRFd0dyM0cxRnNOWTJKVG1nWWJ3bHdhcXJqVG9FcHJNZHU0VUZGUVd4eDg5b0xndUM1WnAzSUFHd3BycXMKK0NGWk5lWEpnZGF5d0pGaXVyT2lEa3dPS1pkR1dXQktzdFo0RXdGcGlTYkJjU1NaSm05M1dCQ3ZhTGNQMkVMQmk1Ym5XV2hJczk0UEQKK0Y2ejg1TUNxcXJNbVdCZEdNMG1PQUZleHBsVTBiTFFtV0FuNGs2eWwxZ1JyWW5KZ0xiTW9XSE45MGJ1RWhtTDFER3N0Q3RhbEl3NnMKK2l1RUVGdXMzeEZwblViQXVsR0JaR3F3eWc2dVk0emtrV0JLc1pNRHFOTUR5U0xBa1dLa0VpeGNIaVRkeFZZSWx3VW9LckdZQlZyY0UKK1M0S1ZVckJFK0I3N3hxZ0VTNEtWSEZqMDBBckZLOEdTWUtVWUxGL2NFRXVDSmNGS0Vpd2V2bmRMc0NSWXFRYkxxeWh4NXIxSXNDUlkKK1NZS0Y0WHVyQkV1Q2xYcXdLdU9OVFpaZ1NiQ1NCWXZGZS95cUJFdUNsVFJZdFJJc0NWWTZ3R0lTTEFtV0JFdUNKY0dTWUVtd01oR3MKK0pSSXNsRk0zcGh6ck9zUTU0a2VIQ1ZpejlWRmlJMTFmR2U5MDFraUxsVzZ3d09CSmgvellXMTBFd3dVczBBMndJQTVZbjRBVkVpeEwKK2dBVVpCUmErS2NFNjYyQTVVZVo3eHJJVE4zSTZoeWRZRWFmRC95ZXduQktzc3dxVzh4T0EwamZSbXMvUkl0eE05b28wSE1GNmxCOTUKK3FWTzRjK1BNNXZLVkt5UllhUWVMV3lZT1ZvMHVJSUs3WGE1dkdvc1BEVGV3Nkd3RVdGOFZwNk1qVHVLSzRXUkpzTTRTV0tZUXJFa0EKK1pLd3VJWXdFU3hjdTJUUzhZcXlBVnJyY0FKTngzUmFBQ1VaYzlmMVM4b0V5eGpyYllOVUEzR0VFNjU4bnlBcVhPb2RkOEI0QzFoZjAKK3ZHL1R5cS9pLzI1eWlTdGw4RDQwTVZiSWkwSzYwRW16aG0rdmNLN3hvbzVlM0NBODRiMFNyS0VCeTJtOEdJZC92eGdJcm9ZM1dGdDQKK3dQWG81ZnhzN3BWZ25YMndURmRZUTY2UWErTWx3eGdzZElXYlRGY28zbDVUQUxsMTFnSnI0OXhKK1pmZW0rbnBoZ0lSdkY5RVhVV0EKK3EzSHhXd1pZem1FSVZtandqbDFCS3JsMU9ZeXpGbGlYR0IzWGgxSU9WczBOVUxwcG9HRDU0b0sxWmxMK1RjbUJaWWJ5K3NPOGE4ZzEKK3ppVXlXWW1DTlFscUJncFdkMXl3SHIwOC94cG5VbmtzSTkxQU9RWjNnVmlpMVJUSTV6MlVJRmczd05JMGd2VUZnTTlzcXJrSEQ2d3UKK3hXQlI1a2luZGh3UVdOT1VLbDlNc1A3VnlCMGtsWGtYNlo2UUJPa3NjMjJDWUgwWkJnNFdLTlhkTWNINmFqQmxPL0FFS2NkcEZoM2YKK2xvdDBJOFJ5OFVCK1pXSmczYU9uRTZ5NlBPQ1BxWGxVaDl0U0ROWkZVT3o4TkJTNkJ3b1dLb3l0SUZpSTZ0MTRvTmNsQmxZcUZBb1cKK0laZ0VXS2d3dG9KZ29YbjVURTBCZkRJeHNGS2hVTEMrZ0RTbUV5eGRYTGltcTlFTnIxaW42N3hUWGh4WUM2VjFCdWVvbS9pdU9sNXkKK3Q4VUM2OUZSOEREeXFuODdDYkRDMkFxQzlXOTBPUDhHazRZRUxQU2N5WUlWeGxZUXJHOVNCUDVsWFhjT0FWaG85d3JUQ2haNkY3MTQKK1pSaFhTTmJkQkp6UVZkeWFCVnpIcDQzVnBTNnhTYVFERFlLMWxuNnhMYUgyWlVCZ0Jka0tnblVSWEVneGQyN2RrSUIxdDJzUVlBWFoKK0NvSjFBem0zNyt1d2FVakErb3c3cmE2UW1wNzRtT2NNbXE4dlFLNGJGOUg1MTEwQ1k5MnVGYURqWGwrZGgzMlBGV2k5aGRtNmpiYlcKK0g2cUo2UXJYOHIxQ0RlTEVoZ1FVMGhJR1cwR3dkQUtySmhUbXN6dUNOQnlzMmZVSm5JNGFkanJFVmhDc0t3a3MvQlUzRG9rcmRLVVoKK0xJeGtkZE1lclJGbStmdWo0QTQ4MzZ1SUlLSURhZEp1NFpjVmdqYTVUdGk1YzRtOTBqZ3hsZ25XN0NBRlNqS3E2Z01XV0FPc1M1TTYKK25lb2dXSmNTV083TUJRdmJpaWVpNXhGQmhtNUNhdWE2WElheEt1QzkyZUpOTG1NdElpaU0ydXdFd0pvMU9MQ210VnZWWWlVRlZtWG4KK3lMRll3aU5laEU1dkJlVUh1T2FHZ2VXNmgvZHQ5VzhQRUt3K01WWjN2d3FOc1lncTY4UllmY0NhNjB2Z2RDQ2NLdGJIRlE1UmpKVjIKK3NKYUNrV25DQmZlYVlBOGxIQ3llN2RSaFhvZ3JuRndYb0N4R3IxQWZWSy9Rb0NwYXI3RFlaUkd3QmhTOFYzYjI3UlhxUTlZcjdCK3MKK2pzR0I5WDI2Mnk5dURseFdoL1psRnJiVW82VkxuU0ZnMVdGSEcvZmFNZ3JqOWpWODNHVWdlSThIbGlzditUeFdrS3J3UEJiRXltUHAKK0lTT3YrdE9XZ240M0FTTVptVEt3S2p0aTVySDA4L3JKWTlXSnpPN0ZzZTh1elUwMHV6MFFzTXBhQjUxNU44WWlmdHRNVWdIa2hvSVYKK1NFS1FDN29FOUpCMFExeXdSSmJpTnRmQXdaclczaDA5OC83cFdKbDMzWFRpL1lQbGpIL2JtU3MvcFdCVmRzVEl2Rk9PMHJpYkhCdXMKK3VvdjR1WVdsNlBzbTVWTVBWcjNTT0xnWXk4Q21lRlB3UmJFejNCV0t0WVdiQWdsUy9TWlgvMkFsZDY5d1dqaFZDZDRyMUVPenBta0QKK1M5Y0hESmFqc2lQdXZVSzRxcjk3aFY4UVJJVmI2dFNBcGNjRHE3VnYrYmlCQnUvT2tQa2V3UWtmNW45aGE4T1duVkhtdHd4NmRFTjMKK1VxTWJRc0NxeVo5MHp5VFJGZjNpcFB6Wm5HeTBjbHZtVGlwOWlDK2l6U083OXVpVkJjYVlqbnh3M1RQcHdsdE1kQzljRWd1c0NBZDAKK2RrWTNtUGNJTDlkenVTT25reEszbWRkY1daQS85YUVnV0Z2bUZseTR4RURtMFVtem5QM2RoQTcvN2d2N2xvOVRITjBqZlR4V0tGaW0KK3V6U2NmREYvVzd5NDJvekd6RnZTZk15TUdaL1IzZ1ZtWkdBWnNHN2c4ejhDU1VkeGVEUm1Sb3p1ZzNOTnNJenpYY3ZCbWdSNW13WUoKK1Zqa0ZoKzBTckZDdzlFL3k0VmFGYXlsRFY4eHBLdHhJTVIrYTJSbytrL0RMR0RnNzE1aURTT0dtR2d6ZnJ1VzRYYzlYV3dlc09xTGwKK1FtTzgzRmQxS04xWTh6bGk3VnU2ZnE5ejR5UWFKY1BCd3JkbWJkcDRFUjlJUXhIWmVYV0RCS3VXZHp1YVJ6cFlnVTRoZ2tQakJXcU0KKzd1NzNhYVNNRHZTODNHOXlqSndHVE5meFpicmhMcGI1OEN5QTh3U2IxZ0hMbUVFSUdoNnA4eEorZk00cjUyMXkxWHp4WHBjeE5wbkEKK2NuNkNqMTdFVVA5ZUF1dTgvbU9zL3NCcU5lNThqSFN3ekU1aGpSaHo1VFNHWHJub1J4WWpzcmFFZ2VVVS9ieFAwcDlOWm9yQjJNbFMKK1lHRXdkWkhSd1haSERyWmFjemtZWUxtTitZUno0Ync2Qk92ZXdZTmxQaUd2UkxwQzB4V0dkZjRJS21NdWRCaFloZ3BOeUF5d25CWUUKK2l4ejRGM1hJKzNaWTNRYTZIVUpwQ0FPc1FDcHZWRjNNQWNvREE4dDhRbDdnYVFnU3JPZ1dLeHdzcHlGelBvVlZMZGFhdVd2TlZQWmEKK2Q4ZzA1ODhCeGxoaVhyUnBzY3d6U2hGWXRZRzdCaTBTckFCWUdHTk5Eb214K29KMVhVamVNd1NzcXkwR2xyc0F4dktGYnlGWUdHTk4KK0VJSFVCTU1yZmlzUVkxMGlEdDFJZmFZQ3JOYmdYYzVhQ1pZSkZ2WDdKbStpWG1HaEt4S3N1eCtsMGZQWE83ZDhFZkt2RGdQclg4M08KK29xWFNEWVVyK1FDVVVTN1I5YXVod0FyQnl1V25od3dGZTRXdWU0S1Q3Z2NORmd1NWYxNHV3VExCTWdlN0ZyckN3ZUtCdmxHaHhaeW8KK0U3UlNZdlZ0Vm9xeFBnR0JDVG1CUE5iMTV0TGtBb3pUUlI3TGVDdDNVOHJBS2d1QzFUNVN3UXJlSkt3eEswVGlWVDVKNTVscGZKdlcKK0diVWp0MXl1eithWmQ5Qm1HKzhHdDNHdG1hU1hibkxwVmdyZXQrQjU1TTkrU0J6S2xoc2dWOXhPb0NOZDYvcUVQb0dxU05hSnQvUkwKK0h4S1o5NVNBVlJ2dUNlVk02TlJwWkJlM05ZTXNuNXhpTDhGS0pWZ3MxQTlLc0NSWUtRTUxnNnhwWGtXcGwyQkpzRklLVmkwOUgwOVIKK0NpUllFcXlVZ3RWQncyWXFGYVZqMklKVktjRnlXZlhKRk0ySzRobXVZSFdvRWl6TGd1VXowcVBERWF3eVJZSmxXYkJvR2tMMzhBU3IKK1ExSGFKRmlXQmF2QnZBczk3TUFxRC9ab0pWaldBNnROVWFxSEpWZ2ROT05MZ21YZHg4b3Bpam9zd2FKUit5REJzaTVZWnNKaG1JSFYKK3dXOGJTTENzQzViSG1GTXh6TUNxQ0J2K0tzR3lIbGp0eHBTSzRRV1dNRmhoMDR3a1dOWUN5d3l5aGhkWUZVYlpEQW1XZGNFeWdxeGgKK0JWWm5uMGxHRWl6TGdZVkJsbmU0Z1dVWUxFV1ZZRmtYckhhUnlScE9ZSFVHUmxWTHNLd0xGZ1paWlJZR2EzeDA3MjJvTmRaSkxiTW8KK1dMTXpDNndaL1ZRdEk3Q1dXQk9zL0hnR3l4eXczMWNQdXEwSjF2amt3R3EwS0ZqbDhRNjZtbzlQenBwblRiQ214ek5Zc1cvcXRGblUKK1l1VWtOMjZ4YzYwMXdhcVBkOUJlbmcvS21sMW5SYkJxbHZXdHN1YXBDbFRZajNsVHAzT3BOY0dha1J4WTdCcExnclhDeS9xTjNyTmkKK080K2hCR3RsaktFeHRYalFWWTdZMFh1M3pacGd0U1FKbG01SnNLN3FaUEdqOXdvRXk3dlVpbUNOajhHTjZCRjJ4NDVZS3R4V0JHdWkKK0wwbXdxalphRUN4M2Z2eURCc29IWmJIeGRkWURhMk5GOUVOdURZeDhqVGtPY0s0Rndhb3JZTWxxcWdYQld0RWMvNWdyNmVyUFlvMHIKK3JBZlcxSmhHVnVudjJ0ZmMxZ05yYm1mU1lFMnJzUnhZYmxzL3gxeEwzY0lzeG1MeE0zUmdiVndXMDJDVjlOdVJ1dEp5WUxuTFdmS2EKK2FEbXdsbnI3T2VSbXVxbURZTFhNc3hwWVd1d0lxLzlydjk1cE5iQnMzWU1BcTNhanhjQnlsL1YzeUhqOU54QllySHFsdGNDNnFqMkcKKzd5NVhLaEpvQ3NWdExiRG10clBCU0sreEZGanUvaThUbm0vSTRqT3FhcXdFMW9wdDBZKzNKZTZnNUpDNWJUbHVLNEcxb3BFTlRqWkwKK2dUVzF0ZDhEN3FaOEF3ZUw1VHV0QTliS1pUR3ZnM2dUdjBKN2hxUGQxZ0ZyUmZVZ3VXTCs4UllDNjVyZGlmZ01ESVVGV0t4a28xWEEKK1dyb3VObGVKdGxGblZHODRKR0ROYTJDRGxzOW1GYkRjRjcrU3lBRlRJaXZMek1RdHNRUllkZU85TVFOQ3BYSUFUYkhXRW1DNXg3ZXkKK0ZNaW5iYlFFV0hWS1l1Rml1YUlFd0dJdE9SWUFhNjB0UnBxcWFrQmNvWnI2SHZ6WkIydEZUZ2RMaldvbnVvY2NMUGU4R3hQczNsWXEKK1NuZFc4TEpZTjk0NXBHRFZyYzJLWWE3YW9DRE9VSmtZN3ZER3FlNGhCY3U5SXF1TnBVeWRreUpHQzV4dHNOeExzaEx1M2FJWjZNd0sKK1BmZ20yOVNON3FERy85eWRWbTI4SnVURml2SGoyNkpmRUIwbDJCMVVCdTVUT21welp0ZUVmTVBFOUo2TmU2b3I1TVhTOGVNUHM1U3EKK1k1bnRHdWRaUEowbEs0TExkVXRzbHc0Z2FWS3RLQjFaRVVkL2VPdkNTMDFwbDZaWitlYkMzR1ZON1RGU245NENHaWRUbHR4ZDNJN0QKKzYyNjg4bXlkVHNqbkwvTzJkN0xVcStQQUE1ZWV0ZGFaZEtHNWRPTURMZTBEeXZIU1BaMHNabVY1eThJcnBrb05DOVZiR3F6MmFuU0IKK05MU3ZvRTAyMWZCU2c2SzBXUk9zMXVvQ1k2eG9XVU9IYkNnSlZpclVWbFVnTEJXRzdNMlNxdUVvQzhaWUxXWEd1UFlTcFQ0dDhhL1UKK1dWQ1VYdUhRcWtwVitGT3JvYkhkSjV0bldJUFZhU0d3cXZqc2VhVmFRalhjaFMzcHN3eFliZHdIMXN1Z0tnTlVFWHF2Y0lqbEFhcDcKK0pXMVZScWpFT21CNU1Gd3ZsMWhsaUdpcXVqWEFva0V4SHRrZ21RTldwVFhBNmxRS2xHYlpIcG1panNDWWR3c0VlOVd5UFRKR0xZclMKK2FBbXdPaEtjSlNFMVBOUklqejJ4QWxoVjVZcFhOa2ZtcUlySzIxb0FMRi9jaDVoSURUdUJxTjFnaFM2aGpMQXlTRDVSeG1qb0Q2UTIKKzhMaFhxVXlRbDJKM0s0QlZFTy9oT0ZMRFR0VjhZdkhRZzlXdHFPV3lOVEpJb2pqZTBJUFYyVzh4TmFuaHBMWXkvcFNtb1FmTGZGeVUKK1ZNWjR3aGFyZ0ZVcm15UFRQS0VGd0dxak1sMVNHZFFuckxZR1dMN1dWcGx0eUJ5Vkc3TkFzK1JQSVpWYS95TnVvMGl3cEZLcFNoRzYKK0p3Q1dQNEZQQzI3VE05QUQ2WW0rbTE4MlVVcDB0bjlITkZoR1RmdElzRHlxa1FaWFZQRWtudTN6ZFZXYnNibnZJUis3dlVqVkZ1NGoKK0pqN01Va20wNTRZaU5YL1pVYkZubWE2V3JPNjc0MEdiK0lwRCtNa3pkb2lWRzByVS9EdFBpYldBbjNCNnhDTlJGbXdJVWJuaU5meTkKK0hUT1duWXFHejFQbXhvOU5kemhtUEUxTE84dDByV1ExZ2VYZkgvSkRCL3B1cWlHeUx4dW02OFplMkJCMmJlR0pucVNQMmpSWWZjRUMKKzgzeUErbXBkMDRGbU9RQVVIbzNZOEtBT3FtSUQvUTkwemhxUVZOWTdFeHk0dFVZYjM2L2huaHBjSC9uZHZWT0FQeUgxVlR0azQvdGYKK28xWFQrV2NWY3Vwd1VhUEZrUjRFbXczaEFBN1dCZ2YrTVBqTDVMN1VsNnREWUd5OGdGb0w0QnZNLzR3RGYxM2d2LzUrdnVqNFFkZysKK0toaENEaGFiZXpGMks3YWZUYlJmTW1wV3Bwa0RWZm9CYXc3a1BPOWpQWHR6WUhMRWh0K0ZjU2VZYnc1Y2hzdTd3TmJXaW1JdlF1NFIKKzVsdE01M1BjQnQvenM3MmE0M2ZoKysyZkFoeXNyby9Bb202MjEwYnYveGhtZExMOU52V0hqSDBKaW5GUmd4OUtzTUxBZWdiZ0VldzgKK0h6NGY3SDNzeVU0d3dQcC9HanpQMkZPUWQ1UmRBRGY3MmMrMHZMY1ltd24zK3RrTDJxaTNRdmRwNVZvT0UvenNUUTJldzcyMHZEL2oKK1ZubDdtRzhCM0paa0J6K2tNRkI4c0Y3VGRIR0JZRlAvbEVLenFzRFE5TnVuUDBCWkM4amhrRjBtVmw0QnRQTHZOdnQ3N0VDRmZob04KK2NSYXNZNjlXVmYyWnNXTVBWRzFsYkw0S1l6bFlmOVgwZHhneHRZeDE1ZWh2MExtKzNjbFlOaXpqWDc1TWdoVUcxdmxHWTZPOXZ4ci8KK3E2OEtGczZjRG81Y3NmSDIrZGwrUCt0Vm9ZM1JQOGIvL3ROR2RDRmV2MlFmUEZCRnJiaWhxbExFWG0vcW80NzBzR2ErRjI3N0Nyc0wKK3JzUFZ2OVd5MzBzMjFSQVlBQlVmclArQTg1aUp6RTE4WlVTUy9IOWhIUDQ5Qng3WStXQVRJeXlxeGI3L2JZVGs3K2ZBOTFqdlI4amUKK2ZSWkdZM3lnYU0rM2NiQmFoVU5zaFFsbzNFYXpYZFZiVDlEckwwRXBXak9idEZqaFlQMEpIQ2VFMi9zT2pNS2xTZ2lPQ0ZGSzl3VmYKKzRtLytUdzNlUm91RnJ1OU5zbGkvRUpnc2gyc1ord3JrdmVWL2hsc294bUY3T3JpWERmYWdnL29sbzBVMFhrbW9VVkVjTERaWWp1b3EKK1ZMV0R3UG80UEJJZ2FBS2RROFNRdkpPajRCYkdQckJ4YjEzNEZ2c1l0MWhkV2ZDNHNjSFB3UDRHdDNkUHZ5aHNYcHZmUU9xdm9OUDUKK3ZncGowWGdWTG5BQU9PZ3NqK2ZBd3FycFVDeGpMSEJVOFlZQUF1czdrRzEwOERnMnZDNnhxYmZET1VONnNrK3hGMno2c2dkNTNQU0UKKzJIVVZOV0RYR0RqM1E1M2JQR0daVG9YdTlRNGJBMVRHdlplTTE4RFZHbFlocnk5WUFUV1FCZHBxckJjK0wwSVkydHVQb01PMFFmSHUKK1hXU1cvZ1BHWW4vdVpRME0vbDZ3d1NMR1k4SjhIUzQxRDRDRGhUSFlOL2hGbzdFREFMazdXcGFEZzhoN2lyNDZTb1E2OHNBS0NGdXIKK0lraU9nOENLekI2RmdMVWU0RWNpamdjWWkrQThLTjZyb2diMHY0RFJQMlFiVWRvY3ZxSFFVeHBaTDdzZ0tpbXdPc0xuaHZZRlMyMXQKK1FiVXFrV0NON3ZOUko2ZUEvaXpGYkllcDh1d2hqTk5QNWtCaDFlMDZZR0JGOXZVWkpJNWZFeWZScHVXK0V3WVdHak8wVFdYQXdkSi8KK1luckIrMEhiMFhLZnB2OVVnbVUwQkpidDdoVUFBQXZQU1VSQlZBZnI5Z1RCNm1IM1lWZlFUeGZzMk4wdE15SG5SQmhZZ3JkZmkyM2YKK3RJMDZZdTYxM2dHei9BVFc3bVRCb3NBOWRKUksvQmpyaW9Bci9IRWcyZ3JvMkJTdy96b2tqWkFGbTltaE1RNXd6TG9DQXlzOFdyd0sKK2lrK1pmVWhodWtMQUl1d2dlN00yRGwyaDZ1ZGVNWmNkcyttL1lSVGJUWlpnaGNaWVFWZjROOTdUaXdGV0Q0WlNjSXVmK29mMm94eWoKK080S3VrRGZnbnpRMFdHS24rK0JmVEs3dUVuc1pyckNMd3EyQmNsVVdNYXl1ditEOVhBcUg5akdNbmg2SjVLb0ljdmFGNWR5QTBxZ0gKK1d0cllLUDEzd3JwZWIvd2F4NUFobnZFS0JZc2RhMjA5Y1FCbW9WZmtZQjFBc0E2STl3NkFKc0VLQmV0dkdGbWgvM3FlbmVFUlZFeUwKK3RSeDBIbyt2TXMyVXpRemU3NExQaTNoZEpLeTRKL3lsc1R0eTlYaklxbi9tRERoNDcxU1ZhZUdQa293UDFuNGJ1ZUhQMm0vWnpvUHcKK3NQaHFDb3cxMEo5VGNnc1BtdlRmZFhxZjlOTlNEdjdGYVAwYjVoVXhFd3AxeVBmN1E4SHlObnE0S2ZzYTY4MkIzM0NqZUM2RjlQUTkKK2Y4U1FYb0lWbW02WVFobWRYNmpGZTNYNEFZc0oxbnJJRXgyK0p3Uit5OUZNWWRlS1ROd0Y4SHNSd1k0Rm5kdUREd0o5UDF6NVU5T0kKK2tWbjdIeTE3Z0xlQzJxZ0dZL2NBd01JajFWZWY2TDBQSXo1K1U2ZXEyaHNTSXk2c1JsVlJqMUhmd1k0dFFQZDF5SWJvNDlMWDBCemwKK1FDNjlYKzJoY0VyL0RmWU1idzZ6V04rRi9DTnNseTMzSFQrK243K0g0VS8yRGRhVlE1MUxYRndvd1FvRDYwME5GdTVoTDRNT1k2blIKK0c2cXJvb0NGRzQzbHYzbjd1N253dFZOc3UwN3gxQUlvUFlITlJSN3dYUjF1Um90QWVSL3lsaUxxZlRQWDJLc053eTdIRG5ad1NxQlQKK24zRENYVkdtUlZTQzd3Y3NkcDhHcXVwQSs1bS8yUitheDNyZlpuUlpjUE5ldEsrcUNxT1BVT3hOUzZWK3NqK0dxc2dSTHFMcnduQ0cKK0Fpdy9rcWVyRHBWSGFZdHBFUXI5M0ViUzkya25KRmpodDNSZXR1TVB3Mi9FM0hra0lyOFFlTG5BL00zYktJQ2xyU2tXT2E3VEl2K2gKK01aby9SVmMvWGVML0NkbW5UVWNZdUx1em5wb2J4cDBhMEtGV1JudlFVVmJmSkpjQmxpSnVRci8rV0pHaVBkQXlCZkxlQ00xamVSVlQKKzlHcFhtWksvbVRxeFBUdW5Lek9hNkpvNngzeS9xbXVNTXByV3pGRnM3eG41RGhGaTNXZTMzV2tFb3J1bUs4VTd1UDA5OW1RUkxwNGEKKzZWeXhhY0dHRU1taFk5dkxzbTBMbjcvTFFiNndQSHpLWElWNCtSSHpOOGRlK3NGVmV2YU01M2xPOWRnRzNYWW51Yi8xaWtKNW5LY1UKK0JkM2lnK1pIQlBZaWI3UjNmbmIrNXU2QjNJUnVkU2pSeGdBblBHeG01NTJKZjVjL3VhM2tXSmxFOVBwTVMxMTF2SEpzbEVjOHlJRisKK1VvTlFnd0xvQnFPVllwUmdTU1d0UmlwSURDMVIzNU5nU1NXbjdscFI1enBHNVZnSmxsUXlhcTBVUGJPWVR3K1JZRWtOV0czMTRzRTAKKzFYSG03VW13cEFZa1gzTWxVa1VwQmsvYzh1a1NMS21FMWQ1WWFUN3VyN3EvaDBoS3NLVDZWMmVycDdxaUlKQVRyMjd0LzBtK0VpeXAKK2FHcnhOamQ3R211cnF5ckxTeHppT1g5Q2xjMkpQVWRaZ2lVVlRhQkVDRmVVMTdZay9uQnVDWlpVTkJXRU1GVlFVZTFwYVJ2Z1kwa2wKK1dGSlJYU0VmRnQzVzNwSHNZMjRsV0ZKcGtRUkxTb0lsSmNHU2ttQkpTVW13cENSWVVoSXNLYWswZzlWYWIwendxcTNuUTA1N3ZRMWIKK205Nk91dXZMOVh5U29aKzFORzdiN1JjVE83ejFUZWJFcmRjYnQvV3RBSEF3dVBKZzQ5YW00TFFBMzlaNjJSZ1JxcThYMlVtUDBTWUgKK0d1dTNSUytxOE81V3NRVzJSUU51d3R1Q1dpVjJVOVRXRzJvM1dsRHM1ZS8xMWplZVNBZFlFZk1LdDl0cFRxRmFHdVc3anVYd1NZYisKK1k5TlZBSWUyQjQ5cmZ4NXViZU56dkh1WDIyaS84RnFpWW1YaFcrWWkyQUtWTVJlYjgrNmxBbktBR0VnblNzM3NuMEt6Q3RYUmY0aXkKKzVRTFJhdjY5T3BXREtqN1J3OTZmU2EweW1zOTV2cy9HVjRidEVWSXEwciszaU85MUJGdndOV3BCNWZHMGcvV3lCb3VhbWgrenc4VjkKK2RqdzVFemhZdlJkQS9qYlBkQmo5SGsxTUxXM2FZSE04MjBPZ0ZEWTlhYVBxV1NGYUQ3bGJQVE1oMzArVG94MnJteGVJQ2ZXTVYwS1UKK1lNVUY2MzBkeG0xdGJpd0MrOXRuSWpkY3I0bFd3MjB1Ym1vRUdPZEgxT3liUFVVMFB4Vi9kZnRXWER3M2JIYWR1QXVvUWQ0K0twcUYKK2V4WEJ1Tk8waUMyb09YNmZickN1QUY3MStHVXRMNktTS051WkJ3S3MxMnhVMWVHa0RiN0h2c3RyeFB5V2l2eTlwdUhKc2YrZHNTaDAKK24rTTJlQlpKL0JoODd3ejdHRTJPN3JJWjVSME8yU1JZL1lEMUhiQVRHYjFUcURKZm1GNmJhZFlnL1k1cVAySFU4UnRGayt2ZjFhaGcKKzVCaDRpVE8zTDVxbFErUDBQemFhYS8rdUxXOFBld0pvYXZFR1htUXZyV0JsR3pWbW1wcmJPT1dCUXBGZXNEK2ljckE2VzcxaTgycUUKK1pSMWRObFJSOU1lOHRCOTNmM09VMGFmUnJpbWovWDhGbFZ6amk4VFVPWHlETEY0MG1maytrdnVzQkNzK1dCVkdJU052TTlYa0RKMEoKK3JVRHBqYUxWMmx1YWhadHJZenEwTWxHTjlDL2FxS04rY2lFL1lGMTVDdHF0OS9sZjBsTlUyNVlkTnZlaUdxUVBNZGJ6Rjl1b2Q5SU0KKzFxMlF1L2xFeUJrRUF1emRxOThLSzBpS0p1Y25pT0U2c2RrUDBkVDk4TEVpMjhJOTZQZVBVNm1BbjRIK1VtalpVVnhSZklUdDBrUU4KK204WHcrQUVKVmhTd09vTmcvUXJnem1BRUhscTdZZUh6NGFVY1hnQzBXQXZnc2xPaUVzaC9DaUtwR2hZVjlIdVdpa0tLTnYxd2xCNjAKK1lpOVExZVNQOHpKR0grYmsvU0VOWUJsRHZIaXB5SVBaNktKbXJETk95TlBjR3VhbWcyRDF6aVMvZmdVUHFkQXJia2J6UzFYZXdmNGMKK3Z5NzA1M2dkaXRjMEhsTDlHSEx4c3RnQWRrWFRuaE1CVmlscmsyQkZBY3RzQ3NKbU9qYUZ0c3pvU0h1YlBhRmJob0oxdklqczBNa0YKK29Db3dEc0Y1RExKcDlTcGVrbkVCWkcvWHpLSkY2ME9LNloyY1FudnB5VmYwR3hoWTdPQUM2cnc1dE9laTdCb0VxeGVqOEY5VEtPYlkKK3dVNHVCL1NLMmFBL3ozejNVVWpQdXM3Qmp5aEdKOWg3RHN3NHdmYm1JRVBZbDhUdlVlRk92eCt0WGY1cENWYS9ZUFZ1NEQwNVpYV1UKK0VoY2hZQ0ZYbzQ1UVR3OTNkdUFsN2crVWlxU20vcnVPSDJFNHd0NHh3Y0o5eU5Xb2ZVUlVpd0JyZDdyVERlaUJQYmRuTzBCOUxnNVkKK3ZwbWdQbTNVS2NTektjTFRHV1VhTHlxcnZWOER4MHVVSlRtRVRDbFU4SWhnVzNTS3ZmNFIzT3prbUZ3OHBYWUpWbnhYU0wrejk3RTgKK296UlJUTEFPNlpDTnNmb0hPbXoyVTUyeGw5QmlLVUdMUlVYVzdFZEV6dkczV3JhWkRUcFdKS3ArcHRWaWhZUEZqMkh2K2RINkNTWlkKK3ZpbkM1VkZmY2JveVk4OFY4Ti9vRlkyQzd4UjF2YW9CL0pwLzBMRlZEdTJCVjdRSjlQaUFmL0E0Zmh6YUtzZ200d1ZLaFdRcFRoNUwKKzZQQml5RHNSR3l6a2l0ZnZOQUtyNVJoWWhjUllJcStqRzJEZEJYZVlOT1pCRGpkZUlzYjZJTWs2NzRtRGRXRFZGTkU5MkFXMm1HQ2gKK0ZkVkNlN0pkT1hhelY5aWJSVlZ1dThhZytSMGQ3R2U4Q25NcGpxZXpmUjAwQXN0UXBXUXBObGlQbGYxY09MQjRWWk9QNi9RZ0doYW8KK3diMEtjdGlmZ3IxQ3d4VWFkZFhHbUhZSnZlZTRJMGFhbW5xRmY3TFowOXdyeEw3ZW5jWVh4clpZaXlIWGVLYlBYOHZ6M3FGSWF6TEYKKzZXT1BVb1Z1OVExZWJuS0hxUGYrbFJMNk93YzdrR2l4cU1iNHJUQ1pkWGhJOWVCbzlrcVdZb00xblVwck0rcE94N0ZZUmZCUjRTZC8KK29lbEhlTUQvZVFMbzE0RThsZ2plZVdiOWJ3RzdORjJVbjJRc2tNYzZMOTE1clBzQkNtc2JuNXdPS3NWSUVVOEY1MkNkMmFzWjRYNDEKK0ZSRE4zL2FZM2Y0U3o3eHJXNThjQmJQUVFGRVc5QmxlMWY1RjBGYzN6T2VQblZoTWk3ZHJqaDhaYVdRWnZQY0Qxc3NPeUZtM3JXRzUKK2c5ZDVqS2pvSjhBNlF3OWZFQlg5ZXFmZzFnMFhZQngvaGpMdjZ4cEU1djFuMUNQOGlxaHVhMVJUWm1lZU1mZnlrbk9ac1cyVkkvMloKKzk5NE4yZnhlb2ZaOFJCNHJhTEcrWkRveURLcjJaOVA5UHg1djlTN0hxRW1kZFlyNkhzWGNObzArS2xiYVo1R0I2NkViV0pEOXRQbGgKK0VxeitZcXhkT3ZVS0hhSlhHTDBHNmN4Z0RkSmovRjVoRG0rMzlYUmZneXJ1b3lPOG1TZnZQM29xOENnVThpREIyNFlINmJhaDhqUkwKK1BWaHRua2F4ME9qaFNhdmVsbVpQYzF2WUtsT05uaGIrMXhDOTZQVjZkcHNqRmw1dmJxTDlYdmQ0NkthenI4bERIWTREWWlYcElHNGIKK05Pcm9FQ1ZKa1JlNVIvUUt2VWFiSFBCNm1sNDVGYmJLa1BIU2JBcFBCLytwUGE4WUh1NWdjeE1mdk9EMWVHajMxendlRE5OYWdpMXQKK2lNOUdiZkUwcDJWMGc1UVVrMkJKU2JDa0pGaFNVb1BXL3dmcjV0ajh3Z0UrSHdBQUFBQkpSVTVFcmtKZ2dnPT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC8uZ2l0aWdub3JlCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvYmlibGlvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvYmlibGlvLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9iaWJsaW8ueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2JpYmxpby54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY2FwdHVyZS5jLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY2FwdHVyZS5jLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jYXB0dXJlLmMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2NhcHR1cmUuYy54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY29tbW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY29tbW9uLnhtbAppbmRleCA5MDI4NzIxLi5hODZmN2EwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb21tb24ueG1sCkBAIC0yMzYsNyArMjM2LDE1IEBACiAgICAgPHBhcmE+VGhlICZWSURJT0MtUVVFUllDQVA7IGlvY3RsIGlzIGF2YWlsYWJsZSB0byBjaGVjayBpZiB0aGUga2VybmVsCiBkZXZpY2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbiwgYW5kIHRvIHF1ZXJ5IHRoZSA8bGluawogbGlua2VuZD0iZGV2aWNlcyI+ZnVuY3Rpb25zPC9saW5rPiBhbmQgPGxpbmsgbGlua2VuZD0iaW8iPkkvTwotbWV0aG9kczwvbGluaz4gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuIE90aGVyIGZlYXR1cmVzIGNhbiBiZSBxdWVyaWVkCittZXRob2RzPC9saW5rPiBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS48L3BhcmE+CisKKyAgICA8cGFyYT5TdGFydGluZyB3aXRoIGtlcm5lbCB2ZXJzaW9uIDMuMSwgVklESU9DLVFVRVJZQ0FQIHdpbGwgcmV0dXJuIHRoZQorVjRMMiBBUEkgdmVyc2lvbiB1c2VkIGJ5IHRoZSBkcml2ZXIsIHdpdGggZ2VuZXJhbGx5IG1hdGNoZXMgdGhlIEtlcm5lbCB2ZXJzaW9uLgorVGhlcmUncyBubyBuZWVkIG9mIHVzaW5nICZWSURJT0MtUVVFUllDQVA7IHRvIGNoZWNrIGlmIGFuIHNwZWNpZmljIGlvY3RsIGlzCitzdXBwb3J0ZWQsIHRoZSBWNEwyIGNvcmUgbm93IHJldHVybnMgRU5PSU9DVExDTUQgaWYgYSBkcml2ZXIgZG9lc24ndCBwcm92aWRlCitzdXBwb3J0IGZvciBhbiBpb2N0bC48L3BhcmE+CisKKyAgICA8cGFyYT5PdGhlciBmZWF0dXJlcyBjYW4gYmUgcXVlcmllZAogYnkgY2FsbGluZyB0aGUgcmVzcGVjdGl2ZSBpb2N0bCwgZm9yIGV4YW1wbGUgJlZJRElPQy1FTlVNSU5QVVQ7CiB0byBsZWFybiBhYm91dCB0aGUgbnVtYmVyLCB0eXBlcyBhbmQgbmFtZXMgb2YgdmlkZW8gY29ubmVjdG9ycyBvbiB0aGUKIGRldmljZS4gQWx0aG91Z2ggYWJzdHJhY3Rpb24gaXMgYSBtYWpvciBvYmplY3RpdmUgb2YgdGhpcyBBUEksIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21wYXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb21wYXQueG1sCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb21wYXQueG1sCmluZGV4IDlmN2NkNGYuLmNlMTAwNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tcGF0LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2NvbXBhdC54bWwKQEAgLTEwLDEyICsxMCwxMCBAQAogICAgIDxwYXJhPlRoZSBWaWRlbyBGb3IgTGludXggQVBJIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIGluIExpbnV4IDIuMSB0bwogdW5pZnkgYW5kIHJlcGxhY2UgdmFyaW91cyBUViBhbmQgcmFkaW8gZGV2aWNlIHJlbGF0ZWQgaW50ZXJmYWNlcywKIGRldmVsb3BlZCBpbmRlcGVuZGVudGx5IGJ5IGRyaXZlciB3cml0ZXJzIGluIHByaW9yIHllYXJzLiBTdGFydGluZwotd2l0aCBMaW51eCAyLjUgdGhlIG11Y2ggaW1wcm92ZWQgVjRMMiBBUEkgcmVwbGFjZXMgdGhlIFY0TCBBUEksCi1hbHRob3VnaCBleGlzdGluZyBkcml2ZXJzIHdpbGwgY29udGludWUgdG8gc3VwcG9ydCBWNEwgYXBwbGljYXRpb25zIGluCi10aGUgZnV0dXJlLCBlaXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCB0aGUgVjRMMiBjb21wYXRpYmlsaXR5IGxheWVyIGluCi10aGUgPGZpbGVuYW1lPnZpZGVvZGV2PC9maWxlbmFtZT4ga2VybmVsIG1vZHVsZSB0cmFuc2xhdGluZyBpb2N0bHMgb24KLXRoZSBmbHkuIEZvciBhIHRyYW5zaXRpb24gcGVyaW9kIG5vdCBhbGwgZHJpdmVycyB3aWxsIHN1cHBvcnQgdGhlIFY0TDIKLUFQSS48L3BhcmE+Cit3aXRoIExpbnV4IDIuNSB0aGUgbXVjaCBpbXByb3ZlZCBWNEwyIEFQSSByZXBsYWNlcyB0aGUgVjRMIEFQSS4KK1RoZSBzdXBwb3J0IGZvciB0aGUgb2xkIFY0TCBjYWxscyB3ZXJlIHJlbW92ZWQgZnJvbSBLZXJuZWwsIGJ1dCB0aGUKK2xpYnJhcnkgPHhyZWYgbGlua2VuZD0ibGlidjRsIiAvPiBzdXBwb3J0cyB0aGUgY29udmVyc2lvbiBvZiBhIFY0TAorQVBJIHN5c3RlbSBjYWxsIGludG8gYSBWNEwyIG9uZS48L3BhcmE+CiAKICAgICA8c2VjdGlvbj4KICAgICAgIDx0aXRsZT5PcGVuaW5nIGFuZCBDbG9zaW5nIERldmljZXM8L3RpdGxlPgpAQCAtODQsMTIgKzgyLDcgQEAKIGRldmljZSBmaWxlLiBWNEwyIGRyaXZlcnMgPGVtcGhhc2lzPm1heTwvZW1waGFzaXM+IHN1cHBvcnQgbXVsdGlwbGUKIG9wZW5zLCBzZWUgPHhyZWYgbGlua2VuZD0ib3BlbiIgLz4gZm9yIGRldGFpbHMgYW5kIGNvbnNlcXVlbmNlcy48L3BhcmE+CiAKLSAgICAgIDxwYXJhPlY0TCBkcml2ZXJzIHJlc3BvbmQgdG8gVjRMMiBpb2N0bHMgd2l0aCBhbiAmRUlOVkFMOy4gVGhlCi1jb21wYXRpYmlsaXR5IGxheWVyIGluIHRoZSBWNEwyIDxmaWxlbmFtZT52aWRlb2RldjwvZmlsZW5hbWU+IG1vZHVsZQotY2FuIHRyYW5zbGF0ZSBWNEwgaW9jdGwgcmVxdWVzdHMgdG8gdGhlaXIgVjRMMiBjb3VudGVycGFydCwgaG93ZXZlciBhCi1WNEwyIGRyaXZlciB1c3VhbGx5IG5lZWRzIG1vcmUgcHJlcGFyYXRpb24gdG8gYmVjb21lIGZ1bGx5IFY0TAotY29tcGF0aWJsZS4gVGhpcyBpcyBjb3ZlcmVkIGluIG1vcmUgZGV0YWlsIGluIDx4cmVmCi0JICBsaW5rZW5kPSJkcml2ZXIiIC8+LjwvcGFyYT4KKyAgICAgIDxwYXJhPlY0TCBkcml2ZXJzIHJlc3BvbmQgdG8gVjRMMiBpb2N0bHMgd2l0aCBhbiAmRUlOVkFMOy48L3BhcmE+CiAgICAgPC9zZWN0aW9uPgogCiAgICAgPHNlY3Rpb24+CkBAIC0yMzY3LDYgKzIzNjAsMTYgQEAKICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvb3JkZXJlZGxpc3Q+CiAgICAgPC9zZWN0aW9uPgorICAgIDxzZWN0aW9uPgorICAgICAgPHRpdGxlPlY0TDIgaW4gTGludXggMy4xPC90aXRsZT4KKyAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1FVRVJZQ0FQIG5vdyByZXR1cm5zIGEgcGVyLXN1YnN5c3RlbSB2ZXJzaW9uIGluc3RlYWQgb2YgYSBwZXItZHJpdmVyIG9uZS48L3BhcmE+CisJICA8cGFyYT5TdGFuZGFyZGl6ZSBhbiBlcnJvciBjb2RlIGZvciBpbnZhbGlkIGlvY3RsLjwvcGFyYT4KKyAgICAgICAgICA8cGFyYT5BZGRlZCBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLjwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9zZWN0aW9uPgogCiAgICAgPHNlY3Rpb24gaWQ9Im90aGVyIj4KICAgICAgIDx0aXRsZT5SZWxhdGlvbiBvZiBWNEwyIHRvIG90aGVyIExpbnV4IG11bHRpbWVkaWEgQVBJczwvdGl0bGU+CkBAIC0yNDcyLDYgKzI0NzUsOSBAQAogICAgICAgICA8bGlzdGl0ZW0+CiAJICA8cGFyYT4mVklESU9DLURCRy1HLUNISVAtSURFTlQ7IGlvY3RsLjwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorCSAgPHBhcmE+Rmxhc2ggQVBJLiA8eHJlZiBsaW5rZW5kPSJmbGFzaC1jb250cm9scyIgLz48L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L2l0ZW1pemVkbGlzdD4KICAgICA8L3NlY3Rpb24+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb250cm9scy54bWwKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb250cm9scy54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY29udHJvbHMueG1sCmluZGV4IGE5MjBlZTguLjIzZmRmNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29udHJvbHMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY29udHJvbHMueG1sCkBAIC01MSw2ICs1MSwxMCBAQAogY2FsbGVkLjwvcGFyYT4KICAgICAgIDwvZm9vdG5vdGU+PC9wYXJhPgogCisgICAgPHBhcmE+CisgICAgICBBbGwgY29udHJvbHMgdXNlIG1hY2hpbmUgZW5kaWFubmVzcy4KKyAgICA8L3BhcmE+CisKICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImNvbnRyb2wtaWQiPgogICAgICAgPHRpdGxlPkNvbnRyb2wgSURzPC90aXRsZT4KICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CkBAIC0zMjUsNiArMzI5LDIyIEBACiA8Y29uc3RhbnQ+VjRMMl9DSURfSUxMVU1JTkFUT1JTXzI8L2NvbnN0YW50PiArIDEpLjwvZW50cnk+CiAJICA8L3Jvdz4KIAkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX0NBUFRVUkU8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgaXMgYSByZWFkLW9ubHkgY29udHJvbCB0aGF0IGNhbiBiZSByZWFkIGJ5IHRoZSBhcHBsaWNhdGlvbgorYW5kIHVzZWQgYXMgYSBoaW50IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENBUFRVUkUgYnVmZmVycyB0byBwYXNzIHRvIFJFUUJVRlMuCitUaGUgdmFsdWUgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIENBUFRVUkUgYnVmZmVycyB0aGF0IGlzIG5lY2Vzc2FyeSBmb3IgaGFyZHdhcmUKK3RvIHdvcmsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfT1VUUFVUPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGlzIGlzIGEgcmVhZC1vbmx5IGNvbnRyb2wgdGhhdCBjYW4gYmUgcmVhZCBieSB0aGUgYXBwbGljYXRpb24KK2FuZCB1c2VkIGFzIGEgaGludCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBPVVRQVVQgYnVmZmVycyB0byBwYXNzIHRvIFJFUUJVRlMuCitUaGUgdmFsdWUgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIE9VVFBVVCBidWZmZXJzIHRoYXQgaXMgbmVjZXNzYXJ5IGZvciBoYXJkd2FyZQordG8gd29yay48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgogCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ0lEX1BSSVZBVEVfQkFTRTwvY29uc3RhbnQ+PC9lbnRyeT4KIAkgICAgPGVudHJ5PjwvZW50cnk+CiAJICAgIDxlbnRyeT5JRCBvZiB0aGUgZmlyc3QgY3VzdG9tIChkcml2ZXIgc3BlY2lmaWMpIGNvbnRyb2wuCkBAIC01NDUsNiArNTY1LDEwIEBACiByZXR1cm4gYW4gZXJyb3IpLiBBIGdvb2QgZXhhbXBsZSBpcyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgTVBFRyBhdWRpbwogYml0cmF0ZXMuIFNvbWUgZHJpdmVycyBvbmx5IHN1cHBvcnQgb25lIG9yIHR3byBiaXRyYXRlcywgb3RoZXJzCiBzdXBwb3J0IGEgd2lkZXIgcmFuZ2UuPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlBbGwgY29udHJvbHMgdXNlIG1hY2hpbmUgZW5kaWFubmVzcy4KKyAgICAgIDwvcGFyYT4KICAgICA8L3NlY3Rpb24+CiAKICAgICA8c2VjdGlvbj4KQEAgLTY3MCw3ICs2OTQsOCBAQAogCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIE1QRUctMSwgLTIgb3IgLTQKIG91dHB1dCBzdHJlYW0gdHlwZS4gT25lIGNhbm5vdCBhc3N1bWUgYW55dGhpbmcgaGVyZS4gRWFjaCBoYXJkd2FyZQogTVBFRyBlbmNvZGVyIHRlbmRzIHRvIHN1cHBvcnQgZGlmZmVyZW50IHN1YnNldHMgb2YgdGhlIGF2YWlsYWJsZSBNUEVHCi1zdHJlYW0gdHlwZXMuIFRoZSBjdXJyZW50bHkgZGVmaW5lZCBzdHJlYW0gdHlwZXMgYXJlOjwvZW50cnk+CitzdHJlYW0gdHlwZXMuIFRoaXMgY29udHJvbCBpcyBzcGVjaWZpYyB0byBtdWx0aXBsZXhlZCBNUEVHIHN0cmVhbXMuCitUaGUgY3VycmVudGx5IGRlZmluZWQgc3RyZWFtIHR5cGVzIGFyZTo8L2VudHJ5PgogCSAgICAgIDwvcm93PgogCSAgICAgIDxyb3c+CiAJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgpAQCAtODAwLDYgKzgyNSw3IEBACiAJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgogCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ19hdWRpb19lbmNvZGluZzwvZW50cnk+CiAJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NUEVHIEF1ZGlvIGVuY29kaW5nLgorVGhpcyBjb250cm9sIGlzIHNwZWNpZmljIHRvIG11bHRpcGxleGVkIE1QRUcgc3RyZWFtcy4KIFBvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KIAkgICAgICA8L3Jvdz4KIAkgICAgICA8cm93PgpAQCAtMTI1MCw3ICsxMjc2LDggQEAKIAkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CiAJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nPC9lbnRyeT4KIAkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1QRUcgVmlkZW8gZW5jb2RpbmcKLW1ldGhvZC4gUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorbWV0aG9kLiBUaGlzIGNvbnRyb2wgaXMgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgTVBFRyBzdHJlYW1zLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgogCSAgICAgIDwvcm93PgogCSAgICAgIDxyb3c+CiAJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgpAQCAtMTQwNiw2ICsxNDMzLDk1OSBAQAogCQkgIDwvdGJvZHk+CiAJCTwvZW50cnl0Ymw+CiAJICAgICAgPC9yb3c+CisKKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9TTElDRV9JTlRFUkZBQ0U8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPklmIGVuYWJsZWQgdGhlIGRlY29kZXIgZXhwZWN0cyB0byByZWNlaXZlIGEgc2luZ2xlIHNsaWNlIHBlciBidWZmZXIsIG90aGVyd2lzZQordGhlIGRlY29kZXIgZXhwZWN0cyBhIHNpbmdsZSBmcmFtZSBpbiBwZXIgYnVmZmVyLiBBcHBsaWNhYmxlIHRvIHRoZSBkZWNvZGVyLCBhbGwgY29kZWNzLgorPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmJvb2xlYW48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlIHdyaXRpbmcgc2FtcGxlIGFzcGVjdCByYXRpbyBpbiB0aGUgVmlkZW8gVXNhYmlsaXR5IEluZm9ybWF0aW9uLgorQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy12aWRlby1oMjY0LXZ1aS1zYXItaWRjIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfdmlkZW9faDI2NF92dWlfc2FyX2lkYzwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5WVUkgc2FtcGxlIGFzcGVjdCByYXRpbyBpbmRpY2F0b3IgZm9yIEguMjY0IGVuY29kaW5nLiBUaGUgdmFsdWUKK2lzIGRlZmluZWQgaW4gdGhlIHRhYmxlIEUtMSBpbiB0aGUgc3RhbmRhcmQuIEFwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisKKwkJCTxyb3c+CisJCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfVU5TUEVDSUZJRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCQkgIDxlbnRyeT5VbnNwZWNpZmllZDwvZW50cnk+CisJCQk8L3Jvdz4KKwkJCTxyb3c+CisJCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMXgxPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkJICA8ZW50cnk+MXgxPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMngxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjEyeDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjEweDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xNngxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjE2eDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180MHgzMzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjQweDMzPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yNHgxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjI0eDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yMHgxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjIweDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18zMngxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjMyeDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ184MHgzMzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjgweDMzPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xOHgxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjE4eDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xNXgxMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjE1eDExPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ182NHgzMzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjY0eDMzPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xNjB4OTk8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCQkgIDxlbnRyeT4xNjB4OTk8L2VudHJ5PgorCQkJPC9yb3c+CisJCQk8cm93PgorCQkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzR4MzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJCSAgPGVudHJ5PjR4MzwvZW50cnk+CisJCQk8L3Jvdz4KKwkJCTxyb3c+CisJCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkJICA8ZW50cnk+M3gyPC9lbnRyeT4KKwkJCTwvcm93PgorCQkJPHJvdz4KKwkJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yeDE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCQkgIDxlbnRyeT4yeDE8L2VudHJ5PgorCQkJPC9yb3c+CisJCQk8cm93PgorCQkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDX0VYVEVOREVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkJICA8ZW50cnk+RXh0ZW5kZWQgU0FSPC9lbnRyeT4KKwkJCTwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfV0lEVEg8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkV4dGVuZGVkIHNhbXBsZSBhc3BlY3QgcmF0aW8gd2lkdGggZm9yIEguMjY0IFZVSSBlbmNvZGluZy4KK0FwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9FWFRfU0FSX0hFSUdIVDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RXh0ZW5kZWQgc2FtcGxlIGFzcGVjdCByYXRpbyBoZWlnaHQgZm9yIEguMjY0IFZVSSBlbmNvZGluZy4KK0FwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8taDI2NC1sZXZlbCI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUw8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX2gyNjRfbGV2ZWw8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgSDI2NCB2aWRlbyBlbGVtZW50YXJ5IHN0cmVhbS4KK0FwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAxLjA8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFCPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgMUI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDEuMTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8yPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgMS4yPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAxLjM8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDIuMDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8xPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgMi4xPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAyLjI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDMuMDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18xPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgMy4xPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAzLjI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDQuMDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8xPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgNC4xPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCA0LjI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzVfMDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDUuMDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8xPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgNS4xPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy12aWRlby1tcGVnNC1sZXZlbCI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ192aWRlb19tcGVnNF9sZXZlbDwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBNUEVHNCBlbGVtZW50YXJ5IHN0cmVhbS4KK0FwcGxpY2FibGUgdG8gdGhlIE1QRUc0IGVuY29kZXIuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0xFVkVMXzA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAwPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fTEVWRUxfMEI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAwYjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0xFVkVMXzE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCAxPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fTEVWRUxfMjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkxldmVsIDI8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19MRVZFTF8zPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgMzwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0xFVkVMXzNCPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgM2I8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19MRVZFTF80PC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TGV2ZWwgNDwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0xFVkVMXzU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5MZXZlbCA1PC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy12aWRlby1oMjY0LXByb2ZpbGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BST0ZJTEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX2gyNjRfcHJvZmlsZTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5UaGUgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgSDI2NC4KK0FwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0JBU0VMSU5FPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QmFzZWxpbmUgcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DT05TVFJBSU5FRF9CQVNFTElORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkNvbnN0cmFpbmVkIEJhc2VsaW5lIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTUFJTjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk1haW4gcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9FWFRFTkRFRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkV4dGVuZGVkIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkhpZ2ggcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzEwPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+SGlnaCAxMCBwcm9maWxlPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+SGlnaCA0MjIgcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9QUkVESUNUSVZFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+SGlnaCA0NDQgUHJlZGljdGl2ZSBwcm9maWxlPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTBfSU5UUkE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5IaWdoIDEwIEludHJhIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjJfSU5UUkE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5IaWdoIDQyMiBJbnRyYSBwcm9maWxlPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDQ0X0lOVFJBPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+SGlnaCA0NDQgSW50cmEgcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DQVZMQ180NDRfSU5UUkE8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5DQVZMQyA0NDQgSW50cmEgcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9TQ0FMQUJMRV9CQVNFTElORTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlNjYWxhYmxlIEJhc2VsaW5lIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlNjYWxhYmxlIEhpZ2ggcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9TQ0FMQUJMRV9ISUdIX0lOVFJBPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+U2NhbGFibGUgSGlnaCBJbnRyYSBwcm9maWxlPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdIPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+U3RlcmVvIEhpZ2ggcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NVUxUSVZJRVdfSElHSDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk11bHRpdmlldyBIaWdoIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisKKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8tbXBlZzQtcHJvZmlsZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX21wZWc0X3Byb2ZpbGU8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIE1QRUc0LgorQXBwbGljYWJsZSB0byB0aGUgTVBFRzQgZW5jb2Rlci4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fUFJPRklMRV9TSU1QTEU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5TaW1wbGUgcHJvZmlsZTwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX1BST0ZJTEVfQURWQU5DRURfU0lNUExFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+QWR2YW5jZWQgU2ltcGxlIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19QUk9GSUxFX0NPUkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Db3JlIHByb2ZpbGU8L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19QUk9GSUxFX1NJTVBMRV9TQ0FMQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlNpbXBsZSBTY2FsYWJsZSBwcm9maWxlPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fUFJPRklMRV9BRFZBTkNFRF9DT0RJTkdfRUZGSUNJRU5DWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NQVhfUkVGX1BJQzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+VGhlIG1heGltdW0gbnVtYmVyIG9mIHJlZmVyZW5jZSBwaWN0dXJlcyB1c2VkIGZvciBlbmNvZGluZy4KK0FwcGxpY2FibGUgdG8gdGhlIGVuY29kZXIuCis8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8tbXVsdGktc2xpY2UtbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX3ZpZGVvX211bHRpX3NsaWNlX21vZGU8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RGV0ZXJtaW5lcyBob3cgdGhlIGVuY29kZXIgc2hvdWxkIGhhbmRsZSBkaXZpc2lvbiBvZiBmcmFtZSBpbnRvIHNsaWNlcy4KK0FwcGxpY2FibGUgdG8gdGhlIGVuY29kZXIuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREVfU0lOR0xFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+U2luZ2xlIHNsaWNlIHBlciBmcmFtZS48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX01BWF9NQjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pk11bHRpcGxlIHNsaWNlcyB3aXRoIHNldCBtYXhpbXVtIG51bWJlciBvZiBtYWNyb2Jsb2NrcyBwZXIgc2xpY2UuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERV9NQVhfQllURVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5NdWx0aXBsZSBzbGljZSB3aXRoIHNldCBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgcGVyIHNsaWNlLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfTUI8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBtYXhpbXVtIG51bWJlciBvZiBtYWNyb2Jsb2NrcyBpbiBhIHNsaWNlLiBVc2VkIHdoZW4KKzxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREU8L2NvbnN0YW50PiBpcyBzZXQgdG8gPGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX01BWF9NQjwvY29uc3RhbnQ+LgorQXBwbGljYWJsZSB0byB0aGUgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBtYXhpbXVtIHNpemUgb2YgYSBzbGljZSBpbiBieXRlcy4gVXNlZCB3aGVuCis8Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFPC9jb25zdGFudD4gaXMgc2V0IHRvIDxjb25zdGFudD5WNEwyX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERV9NQVhfQllURVM8L2NvbnN0YW50Pi4KK0FwcGxpY2FibGUgdG8gdGhlIGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdyBpZD0idjRsMi1tcGVnLXZpZGVvLWgyNjQtbG9vcC1maWx0ZXItbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfdmlkZW9faDI2NF9sb29wX2ZpbHRlcl9tb2RlPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkxvb3AgZmlsdGVyIG1vZGUgZm9yIEgyNjQgZW5jb2Rlci4KK1Bvc3NpYmxlIHZhbHVlcyBhcmU6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0VOQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Mb29wIGZpbHRlciBpcyBlbmFibGVkLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9ESVNBQkxFRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkxvb3AgZmlsdGVyIGlzIGRpc2FibGVkLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9ESVNBQkxFRF9BVF9TTElDRV9CT1VOREFSWTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5Pkxvb3AgZmlsdGVyIGlzIGRpc2FibGVkIGF0IHRoZSBzbGljZSBib3VuZGFyeS48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9BTFBIQTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TG9vcCBmaWx0ZXIgYWxwaGEgY29lZmZpY2llbnQsIGRlZmluZWQgaW4gdGhlIEgyNjQgc3RhbmRhcmQuCitBcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9CRVRBPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Mb29wIGZpbHRlciBiZXRhIGNvZWZmaWNpZW50LCBkZWZpbmVkIGluIHRoZSBIMjY0IHN0YW5kYXJkLgorQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy12aWRlby1oMjY0LWVudHJvcHktbW9kZSI+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+ZW51bSZuYnNwO3Y0bDJfbXBlZ192aWRlb19oMjY0X2VudHJvcHlfbW9kZTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbnRyb3B5IGNvZGluZyBtb2RlIGZvciBIMjY0IC0gQ0FCQUMvQ0FWQUxDLgorQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLgorUG9zc2libGUgdmFsdWVzIGFyZTo8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCQkgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlVzZSBDQVZMQyBlbnRyb3B5IGNvZGluZy48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJBQzwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlVzZSBDQUJBQyBlbnRyb3B5IGNvZGluZy48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgPC90Ym9keT4KKwkJPC9lbnRyeXRibD4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGUgOFg4IHRyYW5zZm9ybSBmb3IgSDI2NC4gQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0NZQ0xJQ19JTlRSQV9SRUZSRVNIX01CPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5DeWNsaWMgaW50cmEgbWFjcm9ibG9jayByZWZyZXNoLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY29udGludW91cyBtYWNyb2Jsb2NrcworcmVmcmVzaGVkIGV2ZXJ5IGZyYW1lLiBFYWNoIGZyYW1lIGEgc3VjY2VzaXZlIHNldCBvZiBtYWNyb2Jsb2NrcyBpcyByZWZyZXNoZWQgdW50aWwgdGhlIGN5Y2xlIGNvbXBsZXRlcyBhbmQgc3RhcnRzIGZyb20gdGhlCit0b3Agb2YgdGhlIGZyYW1lLiBBcHBsaWNhYmxlIHRvIEgyNjQsIEgyNjMgYW5kIE1QRUc0IGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5GcmFtZSBsZXZlbCByYXRlIGNvbnRyb2wgZW5hYmxlLgorSWYgdGhpcyBjb250cm9sIGlzIGRpc2FibGVkIHRoZW4gdGhlIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIGVhY2ggZnJhbWUgdHlwZSBpcyBjb25zdGFudCBhbmQgc2V0IHdpdGggYXBwcm9wcmlhdGUgY29udHJvbHMKKyhlLmcuIDxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfSV9GUkFNRV9RUDwvY29uc3RhbnQ+KS4KK0lmIGZyYW1lIHJhdGUgY29udHJvbCBpcyBlbmFibGVkIHRoZW4gcXVhbnRpemF0aW9uIHBhcmFtZXRlciBpcyBhZGp1c3RlZCB0byBtZWV0IHRoZSBjaG9zZW4gYml0cmF0ZS4gTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZQorZm9yIHRoZSBxdWFudGl6YXRpb24gcGFyYW1ldGVyIGNhbiBiZSBzZXQgd2l0aCBhcHByb3ByaWF0ZSBjb250cm9scyAoZS5nLiA8Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjYzX01JTl9RUDwvY29uc3RhbnQ+KS4KK0FwcGxpY2FibGUgdG8gZW5jb2RlcnMuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fTUJfUkNfRU5BQkxFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NYWNyb2Jsb2NrIGxldmVsIHJhdGUgY29udHJvbCBlbmFibGUuCitBcHBsaWNhYmxlIHRvIHRoZSBNUEVHNCBhbmQgSDI2NCBlbmNvZGVycy48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9RUEVMPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5RdWFydGVyIHBpeGVsIG1vdGlvbiBlc3RpbWF0aW9uIGZvciBNUEVHNC4gQXBwbGljYWJsZSB0byB0aGUgTVBFRzQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjYzX0lfRlJBTUVfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIEkgZnJhbWUgZm9yIEgyNjMuIFZhbGlkIHJhbmdlOiBmcm9tIDEgdG8gMzEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NSU5fUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1pbmltdW0gcXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgSDI2My4gVmFsaWQgcmFuZ2U6IGZyb20gMSB0byAzMS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjYzX01BWF9RUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TWF4aW11bSBxdWFudGl6YXRpb24gcGFyYW1ldGVyIGZvciBIMjYzLiBWYWxpZCByYW5nZTogZnJvbSAxIHRvIDMxLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfUF9GUkFNRV9RUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgYW4gUCBmcmFtZSBmb3IgSDI2My4gVmFsaWQgcmFuZ2U6IGZyb20gMSB0byAzMS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjYzX0JfRlJBTUVfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIEIgZnJhbWUgZm9yIEgyNjMuIFZhbGlkIHJhbmdlOiBmcm9tIDEgdG8gMzEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9JX0ZSQU1FX1FQPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5RdWFudGl6YXRpb24gcGFyYW1ldGVyIGZvciBhbiBJIGZyYW1lIGZvciBIMjY0LiBWYWxpZCByYW5nZTogZnJvbSAwIHRvIDUxLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUlOX1FQPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5NaW5pbXVtIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIEgyNjQuIFZhbGlkIHJhbmdlOiBmcm9tIDAgdG8gNTEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9NQVhfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1heGltdW0gcXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgSDI2NC4gVmFsaWQgcmFuZ2U6IGZyb20gMCB0byA1MS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BfRlJBTUVfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIFAgZnJhbWUgZm9yIEgyNjQuIFZhbGlkIHJhbmdlOiBmcm9tIDAgdG8gNTEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9CX0ZSQU1FX1FQPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5RdWFudGl6YXRpb24gcGFyYW1ldGVyIGZvciBhbiBCIGZyYW1lIGZvciBIMjY0LiBWYWxpZCByYW5nZTogZnJvbSAwIHRvIDUxLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0lfRlJBTUVfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlF1YW50aXphdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIEkgZnJhbWUgZm9yIE1QRUc0LiBWYWxpZCByYW5nZTogZnJvbSAxIHRvIDMxLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01JTl9RUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+TWluaW11bSBxdWFudGl6YXRpb24gcGFyYW1ldGVyIGZvciBNUEVHNC4gVmFsaWQgcmFuZ2U6IGZyb20gMSB0byAzMS48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NQVhfUVA8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPk1heGltdW0gcXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgTVBFRzQuIFZhbGlkIHJhbmdlOiBmcm9tIDEgdG8gMzEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUF9GUkFNRV9RUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgYW4gUCBmcmFtZSBmb3IgTVBFRzQuIFZhbGlkIHJhbmdlOiBmcm9tIDEgdG8gMzEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfQl9GUkFNRV9RUDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UXVhbnRpemF0aW9uIHBhcmFtZXRlciBmb3IgYW4gQiBmcmFtZSBmb3IgTVBFRzQuIFZhbGlkIHJhbmdlOiBmcm9tIDEgdG8gMzEuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fVkJWX1NJWkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBWaWRlbyBCdWZmZXIgVmVyaWZpZXIgc2l6ZSBpbiBraWxvYnl0ZXMsIGl0IGlzIHVzZWQgYXMgYSBsaW1pdGF0aW9uIG9mIGZyYW1lIHNraXAuCitUaGUgVkJWIGlzIGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkIGFzIGEgbWVhbiB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvZHVjZWQgc3RyZWFtIHdpbGwgYmUgc3VjY2VzZnVsbHkgZGVjb2RlZC4KK1RoZSBzdGFuZGFyZCBkZXNjcmliZXMgaXQgYXMgIlBhcnQgb2YgYSBoeXBvdGhldGljYWwgZGVjb2RlciB0aGF0IGlzIGNvbmNlcHR1YWxseSBjb25uZWN0ZWQgdG8gdGhlCitvdXRwdXQgb2YgdGhlIGVuY29kZXIuIEl0cyBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBjb25zdHJhaW50IG9uIHRoZSB2YXJpYWJpbGl0eSBvZiB0aGUgZGF0YSByYXRlIHRoYXQgYW4KK2VuY29kZXIgb3IgZWRpdGluZyBwcm9jZXNzIG1heSBwcm9kdWNlLiIuCitBcHBsaWNhYmxlIHRvIHRoZSBNUEVHMSwgTVBFRzIsIE1QRUc0IGVuY29kZXJzLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQ1BCX1NJWkU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBDb2RlZCBQaWN0dXJlIEJ1ZmZlciBzaXplIGluIGtpbG9ieXRlcywgaXQgaXMgdXNlZCBhcyBhIGxpbWl0YXRpb24gb2YgZnJhbWUgc2tpcC4KK1RoZSBDUEIgaXMgZGVmaW5lZCBpbiB0aGUgSDI2NCBzdGFuZGFyZCBhcyBhIG1lYW4gdG8gdmVyaWZ5IHRoYXQgdGhlIHByb2R1Y2VkIHN0cmVhbSB3aWxsIGJlIHN1Y2Nlc2Z1bGx5IGRlY29kZWQuCitBcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKworCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9JX1BFUklPRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UGVyaW9kIGJldHdlZW4gSS1mcmFtZXMgaW4gdGhlIG9wZW4gR09QIGZvciBIMjY0LiBJbiBjYXNlIG9mIGFuIG9wZW4gR09QCit0aGlzIGlzIHRoZSBwZXJpb2QgYmV0d2VlbiB0d28gSS1mcmFtZXMuIFRoZSBwZXJpb2QgYmV0d2VlbiBJRFIgKEluc3RhbnRhbmVvdXMgRGVjb2RpbmcgUmVmcmVzaCkgZnJhbWVzIGlzIHRha2VuIGZyb20gdGhlIEdPUF9TSVpFIGNvbnRyb2wuCitBbiBJRFIgZnJhbWUsIHdoaWNoIHN0YW5kcyBmb3IgSW5zdGFudGFuZW91cyBEZWNvZGluZyBSZWZyZXNoIGlzIGFuIEktZnJhbWUgYWZ0ZXIgd2hpY2ggbm8gcHJpb3IgZnJhbWVzIGFyZQorcmVmZXJlbmNlZC4gVGhpcyBtZWFucyB0aGF0IGEgc3RyZWFtIGNhbiBiZSByZXN0YXJ0ZWQgZnJvbSBhbiBJRFIgZnJhbWUgd2l0aG91dCB0aGUgbmVlZCB0byBzdG9yZSBvciBkZWNvZGUgYW55CitwcmV2aW91cyBmcmFtZXMuIEFwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93IGlkPSJ2NGwyLW1wZWctdmlkZW8taGVhZGVyLW1vZGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19IRUFERVJfTU9ERTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfdmlkZW9faGVhZGVyX21vZGU8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgcmV0dXJuZWQgYXMgdGhlIGZpcnN0IGJ1ZmZlciBvciBpcworaXQgcmV0dXJuZWQgdG9nZXRoZXIgd2l0aCB0aGUgZmlyc3QgZnJhbWUuIEFwcGxpY2FibGUgdG8gZW5jb2RlcnMuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX1NFUEFSQVRFPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+VGhlIHN0cmVhbSBoZWFkZXIgaXMgcmV0dXJuZWQgc2VwYXJhdGVseSBpbiB0aGUgZmlyc3QgYnVmZmVyLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX0pPSU5FRF9XSVRIXzFTVF9GUkFNRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PlRoZSBzdHJlYW0gaGVhZGVyIGlzIHJldHVybmVkIHRvZ2V0aGVyIHdpdGggdGhlIGZpcnN0IGVuY29kZWQgZnJhbWUuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX01QRUc0X0RFQkxPQ0tfRklMVEVSPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGVkIHRoZSBkZWJsb2NraW5nIHBvc3QgcHJvY2Vzc2luZyBmaWx0ZXIgZm9yIE1QRUc0IGRlY29kZXIuCitBcHBsaWNhYmxlIHRvIHRoZSBNUEVHNCBkZWNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9WT1BfVElNRV9SRVM8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPnZvcF90aW1lX2luY3JlbWVudF9yZXNvbHV0aW9uIHZhbHVlIGZvciBNUEVHNC4gQXBwbGljYWJsZSB0byB0aGUgTVBFRzQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfVk9QX1RJTUVfSU5DPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj52b3BfdGltZV9pbmNyZW1lbnQgdmFsdWUgZm9yIE1QRUc0LiBBcHBsaWNhYmxlIHRvIHRoZSBNUEVHNCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisKKwkgICAgPC90Ym9keT4KKwkgIDwvdGdyb3VwPgorCTwvdGFibGU+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uPgorCTx0aXRsZT5NRkMgNS4xIE1QRUcgQ29udHJvbHM8L3RpdGxlPgorCisJPHBhcmE+VGhlIGZvbGxvd2luZyBNUEVHIGNsYXNzIGNvbnRyb2xzIGRlYWwgd2l0aCBNUEVHCitkZWNvZGluZyBhbmQgZW5jb2Rpbmcgc2V0dGluZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIE11bHRpIEZvcm1hdCBDb2RlYyA1LjEgZGV2aWNlIHByZXNlbnQKK2luIHRoZSBTNVAgZmFtaWx5IG9mIFNvQ3MgYnkgU2Ftc3VuZy4KKzwvcGFyYT4KKworCTx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0ibWZjNTEtY29udHJvbC1pZCI+CisJICA8dGl0bGU+TUZDIDUuMSBDb250cm9sIElEczwvdGl0bGU+CisJICA8dGdyb3VwIGNvbHM9IjQiPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMiIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjMyIgY29sd2lkdGg9IjIqIiAvPgorCSAgICA8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjYqIiAvPgorCSAgICA8c3BhbnNwZWMgbmFtZXN0PSJjMSIgbmFtZWVuZD0iYzIiIHNwYW5uYW1lPSJpZCIgLz4KKwkgICAgPHNwYW5zcGVjIG5hbWVzdD0iYzIiIG5hbWVlbmQ9ImM0IiBzcGFubmFtZT0iZGVzY3IiIC8+CisJICAgIDx0aGVhZD4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIiBhbGlnbj0ibGVmdCI+SUQ8L2VudHJ5PgorCQk8ZW50cnkgYWxpZ249ImxlZnQiPlR5cGU8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciIgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgPC90aGVhZD4KKwkgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZX0VOQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+SWYgdGhlIGRpc3BsYXkgZGVsYXkgaXMgZW5hYmxlZCB0aGVuIHRoZSBkZWNvZGVyIGhhcyB0byByZXR1cm4gYQorQ0FQVFVSRSBidWZmZXIgYWZ0ZXIgcHJvY2Vzc2luZyBhIGNlcnRhaW4gbnVtYmVyIG9mIE9VVFBVVCBidWZmZXJzLiBJZiB0aGlzIG51bWJlciBpcyBsb3csIHRoZW4gaXQgbWF5IHJlc3VsdCBpbgorYnVmZmVycyBub3QgYmVpbmcgZGVxdWV1ZWQgaW4gZGlzcGxheSBvcmRlci4gSW4gYWRkaXRpb24gaGFyZHdhcmUgbWF5IHN0aWxsIHVzZSB0aG9zZSBidWZmZXJzIGFzIHJlZmVyZW5jZSwgdGh1cworYXBwbGljYXRpb24gc2hvdWxkIG5vdCB3cml0ZSB0byB0aG9zZSBidWZmZXJzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgZm9yIGV4YW1wbGUgZm9yIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBvZiB2aWRlb3MuCitBcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGRlY29kZXIuCisJICAgICAgPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5EaXNwbGF5IGRlbGF5IHZhbHVlIGZvciBIMjY0IGRlY29kZXIuCitUaGUgZGVjb2RlciBpcyBmb3JjZWQgdG8gcmV0dXJuIGEgZGVjb2RlZCBmcmFtZSBhZnRlciB0aGUgc2V0ICdkaXNwbGF5IGRlbGF5JyBudW1iZXIgb2YgZnJhbWVzLiBJZiB0aGlzIG51bWJlciBpcworbG93IGl0IG1heSByZXN1bHQgaW4gZnJhbWVzIHJldHVybmVkIG91dCBvZiBkaXNwYWx5IG9yZGVyLCBpbiBhZGRpdGlvbiB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsIGJlIHVzaW5nIHRoZSByZXR1cm5lZCBidWZmZXIKK2FzIGEgcmVmZXJlbmNlIHBpY3R1cmUgZm9yIHN1YnNlcXVlbnQgZnJhbWVzLgorPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfTlVNX1JFRl9QSUNfRk9SX1A8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIHBpY3R1cmVzIHVzZWQgZm9yIGVuY29kaW5nIGEgUCBwaWN0dXJlLgorQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5QYWRkaW5nIGVuYWJsZSBpbiB0aGUgZW5jb2RlciAtIHVzZSBhIGNvbG9yIGluc3RlYWQgb2YgcmVwZWF0aW5nIGJvcmRlciBwaXhlbHMuCitBcHBsaWNhYmxlIHRvIGVuY29kZXJzLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HX1lVVjwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgorCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+UGFkZGluZyBjb2xvciBpbiB0aGUgZW5jb2Rlci4gQXBwbGljYWJsZSB0byBlbmNvZGVycy4gVGhlIHN1cHBsaWVkIDMyLWJpdCBpbnRlZ2VyIGlzIGludGVycHJldGVkIGFzIGZvbGxvd3MgKGJpdAorMCA9IGxlYXN0IHNpZ25pZmljYW50IGJpdCk6PC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkJICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAwOjc8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+ViBjaHJvbWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgODoxNTwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5VIGNocm9taW5hbmNlIGluZm9ybWF0aW9uPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgICAgPHJvdz4KKwkJICAgICAgPGVudHJ5PkJpdCAxNjoyMzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5ZIGx1bWluYW5jZSBpbmZvcm1hdGlvbjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT5CaXQgMjQ6MzE8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+TXVzdCBiZSB6ZXJvLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICA8L3Rib2R5PgorCQk8L2VudHJ5dGJsPgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUkNfUkVBQ1RJT05fQ09FRkY8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlJlYWN0aW9uIGNvZWZmaWNpZW50IGZvciBNRkMgcmF0ZSBjb250cm9sLiBBcHBsaWNhYmxlIHRvIGVuY29kZXJzLgorPHBhcmE+Tm90ZSAxOiBWYWxpZCBvbmx5IHdoZW4gdGhlIGZyYW1lIGxldmVsIFJDIGlzIGVuYWJsZWQuPC9wYXJhPgorPHBhcmE+Tm90ZSAyOiBGb3IgdGlnaHQgQ0JSLCB0aGlzIGZpZWxkIG11c3QgYmUgc21hbGwgKGV4LiAyIH4gMTApLgorRm9yIFZCUiwgdGhpcyBmaWVsZCBtdXN0IGJlIGxhcmdlIChleC4gMTAwIH4gMTAwMCkuPC9wYXJhPgorPHBhcmE+Tm90ZSAzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBncmVhdGVyIG51bWJlciB0aGFuIEZSQU1FX1JBVEUgKiAoMTBeOSAvIEJJVF9SQVRFKS48L3BhcmE+Cis8L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19EQVJLPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BZGFwdGl2ZSByYXRlIGNvbnRyb2wgZm9yIGRhcmsgcmVnaW9uLgorVmFsaWQgb25seSB3aGVuIEguMjY0IGFuZCBtYWNyb2Jsb2NrIGxldmVsIFJDIGlzIGVuYWJsZWQgKDxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1ZJREVPX01CX1JDX0VOQUJMRTwvY29uc3RhbnQ+KS4KK0FwcGxpY2FibGUgdG8gdGhlIEgyNjQgZW5jb2Rlci48L2VudHJ5PgorCSAgICAgIDwvcm93PgorCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TTU9PVEg8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkFkYXB0aXZlIHJhdGUgY29udHJvbCBmb3Igc21vb3RoIHJlZ2lvbi4KK1ZhbGlkIG9ubHkgd2hlbiBILjI2NCBhbmQgbWFjcm9ibG9jayBsZXZlbCBSQyBpcyBlbmFibGVkICg8Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEU8L2NvbnN0YW50PikuCitBcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3c+CisJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfU1RBVElDPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BZGFwdGl2ZSByYXRlIGNvbnRyb2wgZm9yIHN0YXRpYyByZWdpb24uCitWYWxpZCBvbmx5IHdoZW4gSC4yNjQgYW5kIG1hY3JvYmxvY2sgbGV2ZWwgUkMgaXMgZW5hYmxlZCAoPGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfVklERU9fTUJfUkNfRU5BQkxFPC9jb25zdGFudD4pLgorQXBwbGljYWJsZSB0byB0aGUgSDI2NCBlbmNvZGVyLjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX0FDVElWSVRZPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5BZGFwdGl2ZSByYXRlIGNvbnRyb2wgZm9yIGFjdGl2aXR5IHJlZ2lvbi4KK1ZhbGlkIG9ubHkgd2hlbiBILjI2NCBhbmQgbWFjcm9ibG9jayBsZXZlbCBSQyBpcyBlbmFibGVkICg8Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEU8L2NvbnN0YW50PikuCitBcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGVuY29kZXIuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1tZmM1MS12aWRlby1mcmFtZS1za2lwLW1vZGUiPgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCTxlbnRyeT5lbnVtJm5ic3A7djRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZyYW1lX3NraXBfbW9kZTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj4KK0luZGljYXRlcyBpbiB3aGF0IGNvbmRpdGlvbnMgdGhlIGVuY29kZXIgc2hvdWxkIHNraXAgZnJhbWVzLiBJZiBlbmNvZGluZyBhIGZyYW1lIHdvdWxkIGNhdXNlIHRoZSBlbmNvZGVkIHN0cmVhbSB0byBiZSBsYXJnZXIgdGhlbgorYSBjaG9zZW4gZGF0YSBsaW1pdCB0aGVuIHRoZSBmcmFtZSB3aWxsIGJlIHNraXBwZWQuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX01GQzUxX0ZSQU1FX1NLSVBfTU9ERV9ESVNBQkxFRDwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJICAgICAgPGVudHJ5PkZyYW1lIHNraXAgbW9kZSBpcyBkaXNhYmxlZC48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19NRkM1MV9GUkFNRV9TS0lQX01PREVfTEVWRUxfTElNSVQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5GcmFtZSBza2lwIG1vZGUgZW5hYmxlZCBhbmQgYnVmZmVyIGxpbWl0IGlzIHNldCBieSB0aGUgY2hvc2VuIGxldmVsIGFuZCBpcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZC48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19NRkM1MV9GUkFNRV9TS0lQX01PREVfQlVGX0xJTUlUPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+RnJhbWUgc2tpcCBtb2RlIGVuYWJsZWQgYW5kIGJ1ZmZlciBsaW1pdCBpcyBzZXQgYnkgdGhlIFZCViAoTVBFRzEvMi80KSBvciBDUEIgKEgyNjQpIGJ1ZmZlciBzaXplIGNvbnRyb2wuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnk+PC9lbnRyeT48L3Jvdz4KKwkgICAgICA8cm93PgorCQk8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklUPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQk8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICAgICAgPC9yb3c+PHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5FbmFibGUgcmF0ZS1jb250cm9sIHdpdGggZml4ZWQgdGFyZ2V0IGJpdC4KK0lmIHRoaXMgc2V0dGluZyBpcyBlbmFibGVkLCB0aGVuIHRoZSByYXRlIGNvbnRyb2wgbG9naWMgb2YgdGhlIGVuY29kZXIgd2lsbCBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgYml0cmF0ZQorZm9yIGEgR09QIGFuZCBrZWVwIGl0IGJlbG93IG9yIGVxdWFsIHRoZSBzZXQgYml0cmF0ZSB0YXJnZXQuIE90aGVyd2lzZSB0aGUgcmF0ZSBjb250cm9sIGxvZ2ljIGNhbGN1bGF0ZXMgdGhlCitvdmVyYWxsIGF2ZXJhZ2UgYml0cmF0ZSBmb3IgdGhlIHN0cmVhbSBhbmQga2VlcHMgaXQgYmVsb3cgb3IgZXF1YWwgdG8gdGhlIHNldCBiaXRyYXRlLiBJbiB0aGUgZmlyc3QgY2FzZQordGhlIGF2ZXJhZ2UgYml0cmF0ZSBmb3IgdGhlIHdob2xlIHN0cmVhbSB3aWxsIGJlIHNtYWxsZXIgdGhlbiB0aGUgc2V0IGJpdHJhdGUuIFRoaXMgaXMgY2F1c2VkIGJlY2F1c2UgdGhlCithdmVyYWdlIGlzIGNhbGN1bGF0ZWQgZm9yIHNtYWxsZXIgbnVtYmVyIG9mIGZyYW1lcywgb24gdGhlIG90aGVyIGhhbmQgZW5hYmxpbmcgdGhpcyBzZXR0aW5nIHdpbGwgZW5zdXJlIHRoYXQKK3RoZSBzdHJlYW0gd2lsbCBtZWV0IHRpZ2h0IGJhbmR3aWR0aCBjb250cmFpbnRzLiBBcHBsaWNhYmxlIHRvIGVuY29kZXJzLgorPC9lbnRyeT4KKwkgICAgICA8L3Jvdz4KKwkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCSAgICAgIDxyb3cgaWQ9InY0bDItbXBlZy1tZmM1MS12aWRlby1mb3JjZS1mcmFtZS10eXBlIj4KKwkJPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KKwkJPGVudHJ5PmVudW0mbmJzcDt2NGwyX21wZWdfbWZjNTFfdmlkZW9fZm9yY2VfZnJhbWVfdHlwZTwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz48ZW50cnkgc3Bhbm5hbWU9ImRlc2NyIj5Gb3JjZSBhIGZyYW1lIHR5cGUgZm9yIHRoZSBuZXh0IHF1ZXVlZCBidWZmZXIuIEFwcGxpY2FibGUgdG8gZW5jb2RlcnMuCitQb3NzaWJsZSB2YWx1ZXMgYXJlOjwvZW50cnk+CisJICAgICAgPC9yb3c+CisJICAgICAgPHJvdz4KKwkJPGVudHJ5dGJsIHNwYW5uYW1lPSJkZXNjciIgY29scz0iMiI+CisJCSAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX01GQzUxX0ZPUkNFX0ZSQU1FX1RZUEVfRElTQUJMRUQ8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Gb3JjaW5nIGEgc3BlY2lmaWMgZnJhbWUgdHlwZSBkaXNhYmxlZC48L2VudHJ5PgorCQkgICAgPC9yb3c+CisJCSAgICA8cm93PgorCQkgICAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfTVBFR19NRkM1MV9GT1JDRV9GUkFNRV9UWVBFX0lfRlJBTUU8L2NvbnN0YW50PiZuYnNwOzwvZW50cnk+CisJCSAgICAgIDxlbnRyeT5Gb3JjZSBhbiBJLWZyYW1lLjwvZW50cnk+CisJCSAgICA8L3Jvdz4KKwkJICAgIDxyb3c+CisJCSAgICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9NUEVHX01GQzUxX0ZPUkNFX0ZSQU1FX1RZUEVfTk9UX0NPREVEPC9jb25zdGFudD4mbmJzcDs8L2VudHJ5PgorCQkgICAgICA8ZW50cnk+Rm9yY2UgYSBub24tY29kZWQgZnJhbWUuPC9lbnRyeT4KKwkJICAgIDwvcm93PgorCQkgIDwvdGJvZHk+CisJCTwvZW50cnl0Ymw+CisJICAgICAgPC9yb3c+CiAJICAgIDwvdGJvZHk+CiAJICA8L3Rncm91cD4KIAk8L3RhYmxlPgpAQCAtMjA5Miw2ICszMDcyLDI4OSBAQAogPHBhcmE+Rm9yIG1vcmUgZGV0YWlscyBhYm91dCBSRFMgc3BlY2lmaWNhdGlvbiwgcmVmZXIgdG8KIDx4cmVmIGxpbmtlbmQ9ImVuNTAwNjciIC8+IGRvY3VtZW50LCBmcm9tIENFTkVMRUMuPC9wYXJhPgogICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmbGFzaC1jb250cm9scyI+CisgICAgICA8dGl0bGU+Rmxhc2ggQ29udHJvbCBSZWZlcmVuY2U8L3RpdGxlPgorCisgICAgICA8bm90ZT4KKwk8dGl0bGU+RXhwZXJpbWVudGFsPC90aXRsZT4KKworCTxwYXJhPlRoaXMgaXMgYW4gPGxpbmsgbGlua2VuZD0iZXhwZXJpbWVudGFsIj5leHBlcmltZW50YWw8L2xpbms+CitpbnRlcmZhY2UgYW5kIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS48L3BhcmE+CisgICAgICA8L25vdGU+CisKKyAgICAgIDxwYXJhPgorCVRoZSBWNEwyIGZsYXNoIGNvbnRyb2xzIGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGdlbmVyaWMgYWNjZXNzCisJdG8gZmxhc2ggY29udHJvbGxlciBkZXZpY2VzLiBGbGFzaCBjb250cm9sbGVyIGRldmljZXMgYXJlCisJdHlwaWNhbGx5IHVzZWQgaW4gZGlnaXRhbCBjYW1lcmFzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgaW50ZXJmYWNlIGNhbiBzdXBwb3J0IGJvdGggTEVEIGFuZCB4ZW5vbiBmbGFzaCBkZXZpY2VzLiBBcworCW9mIHdyaXRpbmcgdGhpcywgdGhlcmUgaXMgbm8geGVub24gZmxhc2ggZHJpdmVyIHVzaW5nIHRoaXMKKwlpbnRlcmZhY2UuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmbGFzaC1jb250cm9scy11c2UtY2FzZXMiPgorCTx0aXRsZT5TdXBwb3J0ZWQgdXNlIGNhc2VzPC90aXRsZT4KKworCTxzZWN0aW9uPgorCSAgPHRpdGxlPlVuc3luY2hyb25pc2VkIExFRCBmbGFzaCAoc29mdHdhcmUgc3Ryb2JlKTwvdGl0bGU+CisKKwkgIDxwYXJhPgorCSAgICBVbnN5bmNocm9uaXNlZCBMRUQgZmxhc2ggaXMgY29udHJvbGxlZCBkaXJlY3RseSBieSB0aGUKKwkgICAgaG9zdCBhcyB0aGUgc2Vuc29yLiBUaGUgZmxhc2ggbXVzdCBiZSBlbmFibGVkIGJ5IHRoZSBob3N0CisJICAgIGJlZm9yZSB0aGUgZXhwb3N1cmUgb2YgdGhlIGltYWdlIHN0YXJ0cyBhbmQgZGlzYWJsZWQgb25jZQorCSAgICBpdCBlbmRzLiBUaGUgaG9zdCBpcyBmdWxseSByZXNwb25zaWJsZSBmb3IgdGhlIHRpbWluZyBvZgorCSAgICB0aGUgZmxhc2guCisJICA8L3BhcmE+CisKKwkgIDxwYXJhPkV4YW1wbGUgb2Ygc3VjaCBkZXZpY2U6IE5va2lhIE45MDAuPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uPgorCSAgPHRpdGxlPlN5bmNocm9uaXNlZCBMRUQgZmxhc2ggKGhhcmR3YXJlIHN0cm9iZSk8L3RpdGxlPgorCisJICA8cGFyYT4KKwkgICAgVGhlIHN5bmNocm9uaXNlZCBMRUQgZmxhc2ggaXMgcHJlLXByb2dyYW1tZWQgYnkgdGhlIGhvc3QKKwkgICAgKHBvd2VyIGFuZCB0aW1lb3V0KSBidXQgY29udHJvbGxlZCBieSB0aGUgc2Vuc29yIHRocm91Z2ggYQorCSAgICBzdHJvYmUgc2lnbmFsIGZyb20gdGhlIHNlbnNvciB0byB0aGUgZmxhc2guCisJICA8L3BhcmE+CisKKwkgIDxwYXJhPgorCSAgICBUaGUgc2Vuc29yIGNvbnRyb2xzIHRoZSBmbGFzaCBkdXJhdGlvbiBhbmQgdGltaW5nLiBUaGlzCisJICAgIGluZm9ybWF0aW9uIHR5cGljYWxseSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZQorCSAgICBzZW5zb3IuCisJICA8L3BhcmE+CisKKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwkgIDx0aXRsZT5MRUQgZmxhc2ggYXMgdG9yY2g8L3RpdGxlPgorCisJICA8cGFyYT4KKwkgICAgTEVEIGZsYXNoIG1heSBiZSB1c2VkIGFzIHRvcmNoIGluIGNvbmp1bmN0aW9uIHdpdGggYW5vdGhlcgorCSAgICB1c2UgY2FzZSBpbnZvbHZpbmcgY2FtZXJhIG9yIGluZGl2aWR1YWxseS4KKwkgIDwvcGFyYT4KKworCTwvc2VjdGlvbj4KKworICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9ImZsYXNoLWNvbnRyb2wtaWQiPgorICAgICAgPHRpdGxlPkZsYXNoIENvbnRyb2wgSURzPC90aXRsZT4KKworICAgICAgPHRncm91cCBjb2xzPSI0Ij4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjMSIgY29sd2lkdGg9IjEqIiAvPgorCTxjb2xzcGVjIGNvbG5hbWU9ImMyIiBjb2x3aWR0aD0iNioiIC8+CisJPGNvbHNwZWMgY29sbmFtZT0iYzMiIGNvbHdpZHRoPSIyKiIgLz4KKwk8Y29sc3BlYyBjb2xuYW1lPSJjNCIgY29sd2lkdGg9IjYqIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMxIiBuYW1lZW5kPSJjMiIgc3Bhbm5hbWU9ImlkIiAvPgorCTxzcGFuc3BlYyBuYW1lc3Q9ImMyIiBuYW1lZW5kPSJjNCIgc3Bhbm5hbWU9ImRlc2NyIiAvPgorCTx0aGVhZD4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiIGFsaWduPSJsZWZ0Ij5JRDwvZW50cnk+CisJICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+VHlwZTwvZW50cnk+CisJICA8L3Jvdz48cm93IHJvd3NlcD0iMSI+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciIgYWxpZ249ImxlZnQiPkRlc2NyaXB0aW9uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGhlYWQ+CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfQ0xBU1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5jbGFzczwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlRoZSBGTEFTSCBjbGFzcyBkZXNjcmlwdG9yLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GTEFTSF9MRURfTU9ERTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pm1lbnU8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJ2NGwyLWZsYXNoLWxlZC1tb2RlIj4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RGVmaW5lcyB0aGUgbW9kZSBvZiB0aGUgZmxhc2ggTEVELAorCSAgICB0aGUgaGlnaC1wb3dlciB3aGl0ZSBMRUQgYXR0YWNoZWQgdG8gdGhlIGZsYXNoIGNvbnRyb2xsZXIuCisJICAgIFNldHRpbmcgdGhpcyBjb250cm9sIG1heSBub3QgYmUgcG9zc2libGUgaW4gcHJlc2VuY2Ugb2YKKwkgICAgc29tZSBmYXVsdHMuIFNlZSBWNEwyX0NJRF9GTEFTSF9GQVVMVC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9MRURfTU9ERV9OT05FPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDxlbnRyeT5PZmYuPC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNIPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDxlbnRyeT5GbGFzaCBtb2RlLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9MRURfTU9ERV9UT1JDSDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+VG9yY2ggbW9kZS4gU2VlIFY0TDJfQ0lEX0ZMQVNIX1RPUkNIX0lOVEVOU0lUWS48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L2VudHJ5dGJsPgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfU1RST0JFX1NPVVJDRTwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pm1lbnU8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJ2NGwyLWZsYXNoLXN0cm9iZS1zb3VyY2UiPjxlbnRyeQorCSAgc3Bhbm5hbWU9ImRlc2NyIj5EZWZpbmVzIHRoZSBzb3VyY2Ugb2YgdGhlIGZsYXNoIExFRAorCSAgc3Ryb2JlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeXRibCBzcGFubmFtZT0iZGVzY3IiIGNvbHM9IjIiPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfU09GVFdBUkU8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPGVudHJ5PlRoZSBmbGFzaCBzdHJvYmUgaXMgdHJpZ2dlcmVkIGJ5IHVzaW5nCisJCSAgdGhlIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRSBjb250cm9sLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX0VYVEVSTkFMPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDxlbnRyeT5UaGUgZmxhc2ggc3Ryb2JlIGlzIHRyaWdnZXJlZCBieSBhbgorCQkgIGV4dGVybmFsIHNvdXJjZS4gVHlwaWNhbGx5IHRoaXMgaXMgYSBzZW5zb3IsCisJCSAgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gc3luY2hyb25pc2VzIHRoZQorCQkgIGZsYXNoIHN0cm9iZSBzdGFydCB0byBleHBvc3VyZSBzdGFydC48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L2VudHJ5dGJsPgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfU1RST0JFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+YnV0dG9uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+U3Ryb2JlIGZsYXNoLiBWYWxpZCB3aGVuCisJICAgIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFIGlzIHNldCB0bworCSAgICBWNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNIIGFuZCBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFCisJICAgIGlzIHNldCB0byBWNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfU09GVFdBUkUuIFNldHRpbmcgdGhpcworCSAgICBjb250cm9sIG1heSBub3QgYmUgcG9zc2libGUgaW4gcHJlc2VuY2Ugb2Ygc29tZSBmYXVsdHMuCisJICAgIFNlZSBWNEwyX0NJRF9GTEFTSF9GQVVMVC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfU1RST0JFX1NUT1A8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5idXR0b248L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlN0b3AgZmxhc2ggc3Ryb2JlIGltbWVkaWF0ZWx5LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RBVFVTPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPlN0cm9iZSBzdGF0dXM6IHdoZXRoZXIgdGhlIGZsYXNoCisJICAgIGlzIHN0cm9iaW5nIGF0IHRoZSBtb21lbnQgb3Igbm90LiBUaGlzIGlzIGEgcmVhZC1vbmx5CisJICAgIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+SGFyZHdhcmUgdGltZW91dCBmb3IgZmxhc2guIFRoZQorCSAgICBmbGFzaCBzdHJvYmUgaXMgc3RvcHBlZCBhZnRlciB0aGlzIHBlcmlvZCBvZiB0aW1lIGhhcworCSAgICBwYXNzZWQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cm9iZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfSU5URU5TSVRZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkludGVuc2l0eSBvZiB0aGUgZmxhc2ggc3Ryb2JlIHdoZW4KKwkgICAgdGhlIGZsYXNoIExFRCBpcyBpbiBmbGFzaCBtb2RlCisJICAgIChWNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNIKS4gVGhlIHVuaXQgc2hvdWxkIGJlIG1pbGxpYW1wcworCSAgICAobUEpIGlmIHBvc3NpYmxlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GTEFTSF9UT1JDSF9JTlRFTlNJVFk8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+SW50ZW5zaXR5IG9mIHRoZSBmbGFzaCBMRUQgaW4KKwkgICAgdG9yY2ggbW9kZSAoVjRMMl9GTEFTSF9MRURfTU9ERV9UT1JDSCkuIFRoZSB1bml0IHNob3VsZCBiZQorCSAgICBtaWxsaWFtcHMgKG1BKSBpZiBwb3NzaWJsZS4gU2V0dGluZyB0aGlzIGNvbnRyb2wgbWF5IG5vdAorCSAgICBiZSBwb3NzaWJsZSBpbiBwcmVzZW5jZSBvZiBzb21lIGZhdWx0cy4gU2VlCisJICAgIFY0TDJfQ0lEX0ZMQVNIX0ZBVUxULjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9GTEFTSF9JTkRJQ0FUT1JfSU5URU5TSVRZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPkludGVuc2l0eSBvZiB0aGUgaW5kaWNhdG9yIExFRC4KKwkgICAgVGhlIGluZGljYXRvciBMRUQgbWF5IGJlIGZ1bGx5IGluZGVwZW5kZW50IG9mIHRoZSBmbGFzaAorCSAgICBMRUQuIFRoZSB1bml0IHNob3VsZCBiZSBtaWNyb2FtcHMgKHVBKSBpZiBwb3NzaWJsZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfRkFVTFQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT5iaXRtYXNrPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RmF1bHRzIHJlbGF0ZWQgdG8gdGhlIGZsYXNoLiBUaGUKKwkgICAgZmF1bHRzIHRlbGwgYWJvdXQgc3BlY2lmaWMgcHJvYmxlbXMgaW4gdGhlIGZsYXNoIGNoaXAKKwkgICAgaXRzZWxmIG9yIHRoZSBMRURzIGF0dGFjaGVkIHRvIGl0LiBGYXVsdHMgbWF5IHByZXZlbnQKKwkgICAgZnVydGhlciB1c2Ugb2Ygc29tZSBvZiB0aGUgZmxhc2ggY29udHJvbHMuIEluIHBhcnRpY3VsYXIsCisJICAgIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFIGlzIHNldCB0byBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUKKwkgICAgaWYgdGhlIGZhdWx0IGFmZmVjdHMgdGhlIGZsYXNoIExFRC4gRXhhY3RseSB3aGljaCBmYXVsdHMKKwkgICAgaGF2ZSBzdWNoIGFuIGVmZmVjdCBpcyBjaGlwIGRlcGVuZGVudC4gUmVhZGluZyB0aGUgZmF1bHRzCisJICAgIHJlc2V0cyB0aGUgY29udHJvbCBhbmQgcmV0dXJucyB0aGUgY2hpcCB0byBhIHVzYWJsZSBzdGF0ZQorCSAgICBpZiBwb3NzaWJsZS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnl0Ymwgc3Bhbm5hbWU9ImRlc2NyIiBjb2xzPSIyIj4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0U8L2NvbnN0YW50PjwvZW50cnk+CisJCSAgPGVudHJ5PkZsYXNoIGNvbnRyb2xsZXIgdm9sdGFnZSB0byB0aGUgZmxhc2ggTEVECisJCSAgaGFzIGV4Y2VlZGVkIHRoZSBsaW1pdCBzcGVjaWZpYyB0byB0aGUgZmxhc2gKKwkJICBjb250cm9sbGVyLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9GQVVMVF9USU1FT1VUPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDxlbnRyeT5UaGUgZmxhc2ggc3Ryb2JlIHdhcyBzdGlsbCBvbiB3aGVuCisJCSAgdGhlIHRpbWVvdXQgc2V0IGJ5IHRoZSB1c2VyIC0tLQorCQkgIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQgY29udHJvbCAtLS0gaGFzIGV4cGlyZWQuCisJCSAgTm90IGFsbCBmbGFzaCBjb250cm9sbGVycyBtYXkgc2V0IHRoaXMgaW4gYWxsCisJCSAgc3VjaCBjb25kaXRpb25zLjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9GTEFTSF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFPC9jb25zdGFudD48L2VudHJ5PgorCQkgIDxlbnRyeT5UaGUgZmxhc2ggY29udHJvbGxlciBoYXMgb3ZlcmhlYXRlZC48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRkxBU0hfRkFVTFRfU0hPUlRfQ0lSQ1VJVDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+VGhlIHNob3J0IGNpcmN1aXQgcHJvdGVjdGlvbiBvZiB0aGUgZmxhc2gKKwkJICBjb250cm9sbGVyIGhhcyBiZWVuIHRyaWdnZXJlZC48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L2VudHJ5dGJsPgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnkgc3Bhbm5hbWU9ImlkIj48Y29uc3RhbnQ+VjRMMl9DSURfRkxBU0hfQ0hBUkdFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+RW5hYmxlIG9yIGRpc2FibGUgY2hhcmdpbmcgb2YgdGhlIHhlbm9uCisJICBmbGFzaCBjYXBhY2l0b3IuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5IHNwYW5uYW1lPSJpZCI+PGNvbnN0YW50PlY0TDJfQ0lEX0ZMQVNIX1JFQURZPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+Ym9vbGVhbjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPklzIHRoZSBmbGFzaCByZWFkeSB0byBzdHJvYmU/CisJICAgIFhlbm9uIGZsYXNoZXMgcmVxdWlyZSB0aGVpciBjYXBhY2l0b3JzIGNoYXJnZWQgYmVmb3JlCisJICAgIHN0cm9iaW5nLiBMRUQgZmxhc2hlcyBvZnRlbiByZXF1aXJlIGEgY29vbGRvd24gcGVyaW9kCisJICAgIGFmdGVyIHN0cm9iZSBkdXJpbmcgd2hpY2ggYW5vdGhlciBzdHJvYmUgd2lsbCBub3QgYmUKKwkgICAgcG9zc2libGUuIFRoaXMgaXMgYSByZWFkLW9ubHkgY29udHJvbC48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICAgIDwvdGFibGU+CisKKyAgICA8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CiAKICAgPCEtLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jcm9wLnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY3JvcC5wZGYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5wZGYKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY3JvcC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtY2FwdHVyZS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1jYXB0dXJlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtY2FwdHVyZS54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZGV2LWNhcHR1cmUueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1jb2RlYy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1jb2RlYy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LWNvZGVjLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtY29kZWMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1lZmZlY3QueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtZWZmZWN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtZWZmZWN0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtZWZmZWN0LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtZXZlbnQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtZXZlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNGFlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1ldmVudC54bWwKQEAgLTAsMCArMSw1MSBAQAorICA8dGl0bGU+RXZlbnQgSW50ZXJmYWNlPC90aXRsZT4KKworICA8cGFyYT5UaGUgVjRMMiBldmVudCBpbnRlcmZhY2UgcHJvdmlkZXMgYSBtZWFucyBmb3IgYSB1c2VyIHRvIGdldAorICBpbW1lZGlhdGVseSBub3RpZmllZCBvbiBjZXJ0YWluIGNvbmRpdGlvbnMgdGFraW5nIHBsYWNlIG9uIGEgZGV2aWNlLgorICBUaGlzIG1pZ2h0IGluY2x1ZGUgc3RhcnQgb2YgZnJhbWUgb3IgbG9zcyBvZiBzaWduYWwgZXZlbnRzLCBmb3IKKyAgZXhhbXBsZS4gQ2hhbmdlcyBpbiB0aGUgdmFsdWUgb3Igc3RhdGUgb2YgYSBWNEwyIGNvbnRyb2wgY2FuIGFsc28gYmUKKyAgcmVwb3J0ZWQgdGhyb3VnaCBldmVudHMuCisgIDwvcGFyYT4KKworICA8cGFyYT5UbyByZWNlaXZlIGV2ZW50cywgdGhlIGV2ZW50cyB0aGUgdXNlciBpcyBpbnRlcmVzdGVkIGluIGZpcnN0IG11c3QKKyAgYmUgc3Vic2NyaWJlZCB1c2luZyB0aGUgJlZJRElPQy1TVUJTQ1JJQkUtRVZFTlQ7IGlvY3RsLiBPbmNlIGFuIGV2ZW50IGlzCisgIHN1YnNjcmliZWQsIHRoZSBldmVudHMgb2Ygc3Vic2NyaWJlZCB0eXBlcyBhcmUgZGVxdWV1ZWFibGUgdXNpbmcgdGhlCisgICZWSURJT0MtRFFFVkVOVDsgaW9jdGwuIEV2ZW50cyBtYXkgYmUgdW5zdWJzY3JpYmVkIHVzaW5nCisgIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVCBpb2N0bC4gVGhlIHNwZWNpYWwgZXZlbnQgdHlwZSBWNEwyX0VWRU5UX0FMTCBtYXkKKyAgYmUgdXNlZCB0byB1bnN1YnNjcmliZSBhbGwgdGhlIGV2ZW50cyB0aGUgZHJpdmVyIHN1cHBvcnRzLjwvcGFyYT4KKworICA8cGFyYT5UaGUgZXZlbnQgc3Vic2NyaXB0aW9ucyBhbmQgZXZlbnQgcXVldWVzIGFyZSBzcGVjaWZpYyB0byBmaWxlCisgIGhhbmRsZXMuIFN1YnNjcmliaW5nIGFuIGV2ZW50IG9uIG9uZSBmaWxlIGhhbmRsZSBkb2VzIG5vdCBhZmZlY3QKKyAgb3RoZXIgZmlsZSBoYW5kbGVzLjwvcGFyYT4KKworICA8cGFyYT5UaGUgaW5mb3JtYXRpb24gb24gZGVxdWV1ZWFibGUgZXZlbnRzIGlzIG9idGFpbmVkIGJ5IHVzaW5nIHNlbGVjdCBvcgorICBwb2xsIHN5c3RlbSBjYWxscyBvbiB2aWRlbyBkZXZpY2VzLiBUaGUgVjRMMiBldmVudHMgdXNlIFBPTExQUkkgZXZlbnRzIG9uCisgIHBvbGwgc3lzdGVtIGNhbGwgYW5kIGV4Y2VwdGlvbnMgb24gc2VsZWN0IHN5c3RlbSBjYWxsLjwvcGFyYT4KKworICA8cGFyYT5TdGFydGluZyB3aXRoIGtlcm5lbCAzLjEgY2VydGFpbiBndWFyYW50ZWVzIGNhbiBiZSBnaXZlbiB3aXRoCisgIHJlZ2FyZHMgdG8gZXZlbnRzOjxvcmRlcmVkbGlzdD4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5FYWNoIHN1YnNjcmliZWQgZXZlbnQgaGFzIGl0cyBvd24gaW50ZXJuYWwgZGVkaWNhdGVkIGV2ZW50IHF1ZXVlLgorVGhpcyBtZWFucyB0aGF0IGZsb29kaW5nIG9mIG9uZSBldmVudCB0eXBlIHdpbGwgbm90IGludGVyZmVyZSB3aXRoIG90aGVyCitldmVudCB0eXBlcy48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5JZiB0aGUgaW50ZXJuYWwgZXZlbnQgcXVldWUgZm9yIGEgcGFydGljdWxhciBzdWJzY3JpYmVkIGV2ZW50CitiZWNvbWVzIGZ1bGwsIHRoZW4gdGhlIG9sZGVzdCBldmVudCBpbiB0aGF0IHF1ZXVlIHdpbGwgYmUgZHJvcHBlZC48L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5XaGVyZSBhcHBsaWNhYmxlLCBjZXJ0YWluIGV2ZW50IHR5cGVzIGNhbiBlbnN1cmUgdGhhdCB0aGUgcGF5bG9hZAorb2YgdGhlIG9sZGVzdCBldmVudCB0aGF0IGlzIGFib3V0IHRvIGJlIGRyb3BwZWQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgcGF5bG9hZAorb2YgdGhlIG5leHQgb2xkZXN0IGV2ZW50LiBUaHVzIGVuc3VyaW5nIHRoYXQgbm8gaW5mb3JtYXRpb24gaXMgbG9zdCwgYnV0IG9ubHkgYW4KK2ludGVybWVkaWF0ZSBzdGVwIGxlYWRpbmcgdXAgdG8gdGhhdCBpbmZvcm1hdGlvbi4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKK2V2ZW50IHlvdSB3YW50IHRvIHN1YnNjcmliZSB0byB3aGV0aGVyIHRoaXMgaXMgYXBwbGljYWJsZSBmb3IgdGhhdCBldmVudCBvciBub3QuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT4KKworICA8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cittb2RlOiBzZ21sCitzZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKK2luZGVudC10YWJzLW1vZGU6IG5pbAorRW5kOgorICAtLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LW9zZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1vc2QueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vc2QueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1vc2QueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1vdXRwdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtb3V0cHV0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3V0cHV0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtb3V0cHV0LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3ZlcmxheS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1vdmVybGF5LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtb3ZlcmxheS54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZGV2LW92ZXJsYXkueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1yYWRpby54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJhZGlvLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtcmFkaW8ueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYXctdmJpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZGV2LXJhdy12YmkueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yYXctdmJpLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtcmF3LXZiaS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXJkcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1yZHMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1yZHMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1yZHMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zbGljZWQtdmJpLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZGV2LXNsaWNlZC12YmkueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zbGljZWQtdmJpLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtc2xpY2VkLXZiaS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXN1YmRldi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1zdWJkZXYueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1zdWJkZXYueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi1zdWJkZXYueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi10ZWxldGV4dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Rldi10ZWxldGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZGV2LXRlbGV0ZXh0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kZXYtdGVsZXRleHQueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2RyaXZlci54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2RyaXZlci54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZHJpdmVyLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9kcml2ZXIueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZkbC1hcHBlbmRpeC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2ZkbC1hcHBlbmRpeC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmRsLWFwcGVuZGl4LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mZGwtYXBwZW5kaXgueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZmllbGRzZXFfYnQucGRmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LnBkZgpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9maWVsZHNlcV9idC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2ZpZWxkc2VxX3RiLnBkZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5wZGYKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZmllbGRzZXFfdGIucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1jbG9zZS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtY2xvc2UueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtY2xvc2UueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtY2xvc2UueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtaW9jdGwueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLWlvY3RsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU2NGJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLWlvY3RsLnhtbApAQCAtMCwwICsxLDc5IEBACis8cmVmZW50cnkgaWQ9ImZ1bmMtaW9jdGwiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5WNEwyIGlvY3RsKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPnY0bDItaW9jdGw8L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+UHJvZ3JhbSBhIFY0TDIgZGV2aWNlPC9yZWZwdXJwb3NlPgorICA8L3JlZm5hbWVkaXY+CisKKyAgPHJlZnN5bm9wc2lzZGl2PgorICAgIDxmdW5jc3lub3BzaXM+CisgICAgICA8ZnVuY3N5bm9wc2lzaW5mbz4jaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgorICAgICAgPGZ1bmNwcm90b3R5cGU+CisJPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5pb2N0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorICAgICAgPC9mdW5jcHJvdG90eXBlPgorICAgIDwvZnVuY3N5bm9wc2lzPgorICA8L3JlZnN5bm9wc2lzZGl2PgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+QXJndW1lbnRzPC90aXRsZT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+JmZkOzwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT5WNEwyIGlvY3RsIHJlcXVlc3QgY29kZSBhcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+dmlkZW9kZXYyLmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZSwgZm9yIGV4YW1wbGUKK1ZJRElPQ19RVUVSWUNBUC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+UG9pbnRlciB0byBhIGZ1bmN0aW9uIHBhcmFtZXRlciwgdXN1YWxseSBhIHN0cnVjdHVyZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgdXNlZCB0byBwcm9ncmFtCitWNEwyIGRldmljZXMuIFRoZSBhcmd1bWVudCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IG11c3QgYmUgYW4gb3BlbgorZmlsZSBkZXNjcmlwdG9yLiBBbiBpb2N0bCA8cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj4gaGFzIGVuY29kZWQKK2luIGl0IHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuIGlucHV0LCBvdXRwdXQgb3IgcmVhZC93cml0ZQorcGFyYW1ldGVyLCBhbmQgdGhlIHNpemUgb2YgdGhlIGFyZ3VtZW50IDxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPiBpbgorYnl0ZXMuIE1hY3JvcyBhbmQgZGVmaW5lcyBzcGVjaWZ5aW5nIFY0TDIgaW9jdGwgcmVxdWVzdHMgYXJlIGxvY2F0ZWQKK2luIHRoZSA8ZmlsZW5hbWU+dmlkZW9kZXYyLmg8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZS4KK0FwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZWlyIG93biBjb3B5LCBub3QgaW5jbHVkZSB0aGUgdmVyc2lvbiBpbiB0aGUKK2tlcm5lbCBzb3VyY2VzIG9uIHRoZSBzeXN0ZW0gdGhleSBjb21waWxlIG9uLiBBbGwgVjRMMiBpb2N0bCByZXF1ZXN0cywKK3RoZWlyIHJlc3BlY3RpdmUgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiA8eHJlZgorCWxpbmtlbmQ9InVzZXItZnVuYyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworICAgIDxwYXJhPldoZW4gYW4gaW9jdGwgdGhhdCB0YWtlcyBhbiBvdXRwdXQgb3IgcmVhZC93cml0ZSBwYXJhbWV0ZXIgZmFpbHMsCisgICAgdGhlIHBhcmFtZXRlciByZW1haW5zIHVubW9kaWZpZWQuPC9wYXJhPgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KKworPCEtLQorTG9jYWwgVmFyaWFibGVzOgorbW9kZTogc2dtbAorc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCitpbmRlbnQtdGFicy1tb2RlOiBuaWwKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW1tYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLW1tYXAueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtbW1hcC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZnVuYy1tbWFwLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtbXVubWFwLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9mdW5jLW11bm1hcC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZnVuYy1tdW5tYXAueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtb3Blbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtb3Blbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1vcGVuLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLW9wZW4ueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcG9sbC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtcG9sbC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1wb2xsLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLXBvbGwueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtcmVhZC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtcmVhZC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1yZWFkLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLXJlYWQueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtc2VsZWN0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvZnVuYy1zZWxlY3QueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtc2VsZWN0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9mdW5jLXNlbGVjdC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy13cml0ZS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtd3JpdGUueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtd3JpdGUueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2Z1bmMtd3JpdGUueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2dlbi1lcnJvcnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9nZW4tZXJyb3JzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmJmM2NlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9nZW4tZXJyb3JzLnhtbApAQCAtMCwwICsxLDc4IEBACis8dGl0bGU+R2VuZXJpYyBFcnJvciBDb2RlczwvdGl0bGU+CisKKzx0YWJsZSBmcmFtZT0ibm9uZSIgcGd3aWRlPSIxIiBpZD0iZ2VuLWVycm9ycyI+CisgIDx0aXRsZT5HZW5lcmljIGVycm9yIGNvZGVzPC90aXRsZT4KKyAgPHRncm91cCBjb2xzPSIyIj4KKyAgICAmY3Mtc3RyOworICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJPCEtLSBLZWVwIGl0IG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkgLS0+CisgICAgICA8cm93PgorCTxlbnRyeT5FQkFERjwvZW50cnk+CisJPGVudHJ5PlRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgbm90IGEgdmFsaWQuPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKwk8ZW50cnk+RUJVU1k8L2VudHJ5PgorCTxlbnRyeT5UaGUgaW9jdGwgY2FuJ3QgYmUgaGFuZGxlZCBiZWNhdXNlIHRoZSBkZXZpY2UgaXMgYnVzeS4gVGhpcyBpcworCSAgICAgICB0eXBpY2FsbHkgcmV0dXJuIHdoaWxlIGRldmljZSBpcyBzdHJlYW1pbmcsIGFuZCBhbiBpb2N0bCB0cmllZCB0bworCSAgICAgICBjaGFuZ2Ugc29tZXRoaW5nIHRoYXQgd291bGQgYWZmZWN0IHRoZSBzdHJlYW0sIG9yIHdvdWxkIHJlcXVpcmUgdGhlCisJICAgICAgIHVzYWdlIG9mIGEgaGFyZHdhcmUgcmVzb3VyY2UgdGhhdCB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQuIFRoZSBpb2N0bAorCSAgICAgICBtdXN0IG5vdCBiZSByZXRyaWVkIHdpdGhvdXQgcGVyZm9ybWluZyBhbm90aGVyIGFjdGlvbiB0byBmaXggdGhlCisJICAgICAgIHByb2JsZW0gZmlyc3QgKHR5cGljYWxseTogc3RvcCB0aGUgc3RyZWFtIGJlZm9yZSByZXRyeWluZykuPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKwk8ZW50cnk+RUZBVUxUPC9lbnRyeT4KKwk8ZW50cnk+VGhlcmUgd2FzIGEgZmFpbHVyZSB3aGlsZSBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UsCisJICAgICAgIHByb2JhYmx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBvaW50ZXIgcmVmZXJlbmNlLjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisJPGVudHJ5PkVJTlZBTDwvZW50cnk+CisJPGVudHJ5Pk9uZSBvciBtb3JlIG9mIHRoZSBpb2N0bCBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkIG9yIG91dCBvZiB0aGUKKwkgICAgICAgYWxsb3dlZCByYW5nZS4gVGhpcyBpcyBhIHdpZGVseSB1c2VkIGVycm9yIGNvZGUuIFNlZSB0aGUgaW5kaXZpZHVhbAorCSAgICAgICBpb2N0bCByZXF1ZXN0cyBmb3Igc3BlY2lmaWMgY2F1c2VzLjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeT5FTk9ERVY8L2VudHJ5PgorCTxlbnRyeT5EZXZpY2Ugbm90IGZvdW5kIG9yIHdhcyByZW1vdmVkLjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisJPGVudHJ5PkVOT01FTTwvZW50cnk+CisJPGVudHJ5PlRoZXJlJ3Mgbm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIHRoZSBkZXNpcmVkIG9wZXJhdGlvbi48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93PgorCTxlbnRyeT5FTk9UVFk8L2VudHJ5PgorCTxlbnRyeT5UaGUgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLCBhY3R1YWxseSBtZWFuaW5nIHRoYXQKKwkgICAgICAgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGF2YWlsYWJsZSwgb3IgdGhlIGZpbGUKKwkgICAgICAgZGVzY3JpcHRvciBpcyBub3QgZm9yIGEgbWVkaWEgZGV2aWNlLjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisJPGVudHJ5PkVOT1NQQzwvZW50cnk+CisJPGVudHJ5Pk9uIFVTQiBkZXZpY2VzLCB0aGUgc3RyZWFtIGlvY3RsJ3MgY2FuIHJldHVybiB0aGlzIGVycm9yLCBtZWFuaW5nCisJICAgICAgIHRoYXQgdGhpcyByZXF1ZXN0IHdvdWxkIG92ZXJjb21taXQgdGhlIHVzYiBiYW5kd2lkdGggcmVzZXJ2ZWQKKwkgICAgICAgZm9yIHBlcmlvZGljIHRyYW5zZmVycyAodXAgdG8gODAlIG9mIHRoZSBVU0IgYmFuZHdpZHRoKS48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93PgorCTxlbnRyeT5FTk9TWVMgb3IgRU9QTk9UU1VQUDwvZW50cnk+CisJPGVudHJ5PkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlIChkdmIgQVBJIG9ubHkuIFdpbGwgbGlrZWx5CisJICAgICAgIGJlIHJlcGxhY2VkIGFueXRpbWUgc29vbiBieSBFTk9UVFkpLjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisJPGVudHJ5PkVQRVJNPC9lbnRyeT4KKwk8ZW50cnk+UGVybWlzc2lvbiBkZW5pZWQuIENhbiBiZSByZXR1cm5lZCBpZiB0aGUgZGV2aWNlIG5lZWRzIHdyaXRlCisJCXBlcm1pc3Npb24sIG9yIHNvbWUgc3BlY2lhbCBjYXBhYmlsaXRpZXMgaXMgbmVlZGVkCisJCShlLiBnLiByb290KTwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisJPGVudHJ5PkVXT1VMREJMT0NLPC9lbnRyeT4KKwk8ZW50cnk+T3BlcmF0aW9uIHdvdWxkIGJsb2NrLiBVc2VkIHdoZW4gdGhlIGlvY3RsIHdvdWxkIG5lZWQgdG8gd2FpdAorCSAgICAgICBmb3IgYW4gZXZlbnQsIGJ1dCB0aGUgZGV2aWNlIHdhcyBvcGVuZWQgaW4gbm9uLWJsb2NraW5nIG1vZGUuPC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgIDwvdGJvZHk+CisgIDwvdGdyb3VwPgorPC90YWJsZT4KKworPHBhcmE+Tm90ZSAxOiBpb2N0bHMgbWF5IHJldHVybiBvdGhlciBlcnJvciBjb2Rlcy4gU2luY2UgZXJyb3JzIG1heSBoYXZlIHNpZGUKK2VmZmVjdHMgc3VjaCBhcyBhIGRyaXZlciByZXNldCwgYXBwbGljYXRpb25zIHNob3VsZCBhYm9ydCBvbiB1bmV4cGVjdGVkIGVycm9ycy4KKzwvcGFyYT4KKworPHBhcmE+Tm90ZSAyOiBSZXF1ZXN0LXNwZWNpZmljIGVycm9yIGNvZGVzIGFyZSBsaXN0ZWQgaW4gdGhlIGluZGl2aWR1YWwKK3JlcXVlc3RzIGRlc2NyaXB0aW9ucy48L3BhcmE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvaW8ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9pby54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwva2V5dGFibGUuYy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2tleXRhYmxlLmMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2tleXRhYmxlLmMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2tleXRhYmxlLmMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpYnY0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2xpYnY0bC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlidjRsLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9saWJ2NGwueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saXJjX2RldmljZV9pbnRlcmZhY2UueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwKaW5kZXggMGUwNDUzZi4uOGQ3ZWI2YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saXJjX2RldmljZV9pbnRlcmZhY2UueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbGlyY19kZXZpY2VfaW50ZXJmYWNlLnhtbApAQCAtMjQ2LDYgKzI0Niw4IEBACiAgICAgPC9saXN0aXRlbT4KICAgPC92YXJsaXN0ZW50cnk+CiA8L3ZhcmlhYmxlbGlzdD4KLQorPHNlY3Rpb24gaWQ9ImxpcmNfZGV2X2Vycm9ycyI+CisgICZyZXR1cm4tdmFsdWU7Cis8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CiA8L3NlY3Rpb24+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWNvbnRyb2xsZXIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9tZWRpYS1jb250cm9sbGVyLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1jb250cm9sbGVyLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9tZWRpYS1jb250cm9sbGVyLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1mdW5jLWNsb3NlLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtZnVuYy1jbG9zZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtZnVuYy1jbG9zZS54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtZnVuYy1jbG9zZS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtZnVuYy1pb2N0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWZ1bmMtaW9jdGwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDc4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWZ1bmMtaW9jdGwueG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxyZWZlbnRyeSBpZD0ibWVkaWEtZnVuYy1pb2N0bCI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPm1lZGlhIGlvY3RsKCk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPm1lZGlhLWlvY3RsPC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkNvbnRyb2wgYSBtZWRpYSBkZXZpY2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jc3lub3BzaXNpbmZvPiNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDs8L2Z1bmNzeW5vcHNpc2luZm8+CisgICAgICA8ZnVuY3Byb3RvdHlwZT4KKwk8ZnVuY2RlZj5pbnQgPGZ1bmN0aW9uPmlvY3RsPC9mdW5jdGlvbj48L2Z1bmNkZWY+CisJPHBhcmFtZGVmPmludCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisJPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+CisgICAgICA8L2Z1bmNwcm90b3R5cGU+CisgICAgPC9mdW5jc3lub3BzaXM+CisgIDwvcmVmc3lub3BzaXNkaXY+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5Bcmd1bWVudHM8L3RpdGxlPgorCisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPjwvdGVybT4KKwk8bGlzdGl0ZW0+CisJICA8cGFyYT4mZmQ7PC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPk1lZGlhIGlvY3RsIHJlcXVlc3QgY29kZSBhcyBkZWZpbmVkIGluIHRoZSBtZWRpYS5oIGhlYWRlciBmaWxlLAorCSAgZm9yIGV4YW1wbGUgTUVESUFfSU9DX1NFVFVQX0xJTksuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPlBvaW50ZXIgdG8gYSByZXF1ZXN0LXNwZWNpZmljIHN0cnVjdHVyZS48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgIDwvdmFyaWFibGVsaXN0PgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+aW9jdGwoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIG1hbmlwdWxhdGVzIG1lZGlhIGRldmljZQorICAgIHBhcmFtZXRlcnMuIFRoZSBhcmd1bWVudCA8cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IG11c3QgYmUgYW4gb3BlbiBmaWxlCisgICAgZGVzY3JpcHRvci48L3BhcmE+CisgICAgPHBhcmE+VGhlIGlvY3RsIDxwYXJhbWV0ZXI+cmVxdWVzdDwvcGFyYW1ldGVyPiBjb2RlIHNwZWNpZmllcyB0aGUgbWVkaWEKKyAgICBmdW5jdGlvbiB0byBiZSBjYWxsZWQuIEl0IGhhcyBlbmNvZGVkIGluIGl0IHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGFuCisgICAgaW5wdXQsIG91dHB1dCBvciByZWFkL3dyaXRlIHBhcmFtZXRlciwgYW5kIHRoZSBzaXplIG9mIHRoZSBhcmd1bWVudAorICAgIDxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPiBpbiBieXRlcy48L3BhcmE+CisgICAgPHBhcmE+TWFjcm9zIGFuZCBzdHJ1Y3R1cmVzIGRlZmluaXRpb25zIHNwZWNpZnlpbmcgbWVkaWEgaW9jdGwgcmVxdWVzdHMgYW5kCisgICAgdGhlaXIgcGFyYW1ldGVycyBhcmUgbG9jYXRlZCBpbiB0aGUgbWVkaWEuaCBoZWFkZXIgZmlsZS4gQWxsIG1lZGlhIGlvY3RsCisgICAgcmVxdWVzdHMsIHRoZWlyIHJlc3BlY3RpdmUgZnVuY3Rpb24gYW5kIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbgorICAgIDx4cmVmIGxpbmtlbmQ9Im1lZGlhLXVzZXItZnVuYyIgLz4uPC9wYXJhPgorICA8L3JlZnNlY3QxPgorCisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworCisgICAgPHBhcmE+UmVxdWVzdC1zcGVjaWZpYyBlcnJvciBjb2RlcyBhcmUgbGlzdGVkIGluIHRoZQorICAgIGluZGl2aWR1YWwgcmVxdWVzdHMgZGVzY3JpcHRpb25zLjwvcGFyYT4KKyAgICA8cGFyYT5XaGVuIGFuIGlvY3RsIHRoYXQgdGFrZXMgYW4gb3V0cHV0IG9yIHJlYWQvd3JpdGUgcGFyYW1ldGVyIGZhaWxzLAorICAgIHRoZSBwYXJhbWV0ZXIgcmVtYWlucyB1bm1vZGlmaWVkLjwvcGFyYT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWZ1bmMtb3Blbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWZ1bmMtb3Blbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtZnVuYy1vcGVuLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9tZWRpYS1mdW5jLW9wZW4ueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1kZXZpY2UtaW5mby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWlvYy1kZXZpY2UtaW5mby54bWwKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2MtZGV2aWNlLWluZm8ueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWlvYy1kZXZpY2UtaW5mby54bWwKaW5kZXggMWYzMjM3My4uMmNlNTIxNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2MtZGV2aWNlLWluZm8ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtaW9jLWRldmljZS1pbmZvLnhtbApAQCAtMTI3LDcgKzEyNyw2IEBACiAgIDwvcmVmc2VjdDE+CiAKICAgPHJlZnNlY3QxPgotICAgIDx0aXRsZT5SZXR1cm4gdmFsdWU8L3RpdGxlPgotICAgIDxwYXJhPlRoaXMgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4gc3BlY2lmaWMgZXJyb3IgY29kZXMuPC9wYXJhPgorICAgICZyZXR1cm4tdmFsdWU7CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2MtZW51bS1lbnRpdGllcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWlvYy1lbnVtLWVudGl0aWVzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2MtZW51bS1lbnRpdGllcy54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtaW9jLWVudW0tZW50aXRpZXMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1lbnVtLWxpbmtzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtaW9jLWVudW0tbGlua3MueG1sCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtaW9jLWVudW0tbGlua3MueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWlvYy1lbnVtLWxpbmtzLnhtbAppbmRleCBkMmZjNzNlLi4zNTVkZjQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1lbnVtLWxpbmtzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL21lZGlhLWlvYy1lbnVtLWxpbmtzLnhtbApAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgPC90YWJsZT4KIAogICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0ibWVkaWEtbGluay1kZXNjIj4KLSAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+bWVkaWFfbGlua3NfZGVzYzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT5tZWRpYV9saW5rX2Rlc2M8L3N0cnVjdG5hbWU+PC90aXRsZT4KICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICZjcy1zdHI7CiAJPHRib2R5IHZhbGlnbj0idG9wIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sCmluZGV4IGNlYzk3YWYuLmZjMmU1MjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sCkBAIC03MiwxNSArNzIsNiBAQAogCiAgICAgPHZhcmlhYmxlbGlzdD4KICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgbGluayBwcm9wZXJ0aWVzIGNhbid0IGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUgbGluayBpcwotCSAgY3VycmVudGx5IGJ1c3kuIFRoaXMgY2FuIGJlIGNhdXNlZCwgZm9yIGluc3RhbmNlLCBieSBhbiBhY3RpdmUgbWVkaWEKLQkgIHN0cmVhbSAoYXVkaW8gb3IgdmlkZW8pIG9uIHRoZSBsaW5rLiBUaGUgaW9jdGwgc2hvdWxkbid0IGJlIHJldHJpZWQgaWYKLQkgIG5vIG90aGVyIGFjdGlvbiBpcyBwZXJmb3JtZWQgYmVmb3JlIHRvIGZpeCB0aGUgcHJvYmxlbS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+CiAJICA8cGFyYT5UaGUgJm1lZGlhLWxpbmstZGVzYzsgcmVmZXJlbmNlcyBhIG5vbi1leGlzdGluZyBsaW5rLCBvciB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGlwZWxpbmUucGRmIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXBlbGluZS5wZGYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGlwZWxpbmUucGRmCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpcGVsaW5lLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LWdyZXkueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1ncmV5LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtZ3JleS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LW00MjAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtbTQyMC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LW00MjAueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1tNDIwLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1udjEyLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LW52MTIueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjEybS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1udjEybS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LW52MTJtLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtbnYxMm0ueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1udjEybXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtbnYxMm10LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxMm10LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtbnYxMm10LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1udjE2LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtbnYxNi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LW52MTYueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXBhY2tlZC1yZ2IueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtcGFja2VkLXJnYi54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC15dXYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtcGFja2VkLXl1di54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXBhY2tlZC15dXYueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1wYWNrZWQteXV2LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2JnZ3IxNi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zYmdncjE2LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2JnZ3IxNi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNiZ2dyMTYueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zYmdncjgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc2JnZ3I4LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2JnZ3I4LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc2JnZ3I4LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc2dicmc4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNnYnJnOC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNnYnJnOC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNnYnJnOC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNncmJnOC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zZ3JiZzgueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zZ3JiZzgueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zZ3JiZzgueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zcmdnYjEwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTAueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1zcmdnYjEwLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNyZ2diMTIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNyZ2diMTIueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEyLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtc3JnZ2I4LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diOC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXNyZ2diOC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diOC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXV5dnkueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtdXl2eS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXV5dnkueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC11eXZ5LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC12eXV5LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtdnl1eS54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXZ5dXkueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteTEwLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTEwLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteTEwLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTEwYi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15MTBiLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTEwYi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXkxMGIueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteTEyLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTEyLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteTEyLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTE2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXkxNi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxNi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXkxNi54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteTQxcC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXk0MXAueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15NDFwLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDEwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1djQxMC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQxMC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1djQxMC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQxMXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteXV2NDExcC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQxMXAueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15dXY0MTFwLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDIwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1djQyMC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1djQyMC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMG0ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteXV2NDIwbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl1djQyMG0ueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15dXY0MjBtLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDIycC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15dXY0MjJwLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteXV2NDIycC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1djQyMnAueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXl1eXYueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15dXl2LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteXV5di54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl2eXUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQteXZ5dS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXl2eXUueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC15dnl1LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQueG1sCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQueG1sCmluZGV4IGRlYjY2MDIuLjJmZjZiNzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC54bWwKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgIGFuIGFycmF5IG9mIDxzdHJ1Y3RuYW1lPnY0bDJfcGxhbmVfcGl4X2Zvcm1hdDwvc3RydWN0bmFtZT4gc3RydWN0dXJlcywKICAgICBkZXNjcmliaW5nIGFsbCBwbGFuZXMgb2YgdGhhdCBmb3JtYXQuPC9wYXJhPgogICA8dGFibGUgcGd3aWRlPSIxIiBmcmFtZT0ibm9uZSIgaWQ9InY0bDItcGxhbmUtcGl4LWZvcm1hdCI+Ci0gICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52bDQyX3BsYW5lX3BpeF9mb3JtYXQ8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfcGxhbmVfcGl4X2Zvcm1hdDwvc3RydWN0bmFtZT48L3RpdGxlPgogICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAmY3Mtc3RyOwogICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KQEAgLTc0MSwxMCArNzQxLDU1IEBACiAJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtTVBFRyI+CiAJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX01QRUc8L2NvbnN0YW50PjwvZW50cnk+CiAJICAgIDxlbnRyeT4nTVBFRyc8L2VudHJ5PgotCSAgICA8ZW50cnk+TVBFRyBzdHJlYW0uIFRoZSBhY3R1YWwgZm9ybWF0IGlzIGRldGVybWluZWQgYnkKKwkgICAgPGVudHJ5Pk1QRUcgbXVsdGlwbGV4ZWQgc3RyZWFtLiBUaGUgYWN0dWFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5CiBleHRlbmRlZCBjb250cm9sIDxjb25zdGFudD5WNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFPC9jb25zdGFudD4sIHNlZQogPHhyZWYgbGlua2VuZD0ibXBlZy1jb250cm9sLWlkIiAvPi48L2VudHJ5PgogCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtSDI2NCI+CisJCTxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0gyNjQ8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT4nSDI2NCc8L2VudHJ5PgorCQk8ZW50cnk+SDI2NCB2aWRlbyBlbGVtZW50YXJ5IHN0cmVhbSB3aXRoIHN0YXJ0IGNvZGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1IMjY0LU5PLVNDIj4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfSDI2NF9OT19TQzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PidBVkMxJzwvZW50cnk+CisJCTxlbnRyeT5IMjY0IHZpZGVvIGVsZW1lbnRhcnkgc3RyZWFtIHdpdGhvdXQgc3RhcnQgY29kZXMuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUgyNjMiPgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9IMjYzPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+J0gyNjMnPC9lbnRyeT4KKwkJPGVudHJ5PkgyNjMgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULU1QRUcxIj4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTVBFRzE8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT4nTVBHMSc8L2VudHJ5PgorCQk8ZW50cnk+TVBFRzEgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULU1QRUcyIj4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTVBFRzI8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT4nTVBHMic8L2VudHJ5PgorCQk8ZW50cnk+TVBFRzIgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULU1QRUc0Ij4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfTVBFRzQ8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT4nTVBHNCc8L2VudHJ5PgorCQk8ZW50cnk+TVBFRzQgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVhWSUQiPgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9YVklEPC9jb25zdGFudD48L2VudHJ5PgorCQk8ZW50cnk+J1hWSUQnPC9lbnRyeT4KKwkJPGVudHJ5Plh2aWQgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVZDMS1BTk5FWC1HIj4KKwkJPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0c8L2NvbnN0YW50PjwvZW50cnk+CisJCTxlbnRyeT4nVkMxRyc8L2VudHJ5PgorCQk8ZW50cnk+VkMxLCBTTVBURSA0MjFNIEFubmV4IEcgY29tcGxpYW50IHN0cmVhbS48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtVkMxLUFOTkVYLUwiPgorCQk8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkJPGVudHJ5PidWQzFMJzwvZW50cnk+CisJCTxlbnRyeT5WQzEsIFNNUFRFIDQyMU0gQW5uZXggTCBjb21wbGlhbnQgc3RyZWFtLjwvZW50cnk+CisJICA8L3Jvdz4KIAk8L3Rib2R5PgogICAgICAgPC90Z3JvdXA+CiAgICAgPC90YWJsZT4KQEAgLTgwNCw2ICs4NDksMTIgQEAKIAkgICAgPGVudHJ5PidDUElBJzwvZW50cnk+CiAJICAgIDxlbnRyeT5ZVVYgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIGNwaWExIGRyaXZlci48L2VudHJ5PgogCSAgPC9yb3c+CisJICA8cm93IGlkPSJWNEwyLVBJWC1GTVQtSlBHTCI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0pQR0w8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nSlBHTCc8L2VudHJ5PgorCSAgICA8ZW50cnk+SlBFRy1MaWdodCBmb3JtYXQgKFBlZ2FzdXMgTG9zc2xlc3MgSlBFRykKKwkJCXVzZWQgaW4gRGl2aW8gd2ViY2FtcyBOVyA4MHguPC9lbnRyeT4KKwkgIDwvcm93PgogCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDEiPgogCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUENBNTAxPC9jb25zdGFudD48L2VudHJ5PgogCSAgICA8ZW50cnk+J1M1MDEnPC9lbnRyeT4KQEAgLTg1NCw2ICs5MDUsMTEgQEAKIAkgICAgPGVudHJ5PidQSlBHJzwvZW50cnk+CiAJICAgIDxlbnRyeT5QaXhhcnQgNzN4eCBKUEVHIGZvcm1hdCB1c2VkIGJ5IHRoZSBnc3BjYSBkcml2ZXIuPC9lbnRyeT4KIAkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULVNFNDAxIj4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0U0MDE8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4nUzQwMSc8L2VudHJ5PgorCSAgICA8ZW50cnk+Q29tcHJlc3NlZCBSR0IgZm9ybWF0IHVzZWQgYnkgdGhlIGdzcGNhIHNlNDAxIGRyaXZlcjwvZW50cnk+CisJICA8L3Jvdz4KIAkgIDxyb3cgaWQ9IlY0TDItUElYLUZNVC1TUTkwNUMiPgogCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TUTkwNUM8L2NvbnN0YW50PjwvZW50cnk+CiAJICAgIDxlbnRyeT4nOTA1Qyc8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9wbGFuYXItYXBpcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BsYW5hci1hcGlzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9wbGFuYXItYXBpcy54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGxhbmFyLWFwaXMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3JlbW90ZV9jb250cm9sbGVycy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcmVtb3RlX2NvbnRyb2xsZXJzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9yZW1vdGVfY29udHJvbGxlcnMueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvc3ViZGV2LWZvcm1hdHMueG1sCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvc3ViZGV2LWZvcm1hdHMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3N1YmRldi1mb3JtYXRzLnhtbAppbmRleCA4ZDM0MDlkLi40OWM1MzJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3N1YmRldi1mb3JtYXRzLnhtbApAQCAtMzgwLDkgKzM4MCw2IEBACiAJPHRpdGxlPkJheWVyIFBhdHRlcm5zPC90aXRsZT4KIAk8bWVkaWFvYmplY3Q+CiAJICA8aW1hZ2VvYmplY3Q+Ci0JICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iYmF5ZXIucGRmIiBmb3JtYXQ9IlBTIiAvPgotCSAgPC9pbWFnZW9iamVjdD4KLQkgIDxpbWFnZW9iamVjdD4KIAkgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJiYXllci5wbmciIGZvcm1hdD0iUE5HIiAvPgogCSAgPC9pbWFnZW9iamVjdD4KIAkgIDx0ZXh0b2JqZWN0PgpAQCAtMjUyOCw3ICsyNTI1LDcgQEAKIAogICAgICAgPHBhcmE+VGhvc2UgZGF0YSBmb3JtYXRzIGNvbnNpc3Qgb2YgYW4gb3JkZXJlZCBzZXF1ZW5jZSBvZiA4LWJpdCBieXRlcwogCW9idGFpbmVkIGZyb20gSlBFRyBjb21wcmVzc2lvbiBwcm9jZXNzLiBBZGRpdGlvbmFsbHkgdG8gdGhlCi0JPGNvbnN0YW50Pl9KUEVHPC9jb25zdGFudD4gcHJlZml4IHRoZSBmb3JtYXQgY29kZSBpcyBtYWRlIG9mCisJPGNvbnN0YW50Pl9KUEVHPC9jb25zdGFudD4gcG9zdGZpeCB0aGUgZm9ybWF0IGNvZGUgaXMgbWFkZSBvZgogCXRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uCiAJPGl0ZW1pemVkbGlzdD4KIAkgIDxsaXN0aXRlbT48cGFyYT5UaGUgbnVtYmVyIG9mIGJ1cyBzYW1wbGVzIHBlciBlbnRyb3B5IGVuY29kZWQgYnl0ZS48L3BhcmE+PC9saXN0aXRlbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdjRsMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3Y0bDIueG1sCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdjRsMi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdjRsMi54bWwKaW5kZXggYTdmZDc2ZC4uMGQwNWU4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3Y0bDIueG1sCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICA8L2F1dGhvcj4KIAogICAgICAgPGF1dGhvcj4KLSAgICAgIAk8Zmlyc3RuYW1lPlBhd2VsPC9maXJzdG5hbWU+CisJPGZpcnN0bmFtZT5QYXdlbDwvZmlyc3RuYW1lPgogCTxzdXJuYW1lPk9zY2lhazwvc3VybmFtZT4KIAk8Y29udHJpYj5EZXNpZ25lZCBhbmQgZG9jdW1lbnRlZCB0aGUgbXVsdGktcGxhbmFyIEFQSS48L2NvbnRyaWI+CiAJPGFmZmlsaWF0aW9uPgpAQCAtMTI4LDYgKzEyOCwxNSBAQAogYXBwbGljYXRpb25zLiAtLT4KIAogICAgICAgPHJldmlzaW9uPgorCTxyZXZudW1iZXI+My4xPC9yZXZudW1iZXI+CisJPGRhdGU+MjAxMS0wNi0yNzwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+bWNjLCBwbywgaHY8L2F1dGhvcmluaXRpYWxzPgorCTxyZXZyZW1hcms+RG9jdW1lbnRlZCB0aGF0IFZJRElPQ19RVUVSWUNBUCBub3cgcmV0dXJucyBhIHBlci1zdWJzeXN0ZW0gdmVyc2lvbiBpbnN0ZWFkIG9mIGEgcGVyLWRyaXZlciBvbmUuCisJCSAgIFN0YW5kYXJkaXplIGFuIGVycm9yIGNvZGUgZm9yIGludmFsaWQgaW9jdGwuCisJCSAgIEFkZGVkIFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0suPC9yZXZyZW1hcms+CisgICAgICA8L3JldmlzaW9uPgorCisgICAgICA8cmV2aXNpb24+CiAJPHJldm51bWJlcj4yLjYuMzk8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDExLTAzLTAxPC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5tY2MsIHBvPC9hdXRob3Jpbml0aWFscz4KQEAgLTQwMSw3ICs0MTAsNyBAQAogPC9wYXJ0aW5mbz4KIAogPHRpdGxlPlZpZGVvIGZvciBMaW51eCBUd28gQVBJIFNwZWNpZmljYXRpb248L3RpdGxlPgotIDxzdWJ0aXRsZT5SZXZpc2lvbiAyLjYuMzk8L3N1YnRpdGxlPgorIDxzdWJ0aXRsZT5SZXZpc2lvbiAzLjE8L3N1YnRpdGxlPgogCiAgIDxjaGFwdGVyIGlkPSJjb21tb24iPgogICAgICZzdWItY29tbW9uOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92NGwyZ3JhYi5jLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdjRsMmdyYWIuYy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdjRsMmdyYWIuYy54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdjRsMmdyYWIuYy54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZiaV81MjUucGRmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV81MjUucGRmCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZiaV81MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzYyNS5wZGYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZiaV82MjUucGRmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUucGRmCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZiaV82MjUucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmJpX2hzeW5jLnBkZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMucGRmCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZiaV9oc3luYy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1jcm9wY2FwLnhtbApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1jcm9wY2FwLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwKaW5kZXggODE2ZTkwZS4uYjRmMmYyNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtY3JvcGNhcC54bWwKQEAgLTE1NiwxOSArMTU2LDEwIEBACiAJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CiAJPGxpc3RpdGVtPgogCSAgPHBhcmE+VGhlICZ2NGwyLWNyb3BjYXA7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMKLWludmFsaWQgb3IgdGhlIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgbm90IHBlcm1pdHRlZCBmb3IKLXZpZGVvIGNhcHR1cmUsIG91dHB1dCBhbmQgb3ZlcmxheSBkZXZpY2VzLCB3aGljaCBtdXN0IHN1cHBvcnQKLTxjb25zdGFudD5WSURJT0NfQ1JPUENBUDwvY29uc3RhbnQ+LjwvcGFyYT4KK2ludmFsaWQuIFRoaXMgaXMgbm90IHBlcm1pdHRlZCBmb3IgdmlkZW8gY2FwdHVyZSwgb3V0cHV0IGFuZCBvdmVybGF5IGRldmljZXMsCit3aGljaCBtdXN0IHN1cHBvcnQgPGNvbnN0YW50PlZJRElPQ19DUk9QQ0FQPC9jb25zdGFudD4uPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctY2hpcC1pZGVudC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sCmluZGV4IDRhMDllMjAuLjRlY2Q5NjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWRiZy1nLWNoaXAtaWRlbnQueG1sCkBAIC0yNTgsMTggKzI1OCw5IEBACiAgICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLCBvciB0aGUKLTxzdHJ1Y3RmaWVsZD5tYXRjaF90eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZC48L3BhcmE+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPm1hdGNoX3R5cGU8L3N0cnVjdGZpZWxkPiBpcyBpbnZhbGlkLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sCmluZGV4IDk4MGM3ZjMuLmE0NGFlYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRiZy1nLXJlZ2lzdGVyLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1kYmctZy1yZWdpc3Rlci54bWwKQEAgLTI0NywxNSArMjQ3LDYgQEAKIAogICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLCBvciB0aGUga2VybmVsCi13YXMgbm90IGNvbXBpbGVkIHdpdGggdGhlIDxjb25zdGFudD5DT05GSUdfVklERU9fQURWX0RFQlVHPC9jb25zdGFudD4KLW9wdGlvbiwgb3IgdGhlIDxzdHJ1Y3RmaWVsZD5tYXRjaF90eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgaW52YWxpZCwgb3IgdGhlCi1zZWxlY3RlZCBjaGlwIG9yIHJlZ2lzdGVyIGRvZXMgbm90IGV4aXN0LjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RVBFUk08L2Vycm9yY29kZT48L3Rlcm0+CiAJPGxpc3RpdGVtPgogCSAgPHBhcmE+SW5zdWZmaWNpZW50IHBlcm1pc3Npb25zLiBSb290IHByaXZpbGVnZXMgYXJlIHJlcXVpcmVkCkBAIC0yNjUsMTEgKzI1NiwzIEBACiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1kcWV2ZW50LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWRxZXZlbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWRxZXZlbnQueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1kcWV2ZW50LnhtbAppbmRleCA0ZTBhN2NjLi43NzY5NjQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1kcWV2ZW50LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1kcWV2ZW50LnhtbApAQCAtODEsNiArODEsMTMgQEAKIAkgIDwvcm93PgogCSAgPHJvdz4KIAkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT4mdjRsMi1ldmVudC1jdHJsOzwvZW50cnk+CisgICAgICAgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmN0cmw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5FdmVudCBkYXRhIGZvciBldmVudCBWNEwyX0VWRU5UX0NUUkwuCisgICAgICAgICAgICA8L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KIAkgICAgPGVudHJ5Pl9fdTg8L2VudHJ5PgogICAgICAgICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5kYXRhPC9zdHJ1Y3RmaWVsZD5bNjRdPC9lbnRyeT4KIAkgICAgPGVudHJ5PkV2ZW50IGRhdGEuIERlZmluZWQgYnkgdGhlIGV2ZW50IHR5cGUuIFRoZSB1bmlvbgpAQCAtMTEwLDggKzExNywxNiBAQAogCSAgICA8ZW50cnk+RXZlbnQgdGltZXN0YW1wLjwvZW50cnk+CiAJICA8L3Jvdz4KIAkgIDxyb3c+CisJICAgIDxlbnRyeT51MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAgICAgICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCBzb3VyY2UuIElmIHRoZSBldmVudCBkb2VzIG5vdAorCQloYXZlIGFuIGFzc29jaWF0ZWQgSUQgKHRoaXMgZGVwZW5kcyBvbiB0aGUgZXZlbnQgdHlwZSksIHRoZW4gdGhpcworCQlpcyAwLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CiAJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+Ci0JICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls5XTwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls4XTwvZW50cnk+CiAgICAgICAgICAgICA8ZW50cnk+PC9lbnRyeT4KIAkgICAgPGVudHJ5PlJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gRHJpdmVycyBtdXN0IHNldAogCSAgICB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgpAQCAtMTIxLDExICsxMzYsNyBAQAogICAgIDwvdGFibGU+CiAKICAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVuY29kZXItY21kLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW5jb2Rlci1jbWQueG1sCmluZGV4IGIwZGRlOTQuLmFmN2YzZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVuY29kZXItY21kLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbmNvZGVyLWNtZC54bWwKQEAgLTE4MCw4ICsxODAsNyBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBpb2N0bCwgb3IgdGhlCi08c3RydWN0ZmllbGQ+Y21kPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgaW52YWxpZC48L3BhcmE+CisJICA8cGFyYT5UaGUgPHN0cnVjdGZpZWxkPmNtZDwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGludmFsaWQuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgIDx2YXJsaXN0ZW50cnk+CkBAIC0xOTQsMTEgKzE5MywzIEBACiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWR2LXByZXNldHMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1kdi1wcmVzZXRzLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1kdi1wcmVzZXRzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1kdi1wcmVzZXRzLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1mbXQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZtdC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW0tZm10LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1laW50ZXJ2YWxzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwKaW5kZXggM2MyMTZlMS4uNWZkNzJjNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1mcmFtZWludGVydmFscy54bWwKQEAgLTI1NCwxNyArMjU0LDYgQEAKIAogICA8cmVmc2VjdDE+CiAgICAgJnJldHVybi12YWx1ZTsKLQotICAgIDxwYXJhPlNlZSB0aGUgZGVzY3JpcHRpb24gc2VjdGlvbiBhYm92ZSBmb3IgYSBsaXN0IG9mIHJldHVybgotdmFsdWVzIHRoYXQgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IGNhbiBoYXZlLjwvcGFyYT4KICAgPC9yZWZzZWN0MT4KIAogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mcmFtZXNpemVzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW0tZnJhbWVzaXplcy54bWwKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bS1mcmFtZXNpemVzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1mcmFtZXNpemVzLnhtbAppbmRleCA2YWZhNDU0Li5mNzdhMTNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtLWZyYW1lc2l6ZXMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW0tZnJhbWVzaXplcy54bWwKQEAgLTI2NywxNiArMjY3LDUgQEAKIAogICA8cmVmc2VjdDE+CiAgICAgJnJldHVybi12YWx1ZTsKLQotICAgIDxwYXJhPlNlZSB0aGUgZGVzY3JpcHRpb24gc2VjdGlvbiBhYm92ZSBmb3IgYSBsaXN0IG9mIHJldHVybgotdmFsdWVzIHRoYXQgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IGNhbiBoYXZlLjwvcGFyYT4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWVudW1hdWRpby54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW1hdWRpby54bWwKaW5kZXggOWFlOGYyZC4uZWE4MTZhYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWF1ZGlvLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbnVtYXVkaW8ueG1sCkBAIC02OCwxOSArNjgsOSBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSBhdWRpbyBpbnB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgotdGhlcmUgYXJlIG5vIGF1ZGlvIGlucHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90Ci1zdXBwb3J0ZWQuPC9wYXJhPgorCSAgPHBhcmE+VGhlIG51bWJlciBvZiB0aGUgYXVkaW8gaW5wdXQgaXMgb3V0IG9mIGJvdW5kcy48L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bWF1ZGlvb3V0LnhtbAppbmRleCBkM2Q3YzBhLi4yZTg3Y2VkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtYXVkaW9vdXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW1hdWRpb291dC54bWwKQEAgLTcxLDE5ICs3MSw5IEBACiAgICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSBudW1iZXIgb2YgdGhlIGF1ZGlvIG91dHB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgotdGhlcmUgYXJlIG5vIGF1ZGlvIG91dHB1dHMgYXQgYWxsIGFuZCB0aGlzIGlvY3RsIGlzIG5vdAotc3VwcG9ydGVkLjwvcGFyYT4KKwkgIDxwYXJhPlRoZSBudW1iZXIgb2YgdGhlIGF1ZGlvIG91dHB1dCBpcyBvdXQgb2YgYm91bmRzLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtaW5wdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bWlucHV0LnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbnVtb3V0cHV0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZW51bW91dHB1dC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW1vdXRwdXQueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW1zdGQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1lbnVtc3RkLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bXN0ZC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW8ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1hdWRpby54bWwKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1hdWRpby54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctYXVkaW8ueG1sCmluZGV4IDY1MzYxYTguLmQ3YmI5YjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW8ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctYXVkaW8ueG1sCkBAIC0xNjQsMjUgKzE2NCw5IEBACiAJPGxpc3RpdGVtPgogCSAgPHBhcmE+Tm8gYXVkaW8gaW5wdXRzIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCB2aWRlbyBpbnB1dCwKIG9yIHRoZSBudW1iZXIgb2YgdGhlIHNlbGVjdGVkIGF1ZGlvIGlucHV0IGlzIG91dCBvZiBib3VuZHMgb3IgaXQgZG9lcwotbm90IGNvbWJpbmUsIG9yIHRoZXJlIGFyZSBubyBhdWRpbyBpbnB1dHMgYXQgYWxsIGFuZCB0aGUgaW9jdGwgaXMgbm90Ci1zdXBwb3J0ZWQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBpbnB1dCBjYW5ub3QgYmUKLXN3aXRjaGVkLjwvcGFyYT4KK25vdCBjb21iaW5lLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctYXVkaW9vdXQueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbAppbmRleCAzNjMyNzMwLi4yMDBhMjcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWF1ZGlvb3V0LnhtbApAQCAtMTMwLDI1ICsxMzAsOSBAQAogCTxsaXN0aXRlbT4KIAkgIDxwYXJhPk5vIGF1ZGlvIG91dHB1dHMgY29tYmluZSB3aXRoIHRoZSBjdXJyZW50IHZpZGVvCiBvdXRwdXQsIG9yIHRoZSBudW1iZXIgb2YgdGhlIHNlbGVjdGVkIGF1ZGlvIG91dHB1dCBpcyBvdXQgb2YgYm91bmRzIG9yCi1pdCBkb2VzIG5vdCBjb21iaW5lLCBvciB0aGVyZSBhcmUgbm8gYXVkaW8gb3V0cHV0cyBhdCBhbGwgYW5kIHRoZQotaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVCVVNZPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPkkvTyBpcyBpbiBwcm9ncmVzcywgdGhlIG91dHB1dCBjYW5ub3QgYmUKLXN3aXRjaGVkLjwvcGFyYT4KK2l0IGRvZXMgbm90IGNvbWJpbmUuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3JvcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWNyb3AueG1sCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3JvcC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctY3JvcC54bWwKaW5kZXggZDIzNWIxZC4uMDFhNTA2NDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctY3JvcC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1jcm9wLnhtbApAQCAtMTIyLDIyICsxMjIsNSBAQAogCiAgIDxyZWZzZWN0MT4KICAgICAmcmV0dXJuLXZhbHVlOwotCi0gICAgPHZhcmlhYmxlbGlzdD4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+Q3JvcHBpbmcgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1jdHJsLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctY3RybC54bWwKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1jdHJsLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1jdHJsLnhtbAppbmRleCA4YjVlNmZmLi41MTQ2ZDAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWN0cmwueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctY3RybC54bWwKQEAgLTExNyw2ICsxMTcsMTMgQEAKIHRoaXMgY29udHJvbCBiZWxvbmdzIHRvLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFDQ0VTPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkF0dGVtcHQgdG8gc2V0IGEgcmVhZC1vbmx5IGNvbnRyb2wgb3IgdG8gZ2V0IGEKKwkgIHdyaXRlLW9ubHkgY29udHJvbC48L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWR2LXByZXNldC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZHYtcHJlc2V0LnhtbAppbmRleCBkNzMzNzIxLi43OTQwYzExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWR2LXByZXNldC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1kdi1wcmVzZXQueG1sCkBAIC05NywxNCArOTcsOCBAQAogCTwvdGJvZHk+CiAgICAgICA8L3Rncm91cD4KICAgICA8L3RhYmxlPgotCisgIDwvcmVmc2VjdDE+CisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOwogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1kdi10aW1pbmdzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZHYtdGltaW5ncy54bWwKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1kdi10aW1pbmdzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1kdi10aW1pbmdzLnhtbAppbmRleCBkNWVjNmFiLi40YTg2NDhhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWR2LXRpbWluZ3MueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZHYtdGltaW5ncy54bWwKQEAgLTIxMiwxMiArMjEyLDcgQEAKICAgICAgIDwvdGdyb3VwPgogICAgIDwvdGFibGU+CiAgIDwvcmVmc2VjdDE+CisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1lbmMtaW5kZXgueG1sCmluZGV4IDlmMjQyZTQuLjJhZWYwMmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZW5jLWluZGV4LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWVuYy1pbmRleC54bWwKQEAgLTE5MiwyMiArMTkyLDUgQEAKIAogICA8cmVmc2VjdDE+CiAgICAgJnJldHVybi12YWx1ZTsKLQotICAgIDx2YXJpYWJsZWxpc3Q+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGlvY3RsLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1leHQtY3RybHMueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy54bWwKaW5kZXggM2FhN2Y4Zi4uNTEyMmNlOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1leHQtY3RybHMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZXh0LWN0cmxzLnhtbApAQCAtMjUwLDYgKzI1MCwxMyBAQAogVGhlc2UgY29udHJvbHMgYXJlIGRlc2NyaWJlZCBpbiA8eHJlZgogCQlsaW5rZW5kPSJmbS10eC1jb250cm9scyIgLz4uPC9lbnRyeT4KIAkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfQ0xBU1NfRkxBU0g8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDljMDAwMDwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgY2xhc3MgY29udGFpbmluZyBmbGFzaCBkZXZpY2UgY29udHJvbHMuCitUaGVzZSBjb250cm9scyBhcmUgZGVzY3JpYmVkIGluIDx4cmVmCisJCWxpbmtlbmQ9ImZsYXNoLWNvbnRyb2xzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CiAJPC90Ym9keT4KICAgICAgIDwvdGdyb3VwPgogICAgIDwvdGFibGU+CkBAIC0yOTQsNiArMzAxLDEzIEBACiB0byBzdG9yZSB0aGUgcGF5bG9hZCBhbmQgdGhpcyBlcnJvciBjb2RlIGlzIHJldHVybmVkLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgICA8dmFybGlzdGVudHJ5PgorCTx0ZXJtPjxlcnJvcmNvZGU+RUFDQ0VTPC9lcnJvcmNvZGU+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPkF0dGVtcHQgdG8gdHJ5IG9yIHNldCBhIHJlYWQtb25seSBjb250cm9sIG9yIHRvIGdldCBhCisJICB3cml0ZS1vbmx5IGNvbnRyb2wuPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1mYnVmLnhtbApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZidWYueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWZidWYueG1sCmluZGV4IGU3ZGRhNDguLjA1NTcxODIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZmJ1Zi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1mYnVmLnhtbApAQCAtNDQ2LDI4ICs0NDYsMTEgQEAKIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhlIGZyYW1lYnVmZmVyIHBhcmFtZXRlcnMgY2Fubm90IGJlIGNoYW5nZWQgYXQgdGhpcwotdGltZSBiZWNhdXNlIG92ZXJsYXkgaXMgYWxyZWFkeSBlbmFibGVkLCBvciBjYXB0dXJpbmcgaXMgZW5hYmxlZAotYW5kIHRoZSBoYXJkd2FyZSBjYW5ub3QgY2FwdHVyZSBhbmQgb3ZlcmxheSBzaW11bHRhbmVvdXNseS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCBvciB0aGUKLTxjb25zdGFudD5WSURJT0NfU19GQlVGPC9jb25zdGFudD4gcGFyYW1ldGVycyBhcmUgdW5zdWl0YWJsZS48L3BhcmE+CisJICA8cGFyYT5UaGUgPGNvbnN0YW50PlZJRElPQ19TX0ZCVUY8L2NvbnN0YW50PiBwYXJhbWV0ZXJzIGFyZSB1bnN1aXRhYmxlLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLWZtdC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWZtdC54bWwKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mbXQueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWZtdC54bWwKaW5kZXggYTRhZTU5Yi4uMTdmYmRhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mbXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZm10LnhtbApAQCAtMTg0LDI5ICsxODQsMTMgQEAKIAogICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhlIGRhdGEgZm9ybWF0IGNhbm5vdCBiZSBjaGFuZ2VkIGF0IHRoaXMKLXRpbWUsIGZvciBleGFtcGxlIGJlY2F1c2UgSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+CiAJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CiAJPGxpc3RpdGVtPgogCSAgPHBhcmE+VGhlICZ2NGwyLWZvcm1hdDsgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgotZmllbGQgaXMgaW52YWxpZCwgdGhlIHJlcXVlc3RlZCBidWZmZXIgdHlwZSBub3Qgc3VwcG9ydGVkLCBvcgotPGNvbnN0YW50PlZJRElPQ19UUllfRk1UPC9jb25zdGFudD4gd2FzIGNhbGxlZCBhbmQgaXMgbm90Ci1zdXBwb3J0ZWQgd2l0aCB0aGlzIGJ1ZmZlciB0eXBlLjwvcGFyYT4KK2ZpZWxkIGlzIGludmFsaWQsIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHR5cGUgbm90IHN1cHBvcnRlZCwgb3IgdGhlCitmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHRoaXMgYnVmZmVyIHR5cGUuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctZnJlcXVlbmN5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctZnJlcXVlbmN5LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1mcmVxdWVuY3kueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLWZyZXF1ZW5jeS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctaW5wdXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1pbnB1dC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctaW5wdXQueG1sCmluZGV4IGVkMDc2ZTkuLjA4YWU4MmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctaW5wdXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctaW5wdXQueG1sCkBAIC03NSwyNiArNzUsOSBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgbnVtYmVyIG9mIHRoZSB2aWRlbyBpbnB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgotdGhlcmUgYXJlIG5vIHZpZGVvIGlucHV0cyBhdCBhbGwgYW5kIHRoaXMgaW9jdGwgaXMgbm90Ci1zdXBwb3J0ZWQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5JL08gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBpbnB1dCBjYW5ub3QgYmUKLXN3aXRjaGVkLjwvcGFyYT4KKwkgIDxwYXJhPlRoZSBudW1iZXIgb2YgdGhlIHZpZGVvIGlucHV0IGlzIG91dCBvZiBib3VuZHMuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctanBlZ2NvbXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1qcGVnY29tcC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctanBlZ2NvbXAueG1sCmluZGV4IDc3Mzk0YjIuLjAxZWEyNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctanBlZ2NvbXAueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctanBlZ2NvbXAueG1sCkBAIC0xNTksMjIgKzE1OSw1IEBACiAKICAgPHJlZnNlY3QxPgogICAgICZyZXR1cm4tdmFsdWU7Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGlzIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctbW9kdWxhdG9yLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1tb2R1bGF0b3IueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLW1vZHVsYXRvci54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctb3V0cHV0LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctb3V0cHV0LnhtbApzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW91dHB1dC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctb3V0cHV0LnhtbAppbmRleCAzZWE4YzBlLi5mZDQ1ZjFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLW91dHB1dC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1vdXRwdXQueG1sCkBAIC03NiwyNSArNzYsOSBAQAogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KIAkgIDxwYXJhPlRoZSBudW1iZXIgb2YgdGhlIHZpZGVvIG91dHB1dCBpcyBvdXQgb2YgYm91bmRzLCBvcgotdGhlcmUgYXJlIG5vIHZpZGVvIG91dHB1dHMgYXQgYWxsIGFuZCB0aGlzIGlvY3RsIGlzIG5vdAotc3VwcG9ydGVkLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+SS9PIGlzIGluIHByb2dyZXNzLCB0aGUgb3V0cHV0IGNhbm5vdCBiZQotc3dpdGNoZWQuPC9wYXJhPgordGhlcmUgYXJlIG5vIHZpZGVvIG91dHB1dHMgYXQgYWxsLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXBhcm0ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1wYXJtLnhtbApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXBhcm0ueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXBhcm0ueG1sCmluZGV4IDM5MmFhOWUuLjE5YjFkODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1wYXJtLnhtbApAQCAtMzExLDIyICszMTEsNSBAQAogCiAgIDxyZWZzZWN0MT4KICAgICAmcmV0dXJuLXZhbHVlOwotCi0gICAgPHZhcmlhYmxlbGlzdD4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhpcyBpb2N0bCBpcyBub3Qgc3VwcG9ydGVkLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctcHJpb3JpdHkueG1sCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcHJpb3JpdHkueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbAppbmRleCA1ZmIwMDE5Li44ZjVlM2RhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXByaW9yaXR5LnhtbApAQCAtMTIwLDggKzEyMCw3IEBACiAgICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgdmFsdWUgaXMgaW52YWxpZCwgb3IgdGhlCi1kcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhY2Nlc3MgcHJpb3JpdGllcy48L3BhcmE+CisJICA8cGFyYT5UaGUgcmVxdWVzdGVkIHByaW9yaXR5IHZhbHVlIGlzIGludmFsaWQuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgIDx2YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWctc2xpY2VkLXZiaS1jYXAueG1sCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc2xpY2VkLXZiaS1jYXAueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbAppbmRleCAxMGU3MjFiLi43MTc0MWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXNsaWNlZC12YmktY2FwLnhtbApAQCAtMjQ2LDE5ICsyNDYsMTAgQEAKICAgICAgIDx2YXJsaXN0ZW50cnk+CiAJPHRlcm0+PGVycm9yY29kZT5FSU5WQUw8L2Vycm9yY29kZT48L3Rlcm0+CiAJPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHNsaWNlZCBWQkkgY2FwdHVyaW5nIG9yCi1vdXRwdXQsIG9yIHRoZSB2YWx1ZSBpbiB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcworCSAgPHBhcmE+VGhlIHZhbHVlIGluIHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzCiB3cm9uZy48L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1zdGQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1zdGQueG1sCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy1zdGQueG1sCmluZGV4IDkxMmY4NTEuLjM3OTk2ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctc3RkLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXN0ZC54bWwKQEAgLTgyLDE0ICs4Miw3IEBACiAgICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlCi08Y29uc3RhbnQ+VklESU9DX1NfU1REPC9jb25zdGFudD4gcGFyYW1ldGVyIHdhcyB1bnN1aXRhYmxlLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhlIGRldmljZSBpcyBidXN5IGFuZCB0aGVyZWZvcmUgY2FuIG5vdCBjaGFuZ2UgdGhlIHN0YW5kYXJkPC9wYXJhPgorCSAgPHBhcmE+VGhlIDxjb25zdGFudD5WSURJT0NfU19TVEQ8L2NvbnN0YW50PiBwYXJhbWV0ZXIgd2FzIHVuc3VpdGFibGUuPC9wYXJhPgogCTwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICA8L3ZhcmlhYmxlbGlzdD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctdHVuZXIueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZy10dW5lci54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctdHVuZXIueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1nLXR1bmVyLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtbG9nLXN0YXR1cy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbApzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1sb2ctc3RhdHVzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtbG9nLXN0YXR1cy54bWwKaW5kZXggMjYzNGI3Yy4uNWRlZDdkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtbG9nLXN0YXR1cy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtbG9nLXN0YXR1cy54bWwKQEAgLTM3LDIyICszNyw1IEBACiAKICAgPHJlZnNlY3QxPgogICAgICZyZXR1cm4tdmFsdWU7Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBpb2N0bC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1vdmVybGF5LnhtbApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1vdmVybGF5LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwKaW5kZXggMTAzNmM1OC4uMjUwYTdkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtb3ZlcmxheS54bWwKQEAgLTY1LDE5ICs2NSwxMCBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5WaWRlbyBvdmVybGF5IGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZQotcGFyYW1ldGVycyBoYXZlIG5vdCBiZWVuIHNldCB1cC4gU2VlIDx4cmVmCisJICA8cGFyYT5UaGUgb3ZlcmxheSBwYXJhbWV0ZXJzIGhhdmUgbm90IGJlZW4gc2V0IHVwLiBTZWUgPHhyZWYKIGxpbmtlbmQ9Im92ZXJsYXkiIC8+IGZvciB0aGUgbmVjZXNzYXJ5IHN0ZXBzLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXFidWYueG1sCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xYnVmLnhtbAppbmRleCBmMmIxMWY4Li45Y2FhNDlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xYnVmLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xYnVmLnhtbApAQCAtMTU4LDE1ICsxNTgsNiBAQAogPHN0cnVjdGZpZWxkPnVzZXJwdHI8L3N0cnVjdGZpZWxkPiBvcgogPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IGFyZSBpbnZhbGlkLjwvcGFyYT4KIAk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RU5PTUVNPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPk5vdCBlbm91Z2ggcGh5c2ljYWwgb3IgdmlydHVhbCBtZW1vcnkgd2FzIGF2YWlsYWJsZSB0bwotZW5xdWV1ZSBhIHVzZXIgcG9pbnRlciBidWZmZXIuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+CiAJPHRlcm0+PGVycm9yY29kZT5FSU88L2Vycm9yY29kZT48L3Rlcm0+CiAJPGxpc3RpdGVtPgogCSAgPHBhcmE+PGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+IGZhaWxlZCBkdWUgdG8gYW4KQEAgLTE4NCwxMSArMTc1LDMgQEAKICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQueG1sCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXF1ZXJ5LWR2LXByZXNldC54bWwKaW5kZXggZDI3MmY3YS4uMjNiMTdmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnktZHYtcHJlc2V0LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeS1kdi1wcmVzZXQueG1sCkBAIC02MSwyNyArNjEsNSBAQAogCiAgIDxyZWZzZWN0MT4KICAgICAmcmV0dXJuLXZhbHVlOwotICAgIDx2YXJpYWJsZWxpc3Q+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoaXMgaW9jdGwgaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgZGV2aWNlIGlzIGJ1c3kgYW5kIHRoZXJlZm9yZSBjYW4gbm90IHNlbnNlIHRoZSBwcmVzZXQ8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y2FwLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcXVlcnljYXAueG1sCmluZGV4IGYyOWYxYjguLmUzNjY0ZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y2FwLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeWNhcC54bWwKQEAgLTY3LDkgKzY3LDggQEAKIAkgICAgPGVudHJ5PjxwYXJhPk5hbWUgb2YgdGhlIGRyaXZlciwgYSB1bmlxdWUgTlVMLXRlcm1pbmF0ZWQKIEFTQ0lJIHN0cmluZy4gRm9yIGV4YW1wbGU6ICJidHR2Ii4gRHJpdmVyIHNwZWNpZmljIGFwcGxpY2F0aW9ucyBjYW4KIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHZlcmlmeSB0aGUgZHJpdmVyIGlkZW50aXR5LiBJdCBpcyBhbHNvIHVzZWZ1bAotdG8gd29yayBhcm91bmQga25vd24gYnVncywgb3IgdG8gaWRlbnRpZnkgZHJpdmVycyBpbiBlcnJvciByZXBvcnRzLgotVGhlIGRyaXZlciB2ZXJzaW9uIGlzIHN0b3JlZCBpbiB0aGUgPHN0cnVjdGZpZWxkPnZlcnNpb248L3N0cnVjdGZpZWxkPgotZmllbGQuPC9wYXJhPjxwYXJhPlN0b3Jpbmcgc3RyaW5ncyBpbiBmaXhlZCBzaXplZCBhcnJheXMgaXMgYmFkCit0byB3b3JrIGFyb3VuZCBrbm93biBidWdzLCBvciB0byBpZGVudGlmeSBkcml2ZXJzIGluIGVycm9yIHJlcG9ydHMuPC9wYXJhPgorPHBhcmE+U3RvcmluZyBzdHJpbmdzIGluIGZpeGVkIHNpemVkIGFycmF5cyBpcyBiYWQKIHByYWN0aWNlIGJ1dCB1bmF2b2lkYWJsZSBoZXJlLiBEcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkIHRha2UKIHByZWNhdXRpb25zIHRvIG5ldmVyIHJlYWQgb3Igd3JpdGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGFycmF5IGFuZCB0bwogbWFrZSBzdXJlIHRoZSBzdHJpbmdzIGFyZSBwcm9wZXJseSBOVUwtdGVybWluYXRlZC48L3BhcmE+PC9lbnRyeT4KQEAgLTEwMCw5ICs5OSwxMyBAQAogCSAgPHJvdz4KIAkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KIAkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD52ZXJzaW9uPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgotCSAgICA8ZW50cnk+PHBhcmE+VmVyc2lvbiBudW1iZXIgb2YgdGhlIGRyaXZlci4gVG9nZXRoZXIgd2l0aAotdGhlIDxzdHJ1Y3RmaWVsZD5kcml2ZXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0aGlzIGlkZW50aWZpZXMgYQotcGFydGljdWxhciBkcml2ZXIuIFRoZSB2ZXJzaW9uIG51bWJlciBpcyBmb3JtYXR0ZWQgdXNpbmcgdGhlCisJICAgIDxlbnRyeT48cGFyYT5WZXJzaW9uIG51bWJlciBvZiB0aGUgZHJpdmVyLjwvcGFyYT4KKzxwYXJhPlN0YXJ0aW5nIG9uIGtlcm5lbCAzLjEsIHRoZSB2ZXJzaW9uIHJlcG9ydGVkIGlzIHByb3ZpZGVkIHBlcgorVjRMMiBzdWJzeXN0ZW0sIGZvbGxvd2luZyB0aGUgc2FtZSBLZXJuZWwgbnVtYmVyYXRpb24gc2NoZW1lLiBIb3dldmVyLCBpdAorc2hvdWxkIG5vdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIGtlcm5lbCwgaWYsIGZvciBleGFtcGxlLAorYW4gc3RhYmxlIG9yIGRpc3RyaWJ1dGlvbi1tb2RpZmllZCBrZXJuZWwgdXNlcyB0aGUgVjRMMiBzdGFjayBmcm9tIGEKK25ld2VyIGtlcm5lbC48L3BhcmE+Cis8cGFyYT5UaGUgdmVyc2lvbiBudW1iZXIgaXMgZm9ybWF0dGVkIHVzaW5nIHRoZQogPGNvbnN0YW50PktFUk5FTF9WRVJTSU9OKCk8L2NvbnN0YW50PiBtYWNybzo8L3BhcmE+PC9lbnRyeT4KIAkgIDwvcm93PgogCSAgPHJvdz4KQEAgLTI4MCwyNCArMjgzLDUgQEAKIAogICA8cmVmc2VjdDE+CiAgICAgJnJldHVybi12YWx1ZTsKLQotICAgIDx2YXJpYWJsZWxpc3Q+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlRoZSBkZXZpY2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzCi1zcGVjaWZpY2F0aW9uLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+Ci0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXF1ZXJ5Y3RybC54bWwKaW5kZXggMGQ1ZTgyOC4uNjc3ZWE2NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnljdHJsLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeWN0cmwueG1sCkBAIC0xNTYsNyArMTU2LDggQEAKIAkgICAgPGVudHJ5Pk1heGltdW0gdmFsdWUsIGluY2x1c2l2ZS4gVGhpcyBmaWVsZCBnaXZlcyBhbiB1cHBlcgogYm91bmQgZm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9JTlRFR0VSPC9jb25zdGFudD4gY29udHJvbHMgYW5kIHRoZQogaGlnaGVzdCB2YWxpZCBpbmRleCBmb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX01FTlU8L2NvbnN0YW50PgotY29udHJvbHMuCitjb250cm9scy4gRm9yIDxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9CSVRNQVNLPC9jb25zdGFudD4gY29udHJvbHMgaXQgaXMgdGhlCitzZXQgb2YgdXNhYmxlIGJpdHMuCiBGb3IgPGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX1NUUklORzwvY29uc3RhbnQ+IGNvbnRyb2xzIHRoZSBtYXhpbXVtIHZhbHVlCiBnaXZlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHN0cmluZy4gVGhpcyBsZW5ndGggPGVtcGhhc2lzPmRvZXMgbm90IGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nCiB6ZXJvPC9lbXBoYXNpcz4uIEl0IG1heSBub3QgYmUgdmFsaWQgZm9yIGFueSBvdGhlciB0eXBlIG9mIGNvbnRyb2wsIGluY2x1ZGluZwpAQCAtMjkxLDYgKzI5MiwxNSBAQAogPGNvbnN0YW50PlZJRElPQ19RVUVSWU1FTlU8L2NvbnN0YW50PiBpb2N0bC48L2VudHJ5PgogCSAgPC9yb3c+CiAJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfQ1RSTF9UWVBFX0JJVE1BU0s8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5Pm4vYTwvZW50cnk+CisJICAgIDxlbnRyeT5hbnk8L2VudHJ5PgorCSAgICA8ZW50cnk+QSBiaXRtYXNrIGZpZWxkLiBUaGUgbWF4aW11bSB2YWx1ZSBpcyB0aGUgc2V0IG9mIGJpdHMgdGhhdCBjYW4KK2JlIHVzZWQsIGFsbCBvdGhlciBiaXRzIGFyZSB0byBiZSAwLiBUaGUgbWF4aW11bSB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBhIF9fdTMyLAorYWxsb3dpbmcgdGhlIHVzZSBvZiBiaXQgMzEgaW4gdGhlIGJpdG1hc2suPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KIAkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0NUUkxfVFlQRV9CVVRUT048L2NvbnN0YW50PjwvZW50cnk+CiAJICAgIDxlbnRyeT4wPC9lbnRyeT4KIAkgICAgPGVudHJ5PjA8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcXVlcnlzdGQueG1sCmluZGV4IDFhOWU2MDMuLjRiNzljN2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5c3RkLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeXN0ZC54bWwKQEAgLTYyLDI4ICs2Miw1IEBACiAKICAgPHJlZnNlY3QxPgogICAgICZyZXR1cm4tdmFsdWU7Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGlzIGlvY3RsIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgZGV2aWNlIGlzIGJ1c3kgYW5kIHRoZXJlZm9yZSBjYW4gbm90IGRldGVjdCB0aGUgc3RhbmRhcmQ8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1yZXFidWZzLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKaW5kZXggNjk4MDBhZS4uN2JlNGIxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKQEAgLTEyMiwxNCArMTIyLDYgQEAKIAogICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJVU1k8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBvcGVucyBhbmQgSS9PIGlzIGFscmVhZHkKLWluIHByb2dyZXNzLCBvciByZWFsbG9jYXRpb24gb2YgYnVmZmVycyB3YXMgYXR0ZW1wdGVkIGFsdGhvdWdoIG9uZSBvcgotbW9yZSBhcmUgc3RpbGwgbWFwcGVkLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICA8dmFybGlzdGVudHJ5PgogCTx0ZXJtPjxlcnJvcmNvZGU+RUlOVkFMPC9lcnJvcmNvZGU+PC90ZXJtPgogCTxsaXN0aXRlbT4KIAkgIDxwYXJhPlRoZSBidWZmZXIgdHlwZSAoPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCkgb3IgdGhlCkBAIC0xNDAsMTEgKzEzMiwzIEBACiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiA8L3JlZmVudHJ5PgotCi08IS0tCi1Mb2NhbCBWYXJpYWJsZXM6Ci1tb2RlOiBzZ21sCi1zZ21sLXBhcmVudC1kb2N1bWVudDogInY0bDIuc2dtbCIKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zLWh3LWZyZXEtc2Vlay54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zLWh3LWZyZXEtc2Vlay54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXMtaHctZnJlcS1zZWVrLnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtcy1ody1mcmVxLXNlZWsueG1sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3RyZWFtb24ueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdHJlYW1vbi54bWwKaW5kZXggNzVlZDM5Yi4uODFjY2E0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3RyZWFtb24ueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN0cmVhbW9uLnhtbApAQCAtODgsOSArODgsOSBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KIAk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5TdHJlYW1pbmcgSS9PIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBidWZmZXIKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IHN1cHBvcnRlZCwgb3Igbm8gYnVmZmVycyBoYXZlCi1iZWVuIGFsbG9jYXRlZCAobWVtb3J5IG1hcHBpbmcpIG9yIGVucXVldWVkIChvdXRwdXQpIHlldC48L3BhcmE+CisJICA8cGFyYT5UaGUgYnVmZmVyPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBpcyBub3Qgc3VwcG9ydGVkLAorCSAgb3Igbm8gYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIChtZW1vcnkgbWFwcGluZykgb3IgZW5xdWV1ZWQKKwkgIChvdXRwdXQpIHlldC48L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgPHZhcmxpc3RlbnRyeT4KQEAgLTEwNSwxMSArMTA1LDMgQEAKICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1lbnVtLWZyYW1lLWludGVydmFsLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1lbnVtLWZyYW1lLWludGVydmFsLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3ViZGV2LWVudW0tZnJhbWUtaW50ZXJ2YWwueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJkZXYtZW51bS1mcmFtZS1pbnRlcnZhbC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1lbnVtLWZyYW1lLXNpemUueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtc3ViZGV2LWVudW0tZnJhbWUtc2l6ZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1lbnVtLWZyYW1lLXNpemUueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJkZXYtZW51bS1mcmFtZS1zaXplLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3ViZGV2LWVudW0tbWJ1cy1jb2RlLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1lbnVtLW1idXMtY29kZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1lbnVtLW1idXMtY29kZS54bWwKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1lbnVtLW1idXMtY29kZS54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1nLWNyb3AueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtc3ViZGV2LWctY3JvcC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1nLWNyb3AueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJkZXYtZy1jcm9wLnhtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3ViZGV2LWctZm10LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1nLWZtdC54bWwKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3ViZGV2LWctZm10LnhtbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2Mtc3ViZGV2LWctZm10LnhtbAppbmRleCBmMzY3YzU3Li5hNjdjZGU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1zdWJkZXYtZy1mbXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1nLWZtdC54bWwKQEAgLTE3Nyw0ICsxNzcsNyBAQAogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CisgIDxyZWZzZWN0MT4KKyAgICAmcmV0dXJuLXZhbHVlOworICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YmRldi1nLWZyYW1lLWludGVydmFsLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YmRldi1nLWZyYW1lLWludGVydmFsLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3ViZGV2LWctZnJhbWUtaW50ZXJ2YWwueG1sCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJkZXYtZy1mcmFtZS1pbnRlcnZhbC54bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLXN1YnNjcmliZS1ldmVudC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJzY3JpYmUtZXZlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzBkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1zdWJzY3JpYmUtZXZlbnQueG1sCkBAIC0wLDAgKzEsMjk3IEBACis8cmVmZW50cnkgaWQ9InZpZGlvYy1zdWJzY3JpYmUtZXZlbnQiPgorICA8cmVmbWV0YT4KKyAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfU1VCU0NSSUJFX0VWRU5ULCBWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQ8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorCisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPlZJRElPQ19TVUJTQ1JJQkVfRVZFTlQsIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVDwvcmVmbmFtZT4KKyAgICA8cmVmcHVycG9zZT5TdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgZXZlbnQ8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKworICA8cmVmc3lub3BzaXNkaXY+CisgICAgPGZ1bmNzeW5vcHNpcz4KKyAgICAgIDxmdW5jcHJvdG90eXBlPgorCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KKwk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgorCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKwk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uCisqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KKyAgICAgIDwvZnVuY3Byb3RvdHlwZT4KKyAgICA8L2Z1bmNzeW5vcHNpcz4KKyAgPC9yZWZzeW5vcHNpc2Rpdj4KKworICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+CisKKyAgICA8dmFyaWFibGVsaXN0PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPiZmZDs8L3BhcmE+CisJPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeT4KKwk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CisJPGxpc3RpdGVtPgorCSAgPHBhcmE+VklESU9DX1NVQlNDUklCRV9FVkVOVCwgVklESU9DX1VOU1VCU0NSSUJFX0VWRU5UPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnk+CisJPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgorCTxsaXN0aXRlbT4KKwkgIDxwYXJhPjwvcGFyYT4KKwk8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgIDwvcmVmc2VjdDE+CisKKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5TdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgVjRMMiBldmVudC4gU3Vic2NyaWJlZCBldmVudHMgYXJlCisgICAgZGVxdWV1ZWQgYnkgdXNpbmcgdGhlICZWSURJT0MtRFFFVkVOVDsgaW9jdGwuPC9wYXJhPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWV2ZW50LXN1YnNjcmlwdGlvbiI+CisgICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1zdHI7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGV2ZW50LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5JRCBvZiB0aGUgZXZlbnQgc291cmNlLiBJZiB0aGVyZSBpcyBubyBJRCBhc3NvY2lhdGVkIHdpdGgKKwkJdGhlIGV2ZW50IHNvdXJjZSwgdGhlbiBzZXQgdGhpcyB0byAwLiBXaGV0aGVyIG9yIG5vdCBhbiBldmVudAorCQluZWVkcyBhbiBJRCBkZXBlbmRzIG9uIHRoZSBldmVudCB0eXBlLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5FdmVudCBmbGFncywgc2VlIDx4cmVmIGxpbmtlbmQ9ImV2ZW50LWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bNV08L2VudHJ5PgorCSAgICA8ZW50cnk+UmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiBEcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMKKwkgICAgbXVzdCBzZXQgdGhlIGFycmF5IHRvIHplcm8uPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJldmVudC10eXBlIj4KKyAgICAgIDx0aXRsZT5FdmVudCBUeXBlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FVkVOVF9BTEw8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4wPC9lbnRyeT4KKwkgICAgPGVudHJ5PkFsbCBldmVudHMuIFY0TDJfRVZFTlRfQUxMIGlzIHZhbGlkIG9ubHkgZm9yCisJICAgIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVCBmb3IgdW5zdWJzY3JpYmluZyBhbGwgZXZlbnRzIGF0IG9uY2UuCisJICAgIDwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FVkVOVF9WU1lOQzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjE8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgb24gdGhlIHZlcnRpY2FsIHN5bmMuCisJICAgIFRoaXMgZXZlbnQgaGFzIGEgJnY0bDItZXZlbnQtdnN5bmM7IGFzc29jaWF0ZWQgd2l0aCBpdC4KKwkgICAgPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX0VPUzwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZW5kIG9mIGEgc3RyZWFtIGlzIHJlYWNoZWQuCisJICAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCBNUEVHIGRlY29kZXJzIHRvIHJlcG9ydCB0byB0aGUgYXBwbGljYXRpb24KKwkgICAgd2hlbiB0aGUgbGFzdCBvZiB0aGUgTVBFRyBzdHJlYW0gaGFzIGJlZW4gZGVjb2RlZC4KKwkgICAgPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX0NUUkw8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4zPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPlRoaXMgZXZlbnQgcmVxdWlyZXMgdGhhdCB0aGUgPHN0cnVjdGZpZWxkPmlkPC9zdHJ1Y3RmaWVsZD4KKwkJbWF0Y2hlcyB0aGUgY29udHJvbCBJRCBmcm9tIHdoaWNoIHlvdSB3YW50IHRvIHJlY2VpdmUgZXZlbnRzLgorCQlUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBpZiB0aGUgY29udHJvbCdzIHZhbHVlIGNoYW5nZXMsIGlmIGEKKwkJYnV0dG9uIGNvbnRyb2wgaXMgcHJlc3NlZCBvciBpZiB0aGUgY29udHJvbCdzIGZsYWdzIGNoYW5nZS4KKwkgICAgCVRoaXMgZXZlbnQgaGFzIGEgJnY0bDItZXZlbnQtY3RybDsgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIHN0cnVjdAorCQljb250YWlucyBtdWNoIG9mIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzICZ2NGwyLXF1ZXJ5Y3RybDsgYW5kCisJCSZ2NGwyLWNvbnRyb2w7LjwvcGFyYT4KKworCQk8cGFyYT5JZiB0aGUgZXZlbnQgaXMgZ2VuZXJhdGVkIGR1ZSB0byBhIGNhbGwgdG8gJlZJRElPQy1TLUNUUkw7IG9yCisJCSZWSURJT0MtUy1FWFQtQ1RSTFM7LCB0aGVuIHRoZSBldmVudCB3aWxsIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBiZSBzZW50IHRvCisJCXRoZSBmaWxlIGhhbmRsZSB0aGF0IGNhbGxlZCB0aGUgaW9jdGwgZnVuY3Rpb24uIFRoaXMgcHJldmVudHMKKwkJbmFzdHkgZmVlZGJhY2sgbG9vcHMuIElmIHlvdSA8ZW1waGFzaXM+ZG88L2VtcGhhc2lzPiB3YW50IHRvIGdldCB0aGUKKwkJZXZlbnQsIHRoZW4gc2V0IHRoZSA8Y29uc3RhbnQ+VjRMMl9FVkVOVF9TVUJfRkxfQUxMT1dfRkVFREJBQ0s8L2NvbnN0YW50PgorCQlmbGFnLgorCQk8L3BhcmE+CisKKwkJPHBhcmE+VGhpcyBldmVudCB0eXBlIHdpbGwgZW5zdXJlIHRoYXQgbm8gaW5mb3JtYXRpb24gaXMgbG9zdCB3aGVuCisJCW1vcmUgZXZlbnRzIGFyZSByYWlzZWQgdGhhbiB0aGVyZSBpcyByb29tIGludGVybmFsbHkuIEluIHRoYXQKKwkJY2FzZSB0aGUgJnY0bDItZXZlbnQtY3RybDsgb2YgdGhlIHNlY29uZC1vbGRlc3QgZXZlbnQgaXMga2VwdCwKKwkJYnV0IHRoZSA8c3RydWN0ZmllbGQ+Y2hhbmdlczwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIHRoZQorCQlzZWNvbmQtb2xkZXN0IGV2ZW50IGlzIE9SZWQgd2l0aCB0aGUgPHN0cnVjdGZpZWxkPmNoYW5nZXM8L3N0cnVjdGZpZWxkPgorCQlmaWVsZCBvZiB0aGUgb2xkZXN0IGV2ZW50LjwvcGFyYT4KKwkgICAgPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQ8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDA4MDAwMDAwPC9lbnRyeT4KKwkgICAgPGVudHJ5PkJhc2UgZXZlbnQgbnVtYmVyIGZvciBkcml2ZXItcHJpdmF0ZSBldmVudHMuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJldmVudC1mbGFncyI+CisgICAgICA8dGl0bGU+RXZlbnQgRmxhZ3M8L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3MtZGVmOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVZFTlRfU1VCX0ZMX1NFTkRfSU5JVElBTDwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjB4MDAwMTwvZW50cnk+CisJICAgIDxlbnRyeT5XaGVuIHRoaXMgZXZlbnQgaXMgc3Vic2NyaWJlZCBhbiBpbml0aWFsIGV2ZW50IHdpbGwgYmUgc2VudAorCQljb250YWluaW5nIHRoZSBjdXJyZW50IHN0YXR1cy4gVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGZvciBldmVudHMKKwkJdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGEgc3RhdHVzIGNoYW5nZSBzdWNoIGFzIDxjb25zdGFudD5WNEwyX0VWRU5UX0NUUkw8L2NvbnN0YW50Pi4KKwkJT3RoZXIgZXZlbnRzIHdpbGwgaWdub3JlIHRoaXMgZmxhZy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfRVZFTlRfU1VCX0ZMX0FMTE9XX0ZFRURCQUNLPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxwYXJhPklmIHNldCwgdGhlbiBldmVudHMgZGlyZWN0bHkgY2F1c2VkIGJ5IGFuIGlvY3RsIHdpbGwgYWxzbyBiZSBzZW50IHRvCisJCXRoZSBmaWxlaGFuZGxlIHRoYXQgY2FsbGVkIHRoYXQgaW9jdGwuIEZvciBleGFtcGxlLCBjaGFuZ2luZyBhIGNvbnRyb2wgdXNpbmcKKwkJJlZJRElPQy1TLUNUUkw7IHdpbGwgY2F1c2UgYSBWNEwyX0VWRU5UX0NUUkwgdG8gYmUgc2VudCBiYWNrIHRvIHRoYXQgc2FtZQorCQlmaWxlaGFuZGxlLiBOb3JtYWxseSBzdWNoIGV2ZW50cyBhcmUgc3VwcHJlc3NlZCB0byBwcmV2ZW50IGZlZWRiYWNrIGxvb3BzCisJCXdoZXJlIGFuIGFwcGxpY2F0aW9uIGNoYW5nZXMgYSBjb250cm9sIHRvIGEgb25lIHZhbHVlIGFuZCB0aGVuIGFub3RoZXIsIGFuZAorCQl0aGVuIHJlY2VpdmVzIGFuIGV2ZW50IHRlbGxpbmcgaXQgdGhhdCB0aGF0IGNvbnRyb2wgaGFzIGNoYW5nZWQgdG8gdGhlIGZpcnN0CisJCXZhbHVlLjwvcGFyYT4KKworCQk8cGFyYT5TaW5jZSBpdCBjYW4ndCB0ZWxsIHdoZXRoZXIgdGhhdCBldmVudCB3YXMgY2F1c2VkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24KKwkJb3IgYnkgdGhlICZWSURJT0MtUy1DVFJMOyBjYWxsIGl0IGlzIGhhcmQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gc2V0IHRoZQorCQljb250cm9sIHRvIHRoZSB2YWx1ZSBpbiB0aGUgZXZlbnQsIG9yIGlnbm9yZSBpdC48L3BhcmE+CisKKwkJPHBhcmE+VGhpbmsgY2FyZWZ1bGx5IHdoZW4geW91IHNldCB0aGlzIGZsYWcgc28geW91IHdvbid0IGdldCBpbnRvIHNpdHVhdGlvbnMKKwkJbGlrZSB0aGF0LjwvcGFyYT4KKwkgICAgPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWV2ZW50LXZzeW5jIj4KKyAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9ldmVudF92c3luYzwvc3RydWN0bmFtZT48L3RpdGxlPgorICAgICAgPHRncm91cCBjb2xzPSIzIj4KKwkmY3Mtc3RyOworCTx0Ym9keSB2YWxpZ249InRvcCI+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191ODwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgdXBjb21pbmcgZmllbGQuIFNlZSAmdjRsMi1maWVsZDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCTwvdGJvZHk+CisgICAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorCisgICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWV2ZW50LWN0cmwiPgorICAgICAgPHRpdGxlPnN0cnVjdCA8c3RydWN0bmFtZT52NGwyX2V2ZW50X2N0cmw8L3N0cnVjdG5hbWU+PC90aXRsZT4KKyAgICAgIDx0Z3JvdXAgY29scz0iNCI+CisJJmNzLXN0cjsKKwk8dGJvZHkgdmFsaWduPSJ0b3AiPgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fdTMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5jaGFuZ2VzPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PkEgYml0bWFzayB0aGF0IHRlbGxzIHdoYXQgaGFzIGNoYW5nZWQuIFNlZSA8eHJlZiBsaW5rZW5kPSJjaGFuZ2VzLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X191MzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wuIFNlZSAmdjRsMi1jdHJsLXR5cGU7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT51bmlvbiAoYW5vbnltb3VzKTwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIDMyLWJpdCB2YWx1ZSBvZiB0aGUgY29udHJvbCBmb3IgMzItYml0IGNvbnRyb2wgdHlwZXMuCisJCVRoaXMgaXMgMCBmb3Igc3RyaW5nIGNvbnRyb2xzIHNpbmNlIHRoZSB2YWx1ZSBvZiBhIHN0cmluZworCQljYW5ub3QgYmUgcGFzc2VkIHVzaW5nICZWSURJT0MtRFFFVkVOVDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5fX3M2NDwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dmFsdWU2NDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSA2NC1iaXQgdmFsdWUgb2YgdGhlIGNvbnRyb2wgZm9yIDY0LWJpdCBjb250cm9sIHR5cGVzLjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGNvbnRyb2wgZmxhZ3MuIFNlZSA8eHJlZiBsaW5rZW5kPSJjb250cm9sLWZsYWdzIiAvPi48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPm1pbmltdW08L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGNvbnRyb2wuIFNlZSAmdjRsMi1xdWVyeWN0cmw7LjwvZW50cnk+CisJICA8L3Jvdz4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT5fX3MzMjwvZW50cnk+CisJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+bWF4aW11bTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5UaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29udHJvbC4gU2VlICZ2NGwyLXF1ZXJ5Y3RybDsuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pl9fczMyPC9lbnRyeT4KKwkgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5zdGVwPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBzdGVwIHZhbHVlIG9mIHRoZSBjb250cm9sLiBTZWUgJnY0bDItcXVlcnljdHJsOy48L2VudHJ5PgorCSAgPC9yb3c+CisJICA8cm93PgorCSAgICA8ZW50cnk+X19zMzI8L2VudHJ5PgorCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPmRlZmF1bHRfdmFsdWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+VGhlIGRlZmF1bHQgdmFsdWUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuIFNlZSAmdjRsMi1xdWVyeWN0cmw7LjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKworICAgIDx0YWJsZSBwZ3dpZGU9IjEiIGZyYW1lPSJub25lIiBpZD0iY2hhbmdlcy1mbGFncyI+CisgICAgICA8dGl0bGU+Q2hhbmdlczwvdGl0bGU+CisgICAgICA8dGdyb3VwIGNvbHM9IjMiPgorCSZjcy1kZWY7CisJPHRib2R5IHZhbGlnbj0idG9wIj4KKwkgIDxyb3c+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9FVkVOVF9DVFJMX0NIX1ZBTFVFPC9jb25zdGFudD48L2VudHJ5PgorCSAgICA8ZW50cnk+MHgwMDAxPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoaXMgY29udHJvbCBldmVudCB3YXMgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sCisJCWNoYW5nZWQuIFNwZWNpYWwgY2FzZTogaWYgYSBidXR0b24gY29udHJvbCBpcyBwcmVzc2VkLCB0aGVuIHRoaXMKKwkJZXZlbnQgaXMgc2VudCBhcyB3ZWxsLCBldmVuIHRob3VnaCB0aGVyZSBpcyBub3QgZXhwbGljaXQgdmFsdWUKKwkJYXNzb2NpYXRlZCB3aXRoIGEgYnV0dG9uIGNvbnRyb2wuPC9lbnRyeT4KKwkgIDwvcm93PgorCSAgPHJvdz4KKwkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX0NUUkxfQ0hfRkxBR1M8L2NvbnN0YW50PjwvZW50cnk+CisJICAgIDxlbnRyeT4weDAwMDI8L2VudHJ5PgorCSAgICA8ZW50cnk+VGhpcyBjb250cm9sIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYmVjYXVzZSB0aGUgY29udHJvbCBmbGFncworCQljaGFuZ2VkLjwvZW50cnk+CisJICA8L3Jvdz4KKwk8L3Rib2R5PgorICAgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9yZWZzZWN0MT4KKyAgPHJlZnNlY3QxPgorICAgICZyZXR1cm4tdmFsdWU7CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3ZiaV81MjUuZ2lmLmI2NCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfNTI1LmdpZi5iNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkY2YwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfNTI1LmdpZi5iNjQKQEAgLTAsMCArMSw4NCBAQAorUjBsR09EbGhLZ1BJQUlBQUFBQUFBUC8vL3lINUJBRUFBQUVBTEFBQUFBQXFBOGdBQUFMK2pJK3B5KzBQbzV5MDJvdXozcno3RDRiaQorU0pibWlhYnFXZ0pzNDc1TExDdDBmZHk0b2VOOS9RUHVFRUZaa1hWY0paWERYTlA1cEMwVGdHck1TclJNaWRoQTEvdU5iQjlqMkNaOAorS2MrcUhEWERUVDJqSzNCdVBhdTEzdkZwZG1jL3A2VWg1U2VZb1hNSHlGTm9tRWVZaU5FVktDRkZ4OFd6MkVoNTZZV3AyYmZuR1hrMQorT0VoYUtuZW0ycllhNnZwM0tJcWFCaFVMbXNrNFVmYzFLVGJxNHJmYmh4a2NPUXgyMmxpbVo0UDhTVFlIM1BzR3U4cHFlNDM5YXczNgorZWppOXFUMXJHQ3ByYWY1TWtReW55SmV1RzBjNzNpbXZMWXp1VUF3Ri9QNldUSzh2SERkajJRaWE4aFlMNGJGMm8vQ3BteWRPWGE2SQordXFRTlBGZXBueS8rZCtjTTBxc0g4cU5HQ0k4TTNndkc3S0c4aVNKSlZvTklwMXc1aC9DK2dTUGpnV0U5aFIwTHFtenAwUkZQakxWKworaG9Sa2kyWE5QSnlDVm15MlU2S25IbTZXbmJvUmNPUEZrUzU5eHFRcEVLWlJwa0RIZmkxcmRxbFhnVE1WS1ZWTDdoL2NubWkxcnR4cQordDI3WW4xbjV4cnlTVWk4MWlZQWx2UjJNTjIzRm0vbmt5SHpwOUc5aVNvZjNQczFwRTNQbXlWMmRoYVNMMUppZWUzL1pqSTVNa2hsagoreERQWEdua0NsZ25zMXB4VjBLNmQ0cmJZRjdwUnY0NENXN0R0b2p0NmYvWXhPN2h4cnJtVkozL2VaRG5kNHRDalZ3K09QYnYyN2R5NworZS84T1ByejQ4ZVRMbXorUFByMzY5ZXpidTM4UFA3NzgrZlRyMjcrUFA3LysvZnorKy92L0QyQ0FBZzVJWUlFR0hvaGdnZ291U05GdgorMWwySEhJUkNBQ2VoZ3c5ZU9JUjAwMDFJNFlWcThNSklWWkl0VXBKaUc1NjRHRzc1VkphWGI1YVZ0aHRsanduVjFtYXV5WGlqVnF0QgorRlZSb0s3Rm94aTBrTnBoYVlkaFlOUlV4UU1aRFdaS2Q5SVhUUVRtbUZsdVVEUWxuNVRjcUJybmxZRU9oYUdKWE5aclVwUjI0c0xQTgora0M2dWFCR1dNeXdFUnBXSVNlVVphY0lFNWlaSDhPQXBKM0ZydHZoblk1QWRSMWlaVk93NHAxQlRaaGxqbEdORzFhaWpmZ0lLbDQrZgora05aam9JTDJ5U09hY1g0a1lseXlmRGdvb1dCU1dtaWtPSDE1bVU1a3NmcWlxVVZxTnN5U1hON0ZxWjVqV2RvVHI3c1NxYU90VEg2WQorRWFqTU5aWCtrYkM1M3FvcERETXV5bWhwcmdMYkdhVFViZ3J0bThzbUNxT3FRUlliWnJWNTh2aWp0elpnTlcyVFRIWkVhZzdySEZ1VQorUHA0YVNxNnNjOUVKYTdqaW5wVnVxL1J1eSt4U2o5S2liTDBZeVJYclhyN1dsQysyNDJxckRNSnNFWVlTVnZBaVV6R0p3ZzdjN0JxSQorR2p5aXVRNWY3UEcvN2o1N1Zxa3Bxcnl5eUowV0REQnhDMjl5bXIzK1lGRXp5UnBMRTVxRzkxcVlZWVZBUjRoaDBCMFdUYlRSUjFNbgorTkJLVERzMGgwbEVyVFRYVFN5ZGROZFphYnczMTFFVDduTERUVGN0MnRkZG1uODJiYzJWM3piYllhek1JZDl4eXowMTMzWGJmalhmZQorZXUvTmQ5OSsvdzE0NElJUFRuamhoaCtPZU9LS2N6Y1IyQ1l2RG5ua2tnZitYb1RGMmVVQ3M5dVRiODU1NTRNclZVam1KR0R1dU11ZQorbjQ1NjZnS3l4TStUMkwzN2NOcXF6MDU3N1FHMi9pa3BWeEVpZTdMZmxXNTc4TUlQTDF2cm9WZGlmT3kzb3V0a3NjRC9USHowMGsrdgorbmU0NkFwUVQ3MG8yWld6MVJUNVBmZmppMnc0WVdjcUxrcnp2TWhOVC9XanV2eS82K1BMUEwvdy84NTR2cit0NThnUCt2dWZ5U2I4QQorQ25COHBoRUJtbzduaERId3ozdlFHS0FESDBqQVQ0VWdWR1pRSUxqZUJzRU1hbkI2R3FLZ1AraDB2dEZ0Y0lRazVLQUpwcUFhL3puTAorWGM0Q1h2OUtDTVAyZk15QThmdkREQ2RZd3piZzdJUWJ3WjBJcWVIQ0dBclJiajRVd2d2eGdESlNIWEVmSVVRVkVwdUlxaUx5Y0loVQorakp2K0ZOTzJSQ2VKUTRrUHV1SUhVTWkrS2I0cGlGVXNvNEs4eUlRc1ltOGNJbEtqOVZyUVF5aXFVSDltck9QbTBEZ2NOOFlzWG9MUQorSXgxSEFNWS9BcktDZGl5azVQRFlIRCs2cW8xZGxPUEl0SVhJRzBYU2tKVDAyeVI1cUVnMkVxeVJIWXlqenlybnlFcUs4b3loVEVnagorN2JGSm8xM1NJMkV3ekNkRGhEUDR5WEtXdEt4WUxXV0pzVnUrTDVlNnJGa3Y0YmV6WDlwU21EZDBYemRnWmt3YTdTSm5GRE1OTVgzNQorVEZkR001akU1R1UxbzRrbjFXRHptWGJnMlRhRmFTWnJndk5rcyt5bU9MOUp5M0Rlc0dVaVNkNXdtRWhHdDVTaUhVaXBwK25hQ1pMNworNlpPVitXeWl4TUpoVDFNS2xKK0NGQ1Aybm1leGY5cGxDWlpiSldUKzNDbTdNSkl4U2ZHY3AwV1RnbEdDOUN0TCs5UkVSejNhVDNwbQorRkZlaXVTaEJIY3FOTjc1VG9xamthQmhYcXI4WEpuU1BJQzBvSFAySlU1RnFkS1EyZzVqeUxOZXJmZ28xcURvbEtUbE1tc3FUbHJKYQorS20xT0FtT0dDS2ErMUtrc3RSQkVVZERRcFVwcW9FazFLbEYyZWkyZmZ0UW9ZeVZyU0ZFUlVLOWFRcDR0UmFrbWJYclRxdGJVcFhEOQorb1Z3MWQ5VVRaTFdpWE8waldubjYxWTd4Y2E1bUpXeGhpZnBYc0tyMUlXeFY2a1FQaXRjMUduWk9UY1ZxRmhScTBMeG1kcXA2cGFsYgorTDV2WXhRTDBua0E5ckduVmdxbDlGdldvaXUycVg5dXFWV3hWdHJOUC9lbTZsc2RaMnQ2VmJFOWFwMUI5eTlxUzlqV3d3UzJ1enZEKworT2RtRkRqV29JRjB0Y1orN1ZxVFdGTGpNcFM1Umk2a3JzYW9KcHQ2TTJoRkxLN2JHdWhhNkRBUHNxU2k3WE5TbVY3M05EYTF4VlNMZQorMXhMVXFsYUxiVmlXQ0Y3dkp1MjduczJwZThrNzJyQ1NxNnozWFcrQjIydmU4clpXdnVNOUxXL3htMTNMUG8ycTltVXVmU2NVMytnbQorT01DaURSdHVreXRWRUljWXNSdU80NEkxTE56NVJyVEN5dFh2Zm8vRzN3blROc09NL1M5OFMrekVEMXZZd1MwV3NXeHhHa0xNYmpYRgorRFdidmhWMTg1Q1MvR01tOWt5NktPeXdtSE0veHh6N1dNWTk3YkZibjN2akVOUjd1bFNWTTA1UXVtY2xqWG5HTWFid25HeXNZeWxPMgorc3BHL1RPVXFvMWZMYTM1dmw0a3NaN3V5ZU1SbXJxOGFrYXYrNU9JNStjNXNGbFJhZXpwZ0EvUDV6WERHTFowNWJPYzBlNW5SRC9aegorbWZzY0hXWWlRZE5LQUs2bjR3ZkF4U1RpMDl3azV6aXBxY3R1bnZxY3QxVDFMOFA1aTFHTEx0VHNkTVJCckJ2ckhOb0UxOGZFTDZkSAorQ2V4Z0Mzdll4QzYyc1krTjdHUXJlOW5NYnJhem53M3RhRXQ3MnRTdXRyV3ZqZTFzYTN2YjNPNjJ0NzhON25DTGU5emtMcmU1ejQzdQorZEt0NzNleHV0N3ZmRGU5NHkzdmU5SzYzdmU5dDdTQmtOZEg0N3JlLzlRcTZDQVA2M3dRdnVHWjJtWW5lRm9QV0JtKzR3OFZVV2lNQgorNUlJUHI3akZYMmEvWUNaOHp4ZnZ1TG5mMVZCNVFjbmpKRGQ0WVRLdWNOM3h1dVFzYjduTFh3N3ptTXQ4NWpTdnVjMXZqdlArbk90OAorNXp6dnVjOS9EdlNnQzMzb1JDKzYwWStPOUtRcmZlbE1iN3JUbnc3MXFFdDk2bFN2dXRXdmp2V3NhMzNyWE8rNjE3OE85ckNMZmV4aworTDd2Wno0NzJzY0cwdmxsRDI0clp6clcyOGJidGNsODczTjJ1T2JVZnFrUXpKRmFKUEFPOUZtNTNXMzQvbWNiTys3L3Q5ajFrc2Z6WQorTWlVTytEYVhEUENMVDlWcEtyOHlabnBRRE01MEpjbWt5VE9kTlQ1RW54OG14aEFQYXhBcHEvQ1VMeGpGVjlTOGtUOXloV3RzMHpMNAorSlZuWDQ0dWlnbDE0ODFDZjhLc0kzS2YrRXI2YmlNWFMxOC8rZ3kySkpmQnpGdy9NYzM1VTBOY1hKeEFoKzRBMUVOQzY5eGRvRVIzOAorMzRNZitzWnZGLzVPUDN5UStRS0F0OCsxNFo5LzJkSCtIM2RuaDRkL0FsczVmMU16TWNkc0NvajVTZnd3cVhWYi9NY2E2cWQ5V0JhQQorUi9KKzFxZGRESGVBVVpaeTg1YyttT2NwL25kYzVRTXFHeU1hd3JkNUFDVngvOGRZS3Jjc0ZRZzdEQWhFdTZOQUc3ZzlxM2NVM1JONAorekJKVjlqZHdzWE0vR1FpQ1J1WldOV2g3TXNoM1FtYUFob1lTSXloamExQUxiUUovb2JNK0wwaUV4dkpyeThkOExwaUF1UGRTTjdoOQorM1ZPRDNrZEhXMUFWc09PQXhFY2xUeVNFSUlRT0hWaUY3WFNGWlFnVVZGaUdqOENDWXBpR1IrZzhBeGd0MjRjOFE5Z3B2VEpiSGpaZworSWpndUZKUVZaQ2hiSDJoLzJyT0RKamdxeGllREdUaUZldmd5RktXR0FZT0JqOGd0VlBGNTY0SXBMUktKZ3ppQWdBaitpZUZuaU54WAorZlVvNExQY1hobjJZRXFNbmlmK1RNWU5IZ0tvV2VUVFlUR29pZlp6WGVBc29pdnBYSjJmNFBhSEhpazdvTVoxbmk0eUlpOGZEaWIrSQorZ2VuM2c2cG9oRTM0Z01hNGNiTzRpeEpraDhtNGQwSFlpNUxuaXExWGpNcW9qY3FnZDJBbU5YVm5kM2czanVSSVlYVDNkbkdYanVaNAoramwvempib1ZqdXZJanZCNGQvTm9VT2lZZCtxWWovWjRqKzZJUVhOWGovSW9qdUFZa0FLNWoveW9ad1Y1a0FhNWtBMlpkZzhKa1JFcAora1JOSmtSVnBrVDczWnh3bmpBU3Bqd0NKa0lQMGp2M1lrZTM0a1NBWmp3dzVrUFE0a2lTWmtpcFpraE9rTmlmcGtPV0lralE1a3paSgorTnF5WGk5dVllSXJYaG84VFp0VGxDam5FTWZuK1owN2pOM24zaEl1QzFaTktlWTJKaUQ2WnMwZ0M1aVd6bGlhditJbnY1MXZLeDN3bworV0lyVFYzdWgySXFDOXpqWk41WkwyREJnU1pXK2lJMkdCcFRUMkl3bXRwYWpxSlNHSVkyMzJKUmJ1UTFteVpab0taWlptVHQ4eVNWMworZ2dhcFdFSFJBSmpVMkphTDZZVk1LWWVwTXBlL0dKbEg2WlRJMkpkdTZaUmN1WkdRQkplUHFUQ1RtWVJHMlh5TzZRNTJVaTVRdUpuNworc0E0YW1DMlhPWWVKQ1d1a1dWdWdlWDJ5K1plaUdaU08wWnJuY3BkR1dZS3dPWnEybVY5NFNYd3pFeXltQ1VMSW80dTBoNXJ0OTVaRAordVp1dXlTMnhTSnVOZVpaM1dKbGhCbVJRQkFoQ0dWckxtUmZHQ1hGMXlUeWcyVGhrUWxaNWVKM2xXWWlwT1ozK1VLbWQvdVNEcndtZgorY2lTWTc2a3VhY21ZK0hrOWxXbUV3dW1KOEJtRFNCbDkvektncEVtSTZDa2pHY09NL01tTjNRaWNuUm1YME9CcHV2bVczR2xENGprcgorUUVtVUZ1cWZIWG9rVWprUEd0b1lEU3FkK21laUUrcU1laG1mMFptUUNvbVRIdG1TY1NXVE1XcWpIUG1TTVBtUE1ocFJHZW1qTVltUAorTjRtak0wcWpNSHFqTGtta0w1cWpJUENqTFhxaExxcWtTV3FTUVhxa1NGcVRMSG1sVnBxbElybWtGK21sWHdxbVlTcW1ZN3B1aUVpbQorWnpvZ2o0R0VhTXFtQUlJUW10bW1jVG9mYnlxaGNxcDBHU2xEMWdDbmR2cHZ1cVlsZFNVM2RPcWtmSnB1bi9WRnQxbWQ1c0ZRak9LbgoraEZwdStkT2JLVk1YVW5TTXg1QWZEQlgrYWdmcXFIMHFRUXRrQ3JNWmY4MWdxQnZubWVtQlRadGFjdUN5cDk4eUZieUFEL05KU0xpRAorcDRkS29TdUhxdTYycUpIcWxwVFlKNUFnY3ZLQnFiZnFjbHJvVU9VWkJ5bm9GUC9wSHJNcXJJOEtMMkNFckIxWVFQSEJyTTA2Ymp3SgorbHhzREpDa2txZ0QzV05aNlJvMTZsVDVncTBKQ25CUEdyZnM1U2VySmNhT0ttK0JhSCs0S0M1a2tab1IyblRUQnJpeFRvS0NFU1R3SworcjJtcWthdHlTaTFsci91SnI3bkZwSjZrb29NV3BmOEtzSHBFcndRcmFlZDZzSUFLTGV6NlNRSHJzSEFqcjZ3UXNTcEdNenpJcXAwVQorWmZ3S1I5VzZzZnpSc2Fyd3NYbldyWURKcnl1cm9oamJXU2lic3ZvaHM1TW1hQkk3c2U0NXFRaExxNUwrWXJJaVpMTTNpeDg1aTJlLworb1JNSEpMSmVzbWZvQXJWUHlXcWxkbml2TnJXMWhHcXZoazVYaTdWY1cwNWVpMHU5SnJiS05MYlM4bmlveUUxYkM3YkF0TFlJdDdYbworQkxmbUJMZFdXN1Z6MjB2cTlFMm1GcloxdTJxaWhyY2RSSHExOVZqNUNvYUZWcUlNQzJrQWRxL1U1N0tXcUdoMGhXQkp1MldHNjdRNgoreTExQU82V0VxNk83MVdqSWhiUlNCYXViRzFPVlpySDdSN2xBaExoeUdXbUxPNE1IdG1PVWhvRHFoV2FKTzdtcnUzNFlvcmxCQzFtVgorRnJyOFJtV2Y2MUs5cTd1YVJhTzVLMW0yNnhLenE3cUthN0NNKzdxdTI3bmFkVmFXQzRHbkN4WEtTMkhHKzFDWW03bkhHNzE3RlZuQworU3l1amU3bWxxMFhJSzdEVU8yVCs2THV3dmh1OTdndTdpeWE3cVZ1OTdGdTVraHRaNWp1KzJydTk0dXU4djZ1eDFPZS9CVUc4ZW1hOAorQSt5OVQ4Wmc5c3VaQ0dxWmp0dTRwZm00d1V1LzY4dThGcXpBRndhOEg3YkJqZ1pWeUFpK3ZEdW84eHZBSVZ5L0Y1eSsrRXU3ZFphSQord3ltL3NRdkRMNnhjMkl2QkxGeTdDNnpCSmZ4RUNQVjlCSVplK3J1L0NaeTk2RGZFV0htL0REeEdGWXlaMWx1cWNmYStFUHk4TVF5NgorU3N5cVhMYkNQZXRpNWZxNzRncTYySld0U01URndhdkZVZ3lQRlNobEtWeGtWN3k4aWVuQ2tQdkVFaHpCRWt6RFM0ekVCYXErWlh4cAorK1J0b3BFczFNUVl3Q0l6QVFKekVaMXpGQlBxLzhldkdpT3pFV1ViRlI0ekNoWnpHNWJ2SGtveithV1JteVpSc3c1bU14Umw4dzUxTQorc1ljTXZZcnNacUZNd2lxOHhwcDh5cHRjeWF2TXludzh5WHJjeXFrc3k3ZDd4NUQ4eUE0NnltU2N5ektjeUtVY3lTZnN5V3BNeTVaMgoreVpqc3lyR016T0JveGxZY3NyWHN5TUhNdW0yOHlLU3N5ejhjdWI5Y3c4S2N6YzFNeksrc3pIbDh6TVg4elhWY3VOaDh1SVQ4ekovYwordXRVc3ZWSE15eFRzekEzTXhPV013OG1NeCtCY3hPSWN6c1k4eTlzOHpPWnN5OURjdk92OHpydmN5K3pjZ0kwc3orUnN1Z0JkdlBpYworei9aOHp4bVNvcU5UMGFxNGExSmlJOTJRMGJtMmFxZXF0M2NiMHFrMjBxMVcwaVl0dGJSNGF4M04wUnNOQkJkTlExMTRRakNOUXpMZAorQWpSdHREbXQwenZOMHoxdTdkTS9EZFJCTGRSRFRkUkZiZFJIamRSSnJkUkx6ZFJON2RSUERkVlJMZFZUVGRWVmJkVlhqZFZmVkJreAorK0FQU25OVTViWmFhQ3NWZlBkUW5SOFRrSndsblRkWkFuU3dYSklpZHV0WkJIYmhycXBxbnVLcHgvYTljM1Jkdm5kWjQzZE8rcENTWQorRTlncUY4Yk5XZ0FBT3c9PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3ZiaV82MjUuZ2lmLmI2NCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfNjI1LmdpZi5iNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxZjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfNjI1LmdpZi5iNjQKQEAgLTAsMCArMSw5MCBAQAorUjBsR09EbGhLZ1BJQUlBQUFBQUFBUC8vL3lINUJBRUFBQUVBTEFBQUFBQXFBOGdBQUFMK2pJK3B5KzBQbzV5MDJvdXozcno3RDRiaQorU0pibWlhYnFXZ0pzNDc1TExDdDBmZHk0b2VOOS9RUHVFRUZaa1hWY0paWERYTlA1cEMwVGdHck9DcVZNaWRoQVZkcVZiTG14NzNXYworRlhmTmFiR0Z6ZmJHM1J6MGJETy8yRzFoeko3bzhjZVQ1NmRCK0diNEpjaUQxNmZuaDNWSTk3Ym1PQ0U0dHloVlVTYkhLT2xnMXhucAorNmFXRktEZmFlY3JxUWxySzJ2cUsyYmpJbVBGYWlMdUt1eHZZKzJITHExdG5pSGNMekZtV3k2bW5pdHhNZVdzNWlhWm8weFpoVGFoagorcmR6WEhhM202RW9kK2gxK0xXN01YcHg4M1A3OTYyeStqdTRPLy81b0dyOFBIVXZzMzZWam9DQnN1alRzeHA1dDBNSUIxTVpMWWIwNworQ0J0K1FsV1JIei8rWnRvNjJOTFlEK091ajdRK1psTWowSjgwa0NyMWlhU0hUNldtZUFYUEFYT1Z6TnMwaHc4ZkhBd3prZUxBVHo5RQoreFZvMnFDYTJvN0FBOVd6NWNtWElnRkFoS3UyWWIycTFyRlNyRG1VWkZlVWdyUWFMZGhXcmlGWktHS3Q2TE5UU2xvcFh0aGV2cklVQgorZDlyU3A2RkdjYm5Md0NSWWUyRUxvK1ZLK0N4RXdGOVhrb3lwZUN0Wm4wNWRUaXFsTnVwTXhueVd4WGtMMTdPVnRIejdsb01UZE8rNAorcEdzTXN6MGRLYlZjeUs3TFhzV2J5S1N3ZVRBOTVxYXRESGhvNFQ3VHFxc2RXTjF0b2FGYkV4Tk1ITWtUemltZ1IyY1NaZnBnSTlxdAorVDhhZVBiejRJUWViZUxjc1pEejU2ZWNqdjJnLzl6MzcrZlROZDYrdlBiLysvZnorKy92L0QyQ0FBZzVJWUlFR0hvaGdnZ291eUdDRAorRGo0SVlZUVNUa2hoaFJaZWlHR0dHbTdJWVljZWZnaGlpQ0tPU0dLSkpwNklZb29xcnNqaWR5ckFoOXlMK0sybm5nLzMxV2dqanR6TgorbUtPTzhsRkh4aGxKeFJqa2tFWTJ0bG9XeTUxazJteEFWb2FRUWtJbVJpUnVJeUVtRDVaSW9tZVZZTUxJWmhNa1M2cldtNHZKZWNabAorY1dCc1JvbVV6K1ZseW1nNGJXZmxZbkdXbzVGT0daMDJGcGhQWW1ia21IUW1SeFJTZ3pKWHBudGwvVWxtY0ljYTVJdHZpbEpKeDJPUworVGtyWm81azZDZ2VtZkJERktKUEY3WlJUSVpzTWd4VWlwNHFLS0ZONVVyb3BTS0Q1NHhhc1c5cDZhNjVWQmlZbWIvZGMycVp1d01hSAorbGFYdlpFYitGYktQQ0twa202OEt1dEJvVHNoWldwTjZNUnF0bTZIKzhabVR1bGFicXBsaFhpa3VOdEJoZ3Fxbk02U0xhN2pFMm5aZAorckd6SzVDZVVxTXhKcTZsMllhdnZUbjZ5R1ZHN3pHbjc3YVpndk92dXJ1dkdleG5DbmRYTHE1WUNDMlZzbWcyTFV6R2NUU204cjdmZworMHBVS3hNZ3dkT2RZL080SmFNa0ZmL3BxeWl2L0phdTlDWS9hc3FhdE9sd256dU02SnZITU9zUHNaYVFaLzN6elYwTmZkblM0SEwzYworS3NCWnBuSWswMU5DSGJYUDFvNE1zU2pneUF6cDB4c2RkekhSSHFPejIyODlkODN3bWI0NmUvYWliYXVaTmhYR01XdXozS2pORzZWegorK2Zvb0hZL3A4UTBlallETDZQZU85aFgrNCtEVnNScjREakJ5UE1MakU1ditJTG5VSjFRZTl0K0NiODU1ajRkL2pyblZmU3VPUXVpaQorTis1NTU1cXJiampyclR0K1k0dXl6MDU3N2JiZmpudnV1dS9PZSsrKy93NTg4TUlQVDN6eHhoK1BmUExLTDgrODdyV0dZTHFJMFRkUAorZmZXd00yNDlvWEtEZ0MveTAyY1Bmdmdra1BKOTd0MTM3MDc1SEtvdmZ2dnVRMUtYaDl6S0o2VjM3QTdQL3Z2NjczOU9hMEJGbm9SSworUUc5KzJQbEpNTERudS96eGI0RU14SlBKL0RMQS9zWHZGMEVvZ3NnRzVoUURrdXBlQ095ZEFoa0l3dmNkQVlKZXFZZGZ5bU9NQ3ZMSworU3dlN3lLcWdrTFU0ZFpCM0FhUmJDRzhZd2hyT0VHYXpVYUhKTnVLYm9xalFhUkJNU0RycUJrT3U0Vzl1VEFRYkRwOElSU1YyakZ0bQorMlk3K3Rod0lEeXppNjRWSUJLSU12UWlwKy9Hd2l0NVRrdzJqaU1ic0djVlJQZnloQlRkR3E3Z1k2b3ZvRzFVTDZ4aW1KU3d0VkxqVAorWVJyL21NWlpGY3RKUlpTZ0xzd2lSNzNnTVdjc3F3MEp4MGE4RHdKeWtzQWo0Q0NqUnI3VDJhU0NpUVRpSWlNR3N2ZzhVb3JCa3lRbAorVDdrN1MzYU5YUUpFbTJsV3hjbDliUkdGbldGTTJUQUl5dU9aRXBVcE9xTkhMaGdNWDlhaFhxcTAyeFpUUXJDZFJReVdkcG9scStZawordVRkcU1vRzhCT0VuWlNTc0hZTFJSbXVrRkFuRkdLT0EyYXlWc0JqaE5rVWdUVmNhYjVmVk5ORTFGNWZOazMzd25ZMnkyaU9CV2JRMgorOHJGajlheExOQm1aeTNXMmM0SDB2RndYY1RtVWVYYXhtQm1VbGYzK0xrbVNkSnBybjVrYjUwQXZXcnVDVXU2ZzNnS05RcnRabW5zKworZEpVVS9XRS82YmpSZ0FJVW95eDFKMGU1OTlJMGVOUStJTlhWUGFFSDBaVGVBWnpFMlFJN1d3clU3SHcwS3pOZFQwMHJPa3Fja2pTbQorOWp5blV2TUp5YUJLVlg1TURTSk45akhVaitVenFUQ2RHdFdjT0VDSnlBbWY4Q3FTYldEVHhMU2lWYTFNWkExYjUrYld0NUltWkhJMQorRGoyWVpkZGdpU3l2ZWwxclhjM3cxN2JTTmJDaUlXeGhEVXNHd3lvV2JOZFlyR0lUTzFqQ0pqYXRSWElzWXMvZ1Y3YmV0YkpraFp0TQorbmRxQ2hrYVBKNmZZVGRrMmc5cHlRVW1WckpWSlFEUzZRbmFrOXBCWDFSeFh4eWZhMm80TG1vRzdMVzZuVmRKamdmYTNpbXpjL0V6KworSzl1YktOZGl1V3l0U0p6N1hLYkNsaUt6eGFwdUUrZkozazV3SFZPb1gzQUI0dHZJQVlLbnhFVXA0WXA3WGo1T2Q2TEx0UzV0bVl0UQorOExvMnVxNUZibnM1K043WGVpNjhUODJ1ZmwzSjIvVHl0NzhCeG02QlM1ZmI5SEowdlhJNTdYMmpjVXY1MHBlNzg0MnVmZk9MWC9mKwordDNVRFBtQVM1OVhkOFg2M01SMzJzRDl0TzF6eGZ0aTR5MHBoY2pFTVlkVitkc0lTcG5COVhmemdWdVM0eGdiZXJrNzlTK1BkcGhpZAorQ1Jid2tFTUwzS3BLbU1INk9DNk9ZYXhqS0d0Vk5kRGxNWW4xZTJFTlozakxRZGJ1RnhlMzRnckw2OGhkUmErUnlhdmlRbzAyZzUxRgora3BONzRXQXBWMHJHRnVteTBzUXMzeXh6T2NwYXRqT1kvZVgrWmJvbHMwNndDWFNicnd6V1B5dDV3OWhkc0hRZkhWTTBMNVBPTWZQegorbUMwOVpqM0hXTTZYWlBUb0ZvM25UN052MEY3ZTNLaEorV05IYTVyUGUwNG9wVWtONEZEZitjWndmbkdmV1kzcEg1OWFtMlVHZGE1MQorUFo1ZGo3Z2xiKzRYcDVkNjZ5bDNWTmF4L25Wekh4M25aTTladUNpdXRyVjd2TjlnWjN0MXhXN3hqcWN0N1lvSzJkbFVabmFzViszcQorWTJjcXdzTDJ0WTJ2TGVyckRmdTY4ZWEydDQwZGJtUzMybkl6ZnJlVmtZYmxKK2Q3M2Q4R09MeEx6ZUZ0SHp6aEMxZTBxZ1crNzA1SAorZkpybEp2ZXlMYjVzZElONzRnU25Oc00vRHZKNk4xemsySDVkdDFWbGE0NXY4dFdvZmpiRyswMWhqVXQ4MHdPL2RNZ1JYdkwrbk9zYworQ0hNMVFzL2Z3OWZoa0V0TW1yQmhvdk1XMk1uK1ZlbDFaYnBjbmY1MHI3S042Q01wT2o2RGpvU2ZaLzNvMWRHNkVyeitkYTVQZGV4aworTDd2Wno0NzJ0S3Q5N1d4dnU5dmZEdmU0eTMzdWRLKzczZStPOTd6cmZlOTg3N3ZmL3c3NHdBdCs4SVF2dk9FUGovakVLMzd4akcrOAorNHg4UCtjaExmdktVcjd6bEw0LzV6R3QrODV6dnZPZng3c05yWGZ6enBDODlneVFCNnpxYmZ2V3NMOUJoN3hneU5iZCs5clQzenh3cgorM2FseTFuNzN2QWNkTXc3cnh0NExmL2lFNCtMWDJySkg0aXQvK2JMTnZTSTdKWGJtUzMvNjFLKys5YStQL2V4cmYvdmM3NzczdncvKworOEl0Ly9PUXZ2L25Qai83MHEzLzk3RysvKzk4UC8vait5My8rOUsrLy9lK1AvL3pyZi8vODc3Ly8vdytBQVNpQUEwaUFCV2lBQjRpQQorQ2FpQUM4aUFEZWlBRHdpQnRvYzRuK1k2RkNodkZZZzZxYU9CRy9nNkhOaUJxM09CRTdndWExSTFGQ2QxSktoc1hrVmE0amFDUFJSRAorWG9PQ0tVZzFNTWVDdFZRWjBSZFZaUVZELytJMWR6SW1Xc01UMEFLRFVtZUNSM0kzSEhPRUxYZFNhaE1vUC9nMG4vR0NVZEtFVHZnbgorNU1NbkozTVlYNFZGUlFnb1VDaElib01teWJkU0lIT0ZZcWhTZlFGb0psV0RRR09FWWpNTHMyQTViN2lDNmtRemFDSjZheWhMWDZWTgorSk9OQWdIVlVkU2lIdTJLRlBvYUhENVF5a3JaRHNZRXEzVlFTVXpRNXF6VXlNbmlET1RpR05vZUZHUEU4L0RaalFqaitYemhJaVhmbQoraWJ5bWVnZUZMQnFraVpGWU00WG9NWHFqaXFOSGlza1Npa3FJS0lYMmlEQTNLOW1TSjlRaWlabUFpcTNZaHJJSWpDb1lqT3JGaWxRbworZEdhbWliem9NbHhvVmlvekJyaElnOHlvakRPWWpNNmhpOVhvWFpjb2hmL3doVmFCV1lpNExaWFFoN1dZaE5zaWlsOUdpNmVJZTRsWQorS3NQNFVtNnlWKzA0aktWSVY3VTRpbFZJVktrWUt6WEdVQVpIUzNRb0diRW5pUnYwai90WVdwbW9qcVQxaCs1eVRBTlphWTVXaGM4ZworUThRRUovQUlqbHJUaSthSU1rbjBNN2xnS0F1cFBRVFRqV2lJZXhmcERCWmhocCs0UFEvWmoyVFlVTnBZaDgxQ2tSc0plektZU1V0NAoraGk2cGlEQkprdU9Za2ppNWtzNW5TVUE0Slp6K3VJMUtNcFBIeUJJamVUVnFCcEt2Y1lOUm1DVFJDSkJObVl0UGFaVjIySXA1Y0h2OAoreHBWRVdKVlFpWlJNS1pha1laUlMrSE5reVlSYXFKWXRhSVJTNlkwekdJL3pSbWxFSm9JS0ZvSWVhSUY2bVlFZzZKY2YrSmVObHBkLworWTBxRkdUc1kySmVDR1ppS0NaaU51WmVPK1ppTUNabm5aWmlrZzJDV2FWQ1lpV1NhV1Y2STZYQjhtWmlSS1ptaUdZR2xhWnFuaVpxcAorcVpxcnlacXQyV3VET1psNHVaaWtLWnV4K1ptekdacTVXWnUybVptYzJadWVlWm0rYVpmQzJWK3d5WnVwWnB5MGVadTR1WnpIdVpsRQorT1lVSzg1VWxhSkE2dUpUU3VUWFU2SXZUZUpid3BVdzlDRGx1S1RaQVdaM044VFppV1pkdWxaN1VhWTlzNlozK05xaWREam1ObUZpUgorbnRBdEtSaUk5cWtuaCtHRmdvaDg0MmlUcXZDUjdRbVdEbW1JNzltVDZoSktDZ3BWQmtwbTVSbWV3UVdPRFJxU1A1bVRNV21oRkxvdworWHlPUHpkQkNDL1ZmQlZtSkJxT1M1QmxmSVBvbUplcU9HdnFkNDBtWDcxZ0w1M2ttOFJRc2NkT2k2c2lSQ0hxaU9NcU5ER291d0NTaQorVFVLQ1NYbVVZTFNmUnptSFlZbWVEM21LOThtZUkrcUxLZ3FoVWJxV0JFcUlEcHFoVU9xUzYzbU9YZnFrUEpwNlNncGdGK1JnVG5OdgorNlVpbDhNaU9LY3ByOUFoSHpOZ3NVanBpU1pNUlhHcWlkenFDVjdjMkVScWtWTHFpY3JvWGRFb3piNXFRWk5TZWlraW1pU2lST0VHaworWU1obStGaWZQVG81djdkUEdOa3lXVHIrcHpKNm9RNmFoeTc2cDE2S3FTeTZvWUxxcDZEcXBUQjZxcVU0b2VlSWtCanpoRHY1aU5NWgorbjFOYXBVbEtxL0RwbE9UNFAxKzZxVHdxWGJFb3FwN2xxYWthbzVxS3F6NjZrbHdxVEZRa1dKQXpWMFozVjMxS29zVDVtc21wbTd1cAorbk1INU9jQ3ByZGFLcmRuNm05eXFVNVc1cmVLNm1lVUttczA1bXRlcXJ1d2FydDdhcnU0NnJuY1pyOTlxci9mYXJlbGFyL21xcisvSworblB2cXIvL3FtZ05Mc0FWcnNBZUxzQWw3TzhhbnNOUDNVOVpqS2FIYXNJRDBzTnhUc2MzRGJpODZzZnh6YVB6UnNaT1VzZTYyc1I5eQorSG84QkkrUlVwMUtoaGxNVnNoYzdzZ01TRzhOMHBVR1ppOEhFVDJLUllVeEdTUzM3c2g2MGpNdUNaZ0QrU3FnbjZVK3h0TExUSnFJUworNWJJbkVrRDcrTEU5cXlBU1FTaEJDQlgzZzBqNjZLSEZaYlJEUzNDa2hrZlF0TFF1OVVxR0tySlFteUQrczFPMU1wY2lSclluOW9wbQoreGtyUE1rTzBWRVZxZTdRTmRGbG0yeUlGcG94dXNhcDFlek84bFRXZEZKVnUyNVUzcWpLcGVEQmhXeUkxQkt4NkN5SkpKV2x0eWFoVworZENyUmdvd2Y5a0tIMjZzM3FYclNBa1YrQkxtMDg2RXZLYVlOaXJJWnB5cWxLMkxzeGJtaWlqNXhHN3FqS3p3aDlveEE4azhlQ210ZgorbTEwK3BURlh5cmdrRXJ5MEd5RGQ1UTJ5a2J0bXRFMUR0Rk4yWVVHWTJyYW55anpEcTNlUGkwNVBPM1UrSUV6RjZyc1Y4YnlnMjVtVAorQnBKUyswYXJ5cW5UZTMzbUMxUCtXVVZ2K2lZRTZvdFVNenNzNHV0TnB1dTZ5R2xONmF1eFdXdFVNYkZHV1pXOFM2R3phMWhpWEhKZwordzRsRDFKdDM4RXRCTk9XL05NZE4reXNxQll3d0ZEd1hCMXljeENzZ0RHeFYvZHUrN3NzZEhBeWhGdHd1SkZ5L0lveTRHdXl4RWp3UQorN090cE14ZkNMRXduSnZ3eU5HeFRENnFqS2t3akx2eSsrUWpCUFZ5MlVtVEQwelRFVFlYQ1dxckQ5TUhETWV4eHVNYkVBZHhHQVp3Sgorc05vQ1FPR0gyTXRaamhWWlNXZFpyN2QwVzl4MDBjcXNlQVYyWjdWWHoycFpZTngwWFJ4WFNhZkdYUnpHVXdqSGJ3VlpjeHpIc2NmRworMzloRVdXekhhbFhIMi9zYVlzV3J4WXFTTW54eEE2eHlob1J2aVR4cHlNcWtWL1p5OStpUEVNZit2K3EyY3FhR3c4QlN4RXNHYVp5UgoraldzV1ptZG15TTkyeExPR3lEOWN5ZmRXYzdpQk41RHNiNjc4YjZaTXlhV1ZjcWpjWTZYY2JLZk15U0FHaXFPOGlVRk1hSm5jYXhoOAorcnB1Y2JvdWN5b3hNWFRrc3liUDJ5Z1puWXpJWFJyWHN4TGZzeTNXbXk1QTh3R0g2V2JoOGFkbU1hTmVzdXNDTVMrQU13N1JjYXdVSAord2dtNW90enNjczhzeSttTXpOVzhjU2ptemVObXpya2NhVXI0eVlGR3poaDB6NzM4ejRjODBQYUxjdks4eW8wOG51NjhvODRjeS9xTQorMEFkdHlheThyY1JjWHNZOHlXNTZidUtzcHRQVHp3a1gwQzZYengwM3p5MU16Y2Njbmd4ZGNmRGNiTkU4eXlhdHppU2RiU0ZkemdYOQoreXhxZGFSeGRaSXBtMGIvK2lhWStQY2dlSnMyVUVXM0tqS2VRR01tUERNMmNITkhKYk12MUROS0FiTXBZTE5LSjJrSDFJOVc1VE5Xaworbk5Xd1RISjlNOVNLbk5ETDdNZ3E3WXBldmRUYS9OSnVVTlJQalhOdmJXUUt0M053UGRjOG5TTmhqUmR0VGM5d3F0UU9qZForUGNsTgoramM0VHJkQnkvZFYwYmRjanA2MlNaTllFZHRkcjNSRjZqZEtIMnM2VkxZcU4vY3VDRGRPRVRkWVgyRzZmN2RtR2ZkZzNGOWM3Z3RleAorRmRPWHZOQ1dyVjZzRFpGM0tOR3FiTlQ2Rk5xS0RXeWlYZHFrWGRlTC9kaWF6ZFluRGRYc2ZObXVYV1ZxN2R1UkRkem5QTnFKcmR2TQordmR1OFhkRzREV2FuM2J5cFRkRmxUZHptTm00dWZkelRiTjJGYmR2RkxOM092ZHprSGQ3UkY5M2JKZjNiMzkzWktaM2RTWTNaMkF6WgorM3MzWkFoemQ1NTFtTnYzT3p3M1U1bEhHcGZQZmwzTkdBMzUxUm1mZ2o2WEhkN3hZVUtkWkNSNTFyR0UydlZKMUUwNGVBVTQ1Rmw3RgorMWh0TUd2NUxITjdoWFozRUlTN2lJMDdpSlc3aUo0N2lLYTdpSzg3aUxlN2lMdzdqTVM3ak0wN2pOVzdqTjQ3ak9hN2pPODdqUGU3agorUHc3a1FWNjhFK0VRaHFyQVFzNmFabWlyell6a1FDNGFBbW1JeWdIbFRTN2tQMEczZ1JKOFZCN2tBR0NSYlFCOHVxZmxUdTZDaTRqbAorZWhqbVBzN2xhZjU4WEI3RmF1NkRSNTZhQlFBQU93PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfaHN5bmMuZ2lmLmI2NCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92YmlfaHN5bmMuZ2lmLmI2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFmYWJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3ZiaV9oc3luYy5naWYuYjY0CkBAIC0wLDAgKzEsNDMgQEAKK1IwbEdPRGxoQndISkFPY0FBQUFBQUFFQkFRSUNBZ01EQXdRRUJBVUZCUVlHQmdjSEJ3Z0lDQWtKQ1FvS0Nnc0xDd3dNREEwTkRRNE8KK0RnOFBEeEFRRUJFUkVSSVNFaE1URXhRVUZCVVZGUllXRmhjWEZ4Z1lHQmtaR1JvYUdoc2JHeHdjSEIwZEhSNGVIaDhmSHlBZ0lDRWgKK0lTSWlJaU1qSXlRa0pDVWxKU1ltSmljbkp5Z29LQ2twS1NvcUtpc3JLeXdzTEMwdExTNHVMaTh2THpBd01ERXhNVEl5TWpNek16UTAKK05EVTFOVFkyTmpjM056ZzRPRGs1T1RvNk9qczdPenc4UEQwOVBUNCtQajgvUDBCQVFFRkJRVUpDUWtORFEwUkVSRVZGUlVaR1JrZEgKK1IwaElTRWxKU1VwS1NrdExTMHhNVEUxTlRVNU9UazlQVDFCUVVGRlJVVkpTVWxOVFUxUlVWRlZWVlZaV1ZsZFhWMWhZV0ZsWldWcGEKK1dsdGJXMXhjWEYxZFhWNWVYbDlmWDJCZ1lHRmhZV0ppWW1OalkyUmtaR1ZsWldabVptZG5aMmhvYUdscGFXcHFhbXRyYTJ4c2JHMXQKK2JXNXVibTl2YjNCd2NIRnhjWEp5Y25OemMzUjBkSFYxZFhaMmRuZDNkM2g0ZUhsNWVYcDZlbnQ3ZTN4OGZIMTlmWDUrZm45L2Y0Q0EKK2dJR0JnWUtDZ29PRGc0U0VoSVdGaFlhR2hvZUhoNGlJaUltSmlZcUtpb3VMaTR5TWpJMk5qWTZPam8rUGo1Q1FrSkdSa1pLU2twT1QKK2s1U1VsSldWbFphV2xwZVhsNWlZbUptWm1acWFtcHVibTV5Y25KMmRuWjZlbnArZm42Q2dvS0dob2FLaW9xT2pvNlNrcEtXbHBhYW0KK3BxZW5wNmlvcUttcHFhcXFxcXVycTZ5c3JLMnRyYTZ1cnErdnI3Q3dzTEd4c2JLeXNyT3pzN1MwdExXMXRiYTJ0cmUzdDdpNHVMbTUKK3VicTZ1cnU3dTd5OHZMMjl2YjYrdnIrL3Y4REF3TUhCd2NMQ3dzUER3OFRFeE1YRnhjYkd4c2ZIeDhqSXlNbkp5Y3JLeXN2THk4ek0KK3pNM056YzdPenMvUHo5RFEwTkhSMGRMUzB0UFQwOVRVMU5YVjFkYlcxdGZYMTlqWTJObloyZHJhMnR2YjI5emMzTjNkM2Q3ZTN0L2YKKzMrRGc0T0hoNGVMaTR1UGo0K1RrNU9YbDVlYm01dWZuNStqbzZPbnA2ZXJxNnV2cjYrenM3TzN0N2U3dTd1L3Y3L0R3OFBIeDhmTHkKKzh2UHo4L1QwOVBYMTlmYjI5dmYzOS9qNCtQbjUrZnI2K3Z2NysvejgvUDM5L2Y3Ky92Ly8veXdBQUFBQUJ3SEpBQUFJL2dEL0NSeEkKK3NLREJnd2dUS2x6SXNLSERoeEFqU3B4SXNhTEZpeGd6YXR6SXNhUEhqeUJEaWh4SnNxVEpreWhUcWx6SnNxWExsekJqeXB4SnM2Yk4KK216aHo2dHpKczZmUG4wQ0RDaDFLdEtqUm8waVRLbDNLdEtuVHAxQ2pTcDFLdGFyVnF5UUJZTjFhVlN2WHIxQzlnaDJyVk94Q3NWNEIKK21FMmIwR3hEdDJUanRuV285bDlkdTJycmFyMmJsK0JhdlFMM0FwWkxlQzVkdTNqNzdnMk1GL0ZBdEl2MUFvWmIrR2ZleTVnemE5N00KK3VhL0J5SjRYSThiOCtQSGwwWmtyRTZYc3VDRHIxeEQ1aXA3ZDJtOXB2NklacXhZSyt6UEMzZy9UMG1hYkdMZGs0WUVIN3dZSzNQWkIKK3lxeVhTdy8rKzNsMTM5T3pTNFIrSGJ0cjdlQ3AvbnYvYnAxOCtQTUt1WmNmajc3OTJmWG00N3Vmei81MmZkMzA4enUvWDN1L2Z2M04KKytTZmdmL01GYUo5OEJMcG5JSDRJSm9qZWd2MGQ2R0I3RUVJNG9YWVZkbmZoZ3hvT3lPQ0c0V1hJSDRqVGlkZ2dpU1YyS09HSEtHYTMKK29JVXRxdmFpaWpFdU55TjhOVXAzNDRnNUVxWWVmOUgxS05lUEp3WXBKRmxFZWhqaGtUN2l1Q0tMVE1abDRvbFJnaldsa2xWK2RlV1QKK1dXcEo0NUpnZHJuVmxsQ0tPZWFYTUpyWkZacGZxbWtWbVdHNlNSV2NSc29aRlpsMTJoa1dtenhlbUNkWGVBcjU1NWxPZ2pub2Y0ZGUKK3RTT1ZHMEtXYUZsM0dWcG9uSDUyWnVtbG1HYXE2YWFZMHBqbWhKcHBtUnFRYlRhS202Z2V3Z25pbzJ1U091bXEvanBPK3FtRHJFNUYKK3A2QXRTWlplU3JmMldPdEVvWkVtbTJDL0FzdG5uNkNhcEt0amJDbFdaa2k5NWxoc2JMY1J0eG1sSGtWYjQ3VEJXY3VZY0d2eGVpeWoKK2ZwN2tHYk9KRVpzY1N0ckd5SzFUN2JiNGJsUHhvamd2VTRIaXVsdSt2dG80THBjazNydlVvbGpDdXErbnBacDZjS0d6MHVvdnd3bVgKK3UzQ1JFU2M3c1pJTkp5aHdXYkpXN1BERlhHWk00TVpJMVdzdnlDRjdyREhLWllxTUtNdVN2bXF3UzV5T3lwSEpBY1AwSzhrNHo1eHIKK1JUei9DN0RQTE8yY3JkRFBFcjJTMFIzMXJERE5RQi9kTWJJU1EwMVIwRk9UKy9UUFYwdnRxdFpWYzIxczB3akxMT05GSkc4WE5ka1EKK3k1ejJVTnkrVFczWGJOOEhvOXhCeGEzei90bzNsejBpM25sakJQaGJmRytVWk1vcUc1ZGIyK0tKOU83Z0RESGQ5OWRVc3Rwc2NzZ1IKK3g2Q3pxQzBPMHVONzB6MDV4VmxIZE5wd2d2VUhHV3JGZWY1UnBwR0hQamF3TmRkdWUzbkI1bll1ZnNLbXUvdnJoTC8za3VScXExVHIKKzZwZC9HKzZIeW1HTGR2QzdEbCs0NmNZRDdheXdvU2xlWEdPdGo1Um5uWkFMUDN2eDdCYjJKL2l5azYrK3N1YlRaYW56MlpKMnRlMlIKK3N0OCs5TmFGSHgveDFKZmY1R0Z6MFo5LytEYzNjOUVuU0s0cnlmTEcxejg5R2FZNkFqd1FBUnZuUUxmQnIyNFhwRnJpekdTayt0bHYKK2FPSmJYd1VMeGozL2dUQjZEQndoQ0Qyb1FMQnRrSVI2Nm1BRVZUZTlBcXFRaEN6TWlndk5oc0licm5DRy9tNlpJQUI5K01QcXdmQ0IKK0lyeWhESTE0UWlRMmtJaVV5cUgzZHFoQkh0b0pmU1pzNGd1MTZDWXNHcENLWUR5aW5MejRRUzVXOFl3Y2pGMFdreGJDSnhLUmpDME0KK294bmxtQ1U0NnRBMTlCUGlDTzA0eFpqTThJQnEvR0w2M2hqSU1sb05pdGlTNHV2K2FNVXhSazUvaWhRWEloTUpTVWFpVVV6Z3E2Uk0KK0xFbWhSNXFMazJMc29pZVZCY281WW5LVUNpd2xHMk9JeXF5b01vTnBQSXNtL1RqSlJNS3lhNjk4SllaaUI3a0VMcTJXNk92bExUOEgKK1RGNjJNSmZNK1IzK2xubklBQjV6azh6QkhPWmtzNy9CcUV1WHdYd21MUzFEemVzdERubU51ZDVNc3FsRFpQS0dXTWt6VCs5Q0JjMzMKKzVQR2Q4SXluUE9mSndraWxMcDM3L2duaU44ZFp5RGdPY2llbkNhZHVkbmM2YW5hdm5UMzBwL1NLb2t2SDlmT08vK1JtcXhJSzBZVWkKK0Vvc0JOVnoydG5uUlI5S3pVeHlGWWpBenFwSGVoWlNRYmR4WUVCRXFVaGNWTTBXVGJHaE5aQm9yKzd4Tmo4U01hVDdUSmMxVGdjdWcKK0JmMkxOWm5sS09EcDFLWUNiUjY0dWpjWjBPQnhlNUZSM2pBZnFzU2ROaXVqdWNNblBubDN1YXhpcmFOSTNlcDNocm84MTYxdU5MYkIKK0cwMGZOazNhYkcrYUFpWHFjS3FsR0c4T3k2aGdMYW5nK0huVWpFUnlpQkZWNFZwWml0S2E1cldFZ0tKamxkZ3BLczVkOUtPUWpleW0KK1hrclNNZG56cFlhdHBXWTN5MWw2TlhHQjNSbHNaOWVEenA3eWRLbW5XMWRBbFRuYVE5NHpydUVrUzJ0VW5mcmExaUlVZFJ2bEh1ZXUKK2lTN04yZGFpYzFWbmNFRXozTi82TWJWeU5VMVRWMHRVZEwzVnVGNmFLblFoSmRycFd2ZTYyTTJ1ZHJmTDNlNTY5N3ZnRGE5NHgwdmUKKzhsSWtJQUE3CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYV9hcGkudG1wbApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEudG1wbApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhX2FwaS50bXBsCmluZGV4IDg4ZjJjYzYuLjRlOGU4OTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYV9hcGkudG1wbApAQCAtOCw3ICs4LDggQEAKIDwhRU5USVRZIGllICAgICAgICAgICAgICAgICAgICAgImkuJm5ic3A7ZS4iPgogPCFFTlRJVFkgZmQgICAgICAgICAgICAgICAgICAgICAiRmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IDxsaW5rIGxpbmtlbmQ9J2Z1bmMtb3Blbic+PGZ1bmN0aW9uPm9wZW4oKTwvZnVuY3Rpb24+PC9saW5rPi4iPgogPCFFTlRJVFkgaTJjICAgICAgICAgICAgICAgICAgICAiSTxzdXBlcnNjcmlwdD4yPC9zdXBlcnNjcmlwdD5DIj4KLTwhRU5USVRZIHJldHVybi12YWx1ZQkJIjx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPjxwYXJhPk9uIHN1Y2Nlc3MgPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgb24gZXJyb3IgPHJldHVybnZhbHVlPi0xPC9yZXR1cm52YWx1ZT4gYW5kIHRoZSA8dmFybmFtZT5lcnJubzwvdmFybmFtZT4gdmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHk6PC9wYXJhPiI+Cis8IUVOVElUWSByZXR1cm4tdmFsdWUJCSI8dGl0bGU+UmV0dXJuIFZhbHVlPC90aXRsZT48cGFyYT5PbiBzdWNjZXNzIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gaXMgcmV0dXJuZWQsIG9uIGVycm9yIDxyZXR1cm52YWx1ZT4tMTwvcmV0dXJudmFsdWU+IGFuZCB0aGUgPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcHByb3ByaWF0ZWx5LiBUaGUgZ2VuZXJpYyBlcnJvciBjb2RlcyBhcmUgZGVzY3JpYmVkIGF0IHRoZSA8bGluayBsaW5rZW5kPSdnZW4tZXJyb3JzJz5HZW5lcmljIEVycm9yIENvZGVzPC9saW5rPiBjaGFwdGVyLjwvcGFyYT4iPgorPCFFTlRJVFkgcmV0dXJuLXZhbHVlLWR2YgkiPHBhcmE+UkVUVVJOIFZBTFVFPC9wYXJhPjxwYXJhPk9uIHN1Y2Nlc3MgPHJldHVybnZhbHVlPjA8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgb24gZXJyb3IgPHJldHVybnZhbHVlPi0xPC9yZXR1cm52YWx1ZT4gYW5kIHRoZSA8dmFybmFtZT5lcnJubzwvdmFybmFtZT4gdmFyaWFibGUgaXMgc2V0IGFwcHJvcHJpYXRlbHkuIFRoZSBnZW5lcmljIGVycm9yIGNvZGVzIGFyZSBkZXNjcmliZWQgYXQgdGhlIDxsaW5rIGxpbmtlbmQ9J2dlbi1lcnJvcnMnPkdlbmVyaWMgRXJyb3IgQ29kZXM8L2xpbms+IGNoYXB0ZXIuPC9wYXJhPiI+CiA8IUVOVElUWSBtYW52b2wgICAgICAgICAgICAgICAgICI8bWFudm9sbnVtPjI8L21hbnZvbG51bT4iPgogCiA8IS0tIFRhYmxlIHRlbXBsYXRlczogc3RydWN0cywgc3RydWN0cyB3L3VuaW9uLCBkZWZpbmVzLiAtLT4KQEAgLTExMCw2ICsxMTEsMTEgQEAKICZzdWItbWVkaWEtY29udHJvbGxlcjsKIDwvcGFydD4KIAorPGNoYXB0ZXIgaWQ9Imdlbl9lcnJvcnMiPgorJnN1Yi1nZW4tZXJyb3JzOworPC9jaGFwdGVyPgorCisKICZzdWItZmRsLWFwcGVuZGl4OwogCiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JheWVyLnBkZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvYmF5ZXIucGRmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVlNjBlLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvYmF5ZXIucGRmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9iYXllci5wbmcgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JheWVyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIxNWZiMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2JheWVyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Nyb3AuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjllN2Q4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY3JvcC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1ldmVudC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Rldi1ldmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNWE5OGYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9kZXYtZXZlbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotICA8dGl0bGU+RXZlbnQgSW50ZXJmYWNlPC90aXRsZT4KLQotICA8cGFyYT5UaGUgVjRMMiBldmVudCBpbnRlcmZhY2UgcHJvdmlkZXMgbWVhbnMgZm9yIHVzZXIgdG8gZ2V0Ci0gIGltbWVkaWF0ZWx5IG5vdGlmaWVkIG9uIGNlcnRhaW4gY29uZGl0aW9ucyB0YWtpbmcgcGxhY2Ugb24gYSBkZXZpY2UuCi0gIFRoaXMgbWlnaHQgaW5jbHVkZSBzdGFydCBvZiBmcmFtZSBvciBsb3NzIG9mIHNpZ25hbCBldmVudHMsIGZvcgotICBleGFtcGxlLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+VG8gcmVjZWl2ZSBldmVudHMsIHRoZSBldmVudHMgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiBmaXJzdCBtdXN0Ci0gIGJlIHN1YnNjcmliZWQgdXNpbmcgdGhlICZWSURJT0MtU1VCU0NSSUJFLUVWRU5UOyBpb2N0bC4gT25jZSBhbiBldmVudCBpcwotICBzdWJzY3JpYmVkLCB0aGUgZXZlbnRzIG9mIHN1YnNjcmliZWQgdHlwZXMgYXJlIGRlcXVldWVhYmxlIHVzaW5nIHRoZQotICAmVklESU9DLURRRVZFTlQ7IGlvY3RsLiBFdmVudHMgbWF5IGJlIHVuc3Vic2NyaWJlZCB1c2luZwotICBWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQgaW9jdGwuIFRoZSBzcGVjaWFsIGV2ZW50IHR5cGUgVjRMMl9FVkVOVF9BTEwgbWF5Ci0gIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgYWxsIHRoZSBldmVudHMgdGhlIGRyaXZlciBzdXBwb3J0cy48L3BhcmE+Ci0KLSAgPHBhcmE+VGhlIGV2ZW50IHN1YnNjcmlwdGlvbnMgYW5kIGV2ZW50IHF1ZXVlcyBhcmUgc3BlY2lmaWMgdG8gZmlsZQotICBoYW5kbGVzLiBTdWJzY3JpYmluZyBhbiBldmVudCBvbiBvbmUgZmlsZSBoYW5kbGUgZG9lcyBub3QgYWZmZWN0Ci0gIG90aGVyIGZpbGUgaGFuZGxlcy4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPlRoZSBpbmZvcm1hdGlvbiBvbiBkZXF1ZXVlYWJsZSBldmVudHMgaXMgb2J0YWluZWQgYnkgdXNpbmcgc2VsZWN0IG9yCi0gIHBvbGwgc3lzdGVtIGNhbGxzIG9uIHZpZGVvIGRldmljZXMuIFRoZSBWNEwyIGV2ZW50cyB1c2UgUE9MTFBSSSBldmVudHMgb24KLSAgcG9sbCBzeXN0ZW0gY2FsbCBhbmQgZXhjZXB0aW9ucyBvbiBzZWxlY3Qgc3lzdGVtIGNhbGwuICA8L3BhcmE+Ci0KLSAgPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLSAgLS0+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX2J0LmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmllbGRzZXFfYnQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGU4NTY5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZmllbGRzZXFfYnQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9maWVsZHNlcV90Yi5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE4NDkyZi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2ZpZWxkc2VxX3RiLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1pb2N0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2Z1bmMtaW9jdGwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjBmZDM3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvZnVuYy1pb2N0bC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotPHJlZmVudHJ5IGlkPSJmdW5jLWlvY3RsIj4KLSAgPHJlZm1ldGE+Ci0gICAgPHJlZmVudHJ5dGl0bGU+VjRMMiBpb2N0bCgpPC9yZWZlbnRyeXRpdGxlPgotICAgICZtYW52b2w7Ci0gIDwvcmVmbWV0YT4KLQotICA8cmVmbmFtZWRpdj4KLSAgICA8cmVmbmFtZT52NGwyLWlvY3RsPC9yZWZuYW1lPgotICAgIDxyZWZwdXJwb3NlPlByb2dyYW0gYSBWNEwyIGRldmljZTwvcmVmcHVycG9zZT4KLSAgPC9yZWZuYW1lZGl2PgotCi0gIDxyZWZzeW5vcHNpc2Rpdj4KLSAgICA8ZnVuY3N5bm9wc2lzPgotICAgICAgPGZ1bmNzeW5vcHNpc2luZm8+I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KLSAgICAgIDxmdW5jcHJvdG90eXBlPgotCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLQk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICA8L2Z1bmNzeW5vcHNpcz4KLSAgPC9yZWZzeW5vcHNpc2Rpdj4KLQotICA8cmVmc2VjdDE+Ci0gICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPiZmZDs8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VjRMMiBpb2N0bCByZXF1ZXN0IGNvZGUgYXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Mi5oPC9maWxlbmFtZT4gaGVhZGVyIGZpbGUsIGZvciBleGFtcGxlCi1WSURJT0NfUVVFUllDQVAuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPlBvaW50ZXIgdG8gYSBmdW5jdGlvbiBwYXJhbWV0ZXIsIHVzdWFsbHkgYSBzdHJ1Y3R1cmUuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8L3ZhcmlhYmxlbGlzdD4KLSAgPC9yZWZzZWN0MT4KLQotICA8cmVmc2VjdDE+Ci0gICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KLQotICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+aW9jdGwoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvZ3JhbQotVjRMMiBkZXZpY2VzLiBUaGUgYXJndW1lbnQgPHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPiBtdXN0IGJlIGFuIG9wZW4KLWZpbGUgZGVzY3JpcHRvci4gQW4gaW9jdGwgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+IGhhcyBlbmNvZGVkCi1pbiBpdCB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiBpbnB1dCwgb3V0cHV0IG9yIHJlYWQvd3JpdGUKLXBhcmFtZXRlciwgYW5kIHRoZSBzaXplIG9mIHRoZSBhcmd1bWVudCA8cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj4gaW4KLWJ5dGVzLiBNYWNyb3MgYW5kIGRlZmluZXMgc3BlY2lmeWluZyBWNEwyIGlvY3RsIHJlcXVlc3RzIGFyZSBsb2NhdGVkCi1pbiB0aGUgPGZpbGVuYW1lPnZpZGVvZGV2Mi5oPC9maWxlbmFtZT4gaGVhZGVyIGZpbGUuCi1BcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGVpciBvd24gY29weSwgbm90IGluY2x1ZGUgdGhlIHZlcnNpb24gaW4gdGhlCi1rZXJuZWwgc291cmNlcyBvbiB0aGUgc3lzdGVtIHRoZXkgY29tcGlsZSBvbi4gQWxsIFY0TDIgaW9jdGwgcmVxdWVzdHMsCi10aGVpciByZXNwZWN0aXZlIGZ1bmN0aW9uIGFuZCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgaW4gPHhyZWYKLQlsaW5rZW5kPSJ1c2VyLWZ1bmMiIC8+LjwvcGFyYT4KLSAgPC9yZWZzZWN0MT4KLQotICA8cmVmc2VjdDE+Ci0gICAgPHRpdGxlPlJldHVybiBWYWx1ZTwvdGl0bGU+Ci0KLSAgICA8cGFyYT5PbiBzdWNjZXNzIHRoZSA8ZnVuY3Rpb24+aW9jdGwoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHJldHVybnMKLTxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gYW5kIGRvZXMgbm90IHJlc2V0IHRoZQotPHZhcm5hbWU+ZXJybm88L3Zhcm5hbWU+IHZhcmlhYmxlLiBPbiBmYWlsdXJlCi08cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgd2hlbiB0aGUgaW9jdGwgdGFrZXMgYW4KLW91dHB1dCBvciByZWFkL3dyaXRlIHBhcmFtZXRlciBpdCByZW1haW5zIHVubW9kaWZpZWQsIGFuZCB0aGUKLTx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gU2VlIGJlbG93IGZvcgotcG9zc2libGUgZXJyb3IgY29kZXMuIEdlbmVyaWMgZXJyb3JzIGxpa2UgPGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPgotb3IgPGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT4gYXJlIG5vdCBsaXN0ZWQgaW4gdGhlIHNlY3Rpb25zCi1kaXNjdXNzaW5nIGluZGl2aWR1YWwgaW9jdGwgcmVxdWVzdHMuPC9wYXJhPgotICAgIDxwYXJhPk5vdGUgaW9jdGxzIG1heSByZXR1cm4gdW5kZWZpbmVkIGVycm9yIGNvZGVzLiBTaW5jZSBlcnJvcnMKLW1heSBoYXZlIHNpZGUgZWZmZWN0cyBzdWNoIGFzIGEgZHJpdmVyIHJlc2V0IGFwcGxpY2F0aW9ucyBzaG91bGQKLWFib3J0IG9uIHVuZXhwZWN0ZWQgZXJyb3JzLjwvcGFyYT4KLQotICAgIDx2YXJpYWJsZWxpc3Q+Ci0gICAgICA8dmFybGlzdGVudHJ5PgotCTx0ZXJtPjxlcnJvcmNvZGU+RUJBREY8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+PHBhcmFtZXRlcj5mZDwvcGFyYW1ldGVyPiBpcyBub3QgYSB2YWxpZCBvcGVuIGZpbGUKLWRlc2NyaXB0b3IuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQlVTWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgcHJvcGVydHkgY2Fubm90IGJlIGNoYW5nZWQgcmlnaHQgbm93LiBUeXBpY2FsbHkKLXRoaXMgZXJyb3IgY29kZSBpcyByZXR1cm5lZCB3aGVuIEkvTyBpcyBpbiBwcm9ncmVzcyBvciB0aGUgZHJpdmVyCi1zdXBwb3J0cyBtdWx0aXBsZSBvcGVucyBhbmQgYW5vdGhlciBwcm9jZXNzIGxvY2tlZCB0aGUgcHJvcGVydHkuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IHJlZmVyZW5jZXMgYW4gaW5hY2Nlc3NpYmxlCi1tZW1vcnkgYXJlYS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVOT1RUWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzICBub3QgIGFzc29jaWF0ZWQgIHdpdGggIGEKLWNoYXJhY3RlciBzcGVjaWFsIGRldmljZS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+IG9yIHRoZSBkYXRhIHBvaW50ZWQKLXRvIGJ5IDxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPiBpcyBub3QgdmFsaWQuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbgotZXJyb3IgY29kZSwgc2VlIHRoZSBpbmRpdmlkdWFsIGlvY3RsIHJlcXVlc3RzIGxpc3RlZCBpbiA8eHJlZgotCSAgICAgIGxpbmtlbmQ9InVzZXItZnVuYyIgLz4gZm9yIGFjdHVhbCBjYXVzZXMuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FTk9NRU08L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+Tm90IGVub3VnaCBwaHlzaWNhbCBvciB2aXJ0dWFsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvCi1jb21wbGV0ZSB0aGUgcmVxdWVzdC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVSQU5HRTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgYXBwbGljYXRpb24gYXR0ZW1wdGVkIHRvIHNldCBhIGNvbnRyb2wgd2l0aCB0aGUKLSZWSURJT0MtUy1DVFJMOyBpb2N0bCB0byBhIHZhbHVlIHdoaWNoIGlzIG91dCBvZiBib3VuZHMuPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICA8L3ZhcmlhYmxlbGlzdD4KLSAgPC9yZWZzZWN0MT4KLTwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtZnVuYy1pb2N0bC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWZ1bmMtaW9jdGwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGE4NjA0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtZnVuYy1pb2N0bC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPHJlZmVudHJ5IGlkPSJtZWRpYS1mdW5jLWlvY3RsIj4KLSAgPHJlZm1ldGE+Ci0gICAgPHJlZmVudHJ5dGl0bGU+bWVkaWEgaW9jdGwoKTwvcmVmZW50cnl0aXRsZT4KLSAgICAmbWFudm9sOwotICA8L3JlZm1ldGE+Ci0KLSAgPHJlZm5hbWVkaXY+Ci0gICAgPHJlZm5hbWU+bWVkaWEtaW9jdGw8L3JlZm5hbWU+Ci0gICAgPHJlZnB1cnBvc2U+Q29udHJvbCBhIG1lZGlhIGRldmljZTwvcmVmcHVycG9zZT4KLSAgPC9yZWZuYW1lZGl2PgotCi0gIDxyZWZzeW5vcHNpc2Rpdj4KLSAgICA8ZnVuY3N5bm9wc2lzPgotICAgICAgPGZ1bmNzeW5vcHNpc2luZm8+I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OzwvZnVuY3N5bm9wc2lzaW5mbz4KLSAgICAgIDxmdW5jcHJvdG90eXBlPgotCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLQk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQk8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICA8L2Z1bmNzeW5vcHNpcz4KLSAgPC9yZWZzeW5vcHNpc2Rpdj4KLQotICA8cmVmc2VjdDE+Ci0gICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPiZmZDs8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+TWVkaWEgaW9jdGwgcmVxdWVzdCBjb2RlIGFzIGRlZmluZWQgaW4gdGhlIG1lZGlhLmggaGVhZGVyIGZpbGUsCi0JICBmb3IgZXhhbXBsZSBNRURJQV9JT0NfU0VUVVBfTElOSy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPmFyZ3A8L3BhcmFtZXRlcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+UG9pbnRlciB0byBhIHJlcXVlc3Qtc3BlY2lmaWMgc3RydWN0dXJlLjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+Ci0gIDwvcmVmc2VjdDE+Ci0KLSAgPHJlZnNlY3QxPgotICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+Ci0gICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5pb2N0bCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gbWFuaXB1bGF0ZXMgbWVkaWEgZGV2aWNlCi0gICAgcGFyYW1ldGVycy4gVGhlIGFyZ3VtZW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj4gbXVzdCBiZSBhbiBvcGVuIGZpbGUKLSAgICBkZXNjcmlwdG9yLjwvcGFyYT4KLSAgICA8cGFyYT5UaGUgaW9jdGwgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+IGNvZGUgc3BlY2lmaWVzIHRoZSBtZWRpYQotICAgIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4gSXQgaGFzIGVuY29kZWQgaW4gaXQgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYW4KLSAgICBpbnB1dCwgb3V0cHV0IG9yIHJlYWQvd3JpdGUgcGFyYW1ldGVyLCBhbmQgdGhlIHNpemUgb2YgdGhlIGFyZ3VtZW50Ci0gICAgPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IGluIGJ5dGVzLjwvcGFyYT4KLSAgICA8cGFyYT5NYWNyb3MgYW5kIHN0cnVjdHVyZXMgZGVmaW5pdGlvbnMgc3BlY2lmeWluZyBtZWRpYSBpb2N0bCByZXF1ZXN0cyBhbmQKLSAgICB0aGVpciBwYXJhbWV0ZXJzIGFyZSBsb2NhdGVkIGluIHRoZSBtZWRpYS5oIGhlYWRlciBmaWxlLiBBbGwgbWVkaWEgaW9jdGwKLSAgICByZXF1ZXN0cywgdGhlaXIgcmVzcGVjdGl2ZSBmdW5jdGlvbiBhbmQgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGluCi0gICAgPHhyZWYgbGlua2VuZD0ibWVkaWEtdXNlci1mdW5jIiAvPi48L3BhcmE+Ci0gIDwvcmVmc2VjdDE+Ci0KLSAgPHJlZnNlY3QxPgotICAgIDx0aXRsZT5SZXR1cm4gVmFsdWU8L3RpdGxlPgotCi0gICAgPHBhcmE+PGZ1bmN0aW9uPmlvY3RsKCk8L2Z1bmN0aW9uPiByZXR1cm5zIDxyZXR1cm52YWx1ZT4wPC9yZXR1cm52YWx1ZT4gb24KLSAgICBzdWNjZXNzLiBPbiBmYWlsdXJlLCA8cmV0dXJudmFsdWU+LTE8L3JldHVybnZhbHVlPiBpcyByZXR1cm5lZCwgYW5kIHRoZQotICAgIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gR2VuZXJpYyBlcnJvciBjb2RlcwotICAgIGFyZSBsaXN0ZWQgYmVsb3csIGFuZCByZXF1ZXN0LXNwZWNpZmljIGVycm9yIGNvZGVzIGFyZSBsaXN0ZWQgaW4gdGhlCi0gICAgaW5kaXZpZHVhbCByZXF1ZXN0cyBkZXNjcmlwdGlvbnMuPC9wYXJhPgotICAgIDxwYXJhPldoZW4gYW4gaW9jdGwgdGhhdCB0YWtlcyBhbiBvdXRwdXQgb3IgcmVhZC93cml0ZSBwYXJhbWV0ZXIgZmFpbHMsCi0gICAgdGhlIHBhcmFtZXRlciByZW1haW5zIHVubW9kaWZpZWQuPC9wYXJhPgotCi0gICAgPHZhcmlhYmxlbGlzdD4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FQkFERjwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzIG5vdCBhIHZhbGlkIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgotCSAgPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PGVycm9yY29kZT5FRkFVTFQ8L2Vycm9yY29kZT48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+IHJlZmVyZW5jZXMgYW4gaW5hY2Nlc3NpYmxlIG1lbW9yeQotCSAgYXJlYS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVJTlZBTDwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5UaGUgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+IG9yIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkKLQkgIDxwYXJhbWV0ZXI+YXJncDwvcGFyYW1ldGVyPiBpcyBub3QgdmFsaWQuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBlcnJvcgotCSAgY29kZSwgc2VlIHRoZSBpbmRpdmlkdWFsIGlvY3RsIHJlcXVlc3RzIGxpc3RlZCBpbgotCSAgPHhyZWYgbGlua2VuZD0ibWVkaWEtdXNlci1mdW5jIiAvPiBmb3IgYWN0dWFsIGNhdXNlcy48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVOT01FTTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT5JbnN1ZmZpY2llbnQga2VybmVsIG1lbW9yeSB3YXMgYXZhaWxhYmxlIHRvIGNvbXBsZXRlIHRoZQotCSAgcmVxdWVzdC48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48ZXJyb3Jjb2RlPkVOT1RUWTwvZXJyb3Jjb2RlPjwvdGVybT4KLQk8bGlzdGl0ZW0+Ci0JICA8cGFyYT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+IGlzICBub3QgIGFzc29jaWF0ZWQgIHdpdGggIGEgY2hhcmFjdGVyCi0JICBzcGVjaWFsIGRldmljZS48L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgIDwvdmFyaWFibGVsaXN0PgotICA8L3JlZnNlY3QxPgotPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbnYxMm10LmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbnYxMm10LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyZDRjZi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL252MTJtdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL252MTJtdF9leGFtcGxlLmdpZiBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbnYxMm10X2V4YW1wbGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjgxZDY4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbnYxMm10X2V4YW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXBlbGluZS5wbmcgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpcGVsaW5lLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE5Yjg2Yy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpcGVsaW5lLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV81MjUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTgwYjY5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpXzUyNS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfNjI1LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlMzI1MS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZiaV82MjUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMuZ2lmIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92YmlfaHN5bmMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI0MzRkLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmJpX2hzeW5jLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkZW9kZXYyLmgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRlb2RldjIuaC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MDUzNmEuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRlb2RldjIuaC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQ2ICswLDAgQEAKLTxwcm9ncmFtbGlzdGluZz4KLS8qCi0gKiAgVmlkZW8gZm9yIExpbnV4IFR3byBoZWFkZXIgZmlsZQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyB0aGUgY29udHJpYnV0b3JzCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIEFsdGVybmF0aXZlbHkgeW91IGNhbiByZWRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqICBCU0QgbGljZW5zZSBhcyBzdGF0ZWQgYmVsb3c6Ci0gKgotICogIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogIGFyZSBtZXQ6Ci0gKiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICAgZGlzdHJpYnV0aW9uLgotICogIDMuIFRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSAqICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLSAqICAgICBwZXJtaXNzaW9uLgotICoKLSAqICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCi0gKiAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLSAqICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgICAgIEhlYWRlciBmaWxlIGZvciB2NGwgb3IgVjRMMiBkcml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMKLSAqIHdpdGggcHVibGljIEFQSS4KLSAqIEFsbCBrZXJuZWwtc3BlY2lmaWMgc3R1ZmYgd2VyZSBtb3ZlZCB0byBtZWRpYS92NGwyLWRldi5oLCBzbwotICogbm8gI2lmIF9fS0VSTkVMIHRlc3RzIGFyZSBhbGxvd2VkIGhlcmUKLSAqCi0gKiAgICAgIFNlZSBodHRwOi8vbGludXh0di5vcmcgZm9yIG1vcmUgaW5mbwotICoKLSAqICAgICAgQXV0aG9yOiBCaWxsIERpcmtzICZsdDtiaWxsQHRoZWRpcmtzLm9yZyZndDsKLSAqICAgICAgICAgICAgICBKdXN0aW4gU2Nob2VtYW4KLSAqICAgICAgICAgICAgICBIYW5zIFZlcmt1aWwgJmx0O2h2ZXJrdWlsQHhzNGFsbC5ubCZndDsKLSAqICAgICAgICAgICAgICBldCBhbC4KLSAqLwotI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWMl9ICi0jZGVmaW5lIF9fTElOVVhfVklERU9ERVYyX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlICZsdDtsaW51eC90aW1lLmgmZ3Q7ICAgICAvKiBuZWVkIHN0cnVjdCB0aW1ldmFsICovCi0jZWxzZQotI2luY2x1ZGUgJmx0O3N5cy90aW1lLmgmZ3Q7Ci0jZW5kaWYKLSNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lvY3RsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKLQotLyoKLSAqIENvbW1vbiBzdHVmZiBmb3IgYm90aCBWNEwxIGFuZCBWNEwyCi0gKiBNb3ZlZCBmcm9tIHZpZGVvZGV2LmgKLSAqLwotI2RlZmluZSBWSURFT19NQVhfRlJBTUUgICAgICAgICAgICAgICAzMgotI2RlZmluZSBWSURFT19NQVhfUExBTkVTICAgICAgICAgICAgICAgOAotCi0jaWZuZGVmIF9fS0VSTkVMX18KLQotLyogVGhlc2UgZGVmaW5lcyBhcmUgVjRMMSBzcGVjaWZpYyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdGhlIFY0TDIgQVBJIQotICAgVGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGlzIGhlYWRlciBpbiB0aGUgZnV0dXJlLiAqLwotCi0jZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUgICAgICAgIDEgICAgICAgLyogQ2FuIGNhcHR1cmUgKi8KLSNkZWZpbmUgVklEX1RZUEVfVFVORVIgICAgICAgICAgMiAgICAgICAvKiBDYW4gdHVuZSAqLwotI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVCAgICAgICA0ICAgICAgIC8qIERvZXMgdGVsZXRleHQgKi8KLSNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWSAgICAgICAgOCAgICAgICAvKiBPdmVybGF5IG9udG8gZnJhbWUgYnVmZmVyICovCi0jZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWSAgICAgIDE2ICAgICAgLyogT3ZlcmxheSBieSBjaHJvbWFrZXkgKi8KLSNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcgICAgICAgMzIgICAgICAvKiBDYW4gY2xpcCAqLwotI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTSAgICAgICA2NCAgICAgIC8qIFVzZXMgdGhlIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KLSNkZWZpbmUgVklEX1RZUEVfU0NBTEVTICAgICAgICAgMTI4ICAgICAvKiBTY2FsYWJsZSAqLwotI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FICAgICAyNTYgICAgIC8qIE1vbm9jaHJvbWUgb25seSAqLwotI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFICAgICA1MTIgICAgIC8qIENhbiBjYXB0dXJlIHN1YmFyZWFzIG9mIHRoZSBpbWFnZSAqLwotI2RlZmluZSBWSURfVFlQRV9NUEVHX0RFQ09ERVIgICAxMDI0ICAgIC8qIENhbiBkZWNvZGUgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUiAgIDIwNDggICAgLyogQ2FuIGVuY29kZSBNUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUiAgNDA5NiAgICAvKiBDYW4gZGVjb2RlIE1KUEVHIHN0cmVhbXMgKi8KLSNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUiAgODE5MiAgICAvKiBDYW4gZW5jb2RlIE1KUEVHIHN0cmVhbXMgKi8KLSNlbmRpZgotCi0vKgotICogICAgICBNIEkgUyBDIEUgTCBMIEEgTiBFIE8gVSBTCi0gKi8KLQotLyogIEZvdXItY2hhcmFjdGVyLWNvZGUgKEZPVVJDQykgKi8KLSNkZWZpbmUgdjRsMl9mb3VyY2MoYSwgYiwgYywgZClcCi0gICAgICAgICgoX191MzIpKGEpIHwgKChfX3UzMikoYikgJmx0OyZsdDsgOCkgfCAoKF9fdTMyKShjKSAmbHQ7Jmx0OyAxNikgfCAoKF9fdTMyKShkKSAmbHQ7Jmx0OyAyNCkpCi0KLS8qCi0gKiAgICAgIEUgTiBVIE0gUwotICovCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZmllbGQiPnY0bDJfZmllbGQ8L2xpbms+IHsKLSAgICAgICAgVjRMMl9GSUVMRF9BTlkgICAgICAgICAgID0gMCwgLyogZHJpdmVyIGNhbiBjaG9vc2UgZnJvbSBub25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIGJvdHRvbSwgaW50ZXJsYWNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gd2hhdGV2ZXIgaXQgdGhpbmtzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFwcHJveGltYXRlIC4uLiAqLwotICAgICAgICBWNEwyX0ZJRUxEX05PTkUgICAgICAgICAgPSAxLCAvKiB0aGlzIGRldmljZSBoYXMgbm8gZmllbGRzIC4uLiAqLwotICAgICAgICBWNEwyX0ZJRUxEX1RPUCAgICAgICAgICAgPSAyLCAvKiB0b3AgZmllbGQgb25seSAqLwotICAgICAgICBWNEwyX0ZJRUxEX0JPVFRPTSAgICAgICAgPSAzLCAvKiBib3R0b20gZmllbGQgb25seSAqLwotICAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgICAgPSA0LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkICovCi0gICAgICAgIFY0TDJfRklFTERfU0VRX1RCICAgICAgICA9IDUsIC8qIGJvdGggZmllbGRzIHNlcXVlbnRpYWwgaW50byBvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCB0b3AtYm90dG9tIG9yZGVyICovCi0gICAgICAgIFY0TDJfRklFTERfU0VRX0JUICAgICAgICA9IDYsIC8qIHNhbWUgYXMgYWJvdmUgKyBib3R0b20tdG9wIG9yZGVyICovCi0gICAgICAgIFY0TDJfRklFTERfQUxURVJOQVRFICAgICA9IDcsIC8qIGJvdGggZmllbGRzIGFsdGVybmF0aW5nIGludG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgYnVmZmVycyAqLwotICAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgPSA4LCAvKiBib3RoIGZpZWxkcyBpbnRlcmxhY2VkLCB0b3AgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgYW5kIHRoZSB0b3AgZmllbGQgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXR0ZWQgZmlyc3QgKi8KLSAgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUID0gOSwgLyogYm90aCBmaWVsZHMgaW50ZXJsYWNlZCwgdG9wIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IGFuZCB0aGUgYm90dG9tIGZpZWxkIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGVkIGZpcnN0ICovCi19OwotI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19UT1AoZmllbGQpICAgICAgIFwKLSAgICAgICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9UT1AgICAgICB8fFwKLSAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgfHxcCi0gICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCB8fFwKLSAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgICB8fFwKLSAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCi0jZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVFRPTShmaWVsZCkgICAgXAotICAgICAgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0JPVFRPTSAgIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCi0gICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fFwKLSAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQiAgIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKLSNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9USChmaWVsZCkgICAgICBcCi0gICAgICAgICgoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fFwKLSAgICAgICAgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHxcCi0gICAgICAgICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCIHx8XAotICAgICAgICAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKLQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAgICAgICAgPSAxLAotICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAgICAgICAgID0gMiwKLSAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICAgICAgICA9IDMsCi0gICAgICAgIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgICAgICAgICAgPSA0LAotICAgICAgICBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQgICAgICAgICAgID0gNSwKLSAgICAgICAgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgICA9IDYsCi0gICAgICAgIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgICAgPSA3LAotI2lmIDEKLSAgICAgICAgLyogRXhwZXJpbWVudGFsICovCi0gICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVkgPSA4LAotI2VuZGlmCi0gICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgPSA5LAotICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUgID0gMTAsCi0gICAgICAgIFY0TDJfQlVGX1RZUEVfUFJJVkFURSAgICAgICAgICAgICAgPSAweDgwLAotfTsKLQotI2RlZmluZSBWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIodHlwZSkgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSAgIFwKLSAgICAgICAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCi0KLSNkZWZpbmUgVjRMMl9UWVBFX0lTX09VVFBVVCh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSAgICAgICAgIFwKLSAgICAgICAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgICAgICAgICAgICAgICBcCi0gICAgICAgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWSAgICAgICAgXAotICAgICAgICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUKQotCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXItdHlwZSI+djRsMl90dW5lcl90eXBlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfVFVORVJfUkFESU8gICAgICAgICAgICAgPSAxLAotICAgICAgICBWNEwyX1RVTkVSX0FOQUxPR19UViAgICAgICAgID0gMiwKLSAgICAgICAgVjRMMl9UVU5FUl9ESUdJVEFMX1RWICAgICAgICA9IDMsCi19OwotCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbWVtb3J5Ij52NGwyX21lbW9yeTwvbGluaz4gewotICAgICAgICBWNEwyX01FTU9SWV9NTUFQICAgICAgICAgICAgID0gMSwKLSAgICAgICAgVjRMMl9NRU1PUllfVVNFUlBUUiAgICAgICAgICA9IDIsCi0gICAgICAgIFY0TDJfTUVNT1JZX09WRVJMQVkgICAgICAgICAgPSAzLAotfTsKLQotLyogc2VlIGFsc28gaHR0cDovL3Zla3Rvci50aGVvcmVtLmNhL2dyYXBoaWNzL3ljYmNyLyAqLwotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbG9yc3BhY2UiPnY0bDJfY29sb3JzcGFjZTwvbGluaz4gewotICAgICAgICAvKiBJVFUtUiA2MDEgLS0gYnJvYWRjYXN0IE5UU0MvUEFMICovCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gICAgID0gMSwKLQotICAgICAgICAvKiAxMTI1LUxpbmUgKFVTKSBIRFRWICovCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME0gICAgID0gMiwKLQotICAgICAgICAvKiBIRCBhbmQgbW9kZXJuIGNhcHR1cmVzLiAqLwotICAgICAgICBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5ICAgICAgICA9IDMsCi0KLSAgICAgICAgLyogYnJva2VuIEJUODc4IGV4dGVudHMgKDYwMSwgbHVtYSByYW5nZSAxNi0yNTMgaW5zdGVhZCBvZiAxNi0yMzUpICovCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV9CVDg3OCAgICAgICAgID0gNCwKLQotICAgICAgICAvKiBUaGVzZSBzaG91bGQgYmUgdXNlZnVsLiAgQXNzdW1lIDYwMSBleHRlbnRzLiAqLwotICAgICAgICBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NICA9IDUsCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHID0gNiwKLQotICAgICAgICAvKiBJIGtub3cgdGhlcmUgd2lsbCBiZSBjYW1lcmFzIHRoYXQgc2VuZCB0aGlzLiAgU28sIHRoaXMgaXMKLSAgICAgICAgICogdW5zcGVjaWZpZWQgY2hyb21hdGljaXRpZXMgYW5kIGZ1bGwgMC0yNTUgb24gZWFjaCBvZiB0aGUKLSAgICAgICAgICogWSdDYkNyIGNvbXBvbmVudHMKLSAgICAgICAgICovCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV9KUEVHICAgICAgICAgID0gNywKLQotICAgICAgICAvKiBGb3IgUkdCIGNvbG91cnNwYWNlcywgdGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnQuICovCi0gICAgICAgIFY0TDJfQ09MT1JTUEFDRV9TUkdCICAgICAgICAgID0gOCwKLX07Ci0KLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmlvcml0eSI+djRsMl9wcmlvcml0eTwvbGluaz4gewotICAgICAgICBWNEwyX1BSSU9SSVRZX1VOU0VUICAgICAgID0gMCwgIC8qIG5vdCBpbml0aWFsaXplZCAqLwotICAgICAgICBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQgID0gMSwKLSAgICAgICAgVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSA9IDIsCi0gICAgICAgIFY0TDJfUFJJT1JJVFlfUkVDT1JEICAgICAgPSAzLAotICAgICAgICBWNEwyX1BSSU9SSVRZX0RFRkFVTFQgICAgID0gVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSwKLX07Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gewotICAgICAgICBfX3MzMiAgIGxlZnQ7Ci0gICAgICAgIF9fczMyICAgdG9wOwotICAgICAgICBfX3MzMiAgIHdpZHRoOwotICAgICAgICBfX3MzMiAgIGhlaWdodDsKLX07Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgbnVtZXJhdG9yOwotICAgICAgICBfX3UzMiAgIGRlbm9taW5hdG9yOwotfTsKLQotLyoKLSAqICAgICAgRCBSIEkgViBFIFIgICBDIEEgUCBBIEIgSSBMIEkgVCBJIEUgUwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jYXBhYmlsaXR5Ij52NGwyX2NhcGFiaWxpdHk8L2xpbms+IHsKLSAgICAgICAgX191OCAgICBkcml2ZXJbMTZdOyAgICAgLyogaS5lLmllOyAiYnR0diIgKi8KLSAgICAgICAgX191OCAgICBjYXJkWzMyXTsgICAgICAgLyogaS5lLmllOyAiSGF1cHBhdWdlIFdpblRWIiAqLwotICAgICAgICBfX3U4ICAgIGJ1c19pbmZvWzMyXTsgICAvKiAiUENJOiIgKyBwY2lfbmFtZShwY2lfZGV2KSAqLwotICAgICAgICBfX3UzMiAgIHZlcnNpb247ICAgICAgICAvKiBzaG91bGQgdXNlIEtFUk5FTF9WRVJTSU9OKCkgKi8KLSAgICAgICAgX191MzIgICBjYXBhYmlsaXRpZXM7ICAgLyogRGV2aWNlIGNhcGFiaWxpdGllcyAqLwotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzRdOwotfTsKLQotLyogVmFsdWVzIGZvciAnY2FwYWJpbGl0aWVzJyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFICAgICAgICAgIDB4MDAwMDAwMDEgIC8qIElzIGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUICAgICAgICAgICAweDAwMDAwMDAyICAvKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1ZFUkxBWSAgICAgICAgICAweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRSAgICAgICAgICAgIDB4MDAwMDAwMTAgIC8qIElzIGEgcmF3IFZCSSBjYXB0dXJlIGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUICAgICAgICAgICAgIDB4MDAwMDAwMjAgIC8qIElzIGEgcmF3IFZCSSBvdXRwdXQgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSAgICAgMHgwMDAwMDA0MCAgLyogSXMgYSBzbGljZWQgVkJJIGNhcHR1cmUgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUICAgICAgMHgwMDAwMDA4MCAgLyogSXMgYSBzbGljZWQgVkJJIG91dHB1dCBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUgICAgICAgICAgICAweDAwMDAwMTAwICAvKiBSRFMgZGF0YSBjYXB0dXJlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZICAgMHgwMDAwMDIwMCAgLyogQ2FuIGRvIHZpZGVvIG91dHB1dCBvdmVybGF5ICovCi0jZGVmaW5lIFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyAgICAgICAgICAgMHgwMDAwMDQwMCAgLyogQ2FuIGRvIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrICAqLwotI2RlZmluZSBWNEwyX0NBUF9SRFNfT1VUUFVUICAgICAgICAgICAgIDB4MDAwMDA4MDAgIC8qIElzIGFuIFJEUyBlbmNvZGVyICovCi0KLS8qIElzIGEgdmlkZW8gY2FwdHVyZSBkZXZpY2UgdGhhdCBzdXBwb3J0cyBtdWx0aXBsYW5hciBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FICAgMHgwMDAwMTAwMAotLyogSXMgYSB2aWRlbyBvdXRwdXQgZGV2aWNlIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGFuYXIgZm9ybWF0cyAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FICAgIDB4MDAwMDIwMDAKLQotI2RlZmluZSBWNEwyX0NBUF9UVU5FUiAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAgIC8qIGhhcyBhIHR1bmVyICovCi0jZGVmaW5lIFY0TDJfQ0FQX0FVRElPICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMCAgLyogaGFzIGF1ZGlvIHN1cHBvcnQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkFESU8gICAgICAgICAgICAgICAgICAweDAwMDQwMDAwICAvKiBpcyBhIHJhZGlvIGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9NT0RVTEFUT1IgICAgICAgICAgICAgIDB4MDAwODAwMDAgIC8qIGhhcyBhIG1vZHVsYXRvciAqLwotCi0jZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLyogcmVhZC93cml0ZSBzeXN0ZW1jYWxscyAqLwotI2RlZmluZSBWNEwyX0NBUF9BU1lOQ0lPICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAgIC8qIGFzeW5jIEkvTyAqLwotI2RlZmluZSBWNEwyX0NBUF9TVFJFQU1JTkcgICAgICAgICAgICAgIDB4MDQwMDAwMDAgIC8qIHN0cmVhbWluZyBJL08gaW9jdGxzICovCi0KLS8qCi0gKiAgICAgIFYgSSBEIEUgTyAgIEkgTSBBIEcgRSAgIEYgTyBSIE0gQSBUCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQiPnY0bDJfcGl4X2Zvcm1hdDwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB3aWR0aDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBwaXhlbGZvcm1hdDsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWZpZWxkIj52NGwyX2ZpZWxkPC9saW5rPiAgICAgICAgIGZpZWxkOwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmU7ICAgLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHNpemVpbWFnZTsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbG9yc3BhY2UiPnY0bDJfY29sb3JzcGFjZTwvbGluaz4gICAgY29sb3JzcGFjZTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcHJpdjsgICAgICAgICAgIC8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLwotfTsKLQotLyogICAgICBQaXhlbCBmb3JtYXQgICAgICAgICBGT1VSQ0MgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICBEZXNjcmlwdGlvbiAgKi8KLQotLyogUkdCIGZvcm1hdHMgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMzMiI+VjRMMl9QSVhfRk1UX1JHQjMzMjwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykgLyogIDggIFJHQi0zLTMtMiAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjQ0NCI+VjRMMl9QSVhfRk1UX1JHQjQ0NDwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHhycnJyIGdnZ2diYmJiICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTUiPlY0TDJfUElYX0ZNVF9SR0I1NTU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnTycpIC8qIDE2ICBSR0ItNS01LTUgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NjUiPlY0TDJfUElYX0ZNVF9SR0I1NjU8L2xpbms+ICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUCcpIC8qIDE2ICBSR0ItNS02LTUgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1SR0I1NTVYIj5WNEwyX1BJWF9GTVRfUkdCNTU1WDwvbGluaz4gdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1EnKSAvKiAxNiAgUkdCLTUtNS01IEJFICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCNTY1WCI+VjRMMl9QSVhfRk1UX1JHQjU2NVg8L2xpbms+IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUJHUjY2NiI+VjRMMl9QSVhfRk1UX0JHUjY2NjwvbGluaz4gIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICdIJykgLyogMTggIEJHUi02LTYtNiAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUJHUjI0Ij5WNEwyX1BJWF9GTVRfQkdSMjQ8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUkdCMjQiPlY0TDJfUElYX0ZNVF9SR0IyNDwvbGluaz4gICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1CR1IzMiI+VjRMMl9QSVhfRk1UX0JHUjMyPC9saW5rPiAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVJHQjMyIj5WNEwyX1BJWF9GTVRfUkdCMzI8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzQnKSAvKiAzMiAgUkdCLTgtOC04LTggICAqLwotCi0vKiBHcmV5IGZvcm1hdHMgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULUdSRVkiPlY0TDJfUElYX0ZNVF9HUkVZPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZNCI+VjRMMl9QSVhfRk1UX1k0PC9saW5rPiAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNCcsICcgJykgLyogIDQgIEdyZXlzY2FsZSAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVk2Ij5WNEwyX1BJWF9GTVRfWTY8L2xpbms+ICAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMCcsICc2JywgJyAnKSAvKiAgNiAgR3JleXNjYWxlICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWTEwIj5WNEwyX1BJWF9GTVRfWTEwPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJyAnKSAvKiAxMCAgR3JleXNjYWxlICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWTE2Ij5WNEwyX1BJWF9GTVRfWTE2PC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKSAvKiAxNiAgR3JleXNjYWxlICAgICAqLwotCi0vKiBHcmV5IGJpdC1wYWNrZWQgZm9ybWF0cyAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWTEwQlBBQ0siPlY0TDJfUElYX0ZNVF9ZMTBCUEFDSzwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJ0InKSAvKiAxMCAgR3JleXNjYWxlIGJpdC1wYWNrZWQgKi8KLQotLyogUGFsZXR0ZSBmb3JtYXRzICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QQUw4Ij5WNEwyX1BJWF9GTVRfUEFMODwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1AnLCAnQScsICdMJywgJzgnKSAvKiAgOCAgOC1iaXQgcGFsZXR0ZSAqLwotCi0vKiBMdW1pbmFuY2UrQ2hyb21pbmFuY2UgZm9ybWF0cyAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZVNDEwIj5WNEwyX1BJWF9GTVRfWVZVNDEwPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdVJywgJzknKSAvKiAgOSAgWVZVIDQ6MTowICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVZVNDIwIj5WNEwyX1BJWF9GTVRfWVZVNDIwPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICcxJywgJzInKSAvKiAxMiAgWVZVIDQ6MjowICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVZViI+VjRMMl9QSVhfRk1UX1lVWVY8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnWScsICdWJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlZVVYiPlY0TDJfUElYX0ZNVF9ZWVVWPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnWScsICdZJywgJ1UnLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZVllVIj5WNEwyX1BJWF9GTVRfWVZZVTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdZJywgJ1UnKSAvKiAxNiBZVlUgNDoyOjIgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVVZVlkiPlY0TDJfUElYX0ZNVF9VWVZZPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnVScsICdZJywgJ1YnLCAnWScpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1WWVVZIj5WNEwyX1BJWF9GTVRfVllVWTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1YnLCAnWScsICdVJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDIyUCI+VjRMMl9QSVhfRk1UX1lVVjQyMlA8L2xpbms+IHY0bDJfZm91cmNjKCc0JywgJzInLCAnMicsICdQJykgLyogMTYgIFlWVTQyMiBwbGFuYXIgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjQxMVAiPlY0TDJfUElYX0ZNVF9ZVVY0MTFQPC9saW5rPiB2NGwyX2ZvdXJjYygnNCcsICcxJywgJzEnLCAnUCcpIC8qIDE2ICBZVlU0MTEgcGxhbmFyICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ZNDFQIj5WNEwyX1BJWF9GTVRfWTQxUDwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ1knLCAnNCcsICcxJywgJ1AnKSAvKiAxMiAgWVVWIDQ6MToxICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDQ0Ij5WNEwyX1BJWF9GTVRfWVVWNDQ0PC9saW5rPiAgdjRsMl9mb3VyY2MoJ1knLCAnNCcsICc0JywgJzQnKSAvKiAxNiAgeHh4eHl5eXkgdXV1dXZ2dnYgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjU1NSI+VjRMMl9QSVhfRk1UX1lVVjU1NTwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdPJykgLyogMTYgIFlVVi01LTUtNSAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjU2NSI+VjRMMl9QSVhfRk1UX1lVVjU2NTwvbGluaz4gIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdQJykgLyogMTYgIFlVVi01LTYtNSAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVlVVjMyIj5WNEwyX1BJWF9GTVRfWVVWMzI8L2xpbms+ICAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzQnKSAvKiAzMiAgWVVWLTgtOC04LTggICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDEwIj5WNEwyX1BJWF9GTVRfWVVWNDEwPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzknKSAvKiAgOSAgWVVWIDQ6MTowICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDIwIj5WNEwyX1BJWF9GTVRfWVVWNDIwPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICcxJywgJzInKSAvKiAxMiAgWVVWIDQ6MjowICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtSEkyNDAiPlY0TDJfUElYX0ZNVF9ISTI0MDwvbGluaz4gICB2NGwyX2ZvdXJjYygnSCcsICdJJywgJzInLCAnNCcpIC8qICA4ICA4LWJpdCBjb2xvciAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1ITTEyIj5WNEwyX1BJWF9GTVRfSE0xMjwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ0gnLCAnTScsICcxJywgJzInKSAvKiAgOCAgWVVWIDQ6MjowIDE2eDE2IG1hY3JvYmxvY2tzICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NNDIwIj5WNEwyX1BJWF9GTVRfTTQyMDwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ00nLCAnNCcsICcyJywgJzAnKSAvKiAxMiAgWVVWIDQ6MjowIDIgbGluZXMgeSwgMSBsaW5lIHV2IGludGVybGVhdmVkICovCi0KLS8qIHR3byBwbGFuZXMgLS0gb25lIFksIG9uZSBDciArIENiIGludGVybGVhdmVkICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTlYxMiI+VjRMMl9QSVhfRk1UX05WMTI8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICcyJykgLyogMTIgIFkvQ2JDciA0OjI6MCAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WMjEiPlY0TDJfUElYX0ZNVF9OVjIxPC9saW5rPiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzInLCAnMScpIC8qIDEyICBZL0NyQ2IgNDoyOjAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1OVjE2Ij5WNEwyX1BJWF9GTVRfTlYxNjwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcxJywgJzYnKSAvKiAxNiAgWS9DYkNyIDQ6MjoyICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTlY2MSI+VjRMMl9QSVhfRk1UX05WNjE8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnNicsICcxJykgLyogMTYgIFkvQ3JDYiA0OjI6MiAgKi8KLQotLyogdHdvIG5vbiBjb250aWd1b3VzIHBsYW5lcyAtIG9uZSBZLCBvbmUgQ3IgKyBDYiBpbnRlcmxlYXZlZCAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU5WMTJNIj5WNEwyX1BJWF9GTVRfTlYxMk08L2xpbms+ICAgdjRsMl9mb3VyY2MoJ04nLCAnTScsICcxJywgJzInKSAvKiAxMiAgWS9DYkNyIDQ6MjowICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTlYxMk1UIj5WNEwyX1BJWF9GTVRfTlYxMk1UPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICcxJywgJzInKSAvKiAxMiAgWS9DYkNyIDQ6MjowIDY0eDMyIG1hY3JvYmxvY2tzICovCi0KLS8qIHRocmVlIG5vbiBjb250aWd1b3VzIHBsYW5lcyAtIFksIENiLCBDciAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtWVVWNDIwTSI+VjRMMl9QSVhfRk1UX1lVVjQyME08L2xpbms+IHY0bDJfZm91cmNjKCdZJywgJ00nLCAnMScsICcyJykgLyogMTIgIFlVVjQyMCBwbGFuYXIgKi8KLQotLyogQmF5ZXIgZm9ybWF0cyAtIHNlZSBodHRwOi8vd3d3LnNpbGljb25pbWFnaW5nLmNvbS9SR0IlMjBCYXllci5odG0gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNCR0dSOCI+VjRMMl9QSVhfRk1UX1NCR0dSODwvbGluaz4gIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnOCcsICcxJykgLyogIDggIEJHQkcuLiBHUkdSLi4gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHQlJHOCI+VjRMMl9QSVhfRk1UX1NHQlJHODwvbGluaz4gIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnUicsICdHJykgLyogIDggIEdCR0IuLiBSR1JHLi4gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNHUkJHOCI+VjRMMl9QSVhfRk1UX1NHUkJHODwvbGluaz4gIHY0bDJfZm91cmNjKCdHJywgJ1InLCAnQicsICdHJykgLyogIDggIEdSR1IuLiBCR0JHLi4gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNSR0dCOCI+VjRMMl9QSVhfRk1UX1NSR0dCODwvbGluaz4gIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnRycsICdCJykgLyogIDggIFJHUkcuLiBHQkdCLi4gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNCR0dSMTAiPlY0TDJfUElYX0ZNVF9TQkdHUjEwPC9saW5rPiB2NGwyX2ZvdXJjYygnQicsICdHJywgJzEnLCAnMCcpIC8qIDEwICBCR0JHLi4gR1JHUi4uICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR0JSRzEwIj5WNEwyX1BJWF9GTVRfU0dCUkcxMDwvbGluaz4gdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzAnKSAvKiAxMCAgR0JHQi4uIFJHUkcuLiAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU0dSQkcxMCI+VjRMMl9QSVhfRk1UX1NHUkJHMTA8L2xpbms+IHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnMScsICcwJykgLyogMTAgIEdSR1IuLiBCR0JHLi4gKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNSR0dCMTAiPlY0TDJfUElYX0ZNVF9TUkdHQjEwPC9saW5rPiB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMCcpIC8qIDEwICBSR1JHLi4gR0JHQi4uICovCi0gICAgICAgIC8qIDEwYml0IHJhdyBiYXllciBEUENNIGNvbXByZXNzZWQgdG8gOCBiaXRzICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TR1JCRzEwRFBDTTgiPlY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTg8L2xpbms+IHY0bDJfZm91cmNjKCdCJywgJ0QnLCAnMScsICcwJykKLSAgICAgICAgLyoKLSAgICAgICAgICogMTBiaXQgcmF3IGJheWVyLCBleHBhbmRlZCB0byAxNiBiaXRzCi0gICAgICAgICAqIHh4eHhycnJycnJycnJyeHh4eGdnZ2dnZ2dnZ2cgeHh4eGdnZ2dnZ2dnZ2d4eHh4YmJiYmJiYmJiYi4uLgotICAgICAgICAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNCR0dSMTYiPlY0TDJfUElYX0ZNVF9TQkdHUjE2PC9saW5rPiB2NGwyX2ZvdXJjYygnQicsICdZJywgJ1InLCAnMicpIC8qIDE2ICBCR0JHLi4gR1JHUi4uICovCi0KLS8qIGNvbXByZXNzZWQgZm9ybWF0cyAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtTUpQRUciPlY0TDJfUElYX0ZNVF9NSlBFRzwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ00nLCAnSicsICdQJywgJ0cnKSAvKiBNb3Rpb24tSlBFRyAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1KUEVHIj5WNEwyX1BJWF9GTVRfSlBFRzwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdKJywgJ1AnLCAnRScsICdHJykgLyogSkZJRiBKUEVHICAgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtRFYiPlY0TDJfUElYX0ZNVF9EVjwvbGluaz4gICAgICAgdjRsMl9mb3VyY2MoJ2QnLCAndicsICdzJywgJ2QnKSAvKiAxMzk0ICAgICAgICAgICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NUEVHIj5WNEwyX1BJWF9GTVRfTVBFRzwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykgLyogTVBFRy0xLzIvNCAgICAqLwotCi0vKiAgVmVuZG9yLXNwZWNpZmljIGZvcm1hdHMgICAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQ1BJQTEiPlY0TDJfUElYX0ZNVF9DUElBMTwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ0MnLCAnUCcsICdJJywgJ0EnKSAvKiBjcGlhMSBZVVYgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVdOVkEiPlY0TDJfUElYX0ZNVF9XTlZBPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAvKiBXaW5ub3YgaHcgY29tcHJlc3MgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNOOUMxMFgiPlY0TDJfUElYX0ZNVF9TTjlDMTBYPC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnOScsICcxJywgJzAnKSAvKiBTTjlDMTB4IGNvbXByZXNzaW9uICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TTjlDMjBYLUk0MjAiPlY0TDJfUElYX0ZNVF9TTjlDMjBYX0k0MjA8L2xpbms+IHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykgLyogU045QzIweCBZVVYgNDoyOjAgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVBXQzEiPlY0TDJfUElYX0ZNVF9QV0MxPC9saW5rPiAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnVycsICdDJywgJzEnKSAvKiBwd2Mgb2xkZXIgd2ViY2FtICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1QV0MyIj5WNEwyX1BJWF9GTVRfUFdDMjwvbGluaz4gICAgIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcyJykgLyogcHdjIG5ld2VyIHdlYmNhbSAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtRVQ2MVgyNTEiPlY0TDJfUElYX0ZNVF9FVDYxWDI1MTwvbGluaz4gdjRsMl9mb3VyY2MoJ0UnLCAnNicsICcyJywgJzUnKSAvKiBFVDYxWDI1MSBjb21wcmVzc2lvbiAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTUwMSI+VjRMMl9QSVhfRk1UX1NQQ0E1MDE8L2xpbms+ICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnMScpIC8qIFlVWVYgcGVyIGxpbmUgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNQQ0E1MDUiPlY0TDJfUElYX0ZNVF9TUENBNTA1PC9saW5rPiAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzUnKSAvKiBZWVVWIHBlciBsaW5lICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TUENBNTA4Ij5WNEwyX1BJWF9GTVRfU1BDQTUwODwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc4JykgLyogWVVWWSBwZXIgbGluZSAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU1BDQTU2MSI+VjRMMl9QSVhfRk1UX1NQQ0E1NjE8L2xpbms+ICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEFDMjA3Ij5WNEwyX1BJWF9GTVRfUEFDMjA3PC9saW5rPiAgIHY0bDJfZm91cmNjKCdQJywgJzInLCAnMCcsICc3JykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1NUjk3MzEwQSI+VjRMMl9QSVhfRk1UX01SOTczMTBBPC9saW5rPiB2NGwyX2ZvdXJjYygnTScsICczJywgJzEnLCAnMCcpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtU045QzIwMjgiPlY0TDJfUElYX0ZNVF9TTjlDMjAyODwvbGluaz4gdjRsMl9mb3VyY2MoJ1MnLCAnTycsICdOJywgJ1gnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULVNROTA1QyI+VjRMMl9QSVhfRk1UX1NROTA1QzwvbGluaz4gICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtUEpQRyI+VjRMMl9QSVhfRk1UX1BKUEc8L2xpbms+ICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KLSNkZWZpbmUgPGxpbmsgbGlua2VuZD0iVjRMMi1QSVgtRk1ULU9WNTExIj5WNEwyX1BJWF9GTVRfT1Y1MTE8L2xpbms+ICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykgLyogb3Y1MTEgSlBFRyAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtT1Y1MTgiPlY0TDJfUElYX0ZNVF9PVjUxODwvbGluaz4gICAgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzgnKSAvKiBvdjUxOCBKUEVHICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1TVFYwNjgwIj5WNEwyX1BJWF9GTVRfU1RWMDY4MDwvbGluaz4gIHY0bDJfZm91cmNjKCdTJywgJzYnLCAnOCcsICcwJykgLyogc3R2MDY4MCBiYXllciAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtVE02MDAwIj5WNEwyX1BJWF9GTVRfVE02MDAwPC9saW5rPiAgIHY0bDJfZm91cmNjKCdUJywgJ00nLCAnNicsICcwJykgLyogdG01NjAwL3RtNjB4MCAqLwotI2RlZmluZSA8bGluayBsaW5rZW5kPSJWNEwyLVBJWC1GTVQtQ0lULVlZVllVWSI+VjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVk8L2xpbms+IHY0bDJfZm91cmNjKCdDJywgJ0knLCAnVCcsICdWJykgLyogb25lIGxpbmUgb2YgWSB0aGVuIDEgbGluZSBvZiBWWVVZICovCi0jZGVmaW5lIDxsaW5rIGxpbmtlbmQ9IlY0TDItUElYLUZNVC1LT05JQ0E0MjAiPlY0TDJfUElYX0ZNVF9LT05JQ0E0MjA8L2xpbms+ICB2NGwyX2ZvdXJjYygnSycsICdPJywgJ04nLCAnSScpIC8qIFlVVjQyMCBwbGFuYXIgaW4gYmxvY2tzIG9mIDI1NiBwaXhlbHMgKi8KLQotLyoKLSAqICAgICAgRiBPIFIgTSBBIFQgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm10ZGVzYyI+djRsMl9mbXRkZXNjPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgICAgIC8qIEZvcm1hdCBudW1iZXIgICAgICAqLwotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+ICB0eXBlOyAgICAgICAgICAgICAgLyogYnVmZmVyIHR5cGUgICAgICAgICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgZmxhZ3M7Ci0gICAgICAgIF9fdTggICAgICAgICAgICAgICAgZGVzY3JpcHRpb25bMzJdOyAgIC8qIERlc2NyaXB0aW9uIHN0cmluZyAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgIHBpeGVsZm9ybWF0OyAgICAgICAvKiBGb3JtYXQgZm91cmNjICAgICAgKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgICByZXNlcnZlZFs0XTsKLX07Ci0KLSNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQotI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEICAgMHgwMDAyCi0KLSNpZiAxCi0gICAgICAgIC8qIEV4cGVyaW1lbnRhbCBGcmFtZSBTaXplIGFuZCBmcmFtZSByYXRlIGVudW1lcmF0aW9uICovCi0vKgotICogICAgICBGIFIgQSBNIEUgICBTIEkgWiBFICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCi0gKi8KLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXpldHlwZXMiPnY0bDJfZnJtc2l6ZXR5cGVzPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFICAgICAgPSAxLAotICAgICAgICBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTICAgID0gMiwKLSAgICAgICAgVjRMMl9GUk1TSVpFX1RZUEVfU1RFUFdJU0UgICAgICA9IDMsCi19OwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplLWRpc2NyZXRlIj52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgd2lkdGg7ICAgICAgICAgIC8qIEZyYW1lIHdpZHRoIFtwaXhlbF0gKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaGVpZ2h0OyAgICAgICAgIC8qIEZyYW1lIGhlaWdodCBbcGl4ZWxdICovCi19OwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplLXN0ZXB3aXNlIj52NGwyX2ZybXNpemVfc3RlcHdpc2U8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbWluX3dpZHRoOyAgICAgIC8qIE1pbmltdW0gZnJhbWUgd2lkdGggW3BpeGVsXSAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBtYXhfd2lkdGg7ICAgICAgLyogTWF4aW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHN0ZXBfd2lkdGg7ICAgICAvKiBGcmFtZSB3aWR0aCBzdGVwIHNpemUgW3BpeGVsXSAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBtaW5faGVpZ2h0OyAgICAgLyogTWluaW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXSAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBtYXhfaGVpZ2h0OyAgICAgLyogTWF4aW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXSAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzdGVwX2hlaWdodDsgICAgLyogRnJhbWUgaGVpZ2h0IHN0ZXAgc2l6ZSBbcGl4ZWxdICovCi19OwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplZW51bSI+djRsMl9mcm1zaXplZW51bTwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBpbmRleDsgICAgICAgICAgLyogRnJhbWUgc2l6ZSBudW1iZXIgKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcGl4ZWxfZm9ybWF0OyAgIC8qIFBpeGVsIGZvcm1hdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgLyogRnJhbWUgc2l6ZSB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovCi0KLSAgICAgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyYW1lIHNpemUgKi8KLSAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1zaXplLWRpc2NyZXRlIj52NGwyX2ZybXNpemVfZGlzY3JldGU8L2xpbms+ICAgIGRpc2NyZXRlOwotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZybXNpemUtc3RlcHdpc2UiPnY0bDJfZnJtc2l6ZV9zdGVwd2lzZTwvbGluaz4gICAgc3RlcHdpc2U7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlICovCi19OwotCi0vKgotICogICAgICBGIFIgQSBNIEUgICBSIEEgVCBFICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCi0gKi8KLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1mcm1pdmFsdHlwZXMiPnY0bDJfZnJtaXZhbHR5cGVzPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFICAgICAgPSAxLAotICAgICAgICBWNEwyX0ZSTUlWQUxfVFlQRV9DT05USU5VT1VTICAgID0gMiwKLSAgICAgICAgVjRMMl9GUk1JVkFMX1RZUEVfU1RFUFdJU0UgICAgICA9IDMsCi19OwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1pdmFsLXN0ZXB3aXNlIj52NGwyX2ZybWl2YWxfc3RlcHdpc2U8L2xpbms+IHsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICAgICAgIG1pbjsgICAgICAgICAgICAvKiBNaW5pbXVtIGZyYW1lIGludGVydmFsIFtzXSAqLwotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gICAgICAgbWF4OyAgICAgICAgICAgIC8qIE1heGltdW0gZnJhbWUgaW50ZXJ2YWwgW3NdICovCi0gICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICAgICBzdGVwOyAgICAgICAgICAgLyogRnJhbWUgaW50ZXJ2YWwgc3RlcCBzaXplIFtzXSAqLwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbGVudW0iPnY0bDJfZnJtaXZhbGVudW08L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7ICAgICAgICAgIC8qIEZyYW1lIGZvcm1hdCBpbmRleCAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBwaXhlbF9mb3JtYXQ7ICAgLyogUGl4ZWwgZm9ybWF0ICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHdpZHRoOyAgICAgICAgICAvKiBGcmFtZSB3aWR0aCAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBoZWlnaHQ7ICAgICAgICAgLyogRnJhbWUgaGVpZ2h0ICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAvKiBGcmFtZSBpbnRlcnZhbCB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovCi0KLSAgICAgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyYW1lIGludGVydmFsICovCi0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICAgICAgICAgICAgICAgZGlzY3JldGU7Ci0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtaXZhbC1zdGVwd2lzZSI+djRsMl9mcm1pdmFsX3N0ZXB3aXNlPC9saW5rPiAgICBzdGVwd2lzZTsKLSAgICAgICAgfTsKLQotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgc3BhY2UgZm9yIGZ1dHVyZSB1c2UgKi8KLX07Ci0jZW5kaWYKLQotLyoKLSAqICAgICAgVCBJIE0gRSBDIE8gRCBFCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXRpbWVjb2RlIj52NGwyX3RpbWVjb2RlPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgdHlwZTsKLSAgICAgICAgX191MzIgICBmbGFnczsKLSAgICAgICAgX191OCAgICBmcmFtZXM7Ci0gICAgICAgIF9fdTggICAgc2Vjb25kczsKLSAgICAgICAgX191OCAgICBtaW51dGVzOwotICAgICAgICBfX3U4ICAgIGhvdXJzOwotICAgICAgICBfX3U4ICAgIHVzZXJiaXRzWzRdOwotfTsKLQotLyogIFR5cGUgICovCi0jZGVmaW5lIFY0TDJfVENfVFlQRV8yNEZQUyAgICAgICAgICAgICAgMQotI2RlZmluZSBWNEwyX1RDX1RZUEVfMjVGUFMgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVjRMMl9UQ19UWVBFXzMwRlBTICAgICAgICAgICAgICAzCi0jZGVmaW5lIFY0TDJfVENfVFlQRV81MEZQUyAgICAgICAgICAgICAgNAotI2RlZmluZSBWNEwyX1RDX1RZUEVfNjBGUFMgICAgICAgICAgICAgIDUKLQotLyogIEZsYWdzICAqLwotI2RlZmluZSBWNEwyX1RDX0ZMQUdfRFJPUEZSQU1FICAgICAgICAgIDB4MDAwMSAvKiAiZHJvcC1mcmFtZSIgbW9kZSAqLwotI2RlZmluZSBWNEwyX1RDX0ZMQUdfQ09MT1JGUkFNRSAgICAgICAgIDB4MDAwMgotI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkICAgICAgICAgIDB4MDAwQwotI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVEICAgIDB4MDAwMAotI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUyAgICAgIDB4MDAwOAotLyogVGhlIGFib3ZlIGlzIGJhc2VkIG9uIFNNUFRFIHRpbWVjb2RlcyAqLwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1qcGVnY29tcHJlc3Npb24iPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9saW5rPiB7Ci0gICAgICAgIGludCBxdWFsaXR5OwotCi0gICAgICAgIGludCAgQVBQbjsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBBUFAgc2VnbWVudCB0byBiZSB3cml0dGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtdXN0IGJlIDAuLjE1ICovCi0gICAgICAgIGludCAgQVBQX2xlbjsgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQVBQbiBzZWdtZW50ICovCi0gICAgICAgIGNoYXIgQVBQX2RhdGFbNjBdOyAgICAgIC8qIERhdGEgaW4gdGhlIEpQRUcgQVBQbiBzZWdtZW50LiAqLwotCi0gICAgICAgIGludCAgQ09NX2xlbjsgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQ09NIHNlZ21lbnQgKi8KLSAgICAgICAgY2hhciBDT01fZGF0YVs2MF07ICAgICAgLyogRGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCi0KLSAgICAgICAgX191MzIganBlZ19tYXJrZXJzOyAgICAgLyogV2hpY2ggbWFya2VycyBzaG91bGQgZ28gaW50byB0aGUgSlBFRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvdXRwdXQuIFVubGVzcyB5b3UgZXhhY3RseSBrbm93IHdoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogeW91IGRvLCBsZWF2ZSB0aGVtIHVudG91Y2hlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5sdWRpbmcgbGVzcyBtYXJrZXJzIHdpbGwgbWFrZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVzdWx0aW5nIGNvZGUgc21hbGxlciwgYnV0IHRoZXJlIHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgZmV3ZXIgYXBwbGljYXRpb25zIHdoaWNoIGNhbiByZWFkIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgcHJlc2VuY2Ugb2YgdGhlIEFQUCBhbmQgQ09NIG1hcmtlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogT05MWSwgbm90IGJ5IHRoaXMgcHJvcGVydHkhICovCi0KLSNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9ESFQgKDEmbHQ7Jmx0OzMpICAgIC8qIERlZmluZSBIdWZmbWFuIFRhYmxlcyAqLwotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RRVCAoMSZsdDsmbHQ7NCkgICAgLyogRGVmaW5lIFF1YW50aXphdGlvbiBUYWJsZXMgKi8KLSNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUkkgKDEmbHQ7Jmx0OzUpICAgIC8qIERlZmluZSBSZXN0YXJ0IEludGVydmFsICovCi0jZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQ09NICgxJmx0OyZsdDs2KSAgICAvKiBDb21tZW50IHNlZ21lbnQgKi8KLSNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9BUFAgKDEmbHQ7Jmx0OzcpICAgIC8qIEFwcCBzZWdtZW50LCBkcml2ZXIgd2lsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWxsd2F5cyB1c2UgQVBQMCAqLwotfTsKLQotLyoKLSAqICAgICAgTSBFIE0gTyBSIFkgLSBNIEEgUCBQIEkgTiBHICAgQiBVIEYgRiBFIFIgUwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZXF1ZXN0YnVmZmVycyI+djRsMl9yZXF1ZXN0YnVmZmVyczwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBjb3VudDsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgIHR5cGU7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tZW1vcnkiPnY0bDJfbWVtb3J5PC9saW5rPiAgICAgICAgbWVtb3J5OwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByZXNlcnZlZFsyXTsKLX07Ci0KLS8qKgotICogc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGxhbmUiPnY0bDJfcGxhbmU8L2xpbms+IC0gcGxhbmUgaW5mbyBmb3IgbXVsdGktcGxhbmFyIGJ1ZmZlcnMKLSAqIEBieXRlc3VzZWQ6ICAgICAgICAgIG51bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSBkYXRhIGluIHRoZSBwbGFuZSAocGF5bG9hZCkKLSAqIEBsZW5ndGg6ICAgICAgICAgICAgIHNpemUgb2YgdGhpcyBwbGFuZSAoTk9UIHRoZSBwYXlsb2FkKSBpbiBieXRlcwotICogQG1lbV9vZmZzZXQ6ICAgICAgICAgd2hlbiBtZW1vcnkgaW4gdGhlIGFzc29jaWF0ZWQgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4gaXMKLSAqICAgICAgICAgICAgICAgICAgICAgIFY0TDJfTUVNT1JZX01NQVAsIGVxdWFscyB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIG1lbW9yeSBmb3IgdGhpcyBwbGFuZSAob3IgaXMgYSAiY29va2llIiB0aGF0Ci0gKiAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgcGFzc2VkIHRvIG1tYXAoKSBjYWxsZWQgb24gdGhlIHZpZGVvIG5vZGUpCi0gKiBAdXNlcnB0cjogICAgICAgICAgICB3aGVuIG1lbW9yeSBpcyBWNEwyX01FTU9SWV9VU0VSUFRSLCBhIHVzZXJzcGFjZSBwb2ludGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICBwb2ludGluZyB0byB0aGlzIHBsYW5lCi0gKiBAZGF0YV9vZmZzZXQ6ICAgICAgICBvZmZzZXQgaW4gdGhlIHBsYW5lIHRvIHRoZSBzdGFydCBvZiBkYXRhOyB1c3VhbGx5IDAsCi0gKiAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgdGhlcmUgaXMgYSBoZWFkZXIgaW4gZnJvbnQgb2YgdGhlIGRhdGEKLSAqCi0gKiBNdWx0aS1wbGFuYXIgYnVmZmVycyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIHBsYW5lcywgZS5nLiBhbiBZQ2JDciBidWZmZXIKLSAqIHdpdGggdHdvIHBsYW5lcyBjYW4gaGF2ZSBvbmUgcGxhbmUgZm9yIFksIGFuZCBhbm90aGVyIGZvciBpbnRlcmxlYXZlZCBDYkNyCi0gKiBjb21wb25lbnRzLiBFYWNoIHBsYW5lIGNhbiByZXNpZGUgaW4gYSBzZXBhcmF0ZSBtZW1vcnkgYnVmZmVyLCBvciBldmVuIGluCi0gKiBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgbWVtb3J5IG5vZGUgKGUuZy4gaW4gZW1iZWRkZWQgZGV2aWNlcykuCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBsYW5lIj52NGwyX3BsYW5lPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGJ5dGVzdXNlZDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgX191MzIgICAgICAgICAgIG1lbV9vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIHVzZXJwdHI7Ci0gICAgICAgIH0gbTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgZGF0YV9vZmZzZXQ7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzExXTsKLX07Ci0KLS8qKgotICogc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4gLSB2aWRlbyBidWZmZXIgaW5mbwotICogQGluZGV4OiAgICAgIGlkIG51bWJlciBvZiB0aGUgYnVmZmVyCi0gKiBAdHlwZTogICAgICAgYnVmZmVyIHR5cGUgKHR5cGUgPT0gKl9NUExBTkUgZm9yIG11bHRpcGxhbmFyIGJ1ZmZlcnMpCi0gKiBAYnl0ZXN1c2VkOiAgbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkIGJ5IGRhdGEgaW4gdGhlIGJ1ZmZlciAocGF5bG9hZCk7Ci0gKiAgICAgICAgICAgICAgdW51c2VkIChzZXQgdG8gMCkgZm9yIG11bHRpcGxhbmFyIGJ1ZmZlcnMKLSAqIEBmbGFnczogICAgICBidWZmZXIgaW5mb3JtYXRpb25hbCBmbGFncwotICogQGZpZWxkOiAgICAgIGZpZWxkIG9yZGVyIG9mIHRoZSBpbWFnZSBpbiB0aGUgYnVmZmVyCi0gKiBAdGltZXN0YW1wOiAgZnJhbWUgdGltZXN0YW1wCi0gKiBAdGltZWNvZGU6ICAgZnJhbWUgdGltZWNvZGUKLSAqIEBzZXF1ZW5jZTogICBzZXF1ZW5jZSBjb3VudCBvZiB0aGlzIGZyYW1lCi0gKiBAbWVtb3J5OiAgICAgdGhlIG1ldGhvZCwgaW4gd2hpY2ggdGhlIGFjdHVhbCB2aWRlbyBkYXRhIGlzIHBhc3NlZAotICogQG9mZnNldDogICAgIGZvciBub24tbXVsdGlwbGFuYXIgYnVmZmVycyB3aXRoIG1lbW9yeSA9PSBWNEwyX01FTU9SWV9NTUFQOwotICogICAgICAgICAgICAgIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGV2aWNlIG1lbW9yeSBmb3IgdGhpcyBwbGFuZSwKLSAqICAgICAgICAgICAgICAob3IgYSAiY29va2llIiB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbW1hcCgpIGFzIG9mZnNldCkKLSAqIEB1c2VycHRyOiAgICBmb3Igbm9uLW11bHRpcGxhbmFyIGJ1ZmZlcnMgd2l0aCBtZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUjsKLSAqICAgICAgICAgICAgICBhIHVzZXJzcGFjZSBwb2ludGVyIHBvaW50aW5nIHRvIHRoaXMgYnVmZmVyCi0gKiBAcGxhbmVzOiAgICAgZm9yIG11bHRpcGxhbmFyIGJ1ZmZlcnM7IHVzZXJzcGFjZSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiBwbGFuZQotICogICAgICAgICAgICAgIGluZm8gc3RydWN0cyBmb3IgdGhpcyBidWZmZXIKLSAqIEBsZW5ndGg6ICAgICBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgKE5PVCBpdHMgcGF5bG9hZCkgZm9yIHNpbmdsZS1wbGFuZQotICogICAgICAgICAgICAgIGJ1ZmZlcnMgKHdoZW4gdHlwZSAhPSAqX01QTEFORSk7IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUKLSAqICAgICAgICAgICAgICBwbGFuZXMgYXJyYXkgZm9yIG11bHRpLXBsYW5lIGJ1ZmZlcnMKLSAqIEBpbnB1dDogICAgICBpbnB1dCBudW1iZXIgZnJvbSB3aGljaCB0aGUgdmlkZW8gZGF0YSBoYXMgaGFzIGJlZW4gY2FwdHVyZWQKLSAqCi0gKiBDb250YWlucyBkYXRhIGV4Y2hhbmdlZCBieSBhcHBsaWNhdGlvbiBhbmQgZHJpdmVyIHVzaW5nIG9uZSBvZiB0aGUgU3RyZWFtaW5nCi0gKiBJL08gbWV0aG9kcy4KLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBpbmRleDsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgIHR5cGU7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGJ5dGVzdXNlZDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+djRsMl9maWVsZDwvbGluaz4gICAgICAgICBmaWVsZDsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgICAgICAgICAgdGltZXN0YW1wOwotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi10aW1lY29kZSI+djRsMl90aW1lY29kZTwvbGluaz4gICAgdGltZWNvZGU7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOwotCi0gICAgICAgIC8qIG1lbW9yeSBsb2NhdGlvbiAqLwotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbWVtb3J5Ij52NGwyX21lbW9yeTwvbGluaz4gICAgICAgIG1lbW9yeTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIHVzZXJwdHI7Ci0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGxhbmUiPnY0bDJfcGxhbmU8L2xpbms+ICpwbGFuZXM7Ci0gICAgICAgIH0gbTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBpbnB1dDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci19OwotCi0vKiAgRmxhZ3MgZm9yICdmbGFncycgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19NQVBQRUQgICAgMHgwMDAxICAvKiBCdWZmZXIgaXMgbWFwcGVkIChmbGFnKSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1FVRVVFRCAgICAweDAwMDIgIC8qIEJ1ZmZlciBpcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19ET05FICAgICAgMHgwMDA0ICAvKiBCdWZmZXIgaXMgcmVhZHkgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRSAgMHgwMDA4ICAvKiBJbWFnZSBpcyBhIGtleWZyYW1lIChJLWZyYW1lKSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1BGUkFNRSAgICAweDAwMTAgIC8qIEltYWdlIGlzIGEgUC1mcmFtZSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRSAgICAweDAwMjAgIC8qIEltYWdlIGlzIGEgQi1mcmFtZSAqLwotLyogQnVmZmVyIGlzIHJlYWR5LCBidXQgdGhlIGRhdGEgY29udGFpbmVkIHdpdGhpbiBpcyBjb3JydXB0ZWQuICovCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRVJST1IgICAgIDB4MDA0MAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVDT0RFICAweDAxMDAgIC8qIHRpbWVjb2RlIGZpZWxkIGlzIHZhbGlkICovCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfSU5QVVQgICAgIDB4MDIwMCAgLyogaW5wdXQgZmllbGQgaXMgdmFsaWQgKi8KLQotLyoKLSAqICAgICAgTyBWIEUgUiBMIEEgWSAgIFAgUiBFIFYgSSBFIFcKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhbWVidWZmZXIiPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci0vKiBGSVhNRTogaW4gdGhlb3J5IHdlIHNob3VsZCBwYXNzIHNvbWV0aGluZyBsaWtlIFBDSSBkZXZpY2UgKyBtZW1vcnkKLSAqIHJlZ2lvbiArIG9mZnNldCBpbnN0ZWFkIG9mIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyAqLwotICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqYmFzZTsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGl4LWZvcm1hdCI+djRsMl9waXhfZm9ybWF0PC9saW5rPiAgZm10OwotfTsKLS8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZC4gUmVhZCBvbmx5ICovCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWSAgICAgMHgwMDAxCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORyAgICAgMHgwMDA0Ci0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HICAgMHgwMDA4Ci0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfQUxQSEEgICAgICAgMHgwMDEwCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBICAgICAgMHgwMDIwCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfSU5WX0FMUEhBICAgMHgwMDQwCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfU1JDX0NIUk9NQUtFWSAgICAgMHgwMDgwCi0vKiAgRmxhZ3MgZm9yIHRoZSAnZmxhZ3MnIGZpZWxkLiAqLwotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19QUklNQVJZICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVkgICAgICAgIDB4MDAwNAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9BTFBIQSAgICAgIDB4MDAwOAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEEgICAgIDB4MDAxMAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEgIDB4MDAyMAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19TUkNfQ0hST01BS0VZICAgIDB4MDA0MAotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jbGlwIj52NGwyX2NsaXA8L2xpbms+IHsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgYzsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2xpcCI+djRsMl9jbGlwPC9saW5rPiAgICAgICAgX191c2VyICpuZXh0OwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItd2luZG93Ij52NGwyX3dpbmRvdzwvbGluaz4gewotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZWN0Ij52NGwyX3JlY3Q8L2xpbms+ICAgICAgICB3OwotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItZmllbGQiPnY0bDJfZmllbGQ8L2xpbms+ICAgICAgICAgZmllbGQ7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNocm9tYWtleTsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2xpcCI+djRsMl9jbGlwPC9saW5rPiAgICAgICAgX191c2VyICpjbGlwczsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgY2xpcGNvdW50OwotICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICBfX3VzZXIgKmJpdG1hcDsKLSAgICAgICAgX191OCAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX2FscGhhOwotfTsKLQotLyoKLSAqICAgICAgQyBBIFAgVCBVIFIgRSAgIFAgQSBSIEEgTSBFIFQgRSBSIFMKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY2FwdHVyZXBhcm0iPnY0bDJfY2FwdHVyZXBhcm08L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgIGNhcGFiaWxpdHk7ICAgIC8qICBTdXBwb3J0ZWQgbW9kZXMgKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgIGNhcHR1cmVtb2RlOyAgIC8qICBDdXJyZW50IG1vZGUgKi8KLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICB0aW1lcGVyZnJhbWU7ICAvKiAgVGltZSBwZXIgZnJhbWUgaW4gLjF1cyB1bml0cyAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgZXh0ZW5kZWRtb2RlOyAgLyogIERyaXZlci1zcGVjaWZpYyBleHRlbnNpb25zICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICByZWFkYnVmZmVyczsgICAvKiAgIyBvZiBidWZmZXJzIGZvciByZWFkICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICByZXNlcnZlZFs0XTsKLX07Ci0KLS8qICBGbGFncyBmb3IgJ2NhcGFiaWxpdHknIGFuZCAnY2FwdHVyZW1vZGUnIGZpZWxkcyAqLwotI2RlZmluZSBWNEwyX01PREVfSElHSFFVQUxJVFkgICAweDAwMDEgIC8qICBIaWdoIHF1YWxpdHkgaW1hZ2luZyBtb2RlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1RJTUVQRVJGUkFNRSAgIDB4MTAwMCAgLyogIHRpbWVwZXJmcmFtZSBmaWVsZCBpcyBzdXBwb3J0ZWQgKi8KLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItb3V0cHV0cGFybSI+djRsMl9vdXRwdXRwYXJtPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICBjYXBhYmlsaXR5OyAgIC8qICBTdXBwb3J0ZWQgbW9kZXMgKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgIG91dHB1dG1vZGU7ICAgLyogIEN1cnJlbnQgbW9kZSAqLwotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmFjdCI+djRsMl9mcmFjdDwvbGluaz4gIHRpbWVwZXJmcmFtZTsgLyogIFRpbWUgcGVyIGZyYW1lIGluIHNlY29uZHMgKi8KLSAgICAgICAgX191MzIgICAgICAgICAgICAgIGV4dGVuZGVkbW9kZTsgLyogIERyaXZlci1zcGVjaWZpYyBleHRlbnNpb25zICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICB3cml0ZWJ1ZmZlcnM7IC8qICAjIG9mIGJ1ZmZlcnMgZm9yIHdyaXRlICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICByZXNlcnZlZFs0XTsKLX07Ci0KLS8qCi0gKiAgICAgIEkgTiBQIFUgVCAgIEkgTSBBIEcgRSAgIEMgUiBPIFAgUCBJIE4gRwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jcm9wY2FwIj52NGwyX2Nyb3BjYXA8L2xpbms+IHsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiAgICAgIHR5cGU7Ci0gICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlY3QiPnY0bDJfcmVjdDwvbGluaz4gICAgICAgIGJvdW5kczsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmVjdCI+djRsMl9yZWN0PC9saW5rPiAgICAgICAgZGVmcmVjdDsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhY3QiPnY0bDJfZnJhY3Q8L2xpbms+ICAgICAgIHBpeGVsYXNwZWN0OwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItY3JvcCI+djRsMl9jcm9wPC9saW5rPiB7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gICAgICB0eXBlOwotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1yZWN0Ij52NGwyX3JlY3Q8L2xpbms+ICAgICAgICBjOwotfTsKLQotLyoKLSAqICAgICAgQSBOIEEgTCBPIEcgICBWIEkgRCBFIE8gICBTIFQgQSBOIEQgQSBSIEQKLSAqLwotCi10eXBlZGVmIF9fdTY0IHY0bDJfc3RkX2lkOwotCi0vKiBvbmUgYml0IGZvciBlYWNoICovCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9CICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDAyKQotI2RlZmluZSBWNEwyX1NURF9QQUxfRyAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDQpCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9IICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwOCkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0kgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDEwKQotI2RlZmluZSBWNEwyX1NURF9QQUxfRCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMjApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9EMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0sgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQotCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9NICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDEwMCkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX04gICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMjAwKQotI2RlZmluZSBWNEwyX1NURF9QQUxfTmMgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA0MDApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF82MCAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDgwMCkKLQotI2RlZmluZSBWNEwyX1NURF9OVFNDX00gICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDEwMDApCi0jZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKLSNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQotI2RlZmluZSBWNEwyX1NURF9OVFNDX01fS1IgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDgwMDApCi0KLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fQiAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDEwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9EICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA0MDAwMCkKLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDgwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwNDAwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MQyAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDA4MDAwMDApCi0KLS8qIEFUU0MvSERUViAqLwotI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICAgICAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICAgICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKLQotLyogRklYTUU6Ci0gICBBbHRob3VnaCBzdGRfaWQgaXMgNjQgYml0cywgdGhlcmUgaXMgYW4gaXNzdWUgb24gUFBDMzIgYXJjaGl0ZWN0dXJlIHRoYXQKLSAgIG1ha2VzIHN3aXRjaChfX3U2NCkgdG8gYnJlYWsuIFNvLCB0aGVyZSdzIGEgaGFjayBvbiB2NGwyLWNvbW1vbi5jIHJvdW5kaW5nCi0gICB0aGlzIHZhbHVlIHRvIDMyIGJpdHMuCi0gICBBcywgY3VycmVudGx5LCB0aGUgbWF4IHZhbHVlIGlzIGZvciBWNEwyX1NURF9BVFNDXzE2X1ZTQiAoMzAgYml0cyB3aWRlKSwKLSAgIGl0IHNob3VsZCB3b3JrIGZpbmUuIEhvd2V2ZXIsIGlmIG5lZWRlZCB0byBhZGQgbW9yZSB0aGFuIHR3byBzdGFuZGFyZHMsCi0gICB2NGwyLWNvbW1vbi5jIHNob3VsZCBiZSBmaXhlZC4KLSAqLwotCi0vKiBzb21lIG1lcmdlZCBzdGFuZGFyZHMgKi8KLSNkZWZpbmUgVjRMMl9TVERfTU4gICAgIChWNEwyX1NURF9QQUxfTXxWNEwyX1NURF9QQUxfTnxWNEwyX1NURF9QQUxfTmN8VjRMMl9TVERfTlRTQykKLSNkZWZpbmUgVjRMMl9TVERfQiAgICAgIChWNEwyX1NURF9QQUxfQnxWNEwyX1NURF9QQUxfQjF8VjRMMl9TVERfU0VDQU1fQikKLSNkZWZpbmUgVjRMMl9TVERfR0ggICAgIChWNEwyX1NURF9QQUxfR3xWNEwyX1NURF9QQUxfSHxWNEwyX1NURF9TRUNBTV9HfFY0TDJfU1REX1NFQ0FNX0gpCi0jZGVmaW5lIFY0TDJfU1REX0RLICAgICAoVjRMMl9TVERfUEFMX0RLfFY0TDJfU1REX1NFQ0FNX0RLKQotCi0vKiBzb21lIGNvbW1vbiBuZWVkZWQgc3R1ZmYgKi8KLSNkZWZpbmUgVjRMMl9TVERfUEFMX0JHICAgICAgICAgKFY0TDJfU1REX1BBTF9CICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9CMSAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF9HKQotI2RlZmluZSBWNEwyX1NURF9QQUxfREsgICAgICAgICAoVjRMMl9TVERfUEFMX0QgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0QxICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX0spCi0jZGVmaW5lIFY0TDJfU1REX1BBTCAgICAgICAgICAgIChWNEwyX1NURF9QQUxfQkcgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfREsgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfSCAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9QQUxfSSkKLSNkZWZpbmUgVjRMMl9TVERfTlRTQyAgICAgICAgICAgKFY0TDJfU1REX05UU0NfTSAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX05UU0NfTV9KUCAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX05UU0NfTV9LUikKLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fREsgICAgICAgKFY0TDJfU1REX1NFQ0FNX0QgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0sgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1NFQ0FNX0sxKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTSAgICAgICAgICAoVjRMMl9TVERfU0VDQU1fQiAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU1fRyAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU1fSCAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU1fREsgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU1fTCAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU1fTEMpCi0KLSNkZWZpbmUgVjRMMl9TVERfNTI1XzYwICAgICAgICAgKFY0TDJfU1REX1BBTF9NICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX1BBTF82MCAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX05UU0MgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfU1REX05UU0NfNDQzKQotI2RlZmluZSBWNEwyX1NURF82MjVfNTAgICAgICAgICAoVjRMMl9TVERfUEFMICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX04gICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfUEFMX05jICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjRMMl9TVERfU0VDQU0pCi0jZGVmaW5lIFY0TDJfU1REX0FUU0MgICAgICAgICAgIChWNEwyX1NURF9BVFNDXzhfVlNCICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF9BVFNDXzE2X1ZTQikKLQotI2RlZmluZSBWNEwyX1NURF9VTktOT1dOICAgICAgICAwCi0jZGVmaW5lIFY0TDJfU1REX0FMTCAgICAgICAgICAgIChWNEwyX1NURF81MjVfNjAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1NURF82MjVfNTApCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXN0YW5kYXJkIj52NGwyX3N0YW5kYXJkPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIGluZGV4OwotICAgICAgICB2NGwyX3N0ZF9pZCAgICAgICAgICBpZDsKLSAgICAgICAgX191OCAgICAgICAgICAgICAgICAgbmFtZVsyNF07Ci0gICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYWN0Ij52NGwyX2ZyYWN0PC9saW5rPiAgICBmcmFtZXBlcmlvZDsgLyogRnJhbWVzLCBub3QgZmllbGRzICovCi0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIGZyYW1lbGluZXM7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgIHJlc2VydmVkWzRdOwotfTsKLQotLyoKLSAqICAgICAgViBJIEQgRSBPICAgICAgIFQgSSBNIEkgTiBHIFMgICBEIFYgICAgIFAgUiBFIFMgRSBUCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWR2LXByZXNldCI+djRsMl9kdl9wcmVzZXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICBwcmVzZXQ7Ci0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbNF07Ci19OwotCi0vKgotICogICAgICBEIFYgICAgIFAgUiBFIFMgRSBUIFMgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtZW51bS1wcmVzZXQiPnY0bDJfZHZfZW51bV9wcmVzZXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICBpbmRleDsKLSAgICAgICAgX191MzIgICBwcmVzZXQ7Ci0gICAgICAgIF9fdTggICAgbmFtZVszMl07IC8qIE5hbWUgb2YgdGhlIHByZXNldCB0aW1pbmcgKi8KLSAgICAgICAgX191MzIgICB3aWR0aDsKLSAgICAgICAgX191MzIgICBoZWlnaHQ7Ci0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbNF07Ci19OwotCi0vKgotICogICAgICBEIFYgICAgIFAgUiBFIFMgRSBUICAgICBWIEEgTCBVIEUgUwotICovCi0jZGVmaW5lICAgICAgICAgVjRMMl9EVl9JTlZBTElEICAgICAgICAgMAotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNDgwUDU5Xzk0ICAgICAgIDEgLyogQlQuMTM2MiAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNTc2UDUwICAgICAgICAgIDIgLyogQlQuMTM2MiAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDI0ICAgICAgICAgIDMgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDI1ICAgICAgICAgIDQgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDMwICAgICAgICAgIDUgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDUwICAgICAgICAgIDYgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDU5Xzk0ICAgICAgIDcgLyogU01QVEUgMjc0TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfNzIwUDYwICAgICAgICAgIDggLyogU01QVEUgMjc0TS8yOTZNICovCi0jZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwSTI5Xzk3ICAgICAgOSAvKiBCVC4xMTIwLyBTTVBURSAyNzRNICovCi0jZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwSTMwICAgICAgICAgMTAgLyogQlQuMTEyMC8gU01QVEUgMjc0TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MEkyNSAgICAgICAgIDExIC8qIEJULjExMjAgKi8KLSNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBJNTAgICAgICAgICAxMiAvKiBTTVBURSAyOTZNICovCi0jZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwSTYwICAgICAgICAgMTMgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MFAyNCAgICAgICAgIDE0IC8qIFNNUFRFIDI5Nk0gKi8KLSNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBQMjUgICAgICAgICAxNSAvKiBTTVBURSAyOTZNICovCi0jZGVmaW5lICAgICAgICAgVjRMMl9EVl8xMDgwUDMwICAgICAgICAgMTYgLyogU01QVEUgMjk2TSAqLwotI2RlZmluZSAgICAgICAgIFY0TDJfRFZfMTA4MFA1MCAgICAgICAgIDE3IC8qIEJULjExMjAgKi8KLSNkZWZpbmUgICAgICAgICBWNEwyX0RWXzEwODBQNjAgICAgICAgICAxOCAvKiBCVC4xMTIwICovCi0KLS8qCi0gKiAgICAgIEQgViAgICAgQiBUICAgICBUIEkgTSBJIE4gRyBTCi0gKi8KLQotLyogQlQuNjU2L0JULjExMjAgdGltaW5nIGRhdGEgKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ0LXRpbWluZ3MiPnY0bDJfYnRfdGltaW5nczwvbGluaz4gewotICAgICAgICBfX3UzMiAgIHdpZHRoOyAgICAgICAgICAvKiB3aWR0aCBpbiBwaXhlbHMgKi8KLSAgICAgICAgX191MzIgICBoZWlnaHQ7ICAgICAgICAgLyogaGVpZ2h0IGluIGxpbmVzICovCi0gICAgICAgIF9fdTMyICAgaW50ZXJsYWNlZDsgICAgIC8qIEludGVybGFjZWQgb3IgcHJvZ3Jlc3NpdmUgKi8KLSAgICAgICAgX191MzIgICBwb2xhcml0aWVzOyAgICAgLyogUG9zaXRpdmUgb3IgbmVnYXRpdmUgcG9sYXJpdHkgKi8KLSAgICAgICAgX191NjQgICBwaXhlbGNsb2NrOyAgICAgLyogUGl4ZWwgY2xvY2sgaW4gSFouIEV4LiA3NC4yNU1Iei0mZ3Q7NzQyNTAwMDAgKi8KLSAgICAgICAgX191MzIgICBoZnJvbnRwb3JjaDsgICAgLyogSG9yaXpwb250YWwgZnJvbnQgcG9yY2ggaW4gcGl4ZWxzICovCi0gICAgICAgIF9fdTMyICAgaHN5bmM7ICAgICAgICAgIC8qIEhvcml6b250YWwgU3luYyBsZW5ndGggaW4gcGl4ZWxzICovCi0gICAgICAgIF9fdTMyICAgaGJhY2twb3JjaDsgICAgIC8qIEhvcml6b250YWwgYmFjayBwb3JjaCBpbiBwaXhlbHMgKi8KLSAgICAgICAgX191MzIgICB2ZnJvbnRwb3JjaDsgICAgLyogVmVydGljYWwgZnJvbnQgcG9yY2ggaW4gcGl4ZWxzICovCi0gICAgICAgIF9fdTMyICAgdnN5bmM7ICAgICAgICAgIC8qIFZlcnRpY2FsIFN5bmMgbGVuZ3RoIGluIGxpbmVzICovCi0gICAgICAgIF9fdTMyICAgdmJhY2twb3JjaDsgICAgIC8qIFZlcnRpY2FsIGJhY2sgcG9yY2ggaW4gbGluZXMgKi8KLSAgICAgICAgX191MzIgICBpbF92ZnJvbnRwb3JjaDsgLyogVmVydGljYWwgZnJvbnQgcG9yY2ggZm9yIGJvdHRvbSBmaWVsZCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIF9fdTMyICAgaWxfdnN5bmM7ICAgICAgIC8qIFZlcnRpY2FsIHN5bmMgbGVuZ3RoIGZvciBib3R0b20gZmllbGQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJsYWNlZCBmaWVsZCBmb3JtYXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBfX3UzMiAgIGlsX3ZiYWNrcG9yY2g7ICAvKiBWZXJ0aWNhbCBiYWNrIHBvcmNoIGZvciBib3R0b20gZmllbGQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJsYWNlZCBmaWVsZCBmb3JtYXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBJbnRlcmxhY2VkIG9yIHByb2dyZXNzaXZlIGZvcm1hdCAqLwotI2RlZmluZSBWNEwyX0RWX1BST0dSRVNTSVZFICAgICAwCi0jZGVmaW5lIFY0TDJfRFZfSU5URVJMQUNFRCAgICAgIDEKLQotLyogUG9sYXJpdGllcy4gSWYgYml0IGlzIG5vdCBzZXQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgbmVnYXRpdmUgcG9sYXJpdHkgKi8KLSNkZWZpbmUgVjRMMl9EVl9WU1lOQ19QT1NfUE9MICAgMHgwMDAwMDAwMQotI2RlZmluZSBWNEwyX0RWX0hTWU5DX1BPU19QT0wgICAweDAwMDAwMDAyCi0KLQotLyogRFYgdGltaW5ncyAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtdGltaW5ncyI+djRsMl9kdl90aW1pbmdzPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyIHR5cGU7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idC10aW1pbmdzIj52NGwyX2J0X3RpbWluZ3M8L2xpbms+ICBidDsKLSAgICAgICAgICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzMyXTsKLSAgICAgICAgfTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBWYWx1ZXMgZm9yIHRoZSB0eXBlIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfRFZfQlRfNjU2XzExMjAgICAgIDAgICAgICAgLyogQlQuNjU2LzExMjAgdGltaW5nIHR5cGUgKi8KLQotLyoKLSAqICAgICAgViBJIEQgRSBPICAgSSBOIFAgVSBUIFMKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaW5wdXQiPnY0bDJfaW5wdXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgIGluZGV4OyAgICAgICAgICAgICAvKiAgV2hpY2ggaW5wdXQgKi8KLSAgICAgICAgX191OCAgICAgICAgIG5hbWVbMzJdOyAgICAgICAgICAvKiAgTGFiZWwgKi8KLSAgICAgICAgX191MzIgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAvKiAgVHlwZSBvZiBpbnB1dCAqLwotICAgICAgICBfX3UzMiAgICAgICAgYXVkaW9zZXQ7ICAgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCi0gICAgICAgIF9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIEFzc29jaWF0ZWQgdHVuZXIgKi8KLSAgICAgICAgdjRsMl9zdGRfaWQgIHN0ZDsKLSAgICAgICAgX191MzIgICAgICAgIHN0YXR1czsKLSAgICAgICAgX191MzIgICAgICAgIGNhcGFiaWxpdGllczsKLSAgICAgICAgX191MzIgICAgICAgIHJlc2VydmVkWzNdOwotfTsKLQotLyogIFZhbHVlcyBmb3IgdGhlICd0eXBlJyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfVFVORVIgICAgICAgICAgIDEKLSNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSAgICAgICAgICAyCi0KLS8qIGZpZWxkICdzdGF0dXMnIC0gZ2VuZXJhbCAqLwotI2RlZmluZSBWNEwyX0lOX1NUX05PX1BPV0VSICAgIDB4MDAwMDAwMDEgIC8qIEF0dGFjaGVkIGRldmljZSBpcyBvZmYgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19TSUdOQUwgICAweDAwMDAwMDAyCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgICAgMHgwMDAwMDAwNAotCi0vKiBmaWVsZCAnc3RhdHVzJyAtIHNlbnNvciBvcmllbnRhdGlvbiAqLwotLyogSWYgc2Vuc29yIGlzIG1vdW50ZWQgdXBzaWRlIGRvd24gc2V0IGJvdGggYml0cyAqLwotI2RlZmluZSBWNEwyX0lOX1NUX0hGTElQICAgICAgIDB4MDAwMDAwMTAgLyogRnJhbWVzIGFyZSBmbGlwcGVkIGhvcml6b250YWxseSAqLwotI2RlZmluZSBWNEwyX0lOX1NUX1ZGTElQICAgICAgIDB4MDAwMDAwMjAgLyogRnJhbWVzIGFyZSBmbGlwcGVkIHZlcnRpY2FsbHkgKi8KLQotLyogZmllbGQgJ3N0YXR1cycgLSBhbmFsb2cgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19IX0xPQ0sgICAweDAwMDAwMTAwICAvKiBObyBob3Jpem9udGFsIHN5bmMgbG9jayAqLwotI2RlZmluZSBWNEwyX0lOX1NUX0NPTE9SX0tJTEwgIDB4MDAwMDAyMDAgIC8qIENvbG9yIGtpbGxlciBpcyBhY3RpdmUgKi8KLQotLyogZmllbGQgJ3N0YXR1cycgLSBkaWdpdGFsICovCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fU1lOQyAgICAgMHgwMDAxMDAwMCAgLyogTm8gc3luY2hyb25pemF0aW9uIGxvY2sgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19FUVUgICAgICAweDAwMDIwMDAwICAvKiBObyBlcXVhbGl6ZXIgbG9jayAqLwotI2RlZmluZSBWNEwyX0lOX1NUX05PX0NBUlJJRVIgIDB4MDAwNDAwMDAgIC8qIENhcnJpZXIgcmVjb3ZlcnkgZmFpbGVkICovCi0KLS8qIGZpZWxkICdzdGF0dXMnIC0gVkNSIGFuZCBzZXQtdG9wIGJveCAqLwotI2RlZmluZSBWNEwyX0lOX1NUX01BQ1JPVklTSU9OIDB4MDEwMDAwMDAgIC8qIE1hY3JvdmlzaW9uIGRldGVjdGVkICovCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTICAgMHgwMjAwMDAwMCAgLyogQ29uZGl0aW9uYWwgYWNjZXNzIGRlbmllZCAqLwotI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAgICAgICAgIDB4MDQwMDAwMDAgIC8qIFZUUiB0aW1lIGNvbnN0YW50ICovCi0KLS8qIGNhcGFiaWxpdGllcyBmbGFncyAqLwotI2RlZmluZSBWNEwyX0lOX0NBUF9QUkVTRVRTICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogU3VwcG9ydHMgU19EVl9QUkVTRVQgKi8KLSNkZWZpbmUgVjRMMl9JTl9DQVBfQ1VTVE9NX1RJTUlOR1MgICAgICAweDAwMDAwMDAyIC8qIFN1cHBvcnRzIFNfRFZfVElNSU5HUyAqLwotI2RlZmluZSBWNEwyX0lOX0NBUF9TVEQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogU3VwcG9ydHMgU19TVEQgKi8KLQotLyoKLSAqICAgICAgViBJIEQgRSBPICAgTyBVIFQgUCBVIFQgUwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1vdXRwdXQiPnY0bDJfb3V0cHV0PC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICBpbmRleDsgICAgICAgICAgICAgLyogIFdoaWNoIG91dHB1dCAqLwotICAgICAgICBfX3U4ICAgICAgICAgbmFtZVszMl07ICAgICAgICAgIC8qICBMYWJlbCAqLwotICAgICAgICBfX3UzMiAgICAgICAgdHlwZTsgICAgICAgICAgICAgIC8qICBUeXBlIG9mIG91dHB1dCAqLwotICAgICAgICBfX3UzMiAgICAgICAgYXVkaW9zZXQ7ICAgICAgICAgIC8qICBBc3NvY2lhdGVkIGF1ZGlvcyAoYml0ZmllbGQpICovCi0gICAgICAgIF9fdTMyICAgICAgICBtb2R1bGF0b3I7ICAgICAgICAgLyogIEFzc29jaWF0ZWQgbW9kdWxhdG9yICovCi0gICAgICAgIHY0bDJfc3RkX2lkICBzdGQ7Ci0gICAgICAgIF9fdTMyICAgICAgICBjYXBhYmlsaXRpZXM7Ci0gICAgICAgIF9fdTMyICAgICAgICByZXNlcnZlZFszXTsKLX07Ci0vKiAgVmFsdWVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SICAgICAgICAgICAgICAxCi0jZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWSAgICAgICAzCi0KLS8qIGNhcGFiaWxpdGllcyBmbGFncyAqLwotI2RlZmluZSBWNEwyX09VVF9DQVBfUFJFU0VUUyAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogU3VwcG9ydHMgU19EVl9QUkVTRVQgKi8KLSNkZWZpbmUgVjRMMl9PVVRfQ0FQX0NVU1RPTV9USU1JTkdTICAgICAweDAwMDAwMDAyIC8qIFN1cHBvcnRzIFNfRFZfVElNSU5HUyAqLwotI2RlZmluZSBWNEwyX09VVF9DQVBfU1REICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogU3VwcG9ydHMgU19TVEQgKi8KLQotLyoKLSAqICAgICAgQyBPIE4gVCBSIE8gTCBTCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbnRyb2wiPnY0bDJfY29udHJvbDwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBpZDsKLSAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgdmFsdWU7Ci19OwotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbCI+djRsMl9leHRfY29udHJvbDwvbGluaz4gewotICAgICAgICBfX3UzMiBpZDsKLSAgICAgICAgX191MzIgc2l6ZTsKLSAgICAgICAgX191MzIgcmVzZXJ2ZWQyWzFdOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgX19zMzIgdmFsdWU7Ci0gICAgICAgICAgICAgICAgX19zNjQgdmFsdWU2NDsKLSAgICAgICAgICAgICAgICBjaGFyICpzdHJpbmc7Ci0gICAgICAgIH07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4gewotICAgICAgICBfX3UzMiBjdHJsX2NsYXNzOwotICAgICAgICBfX3UzMiBjb3VudDsKLSAgICAgICAgX191MzIgZXJyb3JfaWR4OwotICAgICAgICBfX3UzMiByZXNlcnZlZFsyXTsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2wiPnY0bDJfZXh0X2NvbnRyb2w8L2xpbms+ICpjb250cm9sczsKLX07Ci0KLS8qICBWYWx1ZXMgZm9yIGN0cmxfY2xhc3MgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX1VTRVIgMHgwMDk4MDAwMCAvKiBPbGQtc3R5bGUgJ3VzZXInIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAgLyogTVBFRy1jb21wcmVzc2lvbiBjb250cm9scyAqLwotI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIDB4MDA5YTAwMDAgICAgICAgLyogQ2FtZXJhIGNsYXNzIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19GTV9UWCAweDAwOWIwMDAwICAgICAgICAvKiBGTSBNb2R1bGF0b3IgY29udHJvbCBjbGFzcyAqLwotCi0jZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICAgICAgICAgKDB4MGZmZmZmZmYpCi0jZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgICAgKChpZCkgJmFtcDsgMHgwZmZmMDAwMFVMKQotI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmYW1wOyAweGZmZmYpICZndDs9IDB4MTAwMCkKLQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWN0cmwtdHlwZSI+djRsMl9jdHJsX3R5cGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiAgICAgICA9IDEsCi0gICAgICAgIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4gICAgICAgPSAyLAotICAgICAgICBWNEwyX0NUUkxfVFlQRV9NRU5VICAgICAgICAgID0gMywKLSAgICAgICAgVjRMMl9DVFJMX1RZUEVfQlVUVE9OICAgICAgICA9IDQsCi0gICAgICAgIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCAgICAgPSA1LAotICAgICAgICBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTICAgID0gNiwKLSAgICAgICAgVjRMMl9DVFJMX1RZUEVfU1RSSU5HICAgICAgICA9IDcsCi19OwotCi0vKiAgVXNlZCBpbiB0aGUgVklESU9DX1FVRVJZQ1RSTCBpb2N0bCBmb3IgcXVlcnlpbmcgY29udHJvbHMgKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5Y3RybCI+djRsMl9xdWVyeWN0cmw8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgaWQ7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1jdHJsLXR5cGUiPnY0bDJfY3RybF90eXBlPC9saW5rPiAgdHlwZTsKLSAgICAgICAgX191OCAgICAgICAgICAgICAgICAgbmFtZVszMl07ICAvKiBXaGF0ZXZlciAqLwotICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICBtaW5pbXVtOyAgIC8qIE5vdGUgc2lnbmVkbmVzcyAqLwotICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICBtYXhpbXVtOwotICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICBzdGVwOwotICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlOwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICBmbGFnczsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbMl07Ci19OwotCi0vKiAgVXNlZCBpbiB0aGUgVklESU9DX1FVRVJZTUVOVSBpb2N0bCBmb3IgcXVlcnlpbmcgbWVudSBpdGVtcyAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcXVlcnltZW51Ij52NGwyX3F1ZXJ5bWVudTwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgaWQ7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICBpbmRleDsKLSAgICAgICAgX191OCAgICAgICAgICAgIG5hbWVbMzJdOyAgICAgICAvKiBXaGF0ZXZlciAqLwotICAgICAgICBfX3UzMiAgICAgICAgICAgcmVzZXJ2ZWQ7Ci19OwotCi0vKiAgQ29udHJvbCBmbGFncyAgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQgICAgICAgICAweDAwMDEKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZICAgICAgICAweDAwMDQKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFICAgICAgICAgICAweDAwMDgKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgICAgICAgICAweDAwMTAKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSAgICAgICAweDAwNDAKLQotLyogIFF1ZXJ5IGZsYWcsIHRvIGJlIE9SZWQgd2l0aCB0aGUgY29udHJvbCBJRCAqLwotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgICAgICAgIDB4ODAwMDAwMDAKLQotLyogIFVzZXItY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCi0jZGVmaW5lIFY0TDJfQ0lEX0JBU0UgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkFTRSAgICAgICAgICAgICAgVjRMMl9DSURfQkFTRQotLyogIElEcyByZXNlcnZlZCBmb3IgZHJpdmVyIHNwZWNpZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSAgICAgICAgICAgMHgwODAwMDAwMAotCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQ0xBU1MgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMSkKLSNkZWZpbmUgVjRMMl9DSURfQlJJR0hUTkVTUyAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSswKQotI2RlZmluZSBWNEwyX0NJRF9DT05UUkFTVCAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzEpCi0jZGVmaW5lIFY0TDJfQ0lEX1NBVFVSQVRJT04gICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMikKLSNkZWZpbmUgVjRMMl9DSURfSFVFICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszKQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19WT0xVTUUgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrNikKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fQkFTUyAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSs3KQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19UUkVCTEUgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzgpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX01VVEUgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrOSkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fTE9VRE5FU1MgICAgICAgICAoVjRMMl9DSURfQkFTRSsxMCkKLSNkZWZpbmUgVjRMMl9DSURfQkxBQ0tfTEVWRUwgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsxMSkgLyogRGVwcmVjYXRlZCAqLwotI2RlZmluZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UgICAgIChWNEwyX0NJRF9CQVNFKzEyKQotI2RlZmluZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFICAgICAgIChWNEwyX0NJRF9CQVNFKzEzKQotI2RlZmluZSBWNEwyX0NJRF9SRURfQkFMQU5DRSAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE0KQotI2RlZmluZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE1KQotI2RlZmluZSBWNEwyX0NJRF9HQU1NQSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE2KQotI2RlZmluZSBWNEwyX0NJRF9XSElURU5FU1MgICAgICAgICAgICAgIChWNEwyX0NJRF9HQU1NQSkgLyogRGVwcmVjYXRlZCAqLwotI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRSAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE3KQotI2RlZmluZSBWNEwyX0NJRF9BVVRPR0FJTiAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE4KQotI2RlZmluZSBWNEwyX0NJRF9HQUlOICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzE5KQotI2RlZmluZSBWNEwyX0NJRF9IRkxJUCAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIwKQotI2RlZmluZSBWNEwyX0NJRF9WRkxJUCAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzIxKQotCi0vKiBEZXByZWNhdGVkOyB1c2UgVjRMMl9DSURfUEFOX1JFU0VUIGFuZCBWNEwyX0NJRF9USUxUX1JFU0VUICovCi0jZGVmaW5lIFY0TDJfQ0lEX0hDRU5URVIgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjIpCi0jZGVmaW5lIFY0TDJfQ0lEX1ZDRU5URVIgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjMpCi0KLSNkZWZpbmUgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1kgICAoVjRMMl9DSURfQkFTRSsyNCkKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wb3dlci1saW5lLWZyZXF1ZW5jeSI+djRsMl9wb3dlcl9saW5lX2ZyZXF1ZW5jeTwvbGluaz4gewotICAgICAgICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAgPSAwLAotICAgICAgICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICAgICAgPSAxLAotICAgICAgICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICAgICAgPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfSFVFX0FVVE8gICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI1KQotI2RlZmluZSBWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFICAgICAgKFY0TDJfQ0lEX0JBU0UrMjYpCi0jZGVmaW5lIFY0TDJfQ0lEX1NIQVJQTkVTUyAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyNykKLSNkZWZpbmUgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI4KQotI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfQUdDICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMjkpCi0jZGVmaW5lIFY0TDJfQ0lEX0NPTE9SX0tJTExFUiAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMCkKLSNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWCAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMxKQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbG9yZngiPnY0bDJfY29sb3JmeDwvbGluaz4gewotICAgICAgICBWNEwyX0NPTE9SRlhfTk9ORSAgICAgICA9IDAsCi0gICAgICAgIFY0TDJfQ09MT1JGWF9CVyAgICAgICAgID0gMSwKLSAgICAgICAgVjRMMl9DT0xPUkZYX1NFUElBICAgICAgPSAyLAotICAgICAgICBWNEwyX0NPTE9SRlhfTkVHQVRJVkUgPSAzLAotICAgICAgICBWNEwyX0NPTE9SRlhfRU1CT1NTID0gNCwKLSAgICAgICAgVjRMMl9DT0xPUkZYX1NLRVRDSCA9IDUsCi0gICAgICAgIFY0TDJfQ09MT1JGWF9TS1lfQkxVRSA9IDYsCi0gICAgICAgIFY0TDJfQ09MT1JGWF9HUkFTU19HUkVFTiA9IDcsCi0gICAgICAgIFY0TDJfQ09MT1JGWF9TS0lOX1dISVRFTiA9IDgsCi0gICAgICAgIFY0TDJfQ09MT1JGWF9WSVZJRCA9IDksCi19OwotI2RlZmluZSBWNEwyX0NJRF9BVVRPQlJJR0hUTkVTUyAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzIpCi0jZGVmaW5lIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMykKLQotI2RlZmluZSBWNEwyX0NJRF9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzQpCi0jZGVmaW5lIFY0TDJfQ0lEX0JHX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszNSkKLQotI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfR0FJTiAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzYpCi0KLSNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzEgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzM3KQotI2RlZmluZSBWNEwyX0NJRF9JTExVTUlOQVRPUlNfMiAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzgpCi0KLS8qIGxhc3QgQ0lEICsgMSAqLwotI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzkpCi0KLS8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAxKQotCi0vKiAgTVBFRyBzdHJlYW1zICovCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzApCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1zdHJlYW0tdHlwZSI+djRsMl9tcGVnX3N0cmVhbV90eXBlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUyAgID0gMCwgLyogTVBFRy0yIHByb2dyYW0gc3RyZWFtICovCi0gICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUyAgID0gMSwgLyogTVBFRy0yIHRyYW5zcG9ydCBzdHJlYW0gKi8KLSAgICAgICAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTICAgPSAyLCAvKiBNUEVHLTEgc3lzdGVtIHN0cmVhbSAqLwotICAgICAgICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZEICA9IDMsIC8qIE1QRUctMiBEVkQtY29tcGF0aWJsZSBzdHJlYW0gKi8KLSAgICAgICAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1ZDRCAgPSA0LCAvKiBNUEVHLTEgVkNELWNvbXBhdGlibGUgc3RyZWFtICovCi0gICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9TVkNEID0gNSwgLyogTVBFRy0yIFNWQ0QtY29tcGF0aWJsZSBzdHJlYW0gKi8KLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTyAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTyAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzMpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1IgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTyAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTyAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzYpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzcpCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1zdHJlYW0tdmJpLWZtdCI+djRsMl9tcGVnX3N0cmVhbV92YmlfZm10PC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FID0gMCwgIC8qIE5vIFZCSSBpbiB0aGUgTVBFRyBzdHJlYW0gKi8KLSAgICAgICAgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgPSAxLCAgLyogVkJJIGluIHByaXZhdGUgcGFja2V0cywgSVZUViBmb3JtYXQgKi8KLX07Ci0KLS8qICBNUEVHIGF1ZGlvICovCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwMCkKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLXNhbXBsaW5nLWZyZXEiPnY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAgPSAxLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCA9IDIsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDEpCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1lbmNvZGluZyI+djRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgPSAxLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMyA9IDIsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgICAgID0gMywKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMyAgICAgPSA0LAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAyKQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tbDEtYml0cmF0ZSI+djRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzJLICA9IDAsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SyAgPSAxLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV85NksgID0gMiwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTI4SyA9IDMsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE2MEsgPSA0LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xOTJLID0gNSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjI0SyA9IDYsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI1NksgPSA3LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yODhLID0gOCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzIwSyA9IDksCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM1MksgPSAxMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzg0SyA9IDExLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80MTZLID0gMTIsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEsgPSAxMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwMykKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWwyLWJpdHJhdGUiPnY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySyAgPSAwLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV80OEsgID0gMSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNTZLICA9IDIsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzY0SyAgPSAzLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV84MEsgID0gNCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfOTZLICA9IDUsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzExMksgPSA2LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLID0gNywKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSyA9IDgsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE5MksgPSA5LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLID0gMTAsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPSAxMSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzIwSyA9IDEyLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID0gMTMsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEUgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDQpCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1hdWRpby1sMy1iaXRyYXRlIj52NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZTwvbGluaz4gewotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMksgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDBLICA9IDEsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQ4SyAgPSAyLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV81NksgID0gMywKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNjRLICA9IDQsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzgwSyAgPSA1LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV85NksgID0gNiwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySyA9IDcsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEsgPSA4LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xNjBLID0gOSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyA9IDEwLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yMjRLID0gMTEsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzI1NksgPSAxMiwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzIwSyA9IDEzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NT0RFICAgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA1KQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tbW9kZSI+djRsMl9tcGVnX2F1ZGlvX21vZGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPICAgICAgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfSk9JTlRfU1RFUkVPID0gMSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfRFVBTCAgICAgICAgID0gMiwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfTU9OTyAgICAgICAgID0gMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT04gICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwNikKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLW1vZGUtZXh0ZW5zaW9uIj52NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb248L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzggID0gMSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzEyID0gMiwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzE2ID0gMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwNykKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWVtcGhhc2lzIj52NGwyX21wZWdfYXVkaW9fZW1waGFzaXM8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUgICAgICAgICA9IDAsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVMgPSAxLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3ICAgID0gMiwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDICAgICAgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzEwOCkKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLWF1ZGlvLWNyYyI+djRsMl9tcGVnX2F1ZGlvX2NyYzwvbGluaz4gewotICAgICAgICBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiA9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEUgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDkpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUFDX0JJVFJBVEUgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURSAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMTExKQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctYXVkaW8tYWMzLWJpdHJhdGUiPnY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZTwvbGluaz4gewotICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzJLICA9IDAsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80MEsgID0gMSwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SyAgPSAyLAotICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTZLICA9IDMsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NEsgID0gNCwKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSyAgPSA1LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfOTZLICA9IDYsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMTJLID0gNywKLSAgICAgICAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzEyOEsgPSA4LAotICAgICAgICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTYwSyA9IDksCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xOTJLID0gMTAsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLID0gMTEsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLID0gMTIsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMjBLID0gMTMsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLID0gMTQsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80NDhLID0gMTUsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81MTJLID0gMTYsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81NzZLID0gMTcsCi0gICAgICAgIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLID0gMTgsCi19OwotCi0vKiAgTVBFRyB2aWRlbyAqLwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDApCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12aWRlby1lbmNvZGluZyI+djRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgICAgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMiAgICAgPSAxLAotICAgICAgICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQyA9IDIsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCAgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDEpCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12aWRlby1hc3BlY3QiPnY0bDJfbXBlZ192aWRlb19hc3BlY3Q8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEgICAgID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMgICAgID0gMSwKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ICAgID0gMiwKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwID0gMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVMgICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwMikKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV04gICAgICAgICAgICAoVjRMMl9DSURfTVBFR19CQVNFKzIwNSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA2KQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmlkZW8tYml0cmF0ZS1tb2RlIj52NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgPSAxLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSyAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDgpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwOSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFICAgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0JBU0UrMjEwKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTEpCi0KLS8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIHNwZWNpZmljIHRvIHRoZSBDWDIzNDF4IGRyaXZlciBhcyBkZWZpbmVkIGJ5IFY0TDIgKi8KLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDEwMDApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzApCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLXNwYXRpYWwtZmlsdGVyLW1vZGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX0FVVE8gICA9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVIgICAgICAgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQotZW51bSA8bGluayBsaW5rZW5kPSJsdW1hLXNwYXRpYWwtZmlsdGVyLXR5cGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTwvbGluaz4gewotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGICAgICAgICAgICAgICAgICAgPSAwLAotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SICAgICAgICAgICAgICAgPSAxLAotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCAgICAgICAgICAgICAgPSAyLAotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMkRfSFZfU0VQQVJBQkxFICAgICAgPSAzLAotICAgICAgICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMkRfU1lNX05PTl9TRVBBUkFCTEUgPSA0LAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMykKLWVudW0gPGxpbmsgbGlua2VuZD0iY2hyb21hLXNwYXRpYWwtZmlsdGVyLXR5cGUiPnY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiAgICA9IDAsCi0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUgICAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs0KQotZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctY3gyMzQxeC12aWRlby10ZW1wb3JhbC1maWx0ZXItbW9kZSI+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKLSAgICAgICAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTyAgID0gMSwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVIgICAgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEUgICAgICAgICAgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzYpCi1lbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy1jeDIzNDF4LXZpZGVvLW1lZGlhbi1maWx0ZXItdHlwZSI+djRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlPC9saW5rPiB7Ci0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYgICAgICA9IDAsCi0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1IgICAgICA9IDEsCi0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUICAgICA9IDIsCi0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVCA9IDMsCi0gICAgICAgIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9ESUFHICAgICA9IDQsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX0JPVFRPTSAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAgICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs4KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs5KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfVE9QICAgIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFMgICAgICAgICAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTEpCi0KLS8qICBDYW1lcmEgY2xhc3MgY29udHJvbCBJRHMgKi8KLSNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UgICAgICAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDB4OTAwKQotI2RlZmluZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1MgICAgICAgICAgIChWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIHwgMSkKLQotI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEpCi1lbnVtICA8bGluayBsaW5rZW5kPSJ2NGwyLWV4cG9zdXJlLWF1dG8tdHlwZSI+djRsMl9leHBvc3VyZV9hdXRvX3R5cGU8L2xpbms+IHsKLSAgICAgICAgVjRMMl9FWFBPU1VSRV9BVVRPID0gMCwKLSAgICAgICAgVjRMMl9FWFBPU1VSRV9NQU5VQUwgPSAxLAotICAgICAgICBWNEwyX0VYUE9TVVJFX1NIVVRURVJfUFJJT1JJVFkgPSAyLAotICAgICAgICBWNEwyX0VYUE9TVVJFX0FQRVJUVVJFX1BSSU9SSVRZID0gMwotfTsKLSNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQUJTT0xVVEUgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyKQotI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMpCi0KLSNkZWZpbmUgVjRMMl9DSURfUEFOX1JFTEFUSVZFICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs0KQotI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNikKLSNkZWZpbmUgVjRMMl9DSURfVElMVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs3KQotCi0jZGVmaW5lIFY0TDJfQ0lEX1BBTl9BQlNPTFVURSAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOCkKLSNkZWZpbmUgVjRMMl9DSURfVElMVF9BQlNPTFVURSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs5KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTApCi0jZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FVVE8gICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTIpCi0KLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9BQlNPTFVURSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9SRUxBVElWRSAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNCkKLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9DT05USU5VT1VTICAgICAgICAgICAgICAgIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNSkKLQotI2RlZmluZSBWNEwyX0NJRF9QUklWQUNZICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE2KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0lSSVNfQUJTT0xVVEUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTcpCi0jZGVmaW5lIFY0TDJfQ0lEX0lSSVNfUkVMQVRJVkUgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTgpCi0KLS8qIEZNIE1vZHVsYXRvciBjbGFzcyBjb250cm9sIElEcyAqLwotI2RlZmluZSBWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19GTV9UWCB8IDB4OTAwKQotI2RlZmluZSBWNEwyX0NJRF9GTV9UWF9DTEFTUyAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ1RSTF9DTEFTU19GTV9UWCB8IDEpCi0KLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTiAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMSkKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BJICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BUWSAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMykKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BTX05BTUUgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNSkKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKLQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA2NCkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUUgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjUpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgwKQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MSkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xEICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODIpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgzKQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4NCkKLQotI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0VOQUJMRUQgICAgICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NikKLSNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT04gICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTcpCi0jZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZICAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk4KQotCi0jZGVmaW5lIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMgICAgICAgICAgICAgICAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExMikKLWVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1wcmVlbXBoYXNpcyI+djRsMl9wcmVlbXBoYXNpczwvbGluaz4gewotICAgICAgICBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVEICAgICAgID0gMCwKLSAgICAgICAgVjRMMl9QUkVFTVBIQVNJU181MF91UyAgICAgICAgICA9IDEsCi0gICAgICAgIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgICAgICAgICAgPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTCAgICAgICAgICAgICAgIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEzKQotI2RlZmluZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SICAgICAgICAgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTQpCi0KLS8qCi0gKiAgICAgIFQgVSBOIEkgTiBHCi0gKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyIj52NGwyX3R1bmVyPC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGluZGV4OwotICAgICAgICBfX3U4ICAgICAgICAgICAgICAgICAgICBuYW1lWzMyXTsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyLXR5cGUiPnY0bDJfdHVuZXJfdHlwZTwvbGluaz4gICAgdHlwZTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcmFuZ2Vsb3c7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJhbmdlaGlnaDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgcnhzdWJjaGFuczsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgYXVkbW9kZTsKLSAgICAgICAgX19zMzIgICAgICAgICAgICAgICAgICAgc2lnbmFsOwotICAgICAgICBfX3MzMiAgICAgICAgICAgICAgICAgICBhZmM7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzRdOwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbW9kdWxhdG9yIj52NGwyX21vZHVsYXRvcjwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBpbmRleDsKLSAgICAgICAgX191OCAgICAgICAgICAgICAgICAgICAgbmFtZVszMl07Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHk7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJhbmdlbG93OwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICByYW5nZWhpZ2g7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHR4c3ViY2hhbnM7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzRdOwotfTsKLQotLyogIEZsYWdzIGZvciB0aGUgJ2NhcGFiaWxpdHknIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xPVyAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX05PUk0gICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTyAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NBUCAgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcxICAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEUyAgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19CTE9DS19JTyAgICAgMHgwMTAwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19DT05UUk9MUyAgICAgMHgwMjAwCi0KLS8qICBGbGFncyBmb3IgdGhlICdyeHN1YmNoYW5zJyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9NT05PICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMiAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9TQVAgICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMSAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9SRFMgICAgICAgICAgICAgIDB4MDAxMAotCi0vKiAgVmFsdWVzIGZvciB0aGUgJ2F1ZG1vZGUnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMiAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TQVAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMSAgICAgICAgICAgMHgwMDAzCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiAgICAgMHgwMDA0Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyZXF1ZW5jeSI+djRsMl9mcmVxdWVuY3k8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIHR1bmVyOwotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXItdHlwZSI+djRsMl90dW5lcl90eXBlPC9saW5rPiAgdHlwZTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeTsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIHJlc2VydmVkWzhdOwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItaHctZnJlcS1zZWVrIj52NGwyX2h3X2ZyZXFfc2VlazwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgdHVuZXI7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi10dW5lci10eXBlIj52NGwyX3R1bmVyX3R5cGU8L2xpbms+ICB0eXBlOwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgc2Vla191cHdhcmQ7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICB3cmFwX2Fyb3VuZDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgIHNwYWNpbmc7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICByZXNlcnZlZFs3XTsKLX07Ci0KLS8qCi0gKiAgICAgIFIgRCBTCi0gKi8KLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcmRzLWRhdGEiPnY0bDJfcmRzX2RhdGE8L2xpbms+IHsKLSAgICAgICAgX191OCAgICBsc2I7Ci0gICAgICAgIF9fdTggICAgbXNiOwotICAgICAgICBfX3U4ICAgIGJsb2NrOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfTVNLICAgICAgIDB4NwotI2RlZmluZSBWNEwyX1JEU19CTE9DS19BICAgICAgICAgMAotI2RlZmluZSBWNEwyX1JEU19CTE9DS19CICAgICAgICAgMQotI2RlZmluZSBWNEwyX1JEU19CTE9DS19DICAgICAgICAgMgotI2RlZmluZSBWNEwyX1JEU19CTE9DS19EICAgICAgICAgMwotI2RlZmluZSBWNEwyX1JEU19CTE9DS19DX0FMVCAgICAgNAotI2RlZmluZSBWNEwyX1JEU19CTE9DS19JTlZBTElEICAgNwotCi0jZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0NPUlJFQ1RFRCAweDQwCi0jZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0VSUk9SICAgICAweDgwCi0KLS8qCi0gKiAgICAgIEEgVSBEIEkgTwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpbyI+djRsMl9hdWRpbzwvbGluaz4gewotICAgICAgICBfX3UzMiAgIGluZGV4OwotICAgICAgICBfX3U4ICAgIG5hbWVbMzJdOwotICAgICAgICBfX3UzMiAgIGNhcGFiaWxpdHk7Ci0gICAgICAgIF9fdTMyICAgbW9kZTsKLSAgICAgICAgX191MzIgICByZXNlcnZlZFsyXTsKLX07Ci0KLS8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX0FVRENBUF9TVEVSRU8gICAgICAgICAgICAgIDB4MDAwMDEKLSNkZWZpbmUgVjRMMl9BVURDQVBfQVZMICAgICAgICAgICAgICAgICAweDAwMDAyCi0KLS8qICBGbGFncyBmb3IgdGhlICdtb2RlJyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX0FVRE1PREVfQVZMICAgICAgICAgICAgICAgIDB4MDAwMDEKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYXVkaW9vdXQiPnY0bDJfYXVkaW9vdXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICBpbmRleDsKLSAgICAgICAgX191OCAgICBuYW1lWzMyXTsKLSAgICAgICAgX191MzIgICBjYXBhYmlsaXR5OwotICAgICAgICBfX3UzMiAgIG1vZGU7Ci0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07Ci19OwotCi0vKgotICogICAgICBNIFAgRSBHICAgUyBFIFIgViBJIEMgRSBTCi0gKgotICogICAgICBOT1RFOiBFWFBFUklNRU5UQUwgQVBJCi0gKi8KLSNpZiAxCi0jZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9JICAgICgwKQotI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfUCAgICAoMSkKLSNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX0IgICAgKDIpCi0jZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLICgweGYpCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuYy1pZHgtZW50cnkiPnY0bDJfZW5jX2lkeF9lbnRyeTwvbGluaz4gewotICAgICAgICBfX3U2NCBvZmZzZXQ7Ci0gICAgICAgIF9fdTY0IHB0czsKLSAgICAgICAgX191MzIgbGVuZ3RoOwotICAgICAgICBfX3UzMiBmbGFnczsKLSAgICAgICAgX191MzIgcmVzZXJ2ZWRbMl07Ci19OwotCi0jZGVmaW5lIFY0TDJfRU5DX0lEWF9FTlRSSUVTICg2NCkKLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuYy1pZHgiPnY0bDJfZW5jX2lkeDwvbGluaz4gewotICAgICAgICBfX3UzMiBlbnRyaWVzOwotICAgICAgICBfX3UzMiBlbnRyaWVzX2NhcDsKLSAgICAgICAgX191MzIgcmVzZXJ2ZWRbNF07Ci0gICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuYy1pZHgtZW50cnkiPnY0bDJfZW5jX2lkeF9lbnRyeTwvbGluaz4gZW50cnlbVjRMMl9FTkNfSURYX0VOVFJJRVNdOwotfTsKLQotCi0jZGVmaW5lIFY0TDJfRU5DX0NNRF9TVEFSVCAgICAgICgwKQotI2RlZmluZSBWNEwyX0VOQ19DTURfU1RPUCAgICAgICAoMSkKLSNkZWZpbmUgVjRMMl9FTkNfQ01EX1BBVVNFICAgICAgKDIpCi0jZGVmaW5lIFY0TDJfRU5DX0NNRF9SRVNVTUUgICAgICgzKQotCi0vKiBGbGFncyBmb3IgVjRMMl9FTkNfQ01EX1NUT1AgKi8KLSNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORCAgICAoMSAmbHQ7Jmx0OyAwKQotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1lbmNvZGVyLWNtZCI+djRsMl9lbmNvZGVyX2NtZDwvbGluaz4gewotICAgICAgICBfX3UzMiBjbWQ7Ci0gICAgICAgIF9fdTMyIGZsYWdzOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGRhdGFbOF07Ci0gICAgICAgICAgICAgICAgfSByYXc7Ci0gICAgICAgIH07Ci19OwotCi0jZW5kaWYKLQotCi0vKgotICogICAgICBEIEEgVCBBICAgUyBFIFIgViBJIEMgRSBTICAgKCBWIEIgSSApCi0gKgotICogICAgICBEYXRhIHNlcnZpY2VzIEFQSSBieSBNaWNoYWVsIFNjaGltZWsKLSAqLwotCi0vKiBSYXcgVkJJICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi12YmktZm9ybWF0Ij52NGwyX3ZiaV9mb3JtYXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICBzYW1wbGluZ19yYXRlOyAgICAgICAgICAvKiBpbiAxIEh6ICovCi0gICAgICAgIF9fdTMyICAgb2Zmc2V0OwotICAgICAgICBfX3UzMiAgIHNhbXBsZXNfcGVyX2xpbmU7Ci0gICAgICAgIF9fdTMyICAgc2FtcGxlX2Zvcm1hdDsgICAgICAgICAgLyogVjRMMl9QSVhfRk1UXyogKi8KLSAgICAgICAgX19zMzIgICBzdGFydFsyXTsKLSAgICAgICAgX191MzIgICBjb3VudFsyXTsKLSAgICAgICAgX191MzIgICBmbGFnczsgICAgICAgICAgICAgICAgICAvKiBWNEwyX1ZCSV8qICovCi0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgLyogbXVzdCBiZSB6ZXJvICovCi19OwotCi0vKiAgVkJJIGZsYWdzICAqLwotI2RlZmluZSBWNEwyX1ZCSV9VTlNZTkMgICAgICAgICAoMSAmbHQ7Jmx0OyAwKQotI2RlZmluZSBWNEwyX1ZCSV9JTlRFUkxBQ0VEICAgICAoMSAmbHQ7Jmx0OyAxKQotCi0vKiBTbGljZWQgVkJJCi0gKgotICogICAgVGhpcyBpbXBsZW1lbnRzIGlzIGEgcHJvcG9zYWwgVjRMMiBBUEkgdG8gYWxsb3cgU0xJQ0VEIFZCSQotICogcmVxdWlyZWQgZm9yIHNvbWUgaGFyZHdhcmUgZW5jb2RlcnMuIEl0IHNob3VsZCBjaGFuZ2Ugd2l0aG91dAotICogbm90aWNlIGluIHRoZSBkZWZpbml0aXZlIGltcGxlbWVudGF0aW9uLgotICovCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktZm9ybWF0Ij52NGwyX3NsaWNlZF92YmlfZm9ybWF0PC9saW5rPiB7Ci0gICAgICAgIF9fdTE2ICAgc2VydmljZV9zZXQ7Ci0gICAgICAgIC8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKLSAgICAgICAgICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KLSAgICAgICAgX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLSAgICAgICAgX191MzIgICBpb19zaXplOwotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzJdOyAgICAgICAgICAgIC8qIG11c3QgYmUgemVybyAqLwotfTsKLQotLyogVGVsZXRleHQgV29ybGQgU3lzdGVtIFRlbGV0ZXh0Ci0gICAoV1NUKSwgZGVmaW5lZCBvbiBJVFUtUiBCVC42NTMtMiAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9CICAgICAgICAgICgweDAwMDEpCi0vKiBWaWRlbyBQcm9ncmFtIFN5c3RlbSwgZGVmaW5lZCBvbiBFVFMgMzAwIDIzMSovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZQUyAgICAgICAgICAgICAgICAgKDB4MDQwMCkKLS8qIENsb3NlZCBDYXB0aW9uLCBkZWZpbmVkIG9uIEVJQS02MDggKi8KLSNkZWZpbmUgVjRMMl9TTElDRURfQ0FQVElPTl81MjUgICAgICAgICAoMHgxMDAwKQotLyogV2lkZSBTY3JlZW4gU3lzdGVtLCBkZWZpbmVkIG9uIElUVS1SIEJUMTExOS4xICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4NDAwMCkKLQotI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNTI1ICAgICAgICAgICAgIChWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSkKLSNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzYyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfVEVMRVRFWFRfQiB8IFY0TDJfU0xJQ0VEX1ZQUyB8IFY0TDJfU0xJQ0VEX1dTU182MjUpCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktY2FwIj52NGwyX3NsaWNlZF92YmlfY2FwPC9saW5rPiB7Ci0gICAgICAgIF9fdTE2ICAgc2VydmljZV9zZXQ7Ci0gICAgICAgIC8qIHNlcnZpY2VfbGluZXNbMF1bLi4uXSBzcGVjaWZpZXMgbGluZXMgMC0yMyAoMS0yMyB1c2VkKSBvZiB0aGUgZmlyc3QgZmllbGQKLSAgICAgICAgICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZHMsIDI2My0yODYgZm9yIDUyNSBsaW5lIHN0YW5kYXJkcykgKi8KLSAgICAgICAgX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLSAgICAgICAgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1Zi10eXBlIj52NGwyX2J1Zl90eXBlPC9saW5rPiB0eXBlOwotICAgICAgICBfX3UzMiAgIHJlc2VydmVkWzNdOyAgICAvKiBtdXN0IGJlIDAgKi8KLX07Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXNsaWNlZC12YmktZGF0YSI+djRsMl9zbGljZWRfdmJpX2RhdGE8L2xpbms+IHsKLSAgICAgICAgX191MzIgICBpZDsKLSAgICAgICAgX191MzIgICBmaWVsZDsgICAgICAgICAgLyogMDogZmlyc3QgZmllbGQsIDE6IHNlY29uZCBmaWVsZCAqLwotICAgICAgICBfX3UzMiAgIGxpbmU7ICAgICAgICAgICAvKiAxLTIzICovCi0gICAgICAgIF9fdTMyICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIG11c3QgYmUgMCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbNDhdOwotfTsKLQotLyoKLSAqIFNsaWNlZCBWQkkgZGF0YSBpbnNlcnRlZCBpbnRvIE1QRUcgU3RyZWFtcwotICovCi0KLS8qCi0gKiBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjoKLSAqCi0gKiBTdHJ1Y3R1cmUgb2YgcGF5bG9hZCBjb250YWluZWQgaW4gYW4gTVBFRyAyIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCBpbiBhbgotICogTVBFRy0yIFByb2dyYW0gUGFjayB0aGF0IGNvbnRhaW5zIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWIFNsaWNlZCBWQkkKLSAqIGRhdGEKLSAqCi0gKiBOb3RlLCB0aGUgTVBFRy0yIFByb2dyYW0gUGFjayBhbmQgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgcGFja2V0IGhlYWRlcgotICogZGVmaW5pdGlvbnMgYXJlIG5vdCBpbmNsdWRlZCBoZXJlLiAgU2VlIHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbnMgZm9yIGRldGFpbHMKLSAqIG9uIHRoZXNlIGhlYWRlcnMuCi0gKi8KLQotLyogTGluZSB0eXBlIElEcyAqLwotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNSAgICAoNCkKLSNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1dTU182MjUgICAgICAgICg1KQotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVlBTICAgICAgICAgICAgKDcpCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtbGluZSI+djRsMl9tcGVnX3ZiaV9pdHYwX2xpbmU8L2xpbms+IHsKLSAgICAgICAgX191OCBpZDsgICAgICAgIC8qIE9uZSBvZiBWNEwyX01QRUdfVkJJX0lWVFZfKiBhYm92ZSAqLwotICAgICAgICBfX3U4IGRhdGFbNDJdOyAgLyogU2xpY2VkIFZCSSBkYXRhIGZvciB0aGUgbGluZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAiPnY0bDJfbXBlZ192YmlfaXR2MDwvbGluaz4gewotICAgICAgICBfX2xlMzIgbGluZW1hc2tbMl07IC8qIEJpdG1hc2tzIG9mIFZCSSBzZXJ2aWNlIGxpbmVzIHByZXNlbnQgKi8KLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvbGluaz4gbGluZVszNV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC0xIj52NGwyX21wZWdfdmJpX0lUVjA8L2xpbms+IHsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MC1saW5lIj52NGwyX21wZWdfdmJpX2l0djBfbGluZTwvbGluaz4gbGluZVszNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMwICAgICAgICJpdHYwIgotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMxICAgICAgICJJVFYwIgotCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1tcGVnLXZiaS1mbXQtaXZ0diI+djRsMl9tcGVnX3ZiaV9mbXRfaXZ0djwvbGluaz4gewotICAgICAgICBfX3U4IG1hZ2ljWzRdOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbXBlZy12YmktaXR2MCI+djRsMl9tcGVnX3ZiaV9pdHYwPC9saW5rPiBpdHYwOwotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1wZWctdmJpLWl0djAtMSI+djRsMl9tcGVnX3ZiaV9JVFYwPC9saW5rPiBJVFYwOwotICAgICAgICB9OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiAgICAgIEEgRyBHIFIgRSBHIEEgVCBFICAgUyBUIFIgVSBDIFQgVSBSIEUgUwotICovCi0KLS8qKgotICogc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGxhbmUtcGl4LWZvcm1hdCI+djRsMl9wbGFuZV9waXhfZm9ybWF0PC9saW5rPiAtIGFkZGl0aW9uYWwsIHBlci1wbGFuZSBmb3JtYXQgZGVmaW5pdGlvbgotICogQHNpemVpbWFnZTogICAgICAgICAgbWF4aW11bSBzaXplIGluIGJ5dGVzIHJlcXVpcmVkIGZvciBkYXRhLCBmb3Igd2hpY2gKLSAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcGxhbmUgd2lsbCBiZSB1c2VkCi0gKiBAYnl0ZXNwZXJsaW5lOiAgICAgICBkaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4gdHdvCi0gKiAgICAgICAgICAgICAgICAgICAgICBhZGphY2VudCBsaW5lcwotICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1wbGFuZS1waXgtZm9ybWF0Ij52NGwyX3BsYW5lX3BpeF9mb3JtYXQ8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgIHNpemVpbWFnZTsKLSAgICAgICAgX191MTYgICAgICAgICAgIGJ5dGVzcGVybGluZTsKLSAgICAgICAgX191MTYgICAgICAgICAgIHJlc2VydmVkWzddOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGl4LWZvcm1hdC1tcGxhbmUiPnY0bDJfcGl4X2Zvcm1hdF9tcGxhbmU8L2xpbms+IC0gbXVsdGlwbGFuYXIgZm9ybWF0IGRlZmluaXRpb24KLSAqIEB3aWR0aDogICAgICAgICAgICAgIGltYWdlIHdpZHRoIGluIHBpeGVscwotICogQGhlaWdodDogICAgICAgICAgICAgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscwotICogQHBpeGVsZm9ybWF0OiAgICAgICAgbGl0dGxlIGVuZGlhbiBmb3VyIGNoYXJhY3RlciBjb2RlIChmb3VyY2MpCi0gKiBAZmllbGQ6ICAgICAgICAgICAgICBmaWVsZCBvcmRlciAoZm9yIGludGVybGFjZWQgdmlkZW8pCi0gKiBAY29sb3JzcGFjZTogICAgICAgICBzdXBwbGVtZW50YWwgdG8gcGl4ZWxmb3JtYXQKLSAqIEBwbGFuZV9mbXQ6ICAgICAgICAgIHBlci1wbGFuZSBpbmZvcm1hdGlvbgotICogQG51bV9wbGFuZXM6ICAgICAgICAgbnVtYmVyIG9mIHBsYW5lcyBmb3IgdGhpcyBmb3JtYXQKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGl4LWZvcm1hdC1tcGxhbmUiPnY0bDJfcGl4X2Zvcm1hdF9tcGxhbmU8L2xpbms+IHsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDsKLSAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxmb3JtYXQ7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1maWVsZCI+djRsMl9maWVsZDwvbGluaz4gICAgICAgICAgICAgICAgIGZpZWxkOwotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItY29sb3JzcGFjZSI+djRsMl9jb2xvcnNwYWNlPC9saW5rPiAgICAgICAgICAgIGNvbG9yc3BhY2U7Ci0KLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcGxhbmUtcGl4LWZvcm1hdCI+djRsMl9wbGFuZV9waXhfZm9ybWF0PC9saW5rPiAgICBwbGFuZV9mbXRbVklERU9fTUFYX1BMQU5FU107Ci0gICAgICAgIF9fdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BsYW5lczsKLSAgICAgICAgX191OCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZFsxMV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPiAtIHN0cmVhbSBkYXRhIGZvcm1hdAotICogQHR5cGU6ICAgICAgIHR5cGUgb2YgdGhlIGRhdGEgc3RyZWFtCi0gKiBAcGl4OiAgICAgICAgZGVmaW5pdGlvbiBvZiBhbiBpbWFnZSBmb3JtYXQKLSAqIEBwaXhfbXA6ICAgICBkZWZpbml0aW9uIG9mIGEgbXVsdGlwbGFuYXIgaW1hZ2UgZm9ybWF0Ci0gKiBAd2luOiAgICAgICAgZGVmaW5pdGlvbiBvZiBhbiBvdmVybGFpZCBpbWFnZQotICogQHZiaTogICAgICAgIHJhdyBWQkkgY2FwdHVyZSBvciBvdXRwdXQgcGFyYW1ldGVycwotICogQHNsaWNlZDogICAgIHNsaWNlZCBWQkkgY2FwdHVyZSBvciBvdXRwdXQgcGFyYW1ldGVycwotICogQHJhd19kYXRhOiAgIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgZXh0ZW5zaW9ucyBhbmQgY3VzdG9tIGZvcm1hdHMKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4gewotICAgICAgICBlbnVtIDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmLXR5cGUiPnY0bDJfYnVmX3R5cGU8L2xpbms+IHR5cGU7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1waXgtZm9ybWF0Ij52NGwyX3BpeF9mb3JtYXQ8L2xpbms+ICAgICAgICAgIHBpeDsgICAgIC8qIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAqLwotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXBpeC1mb3JtYXQtbXBsYW5lIj52NGwyX3BpeF9mb3JtYXRfbXBsYW5lPC9saW5rPiAgIHBpeF9tcDsgIC8qIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgKi8KLSAgICAgICAgICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi13aW5kb3ciPnY0bDJfd2luZG93PC9saW5rPiAgICAgICAgICAgICAgd2luOyAgICAgLyogVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICovCi0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdmJpLWZvcm1hdCI+djRsMl92YmlfZm9ybWF0PC9saW5rPiAgICAgICAgICB2Ymk7ICAgICAvKiBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFICovCi0gICAgICAgICAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc2xpY2VkLXZiaS1mb3JtYXQiPnY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQ8L2xpbms+ICAgc2xpY2VkOyAgLyogVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgKi8KLSAgICAgICAgICAgICAgICBfX3U4ICAgIHJhd19kYXRhWzIwMF07ICAgICAgICAgICAgICAgICAgIC8qIHVzZXItZGVmaW5lZCAqLwotICAgICAgICB9IGZtdDsKLX07Ci0KLS8qICAgICAgU3RyZWFtIHR5cGUtZGVwZW5kZW50IHBhcmFtZXRlcnMKLSAqLwotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RyZWFtcGFybSI+djRsMl9zdHJlYW1wYXJtPC9saW5rPiB7Ci0gICAgICAgIGVudW0gPGxpbmsgbGlua2VuZD0idjRsMi1idWYtdHlwZSI+djRsMl9idWZfdHlwZTwvbGluaz4gdHlwZTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNhcHR1cmVwYXJtIj52NGwyX2NhcHR1cmVwYXJtPC9saW5rPiBjYXB0dXJlOwotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dHBhcm0iPnY0bDJfb3V0cHV0cGFybTwvbGluaz4gIG91dHB1dDsKLSAgICAgICAgICAgICAgICBfX3U4ICAgIHJhd19kYXRhWzIwMF07ICAvKiB1c2VyLWRlZmluZWQgKi8KLSAgICAgICAgfSBwYXJtOwotfTsKLQotLyoKLSAqICAgICAgRSBWIEUgTiBUIFMKLSAqLwotCi0jZGVmaW5lIFY0TDJfRVZFTlRfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFY0TDJfRVZFTlRfVlNZTkMgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFY0TDJfRVZFTlRfRU9TICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFY0TDJfRVZFTlRfUFJJVkFURV9TVEFSVCAgICAgICAgICAgICAgICAweDA4MDAwMDAwCi0KLS8qIFBheWxvYWQgZm9yIFY0TDJfRVZFTlRfVlNZTkMgKi8KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV2ZW50LXZzeW5jIj52NGwyX2V2ZW50X3ZzeW5jPC9saW5rPiB7Ci0gICAgICAgIC8qIENhbiBiZSBWNEwyX0ZJRUxEX0FOWSwgX05PTkUsIF9UT1Agb3IgX0JPVFRPTSAqLwotICAgICAgICBfX3U4IGZpZWxkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV2ZW50Ij52NGwyX2V2ZW50PC9saW5rPiB7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV2ZW50LXZzeW5jIj52NGwyX2V2ZW50X3ZzeW5jPC9saW5rPiB2c3luYzsKLSAgICAgICAgICAgICAgICBfX3U4ICAgICAgICAgICAgICAgICAgICBkYXRhWzY0XTsKLSAgICAgICAgfSB1OwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmc7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U7Ci0gICAgICAgIHN0cnVjdCB0aW1lc3BlYyAgICAgICAgICAgICAgICAgdGltZXN0YW1wOwotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkWzldOwotfTsKLQotc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXZlbnQtc3Vic2NyaXB0aW9uIj52NGwyX2V2ZW50X3N1YnNjcmlwdGlvbjwvbGluaz4gewotICAgICAgICBfX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7Ci0gICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbN107Ci19OwotCi0vKgotICogICAgICBBIEQgViBBIE4gQyBFIEQgICBEIEUgQiBVIEcgRyBJIE4gRwotICoKLSAqICAgICAgTk9URTogRVhQRVJJTUVOVEFMIEFQSSwgTkVWRVIgUkVMWSBPTiBUSElTIElOIEFQUExJQ0FUSU9OUyEKLSAqICAgICAgRk9SIERFQlVHR0lORywgVEVTVElORyBBTkQgSU5URVJOQUwgVVNFIE9OTFkhCi0gKi8KLQotLyogVklESU9DX0RCR19HX1JFR0lTVEVSIGFuZCBWSURJT0NfREJHX1NfUkVHSVNURVIgKi8KLQotI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAgICAgICAwICAvKiBNYXRjaCBhZ2FpbnN0IGNoaXAgSUQgb24gaG9zdCAoMCBmb3IgdGhlIGhvc3QpICovCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSIDEgIC8qIE1hdGNoIGFnYWluc3QgSTJDIGRyaXZlciBuYW1lICovCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAgIDIgIC8qIE1hdGNoIGFnYWluc3QgSTJDIDctYml0IGFkZHJlc3MgKi8KLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0FDOTcgICAgICAgMyAgLyogTWF0Y2ggYWdhaW5zdCBhbmNpbGlhcnkgQUM5NyBjaGlwICovCi0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1tYXRjaCI+djRsMl9kYmdfbWF0Y2g8L2xpbms+IHsKLSAgICAgICAgX191MzIgdHlwZTsgLyogTWF0Y2ggdHlwZSAqLwotICAgICAgICB1bmlvbiB7ICAgICAvKiBNYXRjaCB0aGlzIGNoaXAsIG1lYW5pbmcgZGV0ZXJtaW5lZCBieSB0eXBlICovCi0gICAgICAgICAgICAgICAgX191MzIgYWRkcjsKLSAgICAgICAgICAgICAgICBjaGFyIG5hbWVbMzJdOwotICAgICAgICB9OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWRiZy1yZWdpc3RlciI+djRsMl9kYmdfcmVnaXN0ZXI8L2xpbms+IHsKLSAgICAgICAgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLW1hdGNoIj52NGwyX2RiZ19tYXRjaDwvbGluaz4gbWF0Y2g7Ci0gICAgICAgIF9fdTMyIHNpemU7ICAgICAvKiByZWdpc3RlciBzaXplIGluIGJ5dGVzICovCi0gICAgICAgIF9fdTY0IHJlZzsKLSAgICAgICAgX191NjQgdmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFZJRElPQ19EQkdfR19DSElQX0lERU5UICovCi1zdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctY2hpcC1pZGVudCI+djRsMl9kYmdfY2hpcF9pZGVudDwvbGluaz4gewotICAgICAgICBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctbWF0Y2giPnY0bDJfZGJnX21hdGNoPC9saW5rPiBtYXRjaDsKLSAgICAgICAgX191MzIgaWRlbnQ7ICAgICAgIC8qIGNoaXAgaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gJmx0O21lZGlhL3Y0bDItY2hpcC1pZGVudC5oJmd0OyAqLwotICAgICAgICBfX3UzMiByZXZpc2lvbjsgICAgLyogY2hpcCByZXZpc2lvbiwgY2hpcCBzcGVjaWZpYyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiAgICAgIEkgTyBDIFQgTCAgIEMgTyBEIEUgUyAgIEYgTyBSICAgViBJIEQgRSBPICAgRCBFIFYgSSBDIEUgUwotICoKLSAqLwotI2RlZmluZSBWSURJT0NfUVVFUllDQVAgICAgICAgICAgX0lPUignVicsICAwLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1jYXBhYmlsaXR5Ij52NGwyX2NhcGFiaWxpdHk8L2xpbms+KQotI2RlZmluZSBWSURJT0NfUkVTRVJWRUQgICAgICAgICAgIF9JTygnVicsICAxKQotI2RlZmluZSBWSURJT0NfRU5VTV9GTVQgICAgICAgICBfSU9XUignVicsICAyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mbXRkZXNjIj52NGwyX2ZtdGRlc2M8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19GTVQgICAgICAgICAgICBfSU9XUignVicsICA0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mb3JtYXQiPnY0bDJfZm9ybWF0PC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfRk1UICAgICAgICAgICAgX0lPV1IoJ1YnLCAgNSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZm9ybWF0Ij52NGwyX2Zvcm1hdDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19SRVFCVUZTICAgICAgICAgIF9JT1dSKCdWJywgIDgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj52NGwyX3JlcXVlc3RidWZmZXJzPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1FVRVJZQlVGICAgICAgICAgX0lPV1IoJ1YnLCAgOSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItYnVmZmVyIj52NGwyX2J1ZmZlcjwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX0ZCVUYgICAgICAgICAgICBfSU9SKCdWJywgMTAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZyYW1lYnVmZmVyIj52NGwyX2ZyYW1lYnVmZmVyPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfRkJVRiAgICAgICAgICAgIF9JT1coJ1YnLCAxMSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJhbWVidWZmZXIiPnY0bDJfZnJhbWVidWZmZXI8L2xpbms+KQotI2RlZmluZSBWSURJT0NfT1ZFUkxBWSAgICAgICAgICAgX0lPVygnVicsIDE0LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19RQlVGICAgICAgICAgICAgIF9JT1dSKCdWJywgMTUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWJ1ZmZlciI+djRsMl9idWZmZXI8L2xpbms+KQotI2RlZmluZSBWSURJT0NfRFFCVUYgICAgICAgICAgICBfSU9XUignVicsIDE3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1idWZmZXIiPnY0bDJfYnVmZmVyPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NUUkVBTU9OICAgICAgICAgIF9JT1coJ1YnLCAxOCwgaW50KQotI2RlZmluZSBWSURJT0NfU1RSRUFNT0ZGICAgICAgICAgX0lPVygnVicsIDE5LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19HX1BBUk0gICAgICAgICAgIF9JT1dSKCdWJywgMjEsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXN0cmVhbXBhcm0iPnY0bDJfc3RyZWFtcGFybTwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX1BBUk0gICAgICAgICAgIF9JT1dSKCdWJywgMjIsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXN0cmVhbXBhcm0iPnY0bDJfc3RyZWFtcGFybTwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX1NURCAgICAgICAgICAgICBfSU9SKCdWJywgMjMsIHY0bDJfc3RkX2lkKQotI2RlZmluZSBWSURJT0NfU19TVEQgICAgICAgICAgICAgX0lPVygnVicsIDI0LCB2NGwyX3N0ZF9pZCkKLSNkZWZpbmUgVklESU9DX0VOVU1TVEQgICAgICAgICAgX0lPV1IoJ1YnLCAyNSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc3RhbmRhcmQiPnY0bDJfc3RhbmRhcmQ8L2xpbms+KQotI2RlZmluZSBWSURJT0NfRU5VTUlOUFVUICAgICAgICBfSU9XUignVicsIDI2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1pbnB1dCI+djRsMl9pbnB1dDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX0NUUkwgICAgICAgICAgIF9JT1dSKCdWJywgMjcsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbnRyb2wiPnY0bDJfY29udHJvbDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX0NUUkwgICAgICAgICAgIF9JT1dSKCdWJywgMjgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNvbnRyb2wiPnY0bDJfY29udHJvbDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX1RVTkVSICAgICAgICAgIF9JT1dSKCdWJywgMjksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXR1bmVyIj52NGwyX3R1bmVyPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfVFVORVIgICAgICAgICAgIF9JT1coJ1YnLCAzMCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItdHVuZXIiPnY0bDJfdHVuZXI8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19BVURJTyAgICAgICAgICAgX0lPUignVicsIDMzLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpbyI+djRsMl9hdWRpbzwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX0FVRElPICAgICAgICAgICBfSU9XKCdWJywgMzQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWF1ZGlvIj52NGwyX2F1ZGlvPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1FVRVJZQ1RSTCAgICAgICAgX0lPV1IoJ1YnLCAzNiwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItcXVlcnljdHJsIj52NGwyX3F1ZXJ5Y3RybDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19RVUVSWU1FTlUgICAgICAgIF9JT1dSKCdWJywgMzcsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLXF1ZXJ5bWVudSI+djRsMl9xdWVyeW1lbnU8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19JTlBVVCAgICAgICAgICAgX0lPUignVicsIDM4LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19TX0lOUFVUICAgICAgICAgIF9JT1dSKCdWJywgMzksIGludCkKLSNkZWZpbmUgVklESU9DX0dfT1VUUFVUICAgICAgICAgIF9JT1IoJ1YnLCA0NiwgaW50KQotI2RlZmluZSBWSURJT0NfU19PVVRQVVQgICAgICAgICBfSU9XUignVicsIDQ3LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19FTlVNT1VUUFVUICAgICAgIF9JT1dSKCdWJywgNDgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW91dHB1dCI+djRsMl9vdXRwdXQ8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19BVURPVVQgICAgICAgICAgX0lPUignVicsIDQ5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpb291dCI+djRsMl9hdWRpb291dDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX0FVRE9VVCAgICAgICAgICBfSU9XKCdWJywgNTAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWF1ZGlvb3V0Ij52NGwyX2F1ZGlvb3V0PC9saW5rPikKLSNkZWZpbmUgVklESU9DX0dfTU9EVUxBVE9SICAgICAgX0lPV1IoJ1YnLCA1NCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItbW9kdWxhdG9yIj52NGwyX21vZHVsYXRvcjwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiAgICAgICBfSU9XKCdWJywgNTUsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLW1vZHVsYXRvciI+djRsMl9tb2R1bGF0b3I8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19GUkVRVUVOQ1kgICAgICBfSU9XUignVicsIDU2LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcmVxdWVuY3kiPnY0bDJfZnJlcXVlbmN5PC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfRlJFUVVFTkNZICAgICAgIF9JT1coJ1YnLCA1Nywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJlcXVlbmN5Ij52NGwyX2ZyZXF1ZW5jeTwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19DUk9QQ0FQICAgICAgICAgIF9JT1dSKCdWJywgNTgsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3BjYXAiPnY0bDJfY3JvcGNhcDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX0NST1AgICAgICAgICAgIF9JT1dSKCdWJywgNTksIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TX0NST1AgICAgICAgICAgICBfSU9XKCdWJywgNjAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWNyb3AiPnY0bDJfY3JvcDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX0pQRUdDT01QICAgICAgICBfSU9SKCdWJywgNjEsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWpwZWdjb21wcmVzc2lvbiI+djRsMl9qcGVnY29tcHJlc3Npb248L2xpbms+KQotI2RlZmluZSBWSURJT0NfU19KUEVHQ09NUCAgICAgICAgX0lPVygnVicsIDYyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1qcGVnY29tcHJlc3Npb24iPnY0bDJfanBlZ2NvbXByZXNzaW9uPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1FVRVJZU1REICAgICAgICAgIF9JT1IoJ1YnLCA2MywgdjRsMl9zdGRfaWQpCi0jZGVmaW5lIFZJRElPQ19UUllfRk1UICAgICAgICAgIF9JT1dSKCdWJywgNjQsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWZvcm1hdCI+djRsMl9mb3JtYXQ8L2xpbms+KQotI2RlZmluZSBWSURJT0NfRU5VTUFVRElPICAgICAgICBfSU9XUignVicsIDY1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1hdWRpbyI+djRsMl9hdWRpbzwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19FTlVNQVVET1VUICAgICAgIF9JT1dSKCdWJywgNjYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWF1ZGlvb3V0Ij52NGwyX2F1ZGlvb3V0PC9saW5rPikKLSNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkgICAgICAgIF9JT1IoJ1YnLCA2NywgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByaW9yaXR5Ij52NGwyX3ByaW9yaXR5PC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfUFJJT1JJVFkgICAgICAgIF9JT1coJ1YnLCA2OCwgZW51bSA8bGluayBsaW5rZW5kPSJ2NGwyLXByaW9yaXR5Ij52NGwyX3ByaW9yaXR5PC9saW5rPikKLSNkZWZpbmUgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAgX0lPV1IoJ1YnLCA2OSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItc2xpY2VkLXZiaS1jYXAiPnY0bDJfc2xpY2VkX3ZiaV9jYXA8L2xpbms+KQotI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyAgICAgICAgIF9JTygnVicsIDcwKQotI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMgICAgICBfSU9XUignVicsIDcxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1leHQtY29udHJvbHMiPnY0bDJfZXh0X2NvbnRyb2xzPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1NfRVhUX0NUUkxTICAgICAgX0lPV1IoJ1YnLCA3Miwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZXh0LWNvbnRyb2xzIj52NGwyX2V4dF9jb250cm9sczwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19UUllfRVhUX0NUUkxTICAgIF9JT1dSKCdWJywgNzMsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV4dC1jb250cm9scyI+djRsMl9leHRfY29udHJvbHM8L2xpbms+KQotI2lmIDEKLSNkZWZpbmUgVklESU9DX0VOVU1fRlJBTUVTSVpFUyAgX0lPV1IoJ1YnLCA3NCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZnJtc2l6ZWVudW0iPnY0bDJfZnJtc2l6ZWVudW08L2xpbms+KQotI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUyBfSU9XUignVicsIDc1LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1mcm1pdmFsZW51bSI+djRsMl9mcm1pdmFsZW51bTwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19HX0VOQ19JTkRFWCAgICAgICBfSU9SKCdWJywgNzYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuYy1pZHgiPnY0bDJfZW5jX2lkeDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19FTkNPREVSX0NNRCAgICAgIF9JT1dSKCdWJywgNzcsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWVuY29kZXItY21kIj52NGwyX2VuY29kZXJfY21kPC9saW5rPikKLSNkZWZpbmUgVklESU9DX1RSWV9FTkNPREVSX0NNRCAgX0lPV1IoJ1YnLCA3OCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZW5jb2Rlci1jbWQiPnY0bDJfZW5jb2Rlcl9jbWQ8L2xpbms+KQotI2VuZGlmCi0KLSNpZiAxCi0vKiBFeHBlcmltZW50YWwsIG1lYW50IGZvciBkZWJ1Z2dpbmcsIHRlc3RpbmcgYW5kIGludGVybmFsIHVzZS4KLSAgIE9ubHkgaW1wbGVtZW50ZWQgaWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBkZWZpbmVkLgotICAgWW91IG11c3QgYmUgcm9vdCB0byB1c2UgdGhlc2UgaW9jdGxzLiBOZXZlciB1c2UgdGhlc2UgaW4gYXBwbGljYXRpb25zISAqLwotI2RlZmluZSBWSURJT0NfREJHX1NfUkVHSVNURVIgICAgX0lPVygnVicsIDc5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctcmVnaXN0ZXIiPnY0bDJfZGJnX3JlZ2lzdGVyPC9saW5rPikKLSNkZWZpbmUgVklESU9DX0RCR19HX1JFR0lTVEVSICAgX0lPV1IoJ1YnLCA4MCwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZGJnLXJlZ2lzdGVyIj52NGwyX2RiZ19yZWdpc3RlcjwvbGluaz4pCi0KLS8qIEV4cGVyaW1lbnRhbCwgbWVhbnQgZm9yIGRlYnVnZ2luZywgdGVzdGluZyBhbmQgaW50ZXJuYWwgdXNlLgotICAgTmV2ZXIgdXNlIHRoaXMgaW9jdGwgaW4gYXBwbGljYXRpb25zISAqLwotI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kYmctY2hpcC1pZGVudCI+djRsMl9kYmdfY2hpcF9pZGVudDwvbGluaz4pCi0jZW5kaWYKLQotI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsgICAgX0lPVygnVicsIDgyLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ody1mcmVxLXNlZWsiPnY0bDJfaHdfZnJlcV9zZWVrPC9saW5rPikKLSNkZWZpbmUgVklESU9DX0VOVU1fRFZfUFJFU0VUUyAgX0lPV1IoJ1YnLCA4Mywgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtZW51bS1wcmVzZXQiPnY0bDJfZHZfZW51bV9wcmVzZXQ8L2xpbms+KQotI2RlZmluZSBWSURJT0NfU19EVl9QUkVTRVQgICAgICBfSU9XUignVicsIDg0LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi1wcmVzZXQiPnY0bDJfZHZfcHJlc2V0PC9saW5rPikKLSNkZWZpbmUgVklESU9DX0dfRFZfUFJFU0VUICAgICAgX0lPV1IoJ1YnLCA4NSwgc3RydWN0IDxsaW5rIGxpbmtlbmQ9InY0bDItZHYtcHJlc2V0Ij52NGwyX2R2X3ByZXNldDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19RVUVSWV9EVl9QUkVTRVQgIF9JT1IoJ1YnLCAgODYsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWR2LXByZXNldCI+djRsMl9kdl9wcmVzZXQ8L2xpbms+KQotI2RlZmluZSBWSURJT0NfU19EVl9USU1JTkdTICAgICBfSU9XUignVicsIDg3LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi10aW1pbmdzIj52NGwyX2R2X3RpbWluZ3M8L2xpbms+KQotI2RlZmluZSBWSURJT0NfR19EVl9USU1JTkdTICAgICBfSU9XUignVicsIDg4LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1kdi10aW1pbmdzIj52NGwyX2R2X3RpbWluZ3M8L2xpbms+KQotI2RlZmluZSBWSURJT0NfRFFFVkVOVCAgICAgICAgICAgX0lPUignVicsIDg5LCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ldmVudCI+djRsMl9ldmVudDwvbGluaz4pCi0jZGVmaW5lIFZJRElPQ19TVUJTQ1JJQkVfRVZFTlQgICBfSU9XKCdWJywgOTAsIHN0cnVjdCA8bGluayBsaW5rZW5kPSJ2NGwyLWV2ZW50LXN1YnNjcmlwdGlvbiI+djRsMl9ldmVudF9zdWJzY3JpcHRpb248L2xpbms+KQotI2RlZmluZSBWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQgX0lPVygnVicsIDkxLCBzdHJ1Y3QgPGxpbmsgbGlua2VuZD0idjRsMi1ldmVudC1zdWJzY3JpcHRpb24iPnY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uPC9saW5rPikKLQotLyogUmVtaW5kZXI6IHdoZW4gYWRkaW5nIG5ldyBpb2N0bHMgcGxlYXNlIGFkZCBzdXBwb3J0IGZvciB0aGVtIHRvCi0gICBkcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBhcyB3ZWxsISAqLwotCi0jZGVmaW5lIEJBU0VfVklESU9DX1BSSVZBVEUgICAgIDE5MiAgICAgICAgICAgICAvKiAxOTItMjU1IGFyZSBwcml2YXRlICovCi0KLSNlbmRpZiAvKiBfX0xJTlVYX1ZJREVPREVWMl9IICovCi08L3Byb2dyYW1saXN0aW5nPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3Vic2NyaWJlLWV2ZW50LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXN1YnNjcmliZS1ldmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNTAxNzkuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2Mtc3Vic2NyaWJlLWV2ZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi08cmVmZW50cnkgaWQ9InZpZGlvYy1zdWJzY3JpYmUtZXZlbnQiPgotICA8cmVmbWV0YT4KLSAgICA8cmVmZW50cnl0aXRsZT5pb2N0bCBWSURJT0NfU1VCU0NSSUJFX0VWRU5ULCBWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQ8L3JlZmVudHJ5dGl0bGU+Ci0gICAgJm1hbnZvbDsKLSAgPC9yZWZtZXRhPgotCi0gIDxyZWZuYW1lZGl2PgotICAgIDxyZWZuYW1lPlZJRElPQ19TVUJTQ1JJQkVfRVZFTlQsIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVDwvcmVmbmFtZT4KLSAgICA8cmVmcHVycG9zZT5TdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgZXZlbnQ8L3JlZnB1cnBvc2U+Ci0gIDwvcmVmbmFtZWRpdj4KLQotICA8cmVmc3lub3BzaXNkaXY+Ci0gICAgPGZ1bmNzeW5vcHNpcz4KLSAgICAgIDxmdW5jcHJvdG90eXBlPgotCTxmdW5jZGVmPmludCA8ZnVuY3Rpb24+aW9jdGw8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLQk8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotCTxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLQk8cGFyYW1kZWY+c3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uCi0qPHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICA8L2Z1bmNzeW5vcHNpcz4KLSAgPC9yZWZzeW5vcHNpc2Rpdj4KLQotICA8cmVmc2VjdDE+Ci0gICAgPHRpdGxlPkFyZ3VtZW50czwvdGl0bGU+Ci0KLSAgICA8dmFyaWFibGVsaXN0PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPmZkPC9wYXJhbWV0ZXI+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPiZmZDs8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPHZhcmxpc3RlbnRyeT4KLQk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+Ci0JPGxpc3RpdGVtPgotCSAgPHBhcmE+VklESU9DX1NVQlNDUklCRV9FVkVOVCwgVklESU9DX1VOU1VCU0NSSUJFX0VWRU5UPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgIDx2YXJsaXN0ZW50cnk+Ci0JPHRlcm0+PHBhcmFtZXRlcj5hcmdwPC9wYXJhbWV0ZXI+PC90ZXJtPgotCTxsaXN0aXRlbT4KLQkgIDxwYXJhPjwvcGFyYT4KLQk8L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgPC92YXJpYWJsZWxpc3Q+Ci0gIDwvcmVmc2VjdDE+Ci0KLSAgPHJlZnNlY3QxPgotICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+Ci0KLSAgICA8cGFyYT5TdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgVjRMMiBldmVudC4gU3Vic2NyaWJlZCBldmVudHMgYXJlCi0gICAgZGVxdWV1ZWQgYnkgdXNpbmcgdGhlICZWSURJT0MtRFFFVkVOVDsgaW9jdGwuPC9wYXJhPgotCi0gICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWV2ZW50LXN1YnNjcmlwdGlvbiI+Ci0gICAgICA8dGl0bGU+c3RydWN0IDxzdHJ1Y3RuYW1lPnY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+Ci0gICAgICA8dGdyb3VwIGNvbHM9IjMiPgotCSZjcy1zdHI7Ci0JPHRib2R5IHZhbGlnbj0idG9wIj4KLQkgIDxyb3c+Ci0JICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+Ci0JICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KLQkgICAgPGVudHJ5PlR5cGUgb2YgdGhlIGV2ZW50LjwvZW50cnk+Ci0JICA8L3Jvdz4KLQkgIDxyb3c+Ci0JICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+Ci0JICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPls3XTwvZW50cnk+Ci0JICAgIDxlbnRyeT5SZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuIERyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucwotCSAgICBtdXN0IHNldCB0aGUgYXJyYXkgdG8gemVyby48L2VudHJ5PgotCSAgPC9yb3c+Ci0JPC90Ym9keT4KLSAgICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0KLSAgICA8dGFibGUgZnJhbWU9Im5vbmUiIHBnd2lkZT0iMSIgaWQ9ImV2ZW50LXR5cGUiPgotICAgICAgPHRpdGxlPkV2ZW50IFR5cGVzPC90aXRsZT4KLSAgICAgIDx0Z3JvdXAgY29scz0iMyI+Ci0JJmNzLWRlZjsKLQk8dGJvZHkgdmFsaWduPSJ0b3AiPgotCSAgPHJvdz4KLQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX0FMTDwvY29uc3RhbnQ+PC9lbnRyeT4KLQkgICAgPGVudHJ5PjA8L2VudHJ5PgotCSAgICA8ZW50cnk+QWxsIGV2ZW50cy4gVjRMMl9FVkVOVF9BTEwgaXMgdmFsaWQgb25seSBmb3IKLQkgICAgVklESU9DX1VOU1VCU0NSSUJFX0VWRU5UIGZvciB1bnN1YnNjcmliaW5nIGFsbCBldmVudHMgYXQgb25jZS4KLQkgICAgPC9lbnRyeT4KLQkgIDwvcm93PgotCSAgPHJvdz4KLQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX1ZTWU5DPC9jb25zdGFudD48L2VudHJ5PgotCSAgICA8ZW50cnk+MTwvZW50cnk+Ci0JICAgIDxlbnRyeT5UaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBvbiB0aGUgdmVydGljYWwgc3luYy4KLQkgICAgVGhpcyBldmVudCBoYXMgJnY0bDItZXZlbnQtdnN5bmM7IGFzc29jaWF0ZWQgd2l0aCBpdC4KLQkgICAgPC9lbnRyeT4KLQkgIDwvcm93PgotCSAgPHJvdz4KLQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX0VPUzwvY29uc3RhbnQ+PC9lbnRyeT4KLQkgICAgPGVudHJ5PjI8L2VudHJ5PgotCSAgICA8ZW50cnk+VGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZW5kIG9mIGEgc3RyZWFtIGlzIHJlYWNoZWQuCi0JICAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2l0aCBNUEVHIGRlY29kZXJzIHRvIHJlcG9ydCB0byB0aGUgYXBwbGljYXRpb24KLQkgICAgd2hlbiB0aGUgbGFzdCBvZiB0aGUgTVBFRyBzdHJlYW0gaGFzIGJlZW4gZGVjb2RlZC4KLQkgICAgPC9lbnRyeT4KLQkgIDwvcm93PgotCSAgPHJvdz4KLQkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQ8L2NvbnN0YW50PjwvZW50cnk+Ci0JICAgIDxlbnRyeT4weDA4MDAwMDAwPC9lbnRyeT4KLQkgICAgPGVudHJ5PkJhc2UgZXZlbnQgbnVtYmVyIGZvciBkcml2ZXItcHJpdmF0ZSBldmVudHMuPC9lbnRyeT4KLQkgIDwvcm93PgotCTwvdGJvZHk+Ci0gICAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotCi0gICAgPHRhYmxlIGZyYW1lPSJub25lIiBwZ3dpZGU9IjEiIGlkPSJ2NGwyLWV2ZW50LXZzeW5jIj4KLSAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9ldmVudF92c3luYzwvc3RydWN0bmFtZT48L3RpdGxlPgotICAgICAgPHRncm91cCBjb2xzPSIzIj4KLQkmY3Mtc3RyOwotCTx0Ym9keSB2YWxpZ249InRvcCI+Ci0JICA8cm93PgotCSAgICA8ZW50cnk+X191ODwvZW50cnk+Ci0JICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+ZmllbGQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+Ci0JICAgIDxlbnRyeT5UaGUgdXBjb21pbmcgZmllbGQuIFNlZSAmdjRsMi1maWVsZDsuPC9lbnRyeT4KLQkgIDwvcm93PgotCTwvdGJvZHk+Ci0gICAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotCi0gIDwvcmVmc2VjdDE+Ci08L3JlZmVudHJ5PgotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKaW5kZXggM2Y1ZTBiMC4uNTNlNmZjYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9NU0ktSE9XVE8udHh0CkBAIC00NSw3ICs0NSw3IEBACiBicmlkZ2VzKS4gIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgZGF0YSBoYXMgYXJyaXZlZCBpbiBtZW1vcnksCiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbXVzdCByZWFkIGEgcmVnaXN0ZXIgb24gdGhlIGRldmljZSB3aGljaCByYWlzZWQKIHRoZSBpbnRlcnJ1cHQuICBQQ0kgdHJhbnNhY3Rpb24gb3JkZXJpbmcgcnVsZXMgcmVxdWlyZSB0aGF0IGFsbCB0aGUgZGF0YQotYXJyaXZlcyBpbiBtZW1vcnkgYmVmb3JlIHRoZSB2YWx1ZSBjYW4gYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVnaXN0ZXIuCithcnJpdmUgaW4gbWVtb3J5IGJlZm9yZSB0aGUgdmFsdWUgbWF5IGJlIHJldHVybmVkIGZyb20gdGhlIHJlZ2lzdGVyLgogVXNpbmcgTVNJcyBhdm9pZHMgdGhpcyBwcm9ibGVtIGFzIHRoZSBpbnRlcnJ1cHQtZ2VuZXJhdGluZyB3cml0ZSBjYW5ub3QKIHBhc3MgdGhlIGRhdGEgd3JpdGVzLCBzbyBieSB0aGUgdGltZSB0aGUgaW50ZXJydXB0IGlzIHJhaXNlZCwgdGhlIGRyaXZlcgoga25vd3MgdGhhdCBhbGwgdGhlIGRhdGEgaGFzIGFycml2ZWQgaW4gbWVtb3J5LgpAQCAtODYsMTMgKzg2LDEzIEBACiAKIGludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCi1BIHN1Y2Nlc3NmdWwgY2FsbCB3aWxsIGFsbG9jYXRlIE9ORSBpbnRlcnJ1cHQgdG8gdGhlIGRldmljZSwgcmVnYXJkbGVzcwotb2YgaG93IG1hbnkgTVNJcyB0aGUgZGV2aWNlIHN1cHBvcnRzLiAgVGhlIGRldmljZSB3aWxsIGJlIHN3aXRjaGVkIGZyb20KK0Egc3VjY2Vzc2Z1bCBjYWxsIGFsbG9jYXRlcyBPTkUgaW50ZXJydXB0IHRvIHRoZSBkZXZpY2UsIHJlZ2FyZGxlc3MKK29mIGhvdyBtYW55IE1TSXMgdGhlIGRldmljZSBzdXBwb3J0cy4gIFRoZSBkZXZpY2UgaXMgc3dpdGNoZWQgZnJvbQogcGluLWJhc2VkIGludGVycnVwdCBtb2RlIHRvIE1TSSBtb2RlLiAgVGhlIGRldi0+aXJxIG51bWJlciBpcyBjaGFuZ2VkCi10byBhIG5ldyBudW1iZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgbWVzc2FnZSBzaWduYWxlZCBpbnRlcnJ1cHQuCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbHMgcmVxdWVzdF9pcnEoKQotc2luY2UgZW5hYmxpbmcgTVNJcyBkaXNhYmxlcyB0aGUgcGluLWJhc2VkIElSUSBhbmQgdGhlIGRyaXZlciB3aWxsIG5vdAotcmVjZWl2ZSBpbnRlcnJ1cHRzIG9uIHRoZSBvbGQgaW50ZXJydXB0LgordG8gYSBuZXcgbnVtYmVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIG1lc3NhZ2Ugc2lnbmFsZWQgaW50ZXJydXB0OworY29uc2VxdWVudGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbHMKK3JlcXVlc3RfaXJxKCksIGJlY2F1c2UgYW4gTVNJIGlzIGRlbGl2ZXJlZCB2aWEgYSB2ZWN0b3IgdGhhdCBpcworZGlmZmVyZW50IGZyb20gdGhlIHZlY3RvciBvZiBhIHBpbi1iYXNlZCBpbnRlcnJ1cHQuCiAKIDQuMi4yIHBjaV9lbmFibGVfbXNpX2Jsb2NrCiAKQEAgLTExMSwyMCArMTExLDIwIEBACiAKIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgaXQgaW5kaWNhdGVzIGFuIGVycm9yIGFuZAogdGhlIGRyaXZlciBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVxdWVzdCBhbnkgbW9yZSBNU0kgaW50ZXJydXB0cyBmb3IKLXRoaXMgZGV2aWNlLiAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCB3aWxsIGJlCi1sZXNzIHRoYW4gJ2NvdW50JyBhbmQgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHRoYXQgY291bGQgaGF2ZQotYmVlbiBhbGxvY2F0ZWQuICBJbiBuZWl0aGVyIGNhc2Ugd2lsbCB0aGUgaXJxIHZhbHVlIGhhdmUgYmVlbgotdXBkYXRlZCwgbm9yIHdpbGwgdGhlIGRldmljZSBoYXZlIGJlZW4gc3dpdGNoZWQgaW50byBNU0kgbW9kZS4KK3RoaXMgZGV2aWNlLiAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCBpcworbGVzcyB0aGFuICdjb3VudCcgYW5kIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgdGhhdCBjb3VsZCBoYXZlCitiZWVuIGFsbG9jYXRlZC4gIEluIG5laXRoZXIgY2FzZSBpcyB0aGUgaXJxIHZhbHVlIHVwZGF0ZWQgb3IgdGhlIGRldmljZQorc3dpdGNoZWQgaW50byBNU0kgbW9kZS4KIAogVGhlIGRldmljZSBkcml2ZXIgbXVzdCBkZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSBpZgotcGNpX2VuYWJsZV9tc2lfYmxvY2soKSByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHRoZSBudW1iZXIgYXNrZWQgZm9yLgotU29tZSBkZXZpY2VzIGNhbiBtYWtlIHVzZSBvZiBmZXdlciBpbnRlcnJ1cHRzIHRoYW4gdGhlIG1heGltdW0gdGhleQotcmVxdWVzdDsgaW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGNhbGwgcGNpX2VuYWJsZV9tc2lfYmxvY2soKQorcGNpX2VuYWJsZV9tc2lfYmxvY2soKSByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgorRm9yIGluc3RhbmNlLCB0aGUgZHJpdmVyIGNvdWxkIHN0aWxsIG1ha2UgdXNlIG9mIGZld2VyIGludGVycnVwdHM7CitpbiB0aGlzIGNhc2UgdGhlIGRyaXZlciBzaG91bGQgY2FsbCBwY2lfZW5hYmxlX21zaV9ibG9jaygpCiBhZ2Fpbi4gIE5vdGUgdGhhdCBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byBzdWNjZWVkLCBldmVuIHdoZW4gdGhlCiAnY291bnQnIGhhcyBiZWVuIHJlZHVjZWQgdG8gdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvCiBwY2lfZW5hYmxlX21zaV9ibG9jaygpLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25zdHJhaW50cwogb24gdGhlIG51bWJlciBvZiB2ZWN0b3JzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZDsgcGNpX2VuYWJsZV9tc2lfYmxvY2soKQotd2lsbCByZXR1cm4gYXMgc29vbiBhcyBpdCBmaW5kcyBhbnkgY29uc3RyYWludCB0aGF0IGRvZXNuJ3QgYWxsb3cgdGhlCityZXR1cm5zIGFzIHNvb24gYXMgaXQgZmluZHMgYW55IGNvbnN0cmFpbnQgdGhhdCBkb2Vzbid0IGFsbG93IHRoZQogY2FsbCB0byBzdWNjZWVkLgogCiA0LjIuMyBwY2lfZGlzYWJsZV9tc2kKQEAgLTEzNywxMCArMTM3LDEwIEBACiBpbnRlcnJ1cHQocykuICBUaGUgaW50ZXJydXB0IG1heSBzdWJzZXF1ZW50bHkgYmUgYXNzaWduZWQgdG8gYW5vdGhlcgogZGV2aWNlLCBzbyBkcml2ZXJzIHNob3VsZCBub3QgY2FjaGUgdGhlIHZhbHVlIG9mIGRldi0+aXJxLgogCi1BIGRldmljZSBkcml2ZXIgbXVzdCBhbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIHRoZSBpbnRlcnJ1cHQocykKLWZvciB3aGljaCBpdCBoYXMgY2FsbGVkIHJlcXVlc3RfaXJxKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLUZhaWx1cmUgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gYSBCVUdfT04oKSwgdGhlIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aAotTVNJIGVuYWJsZWQgYW5kIHdpbGwgbGVhayBpdHMgdmVjdG9yLgorQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYSBkZXZpY2UgZHJpdmVyIG11c3QgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKQorb24gYW55IGludGVycnVwdCBmb3Igd2hpY2ggaXQgcHJldmlvdXNseSBjYWxsZWQgcmVxdWVzdF9pcnEoKS4KK0ZhaWx1cmUgdG8gZG8gc28gcmVzdWx0cyBpbiBhIEJVR19PTigpLCBsZWF2aW5nIHRoZSBkZXZpY2Ugd2l0aAorTVNJIGVuYWJsZWQgYW5kIHRodXMgbGVha2luZyBpdHMgdmVjdG9yLgogCiA0LjMgVXNpbmcgTVNJLVgKIApAQCAtMTU1LDEwICsxNTUsMTAgQEAKIH07CiAKIFRoaXMgYWxsb3dzIGZvciB0aGUgZGV2aWNlIHRvIHVzZSB0aGVzZSBpbnRlcnJ1cHRzIGluIGEgc3BhcnNlIGZhc2hpb247Ci1mb3IgZXhhbXBsZSBpdCBjb3VsZCB1c2UgaW50ZXJydXB0cyAzIGFuZCAxMDI3IGFuZCBhbGxvY2F0ZSBvbmx5IGEKK2ZvciBleGFtcGxlLCBpdCBjb3VsZCB1c2UgaW50ZXJydXB0cyAzIGFuZCAxMDI3IGFuZCB5ZXQgYWxsb2NhdGUgb25seSBhCiB0d28tZWxlbWVudCBhcnJheS4gIFRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gZmlsbCBpbiB0aGUgJ2VudHJ5JyB2YWx1ZQotaW4gZWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB0byBpbmRpY2F0ZSB3aGljaCBlbnRyaWVzIGl0IHdhbnRzIHRoZSBrZXJuZWwKLXRvIGFzc2lnbiBpbnRlcnJ1cHRzIGZvci4gIEl0IGlzIGludmFsaWQgdG8gZmlsbCBpbiB0d28gZW50cmllcyB3aXRoIHRoZQoraW4gZWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB0byBpbmRpY2F0ZSBmb3Igd2hpY2ggZW50cmllcyB0aGUga2VybmVsCitzaG91bGQgYXNzaWduIGludGVycnVwdHM7IGl0IGlzIGludmFsaWQgdG8gZmlsbCBpbiB0d28gZW50cmllcyB3aXRoIHRoZQogc2FtZSBudW1iZXIuCiAKIDQuMy4xIHBjaV9lbmFibGVfbXNpeApAQCAtMTY4LDEwICsxNjgsMTEgQEAKIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBhc2tzIHRoZSBQQ0kgc3Vic3lzdGVtIHRvIGFsbG9jYXRlICdudmVjJyBNU0lzLgogVGhlICdlbnRyaWVzJyBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbXNpeF9lbnRyeSBzdHJ1Y3RzCiB3aGljaCBzaG91bGQgYmUgYXQgbGVhc3QgJ252ZWMnIGVudHJpZXMgaW4gc2l6ZS4gIE9uIHN1Y2Nlc3MsIHRoZQotZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBhbmQgdGhlIGRldmljZSB3aWxsIGhhdmUgYmVlbiBzd2l0Y2hlZCBpbnRvCi1NU0ktWCBpbnRlcnJ1cHQgbW9kZS4gIFRoZSAndmVjdG9yJyBlbGVtZW50cyBpbiBlYWNoIGVudHJ5IHdpbGwgaGF2ZQotYmVlbiBmaWxsZWQgaW4gd2l0aCB0aGUgaW50ZXJydXB0IG51bWJlci4gIFRoZSBkcml2ZXIgc2hvdWxkIHRoZW4gY2FsbAotcmVxdWVzdF9pcnEoKSBmb3IgZWFjaCAndmVjdG9yJyB0aGF0IGl0IGRlY2lkZXMgdG8gdXNlLgorZGV2aWNlIGlzIHN3aXRjaGVkIGludG8gTVNJLVggbW9kZSBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KK1RoZSAndmVjdG9yJyBtZW1iZXIgaW4gZWFjaCBlbnRyeSBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW50ZXJydXB0IG51bWJlcjsKK3RoZSBkcml2ZXIgc2hvdWxkIHRoZW4gY2FsbCByZXF1ZXN0X2lycSgpIGZvciBlYWNoICd2ZWN0b3InIHRoYXQgaXQKK2RlY2lkZXMgdG8gdXNlLiAgVGhlIGRldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlCitpbnRlcnJ1cHRzIGFzc2lnbmVkIHRvIHRoZSBNU0ktWCB2ZWN0b3JzIHNvIGl0IGNhbiBmcmVlIHRoZW0gYWdhaW4gbGF0ZXIuCiAKIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgaXQgaW5kaWNhdGVzIGFuIGVycm9yIGFuZAogdGhlIGRyaXZlciBzaG91bGQgbm90IGF0dGVtcHQgdG8gYWxsb2NhdGUgYW55IG1vcmUgTVNJLVggaW50ZXJydXB0cyBmb3IKQEAgLTE4MSwxNiArMTgyLDE0IEBACiAKIFRoaXMgZnVuY3Rpb24sIGluIGNvbnRyYXN0IHdpdGggcGNpX2VuYWJsZV9tc2koKSwgZG9lcyBub3QgYWRqdXN0CiBkZXYtPmlycS4gIFRoZSBkZXZpY2Ugd2lsbCBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnRlcnJ1cHQKLW51bWJlciBvbmNlIE1TSS1YIGlzIGVuYWJsZWQuICBUaGUgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKLWtlZXBpbmcgdHJhY2sgb2YgdGhlIGludGVycnVwdHMgYXNzaWduZWQgdG8gdGhlIE1TSS1YIHZlY3RvcnMgc28gaXQgY2FuCi1mcmVlIHRoZW0gYWdhaW4gbGF0ZXIuCitudW1iZXIgb25jZSBNU0ktWCBpcyBlbmFibGVkLgogCiBEZXZpY2UgZHJpdmVycyBzaG91bGQgbm9ybWFsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgcGVyIGRldmljZQogZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZS4KIAotSXQgaXMgaWRlYWwgaWYgZHJpdmVycyBjYW4gY29wZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIE1TSS1YIGludGVycnVwdHMsCitJdCBpcyBpZGVhbCBpZiBkcml2ZXJzIGNhbiBjb3BlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgTVNJLVggaW50ZXJydXB0czsKIHRoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5IHRoZSBwbGF0Zm9ybSBtYXkgbm90IGJlIGFibGUgdG8gcHJvdmlkZSB0aGUKLWV4YWN0IG51bWJlciBhIGRyaXZlciBhc2tzIGZvci4KK2V4YWN0IG51bWJlciB0aGF0IGEgZHJpdmVyIGFza3MgZm9yLgogCiBBIHJlcXVlc3QgbG9vcCB0byBhY2hpZXZlIHRoYXQgbWlnaHQgbG9vayBsaWtlOgogCkBAIC0yMTIsMTUgKzIxMSwxNSBAQAogCiB2b2lkIHBjaV9kaXNhYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldikKIAotVGhpcyBBUEkgc2hvdWxkIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpLiAgSXQgZnJlZXMKK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpLiAgSXQgZnJlZXMKIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZXNzYWdlIHNpZ25hbGVkIGludGVycnVwdHMuICBUaGUgaW50ZXJydXB0cyBtYXkKIHN1YnNlcXVlbnRseSBiZSBhc3NpZ25lZCB0byBhbm90aGVyIGRldmljZSwgc28gZHJpdmVycyBzaG91bGQgbm90IGNhY2hlCiB0aGUgdmFsdWUgb2YgdGhlICd2ZWN0b3InIGVsZW1lbnRzIG92ZXIgYSBjYWxsIHRvIHBjaV9kaXNhYmxlX21zaXgoKS4KIAotQSBkZXZpY2UgZHJpdmVyIG11c3QgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiB0aGUgaW50ZXJydXB0KHMpCi1mb3Igd2hpY2ggaXQgaGFzIGNhbGxlZCByZXF1ZXN0X2lycSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi1GYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGEgQlVHX09OKCksIHRoZSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGgKLU1TSSBlbmFibGVkIGFuZCB3aWxsIGxlYWsgaXRzIHZlY3Rvci4KK0JlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGEgZGV2aWNlIGRyaXZlciBtdXN0IGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkKK29uIGFueSBpbnRlcnJ1cHQgZm9yIHdoaWNoIGl0IHByZXZpb3VzbHkgY2FsbGVkIHJlcXVlc3RfaXJxKCkuCitGYWlsdXJlIHRvIGRvIHNvIHJlc3VsdHMgaW4gYSBCVUdfT04oKSwgbGVhdmluZyB0aGUgZGV2aWNlIHdpdGgKK01TSS1YIGVuYWJsZWQgYW5kIHRodXMgbGVha2luZyBpdHMgdmVjdG9yLgogCiA0LjMuMyBUaGUgTVNJLVggVGFibGUKIApAQCAtMjMyLDEwICsyMzEsMTAgQEAKIDQuNCBIYW5kbGluZyBkZXZpY2VzIGltcGxlbWVudGluZyBib3RoIE1TSSBhbmQgTVNJLVggY2FwYWJpbGl0aWVzCiAKIElmIGEgZGV2aWNlIGltcGxlbWVudHMgYm90aCBNU0kgYW5kIE1TSS1YIGNhcGFiaWxpdGllcywgaXQgY2FuCi1ydW4gaW4gZWl0aGVyIE1TSSBtb2RlIG9yIE1TSS1YIG1vZGUgYnV0IG5vdCBib3RoIHNpbXVsdGFuZW91c2x5LgorcnVuIGluIGVpdGhlciBNU0kgbW9kZSBvciBNU0ktWCBtb2RlLCBidXQgbm90IGJvdGggc2ltdWx0YW5lb3VzbHkuCiBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgb2YgdGhlIFBDSSBzcGVjLCBhbmQgaXQgaXMgZW5mb3JjZWQgYnkgdGhlCiBQQ0kgbGF5ZXIuICBDYWxsaW5nIHBjaV9lbmFibGVfbXNpKCkgd2hlbiBNU0ktWCBpcyBhbHJlYWR5IGVuYWJsZWQgb3IKLXBjaV9lbmFibGVfbXNpeCgpIHdoZW4gTVNJIGlzIGFscmVhZHkgZW5hYmxlZCB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KK3BjaV9lbmFibGVfbXNpeCgpIHdoZW4gTVNJIGlzIGFscmVhZHkgZW5hYmxlZCByZXN1bHRzIGluIGFuIGVycm9yLgogSWYgYSBkZXZpY2UgZHJpdmVyIHdpc2hlcyB0byBzd2l0Y2ggYmV0d2VlbiBNU0kgYW5kIE1TSS1YIGF0IHJ1bnRpbWUsCiBpdCBtdXN0IGZpcnN0IHF1aWVzY2UgdGhlIGRldmljZSwgdGhlbiBzd2l0Y2ggaXQgYmFjayB0byBwaW4taW50ZXJydXB0CiBtb2RlLCBiZWZvcmUgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpIG9yIHBjaV9lbmFibGVfbXNpeCgpIGFuZCByZXN1bWluZwpAQCAtMjUxLDcgKzI1MCw3IEBACiBhYm92ZSwgTVNJLVggc3VwcG9ydHMgYW55IG51bWJlciBvZiBpbnRlcnJ1cHRzIGJldHdlZW4gMSBhbmQgMjA0OC4KIEluIGNvbnN0cmFzdCwgTVNJIGlzIHJlc3RyaWN0ZWQgdG8gYSBtYXhpbXVtIG9mIDMyIGludGVycnVwdHMgKGFuZAogbXVzdCBiZSBhIHBvd2VyIG9mIHR3bykuICBJbiBhZGRpdGlvbiwgdGhlIE1TSSBpbnRlcnJ1cHQgdmVjdG9ycyBtdXN0Ci1iZSBhbGxvY2F0ZWQgY29uc2VjdXRpdmVseSwgc28gdGhlIHN5c3RlbSBtYXkgbm90IGJlIGFibGUgdG8gYWxsb2NhdGUKK2JlIGFsbG9jYXRlZCBjb25zZWN1dGl2ZWx5LCBzbyB0aGUgc3lzdGVtIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlCiBhcyBtYW55IHZlY3RvcnMgZm9yIE1TSSBhcyBpdCBjb3VsZCBmb3IgTVNJLVguICBPbiBzb21lIHBsYXRmb3JtcywgTVNJCiBpbnRlcnJ1cHRzIG11c3QgYWxsIGJlIHRhcmdldGVkIGF0IHRoZSBzYW1lIHNldCBvZiBDUFVzIHdoZXJlYXMgTVNJLVgKIGludGVycnVwdHMgY2FuIGFsbCBiZSB0YXJnZXRlZCBhdCBkaWZmZXJlbnQgQ1BVcy4KQEAgLTI4MSw3ICsyODAsNyBAQAogCiBVc2luZyAnbHNwY2kgLXYnIChhcyByb290KSBtYXkgc2hvdyBzb21lIGRldmljZXMgd2l0aCAiTVNJIiwgIk1lc3NhZ2UKIFNpZ25hbGxlZCBJbnRlcnJ1cHRzIiBvciAiTVNJLVgiIGNhcGFiaWxpdGllcy4gIEVhY2ggb2YgdGhlc2UgY2FwYWJpbGl0aWVzCi1oYXMgYW4gJ0VuYWJsZScgZmxhZyB3aGljaCB3aWxsIGJlIGZvbGxvd2VkIHdpdGggZWl0aGVyICIrIiAoZW5hYmxlZCkKK2hhcyBhbiAnRW5hYmxlJyBmbGFnIHdoaWNoIGlzIGZvbGxvd2VkIHdpdGggZWl0aGVyICIrIiAoZW5hYmxlZCkKIG9yICItIiAoZGlzYWJsZWQpLgogCiAKQEAgLTI5OCw3ICsyOTcsNyBAQAogCiBTb21lIGhvc3QgY2hpcHNldHMgc2ltcGx5IGRvbid0IHN1cHBvcnQgTVNJcyBwcm9wZXJseS4gIElmIHdlJ3JlCiBsdWNreSwgdGhlIG1hbnVmYWN0dXJlciBrbm93cyB0aGlzIGFuZCBoYXMgaW5kaWNhdGVkIGl0IGluIHRoZSBBQ1BJCi1GQURUIHRhYmxlLiAgSW4gdGhpcyBjYXNlLCBMaW51eCB3aWxsIGF1dG9tYXRpY2FsbHkgZGlzYWJsZSBNU0lzLgorRkFEVCB0YWJsZS4gIEluIHRoaXMgY2FzZSwgTGludXggYXV0b21hdGljYWxseSBkaXNhYmxlcyBNU0lzLgogU29tZSBib2FyZHMgZG9uJ3QgaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZSBhbmQgc28gd2UgaGF2ZQogdG8gZGV0ZWN0IHRoZW0gb3Vyc2VsdmVzLiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgdGhlc2UgaXMgZm91bmQgbmVhciB0aGUKIHF1aXJrX2Rpc2FibGVfYWxsX21zaSgpIGZ1bmN0aW9uIGluIGRyaXZlcnMvcGNpL3F1aXJrcy5jLgpAQCAtMzE3LDcgKzMxNiw3IEBACiBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAoZXNwZWNpYWxseSB0aGUgSHlwZXJ0cmFuc3BvcnQgY2hpcHNldHMgc3VjaAogYXMgdGhlIG5WaWRpYSBuRm9yY2UgYW5kIFNlcnZlcndvcmtzIEhUMjAwMCkuICBBcyB3aXRoIGhvc3QgY2hpcHNldHMsCiBMaW51eCBtb3N0bHkga25vd3MgYWJvdXQgdGhlbSBhbmQgYXV0b21hdGljYWxseSBlbmFibGVzIE1TSXMgaWYgaXQgY2FuLgotSWYgeW91IGhhdmUgYSBicmlkZ2Ugd2hpY2ggTGludXggZG9lc24ndCB5ZXQga25vdyBhYm91dCwgeW91IGNhbiBlbmFibGUKK0lmIHlvdSBoYXZlIGEgYnJpZGdlIHVua25vd24gdG8gTGludXgsIHlvdSBjYW4gZW5hYmxlCiBNU0lzIGluIGNvbmZpZ3VyYXRpb24gc3BhY2UgdXNpbmcgd2hhdGV2ZXIgbWV0aG9kIHlvdSBrbm93IHdvcmtzLCB0aGVuCiBlbmFibGUgTVNJcyBvbiB0aGF0IGJyaWRnZSBieSBkb2luZzoKIApAQCAtMzI3LDcgKzMyNiw3IEBACiAwMDAwOjAwOjBlLjApLgogCiBUbyBkaXNhYmxlIE1TSXMsIGVjaG8gMCBpbnN0ZWFkIG9mIDEuICBDaGFuZ2luZyB0aGlzIHZhbHVlIHNob3VsZCBiZQotZG9uZSB3aXRoIGNhdXRpb24gYXMgaXQgY2FuIGJyZWFrIGludGVycnVwdCBoYW5kbGluZyBmb3IgYWxsIGRldmljZXMKK2RvbmUgd2l0aCBjYXV0aW9uIGFzIGl0IGNvdWxkIGJyZWFrIGludGVycnVwdCBoYW5kbGluZyBmb3IgYWxsIGRldmljZXMKIGJlbG93IHRoaXMgYnJpZGdlLgogCiBBZ2FpbiwgcGxlYXNlIG5vdGlmeSBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnIG9mIGFueSBicmlkZ2VzIHRoYXQgbmVlZApAQCAtMzM2LDcgKzMzNSw3IEBACiA1LjMuIERpc2FibGluZyBNU0lzIG9uIGEgc2luZ2xlIGRldmljZQogCiBTb21lIGRldmljZXMgYXJlIGtub3duIHRvIGhhdmUgZmF1bHR5IE1TSSBpbXBsZW1lbnRhdGlvbnMuICBVc3VhbGx5IHRoaXMKLWlzIGhhbmRsZWQgaW4gdGhlIGluZGl2aWR1YWwgZGV2aWNlIGRyaXZlciBidXQgb2NjYXNpb25hbGx5IGl0J3MgbmVjZXNzYXJ5CitpcyBoYW5kbGVkIGluIHRoZSBpbmRpdmlkdWFsIGRldmljZSBkcml2ZXIsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQncyBuZWNlc3NhcnkKIHRvIGhhbmRsZSB0aGlzIHdpdGggYSBxdWlyay4gIFNvbWUgZHJpdmVycyBoYXZlIGFuIG9wdGlvbiB0byBkaXNhYmxlIHVzZQogb2YgTVNJLiAgV2hpbGUgdGhpcyBpcyBhIGNvbnZlbmllbnQgd29ya2Fyb3VuZCBmb3IgdGhlIGRyaXZlciBhdXRob3IsCiBpdCBpcyBub3QgZ29vZCBwcmFjdGlzZSwgYW5kIHNob3VsZCBub3QgYmUgZW11bGF0ZWQuCkBAIC0zNTAsNyArMzQ5LDcgQEAKIGhhdmUgZW5hYmxlZCBDT05GSUdfUENJX01TSS4KIAogVGhlbiwgJ2xzcGNpIC10JyBnaXZlcyB0aGUgbGlzdCBvZiBicmlkZ2VzIGFib3ZlIGEgZGV2aWNlLiAgUmVhZGluZwotL3N5cy9idXMvcGNpL2RldmljZXMvKi9tc2lfYnVzIHdpbGwgdGVsbCB5b3Ugd2hldGhlciBNU0kgYXJlIGVuYWJsZWQgKDEpCisvc3lzL2J1cy9wY2kvZGV2aWNlcy8qL21zaV9idXMgd2lsbCB0ZWxsIHlvdSB3aGV0aGVyIE1TSXMgYXJlIGVuYWJsZWQgKDEpCiBvciBkaXNhYmxlZCAoMCkuICBJZiAwIGlzIGZvdW5kIGluIGFueSBvZiB0aGUgbXNpX2J1cyBmaWxlcyBiZWxvbmdpbmcKIHRvIGJyaWRnZXMgYmV0d2VlbiB0aGUgUENJIHJvb3QgYW5kIHRoZSBkZXZpY2UsIE1TSXMgYXJlIGRpc2FibGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCAzMTliYWE4Li4zNmQxNmJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCWZ0cC4/Py5rZXJuZWwub3JnOi9wdWIvbGludXgva2VybmVsLy4uLgogCT8/ID09IHlvdXIgY291bnRyeSBjb2RlLCBzdWNoIGFzICJ1cyIsICJ1ayIsICJmciIsIGV0Yy4KIAotCWh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQKKwlodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQKIAogTGludXgga2VybmVsIG1haWxpbmcgbGlzdDoKIAlsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA1NjlmMzUzLi40NDY4Y2UyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTMwMyw3ICszMDMsNyBAQAogCiBUaGUgc2lnbi1vZmYgaXMgYSBzaW1wbGUgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBleHBsYW5hdGlvbiBmb3IgdGhlCiBwYXRjaCwgd2hpY2ggY2VydGlmaWVzIHRoYXQgeW91IHdyb3RlIGl0IG9yIG90aGVyd2lzZSBoYXZlIHRoZSByaWdodCB0bwotcGFzcyBpdCBvbiBhcyBhIG9wZW4tc291cmNlIHBhdGNoLiAgVGhlIHJ1bGVzIGFyZSBwcmV0dHkgc2ltcGxlOiBpZiB5b3UKK3Bhc3MgaXQgb24gYXMgYW4gb3Blbi1zb3VyY2UgcGF0Y2guICBUaGUgcnVsZXMgYXJlIHByZXR0eSBzaW1wbGU6IGlmIHlvdQogY2FuIGNlcnRpZnkgdGhlIGJlbG93OgogCiAgICAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNwaS9hcGVpL2VpbmoudHh0IGIvRG9jdW1lbnRhdGlvbi9hY3BpL2FwZWkvZWluai50eHQKaW5kZXggZGZhYjcxOC4uNWNjNjk5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY3BpL2FwZWkvZWluai50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hY3BpL2FwZWkvZWluai50eHQKQEAgLTQ4LDEyICs0OCwxOSBAQAogLSBwYXJhbTEKICAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gc2V0IHRoZSBmaXJzdCBlcnJvciBwYXJhbWV0ZXIgdmFsdWUuIEVmZmVjdCBvZgogICBwYXJhbWV0ZXIgZGVwZW5kcyBvbiBlcnJvcl90eXBlIHNwZWNpZmllZC4gRm9yIG1lbW9yeSBlcnJvciwgdGhpcyBpcwotICBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcy4KKyAgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MuICBPbmx5IGF2YWlsYWJsZSBpZiBwYXJhbV9leHRlbnNpb24gbW9kdWxlCisgIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuCiAKIC0gcGFyYW0yCiAgIFRoaXMgZmlsZSBpcyB1c2VkIHRvIHNldCB0aGUgc2Vjb25kIGVycm9yIHBhcmFtZXRlciB2YWx1ZS4gRWZmZWN0IG9mCiAgIHBhcmFtZXRlciBkZXBlbmRzIG9uIGVycm9yX3R5cGUgc3BlY2lmaWVkLiBGb3IgbWVtb3J5IGVycm9yLCB0aGlzIGlzCi0gIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIG1hc2suCisgIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIG1hc2suICBPbmx5IGF2YWlsYWJsZSBpZiBwYXJhbV9leHRlbnNpb24KKyAgbW9kdWxlIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuCisKK0luamVjdGluZyBwYXJhbWV0ZXIgc3VwcG9ydCBpcyBhIEJJT1MgdmVyc2lvbiBzcGVjaWZpYyBleHRlbnNpb24sIHRoYXQKK2lzLCBpdCBvbmx5IHdvcmtzIG9uIHNvbWUgQklPUyB2ZXJzaW9uLiAgSWYgeW91IHdhbnQgdG8gdXNlIGl0LCBwbGVhc2UKK21ha2Ugc3VyZSB5b3VyIEJJT1MgdmVyc2lvbiBoYXMgdGhlIHByb3BlciBzdXBwb3J0IGFuZCBzcGVjaWZ5CisicGFyYW1fZXh0ZW5zaW9uPXkiIGluIG1vZHVsZSBwYXJhbWV0ZXIuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEVJTkosIHBsZWFzZSByZWZlciB0byBBQ1BJIHNwZWNpZmljYXRpb24KIHZlcnNpb24gNC4wLCBzZWN0aW9uIDE3LjUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2NmcS1pb3NjaGVkLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svY2ZxLWlvc2NoZWQudHh0CmluZGV4IGU1NzhmZWUuLjZkNjcwZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svY2ZxLWlvc2NoZWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svY2ZxLWlvc2NoZWQudHh0CkBAIC00MywzICs0Myw3NCBAQAogdG8gSU9QUyBtb2RlIGFuZCBzdGFydHMgcHJvdmlkaW5nIGZhaXJuZXNzIGluIHRlcm1zIG9mIG51bWJlciBvZiByZXF1ZXN0cwogZGlzcGF0Y2hlZC4gTm90ZSB0aGF0IHRoaXMgbW9kZSBzd2l0Y2hpbmcgdGFrZXMgZWZmZWN0IG9ubHkgZm9yIGdyb3VwCiBzY2hlZHVsaW5nLiBGb3Igbm9uLWNncm91cCB1c2VycyBub3RoaW5nIHNob3VsZCBjaGFuZ2UuCisKK0NGUSBJTyBzY2hlZHVsZXIgSWRsaW5nIFRoZW9yeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSWRsaW5nIG9uIGEgcXVldWUgaXMgcHJpbWFyaWx5IGFib3V0IHdhaXRpbmcgZm9yIHRoZSBuZXh0IHJlcXVlc3QgdG8gY29tZQorb24gc2FtZSBxdWV1ZSBhZnRlciBjb21wbGV0aW9uIG9mIGEgcmVxdWVzdC4gSW4gdGhpcyBwcm9jZXNzIENGUSB3aWxsIG5vdAorZGlzcGF0Y2ggcmVxdWVzdHMgZnJvbSBvdGhlciBjZnEgcXVldWVzIGV2ZW4gaWYgcmVxdWVzdHMgYXJlIHBlbmRpbmcgdGhlcmUuCisKK1RoZSByYXRpb25hbGUgYmVoaW5kIGlkbGluZyBpcyB0aGF0IGl0IGNhbiBjdXQgZG93biBvbiBudW1iZXIgb2Ygc2Vla3MKK29uIHJvdGF0aW9uYWwgbWVkaWEuIEZvciBleGFtcGxlLCBpZiBhIHByb2Nlc3MgaXMgZG9pbmcgZGVwZW5kZW50CitzZXF1ZW50aWFsIHJlYWRzIChuZXh0IHJlYWQgd2lsbCBjb21lIG9uIG9ubHkgYWZ0ZXIgY29tcGxldGlvbiBvZiBwcmV2aW91cworb25lKSwgdGhlbiBub3QgZGlzcGF0Y2hpbmcgcmVxdWVzdCBmcm9tIG90aGVyIHF1ZXVlIHNob3VsZCBoZWxwIGFzIHdlCitkaWQgbm90IG1vdmUgdGhlIGRpc2sgaGVhZCBhbmQga2VwdCBvbiBkaXNwYXRjaGluZyBzZXF1ZW50aWFsIElPIGZyb20KK29uZSBxdWV1ZS4KKworQ0ZRIGhhcyBmb2xsb3dpbmcgc2VydmljZSB0cmVlcyBhbmQgdmFyaW91cyBxdWV1ZXMgYXJlIHB1dCBvbiB0aGVzZSB0cmVlcy4KKworCXN5bmMtaWRsZQlzeW5jLW5vaWRsZQlhc3luYworCitBbGwgY2ZxIHF1ZXVlcyBkb2luZyBzeW5jaHJvbm91cyBzZXF1ZW50aWFsIElPIGdvIG9uIHRvIHN5bmMtaWRsZSB0cmVlLgorT24gdGhpcyB0cmVlIHdlIGlkbGUgb24gZWFjaCBxdWV1ZSBpbmRpdmlkdWFsbHkuCisKK0FsbCBzeW5jaHJvbm91cyBub24tc2VxdWVudGlhbCBxdWV1ZXMgZ28gb24gc3luYy1ub2lkbGUgdHJlZS4gQWxzbyBhbnkKK3JlcXVlc3Qgd2hpY2ggYXJlIG1hcmtlZCB3aXRoIFJFUV9OT0lETEUgZ28gb24gdGhpcyBzZXJ2aWNlIHRyZWUuIE9uIHRoaXMKK3RyZWUgd2UgZG8gbm90IGlkbGUgb24gaW5kaXZpZHVhbCBxdWV1ZXMgaW5zdGVhZCBpZGxlIG9uIHRoZSB3aG9sZSBncm91cAorb2YgcXVldWVzIG9yIHRoZSB0cmVlLiBTbyBpZiB0aGVyZSBhcmUgNCBxdWV1ZXMgd2FpdGluZyBmb3IgSU8gdG8gZGlzcGF0Y2gKK3dlIHdpbGwgaWRsZSBvbmx5IG9uY2UgbGFzdCBxdWV1ZSBoYXMgZGlzcGF0Y2hlZCB0aGUgSU8gYW5kIHRoZXJlIGlzCitubyBtb3JlIElPIG9uIHRoaXMgc2VydmljZSB0cmVlLgorCitBbGwgYXN5bmMgd3JpdGVzIGdvIG9uIGFzeW5jIHNlcnZpY2UgdHJlZS4gVGhlcmUgaXMgbm8gaWRsaW5nIG9uIGFzeW5jCitxdWV1ZXMuCisKK0NGUSBoYXMgc29tZSBvcHRpbWl6YXRpb25zIGZvciBTU0RzIGFuZCBpZiBpdCBkZXRlY3RzIGEgbm9uLXJvdGF0aW9uYWwKK21lZGlhIHdoaWNoIGNhbiBzdXBwb3J0IGhpZ2hlciBxdWV1ZSBkZXB0aCAobXVsdGlwbGUgcmVxdWVzdHMgYXQgaW4KK2ZsaWdodCBhdCBhIHRpbWUpLCB0aGVuIGl0IGN1dHMgZG93biBvbiBpZGxpbmcgb2YgaW5kaXZpZHVhbCBxdWV1ZXMgYW5kCithbGwgdGhlIHF1ZXVlcyBtb3ZlIHRvIHN5bmMtbm9pZGxlIHRyZWUgYW5kIG9ubHkgdHJlZSBpZGxlIHJlbWFpbnMuIFRoaXMKK3RyZWUgaWRsaW5nIHByb3ZpZGVzIGlzb2xhdGlvbiB3aXRoIGJ1ZmZlcmVkIHdyaXRlIHF1ZXVlcyBvbiBhc3luYyB0cmVlLgorCitGQVEKKz09PQorUTEuIFdoeSB0byBpZGxlIGF0IGFsbCBvbiBxdWV1ZXMgbWFya2VkIHdpdGggUkVRX05PSURMRS4KKworQTEuIFdlIG9ubHkgZG8gdHJlZSBpZGxlIChhbGwgcXVldWVzIG9uIHN5bmMtbm9pZGxlIHRyZWUpIG9uIHF1ZXVlcyBtYXJrZWQKKyAgICB3aXRoIFJFUV9OT0lETEUuIFRoaXMgaGVscHMgaW4gcHJvdmlkaW5nIGlzb2xhdGlvbiB3aXRoIGFsbCB0aGUgc3luYy1pZGxlCisgICAgcXVldWVzLiBPdGhlcndpc2UgaW4gcHJlc2VuY2Ugb2YgbWFueSBzZXF1ZW50aWFsIHJlYWRlcnMsIG90aGVyCisgICAgc3luY2hyb25vdXMgSU8gbWlnaHQgbm90IGdldCBmYWlyIHNoYXJlIG9mIGRpc2suCisKKyAgICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIDEwIHNlcXVlbnRpYWwgcmVhZGVycyBkb2luZyBJTyBhbmQgdGhleSBnZXQKKyAgICAxMDBtcyBlYWNoLiBJZiBhIFJFUV9OT0lETEUgcmVxdWVzdCBjb21lcyBpbiwgaXQgd2lsbCBiZSBzY2hlZHVsZWQKKyAgICByb3VnaGx5IGFmdGVyIDEgc2Vjb25kLiBJZiBhZnRlciBjb21wbGV0aW9uIG9mIFJFUV9OT0lETEUgcmVxdWVzdCB3ZQorICAgIGRvIG5vdCBpZGxlLCBhbmQgYWZ0ZXIgYSBjb3VwbGUgb2YgbWlsbGkgc2Vjb25kcyBhIGFub3RoZXIgUkVRX05PSURMRQorICAgIHJlcXVlc3QgY29tZXMgaW4sIGFnYWluIGl0IHdpbGwgYmUgc2NoZWR1bGVkIGFmdGVyIDFzZWNvbmQuIFJlcGVhdCBpdAorICAgIGFuZCBub3RpY2UgaG93IGEgd29ya2xvYWQgY2FuIGxvc2UgaXRzIGRpc2sgc2hhcmUgYW5kIHN1ZmZlciBkdWUgdG8KKyAgICBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlYWRlcnMuCisKKyAgICBmc3luYyBjYW4gZ2VuZXJhdGUgZGVwZW5kZW50IElPIHdoZXJlIGJ1bmNoIG9mIGRhdGEgaXMgd3JpdHRlbiBpbiB0aGUKKyAgICBjb250ZXh0IG9mIGZzeW5jLCBhbmQgbGF0ZXIgc29tZSBqb3VybmFsaW5nIGRhdGEgaXMgd3JpdHRlbi4gSm91cm5hbGluZworICAgIGRhdGEgY29tZXMgaW4gb25seSBhZnRlciBmc3luYyBoYXMgZmluaXNoZWQgaXRzIElPIChhdGxlYXN0IGZvciBleHQ0CisgICAgdGhhdCBzZWVtZWQgdG8gYmUgdGhlIGNhc2UpLiBOb3cgaWYgb25lIGRlY2lkZXMgbm90IHRvIGlkbGUgb24gZnN5bmMKKyAgICB0aHJlYWQgZHVlIHRvIFJFUV9OT0lETEUsIHRoZW4gbmV4dCBqb3VybmFsaW5nIHdyaXRlIHdpbGwgbm90IGdldAorICAgIHNjaGVkdWxlZCBmb3IgYW5vdGhlciBzZWNvbmQuIEEgcHJvY2VzcyBkb2luZyBzbWFsbCBmc3luYywgd2lsbCBzdWZmZXIKKyAgICBiYWRseSBpbiBwcmVzZW5jZSBvZiBtdWx0aXBsZSBzZXF1ZW50aWFsIHJlYWRlcnMuCisKKyAgICBIZW5jZSBkb2luZyB0cmVlIGlkbGluZyBvbiB0aHJlYWRzIHVzaW5nIFJFUV9OT0lETEUgZmxhZyBvbiByZXF1ZXN0cworICAgIHByb3ZpZGVzIGlzb2xhdGlvbiBmcm9tIG11bHRpcGxlIHNlcXVlbnRpYWwgcmVhZGVycyBhbmQgYXQgdGhlIHNhbWUKKyAgICB0aW1lIHdlIGRvIG5vdCBpZGxlIG9uIGluZGl2aWR1YWwgdGhyZWFkcy4KKworUTIuIFdoZW4gdG8gc3BlY2lmeSBSRVFfTk9JRExFCitBMi4gSSB3b3VsZCB0aGluayB3aGVuZXZlciBvbmUgaXMgZG9pbmcgc3luY2hyb25vdXMgd3JpdGUgYW5kIG5vdCBleHBlY3RpbmcKKyAgICBtb3JlIHdyaXRlcyB0byBiZSBkaXNwYXRjaGVkIGZyb20gc2FtZSBjb250ZXh0IHNvb24sIHNob3VsZCBiZSBhYmxlCisgICAgdG8gc3BlY2lmeSBSRVFfTk9JRExFIG9uIHdyaXRlcyBhbmQgdGhhdCBwcm9iYWJseSBzaG91bGQgd29yayB3ZWxsIGZvcgorICAgIG1vc3Qgb2YgdGhlIGNhc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAppbmRleCA2ZjNjNTk4Li4wNmViNmQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dApAQCAtMzgwLDcgKzM4MCw3IEBACiAKIDUuMiBzdGF0IGZpbGUKIAotNS4yLjEgbWVtb3J5LnN0YXQgZmlsZSBpbmNsdWRlcyBmb2xsb3dpbmcgc3RhdGlzdGljcworbWVtb3J5LnN0YXQgZmlsZSBpbmNsdWRlcyBmb2xsb3dpbmcgc3RhdGlzdGljcwogCiAjIHBlci1tZW1vcnkgY2dyb3VwIGxvY2FsIHN0YXR1cwogY2FjaGUJCS0gIyBvZiBieXRlcyBvZiBwYWdlIGNhY2hlIG1lbW9yeS4KQEAgLTQzOCw4OSArNDM4LDYgQEAKIAkgZmlsZV9tYXBwZWQgaXMgYWNjb3VudGVkIG9ubHkgd2hlbiB0aGUgbWVtb3J5IGNncm91cCBpcyBvd25lciBvZiBwYWdlCiAJIGNhY2hlLikKIAotNS4yLjIgbWVtb3J5LnZtc2Nhbl9zdGF0Ci0KLW1lbW9yeS52bXNjYW5fc3RhdCBpbmNsdWRlcyBzdGF0aXN0aWNzIGluZm9ybWF0aW9uIGZvciBtZW1vcnkgc2Nhbm5pbmcgYW5kCi1mcmVlaW5nLCByZWNsYWltaW5nLiBUaGUgc3RhdGlzdGljcyBzaG93cyBtZW1vcnkgc2Nhbm5pbmcgaW5mb3JtYXRpb24gc2luY2UKLW1lbW9yeSBjZ3JvdXAgY3JlYXRpb24gYW5kIGNhbiBiZSByZXNldCB0byAwIGJ5IHdyaXRpbmcgMCBhcwotCi0gI2VjaG8gMCA+IC4uL21lbW9yeS52bXNjYW5fc3RhdAotCi1UaGlzIGZpbGUgY29udGFpbnMgZm9sbG93aW5nIHN0YXRpc3RpY3MuCi0KLVtwYXJhbV1fW2ZpbGVfb3JfYW5vbl1fcGFnZXNfYnlfW3JlYXNvbl1fW3VuZGVyX2hlYXJhcmNoeV0KLVtwYXJhbV1fZWxhcHNlZF9uc19ieV9bcmVhc29uXV9bdW5kZXJfaGllcmFyY2h5XQotCi1Gb3IgZXhhbXBsZSwKLQotICBzY2FubmVkX2ZpbGVfcGFnZXNfYnlfbGltaXQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZAotICBmaWxlIHBhZ2VzIGF0IHZtc2Nhbi4KLQotTm93LCAzIHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZAotCi0gIHNjYW5uZWQgLSB0aGUgbnVtYmVyIG9mIHBhZ2VzIHNjYW5uZWQgYnkgdm1zY2FuCi0gIHJvdGF0ZWQgLSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGFjdGl2YXRlZCBhdCB2bXNjYW4KLSAgZnJlZWQgICAtIHRoZSBudW1iZXIgb2YgcGFnZXMgZnJlZWQgYnkgdm1zY2FuCi0KLUlmICJyb3RhdGVkIiBpcyBoaWdoIGFnYWluc3Qgc2Nhbm5lZC9mcmVlZCwgdGhlIG1lbWNnIHNlZW1zIGJ1c3kuCi0KLU5vdywgMiByZWFzb24gYXJlIHN1cHBvcnRlZAotCi0gIGxpbWl0IC0gdGhlIG1lbW9yeSBjZ3JvdXAncyBsaW1pdAotICBzeXN0ZW0gLSBnbG9iYWwgbWVtb3J5IHByZXNzdXJlICsgc29mdGxpbWl0Ci0gICAgICAgICAgIChnbG9iYWwgbWVtb3J5IHByZXNzdXJlIG5vdCB1bmRlciBzb2Z0bGltaXQgaXMgbm90IGhhbmRsZWQgbm93KQotCi1XaGVuIHVuZGVyX2hpZXJhcmNoeSBpcyBhZGRlZCBpbiB0aGUgdGFpbCwgdGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlCi10b3RhbCBtZW1jZyBzY2FuIG9mIGl0cyBjaGlsZHJlbiBhbmQgaXRzZWxmLgotCi1lbGFwc2VkX25zIGlzIGEgZWxhcHNlZCB0aW1lIGluIG5hbm9zZWNvbmQuIFRoaXMgbWF5IGluY2x1ZGUgc2xlZXAgdGltZQotYW5kIG5vdCBpbmRpY2F0ZXMgQ1BVIHVzYWdlLiBTbywgcGxlYXNlIHRha2UgdGhpcyBhcyBqdXN0IHNob3dpbmcKLWxhdGVuY3kuCi0KLUhlcmUgaXMgYW4gZXhhbXBsZS4KLQotIyBjYXQgL2Nncm91cC9tZW1vcnkvQS9tZW1vcnkudm1zY2FuX3N0YXQKLXNjYW5uZWRfcGFnZXNfYnlfbGltaXQgOTQ3MTg2NAotc2Nhbm5lZF9hbm9uX3BhZ2VzX2J5X2xpbWl0IDY2NDA2MjkKLXNjYW5uZWRfZmlsZV9wYWdlc19ieV9saW1pdCAyODMxMjM1Ci1yb3RhdGVkX3BhZ2VzX2J5X2xpbWl0IDQyNDM5NzQKLXJvdGF0ZWRfYW5vbl9wYWdlc19ieV9saW1pdCAzOTcxOTY4Ci1yb3RhdGVkX2ZpbGVfcGFnZXNfYnlfbGltaXQgMjcyMDA2Ci1mcmVlZF9wYWdlc19ieV9saW1pdCAyMzE4NDkyCi1mcmVlZF9hbm9uX3BhZ2VzX2J5X2xpbWl0IDk2MjA1MgotZnJlZWRfZmlsZV9wYWdlc19ieV9saW1pdCAxMzU2NDQwCi1lbGFwc2VkX25zX2J5X2xpbWl0IDM1MTM4NjQxNjEwMQotc2Nhbm5lZF9wYWdlc19ieV9zeXN0ZW0gMAotc2Nhbm5lZF9hbm9uX3BhZ2VzX2J5X3N5c3RlbSAwCi1zY2FubmVkX2ZpbGVfcGFnZXNfYnlfc3lzdGVtIDAKLXJvdGF0ZWRfcGFnZXNfYnlfc3lzdGVtIDAKLXJvdGF0ZWRfYW5vbl9wYWdlc19ieV9zeXN0ZW0gMAotcm90YXRlZF9maWxlX3BhZ2VzX2J5X3N5c3RlbSAwCi1mcmVlZF9wYWdlc19ieV9zeXN0ZW0gMAotZnJlZWRfYW5vbl9wYWdlc19ieV9zeXN0ZW0gMAotZnJlZWRfZmlsZV9wYWdlc19ieV9zeXN0ZW0gMAotZWxhcHNlZF9uc19ieV9zeXN0ZW0gMAotc2Nhbm5lZF9wYWdlc19ieV9saW1pdF91bmRlcl9oaWVyYXJjaHkgOTQ3MTg2NAotc2Nhbm5lZF9hbm9uX3BhZ2VzX2J5X2xpbWl0X3VuZGVyX2hpZXJhcmNoeSA2NjQwNjI5Ci1zY2FubmVkX2ZpbGVfcGFnZXNfYnlfbGltaXRfdW5kZXJfaGllcmFyY2h5IDI4MzEyMzUKLXJvdGF0ZWRfcGFnZXNfYnlfbGltaXRfdW5kZXJfaGllcmFyY2h5IDQyNDM5NzQKLXJvdGF0ZWRfYW5vbl9wYWdlc19ieV9saW1pdF91bmRlcl9oaWVyYXJjaHkgMzk3MTk2OAotcm90YXRlZF9maWxlX3BhZ2VzX2J5X2xpbWl0X3VuZGVyX2hpZXJhcmNoeSAyNzIwMDYKLWZyZWVkX3BhZ2VzX2J5X2xpbWl0X3VuZGVyX2hpZXJhcmNoeSAyMzE4NDkyCi1mcmVlZF9hbm9uX3BhZ2VzX2J5X2xpbWl0X3VuZGVyX2hpZXJhcmNoeSA5NjIwNTIKLWZyZWVkX2ZpbGVfcGFnZXNfYnlfbGltaXRfdW5kZXJfaGllcmFyY2h5IDEzNTY0NDAKLWVsYXBzZWRfbnNfYnlfbGltaXRfdW5kZXJfaGllcmFyY2h5IDM1MTM4NjQxNjEwMQotc2Nhbm5lZF9wYWdlc19ieV9zeXN0ZW1fdW5kZXJfaGllcmFyY2h5IDAKLXNjYW5uZWRfYW5vbl9wYWdlc19ieV9zeXN0ZW1fdW5kZXJfaGllcmFyY2h5IDAKLXNjYW5uZWRfZmlsZV9wYWdlc19ieV9zeXN0ZW1fdW5kZXJfaGllcmFyY2h5IDAKLXJvdGF0ZWRfcGFnZXNfYnlfc3lzdGVtX3VuZGVyX2hpZXJhcmNoeSAwCi1yb3RhdGVkX2Fub25fcGFnZXNfYnlfc3lzdGVtX3VuZGVyX2hpZXJhcmNoeSAwCi1yb3RhdGVkX2ZpbGVfcGFnZXNfYnlfc3lzdGVtX3VuZGVyX2hpZXJhcmNoeSAwCi1mcmVlZF9wYWdlc19ieV9zeXN0ZW1fdW5kZXJfaGllcmFyY2h5IDAKLWZyZWVkX2Fub25fcGFnZXNfYnlfc3lzdGVtX3VuZGVyX2hpZXJhcmNoeSAwCi1mcmVlZF9maWxlX3BhZ2VzX2J5X3N5c3RlbV91bmRlcl9oaWVyYXJjaHkgMAotZWxhcHNlZF9uc19ieV9zeXN0ZW1fdW5kZXJfaGllcmFyY2h5IDAKLQogNS4zIHN3YXBwaW5lc3MKIAogU2ltaWxhciB0byAvcHJvYy9zeXMvdm0vc3dhcHBpbmVzcywgYnV0IGFmZmVjdGluZyBhIGhpZXJhcmNoeSBvZiBncm91cHMgb25seS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1jcnlwdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tY3J5cHQudHh0CmluZGV4IDZiNWM0MmQuLjJjNjU2YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1jcnlwdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWNyeXB0LnR4dApAQCAtNCw3ICs0LDggQEAKIERldmljZS1NYXBwZXIncyAiY3J5cHQiIHRhcmdldCBwcm92aWRlcyB0cmFuc3BhcmVudCBlbmNyeXB0aW9uIG9mIGJsb2NrIGRldmljZXMKIHVzaW5nIHRoZSBrZXJuZWwgY3J5cHRvIEFQSS4KIAotUGFyYW1ldGVyczogPGNpcGhlcj4gPGtleT4gPGl2X29mZnNldD4gPGRldmljZSBwYXRoPiA8b2Zmc2V0PgorUGFyYW1ldGVyczogPGNpcGhlcj4gPGtleT4gPGl2X29mZnNldD4gPGRldmljZSBwYXRoPiBcCisJICAgICAgPG9mZnNldD4gWzwjb3B0X3BhcmFtcz4gPG9wdF9wYXJhbXM+XQogCiA8Y2lwaGVyPgogICAgIEVuY3J5cHRpb24gY2lwaGVyIGFuZCBhbiBvcHRpb25hbCBJViBnZW5lcmF0aW9uIG1vZGUuCkBAIC0zNyw2ICszOCwyNCBAQAogPG9mZnNldD4KICAgICBTdGFydGluZyBzZWN0b3Igd2l0aGluIHRoZSBkZXZpY2Ugd2hlcmUgdGhlIGVuY3J5cHRlZCBkYXRhIGJlZ2lucy4KIAorPCNvcHRfcGFyYW1zPgorICAgIE51bWJlciBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzLiBJZiB0aGVyZSBhcmUgbm8gb3B0aW9uYWwgcGFyYW1ldGVycywKKyAgICB0aGUgb3B0aW9uYWwgcGFyYW1hdGVycyBzZWN0aW9uIGNhbiBiZSBza2lwcGVkIG9yICNvcHRfcGFyYW1zIGNhbiBiZSB6ZXJvLgorICAgIE90aGVyd2lzZSAjb3B0X3BhcmFtcyBpcyB0aGUgbnVtYmVyIG9mIGZvbGxvd2luZyBhcmd1bWVudHMuCisKKyAgICBFeGFtcGxlIG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMgc2VjdGlvbjoKKyAgICAgICAgMSBhbGxvd19kaXNjYXJkcworCithbGxvd19kaXNjYXJkcworICAgIEJsb2NrIGRpc2NhcmQgcmVxdWVzdHMgKGEuay5hLiBUUklNKSBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIGNyeXB0IGRldmljZS4KKyAgICBUaGUgZGVmYXVsdCBpcyB0byBpZ25vcmUgZGlzY2FyZCByZXF1ZXN0cy4KKworICAgIFdBUk5JTkc6IEFzc2VzcyB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgcmlza3MgY2FyZWZ1bGx5IGJlZm9yZSBlbmFibGluZyB0aGlzCisgICAgb3B0aW9uLiAgRm9yIGV4YW1wbGUsIGFsbG93aW5nIGRpc2NhcmRzIG9uIGVuY3J5cHRlZCBkZXZpY2VzIG1heSBsZWFkIHRvCisgICAgdGhlIGxlYWsgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNpcGhlcnRleHQgZGV2aWNlIChmaWxlc3lzdGVtIHR5cGUsCisgICAgdXNlZCBzcGFjZSBldGMuKSBpZiB0aGUgZGlzY2FyZGVkIGJsb2NrcyBjYW4gYmUgbG9jYXRlZCBlYXNpbHkgb24gdGhlCisgICAgZGV2aWNlIGxhdGVyLgorCiBFeGFtcGxlIHNjcmlwdHMKID09PT09PT09PT09PT09PQogTFVLUyAoTGludXggVW5pZmllZCBLZXkgU2V0dXApIGlzIG5vdyB0aGUgcHJlZmVycmVkIHdheSB0byBzZXQgdXAgZGlzawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLWZsYWtleS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tZmxha2V5LnR4dAppbmRleCBjOGVmZGZkLi42ZmY1YzIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tZmxha2V5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tZmxha2V5LnR4dApAQCAtMSwxNyArMSw1MyBAQAogZG0tZmxha2V5CiA9PT09PT09PT0KIAotVGhpcyB0YXJnZXQgaXMgdGhlIHNhbWUgYXMgdGhlIGxpbmVhciB0YXJnZXQgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyBJL08KLWVycm9ycyBwZXJpb2RpY2FsbHkuICBJdCdzIGJlZW4gZm91bmQgdXNlZnVsIGluIHNpbXVsYXRpbmcgZmFpbGluZwotZGV2aWNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KK1RoaXMgdGFyZ2V0IGlzIHRoZSBzYW1lIGFzIHRoZSBsaW5lYXIgdGFyZ2V0IGV4Y2VwdCB0aGF0IGl0IGV4aGliaXRzCit1bnJlbGlhYmxlIGJlaGF2aW91ciBwZXJpb2RpY2FsbHkuICBJdCdzIGJlZW4gZm91bmQgdXNlZnVsIGluIHNpbXVsYXRpbmcKK2ZhaWxpbmcgZGV2aWNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KIAogU3RhcnRpbmcgZnJvbSB0aGUgdGltZSB0aGUgdGFibGUgaXMgbG9hZGVkLCB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSBmb3IKLTx1cCBpbnRlcnZhbD4gc2Vjb25kcywgdGhlbiByZXR1cm5zIGVycm9ycyBmb3IgPGRvd24gaW50ZXJ2YWw+IHNlY29uZHMsCi1hbmQgdGhlbiB0aGlzIGN5Y2xlIHJlcGVhdHMuCis8dXAgaW50ZXJ2YWw+IHNlY29uZHMsIHRoZW4gZXhoaWJpdHMgdW5yZWxpYWJsZSBiZWhhdmlvdXIgZm9yIDxkb3duCitpbnRlcnZhbD4gc2Vjb25kcywgYW5kIHRoZW4gdGhpcyBjeWNsZSByZXBlYXRzLgogCi1QYXJhbWV0ZXJzOiA8ZGV2IHBhdGg+IDxvZmZzZXQ+IDx1cCBpbnRlcnZhbD4gPGRvd24gaW50ZXJ2YWw+CitBbHNvLCBjb25zaWRlciB1c2luZyB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGRtLWRlbGF5IHRhcmdldCB0b28sCit3aGljaCBjYW4gZGVsYXkgcmVhZHMgYW5kIHdyaXRlcyBhbmQvb3Igc2VuZCB0aGVtIHRvIGRpZmZlcmVudAordW5kZXJseWluZyBkZXZpY2VzLgorCitUYWJsZSBwYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tCisgIDxkZXYgcGF0aD4gPG9mZnNldD4gPHVwIGludGVydmFsPiA8ZG93biBpbnRlcnZhbD4gXAorICAgIFs8bnVtX2ZlYXR1cmVzPiBbPGZlYXR1cmUgYXJndW1lbnRzPl1dCisKK01hbmRhdG9yeSBwYXJhbWV0ZXJzOgogICAgIDxkZXYgcGF0aD46IEZ1bGwgcGF0aG5hbWUgdG8gdGhlIHVuZGVybHlpbmcgYmxvY2stZGV2aWNlLCBvciBhCiAgICAgICAgICAgICAgICAgIm1ham9yOm1pbm9yIiBkZXZpY2UtbnVtYmVyLgogICAgIDxvZmZzZXQ+OiBTdGFydGluZyBzZWN0b3Igd2l0aGluIHRoZSBkZXZpY2UuCiAgICAgPHVwIGludGVydmFsPjogTnVtYmVyIG9mIHNlY29uZHMgZGV2aWNlIGlzIGF2YWlsYWJsZS4KICAgICA8ZG93biBpbnRlcnZhbD46IE51bWJlciBvZiBzZWNvbmRzIGRldmljZSByZXR1cm5zIGVycm9ycy4KKworT3B0aW9uYWwgZmVhdHVyZSBwYXJhbWV0ZXJzOgorICBJZiBubyBmZWF0dXJlIHBhcmFtZXRlcnMgYXJlIHByZXNlbnQsIGR1cmluZyB0aGUgcGVyaW9kcyBvZgorICB1bnJlbGlhYmlsaXR5LCBhbGwgSS9PIHJldHVybnMgZXJyb3JzLgorCisgIGRyb3Bfd3JpdGVzOgorCUFsbCB3cml0ZSBJL08gaXMgc2lsZW50bHkgaWdub3JlZC4KKwlSZWFkIEkvTyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKworICBjb3JydXB0X2Jpb19ieXRlIDxOdGhfYnl0ZT4gPGRpcmVjdGlvbj4gPHZhbHVlPiA8ZmxhZ3M+OgorCUR1cmluZyA8ZG93biBpbnRlcnZhbD4sIHJlcGxhY2UgPE50aF9ieXRlPiBvZiB0aGUgZGF0YSBvZgorCWVhY2ggbWF0Y2hpbmcgYmlvIHdpdGggPHZhbHVlPi4KKworICAgIDxOdGhfYnl0ZT46IFRoZSBvZmZzZXQgb2YgdGhlIGJ5dGUgdG8gcmVwbGFjZS4KKwkJQ291bnRpbmcgc3RhcnRzIGF0IDEsIHRvIHJlcGxhY2UgdGhlIGZpcnN0IGJ5dGUuCisgICAgPGRpcmVjdGlvbj46IEVpdGhlciAncicgdG8gY29ycnVwdCByZWFkcyBvciAndycgdG8gY29ycnVwdCB3cml0ZXMuCisJCSAndycgaXMgaW5jb21wYXRpYmxlIHdpdGggZHJvcF93cml0ZXMuCisgICAgPHZhbHVlPjogVGhlIHZhbHVlIChmcm9tIDAtMjU1KSB0byB3cml0ZS4KKyAgICA8ZmxhZ3M+OiBQZXJmb3JtIHRoZSByZXBsYWNlbWVudCBvbmx5IGlmIGJpby0+YmlfcncgaGFzIGFsbCB0aGUKKwkgICAgIHNlbGVjdGVkIGZsYWdzIHNldC4KKworRXhhbXBsZXM6CisgIGNvcnJ1cHRfYmlvX2J5dGUgMzIgciAxIDAKKwktIHJlcGxhY2VzIHRoZSAzMm5kIGJ5dGUgb2YgUkVBRCBiaW9zIHdpdGggdGhlIHZhbHVlIDEKKworICBjb3JydXB0X2Jpb19ieXRlIDIyNCB3IDAgMzIKKwktIHJlcGxhY2VzIHRoZSAyMjR0aCBieXRlIG9mIFJFUV9NRVRBICg9MzIpIGJpb3Mgd2l0aCB0aGUgdmFsdWUgMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXJhaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXJhaWQudHh0CmluZGV4IDMzYjZiNzAuLjJhOGMxMTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9kbS1yYWlkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tcmFpZC50eHQKQEAgLTEsNzAgKzEsMTA4IEBACi1EZXZpY2UtbWFwcGVyIFJBSUQgKGRtLXJhaWQpIGlzIGEgYnJpZGdlIGZyb20gRE0gdG8gTUQuICBJdAotcHJvdmlkZXMgYSB3YXkgdG8gdXNlIGRldmljZS1tYXBwZXIgaW50ZXJmYWNlcyB0byBhY2Nlc3MgdGhlIE1EIFJBSUQKLWRyaXZlcnMuCitkbS1yYWlkCistLS0tLS0tCiAKLUFzIHdpdGggYWxsIGRldmljZS1tYXBwZXIgdGFyZ2V0cywgdGhlIG5vbWluYWwgcHVibGljIGludGVyZmFjZXMgYXJlIHRoZQotY29uc3RydWN0b3IgKENUUikgdGFibGVzIGFuZCB0aGUgc3RhdHVzIG91dHB1dHMgKGJvdGggU1RBVFVTVFlQRV9JTkZPCi1hbmQgU1RBVFVTVFlQRV9UQUJMRSkuICBUaGUgQ1RSIHRhYmxlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKK1RoZSBkZXZpY2UtbWFwcGVyIFJBSUQgKGRtLXJhaWQpIHRhcmdldCBwcm92aWRlcyBhIGJyaWRnZSBmcm9tIERNIHRvIE1ELgorSXQgYWxsb3dzIHRoZSBNRCBSQUlEIGRyaXZlcnMgdG8gYmUgYWNjZXNzZWQgdXNpbmcgYSBkZXZpY2UtbWFwcGVyCitpbnRlcmZhY2UuCiAKLTE6IDxzPiA8bD4gcmFpZCBcCi0yOiAgICAgIDxyYWlkX3R5cGU+IDwjcmFpZF9wYXJhbXM+IDxyYWlkX3BhcmFtcz4gXAotMzogICAgICA8I3JhaWRfZGV2cz4gPG1ldGFfZGV2MT4gPGRldjE+IC4uIDxtZXRhX2Rldk4+IDxkZXZOPgorVGhlIHRhcmdldCBpcyBuYW1lZCAicmFpZCIgYW5kIGl0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogCi1MaW5lIDEgY29udGFpbnMgdGhlIHN0YW5kYXJkIGZpcnN0IHRocmVlIGFyZ3VtZW50cyB0byBhbnkgZGV2aWNlLW1hcHBlcgotdGFyZ2V0IC0gdGhlIHN0YXJ0LCBsZW5ndGgsIGFuZCB0YXJnZXQgdHlwZSBmaWVsZHMuICBUaGUgdGFyZ2V0IHR5cGUgaW4KLXRoaXMgY2FzZSBpcyAicmFpZCIuCisgIDxyYWlkX3R5cGU+IDwjcmFpZF9wYXJhbXM+IDxyYWlkX3BhcmFtcz4gXAorICAgIDwjcmFpZF9kZXZzPiA8bWV0YWRhdGFfZGV2MD4gPGRldjA+IFsuLiA8bWV0YWRhdGFfZGV2Tj4gPGRldk4+XQogCi1MaW5lIDIgY29udGFpbnMgdGhlIGFyZ3VtZW50cyB0aGF0IGRlZmluZSB0aGUgcGFydGljdWxhciByYWlkCi10eXBlL3BlcnNvbmFsaXR5L2xldmVsLCB0aGUgcmVxdWlyZWQgYXJndW1lbnRzIGZvciB0aGF0IHJhaWQgdHlwZSwgYW5kCi1hbnkgb3B0aW9uYWwgYXJndW1lbnRzLiAgUG9zc2libGUgcmFpZCB0eXBlcyBpbmNsdWRlOiByYWlkNCwgcmFpZDVfbGEsCi1yYWlkNV9scywgcmFpZDVfcnMsIHJhaWQ2X3pyLCByYWlkNl9uciwgYW5kIHJhaWQ2X25jLiAgKHJhaWQxIGlzCi1wbGFubmVkIGZvciB0aGUgZnV0dXJlLikgIFRoZSBsaXN0IG9mIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzCi1pcyB0aGUgc2FtZSBmb3IgYWxsIHRoZSBjdXJyZW50IHJhaWQgdHlwZXMuICBUaGUgcmVxdWlyZWQgcGFyYW1ldGVycyBhcmUKLXBvc2l0aW9uYWwsIHdoaWxlIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiBhcyBrZXkvdmFsdWUgcGFpcnMuCi1UaGUgcG9zc2libGUgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKLSA8Y2h1bmtfc2l6ZT4gICAgICAgICAgIENodW5rIHNpemUgaW4gc2VjdG9ycy4KLSBbW25vXXN5bmNdICAgICAgICAgICAgIEZvcmNlL1ByZXZlbnQgUkFJRCBpbml0aWFsaXphdGlvbgotIFtyZWJ1aWxkIDxpZHg+XSAgICAgICAgUmVidWlsZCB0aGUgZHJpdmUgaW5kaWNhdGVkIGJ5IHRoZSBpbmRleAotIFtkYWVtb25fc2xlZXAgPG1zPl0gICAgVGltZSBiZXR3ZWVuIGJpdG1hcCBkYWVtb24gd29yayB0byBjbGVhciBiaXRzCi0gW21pbl9yZWNvdmVyeV9yYXRlIDxrQi9zZWMvZGlzaz5dICAgICAgVGhyb3R0bGUgUkFJRCBpbml0aWFsaXphdGlvbgotIFttYXhfcmVjb3ZlcnlfcmF0ZSA8a0Ivc2VjL2Rpc2s+XSAgICAgIFRocm90dGxlIFJBSUQgaW5pdGlhbGl6YXRpb24KLSBbbWF4X3dyaXRlX2JlaGluZCA8c2VjdG9ycz5dICAgICAgICAgICBTZWUgJy13cml0ZS1iZWhpbmQ9JyAobWFuIG1kYWRtKQotIFtzdHJpcGVfY2FjaGUgPHNlY3RvcnM+XSAgICAgICAgICAgICAgIFN0cmlwZSBjYWNoZSBzaXplIGZvciBoaWdoZXIgUkFJRHMKKzxyYWlkX3R5cGU+OgorICByYWlkMQkJUkFJRDEgbWlycm9yaW5nCisgIHJhaWQ0CQlSQUlENCBkZWRpY2F0ZWQgcGFyaXR5IGRpc2sKKyAgcmFpZDVfbGEJUkFJRDUgbGVmdCBhc3ltbWV0cmljCisJCS0gcm90YXRpbmcgcGFyaXR5IDAgd2l0aCBkYXRhIGNvbnRpbnVhdGlvbgorICByYWlkNV9yYQlSQUlENSByaWdodCBhc3ltbWV0cmljCisJCS0gcm90YXRpbmcgcGFyaXR5IE4gd2l0aCBkYXRhIGNvbnRpbnVhdGlvbgorICByYWlkNV9scwlSQUlENSBsZWZ0IHN5bW1ldHJpYworCQktIHJvdGF0aW5nIHBhcml0eSAwIHdpdGggZGF0YSByZXN0YXJ0CisgIHJhaWQ1X3JzIAlSQUlENSByaWdodCBzeW1tZXRyaWMKKwkJLSByb3RhdGluZyBwYXJpdHkgTiB3aXRoIGRhdGEgcmVzdGFydAorICByYWlkNl96cglSQUlENiB6ZXJvIHJlc3RhcnQKKwkJLSByb3RhdGluZyBwYXJpdHkgemVybyAobGVmdC10by1yaWdodCkgd2l0aCBkYXRhIHJlc3RhcnQKKyAgcmFpZDZfbnIJUkFJRDYgTiByZXN0YXJ0CisJCS0gcm90YXRpbmcgcGFyaXR5IE4gKHJpZ2h0LXRvLWxlZnQpIHdpdGggZGF0YSByZXN0YXJ0CisgIHJhaWQ2X25jCVJBSUQ2IE4gY29udGludWUKKwkJLSByb3RhdGluZyBwYXJpdHkgTiAocmlnaHQtdG8tbGVmdCkgd2l0aCBkYXRhIGNvbnRpbnVhdGlvbgogCi1MaW5lIDMgY29udGFpbnMgdGhlIGxpc3Qgb2YgZGV2aWNlcyB0aGF0IGNvbXBvc2UgdGhlIGFycmF5IGluCi1tZXRhZGF0YS9kYXRhIGRldmljZSBwYWlycy4gIElmIHRoZSBtZXRhZGF0YSBpcyBzdG9yZWQgc2VwYXJhdGVseSwgYSAnLScKLWlzIGdpdmVuIGZvciB0aGUgbWV0YWRhdGEgZGV2aWNlIHBvc2l0aW9uLiAgSWYgYSBkcml2ZSBoYXMgZmFpbGVkIG9yIGlzCi1taXNzaW5nIGF0IGNyZWF0aW9uIHRpbWUsIGEgJy0nIGNhbiBiZSBnaXZlbiBmb3IgYm90aCB0aGUgbWV0YWRhdGEgYW5kCi1kYXRhIGRyaXZlcyBmb3IgYSBnaXZlbiBwb3NpdGlvbi4KKyAgUmVmZXJlcmVuY2U6IENoYXB0ZXIgNCBvZgorICBodHRwOi8vd3d3LnNuaWEub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvU05JQV9EREZfVGVjaG5pY2FsX1Bvc2l0aW9uX3YyLjAucGRmCiAKLU5CLiBDdXJyZW50bHkgYWxsIG1ldGFkYXRhIGRldmljZXMgbXVzdCBiZSBzcGVjaWZpZWQgYXMgJy0nLgorPCNyYWlkX3BhcmFtcz46IFRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGF0IGZvbGxvdy4KIAotRXhhbXBsZXM6Ci0jIFJBSUQ0IC0gNCBkYXRhIGRyaXZlcywgMSBwYXJpdHkKKzxyYWlkX3BhcmFtcz4gY29uc2lzdHMgb2YKKyAgICBNYW5kYXRvcnkgcGFyYW1ldGVyczoKKyAgICAgICAgPGNodW5rX3NpemU+OiBDaHVuayBzaXplIGluIHNlY3RvcnMuICBUaGlzIHBhcmFtZXRlciBpcyBvZnRlbiBrbm93biBhcworCQkgICAgICAic3RyaXBlIHNpemUiLiAgSXQgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IHBhcmFtZXRlciBhbmQKKwkJICAgICAgaXMgcGxhY2VkIGZpcnN0LgorCisgICAgZm9sbG93ZWQgYnkgb3B0aW9uYWwgcGFyYW1ldGVycyAoaW4gYW55IG9yZGVyKToKKwlbc3luY3xub3N5bmNdICAgRm9yY2Ugb3IgcHJldmVudCBSQUlEIGluaXRpYWxpemF0aW9uLgorCisJW3JlYnVpbGQgPGlkeD5dCVJlYnVpbGQgZHJpdmUgbnVtYmVyIGlkeCAoZmlyc3QgZHJpdmUgaXMgMCkuCisKKwlbZGFlbW9uX3NsZWVwIDxtcz5dCisJCUludGVydmFsIGJldHdlZW4gcnVucyBvZiB0aGUgYml0bWFwIGRhZW1vbiB0aGF0CisJCWNsZWFyIGJpdHMuICBBIGxvbmdlciBpbnRlcnZhbCBtZWFucyBsZXNzIGJpdG1hcCBJL08gYnV0CisJCXJlc3luY2luZyBhZnRlciBhIGZhaWx1cmUgaXMgbGlrZWx5IHRvIHRha2UgbG9uZ2VyLgorCisJW21pbl9yZWNvdmVyeV9yYXRlIDxrQi9zZWMvZGlzaz5dICBUaHJvdHRsZSBSQUlEIGluaXRpYWxpemF0aW9uCisJW21heF9yZWNvdmVyeV9yYXRlIDxrQi9zZWMvZGlzaz5dICBUaHJvdHRsZSBSQUlEIGluaXRpYWxpemF0aW9uCisJW3dyaXRlX21vc3RseSA8aWR4Pl0JCSAgIERyaXZlIGluZGV4IGlzIHdyaXRlLW1vc3RseQorCVttYXhfd3JpdGVfYmVoaW5kIDxzZWN0b3JzPl0gICAgICAgU2VlICctd3JpdGUtYmVoaW5kPScgKG1hbiBtZGFkbSkKKwlbc3RyaXBlX2NhY2hlIDxzZWN0b3JzPl0gICAgICAgICAgIFN0cmlwZSBjYWNoZSBzaXplIChoaWdoZXIgUkFJRHMgb25seSkKKwlbcmVnaW9uX3NpemUgPHNlY3RvcnM+XQorCQlUaGUgcmVnaW9uX3NpemUgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgaXMgdGhlCisJCWxvZ2ljYWwgc2l6ZSBvZiB0aGUgYXJyYXkuICBUaGUgYml0bWFwIHJlY29yZHMgdGhlIGRldmljZQorCQlzeW5jaHJvbmlzYXRpb24gc3RhdGUgZm9yIGVhY2ggcmVnaW9uLgorCis8I3JhaWRfZGV2cz46IFRoZSBudW1iZXIgb2YgZGV2aWNlcyBjb21wb3NpbmcgdGhlIGFycmF5LgorCUVhY2ggZGV2aWNlIGNvbnNpc3RzIG9mIHR3byBlbnRyaWVzLiAgVGhlIGZpcnN0IGlzIHRoZSBkZXZpY2UKKwljb250YWluaW5nIHRoZSBtZXRhZGF0YSAoaWYgYW55KTsgdGhlIHNlY29uZCBpcyB0aGUgb25lIGNvbnRhaW5pbmcgdGhlCisJZGF0YS4KKworCUlmIGEgZHJpdmUgaGFzIGZhaWxlZCBvciBpcyBtaXNzaW5nIGF0IGNyZWF0aW9uIHRpbWUsIGEgJy0nIGNhbiBiZQorCWdpdmVuIGZvciBib3RoIHRoZSBtZXRhZGF0YSBhbmQgZGF0YSBkcml2ZXMgZm9yIGEgZ2l2ZW4gcG9zaXRpb24uCisKKworRXhhbXBsZSB0YWJsZXMKKy0tLS0tLS0tLS0tLS0tCisjIFJBSUQ0IC0gNCBkYXRhIGRyaXZlcywgMSBwYXJpdHkgKG5vIG1ldGFkYXRhIGRldmljZXMpCiAjIE5vIG1ldGFkYXRhIGRldmljZXMgc3BlY2lmaWVkIHRvIGhvbGQgc3VwZXJibG9jay9iaXRtYXAgaW5mbwogIyBDaHVuayBzaXplIG9mIDFNaUIKICMgKExpbmVzIHNlcGFyYXRlZCBmb3IgZWFzeSByZWFkaW5nKQorCiAwIDE5NjA4OTM2NDggcmFpZCBcCiAgICAgICAgIHJhaWQ0IDEgMjA0OCBcCiAgICAgICAgIDUgLSA4OjE3IC0gODozMyAtIDg6NDkgLSA4OjY1IC0gODo4MQogCi0jIFJBSUQ0IC0gNCBkYXRhIGRyaXZlcywgMSBwYXJpdHkgKG5vIG1ldGFkYXRhIGRldmljZXMpCisjIFJBSUQ0IC0gNCBkYXRhIGRyaXZlcywgMSBwYXJpdHkgKHdpdGggbWV0YWRhdGEgZGV2aWNlcykKICMgQ2h1bmsgc2l6ZSBvZiAxTWlCLCBmb3JjZSBSQUlEIGluaXRpYWxpemF0aW9uLAogIyAgICAgICBtaW4gcmVjb3ZlcnkgcmF0ZSBhdCAyMCBraUIvc2VjL2Rpc2sKKwogMCAxOTYwODkzNjQ4IHJhaWQgXAotICAgICAgICByYWlkNCA0IDIwNDggbWluX3JlY292ZXJ5X3JhdGUgMjAgc3luY1wKLSAgICAgICAgNSAtIDg6MTcgLSA4OjMzIC0gODo0OSAtIDg6NjUgLSA4OjgxCisgICAgICAgIHJhaWQ0IDQgMjA0OCBzeW5jIG1pbl9yZWNvdmVyeV9yYXRlIDIwIFwKKyAgICAgICAgNSA4OjE3IDg6MTggODozMyA4OjM0IDg6NDkgODo1MCA4OjY1IDg6NjYgODo4MSA4OjgyCiAKLVBlcmZvcm1pbmcgYSAnZG1zZXR1cCB0YWJsZScgc2hvdWxkIGRpc3BsYXkgdGhlIENUUiB0YWJsZSB1c2VkIHRvCi1jb25zdHJ1Y3QgdGhlIG1hcHBpbmcgKHdpdGggcG9zc2libGUgcmVvcmRlcmluZyBvZiBvcHRpb25hbAotcGFyYW1ldGVycykuCisnZG1zZXR1cCB0YWJsZScgZGlzcGxheXMgdGhlIHRhYmxlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBtYXBwaW5nLgorVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGFsd2F5cyBwcmludGVkIGluIHRoZSBvcmRlciBsaXN0ZWQKK2Fib3ZlIHdpdGggInN5bmMiIG9yICJub3N5bmMiIGFsd2F5cyBvdXRwdXQgYWhlYWQgb2YgdGhlIG90aGVyCithcmd1bWVudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIHVzZWQgd2hlbiBvcmlnaW5hbGx5IGxvYWRpbmcgdGhlIHRhYmxlLgorQXJndW1lbnRzIHRoYXQgY2FuIGJlIHJlcGVhdGVkIGFyZSBvcmRlcmVkIGJ5IHZhbHVlLgogCi1QZXJmb3JtaW5nIGEgJ2Rtc2V0dXAgc3RhdHVzJyB3aWxsIHlpZWxkIGluZm9ybWF0aW9uIG9uIHRoZSBzdGF0ZSBhbmQKLWhlYWx0aCBvZiB0aGUgYXJyYXkuICBUaGUgb3V0cHV0IGlzIGFzIGZvbGxvd3M6CisnZG1zZXR1cCBzdGF0dXMnIHlpZWxkcyBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhdGUgYW5kIGhlYWx0aCBvZiB0aGUKK2FycmF5LgorVGhlIG91dHB1dCBpcyBhcyBmb2xsb3dzOgogMTogPHM+IDxsPiByYWlkIFwKIDI6ICAgICAgPHJhaWRfdHlwZT4gPCNkZXZpY2VzPiA8MSBoZWFsdGggY2hhciBmb3IgZWFjaCBkZXY+IDxyZXN5bmNfcmF0aW8+CiAKLUxpbmUgMSBpcyBzdGFuZGFyZCBETSBvdXRwdXQuICBMaW5lIDIgaXMgYmVzdCBzaG93biBieSBleGFtcGxlOgorTGluZSAxIGlzIHRoZSBzdGFuZGFyZCBvdXRwdXQgcHJvZHVjZWQgYnkgZGV2aWNlLW1hcHBlci4KK0xpbmUgMiBpcyBwcm9kdWNlZCBieSB0aGUgcmFpZCB0YXJnZXQsIGFuZCBiZXN0IGV4cGxhaW5lZCBieSBleGFtcGxlOgogICAgICAgICAwIDE5NjA4OTM2NDggcmFpZCByYWlkNCA1IEFBQUFBIDIvNDkwMjIxNTY4CiBIZXJlIHdlIGNhbiBzZWUgdGhlIFJBSUQgdHlwZSBpcyByYWlkNCwgdGhlcmUgYXJlIDUgZGV2aWNlcyAtIGFsbCBvZgogd2hpY2ggYXJlICdBJ2xpdmUsIGFuZCB0aGUgYXJyYXkgaXMgMi80OTAyMjE1NjggY29tcGxldGUgd2l0aCByZWNvdmVyeS4KK0ZhdWx0eSBvciBtaXNzaW5nIGRldmljZXMgYXJlIG1hcmtlZCAnRCcuICBEZXZpY2VzIHRoYXQgYXJlIG91dC1vZi1zeW5jCithcmUgbWFya2VkICdhJy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW9fa2V5cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvX2tleXMudHh0CmluZGV4IDcxOTBjOTkuLjVjMmMwMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW9fa2V5cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpb19rZXlzLnR4dApAQCAtMTAsNyArMTAsNyBAQAogRWFjaCBidXR0b24gKGtleSkgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdWItbm9kZSBvZiAiZ3Bpby1rZXlzIjoKIFN1Ym5vZGUgcHJvcGVydGllczoKIAotCS0gZ3Bpb3M6IE9GIGRldmNpZS10cmVlIGdwaW8gc3BlY2lmaWNhdGluLgorCS0gZ3Bpb3M6IE9GIGRldmljZS10cmVlIGdwaW8gc3BlY2lmaWNhdGlvbi4KIAktIGxhYmVsOiBEZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBrZXkuCiAJLSBsaW51eCxjb2RlOiBLZXljb2RlIHRvIGVtaXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9mc2wtbW1hODQ1MC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvZnNsLW1tYTg0NTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGM5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvZnNsLW1tYTg0NTAudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyogRnJlZXNjYWxlIE1NQTg0NTAgMy1BeGlzIEFjY2VsZXJvbWV0ZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6ICJmc2wsbW1hODQ1MCIuCisKK0V4YW1wbGU6CisKK2FjY2VsZXJvbWV0ZXI6IG1tYTg0NTBAMWMgeworCWNvbXBhdGlibGUgPSAiZnNsLG1tYTg0NTAiOworCXJlZyA9IDwweDFjPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RtYWVuZ2luZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RtYWVuZ2luZS50eHQKaW5kZXggNWEwY2IxZS4uOTRiN2UwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kbWFlbmdpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZG1hZW5naW5lLnR4dApAQCAtMTAsODcgKzEwLDE4MSBAQAogQmVsb3cgaXMgYSBndWlkZSB0byBkZXZpY2UgZHJpdmVyIHdyaXRlcnMgb24gaG93IHRvIHVzZSB0aGUgU2xhdmUtRE1BIEFQSSBvZiB0aGUKIERNQSBFbmdpbmUuIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBzbGF2ZSBETUEgdXNhZ2Ugb25seS4KIAotVGhlIHNsYXZlIERNQSB1c2FnZSBjb25zaXN0cyBvZiBmb2xsb3dpbmcgc3RlcHMKK1RoZSBzbGF2ZSBETUEgdXNhZ2UgY29uc2lzdHMgb2YgZm9sbG93aW5nIHN0ZXBzOgogMS4gQWxsb2NhdGUgYSBETUEgc2xhdmUgY2hhbm5lbAogMi4gU2V0IHNsYXZlIGFuZCBjb250cm9sbGVyIHNwZWNpZmljIHBhcmFtZXRlcnMKIDMuIEdldCBhIGRlc2NyaXB0b3IgZm9yIHRyYW5zYWN0aW9uCi00LiBTdWJtaXQgdGhlIHRyYW5zYWN0aW9uIGFuZCB3YWl0IGZvciBjYWxsYmFjayBub3RpZmljYXRpb24KKzQuIFN1Ym1pdCB0aGUgdHJhbnNhY3Rpb24KKzUuIElzc3VlIHBlbmRpbmcgcmVxdWVzdHMgYW5kIHdhaXQgZm9yIGNhbGxiYWNrIG5vdGlmaWNhdGlvbgogCiAxLiBBbGxvY2F0ZSBhIERNQSBzbGF2ZSBjaGFubmVsCi1DaGFubmVsIGFsbG9jYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGluIHRoZSBzbGF2ZSBETUEgY29udGV4dCwgY2xpZW50Ci1kcml2ZXJzIHR5cGljYWxseSBuZWVkIGEgY2hhbm5lbCBmcm9tIGEgcGFydGljdWxhciBETUEgY29udHJvbGxlciBvbmx5IGFuZCBldmVuCi1pbiBzb21lIGNhc2VzIGEgc3BlY2lmaWMgY2hhbm5lbCBpcyBkZXNpcmVkLiBUbyByZXF1ZXN0IGEgY2hhbm5lbAotZG1hX3JlcXVlc3RfY2hhbm5lbCgpIEFQSSBpcyB1c2VkLgogCi1JbnRlcmZhY2U6Ci1zdHJ1Y3QgZG1hX2NoYW4gKmRtYV9yZXF1ZXN0X2NoYW5uZWwoZG1hX2NhcF9tYXNrX3QgbWFzaywKLQkJZG1hX2ZpbHRlcl9mbiBmaWx0ZXJfZm4sCi0JCXZvaWQgKmZpbHRlcl9wYXJhbSk7Ci13aGVyZSBkbWFfZmlsdGVyX2ZuIGlzIGRlZmluZWQgYXM6Ci10eXBlZGVmIGJvb2wgKCpkbWFfZmlsdGVyX2ZuKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmZpbHRlcl9wYXJhbSk7CisgICBDaGFubmVsIGFsbG9jYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGluIHRoZSBzbGF2ZSBETUEgY29udGV4dCwKKyAgIGNsaWVudCBkcml2ZXJzIHR5cGljYWxseSBuZWVkIGEgY2hhbm5lbCBmcm9tIGEgcGFydGljdWxhciBETUEKKyAgIGNvbnRyb2xsZXIgb25seSBhbmQgZXZlbiBpbiBzb21lIGNhc2VzIGEgc3BlY2lmaWMgY2hhbm5lbCBpcyBkZXNpcmVkLgorICAgVG8gcmVxdWVzdCBhIGNoYW5uZWwgZG1hX3JlcXVlc3RfY2hhbm5lbCgpIEFQSSBpcyB1c2VkLgogCi1XaGVuIHRoZSBvcHRpb25hbCAnZmlsdGVyX2ZuJyBwYXJhbWV0ZXIgaXMgc2V0IHRvIE5VTEwgZG1hX3JlcXVlc3RfY2hhbm5lbAotc2ltcGx5IHJldHVybnMgdGhlIGZpcnN0IGNoYW5uZWwgdGhhdCBzYXRpc2ZpZXMgdGhlIGNhcGFiaWxpdHkgbWFzay4gIE90aGVyd2lzZSwKLXdoZW4gdGhlIG1hc2sgcGFyYW1ldGVyIGlzIGluc3VmZmljaWVudCBmb3Igc3BlY2lmeWluZyB0aGUgbmVjZXNzYXJ5IGNoYW5uZWwsCi10aGUgZmlsdGVyX2ZuIHJvdXRpbmUgY2FuIGJlIHVzZWQgdG8gZGlzcG9zaXRpb24gdGhlIGF2YWlsYWJsZSBjaGFubmVscyBpbiB0aGUKLXN5c3RlbS4gVGhlIGZpbHRlcl9mbiByb3V0aW5lIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIGZyZWUgY2hhbm5lbCBpbiB0aGUKLXN5c3RlbS4gIFVwb24gc2VlaW5nIGEgc3VpdGFibGUgY2hhbm5lbCBmaWx0ZXJfZm4gcmV0dXJucyBETUFfQUNLIHdoaWNoIGZsYWdzCi10aGF0IGNoYW5uZWwgdG8gYmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGRtYV9yZXF1ZXN0X2NoYW5uZWwuICBBIGNoYW5uZWwKLWFsbG9jYXRlZCB2aWEgdGhpcyBpbnRlcmZhY2UgaXMgZXhjbHVzaXZlIHRvIHRoZSBjYWxsZXIsIHVudGlsCi1kbWFfcmVsZWFzZV9jaGFubmVsKCkgaXMgY2FsbGVkLgorICAgSW50ZXJmYWNlOgorCXN0cnVjdCBkbWFfY2hhbiAqZG1hX3JlcXVlc3RfY2hhbm5lbChkbWFfY2FwX21hc2tfdCBtYXNrLAorCQkJZG1hX2ZpbHRlcl9mbiBmaWx0ZXJfZm4sCisJCQl2b2lkICpmaWx0ZXJfcGFyYW0pOworICAgd2hlcmUgZG1hX2ZpbHRlcl9mbiBpcyBkZWZpbmVkIGFzOgorCXR5cGVkZWYgYm9vbCAoKmRtYV9maWx0ZXJfZm4pKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqZmlsdGVyX3BhcmFtKTsKKworICAgVGhlICdmaWx0ZXJfZm4nIHBhcmFtZXRlciBpcyBvcHRpb25hbCwgYnV0IGhpZ2hseSByZWNvbW1lbmRlZCBmb3IKKyAgIHNsYXZlIGFuZCBjeWNsaWMgY2hhbm5lbHMgYXMgdGhleSB0eXBpY2FsbHkgbmVlZCB0byBvYnRhaW4gYSBzcGVjaWZpYworICAgRE1BIGNoYW5uZWwuCisKKyAgIFdoZW4gdGhlIG9wdGlvbmFsICdmaWx0ZXJfZm4nIHBhcmFtZXRlciBpcyBOVUxMLCBkbWFfcmVxdWVzdF9jaGFubmVsKCkKKyAgIHNpbXBseSByZXR1cm5zIHRoZSBmaXJzdCBjaGFubmVsIHRoYXQgc2F0aXNmaWVzIHRoZSBjYXBhYmlsaXR5IG1hc2suCisKKyAgIE90aGVyd2lzZSwgdGhlICdmaWx0ZXJfZm4nIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBmcmVlCisgICBjaGFubmVsIHdoaWNoIGhhcyBhIGNhcGFiaWxpdHkgaW4gJ21hc2snLiAgJ2ZpbHRlcl9mbicgaXMgZXhwZWN0ZWQgdG8KKyAgIHJldHVybiAndHJ1ZScgd2hlbiB0aGUgZGVzaXJlZCBETUEgY2hhbm5lbCBpcyBmb3VuZC4KKworICAgQSBjaGFubmVsIGFsbG9jYXRlZCB2aWEgdGhpcyBpbnRlcmZhY2UgaXMgZXhjbHVzaXZlIHRvIHRoZSBjYWxsZXIsCisgICB1bnRpbCBkbWFfcmVsZWFzZV9jaGFubmVsKCkgaXMgY2FsbGVkLgogCiAyLiBTZXQgc2xhdmUgYW5kIGNvbnRyb2xsZXIgc3BlY2lmaWMgcGFyYW1ldGVycwotTmV4dCBzdGVwIGlzIGFsd2F5cyB0byBwYXNzIHNvbWUgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIERNQSBkcml2ZXIuIE1vc3Qgb2YKLXRoZSBnZW5lcmljIGluZm9ybWF0aW9uIHdoaWNoIGEgc2xhdmUgRE1BIGNhbiB1c2UgaXMgaW4gc3RydWN0IGRtYV9zbGF2ZV9jb25maWcuCi1JdCBhbGxvd3MgdGhlIGNsaWVudHMgdG8gc3BlY2lmeSBETUEgZGlyZWN0aW9uLCBETUEgYWRkcmVzc2VzLCBidXMgd2lkdGhzLCBETUEKLWJ1cnN0IGxlbmd0aHMgZXRjLiBJZiBzb21lIERNQSBjb250cm9sbGVycyBoYXZlIG1vcmUgcGFyYW1ldGVycyB0byBiZSBzZW50IHRoZW4KLXRoZXkgc2hvdWxkIHRyeSB0byBlbWJlZCBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBpbiB0aGVpciBjb250cm9sbGVyIHNwZWNpZmljCi1zdHJ1Y3R1cmUuIFRoYXQgZ2l2ZXMgZmxleGliaWxpdHkgdG8gY2xpZW50IHRvIHBhc3MgbW9yZSBwYXJhbWV0ZXJzLCBpZgotcmVxdWlyZWQuCiAKLUludGVyZmFjZToKLWludCBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKLQkJCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKQorICAgTmV4dCBzdGVwIGlzIGFsd2F5cyB0byBwYXNzIHNvbWUgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIERNQQorICAgZHJpdmVyLiAgTW9zdCBvZiB0aGUgZ2VuZXJpYyBpbmZvcm1hdGlvbiB3aGljaCBhIHNsYXZlIERNQSBjYW4gdXNlCisgICBpcyBpbiBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZy4gIFRoaXMgYWxsb3dzIHRoZSBjbGllbnRzIHRvIHNwZWNpZnkKKyAgIERNQSBkaXJlY3Rpb24sIERNQSBhZGRyZXNzZXMsIGJ1cyB3aWR0aHMsIERNQSBidXJzdCBsZW5ndGhzIGV0YworICAgZm9yIHRoZSBwZXJpcGhlcmFsLgorCisgICBJZiBzb21lIERNQSBjb250cm9sbGVycyBoYXZlIG1vcmUgcGFyYW1ldGVycyB0byBiZSBzZW50IHRoZW4gdGhleQorICAgc2hvdWxkIHRyeSB0byBlbWJlZCBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBpbiB0aGVpciBjb250cm9sbGVyCisgICBzcGVjaWZpYyBzdHJ1Y3R1cmUuIFRoYXQgZ2l2ZXMgZmxleGliaWxpdHkgdG8gY2xpZW50IHRvIHBhc3MgbW9yZQorICAgcGFyYW1ldGVycywgaWYgcmVxdWlyZWQuCisKKyAgIEludGVyZmFjZToKKwlpbnQgZG1hZW5naW5lX3NsYXZlX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKQorCisgICBQbGVhc2Ugc2VlIHRoZSBkbWFfc2xhdmVfY29uZmlnIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIGRtYWVuZ2luZS5oCisgICBmb3IgYSBkZXRhaWxlZCBleHBsYWluYXRpb24gb2YgdGhlIHN0cnVjdCBtZW1iZXJzLiAgUGxlYXNlIG5vdGUKKyAgIHRoYXQgdGhlICdkaXJlY3Rpb24nIG1lbWJlciB3aWxsIGJlIGdvaW5nIGF3YXkgYXMgaXQgZHVwbGljYXRlcyB0aGUKKyAgIGRpcmVjdGlvbiBnaXZlbiBpbiB0aGUgcHJlcGFyZSBjYWxsLgogCiAzLiBHZXQgYSBkZXNjcmlwdG9yIGZvciB0cmFuc2FjdGlvbgotRm9yIHNsYXZlIHVzYWdlIHRoZSB2YXJpb3VzIG1vZGVzIG9mIHNsYXZlIHRyYW5zZmVycyBzdXBwb3J0ZWQgYnkgdGhlCi1ETUEtZW5naW5lIGFyZToKLXNsYXZlX3NnCS0gRE1BIGEgbGlzdCBvZiBzY2F0dGVyIGdhdGhlciBidWZmZXJzIGZyb20vdG8gYSBwZXJpcGhlcmFsCi1kbWFfY3ljbGljCS0gUGVyZm9ybSBhIGN5Y2xpYyBETUEgb3BlcmF0aW9uIGZyb20vdG8gYSBwZXJpcGhlcmFsIHRpbGwgdGhlCisKKyAgIEZvciBzbGF2ZSB1c2FnZSB0aGUgdmFyaW91cyBtb2RlcyBvZiBzbGF2ZSB0cmFuc2ZlcnMgc3VwcG9ydGVkIGJ5IHRoZQorICAgRE1BLWVuZ2luZSBhcmU6CisKKyAgIHNsYXZlX3NnCS0gRE1BIGEgbGlzdCBvZiBzY2F0dGVyIGdhdGhlciBidWZmZXJzIGZyb20vdG8gYSBwZXJpcGhlcmFsCisgICBkbWFfY3ljbGljCS0gUGVyZm9ybSBhIGN5Y2xpYyBETUEgb3BlcmF0aW9uIGZyb20vdG8gYSBwZXJpcGhlcmFsIHRpbGwgdGhlCiAJCSAgb3BlcmF0aW9uIGlzIGV4cGxpY2l0bHkgc3RvcHBlZC4KLVRoZSBub24gTlVMTCByZXR1cm4gb2YgdGhpcyB0cmFuc2ZlciBBUEkgcmVwcmVzZW50cyBhICJkZXNjcmlwdG9yIiBmb3IgdGhlIGdpdmVuCi10cmFuc2FjdGlvbi4KIAotSW50ZXJmYWNlOgotc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICooKmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3NnKSgKLQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdF9zZywgdW5zaWduZWQgaW50IGRzdF9uZW50cywKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmNfc2csIHVuc2lnbmVkIGludCBzcmNfbmVudHMsCisgICBBIG5vbi1OVUxMIHJldHVybiBvZiB0aGlzIHRyYW5zZmVyIEFQSSByZXByZXNlbnRzIGEgImRlc2NyaXB0b3IiIGZvcgorICAgdGhlIGdpdmVuIHRyYW5zYWN0aW9uLgorCisgICBJbnRlcmZhY2U6CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICooKmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2cpKAorCQlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQl1bnNpZ25lZCBpbnQgc2dfbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICooKmNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYykoCisKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKigqY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfY3ljbGljKSgKIAkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwKIAkJc2l6ZV90IHBlcmlvZF9sZW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKLTQuIFN1Ym1pdCB0aGUgdHJhbnNhY3Rpb24gYW5kIHdhaXQgZm9yIGNhbGxiYWNrIG5vdGlmaWNhdGlvbgotVG8gc2NoZWR1bGUgdGhlIHRyYW5zYWN0aW9uIHRvIGJlIHNjaGVkdWxlZCBieSBkbWEgZGV2aWNlLCB0aGUgImRlc2NyaXB0b3IiCi1yZXR1cm5lZCBpbiBhYm92ZSAoMykgbmVlZHMgdG8gYmUgc3VibWl0dGVkLgotVG8gdGVsbCB0aGUgZG1hIGRyaXZlciB0aGF0IGEgdHJhbnNhY3Rpb24gaXMgcmVhZHkgdG8gYmUgc2VydmljZWQsIHRoZQotZGVzY3JpcHRvci0+c3VibWl0KCkgY2FsbGJhY2sgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhpcyBjaGFpbnMgdGhlIGRlc2NyaXB0b3IgdG8KLXRoZSBwZW5kaW5nIHF1ZXVlLgotVGhlIHRyYW5zYWN0aW9ucyBpbiB0aGUgcGVuZGluZyBxdWV1ZSBjYW4gYmUgYWN0aXZhdGVkIGJ5IGNhbGxpbmcgdGhlCi1pc3N1ZV9wZW5kaW5nIEFQSS4gSWYgY2hhbm5lbCBpcyBpZGxlIHRoZW4gdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHF1ZXVlIGlzCi1zdGFydGVkIGFuZCBzdWJzZXF1ZW50IG9uZXMgcXVldWVkIHVwLgotT24gY29tcGxldGlvbiBvZiB0aGUgRE1BIG9wZXJhdGlvbiB0aGUgbmV4dCBpbiBxdWV1ZSBpcyBzdWJtaXR0ZWQgYW5kIGEgdGFza2xldAotdHJpZ2dlcmVkLiBUaGUgdGFza2xldCB3b3VsZCB0aGVuIGNhbGwgdGhlIGNsaWVudCBkcml2ZXIgY29tcGxldGlvbiBjYWxsYmFjawotcm91dGluZSBmb3Igbm90aWZpY2F0aW9uLCBpZiBzZXQuCi1JbnRlcmZhY2U6Ci12b2lkIGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisgICBUaGUgcGVyaXBoZXJhbCBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBtYXBwZWQgdGhlIHNjYXR0ZXJsaXN0IGZvcgorICAgdGhlIERNQSBvcGVyYXRpb24gcHJpb3IgdG8gY2FsbGluZyBkZXZpY2VfcHJlcF9zbGF2ZV9zZywgYW5kIG11c3QKKyAgIGtlZXAgdGhlIHNjYXR0ZXJsaXN0IG1hcHBlZCB1bnRpbCB0aGUgRE1BIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgorICAgVGhlIHNjYXR0ZXJsaXN0IG11c3QgYmUgbWFwcGVkIHVzaW5nIHRoZSBETUEgc3RydWN0IGRldmljZS4gIFNvLAorICAgbm9ybWFsIHNldHVwIHNob3VsZCBsb29rIGxpa2UgdGhpczoKIAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJbnJfc2cgPSBkbWFfbWFwX3NnKGNoYW4tPmRldmljZS0+ZGV2LCBzZ2wsIHNnX2xlbik7CisJaWYgKG5yX3NnID09IDApCisJCS8qIGVycm9yICovCiAKLUFkZGl0aW9uYWwgdXNhZ2Ugbm90ZXMgZm9yIGRtYSBkcml2ZXIgd3JpdGVycwotMS8gQWx0aG91Z2ggRE1BIGVuZ2luZSBzcGVjaWZpZXMgdGhhdCBjb21wbGV0aW9uIGNhbGxiYWNrIHJvdXRpbmVzIGNhbm5vdCBzdWJtaXQKLWFueSBuZXcgb3BlcmF0aW9ucywgYnV0IHR5cGljYWxseSBmb3Igc2xhdmUgRE1BIHN1YnNlcXVlbnQgdHJhbnNhY3Rpb24gbWF5IG5vdAotYmUgYXZhaWxhYmxlIGZvciBzdWJtaXQgcHJpb3IgdG8gY2FsbGJhY2sgcm91dGluZSBiZWluZyBjYWxsZWQuIFRoaXMgcmVxdWlyZW1lbnQKLWlzIG5vdCBhIHJlcXVpcmVtZW50IGZvciBETUEtc2xhdmUgZGV2aWNlcy4gQnV0IHRoZXkgc2hvdWxkIHRha2UgY2FyZSB0byBkcm9wCi10aGUgc3Bpbi1sb2NrIHRoZXkgbWlnaHQgYmUgaG9sZGluZyBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2sgcm91dGluZQorCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sIHNnbCwgbnJfc2csCisJCQlkaXJlY3Rpb24sIGZsYWdzKTsKKworICAgT25jZSBhIGRlc2NyaXB0b3IgaGFzIGJlZW4gb2J0YWluZWQsIHRoZSBjYWxsYmFjayBpbmZvcm1hdGlvbiBjYW4gYmUKKyAgIGFkZGVkIGFuZCB0aGUgZGVzY3JpcHRvciBtdXN0IHRoZW4gYmUgc3VibWl0dGVkLiAgU29tZSBETUEgZW5naW5lCisgICBkcml2ZXJzIG1heSBob2xkIGEgc3BpbmxvY2sgYmV0d2VlbiBhIHN1Y2Nlc3NmdWwgcHJlcGFyYXRpb24gYW5kCisgICBzdWJtaXNzaW9uIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZXNlIHR3byBvcGVyYXRpb25zIGFyZSBjbG9zZWx5CisgICBwYWlyZWQuCisKKyAgIE5vdGU6CisJQWx0aG91Z2ggdGhlIGFzeW5jX3R4IEFQSSBzcGVjaWZpZXMgdGhhdCBjb21wbGV0aW9uIGNhbGxiYWNrCisJcm91dGluZXMgY2Fubm90IHN1Ym1pdCBhbnkgbmV3IG9wZXJhdGlvbnMsIHRoaXMgaXMgbm90IHRoZQorCWNhc2UgZm9yIHNsYXZlL2N5Y2xpYyBETUEuCisKKwlGb3Igc2xhdmUgRE1BLCB0aGUgc3Vic2VxdWVudCB0cmFuc2FjdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZQorCWZvciBzdWJtaXNzaW9uIHByaW9yIHRvIGNhbGxiYWNrIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQsIHNvCisJc2xhdmUgRE1BIGNhbGxiYWNrcyBhcmUgcGVybWl0dGVkIHRvIHByZXBhcmUgYW5kIHN1Ym1pdCBhIG5ldworCXRyYW5zYWN0aW9uLgorCisJRm9yIGN5Y2xpYyBETUEsIGEgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IHdpc2ggdG8gdGVybWluYXRlIHRoZQorCURNQSB2aWEgZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwoKS4KKworCVRoZXJlZm9yZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgRE1BIGVuZ2luZSBkcml2ZXJzIGRyb3AgYW55CisJbG9ja3MgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIG1heSBjYXVzZSBhCisJZGVhZGxvY2suCisKKwlOb3RlIHRoYXQgY2FsbGJhY2tzIHdpbGwgYWx3YXlzIGJlIGludm9rZWQgZnJvbSB0aGUgRE1BCisJZW5naW5lcyB0YXNrbGV0LCBuZXZlciBmcm9tIGludGVycnVwdCBjb250ZXh0LgorCis0LiBTdWJtaXQgdGhlIHRyYW5zYWN0aW9uCisKKyAgIE9uY2UgdGhlIGRlc2NyaXB0b3IgaGFzIGJlZW4gcHJlcGFyZWQgYW5kIHRoZSBjYWxsYmFjayBpbmZvcm1hdGlvbgorICAgYWRkZWQsIGl0IG11c3QgYmUgcGxhY2VkIG9uIHRoZSBETUEgZW5naW5lIGRyaXZlcnMgcGVuZGluZyBxdWV1ZS4KKworICAgSW50ZXJmYWNlOgorCWRtYV9jb29raWVfdCBkbWFlbmdpbmVfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYykKKworICAgVGhpcyByZXR1cm5zIGEgY29va2llIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBwcm9ncmVzcyBvZiBETUEgZW5naW5lCisgICBhY3Rpdml0eSB2aWEgb3RoZXIgRE1BIGVuZ2luZSBjYWxscyBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LgorCisgICBkbWFlbmdpbmVfc3VibWl0KCkgd2lsbCBub3Qgc3RhcnQgdGhlIERNQSBvcGVyYXRpb24sIGl0IG1lcmVseSBhZGRzCisgICBpdCB0byB0aGUgcGVuZGluZyBxdWV1ZS4gIEZvciB0aGlzLCBzZWUgc3RlcCA1LCBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZy4KKworNS4gSXNzdWUgcGVuZGluZyBETUEgcmVxdWVzdHMgYW5kIHdhaXQgZm9yIGNhbGxiYWNrIG5vdGlmaWNhdGlvbgorCisgICBUaGUgdHJhbnNhY3Rpb25zIGluIHRoZSBwZW5kaW5nIHF1ZXVlIGNhbiBiZSBhY3RpdmF0ZWQgYnkgY2FsbGluZyB0aGUKKyAgIGlzc3VlX3BlbmRpbmcgQVBJLiBJZiBjaGFubmVsIGlzIGlkbGUgdGhlbiB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4KKyAgIHF1ZXVlIGlzIHN0YXJ0ZWQgYW5kIHN1YnNlcXVlbnQgb25lcyBxdWV1ZWQgdXAuCisKKyAgIE9uIGNvbXBsZXRpb24gb2YgZWFjaCBETUEgb3BlcmF0aW9uLCB0aGUgbmV4dCBpbiBxdWV1ZSBpcyBzdGFydGVkIGFuZAorICAgYSB0YXNrbGV0IHRyaWdnZXJlZC4gVGhlIHRhc2tsZXQgd2lsbCB0aGVuIGNhbGwgdGhlIGNsaWVudCBkcml2ZXIKKyAgIGNvbXBsZXRpb24gY2FsbGJhY2sgcm91dGluZSBmb3Igbm90aWZpY2F0aW9uLCBpZiBzZXQuCisKKyAgIEludGVyZmFjZToKKwl2b2lkIGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKK0Z1cnRoZXIgQVBJczoKKworMS4gaW50IGRtYWVuZ2luZV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKKworICAgVGhpcyBjYXVzZXMgYWxsIGFjdGl2aXR5IGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gYmUgc3RvcHBlZCwgYW5kIG1heQorICAgZGlzY2FyZCBkYXRhIGluIHRoZSBETUEgRklGTyB3aGljaCBoYXNuJ3QgYmVlbiBmdWxseSB0cmFuc2ZlcnJlZC4KKyAgIE5vIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBmb3IgYW55IGluY29tcGxldGUgdHJhbnNmZXJzLgorCisyLiBpbnQgZG1hZW5naW5lX3BhdXNlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKKworICAgVGhpcyBwYXVzZXMgYWN0aXZpdHkgb24gdGhlIERNQSBjaGFubmVsIHdpdGhvdXQgZGF0YSBsb3NzLgorCiszLiBpbnQgZG1hZW5naW5lX3Jlc3VtZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCisKKyAgIFJlc3VtZSBhIHByZXZpb3VzbHkgcGF1c2VkIERNQSBjaGFubmVsLiAgSXQgaXMgaW52YWxpZCB0byByZXN1bWUgYQorICAgY2hhbm5lbCB3aGljaCBpcyBub3QgY3VycmVudGx5IHBhdXNlZC4KKworNC4gZW51bSBkbWFfc3RhdHVzIGRtYV9hc3luY19pc190eF9jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisgICAgICAgIGRtYV9jb29raWVfdCBjb29raWUsIGRtYV9jb29raWVfdCAqbGFzdCwgZG1hX2Nvb2tpZV90ICp1c2VkKQorCisgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGNoYW5uZWwuICBQbGVhc2Ugc2VlCisgICB0aGUgZG9jdW1lbnRhdGlvbiBpbiBpbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oIGZvciBhIG1vcmUgY29tcGxldGUKKyAgIGRlc2NyaXB0aW9uIG9mIHRoaXMgQVBJLgorCisgICBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZG1hX2FzeW5jX2lzX2NvbXBsZXRlKCkgYW5kCisgICB0aGUgY29va2llIHJldHVybmVkIGZyb20gJ2Rlc2NyaXB0b3ItPnN1Ym1pdCgpJyB0byBjaGVjayBmb3IKKyAgIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBETUEgdHJhbnNhY3Rpb24uCisKKyAgIE5vdGU6CisJTm90IGFsbCBETUEgZW5naW5lIGRyaXZlcnMgY2FuIHJldHVybiByZWxpYWJsZSBpbmZvcm1hdGlvbiBmb3IKKwlhIHJ1bm5pbmcgRE1BIGNoYW5uZWwuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IERNQSBlbmdpbmUgdXNlcnMKKwlwYXVzZSBvciBzdG9wICh2aWEgZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwpIHRoZSBjaGFubmVsIGJlZm9yZQorCXVzaW5nIHRoaXMgQVBJLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzMzQ4ZDMxLi5jNDY2ZjU4Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMjcsNyArMjcsNyBAQAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIsCiAJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiLAogCQkiYWY5MDE1IiwgIm5nZW5lIiwgImF6NjAyNyIsICJsbWUyNTEwX2xnIiwgImxtZTI1MTBjX3M3Mzk1IiwKLQkJImxtZTI1MTBjX3M3Mzk1X29sZCIpOworCQkibG1lMjUxMGNfczczOTVfb2xkIiwgImRyeGsiLCAiZHJ4a190ZXJyYXRlY19oNSIpOwogCiAjIENoZWNrIGFyZ3MKIHN5bnRheCgpIGlmIChzY2FsYXIoQEFSR1YpICE9IDEpOwpAQCAtNjM0LDYgKzYzNCwzNyBAQAogICAgICRvdXRmaWxlOwogfQogCitzdWIgZHJ4ayB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vbDRtLWRhdGVuLmRlL2ZpbGVzLyI7CisgICAgbXkgJHppcGZpbGUgPSAiRERUdW5lci56aXAiOworICAgIG15ICRoYXNoID0gImY1YTM3YjlhMjBhMzUzNDk5Nzk5N2MwYjEzODJhM2U1IjsKKyAgICBteSAkdG1wZGlyID0gdGVtcGRpcihESVIgPT4gIi90bXAiLCBDTEVBTlVQID0+IDEpOworICAgIG15ICRkcnZmaWxlID0gIkREVHVuZXIuc3lzIjsKKyAgICBteSAkZndmaWxlID0gImRyeGtfYTMubWMiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJHppcGZpbGUsICR1cmwgLiAkemlwZmlsZSk7CisgICAgdmVyaWZ5KCR6aXBmaWxlLCAkaGFzaCk7CisgICAgdW56aXAoJHppcGZpbGUsICR0bXBkaXIpOworICAgIGV4dHJhY3QoIiR0bXBkaXIvJGRydmZpbGUiLCAweDE0ZGQ4LCAxNTYzNCwgIiRmd2ZpbGUiKTsKKworICAgICIkZndmaWxlIgorfQorCitzdWIgZHJ4a190ZXJyYXRlY19oNSB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8iOworICAgIG15ICRoYXNoID0gIjE5MDAwZGFkYThlMjc0MTE2MmNjYzUwY2M5MWZhN2YxIjsKKyAgICBteSAkZndmaWxlID0gImR2Yi11c2ItdGVycmF0ZWMtaDUtZHJ4ay5mdyI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZndmaWxlLCAkdXJsIC4gJGZ3ZmlsZSk7CisgICAgdmVyaWZ5KCRmd2ZpbGUsICRoYXNoKTsKKworICAgICIkZndmaWxlIgorfQorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBVdGlsaXRpZXMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vZW1haWwtY2xpZW50cy50eHQKaW5kZXggYTBiNThlMi4uODYwYzI5YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0CkBAIC0xOTksMTggKzE5OSwxNiBAQAogCiBUbyBiZWF0IHNvbWUgc2Vuc2Ugb3V0IG9mIHRoZSBpbnRlcm5hbCBlZGl0b3IsIGRvIHRoaXM6CiAKLS0gVW5kZXIgYWNjb3VudCBzZXR0aW5ncywgY29tcG9zaXRpb24gYW5kIGFkZHJlc3NpbmcsIHVuY2hlY2sgIkNvbXBvc2UKLSAgbWVzc2FnZXMgaW4gSFRNTCBmb3JtYXQiLgotCiAtIEVkaXQgeW91ciBUaHVuZGVyYmlyZCBjb25maWcgc2V0dGluZ3Mgc28gdGhhdCBpdCB3b24ndCB1c2UgZm9ybWF0PWZsb3dlZC4KICAgR28gdG8gImVkaXQtPnByZWZlcmVuY2VzLT5hZHZhbmNlZC0+Y29uZmlnIGVkaXRvciIgdG8gYnJpbmcgdXAgdGhlCiAgIHRodW5kZXJiaXJkJ3MgcmVnaXN0cnkgZWRpdG9yLCBhbmQgc2V0ICJtYWlsbmV3cy5zZW5kX3BsYWludGV4dF9mbG93ZWQiIHRvCiAgICJmYWxzZSIuCiAKLS0gRW5hYmxlICJwcmVmb3JtYXQiIG1vZGU6IFNoZnQtY2xpY2sgb24gdGhlIFdyaXRlIGljb24gdG8gYnJpbmcgdXAgdGhlIEhUTUwKLSAgY29tcG9zZXIsIHNlbGVjdCAiUHJlZm9ybWF0IiBmcm9tIHRoZSBkcm9wLWRvd24gYm94IGp1c3QgdW5kZXIgdGhlIHN1YmplY3QKLSAgbGluZSwgdGhlbiBjbG9zZSB0aGUgbWVzc2FnZSB3aXRob3V0IHNhdmluZy4gIChUaGlzIHNldHRpbmcgYWxzbyBhcHBsaWVzIHRvCi0gIHRoZSB0ZXh0IGNvbXBvc2VyLCBidXQgdGhlIG9ubHkgY29udHJvbCBmb3IgaXQgaXMgaW4gdGhlIEhUTUwgY29tcG9zZXIuKQorLSBEaXNhYmxlIEhUTUwgRm9ybWF0OiBTZXQgIm1haWwuaWRlbnRpdHkuaWQxLmNvbXBvc2VfaHRtbCIgdG8gImZhbHNlIi4KKworLSBFbmFibGUgInByZWZvcm1hdCIgbW9kZTogU2V0ICJlZGl0b3IucXVvdGVzUHJlZm9ybWF0dGVkIiB0byAidHJ1ZSIuCisKKy0gRW5hYmxlIFVURjg6IFNldCAicHJlZnMuY29udmVydGVkLXRvLXV0ZjgiIHRvICJ0cnVlIi4KIAogLSBJbnN0YWxsIHRoZSAidG9nZ2xlIHdvcmR3cmFwIiBleHRlbnNpb24uICBEb3dubG9hZCB0aGUgZmlsZSBmcm9tOgogICAgIGh0dHBzOi8vYWRkb25zLm1vemlsbGEub3JnL3RodW5kZXJiaXJkL2FkZG9uLzIzNTEvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vZmF1bHQtaW5qZWN0aW9uLnR4dAppbmRleCA3YmUxNWU0Li44MmE1ZDI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9mYXVsdC1pbmplY3Rpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50eHQKQEAgLTE0Myw4ICsxNDMsNyBAQAogICBmYWlsc2xhYiwgZmFpbF9wYWdlX2FsbG9jLCBhbmQgZmFpbF9tYWtlX3JlcXVlc3QgdXNlIHRoaXMgd2F5LgogICBIZWxwZXIgZnVuY3Rpb25zOgogCi0JaW5pdF9mYXVsdF9hdHRyX2RlbnRyaWVzKGVudHJpZXMsIGF0dHIsIG5hbWUpOwotCXZvaWQgY2xlYW51cF9mYXVsdF9hdHRyX2RlbnRyaWVzKGVudHJpZXMpOworCWZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIobmFtZSwgcGFyZW50LCBhdHRyKTsKIAogLSBtb2R1bGUgcGFyYW1ldGVycwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZGZkNmE5Zi4uNGRjNDY1NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMjk2LDE1ICsyOTYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJQ09ORklHX1RIRVJNQUxfSFdNT04KLVdoZW46CUphbnVhcnkgMjAwOQotV2h5OglUaGlzIG9wdGlvbiB3YXMgaW50cm9kdWNlZCBqdXN0IHRvIGFsbG93IG9sZGVyIGxtLXNlbnNvcnMgdXNlcnNwYWNlCi0JdG8ga2VlcCB3b3JraW5nIG92ZXIgdGhlIHVwZ3JhZGUgdG8gMi42LjI2LiBBdCB0aGUgc2NoZWR1bGVkIHRpbWUgb2YKLQlyZW1vdmFsIGZpeGVkIGxtLXNlbnNvcnMgKDIueCBvciAzLngpIHNob3VsZCBiZSByZWFkaWx5IGF2YWlsYWJsZS4KLVdobzoJUmVuZSBIZXJtYW4gPHJlbmUuaGVybWFuQGdtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CUNvZGUgdGhhdCBpcyBub3cgdW5kZXIgQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUwogCShpbiBuZXQvY29yZS9uZXQtc3lzZnMuYykKIFdoZW46CUFmdGVyIHRoZSBvbmx5IHVzZXIgKGhhbCkgaGFzIHNlZW4gYSByZWxlYXNlIHdpdGggdGhlIHBhdGNoZXMKQEAgLTUyNyw2ICs1MTgsNDEgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglTdXBwb3J0IGZvciBkcml2ZXIgc3BlY2lmaWMgaW9jdGxzIGluIHRoZSBwd2MgZHJpdmVyIChldmVyeXRoaW5nCisJZGVmaW5lZCBpbiBtZWRpYS9wd2MtaW9jdGwuaCkKK1doZW46CTMuMworV2h5OglUaGlzIHN0ZW1zIGZyb20gdGhlIHY0bDEgZXJhLCB3aXRoIHY0bDIgZXZlcnl0aGluZyBjYW4gYmUgZG9uZSB3aXRoCisJc3RhbmRhcmRpemVkIHY0bDIgQVBJIGNhbGxzCitXaG86CUhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJRHJpdmVyIHNwZWNpZmljIHN5c2ZzIEFQSSBpbiB0aGUgcHdjIGRyaXZlcgorV2hlbjoJMy4zCitXaHk6CVNldHRpbmcgcGFuL3RpbHQgc2hvdWxkIGJlIGRvbmUgd2l0aCB2NGwyIGNvbnRyb2xzLCBsaWtlIHdpdGggb3RoZXIKKwljYW1zLiBUaGUgYnV0dG9uIGlzIGF2YWlsYWJsZSBhcyBhIHN0YW5kYXJkIGlucHV0IGRldmljZQorV2hvOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CURyaXZlciBzcGVjaWZpYyB1c2Ugb2YgcGl4Zm10LnByaXYgaW4gdGhlIHB3YyBkcml2ZXIKK1doZW46CTMuMworV2h5OglUaGUgLnByaXYgZmllbGQgbmV2ZXIgd2FzIGludGVuZGVkIGZvciB0aGlzLCBzZXR0aW5nIGEgZnJhbWVyYXRlIGlzCisJc3VwcG9ydCB1c2luZyB0aGUgc3RhbmRhcmRpemVkIFNfUEFSTSBpb2N0bAorV2hvOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CVNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhcmJyaXRhcnkgcmVzb2x1dGlvbnMgaW4gdGhlIHB3YyBkcml2ZXIKK1doZW46CTMuMworV2h5OglUaGUgcHdjIGRyaXZlciBjbGFpbXMgdG8gc3VwcG9ydCBhbnkgcmVzb2x1dGlvbiBiZXR3ZWVuIDE2MHgxMjAKKwlhbmQgNjQweDQ4MCwgYnV0IGVtdWxhdGVzIHRoaXMgYnkgc2ltcGx5IGRyYXdpbmcgYSBibGFjayBib3JkZXIKKwlhcm91bmQgdGhlIGltYWdlLiBVc2Vyc3BhY2UgY2FuIGRyYXcgaXRzIG93biBibGFjayBib3JkZXIgaWYgaXQKKwlyZWFsbHkgd2FudHMgb25lLgorV2hvOglIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CUZvciBWSURJT0NfU19GUkVRVUVOQ1kgdGhlIHR5cGUgZmllbGQgbXVzdCBtYXRjaCB0aGUgZGV2aWNlIG5vZGUncyB0eXBlLgogCUlmIG5vdCwgcmV0dXJuIC1FSU5WQUwuCiBXaGVuOgkzLjIKQEAgLTU1NSwzICs1ODEsMjIgQEAKIFdobzoJQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OiAgIHRocmVlZyBhbmQgaW50ZXJmYWNlIHN5c2ZzIGZpbGVzIGluIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hY2VyLXdtaQorV2hlbjogICAyMDEyCitXaHk6ICAgIEluIDMuMCwgd2UgY2FuIG5vdyBhdXRvZGV0ZWN0IGludGVybmFsIDNHIGRldmljZSBhbmQgYWxyZWFkeSBoYXZlCisJdGhlIHRocmVlZyByZmtpbGwgZGV2aWNlLiBTbywgd2UgcGxhbiB0byByZW1vdmUgdGhyZWVnIHN5c2ZzIHN1cHBvcnQKKwlmb3IgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5LgorCisJV2UgYWxzbyBwbGFuIHRvIHJlbW92ZSBpbnRlcmZhY2Ugc3lzZnMgZmlsZSB0aGF0IGV4cG9zZWQgd2hpY2ggQUNQSS1XTUkKKwlpbnRlcmZhY2UgdGhhdCB3YXMgdXNlZCBieSBhY2VyLXdtaSBkcml2ZXIuIEl0IHdpbGwgcmVwbGFjZWQgYnkKKwlpbmZvcm1hdGlvbiBsb2cgd2hlbiBhY2VyLXdtaSBpbml0aWFsLgorV2hvOiAgICBMZWUsIENodW4tWWkgPGpsZWVAbm92ZWxsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2hhdDoJVGhlIFhGUyBub2RlbGF5bG9nIG1vdW50IG9wdGlvbgorV2hlbjoJMy4zCitXaHk6CVRoZSBkZWxheWxvZyBtb2RlIHRoYXQgaGFzIGJlZW4gdGhlIGRlZmF1bHQgc2luY2UgMi42LjM5IGhhcyBwcm92ZW4KKwlzdGFibGUsIGFuZCB0aGUgb2xkIGNvZGUgaXMgaW4gdGhlIHdheSBvZiBhZGRpdGlvbmFsIGltcHJvdmVtZW50cyBpbgorCXRoZSBsb2cgY29kZS4KK1dobzoJQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dAppbmRleCA2ZTQ5YzM2Li5kYTQ1ZTZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2JlZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYmVmcy50eHQKQEAgLTI3LDcgKzI3LDcgQEAKIERvZXMgYW55b25lIGtub3cgb2YgYSBtb3JlIGN1cnJlbnQgZW1haWwgYWRkcmVzcyBmb3IgTWFrb3RvPyBIZSBkb2Vzbid0CiByZXNwb25kIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGFib3ZlLi4uCiAKLUN1cnJlbnQgbWFpbnRhaW5lcjogU2VyZ2V5IFMuIEtvc3R5bGlvdiA8cmF0aGFtYWhhdGFAcGhwNC5ydT4KK1RoaXMgZmlsZXN5c3RlbSBkb2Vzbid0IGhhdmUgYSBtYWludGFpbmVyLgogCiBXSEFUIElTIFRISVMgRFJJVkVSPwogPT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zydi9ib290aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZnJ2L2Jvb3RpbmcudHh0CmluZGV4IGFjZTIwMGIuLjM3YzRkODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZnJ2L2Jvb3RpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZnJ2L2Jvb3RpbmcudHh0CkBAIC0xMDYsMTMgKzEwNiwyMCBAQAogICAgICAgVG8gdXNlIHRoZSBmaXJzdCBvbi1jaGlwIHNlcmlhbCBwb3J0IGF0IGJhdWQgcmF0ZSAxMTUyMDAsIG5vIHBhcml0eSwgOAogICAgICAgYml0cywgYW5kIG5vIGZsb3cgY29udHJvbC4KIAotICAoKikgcm9vdD0vZGV2Lzx4eHh4PgorICAoKikgcm9vdD08eHh4eD4KIAotICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIGRldmljZSB1cG9uIHdoaWNoIHRoZSByb290IGZpbGVzeXN0ZW0gcmVzaWRlcy4gRm9yCi0gICAgICBleGFtcGxlOgorICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIGRldmljZSB1cG9uIHdoaWNoIHRoZSByb290IGZpbGVzeXN0ZW0gcmVzaWRlcy4gSXQKKyAgICAgIG1heSBiZSBzcGVjaWZpZWQgYnkgbWFqb3IgYW5kIG1pbm9yIG51bWJlciwgZGV2aWNlIHBhdGgsIG9yIGV2ZW4KKyAgICAgIHBhcnRpdGlvbiB1dWlkLCBpZiBzdXBwb3J0ZWQuICBGb3IgZXhhbXBsZToKIAogCS9kZXYvbmZzCU5GUyByb290IGZpbGVzeXN0ZW0KIAkvZGV2L210ZGJsb2NrMwlGb3VydGggUmVkQm9vdCBwYXJ0aXRpb24gb24gdGhlIFN5c3RlbSBGbGFzaAorCVBBUlRVVUlEPTAwMTEyMjMzLTQ0NTUtNjY3Ny04ODk5LUFBQkJDQ0RERUVGRi9QQVJUTlJPRkY9MQorCQlmaXJzdCBwYXJ0aXRpb24gYWZ0ZXIgdGhlIHBhcnRpdGlvbiB3aXRoIHRoZSBnaXZlbiBVVUlECisJMjUzOjAJCURldmljZSB3aXRoIG1ham9yIDI1MyBhbmQgbWlub3IgMAorCisgICAgICBBdXRob3JpdGF0aXZlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbgorICAgICAgIkRvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0Ii4KIAogICAoKikgcncKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMjc1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMjc1CmluZGV4IDZhM2E2NDcuLjA5N2IzY2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTI3NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEyNzUKQEAgLTQzLDggKzQzLDggQEAKIFN5c2ZzIGVudHJpZXMKIC0tLS0tLS0tLS0tLS0KIAotVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCi1hdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlLCBoaXN0b3J5IHJlc2V0CithdHRyaWJ1dGVzIGFyZSB3cml0ZS1vbmx5LCBhbGwgb3RoZXIgYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgogCiBpbjFfbGFiZWwJCSJ2aW4xIiBvciAidm91dDEiIGRlcGVuZGluZyBvbiBjaGlwIHZhcmlhbnQgYW5kCiAJCQljb25maWd1cmF0aW9uLgpAQCAtNTMsOCArNTMsMTIgQEAKIGluMV9tYXgJCQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgogaW4xX21pbl9hbGFybQkJVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KIGluMV9tYXhfYWxhcm0JCVZvbHRhZ2UgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX1dBUk5JTkcgc3RhdHVzLgoraW4xX2hpZ2hlc3QJCUhpc3RvcmljYWwgbWF4aW11bSB2b2x0YWdlLgoraW4xX3Jlc2V0X2hpc3RvcnkJV3JpdGUgYW55IHZhbHVlIHRvIHJlc2V0IGhpc3RvcnkuCiAKIGN1cnIxX2xhYmVsCQkiaW91dDEiCiBjdXJyMV9pbnB1dAkJTWVhc3VyZWQgY3VycmVudC4gRnJvbSBSRUFEX0lPVVQgcmVnaXN0ZXIuCiBjdXJyMV9tYXgJCU1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCiBjdXJyMV9tYXhfYWxhcm0JCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitjdXJyMV9oaWdoZXN0CQlIaXN0b3JpY2FsIG1heGltdW0gY3VycmVudC4KK2N1cnIxX3Jlc2V0X2hpc3RvcnkJV3JpdGUgYW55IHZhbHVlIHRvIHJlc2V0IGhpc3RvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wIGIvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcAppbmRleCBmODVlOTEzLi5mYTg3NzZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKQEAgLTM1LDYgKzM1LDEzIEBACiBBbGwgU3lzZnMgZW50cmllcyBhcmUgbmFtZWQgd2l0aCB0aGVpciBjb3JlX2lkIChyZXByZXNlbnRlZCBoZXJlIGJ5ICdYJykuCiB0ZW1wWF9pbnB1dAkgLSBDb3JlIHRlbXBlcmF0dXJlIChpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cykuCiB0ZW1wWF9tYXgJIC0gQWxsIGNvb2xpbmcgZGV2aWNlcyBzaG91bGQgYmUgdHVybmVkIG9uIChvbiBDb3JlMikuCisJCSAgIEluaXRpYWxpemVkIHdpdGggSUEzMl9USEVSTV9JTlRFUlJVUFQuIFdoZW4gdGhlIENQVQorCQkgICB0ZW1wZXJhdHVyZSByZWFjaGVzIHRoaXMgdGVtcGVyYXR1cmUsIGFuIGludGVycnVwdCBpcworCQkgICBnZW5lcmF0ZWQgYW5kIHRlbXBYX21heF9hbGFybSBpcyBzZXQuCit0ZW1wWF9tYXhfaHlzdCAgIC0gSWYgdGhlIENQVSB0ZW1wZXJhdHVyZSBmYWxscyBiZWxvdyB0aGFuIHRlbXBlcmF0dXJlLAorCQkgICBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFuZCB0ZW1wWF9tYXhfYWxhcm0gaXMgcmVzZXQuCit0ZW1wWF9tYXhfYWxhcm0gIC0gU2V0IGlmIHRoZSB0ZW1wZXJhdHVyZSByZWFjaGVzIG9yIGV4Y2VlZHMgdGVtcFhfbWF4LgorCQkgICBSZXNldCBpZiB0aGUgdGVtcGVyYXR1cmUgZHJvcHMgdG8gb3IgYmVsb3cgdGVtcFhfbWF4X2h5c3QuCiB0ZW1wWF9jcml0CSAtIE1heGltdW0ganVuY3Rpb24gdGVtcGVyYXR1cmUgKGluIG1pbGxpZGVncmVlcyBDZWxzaXVzKS4KIHRlbXBYX2NyaXRfYWxhcm0gLSBTZXQgd2hlbiBPdXQtb2Ytc3BlYyBiaXQgaXMgc2V0LCBuZXZlciBjbGVhcnMuCiAJCSAgIENvcnJlY3QgQ1BVIG9wZXJhdGlvbiBpcyBubyBsb25nZXIgZ3VhcmFudGVlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG0yNTA2NiBiL0RvY3VtZW50YXRpb24vaHdtb24vbG0yNTA2NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjFkYjgxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTI1MDY2CkBAIC0wLDAgKzEsOTAgQEAKK0tlcm5lbCBkcml2ZXIgbWF4ODY4OAorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNMjUwNjYKKyAgICBQcmVmaXg6ICdsbTI1MDY2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0czoKKwlodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTI1MDY2Lmh0bWwKKwlodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTI1MDY2QS5odG1sCisgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTUwNjQKKyAgICBQcmVmaXg6ICdsbTUwNjQnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6CisJaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvTE0vTE01MDY0Lmh0bWwKKyAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNTA2NgorICAgIFByZWZpeDogJ2xtNTA2NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDoKKwlodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTUwNjYuaHRtbAorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE0yNTA2NiwKK0xNNTA2NCwgYW5kIExNNTA2NCBQb3dlciBNYW5hZ2VtZW50LCBNb25pdG9yaW5nLCBDb250cm9sLCBhbmQgUHJvdGVjdGlvbiBJQ3MuCisKK1RoZSBkcml2ZXIgaXMgYSBjbGllbnQgZHJpdmVyIHRvIHRoZSBjb3JlIFBNQnVzIGRyaXZlci4gUGxlYXNlIHNlZQorRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscyBvbiBQTUJ1cyBjbGllbnQgZHJpdmVycy4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgYXV0by1kZXRlY3QgZGV2aWNlcy4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1BsYXRmb3JtIGRhdGEgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgc3RhbmRhcmQgUE1CdXMgZHJpdmVyIHBsYXRmb3JtIGRhdGEuCisKKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworaW4xX2xhYmVsCQkidmluIgoraW4xX2lucHV0CQlNZWFzdXJlZCBpbnB1dCB2b2x0YWdlLgoraW4xX2F2ZXJhZ2UJCUF2ZXJhZ2UgbWVhc3VyZWQgaW5wdXQgdm9sdGFnZS4KK2luMV9taW4JCQlNaW5pbXVtIGlucHV0IHZvbHRhZ2UuCitpbjFfbWF4CQkJTWF4aW11bSBpbnB1dCB2b2x0YWdlLgoraW4xX21pbl9hbGFybQkJSW5wdXQgdm9sdGFnZSBsb3cgYWxhcm0uCitpbjFfbWF4X2FsYXJtCQlJbnB1dCB2b2x0YWdlIGhpZ2ggYWxhcm0uCisKK2luMl9sYWJlbAkJInZvdXQxIgoraW4yX2lucHV0CQlNZWFzdXJlZCBvdXRwdXQgdm9sdGFnZS4KK2luMl9hdmVyYWdlCQlBdmVyYWdlIG1lYXN1cmVkIG91dHB1dCB2b2x0YWdlLgoraW4yX21pbgkJCU1pbmltdW0gb3V0cHV0IHZvbHRhZ2UuCitpbjJfbWluX2FsYXJtCQlPdXRwdXQgdm9sdGFnZSBsb3cgYWxhcm0uCisKK2luM19sYWJlbAkJInZvdXQyIgoraW4zX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlIG9uIHZhdXggcGluCisKK2N1cnIxX2xhYmVsCQkiaWluIgorY3VycjFfaW5wdXQJCU1lYXN1cmVkIGlucHV0IGN1cnJlbnQuCitjdXJyMV9hdmVyYWdlCQlBdmVyYWdlIG1lYXN1cmVkIGlucHV0IGN1cnJlbnQuCitjdXJyMV9tYXgJCU1heGltdW0gaW5wdXQgY3VycmVudC4KK2N1cnIxX21heF9hbGFybQkJSW5wdXQgY3VycmVudCBoaWdoIGFsYXJtLgorCitwb3dlcjFfbGFiZWwJCSJwaW4iCitwb3dlcjFfaW5wdXQJCU1lYXN1cmVkIGlucHV0IHBvd2VyLgorcG93ZXIxX2F2ZXJhZ2UJCUF2ZXJhZ2UgbWVhc3VyZWQgaW5wdXQgcG93ZXIuCitwb3dlcjFfbWF4CQlNYXhpbXVtIGlucHV0IHBvd2VyIGxpbWl0LgorcG93ZXIxX2FsYXJtCQlJbnB1dCBwb3dlciBhbGFybQorcG93ZXIxX2lucHV0X2hpZ2hlc3QJSGlzdG9yaWNhbCBtYXhpbXVtIHBvd2VyLgorcG93ZXIxX3Jlc2V0X2hpc3RvcnkJV3JpdGUgYW55IHZhbHVlIHRvIHJlc2V0IG1heGltdW0gcG93ZXIgaGlzdG9yeS4KKwordGVtcDFfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLgordGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLgordGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4KK3RlbXAxX21heF9hbGFybQkJQ2hpcCB0ZW1wZXJhdHVyZSBoaWdoIGFsYXJtLgordGVtcDFfY3JpdF9hbGFybQlDaGlwIHRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKaW5kZXggZjNlZmQxOC4uOWNkMTRjZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTExMyw3ICsxMTMsMTEgQEAKICAgICBQcmVmaXg6ICd3ODNsNzcxJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZSwgY2FuIGJlIHJlcXVlc3RlZCBmcm9tIE51dm90b24KLQorICAqIFBoaWxpcHMvTlhQIFNBNTYwMDRYCisgICAgUHJlZml4OiAnc2E1NjAwNCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NDggdGhyb3VnaCAweDRGCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgTlhQIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly9pY3MubnhwLmNvbS9wcm9kdWN0cy9pbnRlcmZhY2UvZGF0YXNoZWV0L3NhNTYwMDR4LnBkZgogCiBBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCkBAIC0xOTMsNiArMTk3LDkgQEAKICAgKiBUaGUgQVdHIGFuZCBBU0cgdmFyaWFudHMgb25seSBkaWZmZXIgaW4gcGFja2FnZSBmb3JtYXQuCiAgICogRGlvZGUgaWRlYWxpdHkgZmFjdG9yIGNvbmZpZ3VyYXRpb24gKHJlbW90ZSBzZW5zb3IpIGF0IDB4RTMKIAorU0E1NjAwNFg6CisgICogQmV0dGVyIGxvY2FsIHJlc29sdXRpb24KKwogQWxsIHRlbXBlcmF0dXJlIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gZGVncmVlcyBDZWxzaXVzLiBSZXNvbHV0aW9uCiBpcyAxLjAgZGVncmVlIGZvciB0aGUgbG9jYWwgdGVtcGVyYXR1cmUsIDAuMTI1IGRlZ3JlZSBmb3IgdGhlIHJlbW90ZQogdGVtcGVyYXR1cmUsIGV4Y2VwdCBmb3IgdGhlIE1BWDY2NTcsIE1BWDY2NTggYW5kIE1BWDY2NTkgd2hpY2ggaGF2ZSBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTUyNDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkOGFlYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05NTI0NQpAQCAtMCwwICsxLDMzIEBACitLZXJuZWwgZHJpdmVyIGxtOTUyNDUKKz09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQ1CisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4LCAweDE5LCAweDI5LCAweDRjLCAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vbXBmL0xNL0xNOTUyNDUuaHRtbAorCisKK0F1dGhvcjogQWxleGFuZGVyIFN0ZWluIDxhbGV4YW5kZXIuc3RlaW5Ac3lzdGVjLWVsZWN0cm9uaWMuY29tPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhlIExNOTUyNDUgaXMgYW4gMTEtYml0IGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHdpdGggYSAyLXdpcmUgU3lzdGVtCitNYW5hZ2VtZW50IEJ1cyAoU01CdXMpIGludGVyZmFjZSBhbmQgVHJ1VGhlcm0gdGVjaG5vbG9neSB0aGF0IGNhbiBtb25pdG9yCit0aGUgdGVtcGVyYXR1cmUgb2YgYSByZW1vdGUgZGlvZGUgYXMgd2VsbCBhcyBpdHMgb3duIHRlbXBlcmF0dXJlLgorVGhlIExNOTUyNDUgY2FuIGJlIHVzZWQgdG8gdmVyeSBhY2N1cmF0ZWx5IG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIG9mCitleHRlcm5hbCBkZXZpY2VzIHN1Y2ggYXMgbWljcm9wcm9jZXNzb3JzLgorCitBbGwgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBnaXZlbiBpbiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cy4gTG9jYWwgdGVtcGVyYXR1cmUKK2lzIGdpdmVuIHdpdGhpbiBhIHJhbmdlIG9mIC0xMjcgdG8gKzEyNy44NzUgZGVncmVlcy4gUmVtb3RlIHRlbXBlcmF0dXJlcyBhcmUKK2dpdmVuIHdpdGhpbiBhIHJhbmdlIG9mIC0xMjcgdG8gKzI1NSBkZWdyZWVzLiBSZXNvbHV0aW9uIGRlcGVuZHMgb24KK3RlbXBlcmF0dXJlIGlucHV0IGFuZCByYW5nZS4KKworRWFjaCBzZW5zb3IgaGFzIGl0cyBvd24gY3JpdGljYWwgbGltaXQsIGJ1dCB0aGUgaHlzdGVyZXNpcyBpcyBjb21tb24gdG8gYWxsCit0d28gY2hhbm5lbHMuCisKK1RoZSBsbTk1MjQ1IGRyaXZlciBjYW4gY2hhbmdlIGl0cyB1cGRhdGUgaW50ZXJ2YWwgdG8gYSBmaXhlZCBzZXQgb2YgdmFsdWVzLgorSXQgd2lsbCByb3VuZCB1cCB0byB0aGUgbmV4dCBzZWxlY3RhYmxlIGludGVydmFsLiBTZWUgdGhlIGRhdGFzaGVldCBmb3IgZXhhY3QKK3ZhbHVlcy4gUmVhZGluZyBzZW5zb3IgdmFsdWVzIG1vcmUgb2Z0ZW4gd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbCByZXR1cm4KKydvbGQnIHZhbHVlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY0CmluZGV4IDQxNzI4OTkuLmY2ZThiY2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NApAQCAtNTAsNiArNTAsOCBAQAogaW5bMS00XV9tYXhfYWxhcm0JVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCiBpblsxLTRdX2xjcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgogaW5bMS00XV9jcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KK2luWzEtNF1faGlnaGVzdAkJSGlzdG9yaWNhbCBtYXhpbXVtIHZvbHRhZ2UuCitpblsxLTRdX3Jlc2V0X2hpc3RvcnkJV3JpdGUgYW55IHZhbHVlIHRvIHJlc2V0IGhpc3RvcnkuCiAKIHRlbXAxX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZS4gRnJvbSBSRUFEX1RFTVBFUkFUVVJFXzEgcmVnaXN0ZXIuCiB0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KQEAgLTYwLDMgKzYyLDUgQEAKIHRlbXAxX2NyaXRfYWxhcm0JQ2hpcCB0ZW1wZXJhdHVyZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCiAJCQlSRUFEX1RFTVBFUkFUVVJFXzEgd2l0aCBPVF9GQVVMVF9MSU1JVCBpZiBURU1QX09UX0ZBVUxUCiAJCQlzdGF0dXMgaXMgc2V0LgordGVtcDFfaGlnaGVzdAkJSGlzdG9yaWNhbCBtYXhpbXVtIHRlbXBlcmF0dXJlLgordGVtcDFfcmVzZXRfaGlzdG9yeQlXcml0ZSBhbnkgdmFsdWUgdG8gcmVzZXQgaGlzdG9yeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY1CmluZGV4IDQ0YjRmNjEuLmMxMWY2NGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NQpAQCAtNjIsNiArNjIsMTMgQEAKIHRoZSBkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgogZGV0YWlscy4KIAorV0FSTklORzogRG8gbm90IGFjY2VzcyBjaGlwIHJlZ2lzdGVycyB1c2luZyB0aGUgaTJjZHVtcCBjb21tYW5kLCBhbmQgZG8gbm90IHVzZQorYW55IG9mIHRoZSBpMmN0b29scyBjb21tYW5kcyBvbiBhIGNvbW1hbmQgcmVnaXN0ZXIgKDB4YTUgdG8gMHhhYykuIFRoZSBjaGlwcworc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIGludGVycHJldCBhbnkgYWNjZXNzIHRvIGEgY29tbWFuZCByZWdpc3RlciAoaW5jbHVkaW5nCityZWFkIGNvbW1hbmRzKSBhcyByZXF1ZXN0IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgaW4gcXVlc3Rpb24uIFRoaXMgbWF5IHJlc3VsdCBpbgorcG93ZXIgbG9zcywgYm9hcmQgcmVzZXRzLCBhbmQvb3IgRmxhc2ggY29ycnVwdGlvbi4gV29yc3QgY2FzZSwgeW91ciBib2FyZCBtYXkKK3R1cm4gaW50byBhIGJyaWNrLgorCiAKIFN5c2ZzIGVudHJpZXMKIC0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTY2OCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTY2OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjE2ZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjY4CkBAIC0wLDAgKzEsNjAgQEAKK0tlcm5lbCBkcml2ZXIgbWF4MTY2OAorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVgxNjY4LCBNQVgxODA1IGFuZCBNQVgxOTg5CisgICAgUHJlZml4OiAnbWF4MTY2OCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsIDB4NGMsIDB4NGQsIDB4NGUKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjY4LU1BWDE5ODkucGRmCisKK0F1dGhvcjoKKyAgICBEYXZpZCBHZW9yZ2UgPGRhdmlkLmdlb3JnZUBza2EuYWMuemE+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBNYXhpbSBNQVgxNjY4LCBNQVgxODA1IGFuZCBNQVgxOTg5CitjaGlwcy4KKworVGhlIHRocmVlIGRldmljZXMgYXJlIHZlcnkgc2ltaWxhciwgYnV0IHRoZSBNQVgxODA1IGhhcyBhIHJlZHVjZWQgZmVhdHVyZQorc2V0OyBvbmx5IHR3byByZW1vdGUgdGVtcGVyYXR1cmUgaW5wdXRzIHZzIHRoZSBmb3VyIGF2YWlibGUgb24gdGhlIG90aGVyCit0d28gSUNzLgorCitUaGUgZHJpdmVyIGlzIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZGV2aWNlcyBhbmQgY3JlYXRlcyBzeXNmcworZW50cmllcyBhcyBmb2xsb3dzOgorCitNQVgxODA1LCBNQVgxNjY4IGFuZCBNQVgxOTg5OgorCit0ZW1wMV9pbnB1dCAgICAgcm8gbG9jYWwgKGFtYmllbnQpIHRlbXBlcmF0dXJlCit0ZW1wMV9tYXggICAgICAgcncgbG9jYWwgdGVtcGVyYXR1cmUgbWF4aW11bSB0aHJlc2hvbGQgZm9yIGFsYXJtCit0ZW1wMV9tYXhfYWxhcm0gcm8gbG9jYWwgdGVtcGVyYXR1cmUgbWF4aW11bSB0aHJlc2hvbGQgYWxhcm0KK3RlbXAxX21pbiAgICAgICBydyBsb2NhbCB0ZW1wZXJhdHVyZSBtaW5pbXVtIHRocmVzaG9sZCBmb3IgYWxhcm0KK3RlbXAxX21pbl9hbGFybSBybyBsb2NhbCB0ZW1wZXJhdHVyZSBtaW5pbXVtIHRocmVzaG9sZCBhbGFybQordGVtcDJfaW5wdXQgICAgIHJvIHJlbW90ZSB0ZW1wZXJhdHVyZSAxCit0ZW1wMl9tYXggICAgICAgcncgcmVtb3RlIHRlbXBlcmF0dXJlIDEgbWF4aW11bSB0aHJlc2hvbGQgZm9yIGFsYXJtCit0ZW1wMl9tYXhfYWxhcm0gcm8gcmVtb3RlIHRlbXBlcmF0dXJlIDEgbWF4aW11bSB0aHJlc2hvbGQgYWxhcm0KK3RlbXAyX21pbiAgICAgICBydyByZW1vdGUgdGVtcGVyYXR1cmUgMSBtaW5pbXVtIHRocmVzaG9sZCBmb3IgYWxhcm0KK3RlbXAyX21pbl9hbGFybSBybyByZW1vdGUgdGVtcGVyYXR1cmUgMSBtaW5pbXVtIHRocmVzaG9sZCBhbGFybQordGVtcDNfaW5wdXQgICAgIHJvIHJlbW90ZSB0ZW1wZXJhdHVyZSAyCit0ZW1wM19tYXggICAgICAgcncgcmVtb3RlIHRlbXBlcmF0dXJlIDIgbWF4aW11bSB0aHJlc2hvbGQgZm9yIGFsYXJtCit0ZW1wM19tYXhfYWxhcm0gcm8gcmVtb3RlIHRlbXBlcmF0dXJlIDIgbWF4aW11bSB0aHJlc2hvbGQgYWxhcm0KK3RlbXAzX21pbiAgICAgICBydyByZW1vdGUgdGVtcGVyYXR1cmUgMiBtaW5pbXVtIHRocmVzaG9sZCBmb3IgYWxhcm0KK3RlbXAzX21pbl9hbGFybSBybyByZW1vdGUgdGVtcGVyYXR1cmUgMiBtaW5pbXVtIHRocmVzaG9sZCBhbGFybQorCitNQVgxNjY4IGFuZCBNQVgxOTg5IG9ubHk6Cit0ZW1wNF9pbnB1dCAgICAgcm8gcmVtb3RlIHRlbXBlcmF0dXJlIDMKK3RlbXA0X21heCAgICAgICBydyByZW1vdGUgdGVtcGVyYXR1cmUgMyBtYXhpbXVtIHRocmVzaG9sZCBmb3IgYWxhcm0KK3RlbXA0X21heF9hbGFybSBybyByZW1vdGUgdGVtcGVyYXR1cmUgMyBtYXhpbXVtIHRocmVzaG9sZCBhbGFybQordGVtcDRfbWluICAgICAgIHJ3IHJlbW90ZSB0ZW1wZXJhdHVyZSAzIG1pbmltdW0gdGhyZXNob2xkIGZvciBhbGFybQordGVtcDRfbWluX2FsYXJtIHJvIHJlbW90ZSB0ZW1wZXJhdHVyZSAzIG1pbmltdW0gdGhyZXNob2xkIGFsYXJtCit0ZW1wNV9pbnB1dCAgICAgcm8gcmVtb3RlIHRlbXBlcmF0dXJlIDQKK3RlbXA1X21heCAgICAgICBydyByZW1vdGUgdGVtcGVyYXR1cmUgNCBtYXhpbXVtIHRocmVzaG9sZCBmb3IgYWxhcm0KK3RlbXA1X21heF9hbGFybSBybyByZW1vdGUgdGVtcGVyYXR1cmUgNCBtYXhpbXVtIHRocmVzaG9sZCBhbGFybQordGVtcDVfbWluICAgICAgIHJ3IHJlbW90ZSB0ZW1wZXJhdHVyZSA0IG1pbmltdW0gdGhyZXNob2xkIGZvciBhbGFybQordGVtcDVfbWluX2FsYXJtIHJvIHJlbW90ZSB0ZW1wZXJhdHVyZSA0IG1pbmltdW0gdGhyZXNob2xkIGFsYXJtCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIHJlYWRfb25seTogaW50CisgIFNldCB0byBub24temVybyBpZiB5b3Ugd2lzaCB0byBwcmV2ZW50IHdyaXRlIGFjY2VzcyB0byBhbGFybSB0aHJlc2hvbGRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MzQ0NDAKaW5kZXggNmM1MjVkZC4uOGFiNTE1MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDM0NDQwCkBAIC01Niw2ICs1Niw4IEBACiBpblsxLTZdX21heF9hbGFybQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KIGluWzEtNl1fbGNyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9GQVVMVCBzdGF0dXMuCiBpblsxLTZdX2NyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfRkFVTFQgc3RhdHVzLgoraW5bMS02XV9oaWdoZXN0CQlIaXN0b3JpY2FsIG1heGltdW0gdm9sdGFnZS4KK2luWzEtNl1fcmVzZXRfaGlzdG9yeQlXcml0ZSBhbnkgdmFsdWUgdG8gcmVzZXQgaGlzdG9yeS4KIAogY3VyclsxLTZdX2xhYmVsCQkiaW91dFsxLTZdIi4KIGN1cnJbMS02XV9pbnB1dAkJTWVhc3VyZWQgY3VycmVudC4gRnJvbSBSRUFEX0lPVVQgcmVnaXN0ZXIuCkBAIC02Myw2ICs2NSw4IEBACiBjdXJyWzEtNl1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiBjdXJyWzEtNl1fbWF4X2FsYXJtCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5JTkcgc3RhdHVzLgogY3VyclsxLTZdX2NyaXRfYWxhcm0JQ3VycmVudCBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfRkFVTFQgc3RhdHVzLgorY3VyclsxLTZdX2hpZ2hlc3QJSGlzdG9yaWNhbCBtYXhpbXVtIGN1cnJlbnQuCitjdXJyWzEtNl1fcmVzZXRfaGlzdG9yeQlXcml0ZSBhbnkgdmFsdWUgdG8gcmVzZXQgaGlzdG9yeS4KIAogCQkJaW42IGFuZCBjdXJyNiBhdHRyaWJ1dGVzIG9ubHkgZXhpc3QgZm9yIE1BWDM0NDQwLgogCkBAIC03NSw1ICs3OSw3IEBACiB0ZW1wWzEtOF1fY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KIHRlbXBbMS04XV9tYXhfYWxhcm0JVGVtcGVyYXR1cmUgaGlnaCBhbGFybS4KIHRlbXBbMS04XV9jcml0X2FsYXJtCVRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uCit0ZW1wWzEtOF1faGlnaGVzdAlIaXN0b3JpY2FsIG1heGltdW0gdGVtcGVyYXR1cmUuCit0ZW1wWzEtOF1fcmVzZXRfaGlzdG9yeQlXcml0ZSBhbnkgdmFsdWUgdG8gcmVzZXQgaGlzdG9yeS4KIAogCQkJdGVtcDcgYW5kIHRlbXA4IGF0dHJpYnV0ZXMgb25seSBleGlzdCBmb3IgTUFYMzQ0NDAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODggYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODgKaW5kZXggMGRkZDNhNC4uNzFlZDEwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg4Njg4CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4ODY4OApAQCAtNTAsNiArNTAsOCBAQAogaW4xX21heF9hbGFybQkJVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCiBpbjFfbGNyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgogaW4xX2NyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KK2luMV9oaWdoZXN0CQlIaXN0b3JpY2FsIG1heGltdW0gdm9sdGFnZS4KK2luMV9yZXNldF9oaXN0b3J5CVdyaXRlIGFueSB2YWx1ZSB0byByZXNldCBoaXN0b3J5LgogCiBjdXJyMV9sYWJlbAkJImlvdXQxIgogY3VycjFfaW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JT1VUIHJlZ2lzdGVyLgpAQCAtNTcsNiArNTksOCBAQAogY3VycjFfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiBjdXJyMV9tYXhfYWxhcm0JCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCiBjdXJyMV9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KK2N1cnIxX2hpZ2hlc3QJCUhpc3RvcmljYWwgbWF4aW11bSBjdXJyZW50LgorY3VycjFfcmVzZXRfaGlzdG9yeQlXcml0ZSBhbnkgdmFsdWUgdG8gcmVzZXQgaGlzdG9yeS4KIAogdGVtcDFfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLiBGcm9tIFJFQURfVEVNUEVSQVRVUkVfMSByZWdpc3Rlci4KIHRlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgpAQCAtNjcsMyArNzEsNSBAQAogdGVtcDFfY3JpdF9hbGFybQlDaGlwIHRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKIAkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX0ZBVUxUX0xJTUlUIGlmIFRFTVBfT1RfRkFVTFQKIAkJCXN0YXR1cyBpcyBzZXQuCit0ZW1wMV9oaWdoZXN0CQlIaXN0b3JpY2FsIG1heGltdW0gdGVtcGVyYXR1cmUuCit0ZW1wMV9yZXNldF9oaXN0b3J5CVdyaXRlIGFueSB2YWx1ZSB0byByZXNldCBoaXN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9udGNfdGhlcm1pc3RvciBiL0RvY3VtZW50YXRpb24vaHdtb24vbnRjX3RoZXJtaXN0b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmZGE5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbnRjX3RoZXJtaXN0b3IKQEAgLTAsMCArMSw5MyBAQAorS2VybmVsIGRyaXZlciBudGNfdGhlcm1pc3RvcgorPT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIHRoZXJtaXN0b3JzOgorKiBNdXJhdGEgTlRDIFRoZXJtaXN0b3JzIE5DUDE1V0I0NzMsIE5DUDE4V0I0NzMsIE5DUDIxV0I0NzMsIE5DUDAzV0I0NzMsIE5DUDE1V0wzMzMKKyAgUHJlZml4ZXM6ICduY3AxNXdiNDczJywgJ25jcDE4d2I0NzMnLCAnbmNwMjF3YjQ3MycsICduY3AwM3diNDczJywgJ25jcDE1d2wzMzMnCisgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IE11cmF0YQorCitPdGhlciBOVEMgdGhlcm1pc3RvcnMgY2FuIGJlIHN1cHBvcnRlZCBzaW1wbHkgYnkgYWRkaW5nIGNvbXBlbnNhdGlvbgordGFibGVzOyBlLmcuLCBOQ1AxNVdMMzMzIHN1cHBvcnQgaXMgYWRkZWQgYnkgdGhlIHRhYmxlIG5jcFhYd2wzMzMuCisKK0F1dGhvcnM6CisJTXl1bmdKb28gSGFtIDxteXVuZ2pvby5oYW1Ac2Ftc3VuZy5jb20+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGUgTlRDIHRoZXJtaXN0b3IgaXMgYSBzaW1wbGUgdGhlcm1pc3RvciB0aGF0IHJlcXVpcmVzIHVzZXJzIHRvIHByb3ZpZGUgdGhlCityZXNpc3RhbmNlIGFuZCBsb29rdXAgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGVuc2F0aW9uIHRhYmxlIHRvIGdldCB0aGUKK3RlbXBlcmF0dXJlIGlucHV0LgorCitUaGUgTlRDIGRyaXZlciBwcm92aWRlcyBsb29rdXAgdGFibGVzIHdpdGggYSBsaW5lYXIgYXBwcm94aW1hdGlvbiBmdW5jdGlvbgorYW5kIGZvdXIgY2lyY3VpdCBtb2RlbHMgd2l0aCBhbiBvcHRpb24gbm90IHRvIHVzZSBhbnkgb2YgdGhlIGZvdXIgbW9kZWxzLgorCitUaGUgZm91ciBjaXJjdWl0IG1vZGVscyBwcm92aWRlZCBhcmU6CisKKwkkOiByZXNpc3RlciwgW1RIXTogdGhlIHRoZXJtaXN0b3IKKworIDEuIGNvbm5lY3QgPSBOVENfQ09OTkVDVEVEX1BPU0lUSVZFLCBwdWxsdXBfb2htID4gMAorCisgICBbcHVsbHVwX3VWXQorICAgICAgIHwgICAgfAorICAgICAgW1RIXSAgJCAocHVsbHVwX29obSkKKyAgICAgICB8ICAgIHwKKyAgICAgICArLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtyZWFkX3VWXQorICAgICAgIHwKKyAgICAgICAkIChwdWxsZG93bl9vaG0pCisgICAgICAgfAorICAgICAgLS0tIChncm91bmQpCisKKyAyLiBjb25uZWN0ID0gTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSwgcHVsbHVwX29obSA9IDAgKG5vdC1jb25uZWN0ZWQpCisKKyAgIFtwdWxsdXBfdVZdCisgICAgICAgfAorICAgICAgW1RIXQorICAgICAgIHwKKyAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtyZWFkX3VWXQorICAgICAgIHwKKyAgICAgICAkIChwdWxsZG93bl9vaG0pCisgICAgICAgfAorICAgICAgLS0tIChncm91bmQpCisKKyAzLiBjb25uZWN0ID0gTlRDX0NPTk5FQ1RFRF9HUk9VTkQsIHB1bGxkb3duX29obSA+IDAKKworICAgW3B1bGx1cF91Vl0KKyAgICAgICB8CisgICAgICAgJCAocHVsbHVwX29obSkKKyAgICAgICB8CisgICAgICAgKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bcmVhZF91Vl0KKyAgICAgICB8ICAgIHwKKyAgICAgIFtUSF0gICQgKHB1bGxkb3duX29obSkKKyAgICAgICB8ICAgIHwKKyAgICAgIC0tLS0tLS0tIChncm91bmQpCisKKyA0LiBjb25uZWN0ID0gTlRDX0NPTk5FQ1RFRF9HUk9VTkQsIHB1bGxkb3duX29obSA9IDAgKG5vdC1jb25uZWN0ZWQpCisKKyAgIFtwdWxsdXBfdVZdCisgICAgICAgfAorICAgICAgICQgKHB1bGx1cF9vaG0pCisgICAgICAgfAorICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW3JlYWRfdVZdCisgICAgICAgfAorICAgICAgW1RIXQorICAgICAgIHwKKyAgICAgIC0tLSAoZ3JvdW5kKQorCitXaGVuIG9uZSBvZiB0aGUgZm91ciBjaXJjdWl0IG1vZGVscyBpcyB1c2VkLCByZWFkX3VWLCBwdWxsdXBfdVYsIHB1bGx1cF9vaG0sCitwdWxsZG93bl9vaG0sIGFuZCBjb25uZWN0IHNob3VsZCBiZSBwcm92aWRlZC4gV2hlbiBub25lIG9mIHRoZSBmb3VyIG1vZGVscworYXJlIHN1aXRhYmxlIG9yIHRoZSB1c2VyIGNhbiBnZXQgdGhlIHJlc2lzdGFuY2UgZGlyZWN0bHksIHRoZSB1c2VyIHNob3VsZAorcHJvdmlkZSByZWFkX29obSBhbmQgX25vdF8gcHJvdmlkZSB0aGUgb3RoZXJzLgorCitTeXNmcyBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLQorbmFtZQkJdGhlIG1hbmRhdG9yeSBnbG9iYWwgYXR0cmlidXRlLCB0aGUgdGhlcm1pc3RvciBuYW1lLgorCit0ZW1wMV90eXBlCWFsd2F5cyA0ICh0aGVybWlzdG9yKQorCQlSTworCit0ZW1wMV9pbnB1dAltZWFzdXJlIHRoZSB0ZW1wZXJhdHVyZSBhbmQgcHJvdmlkZSB0aGUgbWVhc3VyZWQgdmFsdWUuCisJCShyZWFkaW5nIHRoaXMgZmlsZSBpbml0aWF0ZXMgdGhlIHJlYWRpbmcgcHJvY2VkdXJlLikKKwkJUk8KKworTm90ZSB0aGF0IGVhY2ggTlRDIHRoZXJtaXN0b3IgaGFzIG9ubHkgX29uZV8gdGhlcm1pc3RvcjsgdGh1cywgb25seSB0ZW1wMSBleGlzdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cwppbmRleCA1ZTQ2MmZjLi5jMzZjMWMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMKQEAgLTEzLDYgKzEzLDEzIEBACiAgICAgUHJlZml4OiAnbHRjMjk3OCcKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQogICAgIERhdGFzaGVldDogaHR0cDovL2Nkcy5saW5lYXIuY29tL2RvY3MvRGF0YXNoZWV0LzI5NzhmYS5wZGYKKyAgKiBPTiBTZW1pY29uZHVjdG9yIEFEUDQwMDAsIE5DUDQyMDAsIE5DUDQyMDgKKyAgICBQcmVmaXhlczogJ2FkcDQwMDAnLCAnbmNwNDIwMCcsICduY3A0MjA4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0czoKKwlodHRwOi8vd3d3Lm9uc2VtaS5jb20vcHViX2xpbmsvQ29sbGF0ZXJhbC9BRFA0MDAwLUQuUERGCisJaHR0cDovL3d3dy5vbnNlbWkuY29tL3B1Yl9saW5rL0NvbGxhdGVyYWwvTkNQNDIwMC1ELlBERgorCWh0dHA6Ly93d3cub25zZW1pLmNvbS9wdWJfbGluay9Db2xsYXRlcmFsL0pVTkUlMjAyMDA5LSUyMFJFVi4lMjAwLlBERgogICAqIEdlbmVyaWMgUE1CdXMgZGV2aWNlcwogICAgIFByZWZpeDogJ3BtYnVzJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCmluZGV4IDhmNjNjMjQuLmE0YWE4ZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlCkBAIC0xMzksNiArMTM5LDI5IEBACiAJCXRodW1iOiBkcml2ZXJzIHNob3VsZCByZXBvcnQgdGhlIHZvbHRhZ2UgdmFsdWVzIGF0IHRoZQogCQkicGlucyIgb2YgdGhlIGNoaXAuCiAKK2luWzAtKl1fYXZlcmFnZQorCQlBdmVyYWdlIHZvbHRhZ2UKKwkJVW5pdDogbWlsbGl2b2x0CisJCVJPCisKK2luWzAtKl1fbG93ZXN0CisJCUhpc3RvcmljYWwgbWluaW11bSB2b2x0YWdlCisJCVVuaXQ6IG1pbGxpdm9sdAorCQlSTworCitpblswLSpdX2hpZ2hlc3QKKwkJSGlzdG9yaWNhbCBtYXhpbXVtIHZvbHRhZ2UKKwkJVW5pdDogbWlsbGl2b2x0CisJCVJPCisKK2luWzAtKl1fcmVzZXRfaGlzdG9yeQorCQlSZXNldCBpblhfbG93ZXN0IGFuZCBpblhfaGlnaGVzdAorCQlXTworCitpbl9yZXNldF9oaXN0b3J5CisJCVJlc2V0IGluWF9sb3dlc3QgYW5kIGluWF9oaWdoZXN0IGZvciBhbGwgc2Vuc29ycworCQlXTworCiBpblswLSpdX2xhYmVsCVN1Z2dlc3RlZCB2b2x0YWdlIGNoYW5uZWwgbGFiZWwuCiAJCVRleHQgc3RyaW5nCiAJCVNob3VsZCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlIGRyaXZlciBoYXMgaGludHMgYWJvdXQgd2hhdApAQCAtNDA3LDYgKzQzMCwyOSBAQAogCQlVbml0OiBtaWxsaWFtcGVyZQogCQlSTwogCitjdXJyWzEtKl1fYXZlcmFnZQorCQlBdmVyYWdlIGN1cnJlbnQgdXNlCisJCVVuaXQ6IG1pbGxpYW1wZXJlCisJCVJPCisKK2N1cnJbMS0qXV9sb3dlc3QKKwkJSGlzdG9yaWNhbCBtaW5pbXVtIGN1cnJlbnQKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUk8KKworY3VyclsxLSpdX2hpZ2hlc3QKKwkJSGlzdG9yaWNhbCBtYXhpbXVtIGN1cnJlbnQKKwkJVW5pdDogbWlsbGlhbXBlcmUKKwkJUk8KKworY3VyclsxLSpdX3Jlc2V0X2hpc3RvcnkKKwkJUmVzZXQgY3VyclhfbG93ZXN0IGFuZCBjdXJyWF9oaWdoZXN0CisJCVdPCisKK2N1cnJfcmVzZXRfaGlzdG9yeQorCQlSZXNldCBjdXJyWF9sb3dlc3QgYW5kIGN1cnJYX2hpZ2hlc3QgZm9yIGFsbCBzZW5zb3JzCisJCVdPCisKIEFsc28gc2VlIHRoZSBBbGFybXMgc2VjdGlvbiBmb3Igc3RhdHVzIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBjdXJyZW50cy4KIAogKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKaW5kZXggNzJiYThkNS4uNTQwNzhlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dApAQCAtMjkyLDYgKzI5Miw3IEBACiAJCQkJCTxtYWlsdG86YnVrQGJ1a3MuaXBuLmRlPgogMHhBMAlhbGwJbGludXgvc2RwL3NkcC5oCQlJbmR1c3RyaWFsIERldmljZSBQcm9qZWN0CiAJCQkJCTxtYWlsdG86a2VuamlAYml0Z2F0ZS5jb20+CisweEEyCTAwLTBGCWFyY2gvdGlsZS9pbmNsdWRlL2FzbS9oYXJkd2FsbC5oCiAweEEzCTgwLThGCVBvcnQgQUNMCQlpbiBkZXZlbG9wbWVudDoKIAkJCQkJPG1haWx0bzp0bGV3aXNAbWluZHNwcmluZy5jb20+CiAweEEzCTkwLTlGCWxpbnV4L2R0bGsuaApAQCAtMzE4LDQgKzMxOSw2IEBACiAJCQkJCTxtYWlsdG86dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CiAweEY0CTAwLTFGCXZpZGVvL21ieGZiLmgJCW1ieGZiCiAJCQkJCTxtYWlsdG86cmFwaEA4ZC5jb20+CisweEY2CWFsbAlMVFRuZwkJCUxpbnV4IFRyYWNlIFRvb2xraXQgTmV4dCBHZW5lcmF0aW9uCisJCQkJCTxtYWlsdG86bWF0aGlldS5kZXNub3llcnNAZWZmaWNpb3MuY29tPgogMHhGRAlhbGwJbGludXgvZG0taW9jdGwuaApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dAppbmRleCA5YTg2NzQ2Li4wZTA3MzRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1kb2NzLnR4dApAQCAtNjIwLDE3ICs2MjAsNiBAQAogICAgICAgIChpbmNsdWRpbmcgdGhpcyBkb2N1bWVudCBpdHNlbGYpIGhhdmUgYmVlbiBtb3ZlZCB0aGVyZSwgYW5kIG1pZ2h0CiAgICAgICAgYmUgbW9yZSB1cCB0byBkYXRlIHRoYW4gdGhlIHdlYiB2ZXJzaW9uLgogCi0gICAgICogTmFtZTogIkxpbnV4IFNvdXJjZSBEcml2ZXIiCi0gICAgICAgVVJMOiBodHRwOi8vbHNkLmxpbnV4LmN6Ci0gICAgICAgS2V5d29yZHM6IEJyb3dzaW5nIHNvdXJjZSBjb2RlLgotICAgICAgIERlc2NyaXB0aW9uOiAiTGludXggU291cmNlIERyaXZlciAoTFNEKSBpcyBhbiBhcHBsaWNhdGlvbiwgd2hpY2gKLSAgICAgICBjYW4gbWFrZSBicm93c2luZyBzb3VyY2UgY29kZXMgb2YgTGludXgga2VybmVsIGVhc2llciB0aGFuIHlvdSBjYW4KLSAgICAgICBpbWFnaW5lLiBZb3UgY2FuIHNlbGVjdCBiZXR3ZWVuIG11bHRpcGxlIHZlcnNpb25zIG9mIGtlcm5lbCAoZS5nLgotICAgICAgIDAuMDEsIDEuMC4wLCAyLjAuMzMsIDIuMC4zNHByZTEzLCAyLjAuMCwgMi4xLjEwMSBldGMuKS4gV2l0aCBMU0QKLSAgICAgICB5b3UgY2FuIHNlYXJjaCBMaW51eCBrZXJuZWwgKGZ1bGx0ZXh0LCBtYWNyb3MsIHR5cGVzLCBmdW5jdGlvbnMKLSAgICAgICBhbmQgdmFyaWFibGVzKSBhbmQgTFNEIGNhbiBnZW5lcmF0ZSBwYXRjaGVzIGZvciB5b3Ugb24gdGhlIGZseQotICAgICAgIChmaWxlcywgZGlyZWN0b3JpZXMgb3Iga2VybmVsKSIuCi0KICAgICAgKiBOYW1lOiAiTGludXggS2VybmVsIFNvdXJjZSBSZWZlcmVuY2UiCiAgICAgICAgQXV0aG9yOiBUaG9tYXMgR3JhaWNoZW4uCiAgICAgICAgVVJMOiBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LWtlcm5lbCZtPTk2NDQ2NjQwMTAyMjA1Jnc9NApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA0Y2E5Mzg5Li44NTRlZDVjYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQwLDYgKzQwLDcgQEAKIAlBTFNBCUFMU0Egc291bmQgc3VwcG9ydCBpcyBlbmFibGVkLgogCUFQSUMJQVBJQyBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQVBNCUFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgorCUFSTQlBUk0gYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJQVZSMzIJQVZSMzIgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJQVgyNQlBcHByb3ByaWF0ZSBBWC4yNSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQkxBQ0tGSU4gQmxhY2tmaW4gYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCkBAIC00OSw2ICs1MCw3IEBACiAJRUZJCUVGSSBQYXJ0aXRpb25pbmcgKEdQVCkgaXMgZW5hYmxlZAogCUVJREUJRUlERS9BVEFQSSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KKwlGVFJBQ0UJRnVuY3Rpb24gdHJhY2luZyBlbmFibGVkLgogCUdDT1YJR0NPViBwcm9maWxpbmcgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgogCUlBLTY0CUlBLTY0IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgpAQCAtNjksNiArNzEsNyBAQAogCQkJRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dC4KIAlNQ0EJTUNBIGJ1cyBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTURBCU1EQSBjb25zb2xlIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlNSVBTCU1JUFMgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJTU9VU0UJQXBwcm9wcmlhdGUgbW91c2Ugc3VwcG9ydCBpcyBlbmFibGVkLgogCU1TSQlNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKFBDSSkuCiAJTVRECU1URCAoTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlKSBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0xMDAsNyArMTAzLDYgQEAKIAlTUEFSQwlTcGFyYyBhcmNoaXRlY3R1cmUgaXMgZW5hYmxlZC4KIAlTV1NVU1AJU29mdHdhcmUgc3VzcGVuZCAoaGliZXJuYXRpb24pIGlzIGVuYWJsZWQuCiAJU1VTUEVORAlTeXN0ZW0gc3VzcGVuZCBzdGF0ZXMgYXJlIGVuYWJsZWQuCi0JRlRSQUNFCUZ1bmN0aW9uIHRyYWNpbmcgZW5hYmxlZC4KIAlUUE0JVFBNIGRyaXZlcnMgYXJlIGVuYWJsZWQuCiAJVFMJQXBwcm9wcmlhdGUgdG91Y2hzY3JlZW4gc3VwcG9ydCBpcyBlbmFibGVkLgogCVVNUwlVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnQgaXMgZW5hYmxlZC4KQEAgLTExNSw3ICsxMTcsNyBAQAogCVg4Ni02NAlYODYtNjQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJCQlNb3JlIFg4Ni02NCBib290IG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluCiAJCQlEb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCAuCi0JWDg2CUVpdGhlciAzMmJpdCBvciA2NGJpdCB4ODYgKHNhbWUgYXMgWDg2LTMyK1g4Ni02NCkKKwlYODYJRWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgeDg2IChzYW1lIGFzIFg4Ni0zMitYODYtNjQpCiAJWEVOCVhlbiBzdXBwb3J0IGlzIGVuYWJsZWQKIAogSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgdGV4dCBpbmRpY2F0ZXMgdGhhdCB0aGUgb3B0aW9uOgpAQCAtMTYzLDYgKzE2NSwxMSBAQAogCiAJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3Bvd2VyL3BtLnR4dCwgcGNpPW5vYWNwaQogCisJYWNwaV9yc2RwPQlbQUNQSSxFRkksS0VYRUNdCisJCQlQYXNzIHRoZSBSU0RQIGFkZHJlc3MgdG8gdGhlIGtlcm5lbCwgbW9zdGx5IHVzZWQKKwkJCW9uIG1hY2hpbmVzIHJ1bm5pbmcgRUZJIHJ1bnRpbWUgc2VydmljZSB0byBib290IHRoZQorCQkJc2Vjb25kIGtlcm5lbCBmb3Iga2R1bXAuCisKIAlhY3BpX2FwaWNfaW5zdGFuY2U9CVtBQ1BJLCBJT0FQSUNdCiAJCQlGb3JtYXQ6IDxpbnQ+CiAJCQkyOiB1c2UgMm5kIEFQSUMgdGFibGUsIGlmIGF2YWlsYWJsZQpAQCAtMzcxLDcgKzM3OCw3IEBACiAJYXRrYmQuc29mdHJlcGVhdD0gW0hXXQogCQkJVXNlIHNvZnR3YXJlIGtleWJvYXJkIHJlcGVhdAogCi0JYXV0b3Rlc3QJW0lBNjRdCisJYXV0b3Rlc3QJW0lBLTY0XQogCiAJYmF5Y29tX2VwcD0JW0hXLEFYMjVdCiAJCQlGb3JtYXQ6IDxpbz4sPG1vZGU+CkBAIC01NDYsNiArNTUzLDkgQEAKIAkJCS9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlci4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQuCiAKKwljcHVpZGxlLm9mZj0xCVtDUFVfSURMRV0KKwkJCWRpc2FibGUgdGhlIGNwdWlkbGUgc3ViLXN5c3RlbQorCiAJY3BjaWhwX2dlbmVyaWM9CVtIVyxQQ0ldIEdlbmVyaWMgcG9ydCBJL08gQ29tcGFjdFBDSSBkcml2ZXIKIAkJCUZvcm1hdDoKIAkJCTxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KQEAgLTY3Myw4ICs2ODMsOCBAQAogCQl1YXJ0WzgyNTBdLG1taW8zMiw8YWRkcj5bLG9wdGlvbnNdCiAJCQlTdGFydCBhbiBlYXJseSwgcG9sbGVkLW1vZGUgY29uc29sZSBvbiB0aGUgODI1MC8xNjU1MAogCQkJVUFSVCBhdCB0aGUgc3BlY2lmaWVkIEkvTyBwb3J0IG9yIE1NSU8gYWRkcmVzcy4KLQkJCU1NSU8gaW50ZXItcmVnaXN0ZXIgYWRkcmVzcyBzdHJpZGUgaXMgZWl0aGVyIDhiaXQgKG1taW8pCi0gICAgICAgICAgICAgICAgICAgICAgICBvciAzMmJpdCAobW1pbzMyKS4KKwkJCU1NSU8gaW50ZXItcmVnaXN0ZXIgYWRkcmVzcyBzdHJpZGUgaXMgZWl0aGVyIDgtYml0CisJCQkobW1pbykgb3IgMzItYml0IChtbWlvMzIpLgogCQkJVGhlIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciB0dHlTLCBhYm92ZS4KIAogCWVhcmx5cHJpbnRrPQlbWDg2LFNILEJMQUNLRklOXQpAQCAtNzE3LDcgKzcyNyw3IEBACiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBhbmQKIAkJCURvY3VtZW50YXRpb24vYmxvY2svZGVhZGxpbmUtaW9zY2hlZC50eHQgZm9yIGRldGFpbHMuCiAKLQllbGZjb3JlaGRyPQlbSUE2NCxQUEMsU0gsWDg2XQorCWVsZmNvcmVoZHI9CVtJQS02NCxQUEMsU0gsWDg2XQogCQkJU3BlY2lmaWVzIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnQgb2Yga2VybmVsIGNvcmUKIAkJCWltYWdlIGVsZiBoZWFkZXIuIEdlbmVyYWxseSBrZXhlYyBsb2FkZXIgd2lsbAogCQkJcGFzcyB0aGlzIG9wdGlvbiB0byBjYXB0dXJlIGtlcm5lbC4KQEAgLTc4Myw3ICs3OTMsNyBAQAogCQkJdHJhY2VyIGF0IGJvb3QgdXAuIGZ1bmN0aW9uLWxpc3QgaXMgYSBjb21tYSBzZXBhcmF0ZWQKIAkJCWxpc3Qgb2YgZnVuY3Rpb25zLiBUaGlzIGxpc3QgY2FuIGJlIGNoYW5nZWQgYXQgcnVuCiAJCQl0aW1lIGJ5IHRoZSBzZXRfZnRyYWNlX2ZpbHRlciBmaWxlIGluIHRoZSBkZWJ1Z2ZzCi0JCQl0cmFjaW5nIGRpcmVjdG9yeS4gCisJCQl0cmFjaW5nIGRpcmVjdG9yeS4KIAogCWZ0cmFjZV9ub3RyYWNlPVtmdW5jdGlvbi1saXN0XQogCQkJW0ZUUkFDRV0gRG8gbm90IHRyYWNlIHRoZSBmdW5jdGlvbnMgc3BlY2lmaWVkIGluCkBAIC04MjEsNyArODMxLDcgQEAKIAogCWhhc2hkaXN0PQlbS05MLE5VTUFdIExhcmdlIGhhc2hlcyBhbGxvY2F0ZWQgZHVyaW5nIGJvb3QKIAkJCWFyZSBkaXN0cmlidXRlZCBhY3Jvc3MgTlVNQSBub2Rlcy4gIERlZmF1bHRzIG9uCi0JCQlmb3IgNjRiaXQgTlVNQSwgb2ZmIG90aGVyd2lzZS4KKwkJCWZvciA2NC1iaXQgTlVNQSwgb2ZmIG90aGVyd2lzZS4KIAkJCUZvcm1hdDogMCB8IDEgKGZvciBvZmYgfCBvbikKIAogCWhjbD0JCVtJQS02NF0gU0dJJ3MgSGFyZHdhcmUgR3JhcGggY29tcGF0aWJpbGl0eSBsYXllcgpAQCAtOTkwLDEwICsxMDAwLDEwIEBACiAJCQlETUEuCiAJCWZvcmNlZGFjIFt4ODZfNjRdCiAJCQlXaXRoIHRoaXMgb3B0aW9uIGlvbW11IHdpbGwgbm90IG9wdGltaXplIHRvIGxvb2sKLQkJCWZvciBpbyB2aXJ0dWFsIGFkZHJlc3MgYmVsb3cgMzIgYml0IGZvcmNpbmcgZHVhbAorCQkJZm9yIGlvIHZpcnR1YWwgYWRkcmVzcyBiZWxvdyAzMi1iaXQgZm9yY2luZyBkdWFsCiAJCQlhZGRyZXNzIGN5Y2xlIG9uIHBjaSBidXMgZm9yIGNhcmRzIHN1cHBvcnRpbmcgZ3JlYXRlcgotCQkJdGhhbiAzMiBiaXQgYWRkcmVzc2luZy4gVGhlIGRlZmF1bHQgaXMgdG8gbG9vawotCQkJZm9yIHRyYW5zbGF0aW9uIGJlbG93IDMyIGJpdCBhbmQgaWYgbm90IGF2YWlsYWJsZQorCQkJdGhhbiAzMi1iaXQgYWRkcmVzc2luZy4gVGhlIGRlZmF1bHQgaXMgdG8gbG9vaworCQkJZm9yIHRyYW5zbGF0aW9uIGJlbG93IDMyLWJpdCBhbmQgaWYgbm90IGF2YWlsYWJsZQogCQkJdGhlbiBsb29rIGluIHRoZSBoaWdoZXIgcmFuZ2UuCiAJCXN0cmljdCBbRGVmYXVsdCBPZmZdCiAJCQlXaXRoIHRoaXMgb3B0aW9uIG9uIGV2ZXJ5IHVubWFwX3NpbmdsZSBvcGVyYXRpb24gd2lsbApAQCAtMTAwOSw3ICsxMDE5LDcgQEAKIAkJCW9mZglkaXNhYmxlIEludGVycnVwdCBSZW1hcHBpbmcKIAkJCW5vc2lkCWRpc2FibGUgU291cmNlIElEIGNoZWNraW5nCiAKLQlpbnR0ZXN0PQlbSUE2NF0KKwlpbnR0ZXN0PQlbSUEtNjRdCiAKIAlpb21lbT0JCURpc2FibGUgc3RyaWN0IGNoZWNraW5nIG9mIGFjY2VzcyB0byBNTUlPIG1lbW9yeQogCQlzdHJpY3QJcmVnaW9ucyBmcm9tIHVzZXJzcGFjZS4KQEAgLTEwMjYsNyArMTAzNiw3IEBACiAJCW5vbWVyZ2UKIAkJZm9yY2VzYWMKIAkJc29mdAotCQlwdAlbeDg2LCBJQTY0XQorCQlwdAlbeDg2LCBJQS02NF0KIAogCWlvNz0JCVtIV10gSU83IGZvciBNYXJ2ZWwgYmFzZWQgYWxwaGEgc3lzdGVtcwogCQkJU2VlIGNvbW1lbnQgYmVmb3JlIG1hcnZlbF9zcGVjaWZ5X2lvNyBpbgpAQCAtMTE1Nyw3ICsxMTY3LDcgQEAKIAogCWt2bS1hbWQubnB0PQlbS1ZNLEFNRF0gRGlzYWJsZSBuZXN0ZWQgcGFnaW5nICh2aXJ0dWFsaXplZCBNTVUpCiAJCQlmb3IgYWxsIGd1ZXN0cy4KLQkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkgaWYgaW4gNjRiaXQgb3IgMzJiaXQtUEFFIG1vZGUKKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkgaWYgaW4gNjQtYml0IG9yIDMyLWJpdCBQQUUgbW9kZS4KIAogCWt2bS1pbnRlbC5lcHQ9CVtLVk0sSW50ZWxdIERpc2FibGUgZXh0ZW5kZWQgcGFnZSB0YWJsZXMKIAkJCSh2aXJ0dWFsaXplZCBNTVUpIHN1cHBvcnQgb24gY2FwYWJsZSBJbnRlbCBjaGlwcy4KQEAgLTExOTQsMTAgKzEyMDQsMTAgQEAKIAkJCWxpYmF0YS5kbWE9MAkgIERpc2FibGUgYWxsIFBBVEEgYW5kIFNBVEEgRE1BCiAJCQlsaWJhdGEuZG1hPTEJICBQQVRBIGFuZCBTQVRBIERpc2sgRE1BIG9ubHkKIAkJCWxpYmF0YS5kbWE9MgkgIEFUQVBJIChDRFJPTSkgRE1BIG9ubHkKLQkJCWxpYmF0YS5kbWE9NAkgIENvbXBhY3QgRmxhc2ggRE1BIG9ubHkgCisJCQlsaWJhdGEuZG1hPTQJICBDb21wYWN0IEZsYXNoIERNQSBvbmx5CiAJCQlDb21iaW5hdGlvbnMgYWxzbyB3b3JrLCBzbyBsaWJhdGEuZG1hPTMgZW5hYmxlcyBETUEKIAkJCWZvciBkaXNrcyBhbmQgQ0RST01zLCBidXQgbm90IENGcy4KLQkKKwogCWxpYmF0YS5pZ25vcmVfaHBhPQlbTElCQVRBXSBJZ25vcmUgSFBBIGxpbWl0CiAJCQlsaWJhdGEuaWdub3JlX2hwYT0wCSAga2VlcCBCSU9TIGxpbWl0cyAoZGVmYXVsdCkKIAkJCWxpYmF0YS5pZ25vcmVfaHBhPTEJICBpZ25vcmUgbGltaXRzLCB1c2luZyBmdWxsIGRpc2sKQEAgLTEzMjMsNyArMTMzMyw3IEBACiAJbHRwYz0JCVtORVRdCiAJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4KIAotCW1hY2h2ZWM9CVtJQTY0XSBGb3JjZSB0aGUgdXNlIG9mIGEgcGFydGljdWxhciBtYWNoaW5lLXZlY3RvcgorCW1hY2h2ZWM9CVtJQS02NF0gRm9yY2UgdGhlIHVzZSBvZiBhIHBhcnRpY3VsYXIgbWFjaGluZS12ZWN0b3IKIAkJCShtYWNodmVjKSBpbiBhIGdlbmVyaWMga2VybmVsLgogCQkJRXhhbXBsZTogbWFjaHZlYz1ocHp4MV9zd2lvdGxiCiAKQEAgLTEzNDAsOSArMTM1MCwxMiBAQAogCQkJaXQgaXMgZXF1aXZhbGVudCB0byAibm9zbXAiLCB3aGljaCBhbHNvIGRpc2FibGVzCiAJCQl0aGUgSU8gQVBJQy4KIAotCW1heF9sb29wPQlbTE9PUF0gTWF4aW11bSBudW1iZXIgb2YgbG9vcGJhY2sgZGV2aWNlcyB0aGF0IGNhbgotCQkJYmUgbW91bnRlZAotCQkJRm9ybWF0OiA8MS0yNTY+CisJbWF4X2xvb3A9CVtMT09QXSBUaGUgbnVtYmVyIG9mIGxvb3AgYmxvY2sgZGV2aWNlcyB0aGF0IGdldAorCShsb29wLm1heF9sb29wKQl1bmNvbmRpdGlvbmFsbHkgcHJlLWNyZWF0ZWQgYXQgaW5pdCB0aW1lLiBUaGUgZGVmYXVsdAorCQkJbnVtYmVyIGlzIGNvbmZpZ3VyZWQgYnkgQkxLX0RFVl9MT09QX01JTl9DT1VOVC4gSW5zdGVhZAorCQkJb2Ygc3RhdGljYWxseSBhbGxvY2F0aW5nIGEgcHJlZGVmaW5lZCBudW1iZXIsIGxvb3AKKwkJCWRldmljZXMgY2FuIGJlIHJlcXVlc3RlZCBvbi1kZW1hbmQgd2l0aCB0aGUKKwkJCS9kZXYvbG9vcC1jb250cm9sIGludGVyZmFjZS4KIAogCW1jYXRlc3Q9CVtJQS02NF0KIApAQCAtMTcyNiw3ICsxNzM5LDcgQEAKIAogCW5vaW50cm91dGUJW0lBLTY0XQogCi0Jbm9qaXR0ZXIJW0lBNjRdIERpc2FibGVzIGppdHRlciBjaGVja2luZyBmb3IgSVRDIHRpbWVycy4KKwlub2ppdHRlcglbSUEtNjRdIERpc2FibGVzIGppdHRlciBjaGVja2luZyBmb3IgSVRDIHRpbWVycy4KIAogCW5vLWt2bWNsb2NrCVtYODYsS1ZNXSBEaXNhYmxlIHBhcmF2aXJ0dWFsaXplZCBLVk0gY2xvY2sgZHJpdmVyCiAKQEAgLTE3OTIsNyArMTgwNSw3IEBACiAKIAlub3gyYXBpYwlbWDg2LTY0LEFQSUNdIERvIG5vdCBlbmFibGUgeDJBUElDIG1vZGUuCiAKLQlucHRjZz0JCVtJQTY0XSBPdmVycmlkZSBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgZ2xvYmFsIFRMQgorCW5wdGNnPQkJW0lBLTY0XSBPdmVycmlkZSBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgZ2xvYmFsIFRMQgogCQkJcHVyZ2VzIHdoaWNoIGlzIHJlcG9ydGVkIGZyb20gZWl0aGVyIFBBTF9WTV9TVU1NQVJZIG9yCiAJCQlTQUwgUEFMTy4KIApAQCAtMjA2OSwxMyArMjA4MiwxNiBAQAogCQkJRm9ybWF0OiB7IHBhcnBvcnQ8bnI+IHwgdGltaWQgfCAwIH0KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vcGFycG9ydC50eHQuCiAKLQlwbXRtcj0JCVtYODZdIE1hbnVhbCBzZXR1cCBvZiBwbXRtciBJL08gUG9ydC4gCisJcG10bXI9CQlbWDg2XSBNYW51YWwgc2V0dXAgb2YgcG10bXIgSS9PIFBvcnQuCiAJCQlPdmVycmlkZSBwbXRpbWVyIElPUG9ydCB3aXRoIGEgaGV4IHZhbHVlLgogCQkJZS5nLiBwbXRtcj0weDUwOAogCi0JcG5wLmRlYnVnCVtQTlBdCi0JCQlFbmFibGUgUE5QIGRlYnVnIG1lc3NhZ2VzLiAgVGhpcyBkZXBlbmRzIG9uIHRoZQotCQkJQ09ORklHX1BOUF9ERUJVR19NRVNTQUdFUyBvcHRpb24uCisJcG5wLmRlYnVnPTEJW1BOUF0KKwkJCUVuYWJsZSBQTlAgZGVidWcgbWVzc2FnZXMgKGRlcGVuZHMgb24gdGhlCisJCQlDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIG9wdGlvbikuICBDaGFuZ2UgYXQgcnVuLXRpbWUKKwkJCXZpYSAvc3lzL21vZHVsZS9wbnAvcGFyYW1ldGVycy9kZWJ1Zy4gIFdlIGFsd2F5cyBzaG93CisJCQljdXJyZW50IHJlc291cmNlIHVzYWdlOyB0dXJuaW5nIHRoaXMgb24gYWxzbyBzaG93cworCQkJcG9zc2libGUgc2V0dGluZ3MgYW5kIHNvbWUgYXNzaWdubWVudCBpbmZvcm1hdGlvbi4KIAogCXBucGFjcGk9CVtBQ1BJXQogCQkJeyBvZmYgfQpAQCAtMjE1Myw2ICsyMTY5LDggQEAKIAkJCVtIVyxNT1VTRV0gQ29udHJvbHMgTG9naXRlY2ggc21hcnRzY3JvbGwgYXV0b3JlcGVhdC4KIAkJCTAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQgKGRlZmF1bHQpLgogCisJcHN0b3JlLmJhY2tlbmQ9CVNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHBzdG9yZSBiYWNrZW5kIHRvIHVzZQorCiAJcHQuCQlbUEFSSURFXQogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2tkZXYvcGFyaWRlLnR4dC4KIApAQCAtMjIzOCw2ICsyMjU2LDcgQEAKIAlybwkJW0tOTF0gTW91bnQgcm9vdCBkZXZpY2UgcmVhZC1vbmx5IG9uIGJvb3QKIAogCXJvb3Q9CQlbS05MXSBSb290IGZpbGVzeXN0ZW0KKwkJCVNlZSBuYW1lX3RvX2Rldl90IGNvbW1lbnQgaW4gaW5pdC9kb19tb3VudHMuYy4KIAogCXJvb3RkZWxheT0JW0tOTF0gRGVsYXkgKGluIHNlY29uZHMpIHRvIHBhdXNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvCiAJCQltb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtCkBAIC0yNjI0LDYgKzI2NDMsMTYgQEAKIAkJCQkJbWVkaXVtIGlzIHdyaXRlLXByb3RlY3RlZCkuCiAJCQlFeGFtcGxlOiBxdWlya3M9MDQxOTphYWY1OnJsLDA0MjE6MDQzMzpyYwogCisJdXNlcl9kZWJ1Zz0JW0tOTCxBUk1dCisJCQlGb3JtYXQ6IDxpbnQ+CisJCQlTZWUgYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBoZWxwIHRleHQuCisJCQkJIDEgLSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gZXZlbnRzCisJCQkJIDIgLSBzeXN0ZW0gY2FsbHMKKwkJCQkgNCAtIGludmFsaWQgZGF0YSBhYm9ydHMKKwkJCQkgOCAtIFNJR1NFR1YgZmF1bHRzCisJCQkJMTYgLSBTSUdCVVMgZmF1bHRzCisJCQlFeGFtcGxlOiB1c2VyX2RlYnVnPTMxCisKIAl1c2VycHRlPQogCQkJW1g4Nl0gRmxhZ3MgY29udHJvbGxpbmcgdXNlciBQVEUgYWxsb2NhdGlvbnMuCiAKQEAgLTI2NjksNiArMjY5OCwyNyBAQAogCXZtcG9mZj0JCVtLTkwsUzM5MF0gUGVyZm9ybSB6L1ZNIENQIGNvbW1hbmQgYWZ0ZXIgcG93ZXIgb2ZmLgogCQkJRm9ybWF0OiA8Y29tbWFuZD4KIAorCXZzeXNjYWxsPQlbWDg2LTY0XQorCQkJQ29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHZzeXNjYWxscyAoaS5lLiBjYWxscyB0bworCQkJZml4ZWQgYWRkcmVzc2VzIG9mIDB4ZmZmZmZmZmZmZjYwMHgwMCBmcm9tIGxlZ2FjeQorCQkJY29kZSkuICBNb3N0IHN0YXRpY2FsbHktbGlua2VkIGJpbmFyaWVzIGFuZCBvbGRlcgorCQkJdmVyc2lvbnMgb2YgZ2xpYmMgdXNlIHRoZXNlIGNhbGxzLiAgQmVjYXVzZSB0aGVzZQorCQkJZnVuY3Rpb25zIGFyZSBhdCBmaXhlZCBhZGRyZXNzZXMsIHRoZXkgbWFrZSBuaWNlCisJCQl0YXJnZXRzIGZvciBleHBsb2l0cyB0aGF0IGNhbiBjb250cm9sIFJJUC4KKworCQkJZW11bGF0ZSAgICAgW2RlZmF1bHRdIFZzeXNjYWxscyB0dXJuIGludG8gdHJhcHMgYW5kIGFyZQorCQkJICAgICAgICAgICAgZW11bGF0ZWQgcmVhc29uYWJseSBzYWZlbHkuCisKKwkJCW5hdGl2ZSAgICAgIFZzeXNjYWxscyBhcmUgbmF0aXZlIHN5c2NhbGwgaW5zdHJ1Y3Rpb25zLgorCQkJICAgICAgICAgICAgVGhpcyBpcyBhIGxpdHRsZSBiaXQgZmFzdGVyIHRoYW4gdHJhcHBpbmcKKwkJCSAgICAgICAgICAgIGFuZCBtYWtlcyBhIGZldyBkeW5hbWljIHJlY29tcGlsZXJzIHdvcmsKKwkJCSAgICAgICAgICAgIGJldHRlciB0aGFuIHRoZXkgd291bGQgaW4gZW11bGF0aW9uIG1vZGUuCisJCQkgICAgICAgICAgICBJdCBhbHNvIG1ha2VzIGV4cGxvaXRzIG11Y2ggZWFzaWVyIHRvIHdyaXRlLgorCisJCQlub25lICAgICAgICBWc3lzY2FsbHMgZG9uJ3Qgd29yayBhdCBhbGwuICBUaGlzIG1ha2VzCisJCQkgICAgICAgICAgICB0aGVtIHF1aXRlIGhhcmQgdG8gdXNlIGZvciBleHBsb2l0cyBidXQKKwkJCSAgICAgICAgICAgIG1pZ2h0IGJyZWFrIHlvdXIgc3lzdGVtLgorCiAJdnQuY3VyX2RlZmF1bHQ9CVtWVF0gRGVmYXVsdCBjdXJzb3Igc2hhcGUuCiAJCQlGb3JtYXQ6IDB4Q0NCQkFBLCB3aGVyZSBBQSwgQkIsIGFuZCBDQyBhcmUgdGhlIHNhbWUgYXMKIAkJCXRoZSBwYXJhbWV0ZXJzIG9mIHRoZSA8RXNjPls/QTtCO0NjIGVzY2FwZSBzZXF1ZW5jZTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL202OGsva2VybmVsLW9wdGlvbnMudHh0CmluZGV4IGM5M2JlZDYuLjk3ZDQ1ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dApAQCAtMTI5LDYgKzEyOSwyMCBAQAogdGhlIGZpcnN0IG9mIHRoZXNlLiBZb3UgY2FuIGZpbmQgb3V0IGFsbCB2YWxpZCBtYWpvciBudW1iZXJzIGJ5CiBsb29raW5nIGludG8gaW5jbHVkZS9saW51eC9tYWpvci5oLgogCitJbiBhZGRpdGlvbiB0byBtYWpvciBhbmQgbWlub3IgbnVtYmVycywgaWYgdGhlIGRldmljZSBjb250YWluaW5nIHlvdXIKK3Jvb3QgcGFydGl0aW9uIHVzZXMgYSBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHdpdGggdW5pcXVlIHBhcnRpdGlvbgoraWRlbnRpZmllcnMsIHRoZW4geW91IG1heSB1c2UgdGhlbS4gIEZvciBpbnN0YW5jZSwKKyJyb290PVBBUlRVVUlEPTAwMTEyMjMzLTQ0NTUtNjY3Ny04ODk5LUFBQkJDQ0RERUVGRiIuICBJdCBpcyBhbHNvCitwb3NzaWJsZSB0byByZWZlcmVuY2UgYW5vdGhlciBwYXJ0aXRpb24gb24gdGhlIHNhbWUgZGV2aWNlIHVzaW5nIGEKK2tub3duIHBhcnRpdGlvbiBVVUlEIGFzIHRoZSBzdGFydGluZyBwb2ludC4gIEZvciBleGFtcGxlLAoraWYgcGFydGl0aW9uIDUgb2YgdGhlIGRldmljZSBoYXMgdGhlIFVVSUQgb2YKKzAwMTEyMjMzLTQ0NTUtNjY3Ny04ODk5LUFBQkJDQ0RERUVGRiB0aGVuIHBhcnRpdGlvbiAzIG1heSBiZSBmb3VuZCBhcworZm9sbG93czoKKyAgUEFSVFVVSUQ9MDAxMTIyMzMtNDQ1NS02Njc3LTg4OTktQUFCQkNDRERFRUZGL1BBUlROUk9GRj0tMgorCitBdXRob3JpdGF0aXZlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbgorIkRvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0Ii4KKwogCiAyLjIpIHJvLCBydwogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVkaWEtZnJhbWV3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vbWVkaWEtZnJhbWV3b3JrLnR4dAppbmRleCA3NmEyMDg3Li42NjliNWZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lZGlhLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZWRpYS1mcmFtZXdvcmsudHh0CkBAIC0zMTAsNyArMzEwLDcgQEAKIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGJlIGFwcGxpZWQgbGF0ZXIuCiAKIExpbmsgY29uZmlndXJhdGlvbiBtdXN0IG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCBvbiBvdGhlciBsaW5rcy4gSWYgYW4gZW5hYmxlZAotbGluayBhdCBhIHNpbmsgcGFkIHByZXZlbnRzIGFub3RoZXIgbGluayBhdCB0aGUgc2FtZSBwYWQgZnJvbSBiZWluZyBkaXNhYmxlZCwKK2xpbmsgYXQgYSBzaW5rIHBhZCBwcmV2ZW50cyBhbm90aGVyIGxpbmsgYXQgdGhlIHNhbWUgcGFkIGZyb20gYmVpbmcgZW5hYmxlZCwKIHRoZSBsaW5rX3NldHVwIG9wZXJhdGlvbiBtdXN0IHJldHVybiAtRUJVU1kgYW5kIGNhbid0IGltcGxpY2l0bHkgZGlzYWJsZSB0aGUKIGZpcnN0IGVuYWJsZWQgbGluay4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCmluZGV4IDRlZGQ3OGQuLmJiY2UxMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKQEAgLTEsMTMgKzEsMjEgQEAKIDAwLUlOREVYCiAJLSB0aGlzIGZpbGUKKzNjMzU5LnR4dAorCS0gaW5mb3JtYXRpb24gb24gdGhlIDNDb20gVG9rZW5MaW5rIFZlbG9jaXR5IFhMICgzYzUzNTkpIGRyaXZlci4KIDNjNTA1LnR4dAogCS0gaW5mb3JtYXRpb24gb24gdGhlIDNDb20gRXRoZXJMaW5rIFBsdXMgKDNjNTA1KSBkcml2ZXIuCiszYzUwOS50eHQKKwktIGluZm9ybWF0aW9uIG9uIHRoZSAzQ29tIEV0aGVybGluayBJSUkgU2VyaWVzIEV0aGVybmV0IGNhcmRzLgogNnBhY2sudHh0CiAJLSBpbmZvIG9uIHRoZSA2cGFjayBwcm90b2NvbCwgYW4gYWx0ZXJuYXRpdmUgdG8gS0lTUyBmb3IgQVguMjUKIERMSU5LLnR4dAogCS0gaW5mbyBvbiB0aGUgRC1MaW5rIERFLTYwMC9ERS02MjAgcGFyYWxsZWwgcG9ydCBwb2NrZXQgYWRhcHRlcnMKIFBMSVAudHh0CiAJLSBQTElQOiBUaGUgUGFyYWxsZWwgTGluZSBJbnRlcm5ldCBQcm90b2NvbCBkZXZpY2UgZHJpdmVyCitSRUFETUUuaXB3MjEwMAorCS0gUkVBRE1FIGZvciB0aGUgSW50ZWwgUFJPL1dpcmVsZXNzIDIxMDAgZHJpdmVyLgorUkVBRE1FLmlwdzIyMDAKKwktIFJFQURNRSBmb3IgdGhlIEludGVsIFBSTy9XaXJlbGVzcyAyOTE1QUJHIGFuZCAyMjAwQkcgZHJpdmVyLgogUkVBRE1FLnNiMTAwMAogCS0gaW5mbyBvbiBHZW5lcmFsIEluc3RydW1lbnQvTmV4dExldmVsIFNVUkZib2FyZDEwMDAgY2FibGUgbW9kZW0uCiBhbGlhcy50eHQKQEAgLTIwLDggKzI4LDEyIEBACiAJLSBpbmZvIG9uIHdoZXJlIHRvIGdldCBBVE0gcHJvZ3JhbXMgYW5kIHN1cHBvcnQgZm9yIExpbnV4LgogYXgyNS50eHQKIAktIGluZm8gb24gdXNpbmcgQVguMjUgYW5kIE5FVC9ST00gY29kZSBmb3IgTGludXgKK2JhdG1hbi1hZHYudHh0CisJLSBCLkEuVC5NLkEuTiByb3V0aW5nIHByb3RvY29sIG9uIHRvcCBvZiBsYXllciAyIEV0aGVybmV0IEZyYW1lcy4KIGJheWNvbS50eHQKIAktIGluZm8gb24gdGhlIGRyaXZlciBmb3IgQmF5Y29tIHN0eWxlIGFtYXRldXIgcmFkaW8gbW9kZW1zCitib25kaW5nLnR4dAorCS0gTGludXggRXRoZXJuZXQgQm9uZGluZyBEcml2ZXIgSE9XVE86IGxpbmsgYWdncmVnYXRpb24gaW4gTGludXguCiBicmlkZ2UudHh0CiAJLSB3aGVyZSB0byBnZXQgdXNlciBzcGFjZSBwcm9ncmFtcyBmb3IgZXRoZXJuZXQgYnJpZGdpbmcgd2l0aCBMaW51eC4KIGNhbi50eHQKQEAgLTM0LDMyICs0Niw2MCBAQAogCS0gQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBBRFNMIE1vZGVtCiBjeGFjcnUtY2YucHkKIAktIENvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0IgQURTTCBNb2RlbSBjb25maWd1cmF0aW9uIGZpbGUgcGFyc2VyCitjeGdiLnR4dAorCS0gUmVsZWFzZSBOb3RlcyBmb3IgdGhlIENoZWxzaW8gTjIxMCBMaW51eCBkZXZpY2UgZHJpdmVyLgorZGNjcC50eHQKKwktIHRoZSBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wgKERDQ1ApIChSRkMgNDM0MC4uNDIpLgogZGU0eDUudHh0CiAJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIERFND8/IGFuZCBERTU/PyBQQ0kgRXRoZXJuZXQgZHJpdmVyCiBkZWNuZXQudHh0CiAJLSBpbmZvIG9uIHVzaW5nIHRoZSBERUNuZXQgbmV0d29ya2luZyBsYXllciBpbiBMaW51eC4KIGRlcGNhLnR4dAogCS0gdGhlIERpZ2l0YWwgREVQQ0EvRXRoZXJXT1JLUyBERTE/PyBhbmQgREUyPz8gTEFOQ0UgRXRoZXJuZXQgZHJpdmVyCitkbDJrLnR4dAorCS0gUkVBRE1FIGZvciBELUxpbmsgREwyMDAwLWJhc2VkIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnMgKGRsMmsua28pLgorZG05MDAwLnR4dAorCS0gUkVBRE1FIGZvciB0aGUgU2ltdGVjIERNOTAwMCBOZXR3b3JrIGRyaXZlci4KIGRtZmUudHh0CiAJLSBpbmZvIG9uIHRoZSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyLgorZG5zX3Jlc29sdmVyLnR4dAorCS0gVGhlIEROUyByZXNvbHZlciBtb2R1bGUgYWxsb3dzIGtlcm5lbCBzZXJ2aWVzIHRvIG1ha2UgRE5TIHF1ZXJpZXMuCitkcml2ZXIudHh0CisJLSBTb2Z0bmV0IGRyaXZlciBpc3N1ZXMuCiBlMTAwLnR4dAogCS0gaW5mbyBvbiBJbnRlbCdzIEV0aGVyRXhwcmVzcyBQUk8vMTAwIGxpbmUgb2YgMTAvMTAwIGJvYXJkcwogZTEwMDAudHh0CiAJLSBpbmZvIG9uIEludGVsJ3MgRTEwMDAgbGluZSBvZiBnaWdhYml0IGV0aGVybmV0IGJvYXJkcworZTEwMDBlLnR4dAorCS0gUkVBRE1FIGZvciB0aGUgSW50ZWwgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgKGUxMDAwZSkuCiBlcWwudHh0CiAJLSBzZXJpYWwgSVAgbG9hZCBiYWxhbmNpbmcKIGV3cmszLnR4dAogCS0gdGhlIERpZ2l0YWwgRXRoZXJXT1JLUyAzIERFMjAzLzQvNSBFdGhlcm5ldCBkcml2ZXIKK2ZpYl90cmllLnR4dAorCS0gTGV2ZWwgQ29tcHJlc3NlZCBUcmllIChMQy10cmllKSBub3RlczogYSBzdHJ1Y3R1cmUgZm9yIHJvdXRpbmcuCiBmaWx0ZXIudHh0CiAJLSBMaW51eCBTb2NrZXQgRmlsdGVyaW5nCiBmb3JlMjAwZS50eHQKIAktIEZPUkUgU3lzdGVtcyBQQ0EtMjAwRS9TQkEtMjAwRSBBVE0gTklDIGRyaXZlciBpbmZvLgogZnJhbWVyZWxheS50eHQKIAktIGluZm8gb24gdXNpbmcgRnJhbWUgUmVsYXkvRGF0YSBMaW5rIENvbm5lY3Rpb24gSWRlbnRpZmllciAoRExDSSkuCitnZW5fc3RhdHMudHh0CisJLSBHZW5lcmljIG5ldHdvcmtpbmcgc3RhdGlzdGljcyBmb3IgbmV0bGluayB1c2Vycy4KK2dlbmVyaWNfaGRsYy50eHQKKwktIFRoZSBnZW5lcmljIEhpZ2ggTGV2ZWwgRGF0YSBMaW5rIENvbnRyb2wgKEhETEMpIGxheWVyLgogZ2VuZXJpY19uZXRsaW5rLnR4dAogCS0gaW5mbyBvbiBHZW5lcmljIE5ldGxpbmsKK2dpYW5mYXIudHh0CisJLSBHaWFuZmFyIEV0aGVybmV0IERyaXZlci4KIGllZWU4MDIxNTQudHh0CiAJLSBMaW51eCBJRUVFIDgwMi4xNS40IGltcGxlbWVudGF0aW9uLCBBUEkgYW5kIGRyaXZlcnMKK2lmZW5zbGF2ZS5jCisJLSBDb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIGZvciBwYXJhbGxlbCByb3V0aW5nIChib25kaW5nKS4KK2lnYi50eHQKKwktIFJFQURNRSBmb3IgdGhlIEludGVsIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyIChpZ2IpLgoraWdidmYudHh0CisJLSBSRUFETUUgZm9yIHRoZSBJbnRlbCBHaWdhYml0IEV0aGVybmV0IERyaXZlciAoaWdidmYpLgogaXAtc3lzY3RsLnR4dAogCS0gL3Byb2Mvc3lzL25ldC9pcHY0LyogdmFyaWFibGVzCiBpcF9keW5hZGRyLnR4dApAQCAtNjgsNDEgKzEwOCwxMTcgQEAKIAktIEFwcGxlVGFsay1JUCBEZWNhcHN1bGF0aW9uIGFuZCBBcHBsZVRhbGstSVAgRW5jYXBzdWxhdGlvbgogaXBoYXNlLnR4dAogCS0gSW50ZXJwaGFzZSBQQ0kgQVRNIChpKUNoaXAgSUEgTGludXggZHJpdmVyIGluZm8uCitpcHY2LnR4dAorCS0gT3B0aW9ucyB0byB0aGUgaXB2NiBrZXJuZWwgbW9kdWxlLgoraXB2cy1zeXNjdGwudHh0CisJLSBQZXItaW5vZGUgZXhwbGFuYXRpb24gb2YgdGhlIC9wcm9jL3N5cy9uZXQvaXB2NC92cyBpbnRlcmZhY2UuCiBpcmRhLnR4dAogCS0gd2hlcmUgdG8gZ2V0IElyREEgKGluZnJhcmVkKSB1dGlsaXRpZXMgYW5kIGluZm8gZm9yIExpbnV4LgoraXhnYi50eHQKKwktIFJFQURNRSBmb3IgdGhlIEludGVsIDEwIEdpZ2FiaXQgRXRoZXJuZXQgRHJpdmVyIChpeGdiKS4KK2l4Z2JlLnR4dAorCS0gUkVBRE1FIGZvciB0aGUgSW50ZWwgMTAgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgKGl4Z2JlKS4KK2l4Z2JldmYudHh0CisJLSBSRUFETUUgZm9yIHRoZSBJbnRlbCBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgRHJpdmVyIChpeGdiZXZmKS4KK2wydHAudHh0CisJLSBVc2VyIGd1aWRlIHRvIHRoZSBMMlRQIHR1bm5lbCBwcm90b2NvbC4KIGxhcGItbW9kdWxlLnR4dAogCS0gcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIExBUEIgbW9kdWxlLgogbHRwYy50eHQKIAktIHRoZSBBcHBsZSBvciBGYXJhbGxvbiBMb2NhbFRhbGsgUEMgY2FyZCBkcml2ZXIKK21hYzgwMjExLWluamVjdGlvbi50eHQKKwktIEhPV1RPIHVzZSBwYWNrZXQgaW5qZWN0aW9uIHdpdGggbWFjODAyMTEKIG11bHRpY2FzdC50eHQKIAktIEJlaGF2aW91ciBvZiBjYXJkcyB1bmRlciBNdWx0aWNhc3QKK211bHRpcXVldWUudHh0CisJLSBIT1dUTyBmb3IgbXVsdGlxdWV1ZSBuZXR3b3JrIGRldmljZSBzdXBwb3J0LgorbmV0Y29uc29sZS50eHQKKwktIFRoZSBuZXR3b3JrIGNvbnNvbGUgbW9kdWxlIG5ldGNvbnNvbGUua286IGNvbmZpZ3VyYXRpb24gYW5kIG5vdGVzLgorbmV0ZGV2LWZlYXR1cmVzLnR4dAorCS0gTmV0d29yayBpbnRlcmZhY2UgZmVhdHVyZXMgQVBJIGRlc2NyaXB0aW9uLgogbmV0ZGV2aWNlcy50eHQKIAktIGluZm8gb24gbmV0d29yayBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9ucyBleHBvcnRlZCB0byB0aGUga2VybmVsLgorbmV0aWYtbXNnLnR4dAorCS0gRGVzaWduIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBtZXNzYWdlIGxldmVsIHNldHRpbmcgKE5FVElGX01TR18qKS4KK25mYy50eHQKKwktIFRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GUykgc3Vic3lzdGVtLgogb2x5bXBpYy50eHQKIAktIElCTSBQQ0kgUGl0L1BpdC1QaHkvT2x5bXBpYyBUb2tlbiBSaW5nIGRyaXZlciBpbmZvLgorb3BlcnN0YXRlcy50eHQKKwktIE92ZXJ2aWV3IG9mIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbmFsIHN0YXRlcy4KK3BhY2tldF9tbWFwLnR4dAorCS0gVXNlciBndWlkZSB0byBtZW1vcnkgbWFwcGVkIHBhY2tldCBzb2NrZXQgcmluZ3MgKFBBQ0tFVF9bUlRdWF9SSU5HKS4KK3Bob25ldC50eHQKKwktIFRoZSBQaG9uZXQgcGFja2V0IHByb3RvY29sIHVzZWQgaW4gTm9raWEgY2VsbHVsYXIgbW9kZW1zLgorcGh5LnR4dAorCS0gVGhlIFBIWSBhYnN0cmFjdGlvbiBsYXllci4KK3BrdGdlbi50eHQKKwktIFVzZXIgZ3VpZGUgdG8gdGhlIGtlcm5lbCBwYWNrZXQgZ2VuZXJhdG9yIChwa3RnZW4ua28pLgogcG9saWN5LXJvdXRpbmcudHh0CiAJLSBJUCBwb2xpY3ktYmFzZWQgcm91dGluZworcHBwX2dlbmVyaWMudHh0CisJLSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2VuZXJpYyBQUFAgZHJpdmVyLgorcHJvY19uZXRfdGNwLnR4dAorCS0gUGVyIGlub2RlIG92ZXJ2aWV3IG9mIHRoZSAvcHJvYy9uZXQvdGNwIGFuZCAvcHJvYy9uZXQvdGNwNiBpbnRlcmZhY2VzLgorcmFkaW90YXAtaGVhZGVycy50eHQKKwktIEJhY2tncm91bmQgb24gcmFkaW90YXAgaGVhZGVycy4KIHJheV9jcy50eHQKIAktIFJheWxpbmsgV2lyZWxlc3MgTEFOIGNhcmQgZHJpdmVyIGluZm8uCityZHMudHh0CisJLSBCYWNrZ3JvdW5kIG9uIHRoZSByZWxpYWJsZSwgb3JkZXJlZCBkYXRhZ3JhbSBkZWxpdmVyeSBtZXRob2QgUkRTLgorcmVndWxhdG9yeS50eHQKKwktIE92ZXJ2aWV3IG9mIHRoZSBMaW51eCB3aXJlbGVzcyByZWd1bGF0b3J5IGluZnJhc3RydWN0dXJlLgorcnhycGMudHh0CisJLSBHdWlkZSB0byB0aGUgUnhSUEMgcHJvdG9jb2wuCitzMmlvLnR4dAorCS0gUmVsZWFzZSBub3RlcyBmb3IgTmV0ZXJpb24gWGZyYW1lIEkvSUkgMTBHYkUgZHJpdmVyLgorc2NhbGluZy50eHQKKwktIEV4cGxhbmF0aW9uIG9mIG5ldHdvcmsgc2NhbGluZyB0ZWNobmlxdWVzOiBSU1MsIFJQUywgUkZTLCBhUkZTLCBYUFMuCitzY3RwLnR4dAorCS0gTm90ZXMgb24gdGhlIExpbnV4IGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU0NUUCBwcm90b2NvbC4KK3NlY2lkLnR4dAorCS0gRXhwbGFuYXRpb24gb2YgdGhlIHNlY2lkIG1lbWJlciBpbiBmbG93IHN0cnVjdHVyZXMuCiBza2ZwLnR4dAogCS0gU3lzS29ubmVjdCBGRERJIChTSy01eHh4LCBDb21wYXEgTmV0ZWxsaWdlbnQpIGRyaXZlciBpbmZvLgogc21jOS50eHQKIAktIHRoZSBkcml2ZXIgZm9yIFNNQydzIDkwMDAgc2VyaWVzIG9mIEV0aGVybmV0IGNhcmRzCiBzbWN0ci50eHQKIAktIFNNQyBUb2tlbkNhcmQgVG9rZW5SaW5nIExpbnV4IGRyaXZlciBpbmZvLgorc3BpZGVyLW5ldC50eHQKKwktIFJFQURNRSBmb3IgdGhlIFNwaWRlcm5ldCBEcml2ZXIgKGFzIGZvdW5kIGluIFBTMyAvIENlbGwgQkUpLgorc3RtbWFjLnR4dAorCS0gUkVBRE1FIGZvciB0aGUgU1RNaWNybyBTeW5vcHN5cyBFdGhlcm5ldCBkcml2ZXIuCit0Yy1hY3Rpb25zLWVudi1ydWxlcy50eHQKKwktIHJ1bGVzIGZvciB0cmFmZmljIGNvbnRyb2wgKHRjKSBhY3Rpb25zLgordGltZXN0YW1waW5nLnR4dAorCS0gb3ZlcnZpZXcgb2YgbmV0d29yayBwYWNrZXQgdGltZXN0YW1waW5nIHZhcmlhbnRzLgogdGNwLnR4dAogCS0gc2hvcnQgYmx1cmIgb24gaG93IFRDUCBvdXRwdXQgdGFrZXMgcGxhY2UuCit0Y3AtdGhpbi50eHQKKwktIGtlcm5lbCB0dW5pbmcgb3B0aW9ucyBmb3IgbG93IHJhdGUgJ3RoaW4nIFRDUCBzdHJlYW1zLgogdGxhbi50eHQKIAktIFRodW5kZXJMQU4gKENvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAsIE9saWNvbSBPQy0yeHh4KSBkcml2ZXIgaW5mby4KIHRtczM4MHRyLnR4dAogCS0gU3lzS29ubmVjdCBUb2tlbiBSaW5nIElTQS9QQ0kgYWRhcHRlciBkcml2ZXIgaW5mby4KK3Rwcm94eS50eHQKKwktIFRyYW5zcGFyZW50IHByb3h5IHN1cHBvcnQgdXNlciBndWlkZS4KIHR1bnRhcC50eHQKIAktIFRVTi9UQVAgZGV2aWNlIGRyaXZlciwgYWxsb3dpbmcgdXNlciBzcGFjZSBSeC9UeCBvZiBwYWNrZXRzLgordWRwbGl0ZS50eHQKKwktIFVEUC1MaXRlIHByb3RvY29sIChSRkMgMzgyOCkgaW50cm9kdWN0aW9uLgogdm9ydGV4LnR4dAogCS0gaW5mbyBvbiB1c2luZyAzQ29tIFZvcnRleCAoM2M1OTAsIDNjNTkyLCAzYzU5NSwgM2M1OTcpIEV0aGVybmV0IGNhcmRzLgordnhnZS50eHQKKwktIFJFQURNRSBmb3IgdGhlIE5ldGVyaW9uIFgzMTAwIFBDSWUgU2VydmVyIEFkYXB0ZXIuCiB4MjUudHh0CiAJLSBnZW5lcmFsIGluZm8gb24gWC4yNSBkZXZlbG9wbWVudC4KIHgyNS1pZmFjZS50eHQKIAktIGRlc2NyaXB0aW9uIG9mIHRoZSBYLjI1IFBhY2tldCBMYXllciB0byBMQVBCIGRldmljZSBpbnRlcmZhY2UuCit4ZnJtX3Byb2MudHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdGlzdGljcyBwYWNrYWdlIGZvciBYRlJNLgoreGZybV9zeW5jLnR4dAorCS0gc3luYyBwYXRjaGVzIGZvciBYRlJNIGVuYWJsZSBtaWdyYXRpb24gb2YgYW4gU0EgYmV0d2VlbiBob3N0cy4KK3hmcm1fc3lzY3RsLnR4dAorCS0gZGVzY3JpcHRpb24gb2YgdGhlIFhGUk0gY29uZmlndXJhdGlvbiBvcHRpb25zLgogejg1MzBkcnYudHh0CiAJLSBpbmZvIGFib3V0IExpbnV4IGRyaXZlciBmb3IgWjg1MzAgYmFzZWQgSERMQyBjYXJkcyBmb3IgQVguMjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCA2NzU2MTJmLi45MWRmNjc4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CkBAIC0yMzgsNiArMjM4LDE4IEBACiAKIAlUaGlzIG9wdGlvbiB3YXMgYWRkZWQgaW4gYm9uZGluZyB2ZXJzaW9uIDMuNC4wLgogCithbGxfc2xhdmVzX2FjdGl2ZQorCisJU3BlY2lmaWVzIHRoYXQgZHVwbGljYXRlIGZyYW1lcyAocmVjZWl2ZWQgb24gaW5hY3RpdmUgcG9ydHMpIHNob3VsZCBiZQorCWRyb3BwZWQgKDApIG9yIGRlbGl2ZXJlZCAoMSkuCisKKwlOb3JtYWxseSwgYm9uZGluZyB3aWxsIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAocmVjZWl2ZWQgb24gaW5hY3RpdmUKKwlwb3J0cyksIHdoaWNoIGlzIGRlc2lyYWJsZSBmb3IgbW9zdCB1c2Vycy4gQnV0IHRoZXJlIGFyZSBzb21lIHRpbWVzCisJaXQgaXMgbmljZSB0byBhbGxvdyBkdXBsaWNhdGUgZnJhbWVzIHRvIGJlIGRlbGl2ZXJlZC4KKworCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDAgKGRyb3AgZHVwbGljYXRlIGZyYW1lcyByZWNlaXZlZCBvbiBpbmFjdGl2ZQorCXBvcnRzKS4KKwogYXJwX2ludGVydmFsCiAKIAlTcGVjaWZpZXMgdGhlIEFSUCBsaW5rIG1vbml0b3JpbmcgZnJlcXVlbmN5IGluIG1pbGxpc2Vjb25kcy4KQEAgLTQzMyw2ICs0NDUsMjMgQEAKIAlkZXRlcm1pbmVkLiAgU2VlIHRoZSBIaWdoIEF2YWlsYWJpbGl0eSBzZWN0aW9uIGZvciBhZGRpdGlvbmFsCiAJaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLgogCittaW5fbGlua3MKKworCVNwZWNpZmllcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbGlua3MgdGhhdCBtdXN0IGJlIGFjdGl2ZSBiZWZvcmUKKwlhc3NlcnRpbmcgY2Fycmllci4gSXQgaXMgc2ltaWxhciB0byB0aGUgQ2lzY28gRXRoZXJDaGFubmVsIG1pbi1saW5rcworCWZlYXR1cmUuIFRoaXMgYWxsb3dzIHNldHRpbmcgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1lbWJlciBwb3J0cyB0aGF0CisJbXVzdCBiZSB1cCAobGluay11cCBzdGF0ZSkgYmVmb3JlIG1hcmtpbmcgdGhlIGJvbmQgZGV2aWNlIGFzIHVwCisJKGNhcnJpZXIgb24pLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2l0dWF0aW9ucyB3aGVyZSBoaWdoZXIgbGV2ZWwgc2VydmljZXMKKwlzdWNoIGFzIGNsdXN0ZXJpbmcgd2FudCB0byBlbnN1cmUgYSBtaW5pbXVtIG51bWJlciBvZiBsb3cgYmFuZHdpZHRoCisJbGlua3MgYXJlIGFjdGl2ZSBiZWZvcmUgc3dpdGNob3Zlci4gVGhpcyBvcHRpb24gb25seSBhZmZlY3QgODAyLjNhZAorCW1vZGUuCisKKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLiBUaGlzIHdpbGwgY2F1c2UgY2FycmllciB0byBiZSBhc3NlcnRlZCAoZm9yCisJODAyLjNhZCBtb2RlKSB3aGVuZXZlciB0aGVyZSBpcyBhbiBhY3RpdmUgYWdncmVnYXRvciwgcmVnYXJkbGVzcyBvZiB0aGUKKwludW1iZXIgb2YgYXZhaWxhYmxlIGxpbmtzIGluIHRoYXQgYWdncmVnYXRvci4gTm90ZSB0aGF0LCBiZWNhdXNlIGFuCisJYWdncmVnYXRvciBjYW5ub3QgYmUgYWN0aXZlIHdpdGhvdXQgYXQgbGVhc3Qgb25lIGF2YWlsYWJsZSBsaW5rLAorCXNldHRpbmcgdGhpcyBvcHRpb24gdG8gMCBvciB0byAxIGhhcyB0aGUgZXhhY3Qgc2FtZSBlZmZlY3QuCisKIG1vZGUKIAogCVNwZWNpZmllcyBvbmUgb2YgdGhlIGJvbmRpbmcgcG9saWNpZXMuIFRoZSBkZWZhdWx0IGlzCkBAIC01OTksNyArNjI4LDcgQEAKIAlhZmZlY3Qgb25seSB0aGUgYWN0aXZlLWJhY2t1cCBtb2RlLiAgVGhlc2Ugb3B0aW9ucyB3ZXJlIGFkZGVkIGZvcgogCWJvbmRpbmcgdmVyc2lvbnMgMy4zLjAgYW5kIDMuNC4wIHJlc3BlY3RpdmVseS4KIAotCUZyb20gTGludXggMi42LjQwIGFuZCBib25kaW5nIHZlcnNpb24gMy43LjEsIHRoZXNlIG5vdGlmaWNhdGlvbnMKKwlGcm9tIExpbnV4IDMuMCBhbmQgYm9uZGluZyB2ZXJzaW9uIDMuNy4xLCB0aGVzZSBub3RpZmljYXRpb25zCiAJYXJlIGdlbmVyYXRlZCBieSB0aGUgaXB2NCBhbmQgaXB2NiBjb2RlIGFuZCB0aGUgbnVtYmVycyBvZgogCXJlcGV0aXRpb25zIGNhbm5vdCBiZSBzZXQgaW5kZXBlbmRlbnRseS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCBkYjJhNDA2Li44MTU0Njk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtOTkyLDcgKzk5Miw3IEBACiAJCVRSVUU6IGRpc2FibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCiAJCUZBTFNFOiBlbmFibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCiAKLQlEZWZhdWx0OiBGQUxTRSAoYXMgc3BlY2lmaWVkIGluIFJGQzI1NTNiaXMpCisJRGVmYXVsdDogRkFMU0UgKGFzIHNwZWNpZmllZCBpbiBSRkMzNDkzKQogCiBJUHY2IEZyYWdtZW50YXRpb246CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY2FsaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY2FsaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGZkNzQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NjYWxpbmcudHh0CkBAIC0wLDAgKzEsMzc4IEBACitTY2FsaW5nIGluIHRoZSBMaW51eCBOZXR3b3JraW5nIFN0YWNrCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBzZXQgb2YgY29tcGxlbWVudGFyeSB0ZWNobmlxdWVzIGluIHRoZSBMaW51eAorbmV0d29ya2luZyBzdGFjayB0byBpbmNyZWFzZSBwYXJhbGxlbGlzbSBhbmQgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IKK211bHRpLXByb2Nlc3NvciBzeXN0ZW1zLgorCitUaGUgZm9sbG93aW5nIHRlY2hub2xvZ2llcyBhcmUgZGVzY3JpYmVkOgorCisgIFJTUzogUmVjZWl2ZSBTaWRlIFNjYWxpbmcKKyAgUlBTOiBSZWNlaXZlIFBhY2tldCBTdGVlcmluZworICBSRlM6IFJlY2VpdmUgRmxvdyBTdGVlcmluZworICBBY2NlbGVyYXRlZCBSZWNlaXZlIEZsb3cgU3RlZXJpbmcKKyAgWFBTOiBUcmFuc21pdCBQYWNrZXQgU3RlZXJpbmcKKworCitSU1M6IFJlY2VpdmUgU2lkZSBTY2FsaW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbXBvcmFyeSBOSUNzIHN1cHBvcnQgbXVsdGlwbGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvciBxdWV1ZXMKKyhtdWx0aS1xdWV1ZSkuIE9uIHJlY2VwdGlvbiwgYSBOSUMgY2FuIHNlbmQgZGlmZmVyZW50IHBhY2tldHMgdG8gZGlmZmVyZW50CitxdWV1ZXMgdG8gZGlzdHJpYnV0ZSBwcm9jZXNzaW5nIGFtb25nIENQVXMuIFRoZSBOSUMgZGlzdHJpYnV0ZXMgcGFja2V0cyBieQorYXBwbHlpbmcgYSBmaWx0ZXIgdG8gZWFjaCBwYWNrZXQgdGhhdCBhc3NpZ25zIGl0IHRvIG9uZSBvZiBhIHNtYWxsIG51bWJlcgorb2YgbG9naWNhbCBmbG93cy4gUGFja2V0cyBmb3IgZWFjaCBmbG93IGFyZSBzdGVlcmVkIHRvIGEgc2VwYXJhdGUgcmVjZWl2ZQorcXVldWUsIHdoaWNoIGluIHR1cm4gY2FuIGJlIHByb2Nlc3NlZCBieSBzZXBhcmF0ZSBDUFVzLiBUaGlzIG1lY2hhbmlzbSBpcworZ2VuZXJhbGx5IGtub3duIGFzIOKAnFJlY2VpdmUtc2lkZSBTY2FsaW5n4oCdIChSU1MpLiBUaGUgZ29hbCBvZiBSU1MgYW5kCit0aGUgb3RoZXIgc2NhbGluZyB0ZWNobmlxdWVzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIHVuaWZvcm1seS4KK011bHRpLXF1ZXVlIGRpc3RyaWJ1dGlvbiBjYW4gYWxzbyBiZSB1c2VkIGZvciB0cmFmZmljIHByaW9yaXRpemF0aW9uLCBidXQKK3RoYXQgaXMgbm90IHRoZSBmb2N1cyBvZiB0aGVzZSB0ZWNobmlxdWVzLgorCitUaGUgZmlsdGVyIHVzZWQgaW4gUlNTIGlzIHR5cGljYWxseSBhIGhhc2ggZnVuY3Rpb24gb3ZlciB0aGUgbmV0d29yaworYW5kL29yIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzLS0gZm9yIGV4YW1wbGUsIGEgNC10dXBsZSBoYXNoIG92ZXIKK0lQIGFkZHJlc3NlcyBhbmQgVENQIHBvcnRzIG9mIGEgcGFja2V0LiBUaGUgbW9zdCBjb21tb24gaGFyZHdhcmUKK2ltcGxlbWVudGF0aW9uIG9mIFJTUyB1c2VzIGEgMTI4LWVudHJ5IGluZGlyZWN0aW9uIHRhYmxlIHdoZXJlIGVhY2ggZW50cnkKK3N0b3JlcyBhIHF1ZXVlIG51bWJlci4gVGhlIHJlY2VpdmUgcXVldWUgZm9yIGEgcGFja2V0IGlzIGRldGVybWluZWQKK2J5IG1hc2tpbmcgb3V0IHRoZSBsb3cgb3JkZXIgc2V2ZW4gYml0cyBvZiB0aGUgY29tcHV0ZWQgaGFzaCBmb3IgdGhlCitwYWNrZXQgKHVzdWFsbHkgYSBUb2VwbGl0eiBoYXNoKSwgdGFraW5nIHRoaXMgbnVtYmVyIGFzIGEga2V5IGludG8gdGhlCitpbmRpcmVjdGlvbiB0YWJsZSBhbmQgcmVhZGluZyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKworU29tZSBhZHZhbmNlZCBOSUNzIGFsbG93IHN0ZWVyaW5nIHBhY2tldHMgdG8gcXVldWVzIGJhc2VkIG9uCitwcm9ncmFtbWFibGUgZmlsdGVycy4gRm9yIGV4YW1wbGUsIHdlYnNlcnZlciBib3VuZCBUQ1AgcG9ydCA4MCBwYWNrZXRzCitjYW4gYmUgZGlyZWN0ZWQgdG8gdGhlaXIgb3duIHJlY2VpdmUgcXVldWUuIFN1Y2gg4oCcbi10dXBsZeKAnSBmaWx0ZXJzIGNhbgorYmUgY29uZmlndXJlZCBmcm9tIGV0aHRvb2wgKC0tY29uZmlnLW50dXBsZSkuCisKKz09PT0gUlNTIENvbmZpZ3VyYXRpb24KKworVGhlIGRyaXZlciBmb3IgYSBtdWx0aS1xdWV1ZSBjYXBhYmxlIE5JQyB0eXBpY2FsbHkgcHJvdmlkZXMgYSBrZXJuZWwKK21vZHVsZSBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgdG8KK2NvbmZpZ3VyZS4gSW4gdGhlIGJueDJ4IGRyaXZlciwgZm9yIGluc3RhbmNlLCB0aGlzIHBhcmFtZXRlciBpcyBjYWxsZWQKK251bV9xdWV1ZXMuIEEgdHlwaWNhbCBSU1MgY29uZmlndXJhdGlvbiB3b3VsZCBiZSB0byBoYXZlIG9uZSByZWNlaXZlIHF1ZXVlCitmb3IgZWFjaCBDUFUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBlbm91Z2ggcXVldWVzLCBvciBvdGhlcndpc2UgYXQgbGVhc3QKK29uZSBmb3IgZWFjaCBtZW1vcnkgZG9tYWluLCB3aGVyZSBhIG1lbW9yeSBkb21haW4gaXMgYSBzZXQgb2YgQ1BVcyB0aGF0CitzaGFyZSBhIHBhcnRpY3VsYXIgbWVtb3J5IGxldmVsIChMMSwgTDIsIE5VTUEgbm9kZSwgZXRjLikuCisKK1RoZSBpbmRpcmVjdGlvbiB0YWJsZSBvZiBhbiBSU1MgZGV2aWNlLCB3aGljaCByZXNvbHZlcyBhIHF1ZXVlIGJ5IG1hc2tlZAoraGFzaCwgaXMgdXN1YWxseSBwcm9ncmFtbWVkIGJ5IHRoZSBkcml2ZXIgYXQgaW5pdGlhbGl6YXRpb24uIFRoZQorZGVmYXVsdCBtYXBwaW5nIGlzIHRvIGRpc3RyaWJ1dGUgdGhlIHF1ZXVlcyBldmVubHkgaW4gdGhlIHRhYmxlLCBidXQgdGhlCitpbmRpcmVjdGlvbiB0YWJsZSBjYW4gYmUgcmV0cmlldmVkIGFuZCBtb2RpZmllZCBhdCBydW50aW1lIHVzaW5nIGV0aHRvb2wKK2NvbW1hbmRzICgtLXNob3ctcnhmaC1pbmRpciBhbmQgLS1zZXQtcnhmaC1pbmRpcikuIE1vZGlmeWluZyB0aGUKK2luZGlyZWN0aW9uIHRhYmxlIGNvdWxkIGJlIGRvbmUgdG8gZ2l2ZSBkaWZmZXJlbnQgcXVldWVzIGRpZmZlcmVudAorcmVsYXRpdmUgd2VpZ2h0cy4KKworPT0gUlNTIElSUSBDb25maWd1cmF0aW9uCisKK0VhY2ggcmVjZWl2ZSBxdWV1ZSBoYXMgYSBzZXBhcmF0ZSBJUlEgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGUgTklDIHRyaWdnZXJzCit0aGlzIHRvIG5vdGlmeSBhIENQVSB3aGVuIG5ldyBwYWNrZXRzIGFycml2ZSBvbiB0aGUgZ2l2ZW4gcXVldWUuIFRoZQorc2lnbmFsaW5nIHBhdGggZm9yIFBDSWUgZGV2aWNlcyB1c2VzIG1lc3NhZ2Ugc2lnbmFsZWQgaW50ZXJydXB0cyAoTVNJLVgpLAordGhhdCBjYW4gcm91dGUgZWFjaCBpbnRlcnJ1cHQgdG8gYSBwYXJ0aWN1bGFyIENQVS4gVGhlIGFjdGl2ZSBtYXBwaW5nCitvZiBxdWV1ZXMgdG8gSVJRcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIC9wcm9jL2ludGVycnVwdHMuIEJ5IGRlZmF1bHQsCithbiBJUlEgbWF5IGJlIGhhbmRsZWQgb24gYW55IENQVS4gQmVjYXVzZSBhIG5vbi1uZWdsaWdpYmxlIHBhcnQgb2YgcGFja2V0Citwcm9jZXNzaW5nIHRha2VzIHBsYWNlIGluIHJlY2VpdmUgaW50ZXJydXB0IGhhbmRsaW5nLCBpdCBpcyBhZHZhbnRhZ2VvdXMKK3RvIHNwcmVhZCByZWNlaXZlIGludGVycnVwdHMgYmV0d2VlbiBDUFVzLiBUbyBtYW51YWxseSBhZGp1c3QgdGhlIElSUQorYWZmaW5pdHkgb2YgZWFjaCBpbnRlcnJ1cHQgc2VlIERvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LiBTb21lIHN5c3RlbXMKK3dpbGwgYmUgcnVubmluZyBpcnFiYWxhbmNlLCBhIGRhZW1vbiB0aGF0IGR5bmFtaWNhbGx5IG9wdGltaXplcyBJUlEKK2Fzc2lnbm1lbnRzIGFuZCBhcyBhIHJlc3VsdCBtYXkgb3ZlcnJpZGUgYW55IG1hbnVhbCBzZXR0aW5ncy4KKworPT0gU3VnZ2VzdGVkIENvbmZpZ3VyYXRpb24KKworUlNTIHNob3VsZCBiZSBlbmFibGVkIHdoZW4gbGF0ZW5jeSBpcyBhIGNvbmNlcm4gb3Igd2hlbmV2ZXIgcmVjZWl2ZQoraW50ZXJydXB0IHByb2Nlc3NpbmcgZm9ybXMgYSBib3R0bGVuZWNrLiBTcHJlYWRpbmcgbG9hZCBiZXR3ZWVuIENQVXMKK2RlY3JlYXNlcyBxdWV1ZSBsZW5ndGguIEZvciBsb3cgbGF0ZW5jeSBuZXR3b3JraW5nLCB0aGUgb3B0aW1hbCBzZXR0aW5nCitpcyB0byBhbGxvY2F0ZSBhcyBtYW55IHF1ZXVlcyBhcyB0aGVyZSBhcmUgQ1BVcyBpbiB0aGUgc3lzdGVtIChvciB0aGUKK05JQyBtYXhpbXVtLCBpZiBsb3dlcikuIFRoZSBtb3N0IGVmZmljaWVudCBoaWdoLXJhdGUgY29uZmlndXJhdGlvbgoraXMgbGlrZWx5IHRoZSBvbmUgd2l0aCB0aGUgc21hbGxlc3QgbnVtYmVyIG9mIHJlY2VpdmUgcXVldWVzIHdoZXJlIG5vCityZWNlaXZlIHF1ZXVlIG92ZXJmbG93cyBkdWUgdG8gYSBzYXR1cmF0ZWQgQ1BVLCBiZWNhdXNlIGluIGRlZmF1bHQKK21vZGUgd2l0aCBpbnRlcnJ1cHQgY29hbGVzY2luZyBlbmFibGVkLCB0aGUgYWdncmVnYXRlIG51bWJlciBvZgoraW50ZXJydXB0cyAoYW5kIHRodXMgd29yaykgZ3Jvd3Mgd2l0aCBlYWNoIGFkZGl0aW9uYWwgcXVldWUuCisKK1Blci1jcHUgbG9hZCBjYW4gYmUgb2JzZXJ2ZWQgdXNpbmcgdGhlIG1wc3RhdCB1dGlsaXR5LCBidXQgbm90ZSB0aGF0IG9uCitwcm9jZXNzb3JzIHdpdGggaHlwZXJ0aHJlYWRpbmcgKEhUKSwgZWFjaCBoeXBlcnRocmVhZCBpcyByZXByZXNlbnRlZCBhcworYSBzZXBhcmF0ZSBDUFUuIEZvciBpbnRlcnJ1cHQgaGFuZGxpbmcsIEhUIGhhcyBzaG93biBubyBiZW5lZml0IGluCitpbml0aWFsIHRlc3RzLCBzbyBsaW1pdCB0aGUgbnVtYmVyIG9mIHF1ZXVlcyB0byB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcworaW4gdGhlIHN5c3RlbS4KKworCitSUFM6IFJlY2VpdmUgUGFja2V0IFN0ZWVyaW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlY2VpdmUgUGFja2V0IFN0ZWVyaW5nIChSUFMpIGlzIGxvZ2ljYWxseSBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mCitSU1MuIEJlaW5nIGluIHNvZnR3YXJlLCBpdCBpcyBuZWNlc3NhcmlseSBjYWxsZWQgbGF0ZXIgaW4gdGhlIGRhdGFwYXRoLgorV2hlcmVhcyBSU1Mgc2VsZWN0cyB0aGUgcXVldWUgYW5kIGhlbmNlIENQVSB0aGF0IHdpbGwgcnVuIHRoZSBoYXJkd2FyZQoraW50ZXJydXB0IGhhbmRsZXIsIFJQUyBzZWxlY3RzIHRoZSBDUFUgdG8gcGVyZm9ybSBwcm90b2NvbCBwcm9jZXNzaW5nCithYm92ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHBsYWNpbmcgdGhlIHBhY2tldAorb24gdGhlIGRlc2lyZWQgQ1BV4oCZcyBiYWNrbG9nIHF1ZXVlIGFuZCB3YWtpbmcgdXAgdGhlIENQVSBmb3IgcHJvY2Vzc2luZy4KK1JQUyBoYXMgc29tZSBhZHZhbnRhZ2VzIG92ZXIgUlNTOiAxKSBpdCBjYW4gYmUgdXNlZCB3aXRoIGFueSBOSUMsCisyKSBzb2Z0d2FyZSBmaWx0ZXJzIGNhbiBlYXNpbHkgYmUgYWRkZWQgdG8gaGFzaCBvdmVyIG5ldyBwcm90b2NvbHMsCiszKSBpdCBkb2VzIG5vdCBpbmNyZWFzZSBoYXJkd2FyZSBkZXZpY2UgaW50ZXJydXB0IHJhdGUgKGFsdGhvdWdoIGl0IGRvZXMKK2ludHJvZHVjZSBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0cyAoSVBJcykpLgorCitSUFMgaXMgY2FsbGVkIGR1cmluZyBib3R0b20gaGFsZiBvZiB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2hlbgorYSBkcml2ZXIgc2VuZHMgYSBwYWNrZXQgdXAgdGhlIG5ldHdvcmsgc3RhY2sgd2l0aCBuZXRpZl9yeCgpIG9yCituZXRpZl9yZWNlaXZlX3NrYigpLiBUaGVzZSBjYWxsIHRoZSBnZXRfcnBzX2NwdSgpIGZ1bmN0aW9uLCB3aGljaAorc2VsZWN0cyB0aGUgcXVldWUgdGhhdCBzaG91bGQgcHJvY2VzcyBhIHBhY2tldC4KKworVGhlIGZpcnN0IHN0ZXAgaW4gZGV0ZXJtaW5pbmcgdGhlIHRhcmdldCBDUFUgZm9yIFJQUyBpcyB0byBjYWxjdWxhdGUgYQorZmxvdyBoYXNoIG92ZXIgdGhlIHBhY2tldOKAmXMgYWRkcmVzc2VzIG9yIHBvcnRzICgyLXR1cGxlIG9yIDQtdHVwbGUgaGFzaAorZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbCkuIFRoaXMgc2VydmVzIGFzIGEgY29uc2lzdGVudCBoYXNoIG9mIHRoZQorYXNzb2NpYXRlZCBmbG93IG9mIHRoZSBwYWNrZXQuIFRoZSBoYXNoIGlzIGVpdGhlciBwcm92aWRlZCBieSBoYXJkd2FyZQorb3Igd2lsbCBiZSBjb21wdXRlZCBpbiB0aGUgc3RhY2suIENhcGFibGUgaGFyZHdhcmUgY2FuIHBhc3MgdGhlIGhhc2ggaW4KK3RoZSByZWNlaXZlIGRlc2NyaXB0b3IgZm9yIHRoZSBwYWNrZXQ7IHRoaXMgd291bGQgdXN1YWxseSBiZSB0aGUgc2FtZQoraGFzaCB1c2VkIGZvciBSU1MgKGUuZy4gY29tcHV0ZWQgVG9lcGxpdHogaGFzaCkuIFRoZSBoYXNoIGlzIHNhdmVkIGluCitza2ItPnJ4X2hhc2ggYW5kIGNhbiBiZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgc3RhY2sgYXMgYSBoYXNoIG9mIHRoZQorcGFja2V04oCZcyBmbG93LgorCitFYWNoIHJlY2VpdmUgaGFyZHdhcmUgcXVldWUgaGFzIGFuIGFzc29jaWF0ZWQgbGlzdCBvZiBDUFVzIHRvIHdoaWNoCitSUFMgbWF5IGVucXVldWUgcGFja2V0cyBmb3IgcHJvY2Vzc2luZy4gRm9yIGVhY2ggcmVjZWl2ZWQgcGFja2V0LAorYW4gaW5kZXggaW50byB0aGUgbGlzdCBpcyBjb21wdXRlZCBmcm9tIHRoZSBmbG93IGhhc2ggbW9kdWxvIHRoZSBzaXplCitvZiB0aGUgbGlzdC4gVGhlIGluZGV4ZWQgQ1BVIGlzIHRoZSB0YXJnZXQgZm9yIHByb2Nlc3NpbmcgdGhlIHBhY2tldCwKK2FuZCB0aGUgcGFja2V0IGlzIHF1ZXVlZCB0byB0aGUgdGFpbCBvZiB0aGF0IENQVeKAmXMgYmFja2xvZyBxdWV1ZS4gQXQKK3RoZSBlbmQgb2YgdGhlIGJvdHRvbSBoYWxmIHJvdXRpbmUsIElQSXMgYXJlIHNlbnQgdG8gYW55IENQVXMgZm9yIHdoaWNoCitwYWNrZXRzIGhhdmUgYmVlbiBxdWV1ZWQgdG8gdGhlaXIgYmFja2xvZyBxdWV1ZS4gVGhlIElQSSB3YWtlcyBiYWNrbG9nCitwcm9jZXNzaW5nIG9uIHRoZSByZW1vdGUgQ1BVLCBhbmQgYW55IHF1ZXVlZCBwYWNrZXRzIGFyZSB0aGVuIHByb2Nlc3NlZAordXAgdGhlIG5ldHdvcmtpbmcgc3RhY2suCisKKz09PT0gUlBTIENvbmZpZ3VyYXRpb24KKworUlBTIHJlcXVpcmVzIGEga2VybmVsIGNvbXBpbGVkIHdpdGggdGhlIENPTkZJR19SUFMga2NvbmZpZyBzeW1ib2wgKG9uCitieSBkZWZhdWx0IGZvciBTTVApLiBFdmVuIHdoZW4gY29tcGlsZWQgaW4sIFJQUyByZW1haW5zIGRpc2FibGVkIHVudGlsCitleHBsaWNpdGx5IGNvbmZpZ3VyZWQuIFRoZSBsaXN0IG9mIENQVXMgdG8gd2hpY2ggUlBTIG1heSBmb3J3YXJkIHRyYWZmaWMKK2NhbiBiZSBjb25maWd1cmVkIGZvciBlYWNoIHJlY2VpdmUgcXVldWUgdXNpbmcgYSBzeXNmcyBmaWxlIGVudHJ5OgorCisgL3N5cy9jbGFzcy9uZXQvPGRldj4vcXVldWVzL3J4LTxuPi9ycHNfY3B1cworCitUaGlzIGZpbGUgaW1wbGVtZW50cyBhIGJpdG1hcCBvZiBDUFVzLiBSUFMgaXMgZGlzYWJsZWQgd2hlbiBpdCBpcyB6ZXJvCisodGhlIGRlZmF1bHQpLCBpbiB3aGljaCBjYXNlIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBvbiB0aGUgaW50ZXJydXB0aW5nCitDUFUuIERvY3VtZW50YXRpb24vSVJRLWFmZmluaXR5LnR4dCBleHBsYWlucyBob3cgQ1BVcyBhcmUgYXNzaWduZWQgdG8KK3RoZSBiaXRtYXAuCisKKz09IFN1Z2dlc3RlZCBDb25maWd1cmF0aW9uCisKK0ZvciBhIHNpbmdsZSBxdWV1ZSBkZXZpY2UsIGEgdHlwaWNhbCBSUFMgY29uZmlndXJhdGlvbiB3b3VsZCBiZSB0byBzZXQKK3RoZSBycHNfY3B1cyB0byB0aGUgQ1BVcyBpbiB0aGUgc2FtZSBtZW1vcnkgZG9tYWluIG9mIHRoZSBpbnRlcnJ1cHRpbmcKK0NQVS4gSWYgTlVNQSBsb2NhbGl0eSBpcyBub3QgYW4gaXNzdWUsIHRoaXMgY291bGQgYWxzbyBiZSBhbGwgQ1BVcyBpbgordGhlIHN5c3RlbS4gQXQgaGlnaCBpbnRlcnJ1cHQgcmF0ZSwgaXQgbWlnaHQgYmUgd2lzZSB0byBleGNsdWRlIHRoZQoraW50ZXJydXB0aW5nIENQVSBmcm9tIHRoZSBtYXAgc2luY2UgdGhhdCBhbHJlYWR5IHBlcmZvcm1zIG11Y2ggd29yay4KKworRm9yIGEgbXVsdGktcXVldWUgc3lzdGVtLCBpZiBSU1MgaXMgY29uZmlndXJlZCBzbyB0aGF0IGEgaGFyZHdhcmUKK3JlY2VpdmUgcXVldWUgaXMgbWFwcGVkIHRvIGVhY2ggQ1BVLCB0aGVuIFJQUyBpcyBwcm9iYWJseSByZWR1bmRhbnQKK2FuZCB1bm5lY2Vzc2FyeS4gSWYgdGhlcmUgYXJlIGZld2VyIGhhcmR3YXJlIHF1ZXVlcyB0aGFuIENQVXMsIHRoZW4KK1JQUyBtaWdodCBiZSBiZW5lZmljaWFsIGlmIHRoZSBycHNfY3B1cyBmb3IgZWFjaCBxdWV1ZSBhcmUgdGhlIG9uZXMgdGhhdAorc2hhcmUgdGhlIHNhbWUgbWVtb3J5IGRvbWFpbiBhcyB0aGUgaW50ZXJydXB0aW5nIENQVSBmb3IgdGhhdCBxdWV1ZS4KKworCitSRlM6IFJlY2VpdmUgRmxvdyBTdGVlcmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hpbGUgUlBTIHN0ZWVycyBwYWNrZXRzIHNvbGVseSBiYXNlZCBvbiBoYXNoLCBhbmQgdGh1cyBnZW5lcmFsbHkKK3Byb3ZpZGVzIGdvb2QgbG9hZCBkaXN0cmlidXRpb24sIGl0IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50CithcHBsaWNhdGlvbiBsb2NhbGl0eS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgUmVjZWl2ZSBGbG93IFN0ZWVyaW5nCisoUkZTKS4gVGhlIGdvYWwgb2YgUkZTIGlzIHRvIGluY3JlYXNlIGRhdGFjYWNoZSBoaXRyYXRlIGJ5IHN0ZWVyaW5nCitrZXJuZWwgcHJvY2Vzc2luZyBvZiBwYWNrZXRzIHRvIHRoZSBDUFUgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIHRocmVhZAorY29uc3VtaW5nIHRoZSBwYWNrZXQgaXMgcnVubmluZy4gUkZTIHJlbGllcyBvbiB0aGUgc2FtZSBSUFMgbWVjaGFuaXNtcwordG8gZW5xdWV1ZSBwYWNrZXRzIG9udG8gdGhlIGJhY2tsb2cgb2YgYW5vdGhlciBDUFUgYW5kIHRvIHdha2UgdXAgdGhhdAorQ1BVLgorCitJbiBSRlMsIHBhY2tldHMgYXJlIG5vdCBmb3J3YXJkZWQgZGlyZWN0bHkgYnkgdGhlIHZhbHVlIG9mIHRoZWlyIGhhc2gsCitidXQgdGhlIGhhc2ggaXMgdXNlZCBhcyBpbmRleCBpbnRvIGEgZmxvdyBsb29rdXAgdGFibGUuIFRoaXMgdGFibGUgbWFwcworZmxvd3MgdG8gdGhlIENQVXMgd2hlcmUgdGhvc2UgZmxvd3MgYXJlIGJlaW5nIHByb2Nlc3NlZC4gVGhlIGZsb3cgaGFzaAorKHNlZSBSUFMgc2VjdGlvbiBhYm92ZSkgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluZGV4IGludG8gdGhpcyB0YWJsZS4KK1RoZSBDUFUgcmVjb3JkZWQgaW4gZWFjaCBlbnRyeSBpcyB0aGUgb25lIHdoaWNoIGxhc3QgcHJvY2Vzc2VkIHRoZSBmbG93LgorSWYgYW4gZW50cnkgZG9lcyBub3QgaG9sZCBhIHZhbGlkIENQVSwgdGhlbiBwYWNrZXRzIG1hcHBlZCB0byB0aGF0IGVudHJ5CithcmUgc3RlZXJlZCB1c2luZyBwbGFpbiBSUFMuIE11bHRpcGxlIHRhYmxlIGVudHJpZXMgbWF5IHBvaW50IHRvIHRoZQorc2FtZSBDUFUuIEluZGVlZCwgd2l0aCBtYW55IGZsb3dzIGFuZCBmZXcgQ1BVcywgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdAorYSBzaW5nbGUgYXBwbGljYXRpb24gdGhyZWFkIGhhbmRsZXMgZmxvd3Mgd2l0aCBtYW55IGRpZmZlcmVudCBmbG93IGhhc2hlcy4KKworcnBzX3NvY2tfdGFibGUgaXMgYSBnbG9iYWwgZmxvdyB0YWJsZSB0aGF0IGNvbnRhaW5zIHRoZSAqZGVzaXJlZCogQ1BVIGZvcgorZmxvd3M6IHRoZSBDUFUgdGhhdCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyB0aGUgZmxvdyBpbiB1c2Vyc3BhY2UuIEVhY2gKK3RhYmxlIHZhbHVlIGlzIGEgQ1BVIGluZGV4IHRoYXQgaXMgdXBkYXRlZCBkdXJpbmcgY2FsbHMgdG8gcmVjdm1zZyBhbmQKK3NlbmRtc2cgKHNwZWNpZmljYWxseSwgaW5ldF9yZWN2bXNnKCksIGluZXRfc2VuZG1zZygpLCBpbmV0X3NlbmRwYWdlKCkKK2FuZCB0Y3Bfc3BsaWNlX3JlYWQoKSkuCisKK1doZW4gdGhlIHNjaGVkdWxlciBtb3ZlcyBhIHRocmVhZCB0byBhIG5ldyBDUFUgd2hpbGUgaXQgaGFzIG91dHN0YW5kaW5nCityZWNlaXZlIHBhY2tldHMgb24gdGhlIG9sZCBDUFUsIHBhY2tldHMgbWF5IGFycml2ZSBvdXQgb2Ygb3JkZXIuIFRvCithdm9pZCB0aGlzLCBSRlMgdXNlcyBhIHNlY29uZCBmbG93IHRhYmxlIHRvIHRyYWNrIG91dHN0YW5kaW5nIHBhY2tldHMKK2ZvciBlYWNoIGZsb3c6IHJwc19kZXZfZmxvd190YWJsZSBpcyBhIHRhYmxlIHNwZWNpZmljIHRvIGVhY2ggaGFyZHdhcmUKK3JlY2VpdmUgcXVldWUgb2YgZWFjaCBkZXZpY2UuIEVhY2ggdGFibGUgdmFsdWUgc3RvcmVzIGEgQ1BVIGluZGV4IGFuZCBhCitjb3VudGVyLiBUaGUgQ1BVIGluZGV4IHJlcHJlc2VudHMgdGhlICpjdXJyZW50KiBDUFUgb250byB3aGljaCBwYWNrZXRzCitmb3IgdGhpcyBmbG93IGFyZSBlbnF1ZXVlZCBmb3IgZnVydGhlciBrZXJuZWwgcHJvY2Vzc2luZy4gSWRlYWxseSwga2VybmVsCithbmQgdXNlcnNwYWNlIHByb2Nlc3Npbmcgb2NjdXIgb24gdGhlIHNhbWUgQ1BVLCBhbmQgaGVuY2UgdGhlIENQVSBpbmRleAoraW4gYm90aCB0YWJsZXMgaXMgaWRlbnRpY2FsLiBUaGlzIGlzIGxpa2VseSBmYWxzZSBpZiB0aGUgc2NoZWR1bGVyIGhhcworcmVjZW50bHkgbWlncmF0ZWQgYSB1c2Vyc3BhY2UgdGhyZWFkIHdoaWxlIHRoZSBrZXJuZWwgc3RpbGwgaGFzIHBhY2tldHMKK2VucXVldWVkIGZvciBrZXJuZWwgcHJvY2Vzc2luZyBvbiB0aGUgb2xkIENQVS4KKworVGhlIGNvdW50ZXIgaW4gcnBzX2Rldl9mbG93X3RhYmxlIHZhbHVlcyByZWNvcmRzIHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQKK0NQVSdzIGJhY2tsb2cgd2hlbiBhIHBhY2tldCBpbiB0aGlzIGZsb3cgd2FzIGxhc3QgZW5xdWV1ZWQuIEVhY2ggYmFja2xvZworcXVldWUgaGFzIGEgaGVhZCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgb24gZGVxdWV1ZS4gQSB0YWlsIGNvdW50ZXIKK2lzIGNvbXB1dGVkIGFzIGhlYWQgY291bnRlciArIHF1ZXVlIGxlbmd0aC4gSW4gb3RoZXIgd29yZHMsIHRoZSBjb3VudGVyCitpbiBycHNfZGV2X2Zsb3dfdGFibGVbaV0gcmVjb3JkcyB0aGUgbGFzdCBlbGVtZW50IGluIGZsb3cgaSB0aGF0IGhhcworYmVlbiBlbnF1ZXVlZCBvbnRvIHRoZSBjdXJyZW50bHkgZGVzaWduYXRlZCBDUFUgZm9yIGZsb3cgaSAob2YgY291cnNlLAorZW50cnkgaSBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBoYXNoIGFuZCBtdWx0aXBsZSBmbG93cyBtYXkgaGFzaCB0byB0aGUKK3NhbWUgZW50cnkgaSkuCisKK0FuZCBub3cgdGhlIHRyaWNrIGZvciBhdm9pZGluZyBvdXQgb2Ygb3JkZXIgcGFja2V0czogd2hlbiBzZWxlY3RpbmcgdGhlCitDUFUgZm9yIHBhY2tldCBwcm9jZXNzaW5nIChmcm9tIGdldF9ycHNfY3B1KCkpIHRoZSBycHNfc29ja19mbG93IHRhYmxlCithbmQgdGhlIHJwc19kZXZfZmxvdyB0YWJsZSBvZiB0aGUgcXVldWUgdGhhdCB0aGUgcGFja2V0IHdhcyByZWNlaXZlZCBvbgorYXJlIGNvbXBhcmVkLiBJZiB0aGUgZGVzaXJlZCBDUFUgZm9yIHRoZSBmbG93IChmb3VuZCBpbiB0aGUKK3Jwc19zb2NrX2Zsb3cgdGFibGUpIG1hdGNoZXMgdGhlIGN1cnJlbnQgQ1BVIChmb3VuZCBpbiB0aGUgcnBzX2Rldl9mbG93Cit0YWJsZSksIHRoZSBwYWNrZXQgaXMgZW5xdWV1ZWQgb250byB0aGF0IENQVeKAmXMgYmFja2xvZy4gSWYgdGhleSBkaWZmZXIsCit0aGUgY3VycmVudCBDUFUgaXMgdXBkYXRlZCB0byBtYXRjaCB0aGUgZGVzaXJlZCBDUFUgaWYgb25lIG9mIHRoZQorZm9sbG93aW5nIGlzIHRydWU6CisKKy0gVGhlIGN1cnJlbnQgQ1BVJ3MgcXVldWUgaGVhZCBjb3VudGVyID49IHRoZSByZWNvcmRlZCB0YWlsIGNvdW50ZXIKKyAgdmFsdWUgaW4gcnBzX2Rldl9mbG93W2ldCistIFRoZSBjdXJyZW50IENQVSBpcyB1bnNldCAoZXF1YWwgdG8gTlJfQ1BVUykKKy0gVGhlIGN1cnJlbnQgQ1BVIGlzIG9mZmxpbmUKKworQWZ0ZXIgdGhpcyBjaGVjaywgdGhlIHBhY2tldCBpcyBzZW50IHRvIHRoZSAocG9zc2libHkgdXBkYXRlZCkgY3VycmVudAorQ1BVLiBUaGVzZSBydWxlcyBhaW0gdG8gZW5zdXJlIHRoYXQgYSBmbG93IG9ubHkgbW92ZXMgdG8gYSBuZXcgQ1BVIHdoZW4KK3RoZXJlIGFyZSBubyBwYWNrZXRzIG91dHN0YW5kaW5nIG9uIHRoZSBvbGQgQ1BVLCBhcyB0aGUgb3V0c3RhbmRpbmcKK3BhY2tldHMgY291bGQgYXJyaXZlIGxhdGVyIHRoYW4gdGhvc2UgYWJvdXQgdG8gYmUgcHJvY2Vzc2VkIG9uIHRoZSBuZXcKK0NQVS4KKworPT09PSBSRlMgQ29uZmlndXJhdGlvbgorCitSRlMgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGtjb25maWcgc3ltYm9sIENPTkZJR19SRlMgaXMgZW5hYmxlZCAob24KK2J5IGRlZmF1bHQgZm9yIFNNUCkuIFRoZSBmdW5jdGlvbmFsaXR5IHJlbWFpbnMgZGlzYWJsZWQgdW50aWwgZXhwbGljaXRseQorY29uZmlndXJlZC4gVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBnbG9iYWwgZmxvdyB0YWJsZSBpcyBzZXQgdGhyb3VnaDoKKworIC9wcm9jL3N5cy9uZXQvY29yZS9ycHNfc29ja19mbG93X2VudHJpZXMKKworVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBwZXItcXVldWUgZmxvdyB0YWJsZSBhcmUgc2V0IHRocm91Z2g6CisKKyAvc3lzL2NsYXNzL25ldC88ZGV2Pi9xdWV1ZXMvdHgtPG4+L3Jwc19mbG93X2NudAorCis9PSBTdWdnZXN0ZWQgQ29uZmlndXJhdGlvbgorCitCb3RoIG9mIHRoZXNlIG5lZWQgdG8gYmUgc2V0IGJlZm9yZSBSRlMgaXMgZW5hYmxlZCBmb3IgYSByZWNlaXZlIHF1ZXVlLgorVmFsdWVzIGZvciBib3RoIGFyZSByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIHR3by4gVGhlCitzdWdnZXN0ZWQgZmxvdyBjb3VudCBkZXBlbmRzIG9uIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYWN0aXZlIGNvbm5lY3Rpb25zCithdCBhbnkgZ2l2ZW4gdGltZSwgd2hpY2ggbWF5IGJlIHNpZ25pZmljYW50bHkgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2Ygb3BlbgorY29ubmVjdGlvbnMuIFdlIGhhdmUgZm91bmQgdGhhdCBhIHZhbHVlIG9mIDMyNzY4IGZvciBycHNfc29ja19mbG93X2VudHJpZXMKK3dvcmtzIGZhaXJseSB3ZWxsIG9uIGEgbW9kZXJhdGVseSBsb2FkZWQgc2VydmVyLgorCitGb3IgYSBzaW5nbGUgcXVldWUgZGV2aWNlLCB0aGUgcnBzX2Zsb3dfY250IHZhbHVlIGZvciB0aGUgc2luZ2xlIHF1ZXVlCit3b3VsZCBub3JtYWxseSBiZSBjb25maWd1cmVkIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHJwc19zb2NrX2Zsb3dfZW50cmllcy4KK0ZvciBhIG11bHRpLXF1ZXVlIGRldmljZSwgdGhlIHJwc19mbG93X2NudCBmb3IgZWFjaCBxdWV1ZSBtaWdodCBiZQorY29uZmlndXJlZCBhcyBycHNfc29ja19mbG93X2VudHJpZXMgLyBOLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YKK3F1ZXVlcy4gU28gZm9yIGluc3RhbmNlLCBpZiBycHNfZmxvd19lbnRyaWVzIGlzIHNldCB0byAzMjc2OCBhbmQgdGhlcmUKK2FyZSAxNiBjb25maWd1cmVkIHJlY2VpdmUgcXVldWVzLCBycHNfZmxvd19jbnQgZm9yIGVhY2ggcXVldWUgbWlnaHQgYmUKK2NvbmZpZ3VyZWQgYXMgMjA0OC4KKworCitBY2NlbGVyYXRlZCBSRlMKKz09PT09PT09PT09PT09PQorCitBY2NlbGVyYXRlZCBSRlMgaXMgdG8gUkZTIHdoYXQgUlNTIGlzIHRvIFJQUzogYSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBsb2FkCitiYWxhbmNpbmcgbWVjaGFuaXNtIHRoYXQgdXNlcyBzb2Z0IHN0YXRlIHRvIHN0ZWVyIGZsb3dzIGJhc2VkIG9uIHdoZXJlCit0aGUgYXBwbGljYXRpb24gdGhyZWFkIGNvbnN1bWluZyB0aGUgcGFja2V0cyBvZiBlYWNoIGZsb3cgaXMgcnVubmluZy4KK0FjY2VsZXJhdGVkIFJGUyBzaG91bGQgcGVyZm9ybSBiZXR0ZXIgdGhhbiBSRlMgc2luY2UgcGFja2V0cyBhcmUgc2VudAorZGlyZWN0bHkgdG8gYSBDUFUgbG9jYWwgdG8gdGhlIHRocmVhZCBjb25zdW1pbmcgdGhlIGRhdGEuIFRoZSB0YXJnZXQgQ1BVCit3aWxsIGVpdGhlciBiZSB0aGUgc2FtZSBDUFUgd2hlcmUgdGhlIGFwcGxpY2F0aW9uIHJ1bnMsIG9yIGF0IGxlYXN0IGEgQ1BVCit3aGljaCBpcyBsb2NhbCB0byB0aGUgYXBwbGljYXRpb24gdGhyZWFk4oCZcyBDUFUgaW4gdGhlIGNhY2hlIGhpZXJhcmNoeS4KKworVG8gZW5hYmxlIGFjY2VsZXJhdGVkIFJGUywgdGhlIG5ldHdvcmtpbmcgc3RhY2sgY2FsbHMgdGhlCituZG9fcnhfZmxvd19zdGVlciBkcml2ZXIgZnVuY3Rpb24gdG8gY29tbXVuaWNhdGUgdGhlIGRlc2lyZWQgaGFyZHdhcmUKK3F1ZXVlIGZvciBwYWNrZXRzIG1hdGNoaW5nIGEgcGFydGljdWxhciBmbG93LiBUaGUgbmV0d29yayBzdGFjaworYXV0b21hdGljYWxseSBjYWxscyB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgYSBmbG93IGVudHJ5IGluCitycHNfZGV2X2Zsb3dfdGFibGUgaXMgdXBkYXRlZC4gVGhlIGRyaXZlciBpbiB0dXJuIHVzZXMgYSBkZXZpY2Ugc3BlY2lmaWMKK21ldGhvZCB0byBwcm9ncmFtIHRoZSBOSUMgdG8gc3RlZXIgdGhlIHBhY2tldHMuCisKK1RoZSBoYXJkd2FyZSBxdWV1ZSBmb3IgYSBmbG93IGlzIGRlcml2ZWQgZnJvbSB0aGUgQ1BVIHJlY29yZGVkIGluCitycHNfZGV2X2Zsb3dfdGFibGUuIFRoZSBzdGFjayBjb25zdWx0cyBhIENQVSB0byBoYXJkd2FyZSBxdWV1ZSBtYXAgd2hpY2gKK2lzIG1haW50YWluZWQgYnkgdGhlIE5JQyBkcml2ZXIuIFRoaXMgaXMgYW4gYXV0by1nZW5lcmF0ZWQgcmV2ZXJzZSBtYXAgb2YKK3RoZSBJUlEgYWZmaW5pdHkgdGFibGUgc2hvd24gYnkgL3Byb2MvaW50ZXJydXB0cy4gRHJpdmVycyBjYW4gdXNlCitmdW5jdGlvbnMgaW4gdGhlIGNwdV9ybWFwICjigJxDUFUgYWZmaW5pdHkgcmV2ZXJzZSBtYXDigJ0pIGtlcm5lbCBsaWJyYXJ5Cit0byBwb3B1bGF0ZSB0aGUgbWFwLiBGb3IgZWFjaCBDUFUsIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlIGluIHRoZSBtYXAgaXMKK3NldCB0byBiZSBvbmUgd2hvc2UgcHJvY2Vzc2luZyBDUFUgaXMgY2xvc2VzdCBpbiBjYWNoZSBsb2NhbGl0eS4KKworPT09PSBBY2NlbGVyYXRlZCBSRlMgQ29uZmlndXJhdGlvbgorCitBY2NlbGVyYXRlZCBSRlMgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoCitDT05GSUdfUkZTX0FDQ0VMIGFuZCBzdXBwb3J0IGlzIHByb3ZpZGVkIGJ5IHRoZSBOSUMgZGV2aWNlIGFuZCBkcml2ZXIuCitJdCBhbHNvIHJlcXVpcmVzIHRoYXQgbnR1cGxlIGZpbHRlcmluZyBpcyBlbmFibGVkIHZpYSBldGh0b29sLiBUaGUgbWFwCitvZiBDUFUgdG8gcXVldWVzIGlzIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBmcm9tIHRoZSBJUlEgYWZmaW5pdGllcworY29uZmlndXJlZCBmb3IgZWFjaCByZWNlaXZlIHF1ZXVlIGJ5IHRoZSBkcml2ZXIsIHNvIG5vIGFkZGl0aW9uYWwKK2NvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIG5lY2Vzc2FyeS4KKworPT0gU3VnZ2VzdGVkIENvbmZpZ3VyYXRpb24KKworVGhpcyB0ZWNobmlxdWUgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbmV2ZXIgb25lIHdhbnRzIHRvIHVzZSBSRlMgYW5kIHRoZQorTklDIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi4KKworWFBTOiBUcmFuc21pdCBQYWNrZXQgU3RlZXJpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RyYW5zbWl0IFBhY2tldCBTdGVlcmluZyBpcyBhIG1lY2hhbmlzbSBmb3IgaW50ZWxsaWdlbnRseSBzZWxlY3RpbmcKK3doaWNoIHRyYW5zbWl0IHF1ZXVlIHRvIHVzZSB3aGVuIHRyYW5zbWl0dGluZyBhIHBhY2tldCBvbiBhIG11bHRpLXF1ZXVlCitkZXZpY2UuIFRvIGFjY29tcGxpc2ggdGhpcywgYSBtYXBwaW5nIGZyb20gQ1BVIHRvIGhhcmR3YXJlIHF1ZXVlKHMpIGlzCityZWNvcmRlZC4gVGhlIGdvYWwgb2YgdGhpcyBtYXBwaW5nIGlzIHVzdWFsbHkgdG8gYXNzaWduIHF1ZXVlcworZXhjbHVzaXZlbHkgdG8gYSBzdWJzZXQgb2YgQ1BVcywgd2hlcmUgdGhlIHRyYW5zbWl0IGNvbXBsZXRpb25zIGZvcgordGhlc2UgcXVldWVzIGFyZSBwcm9jZXNzZWQgb24gYSBDUFUgd2l0aGluIHRoaXMgc2V0LiBUaGlzIGNob2ljZQorcHJvdmlkZXMgdHdvIGJlbmVmaXRzLiBGaXJzdCwgY29udGVudGlvbiBvbiB0aGUgZGV2aWNlIHF1ZXVlIGxvY2sgaXMKK3NpZ25pZmljYW50bHkgcmVkdWNlZCBzaW5jZSBmZXdlciBDUFVzIGNvbnRlbmQgZm9yIHRoZSBzYW1lIHF1ZXVlCisoY29udGVudGlvbiBjYW4gYmUgZWxpbWluYXRlZCBjb21wbGV0ZWx5IGlmIGVhY2ggQ1BVIGhhcyBpdHMgb3duCit0cmFuc21pdCBxdWV1ZSkuIFNlY29uZGx5LCBjYWNoZSBtaXNzIHJhdGUgb24gdHJhbnNtaXQgY29tcGxldGlvbiBpcworcmVkdWNlZCwgaW4gcGFydGljdWxhciBmb3IgZGF0YSBjYWNoZSBsaW5lcyB0aGF0IGhvbGQgdGhlIHNrX2J1ZmYKK3N0cnVjdHVyZXMuCisKK1hQUyBpcyBjb25maWd1cmVkIHBlciB0cmFuc21pdCBxdWV1ZSBieSBzZXR0aW5nIGEgYml0bWFwIG9mIENQVXMgdGhhdAorbWF5IHVzZSB0aGF0IHF1ZXVlIHRvIHRyYW5zbWl0LiBUaGUgcmV2ZXJzZSBtYXBwaW5nLCBmcm9tIENQVXMgdG8KK3RyYW5zbWl0IHF1ZXVlcywgaXMgY29tcHV0ZWQgYW5kIG1haW50YWluZWQgZm9yIGVhY2ggbmV0d29yayBkZXZpY2UuCitXaGVuIHRyYW5zbWl0dGluZyB0aGUgZmlyc3QgcGFja2V0IGluIGEgZmxvdywgdGhlIGZ1bmN0aW9uCitnZXRfeHBzX3F1ZXVlKCkgaXMgY2FsbGVkIHRvIHNlbGVjdCBhIHF1ZXVlLiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIElECitvZiB0aGUgcnVubmluZyBDUFUgYXMgYSBrZXkgaW50byB0aGUgQ1BVLXRvLXF1ZXVlIGxvb2t1cCB0YWJsZS4gSWYgdGhlCitJRCBtYXRjaGVzIGEgc2luZ2xlIHF1ZXVlLCB0aGF0IGlzIHVzZWQgZm9yIHRyYW5zbWlzc2lvbi4gSWYgbXVsdGlwbGUKK3F1ZXVlcyBtYXRjaCwgb25lIGlzIHNlbGVjdGVkIGJ5IHVzaW5nIHRoZSBmbG93IGhhc2ggdG8gY29tcHV0ZSBhbiBpbmRleAoraW50byB0aGUgc2V0LgorCitUaGUgcXVldWUgY2hvc2VuIGZvciB0cmFuc21pdHRpbmcgYSBwYXJ0aWN1bGFyIGZsb3cgaXMgc2F2ZWQgaW4gdGhlCitjb3JyZXNwb25kaW5nIHNvY2tldCBzdHJ1Y3R1cmUgZm9yIHRoZSBmbG93IChlLmcuIGEgVENQIGNvbm5lY3Rpb24pLgorVGhpcyB0cmFuc21pdCBxdWV1ZSBpcyB1c2VkIGZvciBzdWJzZXF1ZW50IHBhY2tldHMgc2VudCBvbiB0aGUgZmxvdyB0bworcHJldmVudCBvdXQgb2Ygb3JkZXIgKG9vbykgcGFja2V0cy4gVGhlIGNob2ljZSBhbHNvIGFtb3J0aXplcyB0aGUgY29zdAorb2YgY2FsbGluZyBnZXRfeHBzX3F1ZXVlcygpIG92ZXIgYWxsIHBhY2tldHMgaW4gdGhlIGZsb3cuIFRvIGF2b2lkCitvb28gcGFja2V0cywgdGhlIHF1ZXVlIGZvciBhIGZsb3cgY2FuIHN1YnNlcXVlbnRseSBvbmx5IGJlIGNoYW5nZWQgaWYKK3NrYi0+b29vX29rYXkgaXMgc2V0IGZvciBhIHBhY2tldCBpbiB0aGUgZmxvdy4gVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0Cit0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcGFja2V0cyBpbiB0aGUgZmxvdywgc28gdGhlIHRyYW5zbWl0IHF1ZXVlIGNhbgorY2hhbmdlIHdpdGhvdXQgdGhlIHJpc2sgb2YgZ2VuZXJhdGluZyBvdXQgb2Ygb3JkZXIgcGFja2V0cy4gVGhlCit0cmFuc3BvcnQgbGF5ZXIgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgb29vX29rYXkgYXBwcm9wcmlhdGVseS4gVENQLAorZm9yIGluc3RhbmNlLCBzZXRzIHRoZSBmbGFnIHdoZW4gYWxsIGRhdGEgZm9yIGEgY29ubmVjdGlvbiBoYXMgYmVlbgorYWNrbm93bGVkZ2VkLgorCis9PT09IFhQUyBDb25maWd1cmF0aW9uCisKK1hQUyBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUga2NvbmZpZyBzeW1ib2wgQ09ORklHX1hQUyBpcyBlbmFibGVkIChvbiBieQorZGVmYXVsdCBmb3IgU01QKS4gVGhlIGZ1bmN0aW9uYWxpdHkgcmVtYWlucyBkaXNhYmxlZCB1bnRpbCBleHBsaWNpdGx5Citjb25maWd1cmVkLiBUbyBlbmFibGUgWFBTLCB0aGUgYml0bWFwIG9mIENQVXMgdGhhdCBtYXkgdXNlIGEgdHJhbnNtaXQKK3F1ZXVlIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHN5c2ZzIGZpbGUgZW50cnk6CisKKy9zeXMvY2xhc3MvbmV0LzxkZXY+L3F1ZXVlcy90eC08bj4veHBzX2NwdXMKKworPT0gU3VnZ2VzdGVkIENvbmZpZ3VyYXRpb24KKworRm9yIGEgbmV0d29yayBkZXZpY2Ugd2l0aCBhIHNpbmdsZSB0cmFuc21pc3Npb24gcXVldWUsIFhQUyBjb25maWd1cmF0aW9uCitoYXMgbm8gZWZmZWN0LCBzaW5jZSB0aGVyZSBpcyBubyBjaG9pY2UgaW4gdGhpcyBjYXNlLiBJbiBhIG11bHRpLXF1ZXVlCitzeXN0ZW0sIFhQUyBpcyBwcmVmZXJhYmx5IGNvbmZpZ3VyZWQgc28gdGhhdCBlYWNoIENQVSBtYXBzIG9udG8gb25lIHF1ZXVlLgorSWYgdGhlcmUgYXJlIGFzIG1hbnkgcXVldWVzIGFzIHRoZXJlIGFyZSBDUFVzIGluIHRoZSBzeXN0ZW0sIHRoZW4gZWFjaAorcXVldWUgY2FuIGFsc28gbWFwIG9udG8gb25lIENQVSwgcmVzdWx0aW5nIGluIGV4Y2x1c2l2ZSBwYWlyaW5ncyB0aGF0CitleHBlcmllbmNlIG5vIGNvbnRlbnRpb24uIElmIHRoZXJlIGFyZSBmZXdlciBxdWV1ZXMgdGhhbiBDUFVzLCB0aGVuIHRoZQorYmVzdCBDUFVzIHRvIHNoYXJlIGEgZ2l2ZW4gcXVldWUgYXJlIHByb2JhYmx5IHRob3NlIHRoYXQgc2hhcmUgdGhlIGNhY2hlCit3aXRoIHRoZSBDUFUgdGhhdCBwcm9jZXNzZXMgdHJhbnNtaXQgY29tcGxldGlvbnMgZm9yIHRoYXQgcXVldWUKKyh0cmFuc21pdCBpbnRlcnJ1cHRzKS4KKworCitGdXJ0aGVyIEluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09CitSUFMgYW5kIFJGUyB3ZXJlIGludHJvZHVjZWQgaW4ga2VybmVsIDIuNi4zNS4gWFBTIHdhcyBpbmNvcnBvcmF0ZWQgaW50bworMi42LjM4LiBPcmlnaW5hbCBwYXRjaGVzIHdlcmUgc3VibWl0dGVkIGJ5IFRvbSBIZXJiZXJ0CisodGhlcmJlcnRAZ29vZ2xlLmNvbSkKKworQWNjZWxlcmF0ZWQgUkZTIHdhcyBpbnRyb2R1Y2VkIGluIDIuNi4zNS4gT3JpZ2luYWwgcGF0Y2hlcyB3ZXJlCitzdWJtaXR0ZWQgYnkgQmVuIEh1dGNoaW5ncyAoYmh1dGNoaW5nc0Bzb2xhcmZsYXJlLmNvbSkKKworQXV0aG9yczoKK1RvbSBIZXJiZXJ0ICh0aGVyYmVydEBnb29nbGUuY29tKQorV2lsbGVtIGRlIEJydWlqbiAod2lsbGVtYkBnb29nbGUuY29tKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKaW5kZXggMTRkZDNjNi4uNjA2NmUzYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CkBAIC01NCwxMSArNTQsMTAgQEAKIEJ5IGRlZmF1bHQsIHRoZSBjYWxsYmFja3MgYXJlIGFsd2F5cyBpbnZva2VkIGluIHByb2Nlc3MgY29udGV4dCB3aXRoIGludGVycnVwdHMKIGVuYWJsZWQuICBIb3dldmVyLCBzdWJzeXN0ZW1zIGNhbiB1c2UgdGhlIHBtX3J1bnRpbWVfaXJxX3NhZmUoKSBoZWxwZXIgZnVuY3Rpb24KIHRvIHRlbGwgdGhlIFBNIGNvcmUgdGhhdCBhIGRldmljZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgYW5kIC0+cnVudGltZV9yZXN1bWUoKQotY2FsbGJhY2tzIHNob3VsZCBiZSBpbnZva2VkIGluIGF0b21pYyBjb250ZXh0IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAotKC0+cnVudGltZV9pZGxlKCkgaXMgc3RpbGwgaW52b2tlZCB0aGUgZGVmYXVsdCB3YXkpLiAgVGhpcyBpbXBsaWVzIHRoYXQgdGhlc2UKLWNhbGxiYWNrIHJvdXRpbmVzIG11c3Qgbm90IGJsb2NrIG9yIHNsZWVwLCBidXQgaXQgYWxzbyBtZWFucyB0aGF0IHRoZQotc3luY2hyb25vdXMgaGVscGVyIGZ1bmN0aW9ucyBsaXN0ZWQgYXQgdGhlIGVuZCBvZiBTZWN0aW9uIDQgY2FuIGJlIHVzZWQgd2l0aGluCi1hbiBpbnRlcnJ1cHQgaGFuZGxlciBvciBpbiBhbiBhdG9taWMgY29udGV4dC4KK2NhbGxiYWNrcyBzaG91bGQgYmUgaW52b2tlZCBpbiBhdG9taWMgY29udGV4dCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCitUaGlzIGltcGxpZXMgdGhhdCB0aGVzZSBjYWxsYmFjayByb3V0aW5lcyBtdXN0IG5vdCBibG9jayBvciBzbGVlcCwgYnV0IGl0IGFsc28KK21lYW5zIHRoYXQgdGhlIHN5bmNocm9ub3VzIGhlbHBlciBmdW5jdGlvbnMgbGlzdGVkIGF0IHRoZSBlbmQgb2YgU2VjdGlvbiA0IGNhbgorYmUgdXNlZCB3aXRoaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgb3IgaW4gYW4gYXRvbWljIGNvbnRleHQuCiAKIFRoZSBzdWJzeXN0ZW0tbGV2ZWwgc3VzcGVuZCBjYWxsYmFjayBpcyBfZW50aXJlbHlfIF9yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nCiB0aGUgc3VzcGVuZCBvZiB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdCBpbmNsdWRlCkBAIC00MzIsOCArNDMxLDcgQEAKIAogICB2b2lkIHBtX3J1bnRpbWVfaXJxX3NhZmUoc3RydWN0IGRldmljZSAqZGV2KTsKICAgICAtIHNldCB0aGUgcG93ZXIuaXJxX3NhZmUgZmxhZyBmb3IgdGhlIGRldmljZSwgY2F1c2luZyB0aGUgcnVudGltZS1QTQotICAgICAgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyAoYnV0IG5vdCB0aGUgaWRsZSBjYWxsYmFjaykgdG8gYmUgaW52b2tlZAotICAgICAgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgICAgICBjYWxsYmFja3MgdG8gYmUgaW52b2tlZCB3aXRoIGludGVycnVwdHMgb2ZmCiAKICAgdm9pZCBwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHN0cnVjdCBkZXZpY2UgKmRldik7CiAgICAgLSBzZXQgdGhlIHBvd2VyLmxhc3RfYnVzeSBmaWVsZCB0byB0aGUgY3VycmVudCB0aW1lCkBAIC00ODMsNiArNDgxLDcgQEAKIHBtX3J1bnRpbWVfYXV0b3N1c3BlbmQoKQogcG1fcnVudGltZV9yZXN1bWUoKQogcG1fcnVudGltZV9nZXRfc3luYygpCitwbV9ydW50aW1lX3B1dF9zeW5jKCkKIHBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZCgpCiAKIDUuIFJ1bnRpbWUgUE0gSW5pdGlhbGl6YXRpb24sIERldmljZSBQcm9iaW5nIGFuZCBSZW1vdmFsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JhbW9vcHMudHh0IGIvRG9jdW1lbnRhdGlvbi9yYW1vb3BzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIxYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yYW1vb3BzLnR4dApAQCAtMCwwICsxLDc2IEBACitSYW1vb3BzIG9vcHMvcGFuaWMgbG9nZ2VyCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NlcmdpdSBJb3JkYWNoZSA8c2VyZ2l1QGNocm9taXVtLm9yZz4KKworVXBkYXRlZDogOCBBdWd1c3QgMjAxMQorCiswLiBJbnRyb2R1Y3Rpb24KKworUmFtb29wcyBpcyBhbiBvb3BzL3BhbmljIGxvZ2dlciB0aGF0IHdyaXRlcyBpdHMgbG9ncyB0byBSQU0gYmVmb3JlIHRoZSBzeXN0ZW0KK2NyYXNoZXMuIEl0IHdvcmtzIGJ5IGxvZ2dpbmcgb29wc2VzIGFuZCBwYW5pY3MgaW4gYSBjaXJjdWxhciBidWZmZXIuIFJhbW9vcHMKK25lZWRzIGEgc3lzdGVtIHdpdGggcGVyc2lzdGVudCBSQU0gc28gdGhhdCB0aGUgY29udGVudCBvZiB0aGF0IGFyZWEgY2FuCitzdXJ2aXZlIGFmdGVyIGEgcmVzdGFydC4KKworMS4gUmFtb29wcyBjb25jZXB0cworCitSYW1vb3BzIHVzZXMgYSBwcmVkZWZpbmVkIG1lbW9yeSBhcmVhIHRvIHN0b3JlIHRoZSBkdW1wLiBUaGUgc3RhcnQgYW5kIHNpemUgb2YKK3RoZSBtZW1vcnkgYXJlYSBhcmUgc2V0IHVzaW5nIHR3byB2YXJpYWJsZXM6CisgICogIm1lbV9hZGRyZXNzIiBmb3IgdGhlIHN0YXJ0CisgICogIm1lbV9zaXplIiBmb3IgdGhlIHNpemUuIFRoZSBtZW1vcnkgc2l6ZSB3aWxsIGJlIHJvdW5kZWQgZG93biB0byBhCisgIHBvd2VyIG9mIHR3by4KKworVGhlIG1lbW9yeSBhcmVhIGlzIGRpdmlkZWQgaW50byAicmVjb3JkX3NpemUiIGNodW5rcyAoYWxzbyByb3VuZGVkIGRvd24gdG8KK3Bvd2VyIG9mIHR3bykgYW5kIGVhY2ggb29wcy9wYW5pYyB3cml0ZXMgYSAicmVjb3JkX3NpemUiIGNodW5rIG9mCitpbmZvcm1hdGlvbi4KKworRHVtcGluZyBib3RoIG9vcHNlcyBhbmQgcGFuaWNzIGNhbiBiZSBkb25lIGJ5IHNldHRpbmcgMSBpbiB0aGUgImR1bXBfb29wcyIKK3ZhcmlhYmxlIHdoaWxlIHNldHRpbmcgMCBpbiB0aGF0IHZhcmlhYmxlIGR1bXBzIG9ubHkgdGhlIHBhbmljcy4KKworVGhlIG1vZHVsZSB1c2VzIGEgY291bnRlciB0byByZWNvcmQgbXVsdGlwbGUgZHVtcHMgYnV0IHRoZSBjb3VudGVyIGdldHMgcmVzZXQKK29uIHJlc3RhcnQgKGkuZS4gbmV3IGR1bXBzIGFmdGVyIHRoZSByZXN0YXJ0IHdpbGwgb3ZlcndyaXRlIG9sZCBvbmVzKS4KKworMi4gU2V0dGluZyB0aGUgcGFyYW1ldGVycworCitTZXR0aW5nIHRoZSByYW1vb3BzIHBhcmFtZXRlcnMgY2FuIGJlIGRvbmUgaW4gMiBkaWZmZXJlbnQgbWFubmVyczoKKyAxLiBVc2UgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzICh3aGljaCBoYXZlIHRoZSBuYW1lcyBvZiB0aGUgdmFyaWFibGVzIGRlc2NyaWJlZAorIGFzIGJlZm9yZSkuCisgMi4gVXNlIGEgcGxhdGZvcm0gZGV2aWNlIGFuZCBzZXQgdGhlIHBsYXRmb3JtIGRhdGEuIFRoZSBwYXJhbWV0ZXJzIGNhbiB0aGVuCisgYmUgc2V0IHRocm91Z2ggdGhhdCBwbGF0Zm9ybSBkYXRhLiBBbiBleGFtcGxlIG9mIGRvaW5nIHRoYXQgaXM6CisKKyNpbmNsdWRlIDxsaW51eC9yYW1vb3BzLmg+CitbLi4uXQorCitzdGF0aWMgc3RydWN0IHJhbW9vcHNfcGxhdGZvcm1fZGF0YSByYW1vb3BzX2RhdGEgPSB7CisgICAgICAgIC5tZW1fc2l6ZSAgICAgICAgICAgICAgID0gPC4uLj4sCisgICAgICAgIC5tZW1fYWRkcmVzcyAgICAgICAgICAgID0gPC4uLj4sCisgICAgICAgIC5yZWNvcmRfc2l6ZSAgICAgICAgICAgID0gPC4uLj4sCisgICAgICAgIC5kdW1wX29vcHMgICAgICAgICAgICAgID0gPC4uLj4sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByYW1vb3BzX2RldiA9IHsKKyAgICAgICAgLm5hbWUgPSAicmFtb29wcyIsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnBsYXRmb3JtX2RhdGEgPSAmcmFtb29wc19kYXRhLAorICAgICAgICB9LAorfTsKKworWy4uLiBpbnNpZGUgYSBmdW5jdGlvbiAuLi5dCitpbnQgcmV0OworCityZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJhbW9vcHNfZGV2KTsKK2lmIChyZXQpIHsKKwlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCXJldHVybiByZXQ7Cit9CisKKzMuIER1bXAgZm9ybWF0CisKK1RoZSBkYXRhIGR1bXAgYmVnaW5zIHdpdGggYSBoZWFkZXIsIGN1cnJlbnRseSBkZWZpbmVkIGFzICI9PT09IiBmb2xsb3dlZCBieSBhCit0aW1lc3RhbXAgYW5kIGEgbmV3IGxpbmUuIFRoZSBkdW1wIHRoZW4gY29udGludWVzIHdpdGggdGhlIGFjdHVhbCBkYXRhLgorCis0LiBSZWFkaW5nIHRoZSBkYXRhCisKK1RoZSBkdW1wIGRhdGEgY2FuIGJlIHJlYWQgZnJvbSBtZW1vcnkgKHRocm91Z2ggL2Rldi9tZW0gb3Igb3RoZXIgbWVhbnMpLgorR2V0dGluZyB0aGUgbW9kdWxlIHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBuZWVkZWQgaW4gb3JkZXIgdG8gcGFyc2UgdGhlIGRhdGEsIGNhbgorYmUgZG9uZSB0aHJvdWdoIC9zeXMvbW9kdWxlL3JhbW9vcHMvcGFyYW1ldGVycy8qIC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWRfc2FzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKaW5kZXggOWVkMWQ5ZC4uMWI2ZTI3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMKQEAgLTEsMyArMSwxMSBAQAorUmVsZWFzZSBEYXRlICAgIDogVHVlLiBKdWwgMjYsIDIwMTEgMTc6MDA6MDAgUFNUIDIwMTAgLQorCQkJKGVtYWlsZC1pZDptZWdhcmFpZGxpbnV4QGxzaS5jb20pCisJCQlBZGFtIFJhZGZvcmQKK0N1cnJlbnQgVmVyc2lvbiA6IDAwLjAwLjA1LjQwLXJjMQorT2xkIFZlcnNpb24gICAgIDogMDAuMDAuMDUuMzgtcmMxCisgICAgMS4gRml4IEZhc3RQYXRoIEkvTyB0byB3b3JrIHdpdGggZGVncmFkZWQgUkFJRCAxLgorICAgIDIuIEFkZCAuY2hhbmdlX3F1ZXVlX2RlcHRoIHN1cHBvcnQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBSZWxlYXNlIERhdGUgICAgOiBXZWQuIE1heSAxMSwgMjAxMSAxNzowMDowMCBQU1QgMjAxMCAtCiAJCQkoZW1haWxkLWlkOm1lZ2FyYWlkbGludXhAbHNpLmNvbSkKIAkJCUFkYW0gUmFkZm9yZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWwKaW5kZXggZDcyZmQyYS4uMjU2ZjhlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCkBAIC05LDcgKzksNyBAQAogICA8dGFibGUgYm9yZGVyPSIwIj4KICAgIDx0cj4KICAgICA8dGQ+Ci0gICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL3ZpZGVvNGxpbnV4L0FQSS9WNEwxX0FQSS5odG1sIj5WNEwgb3JpZ2luYWwgQVBJPC9hPgorICAgICA8YSBocmVmPSJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2xlZ2FjeS92aWRlbzRsaW51eC9BUEkvVjRMMV9BUEkuaHRtbCI+VjRMIG9yaWdpbmFsIEFQSTwvYT4KICAgICA8L3RkPgogICAgIDx0ZD4KICAgICAgT2Jzb2xldGVkIGJ5IFY0TDIgQVBJCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKaW5kZXggODdjNDYzNC4uODkxMDQ0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQpAQCAtMjcsMyArMjcsNSBAQAogIDI2IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMjkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4NTUxXQogIDI3IC0+IE15Z2ljYSBYODU1OCBQUk8gRE1CLVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTRmMTo4NTc4XQogIDI4IC0+IExFQURURUsgV2luRmFzdCBQeFRWMTIwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2ZjIyXQorIDI5IC0+IEdvVFZpZXcgWDUgM0QgSHlicmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNTY1NDoyMzkwXQorIDMwIC0+IE5ldFVQIER1YWwgRFZCLVQvQy1DSSBSRiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMWI1NTplMmU0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDQyNTE3ZDkuLmQ5YzBmMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTg0LDMgKzg0LDQgQEAKICA4MyAtPiBQcm9mIDczMDEgRFZCLVMvUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IwMzQ6MzAzNF0KICA4NCAtPiBTYW1zdW5nIFNNVCA3MDIwIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZGMwMCwxOGFjOmRjY2RdCiAgODUgLT4gVHdpbmhhbiBWUC0xMDI3IERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODIyOjAwMjNdCisgODYgLT4gVGVWaWkgUzQ2NCBEVkItUy9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkNDY0OjkwMjJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDlhYWU0NDkuLjRhN2IzZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC03NCwzICs3NCw1IEBACiAgNzQgLT4gQWN0aW9ubWFzdGVyL0xpblhjZWwvRGlnaXR1cyBWQzIxMUEgICAgICAoZW0yODAwKQogIDc1IC0+IERpa29tIERLMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MikKICA3NiAtPiBLV29ybGQgUGx1c1RWIDM0MFUgb3IgVUI0MzUtUSAoQVRTQykgICAgIChlbTI4NzApICAgICAgICBbMWI4MDphMzQwXQorIDc3IC0+IEVNMjg3NCBMZWFkZXJzaGlwIElTREJUICAgICAgICAgICAgICAgICAgKGVtMjg3NCkKKyA3OCAtPiBQQ1RWIG5hbm9TdGljayBUMiAyOTBlICAgICAgICAgICAgICAgICAgIChlbTI4MTc0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CmluZGV4IDZiNGM3MmQuLjdlZmFlOWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKQEAgLTE4MiwzICsxODIsNyBAQAogMTgxIC0+IFRlY2hvVHJlbmQgVFQtYnVkZ2V0IFQtMzAwMCAgICAgICAgICAgICAgWzEzYzI6MjgwNF0KIDE4MiAtPiBLd29ybGQgUENJIFNCVFZEL0lTREItVCBGdWxsLVNlZyBIeWJyaWQgIFsxN2RlOmIxMzZdCiAxODMgLT4gQ29tcHJvIFZpZGVvTWF0ZSBWaXN0YSBNMUYgICAgICAgICAgICAgICBbMTg1YjpjOTAwXQorMTg0IC0+IEVuY29yZSBFTkxUVi1GTSAzICAgICAgICAgICAgICAgICAgICAgICAgWzFhN2Y6MjEwOF0KKzE4NSAtPiBNYWdpY1BybyBQcm9IRFRWIFBybzIgRE1CLVRIL0h5YnJpZCAgICAgIFsxN2RlOmQxMzZdCisxODYgLT4gQmVob2xkZXIgQmVob2xkVFYgNTAxICAgICAgICAgICAgICAgICAgICBbNWFjZTo1MDEwXQorMTg3IC0+IEJlaG9sZGVyIEJlaG9sZFRWIDUwMyBGTSAgICAgICAgICAgICAgICAgWzVhY2U6NTAzMF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCmluZGV4IGU2N2MxZGIuLjYzMjNiN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgpAQCAtNzgsOCArNzgsMTAgQEAKIHR1bmVyPTc4IC0gUGhpbGlwcyBGTUQxMjE2TUVYIE1LMyBIeWJyaWQgVHVuZXIKIHR1bmVyPTc5IC0gUGhpbGlwcyBQQUwvU0VDQU0gbXVsdGkgKEZNMTIxNiBNSzUpCiB0dW5lcj04MCAtIFBoaWxpcHMgRlExMjE2TE1FIE1LMyBQQUwvU0VDQU0gdy9hY3RpdmUgbG9vcHRocm91Z2gKK3R1bmVyPTgxIC0gWGNlaXZlIDQwMDAgdHVuZXIKIHR1bmVyPTgxIC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1CiB0dW5lcj04MiAtIFBoaWxpcHMgQ1UxMjE2TAogdHVuZXI9ODMgLSBOWFAgVERBMTgyNzEKIHR1bmVyPTg0IC0gU29ueSBCVEYtUHhuMDFaCiB0dW5lcj04NSAtIFBoaWxpcHMgRlExMjM2IE1LNQordHVuZXI9ODYgLSBUZW5hIFRORjUzMzcgTUZECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnVzYnZpc2lvbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudXNidmlzaW9uCmluZGV4IDBiNzJkM2YuLjZmZDFhZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudXNidmlzaW9uCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudXNidmlzaW9uCkBAIC02MywzICs2Myw1IEBACiAgNjIgLT4gUGlubmFjbGUgUENUViBCdW5nZWUgVVNCIChQQUwpIEZNICAgICAgICAgICAgICAgICAgICAgICAgWzIzMDQ6MDQxOV0KICA2MyAtPiBIYXVwcGF1Z2UgV2luVHYtVVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMjQwMDo0MjAwXQogIDY0IC0+IFBpbm5hY2xlIFN0dWRpbyBQQ1RWIFVTQiAoTlRTQykgRk0gVjMgICAgICAgICAgICAgICAgICAgIFsyMzA0OjAxMTNdCisgNjUgLT4gTm9nYXRlY2ggVVNCIE1pY3JvQ2FtIE5UU0MgKE5WMzAwME4pICAgICAgICAgICAgICAgICAgICAgWzA1NzM6MzAwMF0KKyA2NiAtPiBOb2dhdGVjaCBVU0IgTWljcm9DYW0gUEFMIChOVjMwMDFQKSAgICAgICAgICAgICAgICAgICAgICBbMDU3MzozMDAxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuZGF2aW5jaS12cGJlIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuZGF2aW5jaS12cGJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDYwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5kYXZpbmNpLXZwYmUKQEAgLTAsMCArMSw5MyBAQAorCisgICAgICAgICAgICAgICAgVlBCRSBWNEwyIGRyaXZlciBkZXNpZ24KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBGaWxlIHBhcnRpdGlvbmluZworIC0tLS0tLS0tLS0tLS0tLS0tCisgVjRMMiBkaXNwbGF5IGRldmljZSBkcml2ZXIKKyAgICAgICAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX2Rpc3BsYXkuYworICAgICAgICAgZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfZGlzcGxheS5oCisKKyBWUEJFIGRpc3BsYXkgY29udHJvbGxlcgorICAgICAgICAgZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmUuYworICAgICAgICAgZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmUuaAorCisgVlBCRSB2ZW5jIHN1YiBkZXZpY2UgZHJpdmVyCisgICAgICAgICBkcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV92ZW5jLmMKKyAgICAgICAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX3ZlbmMuaAorICAgICAgICAgZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfdmVuY19yZWdzLmgKKworIFZQQkUgb3NkIGRyaXZlcgorICAgICAgICAgZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfb3NkLmMKKyAgICAgICAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX29zZC5oCisgICAgICAgICBkcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV9vc2RfcmVncy5oCisKKyBGdW5jdGlvbmFsIHBhcnRpdGlvbmluZworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBDb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIChpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgbGlzdCB1bmRlciBmaWxlCisgcGFydGl0aW9uaW5nKTotCisKKyAxLiBWNEwyIGRpc3BsYXkgZHJpdmVyCisgICAgSW1wbGVtZW50cyBjcmVhdGlvbiBvZiB2aWRlbzIgYW5kIHZpZGVvMyBkZXZpY2Ugbm9kZXMgYW5kCisgICAgcHJvdmlkZXMgdjRsMiBkZXZpY2UgaW50ZXJmYWNlIHRvIG1hbmFnZSBWSUQwIGFuZCBWSUQxIGxheWVycy4KKworIDIuIERpc3BsYXkgY29udHJvbGxlcgorICAgIExvYWRzIHVwIFZFTkMsIE9TRCBhbmQgZXh0ZXJuYWwgZW5jb2RlcnMgc3VjaCBhcyB0aHM4MjAwLiBJdCBwcm92aWRlcworICAgIGEgc2V0IG9mIEFQSSBjYWxscyB0byBWNEwyIGRyaXZlcnMgdG8gc2V0IHRoZSBvdXRwdXQvc3RhbmRhcmRzCisgICAgaW4gdGhlIFZFTkMgb3IgZXh0ZXJuYWwgc3ViIGRldmljZXMuIEl0IGFsc28gcHJvdmlkZXMKKyAgICBhIGRldmljZSBvYmplY3QgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlcyBmcm9tIE9TRCBzdWJkZXZpY2UKKyAgICB1c2luZyBzdWIgZGV2aWNlIG9wcy4gVGhlIGNvbm5lY3Rpb24gb2YgZXh0ZXJuYWwgZW5jb2RlcnMgdG8gVkVOQyBMQ0QKKyAgICBjb250cm9sbGVyIHBvcnQgaXMgZG9uZSBhdCBpbml0IHRpbWUgYmFzZWQgb24gZGVmYXVsdCBvdXRwdXQgYW5kIHN0YW5kYXJkCisgICAgc2VsZWN0aW9uIG9yIGF0IHJ1biB0aW1lIHdoZW4gYXBwbGljYXRpb24gY2hhbmdlIHRoZSBvdXRwdXQgdGhyb3VnaAorICAgIFY0TDIgSU9DVExzLgorCisgICAgV2hlbiBjb25uZWN0ZWQgdG8gYW4gZXh0ZXJuYWwgZW5jb2RlciwgdnBiZSBjb250cm9sbGVyIGlzIGFsc28gcmVzcG9uc2libGUKKyAgICBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gVkVOQyBhbmQgZXh0ZXJuYWwgZW5jb2RlcnMgYmFzZWQgb24KKyAgICBib2FyZCBzcGVjaWZpYyBzZXR0aW5ncyAoc3BlY2lmaWVkIGluIGJvYXJkLXh4eC1ldm0uYykuIFRoaXMgYWxsb3dzCisgICAgaW50ZXJmYWNpbmcgZXh0ZXJuYWwgZW5jb2RlcnMgc3VjaCBhcyB0aHM4MjAwLiBUaGUgc2V0dXBfaWZfY29uZmlnKCkKKyAgICBpcyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBhcyB3ZWxsIGFzIGNvbmZpZ3VyZV92ZW5jKCkgKHBhcnQgb2YgdGhlIG5leHQgcGF0Y2gpCisgICAgQVBJIHRvIHNldCB0aW1pbmdzIGluIFZFTkMgZm9yIGEgc3BlY2lmaWMgZGlzcGxheSByZXNvbHV0aW9uLiBBcyBvZiB0aGlzCisgICAgcGF0Y2ggc2VyaWVzLCB0aGUgaW50ZXJjb25uZWN0aW9uIGFuZCBlbmFibGluZyBhbmQgc2V0dGluZyBvZiB0aGUgZXh0ZXJuYWwKKyAgICBlbmNvZGVycyBpcyBub3QgcHJlc2VudCwgYW5kIHdvdWxkIGJlIGEgcGFydCBvZiB0aGUgbmV4dCBwYXRjaCBzZXJpZXMuCisKKyAzLiBWRU5DIHN1YmRldmljZSBtb2R1bGUKKyAgICBSZXNwb25zaWJsZSBmb3Igc2V0dGluZyBvdXRwdXRzIHByb3ZpZGVkIHRocm91Z2ggaW50ZXJuYWwgREFDcyBhbmQgYWxzbworICAgIHNldHRpbmcgdGltaW5ncyBhdCBMQ0QgY29udHJvbGxlciBwb3J0IHdoZW4gZXh0ZXJuYWwgZW5jb2RlcnMgYXJlIGNvbm5lY3RlZAorICAgIGF0IHRoZSBwb3J0IG9yIExDRCBwYW5lbCB0aW1pbmdzIHJlcXVpcmVkLiBXaGVuIGV4dGVybmFsIGVuY29kZXIvTENEIHBhbmVsCisgICAgaXMgY29ubmVjdGVkLCB0aGUgdGltaW5ncyBmb3IgYSBzcGVjaWZpYyBzdGFuZGFyZC9wcmVzZXQgaXMgcmV0cmlldmVkIGZyb20KKyAgICB0aGUgYm9hcmQgc3BlY2lmaWMgdGFibGUgYW5kIHRoZSB2YWx1ZXMgYXJlIHVzZWQgdG8gc2V0IHRoZSB0aW1pbmdzIGluCisgICAgdmVuYyB1c2luZyBub24tc3RhbmRhcmQgdGltaW5nIG1vZGUuCisKKyAgICBTdXBwb3J0IExDRCBQYW5lbCBkaXNwbGF5cyB1c2luZyB0aGUgVkVOQy4gRm9yIGV4YW1wbGUgdG8gc3VwcG9ydCBhIExvZ2ljCisgICAgUEQgZGlzcGxheSwgaXQgcmVxdWlyZXMgc2V0dGluZyB1cCB0aGUgTENEIGNvbnRyb2xsZXIgcG9ydCB3aXRoIGEgc2V0IG9mCisgICAgdGltaW5ncyBmb3IgdGhlIHJlc29sdXRpb24gc3VwcG9ydGVkIGFuZCBzZXR0aW5nIHRoZSBkb3QgY2xvY2suIFNvIHdlIGNvdWxkCisgICAgYWRkIHRoZSBhdmFpbGFibGUgb3V0cHV0cyBhcyBhIGJvYXJkIHNwZWNpZmljIGVudHJ5IChpLmUgYWRkIHRoZSAiTG9naWNQRCIKKyAgICBvdXRwdXQgbmFtZSB0byBib2FyZC14eHgtZXZtLmMpLiBBIHRhYmxlIG9mIHRpbWluZ3MgZm9yIHZhcmlvdXMgTENEcworICAgIHN1cHBvcnRlZCBjYW4gYmUgbWFpbnRhaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgc2V0dXAgZmlsZSB0byBzdXBwb3J0CisgICAgdmFyaW91cyBMQ0QgZGlzcGxheXMuQXMgb2YgdGhpcyBwYXRjaCBhIGJhc2ljIGRyaXZlciBpcyBwcmVzZW50LCBhbmQgdGhpcworICAgIHN1cHBvcnQgZm9yIGV4dGVybmFsIGVuY29kZXJzIGFuZCBkaXNwbGF5cyBmb3JtcyBhIHBhcnQgb2YgdGhlIG5leHQKKyAgICBwYXRjaCBzZXJpZXMuCisKKyA0LiBPU0QgbW9kdWxlCisgICAgT1NEIG1vZHVsZSBpbXBsZW1lbnRzIGFsbCBPU0QgbGF5ZXIgbWFuYWdlbWVudCBhbmQgaGFyZHdhcmUgc3BlY2lmaWMKKyAgICBmZWF0dXJlcy4gVGhlIFZQQkUgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBPU0QgZm9yIGVuYWJsaW5nIGFuZAorICAgIGRpc2FibGluZyBhcHByb3ByaWF0ZSBmZWF0dXJlcyBvZiB0aGUgT1NELgorCisgQ3VycmVudCBzdGF0dXM6LQorCisgQSBmdWxseSBmdW5jdGlvbmFsIHdvcmtpbmcgdmVyc2lvbiBvZiB0aGUgVjRMMiBkcml2ZXIgaXMgYXZhaWxhYmxlLiBUaGlzCisgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIE5UU0MgYW5kIFBBTCBzdGFuZGFyZHMgYW5kIGJ1ZmZlciBzdHJlYW1pbmcuCisKKyBGb2xsb3dpbmcgYXJlIFRCRHMuCisKKyB2cGJlIGRpc3BsYXkgY29udHJvbGxlcgorICAgIC0gQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIGVuY29kZXJzLgorICAgIC0gYWRkIHN1cHBvcnQgZm9yIHNlbGVjdGluZyBleHRlcm5hbCBlbmNvZGVyIGFzIGRlZmF1bHQgYXQgcHJvYmUgdGltZS4KKworIHZwYmUgdmVuYyBzdWIgZGV2aWNlCisgICAgLSBhZGQgdGltaW5ncyBmb3Igc3VwcG9ydGluZyB0aHM4MjAwCisgICAgLSBhZGQgc3VwcG9ydCBmb3IgTG9naWNQRCBMQ0QuCisKKyBGQiBkcml2ZXJzCisgICAgLSBBZGQgc3VwcG9ydCBmb3IgZmJkZXYgZHJpdmVycy4tIFJlYWR5IGFuZCBwYXJ0IG9mIHN1YnNlcXVlbnQgcGF0Y2hlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1jb250cm9scy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItY29udHJvbHMudHh0CmluZGV4IDg4MWU3ZjQuLjkzNDZmYzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1jb250cm9scy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWNvbnRyb2xzLnR4dApAQCAtMjc3LDE2ICsyNzcsMTMgQEAKIAl7CiAJCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY3RybC0+Y3VyLnZhbCA9IHJlYWRfcmVnKDB4MTIzKTsKKwkJCWN0cmwtPnZhbCA9IHJlYWRfcmVnKDB4MTIzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi1UaGUgJ25ldyB2YWx1ZScgdW5pb24gaXMgbm90IHVzZWQgaW4gZ192b2xhdGlsZV9jdHJsLiBJbiBnZW5lcmFsIGNvbnRyb2xzCi10aGF0IG5lZWQgdG8gaW1wbGVtZW50IGdfdm9sYXRpbGVfY3RybCBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLgotCi1Ob3RlIHRoYXQgaWYgb25lIG9yIG1vcmUgY29udHJvbHMgaW4gYSBjb250cm9sIGNsdXN0ZXIgYXJlIG1hcmtlZCBhcyB2b2xhdGlsZSwKLXRoZW4gYWxsIHRoZSBjb250cm9scyBpbiB0aGUgY2x1c3RlciBhcmUgc2VlbiBhcyB2b2xhdGlsZS4KK05vdGUgdGhhdCB5b3UgdXNlIHRoZSAnbmV3IHZhbHVlJyB1bmlvbiBhcyB3ZWxsIGluIGdfdm9sYXRpbGVfY3RybC4gSW4gZ2VuZXJhbAorY29udHJvbHMgdGhhdCBuZWVkIHRvIGltcGxlbWVudCBnX3ZvbGF0aWxlX2N0cmwgYXJlIHJlYWQtb25seSBjb250cm9scy4KIAogVG8gbWFyayBhIGNvbnRyb2wgYXMgdm9sYXRpbGUgeW91IGhhdmUgdG8gc2V0IHRoZSBpc192b2xhdGlsZSBmbGFnOgogCkBAIC00NTMsNiArNDUwLDI1IEBACiAJY3RybCA9PSBjdHJsLT5jbHVzdGVyW0FVRElPX0NMX1ZPTFVNRV0gPT0gc3RhdGUtPmF1ZGlvX2NsdXN0ZXJbQVVESU9fQ0xfVk9MVU1FXQogCWN0cmwtPmNsdXN0ZXJbQVVESU9fQ0xfTVVURV0gPT0gc3RhdGUtPmF1ZGlvX2NsdXN0ZXJbQVVESU9fQ0xfTVVURV0KIAorSW4gcHJhY3RpY2UgdXNpbmcgY2x1c3RlciBhcnJheXMgbGlrZSB0aGlzIGJlY29tZXMgdmVyeSB0aXJlc29tZS4gU28gaW5zdGVhZAordGhlIGZvbGxvd2luZyBlcXVpdmFsZW50IG1ldGhvZCBpcyB1c2VkOgorCisJc3RydWN0IHsKKwkJLyogYXVkaW8gY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2b2x1bWU7CisJCXN0cnVjdCB2NGwyX2N0cmwgKm11dGU7CisJfTsKKworVGhlIGFub255bW91cyBzdHJ1Y3QgaXMgdXNlZCB0byBjbGVhcmx5ICdjbHVzdGVyJyB0aGVzZSB0d28gY29udHJvbCBwb2ludGVycywKK2J1dCBpdCBzZXJ2ZXMgbm8gb3RoZXIgcHVycG9zZS4gVGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBjcmVhdGluZyBhbgorYXJyYXkgd2l0aCB0d28gY29udHJvbCBwb2ludGVycy4gU28geW91IGNhbiBqdXN0IGRvOgorCisJc3RhdGUtPnZvbHVtZSA9IHY0bDJfY3RybF9uZXdfc3RkKCZzdGF0ZS0+Y3RybF9oYW5kbGVyLCAuLi4pOworCXN0YXRlLT5tdXRlID0gdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5jdHJsX2hhbmRsZXIsIC4uLik7CisJdjRsMl9jdHJsX2NsdXN0ZXIoMiwgJnN0YXRlLT52b2x1bWUpOworCitBbmQgaW4gZm9vX3NfY3RybCB5b3UgY2FuIHVzZSB0aGVzZSBwb2ludGVycyBkaXJlY3RseTogc3RhdGUtPm11dGUtPnZhbC4KKwogTm90ZSB0aGF0IGNvbnRyb2xzIGluIGEgY2x1c3RlciBtYXkgYmUgTlVMTC4gRm9yIGV4YW1wbGUsIGlmIGZvciBzb21lCiByZWFzb24gbXV0ZSB3YXMgbmV2ZXIgYWRkZWQgKGJlY2F1c2UgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0CiBwYXJ0aWN1bGFyIGZlYXR1cmUpLCB0aGVuIG11dGUgd2lsbCBiZSBOVUxMLiBTbyBpbiB0aGF0IGNhc2Ugd2UgaGF2ZSBhCkBAIC00NzUsNiArNDkxLDQzIEBACiBUaGUgJ2lzX25ldycgZmxhZyBpcyBhbHdheXMgMSB3aGVuIGNhbGxlZCBmcm9tIHY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCkuCiAKIAorSGFuZGxpbmcgYXV0b2dhaW4vZ2Fpbi10eXBlIENvbnRyb2xzIHdpdGggQXV0byBDbHVzdGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIGNvbW1vbiB0eXBlIG9mIGNvbnRyb2wgY2x1c3RlciBpcyBvbmUgdGhhdCBoYW5kbGVzICdhdXRvLWZvby9mb28nLXR5cGUKK2NvbnRyb2xzLiBUeXBpY2FsIGV4YW1wbGVzIGFyZSBhdXRvZ2Fpbi9nYWluLCBhdXRvZXhwb3N1cmUvZXhwb3N1cmUsCithdXRvd2hpdGViYWxhbmNlL3JlZCBiYWxhbmNlL2JsdWUgYmFsYW5jZS4gSW4gYWxsIGNhc2VzIHlvdSBoYXZlIG9uZSBjb250cm9scwordGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW5vdGhlciBjb250cm9sIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgaGFyZHdhcmUsCitvciB3aGV0aGVyIGl0IGlzIHVuZGVyIG1hbnVhbCBjb250cm9sIGZyb20gdGhlIHVzZXIuCisKK0lmIHRoZSBjbHVzdGVyIGlzIGluIGF1dG9tYXRpYyBtb2RlLCB0aGVuIHRoZSBtYW51YWwgY29udHJvbHMgc2hvdWxkIGJlCittYXJrZWQgaW5hY3RpdmUuIFdoZW4gdGhlIHZvbGF0aWxlIGNvbnRyb2xzIGFyZSByZWFkIHRoZSBnX3ZvbGF0aWxlX2N0cmwKK29wZXJhdGlvbiBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHRoZSBoYXJkd2FyZSdzIGF1dG9tYXRpYyBtb2RlIHNldCB1cAorYXV0b21hdGljYWxseS4KKworSWYgdGhlIGNsdXN0ZXIgaXMgcHV0IGluIG1hbnVhbCBtb2RlLCB0aGVuIHRoZSBtYW51YWwgY29udHJvbHMgc2hvdWxkIGJlY29tZQorYWN0aXZlIGFnYWluIGFuZCB0aGUgaXNfdm9sYXRpbGUgZmxhZyBzaG91bGQgYmUgaWdub3JlZCAoc28gZ192b2xhdGlsZV9jdHJsIGlzCitubyBsb25nZXIgY2FsbGVkIHdoaWxlIGluIG1hbnVhbCBtb2RlKS4KKworRmluYWxseSB0aGUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIHNob3VsZCBiZSBzZXQgZm9yIHRoZSBhdXRvIGNvbnRyb2wgc2luY2UKK2NoYW5naW5nIHRoYXQgY29udHJvbCBhZmZlY3RzIHRoZSBjb250cm9sIGZsYWdzIG9mIHRoZSBtYW51YWwgY29udHJvbHMuCisKK0luIG9yZGVyIHRvIHNpbXBsaWZ5IHRoaXMgYSBzcGVjaWFsIHZhcmlhdGlvbiBvZiB2NGwyX2N0cmxfY2x1c3RlciB3YXMKK2ludHJvZHVjZWQ6CisKK3ZvaWQgdjRsMl9jdHJsX2F1dG9fY2x1c3Rlcih1bnNpZ25lZCBuY29udHJvbHMsIHN0cnVjdCB2NGwyX2N0cmwgKipjb250cm9scywKKwkJCXU4IG1hbnVhbF92YWwsIGJvb2wgc2V0X3ZvbGF0aWxlKTsKKworVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlkZW50aWNhbCB0byB2NGwyX2N0cmxfY2x1c3Rlci4gVGhlIHRoaXJkIGFyZ3VtZW50Cit0ZWxscyB0aGUgZnJhbWV3b3JrIHdoaWNoIHZhbHVlIHN3aXRjaGVzIHRoZSBjbHVzdGVyIGludG8gbWFudWFsIG1vZGUuIFRoZQorbGFzdCBhcmd1bWVudCB3aWxsIG9wdGlvbmFsbHkgc2V0IHRoZSBpc192b2xhdGlsZSBmbGFnIGZvciB0aGUgbm9uLWF1dG8gY29udHJvbHMuCisKK1RoZSBmaXJzdCBjb250cm9sIG9mIHRoZSBjbHVzdGVyIGlzIGFzc3VtZWQgdG8gYmUgdGhlICdhdXRvJyBjb250cm9sLgorCitVc2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgeW91IGRvbid0IG5lZWQgdG8gaGFuZGxlIGFsbCB0aGUgY29tcGxleAorZmxhZyBhbmQgdm9sYXRpbGUgaGFuZGxpbmcuCisKKwogVklESU9DX0xPR19TVEFUVVMgU3VwcG9ydAogPT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02MzYsOSArNjg5LDcgQEAKIC1FSU5WQUwgYXMgdGhlIHNwZWMgc2F5cy4KIAogNSkgVGhlIHNwZWMgZG9lcyBub3QgbWVudGlvbiB3aGF0IHNob3VsZCBoYXBwZW4gd2hlbiB5b3UgdHJ5IHRvIHNldC9nZXQgYQotY29udHJvbCBjbGFzcyBjb250cm9scy4gaXZ0diBjdXJyZW50bHkgcmV0dXJucyAtRUlOVkFMIChpbmRpY2F0aW5nIHRoYXQgdGhlCi1jb250cm9sIElEIGRvZXMgbm90IGV4aXN0KSB3aGlsZSB0aGUgZnJhbWV3b3JrIHdpbGwgcmV0dXJuIC1FQUNDRVMsIHdoaWNoCi1tYWtlcyBtb3JlIHNlbnNlLgorY29udHJvbCBjbGFzcyBjb250cm9scy4gVGhlIGZyYW1ld29yayB3aWxsIHJldHVybiAtRUFDQ0VTLgogCiAKIFByb3Bvc2FscyBmb3IgRXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCBjZjIxZjdhLi5mOGRjYWJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtODE3LDExICs4MTcsNyBAQAogCiAJLi4uCiAKLQlyZXQgPSB2NGwyX2ZoX2luaXQoJm15X2ZoLT5maCwgdmZkKTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKG15X2ZoKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJdjRsMl9maF9pbml0KCZteV9maC0+ZmgsIHZmZCk7CiAKIAkuLi4KIApAQCAtODQ0LDcgKzg0MCw3IEBACiAKIEJlbG93IGlzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHY0bDJfZmggZnVuY3Rpb25zIHVzZWQ6CiAKLWludCB2NGwyX2ZoX2luaXQoc3RydWN0IHY0bDJfZmggKmZoLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQordm9pZCB2NGwyX2ZoX2luaXQoc3RydWN0IHY0bDJfZmggKmZoLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQogCiAgIEluaXRpYWxpc2UgdGhlIGZpbGUgaGFuZGxlLiBUaGlzICpNVVNUKiBiZSBwZXJmb3JtZWQgaW4gdGhlIGRyaXZlcidzCiAgIHY0bDJfZmlsZV9vcGVyYXRpb25zLT5vcGVuKCkgaGFuZGxlci4KQEAgLTkwMSwxNSArODk3LDM5IEBACiBUaGUgVjRMMiBldmVudHMgcHJvdmlkZSBhIGdlbmVyaWMgd2F5IHRvIHBhc3MgZXZlbnRzIHRvIHVzZXIgc3BhY2UuCiBUaGUgZHJpdmVyIG11c3QgdXNlIHY0bDJfZmggdG8gYmUgYWJsZSB0byBzdXBwb3J0IFY0TDIgZXZlbnRzLgogCitFdmVudHMgYXJlIGRlZmluZWQgYnkgYSB0eXBlIGFuZCBhbiBvcHRpb25hbCBJRC4gVGhlIElEIG1heSByZWZlciB0byBhIFY0TDIKK29iamVjdCBzdWNoIGFzIGEgY29udHJvbCBJRC4gSWYgdW51c2VkLCB0aGVuIHRoZSBJRCBpcyAwLgorCitXaGVuIHRoZSB1c2VyIHN1YnNjcmliZXMgdG8gYW4gZXZlbnQgdGhlIGRyaXZlciB3aWxsIGFsbG9jYXRlIGEgbnVtYmVyIG9mCitrZXZlbnQgc3RydWN0cyBmb3IgdGhhdCBldmVudC4gU28gZXZlcnkgKHR5cGUsIElEKSBldmVudCB0dXBsZSB3aWxsIGhhdmUKK2l0cyBvd24gc2V0IG9mIGtldmVudCBzdHJ1Y3RzLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBpZiBhIGRyaXZlciBpcyBnZW5lcmF0aW5nCitsb3RzIG9mIGV2ZW50cyBvZiBvbmUgdHlwZSBpbiBhIHNob3J0IHRpbWUsIHRoZW4gdGhhdCB3aWxsIG5vdCBvdmVyd3JpdGUKK2V2ZW50cyBvZiBhbm90aGVyIHR5cGUuCisKK0J1dCBpZiB5b3UgZ2V0IG1vcmUgZXZlbnRzIG9mIG9uZSB0eXBlIHRoYW4gdGhlIG51bWJlciBvZiBrZXZlbnRzIHRoYXQgd2VyZQorcmVzZXJ2ZWQsIHRoZW4gdGhlIG9sZGVzdCBldmVudCB3aWxsIGJlIGRyb3BwZWQgYW5kIHRoZSBuZXcgb25lIGFkZGVkLgorCitGdXJ0aGVybW9yZSwgdGhlIGludGVybmFsIHN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgaGFzIG1lcmdlKCkgYW5kCityZXBsYWNlKCkgY2FsbGJhY2tzIHdoaWNoIGRyaXZlcnMgY2FuIHNldC4gVGhlc2UgY2FsbGJhY2tzIGFyZSBjYWxsZWQgd2hlbgorYSBuZXcgZXZlbnQgaXMgcmFpc2VkIGFuZCB0aGVyZSBpcyBubyBtb3JlIHJvb20uIFRoZSByZXBsYWNlKCkgY2FsbGJhY2sKK2FsbG93cyB5b3UgdG8gcmVwbGFjZSB0aGUgcGF5bG9hZCBvZiB0aGUgb2xkIGV2ZW50IHdpdGggdGhhdCBvZiB0aGUgbmV3IGV2ZW50LAorbWVyZ2luZyBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgcGF5bG9hZCBpbnRvIHRoZSBuZXcgcGF5bG9hZCB0aGF0CityZXBsYWNlcyBpdC4gSXQgaXMgY2FsbGVkIHdoZW4gdGhpcyBldmVudCB0eXBlIGhhcyBvbmx5IG9uZSBrZXZlbnQgc3RydWN0CithbGxvY2F0ZWQuIFRoZSBtZXJnZSgpIGNhbGxiYWNrIGFsbG93cyB5b3UgdG8gbWVyZ2UgdGhlIG9sZGVzdCBldmVudCBwYXlsb2FkCitpbnRvIHRoYXQgb2YgdGhlIHNlY29uZC1vbGRlc3QgZXZlbnQgcGF5bG9hZC4gSXQgaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIHR3bworb3IgbW9yZSBrZXZlbnQgc3RydWN0cyBhbGxvY2F0ZWQuCisKK1RoaXMgd2F5IG5vIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyBsb3N0LCBqdXN0IHRoZSBpbnRlcm1lZGlhdGUgc3RlcHMgbGVhZGluZwordXAgdG8gdGhhdCBzdGF0ZS4KKworQSBnb29kIGV4YW1wbGUgb2YgdGhlc2UgcmVwbGFjZS9tZXJnZSBjYWxsYmFja3MgaXMgaW4gdjRsMi1ldmVudC5jOgorY3RybHNfcmVwbGFjZSgpIGFuZCBjdHJsc19tZXJnZSgpIGNhbGxiYWNrcyBmb3IgdGhlIGNvbnRyb2wgZXZlbnQuCisKK05vdGU6IHRoZXNlIGNhbGxiYWNrcyBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIHRoZXkgbXVzdCBiZQorZmFzdC4KKwogVXNlZnVsIGZ1bmN0aW9uczoKIAotLSB2NGwyX2V2ZW50X2FsbG9jKCkKLQotICBUbyB1c2UgZXZlbnRzLCB0aGUgZHJpdmVyIG11c3QgYWxsb2NhdGUgZXZlbnRzIGZvciB0aGUgZmlsZSBoYW5kbGUuIEJ5Ci0gIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG1vcmUgdGhhbiBvbmNlLCB0aGUgZHJpdmVyIG1heSBhc3N1cmUgdGhhdCBhdCBsZWFzdCBuCi0gIGV2ZW50cyBpbiB0b3RhbCBoYXZlIGJlZW4gYWxsb2NhdGVkLiBUaGUgZnVuY3Rpb24gbWF5IG5vdCBiZSBjYWxsZWQgaW4KLSAgYXRvbWljIGNvbnRleHQuCi0KIC0gdjRsMl9ldmVudF9xdWV1ZSgpCiAKICAgUXVldWUgZXZlbnRzIHRvIHZpZGVvIGRldmljZS4gVGhlIGRyaXZlcidzIG9ubHkgcmVzcG9uc2liaWxpdHkgaXMgdG8gZmlsbApAQCAtOTIwLDcgKzk0MCw5IEBACiAKICAgVGhlIHZpZGVvX2RldmljZS0+aW9jdGxfb3BzLT52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50IG11c3QgY2hlY2sgdGhlIGRyaXZlcgogICBpcyBhYmxlIHRvIHByb2R1Y2UgZXZlbnRzIHdpdGggc3BlY2lmaWVkIGV2ZW50IGlkLiBUaGVuIGl0IGNhbGxzCi0gIHY0bDJfZXZlbnRfc3Vic2NyaWJlKCkgdG8gc3Vic2NyaWJlIHRoZSBldmVudC4KKyAgdjRsMl9ldmVudF9zdWJzY3JpYmUoKSB0byBzdWJzY3JpYmUgdGhlIGV2ZW50LiBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUKKyAgc2l6ZSBvZiB0aGUgZXZlbnQgcXVldWUgZm9yIHRoaXMgZXZlbnQuIElmIGl0IGlzIDAsIHRoZW4gdGhlIGZyYW1ld29yaworICB3aWxsIGZpbGwgaW4gYSBkZWZhdWx0IHZhbHVlICh0aGlzIGRlcGVuZHMgb24gdGhlIGV2ZW50IHR5cGUpLgogCiAtIHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUoKQogCkBAIC05MzUsMTQgKzk1Nyw4IEBACiAKICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgZXZlbnRzLiBVc2VmdWwgd2hlbiBpbXBsZW1lbnRpbmcgcG9sbC4KIAotRHJpdmVycyBkbyBub3QgaW5pdGlhbGlzZSBldmVudHMgZGlyZWN0bHkuIFRoZSBldmVudHMgYXJlIGluaXRpYWxpc2VkCi10aHJvdWdoIHY0bDJfZmhfaW5pdCgpIGlmIHZpZGVvX2RldmljZS0+aW9jdGxfb3BzLT52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50IGlzCi1ub24tTlVMTC4gVGhpcyAqTVVTVCogYmUgcGVyZm9ybWVkIGluIHRoZSBkcml2ZXIncwotdjRsMl9maWxlX29wZXJhdGlvbnMtPm9wZW4oKSBoYW5kbGVyLgotCiBFdmVudHMgYXJlIGRlbGl2ZXJlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIHBvbGwgc3lzdGVtIGNhbGwuIFRoZSBkcml2ZXIKLWNhbiB1c2UgdjRsMl9maC0+ZXZlbnRzLT53YWl0IHdhaXRfcXVldWVfaGVhZF90IGFzIHRoZSBhcmd1bWVudCBmb3IKLXBvbGxfd2FpdCgpLgorY2FuIHVzZSB2NGwyX2ZoLT53YWl0IChhIHdhaXRfcXVldWVfaGVhZF90KSBhcyB0aGUgYXJndW1lbnQgZm9yIHBvbGxfd2FpdCgpLgogCiBUaGVyZSBhcmUgc3RhbmRhcmQgYW5kIHByaXZhdGUgZXZlbnRzLiBOZXcgc3RhbmRhcmQgZXZlbnRzIG11c3QgdXNlIHRoZQogc21hbGxlc3QgYXZhaWxhYmxlIGV2ZW50IHR5cGUuIFRoZSBkcml2ZXJzIG11c3QgYWxsb2NhdGUgdGhlaXIgZXZlbnRzIGZyb20KQEAgLTk1Miw1ICs5NjgsNCBAQAogYXZhaWxhYmxlIGV2ZW50IHR5cGUgaXMgJ2NsYXNzIGJhc2UgKyAxJy4KIAogQW4gZXhhbXBsZSBvbiBob3cgdGhlIFY0TDIgZXZlbnRzIG1heSBiZSB1c2VkIGNhbiBiZSBmb3VuZCBpbiB0aGUgT01BUAotMyBJU1AgZHJpdmVyIGF2YWlsYWJsZSBhdCA8VVJMOmh0dHA6Ly9naXRvcmlvdXMub3JnL29tYXAzY2FtZXJhPiBhcyBvZgotd3JpdGluZyB0aGlzLgorMyBJU1AgZHJpdmVyIChkcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC8wMC1JTkRFWAppbmRleCBmZTAyNTFjLi44ZTYwMTk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsLzAwLUlOREVYCkBAIC04LDMgKzgsNiBAQAogCS0gRXh0cmVtZWx5IHNpbXBsZSBoeXBlcnZpc29yIGZvciBleHBlcmltZW50YWwvZWR1Y2F0aW9uYWwgdXNlLgogdW1sLwogCS0gVXNlciBNb2RlIExpbnV4LCBidWlsZHMvcnVucyBMaW51eCBrZXJuZWwgYXMgYSB1c2Vyc3BhY2UgcHJvZ3JhbS4KK3ZpcnRpby50eHQKKwktIFRleHQgdmVyc2lvbiBvZiBkcmFmdCB2aXJ0aW8gc3BlYy4KKyAgICAgICAgICBTZWUgaHR0cDovL296bGFicy5vcmcvfnJ1c3R5L3ZpcnRpby1zcGVjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYwppbmRleCAwNDNiZDdkLi5kOTI4YzEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMKQEAgLTE5OTYsNiArMTk5Niw5IEBACiAJLyogV2UgdXNlIGEgc2ltcGxlIGhlbHBlciB0byBjb3B5IHRoZSBhcmd1bWVudHMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gKi8KIAljb25jYXQoKGNoYXIgKikoYm9vdCArIDEpLCBhcmd2K29wdGluZCsyKTsKIAorCS8qIFNldCBrZXJuZWwgYWxpZ25tZW50IHRvIDE2TSAoQ09ORklHX1BIWVNJQ0FMX0FMSUdOKSAqLworCWJvb3QtPmhkci5rZXJuZWxfYWxpZ25tZW50ID0gMHgxMDAwMDAwOworCiAJLyogQm9vdCBwcm90b2NvbCB2ZXJzaW9uOiAyLjA3IHN1cHBvcnRzIHRoZSBmaWVsZHMgZm9yIGxndWVzdC4gKi8KIAlib290LT5oZHIudmVyc2lvbiA9IDB4MjA3OwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvdmlydGlvLXNwZWMudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL3ZpcnRpby1zcGVjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzUwYWUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL3ZpcnRpby1zcGVjLnR4dApAQCAtMCwwICsxLDIyMDAgQEAKK1tHZW5lcmF0ZWQgZmlsZTogc2VlIGh0dHA6Ly9vemxhYnMub3JnL35ydXN0eS92aXJ0aW8tc3BlYy9dCitWaXJ0aW8gUENJIENhcmQgU3BlY2lmaWNhdGlvbgordjAuOS4xIERSQUZUCistCisKK1J1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT5JQk0gQ29ycG9yYXRpb24gKEVkaXRvcikKKworMjAxMSBBdWd1c3QgMS4KKworUHVycG9zZSBhbmQgRGVzY3JpcHRpb24KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHNwZWNpZmljYXRpb25zIG9mIHRoZSDigJx2aXJ0aW/igJ0gZmFtaWx5CitvZiBQQ0lbTGFUZVggQ29tbWFuZDogbm9tZW5jbGF0dXJlXSBkZXZpY2VzLiBUaGVzZSBhcmUgZGV2aWNlcworYXJlIGZvdW5kIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzW0xhVGVYIENvbW1hbmQ6IG5vbWVuY2xhdHVyZV0sCit5ZXQgYnkgZGVzaWduIHRoZXkgYXJlIG5vdCBhbGwgdGhhdCBkaWZmZXJlbnQgZnJvbSBwaHlzaWNhbCBQQ0kKK2RldmljZXMsIGFuZCB0aGlzIGRvY3VtZW50IHRyZWF0cyB0aGVtIGFzIHN1Y2guIFRoaXMgYWxsb3dzIHRoZQorZ3Vlc3QgdG8gdXNlIHN0YW5kYXJkIFBDSSBkcml2ZXJzIGFuZCBkaXNjb3ZlcnkgbWVjaGFuaXNtcy4KKworVGhlIHB1cnBvc2Ugb2YgdmlydGlvIGFuZCB0aGlzIHNwZWNpZmljYXRpb24gaXMgdGhhdCB2aXJ0dWFsCitlbnZpcm9ubWVudHMgYW5kIGd1ZXN0cyBzaG91bGQgaGF2ZSBhIHN0cmFpZ2h0Zm9yd2FyZCwgZWZmaWNpZW50LAorc3RhbmRhcmQgYW5kIGV4dGVuc2libGUgbWVjaGFuaXNtIGZvciB2aXJ0dWFsIGRldmljZXMsIHJhdGhlcgordGhhbiBib3V0aXF1ZSBwZXItZW52aXJvbm1lbnQgb3IgcGVyLU9TIG1lY2hhbmlzbXMuCisKKyAgU3RyYWlnaHRmb3J3YXJkOiBWaXJ0aW8gUENJIGRldmljZXMgdXNlIG5vcm1hbCBQQ0kgbWVjaGFuaXNtcworICBvZiBpbnRlcnJ1cHRzIGFuZCBETUEgd2hpY2ggc2hvdWxkIGJlIGZhbWlsaWFyIHRvIGFueSBkZXZpY2UKKyAgZHJpdmVyIGF1dGhvci4gVGhlcmUgaXMgbm8gZXhvdGljIHBhZ2UtZmxpcHBpbmcgb3IgQ09XCisgIG1lY2hhbmlzbTogaXQncyBqdXN0IGEgUENJIGRldmljZS5bZm9vdG5vdGU6CitUaGlzIGxhY2sgb2YgcGFnZS1zaGFyaW5nIGltcGxpZXMgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCitkZXZpY2UgKGUuZy4gdGhlIGh5cGVydmlzb3Igb3IgaG9zdCkgbmVlZHMgZnVsbCBhY2Nlc3MgdG8gdGhlCitndWVzdCBtZW1vcnkuIENvbW11bmljYXRpb24gd2l0aCB1bnRydXN0ZWQgcGFydGllcyAoaS5lLgoraW50ZXItZ3Vlc3QgY29tbXVuaWNhdGlvbikgcmVxdWlyZXMgY29weWluZy4KK10KKworICBFZmZpY2llbnQ6IFZpcnRpbyBQQ0kgZGV2aWNlcyBjb25zaXN0IG9mIHJpbmdzIG9mIGRlc2NyaXB0b3JzCisgIGZvciBpbnB1dCBhbmQgb3V0cHV0LCB3aGljaCBhcmUgbmVhdGx5IHNlcGFyYXRlZCB0byBhdm9pZCBjYWNoZQorICBlZmZlY3RzIGZyb20gYm90aCBndWVzdCBhbmQgZGV2aWNlIHdyaXRpbmcgdG8gdGhlIHNhbWUgY2FjaGUKKyAgbGluZXMuCisKKyAgU3RhbmRhcmQ6IFZpcnRpbyBQQ0kgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGVudmlyb25tZW50CisgIGluIHdoaWNoIGl0IG9wZXJhdGVzLCBiZXlvbmQgc3VwcG9ydGluZyBQQ0kuIEluIGZhY3QgdGhlIHZpcnRpbworICBkZXZpY2VzIHNwZWNpZmllZCBpbiB0aGUgYXBwZW5kaWNlcyBkbyBub3QgcmVxdWlyZSBQQ0kgYXQgYWxsOgorICB0aGV5IGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBvbiBub24tUENJIGJ1c2VzLltmb290bm90ZToKK1RoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBmdXJ0aGVyIHNlcGFyYXRlcyB0aGUgUENJIHZpcnRpbyBjb2RlCitmcm9tIHRoZSBzcGVjaWZpYyB2aXJ0aW8gZHJpdmVyczogdGhlc2UgZHJpdmVycyBhcmUgc2hhcmVkIHdpdGgKK3RoZSBub24tUENJIGltcGxlbWVudGF0aW9ucyAoY3VycmVudGx5IGxndWVzdCBhbmQgUy8zOTApLgorXQorCisgIEV4dGVuc2libGU6IFZpcnRpbyBQQ0kgZGV2aWNlcyBjb250YWluIGZlYXR1cmUgYml0cyB3aGljaCBhcmUKKyAgYWNrbm93bGVkZ2VkIGJ5IHRoZSBndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGR1cmluZyBkZXZpY2Ugc2V0dXAuCisgIFRoaXMgYWxsb3dzIGZvcndhcmRzIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogdGhlIGRldmljZQorICBvZmZlcnMgYWxsIHRoZSBmZWF0dXJlcyBpdCBrbm93cyBhYm91dCwgYW5kIHRoZSBkcml2ZXIKKyAgYWNrbm93bGVkZ2VzIHRob3NlIGl0IHVuZGVyc3RhbmRzIGFuZCB3aXNoZXMgdG8gdXNlLgorCisgIFZpcnRxdWV1ZXMKKworVGhlIG1lY2hhbmlzbSBmb3IgYnVsayBkYXRhIHRyYW5zcG9ydCBvbiB2aXJ0aW8gUENJIGRldmljZXMgaXMKK3ByZXRlbnRpb3VzbHkgY2FsbGVkIGEgdmlydHF1ZXVlLiBFYWNoIGRldmljZSBjYW4gaGF2ZSB6ZXJvIG9yCittb3JlIHZpcnRxdWV1ZXM6IGZvciBleGFtcGxlLCB0aGUgbmV0d29yayBkZXZpY2UgaGFzIG9uZSBmb3IKK3RyYW5zbWl0IGFuZCBvbmUgZm9yIHJlY2VpdmUuCisKK0VhY2ggdmlydHF1ZXVlIG9jY3VwaWVzIHR3byBvciBtb3JlIHBoeXNpY2FsbHktY29udGlndW91cyBwYWdlcworKGRlZmluZWQsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzcGVjaWZpY2F0aW9uLCBhcyA0MDk2IGJ5dGVzKSwKK2FuZCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0czoKKworCisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKK3wgRGVzY3JpcHRvciBUYWJsZSAgfCAgIEF2YWlsYWJsZSBSaW5nICAgICAocGFkZGluZykgICAgfCBVc2VkIFJpbmcgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCisKKworV2hlbiB0aGUgZHJpdmVyIHdhbnRzIHRvIHNlbmQgYnVmZmVycyB0byB0aGUgZGV2aWNlLCBpdCBwdXRzIHRoZW0KK2luIG9uZSBvciBtb3JlIHNsb3RzIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlLCBhbmQgd3JpdGVzIHRoZQorZGVzY3JpcHRvciBpbmRpY2VzIGludG8gdGhlIGF2YWlsYWJsZSByaW5nLiBJdCB0aGVuIG5vdGlmaWVzIHRoZQorZGV2aWNlLiBXaGVuIHRoZSBkZXZpY2UgaGFzIGZpbmlzaGVkIHdpdGggdGhlIGJ1ZmZlcnMsIGl0IHdyaXRlcwordGhlIGRlc2NyaXB0b3JzIGludG8gdGhlIHVzZWQgcmluZywgYW5kIHNlbmRzIGFuIGludGVycnVwdC4KKworU3BlY2lmaWNhdGlvbgorCisgIFBDSSBEaXNjb3ZlcnkKKworQW55IFBDSSBkZXZpY2Ugd2l0aCBWZW5kb3IgSUQgMHgxQUY0LCBhbmQgRGV2aWNlIElEIDB4MTAwMAordGhyb3VnaCAweDEwM0YgaW5jbHVzaXZlIGlzIGEgdmlydGlvIGRldmljZVtmb290bm90ZToKK1RoZSBhY3R1YWwgdmFsdWUgd2l0aGluIHRoaXMgcmFuZ2UgaXMgaWdub3JlZAorXS4gVGhlIGRldmljZSBtdXN0IGFsc28gaGF2ZSBhIFJldmlzaW9uIElEIG9mIDAgdG8gbWF0Y2ggdGhpcworc3BlY2lmaWNhdGlvbi4KKworVGhlIFN1YnN5c3RlbSBEZXZpY2UgSUQgaW5kaWNhdGVzIHdoaWNoIHZpcnRpbyBkZXZpY2UgaXMKK3N1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGUgU3Vic3lzdGVtIFZlbmRvciBJRCBzaG91bGQgcmVmbGVjdAordGhlIFBDSSBWZW5kb3IgSUQgb2YgdGhlIGVudmlyb25tZW50IChpdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQKK2ZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIGJ5IHRoZSBndWVzdCkuCisKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCBTdWJzeXN0ZW0gRGV2aWNlIElEICB8ICAgVmlydGlvIERldmljZSAgICB8IFNwZWNpZmljYXRpb24gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAxICAgICAgICAgICB8ICAgbmV0d29yayBjYXJkICAgICB8ICBBcHBlbmRpeCBDICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAyICAgICAgICAgICB8ICAgYmxvY2sgZGV2aWNlICAgICB8ICBBcHBlbmRpeCBEICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAzICAgICAgICAgICB8ICAgICAgY29uc29sZSAgICAgICB8ICBBcHBlbmRpeCBFICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICA0ICAgICAgICAgICB8ICBlbnRyb3B5IHNvdXJjZSAgICB8ICBBcHBlbmRpeCBGICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICA1ICAgICAgICAgICB8IG1lbW9yeSBiYWxsb29uaW5nICB8ICBBcHBlbmRpeCBHICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICA2ICAgICAgICAgICB8ICAgICBpb01lbW9yeSAgICAgICB8ICAgICAgIC0gICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICA5ICAgICAgICAgICB8ICAgOVAgdHJhbnNwb3J0ICAgICB8ICAgICAgIC0gICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisKKyAgRGV2aWNlIENvbmZpZ3VyYXRpb24KKworVG8gY29uZmlndXJlIHRoZSBkZXZpY2UsIHdlIHVzZSB0aGUgZmlyc3QgSS9PIHJlZ2lvbiBvZiB0aGUgUENJCitkZXZpY2UuIFRoaXMgY29udGFpbnMgYSB2aXJ0aW8gaGVhZGVyIGZvbGxvd2VkIGJ5IGEKK2RldmljZS1zcGVjaWZpYyByZWdpb24uCisKK1RoZXJlIG1heSBiZSBkaWZmZXJlbnQgd2lkdGhzIG9mIGFjY2Vzc2VzIHRvIHRoZSBJL08gcmVnaW9uOyB0aGUg4oCcCituYXR1cmFs4oCdIGFjY2VzcyBtZXRob2QgZm9yIGVhY2ggZmllbGQgaW4gdGhlIHZpcnRpbyBoZWFkZXIgbXVzdAorYmUgdXNlZCAoaS5lLiAzMi1iaXQgYWNjZXNzZXMgZm9yIDMyLWJpdCBmaWVsZHMsIGV0YyksIGJ1dCB0aGUKK2RldmljZS1zcGVjaWZpYyByZWdpb24gY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIGFueSB3aWR0aCBhY2Nlc3NlcywKK2FuZCBzaG91bGQgb2J0YWluIHRoZSBzYW1lIHJlc3VsdHMuCisKK05vdGUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2hpbGUgdGhlIHZpcnRpbyBoZWFkZXIgaXMgUENJCisoaS5lLiBsaXR0bGUpIGVuZGlhbiwgdGhlIGRldmljZS1zcGVjaWZpYyByZWdpb24gaXMgZW5jb2RlZCBpbgordGhlIG5hdGl2ZSBlbmRpYW4gb2YgdGhlIGd1ZXN0ICh3aGVyZSBzdWNoIGRpc3RpbmN0aW9uIGlzCithcHBsaWNhYmxlKS4KKworICBEZXZpY2UgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UKKworV2Ugc3RhcnQgd2l0aCBhbiBvdmVydmlldyBvZiBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHRoZW4gZXhwYW5kCitvbiB0aGUgZGV0YWlscyBvZiB0aGUgZGV2aWNlIGFuZCBob3cgZWFjaCBzdGVwIGlzIHByZWZvcm1lZC4KKworICBSZXNldCB0aGUgZGV2aWNlLiBUaGlzIGlzIG5vdCByZXF1aXJlZCBvbiBpbml0aWFsIHN0YXJ0IHVwLgorCisgIFRoZSBBQ0tOT1dMRURHRSBzdGF0dXMgYml0IGlzIHNldDogd2UgaGF2ZSBub3RpY2VkIHRoZSBkZXZpY2UuCisKKyAgVGhlIERSSVZFUiBzdGF0dXMgYml0IGlzIHNldDogd2Uga25vdyBob3cgdG8gZHJpdmUgdGhlIGRldmljZS4KKworICBEZXZpY2Utc3BlY2lmaWMgc2V0dXAsIGluY2x1ZGluZyByZWFkaW5nIHRoZSBEZXZpY2UgRmVhdHVyZQorICBCaXRzLCBkaXNjb3Zlcnkgb2YgdmlydHF1ZXVlcyBmb3IgdGhlIGRldmljZSwgb3B0aW9uYWwgTVNJLVgKKyAgc2V0dXAsIGFuZCByZWFkaW5nIGFuZCBwb3NzaWJseSB3cml0aW5nIHRoZSB2aXJ0aW8KKyAgY29uZmlndXJhdGlvbiBzcGFjZS4KKworICBUaGUgc3Vic2V0IG9mIERldmljZSBGZWF0dXJlIEJpdHMgdW5kZXJzdG9vZCBieSB0aGUgZHJpdmVyIGlzCisgIHdyaXR0ZW4gdG8gdGhlIGRldmljZS4KKworICBUaGUgRFJJVkVSX09LIHN0YXR1cyBiaXQgaXMgc2V0LgorCisgIFRoZSBkZXZpY2UgY2FuIG5vdyBiZSB1c2VkIChpZS4gYnVmZmVycyBhZGRlZCB0byB0aGUKKyAgdmlydHF1ZXVlcylbZm9vdG5vdGU6CitIaXN0b3JpY2FsbHksIGRyaXZlcnMgaGF2ZSB1c2VkIHRoZSBkZXZpY2UgYmVmb3JlIHN0ZXBzIDUgYW5kIDYuCitUaGlzIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHVzZSBhbnkgZmVhdHVyZXMKK3doaWNoIHdvdWxkIGFsdGVyIHRoaXMgZWFybHkgdXNlIG9mIHRoZSBkZXZpY2UuCitdCisKK0lmIGFueSBvZiB0aGVzZSBzdGVwcyBnbyBpcnJlY292ZXJhYmx5IHdyb25nLCB0aGUgZ3Vlc3Qgc2hvdWxkCitzZXQgdGhlIEZBSUxFRCBzdGF0dXMgYml0IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGdpdmVuIHVwIG9uIHRoZQorZGV2aWNlIChpdCBjYW4gcmVzZXQgdGhlIGRldmljZSBsYXRlciB0byByZXN0YXJ0IGlmIGRlc2lyZWQpLgorCitXZSBub3cgY292ZXIgdGhlIGZpZWxkcyByZXF1aXJlZCBmb3IgZ2VuZXJhbCBzZXR1cCBpbiBkZXRhaWwuCisKKyAgVmlydGlvIEhlYWRlcgorCitUaGUgdmlydGlvIGhlYWRlciBsb29rcyBhcyBmb2xsb3dzOgorCisKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLSsKK3wgQml0cyAgICAgICB8fCAzMiAgICAgICAgICAgICAgICAgIHwgMzIgICAgICAgICAgICAgICAgICB8IDMyICAgICAgIHwgMTYgICAgIHwgMTYgICAgICB8IDE2ICAgICAgfCA4ICAgICAgIHwgOCAgICAgIHwKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLSsKK3wgUmVhZC9Xcml0ZSB8fCBSICAgICAgICAgICAgICAgICAgIHwgUitXICAgICAgICAgICAgICAgICB8IFIrVyAgICAgIHwgUiAgICAgIHwgUitXICAgICB8IFIrVyAgICAgfCBSK1cgICAgIHwgUiAgICAgIHwKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLSsKK3wgUHVycG9zZSAgICB8fCBEZXZpY2UgICAgICAgICAgICAgIHwgR3Vlc3QgICAgICAgICAgICAgICB8IFF1ZXVlICAgIHwgUXVldWUgIHwgUXVldWUgICB8IFF1ZXVlICAgfCBEZXZpY2UgIHwgSVNSICAgIHwKK3wgICAgICAgICAgICB8fCBGZWF0dXJlcyBiaXRzIDA6MzEgIHwgRmVhdHVyZXMgYml0cyAwOjMxICB8IEFkZHJlc3MgIHwgU2l6ZSAgIHwgU2VsZWN0ICB8IE5vdGlmeSAgfCBTdGF0dXMgIHwgU3RhdHVzIHwKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLSsKKworCitJZiBNU0ktWCBpcyBlbmFibGVkIGZvciB0aGUgZGV2aWNlLCB0d28gYWRkaXRpb25hbCBmaWVsZHMKK2ltbWVkaWF0ZWx5IGZvbGxvdyB0aGlzIGhlYWRlcjoKKworCisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKworfCBCaXRzICAgICAgIHx8IDE2ICAgICAgICAgICAgIHwgMTYgICAgIHwKKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKworfCBSZWFkL1dyaXRlIHx8IFIrVyAgICAgICAgICAgIHwgUitXICAgIHwKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCit8IFB1cnBvc2UgICAgfHwgQ29uZmlndXJhdGlvbiAgfCBRdWV1ZSAgfAorfCAoTVNJLVgpICAgIHx8IFZlY3RvciAgICAgICAgIHwgVmVjdG9yIHwKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCisKKworRmluYWxseSwgaWYgZmVhdHVyZSBiaXRzIChWSVJUSU9fRl9GRUFUVVJFU19ISSkgdGhpcyBpcworaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdHdvIGFkZGl0aW9uYWwgZmllbGRzOgorCisKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCBCaXRzICAgICAgIHx8IDMyICAgICAgICAgICAgICAgICAgIHwgMzIKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfCBSZWFkL1dyaXRlIHx8IFIgICAgICAgICAgICAgICAgICAgIHwgUitXCisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgUHVycG9zZSAgICB8fCBEZXZpY2UgICAgICAgICAgICAgICB8IEd1ZXN0Cit8ICAgICAgICAgICAgfHwgRmVhdHVyZXMgYml0cyAzMjo2MyAgfCBGZWF0dXJlcyBiaXRzIDMyOjYzCisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlc2UgZ2VuZXJhbCBoZWFkZXJzLCB0aGVyZSBtYXkgYmUKK2RldmljZS1zcGVjaWZpYyBoZWFkZXJzOgorCisKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBCaXRzICAgICAgIHx8IERldmljZSBTcGVjaWZpYyAgICB8CisgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZWFkL1dyaXRlIHx8IERldmljZSBTcGVjaWZpYyAgICB8CisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUHVycG9zZSAgICB8fCBEZXZpY2UgU3BlY2lmaWMuLi4gfAorfCAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisgIERldmljZSBTdGF0dXMKKworVGhlIERldmljZSBTdGF0dXMgZmllbGQgaXMgdXBkYXRlZCBieSB0aGUgZ3Vlc3QgdG8gaW5kaWNhdGUgaXRzCitwcm9ncmVzcy4gVGhpcyBwcm92aWRlcyBhIHNpbXBsZSBsb3ctbGV2ZWwgZGlhZ25vc3RpYzogaXQncyBtb3N0Cit1c2VmdWwgdG8gaW1hZ2luZSB0aGVtIGhvb2tlZCB1cCB0byB0cmFmZmljIGxpZ2h0cyBvbiB0aGUgY29uc29sZQoraW5kaWNhdGluZyB0aGUgc3RhdHVzIG9mIGVhY2ggZGV2aWNlLgorCitUaGUgZGV2aWNlIGNhbiBiZSByZXNldCBieSB3cml0aW5nIGEgMCB0byB0aGlzIGZpZWxkLCBvdGhlcndpc2UKK2F0IGxlYXN0IG9uZSBiaXQgc2hvdWxkIGJlIHNldDoKKworICBBQ0tOT1dMRURHRSAoMSkgSW5kaWNhdGVzIHRoYXQgdGhlIGd1ZXN0IE9TIGhhcyBmb3VuZCB0aGUKKyAgZGV2aWNlIGFuZCByZWNvZ25pemVkIGl0IGFzIGEgdmFsaWQgdmlydGlvIGRldmljZS4KKworICBEUklWRVIgKDIpIEluZGljYXRlcyB0aGF0IHRoZSBndWVzdCBPUyBrbm93cyBob3cgdG8gZHJpdmUgdGhlCisgIGRldmljZS4gVW5kZXIgTGludXgsIGRyaXZlcnMgY2FuIGJlIGxvYWRhYmxlIG1vZHVsZXMgc28gdGhlcmUKKyAgbWF5IGJlIGEgc2lnbmlmaWNhbnQgKG9yIGluZmluaXRlKSBkZWxheSBiZWZvcmUgc2V0dGluZyB0aGlzCisgIGJpdC4KKworICBEUklWRVJfT0sgKDMpIEluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgaXMgc2V0IHVwIGFuZCByZWFkeSB0bworICBkcml2ZSB0aGUgZGV2aWNlLgorCisgIEZBSUxFRCAoOCkgSW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIGd1ZXN0LAorICBhbmQgaXQgaGFzIGdpdmVuIHVwIG9uIHRoZSBkZXZpY2UuIFRoaXMgY291bGQgYmUgYW4gaW50ZXJuYWwKKyAgZXJyb3IsIG9yIHRoZSBkcml2ZXIgZGlkbid0IGxpa2UgdGhlIGRldmljZSBmb3Igc29tZSByZWFzb24sIG9yCisgIGV2ZW4gYSBmYXRhbCBlcnJvciBkdXJpbmcgZGV2aWNlIG9wZXJhdGlvbi4gVGhlIGRldmljZSBtdXN0IGJlCisgIHJlc2V0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlLWluaXRpYWxpemUuCisKKyAgRmVhdHVyZSBCaXRzCisKK1RoZSBsZWFzdCBzaWduaWZpY2FudCAzMSBiaXRzIG9mIHRoZSBmaXJzdCBjb25maWd1cmF0aW9uIGZpZWxkCitpbmRpY2F0ZXMgdGhlIGZlYXR1cmVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyAodGhlIGhpZ2ggYml0IGlzCityZXNlcnZlZCwgYW5kIHdpbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2YgZnV0dXJlCitmZWF0dXJlIGJpdHMgZWxzZXdoZXJlKS4gSWYgbW9yZSB0aGFuIDMxIGZlYXR1cmUgYml0cyBhcmUKK3N1cHBvcnRlZCwgdGhlIGRldmljZSBpbmRpY2F0ZXMgc28gYnkgc2V0dGluZyBmZWF0dXJlIGJpdCAzMSAoc2VlCitbY2hhOlJlc2VydmVkLUZlYXR1cmUtQml0c10pLiBUaGUgYml0cyBhcmUgYWxsb2NhdGVkIGFzIGZvbGxvd3M6CisKKyAgMCB0byAyMyBGZWF0dXJlIGJpdHMgZm9yIHRoZSBzcGVjaWZpYyBkZXZpY2UgdHlwZQorCisgIDI0IHRvIDQwIEZlYXR1cmUgYml0cyByZXNlcnZlZCBmb3IgZXh0ZW5zaW9ucyB0byB0aGUgcXVldWUgYW5kCisgIGZlYXR1cmUgbmVnb3RpYXRpb24gbWVjaGFuaXNtcworCisgIDQxIHRvIDYzIEZlYXR1cmUgYml0cyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMKKworRm9yIGV4YW1wbGUsIGZlYXR1cmUgYml0IDAgZm9yIGEgbmV0d29yayBkZXZpY2UgKGkuZS4gU3Vic3lzdGVtCitEZXZpY2UgSUQgMSkgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cyBjaGVja3N1bW1pbmcgb2YKK3BhY2tldHMuCisKK1RoZSBmZWF0dXJlIGJpdHMgYXJlIG5lZ290aWF0ZWQ6IHRoZSBkZXZpY2UgbGlzdHMgYWxsIHRoZQorZmVhdHVyZXMgaXQgdW5kZXJzdGFuZHMgaW4gdGhlIERldmljZSBGZWF0dXJlcyBmaWVsZCwgYW5kIHRoZQorZ3Vlc3Qgd3JpdGVzIHRoZSBzdWJzZXQgdGhhdCBpdCB1bmRlcnN0YW5kcyBpbnRvIHRoZSBHdWVzdAorRmVhdHVyZXMgZmllbGQuIFRoZSBvbmx5IHdheSB0byByZW5lZ290aWF0ZSBpcyB0byByZXNldCB0aGUKK2RldmljZS4KKworSW4gcGFydGljdWxhciwgbmV3IGZpZWxkcyBpbiB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIGFyZQoraW5kaWNhdGVkIGJ5IG9mZmVyaW5nIGEgZmVhdHVyZSBiaXQsIHNvIHRoZSBndWVzdCBjYW4gY2hlY2sKK2JlZm9yZSBhY2Nlc3NpbmcgdGhhdCBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLgorCitUaGlzIGFsbG93cyBmb3IgZm9yd2FyZHMgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBpZiB0aGUKK2RldmljZSBpcyBlbmhhbmNlZCB3aXRoIGEgbmV3IGZlYXR1cmUgYml0LCBvbGRlciBndWVzdHMgd2lsbCBub3QKK3dyaXRlIHRoYXQgZmVhdHVyZSBiaXQgYmFjayB0byB0aGUgR3Vlc3QgRmVhdHVyZXMgZmllbGQgYW5kIGl0CitjYW4gZ28gaW50byBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiBTaW1pbGFybHksIGlmIGEgZ3Vlc3QKK2lzIGVuaGFuY2VkIHdpdGggYSBmZWF0dXJlIHRoYXQgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQsIGl0Cit3aWxsIG5vdCBzZWUgdGhhdCBmZWF0dXJlIGJpdCBpbiB0aGUgRGV2aWNlIEZlYXR1cmVzIGZpZWxkIGFuZAorY2FuIGdvIGludG8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSAob3IsIGZvciBwb29yCitpbXBsZW1lbnRhdGlvbnMsIHNldCB0aGUgRkFJTEVEIERldmljZSBTdGF0dXMgYml0KS4KKworQWNjZXNzIHRvIGZlYXR1cmUgYml0cyAzMiB0byA2MyBpcyBlbmFibGVkIGJ5IEd1ZXN0IGJ5IHNldHRpbmcKK2ZlYXR1cmUgYml0IDMxLiBJZiB0aGlzIGJpdCBpcyB1bnNldCwgRGV2aWNlIG11c3QgYXNzdW1lIHRoYXQgYWxsCitmZWF0dXJlIGJpdHMgPiAzMSBhcmUgdW5zZXQuCisKKyAgQ29uZmlndXJhdGlvbi9RdWV1ZSBWZWN0b3JzCisKK1doZW4gTVNJLVggY2FwYWJpbGl0eSBpcyBwcmVzZW50IGFuZCBlbmFibGVkIGluIHRoZSBkZXZpY2UKKyh0aHJvdWdoIHN0YW5kYXJkIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlKSA0IGJ5dGVzIGF0IGJ5dGUgb2Zmc2V0CisyMCBhcmUgdXNlZCB0byBtYXAgY29uZmlndXJhdGlvbiBjaGFuZ2UgYW5kIHF1ZXVlIGludGVycnVwdHMgdG8KK01TSS1YIHZlY3RvcnMuIEluIHRoaXMgY2FzZSwgdGhlIElTUiBTdGF0dXMgZmllbGQgaXMgdW51c2VkLCBhbmQKK2RldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHN0YXJ0cyBhdCBieXRlIG9mZnNldCAyNCBpbiB2aXJ0aW8KK2hlYWRlciBzdHJ1Y3R1cmUuIFdoZW4gTVNJLVggY2FwYWJpbGl0eSBpcyBub3QgZW5hYmxlZCwgZGV2aWNlCitzcGVjaWZpYyBjb25maWd1cmF0aW9uIHN0YXJ0cyBhdCBieXRlIG9mZnNldCAyMCBpbiB2aXJ0aW8gaGVhZGVyLgorCitXcml0aW5nIGEgdmFsaWQgTVNJLVggVGFibGUgZW50cnkgbnVtYmVyLCAwIHRvIDB4N0ZGLCB0byBvbmUgb2YKK0NvbmZpZ3VyYXRpb24vUXVldWUgVmVjdG9yIHJlZ2lzdGVycywgbWFwcyBpbnRlcnJ1cHRzIHRyaWdnZXJlZAorYnkgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlL3NlbGVjdGVkIHF1ZXVlIGV2ZW50cyByZXNwZWN0aXZlbHkgdG8KK3RoZSBjb3JyZXNwb25kaW5nIE1TSS1YIHZlY3Rvci4gVG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhCitzcGVjaWZpYyBldmVudCB0eXBlLCB1bm1hcCBpdCBieSB3cml0aW5nIGEgc3BlY2lhbCBOT19WRUNUT1IKK3ZhbHVlOgorCisvKiBWZWN0b3IgdmFsdWUgdXNlZCB0byBkaXNhYmxlIE1TSSBmb3IgcXVldWUgKi8KKworI2RlZmluZSBWSVJUSU9fTVNJX05PX1ZFQ1RPUiAgICAgICAgICAgIDB4ZmZmZgorCitSZWFkaW5nIHRoZXNlIHJlZ2lzdGVycyByZXR1cm5zIHZlY3RvciBtYXBwZWQgdG8gYSBnaXZlbiBldmVudCwKK29yIE5PX1ZFQ1RPUiBpZiB1bm1hcHBlZC4gQWxsIHF1ZXVlIGFuZCBjb25maWd1cmF0aW9uIGNoYW5nZQorZXZlbnRzIGFyZSB1bm1hcHBlZCBieSBkZWZhdWx0LgorCitOb3RlIHRoYXQgbWFwcGluZyBhbiBldmVudCB0byB2ZWN0b3IgbWlnaHQgcmVxdWlyZSBhbGxvY2F0aW5nCitpbnRlcm5hbCBkZXZpY2UgcmVzb3VyY2VzLCBhbmQgbWlnaHQgZmFpbC4gRGV2aWNlcyByZXBvcnQgc3VjaAorZmFpbHVyZXMgYnkgcmV0dXJuaW5nIHRoZSBOT19WRUNUT1IgdmFsdWUgd2hlbiB0aGUgcmVsZXZhbnQKK1ZlY3RvciBmaWVsZCBpcyByZWFkLiBBZnRlciBtYXBwaW5nIGFuIGV2ZW50IHRvIHZlY3RvciwgdGhlCitkcml2ZXIgbXVzdCB2ZXJpZnkgc3VjY2VzcyBieSByZWFkaW5nIHRoZSBWZWN0b3IgZmllbGQgdmFsdWU6IG9uCitzdWNjZXNzLCB0aGUgcHJldmlvdXNseSB3cml0dGVuIHZhbHVlIGlzIHJldHVybmVkLCBhbmQgb24KK2ZhaWx1cmUsIE5PX1ZFQ1RPUiBpcyByZXR1cm5lZC4gSWYgYSBtYXBwaW5nIGZhaWx1cmUgaXMgZGV0ZWN0ZWQsCit0aGUgZHJpdmVyIGNhbiByZXRyeSBtYXBwaW5nIHdpdGggZmV3ZXJ2ZWN0b3JzLCBvciBkaXNhYmxlIE1TSS1YLgorCisgIFZpcnRxdWV1ZSBDb25maWd1cmF0aW9uCisKK0FzIGEgZGV2aWNlIGNhbiBoYXZlIHplcm8gb3IgbW9yZSB2aXJ0cXVldWVzIGZvciBidWxrIGRhdGEKK3RyYW5zcG9ydCAoZm9yIGV4YW1wbGUsIHRoZSBuZXR3b3JrIGRyaXZlciBoYXMgdHdvKSwgdGhlIGRyaXZlcgorbmVlZHMgdG8gY29uZmlndXJlIHRoZW0gYXMgcGFydCBvZiB0aGUgZGV2aWNlLXNwZWNpZmljCitjb25maWd1cmF0aW9uLgorCitUaGlzIGlzIGRvbmUgYXMgZm9sbG93cywgZm9yIGVhY2ggdmlydHF1ZXVlIGEgZGV2aWNlIGhhczoKKworICBXcml0ZSB0aGUgdmlydHF1ZXVlIGluZGV4IChmaXJzdCBxdWV1ZSBpcyAwKSB0byB0aGUgUXVldWUKKyAgU2VsZWN0IGZpZWxkLgorCisgIFJlYWQgdGhlIHZpcnRxdWV1ZSBzaXplIGZyb20gdGhlIFF1ZXVlIFNpemUgZmllbGQsIHdoaWNoIGlzCisgIGFsd2F5cyBhIHBvd2VyIG9mIDIuIFRoaXMgY29udHJvbHMgaG93IGJpZyB0aGUgdmlydHF1ZXVlIGlzCisgIChzZWUgYmVsb3cpLiBJZiB0aGlzIGZpZWxkIGlzIDAsIHRoZSB2aXJ0cXVldWUgZG9lcyBub3QgZXhpc3QuCisKKyAgQWxsb2NhdGUgYW5kIHplcm8gdmlydHF1ZXVlIGluIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LCBvbiBhCisgIDQwOTYgYnl0ZSBhbGlnbm1lbnQuIFdyaXRlIHRoZSBwaHlzaWNhbCBhZGRyZXNzLCBkaXZpZGVkIGJ5CisgIDQwOTYgdG8gdGhlIFF1ZXVlIEFkZHJlc3MgZmllbGQuW2Zvb3Rub3RlOgorVGhlIDQwOTYgaXMgYmFzZWQgb24gdGhlIHg4NiBwYWdlIHNpemUsIGJ1dCBpdCdzIGFsc28gbGFyZ2UKK2Vub3VnaCB0byBlbnN1cmUgdGhhdCB0aGUgc2VwYXJhdGUgcGFydHMgb2YgdGhlIHZpcnRxdWV1ZSBhcmUgb24KK3NlcGFyYXRlIGNhY2hlIGxpbmVzLgorXQorCisgIE9wdGlvbmFsbHksIGlmIE1TSS1YIGNhcGFiaWxpdHkgaXMgcHJlc2VudCBhbmQgZW5hYmxlZCBvbiB0aGUKKyAgZGV2aWNlLCBzZWxlY3QgYSB2ZWN0b3IgdG8gdXNlIHRvIHJlcXVlc3QgaW50ZXJydXB0cyB0cmlnZ2VyZWQKKyAgYnkgdmlydHF1ZXVlIGV2ZW50cy4gV3JpdGUgdGhlIE1TSS1YIFRhYmxlIGVudHJ5IG51bWJlcgorICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgdmVjdG9yIGluIFF1ZXVlIFZlY3RvciBmaWVsZC4gUmVhZCB0aGUKKyAgUXVldWUgVmVjdG9yIGZpZWxkOiBvbiBzdWNjZXNzLCBwcmV2aW91c2x5IHdyaXR0ZW4gdmFsdWUgaXMKKyAgcmV0dXJuZWQ7IG9uIGZhaWx1cmUsIE5PX1ZFQ1RPUiB2YWx1ZSBpcyByZXR1cm5lZC4KKworVGhlIFF1ZXVlIFNpemUgZmllbGQgY29udHJvbHMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyByZXF1aXJlZAorZm9yIHRoZSB2aXJ0cXVldWUgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKKworI2RlZmluZSBBTElHTih4KSAoKCh4KSArIDQwOTUpICYgfjQwOTUpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdnJpbmdfc2l6ZSh1bnNpZ25lZCBpbnQgcXN6KQorCit7CisKKyAgICAgcmV0dXJuIEFMSUdOKHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYykqcXN6ICsgc2l6ZW9mKHUxNikqKDIKKysgcXN6KSkKKworICAgICAgICAgICsgQUxJR04oc2l6ZW9mKHN0cnVjdCB2cmluZ191c2VkX2VsZW0pKnFzeik7CisKK30KKworVGhpcyBjdXJyZW50bHkgd2FzdGVzIHNvbWUgc3BhY2Ugd2l0aCBwYWRkaW5nLCBidXQgYWxzbyBhbGxvd3MKK2Z1dHVyZSBleHRlbnNpb25zLiBUaGUgdmlydHF1ZXVlIGxheW91dCBzdHJ1Y3R1cmUgbG9va3MgbGlrZSB0aGlzCisocXN6IGlzIHRoZSBRdWV1ZSBTaXplIGZpZWxkLCB3aGljaCBpcyBhIHZhcmlhYmxlLCBzbyB0aGlzIGNvZGUKK3dvbid0IGNvbXBpbGUpOgorCitzdHJ1Y3QgdnJpbmcgeworCisgICAgLyogVGhlIGFjdHVhbCBkZXNjcmlwdG9ycyAoMTYgYnl0ZXMgZWFjaCkgKi8KKworICAgIHN0cnVjdCB2cmluZ19kZXNjIGRlc2NbcXN6XTsKKworCisKKyAgICAvKiBBIHJpbmcgb2YgYXZhaWxhYmxlIGRlc2NyaXB0b3IgaGVhZHMgd2l0aCBmcmVlLXJ1bm5pbmcKK2luZGV4LiAqLworCisgICAgc3RydWN0IHZyaW5nX2F2YWlsIGF2YWlsOworCisKKworICAgIC8vIFBhZGRpbmcgdG8gdGhlIG5leHQgNDA5NiBib3VuZGFyeS4KKworICAgIGNoYXIgcGFkW107CisKKworCisgICAgLy8gQSByaW5nIG9mIHVzZWQgZGVzY3JpcHRvciBoZWFkcyB3aXRoIGZyZWUtcnVubmluZyBpbmRleC4KKworICAgIHN0cnVjdCB2cmluZ191c2VkIHVzZWQ7CisKK307CisKKyAgQSBOb3RlIG9uIFZpcnRxdWV1ZSBFbmRpYW5uZXNzCisKK05vdGUgdGhhdCB0aGUgZW5kaWFuIG9mIHRoZXNlIGZpZWxkcyBhbmQgZXZlcnl0aGluZyBlbHNlIGluIHRoZQordmlydHF1ZXVlIGlzIHRoZSBuYXRpdmUgZW5kaWFuIG9mIHRoZSBndWVzdCwgbm90IGxpdHRsZS1lbmRpYW4gYXMKK1BDSSBub3JtYWxseSBpcy4gVGhpcyBtYWtlcyBmb3Igc2ltcGxlciBndWVzdCBjb2RlLCBhbmQgaXQgaXMKK2Fzc3VtZWQgdGhhdCB0aGUgaG9zdCBhbHJlYWR5IGhhcyB0byBiZSBkZWVwbHkgYXdhcmUgb2YgdGhlIGd1ZXN0CitlbmRpYW4gc28gc3VjaCBhbiDigJxlbmRpYW4tYXdhcmXigJ0gZGV2aWNlIGlzIG5vdCBhIHNpZ25pZmljYW50Citpc3N1ZS4KKworICBEZXNjcmlwdG9yIFRhYmxlCisKK1RoZSBkZXNjcmlwdG9yIHRhYmxlIHJlZmVycyB0byB0aGUgYnVmZmVycyB0aGUgZ3Vlc3QgaXMgdXNpbmcgZm9yCit0aGUgZGV2aWNlLiBUaGUgYWRkcmVzc2VzIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZCB0aGUgYnVmZmVycworY2FuIGJlIGNoYWluZWQgdmlhIHRoZSBuZXh0IGZpZWxkLiBFYWNoIGRlc2NyaXB0b3IgZGVzY3JpYmVzIGEKK2J1ZmZlciB3aGljaCBpcyByZWFkLW9ubHkgb3Igd3JpdGUtb25seSwgYnV0IGEgY2hhaW4gb2YKK2Rlc2NyaXB0b3JzIGNhbiBjb250YWluIGJvdGggcmVhZC1vbmx5IGFuZCB3cml0ZS1vbmx5IGJ1ZmZlcnMuCisKK05vIGRlc2NyaXB0b3IgY2hhaW4gbWF5IGJlIG1vcmUgdGhhbiAyXjMyIGJ5dGVzIGxvbmcgaW4gdG90YWwuc3RydWN0IHZyaW5nX2Rlc2MgeworCisgICAgLyogQWRkcmVzcyAoZ3Vlc3QtcGh5c2ljYWwpLiAqLworCisgICAgdTY0IGFkZHI7CisKKyAgICAvKiBMZW5ndGguICovCisKKyAgICB1MzIgbGVuOworCisvKiBUaGlzIG1hcmtzIGEgYnVmZmVyIGFzIGNvbnRpbnVpbmcgdmlhIHRoZSBuZXh0IGZpZWxkLiAqLworCisjZGVmaW5lIFZSSU5HX0RFU0NfRl9ORVhUICAgMQorCisvKiBUaGlzIG1hcmtzIGEgYnVmZmVyIGFzIHdyaXRlLW9ubHkgKG90aGVyd2lzZSByZWFkLW9ubHkpLiAqLworCisjZGVmaW5lIFZSSU5HX0RFU0NfRl9XUklURSAgICAgMgorCisvKiBUaGlzIG1lYW5zIHRoZSBidWZmZXIgY29udGFpbnMgYSBsaXN0IG9mIGJ1ZmZlciBkZXNjcmlwdG9ycy4KKyovCisKKyNkZWZpbmUgVlJJTkdfREVTQ19GX0lORElSRUNUICAgNAorCisgICAgLyogVGhlIGZsYWdzIGFzIGluZGljYXRlZCBhYm92ZS4gKi8KKworICAgIHUxNiBmbGFnczsKKworICAgIC8qIE5leHQgZmllbGQgaWYgZmxhZ3MgJiBORVhUICovCisKKyAgICB1MTYgbmV4dDsKKworfTsKKworVGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgdGFibGUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBRdWV1ZQorU2l6ZSBmaWVsZCBmb3IgdGhpcyB2aXJ0cXVldWUuCisKKyAgPHN1YjpJbmRpcmVjdC1EZXNjcmlwdG9ycz5JbmRpcmVjdCBEZXNjcmlwdG9ycworCitTb21lIGRldmljZXMgYmVuZWZpdCBieSBjb25jdXJyZW50bHkgZGlzcGF0Y2hpbmcgYSBsYXJnZSBudW1iZXIKK29mIGxhcmdlIHJlcXVlc3RzLiBUaGUgVklSVElPX1JJTkdfRl9JTkRJUkVDVF9ERVNDIGZlYXR1cmUgY2FuIGJlCit1c2VkIHRvIGFsbG93IHRoaXMgKHNlZSBbY2hhOlJlc2VydmVkLUZlYXR1cmUtQml0c10pLiBUbyBpbmNyZWFzZQorcmluZyBjYXBhY2l0eSBpdCBpcyBwb3NzaWJsZSB0byBzdG9yZSBhIHRhYmxlIG9mIGluZGlyZWN0CitkZXNjcmlwdG9ycyBhbnl3aGVyZSBpbiBtZW1vcnksIGFuZCBpbnNlcnQgYSBkZXNjcmlwdG9yIGluIG1haW4KK3ZpcnRxdWV1ZSAod2l0aCBmbGFncyZJTkRJUkVDVCBvbikgdGhhdCByZWZlcnMgdG8gbWVtb3J5IGJ1ZmZlcgorY29udGFpbmluZyB0aGlzIGluZGlyZWN0IGRlc2NyaXB0b3IgdGFibGU7IGZpZWxkcyBhZGRyIGFuZCBsZW4KK3JlZmVyIHRvIHRoZSBpbmRpcmVjdCB0YWJsZSBhZGRyZXNzIGFuZCBsZW5ndGggaW4gYnl0ZXMsCityZXNwZWN0aXZlbHkuIFRoZSBpbmRpcmVjdCB0YWJsZSBsYXlvdXQgc3RydWN0dXJlIGxvb2tzIGxpa2UgdGhpcworKGxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXNjcmlwdG9yIHRoYXQgcmVmZXJzIHRvIHRoaXMgdGFibGUsCit3aGljaCBpcyBhIHZhcmlhYmxlLCBzbyB0aGlzIGNvZGUgd29uJ3QgY29tcGlsZSk6CisKK3N0cnVjdCBpbmRpcmVjdF9kZXNjcmlwdG9yX3RhYmxlIHsKKworICAgIC8qIFRoZSBhY3R1YWwgZGVzY3JpcHRvcnMgKDE2IGJ5dGVzIGVhY2gpICovCisKKyAgICBzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNjW2xlbiAvIDE2XTsKKworfTsKKworVGhlIGZpcnN0IGluZGlyZWN0IGRlc2NyaXB0b3IgaXMgbG9jYXRlZCBhdCBzdGFydCBvZiB0aGUgaW5kaXJlY3QKK2Rlc2NyaXB0b3IgdGFibGUgKGluZGV4IDApLCBhZGRpdGlvbmFsIGluZGlyZWN0IGRlc2NyaXB0b3JzIGFyZQorY2hhaW5lZCBieSBuZXh0IGZpZWxkLiBBbiBpbmRpcmVjdCBkZXNjcmlwdG9yIHdpdGhvdXQgbmV4dCBmaWVsZAorKHdpdGggZmxhZ3MmTkVYVCBvZmYpIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgaW5kaXJlY3QgZGVzY3JpcHRvcgordGFibGUsIGFuZCB0cmFuc2ZlcnMgY29udHJvbCBiYWNrIHRvIHRoZSBtYWluIHZpcnRxdWV1ZS4gQW4KK2luZGlyZWN0IGRlc2NyaXB0b3IgY2FuIG5vdCByZWZlciB0byBhbm90aGVyIGluZGlyZWN0IGRlc2NyaXB0b3IKK3RhYmxlIChmbGFncyZJTkRJUkVDVCBtdXN0IGJlIG9mZikuIEEgc2luZ2xlIGluZGlyZWN0IGRlc2NyaXB0b3IKK3RhYmxlIGNhbiBpbmNsdWRlIGJvdGggcmVhZC1vbmx5IGFuZCB3cml0ZS1vbmx5IGRlc2NyaXB0b3JzOword3JpdGUtb25seSBmbGFnIChmbGFncyZXUklURSkgaW4gdGhlIGRlc2NyaXB0b3IgdGhhdCByZWZlcnMgdG8gaXQKK2lzIGlnbm9yZWQuCisKKyAgQXZhaWxhYmxlIFJpbmcKKworVGhlIGF2YWlsYWJsZSByaW5nIHJlZmVycyB0byB3aGF0IGRlc2NyaXB0b3JzIHdlIGFyZSBvZmZlcmluZyB0aGUKK2RldmljZTogaXQgcmVmZXJzIHRvIHRoZSBoZWFkIG9mIGEgZGVzY3JpcHRvciBjaGFpbi4gVGhlIOKAnGZsYWdz4oCdCitmaWVsZCBpcyBjdXJyZW50bHkgMCBvciAxOiAxIGluZGljYXRpbmcgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbgoraW50ZXJydXB0IHdoZW4gdGhlIGRldmljZSBjb25zdW1lcyBhIGRlc2NyaXB0b3IgZnJvbSB0aGUKK2F2YWlsYWJsZSByaW5nLiBBbHRlcm5hdGl2ZWx5LCB0aGUgZ3Vlc3QgY2FuIGFzayB0aGUgZGV2aWNlIHRvCitkZWxheSBpbnRlcnJ1cHRzIHVudGlsIGFuIGVudHJ5IHdpdGggYW4gaW5kZXggc3BlY2lmaWVkIGJ5IHRoZSDigJwKK3VzZWRfZXZlbnTigJ0gZmllbGQgaXMgd3JpdHRlbiBpbiB0aGUgdXNlZCByaW5nIChlcXVpdmFsZW50bHksCit1bnRpbCB0aGUgaWR4IGZpZWxkIGluIHRoZSB1c2VkIHJpbmcgd2lsbCByZWFjaCB0aGUgdmFsdWUKK3VzZWRfZXZlbnQgKyAxKS4gVGhlIG1ldGhvZCBlbXBsb3llZCBieSB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQKK2J5IHRoZSBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCBmZWF0dXJlIGJpdCAoc2VlIFtjaGE6UmVzZXJ2ZWQtRmVhdHVyZS1CaXRzXQorKS4gVGhpcyBpbnRlcnJ1cHQgc3VwcHJlc3Npb24gaXMgbWVyZWx5IGFuIG9wdGltaXphdGlvbjsgaXQgbWF5Citub3Qgc3VwcHJlc3MgaW50ZXJydXB0cyBlbnRpcmVseS4KKworVGhlIOKAnGlkeOKAnSBmaWVsZCBpbmRpY2F0ZXMgd2hlcmUgd2Ugd291bGQgcHV0IHRoZSBuZXh0IGRlc2NyaXB0b3IKK2VudHJ5IChtb2R1bG8gdGhlIHJpbmcgc2l6ZSkuIFRoaXMgc3RhcnRzIGF0IDAsIGFuZCBpbmNyZWFzZXMuCisKK3N0cnVjdCB2cmluZ19hdmFpbCB7CisKKyNkZWZpbmUgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQgICAgICAxCisKKyAgIHUxNiBmbGFnczsKKworICAgdTE2IGlkeDsKKworICAgdTE2IHJpbmdbcXN6XTsgLyogcXN6IGlzIHRoZSBRdWV1ZSBTaXplIGZpZWxkIHJlYWQgZnJvbSBkZXZpY2UKKyovCisKKyAgIHUxNiB1c2VkX2V2ZW50OworCit9OworCisgIFVzZWQgUmluZworCitUaGUgdXNlZCByaW5nIGlzIHdoZXJlIHRoZSBkZXZpY2UgcmV0dXJucyBidWZmZXJzIG9uY2UgaXQgaXMgZG9uZQord2l0aCB0aGVtLiBUaGUgZmxhZ3MgZmllbGQgY2FuIGJlIHVzZWQgYnkgdGhlIGRldmljZSB0byBoaW50IHRoYXQKK25vIG5vdGlmaWNhdGlvbiBpcyBuZWNlc3Nhcnkgd2hlbiB0aGUgZ3Vlc3QgYWRkcyB0byB0aGUgYXZhaWxhYmxlCityaW5nLiBBbHRlcm5hdGl2ZWx5LCB0aGUg4oCcYXZhaWxfZXZlbnTigJ0gZmllbGQgY2FuIGJlIHVzZWQgYnkgdGhlCitkZXZpY2UgdG8gaGludCB0aGF0IG5vIG5vdGlmaWNhdGlvbiBpcyBuZWNlc3NhcnkgdW50aWwgYW4gZW50cnkKK3dpdGggYW4gaW5kZXggc3BlY2lmaWVkIGJ5IHRoZSDigJxhdmFpbF9ldmVudOKAnSBpcyB3cml0dGVuIGluIHRoZQorYXZhaWxhYmxlIHJpbmcgKGVxdWl2YWxlbnRseSwgdW50aWwgdGhlIGlkeCBmaWVsZCBpbiB0aGUKK2F2YWlsYWJsZSByaW5nIHdpbGwgcmVhY2ggdGhlIHZhbHVlIGF2YWlsX2V2ZW50ICsgMSkuIFRoZSBtZXRob2QKK2VtcGxveWVkIGJ5IHRoZSBkZXZpY2UgaXMgY29udHJvbGxlZCBieSB0aGUgZ3Vlc3QgdGhyb3VnaCB0aGUKK1ZJUlRJT19SSU5HX0ZfRVZFTlRfSURYIGZlYXR1cmUgYml0IChzZWUgW2NoYTpSZXNlcnZlZC1GZWF0dXJlLUJpdHNdCispLiBbZm9vdG5vdGU6CitUaGVzZSBmaWVsZHMgYXJlIGtlcHQgaGVyZSBiZWNhdXNlIHRoaXMgaXMgdGhlIG9ubHkgcGFydCBvZiB0aGUKK3ZpcnRxdWV1ZSB3cml0dGVuIGJ5IHRoZSBkZXZpY2UKK10uCisKK0VhY2ggZW50cnkgaW4gdGhlIHJpbmcgaXMgYSBwYWlyOiB0aGUgaGVhZCBlbnRyeSBvZiB0aGUKK2Rlc2NyaXB0b3IgY2hhaW4gZGVzY3JpYmluZyB0aGUgYnVmZmVyICh0aGlzIG1hdGNoZXMgYW4gZW50cnkKK3BsYWNlZCBpbiB0aGUgYXZhaWxhYmxlIHJpbmcgYnkgdGhlIGd1ZXN0IGVhcmxpZXIpLCBhbmQgdGhlIHRvdGFsCitvZiBieXRlcyB3cml0dGVuIGludG8gdGhlIGJ1ZmZlci4gVGhlIGxhdHRlciBpcyBleHRyZW1lbHkgdXNlZnVsCitmb3IgZ3Vlc3RzIHVzaW5nIHVudHJ1c3RlZCBidWZmZXJzOiBpZiB5b3UgZG8gbm90IGtub3cgZXhhY3RseQoraG93IG11Y2ggaGFzIGJlZW4gd3JpdHRlbiBieSB0aGUgZGV2aWNlLCB5b3UgdXN1YWxseSBoYXZlIHRvIHplcm8KK3RoZSBidWZmZXIgdG8gZW5zdXJlIG5vIGRhdGEgbGVha2FnZSBvY2N1cnMuCisKKy8qIHUzMiBpcyB1c2VkIGhlcmUgZm9yIGlkcyBmb3IgcGFkZGluZyByZWFzb25zLiAqLworCitzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIHsKKworICAgIC8qIEluZGV4IG9mIHN0YXJ0IG9mIHVzZWQgZGVzY3JpcHRvciBjaGFpbi4gKi8KKworICAgIHUzMiBpZDsKKworICAgIC8qIFRvdGFsIGxlbmd0aCBvZiB0aGUgZGVzY3JpcHRvciBjaGFpbiB3aGljaCB3YXMgdXNlZAorKHdyaXR0ZW4gdG8pICovCisKKyAgICB1MzIgbGVuOworCit9OworCisKKworc3RydWN0IHZyaW5nX3VzZWQgeworCisjZGVmaW5lIFZSSU5HX1VTRURfRl9OT19OT1RJRlkgIDEKKworICAgIHUxNiBmbGFnczsKKworICAgIHUxNiBpZHg7CisKKyAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtIHJpbmdbcXN6XTsKKworICAgIHUxNiBhdmFpbF9ldmVudDsKKworfTsKKworICBIZWxwZXJzIGZvciBNYW5hZ2luZyBWaXJ0cXVldWVzCisKK1RoZSBMaW51eCBLZXJuZWwgU291cmNlIGNvZGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFib3ZlIGFuZAoraGVscGVyIHJvdXRpbmVzIGluIGEgbW9yZSB1c2FibGUgZm9ybSwgaW4KK2luY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaC4gVGhpcyB3YXMgZXhwbGljaXRseSBsaWNlbnNlZCBieSBJQk0KK2FuZCBSZWQgSGF0IHVuZGVyIHRoZSAoMy1jbGF1c2UpIEJTRCBsaWNlbnNlIHNvIHRoYXQgaXQgY2FuIGJlCitmcmVlbHkgdXNlZCBieSBhbGwgb3RoZXIgcHJvamVjdHMsIGFuZCBpcyByZXByb2R1Y2VkICh3aXRoIHNsaWdodAordmFyaWF0aW9uIHRvIHJlbW92ZSBMaW51eCBhc3N1bXB0aW9ucykgaW4gQXBwZW5kaXggQS4KKworICBEZXZpY2UgT3BlcmF0aW9uCisKK1RoZXJlIGFyZSB0d28gcGFydHMgdG8gZGV2aWNlIG9wZXJhdGlvbjogc3VwcGx5aW5nIG5ldyBidWZmZXJzIHRvCit0aGUgZGV2aWNlLCBhbmQgcHJvY2Vzc2luZyB1c2VkIGJ1ZmZlcnMgZnJvbSB0aGUgZGV2aWNlLiBBcyBhbgorZXhhbXBsZSwgdGhlIHZpcnRpbyBuZXR3b3JrIGRldmljZSBoYXMgdHdvIHZpcnRxdWV1ZXM6IHRoZQordHJhbnNtaXQgdmlydHF1ZXVlIGFuZCB0aGUgcmVjZWl2ZSB2aXJ0cXVldWUuIFRoZSBkcml2ZXIgYWRkcworb3V0Z29pbmcgKHJlYWQtb25seSkgcGFja2V0cyB0byB0aGUgdHJhbnNtaXQgdmlydHF1ZXVlLCBhbmQgdGhlbgorZnJlZXMgdGhlbSBhZnRlciB0aGV5IGFyZSB1c2VkLiBTaW1pbGFybHksIGluY29taW5nICh3cml0ZS1vbmx5KQorYnVmZmVycyBhcmUgYWRkZWQgdG8gdGhlIHJlY2VpdmUgdmlydHF1ZXVlLCBhbmQgcHJvY2Vzc2VkIGFmdGVyCit0aGV5IGFyZSB1c2VkLgorCisgIFN1cHBseWluZyBCdWZmZXJzIHRvIFRoZSBEZXZpY2UKKworQWN0dWFsIHRyYW5zZmVyIG9mIGJ1ZmZlcnMgZnJvbSB0aGUgZ3Vlc3QgT1MgdG8gdGhlIGRldmljZQorb3BlcmF0ZXMgYXMgZm9sbG93czoKKworICBQbGFjZSB0aGUgYnVmZmVyKHMpIGludG8gZnJlZSBkZXNjcmlwdG9yKHMpLgorCisgIElmIHRoZXJlIGFyZSBubyBmcmVlIGRlc2NyaXB0b3JzLCB0aGUgZ3Vlc3QgbWF5IGNob29zZSB0bworICAgIG5vdGlmeSB0aGUgZGV2aWNlIGV2ZW4gaWYgbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCAodG8KKyAgICByZWR1Y2UgbGF0ZW5jeSkuW2Zvb3Rub3RlOgorVGhlIExpbnV4IGRyaXZlcnMgZG8gdGhpcyBvbmx5IGZvciByZWFkLW9ubHkgYnVmZmVyczogZm9yCit3cml0ZS1vbmx5IGJ1ZmZlcnMsIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZHJpdmVyIGlzIG1lcmVseQordHJ5aW5nIHRvIGtlZXAgdGhlIHJlY2VpdmUgYnVmZmVyIHJpbmcgZnVsbCwgYW5kIG5vIG5vdGlmaWNhdGlvbgorb2YgdGhpcyBleHBlY3RlZCBjb25kaXRpb24gaXMgbmVjZXNzYXJ5LgorXQorCisgIFBsYWNlIHRoZSBpZCBvZiB0aGUgYnVmZmVyIGluIHRoZSBuZXh0IHJpbmcgZW50cnkgb2YgdGhlCisgIGF2YWlsYWJsZSByaW5nLgorCisgIFRoZSBzdGVwcyAoMSkgYW5kICgyKSBtYXkgYmUgcGVyZm9ybWVkIHJlcGVhdGVkbHkgaWYgYmF0Y2hpbmcKKyAgaXMgcG9zc2libGUuCisKKyAgQSBtZW1vcnkgYmFycmllciBzaG91bGQgYmUgZXhlY3V0ZWQgdG8gZW5zdXJlIHRoZSBkZXZpY2Ugc2VlcworICB0aGUgdXBkYXRlZCBkZXNjcmlwdG9yIHRhYmxlIGFuZCBhdmFpbGFibGUgcmluZyBiZWZvcmUgdGhlIG5leHQKKyAgc3RlcC4KKworICBUaGUgYXZhaWxhYmxlIOKAnGlkeOKAnSBmaWVsZCBzaG91bGQgYmUgaW5jcmVhc2VkIGJ5IHRoZSBudW1iZXIgb2YKKyAgZW50cmllcyBhZGRlZCB0byB0aGUgYXZhaWxhYmxlIHJpbmcuCisKKyAgQSBtZW1vcnkgYmFycmllciBzaG91bGQgYmUgZXhlY3V0ZWQgdG8gZW5zdXJlIHRoYXQgd2UgdXBkYXRlCisgIHRoZSBpZHggZmllbGQgYmVmb3JlIGNoZWNraW5nIGZvciBub3RpZmljYXRpb24gc3VwcHJlc3Npb24uCisKKyAgSWYgbm90aWZpY2F0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQsIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisgIG5vdGlmaWVkIG9mIHRoZSBuZXcgYnVmZmVycy4KKworTm90ZSB0aGF0IHRoZSBhYm92ZSBjb2RlIGRvZXMgbm90IHRha2UgcHJlY2F1dGlvbnMgYWdhaW5zdCB0aGUKK2F2YWlsYWJsZSByaW5nIGJ1ZmZlciB3cmFwcGluZyBhcm91bmQ6IHRoaXMgaXMgbm90IHBvc3NpYmxlIHNpbmNlCit0aGUgcmluZyBidWZmZXIgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGVzY3JpcHRvciB0YWJsZSwgc28gc3RlcAorKDEpIHdpbGwgcHJldmVudCBzdWNoIGEgY29uZGl0aW9uLgorCitJbiBhZGRpdGlvbiwgdGhlIG1heGltdW0gcXVldWUgc2l6ZSBpcyAzMjc2OCAoaXQgbXVzdCBiZSBhIHBvd2VyCitvZiAyIHdoaWNoIGZpdHMgaW4gMTYgYml0cyksIHNvIHRoZSAxNi1iaXQg4oCcaWR44oCdIHZhbHVlIGNhbiBhbHdheXMKK2Rpc3Rpbmd1aXNoIGJldHdlZW4gYSBmdWxsIGFuZCBlbXB0eSBidWZmZXIuCisKK0hlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBlYWNoIHN0YWdlIGluIG1vcmUgZGV0YWlsLgorCisgIFBsYWNpbmcgQnVmZmVycyBJbnRvIFRoZSBEZXNjcmlwdG9yIFRhYmxlCisKK0EgYnVmZmVyIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSByZWFkLW9ubHkgcGh5c2ljYWxseS1jb250aWd1b3VzCitlbGVtZW50cyBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgcGh5c2ljYWxseS1jb250aWd1b3VzCit3cml0ZS1vbmx5IGVsZW1lbnRzIChpdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQpLiBUaGlzCithbGdvcml0aG0gbWFwcyBpdCBpbnRvIHRoZSBkZXNjcmlwdG9yIHRhYmxlOgorCisgIGZvciBlYWNoIGJ1ZmZlciBlbGVtZW50LCBiOgorCisgIEdldCB0aGUgbmV4dCBmcmVlIGRlc2NyaXB0b3IgdGFibGUgZW50cnksIGQKKworICBTZXQgZC5hZGRyIHRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiBiCisKKyAgU2V0IGQubGVuIHRvIHRoZSBsZW5ndGggb2YgYi4KKworICBJZiBiIGlzIHdyaXRlLW9ubHksIHNldCBkLmZsYWdzIHRvIFZSSU5HX0RFU0NfRl9XUklURSwKKyAgICBvdGhlcndpc2UgMC4KKworICBJZiB0aGVyZSBpcyBhIGJ1ZmZlciBlbGVtZW50IGFmdGVyIHRoaXM6CisKKyAgICBTZXQgZC5uZXh0IHRvIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBmcmVlIGRlc2NyaXB0b3IgZWxlbWVudC4KKworICAgIFNldCB0aGUgVlJJTkdfREVTQ19GX05FWFQgYml0IGluIGQuZmxhZ3MuCisKK0luIHByYWN0aWNlLCB0aGUgZC5uZXh0IGZpZWxkcyBhcmUgdXN1YWxseSB1c2VkIHRvIGNoYWluIGZyZWUKK2Rlc2NyaXB0b3JzLCBhbmQgYSBzZXBhcmF0ZSBjb3VudCBrZXB0IHRvIGNoZWNrIHRoZXJlIGFyZSBlbm91Z2gKK2ZyZWUgZGVzY3JpcHRvcnMgYmVmb3JlIGJlZ2lubmluZyB0aGUgbWFwcGluZ3MuCisKKyAgVXBkYXRpbmcgVGhlIEF2YWlsYWJsZSBSaW5nCisKK1RoZSBoZWFkIG9mIHRoZSBidWZmZXIgd2UgbWFwcGVkIGlzIHRoZSBmaXJzdCBkIGluIHRoZSBhbGdvcml0aG0KK2Fib3ZlLiBBIG5haXZlIGltcGxlbWVudGF0aW9uIHdvdWxkIGRvIHRoZSBmb2xsb3dpbmc6CisKK2F2YWlsLT5yaW5nW2F2YWlsLT5pZHggJSBxc3pdID0gaGVhZDsKKworSG93ZXZlciwgaW4gZ2VuZXJhbCB3ZSBjYW4gYWRkIG1hbnkgZGVzY3JpcHRvcnMgYmVmb3JlIHdlIHVwZGF0ZQordGhlIOKAnGlkeOKAnSBmaWVsZCAoYXQgd2hpY2ggcG9pbnQgdGhleSBiZWNvbWUgdmlzaWJsZSB0byB0aGUKK2RldmljZSksIHNvIHdlIGtlZXAgYSBjb3VudGVyIG9mIGhvdyBtYW55IHdlJ3ZlIGFkZGVkOgorCithdmFpbC0+cmluZ1soYXZhaWwtPmlkeCArIGFkZGVkKyspICUgcXN6XSA9IGhlYWQ7CisKKyAgVXBkYXRpbmcgVGhlIEluZGV4IEZpZWxkCisKK09uY2UgdGhlIGlkeCBmaWVsZCBvZiB0aGUgdmlydHF1ZXVlIGlzIHVwZGF0ZWQsIHRoZSBkZXZpY2Ugd2lsbAorYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGRlc2NyaXB0b3IgZW50cmllcyB3ZSd2ZSBjcmVhdGVkIGFuZCB0aGUKK21lbW9yeSB0aGV5IHJlZmVyIHRvLiBUaGlzIGlzIHdoeSBhIG1lbW9yeSBiYXJyaWVyIGlzIGdlbmVyYWxseQordXNlZCBiZWZvcmUgdGhlIGlkeCB1cGRhdGUsIHRvIGVuc3VyZSBpdCBzZWVzIHRoZSBtb3N0IHVwLXRvLWRhdGUKK2NvcHkuCisKK1RoZSBpZHggZmllbGQgYWx3YXlzIGluY3JlbWVudHMsIGFuZCB3ZSBsZXQgaXQgd3JhcCBuYXR1cmFsbHkgYXQKKzY1NTM2OgorCithdmFpbC0+aWR4ICs9IGFkZGVkOworCisgIDxzdWI6Tm90aWZ5aW5nLVRoZS1EZXZpY2U+Tm90aWZ5aW5nIFRoZSBEZXZpY2UKKworRGV2aWNlIG5vdGlmaWNhdGlvbiBvY2N1cnMgYnkgd3JpdGluZyB0aGUgMTYtYml0IHZpcnRxdWV1ZSBpbmRleAorb2YgdGhpcyB2aXJ0cXVldWUgdG8gdGhlIFF1ZXVlIE5vdGlmeSBmaWVsZCBvZiB0aGUgdmlydGlvIGhlYWRlcgoraW4gdGhlIGZpcnN0IEkvTyByZWdpb24gb2YgdGhlIFBDSSBkZXZpY2UuIFRoaXMgY2FuIGJlIGV4cGVuc2l2ZSwKK2hvd2V2ZXIsIHNvIHRoZSBkZXZpY2UgY2FuIHN1cHByZXNzIHN1Y2ggbm90aWZpY2F0aW9ucyBpZiBpdAorZG9lc24ndCBuZWVkIHRoZW0uIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBleHBvc2UgdGhlIG5ldyBpZHgKK3ZhbHVlIGJlZm9yZSBjaGVja2luZyB0aGUgc3VwcHJlc3Npb24gZmxhZzogaXQncyBPSyB0byBub3RpZnkKK2dyYXR1aXRvdXNseSwgYnV0IG5vdCB0byBvbWl0IGEgcmVxdWlyZWQgbm90aWZpY2F0aW9uLiBTbyBhZ2FpbiwKK3dlIHVzZSBhIG1lbW9yeSBiYXJyaWVyIGhlcmUgYmVmb3JlIHJlYWRpbmcgdGhlIGZsYWdzIG9yIHRoZQorYXZhaWxfZXZlbnQgZmllbGQuCisKK0lmIHRoZSBWSVJUSU9fRl9SSU5HX0VWRU5UX0lEWCBmZWF0dXJlIGlzIG5vdCBuZWdvdGlhdGVkLCBhbmQgaWYKK3RoZSBWUklOR19VU0VEX0ZfTk9USUZZIGZsYWcgaXMgbm90IHNldCwgd2UgZ28gYWhlYWQgYW5kIHdyaXRlIHRvCit0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UuCisKK0lmIHRoZSBWSVJUSU9fRl9SSU5HX0VWRU5UX0lEWCBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsIHdlIHJlYWQgdGhlCithdmFpbF9ldmVudCBmaWVsZCBpbiB0aGUgYXZhaWxhYmxlIHJpbmcgc3RydWN0dXJlLiBJZiB0aGUKK2F2YWlsYWJsZSBpbmRleCBjcm9zc2VkX3RoZSBhdmFpbF9ldmVudCBmaWVsZCB2YWx1ZSBzaW5jZSB0aGUKK2xhc3Qgbm90aWZpY2F0aW9uLCB3ZSBnbyBhaGVhZCBhbmQgd3JpdGUgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uCitzcGFjZS4gVGhlIGF2YWlsX2V2ZW50IGZpZWxkIHdyYXBzIG5hdHVyYWxseSBhdCA2NTUzNiBhcyB3ZWxsOgorCisodTE2KShuZXdfaWR4IC0gYXZhaWxfZXZlbnQgLSAxKSA8ICh1MTYpKG5ld19pZHggLSBvbGRfaWR4KQorCisgIDxzdWI6UmVjZWl2aW5nLVVzZWQtQnVmZmVycz5SZWNlaXZpbmcgVXNlZCBCdWZmZXJzIEZyb20gVGhlCisgIERldmljZQorCitPbmNlIHRoZSBkZXZpY2UgaGFzIHVzZWQgYSBidWZmZXIgKHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGl0LCBvcgorcGFydHMgb2YgYm90aCwgZGVwZW5kaW5nIG9uIHRoZSBuYXR1cmUgb2YgdGhlIHZpcnRxdWV1ZSBhbmQgdGhlCitkZXZpY2UpLCBpdCBzZW5kcyBhbiBpbnRlcnJ1cHQsIGZvbGxvd2luZyBhbiBhbGdvcml0aG0gdmVyeQorc2ltaWxhciB0byB0aGUgYWxnb3JpdGhtIHVzZWQgZm9yIHRoZSBkcml2ZXIgdG8gc2VuZCB0aGUgZGV2aWNlIGEKK2J1ZmZlcjoKKworICBXcml0ZSB0aGUgaGVhZCBkZXNjcmlwdG9yIG51bWJlciB0byB0aGUgbmV4dCBmaWVsZCBpbiB0aGUgdXNlZAorICByaW5nLgorCisgIFVwZGF0ZSB0aGUgdXNlZCByaW5nIGlkeC4KKworICBEZXRlcm1pbmUgd2hldGhlciBhbiBpbnRlcnJ1cHQgaXMgbmVjZXNzYXJ5OgorCisgIElmIHRoZSBWSVJUSU9fRl9SSU5HX0VWRU5UX0lEWCBmZWF0dXJlIGlzIG5vdCBuZWdvdGlhdGVkOiBjaGVjaworICAgIGlmIGYgdGhlIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUIGZsYWcgaXMgbm90IHNldCBpbiBhdmFpbC0KKyAgICA+ZmxhZ3MKKworICBJZiB0aGUgVklSVElPX0ZfUklOR19FVkVOVF9JRFggZmVhdHVyZSBpcyBuZWdvdGlhdGVkOiBjaGVjaworICAgIHdoZXRoZXIgdGhlIHVzZWQgaW5kZXggY3Jvc3NlZCB0aGUgdXNlZF9ldmVudCBmaWVsZCB2YWx1ZQorICAgIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4gVGhlIHVzZWRfZXZlbnQgZmllbGQgd3JhcHMgbmF0dXJhbGx5CisgICAgYXQgNjU1MzYgYXMgd2VsbDoodTE2KShuZXdfaWR4IC0gdXNlZF9ldmVudCAtIDEpIDwgKHUxNikobmV3X2lkeCAtIG9sZF9pZHgpCisKKyAgSWYgYW4gaW50ZXJydXB0IGlzIG5lY2Vzc2FyeToKKworICBJZiBNU0ktWCBjYXBhYmlsaXR5IGlzIGRpc2FibGVkOgorCisgICAgU2V0IHRoZSBsb3dlciBiaXQgb2YgdGhlIElTUiBTdGF0dXMgZmllbGQgZm9yIHRoZSBkZXZpY2UuCisKKyAgICBTZW5kIHRoZSBhcHByb3ByaWF0ZSBQQ0kgaW50ZXJydXB0IGZvciB0aGUgZGV2aWNlLgorCisgIElmIE1TSS1YIGNhcGFiaWxpdHkgaXMgZW5hYmxlZDoKKworICAgIFJlcXVlc3QgdGhlIGFwcHJvcHJpYXRlIE1TSS1YIGludGVycnVwdCBtZXNzYWdlIGZvciB0aGUKKyAgICAgIGRldmljZSwgUXVldWUgVmVjdG9yIGZpZWxkIHNldHMgdGhlIE1TSS1YIFRhYmxlIGVudHJ5CisgICAgICBudW1iZXIuCisKKyAgICBJZiBRdWV1ZSBWZWN0b3IgZmllbGQgdmFsdWUgaXMgTk9fVkVDVE9SLCBubyBpbnRlcnJ1cHQKKyAgICAgIG1lc3NhZ2UgaXMgcmVxdWVzdGVkIGZvciB0aGlzIGV2ZW50LgorCitUaGUgZ3Vlc3QgaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkOgorCisgIElmIE1TSS1YIGNhcGFiaWxpdHkgaXMgZGlzYWJsZWQ6IHJlYWQgdGhlIElTUiBTdGF0dXMgZmllbGQsCisgIHdoaWNoIHdpbGwgcmVzZXQgaXQgdG8gemVyby4gSWYgdGhlIGxvd2VyIGJpdCBpcyB6ZXJvLCB0aGUKKyAgaW50ZXJydXB0IHdhcyBub3QgZm9yIHRoaXMgZGV2aWNlLiBPdGhlcndpc2UsIHRoZSBndWVzdCBkcml2ZXIKKyAgc2hvdWxkIGxvb2sgdGhyb3VnaCB0aGUgdXNlZCByaW5ncyBvZiBlYWNoIHZpcnRxdWV1ZSBmb3IgdGhlCisgIGRldmljZSwgdG8gc2VlIGlmIGFueSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIGJ5IHRoZSBkZXZpY2UKKyAgd2hpY2ggcmVxdWlyZXMgc2VydmljaW5nLgorCisgIElmIE1TSS1YIGNhcGFiaWxpdHkgaXMgZW5hYmxlZDogbG9vayB0aHJvdWdoIHRoZSB1c2VkIHJpbmdzIG9mCisgIGVhY2ggdmlydHF1ZXVlIG1hcHBlZCB0byB0aGUgc3BlY2lmaWMgTVNJLVggdmVjdG9yIGZvciB0aGUKKyAgZGV2aWNlLCB0byBzZWUgaWYgYW55IHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgYnkgdGhlIGRldmljZQorICB3aGljaCByZXF1aXJlcyBzZXJ2aWNpbmcuCisKK0ZvciBlYWNoIHJpbmcsIGd1ZXN0IHNob3VsZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cyBieSB3cml0aW5nCitWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCBmbGFnIGluIGF2YWlsIHN0cnVjdHVyZSwgaWYgcmVxdWlyZWQuCitJdCBjYW4gdGhlbiBwcm9jZXNzIHVzZWQgcmluZyBlbnRyaWVzIGZpbmFsbHkgZW5hYmxpbmcgaW50ZXJydXB0cworYnkgY2xlYXJpbmcgdGhlIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUIGZsYWcgb3IgdXBkYXRpbmcgdGhlCitFVkVOVF9JRFggZmllbGQgaW4gdGhlIGF2YWlsYWJsZSBzdHJ1Y3R1cmUsIEd1ZXN0IHNob3VsZCB0aGVuCitleGVjdXRlIGEgbWVtb3J5IGJhcnJpZXIsIGFuZCB0aGVuIHJlY2hlY2sgdGhlIHJpbmcgZW1wdHkKK2NvbmRpdGlvbi4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlLCBhZnRlciB0aGUKK2xhc3QgY2hlY2sgYW5kIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzLCBhbiBpbnRlcnJ1cHQgaGFzIGJlZW4KK3N1cHByZXNzZWQgYnkgdGhlIGRldmljZToKKwordnJpbmdfZGlzYWJsZV9pbnRlcnJ1cHRzKHZxKTsKKworZm9yICg7OykgeworCisgICAgaWYgKHZxLT5sYXN0X3NlZW5fdXNlZCAhPSB2cmluZy0+dXNlZC5pZHgpIHsKKworCQl2cmluZ19lbmFibGVfaW50ZXJydXB0cyh2cSk7CisKKwkJbWIoKTsKKworCQlpZiAodnEtPmxhc3Rfc2Vlbl91c2VkICE9IHZyaW5nLT51c2VkLmlkeCkKKworCQkJYnJlYWs7CisKKyAgICB9CisKKyAgICBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtICplID0KK3ZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3Rfc2Vlbl91c2VkJXZzel07CisKKyAgICBwcm9jZXNzX2J1ZmZlcihlKTsKKworICAgIHZxLT5sYXN0X3NlZW5fdXNlZCsrOworCit9CisKKyAgRGVhbGluZyBXaXRoIENvbmZpZ3VyYXRpb24gQ2hhbmdlcworCitTb21lIHZpcnRpbyBQQ0kgZGV2aWNlcyBjYW4gY2hhbmdlIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbgorc3RhdGUsIGFzIHJlZmxlY3RlZCBpbiB0aGUgdmlydGlvIGhlYWRlciBpbiB0aGUgUENJIGNvbmZpZ3VyYXRpb24KK3NwYWNlLiBJbiB0aGlzIGNhc2U6CisKKyAgSWYgTVNJLVggY2FwYWJpbGl0eSBpcyBkaXNhYmxlZDogYW4gaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBhbmQKKyAgdGhlIHNlY29uZCBoaWdoZXN0IGJpdCBpcyBzZXQgaW4gdGhlIElTUiBTdGF0dXMgZmllbGQgdG8KKyAgaW5kaWNhdGUgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCByZS1leGFtaW5lIHRoZSBjb25maWd1cmF0aW9uCisgIHNwYWNlLk5vdGUgdGhhdCBhIHNpbmdsZSBpbnRlcnJ1cHQgY2FuIGluZGljYXRlIGJvdGggdGhhdCBvbmUKKyAgb3IgbW9yZSB2aXJ0cXVldWUgaGFzIGJlZW4gdXNlZCBhbmQgdGhhdCB0aGUgY29uZmlndXJhdGlvbgorICBzcGFjZSBoYXMgY2hhbmdlZDogZXZlbiBpZiB0aGUgY29uZmlnIGJpdCBpcyBzZXQsIHZpcnRxdWV1ZXMKKyAgbXVzdCBiZSBzY2FubmVkLgorCisgIElmIE1TSS1YIGNhcGFiaWxpdHkgaXMgZW5hYmxlZDogYW4gaW50ZXJydXB0IG1lc3NhZ2UgaXMKKyAgcmVxdWVzdGVkLiBUaGUgQ29uZmlndXJhdGlvbiBWZWN0b3IgZmllbGQgc2V0cyB0aGUgTVNJLVggVGFibGUKKyAgZW50cnkgbnVtYmVyIHRvIHVzZS4gSWYgQ29uZmlndXJhdGlvbiBWZWN0b3IgZmllbGQgdmFsdWUgaXMKKyAgTk9fVkVDVE9SLCBubyBpbnRlcnJ1cHQgbWVzc2FnZSBpcyByZXF1ZXN0ZWQgZm9yIHRoaXMgZXZlbnQuCisKK0NyZWF0aW5nIE5ldyBEZXZpY2UgVHlwZXMKKworVmFyaW91cyBjb25zaWRlcmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHdoZW4gY3JlYXRpbmcgYSBuZXcgZGV2aWNlCit0eXBlOgorCisgIEhvdyBNYW55IFZpcnRxdWV1ZXM/CisKK0l0IGlzIHBvc3NpYmxlIHRoYXQgYSB2ZXJ5IHNpbXBsZSBkZXZpY2Ugd2lsbCBvcGVyYXRlIGVudGlyZWx5Cit0aHJvdWdoIGl0cyBjb25maWd1cmF0aW9uIHNwYWNlLCBidXQgbW9zdCB3aWxsIG5lZWQgYXQgbGVhc3Qgb25lCit2aXJ0cXVldWUgaW4gd2hpY2ggaXQgd2lsbCBwbGFjZSByZXF1ZXN0cy4gQSBkZXZpY2Ugd2l0aCBib3RoCitpbnB1dCBhbmQgb3V0cHV0IChlZy4gY29uc29sZSBhbmQgbmV0d29yayBkZXZpY2VzIGRlc2NyaWJlZCBoZXJlKQorbmVlZCB0d28gcXVldWVzOiBvbmUgd2hpY2ggdGhlIGRyaXZlciBmaWxscyB3aXRoIGJ1ZmZlcnMgdG8KK3JlY2VpdmUgaW5wdXQsIGFuZCBvbmUgd2hpY2ggdGhlIGRyaXZlciBwbGFjZXMgYnVmZmVycyB0bwordHJhbnNtaXQgb3V0cHV0LgorCisgIFdoYXQgQ29uZmlndXJhdGlvbiBTcGFjZSBMYXlvdXQ/CisKK0NvbmZpZ3VyYXRpb24gc3BhY2UgaXMgZ2VuZXJhbGx5IHVzZWQgZm9yIHJhcmVseS1jaGFuZ2luZyBvcgoraW5pdGlhbGl6YXRpb24tdGltZSBwYXJhbWV0ZXJzLiBCdXQgaXQgaXMgYSBsaW1pdGVkIHJlc291cmNlLCBzbworaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHVzZSBhIHZpcnRxdWV1ZSB0byB1cGRhdGUgY29uZmlndXJhdGlvbgoraW5mb3JtYXRpb24gKHRoZSBuZXR3b3JrIGRldmljZSBkb2VzIHRoaXMgZm9yIGZpbHRlcmluZywKK290aGVyd2lzZSB0aGUgdGFibGUgaW4gdGhlIGNvbmZpZyBzcGFjZSBjb3VsZCBwb3RlbnRpYWxseSBiZSB2ZXJ5CitsYXJnZSkuCisKK05vdGUgdGhhdCB0aGlzIHNwYWNlIGlzIGdlbmVyYWxseSB0aGUgZ3Vlc3QncyBuYXRpdmUgZW5kaWFuLAorcmF0aGVyIHRoYW4gUENJJ3MgbGl0dGxlLWVuZGlhbi4KKworICBXaGF0IERldmljZSBOdW1iZXI/CisKK0N1cnJlbnRseSBkZXZpY2UgbnVtYmVycyBhcmUgYXNzaWduZWQgcXVpdGUgZnJlZWx5OiBhIHNpbXBsZQorcmVxdWVzdCBtYWlsIHRvIHRoZSBhdXRob3Igb2YgdGhpcyBkb2N1bWVudCBvciB0aGUgTGludXgKK3ZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdFtmb290bm90ZToKKworaHR0cHM6Ly9saXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9uCitdIHdpbGwgYmUgc3VmZmljaWVudCB0byBzZWN1cmUgYSB1bmlxdWUgb25lLgorCitNZWFud2hpbGUgZm9yIGV4cGVyaW1lbnRhbCBkcml2ZXJzLCB1c2UgNjU1MzUgYW5kIHdvcmsgYmFja3dhcmRzLgorCisgIEhvdyBtYW55IE1TSS1YIHZlY3RvcnM/CisKK1VzaW5nIHRoZSBvcHRpb25hbCBNU0ktWCBjYXBhYmlsaXR5IGRldmljZXMgY2FuIHNwZWVkIHVwCitpbnRlcnJ1cHQgcHJvY2Vzc2luZyBieSByZW1vdmluZyB0aGUgbmVlZCB0byByZWFkIElTUiBTdGF0dXMKK3JlZ2lzdGVyIGJ5IGd1ZXN0IGRyaXZlciAod2hpY2ggbWlnaHQgYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiksCityZWR1Y2luZyBpbnRlcnJ1cHQgc2hhcmluZyBiZXR3ZWVuIGRldmljZXMgYW5kIHF1ZXVlcyB3aXRoaW4gdGhlCitkZXZpY2UsIGFuZCBoYW5kbGluZyBpbnRlcnJ1cHRzIGZyb20gbXVsdGlwbGUgQ1BVcy4gSG93ZXZlciwgc29tZQorc3lzdGVtcyBpbXBvc2UgYSBsaW1pdCAod2hpY2ggbWlnaHQgYmUgYXMgbG93IGFzIDI1Nikgb24gdGhlCit0b3RhbCBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgdG8gYWxsCitkZXZpY2VzLiBEZXZpY2VzIGFuZC9vciBkZXZpY2UgZHJpdmVycyBzaG91bGQgdGFrZSB0aGlzIGludG8KK2FjY291bnQsIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgdmVjdG9ycyB1c2VkIHVubGVzcyB0aGUgZGV2aWNlIGlzCitleHBlY3RlZCB0byBjYXVzZSBhIGhpZ2ggdm9sdW1lIG9mIGludGVycnVwdHMuIERldmljZXMgY2FuCitjb250cm9sIHRoZSBudW1iZXIgb2YgdmVjdG9ycyB1c2VkIGJ5IGxpbWl0aW5nIHRoZSBNU0ktWCBUYWJsZQorU2l6ZSBvciBub3QgcHJlc2VudGluZyBNU0ktWCBjYXBhYmlsaXR5IGluIFBDSSBjb25maWd1cmF0aW9uCitzcGFjZS4gRHJpdmVycyBjYW4gY29udHJvbCB0aGlzIGJ5IG1hcHBpbmcgZXZlbnRzIHRvIGFzIHNtYWxsCitudW1iZXIgb2YgdmVjdG9ycyBhcyBwb3NzaWJsZSwgb3IgZGlzYWJsaW5nIE1TSS1YIGNhcGFiaWxpdHkKK2FsdG9nZXRoZXIuCisKKyAgTWVzc2FnZSBGcmFtaW5nCisKK1RoZSBkZXNjcmlwdG9ycyB1c2VkIGZvciBhIGJ1ZmZlciBzaG91bGQgbm90IGVmZmVjdCB0aGUgc2VtYW50aWNzCitvZiB0aGUgbWVzc2FnZSwgZXhjZXB0IGZvciB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBidWZmZXIuIEZvcgorZXhhbXBsZSwgYSBuZXR3b3JrIGJ1ZmZlciBjb25zaXN0cyBvZiBhIDEwIGJ5dGUgaGVhZGVyIGZvbGxvd2VkCitieSB0aGUgbmV0d29yayBwYWNrZXQuIFdoZXRoZXIgdGhpcyBpcyBwcmVzZW50ZWQgaW4gdGhlIHJpbmcKK2Rlc2NyaXB0b3IgY2hhaW4gYXMgKHNheSkgYSAxMCBieXRlIGJ1ZmZlciBhbmQgYSAxNTE0IGJ5dGUKK2J1ZmZlciwgb3IgYSBzaW5nbGUgMTUyNCBieXRlIGJ1ZmZlciwgb3IgZXZlbiB0aHJlZSBidWZmZXJzLAorc2hvdWxkIGhhdmUgbm8gZWZmZWN0LgorCitJbiBwYXJ0aWN1bGFyLCBubyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgdXNlIHRoZSBkZXNjcmlwdG9yCitib3VuZGFyaWVzIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBhbnkgaGVhZGVyIGluIGEgcmVxdWVzdC5bZm9vdG5vdGU6CitUaGUgY3VycmVudCBxZW11IGRldmljZSBpbXBsZW1lbnRhdGlvbnMgbWlzdGFrZW5seSBpbnNpc3QgdGhhdAordGhlIGZpcnN0IGRlc2NyaXB0b3IgY292ZXIgdGhlIGhlYWRlciBpbiB0aGVzZSBjYXNlcyBleGFjdGx5LCBzbworYSBjYXV0aW91cyBkcml2ZXIgc2hvdWxkIGFycmFuZ2UgaXQgc28uCitdCisKKyAgRGV2aWNlIEltcHJvdmVtZW50cworCitBbnkgY2hhbmdlIHRvIGNvbmZpZ3VyYXRpb24gc3BhY2UsIG9yIG5ldyB2aXJ0cXVldWVzLCBvcgorYmVoYXZpb3VyYWwgY2hhbmdlcywgc2hvdWxkIGJlIGluZGljYXRlZCBieSBuZWdvdGlhdGlvbiBvZiBhIG5ldworZmVhdHVyZSBiaXQuIFRoaXMgZXN0YWJsaXNoZXMgY2xhcml0eVtmb290bm90ZToKK0V2ZW4gaWYgaXQgZG9lcyBtZWFuIGRvY3VtZW50aW5nIGRlc2lnbiBvciBpbXBsZW1lbnRhdGlvbgorbWlzdGFrZXMhCitdIGFuZCBhdm9pZHMgZnV0dXJlIGV4cGFuc2lvbiBwcm9ibGVtcy4KKworQ2x1c3RlcnMgb2YgZnVuY3Rpb25hbGl0eSB3aGljaCBhcmUgYWx3YXlzIGltcGxlbWVudGVkIHRvZ2V0aGVyCitjYW4gdXNlIGEgc2luZ2xlIGJpdCwgYnV0IGlmIG9uZSBmZWF0dXJlIG1ha2VzIHNlbnNlIHdpdGhvdXQgdGhlCitvdGhlcnMgdGhleSBzaG91bGQgbm90IGJlIGdyYXR1aXRvdXNseSBncm91cGVkIHRvZ2V0aGVyIHRvCitjb25zZXJ2ZSBmZWF0dXJlIGJpdHMuIFdlIGNhbiBhbHdheXMgZXh0ZW5kIHRoZSBzcGVjIHdoZW4gdGhlCitmaXJzdCBwZXJzb24gbmVlZHMgbW9yZSB0aGFuIDI0IGZlYXR1cmUgYml0cyBmb3IgdGhlaXIgZGV2aWNlLgorCitbTGFUZVggQ29tbWFuZDogcHJpbnRub21lbmNsYXR1cmVdCisKK0FwcGVuZGl4IEE6IHZpcnRpb19yaW5nLmgKKworI2lmbmRlZiBWSVJUSU9fUklOR19ICisKKyNkZWZpbmUgVklSVElPX1JJTkdfSAorCisvKiBBbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudCB2aXJ0aW8gaW1wbGVtZW50YXRpb24uCisKKyAqCisKKyAqIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMKKworICogdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgorCisgKgorCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOSwgSUJNIENvcnBvcmF0aW9uCisKKyAqIENvcHlyaWdodCAyMDExLCBSZWQgSGF0LCBJbmMKKworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICoKKworICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgord2l0aG91dAorCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zCisKKyAqIGFyZSBtZXQ6CisKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKK2NvcHlyaWdodAorCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyLgorCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQKKworICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lciBpbiB0aGUKKworICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisKKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgSUJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlCisKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKK0NPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUKKworICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFCisKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFCisKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTAorCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMKKworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKQorCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QKKworICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkKKworICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YKKworICogU1VDSCBEQU1BR0UuCisKKyAqLworCisKKworLyogVGhpcyBtYXJrcyBhIGJ1ZmZlciBhcyBjb250aW51aW5nIHZpYSB0aGUgbmV4dCBmaWVsZC4gKi8KKworI2RlZmluZSBWUklOR19ERVNDX0ZfTkVYVCAgICAgICAxCisKKy8qIFRoaXMgbWFya3MgYSBidWZmZXIgYXMgd3JpdGUtb25seSAob3RoZXJ3aXNlIHJlYWQtb25seSkuICovCisKKyNkZWZpbmUgVlJJTkdfREVTQ19GX1dSSVRFICAgICAgMgorCisKKworLyogVGhlIEhvc3QgdXNlcyB0aGlzIGluIHVzZWQtPmZsYWdzIHRvIGFkdmlzZSB0aGUgR3Vlc3Q6IGRvbid0CitraWNrIG1lCisKKyAqIHdoZW4geW91IGFkZCBhIGJ1ZmZlci4gIEl0J3MgdW5yZWxpYWJsZSwgc28gaXQncyBzaW1wbHkgYW4KKworICogb3B0aW1pemF0aW9uLiAgR3Vlc3Qgd2lsbCBzdGlsbCBraWNrIGlmIGl0J3Mgb3V0IG9mIGJ1ZmZlcnMuCisqLworCisjZGVmaW5lIFZSSU5HX1VTRURfRl9OT19OT1RJRlkgIDEKKworLyogVGhlIEd1ZXN0IHVzZXMgdGhpcyBpbiBhdmFpbC0+ZmxhZ3MgdG8gYWR2aXNlIHRoZSBIb3N0OiBkb24ndAorCisgKiBpbnRlcnJ1cHQgbWUgd2hlbiB5b3UgY29uc3VtZSBhIGJ1ZmZlci4gIEl0J3MgdW5yZWxpYWJsZSwgc28KK2l0J3MKKworICogc2ltcGx5IGFuIG9wdGltaXphdGlvbi4gICovCisKKyNkZWZpbmUgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQgICAgICAxCisKKworCisvKiBWaXJ0aW8gcmluZyBkZXNjcmlwdG9yczogMTYgYnl0ZXMuCisKKyAqIFRoZXNlIGNhbiBjaGFpbiB0b2dldGhlciB2aWEgIm5leHQiLiAqLworCitzdHJ1Y3QgdnJpbmdfZGVzYyB7CisKKyAgICAgICAgLyogQWRkcmVzcyAoZ3Vlc3QtcGh5c2ljYWwpLiAqLworCisgICAgICAgIHVpbnQ2NF90IGFkZHI7CisKKyAgICAgICAgLyogTGVuZ3RoLiAqLworCisgICAgICAgIHVpbnQzMl90IGxlbjsKKworICAgICAgICAvKiBUaGUgZmxhZ3MgYXMgaW5kaWNhdGVkIGFib3ZlLiAqLworCisgICAgICAgIHVpbnQxNl90IGZsYWdzOworCisgICAgICAgIC8qIFdlIGNoYWluIHVudXNlZCBkZXNjcmlwdG9ycyB2aWEgdGhpcywgdG9vICovCisKKyAgICAgICAgdWludDE2X3QgbmV4dDsKKworfTsKKworCisKK3N0cnVjdCB2cmluZ19hdmFpbCB7CisKKyAgICAgICAgdWludDE2X3QgZmxhZ3M7CisKKyAgICAgICAgdWludDE2X3QgaWR4OworCisgICAgICAgIHVpbnQxNl90IHJpbmdbXTsKKworICAgICAgICB1aW50MTZfdCB1c2VkX2V2ZW50OworCit9OworCisKKworLyogdTMyIGlzIHVzZWQgaGVyZSBmb3IgaWRzIGZvciBwYWRkaW5nIHJlYXNvbnMuICovCisKK3N0cnVjdCB2cmluZ191c2VkX2VsZW0geworCisgICAgICAgIC8qIEluZGV4IG9mIHN0YXJ0IG9mIHVzZWQgZGVzY3JpcHRvciBjaGFpbi4gKi8KKworICAgICAgICB1aW50MzJfdCBpZDsKKworICAgICAgICAvKiBUb3RhbCBsZW5ndGggb2YgdGhlIGRlc2NyaXB0b3IgY2hhaW4gd2hpY2ggd2FzIHdyaXR0ZW4KK3RvLiAqLworCisgICAgICAgIHVpbnQzMl90IGxlbjsKKworfTsKKworCisKK3N0cnVjdCB2cmluZ191c2VkIHsKKworICAgICAgICB1aW50MTZfdCBmbGFnczsKKworICAgICAgICB1aW50MTZfdCBpZHg7CisKKyAgICAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSByaW5nW107CisKKyAgICAgICAgdWludDE2X3QgYXZhaWxfZXZlbnQ7CisKK307CisKKworCitzdHJ1Y3QgdnJpbmcgeworCisgICAgICAgIHVuc2lnbmVkIGludCBudW07CisKKworCisgICAgICAgIHN0cnVjdCB2cmluZ19kZXNjICpkZXNjOworCisgICAgICAgIHN0cnVjdCB2cmluZ19hdmFpbCAqYXZhaWw7CisKKyAgICAgICAgc3RydWN0IHZyaW5nX3VzZWQgKnVzZWQ7CisKK307CisKKworCisvKiBUaGUgc3RhbmRhcmQgbGF5b3V0IGZvciB0aGUgcmluZyBpcyBhIGNvbnRpbnVvdXMgY2h1bmsgb2YKK21lbW9yeSB3aGljaAorCisgKiBsb29rcyBsaWtlIHRoaXMuICBXZSBhc3N1bWUgbnVtIGlzIGEgcG93ZXIgb2YgMi4KKworICoKKworICogc3RydWN0IHZyaW5nIHsKKworICogICAgICAvLyBUaGUgYWN0dWFsIGRlc2NyaXB0b3JzICgxNiBieXRlcyBlYWNoKQorCisgKiAgICAgIHN0cnVjdCB2cmluZ19kZXNjIGRlc2NbbnVtXTsKKworICoKKworICogICAgICAvLyBBIHJpbmcgb2YgYXZhaWxhYmxlIGRlc2NyaXB0b3IgaGVhZHMgd2l0aCBmcmVlLXJ1bm5pbmcKK2luZGV4LgorCisgKiAgICAgIF9fdTE2IGF2YWlsX2ZsYWdzOworCisgKiAgICAgIF9fdTE2IGF2YWlsX2lkeDsKKworICogICAgICBfX3UxNiBhdmFpbGFibGVbbnVtXTsKKworICoKKworICogICAgICAvLyBQYWRkaW5nIHRvIHRoZSBuZXh0IGFsaWduIGJvdW5kYXJ5LgorCisgKiAgICAgIGNoYXIgcGFkW107CisKKyAqCisKKyAqICAgICAgLy8gQSByaW5nIG9mIHVzZWQgZGVzY3JpcHRvciBoZWFkcyB3aXRoIGZyZWUtcnVubmluZworaW5kZXguCisKKyAqICAgICAgX191MTYgdXNlZF9mbGFnczsKKworICogICAgICBfX3UxNiBFVkVOVF9JRFg7CisKKyAqICAgICAgc3RydWN0IHZyaW5nX3VzZWRfZWxlbSB1c2VkW251bV07CisKKyAqIH07CisKKyAqIE5vdGU6IGZvciB2aXJ0aW8gUENJLCBhbGlnbiBpcyA0MDk2LgorCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHZyaW5nX2luaXQoc3RydWN0IHZyaW5nICp2ciwgdW5zaWduZWQgaW50IG51bSwKK3ZvaWQgKnAsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCisKK3sKKworICAgICAgICB2ci0+bnVtID0gbnVtOworCisgICAgICAgIHZyLT5kZXNjID0gcDsKKworICAgICAgICB2ci0+YXZhaWwgPSBwICsgbnVtKnNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyk7CisKKyAgICAgICAgdnItPnVzZWQgPSAodm9pZCAqKSgoKHVuc2lnbmVkIGxvbmcpJnZyLT5hdmFpbC0+cmluZ1tudW1dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYWxpZ24tMSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgfihhbGlnbiAtIDEpKTsKKworfQorCisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCB2cmluZ19zaXplKHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGxvbmcKK2FsaWduKQorCit7CisKKyAgICAgICAgcmV0dXJuICgoc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSpudW0gKworc2l6ZW9mKHVpbnQxNl90KSooMitudW0pCisKKyAgICAgICAgICAgICAgICAgKyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpKQorCisgICAgICAgICAgICAgICAgKyBzaXplb2YodWludDE2X3QpKjMgKyBzaXplb2Yoc3RydWN0Cit2cmluZ191c2VkX2VsZW0pKm51bTsKKworfQorCisKKworc3RhdGljIGlubGluZSBpbnQgdnJpbmdfbmVlZF9ldmVudCh1aW50MTZfdCBldmVudF9pZHgsIHVpbnQxNl90CituZXdfaWR4LCB1aW50MTZfdCBvbGRfaWR4KQorCit7CisKKyAgICAgICAgIHJldHVybiAodWludDE2X3QpKG5ld19pZHggLSBldmVudF9pZHggLSAxKSA8CisodWludDE2X3QpKG5ld19pZHggLSBvbGRfaWR4KTsKKworfQorCisjZW5kaWYgLyogVklSVElPX1JJTkdfSCAqLworCis8Y2hhOlJlc2VydmVkLUZlYXR1cmUtQml0cz5BcHBlbmRpeCBCOiBSZXNlcnZlZCBGZWF0dXJlIEJpdHMKKworQ3VycmVudGx5IHRoZXJlIGFyZSBmaXZlIGRldmljZS1pbmRlcGVuZGVudCBmZWF0dXJlIGJpdHMgZGVmaW5lZDoKKworICBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgKDI0KSBOZWdvdGlhdGluZyB0aGlzIGZlYXR1cmUKKyAgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciB3YW50cyBhbiBpbnRlcnJ1cHQgaWYgdGhlIGRldmljZSBydW5zCisgIG91dCBvZiBhdmFpbGFibGUgZGVzY3JpcHRvcnMgb24gYSB2aXJ0cXVldWUsIGV2ZW4gdGhvdWdoCisgIGludGVycnVwdHMgYXJlIHN1cHByZXNzZWQgdXNpbmcgdGhlIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUCisgIGZsYWcgb3IgdGhlIHVzZWRfZXZlbnQgZmllbGQuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUKKyAgbmV0d29ya2luZyBkcml2ZXI6IGl0IGRvZXNuJ3QgbmVlZCB0byBrbm93IGV2ZXJ5IHRpbWUgYSBwYWNrZXQKKyAgaXMgdHJhbnNtaXR0ZWQsIGJ1dCBpdCBkb2VzIG5lZWQgdG8gZnJlZSB0aGUgdHJhbnNtaXR0ZWQKKyAgcGFja2V0cyBhIGZpbml0ZSB0aW1lIGFmdGVyIHRoZXkgYXJlIHRyYW5zbWl0dGVkLiBJdCBjYW4gYXZvaWQKKyAgdXNpbmcgYSB0aW1lciBpZiB0aGUgZGV2aWNlIGludGVycnVwdHMgaXQgd2hlbiBhbGwgdGhlIHBhY2tldHMKKyAgYXJlIHRyYW5zbWl0dGVkLgorCisgIFZJUlRJT19GX1JJTkdfSU5ESVJFQ1RfREVTQyAoMjgpIE5lZ290aWF0aW5nIHRoaXMgZmVhdHVyZQorICBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIGNhbiB1c2UgZGVzY3JpcHRvcnMgd2l0aCB0aGUKKyAgVlJJTkdfREVTQ19GX0lORElSRUNUIGZsYWcgc2V0LCBhcyBkZXNjcmliZWQgaW4gW3N1YjpJbmRpcmVjdC1EZXNjcmlwdG9yc10KKyAgLgorCisgIFZJUlRJT19GX1JJTkdfRVZFTlRfSURYKDI5KSBUaGlzIGZlYXR1cmUgZW5hYmxlcyB0aGUgdXNlZF9ldmVudAorICBhbmQgdGhlIGF2YWlsX2V2ZW50IGZpZWxkcy4gSWYgc2V0LCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKKyAgZGV2aWNlIHNob3VsZCBpZ25vcmUgdGhlIGZsYWdzIGZpZWxkIGluIHRoZSBhdmFpbGFibGUgcmluZworICBzdHJ1Y3R1cmUuIEluc3RlYWQsIHRoZSB1c2VkX2V2ZW50IGZpZWxkIGluIHRoaXMgc3RydWN0dXJlIGlzCisgIHVzZWQgYnkgZ3Vlc3QgdG8gc3VwcHJlc3MgZGV2aWNlIGludGVycnVwdHMuIEZ1cnRoZXIsIHRoZQorICBkcml2ZXIgc2hvdWxkIGlnbm9yZSB0aGUgZmxhZ3MgZmllbGQgaW4gdGhlIHVzZWQgcmluZworICBzdHJ1Y3R1cmUuIEluc3RlYWQsIHRoZSBhdmFpbF9ldmVudCBmaWVsZCBpbiB0aGlzIHN0cnVjdHVyZSBpcworICB1c2VkIGJ5IHRoZSBkZXZpY2UgdG8gc3VwcHJlc3Mgbm90aWZpY2F0aW9ucy4gSWYgdW5zZXQsIHRoZQorICBkcml2ZXIgc2hvdWxkIGlnbm9yZSB0aGUgdXNlZF9ldmVudCBmaWVsZDsgdGhlIGRldmljZSBzaG91bGQKKyAgaWdub3JlIHRoZSBhdmFpbF9ldmVudCBmaWVsZDsgdGhlIGZsYWdzIGZpZWxkIGlzIHVzZWQKKworICBWSVJUSU9fRl9CQURfRkVBVFVSRSgzMCkgVGhpcyBmZWF0dXJlIHNob3VsZCBuZXZlciBiZQorICBuZWdvdGlhdGVkIGJ5IHRoZSBndWVzdDsgZG9pbmcgc28gaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZQorICBndWVzdCBpcyBmYXVsdHlbZm9vdG5vdGU6CitBbiBleHBlcmltZW50YWwgdmlydGlvIFBDSSBkcml2ZXIgY29udGFpbmVkIGluIExpbnV4IHZlcnNpb24KKzIuNi4yNSBoYWQgdGhpcyBwcm9ibGVtLCBhbmQgdGhpcyBmZWF0dXJlIGJpdCBjYW4gYmUgdXNlZCB0bworZGV0ZWN0IGl0LgorXQorCisgIFZJUlRJT19GX0ZFQVRVUkVTX0hJR0goMzEpIFRoaXMgZmVhdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUKKyAgZGV2aWNlIHN1cHBvcnRzIGZlYXR1cmUgYml0cyAzMjo2My4gSWYgdW5zZXQsIGZlYXR1cmUgYml0cworICAzMjo2MyBhcmUgdW5zZXQuCisKK0FwcGVuZGl4IEM6IE5ldHdvcmsgRGV2aWNlCisKK1RoZSB2aXJ0aW8gbmV0d29yayBkZXZpY2UgaXMgYSB2aXJ0dWFsIGV0aGVybmV0IGNhcmQsIGFuZCBpcyB0aGUKK21vc3QgY29tcGxleCBvZiB0aGUgZGV2aWNlcyBzdXBwb3J0ZWQgc28gZmFyIGJ5IHZpcnRpby4gSXQgaGFzCitlbmhhbmNlZCByYXBpZGx5IGFuZCBkZW1vbnN0cmF0ZXMgY2xlYXJseSBob3cgc3VwcG9ydCBmb3IgbmV3CitmZWF0dXJlcyBzaG91bGQgYmUgYWRkZWQgdG8gYW4gZXhpc3RpbmcgZGV2aWNlLiBFbXB0eSBidWZmZXJzIGFyZQorcGxhY2VkIGluIG9uZSB2aXJ0cXVldWUgZm9yIHJlY2VpdmluZyBwYWNrZXRzLCBhbmQgb3V0Z29pbmcKK3BhY2tldHMgYXJlIGVucXVldWVkIGludG8gYW5vdGhlciBmb3IgdHJhbnNtaXNzaW9uIGluIHRoYXQgb3JkZXIuCitBIHRoaXJkIGNvbW1hbmQgcXVldWUgaXMgdXNlZCB0byBjb250cm9sIGFkdmFuY2VkIGZpbHRlcmluZworZmVhdHVyZXMuCisKKyAgQ29uZmlndXJhdGlvbgorCisgIFN1YnN5c3RlbSBEZXZpY2UgSUQgMQorCisgIFZpcnRxdWV1ZXMgMDpyZWNlaXZlcS4gMTp0cmFuc21pdHEuIDI6Y29udHJvbHFbZm9vdG5vdGU6CitPbmx5IGlmIFZJUlRJT19ORVRfRl9DVFJMX1ZRIHNldAorXQorCisgIEZlYXR1cmUgYml0cworCisgIFZJUlRJT19ORVRfRl9DU1VNICgwKSBEZXZpY2UgaGFuZGxlcyBwYWNrZXRzIHdpdGggcGFydGlhbAorICAgIGNoZWNrc3VtCisKKyAgVklSVElPX05FVF9GX0dVRVNUX0NTVU0gKDEpIEd1ZXN0IGhhbmRsZXMgcGFja2V0cyB3aXRoIHBhcnRpYWwKKyAgICBjaGVja3N1bQorCisgIFZJUlRJT19ORVRfRl9NQUMgKDUpIERldmljZSBoYXMgZ2l2ZW4gTUFDIGFkZHJlc3MuCisKKyAgVklSVElPX05FVF9GX0dTTyAoNikgKERlcHJlY2F0ZWQpIGRldmljZSBoYW5kbGVzIHBhY2tldHMgd2l0aAorICAgIGFueSBHU08gdHlwZS5bZm9vdG5vdGU6CitJdCB3YXMgc3VwcG9zZWQgdG8gaW5kaWNhdGUgc2VnbWVudGF0aW9uIG9mZmxvYWQgc3VwcG9ydCwgYnV0Cit1cG9uIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpdCBiZWNhbWUgY2xlYXIgdGhhdCBtdWx0aXBsZSBiaXRzCit3ZXJlIHJlcXVpcmVkLgorXQorCisgIFZJUlRJT19ORVRfRl9HVUVTVF9UU080ICg3KSBHdWVzdCBjYW4gcmVjZWl2ZSBUU092NC4KKworICBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiAoOCkgR3Vlc3QgY2FuIHJlY2VpdmUgVFNPdjYuCisKKyAgVklSVElPX05FVF9GX0dVRVNUX0VDTiAoOSkgR3Vlc3QgY2FuIHJlY2VpdmUgVFNPIHdpdGggRUNOLgorCisgIFZJUlRJT19ORVRfRl9HVUVTVF9VRk8gKDEwKSBHdWVzdCBjYW4gcmVjZWl2ZSBVRk8uCisKKyAgVklSVElPX05FVF9GX0hPU1RfVFNPNCAoMTEpIERldmljZSBjYW4gcmVjZWl2ZSBUU092NC4KKworICBWSVJUSU9fTkVUX0ZfSE9TVF9UU082ICgxMikgRGV2aWNlIGNhbiByZWNlaXZlIFRTT3Y2LgorCisgIFZJUlRJT19ORVRfRl9IT1NUX0VDTiAoMTMpIERldmljZSBjYW4gcmVjZWl2ZSBUU08gd2l0aCBFQ04uCisKKyAgVklSVElPX05FVF9GX0hPU1RfVUZPICgxNCkgRGV2aWNlIGNhbiByZWNlaXZlIFVGTy4KKworICBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGICgxNSkgR3Vlc3QgY2FuIG1lcmdlIHJlY2VpdmUgYnVmZmVycy4KKworICBWSVJUSU9fTkVUX0ZfU1RBVFVTICgxNikgQ29uZmlndXJhdGlvbiBzdGF0dXMgZmllbGQgaXMKKyAgICBhdmFpbGFibGUuCisKKyAgVklSVElPX05FVF9GX0NUUkxfVlEgKDE3KSBDb250cm9sIGNoYW5uZWwgaXMgYXZhaWxhYmxlLgorCisgIFZJUlRJT19ORVRfRl9DVFJMX1JYICgxOCkgQ29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydC4KKworICBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOICgxOSkgQ29udHJvbCBjaGFubmVsIFZMQU4gZmlsdGVyaW5nLgorCisgIERldmljZSBjb25maWd1cmF0aW9uIGxheW91dCBUd28gY29uZmlndXJhdGlvbiBmaWVsZHMgYXJlCisgIGN1cnJlbnRseSBkZWZpbmVkLiBUaGUgbWFjIGFkZHJlc3MgZmllbGQgYWx3YXlzIGV4aXN0cyAodGhvdWdoCisgIGlzIG9ubHkgdmFsaWQgaWYgVklSVElPX05FVF9GX01BQyBpcyBzZXQpLCBhbmQgdGhlIHN0YXR1cyBmaWVsZAorICBvbmx5IGV4aXN0cyBpZiBWSVJUSU9fTkVUX0ZfU1RBVFVTIGlzIHNldC4gT25seSBvbmUgYml0IGlzCisgIGN1cnJlbnRseSBkZWZpbmVkIGZvciB0aGUgc3RhdHVzIGZpZWxkOiBWSVJUSU9fTkVUX1NfTElOS19VUC4gI2RlZmluZSBWSVJUSU9fTkVUX1NfTElOS19VUAkxCisKKworCitzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgeworCisgICAgdTggbWFjWzZdOworCisgICAgdTE2IHN0YXR1czsKKworfTsKKworICBEZXZpY2UgSW5pdGlhbGl6YXRpb24KKworICBUaGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBzaG91bGQgaWRlbnRpZnkgdGhlIHJlY2VpdmUgYW5kCisgIHRyYW5zbWlzc2lvbiB2aXJ0cXVldWVzLgorCisgIElmIHRoZSBWSVJUSU9fTkVUX0ZfTUFDIGZlYXR1cmUgYml0IGlzIHNldCwgdGhlIGNvbmZpZ3VyYXRpb24KKyAgc3BhY2Ug4oCcbWFj4oCdIGVudHJ5IGluZGljYXRlcyB0aGUg4oCccGh5c2ljYWzigJ0gYWRkcmVzcyBvZiB0aGUgdGhlCisgIG5ldHdvcmsgY2FyZCwgb3RoZXJ3aXNlIGEgcHJpdmF0ZSBNQUMgYWRkcmVzcyBzaG91bGQgYmUKKyAgYXNzaWduZWQuIEFsbCBndWVzdHMgYXJlIGV4cGVjdGVkIHRvIG5lZ290aWF0ZSB0aGlzIGZlYXR1cmUgaWYKKyAgaXQgaXMgc2V0LgorCisgIElmIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSBmZWF0dXJlIGJpdCBpcyBuZWdvdGlhdGVkLCBpZGVudGlmeQorICB0aGUgY29udHJvbCB2aXJ0cXVldWUuCisKKyAgSWYgdGhlIFZJUlRJT19ORVRfRl9TVEFUVVMgZmVhdHVyZSBiaXQgaXMgbmVnb3RpYXRlZCwgdGhlIGxpbmsKKyAgc3RhdHVzIGNhbiBiZSByZWFkIGZyb20gdGhlIGJvdHRvbSBiaXQgb2YgdGhlIOKAnHN0YXR1c+KAnSBjb25maWcKKyAgZmllbGQuIE90aGVyd2lzZSwgdGhlIGxpbmsgc2hvdWxkIGJlIGFzc3VtZWQgYWN0aXZlLgorCisgIFRoZSByZWNlaXZlIHZpcnRxdWV1ZSBzaG91bGQgYmUgZmlsbGVkIHdpdGggcmVjZWl2ZSBidWZmZXJzLgorICBUaGlzIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cgaW4g4oCcU2V0dGluZyBVcCBSZWNlaXZlCisgIEJ1ZmZlcnPigJ0uCisKKyAgQSBkcml2ZXIgY2FuIGluZGljYXRlIHRoYXQgaXQgd2lsbCBnZW5lcmF0ZSBjaGVja3N1bWxlc3MKKyAgcGFja2V0cyBieSBuZWdvdGF0aW5nIHRoZSBWSVJUSU9fTkVUX0ZfQ1NVTSBmZWF0dXJlLiBUaGlzIOKAnAorICBjaGVja3N1bSBvZmZsb2Fk4oCdIGlzIGEgY29tbW9uIGZlYXR1cmUgb24gbW9kZXJuIG5ldHdvcmsgY2FyZHMuCisKKyAgSWYgdGhhdCBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsIGEgZHJpdmVyIGNhbiB1c2UgVENQIG9yIFVEUAorICBzZWdtZW50YXRpb24gb2ZmbG9hZCBieSBuZWdvdGlhdGluZyB0aGUgVklSVElPX05FVF9GX0hPU1RfVFNPNAorICAoSVB2NCBUQ1ApLCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082IChJUHY2IFRDUCkgYW5kCisgIFZJUlRJT19ORVRfRl9IT1NUX1VGTyAoVURQIGZyYWdtZW50YXRpb24pIGZlYXR1cmVzLiBJdCBzaG91bGQKKyAgbm90IHNlbmQgVENQIHBhY2tldHMgcmVxdWlyaW5nIHNlZ21lbnRhdGlvbiBvZmZsb2FkIHdoaWNoIGhhdmUKKyAgdGhlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIGJpdCBzZXQsIHVubGVzcyB0aGUKKyAgVklSVElPX05FVF9GX0hPU1RfRUNOIGZlYXR1cmUgaXMgbmVnb3RpYXRlZC5bZm9vdG5vdGU6CitUaGlzIGlzIGEgY29tbW9uIHJlc3RyaWN0aW9uIGluIHJlYWwsIG9sZGVyIG5ldHdvcmsgY2FyZHMuCitdCisKKyAgVGhlIGNvbnZlcnNlIGZlYXR1cmVzIGFyZSBhbHNvIGF2YWlsYWJsZTogYSBkcml2ZXIgY2FuIHNhdmUgdGhlCisgIHZpcnR1YWwgZGV2aWNlIHNvbWUgd29yayBieSBuZWdvdGlhdGluZyB0aGVzZSBmZWF0dXJlcy5bZm9vdG5vdGU6CitGb3IgZXhhbXBsZSwgYSBuZXR3b3JrIHBhY2tldCB0cmFuc3BvcnRlZCBiZXR3ZWVuIHR3byBndWVzdHMgb24KK3RoZSBzYW1lIHN5c3RlbSBtYXkgbm90IHJlcXVpcmUgY2hlY2tzdW1taW5nIGF0IGFsbCwgbm9yCitzZWdtZW50YXRpb24sIGlmIGJvdGggZ3Vlc3RzIGFyZSBhbWVuYWJsZS4KK10gVGhlIFZJUlRJT19ORVRfRl9HVUVTVF9DU1VNIGZlYXR1cmUgaW5kaWNhdGVzIHRoYXQgcGFydGlhbGx5CisgIGNoZWNrc3VtbWVkIHBhY2tldHMgY2FuIGJlIHJlY2VpdmVkLCBhbmQgaWYgaXQgY2FuIGRvIHRoYXQgdGhlbgorICB0aGUgVklSVElPX05FVF9GX0dVRVNUX1RTTzQsIFZJUlRJT19ORVRfRl9HVUVTVF9UU082LAorICBWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPIGFuZCBWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOIGFyZSB0aGUgaW5wdXQKKyAgZXF1aXZhbGVudHMgb2YgdGhlIGZlYXR1cmVzIGRlc2NyaWJlZCBhYm92ZS4gU2VlIOKAnFJlY2VpdmluZworICBQYWNrZXRz4oCdIGJlbG93LgorCisgIERldmljZSBPcGVyYXRpb24KKworUGFja2V0cyBhcmUgdHJhbnNtaXR0ZWQgYnkgcGxhY2luZyB0aGVtIGluIHRoZSB0cmFuc21pdHEsIGFuZAorYnVmZmVycyBmb3IgaW5jb21pbmcgcGFja2V0cyBhcmUgcGxhY2VkIGluIHRoZSByZWNlaXZlcS4gSW4gZWFjaAorY2FzZSwgdGhlIHBhY2tldCBpdHNlbGYgaXMgcHJlY2VlZGVkIGJ5IGEgaGVhZGVyOgorCitzdHJ1Y3QgdmlydGlvX25ldF9oZHIgeworCisjZGVmaW5lIFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTSAgICAxCisKKwl1OCBmbGFnczsKKworI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORSAgICAgICAgMAorCisjZGVmaW5lIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNCAgICAgICAxCisKKyNkZWZpbmUgVklSVElPX05FVF9IRFJfR1NPX1VEUAkJIDMKKworI2RlZmluZSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjYgICAgICAgNAorCisjZGVmaW5lIFZJUlRJT19ORVRfSERSX0dTT19FQ04gICAgICAweDgwCisKKwl1OCBnc29fdHlwZTsKKworCXUxNiBoZHJfbGVuOworCisJdTE2IGdzb19zaXplOworCisJdTE2IGNzdW1fc3RhcnQ7CisKKwl1MTYgY3N1bV9vZmZzZXQ7CisKKy8qIE9ubHkgaWYgVklSVElPX05FVF9GX01SR19SWEJVRjogKi8KKworCXUxNiBudW1fYnVmZmVycworCit9OworCitUaGUgY29udHJvbHEgaXMgdXNlZCB0byBjb250cm9sIGRldmljZSBmZWF0dXJlcyBzdWNoIGFzCitmaWx0ZXJpbmcuCisKKyAgUGFja2V0IFRyYW5zbWlzc2lvbgorCitUcmFuc21pdHRpbmcgYSBzaW5nbGUgcGFja2V0IGlzIHNpbXBsZSwgYnV0IHZhcmllcyBkZXBlbmRpbmcgb24KK3RoZSBkaWZmZXJlbnQgZmVhdHVyZXMgdGhlIGRyaXZlciBuZWdvdGlhdGVkLgorCisgIElmIHRoZSBkcml2ZXIgbmVnb3RpYXRlZCBWSVJUSU9fTkVUX0ZfQ1NVTSwgYW5kIHRoZSBwYWNrZXQgaGFzCisgIG5vdCBiZWVuIGZ1bGx5IGNoZWNrc3VtbWVkLCB0aGVuIHRoZSB2aXJ0aW9fbmV0X2hkcidzIGZpZWxkcworICBhcmUgc2V0IGFzIGZvbGxvd3MuIE90aGVyd2lzZSwgdGhlIHBhY2tldCBtdXN0IGJlIGZ1bGx5CisgIGNoZWNrc3VtbWVkLCBhbmQgZmxhZ3MgaXMgemVyby4KKworICBmbGFncyBoYXMgdGhlIFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTSBzZXQsCisKKyAgPGl0ZTpjc3VtX3N0YXJ0LWlzLXNldD5jc3VtX3N0YXJ0IGlzIHNldCB0byB0aGUgb2Zmc2V0IHdpdGhpbgorICAgIHRoZSBwYWNrZXQgdG8gYmVnaW4gY2hlY2tzdW1taW5nLCBhbmQKKworICBjc3VtX29mZnNldCBpbmRpY2F0ZXMgaG93IG1hbnkgYnl0ZXMgYWZ0ZXIgdGhlIGNzdW1fc3RhcnQgdGhlCisgICAgbmV3ICgxNiBiaXQgb25lcycgY29tcGxlbWVudCkgY2hlY2tzdW0gc2hvdWxkIGJlIHBsYWNlZC5bZm9vdG5vdGU6CitGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBwYXJ0aWFsbHkgY2hlY2tzdW1tZWQgVENQIChJUHY0KSBwYWNrZXQuCitJdCB3aWxsIGhhdmUgYSAxNCBieXRlIGV0aGVybmV0IGhlYWRlciBhbmQgMjAgYnl0ZSBJUCBoZWFkZXIKK2ZvbGxvd2VkIGJ5IHRoZSBUQ1AgaGVhZGVyICh3aXRoIHRoZSBUQ1AgY2hlY2tzdW0gZmllbGQgMTYgYnl0ZXMKK2ludG8gdGhhdCBoZWFkZXIpLiBjc3VtX3N0YXJ0IHdpbGwgYmUgMTQrMjAgPSAzNCAodGhlIFRDUAorY2hlY2tzdW0gaW5jbHVkZXMgdGhlIGhlYWRlciksIGFuZCBjc3VtX29mZnNldCB3aWxsIGJlIDE2LiBUaGUKK3ZhbHVlIGluIHRoZSBUQ1AgY2hlY2tzdW0gZmllbGQgd2lsbCBiZSB0aGUgc3VtIG9mIHRoZSBUQ1AgcHNldWRvCitoZWFkZXIsIHNvIHRoYXQgcmVwbGFjaW5nIGl0IGJ5IHRoZSBvbmVzJyBjb21wbGVtZW50IGNoZWNrc3VtIG9mCit0aGUgVENQIGhlYWRlciBhbmQgYm9keSB3aWxsIGdpdmUgdGhlIGNvcnJlY3QgcmVzdWx0LgorXQorCisgIDxlbnU6SWYtdGhlLWRyaXZlcj5JZiB0aGUgZHJpdmVyIG5lZ290aWF0ZWQKKyAgVklSVElPX05FVF9GX0hPU1RfVFNPNCwgVFNPNiBvciBVRk8sIGFuZCB0aGUgcGFja2V0IHJlcXVpcmVzCisgIFRDUCBzZWdtZW50YXRpb24gb3IgVURQIGZyYWdtZW50YXRpb24sIHRoZW4gdGhlIOKAnGdzb190eXBl4oCdCisgIGZpZWxkIGlzIHNldCB0byBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQsIFRDUFY2IG9yIFVEUC4KKyAgKE90aGVyd2lzZSwgaXQgaXMgc2V0IHRvIFZJUlRJT19ORVRfSERSX0dTT19OT05FKS4gSW4gdGhpcworICBjYXNlLCBwYWNrZXRzIGxhcmdlciB0aGFuIDE1MTQgYnl0ZXMgY2FuIGJlIHRyYW5zbWl0dGVkOiB0aGUKKyAgbWV0YWRhdGEgaW5kaWNhdGVzIGhvdyB0byByZXBsaWNhdGUgdGhlIHBhY2tldCBoZWFkZXIgdG8gY3V0IGl0CisgIGludG8gc21hbGxlciBwYWNrZXRzLiBUaGUgb3RoZXIgZ3NvIGZpZWxkcyBhcmUgc2V0OgorCisgIGhkcl9sZW4gaXMgYSBoaW50IHRvIHRoZSBkZXZpY2UgYXMgdG8gaG93IG11Y2ggb2YgdGhlIGhlYWRlcgorICAgIG5lZWRzIHRvIGJlIGtlcHQgdG8gY29weSBpbnRvIGVhY2ggcGFja2V0LCB1c3VhbGx5IHNldCB0byB0aGUKKyAgICBsZW5ndGggb2YgdGhlIGhlYWRlcnMsIGluY2x1ZGluZyB0aGUgdHJhbnNwb3J0IGhlYWRlci5bZm9vdG5vdGU6CitEdWUgdG8gdmFyaW91cyBidWdzIGluIGltcGxlbWVudGF0aW9ucywgdGhpcyBmaWVsZCBpcyBub3QgdXNlZnVsCithcyBhIGd1YXJhbnRlZSBvZiB0aGUgdHJhbnNwb3J0IGhlYWRlciBzaXplLgorXQorCisgIGdzb19zaXplIGlzIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQgYmV5b25kIHRoYXQgaGVhZGVyIChpZS4KKyAgICBNU1MpLgorCisgIElmIHRoZSBkcml2ZXIgbmVnb3RpYXRlZCB0aGUgVklSVElPX05FVF9GX0hPU1RfRUNOIGZlYXR1cmUsIHRoZQorICAgIFZJUlRJT19ORVRfSERSX0dTT19FQ04gYml0IG1heSBiZSBzZXQgaW4g4oCcZ3NvX3R5cGXigJ0gYXMgd2VsbCwKKyAgICBpbmRpY2F0aW5nIHRoYXQgdGhlIFRDUCBwYWNrZXQgaGFzIHRoZSBFQ04gYml0IHNldC5bZm9vdG5vdGU6CitUaGlzIGNhc2UgaXMgbm90IGhhbmRsZWQgYnkgc29tZSBvbGRlciBoYXJkd2FyZSwgc28gaXMgY2FsbGVkIG91dAorc3BlY2lmaWNhbGx5IGluIHRoZSBwcm90b2NvbC4KK10KKworICBJZiB0aGUgZHJpdmVyIG5lZ290aWF0ZWQgdGhlIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYgZmVhdHVyZSwKKyAgdGhlIG51bV9idWZmZXJzIGZpZWxkIGlzIHNldCB0byB6ZXJvLgorCisgIFRoZSBoZWFkZXIgYW5kIHBhY2tldCBhcmUgYWRkZWQgYXMgb25lIG91dHB1dCBidWZmZXIgdG8gdGhlCisgIHRyYW5zbWl0cSwgYW5kIHRoZSBkZXZpY2UgaXMgbm90aWZpZWQgb2YgdGhlIG5ldyBlbnRyeSAoc2VlIFtzdWI6Tm90aWZ5aW5nLVRoZS1EZXZpY2VdCisgICkuW2Zvb3Rub3RlOgorTm90ZSB0aGF0IHRoZSBoZWFkZXIgd2lsbCBiZSB0d28gYnl0ZXMgbG9uZ2VyIGZvciB0aGUKK1ZJUlRJT19ORVRfRl9NUkdfUlhCVUYgY2FzZS4KK10KKworICBQYWNrZXQgVHJhbnNtaXNzaW9uIEludGVycnVwdAorCitPZnRlbiBhIGRyaXZlciB3aWxsIHN1cHByZXNzIHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHRzIHVzaW5nIHRoZQorVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQgZmxhZyAoc2VlIFtzdWI6UmVjZWl2aW5nLVVzZWQtQnVmZmVyc10KKykgYW5kIGNoZWNrIGZvciB1c2VkIHBhY2tldHMgaW4gdGhlIHRyYW5zbWl0IHBhdGggb2YgZm9sbG93aW5nCitwYWNrZXRzLiBIb3dldmVyLCBpdCB3aWxsIHN0aWxsIHJlY2VpdmUgaW50ZXJydXB0cyBpZiB0aGUKK1ZJUlRJT19GX05PVElGWV9PTl9FTVBUWSBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsIGluZGljYXRpbmcgdGhhdAordGhlIHRyYW5zbWlzc2lvbiBxdWV1ZSBpcyBjb21wbGV0ZWx5IGVtcHRpZWQuCisKK1RoZSBub3JtYWwgYmVoYXZpb3IgaW4gdGhpcyBpbnRlcnJ1cHQgaGFuZGxlciBpcyB0byByZXRyaWV2ZSBhbmQKK25ldyBkZXNjcmlwdG9ycyBmcm9tIHRoZSB1c2VkIHJpbmcgYW5kIGZyZWUgdGhlIGNvcnJlc3BvbmRpbmcKK2hlYWRlcnMgYW5kIHBhY2tldHMuCisKKyAgU2V0dGluZyBVcCBSZWNlaXZlIEJ1ZmZlcnMKKworSXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhIHRvIGtlZXAgdGhlIHJlY2VpdmUgdmlydHF1ZXVlIGFzCitmdWxseSBwb3B1bGF0ZWQgYXMgcG9zc2libGU6IGlmIGl0IHJ1bnMgb3V0LCBuZXR3b3JrIHBlcmZvcm1hbmNlCit3aWxsIHN1ZmZlci4KKworSWYgdGhlIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiBvcgorVklSVElPX05FVF9GX0dVRVNUX1VGTyBmZWF0dXJlcyBhcmUgdXNlZCwgdGhlIEd1ZXN0IHdpbGwgbmVlZCB0bworYWNjZXB0IHBhY2tldHMgb2YgdXAgdG8gNjU1NTAgYnl0ZXMgbG9uZyAodGhlIG1heGltdW0gc2l6ZSBvZiBhCitUQ1Agb3IgVURQIHBhY2tldCwgcGx1cyB0aGUgMTQgYnl0ZSBldGhlcm5ldCBoZWFkZXIpLCBvdGhlcndpc2UKKzE1MTQgYnl0ZXMuIFNvIHVubGVzcyBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIGlzIG5lZ290aWF0ZWQsIGV2ZXJ5CitidWZmZXIgaW4gdGhlIHJlY2VpdmUgcXVldWUgbmVlZHMgdG8gYmUgYXQgbGVhc3QgdGhpcyBsZW5ndGggW2Zvb3Rub3RlOgorT2J2aW91c2x5IGVhY2ggb25lIGNhbiBiZSBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgZGVzY3JpcHRvcgorZWxlbWVudHMuCitdLgorCitJZiBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIGlzIG5lZ290aWF0ZWQsIGVhY2ggYnVmZmVyIG11c3QgYmUgYXQKK2xlYXN0IHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QgdmlydGlvX25ldF9oZHIuCisKKyAgUGFja2V0IFJlY2VpdmUgSW50ZXJydXB0CisKK1doZW4gYSBwYWNrZXQgaXMgY29waWVkIGludG8gYSBidWZmZXIgaW4gdGhlIHJlY2VpdmVxLCB0aGUKK29wdGltYWwgcGF0aCBpcyB0byBkaXNhYmxlIGZ1cnRoZXIgaW50ZXJydXB0cyBmb3IgdGhlIHJlY2VpdmVxCisoc2VlIFtzdWI6UmVjZWl2aW5nLVVzZWQtQnVmZmVyc10pIGFuZCBwcm9jZXNzIHBhY2tldHMgdW50aWwgbm8KK21vcmUgYXJlIGZvdW5kLCB0aGVuIHJlLWVuYWJsZSB0aGVtLgorCitQcm9jZXNzaW5nIHBhY2tldCBpbnZvbHZlczoKKworICBJZiB0aGUgZHJpdmVyIG5lZ290aWF0ZWQgdGhlIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYgZmVhdHVyZSwKKyAgdGhlbiB0aGUg4oCcbnVtX2J1ZmZlcnPigJ0gZmllbGQgaW5kaWNhdGVzIGhvdyBtYW55IGRlc2NyaXB0b3JzCisgIHRoaXMgcGFja2V0IGlzIHNwcmVhZCBvdmVyIChpbmNsdWRpbmcgdGhpcyBvbmUpLiBUaGlzIGFsbG93cworICByZWNlaXB0IG9mIGxhcmdlIHBhY2tldHMgd2l0aG91dCBoYXZpbmcgdG8gYWxsb2NhdGUgbGFyZ2UKKyAgYnVmZmVycy4gSW4gdGhpcyBjYXNlLCB0aGVyZSB3aWxsIGJlIGF0IGxlYXN0IOKAnG51bV9idWZmZXJz4oCdIGluCisgIHRoZSB1c2VkIHJpbmcsIGFuZCB0aGV5IHNob3VsZCBiZSBjaGFpbmVkIHRvZ2V0aGVyIHRvIGZvcm0gYQorICBzaW5nbGUgcGFja2V0LiBUaGUgb3RoZXIgYnVmZmVycyB3aWxsIG5vdCBiZWdpbiB3aXRoIGEgc3RydWN0CisgIHZpcnRpb19uZXRfaGRyLgorCisgIElmIHRoZSBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIGZlYXR1cmUgd2FzIG5vdCBuZWdvdGlhdGVkLCBvcgorICB0aGUg4oCcbnVtX2J1ZmZlcnPigJ0gZmllbGQgaXMgb25lLCB0aGVuIHRoZSBlbnRpcmUgcGFja2V0IHdpbGwgYmUKKyAgY29udGFpbmVkIHdpdGhpbiB0aGlzIGJ1ZmZlciwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBzdHJ1Y3QKKyAgdmlydGlvX25ldF9oZHIuCisKKyAgSWYgdGhlIFZJUlRJT19ORVRfRl9HVUVTVF9DU1VNIGZlYXR1cmUgd2FzIG5lZ290aWF0ZWQsIHRoZQorICBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0gYml0IGluIHRoZSDigJxmbGFnc+KAnSBmaWVsZCBtYXkgYmUKKyAgc2V0OiBpZiBzbywgdGhlIGNoZWNrc3VtIG9uIHRoZSBwYWNrZXQgaXMgaW5jb21wbGV0ZSBhbmQgdGhlIOKAnAorICBjc3VtX3N0YXJ04oCdIGFuZCDigJxjc3VtX29mZnNldOKAnSBmaWVsZHMgaW5kaWNhdGUgaG93IHRvIGNhbGN1bGF0ZQorICBpdCAoc2VlIFtpdGU6Y3N1bV9zdGFydC1pcy1zZXRdKS4KKworICBJZiB0aGUgVklSVElPX05FVF9GX0dVRVNUX1RTTzQsIFRTTzYgb3IgVUZPIG9wdGlvbnMgd2VyZQorICBuZWdvdGlhdGVkLCB0aGVuIHRoZSDigJxnc29fdHlwZeKAnSBtYXkgYmUgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgVklSVElPX05FVF9IRFJfR1NPX05PTkUsIGFuZCB0aGUg4oCcZ3NvX3NpemXigJ0gZmllbGQgaW5kaWNhdGVzIHRoZQorICBkZXNpcmVkIE1TUyAoc2VlIFtlbnU6SWYtdGhlLWRyaXZlcl0pLkNvbnRyb2wgVmlydHF1ZXVlCisKK1RoZSBkcml2ZXIgdXNlcyB0aGUgY29udHJvbCB2aXJ0cXVldWUgKGlmIFZJUlRJT19ORVRfRl9WVFJMX1ZRIGlzCituZWdvdGlhdGVkKSB0byBzZW5kIGNvbW1hbmRzIHRvIG1hbmlwdWxhdGUgdmFyaW91cyBmZWF0dXJlcyBvZgordGhlIGRldmljZSB3aGljaCB3b3VsZCBub3QgZWFzaWx5IG1hcCBpbnRvIHRoZSBjb25maWd1cmF0aW9uCitzcGFjZS4KKworQWxsIGNvbW1hbmRzIGFyZSBvZiB0aGUgZm9sbG93aW5nIGZvcm06CisKK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmwgeworCisJdTggY2xhc3M7CisKKwl1OCBjb21tYW5kOworCisJdTggY29tbWFuZC1zcGVjaWZpYy1kYXRhW107CisKKwl1OCBhY2s7CisKK307CisKKworCisvKiBhY2sgdmFsdWVzICovCisKKyNkZWZpbmUgVklSVElPX05FVF9PSyAgICAgMAorCisjZGVmaW5lIFZJUlRJT19ORVRfRVJSICAgIDEKKworVGhlIGNsYXNzLCBjb21tYW5kIGFuZCBjb21tYW5kLXNwZWNpZmljLWRhdGEgYXJlIHNldCBieSB0aGUKK2RyaXZlciwgYW5kIHRoZSBkZXZpY2Ugc2V0cyB0aGUgYWNrIGJ5dGUuIFRoZXJlIGlzIGxpdHRsZSBpdCBjYW4KK2RvIGV4Y2VwdCBpc3N1ZSBhIGRpYWdub3N0aWMgaWYgdGhlIGFjayBieXRlIGlzIG5vdAorVklSVElPX05FVF9PSy4KKworICBQYWNrZXQgUmVjZWl2ZSBGaWx0ZXJpbmcKKworSWYgdGhlIFZJUlRJT19ORVRfRl9DVFJMX1JYIGZlYXR1cmUgaXMgbmVnb3RpYXRlZCwgdGhlIGRyaXZlciBjYW4KK3NlbmQgY29udHJvbCBjb21tYW5kcyBmb3IgcHJvbWlzY3VvdXMgbW9kZSwgbXVsdGljYXN0IHJlY2VpdmluZywKK2FuZCBmaWx0ZXJpbmcgb2YgTUFDIGFkZHJlc3Nlcy4KKworTm90ZSB0aGF0IGluIGdlbmVyYWwsIHRoZXNlIGNvbW1hbmRzIGFyZSBiZXN0LWVmZm9ydDogdW53YW50ZWQKK3BhY2tldHMgbWF5IHN0aWxsIGFycml2ZS4KKworICBTZXR0aW5nIFByb21pc2N1b3VzIE1vZGUKKworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlggICAgMAorCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfUFJPTUlTQyAgICAgIDAKKworICNkZWZpbmUgVklSVElPX05FVF9DVFJMX1JYX0FMTE1VTFRJICAgICAxCisKK1RoZSBjbGFzcyBWSVJUSU9fTkVUX0NUUkxfUlggaGFzIHR3byBjb21tYW5kczoKK1ZJUlRJT19ORVRfQ1RSTF9SWF9QUk9NSVNDIHR1cm5zIHByb21pc2N1b3VzIG1vZGUgb24gYW5kIG9mZiwgYW5kCitWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEkgdHVybnMgYWxsLW11bHRpY2FzdCByZWNlaXZlIG9uIGFuZAorb2ZmLiBUaGUgY29tbWFuZC1zcGVjaWZpYy1kYXRhIGlzIG9uZSBieXRlIGNvbnRhaW5pbmcgMCAob2ZmKSBvcgorMSAob24pLgorCisgIFNldHRpbmcgTUFDIEFkZHJlc3MgRmlsdGVyaW5nCisKK3N0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfbWFjIHsKKworCXUzMiBlbnRyaWVzOworCisJdTggbWFjc1tlbnRyaWVzXVtFVEhfQUxFTl07CisKK307CisKKworCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9NQUMgICAgMQorCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCAgICAgICAgMAorCitUaGUgZGV2aWNlIGNhbiBmaWx0ZXIgaW5jb21pbmcgcGFja2V0cyBieSBhbnkgbnVtYmVyIG9mCitkZXN0aW5hdGlvbiBNQUMgYWRkcmVzc2VzLltmb290bm90ZToKK1NpbmNlIHRoZXJlIGFyZSBubyBndWFyZW50ZWVzLCBpdCBjYW4gdXNlIGEgaGFzaCBmaWx0ZXIKK29yc2lsZW50bHkgc3dpdGNoIHRvIGFsbG11bHRpIG9yIHByb21pc2N1b3VzIG1vZGUgaWYgaXQgaXMgZ2l2ZW4KK3RvbyBtYW55IGFkZHJlc3Nlcy4KK10gVGhpcyB0YWJsZSBpcyBzZXQgdXNpbmcgdGhlIGNsYXNzIFZJUlRJT19ORVRfQ1RSTF9NQUMgYW5kIHRoZQorY29tbWFuZCBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVC4gVGhlIGNvbW1hbmQtc3BlY2lmaWMtZGF0YQoraXMgdHdvIHZhcmlhYmxlIGxlbmd0aCB0YWJsZXMgb2YgNi1ieXRlIE1BQyBhZGRyZXNzZXMuIFRoZSBmaXJzdAordGFibGUgY29udGFpbnMgdW5pY2FzdCBhZGRyZXNzZXMsIGFuZCB0aGUgc2Vjb25kIGNvbnRhaW5zCittdWx0aWNhc3QgYWRkcmVzc2VzLgorCisgIFZMQU4gRmlsdGVyaW5nCisKK0lmIHRoZSBkcml2ZXIgbmVnb3RpYXRlcyB0aGUgVklSVElPTl9ORVRfRl9DVFJMX1ZMQU4gZmVhdHVyZSwgaXQKK2NhbiBjb250cm9sIGEgVkxBTiBmaWx0ZXIgdGFibGUgaW4gdGhlIGRldmljZS4KKworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTiAgICAgICAyCisKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCAgICAgICAgICAgICAwCisKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0RFTCAgICAgICAgICAgICAxCisKK0JvdGggdGhlIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCBhbmQgVklSVElPX05FVF9DVFJMX1ZMQU5fREVMCitjb21tYW5kIHRha2UgYSAxNi1iaXQgVkxBTiBpZCBhcyB0aGUgY29tbWFuZC1zcGVjaWZpYy1kYXRhLgorCitBcHBlbmRpeCBEOiBCbG9jayBEZXZpY2UKKworVGhlIHZpcnRpbyBibG9jayBkZXZpY2UgaXMgYSBzaW1wbGUgdmlydHVhbCBibG9jayBkZXZpY2UgKGllLgorZGlzaykuIFJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzIChhbmQgb3RoZXIgZXhvdGljIHJlcXVlc3RzKSBhcmUKK3BsYWNlZCBpbiB0aGUgcXVldWUsIGFuZCBzZXJ2aWNlZCAocHJvYmFibHkgb3V0IG9mIG9yZGVyKSBieSB0aGUKK2RldmljZSBleGNlcHQgd2hlcmUgbm90ZWQuCisKKyAgQ29uZmlndXJhdGlvbgorCisgIFN1YnN5c3RlbSBEZXZpY2UgSUQgMgorCisgIFZpcnRxdWV1ZXMgMDpyZXF1ZXN0cS4KKworICBGZWF0dXJlIGJpdHMKKworICBWSVJUSU9fQkxLX0ZfQkFSUklFUiAoMCkgSG9zdCBzdXBwb3J0cyByZXF1ZXN0IGJhcnJpZXJzLgorCisgIFZJUlRJT19CTEtfRl9TSVpFX01BWCAoMSkgTWF4aW11bSBzaXplIG9mIGFueSBzaW5nbGUgc2VnbWVudCBpcworICAgIGluIOKAnHNpemVfbWF44oCdLgorCisgIFZJUlRJT19CTEtfRl9TRUdfTUFYICgyKSBNYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cyBpbiBhCisgICAgcmVxdWVzdCBpcyBpbiDigJxzZWdfbWF44oCdLgorCisgIFZJUlRJT19CTEtfRl9HRU9NRVRSWSAoNCkgRGlzay1zdHlsZSBnZW9tZXRyeSBzcGVjaWZpZWQgaW4g4oCcCisgICAgZ2VvbWV0cnnigJ0uCisKKyAgVklSVElPX0JMS19GX1JPICg1KSBEZXZpY2UgaXMgcmVhZC1vbmx5LgorCisgIFZJUlRJT19CTEtfRl9CTEtfU0laRSAoNikgQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGluIOKAnGJsa19zaXpl4oCdLgorCisgIFZJUlRJT19CTEtfRl9TQ1NJICg3KSBEZXZpY2Ugc3VwcG9ydHMgc2NzaSBwYWNrZXQgY29tbWFuZHMuCisKKyAgVklSVElPX0JMS19GX0ZMVVNIICg5KSBDYWNoZSBmbHVzaCBjb21tYW5kIHN1cHBvcnQuCisKKworCisgIERldmljZSBjb25maWd1cmF0aW9uIGxheW91dCBUaGUgY2FwYWNpdHkgb2YgdGhlIGRldmljZQorICAoZXhwcmVzc2VkIGluIDUxMi1ieXRlIHNlY3RvcnMpIGlzIGFsd2F5cyBwcmVzZW50LiBUaGUKKyAgYXZhaWxhYmlsaXR5IG9mIHRoZSBvdGhlcnMgYWxsIGRlcGVuZCBvbiB2YXJpb3VzIGZlYXR1cmUgYml0cworICBhcyBpbmRpY2F0ZWQgYWJvdmUuIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CisKKwl1NjQgY2FwYWNpdHk7CisKKwl1MzIgc2l6ZV9tYXg7CisKKwl1MzIgc2VnX21heDsKKworCXN0cnVjdCB2aXJ0aW9fYmxrX2dlb21ldHJ5IHsKKworCQl1MTYgY3lsaW5kZXJzOworCisJCXU4IGhlYWRzOworCisJCXU4IHNlY3RvcnM7CisKKwl9IGdlb21ldHJ5OworCisJdTMyIGJsa19zaXplOworCisKKworfTsKKworICBEZXZpY2UgSW5pdGlhbGl6YXRpb24KKworICBUaGUgZGV2aWNlIHNpemUgc2hvdWxkIGJlIHJlYWQgZnJvbSB0aGUg4oCcY2FwYWNpdHnigJ0KKyAgY29uZmlndXJhdGlvbiBmaWVsZC4gTm8gcmVxdWVzdHMgc2hvdWxkIGJlIHN1Ym1pdHRlZCB3aGljaCBnb2VzCisgIGJleW9uZCB0aGlzIGxpbWl0LgorCisgIElmIHRoZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUgZmVhdHVyZSBpcyBuZWdvdGlhdGVkLCB0aGUKKyAgYmxrX3NpemUgZmllbGQgY2FuIGJlIHJlYWQgdG8gZGV0ZXJtaW5lIHRoZSBvcHRpbWFsIHNlY3RvciBzaXplCisgIGZvciB0aGUgZHJpdmVyIHRvIHVzZS4gVGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIHVuaXRzIHVzZWQgaW4KKyAgdGhlIHByb3RvY29sIChhbHdheXMgNTEyIGJ5dGVzKSwgYnV0IGF3YXJlbmVzcyBvZiB0aGUgY29ycmVjdAorICB2YWx1ZSBjYW4gZWZmZWN0IHBlcmZvcm1hbmNlLgorCisgIElmIHRoZSBWSVJUSU9fQkxLX0ZfUk8gZmVhdHVyZSBpcyBzZXQgYnkgdGhlIGRldmljZSwgYW55IHdyaXRlCisgIHJlcXVlc3RzIHdpbGwgZmFpbC4KKworCisKKyAgRGV2aWNlIE9wZXJhdGlvbgorCitUaGUgZHJpdmVyIHF1ZXVlcyByZXF1ZXN0cyB0byB0aGUgdmlydHF1ZXVlLCBhbmQgdGhleSBhcmUgdXNlZCBieQordGhlIGRldmljZSAobm90IG5lY2Vzc2FyaWx5IGluIG9yZGVyKS4gRWFjaCByZXF1ZXN0IGlzIG9mIGZvcm06CisKK3N0cnVjdCB2aXJ0aW9fYmxrX3JlcSB7CisKKworCisJdTMyIHR5cGU7CisKKwl1MzIgaW9wcmlvOworCisJdTY0IHNlY3RvcjsKKworCWNoYXIgZGF0YVtdWzUxMl07CisKKwl1OCBzdGF0dXM7CisKK307CisKK0lmIHRoZSBkZXZpY2UgaGFzIFZJUlRJT19CTEtfRl9TQ1NJIGZlYXR1cmUsIGl0IGNhbiBhbHNvIHN1cHBvcnQKK3Njc2kgcGFja2V0IGNvbW1hbmQgcmVxdWVzdHMsIGVhY2ggb2YgdGhlc2UgcmVxdWVzdHMgaXMgb2YgZm9ybTpzdHJ1Y3QgdmlydGlvX3Njc2lfcGNfcmVxIHsKKworCXUzMiB0eXBlOworCisJdTMyIGlvcHJpbzsKKworCXU2NCBzZWN0b3I7CisKKyAgICBjaGFyIGNtZFtdOworCisJY2hhciBkYXRhW11bNTEyXTsKKworI2RlZmluZSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUgICA5NgorCisgICAgdTggc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKKworICAgIHUzMiBlcnJvcnM7CisKKyAgICB1MzIgZGF0YV9sZW47CisKKyAgICB1MzIgc2Vuc2VfbGVuOworCisgICAgdTMyIHJlc2lkdWFsOworCisJdTggc3RhdHVzOworCit9OworCitUaGUgdHlwZSBvZiB0aGUgcmVxdWVzdCBpcyBlaXRoZXIgYSByZWFkIChWSVJUSU9fQkxLX1RfSU4pLCBhCit3cml0ZSAoVklSVElPX0JMS19UX09VVCksIGEgc2NzaSBwYWNrZXQgY29tbWFuZAorKFZJUlRJT19CTEtfVF9TQ1NJX0NNRCBvciBWSVJUSU9fQkxLX1RfU0NTSV9DTURfT1VUW2Zvb3Rub3RlOgordGhlIFNDU0lfQ01EIGFuZCBTQ1NJX0NNRF9PVVQgdHlwZXMgYXJlIGVxdWl2YWxlbnQsIHRoZSBkZXZpY2UKK2RvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbQorXSkgb3IgYSBmbHVzaCAoVklSVElPX0JMS19UX0ZMVVNIIG9yIFZJUlRJT19CTEtfVF9GTFVTSF9PVVRbZm9vdG5vdGU6Cit0aGUgRkxVU0ggYW5kIEZMVVNIX09VVCB0eXBlcyBhcmUgZXF1aXZhbGVudCwgdGhlIGRldmljZSBkb2VzIG5vdAorZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtCitdKS4gSWYgdGhlIGRldmljZSBoYXMgVklSVElPX0JMS19GX0JBUlJJRVIgZmVhdHVyZSB0aGUgaGlnaCBiaXQKKyhWSVJUSU9fQkxLX1RfQkFSUklFUikgaW5kaWNhdGVzIHRoYXQgdGhpcyByZXF1ZXN0IGFjdHMgYXMgYQorYmFycmllciBhbmQgdGhhdCBhbGwgcHJlY2VlZGluZyByZXF1ZXN0cyBtdXN0IGJlIGNvbXBsZXRlIGJlZm9yZQordGhpcyBvbmUsIGFuZCBhbGwgZm9sbG93aW5nIHJlcXVlc3RzIG11c3Qgbm90IGJlIHN0YXJ0ZWQgdW50aWwKK3RoaXMgaXMgY29tcGxldGUuIE5vdGUgdGhhdCBhIGJhcnJpZXIgZG9lcyBub3QgZmx1c2ggY2FjaGVzIGluCit0aGUgdW5kZXJseWluZyBiYWNrZW5kIGRldmljZSBpbiBob3N0LCBhbmQgdGh1cyBkb2VzIG5vdCBzZXJ2ZSBhcworZGF0YSBjb25zaXN0ZW5jeSBndWFyYW50ZWUuIERyaXZlciBtdXN0IHVzZSBGTFVTSCByZXF1ZXN0IHRvCitmbHVzaCB0aGUgaG9zdCBjYWNoZS4KKworI2RlZmluZSBWSVJUSU9fQkxLX1RfSU4gICAgICAgICAgIDAKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfT1VUICAgICAgICAgIDEKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfU0NTSV9DTUQgICAgIDIKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfU0NTSV9DTURfT1VUIDMKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfRkxVU0ggICAgICAgIDQKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfRkxVU0hfT1VUICAgIDUKKworI2RlZmluZSBWSVJUSU9fQkxLX1RfQkFSUklFUgkgMHg4MDAwMDAwMAorCitUaGUgaW9wcmlvIGZpZWxkIGlzIGEgaGludCBhYm91dCB0aGUgcmVsYXRpdmUgcHJpb3JpdGllcyBvZgorcmVxdWVzdHMgdG8gdGhlIGRldmljZTogaGlnaGVyIG51bWJlcnMgaW5kaWNhdGUgbW9yZSBpbXBvcnRhbnQKK3JlcXVlc3RzLgorCitUaGUgc2VjdG9yIG51bWJlciBpbmRpY2F0ZXMgdGhlIG9mZnNldCAobXVsdGlwbGllZCBieSA1MTIpIHdoZXJlCit0aGUgcmVhZCBvciB3cml0ZSBpcyB0byBvY2N1ci4gVGhpcyBmaWVsZCBpcyB1bnVzZWQgYW5kIHNldCB0byAwCitmb3Igc2NzaSBwYWNrZXQgY29tbWFuZHMgYW5kIGZvciBmbHVzaCBjb21tYW5kcy4KKworVGhlIGNtZCBmaWVsZCBpcyBvbmx5IHByZXNlbnQgZm9yIHNjc2kgcGFja2V0IGNvbW1hbmQgcmVxdWVzdHMsCithbmQgaW5kaWNhdGVzIHRoZSBjb21tYW5kIHRvIHBlcmZvcm0uIFRoaXMgZmllbGQgbXVzdCByZXNpZGUgaW4gYQorc2luZ2xlLCBzZXBhcmF0ZSByZWFkLW9ubHkgYnVmZmVyOyBjb21tYW5kIGxlbmd0aCBjYW4gYmUgZGVyaXZlZAorZnJvbSB0aGUgbGVuZ3RoIG9mIHRoaXMgYnVmZmVyLgorCitOb3RlIHRoYXQgdGhlc2UgZmlyc3QgdGhyZWUgKGZvdXIgZm9yIHNjc2kgcGFja2V0IGNvbW1hbmRzKQorZmllbGRzIGFyZSBhbHdheXMgcmVhZC1vbmx5OiB0aGUgZGF0YSBmaWVsZCBpcyBlaXRoZXIgcmVhZC1vbmx5CitvciB3cml0ZS1vbmx5LCBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QuIFRoZSBzaXplIG9mIHRoZSByZWFkIG9yCit3cml0ZSBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXF1ZXN0IGJ1ZmZlcnMuCisKK1RoZSBzZW5zZSBmaWVsZCBpcyBvbmx5IHByZXNlbnQgZm9yIHNjc2kgcGFja2V0IGNvbW1hbmQgcmVxdWVzdHMsCithbmQgaW5kaWNhdGVzIHRoZSBidWZmZXIgZm9yIHNjc2kgc2Vuc2UgZGF0YS4KKworVGhlIGRhdGFfbGVuIGZpZWxkIGlzIG9ubHkgcHJlc2VudCBmb3Igc2NzaSBwYWNrZXQgY29tbWFuZAorcmVxdWVzdHMsIHRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZCwgYW5kIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZQorZHJpdmVyLiBIaXN0b3JpY2FsbHksIGRldmljZXMgY29waWVkIGRhdGEgbGVuZ3RoIHRoZXJlLgorCitUaGUgc2Vuc2VfbGVuIGZpZWxkIGlzIG9ubHkgcHJlc2VudCBmb3Igc2NzaSBwYWNrZXQgY29tbWFuZAorcmVxdWVzdHMgYW5kIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gdG8KK3RoZSBzZW5zZSBidWZmZXIuCisKK1RoZSByZXNpZHVhbCBmaWVsZCBpcyBvbmx5IHByZXNlbnQgZm9yIHNjc2kgcGFja2V0IGNvbW1hbmQKK3JlcXVlc3RzIGFuZCBpbmRpY2F0ZXMgdGhlIHJlc2lkdWFsIHNpemUsIGNhbGN1bGF0ZWQgYXMgZGF0YQorbGVuZ3RoIC0gbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkLgorCitUaGUgZmluYWwgc3RhdHVzIGJ5dGUgaXMgd3JpdHRlbiBieSB0aGUgZGV2aWNlOiBlaXRoZXIKK1ZJUlRJT19CTEtfU19PSyBmb3Igc3VjY2VzcywgVklSVElPX0JMS19TX0lPRVJSIGZvciBob3N0IG9yIGd1ZXN0CitlcnJvciBvciBWSVJUSU9fQkxLX1NfVU5TVVBQIGZvciBhIHJlcXVlc3QgdW5zdXBwb3J0ZWQgYnkgaG9zdDojZGVmaW5lIFZJUlRJT19CTEtfU19PSyAgICAgICAgMAorCisjZGVmaW5lIFZJUlRJT19CTEtfU19JT0VSUiAgICAgMQorCisjZGVmaW5lIFZJUlRJT19CTEtfU19VTlNVUFAgICAgMgorCitIaXN0b3JpY2FsbHksIGRldmljZXMgYXNzdW1lZCB0aGF0IHRoZSBmaWVsZHMgdHlwZSwgaW9wcmlvIGFuZAorc2VjdG9yIHJlc2lkZSBpbiBhIHNpbmdsZSwgc2VwYXJhdGUgcmVhZC1vbmx5IGJ1ZmZlcjsgdGhlIGZpZWxkcworZXJyb3JzLCBkYXRhX2xlbiwgc2Vuc2VfbGVuIGFuZCByZXNpZHVhbCByZXNpZGUgaW4gYSBzaW5nbGUsCitzZXBhcmF0ZSB3cml0ZS1vbmx5IGJ1ZmZlcjsgdGhlIHNlbnNlIGZpZWxkIGluIGEgc2VwYXJhdGUKK3dyaXRlLW9ubHkgYnVmZmVyIG9mIHNpemUgOTYgYnl0ZXMsIGJ5IGl0c2VsZjsgdGhlIGZpZWxkcyBlcnJvcnMsCitkYXRhX2xlbiwgc2Vuc2VfbGVuIGFuZCByZXNpZHVhbCBpbiBhIHNpbmdsZSB3cml0ZS1vbmx5IGJ1ZmZlcjsKK2FuZCB0aGUgc3RhdHVzIGZpZWxkIGlzIGEgc2VwYXJhdGUgcmVhZC1vbmx5IGJ1ZmZlciBvZiBzaXplIDEKK2J5dGUsIGJ5IGl0c2VsZi4KKworQXBwZW5kaXggRTogQ29uc29sZSBEZXZpY2UKKworVGhlIHZpcnRpbyBjb25zb2xlIGRldmljZSBpcyBhIHNpbXBsZSBkZXZpY2UgZm9yIGRhdGEgaW5wdXQgYW5kCitvdXRwdXQuIEEgZGV2aWNlIG1heSBoYXZlIG9uZSBvciBtb3JlIHBvcnRzLiBFYWNoIHBvcnQgaGFzIGEgcGFpcgorb2YgaW5wdXQgYW5kIG91dHB1dCB2aXJ0cXVldWVzLiBNb3Jlb3ZlciwgYSBkZXZpY2UgaGFzIGEgcGFpciBvZgorY29udHJvbCBJTyB2aXJ0cXVldWVzLiBUaGUgY29udHJvbCB2aXJ0cXVldWVzIGFyZSB1c2VkIHRvCitjb21tdW5pY2F0ZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBkZXZpY2UgYW5kIHRoZSBkcml2ZXIgYWJvdXQKK3BvcnRzIGJlaW5nIG9wZW5lZCBhbmQgY2xvc2VkIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLAoraW5kaWNhdGlvbiBmcm9tIHRoZSBob3N0IGFib3V0IHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHBvcnQgaXMgYQorY29uc29sZSBwb3J0LCBhZGRpbmcgbmV3IHBvcnRzLCBwb3J0IGhvdC1wbHVnL3VucGx1ZywgZXRjLiwgYW5kCitpbmRpY2F0aW9uIGZyb20gdGhlIGd1ZXN0IGFib3V0IHdoZXRoZXIgYSBwb3J0IG9yIGEgZGV2aWNlIHdhcworc3VjY2Vzc2Z1bGx5IGFkZGVkLCBwb3J0IG9wZW4vY2xvc2UsIGV0Yy4uIEZvciBkYXRhIElPLCBvbmUgb3IKK21vcmUgZW1wdHkgYnVmZmVycyBhcmUgcGxhY2VkIGluIHRoZSByZWNlaXZlIHF1ZXVlIGZvciBpbmNvbWluZworZGF0YSBhbmQgb3V0Z29pbmcgY2hhcmFjdGVycyBhcmUgcGxhY2VkIGluIHRoZSB0cmFuc21pdCBxdWV1ZS4KKworICBDb25maWd1cmF0aW9uCisKKyAgU3Vic3lzdGVtIERldmljZSBJRCAzCisKKyAgVmlydHF1ZXVlcyAwOnJlY2VpdmVxKHBvcnQwKS4gMTp0cmFuc21pdHEocG9ydDApLCAyOmNvbnRyb2wKKyAgcmVjZWl2ZXFbZm9vdG5vdGU6CitQb3J0cyAyIG9ud2FyZHMgb25seSBpZiBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCBpcyBzZXQKK10sIDM6Y29udHJvbCB0cmFuc21pdHEsIDQ6cmVjZWl2ZXEocG9ydDEpLCA1OnRyYW5zbWl0cShwb3J0MSksCisgIC4uLgorCisgIEZlYXR1cmUgYml0cworCisgIFZJUlRJT19DT05TT0xFX0ZfU0laRSAoMCkgQ29uZmlndXJhdGlvbiBjb2xzIGFuZCByb3dzIGZpZWxkcworICAgIGFyZSB2YWxpZC4KKworICBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCgxKSBEZXZpY2UgaGFzIHN1cHBvcnQgZm9yIG11bHRpcGxlCisgICAgcG9ydHM7IGNvbmZpZ3VyYXRpb24gZmllbGRzIG5yX3BvcnRzIGFuZCBtYXhfbnJfcG9ydHMgYXJlCisgICAgdmFsaWQgYW5kIGNvbnRyb2wgdmlydHF1ZXVlcyB3aWxsIGJlIHVzZWQuCisKKyAgRGV2aWNlIGNvbmZpZ3VyYXRpb24gbGF5b3V0IFRoZSBzaXplIG9mIHRoZSBjb25zb2xlIGlzIHN1cHBsaWVkCisgIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGlmIHRoZSBWSVJUSU9fQ09OU09MRV9GX1NJWkUgZmVhdHVyZQorICBpcyBzZXQuIEZ1cnRoZXJtb3JlLCBpZiB0aGUgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQgZmVhdHVyZQorICBpcyBzZXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBjYW4KKyAgYmUgZmV0Y2hlZC5zdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHsKKworCXUxNiBjb2xzOworCisJdTE2IHJvd3M7CisKKworCisJdTMyIG1heF9ucl9wb3J0czsKKworfTsKKworICBEZXZpY2UgSW5pdGlhbGl6YXRpb24KKworICBJZiB0aGUgVklSVElPX0NPTlNPTEVfRl9TSVpFIGZlYXR1cmUgaXMgbmVnb3RpYXRlZCwgdGhlIGRyaXZlcgorICBjYW4gcmVhZCB0aGUgY29uc29sZSBkaW1lbnNpb25zIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmllbGRzLgorCisgIElmIHRoZSBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCBmZWF0dXJlIGlzIG5lZ290aWF0ZWQsIHRoZQorICBkcml2ZXIgY2FuIHNwYXduIG11bHRpcGxlIHBvcnRzLCBub3QgYWxsIG9mIHdoaWNoIG1heSBiZQorICBhdHRhY2hlZCB0byBhIGNvbnNvbGUuIFNvbWUgY291bGQgYmUgZ2VuZXJpYyBwb3J0cy4gSW4gdGhpcworICBjYXNlLCB0aGUgY29udHJvbCB2aXJ0cXVldWVzIGFyZSBlbmFibGVkIGFuZCBhY2NvcmRpbmcgdG8gdGhlCisgIG1heF9ucl9wb3J0cyBjb25maWd1cmF0aW9uLXNwYWNlIHZhbHVlLCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyCisgIG9mIHZpcnRxdWV1ZXMgYXJlIGNyZWF0ZWQuIEEgY29udHJvbCBtZXNzYWdlIGluZGljYXRpbmcgdGhlCisgIGRyaXZlciBpcyByZWFkeSBpcyBzZW50IHRvIHRoZSBob3N0LiBUaGUgaG9zdCBjYW4gdGhlbiBzZW5kCisgIGNvbnRyb2wgbWVzc2FnZXMgZm9yIGFkZGluZyBuZXcgcG9ydHMgdG8gdGhlIGRldmljZS4gQWZ0ZXIKKyAgY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyBlYWNoIHBvcnQsIGEKKyAgVklSVElPX0NPTlNPTEVfUE9SVF9SRUFEWSBjb250cm9sIG1lc3NhZ2UgaXMgc2VudCB0byB0aGUgaG9zdAorICBmb3IgdGhhdCBwb3J0IHNvIHRoZSBob3N0IGNhbiBsZXQgdXMga25vdyBvZiBhbnkgYWRkaXRpb25hbAorICBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IGZvciB0aGF0IHBvcnQuCisKKyAgVGhlIHJlY2VpdmVxIGZvciBlYWNoIHBvcnQgaXMgcG9wdWxhdGVkIHdpdGggb25lIG9yIG1vcmUKKyAgcmVjZWl2ZSBidWZmZXJzLgorCisgIERldmljZSBPcGVyYXRpb24KKworICBGb3Igb3V0cHV0LCBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXJzIGlzIHBsYWNlZCBpbiB0aGUKKyAgcG9ydCdzIHRyYW5zbWl0cS5bZm9vdG5vdGU6CitCZWNhdXNlIHRoaXMgaXMgaGlnaCBpbXBvcnRhbmNlIGFuZCBsb3cgYmFuZHdpZHRoLCB0aGUgY3VycmVudAorTGludXggaW1wbGVtZW50YXRpb24gcG9sbHMgZm9yIHRoZSBidWZmZXIgdG8gYmUgdXNlZCwgcmF0aGVyIHRoYW4KK3dhaXRpbmcgZm9yIGFuIGludGVycnVwdCwgc2ltcGxpZnlpbmcgdGhlIGltcGxlbWVudGF0aW9uCitzaWduaWZpY2FudGx5LiBIb3dldmVyLCBmb3IgZ2VuZXJpYyBzZXJpYWwgcG9ydHMgd2l0aCB0aGUKK09fTk9OQkxPQ0sgZmxhZyBzZXQsIHRoZSBwb2xsaW5nIGxpbWl0YXRpb24gaXMgcmVsYXhlZCBhbmQgdGhlCitjb25zdW1lZCBidWZmZXJzIGFyZSBmcmVlZCB1cG9uIHRoZSBuZXh0IHdyaXRlIG9yIHBvbGwgY2FsbCBvcgord2hlbiBhIHBvcnQgaXMgY2xvc2VkIG9yIGhvdC11bnBsdWdnZWQuCitdCisKKyAgV2hlbiBhIGJ1ZmZlciBpcyB1c2VkIGluIHRoZSByZWNlaXZlcSAoc2lnbmFsbGVkIGJ5IGFuCisgIGludGVycnVwdCksIHRoZSBjb250ZW50cyBpcyB0aGUgaW5wdXQgdG8gdGhlIHBvcnQgYXNzb2NpYXRlZAorICB3aXRoIHRoZSB2aXJ0cXVldWUgZm9yIHdoaWNoIHRoZSBub3RpZmljYXRpb24gd2FzIHJlY2VpdmVkLgorCisgIElmIHRoZSBkcml2ZXIgbmVnb3RpYXRlZCB0aGUgVklSVElPX0NPTlNPTEVfRl9TSVpFIGZlYXR1cmUsIGEKKyAgY29uZmlndXJhdGlvbiBjaGFuZ2UgaW50ZXJydXB0IG1heSBvY2N1ci4gVGhlIHVwZGF0ZWQgc2l6ZSBjYW4KKyAgYmUgcmVhZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpZWxkcy4KKworICBJZiB0aGUgZHJpdmVyIG5lZ290aWF0ZWQgdGhlIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUCisgIGZlYXR1cmUsIGFjdGl2ZSBwb3J0cyBhcmUgYW5ub3VuY2VkIGJ5IHRoZSBob3N0IHVzaW5nIHRoZQorICBWSVJUSU9fQ09OU09MRV9QT1JUX0FERCBjb250cm9sIG1lc3NhZ2UuIFRoZSBzYW1lIG1lc3NhZ2UgaXMKKyAgdXNlZCBmb3IgcG9ydCBob3QtcGx1ZyBhcyB3ZWxsLgorCisgIElmIHRoZSBob3N0IHNwZWNpZmllZCBhIHBvcnQgYG5hbWUnLCBhIHN5c2ZzIGF0dHJpYnV0ZSBpcworICBjcmVhdGVkIHdpdGggdGhlIG5hbWUgZmlsbGVkIGluLCBzbyB0aGF0IHVkZXYgcnVsZXMgY2FuIGJlCisgIHdyaXR0ZW4gdGhhdCBjYW4gY3JlYXRlIGEgc3ltbGluayBmcm9tIHRoZSBwb3J0J3MgbmFtZSB0byB0aGUKKyAgY2hhciBkZXZpY2UgZm9yIHBvcnQgZGlzY292ZXJ5IGJ5IGFwcGxpY2F0aW9ucyBpbiB0aGUgZ3Vlc3QuCisKKyAgQ2hhbmdlcyB0byBwb3J0cycgc3RhdGUgYXJlIGVmZmVjdGVkIGJ5IGNvbnRyb2wgbWVzc2FnZXMuCisgIEFwcHJvcHJpYXRlIGFjdGlvbiBpcyB0YWtlbiBvbiB0aGUgcG9ydCBpbmRpY2F0ZWQgaW4gdGhlCisgIGNvbnRyb2wgbWVzc2FnZS4gVGhlIGxheW91dCBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb250cm9sCisgIGJ1ZmZlciBhbmQgdGhlIGV2ZW50cyBhc3NvY2lhdGVkIGFyZTpzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCB7CisKKwl1aW50MzJfdCBpZDsgICAgLyogUG9ydCBudW1iZXIgKi8KKworCXVpbnQxNl90IGV2ZW50OyAvKiBUaGUga2luZCBvZiBjb250cm9sIGV2ZW50ICovCisKKwl1aW50MTZfdCB2YWx1ZTsgLyogRXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoZSBldmVudCAqLworCit9OworCisKKworLyogU29tZSBldmVudHMgZm9yIHRoZSBpbnRlcm5hbCBtZXNzYWdlcyAoY29udHJvbCBwYWNrZXRzKSAqLworCisKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9ERVZJQ0VfUkVBRFkgICAgIDAKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX0FERCAgICAgICAgIDEKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFTU9WRSAgICAgIDIKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZICAgICAgIDMKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQgICAgIDQKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9SRVNJWkUgICAgICAgICAgIDUKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4gICAgICAgIDYKKworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUUgICAgICAgIDcKKworQXBwZW5kaXggRjogRW50cm9weSBEZXZpY2UKKworVGhlIHZpcnRpbyBlbnRyb3B5IGRldmljZSBzdXBwbGllcyBoaWdoLXF1YWxpdHkgcmFuZG9tbmVzcyBmb3IKK2d1ZXN0IHVzZS4KKworICBDb25maWd1cmF0aW9uCisKKyAgU3Vic3lzdGVtIERldmljZSBJRCA0CisKKyAgVmlydHF1ZXVlcyAwOnJlcXVlc3RxLgorCisgIEZlYXR1cmUgYml0cyBOb25lIGN1cnJlbnRseSBkZWZpbmVkCisKKyAgRGV2aWNlIGNvbmZpZ3VyYXRpb24gbGF5b3V0IE5vbmUgY3VycmVudGx5IGRlZmluZWQuCisKKyAgRGV2aWNlIEluaXRpYWxpemF0aW9uCisKKyAgVGhlIHZpcnRxdWV1ZSBpcyBpbml0aWFsaXplZAorCisgIERldmljZSBPcGVyYXRpb24KKworV2hlbiB0aGUgZHJpdmVyIHJlcXVpcmVzIHJhbmRvbSBieXRlcywgaXQgcGxhY2VzIHRoZSBkZXNjcmlwdG9yCitvZiBvbmUgb3IgbW9yZSBidWZmZXJzIGluIHRoZSBxdWV1ZS4gSXQgd2lsbCBiZSBjb21wbGV0ZWx5IGZpbGxlZAorYnkgcmFuZG9tIGRhdGEgYnkgdGhlIGRldmljZS4KKworQXBwZW5kaXggRzogTWVtb3J5IEJhbGxvb24gRGV2aWNlCisKK1RoZSB2aXJ0aW8gbWVtb3J5IGJhbGxvb24gZGV2aWNlIGlzIGEgcHJpbWl0aXZlIGRldmljZSBmb3IKK21hbmFnaW5nIGd1ZXN0IG1lbW9yeTogdGhlIGRldmljZSBhc2tzIGZvciBhIGNlcnRhaW4gYW1vdW50IG9mCittZW1vcnksIGFuZCB0aGUgZ3Vlc3Qgc3VwcGxpZXMgaXQgKG9yIHdpdGhkcmF3cyBpdCwgaWYgdGhlIGRldmljZQoraGFzIG1vcmUgdGhhbiBpdCBhc2tzIGZvcikuIFRoaXMgYWxsb3dzIHRoZSBndWVzdCB0byBhZGFwdCB0bworY2hhbmdlcyBpbiBhbGxvd2FuY2Ugb2YgdW5kZXJseWluZyBwaHlzaWNhbCBtZW1vcnkuIElmIHRoZQorZmVhdHVyZSBpcyBuZWdvdGlhdGVkLCB0aGUgZGV2aWNlIGNhbiBhbHNvIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUKK2d1ZXN0IG1lbW9yeSBzdGF0aXN0aWNzIHRvIHRoZSBob3N0LgorCisgIENvbmZpZ3VyYXRpb24KKworICBTdWJzeXN0ZW0gRGV2aWNlIElEIDUKKworICBWaXJ0cXVldWVzIDA6aW5mbGF0ZXEuIDE6ZGVmbGF0ZXEuIDI6c3RhdHNxLltmb290bm90ZToKK09ubHkgaWYgVklSVElPX0JBTExPTl9GX1NUQVRTX1ZRIHNldAorXQorCisgIEZlYXR1cmUgYml0cworCisgIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QgKDApIEhvc3QgbXVzdCBiZSB0b2xkIGJlZm9yZQorICAgIHBhZ2VzIGZyb20gdGhlIGJhbGxvb24gYXJlIHVzZWQuCisKKyAgVklSVElPX0JBTExPT05fRl9TVEFUU19WUSAoMSkgQSB2aXJ0cXVldWUgZm9yIHJlcG9ydGluZyBndWVzdAorICAgIG1lbW9yeSBzdGF0aXN0aWNzIGlzIHByZXNlbnQuCisKKyAgRGV2aWNlIGNvbmZpZ3VyYXRpb24gbGF5b3V0IEJvdGggZmllbGRzIG9mIHRoaXMgY29uZmlndXJhdGlvbgorICBhcmUgYWx3YXlzIGF2YWlsYWJsZS4gTm90ZSB0aGF0IHRoZXkgYXJlIGxpdHRsZSBlbmRpYW4sIGRlc3BpdGUKKyAgY29udmVudGlvbiB0aGF0IGRldmljZSBmaWVsZHMgYXJlIGd1ZXN0IGVuZGlhbjpzdHJ1Y3QgdmlydGlvX2JhbGxvb25fY29uZmlnIHsKKworCXUzMiBudW1fcGFnZXM7CisKKwl1MzIgYWN0dWFsOworCit9OworCisgIERldmljZSBJbml0aWFsaXphdGlvbgorCisgIFRoZSBpbmZsYXRlIGFuZCBkZWZsYXRlIHZpcnRxdWV1ZXMgYXJlIGlkZW50aWZpZWQuCisKKyAgSWYgdGhlIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEgZmVhdHVyZSBiaXQgaXMgbmVnb3RpYXRlZDoKKworICBJZGVudGlmeSB0aGUgc3RhdHMgdmlydHF1ZXVlLgorCisgIEFkZCBvbmUgZW1wdHkgYnVmZmVyIHRvIHRoZSBzdGF0cyB2aXJ0cXVldWUgYW5kIG5vdGlmeSB0aGUKKyAgICBob3N0LgorCitEZXZpY2Ugb3BlcmF0aW9uIGJlZ2lucyBpbW1lZGlhdGVseS4KKworICBEZXZpY2UgT3BlcmF0aW9uCisKKyAgTWVtb3J5IEJhbGxvb25pbmcgVGhlIGRldmljZSBpcyBkcml2ZW4gYnkgdGhlIHJlY2VpcHQgb2YgYQorICBjb25maWd1cmF0aW9uIGNoYW5nZSBpbnRlcnJ1cHQuCisKKyAgVGhlIOKAnG51bV9wYWdlc+KAnSBjb25maWd1cmF0aW9uIGZpZWxkIGlzIGV4YW1pbmVkLiBJZiB0aGlzIGlzCisgIGdyZWF0ZXIgdGhhbiB0aGUg4oCcYWN0dWFs4oCdIG51bWJlciBvZiBwYWdlcywgbWVtb3J5IG11c3QgYmUgZ2l2ZW4KKyAgdG8gdGhlIGJhbGxvb24uIElmIGl0IGlzIGxlc3MgdGhhbiB0aGUg4oCcYWN0dWFs4oCdIG51bWJlciBvZgorICBwYWdlcywgbWVtb3J5IG1heSBiZSB0YWtlbiBiYWNrIGZyb20gdGhlIGJhbGxvb24gZm9yIGdlbmVyYWwKKyAgdXNlLgorCisgIFRvIHN1cHBseSBtZW1vcnkgdG8gdGhlIGJhbGxvb24gKGFrYS4gaW5mbGF0ZSk6CisKKyAgVGhlIGRyaXZlciBjb25zdHJ1Y3RzIGFuIGFycmF5IG9mIGFkZHJlc3NlcyBvZiB1bnVzZWQgbWVtb3J5CisgICAgcGFnZXMuIFRoZXNlIGFkZHJlc3NlcyBhcmUgZGl2aWRlZCBieSA0MDk2W2Zvb3Rub3RlOgorVGhpcyBpcyBoaXN0b3JpY2FsLCBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlIGd1ZXN0IHBhZ2Ugc2l6ZQorXSBhbmQgdGhlIGRlc2NyaXB0b3IgZGVzY3JpYmluZyB0aGUgcmVzdWx0aW5nIDMyLWJpdCBhcnJheSBpcworICAgIGFkZGVkIHRvIHRoZSBpbmZsYXRlcS4KKworICBUbyByZW1vdmUgbWVtb3J5IGZyb20gdGhlIGJhbGxvb24gKGFrYS4gZGVmbGF0ZSk6CisKKyAgVGhlIGRyaXZlciBjb25zdHJ1Y3RzIGFuIGFycmF5IG9mIGFkZHJlc3NlcyBvZiBtZW1vcnkgcGFnZXMgaXQKKyAgICBoYXMgcHJldmlvdXNseSBnaXZlbiB0byB0aGUgYmFsbG9vbiwgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGlzCisgICAgZGVzY3JpcHRvciBpcyBhZGRlZCB0byB0aGUgZGVmbGF0ZXEuCisKKyAgSWYgdGhlIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QgZmVhdHVyZSBpcyBzZXQsIHRoZQorICAgIGd1ZXN0IG1heSBub3QgdXNlIHRoZXNlIHJlcXVlc3RlZCBwYWdlcyB1bnRpbCB0aGF0IGRlc2NyaXB0b3IKKyAgICBpbiB0aGUgZGVmbGF0ZXEgaGFzIGJlZW4gdXNlZCBieSB0aGUgZGV2aWNlLgorCisgIE90aGVyd2lzZSwgdGhlIGd1ZXN0IG1heSBiZWdpbiB0byByZS11c2UgcGFnZXMgcHJldmlvdXNseSBnaXZlbgorICAgIHRvIHRoZSBiYWxsb29uIGJlZm9yZSB0aGUgZGV2aWNlIGhhcyBhY2tub3dsZWRnZWQgdGhlaXIKKyAgICB3aXRoZHJhd2wuIFtmb290bm90ZToKK0luIHRoaXMgY2FzZSwgZGVmbGF0aW9uIGFkdmljZSBpcyBtZXJlbHkgYSBjb3VydGVzeQorXQorCisgIEluIGVpdGhlciBjYXNlLCBvbmNlIHRoZSBkZXZpY2UgaGFzIGNvbXBsZXRlZCB0aGUgaW5mbGF0aW9uIG9yCisgIGRlZmxhdGlvbiwgdGhlIOKAnGFjdHVhbOKAnSBmaWVsZCBvZiB0aGUgY29uZmlndXJhdGlvbiBzaG91bGQgYmUKKyAgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBuZXcgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBiYWxsb29uLltmb290bm90ZToKK0FzIHVwZGF0ZXMgdG8gY29uZmlndXJhdGlvbiBzcGFjZSBhcmUgbm90IGF0b21pYywgdGhpcyBmaWVsZAoraXNuJ3QgcGFydGljdWxhcmx5IHJlbGlhYmxlLCBidXQgY2FuIGJlIHVzZWQgdG8gZGlhZ25vc2UgYnVnZ3kKK2d1ZXN0cy4KK10KKworICBNZW1vcnkgU3RhdGlzdGljcworCitUaGUgc3RhdHMgdmlydHF1ZXVlIGlzIGF0eXBpY2FsIGJlY2F1c2UgY29tbXVuaWNhdGlvbiBpcyBkcml2ZW4KK2J5IHRoZSBkZXZpY2UgKG5vdCB0aGUgZHJpdmVyKS4gVGhlIGNoYW5uZWwgYmVjb21lcyBhY3RpdmUgYXQKK2RyaXZlciBpbml0aWFsaXphdGlvbiB0aW1lIHdoZW4gdGhlIGRyaXZlciBhZGRzIGFuIGVtcHR5IGJ1ZmZlcgorYW5kIG5vdGlmaWVzIHRoZSBkZXZpY2UuIEEgcmVxdWVzdCBmb3IgbWVtb3J5IHN0YXRpc3RpY3MgcHJvY2VlZHMKK2FzIGZvbGxvd3M6CisKKyAgVGhlIGRldmljZSBwdXNoZXMgdGhlIGJ1ZmZlciBvbnRvIHRoZSB1c2VkIHJpbmcgYW5kIHNlbmRzIGFuCisgIGludGVycnVwdC4KKworICBUaGUgZHJpdmVyIHBvcHMgdGhlIHVzZWQgYnVmZmVyIGFuZCBkaXNjYXJkcyBpdC4KKworICBUaGUgZHJpdmVyIGNvbGxlY3RzIG1lbW9yeSBzdGF0aXN0aWNzIGFuZCB3cml0ZXMgdGhlbSBpbnRvIGEKKyAgbmV3IGJ1ZmZlci4KKworICBUaGUgZHJpdmVyIGFkZHMgdGhlIGJ1ZmZlciB0byB0aGUgdmlydHF1ZXVlIGFuZCBub3RpZmllcyB0aGUKKyAgZGV2aWNlLgorCisgIFRoZSBkZXZpY2UgcG9wcyB0aGUgYnVmZmVyIChyZXRhaW5pbmcgaXQgdG8gaW5pdGlhdGUgYQorICBzdWJzZXF1ZW50IHJlcXVlc3QpIGFuZCBjb25zdW1lcyB0aGUgc3RhdGlzdGljcy4KKworICBNZW1vcnkgU3RhdGlzdGljcyBGb3JtYXQgRWFjaCBzdGF0aXN0aWMgY29uc2lzdHMgb2YgYSAxNiBiaXQKKyAgdGFnIGFuZCBhIDY0IGJpdCB2YWx1ZS4gQm90aCBxdWFudGl0aWVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUKKyAgbmF0aXZlIGVuZGlhbiBvZiB0aGUgZ3Vlc3QuIEFsbCBzdGF0aXN0aWNzIGFyZSBvcHRpb25hbCBhbmQgdGhlCisgIGRyaXZlciBtYXkgY2hvb3NlIHdoaWNoIG9uZXMgdG8gc3VwcGx5LiBUbyBndWFyYW50ZWUgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHksIHVuc3VwcG9ydGVkIHN0YXRpc3RpY3Mgc2hvdWxkIGJlIG9taXR0ZWQuCisKKyAgc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgeworCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9JTiAgMAorCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQgMQorCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUFKRkxUICAgMgorCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUlORkxUICAgMworCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNRlJFRSAgNAorCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUVNVE9UICAgNQorCisJdTE2IHRhZzsKKworCXU2NCB2YWw7CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyAgVGFncworCisgIFZJUlRJT19CQUxMT09OX1NfU1dBUF9JTiBUaGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IGhhcyBiZWVuCisgIHN3YXBwZWQgaW4gKGluIGJ5dGVzKS4KKworICBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfT1VUIFRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgaGFzIGJlZW4KKyAgc3dhcHBlZCBvdXQgdG8gZGlzayAoaW4gYnl0ZXMpLgorCisgIFZJUlRJT19CQUxMT09OX1NfTUFKRkxUIFRoZSBudW1iZXIgb2YgbWFqb3IgcGFnZSBmYXVsdHMgdGhhdAorICBoYXZlIG9jY3VycmVkLgorCisgIFZJUlRJT19CQUxMT09OX1NfTUlORkxUIFRoZSBudW1iZXIgb2YgbWlub3IgcGFnZSBmYXVsdHMgdGhhdAorICBoYXZlIG9jY3VycmVkLgorCisgIFZJUlRJT19CQUxMT09OX1NfTUVNRlJFRSBUaGUgYW1vdW50IG9mIG1lbW9yeSBub3QgYmVpbmcgdXNlZAorICBmb3IgYW55IHB1cnBvc2UgKGluIGJ5dGVzKS4KKworICBWSVJUSU9fQkFMTE9PTl9TX01FTVRPVCBUaGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUKKyAgKGluIGJ5dGVzKS4KKwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxZDJlNzlkLi4wYWNmOWFiIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTg4Myw3ICsxODgzLDcgQEAKIEY6CWRyaXZlcnMvY29ubmVjdG9yLwogCiBDT05UUk9MIEdST1VQUyAoQ0dST1VQUykKLU06CVBhdWwgTWVuYWdlIDxtZW5hZ2VAZ29vZ2xlLmNvbT4KK006CVBhdWwgTWVuYWdlIDxwYXVsQHBhdWxtZW5hZ2Uub3JnPgogTToJTGkgWmVmYW4gPGxpemZAY24uZnVqaXRzdS5jb20+CiBMOgljb250YWluZXJzQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCiBTOglNYWludGFpbmVkCkBAIC0xOTI1LDggKzE5MjUsMTQgQEAKIEY6CWFyY2gveDg2L2tlcm5lbC9jcHVpZC5jCiBGOglhcmNoL3g4Ni9rZXJuZWwvbXNyLmMKIAorQ1BVIFBPV0VSIE1PTklUT1JJTkcgU1VCU1lTVEVNCitNOglEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+CitNOglUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorUzoJTWFpbnRhaW5lZAorRjoJdG9vbHMvcG93ZXIvY3B1cG93ZXIKKwogQ1BVU0VUUwotTToJUGF1bCBNZW5hZ2UgPG1lbmFnZUBnb29nbGUuY29tPgorTToJUGF1bCBNZW5hZ2UgPHBhdWxAcGF1bG1lbmFnZS5vcmc+CiBXOglodHRwOi8vd3d3LmJ1bGxvcGVuc291cmNlLm9yZy9jcHVzZXQvCiBXOglodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvY3B1c2V0cy8KIFM6CVN1cHBvcnRlZApAQCAtMjYzNywxOCArMjY0MywxNyBAQAogRjoJYXJjaC94ODYvbWF0aC1lbXUvCiAKIEZSQU1FIFJFTEFZIERMQ0kvRlJBRCAoU2FuZ29tYSBkcml2ZXJzIHRvbykKLU06CU1pa2UgTWNMYWdhbiA8bWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZz4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJZHJpdmVycy9uZXQvd2FuL2RsY2kuYwogRjoJZHJpdmVycy9uZXQvd2FuL3NkbGEuYwogCiBGUkFNRUJVRkZFUiBMQVlFUgotTToJUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KK006CUZsb3JpYW4gVG9iaWFzIFNjaGFuZGluYXQgPEZsb3JpYW5TY2hhbmRpbmF0QGdteC5kZT4KIEw6CWxpbnV4LWZiZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2xpbnV4LWZiZGV2LnNvdXJjZWZvcmdlLm5ldC8KIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWZiZGV2L2xpc3QvCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xldGhhbC9mYmRldi0yLjYuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0aHViLmNvbS9zY2hhbmRpbmF0L2xpbnV4LTIuNi5naXQgZmJkZXYtbmV4dAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9mYi8KIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9mYi8KQEAgLTMyNTcsNiArMzI2MiwxNyBAQAogRjoJZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jCiBLOglcYihBQlN8U1lOKV9NVF8KIAorSU5URUwgQzYwMCBTRVJJRVMgU0FTIENPTlRST0xMRVIgRFJJVkVSCitNOglJbnRlbCBTQ1UgTGludXggc3VwcG9ydCA8aW50ZWwtbGludXgtc2N1QGludGVsLmNvbT4KK006CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgorTToJRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CitNOglFZCBOYWRvbHNraSA8ZWRtdW5kLm5hZG9sc2tpQGludGVsLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RqYncvaXNjaS5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvc2NzaS9pc2NpLworRjoJZmlybXdhcmUvaXNjaS8KKwogSU5URUwgSURMRSBEUklWRVIKIE06CUxlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPgogTDoJbGludXgtcG1AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKQEAgLTMzNjEsNiArMzM3NywxMiBAQAogRjoJZHJpdmVycy9uZXQvaXhnYmUvCiBGOglkcml2ZXJzL25ldC9peGdiZXZmLwogCitJTlRFTCBNUlNUIFBNVSBEUklWRVIKK006CUxlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KK0w6CWxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWFyY2gveDg2L3BsYXRmb3JtL21yc3QvcG11LioKKwogSU5URUwgUFJPL1dJUkVMRVNTIDIxMDAgTkVUV09SSyBDT05ORUNUSU9OIFNVUFBPUlQKIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogUzoJT3JwaGFuCkBAIC0zODk0LDkgKzM5MTYsOSBAQAogRjoJZHJpdmVycy9tYWNpbnRvc2gvCiAKIExJTlVYIEZPUiBQT1dFUlBDIEVNQkVEREVEIE1QQzVYWFgKLU06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK006CUFuYXRvbGlqIEd1c3RzY2hpbiA8YWd1c3RAZGVueC5kZT4KIEw6CWxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCi1UOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5kZW54LmRlL2xpbnV4LTIuNi1hZ3VzdC5naXQKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC8KIEY6CWFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC8KQEAgLTQxNTAsNiArNDE3MiwxMyBAQAogRjoJZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfKgogRjoJaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCiAKK01BWDE2NjggVEVNUEVSQVRVUkUgU0VOU09SIERSSVZFUgorTToJIkRhdmlkIEdlb3JnZSIgPGRhdmlkLmdlb3JnZUBza2EuYWMuemE+CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2h3bW9uL21heDE2NjgKK0Y6CWRyaXZlcnMvaHdtb24vbWF4MTY2OC5jCisKIE1BWDY2NTAgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCiBNOgkiSGFucyBKLiBLb2NoIiA8aGprQGhhbnNqa29jaC5kZT4KIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKQEAgLTQzOTYsMTAgKzQ0MjUsMTAgQEAKIEY6CW5ldC9uZXRmaWx0ZXIvCiAKIE5FVExBQkVMCi1NOglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KK006CVBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiBXOglodHRwOi8vbmV0bGFiZWwuc2YubmV0CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbmV0bGFiZWwvCiBGOglpbmNsdWRlL25ldC9uZXRsYWJlbC5oCiBGOgluZXQvbmV0bGFiZWwvCkBAIC00NDMyLDggKzQ0NjEsOCBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2VuL05ldAogVzoJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbmV0ZGV2L2xpc3QvCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL25ldC0yLjYuZ2l0Ci1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL25ldC1uZXh0LTIuNi5naXQKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vbmV0LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtbmV4dC5naXQKIFM6CU1haW50YWluZWQKIEY6CW5ldC8KIEY6CWluY2x1ZGUvbmV0LwpAQCAtNDQ0NCw3ICs0NDczLDYgQEAKIE5FVFdPUktJTkcgW0lQdjQvSVB2Nl0KIE06CSJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogTToJQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+Ci1NOgkiUGVra2EgU2F2b2xhIChpcHY2KSIgPHBla2thc0BuZXRjb3JlLmZpPgogTToJSmFtZXMgTW9ycmlzIDxqbW9ycmlzQG5hbWVpLm9yZz4KIE06CUhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KIE06CVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgpAQCAtNDQ1Nyw3ICs0NDg1LDcgQEAKIEY6CWFyY2gveDg2L25ldC8qCiAKIE5FVFdPUktJTkcgW0xBQkVMRURdIChOZXRMYWJlbCwgQ0lQU08sIExhYmVsZWQgSVBzZWMsIFNFQ01BUkspCi1NOglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KK006CVBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKQEAgLTQ1ODcsNyArNDYxNSw3IEBACiBGOglhcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluNDR4eC5jCiAKIE9NQVAgQVVESU8gU1VQUE9SVAotTToJSmFya2tvIE5pa3VsYSA8amhuaWt1bGFAZ21haWwuY29tPgorTToJSmFya2tvIE5pa3VsYSA8amFya2tvLm5pa3VsYUBiaXRtZXIuY29tPgogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChzdWJzY3JpYmVycy1vbmx5KQogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKQEAgLTQ3MDksNiArNDczNyw3IEBACiBGOglkcml2ZXJzL29mCiBGOglpbmNsdWRlL2xpbnV4L29mKi5oCiBLOglvZl9nZXRfcHJvcGVydHkKK0s6CW9mX21hdGNoX3RhYmxlCiAKIE9QRU5SSVNDIEFSQ0hJVEVDVFVSRQogTToJSm9uYXMgQm9ubiA8am9uYXNAc291dGhwb2xlLnNlPgpAQCAtNDc1Niw3ICs0Nzg1LDcgQEAKIAogT1NEIExJQlJBUlkgYW5kIEZJTEVTWVNURU0KIE06CUJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+Ci1NOglCZW5ueSBIYWxldnkgPGJoYWxldnlAcGFuYXNhcy5jb20+CitNOglCZW5ueSBIYWxldnkgPGJoYWxldnlAdG9uaWFuLmNvbT4KIEw6CW9zZC1kZXZAb3Blbi1vc2Qub3JnCiBXOglodHRwOi8vb3Blbi1vc2Qub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lm9wZW4tb3NkLm9yZy9vcGVuLW9zZC5naXQKQEAgLTQ5NTMsNyArNDk4Miw3IEBACiBNOglJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KIE06CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+CiBTOglTdXBwb3J0ZWQKLUY6CWtlcm5lbC9wZXJmX2V2ZW50Ki5jCitGOglrZXJuZWwvZXZlbnRzLyoKIEY6CWluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCiBGOglhcmNoLyova2VybmVsL3BlcmZfZXZlbnQqLmMKIEY6CWFyY2gvKi9rZXJuZWwvKi9wZXJmX2V2ZW50Ki5jCkBAIC00OTk5LDYgKzUwMjgsMTcgQEAKIEY6CWRyaXZlcnMvdmlkZW8vZmItcHV2My5jCiBGOglkcml2ZXJzL3J0Yy9ydGMtcHV2My5jCiAKK1BNQlVTIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSUworTToJR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitXOglodHRwOi8vd3d3LmxtLXNlbnNvcnMub3JnLworVzoJaHR0cDovL3d3dy5yb2Vjay11cy5uZXQvbGludXgvZHJpdmVycy8KK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JvZWNrL2xpbnV4LXN0YWdpbmcuZ2l0CitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCitGOglkcml2ZXJzL2h3bW9uL3BtYnVzLworRjoJaW5jbHVkZS9saW51eC9pMmMvcG1idXMuaAorCiBQTUMgU0lFUlJBIE1heFJBSUQgRFJJVkVSCiBNOglBbmlsIFJhdmluZHJhbmF0aCA8YW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwpAQCAtNTUwMyw2ICs1NTQzLDcgQEAKIAogU0FNU1VORyBBVURJTyAoQVNvQykgRFJJVkVSUwogTToJSmFzc2kgQnJhciA8amFzc2lzaW5naGJyYXJAZ21haWwuY29tPgorTToJU2FuZ2Jlb20gS2ltIDxzYmtpbTczQHNhbXN1bmcuY29tPgogTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CVN1cHBvcnRlZAogRjoJc291bmQvc29jL3NhbXN1bmcKQEAgLTYyOTQsNiArNjMzNSw3IEBACiBUQVJHRVQgU1VCU1lTVEVNCiBNOglOaWNob2xhcyBBLiBCZWxsaW5nZXIgPG5hYkBsaW51eC1pc2NzaS5vcmc+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworTDoJdGFyZ2V0LWRldmVsQHZnZXIua2VybmVsLm9yZwogTDoJaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2xpbnV4LWlzY3NpLXRhcmdldC1kZXYKIFc6CWh0dHA6Ly93d3cubGludXgtaXNjc2kub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L25hYi9saW8tY29yZS0yLjYuZ2l0IG1hc3RlcgpAQCAtNzA1Nyw3ICs3MDk5LDcgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3QvdnViMzAwLmMKIAogVzEgREFMTEFTJ1MgMS1XSVJFIEJVUwotTToJRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KK006CUV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vdzEvCiBGOglkcml2ZXJzL3cxLwpAQCAtNzE2OSw2ICs3MjExLDkgQEAKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi93bTgzPz8KIEY6CWRyaXZlcnMvbGVkcy9sZWRzLXdtODMqLmMKK0Y6CWRyaXZlcnMvaW5wdXQvbWlzYy93bTgzMXgtb24uYworRjoJZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYworRjoJZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3Ki5jCiBGOglkcml2ZXJzL21mZC93bTgqLmMKIEY6CWRyaXZlcnMvcG93ZXIvd204MyouYwogRjoJZHJpdmVycy9ydGMvcnRjLXdtODMqLmMKQEAgLTcxNzgsNiArNzIyMyw3IEBACiBGOglpbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvCiBGOglpbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvCiBGOglpbmNsdWRlL2xpbnV4L21mZC93bTg0MDAqCitGOglpbmNsdWRlL2xpbnV4L3dtOTd4eC5oCiBGOglpbmNsdWRlL3NvdW5kL3dtPz8/Py5oCiBGOglzb3VuZC9zb2MvY29kZWNzL3dtKgogCkBAIC03MzI3LDcgKzczNzMsNyBAQAogTToJTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvTEtNTC9saXN0LwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC0yLjYuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdAogUzoJQnVyaWVkIGFsaXZlIGluIHJlcG9ydGVycwogRjoJKgogRjoJKi8KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZDAxODk1Ni4uNTIyZmE0NyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsOCArMSw4IEBACiBWRVJTSU9OID0gMwotUEFUQ0hMRVZFTCA9IDAKK1BBVENITEVWRUwgPSAxCiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9Ci1OQU1FID0gU25lYWt5IFdlYXNlbAorRVhUUkFWRVJTSU9OID0gLXJjNgorTkFNRSA9ICJEaXZlbWFzdGVyIEVkaXRpb24iCiAKICMgKkRPQ1VNRU5UQVRJT04qCiAjIFRvIHNlZSBhIGxpc3Qgb2YgdHlwaWNhbCB0YXJnZXRzIGV4ZWN1dGUgIm1ha2UgaGVscCIKQEAgLTM2MCw3ICszNjAsNyBAQAogTElOVVhJTkNMVURFICAgIDo9IC1JJChzcmN0cmVlKS9hcmNoLyQoaGRyLWFyY2gpL2luY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgIC1JYXJjaC8kKGhkci1hcmNoKS9pbmNsdWRlL2dlbmVyYXRlZCAtSWluY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgICQoaWYgJChLQlVJTERfU1JDKSwgLUkkKHNyY3RyZWUpL2luY2x1ZGUpIFwKLSAgICAgICAgICAgICAgICAgICAtaW5jbHVkZSBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oCisgICAgICAgICAgICAgICAgICAgLWluY2x1ZGUgJChzcmN0cmVlKS9pbmNsdWRlL2xpbnV4L2tjb25maWcuaAogCiBLQlVJTERfQ1BQRkxBR1MgOj0gLURfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCAyNmIwZTIzLi40YjA2NjljIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xNzgsNCArMTc4LDcgQEAKIGNvbmZpZyBIQVZFX1JDVV9UQUJMRV9GUkVFCiAJYm9vbAogCitjb25maWcgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKKwlib29sCisKIHNvdXJjZSAia2VybmVsL2djb3YvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCBjYTJkYThkLi44YmI5MzYyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0xNCw2ICsxNCw3IEBACiAJc2VsZWN0IEFVVE9fSVJRX0FGRklOSVRZIGlmIFNNUAogCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCkBAIC01MCw3ICs1MSw3IEBACiAgICAgICAgIGRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfR1BJTwotCWRlZl9ib29sIHkKKwlib29sCiAKIGNvbmZpZyBaT05FX0RNQQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3lzaW5mby5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKaW5kZXggMDg2YWJhMi4uZTc3ZDc3YyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKQEAgLTI3LDEzICsyNyw0IEBACiAjZGVmaW5lIFVBQ19OT0ZJWAkJCTIKICNkZWZpbmUgVUFDX1NJR0JVUwkJCTQKIAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBUaGlzIGlzIHRoZSBzaGlmdCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIFVBQyBiaXRzIGFzIHN0b3JlZCBpbiB0aGUKLSAgIHBlci10aHJlYWQgZmxhZ3MuICBTZWUgdGhyZWFkX2luZm8uaC4gICovCi0jZGVmaW5lIFVBQ19TSElGVAkJCTYKLQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTTV9BTFBIQV9TWVNJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA2ZjMyZjljLi5mZjczZGIwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03NCw5ICs3NCw5IEBACiAjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMwkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwk4CS8qIHBvbGxfaWRsZSBpcyBwb2xsaW5nIE5FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfRElFX0lGX0tFUk5FTAk5CS8qIGRpayByZWN1cnNpb24gbG9jayAqLwotI2RlZmluZSBUSUZfVUFDX05PUFJJTlQJCTEwCS8qIHNlZSBzeXNpbmZvLmggKi8KLSNkZWZpbmUgVElGX1VBQ19OT0ZJWAkJMTEKLSNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTEyCisjZGVmaW5lIFRJRl9VQUNfTk9QUklOVAkJMTAJLyogISBQcmVzZXJ2ZSBzZXF1ZW5jZSBvZiBmb2xsb3dpbmcgKi8KKyNkZWZpbmUgVElGX1VBQ19OT0ZJWAkJMTEJLyogISBmbGFncyBhcyB0aGV5IG1hdGNoICAgICAgICAgICAgKi8KKyNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTEyCS8qICEgdXNlcnNwYWNlIHBhcnQgb2YgJ29zZl9zeXNpbmZvJyAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxMwkvKiBpcyB0ZXJtaW5hdGluZyBkdWUgdG8gT09NIGtpbGxlciAqLwogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTE0CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTE2CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCkBAIC05Nyw3ICs5Nyw3IEBACiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCShfVElGX1dPUktfTUFTSwkJXAogCQkJCSB8IF9USUZfU1lTQ0FMTF9UUkFDRSkKIAotI2RlZmluZSBBTFBIQV9VQUNfU0hJRlQJCTEwCisjZGVmaW5lIEFMUEhBX1VBQ19TSElGVAkJVElGX1VBQ19OT1BSSU5UCiAjZGVmaW5lIEFMUEhBX1VBQ19NQVNLCQkoMSA8PCBUSUZfVUFDX05PUFJJTlQgfCAxIDw8IFRJRl9VQUNfTk9GSVggfCBcCiAJCQkJIDEgPDwgVElGX1VBQ19TSUdCVVMpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwppbmRleCAzMjZmMGEyLi4wMWU4NzE1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vaHdycGIuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKQEAgLTYzMyw5ICs2MzQsMTAgQEAKICAJY2FzZSBHU0lfVUFDUFJPQzoKIAkJaWYgKG5ieXRlcyA8IHNpemVvZih1bnNpZ25lZCBpbnQpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0gCQl3ID0gKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MgPj4gVUFDX1NISUZUKSAmIFVBQ19CSVRNQVNLOwotIAkJaWYgKHB1dF91c2VyKHcsICh1bnNpZ25lZCBpbnQgX191c2VyICopYnVmZmVyKSkKLSAJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdyA9IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzID4+IEFMUEhBX1VBQ19TSElGVCkgJgorCQkJVUFDX0JJVE1BU0s7CisJCWlmIChwdXRfdXNlcih3LCAodW5zaWduZWQgaW50IF9fdXNlciAqKWJ1ZmZlcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKICAJCXJldHVybiAxOwogCiAJY2FzZSBHU0lfUFJPQ19UWVBFOgpAQCAtNzU2LDggKzc1OCw4IEBACiAgCQkJY2FzZSBTU0lOX1VBQ1BST0M6CiAJCQlhZ2FpbjoKIAkJCQlvbGQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzOwotCQkJCW5ldyA9IG9sZCAmIH4oVUFDX0JJVE1BU0sgPDwgVUFDX1NISUZUKTsKLQkJCQluZXcgPSBuZXcgfCAodyAmIFVBQ19CSVRNQVNLKSA8PCBVQUNfU0hJRlQ7CisJCQkJbmV3ID0gb2xkICYgfihVQUNfQklUTUFTSyA8PCBBTFBIQV9VQUNfU0hJRlQpOworCQkJCW5ldyA9IG5ldyB8ICh3ICYgVUFDX0JJVE1BU0spIDw8IEFMUEhBX1VBQ19TSElGVDsKIAkJCQlpZiAoY21weGNoZygmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywKIAkJCQkJICAgIG9sZCwgbmV3KSAhPSBvbGQpCiAJCQkJCWdvdG8gYWdhaW47CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IDBlMTQzOTkuLjg2MDZkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC0xODMsNyArMTgzLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotYWxjb3JfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCithbGNvcl9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzddWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYwppbmRleCBjOGMxMTJkLi4xMDI5NjE5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIGludCBfX2luaXQKLWViNjZwX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorZWI2NnBfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYls1XVs1XSBfX2luaXRkYXRhID0gewogCQkvKklOVCAgSU5UQSAgSU5UQiAgSU5UQyAgIElOVEQgKi8KQEAgLTIwNSw3ICsyMDUsNyBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IF9faW5pdAotY2FicmlvbGV0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorY2FicmlvbGV0X21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbNV1bNV0gX19pbml0ZGF0YSA9IHsKIAkJLypJTlQgICBJTlRBICBJTlRCICBJTlRDICAgSU5URCAqLwpAQCAtMjg5LDcgKzI4OSw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgX19pbml0Ci1hbHBoYXBjMTY0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorYWxwaGFwYzE2NF9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzddWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgSU5UQSAgSU5UQiAgIElOVEMgICBJTlREICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZHAyNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCmluZGV4IGY4ODU2ODIuLmJiN2YwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jCkBAIC0zODIsNyArMzgyLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLWRwMjY0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorZHAyNjRfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYls2XVs1XSBfX2luaXRkYXRhID0gewogCQkvKklOVCAgICBJTlRBICAgSU5UQiAgIElOVEMgICBJTlREICovCkBAIC00MDQsNyArNDA0LDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLW1vbmV0X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbW9uZXRfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYlsxM11bNV0gX19pbml0ZGF0YSA9IHsKIAkJLypJTlQgICAgSU5UQSAgIElOVEIgICBJTlRDICAgSU5URCAqLwpAQCAtNDY2LDcgKzQ2Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0Ci13ZWJicmlja19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3dlYmJyaWNrX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbMTNdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KQEAgLTQ4OCw3ICs0ODgsNyBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAotY2xpcHBlcl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2NsaXBwZXJfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYls3XVs1XSBfX2luaXRkYXRhID0gewogCQkvKklOVCAgICBJTlRBICAgSU5UQiAgIElOVEMgICBJTlREICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCmluZGV4IGE3YTIzYjQuLjNjNmMxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCkBAIC0xNjksNyArMTY5LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotZWI2NHBfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitlYjY0cF9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzVdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICBJTlRBICBJTlRCICBJTlRDICAgSU5URCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwppbmRleCBhNjBjZDViLi4zNWY0ODBkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0Ci1laWdlcl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2VpZ2VyX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXU4IGlycV9vcmlnOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKaW5kZXggMzg4Yjk5ZC4uOTVjZmM4MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgCi1tYXJ2ZWxfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCittYXJ2ZWxfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gZGV2LT5zeXNkYXRhOwogCXN0cnVjdCBpbzdfcG9ydCAqaW83X3BvcnQgPSBob3NlLT5zeXNkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pYXRhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlhdGEuYwppbmRleCA2MWNjZDk1Li4yNThkYTY4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlhdGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlhdGEuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgKi8KIAogc3RhdGljIGludCBfX2luaXQKLW1pYXRhX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbWlhdGFfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAgICAgICAgIHN0YXRpYyBjaGFyIGlycV90YWJbMThdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwppbmRleCAwZTZlNDY5Li5jMGZkNzI4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotbWlrYXNhX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbWlrYXNhX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbOF1bNV0gX19pbml0ZGF0YSA9IHsKIAkJLypJTlQgICAgSU5UQSAgIElOVEIgICBJTlRDICAgSU5URCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25hdXRpbHVzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbmF1dGlsdXMuYwppbmRleCA5OWMwZjQ2Li40MTEyMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbmF1dGlsdXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbmF1dGlsdXMuYwpAQCAtNjUsNyArNjUsNyBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAotbmF1dGlsdXNfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCituYXV0aWx1c19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAkvKiBQcmVzZXJ2ZSB0aGUgSVJRIHNldCB1cCBieSB0aGUgY29uc29sZS4gICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19ub3JpdGFrZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKaW5kZXggYTAwYWM3MC4uMjE3MjUyOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgX19pbml0Ci1ub3JpdGFrZV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK25vcml0YWtlX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbMTVdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCmluZGV4IDdmNTIxNjEuLmExMjVkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKi8KIAogc3RhdGljIGludCBfX2luaXQKLXJhd2hpZGVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCityYXdoaWRlX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBjaGFyIGlycV90YWJbNV1bNV0gX19pbml0ZGF0YSA9IHsKIAkJLypJTlQgICAgSU5UQSAgIElOVEIgICBJTlRDICAgSU5URCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19ydWZmaWFuLmMKaW5kZXggZjMzNjQ4ZS4uMjU4MWNiZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcnVmZmlhbi5jCkBAIC0xMTksNyArMTE5LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotcnVmZmlhbl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3J1ZmZpYW5fbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAgICAgICAgIHN0YXRpYyBjaGFyIGlycV90YWJbMTFdWzVdIF9faW5pdGRhdGEgPSB7CiAJICAgICAgLypJTlQgIElOVEEgSU5UQiBJTlRDIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKaW5kZXggMjE2ZDk0ZC4uYjE3MmIyNyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J4MTY0LmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgX19pbml0Ci1yeDE2NF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3J4MTY0X21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogI2lmIDAKIAlzdGF0aWMgY2hhciBpcnFfdGFiX3Bhc3MxWzZdWzVdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCmluZGV4IGRhNzE0ZTQuLjk4ZDFkYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotc2FibGVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzYWJsZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzldWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KQEAgLTM3Niw3ICszNzYsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgX19pbml0Ci1seW54X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbHlueF9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzE5XVs1XSBfX2luaXRkYXRhID0gewogCQkvKklOVCAgICBJTlRBICAgSU5UQiAgIElOVEMgICBJTlREICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2lvLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2lvLmMKaW5kZXggODViNGFlYS4uNDdiZWMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Npby5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zaW8uYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9faW5pdAotbm9uYW1lX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbm9uYW1lX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCS8qCiAJICogVGhlIE5vbmFtZSBib2FyZCBoYXMgNSBQQ0kgc2xvdHMgd2l0aCBlYWNoIG9mIHRoZSA0CkBAIC0xODUsNyArMTg1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19pbml0Ci1wMmtfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitwMmtfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYltdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UIEEgICBCICAgQyAgIEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zeDE2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3N4MTY0LmMKaW5kZXggNDFkNGFkNC4uNzNlMWMzMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3N4MTY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3N4MTY0LmMKQEAgLTk1LDcgKzk1LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotc3gxNjRfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzeDE2NF9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzVdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYwppbmRleCBhMzFmOGNkLi4yYWU5OWFkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCkBAIC0xNTcsNyArMTU3LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotdGFrYXJhX21hcF9pcnFfc3JtKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3Rha2FyYV9tYXBfaXJxX3NybShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGNoYXIgaXJxX3RhYlsxNV1bNV0gX19pbml0ZGF0YSA9IHsKIAkJeyAxNiszLCAxNiszLCAxNiszLCAxNiszLCAxNiszfSwgICAvKiBzbG90ICA2ID09IGRldmljZSAzICovCkBAIC0xODgsNyArMTg4LDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLXRha2FyYV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3Rha2FyYV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzE1XVs1XSBfX2luaXRkYXRhID0gewogCQl7IDE2KzMsIDE2KzMsIDE2KzMsIDE2KzMsIDE2KzN9LCAgIC8qIHNsb3QgIDYgPT0gZGV2aWNlIDMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggNjk5NDQwNy4uZjQ3YjMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotdGl0YW5fbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit0aXRhbl9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAl1OCBpbnRsaW5lOwogCWludCBpcnE7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c193aWxkZmlyZS5jCmluZGV4IGQ5MmNkYzcuLjE3Yzg1YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c193aWxkZmlyZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c193aWxkZmlyZS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faW5pdAotd2lsZGZpcmVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit3aWxkZmlyZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgY2hhciBpcnFfdGFiWzhdWzVdIF9faW5pdGRhdGEgPSB7CiAJCS8qSU5UICAgIElOVEEgICBJTlRCICAgSU5UQyAgIElOVEQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwppbmRleCBiOWMyOGYzLi42YWNlYTFmIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCkBAIC0zNjAsNyArMzYwLDcgQEAKIAkucXVhZCBzeXNfbmV3dW5hbWUKIAkucXVhZCBzeXNfbmFub3NsZWVwCQkJLyogMzQwICovCiAJLnF1YWQgc3lzX21yZW1hcAotCS5xdWFkIHN5c19uZnNzZXJ2Y3RsCisJLnF1YWQgc3lzX25pX3N5c2NhbGwJCQkvKiBvbGQgbmZzc2VydmN0bCAqLwogCS5xdWFkIHN5c19zZXRyZXN1aWQKIAkucXVhZCBzeXNfZ2V0cmVzdWlkCiAJLnF1YWQgc3lzX3BjaWNvbmZpZ19yZWFkCQkvKiAzNDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDJjNzFhOGYuLjMyNjk1NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTk1LDggKzE5NSw3IEBACiAJICBUaGUgYmFzZSBhZGRyZXNzIG9mIGV4Y2VwdGlvbiB2ZWN0b3JzLgogCiBjb25maWcgQVJNX1BBVENIX1BIWVNfVklSVAotCWJvb2wgIlBhdGNoIHBoeXNpY2FsIHRvIHZpcnR1YWwgdHJhbnNsYXRpb25zIGF0IHJ1bnRpbWUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJQYXRjaCBwaHlzaWNhbCB0byB2aXJ0dWFsIHRyYW5zbGF0aW9ucyBhdCBydW50aW1lIgogCWRlcGVuZHMgb24gIVhJUF9LRVJORUwgJiYgTU1VCiAJZGVwZW5kcyBvbiAhQVJDSF9SRUFMVklFVyB8fCAhU1BBUlNFTUVNCiAJaGVscApAQCAtMTI3Miw2ICsxMjcxLDE4IEBACiAJICBUaGlzIHdvcmthcm91bmQgZGVmaW5lcyBjcHVfcmVsYXgoKSBhcyBzbXBfbWIoKSwgcHJldmVudGluZyBjb3JyZWN0bHkKIAkgIHdyaXR0ZW4gcG9sbGluZyBsb29wcyBmcm9tIGRlbnlpbmcgdmlzaWJpbGl0eSBvZiB1cGRhdGVzIHRvIG1lbW9yeS4KIAorY29uZmlnIEFSTV9FUlJBVEFfMzY0Mjk2CisJYm9vbCAiQVJNIGVycmF0YTogUG9zc2libGUgY2FjaGUgZGF0YSBjb3JydXB0aW9uIHdpdGggaGl0LXVuZGVyLW1pc3MgZW5hYmxlZCIKKwlkZXBlbmRzIG9uIENQVV9WNiAmJiAhU01QCisJaGVscAorCSAgVGhpcyBvcHRpb25zIGVuYWJsZXMgdGhlIHdvcmthcm91bmQgZm9yIHRoZSAzNjQyOTYgQVJNMTEzNgorCSAgcjBwMiBlcnJhdHVtIChwb3NzaWJsZSBjYWNoZSBkYXRhIGNvcnJ1cHRpb24gd2l0aAorCSAgaGl0LXVuZGVyLW1pc3MgZW5hYmxlZCkuIEl0IHNldHMgdGhlIHVuZG9jdW1lbnRlZCBiaXQgMzEgaW4KKwkgIHRoZSBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlciBhbmQgdGhlIEZJIGJpdCBpbiB0aGUgY29udHJvbAorCSAgcmVnaXN0ZXIsIHRodXMgZGlzYWJsaW5nIGhpdC11bmRlci1taXNzIHdpdGhvdXQgcHV0dGluZyB0aGUKKwkgIHByb2Nlc3NvciBpbnRvIGZ1bGwgbG93IGludGVycnVwdCBsYXRlbmN5IG1vZGUuIEFSTTExTVBDb3JlCisJICBpcyBub3QgYWZmZWN0ZWQuCisKIGVuZG1lbnUKIAogc291cmNlICJhcmNoL2FybS9jb21tb24vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYwppbmRleCBiNmY2MWQ5Li42NzJhZTk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbW1jaWYtc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21tY2lmLXNoNzM3Mi5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAogCS8qIERpc2FibGUgY2xvY2sgdG8gTU1DIGhhcmR3YXJlIGJsb2NrICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSAmICgxIDw8IDEyKSwgU01TVFBDUjMpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTTVNUUENSMykgfCAoMSA8PCAxMiksIFNNU1RQQ1IzKTsKIAogCW1tY191cGRhdGVfcHJvZ3Jlc3MoTU1DX1BST0dSRVNTX0RPTkUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3NkaGktc2g3MzcyLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvc2RoaS1zaDczNzIuYwppbmRleCBkNDAzYThiLi5kMjc5Mjk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvc2RoaS1zaDczNzIuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvc2RoaS1zaDczNzIuYwpAQCAtODUsNyArODUsNyBAQAogCQlnb3RvIGVycjsKIAogICAgICAgICAvKiBEaXNhYmxlIGNsb2NrIHRvIFNESEkxIGhhcmR3YXJlIGJsb2NrICovCi0gICAgICAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTTVNUUENSMykgJiAoMSA8PCAxMyksIFNNU1RQQ1IzKTsKKyAgICAgICAgX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSB8ICgxIDw8IDEzKSwgU01TVFBDUjMpOwogCiAJbW1jX3VwZGF0ZV9wcm9ncmVzcyhNTUNfUFJPR1JFU1NfRE9ORSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYyBiL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYwppbmRleCAxNGFkNjJlLi5hNzkzNGJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2l0ODE1Mi5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIH0KIAogLyogbWFwcGluZyBmb3Igb24tY2hpcCBkZXZpY2VzICovCi1pbnQgX19pbml0IGl0ODE1Ml9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IGl0ODE1Ml9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lURSkgJiYKIAkgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSVRFXzgxNTIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKaW5kZXggMTZiZDQ4MC4uOTlhNmVkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApAQCAtNDUsOCArNDUsMTMgQEAKICNkZWZpbmUgTDJYMF9DTEVBTl9JTlZfTElORV9QQQkJMHg3RjAKICNkZWZpbmUgTDJYMF9DTEVBTl9JTlZfTElORV9JRFgJCTB4N0Y4CiAjZGVmaW5lIEwyWDBfQ0xFQU5fSU5WX1dBWQkJMHg3RkMKLSNkZWZpbmUgTDJYMF9MT0NLRE9XTl9XQVlfRAkJMHg5MDAKLSNkZWZpbmUgTDJYMF9MT0NLRE9XTl9XQVlfSQkJMHg5MDQKKy8qCisgKiBUaGUgbG9ja2Rvd24gcmVnaXN0ZXJzIHJlcGVhdCA4IHRpbWVzIGZvciBMMzEwLCB0aGUgTDIxMCBoYXMgb25seSBvbmUKKyAqIEQgYW5kIG9uZSBJIGxvY2tkb3duIHJlZ2lzdGVyIGF0IDB4MDkwMCBhbmQgMHgwOTA0LgorICovCisjZGVmaW5lIEwyWDBfTE9DS0RPV05fV0FZX0RfQkFTRQkweDkwMAorI2RlZmluZSBMMlgwX0xPQ0tET1dOX1dBWV9JX0JBU0UJMHg5MDQKKyNkZWZpbmUgTDJYMF9MT0NLRE9XTl9TVFJJREUJCTB4MDgKICNkZWZpbmUgTDJYMF9URVNUX09QRVJBVElPTgkJMHhGMDAKICNkZWZpbmUgTDJYMF9MSU5FX0RBVEEJCQkweEYxMAogI2RlZmluZSBMMlgwX0xJTkVfVEFHCQkJMHhGMzAKQEAgLTY0LDcgKzY5LDcgQEAKICNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9NQVNLCQkJMHhjMDAwMGZmZgogI2RlZmluZSBMMlgwX0FVWF9DVFJMX0FTU09DSUFUSVZJVFlfU0hJRlQJMTYKICNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9XQVlfU0laRV9TSElGVAkJMTcKLSNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9XQVlfU0laRV9NQVNLCQkoMHgzIDw8IDE3KQorI2RlZmluZSBMMlgwX0FVWF9DVFJMX1dBWV9TSVpFX01BU0sJCSgweDcgPDwgMTcpCiAjZGVmaW5lIEwyWDBfQVVYX0NUUkxfU0hBUkVfT1ZFUlJJREVfU0hJRlQJMjIKICNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9OU19MT0NLRE9XTl9TSElGVAkJMjYKICNkZWZpbmUgTDJYMF9BVVhfQ1RSTF9OU19JTlRfQ1RSTF9TSElGVAkJMjcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2l0ODE1Mi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaXQ4MTUyLmgKaW5kZXggYjJmOTVjNy4uYjNmZWEzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaXQ4MTUyLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaXQ4MTUyLmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBleHRlcm4gdm9pZCBpdDgxNTJfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CiBleHRlcm4gdm9pZCBpdDgxNTJfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gaW50IGl0ODE1Ml9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworZXh0ZXJuIGludCBpdDgxNTJfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKIGV4dGVybiBpbnQgaXQ4MTUyX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cyk7CiBleHRlcm4gc3RydWN0IHBjaV9idXMgKml0ODE1Ml9wY2lfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaAppbmRleCAxNjMzMGJkLi4xODZlZmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAl2b2lkCQkoKnByZWluaXQpKHZvaWQpOwogCXZvaWQJCSgqcG9zdGluaXQpKHZvaWQpOwogCXU4CQkoKnN3aXp6bGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4ICpwaW4pOwotCWludAkJKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworCWludAkJKCptYXBfaXJxKShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOwogfTsKIAogLyoKQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJCQkJLyogQnJpZGdlIHN3aXp6bGluZwkJCSovCiAJdTgJCSgqc3dpenpsZSkoc3RydWN0IHBjaV9kZXYgKiwgdTggKik7CiAJCQkJCS8qIElSUSBtYXBwaW5nCQkJCSovCi0JaW50CQkoKm1hcF9pcnEpKHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCk7CisJaW50CQkoKm1hcF9pcnEpKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCk7CiAJc3RydWN0IGh3X3BjaQkqaHc7CiAJdm9pZAkJKnByaXZhdGVfZGF0YTsJLyogcGxhdGZvcm0gY29udHJvbGxlciBwcml2YXRlIGRhdGEJKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCmluZGV4IDY3YzcwYTMuLmI3ZTgyYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BtdS5oCkBAIC00MSw3ICs0MSw3IEBACiAgKiBlbmNvZGVkIGVycm9yIG9uIGZhaWx1cmUuCiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKLXJlc2VydmVfcG11KGVudW0gYXJtX3BtdV90eXBlIGRldmljZSk7CityZXNlcnZlX3BtdShlbnVtIGFybV9wbXVfdHlwZSB0eXBlKTsKIAogLyoqCiAgKiByZWxlYXNlX3BtdSgpIC0gUmVsaW5xdWlzaCBjb250cm9sIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycwpAQCAtNjIsMjYgKzYyLDI2IEBACiAgKiB0aGUgYWN0dWFsIGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uLgogICovCiBleHRlcm4gaW50Ci1pbml0X3BtdShlbnVtIGFybV9wbXVfdHlwZSBkZXZpY2UpOworaW5pdF9wbXUoZW51bSBhcm1fcG11X3R5cGUgdHlwZSk7CiAKICNlbHNlIC8qIENPTkZJR19DUFVfSEFTX1BNVSAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqCi1yZXNlcnZlX3BtdShlbnVtIGFybV9wbXVfdHlwZSBkZXZpY2UpCityZXNlcnZlX3BtdShlbnVtIGFybV9wbXVfdHlwZSB0eXBlKQogewogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotcmVsZWFzZV9wbXUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3JlbGVhc2VfcG11KGVudW0gYXJtX3BtdV90eXBlIHR5cGUpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pbml0X3BtdShlbnVtIGFybV9wbXVfdHlwZSBkZXZpY2UpCitpbml0X3BtdShlbnVtIGFybV9wbXVfdHlwZSB0eXBlKQogewogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwppbmRleCBhY2NhMzVhLi5hZWVmOTYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYwpAQCAtMTEyLDkgKzExMiw2IEBACiBFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfOCk7CiAjZW5kaWYKIAotCS8qIGNyeXB0byBoYXNoICovCi1FWFBPUlRfU1lNQk9MKHNoYV90cmFuc2Zvcm0pOwotCiAJLyogZ2NjIGxpYiBmdW5jdGlvbnMgKi8KIEVYUE9SVF9TWU1CT0woX19hc2hsZGkzKTsKIEVYUE9SVF9TWU1CT0woX19hc2hyZGkzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwppbmRleCBlNGVlMDUwLi5kNmRmMzU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCkBAIC00NzYsNyArNDc2LDcgQEAKIC8qCiAgKiBNYXAgYSBzbG90L3BpbiB0byBhbiBJUlEuCiAgKi8KLXN0YXRpYyBpbnQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBkZXYtPnN5c2RhdGE7CiAJaW50IGlycSA9IC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwppbmRleCA4MGY3ODk2Li45OTQzZTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiB2bTg2ICovCiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiB3YXMgc3lzX3F1ZXJ5X21vZHVsZSAqLwogCQlDQUxMKHN5c19wb2xsKQotCQlDQUxMKHN5c19uZnNzZXJ2Y3RsKQorCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogd2FzIG5mc3NlcnZjdGwgKi8KIC8qIDE3MCAqLwlDQUxMKHN5c19zZXRyZXNnaWQxNikKIAkJQ0FMTChzeXNfZ2V0cmVzZ2lkMTYpCiAJCUNBTEwoc3lzX3ByY3RsKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TIGIvYXJjaC9hcm0va2VybmVsL2l3bW14dC5TCmluZGV4IDdmYTNiYjAuLmEwODc4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pd21teHQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaXdtbXh0LlMKQEAgLTE5NSwxMCArMTk1LDEwIEBACiAKIAlAIGVuYWJsZSBhY2Nlc3MgdG8gQ1AwIGFuZCBDUDEKIAlYU0MobXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDApCi0JWFNDKG9ycglyNCwgcjQsICMweGYpCisJWFNDKG9ycglyNCwgcjQsICMweDMpCiAJWFNDKG1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwKQogCVBKNChtcmMgcDE1LCAwLCByNCwgYzEsIGMwLCAyKQotCVBKNChvcnIJcjQsIHI0LCAjMHgzKQorCVBKNChvcnIJcjQsIHI0LCAjMHhmKQogCVBKNChtY3IJcDE1LCAwLCByNCwgYzEsIGMwLCAyKQogCiAJbW92CXIwLCAjMAkJCQlAIG5vdGhpbmcgdG8gbG9hZApAQCAtMzEzLDcgKzMxMyw3IEBACiAJdGVxCXIyLCByMwkJCQlAIG5leHQgdGFzayBvd25zIGl0PwogCW1vdm5lCXBjLCBscgkJCQlAIG5vOiBsZWF2ZSBDb25jYW4gZGlzYWJsZWQKIAotMToJQCBmbGlwIENvbmFuIGFjY2VzcworMToJQCBmbGlwIENvbmNhbiBhY2Nlc3MKIAlYU0MoZW9yCXIxLCByMSwgIzB4MykKIAlYU0MobWNyCXAxNSwgMCwgcjEsIGMxNSwgYzEsIDApCiAJUEo0KGVvciByMSwgcjEsICMweGYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMDViMzc3Ni4uY2MyMDIwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzIzLDcgKzMyMywxMSBAQAogI2VuZGlmCiAJcyA9IGZpbmRfbW9kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAiLmFsdC5zbXAuaW5pdCIpOwogCWlmIChzICYmICFpc19zbXAoKSkKKyNpZmRlZiBDT05GSUdfU01QX09OX1VQCiAJCWZpeHVwX3NtcCgodm9pZCAqKXMtPnNoX2FkZHIsIHMtPnNoX3NpemUpOworI2Vsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BtdS5jIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCmluZGV4IDJiNzA3MDkuLmM1MzQ3NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcG11LmMKQEAgLTMxLDcgKzMxLDcgQEAKIHsKIAlpZiAodHlwZSA8IDAgfHwgdHlwZSA+PSBBUk1fTlVNX1BNVV9ERVZJQ0VTKSB7CiAJCXByX3dhcm5pbmcoInJlY2VpdmVkIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IGZvciB1bmtub3duICIKLQkJCQkiZGV2aWNlICVkXG4iLCB0eXBlKTsKKwkJCQkiUE1VIGRldmljZSB0eXBlICVkXG4iLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTIsMTcgKzExMiwxNyBAQAogZGV2aWNlX2luaXRjYWxsKHJlZ2lzdGVyX3BtdV9kcml2ZXIpOwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKLXJlc2VydmVfcG11KGVudW0gYXJtX3BtdV90eXBlIGRldmljZSkKK3Jlc2VydmVfcG11KGVudW0gYXJtX3BtdV90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAotCWlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soZGV2aWNlLCAmcG11X2xvY2spKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayh0eXBlLCAmcG11X2xvY2spKSB7CiAJCXBkZXYgPSBFUlJfUFRSKC1FQlVTWSk7Ci0JfSBlbHNlIGlmIChwbXVfZGV2aWNlc1tkZXZpY2VdID09IE5VTEwpIHsKLQkJY2xlYXJfYml0X3VubG9jayhkZXZpY2UsICZwbXVfbG9jayk7CisJfSBlbHNlIGlmIChwbXVfZGV2aWNlc1t0eXBlXSA9PSBOVUxMKSB7CisJCWNsZWFyX2JpdF91bmxvY2sodHlwZSwgJnBtdV9sb2NrKTsKIAkJcGRldiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJfSBlbHNlIHsKLQkJcGRldiA9IHBtdV9kZXZpY2VzW2RldmljZV07CisJCXBkZXYgPSBwbXVfZGV2aWNlc1t0eXBlXTsKIAl9CiAKIAlyZXR1cm4gcGRldjsKQEAgLTEzMCwxMSArMTMwLDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX3BtdSk7CiAKIGludAotcmVsZWFzZV9wbXUoZW51bSBhcm1fcG11X3R5cGUgZGV2aWNlKQorcmVsZWFzZV9wbXUoZW51bSBhcm1fcG11X3R5cGUgdHlwZSkKIHsKLQlpZiAoV0FSTl9PTighcG11X2RldmljZXNbZGV2aWNlXSkpCisJaWYgKFdBUk5fT04oIXBtdV9kZXZpY2VzW3R5cGVdKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY2xlYXJfYml0X3VubG9jayhkZXZpY2UsICZwbXVfbG9jayk7CisJY2xlYXJfYml0X3VubG9jayh0eXBlLCAmcG11X2xvY2spOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVsZWFzZV9wbXUpOwpAQCAtMTgyLDE3ICsxODIsMTcgQEAKIH0KIAogaW50Ci1pbml0X3BtdShlbnVtIGFybV9wbXVfdHlwZSBkZXZpY2UpCitpbml0X3BtdShlbnVtIGFybV9wbXVfdHlwZSB0eXBlKQogewogCWludCBlcnIgPSAwOwogCi0Jc3dpdGNoIChkZXZpY2UpIHsKKwlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFSTV9QTVVfREVWSUNFX0NQVToKIAkJZXJyID0gaW5pdF9jcHVfcG11KCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX3dhcm5pbmcoImF0dGVtcHQgdG8gaW5pdGlhbGlzZSB1bmtub3duIGRldmljZSAlZFxuIiwKLQkJCQlkZXZpY2UpOworCQlwcl93YXJuaW5nKCJhdHRlbXB0IHRvIGluaXRpYWxpc2UgUE1VIG9mIHVua25vd24gIgorCQkJICAgInR5cGUgJWRcbiIsIHR5cGUpOwogCQllcnIgPSAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWUxZTU0MS4uMWEzNDdmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CkBAIC0xOTYsNyArMTk3LDggQEAKIAkJCQljcHVfcmVsYXgoKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RvcF9jcml0aWNhbF90aW1pbmdzKCk7Ci0JCQkJcG1faWRsZSgpOworCQkJCWlmIChjcHVpZGxlX2lkbGVfY2FsbCgpKQorCQkJCQlwbV9pZGxlKCk7CiAJCQkJc3RhcnRfY3JpdGljYWxfdGltaW5ncygpOwogCQkJCS8qCiAJCQkJICogVGhpcyB3aWxsIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZCAtIHBtX2lkbGUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvYXJtL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCA5Y2Y0Y2JmLi5kMGNkZWRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCkBAIC01Nyw3ICs1Nyw4IEBACiAJbW92IHIwLCMwCiAJbGRyIHIxLGtleGVjX21hY2hfdHlwZQogCWxkciByMixrZXhlY19ib290X2F0YWdzCi0JbW92IHBjLGxyCisgQVJNKAltb3YgcGMsIGxyCSkKKyBUSFVNQigJYnggbHIJCSkKIAogCS5hbGlnbgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IDcwYmNhNjQuLmU1MTRjNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0yODAsMTggKzI4MCwxOSBAQAogCWlmIChhcmNoID49IENQVV9BUkNIX0FSTXY2KSB7CiAJCWlmICgoY2FjaGV0eXBlICYgKDcgPDwgMjkpKSA9PSA0IDw8IDI5KSB7CiAJCQkvKiBBUk12NyByZWdpc3RlciBmb3JtYXQgKi8KKwkJCWFyY2ggPSBDUFVfQVJDSF9BUk12NzsKIAkJCWNhY2hlaWQgPSBDQUNIRUlEX1ZJUFRfTk9OQUxJQVNJTkc7CiAJCQlpZiAoKGNhY2hldHlwZSAmICgzIDw8IDE0KSkgPT0gMSA8PCAxNCkKIAkJCQljYWNoZWlkIHw9IENBQ0hFSURfQVNJRF9UQUdHRUQ7Ci0JCQllbHNlIGlmIChjcHVfaGFzX2FsaWFzaW5nX2ljYWNoZShDUFVfQVJDSF9BUk12NykpCi0JCQkJY2FjaGVpZCB8PSBDQUNIRUlEX1ZJUFRfSV9BTElBU0lORzsKLQkJfSBlbHNlIGlmIChjYWNoZXR5cGUgJiAoMSA8PCAyMykpIHsKLQkJCWNhY2hlaWQgPSBDQUNIRUlEX1ZJUFRfQUxJQVNJTkc7CiAJCX0gZWxzZSB7Ci0JCQljYWNoZWlkID0gQ0FDSEVJRF9WSVBUX05PTkFMSUFTSU5HOwotCQkJaWYgKGNwdV9oYXNfYWxpYXNpbmdfaWNhY2hlKENQVV9BUkNIX0FSTXY2KSkKLQkJCQljYWNoZWlkIHw9IENBQ0hFSURfVklQVF9JX0FMSUFTSU5HOworCQkJYXJjaCA9IENQVV9BUkNIX0FSTXY2OworCQkJaWYgKGNhY2hldHlwZSAmICgxIDw8IDIzKSkKKwkJCQljYWNoZWlkID0gQ0FDSEVJRF9WSVBUX0FMSUFTSU5HOworCQkJZWxzZQorCQkJCWNhY2hlaWQgPSBDQUNIRUlEX1ZJUFRfTk9OQUxJQVNJTkc7CiAJCX0KKwkJaWYgKGNwdV9oYXNfYWxpYXNpbmdfaWNhY2hlKGFyY2gpKQorCQkJY2FjaGVpZCB8PSBDQUNIRUlEX1ZJUFRfSV9BTElBU0lORzsKIAl9IGVsc2UgewogCQljYWNoZWlkID0gQ0FDSEVJRF9WSVZUOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IDJjMjc3ZDQuLjAxYzE4NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMTM3LDggKzEzNyw4IEBACiAJY2xrLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmYsIGNsayk7CiAJY2xrLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgY2xrKTsKIAorCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjbGspOworCiAJLyogTWFrZSBzdXJlIG91ciBsb2NhbCBpbnRlcnJ1cHQgY29udHJvbGxlciBoYXMgdGhpcyBlbmFibGVkICovCiAJZ2ljX2VuYWJsZV9wcGkoY2xrLT5pcnEpOwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvTWFrZWZpbGUgYi9hcmNoL2FybS9saWIvTWFrZWZpbGUKaW5kZXggNTlmZjQyZC4uY2Y3M2E3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogCQkgICBzdHJjaHIubyBzdHJyY2hyLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCSAgIHRlc3RjaGFuZ2ViaXQubyB0ZXN0Y2xlYXJiaXQubyB0ZXN0c2V0Yml0Lm8gICAgICAgIFwKIAkJICAgYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8gbXVsZGkzLm8gICAgICAgICAgICAgXAotCQkgICB1Y21wZGkyLm8gbGliMWZ1bmNzLm8gZGl2NjQubyBzaGExLm8gICAgICAgICAgICAgICBcCisJCSAgIHVjbXBkaTIubyBsaWIxZnVuY3MubyBkaXY2NC5vICAgICAgICAgICAgICAgICAgICAgIFwKIAkJICAgaW8tcmVhZHNiLm8gaW8td3JpdGVzYi5vIGlvLXJlYWRzbC5vIGlvLXdyaXRlc2wubwogCiBtbXUteQk6PSBjbGVhcl91c2VyLm8gY29weV9wYWdlLm8gZ2V0dXNlci5vIHB1dHVzZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3NoYTEuUyBiL2FyY2gvYXJtL2xpYi9zaGExLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMGVkYjguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbGliL3NoYTEuUworKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvYXJtL2xpYi9zaGExLlMKLSAqCi0gKiAgU0hBIHRyYW5zZm9ybSBvcHRpbWl6ZWQgZm9yIEFSTQotICoKLSAqICBDb3B5cmlnaHQ6CShDKSAyMDA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+Ci0gKiAgQ3JlYXRlZDoJU2VwdGVtYmVyIDE3LCAyMDA1Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBjb2RlIGlzIGxpbnV4L2xpYi9zaGExLmMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0JLnRleHQKLQotCi0vKgotICogdm9pZCBzaGFfdHJhbnNmb3JtKF9fdTMyICpkaWdlc3QsIGNvbnN0IGNoYXIgKmluLCBfX3UzMiAqVykKLSAqCi0gKiBOb3RlOiB0aGUgImluIiBwdHIgbWF5IGJlIHVuYWxpZ25lZC4KLSAqLwotCi1FTlRSWShzaGFfdHJhbnNmb3JtKQotCi0Jc3RtZmQJc3AhLCB7cjQgLSByOCwgbHJ9Ci0KLQlAIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCUAgICAgICAgICBXW2ldID0gYmUzMl90b19jcHUoaW5baV0pOwotCi0jaWZkZWYgX19BUk1FQl9fCi0JbW92CXI0LCByMAotCW1vdglyMCwgcjIKLQltb3YJcjIsICM2NAotCWJsCW1lbWNweQotCW1vdglyMiwgcjAKLQltb3YJcjAsIHI0Ci0jZWxzZQotCW1vdglyMywgcjIKLQltb3YJbHIsICMxNgotMToJbGRyYglyNCwgW3IxXSwgIzEKLQlsZHJiCXI1LCBbcjFdLCAjMQotCWxkcmIJcjYsIFtyMV0sICMxCi0JbGRyYglyNywgW3IxXSwgIzEKLQlzdWJzCWxyLCBsciwgIzEKLQlvcnIJcjUsIHI1LCByNCwgbHNsICM4Ci0Jb3JyCXI2LCByNiwgcjUsIGxzbCAjOAotCW9ycglyNywgcjcsIHI2LCBsc2wgIzgKLQlzdHIJcjcsIFtyM10sICM0Ci0JYm5lCTFiCi0jZW5kaWYKLQotCUAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCi0JQCAgICAgICAgIFdbaSsxNl0gPSByb3IoV1tpKzEzXSBeIFdbaSs4XSBeIFdbaSsyXSBeIFdbaV0sIDMxKTsKLQotCXN1YglyMywgcjIsICM0Ci0JbW92CWxyLCAjNjQKLTI6CWxkcglyNCwgW3IzLCAjNF0hCi0Jc3VicwlsciwgbHIsICMxCi0JbGRyCXI1LCBbcjMsICM4XQotCWxkcglyNiwgW3IzLCAjMzJdCi0JbGRyCXI3LCBbcjMsICM1Ml0KLQllb3IJcjQsIHI0LCByNQotCWVvcglyNCwgcjQsIHI2Ci0JZW9yCXI0LCByNCwgcjcKLQltb3YJcjQsIHI0LCByb3IgIzMxCi0Jc3RyCXI0LCBbcjMsICM2NF0KLQlibmUJMmIKLQotCS8qCi0JICogVGhlIFNIQSBmdW5jdGlvbnMgYXJlOgotCSAqCi0JICogZjEoQixDLEQpID0gKEQgXiAoQiAmIChDIF4gRCkpKQotCSAqIGYyKEIsQyxEKSA9IChCIF4gQyBeIEQpCi0JICogZjMoQixDLEQpID0gKChCICYgQykgfCAoRCAmIChCIHwgQykpKQotCSAqCi0JICogVGhlbiB0aGUgc3ViLWJsb2NrcyBhcmUgcHJvY2Vzc2VkIGFzIGZvbGxvd3M6Ci0JICoKLQkgKiBBJyA9IHJvcihBLCAyNykgKyBmKEIsQyxEKSArIEUgKyBLICsgKlcrKwotCSAqIEInID0gQQotCSAqIEMnID0gcm9yKEIsIDIpCi0JICogRCcgPSBDCi0JICogRScgPSBECi0JICoKLQkgKiBXZSB0aGVyZWZvcmUgdW5yb2xsIGVhY2ggbG9vcCA1IHRpbWVzIHRvIGF2b2lkIHJlZ2lzdGVyIHNodWZmbGluZy4KLQkgKiBBbHNvIHRoZSByb3IgZm9yIEMgKGFuZCBhbHNvIEQgYW5kIEUgd2hpY2ggYXJlIHN1Y2Nlc3NpdmVseWRlcml2ZWQKLQkgKiBmcm9tIGl0KSBpcyBhcHBsaWVkIGluIHBsYWNlIHRvIGN1dCBvbiBhbiBhZGRpdGlvbmFsIG1vdiBpbnNuIGZvcgotCSAqIGVhY2ggcm91bmQuCi0JICovCi0KLQkubWFjcm8Jc2hhX2YxLCBBLCBCLCBDLCBELCBFCi0JbGRyCXIzLCBbcjJdLCAjNAotCWVvcglpcCwgXEMsIFxECi0JYWRkCVxFLCByMSwgXEUsIHJvciAjMgotCWFuZAlpcCwgXEIsIGlwLCByb3IgIzIKLQlhZGQJXEUsIFxFLCBcQSwgcm9yICMyNwotCWVvcglpcCwgaXAsIFxELCByb3IgIzIKLQlhZGQJXEUsIFxFLCByMwotCWFkZAlcRSwgXEUsIGlwCi0JLmVuZG0KLQotCS5tYWNybwlzaGFfZjIsIEEsIEIsIEMsIEQsIEUKLQlsZHIJcjMsIFtyMl0sICM0Ci0JYWRkCVxFLCByMSwgXEUsIHJvciAjMgotCWVvcglpcCwgXEIsIFxDLCByb3IgIzIKLQlhZGQJXEUsIFxFLCBcQSwgcm9yICMyNwotCWVvcglpcCwgaXAsIFxELCByb3IgIzIKLQlhZGQJXEUsIFxFLCByMwotCWFkZAlcRSwgXEUsIGlwCi0JLmVuZG0KLQotCS5tYWNybwlzaGFfZjMsIEEsIEIsIEMsIEQsIEUKLQlsZHIJcjMsIFtyMl0sICM0Ci0JYWRkCVxFLCByMSwgXEUsIHJvciAjMgotCW9ycglpcCwgXEIsIFxDLCByb3IgIzIKLQlhZGQJXEUsIFxFLCBcQSwgcm9yICMyNwotCWFuZAlpcCwgaXAsIFxELCByb3IgIzIKLQlhZGQJXEUsIFxFLCByMwotCWFuZAlyMywgXEIsIFxDLCByb3IgIzIKLQlvcnIJaXAsIGlwLCByMwotCWFkZAlcRSwgXEUsIGlwCi0JLmVuZG0KLQotCWxkbWlhCXIwLCB7cjQgLSByOH0KLQotCW1vdglsciwgIzQKLQlsZHIJcjEsIC5MX3NoYV9LICsgMAotCi0JLyogYWRqdXN0IGluaXRpYWwgdmFsdWVzICovCi0JbW92CXI2LCByNiwgcm9yICMzMAotCW1vdglyNywgcjcsIHJvciAjMzAKLQltb3YJcjgsIHI4LCByb3IgIzMwCi0KLTM6CXN1YnMJbHIsIGxyLCAjMQotCXNoYV9mMQlyNCwgcjUsIHI2LCByNywgcjgKLQlzaGFfZjEJcjgsIHI0LCByNSwgcjYsIHI3Ci0Jc2hhX2YxCXI3LCByOCwgcjQsIHI1LCByNgotCXNoYV9mMQlyNiwgcjcsIHI4LCByNCwgcjUKLQlzaGFfZjEJcjUsIHI2LCByNywgcjgsIHI0Ci0JYm5lCTNiCi0KLQlsZHIJcjEsIC5MX3NoYV9LICsgNAotCW1vdglsciwgIzQKLQotNDoJc3VicwlsciwgbHIsICMxCi0Jc2hhX2YyCXI0LCByNSwgcjYsIHI3LCByOAotCXNoYV9mMglyOCwgcjQsIHI1LCByNiwgcjcKLQlzaGFfZjIJcjcsIHI4LCByNCwgcjUsIHI2Ci0Jc2hhX2YyCXI2LCByNywgcjgsIHI0LCByNQotCXNoYV9mMglyNSwgcjYsIHI3LCByOCwgcjQKLQlibmUJNGIKLQotCWxkcglyMSwgLkxfc2hhX0sgKyA4Ci0JbW92CWxyLCAjNAotCi01OglzdWJzCWxyLCBsciwgIzEKLQlzaGFfZjMJcjQsIHI1LCByNiwgcjcsIHI4Ci0Jc2hhX2YzCXI4LCByNCwgcjUsIHI2LCByNwotCXNoYV9mMwlyNywgcjgsIHI0LCByNSwgcjYKLQlzaGFfZjMJcjYsIHI3LCByOCwgcjQsIHI1Ci0Jc2hhX2YzCXI1LCByNiwgcjcsIHI4LCByNAotCWJuZQk1YgotCi0JbGRyCXIxLCAuTF9zaGFfSyArIDEyCi0JbW92CWxyLCAjNAotCi02OglzdWJzCWxyLCBsciwgIzEKLQlzaGFfZjIJcjQsIHI1LCByNiwgcjcsIHI4Ci0Jc2hhX2YyCXI4LCByNCwgcjUsIHI2LCByNwotCXNoYV9mMglyNywgcjgsIHI0LCByNSwgcjYKLQlzaGFfZjIJcjYsIHI3LCByOCwgcjQsIHI1Ci0Jc2hhX2YyCXI1LCByNiwgcjcsIHI4LCByNAotCWJuZQk2YgotCi0JbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCBpcCwgbHJ9Ci0JYWRkCXI0LCByMSwgcjQKLQlhZGQJcjUsIHIyLCByNQotCWFkZAlyNiwgcjMsIHI2LCByb3IgIzIKLQlhZGQJcjcsIGlwLCByNywgcm9yICMyCi0JYWRkCXI4LCBsciwgcjgsIHJvciAjMgotCXN0bWlhCXIwLCB7cjQgLSByOH0KLQotCWxkbWZkCXNwISwge3I0IC0gcjgsIHBjfQotCi1FTkRQUk9DKHNoYV90cmFuc2Zvcm0pCi0KLQkuYWxpZ24JMgotLkxfc2hhX0s6Ci0JLndvcmQJMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNgotCi0KLS8qCi0gKiB2b2lkIHNoYV9pbml0KF9fdTMyICpidWYpCi0gKi8KLQotCS5hbGlnbgkyCi0uTF9zaGFfaW5pdGlhbF9kaWdlc3Q6Ci0JLndvcmQJMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMAotCi1FTlRSWShzaGFfaW5pdCkKLQotCXN0cglsciwgW3NwLCAjLTRdIQotCWFkcglyMSwgLkxfc2hhX2luaXRpYWxfZGlnZXN0Ci0JbGRtaWEJcjEsIHtyMSwgcjIsIHIzLCBpcCwgbHJ9Ci0Jc3RtaWEJcjAsIHtyMSwgcjIsIHIzLCBpcCwgbHJ9Ci0JbGRyCXBjLCBbc3BdLCAjNAotCi1FTkRQUk9DKHNoYV9pbml0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCBkNTIyYjQ3Li42YzhlM2I1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJQ0xLREVWX0NPTl9ERVZfSUQoInNwaV9jbGsiLCAiYXRtZWxfc3BpLjEiLCAmc3BpMV9jbGspLAogCUNMS0RFVl9DT05fREVWX0lEKCJ0MF9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMwX2NsayksCiAJQ0xLREVWX0NPTl9ERVZfSUQoInQxX2NsayIsICJhdG1lbF90Y2IuMCIsICZ0YzFfY2xrKSwKLQlDTEtERVZfQ09OX0RFVl9JRCgidDJfY2xrIiwgImF0bWVsX3RjYi4wIiwgJnRjMV9jbGspLAorCUNMS0RFVl9DT05fREVWX0lEKCJ0Ml9jbGsiLCAiYXRtZWxfdGNiLjAiLCAmdGMyX2NsayksCiAJQ0xLREVWX0NPTl9ERVZfSUQoInBjbGsiLCAic3NjLjAiLCAmc3NjMF9jbGspLAogCUNMS0RFVl9DT05fREVWX0lEKCJwY2xrIiwgInNzYy4xIiwgJnNzYzFfY2xrKSwKIAlDTEtERVZfQ09OX0RFVl9JRCgicGNsayIsICJzc2MuMiIsICZzc2MyX2NsayksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggNmJkODNlZC4uZDg3YmZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtOCw3ICs4LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNThiYjAzYS4uNGYxNmM5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBkZThlYWQ5Li5hOTFiNjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWNuczN4eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtOCw3ICs4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CiAKICNkZWZpbmUgQU1CQV9VQVJUX0RSKGJhc2UpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGJhc2UpICsgMHgwMCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L3BjaWUuYwppbmRleCBhNGVjMDgwLi4wZjhmY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wY2llLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlyZXR1cm4gJmNuczN4eHhfcGNpZVtyb290LT5kb21haW5dOwogfQogCi1zdGF0aWMgc3RydWN0IGNuczN4eHhfcGNpZSAqcGRldl90b19jbnNwY2koc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBzdHJ1Y3QgY25zM3h4eF9wY2llICpwZGV2X3RvX2Nuc3BjaShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXJldHVybiBzeXNkYXRhX3RvX2Nuc3BjaShkZXYtPnN5c2RhdGEpOwogfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAJcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmY25zM3h4eF9wY2llX29wcywgc3lzKTsKIH0KIAotc3RhdGljIGludCBjbnMzeHh4X3BjaWVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IGNuczN4eHhfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdHJ1Y3QgY25zM3h4eF9wY2llICpjbnNwY2kgPSBwZGV2X3RvX2Nuc3BjaShkZXYpOwogCWludCBpcnEgPSBjbnNwY2ktPmlycXNbc2xvdF07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKaW5kZXggYmQ1Mzk0NS4uMDA4ZDUxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYwpAQCAtMTE1LDYgKzExNSwzMiBAQAogCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX01URAorc3RhdGljIHZvaWQgZGE4NTBfZXZtX20yNXA4MF9ub3RpZnlfYWRkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCWNoYXIgKm1hY19hZGRyID0gZGF2aW5jaV9zb2NfaW5mby5lbWFjX3BkYXRhLT5tYWNfYWRkcjsKKwlzaXplX3QgcmV0bGVuOworCisJaWYgKCFzdHJjbXAobXRkLT5uYW1lLCAiTUFDLUFkZHJlc3MiKSkgeworCQltdGQtPnJlYWQobXRkLCAwLCBFVEhfQUxFTiwgJnJldGxlbiwgbWFjX2FkZHIpOworCQlpZiAocmV0bGVuID09IEVUSF9BTEVOKQorCQkJcHJfaW5mbygiUmVhZCBNQUMgYWRkciBmcm9tIFNQSSBGbGFzaDogJXBNXG4iLAorCQkJCW1hY19hZGRyKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX25vdGlmaWVyIGRhODUwZXZtX3NwaV9ub3RpZmllciA9IHsKKwkuYWRkCT0gZGE4NTBfZXZtX20yNXA4MF9ub3RpZnlfYWRkLAorfTsKKworc3RhdGljIHZvaWQgZGE4NTBfZXZtX3NldHVwX21hY19hZGRyKHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3VzZXIoJmRhODUwZXZtX3NwaV9ub3RpZmllcik7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgZGE4NTBfZXZtX3NldHVwX21hY19hZGRyKHZvaWQpIHsgfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBkYTg1MF9ldm1fbm9yZmxhc2hfcGFydGl0aW9uW10gPSB7CiAJewogCQkubmFtZSAgICAgICAgICAgPSAiYm9vdGxvYWRlcnMgKyBlbnYiLApAQCAtMTI0NCw2ICsxMjcwLDggQEAKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogc2F0YSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOworCisJZGE4NTBfZXZtX3NldHVwX21hY19hZGRyKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9wc2MuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvcHNjLmgKaW5kZXggNDdmZDBiYy4uZmE1OWMwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9wc2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3BzYy5oCkBAIC0yNDMsNyArMjQzLDcgQEAKICNkZWZpbmUgUFNDX1NUQVRFX0RJU0FCTEUJMgogI2RlZmluZSBQU0NfU1RBVEVfRU5BQkxFCTMKIAotI2RlZmluZSBNRFNUQVRfU1RBVEVfTUFTSwkweDFmCisjZGVmaW5lIE1EU1RBVF9TVEFURV9NQVNLCTB4M2YKICNkZWZpbmUgTURDVExfRk9SQ0UJCUJJVCgzMSkKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9zbGVlcC5TCmluZGV4IGZiNWU3MmIuLjVmMWUwNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9zbGVlcC5TCkBAIC0yMTcsNyArMjE3LDExIEBACiBFTkRQUk9DKGRhdmluY2lfZGRyX3BzY19jb25maWcpCiAKIENBQ0hFX0ZMVVNIOgotCS53b3JkCWFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorI2lmZGVmIENPTkZJR19DUFVfVjYKKwkud29yZAl2Nl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorI2Vsc2UKKwkud29yZCAgIGFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAorI2VuZGlmCiAKIEVOVFJZKGRhdmluY2lfY3B1X3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIGRhdmluY2lfY3B1X3N1c3BlbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9wY2llLmMgYi9hcmNoL2FybS9tYWNoLWRvdmUvcGNpZS5jCmluZGV4IGMyZjFjNDcuLmFhMmIzYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL3BjaWUuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJcmV0dXJuIGJ1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZG92ZV9wY2llX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgZG92ZV9wY2llX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0cnVjdCBwY2llX3BvcnQgKnBwID0gYnVzX3RvX3BvcnQoZGV2LT5idXMtPm51bWJlcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC90czcyeHguaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC90czcyeHguaAppbmRleCAwZWFiZWM2Li5mMTM5N2ExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdHM3Mnh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oCkBAIC02LDcgKzYsNyBAQAogICogVFM3Mnh4IG1lbW9yeSBtYXA6CiAgKgogICogdmlydAkJcGh5cwkJc2l6ZQotICogZmViZmYwMDAJMjIwMDAwMDAJNEsJbW9kZWwgbnVtYmVyIHJlZ2lzdGVyCisgKiBmZWJmZjAwMAkyMjAwMDAwMAk0Swltb2RlbCBudW1iZXIgcmVnaXN0ZXIgKGJpdHMgMC0yKQogICogZmViZmUwMDAJMjI0MDAwMDAJNEsJb3B0aW9ucyByZWdpc3RlcgogICogZmViZmQwMDAJMjI4MDAwMDAJNEsJb3B0aW9ucyByZWdpc3RlciAjMgogICogZmViZjkwMDAJMTA4MDAwMDAJNEsJVFMtNTYyMCBSVEMgaW5kZXggcmVnaXN0ZXIKQEAgLTIwLDYgKzIwLDkgQEAKICNkZWZpbmUgVFM3MlhYX01PREVMX1RTNzIwMAkJMHgwMAogI2RlZmluZSBUUzcyWFhfTU9ERUxfVFM3MjUwCQkweDAxCiAjZGVmaW5lIFRTNzJYWF9NT0RFTF9UUzcyNjAJCTB4MDIKKyNkZWZpbmUgVFM3MlhYX01PREVMX1RTNzMwMAkJMHgwMworI2RlZmluZSBUUzcyWFhfTU9ERUxfVFM3NDAwCQkweDA0CisjZGVmaW5lIFRTNzJYWF9NT0RFTF9NQVNLCQkweDA3CiAKIAogI2RlZmluZSBUUzcyWFhfT1BUSU9OU19QSFlTX0JBU0UJMHgyMjQwMDAwMApAQCAtNTEsMTkgKzU0LDM0IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKK3N0YXRpYyBpbmxpbmUgaW50IHRzNzJ4eF9tb2RlbCh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkYihUUzcyWFhfTU9ERUxfVklSVF9CQVNFKSAmIFRTNzJYWF9NT0RFTF9NQVNLOworfQorCiBzdGF0aWMgaW5saW5lIGludCBib2FyZF9pc190czcyMDAodm9pZCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGIoVFM3MlhYX01PREVMX1ZJUlRfQkFTRSkgPT0gVFM3MlhYX01PREVMX1RTNzIwMDsKKwlyZXR1cm4gdHM3Mnh4X21vZGVsKCkgPT0gVFM3MlhYX01PREVMX1RTNzIwMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYm9hcmRfaXNfdHM3MjUwKHZvaWQpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWRiKFRTNzJYWF9NT0RFTF9WSVJUX0JBU0UpID09IFRTNzJYWF9NT0RFTF9UUzcyNTA7CisJcmV0dXJuIHRzNzJ4eF9tb2RlbCgpID09IFRTNzJYWF9NT0RFTF9UUzcyNTA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJvYXJkX2lzX3RzNzI2MCh2b2lkKQogewotCXJldHVybiBfX3Jhd19yZWFkYihUUzcyWFhfTU9ERUxfVklSVF9CQVNFKSA9PSBUUzcyWFhfTU9ERUxfVFM3MjYwOworCXJldHVybiB0czcyeHhfbW9kZWwoKSA9PSBUUzcyWFhfTU9ERUxfVFM3MjYwOworfQorCitzdGF0aWMgaW5saW5lIGludCBib2FyZF9pc190czczMDAodm9pZCkKK3sKKwlyZXR1cm4gdHM3Mnh4X21vZGVsKCkgID09IFRTNzJYWF9NT0RFTF9UUzczMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJvYXJkX2lzX3RzNzQwMCh2b2lkKQoreworCXJldHVybiB0czcyeHhfbW9kZWwoKSA9PSBUUzcyWFhfTU9ERUxfVFM3NDAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19tYXgxOTdfaW5zdGFsbGVkKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jbG9jay5jCmluZGV4IDg1MWRlYTAuLjE1NjFiMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jbG9jay5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJLmN0cmxiaXQJPSAoMSA8PCAyMSksCiAJfSwgewogCQkubmFtZQkJPSAiYWM5NyIsCi0JCS5pZAkJPSAtMSwKKwkJLmRldm5hbWUJPSAic2Ftc3VuZy1hYzk3IiwKIAkJLmVuYWJsZQkJPSBleHlub3M0X2Nsa19pcF9wZXJpbF9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDI3KSwKIAl9LCB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKaW5kZXggMmQ4YTQwYy4uNzQ2ZDZmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYwpAQCAtMjQsMTIgKzI0LDEzIEBACiAjaW5jbHVkZSA8cGxhdC9leHlub3M0Lmg+CiAjaW5jbHVkZSA8cGxhdC9hZGMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2ZiLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2ZpbWMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L3Jlc2V0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXBtdS5oPgogCiBleHRlcm4gaW50IGNvbWJpbmVyX2luaXQodW5zaWduZWQgaW50IGNvbWJpbmVyX25yLCB2b2lkIF9faW9tZW0gKmJhc2UsCiAJCQkgdW5zaWduZWQgaW50IGlycV9zdGFydCk7CkBAIC0xMjgsNiArMTI5LDExIEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCitzdGF0aWMgdm9pZCBleHlub3M0X3N3X3Jlc2V0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKDB4MSwgUzVQX1NXUkVTRVQpOworfQorCiAvKgogICogZXh5bm9zNF9tYXBfaW8KICAqCkBAIC0yNDEsNSArMjQ3LDggQEAKIAkvKiBzZXQgaWRsZSBmdW5jdGlvbiAqLwogCXBtX2lkbGUgPSBleHlub3M0X2lkbGU7CiAKKwkvKiBzZXQgc3dfcmVzZXQgZnVuY3Rpb24gKi8KKwlzNXBfcmVzZXRfaG9vayA9IGV4eW5vczRfc3dfcmVzZXQ7CisKIAlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZleHlub3M0X3N5c2Rldik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDkzNGQyYTQuLmY4OTUyZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC04MCw5ICs4MCw4IEBACiAjZGVmaW5lIElSUV9IU01NQzMJCUlSUV9TUEkoNzYpCiAjZGVmaW5lIElSUV9EV01DSQkJSVJRX1NQSSg3NykKIAotI2RlZmluZSBJUlFfTUlQSUNTSTAJCUlSUV9TUEkoNzgpCi0KLSNkZWZpbmUgSVJRX01JUElDU0kxCQlJUlFfU1BJKDgwKQorI2RlZmluZSBJUlFfTUlQSV9DU0lTMAkJSVJRX1NQSSg3OCkKKyNkZWZpbmUgSVJRX01JUElfQ1NJUzEJCUlSUV9TUEkoODApCiAKICNkZWZpbmUgSVJRX09ORU5BTkRfQVVESQlJUlFfU1BJKDgyKQogI2RlZmluZSBJUlFfUk9UQVRPUgkJSVJRX1NQSSg4MykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1wbXUuaAppbmRleCBmYTQ5YmJiLi5jZGY5YjQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtcG11LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXBtdS5oCkBAIC0yOSw2ICsyOSw4IEBACiAjZGVmaW5lIFM1UF9VU0VfU1RBTkRCWV9XRkUxCQkJKDEgPDwgMjUpCiAjZGVmaW5lIFM1UF9VU0VfTUFTSwkJCQkoKDB4MyA8PCAxNikgfCAoMHgzIDw8IDI0KSkKIAorI2RlZmluZSBTNVBfU1dSRVNFVAkJCQlTNVBfUE1VUkVHKDB4MDQwMCkKKwogI2RlZmluZSBTNVBfV0FLRVVQX1NUQVQJCQkJUzVQX1BNVVJFRygweDA2MDApCiAjZGVmaW5lIFM1UF9FSU5UX1dBS0VVUF9NQVNLCQkJUzVQX1BNVVJFRygweDA2MDQpCiAjZGVmaW5lIFM1UF9XQUtFVVBfTUFTSwkJCQlTNVBfUE1VUkVHKDB4MDYwOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pcnEtZWludC5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2lycS1laW50LmMKaW5kZXggOWQ4N2QyYS4uYmFkYjhjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2lycS1laW50LmMKQEAgLTIzLDYgKzIzLDggQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKwogc3RhdGljIERFRklORV9TUElOTE9DSyhlaW50X2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGVpbnQwXzE1X2RhdGFbMTZdOwpAQCAtMTg0LDggKzE4NiwxMSBAQAogCiBzdGF0aWMgdm9pZCBleHlub3M0X2lycV9kZW11eF9laW50MTZfMzEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9nZXRfY2hpcChpcnEpOworCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOwogCWV4eW5vczRfaXJxX2RlbXV4X2VpbnQoSVJRX0VJTlQoMTYpKTsKIAlleHlub3M0X2lycV9kZW11eF9laW50KElSUV9FSU5UKDI0KSk7CisJY2hhaW5lZF9pcnFfZXhpdChjaGlwLCBkZXNjKTsKIH0KIAogc3RhdGljIHZvaWQgZXh5bm9zNF9pcnFfZWludDBfMTUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQpAQCAtMTkzLDYgKzE5OCw3IEBACiAJdTMyICppcnFfZGF0YSA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2dldF9jaGlwKGlycSk7CiAKKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAljaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOwogCiAJaWYgKGNoaXAtPmlycV9hY2spCkBAIC0yMDEsNiArMjA3LDcgQEAKIAlnZW5lcmljX2hhbmRsZV9pcnEoKmlycV9kYXRhKTsKIAogCWNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCiBpbnQgX19pbml0IGV4eW5vczRfaW5pdF9pcnFfZWludCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9tYWNoLXVuaXZlcnNhbF9jMjEwLmMKaW5kZXggMGUyODBkMS4uYjNiNWQ4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC11bml2ZXJzYWxfYzIxMC5jCkBAIC03OSw3ICs3OSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgbWF4ODk1Ml9jb25zdW1lciA9Ci0JUkVHVUxBVE9SX1NVUFBMWSgidmRkYXJtIiwgTlVMTCk7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkX2FybSIsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IG1heDg5NTJfcGxhdGZvcm1fZGF0YSB1bml2ZXJzYWxfbWF4ODk1Ml9wZGF0YSBfX2luaXRkYXRhID0gewogCS5ncGlvX3ZpZDAJPSBFWFlOT1M0X0dQWDAoMyksCkBAIC0xMDUsNyArMTA1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBscDM5NzRfYnVjazFfY29uc3VtZXIgPQotCVJFR1VMQVRPUl9TVVBQTFkoInZkZGludCIsIE5VTEwpOworCVJFR1VMQVRPUl9TVVBQTFkoInZkZF9pbnQiLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGxwMzk3NF9idWNrMl9jb25zdW1lciA9CiAJUkVHVUxBVE9SX1NVUFBMWSgidmRkZzNkIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtdXNiLXBoeS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXVzYi1waHkuYwppbmRleCAwODgzYzFiLi4zOWFjYTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvc2V0dXAtdXNiLXBoeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9zZXR1cC11c2ItcGh5LmMKQEAgLTgyLDcgKzgyLDcgQEAKIAogCXJzdGNvbiAmPSB+KEhPU1RfTElOS19QT1JUX1NXUlNUX01BU0sgfCBQSFkxX1NXUlNUX01BU0spOwogCXdyaXRlbChyc3Rjb24sIEVYWU5PUzRfUlNUQ09OKTsKLQl1ZGVsYXkoNTApOworCXVkZWxheSg4MCk7CiAKIAljbGtfZGlzYWJsZShvdGdfY2xrKTsKIAljbGtfcHV0KG90Z19jbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvS2NvbmZpZwppbmRleCBkYzI2ZmZmLi5jOGU3YWZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvS2NvbmZpZwpAQCAtNjIsNiArNjIsNyBAQAogY29uZmlnIEFSQ0hfTkVUV0lOREVSCiAJYm9vbCAiTmV0V2luZGVyIgogCXNlbGVjdCBDTEtTUkNfSTgyNTMKKwlzZWxlY3QgQ0xLRVZUX0k4MjUzCiAJc2VsZWN0IEZPT1RCUklER0VfSE9TVAogCXNlbGVjdCBJU0EKIAlzZWxlY3QgSVNBX0RNQQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1wY2kuYwppbmRleCBhZTNlMWM4Li4zMjMyMWY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1wY2kuYwpAQCAtMTYsNyArMTYsNyBAQAogLyogY2F0cyBob3N0LXNwZWNpZmljIHN0dWZmICovCiBzdGF0aWMgaW50IGlycW1hcF9jYXRzW10gX19pbml0ZGF0YSA9IHsgSVJRX1BDSSwgSVJRX0lOMCwgSVJRX0lOMSwgSVJRX0lOMyB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjYXRzX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgY2F0c19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpZiAoZGV2LT5pcnEgPj0gMjU1KQogCQlyZXR1cm4gLTE7CS8qIG5vdCBhIHZhbGlkIGludGVycnVwdC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCmluZGV4IDEzMzFmZmYuLjE4YzMyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDx2aWRlby92Z2EuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LXBjaS5jCmluZGV4IGU1YWI1YmQuLjUxMWM2NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LXBjaS5jCkBAIC0xNSw3ICsxNSw3IEBACiAKIHN0YXRpYyBpbnQgaXJxbWFwX2Vic2EyODVbXSBfX2luaXRkYXRhID0geyBJUlFfSU4zLCBJUlFfSU4xLCBJUlFfSU4wLCBJUlFfUENJIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWlmIChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTlRBUSAmJgogCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NPTlRBUV84MkM2OTMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1wY2kuYwppbmRleCBlMjYzZDZkLi42MjE4NzYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItcGNpLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqIFdlIG5vdyB1c2UgdGhlIHNsb3QgSUQgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIGlkZW50aWZpZXJzIHRvIHNlbGVjdAogICogd2hpY2ggaW50ZXJydXB0IGlzIHJvdXRlZCB3aGVyZS4KICAqLwotc3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN3aXRjaCAoc2xvdCkgewogCWNhc2UgMDogIC8qIGhvc3QgYnJpZGdlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvcGVyc29uYWwtcGNpLmMKaW5kZXggZDVmY2E5NS4uYWViNjUxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL3BlcnNvbmFsLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9wZXJzb25hbC1wY2kuYwpAQCAtMTgsNyArMTgsOCBAQAogCUlSUV9ET09SQkVMTEhPU1QsIElSUV9ETUExLCBJUlFfRE1BMiwgSVJRX1BDSQogfTsKIAotc3RhdGljIGludCBfX2luaXQgcGVyc29uYWxfc2VydmVyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgcGVyc29uYWxfc2VydmVyX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJdW5zaWduZWQgY2hhciBsaW5lOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvY2xvY2staW14MjUuYwppbmRleCAwZmM3YmE1Li5lNjNlMjM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9jbG9jay1pbXgyNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L2Nsb2NrLWlteDI1LmMKQEAgLTMzMSw2ICszMzEsOSBAQAogCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUk1fQkFTRSsweDY0KSB8ICgxIDw8IDcpIHwgKDEgPDwgMCksCiAJCQlDUk1fQkFTRSArIDB4NjQpOwogCisJLyogQ2xvY2sgc291cmNlIGZvciBncHQgaXMgYWhiX2RpdiAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUk1fQkFTRSsweDY0KSAmIH4oMSA8PCA1KSwgQ1JNX0JBU0UgKyAweDY0KTsKKwogCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBNWDI1X0lPX0FERFJFU1MoTVgyNV9HUFQxX0JBU0VfQUREUiksIDU0KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgyNy5jCmluZGV4IDg3ODg3YWMuLmY4NTFmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWNwdWlteDI3LmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCS5pbml0ID0gZXVrcmVhX2NwdWlteDI3X3RpbWVyX2luaXQsCiB9OwogCi1NQUNISU5FX1NUQVJUKENQVUlNWDI3LCAiRVVLUkVBIENQVUlNWDI3IikKK01BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDI3LCAiRVVLUkVBIENQVUlNWDI3IikKIAkuYm9vdF9wYXJhbXMgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyA9IG14MjdfbWFwX2lvLAogCS5pbml0X2Vhcmx5ID0gaW14MjdfaW5pdF9lYXJseSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MzUuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MzUuYwppbmRleCBmMzlhNDc4Yi4uNGJkMDgzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1jcHVpbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtY3B1aW14MzUuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJLmluaXQJPSBldWtyZWFfY3B1aW14MzVfdGltZXJfaW5pdCwKIH07CiAKLU1BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDM1LCAiRXVrcmVhIENQVUlNWDM1IikKK01BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDM1U0QsICJFdWtyZWEgQ1BVSU1YMzUiKQogCS8qIE1haW50YWluZXI6IEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSAqLwogCS5ib290X3BhcmFtcyA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXgzNV9tYXBfaW8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWV1a3JlYV9jcHVpbXgyNS5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1ldWtyZWFfY3B1aW14MjUuYwppbmRleCBkYTM2ZGE1Li4yNDQyZDVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWV1a3JlYV9jcHVpbXgyNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtZXVrcmVhX2NwdWlteDI1LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCS5pbml0ICAgPSBldWtyZWFfY3B1aW14MjVfdGltZXJfaW5pdCwKIH07CiAKLU1BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDI1LCAiRXVrcmVhIENQVUlNWDI1IikKK01BQ0hJTkVfU1RBUlQoRVVLUkVBX0NQVUlNWDI1U0QsICJFdWtyZWEgQ1BVSU1YMjUiKQogCS8qIE1haW50YWluZXI6IEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSAqLwogCS5ib290X3BhcmFtcyA9IE1YMjVfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvID0gbXgyNV9tYXBfaW8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3X3Zpc3N0cmltX20xMC5jIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYwppbmRleCA2NzA3ZGUwYS4uNjc3OGY4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXgyN192aXNzdHJpbV9tMTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDI3X3Zpc3N0cmltX20xMC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYzMjBhaWMzMng0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgpAQCAtMTk2LDYgKzE5NywxNyBAQAogCS5pbnZlcnQgPSAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBhaWMzMng0X3BkYXRhIHZpc3N0cmltX20xMF9haWMzMng0X3BkYXRhID0geworCS5wb3dlcl9jZmcgPSBBSUMzMlg0X1BXUl9NSUNCSUFTXzIwNzVfTERPSU4gfAorCQkgICAgIEFJQzMyWDRfUFdSX0FWRERfRFZERF9XRUFLX0RJU0FCTEUgfAorCQkgICAgIEFJQzMyWDRfUFdSX0FJQzMyWDRfTERPX0VOQUJMRSB8CisJCSAgICAgQUlDMzJYNF9QV1JfQ01NT0RFX0xET0lOX1JBTkdFXzE4XzM2IHwKKwkJICAgICBBSUMzMlg0X1BXUl9DTU1PREVfSFBfTERPSU5fUE9XRVJFRCwKKwkubWljcGdhX3JvdXRpbmcgPSBBSUMzMlg0X01JQ1BHQV9ST1VURV9MTUlDX0lOMlJfMTBLIHwKKwkJCSBBSUMzMlg0X01JQ1BHQV9ST1VURV9STUlDX0lOMUxfMTBLLAorCS5zd2FwZGFjcyA9IGZhbHNlLAorfTsKKwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyB2aXNzdHJpbV9tMTBfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTU1IiwgMHgyMCksCkBAIC0yMDMsNiArMjE1LDcgQEAKIAl9LAogCXsKIAkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzMyeDQiLCAweDE4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdmlzc3RyaW1fbTEwX2FpYzMyeDRfcGRhdGEsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxYWRzLmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFhZHMuYwppbmRleCAwY2U0OTQ3Li4yOWNhODkwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFhZHMuYwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14Y19pbml0X2kyYyh2b2lkKQogewogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG14MzFhZHNfaTJjMV9kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUobXgzMWFkc19pMmMxX2RldmljZXMpKTsKQEAgLTQ4Niw3ICs0ODYsNyBAQAogCU1YMzFfUElOX1NUWEQ1X19TVFhENSwKIH07CiAKLXN0YXRpYyB2b2lkIG14Y19pbml0X2F1ZGlvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2luaXRfYXVkaW8odm9pZCkKIHsKIAlpbXgzMV9hZGRfaW14X3NzaSgwLCBOVUxMKTsKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhzc2lfcGlucywgQVJSQVlfU0laRShzc2lfcGlucyksICJzc2kiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MzFsaWxseS5jCmluZGV4IDc1MDM2OGQuLjEyNjkxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgzMWxpbGx5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDMxbGlsbHkuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKIH07CiAKLXN0YXRpYyB2b2lkIGxpbGx5MTEzMV91c2JfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGxpbGx5MTEzMV91c2JfaW5pdCh2b2lkKQogewogCWlteDMxX2FkZF9teGNfZWhjaV9ocygxLCAmdXNiaDFfcGRhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwppbmRleCAyZmJiZGQ1Li5mY2YwYWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKQEAgLTMzNywxNSArMzM3LDE1IEBACiBzdGF0aWMgdm9pZCBpbnRlZ3JhdG9yX2Nsb2Nrc291cmNlX2luaXQodTMyIGtoeikKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopVElNRVIyX1ZBX0JBU0U7Ci0JdTMyIGN0cmwgPSBUSU1FUl9DVFJMX0VOQUJMRTsKKwl1MzIgY3RybCA9IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQzsKIAogCWlmIChraHogPj0gMTUwMCkgewogCQlraHogLz0gMTY7Ci0JCWN0cmwgPSBUSU1FUl9DVFJMX0RJVjE2OworCQljdHJsIHw9IFRJTUVSX0NUUkxfRElWMTY7CiAJfQogCi0Jd3JpdGVsKGN0cmwsIGJhc2UgKyBUSU1FUl9DVFJMKTsKIAl3cml0ZWwoMHhmZmZmLCBiYXNlICsgVElNRVJfTE9BRCk7CisJd3JpdGVsKGN0cmwsIGJhc2UgKyBUSU1FUl9DVFJMKTsKIAogCWNsb2Nrc291cmNlX21taW9faW5pdChiYXNlICsgVElNRVJfVkFMVUUsICJ0aW1lcjIiLAogCQlraHogKiAxMDAwLCAyMDAsIDE2LCBjbG9ja3NvdXJjZV9tbWlvX3JlYWRsX2Rvd24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaS5jCmluZGV4IDJmZGI5NTQuLjUyMGI2YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpLmMKQEAgLTk1LDcgKzk1LDcgQEAKICAqIG1hcCB0aGUgc3BlY2lmaWVkIGRldmljZS9zbG90L3BpbiB0byBhbiBJUlEuICBUaGlzIHdvcmtzIG91dCBzdWNoCiAgKiB0aGF0IHNsb3QgOSBwaW4gMSBpcyBJTlQwLCBwaW4gMiBpcyBJTlQxLCBhbmQgc2xvdCAxMCBwaW4gMSBpcyBJTlQxLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlZ3JhdG9yX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaW50ZWdyYXRvcl9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaW50bnIgPSAoKHNsb3QgLSA5KSArIChwaW4gLSAxKSkgJiAzOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MG1jLmMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaXE4MTM0MG1jLmMKaW5kZXggOWI1YTYzZi4uMjNkZmFmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lxODEzNDBtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pcTgxMzQwbWMuYwpAQCAtMzAsNyArMzAsNyBAQAogZXh0ZXJuIGludCBpbml0X2F0dTsgLyogRmxhZyB0byBzZWxlY3Qgd2hpY2ggQVRVKHMpIHRvIGluaXRpYWxpemUgLyBkaXNhYmxlICovCiAKIHN0YXRpYyBpbnQgX19pbml0Ci1pcTgxMzQwbWNfcGNpeF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCitpcTgxMzQwbWNfcGNpeF9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCiB7CiAJc3dpdGNoIChpZHNlbCkgewogCWNhc2UgMToKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9wY2kuYwppbmRleCAwNjkwYjFkLi4yNTFjNDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L3BjaS5jCkBAIC0zODgsNyArMzg4LDcgQEAKIH0KIAogc3RhdGljIGludAotaW9wMTN4eF9wY2llX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggaWRzZWwsIHU4IHBpbikKK2lvcDEzeHhfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCiB7CiAJV0FSTl9PTihpZHNlbCAhPSAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZW03MjEwLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9lbTcyMTAuYwppbmRleCA3NzlmOTI0Li42Y2JmZmJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9lbTcyMTAuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9lbTcyMTAuYwpAQCAtODEsNyArODEsNyBAQAogI2RlZmluZSBJTlRECUlSUV9JT1AzMlhfWElOVDMKIAogc3RhdGljIGludCBfX2luaXQKLWVtNzIxMF9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitlbTcyMTBfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtdWzRdID0gewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMKaW5kZXggYzZiNmY5Yy4uY2VlZjVkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCkBAIC03Nyw3ICs3Nyw3IEBACiAjZGVmaW5lIElOVEQJSVJRX0lPUDMyWF9YSU5UMwogCiBzdGF0aWMgaW50IF9faW5pdAotZ2xhbnRhbmtfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorZ2xhbnRhbmtfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtdWzRdID0gewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCmluZGV4IGZkZTk2MmMuLjNhNjI1MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTMxMjQ0LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogICogRVA4MDIxOS9JUTMxMjQ0IFBDSS4KICAqLwogc3RhdGljIGludCBfX2luaXQKLWVwODAyMTlfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorZXA4MDIxOV9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiB9OwogCiBzdGF0aWMgaW50IF9faW5pdAotaXEzMTI0NF9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpcTMxMjQ0X3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKaW5kZXggM2E5NTk1MC4uMzViN2U2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxODAzMjEuYwpAQCAtNzEsNyArNzEsNyBAQAogICogSVE4MDMyMSBQQ0kuCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0Ci1pcTgwMzIxX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2lxODAzMjFfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jCmluZGV4IDYyNmFhMzcuLjFhMzc0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYwpAQCAtNzgsNyArNzgsNyBAQAogICogTjIxMDAgUENJLgogICovCiBzdGF0aWMgaW50IF9faW5pdAotbjIxMDBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorbjIxMDBfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzEuYwppbmRleCBjNTY1ZjhkLi42MzdjMDI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jCkBAIC01NCw3ICs1NCw3IEBACiAgKiBJUTgwMzMxIFBDSS4KICAqLwogc3RhdGljIGludCBfX2luaXQKLWlxODAzMzFfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoraXE4MDMzMV9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMi5jCmluZGV4IDM2YTllZmIuLjkwYTA0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMKQEAgLTU0LDcgKzU0LDcgQEAKICAqIElRODAzMzIgUENJLgogICovCiBzdGF0aWMgaW50IF9faW5pdAotaXE4MDMzMl9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpcTgwMzMyX3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2VucDI2MTEuYwppbmRleCA4ODY2M2FiLi42MmM2MGFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvZW5wMjYxMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9lbnAyNjExLmMKQEAgLTE0OCw3ICsxNDgsOCBAQAogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJmVucDI2MTFfcGNpX29wcywgc3lzKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZW5wMjYxMV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBlbnAyNjExX3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsCisJdTggcGluKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKaW5kZXggZGZmZmMxZS4uNWJhZDFhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyNDAwLmMKQEAgLTc4LDcgKzc4LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXhkcDI0MDBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaXhkcDI0MDBfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJaWYgKGl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgewogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDI4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCmluZGV4IGNkNGM5YmMuLjNkM2NlZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMjgwMC5jCkBAIC0xNjEsNyArMTYxLDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXhkcDI4MDBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaXhkcDI4MDBfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJaWYgKGl4ZHAyeDAwX21hc3Rlcl9ucHUoKSkgewogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCmluZGV4IDg0ODM1YjIuLmJlMmEyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCkBAIC0yNTIsNyArMjUyLDggQEAKIAogI2RlZmluZSBERVZQSU4oZGV2LCBwaW4pICgocGluKSB8ICgoZGV2KSA8PCAzKSkKIAotc3RhdGljIGludCBfX2luaXQgaXhkcDJ4MDFfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaXhkcDJ4MDFfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJdTggYnVzID0gZGV2LT5idXMtPm51bWJlcjsKIAl1MzIgZGV2cGluID0gREVWUElOKFBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBwaW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2l4ZHAyMzUxLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYwppbmRleCA4ZGNiYTE3Li5lYzAyOGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaXhkcDIzNTEuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgKi8KICNkZWZpbmUgREVWUElOKGRldiwgcGluKSAoKHBpbikgfCAoKGRldikgPDwgMykpCiAKLXN0YXRpYyBpbnQgX19pbml0IGl4ZHAyMzUxX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaXhkcDIzNTFfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJdTggYnVzID0gZGV2LT5idXMtPm51bWJlcjsKIAl1MzIgZGV2cGluID0gREVWUElOKFBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBwaW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3JvYWRydW5uZXIuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9yb2FkcnVubmVyLmMKaW5kZXggOGZlMGM2Mi4uODQ0NTUxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L3JvYWRydW5uZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDIzeHgvcm9hZHJ1bm5lci5jCkBAIC01Niw3ICs1Niw4IEBACiAjZGVmaW5lIElOVENfUElOCUlYUDIzWFhfR1BJT19QSU5fMTEKICNkZWZpbmUgSU5URF9QSU4JSVhQMjNYWF9HUElPX1BJTl8xMgogCi1zdGF0aWMgaW50IF9faW5pdCByb2FkcnVubmVyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggaWRzZWwsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHJvYWRydW5uZXJfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBpZHNlbCwKKwl1OCBwaW4pCiB7CiAJc3RhdGljIGludCBwY2lfY2FyZF9zbG90X2lycVtdID0ge0lOVEIsIElOVEMsIElOVEQsIElOVEF9OwogCXN0YXRpYyBpbnQgcG1jX2NhcmRfc2xvdF9pcnFbXSA9IHtJTlRBLCBJTlRCLCBJTlRDLCBJTlREfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2F2aWxhLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtcGNpLmMKaW5kZXggMTYyMDQzZi4uOGZlYTBhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvYXZpbGEtcGNpLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYXZpbGFfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBhdmlsYV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbSVJRX0xJTkVTXSA9IHsKIAkJSVhQNFhYX0dQSU9fSVJRKElOVEEpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY295b3RlLXBjaS5jCmluZGV4IDM3ZmRhN2QuLjcxZjVjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NveW90ZS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb3lvdGUtcGNpLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgY295b3RlX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgY295b3RlX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWlmIChzbG90ID09IFNMT1QwX0RFVklEKQogCQlyZXR1cm4gSVhQNFhYX0dQSU9fSVJRKFNMT1QwX0lOVEEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2RzbWc2MDAtcGNpLmMKaW5kZXggYzc2MTIwMS4uMDUzMjUxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZHNtZzYwMC1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9kc21nNjAwLXBjaS5jCkBAIC00NCw3ICs0NCw3IEBACiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGRzbWc2MDBfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBkc21nNjAwX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtNQVhfREVWXVtJUlFfTElORVNdID0gewogCQl7IElYUDRYWF9HUElPX0lSUShJTlRFKSwgLTEsIC0xIH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9mc2ctcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9mc2ctcGNpLmMKaW5kZXggNDRjY2RlOS4uZDJhYzgwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZnNnLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2ZzZy1wY2kuYwpAQCAtMzgsNyArMzgsNyBAQAogCWl4cDR4eF9wY2lfcHJlaW5pdCgpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBmc2dfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBmc2dfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW0lSUV9MSU5FU10gPSB7CiAJCUlYUDRYWF9HUElPX0lSUShJTlRDKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2dhdGV3YXk3MDAxLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ2F0ZXdheTcwMDEtcGNpLmMKaW5kZXggZmMxMTI0MS4uNzY1ODFmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ2F0ZXdheTcwMDEtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ2F0ZXdheTcwMDEtcGNpLmMKQEAgLTM1LDcgKzM1LDggQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2F0ZXdheTcwMDFfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBnYXRld2F5NzAwMV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsCisJdTggcGluKQogewogCWlmIChzbG90ID09IDEpCiAJCXJldHVybiBJUlFfSVhQNFhYX0dQSU8xMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2dvcmFtb19tbHIuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2dvcmFtb19tbHIuYwppbmRleCA1ZjAwYWQyLi43NTQ4ZDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9nb3JhbW9fbWxyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ29yYW1vX21sci5jCkBAIC00NjIsNyArNDYyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGdtbHJfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBnbWxyX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN3aXRjaChzbG90KSB7CiAJY2FzZSBTTE9UX0VUSEE6CXJldHVybiBJWFA0WFhfR1BJT19JUlEoR1BJT19JUlFfRVRIQSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9ndHd4NTcxNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jCmluZGV4IDM4Y2MwNzIuLmQ2OGZjMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXBjaS5jCkBAIC00OSw3ICs0OSw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgZ3R3eDU3MTVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBndHd4NTcxNV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgcmMgPSAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHA0MjUtcGNpLmMKaW5kZXggNThmNDAwNC4uZmZmZDhjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhkcDQyNS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwNDI1LXBjaS5jCkBAIC00Myw3ICs0Myw3IEBACiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGl4ZHA0MjVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBpeGRwNDI1X21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtJUlFfTElORVNdID0gewogCQlJWFA0WFhfR1BJT19JUlEoSU5UQSksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peGRwZzQyNS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCmluZGV4IGU2NGY2ZDAuLjM0ZWZlNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4ZHBnNDI1LXBjaS5jCkBAIC0zMSw3ICszMSw3IEBACiAJaXhwNHh4X3BjaV9wcmVpbml0KCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGl4ZHBnNDI1X21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgaXhkcGc0MjVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaWYgKHNsb3QgPT0gMTIgfHwgc2xvdCA9PSAxMykKIAkJcmV0dXJuIElSUV9JWFA0WFhfR1BJTzc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wY2kuYwppbmRleCA0MjhkMTIwLi41NDM0Y2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtcGNpLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbmFzMTAwZF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IG5hczEwMGRfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW01BWF9ERVZdW0lSUV9MSU5FU10gPSB7CiAJCXsgSVhQNFhYX0dQSU9fSVJRKElOVEEpLCAtMSwgLTEgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKaW5kZXggMmU4NWY3Ni4uYjU3MTYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbnNsdTJfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbSVJRX0xJTkVTXSA9IHsKIAkJSVhQNFhYX0dQSU9fSVJRKElOVEEpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvdnVsY2FuLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvdnVsY2FuLXBjaS5jCmluZGV4IDAzYmRlYzUuLjBiYzNmMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L3Z1bGNhbi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC92dWxjYW4tcGNpLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdnVsY2FuX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgdnVsY2FuX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWlmIChzbG90ID09IDEpCiAJCXJldHVybiBJWFA0WFhfR1BJT19JUlEoSU5UQSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC93ZzMwMnYyLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvd2czMDJ2Mi1wY2kuYwppbmRleCAxN2YzY2Y1Li5mMjdkZmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC93ZzMwMnYyLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L3dnMzAydjItcGNpLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlpeHA0eHhfcGNpX3ByZWluaXQoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgd2czMDJ2Ml9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHdnMzAydjJfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaWYgKHNsb3QgPT0gMSkKIAkJcmV0dXJuIElSUV9JWFA0WFhfR1BJTzg7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCmluZGV4IGJmZWI5YzkuLjc0Yjk5MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcGNpZS5jCkBAIC0yNDUsNyArMjQ1LDggQEAKIAlyZXR1cm4gYnVzOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBraXJrd29vZF9wY2llX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQga2lya3dvb2RfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsCisJdTggcGluKQogewogCXN0cnVjdCBwY2llX3BvcnQgKnBwID0gYnVzX3RvX3BvcnQoZGV2LT5idXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1kc20zMjAuYyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWRzbTMyMC5jCmluZGV4IGFkYTkyYjYuLjEzMzhjYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWRzbTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWRzbTMyMC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludCBkc20zMjBfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBkc20zMjBfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCXN3aXRjaCAoc2xvdCkgewogCWNhc2UgMDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLW1pY3JlbC5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKaW5kZXggYzdhZDA5Yi4uZTJlM2NiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtbWljcmVsLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IG1pY3JlbF9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IG1pY3JlbF9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJcmV0dXJuIEtTODY5NV9JUlFfRVhURVJOMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZGV2aWNlcy5oCmluZGV4IDI3NDRmZWMuLjg1YTNjOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RldmljZXMuaApAQCAtMzAsNyArMzAsNyBAQAogCiBzdHJ1Y3Qga3M4Njk1X3BjaV9jZmcgewogCXNob3J0IG1vZGU7Ci0JaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KTsKKwlpbnQgKCptYXBfaXJxKShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqLCB1OCwgdTgpOwogfTsKIGV4dGVybiBfX2luaXQgdm9pZCBrczg2OTVfaW5pdF9wY2koc3RydWN0IGtzODY5NV9wY2lfY2ZnICopOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9ncGx1Z2QuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2dwbHVnZC5jCmluZGV4IGMwNzBjMjQuLjk4ZTI1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2dwbHVnZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2dwbHVnZC5jCkBAIC0xNiwxNiArMTYsMTggQEAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTE2OC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTE2OC5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLWdwbHVnZC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdwbHVnZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAkvKiBVQVJUMyAqLwotCUdQSU84X1VBUlQzX1NPVVQsCi0JR1BJTzlfVUFSVDNfU0lOLAotCUdQSTFPX1VBUlQzX0NUUywKLQlHUEkxMV9VQVJUM19SVFMsCisJR1BJTzhfVUFSVDNfVFhELAorCUdQSU85X1VBUlQzX1JYRCwKKwlHUElPMU9fVUFSVDNfQ1RTLAorCUdQSU8xMV9VQVJUM19SVFMsCisKKwkvKiBVU0IgT1RHIFBFTiAqLworCUdQSU8xOF9HUElPLAogCiAJLyogTU1DMiAqLwogCUdQSU8yOF9NTUMyX0NNRCwKQEAgLTEwOSw2ICsxMTEsMTIgQEAKIAlHUElPMTA1X0NJMkNfU0RBLAogCUdQSU8xMDZfQ0kyQ19TQ0wsCiAKKwkvKiBTUEkgTk9SIEZsYXNoIG9uIFNTUDIgKi8KKwlHUElPMTA3X1NTUDJfUlhELAorCUdQSU8xMDhfU1NQMl9UWEQsCisJR1BJTzExMF9HUElPLCAgICAgLyogU1BJX0NTbiAqLworCUdQSU8xMTFfU1NQMl9DTEssCisKIAkvKiBTZWxlY3QgSlRBRyAqLwogCUdQSU8xMDlfR1BJTywKIApAQCAtMTU0LDcgKzE2Miw3IEBACiAJCQkJImZyZXF1ZW5jeVxuIik7CiAJfSBlbHNlIHsKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDM1LCAxKTsKLQkJZ3Bpb19mcmVlKDEwNCk7CisJCWdwaW9fZnJlZSgzNSk7CiAJfQogCiAJaWYgKHVubGlrZWx5KGdwaW9fcmVxdWVzdCg4NSwgIkRJU1BfRlJFUV9TRUxfMiIpKSkgewpAQCAtMTYyLDcgKzE3MCw3IEBACiAJCQkJImZyZXF1ZW5jeVxuIik7CiAJfSBlbHNlIHsKIAkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDg1LCAwKTsKLQkJZ3Bpb19mcmVlKDEwNCk7CisJCWdwaW9fZnJlZSg4NSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLWdwbHVnZC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1ncGx1Z2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjZjM4ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLWdwbHVnZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtZ3BsdWdkLmgKLSAqCi0gKiAgIE1GUCBkZWZpbml0aW9ucyB1c2VkIGluIGdwbHVnRAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX01BQ0hfTUZQX0dQTFVHRF9ICi0jZGVmaW5lIF9fTUFDSF9NRlBfR1BMVUdEX0gKLQotI2luY2x1ZGUgPHBsYXQvbWZwLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KLQotLyogVUFSVDMgKi8KLSNkZWZpbmUgR1BJTzhfVUFSVDNfU09VVCAgICAgICBNRlBfQ0ZHKEdQSU84LCBBRjIpCi0jZGVmaW5lIEdQSU85X1VBUlQzX1NJTiAgICAgICAgTUZQX0NGRyhHUElPOSwgQUYyKQotI2RlZmluZSBHUEkxT19VQVJUM19DVFMgICAgICAgIE1GUF9DRkcoR1BJTzEwLCBBRjIpCi0jZGVmaW5lIEdQSTExX1VBUlQzX1JUUyAgICAgICAgTUZQX0NGRyhHUElPMTEsIEFGMikKLQotLyogTU1DMiAqLwotI2RlZmluZQlHUElPMjhfTU1DMl9DTUQJCU1GUF9DRkdfRFJWKEdQSU8yOCwgQUY2LCBGQVNUKQotI2RlZmluZQlHUElPMjlfTU1DMl9DTEsJCU1GUF9DRkdfRFJWKEdQSU8yOSwgQUY2LCBGQVNUKQotI2RlZmluZQlHUElPMzBfTU1DMl9EQVQwCU1GUF9DRkdfRFJWKEdQSU8zMCwgQUY2LCBGQVNUKQotI2RlZmluZQlHUElPMzFfTU1DMl9EQVQxCU1GUF9DRkdfRFJWKEdQSU8zMSwgQUY2LCBGQVNUKQotI2RlZmluZQlHUElPMzJfTU1DMl9EQVQyCU1GUF9DRkdfRFJWKEdQSU8zMiwgQUY2LCBGQVNUKQotI2RlZmluZQlHUElPMzNfTU1DMl9EQVQzCU1GUF9DRkdfRFJWKEdQSU8zMywgQUY2LCBGQVNUKQotCi0vKiBJMlMgKi8KLSN1bmRlZiBHUElPMTE0X0kyU19GUk0KLSN1bmRlZiBHUElPMTE1X0kyU19CQ0xLCi0KLSNkZWZpbmUgR1BJTzExNF9JMlNfRlJNCSAgICAgICAgTUZQX0NGR19EUlYoR1BJTzExNCwgQUYxLCBGQVNUKQotI2RlZmluZSBHUElPMTE1X0kyU19CQ0xLICAgICAgICBNRlBfQ0ZHX0RSVihHUElPMTE1LCBBRjEsIEZBU1QpCi0jZGVmaW5lIEdQSU8xMTZfSTJTX1RYRCAgICAgICAgIE1GUF9DRkdfRFJWKEdQSU8xMTYsIEFGMSwgRkFTVCkKLQotLyogTU1DNCAqLwotI2RlZmluZSBHUElPMTI1X01NQzRfREFUMyAgICAgICBNRlBfQ0ZHX0RSVihHUElPMTI1LCBBRjcsIEZBU1QpCi0jZGVmaW5lIEdQSU8xMjZfTU1DNF9EQVQyICAgICAgIE1GUF9DRkdfRFJWKEdQSU8xMjYsIEFGNywgRkFTVCkKLSNkZWZpbmUgR1BJTzEyN19NTUM0X0RBVDEgICAgICAgTUZQX0NGR19EUlYoR1BJTzEyNywgQUY3LCBGQVNUKQotI2RlZmluZSBHUElPMF8yX01NQzRfREFUMCAgICAgICBNRlBfQ0ZHX0RSVihHUElPMF8yLCBBRjcsIEZBU1QpCi0jZGVmaW5lIEdQSU8xXzJfTU1DNF9DTUQgICAgICAgIE1GUF9DRkdfRFJWKEdQSU8xXzIsIEFGNywgRkFTVCkKLSNkZWZpbmUgR1BJTzJfMl9NTUM0X0NMSyAgICAgICAgTUZQX0NGR19EUlYoR1BJTzJfMiwgQUY3LCBGQVNUKQotCi0vKiBPVEcgR1BJTyAqLwotI2RlZmluZSBHUElPX1VTQl9PVEdfUEVOICAgICAgICAxOAotI2RlZmluZSBHUElPX1VTQl9PSURJUiAgICAgICAgICAyMAotCi0vKiBPdGhlciBHUElPcyBhcmUgMzUsIDg0LCA4NSAqLwotI2VuZGlmIC8qIF9fTUFDSF9NRlBfR1BMVUdEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCmluZGV4IDhjNzgyMzIuLjkyYWFhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaApAQCAtMjAzLDYgKzIwMywxMCBAQAogI2RlZmluZSBHUElPMzNfQ0ZfbkNEMgkJTUZQX0NGRyhHUElPMzMsIEFGMykKIAogLyogVUFSVCAqLworI2RlZmluZSBHUElPOF9VQVJUM19UWEQJCU1GUF9DRkcoR1BJTzgsIEFGMikKKyNkZWZpbmUgR1BJTzlfVUFSVDNfUlhECQlNRlBfQ0ZHKEdQSU85LCBBRjIpCisjZGVmaW5lIEdQSU8xT19VQVJUM19DVFMJTUZQX0NGRyhHUElPMTAsIEFGMikKKyNkZWZpbmUgR1BJTzExX1VBUlQzX1JUUwlNRlBfQ0ZHKEdQSU8xMSwgQUYyKQogI2RlZmluZSBHUElPODhfVUFSVDJfVFhECU1GUF9DRkcoR1BJTzg4LCBBRjIpCiAjZGVmaW5lIEdQSU84OV9VQVJUMl9SWEQJTUZQX0NGRyhHUElPODksIEFGMikKICNkZWZpbmUgR1BJTzEwN19VQVJUMV9UWEQJTUZQX0NGR19EUlYoR1BJTzEwNywgQUYxLCBGQVNUKQpAQCAtMjMyLDYgKzIzNiwyMiBAQAogI2RlZmluZSBHUElPNTNfTU1DMV9DRAkJTUZQX0NGRyhHUElPNTMsIEFGMSkKICNkZWZpbmUgR1BJTzQ2X01NQzFfV1AJCU1GUF9DRkcoR1BJTzQ2LCBBRjEpCiAKKy8qIE1NQzIgKi8KKyNkZWZpbmUJR1BJTzI4X01NQzJfQ01ECQlNRlBfQ0ZHX0RSVihHUElPMjgsIEFGNiwgRkFTVCkKKyNkZWZpbmUJR1BJTzI5X01NQzJfQ0xLCQlNRlBfQ0ZHX0RSVihHUElPMjksIEFGNiwgRkFTVCkKKyNkZWZpbmUJR1BJTzMwX01NQzJfREFUMAlNRlBfQ0ZHX0RSVihHUElPMzAsIEFGNiwgRkFTVCkKKyNkZWZpbmUJR1BJTzMxX01NQzJfREFUMQlNRlBfQ0ZHX0RSVihHUElPMzEsIEFGNiwgRkFTVCkKKyNkZWZpbmUJR1BJTzMyX01NQzJfREFUMglNRlBfQ0ZHX0RSVihHUElPMzIsIEFGNiwgRkFTVCkKKyNkZWZpbmUJR1BJTzMzX01NQzJfREFUMwlNRlBfQ0ZHX0RSVihHUElPMzMsIEFGNiwgRkFTVCkKKworLyogTU1DNCAqLworI2RlZmluZSBHUElPMTI1X01NQzRfREFUMyAgICAgICBNRlBfQ0ZHX0RSVihHUElPMTI1LCBBRjcsIEZBU1QpCisjZGVmaW5lIEdQSU8xMjZfTU1DNF9EQVQyICAgICAgIE1GUF9DRkdfRFJWKEdQSU8xMjYsIEFGNywgRkFTVCkKKyNkZWZpbmUgR1BJTzEyN19NTUM0X0RBVDEgICAgICAgTUZQX0NGR19EUlYoR1BJTzEyNywgQUY3LCBGQVNUKQorI2RlZmluZSBHUElPMF8yX01NQzRfREFUMCAgICAgICBNRlBfQ0ZHX0RSVihHUElPMF8yLCBBRjcsIEZBU1QpCisjZGVmaW5lIEdQSU8xXzJfTU1DNF9DTUQgICAgICAgIE1GUF9DRkdfRFJWKEdQSU8xXzIsIEFGNywgRkFTVCkKKyNkZWZpbmUgR1BJTzJfMl9NTUM0X0NMSyAgICAgICAgTUZQX0NGR19EUlYoR1BJTzJfMiwgQUY3LCBGQVNUKQorCiAvKiBMQ0QgKi8KICNkZWZpbmUgR1BJTzg0X0xDRF9DUwkJTUZQX0NGRyhHUElPODQsIEFGMSkKICNkZWZpbmUgR1BJTzYwX0xDRF9ERDAJCU1GUF9DRkcoR1BJTzYwLCBBRjEpCkBAIC0yNjksMTEgKzI4OSwxMiBAQAogI2RlZmluZSBHUElPMTA2X0NJMkNfU0NMCU1GUF9DRkcoR1BJTzEwNiwgQUYxKQogCiAvKiBJMlMgKi8KLSNkZWZpbmUgR1BJTzExM19JMlNfTUNMSwlNRlBfQ0ZHKEdQSU8xMTMsQUY2KQotI2RlZmluZSBHUElPMTE0X0kyU19GUk0JCU1GUF9DRkcoR1BJTzExNCxBRjEpCi0jZGVmaW5lIEdQSU8xMTVfSTJTX0JDTEsJTUZQX0NGRyhHUElPMTE1LEFGMSkKLSNkZWZpbmUgR1BJTzExNl9JMlNfUlhECQlNRlBfQ0ZHKEdQSU8xMTYsQUYyKQotI2RlZmluZSBHUElPMTE3X0kyU19UWEQJCU1GUF9DRkcoR1BJTzExNyxBRjIpCisjZGVmaW5lIEdQSU8xMTNfSTJTX01DTEsJTUZQX0NGRyhHUElPMTEzLCBBRjYpCisjZGVmaW5lIEdQSU8xMTRfSTJTX0ZSTQkJTUZQX0NGRyhHUElPMTE0LCBBRjEpCisjZGVmaW5lIEdQSU8xMTVfSTJTX0JDTEsJTUZQX0NGRyhHUElPMTE1LCBBRjEpCisjZGVmaW5lIEdQSU8xMTZfSTJTX1JYRAkJTUZQX0NGRyhHUElPMTE2LCBBRjIpCisjZGVmaW5lIEdQSU8xMTZfSTJTX1RYRCAgICAgICAgIE1GUF9DRkcoR1BJTzExNiwgQUYxKQorI2RlZmluZSBHUElPMTE3X0kyU19UWEQJCU1GUF9DRkcoR1BJTzExNywgQUYyKQogCiAvKiBQV00gKi8KICNkZWZpbmUgR1BJTzk2X1BXTTNfT1VUCQlNRlBfQ0ZHKEdQSU85NiwgQUYxKQpAQCAtMzI0LDQgKzM0NSwxMCBAQAogI2RlZmluZSBHUElPMTAxX01JSV9NRElPCU1GUF9DRkcoR1BJTzEwMSwgQUY1KQogI2RlZmluZSBHUElPMTAzX1JYX0RWCQlNRlBfQ0ZHKEdQSU8xMDMsIEFGNSkKIAorLyogU1NQMiAqLworI2RlZmluZSBHUElPMTA3X1NTUDJfUlhECU1GUF9DRkcoR1BJTzEwNywgQUY0KQorI2RlZmluZSBHUElPMTA4X1NTUDJfVFhECU1GUF9DRkcoR1BJTzEwOCwgQUY0KQorI2RlZmluZSBHUElPMTExX1NTUDJfQ0xLCU1GUF9DRkcoR1BJTzExMSwgQUY0KQorI2RlZmluZSBHUElPMTEyX1NTUDJfRlJNCU1GUF9DRkcoR1BJTzExMiwgQUY0KQorCiAjZW5kaWYgLyogX19BU01fTUFDSF9NRlBfUFhBMTY4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYwppbmRleCA5OTgzM2I5Li40ZTkxZWU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCkBAIC01MSwxMiArNTEsMTIgQEAKIHsKIAlpbnQgZGVsYXkgPSAxMDA7CiAKLQlfX3Jhd193cml0ZWwoMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DVldSKDApKTsKKwlfX3Jhd193cml0ZWwoMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DVldSKDEpKTsKIAogCXdoaWxlIChkZWxheS0tKQogCQljcHVfcmVsYXgoKTsKIAotCXJldHVybiBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NWV1IoMCkpOworCXJldHVybiBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NWV1IoMSkpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQpAQCAtNzUsMjggKzc1LDUxIEBACiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYyA9IGRldl9pZDsKIAotCS8qIGRpc2FibGUgYW5kIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLwotCV9fcmF3X3dyaXRlbCgweDAsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUVSKDApKTsKLQlfX3Jhd193cml0ZWwoMHgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lDUigwKSk7CisJLyoKKwkgKiBDbGVhciBwZW5kaW5nIGludGVycnVwdCBzdGF0dXMuCisJICovCisJX19yYXdfd3JpdGVsKDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUNSKDApKTsKKworCS8qCisJICogRGlzYWJsZSB0aW1lciAwLgorCSAqLworCV9fcmF3X3dyaXRlbCgweDAyLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7CisKIAljLT5ldmVudF9oYW5kbGVyKGMpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IHRpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCiAJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyBhbmQgZW5hYmxlICovCisJLyoKKwkgKiBEaXNhYmxlIHRpbWVyIDAuCisJICovCisJX19yYXdfd3JpdGVsKDB4MDIsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsKKworCS8qCisJICogQ2xlYXIgYW5kIGVuYWJsZSB0aW1lciBtYXRjaCAwIGludGVycnVwdC4KKwkgKi8KIAlfX3Jhd193cml0ZWwoMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JQ1IoMCkpOwogCV9fcmF3X3dyaXRlbCgweDAxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lFUigwKSk7CiAKLQluZXh0ID0gdGltZXJfcmVhZCgpICsgZGVsdGE7Ci0JX19yYXdfd3JpdGVsKG5leHQsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfVE5fTU0oMCwgMCkpOworCS8qCisJICogU2V0dXAgbmV3IGNsb2NrZXZlbnQgdGltZXIgdmFsdWUuCisJICovCisJX19yYXdfd3JpdGVsKGRlbHRhIC0gMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9UTl9NTSgwLCAwKSk7CisKKwkvKgorCSAqIEVuYWJsZSB0aW1lciAwLgorCSAqLworCV9fcmF3X3dyaXRlbCgweDAzLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ1LDIzICsxNjgsMjYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCB0aW1lcl9jb25maWcodm9pZCkKIHsKIAl1aW50MzJfdCBjY3IgPSBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NDUik7Ci0JdWludDMyX3QgY2VyID0gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DRVIpOwotCXVpbnQzMl90IGNtciA9IF9fcmF3X3JlYWRsKFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ01SKTsKIAotCV9fcmF3X3dyaXRlbChjZXIgJiB+MHgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7IC8qIGRpc2FibGUgKi8KKwlfX3Jhd193cml0ZWwoMHgwLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7IC8qIGRpc2FibGUgKi8KIAotCWNjciAmPSAoY3B1X2lzX21tcDIoKSkgPyBUTVJfQ0NSX0NTXzAoMCkgOiBUTVJfQ0NSX0NTXzAoMyk7CisJY2NyICY9IChjcHVfaXNfbW1wMigpKSA/IChUTVJfQ0NSX0NTXzAoMCkgfCBUTVJfQ0NSX0NTXzEoMCkpIDoKKwkJKFRNUl9DQ1JfQ1NfMCgzKSB8IFRNUl9DQ1JfQ1NfMSgzKSk7CiAJX19yYXdfd3JpdGVsKGNjciwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DQ1IpOwogCi0JLyogZnJlZS1ydW5uaW5nIG1vZGUgKi8KLQlfX3Jhd193cml0ZWwoY21yIHwgMHgwMSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DTVIpOworCS8qIHNldCB0aW1lciAwIHRvIHBlcmlvZGljIG1vZGUsIGFuZCB0aW1lciAxIHRvIGZyZWUtcnVubmluZyBtb2RlICovCisJX19yYXdfd3JpdGVsKDB4MiwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DTVIpOwogCi0JX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9QTENSKDApKTsgLyogZnJlZS1ydW5uaW5nICovCisJX19yYXdfd3JpdGVsKDB4MSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9QTENSKDApKTsgLyogcGVyaW9kaWMgKi8KIAlfX3Jhd193cml0ZWwoMHg3LCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lDUigwKSk7ICAvKiBjbGVhciBzdGF0dXMgKi8KIAlfX3Jhd193cml0ZWwoMHgwLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lFUigwKSk7CiAKLQkvKiBlbmFibGUgdGltZXIgY291bnRlciAqLwotCV9fcmF3X3dyaXRlbChjZXIgfCAweDAxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7CisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9QTENSKDEpKTsgLyogZnJlZS1ydW5uaW5nICovCisJX19yYXdfd3JpdGVsKDB4NywgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JQ1IoMSkpOyAgLyogY2xlYXIgc3RhdHVzICovCisJX19yYXdfd3JpdGVsKDB4MCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMSkpOworCisJLyogZW5hYmxlIHRpbWVyIDEgY291bnRlciAqLworCV9fcmF3X3dyaXRlbCgweDIsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXNtL0tjb25maWcKaW5kZXggODg4ZTkyNS4uZWJkZTk3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW1zbS9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiAJc2VsZWN0IE1TTV9TTUQKIAlzZWxlY3QgTVNNX1NNRF9QS0czCiAJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBHUElPX01TTV9WMQogCXNlbGVjdCBNU01fUFJPQ19DT01NCiAJc2VsZWN0IEhBU19NU01fREVCVUdfVUFSVF9QSFlTCiAKQEAgLTIyLDYgKzIzLDcgQEAKIAlzZWxlY3QgTVNNX1ZJQwogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgTVNNX0dQSU9NVVgKKwlzZWxlY3QgR1BJT19NU01fVjEKIAlzZWxlY3QgTVNNX1BST0NfQ09NTQogCXNlbGVjdCBIQVNfTVNNX0RFQlVHX1VBUlRfUEhZUwogCkBAIC0zMyw2ICszNSw3IEBACiAJc2VsZWN0IE1TTV9WSUMKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IE1TTV9HUElPTVVYCisJc2VsZWN0IEdQSU9fTVNNX1YxCiAJc2VsZWN0IE1TTV9QUk9DX0NPTU0KIAlzZWxlY3QgSEFTX01TTV9ERUJVR19VQVJUX1BIWVMKIApAQCAtNDQsNiArNDcsNyBAQAogCXNlbGVjdCBBUk1fR0lDCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBNU01fVjJfVExNTQorCXNlbGVjdCBHUElPX01TTV9WMgogCXNlbGVjdCBNU01fR1BJT01VWAogCXNlbGVjdCBNU01fU0NNIGlmIFNNUAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCmluZGV4IGI3MDY1OGMuLjQyODVkZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL01ha2VmaWxlCkBAIC0yOSwxMSArMjksMyBAQAogb2JqLSQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgKz0gZ3Bpb211eC12MS5vIGdwaW9tdXgubwogb2JqLSQoQ09ORklHX0FSQ0hfUVNEOFg1MCkgKz0gZ3Bpb211eC04eDUwLm8gZ3Bpb211eC12MS5vIGdwaW9tdXgubwogb2JqLSQoQ09ORklHX0FSQ0hfTVNNOFg2MCkgKz0gZ3Bpb211eC04eDYwLm8gZ3Bpb211eC12Mi5vIGdwaW9tdXgubwotaWZkZWYgQ09ORklHX01TTV9WMl9UTE1NCi1pZm5kZWYgQ09ORklHX0FSQ0hfTVNNODk2MAotIyBUT0RPOiBUTE1NIE1hcHBpbmcgaXNzdWVzIG5lZWQgdG8gYmUgcmVzb2x2ZWQKLW9iai15CSs9IGdwaW8tdjIubwotZW5kaWYKLWVsc2UKLW9iai15CSs9IGdwaW8ubwotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtbXNtL2dwaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVhMjczYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ncGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlICJncGlvX2h3LmgiCi0jaW5jbHVkZSAiZ3Bpb211eC5oIgotCi0jZGVmaW5lIEZJUlNUX0dQSU9fSVJRIE1TTV9HUElPX1RPX0lOVCgwKQotCi0jZGVmaW5lIE1TTV9HUElPX0JBTksoYmFuaywgZmlyc3QsIGxhc3QpCQkJCVwKLQl7CQkJCQkJCQlcCi0JCS5yZWdzID0gewkJCQkJCVwKLQkJCS5vdXQgPSAgICAgICAgIE1TTV9HUElPX09VVF8jI2JhbmssCQlcCi0JCQkuaW4gPSAgICAgICAgICBNU01fR1BJT19JTl8jI2JhbmssCQlcCi0JCQkuaW50X3N0YXR1cyA9ICBNU01fR1BJT19JTlRfU1RBVFVTXyMjYmFuaywJXAotCQkJLmludF9jbGVhciA9ICAgTVNNX0dQSU9fSU5UX0NMRUFSXyMjYmFuaywJXAotCQkJLmludF9lbiA9ICAgICAgTVNNX0dQSU9fSU5UX0VOXyMjYmFuaywJCVwKLQkJCS5pbnRfZWRnZSA9ICAgIE1TTV9HUElPX0lOVF9FREdFXyMjYmFuaywJXAotCQkJLmludF9wb3MgPSAgICAgTVNNX0dQSU9fSU5UX1BPU18jI2JhbmssCQlcCi0JCQkub2UgPSAgICAgICAgICBNU01fR1BJT19PRV8jI2JhbmssCQlcCi0JCX0sCQkJCQkJCVwKLQkJLmNoaXAgPSB7CQkJCQkJXAotCQkJLmJhc2UgPSAoZmlyc3QpLAkJCQlcCi0JCQkubmdwaW8gPSAobGFzdCkgLSAoZmlyc3QpICsgMSwJCQlcCi0JCQkuZ2V0ID0gbXNtX2dwaW9fZ2V0LAkJCQlcCi0JCQkuc2V0ID0gbXNtX2dwaW9fc2V0LAkJCQlcCi0JCQkuZGlyZWN0aW9uX2lucHV0ID0gbXNtX2dwaW9fZGlyZWN0aW9uX2lucHV0LAlcCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IG1zbV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCVwKLQkJCS50b19pcnEgPSBtc21fZ3Bpb190b19pcnEsCQkJXAotCQkJLnJlcXVlc3QgPSBtc21fZ3Bpb19yZXF1ZXN0LAkJCVwKLQkJCS5mcmVlID0gbXNtX2dwaW9fZnJlZSwJCQkJXAotCQl9CQkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUiAxCi0KLXN0cnVjdCBtc21fZ3Bpb19yZWdzIHsKLQl2b2lkIF9faW9tZW0gKm91dDsKLQl2b2lkIF9faW9tZW0gKmluOwotCXZvaWQgX19pb21lbSAqaW50X3N0YXR1czsKLQl2b2lkIF9faW9tZW0gKmludF9jbGVhcjsKLQl2b2lkIF9faW9tZW0gKmludF9lbjsKLQl2b2lkIF9faW9tZW0gKmludF9lZGdlOwotCXZvaWQgX19pb21lbSAqaW50X3BvczsKLQl2b2lkIF9faW9tZW0gKm9lOwotfTsKLQotc3RydWN0IG1zbV9ncGlvX2NoaXAgewotCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IGdwaW9fY2hpcAljaGlwOwotCXN0cnVjdCBtc21fZ3Bpb19yZWdzCXJlZ3M7Ci0jaWYgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUgotCXVuc2lnbmVkICAgICAgICAgICAgICAgIGludF9zdGF0dXNfY29weTsKLSNlbmRpZgotCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJvdGhfZWRnZV9kZXRlY3Q7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgaW50X2VuYWJsZVsyXTsgLyogMDogYXdha2UsIDE6IHNsZWVwICovCi19OwotCi1zdGF0aWMgaW50IG1zbV9ncGlvX3dyaXRlKHN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCwKLQkJCSAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBvbikKLXsKLQl1bnNpZ25lZCBtYXNrID0gQklUKG9mZnNldCk7Ci0JdW5zaWduZWQgdmFsOwotCi0JdmFsID0gcmVhZGwobXNtX2NoaXAtPnJlZ3Mub3V0KTsKLQlpZiAob24pCi0JCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5vdXQpOwotCWVsc2UKLQkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5vdXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBtc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdChzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXApCi17Ci0JaW50IGxvb3BfbGltaXQgPSAxMDA7Ci0JdW5zaWduZWQgcG9sLCB2YWwsIHZhbDIsIGludHN0YXQ7Ci0JZG8gewotCQl2YWwgPSByZWFkbChtc21fY2hpcC0+cmVncy5pbik7Ci0JCXBvbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9wb3MpOwotCQlwb2wgPSAocG9sICYgfm1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0KSB8Ci0JCSAgICAgICh+dmFsICYgbXNtX2NoaXAtPmJvdGhfZWRnZV9kZXRlY3QpOwotCQl3cml0ZWwocG9sLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKLQkJaW50c3RhdCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9zdGF0dXMpOwotCQl2YWwyID0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW4pOwotCQlpZiAoKCh2YWwgXiB2YWwyKSAmIG1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0ICYgfmludHN0YXQpID09IDApCi0JCQlyZXR1cm47Ci0JfSB3aGlsZSAobG9vcF9saW1pdC0tID4gMCk7Ci0JcHJpbnRrKEtFUk5fRVJSICJtc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdCwgIgotCSAgICAgICAiZmFpbGVkIHRvIHJlYWNoIHN0YWJsZSBzdGF0ZSAleCAhPSAleFxuIiwgdmFsLCB2YWwyKTsKLX0KLQotc3RhdGljIGludCBtc21fZ3Bpb19jbGVhcl9kZXRlY3Rfc3RhdHVzKHN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0KQotewotCXVuc2lnbmVkIGJpdCA9IEJJVChvZmZzZXQpOwotCi0jaWYgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUgotCS8qIFNhdmUgaW50ZXJydXB0cyB0aGF0IGFscmVhZHkgdHJpZ2dlcmVkIGJlZm9yZSB3ZSBsb29zZSB0aGVtLiAqLwotCS8qIEFueSBpbnRlcnJ1cHQgdGhhdCB0cmlnZ2VycyBiZXR3ZWVuIHRoZSByZWFkIG9mIGludF9zdGF0dXMgKi8KLQkvKiBhbmQgdGhlIHdyaXRlIHRvIGludF9jbGVhciB3aWxsIHN0aWxsIGJlIGxvc3QgdGhvdWdoLiAqLwotCW1zbV9jaGlwLT5pbnRfc3RhdHVzX2NvcHkgfD0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X3N0YXR1cyk7Ci0JbXNtX2NoaXAtPmludF9zdGF0dXNfY29weSAmPSB+Yml0OwotI2VuZGlmCi0Jd3JpdGVsKGJpdCwgbXNtX2NoaXAtPnJlZ3MuaW50X2NsZWFyKTsKLQltc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdChtc21fY2hpcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXNtX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXA7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQltc21fY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXNtX2dwaW9fY2hpcCwgY2hpcCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotCXdyaXRlbChyZWFkbChtc21fY2hpcC0+cmVncy5vZSkgJiB+QklUKG9mZnNldCksIG1zbV9jaGlwLT5yZWdzLm9lKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbXNtX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXA7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0KLQltc21fY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXNtX2dwaW9fY2hpcCwgY2hpcCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotCW1zbV9ncGlvX3dyaXRlKG1zbV9jaGlwLCBvZmZzZXQsIHZhbHVlKTsKLQl3cml0ZWwocmVhZGwobXNtX2NoaXAtPnJlZ3Mub2UpIHwgQklUKG9mZnNldCksIG1zbV9jaGlwLT5yZWdzLm9lKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtc21fZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcDsKLQotCW1zbV9jaGlwID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtc21fZ3Bpb19jaGlwLCBjaGlwKTsKLQlyZXR1cm4gKHJlYWRsKG1zbV9jaGlwLT5yZWdzLmluKSAmICgxVSA8PCBvZmZzZXQpKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBtc21fZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9jaGlwOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCi0JbXNtX2NoaXAgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1zbV9ncGlvX2NoaXAsIGNoaXApOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQltc21fZ3Bpb193cml0ZShtc21fY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgbXNtX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlyZXR1cm4gTVNNX0dQSU9fVE9fSU5UKGNoaXAtPmJhc2UgKyBvZmZzZXQpOwotfQotCi0jaWZkZWYgQ09ORklHX01TTV9HUElPTVVYCi1zdGF0aWMgaW50IG1zbV9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXJldHVybiBtc21fZ3Bpb211eF9nZXQoY2hpcC0+YmFzZSArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zbV9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCW1zbV9ncGlvbXV4X3B1dChjaGlwLT5iYXNlICsgb2Zmc2V0KTsKLX0KLSNlbHNlCi0jZGVmaW5lIG1zbV9ncGlvX3JlcXVlc3QgTlVMTAotI2RlZmluZSBtc21fZ3Bpb19mcmVlIE5VTEwKLSNlbmRpZgotCi1zdHJ1Y3QgbXNtX2dwaW9fY2hpcCBtc21fZ3Bpb19jaGlwc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gwMEEpCi0JTVNNX0dQSU9fQkFOSygwLCAgIDAsICAxNSksCi0JTVNNX0dQSU9fQkFOSygxLCAgMTYsICA0MiksCi0JTVNNX0dQSU9fQkFOSygyLCAgNDMsICA2NyksCi0JTVNNX0dQSU9fQkFOSygzLCAgNjgsICA5NCksCi0JTVNNX0dQSU9fQkFOSyg0LCAgOTUsIDEwNiksCi0JTVNNX0dQSU9fQkFOSyg1LCAxMDcsIDEyMSksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX01TTTdYMjUpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gyNykKLQlNU01fR1BJT19CQU5LKDAsICAgMCwgIDE1KSwKLQlNU01fR1BJT19CQU5LKDEsICAxNiwgIDQyKSwKLQlNU01fR1BJT19CQU5LKDIsICA0MywgIDY3KSwKLQlNU01fR1BJT19CQU5LKDMsICA2OCwgIDk0KSwKLQlNU01fR1BJT19CQU5LKDQsICA5NSwgMTA2KSwKLQlNU01fR1BJT19CQU5LKDUsIDEwNywgMTMyKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gzMCkKLQlNU01fR1BJT19CQU5LKDAsICAgMCwgIDE1KSwKLQlNU01fR1BJT19CQU5LKDEsICAxNiwgIDQzKSwKLQlNU01fR1BJT19CQU5LKDIsICA0NCwgIDY3KSwKLQlNU01fR1BJT19CQU5LKDMsICA2OCwgIDk0KSwKLQlNU01fR1BJT19CQU5LKDQsICA5NSwgMTA2KSwKLQlNU01fR1BJT19CQU5LKDUsIDEwNywgMTMzKSwKLQlNU01fR1BJT19CQU5LKDYsIDEzNCwgMTUwKSwKLQlNU01fR1BJT19CQU5LKDcsIDE1MSwgMTgxKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfUVNEOFg1MCkKLQlNU01fR1BJT19CQU5LKDAsICAgMCwgIDE1KSwKLQlNU01fR1BJT19CQU5LKDEsICAxNiwgIDQyKSwKLQlNU01fR1BJT19CQU5LKDIsICA0MywgIDY3KSwKLQlNU01fR1BJT19CQU5LKDMsICA2OCwgIDk0KSwKLQlNU01fR1BJT19CQU5LKDQsICA5NSwgMTAzKSwKLQlNU01fR1BJT19CQU5LKDUsIDEwNCwgMTIxKSwKLQlNU01fR1BJT19CQU5LKDYsIDEyMiwgMTUyKSwKLQlNU01fR1BJT19CQU5LKDcsIDE1MywgMTY0KSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHZvaWQgbXNtX2dwaW9faXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0Jc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9jaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotCW1zbV9ncGlvX2NsZWFyX2RldGVjdF9zdGF0dXMobXNtX2NoaXAsCi0JCQkJICAgICBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1bnNpZ25lZCBvZmZzZXQgPSBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQkvKiBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgYWxzbyBsYXRjaGVkICovCi0JaWYgKCEocmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X2VkZ2UpICYgQklUKG9mZnNldCkpKQotCQltc21fZ3Bpb19jbGVhcl9kZXRlY3Rfc3RhdHVzKG1zbV9jaGlwLCBvZmZzZXQpOwotCW1zbV9jaGlwLT5pbnRfZW5hYmxlWzBdICY9IH5CSVQob2Zmc2V0KTsKLQl3cml0ZWwobXNtX2NoaXAtPmludF9lbmFibGVbMF0sIG1zbV9jaGlwLT5yZWdzLmludF9lbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQotewotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIG9mZnNldCA9IGQtPmlycSAtIGdwaW9fdG9faXJxKG1zbV9jaGlwLT5jaGlwLmJhc2UpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotCS8qIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBhbHNvIGxhdGNoZWQgKi8KLQlpZiAoIShyZWFkbChtc21fY2hpcC0+cmVncy5pbnRfZWRnZSkgJiBCSVQob2Zmc2V0KSkpCi0JCW1zbV9ncGlvX2NsZWFyX2RldGVjdF9zdGF0dXMobXNtX2NoaXAsIG9mZnNldCk7Ci0JbXNtX2NoaXAtPmludF9lbmFibGVbMF0gfD0gQklUKG9mZnNldCk7Ci0Jd3JpdGVsKG1zbV9jaGlwLT5pbnRfZW5hYmxlWzBdLCBtc21fY2hpcC0+cmVncy5pbnRfZW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IG1zbV9ncGlvX2lycV9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBvbikKLXsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1bnNpZ25lZCBvZmZzZXQgPSBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQotCWlmIChvbikKLQkJbXNtX2NoaXAtPmludF9lbmFibGVbMV0gfD0gQklUKG9mZnNldCk7Ci0JZWxzZQotCQltc21fY2hpcC0+aW50X2VuYWJsZVsxXSAmPSB+QklUKG9mZnNldCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtc21fZ3Bpb19pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQotewotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIG9mZnNldCA9IGQtPmlycSAtIGdwaW9fdG9faXJxKG1zbV9jaGlwLT5jaGlwLmJhc2UpOwotCXVuc2lnbmVkIHZhbCwgbWFzayA9IEJJVChvZmZzZXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOwotCXZhbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9lZGdlKTsKLQlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfRURHRV9CT1RIKSB7Ci0JCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfZWRnZSk7Ci0JCV9faXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLT5pcnEsIGhhbmRsZV9lZGdlX2lycSk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfZWRnZSk7Ci0JCV9faXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCX0KLQlpZiAoKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7Ci0JCW1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0IHw9IG1hc2s7Ci0JCW1zbV9ncGlvX3VwZGF0ZV9ib3RoX2VkZ2VfZGV0ZWN0KG1zbV9jaGlwKTsKLQl9IGVsc2UgewotCQltc21fY2hpcC0+Ym90aF9lZGdlX2RldGVjdCAmPSB+bWFzazsKLQkJdmFsID0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X3Bvcyk7Ci0JCWlmIChmbG93X3R5cGUgJiAoSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9ISUdIKSkKLQkJCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKLQkJZWxzZQotCQkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlpbnQgaSwgaiwgbWFzazsKLQl1bnNpZ25lZCB2YWw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtc21fZ3Bpb19jaGlwcyk7IGkrKykgewotCQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSAmbXNtX2dwaW9fY2hpcHNbaV07Ci0JCXZhbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9zdGF0dXMpOwotCQl2YWwgJj0gbXNtX2NoaXAtPmludF9lbmFibGVbMF07Ci0JCXdoaWxlICh2YWwpIHsKLQkJCW1hc2sgPSB2YWwgJiAtdmFsOwotCQkJaiA9IGZscyhtYXNrKSAtIDE7Ci0JCQkvKiBwcmludGsoIiVzICUwOHggJTA4eCBiaXQgJWQgZ3BpbyAlZCBpcnEgJWRcbiIsCi0JCQkJX19mdW5jX18sIHYsIG0sIGosIG1zbV9jaGlwLT5jaGlwLnN0YXJ0ICsgaiwKLQkJCQlGSVJTVF9HUElPX0lSUSArIG1zbV9jaGlwLT5jaGlwLnN0YXJ0ICsgaik7ICovCi0JCQl2YWwgJj0gfm1hc2s7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEoRklSU1RfR1BJT19JUlEgKwotCQkJCQkgICBtc21fY2hpcC0+Y2hpcC5iYXNlICsgaik7Ci0JCX0KLQl9Ci0JZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zbV9ncGlvX2lycV9jaGlwID0gewotCS5uYW1lICAgICAgICAgID0gIm1zbWdwaW8iLAotCS5pcnFfYWNrICAgICAgID0gbXNtX2dwaW9faXJxX2FjaywKLQkuaXJxX21hc2sgICAgICA9IG1zbV9ncGlvX2lycV9tYXNrLAotCS5pcnFfdW5tYXNrICAgID0gbXNtX2dwaW9faXJxX3VubWFzaywKLQkuaXJxX3NldF93YWtlICA9IG1zbV9ncGlvX2lycV9zZXRfd2FrZSwKLQkuaXJxX3NldF90eXBlICA9IG1zbV9ncGlvX2lycV9zZXRfdHlwZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1zbV9pbml0X2dwaW8odm9pZCkKLXsKLQlpbnQgaSwgaiA9IDA7Ci0KLQlmb3IgKGkgPSBGSVJTVF9HUElPX0lSUTsgaSA8IEZJUlNUX0dQSU9fSVJRICsgTlJfR1BJT19JUlFTOyBpKyspIHsKLQkJaWYgKGkgLSBGSVJTVF9HUElPX0lSUSA+PQotCQkJbXNtX2dwaW9fY2hpcHNbal0uY2hpcC5iYXNlICsKLQkJCW1zbV9ncGlvX2NoaXBzW2pdLmNoaXAubmdwaW8pCi0JCQlqKys7Ci0JCWlycV9zZXRfY2hpcF9kYXRhKGksICZtc21fZ3Bpb19jaGlwc1tqXSk7Ci0JCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpLCAmbXNtX2dwaW9faXJxX2NoaXAsCi0JCQkJCSBoYW5kbGVfZWRnZV9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1zbV9ncGlvX2NoaXBzKTsgaSsrKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZtc21fZ3Bpb19jaGlwc1tpXS5sb2NrKTsKLQkJd3JpdGVsKDAsIG1zbV9ncGlvX2NoaXBzW2ldLnJlZ3MuaW50X2VuKTsKLQkJZ3Bpb2NoaXBfYWRkKCZtc21fZ3Bpb19jaGlwc1tpXS5jaGlwKTsKLQl9Ci0KLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJTlRfR1BJT19HUk9VUDEsIG1zbV9ncGlvX2lycV9oYW5kbGVyKTsKLQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJTlRfR1BJT19HUk9VUDIsIG1zbV9ncGlvX2lycV9oYW5kbGVyKTsKLQlpcnFfc2V0X2lycV93YWtlKElOVF9HUElPX0dST1VQMSwgMSk7Ci0JaXJxX3NldF9pcnFfd2FrZShJTlRfR1BJT19HUk9VUDIsIDIpOwotCXJldHVybiAwOwotfQotCi1wb3N0Y29yZV9pbml0Y2FsbChtc21faW5pdF9ncGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9faHcuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9faHcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1MDY2MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ncGlvX2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1tc20vZ3Bpb19ody5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgotICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEwLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAotICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NU01fR1BJT19IV19ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NU01fR1BJT19IV19ICi0KLSNpbmNsdWRlIDxtYWNoL21zbV9pb21hcC5oPgotCi0vKiBzZWUgODAtVkE3MzYtMiBSZXYgQyBwcCA2OTUtNzUxCi0qKgotKiogVGhlc2UgYXJlIGFjdHVhbGx5IHRoZSAqc2hhZG93KiBncGlvIHJlZ2lzdGVycywgc2luY2UgdGhlCi0qKiByZWFsIG9uZXMgKHdoaWNoIGFsbG93IGZ1bGwgYWNjZXNzKSBhcmUgb25seSBhdmFpbGFibGUgdG8gdGhlCi0qKiBBUk05IHNpZGUgb2YgdGhlIHdvcmxkLgotKioKLSoqIFNpbmNlIHRoZSBfQkFTRSBuZWVkIHRvIGJlIHBhZ2UtYWxpZ25lZCB3aGVuIHdlJ3JlIG1hcHBpbmcgdGhlbQotKiogdG8gdmlydHVhbCBhZGRyZXNzZXMsIGFkanVzdCBmb3IgdGhlIGFkZGl0aW9uYWwgb2Zmc2V0IGluIHRoZXNlCi0qKiBtYWNyb3MuCi0qLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU003WDMwKQotI2RlZmluZSBNU01fR1BJTzFfUkVHKG9mZikgKE1TTV9HUElPMV9CQVNFICsgKG9mZikpCi0jZGVmaW5lIE1TTV9HUElPMl9SRUcob2ZmKSAoTVNNX0dQSU8yX0JBU0UgKyAweDQwMCArIChvZmYpKQotI2Vsc2UKLSNkZWZpbmUgTVNNX0dQSU8xX1JFRyhvZmYpIChNU01fR1BJTzFfQkFTRSArIDB4ODAwICsgKG9mZikpCi0jZGVmaW5lIE1TTV9HUElPMl9SRUcob2ZmKSAoTVNNX0dQSU8yX0JBU0UgKyAweEMwMCArIChvZmYpKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01TTTdYMDBBKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01TTTdYMjUpIHx8XAotICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gyNykKLQotLyogb3V0cHV0IHZhbHVlICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8wICAgICAgICAgTVNNX0dQSU8xX1JFRygweDAwKSAgLyogZ3BpbyAgMTUtMCAgKi8KLSNkZWZpbmUgTVNNX0dQSU9fT1VUXzEgICAgICAgICBNU01fR1BJTzJfUkVHKDB4MDApICAvKiBncGlvICA0Mi0xNiAqLwotI2RlZmluZSBNU01fR1BJT19PVVRfMiAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgwNCkgIC8qIGdwaW8gIDY3LTQzICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8zICAgICAgICAgTVNNX0dQSU8xX1JFRygweDA4KSAgLyogZ3BpbyAgOTQtNjggKi8KLSNkZWZpbmUgTVNNX0dQSU9fT1VUXzQgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MEMpICAvKiBncGlvIDEwNi05NSAqLwotI2RlZmluZSBNU01fR1BJT19PVVRfNSAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg1MCkgIC8qIGdwaW8gMTA3LTEyMSAqLwotCi0vKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIG91dHB1dCBlbmFibGUgKi8KLSNkZWZpbmUgTVNNX0dQSU9fT0VfMCAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MTApCi0jZGVmaW5lIE1TTV9HUElPX09FXzEgICAgICAgICAgTVNNX0dQSU8yX1JFRygweDA4KQotI2RlZmluZSBNU01fR1BJT19PRV8yICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgxNCkKLSNkZWZpbmUgTVNNX0dQSU9fT0VfMyAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MTgpCi0jZGVmaW5lIE1TTV9HUElPX09FXzQgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDFDKQotI2RlZmluZSBNU01fR1BJT19PRV81ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg1NCkKLQotLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBpbnB1dCByZWFkICovCi0jZGVmaW5lIE1TTV9HUElPX0lOXzAgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDM0KQotI2RlZmluZSBNU01fR1BJT19JTl8xICAgICAgICAgIE1TTV9HUElPMl9SRUcoMHgyMCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fMiAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MzgpCi0jZGVmaW5lIE1TTV9HUElPX0lOXzMgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDNDKQotI2RlZmluZSBNU01fR1BJT19JTl80ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg0MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fNSAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NDQpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1lZGdlIDA9bGV2ZWwgaW50ZXJydXAgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfMCAgICBNU01fR1BJTzFfUkVHKDB4NjApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzEgICAgTVNNX0dQSU8yX1JFRygweDUwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV8yICAgIE1TTV9HUElPMV9SRUcoMHg2NCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfMyAgICBNU01fR1BJTzFfUkVHKDB4NjgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzQgICAgTVNNX0dQSU8xX1JFRygweDZDKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV81ICAgIE1TTV9HUElPMV9SRUcoMHhDMCkKLQotLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPXBvc2l0aXZlIDA9bmVnYXRpdmUgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU18wICAgICBNU01fR1BJTzFfUkVHKDB4NzApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfMSAgICAgTVNNX0dQSU8yX1JFRygweDU4KQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzIgICAgIE1TTV9HUElPMV9SRUcoMHg3NCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU18zICAgICBNU01fR1BJTzFfUkVHKDB4NzgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfNCAgICAgTVNNX0dQSU8xX1JFRygweDdDKQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzUgICAgIE1TTV9HUElPMV9SRUcoMHhCQykKLQotLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBpbnRlcnJ1cHQgZW5hYmxlICovCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl8wICAgICAgTVNNX0dQSU8xX1JFRygweDgwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fMSAgICAgIE1TTV9HUElPMl9SRUcoMHg2MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzIgICAgICBNU01fR1BJTzFfUkVHKDB4ODQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl8zICAgICAgTVNNX0dQSU8xX1JFRygweDg4KQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fNCAgICAgIE1TTV9HUElPMV9SRUcoMHg4QykKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzUgICAgICBNU01fR1BJTzFfUkVHKDB4QjgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgd3JpdGUgMSB0byBjbGVhciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzAgICBNU01fR1BJTzFfUkVHKDB4OTApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl8xICAgTVNNX0dQSU8yX1JFRygweDY4KQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfMiAgIE1TTV9HUElPMV9SRUcoMHg5NCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzMgICBNU01fR1BJTzFfUkVHKDB4OTgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl80ICAgTVNNX0dQSU8xX1JFRygweDlDKQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfNSAgIE1TTV9HUElPMV9SRUcoMHhCNCkKLQotLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPWludGVycnVwdCBwZW5kaW5nICovCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfMCAgTVNNX0dQSU8xX1JFRygweEEwKQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzEgIE1TTV9HUElPMl9SRUcoMHg3MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU18yICBNU01fR1BJTzFfUkVHKDB4QTQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfMyAgTVNNX0dQSU8xX1JFRygweEE4KQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzQgIE1TTV9HUElPMV9SRUcoMHhBQykKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU181ICBNU01fR1BJTzFfUkVHKDB4QjApCi0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9RU0Q4WDUwKQotLyogb3V0cHV0IHZhbHVlICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8wICAgICAgICAgTVNNX0dQSU8xX1JFRygweDAwKSAgLyogZ3BpbyAgMTUtMCAgICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8xICAgICAgICAgTVNNX0dQSU8yX1JFRygweDAwKSAgLyogZ3BpbyAgNDItMTYgICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8yICAgICAgICAgTVNNX0dQSU8xX1JFRygweDA0KSAgLyogZ3BpbyAgNjctNDMgICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8zICAgICAgICAgTVNNX0dQSU8xX1JFRygweDA4KSAgLyogZ3BpbyAgOTQtNjggICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF80ICAgICAgICAgTVNNX0dQSU8xX1JFRygweDBDKSAgLyogZ3BpbyAxMDMtOTUgICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF81ICAgICAgICAgTVNNX0dQSU8xX1JFRygweDEwKSAgLyogZ3BpbyAxMjEtMTA0ICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF82ICAgICAgICAgTVNNX0dQSU8xX1JFRygweDE0KSAgLyogZ3BpbyAxNTItMTIyICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF83ICAgICAgICAgTVNNX0dQSU8xX1JFRygweDE4KSAgLyogZ3BpbyAxNjQtMTUzICovCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgb3V0cHV0IGVuYWJsZSAqLwotI2RlZmluZSBNU01fR1BJT19PRV8wICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgyMCkKLSNkZWZpbmUgTVNNX0dQSU9fT0VfMSAgICAgICAgICBNU01fR1BJTzJfUkVHKDB4MDgpCi0jZGVmaW5lIE1TTV9HUElPX09FXzIgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDI0KQotI2RlZmluZSBNU01fR1BJT19PRV8zICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgyOCkKLSNkZWZpbmUgTVNNX0dQSU9fT0VfNCAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MkMpCi0jZGVmaW5lIE1TTV9HUElPX09FXzUgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDMwKQotI2RlZmluZSBNU01fR1BJT19PRV82ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgzNCkKLSNkZWZpbmUgTVNNX0dQSU9fT0VfNyAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MzgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW5wdXQgcmVhZCAqLwotI2RlZmluZSBNU01fR1BJT19JTl8wICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg1MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fMSAgICAgICAgICBNU01fR1BJTzJfUkVHKDB4MjApCi0jZGVmaW5lIE1TTV9HUElPX0lOXzIgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDU0KQotI2RlZmluZSBNU01fR1BJT19JTl8zICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg1OCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fNCAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NUMpCi0jZGVmaW5lIE1TTV9HUElPX0lOXzUgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDYwKQotI2RlZmluZSBNU01fR1BJT19JTl82ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHg2NCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fNyAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NjgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1lZGdlIDA9bGV2ZWwgaW50ZXJydXAgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfMCAgICBNU01fR1BJTzFfUkVHKDB4NzApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzEgICAgTVNNX0dQSU8yX1JFRygweDUwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV8yICAgIE1TTV9HUElPMV9SRUcoMHg3NCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfMyAgICBNU01fR1BJTzFfUkVHKDB4NzgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzQgICAgTVNNX0dQSU8xX1JFRygweDdDKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV81ICAgIE1TTV9HUElPMV9SRUcoMHg4MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfNiAgICBNU01fR1BJTzFfUkVHKDB4ODQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzcgICAgTVNNX0dQSU8xX1JFRygweDg4KQotCi0vKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9cG9zaXRpdmUgMD1uZWdhdGl2ZSAqLwotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzAgICAgIE1TTV9HUElPMV9SRUcoMHg5MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU18xICAgICBNU01fR1BJTzJfUkVHKDB4NTgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfMiAgICAgTVNNX0dQSU8xX1JFRygweDk0KQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzMgICAgIE1TTV9HUElPMV9SRUcoMHg5OCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU180ICAgICBNU01fR1BJTzFfUkVHKDB4OUMpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfNSAgICAgTVNNX0dQSU8xX1JFRygweEEwKQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzYgICAgIE1TTV9HUElPMV9SRUcoMHhBNCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU183ICAgICBNU01fR1BJTzFfUkVHKDB4QTgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fMCAgICAgIE1TTV9HUElPMV9SRUcoMHhCMCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzEgICAgICBNU01fR1BJTzJfUkVHKDB4NjApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl8yICAgICAgTVNNX0dQSU8xX1JFRygweEI0KQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fMyAgICAgIE1TTV9HUElPMV9SRUcoMHhCOCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzQgICAgICBNU01fR1BJTzFfUkVHKDB4QkMpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl81ICAgICAgTVNNX0dQSU8xX1JFRygweEMwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fNiAgICAgIE1TTV9HUElPMV9SRUcoMHhDNCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzcgICAgICBNU01fR1BJTzFfUkVHKDB4QzgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgd3JpdGUgMSB0byBjbGVhciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzAgICBNU01fR1BJTzFfUkVHKDB4RDApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl8xICAgTVNNX0dQSU8yX1JFRygweDY4KQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfMiAgIE1TTV9HUElPMV9SRUcoMHhENCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzMgICBNU01fR1BJTzFfUkVHKDB4RDgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl80ICAgTVNNX0dQSU8xX1JFRygweERDKQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfNSAgIE1TTV9HUElPMV9SRUcoMHhFMCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzYgICBNU01fR1BJTzFfUkVHKDB4RTQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl83ICAgTVNNX0dQSU8xX1JFRygweEU4KQotCi0vKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9aW50ZXJydXB0IHBlbmRpbmcgKi8KLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU18wICBNU01fR1BJTzFfUkVHKDB4RjApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfMSAgTVNNX0dQSU8yX1JFRygweDcwKQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzIgIE1TTV9HUElPMV9SRUcoMHhGNCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU18zICBNU01fR1BJTzFfUkVHKDB4RjgpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfNCAgTVNNX0dQSU8xX1JFRygweEZDKQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzUgIE1TTV9HUElPMV9SRUcoMHgxMDApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfNiAgTVNNX0dQSU8xX1JFRygweDEwNCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU183ICBNU01fR1BJTzFfUkVHKDB4MTA4KQotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gzMCkKLQotLyogb3V0cHV0IHZhbHVlICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8wICAgICAgICAgTVNNX0dQSU8xX1JFRygweDAwKSAgIC8qIGdwaW8gIDE1LTAgICAqLwotI2RlZmluZSBNU01fR1BJT19PVVRfMSAgICAgICAgIE1TTV9HUElPMl9SRUcoMHgwMCkgICAvKiBncGlvICA0My0xNiAgKi8KLSNkZWZpbmUgTVNNX0dQSU9fT1VUXzIgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MDQpICAgLyogZ3BpbyAgNjctNDQgICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF8zICAgICAgICAgTVNNX0dQSU8xX1JFRygweDA4KSAgIC8qIGdwaW8gIDk0LTY4ICAqLwotI2RlZmluZSBNU01fR1BJT19PVVRfNCAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgwQykgICAvKiBncGlvIDEwNi05NSAgKi8KLSNkZWZpbmUgTVNNX0dQSU9fT1VUXzUgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NTApICAgLyogZ3BpbyAxMzMtMTA3ICovCi0jZGVmaW5lIE1TTV9HUElPX09VVF82ICAgICAgICAgTVNNX0dQSU8xX1JFRygweEM0KSAgIC8qIGdwaW8gMTUwLTEzNCAqLwotI2RlZmluZSBNU01fR1BJT19PVVRfNyAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgyMTQpICAvKiBncGlvIDE4MS0xNTEgKi8KLQotLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBvdXRwdXQgZW5hYmxlICovCi0jZGVmaW5lIE1TTV9HUElPX09FXzAgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDEwKQotI2RlZmluZSBNU01fR1BJT19PRV8xICAgICAgICAgIE1TTV9HUElPMl9SRUcoMHgwOCkKLSNkZWZpbmUgTVNNX0dQSU9fT0VfMiAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MTQpCi0jZGVmaW5lIE1TTV9HUElPX09FXzMgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDE4KQotI2RlZmluZSBNU01fR1BJT19PRV80ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgxQykKLSNkZWZpbmUgTVNNX0dQSU9fT0VfNSAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NTQpCi0jZGVmaW5lIE1TTV9HUElPX09FXzYgICAgICAgICAgTVNNX0dQSU8xX1JFRygweEM4KQotI2RlZmluZSBNU01fR1BJT19PRV83ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgyMTgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW5wdXQgcmVhZCAqLwotI2RlZmluZSBNU01fR1BJT19JTl8wICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgzNCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5fMSAgICAgICAgICBNU01fR1BJTzJfUkVHKDB4MjApCi0jZGVmaW5lIE1TTV9HUElPX0lOXzIgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDM4KQotI2RlZmluZSBNU01fR1BJT19JTl8zICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHgzQykKLSNkZWZpbmUgTVNNX0dQSU9fSU5fNCAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4NDApCi0jZGVmaW5lIE1TTV9HUElPX0lOXzUgICAgICAgICAgTVNNX0dQSU8xX1JFRygweDQ0KQotI2RlZmluZSBNU01fR1BJT19JTl82ICAgICAgICAgIE1TTV9HUElPMV9SRUcoMHhDQykKLSNkZWZpbmUgTVNNX0dQSU9fSU5fNyAgICAgICAgICBNU01fR1BJTzFfUkVHKDB4MjFDKQotCi0vKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9ZWRnZSAwPWxldmVsIGludGVycnVwICovCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzAgICAgTVNNX0dQSU8xX1JFRygweDYwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV8xICAgIE1TTV9HUElPMl9SRUcoMHg1MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfMiAgICBNU01fR1BJTzFfUkVHKDB4NjQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzMgICAgTVNNX0dQSU8xX1JFRygweDY4KQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV80ICAgIE1TTV9HUElPMV9SRUcoMHg2QykKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VER0VfNSAgICBNU01fR1BJTzFfUkVHKDB4QzApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FREdFXzYgICAgTVNNX0dQSU8xX1JFRygweEQwKQotI2RlZmluZSBNU01fR1BJT19JTlRfRURHRV83ICAgIE1TTV9HUElPMV9SRUcoMHgyNDApCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1wb3NpdGl2ZSAwPW5lZ2F0aXZlICovCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfMCAgICAgTVNNX0dQSU8xX1JFRygweDcwKQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzEgICAgIE1TTV9HUElPMl9SRUcoMHg1OCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU18yICAgICBNU01fR1BJTzFfUkVHKDB4NzQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfMyAgICAgTVNNX0dQSU8xX1JFRygweDc4KQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzQgICAgIE1TTV9HUElPMV9SRUcoMHg3QykKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1BPU181ICAgICBNU01fR1BJTzFfUkVHKDB4QkMpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9QT1NfNiAgICAgTVNNX0dQSU8xX1JFRygweEQ0KQotI2RlZmluZSBNU01fR1BJT19JTlRfUE9TXzcgICAgIE1TTV9HUElPMV9SRUcoMHgyMjgpCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fMCAgICAgIE1TTV9HUElPMV9SRUcoMHg4MCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzEgICAgICBNU01fR1BJTzJfUkVHKDB4NjApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl8yICAgICAgTVNNX0dQSU8xX1JFRygweDg0KQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fMyAgICAgIE1TTV9HUElPMV9SRUcoMHg4OCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzQgICAgICBNU01fR1BJTzFfUkVHKDB4OEMpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9FTl81ICAgICAgTVNNX0dQSU8xX1JFRygweEI4KQotI2RlZmluZSBNU01fR1BJT19JTlRfRU5fNiAgICAgIE1TTV9HUElPMV9SRUcoMHhEOCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0VOXzcgICAgICBNU01fR1BJTzFfUkVHKDB4MjJDKQotCi0vKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIHdyaXRlIDEgdG8gY2xlYXIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl8wICAgTVNNX0dQSU8xX1JFRygweDkwKQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfMSAgIE1TTV9HUElPMl9SRUcoMHg2OCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzIgICBNU01fR1BJTzFfUkVHKDB4OTQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl8zICAgTVNNX0dQSU8xX1JFRygweDk4KQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfNCAgIE1TTV9HUElPMV9SRUcoMHg5QykKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX0NMRUFSXzUgICBNU01fR1BJTzFfUkVHKDB4QjQpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9DTEVBUl82ICAgTVNNX0dQSU8xX1JFRygweERDKQotI2RlZmluZSBNU01fR1BJT19JTlRfQ0xFQVJfNyAgIE1TTV9HUElPMV9SRUcoMHgyMzApCi0KLS8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1pbnRlcnJ1cHQgcGVuZGluZyAqLwotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzAgIE1TTV9HUElPMV9SRUcoMHhBMCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU18xICBNU01fR1BJTzJfUkVHKDB4NzApCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfMiAgTVNNX0dQSU8xX1JFRygweEE0KQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzMgIE1TTV9HUElPMV9SRUcoMHhBOCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU180ICBNU01fR1BJTzFfUkVHKDB4QUMpCi0jZGVmaW5lIE1TTV9HUElPX0lOVF9TVEFUVVNfNSAgTVNNX0dQSU8xX1JFRygweEIwKQotI2RlZmluZSBNU01fR1BJT19JTlRfU1RBVFVTXzYgIE1TTV9HUElPMV9SRUcoMHhFMCkKLSNkZWZpbmUgTVNNX0dQSU9fSU5UX1NUQVRVU183ICBNU01fR1BJTzFfUkVHKDB4MjM0KQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ncGlvbXV4LmggYi9hcmNoL2FybS9tYWNoLW1zbS9ncGlvbXV4LmgKaW5kZXggYjE3OGQ5Yy4uMDA0NTlmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpb211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2dwaW9tdXguaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxtYWNoL21zbV9ncGlvbXV4Lmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19NU01fVjJfVExNTSkKICNpbmNsdWRlICJncGlvbXV4LXYyLmgiCkBAIC03MSwxMiArNzIsNiBAQAogICovCiBleHRlcm4gc3RydWN0IG1zbV9ncGlvbXV4X2NvbmZpZyBtc21fZ3Bpb211eF9jb25maWdzW0dQSU9NVVhfTkdQSU9TXTsKIAotLyogSW5jcmVtZW50IGEgZ3BpbydzIHJlZmVyZW5jZSBjb3VudCwgcG9zc2libHkgYWN0aXZhdGluZyB0aGUgbGluZS4gKi8KLWludCBfX211c3RfY2hlY2sgbXNtX2dwaW9tdXhfZ2V0KHVuc2lnbmVkIGdwaW8pOwotCi0vKiBEZWNyZW1lbnQgYSBncGlvJ3MgcmVmZXJlbmNlIGNvdW50LCBwb3NzaWJseSBzdXNwZW5kaW5nIHRoZSBsaW5lLiAqLwotaW50IG1zbV9ncGlvbXV4X3B1dCh1bnNpZ25lZCBncGlvKTsKLQogLyogSW5zdGFsbCBhIG5ldyBjb25maWd1cmF0aW9uIHRvIHRoZSBncGlvIGxpbmUuICBUbyBhdm9pZCBvdmVyd3JpdGluZwogICogYSBjb25maWd1cmF0aW9uLCBsZWF2ZSB0aGUgVkFMSUQgYml0IG91dC4KICAqLwpAQCAtOTQsMTYgKzg5LDYgQEAKICAqLwogdm9pZCBfX21zbV9ncGlvbXV4X3dyaXRlKHVuc2lnbmVkIGdwaW8sIGdwaW9tdXhfY29uZmlnX3QgdmFsKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgbXNtX2dwaW9tdXhfZ2V0KHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1zbV9ncGlvbXV4X3B1dCh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBtc21fZ3Bpb211eF93cml0ZSh1bnNpZ25lZCBncGlvLAogCQkJCSAgICBncGlvbXV4X2NvbmZpZ190IGFjdGl2ZSwKIAkJCQkgICAgZ3Bpb211eF9jb25maWdfdCBzdXNwZW5kZWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2dwaW9tdXguaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21fZ3Bpb211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2QzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2dwaW9tdXguaApAQCAtMCwwICsxLDM4IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfTElOVVhfTVNNX0dQSU9NVVhfSAorI2RlZmluZSBfTElOVVhfTVNNX0dQSU9NVVhfSAorCisjaWZkZWYgQ09ORklHX01TTV9HUElPTVVYCisKKy8qIEluY3JlbWVudCBhIGdwaW8ncyByZWZlcmVuY2UgY291bnQsIHBvc3NpYmx5IGFjdGl2YXRpbmcgdGhlIGxpbmUuICovCitpbnQgX19tdXN0X2NoZWNrIG1zbV9ncGlvbXV4X2dldCh1bnNpZ25lZCBncGlvKTsKKworLyogRGVjcmVtZW50IGEgZ3BpbydzIHJlZmVyZW5jZSBjb3VudCwgcG9zc2libHkgc3VzcGVuZGluZyB0aGUgbGluZS4gKi8KK2ludCBtc21fZ3Bpb211eF9wdXQodW5zaWduZWQgZ3Bpbyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBtc21fZ3Bpb211eF9nZXQodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXNtX2dwaW9tdXhfcHV0KHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX01TTV9HUElPTVVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtN3gwMC5oIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDAwLmgKaW5kZXggOGY5OWQ5Ny4uOTRmZTlmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDAwLmgKQEAgLTU1LDEzICs1NSwxMSBAQAogI2RlZmluZSBNU01fRE1PVl9QSFlTICAgICAgICAgMHhBOTcwMDAwMAogI2RlZmluZSBNU01fRE1PVl9TSVpFICAgICAgICAgU1pfNEsKIAotI2RlZmluZSBNU01fR1BJTzFfQkFTRSAgICAgICAgSU9NRU0oMHhFMDAwMzAwMCkKLSNkZWZpbmUgTVNNX0dQSU8xX1BIWVMgICAgICAgIDB4QTkyMDAwMDAKLSNkZWZpbmUgTVNNX0dQSU8xX1NJWkUgICAgICAgIFNaXzRLCisjZGVmaW5lIE1TTTdYMDBfR1BJTzFfUEhZUyAgICAgICAgMHhBOTIwMDAwMAorI2RlZmluZSBNU003WDAwX0dQSU8xX1NJWkUgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX0dQSU8yX0JBU0UgICAgICAgIElPTUVNKDB4RTAwMDQwMDApCi0jZGVmaW5lIE1TTV9HUElPMl9QSFlTICAgICAgICAweEE5MzAwMDAwCi0jZGVmaW5lIE1TTV9HUElPMl9TSVpFICAgICAgICBTWl80SworI2RlZmluZSBNU003WDAwX0dQSU8yX1BIWVMgICAgICAgIDB4QTkzMDAwMDAKKyNkZWZpbmUgTVNNN1gwMF9HUElPMl9TSVpFICAgICAgICBTWl80SwogCiAjZGVmaW5lIE1TTV9DTEtfQ1RMX0JBU0UgICAgICBJT01FTSgweEUwMDA1MDAwKQogI2RlZmluZSBNU01fQ0xLX0NUTF9QSFlTICAgICAgMHhBODYwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC03eDMwLmggYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MzAuaAppbmRleCA0ZDg0YmUxLi4zNzY5NDQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MzAuaAorKysgYi9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTd4MzAuaApAQCAtNDYsMTMgKzQ2LDExIEBACiAjZGVmaW5lIE1TTV9ETU9WX1BIWVMgICAgICAgICAweEFDNDAwMDAwCiAjZGVmaW5lIE1TTV9ETU9WX1NJWkUgICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9HUElPMV9CQVNFICAgICAgICBJT01FTSgweEUwMDAzMDAwKQotI2RlZmluZSBNU01fR1BJTzFfUEhZUyAgICAgICAgMHhBQzAwMTAwMAotI2RlZmluZSBNU01fR1BJTzFfU0laRSAgICAgICAgU1pfNEsKKyNkZWZpbmUgTVNNN1gzMF9HUElPMV9QSFlTICAgICAgICAweEFDMDAxMDAwCisjZGVmaW5lIE1TTTdYMzBfR1BJTzFfU0laRSAgICAgICAgU1pfNEsKIAotI2RlZmluZSBNU01fR1BJTzJfQkFTRSAgICAgICAgSU9NRU0oMHhFMDAwNDAwMCkKLSNkZWZpbmUgTVNNX0dQSU8yX1BIWVMgICAgICAgIDB4QUMxMDEwMDAKLSNkZWZpbmUgTVNNX0dQSU8yX1NJWkUgICAgICAgIFNaXzRLCisjZGVmaW5lIE1TTTdYMzBfR1BJTzJfUEhZUyAgICAgICAgMHhBQzEwMTAwMAorI2RlZmluZSBNU003WDMwX0dQSU8yX1NJWkUgICAgICAgIFNaXzRLCiAKICNkZWZpbmUgTVNNX0NMS19DVExfQkFTRSAgICAgIElPTUVNKDB4RTAwMDUwMDApCiAjZGVmaW5lIE1TTV9DTEtfQ1RMX1BIWVMgICAgICAweEFCODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLTh4NTAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg1MC5oCmluZGV4IGQ0MTQzMjAuLmQ2N2NkNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg1MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAtOHg1MC5oCkBAIC00NiwxMyArNDYsMTEgQEAKICNkZWZpbmUgTVNNX0RNT1ZfUEhZUyAgICAgICAgIDB4QTk3MDAwMDAKICNkZWZpbmUgTVNNX0RNT1ZfU0laRSAgICAgICAgIFNaXzRLCiAKLSNkZWZpbmUgTVNNX0dQSU8xX0JBU0UgICAgICAgIElPTUVNKDB4RTAwMDMwMDApCi0jZGVmaW5lIE1TTV9HUElPMV9QSFlTICAgICAgICAweEE5MDAwMDAwCi0jZGVmaW5lIE1TTV9HUElPMV9TSVpFICAgICAgICBTWl80SworI2RlZmluZSBRU0Q4WDUwX0dQSU8xX1BIWVMgICAgICAgIDB4QTkwMDAwMDAKKyNkZWZpbmUgUVNEOFg1MF9HUElPMV9TSVpFICAgICAgICBTWl80SwogCi0jZGVmaW5lIE1TTV9HUElPMl9CQVNFICAgICAgICBJT01FTSgweEUwMDA0MDAwKQotI2RlZmluZSBNU01fR1BJTzJfUEhZUyAgICAgICAgMHhBOTEwMDAwMAotI2RlZmluZSBNU01fR1BJTzJfU0laRSAgICAgICAgU1pfNEsKKyNkZWZpbmUgUVNEOFg1MF9HUElPMl9QSFlTICAgICAgICAweEE5MTAwMDAwCisjZGVmaW5lIFFTRDhYNTBfR1BJTzJfU0laRSAgICAgICAgU1pfNEsKIAogI2RlZmluZSBNU01fQ0xLX0NUTF9CQVNFICAgICAgSU9NRU0oMHhFMDAwNTAwMCkKICNkZWZpbmUgTVNNX0NMS19DVExfUEhZUyAgICAgIDB4QTg2MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9tc21faW9tYXAuaAppbmRleCAyZjQ5NGI2Li40ZGVkMTUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvbXNtX2lvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL21zbV9pb21hcC5oCkBAIC02MSw1ICs2MSw3IEBACiAjZGVmaW5lIE1TTV9RR0lDX0NQVV9CQVNFCUlPTUVNKDB4RjAwMDEwMDApCiAjZGVmaW5lIE1TTV9UTVJfQkFTRQkJSU9NRU0oMHhGMDIwMDAwMCkKICNkZWZpbmUgTVNNX1RNUjBfQkFTRQkJSU9NRU0oMHhGMDIwMTAwMCkKKyNkZWZpbmUgTVNNX0dQSU8xX0JBU0UJCUlPTUVNKDB4RTAwMDMwMDApCisjZGVmaW5lIE1TTV9HUElPMl9CQVNFCQlJT01FTSgweEUwMDA0MDAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9pby5jCmluZGV4IGNlYzZlZDEuLjE0MGRkYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwpAQCAtNDMsOCArNDMsOCBAQAogCU1TTV9ERVZJQ0UoVklDKSwKIAlNU01fQ0hJUF9ERVZJQ0UoQ1NSLCBNU003WDAwKSwKIAlNU01fREVWSUNFKERNT1YpLAotCU1TTV9ERVZJQ0UoR1BJTzEpLAotCU1TTV9ERVZJQ0UoR1BJTzIpLAorCU1TTV9DSElQX0RFVklDRShHUElPMSwgTVNNN1gwMCksCisJTVNNX0NISVBfREVWSUNFKEdQSU8yLCBNU003WDAwKSwKIAlNU01fREVWSUNFKENMS19DVEwpLAogI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAogCU1TTV9ERVZJQ0UoREVCVUdfVUFSVCksCkBAIC03Niw4ICs3Niw4IEBACiAJTVNNX0RFVklDRShWSUMpLAogCU1TTV9DSElQX0RFVklDRShDU1IsIFFTRDhYNTApLAogCU1TTV9ERVZJQ0UoRE1PViksCi0JTVNNX0RFVklDRShHUElPMSksCi0JTVNNX0RFVklDRShHUElPMiksCisJTVNNX0NISVBfREVWSUNFKEdQSU8xLCBRU0Q4WDUwKSwKKwlNU01fQ0hJUF9ERVZJQ0UoR1BJTzIsIFFTRDhYNTApLAogCU1TTV9ERVZJQ0UoQ0xLX0NUTCksCiAJTVNNX0RFVklDRShTSVJDKSwKIAlNU01fREVWSUNFKFNDUExMKSwKQEAgLTEzNSw4ICsxMzUsOCBAQAogCU1TTV9ERVZJQ0UoVklDKSwKIAlNU01fQ0hJUF9ERVZJQ0UoQ1NSLCBNU003WDMwKSwKIAlNU01fREVWSUNFKERNT1YpLAotCU1TTV9ERVZJQ0UoR1BJTzEpLAotCU1TTV9ERVZJQ0UoR1BJTzIpLAorCU1TTV9DSElQX0RFVklDRShHUElPMSwgTVNNN1gzMCksCisJTVNNX0NISVBfREVWSUNFKEdQSU8yLCBNU003WDMwKSwKIAlNU01fREVWSUNFKENMS19DVEwpLAogCU1TTV9ERVZJQ0UoQ0xLX0NUTF9TSDIpLAogCU1TTV9ERVZJQ0UoQUQ1KSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcGNpZS5jCmluZGV4IGQ2MzM2YWYuLmM1MWFmMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3BjaWUuYwpAQCAtMjYwLDcgKzI2MCw4IEBACiAJcmV0dXJuIGJ1czsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbXY3OHh4MF9wY2llX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgbXY3OHh4MF9wY2llX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSBidXNfdG9fcG9ydChkZXYtPmJ1cy0+bnVtYmVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTEuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLWNwdWlteDUxLmMKaW5kZXggN2M4OTNmYS4uNjg5MzRlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtY3B1aW14NTEuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1jcHVpbXg1MS5jCkBAIC04MSw3ICs4MSw3IEBACiAJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAogCX0sIHsKIAkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVg1MV9DUzFfQkFTRV9BRERSICsgMHgyMDAwMDAwKSwKLQkJLmlycSA9IGlycV90b19ncGlvKENQVUlNWDUxX1FVQVJURF9HUElPKSwKKwkJLmlycSA9IGdwaW9fdG9faXJxKENQVUlNWDUxX1FVQVJURF9HUElPKSwKIAkJLmlycWZsYWdzID0gSVJRRl9UUklHR0VSX0hJR0gsCiAJCS51YXJ0Y2xrID0gQ1BVSU1YNTFfUVVBUlRfWFRBTCwKIAkJLnJlZ3NoaWZ0ID0gQ1BVSU1YNTFfUVVBUlRfUkVHU0hJRlQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2JhYmJhZ2UuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCmluZGV4IGU0MDBiMDkuLjExYjBmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCkBAIC0zNjksNyArMzY5LDcgQEAKIAkJCQkJQVJSQVlfU0laRShteDUxYmFiYmFnZV9wYWRzKSk7CiAKIAlpbXg1MV9hZGRfaW14X3VhcnQoMCwgJnVhcnRfcGRhdGEpOwotCWlteDUxX2FkZF9pbXhfdWFydCgxLCAmdWFydF9wZGF0YSk7CisJaW14NTFfYWRkX2lteF91YXJ0KDEsIE5VTEwpOwogCWlteDUxX2FkZF9pbXhfdWFydCgyLCAmdWFydF9wZGF0YSk7CiAKIAliYWJiYWdlX2ZlY19yZXNldCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYW14LmMgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYwppbmRleCBmNzA3MDBkLi41NTFkYWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2VmaWthbXguYwpAQCAtMTA4LDkgKzEwOCw5IEBACiAJZ3Bpb19yZXF1ZXN0KEVGSUtBTVhfUENCSUQyLCAicGNiaWQyIik7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoRUZJS0FNWF9QQ0JJRDIpOwogCi0JaWQgPSBncGlvX2dldF92YWx1ZShFRklLQU1YX1BDQklEMCk7Ci0JaWQgfD0gZ3Bpb19nZXRfdmFsdWUoRUZJS0FNWF9QQ0JJRDEpIDw8IDE7Ci0JaWQgfD0gZ3Bpb19nZXRfdmFsdWUoRUZJS0FNWF9QQ0JJRDIpIDw8IDI7CisJaWQgPSBncGlvX2dldF92YWx1ZShFRklLQU1YX1BDQklEMCkgPyAxIDogMDsKKwlpZCB8PSAoZ3Bpb19nZXRfdmFsdWUoRUZJS0FNWF9QQ0JJRDEpID8gMSA6IDApIDw8IDE7CisJaWQgfD0gKGdwaW9fZ2V0X3ZhbHVlKEVGSUtBTVhfUENCSUQyKSA/IDEgOiAwKSA8PCAyOwogCiAJc3dpdGNoIChpZCkgewogCWNhc2UgNzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfZWZpa2FzYi5jIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYXNiLmMKaW5kZXggMmU0ZDlkMy4uOGE5YmNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYXNiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvYm9hcmQtbXg1MV9lZmlrYXNiLmMKQEAgLTE1NiwyMyArMTU2LDI0IEBACiAJewogCQkuY29kZSA9IEtFWV9QT1dFUiwKIAkJLmdwaW8gPSBFRklLQVNCX1BXUktFWSwKLQkJLnR5cGUgPSBFVl9QV1IsCisJCS50eXBlID0gRVZfS0VZLAogCQkuZGVzYyA9ICJQb3dlciBCdXR0b24iLAogCQkud2FrZXVwID0gMSwKLQkJLmRlYm91bmNlX2ludGVydmFsID0gMTAsIC8qIG1zICovCisJCS5hY3RpdmVfbG93ID0gMSwKIAl9LAogCXsKIAkJLmNvZGUgPSBTV19MSUQsCiAJCS5ncGlvID0gRUZJS0FTQl9MSUQsCiAJCS50eXBlID0gRVZfU1csCiAJCS5kZXNjID0gIkxpZCBTd2l0Y2giLAorCQkuYWN0aXZlX2xvdyA9IDEsCiAJfSwKIAl7Ci0JCS8qIFNXX1JGS0lMTEFMTCB2cyBLRVlfUkZLSUxMID8gKi8KLQkJLmNvZGUgPSBTV19SRktJTExfQUxMLAorCQkuY29kZSA9IEtFWV9SRktJTEwsCiAJCS5ncGlvID0gRUZJS0FTQl9SRktJTEwsCi0JCS50eXBlID0gRVZfU1csCisJCS50eXBlID0gRVZfS0VZLAogCQkuZGVzYyA9ICJyZmtpbGwiLAorCQkuYWN0aXZlX2xvdyA9IDEsCiAJfSwKIH07CiAKQEAgLTIyNCw4ICsyMjUsOCBAQAogCWdwaW9fcmVxdWVzdChFRklLQVNCX1BDQklEMSwgInBjYiBpZDEiKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChFRklLQVNCX1BDQklEMSk7CiAKLQlpZCA9IGdwaW9fZ2V0X3ZhbHVlKEVGSUtBU0JfUENCSUQwKTsKLQlpZCB8PSBncGlvX2dldF92YWx1ZShFRklLQVNCX1BDQklEMSkgPDwgMTsKKwlpZCA9IGdwaW9fZ2V0X3ZhbHVlKEVGSUtBU0JfUENCSUQwKSA/IDEgOiAwOworCWlkIHw9IChncGlvX2dldF92YWx1ZShFRklLQVNCX1BDQklEMSkgPyAxIDogMCkgPDwgMTsKIAogCXN3aXRjaCAoaWQpIHsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvY2xvY2stbXg1MS1teDUzLmMgYi9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYwppbmRleCA3ZjIwMzA4Li5mN2JmOTk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9jbG9jay1teDUxLW14NTMuYwpAQCAtMjcxLDcgKzI3MSwxMSBAQAogCWludCBpID0gMDsKIAogCXBsbGJhc2UgPSBfZ2V0X3BsbF9iYXNlKGNsayk7Ci0JcmVnID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKSB8IE1YQ19QTExfRFBfQ1RMX1VQRU47CisJcmVnID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKKwlpZiAocmVnICYgTVhDX1BMTF9EUF9DVExfVVBFTikKKwkJcmV0dXJuIDA7CisKKwlyZWcgfD0gTVhDX1BMTF9EUF9DVExfVVBFTjsKIAlfX3Jhd193cml0ZWwocmVnLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOwogCiAJLyogV2FpdCBmb3IgbG9jayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvbXg1MV9lZmlrYS5jIGIvYXJjaC9hcm0vbWFjaC1teDUvbXg1MV9lZmlrYS5jCmluZGV4IDQ0MzVlMDMuLmM5MjA5NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L214NTFfZWZpa2EuYworKysgYi9hcmNoL2FybS9tYWNoLW14NS9teDUxX2VmaWthLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCiAJbWRlbGF5KDEwKTsKIAotCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KDAsIE1YQ19FSENJX0lUQ19OT19USFJFU0hPTEQpOworCXJldHVybiBteDUxX2luaXRpYWxpemVfdXNiX2h3KHBkZXYtPmlkLCBNWENfRUhDSV9JVENfTk9fVEhSRVNIT0xEKTsKIH0KIAogc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX2NvbmZpZyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwppbmRleCA0YWU2MjU3Li41N2I2NmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC03LDcgKzcsNiBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBBRUFCSQogCXNlbGVjdCBSRUdVTEFUT1IKLQlzZWxlY3QgUE0KIAlzZWxlY3QgUE1fUlVOVElNRQogCXNlbGVjdCBWRlAKIAlzZWxlY3QgTkVPTiBpZiBBUkNIX09NQVAzIHx8IEFSQ0hfT01BUDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3Y3JhbmUuYwppbmRleCA1ZjJiNTVmLi45MzNlOTM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2NyYW5lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdjcmFuZS5jCkBAIC00NSw4ICs0NSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07Ci0jZWxzZQotI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfY3JhbmVfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IDMyZjVmODkuLjNhZTE2YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTQ5MSwyMyArNDkxLDIyIEBACiAKIAkvKiBDdXN0b20gT1BQIGVuYWJsZWQgZm9yIGFsbCB4TSB2ZXJzaW9ucyAqLwogCWlmIChjcHVfaXNfb21hcDM2MzAoKSkgewotCQlzdHJ1Y3Qgb21hcF9od21vZCAqbWggPSBvbWFwX2h3bW9kX2xvb2t1cCgibXB1Iik7Ci0JCXN0cnVjdCBvbWFwX2h3bW9kICpkaCA9IG9tYXBfaHdtb2RfbG9va3VwKCJpdmEiKTsKLQkJc3RydWN0IGRldmljZSAqZGV2OworCQlzdHJ1Y3QgZGV2aWNlICptcHVfZGV2LCAqaXZhX2RldjsKIAotCQlpZiAoIW1oIHx8ICFkaCkgeworCQltcHVfZGV2ID0gb21hcDJfZ2V0X21wdXNzX2RldmljZSgpOworCQlpdmFfZGV2ID0gb21hcDJfZ2V0X2l2YV9kZXZpY2UoKTsKKworCQlpZiAoIW1wdV9kZXYgfHwgIWl2YV9kZXYpIHsKIAkJCXByX2VycigiJXM6IEFpZWUuLiBubyBtcHUvZHNwIGRldmljZXM/ICVwICVwXG4iLAotCQkJCV9fZnVuY19fLCBtaCwgZGgpOworCQkJCV9fZnVuY19fLCBtcHVfZGV2LCBpdmFfZGV2KTsKIAkJCXJldHVybjsKIAkJfQogCQkvKiBFbmFibGUgTVBVIDFHSHogYW5kIGxvd2VyIG9wcHMgKi8KLQkJZGV2ID0gJm1oLT5vZC0+cGRldi5kZXY7Ci0JCXIgPSBvcHBfZW5hYmxlKGRldiwgODAwMDAwMDAwKTsKKwkJciA9IG9wcF9lbmFibGUobXB1X2RldiwgODAwMDAwMDAwKTsKIAkJLyogVE9ETzogTVBVIDFHSHogbmVlZHMgU1IgYW5kIEFCQiAqLwogCiAJCS8qIEVuYWJsZSBJVkEgODAwTUh6IGFuZCBsb3dlciBvcHBzICovCi0JCWRldiA9ICZkaC0+b2QtPnBkZXYuZGV2OwotCQlyIHw9IG9wcF9lbmFibGUoZGV2LCA2NjAwMDAwMDApOworCQlyIHw9IG9wcF9lbmFibGUoaXZhX2RldiwgNjYwMDAwMDAwKTsKIAkJLyogVE9ETzogRFNQIDgwME1IeiBuZWVkcyBTUiBhbmQgQUJCICovCiAJCWlmIChyKSB7CiAJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGhpZ2hlciBvcHAgJWRcbiIsCkBAIC01MTYsMTAgKzUxNSw4IEBACiAJCQkgKiBDbGVhbnVwIC0gZGlzYWJsZSB0aGUgaGlnaGVyIGZyZXFzIC0gd2UgZG9udCBjYXJlCiAJCQkgKiBhYm91dCB0aGUgcmVzdWx0cwogCQkJICovCi0JCQlkZXYgPSAmbWgtPm9kLT5wZGV2LmRldjsKLQkJCW9wcF9kaXNhYmxlKGRldiwgODAwMDAwMDAwKTsKLQkJCWRldiA9ICZkaC0+b2QtPnBkZXYuZGV2OwotCQkJb3BwX2Rpc2FibGUoZGV2LCA2NjAwMDAwMDApOworCQkJb3BwX2Rpc2FibGUobXB1X2RldiwgODAwMDAwMDAwKTsKKwkJCW9wcF9kaXNhYmxlKGl2YV9kZXYsIDY2MDAwMDAwMCk7CiAJCX0KIAl9CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBjYzUwM2FhLi41YTg4NmNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtNDE4LDYgKzQxOCwxMCBAQAogCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4wIiksCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92YXV4Ml9zdXBwbHlbXSA9IHsKKwlSRUdVTEFUT1JfU1VQUExZKCJ2ZGRzX2NzaWIiLCAib21hcDNpc3AiKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZhdXgzX3N1cHBseVtdID0gewogCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAib21hcF9oc21tYy4xIiksCiB9OwpAQCAtNDc5LDYgKzQ4Myw4IEBACiAJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKIAkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKIAl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHJ4NTFfdmF1eDJfc3VwcGx5KSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSByeDUxX3ZhdXgyX3N1cHBseSwKIH07CiAKIC8qIFZBVVgzIC0gYWRkcyBtb3JlIHBvd2VyIHRvIFZJT18xOCByYWlsICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKaW5kZXggZmZkNTViMS4uYjliODQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYwpAQCAtMzA3OCw2ICszMDc4LDcgQEAKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMzA4NSw2ICszMDg2LDcgQEAKIAkubmFtZQkJPSAid2R0MV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKaW5kZXggMmFmMGUzZjAuLmMwYjZmYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTMzNzYsMTAgKzMzNzYsMTggQEAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDQ2eCgpKSB7CiAJCWNwdV9tYXNrID0gUkFURV9JTl80NDYwOwogCQljcHVfY2xrZmxnID0gQ0tfNDQ2WDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKIAl9CiAKIAljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7Ci0Jb21hcDJfY2xrX2Rpc2FibGVfY2xrZG1fY29udHJvbCgpOworCisJLyoKKwkgKiBNdXN0IHN0YXkgY29tbWVudGVkIHVudGlsIGFsbCBPTUFQIFNvQyBkcml2ZXJzIGFyZQorCSAqIGNvbnZlcnRlZCB0byBydW50aW1lIFBNLCBvciBkcml2ZXJzIG1heSBzdGFydCBjcmFzaGluZworCSAqCisJICogb21hcDJfY2xrX2Rpc2FibGVfY2xrZG1fY29udHJvbCgpOworCSAqLwogCiAJZm9yIChjID0gb21hcDQ0eHhfY2xrczsgYyA8IG9tYXA0NHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXA0NHh4X2Nsa3MpOwogCQkJCQkJCQkJICBjKyspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKaW5kZXggYWI3ZGIwOC4uOGYwODkwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpAQCAtNzQ3LDYgKzc0Nyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa2RtLT5sb2NrLCBmbGFncyk7CiAJY2xrZG0tPl9mbGFncyAmPSB+X0NMS0RNX0ZMQUdfSFdTVVBfRU5BQkxFRDsKIAlyZXQgPSBhcmNoX2Nsa2RtLT5jbGtkbV93YWtldXAoY2xrZG0pOworCXJldCB8PSBwd3JkbV9zdGF0ZV9zd2l0Y2goY2xrZG0tPnB3cmRtLnB0cik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrZG0tPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODE4LDYgKzgxOSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa2RtLT5sb2NrLCBmbGFncyk7CiAJY2xrZG0tPl9mbGFncyAmPSB+X0NMS0RNX0ZMQUdfSFdTVVBfRU5BQkxFRDsKIAlhcmNoX2Nsa2RtLT5jbGtkbV9kZW55X2lkbGUoY2xrZG0pOworCXB3cmRtX3N0YXRlX3N3aXRjaChjbGtkbS0+cHdyZG0ucHRyKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtkbS0+bG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtaW5zdDQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oCmluZGV4IGYyZWE2NDUuLmEwMThhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21pbnN0NDR4eC5oCkBAIC0xOCwxMyArMTgsMzYgQEAKIGV4dGVybiB2b2lkIG9tYXA0X2NtaW5zdF9jbGtkbV9mb3JjZV93YWtldXAodTggcGFydCwgczE2IGluc3QsIHUxNiBjZG9mZnMpOwogCiBleHRlcm4gaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9yZWFkeSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywgdTE2IGNsa2N0cmxfb2Zmcyk7Ci1leHRlcm4gaW50IG9tYXA0X2NtaW5zdF93YWl0X21vZHVsZV9pZGxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKTsKKworIyBpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorZXh0ZXJuIGludCBvbWFwNF9jbWluc3Rfd2FpdF9tb2R1bGVfaWRsZSh1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKKwkJCQkJIHUxNiBjbGtjdHJsX29mZnMpOwogCiBleHRlcm4gdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwgczE2IGNkb2ZmcywKIAkJCQkgICAgICAgdTE2IGNsa2N0cmxfb2Zmcyk7CiBleHRlcm4gdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2Rpc2FibGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCiAJCQkJCXUxNiBjbGtjdHJsX29mZnMpOwogCisjIGVsc2UKKworc3RhdGljIGlubGluZSBpbnQgb21hcDRfY21pbnN0X3dhaXRfbW9kdWxlX2lkbGUodTggcGFydCwgdTE2IGluc3QsIHMxNiBjZG9mZnMsCisJCQkJCXUxNiBjbGtjdHJsX29mZnMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwNF9jbWluc3RfbW9kdWxlX2VuYWJsZSh1OCBtb2RlLCB1OCBwYXJ0LCB1MTYgaW5zdCwKKwkJCQlzMTYgY2RvZmZzLCB1MTYgY2xrY3RybF9vZmZzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDRfY21pbnN0X21vZHVsZV9kaXNhYmxlKHU4IHBhcnQsIHUxNiBpbnN0LCBzMTYgY2RvZmZzLAorCQkJCSB1MTYgY2xrY3RybF9vZmZzKQoreworfQorCisjIGVuZGlmCisKIC8qCiAgKiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugd291bGQgbm90IGV4cG9ydCB0aGVzZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLAogICogYnV0IHRoaXMgd2lsbCBwcm9iYWJseSB0YWtlIHNvbWUgdGltZSB0byBmaXggcHJvcGVybHkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGlzcGxheS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMKaW5kZXggNTQzZmNiOC4uYTViN2EyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgorI2luY2x1ZGUgPHBsYXQvb21hcC1wbS5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2Rpc3BsYXlfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgID0gIm9tYXBkc3MiLApAQCAtNDIsMjAgKzQzLDYgQEAKIAl9LAogfTsKIAotLyogb2hfY29yZSBpcyB1c2VkIGZvciBnZXR0aW5nIG9wdC1jbG9ja3MgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZAkqb2hfY29yZTsKLQotc3RhdGljIGJvb2wgb3B0X2Nsb2NrX2F2YWlsYWJsZShjb25zdCBjaGFyICpjbGtfcm9sZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBvaF9jb3JlLT5vcHRfY2xrc19jbnQ7IGkrKykgewotCQlpZiAoIXN0cmNtcChvaF9jb3JlLT5vcHRfY2xrc1tpXS5yb2xlLCBjbGtfcm9sZSkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdHJ1Y3Qgb21hcF9kc3NfaHdtb2RfZGF0YSB7CiAJY29uc3QgY2hhciAqb2hfbmFtZTsKIAljb25zdCBjaGFyICpkZXZfbmFtZTsKQEAgLTEwOSwxNiArOTYsOSBAQAogCQlvaF9jb3VudCA9IEFSUkFZX1NJWkUob21hcDRfZHNzX2h3bW9kX2RhdGEpOwogCX0KIAotCS8qIG9wdF9jbGtzIGFyZSBhbHdheXMgYXNzb2NpYXRlZCB3aXRoIGRzcyBod21vZCAqLwotCW9oX2NvcmUgPSBvbWFwX2h3bW9kX2xvb2t1cCgiZHNzX2NvcmUiKTsKLQlpZiAoIW9oX2NvcmUpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3QgbG9vayB1cCBkc3NfY29yZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlwZGF0YS5ib2FyZF9kYXRhID0gYm9hcmRfZGF0YTsKLQlwZGF0YS5ib2FyZF9kYXRhLT5nZXRfbGFzdF9vZmZfb25fdHJhbnNhY3Rpb25faWQgPSBOVUxMOwotCXBkYXRhLm9wdF9jbG9ja19hdmFpbGFibGUgPSBvcHRfY2xvY2tfYXZhaWxhYmxlOworCXBkYXRhLmJvYXJkX2RhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQgPQorCQlvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50OwogCiAJZm9yIChpID0gMDsgaSA8IG9oX2NvdW50OyBpKyspIHsKIAkJb2ggPSBvbWFwX2h3bW9kX2xvb2t1cChjdXJyX2Rzc19od21vZFtpXS5vaF9uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGM3ZmIyMmEuLjY1NWU5NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtODIxLDExICs4MjEsMTAgQEAKIAlpZiAoIW9tYXBfbXV4X29wdGlvbnMpCiAJCXJldHVybjsKIAotCW9wdGlvbnMgPSBrbWFsbG9jKHN0cmxlbihvbWFwX211eF9vcHRpb25zKSArIDEsIEdGUF9LRVJORUwpOworCW9wdGlvbnMgPSBrc3RyZHVwKG9tYXBfbXV4X29wdGlvbnMsIEdGUF9LRVJORUwpOwogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuOwogCi0Jc3RyY3B5KG9wdGlvbnMsIG9tYXBfbXV4X29wdGlvbnMpOwogCW5leHRfb3B0ID0gb3B0aW9uczsKIAogCXdoaWxlICgodG9rZW4gPSBzdHJzZXAoJm5leHRfb3B0LCAiLCIpKSAhPSBOVUxMKSB7CkBAIC04NTUsMjQgKzg1NCwxOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX01PREVTOyBpKyspIHsKIAkJaWYgKHNyYy0+bXV4bmFtZXNbaV0pIHsKLQkJCWRzdC0+bXV4bmFtZXNbaV0gPQotCQkJCWttYWxsb2Moc3RybGVuKHNyYy0+bXV4bmFtZXNbaV0pICsgMSwKLQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlkc3QtPm11eG5hbWVzW2ldID0ga3N0cmR1cChzcmMtPm11eG5hbWVzW2ldLAorCQkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWRzdC0+bXV4bmFtZXNbaV0pCiAJCQkJZ290byBmcmVlOwotCQkJc3RyY3B5KGRzdC0+bXV4bmFtZXNbaV0sIHNyYy0+bXV4bmFtZXNbaV0pOwogCQl9CiAJfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTVVYX05SX1NJREVTOyBpKyspIHsKIAkJaWYgKHNyYy0+YmFsbHNbaV0pIHsKLQkJCWRzdC0+YmFsbHNbaV0gPQotCQkJCWttYWxsb2Moc3RybGVuKHNyYy0+YmFsbHNbaV0pICsgMSwKLQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlkc3QtPmJhbGxzW2ldID0ga3N0cmR1cChzcmMtPmJhbGxzW2ldLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghZHN0LT5iYWxsc1tpXSkKIAkJCQlnb3RvIGZyZWU7Ci0JCQlzdHJjcHkoZHN0LT5iYWxsc1tpXSwgc3JjLT5iYWxsc1tpXSk7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCAxNjc0M2M3Li40MDgxOTNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0xOTIsNiArMTkyLDcgQEAKIAkJLnBhX2VuZAkJPSBPTUFQMjQzWF9IU19CQVNFICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MJCT0gQUREUl9UWVBFX1JUCiAJfSwKKwl7IH0KIH07CiAKIC8qICBsNF9jb3JlIC0+dXNiaHNvdGcgIGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCmluZGV4IDNmZWIzNTkuLjQ3MmJmMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKQEAgLTEzMCw3ICsxMzAsNiBAQAogCQl9IGVsc2UgewogCQkJaHdzdXAgPSBjbGtkbV9pbl9od3N1cChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdKTsKIAkJCWNsa2RtX3dha2V1cChwd3JkbS0+cHdyZG1fY2xrZG1zWzBdKTsKLQkJCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CiAJCQlzbGVlcF9zd2l0Y2ggPSBGT1JDRVdBS0VVUF9TV0lUQ0g7CiAJCX0KIAl9CkBAIC0xNTYsNyArMTU1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwd3JkbV93YWl0X3RyYW5zaXRpb24ocHdyZG0pOwogCXB3cmRtX3N0YXRlX3N3aXRjaChwd3JkbSk7CiBlcnI6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCA5YWYwODQ3Li5lZjcxZmRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0xOTUsMjggKzE5NSwzNSBAQAogCiAvKioKICAqIHB3cmRtX2luaXQgLSBzZXQgdXAgdGhlIHBvd2VyZG9tYWluIGxheWVyCi0gKiBAcHdyZG1fbGlzdDogYXJyYXkgb2Ygc3RydWN0IHBvd2VyZG9tYWluIHBvaW50ZXJzIHRvIHJlZ2lzdGVyCisgKiBAcHdyZG1zOiBhcnJheSBvZiBzdHJ1Y3QgcG93ZXJkb21haW4gcG9pbnRlcnMgdG8gcmVnaXN0ZXIKICAqIEBjdXN0b21fZnVuY3M6IGZ1bmMgcG9pbnRlcnMgZm9yIGFyY2ggc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zCiAgKgotICogTG9vcCB0aHJvdWdoIHRoZSBhcnJheSBvZiBwb3dlcmRvbWFpbnMgQHB3cmRtX2xpc3QsIHJlZ2lzdGVyaW5nIGFsbAotICogdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IENQVS4gSWYgcHdyZG1fbGlzdCBpcyBzdXBwbGllZAotICogYW5kIG5vdCBudWxsLCBhbGwgb2YgdGhlIHJlZmVyZW5jZWQgcG93ZXJkb21haW5zIHdpbGwgYmUKLSAqIHJlZ2lzdGVyZWQuICBObyByZXR1cm4gdmFsdWUuICBYWFggcHdyZG1fbGlzdCBpcyBub3QgcmVhbGx5IGEKLSAqICJsaXN0IjsgaXQgaXMgYW4gYXJyYXkuICBSZW5hbWUgYXBwcm9wcmlhdGVseS4KKyAqIExvb3AgdGhyb3VnaCB0aGUgYXJyYXkgb2YgcG93ZXJkb21haW5zIEBwd3JkbXMsIHJlZ2lzdGVyaW5nIGFsbAorICogdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IENQVS4gIEFsc28sIHByb2dyYW0gYWxsCisgKiBwb3dlcmRvbWFpbiB0YXJnZXQgc3RhdGUgYXMgT047IHRoaXMgaXMgdG8gcHJldmVudCBkb21haW5zIGZyb20KKyAqIGhpdHRpbmcgbG93IHBvd2VyIHN0YXRlcyAoaWYgYm9vdGxvYWRlciBoYXMgdGFyZ2V0IHN0YXRlcyBzZXQgdG8KKyAqIHNvbWV0aGluZyBvdGhlciB0aGFuIE9OKSBhbmQgcG90ZW50aWFsbHkgZXZlbiBsb3NpbmcgY29udGV4dCB3aGlsZQorICogUE0gaXMgbm90IGZ1bGx5IGluaXRpYWxpemVkLiAgVGhlIFBNIGxhdGUgaW5pdCBjb2RlIGNhbiB0aGVuIHByb2dyYW0KKyAqIHRoZSBkZXNpcmVkIHRhcmdldCBzdGF0ZSBmb3IgYWxsIHRoZSBwb3dlciBkb21haW5zLiAgTm8gcmV0dXJuCisgKiB2YWx1ZS4KICAqLwotdm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QsIHN0cnVjdCBwd3JkbV9vcHMgKmN1c3RvbV9mdW5jcykKK3ZvaWQgcHdyZG1faW5pdChzdHJ1Y3QgcG93ZXJkb21haW4gKipwd3JkbXMsIHN0cnVjdCBwd3JkbV9vcHMgKmN1c3RvbV9mdW5jcykKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKipwID0gTlVMTDsKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnRlbXBfcDsKIAogCWlmICghY3VzdG9tX2Z1bmNzKQogCQlXQVJOKDEsICJwb3dlcmRvbWFpbjogTm8gY3VzdG9tIHB3cmRtIGZ1bmN0aW9ucyByZWdpc3RlcmVkXG4iKTsKIAllbHNlCiAJCWFyY2hfcHdyZG0gPSBjdXN0b21fZnVuY3M7CiAKLQlpZiAocHdyZG1fbGlzdCkgewotCQlmb3IgKHAgPSBwd3JkbV9saXN0OyAqcDsgcCsrKQorCWlmIChwd3JkbXMpIHsKKwkJZm9yIChwID0gcHdyZG1zOyAqcDsgcCsrKQogCQkJX3B3cmRtX3JlZ2lzdGVyKCpwKTsKIAl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfcCwgJnB3cmRtX2xpc3QsIG5vZGUpCisJCXB3cmRtX3NldF9uZXh0X3B3cnN0KHRlbXBfcCwgUFdSRE1fUE9XRVJfT04pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwppbmRleCAyY2UyZmI3Li4zNGMwMWE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJCXNyX3YyX2Rpc2FibGUoc3IpOwogCX0KIAotCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnNyLT5wZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZCgmc3ItPnBkZXYtPmRldik7CiB9CiAKIC8qKgpAQCAtODYwLDYgKzg2MCw3IEBACiAJaXJxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfaXJxX3NhZmUoJnBkZXYtPmRldik7CiAKIAlzcl9pbmZvLT5wZGV2ID0gcGRldjsKIAlzcl9pbmZvLT5zcmlkID0gcGRldi0+aWQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLmMKaW5kZXggZTk2NDA3Mi4uY2YxZGU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXIuYwpAQCAtMjkzLDcgKzI5Myw4IEBACiAJcHJfaW5mbygiT01BUCBjbG9ja3NvdXJjZTogR1BUSU1FUiVkIGF0ICVsdSBIelxuIiwKIAkJZ3B0aW1lcl9pZCwgY2xrc3JjLnJhdGUpOwogCi0JX19vbWFwX2RtX3RpbWVyX2xvYWRfc3RhcnQoY2xrc3JjLmlvX2Jhc2UsIE9NQVBfVElNRVJfQ1RSTF9TVCwgMCwgMSk7CisJX19vbWFwX2RtX3RpbWVyX2xvYWRfc3RhcnQoY2xrc3JjLmlvX2Jhc2UsCisJCQlPTUFQX1RJTUVSX0NUUkxfU1QgfCBPTUFQX1RJTUVSX0NUUkxfQVIsIDAsIDEpOwogCWluaXRfc2NoZWRfY2xvY2soJmNkLCBkbXRpbWVyX3VwZGF0ZV9zY2hlZF9jbG9jaywgMzIsIGNsa3NyYy5yYXRlKTsKIAogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZ3B0LCBjbGtzcmMucmF0ZSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3R3bC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdHdsLWNvbW1vbi5jCmluZGV4IDI1NDMzNDIuLmRhYTA1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdHdsLWNvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdHdsLWNvbW1vbi5jCkBAIC00OCwxNCArNDgsNyBAQAogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhidXMsIGNsa3JhdGUsICZwbWljX2kyY19ib2FyZF9pbmZvLCAxKTsKIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIG9tYXA0X3VzYl9wZGF0YSA9IHsKLQkucGh5X2luaXQJPSBvbWFwNDQzMF9waHlfaW5pdCwKLQkucGh5X2V4aXQJPSBvbWFwNDQzMF9waHlfZXhpdCwKLQkucGh5X3Bvd2VyCT0gb21hcDQ0MzBfcGh5X3Bvd2VyLAotCS5waHlfc2V0X2Nsb2NrCT0gb21hcDQ0MzBfcGh5X3NldF9jbGssCi0JLnBoeV9zdXNwZW5kCT0gb21hcDQ0MzBfcGh5X3N1c3BlbmQsCi19OwotCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSBvbWFwM191c2JfcGRhdGEgPSB7CiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CkBAIC0xMjIsNiArMTE1LDQ1IEBACiAJLmNvbnN1bWVyX3N1cHBsaWVzCQk9IG9tYXAzX3ZwbGwyX3N1cHBsaWVzLAogfTsKIAordm9pZCBfX2luaXQgb21hcDNfcG1pY19nZXRfY29uZmlnKHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgKnBtaWNfZGF0YSwKKwkJCQkgIHUzMiBwZGF0YV9mbGFncywgdTMyIHJlZ3VsYXRvcnNfZmxhZ3MpCit7CisJaWYgKCFwbWljX2RhdGEtPmlycV9iYXNlKQorCQlwbWljX2RhdGEtPmlycV9iYXNlID0gVFdMNDAzMF9JUlFfQkFTRTsKKwlpZiAoIXBtaWNfZGF0YS0+aXJxX2VuZCkKKwkJcG1pY19kYXRhLT5pcnFfZW5kID0gVFdMNDAzMF9JUlFfRU5EOworCisJLyogQ29tbW9uIHBsYXRmb3JtIGRhdGEgY29uZmlndXJhdGlvbnMgKi8KKwlpZiAocGRhdGFfZmxhZ3MgJiBUV0xfQ09NTU9OX1BEQVRBX1VTQiAmJiAhcG1pY19kYXRhLT51c2IpCisJCXBtaWNfZGF0YS0+dXNiID0gJm9tYXAzX3VzYl9wZGF0YTsKKworCWlmIChwZGF0YV9mbGFncyAmIFRXTF9DT01NT05fUERBVEFfQkNJICYmICFwbWljX2RhdGEtPmJjaSkKKwkJcG1pY19kYXRhLT5iY2kgPSAmb21hcDNfYmNpX3BkYXRhOworCisJaWYgKHBkYXRhX2ZsYWdzICYgVFdMX0NPTU1PTl9QREFUQV9NQURDICYmICFwbWljX2RhdGEtPm1hZGMpCisJCXBtaWNfZGF0YS0+bWFkYyA9ICZvbWFwM19tYWRjX3BkYXRhOworCisJaWYgKHBkYXRhX2ZsYWdzICYgVFdMX0NPTU1PTl9QREFUQV9BVURJTyAmJiAhcG1pY19kYXRhLT5hdWRpbykKKwkJcG1pY19kYXRhLT5hdWRpbyA9ICZvbWFwM19hdWRpb19wZGF0YTsKKworCS8qIENvbW1vbiByZWd1bGF0b3IgY29uZmlndXJhdGlvbnMgKi8KKwlpZiAocmVndWxhdG9yc19mbGFncyAmIFRXTF9DT01NT05fUkVHVUxBVE9SX1ZEQUMgJiYgIXBtaWNfZGF0YS0+dmRhYykKKwkJcG1pY19kYXRhLT52ZGFjID0gJm9tYXAzX3ZkYWNfaWRhdGE7CisKKwlpZiAocmVndWxhdG9yc19mbGFncyAmIFRXTF9DT01NT05fUkVHVUxBVE9SX1ZQTEwyICYmICFwbWljX2RhdGEtPnZwbGwyKQorCQlwbWljX2RhdGEtPnZwbGwyID0gJm9tYXAzX3ZwbGwyX2lkYXRhOworfQorI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIG9tYXA0X3VzYl9wZGF0YSA9IHsKKwkucGh5X2luaXQJPSBvbWFwNDQzMF9waHlfaW5pdCwKKwkucGh5X2V4aXQJPSBvbWFwNDQzMF9waHlfZXhpdCwKKwkucGh5X3Bvd2VyCT0gb21hcDQ0MzBfcGh5X3Bvd2VyLAorCS5waHlfc2V0X2Nsb2NrCT0gb21hcDQ0MzBfcGh5X3NldF9jbGssCisJLnBoeV9zdXNwZW5kCT0gb21hcDQ0MzBfcGh5X3N1c3BlbmQsCit9OworCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDRfdmRhY19pZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5taW5fdVYJCQk9IDE4MDAwMDAsCkBAIC0yNzMsMzIgKzMwNSw0IEBACiAJICAgICFwbWljX2RhdGEtPmNsazMya2cpCiAJCXBtaWNfZGF0YS0+Y2xrMzJrZyA9ICZvbWFwNF9jbGszMmtnX2lkYXRhOwogfQotCi12b2lkIF9faW5pdCBvbWFwM19wbWljX2dldF9jb25maWcoc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSAqcG1pY19kYXRhLAotCQkJCSAgdTMyIHBkYXRhX2ZsYWdzLCB1MzIgcmVndWxhdG9yc19mbGFncykKLXsKLQlpZiAoIXBtaWNfZGF0YS0+aXJxX2Jhc2UpCi0JCXBtaWNfZGF0YS0+aXJxX2Jhc2UgPSBUV0w0MDMwX0lSUV9CQVNFOwotCWlmICghcG1pY19kYXRhLT5pcnFfZW5kKQotCQlwbWljX2RhdGEtPmlycV9lbmQgPSBUV0w0MDMwX0lSUV9FTkQ7Ci0KLQkvKiBDb21tb24gcGxhdGZvcm0gZGF0YSBjb25maWd1cmF0aW9ucyAqLwotCWlmIChwZGF0YV9mbGFncyAmIFRXTF9DT01NT05fUERBVEFfVVNCICYmICFwbWljX2RhdGEtPnVzYikKLQkJcG1pY19kYXRhLT51c2IgPSAmb21hcDNfdXNiX3BkYXRhOwotCi0JaWYgKHBkYXRhX2ZsYWdzICYgVFdMX0NPTU1PTl9QREFUQV9CQ0kgJiYgIXBtaWNfZGF0YS0+YmNpKQotCQlwbWljX2RhdGEtPmJjaSA9ICZvbWFwM19iY2lfcGRhdGE7Ci0KLQlpZiAocGRhdGFfZmxhZ3MgJiBUV0xfQ09NTU9OX1BEQVRBX01BREMgJiYgIXBtaWNfZGF0YS0+bWFkYykKLQkJcG1pY19kYXRhLT5tYWRjID0gJm9tYXAzX21hZGNfcGRhdGE7Ci0KLQlpZiAocGRhdGFfZmxhZ3MgJiBUV0xfQ09NTU9OX1BEQVRBX0FVRElPICYmICFwbWljX2RhdGEtPmF1ZGlvKQotCQlwbWljX2RhdGEtPmF1ZGlvID0gJm9tYXAzX2F1ZGlvX3BkYXRhOwotCi0JLyogQ29tbW9uIHJlZ3VsYXRvciBjb25maWd1cmF0aW9ucyAqLwotCWlmIChyZWd1bGF0b3JzX2ZsYWdzICYgVFdMX0NPTU1PTl9SRUdVTEFUT1JfVkRBQyAmJiAhcG1pY19kYXRhLT52ZGFjKQotCQlwbWljX2RhdGEtPnZkYWMgPSAmb21hcDNfdmRhY19pZGF0YTsKLQotCWlmIChyZWd1bGF0b3JzX2ZsYWdzICYgVFdMX0NPTU1PTl9SRUdVTEFUT1JfVlBMTDIgJiYgIXBtaWNfZGF0YS0+dnBsbDIpCi0JCXBtaWNfZGF0YS0+dnBsbDIgPSAmb21hcDNfdnBsbDJfaWRhdGE7Ci19CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uaAppbmRleCBmMmIyYjM1Li4zZTU0OTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5oCkBAIC01MSw3ICs1MSw3IEBACiB2b2lkIG9yaW9uNXhfcGNpX3NldF9jYXJkYnVzX21vZGUodm9pZCk7CiBpbnQgb3Jpb241eF9wY2lfc3lzX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKTsKIHN0cnVjdCBwY2lfYnVzICpvcmlvbjV4X3BjaV9zeXNfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpOwotaW50IG9yaW9uNXhfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKK2ludCBvcmlvbjV4X3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiAKIHN0cnVjdCBtYWNoaW5lX2Rlc2M7CiBzdHJ1Y3QgbWVtaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kYjg4ZjUyODEtc2V0dXAuYwppbmRleCBmOTVkM2NiLi5hM2UzZTllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZGI4OGY1MjgxLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RiODhmNTI4MS1zZXR1cC5jCkBAIC0yMzcsNyArMjM3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGRiODhmNTI4MV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBkYjg4ZjUyODFfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCmluZGV4IDg1NWUwZTcuLmMxMDU1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKQEAgLTcwLDcgKzcwLDcgQEAKICAqIFBDSSBzZXR1cAogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGRuczMyM19wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBkbnMzMjNfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9rdXJvYm94X3Byby1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2t1cm9ib3hfcHJvLXNldHVwLmMKaW5kZXggYzBlYjY0Ni4uMDAzODEyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2t1cm9ib3hfcHJvLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2t1cm9ib3hfcHJvLXNldHVwLmMKQEAgLTExOSw3ICsxMTksOCBAQAogICogUENJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBfX2luaXQga3Vyb2JveF9wcm9fcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQga3Vyb2JveF9wcm9fcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21zczItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9tc3MyLXNldHVwLmMKaW5kZXggNTkyNjNiNy4uZWYzYmI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L21zczItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbXNzMi1zZXR1cC5jCkBAIC03Myw3ICs3Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUENJIHNldHVwCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgX19pbml0IG1zczJfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgbXNzMl9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jCmluZGV4IGY2NDk2NWQuLmJjNGE5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxwbGF0L3BjaWUuaD4KQEAgLTU4OSw3ICs1OTAsNyBAQAogCXJldHVybiBidXM7CiB9CiAKLWludCBfX2luaXQgb3Jpb241eF9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IG9yaW9uNXhfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBidXMgPSBkZXYtPmJ1cy0+bnVtYmVyOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCmluZGV4IDllZWM3YzIuLjI5MWQyMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLXJkODhmNTE4MWxfZnhvX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3JkODhmNTE4MWxfZnhvX3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwppbmRleCAwY2M5MGJiZi4uM2YwMjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2luaXQKLXJkODhmNTE4MWxfZ2VfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorcmQ4OGY1MTgxbF9nZV9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4Mi1zZXR1cC5jCmluZGV4IDQ4ZGEzOWIuLjI3ZmQzOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgyLXNldHVwLmMKQEAgLTE3Miw3ICsxNzIsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgcmQ4OGY1MTgyX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHJkODhmNTE4Ml9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LAorCXU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdGVyYXN0YXRpb25fcHJvMi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RlcmFzdGF0aW9uX3BybzItc2V0dXAuYwppbmRleCAyOWNlODI2Li5hMzRlNGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdGVyYXN0YXRpb25fcHJvMi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90ZXJhc3RhdGlvbl9wcm8yLXNldHVwLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgdHNwMl9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCB0c3AyX3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHMyMDktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jCmluZGV4IDQ3MTYyZmQuLmM5ODMxNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czIwOS1zZXR1cC5jCkBAIC0xNDMsNyArMTQzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHFuYXBfdHMyMDlfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgcW5hcF90czIwOV9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LAorCXU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM0MDktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czQwOS1zZXR1cC5jCmluZGV4IDVhYWNjN2EuLmNjMzNiMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czQwOS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czQwOS1zZXR1cC5jCkBAIC0xMjEsNyArMTIxLDggQEAKICAqIFBDSQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IHFuYXBfdHM0MDlfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgcW5hcF90czQwOV9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LAorCXU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd25yODU0dC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3ducjg1NHQtc2V0dXAuYwppbmRleCA0NDRhMWM3Li4yNjUzNTk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd25yODU0dC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93bnI4NTR0LXNldHVwLmMKQEAgLTEzMyw3ICsxMzMsOCBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd25yODU0dF9ub3JfZmxhc2gpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB3bnI4NTR0X3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHducjg1NHRfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJaW50IGlycTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKaW5kZXggZDE5NTJiZS4uMjUxZWYxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCkBAIC0yMjEsNyArMjIxLDggQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndydDM1MG5fdjJfYnV0dG9uX2RldmljZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHdydDM1MG5fdjJfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQorc3RhdGljIGludCBfX2luaXQgd3J0MzUwbl92Ml9wY2lfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LAorCXU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXByaW1hMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvY2xvY2suYwppbmRleCBmOWEyYWFmLi42MTVhNGU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXByaW1hMi9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHJpbWEyL2Nsb2NrLmMKQEAgLTQ4MSw2ICs0ODEsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjbGtjX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2lyZixwcmltYTItY2xrYyIgfSwKKwl7fSwKIH07CiAKIHZvaWQgX19pbml0IHNpcmZzb2Nfb2ZfY2xrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHJpbWEyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvaXJxLmMKaW5kZXggYzM0MDRjYi4uN2FmMjU0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wcmltYTIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvaXJxLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgaW50Y19pZHNbXSAgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi1pbnRjIiB9LAorCXt9LAogfTsKIAogdm9pZCBfX2luaXQgc2lyZnNvY19vZl9pcnFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wcmltYTIvcnN0Yy5jIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvcnN0Yy5jCmluZGV4IGQwNzQ3ODYuLjQ5MmNmYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHJpbWEyL3JzdGMuYworKysgYi9hcmNoL2FybS9tYWNoLXByaW1hMi9yc3RjLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcnN0Y19pZHNbXSAgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaXJmLHByaW1hMi1yc3RjIiB9LAorCXt9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2lyZnNvY19vZl9yc3RjX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHJpbWEyL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXByaW1hMi90aW1lci5jCmluZGV4IDQ0MDI3ZjMuLmVkN2VjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHJpbWEyL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wcmltYTIvdGltZXIuYwpAQCAtMTkwLDYgKzE5MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpbWVyX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2lyZixwcmltYTItdGljayIgfSwKKwl7fSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaXJmc29jX29mX3RpbWVyX21hcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKaW5kZXggNGViNzY2MC4uNmJmNDc5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAjZW5kaWYKIAogLyogUENJIElSUSBtYXBwaW5nKi8KLXN0YXRpYyBpbnQgX19pbml0IGNteDJ4eF9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBjbXgyeHhfcGNpX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYTMwZjJlMy4uNjY1N2ZmMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC00NCw2ICs0NCw3IEBACiAJICovCiAJaWYgKHJlYWx2aWV3X3Jlc2V0KQogCQlyZWFsdmlld19yZXNldChtb2RlKTsKKwlkc2IoKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1jcmFnNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtY3JhZzY0MTAuYwppbmRleCA5MDI2MjQ5Li5hZjBjMmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1jcmFnNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLWNyYWc2NDEwLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2luY2x1ZGUgPHNvdW5kL3dtODkxNS5oPgorI2luY2x1ZGUgPHNvdW5kL3dtODk5Ni5oPgogI2luY2x1ZGUgPHNvdW5kL3dtODk2Mi5oPgogI2luY2x1ZGUgPHNvdW5kL3dtOTA4MS5oPgogCkBAIC02MTQsNyArNjE0LDcgQEAKIAkuZGlzYWJsZV90b3VjaCA9IHRydWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHdtODkxNV9yZXR1bmVfbW9iaWxlX2NvbmZpZyB3bTg5MTVfcmV0dW5lW10gPSB7CitzdGF0aWMgc3RydWN0IHdtODk5Nl9yZXR1bmVfbW9iaWxlX2NvbmZpZyB3bTg5OTZfcmV0dW5lW10gPSB7CiAJewogCQkubmFtZSA9ICJTdWIgTFBGIiwKIAkJLnJhdGUgPSA0ODAwMCwKQEAgLTYzNSwxMiArNjM1LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgd204OTE1X3BkYXRhIHdtODkxNV9wZGF0YSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB3bTg5OTZfcGRhdGEgd204OTk2X3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmxkb19lbmEgPSBTM0M2NFhYX0dQTig3KSwKIAkuZ3Bpb19iYXNlID0gQ09ERUNfR1BJT19CQVNFLAogCS5taWNkZXRfZGVmID0gMSwKLQkuaW5sX21vZGUgPSBXTTg5MTVfRElGRkVSUkVOVElBTF8xLAotCS5pbnJfbW9kZSA9IFdNODkxNV9ESUZGRVJSRU5USUFMXzEsCisJLmlubF9tb2RlID0gV004OTk2X0RJRkZFUlJFTlRJQUxfMSwKKwkuaW5yX21vZGUgPSBXTTg5OTZfRElGRkVSUkVOVElBTF8xLAogCiAJLmlycV9mbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkcsCiAKQEAgLTY1Miw4ICs2NTIsOCBAQAogCQkweDAyMGUsIC8qIEdQSU81ID09IENMS09VVCAqLwogCX0sCiAKLQkucmV0dW5lX21vYmlsZV9jZmdzID0gd204OTE1X3JldHVuZSwKLQkubnVtX3JldHVuZV9tb2JpbGVfY2ZncyA9IEFSUkFZX1NJWkUod204OTE1X3JldHVuZSksCisJLnJldHVuZV9tb2JpbGVfY2ZncyA9IHdtODk5Nl9yZXR1bmUsCisJLm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MgPSBBUlJBWV9TSVpFKHdtODk5Nl9yZXR1bmUpLAogfTsKIAogc3RhdGljIHN0cnVjdCB3bTg5NjJfcGRhdGEgd204OTYyX3BkYXRhIF9faW5pdGRhdGEgPSB7CkBAIC02NzksOCArNjc5LDggQEAKIAkgIC5wbGF0Zm9ybV9kYXRhID0gJmdsZW5mYXJjbGFzX3BtaWNfcGRhdGEgfSwKIAogCXsgSTJDX0JPQVJEX0lORk8oIndtMTI1MC1ldjEiLCAweDI3KSB9LAotCXsgSTJDX0JPQVJEX0lORk8oIndtODkxNSIsIDB4MWEpLAotCSAgLnBsYXRmb3JtX2RhdGEgPSAmd204OTE1X3BkYXRhLAorCXsgSTJDX0JPQVJEX0lORk8oIndtODk5NiIsIDB4MWEpLAorCSAgLnBsYXRmb3JtX2RhdGEgPSAmd204OTk2X3BkYXRhLAogCSAgLmlycSA9IEdMRU5GQVJDTEFTX1BNSUNfSVJRX0JBU0UgKyBXTTgzMVhfSVJRX0dQSU9fMiwKIAl9LAogCXsgSTJDX0JPQVJEX0lORk8oIndtOTA4MSIsIDB4NmMpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvcG0uYwppbmRleCA4YmFkNjQzLi4wNTVlMjg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvcG0uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjR4MC9pcnEtZWludC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2lycS1laW50LmMKaW5kZXggNjllZDQ1NC4uZmU3MzgwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2lycS1laW50LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCX0KIAogCWN0ID0gZ2MtPmNoaXBfdHlwZXM7Ci0JY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19hY2s7CisJY3QtPmNoaXAuaXJxX2FjayA9IGlycV9nY19hY2tfc2V0X2JpdDsKIAljdC0+Y2hpcC5pcnFfbWFzayA9IGlycV9nY19tYXNrX3NldF9iaXQ7CiAJY3QtPmNoaXAuaXJxX3VubWFzayA9IGlycV9nY19tYXNrX2Nscl9iaXQ7CiAJY3QtPmNoaXAuaXJxX3NldF90eXBlID0gczVwNjR4MF9pcnFfZWludF9zZXRfdHlwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3BtLmMKaW5kZXggMzA5ZTM4OC4uZjE0OWQyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3BtLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlTQVZFX0lURU0oUzNDMjQxMF9UQ05UTygwKSksCiB9OwogCi12b2lkIHM1cHYyMTBfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHM1cHYyMTBfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCmluZGV4IDVmYzA3NGYuLmRkMzlmZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxtYWNoL25hbm9lbmdpbmUuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmFub19sb2NrKTsKIApAQCAtMTIyLDcgKzEyMyw4IEBACiAJLndyaXRlCT0gbmFub2VuZ2luZV93cml0ZV9jb25maWcsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfbmFub2VuZ2luZV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9uYW5vZW5naW5lX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKKwl1OCBwaW4pCiB7CiAJcmV0dXJuIE5BTk9FTkdJTkVfSVJRX0dQSU9fUENJOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9wY2kuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvcGNpLmMKaW5kZXggOTJkNzIyNy4uN2NiNzlhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL3BjaS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotc3RhdGljIGludCBfX2luaXQgc2hhcmtfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBzaGFya19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwKQogCQlpZiAoZGV2LT5kZXZmbiA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKaW5kZXggY2U1YzI1MS4uY2RmZGQ2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCkBAIC0zNDEsNiArMzQxLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGlfaW5mbyBzZGhpMF9pbmZvID0gewogCS5kbWFfc2xhdmVfdHgJPSBTSERNQV9TTEFWRV9TREhJMF9UWCwKIAkuZG1hX3NsYXZlX3J4CT0gU0hETUFfU0xBVkVfU0RISTBfUlgsCisJLnRtaW9fZmxhZ3MJPSBUTUlPX01NQ19IQVNfSURMRV9XQUlULAogCS50bWlvX2NhcHMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCwKIAkudG1pb19vY3JfbWFzawk9IE1NQ19WRERfMjdfMjggfCBNTUNfVkREXzI4XzI5LAogfTsKQEAgLTM4Miw3ICszODMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2hfc2RoaTFfaW5mbyA9IHsKLQkudG1pb19mbGFncwk9IFRNSU9fTU1DX1dSUFJPVEVDVF9ESVNBQkxFLAorCS50bWlvX2ZsYWdzCT0gVE1JT19NTUNfV1JQUk9URUNUX0RJU0FCTEUgfCBUTUlPX01NQ19IQVNfSURMRV9XQUlULAogCS50bWlvX2NhcHMJPSBNTUNfQ0FQX05PTlJFTU9WQUJMRSB8IE1NQ19DQVBfU0RJT19JUlEsCiAJLnRtaW9fb2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKIAkuc2V0X3B3cgk9IGFnNWV2bV9zZGhpMV9zZXRfcHdyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggODM3MTM4ZS4uNTIzZjYwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC05NTcsMTkgKzk1NywxNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2kyX2RldmljZSA9IHsKLQkubmFtZSAgID0gInNoLW1vYmlsZS1jc2kyIiwKLQkuaWQgICAgID0gMCwKK3N0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jb21wYW5pb24gY3NpMiA9IHsKKwkuaWQJCT0gMCwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NpMl9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IGNzaTJfcmVzb3VyY2VzLAotCS5kZXYgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmNzaTJfaW5mbywKLQl9LAorCS5wbGF0Zm9ybV9kYXRhCT0gJmNzaTJfaW5mbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHNoX21vYmlsZV9jZXVfaW5mbyA9IHsKIAkuZmxhZ3MgPSBTSF9DRVVfRkxBR19VU0VfOEJJVF9CVVMsCi0JLmNzaTJfZGV2ID0gJmNzaTJfZGV2aWNlLmRldiwKKwkuY3NpMiA9ICZjc2kyLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZXVfcmVzb3VyY2VzW10gPSB7CkBAIC0xMDEzLDcgKzEwMTAsNiBAQAogCSZsY2RjMV9kZXZpY2UsCiAJJmxjZGNfZGV2aWNlLAogCSZoZG1pX2RldmljZSwKLQkmY3NpMl9kZXZpY2UsCiAJJmNldV9kZXZpY2UsCiAJJmFwNGV2Yl9jYW1lcmEsCiAJJm1lcmFtX2RldmljZSwKQEAgLTE0MTYsNiArMTQxMiw3IEBACiAJZnNpX2luaXRfcG1fY2xvY2soKTsKIAlzaDczNzJfcG1faW5pdCgpOwogCXBtX2Nsa19hZGQoJmZzaV9kZXZpY2UuZGV2LCAic3B1MiIpOworCXBtX2Nsa19hZGQoJmxjZGMxX2RldmljZS5kZXYsICJoZG1pIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcDRldmJfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCmluZGV4IDViMzZiNmMuLjE3YzE5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKQEAgLTY0MSw2ICs2NDEsOCBAQAogCQl9LAogCQkuZHJpdmVyX3BhcmFtID0gewogCQkJLmJ1c3dhaXRfYndhaXQJPSA0LAorCQkJLmQwX3R4X2lkCT0gU0hETUFfU0xBVkVfVVNCMF9UWCwKKwkJCS5kMV9yeF9pZAk9IFNIRE1BX1NMQVZFX1VTQjBfUlgsCiAJCX0sCiAJfSwKIH07CkBAIC04MTAsNiArODEyLDggQEAKIAkJCS5idXN3YWl0X2J3YWl0CT0gNCwKIAkJCS5waXBlX3R5cGUJPSB1c2JoczFfcGlwZV9jZmcsCiAJCQkucGlwZV9zaXplCT0gQVJSQVlfU0laRSh1c2JoczFfcGlwZV9jZmcpLAorCQkJLmQwX3R4X2lkCT0gU0hETUFfU0xBVkVfVVNCMV9UWCwKKwkJCS5kMV9yeF9pZAk9IFNIRE1BX1NMQVZFX1VTQjFfUlgsCiAJCX0sCiAJfSwKIH07CkBAIC0xMTkyLDggKzExOTYsOCBAQAogfTsKIAogCi1zdGF0aWMgaW50IG1hY2tlcmVsX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgbWFja2VyZWxfY2FtZXJhX2RlbChzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpOworc3RhdGljIGludCBtYWNrZXJlbF9jYW1lcmFfYWRkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKK3N0YXRpYyB2b2lkIG1hY2tlcmVsX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwogCiBzdGF0aWMgaW50IGNhbWVyYV9zZXRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLAogCQkJICAgICAgaW50IGVuYWJsZSkKQEAgLTEyMzIsMTYgKzEyMzYsMTUgQEAKIAlzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UoJmNhbWVyYV9kZXZpY2UpOwogfQogCi1zdGF0aWMgaW50IG1hY2tlcmVsX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWFja2VyZWxfY2FtZXJhX2FkZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlyZXR1cm4gc29jX2NhbWVyYV9wbGF0Zm9ybV9hZGQoaWNsLCBkZXYsICZjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmssCisJcmV0dXJuIHNvY19jYW1lcmFfcGxhdGZvcm1fYWRkKGljZCwgJmNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluaywKIAkJCQkgICAgICAgbWFja2VyZWxfY2FtZXJhX3JlbGVhc2UsIDApOwogfQogCi1zdGF0aWMgdm9pZCBtYWNrZXJlbF9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKK3N0YXRpYyB2b2lkIG1hY2tlcmVsX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc29jX2NhbWVyYV9wbGF0Zm9ybV9kZWwoaWNsLCBjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmspOworCXNvY19jYW1lcmFfcGxhdGZvcm1fZGVsKGljZCwgY2FtZXJhX2RldmljZSwgJmNhbWVyYV9saW5rKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gc2hfbW9iaWxlX2NldV9pbmZvID0gewpAQCAtMTU4OSw2ICsxNTkyLDcgQEAKIAloZG1pX2luaXRfcG1fY2xvY2soKTsKIAlzaDczNzJfcG1faW5pdCgpOwogCXBtX2Nsa19hZGQoJmZzaV9kZXZpY2UuZGV2LCAic3B1MiIpOworCXBtX2Nsa19hZGQoJmhkbWlfbGNkY19kZXZpY2UuZGV2LCAiaGRtaSIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFja2VyZWxfdGltZXJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzY3LmMKaW5kZXggNmIxODZhZS4uNTIxOGMzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM2Ny5jCkBAIC0yNTksOSArMjU5LDYgQEAKIAlbQ01NU1RQMDAzXSA9IE1TVFAoJnJfY2xrLCBDTU1TVFBDUjAsIDMsIDApLCAvKiBLRVlTQyAqLwogfTsKIAotI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0jZGVmaW5lIENMS0RFVl9ERVZfSUQoX2lkLCBfY2xrKSB7IC5kZXZfaWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoInJfY2xrIiwgJnJfY2xrKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCmluZGV4IDkxZjU3NzkuLjY2OTc1OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpAQCAtNTAzLDE2ICs1MDMsMTcgQEAKIAkmc2g3MzcyX2ZzaWRpdmJfY2xrLAogfTsKIAotZW51bSB7IE1TVFAwMDEsCitlbnVtIHsgTVNUUDAwMSwgTVNUUDAwMCwKICAgICAgICBNU1RQMTMxLCBNU1RQMTMwLAogICAgICAgIE1TVFAxMjksIE1TVFAxMjgsIE1TVFAxMjcsIE1TVFAxMjYsIE1TVFAxMjUsCiAgICAgICAgTVNUUDExOCwgTVNUUDExNywgTVNUUDExNiwgTVNUUDExMywKICAgICAgICBNU1RQMTA2LCBNU1RQMTAxLCBNU1RQMTAwLAogICAgICAgIE1TVFAyMjMsCi0gICAgICAgTVNUUDIxOCwgTVNUUDIxNywgTVNUUDIxNiwKLSAgICAgICBNU1RQMjA3LCBNU1RQMjA2LCBNU1RQMjA0LCBNU1RQMjAzLCBNU1RQMjAyLCBNU1RQMjAxLCBNU1RQMjAwLAotICAgICAgIE1TVFAzMjksIE1TVFAzMjgsIE1TVFAzMjMsIE1TVFAzMjIsIE1TVFAzMTQsIE1TVFAzMTMsIE1TVFAzMTIsCi0gICAgICAgTVNUUDQyMywgTVNUUDQxNSwgTVNUUDQxMywgTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwNiwgTVNUUDQwMywKKyAgICAgICBNU1RQMjE4LCBNU1RQMjE3LCBNU1RQMjE2LCBNU1RQMjE0LCBNU1RQMjA4LCBNU1RQMjA3LAorICAgICAgIE1TVFAyMDYsIE1TVFAyMDUsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCisgICAgICAgTVNUUDMyOCwgTVNUUDMyMywgTVNUUDMyMiwgTVNUUDMxNCwgTVNUUDMxMywgTVNUUDMxMiwKKyAgICAgICBNU1RQNDIzLCBNU1RQNDE1LCBNU1RQNDEzLCBNU1RQNDExLCBNU1RQNDEwLCBNU1RQNDA3LCBNU1RQNDA2LAorICAgICAgIE1TVFA0MDUsIE1TVFA0MDQsIE1TVFA0MDMsIE1TVFA0MDAsCiAgICAgICAgTVNUUF9OUiB9OwogCiAjZGVmaW5lIE1TVFAoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKSBcCkBAIC01MjAsNiArNTIxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW01TVFBfTlJdID0gewogCVtNU1RQMDAxXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IwLCAxLCAwKSwgLyogSUlDMiAqLworCVtNU1RQMDAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IwLCAwLCAwKSwgLyogTVNJT0YwICovCiAJW01TVFAxMzFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAzMSwgMCksIC8qIFZFVTMgKi8KIAlbTVNUUDEzMF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDMwLCAwKSwgLyogVkVVMiAqLwogCVtNU1RQMTI5XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMjksIDApLCAvKiBWRVUxICovCkBAIC01MzgsMTQgKzU0MCwxNiBAQAogCVtNU1RQMjE4XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjIsIDE4LCAwKSwgLyogRE1BQzEgKi8KIAlbTVNUUDIxN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IyLCAxNywgMCksIC8qIERNQUMyICovCiAJW01TVFAyMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMiwgMTYsIDApLCAvKiBETUFDMyAqLworCVtNU1RQMjE0XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjIsIDE0LCAwKSwgLyogVVNCRE1BQyAqLworCVtNU1RQMjA4XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA4LCAwKSwgLyogTVNJT0YxICovCiAJW01TVFAyMDddID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDcsIDApLCAvKiBTQ0lGQTUgKi8KIAlbTVNUUDIwNl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNiwgMCksIC8qIFNDSUZCICovCisJW01TVFAyMDVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDUsIDApLCAvKiBNU0lPRjIgKi8KIAlbTVNUUDIwNF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNCwgMCksIC8qIFNDSUZBMCAqLwogCVtNU1RQMjAzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAzLCAwKSwgLyogU0NJRkExICovCiAJW01TVFAyMDJdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDIsIDApLCAvKiBTQ0lGQTIgKi8KIAlbTVNUUDIwMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMSwgMCksIC8qIFNDSUZBMyAqLwogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAwLCAwKSwgLyogU0NJRkE0ICovCi0JW01TVFAzMjldID0gTVNUUCgmcl9jbGssIFNNU1RQQ1IzLCAyOSwgMCksIC8qIENNVDEwICovCiAJW01TVFAzMjhdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1BVXSwgU01TVFBDUjMsIDI4LCAwKSwgLyogRlNJMiAqLwogCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IzLCAyMywgMCksIC8qIElJQzEgKi8KIAlbTVNUUDMyMl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMywgMjIsIDApLCAvKiBVU0IwICovCkBAIC01NTcsMTQgKzU2MSwxNCBAQAogCVtNU1RQNDEzXSA9IE1TVFAoJnBsbGMxX2RpdjJfY2xrLCBTTVNUUENSNCwgMTMsIDApLCAvKiBIRE1JICovCiAJW01TVFA0MTFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjQsIDExLCAwKSwgLyogSUlDMyAqLwogCVtNU1RQNDEwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1I0LCAxMCwgMCksIC8qIElJQzQgKi8KKwlbTVNUUDQwN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1I0LCA3LCAwKSwgLyogVVNCLURNQUMxICovCiAJW01TVFA0MDZdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjQsIDYsIDApLCAvKiBVU0IxICovCisJW01TVFA0MDVdID0gTVNUUCgmcl9jbGssIFNNU1RQQ1I0LCA1LCAwKSwgLyogQ01UNCAqLworCVtNU1RQNDA0XSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSNCwgNCwgMCksIC8qIENNVDMgKi8KIAlbTVNUUDQwM10gPSBNU1RQKCZyX2NsaywgU01TVFBDUjQsIDMsIDApLCAvKiBLRVlTQyAqLworCVtNU1RQNDAwXSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSNCwgMCwgMCksIC8qIENNVDIgKi8KIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotI2RlZmluZSBDTEtERVZfREVWX0lEKF9pZCwgX2NsaykgeyAuZGV2X2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0jZGVmaW5lIENMS0RFVl9JQ0tfSUQoX2NpZCwgX2RpZCwgX2NsaykgeyAuY29uX2lkID0gX2NpZCwgLmRldl9pZCA9IF9kaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoImR2X2Nsa2lfZGl2Ml9jbGsiLCAmc2g3MzcyX2R2X2Nsa2lfZGl2Ml9jbGspLApAQCAtNjEzLDYgKzYxNyw3IEBACiAKIAkvKiBNU1RQMzIgY2xvY2tzICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4yIiwgJm1zdHBfY2xrc1tNU1RQMDAxXSksIC8qIElJQzIgKi8KKwlDTEtERVZfREVWX0lEKCJzcGlfc2hfbXNpb2YuMCIsICZtc3RwX2Nsa3NbTVNUUDAwMF0pLCAvKiBNU0lPRjAgKi8KIAlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNCIsICZtc3RwX2Nsa3NbTVNUUDEzMV0pLCAvKiBWRVUzICovCiAJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjMiLCAmbXN0cF9jbGtzW01TVFAxMzBdKSwgLyogVkVVMiAqLwogCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4yIiwgJm1zdHBfY2xrc1tNU1RQMTI5XSksIC8qIFZFVTEgKi8KQEAgLTYzMywxNCArNjM4LDE2IEBACiAJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS4wIiwgJm1zdHBfY2xrc1tNU1RQMjE4XSksIC8qIERNQUMxICovCiAJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS4xIiwgJm1zdHBfY2xrc1tNU1RQMjE3XSksIC8qIERNQUMyICovCiAJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS4yIiwgJm1zdHBfY2xrc1tNU1RQMjE2XSksIC8qIERNQUMzICovCisJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS4zIiwgJm1zdHBfY2xrc1tNU1RQMjE0XSksIC8qIFVTQi1ETUFDMCAqLworCUNMS0RFVl9ERVZfSUQoInNwaV9zaF9tc2lvZi4xIiwgJm1zdHBfY2xrc1tNU1RQMjA4XSksIC8qIE1TSU9GMSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMjA3XSksIC8qIFNDSUZBNSAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMjA2XSksIC8qIFNDSUZCICovCisJQ0xLREVWX0RFVl9JRCgic3BpX3NoX21zaW9mLjIiLCAmbXN0cF9jbGtzW01TVFAyMDVdKSwgLyogTVNJT0YyICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjAiLCAmbXN0cF9jbGtzW01TVFAyMDRdKSwgLyogU0NJRkEwICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEiLCAmbXN0cF9jbGtzW01TVFAyMDNdKSwgLyogU0NJRkExICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjIiLCAmbXN0cF9jbGtzW01TVFAyMDJdKSwgLyogU0NJRkEyICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjMiLCAmbXN0cF9jbGtzW01TVFAyMDFdKSwgLyogU0NJRkEzICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjQiLCAmbXN0cF9jbGtzW01TVFAyMDBdKSwgLyogU0NJRkE0ICovCi0JQ0xLREVWX0RFVl9JRCgic2hfY210LjEwIiwgJm1zdHBfY2xrc1tNU1RQMzI5XSksIC8qIENNVDEwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfZnNpMiIsICZtc3RwX2Nsa3NbTVNUUDMyOF0pLCAvKiBGU0kyICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIElJQzEgKi8KIAlDTEtERVZfREVWX0lEKCJyOGE2NjU5N19oY2QuMCIsICZtc3RwX2Nsa3NbTVNUUDMyMl0pLCAvKiBVU0IwICovCkBAIC02NTQsMTEgKzY2MSwxNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLW1vYmlsZS1oZG1pIiwgJm1zdHBfY2xrc1tNU1RQNDEzXSksIC8qIEhETUkgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjMiLCAmbXN0cF9jbGtzW01TVFA0MTFdKSwgLyogSUlDMyAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuNCIsICZtc3RwX2Nsa3NbTVNUUDQxMF0pLCAvKiBJSUM0ICovCisJQ0xLREVWX0RFVl9JRCgic2gtZG1hLWVuZ2luZS40IiwgJm1zdHBfY2xrc1tNU1RQNDA3XSksIC8qIFVTQi1ETUFDMSAqLwogCUNMS0RFVl9ERVZfSUQoInI4YTY2NTk3X2hjZC4xIiwgJm1zdHBfY2xrc1tNU1RQNDA2XSksIC8qIFVTQjEgKi8KIAlDTEtERVZfREVWX0lEKCJyOGE2NjU5N191ZGMuMSIsICZtc3RwX2Nsa3NbTVNUUDQwNl0pLCAvKiBVU0IxICovCiAJQ0xLREVWX0RFVl9JRCgicmVuZXNhc191c2Jocy4xIiwgJm1zdHBfY2xrc1tNU1RQNDA2XSksIC8qIFVTQjEgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9jbXQuNCIsICZtc3RwX2Nsa3NbTVNUUDQwNV0pLCAvKiBDTVQ0ICovCisJQ0xLREVWX0RFVl9JRCgic2hfY210LjMiLCAmbXN0cF9jbGtzW01TVFA0MDRdKSwgLyogQ01UMyAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2tleXNjLjAiLCAmbXN0cF9jbGtzW01TVFA0MDNdKSwgLyogS0VZU0MgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9jbXQuMiIsICZtc3RwX2Nsa3NbTVNUUDQwMF0pLCAvKiBDTVQyICovCiAKKwlDTEtERVZfSUNLX0lEKCJoZG1pIiwgInNoX21vYmlsZV9sY2RjX2ZiLjEiLAorCQkgICAgICAmZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfSERNSV0pLAogCUNMS0RFVl9JQ0tfSUQoImljayIsICJzaC1tb2JpbGUtaGRtaSIsICZkaXY2X3JlcGFyZW50X2Nsa3NbRElWNl9IRE1JXSksCiAJQ0xLREVWX0lDS19JRCgiaWNrYSIsICJzaF9mc2kyIiwgJmRpdjZfcmVwYXJlbnRfY2xrc1tESVY2X0ZTSUFdKSwKIAlDTEtERVZfSUNLX0lEKCJpY2tiIiwgInNoX2ZzaTIiLCAmZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfRlNJQl0pLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3Mzc3LmMKaW5kZXggOTU5NDI0Ni4uOGNlZTdiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Ny5jCkBAIC0yNjcsOSArMjY3LDYgQEAKIAlbTVNUUDQwM10gPSBNU1RQKCZyX2NsaywgU01TVFBDUjQsIDMsIDApLCAvKiBLRVlTQyAqLwogfTsKIAotI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0jZGVmaW5lIENMS0RFVl9ERVZfSUQoX2lkLCBfY2xrKSB7IC5kZXZfaWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoInJfY2xrIiwgJnJfY2xrKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCmluZGV4IGJjYWNiMWUuLjYxYTg0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwpAQCAtMzA2LDEwICszMDYsNiBAQAogCVtNU1RQNDAzXSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSNCwgMywgMCksIC8qIEtFWVNDICovCiB9OwogCi0jZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLSNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotI2RlZmluZSBDTEtERVZfSUNLX0lEKF9jaWQsIF9kaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9jaWQsIC5kZXZfaWQgPSBfZGlkLCAuY2xrID0gX2NsayB9Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCkBAIC0zNjksNyArMzY1LDcgQEAKIAlfX3Jhd193cml0ZWwoMHgxMDgsIFNEMkNLQ1IpOwogCiAJLyogZGV0ZWN0IG1haW4gY2xvY2sgcGFyZW50ICovCi0Jc3dpdGNoICgoX19yYXdfcmVhZGwoQ0tTQ1IpID4+IDI0KSAmIDB4MDMpIHsKKwlzd2l0Y2ggKChfX3Jhd19yZWFkbChDS1NDUikgPj4gMjgpICYgMHgwMykgewogCWNhc2UgMDoKIAkJbWFpbl9jbGsucGFyZW50ID0gJnNoNzNhMF9leHRhbDFfY2xrOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKaW5kZXggY2U1OTVjZS4uMjRlNjNhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKQEAgLTQ1OSw2ICs0NTksMTAgQEAKIAlTSERNQV9TTEFWRV9TREhJMl9UWCwKIAlTSERNQV9TTEFWRV9NTUNJRl9SWCwKIAlTSERNQV9TTEFWRV9NTUNJRl9UWCwKKwlTSERNQV9TTEFWRV9VU0IwX1RYLAorCVNIRE1BX1NMQVZFX1VTQjBfUlgsCisJU0hETUFfU0xBVkVfVVNCMV9UWCwKKwlTSERNQV9TTEFWRV9VU0IxX1JYLAogfTsKIAogZXh0ZXJuIHN0cnVjdCBjbGsgc2g3MzcyX2V4dGFsMV9jbGs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKaW5kZXggM2IyODc0My4uNzM5MzE1ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTM3OSw3ICszNzksNyBAQAogCS8qIEJCSUYyICovCiAJVlBVLAogCVRTSUYxLAotCV8zREdfU0dYNTMwLAorCS8qIDNERyAqLwogCV8yRERNQUMsCiAJSUlDMl9BTEkyLCBJSUMyX1RBQ0tJMiwgSUlDMl9XQUlUSTIsIElJQzJfRFRFSTIsCiAJSVBNTVVfSVBNTVVSLCBJUE1NVV9JUE1NVVIyLApAQCAtNDM2LDcgKzQzNiw3IEBACiAJLyogQkJJRjIgKi8KIAlJTlRDU19WRUNUKFZQVSwgMHg5ODApLAogCUlOVENTX1ZFQ1QoVFNJRjEsIDB4OWEwKSwKLQlJTlRDU19WRUNUKF8zREdfU0dYNTMwLCAweDllMCksCisJLyogM0RHICovCiAJSU5UQ1NfVkVDVChfMkRETUFDLCAweGEwMCksCiAJSU5UQ1NfVkVDVChJSUMyX0FMSTIsIDB4YTgwKSwgSU5UQ1NfVkVDVChJSUMyX1RBQ0tJMiwgMHhhYTApLAogCUlOVENTX1ZFQ1QoSUlDMl9XQUlUSTIsIDB4YWMwKSwgSU5UQ1NfVkVDVChJSUMyX0RURUkyLCAweGFlMCksCkBAIC01MjEsNyArNTIxLDcgQEAKIAkgICAgUlRETUFDXzFfREVJMywgUlRETUFDXzFfREVJMiwgUlRETUFDXzFfREVJMSwgUlRETUFDXzFfREVJMCB9IH0sCiAJeyAweGZmZDIwMTk4LCAweGZmZDIwMWQ4LCA4LCAvKiBJTVI2U0EgLyBJTUNSNlNBICovCiAJICB7IDAsIDAsIE1TSU9GLCAwLAotCSAgICBfM0RHX1NHWDUzMCwgMCwgMCwgMCB9IH0sCisJICAgIDAsIDAsIDAsIDAgfSB9LAogCXsgMHhmZmQyMDE5YywgMHhmZmQyMDFkYywgOCwgLyogSU1SN1NBIC8gSU1DUjdTQSAqLwogCSAgeyAwLCBUTVVfVFVOSTIsIFRNVV9UVU5JMSwgVE1VX1RVTkkwLAogCSAgICAwLCAwLCAwLCAwIH0gfSwKQEAgLTU2MSw3ICs1NjEsNiBAQAogCQkJCQkgICAgICBUTVVfVFVOSTIsIFRTSUYxIH0gfSwKIAl7IDB4ZmZkMjAwMWMsIDAsIDE2LCA0LCAvKiBJUFJIUyAqLyB7IDAsIDAsIFZFVSwgQkVVIH0gfSwKIAl7IDB4ZmZkMjAwMjAsIDAsIDE2LCA0LCAvKiBJUFJJUyAqLyB7IDAsIE1TSU9GLCBUU0lGMCwgSUlDMCB9IH0sCi0JeyAweGZmZDIwMDI0LCAwLCAxNiwgNCwgLyogSVBSSlMgKi8geyAwLCBfM0RHX1NHWDUzMCwgMCwgMCB9IH0sCiAJeyAweGZmZDIwMDI4LCAwLCAxNiwgNCwgLyogSVBSS1MgKi8geyAwLCAwLCBMTUIsIDAgfSB9LAogCXsgMHhmZmQyMDAyYywgMCwgMTYsIDQsIC8qIElQUkxTICovIHsgSVBNTVUsIDAsIDAsIDAgfSB9LAogCXsgMHhmZmQyMDAzMCwgMCwgMTYsIDQsIC8qIElQUk1TICovIHsgSUlDMiwgMCwgMCwgMCB9IH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwppbmRleCA3OWYwNDEzLi4yZDliMWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKQEAgLTE2OSwzNSArMTY5LDM1IEBACiB9OwogCiAvKiBDTVQgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm5hbWUgPSAiQ01UMTAiLAotCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCi0JLnRpbWVyX2JpdCA9IDAsCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UMiIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg0MCwKKwkudGltZXJfYml0ID0gNSwKIAkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCiAJLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MTBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDJfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJDTVQxMCIsCi0JCS5zdGFydAk9IDB4ZTYxMzgwMTAsCi0JCS5lbmQJPSAweGU2MTM4MDFiLAorCQkubmFtZQk9ICJDTVQyIiwKKwkJLnN0YXJ0CT0gMHhlNjEzMDA0MCwKKwkJLmVuZAk9IDB4ZTYxMzAwNGIsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSBldnQyaXJxKDB4MGIwMCksIC8qIENNVDFfQ01UMTAgKi8KKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDBiODApLCAvKiBDTVQyICovCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQxMF9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQyX2RldmljZSA9IHsKIAkubmFtZQkJPSAic2hfY210IiwKLQkuaWQJCT0gMTAsCisJLmlkCQk9IDIsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmY210MTBfcGxhdGZvcm1fZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210Ml9wbGF0Zm9ybV9kYXRhLAogCX0sCi0JLnJlc291cmNlCT0gY210MTBfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNtdDJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQyX3Jlc291cmNlcyksCiB9OwogCiAvKiBUTVUgKi8KQEAgLTYwMiw2ICs2MDIsMTUwIEBACiAJfSwKIH07CiAKKy8qCisgKiBVU0ItRE1BQworICovCisKK3Vuc2lnbmVkIGludCB1c2J0c19zaGlmdFtdID0gezMsIDQsIDV9OworCitlbnVtIHsKKwlYTUlUX1NaXzhCWVRFCQk9IDAsCisJWE1JVF9TWl8xNkJZVEUJCT0gMSwKKwlYTUlUX1NaXzMyQllURQkJPSAyLAorfTsKKworI2RlZmluZSBVU0JUU19JTkRFWDJWQUwoaSkgKCgoaSkgJiAzKSA8PCA2KQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDczNzJfdXNiX2RtYWVfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MjAsCisJfSwKK307CisKKy8qIFVTQiBETUFDMCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyBzaDczNzJfdXNiX2RtYWUwX3NsYXZlc1tdID0geworCXsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMF9UWCwKKwkJLmNoY3IJCT0gVVNCVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJZVEUpLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMF9SWCwKKwkJLmNoY3IJCT0gVVNCVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJZVEUpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgdXNiX2RtYTBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuc2xhdmUJCT0gc2g3MzcyX3VzYl9kbWFlMF9zbGF2ZXMsCisJLnNsYXZlX251bQk9IEFSUkFZX1NJWkUoc2g3MzcyX3VzYl9kbWFlMF9zbGF2ZXMpLAorCS5jaGFubmVsCT0gc2g3MzcyX3VzYl9kbWFlX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3MzcyX3VzYl9kbWFlX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gNiwKKwkudHNfbG93X21hc2sJPSAweGMwLAorCS50c19oaWdoX3NoaWZ0CT0gMCwKKwkudHNfaGlnaF9tYXNrCT0gMCwKKwkudHNfc2hpZnQJPSB1c2J0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh1c2J0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9ETUUsCisJLmNoY3Jfb2Zmc2V0CT0gMHgxNCwKKwkuY2hjcl9pZV9iaXQJPSAxIDw8IDUsCisJLmRtYW9yX2lzXzMyYml0CT0gMSwKKwkubmVlZHNfdGVuZF9zZXQJPSAxLAorCS5ub19kbWFycwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzM3Ml91c2JfZG1hZTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhlNjhhMDAyMCwKKwkJLmVuZAk9IDB4ZTY4YTAwNjQgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogVkNSL1NXUi9ETUlDUiAqLworCQkuc3RhcnQJPSAweGU2OGEwMDAwLAorCQkuZW5kCT0gMHhlNjhhMDAxNCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzICovCisJCS5zdGFydAk9IGV2dDJpcnEoMHgwYTAwKSwKKwkJLmVuZAk9IGV2dDJpcnEoMHgwYTAwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9kbWEwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IDMsCisJLnJlc291cmNlCT0gc2g3MzcyX3VzYl9kbWFlMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzM3Ml91c2JfZG1hZTBfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiX2RtYTBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyogVVNCIERNQUMxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHNoNzM3Ml91c2JfZG1hZTFfc2xhdmVzW10gPSB7CisJeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxX1RYLAorCQkuY2hjcgkJPSBVU0JUU19JTkRFWDJWQUwoWE1JVF9TWl84QllURSksCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9VU0IxX1JYLAorCQkuY2hjcgkJPSBVU0JUU19JTkRFWDJWQUwoWE1JVF9TWl84QllURSksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSB1c2JfZG1hMV9wbGF0Zm9ybV9kYXRhID0geworCS5zbGF2ZQkJPSBzaDczNzJfdXNiX2RtYWUxX3NsYXZlcywKKwkuc2xhdmVfbnVtCT0gQVJSQVlfU0laRShzaDczNzJfdXNiX2RtYWUxX3NsYXZlcyksCisJLmNoYW5uZWwJPSBzaDczNzJfdXNiX2RtYWVfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDczNzJfdXNiX2RtYWVfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSA2LAorCS50c19sb3dfbWFzawk9IDB4YzAsCisJLnRzX2hpZ2hfc2hpZnQJPSAwLAorCS50c19oaWdoX21hc2sJPSAwLAorCS50c19zaGlmdAk9IHVzYnRzX3NoaWZ0LAorCS50c19zaGlmdF9udW0JPSBBUlJBWV9TSVpFKHVzYnRzX3NoaWZ0KSwKKwkuZG1hb3JfaW5pdAk9IERNQU9SX0RNRSwKKwkuY2hjcl9vZmZzZXQJPSAweDE0LAorCS5jaGNyX2llX2JpdAk9IDEgPDwgNSwKKwkuZG1hb3JfaXNfMzJiaXQJPSAxLAorCS5uZWVkc190ZW5kX3NldAk9IDEsCisJLm5vX2RtYXJzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3MzcyX3VzYl9kbWFlMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGU2OGMwMDIwLAorCQkuZW5kCT0gMHhlNjhjMDA2NCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBWQ1IvU1dSL0RNSUNSICovCisJCS5zdGFydAk9IDB4ZTY4YzAwMDAsCisJCS5lbmQJPSAweGU2OGMwMDE0IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgKi8KKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDFkMDApLAorCQkuZW5kCT0gZXZ0MmlycSgweDFkMDApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX2RtYTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gNCwKKwkucmVzb3VyY2UJPSBzaDczNzJfdXNiX2RtYWUxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3MzcyX3VzYl9kbWFlMV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ1c2JfZG1hMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiAvKiBWUFUgKi8KIHN0YXRpYyBzdHJ1Y3QgdWlvX2luZm8gdnB1X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiVlBVNUhHIiwKQEAgLTgxOCw3ICs5NjIsNyBAQAogCSZzY2lmNF9kZXZpY2UsCiAJJnNjaWY1X2RldmljZSwKIAkmc2NpZjZfZGV2aWNlLAotCSZjbXQxMF9kZXZpY2UsCisJJmNtdDJfZGV2aWNlLAogCSZ0bXUwMF9kZXZpY2UsCiAJJnRtdTAxX2RldmljZSwKIH07CkBAIC04MjksNiArOTczLDggQEAKIAkmZG1hMF9kZXZpY2UsCiAJJmRtYTFfZGV2aWNlLAogCSZkbWEyX2RldmljZSwKKwkmdXNiX2RtYTBfZGV2aWNlLAorCSZ1c2JfZG1hMV9kZXZpY2UsCiAJJnZwdV9kZXZpY2UsCiAJJnZldTBfZGV2aWNlLAogCSZ2ZXUxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9wY2llLmMKaW5kZXggMDMxY2QwYS4uZjFmNjk5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9wY2llLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9wY2llLmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHRlZ3JhX3BjaWVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IHRlZ3JhX3BjaWVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJcmV0dXJuIElOVF9QQ0lFX0lOVFI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCmluZGV4IDc4NDhhMTcuLmM4OThkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIC8qCiAgKiBtYXAgdGhlIHNwZWNpZmllZCBkZXZpY2Uvc2xvdC9waW4gdG8gYW4gSVJRLiAgIERpZmZlcmVudCBiYWNrcGxhbmVzIG1heSBuZWVkIHRvIG1vZGlmeSB0aGlzLgogICovCi1zdGF0aWMgaW50IF9faW5pdCB2ZXJzYXRpbGVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCB2ZXJzYXRpbGVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIAlpbnQgZGV2c2xvdCA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggOWU2YjkzYi4uZDBkMjY3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0zMTgsNiArMzE4LDEwIEBACiAJLnJhdGUJPSAxMDAwMDAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgdjJtX3JlZl9jbGsgPSB7CisJLnJhdGUgICA9IDMyNzY4LAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfYXBiX3BjbGs7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCB2Mm1fbG9va3Vwc1tdID0gewpAQCAtMzQ4LDYgKzM1Miw5IEBACiAJfSwgewkvKiBDTENEICovCiAJCS5kZXZfaWQJCT0gIm1iOmNsY2QiLAogCQkuY2xrCQk9ICZvc2MxX2NsaywKKwl9LCB7CS8qIFNQODA1IFdEVCAqLworCQkuZGV2X2lkCQk9ICJtYjp3ZHQiLAorCQkuY2xrCQk9ICZ2Mm1fcmVmX2NsaywKIAl9LCB7CS8qIFNQODA0IHRpbWVycyAqLwogCQkuZGV2X2lkCQk9ICJzcDgwNCIsCiAJCS5jb25faWQJCT0gInYybS10aW1lcjAiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtbWFjcm8uUyBiL2FyY2gvYXJtL21tL2Fib3J0LW1hY3JvLlMKaW5kZXggNTIxNjJkNS4uMmNiZjY4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWJvcnQtbWFjcm8uUworKysgYi9hcmNoL2FybS9tbS9hYm9ydC1tYWNyby5TCkBAIC0xNyw3ICsxNyw3IEBACiAJY21wCVx0bXAsICMgMHg1NjAwCQkJQCBJcyBpdCBsZHJzYj8KIAlvcnJlcQlcdG1wLCBcdG1wLCAjMSA8PCAxMQkJQCBTZXQgTC1iaXQgaWYgeWVzCiAJdHN0CVx0bXAsICMxIDw8IDExCQkJQCBMID0gMCAtPiB3cml0ZQotCW9ycmVxCVxwc3IsIFxwc3IsICMxIDw8IDExCQlAIHllcy4KKwlvcnJlcQlcZnNyLCBcZnNyLCAjMSA8PCAxMQkJQCB5ZXMuCiAJYglkb19EYXRhQWJvcnQKIG5vdF90aHVtYjoKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwppbmRleCBiZTdjNjM4Li5jZmJjZjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYworKysgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgImZhdWx0LmgiCkBAIC05NSw2ICs5NiwzMyBAQAogCSJzaWduYWwrd2FybiIKIH07CiAKKy8qIFJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBBUk12NiB1bmFsaWduZWQgYWNjZXNzIG1vZGVsIGlzIGluIHVzZS4gKi8KK3N0YXRpYyBib29sIGNwdV9pc192Nl91bmFsaWduZWQodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2ICYmIChjcl9hbGlnbm1lbnQgJiBDUl9VKTsKK30KKworc3RhdGljIGludCBzYWZlX3VzZXJtb2RlKGludCBuZXdfdXNlcm1vZGUsIGJvb2wgd2FybikKK3sKKwkvKgorCSAqIEFSTXY2IGFuZCBsYXRlciBDUFVzIGNhbiBwZXJmb3JtIHVuYWxpZ25lZCBhY2Nlc3NlcyBmb3IKKwkgKiBtb3N0IHNpbmdsZSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgdXAgdG8gd29yZCBzaXplLgorCSAqIExETSwgU1RNLCBMRFJEIGFuZCBTVFJEIHN0aWxsIG5lZWQgdG8gYmUgaGFuZGxlZC4KKwkgKgorCSAqIElnbm9yaW5nIHRoZSBhbGlnbm1lbnQgZmF1bHQgaXMgbm90IGFuIG9wdGlvbiBvbiB0aGVzZQorCSAqIENQVXMgc2luY2Ugd2Ugc3BpbiByZS1mYXVsdGluZyB0aGUgaW5zdHJ1Y3Rpb24gd2l0aG91dAorCSAqIG1ha2luZyBhbnkgcHJvZ3Jlc3MuCisJICovCisJaWYgKGNwdV9pc192Nl91bmFsaWduZWQoKSAmJiAhKG5ld191c2VybW9kZSAmIChVTV9GSVhVUCB8IFVNX1NJR05BTCkpKSB7CisJCW5ld191c2VybW9kZSB8PSBVTV9GSVhVUDsKKworCQlpZiAod2FybikKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFsaWdubWVudDogaWdub3JpbmcgZmF1bHRzIGlzIHVuc2FmZSBvbiB0aGlzIENQVS4gIERlZmF1bHRpbmcgdG8gZml4dXAgbW9kZS5cbiIpOworCX0KKworCXJldHVybiBuZXdfdXNlcm1vZGU7Cit9CisKIHN0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc2VxX3ByaW50ZihtLCAiVXNlcjpcdFx0JWx1XG4iLCBhaV91c2VyKTsKQEAgLTEyNSw3ICsxNTMsNyBAQAogCQlpZiAoZ2V0X3VzZXIobW9kZSwgYnVmZmVyKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAobW9kZSA+PSAnMCcgJiYgbW9kZSA8PSAnNScpCi0JCQlhaV91c2VybW9kZSA9IG1vZGUgLSAnMCc7CisJCQlhaV91c2VybW9kZSA9IHNhZmVfdXNlcm1vZGUobW9kZSAtICcwJywgdHJ1ZSk7CiAJfQogCXJldHVybiBjb3VudDsKIH0KQEAgLTg4Niw5ICs5MTQsMTYgQEAKIAlpZiAoYWlfdXNlcm1vZGUgJiBVTV9GSVhVUCkKIAkJZ290byBmaXh1cDsKIAotCWlmIChhaV91c2VybW9kZSAmIFVNX1NJR05BTCkKLQkJZm9yY2Vfc2lnKFNJR0JVUywgY3VycmVudCk7Ci0JZWxzZSB7CisJaWYgKGFpX3VzZXJtb2RlICYgVU1fU0lHTkFMKSB7CisJCXNpZ2luZm9fdCBzaTsKKworCQlzaS5zaV9zaWdubyA9IFNJR0JVUzsKKwkJc2kuc2lfZXJybm8gPSAwOworCQlzaS5zaV9jb2RlID0gQlVTX0FEUkFMTjsKKwkJc2kuc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHI7CisKKwkJZm9yY2Vfc2lnX2luZm8oc2kuc2lfc2lnbm8sICZzaSwgY3VycmVudCk7CisJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UncmUgYWJvdXQgdG8gZGlzYWJsZSB0aGUgYWxpZ25tZW50IHRyYXAgYW5kIHJldHVybiB0bwogCQkgKiB1c2VyIHNwYWNlLiAgQnV0IGlmIGFuIGludGVycnVwdCBvY2N1cnMgYmVmb3JlIGFjdHVhbGx5CkBAIC05MjYsMjAgKzk2MSwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgogCi0JLyoKLQkgKiBBUk12NiBhbmQgbGF0ZXIgQ1BVcyBjYW4gcGVyZm9ybSB1bmFsaWduZWQgYWNjZXNzZXMgZm9yCi0JICogbW9zdCBzaW5nbGUgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zIHVwIHRvIHdvcmQgc2l6ZS4KLQkgKiBMRE0sIFNUTSwgTERSRCBhbmQgU1RSRCBzdGlsbCBuZWVkIHRvIGJlIGhhbmRsZWQuCi0JICoKLQkgKiBJZ25vcmluZyB0aGUgYWxpZ25tZW50IGZhdWx0IGlzIG5vdCBhbiBvcHRpb24gb24gdGhlc2UKLQkgKiBDUFVzIHNpbmNlIHdlIHNwaW4gcmUtZmF1bHRpbmcgdGhlIGluc3RydWN0aW9uIHdpdGhvdXQKLQkgKiBtYWtpbmcgYW55IHByb2dyZXNzLgotCSAqLwotCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjYgJiYgKGNyX2FsaWdubWVudCAmIENSX1UpKSB7CisJaWYgKGNwdV9pc192Nl91bmFsaWduZWQoKSkgewogCQljcl9hbGlnbm1lbnQgJj0gfkNSX0E7CiAJCWNyX25vX2FsaWdubWVudCAmPSB+Q1JfQTsKIAkJc2V0X2NyKGNyX2FsaWdubWVudCk7Ci0JCWFpX3VzZXJtb2RlID0gVU1fRklYVVA7CisJCWFpX3VzZXJtb2RlID0gc2FmZV91c2VybW9kZShhaV91c2VybW9kZSwgZmFsc2UpOwogCX0KIAogCWhvb2tfZmF1bHRfY29kZSgxLCBkb19hbGlnbm1lbnQsIFNJR0JVUywgQlVTX0FEUkFMTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwppbmRleCA0NGMwODY3Li45ZWNmZGI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCkBAIC0yNzcsNiArMjc3LDI1IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBsMngwX3VubG9jayhfX3UzMiBjYWNoZV9pZCkKK3sKKwlpbnQgbG9ja3JlZ3M7CisJaW50IGk7CisKKwlpZiAoY2FjaGVfaWQgPT0gTDJYMF9DQUNIRV9JRF9QQVJUX0wzMTApCisJCWxvY2tyZWdzID0gODsKKwllbHNlCisJCS8qIEwyMTAgYW5kIHVua25vd24gdHlwZXMgKi8KKwkJbG9ja3JlZ3MgPSAxOworCisJZm9yIChpID0gMDsgaSA8IGxvY2tyZWdzOyBpKyspIHsKKwkJd3JpdGVsX3JlbGF4ZWQoMHgwLCBsMngwX2Jhc2UgKyBMMlgwX0xPQ0tET1dOX1dBWV9EX0JBU0UgKworCQkJICAgICAgIGkgKiBMMlgwX0xPQ0tET1dOX1NUUklERSk7CisJCXdyaXRlbF9yZWxheGVkKDB4MCwgbDJ4MF9iYXNlICsgTDJYMF9MT0NLRE9XTl9XQVlfSV9CQVNFICsKKwkJCSAgICAgICBpICogTDJYMF9MT0NLRE9XTl9TVFJJREUpOworCX0KK30KKwogdm9pZCBfX2luaXQgbDJ4MF9pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgX191MzIgYXV4X3ZhbCwgX191MzIgYXV4X21hc2spCiB7CiAJX191MzIgYXV4OwpAQCAtMzI4LDYgKzM0Nyw4IEBACiAJICogYWNjZXNzaW5nIHRoZSBiZWxvdyByZWdpc3RlcnMgd2lsbCBmYXVsdC4KIAkgKi8KIAlpZiAoIShyZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQ1RSTCkgJiAxKSkgeworCQkvKiBNYWtlIHN1cmUgdGhhdCBJJkQgaXMgbm90IGxvY2tlZCBkb3duIHdoZW4gc3RhcnRpbmcgKi8KKwkJbDJ4MF91bmxvY2soY2FjaGVfaWQpOwogCiAJCS8qIGwyeDAgY29udHJvbGxlciBpcyBkaXNhYmxlZCAqLwogCQl3cml0ZWxfcmVsYXhlZChhdXgsIGwyeDBfYmFzZSArIEwyWDBfQVVYX0NUUkwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDJmZWU3ODIuLmNjN2UyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfUEZOX1ZBTElECiBpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXJldHVybiBtZW1ibG9ja19pc19tZW1vcnkocGZuIDw8IFBBR0VfU0hJRlQpOworCXJldHVybiBtZW1ibG9ja19pc19tZW1vcnkoX19wZm5fdG9fcGh5cyhwZm4pKTsKIH0KIEVYUE9SVF9TWU1CT0wocGZuX3ZhbGlkKTsKICNlbmRpZgpAQCAtNDQxLDcgKzQ0MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcG9pc29uX2luaXRfbWVtKHZvaWQgKnMsIHNpemVfdCBjb3VudCkKIHsKIAl1MzIgKnAgPSAodTMyICopczsKLQl3aGlsZSAoKGNvdW50ID0gY291bnQgLSA0KSkKKwlmb3IgKDsgY291bnQgIT0gMDsgY291bnQgLT0gNCkKIAkJKnArKyA9IDB4ZTdmZGRlZjA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDkyYmQxMDIuLjJlNjg0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtMzc5LDcgKzM3OSw3IEBACiAKIC8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IHRha2VuIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgKi8KIC5nbG9ibAljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZQotLmVxdQljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZSwgNCAqIDMKKy5lcXUJY3B1X2FybTkyMF9zdXNwZW5kX3NpemUsIDQgKiA0CiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBFTlRSWShjcHVfYXJtOTIwX2RvX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjQgLSByNywgbHJ9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCAyYmJjZjA1Li5jZDhmNzljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTM5NCw3ICszOTQsNyBAQAogCiAvKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0OiB0YWtlbiBmcm9tIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TICovCiAuZ2xvYmwJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUKLS5lcXUJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUsIDQgKiAzCisuZXF1CWNwdV9hcm05MjZfc3VzcGVuZF9zaXplLCA0ICogNAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X2FybTkyNl9kb19zdXNwZW5kKQogCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKaW5kZXggZjhmN2VhMy4uNjgzYWYzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC00MTAsNiArNDEwLDcgQEAKIAkubG9uZwkweDQxMDA5NDYwCiAJLmxvbmcJMHhmZjAwZmZmMAogCS5sb25nCTAKKwkubG9uZwkwCiAJYglfX2FybTk0Nl9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKQEAgLTQxOCw2ICs0MTksNiBAQAogCS5sb25nCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAJLmxvbmcJMAogCS5sb25nCTAKLQkubG9uZwlhcm05NDBfY2FjaGVfZm5zCisJLmxvbmcJYXJtOTQ2X2NhY2hlX2ZucwogCS5zaXplCV9fYXJtOTQ2X3Byb2NfaW5mbywgLiAtIF9fYXJtOTQ2X3Byb2NfaW5mbwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCAwNzIxOWMyLi42OWU3ZjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTE4MiwxMSArMTgyLDExIEBACiAKIEVOVFJZKGNwdV9zYTExMDBfZG9fcmVzdW1lKQogCWxkbWlhCXIwLCB7cjQgLSByN30JCQlAIGxvYWQgY3AgcmVncwotCW1vdglyMSwgIzAKLQltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAIGZsdXNoIEkrRCBUTEJzCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgZmx1c2ggSStEIFRMQnMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGZsdXNoIEkmRCBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjOSwgYzAsIDAJCUAgaW52YWxpZGF0ZSBSQgorCW1jcglwMTUsIDAsIGlwLCBjOSwgYzAsIDUJCUAgYWxsb3cgdXNlciBzcGFjZSB0byB1c2UgUkIKIAogCW1jcglwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECiAJbWNyCXAxNSwgMCwgcjUsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCAyMTkxMzhkLi5hOTIzYWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0yMjMsNiArMjIzLDIyIEBACiAJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCByZWFkIGNvbnRyb2wgcmVnaXN0ZXIKIAliaWMJcjAsIHIwLCByNQkJCUAgY2xlYXIgYml0cyB0aGVtCiAJb3JyCXIwLCByMCwgcjYJCQlAIHNldCB0aGVtCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfMzY0Mjk2CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciB0aGUgMzY0Mjk2IEFSTTExMzYgcjBwMiBlcnJhdHVtIChwb3NzaWJsZSBjYWNoZSBkYXRhCisJICogY29ycnVwdGlvbiB3aXRoIGhpdC11bmRlci1taXNzIGVuYWJsZWQpLiBUaGUgY29uZGl0aW9uYWwgY29kZSBiZWxvdworCSAqIChzZXR0aW5nIHRoZSB1bmRvY3VtZW50ZWQgYml0IDMxIGluIHRoZSBhdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgorCSAqIGFuZCB0aGUgRkkgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyKSBkaXNhYmxlcyBoaXQtdW5kZXItbWlzcworCSAqIHdpdGhvdXQgcHV0dGluZyB0aGUgcHJvY2Vzc29yIGludG8gZnVsbCBsb3cgaW50ZXJydXB0IGxhdGVuY3kgbW9kZS4KKwkgKi8KKwlsZHIJcjYsID0weDQxMDdiMzYyCQkJQCBpZCBmb3IgQVJNMTEzNiByMHAyCisJbXJjCXAxNSwgMCwgcjUsIGMwLCBjMCwgMAkJQCBnZXQgcHJvY2Vzc29yIGlkCisJdGVxCXI1LCByNgkJCQlAIGNoZWNrIGZvciB0aGUgZmF1bHR5IGNvcmUKKwltcmNlcQlwMTUsIDAsIHI1LCBjMSwgYzAsIDEJCUAgbG9hZCBhdXggY29udHJvbCByZWcKKwlvcnJlcQlyNSwgcjUsICMoMSA8PCAzMSkJCUAgc2V0IHRoZSB1bmRvY3VtZW50ZWQgYml0IDMxCisJbWNyZXEJcDE1LCAwLCByNSwgYzEsIGMwLCAxCQlAIHdyaXRlIGF1eCBjb250cm9sIHJlZworCW9ycmVxCXIwLCByMCwgIygxIDw8IDIxKQkJQCBsb3cgaW50ZXJydXB0IGxhdGVuY3kgY29uZmlndXJhdGlvbgorI2VuZGlmCiAJbW92CXBjLCBscgkJCQlAIHJldHVybiB0byBoZWFkLlM6X19yZXQKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggYTMwZTc4NS4uOTA0OWMwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtNjYsNiArNjYsNyBAQAogRU5UUlkoY3B1X3Y3X3Jlc2V0KQogCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgogCWJpYwlyMSwgcjEsICMweDEJCQlAIC4uLi4uLi4uLi4uLi4uLm0KKyBUSFVNQigJYmljCXIxLCByMSwgIzEgPDwgMzAgKQkJQCBTQ1RMUi5URSAoVGh1bWIgZXhjZXB0aW9ucykKIAltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCQlAIGRpc2FibGUgTU1VCiAJaXNiCiAJbW92CXBjLCByMApAQCAtMjQ3LDEzICsyNDgsMTYgQEAKIAltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKIAltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKIAltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjQsIGMxLCBjMCwgMQlAIFJlYWQgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwl0ZXEJcjQsIHIxMAkJCUAgSXMgaXQgYWxyZWFkeSBzZXQ/CisJbWNybmUJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIE5vLCBzbyB3cml0ZSBpdAogCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCiAJbGRyCXI0LCA9UFJSUgkJQCBQUlJSCiAJbGRyCXI1LCA9Tk1SUgkJQCBOTVJSCiAJbWNyCXAxNSwgMCwgcjQsIGMxMCwgYzIsIDAJQCB3cml0ZSBQUlJSCiAJbWNyCXAxNSwgMCwgcjUsIGMxMCwgYzIsIDEJQCB3cml0ZSBOTVJSCiAJaXNiCisJZHNiCiAJbW92CXIwLCByOQkJCUAgY29udHJvbCByZWdpc3RlcgogCW1vdglyMiwgcjcsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQogCW1vdglyMiwgcjIsIGxzbCAjMTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggMjhjNzJhMi4uNzU1ZTFiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCS5hbGlnbgogCiAuZ2xvYmwJY3B1X3hzYzNfc3VzcGVuZF9zaXplCi0uZXF1CWNwdV94c2MzX3N1c3BlbmRfc2l6ZSwgNCAqIDgKKy5lcXUJY3B1X3hzYzNfc3VzcGVuZF9zaXplLCA0ICogNwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogRU5UUlkoY3B1X3hzYzNfZG9fc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyNCAtIHIxMCwgbHJ9CkBAIC00MTgsMTIgKzQxOCwxMiBAQAogCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKIAltcmMgCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZwogCWJpYwlyNCwgcjQsICMyCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0Ci0Jc3RtaWEJcjAsIHtyMSwgcjQgLSByMTB9CUAgc3RvcmUgdjpwIG9mZnNldCArIGNwIHJlZ3MKKwlzdG1pYQlyMCwge3I0IC0gcjEwfQkJQCBzdG9yZSBjcCByZWdzCiAJbGRtaWEJc3AhLCB7cjQgLSByMTAsIHBjfQogRU5EUFJPQyhjcHVfeHNjM19kb19zdXNwZW5kKQogCiBFTlRSWShjcHVfeHNjM19kb19yZXN1bWUpCi0JbGRtaWEJcjAsIHtyMSwgcjQgLSByMTB9CUAgbG9hZCB2OnAgb2Zmc2V0ICsgY3AgcmVncworCWxkbWlhCXIwLCB7cjQgLSByMTB9CQlAIGxvYWQgY3AgcmVncwogCW1vdglpcCwgIzAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CUAgZHJhaW4gd3JpdGUgKCZmaWxsKSBidWZmZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOTFmYzdjZC4uZTRkZGU5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTQ0LDYgKzQ0LDE0IEBACiAjZGVmaW5lIFVBUlRfUEFERFIJTVg1MV9VQVJUMV9CQVNFX0FERFIKICNlbmRpZgogCisvKiBpTVg1MC81MyBoYXZlIHNhbWUgYWRkcmVzc2VzLCBidXQgbm90IGlNWDUxICovCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDUwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfSU1YNTMpCisjaWZkZWYgVUFSVF9QQUREUgorI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCisjZW5kaWYKKyNkZWZpbmUgVUFSVF9QQUREUglNWDUzX1VBUlQxX0JBU0VfQUREUgorI2VuZGlmCisKICNkZWZpbmUgVUFSVF9WQUREUglJTVhfSU9fQUREUkVTUyhVQVJUX1BBRERSKQogCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14NTMuaAppbmRleCA5NDQwYjllLi41NDA4ZmQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUzLmgKQEAgLTMwLDYgKzMwLDkgQEAKICNkZWZpbmUgTVg1M19TREhDX1BBRF9DVFJMIAkoUEFEX0NUTF9IWVMgfCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfUFVFIHwgXAogCQkJCVBBRF9DVExfUFVTXzQ3S19VUCB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCiAJCQkJUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgUEFEX0NUUkxfSTJDCShQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9PREUgfCBQQURfQ1RMX1BLRSB8IFwKKwkJCVBBRF9DVExfUFVFIHwgUEFEX0NUTF9EU0VfSElHSCB8IFBBRF9DVExfUFVTXzEwMEtfVVAgXAorCQkJfCBQQURfQ1RMX0hZUykKIAogI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fS1BQX0NPTF81CQlJT01VWF9QQUQoMHgzNDgsIDB4MjAsIDAsIDB4ODQwLCAwLCAwKQogI2RlZmluZSBfTVg1M19QQURfR1BJT18xOV9fR1BJTzRfNQkJSU9NVVhfUEFEKDB4MzQ4LCAweDIwLCAxLCAweDAsIDAsIDApCkBAIC0xMjU2LDcgKzEyNTksNyBAQAogI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fR1BJTzRfMTIJCShfTVg1M19QQURfS0VZX0NPTDNfX0dQSU80XzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX1VTQk9IM19IMl9EUAkJKF9NWDUzX1BBRF9LRVlfQ09MM19fVVNCT0gzX0gyX0RQIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX1NQRElGX0lOMQkJKF9NWDUzX1BBRF9LRVlfQ09MM19fU1BESUZfSU4xIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX0kyQzJfU0NMCQkoX01YNTNfUEFEX0tFWV9DT0wzX19JMkMyX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wzX19JMkMyX1NDTAkJKF9NWDUzX1BBRF9LRVlfQ09MM19fSTJDMl9TQ0wgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfS0VZX0NPTDNfX0VDU1BJMV9TUzMJCShfTVg1M19QQURfS0VZX0NPTDNfX0VDU1BJMV9TUzMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9LRVlfQ09MM19fRkVDX0NSUwkJKF9NWDUzX1BBRF9LRVlfQ09MM19fRkVDX0NSUyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0tFWV9DT0wzX19VU0JQSFkxX1NJRUNMT0NLCQkoX01YNTNfUEFEX0tFWV9DT0wzX19VU0JQSFkxX1NJRUNMT0NLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKQEAgLTEyNjQsNyArMTI2Nyw3IEBACiAjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19HUElPNF8xMwkJKF9NWDUzX1BBRF9LRVlfUk9XM19fR1BJTzRfMTMgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fVVNCT0gzX0gyX0RNCQkoX01YNTNfUEFEX0tFWV9ST1czX19VU0JPSDNfSDJfRE0gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fQ0NNX0FTUkNfRVhUX0NMSwkJKF9NWDUzX1BBRF9LRVlfUk9XM19fQ0NNX0FTUkNfRVhUX0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19JMkMyX1NEQQkJKF9NWDUzX1BBRF9LRVlfUk9XM19fSTJDMl9TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fSTJDMl9TREEJCShfTVg1M19QQURfS0VZX1JPVzNfX0kyQzJfU0RBIHwgTVVYX1BBRF9DVFJMKFBBRF9DVFJMX0kyQykpCiAjZGVmaW5lIE1YNTNfUEFEX0tFWV9ST1czX19PU0MzMktfMzJLX09VVAkJKF9NWDUzX1BBRF9LRVlfUk9XM19fT1NDMzJLXzMyS19PVVQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fQ0NNX1BMTDRfQllQCQkoX01YNTNfUEFEX0tFWV9ST1czX19DQ01fUExMNF9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9LRVlfUk9XM19fVVNCUEhZMV9MSU5FU1RBVEVfMAkJKF9NWDUzX1BBRF9LRVlfUk9XM19fVVNCUEhZMV9MSU5FU1RBVEVfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCkBAIC0xNTM2LDcgKzE1MzksNyBAQAogI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDhfX0tQUF9DT0xfNwkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0tQUF9DT0xfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fRUNTUEkyX1NDTEsJCShfTVg1M19QQURfQ1NJMF9EQVQ4X19FQ1NQSTJfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fVVNCT0gzX1VTQkgzX09DCQkoX01YNTNfUEFEX0NTSTBfREFUOF9fVVNCT0gzX1VTQkgzX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ4X19JMkMxX1NEQQkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ4X19JMkMxX1NEQQkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKFBBRF9DVFJMX0kyQykpCiAjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOF9fRU1JX0VNSV9ERUJVR18zNwkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX0VNSV9FTUlfREVCVUdfMzcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDhfX1RQSVVfVFJBQ0VfNQkJKF9NWDUzX1BBRF9DU0kwX0RBVDhfX1RQSVVfVFJBQ0VfNSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fSVBVX0NTSTBfRF85CQkoX01YNTNfUEFEX0NTSTBfREFUOV9fSVBVX0NTSTBfRF85IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKQEAgLTE1NDQsNyArMTU0Nyw3IEBACiAjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fS1BQX1JPV183CQkoX01YNTNfUEFEX0NTSTBfREFUOV9fS1BQX1JPV183IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ5X19FQ1NQSTJfTU9TSQkJKF9NWDUzX1BBRF9DU0kwX0RBVDlfX0VDU1BJMl9NT1NJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ5X19VU0JPSDNfVVNCSDNfUFdSCQkoX01YNTNfUEFEX0NTSTBfREFUOV9fVVNCT0gzX1VTQkgzX1BXUiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fSTJDMV9TQ0wJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19JMkMxX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0NTSTBfREFUOV9fSTJDMV9TQ0wJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19JMkMxX1NDTCB8IE1VWF9QQURfQ1RSTChQQURfQ1RSTF9JMkMpKQogI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDlfX0VNSV9FTUlfREVCVUdfMzgJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19FTUlfRU1JX0RFQlVHXzM4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfQ1NJMF9EQVQ5X19UUElVX1RSQUNFXzYJCShfTVg1M19QQURfQ1NJMF9EQVQ5X19UUElVX1RSQUNFXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9DU0kwX0RBVDEwX19JUFVfQ1NJMF9EXzEwCQkoX01YNTNfUEFEX0NTSTBfREFUMTBfX0lQVV9DU0kwX0RfMTAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQpAQCAtMTYzMSwyNSArMTYzNCwyNSBAQAogI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIyX19DQ01fREkxX0VYVF9DTEsJCShfTVg1M19QQURfRUlNX0VCMl9fQ0NNX0RJMV9FWFRfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0VCMl9fSVBVX1NFUl9ESVNQMV9DUwkJKF9NWDUzX1BBRF9FSU1fRUIyX19JUFVfU0VSX0RJU1AxX0NTIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0VCMl9fRUNTUEkxX1NTMAkJKF9NWDUzX1BBRF9FSU1fRUIyX19FQ1NQSTFfU1MwIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0VCMl9fSTJDMl9TQ0wJCShfTVg1M19QQURfRUlNX0VCMl9fSTJDMl9TQ0wgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRUIyX19JMkMyX1NDTAkJKF9NWDUzX1BBRF9FSU1fRUIyX19JMkMyX1NDTCB8IE1VWF9QQURfQ1RSTChQQURfQ1RSTF9JMkMpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19FTUlfV0VJTV9EXzE2CQkoX01YNTNfUEFEX0VJTV9EMTZfX0VNSV9XRUlNX0RfMTYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19HUElPM18xNgkJKF9NWDUzX1BBRF9FSU1fRDE2X19HUElPM18xNiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTZfX0lQVV9ESTBfUElONQkJKF9NWDUzX1BBRF9FSU1fRDE2X19JUFVfREkwX1BJTjUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19JUFVfRElTUEIxX1NFUl9DTEsJCShfTVg1M19QQURfRUlNX0QxNl9fSVBVX0RJU1BCMV9TRVJfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QxNl9fRUNTUEkxX1NDTEsJCShfTVg1M19QQURfRUlNX0QxNl9fRUNTUEkxX1NDTEsgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE2X19JMkMyX1NEQQkJKF9NWDUzX1BBRF9FSU1fRDE2X19JMkMyX1NEQSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTZfX0kyQzJfU0RBCQkoX01YNTNfUEFEX0VJTV9EMTZfX0kyQzJfU0RBIHwgTVVYX1BBRF9DVFJMKFBBRF9DVFJMX0kyQykpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0VNSV9XRUlNX0RfMTcJCShfTVg1M19QQURfRUlNX0QxN19fRU1JX1dFSU1fRF8xNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0dQSU8zXzE3CQkoX01YNTNfUEFEX0VJTV9EMTdfX0dQSU8zXzE3IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QxN19fSVBVX0RJMF9QSU42CQkoX01YNTNfUEFEX0VJTV9EMTdfX0lQVV9ESTBfUElONiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0lQVV9ESVNQQjFfU0VSX0RJTgkJKF9NWDUzX1BBRF9FSU1fRDE3X19JUFVfRElTUEIxX1NFUl9ESU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE3X19FQ1NQSTFfTUlTTwkJKF9NWDUzX1BBRF9FSU1fRDE3X19FQ1NQSTFfTUlTTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMTdfX0kyQzNfU0NMCQkoX01YNTNfUEFEX0VJTV9EMTdfX0kyQzNfU0NMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QxN19fSTJDM19TQ0wJCShfTVg1M19QQURfRUlNX0QxN19fSTJDM19TQ0wgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fRU1JX1dFSU1fRF8xOAkJKF9NWDUzX1BBRF9FSU1fRDE4X19FTUlfV0VJTV9EXzE4IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fR1BJTzNfMTgJCShfTVg1M19QQURfRUlNX0QxOF9fR1BJTzNfMTggfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE4X19JUFVfREkwX1BJTjcJCShfTVg1M19QQURfRUlNX0QxOF9fSVBVX0RJMF9QSU43IHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fSVBVX0RJU1BCMV9TRVJfRElPCQkoX01YNTNfUEFEX0VJTV9EMThfX0lQVV9ESVNQQjFfU0VSX0RJTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMThfX0VDU1BJMV9NT1NJCQkoX01YNTNfUEFEX0VJTV9EMThfX0VDU1BJMV9NT1NJIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKLSNkZWZpbmUgTVg1M19QQURfRUlNX0QxOF9fSTJDM19TREEJCShfTVg1M19QQURfRUlNX0QxOF9fSTJDM19TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE4X19JMkMzX1NEQQkJKF9NWDUzX1BBRF9FSU1fRDE4X19JMkMzX1NEQSB8IE1VWF9QQURfQ1RSTChQQURfQ1RSTF9JMkMpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE4X19JUFVfREkxX0QwX0NTCQkoX01YNTNfUEFEX0VJTV9EMThfX0lQVV9ESTFfRDBfQ1MgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19FTUlfV0VJTV9EXzE5CQkoX01YNTNfUEFEX0VJTV9EMTlfX0VNSV9XRUlNX0RfMTkgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDE5X19HUElPM18xOQkJKF9NWDUzX1BBRF9FSU1fRDE5X19HUElPM18xOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCkBAIC0xNjcyLDcgKzE2NzUsNyBAQAogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIxX19JUFVfREkwX1BJTjE3CQkoX01YNTNfUEFEX0VJTV9EMjFfX0lQVV9ESTBfUElOMTcgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDIxX19JUFVfRElTUEIwX1NFUl9DTEsJCShfTVg1M19QQURfRUlNX0QyMV9fSVBVX0RJU1BCMF9TRVJfQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fQ1NQSV9TQ0xLCQkoX01YNTNfUEFEX0VJTV9EMjFfX0NTUElfU0NMSyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjFfX0kyQzFfU0NMCQkoX01YNTNfUEFEX0VJTV9EMjFfX0kyQzFfU0NMIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fSTJDMV9TQ0wJCShfTVg1M19QQURfRUlNX0QyMV9fSTJDMV9TQ0wgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyMV9fVVNCT0gzX1VTQk9UR19PQwkJKF9NWDUzX1BBRF9FSU1fRDIxX19VU0JPSDNfVVNCT1RHX09DIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyMl9fRU1JX1dFSU1fRF8yMgkJKF9NWDUzX1BBRF9FSU1fRDIyX19FTUlfV0VJTV9EXzIyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyMl9fR1BJTzNfMjIJCShfTVg1M19QQURfRUlNX0QyMl9fR1BJTzNfMjIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQpAQCAtMTczMiw3ICsxNzM1LDcgQEAKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fVUFSVDJfQ1RTCQkoX01YNTNfUEFEX0VJTV9EMjhfX1VBUlQyX0NUUyB8IE1VWF9QQURfQ1RSTChNWDUzX1VBUlRfUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9FSU1fRDI4X19JUFVfRElTUEIwX1NFUl9ESU8JCShfTVg1M19QQURfRUlNX0QyOF9fSVBVX0RJU1BCMF9TRVJfRElPIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fQ1NQSV9NT1NJCQkoX01YNTNfUEFEX0VJTV9EMjhfX0NTUElfTU9TSSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjhfX0kyQzFfU0RBCQkoX01YNTNfUEFEX0VJTV9EMjhfX0kyQzFfU0RBIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKKyNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fSTJDMV9TREEJCShfTVg1M19QQURfRUlNX0QyOF9fSTJDMV9TREEgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfRUlNX0QyOF9fSVBVX0VYVF9UUklHCQkoX01YNTNfUEFEX0VJTV9EMjhfX0lQVV9FWFRfVFJJRyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjhfX0lQVV9ESTBfUElOMTMJCShfTVg1M19QQURfRUlNX0QyOF9fSVBVX0RJMF9QSU4xMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0VJTV9EMjlfX0VNSV9XRUlNX0RfMjkJCShfTVg1M19QQURfRUlNX0QyOV9fRU1JX1dFSU1fRF8yOSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCkBAIC0yMjk3LDcgKzIzMDAsNyBAQAogI2RlZmluZSBNWDUzX1BBRF9HUElPXzlfX1NDQ19GQUlMX1NUQVRFCQkoX01YNTNfUEFEX0dQSU9fOV9fU0NDX0ZBSUxfU1RBVEUgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX0VTQUkxX0hDS1IJCShfTVg1M19QQURfR1BJT18zX19FU0FJMV9IQ0tSIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT18zX19HUElPMV8zCQkoX01YNTNfUEFEX0dQSU9fM19fR1BJTzFfMyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCi0jZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fSTJDM19TQ0wJCShfTVg1M19QQURfR1BJT18zX19JMkMzX1NDTCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fSTJDM19TQ0wJCShfTVg1M19QQURfR1BJT18zX19JMkMzX1NDTCB8IE1VWF9QQURfQ1RSTChQQURfQ1RSTF9JMkMpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX0RQTExJUDFfVE9HX0VOCQkoX01YNTNfUEFEX0dQSU9fM19fRFBMTElQMV9UT0dfRU4gfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX0NDTV9DTEtPMgkJKF9NWDUzX1BBRF9HUElPXzNfX0NDTV9DTEtPMiB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fM19fT0JTRVJWRV9NVVhfT0JTUlZfSU5UX09VVDAJCShfTVg1M19QQURfR1BJT18zX19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCkBAIC0yMzA1LDcgKzIzMDgsNyBAQAogI2RlZmluZSBNWDUzX1BBRF9HUElPXzNfX01MQl9NTEJDTEsJCShfTVg1M19QQURfR1BJT18zX19NTEJfTUxCQ0xLIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT182X19FU0FJMV9TQ0tUCQkoX01YNTNfUEFEX0dQSU9fNl9fRVNBSTFfU0NLVCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNl9fR1BJTzFfNgkJKF9NWDUzX1BBRF9HUElPXzZfX0dQSU8xXzYgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0dQSU9fNl9fSTJDM19TREEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzZfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0dQSU9fNl9fSTJDM19TREEgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT182X19DQ01fQ0NNX09VVF8wCQkoX01YNTNfUEFEX0dQSU9fNl9fQ0NNX0NDTV9PVVRfMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNl9fQ1NVX0NTVV9JTlRfREVCCQkoX01YNTNfUEFEX0dQSU9fNl9fQ1NVX0NTVV9JTlRfREVCIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT182X19PQlNFUlZFX01VWF9PQlNSVl9JTlRfT1VUMQkJKF9NWDUzX1BBRF9HUElPXzZfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKQEAgLTIzMzMsNyArMjMzNiw3IEBACiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNV9fQ0NNX0NMS08JCShfTVg1M19QQURfR1BJT181X19DQ01fQ0xLTyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fNV9fQ1NVX0NTVV9BTEFSTV9BVVRfMgkJKF9NWDUzX1BBRF9HUElPXzVfX0NTVV9DU1VfQUxBUk1fQVVUXzIgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX09CU0VSVkVfTVVYX09CU1JWX0lOVF9PVVQ0CQkoX01YNTNfUEFEX0dQSU9fNV9fT0JTRVJWRV9NVVhfT0JTUlZfSU5UX09VVDQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0kyQzNfU0NMCQkoX01YNTNfUEFEX0dQSU9fNV9fSTJDM19TQ0wgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQorI2RlZmluZSBNWDUzX1BBRF9HUElPXzVfX0kyQzNfU0NMCQkoX01YNTNfUEFEX0dQSU9fNV9fSTJDM19TQ0wgfCBNVVhfUEFEX0NUUkwoUEFEX0NUUkxfSTJDKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT181X19DQ01fUExMMV9CWVAJCShfTVg1M19QQURfR1BJT181X19DQ01fUExMMV9CWVAgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzdfX0VTQUkxX1RYNF9SWDEJCShfTVg1M19QQURfR1BJT183X19FU0FJMV9UWDRfUlgxIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT183X19HUElPMV83CQkoX01YNTNfUEFEX0dQSU9fN19fR1BJTzFfNyB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCkBAIC0yMzU2LDcgKzIzNTksNyBAQAogI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19UWklDX1BXUkZBSUxfSU5UCQkoX01YNTNfUEFEX0dQSU9fMTZfX1RaSUNfUFdSRkFJTF9JTlQgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQogI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19SVENfQ0VfUlRDX0VYVF9UUklHMQkJKF9NWDUzX1BBRF9HUElPXzE2X19SVENfQ0VfUlRDX0VYVF9UUklHMSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX1NQRElGX0lOMQkJKF9NWDUzX1BBRF9HUElPXzE2X19TUERJRl9JTjEgfCBNVVhfUEFEX0NUUkwoTk9fUEFEX0NUUkwpKQotI2RlZmluZSBNWDUzX1BBRF9HUElPXzE2X19JMkMzX1NEQQkJKF9NWDUzX1BBRF9HUElPXzE2X19JMkMzX1NEQSB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCisjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX0kyQzNfU0RBCQkoX01YNTNfUEFEX0dQSU9fMTZfX0kyQzNfU0RBIHwgTVVYX1BBRF9DVFJMKFBBRF9DVFJMX0kyQykpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTZfX1NKQ19ERV9CCQkoX01YNTNfUEFEX0dQSU9fMTZfX1NKQ19ERV9CIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKICNkZWZpbmUgTVg1M19QQURfR1BJT18xN19fRVNBSTFfVFgwCQkoX01YNTNfUEFEX0dQSU9fMTdfX0VTQUkxX1RYMCB8IE1VWF9QQURfQ1RSTChOT19QQURfQ1RSTCkpCiAjZGVmaW5lIE1YNTNfUEFEX0dQSU9fMTdfX0dQSU83XzEyCQkoX01YNTNfUEFEX0dQSU9fMTdfX0dQSU83XzEyIHwgTVVYX1BBRF9DVFJMKE5PX1BBRF9DVFJMKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggNmU2NzM1Zi4uYmI4ZjRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTEzLDYgKzEzLDcgQEAKIAlib29sICJUSSBPTUFQMSIKIAlzZWxlY3QgQ0xLREVWX0xPT0tVUAogCXNlbGVjdCBDTEtTUkNfTU1JTworCXNlbGVjdCBHRU5FUklDX0lSUV9DSElQCiAJaGVscAogCSAgIlN5c3RlbXMgYmFzZWQgb24gb21hcDd4eCwgb21hcDE1eHggb3Igb21hcDE2eHgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCmluZGV4IGQxYzkxNmYuLmRjNTYyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaApAQCAtMTk1LDYgKzE5NSwxMSBAQAogCiAjZGVmaW5lIE9NQVAzNlhYX0RNQV9VQVJUNF9UWAkJODEJLyogU19ETUFfODAgKi8KICNkZWZpbmUgT01BUDM2WFhfRE1BX1VBUlQ0X1JYCQk4MgkvKiBTX0RNQV84MSAqLworCisvKiBPbmx5IGZvciBBTTM1eHggKi8KKyNkZWZpbmUgQU0zNVhYX0RNQV9VQVJUNF9UWAkJNTQKKyNkZWZpbmUgQU0zNVhYX0RNQV9VQVJUNF9SWAkJNTUKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBPTUFQMV9ETUFfVE9VVF9JUlEJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDkyNmQyNWMuLjMwZTEwNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0zNTcsNiArMzU3LDcgQEAKICNkZWZpbmUgSU5UXzM1WFhfRU1BQ19DMF9UWF9QVUxTRV9JUlEJNjkKICNkZWZpbmUgSU5UXzM1WFhfRU1BQ19DMF9NSVNDX1BVTFNFX0lSUQk3MAogI2RlZmluZSBJTlRfMzVYWF9VU0JPVEdfSVJRCQk3MQorI2RlZmluZSBJTlRfMzVYWF9VQVJUNAkJCTg0CiAjZGVmaW5lIElOVF8zNVhYX0NDRENfVkQwX0lSUQkJODgKICNkZWZpbmUgSU5UXzM1WFhfQ0NEQ19WRDFfSVJRCQk5MgogI2RlZmluZSBJTlRfMzVYWF9DQ0RDX1ZEMl9JUlEJCTkzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAppbmRleCAyNzIzZjkxLi5kZTNiMTBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKQEAgLTU2LDYgKzU2LDkgQEAKICNkZWZpbmUgVEk4MTZYX1VBUlQyX0JBU0UJMHg0ODAyMjAwMAogI2RlZmluZSBUSTgxNlhfVUFSVDNfQkFTRQkweDQ4MDI0MDAwCiAKKy8qIEFNMzUwNS8zNTE3IFVBUlQ0ICovCisjZGVmaW5lIEFNMzVYWF9VQVJUNF9CQVNFCTB4NDgwOUUwMDAJLyogT25seSBvbiBBTTM1MDUvMzUxNyAqLworCiAvKiBFeHRlcm5hbCBwb3J0IG9uIFpvb20yLzMgKi8KICNkZWZpbmUgWk9PTV9VQVJUX0JBU0UJCTB4MTAwMDAwMDAKICNkZWZpbmUgWk9PTV9VQVJUX1ZJUlQJCTB4ZmE0MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggYzYwNzM3Yy4uNzllN2ZlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTQyMyw5ICs0MjMsNiBAQAogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jdm9pZCAqdmE7Ci0KLQl2YSA9IHBoeXNfdG9fdmlydChwYSk7CiAKIAlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIHNndC0+bmVudHMsIGkpIHsKIAkJdW5zaWduZWQgYnl0ZXM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IGI2YjQwOTcuLjAyNjA5ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC02MTUsNiArNjE1LDkgQEAKIAogCXJldHVybiBwbV9nZW5lcmljX3Jlc3VtZV9ub2lycShkZXYpOwogfQorI2Vsc2UKKyNkZWZpbmUgX29kX3N1c3BlbmRfbm9pcnEgTlVMTAorI2RlZmluZSBfb2RfcmVzdW1lX25vaXJxIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGRldl9wbV9kb21haW4gb21hcF9kZXZpY2VfcG1fZG9tYWluID0gewpAQCAtNjIyLDcgKzYyNSw4IEBACiAJCVNFVF9SVU5USU1FX1BNX09QUyhfb2RfcnVudGltZV9zdXNwZW5kLCBfb2RfcnVudGltZV9yZXN1bWUsCiAJCQkJICAgX29kX3J1bnRpbWVfaWRsZSkKIAkJVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUwotCQlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhfb2Rfc3VzcGVuZF9ub2lycSwgX29kX3Jlc3VtZV9ub2lycSkKKwkJLnN1c3BlbmRfbm9pcnEgPSBfb2Rfc3VzcGVuZF9ub2lycSwKKwkJLnJlc3VtZV9ub2lycSA9IF9vZF9yZXN1bWVfbm9pcnEsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Nsb2NrLmMKaW5kZXggMDJhZjIzNS4uNWY4NGEzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9jbG9jay5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlpZiAoSVNfRVJSKHBjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJhdGUgPSBwY2xrLT5vcHMtPmdldF9yYXRlKGNsayk7CisJcmF0ZSA9IHBjbGstPm9wcy0+Z2V0X3JhdGUocGNsayk7CiAJY2xrX3B1dChwY2xrKTsKIAogCXJldHVybiByYXRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWdwaW9pbnQuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2lycS1ncGlvaW50LmMKaW5kZXggMzI3YWI5Zi4uZjcxMDc4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLWdwaW9pbnQuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtZ3Bpb2ludC5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKwogI2RlZmluZSBHUElPX0JBU0UoY2hpcCkJCSgoKHVuc2lnbmVkIGxvbmcpKGNoaXApLT5iYXNlKSAmIDB4RkZGRkYwMDB1KQogCiAjZGVmaW5lIENPTl9PRkZTRVQJCTB4NzAwCkBAIC04MSw2ICs4Myw5IEBACiAJaW50IGdyb3VwLCBwZW5kX29mZnNldCwgbWFza19vZmZzZXQ7CiAJdW5zaWduZWQgaW50IHBlbmQsIG1hc2s7CiAKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2NoaXAoaXJxKTsKKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKKwogCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGJhbmstPm5yX2dyb3VwczsgZ3JvdXArKykgewogCQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IGJhbmstPmNoaXBzW2dyb3VwXTsKIAkJaWYgKCFjaGlwKQpAQCAtMTAyLDYgKzEwNyw3IEBACiAJCQlwZW5kICY9IH5CSVQob2Zmc2V0KTsKIAkJfQogCX0KKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCiBzdGF0aWMgX19pbml0IGludCBzNXBfZ3Bpb2ludF9hZGQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2JhY2tsaWdodC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9iYWNrbGlnaHQuaAppbmRleCA1MWQ4ZGE4Li5hZDUzMGM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2JhY2tsaWdodC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYmFja2xpZ2h0LmgKQEAgLTIwLDcgKzIwLDcgQEAKIAlpbnQgZnVuYzsKIH07CiAKLWV4dGVybiB2b2lkIHNhbXN1bmdfYmxfc2V0KHN0cnVjdCBzYW1zdW5nX2JsX2dwaW9faW5mbyAqZ3Bpb19pbmZvLAorZXh0ZXJuIHZvaWQgX19pbml0IHNhbXN1bmdfYmxfc2V0KHN0cnVjdCBzYW1zdW5nX2JsX2dwaW9faW5mbyAqZ3Bpb19pbmZvLAogCXN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgKmJsX2RhdGEpOwogCiAjZW5kaWYgLyogX19BU01fUExBVF9CQUNLTElHSFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2lycS12aWMtdGltZXIuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pcnEtdmljLXRpbWVyLmMKaW5kZXggZjcxNGQwNi4uNTE1ODNjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2lycS12aWMtdGltZXIuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaXJxLXZpYy10aW1lci5jCkBAIC0yMiw5ICsyMiwxNCBAQAogI2luY2x1ZGUgPHBsYXQvaXJxLXZpYy10aW1lci5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgogCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKIHN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdmljX3RpbWVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBpcnFfZ2V0X2NoaXAoaXJxKTsKKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKIAlnZW5lcmljX2hhbmRsZV9pcnEoKGludClkZXNjLT5pcnFfZGF0YS5oYW5kbGVyX2RhdGEpOworCWNoYWluZWRfaXJxX2V4aXQoY2hpcCwgZGVzYyk7CiB9CiAKIC8qIFdlIGFzc3VtZSB0aGUgSVJRX1RJTUVSMC4uSVJRX1RJTUVSNCByYW5nZSBpcyBjb250aW51b3VzLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggM2IzNzc2ZC4uNjJjYzhmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0zNTEsNyArMzUxLDcgQEAKIG5va2lhX3J4NTEJCU1BQ0hfTk9LSUFfUlg1MQkJTk9LSUFfUlg1MQkJMTk1NQogb21hcF96b29tMgkJTUFDSF9PTUFQX1pPT00yCQlPTUFQX1pPT00yCQkxOTY3CiBjcHVhdDkyNjAJCU1BQ0hfQ1BVQVQ5MjYwCQlDUFVBVDkyNjAJCTE5NzMKLWV1a3JlYV9jcHVpbXgyNwkJTUFDSF9DUFVJTVgyNwkJQ1BVSU1YMjcJCTE5NzUKK2V1a3JlYV9jcHVpbXgyNwkJTUFDSF9FVUtSRUFfQ1BVSU1YMjcJRVVLUkVBX0NQVUlNWDI3CQkxOTc1CiBhY3M1awkJCU1BQ0hfQUNTNUsJCUFDUzVLCQkJMTk4Mgogc25hcHBlcl85MjYwCQlNQUNIX1NOQVBQRVJfOTI2MAlTTkFQUEVSXzkyNjAJCTE5ODcKIGRzbTMyMAkJCU1BQ0hfRFNNMzIwCQlEU00zMjAJCQkxOTg4CkBAIC00NzYsOCArNDc2LDggQEAKIG9tYXA0X3BhbmRhCQlNQUNIX09NQVA0X1BBTkRBCU9NQVA0X1BBTkRBCQkyNzkxCiB0aTgxNjhldm0JCU1BQ0hfVEk4MTY4RVZNCQlUSTgxNjhFVk0JCTI4MDAKIHRldG9uX2JnYQkJTUFDSF9URVRPTl9CR0EJCVRFVE9OX0JHQQkJMjgxNgotZXVrcmVhX2NwdWlteDI1c2QJTUFDSF9FVUtSRUFfQ1BVSU1YMjUJRVVLUkVBX0NQVUlNWDI1CQkyODIwCi1ldWtyZWFfY3B1aW14MzVzZAlNQUNIX0VVS1JFQV9DUFVJTVgzNQlFVUtSRUFfQ1BVSU1YMzUJCTI4MjEKK2V1a3JlYV9jcHVpbXgyNXNkCU1BQ0hfRVVLUkVBX0NQVUlNWDI1U0QJRVVLUkVBX0NQVUlNWDI1U0QJMjgyMAorZXVrcmVhX2NwdWlteDM1c2QJTUFDSF9FVUtSRUFfQ1BVSU1YMzVTRAlFVUtSRUFfQ1BVSU1YMzVTRAkyODIxCiBldWtyZWFfY3B1aW14NTFzZAlNQUNIX0VVS1JFQV9DUFVJTVg1MVNECUVVS1JFQV9DUFVJTVg1MVNECTI4MjIKIGV1a3JlYV9jcHVpbXg1MQkJTUFDSF9FVUtSRUFfQ1BVSU1YNTEJRVVLUkVBX0NQVUlNWDUxCQkyODIzCiBzbWRrYzIxMAkJTUFDSF9TTURLQzIxMAkJU01ES0MyMTAJCTI4MzgKQEAgLTkxMCw3ICs5MTAsNyBAQAogdWVtZAkJCU1BQ0hfVUVNRAkJVUVNRAkJCTMyODEKIGNjd214NTFtdXQJCU1BQ0hfQ0NXTVg1MU1VVAkJQ0NXTVg1MU1VVAkJMzI4Mgogcm9ja2hvcHBlcgkJTUFDSF9ST0NLSE9QUEVSCQlST0NLSE9QUEVSCQkzMjgzCi1ub29rY29sb3IJCU1BQ0hfTk9PS0NPTE9SCQlOT09LQ09MT1IJCTMyODQKK2VuY29yZQkJCU1BQ0hfRU5DT1JFCQlFTkNPUkUJCQkzMjg0CiBoa2RrYzEwMAkJTUFDSF9IS0RLQzEwMAkJSEtES0MxMDAJCTMyODUKIHRzNDJ4eAkJCU1BQ0hfVFM0MlhYCQlUUzQyWFgJCQkzMjg2CiBhZWJsCQkJTUFDSF9BRUJMCQlBRUJMCQkJMzI4NwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IGU5ZDY4OWIuLjE5N2U5NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTEwLDYgKzEwLDcgQEAKIAlzZWxlY3QgR0VORVJJQ19JUlFfUFJPQkUKIAlzZWxlY3QgSEFSRElSUVNfU1dfUkVTRU5ECiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKKwlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKIAloZWxwCiAJICBBVlIzMiBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgY29yZSwKIAkgIGRlc2lnbmVkIGZvciBjb3N0LXNlbnNpdGl2ZSBlbWJlZGRlZCBhcHBsaWNhdGlvbnMsIHdpdGggcGFydGljdWxhcgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IGM3ZmQzOTQuLjZlYmE1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCS5sb25nCXN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAkubG9uZwlzeXNfbmFub3NsZWVwCiAJLmxvbmcJc3lzX3BvbGwKLQkubG9uZwlzeXNfbmZzc2VydmN0bAkJLyogMTQ1ICovCisJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIDE0NSB3YXMgbmZzc2VydmN0bCAqLwogCS5sb25nCXN5c19zZXRyZXNnaWQKIAkubG9uZwlzeXNfZ2V0cmVzZ2lkCiAJLmxvbmcJc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKaW5kZXggMjI1ZDMxMS4uZTQxMzcyOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwpAQCAtMTU0Myw3ICsxNTQzLDcgQEAKIAkubG9uZyBfc3lzX25pX3N5c2NhbGwJLyogZm9yIHZtODYgKi8KIAkubG9uZyBfc3lzX25pX3N5c2NhbGwJLyogb2xkICJxdWVyeV9tb2R1bGUiICovCiAJLmxvbmcgX3N5c19uaV9zeXNjYWxsCS8qIHN5c19wb2xsICovCi0JLmxvbmcgX3N5c19uZnNzZXJ2Y3RsCisJLmxvbmcgX3N5c19uaV9zeXNjYWxsICAgLyogb2xkIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBfc3lzX3NldHJlc2dpZAkvKiBzZXRyZXNnaWQxNiAqLwkvKiAxNzAgKi8KIAkubG9uZyBfc3lzX2dldHJlc2dpZAkvKiBnZXRyZXNnaWQxNiAqLwogCS5sb25nIF9zeXNfcHJjdGwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IDg1MDI2NTM3Li40NjZhZjQwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogc3RhdGljIGludCBzeW5jX3NlcmlhbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3luY19zZXJpYWxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCk7CiAKLXN0YXRpYyBpbnQgc3luY19zZXJpYWxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgbG9uZyBzeW5jX3NlcmlhbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgc3NpemVfdCBzeW5jX3NlcmlhbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKQEAgLTYyNSwxMSArNjI1LDExIEBACiAJCQkqUl9JUlFfTUFTSzFfU0VUID0gMSA8PCBwb3J0LT5kYXRhX2F2YWlsX2JpdDsKIAkJREVCVUcocHJpbnRrKEtFUk5fREVCVUcgInNzZXIlZCByZWMgc3RhcnRlZFxuIiwgZGV2KSk7CiAJfQotCXJldCA9IDA7CisJZXJyID0gMDsKIAkKIG91dDoKIAltdXRleF91bmxvY2soJnN5bmNfc2VyaWFsX211dGV4KTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc3luY19zZXJpYWxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUwppbmRleCAxMTYxODgzLi41OTJmYmU5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9lbnRyeS5TCkBAIC03NzEsNyArNzcxLDcgQEAKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfdm04NiAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIE9sZCBzeXNfcXVlcnlfbW9kdWxlICovCiAJLmxvbmcgc3lzX3BvbGwKLQkubG9uZyBzeXNfbmZzc2VydmN0bAorCS5sb25nIHN5c19uaV9zeXNjYWxsICAgIC8qIG9sZCBuZnNzZXJ2Y3RsICovCiAJLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggOTA3Y2ZiNS4uYmEwZTU5NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0yMCw2ICsyMCw5IEBACiAjZGVmaW5lIGNyaXN2MTBfbWFza19pcnEoaXJxX25yKSAoKlJfVkVDVF9NQVNLX0NMUiA9IDEgPDwgKGlycV9ucikpOwogI2RlZmluZSBjcmlzdjEwX3VubWFza19pcnEoaXJxX25yKSAoKlJfVkVDVF9NQVNLX1NFVCA9IDEgPDwgKGlycV9ucikpOwogCitleHRlcm4gdm9pZCBrZ2RiX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBicmVha3BvaW50KHZvaWQpOworCiAvKiBkb24ndCB1c2Ugc2V0X2ludF92ZWN0b3IsIGl0IGJ5cGFzc2VzIHRoZSBsaW51eCBpbnRlcnJ1cHQgaGFuZGxlcnMuIGl0IGlzCiAgKiBnbG9iYWwganVzdCBzbyB0aGF0IHRoZSBrZXJuZWwgZ2RiIGNhbiB1c2UgaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUwppbmRleCA4NGZlZDdlLi5jM2VhNDY5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCkBAIC03MTQsNyArNzE0LDcgQEAKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfdm04NiAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIE9sZCBzeXNfcXVlcnlfbW9kdWxlICovCiAJLmxvbmcgc3lzX3BvbGwKLQkubG9uZyBzeXNfbmZzc2VydmN0bAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIE9sZCBuZnNzZXJ2Y3RsICovCiAJLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NlcmlhbC5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzUzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc2VyaWFsLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9BU01fU0VSSUFMX0gKKyNkZWZpbmUgX0FTTV9TRVJJQUxfSAorCisvKgorICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgorICovCisjZGVmaW5lIEJBU0VfQkFVRCAoMTg0MzIwMCAvIDE2KQorCisjZW5kaWYgLyogX0FTTV9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyOWI3NGExLi4zMzJmMTljIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTEsOCArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTY3LDggKzY1LDEwIEBACiAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCiAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2ssIG5vZGUpICgoc3RydWN0IHRocmVhZF9pbmZvICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKSkKKyNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm9fbm9kZSh0c2ssIG5vZGUpCVwKKwkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDEpKQogI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodGkpLCAxKQogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggY2I4ODRlNC4uYmFkMjdhNiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XCisJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCiAKIGNvbmZpZyBaT05FX0RNQQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKaW5kZXggMDE3ZDZkNy4uNWJhMjNmNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9mcnYva2VybmVsL2VudHJ5LlMKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogZm9yIHZtODYgKi8KIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBPbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBPbGQgbmZzc2VydmN0bCAqLwogCS5sb25nIHN5c19zZXRyZXNnaWQxNgkvKiAxNzAgKi8KIAkubG9uZyBzeXNfZ2V0cmVzZ2lkMTYKIAkubG9uZyBzeXNfcHJjdGwKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL3BnYWxsb2MuYyBiL2FyY2gvZnJ2L21tL3BnYWxsb2MuYwppbmRleCBjNDJjODNkLi40ZmI2M2EzIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9wZ2FsbG9jLmMKKysrIGIvYXJjaC9mcnYvbW0vcGdhbGxvYy5jCkBAIC0xMzMsMTMgKzEzMyw3IEBACiAKIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JcGdkX3QgKnBnZDsKLQotCXBnZCA9IHF1aWNrbGlzdF9hbGxvYygwLCBHRlBfS0VSTkVMLCBwZ2RfY3Rvcik7Ci0JaWYgKCFwZ2QpCi0JCXJldHVybiBwZ2Q7Ci0KLQlyZXR1cm4gcGdkOworCXJldHVybiBxdWlja2xpc3RfYWxsb2MoMCwgR0ZQX0tFUk5FTCwgcGdkX2N0b3IpOwogfQogCiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvc3lzY2FsbHMuUyBiL2FyY2gvaDgzMDAva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggZjRiMmU2Ny4uNGJlMmVhMiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TCkBAIC0xODMsNyArMTgzLDcgQEAKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogZm9yIHZtODYgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbmlfc3lzY2FsbCkJLyogc3lzX3F1ZXJ5X21vZHVsZSAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19wb2xsKQotCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uZnNzZXJ2Y3RsKQorCS5sb25nIFNZTUJPTF9OQU1FKHN5c19uaV9zeXNjYWxsKQkvKiBvbGQgbmZzc2VydmN0bCAqLwogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zZXRyZXNnaWQxNikJLyogMTcwICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2dldHJlc2dpZDE2KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19wcmN0bCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggMTM3YjI3Ny4uM2ZmNzc4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTI3LDYgKzI3LDggQEAKIAlzZWxlY3QgR0VORVJJQ19QRU5ESU5HX0lSUSBpZiBTTVAKIAlzZWxlY3QgSVJRX1BFUl9DUFUKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVworCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgorCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoZSBJdGFuaXVtIFByb2Nlc3NvciBGYW1pbHkgaXMgSW50ZWwncyA2NC1iaXQgc3VjY2Vzc29yIHRvCkBAIC04OSw2ICs5MSw5IEBACiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBETUkKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0xNTcsNyArMTYyLDYgQEAKIAlzZWxlY3QgQUNQSV9OVU1BCiAJc2VsZWN0IFNXSU9UTEIKIAlzZWxlY3QgUENJX01TSQotCXNlbGVjdCBETUFSCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBzeXN0ZW0gdHlwZSBvZiB5b3VyIGhhcmR3YXJlLiAgQSAiZ2VuZXJpYyIga2VybmVsCiAJICB3aWxsIHJ1biBvbiBhbnkgc3VwcG9ydGVkIElBLTY0IHN5c3RlbS4gIEhvd2V2ZXIsIGlmIHlvdSBjb25maWd1cmUKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKaW5kZXggMWQ3YmNhMC4uMGU1Y2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKQEAgLTIzNCwzICsyMzQsNCBAQAogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01JU0NfREVWSUNFUz15CitDT05GSUdfRE1BUj15CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTBhMjBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogR2VuZXJpYyBHUElPIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgSUEtNjQuCisgKgorICogQSBzdHJpZ2h0IGNvcHkgb2YgdGhhdCBmb3IgUG93ZXJQQyB3aGljaCB3YXM6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX0lBNjRfR1BJT19ICisjZGVmaW5lIF9BU01fSUE2NF9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKworLyoKKyAqIFdlIGRvbid0ICh5ZXQpIGltcGxlbWVudCBpbmxpbmVkL3JhcGlkIHZlcnNpb25zIGZvciBvbi1jaGlwIGdwaW9zLgorICogSnVzdCBjYWxsIGdwaW9saWIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX3RvX2lycShncGlvKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2VuZGlmIC8qIENPTkZJR19HUElPTElCICovCisKKyNlbmRpZiAvKiBfQVNNX0lBNjRfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCA2ZmMwM2FmLi5jMzhkMjJlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogI2RlZmluZSBTVFVCX1NFVF9WQVJJQUJMRShwcmVmaXgsIGFkanVzdF9hcmcpCQkJCSAgICAgICBcCiBzdGF0aWMgZWZpX3N0YXR1c190CQkJCQkJCSAgICAgICBcCiBwcmVmaXgjI19zZXRfdmFyaWFibGUgKGVmaV9jaGFyMTZfdCAqbmFtZSwgZWZpX2d1aWRfdCAqdmVuZG9yLAkJICAgICAgIFwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0ciwgdW5zaWduZWQgbG9uZyBkYXRhX3NpemUsCSAgICAgICBcCisJCSAgICAgICB1MzIgYXR0ciwgdW5zaWduZWQgbG9uZyBkYXRhX3NpemUsCQkgICAgICAgXAogCQkgICAgICAgdm9pZCAqZGF0YSkJCQkJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKIAlzdHJ1Y3QgaWE2NF9mcHJlZyBmcls2XTsJCQkJCSAgICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggOTdkZDJhYi4uMTk4Yzc1MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTYxNCw3ICsxNjE0LDcgQEAKIAlkYXRhOCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogCWRhdGE4IHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAlkYXRhOCBzeXNfbmFub3NsZWVwCi0JZGF0YTggc3lzX25mc3NlcnZjdGwKKwlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIG9sZCBuZnNzZXJ2Y3RsCiAJZGF0YTggc3lzX3ByY3RsCQkJCS8vIDExNzAKIAlkYXRhOCBzeXNfZ2V0cGFnZXNpemUKIAlkYXRhOCBzeXNfbW1hcDIKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9tMzJyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggNTI4ZjJlNi4uZjM2NWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCS5sb25nIHN5c190YXMJCQkvKiB2bTg2IHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIHF1ZXJ5X21vZHVsZSBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogd2FzIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBzeXNfc2V0cmVzZ2lkCQkvKiAxNzAgKi8KIAkubG9uZyBzeXNfZ2V0cmVzZ2lkCiAJLmxvbmcgc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDI4NGNkMzcuLjllOGVlOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmIE1NVQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMgaWYgIU1NVQogCXNlbGVjdCBHRU5FUklDX0lSUV9TSE9XIGlmICFNTVUKKwlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcgaWYgUk1XX0lOU05TCiAKIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcubW11IGIvYXJjaC9tNjhrL0tjb25maWcubW11CmluZGV4IDE2NTM5YjEuLjEzZTIwYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnLm1tdQorKysgYi9hcmNoL202OGsvS2NvbmZpZy5tbXUKQEAgLTM3MiwxMiArMzcyLDYgQEAKIAkgIEluY2x1ZGUgc3VwcG9ydCBpbiB0aGUga2VybmVsIGZvciBwY21jaWEgb24gQW1pZ2EgMTIwMCBhbmQgQW1pZ2EKIAkgIDYwMC4gSWYgeW91IGludGVuZCB0byB1c2UgcGNtY2lhIGNhcmRzIHNheSBZOyBvdGhlcndpc2Ugc2F5IE4uCiAKLWNvbmZpZyBTVFJBTV9QUk9DCi0JYm9vbCAiU1QtUkFNIHN0YXRpc3RpY3MgaW4gL3Byb2MiCi0JZGVwZW5kcyBvbiBBVEFSSQotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gcmVwb3J0IFNULVJBTSB1c2FnZSBzdGF0aXN0aWNzIGluIC9wcm9jL3N0cmFtLgotCiBjb25maWcgSEVBUlRCRUFUCiAJYm9vbCAiVXNlIHBvd2VyIExFRCBhcyBhIGhlYXJ0YmVhdCIgaWYgQU1JR0EgfHwgQVBPTExPIHx8IEFUQVJJIHx8IE1BQyB8fFE0MAogCWRlZmF1bHQgeSBpZiAhQU1JR0EgJiYgIUFQT0xMTyAmJiAhQVRBUkkgJiYgIU1BQyAmJiAhUTQwICYmIEhQMzAwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvY2hpcHJhbS5jIGIvYXJjaC9tNjhrL2FtaWdhL2NoaXByYW0uYwppbmRleCBkZDA0NDdkLi45OTQ0OWZiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY2hpcHJhbS5jCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9jaGlwcmFtLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CiAKQEAgLTIzLDExMSArMjQsMTAwIEBACiBFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfc2l6ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2hpcHJhbV9yZXMgPSB7Ci0gICAgLm5hbWUgPSAiQ2hpcCBSQU0iLCAuc3RhcnQgPSBDSElQX1BIWVNBRERSCisJLm5hbWUgPSAiQ2hpcCBSQU0iLCAuc3RhcnQgPSBDSElQX1BIWVNBRERSCiB9Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2hpcGF2YWlsOworc3RhdGljIGF0b21pY190IGNoaXBhdmFpbDsKIAogCiB2b2lkIF9faW5pdCBhbWlnYV9jaGlwX2luaXQodm9pZCkKIHsKLSAgICBpZiAoIUFNSUdBSFdfUFJFU0VOVChDSElQX1JBTSkpCi0JcmV0dXJuOworCWlmICghQU1JR0FIV19QUkVTRU5UKENISVBfUkFNKSkKKwkJcmV0dXJuOwogCi0gICAgY2hpcHJhbV9yZXMuZW5kID0gYW1pZ2FfY2hpcF9zaXplLTE7Ci0gICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjaGlwcmFtX3Jlcyk7CisJY2hpcHJhbV9yZXMuZW5kID0gQ0hJUF9QSFlTQUREUiArIGFtaWdhX2NoaXBfc2l6ZSAtIDE7CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjaGlwcmFtX3Jlcyk7CiAKLSAgICBjaGlwYXZhaWwgPSBhbWlnYV9jaGlwX3NpemU7CisJYXRvbWljX3NldCgmY2hpcGF2YWlsLCBhbWlnYV9jaGlwX3NpemUpOwogfQogCiAKIHZvaWQgKmFtaWdhX2NoaXBfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpuYW1lKQogewotICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgKnA7CiAKLSAgICAvKiByb3VuZCB1cCAqLwotICAgIHNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKIAotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jOiBhbGxvY2F0ZSAlbGQgYnl0ZXNcbiIsIHNpemUpOwotI2VuZGlmCi0gICAgcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFyZXMpCi0JcmV0dXJuIE5VTEw7Ci0gICAgcmVzLT5uYW1lID0gbmFtZTsKKwlyZXMtPm5hbWUgPSBuYW1lOworCXAgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhzaXplLCByZXMpOworCWlmICghcCkgeworCQlrZnJlZShyZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLSAgICBpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJmNoaXByYW1fcmVzLCByZXMsIHNpemUsIDAsIFVJTlRfTUFYLCBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpIDwgMCkgewotCWtmcmVlKHJlcyk7Ci0JcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNoaXBhdmFpbCAtPSBzaXplOwotI2lmZGVmIERFQlVHCi0gICAgcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jOiByZXR1cm5pbmcgJWx4XG4iLCByZXMtPnN0YXJ0KTsKLSNlbmRpZgotICAgIHJldHVybiAodm9pZCAqKVpUV09fVkFERFIocmVzLT5zdGFydCk7CisJcmV0dXJuIHA7CiB9CiBFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfYWxsb2MpOwogCiAKLSAgICAvKgotICAgICAqICBXYXJuaW5nOgotICAgICAqICBhbWlnYV9jaGlwX2FsbG9jX3JlcyBpcyBtZWFudCBvbmx5IGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byBhbGxvY2F0ZQotICAgICAqICBDaGlwIFJBTSBiZWZvcmUga21hbGxvYygpIGlzIGZ1bmN0aW9uYWwuIEFzIGEgY29uc2VxdWVuY2UsIHRob3NlCi0gICAgICogIGRyaXZlcnMgbXVzdCBub3QgZnJlZSB0aGF0IENoaXAgUkFNIGFmdGVyd2FyZHMuCi0gICAgICovCisJLyoKKwkgKiAgV2FybmluZzoKKwkgKiAgYW1pZ2FfY2hpcF9hbGxvY19yZXMgaXMgbWVhbnQgb25seSBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8KKwkgKiAgYWxsb2NhdGUgQ2hpcCBSQU0gYmVmb3JlIGttYWxsb2MoKSBpcyBmdW5jdGlvbmFsLiBBcyBhIGNvbnNlcXVlbmNlLAorCSAqICB0aG9zZSBkcml2ZXJzIG11c3Qgbm90IGZyZWUgdGhhdCBDaGlwIFJBTSBhZnRlcndhcmRzLgorCSAqLwogCi12b2lkICogX19pbml0IGFtaWdhX2NoaXBfYWxsb2NfcmVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHJlc291cmNlICpyZXMpCit2b2lkICphbWlnYV9jaGlwX2FsbG9jX3Jlcyh1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IGVycm9yOwogCi0gICAgLyogcm91bmQgdXAgKi8KLSAgICBzaXplID0gUEFHRV9BTElHTihzaXplKTsKLSAgICAvKiBkbWVzZyBpbnRvIGNoaXBtZW0gcHJlZmVycyBtZW1vcnkgYXQgdGhlIHNhZmUgZW5kICovCi0gICAgc3RhcnQgPSBDSElQX1BIWVNBRERSICsgY2hpcGF2YWlsIC0gc2l6ZTsKKwkvKiByb3VuZCB1cCAqLworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCi0jaWZkZWYgREVCVUcKLSAgICBwcmludGsoImFtaWdhX2NoaXBfYWxsb2NfcmVzOiBhbGxvY2F0ZSAlbGQgYnl0ZXNcbiIsIHNpemUpOwotI2VuZGlmCi0gICAgaWYgKGFsbG9jYXRlX3Jlc291cmNlKCZjaGlwcmFtX3JlcywgcmVzLCBzaXplLCBzdGFydCwgVUlOVF9NQVgsIFBBR0VfU0laRSwgTlVMTCwgTlVMTCkgPCAwKSB7Ci0JcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jX3JlczogZmlyc3QgYWxsb2MgZmFpbGVkIVxuIik7Ci0JaWYgKGFsbG9jYXRlX3Jlc291cmNlKCZjaGlwcmFtX3JlcywgcmVzLCBzaXplLCAwLCBVSU5UX01BWCwgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSA8IDApCi0JICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBjaGlwYXZhaWwgLT0gc2l6ZTsKLSNpZmRlZiBERUJVRwotICAgIHByaW50aygiYW1pZ2FfY2hpcF9hbGxvY19yZXM6IHJldHVybmluZyAlbHhcbiIsIHJlcy0+c3RhcnQpOwotI2VuZGlmCi0gICAgcmV0dXJuICh2b2lkICopWlRXT19WQUREUihyZXMtPnN0YXJ0KTsKKwlwcl9kZWJ1ZygiYW1pZ2FfY2hpcF9hbGxvY19yZXM6IGFsbG9jYXRlICVsdSBieXRlc1xuIiwgc2l6ZSk7CisJZXJyb3IgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmY2hpcHJhbV9yZXMsIHJlcywgc2l6ZSwgMCwgVUlOVF9NQVgsCisJCQkJICBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpOworCWlmIChlcnJvciA8IDApIHsKKwkJcHJfZXJyKCJhbWlnYV9jaGlwX2FsbG9jX3JlczogYWxsb2NhdGVfcmVzb3VyY2UoKSBmYWlsZWQgJWQhXG4iLAorCQkgICAgICAgZXJyb3IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhdG9taWNfc3ViKHNpemUsICZjaGlwYXZhaWwpOworCXByX2RlYnVnKCJhbWlnYV9jaGlwX2FsbG9jX3JlczogcmV0dXJuaW5nICVwUlxuIiwgcmVzKTsKKwlyZXR1cm4gKHZvaWQgKilaVFdPX1ZBRERSKHJlcy0+c3RhcnQpOwogfQogCiB2b2lkIGFtaWdhX2NoaXBfZnJlZSh2b2lkICpwdHIpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydCA9IFpUV09fUEFERFIocHRyKTsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgKipwLCAqcmVzOwotICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gWlRXT19QQUREUihwdHIpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAotICAgIGZvciAocCA9ICZjaGlwcmFtX3Jlcy5jaGlsZDsgKHJlcyA9ICpwKTsgcCA9ICZyZXMtPnNpYmxpbmcpIHsKLQlpZiAocmVzLT5zdGFydCAhPSBzdGFydCkKLQkgICAgY29udGludWU7Ci0JKnAgPSByZXMtPnNpYmxpbmc7Ci0Jc2l6ZSA9IHJlcy0+ZW5kLXN0YXJ0OwotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJhbWlnYV9jaGlwX2ZyZWU6IGZyZWUgJWxkIGJ5dGVzIGF0ICVwXG4iLCBzaXplLCBwdHIpOwotI2VuZGlmCi0JY2hpcGF2YWlsICs9IHNpemU7CisJcmVzID0gbG9va3VwX3Jlc291cmNlKCZjaGlwcmFtX3Jlcywgc3RhcnQpOworCWlmICghcmVzKSB7CisJCXByX2VycigiYW1pZ2FfY2hpcF9mcmVlOiB0cnlpbmcgdG8gZnJlZSBub25leGlzdGVudCByZWdpb24gYXQgIgorCQkgICAgICAgIiVwXG4iLCBwdHIpOworCQlyZXR1cm47CisJfQorCisJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlwcl9kZWJ1ZygiYW1pZ2FfY2hpcF9mcmVlOiBmcmVlICVsdSBieXRlcyBhdCAlcFxuIiwgc2l6ZSwgcHRyKTsKKwlhdG9taWNfYWRkKHNpemUsICZjaGlwYXZhaWwpOworCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKIAlrZnJlZShyZXMpOwotCXJldHVybjsKLSAgICB9Ci0gICAgcHJpbnRrKCJhbWlnYV9jaGlwX2ZyZWU6IHRyeWluZyB0byBmcmVlIG5vbmV4aXN0ZW50IHJlZ2lvbiBhdCAlcFxuIiwgcHRyKTsKIH0KIEVYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcF9mcmVlKTsKIAogCiB1bnNpZ25lZCBsb25nIGFtaWdhX2NoaXBfYXZhaWwodm9pZCkKIHsKLSNpZmRlZiBERUJVRwotCXByaW50aygiYW1pZ2FfY2hpcF9hdmFpbCA6ICVsZCBieXRlc1xuIiwgY2hpcGF2YWlsKTsKLSNlbmRpZgotCXJldHVybiBjaGlwYXZhaWw7CisJdW5zaWduZWQgbG9uZyBuID0gYXRvbWljX3JlYWQoJmNoaXBhdmFpbCk7CisKKwlwcl9kZWJ1ZygiYW1pZ2FfY2hpcF9hdmFpbCA6ICVsdSBieXRlc1xuIiwgbik7CisJcmV0dXJuIG47CiB9CiBFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfYXZhaWwpOwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYyBiL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCmluZGV4IDZlYzNiN2YuLjA4MTBjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvbTY4ay9hdGFyaS9zdHJhbS5jOiBGdW5jdGlvbnMgZm9yIFNULVJBTSBhbGxvY2F0aW9ucworICogRnVuY3Rpb25zIGZvciBTVC1SQU0gYWxsb2NhdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgMTk5NC05NyBSb21hbiBIb2RlayA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CiAgKgpAQCAtMzAsOTEgKzMwLDM1IEBACiAjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSN1bmRlZiBERUJVRwotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUJRFBSSU5USyhmbXQsYXJncy4uLikgcHJpbnRrKCBmbXQsICMjYXJncyApCi0jZWxzZQotI2RlZmluZSBEUFJJTlRLKGZtdCxhcmdzLi4uKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19TVFJBTV9QUk9DKQotLyogYWJicmV2IGZvciB0aGUgJiYgYWJvdmUuLi4gKi8KLSNkZWZpbmUgRE9fUFJPQwotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2VuZGlmCiAKIC8qCi0gKiArK3JvbWFuOgotICoKLSAqIE5ldyB2ZXJzaW9uIG9mIFNULVJhbSBidWZmZXIgYWxsb2NhdGlvbi4gSW5zdGVhZCBvZiB1c2luZyB0aGUKLSAqIDEgTUIgLSA0IEtCIHRoYXQgcmVtYWluIHdoZW4gdGhlIFNULVJhbSBjaHVuayBzdGFydHMgYXQgJDEwMDAKLSAqICgxIE1CIGdyYW51bGFyaXR5ISksIHN1Y2ggYnVmZmVycyBhcmUgcmVzZXJ2ZWQgbGlrZSB0aGlzOgotICoKLSAqICAtIElmIHRoZSBrZXJuZWwgcmVzaWRlcyBpbiBTVC1SYW0gYW55d2F5LCB3ZSBjYW4gdGFrZSB0aGUgYnVmZmVyCi0gKiAgICBmcm9tIGJlaGluZCB0aGUgY3VycmVudCBrZXJuZWwgZGF0YSBzcGFjZSB0aGUgbm9ybWFsIHdheQotICogICAgKGluY3JlbWVudGluZyBzdGFydF9tZW0pLgotICoKLSAqICAtIElmIHRoZSBrZXJuZWwgaXMgaW4gVFQtUmFtLCBzdHJhbV9pbml0KCkgaW5pdGlhbGl6ZXMgc3RhcnQgYW5kCi0gKiAgICBlbmQgb2YgdGhlIGF2YWlsYWJsZSByZWdpb24uIEJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZXJlCi0gKiAgICBhbmQgbWVtX2luaXQoKSBsYXRlciBtYXJrcyB0aGUgc3VjaCB1c2VkIHBhZ2VzIGFzIHJlc2VydmVkLgotICogICAgU2luY2UgZWFjaCBUVC1SYW0gY2h1bmsgaXMgYXQgbGVhc3QgNCBNQiBpbiBzaXplLCBJIGhvcGUgdGhlcmUKLSAqICAgIHdvbid0IGJlIGFuIG92ZXJydW4gb2YgdGhlIFNULVJhbSByZWdpb24gYnkgbm9ybWFsIGtlcm5lbCBkYXRhCi0gKiAgICBzcGFjZS4KLSAqCi0gKiBGb3IgdGhhdCwgU1QtUmFtIG1heSBvbmx5IGJlIGFsbG9jYXRlZCB3aGlsZSBrZXJuZWwgaW5pdGlhbGl6YXRpb24KLSAqIGlzIGdvaW5nIG9uLCBvciBleGFjdGx5OiBiZWZvcmUgbWVtX2luaXQoKSBpcyBjYWxsZWQuIFRoZXJlIGlzIGFsc28KLSAqIG5vIHByb3Zpc2lvbiBub3cgZm9yIGZyZWVpbmcgU1QtUmFtIGJ1ZmZlcnMuIEl0IHNlZW1zIHRoYXQgaXNuJ3QKLSAqIHJlYWxseSBuZWVkZWQuCi0gKgorICogVGhlIFNULVJBTSBhbGxvY2F0b3IgYWxsb2NhdGVzIG1lbW9yeSBmcm9tIGEgcG9vbCBvZiByZXNlcnZlZCBTVC1SQU0gb2YKKyAqIGNvbmZpZ3VyYWJsZSBzaXplLCBzZXQgYXNpZGUgb24gU1QtUkFNIGluaXQuCisgKiBBcyBsb25nIGFzIHRoaXMgcG9vbCBpcyBub3QgZXhoYXVzdGVkLCBhbGxvY2F0aW9uIG9mIHJlYWwgU1QtUkFNIGNhbiBiZQorICogZ3VhcmFudGVlZC4KICAqLwogCi0vKiBTdGFydCBhbmQgZW5kICh2aXJ0dWFsKSBvZiBTVC1SQU0gKi8KLXN0YXRpYyB2b2lkICpzdHJhbV9zdGFydCwgKnN0cmFtX2VuZDsKLQotLyogc2V0IGFmdGVyIG1lbW9yeV9pbml0KCkgZXhlY3V0ZWQgYW5kIGFsbG9jYXRpb25zIHZpYSBzdGFydF9tZW0gYXJlbid0Ci0gKiBwb3NzaWJsZSBhbnltb3JlICovCi1zdGF0aWMgaW50IG1lbV9pbml0X2RvbmU7Ci0KIC8qIHNldCBpZiBrZXJuZWwgaXMgaW4gU1QtUkFNICovCiBzdGF0aWMgaW50IGtlcm5lbF9pbl9zdHJhbTsKIAotdHlwZWRlZiBzdHJ1Y3Qgc3RyYW1fYmxvY2sgewotCXN0cnVjdCBzdHJhbV9ibG9jayAqbmV4dDsKLQl2b2lkICpzdGFydDsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgZmxhZ3M7Ci0JY29uc3QgY2hhciAqb3duZXI7Ci19IEJMT0NLOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdHJhbV9wb29sID0geworCS5uYW1lID0gIlNULVJBTSBQb29sIgorfTsKIAotLyogdmFsdWVzIGZvciBmbGFncyBmaWVsZCAqLwotI2RlZmluZSBCTE9DS19GUkVFCTB4MDEJLyogZnJlZSBzdHJ1Y3R1cmUgaW4gdGhlIEJMT0NLcyBwb29sICovCi0jZGVmaW5lIEJMT0NLX0tNQUxMT0NFRAkweDAyCS8qIHN0cnVjdHVyZSBhbGxvY2F0ZWQgYnkga21hbGxvYygpICovCi0jZGVmaW5lIEJMT0NLX0dGUAkweDA4CS8qIGJsb2NrIGFsbG9jYXRlZCB3aXRoIF9fZ2V0X2RtYV9wYWdlcygpICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwb29sX3NpemUgPSAxMDI0KjEwMjQ7CiAKLS8qIGxpc3Qgb2YgYWxsb2NhdGVkIGJsb2NrcyAqLwotc3RhdGljIEJMT0NLICphbGxvY19saXN0OwogCi0vKiBXZSBjYW4ndCBhbHdheXMgdXNlIGttYWxsb2MoKSB0byBhbGxvY2F0ZSBCTE9DSyBzdHJ1Y3R1cmVzLCBzaW5jZQotICogc3RyYW1fYWxsb2MoKSBjYW4gYmUgY2FsbGVkIHJhdGhlciBlYXJseS4gU28gd2UgbmVlZCBzb21lIHBvb2wgb2YKLSAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMuIDIwIG9mIHRoZW0gaXMgbW9yZSB0aGFuIGVub3VnaCwgc28gaW4gbW9zdAotICogY2FzZXMgd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdG8gY2FsbCBrbWFsbG9jKCkuICovCi0jZGVmaW5lIE5fU1RBVElDX0JMT0NLUwkyMAotc3RhdGljIEJMT0NLIHN0YXRpY19ibG9ja3NbTl9TVEFUSUNfQkxPQ0tTXTsKK3N0YXRpYyBpbnQgX19pbml0IGF0YXJpX3N0cmFtX3NldHVwKGNoYXIgKmFyZykKK3sKKwlpZiAoIU1BQ0hfSVNfQVRBUkkpCisJCXJldHVybiAwOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlwb29sX3NpemUgPSBtZW1wYXJzZShhcmcsIE5VTEwpOworCXJldHVybiAwOworfQogCi1zdGF0aWMgQkxPQ0sgKmFkZF9yZWdpb24oIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSApOwotc3RhdGljIEJMT0NLICpmaW5kX3JlZ2lvbiggdm9pZCAqYWRkciApOwotc3RhdGljIGludCByZW1vdmVfcmVnaW9uKCBCTE9DSyAqYmxvY2sgKTsKK2Vhcmx5X3BhcmFtKCJzdHJhbV9wb29sIiwgYXRhcmlfc3RyYW1fc2V0dXApOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotDAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgkJCQkJCQkgICBQdWJsaWMgSW50ZXJmYWNlCQkJCQkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCiAgKiBUaGlzIGluaXQgZnVuY3Rpb24gaXMgY2FsbGVkIHZlcnkgZWFybHkgYnkgYXRhcmkvY29uZmlnLmMKQEAgLTEyMywyNSArNjcsMjMgQEAKIHZvaWQgX19pbml0IGF0YXJpX3N0cmFtX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKKwl2b2lkICpzdHJhbV9zdGFydDsKIAotCS8qIGluaXRpYWxpemUgc3RhdGljIGJsb2NrcyAqLwotCWZvciggaSA9IDA7IGkgPCBOX1NUQVRJQ19CTE9DS1M7ICsraSApCi0JCXN0YXRpY19ibG9ja3NbaV0uZmxhZ3MgPSBCTE9DS19GUkVFOwotCi0JLyogZGV0ZXJtaW5lIHdoZXRoZXIga2VybmVsIGNvZGUgcmVzaWRlcyBpbiBTVC1SQU0gKHRoZW4gU1QtUkFNIGlzIHRoZQotCSAqIGZpcnN0IG1lbW9yeSBibG9jayBhdCB2aXJ0dWFsIDB4MCkgKi8KKwkvKgorCSAqIGRldGVybWluZSB3aGV0aGVyIGtlcm5lbCBjb2RlIHJlc2lkZXMgaW4gU1QtUkFNCisJICogKHRoZW4gU1QtUkFNIGlzIHRoZSBmaXJzdCBtZW1vcnkgYmxvY2sgYXQgdmlydHVhbCAweDApCisJICovCiAJc3RyYW1fc3RhcnQgPSBwaHlzX3RvX3ZpcnQoMCk7CiAJa2VybmVsX2luX3N0cmFtID0gKHN0cmFtX3N0YXJ0ID09IDApOwogCi0JZm9yKCBpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgKytpICkgeworCWZvciAoaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7ICsraSkgewogCQlpZiAobTY4a19tZW1vcnlbaV0uYWRkciA9PSAwKSB7Ci0JCQkvKiBza2lwIGZpcnN0IDJrQiBvciBwYWdlIChzdXBlcnZpc29yLW9ubHkhKSAqLwotCQkJc3RyYW1fZW5kID0gc3RyYW1fc3RhcnQgKyBtNjhrX21lbW9yeVtpXS5zaXplOwogCQkJcmV0dXJuOwogCQl9CiAJfQorCiAJLyogU2hvdWxkIG5ldmVyIGNvbWUgaGVyZSEgKFRoZXJlIGlzIGFsd2F5cyBTVC1SYW0hKSAqLwotCXBhbmljKCAiYXRhcmlfc3RyYW1faW5pdDogbm8gU1QtUkFNIGZvdW5kISIgKTsKKwlwYW5pYygiYXRhcmlfc3RyYW1faW5pdDogbm8gU1QtUkFNIGZvdW5kISIpOwogfQogCiAKQEAgLTE1MSwyMjYgKzkzLDY4IEBACiAgKi8KIHZvaWQgX19pbml0IGF0YXJpX3N0cmFtX3Jlc2VydmVfcGFnZXModm9pZCAqc3RhcnRfbWVtKQogewotCS8qIGFsd2F5cyByZXNlcnZlIGZpcnN0IHBhZ2Ugb2YgU1QtUkFNLCB0aGUgZmlyc3QgMiBrQiBhcmUKLQkgKiBzdXBlcnZpc29yLW9ubHkhICovCisJLyoKKwkgKiBhbHdheXMgcmVzZXJ2ZSBmaXJzdCBwYWdlIG9mIFNULVJBTSwgdGhlIGZpcnN0IDIgS2lCIGFyZQorCSAqIHN1cGVydmlzb3Itb25seSEKKwkgKi8KIAlpZiAoIWtlcm5lbF9pbl9zdHJhbSkKIAkJcmVzZXJ2ZV9ib290bWVtKDAsIFBBR0VfU0laRSwgQk9PVE1FTV9ERUZBVUxUKTsKIAotfQorCXN0cmFtX3Bvb2wuc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHBvb2xfc2l6ZSk7CisJc3RyYW1fcG9vbC5lbmQgPSBzdHJhbV9wb29sLnN0YXJ0ICsgcG9vbF9zaXplIC0gMTsKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnN0cmFtX3Bvb2wpOwogCi12b2lkIGF0YXJpX3N0cmFtX21lbV9pbml0X2hvb2sgKHZvaWQpCi17Ci0JbWVtX2luaXRfZG9uZSA9IDE7CisJcHJfZGVidWcoImF0YXJpX3N0cmFtIHBvb2w6IHNpemUgPSAlbHUgYnl0ZXMsIHJlc291cmNlID0gJXBSXG4iLAorCQkgcG9vbF9zaXplLCAmc3RyYW1fcG9vbCk7CiB9CiAKIAotLyoKLSAqIFRoaXMgaXMgbWFpbiBwdWJsaWMgaW50ZXJmYWNlOiBzb21laG93IGFsbG9jYXRlIGEgU1QtUkFNIGJsb2NrCi0gKgotICogIC0gSWYgd2UncmUgYmVmb3JlIG1lbV9pbml0KCksIHdlIGhhdmUgdG8gbWFrZSBhIHN0YXRpYyBhbGxvY2F0aW9uLiBUaGUKLSAqICAgIHJlZ2lvbiBpcyB0YWtlbiBpbiB0aGUga2VybmVsIGRhdGEgYXJlYSAoaWYgdGhlIGtlcm5lbCBpcyBpbiBTVC1SQU0pIG9yCi0gKiAgICBmcm9tIHRoZSBzdGFydCBvZiBTVC1SQU0gKGlmIHRoZSBrZXJuZWwgaXMgaW4gVFQtUkFNKSBhbmQgYWRkZWQgdG8gdGhlCi0gKiAgICByc3ZkX3N0cmFtXyogcmVnaW9uLiBUaGUgU1QtUkFNIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIGtlcm5lbAotICogICAgYWRkcmVzcyBzcGFjZSBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gKgotICogIC0gSWYgbWVtX2luaXQoKSBhbHJlYWR5IGhhcyBiZWVuIGNhbGxlZCwgdHJ5IHdpdGggX19nZXRfZG1hX3BhZ2VzKCkuCi0gKiAgICBUaGlzIGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgaXQncyB2ZXJ5IGhhcmQgdG8gZ2V0IG1vcmUgdGhhbiAxIHBhZ2UsCi0gKiAgICBhbmQgaXQgaXMgbGlrZWx5IHRvIGZhaWwgOi0oCi0gKgotICovCi12b2lkICphdGFyaV9zdHJhbV9hbGxvYyhsb25nIHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKQordm9pZCAqYXRhcmlfc3RyYW1fYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpvd25lcikKIHsKLQl2b2lkICphZGRyID0gTlVMTDsKLQlCTE9DSyAqYmxvY2s7Ci0JaW50IGZsYWdzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnJvcjsKIAotCURQUklOVEsoImF0YXJpX3N0cmFtX2FsbG9jKHNpemU9JTA4bHgsb3duZXI9JXMpXG4iLCBzaXplLCBvd25lcik7CisJcHJfZGVidWcoImF0YXJpX3N0cmFtX2FsbG9jOiBhbGxvY2F0ZSAlbHUgYnl0ZXNcbiIsIHNpemUpOwogCi0JaWYgKCFtZW1faW5pdF9kb25lKQotCQlyZXR1cm4gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZSk7Ci0JZWxzZSB7Ci0JCS8qIEFmdGVyIG1lbV9pbml0KCk6IGNhbiBvbmx5IHJlc29ydCB0byBfX2dldF9kbWFfcGFnZXMoKSAqLwotCQlhZGRyID0gKHZvaWQgKilfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKTsKLQkJZmxhZ3MgPSBCTE9DS19HRlA7Ci0JCURQUklOVEsoICJhdGFyaV9zdHJhbV9hbGxvYzogYWZ0ZXIgbWVtX2luaXQsICIKLQkJCQkgImdldF9wYWdlcz0lcFxuIiwgYWRkciApOworCS8qIHJvdW5kIHVwICovCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXMtPm5hbWUgPSBvd25lcjsKKwllcnJvciA9IGFsbG9jYXRlX3Jlc291cmNlKCZzdHJhbV9wb29sLCByZXMsIHNpemUsIDAsIFVJTlRfTUFYLAorCQkJCSAgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByX2VycigiYXRhcmlfc3RyYW1fYWxsb2M6IGFsbG9jYXRlX3Jlc291cmNlKCkgZmFpbGVkICVkIVxuIiwKKwkJICAgICAgIGVycm9yKTsKKwkJa2ZyZWUocmVzKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKGFkZHIpIHsKLQkJaWYgKCEoYmxvY2sgPSBhZGRfcmVnaW9uKCBhZGRyLCBzaXplICkpKSB7Ci0JCQkvKiBvdXQgb2YgbWVtb3J5IGZvciBCTE9DSyBzdHJ1Y3R1cmUgOi0oICovCi0JCQlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fYWxsb2M6IG91dCBvZiBtZW0gZm9yIEJMT0NLIC0tICIKLQkJCQkJICJmcmVlaW5nIGFnYWluXG4iICk7Ci0JCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFkZHIsIGdldF9vcmRlcihzaXplKSk7Ci0JCQlyZXR1cm4oIE5VTEwgKTsKLQkJfQotCQlibG9jay0+b3duZXIgPSBvd25lcjsKLQkJYmxvY2stPmZsYWdzIHw9IGZsYWdzOwotCX0KLQlyZXR1cm4oIGFkZHIgKTsKKwlwcl9kZWJ1ZygiYXRhcmlfc3RyYW1fYWxsb2M6IHJldHVybmluZyAlcFJcbiIsIHJlcyk7CisJcmV0dXJuICh2b2lkICopcmVzLT5zdGFydDsKIH0KIEVYUE9SVF9TWU1CT0woYXRhcmlfc3RyYW1fYWxsb2MpOwogCi12b2lkIGF0YXJpX3N0cmFtX2ZyZWUoIHZvaWQgKmFkZHIgKQogCit2b2lkIGF0YXJpX3N0cmFtX2ZyZWUodm9pZCAqYWRkcikKIHsKLQlCTE9DSyAqYmxvY2s7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JRFBSSU5USyggImF0YXJpX3N0cmFtX2ZyZWUoYWRkcj0lcClcbiIsIGFkZHIgKTsKLQotCWlmICghKGJsb2NrID0gZmluZF9yZWdpb24oIGFkZHIgKSkpIHsKLQkJcHJpbnRrKCBLRVJOX0VSUiAiQXR0ZW1wdCB0byBmcmVlIG5vbi1hbGxvY2F0ZWQgU1QtUkFNIGJsb2NrIGF0ICVwICIKLQkJCQkiZnJvbSAlcFxuIiwgYWRkciwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApICk7CisJcmVzID0gbG9va3VwX3Jlc291cmNlKCZzdHJhbV9wb29sLCBzdGFydCk7CisJaWYgKCFyZXMpIHsKKwkJcHJfZXJyKCJhdGFyaV9zdHJhbV9mcmVlOiB0cnlpbmcgdG8gZnJlZSBub25leGlzdGVudCByZWdpb24gIgorCQkgICAgICAgImF0ICVwXG4iLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KLQlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fZnJlZTogZm91bmQgYmxvY2sgKCVwKTogc2l6ZT0lMDhseCwgb3duZXI9JXMsICIKLQkJCSAiZmxhZ3M9JTAyeFxuIiwgYmxvY2ssIGJsb2NrLT5zaXplLCBibG9jay0+b3duZXIsIGJsb2NrLT5mbGFncyApOwogCi0JaWYgKCEoYmxvY2stPmZsYWdzICYgQkxPQ0tfR0ZQKSkKLQkJZ290byBmYWlsOwotCi0JRFBSSU5USygiYXRhcmlfc3RyYW1fZnJlZTogaXMga21hbGxvY2VkLCBvcmRlcl9zaXplPSVkXG4iLAotCQlnZXRfb3JkZXIoYmxvY2stPnNpemUpKTsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFkZHIsIGdldF9vcmRlcihibG9jay0+c2l6ZSkpOwotCXJlbW92ZV9yZWdpb24oIGJsb2NrICk7Ci0JcmV0dXJuOwotCi0gIGZhaWw6Ci0JcHJpbnRrKCBLRVJOX0VSUiAiYXRhcmlfc3RyYW1fZnJlZTogY2Fubm90IGZyZWUgYmxvY2sgYXQgJXAgIgotCQkJIihjYWxsZWQgZnJvbSAlcClcbiIsIGFkZHIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSApOworCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJcHJfZGVidWcoImF0YXJpX3N0cmFtX2ZyZWU6IGZyZWUgJWx1IGJ5dGVzIGF0ICVwXG4iLCBzaXplLCBhZGRyKTsKKwlyZWxlYXNlX3Jlc291cmNlKHJlcyk7CisJa2ZyZWUocmVzKTsKIH0KIEVYUE9SVF9TWU1CT0woYXRhcmlfc3RyYW1fZnJlZSk7Ci0KLQwKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoJCQkJCQkJICBSZWdpb24gTWFuYWdlbWVudAkJCQkJCQkJKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qIGluc2VydCBhIHJlZ2lvbiBpbnRvIHRoZSBhbGxvY2VkIGxpc3QgKHNvcnRlZCkgKi8KLXN0YXRpYyBCTE9DSyAqYWRkX3JlZ2lvbiggdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplICkKLXsKLQlCTE9DSyAqKnAsICpuID0gTlVMTDsKLQlpbnQgaTsKLQotCWZvciggaSA9IDA7IGkgPCBOX1NUQVRJQ19CTE9DS1M7ICsraSApIHsKLQkJaWYgKHN0YXRpY19ibG9ja3NbaV0uZmxhZ3MgJiBCTE9DS19GUkVFKSB7Ci0JCQluID0gJnN0YXRpY19ibG9ja3NbaV07Ci0JCQluLT5mbGFncyA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoIW4gJiYgbWVtX2luaXRfZG9uZSkgewotCQkvKiBpZiBzdGF0aWNzIGJsb2NrIHBvb2wgZXhoYXVzdGVkIGFuZCB3ZSBjYW4gY2FsbCBrbWFsbG9jKCkgYWxyZWFkeQotCQkgKiAoYWZ0ZXIgbWVtX2luaXQoKSksIHRyeSB0aGF0ICovCi0JCW4gPSBrbWFsbG9jKCBzaXplb2YoQkxPQ0spLCBHRlBfS0VSTkVMICk7Ci0JCWlmIChuKQotCQkJbi0+ZmxhZ3MgPSBCTE9DS19LTUFMTE9DRUQ7Ci0JfQotCWlmICghbikgewotCQlwcmludGsoIEtFUk5fRVJSICJPdXQgb2YgbWVtb3J5IGZvciBTVC1SQU0gZGVzY3JpcHRvciBibG9ja3NcbiIgKTsKLQkJcmV0dXJuKCBOVUxMICk7Ci0JfQotCW4tPnN0YXJ0ID0gYWRkcjsKLQluLT5zaXplICA9IHNpemU7Ci0KLQlmb3IoIHAgPSAmYWxsb2NfbGlzdDsgKnA7IHAgPSAmKCgqcCktPm5leHQpICkKLQkJaWYgKCgqcCktPnN0YXJ0ID4gYWRkcikgYnJlYWs7Ci0Jbi0+bmV4dCA9ICpwOwotCSpwID0gbjsKLQotCXJldHVybiggbiApOwotfQotCi0KLS8qIGZpbmQgYSByZWdpb24gKGJ5IHN0YXJ0IGFkZHIpIGluIHRoZSBhbGxvY2VkIGxpc3QgKi8KLXN0YXRpYyBCTE9DSyAqZmluZF9yZWdpb24oIHZvaWQgKmFkZHIgKQotewotCUJMT0NLICpwOwotCi0JZm9yKCBwID0gYWxsb2NfbGlzdDsgcDsgcCA9IHAtPm5leHQgKSB7Ci0JCWlmIChwLT5zdGFydCA9PSBhZGRyKQotCQkJcmV0dXJuKCBwICk7Ci0JCWlmIChwLT5zdGFydCA+IGFkZHIpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuKCBOVUxMICk7Ci19Ci0KLQotLyogcmVtb3ZlIGEgYmxvY2sgZnJvbSB0aGUgYWxsb2NlZCBsaXN0ICovCi1zdGF0aWMgaW50IHJlbW92ZV9yZWdpb24oIEJMT0NLICpibG9jayApCi17Ci0JQkxPQ0sgKipwOwotCi0JZm9yKCBwID0gJmFsbG9jX2xpc3Q7ICpwOyBwID0gJigoKnApLT5uZXh0KSApCi0JCWlmICgqcCA9PSBibG9jaykgYnJlYWs7Ci0JaWYgKCEqcCkKLQkJcmV0dXJuKCAwICk7Ci0KLQkqcCA9IGJsb2NrLT5uZXh0OwotCWlmIChibG9jay0+ZmxhZ3MgJiBCTE9DS19LTUFMTE9DRUQpCi0JCWtmcmVlKCBibG9jayApOwotCWVsc2UKLQkJYmxvY2stPmZsYWdzIHw9IEJMT0NLX0ZSRUU7Ci0JcmV0dXJuKCAxICk7Ci19Ci0KLQotDAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgkJCQkJCSAvcHJvYyBzdGF0aXN0aWNzIGZpbGUgc3R1ZmYJCQkJCQkqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBET19QUk9DCi0KLSNkZWZpbmUJUFJJTlRfUFJPQyhmbXQsYXJncy4uLikgc2VxX3ByaW50ZiggbSwgZm10LCAjI2FyZ3MgKQotCi1zdGF0aWMgaW50IHN0cmFtX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JQkxPQ0sgKnA7Ci0KLQlQUklOVF9QUk9DKCJUb3RhbCBTVC1SQU06ICAgICAgJTh1IGtCXG4iLAotCQkJICAgKHN0cmFtX2VuZCAtIHN0cmFtX3N0YXJ0KSA+PiAxMCk7Ci0JUFJJTlRfUFJPQyggIkFsbG9jYXRlZCByZWdpb25zOlxuIiApOwotCWZvciggcCA9IGFsbG9jX2xpc3Q7IHA7IHAgPSBwLT5uZXh0ICkgewotCQlQUklOVF9QUk9DKCIweCUwOGx4LTB4JTA4bHg6ICVzICgiLAotCQkJICAgdmlydF90b19waHlzKHAtPnN0YXJ0KSwKLQkJCSAgIHZpcnRfdG9fcGh5cyhwLT5zdGFydCtwLT5zaXplLTEpLAotCQkJICAgcC0+b3duZXIpOwotCQlpZiAocC0+ZmxhZ3MgJiBCTE9DS19HRlApCi0JCQlQUklOVF9QUk9DKCAicGFnZS1hbGxvY2VkKVxuIiApOwotCQllbHNlCi0JCQlQUklOVF9QUk9DKCAiPz8pXG4iICk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RyYW1fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzdHJhbV9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdHJhbV9wcm9jX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc3RyYW1fcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwcm9jX3N0cmFtX2luaXQodm9pZCkKLXsKLQlwcm9jX2NyZWF0ZSgic3RyYW0iLCAwLCBOVUxMLCAmc3RyYW1fcHJvY19mb3BzKTsKLQlyZXR1cm4gMDsKLX0KLW1vZHVsZV9pbml0KHByb2Nfc3RyYW1faW5pdCk7Ci0jZW5kaWYKLQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogIGMtaW5kZW50LWxldmVsOiA0Ci0gKiAgdGFiLXdpZHRoOiA0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaV9zdHJhbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKaW5kZXggNzU0NmQxMy4uNjJlMjc1OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpX3N0cmFtLmgKQEAgLTYsMTIgKzYsMTEgQEAKICAqLwogCiAvKiBwdWJsaWMgaW50ZXJmYWNlICovCi12b2lkICphdGFyaV9zdHJhbV9hbGxvYyhsb25nIHNpemUsIGNvbnN0IGNoYXIgKm93bmVyKTsKK3ZvaWQgKmF0YXJpX3N0cmFtX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqb3duZXIpOwogdm9pZCBhdGFyaV9zdHJhbV9mcmVlKHZvaWQgKik7CiAKIC8qIGZ1bmN0aW9ucyBjYWxsZWQgaW50ZXJuYWxseSBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsICovCiB2b2lkIGF0YXJpX3N0cmFtX2luaXQodm9pZCk7CiB2b2lkIGF0YXJpX3N0cmFtX3Jlc2VydmVfcGFnZXModm9pZCAqc3RhcnRfbWVtKTsKLXZvaWQgYXRhcmlfc3RyYW1fbWVtX2luaXRfaG9vayAodm9pZCk7CiAKICNlbmRpZiAvKl9NNjhLX0FUQVJJX1NUUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCmluZGV4IGY1MWY3MDkuLjAzOTJiMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaApAQCAtMzk5LDggKzM5OSw4IEBACiAjZGVmaW5lIENPREVDX09WRVJGTE9XX0xFRlQgICAgIDIKICAgdV9jaGFyIHVudXNlZDIsIHVudXNlZDMsIHVudXNlZDQsIHVudXNlZDU7CiAgIHVfY2hhciBncGlvX2RpcmVjdGlvbnM7Ci0jZGVmaW5lIEdQSU9fSU4gICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BJT19PVVQgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDT0RFQ19HUElPX0lOICAgICAgICAgICAwCisjZGVmaW5lIENPREVDX0dQSU9fT1VUICAgICAgICAgIDEKICAgdV9jaGFyIHVudXNlZDY7CiAgIHVfY2hhciBncGlvX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2VfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX21tLmgKaW5kZXggMzFkNTU3MC4uODlmMjAxNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2VfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9tbS5oCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlwZ2RhdC0+bm9kZV9tZW1fbWFwICsgKF9fcGZuIC0gcGdkYXQtPm5vZGVfc3RhcnRfcGZuKTsJCVwKIH0pCiAjZGVmaW5lIHBhZ2VfdG9fcGZuKF9wYWdlKSAoewkJCQkJCVwKLQlzdHJ1Y3QgcGFnZSAqX19wID0gKF9wYWdlKTsJCQkJCVwKKwljb25zdCBzdHJ1Y3QgcGFnZSAqX19wID0gKF9wYWdlKTsJCQkJXAogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7CQkJCQlcCiAJcGdkYXQgPSAmcGdfZGF0YV9tYXBbcGFnZV90b19uaWQoX19wKV07CQkJCVwKIAkoKF9fcCkgLSBwZ2RhdC0+bm9kZV9tZW1fbWFwKSArIHBnZGF0LT5ub2RlX3N0YXJ0X3BmbjsJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYyBiL2FyY2gvbTY4ay9rZXJuZWwvc2V0dXBfbW0uYwppbmRleCAzMzRkODM2Li5jM2I0NTA2IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3NldHVwX21tLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cF9tbS5jCkBAIC0yMTYsNyArMjE2LDkgQEAKIAogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogeworI2lmbmRlZiBDT05GSUdfU1VOMwogCWludCBpOworI2VuZGlmCiAKIAkvKiBUaGUgYm9vdGluZm8gaXMgbG9jYXRlZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcyAqLwogCW02OGtfcGFyc2VfYm9vdGluZm8oKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKilfZW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMgYi9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDAwZDE0NTIuLmM0NjhmMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJLmxvbmcgc3lzX2dldHBhZ2VzaXplCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJCS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jCmluZGV4IDM2N2VjZWUuLjMzODRhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9sb2cuYworKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfbG9nLmMKQEAgLTEwNSw5ICsxMDUsNiBAQAogCiAJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOwogCi0JaWYgKElTX1pFUk8oZGVzdCkpCi0JCXJldHVybiBkZXN0OwotCiAJcmV0dXJuIGRlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9tdWx0aV9hcml0aC5oIGIvYXJjaC9tNjhrL21hdGgtZW11L211bHRpX2FyaXRoLmgKaW5kZXggNGFkMGNhOS4uNGI1ZWIzZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hdGgtZW11L211bHRpX2FyaXRoLmgKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L211bHRpX2FyaXRoLmgKQEAgLTE5LDI0NiArMTksNiBAQAogI2lmbmRlZiBNVUxUSV9BUklUSF9ICiAjZGVmaW5lIE1VTFRJX0FSSVRIX0gKIAotI2lmIDAJLyogb2xkIGNvZGUuLi4gKi8KLQotLyogVW5zaWduZWQgb25seSwgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHNpZ25zIHRvIG11bHRpcGx5IGFuZCBkaXZpZGUuICovCi10eXBlZGVmIHVuc2lnbmVkIGludCBpbnQxMjhbNF07Ci0KLS8qIFdvcmQgb3JkZXIgKi8KLWVudW0gewotCU1TVzEyOCwKLQlOTVNXMTI4LAotCU5MU1cxMjgsCi0JTFNXMTI4Ci19OwotCi0vKiBiaWctZW5kaWFuICovCi0jZGVmaW5lIExPX1dPUkQobGwpICgoKHVuc2lnbmVkIGludCAqKSAmbGwpWzFdKQotI2RlZmluZSBISV9XT1JEKGxsKSAoKCh1bnNpZ25lZCBpbnQgKikgJmxsKVswXSkKLQotLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHN0dWZmIHZhcmlvdXMgaW50ZWdlciB2YWx1ZXMgaW50byBpbnQxMjhzICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB6ZXJvMTI4KGludDEyOCBhKQotewotCWFbTFNXMTI4XSA9IGFbTkxTVzEyOF0gPSBhW05NU1cxMjhdID0gYVtNU1cxMjhdID0gMDsKLX0KLQotLyogSHVtYW4tcmVhZGFibGUgd29yZCBvcmRlciBpbiB0aGUgYXJndW1lbnRzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0MTI4KHVuc2lnbmVkIGludCBpMywgdW5zaWduZWQgaW50IGkyLCB1bnNpZ25lZCBpbnQgaTEsCi0JCQkgIHVuc2lnbmVkIGludCBpMCwgaW50MTI4IGEpCi17Ci0JYVtMU1cxMjhdID0gaTA7Ci0JYVtOTFNXMTI4XSA9IGkxOwotCWFbTk1TVzEyOF0gPSBpMjsKLQlhW01TVzEyOF0gPSBpMzsKLX0KLQotLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIChmb3IgdGVzdGluZyBhcyB3ZWxsKSAqLwotc3RhdGljIGlubGluZSB2b2lkIGludDY0X3RvXzEyOCh1bnNpZ25lZCBsb25nIGxvbmcgc3JjLCBpbnQxMjggZGVzdCkKLXsKLQlkZXN0W0xTVzEyOF0gPSAodW5zaWduZWQgaW50KSBzcmM7Ci0JZGVzdFtOTFNXMTI4XSA9IHNyYyA+PiAzMjsKLQlkZXN0W05NU1cxMjhdID0gZGVzdFtNU1cxMjhdID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGludDEyOF90b182NChjb25zdCBpbnQxMjggc3JjLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCi17Ci0JKmRlc3QgPSBzcmNbTFNXMTI4XSB8IChsb25nIGxvbmcpIHNyY1tOTFNXMTI4XSA8PCAzMjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHB1dF9pMTI4KGNvbnN0IGludDEyOCBhKQotewotCXByaW50aygiJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgYVtNU1cxMjhdLCBhW05NU1cxMjhdLAotCSAgICAgICBhW05MU1cxMjhdLCBhW0xTVzEyOF0pOwotfQotCi0vKiBJbnRlcm5hbCBzaGlmdGVyczoKLQotICAgTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IGdvb2QgZm9yIDAgPCBjb3VudCA8IDMyLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfbHNsMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCi17Ci0JYVtNU1cxMjhdID0gKGFbTVNXMTI4XSA8PCBjb3VudCkgfCAoYVtOTVNXMTI4XSA+PiAoMzIgLSBjb3VudCkpOwotCWFbTk1TVzEyOF0gPSAoYVtOTVNXMTI4XSA8PCBjb3VudCkgfCAoYVtOTFNXMTI4XSA+PiAoMzIgLSBjb3VudCkpOwotCWFbTkxTVzEyOF0gPSAoYVtOTFNXMTI4XSA8PCBjb3VudCkgfCAoYVtMU1cxMjhdID4+ICgzMiAtIGNvdW50KSk7Ci0JYVtMU1cxMjhdIDw8PSBjb3VudDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9sc3IxMjgodW5zaWduZWQgaW50IGNvdW50LCBpbnQxMjggYSkKLXsKLQlhW0xTVzEyOF0gPSAoYVtMU1cxMjhdID4+IGNvdW50KSB8IChhW05MU1cxMjhdIDw8ICgzMiAtIGNvdW50KSk7Ci0JYVtOTFNXMTI4XSA9IChhW05MU1cxMjhdID4+IGNvdW50KSB8IChhW05NU1cxMjhdIDw8ICgzMiAtIGNvdW50KSk7Ci0JYVtOTVNXMTI4XSA9IChhW05NU1cxMjhdID4+IGNvdW50KSB8IChhW01TVzEyOF0gPDwgKDMyIC0gY291bnQpKTsKLQlhW01TVzEyOF0gPj49IGNvdW50OwotfQotCi0vKiBTaG91bGQgYmUgZmFzdGVyLCBvbmUgd291bGQgaG9wZSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbHNsb25lMTI4KGludDEyOCBhKQotewotCWFzbSB2b2xhdGlsZSAoImxzbC5sICMxLCUwXG4iCi0JCSAgICAgICJyb3hsLmwgIzEsJTFcbiIKLQkJICAgICAgInJveGwubCAjMSwlMlxuIgotCQkgICAgICAicm94bC5sICMxLCUzXG4iCi0JCSAgICAgIDoKLQkJICAgICAgIj1kIiAoYVtMU1cxMjhdKSwKLQkJICAgICAgIj1kIihhW05MU1cxMjhdKSwKLQkJICAgICAgIj1kIihhW05NU1cxMjhdKSwKLQkJICAgICAgIj1kIihhW01TVzEyOF0pCi0JCSAgICAgIDoKLQkJICAgICAgIjAiKGFbTFNXMTI4XSksCi0JCSAgICAgICIxIihhW05MU1cxMjhdKSwKLQkJICAgICAgIjIiKGFbTk1TVzEyOF0pLAotCQkgICAgICAiMyIoYVtNU1cxMjhdKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsc3JvbmUxMjgoaW50MTI4IGEpCi17Ci0JYXNtIHZvbGF0aWxlICgibHNyLmwgIzEsJTBcbiIKLQkJICAgICAgInJveHIubCAjMSwlMVxuIgotCQkgICAgICAicm94ci5sICMxLCUyXG4iCi0JCSAgICAgICJyb3hyLmwgIzEsJTNcbiIKLQkJICAgICAgOgotCQkgICAgICAiPWQiIChhW01TVzEyOF0pLAotCQkgICAgICAiPWQiKGFbTk1TVzEyOF0pLAotCQkgICAgICAiPWQiKGFbTkxTVzEyOF0pLAotCQkgICAgICAiPWQiKGFbTFNXMTI4XSkKLQkJICAgICAgOgotCQkgICAgICAiMCIoYVtNU1cxMjhdKSwKLQkJICAgICAgIjEiKGFbTk1TVzEyOF0pLAotCQkgICAgICAiMiIoYVtOTFNXMTI4XSksCi0JCSAgICAgICIzIihhW0xTVzEyOF0pKTsKLX0KLQotLyogR2VuZXJhbGl6ZWQgMTI4LWJpdCBzaGlmdGVyczoKLQotICAgVGhlc2UgYml0LXNoaWZ0IHRvIGEgbXVsdGlwbGUgb2YgMzIsIHRoZW4gbW92ZSB3aG9sZSBsb25nd29yZHMuICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbHNsMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCi17Ci0JaW50IHdvcmRjb3VudCwgaTsKLQotCWlmIChjb3VudCAlIDMyKQotCQlfbHNsMTI4KGNvdW50ICUgMzIsIGEpOwotCi0JaWYgKDAgPT0gKHdvcmRjb3VudCA9IGNvdW50IC8gMzIpKQotCQlyZXR1cm47Ci0KLQkvKiBhcmdoLCBnYWssIGVuZGlhbi1zZW5zaXRpdmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNCAtIHdvcmRjb3VudDsgaSsrKSB7Ci0JCWFbaV0gPSBhW2kgKyB3b3JkY291bnRdOwotCX0KLQlmb3IgKGkgPSAzOyBpID49IDQgLSB3b3JkY291bnQ7IC0taSkgewotCQlhW2ldID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsc3IxMjgodW5zaWduZWQgaW50IGNvdW50LCBpbnQxMjggYSkKLXsKLQlpbnQgd29yZGNvdW50LCBpOwotCi0JaWYgKGNvdW50ICUgMzIpCi0JCV9sc3IxMjgoY291bnQgJSAzMiwgYSk7Ci0KLQlpZiAoMCA9PSAod29yZGNvdW50ID0gY291bnQgLyAzMikpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDM7IGkgPj0gd29yZGNvdW50OyAtLWkpIHsKLQkJYVtpXSA9IGFbaSAtIHdvcmRjb3VudF07Ci0JfQotCWZvciAoaSA9IDA7IGkgPCB3b3JkY291bnQ7IGkrKykgewotCQlhW2ldID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG9ybDEyOChpbnQgYSwgaW50MTI4IGIpCi17Ci0JYltMU1cxMjhdIHw9IGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJ0c3RoaTEyOChjb25zdCBpbnQxMjggYSkKLXsKLQlyZXR1cm4gYVtNU1cxMjhdICYgMHg4MDAwMDAwMDsKLX0KLQotLyogdGVzdCBiaXRzIChudW1iZXJlZCBmcm9tIDAgPSBMU0IpIHVwIHRvIGFuZCBpbmNsdWRpbmcgInRvcCIgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJmdGVzdGxvMTI4KGludCB0b3AsIGNvbnN0IGludDEyOCBhKQotewotCWludCByID0gMDsKLQotCWlmICh0b3AgPiAzMSkKLQkJciB8PSBhW0xTVzEyOF07Ci0JaWYgKHRvcCA+IDYzKQotCQlyIHw9IGFbTkxTVzEyOF07Ci0JaWYgKHRvcCA+IDk1KQotCQlyIHw9IGFbTk1TVzEyOF07Ci0KLQlyIHw9IGFbMyAtICh0b3AgLyAzMildICYgKCgxIDw8ICh0b3AgJSAzMiArIDEpKSAtIDEpOwotCi0JcmV0dXJuIChyICE9IDApOwotfQotCi0vKiBBYXJnaC4gIFdlIG5lZWQgdGhlc2UgYmVjYXVzZSBHQ0MgaXMgYnJva2VuICovCi0vKiBGSVhNRTogZG8gdGhlbSBpbiBhc3NlbWJseSwgZm9yIGdvb2RuZXNzJyBzYWtlISAqLwotc3RhdGljIGlubGluZSB2b2lkIG1hc2s2NChpbnQgcG9zLCB1bnNpZ25lZCBsb25nIGxvbmcgKm1hc2spCi17Ci0JKm1hc2sgPSAwOwotCi0JaWYgKHBvcyA8IDMyKSB7Ci0JCUxPX1dPUkQoKm1hc2spID0gKDEgPDwgcG9zKSAtIDE7Ci0JCXJldHVybjsKLQl9Ci0JTE9fV09SRCgqbWFzaykgPSAtMTsKLQlISV9XT1JEKCptYXNrKSA9ICgxIDw8IChwb3MgLSAzMikpIC0gMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJzZXQ2NChpbnQgcG9zLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCi17Ci0JLyogVGhpcyBjb25kaXRpb25hbCB3aWxsIGJlIG9wdGltaXplZCBhd2F5LiAgVGhhbmtzLCBHQ0MhICovCi0JaWYgKHBvcyA8IDMyKQotCQlhc20gdm9sYXRpbGUgKCJic2V0ICUxLCUwIjoiPW0iCi0JCQkgICAgICAoTE9fV09SRCgqZGVzdCkpOiJpZCIocG9zKSk7Ci0JZWxzZQotCQlhc20gdm9sYXRpbGUgKCJic2V0ICUxLCUwIjoiPW0iCi0JCQkgICAgICAoSElfV09SRCgqZGVzdCkpOiJpZCIocG9zIC0gMzIpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYnRzdDY0KGludCBwb3MsIHVuc2lnbmVkIGxvbmcgbG9uZyBkZXN0KQotewotCWlmIChwb3MgPCAzMikKLQkJcmV0dXJuICgwICE9IChMT19XT1JEKGRlc3QpICYgKDEgPDwgcG9zKSkpOwotCWVsc2UKLQkJcmV0dXJuICgwICE9IChISV9XT1JEKGRlc3QpICYgKDEgPDwgKHBvcyAtIDMyKSkpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGxzbDY0KGludCBjb3VudCwgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0KQotewotCWlmIChjb3VudCA8IDMyKSB7Ci0JCUhJX1dPUkQoKmRlc3QpID0gKEhJX1dPUkQoKmRlc3QpIDw8IGNvdW50KQotCQkgICAgfCAoTE9fV09SRCgqZGVzdCkgPj4gY291bnQpOwotCQlMT19XT1JEKCpkZXN0KSA8PD0gY291bnQ7Ci0JCXJldHVybjsKLQl9Ci0JY291bnQgLT0gMzI7Ci0JSElfV09SRCgqZGVzdCkgPSBMT19XT1JEKCpkZXN0KSA8PCBjb3VudDsKLQlMT19XT1JEKCpkZXN0KSA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsc3I2NChpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGVzdCkKLXsKLQlpZiAoY291bnQgPCAzMikgewotCQlMT19XT1JEKCpkZXN0KSA9IChMT19XT1JEKCpkZXN0KSA+PiBjb3VudCkKLQkJICAgIHwgKEhJX1dPUkQoKmRlc3QpIDw8ICgzMiAtIGNvdW50KSk7Ci0JCUhJX1dPUkQoKmRlc3QpID4+PSBjb3VudDsKLQkJcmV0dXJuOwotCX0KLQljb3VudCAtPSAzMjsKLQlMT19XT1JEKCpkZXN0KSA9IEhJX1dPUkQoKmRlc3QpID4+IGNvdW50OwotCUhJX1dPUkQoKmRlc3QpID0gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHZvaWQgZnBfZGVub3JtYWxpemUoc3RydWN0IGZwX2V4dCAqcmVnLCB1bnNpZ25lZCBpbnQgY250KQogewogCXJlZy0+ZXhwICs9IGNudDsKQEAgLTQ4MSwxMTcgKzI0MSw2IEBACiAJfQogfQogCi0jaWYgMAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZnBfZmxzMTI4KHVuaW9uIGZwX21hbnQxMjggKnNyYykKLXsKLQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0JdW5zaWduZWQgaW50IHJlcywgb2ZmOwotCi0JaWYgKChkYXRhID0gc3JjLT5tMzJbMF0pKQotCQlvZmYgPSAwOwotCWVsc2UgaWYgKChkYXRhID0gc3JjLT5tMzJbMV0pKQotCQlvZmYgPSAzMjsKLQllbHNlIGlmICgoZGF0YSA9IHNyYy0+bTMyWzJdKSkKLQkJb2ZmID0gNjQ7Ci0JZWxzZSBpZiAoKGRhdGEgPSBzcmMtPm0zMlszXSkpCi0JCW9mZiA9IDk2OwotCWVsc2UKLQkJcmV0dXJuIDEyODsKLQotCWFzbSAoImJmZmZvICUxeyMwLCMzMn0sJTAiIDogIj1kIiAocmVzKSA6ICJkbSIgKGRhdGEpKTsKLQlyZXR1cm4gcmVzICsgb2ZmOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnBfc2hpZnRtYW50MTI4KHVuaW9uIGZwX21hbnQxMjggKnNyYywgaW50IHNoaWZ0KQotewotCXVuc2lnbmVkIGxvbmcgc3RpY2t5OwotCi0Jc3dpdGNoIChzaGlmdCkgewotCWNhc2UgMDoKLQkJcmV0dXJuOwotCWNhc2UgMToKLQkJYXNtIHZvbGF0aWxlICgibHNsLmwgIzEsJTAiCi0JCQk6ICI9ZCIgKHNyYy0+bTMyWzNdKSA6ICIwIiAoc3JjLT5tMzJbM10pKTsKLQkJYXNtIHZvbGF0aWxlICgicm94bC5sICMxLCUwIgotCQkJOiAiPWQiIChzcmMtPm0zMlsyXSkgOiAiMCIgKHNyYy0+bTMyWzJdKSk7Ci0JCWFzbSB2b2xhdGlsZSAoInJveGwubCAjMSwlMCIKLQkJCTogIj1kIiAoc3JjLT5tMzJbMV0pIDogIjAiIChzcmMtPm0zMlsxXSkpOwotCQlhc20gdm9sYXRpbGUgKCJyb3hsLmwgIzEsJTAiCi0JCQk6ICI9ZCIgKHNyYy0+bTMyWzBdKSA6ICIwIiAoc3JjLT5tMzJbMF0pKTsKLQkJcmV0dXJuOwotCWNhc2UgMiAuLi4gMzE6Ci0JCXNyYy0+bTMyWzBdID0gKHNyYy0+bTMyWzBdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlsxXSA+PiAoMzIgLSBzaGlmdCkpOwotCQlzcmMtPm0zMlsxXSA9IChzcmMtPm0zMlsxXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbMl0gPj4gKDMyIC0gc2hpZnQpKTsKLQkJc3JjLT5tMzJbMl0gPSAoc3JjLT5tMzJbMl0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzNdID4+ICgzMiAtIHNoaWZ0KSk7Ci0JCXNyYy0+bTMyWzNdID0gKHNyYy0+bTMyWzNdIDw8IHNoaWZ0KTsKLQkJcmV0dXJuOwotCWNhc2UgMzIgLi4uIDYzOgotCQlzaGlmdCAtPSAzMjsKLQkJc3JjLT5tMzJbMF0gPSAoc3JjLT5tMzJbMV0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzJdID4+ICgzMiAtIHNoaWZ0KSk7Ci0JCXNyYy0+bTMyWzFdID0gKHNyYy0+bTMyWzJdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlszXSA+PiAoMzIgLSBzaGlmdCkpOwotCQlzcmMtPm0zMlsyXSA9IChzcmMtPm0zMlszXSA8PCBzaGlmdCk7Ci0JCXNyYy0+bTMyWzNdID0gMDsKLQkJcmV0dXJuOwotCWNhc2UgNjQgLi4uIDk1OgotCQlzaGlmdCAtPSA2NDsKLQkJc3JjLT5tMzJbMF0gPSAoc3JjLT5tMzJbMl0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzNdID4+ICgzMiAtIHNoaWZ0KSk7Ci0JCXNyYy0+bTMyWzFdID0gKHNyYy0+bTMyWzNdIDw8IHNoaWZ0KTsKLQkJc3JjLT5tMzJbMl0gPSBzcmMtPm0zMlszXSA9IDA7Ci0JCXJldHVybjsKLQljYXNlIDk2IC4uLiAxMjc6Ci0JCXNoaWZ0IC09IDk2OwotCQlzcmMtPm0zMlswXSA9IChzcmMtPm0zMlszXSA8PCBzaGlmdCk7Ci0JCXNyYy0+bTMyWzFdID0gc3JjLT5tMzJbMl0gPSBzcmMtPm0zMlszXSA9IDA7Ci0JCXJldHVybjsKLQljYXNlIC0zMSAuLi4gLTE6Ci0JCXNoaWZ0ID0gLXNoaWZ0OwotCQlzdGlja3kgPSAwOwotCQlpZiAoc3JjLT5tMzJbM10gPDwgKDMyIC0gc2hpZnQpKQotCQkJc3RpY2t5ID0gMTsKLQkJc3JjLT5tMzJbM10gPSAoc3JjLT5tMzJbM10gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzJdIDw8ICgzMiAtIHNoaWZ0KSkgfCBzdGlja3k7Ci0JCXNyYy0+bTMyWzJdID0gKHNyYy0+bTMyWzJdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlsxXSA8PCAoMzIgLSBzaGlmdCkpOwotCQlzcmMtPm0zMlsxXSA9IChzcmMtPm0zMlsxXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMF0gPDwgKDMyIC0gc2hpZnQpKTsKLQkJc3JjLT5tMzJbMF0gPSAoc3JjLT5tMzJbMF0gPj4gc2hpZnQpOwotCQlyZXR1cm47Ci0JY2FzZSAtNjMgLi4uIC0zMjoKLQkJc2hpZnQgPSAtc2hpZnQgLSAzMjsKLQkJc3RpY2t5ID0gMDsKLQkJaWYgKChzcmMtPm0zMlsyXSA8PCAoMzIgLSBzaGlmdCkpIHx8IHNyYy0+bTMyWzNdKQotCQkJc3RpY2t5ID0gMTsKLQkJc3JjLT5tMzJbM10gPSAoc3JjLT5tMzJbMl0gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzFdIDw8ICgzMiAtIHNoaWZ0KSkgfCBzdGlja3k7Ci0JCXNyYy0+bTMyWzJdID0gKHNyYy0+bTMyWzFdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlswXSA8PCAoMzIgLSBzaGlmdCkpOwotCQlzcmMtPm0zMlsxXSA9IChzcmMtPm0zMlswXSA+PiBzaGlmdCk7Ci0JCXNyYy0+bTMyWzBdID0gMDsKLQkJcmV0dXJuOwotCWNhc2UgLTk1IC4uLiAtNjQ6Ci0JCXNoaWZ0ID0gLXNoaWZ0IC0gNjQ7Ci0JCXN0aWNreSA9IDA7Ci0JCWlmICgoc3JjLT5tMzJbMV0gPDwgKDMyIC0gc2hpZnQpKSB8fCBzcmMtPm0zMlsyXSB8fCBzcmMtPm0zMlszXSkKLQkJCXN0aWNreSA9IDE7Ci0JCXNyYy0+bTMyWzNdID0gKHNyYy0+bTMyWzFdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlswXSA8PCAoMzIgLSBzaGlmdCkpIHwgc3RpY2t5OwotCQlzcmMtPm0zMlsyXSA9IChzcmMtPm0zMlswXSA+PiBzaGlmdCk7Ci0JCXNyYy0+bTMyWzFdID0gc3JjLT5tMzJbMF0gPSAwOwotCQlyZXR1cm47Ci0JY2FzZSAtMTI3IC4uLiAtOTY6Ci0JCXNoaWZ0ID0gLXNoaWZ0IC0gOTY7Ci0JCXN0aWNreSA9IDA7Ci0JCWlmICgoc3JjLT5tMzJbMF0gPDwgKDMyIC0gc2hpZnQpKSB8fCBzcmMtPm0zMlsxXSB8fCBzcmMtPm0zMlsyXSB8fCBzcmMtPm0zMlszXSkKLQkJCXN0aWNreSA9IDE7Ci0JCXNyYy0+bTMyWzNdID0gKHNyYy0+bTMyWzBdID4+IHNoaWZ0KSB8IHN0aWNreTsKLQkJc3JjLT5tMzJbMl0gPSBzcmMtPm0zMlsxXSA9IHNyYy0+bTMyWzBdID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzaGlmdCA8IDAgJiYgKHNyYy0+bTMyWzBdIHx8IHNyYy0+bTMyWzFdIHx8IHNyYy0+bTMyWzJdIHx8IHNyYy0+bTMyWzNdKSkKLQkJc3JjLT5tMzJbM10gPSAxOwotCWVsc2UKLQkJc3JjLT5tMzJbM10gPSAwOwotCXNyYy0+bTMyWzJdID0gMDsKLQlzcmMtPm0zMlsxXSA9IDA7Ci0Jc3JjLT5tMzJbMF0gPSAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcF9wdXRtYW50MTI4KHN0cnVjdCBmcF9leHQgKmRlc3QsIHVuaW9uIGZwX21hbnQxMjggKnNyYywKIAkJCQkgaW50IHNoaWZ0KQogewpAQCAtNjM3LDE4MyArMjg2LDQgQEAKIAl9CiB9CiAKLSNpZiAwIC8qIG9sZCBjb2RlLi4uICovCi1zdGF0aWMgaW5saW5lIGludCBmbHModW5zaWduZWQgaW50IGEpCi17Ci0JaW50IHI7Ci0KLQlhc20gdm9sYXRpbGUgKCJiZmZmbyAlMXsjMCwjMzJ9LCUwIgotCQkgICAgICA6ICI9ZCIgKHIpIDogIm1kIiAoYSkpOwotCXJldHVybiByOwotfQotCi0vKiBmbHMgPSAiZmluZCBsYXN0IHNldCIgKGNmLiBmZnMoMykpICovCi1zdGF0aWMgaW5saW5lIGludCBmbHMxMjgoY29uc3QgaW50MTI4IGEpCi17Ci0JaWYgKGFbTVNXMTI4XSkKLQkJcmV0dXJuIGZscyhhW01TVzEyOF0pOwotCWlmIChhW05NU1cxMjhdKQotCQlyZXR1cm4gZmxzKGFbTk1TVzEyOF0pICsgMzI7Ci0JLyogWFhYOiBpdCBwcm9iYWJseSBuZXZlciBnZXRzIGJleW9uZCB0aGlzIHBvaW50IGluIGFjdHVhbAotCSAgIHVzZSwgYnV0IHRoYXQncyBpbmRpY2F0aXZlIG9mIGEgbW9yZSBnZW5lcmFsIHByb2JsZW0gaW4gdGhlCi0JICAgYWxnb3JpdGhtIChpLmUuIGFzIHBlciB0aGUgYWN0dWFsIDY4ODgxIGltcGxlbWVudGF0aW9uLCB3ZQotCSAgIHJlYWxseSBvbmx5IG5lZWQgYXQgbW9zdCA2NyBiaXRzIG9mIHByZWNpc2lvbiBbcGx1cwotCSAgIG92ZXJmbG93XSkgc28gSSdtIG5vdCBnb2luZyB0byBmaXggaXQuICovCi0JaWYgKGFbTkxTVzEyOF0pCi0JCXJldHVybiBmbHMoYVtOTFNXMTI4XSkgKyA2NDsKLQlpZiAoYVtMU1cxMjhdKQotCQlyZXR1cm4gZmxzKGFbTFNXMTI4XSkgKyA5NjsKLQllbHNlCi0JCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgemVyb3AxMjgoY29uc3QgaW50MTI4IGEpCi17Ci0JcmV0dXJuICEoYVtMU1cxMjhdIHwgYVtOTFNXMTI4XSB8IGFbTk1TVzEyOF0gfCBhW01TVzEyOF0pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBub256ZXJvcDEyOChjb25zdCBpbnQxMjggYSkKLXsKLQlyZXR1cm4gKGFbTFNXMTI4XSB8IGFbTkxTVzEyOF0gfCBhW05NU1cxMjhdIHwgYVtNU1cxMjhdKTsKLX0KLQotLyogQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uICovCi0vKiBEbyB0aGVzZSBpbiAicHVyZSIgYXNzZW1ibHksIGJlY2F1c2UgImV4dGVuZGVkIiBhc20gaXMgdW5tYW5hZ2VhYmxlCi0gICBoZXJlICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkMTI4KGNvbnN0IGludDEyOCBhLCBpbnQxMjggYikKLXsKLQkvKiByb3RhdGluZyBjYXJyeSBmbGFncyAqLwotCXVuc2lnbmVkIGludCBjYXJyeVsyXTsKLQotCWNhcnJ5WzBdID0gYVtMU1cxMjhdID4gKDB4ZmZmZmZmZmYgLSBiW0xTVzEyOF0pOwotCWJbTFNXMTI4XSArPSBhW0xTVzEyOF07Ci0KLQljYXJyeVsxXSA9IGFbTkxTVzEyOF0gPiAoMHhmZmZmZmZmZiAtIGJbTkxTVzEyOF0gLSBjYXJyeVswXSk7Ci0JYltOTFNXMTI4XSA9IGFbTkxTVzEyOF0gKyBiW05MU1cxMjhdICsgY2FycnlbMF07Ci0KLQljYXJyeVswXSA9IGFbTk1TVzEyOF0gPiAoMHhmZmZmZmZmZiAtIGJbTk1TVzEyOF0gLSBjYXJyeVsxXSk7Ci0JYltOTVNXMTI4XSA9IGFbTk1TVzEyOF0gKyBiW05NU1cxMjhdICsgY2FycnlbMV07Ci0KLQliW01TVzEyOF0gPSBhW01TVzEyOF0gKyBiW01TVzEyOF0gKyBjYXJyeVswXTsKLX0KLQotLyogTm90ZTogYXNzZW1ibGVyIHNlbWFudGljczogImIgLT0gYSIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdWIxMjgoY29uc3QgaW50MTI4IGEsIGludDEyOCBiKQotewotCS8qIHJvdGF0aW5nIGJvcnJvdyBmbGFncyAqLwotCXVuc2lnbmVkIGludCBib3Jyb3dbMl07Ci0KLQlib3Jyb3dbMF0gPSBiW0xTVzEyOF0gPCBhW0xTVzEyOF07Ci0JYltMU1cxMjhdIC09IGFbTFNXMTI4XTsKLQotCWJvcnJvd1sxXSA9IGJbTkxTVzEyOF0gPCBhW05MU1cxMjhdICsgYm9ycm93WzBdOwotCWJbTkxTVzEyOF0gPSBiW05MU1cxMjhdIC0gYVtOTFNXMTI4XSAtIGJvcnJvd1swXTsKLQotCWJvcnJvd1swXSA9IGJbTk1TVzEyOF0gPCBhW05NU1cxMjhdICsgYm9ycm93WzFdOwotCWJbTk1TVzEyOF0gPSBiW05NU1cxMjhdIC0gYVtOTVNXMTI4XSAtIGJvcnJvd1sxXTsKLQotCWJbTVNXMTI4XSA9IGJbTVNXMTI4XSAtIGFbTVNXMTI4XSAtIGJvcnJvd1swXTsKLX0KLQotLyogUG9vciBtYW4ncyA2NC1iaXQgZXhwYW5kaW5nIG11bHRpcGx5ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXVsNjQodW5zaWduZWQgbG9uZyBsb25nIGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBiLCBpbnQxMjggYykKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgYWNjOwotCWludDEyOCBhY2MxMjg7Ci0KLQl6ZXJvMTI4KGFjYzEyOCk7Ci0JemVybzEyOChjKTsKLQotCS8qIGZpcnN0IHRoZSBsb3cgd29yZHMgKi8KLQlpZiAoTE9fV09SRChhKSAmJiBMT19XT1JEKGIpKSB7Ci0JCWFjYyA9IChsb25nIGxvbmcpIExPX1dPUkQoYSkgKiBMT19XT1JEKGIpOwotCQljW05MU1cxMjhdID0gSElfV09SRChhY2MpOwotCQljW0xTVzEyOF0gPSBMT19XT1JEKGFjYyk7Ci0JfQotCS8qIE5leHQgdGhlIGhpZ2ggd29yZHMgKi8KLQlpZiAoSElfV09SRChhKSAmJiBISV9XT1JEKGIpKSB7Ci0JCWFjYyA9IChsb25nIGxvbmcpIEhJX1dPUkQoYSkgKiBISV9XT1JEKGIpOwotCQljW01TVzEyOF0gPSBISV9XT1JEKGFjYyk7Ci0JCWNbTk1TVzEyOF0gPSBMT19XT1JEKGFjYyk7Ci0JfQotCS8qIFRoZSBtaWRkbGUgd29yZHMgKi8KLQlpZiAoTE9fV09SRChhKSAmJiBISV9XT1JEKGIpKSB7Ci0JCWFjYyA9IChsb25nIGxvbmcpIExPX1dPUkQoYSkgKiBISV9XT1JEKGIpOwotCQlhY2MxMjhbTk1TVzEyOF0gPSBISV9XT1JEKGFjYyk7Ci0JCWFjYzEyOFtOTFNXMTI4XSA9IExPX1dPUkQoYWNjKTsKLQkJYWRkMTI4KGFjYzEyOCwgYyk7Ci0JfQotCS8qIFRoZSBmaXJzdCBhbmQgbGFzdCB3b3JkcyAqLwotCWlmIChISV9XT1JEKGEpICYmIExPX1dPUkQoYikpIHsKLQkJYWNjID0gKGxvbmcgbG9uZykgSElfV09SRChhKSAqIExPX1dPUkQoYik7Ci0JCWFjYzEyOFtOTVNXMTI4XSA9IEhJX1dPUkQoYWNjKTsKLQkJYWNjMTI4W05MU1cxMjhdID0gTE9fV09SRChhY2MpOwotCQlhZGQxMjgoYWNjMTI4LCBjKTsKLQl9Ci19Ci0KLS8qIE5vdGU6IHVuc2lnbmVkICovCi1zdGF0aWMgaW5saW5lIGludCBjbXAxMjgoaW50MTI4IGEsIGludDEyOCBiKQotewotCWlmIChhW01TVzEyOF0gPCBiW01TVzEyOF0pCi0JCXJldHVybiAtMTsKLQlpZiAoYVtNU1cxMjhdID4gYltNU1cxMjhdKQotCQlyZXR1cm4gMTsKLQlpZiAoYVtOTVNXMTI4XSA8IGJbTk1TVzEyOF0pCi0JCXJldHVybiAtMTsKLQlpZiAoYVtOTVNXMTI4XSA+IGJbTk1TVzEyOF0pCi0JCXJldHVybiAxOwotCWlmIChhW05MU1cxMjhdIDwgYltOTFNXMTI4XSkKLQkJcmV0dXJuIC0xOwotCWlmIChhW05MU1cxMjhdID4gYltOTFNXMTI4XSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gKHNpZ25lZCkgYVtMU1cxMjhdIC0gYltMU1cxMjhdOwotfQotCi1pbmxpbmUgdm9pZCBkaXYxMjgoaW50MTI4IGEsIGludDEyOCBiLCBpbnQxMjggYykKLXsKLQlpbnQxMjggbWFzazsKLQotCS8qIEFsZ29yaXRobToKLQotCSAgIFNoaWZ0IHRoZSBkaXZpc29yIHVudGlsIGl0J3MgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZQotCSAgIGRpdmlkZW5kLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBwb3NpdGlvbiB0byB3aGljaCB3ZSd2ZQotCSAgIHNoaWZ0ZWQgaXQsIGkuZS4gdGhlIHBvd2VyIG9mIDIgd2hpY2ggd2UndmUgbXVsdGlwbGllZCBpdAotCSAgIGJ5LgotCi0JICAgVGhlbiwgZm9yIHRoaXMgcG93ZXIgb2YgMiAodGhlIG1hc2spLCBhbmQgZXZlcnkgb25lIHNtYWxsZXIKLQkgICB0aGFuIGl0LCBzdWJ0cmFjdCB0aGUgbWFzayBmcm9tIHRoZSBkaXZpZGVuZCBhbmQgYWRkIGl0IHRvCi0JICAgdGhlIHF1b3RpZW50IHVudGlsIHRoZSBkaXZpZGVuZCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJhaXNlZAotCSAgIGRpdmlzb3IuICBBdCB0aGlzIHBvaW50LCBkaXZpZGUgdGhlIGRpdmlkZW5kIGFuZCB0aGUgbWFzawotCSAgIGJ5IDIgKGkuZS4gc2hpZnQgb25lIHBsYWNlIHRvIHRoZSByaWdodCkuICBMYXRoZXIsIHJpbnNlLAotCSAgIGFuZCByZXBlYXQsIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHBvd2VycyBvZiAyIGxlZnQuICovCi0KLQkvKiBGSVhNRTogbmVlZGxlc3MgdG8gc2F5LCB0aGVyZSdzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUgdG9vLiAqLwotCi0JLyogU2hpZnQgdXAgKi8KLQkvKiBYWFg6IHNpbmNlIGl0IGp1c3QgaGFzIHRvIGJlICJhdCBsZWFzdCBhcyBiaWciLCB3ZSBjYW4KLQkgICBwcm9iYWJseSBlbGltaW5hdGUgdGhpcyBob3JyaWJseSB3YXN0ZWZ1bCBsb29wLiAgSSB3aWxsCi0JICAgaGF2ZSB0byBwcm92ZSB0aGlzIGZpcnN0LCB0aG91Z2ggKi8KLQlzZXQxMjgoMCwgMCwgMCwgMSwgbWFzayk7Ci0Jd2hpbGUgKGNtcDEyOChiLCBhKSA8IDAgJiYgIWJ0c3RoaTEyOChiKSkgewotCQlsc2xvbmUxMjgoYik7Ci0JCWxzbG9uZTEyOChtYXNrKTsKLQl9Ci0KLQkvKiBTaGlmdCBkb3duICovCi0JemVybzEyOChjKTsKLQlkbyB7Ci0JCWlmIChjbXAxMjgoYSwgYikgPj0gMCkgewotCQkJc3ViMTI4KGIsIGEpOwotCQkJYWRkMTI4KG1hc2ssIGMpOwotCQl9Ci0JCWxzcm9uZTEyOChtYXNrKTsKLQkJbHNyb25lMTI4KGIpOwotCX0gd2hpbGUgKG5vbnplcm9wMTI4KG1hc2spKTsKLQotCS8qIFRoZSByZW1haW5kZXIgaXMgaW4gYS4uLiAqLwotfQotI2VuZGlmCi0KICNlbmRpZgkvKiBNVUxUSV9BUklUSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vaW5pdF9tbS5jIGIvYXJjaC9tNjhrL21tL2luaXRfbW0uYwppbmRleCA5MTEzYzJmLi5iYmU1MjU0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vaW5pdF9tbS5jCisrKyBiL2FyY2gvbTY4ay9tbS9pbml0X21tLmMKQEAgLTgzLDExICs4Myw2IEBACiAJaW50IGluaXRwYWdlcyA9IDA7CiAJaW50IGk7CiAKLSNpZmRlZiBDT05GSUdfQVRBUkkKLQlpZiAoTUFDSF9JU19BVEFSSSkKLQkJYXRhcmlfc3RyYW1fbWVtX2luaXRfaG9vaygpOwotI2VuZGlmCi0KIAkvKiB0aGlzIHdpbGwgcHV0IGFsbCBtZW1vcnkgb250byB0aGUgZnJlZWxpc3RzICovCiAJdG90YWxyYW1fcGFnZXMgPSBudW1fcGh5c3BhZ2VzID0gMDsKIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggZDkxNWExMi4uODc4OWRhYSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBzeXNfdm04NiAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBPbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBzeXNfc2V0cmVzZ2lkCQkvKiAxNzAgKi8KIAkubG9uZyBzeXNfZ2V0cmVzZ2lkCiAJLmxvbmcgc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggZTUyMTQyMC4uODY1YmM3YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNDI0LDcgKzQyNCw3IEBACiAJc3lzCXN5c19nZXRyZXN1aWQJCTMKIAlzeXMJc3lzX25pX3N5c2NhbGwJCTAJLyogd2FzIHN5c19xdWVyeV9tb2R1bGUgKi8KIAlzeXMJc3lzX3BvbGwJCTMKLQlzeXMJc3lzX25mc3NlcnZjdGwJCTMKKwlzeXMJc3lzX25pX3N5c2NhbGwJCTAJLyogd2FzIG5mc3NlcnZjdGwgKi8KIAlzeXMJc3lzX3NldHJlc2dpZAkJMwkvKiA0MTkwICovCiAJc3lzCXN5c19nZXRyZXNnaWQJCTMKIAlzeXMJc3lzX3ByY3RsCQk1CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IDg1ODc0ZDYuLmZiNzMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC0yOTksNyArMjk5LDcgQEAKIAlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiA1MTcwLCB3YXMgZ2V0X2tlcm5lbF9zeW1zICovCiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIHF1ZXJ5X21vZHVsZSAqLwogCVBUUglzeXNfcXVvdGFjdGwKLQlQVFIJc3lzX25mc3NlcnZjdGwKKwlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiB3YXMgbmZzc2VydmN0bCAqLwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHJlcy4gZm9yIGdldHBtc2cgKi8KIAlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiA1MTc1ICBmb3IgcHV0cG1zZyAqLwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHJlcy4gZm9yIGFmc19zeXNjYWxsICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggYjg1ODQyZi4uZjkyOTZlOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogNjE3MCwgd2FzIGdldF9rZXJuZWxfc3ltcyAqLwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyBxdWVyeV9tb2R1bGUgKi8KIAlQVFIJc3lzX3F1b3RhY3RsCi0JUFRSCWNvbXBhdF9zeXNfbmZzc2VydmN0bAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyBuZnNzZXJ2Y3RsICovCiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogcmVzLiBmb3IgZ2V0cG1zZyAqLwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIDYxNzUgIGZvciBwdXRwbXNnICovCiAJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogcmVzLiBmb3IgYWZzX3N5c2NhbGwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCA0NmM0NzYzLi40ZDdjOTgyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC0zOTIsNyArMzkyLDcgQEAKIAlQVFIJc3lzX2dldHJlc3VpZAogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyBxdWVyeV9tb2R1bGUgKi8KIAlQVFIJc3lzX3BvbGwKLQlQVFIJY29tcGF0X3N5c19uZnNzZXJ2Y3RsCisJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIG5mc3NlcnZjdGwgKi8KIAlQVFIJc3lzX3NldHJlc2dpZAkJCS8qIDQxOTAgKi8KIAlQVFIJc3lzX2dldHJlc2dpZAogCVBUUglzeXNfcHJjdGwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUwppbmRleCBhZTQzNWUxLi4zZTM2MjBkIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9lbnRyeS5TCkBAIC01ODksNyArNTg5LDcgQEAKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiB2bTg2ICovCiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogT2xkIHN5c19xdWVyeV9tb2R1bGUgKi8KIAkubG9uZyBzeXNfcG9sbAotCS5sb25nIHN5c19uZnNzZXJ2Y3RsCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogd2FzIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZDE2CiAJLmxvbmcgc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMDUyZjg3Ny4uNjBiNDcyMiAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMzEsNyArMzEsNiBAQAogCiAjZGVmaW5lIERNQV9FUlJPUl9DT0RFCQkofihkbWFfYWRkcl90KTB4MCkKIAotaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQpAQCAtNDcsNiArNDYsMTIgQEAKIHZvaWQgb3Ixa191bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogCQkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCiAJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworaW50IG9yMWtfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKK3ZvaWQgb3Ixa191bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiB2b2lkIG9yMWtfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAogCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKQEAgLTk4LDYgKzEwMyw1MSBAQAogCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCB0cnVlKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IGksIGVudHM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCisJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKQorCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZChzZ192aXJ0KHMpLCBzLT5sZW5ndGgpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwllbnRzID0gb3Ixa19tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpciwgTlVMTCk7CisJZGVidWdfZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywgZW50cywgZGlyKTsKKworCXJldHVybiBlbnRzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJZGVidWdfZG1hX3VubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXIpOworCW9yMWtfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpciwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX2FkZHJfdCBhZGRyOworCisJa21lbWNoZWNrX21hcmtfaW5pdGlhbGl6ZWQocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJYWRkciA9IG9yMWtfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpciwgTlVMTCk7CisJZGVidWdfZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGFkZHIsIGZhbHNlKTsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlvcjFrX3VubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCB0cnVlKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAogCQkJCQkgICBzaXplX3Qgc2l6ZSwKIAkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpAQCAtMTE5LDcgKzE2OSwxMiBAQAogc3RhdGljIGlubGluZSBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKIHsKIAkvKiBTdXBwb3J0IDMyIGJpdCBETUEgbWFzayBleGNsdXNpdmVseSAqLwotCXJldHVybiBkbWFfbWFzayA9PSAweGZmZmZmZmZmVUxMOworCXJldHVybiBkbWFfbWFzayA9PSBETUFfQklUX01BU0soMzIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggNTRhNWM1MC4uYjc5YzJiMSAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKQEAgLTIzLDE2ICsyMywxMSBAQAogCiAvKiBUaGlzIHN0cnVjdCBpcyBzYXZlZCBieSBzZXR1cF9mcmFtZSBpbiBzaWduYWwuYywgdG8ga2VlcCB0aGUgY3VycmVudAogICAgY29udGV4dCB3aGlsZSBhIHNpZ25hbCBoYW5kbGVyIGlzIGV4ZWN1dGVkLiBJdCdzIHJlc3RvcmVkIGJ5IHN5c19zaWdyZXR1cm4uCi0KLSAgIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgd2UgdXNlIHB0X3JlZ3MgaGVyZSBldmVuIHRob3VnaCBub3JtYWxseSB5b3UganVzdAotICAgc3BlY2lmeSB0aGUgbGlzdCBvZiByZWdzIHRvIHNhdmUuIFRoZW4gd2UgY2FuIHVzZSBjb3B5X2Zyb21fdXNlciBvbiB0aGUKLSAgIGVudGlyZSByZWdzIGluc3RlYWQgb2YgYSBidW5jaCBvZiBnZXRfdXNlcidzIGFzIHdlbGwuLi4KICovCiAKIHN0cnVjdCBzaWdjb250ZXh0IHsKLQlzdHJ1Y3QgcHRfcmVncyByZWdzOyAgLyogbmVlZHMgdG8gYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOyAgLyogbmVlZHMgdG8gYmUgZmlyc3QgKi8KIAl1bnNpZ25lZCBsb25nIG9sZG1hc2s7Ci0JdW5zaWduZWQgbG9uZyB1c3A7ICAgIC8qIHVzcCBiZWZvcmUgc3RhY2tpbmcgdGhpcyBndW5rIG9uIGl0ICovCiB9OwogCiAjZW5kaWYgLyogX19BU01fT1BFTlJJU0NfU0lHQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2tlcm5lbC9kbWEuYyBiL2FyY2gvb3BlbnJpc2Mva2VybmVsL2RtYS5jCmluZGV4IDk2OGQzZWUuLmYxYzhlZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvb3BlbnJpc2Mva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvb3BlbnJpc2Mva2VybmVsL2RtYS5jCkBAIC0xNTQsNiArMTU0LDMzIEBACiAJLyogTm90aGluZyBzcGVjaWFsIHRvIGRvIGhlcmUuLi4gKi8KIH0KIAoraW50IG9yMWtfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgeworCQlzLT5kbWFfYWRkcmVzcyA9IG9yMWtfbWFwX3BhZ2UoZGV2LCBzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJCSAgICAgICBzLT5sZW5ndGgsIGRpciwgTlVMTCk7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorCit2b2lkIG9yMWtfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCWludCBpOworCisJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKSB7CisJCW9yMWtfdW5tYXBfcGFnZShkZXYsIHNnX2RtYV9hZGRyZXNzKHMpLCBzZ19kbWFfbGVuKHMpLCBkaXIsIE5VTEwpOworCX0KK30KKwogdm9pZCBvcjFrX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKQEAgLTE4Nyw1ICsyMTQsNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIGZzX2luaXRjYWxsKGRtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvb3BlbnJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9vcGVucmlzYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNWY3NTljNy4uOTUyMDdhYiAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9vcGVucmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyLDMxICs1MiwyNSBAQAogc3RhdGljIGludCByZXN0b3JlX3NpZ2NvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzaWdjb250ZXh0ICpzYykKIHsKIAl1bnNpZ25lZCBpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIG9sZF91c3A7CiAKIAkvKiBBbHd5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbCByZXR1cm4gLUVJTlRSICovCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwogCi0JLyogcmVzdG9yZSB0aGUgcmVncyBmcm9tICZzYy0+cmVncyAoc2FtZSBhcyBzYywgc2luY2UgcmVncyBpcyBmaXJzdCkKKwkvKgorCSAqIFJlc3RvcmUgdGhlIHJlZ3MgZnJvbSAmc2MtPnJlZ3MuCiAJICogKHNjIGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgVkVSSUZZX1JFQUQgc2luY2UgdGhlIHNpZ2ZyYW1lIHdhcwogCSAqICBjaGVja2VkIGluIHN5c19zaWdyZXR1cm4gcHJldmlvdXNseSkKIAkgKi8KLQotCWlmIChfX2NvcHlfZnJvbV91c2VyKHJlZ3MsIHNjLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKSkKKwlpZiAoX19jb3B5X2Zyb21fdXNlcihyZWdzLCBzYy0+cmVncy5ncHIsIDMyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKKwkJZ290byBiYWRmcmFtZTsKKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmcmVncy0+cGMsICZzYy0+cmVncy5wYywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKKwkJZ290byBiYWRmcmFtZTsKKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmcmVncy0+c3IsICZzYy0+cmVncy5zciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKIAkJZ290byBiYWRmcmFtZTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgU00tYml0IGlzIGNsZWFyZWQgc28gdXNlci1tb2RlIGNhbm5vdCBmb29sIHVzICovCiAJcmVncy0+c3IgJj0gflNQUl9TUl9TTTsKIAotCS8qIHJlc3RvcmUgdGhlIG9sZCBVU1AgYXMgaXQgd2FzIGJlZm9yZSB3ZSBzdGFja2VkIHRoZSBzYyBldGMuCi0JICogKHdlIGNhbm5vdCBqdXN0IHBvcCB0aGUgc2lnY29udGV4dCBzaW5jZSB3ZSBhbGlnbmVkIHRoZSBzcCBhbmQKLQkgKiAgc3R1ZmYgYWZ0ZXIgcHVzaGluZyBpdCkKLQkgKi8KLQotCWVyciB8PSBfX2dldF91c2VyKG9sZF91c3AsICZzYy0+dXNwKTsKLQotCXJlZ3MtPnNwID0gb2xkX3VzcDsKLQogCS8qIFRPRE86IHRoZSBvdGhlciBwb3J0cyB1c2UgcmVncy0+b3JpZ19YWCB0byBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzCiAJICogYWZ0ZXIgdGhpcyBjb21wbGV0ZXMsIGJ1dCB3ZSBkb24ndCB1c2UgdGhhdCBtZWNoYW5pc20uIG1heWJlIHdlIGNhbgogCSAqIHVzZSBpdCBub3cgPwpAQCAtMTM3LDE4ICsxMzEsMTcgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCiB7CiAJaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyB1c3AgPSByZWdzLT5zcDsKIAotCS8qIGNvcHkgdGhlIHJlZ3MuIHRoZXkgYXJlIGZpcnN0IGluIHNjIHNvIHdlIGNhbiB1c2Ugc2MgZGlyZWN0bHkgKi8KKwkvKiBjb3B5IHRoZSByZWdzICovCiAKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoc2MsIHJlZ3MsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCWVyciB8PSBfX2NvcHlfdG9fdXNlcihzYy0+cmVncy5ncHIsIHJlZ3MsIDMyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5yZWdzLnBjLCAmcmVncy0+cGMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZzYy0+cmVncy5zciwgJnJlZ3MtPnNyLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCiAJLyogdGhlbiBzb21lIG90aGVyIHN0dWZmICovCiAKIAllcnIgfD0gX19wdXRfdXNlcihtYXNrLCAmc2MtPm9sZG1hc2spOwogCi0JZXJyIHw9IF9fcHV0X3VzZXIodXNwLCAmc2MtPnVzcCk7Ci0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwppbmRleCA2NWFkYzg2Li5lMDc3YjBiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAlzZWxlY3QgSEFWRV9HRU5FUklDX0hBUkRJUlFTCiAJc2VsZWN0IEdFTkVSSUNfSVJRX1BST0JFCiAJc2VsZWN0IElSUV9QRVJfQ1BVCisJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCiAKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggYjFkYzcxZi4uNDA1NGIzMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAKICNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKSAoKGF0b21pYzY0X3QpIHsgKGkpIH0pCiAKLXN0YXRpYyBfX2lubGluZV9fIGludAorc3RhdGljIF9faW5saW5lX18gczY0CiBfX2F0b21pYzY0X2FkZF9yZXR1cm4oczY0IGksIGF0b21pYzY0X3QgKnYpCiB7Ci0JaW50IHJldDsKKwlzNjQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZSh2LCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z1dGV4LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdXRleC5oCmluZGV4IDY3YTMzY2MuLjIzODhiZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z1dGV4LmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtNSwxMSArNSwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCiBzdGF0aWMgaW5saW5lIGludAogZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIHUzMiBfX3VzZXIgKnVhZGRyKQogeworCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOworCXUzMiB2YWw7CiAJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKIAlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CiAJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CkBAIC0xOCwyMSArMjEsNTggQEAKIAlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCiAJCW9wYXJnID0gMSA8PCBvcGFyZzsKIAotCWlmICghIGFjY2Vzc19vayAoVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKHUzMikpKQorCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZigqdWFkZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCisJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZSh1YWRkciwgZmxhZ3MpOworCiAJc3dpdGNoIChvcCkgewogCWNhc2UgRlVURVhfT1BfU0VUOgorCQkvKiAqKGludCAqKVVBRERSMiA9IE9QQVJHOyAqLworCQlyZXQgPSBnZXRfdXNlcihvbGR2YWwsIHVhZGRyKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBwdXRfdXNlcihvcGFyZywgdWFkZHIpOworCQlicmVhazsKIAljYXNlIEZVVEVYX09QX0FERDoKKwkJLyogKihpbnQgKilVQUREUjIgKz0gT1BBUkc7ICovCisJCXJldCA9IGdldF91c2VyKG9sZHZhbCwgdWFkZHIpOworCQlpZiAoIXJldCkgeworCQkJdmFsID0gb2xkdmFsICsgb3Bhcmc7CisJCQlyZXQgPSBwdXRfdXNlcih2YWwsIHVhZGRyKTsKKwkJfQorCQlicmVhazsKIAljYXNlIEZVVEVYX09QX09SOgorCQkvKiAqKGludCAqKVVBRERSMiB8PSBPUEFSRzsgKi8KKwkJcmV0ID0gZ2V0X3VzZXIob2xkdmFsLCB1YWRkcik7CisJCWlmICghcmV0KSB7CisJCQl2YWwgPSBvbGR2YWwgfCBvcGFyZzsKKwkJCXJldCA9IHB1dF91c2VyKHZhbCwgdWFkZHIpOworCQl9CisJCWJyZWFrOwogCWNhc2UgRlVURVhfT1BfQU5ETjoKKwkJLyogKihpbnQgKilVQUREUjIgJj0gfk9QQVJHOyAqLworCQlyZXQgPSBnZXRfdXNlcihvbGR2YWwsIHVhZGRyKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXZhbCA9IG9sZHZhbCAmIH5vcGFyZzsKKwkJCXJldCA9IHB1dF91c2VyKHZhbCwgdWFkZHIpOworCQl9CisJCWJyZWFrOwogCWNhc2UgRlVURVhfT1BfWE9SOgorCQkvKiAqKGludCAqKVVBRERSMiBePSBPUEFSRzsgKi8KKwkJcmV0ID0gZ2V0X3VzZXIob2xkdmFsLCB1YWRkcik7CisJCWlmICghcmV0KSB7CisJCQl2YWwgPSBvbGR2YWwgXiBvcGFyZzsKKwkJCXJldCA9IHB1dF91c2VyKHZhbCwgdWFkZHIpOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CiAJfQogCisJX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKHVhZGRyLCBmbGFncyk7CisKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiAKIAlpZiAoIXJldCkgewpAQCAtNTQsNyArOTQsOSBAQAogZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWModTMyICp1dmFsLCB1MzIgX191c2VyICp1YWRkciwKIAkJCSAgICAgIHUzMiBvbGR2YWwsIHUzMiBuZXd2YWwpCiB7CisJaW50IHJldDsKIAl1MzIgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBmdXRleC5jIHdhbnRzIHRvIGRvIGEgY21weGNoZ19pbmF0b21pYyBvbiBrZXJuZWwgTlVMTCwgd2hpY2ggaXMKIAkgKiBvdXIgZ2F0ZXdheSBwYWdlLCBhbmQgY2F1c2VzIG5vIGVuZCBvZiB0cm91YmxlLi4uCkBAIC02NSwxMiArMTA3LDI0IEBACiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKHUzMikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChnZXRfdXNlcih2YWwsIHVhZGRyKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHZhbCA9PSBvbGR2YWwgJiYgcHV0X3VzZXIobmV3dmFsLCB1YWRkcikpCi0JCXJldHVybiAtRUZBVUxUOworCS8qIEhQUEEgaGFzIG5vIGNtcHhjaGcgaW4gaGFyZHdhcmUgYW5kIHRoZXJlZm9yZSB0aGUKKwkgKiBiZXN0IHdlIGNhbiBkbyBoZXJlIGlzIHVzZSBhbiBhcnJheSBvZiBsb2Nrcy4gVGhlCisJICogbG9jayBzZWxlY3RlZCBpcyBiYXNlZCBvbiBhIGhhc2ggb2YgdGhlIHVzZXJzcGFjZQorCSAqIGFkZHJlc3MuIFRoaXMgc2hvdWxkIHNjYWxlIHRvIGEgY291cGxlIG9mIENQVXMuCisJICovCisKKwlfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKHVhZGRyLCBmbGFncyk7CisKKwlyZXQgPSBnZXRfdXNlcih2YWwsIHVhZGRyKTsKKworCWlmICghcmV0ICYmIHZhbCA9PSBvbGR2YWwpCisJCXJldCA9IHB1dF91c2VyKG5ld3ZhbCwgdWFkZHIpOworCiAJKnV2YWwgPSB2YWw7Ci0JcmV0dXJuIDA7CisKKwlfYXRvbWljX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUodWFkZHIsIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKICNlbmRpZiAvKl9fS0VSTkVMX18qLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAzMzkyZGUzLi5kNjFkZTY0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtODIxLDggKzgyMSw5IEBACiAjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJKF9fTlJfTGludXggKyAzMjYpCiAjZGVmaW5lIF9fTlJfc3luY2ZzCQkoX19OUl9MaW51eCArIDMyNykKICNkZWZpbmUgX19OUl9zZXRucwkJKF9fTlJfTGludXggKyAzMjgpCisjZGVmaW5lIF9fTlJfc2VuZG1tc2cJCShfX05SX0xpbnV4ICsgMzI5KQogCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfc2V0bnMgKyAxKQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3NlbmRtbXNnICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCAzNGE0ZjVhLi4zNzM1YWJkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTI1OSw3ICsyNTksNyBAQAogCUVOVFJZX1NBTUUobmlfc3lzY2FsbCkJCS8qIHF1ZXJ5X21vZHVsZSAqLwogCUVOVFJZX1NBTUUocG9sbCkKIAkvKiBzdHJ1Y3RzIGNvbnRhaW4gcG9pbnRlcnMgYW5kIGFuIGluX2FkZHIuLi4gKi8KLQlFTlRSWV9DT01QKG5mc3NlcnZjdGwpCisJRU5UUllfU0FNRShuaV9zeXNjYWxsKQkJLyogd2FzIG5mc3NlcnZjdGwgKi8KIAlFTlRSWV9TQU1FKHNldHJlc2dpZCkJCS8qIDE3MCAqLwogCUVOVFJZX1NBTUUoZ2V0cmVzZ2lkKQogCUVOVFJZX1NBTUUocHJjdGwpCkBAIC00MjcsNiArNDI3LDcgQEAKIAlFTlRSWV9DT01QKG9wZW5fYnlfaGFuZGxlX2F0KQogCUVOVFJZX1NBTUUoc3luY2ZzKQogCUVOVFJZX1NBTUUoc2V0bnMpCisJRU5UUllfQ09NUChzZW5kbW1zZykKIAogCS8qIE5vdGhpbmcgeWV0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMzc0YzQ3NS4uNjkyNmI2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTEzNiw2ICsxMzYsNyBAQAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgSEFWRV9CUEZfSklUIGlmIChQUEM2NCAmJiBORVQpCiAJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMCisJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCiAKIGNvbmZpZyBFQVJMWV9QUklOVEsKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjNyZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIzcmRzLmR0cwppbmRleCBiZmE5NmFhLi5kOWI3NzY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjNyZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyM3Jkcy5kdHMKQEAgLTM4Nyw3ICszODcsNyBAQAogCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAyMDAwMDAwPjsKLQkJCWJhbmstd2lkdGggPSA8MT47CisJCQliYW5rLXdpZHRoID0gPDI+OwogCQkJZGV2aWNlLXdpZHRoID0gPDE+OwogCQkJcGFydGl0aW9uQDAgewogCQkJCWxhYmVsID0gInJhbWRpc2siOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9wMTAyM3Jkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3AxMDIzcmRzX2RlZmNvbmZpZwppbmRleCA5ODBmZjhmLi4zZmY1YTgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3AxMDIzcmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3AxMDIzcmRzX2RlZmNvbmZpZwpAQCAtMTcxLDMgKzE3MSw0IEBACiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CiBDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0MzJfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQzMl9zbXBfZGVmY29uZmlnCmluZGV4IDEwNTYyYTUuLjQzMTFkMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQzMl9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQzMl9zbXBfZGVmY29uZmlnCkBAIC0xODUsMyArMTg1LDQgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKIENPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY29yZW5ldDY0X3NtcF9kZWZjb25maWcKaW5kZXggZDMyMjgzNS4uYzkyYzIwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY29yZW5ldDY0X3NtcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY29yZW5ldDY0X3NtcF9kZWZjb25maWcKQEAgLTEwMCw1ICsxMDAsOCBAQAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19WSVJRX0RFQlVHPXkKIENPTkZJR19DUllQVE9fUENCQz1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TPXkKK0NPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZmNkODVkMi4uYTM0NjdiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTEzOSw2ICsxMzksNyBAQAogQ09ORklHX1NORF9JTlRFTDhYMD15CiAjIENPTkZJR19TTkRfUFBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKaW5kZXggOTA4Yzk0MS4uOTY5M2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwpAQCAtMTQwLDYgKzE0MCw3IEBACiBDT05GSUdfU05EX0lOVEVMOFgwPXkKICMgQ09ORklHX1NORF9QUEMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IDFmNzgwYjkuLjkzODk4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtMjIsNyArMjIsNiBAQAogCWFzbSBnb3RvKCIxOlxuXHQiCiAJCSAibm9wXG5cdCIKIAkJICIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhd1wiXG5cdCIKLQkJICIuYWxpZ24gNFxuXHQiCiAJCSBKVU1QX0VOVFJZX1RZUEUgIjFiLCAlbFtsX3llc10sICVjMFxuXHQiCiAJCSAiLnBvcHNlY3Rpb24gXG5cdCIKIAkJIDogOiAgImkiIChrZXkpIDogOiBsX3llcyk7CkBAIC00MSw3ICs0MCw2IEBACiAJanVtcF9sYWJlbF90IGNvZGU7CiAJanVtcF9sYWJlbF90IHRhcmdldDsKIAlqdW1wX2xhYmVsX3Qga2V5OwotCWp1bXBfbGFiZWxfdCBwYWQ7CiB9OwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0pVTVBfTEFCRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tkdW1wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaAppbmRleCA2ODU3YWY1Li5iZmZkMDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2R1bXAuaApAQCAtMywxNyArMyw3IEBACiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0vKgotICogSWYgQ09ORklHX1JFTE9DQVRBQkxFIGlzIGVuYWJsZWQgd2UgY2FuIHBsYWNlIHRoZSBrZHVtcCBrZXJuZWwgYW55d2hlcmUuCi0gKiBUbyBrZWVwIGVub3VnaCBzcGFjZSBpbiB0aGUgUk1PIGZvciB0aGUgZmlyc3Qgc3RhZ2Uga2VybmVsIG9uIDY0Yml0LCB3ZQotICogcGxhY2UgaXQgYXQgNjRNQi4gSWYgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBlbmFibGVkIHdlIG11c3QgcGxhY2UKLSAqIHRoZSBzZWNvbmQgc3RhZ2UgYXQgMzJNQi4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1JFTE9DQVRBQkxFKSAmJiBkZWZpbmVkKENPTkZJR19QUEM2NCkKLSNkZWZpbmUgS0RVTVBfS0VSTkVMQkFTRQkweDQwMDAwMDAKLSNlbHNlCiAjZGVmaW5lIEtEVU1QX0tFUk5FTEJBU0UJMHgyMDAwMDAwCi0jZW5kaWYKIAogLyogSG93IG1hbnkgYnl0ZXMgdG8gcmVzZXJ2ZSBhdCB6ZXJvIGZvciBrZHVtcC4gVGhlIHJlc2VydmUgbGltaXQgc2hvdWxkCiAgKiBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSB0cmFtcG9saW5lJ3MgZW5kIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKaW5kZXggZThhYWY2Zi4uNTU5ZGExOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaApAQCAtMTAwMyw3ICsxMDAzLDYgQEAKICNkZWZpbmUgUFZfOTcwCQkweDAwMzkKICNkZWZpbmUgUFZfUE9XRVI1CTB4MDAzQQogI2RlZmluZSBQVl9QT1dFUjVwCTB4MDAzQgotI2RlZmluZSBQVl9QT1dFUjcJMHgwMDNGCiAjZGVmaW5lIFBWXzk3MEZYCTB4MDAzQwogI2RlZmluZSBQVl9QT1dFUjYJMHgwMDNFCiAjZGVmaW5lIFBWX1BPV0VSNwkweDAwM0YKQEAgLTEwMjQsMTMgKzEwMjMsMTYgQEAKICNkZWZpbmUgbXRtc3JkKHYpCV9fbXRtc3JkKCh2KSwgMCkKICNkZWZpbmUgbXRtc3IodikJbXRtc3JkKHYpCiAjZWxzZQotI2RlZmluZSBtdG1zcih2KQlhc20gdm9sYXRpbGUoIm10bXNyICUwIiA6IDogInIiICh2KSA6ICJtZW1vcnkiKQorI2RlZmluZSBtdG1zcih2KQlhc20gdm9sYXRpbGUoIm10bXNyICUwIiA6IFwKKwkJCQkgICAgIDogInIiICgodW5zaWduZWQgbG9uZykodikpIFwKKwkJCQkgICAgIDogIm1lbW9yeSIpCiAjZW5kaWYKIAogI2RlZmluZSBtZnNwcihybikJKHt1bnNpZ25lZCBsb25nIHJ2YWw7IFwKIAkJCWFzbSB2b2xhdGlsZSgibWZzcHIgJTAsIiBfX3N0cmluZ2lmeShybikgXAogCQkJCTogIj1yIiAocnZhbCkpOyBydmFsO30pCi0jZGVmaW5lIG10c3ByKHJuLCB2KQlhc20gdm9sYXRpbGUoIm10c3ByICIgX19zdHJpbmdpZnkocm4pICIsJTAiIDogOiAiciIgKHYpXAorI2RlZmluZSBtdHNwcihybiwgdikJYXNtIHZvbGF0aWxlKCJtdHNwciAiIF9fc3RyaW5naWZ5KHJuKSAiLCUwIiA6IFwKKwkJCQkgICAgIDogInIiICgodW5zaWduZWQgbG9uZykodikpIFwKIAkJCQkgICAgIDogIm1lbW9yeSIpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKaW5kZXggZjY3MzZiNy4uZmEwZDI3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaApAQCAtMTcxLDcgKzE3MSw3IEBACiBTWVNDQUxMX1NQVShnZXRyZXN1aWQpCiBTWVNDQUxMKG5pX3N5c2NhbGwpCiBTWVNDQUxMX1NQVShwb2xsKQotQ09NUEFUX1NZUyhuZnNzZXJ2Y3RsKQorU1lTQ0FMTChuaV9zeXNjYWxsKQogU1lTQ0FMTF9TUFUoc2V0cmVzZ2lkKQogU1lTQ0FMTF9TUFUoZ2V0cmVzZ2lkKQogQ09NUEFUX1NZU19TUFUocHJjdGwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggOWZiOTMzMi4uZmE0NGZmNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMjA1MSw3ICsyMDUxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjcHVfc3BlYyB0aGVfY3B1X3NwZWM7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9jcHVfc3BlYyh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjICpzKQorc3RhdGljIHN0cnVjdCBjcHVfc3BlYyAqIF9faW5pdCBzZXR1cF9jcHVfc3BlYyh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgICAgIHN0cnVjdCBjcHVfc3BlYyAqcykKIHsKIAlzdHJ1Y3QgY3B1X3NwZWMgKnQgPSAmdGhlX2NwdV9zcGVjOwogCXN0cnVjdCBjcHVfc3BlYyBvbGQ7CkBAIC0yMTE0LDYgKzIxMTUsOCBAQAogCQl0LT5jcHVfc2V0dXAob2Zmc2V0LCB0KTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0IHx8IENPTkZJR19CT09LRSAqLworCisJcmV0dXJuIHQ7CiB9CiAKIHN0cnVjdCBjcHVfc3BlYyAqIF9faW5pdCBpZGVudGlmeV9jcHUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGludCBwdnIpCkBAIC0yMTI0LDEwICsyMTI3LDggQEAKIAlzID0gUFRSUkVMT0Mocyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcHVfc3BlY3MpOyBpKysscysrKSB7Ci0JCWlmICgocHZyICYgcy0+cHZyX21hc2spID09IHMtPnB2cl92YWx1ZSkgewotCQkJc2V0dXBfY3B1X3NwZWMob2Zmc2V0LCBzKTsKLQkJCXJldHVybiBzOwotCQl9CisJCWlmICgocHZyICYgcy0+cHZyX21hc2spID09IHMtPnB2cl92YWx1ZSkKKwkJCXJldHVybiBzZXR1cF9jcHVfc3BlYyhvZmZzZXQsIHMpOwogCX0KIAogCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21hcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21hcC5jCmluZGV4IDE1Nzc0MzQuLmIyNWY2MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tYXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbWFwLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogRVhQT1JUX1NZTUJPTChpb3BvcnRfbWFwKTsKIEVYUE9SVF9TWU1CT0woaW9wb3J0X3VubWFwKTsKIAorI2lmZGVmIENPTkZJR19QQ0kKIHZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CkBAIC0xNDYsMyArMTQ3LDQgQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfaW9tYXApOwogRVhQT1JUX1NZTUJPTChwY2lfaW91bm1hcCk7CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA2NjU4YTE1Li45Y2UxNjcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTM2LDEyICsxMzYsMTYgQEAKIAljcmFzaGtfcmVzLnN0YXJ0ID0gS0RVTVBfS0VSTkVMQkFTRTsKICNlbHNlCiAJaWYgKCFjcmFzaGtfcmVzLnN0YXJ0KSB7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJCS8qCi0JCSAqIHVuc3BlY2lmaWVkIGFkZHJlc3MsIGNob29zZSBhIHJlZ2lvbiBvZiBzcGVjaWZpZWQgc2l6ZQotCQkgKiBjYW4gb3ZlcmxhcCB3aXRoIGluaXRyZCAoaWdub3JpbmcgY29ycnVwdGlvbiB3aGVuIHJldGFpbmVkKQotCQkgKiBwcGM2NCByZXF1aXJlcyBrZXJuZWwgYW5kIHNvbWUgc3RhY2tzIHRvIGJlIGluIGZpcnN0IHNlZ2VtbnQKKwkJICogT24gNjRiaXQgd2Ugc3BsaXQgdGhlIFJNTyBpbiBoYWxmIGJ1dCBjYXAgaXQgYXQgaGFsZiBvZgorCQkgKiBhIHNtYWxsIFNMQiAoMTI4TUIpIHNpbmNlIHRoZSBjcmFzaCBrZXJuZWwgbmVlZHMgdG8gcGxhY2UKKwkJICogaXRzZWxmIGFuZCBzb21lIHN0YWNrcyB0byBiZSBpbiB0aGUgZmlyc3Qgc2VnbWVudC4KIAkJICovCisJCWNyYXNoa19yZXMuc3RhcnQgPSBtaW4oMHg4MDAwMDAwMFVMTCwgKHBwYzY0X3JtYV9zaXplIC8gMikpOworI2Vsc2UKIAkJY3Jhc2hrX3Jlcy5zdGFydCA9IEtEVU1QX0tFUk5FTEJBU0U7CisjZW5kaWYKIAl9CiAKIAljcmFzaF9iYXNlID0gUEFHRV9BTElHTihjcmFzaGtfcmVzLnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwppbmRleCBkMDVhZTQyLi41NjRjMWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCkBAIC0xNTQsOCArMTU0LDEyIEBACiAJICAgICgodW5zaWduZWQgbG9uZylwdHIgJiA3KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIV9fZ2V0X3VzZXJfaW5hdG9taWMoKnJldCwgcHRyKSkKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWlmICghX19nZXRfdXNlcl9pbmF0b21pYygqcmV0LCBwdHIpKSB7CisJCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAkJcmV0dXJuIDA7CisJfQorCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXJldHVybiByZWFkX3VzZXJfc3RhY2tfc2xvdyhwdHIsIHJldCwgOCk7CiB9CkBAIC0xNjYsOCArMTcwLDEyIEBACiAJICAgICgodW5zaWduZWQgbG9uZylwdHIgJiAzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoIV9fZ2V0X3VzZXJfaW5hdG9taWMoKnJldCwgcHRyKSkKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCWlmICghX19nZXRfdXNlcl9pbmF0b21pYygqcmV0LCBwdHIpKSB7CisJCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAkJcmV0dXJuIDA7CisJfQorCXBhZ2VmYXVsdF9lbmFibGUoKTsKIAogCXJldHVybiByZWFkX3VzZXJfc3RhY2tfc2xvdyhwdHIsIHJldCwgNCk7CiB9CkBAIC0yOTQsMTEgKzMwMiwxNyBAQAogICovCiBzdGF0aWMgaW50IHJlYWRfdXNlcl9zdGFja18zMih1bnNpZ25lZCBpbnQgX191c2VyICpwdHIsIHVuc2lnbmVkIGludCAqcmV0KQogeworCWludCByYzsKKwogCWlmICgodW5zaWduZWQgbG9uZylwdHIgPiBUQVNLX1NJWkUgLSBzaXplb2YodW5zaWduZWQgaW50KSB8fAogCSAgICAoKHVuc2lnbmVkIGxvbmcpcHRyICYgMykpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIF9fZ2V0X3VzZXJfaW5hdG9taWMoKnJldCwgcHRyKTsKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCXJjID0gX19nZXRfdXNlcl9pbmF0b21pYygqcmV0LCBwdHIpOworCXBhZ2VmYXVsdF9lbmFibGUoKTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2FsbGNoYWluX3VzZXJfNjQoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGMwMTYwMzMuLmE5MDlmNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAl9CiAJaWYgKGFkZHIgPT0gMCkKIAkJcmV0dXJuIDA7Ci0JUkVMT0MoYWxsb2NfYm90dG9tKSA9IGFkZHI7CisJUkVMT0MoYWxsb2NfYm90dG9tKSA9IGFkZHIgKyBzaXplOwogCiAJcHJvbV9kZWJ1ZygiIC0+ICV4XG4iLCBhZGRyKTsKIAlwcm9tX2RlYnVnKCIgIGFsbG9jX2JvdHRvbSA6ICV4XG4iLCBSRUxPQyhhbGxvY19ib3R0b20pKTsKQEAgLTE4MzAsMTEgKzE4MzAsMTMgQEAKIAkJaWYgKHJvb20gPiBERVZUUkVFX0NIVU5LX1NJWkUpCiAJCQlyb29tID0gREVWVFJFRV9DSFVOS19TSVpFOwogCQlpZiAocm9vbSA8IFBBR0VfU0laRSkKLQkJCXByb21fcGFuaWMoIk5vIG1lbW9yeSBmb3IgZmxhdHRlbl9kZXZpY2VfdHJlZSAobm8gcm9vbSkiKTsKKwkJCXByb21fcGFuaWMoIk5vIG1lbW9yeSBmb3IgZmxhdHRlbl9kZXZpY2VfdHJlZSAiCisJCQkJICAgIihubyByb29tKVxuIik7CiAJCWNodW5rID0gYWxsb2NfdXAocm9vbSwgMCk7CiAJCWlmIChjaHVuayA9PSAwKQotCQkJcHJvbV9wYW5pYygiTm8gbWVtb3J5IGZvciBmbGF0dGVuX2RldmljZV90cmVlIChjbGFpbSBmYWlsZWQpIik7Ci0JCSptZW1fZW5kID0gUkVMT0MoYWxsb2NfdG9wKTsKKwkJCXByb21fcGFuaWMoIk5vIG1lbW9yeSBmb3IgZmxhdHRlbl9kZXZpY2VfdHJlZSAiCisJCQkJICAgIihjbGFpbSBmYWlsZWQpXG4iKTsKKwkJKm1lbV9lbmQgPSBjaHVuayArIHJvb207CiAJfQogCiAJcmV0ID0gKHZvaWQgKikqbWVtX3N0YXJ0OwpAQCAtMjA0Miw3ICsyMDQ0LDcgQEAKIAogCS8qCiAJICogQ2hlY2sgaG93IG11Y2ggcm9vbSB3ZSBoYXZlIGJldHdlZW4gYWxsb2MgdG9wICYgYm90dG9tICgrLy0gYQotCSAqIGZldyBwYWdlcyksIGNyb3AgdG8gNE1iLCBhcyB0aGlzIGlzIG91ciAiY2h1Y2siIHNpemUKKwkgKiBmZXcgcGFnZXMpLCBjcm9wIHRvIDFNQiwgYXMgdGhpcyBpcyBvdXIgImNodW5rIiBzaXplCiAJICovCiAJcm9vbSA9IFJFTE9DKGFsbG9jX3RvcCkgLSBSRUxPQyhhbGxvY19ib3R0b20pIC0gMHg0MDAwOwogCWlmIChyb29tID4gREVWVFJFRV9DSFVOS19TSVpFKQpAQCAtMjA1Myw3ICsyMDU1LDcgQEAKIAltZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZylhbGxvY191cChyb29tLCBQQUdFX1NJWkUpOwogCWlmIChtZW1fc3RhcnQgPT0gMCkKIAkJcHJvbV9wYW5pYygiQ2FuJ3QgYWxsb2NhdGUgaW5pdGlhbCBkZXZpY2UtdHJlZSBjaHVua1xuIik7Ci0JbWVtX2VuZCA9IFJFTE9DKGFsbG9jX3RvcCk7CisJbWVtX2VuZCA9IG1lbV9zdGFydCArIHJvb207CiAKIAkvKiBHZXQgcm9vdCBvZiB0cmVlICovCiAJcm9vdCA9IGNhbGxfcHJvbSgicGVlciIsIDEsIDEsIChwaGFuZGxlKTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TCmluZGV4IDZkZDMzNTguLmRlMjk1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3JtaGFuZGxlcnMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybWhhbmRsZXJzLlMKQEAgLTEyNTEsNyArMTI1MSw3IEBACiAJcmVnID0gMAogCS5yZXB0CTMyCiAJbGkJcjYscmVnKjE2K1ZDUFVfVlNSUwotCXN0eHZkMngJcmVnLHI2LHIzCisJU1RYVkQyWChyZWcscjYscjMpCiAJcmVnID0gcmVnICsgMQogCS5lbmRyCiBGVFJfU0VDVElPTl9FTFNFCkBAIC0xMzEzLDcgKzEzMTMsNyBAQAogCXJlZyA9IDAKIAkucmVwdAkzMgogCWxpCXI3LHJlZyoxNitWQ1BVX1ZTUlMKLQlseHZkMngJcmVnLHI3LHI0CisJTFhWRDJYKHJlZyxyNyxyNCkKIAlyZWcgPSByZWcgKyAxCiAJLmVuZHIKIEZUUl9TRUNUSU9OX0VMU0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCBkMGFmN2ZiLi5iOWJhODYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0yNCw3ICsyNCw3IEBACiAKIGNvbmZpZyBLVk1fR1VFU1QKIAlib29sICJLVk0gR3Vlc3Qgc3VwcG9ydCIKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHZhcmlvdXMgb3B0aW1pemF0aW9ucyBmb3IgcnVubmluZyB1bmRlciB0aGUgS1ZNCiAJICBoeXBlcnZpc29yLiBPdmVyaGVhZCBmb3IgdGhlIGtlcm5lbCB3aGVuIG5vdCBydW5uaW5nIGluc2lkZSBLVk0gc2hvdWxkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKaW5kZXggZTkxOTAwNy4uMGU4NjU2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAlscHBhY2Ffb2YoZHRsLT5jcHUpLmR0bF9lbmFibGVfbWFzayA9IDB4MDsKIAotCXVucmVnaXN0ZXJfZHRsKGh3Y3B1LCBfX3BhKGR0bC0+YnVmKSk7CisJdW5yZWdpc3Rlcl9kdGwoaHdjcHUpOwogfQogCiBzdGF0aWMgdTY0IGR0bF9jdXJyZW50X2luZGV4KHN0cnVjdCBkdGwgKmR0bCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggYmMwMjg4NS4uODNhM2NhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQlnZXRfbHBwYWNhKCktPmlkbGUgPSAwOwogCiAJCWlmIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfT05MSU5FKSB7Ci0JCQl1bnJlZ2lzdGVyX3NsYl9zaGFkb3coaHdjcHUsIF9fcGEoZ2V0X3NsYl9zaGFkb3coKSkpOworCQkJdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGh3Y3B1KTsKIAogCQkJLyoKIAkJCSAqIENhbGwgdG8gc3RhcnRfc2Vjb25kYXJ5X3Jlc3VtZSgpIHdpbGwgbm90IHJldHVybi4KQEAgLTE1MCw3ICsxNTAsNyBAQAogCVdBUk5fT04oZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSkgIT0gQ1BVX1NUQVRFX09GRkxJTkUpOwogCiAJc2V0X2NwdV9jdXJyZW50X3N0YXRlKGNwdSwgQ1BVX1NUQVRFX09GRkxJTkUpOwotCXVucmVnaXN0ZXJfc2xiX3NoYWRvdyhod2NwdSwgX19wYShnZXRfc2xiX3NoYWRvdygpKSk7CisJdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGh3Y3B1KTsKIAlydGFzX3N0b3Bfc2VsZigpOwogCiAJLyogU2hvdWxkIG5ldmVyIGdldCBoZXJlLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9fZXZlbnRfaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9fZXZlbnRfaXJxLmMKaW5kZXggYzgyOWU2MC4uMmM0ZGQxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvX2V2ZW50X2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb19ldmVudF9pcnEuYwpAQCAtMjEyLDE3ICsyMTIsMTUgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCiAJaW9laV9jaGVja19leGNlcHRpb25fdG9rZW4gPSBydGFzX3Rva2VuKCJjaGVjay1leGNlcHRpb24iKTsKLQlpZiAoaW9laV9jaGVja19leGNlcHRpb25fdG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpIHsKLQkJcHJfd2FybmluZygiSU8gRXZlbnQgSVJRIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gIVxuIik7CisJaWYgKGlvZWlfY2hlY2tfZXhjZXB0aW9uX3Rva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvZXZlbnQtc291cmNlcy9pYm0saW8tZXZlbnRzIik7CiAJaWYgKG5wKSB7CiAJCXJlcXVlc3RfZXZlbnRfc291cmNlc19pcnFzKG5wLCBpb2VpX2ludGVycnVwdCwgIklPX0VWRU5UIik7CisJCXByX2luZm8oIklCTSBJL08gZXZlbnQgaW50ZXJydXB0cyBlbmFibGVkXG4iKTsKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0gZWxzZSB7Ci0JCXByX2VycigiaW9fZXZlbnRfaXJxOiBObyBpYm0saW8tZXZlbnRzIG9uIHN5c3RlbSEgIgotCQkgICAgICAgIklPIEV2ZW50IGludGVycnVwdCBkaXNhYmxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCmluZGV4IDU0Y2YzYTQuLjdkOTRiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9rZXhlYy5jCkBAIC0yNSwyMCArMjUsMzAgQEAKIHsKIAkvKiBEb24ndCByaXNrIGEgaHlwZXJ2aXNvciBjYWxsIGlmIHdlJ3JlIGNyYXNoaW5nICovCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSAmJiAhY3Jhc2hfc2h1dGRvd24pIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlpbnQgcmV0OworCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCQlpbnQgaHdjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAotCQlhZGRyID0gX19wYShnZXRfc2xiX3NoYWRvdygpKTsKLQkJaWYgKHVucmVnaXN0ZXJfc2xiX3NoYWRvdyhoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgYWRkcikpCi0JCQlwcmludGsoIlNMQiBzaGFkb3cgYnVmZmVyIGRlcmVnaXN0cmF0aW9uIG9mICIKLQkJCSAgICAgICAiY3B1ICV1IChod19jcHVfaWQgJWQpIGZhaWxlZFxuIiwKLQkJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksCi0JCQkgICAgICAgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAoZ2V0X2xwcGFjYSgpLT5kdGxfZW5hYmxlX21hc2spIHsKKwkJCXJldCA9IHVucmVnaXN0ZXJfZHRsKGh3Y3B1KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIldBUk5JTkc6IERUTCBkZXJlZ2lzdHJhdGlvbiBmb3IgY3B1ICIKKwkJCQkgICAgICAgIiVkIChodyAlZCkgZmFpbGVkIHdpdGggJWRcbiIsCisJCQkJICAgICAgIGNwdSwgaHdjcHUsIHJldCk7CisJCQl9CisJCX0KIAotCQlhZGRyID0gX19wYShnZXRfbHBwYWNhKCkpOwotCQlpZiAodW5yZWdpc3Rlcl92cGEoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIGFkZHIpKSB7Ci0JCQlwcmludGsoIlZQQSBkZXJlZ2lzdHJhdGlvbiBvZiBjcHUgJXUgKGh3X2NwdV9pZCAlZCkgIgotCQkJCQkiZmFpbGVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksCi0JCQkJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJcmV0ID0gdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGh3Y3B1KTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJXQVJOSU5HOiBTTEIgc2hhZG93IGJ1ZmZlciBkZXJlZ2lzdHJhdGlvbiAiCisJCQkgICAgICAgImZvciBjcHUgJWQgKGh3ICVkKSBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCSAgICAgICBjcHUsIGh3Y3B1LCByZXQpOworCQl9CisKKwkJcmV0ID0gdW5yZWdpc3Rlcl92cGEoaHdjcHUpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIldBUk5JTkc6IFZQQSBkZXJlZ2lzdHJhdGlvbiBmb3IgY3B1ICVkICIKKwkJCSAgICAgICAiKGh3ICVkKSBmYWlsZWQgd2l0aCAlZFxuIiwgY3B1LCBod2NwdSwgcmV0KTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IGY3MjA1ZDMuLmM5YTI5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNjcsOSArNjcsOCBAQAogCXJldCA9IHJlZ2lzdGVyX3ZwYShod2NwdSwgYWRkcik7CiAKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogdnBhX2luaXQ6IFZQQSByZWdpc3RyYXRpb24gZm9yICIKLQkJCQkiY3B1ICVkIChodyAlZCkgb2YgYXJlYSAlbHggcmV0dXJucyAlbGRcbiIsCi0JCQkJY3B1LCBod2NwdSwgYWRkciwgcmV0KTsKKwkJcHJfZXJyKCJXQVJOSU5HOiBWUEEgcmVnaXN0cmF0aW9uIGZvciBjcHUgJWQgKGh3ICVkKSBvZiBhcmVhICIKKwkJICAgICAgICIlbHggZmFpbGVkIHdpdGggJWxkXG4iLCBjcHUsIGh3Y3B1LCBhZGRyLCByZXQpOwogCQlyZXR1cm47CiAJfQogCS8qCkBAIC04MCwxMCArNzksOSBAQAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikpIHsKIAkJcmV0ID0gcmVnaXN0ZXJfc2xiX3NoYWRvdyhod2NwdSwgYWRkcik7CiAJCWlmIChyZXQpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiV0FSTklORzogdnBhX2luaXQ6IFNMQiBzaGFkb3cgYnVmZmVyICIKLQkJCSAgICAgICAicmVnaXN0cmF0aW9uIGZvciBjcHUgJWQgKGh3ICVkKSBvZiBhcmVhICVseCAiCi0JCQkgICAgICAgInJldHVybnMgJWxkXG4iLCBjcHUsIGh3Y3B1LCBhZGRyLCByZXQpOworCQkJcHJfZXJyKCJXQVJOSU5HOiBTTEIgc2hhZG93IGJ1ZmZlciByZWdpc3RyYXRpb24gZm9yICIKKwkJCSAgICAgICAiY3B1ICVkIChodyAlZCkgb2YgYXJlYSAlbHggZmFpbGVkIHdpdGggJWxkXG4iLAorCQkJICAgICAgIGNwdSwgaHdjcHUsIGFkZHIsIHJldCk7CiAJfQogCiAJLyoKQEAgLTEwMCw4ICs5OCw5IEBACiAJCWR0bC0+ZW5xdWV1ZV90b19kaXNwYXRjaF90aW1lID0gRElTUEFUQ0hfTE9HX0JZVEVTOwogCQlyZXQgPSByZWdpc3Rlcl9kdGwoaHdjcHUsIF9fcGEoZHRsKSk7CiAJCWlmIChyZXQpCi0JCQlwcl93YXJuKCJEVEwgcmVnaXN0cmF0aW9uIGZhaWxlZCBmb3IgY3B1ICVkICglbGQpXG4iLAotCQkJCWNwdSwgcmV0KTsKKwkJCXByX2VycigiV0FSTklORzogRFRMIHJlZ2lzdHJhdGlvbiBvZiBjcHUgJWQgKGh3ICVkKSAiCisJCQkgICAgICAgImZhaWxlZCB3aXRoICVsZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJICAgICAgIGh3Y3B1LCByZXQpOwogCQlscHBhY2Ffb2YoY3B1KS5kdGxfZW5hYmxlX21hc2sgPSAyOwogCX0KIH0KQEAgLTIwNCw3ICsyMDMsNyBAQAogCQl1bnNpZ25lZCBsb25nIHB0ZWw7CiAJfSBwdGVzWzRdOwogCWxvbmcgbHBhcl9yYzsKLQlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIGksIGo7CiAKIAkvKiBSZWFkIGluIGJhdGNoZXMgb2YgNCwKIAkgKiBpbnZhbGlkYXRlIG9ubHkgdmFsaWQgZW50cmllcyBub3QgaW4gdGhlIFZSTUEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggNGJmMjEyMC4uNDFjMjRjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKQEAgLTUzLDkgKzUzLDkgQEAKIAlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHSVNURVJfVlBBLCBmbGFncywgY3B1LCB2cGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcgdW5yZWdpc3Rlcl92cGEodW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfdnBhKHVuc2lnbmVkIGxvbmcgY3B1KQogewotCXJldHVybiB2cGFfY2FsbCgweDUsIGNwdSwgdnBhKTsKKwlyZXR1cm4gdnBhX2NhbGwoMHg1LCBjcHUsIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgcmVnaXN0ZXJfdnBhKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBsb25nIHZwYSkKQEAgLTYzLDkgKzYzLDkgQEAKIAlyZXR1cm4gdnBhX2NhbGwoMHgxLCBjcHUsIHZwYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyB1bnJlZ2lzdGVyX3NsYl9zaGFkb3codW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfc2xiX3NoYWRvdyh1bnNpZ25lZCBsb25nIGNwdSkKIHsKLQlyZXR1cm4gdnBhX2NhbGwoMHg3LCBjcHUsIHZwYSk7CisJcmV0dXJuIHZwYV9jYWxsKDB4NywgY3B1LCAwKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHJlZ2lzdGVyX3NsYl9zaGFkb3codW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQpAQCAtNzMsOSArNzMsOSBAQAogCXJldHVybiB2cGFfY2FsbCgweDMsIGNwdSwgdnBhKTsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfZHRsKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBsb25nIHZwYSkKK3N0YXRpYyBpbmxpbmUgbG9uZyB1bnJlZ2lzdGVyX2R0bCh1bnNpZ25lZCBsb25nIGNwdSkKIHsKLQlyZXR1cm4gdnBhX2NhbGwoMHg2LCBjcHUsIHZwYSk7CisJcmV0dXJuIHZwYV9jYWxsKDB4NiwgY3B1LCAwKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHJlZ2lzdGVyX2R0bCh1bnNpZ25lZCBsb25nIGNwdSwgdW5zaWduZWQgbG9uZyB2cGEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IGQwMGU1MjkuLjA5NjlmZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0zMjQsOCArMzI0LDkgQEAKIAlkdGwtPmVucXVldWVfdG9fZGlzcGF0Y2hfdGltZSA9IERJU1BBVENIX0xPR19CWVRFUzsKIAlyZXQgPSByZWdpc3Rlcl9kdGwoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIF9fcGEoZHRsKSk7CiAJaWYgKHJldCkKLQkJcHJfd2FybigiRFRMIHJlZ2lzdHJhdGlvbiBmYWlsZWQgZm9yIGJvb3QgY3B1ICVkICglZClcbiIsCi0JCQlzbXBfcHJvY2Vzc29yX2lkKCksIHJldCk7CisJCXByX2VycigiV0FSTklORzogRFRMIHJlZ2lzdHJhdGlvbiBvZiBjcHUgJWQgKGh3ICVkKSBmYWlsZWQgIgorCQkgICAgICAgIndpdGggJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwKKwkJICAgICAgIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOwogCWdldF9wYWNhKCktPmxwcGFjYV9wdHItPmR0bF9lbmFibGVfbWFzayA9IDI7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKaW5kZXggMmRlODU1MS4uYzY1Zjc1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNkZWZpbmUgT0RTUl9DTEVBUgkJMHgxYzAwCiAjZGVmaW5lIExUTEVFQ1NSX0VOQUJMRV9BTEwJMHhGRkMwMDBGQwogI2RlZmluZSBFU0NTUl9DTEVBUgkJMHgwNzEyMDIwNAorI2RlZmluZSBJRUNTUl9DTEVBUgkJMHg4MDAwMDAwMAogCiAjZGVmaW5lIFJJT19QT1JUMV9FRENTUgkJMHgwNjQwCiAjZGVmaW5lIFJJT19QT1JUMl9FRENTUgkJMHgwNjgwCkBAIC0xMDg5LDExICsxMDkwLDExIEBACiAKIAlpZiAob2Zmc2V0ID09IDApIHsKIAkJb3V0X2JlMzIoKHUzMiAqKShyaW9fcmVnc193aW4gKyBSSU9fUE9SVDFfRURDU1IpLCAwKTsKLQkJb3V0X2JlMzIoKHUzMiAqKShyaW9fcmVnc193aW4gKyBSSU9fUE9SVDFfSUVDU1IpLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiAqKShyaW9fcmVnc193aW4gKyBSSU9fUE9SVDFfSUVDU1IpLCBJRUNTUl9DTEVBUik7CiAJCW91dF9iZTMyKCh1MzIgKikocmlvX3JlZ3Nfd2luICsgUklPX0VTQ1NSKSwgRVNDU1JfQ0xFQVIpOwogCX0gZWxzZSB7CiAJCW91dF9iZTMyKCh1MzIgKikocmlvX3JlZ3Nfd2luICsgUklPX1BPUlQyX0VEQ1NSKSwgMCk7Ci0JCW91dF9iZTMyKCh1MzIgKikocmlvX3JlZ3Nfd2luICsgUklPX1BPUlQyX0lFQ1NSKSwgMCk7CisJCW91dF9iZTMyKCh1MzIgKikocmlvX3JlZ3Nfd2luICsgUklPX1BPUlQyX0lFQ1NSKSwgSUVDU1JfQ0xFQVIpOwogCQlvdXRfYmUzMigodTMyICopKHJpb19yZWdzX3dpbiArIFJJT19QT1JUMl9FU0NTUiksIEVTQ1NSX0NMRUFSKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCmluZGV4IGE1OWJhOTYuLmRiZmU5NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jCkBAIC02NTUsOCArNjU1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwcGM0eHhfcGNpZXhfaHdvcHMgKnBwYzR4eF9wY2lleF9od29wczsKIAotI2lmZGVmIENPTkZJR180NHgKLQogc3RhdGljIGludCBfX2luaXQgcHBjNHh4X3BjaWV4X3dhaXRfb25fc2RyKHN0cnVjdCBwcGM0eHhfcGNpZXhfcG9ydCAqcG9ydCwKIAkJCQkJICAgdW5zaWduZWQgaW50IHNkcl9vZmZzZXQsCiAJCQkJCSAgIHVuc2lnbmVkIGludCBtYXNrLApAQCAtNjg4LDYgKzY4Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKwogc3RhdGljIHZvaWQgX19pbml0IHBwYzR4eF9wY2lleF9jaGVja19saW5rX3NkcihzdHJ1Y3QgcHBjNHh4X3BjaWV4X3BvcnQgKnBvcnQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiUENJRSVkOiBDaGVja2luZyBsaW5rLi4uXG4iLCBwb3J0LT5pbmRleCk7CkBAIC03MTgsNiArNzE3LDggQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJRSVkOiBObyBkZXZpY2UgZGV0ZWN0ZWQuXG4iLCBwb3J0LT5pbmRleCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfNDR4CisKIC8qIENoZWNrIHZhcmlvdXMgcmVzZXQgYml0cyBvZiB0aGUgNDQwU1BlIFBDSWUgY29yZSAqLwogc3RhdGljIGludCBfX2luaXQgcHBjNDQwc3BlX3BjaWV4X2NoZWNrX3Jlc2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGMwM2ZlZjcuLmVkNWNiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC04MSw2ICs4MSw3IEBACiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCiAJc2VsZWN0IEhBVkVfSVJRX1dPUksKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRwogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKQEAgLTI3MywxMSArMjc0LDExIEBACiAJICBvbiBvbGRlciBtYWNoaW5lcy4KIAogY29uZmlnIE1BUkNIX1oxOTYKLQlib29sICJJQk0gekVudGVycHJpc2UgMTk2IgorCWJvb2wgIklCTSB6RW50ZXJwcmlzZSAxMTQgYW5kIDE5NiIKIAloZWxwCi0JICBTZWxlY3QgdGhpcyB0byBlbmFibGUgb3B0aW1pemF0aW9ucyBmb3IgSUJNIHpFbnRlcnByaXNlIDE5NgotCSAgKDI4MTcgc2VyaWVzKS4gVGhlIGtlcm5lbCB3aWxsIGJlIHNsaWdodGx5IGZhc3RlciBidXQgd2lsbCBub3Qgd29yawotCSAgb24gb2xkZXIgbWFjaGluZXMuCisJICBTZWxlY3QgdGhpcyB0byBlbmFibGUgb3B0aW1pemF0aW9ucyBmb3IgSUJNIHpFbnRlcnByaXNlIDExNCBhbmQgMTk2CisJICAoMjgxOCBhbmQgMjgxNyBzZXJpZXMpLiBUaGUga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgZmFzdGVyIGJ1dCB3aWxsCisJICBub3Qgd29yayBvbiBvbGRlciBtYWNoaW5lcy4KIAogZW5kY2hvaWNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcGwuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcGwuaAppbmRleCA1ZTk1ZDk1Li45N2NjNDQwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXBsLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lwbC5oCkBAIC0xNjcsNSArMTY3LDYgQEAKIH07CiAKIGV4dGVybiBpbnQgZGlhZzMwOCh1bnNpZ25lZCBsb25nIHN1YmNvZGUsIHZvaWQgKmFkZHIpOworZXh0ZXJuIHZvaWQgZGlhZzMwOF9yZXNldCh2b2lkKTsKIAogI2VuZGlmIC8qIF9BU01fUzM5MF9JUExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjI2MjgwZC4uZTg1YzkxMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xOCw2ICsxOCw3IEBACiB2b2lkIHBnbV9jaGVja19oYW5kbGVyKHZvaWQpOwogdm9pZCBtY2NrX2ludF9oYW5kbGVyKHZvaWQpOwogdm9pZCBpb19pbnRfaGFuZGxlcih2b2lkKTsKK3ZvaWQgcHN3X3Jlc3RhcnRfaW50X2hhbmRsZXIodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIApAQCAtMTUwLDcgKzE1MSwxMCBAQAogCSAqLwogCV9fdTMyCWlwaWI7CQkJCS8qIDB4MGUwMCAqLwogCV9fdTMyCWlwaWJfY2hlY2tzdW07CQkJLyogMHgwZTA0ICovCi0JX191OAlwYWRfMHgwZTA4WzB4MGYwMC0weDBlMDhdOwkvKiAweDBlMDggKi8KKworCS8qIDY0IGJpdCBzYXZlIGFyZWEgKi8KKwlfX3U2NAlzYXZlX2FyZWFfNjQ7CQkJLyogMHgwZTA4ICovCisJX191OAlwYWRfMHgwZTEwWzB4MGYwMC0weDBlMTBdOwkvKiAweDBlMTAgKi8KIAogCS8qIEV4dGVuZGVkIGZhY2lsaXR5IGxpc3QgKi8KIAlfX3U2NAlzdGZsZV9mYWNfbGlzdFszMl07CQkvKiAweDBmMDAgKi8KQEAgLTI4Niw3ICsyOTAsMTAgQEAKIAkgKi8KIAlfX3U2NAlpcGliOwkJCQkvKiAweDBlMDAgKi8KIAlfX3UzMglpcGliX2NoZWNrc3VtOwkJCS8qIDB4MGUwOCAqLwotCV9fdTgJcGFkXzB4MGUwY1sweDBmMDAtMHgwZTBjXTsJLyogMHgwZTBjICovCisKKwkvKiA2NCBiaXQgc2F2ZSBhcmVhICovCisJX191NjQJc2F2ZV9hcmVhXzY0OwkJCS8qIDB4MGUwYyAqLworCV9fdTgJcGFkXzB4MGUxNFsweDBmMDAtMHgwZTE0XTsJLyogMHgwZTE0ICovCiAKIAkvKiBFeHRlbmRlZCBmYWNpbGl0eSBsaXN0ICovCiAJX191NjQJc3RmbGVfZmFjX2xpc3RbMzJdOwkJLyogMHgwZjAwICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggNTVkZmNjOC4uYTRiNjIyOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTE5LDE0ICsxMTksMTIgQEAKICAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ldyB0aHJlYWQuCiAgKi8KICNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wc3csIG5ld19zdGFja3ApIGRvIHsJCVwKLQlzZXRfZnMoVVNFUl9EUyk7CQkJCQlcCiAJcmVncy0+cHN3Lm1hc2sJPSBwc3dfdXNlcl9iaXRzOwkJCVwKIAlyZWdzLT5wc3cuYWRkcgk9IG5ld19wc3cgfCBQU1dfQUREUl9BTU9ERTsJCVwKIAlyZWdzLT5ncHJzWzE1XQk9IG5ld19zdGFja3A7CQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc3RhcnRfdGhyZWFkMzEocmVncywgbmV3X3BzdywgbmV3X3N0YWNrcCkgZG8gewkJXAotCXNldF9mcyhVU0VSX0RTKTsJCQkJCVwKIAlyZWdzLT5wc3cubWFzawk9IHBzd191c2VyMzJfYml0czsJCQlcCiAJcmVncy0+cHN3LmFkZHIJPSBuZXdfcHN3IHwgUFNXX0FERFJfQU1PREU7CQlcCiAJcmVncy0+Z3Byc1sxNV0JPSBuZXdfc3RhY2twOwkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggZDM4MjYyOS4uNjU4MmY2OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTEzLDYgKzExMyw3IEBACiAKIGV4dGVybiB2b2lkIGNtbWFfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgbWVtY3B5X3JlYWwodm9pZCAqLCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCBjb3B5X3RvX2Fic29sdXRlX3plcm8odm9pZCAqZGVzdCwgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpOwogCiAjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KSBkbyB7CQkJCQkgICAgIFwKIAlzZXRfZnMoY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQpOwkJCQkgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCAwNWQ4ZjM4Li41MzJmZDQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yNywxMiArMjcsOSBAQAogCUJMQU5LKCk7CiAJREVGSU5FKF9fVEFTS19waWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkKSk7CiAJQkxBTksoKTsKLQlERUZJTkUoX19USFJFQURfcGVyX2NhdXNlLAotCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5wZXJfZXZlbnQuY2F1c2UpKTsKLQlERUZJTkUoX19USFJFQURfcGVyX2FkZHJlc3MsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9ldmVudC5hZGRyZXNzKSk7Ci0JREVGSU5FKF9fVEhSRUFEX3Blcl9wYWlkLAotCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC5wZXJfZXZlbnQucGFpZCkpOworCURFRklORShfX1RIUkVBRF9wZXJfY2F1c2UsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9ldmVudC5jYXVzZSkpOworCURFRklORShfX1RIUkVBRF9wZXJfYWRkcmVzcywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQucGVyX2V2ZW50LmFkZHJlc3MpKTsKKwlERUZJTkUoX19USFJFQURfcGVyX3BhaWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9ldmVudC5wYWlkKSk7CiAJQkxBTksoKTsKIAlERUZJTkUoX19USV90YXNrLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHRhc2spKTsKIAlERUZJTkUoX19USV9kb21haW4sIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZXhlY19kb21haW4pKTsKQEAgLTE0Miw2ICsxMzksNyBAQAogCURFRklORShfX0xDX0ZQUkVHU19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CiAJREVGSU5FKF9fTENfR1BSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBncHJlZ3Nfc2F2ZV9hcmVhKSk7CiAJREVGSU5FKF9fTENfQ1JFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNyZWdzX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX1NBVkVfQVJFQV82NCwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzYXZlX2FyZWFfNjQpKTsKICNpZmRlZiBDT05GSUdfMzJCSVQKIAlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHIpKTsKICNlbHNlIC8qIENPTkZJR18zMkJJVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMgYi9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUwppbmRleCAyMDk5MzhjLi4yNTU0MzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUwpAQCAtNzYsNiArNzYsNDIgQEAKIAkucXVhZAkwCiAJLnByZXZpb3VzCiAKKyMKKyMgQ2FsbHMgZGlhZyAzMDggc3ViY29kZSAxIGFuZCBjb250aW51ZXMgZXhlY3V0aW9uCisjCisjIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIGVuc3VyZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbjoKKyMgKiBQcmVmaXggcmVnaXN0ZXIgPSAwCisjICogTG93Y29yZSBwcm90ZWN0aW9uIGlzIGRpc2FibGVkCisjCitFTlRSWShkaWFnMzA4X3Jlc2V0KQorCWxhcmwJJXI0LC5MY3RscmVncwkJIyBTYXZlIGNvbnRyb2wgcmVnaXN0ZXJzCisJc3RjdGcJJWMwLCVjMTUsMCglcjQpCisJbGFybAklcjQsLkxyZXN0YXJ0X3BzdwkjIFNldHVwIHJlc3RhcnQgUFNXIGF0IGFic29sdXRlIDAKKwlsZ2hpCSVyMywwCisJbGcJJXI0LDAoJXI0KQkJIyBTYXZlIFBTVworCXN0dXJnCSVyNCwlcjMJCQkjIFVzZSBzdHVyZywgYmVjYXVzZSBvZiBsYXJnZSBwYWdlcworCWxnaGkJJXIxLDEKKwlkaWFnCSVyMSwlcjEsMHgzMDgKKy5McmVzdGFydF9wYXJ0MjoKKwlsaGkJJXIwLDAJCQkjIExvYWQgcjAgd2l0aCB6ZXJvCisJbGhpCSVyMSwyCQkJIyBVc2UgbW9kZSAyID0gRVNBTUUgKGR1bXApCisJc2lncAklcjEsJXIwLDB4MTIJCSMgU3dpdGNoIHRvIEVTQU1FIG1vZGUKKwlzYW02NAkJCQkjIFN3aXRjaCB0byA2NCBiaXQgYWRkcmVzc2luZyBtb2RlCisJbGFybAklcjQsLkxjdGxyZWdzCQkjIFJlc3RvcmUgY29udHJvbCByZWdpc3RlcnMKKwlsY3RsZwklYzAsJWMxNSwwKCVyNCkKKwlicgklcjE0CisuYWxpZ24gMTYKKy5McmVzdGFydF9wc3c6CisJLmxvbmcJMHgwMDA4MDAwMCwweDgwMDAwMDAwICsgLkxyZXN0YXJ0X3BhcnQyCisKKwkuc2VjdGlvbiAuYnNzCisuYWxpZ24gOAorLkxjdGxyZWdzOgorCS5yZXB0CTE2CisJLnF1YWQJMAorCS5lbmRyCisJLnByZXZpb3VzCisKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLwogCiBFTlRSWShzMzkwX2Jhc2VfbWNja19oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwppbmRleCBlZWU5OTk4Li5hOWEyODViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9zaWduYWwuYwpAQCAtMzgwLDIwICszODAsMTMgQEAKIAkJZ290byBiYWRmcmFtZTsKIAlpZiAoX19jb3B5X2Zyb21fdXNlcigmc2V0LnNpZywgJmZyYW1lLT5zYy5vbGRtYXNrLCBfU0lHTUFTS19DT1BZX1NJWkUzMikpCiAJCWdvdG8gYmFkZnJhbWU7Ci0KIAlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQljdXJyZW50LT5ibG9ja2VkID0gc2V0OwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQorCXNldF9jdXJyZW50X2Jsb2NrZWQoJnNldCk7CiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+c3JlZ3MpKQogCQlnb3RvIGJhZGZyYW1lOwogCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQogCQlnb3RvIGJhZGZyYW1lOwotCiAJcmV0dXJuIHJlZ3MtPmdwcnNbMl07Ci0KIGJhZGZyYW1lOgogCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKIAlyZXR1cm4gMDsKQEAgLTQxMywzMSArNDA2LDIyIEBACiAJCWdvdG8gYmFkZnJhbWU7CiAJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCiAJCWdvdG8gYmFkZnJhbWU7Ci0KIAlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQljdXJyZW50LT5ibG9ja2VkID0gc2V0OwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQorCXNldF9jdXJyZW50X2Jsb2NrZWQoJnNldCk7CiAJaWYgKHJlc3RvcmVfc2lncmVnczMyKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpKQogCQlnb3RvIGJhZGZyYW1lOwogCWlmIChyZXN0b3JlX3NpZ3JlZ3NfZ3Byc19oaWdoKHJlZ3MsIGZyYW1lLT5ncHJzX2hpZ2gpKQogCQlnb3RvIGJhZGZyYW1lOwotCiAJZXJyID0gX19nZXRfdXNlcihzc19zcCwgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CiAJc3Quc3Nfc3AgPSBjb21wYXRfcHRyKHNzX3NwKTsKIAllcnIgfD0gX19nZXRfdXNlcihzdC5zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwogCWVyciB8PSBfX2dldF91c2VyKHN0LnNzX2ZsYWdzLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX2ZsYWdzKTsKIAlpZiAoZXJyKQogCQlnb3RvIGJhZGZyYW1lOyAKLQogCXNldF9mcyAoS0VSTkVMX0RTKTsKIAlkb19zaWdhbHRzdGFjaygoc3RhY2tfdCBfX2ZvcmNlIF9fdXNlciAqKSZzdCwgTlVMTCwgcmVncy0+Z3Byc1sxNV0pOwogCXNldF9mcyAob2xkX2ZzKTsKLQogCXJldHVybiByZWdzLT5ncHJzWzJdOwotCiBiYWRmcmFtZToKIAlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CiAJcmV0dXJuIDA7CkBAIC02MDUsMTAgKzU4OSwxMCBAQAogICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgogICovCQogCi1pbnQKLWhhbmRsZV9zaWduYWwzMih1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKLQkJc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCitpbnQgaGFuZGxlX3NpZ25hbDMyKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCQkgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzaWdzZXRfdCBibG9ja2VkOwogCWludCByZXQ7CiAKIAkvKiBTZXQgdXAgdGhlIHN0YWNrIGZyYW1lICovCkBAIC02MTYsMTUgKzYwMCwxMiBAQAogCQlyZXQgPSBzZXR1cF9ydF9mcmFtZTMyKHNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncyk7CiAJZWxzZQogCQlyZXQgPSBzZXR1cF9mcmFtZTMyKHNpZywga2EsIG9sZHNldCwgcmVncyk7Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOwotCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKLQkJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCX0KLQlyZXR1cm4gcmV0OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJc2lnb3JzZXRzKCZibG9ja2VkLCAmY3VycmVudC0+YmxvY2tlZCwgJmthLT5zYS5zYV9tYXNrKTsKKwlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKKwkJc2lnYWRkc2V0KCZibG9ja2VkLCBzaWcpOworCXNldF9jdXJyZW50X2Jsb2NrZWQoJmJsb2NrZWQpOworCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggMDhhYjlhYS4uNzUyNmRiNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNjY1LDEyICs2NjUsNiBAQAogCWxnZnIJJXI0LCVyNAkJCSMgbG9uZwogCWpnCXN5c19wb2xsCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi1FTlRSWShjb21wYXRfc3lzX25mc3NlcnZjdGxfd3JhcHBlcikKLQlsZ2ZyCSVyMiwlcjIJCQkjIGludAotCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBjb21wYXRfbmZzY3RsX2FyZyoKLQlsbGd0cgklcjQsJXI0CQkJIyB1bmlvbiBjb21wYXRfbmZzY3RsX3JlcyoKLQlqZwljb21wYXRfc3lzX25mc3NlcnZjdGwJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKLQogRU5UUlkoc3lzMzJfc2V0cmVzZ2lkMTZfd3JhcHBlcikKIAlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QKIAlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwppbmRleCAwNjhmODQ2Li5mMjk3NDU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCkBAIC0zOTYsMTcgKzM5NiwxOSBAQAogc3RhdGljIF9faW5pdCB2b2lkIHJlc2N1ZV9pbml0cmQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwl1bnNpZ25lZCBsb25nIG1pbl9pbml0cmRfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBfZW5kICsgKDRVTCA8PCAyMCk7CiAJLyoKLQkgKiBNb3ZlIHRoZSBpbml0cmQgcmlnaHQgYmVoaW5kIHRoZSBic3Mgc2VjdGlvbiBpbiBjYXNlIGl0IHN0YXJ0cwotCSAqIHdpdGhpbiB0aGUgYnNzIHNlY3Rpb24uIFNvIHdlIGRvbid0IG92ZXJ3cml0ZSBpdCB3aGVuIHRoZSBic3MKLQkgKiBzZWN0aW9uIGdldHMgY2xlYXJlZC4KKwkgKiBKdXN0IGxpa2UgaW4gY2FzZSBvZiBJUEwgZnJvbSBWTSByZWFkZXIgd2UgbWFrZSBzdXJlIHRoZXJlIGlzIGEKKwkgKiBnYXAgb2YgNE1CIGJldHdlZW4gZW5kIG9mIGtlcm5lbCBhbmQgc3RhcnQgb2YgaW5pdHJkLgorCSAqIFRoYXQgd2F5IHdlIGNhbiBhbHNvIGJlIHN1cmUgdGhhdCBzYXZpbmcgYW4gTlNTIHdpbGwgc3VjY2VlZCwKKwkgKiB3aGljaCBob3dldmVyIG9ubHkgcmVxdWlyZXMgZGlmZmVyZW50IHNlZ21lbnRzLgogCSAqLwogCWlmICghSU5JVFJEX1NUQVJUIHx8ICFJTklUUkRfU0laRSkKIAkJcmV0dXJuOwotCWlmIChJTklUUkRfU1RBUlQgPj0gKHVuc2lnbmVkIGxvbmcpIF9fYnNzX3N0b3ApCisJaWYgKElOSVRSRF9TVEFSVCA+PSBtaW5faW5pdHJkX2FkZHIpCiAJCXJldHVybjsKLQltZW1tb3ZlKF9fYnNzX3N0b3AsICh2b2lkICopIElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOwotCUlOSVRSRF9TVEFSVCA9ICh1bnNpZ25lZCBsb25nKSBfX2Jzc19zdG9wOworCW1lbW1vdmUoKHZvaWQgKikgbWluX2luaXRyZF9hZGRyLCAodm9pZCAqKSBJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFKTsKKwlJTklUUkRfU1RBUlQgPSBtaW5faW5pdHJkX2FkZHI7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDNlYWI3Y2YuLjAyZWM4ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTg0OSw2ICs4NDksMzQgQEAKIHJlc3RhcnRfZ286CiAjZW5kaWYKIAorIworIyBQU1cgcmVzdGFydCBpbnRlcnJ1cHQgaGFuZGxlcgorIworRU5UUlkocHN3X3Jlc3RhcnRfaW50X2hhbmRsZXIpCisJc3QJJXIxNSxfX0xDX1NBVkVfQVJFQV82NCglcjApCSMgc2F2ZSByMTUKKwliYXNyCSVyMTUsMAorMDoJbAklcjE1LC5McmVzdGFydF9zdGFjay0wYiglcjE1KQkjIGxvYWQgcmVzdGFydCBzdGFjaworCWwJJXIxNSwwKCVyMTUpCisJYWhpCSVyMTUsLVNQX1NJWkUJCQkjIG1ha2Ugcm9vbSBmb3IgcHRfcmVncworCXN0bQklcjAsJXIxNCxTUF9SMCglcjE1KQkJIyBzdG9yZSBncHJzICVyMC0lcjE0IHRvIHN0YWNrCisJbXZjCVNQX1IxNSg0LCVyMTUpLF9fTENfU0FWRV9BUkVBXzY0KCVyMCkjIHN0b3JlIHNhdmVkICVyMTUgdG8gc3RhY2sKKwltdmMJU1BfUFNXKDgsJXIxNSksX19MQ19SU1RfT0xEX1BTVyglcjApICMgc3RvcmUgcmVzdGFydCBvbGQgcHN3CisJeGMJX19TRl9CQUNLQ0hBSU4oNCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KSAjIHNldCBiYWNrY2hhaW4gdG8gMAorCWJhc3IJJXIxNCwwCisxOglsCSVyMTQsLkxkb19yZXN0YXJ0LTFiKCVyMTQpCisJYmFzcgklcjE0LCVyMTQKKworCWJhc3IJJXIxNCwwCQkJCSMgbG9hZCBkaXNhYmxlZCB3YWl0IFBTVyBpZgorMjoJbHBzdwlyZXN0YXJ0X3Bzd19jcmFzaC0yYiglcjE0KQkjIGRvX3Jlc3RhcnQgcmV0dXJucworCS5hbGlnbiA0CisuTGRvX3Jlc3RhcnQ6CisJLmxvbmcJZG9fcmVzdGFydAorLkxyZXN0YXJ0X3N0YWNrOgorCS5sb25nCXJlc3RhcnRfc3RhY2sKKwkuYWxpZ24gOAorcmVzdGFydF9wc3dfY3Jhc2g6CisJLmxvbmcJMHgwMDBhMDAwMCwweDAwMDAwMDAwICsgcmVzdGFydF9wc3dfY3Jhc2gKKwogCS5zZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKIAogI2lmZGVmIENPTkZJR19DSEVDS19TVEFDSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCA3YTBmZDQyLi41ZjcyOWQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtODY1LDYgKzg2NSwyNiBAQAogcmVzdGFydF9nbzoKICNlbmRpZgogCisjCisjIFBTVyByZXN0YXJ0IGludGVycnVwdCBoYW5kbGVyCisjCitFTlRSWShwc3dfcmVzdGFydF9pbnRfaGFuZGxlcikKKwlzdGcJJXIxNSxfX0xDX1NBVkVfQVJFQV82NCglcjApCSMgc2F2ZSByMTUKKwlsYXJsCSVyMTUscmVzdGFydF9zdGFjawkJIyBsb2FkIHJlc3RhcnQgc3RhY2sKKwlsZwklcjE1LDAoJXIxNSkKKwlhZ2hpCSVyMTUsLVNQX1NJWkUJCQkjIG1ha2Ugcm9vbSBmb3IgcHRfcmVncworCXN0bWcJJXIwLCVyMTQsU1BfUjAoJXIxNSkJCSMgc3RvcmUgZ3BycyAlcjAtJXIxNCB0byBzdGFjaworCW12YwlTUF9SMTUoOCwlcjE1KSxfX0xDX1NBVkVfQVJFQV82NCglcjApIyBzdG9yZSBzYXZlZCAlcjE1IHRvIHN0YWNrCisJbXZjCVNQX1BTVygxNiwlcjE1KSxfX0xDX1JTVF9PTERfUFNXKCVyMCkjIHN0b3JlIHJlc3RhcnQgb2xkIHBzdworCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkgIyBzZXQgYmFja2NoYWluIHRvIDAKKwlicmFzbAklcjE0LGRvX3Jlc3RhcnQKKworCWxhcmwJJXIxNCxyZXN0YXJ0X3Bzd19jcmFzaAkJIyBsb2FkIGRpc2FibGVkIHdhaXQgUFNXIGlmCisJbHBzd2UJMCglcjE0KQkJCQkjIGRvX3Jlc3RhcnQgcmV0dXJucworCS5hbGlnbiA4CityZXN0YXJ0X3Bzd19jcmFzaDoKKwkucXVhZAkweDAwMDIwMDAwODAwMDAwMDAsMHgwMDAwMDAwMDAwMDAwMDAwICsgcmVzdGFydF9wc3dfY3Jhc2gKKwogCS5zZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCIKIAogI2lmZGVmIENPTkZJR19DSEVDS19TVEFDSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggYTY4OTA3MC4uNDhjNzEwMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC00NSwxMSArNDUsMTMgQEAKICAqIC0gaGFsdAogICogLSBwb3dlciBvZmYKICAqIC0gcmVpcGwKKyAqIC0gcmVzdGFydAogICovCiAjZGVmaW5lIE9OX1BBTklDX1NUUgkJIm9uX3BhbmljIgogI2RlZmluZSBPTl9IQUxUX1NUUgkJIm9uX2hhbHQiCiAjZGVmaW5lIE9OX1BPRkZfU1RSCQkib25fcG9mZiIKICNkZWZpbmUgT05fUkVJUExfU1RSCQkib25fcmVib290IgorI2RlZmluZSBPTl9SRVNUQVJUX1NUUgkJIm9uX3Jlc3RhcnQiCiAKIHN0cnVjdCBzaHV0ZG93bl9hY3Rpb247CiBzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciB7CkBAIC0xMjE4LDcgKzEyMjAsNyBAQAogCS8qIHN5c2ZzOiBjcmVhdGUgZmNwIGtzZXQgZm9yIG1peGluZyBhdHRyIGdyb3VwIGFuZCBiaW4gYXR0cnMgKi8KIAlyZWlwbF9mY3Bfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoSVBMX0ZDUF9TVFIsIE5VTEwsCiAJCQkJCSAgICAgJnJlaXBsX2tzZXQtPmtvYmopOwotCWlmICghcmVpcGxfa3NldCkgeworCWlmICghcmVpcGxfZmNwX2tzZXQpIHsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19mY3ApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNTQ0LDE3ICsxNTQ2LDIwIEBACiBzdGF0aWMgY2hhciB2bWNtZF9vbl9wYW5pY1sxMjhdOwogc3RhdGljIGNoYXIgdm1jbWRfb25faGFsdFsxMjhdOwogc3RhdGljIGNoYXIgdm1jbWRfb25fcG9mZlsxMjhdOworc3RhdGljIGNoYXIgdm1jbWRfb25fcmVzdGFydFsxMjhdOwogCiBERUZJTkVfSVBMX0FUVFJfU1RSX1JXKHZtY21kLCBvbl9yZWJvb3QsICIlc1xuIiwgIiVzXG4iLCB2bWNtZF9vbl9yZWJvb3QpOwogREVGSU5FX0lQTF9BVFRSX1NUUl9SVyh2bWNtZCwgb25fcGFuaWMsICIlc1xuIiwgIiVzXG4iLCB2bWNtZF9vbl9wYW5pYyk7CiBERUZJTkVfSVBMX0FUVFJfU1RSX1JXKHZtY21kLCBvbl9oYWx0LCAiJXNcbiIsICIlc1xuIiwgdm1jbWRfb25faGFsdCk7CiBERUZJTkVfSVBMX0FUVFJfU1RSX1JXKHZtY21kLCBvbl9wb2ZmLCAiJXNcbiIsICIlc1xuIiwgdm1jbWRfb25fcG9mZik7CitERUZJTkVfSVBMX0FUVFJfU1RSX1JXKHZtY21kLCBvbl9yZXN0YXJ0LCAiJXNcbiIsICIlc1xuIiwgdm1jbWRfb25fcmVzdGFydCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2bWNtZF9hdHRyc1tdID0gewogCSZzeXNfdm1jbWRfb25fcmVib290X2F0dHIuYXR0ciwKIAkmc3lzX3ZtY21kX29uX3BhbmljX2F0dHIuYXR0ciwKIAkmc3lzX3ZtY21kX29uX2hhbHRfYXR0ci5hdHRyLAogCSZzeXNfdm1jbWRfb25fcG9mZl9hdHRyLmF0dHIsCisJJnN5c192bWNtZF9vbl9yZXN0YXJ0X2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMTU3Niw2ICsxNTgxLDggQEAKIAkJY21kID0gdm1jbWRfb25faGFsdDsKIAllbHNlIGlmIChzdHJjbXAodHJpZ2dlci0+bmFtZSwgT05fUE9GRl9TVFIpID09IDApCiAJCWNtZCA9IHZtY21kX29uX3BvZmY7CisJZWxzZSBpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1JFU1RBUlRfU1RSKSA9PSAwKQorCQljbWQgPSB2bWNtZF9vbl9yZXN0YXJ0OwogCWVsc2UKIAkJcmV0dXJuOwogCkBAIC0xNjExLDcgKzE2MTgsOCBAQAogCiBzdGF0aWMgdm9pZCBzdG9wX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKIHsKLQlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKKwlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCB8fAorCSAgICBzdHJjbXAodHJpZ2dlci0+bmFtZSwgT05fUkVTVEFSVF9TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJd2hpbGUgKHNpZ3Aoc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKIAkJY3B1X3JlbGF4KCk7CkBAIC0xNzA3LDYgKzE3MTUsMzQgQEAKIAlzdG9wX3J1bigmb25fcGFuaWNfdHJpZ2dlcik7CiB9CiAKKy8qIG9uIHJlc3RhcnQgKi8KKworc3RhdGljIHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyIG9uX3Jlc3RhcnRfdHJpZ2dlciA9IHtPTl9SRVNUQVJUX1NUUiwKKwkmc3RvcF9hY3Rpb259OworCitzdGF0aWMgc3NpemVfdCBvbl9yZXN0YXJ0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlc1xuIiwgb25fcmVzdGFydF90cmlnZ2VyLmFjdGlvbi0+bmFtZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9uX3Jlc3RhcnRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc2V0X3RyaWdnZXIoYnVmLCAmb25fcmVzdGFydF90cmlnZ2VyLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIG9uX3Jlc3RhcnRfYXR0ciA9CisJX19BVFRSKG9uX3Jlc3RhcnQsIDA2NDQsIG9uX3Jlc3RhcnRfc2hvdywgb25fcmVzdGFydF9zdG9yZSk7CisKK3ZvaWQgZG9fcmVzdGFydCh2b2lkKQoreworCXNtcF9zZW5kX3N0b3AoKTsKKwlvbl9yZXN0YXJ0X3RyaWdnZXIuYWN0aW9uLT5mbigmb25fcmVzdGFydF90cmlnZ2VyKTsKKwlzdG9wX3J1bigmb25fcmVzdGFydF90cmlnZ2VyKTsKK30KKwogLyogb24gaGFsdCAqLwogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX3RyaWdnZXIgb25faGFsdF90cmlnZ2VyID0ge09OX0hBTFRfU1RSLCAmc3RvcF9hY3Rpb259OwpAQCAtMTc4Myw3ICsxODE5LDkgQEAKIAlpZiAoc3lzZnNfY3JlYXRlX2ZpbGUoJnNodXRkb3duX2FjdGlvbnNfa3NldC0+a29iaiwKIAkJCSAgICAgICZvbl9wb2ZmX2F0dHIuYXR0cikpCiAJCWdvdG8gZmFpbDsKLQorCWlmIChzeXNmc19jcmVhdGVfZmlsZSgmc2h1dGRvd25fYWN0aW9uc19rc2V0LT5rb2JqLAorCQkJICAgICAgJm9uX3Jlc3RhcnRfYXR0ci5hdHRyKSkKKwkJZ290byBmYWlsOwogCXJldHVybjsKIGZhaWw6CiAJcGFuaWMoInNodXRkb3duX3RyaWdnZXJzX2luaXQgZmFpbGVkXG4iKTsKQEAgLTE5NTksNiArMTk5NywxMiBAQAogewogCXN0cnVjdCByZXNldF9jYWxsICpyZXNldDsKIAorI2lmZGVmIENPTkZJR182NEJJVAorCWlmIChkaWFnMzA4X3NldF93b3JrcykgeworCQlkaWFnMzA4X3Jlc2V0KCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlc2V0LCAmcmNhbGwsIGxpc3QpCiAJCXJlc2V0LT5mbigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwppbmRleCA3OGViN2NmLi5lNjkwOTc1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgICBDb3B5cmlnaHQgSUJNIENvcnAgMjAwMCwyMDA5CisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAgMjAwMCwyMDExCiAgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4sCiAgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KQEAgLTgsNiArOCw2NCBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjCisjIHN0b3JlX3N0YXR1cworIworIyBQcmVyZXF1aXNpdGVzIHRvIHJ1biB0aGlzIGZ1bmN0aW9uOgorIyAtIFByZWZpeCByZWdpc3RlciBpcyBzZXQgdG8gemVybworIyAtIE9yaWdpbmFsIHByZWZpeCByZWdpc3RlciBpcyBzdG9yZWQgaW4gImR1bXBfcHJlZml4X3BhZ2UiCisjIC0gTG93Y29yZSBwcm90ZWN0aW9uIGlzIG9mZgorIworRU5UUlkoc3RvcmVfc3RhdHVzKQorCS8qIFNhdmUgcmVnaXN0ZXIgb25lIGFuZCBsb2FkIHNhdmUgYXJlYSBiYXNlICovCisJc3RnCSVyMSxfX0xDX1NBVkVfQVJFQV82NCglcjApCisJbGdoaQklcjEsU0FWRV9BUkVBX0JBU0UKKwkvKiBHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzICovCisJc3RtZwklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCWxnCSVyMixfX0xDX1NBVkVfQVJFQV82NCglcjApCisJc3RnCSVyMixfX0xDX0dQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UrOCglcjEpCisJLyogQ29udHJvbCByZWdpc3RlcnMgKi8KKwlzdGN0ZwklYzAsJWMxNSxfX0xDX0NSRUdTX1NBVkVfQVJFQS1TQVZFX0FSRUFfQkFTRSglcjEpCisJLyogQWNjZXNzIHJlZ2lzdGVycyAqLworCXN0YW0JJWEwLCVhMTUsX19MQ19BUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCS8qIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworCXN0ZAklZjAsIDB4MDAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjEsIDB4MDggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjIsIDB4MTAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjMsIDB4MTggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjQsIDB4MjAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjUsIDB4MjggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjYsIDB4MzAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjcsIDB4MzggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjgsIDB4NDAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjksIDB4NDggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjEwLDB4NTAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjExLDB4NTggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjEyLDB4NjAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjEzLDB4NjggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjE0LDB4NzAgKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCXN0ZAklZjE1LDB4NzggKyBfX0xDX0ZQUkVHU19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoJXIxKQorCS8qIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlzdGZwYwlfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBLVNBVkVfQVJFQV9CQVNFKCVyMSkKKwkvKiBDUFUgdGltZXIgKi8KKwlzdHB0CV9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQS1TQVZFX0FSRUFfQkFTRSglcjEpCisJLyogU2F2ZWQgcHJlZml4IHJlZ2lzdGVyICovCisJbGFybAklcjIsZHVtcF9wcmVmaXhfcGFnZQorCW12YwlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UoNCwlcjEpLDAoJXIyKQorCS8qIENsb2NrIGNvbXBhcmF0b3IgLSBzZXZlbiBieXRlcyAqLworCWxhcmwJJXIyLC5MY2xrY21wCisJc3Rja2MJMCglcjIpCisJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UgKyAxKDcsJXIxKSwxKCVyMikKKwkvKiBQcm9ncmFtIHN0YXR1cyB3b3JkICovCisJZXBzdwklcjIsJXIzCisJc3QJJXIyLF9fTENfUFNXX1NBVkVfQVJFQS1TQVZFX0FSRUFfQkFTRSArIDAoJXIxKQorCXN0CSVyMyxfX0xDX1BTV19TQVZFX0FSRUEtU0FWRV9BUkVBX0JBU0UgKyA0KCVyMSkKKwlsYXJsCSVyMixzdG9yZV9zdGF0dXMKKwlzdGcJJXIyLF9fTENfUFNXX1NBVkVfQVJFQS1TQVZFX0FSRUFfQkFTRSArIDgoJXIxKQorCWJyCSVyMTQKKy5hbGlnbgk4CisuTGNsa2NtcDoJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCisKKyMKICMgZG9fcmVpcGxfYXNtCiAjIFBhcmFtZXRlcjogcjIgPSBzY2hpZCBvZiByZWlwbCBkZXZpY2UKICMKQEAgLTE1LDIyICs3Myw3IEBACiBFTlRSWShkb19yZWlwbF9hc20pCiAJCWJhc3IJJXIxMywwCiAuTHBnMDoJCWxwc3dlCS5MbmV3cHN3LS5McGcwKCVyMTMpCi0uTHBnMToJCSMgZG8gc3RvcmUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcnMKLQotCQlzdGcJJXIxLC5McmVnc2F2ZS0uTHBnMCglcjEzKQotCQlsZ2hpCSVyMSwweDEwMDAKLQkJc3RtZwklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKLQkJbGcJJXIwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQotCQlzdGcJJXIwLF9fTENfR1BSRUdTX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCi0JCXN0Y3RnCSVjMCwlYzE1LF9fTENfQ1JFR1NfU0FWRV9BUkVBLTB4MTAwMCglcjEpCi0JCXN0YW0JJWEwLCVhMTUsX19MQ19BUkVHU19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKLQkJbGcJJXIxMCwuTGR1bXBfcGZ4LS5McGcwKCVyMTMpCi0JCW12YwlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtMHgxMDAwKDQsJXIxKSwwKCVyMTApCi0JCXN0ZnBjCV9fTENfRlBfQ1JFR19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKLQkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKLQkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtMHgxMDAwKDcsJXIxKSwuTGNsa2NtcC0uTHBnMCglcjEzKQotCQlzdHB0CV9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQS0weDEwMDAoJXIxKQotCQlzdGcJJXIxMywgX19MQ19QU1dfU0FWRV9BUkVBLTB4MTAwMCs4KCVyMSkKKy5McGcxOgkJYnJhc2wJJXIxNCxzdG9yZV9zdGF0dXMKIAogCQlsY3RsZwklYzYsJWM2LC5MYWxsLS5McGcwKCVyMTMpCiAJCWxncgklcjEsJXIyCkBAIC02NywxMCArMTEwLDcgQEAKIAkJc3QJJXIxNCwuTGRpc3BzdysxMi0uTHBnMCglcjEzKQogCQlscHN3ZQkuTGRpc3Bzdy0uTHBnMCglcjEzKQogCQkuYWxpZ24JOAotLkxjbGtjbXA6CS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMAogLkxhbGw6CQkucXVhZAkweDAwMDAwMDAwZmYwMDAwMDAKLS5MZHVtcF9wZng6CS5xdWFkCWR1bXBfcHJlZml4X3BhZ2UKLS5McmVnc2F2ZToJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCiAJCS5hbGlnbgkxNgogLyoKICAqIFRoZXNlIGFkZHJlc3NlcyBoYXZlIHRvIGJlIDMxIGJpdCBvdGhlcndpc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCAwYzM1ZGVlLi43YjM3MWMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlsYyA9IF9fYWxsb2NfYm9vdG1lbV9sb3coTENfUEFHRVMgKiBQQUdFX1NJWkUsIExDX1BBR0VTICogUEFHRV9TSVpFLCAwKTsKIAlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CiAJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPQotCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSByZXN0YXJ0X2ludF9oYW5kbGVyOworCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBwc3dfcmVzdGFydF9pbnRfaGFuZGxlcjsKIAlpZiAodXNlcl9tb2RlICE9IEhPTUVfU1BBQ0VfTU9ERSkKIAkJbGMtPnJlc3RhcnRfcHN3Lm1hc2sgfD0gUFNXX0FTQ19IT01FOwogCWxjLT5leHRlcm5hbF9uZXdfcHN3Lm1hc2sgPSBwc3dfa2VybmVsX2JpdHM7CkBAIC01MjksNiArNTI5LDI3IEBACiAJCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZTsKIH0KIAordm9pZCAqcmVzdGFydF9zdGFjayBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpOworCisvKgorICogU2V0dXAgbmV3IFBTVyBhbmQgYWxsb2NhdGUgc3RhY2sgZm9yIFBTVyByZXN0YXJ0IGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcmVzdGFydF9wc3codm9pZCkKK3sKKwlwc3dfdCBwc3c7CisKKwlyZXN0YXJ0X3N0YWNrID0gX19hbGxvY19ib290bWVtKEFTWU5DX1NJWkUsIEFTWU5DX1NJWkUsIDApOworCXJlc3RhcnRfc3RhY2sgKz0gQVNZTkNfU0laRTsKKworCS8qCisJICogU2V0dXAgcmVzdGFydCBQU1cgZm9yIGFic29sdXRlIHplcm8gbG93Y29yZS4gVGhpcyBpcyBuZWNlc2FyeQorCSAqIGlmIFBTVyByZXN0YXJ0IGlzIGRvbmUgb24gYW4gb2ZmbGluZSBDUFUgdGhhdCBoYXMgbG93Y29yZSB6ZXJvCisJICovCisJcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOworCXBzdy5hZGRyID0gUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgcHN3X3Jlc3RhcnRfaW50X2hhbmRsZXI7CisJY29weV90b19hYnNvbHV0ZV96ZXJvKCZTMzkwX2xvd2NvcmUucmVzdGFydF9wc3csICZwc3csIHNpemVvZihwc3cpKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0CiBzZXR1cF9tZW1vcnkodm9pZCkKIHsKQEAgLTczMSw2ICs3NTIsNyBAQAogCQlzdHJjcHkoZWxmX3BsYXRmb3JtLCAiejEwIik7CiAJCWJyZWFrOwogCWNhc2UgMHgyODE3OgorCWNhc2UgMHgyODE4OgogCQlzdHJjcHkoZWxmX3BsYXRmb3JtLCAiejE5NiIpOwogCQlicmVhazsKIAl9CkBAIC03OTIsNiArODE0LDcgQEAKIAlzZXR1cF9hZGRyZXNzaW5nX21vZGUoKTsKIAlzZXR1cF9tZW1vcnkoKTsKIAlzZXR1cF9yZXNvdXJjZXMoKTsKKwlzZXR1cF9yZXN0YXJ0X3BzdygpOwogCXNldHVwX2xvd2NvcmUoKTsKIAogICAgICAgICBjcHVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYWJiYjNjMy4uOWE0MGUxYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCkBAIC01NywxNyArNTcsMTUgQEAKICAqLwogU1lTQ0FMTF9ERUZJTkUzKHNpZ3N1c3BlbmQsIGludCwgaGlzdG9yeTAsIGludCwgaGlzdG9yeTEsIG9sZF9zaWdzZXRfdCwgbWFzaykKIHsKLQltYXNrICY9IF9CTE9DS0FCTEU7Ci0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0Jc2lnaW5pdHNldCgmY3VycmVudC0+YmxvY2tlZCwgbWFzayk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXNpZ3NldF90IGJsb2NrZWQ7CiAKKwljdXJyZW50LT5zYXZlZF9zaWdtYXNrID0gY3VycmVudC0+YmxvY2tlZDsKKwltYXNrICY9IF9CTE9DS0FCTEU7CisJc2lnaW5pdHNldCgmYmxvY2tlZCwgbWFzayk7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmYmxvY2tlZCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAlzY2hlZHVsZSgpOwotCXNldF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKLQorCXNldF9yZXN0b3JlX3NpZ21hc2soKTsKIAlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCkBAIC0xNzIsMTggKzE3MCwxMSBAQAogCQlnb3RvIGJhZGZyYW1lOwogCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQuc2lnLCAmZnJhbWUtPnNjLm9sZG1hc2ssIF9TSUdNQVNLX0NPUFlfU0laRSkpCiAJCWdvdG8gYmFkZnJhbWU7Ci0KIAlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQljdXJyZW50LT5ibG9ja2VkID0gc2V0OwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQorCXNldF9jdXJyZW50X2Jsb2NrZWQoJnNldCk7CiAJaWYgKHJlc3RvcmVfc2lncmVncyhyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBiYWRmcmFtZTsKLQogCXJldHVybiByZWdzLT5ncHJzWzJdOwotCiBiYWRmcmFtZToKIAlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CiAJcmV0dXJuIDA7CkBAIC0xOTksMjEgKzE5MCwxNCBAQAogCQlnb3RvIGJhZGZyYW1lOwogCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQuc2lnLCAmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNpemVvZihzZXQpKSkKIAkJZ290byBiYWRmcmFtZTsKLQogCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmc2V0KTsKIAlpZiAocmVzdG9yZV9zaWdyZWdzKHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQpKQogCQlnb3RvIGJhZGZyYW1lOwotCiAJaWYgKGRvX3NpZ2FsdHN0YWNrKCZmcmFtZS0+dWMudWNfc3RhY2ssIE5VTEwsCiAJCQkgICByZWdzLT5ncHJzWzE1XSkgPT0gLUVGQVVMVCkKIAkJZ290byBiYWRmcmFtZTsKIAlyZXR1cm4gcmVncy0+Z3Byc1syXTsKLQogYmFkZnJhbWU6CiAJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwogCXJldHVybiAwOwpAQCAtMzg1LDE0ICszNjksMTEgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotLyoKLSAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKLSAqLwkKLQotc3RhdGljIGludAotaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKLQkgICAgICBzaWdpbmZvX3QgKmluZm8sIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3N0YXRpYyBpbnQgaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJCSBzaWdpbmZvX3QgKmluZm8sIHNpZ3NldF90ICpvbGRzZXQsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc2lnc2V0X3QgYmxvY2tlZDsKIAlpbnQgcmV0OwogCiAJLyogU2V0IHVwIHRoZSBzdGFjayBmcmFtZSAqLwpAQCAtNDAwLDE3ICszODEsMTMgQEAKIAkJcmV0ID0gc2V0dXBfcnRfZnJhbWUoc2lnLCBrYSwgaW5mbywgb2xkc2V0LCByZWdzKTsKIAllbHNlCiAJCXJldCA9IHNldHVwX2ZyYW1lKHNpZywga2EsIG9sZHNldCwgcmVncyk7Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOwotCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKLQkJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCxzaWcpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCX0KLQotCXJldHVybiByZXQ7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlzaWdvcnNldHMoJmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAma2EtPnNhLnNhX21hc2spOworCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQorCQlzaWdhZGRzZXQoJmJsb2NrZWQsIHNpZyk7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmYmxvY2tlZCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCBhNmQ4NWMwLi42YWIxNmFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTQ1MiwyMyArNDUyLDI3IEBACiAgKi8KIGludCBfX2NwdWluaXQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQgKmNwdXZvaWQpCiB7Ci0JLyogU2V0dXAgdGhlIGNwdSAqLwogCWNwdV9pbml0KCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JLyogRW5hYmxlIFRPRCBjbG9jayBpbnRlcnJ1cHRzIG9uIHRoZSBzZWNvbmRhcnkgY3B1LiAqLwogCWluaXRfY3B1X3RpbWVyKCk7Ci0JLyogRW5hYmxlIGNwdSB0aW1lciBpbnRlcnJ1cHRzIG9uIHRoZSBzZWNvbmRhcnkgY3B1LiAqLwogCWluaXRfY3B1X3Z0aW1lcigpOwotCS8qIEVuYWJsZSBwZmF1bHQgcHNldWRvIHBhZ2UgZmF1bHRzIG9uIHRoaXMgY3B1LiAqLwogCXBmYXVsdF9pbml0KCk7CiAKLQkvKiBjYWxsIGNwdSBub3RpZmllcnMgKi8KIAlub3RpZnlfY3B1X3N0YXJ0aW5nKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JLyogTWFyayB0aGlzIGNwdSBhcyBvbmxpbmUgKi8KIAlpcGlfY2FsbF9sb2NrKCk7CiAJc2V0X2NwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpLCB0cnVlKTsKIAlpcGlfY2FsbF91bmxvY2soKTsKLQkvKiBTd2l0Y2ggb24gaW50ZXJydXB0cyAqLworCV9fY3RsX2NsZWFyX2JpdCgwLCAyOCk7IC8qIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uICovCisJUzM5MF9sb3djb3JlLnJlc3RhcnRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOworCVMzOTBfbG93Y29yZS5yZXN0YXJ0X3Bzdy5hZGRyID0KKwkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgcHN3X3Jlc3RhcnRfaW50X2hhbmRsZXI7CisJX19jdGxfc2V0X2JpdCgwLCAyOCk7IC8qIEVuYWJsZSBsb3djb3JlIHByb3RlY3Rpb24gKi8KKwkvKgorCSAqIFdhaXQgdW50aWwgdGhlIGNwdSB3aGljaCBicm91Z2h0IHRoaXMgb25lIHVwIG1hcmtlZCBpdAorCSAqIGFjdGl2ZSBiZWZvcmUgZW5hYmxpbmcgaW50ZXJydXB0cy4KKwkgKi8KKwl3aGlsZSAoIWNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfYWN0aXZlX21hc2spKQorCQljcHVfcmVsYXgoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJLyogY3B1X2lkbGUgd2lsbCBjYWxsIHNjaGVkdWxlIGZvciB1cyAqLwogCWNwdV9pZGxlKCk7CkBAIC01MDcsNyArNTExLDExIEBACiAJbWVtc2V0KChjaGFyICopbG93Y29yZSArIDUxMiwgMCwgc2l6ZW9mKCpsb3djb3JlKSAtIDUxMik7CiAJbG93Y29yZS0+YXN5bmNfc3RhY2sgPSBhc3luY19zdGFjayArIEFTWU5DX1NJWkU7CiAJbG93Y29yZS0+cGFuaWNfc3RhY2sgPSBwYW5pY19zdGFjayArIFBBR0VfU0laRTsKLQorCWxvd2NvcmUtPnJlc3RhcnRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOworCWxvd2NvcmUtPnJlc3RhcnRfcHN3LmFkZHIgPQorCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSByZXN0YXJ0X2ludF9oYW5kbGVyOworCWlmICh1c2VyX21vZGUgIT0gSE9NRV9TUEFDRV9NT0RFKQorCQlsb3djb3JlLT5yZXN0YXJ0X3Bzdy5tYXNrIHw9IFBTV19BU0NfSE9NRTsKICNpZm5kZWYgQ09ORklHXzY0QklUCiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpIHsKIAkJdW5zaWduZWQgbG9uZyBzYXZlX2FyZWE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKaW5kZXggNmVlMzllZi4uNzNlYjA4YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMTc3LDcgKzE3Nyw3IEBACiBOSV9TWVNDQUxMCQkJCQkJCS8qIGZvciB2bTg2ICovCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG9sZCBzeXNfcXVlcnlfbW9kdWxlICovCiBTWVNDQUxMKHN5c19wb2xsLHN5c19wb2xsLHN5czMyX3BvbGxfd3JhcHBlcikKLVNZU0NBTEwoc3lzX25mc3NlcnZjdGwsc3lzX25mc3NlcnZjdGwsY29tcGF0X3N5c19uZnNzZXJ2Y3RsX3dyYXBwZXIpCitOSV9TWVNDQUxMCQkJCQkJCS8qIG9sZCBuZnNzZXJ2Y3RsICovCiBTWVNDQUxMKHN5c19zZXRyZXNnaWQxNixzeXNfbmlfc3lzY2FsbCxzeXMzMl9zZXRyZXNnaWQxNl93cmFwcGVyKQkvKiAxNzAgb2xkIHNldHJlc2dpZDE2IHN5c2NhbGwgKi8KIFNZU0NBTEwoc3lzX2dldHJlc2dpZDE2LHN5c19uaV9zeXNjYWxsLHN5czMyX2dldHJlc2dpZDE2X3dyYXBwZXIpCS8qIG9sZCBnZXRyZXNnaWQxNiBzeXNjYWxsICovCiBTWVNDQUxMKHN5c19wcmN0bCxzeXNfcHJjdGwsc3lzMzJfcHJjdGxfd3JhcHBlcikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMgYi9hcmNoL3MzOTAvbW0vbWFjY2Vzcy5jCmluZGV4IDUxZTVjZDkuLjVkYmJhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9tYWNjZXNzLmMKKysrIGIvYXJjaC9zMzkwL21tL21hY2Nlc3MuYwpAQCAtODUsMyArODUsMTkgQEAKIAlhcmNoX2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CisKKy8qCisgKiBDb3B5IG1lbW9yeSB0byBhYnNvbHV0ZSB6ZXJvCisgKi8KK3ZvaWQgY29weV90b19hYnNvbHV0ZV96ZXJvKHZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgY3IwOworCisJQlVHX09OKCh1bnNpZ25lZCBsb25nKSBkZXN0ICsgY291bnQgPj0gc2l6ZW9mKHN0cnVjdCBfbG93Y29yZSkpOworCXByZWVtcHRfZGlzYWJsZSgpOworCV9fY3RsX3N0b3JlKGNyMCwgMCwgMCk7CisJX19jdGxfY2xlYXJfYml0KDAsIDI4KTsgLyogZGlzYWJsZSBsb3djb3JlIHByb3RlY3Rpb24gKi8KKwltZW1jcHlfcmVhbChkZXN0ICsgc3RvcmVfcHJlZml4KCksIHNyYywgY291bnQpOworCV9fY3RsX2xvYWQoY3IwLCAwLCAwKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggMmFkYjIzOS4uNGQxZjJiYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC01MjgsNiArNTI4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJCSAgICB1bnNpZ25lZCBsb25nIHZtYWRkcikKIHsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh1bnNpZ25lZCBsb25nICp0YWJsZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCA3NDhmZjE5Li5mZjkxNzdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfSVJRX1dPUksKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiAoR1VTQV9SQiB8fCBDUFVfU0g0QSkKIAlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQwogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBlM2Q4MTcwLi45OTM4NWQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTE3Myw2ICsxNzMsNyBAQAogY3B1aW5jZGlyLSQoQ09ORklHX0NQVV9TSDJBKQkrPSBjcHUtc2gyYQogY3B1aW5jZGlyLSQoQ09ORklHX0NQVV9TSDIpCSs9IGNwdS1zaDIKIGNwdWluY2Rpci0kKENPTkZJR19DUFVfU0gzKQkrPSBjcHUtc2gzCitjcHVpbmNkaXItJChDT05GSUdfQ1BVX1NINEEpCSs9IGNwdS1zaDRhCiBjcHVpbmNkaXItJChDT05GSUdfQ1BVX1NINCkJKz0gY3B1LXNoNAogY3B1aW5jZGlyLSQoQ09ORklHX0NQVV9TSDUpCSs9IGNwdS1zaDUKIGNwdWluY2Rpci15CQkJKz0gY3B1LWNvbW1vbgkjIE11c3QgYmUgbGFzdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXBzaDRhM2EuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwc2g0YTNhLmMKaW5kZXggOGUyYTI3MC4uMjgyMzYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXBzaDRhM2EuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcHNoNGEzYS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlpbnQgcmV0OwogCiAJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwlpZiAoSVNfRVJSKGNsaykpCiAJCXJldHVybiBQVFJfRVJSKGNsayk7CiAJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMwMDApOwogCWNsa19wdXQoY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwc2g0YWQwYS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXBzaDRhZDBhLmMKaW5kZXggZTJiZDIxOC4uYjRkNjI5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXBzaDRhZDBhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXBzaDRhZDBhLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAlpbnQgcmV0OwogCiAJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwlpZiAoSVNfRVJSKGNsaykpCiAJCXJldHVybiBQVFJfRVJSKGNsayk7CiAJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMwMDApOwogCWNsa19wdXQoY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKaW5kZXggZWU2NWZmMC4uZDg3OTg0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKQEAgLTI5OSw3ICsyOTksNyBAQAogCWludCByZXQ7CiAKIAljbGsgPSBjbGtfZ2V0KE5VTEwsICJleHRhbCIpOwotCWlmICghY2xrIHx8IElTX0VSUihjbGspKQorCWlmIChJU19FUlIoY2xrKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKIAlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLCAzMzMzMzMzMyk7CiAJY2xrX3B1dChjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCmluZGV4IGQ4MWM2MDkuLjI0ZTMzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7Ci0JaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJaWYgKElTX0VSUihjbGspKQogCQlyZXR1cm4gUFRSX0VSUihjbGspOwogCXJldCA9IGNsa19zZXRfcmF0ZShjbGssIDMzMzMzMzMzKTsKIAljbGtfcHV0KGNsayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKaW5kZXggMWRjOTI0Yi4uZDM2MjY1NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwpAQCAtMzMyLDggKzMzMiw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhcDMyNXJ4YV9jYW1lcmFfYWRkKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwgc3RydWN0IGRldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKTsKK3N0YXRpYyBpbnQgYXAzMjVyeGFfY2FtZXJhX2FkZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CitzdGF0aWMgdm9pZCBhcDMyNXJ4YV9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gY2FtZXJhX2luZm8gPSB7CiAJLmZvcm1hdF9uYW1lID0gIlVZVlkiLApAQCAtMzY2LDI0ICszNjYsMjMgQEAKIAlzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UoJmNhbWVyYV9kZXZpY2UpOwogfQogCi1zdGF0aWMgaW50IGFwMzI1cnhhX2NhbWVyYV9hZGQoc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXAzMjVyeGFfY2FtZXJhX2FkZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlpbnQgcmV0ID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9hZGQoaWNsLCBkZXYsICZjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmssCisJaW50IHJldCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fYWRkKGljZCwgJmNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluaywKIAkJCQkJICBhcDMyNXJ4YV9jYW1lcmFfcmVsZWFzZSwgMCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBjYW1lcmFfcHJvYmUoKTsKIAlpZiAocmV0IDwgMCkKLQkJc29jX2NhbWVyYV9wbGF0Zm9ybV9kZWwoaWNsLCBjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmspOworCQlzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChpY2QsIGNhbWVyYV9kZXZpY2UsICZjYW1lcmFfbGluayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBhcDMyNXJ4YV9jYW1lcmFfZGVsKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKK3N0YXRpYyB2b2lkIGFwMzI1cnhhX2NhbWVyYV9kZWwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc29jX2NhbWVyYV9wbGF0Zm9ybV9kZWwoaWNsLCBjYW1lcmFfZGV2aWNlLCAmY2FtZXJhX2xpbmspOworCXNvY19jYW1lcmFfcGxhdGZvcm1fZGVsKGljZCwgY2FtZXJhX2RldmljZSwgJmNhbWVyYV9saW5rKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfSTJDICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKaW5kZXggODc2MThjOS4uNzRiOGRiMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKQEAgLTMzNSw4ICszMzUsNiBAQAogCSZpdmRyX2NsaywKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgiaXZkcl9jbGsiLCAmaXZkcl9jbGspLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwppbmRleCAxNTIxYWE3Li40ODZkMWFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2xrID0gY2xrX2dldChOVUxMLCAiZXh0YWwiKTsKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwlpZiAoSVNfRVJSKGNsaykpCiAJCXJldHVybiBQVFJfRVJSKGNsayk7CiAJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOwogCWNsa19wdXQoY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWNheW1hbi5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtY2F5bWFuLmMKaW5kZXggYjY4YjYxZC4uZWRjMmZiNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtY2F5bWFuLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtY2F5bWFuLmMKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8Y3B1L2lycS5oPgogI2luY2x1ZGUgInBjaS1zaDUuaCIKIAotaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoraW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCByZXN1bHQgPSAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwppbmRleCA5NDJlZjRmLi5lZGVlYTg5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwpAQCAtNjQsNyArNjQsNyBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGdhcHNwY2lfZml4dXBfcmVzb3VyY2VzKTsKIAotaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoraW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCS8qCiAJICogVGhlIGludGVycnVwdCByb3V0aW5nIHNlbWFudGljcyBoZXJlIGFyZSBxdWl0ZSB0cml2aWFsLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtbGFuZGlzay5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtbGFuZGlzay5jCmluZGV4IDk1YzZlMmQuLmVjYjFkMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWxhbmRpc2suYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1sYW5kaXNrLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgUENJTUNSX01SU0VUX09GRgkweEJGRkZGRkZGCiAjZGVmaW5lIFBDSU1DUl9SRlNIX09GRgkJMHhGRkZGRkZGQgogCi1pbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJLyoKIAkgKiBzbG90MDogcGluMS00ID0gaXJxNSw2LDcsOApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCmluZGV4IDA4YjJkODYuLmY5MzcwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAk2NSwgNjYsIDY3LCA2OCwKIH07CiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQogewogCXJldHVybiBpcnFfdGFiW3Nsb3RdOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCmluZGV4IGUyNDg1MTYuLmVhZGRiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlJUlFfRVRIMCwgSVJRX0VUSDEsIElSUV9JTlRBLCBJUlFfSU5URCwKIH07CiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQogewogCWlmIChtYWNoX2lzX2xib3hyZTIoKSkKIAkJcmV0dXJuIGxib3hyZTJfaXJxX3RhYltzbG90XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYwppbmRleCAwOTMwZjk4Li4wYjg0NzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCkBAIC0yNyw3ICsyNyw3IEBACiAJeyA2OCwgNjcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSB9LAogfTsKIAotaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAgICAgICAgcmV0dXJuIHNkazc3ODBfaXJxX3RhYltwaW4tMV1bc2xvdF07CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCmluZGV4IGZkM2U2YjAuLjJlYzE0NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNlNzc1MS5jCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqLCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqLCB1OCBzbG90LCB1OCBwaW4pCiB7CiAgICAgICAgIHN3aXRjaCAoc2xvdCkgewogICAgICAgICBjYXNlIDA6IHJldHVybiAxMzsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNoMDMuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNoMDMuYwppbmRleCAyZThhMThiLi4xNjE1ZTU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zaDAzLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2gwMy5jCkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zbmFwZ2Vhci5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc25hcGdlYXIuYwppbmRleCA1YTM5ZWNjLi40YTA5M2M2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zbmFwZ2Vhci5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNuYXBnZWFyLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnEgPSAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtdGl0YW4uYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXRpdGFuLmMKaW5kZXggM2E3OWZhOC4uYmQxYWRkYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtdGl0YW4uYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy10aXRhbi5jCkBAIC0yNyw3ICsyNyw3IEBACiAJVElUQU5fSVJRX1VTQiwKIH07CiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnEgPSB0aXRhbl9pcnFfdGFiW3Nsb3RdOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKaW5kZXggNDQxOGY5MC4uNGRmMjdjNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQoraW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKICAgICAgICAgcmV0dXJuIDcxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggZjBlZmU5Ny4uY2IyMWUyMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xMTIsNyArMTEyLDcgQEAKICNlbmRpZgogCiAvKiBCb2FyZC1zcGVjaWZpYyBmaXh1cCByb3V0aW5lcy4gKi8KLWludCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKK2ludCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKIAogZXh0ZXJuIHZvaWQgcGNpYmlvc19yZXNvdXJjZV90b19idXMoc3RydWN0IHBjaV9kZXYgKmRldiwKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwgc3RydWN0IHJlc291cmNlICpyZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggYjk3YmFmOC4uMmQzNjc5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMjMsNyArMTIzLDcgQEAKIHN0cnVjdCBwZXJmX2V2ZW50Owogc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CiAKLWV4dGVybiB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorZXh0ZXJuIHZvaWQgcHRyYWNlX3RyaWdnZXJlZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsCiAJCSAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9zZXJpYWwuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzY2MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NlcmlhbC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX19DUFVfU0gzX1NFUklBTF9ICisjZGVmaW5lIF9fQ1BVX1NIM19TRVJJQUxfSAorCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorCitleHRlcm4gc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHNoNzcweF9zY2lfcG9ydF9vcHM7CitleHRlcm4gc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHNoNzcxMF9zY2lfcG9ydF9vcHM7CitleHRlcm4gc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHNoNzcyMF9zY2lfcG9ydF9vcHM7CisKKyNlbmRpZiAvKiBfX0NQVV9TSDNfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0YS9jcHUvc2VyaWFsLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNGEvY3B1L3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMWJjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNGEvY3B1L3NlcmlhbC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0NQVV9TSDRBX1NFUklBTF9ICisjZGVmaW5lIF9fQ1BVX1NINEFfU0VSSUFMX0gKKworLyogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2VyaWFsLXNoNzcyMi5jICovCitleHRlcm4gc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHNoNzcyMl9zY2lfcG9ydF9vcHM7CisKKyNlbmRpZiAvKiBfX0NQVV9TSDRBX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKaW5kZXggOGY2M2EyNi4uZjU5YjFmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwpAQCAtMzUsOCArMzUsNiBAQAogCSZjcHVfY2xrLAogfTsKIAotI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJtYXN0ZXJfY2xrIiwgJm1hc3Rlcl9jbGspLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKaW5kZXggZWNhYjI3NC4uNmYxM2YzMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCkBAIC03LDE1ICs3LDE1IEBACiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSBzd3N1c3AubwogCiAjIENQVSBzdWJ0eXBlIHNldHVwCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQkrPSBzZXR1cC1zaDc3MDUubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikJKz0gc2V0dXAtc2g3NzB4Lm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpCSs9IHNldHVwLXNoNzcweC5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4KQkrPSBzZXR1cC1zaDc3MHgubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkJKz0gc2V0dXAtc2g3NzB4Lm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCSs9IHNldHVwLXNoNzcxMC5vCi1vYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQkrPSBzZXR1cC1zaDc3MTAubwotb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkJKz0gc2V0dXAtc2g3NzIwLm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCSs9IHNldHVwLXNoNzcyMC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQkrPSBzZXR1cC1zaDc3MDUubyBzZXJpYWwtc2g3NzB4Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpCSs9IHNldHVwLXNoNzcweC5vIHNlcmlhbC1zaDc3MHgubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykJKz0gc2V0dXAtc2g3NzB4Lm8gc2VyaWFsLXNoNzcweC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4KQkrPSBzZXR1cC1zaDc3MHgubyBzZXJpYWwtc2g3NzB4Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCSs9IHNldHVwLXNoNzcweC5vIHNlcmlhbC1zaDc3MHgubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkJKz0gc2V0dXAtc2g3NzEwLm8gc2VyaWFsLXNoNzcxMC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQkrPSBzZXR1cC1zaDc3MTAubyBzZXJpYWwtc2g3NzEwLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApCSs9IHNldHVwLXNoNzcyMC5vIHNlcmlhbC1zaDc3MjAubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkJKz0gc2V0dXAtc2g3NzIwLm8gc2VyaWFsLXNoNzcyMC5vCiAKICMgUHJpbWFyeSBvbi1jaGlwIGNsb2NrcyAoY29tbW9uKQogY2xvY2stJChDT05GSUdfQ1BVX1NIMykJCQk6PSBjbG9jay1zaDMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXJpYWwtc2g3NzB4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NlcmlhbC1zaDc3MHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjcyNDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXJpYWwtc2g3NzB4LmMKQEAgLTAsMCArMSwzMyBAQAorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8Y3B1L3NlcmlhbC5oPgorCisjZGVmaW5lIFNDUENSIDB4QTQwMDAxMTYKKyNkZWZpbmUgU0NQRFIgMHhBNDAwMDEzNgorCitzdGF0aWMgdm9pZCBzaDc3MHhfc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCit7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsKKworCS8qIFdlIG5lZWQgdG8gc2V0IFNDUENSIHRvIGVuYWJsZSBSVFMvQ1RTICovCisJZGF0YSA9IF9fcmF3X3JlYWR3KFNDUENSKTsKKwkvKiBDbGVhciBvdXQgU0NQN01EMSwwLCBTQ1A2TUQxLDAsIFNDUDRNRDEsMCovCisJX19yYXdfd3JpdGV3KGRhdGEgJiAweDBmY2YsIFNDUENSKTsKKworCWlmICghKGNmbGFnICYgQ1JUU0NUUykpIHsKKwkJLyogV2UgbmVlZCB0byBzZXQgU0NQQ1IgdG8gZW5hYmxlIFJUUy9DVFMgKi8KKwkJZGF0YSA9IF9fcmF3X3JlYWR3KFNDUENSKTsKKwkJLyogQ2xlYXIgb3V0IFNDUDdNRDEsMCwgU0NQNE1EMSwwLAorCQkgICBTZXQgU0NQNk1EMSwwID0gezAxfSAob3V0cHV0KSAgKi8KKwkJX19yYXdfd3JpdGV3KChkYXRhICYgMHgwZmNmKSB8IDB4MTAwMCwgU0NQQ1IpOworCisJCWRhdGEgPSBfX3Jhd19yZWFkYihTQ1BEUik7CisJCS8qIFNldCAvUlRTMiAoYml0NikgPSAwICovCisJCV9fcmF3X3dyaXRlYihkYXRhICYgMHhiZiwgU0NQRFIpOworCX0KK30KKworc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHNoNzcweF9zY2lfcG9ydF9vcHMgPSB7CisJLmluaXRfcGlucwk9IHNoNzcweF9zY2lfaW5pdF9waW5zLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2VyaWFsLXNoNzcxMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXJpYWwtc2g3NzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxOTBlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2VyaWFsLXNoNzcxMC5jCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGNwdS9zZXJpYWwuaD4KKworI2RlZmluZSBQQUNSIDB4YTQwNTAxMDAKKyNkZWZpbmUgUEJDUiAweGE0MDUwMTAyCisKK3N0YXRpYyB2b2lkIHNoNzcxMF9zY2lfaW5pdF9waW5zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKK3sKKwlpZiAocG9ydC0+bWFwYmFzZSA9PSAweEE0NDAwMDAwKSB7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQUNSKSAmIDB4ZmZjMCwgUEFDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQkNSKSAmIDB4MGZmZiwgUEJDUik7CisJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IDB4QTQ0MTAwMDApCisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQkNSKSAmIDB4ZjAwMywgUEJDUik7Cit9CisKK3N0cnVjdCBwbGF0X3NjaV9wb3J0X29wcyBzaDc3MTBfc2NpX3BvcnRfb3BzID0geworCS5pbml0X3BpbnMJPSBzaDc3MTBfc2NpX2luaXRfcGlucywKK307CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NlcmlhbC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2VyaWFsLXNoNzcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzJjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NlcmlhbC1zaDc3MjAuYwpAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworc3RhdGljIHZvaWQgc2g3NzIwX3NjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQoreworCXVuc2lnbmVkIHNob3J0IGRhdGE7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCS8qIGVuYWJsZSBSVFMvQ1RTICovCisJCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzAwMDApIHsgLyogU0NJRjAgKi8KKwkJCS8qIENsZWFyIFBUQ1IgYml0IDktMjsgZW5hYmxlIGFsbCBzY2lmIHBpbnMgYnV0IHNjayAqLworCQkJZGF0YSA9IF9fcmF3X3JlYWR3KFBPUlRfUFRDUik7CisJCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweGZjMDMpLCBQT1JUX1BUQ1IpOworCQl9IGVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDQzODAwMCkgeyAvKiBTQ0lGMSAqLworCQkJLyogQ2xlYXIgUFZDUiBiaXQgOS0yICovCisJCQlkYXRhID0gX19yYXdfcmVhZHcoUE9SVF9QVkNSKTsKKwkJCV9fcmF3X3dyaXRldygoZGF0YSAmIDB4ZmMwMyksIFBPUlRfUFZDUik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0NDMwMDAwKSB7IC8qIFNDSUYwICovCisJCQkvKiBDbGVhciBQVENSIGJpdCA1LTI7IGVuYWJsZSBvbmx5IHR4IGFuZCByeCAgKi8KKwkJCWRhdGEgPSBfX3Jhd19yZWFkdyhQT1JUX1BUQ1IpOworCQkJX19yYXdfd3JpdGV3KChkYXRhICYgMHhmZmMzKSwgUE9SVF9QVENSKTsKKwkJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzgwMDApIHsgLyogU0NJRjEgKi8KKwkJCS8qIENsZWFyIFBWQ1IgYml0IDUtMiAqLworCQkJZGF0YSA9IF9fcmF3X3JlYWR3KFBPUlRfUFZDUik7CisJCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweGZmYzMpLCBQT1JUX1BWQ1IpOworCQl9CisJfQorfQorCitzdHJ1Y3QgcGxhdF9zY2lfcG9ydF9vcHMgc2g3NzIwX3NjaV9wb3J0X29wcyA9IHsKKwkuaW5pdF9waW5zCT0gc2g3NzIwX3NjaV9pbml0X3BpbnMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKaW5kZXggY2QyZTcwMi4uMjMwOTYxOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGNwdS9zZXJpYWwuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTc1LDYgKzc2LDggQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA1NiwgNTYsIDU2IH0sCisJLm9wcwkJPSAmc2g3NzB4X3NjaV9wb3J0X29wcywKKwkucmVndHlwZQk9IFNDSXhfU0g3NzA1X1NDSUZfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTkyLDYgKzk1LDggQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA1MiwgNTIsIDUyIH0sCisJLm9wcwkJPSAmc2g3NzB4X3NjaV9wb3J0X29wcywKKwkucmVndHlwZQk9IFNDSXhfU0g3NzA1X1NDSUZfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCmluZGV4IDQ1NTFhZDYuLjNmM2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPGNwdS9zZXJpYWwuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTEwOCwxMSArMTA5LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKKwkucG9ydF9yZWcJPSAweGE0MDAwMTM2LAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfVEUgfCBTQ1NDUl9SRSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZQkJPSBQT1JUX1NDSSwKIAkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKKwkub3BzCQk9ICZzaDc3MHhfc2NpX3BvcnRfb3BzLAorCS5yZWdzaGlmdAk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CkBAIC0xMzIsNiArMTM2LDggQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA1NiwgNTYsIDU2LCA1NiB9LAorCS5vcHMJCT0gJnNoNzcweF9zY2lfcG9ydF9vcHMsCisJLnJlZ3R5cGUJPSBTQ0l4X1NIM19TQ0lGX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CkBAIC0xNDYsMTEgKzE1MiwxNCBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhhNDAwMDE0MCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9URSB8IFNDU0NSX1JFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlCQk9IFBPUlRfSVJEQSwKIAkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCisJLm9wcwkJPSAmc2g3NzB4X3NjaV9wb3J0X29wcywKKwkucmVnc2hpZnQJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKaW5kZXggMzY1Yjk0YTYuLjk0OTIwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxjcHUvc2VyaWFsLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTU1LDYgKzU2LDggQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAorCS5vcHMJCT0gJnNoNzcyMF9zY2lfcG9ydF9vcHMsCisJLnJlZ3R5cGUJPSBTQ0l4X1NINzcwNV9TQ0lGX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CkBAIC03Miw2ICs3NSw4IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzQsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKKwkub3BzCQk9ICZzaDc3MjBfc2NpX3BvcnRfb3BzLAorCS5yZWd0eXBlCT0gU0NJeF9TSDc3MDVfU0NJRl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwppbmRleCAzZjZmOGU5Li5mNGUyNjJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpAQCAtMTQ3LDggKzE0Nyw2IEBACiAJJnNoNDIwMl9zaG9jX2NsaywKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgiZW1pX2NsayIsICZzaDQyMDJfZW1pX2NsayksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBlNTNiNGIzLi45OGNjMGM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogU0g3NzUwL1NINzc1MSBTZXR1cAorICogU0g3MDkxL1NINzc1MC9TSDc3NTBTL1NINzc1MFIvU0g3NzUxL1NINzc1MVIgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBKYW1pZSBMZW5laGFuCkBAIC0zOCwxMSArMzgsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkucG9ydF9yZWcJPSAweGZmZTAwMDFDLAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfVEUgfCBTQ1NDUl9SRSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZQkJPSBQT1JUX1NDSSwKIAkuaXJxcwkJPSB7IDIzLCAyMywgMjMsIDAgfSwKKwkucmVnc2hpZnQJPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDc4YmJmMjMuLmMwYjRjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMTMzLDYgKzEzMyw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzIsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTE1MCw2ICsxNTEsNyBAQAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFIHwgU0NTQ1JfUkVJRSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkuaXJxcwkJPSB7IDcyLCA3MywgNzUsIDc0IH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CkBAIC0xNjcsNiArMTY5LDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpAQCAtMTg0LDYgKzE4Nyw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzIsCiAJLnR5cGUJCT0gUE9SVF9TQ0ksCiAJLmlycXMJCT0geyA4MCwgODEsIDgyLCAwIH0sCisJLnJlZ3NoaWZ0CT0gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKaW5kZXggY2MxMjJiMS4uYzU3ZmIyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDcgQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHNldHVwLXNoNzc4NS5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQkrPSBzZXR1cC1zaDc3ODYubyBpbnRjLXNoeDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCSs9IHNldHVwLXNoNzcyMi5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQkrPSBzZXR1cC1zaDc3MjIubyBzZXJpYWwtc2g3NzIyLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCSs9IHNldHVwLXNoNzcyMy5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQkrPSBzZXR1cC1zaDc3MjQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NikJKz0gc2V0dXAtc2g3MzY2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKaW5kZXggOTNjNjQ2MC4uNzBlNDViZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTE5NCw4ICsxOTQsNiBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBNU1RQQ1IyLCAwLCAwKSwKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgicmNsayIsICZyX2NsayksCkBAIC0yMzMsMzIgKzIzMSwxNyBAQAogCUNMS0RFVl9DT05fSUQoInJ3ZHQwIiwgJm1zdHBfY2xrc1tNU1RQMDEzXSksCiAJQ0xLREVWX0NPTl9JRCgibWZpMCIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAogCUNMS0RFVl9DT05fSUQoImZsY3RsMCIsICZtc3RwX2Nsa3NbTVNUUDAxMF0pLAotCXsKLQkJLyogU0NJRjAgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjAiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDddLAotCX0sIHsKLQkJLyogU0NJRjEgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjEiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDZdLAotCX0sIHsKLQkJLyogU0NJRjIgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjIiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDVdLAotCX0sIHsKLQkJLyogU0NJRjMgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjMiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDRdLAotCX0sCisKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQMDA3XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDAwNl0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjIiLCAmbXN0cF9jbGtzW01TVFAwMDVdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4zIiwgJm1zdHBfY2xrc1tNU1RQMDA0XSksCisKIAlDTEtERVZfQ09OX0lEKCJzaW8wIiwgJm1zdHBfY2xrc1tNU1RQMDAzXSksCiAJQ0xLREVWX0NPTl9JRCgic2lvZjAiLCAmbXN0cF9jbGtzW01TVFAwMDJdKSwKIAlDTEtERVZfQ09OX0lEKCJzaW9mMSIsICZtc3RwX2Nsa3NbTVNUUDAwMV0pLAotCUNMS0RFVl9DT05fSUQoImkyYzAiLCAmbXN0cF9jbGtzW01TVFAxMDldKSwKLQlDTEtERVZfQ09OX0lEKCJpMmMxIiwgJm1zdHBfY2xrc1tNU1RQMTA4XSksCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTA5XSksCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMTA4XSksCiAJQ0xLREVWX0NPTl9JRCgidHB1MCIsICZtc3RwX2Nsa3NbTVNUUDIyNV0pLAogCUNMS0RFVl9DT05fSUQoImlyZGEwIiwgJm1zdHBfY2xrc1tNU1RQMjI0XSksCiAJQ0xLREVWX0NPTl9JRCgic2RoaTAiLCAmbXN0cF9jbGtzW01TVFAyMThdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKaW5kZXggMDQ5ZGMwNi4uM2MzMTY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKQEAgLTE5Miw4ICsxOTIsNiBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBNU1RQQ1IyLCAwLCAwKSwKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgicmNsayIsICZyX2NsayksCkBAIC0yMzEsMjUgKzIyOSwxNCBAQAogCUNMS0RFVl9DT05fSUQoInJ3ZHQwIiwgJm1zdHBfY2xrc1tNU1RQMDEzXSksCiAJQ0xLREVWX0NPTl9JRCgibWZpMCIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAogCUNMS0RFVl9DT05fSUQoImZsY3RsMCIsICZtc3RwX2Nsa3NbTVNUUDAxMF0pLAotCXsKLQkJLyogU0NJRjAgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjAiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDddLAotCX0sIHsKLQkJLyogU0NJRjEgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjEiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDZdLAotCX0sIHsKLQkJLyogU0NJRjIgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjIiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDVdLAotCX0sCisKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQMDA3XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDAwNl0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjIiLCAmbXN0cF9jbGtzW01TVFAwMDVdKSwKKwogCUNMS0RFVl9DT05fSUQoIm1zaW9mMCIsICZtc3RwX2Nsa3NbTVNUUDAwMl0pLAogCUNMS0RFVl9DT05fSUQoInNicjAiLCAmbXN0cF9jbGtzW01TVFAwMDFdKSwKLQlDTEtERVZfQ09OX0lEKCJpMmMwIiwgJm1zdHBfY2xrc1tNU1RQMTA5XSksCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTA5XSksCiAJQ0xLREVWX0NPTl9JRCgiaWNiMCIsICZtc3RwX2Nsa3NbTVNUUDIyN10pLAogCUNMS0RFVl9DT05fSUQoIm1lcmFtMCIsICZtc3RwX2Nsa3NbTVNUUDIyNl0pLAogCUNMS0RFVl9DT05fSUQoImRhY3kxIiwgJm1zdHBfY2xrc1tNU1RQMjI0XSksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCmluZGV4IDlkMjNhMzYuLmM5YTQ4MDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jCkBAIC0xNzUsOCArMTc1LDYgQEAKIAlTSF9IV0JMS19DTEsoSFdCTEtfTENEQywgJmRpdjRfY2xrc1tESVY0X1BdLCAwKSwKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgicmNsayIsICZyX2NsayksCkBAIC0yMDEsNDIgKzE5OSwyMCBAQAogCS8qIE1TVFAgY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgidXJhbTAiLCAmbXN0cF9jbGtzW0hXQkxLX1VSQU1dKSwKIAlDTEtERVZfQ09OX0lEKCJ4eW1lbTAiLCAmbXN0cF9jbGtzW0hXQkxLX1hZTUVNXSksCi0JewotCQkvKiBUTVUwICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4wIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19UTVVdLAotCX0sIHsKLQkJLyogVE1VMSAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfVE1VXSwKLQl9LCB7Ci0JCS8qIFRNVTIgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjIiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1RNVV0sCi0JfSwKKworCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjAiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVV0pLAorCiAJQ0xLREVWX0NPTl9JRCgiY210X2ZjayIsICZtc3RwX2Nsa3NbSFdCTEtfQ01UXSksCiAJQ0xLREVWX0NPTl9JRCgicndkdDAiLCAmbXN0cF9jbGtzW0hXQkxLX1JXRFRdKSwKIAlDTEtERVZfQ09OX0lEKCJmbGN0bDAiLCAmbXN0cF9jbGtzW0hXQkxLX0ZMQ1RMXSksCi0JewotCQkvKiBTQ0lGMCAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMCIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjBdLAotCX0sIHsKLQkJLyogU0NJRjEgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjEiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1NDSUYxXSwKLQl9LCB7Ci0JCS8qIFNDSUYyICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4yIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19TQ0lGMl0sCi0JfSwKLQlDTEtERVZfQ09OX0lEKCJpMmMwIiwgJm1zdHBfY2xrc1tIV0JMS19JSUNdKSwKKworCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjAiLCAmbXN0cF9jbGtzW0hXQkxLX1NDSUYwXSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjFdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4yIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGMl0pLAorCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tIV0JMS19JSUNdKSwKIAlDTEtERVZfQ09OX0lEKCJydGMwIiwgJm1zdHBfY2xrc1tIV0JMS19SVENdKSwKIAlDTEtERVZfQ09OX0lEKCJzZGhpMCIsICZtc3RwX2Nsa3NbSFdCTEtfU0RISV0pLAogCUNMS0RFVl9DT05fSUQoImtleXNjMCIsICZtc3RwX2Nsa3NbSFdCTEtfS0VZU0NdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKaW5kZXggNTU0OTNjZC4uM2NjMzgyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKQEAgLTIwMCw4ICsyMDAsNiBAQAogCVNIX0hXQkxLX0NMSyhIV0JMS19MQ0RDLCAmZGl2NF9jbGtzW0RJVjRfQl0sIDApLAogfTsKIAotI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyY2xrIiwgJnJfY2xrKSwKQEAgLTMwNSw3ICszMDMsNyBAQAogCUNMS0RFVl9DT05fSUQoIm1zaW9mMCIsICZtc3RwX2Nsa3NbSFdCTEtfTVNJT0YwXSksCiAJQ0xLREVWX0NPTl9JRCgibXNpb2YxIiwgJm1zdHBfY2xrc1tIV0JMS19NU0lPRjFdKSwKIAlDTEtERVZfQ09OX0lEKCJtZXJhbTAiLCAmbXN0cF9jbGtzW0hXQkxLX01FUkFNXSksCi0JQ0xLREVWX0NPTl9JRCgiaTJjMCIsICZtc3RwX2Nsa3NbSFdCTEtfSUlDXSksCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tIV0JMS19JSUNdKSwKIAlDTEtERVZfQ09OX0lEKCJydGMwIiwgJm1zdHBfY2xrc1tIV0JMS19SVENdKSwKIAlDTEtERVZfQ09OX0lEKCJhdGFwaTAiLCAmbXN0cF9jbGtzW0hXQkxLX0FUQVBJXSksCiAJQ0xLREVWX0NPTl9JRCgiYWRjMCIsICZtc3RwX2Nsa3NbSFdCTEtfQURDXSksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jCmluZGV4IGQwOGZhOTUuLjg2NjhmNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jCkBAIC0yNTIsOCArMjUyLDYgQEAKIAlTSF9IV0JMS19DTEsoSFdCTEtfTENEQywgJmRpdjRfY2xrc1tESVY0X0JdLCAwKSwKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgicmNsayIsICZyX2NsayksCkBAIC0yODksNzcgKzI4NywzMSBAQAogCUNMS0RFVl9DT05fSUQoInNoMCIsICZtc3RwX2Nsa3NbSFdCTEtfU0hZV0FZXSksCiAJQ0xLREVWX0NPTl9JRCgiaHVkaTAiLCAmbXN0cF9jbGtzW0hXQkxLX0hVREldKSwKIAlDTEtERVZfQ09OX0lEKCJ1YmMwIiwgJm1zdHBfY2xrc1tIV0JMS19VQkNdKSwKLQl7Ci0JCS8qIFRNVTAgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjAiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdLAotCX0sIHsKLQkJLyogVE1VMSAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfVE1VMF0sCi0JfSwgewotCQkvKiBUTVUyICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4yIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19UTVUwXSwKLQl9LCB7Ci0JCS8qIFRNVTMgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjMiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdLAotCX0sCisKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tIV0JMS19UTVUwXSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMSIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMF0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTBdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4zIiwgJm1zdHBfY2xrc1tIV0JMS19UTVUxXSksCisKIAlDTEtERVZfQ09OX0lEKCJjbXRfZmNrIiwgJm1zdHBfY2xrc1tIV0JMS19DTVRdKSwKIAlDTEtERVZfQ09OX0lEKCJyd2R0MCIsICZtc3RwX2Nsa3NbSFdCTEtfUldEVF0pLAogCUNMS0RFVl9DT05fSUQoImRtYWMxIiwgJm1zdHBfY2xrc1tIV0JMS19ETUFDMV0pLAotCXsKLQkJLyogVE1VNCAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuNCIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfVE1VMV0sCi0JfSwgewotCQkvKiBUTVU1ICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS41IiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19UTVUxXSwKLQl9LCB7Ci0JCS8qIFNDSUYwICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4wIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19TQ0lGMF0sCi0JfSwgewotCQkvKiBTQ0lGMSAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMSIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjFdLAotCX0sIHsKLQkJLyogU0NJRjIgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjIiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1NDSUYyXSwKLQl9LCB7Ci0JCS8qIFNDSUYzICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4zIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tIV0JMS19TQ0lGM10sCi0JfSwgewotCQkvKiBTQ0lGNCAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuNCIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjRdLAotCX0sIHsKLQkJLyogU0NJRjUgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjUiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW0hXQkxLX1NDSUY1XSwKLQl9LAorCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNCIsICZtc3RwX2Nsa3NbSFdCTEtfVE1VMV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjUiLCAmbXN0cF9jbGtzW0hXQkxLX1RNVTFdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGMF0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjEiLCAmbXN0cF9jbGtzW0hXQkxLX1NDSUYxXSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjJdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4zIiwgJm1zdHBfY2xrc1tIV0JMS19TQ0lGM10pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjQiLCAmbXN0cF9jbGtzW0hXQkxLX1NDSUY0XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbSFdCTEtfU0NJRjVdKSwKKwogCUNMS0RFVl9DT05fSUQoIm1zaW9mMCIsICZtc3RwX2Nsa3NbSFdCTEtfTVNJT0YwXSksCiAJQ0xLREVWX0NPTl9JRCgibXNpb2YxIiwgJm1zdHBfY2xrc1tIV0JMS19NU0lPRjFdKSwKIAlDTEtERVZfQ09OX0lEKCJrZXlzYzAiLCAmbXN0cF9jbGtzW0hXQkxLX0tFWVNDXSksCiAJQ0xLREVWX0NPTl9JRCgicnRjMCIsICZtc3RwX2Nsa3NbSFdCTEtfUlRDXSksCi0JQ0xLREVWX0NPTl9JRCgiaTJjMCIsICZtc3RwX2Nsa3NbSFdCTEtfSUlDMF0pLAotCUNMS0RFVl9DT05fSUQoImkyYzEiLCAmbXN0cF9jbGtzW0hXQkxLX0lJQzFdKSwKKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW0hXQkxLX0lJQzBdKSwKKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjEiLCAmbXN0cF9jbGtzW0hXQkxLX0lJQzFdKSwKIAlDTEtERVZfQ09OX0lEKCJtbWMwIiwgJm1zdHBfY2xrc1tIV0JMS19NTUNdKSwKIAlDTEtERVZfQ09OX0lEKCJldGgwIiwgJm1zdHBfY2xrc1tIV0JMS19FVEhFUl0pLAogCUNMS0RFVl9DT05fSUQoImF0YXBpMCIsICZtc3RwX2Nsa3NbSFdCTEtfQVRBUEldKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKaW5kZXggZWVkZGRhZC4uM2IwOTdiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzU3LmMKQEAgLTEwMSw4ICsxMDEsNiBAQAogCVtNU1RQMjIwXSA9IFNIX0NMS19NU1RQMzIoJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IyLCAyMCwgMCksCiB9OwogCi0jZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoImV4dGFsIiwgJmV4dGFsX2NsayksCkBAIC0xMTYsMzMgKzExNCwxMyBAQAogCS8qIE1TVFAzMiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJzZGhpMCIsICZtc3RwX2Nsa3NbTVNUUDAwNF0pLAogCUNMS0RFVl9DT05fSUQoInJpaWMiLCAmbXN0cF9jbGtzW01TVFAwMDBdKSwKLQl7Ci0JCS8qIFRNVTAgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjAiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAxMTNdLAotCX0sIHsKLQkJLyogVE1VMSAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDExNF0sCi0JfSwKLQl7Ci0JCS8qIFNDSUY0IChCdXQsIElEIGlzIDIpICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4yIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMTEyXSwKLQl9LCB7Ci0JCS8qIFNDSUYzICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4xIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMTExXSwKLQl9LCB7Ci0JCS8qIFNDSUYyICovCi0JCS5kZXZfaWQJCT0gInNoLXNjaS4wIiwKLQkJLmNvbl9pZAkJPSAic2NpX2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMTEwXSwKLQl9LAorCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDExM10pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMTRdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4yIiwgJm1zdHBfY2xrc1tNU1RQMTEyXSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDExMV0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjAiLCAmbXN0cF9jbGtzW01TVFAxMTBdKSwKKwogCUNMS0RFVl9DT05fSUQoInVzYjAiLCAmbXN0cF9jbGtzW01TVFAxMDJdKSwKIAlDTEtERVZfQ09OX0lEKCJtbWMwIiwgJm1zdHBfY2xrc1tNU1RQMjIwXSksCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYwppbmRleCA1OTk2MzBmLi4yZDRjN2ZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NjMuYwpAQCAtOTEsOCArOTEsNiBAQAogCSZzaDc3NjNfc2h5d2F5X2NsaywKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgic2h5d2F5X2NsayIsICZzaDc3NjNfc2h5d2F5X2NsayksCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCmluZGV4IDg4OTQ5MjYuLjNiNTMzNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jCkBAIC05Nyw4ICs5Nyw2IEBACiAJJnNoNzc4MF9zaHl3YXlfY2xrLAogfTsKIAotI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJzaHl3YXlfY2xrIiwgJnNoNzc4MF9zaHl3YXlfY2xrKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4NS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMKaW5kZXggMmQ5NjAyNC4uZTViNDIwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMKQEAgLTExNiw4ICsxMTYsNiBAQAogCVtNU1RQMTAwXSA9IFNIX0NMS19NU1RQMzIoTlVMTCwgTVNUUENSMSwgMCwgMCksCiB9OwogCi0jZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoImV4dGFsIiwgJmV4dGFsX2NsayksCkBAIC0xMzQsNzQgKzEzMiwyNyBAQAogCUNMS0RFVl9DT05fSUQoImNwdV9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfSV0pLAogCiAJLyogTVNUUDMyIGNsb2NrcyAqLwotCXsKLQkJLyogU0NJRjUgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjUiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjldLAotCX0sIHsKLQkJLyogU0NJRjQgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjQiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjhdLAotCX0sIHsKLQkJLyogU0NJRjMgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjMiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjddLAotCX0sIHsKLQkJLyogU0NJRjIgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjIiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjZdLAotCX0sIHsKLQkJLyogU0NJRjEgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjEiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjVdLAotCX0sIHsKLQkJLyogU0NJRjAgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjAiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjRdLAotCX0sCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDAyOV0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjQiLCAmbXN0cF9jbGtzW01TVFAwMjhdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4zIiwgJm1zdHBfY2xrc1tNU1RQMDI3XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDAyNl0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjEiLCAmbXN0cF9jbGtzW01TVFAwMjVdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tNU1RQMDI0XSksCisKIAlDTEtERVZfQ09OX0lEKCJzc2kxX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAyMV0pLAogCUNMS0RFVl9DT05fSUQoInNzaTBfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDIwXSksCiAJQ0xLREVWX0NPTl9JRCgiaGFjMV9mY2siLCAmbXN0cF9jbGtzW01TVFAwMTddKSwKIAlDTEtERVZfQ09OX0lEKCJoYWMwX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxNl0pLAogCUNMS0RFVl9DT05fSUQoIm1tY2lmX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxM10pLAogCUNMS0RFVl9DT05fSUQoImZsY3RsX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxMl0pLAotCXsKLQkJLyogVE1VMCAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMCIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOF0sCi0JfSwgewotCQkvKiBUTVUxICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4xIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA4XSwKLQl9LCB7Ci0JCS8qIFRNVTIgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjIiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDhdLAotCX0sIHsKLQkJLyogVE1VMyAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMyIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOV0sCi0JfSwgewotCQkvKiBUTVU0ICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS40IiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA5XSwKLQl9LCB7Ci0JCS8qIFRNVTUgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjUiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDldLAotCX0sCisKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMSIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjIiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4zIiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNCIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjUiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKKwogCUNMS0RFVl9DT05fSUQoInNpb2ZfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDAzXSksCiAJQ0xLREVWX0NPTl9JRCgiaHNwaV9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDJdKSwKIAlDTEtERVZfQ09OX0lEKCJodWRpX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDExOV0pLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwppbmRleCA0MmU0MDNiLi5mNmMwYzNkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpAQCAtMTI1LDggKzEyNSw2IEBACiAJW01TVFAxMDJdID0gU0hfQ0xLX01TVFAzMihOVUxMLCBNU1RQQ1IxLCAyLCAwKSwKIH07CiAKLSNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQotCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCS8qIG1haW4gY2xvY2tzICovCiAJQ0xLREVWX0NPTl9JRCgiZXh0YWwiLCAmZXh0YWxfY2xrKSwKQEAgLTE0MSwzNyArMTM5LDEzIEBACiAJQ0xLREVWX0NPTl9JRCgiY3B1X2NsayIsICZkaXY0X2Nsa3NbRElWNF9JXSksCiAKIAkvKiBNU1RQMzIgY2xvY2tzICovCi0JewotCQkvKiBTQ0lGNSAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuNSIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyOV0sCi0JfSwgewotCQkvKiBTQ0lGNCAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuNCIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyOF0sCi0JfSwgewotCQkvKiBTQ0lGMyAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMyIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyN10sCi0JfSwgewotCQkvKiBTQ0lGMiAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMiIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyNl0sCi0JfSwgewotCQkvKiBTQ0lGMSAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMSIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyNV0sCi0JfSwgewotCQkvKiBTQ0lGMCAqLwotCQkuZGV2X2lkCQk9ICJzaC1zY2kuMCIsCi0JCS5jb25faWQJCT0gInNjaV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAyNF0sCi0JfSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMDI5XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDAyOF0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjMiLCAmbXN0cF9jbGtzW01TVFAwMjddKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4yIiwgJm1zdHBfY2xrc1tNU1RQMDI2XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDAyNV0pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjAiLCAmbXN0cF9jbGtzW01TVFAwMjRdKSwKKwogCUNMS0RFVl9DT05fSUQoInNzaTNfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDIzXSksCiAJQ0xLREVWX0NPTl9JRCgic3NpMl9mY2siLCAmbXN0cF9jbGtzW01TVFAwMjJdKSwKIAlDTEtERVZfQ09OX0lEKCJzc2kxX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAyMV0pLApAQCAtMTgwLDY3ICsxNTQsMjAgQEAKIAlDTEtERVZfQ09OX0lEKCJoYWMwX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAxNl0pLAogCUNMS0RFVl9DT05fSUQoImkyYzFfZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDE1XSksCiAJQ0xLREVWX0NPTl9JRCgiaTJjMF9mY2siLCAmbXN0cF9jbGtzW01TVFAwMTRdKSwKLQl7Ci0JCS8qIFRNVTAgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjAiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDhdLAotCX0sIHsKLQkJLyogVE1VMSAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOF0sCi0JfSwgewotCQkvKiBUTVUyICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4yIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA4XSwKLQl9LCB7Ci0JCS8qIFRNVTMgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjMiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDldLAotCX0sIHsKLQkJLyogVE1VNCAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuNCIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOV0sCi0JfSwgewotCQkvKiBUTVU1ICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS41IiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA5XSwKLQl9LCB7Ci0JCS8qIFRNVTYgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjYiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMTBdLAotCX0sIHsKLQkJLyogVE1VNyAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuNyIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAxMF0sCi0JfSwgewotCQkvKiBUTVU4ICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS44IiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDEwXSwKLQl9LCB7Ci0JCS8qIFRNVTkgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjkiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMTFdLAotCX0sIHsKLQkJLyogVE1VMTAgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjEwIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDExXSwKLQl9LCB7Ci0JCS8qIFRNVTExICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4xMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAxMV0sCi0JfSwKKworCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjAiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4xIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMiIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjMiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS40IiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuNSIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjYiLCAmbXN0cF9jbGtzW01TVFAwMTBdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS43IiwgJm1zdHBfY2xrc1tNU1RQMDEwXSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuOCIsICZtc3RwX2Nsa3NbTVNUUDAxMF0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjkiLCAmbXN0cF9jbGtzW01TVFAwMTFdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4xMCIsICZtc3RwX2Nsa3NbTVNUUDAxMV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjExIiwgJm1zdHBfY2xrc1tNU1RQMDExXSksCisKIAlDTEtERVZfQ09OX0lEKCJzZGlmMV9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDVdKSwKIAlDTEtERVZfQ09OX0lEKCJzZGlmMF9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDRdKSwKIAlDTEtERVZfQ09OX0lEKCJoc3BpX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAwMl0pLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCmluZGV4IDFhZmRiOTMuLmJmMmQwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKQEAgLTEwMCw4ICsxMDAsNiBAQAogCVtNU1RQMTA0XSA9IFNIX0NMS19NU1RQMzIoTlVMTCwgTVNUUENSMSwgNCwgMCksCiB9OwogCi0jZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KLQogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAkvKiBtYWluIGNsb2NrcyAqLwogCUNMS0RFVl9DT05fSUQoImV4dGFsIiwgJmV4dGFsX2NsayksCkBAIC0xMTYsNjIgKzExNCwyMyBAQAogCUNMS0RFVl9DT05fSUQoImNwdV9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfSV0pLAogCiAJLyogTVNUUDMyIGNsb2NrcyAqLwotCXsKLQkJLyogU0NJRjMgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjMiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjddLAotCX0sIHsKLQkJLyogU0NJRjIgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjIiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjZdLAotCX0sIHsKLQkJLyogU0NJRjEgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjEiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjVdLAotCX0sIHsKLQkJLyogU0NJRjAgKi8KLQkJLmRldl9pZAkJPSAic2gtc2NpLjAiLAotCQkuY29uX2lkCQk9ICJzY2lfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMjRdLAotCX0sCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDAyN10pLAorCUNMS0RFVl9JQ0tfSUQoInNjaV9mY2siLCAic2gtc2NpLjIiLCAmbXN0cF9jbGtzW01TVFAwMjZdKSwKKwlDTEtERVZfSUNLX0lEKCJzY2lfZmNrIiwgInNoLXNjaS4xIiwgJm1zdHBfY2xrc1tNU1RQMDI1XSksCisJQ0xLREVWX0lDS19JRCgic2NpX2ZjayIsICJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDAyNF0pLAorCiAJQ0xLREVWX0NPTl9JRCgiaDhleF9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDNdKSwKIAlDTEtERVZfQ09OX0lEKCJjc21fZmNrIiwgJm1zdHBfY2xrc1tNU1RQMDAyXSksCiAJQ0xLREVWX0NPTl9JRCgiZmUxX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDAwMV0pLAogCUNMS0RFVl9DT05fSUQoImZlMF9mY2siLCAmbXN0cF9jbGtzW01TVFAwMDBdKSwKLQl7Ci0JCS8qIFRNVTAgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjAiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDhdLAotCX0sIHsKLQkJLyogVE1VMSAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuMSIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOF0sCi0JfSwgewotCQkvKiBUTVUyICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS4yIiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA4XSwKLQl9LCB7Ci0JCS8qIFRNVTMgKi8KLQkJLmRldl9pZAkJPSAic2hfdG11LjMiLAotCQkuY29uX2lkCQk9ICJ0bXVfZmNrIiwKLQkJLmNsawkJPSAmbXN0cF9jbGtzW01TVFAwMDldLAotCX0sIHsKLQkJLyogVE1VNCAqLwotCQkuZGV2X2lkCQk9ICJzaF90bXUuNCIsCi0JCS5jb25faWQJCT0gInRtdV9mY2siLAotCQkuY2xrCQk9ICZtc3RwX2Nsa3NbTVNUUDAwOV0sCi0JfSwgewotCQkvKiBUTVU1ICovCi0JCS5kZXZfaWQJCT0gInNoX3RtdS41IiwKLQkJLmNvbl9pZAkJPSAidG11X2ZjayIsCi0JCS5jbGsJCT0gJm1zdHBfY2xrc1tNU1RQMDA5XSwKLQl9LAorCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMCIsICZtc3RwX2Nsa3NbTVNUUDAwOF0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAwMDhdKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS4yIiwgJm1zdHBfY2xrc1tNU1RQMDA4XSksCisJQ0xLREVWX0lDS19JRCgidG11X2ZjayIsICJzaF90bXUuMyIsICZtc3RwX2Nsa3NbTVNUUDAwOV0pLAorCUNMS0RFVl9JQ0tfSUQoInRtdV9mY2siLCAic2hfdG11LjQiLCAmbXN0cF9jbGtzW01TVFAwMDldKSwKKwlDTEtERVZfSUNLX0lEKCJ0bXVfZmNrIiwgInNoX3RtdS41IiwgJm1zdHBfY2xrc1tNU1RQMDA5XSksCisKIAlDTEtERVZfQ09OX0lEKCJodWRpX2ZjayIsICZtc3RwX2Nsa3NbTVNUUDExOV0pLAogCUNMS0RFVl9DT05fSUQoImRtYWNfMTFfNl9mY2siLCAmbXN0cF9jbGtzW01TVFAxMDVdKSwKIAlDTEtERVZfQ09OX0lEKCJkbWFjXzVfMF9mY2siLCAmbXN0cF9jbGtzW01TVFAxMDRdKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NlcmlhbC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NlcmlhbC1zaDc3MjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJjM2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2VyaWFsLXNoNzcyMi5jCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjZGVmaW5lIFBTQ1IgMHhBNDA1MDExRQorCitzdGF0aWMgdm9pZCBzaDc3MjJfc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCit7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsKKworCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApIHsKKwkJZGF0YSA9IF9fcmF3X3JlYWR3KFBTQ1IpOworCQlkYXRhICY9IH4weDAzY2Y7CisJCWlmICghKGNmbGFnICYgQ1JUU0NUUykpCisJCQlkYXRhIHw9IDB4MDM0MDsKKworCQlfX3Jhd193cml0ZXcoZGF0YSwgUFNDUik7CisJfQorfQorCitzdHJ1Y3QgcGxhdF9zY2lfcG9ydF9vcHMgc2g3NzIyX3NjaV9wb3J0X29wcyA9IHsKKwkuaW5pdF9waW5zCT0gc2g3NzIyX3NjaV9pbml0X3BpbnMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzY2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwppbmRleCA4MjYxNmFmLi44Nzc3Mzg2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYwpAQCAtMjAsNiArMjAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCisJLnBvcnRfcmVnCT0gMHhhNDA1MDEzZSwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCA1ODEzZDgwLi4yNzhhMGU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KKyNpbmNsdWRlIDxjcHUvc2VyaWFsLmg+CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgc2g3NzIyX2RtYWVfc2xhdmVzW10gPSB7CiAJewpAQCAtMTg1LDYgKzE4Niw4IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzIsCiAJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAogCS5pcnFzICAgICAgICAgICA9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkub3BzCQk9ICZzaDc3MjJfc2NpX3BvcnRfb3BzLAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9OT19TQ1NQVFJfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTIwMiw2ICsyMDUsOCBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKIAkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCisJLm9wcwkJPSAmc2g3NzIyX3NjaV9wb3J0X29wcywKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfTk9fU0NTUFRSX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CkBAIC0yMTksNiArMjI0LDggQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCiAJLmlycXMgICAgICAgICAgID0geyA4MiwgODIsIDgyLCA4MiB9LAorCS5vcHMJCT0gJnNoNzcyMl9zY2lfcG9ydF9vcHMsCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCAwNzIzODIyLi4zYzI4MTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtMjMsMTEgKzIzLDEzIEBACiAvKiBTZXJpYWwgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMDAwMDAsCisJLnBvcnRfcmVnCT0gMHhhNDA1MDE2MCwKIAkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSB8IFNDU0NSX1JFSUUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzIsCiAJLnR5cGUgICAgICAgICAgID0gUE9SVF9TQ0lGLAogCS5pcnFzICAgICAgICAgICA9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfTk9fU0NTUFRSX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CkBAIC00MCwxMSArNDIsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUxMDAwMCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKIAkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0gewpAQCAtNTcsMTEgKzYxLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4ZmZlMjAwMDAsCisJLnBvcnRfcmVnCT0gU0NJeF9OT1RfU1VQUE9SVEVELAogCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFIHwgU0NTQ1JfUkVJRSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUYsCiAJLmlycXMgICAgICAgICAgID0geyA4MiwgODIsIDgyLCA4MiB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9OT19TQ1NQVFJfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKQEAgLTc1LDYgKzgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4YTRlMzAwMDAsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnBvcnRfcmVnCT0gU0NJeF9OT1RfU1VQUE9SVEVELAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFIHwgU0NTQ1JfUkVJRSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMywKIAkudHlwZSAgICAgICAgICAgPSBQT1JUX1NDSUZBLApAQCAtOTEsNiArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZSAgICAgICAgPSAweGE0ZTQwMDAwLAorCS5wb3J0X3JlZwk9IFNDSXhfTk9UX1NVUFBPUlRFRCwKIAkuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSB8IFNDU0NSX1JFSUUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzMsCkBAIC0xMDgsNiArMTE2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY1X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhhNGU1MDAwMCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18zLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCAxMzRhMzk3Li5hMzdkZDcyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtMjk2LDExICsyOTYsMTMgQEAKIC8qIFNlcmlhbCAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKIAkuaXJxcyAgICAgICAgICAgPSB7IDgwLCA4MCwgODAsIDgwIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewpAQCAtMzEzLDExICszMTUsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUxMDAwMCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKIAkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0gewpAQCAtMzMwLDExICszMzQsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUyMDAwMCwKKwkucG9ydF9yZWcJPSBTQ0l4X05PVF9TVVBQT1JURUQsCiAJLmZsYWdzICAgICAgICAgID0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUgfCBTQ1NDUl9SRUlFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlICAgICAgICAgICA9IFBPUlRfU0NJRiwKIAkuaXJxcyAgICAgICAgICAgPSB7IDgyLCA4MiwgODIsIDgyIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpAQCAtMzQ3LDYgKzM1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4YTRlMzAwMDAsCisJLnBvcnRfcmVnCT0gU0NJeF9OT1RfU1VQUE9SVEVELAogCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18zLApAQCAtMzY0LDYgKzM3MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4YTRlNDAwMDAsCisJLnBvcnRfcmVnCT0gU0NJeF9OT1RfU1VQUE9SVEVELAogCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18zLApAQCAtMzgxLDYgKzM4OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlICAgICAgICA9IDB4YTRlNTAwMDAsCisJLnBvcnRfcmVnCT0gU0NJeF9OT1RfU1VQUE9SVEVELAogCS5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18zLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwppbmRleCBlOTE1ZGVhLi4wNTU1OTI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2RtYS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDU5M2VjYTYuLjAwMTEzNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC0yMyw2ICsyMyw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzIsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzCQk9IHsgNDAsIDQwLCA0MCwgNDAgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTQwLDYgKzQxLDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA3NiwgNzYsIDc2LCA3NiB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0gewpAQCAtNTcsNiArNTksNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18yLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDEwNCwgMTA0LCAxMDQsIDEwNCB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCAwOGFkZDdmLi4zZDRkMjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF9kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgotCiAjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTI0LDYgKzIzLDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewpAQCAtNDEsNiArNDEsNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18xLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDE4ZDhmYzEuLmIyOWU2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xNSw5ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF9kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgotCiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgotCiAjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTI3LDYgKzI1LDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0gewpAQCAtNDQsNiArNDMsNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18xLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CkBAIC02MSw2ICs2MSw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzEsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzCQk9IHsgNjAsIDYwLCA2MCwgNjAgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKQEAgLTc4LDYgKzc5LDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA2MSwgNjEsIDYxLCA2MSB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0gewpAQCAtOTUsNiArOTcsNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18xLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDYyLCA2MiwgNjIsIDYyIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CkBAIC0xMTIsNiArMTE1LDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA2MywgNjMsIDYzLCA2MyB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjVfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwppbmRleCBiZWJhMzJiLi5kZDVlNzA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTSDc3ODYgU2V0dXAKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KICAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KICAqIFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAcmVuZXNhcy5jb20+CiAgKgpAQCAtMzMsNiArMzMsNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18xLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CkBAIC01Myw2ICs1NCw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzEsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzCQk9IHsgNDQsIDQ0LCA0NCwgNDQgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKQEAgLTcwLDYgKzcyLDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA1MCwgNTAsIDUwLCA1MCB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0gewpAQCAtODcsNiArOTAsNyBAQAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT18xLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKIAkuaXJxcwkJPSB7IDUxLCA1MSwgNTEsIDUxIH0sCisJLnJlZ3R5cGUJPSBTQ0l4X1NINF9TQ0lGX0ZJRk9EQVRBX1JFR1RZUEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmM19kZXZpY2UgPSB7CkBAIC0xMDQsNiArMTA4LDcgQEAKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fMSwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCiAJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAorCS5yZWd0eXBlCT0gU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjRfZGV2aWNlID0gewpAQCAtMTIxLDYgKzEyNiw3IEBACiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzEsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAogCS5pcnFzCQk9IHsgNTMsIDUzLCA1MywgNTMgfSwKKwkucmVndHlwZQk9IFNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY1X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCA4NGRiMGQ2Li5kYjRlY2Q3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC0xNiwxMiArMTYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotdm9pZCAoKnBtX2lkbGUpKHZvaWQpID0gTlVMTDsKK3ZvaWQgKCpwbV9pZGxlKSh2b2lkKTsKIAogc3RhdGljIGludCBobHRfY291bnRlcjsKIApAQCAtMTAwLDcgKzEwMSw4IEBACiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkJLyogRG9uJ3QgdHJhY2UgaXJxcyBvZmYgZm9yIGlkbGUgKi8KIAkJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOwotCQkJcG1faWRsZSgpOworCQkJaWYgKGNwdWlkbGVfaWRsZV9jYWxsKCkpCisJCQkJcG1faWRsZSgpOwogCQkJLyoKIAkJCSAqIFNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhhdCBwbV9pZGxlKCkgcmV0dXJucwogCQkJICogd2l0aCBJUlFzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc18zMi5TCmluZGV4IDM5YjA1MWQuLjI5M2UzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzMyLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfMzIuUwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogdm04NiAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiB3YXMgbmZzc2VydmN0bCAqLwogCS5sb25nIHN5c19zZXRyZXNnaWQxNgkvKiAxNzAgKi8KIAkubG9uZyBzeXNfZ2V0cmVzZ2lkMTYKIAkubG9uZyBzeXNfcHJjdGwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzY0LlMgYi9hcmNoL3NoL2tlcm5lbC9zeXNjYWxsc182NC5TCmluZGV4IDA4OWM0ZDguLmNlYjM0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c2NhbGxzXzY0LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHNfNjQuUwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogdm04NiAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiB3YXMgbmZzc2VydmN0bCAqLwogCS5sb25nIHN5c19zZXRyZXNnaWQxNgkJLyogMTcwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZDE2CiAJLmxvbmcgc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCBkOTAwNmY4Li43YmJlZjk1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTMxNiw2ICszMTYsMzUgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCisJY2FzZSA5OiAvKiBtb3YudyBAKGRpc3AsUEMpLFJuICovCisJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKilyZWdzLT5wYzsKKwkJc3JjdSArPSA0OworCQlzcmN1ICs9IChpbnN0cnVjdGlvbiAmIDB4MDBGRikgPDwgMTsKKwkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKilybjsKKwkJKih1bnNpZ25lZCBsb25nICopZHN0ID0gMDsKKworI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorCQlkc3QgKz0gMjsKKyNlbmRpZgorCisJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDIpKQorCQkJZ290byBmZXRjaF9mYXVsdDsKKwkJc2lnbl9leHRlbmQoMiwgZHN0KTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIDB4ZDogLyogbW92LmwgQChkaXNwLFBDKSxSbiAqLworCQlzcmN1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKHJlZ3MtPnBjICYgfjB4Myk7CisJCXNyY3UgKz0gNDsKKwkJc3JjdSArPSAoaW5zdHJ1Y3Rpb24gJiAweDAwRkYpIDw8IDI7CisJCWRzdCA9ICh1bnNpZ25lZCBjaGFyICopcm47CisJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IDA7CisKKwkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjdSwgNCkpCisJCQlnb3RvIGZldGNoX2ZhdWx0OworCQlyZXQgPSAwOworCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKIApAQCAtNDY2LDYgKzQ5NSw3IEBACiAJCWNhc2UgMHgwNTAwOiAvKiBtb3YudyBAKGRpc3AsUm0pLFIwICovCiAJCQlnb3RvIHNpbXBsZTsKIAkJY2FzZSAweDBCMDA6IC8qIGJmICAgbGFiIC0gbm8gZGVsYXlzbG90Ki8KKwkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSAweDBGMDA6IC8qIGJmL3MgbGFiICovCiAJCQlyZXQgPSBoYW5kbGVfZGVsYXlzbG90KHJlZ3MsIGluc3RydWN0aW9uLCBtYSk7CkBAIC00NzksNiArNTA5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDB4MDkwMDogLyogYnQgICBsYWIgLSBubyBkZWxheXNsb3QgKi8KKwkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJY2FzZSAweDBEMDA6IC8qIGJ0L3MgbGFiICovCiAJCQlyZXQgPSBoYW5kbGVfZGVsYXlzbG90KHJlZ3MsIGluc3RydWN0aW9uLCBtYSk7CkBAIC00OTQsNiArNTI1LDkgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgMHg5MDAwOiAvKiBtb3YudyBAKGRpc3AsUm0pLFJuICovCisJCWdvdG8gc2ltcGxlOworCiAJY2FzZSAweEEwMDA6IC8qIGJyYSBsYWJlbCAqLwogCQlyZXQgPSBoYW5kbGVfZGVsYXlzbG90KHJlZ3MsIGluc3RydWN0aW9uLCBtYSk7CiAJCWlmIChyZXQ9PTApCkBAIC01MDcsNiArNTQxLDkgQEAKIAkJCXJlZ3MtPnBjICs9IFNIX1BDXzEyQklUX09GRlNFVChpbnN0cnVjdGlvbik7CiAJCX0KIAkJYnJlYWs7CisKKwljYXNlIDB4RDAwMDogLyogbW92LmwgQChkaXNwLFJtKSxSbiAqLworCQlnb3RvIHNpbXBsZTsKIAl9CiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDEwNzRkZGQuLjFhNmYyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTU0LDYgKzU0LDggQEAKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAJc2VsZWN0IElSUV9QUkVGTE9XX0ZBU1RFT0kKKwlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKKwlzZWxlY3QgSEFWRV9DX1JFQ09SRE1DT1VOVAogCiBjb25maWcgQVJDSF9ERUZDT05GSUcKIAlzdHJpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggM2M5M2YwOC4uMmMyZTM4OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTE2LDMgKzE2LDggQEAKIGhlYWRlci15ICs9IHVjdHguaAogaGVhZGVyLXkgKz0gdXRyYXAuaAogaGVhZGVyLXkgKz0gd2F0Y2hkb2cuaAorCitnZW5lcmljLXkgKz0gZGl2NjQuaAorZ2VuZXJpYy15ICs9IGxvY2FsNjQuaAorZ2VuZXJpYy15ICs9IGlycV9yZWdzLmgKK2dlbmVyaWMteSArPSBsb2NhbC5oCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9iaXRvcHNfNjQuaAppbmRleCAzMjVlMjk1Li4yOTAxMWNjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2JpdG9wc182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYml0b3BzXzY0LmgKQEAgLTI2LDYxICsyNiwyOCBAQAogI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQliYXJyaWVyKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQliYXJyaWVyKCkKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnouaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL19fZmxzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKK2V4dGVybiBpbnQgZmZzKGludCB4KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcpOworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnMuaD4KIAogLyoKICAqIGh3ZWlnaHROOiByZXR1cm5zIHRoZSBoYW1taW5nIHdlaWdodCAoaS5lLiB0aGUgbnVtYmVyCiAgKiBvZiBiaXRzIHNldCkgb2YgYSBOLWJpdCB3b3JkCiAgKi8KIAotI2lmZGVmIFVMVFJBX0hBU19QT1BVTEFUSU9OX0NPVU5UCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2FyY2hfaHdlaWdodDY0KF9fdTY0IHcpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2FyY2hfaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19hcmNoX2h3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdyk7CitleHRlcm4gdW5zaWduZWQgaW50IF9fYXJjaF9od2VpZ2h0OCh1bnNpZ25lZCBpbnQgdyk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXJjaF9od2VpZ2h0NjQodW5zaWduZWQgbG9uZyB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3KSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hcmNoX2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKLXsKLQl1bnNpZ25lZCBpbnQgcmVzOwotCi0JX19hc21fXyAoInBvcGMgJTEsJTAiIDogIj1yIiAocmVzKSA6ICJyIiAodyAmIDB4ZmZmZmZmZmYpKTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2FyY2hfaHdlaWdodDE2KHVuc2lnbmVkIGludCB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZmZmKSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hcmNoX2h3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KQotewotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlfX2FzbV9fICgicG9wYyAlMSwlMCIgOiAiPXIiIChyZXMpIDogInIiICh3ICYgMHhmZikpOwotCXJldHVybiByZXM7Ci19Ci0KLSNlbHNlCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvYXJjaF9od2VpZ2h0Lmg+Ci0KLSNlbmRpZgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9jb25zdF9od2VpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RpdjY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RpdjY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZDk3OGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kaXY2NC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaAppbmRleCA2NGY3YTAwLi43ZGY4YjdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKQEAgLTU5LDE1ICs1OSwzMyBAQAogI2RlZmluZSBSX1NQQVJDXzYJCTQ1CiAKIC8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUCwgcHJpbWFyaWx5IGZvciBTcGFyYzMyLiAgKi8KKyNkZWZpbmUgSFdDQVBfU1BBUkNfRkxVU0ggICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIV0NBUF9TUEFSQ19TVEJBUiAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEhXQ0FQX1NQQVJDX1NXQVAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSFdDQVBfU1BBUkNfTVVMRElWICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBIV0NBUF9TUEFSQ19WOQkJMHgwMDAwMDAxMAorI2RlZmluZSBIV0NBUF9TUEFSQ19VTFRSQTMJMHgwMDAwMDAyMAorI2RlZmluZSBIV0NBUF9TUEFSQ19CTEtJTklUCTB4MDAwMDAwNDAKKyNkZWZpbmUgSFdDQVBfU1BBUkNfTjIJCTB4MDAwMDAwODAKIAotI2RlZmluZSBIV0NBUF9TUEFSQ19GTFVTSCAgICAgICAxICAgIC8qIENQVSBzdXBwb3J0cyBmbHVzaCBpbnN0cnVjdGlvbi4gKi8KLSNkZWZpbmUgSFdDQVBfU1BBUkNfU1RCQVIgICAgICAgMgotI2RlZmluZSBIV0NBUF9TUEFSQ19TV0FQICAgICAgICA0Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX01VTERJViAgICAgIDgKLSNkZWZpbmUgSFdDQVBfU1BBUkNfVjkJCTE2Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX1VMVFJBMwkzMgotI2RlZmluZSBIV0NBUF9TUEFSQ19CTEtJTklUCTY0Ci0jZGVmaW5lIEhXQ0FQX1NQQVJDX04yCQkxMjgKKy8qIFNvbGFyaXMgY29tcGF0aWJsZSBBVF9IV0NBUCBiaXRzLiAqLworI2RlZmluZSBBVl9TUEFSQ19NVUwzMgkJMHgwMDAwMDEwMCAvKiAzMngzMiBtdWx0aXBseSBpcyBlZmZpY2llbnQgKi8KKyNkZWZpbmUgQVZfU1BBUkNfRElWMzIJCTB4MDAwMDAyMDAgLyogMzJ4MzIgZGl2aWRlIGlzIGVmZmljaWVudCAqLworI2RlZmluZSBBVl9TUEFSQ19GU01VTEQJCTB4MDAwMDA0MDAgLyogJ2ZzbXVsZCcgaXMgZWZmaWNpZW50ICovCisjZGVmaW5lIEFWX1NQQVJDX1Y4UExVUwkJMHgwMDAwMDgwMCAvKiB2OSBpbnNuIGF2YWlsYWJsZSB0byAzMmJpdCAqLworI2RlZmluZSBBVl9TUEFSQ19QT1BDCQkweDAwMDAxMDAwIC8qICdwb3BjJyBpcyBlZmZpY2llbnQgKi8KKyNkZWZpbmUgQVZfU1BBUkNfVklTCQkweDAwMDAyMDAwIC8qIFZJUyBpbnNucyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQVZfU1BBUkNfVklTMgkJMHgwMDAwNDAwMCAvKiBWSVMyIGluc25zIGF2YWlsYWJsZSAqLworI2RlZmluZSBBVl9TUEFSQ19BU0lfQkxLX0lOSVQJMHgwMDAwODAwMCAvKiBibG9jayBpbml0IEFTSXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEFWX1NQQVJDX0ZNQUYJCTB4MDAwMTAwMDAgLyogZnVzZWQgbXVsdGlwbHktYWRkICovCisjZGVmaW5lIEFWX1NQQVJDX1ZJUzMJCTB4MDAwMjAwMDAgLyogVklTMyBpbnNucyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQVZfU1BBUkNfSFBDCQkweDAwMDQwMDAwIC8qIEhQQyBpbnNucyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgQVZfU1BBUkNfUkFORE9NCQkweDAwMDgwMDAwIC8qICdyYW5kb20nIGluc24gYXZhaWxhYmxlICovCisjZGVmaW5lIEFWX1NQQVJDX1RSQU5TCQkweDAwMTAwMDAwIC8qIHRyYW5zYWN0aW9uIGluc25zIGF2YWlsYWJsZSAqLworI2RlZmluZSBBVl9TUEFSQ19GSkZNQVUJCTB4MDAyMDAwMDAgLyogdW5mdXNlZCBtdWx0aXBseS1hZGQgKi8KKyNkZWZpbmUgQVZfU1BBUkNfSU1BCQkweDAwNDAwMDAwIC8qIGludGVnZXIgbXVsdGlwbHktYWRkICovCisjZGVmaW5lIEFWX1NQQVJDX0FTSV9DQUNIRV9TUEFSSU5HIFwKKwkJCQkweDAwODAwMDAwIC8qIGNhY2hlIHNwYXJpbmcgQVNJcyBhdmFpbGFibGUgKi8KIAogI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAogCkBAIC0xNjIsMzMgKzE4MCw4IEBACiAjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJMHgwMDAwMDEwMDAwMDAwMDAwVUwKICNkZWZpbmUgQ09NUEFUX0VMRl9FVF9EWU5fQkFTRQkweDAwMDAwMDAwNzAwMDAwMDBVTAogCi0KLS8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKLSAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCi0KLS8qIE9uIFVsdHJhLCB3ZSBzdXBwb3J0IGFsbCBvZiB0aGUgdjggY2FwYWJpbGl0aWVzLiAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3BhcmM2NF9lbGZfaHdjYXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgY2FwID0gKEhXQ0FQX1NQQVJDX0ZMVVNIIHwgSFdDQVBfU1BBUkNfU1RCQVIgfAotCQkJICAgIEhXQ0FQX1NQQVJDX1NXQVAgfCBIV0NBUF9TUEFSQ19NVUxESVYgfAotCQkJICAgIEhXQ0FQX1NQQVJDX1Y5KTsKLQotCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykKLQkJY2FwIHw9IEhXQ0FQX1NQQVJDX1VMVFJBMzsKLQllbHNlIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7Ci0JCWlmIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMSB8fAotCQkgICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTIgfHwKLQkJICAgIHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkEzKQotCQkJY2FwIHw9IEhXQ0FQX1NQQVJDX0JMS0lOSVQ7Ci0JCWlmIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMiB8fAotCQkgICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTMpCi0JCQljYXAgfD0gSFdDQVBfU1BBUkNfTjI7Ci0JfQotCi0JcmV0dXJuIGNhcDsKLX0KLQotI2RlZmluZSBFTEZfSFdDQVAJc3BhcmM2NF9lbGZfaHdjYXAoKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9lbGZfaHdjYXA7CisjZGVmaW5lIEVMRl9IV0NBUAlzcGFyYzY0X2VsZl9od2NhcAogCiAvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KICAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oCmluZGV4IDdhNWY4MGQuLjAxNWE3NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oCkBAIC0yOTI3LDYgKzI5MjcsMTMgQEAKICNkZWZpbmUgSFZfRkFTVF9GSVJFX0dFVF9QRVJGUkVHCTB4MTIwCiAjZGVmaW5lIEhWX0ZBU1RfRklSRV9TRVRfUEVSRlJFRwkweDEyMQogCisjZGVmaW5lIEhWX0ZBU1RfUkVCT09UX0RBVEFfU0VUCQkweDE3MgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfcmVib290X2RhdGFfc2V0KHVuc2lnbmVkIGxvbmcgcmEsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuKTsKKyNlbmRpZgorCiAvKiBGdW5jdGlvbiBudW1iZXJzIGZvciBIVl9DT1JFX1RSQVAuICAqLwogI2RlZmluZSBIVl9DT1JFX1NFVF9WRVIJCQkweDAwCiAjZGVmaW5lIEhWX0NPUkVfUFVUQ0hBUgkJCTB4MDEKQEAgLTI5NDAsMTEgKzI5NDcsMTcgQEAKICNkZWZpbmUgSFZfR1JQX0NPUkUJCQkweDAwMDEKICNkZWZpbmUgSFZfR1JQX0lOVFIJCQkweDAwMDIKICNkZWZpbmUgSFZfR1JQX1NPRlRfU1RBVEUJCTB4MDAwMworI2RlZmluZSBIVl9HUlBfVE0JCQkweDAwODAKICNkZWZpbmUgSFZfR1JQX1BDSQkJCTB4MDEwMAogI2RlZmluZSBIVl9HUlBfTERPTQkJCTB4MDEwMQogI2RlZmluZSBIVl9HUlBfU1ZDX0NIQU4JCQkweDAxMDIKICNkZWZpbmUgSFZfR1JQX05DUwkJCTB4MDEwMwogI2RlZmluZSBIVl9HUlBfUk5HCQkJMHgwMTA0CisjZGVmaW5lIEhWX0dSUF9QQk9PVAkJCTB4MDEwNQorI2RlZmluZSBIVl9HUlBfVFBNCQkJMHgwMTA3CisjZGVmaW5lIEhWX0dSUF9TRElPCQkJMHgwMTA4CisjZGVmaW5lIEhWX0dSUF9TRElPX0VSUgkJCTB4MDEwOQorI2RlZmluZSBIVl9HUlBfUkVCT09UX0RBVEEJCTB4MDExMAogI2RlZmluZSBIVl9HUlBfTklBR19QRVJGCQkweDAyMDAKICNkZWZpbmUgSFZfR1JQX0ZJUkVfUEVSRgkJMHgwMjAxCiAjZGVmaW5lIEhWX0dSUF9OMl9DUFUJCQkweDAyMDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkOWMwYi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV9yZWdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXJxX3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaAppbmRleCA0MmI0YjMxLi5mNDg1MjdlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX3BjaS5oCkBAIC0xMiw3ICsxMiw3IEBACiAJc3RydWN0IHBjaV9vcHMgKm9wczsKIAlzdHJ1Y3QgcmVzb3VyY2UJaW9fc3BhY2U7CiAJc3RydWN0IHJlc291cmNlCW1lbV9zcGFjZTsKLQlpbnQgKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworCWludCAoKm1hcF9pcnEpKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiB9OwogCiBleHRlcm4gdm9pZCBsZW9uX3BjaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sb2NhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzgwODE1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfU1BBUkNfTE9DQUxfSAotI2RlZmluZSBfU1BBUkNfTE9DQUxfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbG9jYWw2NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmM5M2I1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbG9jYWw2NC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggYTE2MDdkMS4uNjk5MTRkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKQEAgLTQ1LDYgKzQ1LDE5IEBACiAJaW50CQkJc2lfbWFzazsKIH0gX19zaWdpbmZvMzJfdDsKIAorI2RlZmluZSBfX1NJR0NfTUFYV0lOCTcKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbG9jYWxzWzhdOworCXVuc2lnbmVkIGxvbmcgaW5zWzhdOworfSBfX3NpZ2luZm9fcmVnX3dpbmRvdzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludAkJCXdzYXZlZDsKKwlfX3NpZ2luZm9fcmVnX3dpbmRvdwlyZWdfd2luZG93W19fU0lHQ19NQVhXSU5dOworCXVuc2lnbmVkIGxvbmcJCXJ3YnVmX3N0a3B0cnNbX19TSUdDX01BWFdJTl07Cit9IF9fc2lnaW5mb19yd2luX3Q7CisKICNpZmRlZiBDT05GSUdfU1BBUkM2NAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkICAgaW50IHNpX2Zsb2F0X3JlZ3MgWzY0XTsKQEAgLTczLDYgKzg2LDcgQEAKIAkJdW5zaWduZWQgbG9uZwlzc19zaXplOwogCX0JCQlzaWdjX3N0YWNrOwogCXVuc2lnbmVkIGxvbmcJCXNpZ2NfbWFzazsKKwlfX3NpZ2luZm9fcndpbl90ICoJc2lnY19yd2luX3NhdmU7CiB9OwogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCmluZGV4IDVmNWI4YmYuLmJjYzk4ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKQEAgLTEzMSw2ICsxMzEsMTUgQEAKIAkqKHZvbGF0aWxlIF9fdTMyICopJmxwLT5sb2NrID0gfjBVOwogfQogCitzdGF0aWMgdm9pZCBpbmxpbmUgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqbG9jaykKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIJc3QJCSUlZzAsIFslMF0iCisJOiAvKiBubyBvdXRwdXRzICovCisJOiAiciIgKGxvY2spCisJOiAibWVtb3J5Iik7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfd3JpdGVfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwpAQCAtMTc1LDggKzE4NCw2IEBACiAJcmVzOyBcCiB9KQogCi0jZGVmaW5lIGFyY2hfd3JpdGVfdW5sb2NrKHJ3KQlkbyB7IChydyktPmxvY2sgPSAwOyB9IHdoaWxlKDApCi0KICNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCiAjZGVmaW5lIGFyY2hfcmVhZF9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgICBhcmNoX3JlYWRfbG9jayhydykKICNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgIGFyY2hfd3JpdGVfbG9jayhydykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAppbmRleCAwNzM5MzZhLi45Njg5MTc2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCkBAIC0yMTAsMTQgKzIxMCw4IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotI2RlZmluZSBhcmNoX3JlYWRfbG9jayhwKQlhcmNoX3JlYWRfbG9jayhwKQogI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhwLCBmKSBhcmNoX3JlYWRfbG9jayhwKQotI2RlZmluZSBhcmNoX3JlYWRfdHJ5bG9jayhwKQlhcmNoX3JlYWRfdHJ5bG9jayhwKQotI2RlZmluZSBhcmNoX3JlYWRfdW5sb2NrKHApCWFyY2hfcmVhZF91bmxvY2socCkKLSNkZWZpbmUgYXJjaF93cml0ZV9sb2NrKHApCWFyY2hfd3JpdGVfbG9jayhwKQogI2RlZmluZSBhcmNoX3dyaXRlX2xvY2tfZmxhZ3MocCwgZikgYXJjaF93cml0ZV9sb2NrKHApCi0jZGVmaW5lIGFyY2hfd3JpdGVfdW5sb2NrKHApCWFyY2hfd3JpdGVfdW5sb2NrKHApCi0jZGVmaW5lIGFyY2hfd3JpdGVfdHJ5bG9jayhwKQlhcmNoX3dyaXRlX3RyeWxvY2socCkKIAogI2RlZmluZSBhcmNoX3JlYWRfY2FuX2xvY2socncpCQkoISgocncpLT5sb2NrICYgMHg4MDAwMDAwMFVMKSkKICNkZWZpbmUgYXJjaF93cml0ZV9jYW5fbG9jayhydykJKCEocncpLT5sb2NrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHNiLmgKaW5kZXggODNjNTcxZC4uMWE4YWZkMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90c2IuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RzYi5oCkBAIC0xMzMsMjkgKzEzMyw2IEBACiAJc3ViCVRTQiwgMHg4LCBUU0I7ICAgXAogCVRTQl9TVE9SRShUU0IsIFRBRyk7CiAKLSNkZWZpbmUgS1RTQl9MT0FEX1FVQUQoVFNCLCBSRUcpIFwKLQlsZGRhCQlbVFNCXSBBU0lfTlVDTEVVU19RVUFEX0xERCwgUkVHOwotCi0jZGVmaW5lIEtUU0JfU1RPUkUoQUREUiwgVkFMKSBcCi0Jc3R4YQkJVkFMLCBbQUREUl0gQVNJX047Ci0KLSNkZWZpbmUgS1RTQl9MT0NLX1RBRyhUU0IsIFJFRzEsIFJFRzIpCVwKLTk5OglsZHV3YQlbVFNCXSBBU0lfTiwgUkVHMTsJXAotCXNldGhpCSVoaShUU0JfVEFHX0xPQ0tfSElHSCksIFJFRzI7XAotCWFuZGNjCVJFRzEsIFJFRzIsICVnMDsJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCWNhc2EJW1RTQl0gQVNJX04sIFJFRzEsIFJFRzI7XAotCWNtcAlSRUcxLCBSRUcyOwkJXAotCWJuZSxwbgklaWNjLCA5OWI7CQlcCi0JIG5vcDsJCQkJXAotCi0jZGVmaW5lIEtUU0JfV1JJVEUoVFNCLCBUVEUsIFRBRykgXAotCWFkZAlUU0IsIDB4OCwgVFNCOyAgIFwKLQlzdHhhCVRURSwgW1RTQl0gQVNJX047ICAgICBcCi0Jc3ViCVRTQiwgMHg4LCBUU0I7ICAgXAotCXN0eGEJVEFHLCBbVFNCXSBBU0lfTjsKLQogCS8qIERvIGEga2VybmVsIHBhZ2UgdGFibGUgd2Fsay4gIExlYXZlcyBwaHlzaWNhbCBQVEUgcG9pbnRlciBpbgogCSAqIFJFRzEuICBKdW1wcyB0byBGQUlMX0xBQkVMIG9uIGVhcmx5IHBhZ2UgdGFibGUgd2FsayB0ZXJtaW5hdGlvbi4KIAkgKiBWQUREUiB3aWxsIG5vdCBiZSBjbG9iYmVyZWQsIGJ1dCBSRUcyIHdpbGwuCkBAIC0yMzksNiArMjE2LDggQEAKIAkoS0VSTkVMX1RTQl9TSVpFX0JZVEVTIC8gMTYpCiAjZGVmaW5lIEtFUk5FTF9UU0I0TV9ORU5UUklFUwk0MDk2CiAKKyNkZWZpbmUgS1RTQl9QSFlTX1NISUZUCQkxNQorCiAJLyogRG8gYSBrZXJuZWwgVFNCIGxvb2t1cCBhdCB0bD4wIG9uIFZBRERSK1RBRywgYnJhbmNoIHRvIE9LX0xBQkVMCiAJICogb24gVFNCIGhpdC4gIFJFRzEsIFJFRzIsIFJFRzMsIGFuZCBSRUc0IGFyZSB1c2VkIGFzIHRlbXBvcmFyaWVzCiAJICogYW5kIHRoZSBmb3VuZCBUVEUgd2lsbCBiZSBsZWZ0IGluIFJFRzEuICBSRUczIGFuZCBSRUc0IG11c3QKQEAgLTI0NywxMyArMjI2LDIyIEBACiAJICogVkFERFIgYW5kIFRBRyB3aWxsIGJlIHByZXNlcnZlZCBhbmQgbm90IGNsb2JiZXJlZCBieSB0aGlzIG1hY3JvLgogCSAqLwogI2RlZmluZSBLRVJOX1RTQl9MT09LVVBfVEwxKFZBRERSLCBUQUcsIFJFRzEsIFJFRzIsIFJFRzMsIFJFRzQsIE9LX0xBQkVMKSBcCi0Jc2V0aGkJCSVoaShzd2FwcGVyX3RzYiksIFJFRzE7IFwKKzY2MToJc2V0aGkJCSVoaShzd2FwcGVyX3RzYiksIFJFRzE7CQkJXAogCW9yCQlSRUcxLCAlbG8oc3dhcHBlcl90c2IpLCBSRUcxOyBcCisJLnNlY3Rpb24JLnN3YXBwZXJfdHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKKwkud29yZAkJNjYxYjsgXAorCS5wcmV2aW91czsgXAorNjYxOglub3A7IFwKKwkuc2VjdGlvbgkudHNiX2xkcXVhZF9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwlzbGx4CQlSRUcxLCBLVFNCX1BIWVNfU0hJRlQsIFJFRzE7IFwKKwlzbGx4CQlSRUcxLCBLVFNCX1BIWVNfU0hJRlQsIFJFRzE7IFwKKwkucHJldmlvdXM7IFwKIAlzcmx4CQlWQUREUiwgUEFHRV9TSElGVCwgUkVHMjsgXAogCWFuZAkJUkVHMiwgKEtFUk5FTF9UU0JfTkVOVFJJRVMgLSAxKSwgUkVHMjsgXAogCXNsbHgJCVJFRzIsIDQsIFJFRzI7IFwKIAlhZGQJCVJFRzEsIFJFRzIsIFJFRzI7IFwKLQlLVFNCX0xPQURfUVVBRChSRUcyLCBSRUczKTsgXAorCVRTQl9MT0FEX1FVQUQoUkVHMiwgUkVHMyk7IFwKIAljbXAJCVJFRzMsIFRBRzsgXAogCWJlLGEscHQJCSV4Y2MsIE9LX0xBQkVMOyBcCiAJIG1vdgkJUkVHNCwgUkVHMTsKQEAgLTI2MywxMiArMjUxLDIxIEBACiAJICogd2UgY2FuIG1ha2UgdXNlIG9mIHRoYXQgZm9yIHRoZSBpbmRleCBjb21wdXRhdGlvbi4KIAkgKi8KICNkZWZpbmUgS0VSTl9UU0I0TV9MT09LVVBfVEwxKFRBRywgUkVHMSwgUkVHMiwgUkVHMywgUkVHNCwgT0tfTEFCRUwpIFwKLQlzZXRoaQkJJWhpKHN3YXBwZXJfNG1fdHNiKSwgUkVHMTsgXAorNjYxOglzZXRoaQkJJWhpKHN3YXBwZXJfNG1fdHNiKSwgUkVHMTsJICAgICBcCiAJb3IJCVJFRzEsICVsbyhzd2FwcGVyXzRtX3RzYiksIFJFRzE7IFwKKwkuc2VjdGlvbgkuc3dhcHBlcl80bV90c2JfcGh5c19wYXRjaCwgImF4IjsgXAorCS53b3JkCQk2NjFiOyBcCisJLnByZXZpb3VzOyBcCis2NjE6CW5vcDsgXAorCS5zZWN0aW9uCS50c2JfbGRxdWFkX3BoeXNfcGF0Y2gsICJheCI7IFwKKwkud29yZAkJNjYxYjsgXAorCXNsbHgJCVJFRzEsIEtUU0JfUEhZU19TSElGVCwgUkVHMTsgXAorCXNsbHgJCVJFRzEsIEtUU0JfUEhZU19TSElGVCwgUkVHMTsgXAorCS5wcmV2aW91czsgXAogCWFuZAkJVEFHLCAoS0VSTkVMX1RTQjRNX05FTlRSSUVTIC0gMSksIFJFRzI7IFwKIAlzbGx4CQlSRUcyLCA0LCBSRUcyOyBcCiAJYWRkCQlSRUcxLCBSRUcyLCBSRUcyOyBcCi0JS1RTQl9MT0FEX1FVQUQoUkVHMiwgUkVHMyk7IFwKKwlUU0JfTE9BRF9RVUFEKFJFRzIsIFJFRzMpOyBcCiAJY21wCQlSRUczLCBUQUc7IFwKIAliZSxhLHB0CQkleGNjLCBPS19MQUJFTDsgXAogCSBtb3YJCVJFRzQsIFJFRzE7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCmluZGV4IGI5MGI0YTEuLmNiODU0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlCkBAIC0zMiw2ICszMiw3IEBACiAKIG9iai15ICAgICAgICAgICAgICAgICAgICs9IHByb2Nlc3NfJChCSVRTKS5vCiBvYmoteSAgICAgICAgICAgICAgICAgICArPSBzaWduYWxfJChCSVRTKS5vCitvYmoteSAgICAgICAgICAgICAgICAgICArPSBzaWd1dGlsXyQoQklUUykubwogb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gaW9wb3J0Lm8KIG9iai15ICAgICAgICAgICAgICAgICAgICs9IHNldHVwXyQoQklUUykubwogb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gaWRwcm9tLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2NwdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKaW5kZXggMTdjZjI5MC4uOTgxMGZkOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMKQEAgLTM5Niw2ICszOTYsNyBAQAogCQkgICAsIGNwdV9kYXRhKDApLmNsb2NrX3RpY2sKICNlbmRpZgogCQkpOworCWNwdWNhcF9pbmZvKG0pOwogI2lmZGVmIENPTkZJR19TTVAKIAlzbXBfYm9nbyhtKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RzLmMKaW5kZXggZGQxMzQyYy4uNzQyOWI0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jCkBAIC0xNSwxMiArMTUsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL2xkYy5oPgogI2luY2x1ZGUgPGFzbS92aW8uaD4KICNpbmNsdWRlIDxhc20vbWRlc2MuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAorI2luY2x1ZGUgImtlcm5lbC5oIgorCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImRzIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKICNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjAiCkBAIC04MjgsMTggKzgzMSwzMiBAQAogCX0KIH0KIAorc3RhdGljIGNoYXIgZnVsbF9ib290X3N0clsyNTZdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSk7CitzdGF0aWMgaW50IHJlYm9vdF9kYXRhX3N1cHBvcnRlZDsKKwogdm9pZCBsZG9tX3JlYm9vdChjb25zdCBjaGFyICpib290X2NvbW1hbmQpCiB7CiAJLyogRG9uJ3QgYm90aGVyIHdpdGggYW55IG9mIHRoaXMgaWYgdGhlIGJvb3RfY29tbWFuZAogCSAqIGlzIGVtcHR5LgogCSAqLwogCWlmIChib290X2NvbW1hbmQgJiYgc3RybGVuKGJvb3RfY29tbWFuZCkpIHsKLQkJY2hhciBmdWxsX2Jvb3Rfc3RyWzI1Nl07CisJCXVuc2lnbmVkIGxvbmcgbGVuOwogCiAJCXN0cmNweShmdWxsX2Jvb3Rfc3RyLCAiYm9vdCAiKTsKIAkJc3RyY3B5KGZ1bGxfYm9vdF9zdHIgKyBzdHJsZW4oImJvb3QgIiksIGJvb3RfY29tbWFuZCk7CisJCWxlbiA9IHN0cmxlbihmdWxsX2Jvb3Rfc3RyKTsKIAotCQlsZG9tX3NldF92YXIoInJlYm9vdC1jb21tYW5kIiwgZnVsbF9ib290X3N0cik7CisJCWlmIChyZWJvb3RfZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcmEgPSBraW1hZ2VfYWRkcl90b19yYShmdWxsX2Jvb3Rfc3RyKTsKKwkJCXVuc2lnbmVkIGxvbmcgaHZfcmV0OworCisJCQlodl9yZXQgPSBzdW40dl9yZWJvb3RfZGF0YV9zZXQocmEsIGxlbik7CisJCQlpZiAoaHZfcmV0ICE9IEhWX0VPSykKKwkJCQlwcl9lcnIoIlNVTjRWOiBVbmFibGUgdG8gc2V0IHJlYm9vdCBkYXRhICIKKwkJCQkgICAgICAgImh2X3JldD0lbHVcbiIsIGh2X3JldCk7CisJCX0gZWxzZSB7CisJCQlsZG9tX3NldF92YXIoInJlYm9vdC1jb21tYW5kIiwgZnVsbF9ib290X3N0cik7CisJCX0KIAl9CiAJc3VuNHZfbWFjaF9zaXIoKTsKIH0KQEAgLTEyMzcsNiArMTI1NCwxNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkc19pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBodl9yZXQsIG1ham9yLCBtaW5vcjsKKworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCWh2X3JldCA9IHN1bjR2X2dldF92ZXJzaW9uKEhWX0dSUF9SRUJPT1RfREFUQSwgJm1ham9yLCAmbWlub3IpOworCQlpZiAoaHZfcmV0ID09IEhWX0VPSykgeworCQkJcHJfaW5mbygiU1VONFY6IFJlYm9vdCBkYXRhIHN1cHBvcnRlZCAobWFqPSVsdSxtaW49JWx1KS5cbiIsCisJCQkJbWFqb3IsIG1pbm9yKTsKKwkJCXJlYm9vdF9kYXRhX3N1cHBvcnRlZCA9IDE7CisJCX0KKwl9CiAJa3RocmVhZF9ydW4oZHNfdGhyZWFkLCBOVUxMLCAia2xkb21kIik7CiAKIAlyZXR1cm4gdmlvX3JlZ2lzdGVyX2RyaXZlcigmZHNfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LmggYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5oCmluZGV4IGQxZjEzNjEuLmUyN2Y4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuaApAQCAtNDIsNiArNDIsMjAgQEAKIGV4dGVybiB2b2lkIGZwbG9hZCh1bnNpZ25lZCBsb25nICpmcHJlZ3MsIHVuc2lnbmVkIGxvbmcgKmZzcik7CiAKICNlbHNlIC8qIENPTkZJR19TUEFSQzMyICovCitzdHJ1Y3QgcG9wY18zaW5zbl9wYXRjaF9lbnRyeSB7CisJdW5zaWduZWQgaW50CWFkZHI7CisJdW5zaWduZWQgaW50CWluc25zWzNdOworfTsKK2V4dGVybiBzdHJ1Y3QgcG9wY18zaW5zbl9wYXRjaF9lbnRyeSBfX3BvcGNfM2luc25fcGF0Y2gsCisJX19wb3BjXzNpbnNuX3BhdGNoX2VuZDsKKworc3RydWN0IHBvcGNfNmluc25fcGF0Y2hfZW50cnkgeworCXVuc2lnbmVkIGludAlhZGRyOworCXVuc2lnbmVkIGludAlpbnNuc1s2XTsKK307CitleHRlcm4gc3RydWN0IHBvcGNfNmluc25fcGF0Y2hfZW50cnkgX19wb3BjXzZpbnNuX3BhdGNoLAorCV9fcG9wY182aW5zbl9wYXRjaF9lbmQ7CisKIGV4dGVybiB2b2lkIF9faW5pdCBwZXJfY3B1X3BhdGNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHN1bjR2X3BhdGNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGJvb3RfY3B1X2lkX3Rvb19sYXJnZShpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUwppbmRleCBjNzUyNjAzLi4wZWFjMWIyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCkBAIC01NTksNyArNTU5LDcgQEAKIAkgbm9wCiAJY2FsbAluaWFnYXJhX3BhdGNoX2J6ZXJvCiAJIG5vcAotCWNhbGwJbmlhZ2FyYTJfcGF0Y2hfcGFnZW9wcworCWNhbGwJbmlhZ2FyYV9wYXRjaF9wYWdlb3BzCiAJIG5vcAogCiAJYmEsYSxwdAkleGNjLCA4MGYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2h2YXBpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9odmFwaS5jCmluZGV4IGQzMDZlNjQuLmMyZDA1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2h2YXBpLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaHZhcGkuYwpAQCAtMjgsMTEgKzI4LDE3IEBACiAJeyAuZ3JvdXAgPSBIVl9HUlBfQ09SRSwJCS5mbGFncyA9IEZMQUdfUFJFX0FQSQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX0lOVFIsCQkJCQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX1NPRlRfU1RBVEUsCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfVE0sCQkJCQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX1BDSSwJCS5mbGFncyA9IEZMQUdfUFJFX0FQSQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX0xET00sCQkJCQl9LAogCXsgLmdyb3VwID0gSFZfR1JQX1NWQ19DSEFOLAkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKIAl7IC5ncm91cCA9IEhWX0dSUF9OQ1MsCQkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKIAl7IC5ncm91cCA9IEhWX0dSUF9STkcsCQkJCQl9LAorCXsgLmdyb3VwID0gSFZfR1JQX1BCT09ULAkJCQl9LAorCXsgLmdyb3VwID0gSFZfR1JQX1RQTSwJCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfU0RJTywJCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfU0RJT19FUlIsCQkJCX0sCisJeyAuZ3JvdXAgPSBIVl9HUlBfUkVCT09UX0RBVEEsCQkJCX0sCiAJeyAuZ3JvdXAgPSBIVl9HUlBfTklBR19QRVJGLAkuZmxhZ3MgPSBGTEFHX1BSRV9BUEkJfSwKIAl7IC5ncm91cCA9IEhWX0dSUF9GSVJFX1BFUkYsCQkJCX0sCiAJeyAuZ3JvdXAgPSBIVl9HUlBfTjJfQ1BVLAkJCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaHZjYWxscy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaHZjYWxscy5TCmluZGV4IDhhNWYzNWYuLjU4ZDYwZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2h2Y2FsbHMuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9odmNhbGxzLlMKQEAgLTc5OCwzICs3OTgsMTAgQEAKIAlyZXRsCiAJIG5vcAogRU5EUFJPQyhzdW40dl9uaWFnYXJhMl9zZXRwZXJmKQorCitFTlRSWShzdW40dl9yZWJvb3RfZGF0YV9zZXQpCisJbW92CUhWX0ZBU1RfUkVCT09UX0RBVEFfU0VULCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorRU5EUFJPQyhzdW40dl9yZWJvb3RfZGF0YV9zZXQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCmluZGV4IDZmZmNjZDYuLmQwNDc5ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCkBAIC02NSw5ICs2NSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqX3NwYXJjX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpOwotCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpfc3BhcmNfaW9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIGJ1cywgdTMyIHBhLCBpbnQgc3opOwogc3RhdGljIHZvaWQgX19pb21lbSAqX3NwYXJjX2FsbG9jX2lvKHVuc2lnbmVkIGludCBidXNubywgdW5zaWduZWQgbG9uZyBwaHlzLAogICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY2hhciAqbmFtZSk7CkBAIC0xNDMsNyArMTQwLDExIEBACiAJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0dWFsICYgUEFHRV9NQVNLOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0JaWYgKChyZXMgPSBfc3BhcmNfZmluZF9yZXNvdXJjZSgmc3BhcmNfaW9tYXAsIHZhZGRyKSkgPT0gTlVMTCkgeworCS8qCisJICogWFhYIFRvbyBzbG93LiBDYW4gaGF2ZSA4MTkyIERWTUEgcGFnZXMgb24gc3VuNG0gaW4gdGhlIHdvcnN0IGNhc2UuCisJICogVGhpcyBwcm9iYWJseSB3YXJyYW50cyBzb21lIHNvcnQgb2YgaGFzaGluZy4KKwkqLworCWlmICgocmVzID0gbG9va3VwX3Jlc291cmNlKCZzcGFyY19pb21hcCwgdmFkZHIpKSA9PSBOVUxMKSB7CiAJCXByaW50aygiZnJlZV9pby9pb3VubWFwOiBjYW5ub3QgZnJlZSAlbHhcbiIsIHZhZGRyKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMxOSw3ICszMjAsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwYWdlICpwZ3Y7CiAKLQlpZiAoKHJlcyA9IF9zcGFyY19maW5kX3Jlc291cmNlKCZfc3BhcmNfZHZtYSwKKwlpZiAoKHJlcyA9IGxvb2t1cF9yZXNvdXJjZSgmX3NwYXJjX2R2bWEsCiAJICAgICh1bnNpZ25lZCBsb25nKXApKSA9PSBOVUxMKSB7CiAJCXByaW50aygic2J1c19mcmVlX2NvbnNpc3RlbnQ6IGNhbm5vdCBmcmVlICVwXG4iLCBwKTsKIAkJcmV0dXJuOwpAQCAtNDkyLDcgKzQ5Myw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQlpZiAoKHJlcyA9IF9zcGFyY19maW5kX3Jlc291cmNlKCZfc3BhcmNfZHZtYSwKKwlpZiAoKHJlcyA9IGxvb2t1cF9yZXNvdXJjZSgmX3NwYXJjX2R2bWEsCiAJICAgICh1bnNpZ25lZCBsb25nKXApKSA9PSBOVUxMKSB7CiAJCXByaW50aygicGNpX2ZyZWVfY29uc2lzdGVudDogY2Fubm90IGZyZWUgJXBcbiIsIHApOwogCQlyZXR1cm47CkBAIC03MTUsMjUgKzcxNiw2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKLS8qCi0gKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBmaW5kX3Jlc291cmNlIGFuZCBpdCBiZWxvbmdzIHRvIGtlcm5lbC9yZXNvdXJjZS5jLgotICogVW50aWwgd2UgaGF2ZSBhZ3JlZW1lbnQgd2l0aCBMaW51cyBhbmQgTWFydGluLCBpdCBsaW5nZXJzIGhlcmUuCi0gKgotICogWFhYIFRvbyBzbG93LiBDYW4gaGF2ZSA4MTkyIERWTUEgcGFnZXMgb24gc3VuNG0gaW4gdGhlIHdvcnN0IGNhc2UuCi0gKiBUaGlzIHByb2JhYmx5IHdhcnJhbnRzIHNvbWUgc29ydCBvZiBoYXNoaW5nLgotICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlICpfc3BhcmNfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBoaXQpCi17Ci0Jc3RydWN0IHJlc291cmNlICp0bXA7Ci0KLQlmb3IgKHRtcCA9IHJvb3QtPmNoaWxkOyB0bXAgIT0gMDsgdG1wID0gdG1wLT5zaWJsaW5nKSB7Ci0JCWlmICh0bXAtPnN0YXJ0IDw9IGhpdCAmJiB0bXAtPmVuZCA+PSBoaXQpCi0JCQlyZXR1cm4gdG1wOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgcmVnaXN0ZXJfcHJvY19zcGFyY19pb3BvcnQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuaAppbmRleCAxMDBiOWMyLi40Mjg1MTEyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuaAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuaApAQCAtODgsNyArODgsNyBAQAogI2RlZmluZSBzZXRfaXJxX3VkdChjcHUpIEJURklYVVBfQ0FMTChzZXRfaXJxX3VkdCkoY3B1KQogCiAvKiBBbGwgU1VONEQgSVBJcyBhcmUgc2VudCBvbiB0aGlzIElSUSwgbWF5IGJlIHNoYXJlZCB3aXRoIGhhcmQgSVJRcyAqLwotI2RlZmluZSBTVU40RF9JUElfSVJRIDE0CisjZGVmaW5lIFNVTjREX0lQSV9JUlEgMTMKIAogZXh0ZXJuIHZvaWQgc3VuNGRfaXBpX2ludGVycnVwdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva2VybmVsLmggYi9hcmNoL3NwYXJjL2tlcm5lbC9rZXJuZWwuaAppbmRleCA2ZjY1NDRjLi5mZDZjMzZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9rZXJuZWwuaAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9rZXJuZWwuaApAQCAtNCwxMiArNCwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2hlYWQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogY3B1LmMgKi8KIGV4dGVybiBjb25zdCBjaGFyICpzcGFyY19wbXVfdHlwZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZnNyX3N0b3JhZ2U7CiBleHRlcm4gaW50IG5jcHVzX3Byb2JlZDsKIAorI2lmZGVmIENPTkZJR19TUEFSQzY0CisvKiBzZXR1cF82NC5jICovCitzdHJ1Y3Qgc2VxX2ZpbGU7CitleHRlcm4gdm9pZCBjcHVjYXBfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBraW1hZ2VfYWRkcl90b19yYShjb25zdCBjaGFyICpwKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpIHA7CisKKwlyZXR1cm4ga2Vybl9iYXNlICsgKHZhbCAtIEtFUk5CQVNFKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NQQVJDMzIKIC8qIGNwdS5jICovCiBleHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMKaW5kZXggMWQzNjE0Ny4uNzlmMzEwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUwpAQCAtNDcsMTYgKzQ3LDE2IEBACiBrdm1hcF9pdGxiX3ZtYWxsb2NfYWRkcjoKIAlLRVJOX1BHVEFCTEVfV0FMSyglZzQsICVnNSwgJWcyLCBrdm1hcF9pdGxiX2xvbmdwYXRoKQogCi0JS1RTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQorCVRTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQogCiAJLyogTG9hZCBhbmQgY2hlY2sgUFRFLiAgKi8KIAlsZHhhCQlbJWc1XSBBU0lfUEhZU19VU0VfRUMsICVnNQogCW1vdgkJMSwgJWc3CiAJc2xseAkJJWc3LCBUU0JfVEFHX0lOVkFMSURfQklULCAlZzcKIAlicmdleixhLHBuCSVnNSwga3ZtYXBfaXRsYl9sb25ncGF0aAotCSBLVFNCX1NUT1JFKCVnMSwgJWc3KQorCSBUU0JfU1RPUkUoJWcxLCAlZzcpCiAKLQlLVFNCX1dSSVRFKCVnMSwgJWc1LCAlZzYpCisJVFNCX1dSSVRFKCVnMSwgJWc1LCAlZzYpCiAKIAkvKiBmYWxsdGhyb3VnaCB0byBUTEIgbG9hZCAqLwogCkBAIC0xMDIsOSArMTAyLDkgQEAKIGt2bWFwX2l0bGJfb2JwOgogCU9CUF9UUkFOU19MT09LVVAoJWc0LCAlZzUsICVnMiwgJWczLCBrdm1hcF9pdGxiX2xvbmdwYXRoKQogCi0JS1RTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQorCVRTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQogCi0JS1RTQl9XUklURSglZzEsICVnNSwgJWc2KQorCVRTQl9XUklURSglZzEsICVnNSwgJWc2KQogCiAJYmEscHQJCSV4Y2MsIGt2bWFwX2l0bGJfbG9hZAogCSBub3AKQEAgLTExMiwxNyArMTEyLDE3IEBACiBrdm1hcF9kdGxiX29icDoKIAlPQlBfVFJBTlNfTE9PS1VQKCVnNCwgJWc1LCAlZzIsICVnMywga3ZtYXBfZHRsYl9sb25ncGF0aCkKIAotCUtUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKKwlUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKIAotCUtUU0JfV1JJVEUoJWcxLCAlZzUsICVnNikKKwlUU0JfV1JJVEUoJWcxLCAlZzUsICVnNikKIAogCWJhLHB0CQkleGNjLCBrdm1hcF9kdGxiX2xvYWQKIAkgbm9wCiAKIAkuYWxpZ24JCTMyCiBrdm1hcF9kdGxiX3RzYjRtX2xvYWQ6Ci0JS1RTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQotCUtUU0JfV1JJVEUoJWcxLCAlZzUsICVnNikKKwlUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKKwlUU0JfV1JJVEUoJWcxLCAlZzUsICVnNikKIAliYSxwdAkJJXhjYywga3ZtYXBfZHRsYl9sb2FkCiAJIG5vcAogCkBAIC0yMjIsMTYgKzIyMiwxNiBAQAoga3ZtYXBfZHRsYl92bWFsbG9jX2FkZHI6CiAJS0VSTl9QR1RBQkxFX1dBTEsoJWc0LCAlZzUsICVnMiwga3ZtYXBfZHRsYl9sb25ncGF0aCkKIAotCUtUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKKwlUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKIAogCS8qIExvYWQgYW5kIGNoZWNrIFBURS4gICovCiAJbGR4YQkJWyVnNV0gQVNJX1BIWVNfVVNFX0VDLCAlZzUKIAltb3YJCTEsICVnNwogCXNsbHgJCSVnNywgVFNCX1RBR19JTlZBTElEX0JJVCwgJWc3CiAJYnJnZXosYSxwbgklZzUsIGt2bWFwX2R0bGJfbG9uZ3BhdGgKLQkgS1RTQl9TVE9SRSglZzEsICVnNykKKwkgVFNCX1NUT1JFKCVnMSwgJWc3KQogCi0JS1RTQl9XUklURSglZzEsICVnNSwgJWc2KQorCVRTQl9XUklURSglZzEsICVnNSwgJWc2KQogCiAJLyogZmFsbHRocm91Z2ggdG8gVExCIGxvYWQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYwppbmRleCA0NGRjMDkzLi5mYWQxYmQwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiBERUZJTkVfU1BJTkxPQ0soZ3JwY2kyX2Rldl9sb2NrKTsKIHN0cnVjdCBncnBjaTJfcHJpdiAqZ3JwY2kycHJpdjsKIAotaW50IGdycGNpMl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK2ludCBncnBjaTJfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZGV2LT5idXMtPnN5c2RhdGE7CiAJaW50IGlycV9ncm91cDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCmluZGV4IDQyZjI4YzcuLmFjYWViYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYwpAQCAtNTA4LDYgKzUwOCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1kZXNjX25vZGVfbmFtZSk7CiAKK3N0YXRpYyB1NjQgbWF4X2NwdXMgPSA2NDsKKwogc3RhdGljIHZvaWQgX19pbml0IHJlcG9ydF9wbGF0Zm9ybV9wcm9wZXJ0aWVzKHZvaWQpCiB7CiAJc3RydWN0IG1kZXNjX2hhbmRsZSAqaHAgPSBtZGVzY19ncmFiKCk7CkBAIC01NDMsOCArNTQ1LDEwIEBACiAJaWYgKHYpCiAJCXByaW50aygiUExBVEZPUk06IHdhdGNoZG9nLW1heC10aW1lb3V0IFslbGx1IG1zXVxuIiwgKnYpOwogCXYgPSBtZGVzY19nZXRfcHJvcGVydHkoaHAsIHBuLCAibWF4LWNwdXMiLCBOVUxMKTsKLQlpZiAodikKLQkJcHJpbnRrKCJQTEFURk9STTogbWF4LWNwdXMgWyVsbHVdXG4iLCAqdik7CisJaWYgKHYpIHsKKwkJbWF4X2NwdXMgPSAqdjsKKwkJcHJpbnRrKCJQTEFURk9STTogbWF4LWNwdXMgWyVsbHVdXG4iLCBtYXhfY3B1cyk7CisJfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCXsKQEAgLTcxNSw3ICs3MTksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZ2V0X29uZV9tb25kb19iaXRzKGNvbnN0IHU2NCAqcCwgdW5zaWduZWQgaW50ICptYXNrLAotCQkJCQkgdW5zaWduZWQgY2hhciBkZWYpCisJCQkJCSB1bnNpZ25lZCBsb25nIGRlZiwgdW5zaWduZWQgbG9uZyBtYXgpCiB7CiAJdTY0IHZhbDsKIApAQCAtNzI2LDYgKzczMCw5IEBACiAJaWYgKCF2YWwgfHwgdmFsID49IDY0KQogCQlnb3RvIHVzZV9kZWZhdWx0OwogCisJaWYgKHZhbCA+IG1heCkKKwkJdmFsID0gbWF4OworCiAJKm1hc2sgPSAoKDFVIDw8IHZhbCkgKiA2NFUpIC0gMVU7CiAJcmV0dXJuOwogCkBAIC03MzYsMTkgKzc0MywyOCBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IGdldF9tb25kb19kYXRhKHN0cnVjdCBtZGVzY19oYW5kbGUgKmhwLCB1NjQgbXAsCiAJCQkJICAgICBzdHJ1Y3QgdHJhcF9wZXJfY3B1ICp0YikKIHsKKwlzdGF0aWMgaW50IHByaW50ZWQ7CiAJY29uc3QgdTY0ICp2YWw7CiAKIAl2YWwgPSBtZGVzY19nZXRfcHJvcGVydHkoaHAsIG1wLCAicS1jcHUtbW9uZG8tI2JpdHMiLCBOVUxMKTsKLQlnZXRfb25lX21vbmRvX2JpdHModmFsLCAmdGItPmNwdV9tb25kb19xbWFzaywgNyk7CisJZ2V0X29uZV9tb25kb19iaXRzKHZhbCwgJnRiLT5jcHVfbW9uZG9fcW1hc2ssIDcsIGlsb2cyKG1heF9jcHVzICogMikpOwogCiAJdmFsID0gbWRlc2NfZ2V0X3Byb3BlcnR5KGhwLCBtcCwgInEtZGV2LW1vbmRvLSNiaXRzIiwgTlVMTCk7Ci0JZ2V0X29uZV9tb25kb19iaXRzKHZhbCwgJnRiLT5kZXZfbW9uZG9fcW1hc2ssIDcpOworCWdldF9vbmVfbW9uZG9fYml0cyh2YWwsICZ0Yi0+ZGV2X21vbmRvX3FtYXNrLCA3LCA4KTsKIAogCXZhbCA9IG1kZXNjX2dldF9wcm9wZXJ0eShocCwgbXAsICJxLXJlc3VtYWJsZS0jYml0cyIsIE5VTEwpOwotCWdldF9vbmVfbW9uZG9fYml0cyh2YWwsICZ0Yi0+cmVzdW1fcW1hc2ssIDYpOworCWdldF9vbmVfbW9uZG9fYml0cyh2YWwsICZ0Yi0+cmVzdW1fcW1hc2ssIDYsIDcpOwogCiAJdmFsID0gbWRlc2NfZ2V0X3Byb3BlcnR5KGhwLCBtcCwgInEtbm9ucmVzdW1hYmxlLSNiaXRzIiwgTlVMTCk7Ci0JZ2V0X29uZV9tb25kb19iaXRzKHZhbCwgJnRiLT5ub25yZXN1bV9xbWFzaywgMik7CisJZ2V0X29uZV9tb25kb19iaXRzKHZhbCwgJnRiLT5ub25yZXN1bV9xbWFzaywgMiwgMik7CisJaWYgKCFwcmludGVkKyspIHsKKwkJcHJfaW5mbygiU1VONFY6IE1vbmRvIHF1ZXVlIHNpemVzICIKKwkJCSJbY3B1KCV1KSBkZXYoJXUpIHIoJXUpIG5yKCV1KV1cbiIsCisJCQl0Yi0+Y3B1X21vbmRvX3FtYXNrICsgMSwKKwkJCXRiLT5kZXZfbW9uZG9fcW1hc2sgKyAxLAorCQkJdGItPnJlc3VtX3FtYXNrICsgMSwKKwkJCXRiLT5ub25yZXN1bV9xbWFzayArIDEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgKiBfX2NwdWluaXQgbWRlc2NfaXRlcmF0ZV9vdmVyX2NwdXModm9pZCAqKCpmdW5jKShzdHJ1Y3QgbWRlc2NfaGFuZGxlICosIHU2NCwgaW50LCB2b2lkICopLCB2b2lkICphcmcsIGNwdW1hc2tfdCAqbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYwppbmRleCBhMTlmMDQxLi4xYWFmOGMxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCkBAIC0zNTIsOCArMzUyLDggQEAKIAlzdHJjcHkocGJtLT5wcm9tX25hbWUsIG5hbWVidWYpOwogCiAJewotCQlleHRlcm4gdm9sYXRpbGUgaW50IHRfbm1pWzFdOwotCQlleHRlcm4gaW50IHBjaWNfbm1pX3RyYXBfcGF0Y2hbMV07CisJCWV4dGVybiB2b2xhdGlsZSBpbnQgdF9ubWlbNF07CisJCWV4dGVybiBpbnQgcGNpY19ubWlfdHJhcF9wYXRjaFs0XTsKIAogCQl0X25taVswXSA9IHBjaWNfbm1pX3RyYXBfcGF0Y2hbMF07CiAJCXRfbm1pWzFdID0gcGNpY19ubWlfdHJhcF9wYXRjaFsxXTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IGM0ZGQwOTkuLjNjNWJiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNDYsNiArNDcsOCBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vbnM4NzMwMy5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgorI2luY2x1ZGUgPGFzbS9lbGYuaD4KKyNpbmNsdWRlIDxhc20vbWRlc2MuaD4KIAogI2lmZGVmIENPTkZJR19JUF9QTlAKICNpbmNsdWRlIDxuZXQvaXBjb25maWcuaD4KQEAgLTI2OSw2ICsyNzIsNDAgQEAKIAlzdW40dl9odmFwaV9pbml0KCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwb3BjX3BhdGNoKHZvaWQpCit7CisJc3RydWN0IHBvcGNfM2luc25fcGF0Y2hfZW50cnkgKnAzOworCXN0cnVjdCBwb3BjXzZpbnNuX3BhdGNoX2VudHJ5ICpwNjsKKworCXAzID0gJl9fcG9wY18zaW5zbl9wYXRjaDsKKwl3aGlsZSAocDMgPCAmX19wb3BjXzNpbnNuX3BhdGNoX2VuZCkgeworCQl1bnNpZ25lZCBsb25nIGksIGFkZHIgPSBwMy0+YWRkcjsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkqKHVuc2lnbmVkIGludCAqKSAoYWRkciArICAoaSAqIDQpKSA9IHAzLT5pbnNuc1tpXTsKKwkJCXdtYigpOworCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNoCSUwIgorCQkJCQkgICAgIDogOiAiciIgKGFkZHIgKyAgKGkgKiA0KSkpOworCQl9CisKKwkJcDMrKzsKKwl9CisKKwlwNiA9ICZfX3BvcGNfNmluc25fcGF0Y2g7CisJd2hpbGUgKHA2IDwgJl9fcG9wY182aW5zbl9wYXRjaF9lbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBpLCBhZGRyID0gcDYtPmFkZHI7CisKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJKih1bnNpZ25lZCBpbnQgKikgKGFkZHIgKyAgKGkgKiA0KSkgPSBwNi0+aW5zbnNbaV07CisJCQl3bWIoKTsKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaAklMCIKKwkJCQkJICAgICA6IDogInIiIChhZGRyICsgIChpICogNCkpKTsKKwkJfQorCisJCXA2Kys7CisJfQorfQorCiAjaWZkZWYgQ09ORklHX1NNUAogdm9pZCBfX2luaXQgYm9vdF9jcHVfaWRfdG9vX2xhcmdlKGludCBjcHUpCiB7CkBAIC0yNzgsNiArMzE1LDE2MCBAQAogfQogI2VuZGlmCiAKKy8qIE9uIFVsdHJhLCB3ZSBzdXBwb3J0IGFsbCBvZiB0aGUgdjggY2FwYWJpbGl0aWVzLiAqLwordW5zaWduZWQgbG9uZyBzcGFyYzY0X2VsZl9od2NhcCA9IChIV0NBUF9TUEFSQ19GTFVTSCB8IEhXQ0FQX1NQQVJDX1NUQkFSIHwKKwkJCQkgICBIV0NBUF9TUEFSQ19TV0FQIHwgSFdDQVBfU1BBUkNfTVVMRElWIHwKKwkJCQkgICBIV0NBUF9TUEFSQ19WOSk7CitFWFBPUlRfU1lNQk9MKHNwYXJjNjRfZWxmX2h3Y2FwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2Fwc1tdID0geworCSJmbHVzaCIsICJzdGJhciIsICJzd2FwIiwgIm11bGRpdiIsICJ2OSIsCisJInVsdHJhMyIsICJibGtpbml0IiwgIm4yIiwKKworCS8qIFRoZXNlIHN0cmluZ3MgYXJlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uCisJICogJ2h3Y2FwLWxpc3QnIHByb3BlcnR5IGZvciBjcHUgbm9kZXMuCisJICovCisJIm11bDMyIiwgImRpdjMyIiwgImZzbXVsZCIsICJ2OHBsdXMiLCAicG9wYyIsICJ2aXMiLCAidmlzMiIsCisJIkFTSUJsa0luaXQiLCAiZm1hZiIsICJ2aXMzIiwgImhwYyIsICJyYW5kb20iLCAidHJhbnMiLCAiZmpmbWF1IiwKKwkiaW1hIiwgImNzcGFyZSIsCit9OworCit2b2lkIGNwdWNhcF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1bnNpZ25lZCBsb25nIGNhcHMgPSBzcGFyYzY0X2VsZl9od2NhcDsKKwlpbnQgaSwgcHJpbnRlZCA9IDA7CisKKwlzZXFfcHV0cyhtLCAiY3B1Y2Fwc1x0XHQ6ICIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3Y2Fwcyk7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCBpOworCQlpZiAoY2FwcyAmIGJpdCkgeworCQkJc2VxX3ByaW50ZihtLCAiJXMlcyIsCisJCQkJICAgcHJpbnRlZCA/ICIsIiA6ICIiLCBod2NhcHNbaV0pOworCQkJcHJpbnRlZCsrOworCQl9CisJfQorCXNlcV9wdXRjKG0sICdcbicpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVwb3J0X2h3Y2Fwcyh1bnNpZ25lZCBsb25nIGNhcHMpCit7CisJaW50IGksIHByaW50ZWQgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIENBUFM6IFsiKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod2NhcHMpOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgaTsKKwkJaWYgKGNhcHMgJiBiaXQpIHsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiVzJXMiLAorCQkJICAgICAgIHByaW50ZWQgPyAiLCIgOiAiIiwgaHdjYXBzW2ldKTsKKwkJCWlmICgrK3ByaW50ZWQgPT0gOCkgeworCQkJCXByaW50ayhLRVJOX0NPTlQgIl1cbiIpOworCQkJCXByaW50ayhLRVJOX0lORk8gIkNQVSBDQVBTOiBbIik7CisJCQkJcHJpbnRlZCA9IDA7CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKEtFUk5fQ09OVCAiXVxuIik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBtZGVzY19jcHVfaHdjYXBfbGlzdCh2b2lkKQoreworCXN0cnVjdCBtZGVzY19oYW5kbGUgKmhwOworCXVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7CisJY29uc3QgY2hhciAqcHJvcDsKKwlpbnQgbGVuOworCXU2NCBwbjsKKworCWhwID0gbWRlc2NfZ3JhYigpOworCWlmICghaHApCisJCXJldHVybiAwOworCisJcG4gPSBtZGVzY19ub2RlX2J5X25hbWUoaHAsIE1ERVNDX05PREVfTlVMTCwgImNwdSIpOworCWlmIChwbiA9PSBNREVTQ19OT0RFX05VTEwpCisJCWdvdG8gb3V0OworCisJcHJvcCA9IG1kZXNjX2dldF9wcm9wZXJ0eShocCwgcG4sICJod2NhcC1saXN0IiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChsZW4pIHsKKwkJaW50IGksIHBsZW47CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdjYXBzKTsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCBpOworCisJCQlpZiAoIXN0cmNtcChwcm9wLCBod2NhcHNbaV0pKSB7CisJCQkJY2FwcyB8PSBiaXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlwbGVuID0gc3RybGVuKHByb3ApICsgMTsKKwkJcHJvcCArPSBwbGVuOworCQlsZW4gLT0gcGxlbjsKKwl9CisKK291dDoKKwltZGVzY19yZWxlYXNlKGhwKTsKKwlyZXR1cm4gY2FwczsKK30KKworLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAorICogaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zcGFyYzY0X2VsZl9od2NhcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2FwID0gc3BhcmM2NF9lbGZfaHdjYXA7CisJdW5zaWduZWQgbG9uZyBtZGVzY19jYXBzOworCisJaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKQorCQljYXAgfD0gSFdDQVBfU1BBUkNfVUxUUkEzOworCWVsc2UgaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJaWYgKHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkExIHx8CisJCSAgICBzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMiB8fAorCQkgICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTMpCisJCQljYXAgfD0gSFdDQVBfU1BBUkNfQkxLSU5JVDsKKwkJaWYgKHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkEyIHx8CisJCSAgICBzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMykKKwkJCWNhcCB8PSBIV0NBUF9TUEFSQ19OMjsKKwl9CisKKwljYXAgfD0gKEFWX1NQQVJDX01VTDMyIHwgQVZfU1BBUkNfRElWMzIgfCBBVl9TUEFSQ19WOFBMVVMpOworCisJbWRlc2NfY2FwcyA9IG1kZXNjX2NwdV9od2NhcF9saXN0KCk7CisJaWYgKCFtZGVzY19jYXBzKSB7CisJCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKKwkJCWNhcCB8PSBBVl9TUEFSQ19WSVM7CisJCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykKKwkJCWNhcCB8PSBBVl9TUEFSQ19WSVMgfCBBVl9TUEFSQ19WSVMyOworCQlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7CisJCQl1bnNpZ25lZCBsb25nIGltcGwsIHZlcjsKKworCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOworCQkJaW1wbCA9ICgodmVyID4+IDMyKSAmIDB4ZmZmZik7CisJCQlpZiAoaW1wbCA9PSBQQU5USEVSX0lNUEwpCisJCQkJY2FwIHw9IEFWX1NQQVJDX1BPUEM7CisJCX0KKwkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJCWlmIChzdW40dl9jaGlwX3R5cGUgPT0gU1VONFZfQ0hJUF9OSUFHQVJBMSkKKwkJCQljYXAgfD0gQVZfU1BBUkNfQVNJX0JMS19JTklUOworCQkJaWYgKHN1bjR2X2NoaXBfdHlwZSA9PSBTVU40Vl9DSElQX05JQUdBUkEyIHx8CisJCQkgICAgc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTMpCisJCQkJY2FwIHw9IChBVl9TUEFSQ19WSVMgfCBBVl9TUEFSQ19WSVMyIHwKKwkJCQkJQVZfU1BBUkNfQVNJX0JMS19JTklUIHwKKwkJCQkJQVZfU1BBUkNfUE9QQyk7CisJCQlpZiAoc3VuNHZfY2hpcF90eXBlID09IFNVTjRWX0NISVBfTklBR0FSQTMpCisJCQkJY2FwIHw9IChBVl9TUEFSQ19WSVMzIHwgQVZfU1BBUkNfSFBDIHwKKwkJCQkJQVZfU1BBUkNfRk1BRik7CisJCX0KKwl9CisJc3BhcmM2NF9lbGZfaHdjYXAgPSBjYXAgfCBtZGVzY19jYXBzOworCisJcmVwb3J0X2h3Y2FwcyhzcGFyYzY0X2VsZl9od2NhcCk7CisKKwlpZiAoc3BhcmM2NF9lbGZfaHdjYXAgJiBBVl9TUEFSQ19QT1BDKQorCQlwb3BjX3BhdGNoKCk7Cit9CisKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBJbml0aWFsaXplIFBST00gY29uc29sZSBhbmQgY29tbWFuZCBsaW5lLiAqLwpAQCAtMzM3LDYgKzUyOCw3IEBACiAJaW5pdF9jdXJfY3B1X3RyYXAoY3VycmVudF90aHJlYWRfaW5mbygpKTsKIAogCXBhZ2luZ19pbml0KCk7CisJaW5pdF9zcGFyYzY0X2VsZl9od2NhcCgpOwogfQogCiBleHRlcm4gaW50IHN0b3BfYV9lbmFibGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggNzVmYWQ0Mi4uMWJhOTVhZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWwzMi5jCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXRfc2lnbmFsLmg+CiAKKyNpbmNsdWRlICJzaWd1dGlsLmgiCisKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKIC8qIFRoaXMgbWFnaWMgc2hvdWxkIGJlIGluIGdfdXBwZXJbMF0gZm9yIGFsbCB1cHBlciBwYXJ0cwpAQCAtNDQsMTQgKzQ2LDE0IEBACiBzdHJ1Y3Qgc2lnbmFsX2ZyYW1lMzIgewogCXN0cnVjdCBzcGFyY19zdGFja2YzMglzczsKIAlfX3NpZ2luZm8zMl90CQlpbmZvOwotCS8qIF9fc2lnaW5mb19mcHUzMl90ICogKi8gdTMyIGZwdV9zYXZlOworCS8qIF9fc2lnaW5mb19mcHVfdCAqICovIHUzMiBmcHVfc2F2ZTsKIAl1bnNpZ25lZCBpbnQJCWluc25zWzJdOwogCXVuc2lnbmVkIGludAkJZXh0cmFtYXNrW19DT01QQVRfTlNJR19XT1JEUyAtIDFdOwogCXVuc2lnbmVkIGludAkJZXh0cmFfc2l6ZTsgLyogU2hvdWxkIGJlIHNpemVvZihzaWdpbmZvX2V4dHJhX3Y4cGx1c190KSAqLwogCS8qIE9ubHkgdmFsaWQgaWYgKGluZm8uc2lfcmVncy5wc3IgJiAoUFNSX1ZFUlN8UFNSX0lNUEwpKSA9PSBQU1JfVjhQTFVTICovCiAJc2lnaW5mb19leHRyYV92OHBsdXNfdAl2OHBsdXM7Ci0JX19zaWdpbmZvX2ZwdV90CQlmcHVfc3RhdGU7Ci19OworCS8qIF9fc2lnaW5mb19yd2luX3QgKiAqL3UzMiByd2luX3NhdmU7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgY29tcGF0X3NpZ2luZm97CiAJaW50IHNpX3NpZ25vOwpAQCAtMTEwLDE4ICsxMTIsMTQgQEAKIAljb21wYXRfc2lnaW5mb190CWluZm87CiAJc3RydWN0IHB0X3JlZ3MzMglyZWdzOwogCWNvbXBhdF9zaWdzZXRfdAkJbWFzazsKLQkvKiBfX3NpZ2luZm9fZnB1MzJfdCAqICovIHUzMiBmcHVfc2F2ZTsKKwkvKiBfX3NpZ2luZm9fZnB1X3QgKiAqLyB1MzIgZnB1X3NhdmU7CiAJdW5zaWduZWQgaW50CQlpbnNuc1syXTsKIAlzdGFja190MzIJCXN0YWNrOwogCXVuc2lnbmVkIGludAkJZXh0cmFfc2l6ZTsgLyogU2hvdWxkIGJlIHNpemVvZihzaWdpbmZvX2V4dHJhX3Y4cGx1c190KSAqLwogCS8qIE9ubHkgdmFsaWQgaWYgKHJlZ3MucHNyICYgKFBTUl9WRVJTfFBTUl9JTVBMKSkgPT0gUFNSX1Y4UExVUyAqLwogCXNpZ2luZm9fZXh0cmFfdjhwbHVzX3QJdjhwbHVzOwotCV9fc2lnaW5mb19mcHVfdAkJZnB1X3N0YXRlOwotfTsKLQotLyogQWxpZ24gbWFjcm9zICovCi0jZGVmaW5lIFNGX0FMSUdORURTWiAgKCgoc2l6ZW9mKHN0cnVjdCBzaWduYWxfZnJhbWUzMikgKyAxNSkgJiAofjE1KSkpCi0jZGVmaW5lIFJUX0FMSUdORURTWiAgKCgoc2l6ZW9mKHN0cnVjdCBydF9zaWduYWxfZnJhbWUzMikgKyAxNSkgJiAofjE1KSkpCisJLyogX19zaWdpbmZvX3J3aW5fdCAqICovdTMyIHJ3aW5fc2F2ZTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwogCiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIzMihjb21wYXRfc2lnaW5mb190IF9fdXNlciAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKIHsKQEAgLTE5MiwzMCArMTkwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVzdG9yZV9mcHVfc3RhdGUzMihzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQotewotCXVuc2lnbmVkIGxvbmcgKmZwcmVncyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnByZWdzOwotCXVuc2lnbmVkIGxvbmcgZnByczsKLQlpbnQgZXJyOwotCQotCWVyciA9IF9fZ2V0X3VzZXIoZnBycywgJmZwdS0+c2lfZnBycyk7Ci0JZnByc193cml0ZSgwKTsKLQlyZWdzLT50c3RhdGUgJj0gflRTVEFURV9QRUY7Ci0JaWYgKGZwcnMgJiBGUFJTX0RMKQotCQllcnIgfD0gY29weV9mcm9tX3VzZXIoZnByZWdzLCAmZnB1LT5zaV9mbG9hdF9yZWdzWzBdLCAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzMikpOwotCWlmIChmcHJzICYgRlBSU19EVSkKLQkJZXJyIHw9IGNvcHlfZnJvbV91c2VyKGZwcmVncysxNiwgJmZwdS0+c2lfZmxvYXRfcmVnc1szMl0sIChzaXplb2YodW5zaWduZWQgaW50KSAqIDMyKSk7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdLCAmZnB1LT5zaV9mc3IpOwotCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Z3NyWzBdLCAmZnB1LT5zaV9nc3IpOwotCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzYXZlZFswXSB8PSBmcHJzOwotCXJldHVybiBlcnI7Ci19Ci0KIHZvaWQgZG9fc2lncmV0dXJuMzIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHNpZ25hbF9mcmFtZTMyIF9fdXNlciAqc2Y7CisJY29tcGF0X3VwdHJfdCBmcHVfc2F2ZTsKKwljb21wYXRfdXB0cl90IHJ3aW5fc2F2ZTsKIAl1bnNpZ25lZCBpbnQgcHNyOwotCXVuc2lnbmVkIHBjLCBucGMsIGZwdV9zYXZlOworCXVuc2lnbmVkIHBjLCBucGM7CiAJc2lnc2V0X3Qgc2V0OwogCXVuc2lnbmVkIHNldGFbX0NPTVBBVF9OU0lHX1dPUkRTXTsKIAlpbnQgZXJyLCBpOwpAQCAtMjczLDggKzI1NCwxMyBAQAogCXB0X3JlZ3NfY2xlYXJfc3lzY2FsbChyZWdzKTsKIAogCWVyciB8PSBfX2dldF91c2VyKGZwdV9zYXZlLCAmc2YtPmZwdV9zYXZlKTsKLQlpZiAoZnB1X3NhdmUpCi0JCWVyciB8PSByZXN0b3JlX2ZwdV9zdGF0ZTMyKHJlZ3MsICZzZi0+ZnB1X3N0YXRlKTsKKwlpZiAoIWVyciAmJiBmcHVfc2F2ZSkKKwkJZXJyIHw9IHJlc3RvcmVfZnB1X3N0YXRlKHJlZ3MsIGNvbXBhdF9wdHIoZnB1X3NhdmUpKTsKKwllcnIgfD0gX19nZXRfdXNlcihyd2luX3NhdmUsICZzZi0+cndpbl9zYXZlKTsKKwlpZiAoIWVyciAmJiByd2luX3NhdmUpIHsKKwkJaWYgKHJlc3RvcmVfcndpbl9zdGF0ZShjb21wYXRfcHRyKHJ3aW5fc2F2ZSkpKQorCQkJZ290byBzZWd2OworCX0KIAllcnIgfD0gX19nZXRfdXNlcihzZXRhWzBdLCAmc2YtPmluZm8uc2lfbWFzayk7CiAJZXJyIHw9IGNvcHlfZnJvbV91c2VyKHNldGErMSwgJnNmLT5leHRyYW1hc2ssCiAJCQkgICAgICAoX0NPTVBBVF9OU0lHX1dPUkRTIC0gMSkgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CkBAIC0zMDAsNyArMjg2LDkgQEAKIGFzbWxpbmthZ2Ugdm9pZCBkb19ydF9zaWdyZXR1cm4zMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lMzIgX191c2VyICpzZjsKLQl1bnNpZ25lZCBpbnQgcHNyLCBwYywgbnBjLCBmcHVfc2F2ZSwgdV9zc19zcDsKKwl1bnNpZ25lZCBpbnQgcHNyLCBwYywgbnBjLCB1X3NzX3NwOworCWNvbXBhdF91cHRyX3QgZnB1X3NhdmU7CisJY29tcGF0X3VwdHJfdCByd2luX3NhdmU7CiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlzaWdzZXRfdCBzZXQ7CiAJY29tcGF0X3NpZ3NldF90IHNldGE7CkBAIC0zNTksOCArMzQ3LDggQEAKIAlwdF9yZWdzX2NsZWFyX3N5c2NhbGwocmVncyk7CiAKIAllcnIgfD0gX19nZXRfdXNlcihmcHVfc2F2ZSwgJnNmLT5mcHVfc2F2ZSk7Ci0JaWYgKGZwdV9zYXZlKQotCQllcnIgfD0gcmVzdG9yZV9mcHVfc3RhdGUzMihyZWdzLCAmc2YtPmZwdV9zdGF0ZSk7CisJaWYgKCFlcnIgJiYgZnB1X3NhdmUpCisJCWVyciB8PSByZXN0b3JlX2ZwdV9zdGF0ZShyZWdzLCBjb21wYXRfcHRyKGZwdV9zYXZlKSk7CiAJZXJyIHw9IGNvcHlfZnJvbV91c2VyKCZzZXRhLCAmc2YtPm1hc2ssIHNpemVvZihjb21wYXRfc2lnc2V0X3QpKTsKIAllcnIgfD0gX19nZXRfdXNlcih1X3NzX3NwLCAmc2YtPnN0YWNrLnNzX3NwKTsKIAlzdC5zc19zcCA9IGNvbXBhdF9wdHIodV9zc19zcCk7CkBAIC0zNzYsNiArMzY0LDEyIEBACiAJZG9fc2lnYWx0c3RhY2soKHN0YWNrX3QgX191c2VyICopICZzdCwgTlVMTCwgKHVuc2lnbmVkIGxvbmcpc2YpOwogCXNldF9mcyhvbGRfZnMpOwogCQorCWVyciB8PSBfX2dldF91c2VyKHJ3aW5fc2F2ZSwgJnNmLT5yd2luX3NhdmUpOworCWlmICghZXJyICYmIHJ3aW5fc2F2ZSkgeworCQlpZiAocmVzdG9yZV9yd2luX3N0YXRlKGNvbXBhdF9wdHIocndpbl9zYXZlKSkpCisJCQlnb3RvIHNlZ3Y7CisJfQorCiAJc3dpdGNoIChfTlNJR19XT1JEUykgewogCQljYXNlIDQ6IHNldC5zaWdbM10gPSBzZXRhLnNpZ1s2XSArICgoKGxvbmcpc2V0YS5zaWdbN10pIDw8IDMyKTsKIAkJY2FzZSAzOiBzZXQuc2lnWzJdID0gc2V0YS5zaWdbNF0gKyAoKChsb25nKXNldGEuc2lnWzVdKSA8PCAzMik7CkBAIC00MzMsMjYgKzQyNyw2IEBACiAJcmV0dXJuICh2b2lkIF9fdXNlciAqKSBzcDsKIH0KIAotc3RhdGljIGludCBzYXZlX2ZwdV9zdGF0ZTMyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHUpCi17Ci0JdW5zaWduZWQgbG9uZyAqZnByZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmcHJzOwotCWludCBlcnIgPSAwOwotCQotCWZwcnMgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF07Ci0JaWYgKGZwcnMgJiBGUFJTX0RMKQotCQllcnIgfD0gY29weV90b191c2VyKCZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sIGZwcmVncywKLQkJCQkgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKLQlpZiAoZnBycyAmIEZQUlNfRFUpCi0JCWVyciB8PSBjb3B5X3RvX3VzZXIoJmZwdS0+c2lfZmxvYXRfcmVnc1szMl0sIGZwcmVncysxNiwKLQkJCQkgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0sICZmcHUtPnNpX2Zzcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudF90aHJlYWRfaW5mbygpLT5nc3JbMF0sICZmcHUtPnNpX2dzcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoZnBycywgJmZwdS0+c2lfZnBycyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiAvKiBUaGUgSS1jYWNoZSBmbHVzaCBpbnN0cnVjdGlvbiBvbmx5IHdvcmtzIGluIHRoZSBwcmltYXJ5IEFTSSwgd2hpY2gKICAqIHJpZ2h0IG5vdyBpcyB0aGUgbnVjbGV1cywgYWthLiBrZXJuZWwgc3BhY2UuCiAgKgpAQCAtNTE1LDE4ICs0ODksMjMgQEAKIAkJCSBpbnQgc2lnbm8sIHNpZ3NldF90ICpvbGRzZXQpCiB7CiAJc3RydWN0IHNpZ25hbF9mcmFtZTMyIF9fdXNlciAqc2Y7CisJaW50IGksIGVyciwgd3NhdmVkOworCXZvaWQgX191c2VyICp0YWlsOwogCWludCBzaWdmcmFtZV9zaXplOwogCXUzMiBwc3I7Ci0JaW50IGksIGVycjsKIAl1bnNpZ25lZCBpbnQgc2V0YVtfQ09NUEFUX05TSUdfV09SRFNdOwogCiAJLyogMS4gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gKi8KIAlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7CiAJc2F2ZV9hbmRfY2xlYXJfZnB1KCk7CiAJCi0Jc2lnZnJhbWVfc2l6ZSA9IFNGX0FMSUdORURTWjsKLQlpZiAoIShjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gJiBGUFJTX0ZFRikpCi0JCXNpZ2ZyYW1lX3NpemUgLT0gc2l6ZW9mKF9fc2lnaW5mb19mcHVfdCk7CisJd3NhdmVkID0gZ2V0X3RocmVhZF93c2F2ZWQoKTsKKworCXNpZ2ZyYW1lX3NpemUgPSBzaXplb2YoKnNmKTsKKwlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHNhdmVkWzBdICYgRlBSU19GRUYpCisJCXNpZ2ZyYW1lX3NpemUgKz0gc2l6ZW9mKF9fc2lnaW5mb19mcHVfdCk7CisJaWYgKHdzYXZlZCkKKwkJc2lnZnJhbWVfc2l6ZSArPSBzaXplb2YoX19zaWdpbmZvX3J3aW5fdCk7CiAKIAlzZiA9IChzdHJ1Y3Qgc2lnbmFsX2ZyYW1lMzIgX191c2VyICopCiAJCWdldF9zaWdmcmFtZSgma2EtPnNhLCByZWdzLCBzaWdmcmFtZV9zaXplKTsKQEAgLTUzNCw4ICs1MTMsNyBAQAogCWlmIChpbnZhbGlkX2ZyYW1lX3BvaW50ZXIoc2YsIHNpZ2ZyYW1lX3NpemUpKQogCQlnb3RvIHNpZ2lsbDsKIAotCWlmIChnZXRfdGhyZWFkX3dzYXZlZCgpICE9IDApCi0JCWdvdG8gc2lnaWxsOworCXRhaWwgPSAoc2YgKyAxKTsKIAogCS8qIDIuIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBzdGF0ZSAqLwogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKQEAgLTU2MCwxMSArNTM4LDIyIEBACiAJCQkgICZzZi0+djhwbHVzLmFzaSk7CiAKIAlpZiAocHNyICYgUFNSX0VGKSB7Ci0JCWVyciB8PSBzYXZlX2ZwdV9zdGF0ZTMyKHJlZ3MsICZzZi0+ZnB1X3N0YXRlKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoKHU2NCkmc2YtPmZwdV9zdGF0ZSwgJnNmLT5mcHVfc2F2ZSk7CisJCV9fc2lnaW5mb19mcHVfdCBfX3VzZXIgKmZwID0gdGFpbDsKKwkJdGFpbCArPSBzaXplb2YoKmZwKTsKKwkJZXJyIHw9IHNhdmVfZnB1X3N0YXRlKHJlZ3MsIGZwKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoKHU2NClmcCwgJnNmLT5mcHVfc2F2ZSk7CiAJfSBlbHNlIHsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnNmLT5mcHVfc2F2ZSk7CiAJfQorCWlmICh3c2F2ZWQpIHsKKwkJX19zaWdpbmZvX3J3aW5fdCBfX3VzZXIgKnJ3cCA9IHRhaWw7CisJCXRhaWwgKz0gc2l6ZW9mKCpyd3ApOworCQllcnIgfD0gc2F2ZV9yd2luX3N0YXRlKHdzYXZlZCwgcndwKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoKHU2NClyd3AsICZzZi0+cndpbl9zYXZlKTsKKwkJc2V0X3RocmVhZF93c2F2ZWQoMCk7CisJfSBlbHNlIHsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnNmLT5yd2luX3NhdmUpOworCX0KIAogCXN3aXRjaCAoX05TSUdfV09SRFMpIHsKIAljYXNlIDQ6IHNldGFbN10gPSAob2xkc2V0LT5zaWdbM10gPj4gMzIpOwpAQCAtNTgwLDEwICs1NjksMjEgQEAKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoc2YtPmV4dHJhbWFzaywgc2V0YSArIDEsCiAJCQkgICAgICAoX0NPTVBBVF9OU0lHX1dPUkRTIC0gMSkgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CiAKLQllcnIgfD0gY29weV9pbl91c2VyKCh1MzIgX191c2VyICopc2YsCi0JCQkgICAgKHUzMiBfX3VzZXIgKikocmVncy0+dV9yZWdzW1VSRUdfRlBdKSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3czMikpOwotCQorCWlmICghd3NhdmVkKSB7CisJCWVyciB8PSBjb3B5X2luX3VzZXIoKHUzMiBfX3VzZXIgKilzZiwKKwkJCQkgICAgKHUzMiBfX3VzZXIgKikocmVncy0+dV9yZWdzW1VSRUdfRlBdKSwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93MzIpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdyAqcnA7CisKKwkJcnAgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZWdfd2luZG93W3dzYXZlZCAtIDFdOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJZXJyIHw9IF9fcHV0X3VzZXIocnAtPmxvY2Fsc1tpXSwgJnNmLT5zcy5sb2NhbHNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJZXJyIHw9IF9fcHV0X3VzZXIocnAtPmluc1tpXSwgJnNmLT5zcy5pbnNbaV0pOworCQllcnIgfD0gX19wdXRfdXNlcihycC0+aW5zWzZdLCAmc2YtPnNzLmZwKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIocnAtPmluc1s3XSwgJnNmLT5zcy5jYWxsZXJzX3BjKTsKKwl9CQogCWlmIChlcnIpCiAJCWdvdG8gc2lnc2VndjsKIApAQCAtNjEzLDcgKzYxMyw2IEBACiAJCWVyciB8PSBfX3B1dF91c2VyKDB4OTFkMDIwMTAsICZzZi0+aW5zbnNbMV0pOyAvKnQgMHgxMCovCiAJCWlmIChlcnIpCiAJCQlnb3RvIHNpZ3NlZ3Y7Ci0KIAkJZmx1c2hfc2lnbmFsX2luc25zKGFkZHJlc3MpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYzMiwxOCArNjMxLDIzIEBACiAJCQkgICAgc2lnaW5mb190ICppbmZvKQogewogCXN0cnVjdCBydF9zaWduYWxfZnJhbWUzMiBfX3VzZXIgKnNmOworCWludCBpLCBlcnIsIHdzYXZlZDsKKwl2b2lkIF9fdXNlciAqdGFpbDsKIAlpbnQgc2lnZnJhbWVfc2l6ZTsKIAl1MzIgcHNyOwotCWludCBpLCBlcnI7CiAJY29tcGF0X3NpZ3NldF90IHNldGE7CiAKIAkvKiAxLiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBjbGVhbiAqLwogCXN5bmNocm9uaXplX3VzZXJfc3RhY2soKTsKIAlzYXZlX2FuZF9jbGVhcl9mcHUoKTsKIAkKLQlzaWdmcmFtZV9zaXplID0gUlRfQUxJR05FRFNaOwotCWlmICghKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzYXZlZFswXSAmIEZQUlNfRkVGKSkKLQkJc2lnZnJhbWVfc2l6ZSAtPSBzaXplb2YoX19zaWdpbmZvX2ZwdV90KTsKKwl3c2F2ZWQgPSBnZXRfdGhyZWFkX3dzYXZlZCgpOworCisJc2lnZnJhbWVfc2l6ZSA9IHNpemVvZigqc2YpOworCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gJiBGUFJTX0ZFRikKKwkJc2lnZnJhbWVfc2l6ZSArPSBzaXplb2YoX19zaWdpbmZvX2ZwdV90KTsKKwlpZiAod3NhdmVkKQorCQlzaWdmcmFtZV9zaXplICs9IHNpemVvZihfX3NpZ2luZm9fcndpbl90KTsKIAogCXNmID0gKHN0cnVjdCBydF9zaWduYWxfZnJhbWUzMiBfX3VzZXIgKikKIAkJZ2V0X3NpZ2ZyYW1lKCZrYS0+c2EsIHJlZ3MsIHNpZ2ZyYW1lX3NpemUpOwpAQCAtNjUxLDggKzY1NSw3IEBACiAJaWYgKGludmFsaWRfZnJhbWVfcG9pbnRlcihzZiwgc2lnZnJhbWVfc2l6ZSkpCiAJCWdvdG8gc2lnaWxsOwogCi0JaWYgKGdldF90aHJlYWRfd3NhdmVkKCkgIT0gMCkKLQkJZ290byBzaWdpbGw7CisJdGFpbCA9IChzZiArIDEpOwogCiAJLyogMi4gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHN0YXRlICovCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgewpAQCAtNjc3LDExICs2ODAsMjIgQEAKIAkJCSAgJnNmLT52OHBsdXMuYXNpKTsKIAogCWlmIChwc3IgJiBQU1JfRUYpIHsKLQkJZXJyIHw9IHNhdmVfZnB1X3N0YXRlMzIocmVncywgJnNmLT5mcHVfc3RhdGUpOwotCQllcnIgfD0gX19wdXRfdXNlcigodTY0KSZzZi0+ZnB1X3N0YXRlLCAmc2YtPmZwdV9zYXZlKTsKKwkJX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnAgPSB0YWlsOworCQl0YWlsICs9IHNpemVvZigqZnApOworCQllcnIgfD0gc2F2ZV9mcHVfc3RhdGUocmVncywgZnApOworCQllcnIgfD0gX19wdXRfdXNlcigodTY0KWZwLCAmc2YtPmZwdV9zYXZlKTsKIAl9IGVsc2UgewogCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPmZwdV9zYXZlKTsKIAl9CisJaWYgKHdzYXZlZCkgeworCQlfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndwID0gdGFpbDsKKwkJdGFpbCArPSBzaXplb2YoKnJ3cCk7CisJCWVyciB8PSBzYXZlX3J3aW5fc3RhdGUod3NhdmVkLCByd3ApOworCQllcnIgfD0gX19wdXRfdXNlcigodTY0KXJ3cCwgJnNmLT5yd2luX3NhdmUpOworCQlzZXRfdGhyZWFkX3dzYXZlZCgwKTsKKwl9IGVsc2UgeworCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPnJ3aW5fc2F2ZSk7CisJfQogCiAJLyogVXBkYXRlIHRoZSBzaWdpbmZvIHN0cnVjdHVyZS4gICovCiAJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyMzIoJnNmLT5pbmZvLCBpbmZvKTsKQEAgLTcwMyw5ICs3MTcsMjEgQEAKIAl9CiAJZXJyIHw9IF9fY29weV90b191c2VyKCZzZi0+bWFzaywgJnNldGEsIHNpemVvZihjb21wYXRfc2lnc2V0X3QpKTsKIAotCWVyciB8PSBjb3B5X2luX3VzZXIoKHUzMiBfX3VzZXIgKilzZiwKLQkJCSAgICAodTMyIF9fdXNlciAqKShyZWdzLT51X3JlZ3NbVVJFR19GUF0pLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSk7CisJaWYgKCF3c2F2ZWQpIHsKKwkJZXJyIHw9IGNvcHlfaW5fdXNlcigodTMyIF9fdXNlciAqKXNmLAorCQkJCSAgICAodTMyIF9fdXNlciAqKShyZWdzLT51X3JlZ3NbVVJFR19GUF0pLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3czMikpOworCX0gZWxzZSB7CisJCXN0cnVjdCByZWdfd2luZG93ICpycDsKKworCQlycCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlZ193aW5kb3dbd3NhdmVkIC0gMV07CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQllcnIgfD0gX19wdXRfdXNlcihycC0+bG9jYWxzW2ldLCAmc2YtPnNzLmxvY2Fsc1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQllcnIgfD0gX19wdXRfdXNlcihycC0+aW5zW2ldLCAmc2YtPnNzLmluc1tpXSk7CisJCWVyciB8PSBfX3B1dF91c2VyKHJwLT5pbnNbNl0sICZzZi0+c3MuZnApOworCQllcnIgfD0gX19wdXRfdXNlcihycC0+aW5zWzddLCAmc2YtPnNzLmNhbGxlcnNfcGMpOworCX0KIAlpZiAoZXJyKQogCQlnb3RvIHNpZ3NlZ3Y7CiAJCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDVlNWM1ZmQuLjA0ZWRlOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgkvKiBmbHVzaF9zaWdfaW5zbnMgKi8KIAorI2luY2x1ZGUgInNpZ3V0aWwuaCIKKwogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAogZXh0ZXJuIHZvaWQgZnBzYXZlKHVuc2lnbmVkIGxvbmcgKmZwcmVncywgdW5zaWduZWQgbG9uZyAqZnNyLApAQCAtMzksOCArNDEsOCBAQAogCXVuc2lnbmVkIGxvbmcJCWluc25zWzJdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOwogCXVuc2lnbmVkIGludAkJZXh0cmFtYXNrW19OU0lHX1dPUkRTIC0gMV07CiAJdW5zaWduZWQgaW50CQlleHRyYV9zaXplOyAvKiBTaG91bGQgYmUgMCAqLwotCV9fc2lnaW5mb19mcHVfdAkJZnB1X3N0YXRlOwotfTsKKwlfX3NpZ2luZm9fcndpbl90IF9fdXNlcgkqcndpbl9zYXZlOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAKIHN0cnVjdCBydF9zaWduYWxfZnJhbWUgewogCXN0cnVjdCBzcGFyY19zdGFja2YJc3M7CkBAIC01MSw4ICs1Myw4IEBACiAJdW5zaWduZWQgaW50CQlpbnNuc1syXTsKIAlzdGFja190CQkJc3RhY2s7CiAJdW5zaWduZWQgaW50CQlleHRyYV9zaXplOyAvKiBTaG91bGQgYmUgMCAqLwotCV9fc2lnaW5mb19mcHVfdAkJZnB1X3N0YXRlOwotfTsKKwlfX3NpZ2luZm9fcndpbl90IF9fdXNlcgkqcndpbl9zYXZlOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAKIC8qIEFsaWduIG1hY3JvcyAqLwogI2RlZmluZSBTRl9BTElHTkVEU1ogICgoKHNpemVvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lKSArIDcpICYgKH43KSkpCkBAIC03OSw0MyArODEsMTMgQEAKIAlyZXR1cm4gX3NpZ3BhdXNlX2NvbW1vbihzZXQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotcmVzdG9yZV9mcHVfc3RhdGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fc2lnaW5mb19mcHVfdCBfX3VzZXIgKmZwdSkKLXsKLQlpbnQgZXJyOwotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1VTRURGUFUpKQotCQlyZWdzLT5wc3IgJj0gflBTUl9FRjsKLSNlbHNlCi0JaWYgKGN1cnJlbnQgPT0gbGFzdF90YXNrX3VzZWRfbWF0aCkgewotCQlsYXN0X3Rhc2tfdXNlZF9tYXRoID0gTlVMTDsKLQkJcmVncy0+cHNyICY9IH5QU1JfRUY7Ci0JfQotI2VuZGlmCi0Jc2V0X3VzZWRfbWF0aCgpOwotCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfVVNFREZQVSk7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnB1LCBzaXplb2YoKmZwdSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJmN1cnJlbnQtPnRocmVhZC5mbG9hdF9yZWdzWzBdLCAmZnB1LT5zaV9mbG9hdF9yZWdzWzBdLAotCQkJICAgICAgIChzaXplb2YodW5zaWduZWQgbG9uZykgKiAzMikpOwotCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnQtPnRocmVhZC5mc3IsICZmcHUtPnNpX2Zzcik7Ci0JZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZwcWRlcHRoLCAmZnB1LT5zaV9mcHFkZXB0aCk7Ci0JaWYgKGN1cnJlbnQtPnRocmVhZC5mcHFkZXB0aCAhPSAwKQotCQllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmY3VycmVudC0+dGhyZWFkLmZwcXVldWVbMF0sCi0JCQkJCSZmcHUtPnNpX2ZwcXVldWVbMF0sCi0JCQkJCSgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsKLQkJCQkJKHNpemVvZih1bnNpZ25lZCBsb25nICopKSkqMTYpKTsKLQlyZXR1cm4gZXJyOwotfQotCiBhc21saW5rYWdlIHZvaWQgZG9fc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBzaWduYWxfZnJhbWUgX191c2VyICpzZjsKIAl1bnNpZ25lZCBsb25nIHVwX3BzciwgcGMsIG5wYzsKIAlzaWdzZXRfdCBzZXQ7CiAJX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1X3NhdmU7CisJX19zaWdpbmZvX3J3aW5fdCBfX3VzZXIgKnJ3aW5fc2F2ZTsKIAlpbnQgZXJyOwogCiAJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCkBAIC0xNTAsOSArMTIyLDExIEBACiAJcHRfcmVnc19jbGVhcl9zeXNjYWxsKHJlZ3MpOwogCiAJZXJyIHw9IF9fZ2V0X3VzZXIoZnB1X3NhdmUsICZzZi0+ZnB1X3NhdmUpOwotCiAJaWYgKGZwdV9zYXZlKQogCQllcnIgfD0gcmVzdG9yZV9mcHVfc3RhdGUocmVncywgZnB1X3NhdmUpOworCWVyciB8PSBfX2dldF91c2VyKHJ3aW5fc2F2ZSwgJnNmLT5yd2luX3NhdmUpOworCWlmIChyd2luX3NhdmUpCisJCWVyciB8PSByZXN0b3JlX3J3aW5fc3RhdGUocndpbl9zYXZlKTsKIAogCS8qIFRoaXMgaXMgcHJldHR5IG11Y2ggYXRvbWljLCBubyBhbW91bnQgbG9ja2luZyB3b3VsZCBwcmV2ZW50CiAJICogdGhlIHJhY2VzIHdoaWNoIGV4aXN0IGFueXdheXMuCkBAIC0xODAsNiArMTU0LDcgQEAKIAlzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lIF9fdXNlciAqc2Y7CiAJdW5zaWduZWQgaW50IHBzciwgcGMsIG5wYzsKIAlfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHVfc2F2ZTsKKwlfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndpbl9zYXZlOwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAJc2lnc2V0X3Qgc2V0OwogCXN0YWNrX3Qgc3Q7CkBAIC0yMDcsOCArMTgyLDcgQEAKIAlwdF9yZWdzX2NsZWFyX3N5c2NhbGwocmVncyk7CiAKIAllcnIgfD0gX19nZXRfdXNlcihmcHVfc2F2ZSwgJnNmLT5mcHVfc2F2ZSk7Ci0KLQlpZiAoZnB1X3NhdmUpCisJaWYgKCFlcnIgJiYgZnB1X3NhdmUpCiAJCWVyciB8PSByZXN0b3JlX2ZwdV9zdGF0ZShyZWdzLCBmcHVfc2F2ZSk7CiAJZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJnNldCwgJnNmLT5tYXNrLCBzaXplb2Yoc2lnc2V0X3QpKTsKIAkKQEAgLTIyOCw2ICsyMDIsMTIgQEAKIAlkb19zaWdhbHRzdGFjaygoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKikgJnN0LCBOVUxMLCAodW5zaWduZWQgbG9uZylzZik7CiAJc2V0X2ZzKG9sZF9mcyk7CiAKKwllcnIgfD0gX19nZXRfdXNlcihyd2luX3NhdmUsICZzZi0+cndpbl9zYXZlKTsKKwlpZiAoIWVyciAmJiByd2luX3NhdmUpIHsKKwkJaWYgKHJlc3RvcmVfcndpbl9zdGF0ZShyd2luX3NhdmUpKQorCQkJZ290byBzZWd2OworCX0KKwogCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7CkBAIC0yODAsNTMgKzI2MCwyMyBAQAogCXJldHVybiAodm9pZCBfX3VzZXIgKikgc3A7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1zYXZlX2ZwdV9zdGF0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQotewotCWludCBlcnIgPSAwOwotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1VTRURGUFUpKSB7Ci0JCXB1dF9wc3IoZ2V0X3BzcigpIHwgUFNSX0VGKTsKLQkJZnBzYXZlKCZjdXJyZW50LT50aHJlYWQuZmxvYXRfcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC5mc3IsCi0JCSAgICAgICAmY3VycmVudC0+dGhyZWFkLmZwcXVldWVbMF0sICZjdXJyZW50LT50aHJlYWQuZnBxZGVwdGgpOwotCQlyZWdzLT5wc3IgJj0gfihQU1JfRUYpOwotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1VTRURGUFUpOwotCX0KLSNlbHNlCi0JaWYgKGN1cnJlbnQgPT0gbGFzdF90YXNrX3VzZWRfbWF0aCkgewotCQlwdXRfcHNyKGdldF9wc3IoKSB8IFBTUl9FRik7Ci0JCWZwc2F2ZSgmY3VycmVudC0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQuZnNyLAotCQkgICAgICAgJmN1cnJlbnQtPnRocmVhZC5mcHF1ZXVlWzBdLCAmY3VycmVudC0+dGhyZWFkLmZwcWRlcHRoKTsKLQkJbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7Ci0JCXJlZ3MtPnBzciAmPSB+KFBTUl9FRik7Ci0JfQotI2VuZGlmCi0JZXJyIHw9IF9fY29weV90b191c2VyKCZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sCi0JCQkgICAgICAmY3VycmVudC0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sCi0JCQkgICAgICAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMzIpKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnNyLCAmZnB1LT5zaV9mc3IpOwotCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHFkZXB0aCwgJmZwdS0+c2lfZnBxZGVwdGgpOwotCWlmIChjdXJyZW50LT50aHJlYWQuZnBxZGVwdGggIT0gMCkKLQkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcHUtPnNpX2ZwcXVldWVbMF0sCi0JCQkJICAgICAgJmN1cnJlbnQtPnRocmVhZC5mcHF1ZXVlWzBdLAotCQkJCSAgICAgICgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsKLQkJCQkgICAgICAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcgKikpKSoxNikpOwotCWNsZWFyX3VzZWRfbWF0aCgpOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0dXBfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCSAgICAgICBpbnQgc2lnbm8sIHNpZ3NldF90ICpvbGRzZXQpCiB7CiAJc3RydWN0IHNpZ25hbF9mcmFtZSBfX3VzZXIgKnNmOwotCWludCBzaWdmcmFtZV9zaXplLCBlcnI7CisJaW50IHNpZ2ZyYW1lX3NpemUsIGVyciwgd3NhdmVkOworCXZvaWQgX191c2VyICp0YWlsOwogCiAJLyogMS4gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gKi8KIAlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7CiAKLQlzaWdmcmFtZV9zaXplID0gU0ZfQUxJR05FRFNaOwotCWlmICghdXNlZF9tYXRoKCkpCi0JCXNpZ2ZyYW1lX3NpemUgLT0gc2l6ZW9mKF9fc2lnaW5mb19mcHVfdCk7CisJd3NhdmVkID0gY3VycmVudF90aHJlYWRfaW5mbygpLT53X3NhdmVkOworCisJc2lnZnJhbWVfc2l6ZSA9IHNpemVvZigqc2YpOworCWlmICh1c2VkX21hdGgoKSkKKwkJc2lnZnJhbWVfc2l6ZSArPSBzaXplb2YoX19zaWdpbmZvX2ZwdV90KTsKKwlpZiAod3NhdmVkKQorCQlzaWdmcmFtZV9zaXplICs9IHNpemVvZihfX3NpZ2luZm9fcndpbl90KTsKIAogCXNmID0gKHN0cnVjdCBzaWduYWxfZnJhbWUgX191c2VyICopCiAJCWdldF9zaWdmcmFtZSgma2EtPnNhLCByZWdzLCBzaWdmcmFtZV9zaXplKTsKQEAgLTMzNCw4ICsyODQsNyBAQAogCWlmIChpbnZhbGlkX2ZyYW1lX3BvaW50ZXIoc2YsIHNpZ2ZyYW1lX3NpemUpKQogCQlnb3RvIHNpZ2lsbF9hbmRfcmV0dXJuOwogCi0JaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+d19zYXZlZCAhPSAwKQotCQlnb3RvIHNpZ2lsbF9hbmRfcmV0dXJuOworCXRhaWwgPSBzZiArIDE7CiAKIAkvKiAyLiBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3Mgc3RhdGUgKi8KIAllcnIgPSBfX2NvcHlfdG9fdXNlcigmc2YtPmluZm8uc2lfcmVncywgcmVncywgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CkBAIC0zNDMsMTcgKzI5MiwzNCBAQAogCWVyciB8PSBfX3B1dF91c2VyKDAsICZzZi0+ZXh0cmFfc2l6ZSk7CiAKIAlpZiAodXNlZF9tYXRoKCkpIHsKLQkJZXJyIHw9IHNhdmVfZnB1X3N0YXRlKHJlZ3MsICZzZi0+ZnB1X3N0YXRlKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIoJnNmLT5mcHVfc3RhdGUsICZzZi0+ZnB1X3NhdmUpOworCQlfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcCA9IHRhaWw7CisJCXRhaWwgKz0gc2l6ZW9mKCpmcCk7CisJCWVyciB8PSBzYXZlX2ZwdV9zdGF0ZShyZWdzLCBmcCk7CisJCWVyciB8PSBfX3B1dF91c2VyKGZwLCAmc2YtPmZwdV9zYXZlKTsKIAl9IGVsc2UgewogCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPmZwdV9zYXZlKTsKIAl9CisJaWYgKHdzYXZlZCkgeworCQlfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndwID0gdGFpbDsKKwkJdGFpbCArPSBzaXplb2YoKnJ3cCk7CisJCWVyciB8PSBzYXZlX3J3aW5fc3RhdGUod3NhdmVkLCByd3ApOworCQllcnIgfD0gX19wdXRfdXNlcihyd3AsICZzZi0+cndpbl9zYXZlKTsKKwl9IGVsc2UgeworCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPnJ3aW5fc2F2ZSk7CisJfQogCiAJZXJyIHw9IF9fcHV0X3VzZXIob2xkc2V0LT5zaWdbMF0sICZzZi0+aW5mby5zaV9tYXNrKTsKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoc2YtPmV4dHJhbWFzaywgJm9sZHNldC0+c2lnWzFdLAogCQkJICAgICAgKF9OU0lHX1dPUkRTIC0gMSkgKiBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0JZXJyIHw9IF9fY29weV90b191c2VyKHNmLCAoY2hhciAqKSByZWdzLT51X3JlZ3NbVVJFR19GUF0sCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3czMikpOworCWlmICghd3NhdmVkKSB7CisJCWVyciB8PSBfX2NvcHlfdG9fdXNlcihzZiwgKGNoYXIgKikgcmVncy0+dV9yZWdzW1VSRUdfRlBdLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJlZ193aW5kb3czMiAqcnA7CisKKwkJcnAgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZWdfd2luZG93W3dzYXZlZCAtIDFdOworCQllcnIgfD0gX19jb3B5X3RvX3VzZXIoc2YsIHJwLCBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3czMikpOworCX0KIAlpZiAoZXJyKQogCQlnb3RvIHNpZ3NlZ3Y7CiAJCkBAIC0zOTksMjEgKzM2NSwyNCBAQAogCQkJICBpbnQgc2lnbm8sIHNpZ3NldF90ICpvbGRzZXQsIHNpZ2luZm9fdCAqaW5mbykKIHsKIAlzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lIF9fdXNlciAqc2Y7Ci0JaW50IHNpZ2ZyYW1lX3NpemU7CisJaW50IHNpZ2ZyYW1lX3NpemUsIHdzYXZlZDsKKwl2b2lkIF9fdXNlciAqdGFpbDsKIAl1bnNpZ25lZCBpbnQgcHNyOwogCWludCBlcnI7CiAKIAlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7Ci0Jc2lnZnJhbWVfc2l6ZSA9IFJUX0FMSUdORURTWjsKLQlpZiAoIXVzZWRfbWF0aCgpKQotCQlzaWdmcmFtZV9zaXplIC09IHNpemVvZihfX3NpZ2luZm9fZnB1X3QpOworCXdzYXZlZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+d19zYXZlZDsKKwlzaWdmcmFtZV9zaXplID0gc2l6ZW9mKCpzZik7CisJaWYgKHVzZWRfbWF0aCgpKQorCQlzaWdmcmFtZV9zaXplICs9IHNpemVvZihfX3NpZ2luZm9fZnB1X3QpOworCWlmICh3c2F2ZWQpCisJCXNpZ2ZyYW1lX3NpemUgKz0gc2l6ZW9mKF9fc2lnaW5mb19yd2luX3QpOwogCXNmID0gKHN0cnVjdCBydF9zaWduYWxfZnJhbWUgX191c2VyICopCiAJCWdldF9zaWdmcmFtZSgma2EtPnNhLCByZWdzLCBzaWdmcmFtZV9zaXplKTsKIAlpZiAoaW52YWxpZF9mcmFtZV9wb2ludGVyKHNmLCBzaWdmcmFtZV9zaXplKSkKIAkJZ290byBzaWdpbGw7Ci0JaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+d19zYXZlZCAhPSAwKQotCQlnb3RvIHNpZ2lsbDsKIAorCXRhaWwgPSBzZiArIDE7CiAJZXJyICA9IF9fcHV0X3VzZXIocmVncy0+cGMsICZzZi0+cmVncy5wYyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+bnBjLCAmc2YtPnJlZ3MubnBjKTsKIAllcnIgfD0gX19wdXRfdXNlcihyZWdzLT55LCAmc2YtPnJlZ3MueSk7CkBAIC00MjUsMTEgKzM5NCwyMSBAQAogCWVyciB8PSBfX3B1dF91c2VyKDAsICZzZi0+ZXh0cmFfc2l6ZSk7CiAKIAlpZiAocHNyICYgUFNSX0VGKSB7Ci0JCWVyciB8PSBzYXZlX2ZwdV9zdGF0ZShyZWdzLCAmc2YtPmZwdV9zdGF0ZSk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKCZzZi0+ZnB1X3N0YXRlLCAmc2YtPmZwdV9zYXZlKTsKKwkJX19zaWdpbmZvX2ZwdV90ICpmcCA9IHRhaWw7CisJCXRhaWwgKz0gc2l6ZW9mKCpmcCk7CisJCWVyciB8PSBzYXZlX2ZwdV9zdGF0ZShyZWdzLCBmcCk7CisJCWVyciB8PSBfX3B1dF91c2VyKGZwLCAmc2YtPmZwdV9zYXZlKTsKIAl9IGVsc2UgewogCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPmZwdV9zYXZlKTsKIAl9CisJaWYgKHdzYXZlZCkgeworCQlfX3NpZ2luZm9fcndpbl90ICpyd3AgPSB0YWlsOworCQl0YWlsICs9IHNpemVvZigqcndwKTsKKwkJZXJyIHw9IHNhdmVfcndpbl9zdGF0ZSh3c2F2ZWQsIHJ3cCk7CisJCWVyciB8PSBfX3B1dF91c2VyKHJ3cCwgJnNmLT5yd2luX3NhdmUpOworCX0gZWxzZSB7CisJCWVyciB8PSBfX3B1dF91c2VyKDAsICZzZi0+cndpbl9zYXZlKTsKKwl9CiAJZXJyIHw9IF9fY29weV90b191c2VyKCZzZi0+bWFzaywgJm9sZHNldC0+c2lnWzBdLCBzaXplb2Yoc2lnc2V0X3QpKTsKIAkKIAkvKiBTZXR1cCBzaWdhbHRzdGFjayAqLwpAQCAtNDM3LDggKzQxNiwxNSBAQAogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT51X3JlZ3NbVVJFR19GUF0pLCAmc2YtPnN0YWNrLnNzX2ZsYWdzKTsKIAllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT5zYXNfc3Nfc2l6ZSwgJnNmLT5zdGFjay5zc19zaXplKTsKIAkKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoc2YsIChjaGFyICopIHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSk7CisJaWYgKCF3c2F2ZWQpIHsKKwkJZXJyIHw9IF9fY29weV90b191c2VyKHNmLCAoY2hhciAqKSByZWdzLT51X3JlZ3NbVVJFR19GUF0sCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93MzIpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdzMyICpycDsKKworCQlycCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlZ193aW5kb3dbd3NhdmVkIC0gMV07CisJCWVyciB8PSBfX2NvcHlfdG9fdXNlcihzZiwgcnAsIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSk7CisJfQogCiAJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZzZi0+aW5mbywgaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggMDA2ZmU0NS4uNDc1MDlkZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgImVudHJ5LmgiCiAjaW5jbHVkZSAic3lzdGJscy5oIgorI2luY2x1ZGUgInNpZ3V0aWwuaCIKIAogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIApAQCAtMjM2LDcgKzIzNyw3IEBACiAJX19zaWdpbmZvX2ZwdV90IF9fdXNlcgkqZnB1X3NhdmU7CiAJc3RhY2tfdAkJCXN0YWNrOwogCXNpZ3NldF90CQltYXNrOwotCV9fc2lnaW5mb19mcHVfdAkJZnB1X3N0YXRlOworCV9fc2lnaW5mb19yd2luX3QJKnJ3aW5fc2F2ZTsKIH07CiAKIHN0YXRpYyBsb25nIF9zaWdwYXVzZV9jb21tb24ob2xkX3NpZ3NldF90IHNldCkKQEAgLTI2NiwzMyArMjY3LDEyIEBACiAJcmV0dXJuIF9zaWdwYXVzZV9jb21tb24oc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXJlc3RvcmVfZnB1X3N0YXRlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHUpCi17Ci0JdW5zaWduZWQgbG9uZyAqZnByZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmcHJzOwotCWludCBlcnI7Ci0KLQllcnIgPSBfX2dldF91c2VyKGZwcnMsICZmcHUtPnNpX2ZwcnMpOwotCWZwcnNfd3JpdGUoMCk7Ci0JcmVncy0+dHN0YXRlICY9IH5UU1RBVEVfUEVGOwotCWlmIChmcHJzICYgRlBSU19ETCkKLQkJZXJyIHw9IGNvcHlfZnJvbV91c2VyKGZwcmVncywgJmZwdS0+c2lfZmxvYXRfcmVnc1swXSwKLQkJICAgICAgIAkgICAgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKLQlpZiAoZnBycyAmIEZQUlNfRFUpCi0JCWVyciB8PSBjb3B5X2Zyb21fdXNlcihmcHJlZ3MrMTYsICZmcHUtPnNpX2Zsb2F0X3JlZ3NbMzJdLAotCQkgICAgICAgCSAgICAgICAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzMikpOwotCWVyciB8PSBfX2dldF91c2VyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+eGZzclswXSwgJmZwdS0+c2lfZnNyKTsKLQllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPmdzclswXSwgJmZwdS0+c2lfZ3NyKTsKLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gfD0gZnByczsKLQlyZXR1cm4gZXJyOwotfQotCiB2b2lkIGRvX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lIF9fdXNlciAqc2Y7CiAJdW5zaWduZWQgbG9uZyB0cGMsIHRucGMsIHRzdGF0ZTsKIAlfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHVfc2F2ZTsKKwlfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndpbl9zYXZlOwogCXNpZ3NldF90IHNldDsKIAlpbnQgZXJyOwogCkBAIC0zMjUsOCArMzA1LDggQEAKIAlyZWdzLT50c3RhdGUgfD0gKHRzdGF0ZSAmIChUU1RBVEVfQVNJIHwgVFNUQVRFX0lDQyB8IFRTVEFURV9YQ0MpKTsKIAogCWVyciB8PSBfX2dldF91c2VyKGZwdV9zYXZlLCAmc2YtPmZwdV9zYXZlKTsKLQlpZiAoZnB1X3NhdmUpCi0JCWVyciB8PSByZXN0b3JlX2ZwdV9zdGF0ZShyZWdzLCAmc2YtPmZwdV9zdGF0ZSk7CisJaWYgKCFlcnIgJiYgZnB1X3NhdmUpCisJCWVyciB8PSByZXN0b3JlX2ZwdV9zdGF0ZShyZWdzLCBmcHVfc2F2ZSk7CiAKIAllcnIgfD0gX19jb3B5X2Zyb21fdXNlcigmc2V0LCAmc2YtPm1hc2ssIHNpemVvZihzaWdzZXRfdCkpOwogCWVyciB8PSBkb19zaWdhbHRzdGFjaygmc2YtPnN0YWNrLCBOVUxMLCAodW5zaWduZWQgbG9uZylzZik7CkBAIC0zMzQsNiArMzE0LDEyIEBACiAJaWYgKGVycikKIAkJZ290byBzZWd2OwogCisJZXJyIHw9IF9fZ2V0X3VzZXIocndpbl9zYXZlLCAmc2YtPnJ3aW5fc2F2ZSk7CisJaWYgKCFlcnIgJiYgcndpbl9zYXZlKSB7CisJCWlmIChyZXN0b3JlX3J3aW5fc3RhdGUocndpbl9zYXZlKSkKKwkJCWdvdG8gc2VndjsKKwl9CisKIAlyZWdzLT50cGMgPSB0cGM7CiAJcmVncy0+dG5wYyA9IHRucGM7CiAKQEAgLTM1MSwzNCArMzM3LDEzIEBACiB9CiAKIC8qIENoZWNrcyBpZiB0aGUgZnAgaXMgdmFsaWQgKi8KLXN0YXRpYyBpbnQgaW52YWxpZF9mcmFtZV9wb2ludGVyKHZvaWQgX191c2VyICpmcCwgaW50IGZwbGVuKQorc3RhdGljIGludCBpbnZhbGlkX2ZyYW1lX3BvaW50ZXIodm9pZCBfX3VzZXIgKmZwKQogewogCWlmICgoKHVuc2lnbmVkIGxvbmcpIGZwKSAmIDE1KQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhdmVfZnB1X3N0YXRlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBfX3NpZ2luZm9fZnB1X3QgX191c2VyICpmcHUpCi17Ci0JdW5zaWduZWQgbG9uZyAqZnByZWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHJlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmcHJzOwotCWludCBlcnIgPSAwOwotCQotCWZwcnMgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF07Ci0JaWYgKGZwcnMgJiBGUFJTX0RMKQotCQllcnIgfD0gY29weV90b191c2VyKCZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sIGZwcmVncywKLQkJCQkgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKLQlpZiAoZnBycyAmIEZQUlNfRFUpCi0JCWVyciB8PSBjb3B5X3RvX3VzZXIoJmZwdS0+c2lfZmxvYXRfcmVnc1szMl0sIGZwcmVncysxNiwKLQkJCQkgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKLQllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0sICZmcHUtPnNpX2Zzcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudF90aHJlYWRfaW5mbygpLT5nc3JbMF0sICZmcHUtPnNpX2dzcik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoZnBycywgJmZwdS0+c2lfZnBycyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpnZXRfc2lnZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZnJhbWVzaXplKQogewogCXVuc2lnbmVkIGxvbmcgc3AgPSByZWdzLT51X3JlZ3NbVVJFR19GUF0gKyBTVEFDS19CSUFTOwpAQCAtNDE0LDM0ICszNzksNDggQEAKIAkgICAgICAgaW50IHNpZ25vLCBzaWdzZXRfdCAqb2xkc2V0LCBzaWdpbmZvX3QgKmluZm8pCiB7CiAJc3RydWN0IHJ0X3NpZ25hbF9mcmFtZSBfX3VzZXIgKnNmOwotCWludCBzaWdmcmFtZV9zaXplLCBlcnI7CisJaW50IHdzYXZlZCwgZXJyLCBzZl9zaXplOworCXZvaWQgX191c2VyICp0YWlsOwogCiAJLyogMS4gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gKi8KIAlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7CiAJc2F2ZV9hbmRfY2xlYXJfZnB1KCk7CiAJCi0Jc2lnZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lKTsKLQlpZiAoIShjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gJiBGUFJTX0ZFRikpCi0JCXNpZ2ZyYW1lX3NpemUgLT0gc2l6ZW9mKF9fc2lnaW5mb19mcHVfdCk7CisJd3NhdmVkID0gZ2V0X3RocmVhZF93c2F2ZWQoKTsKIAorCXNmX3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0X3NpZ25hbF9mcmFtZSk7CisJaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzYXZlZFswXSAmIEZQUlNfRkVGKQorCQlzZl9zaXplICs9IHNpemVvZihfX3NpZ2luZm9fZnB1X3QpOworCWlmICh3c2F2ZWQpCisJCXNmX3NpemUgKz0gc2l6ZW9mKF9fc2lnaW5mb19yd2luX3QpOwogCXNmID0gKHN0cnVjdCBydF9zaWduYWxfZnJhbWUgX191c2VyICopCi0JCWdldF9zaWdmcmFtZShrYSwgcmVncywgc2lnZnJhbWVfc2l6ZSk7Ci0JCi0JaWYgKGludmFsaWRfZnJhbWVfcG9pbnRlciAoc2YsIHNpZ2ZyYW1lX3NpemUpKQorCQlnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNmX3NpemUpOworCisJaWYgKGludmFsaWRfZnJhbWVfcG9pbnRlciAoc2YpKQogCQlnb3RvIHNpZ2lsbDsKIAotCWlmIChnZXRfdGhyZWFkX3dzYXZlZCgpICE9IDApCi0JCWdvdG8gc2lnaWxsOworCXRhaWwgPSAoc2YgKyAxKTsKIAogCS8qIDIuIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyBzdGF0ZSAqLwogCWVyciA9IGNvcHlfdG9fdXNlcigmc2YtPnJlZ3MsIHJlZ3MsIHNpemVvZiAoKnJlZ3MpKTsKIAogCWlmIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwc2F2ZWRbMF0gJiBGUFJTX0ZFRikgewotCQllcnIgfD0gc2F2ZV9mcHVfc3RhdGUocmVncywgJnNmLT5mcHVfc3RhdGUpOwotCQllcnIgfD0gX19wdXRfdXNlcigodTY0KSZzZi0+ZnB1X3N0YXRlLCAmc2YtPmZwdV9zYXZlKTsKKwkJX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1X3NhdmUgPSB0YWlsOworCQl0YWlsICs9IHNpemVvZihfX3NpZ2luZm9fZnB1X3QpOworCQllcnIgfD0gc2F2ZV9mcHVfc3RhdGUocmVncywgZnB1X3NhdmUpOworCQllcnIgfD0gX19wdXRfdXNlcigodTY0KWZwdV9zYXZlLCAmc2YtPmZwdV9zYXZlKTsKIAl9IGVsc2UgewogCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPmZwdV9zYXZlKTsKIAl9CisJaWYgKHdzYXZlZCkgeworCQlfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndpbl9zYXZlID0gdGFpbDsKKwkJdGFpbCArPSBzaXplb2YoX19zaWdpbmZvX3J3aW5fdCk7CisJCWVyciB8PSBzYXZlX3J3aW5fc3RhdGUod3NhdmVkLCByd2luX3NhdmUpOworCQllcnIgfD0gX19wdXRfdXNlcigodTY0KXJ3aW5fc2F2ZSwgJnNmLT5yd2luX3NhdmUpOworCQlzZXRfdGhyZWFkX3dzYXZlZCgwKTsKKwl9IGVsc2UgeworCQllcnIgfD0gX19wdXRfdXNlcigwLCAmc2YtPnJ3aW5fc2F2ZSk7CisJfQogCQogCS8qIFNldHVwIHNpZ2FsdHN0YWNrICovCiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmc2YtPnN0YWNrLnNzX3NwKTsKQEAgLTQ1MCwxMCArNDI5LDE3IEBACiAKIAllcnIgfD0gY29weV90b191c2VyKCZzZi0+bWFzaywgb2xkc2V0LCBzaXplb2Yoc2lnc2V0X3QpKTsKIAotCWVyciB8PSBjb3B5X2luX3VzZXIoKHU2NCBfX3VzZXIgKilzZiwKLQkJCSAgICAodTY0IF9fdXNlciAqKShyZWdzLT51X3JlZ3NbVVJFR19GUF0rU1RBQ0tfQklBUyksCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93KSk7CisJaWYgKCF3c2F2ZWQpIHsKKwkJZXJyIHw9IGNvcHlfaW5fdXNlcigodTY0IF9fdXNlciAqKXNmLAorCQkJCSAgICAodTY0IF9fdXNlciAqKShyZWdzLT51X3JlZ3NbVVJFR19GUF0gKworCQkJCQkJICAgU1RBQ0tfQklBUyksCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdykpOworCX0gZWxzZSB7CisJCXN0cnVjdCByZWdfd2luZG93ICpycDsKIAorCQlycCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlZ193aW5kb3dbd3NhdmVkIC0gMV07CisJCWVyciB8PSBjb3B5X3RvX3VzZXIoc2YsIHJwLCBzaXplb2Yoc3RydWN0IHJlZ193aW5kb3cpKTsKKwl9CiAJaWYgKGluZm8pCiAJCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcigmc2YtPmluZm8sIGluZm8pOwogCWVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lndXRpbC5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lndXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWd1dGlsLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9TSUdVVElMX0gKKyNkZWZpbmUgX1NJR1VUSUxfSAorCitpbnQgc2F2ZV9mcHVfc3RhdGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fc2lnaW5mb19mcHVfdCBfX3VzZXIgKmZwdSk7CitpbnQgcmVzdG9yZV9mcHVfc3RhdGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fc2lnaW5mb19mcHVfdCBfX3VzZXIgKmZwdSk7CitpbnQgc2F2ZV9yd2luX3N0YXRlKGludCB3c2F2ZWQsIF9fc2lnaW5mb19yd2luX3QgX191c2VyICpyd2luKTsKK2ludCByZXN0b3JlX3J3aW5fc3RhdGUoX19zaWdpbmZvX3J3aW5fdCBfX3VzZXIgKnJwKTsKKworI2VuZGlmIC8qIF9TSUdVVElMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ3V0aWxfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ3V0aWxfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWM3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lndXRpbF8zMi5jCkBAIC0wLDAgKzEsMTIwIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNpbmNsdWRlICJzaWd1dGlsLmgiCisKK2ludCBzYXZlX2ZwdV9zdGF0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQoreworCWludCBlcnIgPSAwOworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1VTRURGUFUpKSB7CisJCXB1dF9wc3IoZ2V0X3BzcigpIHwgUFNSX0VGKTsKKwkJZnBzYXZlKCZjdXJyZW50LT50aHJlYWQuZmxvYXRfcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC5mc3IsCisJCSAgICAgICAmY3VycmVudC0+dGhyZWFkLmZwcXVldWVbMF0sICZjdXJyZW50LT50aHJlYWQuZnBxZGVwdGgpOworCQlyZWdzLT5wc3IgJj0gfihQU1JfRUYpOworCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY3VycmVudCwgVElGX1VTRURGUFUpOworCX0KKyNlbHNlCisJaWYgKGN1cnJlbnQgPT0gbGFzdF90YXNrX3VzZWRfbWF0aCkgeworCQlwdXRfcHNyKGdldF9wc3IoKSB8IFBTUl9FRik7CisJCWZwc2F2ZSgmY3VycmVudC0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQuZnNyLAorCQkgICAgICAgJmN1cnJlbnQtPnRocmVhZC5mcHF1ZXVlWzBdLCAmY3VycmVudC0+dGhyZWFkLmZwcWRlcHRoKTsKKwkJbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CisJCXJlZ3MtPnBzciAmPSB+KFBTUl9FRik7CisJfQorI2VuZGlmCisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sCisJCQkgICAgICAmY3VycmVudC0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sCisJCQkgICAgICAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMzIpKTsKKwllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnNyLCAmZnB1LT5zaV9mc3IpOworCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnRocmVhZC5mcHFkZXB0aCwgJmZwdS0+c2lfZnBxZGVwdGgpOworCWlmIChjdXJyZW50LT50aHJlYWQuZnBxZGVwdGggIT0gMCkKKwkJZXJyIHw9IF9fY29weV90b191c2VyKCZmcHUtPnNpX2ZwcXVldWVbMF0sCisJCQkJICAgICAgJmN1cnJlbnQtPnRocmVhZC5mcHF1ZXVlWzBdLAorCQkJCSAgICAgICgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsKKwkJCQkgICAgICAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcgKikpKSoxNikpOworCWNsZWFyX3VzZWRfbWF0aCgpOworCXJldHVybiBlcnI7Cit9CisKK2ludCByZXN0b3JlX2ZwdV9zdGF0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQoreworCWludCBlcnI7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhjdXJyZW50LCBUSUZfVVNFREZQVSkpCisJCXJlZ3MtPnBzciAmPSB+UFNSX0VGOworI2Vsc2UKKwlpZiAoY3VycmVudCA9PSBsYXN0X3Rhc2tfdXNlZF9tYXRoKSB7CisJCWxhc3RfdGFza191c2VkX21hdGggPSBOVUxMOworCQlyZWdzLT5wc3IgJj0gflBTUl9FRjsKKwl9CisjZW5kaWYKKwlzZXRfdXNlZF9tYXRoKCk7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGN1cnJlbnQsIFRJRl9VU0VERlBVKTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcHUsIHNpemVvZigqZnB1KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyID0gX19jb3B5X2Zyb21fdXNlcigmY3VycmVudC0+dGhyZWFkLmZsb2F0X3JlZ3NbMF0sICZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sCisJCQkgICAgICAgKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDMyKSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudC0+dGhyZWFkLmZzciwgJmZwdS0+c2lfZnNyKTsKKwllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50LT50aHJlYWQuZnBxZGVwdGgsICZmcHUtPnNpX2ZwcWRlcHRoKTsKKwlpZiAoY3VycmVudC0+dGhyZWFkLmZwcWRlcHRoICE9IDApCisJCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQuZnBxdWV1ZVswXSwKKwkJCQkJJmZwdS0+c2lfZnBxdWV1ZVswXSwKKwkJCQkJKChzaXplb2YodW5zaWduZWQgbG9uZykgKworCQkJCQkoc2l6ZW9mKHVuc2lnbmVkIGxvbmcgKikpKSoxNikpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBzYXZlX3J3aW5fc3RhdGUoaW50IHdzYXZlZCwgX19zaWdpbmZvX3J3aW5fdCBfX3VzZXIgKnJ3aW4pCit7CisJaW50IGksIGVyciA9IF9fcHV0X3VzZXIod3NhdmVkLCAmcndpbi0+d3NhdmVkKTsKKworCWZvciAoaSA9IDA7IGkgPCB3c2F2ZWQ7IGkrKykgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdzMyICpycDsKKwkJdW5zaWduZWQgbG9uZyBmcDsKKworCQlycCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlZ193aW5kb3dbaV07CisJCWZwID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5yd2J1Zl9zdGtwdHJzW2ldOworCQllcnIgfD0gY29weV90b191c2VyKCZyd2luLT5yZWdfd2luZG93W2ldLCBycCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93MzIpKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnAsICZyd2luLT5yd2J1Zl9zdGtwdHJzW2ldKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IHJlc3RvcmVfcndpbl9zdGF0ZShfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcnApCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0ID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCWludCBpLCB3c2F2ZWQsIGVycjsKKworCV9fZ2V0X3VzZXIod3NhdmVkLCAmcnAtPndzYXZlZCk7CisJaWYgKHdzYXZlZCA+IE5TV0lOUykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwllcnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCB3c2F2ZWQ7IGkrKykgeworCQllcnIgfD0gY29weV9mcm9tX3VzZXIoJnQtPnJlZ193aW5kb3dbaV0sCisJCQkJICAgICAgJnJwLT5yZWdfd2luZG93W2ldLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdzMyKSk7CisJCWVyciB8PSBfX2dldF91c2VyKHQtPnJ3YnVmX3N0a3B0cnNbaV0sCisJCQkJICAmcnAtPnJ3YnVmX3N0a3B0cnNbaV0pOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdC0+d19zYXZlZCA9IHdzYXZlZDsKKwlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7CisJaWYgKHQtPndfc2F2ZWQpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworCit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWd1dGlsXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWd1dGlsXzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkYzUwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NpZ3V0aWxfNjQuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjaW5jbHVkZSAic2lndXRpbC5oIgorCitpbnQgc2F2ZV9mcHVfc3RhdGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fc2lnaW5mb19mcHVfdCBfX3VzZXIgKmZwdSkKK3sKKwl1bnNpZ25lZCBsb25nICpmcHJlZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZwcmVnczsKKwl1bnNpZ25lZCBsb25nIGZwcnM7CisJaW50IGVyciA9IDA7CisJCisJZnBycyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzYXZlZFswXTsKKwlpZiAoZnBycyAmIEZQUlNfREwpCisJCWVyciB8PSBjb3B5X3RvX3VzZXIoJmZwdS0+c2lfZmxvYXRfcmVnc1swXSwgZnByZWdzLAorCQkJCSAgICAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzMikpOworCWlmIChmcHJzICYgRlBSU19EVSkKKwkJZXJyIHw9IGNvcHlfdG9fdXNlcigmZnB1LT5zaV9mbG9hdF9yZWdzWzMyXSwgZnByZWdzKzE2LAorCQkJCSAgICAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAzMikpOworCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+eGZzclswXSwgJmZwdS0+c2lfZnNyKTsKKwllcnIgfD0gX19wdXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPmdzclswXSwgJmZwdS0+c2lfZ3NyKTsKKwllcnIgfD0gX19wdXRfdXNlcihmcHJzLCAmZnB1LT5zaV9mcHJzKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCByZXN0b3JlX2ZwdV9zdGF0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgX19zaWdpbmZvX2ZwdV90IF9fdXNlciAqZnB1KQoreworCXVuc2lnbmVkIGxvbmcgKmZwcmVncyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnByZWdzOworCXVuc2lnbmVkIGxvbmcgZnByczsKKwlpbnQgZXJyOworCisJZXJyID0gX19nZXRfdXNlcihmcHJzLCAmZnB1LT5zaV9mcHJzKTsKKwlmcHJzX3dyaXRlKDApOworCXJlZ3MtPnRzdGF0ZSAmPSB+VFNUQVRFX1BFRjsKKwlpZiAoZnBycyAmIEZQUlNfREwpCisJCWVyciB8PSBjb3B5X2Zyb21fdXNlcihmcHJlZ3MsICZmcHUtPnNpX2Zsb2F0X3JlZ3NbMF0sCisJCSAgICAgICAJICAgICAgIChzaXplb2YodW5zaWduZWQgaW50KSAqIDMyKSk7CisJaWYgKGZwcnMgJiBGUFJTX0RVKQorCQllcnIgfD0gY29weV9mcm9tX3VzZXIoZnByZWdzKzE2LCAmZnB1LT5zaV9mbG9hdF9yZWdzWzMyXSwKKwkJICAgICAgIAkgICAgICAgKHNpemVvZih1bnNpZ25lZCBpbnQpICogMzIpKTsKKwllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF0sICZmcHUtPnNpX2Zzcik7CisJZXJyIHw9IF9fZ2V0X3VzZXIoY3VycmVudF90aHJlYWRfaW5mbygpLT5nc3JbMF0sICZmcHUtPnNpX2dzcik7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5mcHNhdmVkWzBdIHw9IGZwcnM7CisJcmV0dXJuIGVycjsKK30KKworaW50IHNhdmVfcndpbl9zdGF0ZShpbnQgd3NhdmVkLCBfX3NpZ2luZm9fcndpbl90IF9fdXNlciAqcndpbikKK3sKKwlpbnQgaSwgZXJyID0gX19wdXRfdXNlcih3c2F2ZWQsICZyd2luLT53c2F2ZWQpOworCisJZm9yIChpID0gMDsgaSA8IHdzYXZlZDsgaSsrKSB7CisJCXN0cnVjdCByZWdfd2luZG93ICpycCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlZ193aW5kb3dbaV07CisJCXVuc2lnbmVkIGxvbmcgZnAgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnJ3YnVmX3N0a3B0cnNbaV07CisKKwkJZXJyIHw9IGNvcHlfdG9fdXNlcigmcndpbi0+cmVnX3dpbmRvd1tpXSwgcnAsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmVnX3dpbmRvdykpOworCQllcnIgfD0gX19wdXRfdXNlcihmcCwgJnJ3aW4tPnJ3YnVmX3N0a3B0cnNbaV0pOworCX0KKwlyZXR1cm4gZXJyOworfQorCitpbnQgcmVzdG9yZV9yd2luX3N0YXRlKF9fc2lnaW5mb19yd2luX3QgX191c2VyICpycCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJaW50IGksIHdzYXZlZCwgZXJyOworCisJX19nZXRfdXNlcih3c2F2ZWQsICZycC0+d3NhdmVkKTsKKwlpZiAod3NhdmVkID4gTlNXSU5TKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IDA7CisJZm9yIChpID0gMDsgaSA8IHdzYXZlZDsgaSsrKSB7CisJCWVyciB8PSBjb3B5X2Zyb21fdXNlcigmdC0+cmVnX3dpbmRvd1tpXSwKKwkJCQkgICAgICAmcnAtPnJlZ193aW5kb3dbaV0sCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByZWdfd2luZG93KSk7CisJCWVyciB8PSBfX2dldF91c2VyKHQtPnJ3YnVmX3N0a3B0cnNbaV0sCisJCQkJICAmcnAtPnJ3YnVmX3N0a3B0cnNbaV0pOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X3RocmVhZF93c2F2ZWQod3NhdmVkKTsKKwlzeW5jaHJvbml6ZV91c2VyX3N0YWNrKCk7CisJaWYgKGdldF90aHJlYWRfd3NhdmVkKCkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zXzY0LmMKaW5kZXggMzcyYWQ1OS4uODNiNDdhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXNfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltc182NC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgpAQCAtMzgsNSArMzksMTUgQEAKIEVYUE9SVF9TWU1CT0woc3VuNHZfbmlhZ2FyYTJfZ2V0cGVyZik7CiBFWFBPUlRfU1lNQk9MKHN1bjR2X25pYWdhcmEyX3NldHBlcmYpOwogCisvKiBmcm9tIGh3ZWlnaHQuUyAqLworRVhQT1JUX1NZTUJPTChfX2FyY2hfaHdlaWdodDgpOworRVhQT1JUX1NZTUJPTChfX2FyY2hfaHdlaWdodDE2KTsKK0VYUE9SVF9TWU1CT0woX19hcmNoX2h3ZWlnaHQzMik7CitFWFBPUlRfU1lNQk9MKF9fYXJjaF9od2VpZ2h0NjQpOworCisvKiBmcm9tIGZmc19mZnouUyAqLworRVhQT1JUX1NZTUJPTChmZnMpOworRVhQT1JUX1NZTUJPTChfX2Zmcyk7CisKIC8qIEV4cG9ydGluZyBhIHN5bWJvbCBmcm9tIC9pbml0L21haW4uYyAqLwogRVhQT1JUX1NZTUJPTChzYXZlZF9jb21tYW5kX2xpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3N0YXRlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zc3RhdGUuYwppbmRleCA4Y2RiZTU5Li5jNTlhZjU0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zc3RhdGUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zc3RhdGUuYwpAQCAtMTQsMTUgKzE0LDEwIEBACiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2luY2x1ZGUgImtlcm5lbC5oIgorCiBzdGF0aWMgaW50IGh2X3N1cHBvcnRzX3NvZnRfc3RhdGU7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGtpbWFnZV9hZGRyX3RvX3JhKGNvbnN0IGNoYXIgKnApCi17Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZykgcDsKLQotCXJldHVybiBrZXJuX2Jhc2UgKyAodmFsIC0gS0VSTkJBU0UpOwotfQotCiBzdGF0aWMgdm9pZCBkb19zZXRfc3N0YXRlKHVuc2lnbmVkIGxvbmcgc3RhdGUsIGNvbnN0IGNoYXIgKm1zZykKIHsKIAl1bnNpZ25lZCBsb25nIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TCmluZGV4IDQ0ZTVmYWYuLmQ5N2YzZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5czMyLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzMzIuUwpAQCAtODEsNyArODEsNiBAQAogU0lHTjIoc3lzMzJfZmFkdmlzZTY0XzY0LCBjb21wYXRfc3lzX2ZhZHZpc2U2NF82NCwgJW8wLCAlbzUpCiBTSUdOMihzeXMzMl9iZGZsdXNoLCBzeXNfYmRmbHVzaCwgJW8wLCAlbzEpCiBTSUdOMShzeXMzMl9tbG9ja2FsbCwgc3lzX21sb2NrYWxsLCAlbzApCi1TSUdOMShzeXMzMl9uZnNzZXJ2Y3RsLCBjb21wYXRfc3lzX25mc3NlcnZjdGwsICVvMCkKIFNJR04xKHN5czMyX2Nsb2NrX25hbm9zbGVlcCwgY29tcGF0X3N5c19jbG9ja19uYW5vc2xlZXAsICVvMSkKIFNJR04xKHN5czMyX3RpbWVyX3NldHRpbWUsIGNvbXBhdF9zeXNfdGltZXJfc2V0dGltZSwgJW8xKQogU0lHTjEoc3lzMzJfaW9fc3VibWl0LCBjb21wYXRfc3lzX2lvX3N1Ym1pdCwgJW8xKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCmluZGV4IDZlNDkyZDUuLjA5ZDhlYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qMjM1Ki8JLmxvbmcgc3lzX2ZzdGF0ZnM2NCwgc3lzX2xsc2Vlaywgc3lzX21sb2NrLCBzeXNfbXVubG9jaywgc3lzX21sb2NrYWxsCiAvKjI0MCovCS5sb25nIHN5c19tdW5sb2NrYWxsLCBzeXNfc2NoZWRfc2V0cGFyYW0sIHN5c19zY2hlZF9nZXRwYXJhbSwgc3lzX3NjaGVkX3NldHNjaGVkdWxlciwgc3lzX3NjaGVkX2dldHNjaGVkdWxlcgogLyoyNDUqLwkubG9uZyBzeXNfc2NoZWRfeWllbGQsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgc3lzX25hbm9zbGVlcAotLyoyNTAqLwkubG9uZyBzeXNfbXJlbWFwLCBzeXNfc3lzY3RsLCBzeXNfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXNfbmZzc2VydmN0bAorLyoyNTAqLwkubG9uZyBzeXNfbXJlbWFwLCBzeXNfc3lzY3RsLCBzeXNfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXNfbmlfc3lzY2FsbAogLyoyNTUqLwkubG9uZyBzeXNfc3luY19maWxlX3JhbmdlLCBzeXNfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19nZXRyZXMsIHN5c19jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5LCBzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c190aW1lcl9zZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSwgc3lzX3RpbWVyX2dldG92ZXJydW4KIC8qMjY1Ki8JLmxvbmcgc3lzX3RpbWVyX2RlbGV0ZSwgc3lzX3RpbWVyX2NyZWF0ZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfaW9fc2V0dXAsIHN5c19pb19kZXN0cm95CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKaW5kZXggZjU2NjUxOC4uZWRiZWM0NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwpAQCAtNjgsNyArNjgsNyBAQAogCS53b3JkIGNvbXBhdF9zeXNfZnN0YXRmczY0LCBzeXNfbGxzZWVrLCBzeXNfbWxvY2ssIHN5c19tdW5sb2NrLCBzeXMzMl9tbG9ja2FsbAogLyoyNDAqLwkud29yZCBzeXNfbXVubG9ja2FsbCwgc3lzMzJfc2NoZWRfc2V0cGFyYW0sIHN5czMyX3NjaGVkX2dldHBhcmFtLCBzeXMzMl9zY2hlZF9zZXRzY2hlZHVsZXIsIHN5czMyX3NjaGVkX2dldHNjaGVkdWxlcgogCS53b3JkIHN5c19zY2hlZF95aWVsZCwgc3lzMzJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgc3lzMzJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBjb21wYXRfc3lzX25hbm9zbGVlcAotLyoyNTAqLwkud29yZCBzeXNfbXJlbWFwLCBjb21wYXRfc3lzX3N5c2N0bCwgc3lzMzJfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXMzMl9uZnNzZXJ2Y3RsCisvKjI1MCovCS53b3JkIHN5c19tcmVtYXAsIGNvbXBhdF9zeXNfc3lzY3RsLCBzeXMzMl9nZXRzaWQsIHN5c19mZGF0YXN5bmMsIHN5c19uaXNfc3lzY2FsbAogCS53b3JkIHN5czMyX3N5bmNfZmlsZV9yYW5nZSwgY29tcGF0X3N5c19jbG9ja19zZXR0aW1lLCBjb21wYXRfc3lzX2Nsb2NrX2dldHRpbWUsIGNvbXBhdF9zeXNfY2xvY2tfZ2V0cmVzLCBzeXMzMl9jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLndvcmQgY29tcGF0X3N5c19zY2hlZF9nZXRhZmZpbml0eSwgY29tcGF0X3N5c19zY2hlZF9zZXRhZmZpbml0eSwgc3lzMzJfdGltZXJfc2V0dGltZSwgY29tcGF0X3N5c190aW1lcl9nZXR0aW1lLCBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgogCS53b3JkIHN5c190aW1lcl9kZWxldGUsIGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlLCBzeXNfbmlfc3lzY2FsbCwgY29tcGF0X3N5c19pb19zZXR1cCwgc3lzX2lvX2Rlc3Ryb3kKQEAgLTE0NSw3ICsxNDUsNyBAQAogCS53b3JkIHN5c19mc3RhdGZzNjQsIHN5c19sbHNlZWssIHN5c19tbG9jaywgc3lzX211bmxvY2ssIHN5c19tbG9ja2FsbAogLyoyNDAqLwkud29yZCBzeXNfbXVubG9ja2FsbCwgc3lzX3NjaGVkX3NldHBhcmFtLCBzeXNfc2NoZWRfZ2V0cGFyYW0sIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIsIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIKIAkud29yZCBzeXNfc2NoZWRfeWllbGQsIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgc3lzX25hbm9zbGVlcAotLyoyNTAqLwkud29yZCBzeXNfNjRfbXJlbWFwLCBzeXNfc3lzY3RsLCBzeXNfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXNfbmZzc2VydmN0bAorLyoyNTAqLwkud29yZCBzeXNfNjRfbXJlbWFwLCBzeXNfc3lzY3RsLCBzeXNfZ2V0c2lkLCBzeXNfZmRhdGFzeW5jLCBzeXNfbmlzX3N5c2NhbGwKIAkud29yZCBzeXNfc3luY19maWxlX3JhbmdlLCBzeXNfY2xvY2tfc2V0dGltZSwgc3lzX2Nsb2NrX2dldHRpbWUsIHN5c19jbG9ja19nZXRyZXMsIHN5c19jbG9ja19uYW5vc2xlZXAKIC8qMjYwKi8JLndvcmQgc3lzX3NjaGVkX2dldGFmZmluaXR5LCBzeXNfc2NoZWRfc2V0YWZmaW5pdHksIHN5c190aW1lcl9zZXR0aW1lLCBzeXNfdGltZXJfZ2V0dGltZSwgc3lzX3RpbWVyX2dldG92ZXJydW4KIAkud29yZCBzeXNfdGltZXJfZGVsZXRlLCBzeXNfdGltZXJfY3JlYXRlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2lvX3NldHVwLCBzeXNfaW9fZGVzdHJveQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwppbmRleCAzNWNmZjE2Li43NmU0YWMxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KIAogZW51bSBkaXJlY3Rpb24gewpAQCAtMzczLDE2ICszNzQsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBjaGFyIHBvcGNfaGVscGVyW10gPSB7Ci0wLCAxLCAxLCAyLCAxLCAyLCAyLCAzLAotMSwgMiwgMiwgMywgMiwgMywgMywgNCwgCi19OwotCiBpbnQgaGFuZGxlX3BvcGModTMyIGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXU2NCB2YWx1ZTsKLQlpbnQgcmV0LCBpLCByZCA9ICgoaW5zbiA+PiAyNSkgJiAweDFmKTsKIAlpbnQgZnJvbV9rZXJuZWwgPSAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpICE9IDA7CisJaW50IHJldCwgcmQgPSAoKGluc24gPj4gMjUpICYgMHgxZik7CisJdTY0IHZhbHVlOwogCSAgICAgICAgICAgICAgICAgICAgICAgIAogCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTLCAxLCByZWdzLCAwKTsKIAlpZiAoaW5zbiAmIDB4MjAwMCkgewpAQCAtMzkyLDEwICszODgsNyBAQAogCQltYXliZV9mbHVzaF93aW5kb3dzKDAsIGluc24gJiAweDFmLCByZCwgZnJvbV9rZXJuZWwpOwogCQl2YWx1ZSA9IGZldGNoX3JlZyhpbnNuICYgMHgxZiwgcmVncyk7CiAJfQotCWZvciAocmV0ID0gMCwgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCXJldCArPSBwb3BjX2hlbHBlclt2YWx1ZSAmIDB4Zl07Ci0JCXZhbHVlID4+PSA0OwotCX0KKwlyZXQgPSBod2VpZ2h0NjQodmFsdWUpOwogCWlmIChyZCA8IDE2KSB7CiAJCWlmIChyZCkKIAkJCXJlZ3MtPnVfcmVnc1tyZF0gPSByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBjMDIyMDc1Li4wZTE2MDU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwNyw3ICsxMDcsMjYgQEAKIAkJKiguc3VuNHZfMmluc25fcGF0Y2gpCiAJCV9fc3VuNHZfMmluc25fcGF0Y2hfZW5kID0gLjsKIAl9Ci0KKwkuc3dhcHBlcl90c2JfcGh5c19wYXRjaCA6IHsKKwkJX19zd2FwcGVyX3RzYl9waHlzX3BhdGNoID0gLjsKKwkJKiguc3dhcHBlcl90c2JfcGh5c19wYXRjaCkKKwkJX19zd2FwcGVyX3RzYl9waHlzX3BhdGNoX2VuZCA9IC47CisJfQorCS5zd2FwcGVyXzRtX3RzYl9waHlzX3BhdGNoIDogeworCQlfX3N3YXBwZXJfNG1fdHNiX3BoeXNfcGF0Y2ggPSAuOworCQkqKC5zd2FwcGVyXzRtX3RzYl9waHlzX3BhdGNoKQorCQlfX3N3YXBwZXJfNG1fdHNiX3BoeXNfcGF0Y2hfZW5kID0gLjsKKwl9CisJLnBvcGNfM2luc25fcGF0Y2ggOiB7CisJCV9fcG9wY18zaW5zbl9wYXRjaCA9IC47CisJCSooLnBvcGNfM2luc25fcGF0Y2gpCisJCV9fcG9wY18zaW5zbl9wYXRjaF9lbmQgPSAuOworCX0KKwkucG9wY182aW5zbl9wYXRjaCA6IHsKKwkJX19wb3BjXzZpbnNuX3BhdGNoID0gLjsKKwkJKigucG9wY182aW5zbl9wYXRjaCkKKwkJX19wb3BjXzZpbnNuX3BhdGNoX2VuZCA9IC47CisJfQogCVBFUkNQVV9TRUNUSU9OKFNNUF9DQUNIRV9CWVRFUykKIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQppbmRleCA3ZjAxYjhmLi5hM2ZjNDM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL2xpYi9NYWtlZmlsZQpAQCAtMzEsMTMgKzMxLDEzIEBACiBsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gTkdwYXRjaC5vIE5HcGFnZS5vIE5HYnplcm8ubwogCiBsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gTkcybWVtY3B5Lm8gTkcyY29weV9mcm9tX3VzZXIubyBORzJjb3B5X3RvX3VzZXIubwotbGliLSQoQ09ORklHX1NQQVJDNjQpICs9ICBORzJwYXRjaC5vIE5HMnBhZ2UubworbGliLSQoQ09ORklHX1NQQVJDNjQpICs9ICBORzJwYXRjaC5vCiAKIGxpYi0kKENPTkZJR19TUEFSQzY0KSArPSBHRU5tZW1jcHkubyBHRU5jb3B5X2Zyb21fdXNlci5vIEdFTmNvcHlfdG9fdXNlci5vCiBsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gR0VOcGF0Y2gubyBHRU5wYWdlLm8gR0VOYnplcm8ubwogCiBsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gY29weV9pbl91c2VyLm8gdXNlcl9maXh1cC5vIG1lbW1vdmUubwotbGliLSQoQ09ORklHX1NQQVJDNjQpICs9IG1jb3VudC5vIGlwY3N1bS5vIHhvci5vCitsaWItJChDT05GSUdfU1BBUkM2NCkgKz0gbWNvdW50Lm8gaXBjc3VtLm8geG9yLm8gaHdlaWdodC5vIGZmcy5vCiAKIG9iai15ICAgICAgICAgICAgICAgICArPSBpb21hcC5vCiBvYmotJChDT05GSUdfU1BBUkMzMikgKz0gYXRvbWljMzIubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvTkcycGFnZS5TIGIvYXJjaC9zcGFyYy9saWIvTkcycGFnZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2I2YjdjLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvbGliL05HMnBhZ2UuUworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qIE5HMnBhZ2UuUzogTmlhZ2FyYS0yIG9wdGltaXplZCBjbGVhciBhbmQgY29weSBwYWdlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKLSAqLwotCi0jaW5jbHVkZSA8YXNtL2FzaS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3Zpc2FzbS5oPgotCi0JLnRleHQKLQkuYWxpZ24JMzIKLQotCS8qIFRoaXMgaXMgaGVhdmlseSBzaW1wbGlmaWVkIGZyb20gdGhlIHN1bjR1IHZhcmlhbnRzCi0JICogYmVjYXVzZSBOaWFnYXJhLTIgZG9lcyBub3QgaGF2ZSBhbnkgRC1jYWNoZSBhbGlhc2luZyBpc3N1ZXMuCi0JICovCi1ORzJjb3B5X3VzZXJfcGFnZToJLyogJW8wPWRlc3QsICVvMT1zcmMsICVvMj12YWRkciAqLwotCXByZWZldGNoCVslbzEgKyAweDAwXSwgI29uZV9yZWFkCi0JcHJlZmV0Y2gJWyVvMSArIDB4NDBdLCAjb25lX3JlYWQKLQlWSVNFbnRyeUhhbGYKLQlzZXQJCVBBR0VfU0laRSwgJWc3Ci0Jc3ViCQklbzAsICVvMSwgJWczCi0xOglzdHhhCQklZzAsIFslbzEgKyAlZzNdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCi0Jc3ViY2MJCSVnNywgNjQsICVnNwotCWxkZGEJCVslbzFdIEFTSV9CTEtfUCwgJWYwCi0Jc3RkYQkJJWYwLCBbJW8xICsgJWczXSBBU0lfQkxLX1AKLQlhZGQJCSVvMSwgNjQsICVvMQotCWJuZSxwdAkJJXhjYywgMWIKLQkgcHJlZmV0Y2gJWyVvMSArIDB4NDBdLCAjb25lX3JlYWQKLQltZW1iYXIJCSNTeW5jCi0JVklTRXhpdEhhbGYKLQlyZXRsCi0JIG5vcAotCi0jZGVmaW5lIEJSQU5DSF9BTFdBWVMJMHgxMDY4MDAwMAotI2RlZmluZSBOT1AJCTB4MDEwMDAwMDAKLSNkZWZpbmUgTkdfRE9fUEFUQ0goT0xELCBORVcpCVwKLQlzZXRoaQklaGkoTkVXKSwgJWcxOyBcCi0Jb3IJJWcxLCAlbG8oTkVXKSwgJWcxOyBcCi0Jc2V0aGkJJWhpKE9MRCksICVnMjsgXAotCW9yCSVnMiwgJWxvKE9MRCksICVnMjsgXAotCXN1YgklZzEsICVnMiwgJWcxOyBcCi0Jc2V0aGkJJWhpKEJSQU5DSF9BTFdBWVMpLCAlZzM7IFwKLQlzbGwJJWcxLCAxMSwgJWcxOyBcCi0Jc3JsCSVnMSwgMTEgKyAyLCAlZzE7IFwKLQlvcgklZzMsICVsbyhCUkFOQ0hfQUxXQVlTKSwgJWczOyBcCi0Jb3IJJWczLCAlZzEsICVnMzsgXAotCXN0dwklZzMsIFslZzJdOyBcCi0Jc2V0aGkJJWhpKE5PUCksICVnMzsgXAotCW9yCSVnMywgJWxvKE5PUCksICVnMzsgXAotCXN0dwklZzMsIFslZzIgKyAweDRdOyBcCi0JZmx1c2gJJWcyOwotCi0JLmdsb2JsCW5pYWdhcmEyX3BhdGNoX3BhZ2VvcHMKLQkudHlwZQluaWFnYXJhMl9wYXRjaF9wYWdlb3BzLCNmdW5jdGlvbgotbmlhZ2FyYTJfcGF0Y2hfcGFnZW9wczoKLQlOR19ET19QQVRDSChjb3B5X3VzZXJfcGFnZSwgTkcyY29weV91c2VyX3BhZ2UpCi0JTkdfRE9fUEFUQ0goX2NsZWFyX3BhZ2UsIE5HY2xlYXJfcGFnZSkKLQlOR19ET19QQVRDSChjbGVhcl91c2VyX3BhZ2UsIE5HY2xlYXJfdXNlcl9wYWdlKQotCXJldGwKLQkgbm9wCi0JLnNpemUJbmlhZ2FyYTJfcGF0Y2hfcGFnZW9wcywuLW5pYWdhcmEyX3BhdGNoX3BhZ2VvcHMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL05HcGFnZS5TIGIvYXJjaC9zcGFyYy9saWIvTkdwYWdlLlMKaW5kZXggNDI4OTIwZC4uYjllNzkwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvTkdwYWdlLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvTkdwYWdlLlMKQEAgLTE2LDU1ICsxNiw5MSBAQAogCSAqLwogCiBOR2NvcHlfdXNlcl9wYWdlOgkvKiAlbzA9ZGVzdCwgJW8xPXNyYywgJW8yPXZhZGRyICovCi0JcHJlZmV0Y2gJWyVvMSArIDB4MDBdLCAjb25lX3JlYWQKLQltb3YJCTgsICVnMQotCW1vdgkJMTYsICVnMgotCW1vdgkJMjQsICVnMworCXNhdmUJCSVzcCwgLTE5MiwgJXNwCisJcmQJCSVhc2ksICVnMworCXdyCQklZzAsIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QLCAlYXNpCiAJc2V0CQlQQUdFX1NJWkUsICVnNworCXByZWZldGNoCVslaTEgKyAweDAwXSwgI29uZV9yZWFkCisJcHJlZmV0Y2gJWyVpMSArIDB4NDBdLCAjb25lX3JlYWQKIAotMToJbGRkYQkJWyVvMSArICVnMF0gQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVvMgotCWxkZGEJCVslbzEgKyAlZzJdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QLCAlbzQKLQlwcmVmZXRjaAlbJW8xICsgMHg0MF0sICNvbmVfcmVhZAotCWFkZAkJJW8xLCAzMiwgJW8xCi0Jc3R4YQkJJW8yLCBbJW8wICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN0eGEJCSVvMywgWyVvMCArICVnMV0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlsZGRhCQlbJW8xICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJW8yCi0Jc3R4YQkJJW80LCBbJW8wICsgJWcyXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN0eGEJCSVvNSwgWyVvMCArICVnM10gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlsZGRhCQlbJW8xICsgJWcyXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJW80Ci0JYWRkCQklbzEsIDMyLCAlbzEKLQlhZGQJCSVvMCwgMzIsICVvMAotCXN0eGEJCSVvMiwgWyVvMCArICVnMF0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlzdHhhCQklbzMsIFslbzAgKyAlZzFdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCi0Jc3R4YQkJJW80LCBbJW8wICsgJWcyXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN0eGEJCSVvNSwgWyVvMCArICVnM10gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlzdWJjYwkJJWc3LCA2NCwgJWc3CisxOglwcmVmZXRjaAlbJWkxICsgMHg4MF0sICNvbmVfcmVhZAorCXByZWZldGNoCVslaTEgKyAweGMwXSwgI29uZV9yZWFkCisJbGRkYQkJWyVpMSArIDB4MDBdICVhc2ksICVvMgorCWxkZGEJCVslaTEgKyAweDEwXSAlYXNpLCAlbzQKKwlsZGRhCQlbJWkxICsgMHgyMF0gJWFzaSwgJWwyCisJbGRkYQkJWyVpMSArIDB4MzBdICVhc2ksICVsNAorCXN0eGEJCSVvMiwgWyVpMCArIDB4MDBdICVhc2kKKwlzdHhhCQklbzMsIFslaTAgKyAweDA4XSAlYXNpCisJc3R4YQkJJW80LCBbJWkwICsgMHgxMF0gJWFzaQorCXN0eGEJCSVvNSwgWyVpMCArIDB4MThdICVhc2kKKwlzdHhhCQklbDIsIFslaTAgKyAweDIwXSAlYXNpCisJc3R4YQkJJWwzLCBbJWkwICsgMHgyOF0gJWFzaQorCXN0eGEJCSVsNCwgWyVpMCArIDB4MzBdICVhc2kKKwlzdHhhCQklbDUsIFslaTAgKyAweDM4XSAlYXNpCisJbGRkYQkJWyVpMSArIDB4NDBdICVhc2ksICVvMgorCWxkZGEJCVslaTEgKyAweDUwXSAlYXNpLCAlbzQKKwlsZGRhCQlbJWkxICsgMHg2MF0gJWFzaSwgJWwyCisJbGRkYQkJWyVpMSArIDB4NzBdICVhc2ksICVsNAorCXN0eGEJCSVvMiwgWyVpMCArIDB4NDBdICVhc2kKKwlzdHhhCQklbzMsIFslaTAgKyAweDQ4XSAlYXNpCisJc3R4YQkJJW80LCBbJWkwICsgMHg1MF0gJWFzaQorCXN0eGEJCSVvNSwgWyVpMCArIDB4NThdICVhc2kKKwlzdHhhCQklbDIsIFslaTAgKyAweDYwXSAlYXNpCisJc3R4YQkJJWwzLCBbJWkwICsgMHg2OF0gJWFzaQorCXN0eGEJCSVsNCwgWyVpMCArIDB4NzBdICVhc2kKKwlzdHhhCQklbDUsIFslaTAgKyAweDc4XSAlYXNpCisJYWRkCQklaTEsIDEyOCwgJWkxCisJc3ViY2MJCSVnNywgMTI4LCAlZzcKIAlibmUscHQJCSV4Y2MsIDFiCi0JIGFkZAkJJW8wLCAzMiwgJW8wCisJIGFkZAkJJWkwLCAxMjgsICVpMAorCXdyCQklZzMsIDB4MCwgJWFzaQogCW1lbWJhcgkJI1N5bmMKLQlyZXRsCi0JIG5vcAorCXJldAorCSByZXN0b3JlCiAKLQkuZ2xvYmwJCU5HY2xlYXJfcGFnZSwgTkdjbGVhcl91c2VyX3BhZ2UKKwkuYWxpZ24JCTMyCiBOR2NsZWFyX3BhZ2U6CQkvKiAlbzA9ZGVzdCAqLwogTkdjbGVhcl91c2VyX3BhZ2U6CS8qICVvMD1kZXN0LCAlbzE9dmFkZHIgKi8KLQltb3YJCTgsICVnMQotCW1vdgkJMTYsICVnMgotCW1vdgkJMjQsICVnMworCXJkCQklYXNpLCAlZzMKKwl3cgkJJWcwLCBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJWFzaQogCXNldAkJUEFHRV9TSVpFLCAlZzcKIAotMToJc3R4YQkJJWcwLCBbJW8wICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN0eGEJCSVnMCwgWyVvMCArICVnMV0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlzdHhhCQklZzAsIFslbzAgKyAlZzJdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCi0Jc3R4YQkJJWcwLCBbJW8wICsgJWczXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCWFkZAkJJW8wLCAzMiwgJW8wCi0Jc3R4YQkJJWcwLCBbJW8wICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN0eGEJCSVnMCwgWyVvMCArICVnMV0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKLQlzdHhhCQklZzAsIFslbzAgKyAlZzJdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCi0Jc3R4YQkJJWcwLCBbJW8wICsgJWczXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAotCXN1YmNjCQklZzcsIDY0LCAlZzcKKzE6CXN0eGEJCSVnMCwgWyVvMCArIDB4MDBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDA4XSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHgxMF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4MThdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDIwXSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHgyOF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4MzBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDM4XSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHg0MF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4NDhdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDUwXSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHg1OF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4NjBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDY4XSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHg3MF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4NzhdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDgwXSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHg4OF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4OTBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweDk4XSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHhhMF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4YThdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweGIwXSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHhiOF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4YzBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweGM4XSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHhkMF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4ZDhdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweGUwXSAlYXNpCisJc3R4YQkJJWcwLCBbJW8wICsgMHhlOF0gJWFzaQorCXN0eGEJCSVnMCwgWyVvMCArIDB4ZjBdICVhc2kKKwlzdHhhCQklZzAsIFslbzAgKyAweGY4XSAlYXNpCisJc3ViY2MJCSVnNywgMjU2LCAlZzcKIAlibmUscHQJCSV4Y2MsIDFiCi0JIGFkZAkJJW8wLCAzMiwgJW8wCisJIGFkZAkJJW8wLCAyNTYsICVvMAorCXdyCQklZzMsIDB4MCwgJWFzaQogCW1lbWJhcgkJI1N5bmMKIAlyZXRsCiAJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYyBiL2FyY2gvc3BhcmMvbGliL2F0b21pYzMyLmMKaW5kZXggODYwMGViMi4uMWQzMmI1NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYXRvbWljMzIuYworKysgYi9hcmNoL3NwYXJjL2xpYi9hdG9taWMzMi5jCkBAIC02NSw3ICs2NSw3IEBACiAJaWYgKHJldCAhPSB1KQogCQl2LT5jb3VudGVyICs9IGE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShBVE9NSUNfSEFTSCh2KSwgZmxhZ3MpOwotCXJldHVybiByZXQgIT0gdTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChfX2F0b21pY19hZGRfdW5sZXNzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvZmZzLlMgYi9hcmNoL3NwYXJjL2xpYi9mZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzkzODlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9saWIvZmZzLlMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworCS5yZWdpc3RlcgklZzIsI3NjcmF0Y2gKKworCS50ZXh0CisJLmFsaWduCTMyCisKK0VOVFJZKGZmcykKKwlicm56LHB0CSVvMCwgMWYKKwkgbW92CTEsICVvMQorCXJldGwKKwkgY2xyCSVvMAorCW5vcAorCW5vcAorRU5UUlkoX19mZnMpCisJc2xseAklbzAsIDMyLCAlZzEJCS8qIDEgICovCisJc3JseAklbzAsIDMyLCAlZzIKKworCWNscgklbzEJCQkvKiAyICAqLworCW1vdnJ6CSVnMSwgJWcyLCAlbzAKKworCW1vdnJ6CSVnMSwgMzIsICVvMQkJLyogMyAgKi8KKzE6CWNscgklbzIKKworCXNsbHgJJW8wLCAoNjQgLSAxNiksICVnMQkvKiA0ICAqLworCXNybHgJJW8wLCAxNiwgJWcyCisKKwltb3ZyegklZzEsICVnMiwgJW8wCQkvKiA1ICAqLworCWNscgklbzMKKworCW1vdnJ6CSVnMSwgMTYsICVvMgkJLyogNiAgKi8KKwljbHIJJW80CisKKwlhbmQJJW8wLCAweGZmLCAlZzEJCS8qIDcgICovCisJc3JseAklbzAsIDgsICVnMgorCisJbW92cnoJJWcxLCAlZzIsICVvMAkJLyogOCAgKi8KKwljbHIJJW81CisKKwltb3ZyegklZzEsIDgsICVvMwkJLyogOSAgKi8KKwlhZGQJJW8yLCAlbzEsICVvMgorCisJYW5kCSVvMCwgMHhmLCAlZzEJCS8qIDEwICovCisJc3JseAklbzAsIDQsICVnMgorCisJbW92cnoJJWcxLCAlZzIsICVvMAkJLyogMTEgKi8KKwlhZGQJJW8yLCAlbzMsICVvMgorCisJbW92cnoJJWcxLCA0LCAlbzQJCS8qIDEyICovCisKKwlhbmQJJW8wLCAweDMsICVnMQkJLyogMTMgKi8KKwlzcmx4CSVvMCwgMiwgJWcyCisKKwltb3ZyegklZzEsICVnMiwgJW8wCQkvKiAxNCAqLworCWFkZAklbzIsICVvNCwgJW8yCisKKwltb3ZyegklZzEsIDIsICVvNQkJLyogMTUgKi8KKworCWFuZAklbzAsIDB4MSwgJWcxCQkvKiAxNiAqLworCisJYWRkCSVvMiwgJW81LCAlbzIJCS8qIDE3ICovCisJeG9yCSVnMSwgMHgxLCAlZzEKKworCXJldGwJCQkJLyogMTggKi8KKwkgYWRkCSVvMiwgJWcxLCAlbzAKK0VORFBST0MoZmZzKQorRU5EUFJPQyhfX2ZmcykKKworCS5zZWN0aW9uCS5wb3BjXzZpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCWZmcworCWJyeixwbgklbzAsIDk4ZgorCSBuZWcJJW8wLCAlZzEKKwl4bm9yCSVvMCwgJWcxLCAlbzEKKwlwb3BjCSVvMSwgJW8wCis5ODoJcmV0bAorCSBub3AKKwkud29yZAkJX19mZnMKKwluZWcJJW8wLCAlZzEKKwl4bm9yCSVvMCwgJWcxLCAlbzEKKwlwb3BjCSVvMSwgJW8wCisJcmV0bAorCSBzdWIJJW8wLCAxLCAlbzAKKwlub3AKKwkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2h3ZWlnaHQuUyBiL2FyY2gvc3BhcmMvbGliL2h3ZWlnaHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQxNGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9saWIvaHdlaWdodC5TCkBAIC0wLDAgKzEsNTEgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKwkudGV4dAorCS5hbGlnbgkzMgorRU5UUlkoX19hcmNoX2h3ZWlnaHQ4KQorCWJhLHB0CSV4Y2MsIF9fc3dfaHdlaWdodDgKKwkgbm9wCisJbm9wCitFTkRQUk9DKF9fYXJjaF9od2VpZ2h0OCkKKwkuc2VjdGlvbgkucG9wY18zaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQlfX2FyY2hfaHdlaWdodDgKKwlzbGx4CQklbzAsIDY0LTgsICVnMQorCXJldGwKKwkgcG9wYwkJJWcxLCAlbzAKKwkucHJldmlvdXMKKworRU5UUlkoX19hcmNoX2h3ZWlnaHQxNikKKwliYSxwdAkleGNjLCBfX3N3X2h3ZWlnaHQxNgorCSBub3AKKwlub3AKK0VORFBST0MoX19hcmNoX2h3ZWlnaHQxNikKKwkuc2VjdGlvbgkucG9wY18zaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQlfX2FyY2hfaHdlaWdodDE2CisJc2xseAkJJW8wLCA2NC0xNiwgJWcxCisJcmV0bAorCSBwb3BjCQklZzEsICVvMAorCS5wcmV2aW91cworCitFTlRSWShfX2FyY2hfaHdlaWdodDMyKQorCWJhLHB0CSV4Y2MsIF9fc3dfaHdlaWdodDMyCisJIG5vcAorCW5vcAorRU5EUFJPQyhfX2FyY2hfaHdlaWdodDMyKQorCS5zZWN0aW9uCS5wb3BjXzNpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCV9fYXJjaF9od2VpZ2h0MzIKKwlzbGx4CQklbzAsIDY0LTMyLCAlZzEKKwlyZXRsCisJIHBvcGMJCSVnMSwgJW8wCisJLnByZXZpb3VzCisKK0VOVFJZKF9fYXJjaF9od2VpZ2h0NjQpCisJYmEscHQJJXhjYywgX19zd19od2VpZ2h0NjQKKwkgbm9wCisJbm9wCitFTkRQUk9DKF9fYXJjaF9od2VpZ2h0NjQpCisJLnNlY3Rpb24JLnBvcGNfM2luc25fcGF0Y2gsICJheCIKKwkud29yZAkJX19hcmNoX2h3ZWlnaHQ2NAorCXJldGwKKwkgcG9wYwkJJW8wLCAlbzAKKwlub3AKKwkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggM2ZkOGUxOC4uNTgxNTMxZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKQEAgLTE1OTcsNiArMTU5Nyw0NCBAQAogc3RhdGljIHN0cnVjdCBodl90c2JfZGVzY3Iga3RzYl9kZXNjcltOVU1fS1RTQl9ERVNDUl07CiBleHRlcm4gc3RydWN0IHRzYiBzd2FwcGVyX3RzYltLRVJORUxfVFNCX05FTlRSSUVTXTsKIAorc3RhdGljIHZvaWQgcGF0Y2hfb25lX2t0c2JfcGh5cyh1bnNpZ25lZCBpbnQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmVuZCwgdW5zaWduZWQgbG9uZyBwYSkKK3sKKwlwYSA+Pj0gS1RTQl9QSFlTX1NISUZUOworCisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXVuc2lnbmVkIGludCAqaWEgPSAodW5zaWduZWQgaW50ICopKHVuc2lnbmVkIGxvbmcpKnN0YXJ0OworCisJCWlhWzBdID0gKGlhWzBdICYgfjB4M2ZmZmZmKSB8IChwYSA+PiAxMCk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaAklMCIgOiA6ICJyIiAoaWEpKTsKKworCQlpYVsxXSA9IChpYVsxXSAmIH4weDNmZikgfCAocGEgJiAweDNmZik7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaAklMCIgOiA6ICJyIiAoaWEgKyAxKSk7CisKKwkJc3RhcnQrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGt0c2JfcGh5c19wYXRjaCh2b2lkKQoreworCWV4dGVybiB1bnNpZ25lZCBpbnQgX19zd2FwcGVyX3RzYl9waHlzX3BhdGNoOworCWV4dGVybiB1bnNpZ25lZCBpbnQgX19zd2FwcGVyX3RzYl9waHlzX3BhdGNoX2VuZDsKKwl1bnNpZ25lZCBsb25nIGt0c2JfcGE7CisKKwlrdHNiX3BhID0ga2Vybl9iYXNlICsgKCh1bnNpZ25lZCBsb25nKSZzd2FwcGVyX3RzYlswXSAtIEtFUk5CQVNFKTsKKwlwYXRjaF9vbmVfa3RzYl9waHlzKCZfX3N3YXBwZXJfdHNiX3BoeXNfcGF0Y2gsCisJCQkgICAgJl9fc3dhcHBlcl90c2JfcGh5c19wYXRjaF9lbmQsIGt0c2JfcGEpOworI2lmbmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJeworCWV4dGVybiB1bnNpZ25lZCBpbnQgX19zd2FwcGVyXzRtX3RzYl9waHlzX3BhdGNoOworCWV4dGVybiB1bnNpZ25lZCBpbnQgX19zd2FwcGVyXzRtX3RzYl9waHlzX3BhdGNoX2VuZDsKKwlrdHNiX3BhID0gKGtlcm5fYmFzZSArCisJCSAgICgodW5zaWduZWQgbG9uZykmc3dhcHBlcl80bV90c2JbMF0gLSBLRVJOQkFTRSkpOworCXBhdGNoX29uZV9rdHNiX3BoeXMoJl9fc3dhcHBlcl80bV90c2JfcGh5c19wYXRjaCwKKwkJCSAgICAmX19zd2FwcGVyXzRtX3RzYl9waHlzX3BhdGNoX2VuZCwga3RzYl9wYSk7CisJfQorI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9rdHNiX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGt0c2JfcGE7CkBAIC0xNzE2LDggKzE3NTQsMTAgQEAKIAkJc3VuNHVfcGdwcm90X2luaXQoKTsKIAogCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMgfHwKLQkgICAgdGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkgICAgdGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgewogCQl0c2JfcGh5c19wYXRjaCgpOworCQlrdHNiX3BoeXNfcGF0Y2goKTsKKwl9CiAKIAlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgewogCQlzdW40dl9wYXRjaF90bGJfaGFuZGxlcnMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9LY29uZmlnIGIvYXJjaC90aWxlL0tjb25maWcKaW5kZXggMDI0OWI4Yi4uYjMwZjcxYSAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL0tjb25maWcKKysrIGIvYXJjaC90aWxlL0tjb25maWcKQEAgLTEyLDYgKzEyLDcgQEAKIAlzZWxlY3QgR0VORVJJQ19QRU5ESU5HX0lSUSBpZiBTTVAKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBTWVNfSFlQRVJWSVNPUgorCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRyBpZiAhTTM4NgogCiAjIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHdlIG5lZWQvd2FudCB0aGVzZSBvcHRpb25zLgogIwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vS2J1aWxkCmluZGV4IDg0OWFiMmYuLmFlYzYwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMiwzICsyLDQxIEBACiAKIGhlYWRlci15ICs9IHVjb250ZXh0LmgKIGhlYWRlci15ICs9IGhhcmR3YWxsLmgKKworZ2VuZXJpYy15ICs9IGJ1Zy5oCitnZW5lcmljLXkgKz0gYnVncy5oCitnZW5lcmljLXkgKz0gY3B1dGltZS5oCitnZW5lcmljLXkgKz0gZGV2aWNlLmgKK2dlbmVyaWMteSArPSBkaXY2NC5oCitnZW5lcmljLXkgKz0gZW1lcmdlbmN5LXJlc3RhcnQuaAorZ2VuZXJpYy15ICs9IGVycm5vLmgKK2dlbmVyaWMteSArPSBmYi5oCitnZW5lcmljLXkgKz0gZmNudGwuaAorZ2VuZXJpYy15ICs9IGlvY3RsLmgKK2dlbmVyaWMteSArPSBpb2N0bHMuaAorZ2VuZXJpYy15ICs9IGlwYy5oCitnZW5lcmljLXkgKz0gaXBjYnVmLmgKK2dlbmVyaWMteSArPSBpcnFfcmVncy5oCitnZW5lcmljLXkgKz0ga2RlYnVnLmgKK2dlbmVyaWMteSArPSBsb2NhbC5oCitnZW5lcmljLXkgKz0gbW9kdWxlLmgKK2dlbmVyaWMteSArPSBtc2didWYuaAorZ2VuZXJpYy15ICs9IG11dGV4LmgKK2dlbmVyaWMteSArPSBwYXJhbS5oCitnZW5lcmljLXkgKz0gcGFycG9ydC5oCitnZW5lcmljLXkgKz0gcG9sbC5oCitnZW5lcmljLXkgKz0gcG9zaXhfdHlwZXMuaAorZ2VuZXJpYy15ICs9IHJlc291cmNlLmgKK2dlbmVyaWMteSArPSBzY2F0dGVybGlzdC5oCitnZW5lcmljLXkgKz0gc2VtYnVmLmgKK2dlbmVyaWMteSArPSBzZXJpYWwuaAorZ2VuZXJpYy15ICs9IHNobWJ1Zi5oCitnZW5lcmljLXkgKz0gc2htcGFyYW0uaAorZ2VuZXJpYy15ICs9IHNvY2tldC5oCitnZW5lcmljLXkgKz0gc29ja2lvcy5oCitnZW5lcmljLXkgKz0gc3RhdGZzLmgKK2dlbmVyaWMteSArPSB0ZXJtYml0cy5oCitnZW5lcmljLXkgKz0gdGVybWlvcy5oCitnZW5lcmljLXkgKz0gdHlwZXMuaAorZ2VuZXJpYy15ICs9IHVjb250ZXh0LmgKK2dlbmVyaWMteSArPSB4b3IuaApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2J1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTJmZDg5Li4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWcuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWdzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYnVncy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTc5MWUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNjhhZDcuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGV2aWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYTRjMjUuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RpdjY0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGl2NjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkOTc4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGl2NjQuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZW1lcmdlbmN5LXJlc3RhcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxMWJkOS4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZW1lcmdlbmN5LXJlc3RhcnQuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lbWVyZ2VuY3ktcmVzdGFydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2Vycm5vLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZXJybm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4MmI1MC4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZXJybm8uaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZiLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZmIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E0OTg4ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZmIuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mYi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZmNudGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZhYjEyZC4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZmNudGwuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mY250bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDUxNTM3ZmYuLmM2NmY3OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTc1LDEyICs3NSw2IEBACiAKICNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKIAkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCi0vKgotICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KLSAqLwotI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCi0JCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCi0KICNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkgXAogCQlfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvY3RsLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW9jdGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI3OWZlMC4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW9jdGwuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzM0Yzc2Li4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ2ZTNkOS4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXBjLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXBjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXBjYnVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXBjYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzdlNTEuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lwY2J1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lwY2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lycV9yZWdzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RkOWMwYi4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcnFfcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWNlMWIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2xvY2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMWM1MzAuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tb2R1bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU0Yjc5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXNnYnVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXNnYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwOTEzNGMuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL21zZ2J1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21zZ2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL211dGV4LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXV0ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2MTAxYS4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXV0ZXguaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tdXRleC1kZWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NWQ0NTQuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYXJwb3J0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGFycG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjI1MmFmLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFycG9ydC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb2xsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ODUwOWQuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BvbGwuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmNhZTYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Bvc2l4X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGJjNGRiLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWQ3ODZmLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VtYnVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VtYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NzNiODMuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlbWJ1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NlcmlhbC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NlcmlhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGNiMGNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zZXJpYWwuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaG1idWYuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaG1idWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjMDVmYy4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2htYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2htYnVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2htcGFyYW0uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaG1wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2YzMGRlLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaG1wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NobXBhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc29ja2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNzEzODQuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zb2NraW9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZjZkNDcuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NvY2tpb3MuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zb2NraW9zLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdGZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTFmZTEuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGVybWJpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzNWIxMC4uMDAwMDAwMAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGVybWJpdHMuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90ZXJtYml0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MGQ3OGEuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy90ZXJtaW9zLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWU3OWJjLi4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmMwN2I5Li4wMDAwMDAwCi0tLSBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Vjb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20veG9yLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20veG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MmViMTIuLjAwMDAwMDAKLS0tIGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3hvci5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3hvci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvaHYvZHJ2X3Nyb21faW50Zi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvZHJ2X3Nyb21faW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTVmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfc3JvbV9pbnRmLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIEBmaWxlIGRydl9zcm9tX2ludGYuaAorICogSW50ZXJmYWNlIGRlZmluaXRpb25zIGZvciB0aGUgU1BJIEZsYXNoIFJPTSBkcml2ZXIuCisgKi8KKworI2lmbmRlZiBfU1lTX0hWX0lOQ0xVREVfRFJWX1NST01fSU5URl9ICisjZGVmaW5lIF9TWVNfSFZfSU5DTFVERV9EUlZfU1JPTV9JTlRGX0gKKworLyoqIFJlYWQgdGhpcyBvZmZzZXQgdG8gZ2V0IHRoZSB0b3RhbCBkZXZpY2Ugc2l6ZS4gKi8KKyNkZWZpbmUgU1JPTV9UT1RBTF9TSVpFX09GRiAgIDB4RjAwMDAwMDAKKworLyoqIFJlYWQgdGhpcyBvZmZzZXQgdG8gZ2V0IHRoZSBkZXZpY2Ugc2VjdG9yIHNpemUuICovCisjZGVmaW5lIFNST01fU0VDVE9SX1NJWkVfT0ZGICAweEYwMDAwMDA0CisKKy8qKiBSZWFkIHRoaXMgb2Zmc2V0IHRvIGdldCB0aGUgZGV2aWNlIHBhZ2Ugc2l6ZS4gKi8KKyNkZWZpbmUgU1JPTV9QQUdFX1NJWkVfT0ZGICAgIDB4RjAwMDAwMDgKKworLyoqIFdyaXRlIHRoaXMgb2Zmc2V0IHRvIGZsdXNoIGFueSBwZW5kaW5nIHdyaXRlcy4gKi8KKyNkZWZpbmUgU1JPTV9GTFVTSF9PRkYgICAgICAgIDB4RjEwMDAwMDAKKworLyoqIFdyaXRlIHRoaXMgb2Zmc2V0LCBwbHVzIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgYSBzZWN0b3IsIHRvCisgKiAgZXJhc2UgYSBzZWN0b3IuICBBbnkgd3JpdGUgZGF0YSBpcyBpZ25vcmVkLCBidXQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdAorICogIG9uZSBieXRlIG9mIHdyaXRlIGRhdGEuICBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgZHJpdmVyIGlzIGluIE1URCBtb2RlLgorICovCisjZGVmaW5lIFNST01fRVJBU0VfT0ZGICAgICAgICAweEYyMDAwMDAwCisKKyNlbmRpZiAvKiBfU1lTX0hWX0lOQ0xVREVfRFJWX1NST01fSU5URl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3BjaS5jIGIvYXJjaC90aWxlL2tlcm5lbC9wY2kuYwppbmRleCA2ZDRjYjVkLi4yYTgwMTRjIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogICogKHBpbiAtIDEpIGNvbnZlcnRzIGZyb20gdGhlIFBDSSBzdGFuZGFyZCdzIFsxOjRdIGNvbnZlbnRpb24gdG8KICAqIGEgbm9ybWFsIFswOjNdIHJhbmdlLgogICovCi1zdGF0aWMgaW50IHRpbGVfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IHRpbGVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyID0KIAkJKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKWRldi0+c3lzZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jIGIvYXJjaC90aWxlL2tlcm5lbC90aW1lLmMKaW5kZXggYzRiZTU4Yy4uZjZmNTBmMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jCkBAIC03OCw3ICs3OCw2IEBACiAJLnJhdGluZyA9IDMwMCwKIAkucmVhZCA9IGNsb2Nrc291cmNlX2dldF9jeWNsZXMsCiAJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkuc2hpZnQgPSAyMiwgICAvKiB0eXBpY2FsIHZhbHVlLCBlLmcuIHg4NiB0c2MgdXNlcyB0aGlzICovCiAJLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC05MSw4ICs5MCw2IEBACiAJY3ljbGVzX3Blcl9zZWMgPSBodl9zeXNjb25mKEhWX1NZU0NPTkZfQ1BVX1NQRUVEKTsKIAlzY2hlZF9jbG9ja19tdWx0ID0KIAkJY2xvY2tzb3VyY2VfaHoybXVsdChjeWNsZXNfcGVyX3NlYywgU0NIRURfQ0xPQ0tfU0hJRlQpOwotCWN5Y2xlX2NvdW50ZXJfY3MubXVsdCA9Ci0JCWNsb2Nrc291cmNlX2h6Mm11bHQoY3ljbGVzX3Blcl9zZWMsIGN5Y2xlX2NvdW50ZXJfY3Muc2hpZnQpOwogfQogCiB2b2lkIF9faW5pdCBjYWxpYnJhdGVfZGVsYXkodm9pZCkKQEAgLTEwNyw3ICsxMDQsNyBAQAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJLyogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIHNvdXJjZS4gKi8KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY3ljbGVfY291bnRlcl9jcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmN5Y2xlX2NvdW50ZXJfY3MsIGN5Y2xlc19wZXJfc2VjKTsKIAogCS8qIFN0YXJ0IHVwIHRoZSB0aWxlLXRpbWVyIGludGVycnVwdCBzb3VyY2Ugb24gdGhlIGJvb3QgY3B1LiAqLwogCXNldHVwX3RpbGVfdGltZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9pbml0LmMgYi9hcmNoL3RpbGUvbW0vaW5pdC5jCmluZGV4IDRlMTBjNDAuLjczMDk5ODggMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9tbS9pbml0LmMKKysrIGIvYXJjaC90aWxlL21tL2luaXQuYwpAQCAtODM2LDggKzgzNiw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GTEFUTUVNCi0JaWYgKCFtZW1fbWFwKQotCQlCVUcoKTsKKwlCVUdfT04oIW1lbV9tYXApOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLng4NiBiL2FyY2gvdW0vS2NvbmZpZy54ODYKaW5kZXggZDMxZWNmMy4uMjFiZWJlNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLng4NgorKysgYi9hcmNoL3VtL0tjb25maWcueDg2CkBAIC0xMCw2ICsxMCwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIENNUFhDSEdfRE9VQkxFCisJYm9vbAorCWRlZmF1bHQgbgorCiBzb3VyY2UgImFyY2gveDg2L0tjb25maWcuY3B1IgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3VtL01ha2VmaWxlIGIvYXJjaC91bS9NYWtlZmlsZQppbmRleCBmYWI4MTIxLi5jMGY3MTJjIDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlCisrKyBiL2FyY2gvdW0vTWFrZWZpbGUKQEAgLTQxLDcgKzQxLDcgQEAKIEtCVUlMRF9DRkxBR1MgKz0gJChDRkxBR1MpICQoQ0ZMQUdTLXkpIC1EX19hcmNoX3VtX18gLURTVUJBUkNIPVwiJChTVUJBUkNIKVwiIFwKIAkkKEFSQ0hfSU5DTFVERSkgJChNT0RFX0lOQ0xVREUpIC1Edm1hcD1rZXJuZWxfdm1hcAlcCiAJLURpbjZhZGRyX2xvb3BiYWNrPWtlcm5lbF9pbjZhZGRyX2xvb3BiYWNrIFwKLQktRGluNmFkZHJfYW55PWtlcm5lbF9pbjZhZGRyX2FueQorCS1EaW42YWRkcl9hbnk9a2VybmVsX2luNmFkZHJfYW55IC1Ec3RycmNocj1rZXJuZWxfc3RycmNocgogCiBLQlVJTERfQUZMQUdTICs9ICQoQVJDSF9JTkNMVURFKQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCBkNTFjNDA0Li4zNjRjOGExIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTM5OSw4ICszOTksOCBAQAogICogaXMgZG9uZSB1bmRlciBhIHNwaW5sb2NrLiAgQ2hlY2tpbmcgd2hldGhlciB0aGUgZGV2aWNlIGlzIGluIHVzZSBpcwogICogbGluZS0+dHR5LT5jb3VudCA+IDEsIGFsc28gdW5kZXIgdGhlIHNwaW5sb2NrLgogICoKLSAqIHR0eS0+Y291bnQgc2VydmVzIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIGVuYWJsZWQgb3IKLSAqIGRpc2FibGVkIG9uIHRoZSBob3N0LiAgSWYgaXQncyBlcXVhbCB0byAxLCB0aGVuIHdlIGFyZSBkb2luZyB0aGUKKyAqIGxpbmUtPmNvdW50IHNlcnZlcyB0byBkZWNpZGUgd2hldGhlciB0aGUgZGV2aWNlIHNob3VsZCBiZSBlbmFibGVkIG9yCisgKiBkaXNhYmxlZCBvbiB0aGUgaG9zdC4gIElmIGl0J3MgZXF1YWwgdG8gMCwgdGhlbiB3ZSBhcmUgZG9pbmcgdGhlCiAgKiBmaXJzdCBvcGVuIG9yIGxhc3QgY2xvc2UuICBPdGhlcndpc2UsIG9wZW4gYW5kIGNsb3NlIGp1c3QgcmV0dXJuLgogICovCiAKQEAgLTQxNCwxNiArNDE0LDE2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWVyciA9IDA7Ci0JaWYgKHR0eS0+Y291bnQgPiAxKQorCWlmIChsaW5lLT5jb3VudCsrKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlzcGluX3VubG9jaygmbGluZS0+Y291bnRfbG9jayk7Ci0KKwlCVUdfT04odHR5LT5kcml2ZXJfZGF0YSk7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGxpbmU7CiAJbGluZS0+dHR5ID0gdHR5OwogCisJc3Bpbl91bmxvY2soJmxpbmUtPmNvdW50X2xvY2spOwogCWVyciA9IGVuYWJsZV9jaGFuKGxpbmUpOwotCWlmIChlcnIpCisJaWYgKGVycikgLyogbGluZV9jbG9zZSgpIHdpbGwgYmUgY2FsbGVkIGJ5IG91ciBjYWxsZXIgKi8KIAkJcmV0dXJuIGVycjsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZsaW5lLT50YXNrLCBsaW5lX3RpbWVyX2NiKTsKQEAgLTQzNiw3ICs0MzYsNyBAQAogCWNoYW5fd2luZG93X3NpemUoJmxpbmUtPmNoYW5fbGlzdCwgJnR0eS0+d2luc2l6ZS53c19yb3csCiAJCQkgJnR0eS0+d2luc2l6ZS53c19jb2wpOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmbGluZS0+Y291bnRfbG9jayk7CkBAIC00NjAsMTcgKzQ2MCwxNiBAQAogCWZsdXNoX2J1ZmZlcihsaW5lKTsKIAogCXNwaW5fbG9jaygmbGluZS0+Y291bnRfbG9jayk7Ci0JaWYgKCFsaW5lLT52YWxpZCkKLQkJZ290byBvdXRfdW5sb2NrOworCUJVR19PTighbGluZS0+dmFsaWQpOwogCi0JaWYgKHR0eS0+Y291bnQgPiAxKQorCWlmICgtLWxpbmUtPmNvdW50KQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlzcGluX3VubG9jaygmbGluZS0+Y291bnRfbG9jayk7Ci0KIAlsaW5lLT50dHkgPSBOVUxMOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCisJc3Bpbl91bmxvY2soJmxpbmUtPmNvdW50X2xvY2spOworCiAJaWYgKGxpbmUtPnNpZ2lvKSB7CiAJCXVucmVnaXN0ZXJfd2luY2godHR5KTsKIAkJbGluZS0+c2lnaW8gPSAwOwpAQCAtNDk4LDcgKzQ5Nyw3IEBACiAKIAlzcGluX2xvY2soJmxpbmUtPmNvdW50X2xvY2spOwogCi0JaWYgKGxpbmUtPnR0eSAhPSBOVUxMKSB7CisJaWYgKGxpbmUtPmNvdW50KSB7CiAJCSplcnJvcl9vdXQgPSAiRGV2aWNlIGlzIGFscmVhZHkgb3BlbiI7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTcyMiw0MSArNzIxLDUzIEBACiAJaW50IHBpZDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGxvbmcgc3RhY2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiB9OwogCi1zdGF0aWMgdm9pZCBmcmVlX3dpbmNoKHN0cnVjdCB3aW5jaCAqd2luY2gsIGludCBmcmVlX2lycV9vaykKK3N0YXRpYyB2b2lkIF9fZnJlZV93aW5jaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKGZyZWVfaXJxX29rKQotCQlmcmVlX2lycShXSU5DSF9JUlEsIHdpbmNoKTsKLQotCWxpc3RfZGVsKCZ3aW5jaC0+bGlzdCk7CisJc3RydWN0IHdpbmNoICp3aW5jaCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2luY2gsIHdvcmspOworCWZyZWVfaXJxKFdJTkNIX0lSUSwgd2luY2gpOwogCiAJaWYgKHdpbmNoLT5waWQgIT0gLTEpCiAJCW9zX2tpbGxfcHJvY2Vzcyh3aW5jaC0+cGlkLCAxKTsKLQlpZiAod2luY2gtPmZkICE9IC0xKQotCQlvc19jbG9zZV9maWxlKHdpbmNoLT5mZCk7CiAJaWYgKHdpbmNoLT5zdGFjayAhPSAwKQogCQlmcmVlX3N0YWNrKHdpbmNoLT5zdGFjaywgMCk7CiAJa2ZyZWUod2luY2gpOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX3dpbmNoKHN0cnVjdCB3aW5jaCAqd2luY2gpCit7CisJaW50IGZkID0gd2luY2gtPmZkOworCXdpbmNoLT5mZCA9IC0xOworCWlmIChmZCAhPSAtMSkKKwkJb3NfY2xvc2VfZmlsZShmZCk7CisJbGlzdF9kZWwoJndpbmNoLT5saXN0KTsKKwlfX2ZyZWVfd2luY2goJndpbmNoLT53b3JrKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IHdpbmNoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB3aW5jaCAqd2luY2ggPSBkYXRhOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGxpbmUgKmxpbmU7CisJaW50IGZkID0gd2luY2gtPmZkOwogCWludCBlcnI7CiAJY2hhciBjOwogCi0JaWYgKHdpbmNoLT5mZCAhPSAtMSkgewotCQllcnIgPSBnZW5lcmljX3JlYWQod2luY2gtPmZkLCAmYywgTlVMTCk7CisJaWYgKGZkICE9IC0xKSB7CisJCWVyciA9IGdlbmVyaWNfcmVhZChmZCwgJmMsIE5VTEwpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJaWYgKGVyciAhPSAtRUFHQUlOKSB7CisJCQkJd2luY2gtPmZkID0gLTE7CisJCQkJbGlzdF9kZWwoJndpbmNoLT5saXN0KTsKKwkJCQlvc19jbG9zZV9maWxlKGZkKTsKIAkJCQlwcmludGsoS0VSTl9FUlIgIndpbmNoX2ludGVycnVwdCA6ICIKIAkJCQkgICAgICAgInJlYWQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCAtZXJyKTsKIAkJCQlwcmludGsoS0VSTl9FUlIgImZkICVkIGlzIGxvc2luZyBTSUdXSU5DSCAiCiAJCQkJICAgICAgICJzdXBwb3J0XG4iLCB3aW5jaC0+dHR5X2ZkKTsKLQkJCQlmcmVlX3dpbmNoKHdpbmNoLCAwKTsKKwkJCQlJTklUX1dPUksoJndpbmNoLT53b3JrLCBfX2ZyZWVfd2luY2gpOworCQkJCXNjaGVkdWxlX3dvcmsoJndpbmNoLT53b3JrKTsKIAkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCQl9CiAJCQlnb3RvIG91dDsKQEAgLTgyOCw3ICs4MzksNyBAQAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbGUsIG5leHQsICZ3aW5jaF9oYW5kbGVycykgewogCQl3aW5jaCA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3Qgd2luY2gsIGxpc3QpOwogCQlpZiAod2luY2gtPnR0eSA9PSB0dHkpIHsKLQkJCWZyZWVfd2luY2god2luY2gsIDEpOworCQkJZnJlZV93aW5jaCh3aW5jaCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTg0NCw3ICs4NTUsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZSwgbmV4dCwgJndpbmNoX2hhbmRsZXJzKSB7CiAJCXdpbmNoID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCB3aW5jaCwgbGlzdCk7Ci0JCWZyZWVfd2luY2god2luY2gsIDEpOworCQlmcmVlX3dpbmNoKHdpbmNoKTsKIAl9CiAKIAlzcGluX3VubG9jaygmd2luY2hfaGFuZGxlcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy94dGVybS5jIGIvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmMKaW5kZXggOGFjNzE0Ni4uMmUxZGU1NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmMKQEAgLTEyMyw2ICsxMjMsNyBAQAogCQllcnIgPSAtZXJybm87CiAJCXByaW50ayhVTV9LRVJOX0VSUiAieHRlcm1fb3BlbiA6IHVubGluayBmYWlsZWQsIGVycm5vID0gJWRcbiIsCiAJCSAgICAgICBlcnJubyk7CisJCWNsb3NlKGZkKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJY2xvc2UoZmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wdHJhY2UtZ2VuZXJpYy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wdHJhY2UtZ2VuZXJpYy5oCmluZGV4IGFlMDg0YWQuLjFhN2QyNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcHRyYWNlLWdlbmVyaWMuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3B0cmFjZS1nZW5lcmljLmgKQEAgLTQyLDEwICs0Miw2IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0cmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCByZWdubyk7CiBleHRlcm4gaW50IHB1dHJlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwotZXh0ZXJuIGludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLAotCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiBpbnQgc2V0X2ZwcmVncyhzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBfX3VzZXIgKmJ1ZiwKLQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiAKIGV4dGVybiBpbnQgYXJjaF9jb3B5X3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CiBleHRlcm4gdm9pZCBjbGVhcl9mbHVzaGVkX3RscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9saW5lLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xpbmUuaAppbmRleCA3MmY0ZjI1Li42M2RmM2NhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xpbmUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2xpbmUuaApAQCAtMzMsNiArMzMsNyBAQAogc3RydWN0IGxpbmUgewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3BpbmxvY2tfdCBjb3VudF9sb2NrOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJaW50IHZhbGlkOwogCiAJY2hhciAqaW5pdF9zdHI7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3JlZ2lzdGVycy5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9yZWdpc3RlcnMuaAppbmRleCBiMGI0NTg5Li5mMWUwYWE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3JlZ2lzdGVycy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvcmVnaXN0ZXJzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIGV4dGVybiBpbnQgc2F2ZV9yZWdpc3RlcnMoaW50IHBpZCwgc3RydWN0IHVtbF9wdF9yZWdzICpyZWdzKTsKIGV4dGVybiBpbnQgcmVzdG9yZV9yZWdpc3RlcnMoaW50IHBpZCwgc3RydWN0IHVtbF9wdF9yZWdzICpyZWdzKTsKIGV4dGVybiBpbnQgaW5pdF9yZWdpc3RlcnMoaW50IHBpZCk7Ci1leHRlcm4gdm9pZCBnZXRfc2FmZV9yZWdpc3RlcnModW5zaWduZWQgbG9uZyAqcmVncyk7CitleHRlcm4gdm9pZCBnZXRfc2FmZV9yZWdpc3RlcnModW5zaWduZWQgbG9uZyAqcmVncywgdW5zaWduZWQgbG9uZyAqZnBfcmVncyk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdGhyZWFkX3JlZyhpbnQgcmVnLCBqbXBfYnVmICpidWYpOwogZXh0ZXJuIGludCBnZXRfZnBfcmVnaXN0ZXJzKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgKnJlZ3MpOwogZXh0ZXJuIGludCBwdXRfZnBfcmVnaXN0ZXJzKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGZhYjQzNzEuLjIxYzFhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQlhcmNoX2NvcHlfdGhyZWFkKCZjdXJyZW50LT50aHJlYWQuYXJjaCwgJnAtPnRocmVhZC5hcmNoKTsKIAl9CiAJZWxzZSB7Ci0JCWdldF9zYWZlX3JlZ2lzdGVycyhwLT50aHJlYWQucmVncy5yZWdzLmdwKTsKKwkJZ2V0X3NhZmVfcmVnaXN0ZXJzKHAtPnRocmVhZC5yZWdzLnJlZ3MuZ3AsIHAtPnRocmVhZC5yZWdzLnJlZ3MuZnApOwogCQlwLT50aHJlYWQucmVxdWVzdC51LnRocmVhZCA9IGN1cnJlbnQtPnRocmVhZC5yZXF1ZXN0LnUudGhyZWFkOwogCQloYW5kbGVyID0gbmV3X3RocmVhZF9oYW5kbGVyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNzAxYjY3Mi4uYzlkYTMyYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKQEAgLTUwLDIzICs1MCwxMSBAQAogCXZvaWQgX191c2VyICp2cCA9IHA7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKLQkvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KLQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQljYXNlIFBUUkFDRV9QRUVLREFUQToKLQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcGVla2RhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQlicmVhazsKLQogCS8qIHJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAqLwogCWNhc2UgUFRSQUNFX1BFRUtVU1I6CiAJCXJldCA9IHBlZWtfdXNlcihjaGlsZCwgYWRkciwgZGF0YSk7CiAJCWJyZWFrOwogCi0JLyogd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KLQljYXNlIFBUUkFDRV9QT0tFVEVYVDoKLQljYXNlIFBUUkFDRV9QT0tFREFUQToKLQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQlicmVhazsKLQogCS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYSAqLwogCWNhc2UgUFRSQUNFX1BPS0VVU1I6CiAJCXJldCA9IHBva2VfdXNlcihjaGlsZCwgYWRkciwgZGF0YSk7CkBAIC0xMDcsMTYgKzk1LDYgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCi0jaWZkZWYgUFRSQUNFX0dFVEZQUkVHUwotCWNhc2UgUFRSQUNFX0dFVEZQUkVHUzogLyogR2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCi0JCXJldCA9IGdldF9mcHJlZ3ModnAsIGNoaWxkKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBQVFJBQ0VfU0VURlBSRUdTCi0JY2FzZSBQVFJBQ0VfU0VURlBSRUdTOiAvKiBTZXQgdGhlIGNoaWxkIEZQVSBzdGF0ZS4gKi8KLQkJcmV0ID0gc2V0X2ZwcmVncyh2cCwgY2hpbGQpOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKIAkJcmV0ID0gcHRyYWNlX2dldF90aHJlYWRfYXJlYShjaGlsZCwgYWRkciwgdnApOwogCQlicmVhazsKQEAgLTE1NCwxMiArMTMyLDYgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCi0jaWZkZWYgUFRSQUNFX0FSQ0hfUFJDVEwKLQljYXNlIFBUUkFDRV9BUkNIX1BSQ1RMOgotCQkvKiBYWFggQ2FsbHMgcHRyYWNlIG9uIHRoZSBob3N0IC0gbmVlZHMgc29tZSBTTVAgdGhpbmtpbmcgKi8KLQkJcmV0ID0gYXJjaF9wcmN0bChjaGlsZCwgZGF0YSwgKHZvaWQgX191c2VyICopIGFkZHIpOwotCQlicmVhazsKLSNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJaWYgKHJldCA9PSAtRUlPKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9yZWdpc3RlcnMuYyBiL2FyY2gvdW0vb3MtTGludXgvcmVnaXN0ZXJzLmMKaW5kZXggODMwZmU2YS4uYjg2NmI5ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9yZWdpc3RlcnMuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L3JlZ2lzdGVycy5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlICJzeXNkZXAvcHRyYWNlLmgiCisjaW5jbHVkZSAic3lzZGVwL3B0cmFjZV91c2VyLmgiCisjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAKIGludCBzYXZlX3JlZ2lzdGVycyhpbnQgcGlkLCBzdHJ1Y3QgdW1sX3B0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0zMiw2ICszNCw3IEBACiAvKiBUaGlzIGlzIHNldCBvbmNlIGF0IGJvb3QgdGltZSBhbmQgbm90IGNoYW5nZWQgdGhlcmVhZnRlciAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBleGVjX3JlZ3NbTUFYX1JFR19OUl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBleGVjX2ZwX3JlZ3NbRlBfU0laRV07CiAKIGludCBpbml0X3JlZ2lzdGVycyhpbnQgcGlkKQogewpAQCAtNDIsMTAgKzQ1LDE0IEBACiAJCXJldHVybiAtZXJybm87CiAKIAlhcmNoX2luaXRfcmVnaXN0ZXJzKHBpZCk7CisJZ2V0X2ZwX3JlZ2lzdGVycyhwaWQsIGV4ZWNfZnBfcmVncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgZ2V0X3NhZmVfcmVnaXN0ZXJzKHVuc2lnbmVkIGxvbmcgKnJlZ3MpCit2b2lkIGdldF9zYWZlX3JlZ2lzdGVycyh1bnNpZ25lZCBsb25nICpyZWdzLCB1bnNpZ25lZCBsb25nICpmcF9yZWdzKQogewogCW1lbWNweShyZWdzLCBleGVjX3JlZ3MsIHNpemVvZihleGVjX3JlZ3MpKTsKKworCWlmIChmcF9yZWdzKQorCQltZW1jcHkoZnBfcmVncywgZXhlY19mcF9yZWdzLCBzaXplb2YoZXhlY19mcF9yZWdzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvbWVtLmMKaW5kZXggZDI2MWYxNy4uZTc3MTM5OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9za2FzL21lbS5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9tZW0uYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3N5c2NhbGxfcmVncyh2b2lkKQogewotCWdldF9zYWZlX3JlZ2lzdGVycyhzeXNjYWxsX3JlZ3MpOworCWdldF9zYWZlX3JlZ2lzdGVycyhzeXNjYWxsX3JlZ3MsIE5VTEwpOwogCXN5c2NhbGxfcmVnc1tSRUdTX0lQX0lOREVYXSA9IFNUVUJfQ09ERSArCiAJCSgodW5zaWduZWQgbG9uZykgJmJhdGNoX3N5c2NhbGxfc3R1YiAtCiAJCSAodW5zaWduZWQgbG9uZykgJl9fc3lzY2FsbF9zdHViX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMgYi9hcmNoL3VtL29zLUxpbnV4L3NrYXMvcHJvY2Vzcy5jCmluZGV4IGQ2ZTBhMjIuLmRlZTBlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwpAQCAtMzczLDYgKzM3Myw5IEBACiAJCWlmIChwdHJhY2UoUFRSQUNFX1NFVFJFR1MsIHBpZCwgMCwgcmVncy0+Z3ApKQogCQkJZmF0YWxfc2lnc2VndigpOwogCisJCWlmIChwdXRfZnBfcmVnaXN0ZXJzKHBpZCwgcmVncy0+ZnApKQorCQkJZmF0YWxfc2lnc2VndigpOworCiAJCS8qIE5vdyB3ZSBzZXQgbG9jYWxfdXNpbmdfc3lzZW11IHRvIGJlIHVzZWQgZm9yIG9uZSBsb29wICovCiAJCWxvY2FsX3VzaW5nX3N5c2VtdSA9IGdldF91c2luZ19zeXNlbXUoKTsKIApAQCAtMzk5LDYgKzQwMiwxMiBAQAogCQkJZmF0YWxfc2lnc2VndigpOwogCQl9CiAKKwkJaWYgKGdldF9mcF9yZWdpc3RlcnMocGlkLCByZWdzLT5mcCkpIHsKKwkJCXByaW50ayhVTV9LRVJOX0VSUiAidXNlcnNwYWNlIC0gIGdldF9mcF9yZWdpc3RlcnMgZmFpbGVkLCAiCisJCQkgICAgICAgImVycm5vID0gJWRcbiIsIGVycm5vKTsKKwkJCWZhdGFsX3NpZ3NlZ3YoKTsKKwkJfQorCiAJCVVQVF9TWVNDQUxMX05SKHJlZ3MpID0gLTE7IC8qIEFzc3VtZTogSXQncyBub3QgYSBzeXNjYWxsICovCiAKIAkJaWYgKFdJRlNUT1BQRUQoc3RhdHVzKSkgewpAQCAtNDU3LDEwICs0NjYsMTEgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3JlZ3NbTUFYX1JFR19OUl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aHJlYWRfZnBfcmVnc1tGUF9TSVpFXTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF90aHJlYWRfcmVncyh2b2lkKQogewotCWdldF9zYWZlX3JlZ2lzdGVycyh0aHJlYWRfcmVncyk7CisJZ2V0X3NhZmVfcmVnaXN0ZXJzKHRocmVhZF9yZWdzLCB0aHJlYWRfZnBfcmVncyk7CiAJLyogU2V0IHBhcmVudCdzIGluc3RydWN0aW9uIHBvaW50ZXIgdG8gc3RhcnQgb2YgY2xvbmUtc3R1YiAqLwogCXRocmVhZF9yZWdzW1JFR1NfSVBfSU5ERVhdID0gU1RVQl9DT0RFICsKIAkJCQkodW5zaWduZWQgbG9uZykgc3R1Yl9jbG9uZV9oYW5kbGVyIC0KQEAgLTUwMyw2ICs1MTMsMTMgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwllcnIgPSBwdXRfZnBfcmVnaXN0ZXJzKHBpZCwgdGhyZWFkX2ZwX3JlZ3MpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhVTV9LRVJOX0VSUiAiY29weV9jb250ZXh0X3NrYXMwIDogcHV0X2ZwX3JlZ2lzdGVycyAiCisJCSAgICAgICAiZmFpbGVkLCBwaWQgPSAlZCwgZXJyID0gJWRcbiIsIHBpZCwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAkvKiBzZXQgYSB3ZWxsIGtub3duIHJldHVybiBjb2RlIGZvciBkZXRlY3Rpb24gb2YgY2hpbGQgd3JpdGUgZmFpbHVyZSAqLwogCWNoaWxkX2RhdGEtPmVyciA9IDEyMzQ1Njc4OwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2FzbS9wdHJhY2UuaCBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL3B0cmFjZS5oCmluZGV4IDAyNzNlNGQuLjVkMmE1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL3B0cmFjZS5oCkBAIC00MiwxMSArNDIsNiBAQAogICovCiBzdHJ1Y3QgdXNlcl9kZXNjOwogCi1leHRlcm4gaW50IGdldF9mcHhyZWdzKHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IF9fdXNlciAqYnVmLAotCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7Ci1leHRlcm4gaW50IHNldF9mcHhyZWdzKHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IF9fdXNlciAqYnVmLAotCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotCiBleHRlcm4gaW50IHB0cmFjZV9nZXRfdGhyZWFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IGlkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlcl9kZXNjIF9fdXNlciAqdXNlcl9kZXNjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2UuYyBiL2FyY2gvdW0vc3lzLWkzODYvcHRyYWNlLmMKaW5kZXggZDIzYjJkMy4uMzM3NWMyNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9wdHJhY2UuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3B0cmFjZS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgZGF0YSk7CiB9CiAKLWludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorc3RhdGljIGludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWludCBlcnIsIG4sIGNwdSA9ICgoc3RydWN0IHRocmVhZF9pbmZvICopIGNoaWxkLT5zdGFjayktPmNwdTsKIAlzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBmcHJlZ3M7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotaW50IHNldF9mcHJlZ3Moc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgX191c2VyICpidWYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCitzdGF0aWMgaW50IHNldF9mcHJlZ3Moc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgX191c2VyICpidWYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJaW50IG4sIGNwdSA9ICgoc3RydWN0IHRocmVhZF9pbmZvICopIGNoaWxkLT5zdGFjayktPmNwdTsKIAlzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBmcHJlZ3M7CkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcgKikgJmZwcmVncyk7CiB9CiAKLWludCBnZXRfZnB4cmVncyhzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCBfX3VzZXIgKmJ1Ziwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3N0YXRpYyBpbnQgZ2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJaW50IGVyciwgbiwgY3B1ID0gKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgY2hpbGQtPnN0YWNrKS0+Y3B1OwogCXN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGZwcmVnczsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXJldHVybiBuOwogfQogCi1pbnQgc2V0X2ZweHJlZ3Moc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgX191c2VyICpidWYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCitzdGF0aWMgaW50IHNldF9mcHhyZWdzKHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWludCBuLCBjcHUgPSAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBjaGlsZC0+c3RhY2spLT5jcHU7CiAJc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgZnByZWdzOwpAQCAtMjA2LDUgKzIwNiwyMyBAQAogbG9uZyBzdWJhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsCiAJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlyZXR1cm4gLUVJTzsKKwlpbnQgcmV0ID0gLUVJTzsKKwl2b2lkIF9fdXNlciAqZGF0YXAgPSAodm9pZCBfX3VzZXIgKikgZGF0YTsKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKwljYXNlIFBUUkFDRV9HRVRGUFJFR1M6IC8qIEdldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLworCQlyZXQgPSBnZXRfZnByZWdzKGRhdGFwLCBjaGlsZCk7CisJCWJyZWFrOworCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzogLyogU2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCisJCXJldCA9IHNldF9mcHJlZ3MoZGF0YXAsIGNoaWxkKTsKKwkJYnJlYWs7CisJY2FzZSBQVFJBQ0VfR0VURlBYUkVHUzogLyogR2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCisJCXJldCA9IGdldF9mcHhyZWdzKGRhdGFwLCBjaGlsZCk7CisJCWJyZWFrOworCWNhc2UgUFRSQUNFX1NFVEZQWFJFR1M6IC8qIFNldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLworCQlyZXQgPSBzZXRfZnB4cmVncyhkYXRhcCwgY2hpbGQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlPOworCX0KKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oCmluZGV4IGQ1MGU2MmUuLmMzOThhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9wdHJhY2UuaAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RydWN0IHVtbF9wdF9yZWdzIHsKIAl1bnNpZ25lZCBsb25nIGdwW01BWF9SRUdfTlJdOworCXVuc2lnbmVkIGxvbmcgZnBbSE9TVF9GUFhfU0laRV07CiAJc3RydWN0IGZhdWx0aW5mbyBmYXVsdGluZm87CiAJbG9uZyBzeXNjYWxsOwogCWludCBpc191c2VyOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3B0cmFjZS5jIGIvYXJjaC91bS9zeXMteDg2XzY0L3B0cmFjZS5jCmluZGV4IGY0MzYxMzYuLjQwMDU1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9wdHJhY2UuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvcHRyYWNlLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiBpbnN0ciA9PSAweDA1MGY7CiB9CiAKLWludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorc3RhdGljIGludCBnZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWludCBlcnIsIG4sIGNwdSA9ICgoc3RydWN0IHRocmVhZF9pbmZvICopIGNoaWxkLT5zdGFjayktPmNwdTsKIAlsb25nIGZwcmVnc1tIT1NUX0ZQX1NJWkVdOwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dXJuIG47CiB9CiAKLWludCBzZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorc3RhdGljIGludCBzZXRfZnByZWdzKHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IF9fdXNlciAqYnVmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWludCBuLCBjcHUgPSAoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBjaGlsZC0+c3RhY2spLT5jcHU7CiAJbG9uZyBmcHJlZ3NbSE9TVF9GUF9TSVpFXTsKQEAgLTE4MiwxMiArMTgyLDE2IEBACiAJdm9pZCBfX3VzZXIgKmRhdGFwID0gKHZvaWQgX191c2VyICopIGRhdGE7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKLQljYXNlIFBUUkFDRV9HRVRGUFhSRUdTOiAvKiBHZXQgdGhlIGNoaWxkIEZQVSBzdGF0ZS4gKi8KKwljYXNlIFBUUkFDRV9HRVRGUFJFR1M6IC8qIEdldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLwogCQlyZXQgPSBnZXRfZnByZWdzKGRhdGFwLCBjaGlsZCk7CiAJCWJyZWFrOwotCWNhc2UgUFRSQUNFX1NFVEZQWFJFR1M6IC8qIFNldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLworCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzogLyogU2V0IHRoZSBjaGlsZCBGUFUgc3RhdGUuICovCiAJCXJldCA9IHNldF9mcHJlZ3MoZGF0YXAsIGNoaWxkKTsKIAkJYnJlYWs7CisJY2FzZSBQVFJBQ0VfQVJDSF9QUkNUTDoKKwkJLyogWFhYIENhbGxzIHB0cmFjZSBvbiB0aGUgaG9zdCAtIG5lZWRzIHNvbWUgU01QIHRoaW5raW5nICovCisJCXJldCA9IGFyY2hfcHJjdGwoY2hpbGQsIGRhdGEsICh2b2lkIF9fdXNlciAqKSBhZGRyKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKaW5kZXggZmRiYTU0NS4uOGVlOGY4ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKQEAgLTg1LDYgKzg1LDcgQEAKIAogc3RydWN0IHVtbF9wdF9yZWdzIHsKIAl1bnNpZ25lZCBsb25nIGdwW01BWF9SRUdfTlJdOworCXVuc2lnbmVkIGxvbmcgZnBbSE9TVF9GUF9TSVpFXTsKIAlzdHJ1Y3QgZmF1bHRpbmZvIGZhdWx0aW5mbzsKIAlsb25nIHN5c2NhbGw7CiAJaW50IGlzX3VzZXI7CmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvcGNpLmMgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvcGNpLmMKaW5kZXggMTAwZWFiOC4uNDg5MmZiYiAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9wY2kuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJd3JpdGVsKHJlYWRsKFBDSUJSSV9DTUQpIHwgUENJQlJJX0NNRF9JTyB8IFBDSUJSSV9DTURfTUVNLCBQQ0lCUklfQ01EKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGNpX3B1djNfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCitzdGF0aWMgaW50IF9faW5pdCBwY2lfcHV2M19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwKSB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfRlBHQSAvKiA0IHBjaSBzbG90cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMTUzYWE2Zi4uNmE0N2JiMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC03Miw2ICs3Miw3IEBACiAJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlmIFNNUAogCXNlbGVjdCBIQVZFX0JQRl9KSVQgaWYgKFg4Nl82NCAmJiBORVQpCiAJc2VsZWN0IENMS0VWVF9JODI1MworCXNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRwogCiBjb25maWcgSU5TVFJVQ1RJT05fREVDT0RFUgogCWRlZl9ib29sIChLUFJPQkVTIHx8IFBFUkZfRVZFTlRTKQpAQCAtMTkwNSw3ICsxOTA2LDcgQEAKICMgeDg2LTY0IGRvZXNuJ3Qgc3VwcG9ydCBQQ0kgQklPUyBhY2Nlc3MgZnJvbSBsb25nIG1vZGUgc28gYWx3YXlzIGdvIGRpcmVjdC4KIGNvbmZpZyBQQ0lfRElSRUNUCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gUENJICYmIChYODZfNjQgfHwgKFBDSV9HT0RJUkVDVCB8fCBQQ0lfR09BTlkgfHwgUENJX0dPT0xQQykpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKFg4Nl82NCB8fCAoUENJX0dPRElSRUNUIHx8IFBDSV9HT0FOWSB8fCBQQ0lfR09PTFBDIHx8IFBDSV9HT01NQ09ORklHKSkKIAogY29uZmlnIFBDSV9NTUNPTkZJRwogCWRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGEwZTg2NmQuLjU0ZWRiMjA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTY3Miw3ICs2NzIsNyBAQAogCS5xdWFkIHN5czMyX3ZtODZfd2FybmluZwkvKiB2bTg2ICovIAogCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJLyogcXVlcnlfbW9kdWxlICovCiAJLnF1YWQgc3lzX3BvbGwKLQkucXVhZCBjb21wYXRfc3lzX25mc3NlcnZjdGwKKwkucXVhZCBxdWlldF9uaV9zeXNjYWxsIC8qIG9sZCBuZnNzZXJ2Y3RsICovCiAJLnF1YWQgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLwogCS5xdWFkIHN5c19nZXRyZXNnaWQxNgogCS5xdWFkIHN5c19wcmN0bApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAppbmRleCA0NTU0Y2M2Li4wOTE1MDhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApAQCAtMTYsNyArMTYsNiBAQAogI2VuZGlmCiAKIC5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnIGFsdCBmZWF0dXJlIG9yaWdfbGVuIGFsdF9sZW4KLQkuYWxpZ24gOAogCS5sb25nIFxvcmlnIC0gLgogCS5sb25nIFxhbHQgLSAuCiAJLndvcmQgXGZlYXR1cmUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCmluZGV4IDIzZmI2ZDcuLjM3YWQxMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtNDgsOSArNDgsNiBAQAogCXUxNiBjcHVpZDsJCS8qIGNwdWlkIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCiAJdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCiAJdTggIHJlcGxhY2VtZW50bGVuOwkvKiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uLCA8PSBpbnN0cmxlbiAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQl1MzIgcGFkMjsKLSNlbmRpZgogfTsKIAogZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVfaW5zdHJ1Y3Rpb25zKHZvaWQpOwpAQCAtODMsNyArODAsNiBAQAogCQkJCQkJCQkJXAogICAgICAgIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iCQkJCQlcCiAgICAgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlcCi0gICAgICBfQVNNX0FMSUdOICJcbiIJCQkJCQkJXAogICAgICAgIgkgLmxvbmcgNjYxYiAtIC5cbiIJCQkvKiBsYWJlbCAgICAgICAgICAgKi8JXAogICAgICAgIgkgLmxvbmcgNjYzZiAtIC5cbiIJCQkvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8JXAogICAgICAgIgkgLndvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCS8qIGZlYXR1cmUgYml0ICAgICAqLwlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNDI1OGFhYy4uODhiMjNhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMzMyLDcgKzMzMiw2IEBACiAJCWFzbSBnb3RvKCIxOiBqbXAgJWxbdF9ub11cbiIKIAkJCSAiMjpcbiIKIAkJCSAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgotCQkJIF9BU01fQUxJR04gIlxuIgogCQkJICIgLmxvbmcgMWIgLSAuXG4iCiAJCQkgIiAubG9uZyAwXG4iCQkvKiBubyByZXBsYWNlbWVudCAqLwogCQkJICIgLndvcmQgJVAwXG4iCQkvKiBmZWF0dXJlIGJpdCAqLwpAQCAtMzUwLDcgKzM0OSw2IEBACiAJCWFzbSB2b2xhdGlsZSgiMTogbW92YiAkMCwlMFxuIgogCQkJICAgICAiMjpcbiIKIAkJCSAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIKLQkJCSAgICAgX0FTTV9BTElHTiAiXG4iCiAJCQkgICAgICIgLmxvbmcgMWIgLSAuXG4iCiAJCQkgICAgICIgLmxvbmcgM2YgLSAuXG4iCiAJCQkgICAgICIgLndvcmQgJVAxXG4iCQkvKiBmZWF0dXJlIGJpdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCmluZGV4IDdiNDM5ZDkuLjQxOTM1ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKQEAgLTI3LDggKzI3LDggQEAKIAogCWRlc2MtPmJhc2UyCQk9IChpbmZvLT5iYXNlX2FkZHIgJiAweGZmMDAwMDAwKSA+PiAyNDsKIAkvKgotCSAqIERvbid0IGFsbG93IHNldHRpbmcgb2YgdGhlIGxtIGJpdC4gSXQgaXMgdXNlbGVzcyBhbnl3YXkKLQkgKiBiZWNhdXNlIDY0Yml0IHN5c3RlbSBjYWxscyByZXF1aXJlIF9fVVNFUl9DUzoKKwkgKiBEb24ndCBhbGxvdyBzZXR0aW5nIG9mIHRoZSBsbSBiaXQuIEl0IHdvdWxkIGNvbmZ1c2UKKwkgKiB1c2VyXzY0Yml0X21vZGUgYW5kIHdvdWxkIGdldCBvdmVycmlkZGVuIGJ5IHN5c3JldCBhbnl3YXkuCiAJICovCiAJZGVzYy0+bAkJCT0gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGQwMjgwNGQuLmQ4ZThlZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaApAQCAtNDAsOCArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotI2luY2x1ZGUgPHhlbi94ZW4uaD4KLQogI2RlZmluZSBidWlsZF9tbWlvX3JlYWQobmFtZSwgc2l6ZSwgdHlwZSwgcmVnLCBiYXJyaWVyKSBcCiBzdGF0aWMgaW5saW5lIHR5cGUgbmFtZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpIFwKIHsgdHlwZSByZXQ7IGFzbSB2b2xhdGlsZSgibW92IiBzaXplICIgJTEsJTAiOnJlZyAocmV0KSBcCkBAIC0zMzQsNiArMzMyLDcgQEAKIGV4dGVybiBib29sIGlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVfdCAqcHRlcCk7CiAKICNpZmRlZiBDT05GSUdfWEVOCisjaW5jbHVkZSA8eGVuL3hlbi5oPgogc3RydWN0IGJpb192ZWM7CiAKIGV4dGVybiBib29sIHhlbl9iaW92ZWNfcGh5c19tZXJnZWFibGUoY29uc3Qgc3RydWN0IGJpb192ZWMgKnZlYzEsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAppbmRleCBmOWEzMjA5Li43ZTUwZjA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqICBWZWN0b3JzICAgMCAuLi4gIDMxIDogc3lzdGVtIHRyYXBzIGFuZCBleGNlcHRpb25zIC0gaGFyZGNvZGVkIGV2ZW50cwogICogIFZlY3RvcnMgIDMyIC4uLiAxMjcgOiBkZXZpY2UgaW50ZXJydXB0cwogICogIFZlY3RvciAgMTI4ICAgICAgICAgOiBsZWdhY3kgaW50ODAgc3lzY2FsbCBpbnRlcmZhY2UKLSAqICBWZWN0b3IgIDIwNCAgICAgICAgIDogbGVnYWN5IHg4Nl82NCB2c3lzY2FsbCBlbXVsYXRpb24KICAqICBWZWN0b3JzIDEyOSAuLi4gSU5WQUxJREFURV9UTEJfVkVDVE9SX1NUQVJULTEgZXhjZXB0IDIwNCA6IGRldmljZSBpbnRlcnJ1cHRzCiAgKiAgVmVjdG9ycyBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQgLi4uIDI1NSA6IHNwZWNpYWwgaW50ZXJydXB0cwogICoKQEAgLTUxLDkgKzUwLDYgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGRlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJCTB4ODAKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfNjQKLSMgZGVmaW5lIFZTWVNDQUxMX0VNVV9WRUNUT1IJCTB4Y2MKLSNlbmRpZgogCiAvKgogICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggMmM3NjUyMS4uOGU4YjlhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC00MSw2ICs0MSw3IEBACiAKICNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogCiBzdHJ1Y3QgcGFnZTsKIHN0cnVjdCB0aHJlYWRfc3RydWN0OwpAQCAtNjMsNiArNjQsMTEgQEAKIHN0cnVjdCBwdl9pbmZvIHsKIAl1bnNpZ25lZCBpbnQga2VybmVsX3JwbDsKIAlpbnQgc2hhcmVkX2tlcm5lbF9wbWQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdTE2IGV4dHJhX3VzZXJfNjRiaXRfY3M7ICAvKiBfX1VTRVJfQ1MgaWYgbm9uZSAqLworI2VuZGlmCisKIAlpbnQgcGFyYXZpcnRfZW5hYmxlZDsKIAljb25zdCBjaGFyICpuYW1lOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMjE5MzcxNS4uMGQxMTcxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTc1MSw4ICs3NTEsNiBAQAogCQkgICAgIDo6ICJhIiAoZWF4KSwgImMiIChlY3gpKTsKIH0KIAotZXh0ZXJuIHZvaWQgbXdhaXRfaWRsZV93aXRoX2hpbnRzKHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCk7Ci0KIGV4dGVybiB2b2lkIHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKTsKIGV4dGVybiB2b2lkIGluaXRfYW1kX2U0MDBfYzFlX21hc2sodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOTRlNzYxOC4uMzU2NjQ1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEzMSw2ICsxMzEsOSBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfdHlwZXMuaD4KKyNlbmRpZgogCiBzdHJ1Y3QgY3B1aW5mb194ODY7CiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CkBAIC0xODcsNiArMTkwLDIyIEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbmxpbmUgYm9vbCB1c2VyXzY0Yml0X21vZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorCS8qCisJICogT24gbm9uLXBhcmF2aXJ0IHN5c3RlbXMsIHRoaXMgaXMgdGhlIG9ubHkgbG9uZyBtb2RlIENQTCAzCisJICogc2VsZWN0b3IuICBXZSBkbyBub3QgYWxsb3cgbG9uZyBtb2RlIHNlbGVjdG9ycyBpbiB0aGUgTERULgorCSAqLworCXJldHVybiByZWdzLT5jcyA9PSBfX1VTRVJfQ1M7CisjZWxzZQorCS8qIEhlYWRlcnMgYXJlIHRvbyB0d2lzdGVkIGZvciB0aGlzIHRvIGdvIGluIHBhcmF2aXJ0LmguICovCisJcmV0dXJuIHJlZ3MtPmNzID09IF9fVVNFUl9DUyB8fCByZWdzLT5jcyA9PSBwdl9pbmZvLmV4dHJhX3VzZXJfNjRiaXRfY3M7CisjZW5kaWYKK30KKyNlbmRpZgorCiAvKgogICogWDg2XzMyIENQVXMgZG9uJ3Qgc2F2ZSBzcyBhbmQgZXNwIGlmIHRoZSBDUFUgaXMgYWxyZWFkeSBpbiBrZXJuZWwgbW9kZQogICogd2hlbiBpdCB0cmFwcy4gIFRoZSBwcmV2aW91cyBzdGFjayB3aWxsIGJlIGRpcmVjdGx5IHVuZGVybmVhdGggdGhlIHNhdmVkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdmNsb2NrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdmNsb2NrLmgKaW5kZXggYTUxOGMwYS4uYzU5Y2M5NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHZjbG9jay5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2suaApAQCAtNDQsNyArNDQsNyBAQAogCQk6ICJhIiAoKHUzMilkZWx0YSksICIxIiAoKHUzMikoZGVsdGEgPj4gMzIpKSwgIjIiIChtdWxfZnJhYykgKTsKICNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKIAlfX2FzbV9fICgKLQkJIm11bCAlW211bF9mcmFjXSA7IHNocmQgJDMyLCAlW2hpXSwgJVtsb10iCisJCSJtdWxxICVbbXVsX2ZyYWNdIDsgc2hyZCAkMzIsICVbaGldLCAlW2xvXSIKIAkJOiBbbG9dIj1hIihwcm9kdWN0KSwKIAkJICBbaGldIj1kIih0bXApCiAJCTogIjAiKGRlbHRhKSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IDJiYWUwYTUuLjAwMTJkMDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtNDAsNyArNDAsNiBAQAogYXNtbGlua2FnZSB2b2lkIG1hY2hpbmVfY2hlY2sodm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9NQ0UgKi8KIGFzbWxpbmthZ2Ugdm9pZCBzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGVtdWxhdGVfdnN5c2NhbGwodm9pZCk7CiAKIGRvdHJhcGxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CkBAIC02Nyw3ICs2Niw2IEBACiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKICNlbmRpZgogZG90cmFwbGlua2FnZSB2b2lkIGRvX3NpbWRfY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci1kb3RyYXBsaW5rYWdlIHZvaWQgZG9fZW11bGF0ZV92c3lzY2FsbChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBkb3RyYXBsaW5rYWdlIHZvaWQgZG9faXJldF9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAppbmRleCA3MDViZjEzLi4yMDEwNDA1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaApAQCAtNDE0LDcgKzQxNCw3IEBACiBfX1NZU0NBTEwoX19OUl9xdW90YWN0bCwgc3lzX3F1b3RhY3RsKQogCiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bAkJCQkxODAKLV9fU1lTQ0FMTChfX05SX25mc3NlcnZjdGwsIHN5c19uZnNzZXJ2Y3RsKQorX19TWVNDQUxMKF9fTlJfbmZzc2VydmN0bCwgc3lzX25pX3N5c2NhbGwpCiAKIC8qIHJlc2VydmVkIGZvciBMaVMvU1RSRUFNUyAqLwogI2RlZmluZSBfX05SX2dldHBtc2cJCQkJMTgxCkBAIC02ODEsNiArNjgxLDggQEAKIF9fU1lTQ0FMTChfX05SX3NlbmRtbXNnLCBzeXNfc2VuZG1tc2cpCiAjZGVmaW5lIF9fTlJfc2V0bnMJCQkJMzA4CiBfX1NZU0NBTEwoX19OUl9zZXRucywgc3lzX3NldG5zKQorI2RlZmluZSBfX05SX2dldGNwdQkJCQkzMDkKK19fU1lTQ0FMTChfX05SX2dldGNwdSwgc3lzX2dldGNwdSkKIAogI2lmbmRlZiBfX05PX1NUVUJTCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92c3lzY2FsbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdnN5c2NhbGwuaAppbmRleCA2MDEwNzA3Li5lYWVhMWQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92c3lzY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZzeXNjYWxsLmgKQEAgLTI3LDYgKzI3LDEyIEBACiAKIGV4dGVybiB2b2lkIG1hcF92c3lzY2FsbCh2b2lkKTsKIAorLyoKKyAqIENhbGxlZCBvbiBpbnN0cnVjdGlvbiBmZXRjaCBmYXVsdCBpbiB2c3lzY2FsbCBwYWdlLgorICogUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCisgKi8KK2V4dGVybiBib29sIGVtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9WU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDQxMDU1Ny4uODJmMjkxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTcsMTkgKzE3LDYgQEAKIENGTEFHU19SRU1PVkVfZWFybHlfcHJpbnRrLm8gPSAtcGcKIGVuZGlmCiAKLSMKLSMgdnN5c2NhbGxzICh3aGljaCB3b3JrIG9uIHRoZSB1c2VyIHN0YWNrKSBzaG91bGQgaGF2ZQotIyBubyBzdGFjay1wcm90ZWN0b3IgY2hlY2tzOgotIwotbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCi1DRkxBR1NfdnN5c2NhbGxfNjQubwk6PSAkKFBST0ZJTElORykgLWcwICQobm9zdGFja3ApCi1DRkxBR1NfaHBldC5vCQk6PSAkKG5vc3RhY2twKQotQ0ZMQUdTX3BhcmF2aXJ0Lm8JOj0gJChub3N0YWNrcCkKLUdDT1ZfUFJPRklMRV92c3lzY2FsbF82NC5vCTo9IG4KLUdDT1ZfUFJPRklMRV9ocGV0Lm8JCTo9IG4KLUdDT1ZfUFJPRklMRV90c2MubwkJOj0gbgotR0NPVl9QUk9GSUxFX3BhcmF2aXJ0Lm8JCTo9IG4KLQogb2JqLXkJCQk6PSBwcm9jZXNzXyQoQklUUykubyBzaWduYWwubyBlbnRyeV8kKEJJVFMpLm8KIG9iai15CQkJKz0gdHJhcHMubyBpcnEubyBpcnFfJChCSVRTKS5vIGR1bXBzdGFja18kKEJJVFMpLm8KIG9iai15CQkJKz0gdGltZS5vIGlvcG9ydC5vIGxkdC5vIGR1bXBzdGFjay5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCmluZGV4IDU4MTI0MDQuLmY1MGU3ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCkBAIC0xNDksNiArMTQ5LDI5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX3Byb2Nlc3Nvcl9mZmhfY3N0YXRlX3Byb2JlKTsKIAorLyoKKyAqIFRoaXMgdXNlcyBuZXcgTU9OSVRPUi9NV0FJVCBpbnN0cnVjdGlvbnMgb24gUDQgcHJvY2Vzc29ycyB3aXRoIFBOSSwKKyAqIHdoaWNoIGNhbiBvYnZpYXRlIElQSSB0byB0cmlnZ2VyIGNoZWNraW5nIG9mIG5lZWRfcmVzY2hlZC4KKyAqIFdlIGV4ZWN1dGUgTU9OSVRPUiBhZ2FpbnN0IG5lZWRfcmVzY2hlZCBhbmQgZW50ZXIgb3B0aW1pemVkIHdhaXQgc3RhdGUKKyAqIHRocm91Z2ggTVdBSVQuIFdoZW5ldmVyIHNvbWVvbmUgY2hhbmdlcyBuZWVkX3Jlc2NoZWQsIHdlIHdvdWxkIGJlIHdva2VuCisgKiB1cCBmcm9tIE1XQUlUICh3aXRob3V0IGFuIElQSSkuCisgKgorICogTmV3IHdpdGggQ29yZSBEdW8gcHJvY2Vzc29ycywgTVdBSVQgY2FuIHRha2Ugc29tZSBoaW50cyBiYXNlZCBvbiBDUFUKKyAqIGNhcGFiaWxpdHkuCisgKi8KK3ZvaWQgbXdhaXRfaWRsZV93aXRoX2hpbnRzKHVuc2lnbmVkIGxvbmcgYXgsIHVuc2lnbmVkIGxvbmcgY3gpCit7CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQlpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxVU0hfTU9OSVRPUikpCisJCQljbGZsdXNoKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MpOworCisJCV9fbW9uaXRvcigodm9pZCAqKSZjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzLCAwLCAwKTsKKwkJc21wX21iKCk7CisJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQlfX213YWl0KGF4LCBjeCk7CisJfQorfQorCiB2b2lkIGFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggYWRjNjZjMy4uMzRiMTg1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0yMDcsNyArMjA3LDYgQEAKIAkgICAgKChzdGFydF9yaXAgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpID4+IDEyKSB8CiAJICAgIEFQSUNfRE1fSU5JVDsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOwotCW1kZWxheSgxMCk7CiAKIAl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAogCSAgICAocGh5c19hcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAwODExOWEzLi42Yjk2MTEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTE0OSw3ICsxNDksNiBAQAogICovCiBzdGF0aWMgaW50IG10cnJfcmVuZGV6dm91c19oYW5kbGVyKHZvaWQgKmluZm8pCiB7Ci0jaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBzZXRfbXRycl9kYXRhICpkYXRhID0gaW5mbzsKIAogCS8qCkBAIC0xNzEsNyArMTcwLDYgQEAKIAl9IGVsc2UgaWYgKG10cnJfYXBzX2RlbGF5ZWRfaW5pdCB8fCAhY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7CiAJCW10cnJfaWYtPnNldF9hbGwoKTsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA0ZWUzYWJmLi5jZmE2MmVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMTkwMCw2ICsxOTAwLDkgQEAKIAogCXBlcmZfY2FsbGNoYWluX3N0b3JlKGVudHJ5LCByZWdzLT5pcCk7CiAKKwlpZiAoIWN1cnJlbnQtPm1tKQorCQlyZXR1cm47CisKIAlpZiAocGVyZl9jYWxsY2hhaW5fdXNlcjMyKHJlZ3MsIGVudHJ5KSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCmluZGV4IDQ1ZmJiOGYuLmY4OGFmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC0xNTkwLDYgKzE1OTAsNyBAQAogCQlicmVhazsKIAogCWNhc2UgNDI6IC8qIFNhbmR5QnJpZGdlICovCisJY2FzZSA0NTogLyogU2FuZHlCcmlkZ2UsICJSb21lbHktRVAiICovCiAJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHNuYl9od19jYWNoZV9ldmVudF9pZHMsCiAJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggNWMxYTkxOTcuLmYzZjZmNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCiAvKiBBdm9pZCBfX0FTU0VNQkxFUl9fJ2lmeWluZyA8bGludXgvYXVkaXQuaD4ganVzdCBmb3IgdGhpcy4gICovCiAjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CkBAIC04NzMsMTIgKzg3NCw3IEBACiA2NjE6CXB1c2hsX2NmaSAkZG9fZ2VuZXJhbF9wcm90ZWN0aW9uCiA2NjI6CiAuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgotCS5iYWxpZ24gNAotCS5sb25nIDY2MWIKLQkubG9uZyA2NjNmCi0JLndvcmQgWDg2X0ZFQVRVUkVfWE1NCi0JLmJ5dGUgNjYyYi02NjFiCi0JLmJ5dGUgNjY0Zi02NjNmCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgNjYxYiwgNjYzZiwgWDg2X0ZFQVRVUkVfWE1NLCA2NjJiLTY2MWIsIDY2NGYtNjYzZgogLnByZXZpb3VzCiAuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgogNjYzOglwdXNobCAkZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwppbmRleCBlMTMzMjlkLi42NDE5YmIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUwpAQCAtMTExMSw3ICsxMTExLDYgQEAKIHplcm9lbnRyeSBjb3Byb2Nlc3Nvcl9lcnJvciBkb19jb3Byb2Nlc3Nvcl9lcnJvcgogZXJyb3JlbnRyeSBhbGlnbm1lbnRfY2hlY2sgZG9fYWxpZ25tZW50X2NoZWNrCiB6ZXJvZW50cnkgc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvciBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yCi16ZXJvZW50cnkgZW11bGF0ZV92c3lzY2FsbCBkb19lbXVsYXRlX3ZzeXNjYWxsCiAKIAogCS8qIFJlbG9hZCBncyBzZWxlY3RvciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwppbmRleCA2MTNhNzkzLi5kOTAyNzJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtMzA3LDYgKzMwNywxMCBAQAogCS5wYXJhdmlydF9lbmFibGVkID0gMCwKIAkua2VybmVsX3JwbCA9IDAsCiAJLnNoYXJlZF9rZXJuZWxfcG1kID0gMSwJLyogT25seSB1c2VkIHdoZW4gQ09ORklHX1g4Nl9QQUUgaXMgc2V0ICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLmV4dHJhX3VzZXJfNjRiaXRfY3MgPSBfX1VTRVJfQ1MsCisjZW5kaWYKIH07CiAKIHN0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGUxYmE4Y2IyLi5lN2UzYjAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQzOCwyOSArNDM4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdV9pZGxlX3dhaXQpOwogCi0vKgotICogVGhpcyB1c2VzIG5ldyBNT05JVE9SL01XQUlUIGluc3RydWN0aW9ucyBvbiBQNCBwcm9jZXNzb3JzIHdpdGggUE5JLAotICogd2hpY2ggY2FuIG9idmlhdGUgSVBJIHRvIHRyaWdnZXIgY2hlY2tpbmcgb2YgbmVlZF9yZXNjaGVkLgotICogV2UgZXhlY3V0ZSBNT05JVE9SIGFnYWluc3QgbmVlZF9yZXNjaGVkIGFuZCBlbnRlciBvcHRpbWl6ZWQgd2FpdCBzdGF0ZQotICogdGhyb3VnaCBNV0FJVC4gV2hlbmV2ZXIgc29tZW9uZSBjaGFuZ2VzIG5lZWRfcmVzY2hlZCwgd2Ugd291bGQgYmUgd29rZW4KLSAqIHVwIGZyb20gTVdBSVQgKHdpdGhvdXQgYW4gSVBJKS4KLSAqCi0gKiBOZXcgd2l0aCBDb3JlIER1byBwcm9jZXNzb3JzLCBNV0FJVCBjYW4gdGFrZSBzb21lIGhpbnRzIGJhc2VkIG9uIENQVQotICogY2FwYWJpbGl0eS4KLSAqLwotdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBheCwgdW5zaWduZWQgbG9uZyBjeCkKLXsKLQlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKLQkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7Ci0KLQkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOwotCQlzbXBfbWIoKTsKLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCV9fbXdhaXQoYXgsIGN4KTsKLQl9Ci19Ci0KIC8qIERlZmF1bHQgTU9OSVRPUi9NV0FJVCB3aXRoIG5vIGhpbnRzLCB1c2VkIGZvciBkZWZhdWx0IEMxIHN0YXRlICovCiBzdGF0aWMgdm9pZCBtd2FpdF9pZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCBhM2QwZGM1Li43YTNiNjUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTEwOSw3ICsxMTAsOCBAQAogCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJCS8qIERvbid0IHRyYWNlIGlycXMgb2ZmIGZvciBpZGxlICovCiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKLQkJCXBtX2lkbGUoKTsKKwkJCWlmIChjcHVpZGxlX2lkbGVfY2FsbCgpKQorCQkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJfQogCQl0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBjYTZmN2FiLi5mNjkzZTQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTEzNiw3ICsxMzcsOCBAQAogCQkJZW50ZXJfaWRsZSgpOwogCQkJLyogRG9uJ3QgdHJhY2UgaXJxcyBvZmYgZm9yIGlkbGUgKi8KIAkJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOwotCQkJcG1faWRsZSgpOworCQkJaWYgKGNwdWlkbGVfaWRsZV9jYWxsKCkpCisJCQkJcG1faWRsZSgpOwogCQkJc3RhcnRfY3JpdGljYWxfdGltaW5ncygpOwogCiAJCQkvKiBJbiBtYW55IGNhc2VzIHRoZSBpbnRlcnJ1cHQgdGhhdCBlbmRlZCBpZGxlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCA3OTc3ZjBjLi5jMzQ2ZDExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkJY2FzZSAweDQwIC4uLiAweDRmOgotCQkJaWYgKHJlZ3MtPmNzICE9IF9fVVNFUl9DUykKKwkJCWlmICghdXNlcl82NGJpdF9tb2RlKHJlZ3MpKQogCQkJCS8qIDMyLWJpdCBtb2RlOiByZWdpc3RlciBpbmNyZW1lbnQgKi8KIAkJCQlyZXR1cm4gMDsKIAkJCS8qIDY0LWJpdCBtb2RlOiBSRVggcHJlZml4ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwppbmRleCBmYmIwYTA0Li5iYzE5YmUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCS5sb25nIHB0cmVnc192bTg2CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogT2xkIHN5c19xdWVyeV9tb2R1bGUgKi8KIAkubG9uZyBzeXNfcG9sbAotCS5sb25nIHN5c19uZnNzZXJ2Y3RsCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogT2xkIG5mc3NlcnZjdGwgKi8KIAkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZDE2CiAJLmxvbmcgc3lzX3ByY3RsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCmluZGV4IDk2ODJlYzUuLjY5MTMzNjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCkBAIC04NzIsMTIgKzg3Miw2IEBACiAJc2V0X2JpdChTWVNDQUxMX1ZFQ1RPUiwgdXNlZF92ZWN0b3JzKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCUJVR19PTih0ZXN0X2JpdChWU1lTQ0FMTF9FTVVfVkVDVE9SLCB1c2VkX3ZlY3RvcnMpKTsKLQlzZXRfc3lzdGVtX2ludHJfZ2F0ZShWU1lTQ0FMTF9FTVVfVkVDVE9SLCAmZW11bGF0ZV92c3lzY2FsbCk7Ci0Jc2V0X2JpdChWU1lTQ0FMTF9FTVVfVkVDVE9SLCB1c2VkX3ZlY3RvcnMpOwotI2VuZGlmCi0KIAkvKgogCSAqIFNob3VsZCBiZSBhIGJhcnJpZXIgZm9yIGFueSBleHRlcm5hbCBDUFUgc3RhdGU6CiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDRhYTljNTQuLjBmNzAzZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03MSw3ICs3MSw2IEBACiAJdGV4dCBQVF9MT0FEIEZMQUdTKDUpOyAgICAgICAgICAvKiBSX0UgKi8KIAlkYXRhIFBUX0xPQUQgRkxBR1MoNik7ICAgICAgICAgIC8qIFJXXyAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKLQl1c2VyIFBUX0xPQUQgRkxBR1MoNSk7ICAgICAgICAgIC8qIFJfRSAqLwogI2lmZGVmIENPTkZJR19TTVAKIAlwZXJjcHUgUFRfTE9BRCBGTEFHUyg2KTsgICAgICAgIC8qIFJXXyAqLwogI2VuZGlmCkBAIC0xNTQsNDQgKzE1MywxNiBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCi0jZGVmaW5lIFZTWVNDQUxMX0FERFIgKC0xMCoxMDI0KjEwMjQpCi0KLSNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gX192c3lzY2FsbF8wICsgTE9BRF9PRkZTRVQpCi0jZGVmaW5lIFZMT0FEKHgpIChBRERSKHgpIC0gVkxPQURfT0ZGU0VUKQotCi0jZGVmaW5lIFZWSVJUX09GRlNFVCAoVlNZU0NBTExfQUREUiAtIF9fdnN5c2NhbGxfMCkKLSNkZWZpbmUgVlZJUlQoeCkgKEFERFIoeCkgLSBWVklSVF9PRkZTRVQpCi0KLQkuID0gQUxJR04oNDA5Nik7Ci0JX192c3lzY2FsbF8wID0gLjsKLQotCS4gPSBWU1lTQ0FMTF9BRERSOwotCS52c3lzY2FsbCA6IEFUKFZMT0FEKC52c3lzY2FsbCkpIHsKLQkJKigudnN5c2NhbGxfMCkKLQotCQkuID0gMTAyNDsKLQkJKigudnN5c2NhbGxfMSkKLQotCQkuID0gMjA0ODsKLQkJKigudnN5c2NhbGxfMikKLQotCQkuID0gNDA5NjsgIC8qIFBhZCB0aGUgd2hvbGUgcGFnZS4gKi8KLQl9IDp1c2VyID0weGNjCi0JLiA9IEFMSUdOKF9fdnN5c2NhbGxfMCArIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQotI3VuZGVmIFZTWVNDQUxMX0FERFIKLSN1bmRlZiBWTE9BRF9PRkZTRVQKLSN1bmRlZiBWTE9BRAotI3VuZGVmIFZWSVJUX09GRlNFVAotI3VuZGVmIFZWSVJUCi0KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX3Z2YXJfcGFnZSA9IC47CiAKIAkudnZhciA6IEFUKEFERFIoLnZ2YXIpIC0gTE9BRF9PRkZTRVQpIHsKKwkJLyogd29yayBhcm91bmQgZ29sZCBidWcgMTMwMjMgKi8KKwkJX192dmFyX2JlZ2lubmluZ19oYWNrID0gLjsKIAotCSAgICAgIC8qIFBsYWNlIGFsbCB2dmFycyBhdCB0aGUgb2Zmc2V0cyBpbiBhc20vdnZhci5oLiAqLwotI2RlZmluZSBFTUlUX1ZWQVIobmFtZSwgb2Zmc2V0KSAJCVwKLQkJLiA9IG9mZnNldDsJCVwKKwkJLyogUGxhY2UgYWxsIHZ2YXJzIGF0IHRoZSBvZmZzZXRzIGluIGFzbS92dmFyLmguICovCisjZGVmaW5lIEVNSVRfVlZBUihuYW1lLCBvZmZzZXQpIAkJCVwKKwkJLiA9IF9fdnZhcl9iZWdpbm5pbmdfaGFjayArIG9mZnNldDsJXAogCQkqKC52dmFyXyAjIyBuYW1lKQogI2RlZmluZSBfX1ZWQVJfS0VSTkVMX0xEUwogI2luY2x1ZGUgPGFzbS92dmFyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jCmluZGV4IGRkYTdkZmYuLjE4YWU4M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jCkBAIC0xOCw5ICsxOCw2IEBACiAgKiAgdXNlIHRoZSB2RFNPLgogICovCiAKLS8qIERpc2FibGUgcHJvZmlsaW5nIGZvciB1c2Vyc3BhY2UgY29kZTogKi8KLSNkZWZpbmUgRElTQUJMRV9CUkFOQ0hfUFJPRklMSU5HCi0KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTAsMTIgKzQ3LDM2IEBACiAjaW5jbHVkZSA8YXNtL3ZndG9kLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInZzeXNjYWxsX3RyYWNlLmgiCisKIERFRklORV9WVkFSKGludCwgdmdldGNwdV9tb2RlKTsKIERFRklORV9WVkFSKHN0cnVjdCB2c3lzY2FsbF9ndG9kX2RhdGEsIHZzeXNjYWxsX2d0b2RfZGF0YSkgPQogewogCS5sb2NrID0gX19TRVFMT0NLX1VOTE9DS0VEKF9fdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2spLAogfTsKIAorc3RhdGljIGVudW0geyBFTVVMQVRFLCBOQVRJVkUsIE5PTkUgfSB2c3lzY2FsbF9tb2RlID0gRU1VTEFURTsKKworc3RhdGljIGludCBfX2luaXQgdnN5c2NhbGxfc2V0dXAoY2hhciAqc3RyKQoreworCWlmIChzdHIpIHsKKwkJaWYgKCFzdHJjbXAoImVtdWxhdGUiLCBzdHIpKQorCQkJdnN5c2NhbGxfbW9kZSA9IEVNVUxBVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoIm5hdGl2ZSIsIHN0cikpCisJCQl2c3lzY2FsbF9tb2RlID0gTkFUSVZFOworCQllbHNlIGlmICghc3RyY21wKCJub25lIiwgc3RyKSkKKwkJCXZzeXNjYWxsX21vZGUgPSBOT05FOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK2Vhcmx5X3BhcmFtKCJ2c3lzY2FsbCIsIHZzeXNjYWxsX3NldHVwKTsKKwogdm9pZCB1cGRhdGVfdnN5c2NhbGxfdHoodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAwLDcgKzEyMSw3IEBACiAKIAlwcmludGsoIiVzJXNbJWRdICVzIGlwOiVseCBjczolbHggc3A6JWx4IGF4OiVseCBzaTolbHggZGk6JWx4XG4iLAogCSAgICAgICBsZXZlbCwgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLAotCSAgICAgICBtZXNzYWdlLCByZWdzLT5pcCAtIDIsIHJlZ3MtPmNzLAorCSAgICAgICBtZXNzYWdlLCByZWdzLT5pcCwgcmVncy0+Y3MsCiAJICAgICAgIHJlZ3MtPnNwLCByZWdzLT5heCwgcmVncy0+c2ksIHJlZ3MtPmRpKTsKIH0KIApAQCAtMTE4LDQ2ICsxMzksMzkgQEAKIAlyZXR1cm4gbnI7CiB9CiAKLXZvaWQgZG90cmFwbGlua2FnZSBkb19lbXVsYXRlX3ZzeXNjYWxsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCitib29sIGVtdWxhdGVfdnN5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAl1bnNpZ25lZCBsb25nIGNhbGxlcjsKIAlpbnQgdnN5c2NhbGxfbnI7CiAJbG9uZyByZXQ7CiAKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KIAkvKgotCSAqIFJlYWwgNjQtYml0IHVzZXIgbW9kZSBjb2RlIGhhcyBjcyA9PSBfX1VTRVJfQ1MuICBBbnl0aGluZyBlbHNlCi0JICogaXMgYm9ndXMuCisJICogTm8gcG9pbnQgaW4gY2hlY2tpbmcgQ1MgLS0gdGhlIG9ubHkgd2F5IHRvIGdldCBoZXJlIGlzIGEgdXNlciBtb2RlCisJICogdHJhcCB0byBhIGhpZ2ggYWRkcmVzcywgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZSBpbiA2NC1iaXQgdXNlciBjb2RlLgogCSAqLwotCWlmIChyZWdzLT5jcyAhPSBfX1VTRVJfQ1MpIHsKLQkJLyoKLQkJICogSWYgd2UgdHJhcHBlZCBmcm9tIGtlcm5lbCBtb2RlLCB3ZSBtaWdodCBhcyB3ZWxsIE9PUFMgbm93Ci0JCSAqIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRvIHNvbWUgcmFuZG9tIGFkZHJlc3MgYW5kIE9PUFNpbmcKLQkJICogdGhlbi4KLQkJICovCi0JCUJVR19PTighdXNlcl9tb2RlKHJlZ3MpKTsKIAotCQkvKiBDb21wYXQgbW9kZSBhbmQgbm9uLWNvbXBhdCAzMi1iaXQgQ1Mgc2hvdWxkIGJvdGggc2VnZmF1bHQuICovCi0JCXdhcm5fYmFkX3ZzeXNjYWxsKEtFUk5fV0FSTklORywgcmVncywKLQkJCQkgICJpbGxlZ2FsIGludCAweGNjIGZyb20gMzItYml0IG1vZGUiKTsKLQkJZ290byBzaWdzZWd2OworCVdBUk5fT05fT05DRShhZGRyZXNzICE9IHJlZ3MtPmlwKTsKKworCWlmICh2c3lzY2FsbF9tb2RlID09IE5PTkUpIHsKKwkJd2Fybl9iYWRfdnN5c2NhbGwoS0VSTl9JTkZPLCByZWdzLAorCQkJCSAgInZzeXNjYWxsIGF0dGVtcHRlZCB3aXRoIHZzeXNjYWxsPW5vbmUiKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qCi0JICogeDg2LWlzbSBoZXJlOiByZWdzLT5pcCBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIGFmdGVyIHRoZSBpbnQgMHhjYywKLQkgKiBhbmQgaW50IDB4Y2MgaXMgdHdvIGJ5dGVzIGxvbmcuCi0JICovCi0JdnN5c2NhbGxfbnIgPSBhZGRyX3RvX3ZzeXNjYWxsX25yKHJlZ3MtPmlwIC0gMik7CisJdnN5c2NhbGxfbnIgPSBhZGRyX3RvX3ZzeXNjYWxsX25yKGFkZHJlc3MpOworCisJdHJhY2VfZW11bGF0ZV92c3lzY2FsbCh2c3lzY2FsbF9ucik7CisKIAlpZiAodnN5c2NhbGxfbnIgPCAwKSB7CiAJCXdhcm5fYmFkX3ZzeXNjYWxsKEtFUk5fV0FSTklORywgcmVncywKLQkJCQkgICJpbGxlZ2FsIGludCAweGNjIChleHBsb2l0IGF0dGVtcHQ/KSIpOworCQkJCSAgIm1pc2FsaWduZWQgdnN5c2NhbGwgKGV4cGxvaXQgYXR0ZW1wdCBvciBidWdneSBwcm9ncmFtKSAtLSBsb29rIHVwIHRoZSB2c3lzY2FsbCBrZXJuZWwgcGFyYW1ldGVyIGlmIHlvdSBuZWVkIGEgd29ya2Fyb3VuZCIpOwogCQlnb3RvIHNpZ3NlZ3Y7CiAJfQogCiAJaWYgKGdldF91c2VyKGNhbGxlciwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopcmVncy0+c3ApICE9IDApIHsKLQkJd2Fybl9iYWRfdnN5c2NhbGwoS0VSTl9XQVJOSU5HLCByZWdzLCAiaW50IDB4Y2Mgd2l0aCBiYWQgc3RhY2sgKGV4cGxvaXQgYXR0ZW1wdD8pIik7CisJCXdhcm5fYmFkX3ZzeXNjYWxsKEtFUk5fV0FSTklORywgcmVncywKKwkJCQkgICJ2c3lzY2FsbCB3aXRoIGJhZCBzdGFjayAoZXhwbG9pdCBhdHRlbXB0PykiKTsKIAkJZ290byBzaWdzZWd2OwogCX0KIApAQCAtMjAyLDEzICsyMTYsMTEgQEAKIAlyZWdzLT5pcCA9IGNhbGxlcjsKIAlyZWdzLT5zcCArPSA4OwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlyZXR1cm47CisJcmV0dXJuIHRydWU7CiAKIHNpZ3NlZ3Y6Ci0JcmVncy0+aXAgLT0gMjsgIC8qIFRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBzaG91bGQgYmUgdGhlIGludCAweGNjLiAqLwogCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMjU2LDE1ICsyNjgsMjEgQEAKIAogdm9pZCBfX2luaXQgbWFwX3ZzeXNjYWxsKHZvaWQpCiB7Ci0JZXh0ZXJuIGNoYXIgX192c3lzY2FsbF8wOwotCXVuc2lnbmVkIGxvbmcgcGh5c2FkZHJfcGFnZTAgPSBfX3BhX3N5bWJvbCgmX192c3lzY2FsbF8wKTsKKwlleHRlcm4gY2hhciBfX3ZzeXNjYWxsX3BhZ2U7CisJdW5zaWduZWQgbG9uZyBwaHlzYWRkcl92c3lzY2FsbCA9IF9fcGFfc3ltYm9sKCZfX3ZzeXNjYWxsX3BhZ2UpOwogCWV4dGVybiBjaGFyIF9fdnZhcl9wYWdlOwogCXVuc2lnbmVkIGxvbmcgcGh5c2FkZHJfdnZhcl9wYWdlID0gX19wYV9zeW1ib2woJl9fdnZhcl9wYWdlKTsKIAotCS8qIE5vdGUgdGhhdCBWU1lTQ0FMTF9NQVBQRURfUEFHRVMgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlIGJlbG93LiAqLwotCV9fc2V0X2ZpeG1hcChWU1lTQ0FMTF9GSVJTVF9QQUdFLCBwaHlzYWRkcl9wYWdlMCwgUEFHRV9LRVJORUxfVlNZU0NBTEwpOworCV9fc2V0X2ZpeG1hcChWU1lTQ0FMTF9GSVJTVF9QQUdFLCBwaHlzYWRkcl92c3lzY2FsbCwKKwkJICAgICB2c3lzY2FsbF9tb2RlID09IE5BVElWRQorCQkgICAgID8gUEFHRV9LRVJORUxfVlNZU0NBTEwKKwkJICAgICA6IFBBR0VfS0VSTkVMX1ZWQVIpOworCUJVSUxEX0JVR19PTigodW5zaWduZWQgbG9uZylfX2ZpeF90b192aXJ0KFZTWVNDQUxMX0ZJUlNUX1BBR0UpICE9CisJCSAgICAgKHVuc2lnbmVkIGxvbmcpVlNZU0NBTExfU1RBUlQpOworCiAJX19zZXRfZml4bWFwKFZWQVJfUEFHRSwgcGh5c2FkZHJfdnZhcl9wYWdlLCBQQUdFX0tFUk5FTF9WVkFSKTsKLQlCVUlMRF9CVUdfT04oKHVuc2lnbmVkIGxvbmcpX19maXhfdG9fdmlydChWVkFSX1BBR0UpICE9ICh1bnNpZ25lZCBsb25nKVZWQVJfQUREUkVTUyk7CisJQlVJTERfQlVHX09OKCh1bnNpZ25lZCBsb25nKV9fZml4X3RvX3ZpcnQoVlZBUl9QQUdFKSAhPQorCQkgICAgICh1bnNpZ25lZCBsb25nKVZWQVJfQUREUkVTUyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHZzeXNjYWxsX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF9lbXVfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF9lbXVfNjQuUwppbmRleCBmZmE4NDVlLi5jOTU5NmE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfZW11XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsX2VtdV82NC5TCkBAIC03LDIxICs3LDMxIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKwogI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZF82NC5oPgogCi0vKiBUaGUgdW51c2VkIHBhcnRzIG9mIHRoZSBwYWdlIGFyZSBmaWxsZWQgd2l0aCAweGNjIGJ5IHRoZSBsaW5rZXIgc2NyaXB0LiAqLworX19QQUdFX0FMSUdORURfREFUQQorCS5nbG9ibCBfX3ZzeXNjYWxsX3BhZ2UKKwkuYmFsaWduIFBBR0VfU0laRSwgMHhjYworCS50eXBlIF9fdnN5c2NhbGxfcGFnZSwgQG9iamVjdAorX192c3lzY2FsbF9wYWdlOgogCi0uc2VjdGlvbiAudnN5c2NhbGxfMCwgImEiCi1FTlRSWSh2c3lzY2FsbF8wKQotCWludCAkVlNZU0NBTExfRU1VX1ZFQ1RPUgotRU5EKHZzeXNjYWxsXzApCisJbW92ICRfX05SX2dldHRpbWVvZmRheSwgJXJheAorCXN5c2NhbGwKKwlyZXQKIAotLnNlY3Rpb24gLnZzeXNjYWxsXzEsICJhIgotRU5UUlkodnN5c2NhbGxfMSkKLQlpbnQgJFZTWVNDQUxMX0VNVV9WRUNUT1IKLUVORCh2c3lzY2FsbF8xKQorCS5iYWxpZ24gMTAyNCwgMHhjYworCW1vdiAkX19OUl90aW1lLCAlcmF4CisJc3lzY2FsbAorCXJldAogCi0uc2VjdGlvbiAudnN5c2NhbGxfMiwgImEiCi1FTlRSWSh2c3lzY2FsbF8yKQotCWludCAkVlNZU0NBTExfRU1VX1ZFQ1RPUgotRU5EKHZzeXNjYWxsXzIpCisJLmJhbGlnbiAxMDI0LCAweGNjCisJbW92ICRfX05SX2dldGNwdSwgJXJheAorCXN5c2NhbGwKKwlyZXQKKworCS5iYWxpZ24gNDA5NiwgMHhjYworCisJLnNpemUgX192c3lzY2FsbF9wYWdlLCA0MDk2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfdHJhY2UuaCBiL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjJlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfdHJhY2UuaApAQCAtMCwwICsxLDI5IEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSB2c3lzY2FsbAorCisjaWYgIWRlZmluZWQoX19WU1lTQ0FMTF9UUkFDRV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfX1ZTWVNDQUxMX1RSQUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworVFJBQ0VfRVZFTlQoZW11bGF0ZV92c3lzY2FsbCwKKworCSAgICBUUF9QUk9UTyhpbnQgbnIpLAorCisJICAgIFRQX0FSR1MobnIpLAorCisJICAgIFRQX1NUUlVDVF9fZW50cnkoX19maWVsZChpbnQsIG5yKSksCisKKwkgICAgVFBfZmFzdF9hc3NpZ24oCisJCQkgICBfX2VudHJ5LT5uciA9IG5yOworCQkJICAgKSwKKworCSAgICBUUF9wcmludGsoIm5yID0gJWQiLCBfX2VudHJ5LT5ucikKKyk7CisKKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuLi8uLi9hcmNoL3g4Ni9rZXJuZWwKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHZzeXNjYWxsX3RyYWNlCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IDk4ODcyNGIuLmZmNTc5MGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC0yMiw2ICsyMiw4IEBACiAJZGVwZW5kcyBvbiBIQVZFX0tWTQogCSMgZm9yIGRldmljZSBhc3NpZ25tZW50OgogCWRlcGVuZHMgb24gUENJCisJIyBmb3IgVEFTS1NUQVRTL1RBU0tfREVMQVlfQUNDVDoKKwlkZXBlbmRzIG9uIE5FVAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBNTVVfTk9USUZJRVIKIAlzZWxlY3QgQU5PTl9JTk9ERVMKQEAgLTMxLDYgKzMzLDcgQEAKIAlzZWxlY3QgS1ZNX0FTWU5DX1BGCiAJc2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSCiAJc2VsZWN0IEtWTV9NTUlPCisJc2VsZWN0IFRBU0tTVEFUUwogCXNlbGVjdCBUQVNLX0RFTEFZX0FDQ1QKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IDRkMDlkZjAuLjBkMTdjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgkJLyogcGdkXyooKSwgLi4uCQkJKi8KICNpbmNsdWRlIDxhc20va21lbWNoZWNrLmg+CQkvKiBrbWVtY2hlY2tfKigpLCAuLi4JCSovCisjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CiAKIC8qCiAgKiBQYWdlIGZhdWx0IGVycm9yIGNvZGUgYml0czoKQEAgLTEwNSw3ICsxMDYsNyBAQAogCQkgKiBidXQgZm9yIG5vdyBpdCdzIGdvb2QgZW5vdWdoIHRvIGFzc3VtZSB0aGF0IGxvbmcKIAkJICogbW9kZSBvbmx5IHVzZXMgd2VsbCBrbm93biBzZWdtZW50cyBvciBrZXJuZWwuCiAJCSAqLwotCQlyZXR1cm4gKCF1c2VyX21vZGUocmVncykpIHx8IChyZWdzLT5jcyA9PSBfX1VTRVJfQ1MpOworCQlyZXR1cm4gKCF1c2VyX21vZGUocmVncykgfHwgdXNlcl82NGJpdF9tb2RlKHJlZ3MpKTsKICNlbmRpZgogCWNhc2UgMHg2MDoKIAkJLyogMHg2NCB0aHJ1IDB4NjcgYXJlIHZhbGlkIHByZWZpeGVzIGluIGFsbCBtb2Rlcy4gKi8KQEAgLTcyMCw2ICs3MjEsMTggQEAKIAkJaWYgKGlzX2VycmF0YTEwMChyZWdzLCBhZGRyZXNzKSkKIAkJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwkJLyoKKwkJICogSW5zdHJ1Y3Rpb24gZmV0Y2ggZmF1bHRzIGluIHRoZSB2c3lzY2FsbCBwYWdlIG1pZ2h0IG5lZWQKKwkJICogZW11bGF0aW9uLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KChlcnJvcl9jb2RlICYgUEZfSU5TVFIpICYmCisJCQkgICAgICgoYWRkcmVzcyAmIH4weGZmZikgPT0gVlNZU0NBTExfU1RBUlQpKSkgeworCQkJaWYgKGVtdWxhdGVfdnN5c2NhbGwocmVncywgYWRkcmVzcykpCisJCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwogCQlpZiAodW5saWtlbHkoc2hvd191bmhhbmRsZWRfc2lnbmFscykpCiAJCQlzaG93X3NpZ25hbF9tc2cocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgdHNrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggNjhjM2MxMy4uMDM5ZDkxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC0yNDYsMTAgKzI0Niw5IEBACiAKIAkJY29uZmxpY3QgPSBpbnNlcnRfcmVzb3VyY2VfY29uZmxpY3Qocm9vdCwgcmVzKTsKIAkJaWYgKGNvbmZsaWN0KQotCQkJZGV2X2VycigmaW5mby0+YnJpZGdlLT5kZXYsCi0JCQkJImFkZHJlc3Mgc3BhY2UgY29sbGlzaW9uOiBob3N0IGJyaWRnZSB3aW5kb3cgJXBSICIKLQkJCQkiY29uZmxpY3RzIHdpdGggJXMgJXBSXG4iLAotCQkJCXJlcywgY29uZmxpY3QtPm5hbWUsIGNvbmZsaWN0KTsKKwkJCWRldl9pbmZvKCZpbmZvLT5icmlkZ2UtPmRldiwKKwkJCQkgImlnbm9yaW5nIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKGNvbmZsaWN0cyB3aXRoICVzICVwUilcbiIsCisJCQkJIHJlcywgY29uZmxpY3QtPm5hbWUsIGNvbmZsaWN0KTsKIAkJZWxzZQogCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoaW5mby0+YnVzLCByZXMsIDApOwogCX0KQEAgLTM2MSw2ICszNjAsMjAgQEAKIAkJfQogCX0KIAorCS8qIEFmdGVyIHRoZSBQQ0ktRSBidXMgaGFzIGJlZW4gd2Fsa2VkIGFuZCBhbGwgZGV2aWNlcyBkaXNjb3ZlcmVkLAorCSAqIGNvbmZpZ3VyZSBhbnkgc2V0dGluZ3Mgb2YgdGhlIGZhYnJpYyB0aGF0IG1pZ2h0IGJlIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoYnVzKSB7CisJCXN0cnVjdCBwY2lfYnVzICpjaGlsZDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmJ1cy0+Y2hpbGRyZW4sIG5vZGUpIHsKKwkJCXN0cnVjdCBwY2lfZGV2ICpzZWxmID0gY2hpbGQtPnNlbGY7CisJCQlpZiAoIXNlbGYpCisJCQkJY29udGludWU7CisKKwkJCXBjaWVfYnVzX2NvbmZpZ3VyZV9zZXR0aW5ncyhjaGlsZCwgc2VsZi0+cGNpZV9tcHNzKTsKKwkJfQorCX0KKwogCWlmICghYnVzKQogCQlrZnJlZShzZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jZTQxMDAuYyBiL2FyY2gveDg2L3BjaS9jZTQxMDAuYwppbmRleCA2Nzg1OGJlLi45OTE3NjA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY2U0MTAwLmMKKysrIGIvYXJjaC94ODYvcGNpL2NlNDEwMC5jCkBAIC0yNTcsNiArMjU3LDcgQEAKIHsKIAlpbnQgaTsKIAorCVdBUk5fT04oc2VnKTsKIAlpZiAoYnVzID09IDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVzMV9maXh1cHMpOyBpKyspIHsKIAkJCWlmIChidXMxX2ZpeHVwc1tpXS5kZXZfZnVuYyA9PSBkZXZmbiAmJgpAQCAtMjgyLDYgKzI4Myw3IEBACiB7CiAJaW50IGk7CiAKKwlXQVJOX09OKHNlZyk7CiAJaWYgKGJ1cyA9PSAxKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1czFfZml4dXBzKTsgaSsrKSB7CiAJCQlpZiAoYnVzMV9maXh1cHNbaV0uZGV2X2Z1bmMgPT0gZGV2Zm4gJiYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jb21tb24uYyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwppbmRleCA1ZmU3NTAyLi45MmRmMzIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCkBAIC0yNDcsMTMgKzI0Nyw2IEBACiAJfSwKICNlbmRpZgkJLyogX19pMzg2X18gKi8KIAl7Ci0JCS5jYWxsYmFjayA9IGZpbmRfc29ydF9tZXRob2QsCi0JCS5pZGVudCA9ICJEZWxsIFN5c3RlbSIsCi0JCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMiKSwKLQkJfSwKLQl9LAotCXsKIAkJLmNhbGxiYWNrID0gc2V0X2JmX3NvcnQsCiAJCS5pZGVudCA9ICJEZWxsIFBvd2VyRWRnZSAxOTUwIiwKIAkJLm1hdGNoZXMgPSB7CkBAIC0yOTQsNiArMjg3LDEzIEBACiAJCX0sCiAJfSwKIAl7CisJCS5jYWxsYmFjayA9IGZpbmRfc29ydF9tZXRob2QsCisJCS5pZGVudCA9ICJEZWxsIFN5c3RlbSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmNhbGxiYWNrID0gc2V0X2JmX3NvcnQsCiAJCS5pZGVudCA9ICJIUCBQcm9MaWFudCBCTDIwcCBHMyIsCiAJCS5tYXRjaGVzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2RpcmVjdC5jIGIvYXJjaC94ODYvcGNpL2RpcmVjdC5jCmluZGV4IGU2ZmQ4NDcuLjRmMmM3MDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9kaXJlY3QuYworKysgYi9hcmNoL3g4Ni9wY2kvZGlyZWN0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDQwOTUpKSB7CisJaWYgKHNlZyB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkgewogCQkqdmFsdWUgPSAtMTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTMsNyArNTMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gNDA5NSkpCisJaWYgKHNlZyB8fCAoYnVzID4gMjU1KSB8fCAoZGV2Zm4gPiAyNTUpIHx8IChyZWcgPiA0MDk1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaV9jb25maWdfbG9jaywgZmxhZ3MpOwpAQCAtOTcsNiArOTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGRldiwgZm47CiAKKwlXQVJOX09OKHNlZyk7CiAJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpIHsKIAkJKnZhbHVlID0gLTE7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM4LDYgKzEzOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZGV2LCBmbjsKIAorCVdBUk5fT04oc2VnKTsKIAlpZiAoKGJ1cyA+IDI1NSkgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gMjU1KSkgCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCmluZGV4IDVjOWUyNDUuLjUxMmE4OGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC0zNCw2ICszNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICphZHIgX19pb21lbSA9IFhRVUFEX1BPUlRfQUREUigweGNmYywgQlVTMlFVQUQoYnVzKSk7CiAKKwlXQVJOX09OKHNlZyk7CiAJaWYgKCF2YWx1ZSB8fCAoYnVzID49IE1BWF9NUF9CVVNTRVMpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03Myw2ICs3NCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICphZHIgX19pb21lbSA9IFhRVUFEX1BPUlRfQUREUigweGNmYywgQlVTMlFVQUQoYnVzKSk7CiAKKwlXQVJOX09OKHNlZyk7CiAJaWYgKChidXMgPj0gTUFYX01QX0JVU1NFUykgfHwgKGRldmZuID4gMjU1KSB8fCAocmVnID4gMjU1KSkgCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvb2xwYy5jIGIvYXJjaC94ODYvcGNpL29scGMuYwppbmRleCAxMzcwMGVjLi41MjYyNjAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvb2xwYy5jCisrKyBiL2FyY2gveDg2L3BjaS9vbHBjLmMKQEAgLTIwNiw2ICsyMDYsOCBAQAogewogCXVpbnQzMl90ICphZGRyOwogCisJV0FSTl9PTihzZWcpOworCiAJLyogVXNlIHRoZSBoYXJkd2FyZSBtZWNoYW5pc20gZm9yIG5vbi1zaW11bGF0ZWQgZGV2aWNlcyAqLwogCWlmICghaXNfc2ltdWxhdGVkKGJ1cywgZGV2Zm4pKQogCQlyZXR1cm4gcGNpX2RpcmVjdF9jb25mMS5yZWFkKHNlZywgYnVzLCBkZXZmbiwgcmVnLCBsZW4sIHZhbHVlKTsKQEAgLTI2NCw2ICsyNjYsOCBAQAogc3RhdGljIGludCBwY2lfb2xwY193cml0ZSh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLAogCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsIGludCBsZW4sIHVpbnQzMl90IHZhbHVlKQogeworCVdBUk5fT04oc2VnKTsKKwogCS8qIFVzZSB0aGUgaGFyZHdhcmUgbWVjaGFuaXNtIGZvciBub24tc2ltdWxhdGVkIGRldmljZXMgKi8KIAlpZiAoIWlzX3NpbXVsYXRlZChidXMsIGRldmZuKSkKIAkJcmV0dXJuIHBjaV9kaXJlY3RfY29uZjEud3JpdGUoc2VnLCBidXMsIGRldmZuLCByZWcsIGxlbiwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3BjYmlvcy5jIGIvYXJjaC94ODYvcGNpL3BjYmlvcy5jCmluZGV4IGE1ZjdkMGQuLmY2ODU1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9wY2Jpb3MuYworKysgYi9hcmNoL3g4Ni9wY2kvcGNiaW9zLmMKQEAgLTE4MSw2ICsxODEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBieCA9IChidXMgPDwgOCkgfCBkZXZmbjsKIAorCVdBUk5fT04oc2VnKTsKIAlpZiAoIXZhbHVlIHx8IChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yNDcsNiArMjQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgYnggPSAoYnVzIDw8IDgpIHwgZGV2Zm47CiAKKwlXQVJOX09OKHNlZyk7CiAJaWYgKChidXMgPiAyNTUpIHx8IChkZXZmbiA+IDI1NSkgfHwgKHJlZyA+IDI1NSkpIAogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3Zpc3dzLmMgYi9hcmNoL3g4Ni9wY2kvdmlzd3MuYwppbmRleCAwMzAwOGY3Li42ZjJmOGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvdmlzd3MuYworKysgYi9hcmNoL3g4Ni9wY2kvdmlzd3MuYwpAQCAtMjQsNyArMjQsNyBAQAogCiB1bnNpZ25lZCBpbnQgcGNpX2J1czAsIHBjaV9idXMxOwogCi1zdGF0aWMgaW50IF9faW5pdCB2aXN3c19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3N0YXRpYyBpbnQgX19pbml0IHZpc3dzX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewogCWludCBpcnEsIGJ1cyA9IGRldi0+YnVzLT5udW1iZXI7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L01ha2VmaWxlCmluZGV4IGY2MWNjZGQuLjFlYTM4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19YODZfTVJTVCkJCSs9IG1yc3Qubwogb2JqLSQoQ09ORklHX1g4Nl9NUlNUKQkJKz0gdnJ0Yy5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLX01SU1QpCSs9IGVhcmx5X3ByaW50a19tcnN0Lm8KK29iai0kKENPTkZJR19YODZfTVJTVCkJCSs9IHBtdS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jCmluZGV4IDcwMDBlNzRiLi41ODQyNWFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYwpAQCAtNjg5LDcgKzY4OSw5IEBACiAJCQlpcnFfYXR0ci50cmlnZ2VyID0gMTsKIAkJCWlycV9hdHRyLnBvbGFyaXR5ID0gMTsKIAkJCWlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nKE5VTEwsIHBlbnRyeS0+aXJxLCAmaXJxX2F0dHIpOwotCQl9CisJCX0gZWxzZQorCQkJcGVudHJ5LT5pcnEgPSAwOyAvKiBObyBpcnEgKi8KKwogCQlzd2l0Y2ggKHBlbnRyeS0+dHlwZSkgewogCQljYXNlIFNGSV9ERVZfVFlQRV9JUEM6CiAJCQkvKiBJRCBhcyBJUlEgaXMgYSBoYWNrIHRoYXQgd2lsbCBnbyBhd2F5ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L3BtdS5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjgxZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9wbXUuYwpAQCAtMCwwICsxLDgxNyBAQAorLyoKKyAqIG1yc3QvcG11LmMgLSBkcml2ZXIgZm9yIE1SU1QgUG93ZXIgTWFuYWdlbWVudCBVbml0CisgKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgorI2luY2x1ZGUgInBtdS5oIgorCisjZGVmaW5lIElQQ01TR19GV19SRVZJU0lPTgkweEY0CisKK3N0cnVjdCBtcnN0X2RldmljZSB7CisJdTE2IHBjaV9kZXZfbnVtOwkvKiBERUJVRyBvbmx5ICovCisJdTE2IGxzczsKKwl1MTYgbGF0ZXN0X3JlcXVlc3Q7CisJdW5zaWduZWQgaW50IHBjaV9zdGF0ZV9jb3VudHNbUENJX0QzY29sZCArIDFdOyAvKiBERUJVRyBvbmx5ICovCit9OworCisvKgorICogY29tbGV0ZSBsaXN0IG9mIE1SU1QgUENJIGRldmljZXMKKyAqLworc3RhdGljIHN0cnVjdCBtcnN0X2RldmljZSBtcnN0X2RldnNbXSA9IHsKKy8qICAwICovIHsgMHgwODAwLCBMU1NfU1BJMCB9LAkJLyogTW9vcmVzdG93biBTUEkgQ3RybCAwICovCisvKiAgMSAqLyB7IDB4MDgwMSwgTFNTX1NQSTEgfSwJCS8qIE1vb3Jlc3Rvd24gU1BJIEN0cmwgMSAqLworLyogIDIgKi8geyAweDA4MDIsIExTU19JMkMwIH0sCQkvKiBNb29yZXN0b3duIEkyQyAwICovCisvKiAgMyAqLyB7IDB4MDgwMywgTFNTX0kyQzEgfSwJCS8qIE1vb3Jlc3Rvd24gSTJDIDEgKi8KKy8qICA0ICovIHsgMHgwODA0LCBMU1NfSTJDMiB9LAkJLyogTW9vcmVzdG93biBJMkMgMiAqLworLyogIDUgKi8geyAweDA4MDUsIExTU19LQkQgfSwJCS8qIE1vb3Jlc3Rvd24gS2V5Ym9hcmQgQ3RybCAqLworLyogIDYgKi8geyAweDA4MDYsIExTU19VU0JfSEMgfSwJLyogTW9vcmVzdG93biBVU0IgQ3RybCAqLworLyogIDcgKi8geyAweDA4MDcsIExTU19TRF9IQzAgfSwJLyogTW9vcmVzdG93biBTRCBIb3N0IEN0cmwgMCAqLworLyogIDggKi8geyAweDA4MDgsIExTU19TRF9IQzEgfSwJLyogTW9vcmVzdG93biBTRCBIb3N0IEN0cmwgMSAqLworLyogIDkgKi8geyAweDA4MDksIExTU19OQU5EIH0sCQkvKiBNb29yZXN0b3duIE5BTkQgQ3RybCAqLworLyogMTAgKi8geyAweDA4MGEsIExTU19BVURJTyB9LAkJLyogTW9vcmVzdG93biBBdWRpbyBDdHJsICovCisvKiAxMSAqLyB7IDB4MDgwYiwgTFNTX0lNQUdJTkcgfSwJLyogTW9vcmVzdG93biBJU1AgKi8KKy8qIDEyICovIHsgMHgwODBjLCBMU1NfU0VDVVJJVFkgfSwJLyogTW9vcmVzdG93biBTZWN1cml0eSBDb250cm9sbGVyICovCisvKiAxMyAqLyB7IDB4MDgwZCwgTFNTX0RJU1BMQVkgfSwJLyogTW9vcmVzdG93biBFeHRlcm5hbCBEaXNwbGF5cyAqLworLyogMTQgKi8geyAweDA4MGUsIDAgfSwJCQkvKiBNb29yZXN0b3duIFNDVSBJUEMgKi8KKy8qIDE1ICovIHsgMHgwODBmLCBMU1NfR1BJTyB9LAkJLyogTW9vcmVzdG93biBHUElPIENvbnRyb2xsZXIgKi8KKy8qIDE2ICovIHsgMHgwODEwLCAwIH0sCQkJLyogTW9vcmVzdG93biBQb3dlciBNYW5hZ2VtZW50IFVuaXQgKi8KKy8qIDE3ICovIHsgMHgwODExLCBMU1NfVVNCX09URyB9LAkvKiBNb29yZXN0b3duIE9URyBDdHJsICovCisvKiAxOCAqLyB7IDB4MDgxMiwgTFNTX1NQSTIgfSwJCS8qIE1vb3Jlc3Rvd24gU1BJIEN0cmwgMiAqLworLyogMTkgKi8geyAweDA4MTMsIDAgfSwJCQkvKiBNb29yZXN0b3duIFNDIERNQSAqLworLyogMjAgKi8geyAweDA4MTQsIExTU19BVURJT19MUEUgfSwJLyogTW9vcmVzdG93biBMUEUgRE1BICovCisvKiAyMSAqLyB7IDB4MDgxNSwgTFNTX0FVRElPX1NTUCB9LAkvKiBNb29yZXN0b3duIFNTUDAgKi8KKworLyogMjIgKi8geyAweDA4NEYsIExTU19TRF9IQzIgfSwJLyogTW9vcmVzdG93biBTRCBIb3N0IEN0cmwgMiAqLworCisvKiAyMyAqLyB7IDB4NDEwMiwgMCB9LAkJCS8qIExpbmNyb2Z0ICovCisvKiAyNCAqLyB7IDB4NDExMCwgMCB9LAkJCS8qIExpbmNyb2Z0ICovCit9OworCisvKiBuLmIuIFdlIGlnbm9yZSBQQ0ktaWQgMHg4MTUgaW4gTFNTOSBiL2MgTWVlR28gaGFzIG5vIGRyaXZlciBmb3IgaXQgKi8KK3N0YXRpYyB1MTYgbXJzdF9sc3M5X3BjaV9pZHNbXSA9IHsweDA4MGEsIDB4MDgxNCwgMH07CitzdGF0aWMgdTE2IG1yc3RfbHNzMTBfcGNpX2lkc1tdID0gezB4MDgwMCwgMHgwODAxLCAweDA4MDIsIDB4MDgwMywKKwkJCQkJMHgwODA0LCAweDA4MDUsIDB4MDgwZiwgMH07CisKKy8qIGhhbmRsZSBjb25jdXJyZW50IFNNUCBpbnZva2F0aW9ucyBvZiBwbXVfcGNpX3NldF9wb3dlcl9zdGF0ZSgpICovCitzdGF0aWMgc3BpbmxvY2tfdCBtcnN0X3BtdV9wb3dlcl9zdGF0ZV9sb2NrOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdha2VfY291bnRlcnNbTVJTVF9OVU1fTFNTXTsJLyogREVCVUcgb25seSAqLworc3RhdGljIHVuc2lnbmVkIGludCBwbXVfaXJxX3N0YXRzW0lOVF9JTlZBTElEICsgMV07CS8qIERFQlVHIG9ubHkgKi8KKworc3RhdGljIGludCBncmFwaGljc19pc19vZmY7CitzdGF0aWMgaW50IGxzc19zMGkzX2VuYWJsZWQ7CitzdGF0aWMgYm9vbCBtcnN0X3BtdV9zMGkzX2VuYWJsZTsKKworLyogIGRlYnVnIGNvdW50ZXJzICovCitzdGF0aWMgdTMyIHBtdV93YWl0X3JlYWR5X2NhbGxzOworc3RhdGljIHUzMiBwbXVfd2FpdF9yZWFkeV91ZGVsYXlzOworc3RhdGljIHUzMiBwbXVfd2FpdF9yZWFkeV91ZGVsYXlzX21heDsKK3N0YXRpYyB1MzIgcG11X3dhaXRfZG9uZV9jYWxsczsKK3N0YXRpYyB1MzIgcG11X3dhaXRfZG9uZV91ZGVsYXlzOworc3RhdGljIHUzMiBwbXVfd2FpdF9kb25lX3VkZWxheXNfbWF4Oworc3RhdGljIHUzMiBwbXVfc2V0X3Bvd2VyX3N0YXRlX2VudHJ5Oworc3RhdGljIHUzMiBwbXVfc2V0X3Bvd2VyX3N0YXRlX3NlbmRfY21kOworCitzdGF0aWMgc3RydWN0IG1yc3RfZGV2aWNlICpwY2lfaWRfMl9tcnN0X2Rldih1MTYgcGNpX2Rldl9udW0pCit7CisJaW50IGluZGV4ID0gMDsKKworCWlmICgocGNpX2Rldl9udW0gPj0gMHgwODAwKSAmJiAocGNpX2Rldl9udW0gPD0gMHg4MTUpKQorCQlpbmRleCA9IHBjaV9kZXZfbnVtIC0gMHg4MDA7CisJZWxzZSBpZiAocGNpX2Rldl9udW0gPT0gMHgwODRGKQorCQlpbmRleCA9IDIyOworCWVsc2UgaWYgKHBjaV9kZXZfbnVtID09IDB4NDEwMikKKwkJaW5kZXggPSAyMzsKKwllbHNlIGlmIChwY2lfZGV2X251bSA9PSAweDQxMTApCisJCWluZGV4ID0gMjQ7CisKKwlpZiAocGNpX2Rldl9udW0gIT0gbXJzdF9kZXZzW2luZGV4XS5wY2lfZGV2X251bSkgeworCQlXQVJOX09OQ0UoMSwgRldfQlVHICJVbmtub3duIFBDSSBkZXZpY2UgMHglMDRYXG4iLCBwY2lfZGV2X251bSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAmbXJzdF9kZXZzW2luZGV4XTsKK30KKworLyoqCisgKiBtcnN0X3BtdV92YWxpZGF0ZV9jc3RhdGVzCisgKiBAZGV2OiBjcHVpZGxlX2RldmljZQorICoKKyAqIENlcnRhaW4gc3RhdGVzIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIGdvdmVybm9yIHRvIHBpY2sgaW4gc29tZSBjYXNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYXMgY3B1aWRsZV9kZXZpY2UncyBwcmVwYXJlIGNhbGxiYWNrIGFuZAorICogdGh1cyB0ZWxscyBnb3Zlcm5vciB0byBpZ25vcmUgc3VjaCBzdGF0ZXMgd2hlbiBzZWxlY3RpbmcgdGhlIG5leHQgc3RhdGUKKyAqIHRvIGVudGVyLgorICovCisKKyNkZWZpbmUgSURMRV9TVEFURTRfSVNfQzYJNAorI2RlZmluZSBJRExFX1NUQVRFNV9JU19TMEkzCTUKKworaW50IG1yc3RfcG11X2ludmFsaWRfY3N0YXRlcyh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIERlbW90ZSB0byBDNCBpZiB0aGUgUE1VIGlzIGJ1c3kuCisJICogU2luY2UgTFNTIGNoYW5nZXMgbGVhdmUgdGhlIGJ1c3kgYml0IGNsZWFyLi4uCisJICogYnVzeSBtZWFucyBlaXRoZXIgdGhlIFBNVSBpcyB3YWl0aW5nIGZvciBhbiBBQ0stQzYgdGhhdAorCSAqIGlzbid0IGNvbWluZyBkdWUgdG8gYW4gTVdBSVQgdGhhdCByZXR1cm5lZCBpbW1lZGlhdGVseTsKKwkgKiBvciB3ZSByZXR1cm5lZCBmcm9tIFMwaTMgc3VjY2Vzc2Z1bGx5LCBhbmQgdGhlIFBNVQorCSAqIGlzIG5vdCBkb25lIHNlbmRpbmcgdXMgaW50ZXJydXB0cy4KKwkgKi8KKwlpZiAocG11X3JlYWRfYnVzeV9zdGF0dXMoKSkKKwkJcmV0dXJuIDEgPDwgSURMRV9TVEFURTRfSVNfQzYgfCAxIDw8IElETEVfU1RBVEU1X0lTX1MwSTM7CisKKwkvKgorCSAqIERpc2FsbG93IFMwaTMgaWY6IFBNVSBpcyBub3QgaW5pdGlhbGl6ZWQsIG9yIENQVTEgaXMgYWN0aXZlLAorCSAqIG9yIGlmIGRldmljZSBMU1MgaXMgaW5zdWZmaWNpZW50LCBvciB0aGUgR1BVIGlzIGFjdGl2ZSwKKwkgKiBvciBpZiBpdCBoYXMgYmVlbiBleHBsaWNpdGx5IGRpc2FibGVkLgorCSAqLworCWlmICghcG11X3JlZyB8fCAhY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdW1hc2tfb2YoY3B1KSkgfHwKKwkgICAgIWxzc19zMGkzX2VuYWJsZWQgfHwgIWdyYXBoaWNzX2lzX29mZiB8fCAhbXJzdF9wbXVfczBpM19lbmFibGUpCisJCXJldHVybiAxIDw8IElETEVfU1RBVEU1X0lTX1MwSTM7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBtdV91cGRhdGVfd2FrZV9jb3VudGVycygpOiByZWFkIFBNX1dLUywgdXBkYXRlIHdha2VfY291bnRlcnNbXQorICogREVCVUcgb25seS4KKyAqLworc3RhdGljIHZvaWQgcG11X3VwZGF0ZV93YWtlX2NvdW50ZXJzKHZvaWQpCit7CisJaW50IGxzczsKKwl1MzIgd2FrZV9zdGF0dXM7CisKKwl3YWtlX3N0YXR1cyA9IHBtdV9yZWFkX3drcygpOworCisJZm9yIChsc3MgPSAwOyBsc3MgPCBNUlNUX05VTV9MU1M7ICsrbHNzKSB7CisJCWlmICh3YWtlX3N0YXR1cyAmICgxIDw8IGxzcykpCisJCQl3YWtlX2NvdW50ZXJzW2xzc10rKzsKKwl9Cit9CisKK2ludCBtcnN0X3BtdV9zMGkzX2VudHJ5KHZvaWQpCit7CisJaW50IHN0YXR1czsKKworCS8qIENsZWFyIGFueSBwb3NzaWJsZSBlcnJvciBjb25kaXRpb25zICovCisJcG11X3dyaXRlX2ljcygweDMwMCk7CisKKwkvKiBzZXQgd2FrZSBjb250cm9sIHRvIGN1cnJlbnQgRC1zdGF0ZXMgKi8KKwlwbXVfd3JpdGVfd3NzYyhTMEkzX1NTU19UQVJHRVQpOworCisJc3RhdHVzID0gbXJzdF9zMGkzX2VudHJ5KFBNX1MwSTNfQ09NTUFORCwgJnBtdV9yZWctPnBtX2NtZCk7CisJcG11X3VwZGF0ZV93YWtlX2NvdW50ZXJzKCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogcG9sbCBmb3IgbWF4aW11bSBvZiA1bXMgZm9yIGJ1c3kgYml0IHRvIGNsZWFyICovCitzdGF0aWMgaW50IHBtdV93YWl0X3JlYWR5KHZvaWQpCit7CisJaW50IHVkZWxheXM7CisKKwlwbXVfd2FpdF9yZWFkeV9jYWxscysrOworCisJZm9yICh1ZGVsYXlzID0gMDsgdWRlbGF5cyA8IDUwMDsgKyt1ZGVsYXlzKSB7CisJCWlmICh1ZGVsYXlzID4gcG11X3dhaXRfcmVhZHlfdWRlbGF5c19tYXgpCisJCQlwbXVfd2FpdF9yZWFkeV91ZGVsYXlzX21heCA9IHVkZWxheXM7CisKKwkJaWYgKHBtdV9yZWFkX2J1c3lfc3RhdHVzKCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgxMCk7CisJCXBtdV93YWl0X3JlYWR5X3VkZWxheXMrKzsKKwl9CisKKwkvKgorCSAqIGlmIHRoaXMgZmlyZXMsIG9ic2VydmUKKwkgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9tcnN0X3BtdV93YWl0X3JlYWR5X2NhbGxzCisJICogL3N5cy9rZXJuZWwvZGVidWcvbXJzdF9wbXVfd2FpdF9yZWFkeV91ZGVsYXlzCisJICovCisJV0FSTl9PTkNFKDEsICJTQ1Ugbm90IHJlYWR5IGZvciA1bXMiKTsKKwlyZXR1cm4gLUVCVVNZOworfQorLyogcG9sbCBmb3IgbWF4aW11bSBvZiA1MG1zIHVzIGZvciBidXN5IGJpdCB0byBjbGVhciAqLworc3RhdGljIGludCBwbXVfd2FpdF9kb25lKHZvaWQpCit7CisJaW50IHVkZWxheXM7CisKKwlwbXVfd2FpdF9kb25lX2NhbGxzKys7CisKKwlmb3IgKHVkZWxheXMgPSAwOyB1ZGVsYXlzIDwgNTAwOyArK3VkZWxheXMpIHsKKwkJaWYgKHVkZWxheXMgPiBwbXVfd2FpdF9kb25lX3VkZWxheXNfbWF4KQorCQkJcG11X3dhaXRfZG9uZV91ZGVsYXlzX21heCA9IHVkZWxheXM7CisKKwkJaWYgKHBtdV9yZWFkX2J1c3lfc3RhdHVzKCkgPT0gMCkKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgxMDApOworCQlwbXVfd2FpdF9kb25lX3VkZWxheXMrKzsKKwl9CisKKwkvKgorCSAqIGlmIHRoaXMgZmlyZXMsIG9ic2VydmUKKwkgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9tcnN0X3BtdV93YWl0X2RvbmVfY2FsbHMKKwkgKiAvc3lzL2tlcm5lbC9kZWJ1Zy9tcnN0X3BtdV93YWl0X2RvbmVfdWRlbGF5cworCSAqLworCVdBUk5fT05DRSgxLCAiU0NVIG5vdCBkb25lIGZvciA1MG1zIik7CisJcmV0dXJuIC1FQlVTWTsKK30KKwordTMyIG1yc3RfcG11X21zaV9pc19kaXNhYmxlZCh2b2lkKQoreworCXJldHVybiBwbXVfbXNpX2lzX2Rpc2FibGVkKCk7Cit9CisKK3ZvaWQgbXJzdF9wbXVfZW5hYmxlX21zaSh2b2lkKQoreworCXBtdV9tc2lfZW5hYmxlKCk7Cit9CisKKy8qKgorICogcG11X2lycSAtIHBtdSBkcml2ZXIgaW50ZXJydXB0IGhhbmRsZXIKKyAqIENvbnRleHQ6IGludGVycnVwdCBjb250ZXh0CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwbXVfaXJxKGludCBpcnEsIHZvaWQgKmR1bW15KQoreworCXVuaW9uIHBtdV9wbV9pY3MgcG11X2ljczsKKworCXBtdV9pY3MudmFsdWUgPSBwbXVfcmVhZF9pY3MoKTsKKworCWlmICghcG11X2ljcy5iaXRzLnBlbmRpbmcpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXN3aXRjaCAocG11X2ljcy5iaXRzLmNhdXNlKSB7CisJY2FzZSBJTlRfU1BVUklPVVM6CisJY2FzZSBJTlRfQ01EX0RPTkU6CisJY2FzZSBJTlRfQ01EX0VSUjoKKwljYXNlIElOVF9XQUtFX1JYOgorCWNhc2UgSU5UX1NTX0VSUk9SOgorCWNhc2UgSU5UX1MwSVhfTUlTUzoKKwljYXNlIElOVF9OT19BQ0tDNjoKKwkJcG11X2lycV9zdGF0c1twbXVfaWNzLmJpdHMuY2F1c2VdKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBtdV9pcnFfc3RhdHNbSU5UX0lOVkFMSURdKys7CisJfQorCisJcG11X3dyaXRlX2ljcyhwbXVfaWNzLnZhbHVlKTsgLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBQQ0kgcG93ZXIgbWFuYWdlbWVudCB0byBNUlNUIExTUyBELXN0YXRlcworICovCitzdGF0aWMgaW50IHBjaV8yX21yc3Rfc3RhdGUoaW50IGxzcywgcGNpX3Bvd2VyX3QgcGNpX3N0YXRlKQoreworCXN3aXRjaCAocGNpX3N0YXRlKSB7CisJY2FzZSBQQ0lfRDA6CisJCWlmIChTU01TSyhEMGkxLCBsc3MpICYgRDBJMV9BQ0dfU1NTX1RBUkdFVCkKKwkJCXJldHVybiBEMGkxOworCQllbHNlCisJCQlyZXR1cm4gRDA7CisJY2FzZSBQQ0lfRDE6CisJCXJldHVybiBEMGkxOworCWNhc2UgUENJX0QyOgorCQlyZXR1cm4gRDBpMjsKKwljYXNlIFBDSV9EM2hvdDoKKwljYXNlIFBDSV9EM2NvbGQ6CisJCXJldHVybiBEMGkzOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgInBjaV9zdGF0ZSAlZFxuIiwgcGNpX3N0YXRlKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHBtdV9pc3N1ZV9jb21tYW5kKHUzMiBwbV9zc2MpCit7CisJdW5pb24gcG11X3BtX3NldF9jZmdfY21kX3QgY29tbWFuZDsKKworCWlmIChwbXVfcmVhZF9idXN5X3N0YXR1cygpKSB7CisJCXByX2RlYnVnKCJwbXUgaXMgYnVzeSwgT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBlbmFibGUgaW50ZXJydXB0cyBpbiBQTVUgc28gdGhhdCBpbnRlcnJ1cHRzIGFyZQorCSAqIHByb3BhZ2F0ZWQgd2hlbiBpb2MgYml0IGZvciBhIHBhcnRpY3VsYXIgc2V0CisJICogY29tbWFuZCBpcyBzZXQKKwkgKi8KKworCXBtdV9pcnFfZW5hYmxlKCk7CisKKwkvKiBDb25maWd1cmUgdGhlIHN1YiBzeXN0ZW1zIGZvciBwbXUyICovCisKKwlwbXVfd3JpdGVfc3NjKHBtX3NzYyk7CisKKwkvKgorCSAqIFNlbmQgdGhlIHNldCBjb25maWcgY29tbWFuZCBmb3IgcG11IGl0cyBjb25maWd1cmVkCisJICogZm9yIG1vZGUgQ01fSU1NRURJQVRFICYgaGVuY2Ugd2l0aCBObyBUcmlnZ2VyCisJICovCisKKwljb21tYW5kLnBtdTJfcGFyYW1zLmRfcGFyYW0uY2ZnX21vZGUgPSBDTV9JTU1FRElBVEU7CisJY29tbWFuZC5wbXUyX3BhcmFtcy5kX3BhcmFtLmNmZ19kZWxheSA9IDA7CisJY29tbWFuZC5wbXUyX3BhcmFtcy5kX3BhcmFtLnJzdmQgPSAwOworCisJLyogY29uc3RydWN0IHRoZSBjb21tYW5kIHRvIHNlbmQgU0VUX0NGRyB0byBwYXJ0aWN1bGFyIFBNVSAqLworCWNvbW1hbmQucG11Ml9wYXJhbXMuZF9wYXJhbS5jbWQgPSBTRVRfQ0ZHX0NNRDsKKwljb21tYW5kLnBtdTJfcGFyYW1zLmRfcGFyYW0uaW9jID0gMDsKKwljb21tYW5kLnBtdTJfcGFyYW1zLmRfcGFyYW0ubW9kZV9pZCA9IDA7CisJY29tbWFuZC5wbXUyX3BhcmFtcy5kX3BhcmFtLnN5c19zdGF0ZSA9IFNZU19TVEFURV9TMEkwOworCisJLyogd3JpdGUgdGhlIHZhbHVlIG9mIFBNX0NNRCBpbnRvIHBhcnRpY3VsYXIgUE1VICovCisJcHJfZGVidWcoInBtdSBjb21tYW5kIGJlaW5nIHdyaXR0ZW4gJXhcbiIsCisJCQljb21tYW5kLnBtdV9wbV9zZXRfY2ZnX2NtZF92YWx1ZSk7CisKKwlwbXVfd3JpdGVfY21kKGNvbW1hbmQucG11X3BtX3NldF9jZmdfY21kX3ZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IHBtdV9taW5fbHNzX3BjaV9yZXEodTE2ICppZHMsIHUxNiBwY2lfc3RhdGUpCit7CisJdTE2IGV4aXN0aW5nX3JlcXVlc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpZHNbaV07ICsraSkgeworCQlzdHJ1Y3QgbXJzdF9kZXZpY2UgKm1yc3RfZGV2OworCisJCW1yc3RfZGV2ID0gcGNpX2lkXzJfbXJzdF9kZXYoaWRzW2ldKTsKKwkJaWYgKHVubGlrZWx5KCFtcnN0X2RldikpCisJCQljb250aW51ZTsKKworCQlleGlzdGluZ19yZXF1ZXN0ID0gbXJzdF9kZXYtPmxhdGVzdF9yZXF1ZXN0OworCQlpZiAoZXhpc3RpbmdfcmVxdWVzdCA8IHBjaV9zdGF0ZSkKKwkJCXBjaV9zdGF0ZSA9IGV4aXN0aW5nX3JlcXVlc3Q7CisJfQorCXJldHVybiBwY2lfc3RhdGU7Cit9CisKKy8qKgorICogcG11X3BjaV9zZXRfcG93ZXJfc3RhdGUgLSBDYWxsYmFjayBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFsbCB0aGUgUENJIGRldmljZXMKKyAqCQkJZm9yIGEgcGxhdGZvcm0gIHNwZWNpZmljIGRldmljZSBwb3dlciBvbi9zaHV0ZG93bi4KKyAqLworCitpbnQgcG11X3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBjaV9wb3dlcl90IHBjaV9zdGF0ZSkKK3sKKwl1MzIgb2xkX3NzcywgbmV3X3NzczsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgbXJzdF9kZXZpY2UgKm1yc3RfZGV2OworCisJcG11X3NldF9wb3dlcl9zdGF0ZV9lbnRyeSsrOworCisJQlVHX09OKHBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0lOVEVMKTsKKwlCVUdfT04ocGNpX3N0YXRlIDwgUENJX0QwIHx8IHBjaV9zdGF0ZSA+IFBDSV9EM2NvbGQpOworCisJbXJzdF9kZXYgPSBwY2lfaWRfMl9tcnN0X2RldihwZGV2LT5kZXZpY2UpOworCWlmICh1bmxpa2VseSghbXJzdF9kZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1yc3RfZGV2LT5wY2lfc3RhdGVfY291bnRzW3BjaV9zdGF0ZV0rKzsJLyogY291bnQgaW52b2NhdGlvbnMgKi8KKworCS8qIFBNVSBkcml2ZXIgY2FsbHMgc2VsZiBhcyBwYXJ0IG9mIFBDSSBpbml0aWFsaXphdGlvbiwgaWdub3JlICovCisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWX0lEX01SU1RfUE1VKQorCQlyZXR1cm4gMDsKKworCUJVR19PTighcG11X3JlZyk7IC8qIFNXIGJ1ZyBpZiBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemVkICovCisKKwlzcGluX2xvY2soJm1yc3RfcG11X3Bvd2VyX3N0YXRlX2xvY2spOworCisJaWYgKHBkZXYtPmQzX2RlbGF5KSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImQzX2RlbGF5ICVkLCBzaG91bGQgYmUgMFxuIiwKKwkJCXBkZXYtPmQzX2RlbGF5KTsKKwkJcGRldi0+ZDNfZGVsYXkgPSAwOworCX0KKwkvKgorCSAqIElmIExpbmNyb2Z0IGdyYXBoaWNzLCBzaW1wbHkgcmVtZW1iZXIgc3RhdGUKKwkgKi8KKwlpZiAoKHBkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZCisJCSYmICEoKHBkZXYtPmNsYXNzICYgUENJX1NVQl9DTEFTU19NQVNLKSA+PiA4KSkgeworCQlpZiAocGNpX3N0YXRlID09IFBDSV9EMCkKKwkJCWdyYXBoaWNzX2lzX29mZiA9IDA7CisJCWVsc2UKKwkJCWdyYXBoaWNzX2lzX29mZiA9IDE7CisJCWdvdG8gcmV0OworCX0KKworCWlmICghbXJzdF9kZXYtPmxzcykKKwkJZ290byByZXQ7CS8qIGRldmljZSB3aXRoIG5vIExTUyAqLworCisJaWYgKG1yc3RfZGV2LT5sYXRlc3RfcmVxdWVzdCA9PSBwY2lfc3RhdGUpCisJCWdvdG8gcmV0OwkvKiBubyBjaGFuZ2UgKi8KKworCW1yc3RfZGV2LT5sYXRlc3RfcmVxdWVzdCA9IHBjaV9zdGF0ZTsJLyogcmVjb3JkIGxhdGVzdCByZXF1ZXN0ICovCisKKwkvKgorCSAqIExTUzkgYW5kIExTUzEwIGNvbnRhaW4gbXVsdGlwbGUgUENJIGRldmljZXMuCisJICogVXNlIHRoZSBsb3dlc3QgbnVtYmVyZWQgKGhpZ2hlc3QgcG93ZXIpIHN0YXRlIGluIHRoZSBMU1MKKwkgKi8KKwlpZiAobXJzdF9kZXYtPmxzcyA9PSA5KQorCQlwY2lfc3RhdGUgPSBwbXVfbWluX2xzc19wY2lfcmVxKG1yc3RfbHNzOV9wY2lfaWRzLCBwY2lfc3RhdGUpOworCWVsc2UgaWYgKG1yc3RfZGV2LT5sc3MgPT0gMTApCisJCXBjaV9zdGF0ZSA9IHBtdV9taW5fbHNzX3BjaV9yZXEobXJzdF9sc3MxMF9wY2lfaWRzLCBwY2lfc3RhdGUpOworCisJc3RhdHVzID0gcG11X3dhaXRfcmVhZHkoKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHJldDsKKworCW9sZF9zc3MgPSBwbXVfcmVhZF9zc3MoKTsKKwluZXdfc3NzID0gb2xkX3NzcyAmIH5TU01TSygzLCBtcnN0X2Rldi0+bHNzKTsKKwluZXdfc3NzIHw9IFNTTVNLKHBjaV8yX21yc3Rfc3RhdGUobXJzdF9kZXYtPmxzcywgcGNpX3N0YXRlKSwKKwkJCW1yc3RfZGV2LT5sc3MpOworCisJaWYgKG5ld19zc3MgPT0gb2xkX3NzcykKKwkJZ290byByZXQ7CS8qIG5vdGhpbmcgdG8gZG8gKi8KKworCXBtdV9zZXRfcG93ZXJfc3RhdGVfc2VuZF9jbWQrKzsKKworCXN0YXR1cyA9IHBtdV9pc3N1ZV9jb21tYW5kKG5ld19zc3MpOworCisJaWYgKHVubGlrZWx5KHN0YXR1cyAhPSAwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gSXNzdWUgYSBQTSBjb21tYW5kXG4iKTsKKwkJZ290byByZXQ7CisJfQorCisJaWYgKHBtdV93YWl0X2RvbmUoKSkKKwkJZ290byByZXQ7CisKKwlsc3NfczBpM19lbmFibGVkID0KKwkoKHBtdV9yZWFkX3NzcygpICYgUzBJM19TU1NfVEFSR0VUKSA9PSBTMEkzX1NTU19UQVJHRVQpOworcmV0OgorCXNwaW5fdW5sb2NrKCZtcnN0X3BtdV9wb3dlcl9zdGF0ZV9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgY2hhciAqZDBpeF9uYW1lc1tdID0geyJEMCIsICJEMGkxIiwgIkQwaTIiLCAiRDBpMyJ9OworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmQwaXhfbmFtZShpbnQgc3RhdGUpCit7CisJcmV0dXJuIGQwaXhfbmFtZXNbKGludCkgc3RhdGVdOworfQorCitzdGF0aWMgaW50IGRlYnVnX21yc3RfcG11X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiBjdXJfcG1zc3M7CisJaW50IGxzczsKKworCXNlcV9wcmludGYocywgIjB4JTA4WCBEMEkxX0FDR19TU1NfVEFSR0VUXG4iLCBEMEkxX0FDR19TU1NfVEFSR0VUKTsKKworCWN1cl9wbXNzcyA9IHBtdV9yZWFkX3NzcygpOworCisJc2VxX3ByaW50ZihzLCAiMHglMDhYIFMwSTNfU1NTX1RBUkdFVFxuIiwgUzBJM19TU1NfVEFSR0VUKTsKKworCXNlcV9wcmludGYocywgIjB4JTA4WCBDdXJyZW50IFNTUyAiLCBjdXJfcG1zc3MpOworCXNlcV9wcmludGYocywgbHNzX3MwaTNfZW5hYmxlZCA/ICJcbiIgOiAiW0JMT0NLUyBzMGkzXVxuIik7CisKKwlpZiAoY3B1bWFza19lcXVhbChjcHVfb25saW5lX21hc2ssIGNwdW1hc2tfb2YoMCkpKQorCQlzZXFfcHJpbnRmKHMsICJjcHUwIGlzIG9ubHkgY3B1IG9ubGluZVxuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKHMsICJjcHUwIGlzIE5PVCBvbmx5IGNwdSBvbmxpbmUgW0JMT0NLUyBTMGkzXVxuIik7CisKKwlzZXFfcHJpbnRmKHMsICJHRlg6ICVzXG4iLCBncmFwaGljc19pc19vZmYgPyAiIiA6ICJbQkxPQ0tTIHMwaTNdIik7CisKKworCWZvcl9lYWNoX3BjaV9kZXYocGRldikgeworCQlpbnQgcG9zOworCQl1MTYgcG1jc3I7CisJCXN0cnVjdCBtcnN0X2RldmljZSAqbXJzdF9kZXY7CisJCWludCBpOworCisJCW1yc3RfZGV2ID0gcGNpX2lkXzJfbXJzdF9kZXYocGRldi0+ZGV2aWNlKTsKKworCQlzZXFfcHJpbnRmKHMsICIlcyAlMDR4LyUwNFggJS0xNi4xNnMgIiwKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLAorCQkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsCisJCQlkZXZfZHJpdmVyX3N0cmluZygmcGRldi0+ZGV2KSk7CisKKwkJaWYgKHVubGlrZWx5ICghbXJzdF9kZXYpKSB7CisJCQlzZXFfcHJpbnRmKHMsICIgVU5LTk9XTlxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtcnN0X2Rldi0+bHNzKQorCQkJc2VxX3ByaW50ZihzLCAiTFNTICUyZCAlLTRzICIsIG1yc3RfZGV2LT5sc3MsCisJCQkJZDBpeF9uYW1lKCgoY3VyX3Btc3NzID4+CisJCQkJCShtcnN0X2Rldi0+bHNzICogMikpICYgMHgzKSkpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAiKTsKKworCQkvKiBQQ0kgUE0gY29uZmlnIHNwYWNlIHNldHRpbmcgKi8KKwkJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwkJaWYgKHBvcyAhPSAwKSB7CisJCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwkJc2VxX3ByaW50ZihzLCAiUENJLSUtNHMiLAorCQkJcGNpX3Bvd2VyX25hbWUocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKSk7CisJCX0gZWxzZSB7CisJCQlzZXFfcHJpbnRmKHMsICIgICAgICAgICIpOworCQl9CisKKwkJc2VxX3ByaW50ZihzLCAiICVzICIsIHBjaV9wb3dlcl9uYW1lKG1yc3RfZGV2LT5sYXRlc3RfcmVxdWVzdCkpOworCQlmb3IgKGkgPSAwOyBpIDw9IFBDSV9EM2NvbGQ7ICsraSkKKwkJCXNlcV9wcmludGYocywgIiVkICIsIG1yc3RfZGV2LT5wY2lfc3RhdGVfY291bnRzW2ldKTsKKworCQlpZiAobXJzdF9kZXYtPmxzcykgeworCQkJdW5zaWduZWQgaW50IGxzc21hc2s7CisKKwkJCWxzc21hc2sgPSBTU01TSyhEMGkzLCBtcnN0X2Rldi0+bHNzKTsKKworCQkJaWYgKChsc3NtYXNrICYgUzBJM19TU1NfVEFSR0VUKSAmJgorCQkJCSgobHNzbWFzayAmIGN1cl9wbXNzcykgIT0KKwkJCQkJKGxzc21hc2sgJiBTMEkzX1NTU19UQVJHRVQpKSkKKwkJCQkJCXNlcV9wcmludGYocyAsICJbQkxPQ0tTIHMwaTNdIik7CisJCX0KKworCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCX0KKwlzZXFfcHJpbnRmKHMsICJXYWtlIENvdW50ZXJzOlxuIik7CisJZm9yIChsc3MgPSAwOyBsc3MgPCBNUlNUX05VTV9MU1M7ICsrbHNzKQorCQlzZXFfcHJpbnRmKHMsICJMU1MlZCAlZFxuIiwgbHNzLCB3YWtlX2NvdW50ZXJzW2xzc10pOworCisJc2VxX3ByaW50ZihzLCAiSW50ZXJydXB0IENvdW50ZXJzOlxuIik7CisJc2VxX3ByaW50ZihzLAorCQkiSU5UX1NQVVJJT1VTIFx0JTh1XG4iICJJTlRfQ01EX0RPTkUgXHQlOHVcbiIKKwkJIklOVF9DTURfRVJSICBcdCU4dVxuIiAiSU5UX1dBS0VfUlggIFx0JTh1XG4iCisJCSJJTlRfU1NfRVJST1IgXHQlOHVcbiIgIklOVF9TMElYX01JU1NcdCU4dVxuIgorCQkiSU5UX05PX0FDS0M2IFx0JTh1XG4iICJJTlRfSU5WQUxJRCAgXHQlOHVcbiIsCisJCXBtdV9pcnFfc3RhdHNbSU5UX1NQVVJJT1VTXSwgcG11X2lycV9zdGF0c1tJTlRfQ01EX0RPTkVdLAorCQlwbXVfaXJxX3N0YXRzW0lOVF9DTURfRVJSXSwgcG11X2lycV9zdGF0c1tJTlRfV0FLRV9SWF0sCisJCXBtdV9pcnFfc3RhdHNbSU5UX1NTX0VSUk9SXSwgcG11X2lycV9zdGF0c1tJTlRfUzBJWF9NSVNTXSwKKwkJcG11X2lycV9zdGF0c1tJTlRfTk9fQUNLQzZdLCBwbXVfaXJxX3N0YXRzW0lOVF9JTlZBTElEXSk7CisKKwlzZXFfcHJpbnRmKHMsICJtcnN0X3BtdV93YWl0X3JlYWR5X2NhbGxzICAgICAgICAgICU4ZFxuIiwKKwkJCXBtdV93YWl0X3JlYWR5X2NhbGxzKTsKKwlzZXFfcHJpbnRmKHMsICJtcnN0X3BtdV93YWl0X3JlYWR5X3VkZWxheXMgICAgICAgICU4ZFxuIiwKKwkJCXBtdV93YWl0X3JlYWR5X3VkZWxheXMpOworCXNlcV9wcmludGYocywgIm1yc3RfcG11X3dhaXRfcmVhZHlfdWRlbGF5c19tYXggICAgJThkXG4iLAorCQkJcG11X3dhaXRfcmVhZHlfdWRlbGF5c19tYXgpOworCXNlcV9wcmludGYocywgIm1yc3RfcG11X3dhaXRfZG9uZV9jYWxscyAgICAgICAgICAgJThkXG4iLAorCQkJcG11X3dhaXRfZG9uZV9jYWxscyk7CisJc2VxX3ByaW50ZihzLCAibXJzdF9wbXVfd2FpdF9kb25lX3VkZWxheXMgICAgICAgICAlOGRcbiIsCisJCQlwbXVfd2FpdF9kb25lX3VkZWxheXMpOworCXNlcV9wcmludGYocywgIm1yc3RfcG11X3dhaXRfZG9uZV91ZGVsYXlzX21heCAgICAgJThkXG4iLAorCQkJcG11X3dhaXRfZG9uZV91ZGVsYXlzX21heCk7CisJc2VxX3ByaW50ZihzLCAibXJzdF9wbXVfc2V0X3Bvd2VyX3N0YXRlX2VudHJ5ICAgICAlOGRcbiIsCisJCQlwbXVfc2V0X3Bvd2VyX3N0YXRlX2VudHJ5KTsKKwlzZXFfcHJpbnRmKHMsICJtcnN0X3BtdV9zZXRfcG93ZXJfc3RhdGVfc2VuZF9jbWQgICU4ZFxuIiwKKwkJCXBtdV9zZXRfcG93ZXJfc3RhdGVfc2VuZF9jbWQpOworCXNlcV9wcmludGYocywgIlNDVSBidXN5OiAlZFxuIiwgcG11X3JlYWRfYnVzeV9zdGF0dXMoKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWJ1Z19tcnN0X3BtdV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkZWJ1Z19tcnN0X3BtdV9zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2aWNlc19zdGF0ZV9vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGRlYnVnX21yc3RfcG11X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisjZW5kaWYJLyogREVCVUdfRlMgKi8KKworLyoKKyAqIFZhbGlkYXRlIFNDVSBQQ0kgc2hpbSBQQ0kgdmVuZG9yIGNhcGFiaWxpdHkgYnl0ZQorICogYWdhaW5zdCBMU1MgaGFyZC1jb2RlZCBpbiBtcnN0X2RldnNbXSBhYm92ZS4KKyAqIERFQlVHIG9ubHkuCisgKi8KK3N0YXRpYyB2b2lkIHBtdV9zY3VfZmlybXdhcmVfZGVidWcodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJc3RydWN0IG1yc3RfZGV2aWNlICptcnN0X2RldjsKKwkJdTggcGNpX2NvbmZpZ19sc3M7CisJCWludCBwb3M7CisKKwkJbXJzdF9kZXYgPSBwY2lfaWRfMl9tcnN0X2RldihwZGV2LT5kZXZpY2UpOworCQlpZiAodW5saWtlbHkoIW1yc3RfZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyAicG11OiBVbmtub3duICIKKwkJCQkiUENJIGRldmljZSAweCUwNFhcbiIsIHBkZXYtPmRldmljZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtcnN0X2Rldi0+bHNzID09IDApCisJCQljb250aW51ZTsJIC8qIG5vIExTUyBpbiBvdXIgdGFibGUgKi8KKworCQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfVk5EUik7CisJCWlmICghcG9zICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgInBtdTogMHglMDRYICIKKwkJCQkibWlzc2luZyBQQ0kgVmVuZG9yIENhcGFiaWxpdHlcbiIsCisJCQkJcGRldi0+ZGV2aWNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIHBvcyArIDQsICZwY2lfY29uZmlnX2xzcyk7CisJCWlmICghKHBjaV9jb25maWdfbHNzICYgUENJX1ZFTkRPUl9DQVBfTE9HX1NTX01BU0spKSB7CisJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHICJwbXU6IDB4JTA0WCAiCisJCQkJImludmFsaWQgUENJIFZlbmRvciBDYXBhYmlsaXR5IDB4JXggIgorCQkJCSIgZXhwZWN0ZWQgTFNTIDB4JVhcbiIsCisJCQkJcGRldi0+ZGV2aWNlLCBwY2lfY29uZmlnX2xzcywgbXJzdF9kZXYtPmxzcyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwY2lfY29uZmlnX2xzcyAmPSBQQ0lfVkVORE9SX0NBUF9MT0dfSURfTUFTSzsKKworCQlpZiAobXJzdF9kZXYtPmxzcyA9PSBwY2lfY29uZmlnX2xzcykKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgInBtdTogMHglMDRYIExTUyA9ICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCXBkZXYtPmRldmljZSwgcGNpX2NvbmZpZ19sc3MsIG1yc3RfZGV2LT5sc3MpOworCX0KK30KKworLyoqCisgKiBwbXVfcHJvYmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgcG11X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXJzdF9wbXVfcmVnICpwbXU7CisKKwkvKiBJbml0IHRoZSBkZXZpY2UgKi8KKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBFbmFibGUgUENJIGRldmljZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBNUlNUX1BNVV9EUlZfTkFNRSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gb3V0X2VycjE7CisJfQorCisJLyogTWFwIHRoZSBtZW1vcnkgb2YgUE1VIHJlZyBiYXNlICovCisJcG11ID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghcG11KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBtYXAgdGhlIFBNVSBhZGRyZXNzIHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyMjsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwkvKiAvc3lzL2tlcm5lbC9kZWJ1Zy9tcnN0X3BtdSAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtcnN0X3BtdSIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCU5VTEwsIE5VTEwsICZkZXZpY2VzX3N0YXRlX29wZXJhdGlvbnMpOworI2VuZGlmCisJcG11X3JlZyA9IHBtdTsJLyogc3VjY2VzcyAqLworCisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcG11X2lycSwgMCwgTVJTVF9QTVVfRFJWX05BTUUsIE5VTEwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGlzciBoYXMgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0X2VycjM7CisJfQorCisJcG11X3NjdV9maXJtd2FyZV9kZWJ1ZygpOworCisJcG11X3dyaXRlX3drYyhTMEkzX1dBS0VfU09VUkNFUyk7CS8qIEVuYWJsZSBTMGkzIHdha2V1cCBzb3VyY2VzICovCisKKwlwbXVfd2FpdF9yZWFkeSgpOworCisJcG11X3dyaXRlX3NzYyhEMEkxX0FDR19TU1NfVEFSR0VUKTsJLyogRW5hYmxlIEF1dG8tQ2xvY2tfR2F0aW5nICovCisJcG11X3dyaXRlX2NtZCgweDIwMSk7CisKKwlzcGluX2xvY2tfaW5pdCgmbXJzdF9wbXVfcG93ZXJfc3RhdGVfbG9jayk7CisKKwkvKiBFbmFibGUgdGhlIGhhcmR3YXJlIGludGVycnVwdCAqLworCXBtdV9pcnFfZW5hYmxlKCk7CisJcmV0dXJuIDA7CisKK291dF9lcnIzOgorCWZyZWVfaXJxKHBkZXYtPmlycSwgTlVMTCk7CisJcGNpX2lvdW5tYXAocGRldiwgcG11X3JlZyk7CisJcG11X3JlZyA9IE5VTEw7CitvdXRfZXJyMjoKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CitvdXRfZXJyMToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHBtdV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJZGV2X2VycigmcGRldi0+ZGV2LCAiTWlkIFBNIHBtdV9yZW1vdmUgY2FsbGVkXG4iKTsKKworCS8qIEZyZWVpbmcgdXAgdGhlIGlycSAqLworCWZyZWVfaXJxKHBkZXYtPmlycSwgTlVMTCk7CisKKwlwY2lfaW91bm1hcChwZGV2LCBwbXVfcmVnKTsKKwlwbXVfcmVnID0gTlVMTDsKKworCS8qIGRpc2FibGUgdGhlIGN1cnJlbnQgUENJIGRldmljZSAqLworCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwbXVfcGNpX2lkcykgPSB7CisJeyBQQ0lfVkRFVklDRShJTlRFTCwgUENJX0RFVl9JRF9NUlNUX1BNVSksIDAgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwbXVfcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CisJLm5hbWUgPSBNUlNUX1BNVV9EUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBwbXVfcGNpX2lkcywKKwkucHJvYmUgPSBwbXVfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBtdV9yZW1vdmUpLAorfTsKKworLyoqCisgKiBwbXVfcGNpX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIFBNVSBkcml2ZXIgYXMgUENJIGRldmljZQorICovCitzdGF0aWMgaW50IF9faW5pdCBwbXVfcGNpX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Cit9CisKKy8qIFJlZ2lzdGVyIGFuZCBwcm9iZSB2aWEgZnNfaW5pdGNhbGwoKSB0byBwcmVjZWVkIGRldmljZV9pbml0Y2FsbCgpICovCitmc19pbml0Y2FsbChwbXVfcGNpX3JlZ2lzdGVyKTsKKworc3RhdGljIHZvaWQgX19leGl0IG1pZF9wY2lfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKK30KKworc3RhdGljIGludCBpYV9tYWpvcjsKK3N0YXRpYyBpbnQgaWFfbWlub3I7CisKK3N0YXRpYyBpbnQgcG11X3NmaV9wYXJzZV9vZW0oc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKworCXNiID0gKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICopdGFibGU7CisJaWFfbWFqb3IgPSAoc2ItPnBlbnRyeVsxXSA+PiAwKSAmIDB4RkZGRjsKKwlpYV9taW5vciA9IChzYi0+cGVudHJ5WzFdID4+IDE2KSAmIDB4RkZGRjsKKwlwcmludGsoS0VSTl9JTkZPICJtcnN0X3BtdTogSUEgRlcgdmVyc2lvbiB2JXguJXhcbiIsCisJCWlhX21ham9yLCBpYV9taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2N1X2Z3X2NoZWNrKHZvaWQpCit7CisJaW50IHJldDsKKwl1MzIgZndfdmVyc2lvbjsKKworCWlmICghcG11X3JlZykKKwkJcmV0dXJuIDA7CS8qIHRoaXMgZHJpdmVyIGRpZG4ndCBwcm9iZS1vdXQgKi8KKworCXNmaV90YWJsZV9wYXJzZSgiT0VNQiIsIE5VTEwsIE5VTEwsIHBtdV9zZmlfcGFyc2Vfb2VtKTsKKworCWlmIChpYV9tYWpvciA8IDB4NjAwNSB8fCBpYV9taW5vciA8IDB4MTUyNSkgeworCQlXQVJOKDEsICJtcnN0X3BtdTogSUEgRlcgdmVyc2lvbiB0b28gb2xkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IGludGVsX3NjdV9pcGNfY29tbWFuZChJUENNU0dfRldfUkVWSVNJT04sIDAsIE5VTEwsIDAsCisJCQkJCSZmd192ZXJzaW9uLCAxKTsKKworCWlmIChyZXQpIHsKKwkJV0FSTigxLCAibXJzdF9wbXU6IElQQyBGVyB2ZXJzaW9uPyAlZFxuIiwgcmV0KTsKKwl9IGVsc2UgeworCQlpbnQgc2N1X21ham9yID0gKGZ3X3ZlcnNpb24gPj4gOCkgJiAweEZGOworCQlpbnQgc2N1X21pbm9yID0gKGZ3X3ZlcnNpb24gPj4gMCkgJiAweEZGOworCisJCXByaW50ayhLRVJOX0lORk8gIm1yc3RfcG11OiBmaXJtd2FyZSB2JXhcbiIsIGZ3X3ZlcnNpb24pOworCisJCWlmICgoc2N1X21ham9yID49IDB4QzApICYmIChzY3VfbWlub3IgPj0gMHg0OSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm1yc3RfcG11OiBlbmFibGluZyBTMGkzXG4iKTsKKwkJCW1yc3RfcG11X3MwaTNfZW5hYmxlID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCVdBUk4oMSwgIm1yc3RfcG11OiBTMGkzIGRpc2FibGVkLCBvbGQgZmlybXdhcmUgJVguJVgiLAorCQkJCQlzY3VfbWFqb3IsIHNjdV9taW5vcik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKHNjdV9md19jaGVjayk7Cittb2R1bGVfZXhpdChtaWRfcGNpX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9wbXUuaCBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiZmU2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvcG11LmgKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBtcnN0L3BtdS5oIC0gcHJpdmF0ZSBkZWZpbml0aW9ucyBmb3IgTVJTVCBQb3dlciBNYW5hZ2VtZW50IFVuaXQgbXJzdC9wbXUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaWZuZGVmIF9NUlNUX1BNVV9IXworI2RlZmluZSBfTVJTVF9QTVVfSF8KKworI2RlZmluZSBQQ0lfREVWX0lEX01SU1RfUE1VCQkweDA4MTAKKyNkZWZpbmUgTVJTVF9QTVVfRFJWX05BTUUJCSJtcnN0X3BtdSIKKyNkZWZpbmUJUENJX1NVQl9DTEFTU19NQVNLCQkweEZGMDAKKworI2RlZmluZQlQQ0lfVkVORE9SX0NBUF9MT0dfSURfTUFTSwkweDdGCisjZGVmaW5lIFBDSV9WRU5ET1JfQ0FQX0xPR19TU19NQVNLCTB4ODAKKworI2RlZmluZSBTVUJfU1lTX0FMTF9EMEkxCTB4MDExNTU1NTUKKyNkZWZpbmUgUzBJM19XQUtFX1NPVVJDRVMJMHgwMDAwMUZGRgorCisjZGVmaW5lIFBNX1MwSTNfQ09NTUFORAkJCQkJXAorCSgoMCA8PCAzMSkgfAkvKiBSZXNlcnZlZCAqLwkJCVwKKwkoMCA8PCAzMCkgfAkvKiBDb3JlIG11c3QgYmUgaWRsZSAqLwkJXAorCSgweGMyIDw8IDIyKSB8CS8qIEFDSyBDNiB0cmlnZ2VyICovCQlcCisJKDMgPDwgMTkpIHwJLyogVHJpZ2dlciBvbiBETUkgbWVzc2FnZSAqLwlcCisJKDMgPDwgMTYpIHwJLyogRW50ZXIgUzBpMyAqLwkJXAorCSgwIDw8IDEzKSB8CS8qIE51bWVyaWMgbW9kZSBJRCAoc3cpICovCVwKKwkoMyA8PCA5KSB8CS8qIFRyaWdnZXIgbW9kZSAqLwkJXAorCSgwIDw8IDgpIHwJLyogRG8gbm90IGludGVycnVwdCAqLwkJXAorCSgxIDw8IDApKQkvKiBTZXQgY29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lCUxTU19ETUkJCTAKKyNkZWZpbmUJTFNTX1NEX0hDMAkxCisjZGVmaW5lCUxTU19TRF9IQzEJMgorI2RlZmluZQlMU1NfTkFORAkzCisjZGVmaW5lCUxTU19JTUFHSU5HCTQKKyNkZWZpbmUJTFNTX1NFQ1VSSVRZCTUKKyNkZWZpbmUJTFNTX0RJU1BMQVkJNgorI2RlZmluZQlMU1NfVVNCX0hDCTcKKyNkZWZpbmUJTFNTX1VTQl9PVEcJOAorI2RlZmluZQlMU1NfQVVESU8JOQorI2RlZmluZQlMU1NfQVVESU9fTFBFCTkKKyNkZWZpbmUJTFNTX0FVRElPX1NTUAk5CisjZGVmaW5lCUxTU19JMkMwCTEwCisjZGVmaW5lCUxTU19JMkMxCTEwCisjZGVmaW5lCUxTU19JMkMyCTEwCisjZGVmaW5lCUxTU19LQkQJCTEwCisjZGVmaW5lCUxTU19TUEkwCTEwCisjZGVmaW5lCUxTU19TUEkxCTEwCisjZGVmaW5lCUxTU19TUEkyCTEwCisjZGVmaW5lCUxTU19HUElPCTEwCisjZGVmaW5lCUxTU19TUkFNCTExCS8qIHVzZWQgYnkgU0NVLCBkbyBub3QgdG91Y2ggKi8KKyNkZWZpbmUJTFNTX1NEX0hDMgkxMgorLyogTFNTIGhhcmR3YXJlIGJpdHMgMTUsMTQsMTMgYXJlIGhhcmR3aXJlZCB0byAwLCB0aHVzIHVudXNhYmxlICovCisjZGVmaW5lIE1SU1RfTlVNX0xTUwkxMworCisjZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisKKyNkZWZpbmUJU1NNU0sobWFzaywgbHNzKSAoKG1hc2spIDw8ICgobHNzKSAqIDIpKQorI2RlZmluZQlEMAkwCisjZGVmaW5lCUQwaTEJMQorI2RlZmluZQlEMGkyCTIKKyNkZWZpbmUJRDBpMwkzCisKKyNkZWZpbmUgUzBJM19TU1NfVEFSR0VUCSgJCVwKKwlTU01TSyhEMGkxLCBMU1NfRE1JKSB8CQlcCisJU1NNU0soRDBpMywgTFNTX1NEX0hDMCkgfAlcCisJU1NNU0soRDBpMywgTFNTX1NEX0hDMSkgfAlcCisJU1NNU0soRDBpMywgTFNTX05BTkQpIHwJCVwKKwlTU01TSyhEMGkzLCBMU1NfU0RfSEMyKSB8CVwKKwlTU01TSyhEMGkzLCBMU1NfSU1BR0lORykgfAlcCisJU1NNU0soRDBpMywgTFNTX1NFQ1VSSVRZKSB8CVwKKwlTU01TSyhEMGkzLCBMU1NfRElTUExBWSkgfAlcCisJU1NNU0soRDBpMywgTFNTX1VTQl9IQykgfAlcCisJU1NNU0soRDBpMywgTFNTX1VTQl9PVEcpIHwJXAorCVNTTVNLKEQwaTMsIExTU19BVURJTykgfAlcCisJU1NNU0soRDBpMSwgTFNTX0kyQzApKQorCisvKgorICogRDBpMSBvbiBMYW5nd2VsbCBpcyBBdXRvbm9tb3VzIENsb2NrIEdhdGluZyAoQUNHKS4KKyAqIEVuYWJsZSBBQ0cgb24gZXZlcnkgTFNTIGV4Y2VwdCBjYW1lcmEgYW5kIGF1ZGlvCisgKi8KKyNkZWZpbmUgRDBJMV9BQ0dfU1NTX1RBUkdFVAkgXAorCShTVUJfU1lTX0FMTF9EMEkxICYgflNTTVNLKEQwaTEsIExTU19JTUFHSU5HKSAmIH5TU01TSyhEMGkxLCBMU1NfQVVESU8pKQorCitlbnVtIGNtX21vZGUgeworCUNNX05PUCwJCQkvKiBpZ25vcmUgdGhlIGNvbmZpZyBtb2RlIHZhbHVlICovCisJQ01fSU1NRURJQVRFLAorCUNNX0RFTEFZLAorCUNNX1RSSUdHRVIsCisJQ01fSU5WQUxJRAorfTsKKworZW51bSBzeXNfc3RhdGUgeworCVNZU19TVEFURV9TMEkwLAorCVNZU19TVEFURV9TMEkxLAorCVNZU19TVEFURV9TMEkyLAorCVNZU19TVEFURV9TMEkzLAorCVNZU19TVEFURV9TMywKKwlTWVNfU1RBVEVfUzUKK307CisKKyNkZWZpbmUgU0VUX0NGR19DTUQJMQorCitlbnVtIGludF9zdGF0dXMgeworCUlOVF9TUFVSSU9VUyA9IDAsCisJSU5UX0NNRF9ET05FID0gMSwKKwlJTlRfQ01EX0VSUiA9IDIsCisJSU5UX1dBS0VfUlggPSAzLAorCUlOVF9TU19FUlJPUiA9IDQsCisJSU5UX1MwSVhfTUlTUyA9IDUsCisJSU5UX05PX0FDS0M2ID0gNiwKKwlJTlRfSU5WQUxJRCA9IDcsCit9OworCisvKiBQTVUgcmVnaXN0ZXIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG1yc3RfcG11X3JlZyB7CisJdTMyIHBtX3N0czsJCS8qIDB4MDAgKi8KKwl1MzIgcG1fY21kOwkJLyogMHgwNCAqLworCXUzMiBwbV9pY3M7CQkvKiAweDA4ICovCisJdTMyIF9yZXN2MTsJCS8qIDB4MEMgKi8KKwl1MzIgcG1fd2tjWzJdOwkJLyogMHgxMCAqLworCXUzMiBwbV93a3NbMl07CQkvKiAweDE4ICovCisJdTMyIHBtX3NzY1s0XTsJCS8qIDB4MjAgKi8KKwl1MzIgcG1fc3NzWzRdOwkJLyogMHgzMCAqLworCXUzMiBwbV93c3NjWzRdOwkJLyogMHg0MCAqLworCXUzMiBwbV9jM2M0OwkJLyogMHg1MCAqLworCXUzMiBwbV9jNWM2OwkJLyogMHg1NCAqLworCXUzMiBwbV9tc2lfZGlzYWJsZTsJLyogMHg1OCAqLworfSAqcG11X3JlZzsKKworc3RhdGljIGlubGluZSB1MzIgcG11X3JlYWRfc3RzKHZvaWQpIHsgcmV0dXJuIHJlYWRsKCZwbXVfcmVnLT5wbV9zdHMpOyB9CitzdGF0aWMgaW5saW5lIHUzMiBwbXVfcmVhZF9pY3Modm9pZCkgeyByZXR1cm4gcmVhZGwoJnBtdV9yZWctPnBtX2ljcyk7IH0KK3N0YXRpYyBpbmxpbmUgdTMyIHBtdV9yZWFkX3drcyh2b2lkKSB7IHJldHVybiByZWFkbCgmcG11X3JlZy0+cG1fd2tzWzBdKTsgfQorc3RhdGljIGlubGluZSB1MzIgcG11X3JlYWRfc3NzKHZvaWQpIHsgcmV0dXJuIHJlYWRsKCZwbXVfcmVnLT5wbV9zc3NbMF0pOyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfd3JpdGVfY21kKHUzMiBhcmcpIHsgd3JpdGVsKGFyZywgJnBtdV9yZWctPnBtX2NtZCk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfd3JpdGVfaWNzKHUzMiBhcmcpIHsgd3JpdGVsKGFyZywgJnBtdV9yZWctPnBtX2ljcyk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfd3JpdGVfd2tjKHUzMiBhcmcpIHsgd3JpdGVsKGFyZywgJnBtdV9yZWctPnBtX3drY1swXSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfd3JpdGVfc3NjKHUzMiBhcmcpIHsgd3JpdGVsKGFyZywgJnBtdV9yZWctPnBtX3NzY1swXSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbXVfd3JpdGVfd3NzYyh1MzIgYXJnKQorCQkJCQl7IHdyaXRlbChhcmcsICZwbXVfcmVnLT5wbV93c3NjWzBdKTsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG11X21zaV9lbmFibGUodm9pZCkgeyB3cml0ZWwoMCwgJnBtdV9yZWctPnBtX21zaV9kaXNhYmxlKTsgfQorc3RhdGljIGlubGluZSB1MzIgcG11X21zaV9pc19kaXNhYmxlZCh2b2lkKQorCQkJCXsgcmV0dXJuIHJlYWRsKCZwbXVfcmVnLT5wbV9tc2lfZGlzYWJsZSk7IH0KKwordW5pb24gcG11X3BtX2ljcyB7CisJc3RydWN0IHsKKwkJdTMyIGNhdXNlOjg7CisJCXUzMiBlbmFibGU6MTsKKwkJdTMyIHBlbmRpbmc6MTsKKwkJdTMyIHJlc2VydmVkOjIyOworCX0gYml0czsKKwl1MzIgdmFsdWU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcG11X2lycV9lbmFibGUodm9pZCkKK3sKKwl1bmlvbiBwbXVfcG1faWNzIHBtdV9pY3M7CisKKwlwbXVfaWNzLnZhbHVlID0gcG11X3JlYWRfaWNzKCk7CisJcG11X2ljcy5iaXRzLmVuYWJsZSA9IDE7CisJcG11X3dyaXRlX2ljcyhwbXVfaWNzLnZhbHVlKTsKK30KKwordW5pb24gcG11X3BtX3N0YXR1cyB7CisJc3RydWN0IHsKKwkJdTMyIHBtdV9yZXY6ODsKKwkJdTMyIHBtdV9idXN5OjE7CisJCXUzMiBtb2RlX2lkOjQ7CisJCXUzMiBSZXNlcnZlZDoxOTsKKwl9IHBtdV9zdGF0dXNfcGFydHM7CisJdTMyIHBtdV9zdGF0dXNfdmFsdWU7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBwbXVfcmVhZF9idXN5X3N0YXR1cyh2b2lkKQoreworCXVuaW9uIHBtdV9wbV9zdGF0dXMgcmVzdWx0OworCisJcmVzdWx0LnBtdV9zdGF0dXNfdmFsdWUgPSBwbXVfcmVhZF9zdHMoKTsKKworCXJldHVybiByZXN1bHQucG11X3N0YXR1c19wYXJ0cy5wbXVfYnVzeTsKK30KKworLyogcG11IHNldCBjb25maWcgcGFyYW1ldGVycyAqLworc3RydWN0IGNmZ19kZWxheV9wYXJhbV90IHsKKwl1MzIgY21kOjg7CisJdTMyIGlvYzoxOworCXUzMiBjZmdfbW9kZTo0OworCXUzMiBtb2RlX2lkOjM7CisJdTMyIHN5c19zdGF0ZTozOworCXUzMiBjZmdfZGVsYXk6ODsKKwl1MzIgcnN2ZDo1OworfTsKKworc3RydWN0IGNmZ190cmlnX3BhcmFtX3QgeworCXUzMiBjbWQ6ODsKKwl1MzIgaW9jOjE7CisJdTMyIGNmZ19tb2RlOjQ7CisJdTMyIG1vZGVfaWQ6MzsKKwl1MzIgc3lzX3N0YXRlOjM7CisJdTMyIGNmZ190cmlnX3R5cGU6MzsKKwl1MzIgY2ZnX3RyaWdfdmFsOjg7CisJdTMyIGNtYmk6MTsKKwl1MzIgcnN2ZDE6MTsKK307CisKK3VuaW9uIHBtdV9wbV9zZXRfY2ZnX2NtZF90IHsKKwl1bmlvbiB7CisJCXN0cnVjdCBjZmdfZGVsYXlfcGFyYW1fdCBkX3BhcmFtOworCQlzdHJ1Y3QgY2ZnX3RyaWdfcGFyYW1fdCB0X3BhcmFtOworCX0gcG11Ml9wYXJhbXM7CisJdTMyIHBtdV9wbV9zZXRfY2ZnX2NtZF92YWx1ZTsKK307CisKKyNpZmRlZiBGVVRVUkVfUEFUQ0gKK2V4dGVybiBpbnQgbXJzdF9zMGkzX2VudHJ5KHUzMiByZWd2YWwsIHUzMiAqcmVnYWRkcik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbXJzdF9zMGkzX2VudHJ5KHUzMiByZWd2YWwsIHUzMiAqcmVnYWRkcikgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGMuYyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwYy5jCmluZGV4IDhiOTk0MGUuLjdjY2U3MjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwYy5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwYy5jCkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCWlmIChpbmJ1ZiAmJiBpbmxlbikgewogCQkvKiB3cml0ZSBkYXRhIHRvIEVDICovCiAJCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSsrKSB7CisJCQlwcl9kZXZlbCgib2xwYy1lYzogIHNlbmRpbmcgY21kIGFyZyAweCV4XG4iLCBpbmJ1ZltpXSk7CisJCQlvdXRiKGluYnVmW2ldLCAweDY4KTsKIAkJCWlmICh3YWl0X29uX2liZigweDZjLCAwKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAib2xwYy1lYzogIHRpbWVvdXQgd2FpdGluZyBmb3IiCiAJCQkJCQkiIEVDIGFjY2VwdCBkYXRhIVxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9Ci0JCQlwcl9kZXZlbCgib2xwYy1lYzogIHNlbmRpbmcgY21kIGFyZyAweCV4XG4iLCBpbmJ1ZltpXSk7Ci0JCQlvdXRiKGluYnVmW2ldLCAweDY4KTsKIAkJfQogCX0KIAlpZiAob3V0YnVmICYmIG91dGxlbikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92ZHNvLlMgYi9hcmNoL3g4Ni92ZHNvL3Zkc28uUwppbmRleCAxYjk3OWMxLi4wMWY1ZTNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92ZHNvL3Zkc28uUworKysgYi9hcmNoL3g4Ni92ZHNvL3Zkc28uUwpAQCAtOSw2ICs5LDcgQEAKIHZkc29fc3RhcnQ6CiAJLmluY2JpbiAiYXJjaC94ODYvdmRzby92ZHNvLnNvIgogdmRzb19lbmQ6CisJLmFsaWduIFBBR0VfU0laRSAvKiBleHRyYSBkYXRhIGhlcmUgbGVha3MgdG8gdXNlcnNwYWNlLiAqLwogCiAucHJldmlvdXMKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92ZHNvMzIvc3lzZW50ZXIuUyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyL3N5c2VudGVyLlMKaW5kZXggZTI4MDBhZi4uZTM1NGJjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92ZHNvMzIvc3lzZW50ZXIuUworKysgYi9hcmNoL3g4Ni92ZHNvL3Zkc28zMi9zeXNlbnRlci5TCkBAIC00Myw3ICs0Myw3IEBACiAJLnNwYWNlIDcsMHg5MAogCiAJLyogMTQ6IFN5c3RlbSBjYWxsIHJlc3RhcnQgcG9pbnQgaXMgaGVyZSEgKFNZU0VOVEVSX1JFVFVSTi0yKSAqLwotCWptcCAuTGVudGVyX2tlcm5lbAorCWludCAkMHg4MAogCS8qIDE2OiBTeXN0ZW0gY2FsbCBub3JtYWwgcmV0dXJuIHBvaW50IGlzIGhlcmUhICovCiBWRFNPMzJfU1lTRU5URVJfUkVUVVJOOgkvKiBTeW1ib2wgdXNlZCBieSBzeXNlbnRlci5jIHZpYSB2ZHNvMzItc3ltcy5oICovCiAJcG9wICVlYnAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBiOTYwNDI5Li4yZDY5NjE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC05NTEsNiArOTUxLDEwIEBACiAJLnBhcmF2aXJ0X2VuYWJsZWQgPSAxLAogCS5zaGFyZWRfa2VybmVsX3BtZCA9IDAsCiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLmV4dHJhX3VzZXJfNjRiaXRfY3MgPSBGTEFUX1VTRVJfQ1M2NCwKKyNlbmRpZgorCiAJLm5hbWUgPSAiWGVuIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBhMzg3MmY3Li4zZGQ1M2Y5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xOTE4LDYgKzE5MTgsNyBAQAogIyBlbmRpZgogI2Vsc2UKIAljYXNlIFZTWVNDQUxMX0xBU1RfUEFHRSAuLi4gVlNZU0NBTExfRklSU1RfUEFHRToKKwljYXNlIFZWQVJfUEFHRToKICNlbmRpZgogCWNhc2UgRklYX1RFWFRfUE9LRTA6CiAJY2FzZSBGSVhfVEVYVF9QT0tFMToKQEAgLTE5NTgsNyArMTk1OSw4IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qIFJlcGxpY2F0ZSBjaGFuZ2VzIHRvIG1hcCB0aGUgdnN5c2NhbGwgcGFnZSBpbnRvIHRoZSB1c2VyCiAJICAgcGFnZXRhYmxlIHZzeXNjYWxsIG1hcHBpbmcuICovCi0JaWYgKGlkeCA+PSBWU1lTQ0FMTF9MQVNUX1BBR0UgJiYgaWR4IDw9IFZTWVNDQUxMX0ZJUlNUX1BBR0UpIHsKKwlpZiAoKGlkeCA+PSBWU1lTQ0FMTF9MQVNUX1BBR0UgJiYgaWR4IDw9IFZTWVNDQUxMX0ZJUlNUX1BBR0UpIHx8CisJICAgIGlkeCA9PSBWVkFSX1BBR0UpIHsKIAkJdW5zaWduZWQgbG9uZyB2YWRkciA9IF9fZml4X3RvX3ZpcnQoaWR4KTsKIAkJc2V0X3B0ZV92YWRkcl9wdWQobGV2ZWwzX3VzZXJfdnN5c2NhbGwsIHZhZGRyLCBwdGUpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggMDk2ODhlYi4uNDZkNmQyMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CkBAIC00NDUsNyArNDQ2LDcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2sgPSAxOwogI2VuZGlmCi0JcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKKwlkaXNhYmxlX2NwdWlkbGUoKTsKIAlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9IQUxUOwogCiAJZmlkZGxlX3Zkc28oKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCmluZGV4IDUxNThjNTAuLjE2M2I0NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmMKKysrIGIvYXJjaC94ODYveGVuL3RpbWUuYwpAQCAtMTY4LDkgKzE2OCwxMCBAQAogICAgICAgICBzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjOwogCWN5Y2xlX3QgcmV0OwogCi0Jc3JjID0gJmdldF9jcHVfdmFyKHhlbl92Y3B1KS0+dGltZTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOworCXNyYyA9ICZfX2dldF9jcHVfdmFyKHhlbl92Y3B1KS0+dGltZTsKIAlyZXQgPSBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWQoc3JjKTsKLQlwdXRfY3B1X3Zhcih4ZW5fdmNwdSk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYTZmOTM0Zi4uNzk4ZWU2ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQ1NSw3ICs0NTUsNyBAQAogI2RlZmluZSBfX05SX3F1b3RhY3RsIAkJCQkyMDQKIF9fU1lTQ0FMTCgyMDQsIHN5c19xdW90YWN0bCwgNCkKICNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIAkJCTIwNQotX19TWVNDQUxMKDIwNSwgc3lzX25mc3NlcnZjdGwsIDMpCitfX1NZU0NBTEwoMjA1LCBzeXNfbmlfc3lzY2FsbCwgMCkKICNkZWZpbmUgX19OUl9fc3lzY3RsIAkJCQkyMDYKIF9fU1lTQ0FMTCgyMDYsIHN5c19zeXNjdGwsIDEpCiAjZGVmaW5lIF9fTlJfYmRmbHVzaCAJCQkJMjA3CmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCA2MGJlMWUwLi5lOTc5MzRlIDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnCisrKyBiL2Jsb2NrL0tjb25maWcKQEAgLTY1LDYgKzY1LDE2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBCTEtfREVWX0JTR0xJQgorCWJvb2wgIkJsb2NrIGxheWVyIFNHIHN1cHBvcnQgdjQgaGVscGVyIGxpYiIKKwlkZWZhdWx0IG4KKwlzZWxlY3QgQkxLX0RFVl9CU0cKKwloZWxwCisJICBTdWJzeXN0ZW1zIHdpbGwgbm9ybWFsbHkgZW5hYmxlIHRoaXMgaWYgbmVlZGVkLiBVc2VycyB3aWxsIG5vdAorCSAgbm9ybWFsbHkgbmVlZCB0byBtYW51YWxseSBlbmFibGUgdGhpcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEJMS19ERVZfSU5URUdSSVRZCiAJYm9vbCAiQmxvY2sgbGF5ZXIgZGF0YSBpbnRlZ3JpdHkgc3VwcG9ydCIKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlCmluZGV4IDBmZWM0YjMuLjUxNGM2ZTQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL01ha2VmaWxlCisrKyBiL2Jsb2NrL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCQkJYmxrLWlvcG9sbC5vIGJsay1saWIubyBpb2N0bC5vIGdlbmhkLm8gc2NzaV9pb2N0bC5vCiAKIG9iai0kKENPTkZJR19CTEtfREVWX0JTRykJKz0gYnNnLm8KK29iai0kKENPTkZJR19CTEtfREVWX0JTR0xJQikJKz0gYnNnLWxpYi5vCiBvYmotJChDT05GSUdfQkxLX0NHUk9VUCkJKz0gYmxrLWNncm91cC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HKQkrPSBibGstdGhyb3R0bGUubwogb2JqLSQoQ09ORklHX0lPU0NIRURfTk9PUCkJKz0gbm9vcC1pb3NjaGVkLm8KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IGI4NTBiZWQuLjkwZTFmZmQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMTM2OCw4ICsxMzY4LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGZhaWxfbWFrZV9yZXF1ZXN0X2RlYnVnZnModm9pZCkKIHsKLQlyZXR1cm4gaW5pdF9mYXVsdF9hdHRyX2RlbnRyaWVzKCZmYWlsX21ha2VfcmVxdWVzdCwKLQkJCQkJImZhaWxfbWFrZV9yZXF1ZXN0Iik7CisJc3RydWN0IGRlbnRyeSAqZGlyID0gZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cigiZmFpbF9tYWtlX3JlcXVlc3QiLAorCQkJCQkJTlVMTCwgJmZhaWxfbWFrZV9yZXF1ZXN0KTsKKworCXJldHVybiBJU19FUlIoZGlyKSA/IFBUUl9FUlIoZGlyKSA6IDA7CiB9CiAKIGxhdGVfaW5pdGNhbGwoZmFpbF9tYWtlX3JlcXVlc3RfZGVidWdmcyk7CkBAIC0xNzAwLDYgKzE3MDIsNyBAQAogaW50IGJsa19pbnNlcnRfY2xvbmVkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB3aGVyZSA9IEVMRVZBVE9SX0lOU0VSVF9CQUNLOwogCiAJaWYgKGJsa19ycV9jaGVja19saW1pdHMocSwgcnEpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTE3MTYsNyArMTcxOSwxMCBAQAogCSAqLwogCUJVR19PTihibGtfcXVldWVkX3JxKHJxKSk7CiAKLQlhZGRfYWNjdF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfQkFDSyk7CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiAoUkVRX0ZMVVNIfFJFUV9GVUEpKQorCQl3aGVyZSA9IEVMRVZBVE9SX0lOU0VSVF9GTFVTSDsKKworCWFkZF9hY2N0X3JlcXVlc3QocSwgcnEsIHdoZXJlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMjI3Myw3ICsyMjc5LDcgQEAKICAqICAgICAlZmFsc2UgLSB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgcmVxdWVzdAogICogICAgICV0cnVlICAtIHN0aWxsIGJ1ZmZlcnMgcGVuZGluZyBmb3IgdGhpcyByZXF1ZXN0CiAgKiovCi1zdGF0aWMgYm9vbCBfX2Jsa19lbmRfYmlkaV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yLAorYm9vbCBfX2Jsa19lbmRfYmlkaV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yLAogCQkJCSAgIHVuc2lnbmVkIGludCBucl9ieXRlcywgdW5zaWduZWQgaW50IGJpZGlfYnl0ZXMpCiB7CiAJaWYgKGJsa191cGRhdGVfYmlkaV9yZXF1ZXN0KHJxLCBlcnJvciwgbnJfYnl0ZXMsIGJpZGlfYnl0ZXMpKQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWZsdXNoLmMgYi9ibG9jay9ibGstZmx1c2guYwppbmRleCBiYjIxZTRjLi40OTFlYjMwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstZmx1c2guYworKysgYi9ibG9jay9ibGstZmx1c2guYwpAQCAtOTUsMTEgKzk1LDEyIEBACiB7CiAJdW5zaWduZWQgaW50IHBvbGljeSA9IDA7CiAKKwlpZiAoYmxrX3JxX3NlY3RvcnMocnEpKQorCQlwb2xpY3kgfD0gUkVRX0ZTRVFfREFUQTsKKwogCWlmIChmZmxhZ3MgJiBSRVFfRkxVU0gpIHsKIAkJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkxVU0gpCiAJCQlwb2xpY3kgfD0gUkVRX0ZTRVFfUFJFRkxVU0g7Ci0JCWlmIChibGtfcnFfc2VjdG9ycyhycSkpCi0JCQlwb2xpY3kgfD0gUkVRX0ZTRVFfREFUQTsKIAkJaWYgKCEoZmZsYWdzICYgUkVRX0ZVQSkgJiYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRlVBKSkKIAkJCXBvbGljeSB8PSBSRVFfRlNFUV9QT1NURkxVU0g7CiAJfQpAQCAtMTIyLDcgKzEyMyw3IEBACiAKIAkvKiBtYWtlIEBycSBhIG5vcm1hbCByZXF1ZXN0ICovCiAJcnEtPmNtZF9mbGFncyAmPSB+UkVRX0ZMVVNIX1NFUTsKLQlycS0+ZW5kX2lvID0gTlVMTDsKKwlycS0+ZW5kX2lvID0gcnEtPmZsdXNoLnNhdmVkX2VuZF9pbzsKIH0KIAogLyoqCkBAIC0zMDAsOSArMzAxLDYgQEAKIAl1bnNpZ25lZCBpbnQgZmZsYWdzID0gcS0+Zmx1c2hfZmxhZ3M7CS8qIG1heSBjaGFuZ2UsIGNhY2hlICovCiAJdW5zaWduZWQgaW50IHBvbGljeSA9IGJsa19mbHVzaF9wb2xpY3koZmZsYWdzLCBycSk7CiAKLQlCVUdfT04ocnEtPmVuZF9pbyk7Ci0JQlVHX09OKCFycS0+YmlvIHx8IHJxLT5iaW8gIT0gcnEtPmJpb3RhaWwpOwotCiAJLyoKIAkgKiBAcG9saWN5IG5vdyByZWNvcmRzIHdoYXQgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIGRvbmUuICBBZGp1c3QKIAkgKiBSRVFfRkxVU0ggYW5kIEZVQSBmb3IgdGhlIGRyaXZlci4KQEAgLTMxMiw2ICszMTAsMTkgQEAKIAkJcnEtPmNtZF9mbGFncyAmPSB+UkVRX0ZVQTsKIAogCS8qCisJICogQW4gZW1wdHkgZmx1c2ggaGFuZGVkIGRvd24gZnJvbSBhIHN0YWNraW5nIGRyaXZlciBtYXkKKwkgKiB0cmFuc2xhdGUgaW50byBub3RoaW5nIGlmIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkb2VzIG5vdAorCSAqIGFkdmVydGlzZSBhIHdyaXRlLWJhY2sgY2FjaGUuICBJbiB0aGlzIGNhc2UsIHNpbXBseQorCSAqIGNvbXBsZXRlIHRoZSByZXF1ZXN0LgorCSAqLworCWlmICghcG9saWN5KSB7CisJCV9fYmxrX2VuZF9iaWRpX3JlcXVlc3QocnEsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKCFycS0+YmlvIHx8IHJxLT5iaW8gIT0gcnEtPmJpb3RhaWwpOworCisJLyoKIAkgKiBJZiB0aGVyZSdzIGRhdGEgYnV0IGZsdXNoIGlzIG5vdCBuZWNlc3NhcnksIHRoZSByZXF1ZXN0IGNhbiBiZQogCSAqIHByb2Nlc3NlZCBkaXJlY3RseSB3aXRob3V0IGdvaW5nIHRocm91Z2ggZmx1c2ggbWFjaGluZXJ5LiAgUXVldWUKIAkgKiBmb3Igbm9ybWFsIGV4ZWN1dGlvbi4KQEAgLTMxOSw2ICszMzAsNyBAQAogCWlmICgocG9saWN5ICYgUkVRX0ZTRVFfREFUQSkgJiYKIAkgICAgIShwb2xpY3kgJiAoUkVRX0ZTRVFfUFJFRkxVU0ggfCBSRVFfRlNFUV9QT1NURkxVU0gpKSkgewogCQlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmcS0+cXVldWVfaGVhZCk7CisJCWJsa19ydW5fcXVldWVfYXN5bmMocSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMyOSw2ICszNDEsNyBAQAogCW1lbXNldCgmcnEtPmZsdXNoLCAwLCBzaXplb2YocnEtPmZsdXNoKSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJxLT5mbHVzaC5saXN0KTsKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GTFVTSF9TRVE7CisJcnEtPmZsdXNoLnNhdmVkX2VuZF9pbyA9IHJxLT5lbmRfaW87IC8qIFVzdWFsbHkgTlVMTCAqLwogCXJxLT5lbmRfaW8gPSBmbHVzaF9kYXRhX2VuZF9pbzsKIAogCWJsa19mbHVzaF9jb21wbGV0ZV9zZXEocnEsIFJFUV9GU0VRX0FDVElPTlMgJiB+cG9saWN5LCAwKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zb2Z0aXJxLmMgYi9ibG9jay9ibGstc29mdGlycS5jCmluZGV4IDQ3NWZhYjguLjU4MzQwZDAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zb2Z0aXJxLmMKKysrIGIvYmxvY2svYmxrLXNvZnRpcnEuYwpAQCAtMTI0LDYgKzEyNCwxNCBAQAogCX0gZWxzZQogCQljY3B1ID0gY3B1OwogCisJLyoKKwkgKiBJZiBjdXJyZW50IENQVSBhbmQgcmVxdWVzdGVkIENQVSBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHJ1bm5pbmcKKwkgKiBzb2Z0aXJxIGluIGN1cnJlbnQgQ1BVLiBPbmUgbWlnaHQgY29uY2VybiB0aGlzIGlzIGp1c3QgbGlrZQorCSAqIFFVRVVFX0ZMQUdfU0FNRV9GT1JDRSwgYnV0IGFjdHVhbGx5IG5vdC4gYmxrX2NvbXBsZXRlX3JlcXVlc3QoKSBpcworCSAqIHJ1bm5pbmcgaW4gaW50ZXJydXB0IGhhbmRsZXIsIGFuZCBjdXJyZW50bHkgSS9PIGNvbnRyb2xsZXIgZG9lc24ndAorCSAqIHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJydXB0cywgc28gY3VycmVudCBDUFUgaXMgdW5pcXVlIGFjdHVhbGx5LiBUaGlzCisJICogYXZvaWRzIElQSSBzZW5kaW5nIGZyb20gY3VycmVudCBDUFUgdG8gdGhlIGZpcnN0IENQVSBvZiBhIGdyb3VwLgorCSAqLwogCWlmIChjY3B1ID09IGNwdSB8fCBjY3B1ID09IGdyb3VwX2NwdSkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogZG9fbG9jYWw6CmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCmluZGV4IGY2YTc5NDEuLmExOWY1OGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jCisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCkBAIC03NDYsNyArNzQ2LDcgQEAKIHN0YXRpYyB2b2lkIHRocm90bF9jaGFyZ2VfYmlvKHN0cnVjdCB0aHJvdGxfZ3JwICp0Zywgc3RydWN0IGJpbyAqYmlvKQogewogCWJvb2wgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKLQlib29sIHN5bmMgPSBiaW8tPmJpX3J3ICYgUkVRX1NZTkM7CisJYm9vbCBzeW5jID0gcndfaXNfc3luYyhiaW8tPmJpX3J3KTsKIAogCS8qIENoYXJnZSB0aGUgYmlvIHRvIHRoZSBncm91cCAqLwogCXRnLT5ieXRlc19kaXNwW3J3XSArPSBiaW8tPmJpX3NpemU7CkBAIC0xMTUwLDcgKzExNTAsNyBAQAogCiAJCWlmICh0Z19ub19ydWxlX2dyb3VwKHRnLCBydykpIHsKIAkJCWJsa2lvY2dfdXBkYXRlX2Rpc3BhdGNoX3N0YXRzKCZ0Zy0+YmxrZywgYmlvLT5iaV9zaXplLAotCQkJCQlydywgYmlvLT5iaV9ydyAmIFJFUV9TWU5DKTsKKwkJCQkJcncsIHJ3X2lzX3N5bmMoYmlvLT5iaV9ydykpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXRpbWVvdXQuYyBiL2Jsb2NrL2Jsay10aW1lb3V0LmMKaW5kZXggNGYwYzA2Yy4uNzgwMzU0OCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRpbWVvdXQuYworKysgYi9ibG9jay9ibGstdGltZW91dC5jCkBAIC0yOCw3ICsyOCwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBmYWlsX2lvX3RpbWVvdXRfZGVidWdmcyh2b2lkKQogewotCXJldHVybiBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxfaW9fdGltZW91dCwgImZhaWxfaW9fdGltZW91dCIpOworCXN0cnVjdCBkZW50cnkgKmRpciA9IGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoImZhaWxfaW9fdGltZW91dCIsCisJCQkJCQlOVUxMLCAmZmFpbF9pb190aW1lb3V0KTsKKworCXJldHVybiBJU19FUlIoZGlyKSA/IFBUUl9FUlIoZGlyKSA6IDA7CiB9CiAKIGxhdGVfaW5pdGNhbGwoZmFpbF9pb190aW1lb3V0X2RlYnVnZnMpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBkNjU4NjI4Li4yMGI5MDBhIDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMTcsNiArMTcsOCBAQAogCQkgICAgICBzdHJ1Y3QgYmlvICpiaW8pOwogdm9pZCBibGtfZGVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSk7CiB2b2lkIF9fYmxrX3F1ZXVlX2ZyZWVfdGFncyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Citib29sIF9fYmxrX2VuZF9iaWRpX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsCisJCQkgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzLCB1bnNpZ25lZCBpbnQgYmlkaV9ieXRlcyk7CiAKIHZvaWQgYmxrX3JxX3RpbWVkX291dF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBibGtfZGVsZXRlX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICopOwpkaWZmIC0tZ2l0IGEvYmxvY2svYnNnLWxpYi5jIGIvYmxvY2svYnNnLWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTBlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay9ic2ctbGliLmMKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiAgQlNHIGhlbHBlciBsaWJyYXJ5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgIEphbWVzIFNtYXJ0LCBFbXVsZXggQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgICBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMSAgIE1pa2UgQ2hyaXN0aWUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JzZy1saWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisvKioKKyAqIGJzZ19kZXN0cm95X2pvYiAtIHJvdXRpbmUgdG8gdGVhcmRvd24vZGVsZXRlIGEgYnNnIGpvYgorICogQGpvYjogYnNnX2pvYiB0aGF0IGlzIHRvIGJlIHRvcm4gZG93bgorICovCitzdGF0aWMgdm9pZCBic2dfZGVzdHJveV9qb2Ioc3RydWN0IGJzZ19qb2IgKmpvYikKK3sKKwlwdXRfZGV2aWNlKGpvYi0+ZGV2KTsJLyogcmVsZWFzZSByZWZlcmVuY2UgZm9yIHRoZSByZXF1ZXN0ICovCisKKwlrZnJlZShqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0KTsKKwlrZnJlZShqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCk7CisJa2ZyZWUoam9iKTsKK30KKworLyoqCisgKiBic2dfam9iX2RvbmUgLSBjb21wbGV0aW9uIHJvdXRpbmUgZm9yIGJzZyByZXF1ZXN0cworICogQGpvYjogYnNnX2pvYiB0aGF0IGlzIGNvbXBsZXRlCisgKiBAcmVzdWx0OiBqb2IgcmVwbHkgcmVzdWx0CisgKiBAcmVwbHlfcGF5bG9hZF9yY3ZfbGVuOiBsZW5ndGggb2YgcGF5bG9hZCByZWN2ZAorICoKKyAqIFRoZSBMTEQgc2hvdWxkIGNhbGwgdGhpcyB3aGVuIHRoZSBic2cgam9iIGhhcyBjb21wbGV0ZWQuCisgKi8KK3ZvaWQgYnNnX2pvYl9kb25lKHN0cnVjdCBic2dfam9iICpqb2IsIGludCByZXN1bHQsCisJCSAgdW5zaWduZWQgaW50IHJlcGx5X3BheWxvYWRfcmN2X2xlbikKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gam9iLT5yZXE7CisJc3RydWN0IHJlcXVlc3QgKnJzcCA9IHJlcS0+bmV4dF9ycTsKKwlpbnQgZXJyOworCisJZXJyID0gam9iLT5yZXEtPmVycm9ycyA9IHJlc3VsdDsKKwlpZiAoZXJyIDwgMCkKKwkJLyogd2UncmUgb25seSByZXR1cm5pbmcgdGhlIHJlc3VsdCBmaWVsZCBpbiB0aGUgcmVwbHkgKi8KKwkJam9iLT5yZXEtPnNlbnNlX2xlbiA9IHNpemVvZih1MzIpOworCWVsc2UKKwkJam9iLT5yZXEtPnNlbnNlX2xlbiA9IGpvYi0+cmVwbHlfbGVuOworCS8qIHdlIGFzc3VtZSBhbGwgcmVxdWVzdCBwYXlsb2FkIHdhcyB0cmFuc2ZlcnJlZCwgcmVzaWR1YWwgPT0gMCAqLworCXJlcS0+cmVzaWRfbGVuID0gMDsKKworCWlmIChyc3ApIHsKKwkJV0FSTl9PTihyZXBseV9wYXlsb2FkX3Jjdl9sZW4gPiByc3AtPnJlc2lkX2xlbik7CisKKwkJLyogc2V0IHJlcGx5IChiaWRpKSByZXNpZHVhbCAqLworCQlyc3AtPnJlc2lkX2xlbiAtPSBtaW4ocmVwbHlfcGF5bG9hZF9yY3ZfbGVuLCByc3AtPnJlc2lkX2xlbik7CisJfQorCWJsa19jb21wbGV0ZV9yZXF1ZXN0KHJlcSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChic2dfam9iX2RvbmUpOworCisvKioKKyAqIGJzZ19zb2Z0aXJxX2RvbmUgLSBzb2Z0aXJxIGRvbmUgcm91dGluZSBmb3IgZGVzdHJveWluZyB0aGUgYnNnIHJlcXVlc3RzCisgKiBAcnE6IEJTRyByZXF1ZXN0IHRoYXQgaG9sZHMgdGhlIGpvYiB0byBiZSBkZXN0cm95ZWQKKyAqLworc3RhdGljIHZvaWQgYnNnX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IGJzZ19qb2IgKmpvYiA9IHJxLT5zcGVjaWFsOworCisJYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgcnEtPmVycm9ycyk7CisJYnNnX2Rlc3Ryb3lfam9iKGpvYik7Cit9CisKK3N0YXRpYyBpbnQgYnNnX21hcF9idWZmZXIoc3RydWN0IGJzZ19idWZmZXIgKmJ1Ziwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlzaXplX3Qgc3ogPSAoc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiByZXEtPm5yX3BoeXNfc2VnbWVudHMpOworCisJQlVHX09OKCFyZXEtPm5yX3BoeXNfc2VnbWVudHMpOworCisJYnVmLT5zZ19saXN0ID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPnNnX2xpc3QpCisJCXJldHVybiAtRU5PTUVNOworCXNnX2luaXRfdGFibGUoYnVmLT5zZ19saXN0LCByZXEtPm5yX3BoeXNfc2VnbWVudHMpOworCWJ1Zi0+c2dfY250ID0gYmxrX3JxX21hcF9zZyhyZXEtPnEsIHJlcSwgYnVmLT5zZ19saXN0KTsKKwlidWYtPnBheWxvYWRfbGVuID0gYmxrX3JxX2J5dGVzKHJlcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYnNnX2NyZWF0ZV9qb2IgLSBjcmVhdGUgdGhlIGJzZ19qb2Igc3RydWN0dXJlIGZvciB0aGUgYnNnIHJlcXVlc3QKKyAqIEBkZXY6IGRldmljZSB0aGF0IGlzIGJlaW5nIHNlbnQgdGhlIGJzZyByZXF1ZXN0CisgKiBAcmVxOiBCU0cgcmVxdWVzdCB0aGF0IG5lZWRzIGEgam9iIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IGJzZ19jcmVhdGVfam9iKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnNwID0gcmVxLT5uZXh0X3JxOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcmVxLT5xOworCXN0cnVjdCBic2dfam9iICpqb2I7CisJaW50IHJldDsKKworCUJVR19PTihyZXEtPnNwZWNpYWwpOworCisJam9iID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2IpICsgcS0+YnNnX2pvYl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWpvYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEtPnNwZWNpYWwgPSBqb2I7CisJam9iLT5yZXEgPSByZXE7CisJaWYgKHEtPmJzZ19qb2Jfc2l6ZSkKKwkJam9iLT5kZF9kYXRhID0gKHZvaWQgKikmam9iWzFdOworCWpvYi0+cmVxdWVzdCA9IHJlcS0+Y21kOworCWpvYi0+cmVxdWVzdF9sZW4gPSByZXEtPmNtZF9sZW47CisJam9iLT5yZXBseSA9IHJlcS0+c2Vuc2U7CisJam9iLT5yZXBseV9sZW4gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CS8qIFNpemUgb2Ygc2Vuc2UgYnVmZmVyCisJCQkJCQkgKiBhbGxvY2F0ZWQgKi8KKwlpZiAocmVxLT5iaW8pIHsKKwkJcmV0ID0gYnNnX21hcF9idWZmZXIoJmpvYi0+cmVxdWVzdF9wYXlsb2FkLCByZXEpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsam9iX3Jsc19qb2I7CisJfQorCWlmIChyc3AgJiYgcnNwLT5iaW8pIHsKKwkJcmV0ID0gYnNnX21hcF9idWZmZXIoJmpvYi0+cmVwbHlfcGF5bG9hZCwgcnNwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGpvYl9ybHNfcnFzdF9wYXlsb2FkOworCX0KKwlqb2ItPmRldiA9IGRldjsKKwkvKiB0YWtlIGEgcmVmZXJlbmNlIGZvciB0aGUgcmVxdWVzdCAqLworCWdldF9kZXZpY2Uoam9iLT5kZXYpOworCXJldHVybiAwOworCitmYWlsam9iX3Jsc19ycXN0X3BheWxvYWQ6CisJa2ZyZWUoam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCk7CitmYWlsam9iX3Jsc19qb2I6CisJa2ZyZWUoam9iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIGJzZ19nb29zZV9xdWV1ZSAtIHJlc3RhcnQgcXVldWUgaW4gY2FzZSBpdCB3YXMgc3RvcHBlZAorICogQHE6IHJlcXVlc3QgcSB0byBiZSByZXN0YXJ0ZWQKKyAqLwordm9pZCBic2dfZ29vc2VfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJaWYgKCFxKQorCQlyZXR1cm47CisKKwlibGtfcnVuX3F1ZXVlX2FzeW5jKHEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnNnX2dvb3NlX3F1ZXVlKTsKKworLyoqCisgKiBic2dfcmVxdWVzdF9mbiAtIGdlbmVyaWMgaGFuZGxlciBmb3IgYnNnIHJlcXVlc3RzCisgKiBAcTogcmVxdWVzdCBxdWV1ZSB0byBtYW5hZ2UKKyAqCisgKiBPbiBlcnJvciB0aGUgY3JlYXRlX2JzZ19qb2IgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIC1FeHl6IGVycm9yIHZhbHVlCisgKiB0aGF0IHdpbGwgYmUgc2V0IHRvIHRoZSByZXEtPmVycm9ycy4KKyAqCisgKiBEcml2ZXJzL3N1YnN5cyBzaG91bGQgcGFzcyB0aGlzIHRvIHRoZSBxdWV1ZSBpbml0IGZ1bmN0aW9uLgorICovCit2b2lkIGJzZ19yZXF1ZXN0X2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHEtPnF1ZXVlZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXN0cnVjdCBic2dfam9iICpqb2I7CisJaW50IHJldDsKKworCWlmICghZ2V0X2RldmljZShkZXYpKQorCQlyZXR1cm47CisKKwl3aGlsZSAoMSkgeworCQlyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChxKTsKKwkJaWYgKCFyZXEpCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCisJCXJldCA9IGJzZ19jcmVhdGVfam9iKGRldiwgcmVxKTsKKwkJaWYgKHJldCkgeworCQkJcmVxLT5lcnJvcnMgPSByZXQ7CisJCQlibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgcmV0KTsKKwkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWpvYiA9IHJlcS0+c3BlY2lhbDsKKwkJcmV0ID0gcS0+YnNnX2pvYl9mbihqb2IpOworCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCXB1dF9kZXZpY2UoZGV2KTsKKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnNnX3JlcXVlc3RfZm4pOworCisvKioKKyAqIGJzZ19zZXR1cF9xdWV1ZSAtIENyZWF0ZSBhbmQgYWRkIHRoZSBic2cgaG9va3Mgc28gd2UgY2FuIHJlY2VpdmUgcmVxdWVzdHMKKyAqIEBkZXY6IGRldmljZSB0byBhdHRhY2ggYnNnIGRldmljZSB0bworICogQHE6IHJlcXVlc3QgcXVldWUgc2V0dXAgYnkgY2FsbGVyCisgKiBAbmFtZTogZGV2aWNlIHRvIGdpdmUgYnNnIGRldmljZQorICogQGpvYl9mbjogYnNnIGpvYiBoYW5kbGVyCisgKiBAZGRfam9iX3NpemU6IHNpemUgb2YgTExEIGRhdGEgbmVlZGVkIGZvciBlYWNoIGpvYgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgc2V0dXAgdGhlIHJldXFlc3QgcXVldWUgd2l0aCBic2dfcmVxdWVzdF9mbgorICogYXMgdGhlIHJlcXVlc3RfZm4uCisgKi8KK2ludCBic2dfc2V0dXBfcXVldWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJICAgIGNoYXIgKm5hbWUsIGJzZ19qb2JfZm4gKmpvYl9mbiwgaW50IGRkX2pvYl9zaXplKQoreworCWludCByZXQ7CisKKwlxLT5xdWV1ZWRhdGEgPSBkZXY7CisJcS0+YnNnX2pvYl9zaXplID0gZGRfam9iX3NpemU7CisJcS0+YnNnX2pvYl9mbiA9IGpvYl9mbjsKKwlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX0JJREksIHEpOworCWJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUocSwgYnNnX3NvZnRpcnFfZG9uZSk7CisJYmxrX3F1ZXVlX3JxX3RpbWVvdXQocSwgQkxLX0RFRkFVTFRfU0dfVElNRU9VVCk7CisKKwlyZXQgPSBic2dfcmVnaXN0ZXJfcXVldWUocSwgZGV2LCBuYW1lLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJzZyBpbnRlcmZhY2UgZmFpbGVkIHRvICIKKwkJICAgICAgICJpbml0aWFsaXplIC0gcmVnaXN0ZXIgcXVldWVcbiIsIGRldi0+a29iai5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJzZ19zZXR1cF9xdWV1ZSk7CisKKy8qKgorICogYnNnX3JlbW92ZV9xdWV1ZSAtIERlbGV0ZXMgdGhlIGJzZyBkZXYgZnJvbSB0aGUgcQorICogQHE6CXRoZSByZXF1ZXN0X3F1ZXVlIHRoYXQgaXMgdG8gYmUgdG9ybiBkb3duLgorICoKKyAqIE5vdGVzOgorICogICBCZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgcXVldWUgZW1wdHkgYW55IHJlcXVlc3RzIHRoYXQgYXJlIGJsb2NrZWQKKyAqLwordm9pZCBic2dfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7IC8qIGJsb2NrIHJlcXVlc3QgKi8KKwlpbnQgY291bnRzOyAvKiB0b3RhbHMgZm9yIHJlcXVlc3RfbGlzdCBjb3VudCBhbmQgc3RhcnZlZCAqLworCisJaWYgKCFxKQorCQlyZXR1cm47CisKKwkvKiBTdG9wIHRha2luZyBpbiBuZXcgcmVxdWVzdHMgKi8KKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCWJsa19zdG9wX3F1ZXVlKHEpOworCisJLyogZHJhaW4gYWxsIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSAqLworCXdoaWxlICgxKSB7CisJCS8qIG5lZWQgdGhlIGxvY2sgdG8gZmV0Y2ggYSByZXF1ZXN0CisJCSAqIHRoaXMgbWF5IGZldGNoIHRoZSBzYW1lIHJlcWV1c3QgYXMgdGhlIHByZXZpb3VzIHBhc3MKKwkJICovCisJCXJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHEpOworCQkvKiBzYXZlIHJlcXVlc3RzIGluIHVzZSBhbmQgc3RhcnZlZCAqLworCQljb3VudHMgPSBxLT5ycS5jb3VudFswXSArIHEtPnJxLmNvdW50WzFdICsKKwkJCSBxLT5ycS5zdGFydmVkWzBdICsgcS0+cnEuc3RhcnZlZFsxXTsKKwkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCQkvKiBhbnkgcmVxdWVzdHMgc3RpbGwgb3V0c3RhbmRpbmc/ICovCisJCWlmIChjb3VudHMgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qIFRoaXMgbWF5IGJlIHRoZSBzYW1lIHJlcSBhcyB0aGUgcHJldmlvdXMgaXRlcmF0aW9uLAorCQkgKiBhbHdheXMgc2VuZCB0aGUgYmxrX2VuZF9yZXF1ZXN0X2FsbCBhZnRlciBhIHByZWZldGNoLgorCQkgKiBJdCBpcyBub3Qgb2theSB0byBub3QgZW5kIHRoZSByZXF1ZXN0IGJlY2F1c2UgdGhlCisJCSAqIHByZWZldGNoIHN0YXJ0ZWQgdGhlIHJlcXVlc3QuCisJCSAqLworCQlpZiAocmVxKSB7CisJCQkvKiByZXR1cm4gLUVOWElPIHRvIGluZGljYXRlIHRoYXQgdGhpcyBxdWV1ZSBpcworCQkJICogZ29pbmcgYXdheQorCQkJICovCisJCQlyZXEtPmVycm9ycyA9IC1FTlhJTzsKKwkJCWJsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRU5YSU8pOworCQl9CisKKwkJbXNsZWVwKDIwMCk7IC8qIGFsbG93IGJzZyB0byBwb3NzaWJseSBmaW5pc2ggKi8KKwkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwl9CisJYnNnX3VucmVnaXN0ZXJfcXVldWUocSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChic2dfcmVtb3ZlX3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDFmOTZhZDYuLmEzM2JkNDMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTMwLDYgKzEzMCw4IEBACiAJdW5zaWduZWQgbG9uZyBzbGljZV9lbmQ7CiAJbG9uZyBzbGljZV9yZXNpZDsKIAorCS8qIHBlbmRpbmcgbWV0YWRhdGEgcmVxdWVzdHMgKi8KKwlpbnQgbWV0YV9wZW5kaW5nOwogCS8qIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFyZSBvbiB0aGUgZGlzcGF0Y2ggbGlzdCBvciBpbnNpZGUgZHJpdmVyICovCiAJaW50IGRpc3BhdGNoZWQ7CiAKQEAgLTY4Miw2ICs2ODQsOSBAQAogCWlmIChycV9pc19zeW5jKHJxMSkgIT0gcnFfaXNfc3luYyhycTIpKQogCQlyZXR1cm4gcnFfaXNfc3luYyhycTEpID8gcnExIDogcnEyOwogCisJaWYgKChycTEtPmNtZF9mbGFncyBeIHJxMi0+Y21kX2ZsYWdzKSAmIFJFUV9NRVRBKQorCQlyZXR1cm4gcnExLT5jbWRfZmxhZ3MgJiBSRVFfTUVUQSA/IHJxMSA6IHJxMjsKKwogCXMxID0gYmxrX3JxX3BvcyhycTEpOwogCXMyID0gYmxrX3JxX3BvcyhycTIpOwogCkBAIC0xMjA5LDYgKzEyMTQsOSBAQAogCiAJaGxpc3RfZGVsX2luaXQoJmNmcWctPmNmcWRfbm9kZSk7CiAKKwlCVUdfT04oY2ZxZC0+bnJfYmxrY2dfbGlua2VkX2dycHMgPD0gMCk7CisJY2ZxZC0+bnJfYmxrY2dfbGlua2VkX2dycHMtLTsKKwogCS8qCiAJICogUHV0IHRoZSByZWZlcmVuY2UgdGFrZW4gYXQgdGhlIHRpbWUgb2YgY3JlYXRpb24gc28gdGhhdCB3aGVuIGFsbAogCSAqIHF1ZXVlcyBhcmUgZ29uZSwgZ3JvdXAgY2FuIGJlIGRlc3Ryb3llZC4KQEAgLTE2MDQsNiArMTYxMiwxMCBAQAogCWNmcXEtPmNmcWQtPnJxX3F1ZXVlZC0tOwogCWNmcV9ibGtpb2NnX3VwZGF0ZV9pb19yZW1vdmVfc3RhdHMoJihSUV9DRlFHKHJxKSktPmJsa2csCiAJCQkJCXJxX2RhdGFfZGlyKHJxKSwgcnFfaXNfc3luYyhycSkpOworCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpIHsKKwkJV0FSTl9PTighY2ZxcS0+bWV0YV9wZW5kaW5nKTsKKwkJY2ZxcS0+bWV0YV9wZW5kaW5nLS07CisJfQogfQogCiBzdGF0aWMgaW50IGNmcV9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipyZXEsCkBAIC0zMzU3LDYgKzMzNjksMTMgQEAKIAkJcmV0dXJuIHRydWU7CiAKIAkvKgorCSAqIFNvIGJvdGggcXVldWVzIGFyZSBzeW5jLiBMZXQgdGhlIG5ldyByZXF1ZXN0IGdldCBkaXNrIHRpbWUgaWYKKwkgKiBpdCdzIGEgbWV0YWRhdGEgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcXVldWUgaXMgZG9pbmcgcmVndWxhciBJTy4KKwkgKi8KKwlpZiAoKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTUVUQSkgJiYgIWNmcXEtPm1ldGFfcGVuZGluZykKKwkJcmV0dXJuIHRydWU7CisKKwkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCiAJICovCiAJaWYgKGNmcV9jbGFzc19ydChuZXdfY2ZxcSkgJiYgIWNmcV9jbGFzc19ydChjZnFxKSkKQEAgLTM0MjAsNiArMzQzOSw4IEBACiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBSUV9DSUMocnEpOwogCiAJY2ZxZC0+cnFfcXVldWVkKys7CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTUVUQSkKKwkJY2ZxcS0+bWV0YV9wZW5kaW5nKys7CiAKIAljZnFfdXBkYXRlX2lvX3RoaW5rdGltZShjZnFkLCBjZnFxLCBjaWMpOwogCWNmcV91cGRhdGVfaW9fc2Vla3RpbWUoY2ZxZCwgY2ZxcSwgcnEpOwpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggNWNiNTFjNS4uZTJmNjc5MCAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC0xMTQ2LDE3ICsxMTQ2LDE3IEBACiAJCWNwdSA9IHBhcnRfc3RhdF9sb2NrKCk7CiAJCXBhcnRfcm91bmRfc3RhdHMoY3B1LCBoZCk7CiAJCXBhcnRfc3RhdF91bmxvY2soKTsKLQkJc2VxX3ByaW50ZihzZXFmLCAiJTRkICU3ZCAlcyAlbHUgJWx1ICVsbHUgIgotCQkJICAgIiV1ICVsdSAlbHUgJWxsdSAldSAldSAldSAldVxuIiwKKwkJc2VxX3ByaW50ZihzZXFmLCAiJTRkICU3ZCAlcyAlbHUgJWx1ICVsdSAiCisJCQkgICAiJXUgJWx1ICVsdSAlbHUgJXUgJXUgJXUgJXVcbiIsCiAJCQkgICBNQUpPUihwYXJ0X2RldnQoaGQpKSwgTUlOT1IocGFydF9kZXZ0KGhkKSksCiAJCQkgICBkaXNrX25hbWUoZ3AsIGhkLT5wYXJ0bm8sIGJ1ZiksCiAJCQkgICBwYXJ0X3N0YXRfcmVhZChoZCwgaW9zW1JFQURdKSwKIAkJCSAgIHBhcnRfc3RhdF9yZWFkKGhkLCBtZXJnZXNbUkVBRF0pLAotCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1tSRUFEXSksCisJCQkgICBwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1tSRUFEXSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aWNrc1tSRUFEXSkpLAogCQkJICAgcGFydF9zdGF0X3JlYWQoaGQsIGlvc1tXUklURV0pLAogCQkJICAgcGFydF9zdGF0X3JlYWQoaGQsIG1lcmdlc1tXUklURV0pLAotCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1tXUklURV0pLAorCQkJICAgcGFydF9zdGF0X3JlYWQoaGQsIHNlY3RvcnNbV1JJVEVdKSwKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQoaGQsIHRpY2tzW1dSSVRFXSkpLAogCQkJICAgcGFydF9pbl9mbGlnaHQoaGQpLAogCQkJICAgamlmZmllc190b19tc2VjcyhwYXJ0X3N0YXRfcmVhZChoZCwgaW9fdGlja3MpKSwKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCAzMGVmYzdkLi43ZmViZWFhIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0yMSw5OSArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvaGFzaC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCi0jZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCi0jZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCi0jZGVmaW5lIEY0KHgsIHksIHopCSh5IF4gKHggfCB+eikpCi0KLSNkZWZpbmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBpbiwgcykgXAotCSh3ICs9IGYoeCwgeSwgeikgKyBpbiwgdyA9ICh3PDxzIHwgdz4+KDMyLXMpKSArIHgpCi0KLXN0YXRpYyB2b2lkIG1kNV90cmFuc2Zvcm0odTMyICpoYXNoLCB1MzIgY29uc3QgKmluKQotewotCXUzMiBhLCBiLCBjLCBkOwotCi0JYSA9IGhhc2hbMF07Ci0JYiA9IGhhc2hbMV07Ci0JYyA9IGhhc2hbMl07Ci0JZCA9IGhhc2hbM107Ci0KLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZDc2YWE0NzgsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzFdICsgMHhlOGM3Yjc1NiwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyNDIwNzBkYiwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzNdICsgMHhjMWJkY2VlZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNTdjMGZhZiwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bNV0gKyAweDQ3ODdjNjJhLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGE4MzA0NjEzLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bN10gKyAweGZkNDY5NTAxLCAyMik7Ci0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDY5ODA5OGQ4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls5XSArIDB4OGI0NGY3YWYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZmY1YmIxLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTFdICsgMHg4OTVjZDdiZSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NmI5MDExMjIsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzEzXSArIDB4ZmQ5ODcxOTMsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGE2Nzk0MzhlLCAxNyk7Ci0JTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdICsgMHg0OWI0MDgyMSwgMjIpOwotCi0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMV0gKyAweGY2MWUyNTYyLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpbls2XSArIDB4YzA0MGIzNDAsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4MjY1ZTVhNTEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblswXSArIDB4ZTliNmM3YWEsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZDYyZjEwNWQsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzEwXSArIDB4MDI0NDE0NTMsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4ZDhhMWU2ODEsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls0XSArIDB4ZTdkM2ZiYzgsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4MjFlMWNkZTYsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzE0XSArIDB4YzMzNzA3ZDYsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhmNGQ1MGQ4NywgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzhdICsgMHg0NTVhMTRlZCwgMjApOwotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4YTllM2U5MDUsIDUpOwotCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzJdICsgMHhmY2VmYTNmOCwgOSk7Ci0JTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bN10gKyAweDY3NmYwMmQ5LCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMTJdICsgMHg4ZDJhNGM4YSwgMjApOwotCi0JTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bNV0gKyAweGZmZmEzOTQyLCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls4XSArIDB4ODc3MWY2ODEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDZkOWQ2MTIyLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTRdICsgMHhmZGU1MzgwYywgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhhNGJlZWE0NCwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bNF0gKyAweDRiZGVjZmE5LCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bN10gKyAweGY2YmI0YjYwLCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTBdICsgMHhiZWJmYmM3MCwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4Mjg5YjdlYzYsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzBdICsgMHhlYWExMjdmYSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhkNGVmMzA4NSwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzZdICsgMHgwNDg4MWQwNSwgMjMpOwotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzldICsgMHhkOWQ0ZDAzOSwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMTJdICsgMHhlNmRiOTllNSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4MWZhMjdjZjgsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsyXSArIDB4YzRhYzU2NjUsIDIzKTsKLQotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhmNDI5MjI0NCwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bN10gKyAweDQzMmFmZjk3LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhYjk0MjNhNywgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzVdICsgMHhmYzkzYTAzOSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NjU1YjU5YzMsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzNdICsgMHg4ZjBjY2M5MiwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZlZmY0N2QsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxXSArIDB4ODU4NDVkZDEsIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpbls4XSArIDB4NmZhODdlNGYsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzE1XSArIDB4ZmUyY2U2ZTAsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpbls2XSArIDB4YTMwMTQzMTQsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxM10gKyAweDRlMDgxMWExLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY3NTM3ZTgyLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxMV0gKyAweGJkM2FmMjM1LCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDJhZDdkMmJiLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bOV0gKyAweGViODZkMzkxLCAyMSk7Ci0KLQloYXNoWzBdICs9IGE7Ci0JaGFzaFsxXSArPSBiOwotCWhhc2hbMl0gKz0gYzsKLQloYXNoWzNdICs9IGQ7Ci19Ci0KIC8qIFhYWDogdGhpcyBzdHVmZiBjYW4gYmUgb3B0aW1pemVkICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGUzMl90b19jcHVfYXJyYXkodTMyICpidWYsIHVuc2lnbmVkIGludCB3b3JkcykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaAppbmRleCBiYzUzM2RkLi5mODk1YTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogLyogTWF4aW11bSBzbGVlcCBhbGxvd2VkIHZpYSBTbGVlcCgpIG9wZXJhdG9yICovCiAKLSNkZWZpbmUgQUNQSV9NQVhfU0xFRVAgICAgICAgICAgICAgICAgICAyMDAwMAkvKiBUd28gc2Vjb25kcyAqLworI2RlZmluZSBBQ1BJX01BWF9TTEVFUCAgICAgICAgICAgICAgICAgIDIwMDAJLyogVHdvIHNlY29uZHMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAppbmRleCA3Mzg2M2Q4Ni4uNzZkYzAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaApAQCAtMTI2LDYgKzEyNiwxMiBAQAogICovCiB1OCBBQ1BJX0lOSVRfR0xPQkFMKGFjcGlfZ2JsX3RydW5jYXRlX2lvX2FkZHJlc3NlcywgRkFMU0UpOwogCisvKgorICogRGlzYWJsZSBydW50aW1lIGNoZWNraW5nIGFuZCByZXBhaXIgb2YgdmFsdWVzIHJldHVybmVkIGJ5IGNvbnRyb2wgbWV0aG9kcy4KKyAqIFVzZSBvbmx5IGlmIHRoZSByZXBhaXIgaXMgY2F1c2luZyBhIHByb2JsZW0gb24gYSBwYXJ0aWN1bGFyIG1hY2hpbmUuCisgKi8KK3U4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfZGlzYWJsZV9hdXRvX3JlcGFpciwgRkFMU0UpOworCiAvKiBhY3BpX2dibF9GQURUIGlzIGEgbG9jYWwgY29weSBvZiB0aGUgRkFEVCwgY29udmVydGVkIHRvIGEgY29tbW9uIGZvcm1hdC4gKi8KIAogc3RydWN0IGFjcGlfdGFibGVfZmFkdCBhY3BpX2dibF9GQURUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCBjN2Y3NDNjLi41NTUyMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtMzU3LDYgKzM1Nyw3IEBACiAJY2hhciAqcGF0aG5hbWU7CiAJY29uc3QgdW5pb24gYWNwaV9wcmVkZWZpbmVkX2luZm8gKnByZWRlZmluZWQ7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGFyZW50X3BhY2thZ2U7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7CiAJdTMyIGZsYWdzOwogCXU4IG5vZGVfZmxhZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IDk0ZTczYzkuLmM0NDVjY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTQ2OCw2ICs0NjgsNyBAQAogCXt7Il9TV1MiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKIAl7eyJfVEMxIiwgMCwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAJe3siX1RDMiIsIDAsIEFDUElfUlRZUEVfSU5URUdFUn19LAorCXt7Il9UREwiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKIAl7eyJfVElQIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAJe3siX1RJViIsIDEsIEFDUElfUlRZUEVfSU5URUdFUn19LAogCXt7Il9UTVAiLCAwLCBBQ1BJX1JUWVBFX0lOVEVHRVJ9fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwppbmRleCA5ZmIwM2ZhLi5jODQ1YzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCkBAIC0xOTMsMTQgKzE5MywyMCBAQAogCX0KIAogCS8qCi0JICogMSkgV2UgaGF2ZSBhIHJldHVybiB2YWx1ZSwgYnV0IGlmIG9uZSB3YXNuJ3QgZXhwZWN0ZWQsIGp1c3QgZXhpdCwgdGhpcyBpcwotCSAqIG5vdCBhIHByb2JsZW0uIEZvciBleGFtcGxlLCBpZiB0aGUgIkltcGxpY2l0IFJldHVybiIgZmVhdHVyZSBpcwotCSAqIGVuYWJsZWQsIG1ldGhvZHMgd2lsbCBhbHdheXMgcmV0dXJuIGEgdmFsdWUuCisJICogUmV0dXJuIHZhbHVlIHZhbGlkYXRpb24gYW5kIHBvc3NpYmxlIHJlcGFpci4KIAkgKgotCSAqIDIpIElmIHRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIG9mIGFueSB0eXBlLCB0aGVuIHdlIGNhbm5vdCBwZXJmb3JtIGFueQotCSAqIHZhbGlkYXRpb24sIGV4aXQuCisJICogMSkgRG9uJ3QgcGVyZm9ybSByZXR1cm4gdmFsdWUgdmFsaWRhdGlvbi9yZXBhaXIgaWYgdGhpcyBmZWF0dXJlCisJICogaGFzIGJlZW4gZGlzYWJsZWQgdmlhIGEgZ2xvYmFsIG9wdGlvbi4KKwkgKgorCSAqIDIpIFdlIGhhdmUgYSByZXR1cm4gdmFsdWUsIGJ1dCBpZiBvbmUgd2Fzbid0IGV4cGVjdGVkLCBqdXN0IGV4aXQsCisJICogdGhpcyBpcyBub3QgYSBwcm9ibGVtLiBGb3IgZXhhbXBsZSwgaWYgdGhlICJJbXBsaWNpdCBSZXR1cm4iCisJICogZmVhdHVyZSBpcyBlbmFibGVkLCBtZXRob2RzIHdpbGwgYWx3YXlzIHJldHVybiBhIHZhbHVlLgorCSAqCisJICogMykgSWYgdGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgb2YgYW55IHR5cGUsIHRoZW4gd2UgY2Fubm90IHBlcmZvcm0KKwkgKiBhbnkgdmFsaWRhdGlvbiwganVzdCBleGl0LgogCSAqLwotCWlmICgoIXByZWRlZmluZWQtPmluZm8uZXhwZWN0ZWRfYnR5cGVzKSB8fAorCWlmIChhY3BpX2dibF9kaXNhYmxlX2F1dG9fcmVwYWlyIHx8CisJICAgICghcHJlZGVmaW5lZC0+aW5mby5leHBlY3RlZF9idHlwZXMpIHx8CiAJICAgIChwcmVkZWZpbmVkLT5pbmZvLmV4cGVjdGVkX2J0eXBlcyA9PSBBQ1BJX1JUWVBFX0FMTCkpIHsKIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTIxMiw2ICsyMTgsNyBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCWRhdGEtPnByZWRlZmluZWQgPSBwcmVkZWZpbmVkOworCWRhdGEtPm5vZGUgPSBub2RlOwogCWRhdGEtPm5vZGVfZmxhZ3MgPSBub2RlLT5mbGFnczsKIAlkYXRhLT5wYXRobmFtZSA9IHBhdGhuYW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYwppbmRleCA5NzM4ODNiLi4wMjRjNGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKQEAgLTUwMyw2ICs1MDMsMjEgQEAKIHsKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpyZXR1cm5fb2JqZWN0ID0gKnJldHVybl9vYmplY3RfcHRyOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbm9kZTsKKworCS8qCisJICogV2UgY2FuIG9ubHkgc29ydCB0aGUgX1RTUyByZXR1cm4gcGFja2FnZSBpZiB0aGVyZSBpcyBubyBfUFNTIGluIHRoZQorCSAqIHNhbWUgc2NvcGUuIFRoaXMgaXMgYmVjYXVzZSBpZiBfUFNTIGlzIHByZXNlbnQsIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24KKwkgKiBkaWN0YXRlcyB0aGF0IHRoZSBfVFNTIFBvd2VyIERpc3NpcGF0aW9uIGZpZWxkIGlzIHRvIGJlIGlnbm9yZWQsIGFuZAorCSAqIHRoZXJlZm9yZSBzb21lIEJJT1NzIGxlYXZlIGdhcmJhZ2UgdmFsdWVzIGluIHRoZSBfVFNTIFBvd2VyIGZpZWxkKHMpLgorCSAqIEluIHRoaXMgY2FzZSwgaXQgaXMgYmVzdCB0byBqdXN0IHJldHVybiB0aGUgX1RTUyBwYWNrYWdlIGFzLWlzLgorCSAqIChNYXksIDIwMTEpCisJICovCisJc3RhdHVzID0KKwkgICAgYWNwaV9uc19nZXRfbm9kZShkYXRhLT5ub2RlLCAiXl9QU1MiLCBBQ1BJX05TX05PX1VQU0VBUkNILCAmbm9kZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCXJldHVybiAoQUVfT0spOworCX0KIAogCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfc29ydGVkX2xpc3QoZGF0YSwgcmV0dXJuX29iamVjdCwgNSwgMSwKIAkJCQkJICAgQUNQSV9TT1JUX0RFU0NFTkRJTkcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKaW5kZXggNDhkYjA5NC4uNjIzNjVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwpAQCAtMTI2LDEyICsxMjYsMjkgQEAKIAl9CiAKIAkvKgotCSAqIE9yaWdpbmFsbHksIHdlIGNoZWNrZWQgdGhlIHRhYmxlIHNpZ25hdHVyZSBmb3IgIlNTRFQiIG9yICJQU0RUIiBoZXJlLgotCSAqIE5leHQsIHdlIGFkZGVkIHN1cHBvcnQgZm9yIE9FTXggdGFibGVzLCBzaWduYXR1cmUgIk9FTSIuCi0JICogVmFsaWQgdGFibGVzIHdlcmUgZW5jb3VudGVyZWQgd2l0aCBhIG51bGwgc2lnbmF0dXJlLCBzbyB3ZSd2ZSBqdXN0Ci0JICogZ2l2ZW4gdXAgb24gdmFsaWRhdGluZyB0aGUgc2lnbmF0dXJlLCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIHdhc3RlCi0JICogb2YgY29kZS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHJlbW92ZWQgKDA1LzIwMDgpLgorCSAqIFZhbGlkYXRlIHRoZSBpbmNvbWluZyB0YWJsZSBzaWduYXR1cmUuCisJICoKKwkgKiAxKSBPcmlnaW5hbGx5LCB3ZSBjaGVja2VkIHRoZSB0YWJsZSBzaWduYXR1cmUgZm9yICJTU0RUIiBvciAiUFNEVCIuCisJICogMikgV2UgYWRkZWQgc3VwcG9ydCBmb3IgT0VNeCB0YWJsZXMsIHNpZ25hdHVyZSAiT0VNIi4KKwkgKiAzKSBWYWxpZCB0YWJsZXMgd2VyZSBlbmNvdW50ZXJlZCB3aXRoIGEgbnVsbCBzaWduYXR1cmUsIHNvIHdlIGp1c3QKKwkgKiAgICBnYXZlIHVwIG9uIHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSwgKDA1LzIwMDgpLgorCSAqIDQpIFdlIGVuY291bnRlcmVkIG5vbi1BTUwgdGFibGVzIHN1Y2ggYXMgdGhlIE1BRFQsIHdoaWNoIGNhdXNlZAorCSAqICAgIGludGVycHJldGVyIGVycm9ycyBhbmQga2VybmVsIGZhdWx0cy4gU28gbm93LCB3ZSBvbmNlIGFnYWluIGFsbG93CisJICogICAgb25seSAiU1NEVCIsICJPRU14IiwgYW5kIG5vdywgYWxzbyBhIG51bGwgc2lnbmF0dXJlLiAoMDUvMjAxMSkuCiAJICovCisJaWYgKCh0YWJsZV9kZXNjLT5wb2ludGVyLT5zaWduYXR1cmVbMF0gIT0gMHgwMCkgJiYKKwkgICAgKCFBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZV9kZXNjLT5wb2ludGVyLT5zaWduYXR1cmUsIEFDUElfU0lHX1NTRFQpKQorCSAgICAmJiAoQUNQSV9TVFJOQ01QKHRhYmxlX2Rlc2MtPnBvaW50ZXItPnNpZ25hdHVyZSwgIk9FTSIsIDMpKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJICAgICJUYWJsZSBoYXMgaW52YWxpZCBzaWduYXR1cmUgWyU0LjRzXSAoMHglOC44WCksIG11c3QgYmUgU1NEVCBvciBPRU14IiwKKwkJCSAgICBhY3BpX3V0X3ZhbGlkX2FjcGlfbmFtZSgqKHUzMiAqKXRhYmxlX2Rlc2MtPgorCQkJCQkJICAgIHBvaW50ZXItPgorCQkJCQkJICAgIHNpZ25hdHVyZSkgPyB0YWJsZV9kZXNjLT4KKwkJCSAgICBwb2ludGVyLT5zaWduYXR1cmUgOiAiPz8/PyIsCisJCQkgICAgKih1MzIgKil0YWJsZV9kZXNjLT5wb2ludGVyLT5zaWduYXR1cmUpKTsKKworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1NJR05BVFVSRSk7CisJfQogCiAJKHZvaWQpYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX1RBQkxFUyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvYXBlaS9LY29uZmlnCmluZGV4IGY3MzlhNzAuLmUzZjQ3ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZwpAQCAtMTAsOSArMTAsMTIgQEAKIAkgIGVycm9yIGluamVjdGlvbi4KIAogY29uZmlnIEFDUElfQVBFSV9HSEVTCi0JdHJpc3RhdGUgIkFQRUkgR2VuZXJpYyBIYXJkd2FyZSBFcnJvciBTb3VyY2UiCisJYm9vbCAiQVBFSSBHZW5lcmljIEhhcmR3YXJlIEVycm9yIFNvdXJjZSIKIAlkZXBlbmRzIG9uIEFDUElfQVBFSSAmJiBYODYKIAlzZWxlY3QgQUNQSV9IRUQKKwlzZWxlY3QgSVJRX1dPUksKKwlzZWxlY3QgTExJU1QKKwlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKIAloZWxwCiAJICBHZW5lcmljIEhhcmR3YXJlIEVycm9yIFNvdXJjZSBwcm92aWRlcyBhIHdheSB0byByZXBvcnQKIAkgIHBsYXRmb3JtIGhhcmR3YXJlIGVycm9ycyAoc3VjaCBhcyB0aGF0IGZyb20gY2hpcHNldCkuIEl0CkBAIC0zMCw2ICszMywxMyBAQAogCSAgUENJZSBBRVIgZXJyb3JzIG1heSBiZSByZXBvcnRlZCB2aWEgQVBFSSBmaXJtd2FyZSBmaXJzdCBtb2RlLgogCSAgVHVybiBvbiB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIGNvcnJlc3BvbmRpbmcgc3VwcG9ydC4KIAorY29uZmlnIEFDUElfQVBFSV9NRU1PUllfRkFJTFVSRQorCWJvb2wgIkFQRUkgbWVtb3J5IGVycm9yIHJlY292ZXJpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFDUElfQVBFSSAmJiBNRU1PUllfRkFJTFVSRQorCWhlbHAKKwkgIE1lbW9yeSBlcnJvcnMgbWF5IGJlIHJlcG9ydGVkIHZpYSBBUEVJIGZpcm13YXJlIGZpcnN0IG1vZGUuCisJICBUdXJuIG9uIHRoaXMgb3B0aW9uIHRvIGVuYWJsZSB0aGUgbWVtb3J5IHJlY292ZXJpbmcgc3VwcG9ydC4KKwogY29uZmlnIEFDUElfQVBFSV9FSU5KCiAJdHJpc3RhdGUgIkFQRUkgRXJyb3IgSU5KZWN0aW9uIChFSU5KKSIKIAlkZXBlbmRzIG9uIEFDUElfQVBFSSAmJiBERUJVR19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FwZWkvYXBlaS1iYXNlLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9hcGVpLWJhc2UuYwppbmRleCA0YTkwNGE0Li42MTU0MDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9hcGVpLWJhc2UuYworKysgYi9kcml2ZXJzL2FjcGkvYXBlaS9hcGVpLWJhc2UuYwpAQCAtMTU3LDkgKzE1NywxMCBAQAogICogSW50ZXJwcmV0IHRoZSBzcGVjaWZpZWQgYWN0aW9uLiBHbyB0aHJvdWdoIHdob2xlIGFjdGlvbiB0YWJsZSwKICAqIGV4ZWN1dGUgYWxsIGluc3RydWN0aW9ucyBiZWxvbmcgdG8gdGhlIGFjdGlvbi4KICAqLwotaW50IGFwZWlfZXhlY19ydW4oc3RydWN0IGFwZWlfZXhlY19jb250ZXh0ICpjdHgsIHU4IGFjdGlvbikKK2ludCBfX2FwZWlfZXhlY19ydW4oc3RydWN0IGFwZWlfZXhlY19jb250ZXh0ICpjdHgsIHU4IGFjdGlvbiwKKwkJICAgIGJvb2wgb3B0aW9uYWwpCiB7Ci0JaW50IHJjOworCWludCByYyA9IC1FTk9FTlQ7CiAJdTMyIGksIGlwOwogCXN0cnVjdCBhY3BpX3doZWFfaGVhZGVyICplbnRyeTsKIAlhcGVpX2V4ZWNfaW5zX2Z1bmNfdCBydW47CkBAIC0xOTgsOSArMTk5LDkgQEAKIAkJCWdvdG8gcmV3aW5kOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiAhb3B0aW9uYWwgJiYgcmMgPCAwID8gcmMgOiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYXBlaV9leGVjX3J1bik7CitFWFBPUlRfU1lNQk9MX0dQTChfX2FwZWlfZXhlY19ydW4pOwogCiB0eXBlZGVmIGludCAoKmFwZWlfZXhlY19lbnRyeV9mdW5jX3QpKHN0cnVjdCBhcGVpX2V4ZWNfY29udGV4dCAqY3R4LAogCQkJCSAgICAgIHN0cnVjdCBhY3BpX3doZWFfaGVhZGVyICplbnRyeSwKQEAgLTYwMywzICs2MDQsMjkgQEAKIAlyZXR1cm4gZGFwZWk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhcGVpX2dldF9kZWJ1Z2ZzX2Rpcik7CisKK2ludCBhcGVpX29zY19zZXR1cCh2b2lkKQoreworCXN0YXRpYyB1OCB3aGVhX3V1aWRfc3RyW10gPSAiZWQ4NTVlMGMtNmM5MC00N2JmLWE2MmEtMjZkZTBmYzVhZDVjIjsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdTMyIGNhcGJ1ZlszXTsKKwlzdHJ1Y3QgYWNwaV9vc2NfY29udGV4dCBjb250ZXh0ID0geworCQkudXVpZF9zdHIJPSB3aGVhX3V1aWRfc3RyLAorCQkucmV2CQk9IDEsCisJCS5jYXAubGVuZ3RoCT0gc2l6ZW9mKGNhcGJ1ZiksCisJCS5jYXAucG9pbnRlcgk9IGNhcGJ1ZiwKKwl9OworCisJY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IE9TQ19RVUVSWV9FTkFCTEU7CisJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdID0gMTsKKwljYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSAwOworCisJaWYgKEFDUElfRkFJTFVSRShhY3BpX2dldF9oYW5kbGUoTlVMTCwgIlxcX1NCIiwgJmhhbmRsZSkpCisJICAgIHx8IEFDUElfRkFJTFVSRShhY3BpX3J1bl9vc2MoaGFuZGxlLCAmY29udGV4dCkpKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlIHsKKwkJa2ZyZWUoY29udGV4dC5yZXQucG9pbnRlcik7CisJCXJldHVybiAwOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFwZWlfb3NjX3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2FwZWktaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9hcGVpL2FwZWktaW50ZXJuYWwuaAppbmRleCBlZjA1ODFmLi5mNTcwNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9hcGVpLWludGVybmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvYXBlaS1pbnRlcm5hbC5oCkBAIC01MCw3ICs1MCwxOCBAQAogCXJldHVybiBjdHgtPnZhbHVlOwogfQogCi1pbnQgYXBlaV9leGVjX3J1bihzdHJ1Y3QgYXBlaV9leGVjX2NvbnRleHQgKmN0eCwgdTggYWN0aW9uKTsKK2ludCBfX2FwZWlfZXhlY19ydW4oc3RydWN0IGFwZWlfZXhlY19jb250ZXh0ICpjdHgsIHU4IGFjdGlvbiwgYm9vbCBvcHRpb25hbCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwZWlfZXhlY19ydW4oc3RydWN0IGFwZWlfZXhlY19jb250ZXh0ICpjdHgsIHU4IGFjdGlvbikKK3sKKwlyZXR1cm4gX19hcGVpX2V4ZWNfcnVuKGN0eCwgYWN0aW9uLCAwKTsKK30KKworLyogSXQgaXMgb3B0aW9uYWwgd2hldGhlciB0aGUgZmlybXdhcmUgcHJvdmlkZXMgdGhlIGFjdGlvbiAqLworc3RhdGljIGlubGluZSBpbnQgYXBlaV9leGVjX3J1bl9vcHRpb25hbChzdHJ1Y3QgYXBlaV9leGVjX2NvbnRleHQgKmN0eCwgdTggYWN0aW9uKQoreworCXJldHVybiBfX2FwZWlfZXhlY19ydW4oY3R4LCBhY3Rpb24sIDEpOworfQogCiAvKiBDb21tb24gaW5zdHJ1Y3Rpb24gaW1wbGVtZW50YXRpb24gKi8KIApAQCAtMTEzLDQgKzEyNCw2IEBACiAJCQljb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICplc3RhdHVzKTsKIGludCBhcGVpX2VzdGF0dXNfY2hlY2tfaGVhZGVyKGNvbnN0IHN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKmVzdGF0dXMpOwogaW50IGFwZWlfZXN0YXR1c19jaGVjayhjb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICplc3RhdHVzKTsKKworaW50IGFwZWlfb3NjX3NldHVwKHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9laW5qLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9laW5qLmMKaW5kZXggZjc0YjJlYS4uNTg5Yjk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZWluai5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2VpbmouYwpAQCAtNDYsNyArNDYsOCBAQAogICogU29tZSBCSU9TZXMgYWxsb3cgcGFyYW1ldGVycyB0byB0aGUgU0VUX0VSUk9SX1RZUEUgZW50cmllcyBpbiB0aGUKICAqIEVJTkogdGFibGUgdGhyb3VnaCBhbiB1bnB1Ymxpc2hlZCBleHRlbnNpb24uIFVzZSB3aXRoIGNhdXRpb24gYXMKICAqIG1vc3Qgd2lsbCBpZ25vcmUgdGhlIHBhcmFtZXRlciBhbmQgbWFrZSB0aGVpciBvd24gY2hvaWNlIG9mIGFkZHJlc3MKLSAqIGZvciBlcnJvciBpbmplY3Rpb24uCisgKiBmb3IgZXJyb3IgaW5qZWN0aW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCBvbmx5IGlmCisgKiBwYXJhbV9leHRlbnNpb24gbW9kdWxlIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQuCiAgKi8KIHN0cnVjdCBlaW5qX3BhcmFtZXRlciB7CiAJdTY0IHR5cGU7CkBAIC02NSw2ICs2Niw5IEBACiAJKChzdHJ1Y3QgYWNwaV93aGVhX2hlYWRlciAqKSgoY2hhciAqKSh0YWIpICsJCQlcCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9laW5qKSkpCiAKK3N0YXRpYyBib29sIHBhcmFtX2V4dGVuc2lvbjsKK21vZHVsZV9wYXJhbShwYXJhbV9leHRlbnNpb24sIGJvb2wsIDApOworCiBzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfZWluaiAqZWlual90YWI7CiAKIHN0YXRpYyBzdHJ1Y3QgYXBlaV9yZXNvdXJjZXMgZWlual9yZXNvdXJjZXM7CkBAIC0yODUsNyArMjg5LDcgQEAKIAogCWVpbmpfZXhlY19jdHhfaW5pdCgmY3R4KTsKIAotCXJjID0gYXBlaV9leGVjX3J1bigmY3R4LCBBQ1BJX0VJTkpfQkVHSU5fT1BFUkFUSU9OKTsKKwlyYyA9IGFwZWlfZXhlY19ydW5fb3B0aW9uYWwoJmN0eCwgQUNQSV9FSU5KX0JFR0lOX09QRVJBVElPTik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJYXBlaV9leGVjX2N0eF9zZXRfaW5wdXQoJmN0eCwgdHlwZSk7CkBAIC0zMjMsNyArMzI3LDcgQEAKIAlyYyA9IF9fZWlual9lcnJvcl90cmlnZ2VyKHRyaWdnZXJfcGFkZHIpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCXJjID0gYXBlaV9leGVjX3J1bigmY3R4LCBBQ1BJX0VJTkpfRU5EX09QRVJBVElPTik7CisJcmMgPSBhcGVpX2V4ZWNfcnVuX29wdGlvbmFsKCZjdHgsIEFDUElfRUlOSl9FTkRfT1BFUkFUSU9OKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTQ4OSwxNCArNDkzLDYgQEAKIAkJCQkgICAgIGVpbmpfZGVidWdfZGlyLCBOVUxMLCAmZXJyb3JfdHlwZV9mb3BzKTsKIAlpZiAoIWZlbnRyeSkKIAkJZ290byBlcnJfY2xlYW51cDsKLQlmZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV94NjQoInBhcmFtMSIsIFNfSVJVU1IgfCBTX0lXVVNSLAotCQkJCSAgICBlaW5qX2RlYnVnX2RpciwgJmVycm9yX3BhcmFtMSk7Ci0JaWYgKCFmZW50cnkpCi0JCWdvdG8gZXJyX2NsZWFudXA7Ci0JZmVudHJ5ID0gZGVidWdmc19jcmVhdGVfeDY0KCJwYXJhbTIiLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCQkgICAgZWlual9kZWJ1Z19kaXIsICZlcnJvcl9wYXJhbTIpOwotCWlmICghZmVudHJ5KQotCQlnb3RvIGVycl9jbGVhbnVwOwogCWZlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVycm9yX2luamVjdCIsIFNfSVdVU1IsCiAJCQkJICAgICBlaW5qX2RlYnVnX2RpciwgTlVMTCwgJmVycm9yX2luamVjdF9mb3BzKTsKIAlpZiAoIWZlbnRyeSkKQEAgLTUxMywxMiArNTA5LDIzIEBACiAJcmMgPSBhcGVpX2V4ZWNfcHJlX21hcF9nYXJzKCZjdHgpOwogCWlmIChyYykKIAkJZ290byBlcnJfcmVsZWFzZTsKLQlwYXJhbV9wYWRkciA9IGVpbmpfZ2V0X3BhcmFtZXRlcl9hZGRyZXNzKCk7Ci0JaWYgKHBhcmFtX3BhZGRyKSB7Ci0JCWVpbmpfcGFyYW0gPSBpb3JlbWFwKHBhcmFtX3BhZGRyLCBzaXplb2YoKmVpbmpfcGFyYW0pKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlpZiAoIWVpbmpfcGFyYW0pCi0JCQlnb3RvIGVycl91bm1hcDsKKwlpZiAocGFyYW1fZXh0ZW5zaW9uKSB7CisJCXBhcmFtX3BhZGRyID0gZWlual9nZXRfcGFyYW1ldGVyX2FkZHJlc3MoKTsKKwkJaWYgKHBhcmFtX3BhZGRyKSB7CisJCQllaW5qX3BhcmFtID0gaW9yZW1hcChwYXJhbV9wYWRkciwgc2l6ZW9mKCplaW5qX3BhcmFtKSk7CisJCQlyYyA9IC1FTk9NRU07CisJCQlpZiAoIWVpbmpfcGFyYW0pCisJCQkJZ290byBlcnJfdW5tYXA7CisJCQlmZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV94NjQoInBhcmFtMSIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJCQkJICAgIGVpbmpfZGVidWdfZGlyLCAmZXJyb3JfcGFyYW0xKTsKKwkJCWlmICghZmVudHJ5KQorCQkJCWdvdG8gZXJyX3VubWFwOworCQkJZmVudHJ5ID0gZGVidWdmc19jcmVhdGVfeDY0KCJwYXJhbTIiLCBTX0lSVVNSIHwgU19JV1VTUiwKKwkJCQkJCSAgICBlaW5qX2RlYnVnX2RpciwgJmVycm9yX3BhcmFtMik7CisJCQlpZiAoIWZlbnRyeSkKKwkJCQlnb3RvIGVycl91bm1hcDsKKwkJfSBlbHNlCisJCQlwcl93YXJuKEVJTkpfUEZYICJQYXJhbWV0ZXIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAl9CiAKIAlwcl9pbmZvKEVJTkpfUEZYICJFcnJvciBJTkplY3Rpb24gaXMgaW5pdGlhbGl6ZWQuXG4iKTsKQEAgLTUyNiw2ICs1MzMsOCBAQAogCXJldHVybiAwOwogCiBlcnJfdW5tYXA6CisJaWYgKGVpbmpfcGFyYW0pCisJCWlvdW5tYXAoZWlual9wYXJhbSk7CiAJYXBlaV9leGVjX3Bvc3RfdW5tYXBfZ2FycygmY3R4KTsKIGVycl9yZWxlYXNlOgogCWFwZWlfcmVzb3VyY2VzX3JlbGVhc2UoJmVpbmpfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QtZGJnLmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LWRiZy5jCmluZGV4IGE0Y2ZiNjQuLjkwMzU0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QtZGJnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC1kYmcuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIEVSU1RfREJHX1BGWAkJCSJFUlNUIERCRzogIgogCi0jZGVmaW5lIEVSU1RfREJHX1JFQ09SRF9MRU5fTUFYCQk0MDk2CisjZGVmaW5lIEVSU1RfREJHX1JFQ09SRF9MRU5fTUFYCQkweDQwMDAKIAogc3RhdGljIHZvaWQgKmVyc3RfZGJnX2J1ZjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXJzdF9kYmdfYnVmX2xlbjsKQEAgLTIxMyw2ICsyMTMsMTAgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgZXJzdF9kYmdfaW5pdCh2b2lkKQogeworCWlmIChlcnN0X2Rpc2FibGUpIHsKKwkJcHJfaW5mbyhFUlNUX0RCR19QRlggIkVSU1Qgc3VwcG9ydCBpcyBkaXNhYmxlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJmVyc3RfZGJnX2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwppbmRleCBlNmNlZjhlLi4yY2E1OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAlpbnQgcmM7CiAKIAllcnN0X2V4ZWNfY3R4X2luaXQoJmN0eCk7Ci0JcmMgPSBhcGVpX2V4ZWNfcnVuKCZjdHgsIEFDUElfRVJTVF9CRUdJTl9XUklURSk7CisJcmMgPSBhcGVpX2V4ZWNfcnVuX29wdGlvbmFsKCZjdHgsIEFDUElfRVJTVF9CRUdJTl9XUklURSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJYXBlaV9leGVjX2N0eF9zZXRfaW5wdXQoJmN0eCwgb2Zmc2V0KTsKQEAgLTY2Niw3ICs2NjYsNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCXZhbCA9IGFwZWlfZXhlY19jdHhfZ2V0X291dHB1dCgmY3R4KTsKLQlyYyA9IGFwZWlfZXhlY19ydW4oJmN0eCwgQUNQSV9FUlNUX0VORCk7CisJcmMgPSBhcGVpX2V4ZWNfcnVuX29wdGlvbmFsKCZjdHgsIEFDUElfRVJTVF9FTkQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC02ODEsNyArNjgxLDcgQEAKIAlpbnQgcmM7CiAKIAllcnN0X2V4ZWNfY3R4X2luaXQoJmN0eCk7Ci0JcmMgPSBhcGVpX2V4ZWNfcnVuKCZjdHgsIEFDUElfRVJTVF9CRUdJTl9SRUFEKTsKKwlyYyA9IGFwZWlfZXhlY19ydW5fb3B0aW9uYWwoJmN0eCwgQUNQSV9FUlNUX0JFR0lOX1JFQUQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCWFwZWlfZXhlY19jdHhfc2V0X2lucHV0KCZjdHgsIG9mZnNldCk7CkBAIC03MDksNyArNzA5LDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAl2YWwgPSBhcGVpX2V4ZWNfY3R4X2dldF9vdXRwdXQoJmN0eCk7Ci0JcmMgPSBhcGVpX2V4ZWNfcnVuKCZjdHgsIEFDUElfRVJTVF9FTkQpOworCXJjID0gYXBlaV9leGVjX3J1bl9vcHRpb25hbCgmY3R4LCBBQ1BJX0VSU1RfRU5EKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtNzI0LDcgKzcyNCw3IEBACiAJaW50IHJjOwogCiAJZXJzdF9leGVjX2N0eF9pbml0KCZjdHgpOwotCXJjID0gYXBlaV9leGVjX3J1bigmY3R4LCBBQ1BJX0VSU1RfQkVHSU5fQ0xFQVIpOworCXJjID0gYXBlaV9leGVjX3J1bl9vcHRpb25hbCgmY3R4LCBBQ1BJX0VSU1RfQkVHSU5fQ0xFQVIpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCWFwZWlfZXhlY19jdHhfc2V0X2lucHV0KCZjdHgsIHJlY29yZF9pZCk7CkBAIC03NDgsNyArNzQ4LDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAl2YWwgPSBhcGVpX2V4ZWNfY3R4X2dldF9vdXRwdXQoJmN0eCk7Ci0JcmMgPSBhcGVpX2V4ZWNfcnVuKCZjdHgsIEFDUElfRVJTVF9FTkQpOworCXJjID0gYXBlaV9leGVjX3J1bl9vcHRpb25hbCgmY3R4LCBBQ1BJX0VSU1RfRU5EKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtOTMyLDggKzkzMiwxMSBAQAogc3RhdGljIGludCBlcnN0X29wZW5fcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKIHN0YXRpYyBpbnQgZXJzdF9jbG9zZV9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOwogc3RhdGljIHNzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKLQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZSk7Ci1zdGF0aWMgdTY0IGVyc3Rfd3JpdGVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgc2l6ZV90IHNpemUpOworCQkJICAgc3RydWN0IHRpbWVzcGVjICp0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CitzdGF0aWMgdTY0IGVyc3Rfd3JpdGVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdW5zaWduZWQgaW50IHBhcnQsCisJCSAgICAgICBzaXplX3Qgc2l6ZSwgc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworc3RhdGljIGludCBlcnN0X2NsZWFyZXIoZW51bSBwc3RvcmVfdHlwZV9pZCB0eXBlLCB1NjQgaWQsCisJCQlzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcHN0b3JlX2luZm8gZXJzdF9pbmZvID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTk0Miw3ICs5NDUsNyBAQAogCS5jbG9zZQkJPSBlcnN0X2Nsb3NlX3BzdG9yZSwKIAkucmVhZAkJPSBlcnN0X3JlYWRlciwKIAkud3JpdGUJCT0gZXJzdF93cml0ZXIsCi0JLmVyYXNlCQk9IGVyc3RfY2xlYXIKKwkuZXJhc2UJCT0gZXJzdF9jbGVhcmVyCiB9OwogCiAjZGVmaW5lIENQRVJfQ1JFQVRPUl9QU1RPUkUJCQkJCQlcCkBAIC05ODMsNyArOTg2LDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKLQkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKKwkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZSwgc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCiB7CiAJaW50IHJjOwogCXNzaXplX3QgbGVuID0gMDsKQEAgLTEwMzcsNyArMTA0MCw4IEBACiAJcmV0dXJuIChyYyA8IDApID8gcmMgOiAobGVuIC0gc2l6ZW9mKCpyY2QpKTsKIH0KIAotc3RhdGljIHU2NCBlcnN0X3dyaXRlcihlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHNpemVfdCBzaXplKQorc3RhdGljIHU2NCBlcnN0X3dyaXRlcihlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHVuc2lnbmVkIGludCBwYXJ0LAorCQkgICAgICAgc2l6ZV90IHNpemUsIHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQogewogCXN0cnVjdCBjcGVyX3BzdG9yZV9yZWNvcmQgKnJjZCA9IChzdHJ1Y3QgY3Blcl9wc3RvcmVfcmVjb3JkICopCiAJCQkJCShlcnN0X2luZm8uYnVmIC0gc2l6ZW9mKCpyY2QpKTsKQEAgLTEwODAsNiArMTA4NCwxMiBAQAogCXJldHVybiByY2QtPmhkci5yZWNvcmRfaWQ7CiB9CiAKK3N0YXRpYyBpbnQgZXJzdF9jbGVhcmVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLAorCQkJc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJcmV0dXJuIGVyc3RfY2xlYXIoaWQpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBlcnN0X2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jIGIvZHJpdmVycy9hY3BpL2FwZWkvZ2hlcy5jCmluZGV4IGY3MDNiMjguLjA3ODRmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL2doZXMuYworKysgYi9kcml2ZXJzL2FjcGkvYXBlaS9naGVzLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEdlbmVyaWMgSGFyZHdhcmUgRXJyb3IgU291cmNlLCBwbGVhc2UKICAqIHJlZmVyIHRvIEFDUEkgU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDQuMCwgc2VjdGlvbiAxNy4zLjIuNgogICoKLSAqIENvcHlyaWdodCAyMDEwIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgMjAxMCwyMDExIEludGVsIENvcnAuCiAgKiAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDIsNiArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycV93b3JrLmg+CisjaW5jbHVkZSA8bGludXgvbGxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5hbGxvYy5oPgogI2luY2x1ZGUgPGFjcGkvYXBlaS5oPgogI2luY2x1ZGUgPGFjcGkvYXRvbWljaW8uaD4KICNpbmNsdWRlIDxhY3BpL2hlZC5oPgpAQCAtNTMsNiArNTYsMzAgQEAKICNkZWZpbmUgR0hFU19QRlgJIkdIRVM6ICIKIAogI2RlZmluZSBHSEVTX0VTVEFUVVNfTUFYX1NJWkUJCTY1NTM2CisjZGVmaW5lIEdIRVNfRVNPVVJDRV9QUkVBTExPQ19NQVhfU0laRQk2NTUzNgorCisjZGVmaW5lIEdIRVNfRVNUQVRVU19QT09MX01JTl9BTExPQ19PUkRFUiAzCisKKy8qIFRoaXMgaXMganVzdCBhbiBlc3RpbWF0aW9uIGZvciBtZW1vcnkgcG9vbCBhbGxvY2F0aW9uICovCisjZGVmaW5lIEdIRVNfRVNUQVRVU19DQUNIRV9BVkdfU0laRQk1MTIKKworI2RlZmluZSBHSEVTX0VTVEFUVVNfQ0FDSEVTX1NJWkUJNAorCisjZGVmaW5lIEdIRVNfRVNUQVRVU19JTl9DQUNIRV9NQVhfTlNFQwkxMDAwMDAwMDAwMFVMTAorLyogUHJldmVudCB0b28gbWFueSBjYWNoZXMgYXJlIGFsbG9jYXRlZCBiZWNhdXNlIG9mIFJDVSAqLworI2RlZmluZSBHSEVTX0VTVEFUVVNfQ0FDSEVfQUxMT0NFRF9NQVgJKEdIRVNfRVNUQVRVU19DQUNIRVNfU0laRSAqIDMgLyAyKQorCisjZGVmaW5lIEdIRVNfRVNUQVRVU19DQUNIRV9MRU4oZXN0YXR1c19sZW4pCQkJXAorCShzaXplb2Yoc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSkgKyAoZXN0YXR1c19sZW4pKQorI2RlZmluZSBHSEVTX0VTVEFUVVNfRlJPTV9DQUNIRShlc3RhdHVzX2NhY2hlKQkJCVwKKwkoKHN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKikJCQlcCisJICgoc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqKShlc3RhdHVzX2NhY2hlKSArIDEpKQorCisjZGVmaW5lIEdIRVNfRVNUQVRVU19OT0RFX0xFTihlc3RhdHVzX2xlbikJCQlcCisJKHNpemVvZihzdHJ1Y3QgZ2hlc19lc3RhdHVzX25vZGUpICsgKGVzdGF0dXNfbGVuKSkKKyNkZWZpbmUgR0hFU19FU1RBVFVTX0ZST01fTk9ERShlc3RhdHVzX25vZGUpCQkJCVwKKwkoKHN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKikJCQkJXAorCSAoKHN0cnVjdCBnaGVzX2VzdGF0dXNfbm9kZSAqKShlc3RhdHVzX25vZGUpICsgMSkpCiAKIC8qCiAgKiBPbmUgc3RydWN0IGdoZXMgaXMgY3JlYXRlZCBmb3IgZWFjaCBnZW5lcmljIGhhcmR3YXJlIGVycm9yIHNvdXJjZS4KQEAgLTc3LDYgKzEwNCwyMiBAQAogCX07CiB9OwogCitzdHJ1Y3QgZ2hlc19lc3RhdHVzX25vZGUgeworCXN0cnVjdCBsbGlzdF9ub2RlIGxsbm9kZTsKKwlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKmdlbmVyaWM7Cit9OworCitzdHJ1Y3QgZ2hlc19lc3RhdHVzX2NhY2hlIHsKKwl1MzIgZXN0YXR1c19sZW47CisJYXRvbWljX3QgY291bnQ7CisJc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljICpnZW5lcmljOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lX2luOworCXN0cnVjdCByY3VfaGVhZCByY3U7Cit9OworCitpbnQgZ2hlc19kaXNhYmxlOworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGUsIGdoZXNfZGlzYWJsZSwgYm9vbCwgMCk7CisKIHN0YXRpYyBpbnQgZ2hlc19wYW5pY190aW1lb3V0CV9fcmVhZF9tb3N0bHkgPSAzMDsKIAogLyoKQEAgLTEyMSw2ICsxNjQsMjIgQEAKIHN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGdoZXNfaW9yZW1hcF9sb2NrX25taSk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdoZXNfaW9yZW1hcF9sb2NrX2lycSk7CiAKKy8qCisgKiBwcmludGsgaXMgbm90IHNhZmUgaW4gTk1JIGNvbnRleHQuICBTbyBpbiBOTUkgaGFuZGxlciwgd2UgYWxsb2NhdGUKKyAqIHJlcXVpcmVkIG1lbW9yeSBmcm9tIGxvY2stbGVzcyBtZW1vcnkgYWxsb2NhdG9yCisgKiAoZ2hlc19lc3RhdHVzX3Bvb2wpLCBzYXZlIGVzdGF0dXMgaW50byBpdCwgcHV0IHRoZW0gaW50byBsb2NrLWxlc3MKKyAqIGxpc3QgKGdoZXNfZXN0YXR1c19sbGlzdCksIHRoZW4gZGVsYXkgcHJpbnRrIGludG8gSVJRIGNvbnRleHQgdmlhCisgKiBpcnFfd29yayAoZ2hlc19wcm9jX2lycV93b3JrKS4gIGdoZXNfZXN0YXR1c19zaXplX3JlcXVlc3QgcmVjb3JkCisgKiByZXF1aXJlZCBwb29sIHNpemUgYnkgYWxsIE5NSSBlcnJvciBzb3VyY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2VuX3Bvb2wgKmdoZXNfZXN0YXR1c19wb29sOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2hlc19lc3RhdHVzX3Bvb2xfc2l6ZV9yZXF1ZXN0Oworc3RhdGljIHN0cnVjdCBsbGlzdF9oZWFkIGdoZXNfZXN0YXR1c19sbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgaXJxX3dvcmsgZ2hlc19wcm9jX2lycV93b3JrOworCitzdHJ1Y3QgZ2hlc19lc3RhdHVzX2NhY2hlICpnaGVzX2VzdGF0dXNfY2FjaGVzW0dIRVNfRVNUQVRVU19DQUNIRVNfU0laRV07CitzdGF0aWMgYXRvbWljX3QgZ2hlc19lc3RhdHVzX2NhY2hlX2FsbG9jZWQ7CisKIHN0YXRpYyBpbnQgZ2hlc19pb3JlbWFwX2luaXQodm9pZCkKIHsKIAlnaGVzX2lvcmVtYXBfYXJlYSA9IF9fZ2V0X3ZtX2FyZWEoUEFHRV9TSVpFICogR0hFU19JT1JFTUFQX1BBR0VTLApAQCAtMTgwLDYgKzIzOSw1NSBAQAogCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CiB9CiAKK3N0YXRpYyBpbnQgZ2hlc19lc3RhdHVzX3Bvb2xfaW5pdCh2b2lkKQoreworCWdoZXNfZXN0YXR1c19wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKEdIRVNfRVNUQVRVU19QT09MX01JTl9BTExPQ19PUkRFUiwgLTEpOworCWlmICghZ2hlc19lc3RhdHVzX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnaGVzX2VzdGF0dXNfcG9vbF9mcmVlX2NodW5rX3BhZ2Uoc3RydWN0IGdlbl9wb29sICpwb29sLAorCQkJCQkgICAgICBzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmsgKmNodW5rLAorCQkJCQkgICAgICB2b2lkICpkYXRhKQoreworCWZyZWVfcGFnZShjaHVuay0+c3RhcnRfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGdoZXNfZXN0YXR1c19wb29sX2V4aXQodm9pZCkKK3sKKwlnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayhnaGVzX2VzdGF0dXNfcG9vbCwKKwkJCQlnaGVzX2VzdGF0dXNfcG9vbF9mcmVlX2NodW5rX3BhZ2UsIE5VTEwpOworCWdlbl9wb29sX2Rlc3Ryb3koZ2hlc19lc3RhdHVzX3Bvb2wpOworfQorCitzdGF0aWMgaW50IGdoZXNfZXN0YXR1c19wb29sX2V4cGFuZCh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGksIHBhZ2VzLCBzaXplLCBhZGRyOworCWludCByZXQ7CisKKwlnaGVzX2VzdGF0dXNfcG9vbF9zaXplX3JlcXVlc3QgKz0gUEFHRV9BTElHTihsZW4pOworCXNpemUgPSBnZW5fcG9vbF9zaXplKGdoZXNfZXN0YXR1c19wb29sKTsKKwlpZiAoc2l6ZSA+PSBnaGVzX2VzdGF0dXNfcG9vbF9zaXplX3JlcXVlc3QpCisJCXJldHVybiAwOworCXBhZ2VzID0gKGdoZXNfZXN0YXR1c19wb29sX3NpemVfcmVxdWVzdCAtIHNpemUpIC8gUEFHRV9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghYWRkcikKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSBnZW5fcG9vbF9hZGQoZ2hlc19lc3RhdHVzX3Bvb2wsIGFkZHIsIFBBR0VfU0laRSwgLTEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2hlc19lc3RhdHVzX3Bvb2xfc2hyaW5rKHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWdoZXNfZXN0YXR1c19wb29sX3NpemVfcmVxdWVzdCAtPSBQQUdFX0FMSUdOKGxlbik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZ2hlcyAqZ2hlc19uZXcoc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljICpnZW5lcmljKQogewogCXN0cnVjdCBnaGVzICpnaGVzOwpAQCAtMzQxLDQzICs0NDksMTk2IEBACiAJZ2hlcy0+ZmxhZ3MgJj0gfkdIRVNfVE9fQ0xFQVI7CiB9CiAKLXN0YXRpYyB2b2lkIGdoZXNfZG9fcHJvYyhzdHJ1Y3QgZ2hlcyAqZ2hlcykKK3N0YXRpYyB2b2lkIGdoZXNfZG9fcHJvYyhjb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICplc3RhdHVzKQogewotCWludCBzZXYsIHByb2Nlc3NlZCA9IDA7CisJaW50IHNldiwgc2VjX3NldjsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfZGF0YSAqZ2RhdGE7CiAKLQlzZXYgPSBnaGVzX3NldmVyaXR5KGdoZXMtPmVzdGF0dXMtPmVycm9yX3NldmVyaXR5KTsKLQlhcGVpX2VzdGF0dXNfZm9yX2VhY2hfc2VjdGlvbihnaGVzLT5lc3RhdHVzLCBnZGF0YSkgewotI2lmZGVmIENPTkZJR19YODZfTUNFCisJc2V2ID0gZ2hlc19zZXZlcml0eShlc3RhdHVzLT5lcnJvcl9zZXZlcml0eSk7CisJYXBlaV9lc3RhdHVzX2Zvcl9lYWNoX3NlY3Rpb24oZXN0YXR1cywgZ2RhdGEpIHsKKwkJc2VjX3NldiA9IGdoZXNfc2V2ZXJpdHkoZ2RhdGEtPmVycm9yX3NldmVyaXR5KTsKIAkJaWYgKCF1dWlkX2xlX2NtcCgqKHV1aWRfbGUgKilnZGF0YS0+c2VjdGlvbl90eXBlLAogCQkJCSBDUEVSX1NFQ19QTEFURk9STV9NRU0pKSB7Ci0JCQlhcGVpX21jZV9yZXBvcnRfbWVtX2Vycm9yKAotCQkJCXNldiA9PSBHSEVTX1NFVl9DT1JSRUNURUQsCi0JCQkJKHN0cnVjdCBjcGVyX3NlY19tZW1fZXJyICopKGdkYXRhKzEpKTsKLQkJCXByb2Nlc3NlZCA9IDE7Ci0JCX0KKwkJCXN0cnVjdCBjcGVyX3NlY19tZW1fZXJyICptZW1fZXJyOworCQkJbWVtX2VyciA9IChzdHJ1Y3QgY3Blcl9zZWNfbWVtX2VyciAqKShnZGF0YSsxKTsKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorCQkJYXBlaV9tY2VfcmVwb3J0X21lbV9lcnJvcihzZXYgPT0gR0hFU19TRVZfQ09SUkVDVEVELAorCQkJCQkJICBtZW1fZXJyKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BQ1BJX0FQRUlfTUVNT1JZX0ZBSUxVUkUKKwkJCWlmIChzZXYgPT0gR0hFU19TRVZfUkVDT1ZFUkFCTEUgJiYKKwkJCSAgICBzZWNfc2V2ID09IEdIRVNfU0VWX1JFQ09WRVJBQkxFICYmCisJCQkgICAgbWVtX2Vyci0+dmFsaWRhdGlvbl9iaXRzICYgQ1BFUl9NRU1fVkFMSURfUEhZU0lDQUxfQUREUkVTUykgeworCQkJCXVuc2lnbmVkIGxvbmcgcGZuOworCQkJCXBmbiA9IG1lbV9lcnItPnBoeXNpY2FsX2FkZHIgPj4gUEFHRV9TSElGVDsKKwkJCQltZW1vcnlfZmFpbHVyZV9xdWV1ZShwZm4sIDAsIDApOworCQkJfQorI2VuZGlmCisJCX0KIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdoZXNfcHJpbnRfZXN0YXR1cyhjb25zdCBjaGFyICpwZngsIHN0cnVjdCBnaGVzICpnaGVzKQorc3RhdGljIHZvaWQgX19naGVzX3ByaW50X2VzdGF0dXMoY29uc3QgY2hhciAqcGZ4LAorCQkJCSBjb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKmdlbmVyaWMsCisJCQkJIGNvbnN0IHN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKmVzdGF0dXMpCiB7Ci0JLyogTm90IG1vcmUgdGhhbiAyIG1lc3NhZ2VzIGV2ZXJ5IDUgc2Vjb25kcyAqLwotCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJhdGVsaW1pdCwgNSpIWiwgMik7Ci0KIAlpZiAocGZ4ID09IE5VTEwpIHsKLQkJaWYgKGdoZXNfc2V2ZXJpdHkoZ2hlcy0+ZXN0YXR1cy0+ZXJyb3Jfc2V2ZXJpdHkpIDw9CisJCWlmIChnaGVzX3NldmVyaXR5KGVzdGF0dXMtPmVycm9yX3NldmVyaXR5KSA8PQogCQkgICAgR0hFU19TRVZfQ09SUkVDVEVEKQogCQkJcGZ4ID0gS0VSTl9XQVJOSU5HIEhXX0VSUjsKIAkJZWxzZQogCQkJcGZ4ID0gS0VSTl9FUlIgSFdfRVJSOwogCX0KLQlpZiAoX19yYXRlbGltaXQoJnJhdGVsaW1pdCkpIHsKLQkJcHJpbnRrKAotCSIlcyIiSGFyZHdhcmUgZXJyb3IgZnJvbSBBUEVJIEdlbmVyaWMgSGFyZHdhcmUgRXJyb3IgU291cmNlOiAlZFxuIiwKLQlwZngsIGdoZXMtPmdlbmVyaWMtPmhlYWRlci5zb3VyY2VfaWQpOwotCQlhcGVpX2VzdGF0dXNfcHJpbnQocGZ4LCBnaGVzLT5lc3RhdHVzKTsKKwlwcmludGsoIiVzIiJIYXJkd2FyZSBlcnJvciBmcm9tIEFQRUkgR2VuZXJpYyBIYXJkd2FyZSBFcnJvciBTb3VyY2U6ICVkXG4iLAorCSAgICAgICBwZngsIGdlbmVyaWMtPmhlYWRlci5zb3VyY2VfaWQpOworCWFwZWlfZXN0YXR1c19wcmludChwZngsIGVzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGdoZXNfcHJpbnRfZXN0YXR1cyhjb25zdCBjaGFyICpwZngsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKmdlbmVyaWMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICplc3RhdHVzKQoreworCS8qIE5vdCBtb3JlIHRoYW4gMiBtZXNzYWdlcyBldmVyeSA1IHNlY29uZHMgKi8KKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShyYXRlbGltaXRfY29ycmVjdGVkLCA1KkhaLCAyKTsKKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShyYXRlbGltaXRfdW5jb3JyZWN0ZWQsIDUqSFosIDIpOworCXN0cnVjdCByYXRlbGltaXRfc3RhdGUgKnJhdGVsaW1pdDsKKworCWlmIChnaGVzX3NldmVyaXR5KGVzdGF0dXMtPmVycm9yX3NldmVyaXR5KSA8PSBHSEVTX1NFVl9DT1JSRUNURUQpCisJCXJhdGVsaW1pdCA9ICZyYXRlbGltaXRfY29ycmVjdGVkOworCWVsc2UKKwkJcmF0ZWxpbWl0ID0gJnJhdGVsaW1pdF91bmNvcnJlY3RlZDsKKwlpZiAoX19yYXRlbGltaXQocmF0ZWxpbWl0KSkgeworCQlfX2doZXNfcHJpbnRfZXN0YXR1cyhwZngsIGdlbmVyaWMsIGVzdGF0dXMpOworCQlyZXR1cm4gMTsKIAl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHSEVTIGVycm9yIHN0YXR1cyByZXBvcnRpbmcgdGhyb3R0bGUsIHRvIHJlcG9ydCBtb3JlIGtpbmRzIG9mCisgKiBlcnJvcnMsIGluc3RlYWQgb2YganVzdCBtb3N0IGZyZXF1ZW50bHkgb2NjdXJyZWQgZXJyb3JzLgorICovCitzdGF0aWMgaW50IGdoZXNfZXN0YXR1c19jYWNoZWQoc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX3N0YXR1cyAqZXN0YXR1cykKK3sKKwl1MzIgbGVuOworCWludCBpLCBjYWNoZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBub3c7CisJc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqY2FjaGU7CisJc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljX3N0YXR1cyAqY2FjaGVfZXN0YXR1czsKKworCWxlbiA9IGFwZWlfZXN0YXR1c19sZW4oZXN0YXR1cyk7CisJcmN1X3JlYWRfbG9jaygpOworCWZvciAoaSA9IDA7IGkgPCBHSEVTX0VTVEFUVVNfQ0FDSEVTX1NJWkU7IGkrKykgeworCQljYWNoZSA9IHJjdV9kZXJlZmVyZW5jZShnaGVzX2VzdGF0dXNfY2FjaGVzW2ldKTsKKwkJaWYgKGNhY2hlID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKGxlbiAhPSBjYWNoZS0+ZXN0YXR1c19sZW4pCisJCQljb250aW51ZTsKKwkJY2FjaGVfZXN0YXR1cyA9IEdIRVNfRVNUQVRVU19GUk9NX0NBQ0hFKGNhY2hlKTsKKwkJaWYgKG1lbWNtcChlc3RhdHVzLCBjYWNoZV9lc3RhdHVzLCBsZW4pKQorCQkJY29udGludWU7CisJCWF0b21pY19pbmMoJmNhY2hlLT5jb3VudCk7CisJCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CisJCWlmIChub3cgLSBjYWNoZS0+dGltZV9pbiA8IEdIRVNfRVNUQVRVU19JTl9DQUNIRV9NQVhfTlNFQykKKwkJCWNhY2hlZCA9IDE7CisJCWJyZWFrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY2FjaGVkOworfQorCitzdGF0aWMgc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqZ2hlc19lc3RhdHVzX2NhY2hlX2FsbG9jKAorCXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpYyAqZ2VuZXJpYywKKwlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICplc3RhdHVzKQoreworCWludCBhbGxvY2VkOworCXUzMiBsZW4sIGNhY2hlX2xlbjsKKwlzdHJ1Y3QgZ2hlc19lc3RhdHVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWNfc3RhdHVzICpjYWNoZV9lc3RhdHVzOworCisJYWxsb2NlZCA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZnaGVzX2VzdGF0dXNfY2FjaGVfYWxsb2NlZCk7CisJaWYgKGFsbG9jZWQgPiBHSEVTX0VTVEFUVVNfQ0FDSEVfQUxMT0NFRF9NQVgpIHsKKwkJYXRvbWljX2RlYygmZ2hlc19lc3RhdHVzX2NhY2hlX2FsbG9jZWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbGVuID0gYXBlaV9lc3RhdHVzX2xlbihlc3RhdHVzKTsKKwljYWNoZV9sZW4gPSBHSEVTX0VTVEFUVVNfQ0FDSEVfTEVOKGxlbik7CisJY2FjaGUgPSAodm9pZCAqKWdlbl9wb29sX2FsbG9jKGdoZXNfZXN0YXR1c19wb29sLCBjYWNoZV9sZW4pOworCWlmICghY2FjaGUpIHsKKwkJYXRvbWljX2RlYygmZ2hlc19lc3RhdHVzX2NhY2hlX2FsbG9jZWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY2FjaGVfZXN0YXR1cyA9IEdIRVNfRVNUQVRVU19GUk9NX0NBQ0hFKGNhY2hlKTsKKwltZW1jcHkoY2FjaGVfZXN0YXR1cywgZXN0YXR1cywgbGVuKTsKKwljYWNoZS0+ZXN0YXR1c19sZW4gPSBsZW47CisJYXRvbWljX3NldCgmY2FjaGUtPmNvdW50LCAwKTsKKwljYWNoZS0+Z2VuZXJpYyA9IGdlbmVyaWM7CisJY2FjaGUtPnRpbWVfaW4gPSBzY2hlZF9jbG9jaygpOworCXJldHVybiBjYWNoZTsKK30KKworc3RhdGljIHZvaWQgZ2hlc19lc3RhdHVzX2NhY2hlX2ZyZWUoc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqY2FjaGUpCit7CisJdTMyIGxlbjsKKworCWxlbiA9IGFwZWlfZXN0YXR1c19sZW4oR0hFU19FU1RBVFVTX0ZST01fQ0FDSEUoY2FjaGUpKTsKKwlsZW4gPSBHSEVTX0VTVEFUVVNfQ0FDSEVfTEVOKGxlbik7CisJZ2VuX3Bvb2xfZnJlZShnaGVzX2VzdGF0dXNfcG9vbCwgKHVuc2lnbmVkIGxvbmcpY2FjaGUsIGxlbik7CisJYXRvbWljX2RlYygmZ2hlc19lc3RhdHVzX2NhY2hlX2FsbG9jZWQpOworfQorCitzdGF0aWMgdm9pZCBnaGVzX2VzdGF0dXNfY2FjaGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBnaGVzX2VzdGF0dXNfY2FjaGUgKmNhY2hlOworCisJY2FjaGUgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSwgcmN1KTsKKwlnaGVzX2VzdGF0dXNfY2FjaGVfZnJlZShjYWNoZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdoZXNfZXN0YXR1c19jYWNoZV9hZGQoCisJc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljICpnZW5lcmljLAorCXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKmVzdGF0dXMpCit7CisJaW50IGksIHNsb3QgPSAtMSwgY291bnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIG5vdywgZHVyYXRpb24sIHBlcmlvZCwgbWF4X3BlcmlvZCA9IDA7CisJc3RydWN0IGdoZXNfZXN0YXR1c19jYWNoZSAqY2FjaGUsICpzbG90X2NhY2hlID0gTlVMTCwgKm5ld19jYWNoZTsKKworCW5ld19jYWNoZSA9IGdoZXNfZXN0YXR1c19jYWNoZV9hbGxvYyhnZW5lcmljLCBlc3RhdHVzKTsKKwlpZiAobmV3X2NhY2hlID09IE5VTEwpCisJCXJldHVybjsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbm93ID0gc2NoZWRfY2xvY2soKTsKKwlmb3IgKGkgPSAwOyBpIDwgR0hFU19FU1RBVFVTX0NBQ0hFU19TSVpFOyBpKyspIHsKKwkJY2FjaGUgPSByY3VfZGVyZWZlcmVuY2UoZ2hlc19lc3RhdHVzX2NhY2hlc1tpXSk7CisJCWlmIChjYWNoZSA9PSBOVUxMKSB7CisJCQlzbG90ID0gaTsKKwkJCXNsb3RfY2FjaGUgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJZHVyYXRpb24gPSBub3cgLSBjYWNoZS0+dGltZV9pbjsKKwkJaWYgKGR1cmF0aW9uID49IEdIRVNfRVNUQVRVU19JTl9DQUNIRV9NQVhfTlNFQykgeworCQkJc2xvdCA9IGk7CisJCQlzbG90X2NhY2hlID0gY2FjaGU7CisJCQlicmVhazsKKwkJfQorCQljb3VudCA9IGF0b21pY19yZWFkKCZjYWNoZS0+Y291bnQpOworCQlwZXJpb2QgPSBkdXJhdGlvbjsKKwkJZG9fZGl2KHBlcmlvZCwgKGNvdW50ICsgMSkpOworCQlpZiAocGVyaW9kID4gbWF4X3BlcmlvZCkgeworCQkJbWF4X3BlcmlvZCA9IHBlcmlvZDsKKwkJCXNsb3QgPSBpOworCQkJc2xvdF9jYWNoZSA9IGNhY2hlOworCQl9CisJfQorCS8qIG5ld19jYWNoZSBtdXN0IGJlIHB1dCBpbnRvIGFycmF5IGFmdGVyIGl0cyBjb250ZW50cyBhcmUgd3JpdHRlbiAqLworCXNtcF93bWIoKTsKKwlpZiAoc2xvdCAhPSAtMSAmJiBjbXB4Y2hnKGdoZXNfZXN0YXR1c19jYWNoZXMgKyBzbG90LAorCQkJCSAgc2xvdF9jYWNoZSwgbmV3X2NhY2hlKSA9PSBzbG90X2NhY2hlKSB7CisJCWlmIChzbG90X2NhY2hlKQorCQkJY2FsbF9yY3UoJnNsb3RfY2FjaGUtPnJjdSwgZ2hlc19lc3RhdHVzX2NhY2hlX3JjdV9mcmVlKTsKKwl9IGVsc2UKKwkJZ2hlc19lc3RhdHVzX2NhY2hlX2ZyZWUobmV3X2NhY2hlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIGludCBnaGVzX3Byb2Moc3RydWN0IGdoZXMgKmdoZXMpCkBAIC0zODcsOSArNjQ4LDExIEBACiAJcmMgPSBnaGVzX3JlYWRfZXN0YXR1cyhnaGVzLCAwKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwotCWdoZXNfcHJpbnRfZXN0YXR1cyhOVUxMLCBnaGVzKTsKLQlnaGVzX2RvX3Byb2MoZ2hlcyk7Ci0KKwlpZiAoIWdoZXNfZXN0YXR1c19jYWNoZWQoZ2hlcy0+ZXN0YXR1cykpIHsKKwkJaWYgKGdoZXNfcHJpbnRfZXN0YXR1cyhOVUxMLCBnaGVzLT5nZW5lcmljLCBnaGVzLT5lc3RhdHVzKSkKKwkJCWdoZXNfZXN0YXR1c19jYWNoZV9hZGQoZ2hlcy0+Z2VuZXJpYywgZ2hlcy0+ZXN0YXR1cyk7CisJfQorCWdoZXNfZG9fcHJvYyhnaGVzLT5lc3RhdHVzKTsKIG91dDoKIAlnaGVzX2NsZWFyX2VzdGF0dXMoZ2hlcyk7CiAJcmV0dXJuIDA7CkBAIC00NDcsNiArNzEwLDQ1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgZ2hlc19wcm9jX2luX2lycShzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKQoreworCXN0cnVjdCBsbGlzdF9ub2RlICpsbG5vZGUsICpuZXh0LCAqdGFpbCA9IE5VTEw7CisJc3RydWN0IGdoZXNfZXN0YXR1c19ub2RlICplc3RhdHVzX25vZGU7CisJc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljICpnZW5lcmljOworCXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKmVzdGF0dXM7CisJdTMyIGxlbiwgbm9kZV9sZW47CisKKwkvKgorCSAqIEJlY2F1c2UgdGhlIHRpbWUgb3JkZXIgb2YgZXN0YXR1cyBpbiBsaXN0IGlzIHJldmVyc2VkLAorCSAqIHJldmVydCBpdCBiYWNrIHRvIHByb3BlciBvcmRlci4KKwkgKi8KKwlsbG5vZGUgPSBsbGlzdF9kZWxfYWxsKCZnaGVzX2VzdGF0dXNfbGxpc3QpOworCXdoaWxlIChsbG5vZGUpIHsKKwkJbmV4dCA9IGxsbm9kZS0+bmV4dDsKKwkJbGxub2RlLT5uZXh0ID0gdGFpbDsKKwkJdGFpbCA9IGxsbm9kZTsKKwkJbGxub2RlID0gbmV4dDsKKwl9CisJbGxub2RlID0gdGFpbDsKKwl3aGlsZSAobGxub2RlKSB7CisJCW5leHQgPSBsbG5vZGUtPm5leHQ7CisJCWVzdGF0dXNfbm9kZSA9IGxsaXN0X2VudHJ5KGxsbm9kZSwgc3RydWN0IGdoZXNfZXN0YXR1c19ub2RlLAorCQkJCQkgICBsbG5vZGUpOworCQllc3RhdHVzID0gR0hFU19FU1RBVFVTX0ZST01fTk9ERShlc3RhdHVzX25vZGUpOworCQlsZW4gPSBhcGVpX2VzdGF0dXNfbGVuKGVzdGF0dXMpOworCQlub2RlX2xlbiA9IEdIRVNfRVNUQVRVU19OT0RFX0xFTihsZW4pOworCQlnaGVzX2RvX3Byb2MoZXN0YXR1cyk7CisJCWlmICghZ2hlc19lc3RhdHVzX2NhY2hlZChlc3RhdHVzKSkgeworCQkJZ2VuZXJpYyA9IGVzdGF0dXNfbm9kZS0+Z2VuZXJpYzsKKwkJCWlmIChnaGVzX3ByaW50X2VzdGF0dXMoTlVMTCwgZ2VuZXJpYywgZXN0YXR1cykpCisJCQkJZ2hlc19lc3RhdHVzX2NhY2hlX2FkZChnZW5lcmljLCBlc3RhdHVzKTsKKwkJfQorCQlnZW5fcG9vbF9mcmVlKGdoZXNfZXN0YXR1c19wb29sLCAodW5zaWduZWQgbG9uZyllc3RhdHVzX25vZGUsCisJCQkgICAgICBub2RlX2xlbik7CisJCWxsbm9kZSA9IG5leHQ7CisJfQorfQorCiBzdGF0aWMgaW50IGdoZXNfbm90aWZ5X25taShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkJICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqZGF0YSkKIHsKQEAgLTQ3Niw3ICs3NzgsOCBAQAogCiAJaWYgKHNldl9nbG9iYWwgPj0gR0hFU19TRVZfUEFOSUMpIHsKIAkJb29wc19iZWdpbigpOwotCQlnaGVzX3ByaW50X2VzdGF0dXMoS0VSTl9FTUVSRyBIV19FUlIsIGdoZXNfZ2xvYmFsKTsKKwkJX19naGVzX3ByaW50X2VzdGF0dXMoS0VSTl9FTUVSRyBIV19FUlIsIGdoZXNfZ2xvYmFsLT5nZW5lcmljLAorCQkJCSAgICAgZ2hlc19nbG9iYWwtPmVzdGF0dXMpOwogCQkvKiByZWJvb3QgdG8gbG9nIHRoZSBlcnJvciEgKi8KIAkJaWYgKHBhbmljX3RpbWVvdXQgPT0gMCkKIAkJCXBhbmljX3RpbWVvdXQgPSBnaGVzX3BhbmljX3RpbWVvdXQ7CkBAIC00ODQsMTIgKzc4NywzNCBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdoZXMsICZnaGVzX25taSwgbGlzdCkgeworI2lmZGVmIENPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRworCQl1MzIgbGVuLCBub2RlX2xlbjsKKwkJc3RydWN0IGdoZXNfZXN0YXR1c19ub2RlICplc3RhdHVzX25vZGU7CisJCXN0cnVjdCBhY3BpX2hlc3RfZ2VuZXJpY19zdGF0dXMgKmVzdGF0dXM7CisjZW5kaWYKIAkJaWYgKCEoZ2hlcy0+ZmxhZ3MgJiBHSEVTX1RPX0NMRUFSKSkKIAkJCWNvbnRpbnVlOwotCQkvKiBEbyBub3QgcHJpbnQgZXN0YXR1cyBiZWNhdXNlIHByaW50ayBpcyBub3QgTk1JIHNhZmUgKi8KLQkJZ2hlc19kb19wcm9jKGdoZXMpOworI2lmZGVmIENPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRworCQlpZiAoZ2hlc19lc3RhdHVzX2NhY2hlZChnaGVzLT5lc3RhdHVzKSkKKwkJCWdvdG8gbmV4dDsKKwkJLyogU2F2ZSBlc3RhdHVzIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgaW4gSVJRIGNvbnRleHQgKi8KKwkJbGVuID0gYXBlaV9lc3RhdHVzX2xlbihnaGVzLT5lc3RhdHVzKTsKKwkJbm9kZV9sZW4gPSBHSEVTX0VTVEFUVVNfTk9ERV9MRU4obGVuKTsKKwkJZXN0YXR1c19ub2RlID0gKHZvaWQgKilnZW5fcG9vbF9hbGxvYyhnaGVzX2VzdGF0dXNfcG9vbCwKKwkJCQkJCSAgICAgIG5vZGVfbGVuKTsKKwkJaWYgKGVzdGF0dXNfbm9kZSkgeworCQkJZXN0YXR1c19ub2RlLT5nZW5lcmljID0gZ2hlcy0+Z2VuZXJpYzsKKwkJCWVzdGF0dXMgPSBHSEVTX0VTVEFUVVNfRlJPTV9OT0RFKGVzdGF0dXNfbm9kZSk7CisJCQltZW1jcHkoZXN0YXR1cywgZ2hlcy0+ZXN0YXR1cywgbGVuKTsKKwkJCWxsaXN0X2FkZCgmZXN0YXR1c19ub2RlLT5sbG5vZGUsICZnaGVzX2VzdGF0dXNfbGxpc3QpOworCQl9CituZXh0OgorI2VuZGlmCiAJCWdoZXNfY2xlYXJfZXN0YXR1cyhnaGVzKTsKIAl9CisjaWZkZWYgQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCisJaXJxX3dvcmtfcXVldWUoJmdoZXNfcHJvY19pcnFfd29yayk7CisjZW5kaWYKIAogb3V0OgogCXJhd19zcGluX3VubG9jaygmZ2hlc19ubWlfbG9jayk7CkBAIC01MDQsMTAgKzgyOSwyNiBAQAogCS5ub3RpZmllcl9jYWxsID0gZ2hlc19ub3RpZnlfbm1pLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2hlc19lc291cmNlX3ByZWFsbG9jX3NpemUoCisJY29uc3Qgc3RydWN0IGFjcGlfaGVzdF9nZW5lcmljICpnZW5lcmljKQoreworCXVuc2lnbmVkIGxvbmcgYmxvY2tfbGVuZ3RoLCBwcmVhbGxvY19yZWNvcmRzLCBwcmVhbGxvY19zaXplOworCisJYmxvY2tfbGVuZ3RoID0gbWluX3QodW5zaWduZWQgbG9uZywgZ2VuZXJpYy0+ZXJyb3JfYmxvY2tfbGVuZ3RoLAorCQkJICAgICBHSEVTX0VTVEFUVVNfTUFYX1NJWkUpOworCXByZWFsbG9jX3JlY29yZHMgPSBtYXhfdCh1bnNpZ25lZCBsb25nLAorCQkJCSBnZW5lcmljLT5yZWNvcmRzX3RvX3ByZWFsbG9jYXRlLCAxKTsKKwlwcmVhbGxvY19zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgYmxvY2tfbGVuZ3RoICogcHJlYWxsb2NfcmVjb3JkcywKKwkJCSAgICAgIEdIRVNfRVNPVVJDRV9QUkVBTExPQ19NQVhfU0laRSk7CisKKwlyZXR1cm4gcHJlYWxsb2Nfc2l6ZTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgZ2hlc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnaGVzX2RldikKIHsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKmdlbmVyaWM7CiAJc3RydWN0IGdoZXMgKmdoZXMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgbGVuOwogCWludCByYyA9IC1FSU5WQUw7CiAKIAlnZW5lcmljID0gKihzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKiopZ2hlc19kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtNTczLDYgKzkxNCw4IEBACiAJCW11dGV4X3VubG9jaygmZ2hlc19saXN0X211dGV4KTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0hFU1RfTk9USUZZX05NSToKKwkJbGVuID0gZ2hlc19lc291cmNlX3ByZWFsbG9jX3NpemUoZ2VuZXJpYyk7CisJCWdoZXNfZXN0YXR1c19wb29sX2V4cGFuZChsZW4pOwogCQltdXRleF9sb2NrKCZnaGVzX2xpc3RfbXV0ZXgpOwogCQlpZiAobGlzdF9lbXB0eSgmZ2hlc19ubWkpKQogCQkJcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZnaGVzX25vdGlmaWVyX25taSk7CkBAIC01OTcsNiArOTQwLDcgQEAKIHsKIAlzdHJ1Y3QgZ2hlcyAqZ2hlczsKIAlzdHJ1Y3QgYWNwaV9oZXN0X2dlbmVyaWMgKmdlbmVyaWM7CisJdW5zaWduZWQgbG9uZyBsZW47CiAKIAlnaGVzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZ2hlc19kZXYpOwogCWdlbmVyaWMgPSBnaGVzLT5nZW5lcmljOwpAQCAtNjI3LDYgKzk3MSw4IEBACiAJCSAqIGZyZWVkIGFmdGVyIE5NSSBoYW5kbGVyIGZpbmlzaGVzLgogCQkgKi8KIAkJc3luY2hyb25pemVfcmN1KCk7CisJCWxlbiA9IGdoZXNfZXNvdXJjZV9wcmVhbGxvY19zaXplKGdlbmVyaWMpOworCQlnaGVzX2VzdGF0dXNfcG9vbF9zaHJpbmsobGVuKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC02NjIsMTUgKzEwMDgsNDMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGdoZXNfZGlzYWJsZSkgeworCQlwcl9pbmZvKEdIRVNfUEZYICJHSEVTIGlzIG5vdCBlbmFibGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluaXRfaXJxX3dvcmsoJmdoZXNfcHJvY19pcnFfd29yaywgZ2hlc19wcm9jX2luX2lycSk7CisKIAlyYyA9IGdoZXNfaW9yZW1hcF9pbml0KCk7CiAJaWYgKHJjKQogCQlnb3RvIGVycjsKIAotCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnaGVzX3BsYXRmb3JtX2RyaXZlcik7CisJcmMgPSBnaGVzX2VzdGF0dXNfcG9vbF9pbml0KCk7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9pb3JlbWFwX2V4aXQ7CiAKKwlyYyA9IGdoZXNfZXN0YXR1c19wb29sX2V4cGFuZChHSEVTX0VTVEFUVVNfQ0FDSEVfQVZHX1NJWkUgKgorCQkJCSAgICAgIEdIRVNfRVNUQVRVU19DQUNIRV9BTExPQ0VEX01BWCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9wb29sX2V4aXQ7CisKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ2hlc19wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyYykKKwkJZ290byBlcnJfcG9vbF9leGl0OworCisJcmMgPSBhcGVpX29zY19zZXR1cCgpOworCWlmIChyYyA9PSAwICYmIG9zY19zYl9hcGVpX3N1cHBvcnRfYWNrZWQpCisJCXByX2luZm8oR0hFU19QRlggIkFQRUkgZmlybXdhcmUgZmlyc3QgbW9kZSBpcyBlbmFibGVkIGJ5IEFQRUkgYml0IGFuZCBXSEVBIF9PU0MuXG4iKTsKKwllbHNlIGlmIChyYyA9PSAwICYmICFvc2Nfc2JfYXBlaV9zdXBwb3J0X2Fja2VkKQorCQlwcl9pbmZvKEdIRVNfUEZYICJBUEVJIGZpcm13YXJlIGZpcnN0IG1vZGUgaXMgZW5hYmxlZCBieSBXSEVBIF9PU0MuXG4iKTsKKwllbHNlIGlmIChyYyAmJiBvc2Nfc2JfYXBlaV9zdXBwb3J0X2Fja2VkKQorCQlwcl9pbmZvKEdIRVNfUEZYICJBUEVJIGZpcm13YXJlIGZpcnN0IG1vZGUgaXMgZW5hYmxlZCBieSBBUEVJIGJpdC5cbiIpOworCWVsc2UKKwkJcHJfaW5mbyhHSEVTX1BGWCAiRmFpbGVkIHRvIGVuYWJsZSBBUEVJIGZpcm13YXJlIGZpcnN0IG1vZGUuXG4iKTsKKwogCXJldHVybiAwOworZXJyX3Bvb2xfZXhpdDoKKwlnaGVzX2VzdGF0dXNfcG9vbF9leGl0KCk7CiBlcnJfaW9yZW1hcF9leGl0OgogCWdoZXNfaW9yZW1hcF9leGl0KCk7CiBlcnI6CkBAIC02ODAsNiArMTA1NCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2hlc19leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdoZXNfcGxhdGZvcm1fZHJpdmVyKTsKKwlnaGVzX2VzdGF0dXNfcG9vbF9leGl0KCk7CiAJZ2hlc19pb3JlbWFwX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FwZWkvaGVzdC5jIGIvZHJpdmVycy9hY3BpL2FwZWkvaGVzdC5jCmluZGV4IDE4MWJjMmYuLjA1ZmVlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL2hlc3QuYworKysgYi9kcml2ZXJzL2FjcGkvYXBlaS9oZXN0LmMKQEAgLTIzMSwxNiArMjMxLDE3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXJjID0gYXBlaV9oZXN0X3BhcnNlKGhlc3RfcGFyc2VfZ2hlc19jb3VudCwgJmdoZXNfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQlyYyA9IGhlc3RfZ2hlc19kZXZfcmVnaXN0ZXIoZ2hlc19jb3VudCk7Ci0JaWYgKCFyYykgewotCQlwcl9pbmZvKEhFU1RfUEZYICJUYWJsZSBwYXJzaW5nIGhhcyBiZWVuIGluaXRpYWxpemVkLlxuIik7Ci0JCXJldHVybjsKKwlpZiAoIWdoZXNfZGlzYWJsZSkgeworCQlyYyA9IGFwZWlfaGVzdF9wYXJzZShoZXN0X3BhcnNlX2doZXNfY291bnQsICZnaGVzX2NvdW50KTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnI7CisJCXJjID0gaGVzdF9naGVzX2Rldl9yZWdpc3RlcihnaGVzX2NvdW50KTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnI7CiAJfQogCisJcHJfaW5mbyhIRVNUX1BGWCAiVGFibGUgcGFyc2luZyBoYXMgYmVlbiBpbml0aWFsaXplZC5cbiIpOworCXJldHVybjsKIGVycjoKIAloZXN0X2Rpc2FibGUgPSAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggMmM2NjEzNS4uNzcxMWQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC01NSw2ICs1NSw5IEBACiAjZGVmaW5lIEFDUElfQkFUVEVSWV9OT1RJRllfSU5GTwkweDgxCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9OT1RJRllfVEhSRVNIT0xEICAgMHg4MgogCisvKiBCYXR0ZXJ5IHBvd2VyIHVuaXQ6IDAgbWVhbnMgbVcsIDEgbWVhbnMgbUEgKi8KKyNkZWZpbmUgQUNQSV9CQVRURVJZX1BPV0VSX1VOSVRfTUEJMQorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQkFUVEVSWV9DT01QT05FTlQKIAogQUNQSV9NT0RVTEVfTkFNRSgiYmF0dGVyeSIpOwpAQCAtOTEsMTYgKzk0LDEyIEBACiBlbnVtIHsKIAlBQ1BJX0JBVFRFUllfQUxBUk1fUFJFU0VOVCwKIAlBQ1BJX0JBVFRFUllfWElORk9fUFJFU0VOVCwKLQkvKiBGb3IgYnVnZ3kgRFNEVHMgdGhhdCByZXBvcnQgbmVnYXRpdmUgMTYtYml0IHZhbHVlcyBmb3IgZWl0aGVyCi0JICogY2hhcmdpbmcgb3IgZGlzY2hhcmdpbmcgY3VycmVudCBhbmQvb3IgcmVwb3J0IDAgYXMgNjU1MzYKLQkgKiBkdWUgdG8gYmFkIG1hdGguCi0JICovCi0JQUNQSV9CQVRURVJZX1FVSVJLX1NJR05FRDE2X0NVUlJFTlQsCiAJQUNQSV9CQVRURVJZX1FVSVJLX1BFUkNFTlRBR0VfQ0FQQUNJVFksCiB9OwogCiBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5IHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGJhdDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbmI7CkBAIC0zMDEsNyArMzAwLDggQEAKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKIGlubGluZSBjaGFyICphY3BpX2JhdHRlcnlfdW5pdHMoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKLQlyZXR1cm4gKGJhdHRlcnktPnBvd2VyX3VuaXQpPyJtQSI6Im1XIjsKKwlyZXR1cm4gKGJhdHRlcnktPnBvd2VyX3VuaXQgPT0gQUNQSV9CQVRURVJZX1BPV0VSX1VOSVRfTUEpID8KKwkJIm1BIiA6ICJtVyI7CiB9CiAjZW5kaWYKIApAQCAtNDYxLDkgKzQ2MSwxNyBAQAogCWJhdHRlcnktPnVwZGF0ZV90aW1lID0gamlmZmllczsKIAlrZnJlZShidWZmZXIucG9pbnRlcik7CiAKLQlpZiAodGVzdF9iaXQoQUNQSV9CQVRURVJZX1FVSVJLX1NJR05FRDE2X0NVUlJFTlQsICZiYXR0ZXJ5LT5mbGFncykgJiYKLQkgICAgYmF0dGVyeS0+cmF0ZV9ub3cgIT0gLTEpCisJLyogRm9yIGJ1Z2d5IERTRFRzIHRoYXQgcmVwb3J0IG5lZ2F0aXZlIDE2LWJpdCB2YWx1ZXMgZm9yIGVpdGhlcgorCSAqIGNoYXJnaW5nIG9yIGRpc2NoYXJnaW5nIGN1cnJlbnQgYW5kL29yIHJlcG9ydCAwIGFzIDY1NTM2CisJICogZHVlIHRvIGJhZCBtYXRoLgorCSAqLworCWlmIChiYXR0ZXJ5LT5wb3dlcl91bml0ID09IEFDUElfQkFUVEVSWV9QT1dFUl9VTklUX01BICYmCisJCWJhdHRlcnktPnJhdGVfbm93ICE9IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOICYmCisJCShzMTYpKGJhdHRlcnktPnJhdGVfbm93KSA8IDApIHsKIAkJYmF0dGVyeS0+cmF0ZV9ub3cgPSBhYnMoKHMxNiliYXR0ZXJ5LT5yYXRlX25vdyk7CisJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyBGV19CVUcgImJhdHRlcnk6IChkaXMpY2hhcmdlIHJhdGUiCisJCQkiIGludmFsaWQuXG4iKTsKKwl9CiAKIAlpZiAodGVzdF9iaXQoQUNQSV9CQVRURVJZX1FVSVJLX1BFUkNFTlRBR0VfQ0FQQUNJVFksICZiYXR0ZXJ5LT5mbGFncykKIAkgICAgJiYgYmF0dGVyeS0+Y2FwYWNpdHlfbm93ID49IDAgJiYgYmF0dGVyeS0+Y2FwYWNpdHlfbm93IDw9IDEwMCkKQEAgLTU0NCw3ICs1NTIsNyBAQAogewogCWludCByZXN1bHQ7CiAKLQlpZiAoYmF0dGVyeS0+cG93ZXJfdW5pdCkgeworCWlmIChiYXR0ZXJ5LT5wb3dlcl91bml0ID09IEFDUElfQkFUVEVSWV9QT1dFUl9VTklUX01BKSB7CiAJCWJhdHRlcnktPmJhdC5wcm9wZXJ0aWVzID0gY2hhcmdlX2JhdHRlcnlfcHJvcHM7CiAJCWJhdHRlcnktPmJhdC5udW1fcHJvcGVydGllcyA9CiAJCQlBUlJBWV9TSVpFKGNoYXJnZV9iYXR0ZXJ5X3Byb3BzKTsKQEAgLTU2NiwxOCArNTc0LDE2IEBACiAKIHN0YXRpYyB2b2lkIHN5c2ZzX3JlbW92ZV9iYXR0ZXJ5KHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7Ci0JaWYgKCFiYXR0ZXJ5LT5iYXQuZGV2KQorCW11dGV4X2xvY2soJmJhdHRlcnktPnN5c2ZzX2xvY2spOworCWlmICghYmF0dGVyeS0+YmF0LmRldikgeworCQltdXRleF91bmxvY2soJmJhdHRlcnktPnN5c2ZzX2xvY2spOwogCQlyZXR1cm47CisJfQorCiAJZGV2aWNlX3JlbW92ZV9maWxlKGJhdHRlcnktPmJhdC5kZXYsICZhbGFybV9hdHRyKTsKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmYmF0dGVyeS0+YmF0KTsKIAliYXR0ZXJ5LT5iYXQuZGV2ID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9iYXR0ZXJ5X3F1aXJrcyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQotewotCWlmIChkbWlfbmFtZV9pbl92ZW5kb3JzKCJBY2VyIikgJiYgYmF0dGVyeS0+cG93ZXJfdW5pdCkgewotCQlzZXRfYml0KEFDUElfQkFUVEVSWV9RVUlSS19TSUdORUQxNl9DVVJSRU5ULCAmYmF0dGVyeS0+ZmxhZ3MpOwotCX0KKwltdXRleF91bmxvY2soJmJhdHRlcnktPnN5c2ZzX2xvY2spOwogfQogCiAvKgpAQCAtNTkyLDcgKzU5OCw3IEBACiAgKgogICogSGFuZGxlIHRoaXMgY29ycmVjdGx5IHNvIHRoYXQgdGhleSB3b24ndCBicmVhayB1c2Vyc3BhY2UuCiAgKi8KLXN0YXRpYyB2b2lkIGFjcGlfYmF0dGVyeV9xdWlya3MyKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCitzdGF0aWMgdm9pZCBhY3BpX2JhdHRlcnlfcXVpcmtzKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7CiAJaWYgKHRlc3RfYml0KEFDUElfQkFUVEVSWV9RVUlSS19QRVJDRU5UQUdFX0NBUEFDSVRZLCAmYmF0dGVyeS0+ZmxhZ3MpKQogCQlyZXR1cm4gOwpAQCAtNjIzLDEzICs2MjksMTUgQEAKIAkJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9pbmZvKGJhdHRlcnkpOwogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKLQkJYWNwaV9iYXR0ZXJ5X3F1aXJrcyhiYXR0ZXJ5KTsKIAkJYWNwaV9iYXR0ZXJ5X2luaXRfYWxhcm0oYmF0dGVyeSk7CiAJfQotCWlmICghYmF0dGVyeS0+YmF0LmRldikKLQkJc3lzZnNfYWRkX2JhdHRlcnkoYmF0dGVyeSk7CisJaWYgKCFiYXR0ZXJ5LT5iYXQuZGV2KSB7CisJCXJlc3VsdCA9IHN5c2ZzX2FkZF9iYXR0ZXJ5KGJhdHRlcnkpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CiAJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9zdGF0ZShiYXR0ZXJ5KTsKLQlhY3BpX2JhdHRlcnlfcXVpcmtzMihiYXR0ZXJ5KTsKKwlhY3BpX2JhdHRlcnlfcXVpcmtzKGJhdHRlcnkpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg2Myw3ICs4NzEsNyBAQAogCQl9LCBcCiAJfQogCi1zdGF0aWMgc3RydWN0IGJhdHRlcnlfZmlsZSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJhdHRlcnlfZmlsZSB7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHM7CiAJbW9kZV90IG1vZGU7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTk0OCw5ICs5NTYsMTIgQEAKIAlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LAogCQkJCQkJICAgIHBtX25iKTsKIAlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046CiAJY2FzZSBQTV9QT1NUX1NVU1BFTkQ6Ci0JCXN5c2ZzX3JlbW92ZV9iYXR0ZXJ5KGJhdHRlcnkpOwotCQlzeXNmc19hZGRfYmF0dGVyeShiYXR0ZXJ5KTsKKwkJaWYgKGJhdHRlcnktPmJhdC5kZXYpIHsKKwkJCXN5c2ZzX3JlbW92ZV9iYXR0ZXJ5KGJhdHRlcnkpOworCQkJc3lzZnNfYWRkX2JhdHRlcnkoYmF0dGVyeSk7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC05NzIsMjggKzk4MywzOCBAQAogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX0JBVFRFUllfQ0xBU1MpOwogCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBiYXR0ZXJ5OwogCW11dGV4X2luaXQoJmJhdHRlcnktPmxvY2spOworCW11dGV4X2luaXQoJmJhdHRlcnktPnN5c2ZzX2xvY2spOwogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGJhdHRlcnktPmRldmljZS0+aGFuZGxlLAogCQkJIl9CSVgiLCAmaGFuZGxlKSkpCiAJCXNldF9iaXQoQUNQSV9CQVRURVJZX1hJTkZPX1BSRVNFTlQsICZiYXR0ZXJ5LT5mbGFncyk7Ci0JYWNwaV9iYXR0ZXJ5X3VwZGF0ZShiYXR0ZXJ5KTsKKwlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfdXBkYXRlKGJhdHRlcnkpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZmFpbDsKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKIAlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfYWRkX2ZzKGRldmljZSk7CiAjZW5kaWYKLQlpZiAoIXJlc3VsdCkgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgU2xvdCBbJXNdIChiYXR0ZXJ5ICVzKVxuIiwKLQkJCUFDUElfQkFUVEVSWV9ERVZJQ0VfTkFNRSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSksCi0JCQlkZXZpY2UtPnN0YXR1cy5iYXR0ZXJ5X3ByZXNlbnQgPyAicHJlc2VudCIgOiAiYWJzZW50Iik7Ci0JfSBlbHNlIHsKKwlpZiAocmVzdWx0KSB7CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSCiAJCWFjcGlfYmF0dGVyeV9yZW1vdmVfZnMoZGV2aWNlKTsKICNlbmRpZgotCQlrZnJlZShiYXR0ZXJ5KTsKKwkJZ290byBmYWlsOwogCX0KIAorCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBTbG90IFslc10gKGJhdHRlcnkgJXMpXG4iLAorCQlBQ1BJX0JBVFRFUllfREVWSUNFX05BTUUsIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAorCQlkZXZpY2UtPnN0YXR1cy5iYXR0ZXJ5X3ByZXNlbnQgPyAicHJlc2VudCIgOiAiYWJzZW50Iik7CisKIAliYXR0ZXJ5LT5wbV9uYi5ub3RpZmllcl9jYWxsID0gYmF0dGVyeV9ub3RpZnk7CiAJcmVnaXN0ZXJfcG1fbm90aWZpZXIoJmJhdHRlcnktPnBtX25iKTsKIAogCXJldHVybiByZXN1bHQ7CisKK2ZhaWw6CisJc3lzZnNfcmVtb3ZlX2JhdHRlcnkoYmF0dGVyeSk7CisJbXV0ZXhfZGVzdHJveSgmYmF0dGVyeS0+bG9jayk7CisJbXV0ZXhfZGVzdHJveSgmYmF0dGVyeS0+c3lzZnNfbG9jayk7CisJa2ZyZWUoYmF0dGVyeSk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKQEAgLTEwMDksNiArMTAzMCw3IEBACiAjZW5kaWYKIAlzeXNmc19yZW1vdmVfYmF0dGVyeShiYXR0ZXJ5KTsKIAltdXRleF9kZXN0cm95KCZiYXR0ZXJ5LT5sb2NrKTsKKwltdXRleF9kZXN0cm95KCZiYXR0ZXJ5LT5zeXNmc19sb2NrKTsKIAlrZnJlZShiYXR0ZXJ5KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBkMWUwNmMxLi40MzdkZGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisjaW5jbHVkZSA8YWNwaS9hcGVpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCkBAIC01MTksNiArNTIwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9ydW5fb3NjKTsKIAorYm9vbCBvc2Nfc2JfYXBlaV9zdXBwb3J0X2Fja2VkOwogc3RhdGljIHU4IHNiX3V1aWRfc3RyW10gPSAiMDgxMUIwNkUtNEEyNy00NEY5LThENjAtM0NCQkMyMkU3QjQ4IjsKIHN0YXRpYyB2b2lkIGFjcGlfYnVzX29zY19zdXBwb3J0KHZvaWQpCiB7CkBAIC01NDEsMTEgKzU0MywxOSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FDUElfUFJPQ0VTU09SKSB8fCBkZWZpbmVkKENPTkZJR19BQ1BJX1BST0NFU1NPUl9NT0RVTEUpCiAJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdIHw9IE9TQ19TQl9QUENfT1NUX1NVUFBPUlQ7CiAjZW5kaWYKKworCWlmICghZ2hlc19kaXNhYmxlKQorCQljYXBidWZbT1NDX1NVUFBPUlRfVFlQRV0gfD0gT1NDX1NCX0FQRUlfU1VQUE9SVDsKIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZ2V0X2hhbmRsZShOVUxMLCAiXFxfU0IiLCAmaGFuZGxlKSkpCiAJCXJldHVybjsKLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfcnVuX29zYyhoYW5kbGUsICZjb250ZXh0KSkpCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX3J1bl9vc2MoaGFuZGxlLCAmY29udGV4dCkpKSB7CisJCXUzMiAqY2FwYnVmX3JldCA9IGNvbnRleHQucmV0LnBvaW50ZXI7CisJCWlmIChjb250ZXh0LnJldC5sZW5ndGggPiBPU0NfU1VQUE9SVF9UWVBFKQorCQkJb3NjX3NiX2FwZWlfc3VwcG9ydF9hY2tlZCA9CisJCQkJY2FwYnVmX3JldFtPU0NfU1VQUE9SVF9UWVBFXSAmIE9TQ19TQl9BUEVJX1NVUFBPUlQ7CiAJCWtmcmVlKGNvbnRleHQucmV0LnBvaW50ZXIpOwotCS8qIGRvIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybmVkIGNhcD8gU291bmRzIG5vICovCisJfQorCS8qIGRvIHdlIG5lZWQgdG8gY2hlY2sgb3RoZXIgcmV0dXJuZWQgY2FwPyBTb3VuZHMgbm8gKi8KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDE4NjRhZDMuLjE5YTYxMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtNzcsNyArNzcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvdHBsdWdfbGlzdDsKIAlhY3BpX2hhbmRsZSBoYW5kbGU7Ci0Jc3RydWN0IGFjcGlfZG9ja19vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgYWNwaV9kb2NrX29wcyAqb3BzOwogCXZvaWQgKmNvbnRleHQ7CiB9OwogCkBAIC01ODksNyArNTg5LDcgQEAKICAqIHRoZSBkb2NrIGRyaXZlciBhZnRlciBfRENLIGlzIGV4ZWN1dGVkLgogICovCiBpbnQKLXJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kb2NrX29wcyAqb3BzLAorcmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IHN0cnVjdCBhY3BpX2RvY2tfb3BzICpvcHMsCiAJCQkgICAgIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGRvY2tfZGVwZW5kZW50X2RldmljZSAqZGQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWNfc3lzLmMgYi9kcml2ZXJzL2FjcGkvZWNfc3lzLmMKaW5kZXggMDViNDQyMC4uMjJmOTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjX3N5cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lY19zeXMuYwpAQCAtOTIsNyArOTIsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9lY19pb19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2VjX2lvX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgPSBhY3BpX2VjX29wZW5faW8sCiAJLnJlYWQgID0gYWNwaV9lY19yZWFkX2lvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDQ2NzQ3OWYuLjBmMDM1NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgZmFuX2Nvb2xpbmdfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyBmYW5fY29vbGluZ19vcHMgPSB7CiAJLmdldF9tYXhfc3RhdGUgPSBmYW5fZ2V0X21heF9zdGF0ZSwKIAkuZ2V0X2N1cl9zdGF0ZSA9IGZhbl9nZXRfY3VyX3N0YXRlLAogCS5zZXRfY3VyX3N0YXRlID0gZmFuX3NldF9jdXJfc3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggMzcyZjliNy4uZmEzMmY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiB7CiAJaWYgKCFzdHJjbXAoIkxpbnV4IiwgaW50ZXJmYWNlKSkgewogCi0JCXByaW50ayhLRVJOX05PVElDRSBGV19CVUcgUFJFRklYCisJCXByaW50a19vbmNlKEtFUk5fTk9USUNFIEZXX0JVRyBQUkVGSVgKIAkJCSJCSU9TIF9PU0koTGludXgpIHF1ZXJ5ICVzJXNcbiIsCiAJCQlvc2lfbGludXguZW5hYmxlID8gImhvbm9yZWQiIDogImlnbm9yZWQiLAogCQkJb3NpX2xpbnV4LmNtZGxpbmUgPyAiIHZpYSBjbWRsaW5lIiA6CkBAIC0yMzcsOCArMjM3LDIzIEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19LRVhFQworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWNwaV9yc2RwOworc3RhdGljIGludCBfX2luaXQgc2V0dXBfYWNwaV9yc2RwKGNoYXIgKmFyZykKK3sKKwlhY3BpX3JzZHAgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDE2KTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJhY3BpX3JzZHAiLCBzZXR1cF9hY3BpX3JzZHApOworI2VuZGlmCisKIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBfX2luaXQgYWNwaV9vc19nZXRfcm9vdF9wb2ludGVyKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0tFWEVDCisJaWYgKGFjcGlfcnNkcCkKKwkJcmV0dXJuIGFjcGlfcnNkcDsKKyNlbmRpZgorCiAJaWYgKGVmaV9lbmFibGVkKSB7CiAJCWlmIChlZmkuYWNwaTIwICE9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCiAJCQlyZXR1cm4gZWZpLmFjcGkyMDsKQEAgLTEwODMsNyArMTA5OCwxMyBAQAogCWJvb2wgZW5hYmxlOwogfTsKIAotc3RhdGljIHN0cnVjdCBvc2lfc2V0dXBfZW50cnkgX19pbml0ZGF0YSBvc2lfc2V0dXBfZW50cmllc1tPU0lfU1RSSU5HX0VOVFJJRVNfTUFYXTsKK3N0YXRpYyBzdHJ1Y3Qgb3NpX3NldHVwX2VudHJ5IF9faW5pdGRhdGEKKwkJb3NpX3NldHVwX2VudHJpZXNbT1NJX1NUUklOR19FTlRSSUVTX01BWF0gPSB7CisJeyJNb2R1bGUgRGV2aWNlIiwgdHJ1ZX0sCisJeyJQcm9jZXNzb3IgRGV2aWNlIiwgdHJ1ZX0sCisJeyIzLjAgX1NDUCBFeHRlbnNpb25zIiwgdHJ1ZX0sCisJeyJQcm9jZXNzb3IgQWdncmVnYXRvciBEZXZpY2UiLCB0cnVlfSwKK307CiAKIHZvaWQgX19pbml0IGFjcGlfb3NpX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCmluZGV4IGY5MDdjZmIuLjdmOWViYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwpAQCAtMzAzLDYgKzMwMyw2MSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIEludGVycnVwdCBSb3V0aW5nIFN1cHBvcnQKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCitleHRlcm4gaW50IG5vaW9hcGljcXVpcms7CitleHRlcm4gaW50IG5vaW9hcGljcmVyb3V0ZTsKKworc3RhdGljIGludCBicmlkZ2VfaGFzX2Jvb3RfaW50ZXJydXB0X3ZhcmlhbnQoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzX2l0OworCisJZm9yIChidXNfaXQgPSBidXMgOyBidXNfaXQgOyBidXNfaXQgPSBidXNfaXQtPnBhcmVudCkgeworCQlpZiAoIWJ1c19pdC0+c2VsZikKKwkJCXJldHVybiAwOworCQlpZiAoYnVzX2l0LT5zZWxmLT5pcnFfcmVyb3V0ZV92YXJpYW50KQorCQkJcmV0dXJuIGJ1c19pdC0+c2VsZi0+aXJxX3Jlcm91dGVfdmFyaWFudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb21lIGNoaXBzZXRzIChlLmcuIEludGVsIDY3MDBQWEgpIGdlbmVyYXRlIGEgbGVnYWN5IElOVHggd2hlbiB0aGUgSVJRCisgKiBlbnRyeSBpbiB0aGUgY2hpcHNldCdzIElPLUFQSUMgaXMgbWFza2VkIChhcywgZS5nLiB0aGUgUlQga2VybmVsIGRvZXMKKyAqIGR1cmluZyBpbnRlcnJ1cHQgaGFuZGxpbmcpLiBXaGVuIHRoaXMgSU5UeCBnZW5lcmF0aW9uIGNhbm5vdCBiZSBkaXNhYmxlZCwKKyAqIHdlIHJlcm91dGUgdGhlc2UgaW50ZXJydXB0cyB0byB0aGVpciBsZWdhY3kgZXF1aXZhbGVudCB0byBnZXQgcmlkIG9mCisgKiBzcHVyaW91cyBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgaW50IGFjcGlfcmVyb3V0ZV9ib290X2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9wcnRfZW50cnkgKmVudHJ5KQoreworCWlmIChub2lvYXBpY3F1aXJrIHx8IG5vaW9hcGljcmVyb3V0ZSkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGJyaWRnZV9oYXNfYm9vdF9pbnRlcnJ1cHRfdmFyaWFudChkZXYtPmJ1cykpIHsKKwkJY2FzZSAwOgorCQkJLyogbm8gcmVyb3V0aW5nIG5lY2Vzc2FyeSAqLworCQkJcmV0dXJuIDA7CisJCWNhc2UgSU5URUxfSVJRX1JFUk9VVEVfVkFSSUFOVDoKKwkJCS8qCisJCQkgKiBSZW1hcCBhY2NvcmRpbmcgdG8gSU5UeCByb3V0aW5nIHRhYmxlIGluIDY3MDBQWEgKKwkJCSAqIHNwZWNzLCBpbnRlbCBvcmRlciBudW1iZXIgMzAyNjI4LTAwMiwgc2VjdGlvbgorCQkJICogMi4xNS4yLiBPdGhlciBjaGlwc2V0cyAoODAzMzIsIC4uLikgaGF2ZSB0aGUgc2FtZQorCQkJICogbWFwcGluZyBhbmQgYXJlIGhhbmRsZWQgaGVyZSBhcyB3ZWxsLgorCQkJICovCisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJQQ0kgSVJRICVkIC0+IHJlcm91dGVkIHRvIGxlZ2FjeSAiCisJCQkJICJJUlEgJWRcbiIsIGVudHJ5LT5pbmRleCwKKwkJCQkgKGVudHJ5LT5pbmRleCAlIDQpICsgMTYpOworCQkJZW50cnktPmluZGV4ID0gKGVudHJ5LT5pbmRleCAlIDQpICsgMTY7CisJCQlyZXR1cm4gMTsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKCZkZXYtPmRldiwgIkNhbm5vdCByZXJvdXRlIElSUSAlZCB0byBsZWdhY3kgIgorCQkJCSAiSVJROiB1bmtub3duIG1hcHBpbmdcbiIsIGVudHJ5LT5pbmRleCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCisKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9wcnRfZW50cnkgKmFjcGlfcGNpX2lycV9sb29rdXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBpbikKIHsKIAlzdHJ1Y3QgYWNwaV9wcnRfZW50cnkgKmVudHJ5OwpAQCAtMzExLDYgKzM2Niw5IEBACiAKIAllbnRyeSA9IGFjcGlfcGNpX2lycV9maW5kX3BydF9lbnRyeShkZXYsIHBpbik7CiAJaWYgKGVudHJ5KSB7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJCWFjcGlfcmVyb3V0ZV9ib290X2ludGVycnVwdChkZXYsIGVudHJ5KTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRm91bmQgJXNbJWNdIF9QUlQgZW50cnlcbiIsCiAJCQkJICBwY2lfbmFtZShkZXYpLCBwaW5fbmFtZShwaW4pKSk7CiAJCXJldHVybiBlbnRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggZDA2MDc4ZC4uMjY3MmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTQ4NSw3ICs0ODUsOCBAQAogCQlyb290LT5zZWNvbmRhcnkuZW5kID0gMHhGRjsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcgUFJFRklYCiAJCSAgICAgICAibm8gc2Vjb25kYXJ5IGJ1cyByYW5nZSBpbiBfQ1JTXG4iKTsKLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQkJOLAkJCQkJICAgICAgIE5VTEwsICZidXMpOworCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2aWNlLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19CQk4sCisJCQkJCSAgICAgICBOVUxMLCAmYnVzKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQkJcm9vdC0+c2Vjb25kYXJ5LnN0YXJ0ID0gYnVzOwogCQllbHNlIGlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwppbmRleCA3OWNiNjUzLi44NzA1NTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzIHByb2Nlc3Nvcl9jb29saW5nX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyBwcm9jZXNzb3JfY29vbGluZ19vcHMgPSB7CiAJLmdldF9tYXhfc3RhdGUgPSBwcm9jZXNzb3JfZ2V0X21heF9zdGF0ZSwKIAkuZ2V0X2N1cl9zdGF0ZSA9IHByb2Nlc3Nvcl9nZXRfY3VyX3N0YXRlLAogCS5zZXRfY3VyX3N0YXRlID0gcHJvY2Vzc29yX3NldF9jdXJfc3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggNTA2NThmZi4uNmUzNmQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtMTMwLDYgKzEzMCw5IEBACiAKICNkZWZpbmUgdG9fYWNwaV9zYnMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhY3BpX3NicywgY2hhcmdlcikKIAorc3RhdGljIGludCBhY3BpX3Nic19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKK3N0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2dldF9zdGF0ZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KTsKKwogc3RhdGljIGlubGluZSBpbnQgYmF0dGVyeV9zY2FsZShpbnQgbG9nKQogewogCWludCBzY2FsZSA9IDE7CkBAIC0xOTUsNiArMTk4LDggQEAKIAogCWlmICgoIWJhdHRlcnktPnByZXNlbnQpICYmIHBzcCAhPSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCWFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoYmF0dGVyeSk7CiAJc3dpdGNoIChwc3ApIHsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKIAkJaWYgKGJhdHRlcnktPnJhdGVfbm93IDwgMCkKQEAgLTIyNSwxMSArMjMwLDE3IEBACiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1c6CiAJCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPnJhdGVfbm93KSAqCiAJCQkJYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSkgKiAxMDAwOworCQl2YWwtPmludHZhbCAqPSAoYWNwaV9iYXR0ZXJ5X21vZGUoYmF0dGVyeSkpID8KKwkJCQkoYmF0dGVyeS0+dm9sdGFnZV9ub3cgKgorCQkJCWFjcGlfYmF0dGVyeV92c2NhbGUoYmF0dGVyeSkgLyAxMDAwKSA6IDE7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9BVkc6CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkc6CiAJCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPnJhdGVfYXZnKSAqCiAJCQkJYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSkgKiAxMDAwOworCQl2YWwtPmludHZhbCAqPSAoYWNwaV9iYXR0ZXJ5X21vZGUoYmF0dGVyeSkpID8KKwkJCQkoYmF0dGVyeS0+dm9sdGFnZV9ub3cgKgorCQkJCWFjcGlfYmF0dGVyeV92c2NhbGUoYmF0dGVyeSkgLyAxMDAwKSA6IDE7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CiAJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+c3RhdGVfb2ZfY2hhcmdlOwpAQCAtOTAzLDggKzkxNCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFjcGlfc2JzX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwotCiBzdGF0aWMgaW50IGFjcGlfc2JzX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9zYnMgKnNiczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggNmM5NDk2MC4uM2VkODBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTQyOCw2ICs0MjgsMjIgQEAKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICIxMDAwIFNlcmllcyIpLAogCQl9LAogCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCisJLmlkZW50ID0gIkFzdXMgQThOLVNMSSBERUxVWEUiLAorCS5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSU5DLiIpLAorCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJBOE4tU0xJIERFTFVYRSIpLAorCQl9LAorCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfb2xkX3N1c3BlbmRfb3JkZXJpbmcsCisJLmlkZW50ID0gIkFzdXMgQThOLVNMSSBQcmVtaXVtIiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIElOQy4iKSwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQThOLVNMSSBQcmVtaXVtIiksCisJCX0sCisJfSwKIAl7fSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXNmcy5jIGIvZHJpdmVycy9hY3BpL3N5c2ZzLmMKaW5kZXggNzcyNTVmMi4uYzUzOGQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c2ZzLmMKQEAgLTE0OSwxMiArMTQ5LDEyIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHBhcmFtX29wc19kZWJ1Z19sYXllciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBwYXJhbV9vcHNfZGVidWdfbGF5ZXIgPSB7CiAJLnNldCA9IHBhcmFtX3NldF91aW50LAogCS5nZXQgPSBwYXJhbV9nZXRfZGVidWdfbGF5ZXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgcGFyYW1fb3BzX2RlYnVnX2xldmVsID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHBhcmFtX29wc19kZWJ1Z19sZXZlbCA9IHsKIAkuc2V0ID0gcGFyYW1fc2V0X3VpbnQsCiAJLmdldCA9IHBhcmFtX2dldF9kZWJ1Z19sZXZlbCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCAyNjA3ZTE3Li40OGZiYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCQkJCXRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzIGFjcGlfdGhlcm1hbF96b25lX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgYWNwaV90aGVybWFsX3pvbmVfb3BzID0gewogCS5iaW5kID0gYWNwaV90aGVybWFsX2JpbmRfY29vbGluZ19kZXZpY2UsCiAJLnVuYmluZAk9IGFjcGlfdGhlcm1hbF91bmJpbmRfY29vbGluZ19kZXZpY2UsCiAJLmdldF90ZW1wID0gdGhlcm1hbF9nZXRfdGVtcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggYWRhNGI0ZC4uMDhhNDRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCXJldHVybiBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHZpZGVvLCBsZXZlbCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgdmlkZW9fY29vbGluZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzIHZpZGVvX2Nvb2xpbmdfb3BzID0gewogCS5nZXRfbWF4X3N0YXRlID0gdmlkZW9fZ2V0X21heF9zdGF0ZSwKIAkuZ2V0X2N1cl9zdGF0ZSA9IHZpZGVvX2dldF9jdXJfc3RhdGUsCiAJLnNldF9jdXJfc3RhdGUgPSB2aWRlb19zZXRfY3VyX3N0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggY2EzZTZiZS4uNTk4N2UwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC00NjgsNiArNDY4LDE1IEBACiAJICBpbnRlcmZhY2UgY2FyZC4gIFRoaXMgaXMgbm90IHJlcXVpcmVkIGZvciBJQ1MgcGFydGl0aW9uIHN1cHBvcnQuCiAJICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE4gdG8gdGhpcy4KIAorY29uZmlnIFBBVEFfSU1YCisJdHJpc3RhdGUgIlBBVEEgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGlNWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTVhDCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUEFUQSBob3N0IGF2YWlsYWJsZSBvbiBGcmVlc2NhbGUKKyAgICAgICAgICBpTVggU29Dcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFBBVEFfSVQ4MjEzCiAJdHJpc3RhdGUgIklUODIxMyBQQVRBIHN1cHBvcnQgKEV4cGVyaW1lbnRhbCkiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9NYWtlZmlsZSBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCmluZGV4IDhhYzY0ZTEuLjk1NTBkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYXRhL01ha2VmaWxlCkBAIC00OCw2ICs0OCw3IEBACiBvYmotJChDT05GSUdfUEFUQV9IUFQzWDJOKQkrPSBwYXRhX2hwdDN4Mm4ubwogb2JqLSQoQ09ORklHX1BBVEFfSFBUM1gzKQkrPSBwYXRhX2hwdDN4My5vCiBvYmotJChDT05GSUdfUEFUQV9JQ1NJREUpCSs9IHBhdGFfaWNzaWRlLm8KK29iai0kKENPTkZJR19QQVRBX0lNWCkJCSs9IHBhdGFfaW14Lm8KIG9iai0kKENPTkZJR19QQVRBX0lUODIxMykJKz0gcGF0YV9pdDgyMTMubwogb2JqLSQoQ09ORklHX1BBVEFfSVQ4MjFYKQkrPSBwYXRhX2l0ODIxeC5vCiBvYmotJChDT05GSUdfUEFUQV9KTUlDUk9OKQkrPSBwYXRhX2ptaWNyb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKaW5kZXggZTBhNWI1NS4uYmI3YzVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCkBAIC0yMTgsMTIgKzIxOCwxMiBAQAogCWF0YV9hY3BpX3VldmVudChkZXYtPmxpbmstPmFwLCBkZXYsIGV2ZW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBhY3BpX2RvY2tfb3BzIGF0YV9hY3BpX2Rldl9kb2NrX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kb2NrX29wcyBhdGFfYWNwaV9kZXZfZG9ja19vcHMgPSB7CiAJLmhhbmRsZXIgPSBhdGFfYWNwaV9kZXZfbm90aWZ5X2RvY2ssCiAJLnVldmVudCA9IGF0YV9hY3BpX2Rldl91ZXZlbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGFjcGlfZG9ja19vcHMgYXRhX2FjcGlfYXBfZG9ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZG9ja19vcHMgYXRhX2FjcGlfYXBfZG9ja19vcHMgPSB7CiAJLmhhbmRsZXIgPSBhdGFfYWNwaV9hcF9ub3RpZnlfZG9jaywKIAkudWV2ZW50ID0gYXRhX2FjcGlfYXBfdWV2ZW50LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaW14LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lteC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWQ5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9wYXRhX2lteC5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogRnJlZXNjYWxlIGlNWCBQQVRBIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPgorICoKKyAqIEJhc2VkIG9uIHBhdGFfcGxhdGZvcm0gLSBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVE9ETzoKKyAqIC0gZG1hZW5naW5lIHN1cHBvcnQKKyAqIC0gY2hlY2sgaWYgdGltaW5nIHN0dWZmIG5lZWRlZAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInBhdGFfaW14IgorCisjZGVmaW5lIFBBVEFfSU1YX0FUQV9DT05UUk9MCQkweDI0CisjZGVmaW5lIFBBVEFfSU1YX0FUQV9DVFJMX0ZJRk9fUlNUX0IJKDE8PDcpCisjZGVmaW5lIFBBVEFfSU1YX0FUQV9DVFJMX0FUQV9SU1RfQgkoMTw8NikKKyNkZWZpbmUgUEFUQV9JTVhfQVRBX0NUUkxfSU9SRFlfRU4JKDE8PDApCisjZGVmaW5lIFBBVEFfSU1YX0FUQV9JTlRfRU4JCTB4MkMKKyNkZWZpbmUgUEFUQV9JTVhfQVRBX0lOVFJfQVRBX0lOVFJRMgkoMTw8MykKKyNkZWZpbmUgUEFUQV9JTVhfRFJJVkVfREFUQQkJMHhBMAorI2RlZmluZSBQQVRBX0lNWF9EUklWRV9DT05UUk9MCQkweEQ4CisKK3N0cnVjdCBwYXRhX2lteF9wcml2IHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJLyogdGltaW5ncy9pbnRlcnJ1cHQvY29udHJvbCByZWdzICovCisJdTggKmhvc3RfcmVnczsKKwl1MzIgYXRhX2N0bDsKK307CisKK3N0YXRpYyBpbnQgcGF0YV9pbXhfc2V0X21vZGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqKnVudXNlZCkKK3sKKwlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKKwlzdHJ1Y3QgcGF0YV9pbXhfcHJpdiAqcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdTMyIHZhbDsKKworCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CisJCWRldi0+cGlvX21vZGUgPSBkZXYtPnhmZXJfbW9kZSA9IFhGRVJfUElPXzA7CisJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87CisJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1BJTzsKKworCQl2YWwgPSBfX3Jhd19yZWFkbChwcml2LT5ob3N0X3JlZ3MgKyBQQVRBX0lNWF9BVEFfQ09OVFJPTCk7CisJCWlmIChhdGFfcGlvX25lZWRfaW9yZHkoZGV2KSkKKwkJCXZhbCB8PSBQQVRBX0lNWF9BVEFfQ1RSTF9JT1JEWV9FTjsKKwkJZWxzZQorCQkJdmFsICY9IH5QQVRBX0lNWF9BVEFfQ1RSTF9JT1JEWV9FTjsKKwkJX19yYXdfd3JpdGVsKHZhbCwgcHJpdi0+aG9zdF9yZWdzICsgUEFUQV9JTVhfQVRBX0NPTlRST0wpOworCisJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9JTkZPLCAiY29uZmlndXJlZCBmb3IgUElPXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBhdGFfaW14X3NodCA9IHsKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGF0YV9pbXhfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZmZfZGF0YV94ZmVyCQk9IGF0YV9zZmZfZGF0YV94ZmVyX25vaXJxLAorCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlX3Vua25vd24sCisJLnNldF9tb2RlCQk9IHBhdGFfaW14X3NldF9tb2RlLAorfTsKKworc3RhdGljIHZvaWQgcGF0YV9pbXhfc2V0dXBfcG9ydChzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkcikKK3sKKwkvKiBGaXh1cCB0aGUgcG9ydCBzaGlmdCBmb3IgcGxhdGZvcm1zIHRoYXQgbmVlZCBpdCAqLworCWlvYWRkci0+ZGF0YV9hZGRyCT0gaW9hZGRyLT5jbWRfYWRkciArIChBVEFfUkVHX0RBVEEgICAgPDwgMik7CisJaW9hZGRyLT5lcnJvcl9hZGRyCT0gaW9hZGRyLT5jbWRfYWRkciArIChBVEFfUkVHX0VSUiAgICAgPDwgMik7CisJaW9hZGRyLT5mZWF0dXJlX2FkZHIJPSBpb2FkZHItPmNtZF9hZGRyICsgKEFUQV9SRUdfRkVBVFVSRSA8PCAyKTsKKwlpb2FkZHItPm5zZWN0X2FkZHIJPSBpb2FkZHItPmNtZF9hZGRyICsgKEFUQV9SRUdfTlNFQ1QgICA8PCAyKTsKKwlpb2FkZHItPmxiYWxfYWRkcgk9IGlvYWRkci0+Y21kX2FkZHIgKyAoQVRBX1JFR19MQkFMICAgIDw8IDIpOworCWlvYWRkci0+bGJhbV9hZGRyCT0gaW9hZGRyLT5jbWRfYWRkciArIChBVEFfUkVHX0xCQU0gICAgPDwgMik7CisJaW9hZGRyLT5sYmFoX2FkZHIJPSBpb2FkZHItPmNtZF9hZGRyICsgKEFUQV9SRUdfTEJBSCAgICA8PCAyKTsKKwlpb2FkZHItPmRldmljZV9hZGRyCT0gaW9hZGRyLT5jbWRfYWRkciArIChBVEFfUkVHX0RFVklDRSAgPDwgMik7CisJaW9hZGRyLT5zdGF0dXNfYWRkcgk9IGlvYWRkci0+Y21kX2FkZHIgKyAoQVRBX1JFR19TVEFUVVMgIDw8IDIpOworCWlvYWRkci0+Y29tbWFuZF9hZGRyCT0gaW9hZGRyLT5jbWRfYWRkciArIChBVEFfUkVHX0NNRCAgICAgPDwgMik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBhdGFfaW14X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IHBhdGFfaW14X3ByaXYgKnByaXY7CisJaW50IGlycSA9IDA7CisJc3RydWN0IHJlc291cmNlICppb19yZXM7CisKKwlpb19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChpb19yZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBwYXRhX2lteF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihwcml2LT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwcml2LT5jbGspOworCX0KKworCWNsa19lbmFibGUocHJpdi0+Y2xrKTsKKworCWhvc3QgPSBhdGFfaG9zdF9hbGxvYygmcGRldi0+ZGV2LCAxKTsKKwlpZiAoIWhvc3QpCisJCWdvdG8gZnJlZV9wcml2OworCisJaG9zdC0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKwlhcCA9IGhvc3QtPnBvcnRzWzBdOworCisJYXAtPm9wcyA9ICZwYXRhX2lteF9wb3J0X29wczsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsKKwlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKKworCXByaXYtPmhvc3RfcmVncyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCBpb19yZXMtPnN0YXJ0LAorCQlyZXNvdXJjZV9zaXplKGlvX3JlcykpOworCWlmICghcHJpdi0+aG9zdF9yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSU8vQ1RMIGJhc2VcbiIpOworCQlnb3RvIGZyZWVfcHJpdjsKKwl9CisKKwlhcC0+aW9hZGRyLmNtZF9hZGRyID0gcHJpdi0+aG9zdF9yZWdzICsgUEFUQV9JTVhfRFJJVkVfREFUQTsKKwlhcC0+aW9hZGRyLmN0bF9hZGRyID0gcHJpdi0+aG9zdF9yZWdzICsgUEFUQV9JTVhfRFJJVkVfQ09OVFJPTDsKKworCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBhcC0+aW9hZGRyLmN0bF9hZGRyOworCisJcGF0YV9pbXhfc2V0dXBfcG9ydCgmYXAtPmlvYWRkcik7CisKKwlhdGFfcG9ydF9kZXNjKGFwLCAiY21kIDB4JWxseCBjdGwgMHglbGx4IiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpb19yZXMtPnN0YXJ0ICsgUEFUQV9JTVhfRFJJVkVfREFUQSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpb19yZXMtPnN0YXJ0ICsgUEFUQV9JTVhfRFJJVkVfQ09OVFJPTCk7CisKKwkvKiBkZWFzc2VydCByZXNldHMgKi8KKwlfX3Jhd193cml0ZWwoUEFUQV9JTVhfQVRBX0NUUkxfRklGT19SU1RfQiB8CisJCQlQQVRBX0lNWF9BVEFfQ1RSTF9BVEFfUlNUX0IsCisJCQlwcml2LT5ob3N0X3JlZ3MgKyBQQVRBX0lNWF9BVEFfQ09OVFJPTCk7CisJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwlfX3Jhd193cml0ZWwoUEFUQV9JTVhfQVRBX0lOVFJfQVRBX0lOVFJRMiwKKwkJCXByaXYtPmhvc3RfcmVncyArIFBBVEFfSU1YX0FUQV9JTlRfRU4pOworCisJLyogYWN0aXZhdGUgKi8KKwlyZXR1cm4gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBhdGFfc2ZmX2ludGVycnVwdCwgMCwKKwkJCQkmcGF0YV9pbXhfc2h0KTsKKworZnJlZV9wcml2OgorCWNsa19kaXNhYmxlKHByaXYtPmNsayk7CisJY2xrX3B1dChwcml2LT5jbGspOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYXRhX2lteF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IHBhdGFfaW14X3ByaXYgKnByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisKKwlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKwlfX3Jhd193cml0ZWwoMCwgcHJpdi0+aG9zdF9yZWdzICsgUEFUQV9JTVhfQVRBX0lOVF9FTik7CisKKwljbGtfZGlzYWJsZShwcml2LT5jbGspOworCWNsa19wdXQocHJpdi0+Y2xrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBhdGFfaW14X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwYXRhX2lteF9wcml2ICpwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBhdGFfaG9zdF9zdXNwZW5kKGhvc3QsIFBNU0dfU1VTUEVORCk7CisJaWYgKCFyZXQpIHsKKwkJX19yYXdfd3JpdGVsKDAsIHByaXYtPmhvc3RfcmVncyArIFBBVEFfSU1YX0FUQV9JTlRfRU4pOworCQlwcml2LT5hdGFfY3RsID0KKwkJCV9fcmF3X3JlYWRsKHByaXYtPmhvc3RfcmVncyArIFBBVEFfSU1YX0FUQV9DT05UUk9MKTsKKwkJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhdGFfaW14X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBhdGFfaW14X3ByaXYgKnByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKHByaXYtPmNsayk7CisKKwlfX3Jhd193cml0ZWwocHJpdi0+YXRhX2N0bCwgcHJpdi0+aG9zdF9yZWdzICsgUEFUQV9JTVhfQVRBX0NPTlRST0wpOworCisJX19yYXdfd3JpdGVsKFBBVEFfSU1YX0FUQV9JTlRSX0FUQV9JTlRSUTIsCisJCQlwcml2LT5ob3N0X3JlZ3MgKyBQQVRBX0lNWF9BVEFfSU5UX0VOKTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGF0YV9pbXhfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcGF0YV9pbXhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBhdGFfaW14X3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGF0YV9pbXhfZHJpdmVyID0geworCS5wcm9iZQkJPSBwYXRhX2lteF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBhdGFfaW14X3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gRFJWX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCQk9ICZwYXRhX2lteF9wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGF0YV9pbXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBhdGFfaW14X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYXRhX2lteF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhdGFfaW14X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwYXRhX2lteF9pbml0KTsKK21vZHVsZV9leGl0KHBhdGFfaW14X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBcm5hdWQgUGF0YXJkIDxhcm5hdWQucGF0YXJkQHJ0cC1uZXQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJsb3ctbGV2ZWwgZHJpdmVyIGZvciBpTVggUEFUQSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDY1ZTRiZTYuLjhlOWY1MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtMTI0LDYgKzEyNCwxNyBAQAogCXsgTlVMTCB9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgbm9fYXRhcGlfZG1hX2RtaV90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIkFWRVJBVEVDIDMyMDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQVZFUkFURUMiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMyMDAiKSwKKwkJfSwKKwl9LAorCXsgfQorfTsKKwogc3RydWN0IHZpYV9wb3J0IHsKIAl1OCBjYWNoZWRfZGV2aWNlOwogfTsKQEAgLTM1NSw2ICszNjYsMTMgQEAKIAkJCW1hc2sgJj0gfiBBVEFfTUFTS19VRE1BOwogCQl9CiAJfQorCisJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSAmJgorCSAgICBkbWlfY2hlY2tfc3lzdGVtKG5vX2F0YXBpX2RtYV9kbWlfdGFibGUpKSB7CisJCWF0YV9kZXZfd2FybihkZXYsICJjb250cm9sbGVyIGxvY2tzIHVwIG9uIEFUQVBJIERNQSwgZm9yY2luZyBQSU9cbiIpOworCQltYXNrICY9IEFUQV9NQVNLX1BJTzsKKwl9CisKIAlyZXR1cm4gbWFzazsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYyBiL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMKaW5kZXggMGE5YTc3NC4uNWM0MjM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCkBAIC0xMzI5LDcgKzEzMjksNyBAQAogCQkJZGV2X2VycihhcC0+ZGV2LCAiJXM6IGRtYV9hbGxvY19jb2hlcmVudCBmYWlsZWRcbiIsCiAJCQkJIF9fZnVuY19fKTsKIAkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIENMRUFOVVA7CisJCQlnb3RvIENMRUFOVVBfQUxMT0M7CiAJCX0KIAl9CiAKQEAgLTEzNDksMTUgKzEzNDksMTMgQEAKIAkvKiBDbGVhciBhbnkgZXJyb3IgYml0cyBiZWZvcmUgbGliYXRhIHN0YXJ0cyBpc3N1aW5nIGNvbW1hbmRzICovCiAJY2xlYXJfc2Vycm9yKCk7CiAJYXAtPnByaXZhdGVfZGF0YSA9IGhzZGV2cDsKKwlkZXZfZGJnKGFwLT5kZXYsICIlczogZG9uZVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOwogCitDTEVBTlVQX0FMTE9DOgorCWtmcmVlKGhzZGV2cCk7CiBDTEVBTlVQOgotCWlmIChlcnIpIHsKLQkJc2F0YV9kd2NfcG9ydF9zdG9wKGFwKTsKLQkJZGV2X2RiZyhhcC0+ZGV2LCAiJXM6IGZhaWxcbiIsIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQlkZXZfZGJnKGFwLT5kZXYsICIlczogZG9uZVxuIiwgX19mdW5jX18pOwotCX0KLQorCWRldl9kYmcoYXAtPmRldiwgIiVzOiBmYWlsLiBhcC0+aWQgPSAlZFxuIiwgX19mdW5jX18sIGFwLT5wcmludF9pZCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggOThjMWQ3OC4uOWRmYjQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAl1OCBzdGF0dXM7CiAKIAlpZiAodW5saWtlbHkoYm1kbWEyICYgU0lMX0RNQV9TQVRBX0lSUSkpIHsKLQkJdTMyIHNlcnJvcjsKKwkJdTMyIHNlcnJvciA9IDB4ZmZmZmZmZmY7CiAKIAkJLyogU0lFTiBkb2Vzbid0IG1hc2sgU0FUQSBJUlFzIG9uIHNvbWUgMzExMnMuICBUaG9zZQogCQkgKiBjb250cm9sbGVycyBjb250aW51ZSB0byBhc3NlcnQgSVJRIGFzIGxvbmcgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZXZyZXMuYyBiL2RyaXZlcnMvYmFzZS9kZXZyZXMuYwppbmRleCBjZjdhMGM3Li42NWNkNzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGV2cmVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2RldnJlcy5jCkBAIC0zOTcsNiArMzk3LDcgQEAKIAogc3RhdGljIGludCByZWxlYXNlX25vZGVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QsCiAJCQkgc3RydWN0IGxpc3RfaGVhZCAqZW5kLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCV9fcmVsZWFzZXMoJmRldi0+ZGV2cmVzX2xvY2spCiB7CiAJTElTVF9IRUFEKHRvZG8pOwogCWludCBjbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCmluZGV4IGI4OWZmZmMuLmE0NzYwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIHsKIAljaGFyICpwYXRoOwogCWNoYXIgKnM7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCS8qIHBhcmVudCBkaXJlY3RvcmllcyBkbyBub3QgZXhpc3QsIGNyZWF0ZSB0aGVtICovCiAJcGF0aCA9IGtzdHJkdXAobm9kZXBhdGgsIEdGUF9LRVJORUwpOwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIF9faW5pdGRhdGEgREVDTEFSRV9DT01QTEVUSU9OKHNldHVwX2RvbmUpOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihzZXR1cF9kb25lKTsKIAogc3RhdGljIGludCBoYW5kbGUoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggYmJiMDNlNi4uMDZlZDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKQEAgLTUyMSwxMSArNTIxLDYgQEAKIAlpZiAoIWZpcm13YXJlX3ApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKFdBUk5fT04odXNlcm1vZGVoZWxwZXJfaXNfZGlzYWJsZWQoKSkpIHsKLQkJZGV2X2VycihkZXZpY2UsICJmaXJtd2FyZTogJXMgd2lsbCBub3QgYmUgbG9hZGVkXG4iLCBuYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KIAkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga3phbGxvYyhzaXplb2YoKmZpcm13YXJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZSkgewogCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLApAQCAtNTM5LDYgKzUzNCwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoV0FSTl9PTih1c2VybW9kZWhlbHBlcl9pc19kaXNhYmxlZCgpKSkgeworCQlkZXZfZXJyKGRldmljZSwgImZpcm13YXJlOiAlcyB3aWxsIG5vdCBiZSBsb2FkZWRcbiIsIG5hbWUpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwogCWlmICh1ZXZlbnQpCiAJCWRldl9kYmcoZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDBjYWQ5YzcuLjk5YTUyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICogYXJjaF9zZXR1cF9wZGV2X2FyY2hkYXRhIC0gQWxsb3cgbWFuaXB1bGF0aW9uIG9mIGFyY2hkYXRhIGJlZm9yZSBpdHMgdXNlZAotICogQGRldjogcGxhdGZvcm0gZGV2aWNlCisgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlCiAgKgogICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHBsYXRmb3JtX2RldmljZV9hZGQoKSBzdWNoIHRoYXQgYW55IHBkZXZfYXJjaGRhdGEgbWF5CiAgKiBiZSBzZXR1cCBiZWZvcmUgdGhlIHBsYXRmb3JtX25vdGlmaWVyIGlzIGNhbGxlZC4gIFNvIGlmIGEgdXNlciBuZWVkcyB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCmluZGV4IGE4NDZiMmYuLjJjMThkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogc3RydWN0IHBtX2Nsa19kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsb2NrX2xpc3Q7Ci0Jc3RydWN0IG11dGV4IGxvY2s7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogZW51bSBwY2Vfc3RhdHVzIHsKQEAgLTczLDkgKzczLDkgQEAKIAkJfQogCX0KIAotCW11dGV4X2xvY2soJnBjZC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGNkLT5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZjZS0+bm9kZSwgJnBjZC0+Y2xvY2tfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZwY2QtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGNkLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODMsOCArODMsOCBAQAogICogX19wbV9jbGtfcmVtb3ZlIC0gRGVzdHJveSBQTSBjbG9jayBlbnRyeS4KICAqIEBjZTogUE0gY2xvY2sgZW50cnkgdG8gZGVzdHJveS4KICAqCi0gKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIG11dGV4IHByb3RlY3RpbmcgdGhlIFBNIGxpc3Qgb2YgY2xvY2tzCi0gKiBjb3JyZXNwb25kaW5nIHRoZSB0aGUgQGNlJ3MgZGV2aWNlLgorICogVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHVuZGVyIHRoZSBzcGlubG9jayBwcm90ZWN0aW5nIHRoZSBQTSBsaXN0IG9mCisgKiBjbG9ja3MgY29ycmVzcG9uZGluZyB0aGUgdGhlIEBjZSdzIGRldmljZS4KICAqLwogc3RhdGljIHZvaWQgX19wbV9jbGtfcmVtb3ZlKHN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2UpCiB7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlpZiAoIXBjZCkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmcGNkLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwY2QtPmxvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZSwgJnBjZC0+Y2xvY2tfbGlzdCwgbm9kZSkgewogCQlpZiAoIWNvbl9pZCAmJiAhY2UtPmNvbl9pZCkgewpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCX0KIAl9CiAKLQltdXRleF91bmxvY2soJnBjZC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwY2QtPmxvY2spOwogfQogCiAvKioKQEAgLTE1OCw3ICsxNTgsNyBAQAogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZwY2QtPmNsb2NrX2xpc3QpOwotCW11dGV4X2luaXQoJnBjZC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBjZC0+bG9jayk7CiAJZGV2LT5wb3dlci5zdWJzeXNfZGF0YSA9IHBjZDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MSwxMiArMTgxLDEyIEBACiAKIAlkZXYtPnBvd2VyLnN1YnN5c19kYXRhID0gTlVMTDsKIAotCW11dGV4X2xvY2soJnBjZC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGNkLT5sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGNlLCBjLCAmcGNkLT5jbG9ja19saXN0LCBub2RlKQogCQlfX3BtX2Nsa19yZW1vdmUoY2UpOwogCi0JbXV0ZXhfdW5sb2NrKCZwY2QtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGNkLT5sb2NrKTsKIAogCWtmcmVlKHBjZCk7CiB9CkBAIC0yMjAsMTMgKzIyMCwxNCBAQAogewogCXN0cnVjdCBwbV9jbGtfZGF0YSAqcGNkID0gX190b19wY2QoZGV2KTsKIAlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmICghcGNkKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJnBjZC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZC0+bG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNlLCAmcGNkLT5jbG9ja19saXN0LCBub2RlKSB7CiAJCWlmIChjZS0+c3RhdHVzID09IFBDRV9TVEFUVVNfTk9ORSkKQEAgLTIzOCw3ICsyMzksNyBAQAogCQl9CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZwY2QtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsMTMgKzI1MiwxNCBAQAogewogCXN0cnVjdCBwbV9jbGtfZGF0YSAqcGNkID0gX190b19wY2QoZGV2KTsKIAlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWlmICghcGNkKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJnBjZC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZC0+bG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZSwgJnBjZC0+Y2xvY2tfbGlzdCwgbm9kZSkgewogCQlpZiAoY2UtPnN0YXR1cyA9PSBQQ0VfU1RBVFVTX05PTkUpCkBAIC0yNjksNyArMjcxLDcgQEAKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmcGNkLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2QtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ0LDYgKzM0Niw3IEBACiB7CiAJc3RydWN0IHBtX2Nsa19kYXRhICpwY2QgPSBfX3RvX3BjZChkZXYpOwogCXN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldl9kYmcoZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC0zNTEsMTIgKzM1NCwxMiBAQAogCWlmICghcGNkIHx8ICFkZXYtPmRyaXZlcikKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZwY2QtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY2QtPmxvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjZSwgJnBjZC0+Y2xvY2tfbGlzdCwgbm9kZSkKIAkJY2xrX2Rpc2FibGUoY2UtPmNsayk7CiAKLQltdXRleF91bmxvY2soJnBjZC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2OSw2ICszNzIsNyBAQAogewogCXN0cnVjdCBwbV9jbGtfZGF0YSAqcGNkID0gX190b19wY2QoZGV2KTsKIAlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKIApAQCAtMzc2LDEyICszODAsMTIgQEAKIAlpZiAoIXBjZCB8fCAhZGV2LT5kcml2ZXIpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmcGNkLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNkLT5sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlLCAmcGNkLT5jbG9ja19saXN0LCBub2RlKQogCQljbGtfZW5hYmxlKGNlLT5jbGspOwogCi0JbXV0ZXhfdW5sb2NrKCZwY2QtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKaW5kZXggYmU4NzE0YS4uMWMzNzQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYwpAQCAtODAsNyArODAsNiBAQAogaW50IHBtX2dlbnBkX3Bvd2Vyb24oc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCkKIHsKIAlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKnBhcmVudCA9IGdlbnBkLT5wYXJlbnQ7Ci0JREVGSU5FX1dBSVQod2FpdCk7CiAJaW50IHJldCA9IDA7CiAKICBzdGFydDoKQEAgLTExMiw3ICsxMTEsNyBAQAogCX0KIAogCWlmIChnZW5wZC0+cG93ZXJfb24pIHsKLQkJaW50IHJldCA9IGdlbnBkLT5wb3dlcl9vbihnZW5wZCk7CisJCXJldCA9IGdlbnBkLT5wb3dlcl9vbihnZW5wZCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC00NjEsNiArNDYwLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkIC0gUG93ZXIgb2ZmIGFsbCBQTSBkb21haW5zIHdpdGggbm8gZGV2aWNlcyBpbiB1c2UuCisgKi8KK3ZvaWQgcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkKHZvaWQpCit7CisJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZDsKKworCW11dGV4X2xvY2soJmdwZF9saXN0X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW5wZCwgJmdwZF9saXN0LCBncGRfbGlzdF9ub2RlKQorCQlnZW5wZF9xdWV1ZV9wb3dlcl9vZmZfd29yayhnZW5wZCk7CisKKwltdXRleF91bmxvY2soJmdwZF9saXN0X2xvY2spOworfQorCiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VucGRfcG93ZXJfb2ZmX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSB7fQpAQCAtMTI1NiwxOCArMTI3MCwzIEBACiAJbGlzdF9hZGQoJmdlbnBkLT5ncGRfbGlzdF9ub2RlLCAmZ3BkX2xpc3QpOwogCW11dGV4X3VubG9jaygmZ3BkX2xpc3RfbG9jayk7CiB9Ci0KLS8qKgotICogcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkIC0gUG93ZXIgb2ZmIGFsbCBQTSBkb21haW5zIHdpdGggbm8gZGV2aWNlcyBpbiB1c2UuCi0gKi8KLXZvaWQgcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkKHZvaWQpCi17Ci0Jc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZDsKLQotCW11dGV4X2xvY2soJmdwZF9saXN0X2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShnZW5wZCwgJmdwZF9saXN0LCBncGRfbGlzdF9ub2RlKQotCQlnZW5wZF9xdWV1ZV9wb3dlcl9vZmZfd29yayhnZW5wZCk7Ci0KLQltdXRleF91bmxvY2soJmdwZF9saXN0X2xvY2spOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggOGRjMjQ3Yy4uYWNiM2Y4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0yMjYsMTEgKzIyNiwxNyBAQAogCQljYWxsYmFjayA9IE5VTEw7CiAKIAlpZiAoY2FsbGJhY2spIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlpZiAoZGV2LT5wb3dlci5pcnFfc2FmZSkKKwkJCXNwaW5fdW5sb2NrKCZkZXYtPnBvd2VyLmxvY2spOworCQllbHNlCisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAKIAkJY2FsbGJhY2soZGV2KTsKIAotCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlpZiAoZGV2LT5wb3dlci5pcnFfc2FmZSkKKwkJCXNwaW5fbG9jaygmZGV2LT5wb3dlci5sb2NrKTsKKwkJZWxzZQorCQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAl9CiAKIAlkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWkyYy5jCmluZGV4IGMyMjMxZmYuLmM0ZjdhNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWkyYy5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWkyYy5jCkBAIC0xMTMsMyArMTEzLDQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9pbml0X2kyYyk7CiAKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLXNwaS5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtc3BpLmMKaW5kZXggNGRlYmEwNi4uZjgzOTY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtc3BpLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtc3BpLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiBzdGF0aWMgaW50IHJlZ21hcF9zcGlfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCiB7CkBAIC03MCwzICs3MSw1IEBACiAJcmV0dXJuIHJlZ21hcF9pbml0KCZzcGktPmRldiwgJnJlZ21hcF9zcGksIGNvbmZpZyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWdtYXBfaW5pdF9zcGkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAuYwppbmRleCBjZjM1NjVjLi4yMDY2M2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC5jCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMKQEAgLTE2OCwxMyArMTY4LDExIEBACiAJbWFwLT53b3JrX2J1ZiA9IGttYWxsb2MobWFwLT5mb3JtYXQuYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCWlmIChtYXAtPndvcmtfYnVmID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfYnVzOworCQlnb3RvIGVycl9tYXA7CiAJfQogCiAJcmV0dXJuIG1hcDsKIAotZXJyX2J1czoKLQltb2R1bGVfcHV0KG1hcC0+YnVzLT5vd25lcik7CiBlcnJfbWFwOgogCWtmcmVlKG1hcCk7CiBlcnI6CkBAIC0xODgsNyArMTg2LDYgQEAKIHZvaWQgcmVnbWFwX2V4aXQoc3RydWN0IHJlZ21hcCAqbWFwKQogewogCWtmcmVlKG1hcC0+d29ya19idWYpOwotCW1vZHVsZV9wdXQobWFwLT5idXMtPm93bmVyKTsKIAlrZnJlZShtYXApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVnbWFwX2V4aXQpOwpAQCAtMzE3LDcgKzMxNCw3IEBACiAJCXU4WzBdIHw9IG1hcC0+YnVzLT5yZWFkX2ZsYWdfbWFzazsKIAogCXJldCA9IG1hcC0+YnVzLT5yZWFkKG1hcC0+ZGV2LCBtYXAtPndvcmtfYnVmLCBtYXAtPmZvcm1hdC5yZWdfYnl0ZXMsCi0JCQkgICAgIHZhbCwgbWFwLT5mb3JtYXQudmFsX2J5dGVzKTsKKwkJCSAgICAgdmFsLCB2YWxfbGVuKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9tYWluLmMgYi9kcml2ZXJzL2JjbWEvbWFpbi5jCmluZGV4IDg3M2UyZTQuLjczYjdiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmMKKysrIGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtMTUsNiArMTUsNyBAQAogc3RhdGljIGludCBiY21hX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogc3RhdGljIGludCBiY21hX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBiY21hX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KTsKIAogc3RhdGljIHNzaXplX3QgbWFudWZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC00OSw2ICs1MCw3IEBACiAJLm1hdGNoCQk9IGJjbWFfYnVzX21hdGNoLAogCS5wcm9iZQkJPSBiY21hX2RldmljZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGJjbWFfZGV2aWNlX3JlbW92ZSwKKwkudWV2ZW50CQk9IGJjbWFfZGV2aWNlX3VldmVudCwKIAkuZGV2X2F0dHJzCT0gYmNtYV9kZXZpY2VfYXR0cnMsCiB9OwogCkBAIC0yMjcsNiArMjI5LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKworCXJldHVybiBhZGRfdWV2ZW50X3ZhcihlbnYsCisJCQkgICAgICAiTU9EQUxJQVM9YmNtYTptJTA0WGlkJTA0WHJldiUwMlhjbCUwMlgiLAorCQkJICAgICAgY29yZS0+aWQubWFudWYsIGNvcmUtPmlkLmlkLAorCQkJICAgICAgY29yZS0+aWQucmV2LCBjb3JlLT5pZC5jbGFzcyk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGJjbWFfbW9kaW5pdCh2b2lkKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKaW5kZXggNzE3ZDZlNC4uNmYwN2VjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmxvY2svS2NvbmZpZwpAQCAtMjU2LDYgKzI1NiwyMSBAQAogCiAJICBNb3N0IHVzZXJzIHdpbGwgYW5zd2VyIE4gaGVyZS4KIAorY29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlQKKwlpbnQgIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWUiCisJZGVwZW5kcyBvbiBCTEtfREVWX0xPT1AKKwlkZWZhdWx0IDgKKwloZWxwCisJICBTdGF0aWMgbnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB0byBiZSB1bmNvbmRpdGlvbmFsbHkgcHJlLWNyZWF0ZWQKKwkgIGF0IGluaXQgdGltZS4KKworCSAgVGhpcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBvdmVyd3JpdHRlbiBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUgb3Igd2l0aCBtb2R1bGUtcGFyYW1ldGVyIGxvb3AubWF4X2xvb3AuCisKKwkgIFRoZSBoaXN0b3JpYyBkZWZhdWx0IGlzIDguIElmIGEgbGF0ZSAyMDExIHZlcnNpb24gb2YgbG9zZXR1cCg4KQorCSAgaXMgdXNlZCwgaXQgY2FuIGJlIHNldCB0byAwLCBzaW5jZSBuZWVkZWQgbG9vcCBkZXZpY2VzIGNhbiBiZQorCSAgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHdpdGggdGhlIC9kZXYvbG9vcC1jb250cm9sIGludGVyZmFjZS4KKwogY29uZmlnIEJMS19ERVZfQ1JZUFRPTE9PUAogCXRyaXN0YXRlICJDcnlwdG9sb29wIFN1cHBvcnQiCiAJc2VsZWN0IENSWVBUTwpAQCAtNDcxLDcgKzQ4Niw3IEBACiAJICBpbiBhbm90aGVyIGRvbWFpbiB3aGljaCBkcml2ZXMgdGhlIGFjdHVhbCBibG9jayBkZXZpY2UuCiAKIGNvbmZpZyBYRU5fQkxLREVWX0JBQ0tFTkQKLQl0cmlzdGF0ZSAiQmxvY2stZGV2aWNlIGJhY2tlbmQgZHJpdmVyIgorCXRyaXN0YXRlICJYZW4gYmxvY2stZGV2aWNlIGJhY2tlbmQgZHJpdmVyIgogCWRlcGVuZHMgb24gWEVOX0JBQ0tFTkQKIAloZWxwCiAJICBUaGUgYmxvY2stZGV2aWNlIGJhY2tlbmQgZHJpdmVyIGFsbG93cyB0aGUga2VybmVsIHRvIGV4cG9ydCBpdHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCmluZGV4IDUxNWJjZDkuLjBmZWFiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwpAQCAtMTgyOSwxMCArMTgyOSwxMCBAQAogCiAJLyogc2lsZW50bHkgaWdub3JlIGNwdSBtYXNrIG9uIFVQIGtlcm5lbCAqLwogCWlmIChucl9jcHVfaWRzID4gMSAmJiBzYy5jcHVfbWFza1swXSAhPSAwKSB7Ci0JCWVyciA9IF9fYml0bWFwX3BhcnNlKHNjLmNwdV9tYXNrLCAzMiwgMCwKKwkJZXJyID0gYml0bWFwX3BhcnNlKHNjLmNwdV9tYXNrLCAzMiwKIAkJCQljcHVtYXNrX2JpdHMobmV3X2NwdV9tYXNrKSwgbnJfY3B1X2lkcyk7CiAJCWlmIChlcnIpIHsKLQkJCWRldl93YXJuKERFViwgIl9fYml0bWFwX3BhcnNlKCkgZmFpbGVkIHdpdGggJWRcbiIsIGVycik7CisJCQlkZXZfd2FybihERVYsICJiaXRtYXBfcGFyc2UoKSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyKTsKIAkJCXJldGNvZGUgPSBFUlJfQ1BVX01BU0tfUEFSU0U7CiAJCQlnb3RvIGZhaWw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNzZjOGRhNy4uNDcyMGM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTc1LDExICs3NSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGxpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotCisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyBMSVNUX0hFQUQobG9vcF9kZXZpY2VzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgobG9vcF9kZXZpY2VzX211dGV4KTsKK3N0YXRpYyBERUZJTkVfSURSKGxvb3BfaW5kZXhfaWRyKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobG9vcF9pbmRleF9tdXRleCk7CiAKIHN0YXRpYyBpbnQgbWF4X3BhcnQ7CiBzdGF0aWMgaW50IHBhcnRfc2hpZnQ7CkBAIC03MjIsMTcgKzcyMiwxMCBAQAogc3RhdGljIHNzaXplX3QgbG9vcF9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpwYWdlLAogCQkJICAgICAgc3NpemVfdCAoKmNhbGxiYWNrKShzdHJ1Y3QgbG9vcF9kZXZpY2UgKiwgY2hhciAqKSkKIHsKLQlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmwsICpsbyA9IE5VTEw7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpOworCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAKLQltdXRleF9sb2NrKCZsb29wX2RldmljZXNfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJmxvb3BfZGV2aWNlcywgbG9fbGlzdCkKLQkJaWYgKGRpc2tfdG9fZGV2KGwtPmxvX2Rpc2spID09IGRldikgewotCQkJbG8gPSBsOwotCQkJYnJlYWs7Ci0JCX0KLQltdXRleF91bmxvY2soJmxvb3BfZGV2aWNlc19tdXRleCk7Ci0KLQlyZXR1cm4gbG8gPyBjYWxsYmFjayhsbywgcGFnZSkgOiAtRUlPOworCXJldHVybiBjYWxsYmFjayhsbywgcGFnZSk7CiB9CiAKICNkZWZpbmUgTE9PUF9BVFRSX1JPKF9uYW1lKQkJCQkJCVwKQEAgLTc1MCwxMCArNzQzLDEwIEBACiAJc3NpemVfdCByZXQ7CiAJY2hhciAqcCA9IE5VTEw7CiAKLQltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwlzcGluX2xvY2tfaXJxKCZsby0+bG9fbG9jayk7CiAJaWYgKGxvLT5sb19iYWNraW5nX2ZpbGUpCiAJCXAgPSBkX3BhdGgoJmxvLT5sb19iYWNraW5nX2ZpbGUtPmZfcGF0aCwgYnVmLCBQQUdFX1NJWkUgLSAxKTsKLQltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycSgmbG8tPmxvX2xvY2spOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKHApKQogCQlyZXQgPSBQVFJfRVJSKHApOwpAQCAtMTAwNyw3ICsxMDAwLDkgQEAKIAogCWt0aHJlYWRfc3RvcChsby0+bG9fdGhyZWFkKTsKIAorCXNwaW5fbG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAlsby0+bG9fYmFja2luZ19maWxlID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAogCWxvb3BfcmVsZWFzZV94ZmVyKGxvKTsKIAlsby0+dHJhbnNmZXIgPSBOVUxMOwpAQCAtMTQ4NSwxMyArMTQ4MCwyMiBAQAogCiBzdGF0aWMgaW50IGxvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbzsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmxvb3BfaW5kZXhfbXV0ZXgpOworCWxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCWlmICghbG8pIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CiAKIAltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAlsby0+bG9fcmVmY250Kys7CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKLQotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmbG9vcF9pbmRleF9tdXRleCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCkBAIC0xNTU3LDQwICsxNTYxLDcxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdW5yZWdpc3Rlcl90cmFuc2Zlcl9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gcHRyOworCXN0cnVjdCBsb29wX2Z1bmNfdGFibGUgKnhmZXIgPSBkYXRhOworCisJbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJaWYgKGxvLT5sb19lbmNyeXB0aW9uID09IHhmZXIpCisJCWxvb3BfcmVsZWFzZV94ZmVyKGxvKTsKKwltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCXJldHVybiAwOworfQorCiBpbnQgbG9vcF91bnJlZ2lzdGVyX3RyYW5zZmVyKGludCBudW1iZXIpCiB7CiAJdW5zaWduZWQgaW50IG4gPSBudW1iZXI7Ci0Jc3RydWN0IGxvb3BfZGV2aWNlICpsbzsKIAlzdHJ1Y3QgbG9vcF9mdW5jX3RhYmxlICp4ZmVyOwogCiAJaWYgKG4gPT0gMCB8fCBuID49IE1BWF9MT19DUllQVCB8fCAoeGZlciA9IHhmZXJfZnVuY3Nbbl0pID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJeGZlcl9mdW5jc1tuXSA9IE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvLCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KSB7Ci0JCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwotCi0JCWlmIChsby0+bG9fZW5jcnlwdGlvbiA9PSB4ZmVyKQotCQkJbG9vcF9yZWxlYXNlX3hmZXIobG8pOwotCi0JCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7Ci0JfQotCisJaWRyX2Zvcl9lYWNoKCZsb29wX2luZGV4X2lkciwgJnVucmVnaXN0ZXJfdHJhbnNmZXJfY2IsIHhmZXIpOwogCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGxvb3BfcmVnaXN0ZXJfdHJhbnNmZXIpOwogRVhQT1JUX1NZTUJPTChsb29wX3VucmVnaXN0ZXJfdHJhbnNmZXIpOwogCi1zdGF0aWMgc3RydWN0IGxvb3BfZGV2aWNlICpsb29wX2FsbG9jKGludCBpKQorc3RhdGljIGludCBsb29wX2FkZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKipsLCBpbnQgaSkKIHsKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCWludCBlcnI7CiAKIAlsbyA9IGt6YWxsb2Moc2l6ZW9mKCpsbyksIEdGUF9LRVJORUwpOwotCWlmICghbG8pCisJaWYgKCFsbykgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBpZHJfcHJlX2dldCgmbG9vcF9pbmRleF9pZHIsIEdGUF9LRVJORUwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RldjsKKworCWlmIChpID49IDApIHsKKwkJaW50IG07CisKKwkJLyogY3JlYXRlIHNwZWNpZmljIGkgaW4gdGhlIGluZGV4ICovCisJCWVyciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZsb29wX2luZGV4X2lkciwgbG8sIGksICZtKTsKKwkJaWYgKGVyciA+PSAwICYmIGkgIT0gbSkgeworCQkJaWRyX3JlbW92ZSgmbG9vcF9pbmRleF9pZHIsIG0pOworCQkJZXJyID0gLUVFWElTVDsKKwkJfQorCX0gZWxzZSBpZiAoaSA9PSAtMSkgeworCQlpbnQgbTsKKworCQkvKiBnZXQgbmV4dCBmcmVlIG5yICovCisJCWVyciA9IGlkcl9nZXRfbmV3KCZsb29wX2luZGV4X2lkciwgbG8sICZtKTsKKwkJaWYgKGVyciA+PSAwKQorCQkJaSA9IG07CisJfSBlbHNlIHsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGV2OwogCiAJbG8tPmxvX3F1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOwogCWlmICghbG8tPmxvX3F1ZXVlKQpAQCAtMTYxMSw4MSArMTY0NiwxNTggQEAKIAlkaXNrLT5wcml2YXRlX2RhdGEJPSBsbzsKIAlkaXNrLT5xdWV1ZQkJPSBsby0+bG9fcXVldWU7CiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJsb29wJWQiLCBpKTsKLQlyZXR1cm4gbG87CisJYWRkX2Rpc2soZGlzayk7CisJKmwgPSBsbzsKKwlyZXR1cm4gbG8tPmxvX251bWJlcjsKIAogb3V0X2ZyZWVfcXVldWU6CiAJYmxrX2NsZWFudXBfcXVldWUobG8tPmxvX3F1ZXVlKTsKIG91dF9mcmVlX2RldjoKIAlrZnJlZShsbyk7CiBvdXQ6Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbG9vcF9mcmVlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCitzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogeworCWRlbF9nZW5kaXNrKGxvLT5sb19kaXNrKTsKIAlibGtfY2xlYW51cF9xdWV1ZShsby0+bG9fcXVldWUpOwogCXB1dF9kaXNrKGxvLT5sb19kaXNrKTsKLQlsaXN0X2RlbCgmbG8tPmxvX2xpc3QpOwogCWtmcmVlKGxvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBsb29wX2RldmljZSAqbG9vcF9pbml0X29uZShpbnQgaSkKK3N0YXRpYyBpbnQgZmluZF9mcmVlX2NiKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsb29wX2RldmljZSAqbG87CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IHB0cjsKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKipsID0gZGF0YTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobG8sICZsb29wX2RldmljZXMsIGxvX2xpc3QpIHsKLQkJaWYgKGxvLT5sb19udW1iZXIgPT0gaSkKLQkJCXJldHVybiBsbzsKKwlpZiAobG8tPmxvX3N0YXRlID09IExvX3VuYm91bmQpIHsKKwkJKmwgPSBsbzsKKwkJcmV0dXJuIDE7CiAJfQotCi0JbG8gPSBsb29wX2FsbG9jKGkpOwotCWlmIChsbykgewotCQlhZGRfZGlzayhsby0+bG9fZGlzayk7Ci0JCWxpc3RfYWRkX3RhaWwoJmxvLT5sb19saXN0LCAmbG9vcF9kZXZpY2VzKTsKLQl9Ci0JcmV0dXJuIGxvOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBsb29wX2RlbF9vbmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKK3N0YXRpYyBpbnQgbG9vcF9sb29rdXAoc3RydWN0IGxvb3BfZGV2aWNlICoqbCwgaW50IGkpCiB7Ci0JZGVsX2dlbmRpc2sobG8tPmxvX2Rpc2spOwotCWxvb3BfZnJlZShsbyk7CisJc3RydWN0IGxvb3BfZGV2aWNlICpsbzsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCWlmIChpIDwgMCkgeworCQlpbnQgZXJyOworCisJCWVyciA9IGlkcl9mb3JfZWFjaCgmbG9vcF9pbmRleF9pZHIsICZmaW5kX2ZyZWVfY2IsICZsbyk7CisJCWlmIChlcnIgPT0gMSkgeworCQkJKmwgPSBsbzsKKwkJCXJldCA9IGxvLT5sb19udW1iZXI7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogbG9va3VwIGFuZCByZXR1cm4gYSBzcGVjaWZpYyBpICovCisJbG8gPSBpZHJfZmluZCgmbG9vcF9pbmRleF9pZHIsIGkpOworCWlmIChsbykgeworCQkqbCA9IGxvOworCQlyZXQgPSBsby0+bG9fbnVtYmVyOworCX0KK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGtvYmplY3QgKmxvb3BfcHJvYmUoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbzsKIAlzdHJ1Y3Qga29iamVjdCAqa29iajsKKwlpbnQgZXJyOwogCi0JbXV0ZXhfbG9jaygmbG9vcF9kZXZpY2VzX211dGV4KTsKLQlsbyA9IGxvb3BfaW5pdF9vbmUoTUlOT1IoZGV2KSA+PiBwYXJ0X3NoaWZ0KTsKLQlrb2JqID0gbG8gPyBnZXRfZGlzayhsby0+bG9fZGlzaykgOiBFUlJfUFRSKC1FTk9NRU0pOwotCW11dGV4X3VubG9jaygmbG9vcF9kZXZpY2VzX211dGV4KTsKKwltdXRleF9sb2NrKCZsb29wX2luZGV4X211dGV4KTsKKwllcnIgPSBsb29wX2xvb2t1cCgmbG8sIE1JTk9SKGRldikgPj4gcGFydF9zaGlmdCk7CisJaWYgKGVyciA8IDApCisJCWVyciA9IGxvb3BfYWRkKCZsbywgTUlOT1IoZGV2KSA+PiBwYXJ0X3NoaWZ0KTsKKwlpZiAoZXJyIDwgMCkKKwkJa29iaiA9IEVSUl9QVFIoZXJyKTsKKwllbHNlCisJCWtvYmogPSBnZXRfZGlzayhsby0+bG9fZGlzayk7CisJbXV0ZXhfdW5sb2NrKCZsb29wX2luZGV4X211dGV4KTsKIAogCSpwYXJ0ID0gMDsKIAlyZXR1cm4ga29iajsKIH0KIAorc3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSkKK3sKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvOworCWludCByZXQgPSAtRU5PU1lTOworCisJbXV0ZXhfbG9jaygmbG9vcF9pbmRleF9tdXRleCk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIExPT1BfQ1RMX0FERDoKKwkJcmV0ID0gbG9vcF9sb29rdXAoJmxvLCBwYXJtKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlyZXQgPSAtRUVYSVNUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gbG9vcF9hZGQoJmxvLCBwYXJtKTsKKwkJYnJlYWs7CisJY2FzZSBMT09QX0NUTF9SRU1PVkU6CisJCXJldCA9IGxvb3BfbG9va3VwKCZsbywgcGFybSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCQlpZiAobG8tPmxvX3N0YXRlICE9IExvX3VuYm91bmQpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobG8tPmxvX3JlZmNudCA+IDApIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJCQlicmVhazsKKwkJfQorCQlsby0+bG9fZGlzay0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkJaWRyX3JlbW92ZSgmbG9vcF9pbmRleF9pZHIsIGxvLT5sb19udW1iZXIpOworCQlsb29wX3JlbW92ZShsbyk7CisJCWJyZWFrOworCWNhc2UgTE9PUF9DVExfR0VUX0ZSRUU6CisJCXJldCA9IGxvb3BfbG9va3VwKCZsbywgLTEpOworCQlpZiAocmV0ID49IDApCisJCQlicmVhazsKKwkJcmV0ID0gbG9vcF9hZGQoJmxvLCAtMSk7CisJfQorCW11dGV4X3VubG9jaygmbG9vcF9pbmRleF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsb29wX2N0bF9mb3BzID0geworCS5vcGVuCQk9IG5vbnNlZWthYmxlX29wZW4sCisJLnVubG9ja2VkX2lvY3RsCT0gbG9vcF9jb250cm9sX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBsb29wX2NvbnRyb2xfaW9jdGwsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbG9vcF9taXNjID0geworCS5taW5vcgkJPSBMT09QX0NUUkxfTUlOT1IsCisJLm5hbWUJCT0gImxvb3AtY29udHJvbCIsCisJLmZvcHMJCT0gJmxvb3BfY3RsX2ZvcHMsCit9OworCitNT0RVTEVfQUxJQVNfTUlTQ0RFVihMT09QX0NUUkxfTUlOT1IpOworTU9EVUxFX0FMSUFTKCJkZXZuYW1lOmxvb3AtY29udHJvbCIpOworCiBzdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgbnI7CiAJdW5zaWduZWQgbG9uZyByYW5nZTsKLQlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCAqbmV4dDsKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvOworCWludCBlcnI7CiAKLQkvKgotCSAqIGxvb3AgbW9kdWxlIG5vdyBoYXMgYSBmZWF0dXJlIHRvIGluc3RhbnRpYXRlIHVuZGVybHlpbmcgZGV2aWNlCi0JICogc3RydWN0dXJlIG9uLWRlbWFuZCwgcHJvdmlkZWQgdGhhdCB0aGVyZSBpcyBhbiBhY2Nlc3MgZGV2IG5vZGUuCi0JICogSG93ZXZlciwgdGhpcyB3aWxsIG5vdCB3b3JrIHdlbGwgd2l0aCB1c2VyIHNwYWNlIHRvb2wgdGhhdCBkb2Vzbid0Ci0JICoga25vdyBhYm91dCBzdWNoICJmZWF0dXJlIi4gIEluIG9yZGVyIHRvIG5vdCBicmVhayBhbnkgZXhpc3RpbmcKLQkgKiB0b29sLCB3ZSBkbyB0aGUgZm9sbG93aW5nOgotCSAqCi0JICogKDEpIGlmIG1heF9sb29wIGlzIHNwZWNpZmllZCwgY3JlYXRlIHRoYXQgbWFueSB1cGZyb250LCBhbmQgdGhpcwotCSAqICAgICBhbHNvIGJlY29tZXMgYSBoYXJkIGxpbWl0LgotCSAqICgyKSBpZiBtYXhfbG9vcCBpcyBub3Qgc3BlY2lmaWVkLCBjcmVhdGUgOCBsb29wIGRldmljZSBvbiBtb2R1bGUKLQkgKiAgICAgbG9hZCwgdXNlciBjYW4gZnVydGhlciBleHRlbmQgbG9vcCBkZXZpY2UgYnkgY3JlYXRlIGRldiBub2RlCi0JICogICAgIHRoZW1zZWx2ZXMgYW5kIGhhdmUga2VybmVsIGF1dG9tYXRpY2FsbHkgaW5zdGFudGlhdGUgYWN0dWFsCi0JICogICAgIGRldmljZSBvbi1kZW1hbmQuCi0JICovCisJZXJyID0gbWlzY19yZWdpc3RlcigmbG9vcF9taXNjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXBhcnRfc2hpZnQgPSAwOwogCWlmIChtYXhfcGFydCA+IDApIHsKQEAgLTE3MDgsNTcgKzE4MjAsNjAgQEAKIAlpZiAobWF4X2xvb3AgPiAxVUwgPDwgKE1JTk9SQklUUyAtIHBhcnRfc2hpZnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogSWYgbWF4X2xvb3AgaXMgc3BlY2lmaWVkLCBjcmVhdGUgdGhhdCBtYW55IGRldmljZXMgdXBmcm9udC4KKwkgKiBUaGlzIGFsc28gYmVjb21lcyBhIGhhcmQgbGltaXQuIElmIG1heF9sb29wIGlzIG5vdCBzcGVjaWZpZWQsCisJICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGUKKwkgKiBpbml0IHRpbWUuIExvb3AgZGV2aWNlcyBjYW4gYmUgcmVxdWVzdGVkIG9uLWRlbWFuZCB3aXRoIHRoZQorCSAqIC9kZXYvbG9vcC1jb250cm9sIGludGVyZmFjZSwgb3IgYmUgaW5zdGFudGlhdGVkIGJ5IGFjY2Vzc2luZworCSAqIGEgJ2RlYWQnIGRldmljZSBub2RlLgorCSAqLwogCWlmIChtYXhfbG9vcCkgewogCQluciA9IG1heF9sb29wOwogCQlyYW5nZSA9IG1heF9sb29wIDw8IHBhcnRfc2hpZnQ7CiAJfSBlbHNlIHsKLQkJbnIgPSA4OworCQluciA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UOwogCQlyYW5nZSA9IDFVTCA8PCBNSU5PUkJJVFM7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihMT09QX01BSk9SLCAibG9vcCIpKQogCQlyZXR1cm4gLUVJTzsKIAotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7Ci0JCWxvID0gbG9vcF9hbGxvYyhpKTsKLQkJaWYgKCFsbykKLQkJCWdvdG8gRW5vbWVtOwotCQlsaXN0X2FkZF90YWlsKCZsby0+bG9fbGlzdCwgJmxvb3BfZGV2aWNlcyk7Ci0JfQotCi0JLyogcG9pbnQgb2Ygbm8gcmV0dXJuICovCi0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvLCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KQotCQlhZGRfZGlzayhsby0+bG9fZGlzayk7Ci0KIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKExPT1BfTUFKT1IsIDApLCByYW5nZSwKIAkJCQkgIFRISVNfTU9EVUxFLCBsb29wX3Byb2JlLCBOVUxMLCBOVUxMKTsKIAorCS8qIHByZS1jcmVhdGUgbnVtYmVyIG9mIGRldmljZXMgZ2l2ZW4gYnkgY29uZmlnIG9yIG1heF9sb29wICovCisJbXV0ZXhfbG9jaygmbG9vcF9pbmRleF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCWxvb3BfYWRkKCZsbywgaSk7CisJbXV0ZXhfdW5sb2NrKCZsb29wX2luZGV4X211dGV4KTsKKwogCXByaW50ayhLRVJOX0lORk8gImxvb3A6IG1vZHVsZSBsb2FkZWRcbiIpOwogCXJldHVybiAwOworfQogCi1Fbm9tZW06Ci0JcHJpbnRrKEtFUk5fSU5GTyAibG9vcDogb3V0IG9mIG1lbW9yeVxuIik7CitzdGF0aWMgaW50IGxvb3BfZXhpdF9jYihpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gcHRyOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxvLCBuZXh0LCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KQotCQlsb29wX2ZyZWUobG8pOwotCi0JdW5yZWdpc3Rlcl9ibGtkZXYoTE9PUF9NQUpPUiwgImxvb3AiKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlsb29wX3JlbW92ZShsbyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsb29wX2V4aXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHJhbmdlOwotCXN0cnVjdCBsb29wX2RldmljZSAqbG8sICpuZXh0OwogCiAJcmFuZ2UgPSBtYXhfbG9vcCA/IG1heF9sb29wIDw8IHBhcnRfc2hpZnQgOiAxVUwgPDwgTUlOT1JCSVRTOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxvLCBuZXh0LCAmbG9vcF9kZXZpY2VzLCBsb19saXN0KQotCQlsb29wX2RlbF9vbmUobG8pOworCWlkcl9mb3JfZWFjaCgmbG9vcF9pbmRleF9pZHIsICZsb29wX2V4aXRfY2IsIE5VTEwpOworCWlkcl9yZW1vdmVfYWxsKCZsb29wX2luZGV4X2lkcik7CisJaWRyX2Rlc3Ryb3koJmxvb3BfaW5kZXhfaWRyKTsKIAogCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihMT09QX01BSk9SLCAwKSwgcmFuZ2UpOwogCXVucmVnaXN0ZXJfYmxrZGV2KExPT1BfTUFKT1IsICJsb29wIik7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmxvb3BfbWlzYyk7CiB9CiAKIG1vZHVsZV9pbml0KGxvb3BfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKaW5kZXggNzczYmZhNy4uYWUzZTE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltMy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwpAQCAtMTE4NCw2ICsxMTg0LDcgQEAKIAl7CiAJLmNvbXBhdGlibGUJPSAic3dpbTMiCiAJfSwKKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIHN3aW0zX2RyaXZlciA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwppbmRleCBiNTM2YTljLi45ZWE4YzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCisrKyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKQEAgLTEyMyw4ICsxMjMsOCBAQAogI2RlZmluZSBCTEtJRl9NSU5PUl9FWFQoZGV2KSAoKGRldikmKH5FWFRFTkRFRCkpCiAjZGVmaW5lIEVNVUxBVEVEX0hEX0RJU0tfTUlOT1JfT0ZGU0VUICgwKQogI2RlZmluZSBFTVVMQVRFRF9IRF9ESVNLX05BTUVfT0ZGU0VUIChFTVVMQVRFRF9IRF9ESVNLX01JTk9SX09GRlNFVCAvIDI1NikKLSNkZWZpbmUgRU1VTEFURURfU0RfRElTS19NSU5PUl9PRkZTRVQgKEVNVUxBVEVEX0hEX0RJU0tfTUlOT1JfT0ZGU0VUICsgKDQgKiAxNikpCi0jZGVmaW5lIEVNVUxBVEVEX1NEX0RJU0tfTkFNRV9PRkZTRVQgKEVNVUxBVEVEX0hEX0RJU0tfTkFNRV9PRkZTRVQgKyA0KQorI2RlZmluZSBFTVVMQVRFRF9TRF9ESVNLX01JTk9SX09GRlNFVCAoMCkKKyNkZWZpbmUgRU1VTEFURURfU0RfRElTS19OQU1FX09GRlNFVCAoRU1VTEFURURfU0RfRElTS19NSU5PUl9PRkZTRVQgLyAyNTYpCiAKICNkZWZpbmUgREVWX05BTUUJInh2ZCIJLyogbmFtZSBpbiAvZGV2ICovCiAKQEAgLTUyOSw3ICs1MjksNyBAQAogCQltaW5vciA9IEJMS0lGX01JTk9SX0VYVChpbmZvLT52ZGV2aWNlKTsKIAkJbnJfcGFydHMgPSBQQVJUU19QRVJfRVhUX0RJU0s7CiAJCW9mZnNldCA9IG1pbm9yIC8gbnJfcGFydHM7Ci0JCWlmICh4ZW5faHZtX2RvbWFpbigpICYmIG9mZnNldCA8PSBFTVVMQVRFRF9IRF9ESVNLX05BTUVfT0ZGU0VUICsgNCkKKwkJaWYgKHhlbl9odm1fZG9tYWluKCkgJiYgb2Zmc2V0IDwgRU1VTEFURURfSERfRElTS19OQU1FX09GRlNFVCArIDQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJibGtmcm9udDogdmRldmljZSAweCV4IG1pZ2h0IGNvbmZsaWN0IHdpdGggIgogCQkJCQkiZW11bGF0ZWQgSURFIGRpc2tzLFxuXHQgY2hvb3NlIGFuIHh2ZCBkZXZpY2UgbmFtZSIKIAkJCQkJImZyb20geHZkZSBvblxuIiwgaW5mby0+dmRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwppbmRleCBhNTg1NDczLi5kYjdjYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTYzLDYgKzYzLDcgQEAKIAkvKiBBdGhlcm9zIEFSMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSovCiAJeyBVU0JfREVWSUNFKDB4MENGMywgMHgzMDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTUpIH0sCiAKIAkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCA5MWQxM2E5Li4zZWY0NzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogCS8qIEF0aGVyb3MgMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwogCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4MzAwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAorCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDIxNSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAogCiAJLyogQXRoZXJvcyBBUjkyODUgTWFsYmVjIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgzMTFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCkBAIC0yNTYsNyArMjU3LDkgQEAKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciA8IDApIHsKLQkJaWYgKGVyciAhPSAtRVBFUk0pCisJCS8qIC1FUEVSTTogdXJiIGlzIGJlaW5nIGtpbGxlZDsKKwkJICogLUVOT0RFVjogZGV2aWNlIGdvdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKGVyciAhPSAtRVBFUk0gJiYgZXJyICE9IC1FTk9ERVYpCiAJCQlCVF9FUlIoIiVzIHVyYiAlcCBmYWlsZWQgdG8gcmVzdWJtaXQgKCVkKSIsCiAJCQkJCQloZGV2LT5uYW1lLCB1cmIsIC1lcnIpOwogCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CkBAIC0zNDEsNyArMzQ0LDkgQEAKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciA8IDApIHsKLQkJaWYgKGVyciAhPSAtRVBFUk0pCisJCS8qIC1FUEVSTTogdXJiIGlzIGJlaW5nIGtpbGxlZDsKKwkJICogLUVOT0RFVjogZGV2aWNlIGdvdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKGVyciAhPSAtRVBFUk0gJiYgZXJyICE9IC1FTk9ERVYpCiAJCQlCVF9FUlIoIiVzIHVyYiAlcCBmYWlsZWQgdG8gcmVzdWJtaXQgKCVkKSIsCiAJCQkJCQloZGV2LT5uYW1lLCB1cmIsIC1lcnIpOwogCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CkBAIC00MzEsNyArNDM2LDkgQEAKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGVyciA8IDApIHsKLQkJaWYgKGVyciAhPSAtRVBFUk0pCisJCS8qIC1FUEVSTTogdXJiIGlzIGJlaW5nIGtpbGxlZDsKKwkJICogLUVOT0RFVjogZGV2aWNlIGdvdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKGVyciAhPSAtRVBFUk0gJiYgZXJyICE9IC1FTk9ERVYpCiAJCQlCVF9FUlIoIiVzIHVyYiAlcCBmYWlsZWQgdG8gcmVzdWJtaXQgKCVkKSIsCiAJCQkJCQloZGV2LT5uYW1lLCB1cmIsIC1lcnIpOwogCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggNzVmYjk2NS4uZjk5N2MyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtMTkyOSwxMSArMTkyOSwxNyBAQAogCQlnb3RvIG91dDsKIAogCXMtPm1hbnVmYWN0LmxlbiA9IGJ1ZlswXSA8PCA4IHwgYnVmWzFdOwotCWlmIChzLT5tYW51ZmFjdC5sZW4gPCAwIHx8IHMtPm1hbnVmYWN0LmxlbiA+IDIwNDgpIHsKKwlpZiAocy0+bWFudWZhY3QubGVuIDwgMCkgewogCQljZGluZm8oQ0RfV0FSTklORywgIlJlY2VpdmVkIGludmFsaWQgbWFudWZhY3R1cmUgaW5mbyBsZW5ndGgiCiAJCQkJICAgIiAoJWQpXG4iLCBzLT5tYW51ZmFjdC5sZW4pOwogCQlyZXQgPSAtRUlPOwogCX0gZWxzZSB7CisJCWlmIChzLT5tYW51ZmFjdC5sZW4gPiAyMDQ4KSB7CisJCQljZGluZm8oQ0RfV0FSTklORywgIlJlY2VpdmVkIGludmFsaWQgbWFudWZhY3R1cmUgaW5mbyAiCisJCQkJCSJsZW5ndGggKCVkKTogdHJ1bmNhdGluZyB0byAyMDQ4XG4iLAorCQkJCQlzLT5tYW51ZmFjdC5sZW4pOworCQkJcy0+bWFudWZhY3QubGVuID0gMjA0ODsKKwkJfQogCQltZW1jcHkocy0+bWFudWZhY3QudmFsdWUsICZidWZbNF0sIHMtPm1hbnVmYWN0Lmxlbik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDQ5NTAyYmMuLjQyM2ZkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC02MTYsNSArNjE2LDE2IEBACiAJICBFbmFibGVzIHVzZXJzcGFjZSBjbGllbnRzIHRvIHJlYWQgYW5kIHdyaXRlIHRvIHNvbWUgcGFja2V0IFNNRAogCSAgcG9ydHMgdmlhIGRldmljZSBpbnRlcmZhY2UgZm9yIE1TTSBjaGlwc2V0LgogCitjb25maWcgVElMRV9TUk9NCisJYm9vbCAiQ2hhcmFjdGVyLWRldmljZSBhY2Nlc3MgdmlhIGh5cGVydmlzb3IgdG8gdGhlIFRpbGVyYSBTUEkgUk9NIgorCWRlcGVuZHMgb24gVElMRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZGV2aWNlIHByb3ZpZGVzIGNoYXJhY3Rlci1sZXZlbCByZWFkLXdyaXRlIGFjY2VzcworCSAgdG8gdGhlIFNST00sIHR5cGljYWxseSB2aWEgdGhlICIwIiwgIjEiLCBhbmQgIjIiIGRldmljZXMKKwkgIGluIC9kZXYvc3JvbS8uICBUaGUgVGlsZXJhIGh5cGVydmlzb3IgbWFrZXMgdGhlIGZsYXNoCisJICBkZXZpY2UgYXBwZWFyIG11Y2ggbGlrZSBhIHNpbXBsZSBFRVBST00sIGFuZCBrbm93cworCSAgaG93IHRvIHBhcnRpdGlvbiBhIHNpbmdsZSBST00gZm9yIG11bHRpcGxlIHB1cnBvc2VzLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQppbmRleCA3YTAwNjcyLi4zMjc2MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC02MywzICs2Myw1IEBACiAKIG9iai0kKENPTkZJR19KU19SVEMpCQkrPSBqcy1ydGMubwoganMtcnRjLXkgPSBydGMubworCitvYmotJChDT05GSUdfVElMRV9TUk9NKQkJKz0gdGlsZS1zcm9tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tc21fc21kX3BrdC5jIGIvZHJpdmVycy9jaGFyL21zbV9zbWRfcGt0LmMKaW5kZXggYjZmOGE2NS4uOGVjYTU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21zbV9zbWRfcGt0LmMKKysrIGIvZHJpdmVycy9jaGFyL21zbV9zbWRfcGt0LmMKQEAgLTM3OSw5ICszNzksOCBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fU01EX1BLVF9QT1JUUzsgKytpKSB7CiAJCXNtZF9wa3RfZGV2cFtpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbWRfcGt0X2RldiksCiAJCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JCWlmIChJU19FUlIoc21kX3BrdF9kZXZwW2ldKSkgewotCQkJciA9IFBUUl9FUlIoc21kX3BrdF9kZXZwW2ldKTsKLQkJCXByX2Vycigia21hbGxvYygpIGZhaWxlZCAlZFxuIiwgcik7CisJCWlmICghc21kX3BrdF9kZXZwW2ldKSB7CisJCQlwcl9lcnIoImttYWxsb2MoKSBmYWlsZWRcbiIpOwogCQkJZ290byBjbGVhbl9jZGV2czsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFtb29wcy5jIGIvZHJpdmVycy9jaGFyL3JhbW9vcHMuYwppbmRleCBiZDliOTRiLi44MTBhZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFtb29wcy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW1vb3BzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttc2dfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTE0Niw2ICsxNDcsMTQgQEAKIAljeHQtPnBoeXNfYWRkciA9IHBkYXRhLT5tZW1fYWRkcmVzczsKIAljeHQtPnJlY29yZF9zaXplID0gcGRhdGEtPnJlY29yZF9zaXplOwogCWN4dC0+ZHVtcF9vb3BzID0gcGRhdGEtPmR1bXBfb29wczsKKwkvKgorCSAqIFVwZGF0ZSB0aGUgbW9kdWxlIHBhcmFtZXRlciB2YXJpYWJsZXMgYXMgd2VsbCBzbyB0aGV5IGFyZSB2aXNpYmxlCisJICogdGhyb3VnaCAvc3lzL21vZHVsZS9yYW1vb3BzL3BhcmFtZXRlcnMvCisJICovCisJbWVtX3NpemUgPSBwZGF0YS0+bWVtX3NpemU7CisJbWVtX2FkZHJlc3MgPSBwZGF0YS0+bWVtX2FkZHJlc3M7CisJcmVjb3JkX3NpemUgPSBwZGF0YS0+cmVjb3JkX3NpemU7CisJZHVtcF9vb3BzID0gcGRhdGEtPmR1bXBfb29wczsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGN4dC0+cGh5c19hZGRyLCBjeHQtPnNpemUsICJyYW1vb3BzIikpIHsKIAkJcHJfZXJyKCJyZXF1ZXN0IG1lbSByZWdpb24gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA3MjkyODE5Li5jMzVhNzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0xMzAwLDM0NSArMTMwMCwxNCBAQAogfTsKICNlbmRpZiAJLyogQ09ORklHX1NZU0NUTCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBSYW5kb20gZnVuY3Rpb25zIGZvciBuZXR3b3JraW5nCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHUzMiByYW5kb21faW50X3NlY3JldFtNRDVfTUVTU0FHRV9CWVRFUyAvIDRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAotLyoKLSAqIFRDUCBpbml0aWFsIHNlcXVlbmNlIG51bWJlciBwaWNraW5nLiAgVGhpcyB1c2VzIHRoZSByYW5kb20gbnVtYmVyCi0gKiBnZW5lcmF0b3IgdG8gcGljayBhbiBpbml0aWFsIHNlY3JldCB2YWx1ZS4gIFRoaXMgdmFsdWUgaXMgaGFzaGVkCi0gKiBhbG9uZyB3aXRoIHRoZSBUQ1AgZW5kcG9pbnQgaW5mb3JtYXRpb24gdG8gcHJvdmlkZSBhIHVuaXF1ZQotICogc3RhcnRpbmcgcG9pbnQgZm9yIGVhY2ggcGFpciBvZiBUQ1AgZW5kcG9pbnRzLiAgVGhpcyBkZWZlYXRzCi0gKiBhdHRhY2tzIHdoaWNoIHJlbHkgb24gZ3Vlc3NpbmcgdGhlIGluaXRpYWwgVENQIHNlcXVlbmNlIG51bWJlci4KLSAqIFRoaXMgYWxnb3JpdGhtIHdhcyBzdWdnZXN0ZWQgYnkgU3RldmUgQmVsbG92aW4uCi0gKgotICogVXNpbmcgYSB2ZXJ5IHN0cm9uZyBoYXNoIHdhcyB0YWtpbmcgYW4gYXBwcmVjaWFibGUgYW1vdW50IG9mIHRoZSB0b3RhbAotICogVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCB0aW1lLCBzbyB0aGlzIGlzIGEgd2Vha2VyIGhhc2gsCi0gKiBjb21wZW5zYXRlZCBmb3IgYnkgY2hhbmdpbmcgdGhlIHNlY3JldCBwZXJpb2RpY2FsbHkuCi0gKi8KLQotLyogRiwgRyBhbmQgSCBhcmUgYmFzaWMgTUQ0IGZ1bmN0aW9uczogc2VsZWN0aW9uLCBtYWpvcml0eSwgcGFyaXR5ICovCi0jZGVmaW5lIEYoeCwgeSwgeikgKCh6KSBeICgoeCkgJiAoKHkpIF4gKHopKSkpCi0jZGVmaW5lIEcoeCwgeSwgeikgKCgoeCkgJiAoeSkpICsgKCgoeCkgXiAoeSkpICYgKHopKSkKLSNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQotCi0vKgotICogVGhlIGdlbmVyaWMgcm91bmQgZnVuY3Rpb24uICBUaGUgYXBwbGljYXRpb24gaXMgc28gc3BlY2lmaWMgdGhhdAotICogd2UgZG9uJ3QgYm90aGVyIHByb3RlY3RpbmcgYWxsIHRoZSBhcmd1bWVudHMgd2l0aCBwYXJlbnMsIGFzIGlzIGdlbmVyYWxseQotICogZ29vZCBtYWNybyBwcmFjdGljZSwgaW4gZmF2b3Igb2YgZXh0cmEgbGVnaWJpbGl0eS4KLSAqIFJvdGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gYWRkaXRpb24gdG8gcHJldmVudCByZWNvbXB1dGF0aW9uCi0gKi8KLSNkZWZpbmUgUk9VTkQoZiwgYSwgYiwgYywgZCwgeCwgcykJXAotCShhICs9IGYoYiwgYywgZCkgKyB4LCBhID0gKGEgPDwgcykgfCAoYSA+PiAoMzIgLSBzKSkpCi0jZGVmaW5lIEsxIDAKLSNkZWZpbmUgSzIgMDEzMjQwNDc0NjMxVUwKLSNkZWZpbmUgSzMgMDE1NjY2MzY1NjQxVUwKLQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCi1zdGF0aWMgX191MzIgdHdvdGhpcmRzTUQ0VHJhbnNmb3JtKF9fdTMyIGNvbnN0IGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTJdKQorc3RhdGljIGludCBfX2luaXQgcmFuZG9tX2ludF9zZWNyZXRfaW5pdCh2b2lkKQogewotCV9fdTMyIGEgPSBidWZbMF0sIGIgPSBidWZbMV0sIGMgPSBidWZbMl0sIGQgPSBidWZbM107Ci0KLQkvKiBSb3VuZCAxICovCi0JUk9VTkQoRiwgYSwgYiwgYywgZCwgaW5bIDBdICsgSzEsICAzKTsKLQlST1VORChGLCBkLCBhLCBiLCBjLCBpblsgMV0gKyBLMSwgIDcpOwotCVJPVU5EKEYsIGMsIGQsIGEsIGIsIGluWyAyXSArIEsxLCAxMSk7Ci0JUk9VTkQoRiwgYiwgYywgZCwgYSwgaW5bIDNdICsgSzEsIDE5KTsKLQlST1VORChGLCBhLCBiLCBjLCBkLCBpblsgNF0gKyBLMSwgIDMpOwotCVJPVU5EKEYsIGQsIGEsIGIsIGMsIGluWyA1XSArIEsxLCAgNyk7Ci0JUk9VTkQoRiwgYywgZCwgYSwgYiwgaW5bIDZdICsgSzEsIDExKTsKLQlST1VORChGLCBiLCBjLCBkLCBhLCBpblsgN10gKyBLMSwgMTkpOwotCVJPVU5EKEYsIGEsIGIsIGMsIGQsIGluWyA4XSArIEsxLCAgMyk7Ci0JUk9VTkQoRiwgZCwgYSwgYiwgYywgaW5bIDldICsgSzEsICA3KTsKLQlST1VORChGLCBjLCBkLCBhLCBiLCBpblsxMF0gKyBLMSwgMTEpOwotCVJPVU5EKEYsIGIsIGMsIGQsIGEsIGluWzExXSArIEsxLCAxOSk7Ci0KLQkvKiBSb3VuZCAyICovCi0JUk9VTkQoRywgYSwgYiwgYywgZCwgaW5bIDFdICsgSzIsICAzKTsKLQlST1VORChHLCBkLCBhLCBiLCBjLCBpblsgM10gKyBLMiwgIDUpOwotCVJPVU5EKEcsIGMsIGQsIGEsIGIsIGluWyA1XSArIEsyLCAgOSk7Ci0JUk9VTkQoRywgYiwgYywgZCwgYSwgaW5bIDddICsgSzIsIDEzKTsKLQlST1VORChHLCBhLCBiLCBjLCBkLCBpblsgOV0gKyBLMiwgIDMpOwotCVJPVU5EKEcsIGQsIGEsIGIsIGMsIGluWzExXSArIEsyLCAgNSk7Ci0JUk9VTkQoRywgYywgZCwgYSwgYiwgaW5bIDBdICsgSzIsICA5KTsKLQlST1VORChHLCBiLCBjLCBkLCBhLCBpblsgMl0gKyBLMiwgMTMpOwotCVJPVU5EKEcsIGEsIGIsIGMsIGQsIGluWyA0XSArIEsyLCAgMyk7Ci0JUk9VTkQoRywgZCwgYSwgYiwgYywgaW5bIDZdICsgSzIsICA1KTsKLQlST1VORChHLCBjLCBkLCBhLCBiLCBpblsgOF0gKyBLMiwgIDkpOwotCVJPVU5EKEcsIGIsIGMsIGQsIGEsIGluWzEwXSArIEsyLCAxMyk7Ci0KLQkvKiBSb3VuZCAzICovCi0JUk9VTkQoSCwgYSwgYiwgYywgZCwgaW5bIDNdICsgSzMsICAzKTsKLQlST1VORChILCBkLCBhLCBiLCBjLCBpblsgN10gKyBLMywgIDkpOwotCVJPVU5EKEgsIGMsIGQsIGEsIGIsIGluWzExXSArIEszLCAxMSk7Ci0JUk9VTkQoSCwgYiwgYywgZCwgYSwgaW5bIDJdICsgSzMsIDE1KTsKLQlST1VORChILCBhLCBiLCBjLCBkLCBpblsgNl0gKyBLMywgIDMpOwotCVJPVU5EKEgsIGQsIGEsIGIsIGMsIGluWzEwXSArIEszLCAgOSk7Ci0JUk9VTkQoSCwgYywgZCwgYSwgYiwgaW5bIDFdICsgSzMsIDExKTsKLQlST1VORChILCBiLCBjLCBkLCBhLCBpblsgNV0gKyBLMywgMTUpOwotCVJPVU5EKEgsIGEsIGIsIGMsIGQsIGluWyA5XSArIEszLCAgMyk7Ci0JUk9VTkQoSCwgZCwgYSwgYiwgYywgaW5bIDBdICsgSzMsICA5KTsKLQlST1VORChILCBjLCBkLCBhLCBiLCBpblsgNF0gKyBLMywgMTEpOwotCVJPVU5EKEgsIGIsIGMsIGQsIGEsIGluWyA4XSArIEszLCAxNSk7Ci0KLQlyZXR1cm4gYnVmWzFdICsgYjsgLyogIm1vc3QgaGFzaGVkIiB3b3JkICovCi0JLyogQWx0ZXJuYXRpdmU6IHJldHVybiBzdW0gb2YgYWxsIHdvcmRzPyAqLwotfQotI2VuZGlmCi0KLSN1bmRlZiBST1VORAotI3VuZGVmIEYKLSN1bmRlZiBHCi0jdW5kZWYgSAotI3VuZGVmIEsxCi0jdW5kZWYgSzIKLSN1bmRlZiBLMwotCi0vKiBUaGlzIHNob3VsZCBub3QgYmUgZGVjcmVhc2VkIHNvIGxvdyB0aGF0IElTTnMgd3JhcCB0b28gZmFzdC4gKi8KLSNkZWZpbmUgUkVLRVlfSU5URVJWQUwgKDMwMCAqIEhaKQotLyoKLSAqIEJpdCBsYXlvdXQgb2YgdGhlIHRjcCBzZXF1ZW5jZSBudW1iZXJzIChiZWZvcmUgYWRkaW5nIGN1cnJlbnQgdGltZSk6Ci0gKiBiaXQgMjQtMzE6IGluY3JlYXNlZCBhZnRlciBldmVyeSBrZXkgZXhjaGFuZ2UKLSAqIGJpdCAwLTIzOiBoYXNoKHNvdXJjZSxkZXN0KQotICoKLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkCi0gKiBpbiB0aGUgQXBwZW5kaXggb2YgUkZDIDExODUsIGV4Y2VwdCB0aGF0Ci0gKiAtIGl0IHVzZXMgYSAxIE1IeiBjbG9jayBpbnN0ZWFkIG9mIGEgMjUwIGtIeiBjbG9jawotICogLSBpdCBwZXJmb3JtcyBhIHJla2V5IGV2ZXJ5IDUgbWludXRlcywgd2hpY2ggaXMgZXF1aXZhbGVudAotICogCXRvIGEgKHNvdXJjZSxkZXN0KSB0dWxwbGUgZGVwZW5kZW50IGZvcndhcmQganVtcCBvZiB0aGUKLSAqIAljbG9jayBieSAwLi4yXihIQVNIX0JJVFMrMSkKLSAqCi0gKiBUaHVzIHRoZSBhdmVyYWdlIElTTiB3cmFwYXJvdW5kIHRpbWUgaXMgNjggbWludXRlcyBpbnN0ZWFkIG9mCi0gKiA0LjU1IGhvdXJzLgotICoKLSAqIFNNUCBjbGVhbnVwIGFuZCBsb2NrIGF2b2lkYW5jZSB3aXRoIHBvb3IgbWFuJ3MgUkNVLgotICogCQkJTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KLSAqCi0gKi8KLSNkZWZpbmUgQ09VTlRfQklUUyA4Ci0jZGVmaW5lIENPVU5UX01BU0sgKCgxIDw8IENPVU5UX0JJVFMpIC0gMSkKLSNkZWZpbmUgSEFTSF9CSVRTIDI0Ci0jZGVmaW5lIEhBU0hfTUFTSyAoKDEgPDwgSEFTSF9CSVRTKSAtIDEpCi0KLXN0YXRpYyBzdHJ1Y3Qga2V5ZGF0YSB7Ci0JX191MzIgY291bnQ7IC8qIGFscmVhZHkgc2hpZnRlZCB0byB0aGUgZmluYWwgcG9zaXRpb24gKi8KLQlfX3UzMiBzZWNyZXRbMTJdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXBfa2V5ZGF0YVsyXTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBpcF9jbnQ7Ci0KLXN0YXRpYyB2b2lkIHJla2V5X3NlcV9nZW5lcmF0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHJla2V5X3dvcmssIHJla2V5X3NlcV9nZW5lcmF0b3IpOwotCi0vKgotICogTG9jayBhdm9pZGFuY2U6Ci0gKiBUaGUgSVNOIGdlbmVyYXRpb24gcnVucyBsb2NrbGVzcyAtIGl0J3MganVzdCBhIGhhc2ggb3ZlciByYW5kb20gZGF0YS4KLSAqIFN0YXRlIGNoYW5nZXMgaGFwcGVuIGV2ZXJ5IDUgbWludXRlcyB3aGVuIHRoZSByYW5kb20ga2V5IGlzIHJlcGxhY2VkLgotICogU3luY2hyb25pemF0aW9uIGlzIHBlcmZvcm1lZCBieSBoYXZpbmcgdHdvIGNvcGllcyBvZiB0aGUgaGFzaCBmdW5jdGlvbgotICogc3RhdGUgYW5kIHJla2V5X3NlcV9nZW5lcmF0b3IgYWx3YXlzIHVwZGF0ZXMgdGhlIGluYWN0aXZlIGNvcHkuCi0gKiBUaGUgY29weSBpcyB0aGVuIGFjdGl2YXRlZCBieSB1cGRhdGluZyBpcF9jbnQuCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gYnJlYWtzIGRvd24gaWYgc29tZW9uZSBibG9ja3MgdGhlIHRocmVhZAotICogdGhhdCBwcm9jZXNzZXMgU1lOIHJlcXVlc3RzIGZvciBtb3JlIHRoYW4gNSBtaW51dGVzLiBTaG91bGQgbmV2ZXIKLSAqIGhhcHBlbiwgYW5kIGV2ZW4gaWYgdGhhdCBoYXBwZW5zIG9ubHkgYSBub3QgcGVyZmVjdGx5IGNvbXBsaWFudAotICogSVNOIGlzIGdlbmVyYXRlZCwgbm90aGluZyBmYXRhbC4KLSAqLwotc3RhdGljIHZvaWQgcmVrZXlfc2VxX2dlbmVyYXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGtleWRhdGEgKmtleXB0ciA9ICZpcF9rZXlkYXRhWzEgXiAoaXBfY250ICYgMSldOwotCi0JZ2V0X3JhbmRvbV9ieXRlcyhrZXlwdHItPnNlY3JldCwgc2l6ZW9mKGtleXB0ci0+c2VjcmV0KSk7Ci0Ja2V5cHRyLT5jb3VudCA9IChpcF9jbnQgJiBDT1VOVF9NQVNLKSA8PCBIQVNIX0JJVFM7Ci0Jc21wX3dtYigpOwotCWlwX2NudCsrOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmVrZXlfd29yaywKLQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoUkVLRVlfSU5URVJWQUwpKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qga2V5ZGF0YSAqZ2V0X2tleXB0cih2b2lkKQotewotCXN0cnVjdCBrZXlkYXRhICprZXlwdHIgPSAmaXBfa2V5ZGF0YVtpcF9jbnQgJiAxXTsKLQotCXNtcF9ybWIoKTsKLQotCXJldHVybiBrZXlwdHI7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IHNlcWdlbl9pbml0KHZvaWQpCi17Ci0JcmVrZXlfc2VxX2dlbmVyYXRvcihOVUxMKTsKKwlnZXRfcmFuZG9tX2J5dGVzKHJhbmRvbV9pbnRfc2VjcmV0LCBzaXplb2YocmFuZG9tX2ludF9zZWNyZXQpKTsKIAlyZXR1cm4gMDsKIH0KLWxhdGVfaW5pdGNhbGwoc2VxZ2VuX2luaXQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1fX3UzMiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiAqc2FkZHIsIF9fYmUzMiAqZGFkZHIsCi0JCQkJICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpCi17Ci0JX191MzIgc2VxOwotCV9fdTMyIGhhc2hbMTJdOwotCXN0cnVjdCBrZXlkYXRhICprZXlwdHIgPSBnZXRfa2V5cHRyKCk7Ci0KLQkvKiBUaGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lIGFzIGZvciBJUHY0LCBidXQgYWRkcmVzc2VzIGFyZSBsb25nZXIuCi0JICogVGh1cyB3ZSBtdXN0IHVzZSB0d290aGlyZHNNRDRUcmFuc2Zvcm0uCi0JICovCi0KLQltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKLQloYXNoWzRdID0gKChfX2ZvcmNlIHUxNilzcG9ydCA8PCAxNikgKyAoX19mb3JjZSB1MTYpZHBvcnQ7Ci0JbWVtY3B5KCZoYXNoWzVdLCBrZXlwdHItPnNlY3JldCwgc2l6ZW9mKF9fdTMyKSAqIDcpOwotCi0Jc2VxID0gdHdvdGhpcmRzTUQ0VHJhbnNmb3JtKChjb25zdCBfX3UzMiAqKWRhZGRyLCBoYXNoKSAmIEhBU0hfTUFTSzsKLQlzZXEgKz0ga2V5cHRyLT5jb3VudDsKLQotCXNlcSArPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKTsKLQotCXJldHVybiBzZXE7Ci19Ci1FWFBPUlRfU1lNQk9MKHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIpOwotI2VuZGlmCi0KLS8qICBUaGUgY29kZSBiZWxvdyBpcyBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcigpLgotICogIEFsbCBibGFtZXMgdG8gQW5kcmV5IFYuIFNhdm9jaGtpbiA8c2F3QG1zdS5ydT4uCi0gKi8KLV9fdTMyIHNlY3VyZV9pcF9pZChfX2JlMzIgZGFkZHIpCi17Ci0Jc3RydWN0IGtleWRhdGEgKmtleXB0cjsKLQlfX3UzMiBoYXNoWzRdOwotCi0Ja2V5cHRyID0gZ2V0X2tleXB0cigpOwotCi0JLyoKLQkgKiAgUGljayBhIHVuaXF1ZSBzdGFydGluZyBvZmZzZXQgZm9yIGVhY2ggSVAgZGVzdGluYXRpb24uCi0JICogIFRoZSBkZXN0IGlwIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZSBzdGFydGluZyB2ZWN0b3IsCi0JICogIHdoaWNoIGlzIHRoZW4gaGFzaGVkIHdpdGggcmFuZG9tIGRhdGEuCi0JICovCi0JaGFzaFswXSA9IChfX2ZvcmNlIF9fdTMyKWRhZGRyOwotCWhhc2hbMV0gPSBrZXlwdHItPnNlY3JldFs5XTsKLQloYXNoWzJdID0ga2V5cHRyLT5zZWNyZXRbMTBdOwotCWhhc2hbM10gPSBrZXlwdHItPnNlY3JldFsxMV07Ci0KLQlyZXR1cm4gaGFsZl9tZDRfdHJhbnNmb3JtKGhhc2gsIGtleXB0ci0+c2VjcmV0KTsKLX0KLQotX191MzIgc2VjdXJlX2lwdjZfaWQoY29uc3QgX19iZTMyIGRhZGRyWzRdKQotewotCWNvbnN0IHN0cnVjdCBrZXlkYXRhICprZXlwdHI7Ci0JX191MzIgaGFzaFs0XTsKLQotCWtleXB0ciA9IGdldF9rZXlwdHIoKTsKLQotCWhhc2hbMF0gPSAoX19mb3JjZSBfX3UzMilkYWRkclswXTsKLQloYXNoWzFdID0gKF9fZm9yY2UgX191MzIpZGFkZHJbMV07Ci0JaGFzaFsyXSA9IChfX2ZvcmNlIF9fdTMyKWRhZGRyWzJdOwotCWhhc2hbM10gPSAoX19mb3JjZSBfX3UzMilkYWRkclszXTsKLQotCXJldHVybiBoYWxmX21kNF90cmFuc2Zvcm0oaGFzaCwga2V5cHRyLT5zZWNyZXQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lORVQKLQotX191MzIgc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KQotewotCV9fdTMyIHNlcTsKLQlfX3UzMiBoYXNoWzRdOwotCXN0cnVjdCBrZXlkYXRhICprZXlwdHIgPSBnZXRfa2V5cHRyKCk7Ci0KLQkvKgotCSAqICBQaWNrIGEgdW5pcXVlIHN0YXJ0aW5nIG9mZnNldCBmb3IgZWFjaCBUQ1AgY29ubmVjdGlvbiBlbmRwb2ludHMKLQkgKiAgKHNhZGRyLCBkYWRkciwgc3BvcnQsIGRwb3J0KS4KLQkgKiAgTm90ZSB0aGF0IHRoZSB3b3JkcyBhcmUgcGxhY2VkIGludG8gdGhlIHN0YXJ0aW5nIHZlY3Rvciwgd2hpY2ggaXMKLQkgKiAgdGhlbiBtaXhlZCB3aXRoIGEgcGFydGlhbCBNRDQgb3ZlciByYW5kb20gZGF0YS4KLQkgKi8KLQloYXNoWzBdID0gKF9fZm9yY2UgdTMyKXNhZGRyOwotCWhhc2hbMV0gPSAoX19mb3JjZSB1MzIpZGFkZHI7Ci0JaGFzaFsyXSA9ICgoX19mb3JjZSB1MTYpc3BvcnQgPDwgMTYpICsgKF9fZm9yY2UgdTE2KWRwb3J0OwotCWhhc2hbM10gPSBrZXlwdHItPnNlY3JldFsxMV07Ci0KLQlzZXEgPSBoYWxmX21kNF90cmFuc2Zvcm0oaGFzaCwga2V5cHRyLT5zZWNyZXQpICYgSEFTSF9NQVNLOwotCXNlcSArPSBrZXlwdHItPmNvdW50OwotCS8qCi0JICoJQXMgY2xvc2UgYXMgcG9zc2libGUgdG8gUkZDIDc5Mywgd2hpY2gKLQkgKglzdWdnZXN0cyB1c2luZyBhIDI1MCBrSHogY2xvY2suCi0JICoJRnVydGhlciByZWFkaW5nIHNob3dzIHRoaXMgYXNzdW1lcyAyIE1iL3MgbmV0d29ya3MuCi0JICoJRm9yIDEwIE1iL3MgRXRoZXJuZXQsIGEgMSBNSHogY2xvY2sgaXMgYXBwcm9wcmlhdGUuCi0JICoJRm9yIDEwIEdiL3MgRXRoZXJuZXQsIGEgMSBHSHogY2xvY2sgc2hvdWxkIGJlIG9rLCBidXQKLQkgKgl3ZSBhbHNvIG5lZWQgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gc28gdGhhdCB0aGUgdTMyIHNlcQotCSAqCW92ZXJsYXBzIGxlc3MgdGhhbiBvbmUgdGltZSBwZXIgTVNMICgyIG1pbnV0ZXMpLgotCSAqCUNob29zaW5nIGEgY2xvY2sgb2YgNjQgbnMgcGVyaW9kIGlzIE9LLiAocGVyaW9kIG9mIDI3NCBzKQotCSAqLwotCXNlcSArPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKSA+PiA2OwotCi0JcmV0dXJuIHNlcTsKLX0KLQotLyogR2VuZXJhdGUgc2VjdXJlIHN0YXJ0aW5nIHBvaW50IGZvciBlcGhlbWVyYWwgSVBWNCB0cmFuc3BvcnQgcG9ydCBzZWFyY2ggKi8KLXUzMiBzZWN1cmVfaXB2NF9wb3J0X2VwaGVtZXJhbChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0KQotewotCXN0cnVjdCBrZXlkYXRhICprZXlwdHIgPSBnZXRfa2V5cHRyKCk7Ci0JdTMyIGhhc2hbNF07Ci0KLQkvKgotCSAqICBQaWNrIGEgdW5pcXVlIHN0YXJ0aW5nIG9mZnNldCBmb3IgZWFjaCBlcGhlbWVyYWwgcG9ydCBzZWFyY2gKLQkgKiAgKHNhZGRyLCBkYWRkciwgZHBvcnQpIGFuZCA0OGJpdHMgb2YgcmFuZG9tIGRhdGEuCi0JICovCi0JaGFzaFswXSA9IChfX2ZvcmNlIHUzMilzYWRkcjsKLQloYXNoWzFdID0gKF9fZm9yY2UgdTMyKWRhZGRyOwotCWhhc2hbMl0gPSAoX19mb3JjZSB1MzIpZHBvcnQgXiBrZXlwdHItPnNlY3JldFsxMF07Ci0JaGFzaFszXSA9IGtleXB0ci0+c2VjcmV0WzExXTsKLQotCXJldHVybiBoYWxmX21kNF90cmFuc2Zvcm0oaGFzaCwga2V5cHRyLT5zZWNyZXQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi11MzIgc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwoY29uc3QgX19iZTMyICpzYWRkciwgY29uc3QgX19iZTMyICpkYWRkciwKLQkJCSAgICAgICBfX2JlMTYgZHBvcnQpCi17Ci0Jc3RydWN0IGtleWRhdGEgKmtleXB0ciA9IGdldF9rZXlwdHIoKTsKLQl1MzIgaGFzaFsxMl07Ci0KLQltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKLQloYXNoWzRdID0gKF9fZm9yY2UgdTMyKWRwb3J0OwotCW1lbWNweSgmaGFzaFs1XSwga2V5cHRyLT5zZWNyZXQsIHNpemVvZihfX3UzMikgKiA3KTsKLQotCXJldHVybiB0d290aGlyZHNNRDRUcmFuc2Zvcm0oKGNvbnN0IF9fdTMyICopZGFkZHIsIGhhc2gpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JUF9EQ0NQKSB8fCBkZWZpbmVkKENPTkZJR19JUF9EQ0NQX01PRFVMRSkKLS8qIFNpbWlsYXIgdG8gc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIgYnV0IGdlbmVyYXRlIGEgNDggYml0IHZhbHVlCi0gKiBiaXQncyAzMi00NyBpbmNyZWFzZSBldmVyeSBrZXkgZXhjaGFuZ2UKLSAqICAgICAgIDAtMzEgIGhhc2goc291cmNlLCBkZXN0KQotICovCi11NjQgc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCV9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KQotewotCXU2NCBzZXE7Ci0JX191MzIgaGFzaFs0XTsKLQlzdHJ1Y3Qga2V5ZGF0YSAqa2V5cHRyID0gZ2V0X2tleXB0cigpOwotCi0JaGFzaFswXSA9IChfX2ZvcmNlIHUzMilzYWRkcjsKLQloYXNoWzFdID0gKF9fZm9yY2UgdTMyKWRhZGRyOwotCWhhc2hbMl0gPSAoKF9fZm9yY2UgdTE2KXNwb3J0IDw8IDE2KSArIChfX2ZvcmNlIHUxNilkcG9ydDsKLQloYXNoWzNdID0ga2V5cHRyLT5zZWNyZXRbMTFdOwotCi0Jc2VxID0gaGFsZl9tZDRfdHJhbnNmb3JtKGhhc2gsIGtleXB0ci0+c2VjcmV0KTsKLQlzZXEgfD0gKCh1NjQpa2V5cHRyLT5jb3VudCkgPDwgKDMyIC0gSEFTSF9CSVRTKTsKLQotCXNlcSArPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKTsKLQlzZXEgJj0gKDF1bGwgPDwgNDgpIC0gMTsKLQotCXJldHVybiBzZXE7Ci19Ci1FWFBPUlRfU1lNQk9MKHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcik7Ci0jZW5kaWYKLQotI2VuZGlmIC8qIENPTkZJR19JTkVUICovCi0KK2xhdGVfaW5pdGNhbGwocmFuZG9tX2ludF9zZWNyZXRfaW5pdCk7CiAKIC8qCiAgKiBHZXQgYSByYW5kb20gd29yZCBmb3IgaW50ZXJuYWwga2VybmVsIHVzZSBvbmx5LiBTaW1pbGFyIHRvIHVyYW5kb20gYnV0CkBAIC0xNjQ2LDE3ICsxMzE1LDE1IEBACiAgKiB2YWx1ZSBpcyBub3QgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGJ1dCBmb3Igc2V2ZXJhbCB1c2VzIHRoZSBjb3N0IG9mCiAgKiBkZXBsZXRpbmcgZW50cm9weSBpcyB0b28gaGlnaAogICovCi1ERUZJTkVfUEVSX0NQVShfX3UzMiBbNF0sIGdldF9yYW5kb21faW50X2hhc2gpOworREVGSU5FX1BFUl9DUFUoX191MzIgW01ENV9ESUdFU1RfV09SRFNdLCBnZXRfcmFuZG9tX2ludF9oYXNoKTsKIHVuc2lnbmVkIGludCBnZXRfcmFuZG9tX2ludCh2b2lkKQogewotCXN0cnVjdCBrZXlkYXRhICprZXlwdHI7CiAJX191MzIgKmhhc2ggPSBnZXRfY3B1X3ZhcihnZXRfcmFuZG9tX2ludF9oYXNoKTsKLQlpbnQgcmV0OworCXVuc2lnbmVkIGludCByZXQ7CiAKLQlrZXlwdHIgPSBnZXRfa2V5cHRyKCk7CiAJaGFzaFswXSArPSBjdXJyZW50LT5waWQgKyBqaWZmaWVzICsgZ2V0X2N5Y2xlcygpOwotCi0JcmV0ID0gaGFsZl9tZDRfdHJhbnNmb3JtKGhhc2gsIGtleXB0ci0+c2VjcmV0KTsKKwltZDVfdHJhbnNmb3JtKGhhc2gsIHJhbmRvbV9pbnRfc2VjcmV0KTsKKwlyZXQgPSBoYXNoWzBdOwogCXB1dF9jcHVfdmFyKGdldF9yYW5kb21faW50X2hhc2gpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90aWxlLXNyb20uYyBiL2RyaXZlcnMvY2hhci90aWxlLXNyb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNlZTAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3RpbGUtc3JvbS5jCkBAIC0wLDAgKzEsNDgxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFNQSSBGbGFzaCBST00gZHJpdmVyCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBkZXJpdmVkIGZyb20gY29kZSBwcm92aWRlZCBpbiAiTGludXggRGV2aWNlCisgKiBEcml2ZXJzLCBUaGlyZCBFZGl0aW9uIiwgYnkgSm9uYXRoYW4gQ29yYmV0LCBBbGVzc2FuZHJvIFJ1YmluaSwgYW5kCisgKiBHcmVnIEtyb2FoLUhhcnRtYW4sIHB1Ymxpc2hlZCBieSBPJ1JlaWxseSBNZWRpYSwgSW5jLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkvKiBrbWFsbG9jKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogZXZlcnl0aGluZy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGVycm9yIGNvZGVzICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogc2l6ZV90ICovCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CS8qIE9fQUNDTU9ERSAqLworI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGh2L2Rydl9zcm9tX2ludGYuaD4KKworLyoKKyAqIFNpemUgb2Ygb3VyIGh5cGVydmlzb3IgSS9PIHJlcXVlc3RzLiAgV2UgYnJlYWsgdXAgbGFyZ2UgdHJhbnNmZXJzCisgKiBzbyB0aGF0IHdlIGRvbid0IHNwZW5kIGxhcmdlIHVuaW50ZXJydXB0ZWQgc3BhbnMgb2YgdGltZSBpbiB0aGUKKyAqIGh5cGVydmlzb3IuICBFcmFzaW5nIGFuIFNST00gc2VjdG9yIHRha2VzIGEgc2lnbmlmaWNhbnQgZnJhY3Rpb24gb2YKKyAqIGEgc2Vjb25kLCBzbyBpZiB3ZSBhbGxvd2VkIHRoZSB1c2VyIHRvLCBzYXksIGRvIG9uZSBJL08gdG8gd3JpdGUgdGhlCisgKiBlbnRpcmUgUk9NLCB3ZSdkIGdldCBzb2Z0IGxvY2t1cCB0aW1lb3V0cywgb3Igd29yc2UuCisgKi8KKyNkZWZpbmUgU1JPTV9DSFVOS19TSVpFICgoc2l6ZV90KTQwOTYpCisKKy8qCisgKiBXaGVuIGh5cGVydmlzb3IgaXMgYnVzeSAoZS5nLiBlcmFzaW5nKSwgcG9sbCB0aGUgc3RhdHVzIHBlcmlvZGljYWxseS4KKyAqLworCisvKgorICogSW50ZXJ2YWwgdG8gcG9sbCB0aGUgc3RhdGUgaW4gbXNlYworICovCisjZGVmaW5lIFNST01fV0FJVF9UUllfSU5URVJWQUwgMjAKKworLyoKKyAqIE1heGltdW0gdGltZXMgdG8gcG9sbCB0aGUgc3RhdGUKKyAqLworI2RlZmluZSBTUk9NX01BWF9XQUlUX1RSWV9USU1FUyAxMDAwCisKK3N0cnVjdCBzcm9tX2RldiB7CisJaW50IGh2X2RldmhkbDsJCQkvKiBIYW5kbGUgZm9yIGh5cGVydmlzb3IgZGV2aWNlICovCisJdTMyIHRvdGFsX3NpemU7CQkJLyogU2l6ZSBvZiB0aGlzIGRldmljZSAqLworCXUzMiBzZWN0b3Jfc2l6ZTsJCS8qIFNpemUgb2YgYSBzZWN0b3IgKi8KKwl1MzIgcGFnZV9zaXplOwkJCS8qIFNpemUgb2YgYSBwYWdlICovCisJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBBbGxvdyBvbmx5IG9uZSBhY2Nlc3NvciBhdCBhIHRpbWUgKi8KK307CisKK3N0YXRpYyBpbnQgc3JvbV9tYWpvcjsJCQkvKiBEeW5hbWljIG1ham9yIGJ5IGRlZmF1bHQgKi8KK21vZHVsZV9wYXJhbShzcm9tX21ham9yLCBpbnQsIDApOworTU9EVUxFX0FVVEhPUigiVGlsZXJhIENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgc3JvbV9kZXZzOwkJCS8qIE51bWJlciBvZiBTUk9NIHBhcnRpdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2RldiBzcm9tX2NkZXY7CitzdGF0aWMgc3RydWN0IGNsYXNzICpzcm9tX2NsYXNzOworc3RhdGljIHN0cnVjdCBzcm9tX2RldiAqc3JvbV9kZXZpY2VzOworCisvKgorICogSGFuZGxlIGNhbGxpbmcgdGhlIGh5cGVydmlzb3IgYW5kIG1hbmFnaW5nIEVBR0FJTi9FQlVTWS4KKyAqLworCitzdGF0aWMgc3NpemVfdCBfc3JvbV9yZWFkKGludCBodl9kZXZoZGwsIHZvaWQgKmJ1ZiwKKwkJCSAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCWludCByZXR2YWwsIHJldHJpZXMgPSBTUk9NX01BWF9XQUlUX1RSWV9USU1FUzsKKwlmb3IgKDs7KSB7CisJCXJldHZhbCA9IGh2X2Rldl9wcmVhZChodl9kZXZoZGwsIDAsIChIVl9WaXJ0QWRkcilidWYsCisJCQkJICAgICAgY291bnQsIG9mZik7CisJCWlmIChyZXR2YWwgPj0gMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmIChyZXR2YWwgPT0gSFZfRUFHQUlOKQorCQkJY29udGludWU7CisJCWlmIChyZXR2YWwgPT0gSFZfRUJVU1kgJiYgLS1yZXRyaWVzID4gMCkgeworCQkJbXNsZWVwKFNST01fV0FJVF9UUllfSU5URVJWQUwpOworCQkJY29udGludWU7CisJCX0KKwkJcHJfZXJyKCJfc3JvbV9yZWFkOiBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIC1FSU87CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBfc3JvbV93cml0ZShpbnQgaHZfZGV2aGRsLCBjb25zdCB2b2lkICpidWYsCisJCQkgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldHZhbCwgcmV0cmllcyA9IFNST01fTUFYX1dBSVRfVFJZX1RJTUVTOworCWZvciAoOzspIHsKKwkJcmV0dmFsID0gaHZfZGV2X3B3cml0ZShodl9kZXZoZGwsIDAsIChIVl9WaXJ0QWRkcilidWYsCisJCQkJICAgICAgIGNvdW50LCBvZmYpOworCQlpZiAocmV0dmFsID49IDApCisJCQlyZXR1cm4gcmV0dmFsOworCQlpZiAocmV0dmFsID09IEhWX0VBR0FJTikKKwkJCWNvbnRpbnVlOworCQlpZiAocmV0dmFsID09IEhWX0VCVVNZICYmIC0tcmV0cmllcyA+IDApIHsKKwkJCW1zbGVlcChTUk9NX1dBSVRfVFJZX0lOVEVSVkFMKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByX2VycigiX3Nyb21fd3JpdGU6IGVycm9yICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gLUVJTzsKKwl9Cit9CisKKy8qKgorICogc3JvbV9vcGVuKCkgLSBEZXZpY2Ugb3BlbiByb3V0aW5lLgorICogQGlub2RlOiBJbm9kZSBmb3IgdGhpcyBkZXZpY2UuCisgKiBAZmlscDogRmlsZSBmb3IgdGhpcyBzcGVjaWZpYyBvcGVuIG9mIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJucyB6ZXJvLCBvciBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IHNyb21fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSAmc3JvbV9kZXZpY2VzW2ltaW5vcihpbm9kZSldOworCXJldHVybiAwOworfQorCisKKy8qKgorICogc3JvbV9yZWxlYXNlKCkgLSBEZXZpY2UgcmVsZWFzZSByb3V0aW5lLgorICogQGlub2RlOiBJbm9kZSBmb3IgdGhpcyBkZXZpY2UuCisgKiBAZmlscDogRmlsZSBmb3IgdGhpcyBzcGVjaWZpYyBvcGVuIG9mIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJucyB6ZXJvLCBvciBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IHNyb21fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3Qgc3JvbV9kZXYgKnNyb20gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBkdW1teTsKKworCS8qIE1ha2Ugc3VyZSB3ZSd2ZSBmbHVzaGVkIGFueXRoaW5nIHdyaXR0ZW4gdG8gdGhlIFJPTS4gKi8KKwltdXRleF9sb2NrKCZzcm9tLT5sb2NrKTsKKwlpZiAoc3JvbS0+aHZfZGV2aGRsID49IDApCisJCV9zcm9tX3dyaXRlKHNyb20tPmh2X2RldmhkbCwgJmR1bW15LCBTUk9NX0ZMVVNIX09GRiwgMSk7CisJbXV0ZXhfdW5sb2NrKCZzcm9tLT5sb2NrKTsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIHNyb21fcmVhZCgpIC0gUmVhZCBkYXRhIGZyb20gdGhlIGRldmljZS4KKyAqIEBmaWxwOiBGaWxlIGZvciB0aGlzIHNwZWNpZmljIG9wZW4gb2YgdGhlIGRldmljZS4KKyAqIEBidWY6IFVzZXIncyBkYXRhIGJ1ZmZlci4KKyAqIEBjb3VudDogTnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZC4KKyAqIEBmX3BvczogRmlsZSBwb3NpdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkLCBvciBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgc3NpemVfdCBzcm9tX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCWludCByZXR2YWwgPSAwOworCXZvaWQgKmtlcm5idWY7CisJc3RydWN0IHNyb21fZGV2ICpzcm9tID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJa2VybmJ1ZiA9IGttYWxsb2MoU1JPTV9DSFVOS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtlcm5idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3JvbS0+bG9jaykpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlrZnJlZShrZXJuYnVmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJaW50IGh2X3JldHZhbDsKKwkJaW50IGJ5dGVzX3RoaXNfcGFzcyA9IG1pbihjb3VudCwgU1JPTV9DSFVOS19TSVpFKTsKKworCQlodl9yZXR2YWwgPSBfc3JvbV9yZWFkKHNyb20tPmh2X2RldmhkbCwga2VybmJ1ZiwKKwkJCQkgICAgICAgKmZfcG9zLCBieXRlc190aGlzX3Bhc3MpOworCQlpZiAoaHZfcmV0dmFsID4gMCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtlcm5idWYsIGh2X3JldHZhbCkgIT0gMCkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoaHZfcmV0dmFsIDw9IDApIHsKKwkJCWlmIChyZXR2YWwgPT0gMCkKKwkJCQlyZXR2YWwgPSBodl9yZXR2YWw7CisJCQlicmVhazsKKwkJfQorCisJCXJldHZhbCArPSBodl9yZXR2YWw7CisJCSpmX3BvcyArPSBodl9yZXR2YWw7CisJCWJ1ZiArPSBodl9yZXR2YWw7CisJCWNvdW50IC09IGh2X3JldHZhbDsKKwl9CisKKwltdXRleF91bmxvY2soJnNyb20tPmxvY2spOworCWtmcmVlKGtlcm5idWYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBzcm9tX3dyaXRlKCkgLSBXcml0ZSBkYXRhIHRvIHRoZSBkZXZpY2UuCisgKiBAZmlscDogRmlsZSBmb3IgdGhpcyBzcGVjaWZpYyBvcGVuIG9mIHRoZSBkZXZpY2UuCisgKiBAYnVmOiBVc2VyJ3MgZGF0YSBidWZmZXIuCisgKiBAY291bnQ6IE51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQuCisgKiBAZl9wb3M6IEZpbGUgcG9zaXRpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIHNzaXplX3Qgc3JvbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCWludCByZXR2YWwgPSAwOworCXZvaWQgKmtlcm5idWY7CisJc3RydWN0IHNyb21fZGV2ICpzcm9tID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJa2VybmJ1ZiA9IGttYWxsb2MoU1JPTV9DSFVOS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtlcm5idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3JvbS0+bG9jaykpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlrZnJlZShrZXJuYnVmKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwl3aGlsZSAoY291bnQpIHsKKwkJaW50IGh2X3JldHZhbDsKKwkJaW50IGJ5dGVzX3RoaXNfcGFzcyA9IG1pbihjb3VudCwgU1JPTV9DSFVOS19TSVpFKTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoa2VybmJ1ZiwgYnVmLCBieXRlc190aGlzX3Bhc3MpICE9IDApIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWh2X3JldHZhbCA9IF9zcm9tX3dyaXRlKHNyb20tPmh2X2RldmhkbCwga2VybmJ1ZiwKKwkJCQkJKmZfcG9zLCBieXRlc190aGlzX3Bhc3MpOworCQlpZiAoaHZfcmV0dmFsIDw9IDApIHsKKwkJCWlmIChyZXR2YWwgPT0gMCkKKwkJCQlyZXR2YWwgPSBodl9yZXR2YWw7CisJCQlicmVhazsKKwkJfQorCisJCXJldHZhbCArPSBodl9yZXR2YWw7CisJCSpmX3BvcyArPSBodl9yZXR2YWw7CisJCWJ1ZiArPSBodl9yZXR2YWw7CisJCWNvdW50IC09IGh2X3JldHZhbDsKKwl9CisKKwltdXRleF91bmxvY2soJnNyb20tPmxvY2spOworCWtmcmVlKGtlcm5idWYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogUHJvdmlkZSBvdXIgb3duIGltcGxlbWVudGF0aW9uIHNvIHdlIGNhbiB1c2Ugc3JvbS0+dG90YWxfc2l6ZS4gKi8KK2xvZmZfdCBzcm9tX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKK3sKKwlzdHJ1Y3Qgc3JvbV9kZXYgKnNyb20gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzcm9tLT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXN3aXRjaCAob3JpZ2luKSB7CisJY2FzZSBTRUVLX0VORDoKKwkJb2Zmc2V0ICs9IHNyb20tPnRvdGFsX3NpemU7CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6CisJCW9mZnNldCArPSBmaWxwLT5mX3BvczsKKwkJYnJlYWs7CisJfQorCisJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gc3JvbS0+dG90YWxfc2l6ZSkgeworCQlvZmZzZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWZpbHAtPmZfcG9zID0gb2Zmc2V0OworCQlmaWxwLT5mX3ZlcnNpb24gPSAwOworCX0KKworCW11dGV4X3VubG9jaygmc3JvbS0+bG9jayk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgc3NpemVfdCB0b3RhbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3JvbV9kZXYgKnNyb20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgc3JvbS0+dG90YWxfc2l6ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlY3Rvcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNyb21fZGV2ICpzcm9tID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHNyb20tPnNlY3Rvcl9zaXplKTsKK30KKworc3RhdGljIHNzaXplX3QgcGFnZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcm9tX2RldiAqc3JvbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzcm9tLT5wYWdlX3NpemUpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgc3JvbV9kZXZfYXR0cnNbXSA9IHsKKwlfX0FUVFIodG90YWxfc2l6ZSwgU19JUlVHTywgdG90YWxfc2hvdywgTlVMTCksCisJX19BVFRSKHNlY3Rvcl9zaXplLCBTX0lSVUdPLCBzZWN0b3Jfc2hvdywgTlVMTCksCisJX19BVFRSKHBhZ2Vfc2l6ZSwgU19JUlVHTywgcGFnZV9zaG93LCBOVUxMKSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIGNoYXIgKnNyb21fZGV2bm9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIG1vZGVfdCAqbW9kZSkKK3sKKwkqbW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSOworCXJldHVybiBrYXNwcmludGYoR0ZQX0tFUk5FTCwgInNyb20vJXMiLCBkZXZfbmFtZShkZXYpKTsKK30KKworLyoKKyAqIFRoZSBmb3BzCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNyb21fZm9wcyA9IHsKKwkub3duZXIgPSAgICAgVEhJU19NT0RVTEUsCisJLmxsc2VlayA9ICAgIHNyb21fbGxzZWVrLAorCS5yZWFkID0JICAgICBzcm9tX3JlYWQsCisJLndyaXRlID0gICAgIHNyb21fd3JpdGUsCisJLm9wZW4gPQkgICAgIHNyb21fb3BlbiwKKwkucmVsZWFzZSA9ICAgc3JvbV9yZWxlYXNlLAorfTsKKworLyoqCisgKiBzcm9tX3NldHVwX21pbm9yKCkgLSBJbml0aWFsaXplIHBlci1taW5vciBpbmZvcm1hdGlvbi4KKyAqIEBzcm9tOiBQZXItZGV2aWNlIFNST00gc3RhdGUuCisgKiBAaW5kZXg6IERldmljZSB0byBzZXQgdXAuCisgKi8KK3N0YXRpYyBpbnQgc3JvbV9zZXR1cF9taW5vcihzdHJ1Y3Qgc3JvbV9kZXYgKnNyb20sIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IGRldmhkbCA9IHNyb20tPmh2X2RldmhkbDsKKworCW11dGV4X2luaXQoJnNyb20tPmxvY2spOworCisJaWYgKF9zcm9tX3JlYWQoZGV2aGRsLCAmc3JvbS0+dG90YWxfc2l6ZSwKKwkJICAgICAgIFNST01fVE9UQUxfU0laRV9PRkYsIHNpemVvZihzcm9tLT50b3RhbF9zaXplKSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoX3Nyb21fcmVhZChkZXZoZGwsICZzcm9tLT5zZWN0b3Jfc2l6ZSwKKwkJICAgICAgIFNST01fU0VDVE9SX1NJWkVfT0ZGLCBzaXplb2Yoc3JvbS0+c2VjdG9yX3NpemUpKSA8IDApCisJCXJldHVybiAtRUlPOworCWlmIChfc3JvbV9yZWFkKGRldmhkbCwgJnNyb20tPnBhZ2Vfc2l6ZSwKKwkJICAgICAgIFNST01fUEFHRV9TSVpFX09GRiwgc2l6ZW9mKHNyb20tPnBhZ2Vfc2l6ZSkpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKHNyb21fY2xhc3MsICZwbGF0Zm9ybV9idXMsCisJCQkgICAgTUtERVYoc3JvbV9tYWpvciwgaW5kZXgpLCBzcm9tLCAiJWQiLCBpbmRleCk7CisJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKK30KKworLyoqIHNyb21faW5pdCgpIC0gSW5pdGlhbGl6ZSB0aGUgZHJpdmVyJ3MgbW9kdWxlLiAqLworc3RhdGljIGludCBzcm9tX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0LCBpOworCWRldl90IGRldiA9IE1LREVWKHNyb21fbWFqb3IsIDApOworCisJLyoKKwkgKiBTdGFydCB3aXRoIGEgcGxhdXNpYmxlIG51bWJlciBvZiBwYXJ0aXRpb25zOyB0aGUga3JlYWxsb2MoKSBjYWxsCisJICogYmVsb3cgd2lsbCB5aWVsZCBhYm91dCBsb2coc3JvbV9kZXZzKSBhZGRpdGlvbmFsIGFsbG9jYXRpb25zLgorCSAqLworCXNyb21fZGV2aWNlcyA9IGt6YWxsb2MoNCAqIHNpemVvZihzdHJ1Y3Qgc3JvbV9kZXYpLCBHRlBfS0VSTkVMKTsKKworCS8qIERpc2NvdmVyIHRoZSBudW1iZXIgb2Ygc3JvbSBwYXJ0aXRpb25zLiAqLworCWZvciAoaSA9IDA7IDsgaSsrKSB7CisJCWludCBkZXZoZGw7CisJCWNoYXIgYnVmWzIwXTsKKwkJc3RydWN0IHNyb21fZGV2ICpuZXdfc3JvbV9kZXZpY2VzID0KKwkJCWtyZWFsbG9jKHNyb21fZGV2aWNlcywgKGkrMSkgKiBzaXplb2Yoc3RydWN0IHNyb21fZGV2KSwKKwkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCQlpZiAoIW5ld19zcm9tX2RldmljZXMpIHsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxfbWVtOworCQl9CisJCXNyb21fZGV2aWNlcyA9IG5ld19zcm9tX2RldmljZXM7CisJCXNwcmludGYoYnVmLCAic3JvbS8wLyVkIiwgaSk7CisJCWRldmhkbCA9IGh2X2Rldl9vcGVuKChIVl9WaXJ0QWRkcilidWYsIDApOworCQlpZiAoZGV2aGRsIDwgMCkgeworCQkJaWYgKGRldmhkbCAhPSBIVl9FTk9ERVYpCisJCQkJcHJfbm90aWNlKCJzcm9tLyVkOiBodl9kZXZfb3BlbiBmYWlsZWQ6ICVkLlxuIiwKKwkJCQkJICBpLCBkZXZoZGwpOworCQkJYnJlYWs7CisJCX0KKwkJc3JvbV9kZXZpY2VzW2ldLmh2X2RldmhkbCA9IGRldmhkbDsKKwl9CisJc3JvbV9kZXZzID0gaTsKKworCS8qIEJhaWwgb3V0IGVhcmx5IGlmIHdlIGhhdmUgbm8gcGFydGl0aW9ucyBhdCBhbGwuICovCisJaWYgKHNyb21fZGV2cyA9PSAwKSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tZW07CisJfQorCisJLyogUmVnaXN0ZXIgb3VyIG1ham9yLCBhbmQgYWNjZXB0IGEgZHluYW1pYyBudW1iZXIuICovCisJaWYgKHNyb21fbWFqb3IpCisJCXJlc3VsdCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBzcm9tX2RldnMsICJzcm9tIik7CisJZWxzZSB7CisJCXJlc3VsdCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgMCwgc3JvbV9kZXZzLCAic3JvbSIpOworCQlzcm9tX21ham9yID0gTUFKT1IoZGV2KTsKKwl9CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZmFpbF9tZW07CisKKwkvKiBSZWdpc3RlciBhIGNoYXJhY3RlciBkZXZpY2UuICovCisJY2Rldl9pbml0KCZzcm9tX2NkZXYsICZzcm9tX2ZvcHMpOworCXNyb21fY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCXNyb21fY2Rldi5vcHMgPSAmc3JvbV9mb3BzOworCXJlc3VsdCA9IGNkZXZfYWRkKCZzcm9tX2NkZXYsIGRldiwgc3JvbV9kZXZzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBmYWlsX2NocmRldjsKKworCS8qIENyZWF0ZSBhIHN5c2ZzIGNsYXNzLiAqLworCXNyb21fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJzcm9tIik7CisJaWYgKElTX0VSUihzcm9tX2NsYXNzKSkgeworCQlyZXN1bHQgPSBQVFJfRVJSKHNyb21fY2xhc3MpOworCQlnb3RvIGZhaWxfY2RldjsKKwl9CisJc3JvbV9jbGFzcy0+ZGV2X2F0dHJzID0gc3JvbV9kZXZfYXR0cnM7CisJc3JvbV9jbGFzcy0+ZGV2bm9kZSA9IHNyb21fZGV2bm9kZTsKKworCS8qIERvIHBlci1wYXJ0aXRpb24gaW5pdGlhbGl6YXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3JvbV9kZXZzOyBpKyspIHsKKwkJcmVzdWx0ID0gc3JvbV9zZXR1cF9taW5vcihzcm9tX2RldmljZXMgKyBpLCBpKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlnb3RvIGZhaWxfY2xhc3M7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfY2xhc3M6CisJZm9yIChpID0gMDsgaSA8IHNyb21fZGV2czsgaSsrKQorCQlkZXZpY2VfZGVzdHJveShzcm9tX2NsYXNzLCBNS0RFVihzcm9tX21ham9yLCBpKSk7CisJY2xhc3NfZGVzdHJveShzcm9tX2NsYXNzKTsKK2ZhaWxfY2RldjoKKwljZGV2X2RlbCgmc3JvbV9jZGV2KTsKK2ZhaWxfY2hyZGV2OgorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIHNyb21fZGV2cyk7CitmYWlsX21lbToKKwlrZnJlZShzcm9tX2RldmljZXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKiBzcm9tX2NsZWFudXAoKSAtIENsZWFuIHVwIHRoZSBkcml2ZXIncyBtb2R1bGUuICovCitzdGF0aWMgdm9pZCBzcm9tX2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgc3JvbV9kZXZzOyBpKyspCisJCWRldmljZV9kZXN0cm95KHNyb21fY2xhc3MsIE1LREVWKHNyb21fbWFqb3IsIGkpKTsKKwljbGFzc19kZXN0cm95KHNyb21fY2xhc3MpOworCWNkZXZfZGVsKCZzcm9tX2NkZXYpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihzcm9tX21ham9yLCAwKSwgc3JvbV9kZXZzKTsKKwlrZnJlZShzcm9tX2RldmljZXMpOworfQorCittb2R1bGVfaW5pdChzcm9tX2luaXQpOworbW9kdWxlX2V4aXQoc3JvbV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKaW5kZXggN2ZjMmYxMC4uM2Y0MDUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMKQEAgLTgwLDcgKzgwLDcgQEAKIHN0YXRpYyBMSVNUX0hFQUQodGlzX2NoaXBzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGlzX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1BOUAorI2lmIGRlZmluZWQoQ09ORklHX1BOUCkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKIHN0YXRpYyBpbnQgaXNfaXRwbShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqYWNwaSA9IHBucF9hY3BpX2RldmljZShkZXYpOwpAQCAtOTMsNiArOTMsMTEgQEAKIAogCXJldHVybiAwOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2l0cG0oc3RydWN0IHBucF9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiBzdGF0aWMgaW50IGNoZWNrX2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwppbmRleCBkYzdjMDMzLi4zMmE3N2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CkBAIC0xNTAsMTMgKzE1MSwxMyBAQAogCiBzdGF0aWMgaW50IHNoX2NtdF9lbmFibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nICpyYXRlKQogewotCWludCByZXQ7CisJaW50IGssIHJldDsKIAogCS8qIGVuYWJsZSBjbG9jayAqLwogCXJldCA9IGNsa19lbmFibGUocC0+Y2xrKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgY2xvY2tcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjA7CiAJfQogCiAJLyogbWFrZSBzdXJlIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KQEAgLTE3NCw5ICsxNzUsMzggQEAKIAlzaF9jbXRfd3JpdGUocCwgQ01DT1IsIDB4ZmZmZmZmZmYpOwogCXNoX2NtdF93cml0ZShwLCBDTUNOVCwgMCk7CiAKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgc2g3M2EwIHVzZXIncyBtYW51YWwsIGFzIENNQ05UIGNhbiBiZSBvcGVyYXRlZAorCSAqIG9ubHkgYnkgdGhlIFJDTEsgKFBzZXVkbyAzMiBLSHopLCB0aGVyZSdzIG9uZSByZXN0cmljdGlvbiBvbgorCSAqIG1vZGlmeWluZyBDTUNOVCByZWdpc3RlcjsgdHdvIFJDTEsgY3ljbGVzIGFyZSBuZWNlc3NhcnkgYmVmb3JlCisJICogdGhpcyByZWdpc3RlciBpcyBlaXRoZXIgcmVhZCBvciBhbnkgbW9kaWZpY2F0aW9uIG9mIHRoZSB2YWx1ZQorCSAqIGl0IGhvbGRzIGlzIHJlZmxlY3RlZCBpbiB0aGUgTFNJJ3MgYWN0dWFsIG9wZXJhdGlvbi4KKwkgKgorCSAqIFdoaWxlIGF0IGl0LCB3ZSdyZSBzdXBwb3NlZCB0byBjbGVhciBvdXQgdGhlIENNQ05UIGFzIG9mIHRoaXMKKwkgKiBtb21lbnQsIHNvIG1ha2Ugc3VyZSBpdCdzIHByb2Nlc3NlZCBwcm9wZXJseSBoZXJlLiAgVGhpcyB3aWxsCisJICogdGFrZSBSQ0xLeDIgYXQgbWF4aW11bS4KKwkgKi8KKwlmb3IgKGsgPSAwOyBrIDwgMTAwOyBrKyspIHsKKwkJaWYgKCFzaF9jbXRfcmVhZChwLCBDTUNOVCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCWlmIChzaF9jbXRfcmVhZChwLCBDTUNOVCkpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiY2Fubm90IGNsZWFyIENNQ05UXG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBlcnIxOworCX0KKwogCS8qIGVuYWJsZSBjaGFubmVsICovCiAJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMSk7CiAJcmV0dXJuIDA7CisgZXJyMToKKwkvKiBzdG9wIGNsb2NrICovCisJY2xrX2Rpc2FibGUocC0+Y2xrKTsKKworIGVycjA6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2hfY210X2Rpc2FibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCmluZGV4IDNlZTFmZGIuLmU1NTgxNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAlzdHJ1Y3QgcHJvY19ldmVudCAqZXY7CiAJX191OCBidWZmZXJbQ05fUFJPQ19NU0dfU0laRV07CiAJc3RydWN0IHRpbWVzcGVjIHRzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50OwogCiAJaWYgKGF0b21pY19yZWFkKCZwcm9jX2V2ZW50X251bV9saXN0ZW5lcnMpIDwgMSkKIAkJcmV0dXJuOwpAQCAtNjcsOCArNjgsMTEgQEAKIAlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KIAlwdXRfdW5hbGlnbmVkKHRpbWVzcGVjX3RvX25zKCZ0cyksIChfX3U2NCAqKSZldi0+dGltZXN0YW1wX25zKTsKIAlldi0+d2hhdCA9IFBST0NfRVZFTlRfRk9SSzsKLQlldi0+ZXZlbnRfZGF0YS5mb3JrLnBhcmVudF9waWQgPSB0YXNrLT5yZWFsX3BhcmVudC0+cGlkOwotCWV2LT5ldmVudF9kYXRhLmZvcmsucGFyZW50X3RnaWQgPSB0YXNrLT5yZWFsX3BhcmVudC0+dGdpZDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcGFyZW50ID0gcmN1X2RlcmVmZXJlbmNlKHRhc2stPnJlYWxfcGFyZW50KTsKKwlldi0+ZXZlbnRfZGF0YS5mb3JrLnBhcmVudF9waWQgPSBwYXJlbnQtPnBpZDsKKwlldi0+ZXZlbnRfZGF0YS5mb3JrLnBhcmVudF90Z2lkID0gcGFyZW50LT50Z2lkOworCXJjdV9yZWFkX3VubG9jaygpOwogCWV2LT5ldmVudF9kYXRhLmZvcmsuY2hpbGRfcGlkID0gdGFzay0+cGlkOwogCWV2LT5ldmVudF9kYXRhLmZvcmsuY2hpbGRfdGdpZCA9IHRhc2stPnRnaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKaW5kZXggN2IwNjAzZS4uY2RjMDJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKQEAgLTI2MSw2ICsyNjEsOSBAQAogCXByID0gcGVyX2NwdShwcm9jZXNzb3JzLCBjcHUpOwogCXBjY19jcHVfZGF0YSA9IHBlcl9jcHVfcHRyKHBjY19jcHVfaW5mbywgY3B1KTsKIAorCWlmICghcHIpCisJCXJldHVybiAtRU5PREVWOworCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QocHItPmhhbmRsZSwgIlBDQ1AiLCBOVUxMLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYmY1MDkyNC4uZDRjNTQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC0yNSw5ICsyNSwxOSBAQAogCiBERUZJTkVfTVVURVgoY3B1aWRsZV9sb2NrKTsKIExJU1RfSEVBRChjcHVpZGxlX2RldGVjdGVkX2RldmljZXMpOwotc3RhdGljIHZvaWQgKCpwbV9pZGxlX29sZCkodm9pZCk7CiAKIHN0YXRpYyBpbnQgZW5hYmxlZF9kZXZpY2VzOworc3RhdGljIGludCBvZmYgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgX19yZWFkX21vc3RseTsKKworaW50IGNwdWlkbGVfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gb2ZmOworfQordm9pZCBkaXNhYmxlX2NwdWlkbGUodm9pZCkKK3sKKwlvZmYgPSAxOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVCkKIHN0YXRpYyB2b2lkIGNwdWlkbGVfa2lja19jcHVzKHZvaWQpCkBAIC00NiwyNSArNTYsMjMgQEAKICAqIGNwdWlkbGVfaWRsZV9jYWxsIC0gdGhlIG1haW4gaWRsZSBsb29wCiAgKgogICogTk9URTogbm8gbG9ja3Mgb3Igc2VtYXBob3JlcyBzaG91bGQgYmUgdXNlZCBoZXJlCisgKiByZXR1cm4gbm9uLXplcm8gb24gZmFpbHVyZQogICovCi1zdGF0aWMgdm9pZCBjcHVpZGxlX2lkbGVfY2FsbCh2b2lkKQoraW50IGNwdWlkbGVfaWRsZV9jYWxsKHZvaWQpCiB7CiAJc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYgPSBfX3RoaXNfY3B1X3JlYWQoY3B1aWRsZV9kZXZpY2VzKTsKIAlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqdGFyZ2V0X3N0YXRlOwogCWludCBuZXh0X3N0YXRlOwogCisJaWYgKG9mZikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWluaXRpYWxpemVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcmVhZHkgKi8KLQlpZiAoIWRldiB8fCAhZGV2LT5lbmFibGVkKSB7Ci0JCWlmIChwbV9pZGxlX29sZCkKLQkJCXBtX2lkbGVfb2xkKCk7Ci0JCWVsc2UKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEUpCi0JCQlkZWZhdWx0X2lkbGUoKTsKLSNlbHNlCi0JCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KKwlpZiAoIWRldiB8fCAhZGV2LT5lbmFibGVkKQorCQlyZXR1cm4gLUVCVVNZOwogCiAjaWYgMAogCS8qIHNob3dzIHJlZ3Jlc3Npb25zLCByZS1lbmFibGUgZm9yIDIuNi4yOSAqLwpAQCAtODksNyArOTcsNyBAQAogCW5leHRfc3RhdGUgPSBjcHVpZGxlX2N1cnJfZ292ZXJub3ItPnNlbGVjdChkZXYpOwogCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCiAJdGFyZ2V0X3N0YXRlID0gJmRldi0+c3RhdGVzW25leHRfc3RhdGVdOwpAQCAtMTE0LDYgKzEyMiw4IEBACiAJLyogZ2l2ZSB0aGUgZ292ZXJub3IgYW4gb3Bwb3J0dW5pdHkgdG8gcmVmbGVjdCBvbiB0aGUgb3V0Y29tZSAqLwogCWlmIChjcHVpZGxlX2N1cnJfZ292ZXJub3ItPnJlZmxlY3QpCiAJCWNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+cmVmbGVjdChkZXYpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTIxLDEwICsxMzEsMTAgQEAKICAqLwogdm9pZCBjcHVpZGxlX2luc3RhbGxfaWRsZV9oYW5kbGVyKHZvaWQpCiB7Ci0JaWYgKGVuYWJsZWRfZGV2aWNlcyAmJiAocG1faWRsZSAhPSBjcHVpZGxlX2lkbGVfY2FsbCkpIHsKKwlpZiAoZW5hYmxlZF9kZXZpY2VzKSB7CiAJCS8qIE1ha2Ugc3VyZSBhbGwgY2hhbmdlcyBmaW5pc2hlZCBiZWZvcmUgd2Ugc3dpdGNoIHRvIG5ldyBpZGxlICovCiAJCXNtcF93bWIoKTsKLQkJcG1faWRsZSA9IGNwdWlkbGVfaWRsZV9jYWxsOworCQlpbml0aWFsaXplZCA9IDE7CiAJfQogfQogCkBAIC0xMzMsOCArMTQzLDggQEAKICAqLwogdm9pZCBjcHVpZGxlX3VuaW5zdGFsbF9pZGxlX2hhbmRsZXIodm9pZCkKIHsKLQlpZiAoZW5hYmxlZF9kZXZpY2VzICYmIHBtX2lkbGVfb2xkICYmIChwbV9pZGxlICE9IHBtX2lkbGVfb2xkKSkgewotCQlwbV9pZGxlID0gcG1faWRsZV9vbGQ7CisJaWYgKGVuYWJsZWRfZGV2aWNlcykgeworCQlpbml0aWFsaXplZCA9IDA7CiAJCWNwdWlkbGVfa2lja19jcHVzKCk7CiAJfQogfQpAQCAtNDI3LDcgKzQzNyw4IEBACiB7CiAJaW50IHJldDsKIAotCXBtX2lkbGVfb2xkID0gcG1faWRsZTsKKwlpZiAoY3B1aWRsZV9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldCA9IGNwdWlkbGVfYWRkX2NsYXNzX3N5c2ZzKCZjcHVfc3lzZGV2X2NsYXNzKTsKIAlpZiAocmV0KQpAQCAtNDM4LDQgKzQ0OSw1IEBACiAJcmV0dXJuIDA7CiB9CiAKK21vZHVsZV9wYXJhbShvZmYsIGludCwgMDQ0NCk7CiBjb3JlX2luaXRjYWxsKGNwdWlkbGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5oIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuaAppbmRleCAzM2U1MGQ1Li4zOGMzZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5oCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNwdWlkbGVfZGV0ZWN0ZWRfZGV2aWNlczsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggY3B1aWRsZV9sb2NrOwogZXh0ZXJuIHNwaW5sb2NrX3QgY3B1aWRsZV9kcml2ZXJfbG9jazsKK2V4dGVybiBpbnQgY3B1aWRsZV9kaXNhYmxlZCh2b2lkKTsKIAogLyogaWRsZSBsb29wICovCiBleHRlcm4gdm9pZCBjcHVpZGxlX2luc3RhbGxfaWRsZV9oYW5kbGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2RyaXZlci5jIGIvZHJpdmVycy9jcHVpZGxlL2RyaXZlci5jCmluZGV4IGZkMTYwMWUuLjNmN2UzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvZHJpdmVyLmMKQEAgLTI2LDYgKzI2LDkgQEAKIAlpZiAoIWRydikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY3B1aWRsZV9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXNwaW5fbG9jaygmY3B1aWRsZV9kcml2ZXJfbG9jayk7CiAJaWYgKGNwdWlkbGVfY3Vycl9kcml2ZXIpIHsKIAkJc3Bpbl91bmxvY2soJmNwdWlkbGVfZHJpdmVyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9yLmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3IuYwppbmRleCA3MjRjMTY0Li5lYTJmOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3IuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3IuYwpAQCAtODEsNiArODEsOSBAQAogCWlmICghZ292IHx8ICFnb3YtPnNlbGVjdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY3B1aWRsZV9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCW11dGV4X2xvY2soJmNwdWlkbGVfbG9jayk7CiAJaWYgKF9fY3B1aWRsZV9maW5kX2dvdmVybm9yKGdvdi0+bmFtZSkgPT0gTlVMTCkgewogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvVE9ETyBiL2RyaXZlcnMvZG1hL1RPRE8KaW5kZXggYTRhZjg1OC4uNzM0ZWQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvVE9ETworKysgYi9kcml2ZXJzL2RtYS9UT0RPCkBAIC05LDYgKzksNSBAQAogCS0gbXhzLWRtYS5jCiAJLSBkd19kbWFjCiAJLSBpbnRlbF9taWRfZG1hCi0JLSBzdGVfZG1hNDAKIDQuIENoZWNrIG90aGVyIHN1YnN5c3RlbXMgZm9yIGRtYSBkcml2ZXJzIGFuZCBtZXJnZS9tb3ZlIHRvIGRtYWVuZ2luZQogNS4gUmVtb3ZlIGRtYV9zbGF2ZV9jb25maWcncyBkbWEgZGlyZWN0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jIGIvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jCmluZGV4IGU2ZDcyMjguLmJlMjFlM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYworKysgYi9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgpAQCAtMTU2LDE0ICsxNTcsMTAgQEAKICNkZWZpbmUgUEwwOFhfQk9VTkRBUllfU0hJRlQJCSgxMCkJLyogMUtCIDB4NDAwICovCiAjZGVmaW5lIFBMMDhYX0JPVU5EQVJZX1NJWkUJCSgxIDw8IFBMMDhYX0JPVU5EQVJZX1NISUZUKQogCi0vKiBNaW5pbXVtIHBlcmlvZCBiZXR3ZWVuIHdvcmsgcXVldWUgcnVucyAqLwotI2RlZmluZSBQTDA4WF9XUV9QRVJJT0RNSU4JMjAKLQogLyogU2l6ZSAoYnl0ZXMpIG9mIGVhY2ggTExJIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIG9uZSB0cmFuc2ZlciAqLwogIyBkZWZpbmUgUEwwOFhfTExJX1RTRlJfU0laRQkweDIwMDAKIAogLyogTWF4aW11bSB0aW1lcyB3ZSBjYWxsIGRtYV9wb29sX2FsbG9jIG9uIHRoaXMgcG9vbCB3aXRob3V0IGZyZWVpbmcgKi8KLSNkZWZpbmUgUEwwOFhfTUFYX0FMTE9DUwkweDQwCiAjZGVmaW5lIE1BWF9OVU1fVFNGUl9MTElTCShQTDA4WF9MTElfVFNGUl9TSVpFL3NpemVvZihzdHJ1Y3QgcGwwOHhfbGxpKSkKICNkZWZpbmUgUEwwOFhfQUxJR04JCTgKIApAQCAtNDk1LDEwICs0OTIsMTAgQEAKIAogc3RydWN0IHBsMDh4X2xsaV9idWlsZF9kYXRhIHsKIAlzdHJ1Y3QgcGwwOHhfdHhkICp0eGQ7Ci0Jc3RydWN0IHBsMDh4X2RyaXZlcl9kYXRhICpwbDA4eDsKIAlzdHJ1Y3QgcGwwOHhfYnVzX2RhdGEgc3JjYnVzOwogCXN0cnVjdCBwbDA4eF9idXNfZGF0YSBkc3RidXM7CiAJc2l6ZV90IHJlbWFpbmRlcjsKKwl1MzIgbGxpX2J1czsKIH07CiAKIC8qCkBAIC01NTEsOCArNTQ4LDcgQEAKIAlsbGlzX3ZhW251bV9sbGlzXS5zcmMgPSBiZC0+c3JjYnVzLmFkZHI7CiAJbGxpc192YVtudW1fbGxpc10uZHN0ID0gYmQtPmRzdGJ1cy5hZGRyOwogCWxsaXNfdmFbbnVtX2xsaXNdLmxsaSA9IGxsaXNfYnVzICsgKG51bV9sbGlzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsMDh4X2xsaSk7Ci0JaWYgKGJkLT5wbDA4eC0+bGxpX2J1c2VzICYgUEwwOFhfQUhCMikKLQkJbGxpc192YVtudW1fbGxpc10ubGxpIHw9IFBMMDgwX0xMSV9MTV9BSEIyOworCWxsaXNfdmFbbnVtX2xsaXNdLmxsaSB8PSBiZC0+bGxpX2J1czsKIAogCWlmIChjY3RsICYgUEwwODBfQ09OVFJPTF9TUkNfSU5DUikKIAkJYmQtPnNyY2J1cy5hZGRyICs9IGxlbjsKQEAgLTYwNSw5ICs2MDEsOSBAQAogCWNjdGwgPSB0eGQtPmNjdGw7CiAKIAliZC50eGQgPSB0eGQ7Ci0JYmQucGwwOHggPSBwbDA4eDsKIAliZC5zcmNidXMuYWRkciA9IHR4ZC0+c3JjX2FkZHI7CiAJYmQuZHN0YnVzLmFkZHIgPSB0eGQtPmRzdF9hZGRyOworCWJkLmxsaV9idXMgPSAocGwwOHgtPmxsaV9idXNlcyAmIFBMMDhYX0FIQjIpID8gUEwwODBfTExJX0xNX0FIQjIgOiAwOwogCiAJLyogRmluZCBtYXhpbXVtIHdpZHRoIG9mIHRoZSBzb3VyY2UgYnVzICovCiAJYmQuc3JjYnVzLm1heHdpZHRoID0KQEAgLTYyMiwyNSArNjE4LDE1IEBACiAJLyogU2V0IHVwIHRoZSBidXMgd2lkdGhzIHRvIHRoZSBtYXhpbXVtICovCiAJYmQuc3JjYnVzLmJ1c3dpZHRoID0gYmQuc3JjYnVzLm1heHdpZHRoOwogCWJkLmRzdGJ1cy5idXN3aWR0aCA9IGJkLmRzdGJ1cy5tYXh3aWR0aDsKLQlkZXZfdmRiZygmcGwwOHgtPmFkZXYtPmRldiwKLQkJICIlcyBzb3VyY2UgYnVzIGlzICVkIGJ5dGVzIHdpZGUsIGRlc3QgYnVzIGlzICVkIGJ5dGVzIHdpZGVcbiIsCi0JCSBfX2Z1bmNfXywgYmQuc3JjYnVzLmJ1c3dpZHRoLCBiZC5kc3RidXMuYnVzd2lkdGgpOwotCiAKIAkvKgogCSAqIEJ5dGVzIHRyYW5zZmVycmVkID09IHRzaXplICogTUlOKGJ1c3dpZHRocyksIG5vdCBtYXgoYnVzd2lkdGhzKQogCSAqLwogCW1heF9ieXRlc19wZXJfbGxpID0gbWluKGJkLnNyY2J1cy5idXN3aWR0aCwgYmQuZHN0YnVzLmJ1c3dpZHRoKSAqCiAJCVBMMDgwX0NPTlRST0xfVFJBTlNGRVJfU0laRV9NQVNLOwotCWRldl92ZGJnKCZwbDA4eC0+YWRldi0+ZGV2LAotCQkgIiVzIG1heCBieXRlcyBwZXIgbGxpID0gJXp1XG4iLAotCQkgX19mdW5jX18sIG1heF9ieXRlc19wZXJfbGxpKTsKIAogCS8qIFdlIG5lZWQgdG8gY291bnQgdGhpcyBkb3duIHRvIHplcm8gKi8KIAliZC5yZW1haW5kZXIgPSB0eGQtPmxlbjsKLQlkZXZfdmRiZygmcGwwOHgtPmFkZXYtPmRldiwKLQkJICIlcyByZW1haW5kZXIgPSAlenVcbiIsCi0JCSBfX2Z1bmNfXywgYmQucmVtYWluZGVyKTsKIAogCS8qCiAJICogQ2hvb3NlIGJ1cyB0byBhbGlnbiB0bwpAQCAtNjQ5LDYgKzYzNSwxNiBAQAogCSAqLwogCXBsMDh4X2Nob29zZV9tYXN0ZXJfYnVzKCZiZCwgJm1idXMsICZzYnVzLCBjY3RsKTsKIAorCWRldl92ZGJnKCZwbDA4eC0+YWRldi0+ZGV2LCAic3JjPTB4JTA4eCVzLyV1IGRzdD0weCUwOHglcy8ldSBsZW49JXp1IGxsaW1heD0lenVcbiIsCisJCSBiZC5zcmNidXMuYWRkciwgY2N0bCAmIFBMMDgwX0NPTlRST0xfU1JDX0lOQ1IgPyAiKyIgOiAiIiwKKwkJIGJkLnNyY2J1cy5idXN3aWR0aCwKKwkJIGJkLmRzdGJ1cy5hZGRyLCBjY3RsICYgUEwwODBfQ09OVFJPTF9EU1RfSU5DUiA/ICIrIiA6ICIiLAorCQkgYmQuZHN0YnVzLmJ1c3dpZHRoLAorCQkgYmQucmVtYWluZGVyLCBtYXhfYnl0ZXNfcGVyX2xsaSk7CisJZGV2X3ZkYmcoJnBsMDh4LT5hZGV2LT5kZXYsICJtYnVzPSVzIHNidXM9JXNcbiIsCisJCSBtYnVzID09ICZiZC5zcmNidXMgPyAic3JjIiA6ICJkc3QiLAorCQkgc2J1cyA9PSAmYmQuc3JjYnVzID8gInNyYyIgOiAiZHN0Iik7CisKIAlpZiAodHhkLT5sZW4gPCBtYnVzLT5idXN3aWR0aCkgewogCQkvKiBMZXNzIHRoYW4gYSBidXMgd2lkdGggYXZhaWxhYmxlIC0gc2VuZCBhcyBzaW5nbGUgYnl0ZXMgKi8KIAkJd2hpbGUgKGJkLnJlbWFpbmRlcikgewpAQCAtODQwLDE1ICs4MzYsMTQgQEAKIAl7CiAJCWludCBpOwogCisJCWRldl92ZGJnKCZwbDA4eC0+YWRldi0+ZGV2LAorCQkJICIlLTNzICUtOXMgICUtMTBzICUtMTBzICUtMTBzICVzXG4iLAorCQkJICJsbGkiLCAiIiwgImNzcmMiLCAiY2RzdCIsICJjbGxpIiwgImNjdGwiKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bV9sbGlzOyBpKyspIHsKIAkJCWRldl92ZGJnKCZwbDA4eC0+YWRldi0+ZGV2LAotCQkJCSAibGxpICVkIEAlcDogY3NyYz0weCUwOHgsIGNkc3Q9MHglMDh4LCBjY3RsPTB4JTA4eCwgY2xsaT0weCUwOHhcbiIsCi0JCQkJIGksCi0JCQkJICZsbGlzX3ZhW2ldLAotCQkJCSBsbGlzX3ZhW2ldLnNyYywKLQkJCQkgbGxpc192YVtpXS5kc3QsCi0JCQkJIGxsaXNfdmFbaV0uY2N0bCwKLQkJCQkgbGxpc192YVtpXS5sbGkKKwkJCQkgIiUzZCBAJXA6IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eFxuIiwKKwkJCQkgaSwgJmxsaXNfdmFbaV0sIGxsaXNfdmFbaV0uc3JjLAorCQkJCSBsbGlzX3ZhW2ldLmRzdCwgbGxpc192YVtpXS5sbGksIGxsaXNfdmFbaV0uY2N0bAogCQkJCSk7CiAJCX0KIAl9CkBAIC0xMDU0LDY0ICsxMDQ5LDEwNSBAQAogCiAvKiBQcmltZUNlbGwgRE1BIGV4dGVuc2lvbiAqLwogc3RydWN0IGJ1cnN0X3RhYmxlIHsKLQlpbnQgYnVyc3R3b3JkczsKKwl1MzIgYnVyc3R3b3JkczsKIAl1MzIgcmVnOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBidXJzdF90YWJsZSBidXJzdF9zaXplc1tdID0gewogCXsKIAkJLmJ1cnN0d29yZHMgPSAyNTYsCi0JCS5yZWcgPSAoUEwwODBfQlNJWkVfMjU2IDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzI1NiA8PCBQTDA4MF9DT05UUk9MX0RCX1NJWkVfU0hJRlQpLAorCQkucmVnID0gUEwwODBfQlNJWkVfMjU2LAogCX0sCiAJewogCQkuYnVyc3R3b3JkcyA9IDEyOCwKLQkJLnJlZyA9IChQTDA4MF9CU0laRV8xMjggPDwgUEwwODBfQ09OVFJPTF9TQl9TSVpFX1NISUZUKSB8Ci0JCQkoUEwwODBfQlNJWkVfMTI4IDw8IFBMMDgwX0NPTlRST0xfREJfU0laRV9TSElGVCksCisJCS5yZWcgPSBQTDA4MF9CU0laRV8xMjgsCiAJfSwKIAl7CiAJCS5idXJzdHdvcmRzID0gNjQsCi0JCS5yZWcgPSAoUEwwODBfQlNJWkVfNjQgPDwgUEwwODBfQ09OVFJPTF9TQl9TSVpFX1NISUZUKSB8Ci0JCQkoUEwwODBfQlNJWkVfNjQgPDwgUEwwODBfQ09OVFJPTF9EQl9TSVpFX1NISUZUKSwKKwkJLnJlZyA9IFBMMDgwX0JTSVpFXzY0LAogCX0sCiAJewogCQkuYnVyc3R3b3JkcyA9IDMyLAotCQkucmVnID0gKFBMMDgwX0JTSVpFXzMyIDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzMyIDw8IFBMMDgwX0NPTlRST0xfREJfU0laRV9TSElGVCksCisJCS5yZWcgPSBQTDA4MF9CU0laRV8zMiwKIAl9LAogCXsKIAkJLmJ1cnN0d29yZHMgPSAxNiwKLQkJLnJlZyA9IChQTDA4MF9CU0laRV8xNiA8PCBQTDA4MF9DT05UUk9MX1NCX1NJWkVfU0hJRlQpIHwKLQkJCShQTDA4MF9CU0laRV8xNiA8PCBQTDA4MF9DT05UUk9MX0RCX1NJWkVfU0hJRlQpLAorCQkucmVnID0gUEwwODBfQlNJWkVfMTYsCiAJfSwKIAl7CiAJCS5idXJzdHdvcmRzID0gOCwKLQkJLnJlZyA9IChQTDA4MF9CU0laRV84IDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzggPDwgUEwwODBfQ09OVFJPTF9EQl9TSVpFX1NISUZUKSwKKwkJLnJlZyA9IFBMMDgwX0JTSVpFXzgsCiAJfSwKIAl7CiAJCS5idXJzdHdvcmRzID0gNCwKLQkJLnJlZyA9IChQTDA4MF9CU0laRV80IDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzQgPDwgUEwwODBfQ09OVFJPTF9EQl9TSVpFX1NISUZUKSwKKwkJLnJlZyA9IFBMMDgwX0JTSVpFXzQsCiAJfSwKIAl7Ci0JCS5idXJzdHdvcmRzID0gMSwKLQkJLnJlZyA9IChQTDA4MF9CU0laRV8xIDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzEgPDwgUEwwODBfQ09OVFJPTF9EQl9TSVpFX1NISUZUKSwKKwkJLmJ1cnN0d29yZHMgPSAwLAorCQkucmVnID0gUEwwODBfQlNJWkVfMSwKIAl9LAogfTsKIAorLyoKKyAqIEdpdmVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSBidXMgbWFza3MsIHNlbGVjdCB3aGljaAorICogd2lsbCBiZSByb3V0ZWQgdG8gZWFjaCBwb3J0LiAgV2UgdHJ5IHRvIGhhdmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgorICogb24gc2VwYXJhdGUgcG9ydHMsIGJ1dCBhbHdheXMgcmVzcGVjdCB0aGUgYWxsb3dhYmxlIHNldHRpbmdzLgorICovCitzdGF0aWMgdTMyIHBsMDh4X3NlbGVjdF9idXModTggc3JjLCB1OCBkc3QpCit7CisJdTMyIGNjdGwgPSAwOworCisJaWYgKCEoZHN0ICYgUEwwOFhfQUhCMSkgfHwgKChkc3QgJiBQTDA4WF9BSEIyKSAmJiAoc3JjICYgUEwwOFhfQUhCMSkpKQorCQljY3RsIHw9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7CisJaWYgKCEoc3JjICYgUEwwOFhfQUhCMSkgfHwgKChzcmMgJiBQTDA4WF9BSEIyKSAmJiAhKGRzdCAmIFBMMDhYX0FIQjIpKSkKKwkJY2N0bCB8PSBQTDA4MF9DT05UUk9MX1NSQ19BSEIyOworCisJcmV0dXJuIGNjdGw7Cit9CisKK3N0YXRpYyB1MzIgcGwwOHhfY2N0bCh1MzIgY2N0bCkKK3sKKwljY3RsICY9IH4oUEwwODBfQ09OVFJPTF9TUkNfQUhCMiB8IFBMMDgwX0NPTlRST0xfRFNUX0FIQjIgfAorCQkgIFBMMDgwX0NPTlRST0xfU1JDX0lOQ1IgfCBQTDA4MF9DT05UUk9MX0RTVF9JTkNSIHwKKwkJICBQTDA4MF9DT05UUk9MX1BST1RfTUFTSyk7CisKKwkvKiBBY2Nlc3MgdGhlIGNlbGwgaW4gcHJpdmlsZWdlZCBtb2RlLCBub24tYnVmZmVyYWJsZSwgbm9uLWNhY2hlYWJsZSAqLworCXJldHVybiBjY3RsIHwgUEwwODBfQ09OVFJPTF9QUk9UX1NZUzsKK30KKworc3RhdGljIHUzMiBwbDA4eF93aWR0aChlbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCB3aWR0aCkKK3sKKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOgorCQlyZXR1cm4gUEwwODBfV0lEVEhfOEJJVDsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQlyZXR1cm4gUEwwODBfV0lEVEhfMTZCSVQ7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKKwkJcmV0dXJuIFBMMDgwX1dJRFRIXzMyQklUOworCWRlZmF1bHQ6CisJCXJldHVybiB+MDsKKwl9Cit9CisKK3N0YXRpYyB1MzIgcGwwOHhfYnVyc3QodTMyIG1heGJ1cnN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVyc3Rfc2l6ZXMpOyBpKyspCisJCWlmIChidXJzdF9zaXplc1tpXS5idXJzdHdvcmRzIDw9IG1heGJ1cnN0KQorCQkJYnJlYWs7CisKKwlyZXR1cm4gYnVyc3Rfc2l6ZXNbaV0ucmVnOworfQorCiBzdGF0aWMgaW50IGRtYV9zZXRfcnVudGltZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCQkJCSAgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKmNvbmZpZykKIHsKIAlzdHJ1Y3QgcGwwOHhfZG1hX2NoYW4gKnBsY2hhbiA9IHRvX3BsMDh4X2NoYW4oY2hhbik7CiAJc3RydWN0IHBsMDh4X2RyaXZlcl9kYXRhICpwbDA4eCA9IHBsY2hhbi0+aG9zdDsKLQlzdHJ1Y3QgcGwwOHhfY2hhbm5lbF9kYXRhICpjZCA9IHBsY2hhbi0+Y2Q7CiAJZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aDsKLQlkbWFfYWRkcl90IGFkZHI7Ci0JdTMyIG1heGJ1cnN0OworCXUzMiB3aWR0aCwgYnVyc3QsIG1heGJ1cnN0OwogCXUzMiBjY3RsID0gMDsKLQlpbnQgaTsKIAogCWlmICghcGxjaGFuLT5zbGF2ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTE5LDExICsxMTU1LDkgQEAKIAkvKiBUcmFuc2ZlciBkaXJlY3Rpb24gKi8KIAlwbGNoYW4tPnJ1bnRpbWVfZGlyZWN0aW9uID0gY29uZmlnLT5kaXJlY3Rpb247CiAJaWYgKGNvbmZpZy0+ZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKLQkJYWRkciA9IGNvbmZpZy0+ZHN0X2FkZHI7CiAJCWFkZHJfd2lkdGggPSBjb25maWctPmRzdF9hZGRyX3dpZHRoOwogCQltYXhidXJzdCA9IGNvbmZpZy0+ZHN0X21heGJ1cnN0OwogCX0gZWxzZSBpZiAoY29uZmlnLT5kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCWFkZHIgPSBjb25maWctPnNyY19hZGRyOwogCQlhZGRyX3dpZHRoID0gY29uZmlnLT5zcmNfYWRkcl93aWR0aDsKIAkJbWF4YnVyc3QgPSBjb25maWctPnNyY19tYXhidXJzdDsKIAl9IGVsc2UgewpAQCAtMTEzMiw0NiArMTE2Niw0MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2ggKGFkZHJfd2lkdGgpIHsKLQljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEU6Ci0JCWNjdGwgfD0gKFBMMDgwX1dJRFRIXzhCSVQgPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQpIHwKLQkJCShQTDA4MF9XSURUSF84QklUIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUKTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKLQkJY2N0bCB8PSAoUEwwODBfV0lEVEhfMTZCSVQgPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQpIHwKLQkJCShQTDA4MF9XSURUSF8xNkJJVCA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVCk7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6Ci0JCWNjdGwgfD0gKFBMMDgwX1dJRFRIXzMyQklUIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUKSB8Ci0JCQkoUEwwODBfV0lEVEhfMzJCSVQgPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQpOwotCQlicmVhazsKLQlkZWZhdWx0OgorCXdpZHRoID0gcGwwOHhfd2lkdGgoYWRkcl93aWR0aCk7CisJaWYgKHdpZHRoID09IH4wKSB7CiAJCWRldl9lcnIoJnBsMDh4LT5hZGV2LT5kZXYsCiAJCQkiYmFkIHJ1bnRpbWVfY29uZmlnOiBhbGllbiBhZGRyZXNzIHdpZHRoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJY2N0bCB8PSB3aWR0aCA8PCBQTDA4MF9DT05UUk9MX1NXSURUSF9TSElGVDsKKwljY3RsIHw9IHdpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOworCiAJLyoKLQkgKiBOb3cgZGVjaWRlIG9uIGEgbWF4YnVyc3Q6CiAJICogSWYgdGhpcyBjaGFubmVsIHdpbGwgb25seSByZXF1ZXN0IHNpbmdsZSB0cmFuc2ZlcnMsIHNldCB0aGlzCiAJICogZG93biB0byBPTkUgZWxlbWVudC4gIEFsc28gc2VsZWN0IG9uZSBlbGVtZW50IGlmIG5vIG1heGJ1cnN0CiAJICogaXMgc3BlY2lmaWVkLgogCSAqLwotCWlmIChwbGNoYW4tPmNkLT5zaW5nbGUgfHwgbWF4YnVyc3QgPT0gMCkgewotCQljY3RsIHw9IChQTDA4MF9CU0laRV8xIDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVCkgfAotCQkJKFBMMDgwX0JTSVpFXzEgPDwgUEwwODBfQ09OVFJPTF9EQl9TSVpFX1NISUZUKTsKKwlpZiAocGxjaGFuLT5jZC0+c2luZ2xlKQorCQltYXhidXJzdCA9IDE7CisKKwlidXJzdCA9IHBsMDh4X2J1cnN0KG1heGJ1cnN0KTsKKwljY3RsIHw9IGJ1cnN0IDw8IFBMMDgwX0NPTlRST0xfU0JfU0laRV9TSElGVDsKKwljY3RsIHw9IGJ1cnN0IDw8IFBMMDgwX0NPTlRST0xfREJfU0laRV9TSElGVDsKKworCWlmIChwbGNoYW4tPnJ1bnRpbWVfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgeworCQlwbGNoYW4tPnNyY19hZGRyID0gY29uZmlnLT5zcmNfYWRkcjsKKwkJcGxjaGFuLT5zcmNfY2N0bCA9IHBsMDh4X2NjdGwoY2N0bCkgfCBQTDA4MF9DT05UUk9MX0RTVF9JTkNSIHwKKwkJCXBsMDh4X3NlbGVjdF9idXMocGxjaGFuLT5jZC0+cGVyaXBoX2J1c2VzLAorCQkJCQkgcGwwOHgtPm1lbV9idXNlcyk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVyc3Rfc2l6ZXMpOyBpKyspCi0JCQlpZiAoYnVyc3Rfc2l6ZXNbaV0uYnVyc3R3b3JkcyA8PSBtYXhidXJzdCkKLQkJCQlicmVhazsKLQkJY2N0bCB8PSBidXJzdF9zaXplc1tpXS5yZWc7CisJCXBsY2hhbi0+ZHN0X2FkZHIgPSBjb25maWctPmRzdF9hZGRyOworCQlwbGNoYW4tPmRzdF9jY3RsID0gcGwwOHhfY2N0bChjY3RsKSB8IFBMMDgwX0NPTlRST0xfU1JDX0lOQ1IgfAorCQkJcGwwOHhfc2VsZWN0X2J1cyhwbDA4eC0+bWVtX2J1c2VzLAorCQkJCQkgcGxjaGFuLT5jZC0+cGVyaXBoX2J1c2VzKTsKIAl9CiAKLQlwbGNoYW4tPnJ1bnRpbWVfYWRkciA9IGFkZHI7Ci0KLQkvKiBNb2RpZnkgdGhlIGRlZmF1bHQgY2hhbm5lbCBkYXRhIHRvIGZpdCBQcmltZUNlbGwgcmVxdWVzdCAqLwotCWNkLT5jY3RsID0gY2N0bDsKLQogCWRldl9kYmcoJnBsMDh4LT5hZGV2LT5kZXYsCiAJCSJjb25maWd1cmVkIGNoYW5uZWwgJXMgKCVzKSBmb3IgJXMsIGRhdGEgd2lkdGggJWQsICIKIAkJIm1heGJ1cnN0ICVkIHdvcmRzLCBMRSwgQ0NUTD0weCUwOHhcbiIsCkBAIC0xMjcwLDIzICsxMjk4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEdpdmVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGF2YWlsYWJsZSBidXMgbWFza3MsIHNlbGVjdCB3aGljaAotICogd2lsbCBiZSByb3V0ZWQgdG8gZWFjaCBwb3J0LiAgV2UgdHJ5IHRvIGhhdmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgotICogb24gc2VwYXJhdGUgcG9ydHMsIGJ1dCBhbHdheXMgcmVzcGVjdCB0aGUgYWxsb3dhYmxlIHNldHRpbmdzLgotICovCi1zdGF0aWMgdTMyIHBsMDh4X3NlbGVjdF9idXMoc3RydWN0IHBsMDh4X2RyaXZlcl9kYXRhICpwbDA4eCwgdTggc3JjLCB1OCBkc3QpCi17Ci0JdTMyIGNjdGwgPSAwOwotCi0JaWYgKCEoZHN0ICYgUEwwOFhfQUhCMSkgfHwgKChkc3QgJiBQTDA4WF9BSEIyKSAmJiAoc3JjICYgUEwwOFhfQUhCMSkpKQotCQljY3RsIHw9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7Ci0JaWYgKCEoc3JjICYgUEwwOFhfQUhCMSkgfHwgKChzcmMgJiBQTDA4WF9BSEIyKSAmJiAhKGRzdCAmIFBMMDhYX0FIQjIpKSkKLQkJY2N0bCB8PSBQTDA4MF9DT05UUk9MX1NSQ19BSEIyOwotCi0JcmV0dXJuIGNjdGw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGwwOHhfdHhkICpwbDA4eF9nZXRfdHhkKHN0cnVjdCBwbDA4eF9kbWFfY2hhbiAqcGxjaGFuLAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0xMzM4LDggKzEzNDksOCBAQAogCXR4ZC0+Y2N0bCB8PSBQTDA4MF9DT05UUk9MX1NSQ19JTkNSIHwgUEwwODBfQ09OVFJPTF9EU1RfSU5DUjsKIAogCWlmIChwbDA4eC0+dmQtPmR1YWxtYXN0ZXIpCi0JCXR4ZC0+Y2N0bCB8PSBwbDA4eF9zZWxlY3RfYnVzKHBsMDh4LAotCQkJCQlwbDA4eC0+bWVtX2J1c2VzLCBwbDA4eC0+bWVtX2J1c2VzKTsKKwkJdHhkLT5jY3RsIHw9IHBsMDh4X3NlbGVjdF9idXMocGwwOHgtPm1lbV9idXNlcywKKwkJCQkJICAgICAgcGwwOHgtPm1lbV9idXNlcyk7CiAKIAlyZXQgPSBwbDA4eF9wcmVwX2NoYW5uZWxfcmVzb3VyY2VzKHBsY2hhbiwgdHhkKTsKIAlpZiAocmV0KQpAQCAtMTM1Niw3ICsxMzY3LDYgQEAKIAlzdHJ1Y3QgcGwwOHhfZG1hX2NoYW4gKnBsY2hhbiA9IHRvX3BsMDh4X2NoYW4oY2hhbik7CiAJc3RydWN0IHBsMDh4X2RyaXZlcl9kYXRhICpwbDA4eCA9IHBsY2hhbi0+aG9zdDsKIAlzdHJ1Y3QgcGwwOHhfdHhkICp0eGQ7Ci0JdTggc3JjX2J1c2VzLCBkc3RfYnVzZXM7CiAJaW50IHJldDsKIAogCS8qCkBAIC0xMzkwLDQyICsxNDAwLDIyIEBACiAJdHhkLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CiAJdHhkLT5sZW4gPSBzZ2wtPmxlbmd0aDsKIAotCXR4ZC0+Y2N0bCA9IHBsY2hhbi0+Y2QtPmNjdGwgJgotCQkJfihQTDA4MF9DT05UUk9MX1NSQ19BSEIyIHwgUEwwODBfQ09OVFJPTF9EU1RfQUhCMiB8Ci0JCQkgIFBMMDgwX0NPTlRST0xfU1JDX0lOQ1IgfCBQTDA4MF9DT05UUk9MX0RTVF9JTkNSIHwKLQkJCSAgUEwwODBfQ09OVFJPTF9QUk9UX01BU0spOwotCi0JLyogQWNjZXNzIHRoZSBjZWxsIGluIHByaXZpbGVnZWQgbW9kZSwgbm9uLWJ1ZmZlcmFibGUsIG5vbi1jYWNoZWFibGUgKi8KLQl0eGQtPmNjdGwgfD0gUEwwODBfQ09OVFJPTF9QUk9UX1NZUzsKLQogCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgewogCQl0eGQtPmNjZmcgfD0gUEwwODBfRkxPV19NRU0yUEVSIDw8IFBMMDgwX0NPTkZJR19GTE9XX0NPTlRST0xfU0hJRlQ7Ci0JCXR4ZC0+Y2N0bCB8PSBQTDA4MF9DT05UUk9MX1NSQ19JTkNSOworCQl0eGQtPmNjdGwgPSBwbGNoYW4tPmRzdF9jY3RsOwogCQl0eGQtPnNyY19hZGRyID0gc2dsLT5kbWFfYWRkcmVzczsKLQkJaWYgKHBsY2hhbi0+cnVudGltZV9hZGRyKQotCQkJdHhkLT5kc3RfYWRkciA9IHBsY2hhbi0+cnVudGltZV9hZGRyOwotCQllbHNlCi0JCQl0eGQtPmRzdF9hZGRyID0gcGxjaGFuLT5jZC0+YWRkcjsKLQkJc3JjX2J1c2VzID0gcGwwOHgtPm1lbV9idXNlczsKLQkJZHN0X2J1c2VzID0gcGxjaGFuLT5jZC0+cGVyaXBoX2J1c2VzOworCQl0eGQtPmRzdF9hZGRyID0gcGxjaGFuLT5kc3RfYWRkcjsKIAl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKIAkJdHhkLT5jY2ZnIHw9IFBMMDgwX0ZMT1dfUEVSMk1FTSA8PCBQTDA4MF9DT05GSUdfRkxPV19DT05UUk9MX1NISUZUOwotCQl0eGQtPmNjdGwgfD0gUEwwODBfQ09OVFJPTF9EU1RfSU5DUjsKLQkJaWYgKHBsY2hhbi0+cnVudGltZV9hZGRyKQotCQkJdHhkLT5zcmNfYWRkciA9IHBsY2hhbi0+cnVudGltZV9hZGRyOwotCQllbHNlCi0JCQl0eGQtPnNyY19hZGRyID0gcGxjaGFuLT5jZC0+YWRkcjsKKwkJdHhkLT5jY3RsID0gcGxjaGFuLT5zcmNfY2N0bDsKKwkJdHhkLT5zcmNfYWRkciA9IHBsY2hhbi0+c3JjX2FkZHI7CiAJCXR4ZC0+ZHN0X2FkZHIgPSBzZ2wtPmRtYV9hZGRyZXNzOwotCQlzcmNfYnVzZXMgPSBwbGNoYW4tPmNkLT5wZXJpcGhfYnVzZXM7Ci0JCWRzdF9idXNlcyA9IHBsMDh4LT5tZW1fYnVzZXM7CiAJfSBlbHNlIHsKIAkJZGV2X2VycigmcGwwOHgtPmFkZXYtPmRldiwKIAkJCSIlcyBkaXJlY3Rpb24gdW5zdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JdHhkLT5jY3RsIHw9IHBsMDh4X3NlbGVjdF9idXMocGwwOHgsIHNyY19idXNlcywgZHN0X2J1c2VzKTsKLQogCXJldCA9IHBsMDh4X3ByZXBfY2hhbm5lbF9yZXNvdXJjZXMocGxjaGFuLCB0eGQpOwogCWlmIChyZXQpCiAJCXJldHVybiBOVUxMOwpAQCAtMTY3Niw2ICsxNjY2LDIwIEBACiAJcmV0dXJuIG1hc2sgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCitzdGF0aWMgdm9pZCBwbDA4eF9kbWFfc2xhdmVfaW5pdChzdHJ1Y3QgcGwwOHhfZG1hX2NoYW4gKmNoYW4pCit7CisJdTMyIGNjdGwgPSBwbDA4eF9jY3RsKGNoYW4tPmNkLT5jY3RsKTsKKworCWNoYW4tPnNsYXZlID0gdHJ1ZTsKKwljaGFuLT5uYW1lID0gY2hhbi0+Y2QtPmJ1c19pZDsKKwljaGFuLT5zcmNfYWRkciA9IGNoYW4tPmNkLT5hZGRyOworCWNoYW4tPmRzdF9hZGRyID0gY2hhbi0+Y2QtPmFkZHI7CisJY2hhbi0+c3JjX2NjdGwgPSBjY3RsIHwgUEwwODBfQ09OVFJPTF9EU1RfSU5DUiB8CisJCXBsMDh4X3NlbGVjdF9idXMoY2hhbi0+Y2QtPnBlcmlwaF9idXNlcywgY2hhbi0+aG9zdC0+bWVtX2J1c2VzKTsKKwljaGFuLT5kc3RfY2N0bCA9IGNjdGwgfCBQTDA4MF9DT05UUk9MX1NSQ19JTkNSIHwKKwkJcGwwOHhfc2VsZWN0X2J1cyhjaGFuLT5ob3N0LT5tZW1fYnVzZXMsIGNoYW4tPmNkLT5wZXJpcGhfYnVzZXMpOworfQorCiAvKgogICogSW5pdGlhbGlzZSB0aGUgRE1BQyBtZW1jcHkvc2xhdmUgY2hhbm5lbHMuCiAgKiBNYWtlIGEgbG9jYWwgd3JhcHBlciB0byBob2xkIHJlcXVpcmVkIGRhdGEKQEAgLTE3MDcsOSArMTcxMSw4IEBACiAJCWNoYW4tPnN0YXRlID0gUEwwOFhfQ0hBTl9JRExFOwogCiAJCWlmIChzbGF2ZSkgewotCQkJY2hhbi0+c2xhdmUgPSB0cnVlOwotCQkJY2hhbi0+bmFtZSA9IHBsMDh4LT5wZC0+c2xhdmVfY2hhbm5lbHNbaV0uYnVzX2lkOwogCQkJY2hhbi0+Y2QgPSAmcGwwOHgtPnBkLT5zbGF2ZV9jaGFubmVsc1tpXTsKKwkJCXBsMDh4X2RtYV9zbGF2ZV9pbml0KGNoYW4pOwogCQl9IGVsc2UgewogCQkJY2hhbi0+Y2QgPSAmcGwwOHgtPnBkLT5tZW1jcHlfY2hhbm5lbDsKIAkJCWNoYW4tPm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIm1lbWNweSVkIiwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwppbmRleCAzNjE0NGY4Li42YTQ4M2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAJYXRkbWEtPmRtYV9jb21tb24uY2FwX21hc2sgPSBwZGF0YS0+Y2FwX21hc2s7CiAJYXRkbWEtPmFsbF9jaGFuX21hc2sgPSAoMSA8PCBwZGF0YS0+bnJfY2hhbm5lbHMpIC0gMTsKIAotCXNpemUgPSBpby0+ZW5kIC0gaW8tPnN0YXJ0ICsgMTsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShpbyk7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW8tPnN0YXJ0LCBzaXplLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2tmcmVlOwpAQCAtMTM2Miw3ICsxMzYyLDcgQEAKIAlhdGRtYS0+cmVncyA9IE5VTEw7CiAKIAlpbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGlvLT5zdGFydCwgaW8tPmVuZCAtIGlvLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpby0+c3RhcnQsIHJlc291cmNlX3NpemUoaW8pKTsKIAogCWtmcmVlKGF0ZG1hKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwppbmRleCBhOTJkOTVlLi40MjM0ZjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYworKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMTguYwpAQCAtNDEsNiArNDEsOCBAQAogCXN0cnVjdCBjb2g5MDEzMThfbGxpICpsbGk7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGhlYWRfY29uZmlnOworCXUzMiBoZWFkX2N0cmw7CiB9OwogCiBzdHJ1Y3QgY29oOTAxMzE4X2Jhc2UgewpAQCAtNjYxLDYgKzY2Myw5IEBACiAKIAkJY29oOTAxMzE4X2Rlc2Nfc3VibWl0KGNvaGMsIGNvaGQpOwogCisJCS8qIFByb2dyYW0gdGhlIHRyYW5zYWN0aW9uIGhlYWQgKi8KKwkJY29oOTAxMzE4X3NldF9jb25mKGNvaGMsIGNvaGQtPmhlYWRfY29uZmlnKTsKKwkJY29oOTAxMzE4X3NldF9jdHJsKGNvaGMsIGNvaGQtPmhlYWRfY3RybCk7CiAJCWNvaDkwMTMxOF9wcmVwX2xpbmtlZF9saXN0KGNvaGMsIGNvaGQtPmxsaSk7CiAKIAkJLyogc3RhcnQgZG1hIGpvYiBvbiB0aGlzIGNoYW5uZWwgKi8KQEAgLTEwOTEsOCArMTA5Niw2IEBACiAJfSBlbHNlCiAJCWdvdG8gZXJyX2RpcmVjdGlvbjsKIAotCWNvaDkwMTMxOF9zZXRfY29uZihjb2hjLCBjb25maWcpOwotCiAJLyogVGhlIGRtYSBvbmx5IHN1cHBvcnRzIHRyYW5zbWl0dGluZyBwYWNrYWdlcyB1cCB0bwogCSAqIE1BWF9ETUFfUEFDS0VUX1NJWkUuIENhbGN1bGF0ZSB0byB0b3RhbCBudW1iZXIgb2YKIAkgKiBkbWEgZWxlbXRzIHJlcXVpcmVkIHRvIHNlbmQgdGhlIGVudGlyZSBzZyBsaXN0CkBAIC0xMTI5LDE2ICsxMTMyLDE4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfbGxpX2ZpbGw7CiAKLQkvKgotCSAqIFNldCB0aGUgZGVmYXVsdCBjdHJsIGZvciB0aGUgY2hhbm5lbCB0byB0aGUgb25lIGZyb20gdGhlIGxsaSwKLQkgKiB0aGluZ3MgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gb2RkIGJ1ZmZlciBhbGlnbm1lbnQgZXRjLgotCSAqLwotCWNvaDkwMTMxOF9zZXRfY3RybChjb2hjLCBsbGktPmNvbnRyb2wpOwogCiAJQ09IX0RCRyhjb2g5MDEzMThfbGlzdF9wcmludChjb2hjLCBsbGkpKTsKIAogCS8qIFBpY2sgYSBkZXNjcmlwdG9yIHRvIGhhbmRsZSB0aGlzIHRyYW5zZmVyICovCiAJY29oZCA9IGNvaDkwMTMxOF9kZXNjX2dldChjb2hjKTsKKwljb2hkLT5oZWFkX2NvbmZpZyA9IGNvbmZpZzsKKwkvKgorCSAqIFNldCB0aGUgZGVmYXVsdCBoZWFkIGN0cmwgZm9yIHRoZSBjaGFubmVsIHRvIHRoZSBvbmUgZnJvbSB0aGUKKwkgKiBsbGksIHRoaW5ncyBtYXkgaGF2ZSBjaGFuZ2VkIGR1ZSB0byBvZGQgYnVmZmVyIGFsaWdubWVudAorCSAqIGV0Yy4KKwkgKi8KKwljb2hkLT5oZWFkX2N0cmwgPSBsbGktPmNvbnRyb2w7CiAJY29oZC0+ZGlyID0gZGlyZWN0aW9uOwogCWNvaGQtPmZsYWdzID0gZmxhZ3M7CiAJY29oZC0+ZGVzYy50eF9zdWJtaXQgPSBjb2g5MDEzMThfdHhfc3VibWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCA0ODY5NGMzLi5iNDg5NjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtNjIsOSArNjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogc3RhdGljIERFRklORV9NVVRFWChkbWFfbGlzdF9tdXRleCk7CitzdGF0aWMgREVGSU5FX0lEUihkbWFfaWRyKTsKIHN0YXRpYyBMSVNUX0hFQUQoZG1hX2RldmljZV9saXN0KTsKIHN0YXRpYyBsb25nIGRtYWVuZ2luZV9yZWZfY291bnQ7Ci1zdGF0aWMgc3RydWN0IGlkciBkbWFfaWRyOwogCiAvKiAtLS0gc3lzZnMgaW1wbGVtZW50YXRpb24gLS0tICovCiAKQEAgLTUxMCw4ICs1MTAsOCBAQAogCQkJCQkgZG1hX2NoYW5fbmFtZShjaGFuKSk7CiAJCQkJbGlzdF9kZWxfcmN1KCZkZXZpY2UtPmdsb2JhbF9ub2RlKTsKIAkJCX0gZWxzZSBpZiAoZXJyKQotCQkJCXByX2VycigiZG1hZW5naW5lOiBmYWlsZWQgdG8gZ2V0ICVzOiAoJWQpXG4iLAotCQkJCSAgICAgICBkbWFfY2hhbl9uYW1lKGNoYW4pLCBlcnIpOworCQkJCXByX2RlYnVnKCJkbWFlbmdpbmU6IGZhaWxlZCB0byBnZXQgJXM6ICglZClcbiIsCisJCQkJCSBkbWFfY2hhbl9uYW1lKGNoYW4pLCBlcnIpOwogCQkJZWxzZQogCQkJCWJyZWFrOwogCQkJaWYgKC0tZGV2aWNlLT5wcml2YXRlY250ID09IDApCkBAIC0xMDUwLDggKzEwNTAsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkbWFfYnVzX2luaXQodm9pZCkKIHsKLQlpZHJfaW5pdCgmZG1hX2lkcik7Ci0JbXV0ZXhfaW5pdCgmZG1hX2xpc3RfbXV0ZXgpOwogCXJldHVybiBjbGFzc19yZWdpc3RlcigmZG1hX2RldmNsYXNzKTsKIH0KIGFyY2hfaW5pdGNhbGwoZG1hX2J1c19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2VwOTN4eF9kbWEuYyBiL2RyaXZlcnMvZG1hL2VwOTN4eF9kbWEuYwppbmRleCAwNzY2YzFlLi41ZDdhNDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9lcDkzeHhfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZXA5M3h4X2RtYS5jCkBAIC05MDIsNyArOTAyLDcgQEAKICAqCiAgKiBSZXR1cm5zIGEgdmFsaWQgRE1BIGRlc2NyaXB0b3Igb3IgJU5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCi1zdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgorc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBlcDkzeHhfZG1hX3ByZXBfZG1hX21lbWNweShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9hZGRyX3QgZGVzdCwKIAkJCSAgIGRtYV9hZGRyX3Qgc3JjLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKaW5kZXggMWViNjBkZS4uN2JkN2U5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCkBAIC0xMzA1LDggKzEzMDUsMTAgQEAKIAkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAKIAlzZG1hLT5zY3JpcHRfYWRkcnMgPSBremFsbG9jKHNpemVvZigqc2RtYS0+c2NyaXB0X2FkZHJzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZG1hLT5zY3JpcHRfYWRkcnMpCisJaWYgKCFzZG1hLT5zY3JpcHRfYWRkcnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2M7CisJfQogCiAJaWYgKG9mX2lkKQogCQlwZGV2LT5pZF9lbnRyeSA9IG9mX2lkLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jIGIvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jCmluZGV4IGY2NTM1MTcuLjhhM2ZkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMKQEAgLTEzNTEsNyArMTM1MSw2IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJZGV2aWNlLT5zdGF0ZSA9IFNVU1BFTkRFRDsKLQlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXZpY2UpOwogCXBjaV9zYXZlX3N0YXRlKHBjaSk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CkBAIC0xMzgwLDcgKzEzNzksNiBAQAogCX0KIAlkZXZpY2UtPnN0YXRlID0gUlVOTklORzsKIAlpb3dyaXRlMzIoUkVHX0JJVDAsIGRldmljZS0+ZG1hX2Jhc2UgKyBETUFfQ0ZHKTsKLQlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXZpY2UpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYwppbmRleCBkODQ1ZGM0Li5mNTE5YzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKQEAgLTczLDEwICs3MywxMCBAQAogLyogcHJvdmlkZSBhIGxvb2t1cCB0YWJsZSBmb3Igc2V0dGluZyB0aGUgc291cmNlIGFkZHJlc3MgaW4gdGhlIGJhc2Ugb3IKICAqIGV4dGVuZGVkIGRlc2NyaXB0b3Igb2YgYW4geG9yIG9yIHBxIGRlc2NyaXB0b3IKICAqLwotc3RhdGljIGNvbnN0IHU4IHhvcl9pZHhfdG9fZGVzYyBfX3JlYWRfbW9zdGx5ID0gMHhkMDsKLXN0YXRpYyBjb25zdCB1OCB4b3JfaWR4X3RvX2ZpZWxkW10gX19yZWFkX21vc3RseSA9IHsgMSwgNCwgNSwgNiwgNywgMCwgMSwgMiB9Owotc3RhdGljIGNvbnN0IHU4IHBxX2lkeF90b19kZXNjIF9fcmVhZF9tb3N0bHkgPSAweGY4Owotc3RhdGljIGNvbnN0IHU4IHBxX2lkeF90b19maWVsZFtdIF9fcmVhZF9tb3N0bHkgPSB7IDEsIDQsIDUsIDAsIDEsIDIsIDQsIDUgfTsKK3N0YXRpYyBjb25zdCB1OCB4b3JfaWR4X3RvX2Rlc2MgPSAweGUwOworc3RhdGljIGNvbnN0IHU4IHhvcl9pZHhfdG9fZmllbGRbXSA9IHsgMSwgNCwgNSwgNiwgNywgMCwgMSwgMiB9Oworc3RhdGljIGNvbnN0IHU4IHBxX2lkeF90b19kZXNjID0gMHhmODsKK3N0YXRpYyBjb25zdCB1OCBwcV9pZHhfdG9fZmllbGRbXSA9IHsgMSwgNCwgNSwgMCwgMSwgMiwgNCwgNSB9OwogCiBzdGF0aWMgZG1hX2FkZHJfdCB4b3JfZ2V0X3NyYyhzdHJ1Y3QgaW9hdF9yYXdfZGVzY3JpcHRvciAqZGVzY3NbMl0sIGludCBpZHgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L3BjaS5jIGIvZHJpdmVycy9kbWEvaW9hdC9wY2kuYwppbmRleCBmYWIzN2QxLi41ZTNhNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L3BjaS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvcGNpLmMKQEAgLTcyLDYgKzcyLDE3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX0pTRjgpIH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX0pTRjkpIH0sCiAKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CMCkgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CMSkgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CMikgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CMykgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CNCkgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CNSkgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CNikgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CNykgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05COCkgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05COSkgfSwKKwogCXsgMCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpb2F0X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGZkN2QyYjMuLjY4MTU5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTE3MDYsMTYgKzE3MDYsMTQgQEAKIAkJaXB1X2RhdGEuaXJxX2ZuLCBpcHVfZGF0YS5pcnFfZXJyLCBpcHVfZGF0YS5pcnFfYmFzZSk7CiAKIAkvKiBSZW1hcCBJUFUgY29tbW9uIHJlZ2lzdGVycyAqLwotCWlwdV9kYXRhLnJlZ19pcHUgPSBpb3JlbWFwKG1lbV9pcHUtPnN0YXJ0LAotCQkJCSAgIG1lbV9pcHUtPmVuZCAtIG1lbV9pcHUtPnN0YXJ0ICsgMSk7CisJaXB1X2RhdGEucmVnX2lwdSA9IGlvcmVtYXAobWVtX2lwdS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX2lwdSkpOwogCWlmICghaXB1X2RhdGEucmVnX2lwdSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3JlbWFwX2lwdTsKIAl9CiAKIAkvKiBSZW1hcCBJbWFnZSBDb252ZXJ0ZXIgYW5kIEltYWdlIERNQSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWlwdV9kYXRhLnJlZ19pYyA9IGlvcmVtYXAobWVtX2ljLT5zdGFydCwKLQkJCQkgIG1lbV9pYy0+ZW5kIC0gbWVtX2ljLT5zdGFydCArIDEpOworCWlwdV9kYXRhLnJlZ19pYyA9IGlvcmVtYXAobWVtX2ljLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1faWMpKTsKIAlpZiAoIWlwdV9kYXRhLnJlZ19pYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3JlbWFwX2ljOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvbXZfeG9yLmMgYi9kcml2ZXJzL2RtYS9tdl94b3IuYwppbmRleCAwNmY5ZjI3Li45YTM1M2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9tdl94b3IuYworKysgYi9kcml2ZXJzL2RtYS9tdl94b3IuYwpAQCAtMTMwNCw3ICsxMzA0LDggQEAKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltc3AtPnhvcl9iYXNlID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJbXNwLT54b3JfYmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIW1zcC0+eG9yX2Jhc2UpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL214cy1kbWEuYyBiL2RyaXZlcnMvZG1hL214cy1kbWEuYwppbmRleCA4OGFhZDRmLi5iZTY0MWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9teHMtZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvbXhzLWRtYS5jCkBAIC0zMjcsMTAgKzMyNywxMiBAQAogCiAJbWVtc2V0KG14c19jaGFuLT5jY3csIDAsIFBBR0VfU0laRSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShteHNfY2hhbi0+Y2hhbl9pcnEsIG14c19kbWFfaW50X2hhbmRsZXIsCi0JCQkJMCwgIm14cy1kbWEiLCBteHNfZG1hKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9pcnE7CisJaWYgKG14c19jaGFuLT5jaGFuX2lycSAhPSBOT19JUlEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEobXhzX2NoYW4tPmNoYW5faXJxLCBteHNfZG1hX2ludF9oYW5kbGVyLAorCQkJCQkwLCAibXhzLWRtYSIsIG14c19kbWEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfaXJxOworCX0KIAogCXJldCA9IGNsa19lbmFibGUobXhzX2RtYS0+Y2xrKTsKIAlpZiAocmV0KQpAQCAtNTM1LDYgKzUzNyw3IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIERNQV9URVJNSU5BVEVfQUxMOgogCQlteHNfZG1hX2Rpc2FibGVfY2hhbihteHNfY2hhbik7CisJCW14c19kbWFfcmVzZXRfY2hhbihteHNfY2hhbik7CiAJCWJyZWFrOwogCWNhc2UgRE1BX1BBVVNFOgogCQlteHNfZG1hX3BhdXNlX2NoYW4obXhzX2NoYW4pOwpAQCAtNzA3LDYgKzcxMCw4IEBACiAJfSwgewogCQkubmFtZSA9ICJteHMtZG1hLWFwYngiLAogCQkuZHJpdmVyX2RhdGEgPSBNWFNfRE1BX0FQQlgsCisJfSwgeworCQkvKiBlbmQgb2YgbGlzdCAqLwogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3BjaF9kbWEuYyBiL2RyaXZlcnMvZG1hL3BjaF9kbWEuYwppbmRleCBmZjViMzhmLi4xYWM4ZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9wY2hfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvcGNoX2RtYS5jCkBAIC00NSw3ICs0NSw4IEBACiAjZGVmaW5lIERNQV9TVEFUVVNfTUFTS19CSVRTCQkweDMKICNkZWZpbmUgRE1BX1NUQVRVU19TSElGVF9CSVRTCQkxNgogI2RlZmluZSBETUFfU1RBVFVTX0lSUSh4KQkJKDB4MSA8PCAoeCkpCi0jZGVmaW5lIERNQV9TVEFUVVNfRVJSKHgpCQkoMHgxIDw8ICgoeCkgKyA4KSkKKyNkZWZpbmUgRE1BX1NUQVRVUzBfRVJSKHgpCQkoMHgxIDw8ICgoeCkgKyA4KSkKKyNkZWZpbmUgRE1BX1NUQVRVUzJfRVJSKHgpCQkoMHgxIDw8ICh4KSkKIAogI2RlZmluZSBETUFfREVTQ19XSURUSF9TSElGVF9CSVRTCTEyCiAjZGVmaW5lIERNQV9ERVNDX1dJRFRIXzFfQllURQkJKDB4MyA8PCBETUFfREVTQ19XSURUSF9TSElGVF9CSVRTKQpAQCAtNjEsNiArNjIsOSBAQAogCiAjZGVmaW5lIE1BWF9DSEFOX05SCQkJOAogCisjZGVmaW5lIERNQV9NQVNLX0NUTDBfTU9ERQkweDMzMzMzMzMzCisjZGVmaW5lIERNQV9NQVNLX0NUTDJfTU9ERQkweDAwMDAzMzMzCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9ucl9kZXNjX3Blcl9jaGFubmVsID0gNjQ7CiBtb2R1bGVfcGFyYW0oaW5pdF9ucl9kZXNjX3Blcl9jaGFubmVsLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5pdF9ucl9kZXNjX3Blcl9jaGFubmVsLApAQCAtMTMzLDYgKzEzNyw3IEBACiAjZGVmaW5lIFBDSF9ETUFfQ1RMMwkweDBDCiAjZGVmaW5lIFBDSF9ETUFfU1RTMAkweDEwCiAjZGVmaW5lIFBDSF9ETUFfU1RTMQkweDE0CisjZGVmaW5lIFBDSF9ETUFfU1RTMgkweDE4CiAKICNkZWZpbmUgZG1hX3JlYWRsKHBkLCBuYW1lKSBcCiAJcmVhZGwoKHBkKS0+bWVtYmFzZSArIFBDSF9ETUFfIyNuYW1lKQpAQCAtMTgzLDEzICsxODgsMTkgQEAKIHsKIAlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSB0b19wZChjaGFuLT5kZXZpY2UpOwogCXUzMiB2YWw7CisJaW50IHBvczsKKworCWlmIChjaGFuLT5jaGFuX2lkIDwgOCkKKwkJcG9zID0gY2hhbi0+Y2hhbl9pZDsKKwllbHNlCisJCXBvcyA9IGNoYW4tPmNoYW5faWQgKyA4OwogCiAJdmFsID0gZG1hX3JlYWRsKHBkLCBDVEwyKTsKIAogCWlmIChlbmFibGUpCi0JCXZhbCB8PSAweDEgPDwgY2hhbi0+Y2hhbl9pZDsKKwkJdmFsIHw9IDB4MSA8PCBwb3M7CiAJZWxzZQotCQl2YWwgJj0gfigweDEgPDwgY2hhbi0+Y2hhbl9pZCk7CisJCXZhbCAmPSB+KDB4MSA8PCBwb3MpOwogCiAJZG1hX3dyaXRlbChwZCwgQ1RMMiwgdmFsKTsKIApAQCAtMjAyLDEwICsyMTMsMTcgQEAKIAlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuID0gdG9fcGRfY2hhbihjaGFuKTsKIAlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSB0b19wZChjaGFuLT5kZXZpY2UpOwogCXUzMiB2YWw7CisJdTMyIG1hc2tfbW9kZTsKKwl1MzIgbWFza19jdGw7CiAKIAlpZiAoY2hhbi0+Y2hhbl9pZCA8IDgpIHsKIAkJdmFsID0gZG1hX3JlYWRsKHBkLCBDVEwwKTsKIAorCQltYXNrX21vZGUgPSBETUFfQ1RMMF9NT0RFX01BU0tfQklUUyA8PAorCQkJCQkoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaGFuLT5jaGFuX2lkKTsKKwkJbWFza19jdGwgPSBETUFfTUFTS19DVEwwX01PREUgJiB+KERNQV9DVEwwX01PREVfTUFTS19CSVRTIDw8CisJCQkJICAgICAgIChETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoYW4tPmNoYW5faWQpKTsKKwkJdmFsICY9IG1hc2tfbW9kZTsKIAkJaWYgKHBkX2NoYW4tPmRpciA9PSBETUFfVE9fREVWSUNFKQogCQkJdmFsIHw9IDB4MSA8PCAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaGFuLT5jaGFuX2lkICsKIAkJCQkgICAgICAgRE1BX0NUTDBfRElSX1NISUZUX0JJVFMpOwpAQCAtMjEzLDE4ICsyMzEsMjQgQEAKIAkJCXZhbCAmPSB+KDB4MSA8PCAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaGFuLT5jaGFuX2lkICsKIAkJCQkJIERNQV9DVEwwX0RJUl9TSElGVF9CSVRTKSk7CiAKKwkJdmFsIHw9IG1hc2tfY3RsOwogCQlkbWFfd3JpdGVsKHBkLCBDVEwwLCB2YWwpOwogCX0gZWxzZSB7CiAJCWludCBjaCA9IGNoYW4tPmNoYW5faWQgLSA4OyAvKiBjaDgtLT4wIGNoOS0tPjEgLi4uIGNoMTEtPjMgKi8KIAkJdmFsID0gZG1hX3JlYWRsKHBkLCBDVEwzKTsKIAorCQltYXNrX21vZGUgPSBETUFfQ1RMMF9NT0RFX01BU0tfQklUUyA8PAorCQkJCQkJKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2gpOworCQltYXNrX2N0bCA9IERNQV9NQVNLX0NUTDJfTU9ERSAmIH4oRE1BX0NUTDBfTU9ERV9NQVNLX0JJVFMgPDwKKwkJCQkJCSAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaCkpOworCQl2YWwgJj0gbWFza19tb2RlOwogCQlpZiAocGRfY2hhbi0+ZGlyID09IERNQV9UT19ERVZJQ0UpCiAJCQl2YWwgfD0gMHgxIDw8IChETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoICsKIAkJCQkgICAgICAgRE1BX0NUTDBfRElSX1NISUZUX0JJVFMpOwogCQllbHNlCiAJCQl2YWwgJj0gfigweDEgPDwgKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2ggKwogCQkJCQkgRE1BX0NUTDBfRElSX1NISUZUX0JJVFMpKTsKLQorCQl2YWwgfD0gbWFza19jdGw7CiAJCWRtYV93cml0ZWwocGQsIENUTDMsIHZhbCk7CiAJfQogCkBAIC0yMzYsMzMgKzI2MCwzNyBAQAogewogCXN0cnVjdCBwY2hfZG1hICpwZCA9IHRvX3BkKGNoYW4tPmRldmljZSk7CiAJdTMyIHZhbDsKKwl1MzIgbWFza19jdGw7CisJdTMyIG1hc2tfZGlyOwogCiAJaWYgKGNoYW4tPmNoYW5faWQgPCA4KSB7CisJCW1hc2tfY3RsID0gRE1BX01BU0tfQ1RMMF9NT0RFICYgfihETUFfQ1RMMF9NT0RFX01BU0tfQklUUyA8PAorCQkJICAgKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2hhbi0+Y2hhbl9pZCkpOworCQltYXNrX2RpciA9IDEgPDwgKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2hhbi0+Y2hhbl9pZCArXAorCQkJCSBETUFfQ1RMMF9ESVJfU0hJRlRfQklUUyk7CiAJCXZhbCA9IGRtYV9yZWFkbChwZCwgQ1RMMCk7Ci0KLQkJdmFsICY9IH4oRE1BX0NUTDBfTU9ERV9NQVNLX0JJVFMgPDwKLQkJCShETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoYW4tPmNoYW5faWQpKTsKKwkJdmFsICY9IG1hc2tfZGlyOwogCQl2YWwgfD0gbW9kZSA8PCAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaGFuLT5jaGFuX2lkKTsKLQorCQl2YWwgfD0gbWFza19jdGw7CiAJCWRtYV93cml0ZWwocGQsIENUTDAsIHZhbCk7CiAJfSBlbHNlIHsKIAkJaW50IGNoID0gY2hhbi0+Y2hhbl9pZCAtIDg7IC8qIGNoOC0tPjAgY2g5LS0+MSAuLi4gY2gxMS0+MyAqLwotCisJCW1hc2tfY3RsID0gRE1BX01BU0tfQ1RMMl9NT0RFICYgfihETUFfQ1RMMF9NT0RFX01BU0tfQklUUyA8PAorCQkJCQkJIChETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoKSk7CisJCW1hc2tfZGlyID0gMSA8PCAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaCArXAorCQkJCSBETUFfQ1RMMF9ESVJfU0hJRlRfQklUUyk7CiAJCXZhbCA9IGRtYV9yZWFkbChwZCwgQ1RMMyk7Ci0KLQkJdmFsICY9IH4oRE1BX0NUTDBfTU9ERV9NQVNLX0JJVFMgPDwKLQkJCShETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoKSk7CisJCXZhbCAmPSBtYXNrX2RpcjsKIAkJdmFsIHw9IG1vZGUgPDwgKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2gpOwotCisJCXZhbCB8PSBtYXNrX2N0bDsKIAkJZG1hX3dyaXRlbChwZCwgQ1RMMywgdmFsKTsKLQogCX0KIAogCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICJwZGNfc2V0X21vZGU6IGNoYW4gJWQgLT4gJXhcbiIsCiAJCWNoYW4tPmNoYW5faWQsIHZhbCk7CiB9CiAKLXN0YXRpYyB1MzIgcGRjX2dldF9zdGF0dXMoc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbikKK3N0YXRpYyB1MzIgcGRjX2dldF9zdGF0dXMwKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCiB7CiAJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQocGRfY2hhbi0+Y2hhbi5kZXZpY2UpOwogCXUzMiB2YWw7CkBAIC0yNzIsOSArMzAwLDI3IEBACiAJCQlETUFfU1RBVFVTX0JJVFNfUEVSX0NIICogcGRfY2hhbi0+Y2hhbi5jaGFuX2lkKSk7CiB9CiAKK3N0YXRpYyB1MzIgcGRjX2dldF9zdGF0dXMyKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQocGRfY2hhbi0+Y2hhbi5kZXZpY2UpOworCXUzMiB2YWw7CisKKwl2YWwgPSBkbWFfcmVhZGwocGQsIFNUUzIpOworCXJldHVybiBETUFfU1RBVFVTX01BU0tfQklUUyAmICh2YWwgPj4gKERNQV9TVEFUVVNfU0hJRlRfQklUUyArCisJCQlETUFfU1RBVFVTX0JJVFNfUEVSX0NIICogKHBkX2NoYW4tPmNoYW4uY2hhbl9pZCAtIDgpKSk7Cit9CisKIHN0YXRpYyBib29sIHBkY19pc19pZGxlKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCiB7Ci0JaWYgKHBkY19nZXRfc3RhdHVzKHBkX2NoYW4pID09IERNQV9TVEFUVVNfSURMRSkKKwl1MzIgc3RzOworCisJaWYgKHBkX2NoYW4tPmNoYW4uY2hhbl9pZCA8IDgpCisJCXN0cyA9IHBkY19nZXRfc3RhdHVzMChwZF9jaGFuKTsKKwllbHNlCisJCXN0cyA9IHBkY19nZXRfc3RhdHVzMihwZF9jaGFuKTsKKworCisJaWYgKHN0cyA9PSBETUFfU1RBVFVTX0lETEUpCiAJCXJldHVybiB0cnVlOwogCWVsc2UKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNDk1LDExICs1NDEsMTEgQEAKIAkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmdG1wX2xpc3QpOwogCX0KIAotCXNwaW5fbG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGRfY2hhbi0+bG9jayk7CiAJbGlzdF9zcGxpY2UoJnRtcF9saXN0LCAmcGRfY2hhbi0+ZnJlZV9saXN0KTsKIAlwZF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQgPSBpOwogCXBkX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjaGFuLT5jb29raWUgPSAxOwotCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnBkX2NoYW4tPmxvY2spOwogCiAJcGRjX2VuYWJsZV9pcnEoY2hhbiwgMSk7CiAKQEAgLTUxNywxMCArNTYzLDEwIEBACiAJQlVHX09OKCFsaXN0X2VtcHR5KCZwZF9jaGFuLT5hY3RpdmVfbGlzdCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmcGRfY2hhbi0+cXVldWUpKTsKIAotCXNwaW5fbG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcGRfY2hhbi0+bG9jayk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmcGRfY2hhbi0+ZnJlZV9saXN0LCAmdG1wX2xpc3QpOwogCXBkX2NoYW4tPmRlc2NzX2FsbG9jYXRlZCA9IDA7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcGRfY2hhbi0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2QsICZ0bXBfbGlzdCwgZGVzY19ub2RlKQogCQlwY2lfcG9vbF9mcmVlKHBkLT5wb29sLCBkZXNjLCBkZXNjLT50eGQucGh5cyk7CkBAIC01MzYsMTAgKzU4MiwxMCBAQAogCWRtYV9jb29raWVfdCBsYXN0X2NvbXBsZXRlZDsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZwZF9jaGFuLT5sb2NrKTsKIAlsYXN0X2NvbXBsZXRlZCA9IHBkX2NoYW4tPmNvbXBsZXRlZF9jb29raWU7CiAJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOwotCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnBkX2NoYW4tPmxvY2spOwogCiAJcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZWQsIGxhc3RfdXNlZCk7CiAKQEAgLTY1NCw3ICs3MDAsNyBAQAogCWlmIChjbWQgIT0gRE1BX1RFUk1JTkFURV9BTEwpCiAJCXJldHVybiAtRU5YSU87CiAKLQlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCXNwaW5fbG9ja19pcnEoJnBkX2NoYW4tPmxvY2spOwogCiAJcGRjX3NldF9tb2RlKCZwZF9jaGFuLT5jaGFuLCBETUFfQ1RMMF9ESVNBQkxFKTsKIApAQCAtNjY0LDcgKzcxMCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kLCAmbGlzdCwgZGVzY19ub2RlKQogCQlwZGNfY2hhaW5fY29tcGxldGUocGRfY2hhbiwgZGVzYyk7CiAKLQlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZF9jaGFuLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjkzLDMwICs3MzksNDUgQEAKIAlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSAoc3RydWN0IHBjaF9kbWEgKilkZXZpZDsKIAlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuOwogCXUzMiBzdHMwOworCXUzMiBzdHMyOwogCWludCBpOwotCWludCByZXQgPSBJUlFfTk9ORTsKKwlpbnQgcmV0MCA9IElSUV9OT05FOworCWludCByZXQyID0gSVJRX05PTkU7CiAKIAlzdHMwID0gZG1hX3JlYWRsKHBkLCBTVFMwKTsKKwlzdHMyID0gZG1hX3JlYWRsKHBkLCBTVFMyKTsKIAogCWRldl9kYmcocGQtPmRtYS5kZXYsICJwZF9pcnEgc3RzMDogJXhcbiIsIHN0czApOwogCiAJZm9yIChpID0gMDsgaSA8IHBkLT5kbWEuY2hhbmNudDsgaSsrKSB7CiAJCXBkX2NoYW4gPSAmcGQtPmNoYW5uZWxzW2ldOwogCi0JCWlmIChzdHMwICYgRE1BX1NUQVRVU19JUlEoaSkpIHsKLQkJCWlmIChzdHMwICYgRE1BX1NUQVRVU19FUlIoaSkpCi0JCQkJc2V0X2JpdCgwLCAmcGRfY2hhbi0+ZXJyX3N0YXR1cyk7CisJCWlmIChpIDwgOCkgeworCQkJaWYgKHN0czAgJiBETUFfU1RBVFVTX0lSUShpKSkgeworCQkJCWlmIChzdHMwICYgRE1BX1NUQVRVUzBfRVJSKGkpKQorCQkJCQlzZXRfYml0KDAsICZwZF9jaGFuLT5lcnJfc3RhdHVzKTsKIAotCQkJdGFza2xldF9zY2hlZHVsZSgmcGRfY2hhbi0+dGFza2xldCk7Ci0JCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJCQl0YXNrbGV0X3NjaGVkdWxlKCZwZF9jaGFuLT50YXNrbGV0KTsKKwkJCQlyZXQwID0gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3RzMiAmIERNQV9TVEFUVVNfSVJRKGkgLSA4KSkgeworCQkJCWlmIChzdHMyICYgRE1BX1NUQVRVUzJfRVJSKGkpKQorCQkJCQlzZXRfYml0KDAsICZwZF9jaGFuLT5lcnJfc3RhdHVzKTsKKworCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnBkX2NoYW4tPnRhc2tsZXQpOworCQkJCXJldDIgPSBJUlFfSEFORExFRDsKKwkJCX0KIAkJfQotCiAJfQogCiAJLyogY2xlYXIgaW50ZXJydXB0IGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovCi0JZG1hX3dyaXRlbChwZCwgU1RTMCwgc3RzMCk7CisJaWYgKHJldDApCisJCWRtYV93cml0ZWwocGQsIFNUUzAsIHN0czApOworCWlmIChyZXQyKQorCQlkbWFfd3JpdGVsKHBkLCBTVFMyLCBzdHMyKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHJldDAgfCByZXQyOwogfQogCiAjaWZkZWYJQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9wbDMzMC5jIGIvZHJpdmVycy9kbWEvcGwzMzAuYwppbmRleCA2YWJlMWVjLi4wMGVlZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9wbDMzMC5jCisrKyBiL2RyaXZlcnMvZG1hL3BsMzMwLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlzcGlubG9ja190IHBvb2xfbG9jazsKIAogCS8qIFBlcmlwaGVyYWwgY2hhbm5lbHMgY29ubmVjdGVkIHRvIHRoaXMgRE1BQyAqLwotCXN0cnVjdCBkbWFfcGwzMzBfY2hhbiBwZXJpcGhlcmFsc1swXTsgLyoga2VlcCBhdCBlbmQgKi8KKwlzdHJ1Y3QgZG1hX3BsMzMwX2NoYW4gKnBlcmlwaGVyYWxzOyAvKiBrZWVwIGF0IGVuZCAqLwogfTsKIAogc3RydWN0IGRtYV9wbDMzMF9kZXNjIHsKQEAgLTQ1MSw4ICs0NTEsMTMgQEAKIAlkZXNjLT50eGQuY29va2llID0gMDsKIAlhc3luY190eF9hY2soJmRlc2MtPnR4ZCk7CiAKLQlkZXNjLT5yZXEucnF0eXBlID0gcGVyaS0+cnF0eXBlOwotCWRlc2MtPnJlcS5wZXJpID0gcGVyaS0+cGVyaV9pZDsKKwlpZiAocGVyaSkgeworCQlkZXNjLT5yZXEucnF0eXBlID0gcGVyaS0+cnF0eXBlOworCQlkZXNjLT5yZXEucGVyaSA9IHBlcmktPnBlcmlfaWQ7CisJfSBlbHNlIHsKKwkJZGVzYy0+cmVxLnJxdHlwZSA9IE1FTVRPTUVNOworCQlkZXNjLT5yZXEucGVyaSA9IDA7CisJfQogCiAJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZGVzYy0+dHhkLCAmcGNoLT5jaGFuKTsKIApAQCAtNTI5LDEwICs1MzQsMTAgQEAKIAlzdHJ1Y3QgcGwzMzBfaW5mbyAqcGk7CiAJaW50IGJ1cnN0OwogCi0JaWYgKHVubGlrZWx5KCFwY2ggfHwgIWxlbiB8fCAhcGVyaSkpCisJaWYgKHVubGlrZWx5KCFwY2ggfHwgIWxlbikpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHBlcmktPnJxdHlwZSAhPSBNRU1UT01FTSkKKwlpZiAocGVyaSAmJiBwZXJpLT5ycXR5cGUgIT0gTUVNVE9NRU0pCiAJCXJldHVybiBOVUxMOwogCiAJcGkgPSAmcGNoLT5kbWFjLT5waWY7CkBAIC01NzcsNyArNTgyLDcgQEAKIAlpbnQgaSwgYnVyc3Rfc2l6ZTsKIAlkbWFfYWRkcl90IGFkZHI7CiAKLQlpZiAodW5saWtlbHkoIXBjaCB8fCAhc2dsIHx8ICFzZ19sZW4pKQorCWlmICh1bmxpa2VseSghcGNoIHx8ICFzZ2wgfHwgIXNnX2xlbiB8fCAhcGVyaSkpCiAJCXJldHVybiBOVUxMOwogCiAJLyogTWFrZSBzdXJlIHRoZSBkaXJlY3Rpb24gaXMgY29uc2lzdGVudCAqLwpAQCAtNjY2LDE3ICs2NzEsMTIgQEAKIAlzdHJ1Y3QgZG1hX2RldmljZSAqcGQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGksIHJldCwgaXJxOworCWludCBudW1fY2hhbjsKIAogCXBkYXQgPSBhZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWlmICghcGRhdCB8fCAhcGRhdC0+bnJfdmFsaWRfcGVyaSkgewotCQlkZXZfZXJyKCZhZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAkvKiBBbGxvY2F0ZSBhIG5ldyBETUFDIGFuZCBpdHMgQ2hhbm5lbHMgKi8KLQlwZG1hYyA9IGt6YWxsb2MocGRhdC0+bnJfdmFsaWRfcGVyaSAqIHNpemVvZigqcGNoKQotCQkJCSsgc2l6ZW9mKCpwZG1hYyksIEdGUF9LRVJORUwpOworCXBkbWFjID0ga3phbGxvYyhzaXplb2YoKnBkbWFjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZG1hYykgewogCQlkZXZfZXJyKCZhZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02ODUsNyArNjg1LDcgQEAKIAlwaSA9ICZwZG1hYy0+cGlmOwogCXBpLT5kZXYgPSAmYWRldi0+ZGV2OwogCXBpLT5wbDMzMF9kYXRhID0gTlVMTDsKLQlwaS0+bWNidWZzeiA9IHBkYXQtPm1jYnVmX3N6OworCXBpLT5tY2J1ZnN6ID0gcGRhdCA/IHBkYXQtPm1jYnVmX3N6IDogMDsKIAogCXJlcyA9ICZhZGV2LT5yZXM7CiAJcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgImRtYS1wbDMzMCIpOwpAQCAtNzE3LDI3ICs3MTcsMzUgQEAKIAlJTklUX0xJU1RfSEVBRCgmcGQtPmNoYW5uZWxzKTsKIAogCS8qIEluaXRpYWxpemUgY2hhbm5lbCBwYXJhbWV0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IHBkYXQtPm5yX3ZhbGlkX3Blcmk7IGkrKykgewotCQlzdHJ1Y3QgZG1hX3BsMzMwX3BlcmkgKnBlcmkgPSAmcGRhdC0+cGVyaVtpXTsKLQkJcGNoID0gJnBkbWFjLT5wZXJpcGhlcmFsc1tpXTsKKwludW1fY2hhbiA9IG1heChwZGF0ID8gcGRhdC0+bnJfdmFsaWRfcGVyaSA6IDAsICh1OClwaS0+cGNmZy5udW1fY2hhbik7CisJcGRtYWMtPnBlcmlwaGVyYWxzID0ga3phbGxvYyhudW1fY2hhbiAqIHNpemVvZigqcGNoKSwgR0ZQX0tFUk5FTCk7CiAKLQkJc3dpdGNoIChwZXJpLT5ycXR5cGUpIHsKLQkJY2FzZSBNRU1UT01FTToKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW47IGkrKykgeworCQlwY2ggPSAmcGRtYWMtPnBlcmlwaGVyYWxzW2ldOworCQlpZiAocGRhdCkgeworCQkJc3RydWN0IGRtYV9wbDMzMF9wZXJpICpwZXJpID0gJnBkYXQtPnBlcmlbaV07CisKKwkJCXN3aXRjaCAocGVyaS0+cnF0eXBlKSB7CisJCQljYXNlIE1FTVRPTUVNOgorCQkJCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIHBkLT5jYXBfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIE1FTVRPREVWOgorCQkJY2FzZSBERVZUT01FTToKKwkJCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHBkLT5jYXBfbWFzayk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRldl9lcnIoJmFkZXYtPmRldiwgIkRFVlRPREVWIE5vdCBTdXBwb3J0ZWRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcGNoLT5jaGFuLnByaXZhdGUgPSBwZXJpOworCQl9IGVsc2UgewogCQkJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgcGQtPmNhcF9tYXNrKTsKLQkJCWJyZWFrOwotCQljYXNlIE1FTVRPREVWOgotCQljYXNlIERFVlRPTUVNOgotCQkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBwZC0+Y2FwX21hc2spOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZhZGV2LT5kZXYsICJERVZUT0RFViBOb3QgU3VwcG9ydGVkXG4iKTsKLQkJCWNvbnRpbnVlOworCQkJcGNoLT5jaGFuLnByaXZhdGUgPSBOVUxMOwogCQl9CiAKIAkJSU5JVF9MSVNUX0hFQUQoJnBjaC0+d29ya19saXN0KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBjaC0+bG9jayk7CiAJCXBjaC0+cGwzMzBfY2hpZCA9IE5VTEw7Ci0JCXBjaC0+Y2hhbi5wcml2YXRlID0gcGVyaTsKIAkJcGNoLT5jaGFuLmRldmljZSA9IHBkOwogCQlwY2gtPmNoYW4uY2hhbl9pZCA9IGk7CiAJCXBjaC0+ZG1hYyA9IHBkbWFjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggMDI4MzMwMC4uN2Y0OTIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC03MCwxMiArNzAsMzYgQEAKIAogc3RhdGljIHUxNiBkbWFvcl9yZWFkKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWR3KHNoZGV2LT5jaGFuX3JlZyArIERNQU9SIC8gc2l6ZW9mKHUzMikpOworCXUzMiBfX2lvbWVtICphZGRyID0gc2hkZXYtPmNoYW5fcmVnICsgRE1BT1IgLyBzaXplb2YodTMyKTsKKworCWlmIChzaGRldi0+cGRhdGEtPmRtYW9yX2lzXzMyYml0KQorCQlyZXR1cm4gX19yYXdfcmVhZGwoYWRkcik7CisJZWxzZQorCQlyZXR1cm4gX19yYXdfcmVhZHcoYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYW9yX3dyaXRlKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYsIHUxNiBkYXRhKQogewotCV9fcmF3X3dyaXRldyhkYXRhLCBzaGRldi0+Y2hhbl9yZWcgKyBETUFPUiAvIHNpemVvZih1MzIpKTsKKwl1MzIgX19pb21lbSAqYWRkciA9IHNoZGV2LT5jaGFuX3JlZyArIERNQU9SIC8gc2l6ZW9mKHUzMik7CisKKwlpZiAoc2hkZXYtPnBkYXRhLT5kbWFvcl9pc18zMmJpdCkKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOworCWVsc2UKKwkJX19yYXdfd3JpdGV3KGRhdGEsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBjaGNyX3dyaXRlKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gdG9fc2hfZGV2KHNoX2RjKTsKKworCV9fcmF3X3dyaXRlbChkYXRhLCBzaF9kYy0+YmFzZSArIHNoZGV2LT5jaGNyX29mZnNldCAvIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIHUzMiBjaGNyX3JlYWQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfZGMpCit7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHRvX3NoX2RldihzaF9kYyk7CisKKwlyZXR1cm4gX19yYXdfcmVhZGwoc2hfZGMtPmJhc2UgKyBzaGRldi0+Y2hjcl9vZmZzZXQgLyBzaXplb2YodTMyKSk7CiB9CiAKIC8qCkBAIC0xMjAsNyArMTQ0LDcgQEAKIAogc3RhdGljIGJvb2wgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOworCXUzMiBjaGNyID0gY2hjcl9yZWFkKHNoX2NoYW4pOwogCiAJaWYgKChjaGNyICYgKENIQ1JfREUgfCBDSENSX1RFKSkgPT0gQ0hDUl9ERSkKIAkJcmV0dXJuIHRydWU7IC8qIHdvcmtpbmcgKi8KQEAgLTEzMCw4ICsxNTQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgY2hjcikKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKHNoX2NoYW4tPmNvbW1vbi5kZXZpY2UsCi0JCQkJCQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UsIGNvbW1vbik7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHRvX3NoX2RldihzaF9jaGFuKTsKIAlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBzaGRldi0+cGRhdGE7CiAJaW50IGNudCA9ICgoY2hjciAmIHBkYXRhLT50c19sb3dfbWFzaykgPj4gcGRhdGEtPnRzX2xvd19zaGlmdCkgfAogCQkoKGNoY3IgJiBwZGF0YS0+dHNfaGlnaF9tYXNrKSA+PiBwZGF0YS0+dHNfaGlnaF9zaGlmdCk7CkBAIC0xNDQsOCArMTY3LDcgQEAKIAogc3RhdGljIHUzMiBsb2cyc2l6ZV90b19jaGNyKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGludCBsMnNpemUpCiB7Ci0Jc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGNvbnRhaW5lcl9vZihzaF9jaGFuLT5jb21tb24uZGV2aWNlLAotCQkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSB0b19zaF9kZXYoc2hfY2hhbik7CiAJc3RydWN0IHNoX2RtYWVfcGRhdGEgKnBkYXRhID0gc2hkZXYtPnBkYXRhOwogCWludCBpOwogCkBAIC0xNjksMTggKzE5MSwyMyBAQAogCiBzdGF0aWMgdm9pZCBkbWFlX3N0YXJ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSB0b19zaF9kZXYoc2hfY2hhbik7CisJdTMyIGNoY3IgPSBjaGNyX3JlYWQoc2hfY2hhbik7CiAKLQljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IgJiB+Q0hDUl9URSwgQ0hDUik7CisJaWYgKHNoZGV2LT5wZGF0YS0+bmVlZHNfdGVuZF9zZXQpCisJCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIDB4RkZGRkZGRkYsIFRFTkQpOworCisJY2hjciB8PSBDSENSX0RFIHwgc2hkZXYtPmNoY3JfaWVfYml0OworCWNoY3Jfd3JpdGUoc2hfY2hhbiwgY2hjciAmIH5DSENSX1RFKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hZV9oYWx0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSB0b19zaF9kZXYoc2hfY2hhbik7CisJdTMyIGNoY3IgPSBjaGNyX3JlYWQoc2hfY2hhbik7CiAKLQljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBDSENSX0lFKTsKLQlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKKwljaGNyICY9IH4oQ0hDUl9ERSB8IENIQ1JfVEUgfCBzaGRldi0+Y2hjcl9pZV9iaXQpOworCWNoY3Jfd3JpdGUoc2hfY2hhbiwgY2hjcik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfaW5pdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQpAQCAtMTkyLDcgKzIxOSw3IEBACiAJdTMyIGNoY3IgPSBETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IGxvZzJzaXplX3RvX2NoY3Ioc2hfY2hhbiwKIAkJCQkJCSAgIExPRzJfREVGQVVMVF9YRkVSX1NJWkUpOwogCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiwgY2hjcik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7CisJY2hjcl93cml0ZShzaF9jaGFuLCBjaGNyKTsKIH0KIAogc3RhdGljIGludCBkbWFlX3NldF9jaGNyKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUzMiB2YWwpCkBAIC0yMDIsMjMgKzIyOSwyNSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdChzaF9jaGFuLCB2YWwpOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIHZhbCwgQ0hDUik7CisJY2hjcl93cml0ZShzaF9jaGFuLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZG1hZV9zZXRfZG1hcnMoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHZhbCkKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKHNoX2NoYW4tPmNvbW1vbi5kZXZpY2UsCi0JCQkJCQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UsIGNvbW1vbik7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHRvX3NoX2RldihzaF9jaGFuKTsKIAlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBzaGRldi0+cGRhdGE7CiAJY29uc3Qgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCAqY2hhbl9wZGF0YSA9ICZwZGF0YS0+Y2hhbm5lbFtzaF9jaGFuLT5pZF07CiAJdTE2IF9faW9tZW0gKmFkZHIgPSBzaGRldi0+ZG1hcnM7Ci0JaW50IHNoaWZ0ID0gY2hhbl9wZGF0YS0+ZG1hcnNfYml0OworCXVuc2lnbmVkIGludCBzaGlmdCA9IGNoYW5fcGRhdGEtPmRtYXJzX2JpdDsKIAogCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAocGRhdGEtPm5vX2RtYXJzKQorCQlyZXR1cm4gMDsKKwogCS8qIGluIHRoZSBjYXNlIG9mIGEgbWlzc2luZyBETUFSUyByZXNvdXJjZSB1c2UgZmlyc3QgbWVtb3J5IHdpbmRvdyAqLwogCWlmICghYWRkcikKIAkJYWRkciA9ICh1MTYgX19pb21lbSAqKXNoZGV2LT5jaGFuX3JlZzsKQEAgLTI5Niw5ICszMjUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqc2hfZG1hZV9maW5kX3NsYXZlKAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSkKIHsKLQlzdHJ1Y3QgZG1hX2RldmljZSAqZG1hX2RldiA9IHNoX2NoYW4tPmNvbW1vbi5kZXZpY2U7Ci0Jc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGNvbnRhaW5lcl9vZihkbWFfZGV2LAotCQkJCQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UsIGNvbW1vbik7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHRvX3NoX2RldihzaF9jaGFuKTsKIAlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBzaGRldi0+cGRhdGE7CiAJaW50IGk7CiAKQEAgLTc3MSwxMCArNzk4LDggQEAKIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkvKiBETUEgd29yayBjaGVjayAqLwotCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7Ci0JCXJldHVybjsKLQl9CisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJZ290byBzaF9jaGFuX3hmZXJfbGRfcXVldWVfZW5kOwogCiAJLyogRmluZCB0aGUgZmlyc3Qgbm90IHRyYW5zZmVycmVkIGRlc2NyaXB0b3IgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKQEAgLTc4OCw2ICs4MTMsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAorc2hfY2hhbl94ZmVyX2xkX3F1ZXVlX2VuZDoKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIH0KIApAQCAtODQ2LDcgKzg3Miw3IEBACiAKIAlzcGluX2xvY2soJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKLQljaGNyID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBDSENSKTsKKwljaGNyID0gY2hjcl9yZWFkKHNoX2NoYW4pOwogCiAJaWYgKGNoY3IgJiBDSENSX1RFKSB7CiAJCS8qIERNQSBzdG9wICovCkBAIC0xMTQ0LDYgKzExNzAsMTYgQEAKIAkvKiBwbGF0Zm9ybSBkYXRhICovCiAJc2hkZXYtPnBkYXRhID0gcGRhdGE7CiAKKwlpZiAocGRhdGEtPmNoY3Jfb2Zmc2V0KQorCQlzaGRldi0+Y2hjcl9vZmZzZXQgPSBwZGF0YS0+Y2hjcl9vZmZzZXQ7CisJZWxzZQorCQlzaGRldi0+Y2hjcl9vZmZzZXQgPSBDSENSOworCisJaWYgKHBkYXRhLT5jaGNyX2llX2JpdCkKKwkJc2hkZXYtPmNoY3JfaWVfYml0ID0gcGRhdGEtPmNoY3JfaWVfYml0OworCWVsc2UKKwkJc2hkZXYtPmNoY3JfaWVfYml0ID0gQ0hDUl9JRTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNoZGV2KTsKIAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuaCBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKaW5kZXggNWFlOWZjNTEuLmRjNTY1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuaApAQCAtNDcsMTAgKzQ3LDE0IEBACiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXUzMiBfX2lvbWVtICpjaGFuX3JlZzsKIAl1MTYgX19pb21lbSAqZG1hcnM7CisJdW5zaWduZWQgaW50IGNoY3Jfb2Zmc2V0OworCXUzMiBjaGNyX2llX2JpdDsKIH07CiAKICNkZWZpbmUgdG9fc2hfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHNoX2RtYWVfY2hhbiwgY29tbW9uKQogI2RlZmluZSB0b19zaF9kZXNjKGxoKSBjb250YWluZXJfb2YobGgsIHN0cnVjdCBzaF9kZXNjLCBub2RlKQogI2RlZmluZSB0eF90b19zaF9kZXNjKHR4KSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBzaF9kZXNjLCBhc3luY190eCkKKyNkZWZpbmUgdG9fc2hfZGV2KGNoYW4pIGNvbnRhaW5lcl9vZihjaGFuLT5jb21tb24uZGV2aWNlLFwKKwkJCQkgICAgIHN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKQogCiAjZW5kaWYJLyogX19ETUFfU0hETUFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwppbmRleCAyOWQxYWRkLi40NjdlNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYworKysgYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDAuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPHBsYXQvc3RlX2RtYTQwLmg+CiAKQEAgLTQ1LDkgKzQ2LDYgQEAKICNkZWZpbmUgRDQwX0FMTE9DX1BIWQkJKDEgPDwgMzApCiAjZGVmaW5lIEQ0MF9BTExPQ19MT0dfRlJFRQkwCiAKLS8qIEhhcmR3YXJlIGRlc2lnbmVyIG9mIHRoZSBibG9jayAqLwotI2RlZmluZSBENDBfSFdfREVTSUdORVIgMHg4Ci0KIC8qKgogICogZW51bSA0MF9jb21tYW5kIC0gVGhlIGRpZmZlcmVudCBjb21tYW5kcyBhbmQvb3Igc3RhdHVzZXMuCiAgKgpAQCAtMTc2LDggKzE3NCwxMCBAQAogICogQHRhc2tsZXQ6IFRhc2tsZXQgdGhhdCBnZXRzIHNjaGVkdWxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IHRvIGNvbXBsZXRlIGEKICAqIHRyYW5zZmVyIGFuZCBjYWxsIGNsaWVudCBjYWxsYmFjay4KICAqIEBjbGllbnQ6IENsaWVudGVkIG93bmVkIGRlc2NyaXB0b3IgbGlzdC4KKyAqIEBwZW5kaW5nX3F1ZXVlOiBTdWJtaXR0ZWQgam9icywgdG8gYmUgaXNzdWVkIGJ5IGlzc3VlX3BlbmRpbmcoKQogICogQGFjdGl2ZTogQWN0aXZlIGRlc2NyaXB0b3IuCiAgKiBAcXVldWU6IFF1ZXVlZCBqb2JzLgorICogQHByZXBhcmVfcXVldWU6IFByZXBhcmVkIGpvYnMuCiAgKiBAZG1hX2NmZzogVGhlIGNsaWVudCBjb25maWd1cmF0aW9uIG9mIHRoaXMgZG1hIGNoYW5uZWwuCiAgKiBAY29uZmlndXJlZDogd2hldGhlciB0aGUgZG1hX2NmZyBjb25maWd1cmF0aW9uIGlzIHZhbGlkCiAgKiBAYmFzZTogUG9pbnRlciB0byB0aGUgZGV2aWNlIGluc3RhbmNlIHN0cnVjdC4KQEAgLTE4Niw2ICsxODYsOCBAQAogICogQGxvZ19kZWY6IERlZmF1bHQgbG9naWNhbCBjaGFubmVsIHNldHRpbmdzLgogICogQGxjbGE6IFNwYWNlIGZvciBvbmUgZHN0IHNyYyBwYWlyIGZvciBsb2dpY2FsIGNoYW5uZWwgdHJhbnNmZXJzLgogICogQGxjcGE6IFBvaW50ZXIgdG8gZHN0IGFuZCBzcmMgbGNwYSBzZXR0aW5ncy4KKyAqIEBydW50aW1lX2FkZHI6IHJ1bnRpbWUgY29uZmlndXJlZCBhZGRyZXNzLgorICogQHJ1bnRpbWVfZGlyZWN0aW9uOiBydW50aW1lIGNvbmZpZ3VyZWQgZGlyZWN0aW9uLgogICoKICAqIFRoaXMgc3RydWN0IGNhbiBlaXRoZXIgImJlIiBhIGxvZ2ljYWwgb3IgYSBwaHlzaWNhbCBjaGFubmVsLgogICovCkBAIC0yMDAsOCArMjAyLDEwIEBACiAJc3RydWN0IGRtYV9jaGFuCQkJIGNoYW47CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CQkgdGFza2xldDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQkgY2xpZW50OworCXN0cnVjdCBsaXN0X2hlYWQJCSBwZW5kaW5nX3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQJCSBhY3RpdmU7CiAJc3RydWN0IGxpc3RfaGVhZAkJIHF1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQJCSBwcmVwYXJlX3F1ZXVlOwogCXN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZwkgZG1hX2NmZzsKIAlib29sCQkJCSBjb25maWd1cmVkOwogCXN0cnVjdCBkNDBfYmFzZQkJCSpiYXNlOwpAQCAtNDc2LDcgKzQ4MCw2IEBACiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGQsIF9kLCAmZDQwYy0+Y2xpZW50LCBub2RlKQogCQkJaWYgKGFzeW5jX3R4X3Rlc3RfYWNrKCZkLT50eGQpKSB7Ci0JCQkJZDQwX3Bvb2xfbGxpX2ZyZWUoZDQwYywgZCk7CiAJCQkJZDQwX2Rlc2NfcmVtb3ZlKGQpOwogCQkJCWRlc2MgPSBkOwogCQkJCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKQEAgLTY0Myw5ICs2NDYsMjUgQEAKIAlyZXR1cm4gZDsKIH0KIAorLyogcmVtb3ZlIGRlc2MgZnJvbSBjdXJyZW50IHF1ZXVlIGFuZCBhZGQgaXQgdG8gdGhlIHBlbmRpbmdfcXVldWUgKi8KIHN0YXRpYyB2b2lkIGQ0MF9kZXNjX3F1ZXVlKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywgc3RydWN0IGQ0MF9kZXNjICpkZXNjKQogewotCWxpc3RfYWRkX3RhaWwoJmRlc2MtPm5vZGUsICZkNDBjLT5xdWV1ZSk7CisJZDQwX2Rlc2NfcmVtb3ZlKGRlc2MpOworCWRlc2MtPmlzX2luX2NsaWVudF9saXN0ID0gZmFsc2U7CisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmQ0MGMtPnBlbmRpbmdfcXVldWUpOworfQorCitzdGF0aWMgc3RydWN0IGQ0MF9kZXNjICpkNDBfZmlyc3RfcGVuZGluZyhzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMpCit7CisJc3RydWN0IGQ0MF9kZXNjICpkOworCisJaWYgKGxpc3RfZW1wdHkoJmQ0MGMtPnBlbmRpbmdfcXVldWUpKQorCQlyZXR1cm4gTlVMTDsKKworCWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkNDBjLT5wZW5kaW5nX3F1ZXVlLAorCQkJICAgICBzdHJ1Y3QgZDQwX2Rlc2MsCisJCQkgICAgIG5vZGUpOworCXJldHVybiBkOwogfQogCiBzdGF0aWMgc3RydWN0IGQ0MF9kZXNjICpkNDBfZmlyc3RfcXVldWVkKHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKQEAgLTc4OSw2ICs4MDgsNyBAQAogc3RhdGljIHZvaWQgZDQwX3Rlcm1fYWxsKHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKIHsKIAlzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQ7CisJc3RydWN0IGQ0MF9kZXNjICpfZDsKIAogCS8qIFJlbGVhc2UgYWN0aXZlIGRlc2NyaXB0b3JzICovCiAJd2hpbGUgKChkNDBkID0gZDQwX2ZpcnN0X2FjdGl2ZV9nZXQoZDQwYykpKSB7CkBAIC04MDIsNiArODIyLDI2IEBACiAJCWQ0MF9kZXNjX2ZyZWUoZDQwYywgZDQwZCk7CiAJfQogCisJLyogUmVsZWFzZSBwZW5kaW5nIGRlc2NyaXB0b3JzICovCisJd2hpbGUgKChkNDBkID0gZDQwX2ZpcnN0X3BlbmRpbmcoZDQwYykpKSB7CisJCWQ0MF9kZXNjX3JlbW92ZShkNDBkKTsKKwkJZDQwX2Rlc2NfZnJlZShkNDBjLCBkNDBkKTsKKwl9CisKKwkvKiBSZWxlYXNlIGNsaWVudCBvd25lZCBkZXNjcmlwdG9ycyAqLworCWlmICghbGlzdF9lbXB0eSgmZDQwYy0+Y2xpZW50KSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGQ0MGQsIF9kLCAmZDQwYy0+Y2xpZW50LCBub2RlKSB7CisJCQlkNDBfZGVzY19yZW1vdmUoZDQwZCk7CisJCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOworCQl9CisKKwkvKiBSZWxlYXNlIGRlc2NyaXB0b3JzIGluIHByZXBhcmUgcXVldWUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmQ0MGMtPnByZXBhcmVfcXVldWUpKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZDQwZCwgX2QsCisJCQkJCSAmZDQwYy0+cHJlcGFyZV9xdWV1ZSwgbm9kZSkgeworCQkJZDQwX2Rlc2NfcmVtb3ZlKGQ0MGQpOworCQkJZDQwX2Rlc2NfZnJlZShkNDBjLCBkNDBkKTsKKwkJfQogCiAJZDQwYy0+cGVuZGluZ190eCA9IDA7CiAJZDQwYy0+YnVzeSA9IGZhbHNlOwpAQCAtMTE4OSw3ICsxMjI5LDYgQEAKIAogCWlmICghZDQwZC0+Y3ljbGljKSB7CiAJCWlmIChhc3luY190eF90ZXN0X2FjaygmZDQwZC0+dHhkKSkgewotCQkJZDQwX3Bvb2xfbGxpX2ZyZWUoZDQwYywgZDQwZCk7CiAJCQlkNDBfZGVzY19yZW1vdmUoZDQwZCk7CiAJCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOwogCQl9IGVsc2UgewpAQCAtMTU3NiwyMSArMTYxNSwxMCBAQAogCXUzMiBldmVudDsKIAlzdHJ1Y3QgZDQwX3BoeV9yZXMgKnBoeSA9IGQ0MGMtPnBoeV9jaGFuOwogCWJvb2wgaXNfc3JjOwotCXN0cnVjdCBkNDBfZGVzYyAqZDsKLQlzdHJ1Y3QgZDQwX2Rlc2MgKl9kOwotCiAKIAkvKiBUZXJtaW5hdGUgYWxsIHF1ZXVlZCBhbmQgYWN0aXZlIHRyYW5zZmVycyAqLwogCWQ0MF90ZXJtX2FsbChkNDBjKTsKIAotCS8qIFJlbGVhc2UgY2xpZW50IG93bmVkIGRlc2NyaXB0b3JzICovCi0JaWYgKCFsaXN0X2VtcHR5KCZkNDBjLT5jbGllbnQpKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZCwgX2QsICZkNDBjLT5jbGllbnQsIG5vZGUpIHsKLQkJCWQ0MF9wb29sX2xsaV9mcmVlKGQ0MGMsIGQpOwotCQkJZDQwX2Rlc2NfcmVtb3ZlKGQpOwotCQkJZDQwX2Rlc2NfZnJlZShkNDBjLCBkKTsKLQkJfQotCiAJaWYgKHBoeSA9PSBOVUxMKSB7CiAJCWNoYW5fZXJyKGQ0MGMsICJwaHkgPT0gbnVsbFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTg5Miw2ICsxOTIwLDEyIEBACiAJCWdvdG8gZXJyOwogCX0KIAorCS8qCisJICogYWRkIGRlc2NyaXB0b3IgdG8gdGhlIHByZXBhcmUgcXVldWUgaW4gb3JkZXIgdG8gYmUgYWJsZQorCSAqIHRvIGZyZWUgdGhlbSBsYXRlciBpbiB0ZXJtaW5hdGVfYWxsCisJICovCisJbGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJmNoYW4tPnByZXBhcmVfcXVldWUpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuICZkZXNjLT50eGQ7CkBAIC0yMDkyLDcgKzIxMjYsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CiAKLQlzZyA9IGtjYWxsb2MocGVyaW9kcyArIDEsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLCBHRlBfS0VSTkVMKTsKKwlzZyA9IGtjYWxsb2MocGVyaW9kcyArIDEsIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpLCBHRlBfTk9XQUlUKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGVyaW9kczsgaSsrKSB7CiAJCXNnX2RtYV9hZGRyZXNzKCZzZ1tpXSkgPSBkbWFfYWRkcjsKIAkJc2dfZG1hX2xlbigmc2dbaV0pID0gcGVyaW9kX2xlbjsKQEAgLTIxNTIsMjQgKzIxODYsODcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBCdXN5IG1lYW5zIHRoYXQgcGVuZGluZyBqb2JzIGFyZSBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZCAqLworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmZDQwYy0+cGVuZGluZ19xdWV1ZSwgJmQ0MGMtPnF1ZXVlKTsKKworCS8qIEJ1c3kgbWVhbnMgdGhhdCBxdWV1ZWQgam9icyBhcmUgYWxyZWFkeSBiZWluZyBwcm9jZXNzZWQgKi8KIAlpZiAoIWQ0MGMtPmJ1c3kpCiAJCSh2b2lkKSBkNDBfcXVldWVfc3RhcnQoZDQwYyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQKK2RtYTQwX2NvbmZpZ190b19oYWxmY2hhbm5lbChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsCisJCQkgICAgc3RydWN0IHN0ZWRtYTQwX2hhbGZfY2hhbm5lbF9pbmZvICppbmZvLAorCQkJICAgIGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIHdpZHRoLAorCQkJICAgIHUzMiBtYXhidXJzdCkKK3sKKwllbnVtIHN0ZWRtYTQwX3BlcmlwaF9kYXRhX3dpZHRoIGFkZHJfd2lkdGg7CisJaW50IHBzaXplOworCisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJYWRkcl93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEg7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM6CisJCWFkZHJfd2lkdGggPSBTVEVETUE0MF9IQUxGV09SRF9XSURUSDsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKKwkJYWRkcl93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEg7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVM6CisJCWFkZHJfd2lkdGggPSBTVEVETUE0MF9ET1VCTEVXT1JEX1dJRFRIOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGQ0MGMtPmJhc2UtPmRldiwKKwkJCSJpbGxlZ2FsIHBlcmlwaGVyYWwgYWRkcmVzcyB3aWR0aCAiCisJCQkicmVxdWVzdGVkICglZClcbiIsCisJCQl3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpIHsKKwkJaWYgKG1heGJ1cnN0ID49IDE2KQorCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTY7CisJCWVsc2UgaWYgKG1heGJ1cnN0ID49IDgpCisJCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX0xPR184OworCQllbHNlIGlmIChtYXhidXJzdCA+PSA0KQorCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfNDsKKwkJZWxzZQorCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTsKKwl9IGVsc2UgeworCQlpZiAobWF4YnVyc3QgPj0gMTYpCisJCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV8xNjsKKwkJZWxzZSBpZiAobWF4YnVyc3QgPj0gOCkKKwkJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfUEhZXzg7CisJCWVsc2UgaWYgKG1heGJ1cnN0ID49IDQpCisJCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV80OworCQllbHNlCisJCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV8xOworCX0KKworCWluZm8tPmRhdGFfd2lkdGggPSBhZGRyX3dpZHRoOworCWluZm8tPnBzaXplID0gcHNpemU7CisJaW5mby0+Zmxvd19jdHJsID0gU1RFRE1BNDBfTk9fRkxPV19DVFJMOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFJ1bnRpbWUgcmVjb25maWd1cmF0aW9uIGV4dGVuc2lvbiAqLwotc3RhdGljIHZvaWQgZDQwX3NldF9ydW50aW1lX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCi0JCQkgICAgICAgc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKmNvbmZpZykKK3N0YXRpYyBpbnQgZDQwX3NldF9ydW50aW1lX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJICBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnKQogewogCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sIGNoYW4pOwogCXN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyAqY2ZnID0gJmQ0MGMtPmRtYV9jZmc7Ci0JZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggY29uZmlnX2FkZHJfd2lkdGg7CisJZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggc3JjX2FkZHJfd2lkdGgsIGRzdF9hZGRyX3dpZHRoOwogCWRtYV9hZGRyX3QgY29uZmlnX2FkZHI7Ci0JdTMyIGNvbmZpZ19tYXhidXJzdDsKLQllbnVtIHN0ZWRtYTQwX3BlcmlwaF9kYXRhX3dpZHRoIGFkZHJfd2lkdGg7Ci0JaW50IHBzaXplOworCXUzMiBzcmNfbWF4YnVyc3QsIGRzdF9tYXhidXJzdDsKKwlpbnQgcmV0OworCisJc3JjX2FkZHJfd2lkdGggPSBjb25maWctPnNyY19hZGRyX3dpZHRoOworCXNyY19tYXhidXJzdCA9IGNvbmZpZy0+c3JjX21heGJ1cnN0OworCWRzdF9hZGRyX3dpZHRoID0gY29uZmlnLT5kc3RfYWRkcl93aWR0aDsKKwlkc3RfbWF4YnVyc3QgPSBjb25maWctPmRzdF9tYXhidXJzdDsKIAogCWlmIChjb25maWctPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKIAkJZG1hX2FkZHJfdCBkZXZfYWRkcl9yeCA9CkBAIC0yMTg4LDggKzIyODUsMTEgQEAKIAkJCQljZmctPmRpcik7CiAJCWNmZy0+ZGlyID0gU1RFRE1BNDBfUEVSSVBIX1RPX01FTTsKIAotCQljb25maWdfYWRkcl93aWR0aCA9IGNvbmZpZy0+c3JjX2FkZHJfd2lkdGg7Ci0JCWNvbmZpZ19tYXhidXJzdCA9IGNvbmZpZy0+c3JjX21heGJ1cnN0OworCQkvKiBDb25maWd1cmUgdGhlIG1lbW9yeSBzaWRlICovCisJCWlmIChkc3RfYWRkcl93aWR0aCA9PSBETUFfU0xBVkVfQlVTV0lEVEhfVU5ERUZJTkVEKQorCQkJZHN0X2FkZHJfd2lkdGggPSBzcmNfYWRkcl93aWR0aDsKKwkJaWYgKGRzdF9tYXhidXJzdCA9PSAwKQorCQkJZHN0X21heGJ1cnN0ID0gc3JjX21heGJ1cnN0OwogCiAJfSBlbHNlIGlmIChjb25maWctPmRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CiAJCWRtYV9hZGRyX3QgZGV2X2FkZHJfdHggPQpAQCAtMjIwOCw2OCArMjMwOCwzOSBAQAogCQkJCWNmZy0+ZGlyKTsKIAkJY2ZnLT5kaXIgPSBTVEVETUE0MF9NRU1fVE9fUEVSSVBIOwogCi0JCWNvbmZpZ19hZGRyX3dpZHRoID0gY29uZmlnLT5kc3RfYWRkcl93aWR0aDsKLQkJY29uZmlnX21heGJ1cnN0ID0gY29uZmlnLT5kc3RfbWF4YnVyc3Q7Ci0KKwkJLyogQ29uZmlndXJlIHRoZSBtZW1vcnkgc2lkZSAqLworCQlpZiAoc3JjX2FkZHJfd2lkdGggPT0gRE1BX1NMQVZFX0JVU1dJRFRIX1VOREVGSU5FRCkKKwkJCXNyY19hZGRyX3dpZHRoID0gZHN0X2FkZHJfd2lkdGg7CisJCWlmIChzcmNfbWF4YnVyc3QgPT0gMCkKKwkJCXNyY19tYXhidXJzdCA9IGRzdF9tYXhidXJzdDsKIAl9IGVsc2UgewogCQlkZXZfZXJyKGQ0MGMtPmJhc2UtPmRldiwKIAkJCSJ1bnJlY29nbml6ZWQgY2hhbm5lbCBkaXJlY3Rpb24gJWRcbiIsCiAJCQljb25maWctPmRpcmVjdGlvbik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoIChjb25maWdfYWRkcl93aWR0aCkgewotCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKLQkJYWRkcl93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEg7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM6Ci0JCWFkZHJfd2lkdGggPSBTVEVETUE0MF9IQUxGV09SRF9XSURUSDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKLQkJYWRkcl93aWR0aCA9IFNURURNQTQwX1dPUkRfV0lEVEg7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVM6Ci0JCWFkZHJfd2lkdGggPSBTVEVETUE0MF9ET1VCTEVXT1JEX1dJRFRIOwotCQlicmVhazsKLQlkZWZhdWx0OgorCWlmIChzcmNfbWF4YnVyc3QgKiBzcmNfYWRkcl93aWR0aCAhPSBkc3RfbWF4YnVyc3QgKiBkc3RfYWRkcl93aWR0aCkgewogCQlkZXZfZXJyKGQ0MGMtPmJhc2UtPmRldiwKLQkJCSJpbGxlZ2FsIHBlcmlwaGVyYWwgYWRkcmVzcyB3aWR0aCAiCi0JCQkicmVxdWVzdGVkICglZClcbiIsCi0JCQljb25maWctPnNyY19hZGRyX3dpZHRoKTsKLQkJcmV0dXJuOworCQkJInNyYy9kc3Qgd2lkdGgvbWF4YnVyc3QgbWlzbWF0Y2g6ICVkKiVkICE9ICVkKiVkXG4iLAorCQkJc3JjX21heGJ1cnN0LAorCQkJc3JjX2FkZHJfd2lkdGgsCisJCQlkc3RfbWF4YnVyc3QsCisJCQlkc3RfYWRkcl93aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjaGFuX2lzX2xvZ2ljYWwoZDQwYykpIHsKLQkJaWYgKGNvbmZpZ19tYXhidXJzdCA+PSAxNikKLQkJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzE2OwotCQllbHNlIGlmIChjb25maWdfbWF4YnVyc3QgPj0gOCkKLQkJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzg7Ci0JCWVsc2UgaWYgKGNvbmZpZ19tYXhidXJzdCA+PSA0KQotCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfNDsKLQkJZWxzZQotCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTsKLQl9IGVsc2UgewotCQlpZiAoY29uZmlnX21heGJ1cnN0ID49IDE2KQotCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9QSFlfMTY7Ci0JCWVsc2UgaWYgKGNvbmZpZ19tYXhidXJzdCA+PSA4KQotCQkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9QSFlfODsKLQkJZWxzZSBpZiAoY29uZmlnX21heGJ1cnN0ID49IDQpCi0JCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV80OwotCQllbHNlIGlmIChjb25maWdfbWF4YnVyc3QgPj0gMikKLQkJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfUEhZXzI7Ci0JCWVsc2UKLQkJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfUEhZXzE7Ci0JfQorCXJldCA9IGRtYTQwX2NvbmZpZ190b19oYWxmY2hhbm5lbChkNDBjLCAmY2ZnLT5zcmNfaW5mbywKKwkJCQkJICBzcmNfYWRkcl93aWR0aCwKKwkJCQkJICBzcmNfbWF4YnVyc3QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkvKiBTZXQgdXAgYWxsIHRoZSBlbmRwb2ludCBjb25maWdzICovCi0JY2ZnLT5zcmNfaW5mby5kYXRhX3dpZHRoID0gYWRkcl93aWR0aDsKLQljZmctPnNyY19pbmZvLnBzaXplID0gcHNpemU7Ci0JY2ZnLT5zcmNfaW5mby5iaWdfZW5kaWFuID0gZmFsc2U7Ci0JY2ZnLT5zcmNfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkw7Ci0JY2ZnLT5kc3RfaW5mby5kYXRhX3dpZHRoID0gYWRkcl93aWR0aDsKLQljZmctPmRzdF9pbmZvLnBzaXplID0gcHNpemU7Ci0JY2ZnLT5kc3RfaW5mby5iaWdfZW5kaWFuID0gZmFsc2U7Ci0JY2ZnLT5kc3RfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkw7CisJcmV0ID0gZG1hNDBfY29uZmlnX3RvX2hhbGZjaGFubmVsKGQ0MGMsICZjZmctPmRzdF9pbmZvLAorCQkJCQkgIGRzdF9hZGRyX3dpZHRoLAorCQkJCQkgIGRzdF9tYXhidXJzdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIEZpbGwgaW4gcmVnaXN0ZXIgdmFsdWVzICovCiAJaWYgKGNoYW5faXNfbG9naWNhbChkNDBjKSkKQEAgLTIyODIsMTIgKzIzNTMsMTQgQEAKIAlkNDBjLT5ydW50aW1lX2FkZHIgPSBjb25maWdfYWRkcjsKIAlkNDBjLT5ydW50aW1lX2RpcmVjdGlvbiA9IGNvbmZpZy0+ZGlyZWN0aW9uOwogCWRldl9kYmcoZDQwYy0+YmFzZS0+ZGV2LAotCQkiY29uZmlndXJlZCBjaGFubmVsICVzIGZvciAlcywgZGF0YSB3aWR0aCAlZCwgIgotCQkibWF4YnVyc3QgJWQgYnl0ZXMsIExFLCBubyBmbG93IGNvbnRyb2xcbiIsCisJCSJjb25maWd1cmVkIGNoYW5uZWwgJXMgZm9yICVzLCBkYXRhIHdpZHRoICVkLyVkLCAiCisJCSJtYXhidXJzdCAlZC8lZCBlbGVtZW50cywgTEUsIG5vIGZsb3cgY29udHJvbFxuIiwKIAkJZG1hX2NoYW5fbmFtZShjaGFuKSwKIAkJKGNvbmZpZy0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgPyAiUlgiIDogIlRYIiwKLQkJY29uZmlnX2FkZHJfd2lkdGgsCi0JCWNvbmZpZ19tYXhidXJzdCk7CisJCXNyY19hZGRyX3dpZHRoLCBkc3RfYWRkcl93aWR0aCwKKwkJc3JjX21heGJ1cnN0LCBkc3RfbWF4YnVyc3QpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZDQwX2NvbnRyb2woc3RydWN0IGRtYV9jaGFuICpjaGFuLCBlbnVtIGRtYV9jdHJsX2NtZCBjbWQsCkBAIC0yMzA4LDkgKzIzODEsOCBAQAogCWNhc2UgRE1BX1JFU1VNRToKIAkJcmV0dXJuIGQ0MF9yZXN1bWUoZDQwYyk7CiAJY2FzZSBETUFfU0xBVkVfQ09ORklHOgotCQlkNDBfc2V0X3J1bnRpbWVfY29uZmlnKGNoYW4sCisJCXJldHVybiBkNDBfc2V0X3J1bnRpbWVfY29uZmlnKGNoYW4sCiAJCQkoc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKikgYXJnKTsKLQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMjM0MSw3ICsyNDEzLDkgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmZDQwYy0+YWN0aXZlKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPnF1ZXVlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPnBlbmRpbmdfcXVldWUpOwogCQlJTklUX0xJU1RfSEVBRCgmZDQwYy0+Y2xpZW50KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPnByZXBhcmVfcXVldWUpOwogCiAJCXRhc2tsZXRfaW5pdCgmZDQwYy0+dGFza2xldCwgZG1hX3Rhc2tsZXQsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nKSBkNDBjKTsKQEAgLTI1MDIsMjUgKzI1NzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IGQ0MF9iYXNlICogX19pbml0IGQ0MF9od19kZXRlY3RfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZDQwX3JlZ192YWwgZG1hX2lkX3JlZ3NbXSA9IHsKLQkJLyogUGVyaXBoZXJhbCBJZCAqLwotCQl7IC5yZWcgPSBENDBfRFJFR19QRVJJUEhJRDAsIC52YWwgPSAweDAwNDB9LAotCQl7IC5yZWcgPSBENDBfRFJFR19QRVJJUEhJRDEsIC52YWwgPSAweDAwMDB9LAotCQkvKgotCQkgKiBENDBfRFJFR19QRVJJUEhJRDIgRGVwZW5kcyBvbiBIVyByZXZpc2lvbjoKLQkJICogIERCODUwMGVkIGhhcyAweDAwMDgsCi0JCSAqICA/IGhhcyAweDAwMTgsCi0JCSAqICBEQjg1MDB2MSBoYXMgMHgwMDI4Ci0JCSAqICBEQjg1MDB2MiBoYXMgMHgwMDM4Ci0JCSAqLwotCQl7IC5yZWcgPSBENDBfRFJFR19QRVJJUEhJRDMsIC52YWwgPSAweDAwMDB9LAotCi0JCS8qIFBDZWxsIElkICovCi0JCXsgLnJlZyA9IEQ0MF9EUkVHX0NFTExJRDAsIC52YWwgPSAweDAwMGR9LAotCQl7IC5yZWcgPSBENDBfRFJFR19DRUxMSUQxLCAudmFsID0gMHgwMGYwfSwKLQkJeyAucmVnID0gRDQwX0RSRUdfQ0VMTElEMiwgLnZhbCA9IDB4MDAwNX0sCi0JCXsgLnJlZyA9IEQ0MF9EUkVHX0NFTExJRDMsIC52YWwgPSAweDAwYjF9Ci0JfTsKIAlzdHJ1Y3Qgc3RlZG1hNDBfcGxhdGZvcm1fZGF0YSAqcGxhdF9kYXRhOwogCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CiAJdm9pZCBfX2lvbWVtICp2aXJ0YmFzZSA9IE5VTEw7CkBAIC0yNTI5LDggKzI1ODQsOSBAQAogCWludCBudW1fbG9nX2NoYW5zID0gMDsKIAlpbnQgbnVtX3BoeV9jaGFuczsKIAlpbnQgaTsKLQl1MzIgdmFsOwotCXUzMiByZXY7CisJdTMyIHBpZDsKKwl1MzIgY2lkOworCXU4IHJldjsKIAogCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAKQEAgLTI1NTQsMzIgKzI2MTAsMzIgQEAKIAlpZiAoIXZpcnRiYXNlKQogCQlnb3RvIGZhaWx1cmU7CiAKLQkvKiBIVyB2ZXJzaW9uIGNoZWNrICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX2lkX3JlZ3MpOyBpKyspIHsKLQkJaWYgKGRtYV9pZF9yZWdzW2ldLnZhbCAhPQotCQkgICAgcmVhZGwodmlydGJhc2UgKyBkbWFfaWRfcmVnc1tpXS5yZWcpKSB7Ci0JCQlkNDBfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIlVua25vd24gaGFyZHdhcmUhIEV4cGVjdGVkIDB4JXggYXQgMHgleCBidXQgZ290IDB4JXhcbiIsCi0JCQkJZG1hX2lkX3JlZ3NbaV0udmFsLAotCQkJCWRtYV9pZF9yZWdzW2ldLnJlZywKLQkJCQlyZWFkbCh2aXJ0YmFzZSArIGRtYV9pZF9yZWdzW2ldLnJlZykpOwotCQkJZ290byBmYWlsdXJlOwotCQl9Ci0JfQorCS8qIFRoaXMgaXMganVzdCBhIHJlZ3VsYXIgQU1CQSBQcmltZUNlbGwgSUQgYWN0dWFsbHkgKi8KKwlmb3IgKHBpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQorCQlwaWQgfD0gKHJlYWRsKHZpcnRiYXNlICsgcmVzb3VyY2Vfc2l6ZShyZXMpIC0gMHgyMCArIDQgKiBpKQorCQkJJiAyNTUpIDw8IChpICogOCk7CisJZm9yIChjaWQgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKykKKwkJY2lkIHw9IChyZWFkbCh2aXJ0YmFzZSArIHJlc291cmNlX3NpemUocmVzKSAtIDB4MTAgKyA0ICogaSkKKwkJCSYgMjU1KSA8PCAoaSAqIDgpOwogCi0JLyogR2V0IHNpbGljb24gcmV2aXNpb24gYW5kIGRlc2lnbmVyICovCi0JdmFsID0gcmVhZGwodmlydGJhc2UgKyBENDBfRFJFR19QRVJJUEhJRDIpOwotCi0JaWYgKCh2YWwgJiBENDBfRFJFR19QRVJJUEhJRDJfREVTSUdORVJfTUFTSykgIT0KLQkgICAgRDQwX0hXX0RFU0lHTkVSKSB7Ci0JCWQ0MF9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gZGVzaWduZXIhIEdvdCAleCB3YW50ZWQgJXhcbiIsCi0JCQl2YWwgJiBENDBfRFJFR19QRVJJUEhJRDJfREVTSUdORVJfTUFTSywKLQkJCUQ0MF9IV19ERVNJR05FUik7CisJaWYgKGNpZCAhPSBBTUJBX0NJRCkgeworCQlkNDBfZXJyKCZwZGV2LT5kZXYsICJVbmtub3duIGhhcmR3YXJlISBObyBQcmltZUNlbGwgSURcbiIpOwogCQlnb3RvIGZhaWx1cmU7CiAJfQotCi0JcmV2ID0gKHZhbCAmIEQ0MF9EUkVHX1BFUklQSElEMl9SRVZfTUFTSykgPj4KLQkJRDQwX0RSRUdfUEVSSVBISUQyX1JFVl9QT1M7CisJaWYgKEFNQkFfTUFORl9CSVRTKHBpZCkgIT0gQU1CQV9WRU5ET1JfU1QpIHsKKwkJZDQwX2VycigmcGRldi0+ZGV2LCAiVW5rbm93biBkZXNpZ25lciEgR290ICV4IHdhbnRlZCAleFxuIiwKKwkJCUFNQkFfTUFORl9CSVRTKHBpZCksCisJCQlBTUJBX1ZFTkRPUl9TVCk7CisJCWdvdG8gZmFpbHVyZTsKKwl9CisJLyoKKwkgKiBIVyByZXZpc2lvbjoKKwkgKiBEQjg1MDBlZCBoYXMgcmV2aXNpb24gMAorCSAqID8gaGFzIHJldmlzaW9uIDEKKwkgKiBEQjg1MDB2MSBoYXMgcmV2aXNpb24gMgorCSAqIERCODUwMHYyIGhhcyByZXZpc2lvbiAzCisJICovCisJcmV2ID0gQU1CQV9SRVZfQklUUyhwaWQpOwogCiAJLyogVGhlIG51bWJlciBvZiBwaHlzaWNhbCBjaGFubmVscyBvbiB0aGlzIEhXICovCiAJbnVtX3BoeV9jaGFucyA9IDQgKiAocmVhZGwodmlydGJhc2UgKyBENDBfRFJFR19JQ0ZHKSAmIDB4NykgKyA0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmggYi9kcml2ZXJzL2RtYS9zdGVfZG1hNDBfbGwuaAppbmRleCAxOTVlZTY1Li5iNDRjNDU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKKysrIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKQEAgLTE4NCw5ICsxODQsNiBAQAogI2RlZmluZSBENDBfRFJFR19QRVJJUEhJRDAJMHhGRTAKICNkZWZpbmUgRDQwX0RSRUdfUEVSSVBISUQxCTB4RkU0CiAjZGVmaW5lIEQ0MF9EUkVHX1BFUklQSElEMgkweEZFOAotI2RlZmluZSBENDBfRFJFR19QRVJJUEhJRDJfUkVWX1BPUyA0Ci0jZGVmaW5lIEQ0MF9EUkVHX1BFUklQSElEMl9SRVZfTUFTSyAoMHhmIDw8IEQ0MF9EUkVHX1BFUklQSElEMl9SRVZfUE9TKQotI2RlZmluZSBENDBfRFJFR19QRVJJUEhJRDJfREVTSUdORVJfTUFTSyAweGYKICNkZWZpbmUgRDQwX0RSRUdfUEVSSVBISUQzCTB4RkVDCiAjZGVmaW5lIEQ0MF9EUkVHX0NFTExJRDAJMHhGRjAKICNkZWZpbmUgRDQwX0RSRUdfQ0VMTElEMQkweEZGNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k3Y29yZV9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYwppbmRleCAwNGYxZTdjLi5mNmNmNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTdjb3JlX2VkYWMuYwpAQCAtMTY3MCw3ICsxNjcwLDcgQEAKIAljaGFyICp0eXBlLCAqb3B0eXBlLCAqZXJyLCAqbXNnOwogCXVuc2lnbmVkIGxvbmcgZXJyb3IgPSBtLT5zdGF0dXMgJiAweDFmZjAwMDBsOwogCXUzMiBvcHR5cGVudW0gPSAobS0+c3RhdHVzID4+IDQpICYgMHgwNzsKLQl1MzIgY29yZV9lcnJfY250ID0gKG0tPnN0YXR1cyA+PiAzOCkgJiYgMHg3ZmZmOworCXUzMiBjb3JlX2Vycl9jbnQgPSAobS0+c3RhdHVzID4+IDM4KSAmIDB4N2ZmZjsKIAl1MzIgZGltbSA9IChtLT5taXNjID4+IDE2KSAmIDB4MzsKIAl1MzIgY2hhbm5lbCA9IChtLT5taXNjID4+IDE4KSAmIDB4MzsKIAl1MzIgc3luZHJvbWUgPSBtLT5taXNjID4+IDMyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL3BjaV9laXNhLmMgYi9kcml2ZXJzL2Vpc2EvcGNpX2Vpc2EuYwppbmRleCAzMGRhNzBkLi5jZGFlMjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvcGNpX2Vpc2EuYworKysgYi9kcml2ZXJzL2Vpc2EvcGNpX2Vpc2EuYwpAQCAtNDUsMTMgKzQ1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2luaXRkYXRhIHBjaV9laXNhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfZWlzYV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCSAgUENJX0NMQVNTX0JSSURHRV9FSVNBIDw8IDgsIDB4ZmZmZjAwLCAwIH0sCiAJeyAwLCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgX19pbml0ZGF0YSBwY2lfZWlzYV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgX19yZWZkYXRhIHBjaV9laXNhX2RyaXZlciA9IHsKIAkubmFtZQkJPSAicGNpX2Vpc2EiLAogCS5pZF90YWJsZQk9IHBjaV9laXNhX3BjaV90YmwsCiAJLnByb2JlCQk9IHBjaV9laXNhX2luaXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCBlNmFkM2JiLi40Nzk5MzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKQEAgLTIxNiwxNSArMjE2LDMzIEBACiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcGh5X3BhY2tldCBwaHlfcGFja2V0OwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqdTY0X3RvX3VwdHIoX191NjQgdmFsdWUpCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIHZvaWQgX191c2VyICp1NjRfdG9fdXB0cih1NjQgdmFsdWUpCit7CisJaWYgKGlzX2NvbXBhdF90YXNrKCkpCisJCXJldHVybiBjb21wYXRfcHRyKHZhbHVlKTsKKwllbHNlCisJCXJldHVybiAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl2YWx1ZTsKK30KKworc3RhdGljIHU2NCB1cHRyX3RvX3U2NCh2b2lkIF9fdXNlciAqcHRyKQoreworCWlmIChpc19jb21wYXRfdGFzaygpKQorCQlyZXR1cm4gcHRyX3RvX2NvbXBhdChwdHIpOworCWVsc2UKKwkJcmV0dXJuICh1NjQpKHVuc2lnbmVkIGxvbmcpcHRyOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKnU2NF90b191cHRyKHU2NCB2YWx1ZSkKIHsKIAlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQgdXB0cl90b191NjQodm9pZCBfX3VzZXIgKnB0cikKK3N0YXRpYyBpbmxpbmUgdTY0IHVwdHJfdG9fdTY0KHZvaWQgX191c2VyICpwdHIpCiB7Ci0JcmV0dXJuIChfX3U2NCkodW5zaWduZWQgbG9uZylwdHI7CisJcmV0dXJuICh1NjQpKHVuc2lnbmVkIGxvbmcpcHRyOwogfQorI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIAogc3RhdGljIGludCBmd19kZXZpY2Vfb3Bfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYwppbmRleCA4YmE3Zjc5Li5mM2I4OTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCkBAIC00NTUsMTUgKzQ1NSwyMCBAQAogc3RhdGljIGludCByZWFkX3JvbShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCiAJCSAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IGluZGV4LCB1MzIgKmRhdGEpCiB7Ci0JaW50IHJjb2RlOworCXU2NCBvZmZzZXQgPSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSkgKyBpbmRleCAqIDQ7CisJaW50IGksIHJjb2RlOwogCiAJLyogZGV2aWNlLT5ub2RlX2lkLCBhY2Nlc3NlZCBiZWxvdywgbXVzdCBub3QgYmUgb2xkZXIgdGhhbiBnZW5lcmF0aW9uICovCiAJc21wX3JtYigpOwogCi0JcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oZGV2aWNlLT5jYXJkLCBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCwKLQkJCWRldmljZS0+bm9kZV9pZCwgZ2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCi0JCQkoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSkgKyBpbmRleCAqIDQsCi0JCQlkYXRhLCA0KTsKKwlmb3IgKGkgPSAxMDsgaSA8IDEwMDsgaSArPSAxMCkgeworCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsCisJCQkJVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QsIGRldmljZS0+bm9kZV9pZCwKKwkJCQlnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwgb2Zmc2V0LCBkYXRhLCA0KTsKKwkJaWYgKHJjb2RlICE9IFJDT0RFX0JVU1kpCisJCQlicmVhazsKKwkJbXNsZWVwKGkpOworCX0KIAliZTMyX3RvX2NwdXMoZGF0YSk7CiAKIAlyZXR1cm4gcmNvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IGJjZjc5MmYuLjU3Y2QzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0yMTc5LDggKzIxNzksMTMgQEAKIAkJCW9oY2lfZHJpdmVyX25hbWUsIG9oY2kpKSB7CiAJCWZ3X2Vycm9yKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICVkLlxuIiwgZGV2LT5pcnEpOwogCQlwY2lfZGlzYWJsZV9tc2koZGV2KTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKLQkJCQkgIG9oY2ktPmNvbmZpZ19yb20sIG9oY2ktPmNvbmZpZ19yb21fYnVzKTsKKworCQlpZiAoY29uZmlnX3JvbSkgeworCQkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkJICBvaGNpLT5uZXh0X2NvbmZpZ19yb20sCisJCQkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisJCQlvaGNpLT5uZXh0X2NvbmZpZ19yb20gPSBOVUxMOworCQl9CiAJCXJldHVybiAtRUlPOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA0MTg0MWEzLi4xN2NlZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTE5OCw2ICsxMTk4LDEwIEBACiB7CiAJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CiAJc3RydWN0IHNicDJfdGFyZ2V0ICp0Z3QgPSBkZXZfZ2V0X2RydmRhdGEoJnVuaXQtPmRldmljZSk7CisJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobHUsICZ0Z3QtPmx1X2xpc3QsIGxpbmspCisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbHUtPndvcmspOwogCiAJc2JwMl90YXJnZXRfcHV0KHRndCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaXZhcnMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCmluZGV4IDVmMjlhYWYuLmViODBiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCkBAIC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wc3RvcmUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTg5LDYgKzkwLDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEVGSVZBUlNfVkVSU0lPTik7CiAKKyNkZWZpbmUgRFVNUF9OQU1FX0xFTiA1MgorCiAvKgogICogVGhlIG1heGltdW0gc2l6ZSBvZiBWYXJpYWJsZU5hbWUgKyBEYXRhID0gMTAyNAogICogVGhlcmVmb3JlLCBpdCdzIHJlYXNvbmFibGUgdG8gc2F2ZSB0aGF0IG11Y2gKQEAgLTExOSw2ICsxMjIsMTAgQEAKIAlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBlZml2YXJfZW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCisjZGVmaW5lIFBTVE9SRV9FRklfQVRUUklCVVRFUyBcCisJKEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfCBcCisJIEVGSV9WQVJJQUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgfCBcCisJIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUykKIAogI2RlZmluZSBFRklWQVJfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpIFwKIHN0cnVjdCBlZml2YXJfYXR0cmlidXRlIGVmaXZhcl9hdHRyXyMjX25hbWUgPSB7IFwKQEAgLTE0MSwyMyArMTQ4LDYxIEBACiAKIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHVuaWNvZGUgY2hhcmFjdGVycyBpbiBkYXRhICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZwotdXRmOF9zdHJsZW4oZWZpX2NoYXIxNl90ICpkYXRhLCB1bnNpZ25lZCBsb25nIG1heGxlbmd0aCkKK3V0ZjE2X3N0cm5sZW4oZWZpX2NoYXIxNl90ICpzLCBzaXplX3QgbWF4bGVuZ3RoKQogewogCXVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsKIAotCXdoaWxlICgqZGF0YSsrICE9IDAgJiYgbGVuZ3RoIDwgbWF4bGVuZ3RoKQorCXdoaWxlICgqcysrICE9IDAgJiYgbGVuZ3RoIDwgbWF4bGVuZ3RoKQogCQlsZW5ndGgrKzsKIAlyZXR1cm4gbGVuZ3RoOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3V0ZjE2X3N0cmxlbihlZmlfY2hhcjE2X3QgKnMpCit7CisJcmV0dXJuIHV0ZjE2X3N0cm5sZW4ocywgfjBVTCk7Cit9CisKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpcyB0aGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nCiAgKiBOb3RlOiB0aGlzIGlzIE5PVCB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHVuaWNvZGUgY2hhcmFjdGVycwogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLXV0Zjhfc3Ryc2l6ZShlZmlfY2hhcjE2X3QgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbWF4bGVuZ3RoKQordXRmMTZfc3Ryc2l6ZShlZmlfY2hhcjE2X3QgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbWF4bGVuZ3RoKQogewotCXJldHVybiB1dGY4X3N0cmxlbihkYXRhLCBtYXhsZW5ndGgvc2l6ZW9mKGVmaV9jaGFyMTZfdCkpICogc2l6ZW9mKGVmaV9jaGFyMTZfdCk7CisJcmV0dXJuIHV0ZjE2X3N0cm5sZW4oZGF0YSwgbWF4bGVuZ3RoL3NpemVvZihlZmlfY2hhcjE2X3QpKSAqIHNpemVvZihlZmlfY2hhcjE2X3QpOworfQorCitzdGF0aWMgaW5saW5lIGludAordXRmMTZfc3RybmNtcChjb25zdCBlZmlfY2hhcjE2X3QgKmEsIGNvbnN0IGVmaV9jaGFyMTZfdCAqYiwgc2l6ZV90IGxlbikKK3sKKwl3aGlsZSAoMSkgeworCQlpZiAobGVuID09IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKCphIDwgKmIpCisJCQlyZXR1cm4gLTE7CisJCWlmICgqYSA+ICpiKQorCQkJcmV0dXJuIDE7CisJCWlmICgqYSA9PSAwKSAvKiBpbXBsaWVzICpiID09IDAgKi8KKwkJCXJldHVybiAwOworCQlhKys7CisJCWIrKzsKKwkJbGVuLS07CisJfQorfQorCitzdGF0aWMgZWZpX3N0YXR1c190CitnZXRfdmFyX2RhdGFfbG9ja2VkKHN0cnVjdCBlZml2YXJzICplZml2YXJzLCBzdHJ1Y3QgZWZpX3ZhcmlhYmxlICp2YXIpCit7CisJZWZpX3N0YXR1c190IHN0YXR1czsKKworCXZhci0+RGF0YVNpemUgPSAxMDI0OworCXN0YXR1cyA9IGVmaXZhcnMtPm9wcy0+Z2V0X3ZhcmlhYmxlKHZhci0+VmFyaWFibGVOYW1lLAorCQkJCQkgICAgJnZhci0+VmVuZG9yR3VpZCwKKwkJCQkJICAgICZ2YXItPkF0dHJpYnV0ZXMsCisJCQkJCSAgICAmdmFyLT5EYXRhU2l6ZSwKKwkJCQkJICAgIHZhci0+RGF0YSk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGVmaV9zdGF0dXNfdApAQCAtMTY2LDEzICsyMTEsOSBAQAogCWVmaV9zdGF0dXNfdCBzdGF0dXM7CiAKIAlzcGluX2xvY2soJmVmaXZhcnMtPmxvY2spOwotCXZhci0+RGF0YVNpemUgPSAxMDI0OwotCXN0YXR1cyA9IGVmaXZhcnMtPm9wcy0+Z2V0X3ZhcmlhYmxlKHZhci0+VmFyaWFibGVOYW1lLAotCQkJCQkgICAgJnZhci0+VmVuZG9yR3VpZCwKLQkJCQkJICAgICZ2YXItPkF0dHJpYnV0ZXMsCi0JCQkJCSAgICAmdmFyLT5EYXRhU2l6ZSwKLQkJCQkJICAgIHZhci0+RGF0YSk7CisJc3RhdHVzID0gZ2V0X3Zhcl9kYXRhX2xvY2tlZChlZml2YXJzLCB2YXIpOwogCXNwaW5fdW5sb2NrKCZlZml2YXJzLT5sb2NrKTsKKwogCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZWZpdmFyczogZ2V0X3ZhcmlhYmxlKCkgZmFpbGVkIDB4JWx4IVxuIiwKIAkJCXN0YXR1cyk7CkBAIC0zODcsMTIgKzQyOCwxODAgQEAKIAkuZGVmYXVsdF9hdHRycyA9IGRlZl9hdHRycywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcHN0b3JlX2luZm8gZWZpX3BzdG9yZV9pbmZvOworCiBzdGF0aWMgaW5saW5lIHZvaWQKIGVmaXZhcl91bnJlZ2lzdGVyKHN0cnVjdCBlZml2YXJfZW50cnkgKnZhcikKIHsKIAlrb2JqZWN0X3B1dCgmdmFyLT5rb2JqKTsKIH0KIAorI2lmZGVmIENPTkZJR19QU1RPUkUKKworc3RhdGljIGludCBlZmlfcHN0b3JlX29wZW4oc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJc3RydWN0IGVmaXZhcnMgKmVmaXZhcnMgPSBwc2ktPmRhdGE7CisKKwlzcGluX2xvY2soJmVmaXZhcnMtPmxvY2spOworCWVmaXZhcnMtPndhbGtfZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlZml2YXJzLT5saXN0LAorCQkJCQkgICAgICAgc3RydWN0IGVmaXZhcl9lbnRyeSwgbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWZpX3BzdG9yZV9jbG9zZShzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlzdHJ1Y3QgZWZpdmFycyAqZWZpdmFycyA9IHBzaS0+ZGF0YTsKKworCXNwaW5fdW5sb2NrKCZlZml2YXJzLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZWZpX3BzdG9yZV9yZWFkKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCisJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lc3BlYywgc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJZWZpX2d1aWRfdCB2ZW5kb3IgPSBMSU5VWF9FRklfQ1JBU0hfR1VJRDsKKwlzdHJ1Y3QgZWZpdmFycyAqZWZpdmFycyA9IHBzaS0+ZGF0YTsKKwljaGFyIG5hbWVbRFVNUF9OQU1FX0xFTl07CisJaW50IGk7CisJdW5zaWduZWQgaW50IHBhcnQsIHNpemU7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCisJd2hpbGUgKCZlZml2YXJzLT53YWxrX2VudHJ5LT5saXN0ICE9ICZlZml2YXJzLT5saXN0KSB7CisJCWlmICghZWZpX2d1aWRjbXAoZWZpdmFycy0+d2Fsa19lbnRyeS0+dmFyLlZlbmRvckd1aWQsCisJCQkJIHZlbmRvcikpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBEVU1QX05BTUVfTEVOOyBpKyspIHsKKwkJCQluYW1lW2ldID0gZWZpdmFycy0+d2Fsa19lbnRyeS0+dmFyLlZhcmlhYmxlTmFtZVtpXTsKKwkJCX0KKwkJCWlmIChzc2NhbmYobmFtZSwgImR1bXAtdHlwZSV1LSV1LSVsdSIsIHR5cGUsICZwYXJ0LCAmdGltZSkgPT0gMykgeworCQkJCSppZCA9IHBhcnQ7CisJCQkJdGltZXNwZWMtPnR2X3NlYyA9IHRpbWU7CisJCQkJdGltZXNwZWMtPnR2X25zZWMgPSAwOworCQkJCWdldF92YXJfZGF0YV9sb2NrZWQoZWZpdmFycywgJmVmaXZhcnMtPndhbGtfZW50cnktPnZhcik7CisJCQkJc2l6ZSA9IGVmaXZhcnMtPndhbGtfZW50cnktPnZhci5EYXRhU2l6ZTsKKwkJCQltZW1jcHkocHNpLT5idWYsIGVmaXZhcnMtPndhbGtfZW50cnktPnZhci5EYXRhLCBzaXplKTsKKwkJCQllZml2YXJzLT53YWxrX2VudHJ5ID0gbGlzdF9lbnRyeShlZml2YXJzLT53YWxrX2VudHJ5LT5saXN0Lm5leHQsCisJCQkJCSAgICAgICAgICAgc3RydWN0IGVmaXZhcl9lbnRyeSwgbGlzdCk7CisJCQkJcmV0dXJuIHNpemU7CisJCQl9CisJCX0KKwkJZWZpdmFycy0+d2Fsa19lbnRyeSA9IGxpc3RfZW50cnkoZWZpdmFycy0+d2Fsa19lbnRyeS0+bGlzdC5uZXh0LAorCQkJCQkJIHN0cnVjdCBlZml2YXJfZW50cnksIGxpc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBlZmlfcHN0b3JlX3dyaXRlKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdW5zaWduZWQgaW50IHBhcnQsCisJCQkgICAgc2l6ZV90IHNpemUsIHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCWNoYXIgbmFtZVtEVU1QX05BTUVfTEVOXTsKKwljaGFyIHN0dWJfbmFtZVtEVU1QX05BTUVfTEVOXTsKKwllZmlfY2hhcjE2X3QgZWZpX25hbWVbRFVNUF9OQU1FX0xFTl07CisJZWZpX2d1aWRfdCB2ZW5kb3IgPSBMSU5VWF9FRklfQ1JBU0hfR1VJRDsKKwlzdHJ1Y3QgZWZpdmFycyAqZWZpdmFycyA9IHBzaS0+ZGF0YTsKKwlzdHJ1Y3QgZWZpdmFyX2VudHJ5ICplbnRyeSwgKmZvdW5kID0gTlVMTDsKKwlpbnQgaTsKKworCXNwcmludGYoc3R1Yl9uYW1lLCAiZHVtcC10eXBlJXUtJXUtIiwgdHlwZSwgcGFydCk7CisJc3ByaW50ZihuYW1lLCAiJXMlbHUiLCBzdHViX25hbWUsIGdldF9zZWNvbmRzKCkpOworCisJc3Bpbl9sb2NrKCZlZml2YXJzLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBEVU1QX05BTUVfTEVOOyBpKyspCisJCWVmaV9uYW1lW2ldID0gc3R1Yl9uYW1lW2ldOworCisJLyoKKwkgKiBDbGVhbiB1cCBhbnkgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUKKwkgKi8KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZlZml2YXJzLT5saXN0LCBsaXN0KSB7CisJCWdldF92YXJfZGF0YV9sb2NrZWQoZWZpdmFycywgJmVudHJ5LT52YXIpOworCisJCWlmIChlZmlfZ3VpZGNtcChlbnRyeS0+dmFyLlZlbmRvckd1aWQsIHZlbmRvcikpCisJCQljb250aW51ZTsKKwkJaWYgKHV0ZjE2X3N0cm5jbXAoZW50cnktPnZhci5WYXJpYWJsZU5hbWUsIGVmaV9uYW1lLAorCQkJCSAgdXRmMTZfc3RybGVuKGVmaV9uYW1lKSkpCisJCQljb250aW51ZTsKKwkJLyogTmVlZHMgdG8gYmUgYSBwcmVmaXggKi8KKwkJaWYgKGVudHJ5LT52YXIuVmFyaWFibGVOYW1lW3V0ZjE2X3N0cmxlbihlZmlfbmFtZSldID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBmb3VuZCAqLworCQlmb3VuZCA9IGVudHJ5OworCQllZml2YXJzLT5vcHMtPnNldF92YXJpYWJsZShlbnRyeS0+dmFyLlZhcmlhYmxlTmFtZSwKKwkJCQkJICAgJmVudHJ5LT52YXIuVmVuZG9yR3VpZCwKKwkJCQkJICAgUFNUT1JFX0VGSV9BVFRSSUJVVEVTLAorCQkJCQkgICAwLCBOVUxMKTsKKwl9CisKKwlpZiAoZm91bmQpCisJCWxpc3RfZGVsKCZmb3VuZC0+bGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFVNUF9OQU1FX0xFTjsgaSsrKQorCQllZmlfbmFtZVtpXSA9IG5hbWVbaV07CisKKwllZml2YXJzLT5vcHMtPnNldF92YXJpYWJsZShlZmlfbmFtZSwgJnZlbmRvciwgUFNUT1JFX0VGSV9BVFRSSUJVVEVTLAorCQkJCSAgIHNpemUsIHBzaS0+YnVmKTsKKworCXNwaW5fdW5sb2NrKCZlZml2YXJzLT5sb2NrKTsKKworCWlmIChmb3VuZCkKKwkJZWZpdmFyX3VucmVnaXN0ZXIoZm91bmQpOworCisJaWYgKHNpemUpCisJCWVmaXZhcl9jcmVhdGVfc3lzZnNfZW50cnkoZWZpdmFycywKKwkJCQkJICB1dGYxNl9zdHJzaXplKGVmaV9uYW1lLAorCQkJCQkJCURVTVBfTkFNRV9MRU4gKiAyKSwKKwkJCQkJICBlZmlfbmFtZSwgJnZlbmRvcik7CisKKwlyZXR1cm4gcGFydDsKK307CisKK3N0YXRpYyBpbnQgZWZpX3BzdG9yZV9lcmFzZShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHU2NCBpZCwKKwkJCSAgICBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwllZmlfcHN0b3JlX3dyaXRlKHR5cGUsIGlkLCAwLCBwc2kpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGludCBlZmlfcHN0b3JlX29wZW4oc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWZpX3BzdG9yZV9jbG9zZShzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZWZpX3BzdG9yZV9yZWFkKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCisJCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1NjQgZWZpX3BzdG9yZV93cml0ZShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHVuc2lnbmVkIGludCBwYXJ0LAorCQkJICAgIHNpemVfdCBzaXplLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZmlfcHN0b3JlX2VyYXNlKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLAorCQkJICAgIHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcHN0b3JlX2luZm8gZWZpX3BzdG9yZV9pbmZvID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAiZWZpIiwKKwkub3BlbgkJPSBlZmlfcHN0b3JlX29wZW4sCisJLmNsb3NlCQk9IGVmaV9wc3RvcmVfY2xvc2UsCisJLnJlYWQJCT0gZWZpX3BzdG9yZV9yZWFkLAorCS53cml0ZQkJPSBlZmlfcHN0b3JlX3dyaXRlLAorCS5lcmFzZQkJPSBlZmlfcHN0b3JlX2VyYXNlLAorfTsKIAogc3RhdGljIHNzaXplX3QgZWZpdmFyX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKQEAgLTQxNCw4ICs2MjMsOCBAQAogCSAqIERvZXMgdGhpcyB2YXJpYWJsZSBhbHJlYWR5IGV4aXN0PwogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZWFyY2hfZWZpdmFyLCBuLCAmZWZpdmFycy0+bGlzdCwgbGlzdCkgewotCQlzdHJzaXplMSA9IHV0Zjhfc3Ryc2l6ZShzZWFyY2hfZWZpdmFyLT52YXIuVmFyaWFibGVOYW1lLCAxMDI0KTsKLQkJc3Ryc2l6ZTIgPSB1dGY4X3N0cnNpemUobmV3X3Zhci0+VmFyaWFibGVOYW1lLCAxMDI0KTsKKwkJc3Ryc2l6ZTEgPSB1dGYxNl9zdHJzaXplKHNlYXJjaF9lZml2YXItPnZhci5WYXJpYWJsZU5hbWUsIDEwMjQpOworCQlzdHJzaXplMiA9IHV0ZjE2X3N0cnNpemUobmV3X3Zhci0+VmFyaWFibGVOYW1lLCAxMDI0KTsKIAkJaWYgKHN0cnNpemUxID09IHN0cnNpemUyICYmCiAJCQkhbWVtY21wKCYoc2VhcmNoX2VmaXZhci0+dmFyLlZhcmlhYmxlTmFtZSksCiAJCQkJbmV3X3Zhci0+VmFyaWFibGVOYW1lLCBzdHJzaXplMSkgJiYKQEAgLTQ0Nyw4ICs2NTYsOCBAQAogCiAJLyogQ3JlYXRlIHRoZSBlbnRyeSBpbiBzeXNmcy4gIExvY2tpbmcgaXMgbm90IHJlcXVpcmVkIGhlcmUgKi8KIAlzdGF0dXMgPSBlZml2YXJfY3JlYXRlX3N5c2ZzX2VudHJ5KGVmaXZhcnMsCi0JCQkJCSAgIHV0Zjhfc3Ryc2l6ZShuZXdfdmFyLT5WYXJpYWJsZU5hbWUsCi0JCQkJCQkJMTAyNCksCisJCQkJCSAgIHV0ZjE2X3N0cnNpemUobmV3X3Zhci0+VmFyaWFibGVOYW1lLAorCQkJCQkJCSAxMDI0KSwKIAkJCQkJICAgbmV3X3Zhci0+VmFyaWFibGVOYW1lLAogCQkJCQkgICAmbmV3X3Zhci0+VmVuZG9yR3VpZCk7CiAJaWYgKHN0YXR1cykgewpAQCAtNDc3LDggKzY4Niw4IEBACiAJICogRG9lcyB0aGlzIHZhcmlhYmxlIGFscmVhZHkgZXhpc3Q/CiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlYXJjaF9lZml2YXIsIG4sICZlZml2YXJzLT5saXN0LCBsaXN0KSB7Ci0JCXN0cnNpemUxID0gdXRmOF9zdHJzaXplKHNlYXJjaF9lZml2YXItPnZhci5WYXJpYWJsZU5hbWUsIDEwMjQpOwotCQlzdHJzaXplMiA9IHV0Zjhfc3Ryc2l6ZShkZWxfdmFyLT5WYXJpYWJsZU5hbWUsIDEwMjQpOworCQlzdHJzaXplMSA9IHV0ZjE2X3N0cnNpemUoc2VhcmNoX2VmaXZhci0+dmFyLlZhcmlhYmxlTmFtZSwgMTAyNCk7CisJCXN0cnNpemUyID0gdXRmMTZfc3Ryc2l6ZShkZWxfdmFyLT5WYXJpYWJsZU5hbWUsIDEwMjQpOwogCQlpZiAoc3Ryc2l6ZTEgPT0gc3Ryc2l6ZTIgJiYKIAkJCSFtZW1jbXAoJihzZWFyY2hfZWZpdmFyLT52YXIuVmFyaWFibGVOYW1lKSwKIAkJCQlkZWxfdmFyLT5WYXJpYWJsZU5hbWUsIHN0cnNpemUxKSAmJgpAQCAtNzYzLDYgKzk3MiwxNiBAQAogCWlmIChlcnJvcikKIAkJdW5yZWdpc3Rlcl9lZml2YXJzKGVmaXZhcnMpOwogCisJZWZpdmFycy0+ZWZpX3BzdG9yZV9pbmZvID0gZWZpX3BzdG9yZV9pbmZvOworCisJZWZpdmFycy0+ZWZpX3BzdG9yZV9pbmZvLmJ1ZiA9IGttYWxsb2MoNDA5NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVmaXZhcnMtPmVmaV9wc3RvcmVfaW5mby5idWYpIHsKKwkJZWZpdmFycy0+ZWZpX3BzdG9yZV9pbmZvLmJ1ZnNpemUgPSAxMDI0OworCQllZml2YXJzLT5lZmlfcHN0b3JlX2luZm8uZGF0YSA9IGVmaXZhcnM7CisJCW11dGV4X2luaXQoJmVmaXZhcnMtPmVmaV9wc3RvcmVfaW5mby5idWZfbXV0ZXgpOworCQlwc3RvcmVfcmVnaXN0ZXIoJmVmaXZhcnMtPmVmaV9wc3RvcmVfaW5mbyk7CisJfQorCiBvdXQ6CiAJa2ZyZWUodmFyaWFibGVfbmFtZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL2dzbWkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL2dzbWkuYwppbmRleCA2ODgxMGZkLi5hYTgzZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2dvb2dsZS9nc21pLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9nb29nbGUvZ3NtaS5jCkBAIC00MjAsNyArNDIwLDcgQEAKIAogc3RhdGljIGVmaV9zdGF0dXNfdCBnc21pX3NldF92YXJpYWJsZShlZmlfY2hhcjE2X3QgKm5hbWUsCiAJCQkJICAgICAgZWZpX2d1aWRfdCAqdmVuZG9yLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXR0ciwKKwkJCQkgICAgICB1MzIgYXR0ciwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZSwKIAkJCQkgICAgICB2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwppbmRleCAzNjM0OTg2Li5kNTM5ZWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwaW8vS2NvbmZpZwpAQCAtMTAzLDYgKzEwMywyMiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4CiAKK2NvbmZpZyBHUElPX01TTV9WMQorCXRyaXN0YXRlICJRdWFsY29tbSBNU00gR1BJTyB2MSIKKwlkZXBlbmRzIG9uIEdQSU9MSUIgJiYgQVJDSF9NU00KKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCB0aGUgR1BJTyBpbnRlcmZhY2Ugb24gQVJNIHY2IGJhc2VkCisJICBRdWFsY29tbSBNU00gY2hpcHMuICBNb3N0IG9mIHRoZSBwaW5zIG9uIHRoZSBNU00gY2FuIGJlCisJICBzZWxlY3RlZCBmb3IgR1BJTywgYW5kIGFyZSBjb250cm9sbGVkIGJ5IHRoaXMgZHJpdmVyLgorCitjb25maWcgR1BJT19NU01fVjIKKwl0cmlzdGF0ZSAiUXVhbGNvbW0gTVNNIEdQSU8gdjIiCisJZGVwZW5kcyBvbiBHUElPTElCICYmIEFSQ0hfTVNNCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgdGhlIEdQSU8gaW50ZXJmYWNlIG9uIEFSTSB2NyBiYXNlZAorCSAgUXVhbGNvbW0gTVNNIGNoaXBzLiAgTW9zdCBvZiB0aGUgcGlucyBvbiB0aGUgTVNNIGNhbiBiZQorCSAgc2VsZWN0ZWQgZm9yIEdQSU8sIGFuZCBhcmUgY29udHJvbGxlZCBieSB0aGlzIGRyaXZlci4KKwogY29uZmlnIEdQSU9fTVhDCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gQVJDSF9NWEMKQEAgLTI4MCw2ICsyOTYsMTIgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR1BJT3MgZm91bmQgb24gdGhlIFRDMzU4OVgKIAkgIEkvTyBFeHBhbmRlci4KIAorY29uZmlnIEdQSU9fVFBTNjU5MTIKKwl0cmlzdGF0ZSAiVEkgVFBTNjU5MTIgR1BJTyIKKwlkZXBlbmRzIG9uIChNRkRfVFBTNjU5MTJfSTJDIHx8IE1GRF9UUFM2NTkxMl9TUEkpCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVFBTNjU5MTIgZ3BpbyBjaGlwCisKIGNvbmZpZyBHUElPX1RXTDQwMzAKIAl0cmlzdGF0ZSAiVFdMNDAzMCwgVFdMNTAzMCwgYW5kIFRQUzY1OXgwIEdQSU9zIgogCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggNzIwNzExMi4uOTU4ODk0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtMjcsNiArMjcsOCBAQAogb2JqLSQoQ09ORklHX0dQSU9fTUNQMjNTMDgpCSs9IGdwaW8tbWNwMjNzMDgubwogb2JqLSQoQ09ORklHX0dQSU9fTUxfSU9IKQkrPSBncGlvLW1sLWlvaC5vCiBvYmotJChDT05GSUdfR1BJT19NUEM1MjAwKQkrPSBncGlvLW1wYzUyMDAubworb2JqLSQoQ09ORklHX0dQSU9fTVNNX1YxKQkrPSBncGlvLW1zbS12MS5vCitvYmotJChDT05GSUdfR1BJT19NU01fVjIpCSs9IGdwaW8tbXNtLXYyLm8KIG9iai0kKENPTkZJR19HUElPX01YQykJCSs9IGdwaW8tbXhjLm8KIG9iai0kKENPTkZJR19HUElPX01YUykJCSs9IGdwaW8tbXhzLm8KIG9iai0kKENPTkZJR19QTEFUX05PTUFESUspCSs9IGdwaW8tbm9tYWRpay5vCkBAIC00OCw2ICs1MCw3IEBACiBvYmotJChDT05GSUdfQVJDSF9URUdSQSkJKz0gZ3Bpby10ZWdyYS5vCiBvYmotJChDT05GSUdfR1BJT19USU1CRVJEQUxFKQkrPSBncGlvLXRpbWJlcmRhbGUubwogb2JqLSQoQ09ORklHX0dQSU9fVFBTNjU5MTApCSs9IGdwaW8tdHBzNjU5MTAubworb2JqLSQoQ09ORklHX0dQSU9fVFBTNjU5MTIpCSs9IGdwaW8tdHBzNjU5MTIubwogb2JqLSQoQ09ORklHX0dQSU9fVFdMNDAzMCkJKz0gZ3Bpby10d2w0MDMwLm8KIG9iai0kKENPTkZJR19NQUNIX1UzMDApCQkrPSBncGlvLXUzMDAubwogb2JqLSQoQ09ORklHX0dQSU9fVUNCMTQwMCkJKz0gZ3Bpby11Y2IxNDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWFiODUwMC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tYWI4NTAwLmMKaW5kZXggZWQ3OTVlNi4uMDUwYzA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tYWI4NTAwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tYWI4NTAwLmMKQEAgLTUxNiw1ICs1MTYsNSBAQAogCiBNT0RVTEVfQVVUSE9SKCJCSUJFSyBCQVNVIDxiaWJlay5iYXN1QHN0ZXJpY3Nzb24uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgYWxsb3dzIHRvIHVzZSBBQjg1MDAgdW51c2VkIHBpbnMgdG8gYmUgdXNlZCBhcyBHUElPIik7Ci1NT0RVTEVfQUxJQVMoIkFCODUwMCBHUElPIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphYjg1MDAtZ3BpbyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tZ2VuZXJpYy5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ2VuZXJpYy5jCmluZGV4IDIzMTcxNGQuLjRlMjQ0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19kZXZleGl0IGJncGlvX3JlbW92ZShzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjKQoraW50IGJncGlvX3JlbW92ZShzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjKQogewogCWludCBlcnIgPSBncGlvY2hpcF9yZW1vdmUoJmJnYy0+Z2MpOwogCkBAIC0zNjEsMTUgKzM2MSwxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmdwaW9fcmVtb3ZlKTsKIAotaW50IF9fZGV2aW5pdCBiZ3Bpb19pbml0KHN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MsCi0JCQkgc3RydWN0IGRldmljZSAqZGV2LAotCQkJIHVuc2lnbmVkIGxvbmcgc3osCi0JCQkgdm9pZCBfX2lvbWVtICpkYXQsCi0JCQkgdm9pZCBfX2lvbWVtICpzZXQsCi0JCQkgdm9pZCBfX2lvbWVtICpjbHIsCi0JCQkgdm9pZCBfX2lvbWVtICpkaXJvdXQsCi0JCQkgdm9pZCBfX2lvbWVtICpkaXJpbiwKLQkJCSBib29sIGJpZ19lbmRpYW4pCitpbnQgYmdwaW9faW5pdChzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJICAgICAgIHVuc2lnbmVkIGxvbmcgc3osIHZvaWQgX19pb21lbSAqZGF0LCB2b2lkIF9faW9tZW0gKnNldCwKKwkgICAgICAgdm9pZCBfX2lvbWVtICpjbHIsIHZvaWQgX19pb21lbSAqZGlyb3V0LCB2b2lkIF9faW9tZW0gKmRpcmluLAorCSAgICAgICBib29sIGJpZ19lbmRpYW4pCiB7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbXNtLXYxLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tc20tdjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE0ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbXNtLXYxLmMKQEAgLTAsMCArMSw2MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaC9tc21fZ3Bpb211eC5oPgorI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CisKKy8qIHNlZSA4MC1WQTczNi0yIFJldiBDIHBwIDY5NS03NTEKKyoqCisqKiBUaGVzZSBhcmUgYWN0dWFsbHkgdGhlICpzaGFkb3cqIGdwaW8gcmVnaXN0ZXJzLCBzaW5jZSB0aGUKKyoqIHJlYWwgb25lcyAod2hpY2ggYWxsb3cgZnVsbCBhY2Nlc3MpIGFyZSBvbmx5IGF2YWlsYWJsZSB0byB0aGUKKyoqIEFSTTkgc2lkZSBvZiB0aGUgd29ybGQuCisqKgorKiogU2luY2UgdGhlIF9CQVNFIG5lZWQgdG8gYmUgcGFnZS1hbGlnbmVkIHdoZW4gd2UncmUgbWFwcGluZyB0aGVtCisqKiB0byB2aXJ0dWFsIGFkZHJlc3NlcywgYWRqdXN0IGZvciB0aGUgYWRkaXRpb25hbCBvZmZzZXQgaW4gdGhlc2UKKyoqIG1hY3Jvcy4KKyovCisKKyNkZWZpbmUgTVNNX0dQSU8xX1JFRyhvZmYpIChNU01fR1BJTzFfQkFTRSArIChvZmYpKQorI2RlZmluZSBNU01fR1BJTzJfUkVHKG9mZikgKE1TTV9HUElPMl9CQVNFICsgMHg0MDAgKyAob2ZmKSkKKyNkZWZpbmUgTVNNX0dQSU8xX1NIQURPV19SRUcob2ZmKSAoTVNNX0dQSU8xX0JBU0UgKyAweDgwMCArIChvZmYpKQorI2RlZmluZSBNU01fR1BJTzJfU0hBRE9XX1JFRyhvZmYpIChNU01fR1BJTzJfQkFTRSArIDB4QzAwICsgKG9mZikpCisKKy8qCisgKiBNU003WDAwIHJlZ2lzdGVycworICovCisvKiBvdXRwdXQgdmFsdWUgKi8KKyNkZWZpbmUgTVNNN1gwMF9HUElPX09VVF8wCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4MDApICAvKiBncGlvICAxNS0wICAqLworI2RlZmluZSBNU003WDAwX0dQSU9fT1VUXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHgwMCkgIC8qIGdwaW8gIDQyLTE2ICovCisjZGVmaW5lIE1TTTdYMDBfR1BJT19PVVRfMglNU01fR1BJTzFfU0hBRE9XX1JFRygweDA0KSAgLyogZ3BpbyAgNjctNDMgKi8KKyNkZWZpbmUgTVNNN1gwMF9HUElPX09VVF8zCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4MDgpICAvKiBncGlvICA5NC02OCAqLworI2RlZmluZSBNU003WDAwX0dQSU9fT1VUXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgwQykgIC8qIGdwaW8gMTA2LTk1ICovCisjZGVmaW5lIE1TTTdYMDBfR1BJT19PVVRfNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweDUwKSAgLyogZ3BpbyAxMDctMTIxICovCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBNU003WDAwX0dQSU9fT0VfMAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDEwKQorI2RlZmluZSBNU003WDAwX0dQSU9fT0VfMQlNU01fR1BJTzJfU0hBRE9XX1JFRygweDA4KQorI2RlZmluZSBNU003WDAwX0dQSU9fT0VfMglNU01fR1BJTzFfU0hBRE9XX1JFRygweDE0KQorI2RlZmluZSBNU003WDAwX0dQSU9fT0VfMwlNU01fR1BJTzFfU0hBRE9XX1JFRygweDE4KQorI2RlZmluZSBNU003WDAwX0dQSU9fT0VfNAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDFDKQorI2RlZmluZSBNU003WDAwX0dQSU9fT0VfNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweDU0KQorCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIGlucHV0IHJlYWQgKi8KKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzNCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHgyMCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzOCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzQykKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg0MCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg0NCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPWVkZ2UgMD1sZXZlbCBpbnRlcnJ1cCAqLworI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfMAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDYwKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfMQlNU01fR1BJTzJfU0hBRE9XX1JFRygweDUwKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfMglNU01fR1BJTzFfU0hBRE9XX1JFRygweDY0KQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfMwlNU01fR1BJTzFfU0hBRE9XX1JFRygweDY4KQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfNAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDZDKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VER0VfNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweEMwKQorCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9cG9zaXRpdmUgMD1uZWdhdGl2ZSAqLworI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX1BPU18wCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NzApCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfUE9TXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHg1OCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9QT1NfMglNU01fR1BJTzFfU0hBRE9XX1JFRygweDc0KQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX1BPU18zCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NzgpCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfUE9TXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg3QykKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9QT1NfNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweEJDKQorCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9FTl8wCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4ODApCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfRU5fMQlNU01fR1BJTzJfU0hBRE9XX1JFRygweDYwKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VOXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg4NCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9FTl8zCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4ODgpCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfRU5fNAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDhDKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0VOXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhCOCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCB3cml0ZSAxIHRvIGNsZWFyIGludGVycnVwdCAqLworI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0NMRUFSXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg5MCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9DTEVBUl8xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4NjgpCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfQ0xFQVJfMglNU01fR1BJTzFfU0hBRE9XX1JFRygweDk0KQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX0NMRUFSXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg5OCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9DTEVBUl80CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4OUMpCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfQ0xFQVJfNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweEI0KQorCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9aW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9TVEFUVVNfMAlNU01fR1BJTzFfU0hBRE9XX1JFRygweEEwKQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX1NUQVRVU18xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4NzApCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfU1RBVFVTXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhBNCkKKyNkZWZpbmUgTVNNN1gwMF9HUElPX0lOVF9TVEFUVVNfMwlNU01fR1BJTzFfU0hBRE9XX1JFRygweEE4KQorI2RlZmluZSBNU003WDAwX0dQSU9fSU5UX1NUQVRVU180CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4QUMpCisjZGVmaW5lIE1TTTdYMDBfR1BJT19JTlRfU1RBVFVTXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhCMCkKKworLyoKKyAqIFFTRDhYNTAgcmVnaXN0ZXJzCisgKi8KKy8qIG91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgwMCkgIC8qIGdwaW8gIDE1LTAgICAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHgwMCkgIC8qIGdwaW8gIDQyLTE2ICAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgwNCkgIC8qIGdwaW8gIDY3LTQzICAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgwOCkgIC8qIGdwaW8gIDk0LTY4ICAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgwQykgIC8qIGdwaW8gMTAzLTk1ICAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxMCkgIC8qIGdwaW8gMTIxLTEwNCAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzYJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxNCkgIC8qIGdwaW8gMTUyLTEyMiAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fT1VUXzcJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxOCkgIC8qIGdwaW8gMTY0LTE1MyAqLworCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIG91dHB1dCBlbmFibGUgKi8KKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgyMCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHgwOCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgyNCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgyOCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgyQykKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzMCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzYJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzNCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX09FXzcJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgzOCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBpbnB1dCByZWFkICovCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl8wCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NTApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl8xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4MjApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl8yCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NTQpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl8zCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NTgpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl80CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NUMpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl81CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NjApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl82CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NjQpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTl83CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4NjgpCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1lZGdlIDA9bGV2ZWwgaW50ZXJydXAgKi8KKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg3MCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzEJTVNNX0dQSU8yX1NIQURPV19SRUcoMHg1MCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg3NCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg3OCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzQJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg3QykKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg4MCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzYJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg4NCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FREdFXzcJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg4OCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPXBvc2l0aXZlIDA9bmVnYXRpdmUgKi8KKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9QT1NfMAlNU01fR1BJTzFfU0hBRE9XX1JFRygweDkwKQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX1BPU18xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4NTgpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfUE9TXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHg5NCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9QT1NfMwlNU01fR1BJTzFfU0hBRE9XX1JFRygweDk4KQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX1BPU180CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4OUMpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfUE9TXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhBMCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9QT1NfNglNU01fR1BJTzFfU0hBRE9XX1JFRygweEE0KQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX1BPU183CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4QTgpCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX0VOXzAJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhCMCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FTl8xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4NjApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfRU5fMglNU01fR1BJTzFfU0hBRE9XX1JFRygweEI0KQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX0VOXzMJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhCOCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FTl80CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4QkMpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfRU5fNQlNU01fR1BJTzFfU0hBRE9XX1JFRygweEMwKQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX0VOXzYJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhDNCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9FTl83CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4QzgpCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgd3JpdGUgMSB0byBjbGVhciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9DTEVBUl8wCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4RDApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfQ0xFQVJfMQlNU01fR1BJTzJfU0hBRE9XX1JFRygweDY4KQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX0NMRUFSXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhENCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9DTEVBUl8zCU1TTV9HUElPMV9TSEFET1dfUkVHKDB4RDgpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfQ0xFQVJfNAlNU01fR1BJTzFfU0hBRE9XX1JFRygweERDKQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX0NMRUFSXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhFMCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9DTEVBUl82CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4RTQpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfQ0xFQVJfNwlNU01fR1BJTzFfU0hBRE9XX1JFRygweEU4KQorCisvKiBzYW1lIHBpbiBtYXAgYXMgYWJvdmUsIDE9aW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9TVEFUVVNfMAlNU01fR1BJTzFfU0hBRE9XX1JFRygweEYwKQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX1NUQVRVU18xCU1TTV9HUElPMl9TSEFET1dfUkVHKDB4NzApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfU1RBVFVTXzIJTVNNX0dQSU8xX1NIQURPV19SRUcoMHhGNCkKKyNkZWZpbmUgUVNEOFg1MF9HUElPX0lOVF9TVEFUVVNfMwlNU01fR1BJTzFfU0hBRE9XX1JFRygweEY4KQorI2RlZmluZSBRU0Q4WDUwX0dQSU9fSU5UX1NUQVRVU180CU1TTV9HUElPMV9TSEFET1dfUkVHKDB4RkMpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfU1RBVFVTXzUJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxMDApCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfU1RBVFVTXzYJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxMDQpCisjZGVmaW5lIFFTRDhYNTBfR1BJT19JTlRfU1RBVFVTXzcJTVNNX0dQSU8xX1NIQURPV19SRUcoMHgxMDgpCisKKy8qCisgKiBNU003WDMwIHJlZ2lzdGVycworICovCisvKiBvdXRwdXQgdmFsdWUgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF8wCU1TTV9HUElPMV9SRUcoMHgwMCkgICAvKiBncGlvICAxNS0wICAgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF8xCU1TTV9HUElPMl9SRUcoMHgwMCkgICAvKiBncGlvICA0My0xNiAgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF8yCU1TTV9HUElPMV9SRUcoMHgwNCkgICAvKiBncGlvICA2Ny00NCAgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF8zCU1TTV9HUElPMV9SRUcoMHgwOCkgICAvKiBncGlvICA5NC02OCAgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF80CU1TTV9HUElPMV9SRUcoMHgwQykgICAvKiBncGlvIDEwNi05NSAgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF81CU1TTV9HUElPMV9SRUcoMHg1MCkgICAvKiBncGlvIDEzMy0xMDcgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF82CU1TTV9HUElPMV9SRUcoMHhDNCkgICAvKiBncGlvIDE1MC0xMzQgKi8KKyNkZWZpbmUgTVNNN1gzMF9HUElPX09VVF83CU1TTV9HUElPMV9SRUcoMHgyMTQpICAvKiBncGlvIDE4MS0xNTEgKi8KKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBvdXRwdXQgZW5hYmxlICovCisjZGVmaW5lIE1TTTdYMzBfR1BJT19PRV8wCU1TTV9HUElPMV9SRUcoMHgxMCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX09FXzEJTVNNX0dQSU8yX1JFRygweDA4KQorI2RlZmluZSBNU003WDMwX0dQSU9fT0VfMglNU01fR1BJTzFfUkVHKDB4MTQpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19PRV8zCU1TTV9HUElPMV9SRUcoMHgxOCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX09FXzQJTVNNX0dQSU8xX1JFRygweDFDKQorI2RlZmluZSBNU003WDMwX0dQSU9fT0VfNQlNU01fR1BJTzFfUkVHKDB4NTQpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19PRV82CU1TTV9HUElPMV9SRUcoMHhDOCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX09FXzcJTVNNX0dQSU8xX1JFRygweDIxOCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCBpbnB1dCByZWFkICovCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTl8wCU1TTV9HUElPMV9SRUcoMHgzNCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOXzEJTVNNX0dQSU8yX1JFRygweDIwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5fMglNU01fR1BJTzFfUkVHKDB4MzgpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTl8zCU1TTV9HUElPMV9SRUcoMHgzQykKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOXzQJTVNNX0dQSU8xX1JFRygweDQwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5fNQlNU01fR1BJTzFfUkVHKDB4NDQpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTl82CU1TTV9HUElPMV9SRUcoMHhDQykKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOXzcJTVNNX0dQSU8xX1JFRygweDIxQykKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPWVkZ2UgMD1sZXZlbCBpbnRlcnJ1cCAqLworI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VER0VfMAlNU01fR1BJTzFfUkVHKDB4NjApCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfRURHRV8xCU1TTV9HUElPMl9SRUcoMHg1MCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9FREdFXzIJTVNNX0dQSU8xX1JFRygweDY0KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VER0VfMwlNU01fR1BJTzFfUkVHKDB4NjgpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfRURHRV80CU1TTV9HUElPMV9SRUcoMHg2QykKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9FREdFXzUJTVNNX0dQSU8xX1JFRygweEMwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VER0VfNglNU01fR1BJTzFfUkVHKDB4RDApCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfRURHRV83CU1TTV9HUElPMV9SRUcoMHgyNDApCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgMT1wb3NpdGl2ZSAwPW5lZ2F0aXZlICovCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfUE9TXzAJTVNNX0dQSU8xX1JFRygweDcwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1BPU18xCU1TTV9HUElPMl9SRUcoMHg1OCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9QT1NfMglNU01fR1BJTzFfUkVHKDB4NzQpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfUE9TXzMJTVNNX0dQSU8xX1JFRygweDc4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1BPU180CU1TTV9HUElPMV9SRUcoMHg3QykKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9QT1NfNQlNU01fR1BJTzFfUkVHKDB4QkMpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfUE9TXzYJTVNNX0dQSU8xX1JFRygweEQ0KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1BPU183CU1TTV9HUElPMV9SRUcoMHgyMjgpCisKKy8qIHNhbWUgcGluIG1hcCBhcyBhYm92ZSwgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzAJTVNNX0dQSU8xX1JFRygweDgwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzEJTVNNX0dQSU8yX1JFRygweDYwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzIJTVNNX0dQSU8xX1JFRygweDg0KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzMJTVNNX0dQSU8xX1JFRygweDg4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzQJTVNNX0dQSU8xX1JFRygweDhDKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzUJTVNNX0dQSU8xX1JFRygweEI4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzYJTVNNX0dQSU8xX1JFRygweEQ4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0VOXzcJTVNNX0dQSU8xX1JFRygweDIyQykKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCB3cml0ZSAxIHRvIGNsZWFyIGludGVycnVwdCAqLworI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzAJTVNNX0dQSU8xX1JFRygweDkwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzEJTVNNX0dQSU8yX1JFRygweDY4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzIJTVNNX0dQSU8xX1JFRygweDk0KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzMJTVNNX0dQSU8xX1JFRygweDk4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzQJTVNNX0dQSU8xX1JFRygweDlDKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzUJTVNNX0dQSU8xX1JFRygweEI0KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzYJTVNNX0dQSU8xX1JFRygweERDKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX0NMRUFSXzcJTVNNX0dQSU8xX1JFRygweDIzMCkKKworLyogc2FtZSBwaW4gbWFwIGFzIGFib3ZlLCAxPWludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfU1RBVFVTXzAJTVNNX0dQSU8xX1JFRygweEEwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1NUQVRVU18xCU1TTV9HUElPMl9SRUcoMHg3MCkKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9TVEFUVVNfMglNU01fR1BJTzFfUkVHKDB4QTQpCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfU1RBVFVTXzMJTVNNX0dQSU8xX1JFRygweEE4KQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1NUQVRVU180CU1TTV9HUElPMV9SRUcoMHhBQykKKyNkZWZpbmUgTVNNN1gzMF9HUElPX0lOVF9TVEFUVVNfNQlNU01fR1BJTzFfUkVHKDB4QjApCisjZGVmaW5lIE1TTTdYMzBfR1BJT19JTlRfU1RBVFVTXzYJTVNNX0dQSU8xX1JFRygweEUwKQorI2RlZmluZSBNU003WDMwX0dQSU9fSU5UX1NUQVRVU183CU1TTV9HUElPMV9SRUcoMHgyMzQpCisKKyNkZWZpbmUgRklSU1RfR1BJT19JUlEgTVNNX0dQSU9fVE9fSU5UKDApCisKKyNkZWZpbmUgTVNNX0dQSU9fQkFOSyhzb2MsIGJhbmssIGZpcnN0LCBsYXN0KQkJCQlcCisJewkJCQkJCQkJXAorCQkucmVncyA9IHsJCQkJCQlcCisJCQkub3V0ID0gICAgICAgICBzb2MjI19HUElPX09VVF8jI2JhbmssCQlcCisJCQkuaW4gPSAgICAgICAgICBzb2MjI19HUElPX0lOXyMjYmFuaywJCVwKKwkJCS5pbnRfc3RhdHVzID0gIHNvYyMjX0dQSU9fSU5UX1NUQVRVU18jI2JhbmssCVwKKwkJCS5pbnRfY2xlYXIgPSAgIHNvYyMjX0dQSU9fSU5UX0NMRUFSXyMjYmFuaywJXAorCQkJLmludF9lbiA9ICAgICAgc29jIyNfR1BJT19JTlRfRU5fIyNiYW5rLAlcCisJCQkuaW50X2VkZ2UgPSAgICBzb2MjI19HUElPX0lOVF9FREdFXyMjYmFuaywJXAorCQkJLmludF9wb3MgPSAgICAgc29jIyNfR1BJT19JTlRfUE9TXyMjYmFuaywJXAorCQkJLm9lID0gICAgICAgICAgc29jIyNfR1BJT19PRV8jI2JhbmssCQlcCisJCX0sCQkJCQkJCVwKKwkJLmNoaXAgPSB7CQkJCQkJXAorCQkJLmJhc2UgPSAoZmlyc3QpLAkJCQlcCisJCQkubmdwaW8gPSAobGFzdCkgLSAoZmlyc3QpICsgMSwJCQlcCisJCQkuZ2V0ID0gbXNtX2dwaW9fZ2V0LAkJCQlcCisJCQkuc2V0ID0gbXNtX2dwaW9fc2V0LAkJCQlcCisJCQkuZGlyZWN0aW9uX2lucHV0ID0gbXNtX2dwaW9fZGlyZWN0aW9uX2lucHV0LAlcCisJCQkuZGlyZWN0aW9uX291dHB1dCA9IG1zbV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCVwKKwkJCS50b19pcnEgPSBtc21fZ3Bpb190b19pcnEsCQkJXAorCQkJLnJlcXVlc3QgPSBtc21fZ3Bpb19yZXF1ZXN0LAkJCVwKKwkJCS5mcmVlID0gbXNtX2dwaW9fZnJlZSwJCQkJXAorCQl9CQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUiAxCisKK3N0cnVjdCBtc21fZ3Bpb19yZWdzIHsKKwl2b2lkIF9faW9tZW0gKm91dDsKKwl2b2lkIF9faW9tZW0gKmluOworCXZvaWQgX19pb21lbSAqaW50X3N0YXR1czsKKwl2b2lkIF9faW9tZW0gKmludF9jbGVhcjsKKwl2b2lkIF9faW9tZW0gKmludF9lbjsKKwl2b2lkIF9faW9tZW0gKmludF9lZGdlOworCXZvaWQgX19pb21lbSAqaW50X3BvczsKKwl2b2lkIF9faW9tZW0gKm9lOworfTsKKworc3RydWN0IG1zbV9ncGlvX2NoaXAgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXN0cnVjdCBtc21fZ3Bpb19yZWdzCXJlZ3M7CisjaWYgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUgorCXVuc2lnbmVkICAgICAgICAgICAgICAgIGludF9zdGF0dXNfY29weTsKKyNlbmRpZgorCXVuc2lnbmVkIGludCAgICAgICAgICAgIGJvdGhfZWRnZV9kZXRlY3Q7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgaW50X2VuYWJsZVsyXTsgLyogMDogYXdha2UsIDE6IHNsZWVwICovCit9OworCitzdGF0aWMgaW50IG1zbV9ncGlvX3dyaXRlKHN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCwKKwkJCSAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBvbikKK3sKKwl1bnNpZ25lZCBtYXNrID0gQklUKG9mZnNldCk7CisJdW5zaWduZWQgdmFsOworCisJdmFsID0gcmVhZGwobXNtX2NoaXAtPnJlZ3Mub3V0KTsKKwlpZiAob24pCisJCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5vdXQpOworCWVsc2UKKwkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5vdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdChzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXApCit7CisJaW50IGxvb3BfbGltaXQgPSAxMDA7CisJdW5zaWduZWQgcG9sLCB2YWwsIHZhbDIsIGludHN0YXQ7CisJZG8geworCQl2YWwgPSByZWFkbChtc21fY2hpcC0+cmVncy5pbik7CisJCXBvbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9wb3MpOworCQlwb2wgPSAocG9sICYgfm1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0KSB8CisJCSAgICAgICh+dmFsICYgbXNtX2NoaXAtPmJvdGhfZWRnZV9kZXRlY3QpOworCQl3cml0ZWwocG9sLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKKwkJaW50c3RhdCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9zdGF0dXMpOworCQl2YWwyID0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW4pOworCQlpZiAoKCh2YWwgXiB2YWwyKSAmIG1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0ICYgfmludHN0YXQpID09IDApCisJCQlyZXR1cm47CisJfSB3aGlsZSAobG9vcF9saW1pdC0tID4gMCk7CisJcHJpbnRrKEtFUk5fRVJSICJtc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdCwgIgorCSAgICAgICAiZmFpbGVkIHRvIHJlYWNoIHN0YWJsZSBzdGF0ZSAleCAhPSAleFxuIiwgdmFsLCB2YWwyKTsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb19jbGVhcl9kZXRlY3Rfc3RhdHVzKHN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGJpdCA9IEJJVChvZmZzZXQpOworCisjaWYgTVNNX0dQSU9fQlJPS0VOX0lOVF9DTEVBUgorCS8qIFNhdmUgaW50ZXJydXB0cyB0aGF0IGFscmVhZHkgdHJpZ2dlcmVkIGJlZm9yZSB3ZSBsb29zZSB0aGVtLiAqLworCS8qIEFueSBpbnRlcnJ1cHQgdGhhdCB0cmlnZ2VycyBiZXR3ZWVuIHRoZSByZWFkIG9mIGludF9zdGF0dXMgKi8KKwkvKiBhbmQgdGhlIHdyaXRlIHRvIGludF9jbGVhciB3aWxsIHN0aWxsIGJlIGxvc3QgdGhvdWdoLiAqLworCW1zbV9jaGlwLT5pbnRfc3RhdHVzX2NvcHkgfD0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X3N0YXR1cyk7CisJbXNtX2NoaXAtPmludF9zdGF0dXNfY29weSAmPSB+Yml0OworI2VuZGlmCisJd3JpdGVsKGJpdCwgbXNtX2NoaXAtPnJlZ3MuaW50X2NsZWFyKTsKKwltc21fZ3Bpb191cGRhdGVfYm90aF9lZGdlX2RldGVjdChtc21fY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwltc21fY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXNtX2dwaW9fY2hpcCwgY2hpcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworCXdyaXRlbChyZWFkbChtc21fY2hpcC0+cmVncy5vZSkgJiB+QklUKG9mZnNldCksIG1zbV9jaGlwLT5yZWdzLm9lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXNtX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwltc21fY2hpcCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbXNtX2dwaW9fY2hpcCwgY2hpcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworCW1zbV9ncGlvX3dyaXRlKG1zbV9jaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwl3cml0ZWwocmVhZGwobXNtX2NoaXAtPnJlZ3Mub2UpIHwgQklUKG9mZnNldCksIG1zbV9jaGlwLT5yZWdzLm9lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcDsKKworCW1zbV9jaGlwID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtc21fZ3Bpb19jaGlwLCBjaGlwKTsKKwlyZXR1cm4gKHJlYWRsKG1zbV9jaGlwLT5yZWdzLmluKSAmICgxVSA8PCBvZmZzZXQpKSA/IDEgOiAwOworfQorCitzdGF0aWMgdm9pZCBtc21fZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9jaGlwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJbXNtX2NoaXAgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1zbV9ncGlvX2NoaXAsIGNoaXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKwltc21fZ3Bpb193cml0ZShtc21fY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXNtX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gTVNNX0dQSU9fVE9fSU5UKGNoaXAtPmJhc2UgKyBvZmZzZXQpOworfQorCisjaWZkZWYgQ09ORklHX01TTV9HUElPTVVYCitzdGF0aWMgaW50IG1zbV9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBtc21fZ3Bpb211eF9nZXQoY2hpcC0+YmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCW1zbV9ncGlvbXV4X3B1dChjaGlwLT5iYXNlICsgb2Zmc2V0KTsKK30KKyNlbHNlCisjZGVmaW5lIG1zbV9ncGlvX3JlcXVlc3QgTlVMTAorI2RlZmluZSBtc21fZ3Bpb19mcmVlIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9ncGlvX2NoaXBzOworc3RhdGljIGludCBtc21fZ3Bpb19jb3VudDsKKworc3RhdGljIHN0cnVjdCBtc21fZ3Bpb19jaGlwIG1zbV9ncGlvX2NoaXBzX21zbTd4MDFbXSA9IHsKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDAsICAgMCwgIDE1KSwKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDEsICAxNiwgIDQyKSwKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDIsICA0MywgIDY3KSwKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDMsICA2OCwgIDk0KSwKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDQsICA5NSwgMTA2KSwKKwlNU01fR1BJT19CQU5LKE1TTTdYMDAsIDUsIDEwNywgMTIxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXNtX2dwaW9fY2hpcCBtc21fZ3Bpb19jaGlwc19tc203eDMwW10gPSB7CisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCAwLCAgIDAsICAxNSksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCAxLCAgMTYsICA0MyksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCAyLCAgNDQsICA2NyksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCAzLCAgNjgsICA5NCksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCA0LCAgOTUsIDEwNiksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCA1LCAxMDcsIDEzMyksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCA2LCAxMzQsIDE1MCksCisJTVNNX0dQSU9fQkFOSyhNU003WDMwLCA3LCAxNTEsIDE4MSksCit9OworCitzdGF0aWMgc3RydWN0IG1zbV9ncGlvX2NoaXAgbXNtX2dwaW9fY2hpcHNfcXNkOHg1MFtdID0geworCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgMCwgICAwLCAgMTUpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgMSwgIDE2LCAgNDIpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgMiwgIDQzLCAgNjcpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgMywgIDY4LCAgOTQpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgNCwgIDk1LCAxMDMpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgNSwgMTA0LCAxMjEpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgNiwgMTIyLCAxNTIpLAorCU1TTV9HUElPX0JBTksoUVNEOFg1MCwgNywgMTUzLCAxNjQpLAorfTsKKworc3RhdGljIHZvaWQgbXNtX2dwaW9faXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IG1zbV9ncGlvX2NoaXAgKm1zbV9jaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworCW1zbV9ncGlvX2NsZWFyX2RldGVjdF9zdGF0dXMobXNtX2NoaXAsCisJCQkJICAgICBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBvZmZzZXQgPSBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKwkvKiBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUgYWxzbyBsYXRjaGVkICovCisJaWYgKCEocmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X2VkZ2UpICYgQklUKG9mZnNldCkpKQorCQltc21fZ3Bpb19jbGVhcl9kZXRlY3Rfc3RhdHVzKG1zbV9jaGlwLCBvZmZzZXQpOworCW1zbV9jaGlwLT5pbnRfZW5hYmxlWzBdICY9IH5CSVQob2Zmc2V0KTsKKwl3cml0ZWwobXNtX2NoaXAtPmludF9lbmFibGVbMF0sIG1zbV9jaGlwLT5yZWdzLmludF9lbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIG9mZnNldCA9IGQtPmlycSAtIGdwaW9fdG9faXJxKG1zbV9jaGlwLT5jaGlwLmJhc2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworCS8qIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGFyZSBhbHNvIGxhdGNoZWQgKi8KKwlpZiAoIShyZWFkbChtc21fY2hpcC0+cmVncy5pbnRfZWRnZSkgJiBCSVQob2Zmc2V0KSkpCisJCW1zbV9ncGlvX2NsZWFyX2RldGVjdF9zdGF0dXMobXNtX2NoaXAsIG9mZnNldCk7CisJbXNtX2NoaXAtPmludF9lbmFibGVbMF0gfD0gQklUKG9mZnNldCk7CisJd3JpdGVsKG1zbV9jaGlwLT5pbnRfZW5hYmxlWzBdLCBtc21fY2hpcC0+cmVncy5pbnRfZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1zbV9ncGlvX2lycV9zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBvbikKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBvZmZzZXQgPSBkLT5pcnEgLSBncGlvX3RvX2lycShtc21fY2hpcC0+Y2hpcC5iYXNlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKworCWlmIChvbikKKwkJbXNtX2NoaXAtPmludF9lbmFibGVbMV0gfD0gQklUKG9mZnNldCk7CisJZWxzZQorCQltc21fY2hpcC0+aW50X2VuYWJsZVsxXSAmPSB+QklUKG9mZnNldCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc21fY2hpcC0+bG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc21fZ3Bpb19pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0cnVjdCBtc21fZ3Bpb19jaGlwICptc21fY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIG9mZnNldCA9IGQtPmlycSAtIGdwaW9fdG9faXJxKG1zbV9jaGlwLT5jaGlwLmJhc2UpOworCXVuc2lnbmVkIHZhbCwgbWFzayA9IEJJVChvZmZzZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zbV9jaGlwLT5sb2NrLCBpcnFfZmxhZ3MpOworCXZhbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9lZGdlKTsKKwlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfRURHRV9CT1RIKSB7CisJCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfZWRnZSk7CisJCV9faXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLT5pcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfZWRnZSk7CisJCV9faXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KKwlpZiAoKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7CisJCW1zbV9jaGlwLT5ib3RoX2VkZ2VfZGV0ZWN0IHw9IG1hc2s7CisJCW1zbV9ncGlvX3VwZGF0ZV9ib3RoX2VkZ2VfZGV0ZWN0KG1zbV9jaGlwKTsKKwl9IGVsc2UgeworCQltc21fY2hpcC0+Ym90aF9lZGdlX2RldGVjdCAmPSB+bWFzazsKKwkJdmFsID0gcmVhZGwobXNtX2NoaXAtPnJlZ3MuaW50X3Bvcyk7CisJCWlmIChmbG93X3R5cGUgJiAoSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9ISUdIKSkKKwkJCXdyaXRlbCh2YWwgfCBtYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKKwkJZWxzZQorCQkJd3JpdGVsKHZhbCAmIH5tYXNrLCBtc21fY2hpcC0+cmVncy5pbnRfcG9zKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNtX2NoaXAtPmxvY2ssIGlycV9mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1zbV9ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpbnQgaSwgaiwgbWFzazsKKwl1bnNpZ25lZCB2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXNtX2dwaW9fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgbXNtX2dwaW9fY2hpcCAqbXNtX2NoaXAgPSAmbXNtX2dwaW9fY2hpcHNbaV07CisJCXZhbCA9IHJlYWRsKG1zbV9jaGlwLT5yZWdzLmludF9zdGF0dXMpOworCQl2YWwgJj0gbXNtX2NoaXAtPmludF9lbmFibGVbMF07CisJCXdoaWxlICh2YWwpIHsKKwkJCW1hc2sgPSB2YWwgJiAtdmFsOworCQkJaiA9IGZscyhtYXNrKSAtIDE7CisJCQkvKiBwcmludGsoIiVzICUwOHggJTA4eCBiaXQgJWQgZ3BpbyAlZCBpcnEgJWRcbiIsCisJCQkJX19mdW5jX18sIHYsIG0sIGosIG1zbV9jaGlwLT5jaGlwLnN0YXJ0ICsgaiwKKwkJCQlGSVJTVF9HUElPX0lSUSArIG1zbV9jaGlwLT5jaGlwLnN0YXJ0ICsgaik7ICovCisJCQl2YWwgJj0gfm1hc2s7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoRklSU1RfR1BJT19JUlEgKworCQkJCQkgICBtc21fY2hpcC0+Y2hpcC5iYXNlICsgaik7CisJCX0KKwl9CisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zbV9ncGlvX2lycV9jaGlwID0geworCS5uYW1lICAgICAgICAgID0gIm1zbWdwaW8iLAorCS5pcnFfYWNrICAgICAgID0gbXNtX2dwaW9faXJxX2FjaywKKwkuaXJxX21hc2sgICAgICA9IG1zbV9ncGlvX2lycV9tYXNrLAorCS5pcnFfdW5tYXNrICAgID0gbXNtX2dwaW9faXJxX3VubWFzaywKKwkuaXJxX3NldF93YWtlICA9IG1zbV9ncGlvX2lycV9zZXRfd2FrZSwKKwkuaXJxX3NldF90eXBlICA9IG1zbV9ncGlvX2lycV9zZXRfdHlwZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1zbV9pbml0X2dwaW8odm9pZCkKK3sKKwlpbnQgaSwgaiA9IDA7CisKKwlpZiAoY3B1X2lzX21zbTd4MDEoKSkgeworCQltc21fZ3Bpb19jaGlwcyA9IG1zbV9ncGlvX2NoaXBzX21zbTd4MDE7CisJCW1zbV9ncGlvX2NvdW50ID0gQVJSQVlfU0laRShtc21fZ3Bpb19jaGlwc19tc203eDAxKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19tc203eDMwKCkpIHsKKwkJbXNtX2dwaW9fY2hpcHMgPSBtc21fZ3Bpb19jaGlwc19tc203eDMwOworCQltc21fZ3Bpb19jb3VudCA9IEFSUkFZX1NJWkUobXNtX2dwaW9fY2hpcHNfbXNtN3gzMCk7CisJfSBlbHNlIGlmIChjcHVfaXNfcXNkOHg1MCgpKSB7CisJCW1zbV9ncGlvX2NoaXBzID0gbXNtX2dwaW9fY2hpcHNfcXNkOHg1MDsKKwkJbXNtX2dwaW9fY291bnQgPSBBUlJBWV9TSVpFKG1zbV9ncGlvX2NoaXBzX3FzZDh4NTApOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IEZJUlNUX0dQSU9fSVJROyBpIDwgRklSU1RfR1BJT19JUlEgKyBOUl9HUElPX0lSUVM7IGkrKykgeworCQlpZiAoaSAtIEZJUlNUX0dQSU9fSVJRID49CisJCQltc21fZ3Bpb19jaGlwc1tqXS5jaGlwLmJhc2UgKworCQkJbXNtX2dwaW9fY2hpcHNbal0uY2hpcC5uZ3BpbykKKwkJCWorKzsKKwkJaXJxX3NldF9jaGlwX2RhdGEoaSwgJm1zbV9ncGlvX2NoaXBzW2pdKTsKKwkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZtc21fZ3Bpb19pcnFfY2hpcCwKKwkJCQkJIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1zbV9ncGlvX2NvdW50OyBpKyspIHsKKwkJc3Bpbl9sb2NrX2luaXQoJm1zbV9ncGlvX2NoaXBzW2ldLmxvY2spOworCQl3cml0ZWwoMCwgbXNtX2dwaW9fY2hpcHNbaV0ucmVncy5pbnRfZW4pOworCQlncGlvY2hpcF9hZGQoJm1zbV9ncGlvX2NoaXBzW2ldLmNoaXApOworCX0KKworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElOVF9HUElPX0dST1VQMSwgbXNtX2dwaW9faXJxX2hhbmRsZXIpOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElOVF9HUElPX0dST1VQMiwgbXNtX2dwaW9faXJxX2hhbmRsZXIpOworCWlycV9zZXRfaXJxX3dha2UoSU5UX0dQSU9fR1JPVVAxLCAxKTsKKwlpcnFfc2V0X2lycV93YWtlKElOVF9HUElPX0dST1VQMiwgMik7CisJcmV0dXJuIDA7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKG1zbV9pbml0X2dwaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby12Mi5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbXNtLXYyLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1tc20vZ3Bpby12Mi5jCnJlbmFtZSB0byBkcml2ZXJzL2dwaW8vZ3Bpby1tc20tdjIuYwppbmRleCBjYzljNGZkLi41Y2IxMjI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9ncGlvLXYyLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbXNtLXYyLmMKQEAgLTEsNCArMSw0IEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCisjaW5jbHVkZSA8bWFjaC9tc21fZ3Bpb211eC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+Ci0jaW5jbHVkZSAiZ3Bpb211eC5oIgogCiAvKiBCaXRzIG9mIGludGVyZXN0IGluIHRoZSBHUElPX0lOX09VVCByZWdpc3Rlci4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdHBzNjU5MTIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRwczY1OTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNjZjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRwczY1OTEyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKgorICogQXV0aG9yOiBNYXJnYXJpdGEgT2xheWEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHdtODM1MCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjU5MTIuaD4KKworc3RydWN0IHRwczY1OTEyX2dwaW9fZGF0YSB7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMjsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKK307CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgdHBzNjU5MTIsIGdwaW8pOworCWludCB2YWw7CisKKwl2YWwgPSB0cHM2NTkxMl9yZWdfcmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfR1BJTzEgKyBvZmZzZXQpOworCisJaWYgKHZhbCAmIEdQSU9fU1RTX01BU0spCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRwczY1OTEyX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkgICAgICBpbnQgdmFsdWUpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHRwczY1OTEyLCBncGlvKTsKKworCWlmICh2YWx1ZSkKKwkJdHBzNjU5MTJfc2V0X2JpdHModHBzNjU5MTIsIFRQUzY1OTEyX0dQSU8xICsgb2Zmc2V0LAorCQkJCQkJCUdQSU9fU0VUX01BU0spOworCWVsc2UKKwkJdHBzNjU5MTJfY2xlYXJfYml0cyh0cHM2NTkxMiwgVFBTNjU5MTJfR1BJTzEgKyBvZmZzZXQsCisJCQkJCQkJCUdQSU9fU0VUX01BU0spOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2dwaW9fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJaW50IHZhbHVlKQoreworCXN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCB0cHM2NTkxMiwgZ3Bpbyk7CisKKwkvKiBTZXQgdGhlIGluaXRpYWwgdmFsdWUgKi8KKwl0cHM2NTkxMl9ncGlvX3NldChnYywgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gdHBzNjU5MTJfc2V0X2JpdHModHBzNjU5MTIsIFRQUzY1OTEyX0dQSU8xICsgb2Zmc2V0LAorCQkJCQkJCQlHUElPX0NGR19NQVNLKTsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9ncGlvX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHRwczY1OTEyLCBncGlvKTsKKworCXJldHVybiB0cHM2NTkxMl9jbGVhcl9iaXRzKHRwczY1OTEyLCBUUFM2NTkxMl9HUElPMSArIG9mZnNldCwKKwkJCQkJCQkJR1BJT19DRkdfTUFTSyk7CisKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVtcGxhdGVfY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJ0cHM2NTkxMiIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX2lucHV0CT0gdHBzNjU5MTJfZ3Bpb19pbnB1dCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHRwczY1OTEyX2dwaW9fb3V0cHV0LAorCS5nZXQJCQk9IHRwczY1OTEyX2dwaW9fZ2V0LAorCS5zZXQJCQk9IHRwczY1OTEyX2dwaW9fc2V0LAorCS5jYW5fc2xlZXAJCT0gMSwKKwkubmdwaW8JCQk9IDUsCisJLmJhc2UJCQk9IC0xLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgdHBzNjU5MTJfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRwczY1OTEyX2JvYXJkICpwZGF0YSA9IHRwczY1OTEyLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRwczY1OTEyX2dwaW9fZGF0YSAqdHBzNjU5MTJfZ3BpbzsKKwlpbnQgcmV0OworCisJdHBzNjU5MTJfZ3BpbyA9IGt6YWxsb2Moc2l6ZW9mKCp0cHM2NTkxMl9ncGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRwczY1OTEyX2dwaW8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHM2NTkxMl9ncGlvLT50cHM2NTkxMiA9IHRwczY1OTEyOworCXRwczY1OTEyX2dwaW8tPmdwaW9fY2hpcCA9IHRlbXBsYXRlX2NoaXA7CisJdHBzNjU5MTJfZ3Bpby0+Z3Bpb19jaGlwLmRldiA9ICZwZGV2LT5kZXY7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5ncGlvX2Jhc2UpCisJCXRwczY1OTEyX2dwaW8tPmdwaW9fY2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmdHBzNjU5MTJfZ3Bpby0+Z3Bpb19jaGlwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZ3Bpb2NoaXAsICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0cHM2NTkxMl9ncGlvKTsKKworCXJldHVybiByZXQ7CisKK2VycjoKKwlrZnJlZSh0cHM2NTkxMl9ncGlvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0cHM2NTkxMl9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0cHM2NTkxMl9ncGlvX2RhdGEgICp0cHM2NTkxMl9ncGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmdHBzNjU5MTJfZ3Bpby0+Z3Bpb19jaGlwKTsKKwlpZiAocmV0ID09IDApCisJCWtmcmVlKHRwczY1OTEyX2dwaW8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHBzNjU5MTJfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBzNjU5MTItZ3BpbyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gdHBzNjU5MTJfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AodHBzNjU5MTJfZ3Bpb19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHBzNjU5MTJfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdHBzNjU5MTJfZ3Bpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHRwczY1OTEyX2dwaW9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0cHM2NTkxMl9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHBzNjU5MTJfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHBzNjU5MTJfZ3Bpb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyZ2FyaXRhIE9sYXlhIENhYnJlcmEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIGludGVyZmFjZSBmb3IgVFBTNjU5MTIgUE1JQ3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHBzNjU5MTItZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCA4MmRiMTg1Li5mZTczOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNDk5LDYgKzQ5OSw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOwogCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOworCWRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvci0tOwogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfY2xlYW51cCk7CkBAIC01MjksNiArNTMwLDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlkcm1fbW9kZV9vYmplY3RfcHV0KGRldiwgJmVuY29kZXItPmJhc2UpOwogCWxpc3RfZGVsKCZlbmNvZGVyLT5oZWFkKTsKKwlkZXYtPm1vZGVfY29uZmlnLm51bV9lbmNvZGVyLS07CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2VuY29kZXJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZGVidWdmcy5jCmluZGV4IDlkOGM4OTIuLjlkMjY2OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZGVidWdmcy5jCkBAIC05MCw3ICs5MCw2IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CiAJc3RydWN0IGRlbnRyeSAqZW50OwogCXN0cnVjdCBkcm1faW5mb19ub2RlICp0bXA7Ci0JY2hhciBuYW1lWzY0XTsKIAlpbnQgaSwgcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTEwOCw2ICsxMDcsOSBAQAogCQllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVzW2ldLm5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAogCQkJCQkgIHJvb3QsIHRtcCwgJmRybV9kZWJ1Z2ZzX2ZvcHMpOwogCQlpZiAoIWVudCkgeworCQkJY2hhciBuYW1lWzY0XTsKKwkJCXN0cm5jcHkobmFtZSwgcm9vdC0+ZF9uYW1lLm5hbWUsCisJCQkJCQltaW4ocm9vdC0+ZF9uYW1lLmxlbiwgNjRVKSk7CiAJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3N5cy9rZXJuZWwvZGVidWcvZHJpLyVzLyVzXG4iLAogCQkJCSAgbmFtZSwgZmlsZXNbaV0ubmFtZSk7CiAJCQlrZnJlZSh0bXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCA3NTZhZjRkLi43NDI1ZTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMTI3LDYgKzEyNywyMyBAQAogCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKIH07CiAKKyAvKgorICogU2FuaXR5IGNoZWNrIHRoZSBoZWFkZXIgb2YgdGhlIGJhc2UgRURJRCBibG9jay4gIFJldHVybiA4IGlmIHRoZSBoZWFkZXIKKyAqIGlzIHBlcmZlY3QsIGRvd24gdG8gMCBpZiBpdCdzIHRvdGFsbHkgd3JvbmcuCisgKi8KK2ludCBkcm1fZWRpZF9oZWFkZXJfaXNfdmFsaWQoY29uc3QgdTggKnJhd19lZGlkKQoreworCWludCBpLCBzY29yZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGVkaWRfaGVhZGVyKTsgaSsrKQorCQlpZiAocmF3X2VkaWRbaV0gPT0gZWRpZF9oZWFkZXJbaV0pCisJCQlzY29yZSsrOworCisJcmV0dXJuIHNjb3JlOworfQorRVhQT1JUX1NZTUJPTChkcm1fZWRpZF9oZWFkZXJfaXNfdmFsaWQpOworCisKIC8qCiAgKiBTYW5pdHkgY2hlY2sgdGhlIEVESUQgYmxvY2sgKGJhc2Ugb3IgZXh0ZW5zaW9uKS4gIFJldHVybiAwIGlmIHRoZSBibG9jawogICogZG9lc24ndCBjaGVjayBvdXQsIG9yIDEgaWYgaXQncyB2YWxpZC4KQEAgLTEzOSwxMiArMTU2LDcgQEAKIAlzdHJ1Y3QgZWRpZCAqZWRpZCA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwogCiAJaWYgKHJhd19lZGlkWzBdID09IDB4MDApIHsKLQkJaW50IHNjb3JlID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGVkaWRfaGVhZGVyKTsgaSsrKQotCQkJaWYgKHJhd19lZGlkW2ldID09IGVkaWRfaGVhZGVyW2ldKQotCQkJCXNjb3JlKys7Ci0KKwkJaW50IHNjb3JlID0gZHJtX2VkaWRfaGVhZGVyX2lzX3ZhbGlkKHJhd19lZGlkKTsKIAkJaWYgKHNjb3JlID09IDgpIDsKIAkJZWxzZSBpZiAoc2NvcmUgPj0gNikgewogCQkJRFJNX0RFQlVHKCJGaXhpbmcgRURJRCBoZWFkZXIsIHlvdXIgaGFyZHdhcmUgbWF5IGJlIGZhaWxpbmdcbiIpOwpAQCAtMTQzOSw2ICsxNDUxLDggQEAKIHN0YXRpYyB2b2lkIGRybV9hZGRfZGlzcGxheV9pbmZvKHN0cnVjdCBlZGlkICplZGlkLAogCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbykKIHsKKwl1OCAqZWRpZF9leHQ7CisKIAlpbmZvLT53aWR0aF9tbSA9IGVkaWQtPndpZHRoX2NtICogMTA7CiAJaW5mby0+aGVpZ2h0X21tID0gZWRpZC0+aGVpZ2h0X2NtICogMTA7CiAKQEAgLTE0ODMsNiArMTQ5NywxMyBAQAogCQlpbmZvLT5jb2xvcl9mb3JtYXRzID0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQ0NDsKIAlpZiAoaW5mby0+Y29sb3JfZm9ybWF0cyAmIERSTV9FRElEX0ZFQVRVUkVfUkdCX1lDUkNCNDIyKQogCQlpbmZvLT5jb2xvcl9mb3JtYXRzID0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMjsKKworCS8qIEdldCBkYXRhIGZyb20gQ0VBIGJsb2NrcyBpZiBwcmVzZW50ICovCisJZWRpZF9leHQgPSBkcm1fZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWQpOworCWlmICghZWRpZF9leHQpCisJCXJldHVybjsKKworCWluZm8tPmNlYV9yZXYgPSBlZGlkX2V4dFsxXTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCA4MDJiNjFhLi5mN2M2ODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogewogCXByaW50ayhLRVJOX0VSUiAicGFuaWMgb2NjdXJyZWQsIHN3aXRjaGluZyBiYWNrIHRvIHRleHQgY29uc29sZVxuIik7CiAJcmV0dXJuIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUoKTsKLQlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9wYW5pYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDIwMjJhNWMuLjM4MzBlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtMjkxLDExICsyOTEsMTQgQEAKIAlpZiAoIWRldi0+aXJxX2VuYWJsZWQpCiAJCXJldHVybjsKIAotCWlmIChzdGF0ZSkKLQkJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKLQllbHNlIHsKLQkJZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKGRldik7Ci0JCWRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGRldi0+ZHJpdmVyLT5pcnFfdW5pbnN0YWxsKQorCQkJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKQorCQkJZGV2LT5kcml2ZXItPmlycV9wcmVpbnN0YWxsKGRldik7CisJCWlmIChkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKQorCQkJZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOwogCX0KIH0KIApAQCAtMzM4LDcgKzM0MSw4IEBACiAJRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRybV9kZXZfdG9faXJxKGRldikpOwogCiAJLyogQmVmb3JlIGluc3RhbGxpbmcgaGFuZGxlciAqLwotCWRldi0+ZHJpdmVyLT5pcnFfcHJlaW5zdGFsbChkZXYpOworCWlmIChkZXYtPmRyaXZlci0+aXJxX3ByZWluc3RhbGwpCisJCWRldi0+ZHJpdmVyLT5pcnFfcHJlaW5zdGFsbChkZXYpOwogCiAJLyogSW5zdGFsbCBoYW5kbGVyICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1NIQVJFRCkpCkBAIC0zNjMsMTEgKzM2NywxNiBAQAogCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgKHZvaWQgKilkZXYsIGRybV9pcnFfdmdhYXJiX25va21zLCBOVUxMKTsKIAogCS8qIEFmdGVyIGluc3RhbGxpbmcgaGFuZGxlciAqLwotCXJldCA9IGRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwlpZiAoZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbCkKKwkJcmV0ID0gZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOworCiAJaWYgKHJldCA8IDApIHsKIAkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkZXYtPmlycV9lbmFibGVkID0gMDsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJZnJlZV9pcnEoZHJtX2Rldl90b19pcnEoZGV2KSwgZGV2KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDEzLDcgKzQyMiw4IEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQogCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKLQlkZXYtPmRyaXZlci0+aXJxX3VuaW5zdGFsbChkZXYpOworCWlmIChkZXYtPmRyaXZlci0+aXJxX3VuaW5zdGFsbCkKKwkJZGV2LT5kcml2ZXItPmlycV91bmluc3RhbGwoZGV2KTsKIAogCWZyZWVfaXJxKGRybV9kZXZfdG9faXJxKGRldiksIGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggZTI2NjI0OTcuLjNjMzk1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC00OTksNyArNDk5LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHRzIHJlY2VpdmVkOiAlZFxuIiwKIAkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewotCQlpZiAoSVNfR0VONihkZXYpKSB7CisJCWlmIChJU19HRU42KGRldikgfHwgSVNfR0VONyhkZXYpKSB7CiAJCQlzZXFfcHJpbnRmKG0sICJHcmFwaGljcyBJbnRlcnJ1cHQgbWFzayAoJXMpOgklMDh4XG4iLAogCQkJCSAgIGRldl9wcml2LT5yaW5nW2ldLm5hbWUsCiAJCQkJICAgSTkxNV9SRUFEX0lNUigmZGV2X3ByaXYtPnJpbmdbaV0pKTsKQEAgLTEzMzgsNiArMTMzOCwxNTUgQEAKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCiB9OwogCitzdGF0aWMgaW50CitpOTE1X21heF9mcmVxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK2k5MTVfbWF4X2ZyZXFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgIHNpemVfdCBtYXgsCisJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWNoYXIgYnVmWzgwXTsKKwlpbnQgbGVuOworCisJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YgKGJ1ZiksCisJCSAgICAgICAibWF4IGZyZXE6ICVkXG4iLCBkZXZfcHJpdi0+bWF4X2RlbGF5ICogNTApOworCisJaWYgKGxlbiA+IHNpemVvZiAoYnVmKSkKKwkJbGVuID0gc2l6ZW9mIChidWYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIG1heCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9tYXhfZnJlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJY2hhciBidWZbMjBdOworCWludCB2YWwgPSAxOworCisJaWYgKGNudCA+IDApIHsKKwkJaWYgKGNudCA+IHNpemVvZiAoYnVmKSAtIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjbnQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1ZltjbnRdID0gMDsKKworCQl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCX0KKworCURSTV9ERUJVR19EUklWRVIoIk1hbnVhbGx5IHNldHRpbmcgbWF4IGZyZXEgdG8gJWRcbiIsIHZhbCk7CisKKwkvKgorCSAqIFR1cmJvIHdpbGwgc3RpbGwgYmUgZW5hYmxlZCwgYnV0IHdvbid0IGdvIGFib3ZlIHRoZSBzZXQgdmFsdWUuCisJICovCisJZGV2X3ByaXYtPm1heF9kZWxheSA9IHZhbCAvIDUwOworCisJZ2VuNl9zZXRfcnBzKGRldiwgdmFsIC8gNTApOworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9tYXhfZnJlcV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gaTkxNV9tYXhfZnJlcV9vcGVuLAorCS5yZWFkID0gaTkxNV9tYXhfZnJlcV9yZWFkLAorCS53cml0ZSA9IGk5MTVfbWF4X2ZyZXFfd3JpdGUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIGludAoraTkxNV9jYWNoZV9zaGFyaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK2k5MTVfY2FjaGVfc2hhcmluZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLAorCQkgICBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgc2l6ZV90IG1heCwKKwkJICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJY2hhciBidWZbODBdOworCXUzMiBzbnBjcjsKKwlpbnQgbGVuOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKwlzbnBjciA9IEk5MTVfUkVBRChHRU42X01CQ1VOSVRfU05QQ1IpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRldi0+c3RydWN0X211dGV4KTsKKworCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIChidWYpLAorCQkgICAgICAgIiVkXG4iLCAoc25wY3IgJiBHRU42X01CQ19TTlBDUl9NQVNLKSA+PgorCQkgICAgICAgR0VONl9NQkNfU05QQ1JfU0hJRlQpOworCisJaWYgKGxlbiA+IHNpemVvZiAoYnVmKSkKKwkJbGVuID0gc2l6ZW9mIChidWYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIG1heCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdAoraTkxNV9jYWNoZV9zaGFyaW5nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLAorCQkgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkgIHNpemVfdCBjbnQsCisJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwljaGFyIGJ1ZlsyMF07CisJdTMyIHNucGNyOworCWludCB2YWwgPSAxOworCisJaWYgKGNudCA+IDApIHsKKwkJaWYgKGNudCA+IHNpemVvZiAoYnVmKSAtIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjbnQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1ZltjbnRdID0gMDsKKworCQl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOworCX0KKworCWlmICh2YWwgPCAwIHx8IHZhbCA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCisJRFJNX0RFQlVHX0RSSVZFUigiTWFudWFsbHkgc2V0dGluZyB1bmNvcmUgc2hhcmluZyB0byAlZFxuIiwgdmFsKTsKKworCS8qIFVwZGF0ZSB0aGUgY2FjaGUgc2hhcmluZyBwb2xpY3kgaGVyZSBhcyB3ZWxsICovCisJc25wY3IgPSBJOTE1X1JFQUQoR0VONl9NQkNVTklUX1NOUENSKTsKKwlzbnBjciAmPSB+R0VONl9NQkNfU05QQ1JfTUFTSzsKKwlzbnBjciB8PSAodmFsIDw8IEdFTjZfTUJDX1NOUENSX1NISUZUKTsKKwlJOTE1X1dSSVRFKEdFTjZfTUJDVU5JVF9TTlBDUiwgc25wY3IpOworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9jYWNoZV9zaGFyaW5nX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBpOTE1X2NhY2hlX3NoYXJpbmdfb3BlbiwKKwkucmVhZCA9IGk5MTVfY2FjaGVfc2hhcmluZ19yZWFkLAorCS53cml0ZSA9IGk5MTVfY2FjaGVfc2hhcmluZ193cml0ZSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCiAvKiBBcyB0aGUgZHJtX2RlYnVnZnNfaW5pdCgpIHJvdXRpbmVzIGFyZSBjYWxsZWQgYmVmb3JlIGRldi0+ZGV2X3ByaXZhdGUgaXMKICAqIGFsbG9jYXRlZCB3ZSBuZWVkIHRvIGhvb2sgaW50byB0aGUgbWlub3IgZm9yIHJlbGVhc2UuICovCiBzdGF0aWMgaW50CkBAIC0xNDM3LDYgKzE1ODYsMzYgQEAKIAlyZXR1cm4gZHJtX2FkZF9mYWtlX2luZm9fbm9kZShtaW5vciwgZW50LCAmaTkxNV9mb3JjZXdha2VfZm9wcyk7CiB9CiAKK3N0YXRpYyBpbnQgaTkxNV9tYXhfZnJlcV9jcmVhdGUoc3RydWN0IGRlbnRyeSAqcm9vdCwgc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IGRlbnRyeSAqZW50OworCisJZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9tYXhfZnJlcSIsCisJCQkJICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQkgIHJvb3QsIGRldiwKKwkJCQkgICZpOTE1X21heF9mcmVxX2ZvcHMpOworCWlmIChJU19FUlIoZW50KSkKKwkJcmV0dXJuIFBUUl9FUlIoZW50KTsKKworCXJldHVybiBkcm1fYWRkX2Zha2VfaW5mb19ub2RlKG1pbm9yLCBlbnQsICZpOTE1X21heF9mcmVxX2ZvcHMpOworfQorCitzdGF0aWMgaW50IGk5MTVfY2FjaGVfc2hhcmluZ19jcmVhdGUoc3RydWN0IGRlbnRyeSAqcm9vdCwgc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IGRlbnRyeSAqZW50OworCisJZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaTkxNV9jYWNoZV9zaGFyaW5nIiwKKwkJCQkgIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJCSAgcm9vdCwgZGV2LAorCQkJCSAgJmk5MTVfY2FjaGVfc2hhcmluZ19mb3BzKTsKKwlpZiAoSVNfRVJSKGVudCkpCisJCXJldHVybiBQVFJfRVJSKGVudCk7CisKKwlyZXR1cm4gZHJtX2FkZF9mYWtlX2luZm9fbm9kZShtaW5vciwgZW50LCAmaTkxNV9jYWNoZV9zaGFyaW5nX2ZvcHMpOworfQorCiBzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKIAl7Imk5MTVfY2FwYWJpbGl0aWVzIiwgaTkxNV9jYXBhYmlsaXRpZXMsIDB9LAogCXsiaTkxNV9nZW1fb2JqZWN0cyIsIGk5MTVfZ2VtX29iamVjdF9pbmZvLCAwfSwKQEAgLTE0OTAsNiArMTY2OSwxMiBAQAogCXJldCA9IGk5MTVfZm9yY2V3YWtlX2NyZWF0ZShtaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKKwlyZXQgPSBpOTE1X21heF9mcmVxX2NyZWF0ZShtaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBpOTE1X2NhY2hlX3NoYXJpbmdfY3JlYXRlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QsIG1pbm9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIGRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyhpOTE1X2RlYnVnZnNfbGlzdCwKIAkJCQkJSTkxNV9ERUJVR0ZTX0VOVFJJRVMsCkBAIC0xNTA0LDYgKzE2ODksMTAgQEAKIAkJCQkgMSwgbWlub3IpOwogCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcygoc3RydWN0IGRybV9pbmZvX2xpc3QgKikgJmk5MTVfd2VkZ2VkX2ZvcHMsCiAJCQkJIDEsIG1pbm9yKTsKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoKHN0cnVjdCBkcm1faW5mb19saXN0ICopICZpOTE1X21heF9mcmVxX2ZvcHMsCisJCQkJIDEsIG1pbm9yKTsKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoKHN0cnVjdCBkcm1faW5mb19saXN0ICopICZpOTE1X2NhY2hlX3NoYXJpbmdfZm9wcywKKwkJCQkgMSwgbWlub3IpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCAxMjcxMjgyLi44YTM5NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTYxLDcgKzYxLDYgQEAKIHN0YXRpYyBpbnQgaTkxNV9pbml0X3BoeXNfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gTFBfUklORyhkZXZfcHJpdik7CiAKIAkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCiAJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQpAQCAtNzEsMTAgKzcwLDkgQEAKIAkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9Ci0JCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKIAotCW1lbXNldF9pbyhyaW5nLT5zdGF0dXNfcGFnZS5wYWdlX2FkZHIsIDAsIFBBR0VfU0laRSk7CisJbWVtc2V0X2lvKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkciwKKwkJICAwLCBQQUdFX1NJWkUpOwogCiAJaTkxNV93cml0ZV9od3NfcGdhKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDY4NjdlMTkuLjc5MTZiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxkcm0vaW50ZWwtZ3R0Lmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwpAQCAtNTQ0LDYgKzU0NSw3IEBACiAJdTMyIHNhdmVQSVBFQl9MSU5LX00xOwogCXUzMiBzYXZlUElQRUJfTElOS19OMTsKIAl1MzIgc2F2ZU1DSEJBUl9SRU5ERVJfU1RBTkRCWTsKKwl1MzIgc2F2ZVBDSF9QT1JUX0hPVFBMVUc7CiAKIAlzdHJ1Y3QgewogCQkvKiogQnJpZGdlIHRvIGludGVsLWd0dC1rbyAqLwpAQCAtNjg5LDYgKzY5MSw3IEBACiAJaW50IGNoaWxkX2Rldl9udW07CiAJc3RydWN0IGNoaWxkX2RldmljZV9jb25maWcgKmNoaWxkX2RldjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqaW50X2x2ZHNfY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICppbnRfZWRwX2Nvbm5lY3RvcjsKIAogCWJvb2wgbWNoYmFyX25lZWRfZGlzYWJsZTsKIApAQCAtNzIyLDYgKzcyNSw4IEBACiAJLyogbGlzdCBvZiBmYmRldiByZWdpc3RlciBvbiB0aGlzIGRldmljZSAqLwogCXN0cnVjdCBpbnRlbF9mYmRldiAqZmJkZXY7CiAKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eTsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZDFjZDhiOC4uYTU0NmE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0zMTEyLDcgKzMxMTIsNyBAQAogCiAJaWYgKHBpcGVsaW5lZCAhPSBvYmotPnJpbmcpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQogCQkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IDIzZDFhZTYuLjljYmIwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtMzA2LDEyICszMDYsMTUgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwogCisJbXV0ZXhfbG9jaygmbW9kZV9jb25maWctPm11dGV4KTsKIAlEUk1fREVCVUdfS01TKCJydW5uaW5nIGVuY29kZXIgaG90cGx1ZyBmdW5jdGlvbnNcbiIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmbW9kZV9jb25maWctPmVuY29kZXJfbGlzdCwgYmFzZS5oZWFkKQogCQlpZiAoZW5jb2Rlci0+aG90X3BsdWcpCiAJCQllbmNvZGVyLT5ob3RfcGx1ZyhlbmNvZGVyKTsKIAorCW11dGV4X3VubG9jaygmbW9kZV9jb25maWctPm11dGV4KTsKKwogCS8qIEp1c3QgZmlyZSBvZmYgYSB1ZXZlbnQgYW5kIGxldCB1c2Vyc3BhY2UgdGVsbCB1cyB3aGF0IHRvIGRvICovCiAJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGRldik7CiB9CkBAIC0yMDU1LDggKzIwNTgsMTAgQEAKIAkJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlciA9IGdtNDVfZ2V0X3ZibGFua19jb3VudGVyOwogCX0KIAotCi0JZGV2LT5kcml2ZXItPmdldF92YmxhbmtfdGltZXN0YW1wID0gaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcDsKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfdGltZXN0YW1wID0gaTkxNV9nZXRfdmJsYW5rX3RpbWVzdGFtcDsKKwllbHNlCisJCWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX3RpbWVzdGFtcCA9IE5VTEw7CiAJZGV2LT5kcml2ZXItPmdldF9zY2Fub3V0X3Bvc2l0aW9uID0gaTkxNV9nZXRfY3J0Y19zY2Fub3V0cG9zOwogCiAJaWYgKElTX0lWWUJSSURHRShkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCAwMmRiMjk5Li41NDI0NTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTc4LDYgKzc4LDE0IEBACiAjZGVmaW5lICBHUkRPTV9SRU5ERVIJKDE8PDIpCiAjZGVmaW5lICBHUkRPTV9NRURJQQkoMzw8MikKIAorI2RlZmluZSBHRU42X01CQ1VOSVRfU05QQ1IJMHg5MDBjIC8qIGZvciBMTEMgY29uZmlnICovCisjZGVmaW5lICAgR0VONl9NQkNfU05QQ1JfU0hJRlQJMjEKKyNkZWZpbmUgICBHRU42X01CQ19TTlBDUl9NQVNLCSgzPDwyMSkKKyNkZWZpbmUgICBHRU42X01CQ19TTlBDUl9NQVgJKDA8PDIxKQorI2RlZmluZSAgIEdFTjZfTUJDX1NOUENSX01FRAkoMTw8MjEpCisjZGVmaW5lICAgR0VONl9NQkNfU05QQ1JfTE9XCSgyPDwyMSkKKyNkZWZpbmUgICBHRU42X01CQ19TTlBDUl9NSU4JKDM8PDIxKSAvKiBvbmx5IDEvMTZ0aCBvZiB0aGUgY2FjaGUgaXMgc2hhcmVkICovCisKICNkZWZpbmUgR0VONl9HRFJTVAkweDk0MWMKICNkZWZpbmUgIEdFTjZfR1JET01fRlVMTAkJKDEgPDwgMCkKICNkZWZpbmUgIEdFTjZfR1JET01fUkVOREVSCQkoMSA8PCAxKQpAQCAtMzY3LDYgKzM3NSw3IEBACiAjIGRlZmluZSBNSV9GTFVTSF9FTkFCTEUJCQkJKDEgPDwgMTEpCiAKICNkZWZpbmUgR0ZYX01PREUJMHgwMjUyMAorI2RlZmluZSBHRlhfTU9ERV9HRU43CTB4MDIyOWMKICNkZWZpbmUgICBHRlhfUlVOX0xJU1RfRU5BQkxFCQkoMTw8MTUpCiAjZGVmaW5lICAgR0ZYX1RMQl9JTlZBTElEQVRFX0FMV0FZUwkoMTw8MTMpCiAjZGVmaW5lICAgR0ZYX1NVUkZBQ0VfRkFVTFRfRU5BQkxFCSgxPDwxMikKQEAgLTM3NCw2ICszODMsOSBAQAogI2RlZmluZSAgIEdGWF9QU01JX0dSQU5VTEFSSVRZCQkoMTw8MTApCiAjZGVmaW5lICAgR0ZYX1BQR1RUX0VOQUJMRQkJKDE8PDkpCiAKKyNkZWZpbmUgR0ZYX01PREVfRU5BQkxFKGJpdCkgKCgoYml0KSA8PCAxNikgfCAoYml0KSkKKyNkZWZpbmUgR0ZYX01PREVfRElTQUJMRShiaXQpICgoKGJpdCkgPDwgMTYpIHwgKDApKQorCiAjZGVmaW5lIFNDUEQwCQkweDAyMDljIC8qIDkxNSsgb25seSAqLwogI2RlZmluZSBJRVIJCTB4MDIwYTAKICNkZWZpbmUgSUlSCQkweDAyMGE0CkBAIC0xMzEwLDYgKzEzMjIsNyBAQAogI2RlZmluZSAgIEFEUEFfUElQRV9TRUxFQ1RfTUFTSwkoMTw8MzApCiAjZGVmaW5lICAgQURQQV9QSVBFX0FfU0VMRUNUCTAKICNkZWZpbmUgICBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfUElQRV9TRUxFQ1QocGlwZSkgKChwaXBlKSA8PCAzMCkKICNkZWZpbmUgICBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCiAjZGVmaW5lICAgQURQQV9TRVRTX0hWUE9MQVJJVFkJMAogI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKQEAgLTE0NTIsNiArMTQ2NSw3IEBACiAvKiBTZWxlY3RzIHBpcGUgQiBmb3IgTFZEUyBkYXRhLiAgTXVzdCBiZSBzZXQgb24gcHJlLTk2NS4gKi8KICNkZWZpbmUgICBMVkRTX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCiAjZGVmaW5lICAgTFZEU19QSVBFX01BU0sJCSgxIDw8IDMwKQorI2RlZmluZSAgIExWRFNfUElQRShwaXBlKQkJKChwaXBlKSA8PCAzMCkKIC8qIExWRFMgZGl0aGVyaW5nIGZsYWcgb24gOTY1L2c0eCBwbGF0Zm9ybSAqLwogI2RlZmluZSAgIExWRFNfRU5BQkxFX0RJVEhFUgkJKDEgPDwgMjUpCiAvKiBMVkRTIHN5bmMgcG9sYXJpdHkgZmxhZ3MuIFNldCB0byBpbnZlcnQgKGkuZS4gbmVnYXRpdmUpICovCkBAIC0xNDkxLDkgKzE1MDUsNiBAQAogI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9ET1dOCQkoMCA8PCAyKQogI2RlZmluZSAgIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKIAotI2RlZmluZSBMVkRTX1BJUEVfRU5BQkxFRChWLCBQKSBcCi0JKCgoVikgJiAoTFZEU19QSVBFX01BU0sgfCBMVkRTX1BPUlRfRU4pKSA9PSAoKFApIDw8IDMwIHwgTFZEU19QT1JUX0VOKSkKLQogLyogVmlkZW8gRGF0YSBJc2xhbmQgUGFja2V0IGNvbnRyb2wgKi8KICNkZWZpbmUgVklERU9fRElQX0RBVEEJCTB4NjExNzgKICNkZWZpbmUgVklERU9fRElQX0NUTAkJMHg2MTE3MApAQCAtMTUwNiw2ICsxNTE3LDcgQEAKICNkZWZpbmUgICBWSURFT19ESVBfU0VMRUNUX0FWSQkJKDAgPDwgMTkpCiAjZGVmaW5lICAgVklERU9fRElQX1NFTEVDVF9WRU5ET1IJKDEgPDwgMTkpCiAjZGVmaW5lICAgVklERU9fRElQX1NFTEVDVF9TUEQJCSgzIDw8IDE5KQorI2RlZmluZSAgIFZJREVPX0RJUF9TRUxFQ1RfTUFTSwkJKDMgPDwgMTkpCiAjZGVmaW5lICAgVklERU9fRElQX0ZSRVFfT05DRQkJKDAgPDwgMTYpCiAjZGVmaW5lICAgVklERU9fRElQX0ZSRVFfVlNZTkMJCSgxIDw8IDE2KQogI2RlZmluZSAgIFZJREVPX0RJUF9GUkVRXzJWU1lOQwkJKDIgPDwgMTYpCkBAIC0yMDg0LDkgKzIwOTYsNiBAQAogI2RlZmluZSAgIERQX1BJUEVCX1NFTEVDVAkJKDEgPDwgMzApCiAjZGVmaW5lICAgRFBfUElQRV9NQVNLCQkJKDEgPDwgMzApCiAKLSNkZWZpbmUgRFBfUElQRV9FTkFCTEVEKFYsIFApIFwKLQkoKChWKSAmIChEUF9QSVBFX01BU0sgfCBEUF9QT1JUX0VOKSkgPT0gKChQKSA8PCAzMCB8IERQX1BPUlRfRU4pKQotCiAvKiBMaW5rIHRyYWluaW5nIG1vZGUgLSBzZWxlY3QgYSBzdWl0YWJsZSBtb2RlIGZvciBlYWNoIHN0YWdlICovCiAjZGVmaW5lICAgRFBfTElOS19UUkFJTl9QQVRfMQkJKDAgPDwgMjgpCiAjZGVmaW5lICAgRFBfTElOS19UUkFJTl9QQVRfMgkJKDEgPDwgMjgpCkBAIC0zMDI0LDYgKzMwMzMsMjAgQEAKICNkZWZpbmUgX1RSQU5TQV9EUF9MSU5LX00yICAgICAgIDB4ZTAwNDgKICNkZWZpbmUgX1RSQU5TQV9EUF9MSU5LX04yICAgICAgIDB4ZTAwNGMKIAorLyogUGVyLXRyYW5zY29kZXIgRElQIGNvbnRyb2xzICovCisKKyNkZWZpbmUgX1ZJREVPX0RJUF9DVExfQSAgICAgICAgIDB4ZTAyMDAKKyNkZWZpbmUgX1ZJREVPX0RJUF9EQVRBX0EgICAgICAgIDB4ZTAyMDgKKyNkZWZpbmUgX1ZJREVPX0RJUF9HQ1BfQSAgICAgICAgIDB4ZTAyMTAKKworI2RlZmluZSBfVklERU9fRElQX0NUTF9CICAgICAgICAgMHhlMTIwMAorI2RlZmluZSBfVklERU9fRElQX0RBVEFfQiAgICAgICAgMHhlMTIwOAorI2RlZmluZSBfVklERU9fRElQX0dDUF9CICAgICAgICAgMHhlMTIxMAorCisjZGVmaW5lIFRWSURFT19ESVBfQ1RMKHBpcGUpIF9QSVBFKHBpcGUsIF9WSURFT19ESVBfQ1RMX0EsIF9WSURFT19ESVBfQ1RMX0IpCisjZGVmaW5lIFRWSURFT19ESVBfREFUQShwaXBlKSBfUElQRShwaXBlLCBfVklERU9fRElQX0RBVEFfQSwgX1ZJREVPX0RJUF9EQVRBX0IpCisjZGVmaW5lIFRWSURFT19ESVBfR0NQKHBpcGUpIF9QSVBFKHBpcGUsIF9WSURFT19ESVBfR0NQX0EsIF9WSURFT19ESVBfR0NQX0IpCisKICNkZWZpbmUgX1RSQU5TX0hUT1RBTF9CICAgICAgICAgIDB4ZTEwMDAKICNkZWZpbmUgX1RSQU5TX0hCTEFOS19CICAgICAgICAgIDB4ZTEwMDQKICNkZWZpbmUgX1RSQU5TX0hTWU5DX0IgICAgICAgICAgIDB4ZTEwMDgKQEAgLTMwNzYsNiArMzA5OSwxNiBAQAogI2RlZmluZSAgVFJBTlNfNkJQQyAgICAgICAgICAgICAoMjw8NSkKICNkZWZpbmUgIFRSQU5TXzEyQlBDICAgICAgICAgICAgKDM8PDUpCiAKKyNkZWZpbmUgX1RSQU5TQV9DSElDS0VOMgkgMHhmMDA2NAorI2RlZmluZSBfVFJBTlNCX0NISUNLRU4yCSAweGYxMDY0CisjZGVmaW5lIFRSQU5TX0NISUNLRU4yKHBpcGUpIF9QSVBFKHBpcGUsIF9UUkFOU0FfQ0hJQ0tFTjIsIF9UUkFOU0JfQ0hJQ0tFTjIpCisjZGVmaW5lICAgVFJBTlNfQVVUT1RSQUlOX0dFTl9TVEFMTF9ESVMJKDE8PDMxKQorCisjZGVmaW5lIFNPVVRIX0NISUNLRU4xCQkweGMyMDAwCisjZGVmaW5lICBGRElBX1BIQVNFX1NZTkNfU0hJRlRfT1ZSCTE5CisjZGVmaW5lICBGRElBX1BIQVNFX1NZTkNfU0hJRlRfRU4JMTgKKyNkZWZpbmUgRkRJX1BIQVNFX1NZTkNfT1ZSKHBpcGUpICgxPDwoRkRJQV9QSEFTRV9TWU5DX1NISUZUX09WUiAtICgocGlwZSkgKiAyKSkpCisjZGVmaW5lIEZESV9QSEFTRV9TWU5DX0VOKHBpcGUpICgxPDwoRkRJQV9QSEFTRV9TWU5DX1NISUZUX0VOIC0gKChwaXBlKSAqIDIpKSkKICNkZWZpbmUgU09VVEhfQ0hJQ0tFTjIJCTB4YzIwMDQKICNkZWZpbmUgIERQTFNfRURQX1BQU19GSVhfRElTCSgxPDwwKQogCkBAIC0zMjI2LDE0ICszMjU5LDEyIEBACiAjZGVmaW5lICBBRFBBX0NSVF9IT1RQTFVHX1ZPTFJFRl80NzVNViAgKDE8PDE3KQogI2RlZmluZSAgQURQQV9DUlRfSE9UUExVR19GT1JDRV9UUklHR0VSICgxPDwxNikKIAotI2RlZmluZSBBRFBBX1BJUEVfRU5BQkxFRChWLCBQKSBcCi0JKCgoVikgJiAoQURQQV9UUkFOU19TRUxFQ1RfTUFTSyB8IEFEUEFfREFDX0VOQUJMRSkpID09ICgoUCkgPDwgMzAgfCBBRFBBX0RBQ19FTkFCTEUpKQotCiAvKiBvciBTRFZPQiAqLwogI2RlZmluZSBIRE1JQiAgIDB4ZTExNDAKICNkZWZpbmUgIFBPUlRfRU5BQkxFICAgICgxIDw8IDMxKQogI2RlZmluZSAgVFJBTlNDT0RFUl9BICAgKDApCiAjZGVmaW5lICBUUkFOU0NPREVSX0IgICAoMSA8PCAzMCkKKyNkZWZpbmUgIFRSQU5TQ09ERVIocGlwZSkJKChwaXBlKSA8PCAzMCkKICNkZWZpbmUgIFRSQU5TQ09ERVJfTUFTSyAgICgxIDw8IDMwKQogI2RlZmluZSAgQ09MT1JfRk9STUFUXzhicGMgICAgICAoMCkKICNkZWZpbmUgIENPTE9SX0ZPUk1BVF8xMmJwYyAgICAgKDMgPDwgMjYpCkBAIC0zMjUwLDkgKzMyODEsNiBAQAogI2RlZmluZSAgSFNZTkNfQUNUSVZFX0hJR0ggICAgICAoMSA8PCAzKQogI2RlZmluZSAgUE9SVF9ERVRFQ1RFRCAgICAgICAgICAoMSA8PCAyKQogCi0jZGVmaW5lIEhETUlfUElQRV9FTkFCTEVEKFYsIFApIFwKLQkoKChWKSAmIChUUkFOU0NPREVSX01BU0sgfCBQT1JUX0VOQUJMRSkpID09ICgoUCkgPDwgMzAgfCBQT1JUX0VOQUJMRSkpCi0KIC8qIFBDSCBTRFZPQiBtdWx0aXBsZXggd2l0aCBIRE1JQiAqLwogI2RlZmluZSBQQ0hfU0RWT0IJSERNSUIKIApAQCAtMzMxOSw2ICszMzQ3LDcgQEAKICNkZWZpbmUgIFBPUlRfVFJBTlNfQl9TRUxfQ1BUCSgxPDwyOSkKICNkZWZpbmUgIFBPUlRfVFJBTlNfQ19TRUxfQ1BUCSgyPDwyOSkKICNkZWZpbmUgIFBPUlRfVFJBTlNfU0VMX01BU0sJKDM8PDI5KQorI2RlZmluZSAgUE9SVF9UUkFOU19TRUxfQ1BUKHBpcGUpCSgocGlwZSkgPDwgMjkpCiAKICNkZWZpbmUgVFJBTlNfRFBfQ1RMX0EJCTB4ZTAzMDAKICNkZWZpbmUgVFJBTlNfRFBfQ1RMX0IJCTB4ZTEzMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggMjg1NzU4Ni4uZjEwNzQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTgxMiw2ICs4MTIsNyBAQAogCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfSU1SID0gSTkxNV9SRUFEKF9GRElfUlhCX0lNUik7CiAJCWRldl9wcml2LT5zYXZlTUNIQkFSX1JFTkRFUl9TVEFOREJZID0KIAkJCUk5MTVfUkVBRChSU1REQllDVEwpOworCQlkZXZfcHJpdi0+c2F2ZVBDSF9QT1JUX0hPVFBMVUcgPSBJOTE1X1JFQUQoUENIX1BPUlRfSE9UUExVRyk7CiAJfSBlbHNlIHsKIAkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKIAkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKQEAgLTg2MywxMyArODY0LDE1IEBACiAJCUk5MTVfV1JJVEUoR1RJTVIsIGRldl9wcml2LT5zYXZlR1RJTVIpOwogCQlJOTE1X1dSSVRFKF9GRElfUlhBX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUik7CiAJCUk5MTVfV1JJVEUoX0ZESV9SWEJfSU1SLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEJfSU1SKTsKKwkJSTkxNV9XUklURShQQ0hfUE9SVF9IT1RQTFVHLCBkZXZfcHJpdi0+c2F2ZVBDSF9QT1JUX0hPVFBMVUcpOwogCX0gZWxzZSB7CiAJCUk5MTVfV1JJVEUoSUVSLCBkZXZfcHJpdi0+c2F2ZUlFUik7CiAJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+c2F2ZUlNUik7CiAJfQogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKKwkJaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKIAogCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKIAkJaXJvbmxha2VfZW5hYmxlX2RycHMoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCAzOTNhMzk5Li41NmE4NTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC04NzgsNyArODc4LDcgQEAKIAlpbnQgcHBfcmVnLCBsdmRzX3JlZzsKIAl1MzIgdmFsOwogCWVudW0gcGlwZSBwYW5lbF9waXBlID0gUElQRV9BOwotCWJvb2wgbG9ja2VkID0gbG9ja2VkOworCWJvb2wgbG9ja2VkID0gdHJ1ZTsKIAogCWlmIChIQVNfUENIX1NQTElUKGRldl9wcml2LT5kZXYpKSB7CiAJCXBwX3JlZyA9IFBDSF9QUF9DT05UUk9MOwpAQCAtOTgwLDExICs5ODAsNzYgQEAKIAkgICAgIHBpcGVfbmFtZShwaXBlKSk7CiB9CiAKK3N0YXRpYyBib29sIGRwX3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgZW51bSBwaXBlIHBpcGUsIHUzMiBwb3J0X3NlbCwgdTMyIHZhbCkKK3sKKwlpZiAoKHZhbCAmIERQX1BPUlRfRU4pID09IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdi0+ZGV2KSkgeworCQl1MzIJdHJhbnNfZHBfY3RsX3JlZyA9IFRSQU5TX0RQX0NUTChwaXBlKTsKKwkJdTMyCXRyYW5zX2RwX2N0bCA9IEk5MTVfUkVBRCh0cmFuc19kcF9jdGxfcmVnKTsKKwkJaWYgKCh0cmFuc19kcF9jdGwgJiBUUkFOU19EUF9QT1JUX1NFTF9NQVNLKSAhPSBwb3J0X3NlbCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAoKHZhbCAmIERQX1BJUEVfTUFTSykgIT0gKHBpcGUgPDwgMzApKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgaGRtaV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgZW51bSBwaXBlIHBpcGUsIHUzMiB2YWwpCit7CisJaWYgKCh2YWwgJiBQT1JUX0VOQUJMRSkgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2LT5kZXYpKSB7CisJCWlmICgodmFsICYgUE9SVF9UUkFOU19TRUxfTUFTSykgIT0gUE9SVF9UUkFOU19TRUxfQ1BUKHBpcGUpKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCWlmICgodmFsICYgVFJBTlNDT0RFUl9NQVNLKSAhPSBUUkFOU0NPREVSKHBpcGUpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgbHZkc19waXBlX2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgZW51bSBwaXBlIHBpcGUsIHUzMiB2YWwpCit7CisJaWYgKCh2YWwgJiBMVkRTX1BPUlRfRU4pID09IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdi0+ZGV2KSkgeworCQlpZiAoKHZhbCAmIFBPUlRfVFJBTlNfU0VMX01BU0spICE9IFBPUlRfVFJBTlNfU0VMX0NQVChwaXBlKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAoKHZhbCAmIExWRFNfUElQRV9NQVNLKSAhPSBMVkRTX1BJUEUocGlwZSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBhZHBhX3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICBlbnVtIHBpcGUgcGlwZSwgdTMyIHZhbCkKK3sKKwlpZiAoKHZhbCAmIEFEUEFfREFDX0VOQUJMRSkgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdi0+ZGV2KSkgeworCQlpZiAoKHZhbCAmIFBPUlRfVFJBTlNfU0VMX01BU0spICE9IFBPUlRfVFJBTlNfU0VMX0NQVChwaXBlKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAoKHZhbCAmIEFEUEFfUElQRV9TRUxFQ1RfTUFTSykgIT0gQURQQV9QSVBFX1NFTEVDVChwaXBlKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2b2lkIGFzc2VydF9wY2hfZHBfZGlzYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgIGVudW0gcGlwZSBwaXBlLCBpbnQgcmVnKQorCQkJCSAgIGVudW0gcGlwZSBwaXBlLCBpbnQgcmVnLCB1MzIgcG9ydF9zZWwpCiB7CiAJdTMyIHZhbCA9IEk5MTVfUkVBRChyZWcpOwotCVdBUk4oRFBfUElQRV9FTkFCTEVEKHZhbCwgcGlwZSksCisJV0FSTihkcF9waXBlX2VuYWJsZWQoZGV2X3ByaXYsIHBpcGUsIHBvcnRfc2VsLCB2YWwpLAogCSAgICAgIlBDSCBEUCAoMHglMDh4KSBlbmFibGVkIG9uIHRyYW5zY29kZXIgJWMsIHNob3VsZCBiZSBkaXNhYmxlZFxuIiwKIAkgICAgIHJlZywgcGlwZV9uYW1lKHBpcGUpKTsKIH0KQEAgLTk5Myw3ICsxMDU4LDcgQEAKIAkJCQkgICAgIGVudW0gcGlwZSBwaXBlLCBpbnQgcmVnKQogewogCXUzMiB2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQlXQVJOKEhETUlfUElQRV9FTkFCTEVEKHZhbCwgcGlwZSksCisJV0FSTihoZG1pX3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgdmFsLCBwaXBlKSwKIAkgICAgICJQQ0ggRFAgKDB4JTA4eCkgZW5hYmxlZCBvbiB0cmFuc2NvZGVyICVjLCBzaG91bGQgYmUgZGlzYWJsZWRcbiIsCiAJICAgICByZWcsIHBpcGVfbmFtZShwaXBlKSk7CiB9CkBAIC0xMDA0LDE5ICsxMDY5LDE5IEBACiAJaW50IHJlZzsKIAl1MzIgdmFsOwogCi0JYXNzZXJ0X3BjaF9kcF9kaXNhYmxlZChkZXZfcHJpdiwgcGlwZSwgUENIX0RQX0IpOwotCWFzc2VydF9wY2hfZHBfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGUsIFBDSF9EUF9DKTsKLQlhc3NlcnRfcGNoX2RwX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlLCBQQ0hfRFBfRCk7CisJYXNzZXJ0X3BjaF9kcF9kaXNhYmxlZChkZXZfcHJpdiwgcGlwZSwgUENIX0RQX0IsIFRSQU5TX0RQX1BPUlRfU0VMX0IpOworCWFzc2VydF9wY2hfZHBfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGUsIFBDSF9EUF9DLCBUUkFOU19EUF9QT1JUX1NFTF9DKTsKKwlhc3NlcnRfcGNoX2RwX2Rpc2FibGVkKGRldl9wcml2LCBwaXBlLCBQQ0hfRFBfRCwgVFJBTlNfRFBfUE9SVF9TRUxfRCk7CiAKIAlyZWcgPSBQQ0hfQURQQTsKIAl2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQlXQVJOKEFEUEFfUElQRV9FTkFCTEVEKHZhbCwgcGlwZSksCisJV0FSTihhZHBhX3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgdmFsLCBwaXBlKSwKIAkgICAgICJQQ0ggVkdBIGVuYWJsZWQgb24gdHJhbnNjb2RlciAlYywgc2hvdWxkIGJlIGRpc2FibGVkXG4iLAogCSAgICAgcGlwZV9uYW1lKHBpcGUpKTsKIAogCXJlZyA9IFBDSF9MVkRTOwogCXZhbCA9IEk5MTVfUkVBRChyZWcpOwotCVdBUk4oTFZEU19QSVBFX0VOQUJMRUQodmFsLCBwaXBlKSwKKwlXQVJOKGx2ZHNfcGlwZV9lbmFibGVkKGRldl9wcml2LCB2YWwsIHBpcGUpLAogCSAgICAgIlBDSCBMVkRTIGVuYWJsZWQgb24gdHJhbnNjb2RlciAlYywgc2hvdWxkIGJlIGRpc2FibGVkXG4iLAogCSAgICAgcGlwZV9uYW1lKHBpcGUpKTsKIApAQCAtMTI3Niw2ICsxMzQxLDE3IEBACiAJaW50ZWxfd2FpdF9mb3JfcGlwZV9vZmYoZGV2X3ByaXYtPmRldiwgcGlwZSk7CiB9CiAKKy8qCisgKiBQbGFuZSByZWdzIGFyZSBkb3VibGUgYnVmZmVyZWQsIGdvaW5nIGZyb20gZW5hYmxlZC0+ZGlzYWJsZWQgbmVlZHMgYQorICogdHJpZ2dlciBpbiBvcmRlciB0byBsYXRjaC4gIFRoZSBkaXNwbGF5IGFkZHJlc3MgcmVnIHByb3ZpZGVzIHRoaXMuCisgKi8KK3N0YXRpYyB2b2lkIGludGVsX2ZsdXNoX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgIGVudW0gcGxhbmUgcGxhbmUpCit7CisJSTkxNV9XUklURShEU1BBRERSKHBsYW5lKSwgSTkxNV9SRUFEKERTUEFERFIocGxhbmUpKSk7CisJSTkxNV9XUklURShEU1BTVVJGKHBsYW5lKSwgSTkxNV9SRUFEKERTUFNVUkYocGxhbmUpKSk7Cit9CisKIC8qKgogICogaW50ZWxfZW5hYmxlX3BsYW5lIC0gZW5hYmxlIGEgZGlzcGxheSBwbGFuZSBvbiBhIGdpdmVuIHBpcGUKICAqIEBkZXZfcHJpdjogaTkxNSBwcml2YXRlIHN0cnVjdHVyZQpAQCAtMTI5OSwyMCArMTM3NSwxMCBAQAogCQlyZXR1cm47CiAKIAlJOTE1X1dSSVRFKHJlZywgdmFsIHwgRElTUExBWV9QTEFORV9FTkFCTEUpOworCWludGVsX2ZsdXNoX2Rpc3BsYXlfcGxhbmUoZGV2X3ByaXYsIHBsYW5lKTsKIAlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2X3ByaXYtPmRldiwgcGlwZSk7CiB9CiAKLS8qCi0gKiBQbGFuZSByZWdzIGFyZSBkb3VibGUgYnVmZmVyZWQsIGdvaW5nIGZyb20gZW5hYmxlZC0+ZGlzYWJsZWQgbmVlZHMgYQotICogdHJpZ2dlciBpbiBvcmRlciB0byBsYXRjaC4gIFRoZSBkaXNwbGF5IGFkZHJlc3MgcmVnIHByb3ZpZGVzIHRoaXMuCi0gKi8KLXN0YXRpYyB2b2lkIGludGVsX2ZsdXNoX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgIGVudW0gcGxhbmUgcGxhbmUpCi17Ci0JdTMyIHJlZyA9IERTUEFERFIocGxhbmUpOwotCUk5MTVfV1JJVEUocmVnLCBJOTE1X1JFQUQocmVnKSk7Ci19Ci0KIC8qKgogICogaW50ZWxfZGlzYWJsZV9wbGFuZSAtIGRpc2FibGUgYSBkaXNwbGF5IHBsYW5lCiAgKiBAZGV2X3ByaXY6IGk5MTUgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTEzMzgsMTkgKzE0MDQsMjQgQEAKIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9wY2hfZHAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICAgZW51bSBwaXBlIHBpcGUsIGludCByZWcpCisJCQkgICBlbnVtIHBpcGUgcGlwZSwgaW50IHJlZywgdTMyIHBvcnRfc2VsKQogewogCXUzMiB2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQlpZiAoRFBfUElQRV9FTkFCTEVEKHZhbCwgcGlwZSkpCisJaWYgKGRwX3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgcGlwZSwgcG9ydF9zZWwsIHZhbCkpIHsKKwkJRFJNX0RFQlVHX0tNUygiRGlzYWJsaW5nIHBjaCBkcCAleCBvbiBwaXBlICVkXG4iLCByZWcsIHBpcGUpOwogCQlJOTE1X1dSSVRFKHJlZywgdmFsICYgfkRQX1BPUlRfRU4pOworCX0KIH0KIAogc3RhdGljIHZvaWQgZGlzYWJsZV9wY2hfaGRtaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgIGVudW0gcGlwZSBwaXBlLCBpbnQgcmVnKQogewogCXUzMiB2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQlpZiAoSERNSV9QSVBFX0VOQUJMRUQodmFsLCBwaXBlKSkKKwlpZiAoaGRtaV9waXBlX2VuYWJsZWQoZGV2X3ByaXYsIHZhbCwgcGlwZSkpIHsKKwkJRFJNX0RFQlVHX0tNUygiRGlzYWJsaW5nIHBjaCBIRE1JICV4IG9uIHBpcGUgJWRcbiIsCisJCQkgICAgICByZWcsIHBpcGUpOwogCQlJOTE1X1dSSVRFKHJlZywgdmFsICYgflBPUlRfRU5BQkxFKTsKKwl9CiB9CiAKIC8qIERpc2FibGUgYW55IHBvcnRzIGNvbm5lY3RlZCB0byB0aGlzIHRyYW5zY29kZXIgKi8KQEAgLTEzNjIsMTggKzE0MzMsMTkgQEAKIAl2YWwgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOwogCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHZhbCB8IFBBTkVMX1VOTE9DS19SRUdTKTsKIAotCWRpc2FibGVfcGNoX2RwKGRldl9wcml2LCBwaXBlLCBQQ0hfRFBfQik7Ci0JZGlzYWJsZV9wY2hfZHAoZGV2X3ByaXYsIHBpcGUsIFBDSF9EUF9DKTsKLQlkaXNhYmxlX3BjaF9kcChkZXZfcHJpdiwgcGlwZSwgUENIX0RQX0QpOworCWRpc2FibGVfcGNoX2RwKGRldl9wcml2LCBwaXBlLCBQQ0hfRFBfQiwgVFJBTlNfRFBfUE9SVF9TRUxfQik7CisJZGlzYWJsZV9wY2hfZHAoZGV2X3ByaXYsIHBpcGUsIFBDSF9EUF9DLCBUUkFOU19EUF9QT1JUX1NFTF9DKTsKKwlkaXNhYmxlX3BjaF9kcChkZXZfcHJpdiwgcGlwZSwgUENIX0RQX0QsIFRSQU5TX0RQX1BPUlRfU0VMX0QpOwogCiAJcmVnID0gUENIX0FEUEE7CiAJdmFsID0gSTkxNV9SRUFEKHJlZyk7Ci0JaWYgKEFEUEFfUElQRV9FTkFCTEVEKHZhbCwgcGlwZSkpCisJaWYgKGFkcGFfcGlwZV9lbmFibGVkKGRldl9wcml2LCB2YWwsIHBpcGUpKQogCQlJOTE1X1dSSVRFKHJlZywgdmFsICYgfkFEUEFfREFDX0VOQUJMRSk7CiAKIAlyZWcgPSBQQ0hfTFZEUzsKIAl2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQlpZiAoTFZEU19QSVBFX0VOQUJMRUQodmFsLCBwaXBlKSkgeworCWlmIChsdmRzX3BpcGVfZW5hYmxlZChkZXZfcHJpdiwgdmFsLCBwaXBlKSkgeworCQlEUk1fREVCVUdfS01TKCJkaXNhYmxlIGx2ZHMgb24gcGlwZSAlZCB2YWwgMHglMDh4XG4iLCBwaXBlLCB2YWwpOwogCQlJOTE1X1dSSVRFKHJlZywgdmFsICYgfkxWRFNfUE9SVF9FTik7CiAJCVBPU1RJTkdfUkVBRChyZWcpOwogCQl1ZGVsYXkoMTAwKTsKQEAgLTIwOTYsNyArMjE2OCw3IEBACiAKIAkvKiBubyBmYiBib3VuZCAqLwogCWlmICghY3J0Yy0+ZmIpIHsKLQkJRFJNX0RFQlVHX0tNUygiTm8gRkIgYm91bmRcbiIpOworCQlEUk1fRVJST1IoIk5vIEZCIGJvdW5kXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMTA1LDYgKzIxNzcsNyBAQAogCWNhc2UgMToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJubyBwbGFuZSBmb3IgY3J0Y1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjExNCw2ICsyMTg3LDcgQEAKIAkJCQkJIE5VTEwpOwogCWlmIChyZXQgIT0gMCkgewogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJRFJNX0VSUk9SKCJwaW4gJiBmZW5jZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjE0Miw2ICsyMjE2LDcgQEAKIAlpZiAocmV0KSB7CiAJCWk5MTVfZ2VtX29iamVjdF91bnBpbih0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYiktPm9iaik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlEUk1fRVJST1IoImZhaWxlZCB0byB1cGRhdGUgYmFzZSBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTIyNDgsNiArMjMyMywxOCBAQAogCQkJICAgRkRJX0ZFX0VSUkNfRU5BQkxFKTsKIH0KIAorc3RhdGljIHZvaWQgY3B0X3BoYXNlX3BvaW50ZXJfZW5hYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGZsYWdzID0gSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4xKTsKKworCWZsYWdzIHw9IEZESV9QSEFTRV9TWU5DX09WUihwaXBlKTsKKwlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4xLCBmbGFncyk7IC8qIG9uY2UgdG8gdW5sb2NrLi4uICovCisJZmxhZ3MgfD0gRkRJX1BIQVNFX1NZTkNfRU4ocGlwZSk7CisJSTkxNV9XUklURShTT1VUSF9DSElDS0VOMSwgZmxhZ3MpOyAvKiB0aGVuIGFnYWluIHRvIGVuYWJsZSAqLworCVBPU1RJTkdfUkVBRChTT1VUSF9DSElDS0VOMSk7Cit9CisKIC8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4cGVhay4gKi8KIHN0YXRpYyB2b2lkIGlyb25sYWtlX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKQEAgLTIzOTgsNiArMjQ4NSw5IEBACiAJUE9TVElOR19SRUFEKHJlZyk7CiAJdWRlbGF5KDE1MCk7CiAKKwlpZiAoSEFTX1BDSF9DUFQoZGV2KSkKKwkJY3B0X3BoYXNlX3BvaW50ZXJfZW5hYmxlKGRldiwgcGlwZSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrICkgewogCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwogCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CkBAIC0yNTE0LDYgKzI2MDQsOSBAQAogCVBPU1RJTkdfUkVBRChyZWcpOwogCXVkZWxheSgxNTApOwogCisJaWYgKEhBU19QQ0hfQ1BUKGRldikpCisJCWNwdF9waGFzZV9wb2ludGVyX2VuYWJsZShkZXYsIHBpcGUpOworCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKyApIHsKIAkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKIAkJdGVtcCA9IEk5MTVfUkVBRChyZWcpOwpAQCAtMjYyMyw2ICsyNzE2LDE3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBjcHRfcGhhc2VfcG9pbnRlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGZsYWdzID0gSTkxNV9SRUFEKFNPVVRIX0NISUNLRU4xKTsKKworCWZsYWdzICY9IH4oRkRJX1BIQVNFX1NZTkNfRU4ocGlwZSkpOworCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjEsIGZsYWdzKTsgLyogb25jZSB0byBkaXNhYmxlLi4uICovCisJZmxhZ3MgJj0gfihGRElfUEhBU0VfU1lOQ19PVlIocGlwZSkpOworCUk5MTVfV1JJVEUoU09VVEhfQ0hJQ0tFTjEsIGZsYWdzKTsgLyogdGhlbiBhZ2FpbiB0byBsb2NrICovCisJUE9TVElOR19SRUFEKFNPVVRIX0NISUNLRU4xKTsKK30KIHN0YXRpYyB2b2lkIGlyb25sYWtlX2ZkaV9kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtMjY1Miw2ICsyNzU2LDggQEAKIAkJSTkxNV9XUklURShGRElfUlhfQ0hJQ0tFTihwaXBlKSwKIAkJCSAgIEk5MTVfUkVBRChGRElfUlhfQ0hJQ0tFTihwaXBlKSAmCiAJCQkJICAgICB+RkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTikpOworCX0gZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2KSkgeworCQljcHRfcGhhc2VfcG9pbnRlcl9kaXNhYmxlKGRldiwgcGlwZSk7CiAJfQogCiAJLyogc3RpbGwgc2V0IHRyYWluIHBhdHRlcm4gMSAqLwpAQCAtMjg2MiwxNCArMjk2OCwxOCBAQAogCQlJOTE1X1dSSVRFKFBGX1dJTl9TWihwaXBlKSwgZGV2X3ByaXYtPnBjaF9wZl9zaXplKTsKIAl9CiAKKwkvKgorCSAqIE9uIElMSysgTFVUIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB0aGUgcGlwZSBpcyBydW5uaW5nIGJ1dCB3aXRoCisJICogY2xvY2tzIGVuYWJsZWQKKwkgKi8KKwlpbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOworCiAJaW50ZWxfZW5hYmxlX3BpcGUoZGV2X3ByaXYsIHBpcGUsIGlzX3BjaF9wb3J0KTsKIAlpbnRlbF9lbmFibGVfcGxhbmUoZGV2X3ByaXYsIHBsYW5lLCBwaXBlKTsKIAogCWlmIChpc19wY2hfcG9ydCkKIAkJaXJvbmxha2VfcGNoX2VuYWJsZShjcnRjKTsKIAotCWludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7Ci0KIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJaW50ZWxfdXBkYXRlX2ZiYyhkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtNDUzOCw3ICs0NjQ4LDkgQEAKIAkJCWlmIChjb25uZWN0b3ItPmVuY29kZXIgIT0gZW5jb2RlcikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA8IGRpc3BsYXlfYnBjKSB7CisJCQkvKiBEb24ndCB1c2UgYW4gaW52YWxpZCBFRElEIGJwYyB2YWx1ZSAqLworCQkJaWYgKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyAmJgorCQkJICAgIGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA8IGRpc3BsYXlfYnBjKSB7CiAJCQkJRFJNX0RFQlVHX0RSSVZFUigiY2xhbXBpbmcgZGlzcGxheSBicGMgKHdhcyAlZCkgdG8gRURJRCByZXBvcnRlZCBtYXggb2YgJWRcbiIsIGRpc3BsYXlfYnBjLCBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMpOwogCQkJCWRpc3BsYXlfYnBjID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBjOwogCQkJfQpAQCAtNDk4NSw2ICs1MDk3LDgxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgaXJvbmxha2VfdXBkYXRlX3BjaF9yZWZjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpoYXNfZWRwX2VuY29kZXIgPSBOVUxMOworCXUzMiB0ZW1wOworCWJvb2wgaGFzX2x2ZHMgPSBmYWxzZTsKKworCS8qIFdlIG5lZWQgdG8gdGFrZSB0aGUgZ2xvYmFsIGNvbmZpZyBpbnRvIGFjY291bnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZtb2RlX2NvbmZpZy0+Y3J0Y19saXN0LCBoZWFkKSB7CisJCWlmICghY3J0Yy0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJm1vZGVfY29uZmlnLT5lbmNvZGVyX2xpc3QsCisJCQkJICAgIGJhc2UuaGVhZCkgeworCQkJaWYgKGVuY29kZXItPmJhc2UuY3J0YyAhPSBjcnRjKQorCQkJCWNvbnRpbnVlOworCisJCQlzd2l0Y2ggKGVuY29kZXItPnR5cGUpIHsKKwkJCWNhc2UgSU5URUxfT1VUUFVUX0xWRFM6CisJCQkJaGFzX2x2ZHMgPSB0cnVlOworCQkJY2FzZSBJTlRFTF9PVVRQVVRfRURQOgorCQkJCWhhc19lZHBfZW5jb2RlciA9IGVuY29kZXI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBJcm9ubGFrZTogdHJ5IHRvIHNldHVwIGRpc3BsYXkgcmVmIGNsb2NrIGJlZm9yZSBEUExMCisJICogZW5hYmxpbmcuIFRoaXMgaXMgb25seSB1bmRlciBkcml2ZXIncyBjb250cm9sIGFmdGVyCisJICogUENIIEIgc3RlcHBpbmcsIHByZXZpb3VzIGNoaXBzZXQgc3RlcHBpbmcgc2hvdWxkIGJlCisJICogaWdub3JpbmcgdGhpcyBzZXR0aW5nLgorCSAqLworCXRlbXAgPSBJOTE1X1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisJLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCisJdGVtcCAmPSB+RFJFRl9OT05TUFJFQURfU09VUkNFX01BU0s7CisJdGVtcCB8PSBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFOworCXRlbXAgJj0gfkRSRUZfU1NDX1NPVVJDRV9NQVNLOworCXRlbXAgfD0gRFJFRl9TU0NfU09VUkNFX0VOQUJMRTsKKwlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCisJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCXVkZWxheSgyMDApOworCisJaWYgKGhhc19lZHBfZW5jb2RlcikgeworCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKKwkJCXRlbXAgfD0gRFJFRl9TU0MxX0VOQUJMRTsKKwkJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisKKwkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCXVkZWxheSgyMDApOworCQl9CisJCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKKworCQkvKiBFbmFibGUgQ1BVIHNvdXJjZSBvbiBDUFUgYXR0YWNoZWQgZURQICovCisJCWlmICghaW50ZWxfZW5jb2Rlcl9pc19wY2hfZWRwKCZoYXNfZWRwX2VuY29kZXItPmJhc2UpKSB7CisJCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX0RPV05TUFJFQUQ7CisJCQllbHNlCisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKKwkJfSBlbHNlIHsKKwkJCS8qIEVuYWJsZSBTU0Mgb24gUENIIGVEUCBpZiBuZWVkZWQgKi8KKwkJCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgeworCQkJCURSTV9FUlJPUigiZW5hYmxpbmcgU1NDIG9uIFBDSFxuIik7CisJCQkJdGVtcCB8PSBEUkVGX1NVUEVSU1BSRUFEX1NPVVJDRV9FTkFCTEU7CisJCQl9CisJCX0KKwkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOworCQl1ZGVsYXkoMjAwKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaXJvbmxha2VfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlLApAQCAtNTE1Myw3ICs1MzQwLDggQEAKIAkJdGVtcCB8PSBQSVBFXzEyQlBDOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlXQVJOKDEsICJpbnRlbF9jaG9vc2VfcGlwZV9icHAgcmV0dXJuZWQgaW52YWxpZCB2YWx1ZVxuIik7CisJCVdBUk4oMSwgImludGVsX2Nob29zZV9waXBlX2JwcCByZXR1cm5lZCBpbnZhbGlkIHZhbHVlICVkXG4iLAorCQkJcGlwZV9icHApOwogCQl0ZW1wIHw9IFBJUEVfOEJQQzsKIAkJcGlwZV9icHAgPSAyNDsKIAkJYnJlYWs7CkBAIC01MTc5LDQ5ICs1MzY3LDcgQEAKIAlpcm9ubGFrZV9jb21wdXRlX21fbihpbnRlbF9jcnRjLT5icHAsIGxhbmUsIHRhcmdldF9jbG9jaywgbGlua19idywKIAkJCSAgICAgJm1fbik7CiAKLQkvKiBJcm9ubGFrZTogdHJ5IHRvIHNldHVwIGRpc3BsYXkgcmVmIGNsb2NrIGJlZm9yZSBEUExMCi0JICogZW5hYmxpbmcuIFRoaXMgaXMgb25seSB1bmRlciBkcml2ZXIncyBjb250cm9sIGFmdGVyCi0JICogUENIIEIgc3RlcHBpbmcsIHByZXZpb3VzIGNoaXBzZXQgc3RlcHBpbmcgc2hvdWxkIGJlCi0JICogaWdub3JpbmcgdGhpcyBzZXR0aW5nLgotCSAqLwotCXRlbXAgPSBJOTE1X1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7Ci0JLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCi0JdGVtcCAmPSB+RFJFRl9OT05TUFJFQURfU09VUkNFX01BU0s7Ci0JdGVtcCB8PSBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFOwotCXRlbXAgJj0gfkRSRUZfU1NDX1NPVVJDRV9NQVNLOwotCXRlbXAgfD0gRFJFRl9TU0NfU09VUkNFX0VOQUJMRTsKLQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOwotCi0JUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOwotCXVkZWxheSgyMDApOwotCi0JaWYgKGhhc19lZHBfZW5jb2RlcikgewotCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpIHsKLQkJCXRlbXAgfD0gRFJFRl9TU0MxX0VOQUJMRTsKLQkJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7Ci0KLQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKLQkJCXVkZWxheSgyMDApOwotCQl9Ci0JCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKLQotCQkvKiBFbmFibGUgQ1BVIHNvdXJjZSBvbiBDUFUgYXR0YWNoZWQgZURQICovCi0JCWlmICghaW50ZWxfZW5jb2Rlcl9pc19wY2hfZWRwKCZoYXNfZWRwX2VuY29kZXItPmJhc2UpKSB7Ci0JCQlpZiAoaW50ZWxfcGFuZWxfdXNlX3NzYyhkZXZfcHJpdikpCi0JCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX0RPV05TUFJFQUQ7Ci0JCQllbHNlCi0JCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKLQkJfSBlbHNlIHsKLQkJCS8qIEVuYWJsZSBTU0Mgb24gUENIIGVEUCBpZiBuZWVkZWQgKi8KLQkJCWlmIChpbnRlbF9wYW5lbF91c2Vfc3NjKGRldl9wcml2KSkgewotCQkJCURSTV9FUlJPUigiZW5hYmxpbmcgU1NDIG9uIFBDSFxuIik7Ci0JCQkJdGVtcCB8PSBEUkVGX1NVUEVSU1BSRUFEX1NPVVJDRV9FTkFCTEU7Ci0JCQl9Ci0JCX0KLQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKLQkJUE9TVElOR19SRUFEKFBDSF9EUkVGX0NPTlRST0wpOwotCQl1ZGVsYXkoMjAwKTsKLQl9CisJaXJvbmxha2VfdXBkYXRlX3BjaF9yZWZjbGsoZGV2KTsKIAogCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8IDggfCBjbG9jay5tMjsKIAlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCkBAIC01MjM4LDcgKzUzODQsNyBAQAogCX0gZWxzZSBpZiAoaXNfc2R2byAmJiBpc190dikKIAkJZmFjdG9yID0gMjA7CiAKLQlpZiAoY2xvY2subTEgPCBmYWN0b3IgKiBjbG9jay5uKQorCWlmIChjbG9jay5tIDwgZmFjdG9yICogY2xvY2subikKIAkJZnAgfD0gRlBfQ0JfVFVORTsKIAogCWRwbGwgPSAwOwpAQCAtNTUxNiw2ICs1NjYyLDggQEAKIAogCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgcGlwZSk7CiAKKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09OOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzA5MCw4ICs3MjM4LDYgQEAKIAkJCWludGVsX2VuY29kZXJfY2xvbmVzKGRldiwgZW5jb2Rlci0+Y2xvbmVfbWFzayk7CiAJfQogCi0JaW50ZWxfcGFuZWxfc2V0dXBfYmFja2xpZ2h0KGRldik7Ci0KIAkvKiBkaXNhYmxlIGFsbCB0aGUgcG9zc2libGUgb3V0cHV0cy9jcnRjcyBiZWZvcmUgZW50ZXJpbmcgS01TIG1vZGUgKi8KIAlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkZXYpOwogfQpAQCAtNzcxNCwxMCArNzg2MCwxMiBAQAogCQkgICBJTEtfRFBBUkJfQ0xLX0dBVEUgIHwKIAkJICAgSUxLX0RQRkRfQ0xLX0dBVEUpOwogCi0JZm9yX2VhY2hfcGlwZShwaXBlKQorCWZvcl9lYWNoX3BpcGUocGlwZSkgewogCQlJOTE1X1dSSVRFKERTUENOVFIocGlwZSksCiAJCQkgICBJOTE1X1JFQUQoRFNQQ05UUihwaXBlKSkgfAogCQkJICAgRElTUFBMQU5FX1RSSUNLTEVfRkVFRF9ESVNBQkxFKTsKKwkJaW50ZWxfZmx1c2hfZGlzcGxheV9wbGFuZShkZXZfcHJpdiwgcGlwZSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpdnlicmlkZ2VfaW5pdF9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTc3MzQsMTAgKzc4ODIsMTIgQEAKIAogCUk5MTVfV1JJVEUoSUxLX0RTUENMS19HQVRFLCBJVkJfVlJIVU5JVF9DTEtfR0FURSk7CiAKLQlmb3JfZWFjaF9waXBlKHBpcGUpCisJZm9yX2VhY2hfcGlwZShwaXBlKSB7CiAJCUk5MTVfV1JJVEUoRFNQQ05UUihwaXBlKSwKIAkJCSAgIEk5MTVfUkVBRChEU1BDTlRSKHBpcGUpKSB8CiAJCQkgICBESVNQUExBTkVfVFJJQ0tMRV9GRUVEX0RJU0FCTEUpOworCQlpbnRlbF9mbHVzaF9kaXNwbGF5X3BsYW5lKGRldl9wcml2LCBwaXBlKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGc0eF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtNzgyMCw2ICs3OTcwLDcgQEAKIHN0YXRpYyB2b2lkIGNwdF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHBpcGU7CiAKIAkvKgogCSAqIE9uIEliZXggUGVhayBhbmQgQ291Z2FyIFBvaW50LCB3ZSBuZWVkIHRvIGRpc2FibGUgY2xvY2sKQEAgLTc4MjksNiArNzk4MCw5IEBACiAJSTkxNV9XUklURShTT1VUSF9EU1BDTEtfR0FURV9ELCBQQ0hfRFBMU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKIAlJOTE1X1dSSVRFKFNPVVRIX0NISUNLRU4yLCBJOTE1X1JFQUQoU09VVEhfQ0hJQ0tFTjIpIHwKIAkJICAgRFBMU19FRFBfUFBTX0ZJWF9ESVMpOworCS8qIFdpdGhvdXQgdGhpcywgbW9kZSBzZXRzIG1heSBmYWlsIHNpbGVudGx5IG9uIEZESSAqLworCWZvcl9lYWNoX3BpcGUocGlwZSkKKwkJSTkxNV9XUklURShUUkFOU19DSElDS0VOMihwaXBlKSwgVFJBTlNfQVVUT1RSQUlOX0dFTl9TVEFMTF9ESVMpOwogfQogCiBzdGF0aWMgdm9pZCBpcm9ubGFrZV90ZWFyZG93bl9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTgxNzgsNiArODMzMiw5IEBACiAKIAkvKiBMZW5vdm8gVTE2MCBjYW5ub3QgdXNlIFNTQyBvbiBMVkRTICovCiAJeyAweDAwNDYsIDB4MTdhYSwgMHgzOTIwLCBxdWlya19zc2NfZm9yY2VfZGlzYWJsZSB9LAorCisJLyogU29ueSBWYWlvIFkgY2Fubm90IHVzZSBTU0Mgb24gTFZEUyAqLworCXsgMHgwMDQ2LCAweDEwNGQsIDB4OTA3NiwgcXVpcmtfc3NjX2ZvcmNlX2Rpc2FibGUgfSwKIH07CiAKIHN0YXRpYyB2b2lkIGludGVsX2luaXRfcXVpcmtzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCBmNzk3ZmI1Li40NGZlZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTUwLDkgKzUwLDEwIEBACiAJYm9vbCBoYXNfYXVkaW87CiAJaW50IGZvcmNlX2F1ZGlvOwogCXVpbnQzMl90IGNvbG9yX3JhbmdlOworCWludCBkcG1zX21vZGU7CiAJdWludDhfdCBsaW5rX2J3OwogCXVpbnQ4X3QgbGFuZV9jb3VudDsKLQl1aW50OF90IGRwY2RbNF07CisJdWludDhfdCBkcGNkWzhdOwogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwogCXN0cnVjdCBpMmNfYWxnb19kcF9hdXhfZGF0YSBhbGdvOwogCWJvb2wgaXNfcGNoX2VkcDsKQEAgLTMxNiw5ICszMTcsMTcgQEAKIAllbHNlCiAJCXByZWNoYXJnZSA9IDU7CiAKLQlpZiAoSTkxNV9SRUFEKGNoX2N0bCkgJiBEUF9BVVhfQ0hfQ1RMX1NFTkRfQlVTWSkgewotCQlEUk1fRVJST1IoImRwX2F1eF9jaCBub3Qgc3RhcnRlZCBzdGF0dXMgMHglMDh4XG4iLAotCQkJICBJOTE1X1JFQUQoY2hfY3RsKSk7CisJLyogVHJ5IHRvIHdhaXQgZm9yIGFueSBwcmV2aW91cyBBVVggY2hhbm5lbCBhY3Rpdml0eSAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgMzsgdHJ5KyspIHsKKwkJc3RhdHVzID0gSTkxNV9SRUFEKGNoX2N0bCk7CisJCWlmICgoc3RhdHVzICYgRFBfQVVYX0NIX0NUTF9TRU5EX0JVU1kpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmICh0cnkgPT0gMykgeworCQlXQVJOKDEsICJkcF9hdXhfY2ggbm90IHN0YXJ0ZWQgc3RhdHVzIDB4JTA4eFxuIiwKKwkJICAgICBJOTE1X1JFQUQoY2hfY3RsKSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03NzAsNiArNzc5LDcgQEAKIAltZW1zZXQoaW50ZWxfZHAtPmxpbmtfY29uZmlndXJhdGlvbiwgMCwgRFBfTElOS19DT05GSUdVUkFUSU9OX1NJWkUpOwogCWludGVsX2RwLT5saW5rX2NvbmZpZ3VyYXRpb25bMF0gPSBpbnRlbF9kcC0+bGlua19idzsKIAlpbnRlbF9kcC0+bGlua19jb25maWd1cmF0aW9uWzFdID0gaW50ZWxfZHAtPmxhbmVfY291bnQ7CisJaW50ZWxfZHAtPmxpbmtfY29uZmlndXJhdGlvbls4XSA9IERQX1NFVF9BTlNJXzhCMTBCOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgRFBDRCB2ZXJzaW9uID4gMS4xIGFuZCBlbmhhbmNlZCBmcmFtaW5nIHN1cHBvcnQKQEAgLTEwMTEsNiArMTAyMSw4IEBACiAKIAlpZiAoaXNfZWRwKGludGVsX2RwKSkKIAkJaXJvbmxha2VfZWRwX2JhY2tsaWdodF9vbihkZXYpOworCisJaW50ZWxfZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDQ1LDYgKzEwNTcsNyBAQAogCQlpZiAoaXNfZWRwKGludGVsX2RwKSkKIAkJCWlyb25sYWtlX2VkcF9iYWNrbGlnaHRfb24oZGV2KTsKIAl9CisJaW50ZWxfZHAtPmRwbXNfbW9kZSA9IG1vZGU7CiB9CiAKIC8qCkBAIC0xMzM0LDEwICsxMzQ3LDE2IEBACiAJdTMyIHJlZzsKIAl1aW50MzJfdCBEUCA9IGludGVsX2RwLT5EUDsKIAotCS8qIEVuYWJsZSBvdXRwdXQsIHdhaXQgZm9yIGl0IHRvIGJlY29tZSBhY3RpdmUgKi8KLQlJOTE1X1dSSVRFKGludGVsX2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOwotCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci0JaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7CisJLyoKKwkgKiBPbiBDUFQgd2UgaGF2ZSB0byBlbmFibGUgdGhlIHBvcnQgaW4gdHJhaW5pbmcgcGF0dGVybiAxLCB3aGljaAorCSAqIHdpbGwgaGFwcGVuIGJlbG93IGluIGludGVsX2RwX3NldF9saW5rX3RyYWluLiAgT3RoZXJ3aXNlLCBlbmFibGUKKwkgKiB0aGUgcG9ydCBhbmQgd2FpdCBmb3IgaXQgdG8gYmVjb21lIGFjdGl2ZS4KKwkgKi8KKwlpZiAoIUhBU19QQ0hfQ1BUKGRldikpIHsKKwkJSTkxNV9XUklURShpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKKwkJUE9TVElOR19SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKTsKKwkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSk7CisJfQogCiAJLyogV3JpdGUgdGhlIGxpbmsgY29uZmlndXJhdGlvbiBkYXRhICovCiAJaW50ZWxfZHBfYXV4X25hdGl2ZV93cml0ZShpbnRlbF9kcCwgRFBfTElOS19CV19TRVQsCkBAIC0xMzcwLDcgKzEzODksOCBAQAogCQkJcmVnID0gRFAgfCBEUF9MSU5LX1RSQUlOX1BBVF8xOwogCiAJCWlmICghaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsIHJlZywKLQkJCQkJICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEpKQorCQkJCQkgICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8CisJCQkJCSAgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKQogCQkJYnJlYWs7CiAJCS8qIFNldCB0cmFpbmluZyBwYXR0ZXJuIDEgKi8KIApAQCAtMTQ0NSw3ICsxNDY1LDggQEAKIAogCQkvKiBjaGFubmVsIGVxIHBhdHRlcm4gKi8KIAkJaWYgKCFpbnRlbF9kcF9zZXRfbGlua190cmFpbihpbnRlbF9kcCwgcmVnLAotCQkJCQkgICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fMikpCisJCQkJCSAgICAgRFBfVFJBSU5JTkdfUEFUVEVSTl8yIHwKKwkJCQkJICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpCiAJCQlicmVhazsKIAogCQl1ZGVsYXkoNDAwKTsKQEAgLTE1NTksNiArMTU4MCwxOCBAQAogCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9kcF9nZXRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCWlmIChpbnRlbF9kcF9hdXhfbmF0aXZlX3JlYWRfcmV0cnkoaW50ZWxfZHAsIDB4MDAwLCBpbnRlbF9kcC0+ZHBjZCwKKwkJCQkJICAgc2l6ZW9mIChpbnRlbF9kcC0+ZHBjZCkpICYmCisJICAgIChpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0gIT0gMCkpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogQWNjb3JkaW5nIHRvIERQIHNwZWMKICAqIDUuMS4yOgpAQCAtMTU3MSwzNiArMTYwNCw0NCBAQAogc3RhdGljIHZvaWQKIGludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7Ci0JaW50IHJldDsKKwlpZiAoaW50ZWxfZHAtPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQorCQlyZXR1cm47CiAKIAlpZiAoIWludGVsX2RwLT5iYXNlLmJhc2UuY3J0YykKIAkJcmV0dXJuOwogCisJLyogVHJ5IHRvIHJlYWQgcmVjZWl2ZXIgc3RhdHVzIGlmIHRoZSBsaW5rIGFwcGVhcnMgdG8gYmUgdXAgKi8KIAlpZiAoIWludGVsX2RwX2dldF9saW5rX3N0YXR1cyhpbnRlbF9kcCkpIHsKIAkJaW50ZWxfZHBfbGlua19kb3duKGludGVsX2RwKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIFRyeSB0byByZWFkIHJlY2VpdmVyIHN0YXR1cyBpZiB0aGUgbGluayBhcHBlYXJzIHRvIGJlIHVwICovCi0JcmV0ID0gaW50ZWxfZHBfYXV4X25hdGl2ZV9yZWFkKGludGVsX2RwLAotCQkJCSAgICAgICAweDAwMCwgaW50ZWxfZHAtPmRwY2QsCi0JCQkJICAgICAgIHNpemVvZiAoaW50ZWxfZHAtPmRwY2QpKTsKLQlpZiAocmV0ICE9IHNpemVvZihpbnRlbF9kcC0+ZHBjZCkpIHsKKwkvKiBOb3cgcmVhZCB0aGUgRFBDRCB0byBzZWUgaWYgaXQncyBhY3R1YWxseSBydW5uaW5nICovCisJaWYgKCFpbnRlbF9kcF9nZXRfZHBjZChpbnRlbF9kcCkpIHsKIAkJaW50ZWxfZHBfbGlua19kb3duKGludGVsX2RwKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICghaW50ZWxfY2hhbm5lbF9lcV9vayhpbnRlbF9kcCkpIHsKKwkJRFJNX0RFQlVHX0tNUygiJXM6IGNoYW5uZWwgRVEgbm90IG9rLCByZXRyYWluaW5nXG4iLAorCQkJICAgICAgZHJtX2dldF9lbmNvZGVyX25hbWUoJmludGVsX2RwLT5iYXNlLmJhc2UpKTsKIAkJaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7CiAJCWludGVsX2RwX2NvbXBsZXRlX2xpbmtfdHJhaW4oaW50ZWxfZHApOwogCX0KIH0KIAogc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2ludGVsX2RwX2RldGVjdF9kcGNkKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCit7CisJaWYgKGludGVsX2RwX2dldF9kcGNkKGludGVsX2RwKSkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKIGlyb25sYWtlX2RwX2RldGVjdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwotCWJvb2wgcmV0OwogCiAJLyogQ2FuJ3QgZGlzY29ubmVjdCBlRFAsIGJ1dCB5b3UgY2FuIGNsb3NlIHRoZSBsaWQuLi4gKi8KIAlpZiAoaXNfZWRwKGludGVsX2RwKSkgewpAQCAtMTYxMCwxNSArMTY1MSw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0Jc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Ci0JcmV0ID0gaW50ZWxfZHBfYXV4X25hdGl2ZV9yZWFkX3JldHJ5KGludGVsX2RwLAotCQkJCQkgICAgIDB4MDAwLCBpbnRlbF9kcC0+ZHBjZCwKLQkJCQkJICAgICBzaXplb2YgKGludGVsX2RwLT5kcGNkKSk7Ci0JaWYgKHJldCAmJiBpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0gIT0gMCkKLQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JRFJNX0RFQlVHX0tNUygiRFBDRDogJWh4JWh4JWh4JWh4XG4iLCBpbnRlbF9kcC0+ZHBjZFswXSwKLQkJICAgICAgaW50ZWxfZHAtPmRwY2RbMV0sIGludGVsX2RwLT5kcGNkWzJdLCBpbnRlbF9kcC0+ZHBjZFszXSk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gaW50ZWxfZHBfZGV0ZWN0X2RwY2QoaW50ZWxfZHApOwogfQogCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwpAQCAtMTYyNiw3ICsxNjU5LDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHAtPmJhc2UuYmFzZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1czsKIAl1aW50MzJfdCB0ZW1wLCBiaXQ7CiAKIAlzd2l0Y2ggKGludGVsX2RwLT5vdXRwdXRfcmVnKSB7CkBAIC0xNjQ4LDE1ICsxNjgwLDcgQEAKIAlpZiAoKHRlbXAgJiBiaXQpID09IDApCiAJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAotCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCWlmIChpbnRlbF9kcF9hdXhfbmF0aXZlX3JlYWQoaW50ZWxfZHAsIDB4MDAwLCBpbnRlbF9kcC0+ZHBjZCwKLQkJCQkgICAgIHNpemVvZiAoaW50ZWxfZHAtPmRwY2QpKSA9PSBzaXplb2YgKGludGVsX2RwLT5kcGNkKSkKLQl7Ci0JCWlmIChpbnRlbF9kcC0+ZHBjZFtEUF9EUENEX1JFVl0gIT0gMCkKLQkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwotCX0KLQotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGludGVsX2RwX2RldGVjdF9kcGNkKGludGVsX2RwKTsKIH0KIAogLyoqCkBAIC0xNjc5LDYgKzE3MDMsMTIgQEAKIAkJc3RhdHVzID0gaXJvbmxha2VfZHBfZGV0ZWN0KGludGVsX2RwKTsKIAllbHNlCiAJCXN0YXR1cyA9IGc0eF9kcF9kZXRlY3QoaW50ZWxfZHApOworCisJRFJNX0RFQlVHX0tNUygiRFBDRDogJTAyaHglMDJoeCUwMmh4JTAyaHglMDJoeCUwMmh4JTAyaHglMDJoeFxuIiwKKwkJICAgICAgaW50ZWxfZHAtPmRwY2RbMF0sIGludGVsX2RwLT5kcGNkWzFdLCBpbnRlbF9kcC0+ZHBjZFsyXSwKKwkJICAgICAgaW50ZWxfZHAtPmRwY2RbM10sIGludGVsX2RwLT5kcGNkWzRdLCBpbnRlbF9kcC0+ZHBjZFs1XSwKKwkJICAgICAgaW50ZWxfZHAtPmRwY2RbNl0sIGludGVsX2RwLT5kcGNkWzddKTsKKwogCWlmIChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCiAJCXJldHVybiBzdGF0dXM7CiAKQEAgLTE4MTEsNiArMTg0MSwxMSBAQAogc3RhdGljIHZvaWQKIGludGVsX2RwX2Rlc3Ryb3kgKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCisJaWYgKGludGVsX2RwZF9pc19lZHAoZGV2KSkKKwkJaW50ZWxfcGFuZWxfZGVzdHJveV9iYWNrbGlnaHQoZGV2KTsKKwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CiAJa2ZyZWUoY29ubmVjdG9yKTsKQEAgLTE5MjQsNiArMTk1OSw3IEBACiAJCXJldHVybjsKIAogCWludGVsX2RwLT5vdXRwdXRfcmVnID0gb3V0cHV0X3JlZzsKKwlpbnRlbF9kcC0+ZHBtc19tb2RlID0gLTE7CiAKIAlpbnRlbF9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnRlbF9jb25uZWN0b3IpIHsKQEAgLTIwMDAsNyArMjAzNiw3IEBACiAKIAkvKiBDYWNoZSBzb21lIERQQ0QgZGF0YSBpbiB0aGUgZURQIGNhc2UgKi8KIAlpZiAoaXNfZWRwKGludGVsX2RwKSkgewotCQlpbnQgcmV0OworCQlib29sIHJldDsKIAkJdTMyIHBwX29uLCBwcF9kaXY7CiAKIAkJcHBfb24gPSBJOTE1X1JFQUQoUENIX1BQX09OX0RFTEFZUyk7CkBAIC0yMDEzLDExICsyMDQ5LDkgQEAKIAkJZGV2X3ByaXYtPnBhbmVsX3QxMiAqPSAxMDA7IC8qIHQxMiBpbiAxMDBtcyB1bml0cyAqLwogCiAJCWlyb25sYWtlX2VkcF9wYW5lbF92ZGRfb24oaW50ZWxfZHApOwotCQlyZXQgPSBpbnRlbF9kcF9hdXhfbmF0aXZlX3JlYWQoaW50ZWxfZHAsIERQX0RQQ0RfUkVWLAotCQkJCQkgICAgICAgaW50ZWxfZHAtPmRwY2QsCi0JCQkJCSAgICAgICBzaXplb2YoaW50ZWxfZHAtPmRwY2QpKTsKKwkJcmV0ID0gaW50ZWxfZHBfZ2V0X2RwY2QoaW50ZWxfZHApOwogCQlpcm9ubGFrZV9lZHBfcGFuZWxfdmRkX29mZihpbnRlbF9kcCk7Ci0JCWlmIChyZXQgPT0gc2l6ZW9mKGludGVsX2RwLT5kcGNkKSkgeworCQlpZiAocmV0KSB7CiAJCQlpZiAoaW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdID49IDB4MTEpCiAJCQkJZGV2X3ByaXYtPm5vX2F1eF9oYW5kc2hha2UgPQogCQkJCQlpbnRlbF9kcC0+ZHBjZFtEUF9NQVhfRE9XTlNQUkVBRF0gJgpAQCAtMjA0Myw2ICsyMDc3LDggQEAKIAkJCQkJRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiAJCQl9CiAJCX0KKwkJZGV2X3ByaXYtPmludF9lZHBfY29ubmVjdG9yID0gY29ubmVjdG9yOworCQlpbnRlbF9wYW5lbF9zZXR1cF9iYWNrbGlnaHQoZGV2KTsKIAl9CiAKIAlpbnRlbF9kcF9hZGRfcHJvcGVydGllcyhpbnRlbF9kcCwgY29ubmVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggNmU5OTBmOS4uMGIyZWU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTE3OCwxMCArMTc4LDI4IEBACiAjZGVmaW5lIHRvX2ludGVsX2VuY29kZXIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBpbnRlbF9lbmNvZGVyLCBiYXNlKQogI2RlZmluZSB0b19pbnRlbF9mcmFtZWJ1ZmZlcih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyLCBiYXNlKQogCisjZGVmaW5lIERJUF9IRUFERVJfU0laRQk1CisKICNkZWZpbmUgRElQX1RZUEVfQVZJICAgIDB4ODIKICNkZWZpbmUgRElQX1ZFUlNJT05fQVZJIDB4MgogI2RlZmluZSBESVBfTEVOX0FWSSAgICAgMTMKIAorI2RlZmluZSBESVBfVFlQRV9TUEQJMHgzCisjZGVmaW5lIERJUF9WRVJTSU9OX1NQRAkweDEKKyNkZWZpbmUgRElQX0xFTl9TUEQJMjUKKyNkZWZpbmUgRElQX1NQRF9VTktOT1dOCTAKKyNkZWZpbmUgRElQX1NQRF9EU1RCCTB4MQorI2RlZmluZSBESVBfU1BEX0RWRFAJMHgyCisjZGVmaW5lIERJUF9TUERfRFZIUwkweDMKKyNkZWZpbmUgRElQX1NQRF9IRERWUgkweDQKKyNkZWZpbmUgRElQX1NQRF9EVkMJMHg1CisjZGVmaW5lIERJUF9TUERfRFNDCTB4NgorI2RlZmluZSBESVBfU1BEX1ZDRAkweDcKKyNkZWZpbmUgRElQX1NQRF9HQU1FCTB4OAorI2RlZmluZSBESVBfU1BEX1BDCTB4OQorI2RlZmluZSBESVBfU1BEX0JECTB4YQorI2RlZmluZSBESVBfU1BEX1NDRAkweGIKKwogc3RydWN0IGRpcF9pbmZvZnJhbWUgewogCXVpbnQ4X3QgdHlwZTsJCS8qIEhCMCAqLwogCXVpbnQ4X3QgdmVyOwkJLyogSEIxICovCkBAIC0yMDYsNiArMjI0LDExIEBACiAJCQl1aW50MTZfdCBsZWZ0X2Jhcl9lbmQ7CiAJCQl1aW50MTZfdCByaWdodF9iYXJfc3RhcnQ7CiAJCX0gYXZpOworCQlzdHJ1Y3QgeworCQkJdWludDhfdCB2bls4XTsKKwkJCXVpbnQ4X3QgcGRbMTZdOworCQkJdWludDhfdCBzZGk7CisJCX0gc3BkOwogCQl1aW50OF90IHBheWxvYWRbMjddOwogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJvZHk7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwpAQCAtMjc0LDkgKzI5NywxMCBAQAogZXh0ZXJuIHUzMiBpbnRlbF9wYW5lbF9nZXRfbWF4X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB1MzIgaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX3BhbmVsX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGxldmVsKTsKLWV4dGVybiB2b2lkIGludGVsX3BhbmVsX3NldHVwX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaW50ZWxfcGFuZWxfc2V0dXBfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaW50ZWxfcGFuZWxfZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGludGVsX3BhbmVsX2Rpc2FibGVfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfcGFuZWxfZGVzdHJveV9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBpbnRlbF9wYW5lbF9kZXRlY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiB2b2lkIGludGVsX2NydGNfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCAxZWQ4ZTY5Li4yMjZiYTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC00NSw2ICs0NSw4IEBACiAJYm9vbCBoYXNfaGRtaV9zaW5rOwogCWJvb2wgaGFzX2F1ZGlvOwogCWludCBmb3JjZV9hdWRpbzsKKwl2b2lkICgqd3JpdGVfaW5mb2ZyYW1lKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJc3RydWN0IGRpcF9pbmZvZnJhbWUgKmZyYW1lKTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaGRtaSAqZW5jX3RvX2ludGVsX2hkbWkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNTgsMzcgKzYwLDcwIEBACiAJCQkgICAgc3RydWN0IGludGVsX2hkbWksIGJhc2UpOwogfQogCi12b2lkIGludGVsX2RpcF9pbmZvZnJhbWVfY3N1bShzdHJ1Y3QgZGlwX2luZm9mcmFtZSAqYXZpX2lmKQordm9pZCBpbnRlbF9kaXBfaW5mb2ZyYW1lX2NzdW0oc3RydWN0IGRpcF9pbmZvZnJhbWUgKmZyYW1lKQogewotCXVpbnQ4X3QgKmRhdGEgPSAodWludDhfdCAqKWF2aV9pZjsKKwl1aW50OF90ICpkYXRhID0gKHVpbnQ4X3QgKilmcmFtZTsKIAl1aW50OF90IHN1bSA9IDA7CiAJdW5zaWduZWQgaTsKIAotCWF2aV9pZi0+Y2hlY2tzdW0gPSAwOwotCWF2aV9pZi0+ZWNjID0gMDsKKwlmcmFtZS0+Y2hlY2tzdW0gPSAwOworCWZyYW1lLT5lY2MgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZigqYXZpX2lmKTsgaSsrKQorCS8qIEhlYWRlciBpc24ndCBwYXJ0IG9mIHRoZSBjaGVja3N1bSAqLworCWZvciAoaSA9IDU7IGkgPCBmcmFtZS0+bGVuOyBpKyspCiAJCXN1bSArPSBkYXRhW2ldOwogCi0JYXZpX2lmLT5jaGVja3N1bSA9IDB4MTAwIC0gc3VtOworCWZyYW1lLT5jaGVja3N1bSA9IDB4MTAwIC0gc3VtOwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9oZG1pX3NldF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3N0YXRpYyB1MzIgaW50ZWxfaW5mb2ZyYW1lX2luZGV4KHN0cnVjdCBkaXBfaW5mb2ZyYW1lICpmcmFtZSkKIHsKLQlzdHJ1Y3QgZGlwX2luZm9mcmFtZSBhdmlfaWYgPSB7Ci0JCS50eXBlID0gRElQX1RZUEVfQVZJLAotCQkudmVyID0gRElQX1ZFUlNJT05fQVZJLAotCQkubGVuID0gRElQX0xFTl9BVkksCi0JfTsKLQl1aW50MzJfdCAqZGF0YSA9ICh1aW50MzJfdCAqKSZhdmlfaWY7CisJdTMyIGZsYWdzID0gMDsKKworCXN3aXRjaCAoZnJhbWUtPnR5cGUpIHsKKwljYXNlIERJUF9UWVBFX0FWSToKKwkJZmxhZ3MgfD0gVklERU9fRElQX1NFTEVDVF9BVkk7CisJCWJyZWFrOworCWNhc2UgRElQX1RZUEVfU1BEOgorCQlmbGFncyB8PSBWSURFT19ESVBfU0VMRUNUX1NQRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0RFQlVHX0RSSVZFUigidW5rbm93biBpbmZvIGZyYW1lIHR5cGUgJWRcbiIsIGZyYW1lLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgdTMyIGludGVsX2luZm9mcmFtZV9mbGFncyhzdHJ1Y3QgZGlwX2luZm9mcmFtZSAqZnJhbWUpCit7CisJdTMyIGZsYWdzID0gMDsKKworCXN3aXRjaCAoZnJhbWUtPnR5cGUpIHsKKwljYXNlIERJUF9UWVBFX0FWSToKKwkJZmxhZ3MgfD0gVklERU9fRElQX0VOQUJMRV9BVkkgfCBWSURFT19ESVBfRlJFUV9WU1lOQzsKKwkJYnJlYWs7CisJY2FzZSBESVBfVFlQRV9TUEQ6CisJCWZsYWdzIHw9IFZJREVPX0RJUF9FTkFCTEVfU1BEIHwgVklERU9fRElQX0ZSRVFfMlZTWU5DOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fREVCVUdfRFJJVkVSKCJ1bmtub3duIGluZm8gZnJhbWUgdHlwZSAlZFxuIiwgZnJhbWUtPnR5cGUpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfd3JpdGVfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgc3RydWN0IGRpcF9pbmZvZnJhbWUgKmZyYW1lKQoreworCXVpbnQzMl90ICpkYXRhID0gKHVpbnQzMl90ICopZnJhbWU7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pID0gZW5jX3RvX2ludGVsX2hkbWkoZW5jb2Rlcik7Ci0JdTMyIHBvcnQ7Ci0JdW5zaWduZWQgaTsKKwl1MzIgcG9ydCwgZmxhZ3MsIHZhbCA9IEk5MTVfUkVBRChWSURFT19ESVBfQ1RMKTsKKwl1bnNpZ25lZCBpLCBsZW4gPSBESVBfSEVBREVSX1NJWkUgKyBmcmFtZS0+bGVuOwogCi0JaWYgKCFpbnRlbF9oZG1pLT5oYXNfaGRtaV9zaW5rKQotCQlyZXR1cm47CiAKIAkvKiBYWFggZmlyc3QgZ3Vlc3MgYXQgaGFuZGxpbmcgdmlkZW8gcG9ydCwgaXMgdGhpcyBjb3JyZW50PyAqLwogCWlmIChpbnRlbF9oZG1pLT5zZHZveF9yZWcgPT0gU0RWT0IpCkBAIC05OCwxOCArMTMzLDg3IEBACiAJZWxzZQogCQlyZXR1cm47CiAKLQlJOTE1X1dSSVRFKFZJREVPX0RJUF9DVEwsIFZJREVPX0RJUF9FTkFCTEUgfCBwb3J0IHwKLQkJICAgVklERU9fRElQX1NFTEVDVF9BVkkgfCBWSURFT19ESVBfRlJFUV9WU1lOQyk7CisJZmxhZ3MgPSBpbnRlbF9pbmZvZnJhbWVfaW5kZXgoZnJhbWUpOwogCi0JaW50ZWxfZGlwX2luZm9mcmFtZV9jc3VtKCZhdmlfaWYpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYXZpX2lmKTsgaSArPSA0KSB7CisJdmFsICY9IH5WSURFT19ESVBfU0VMRUNUX01BU0s7CisKKwlJOTE1X1dSSVRFKFZJREVPX0RJUF9DVEwsIHZhbCB8IHBvcnQgfCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKIAkJSTkxNV9XUklURShWSURFT19ESVBfREFUQSwgKmRhdGEpOwogCQlkYXRhKys7CiAJfQogCi0JSTkxNV9XUklURShWSURFT19ESVBfQ1RMLCBWSURFT19ESVBfRU5BQkxFIHwgcG9ydCB8Ci0JCSAgIFZJREVPX0RJUF9TRUxFQ1RfQVZJIHwgVklERU9fRElQX0ZSRVFfVlNZTkMgfAotCQkgICBWSURFT19ESVBfRU5BQkxFX0FWSSk7CisJZmxhZ3MgfD0gaW50ZWxfaW5mb2ZyYW1lX2ZsYWdzKGZyYW1lKTsKKworCUk5MTVfV1JJVEUoVklERU9fRElQX0NUTCwgVklERU9fRElQX0VOQUJMRSB8IHZhbCB8IHBvcnQgfCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGlyb25sYWtlX3dyaXRlX2luZm9mcmFtZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICAgICBzdHJ1Y3QgZGlwX2luZm9mcmFtZSAqZnJhbWUpCit7CisJdWludDMyX3QgKmRhdGEgPSAodWludDMyX3QgKilmcmFtZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gZW5jb2Rlci0+Y3J0YzsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHJlZyA9IFRWSURFT19ESVBfQ1RMKGludGVsX2NydGMtPnBpcGUpOworCXVuc2lnbmVkIGksIGxlbiA9IERJUF9IRUFERVJfU0laRSArIGZyYW1lLT5sZW47CisJdTMyIGZsYWdzLCB2YWwgPSBJOTE1X1JFQUQocmVnKTsKKworCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIGludGVsX2NydGMtPnBpcGUpOworCisJZmxhZ3MgPSBpbnRlbF9pbmZvZnJhbWVfaW5kZXgoZnJhbWUpOworCisJdmFsICY9IH5WSURFT19ESVBfU0VMRUNUX01BU0s7CisKKwlJOTE1X1dSSVRFKHJlZywgdmFsIHwgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7CisJCUk5MTVfV1JJVEUoVFZJREVPX0RJUF9EQVRBKGludGVsX2NydGMtPnBpcGUpLCAqZGF0YSk7CisJCWRhdGErKzsKKwl9CisKKwlmbGFncyB8PSBpbnRlbF9pbmZvZnJhbWVfZmxhZ3MoZnJhbWUpOworCisJSTkxNV9XUklURShyZWcsIFZJREVPX0RJUF9FTkFCTEUgfCB2YWwgfCBmbGFncyk7Cit9CitzdGF0aWMgdm9pZCBpbnRlbF9zZXRfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZGlwX2luZm9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IGludGVsX2hkbWkgKmludGVsX2hkbWkgPSBlbmNfdG9faW50ZWxfaGRtaShlbmNvZGVyKTsKKworCWlmICghaW50ZWxfaGRtaS0+aGFzX2hkbWlfc2luaykKKwkJcmV0dXJuOworCisJaW50ZWxfZGlwX2luZm9mcmFtZV9jc3VtKGZyYW1lKTsKKwlpbnRlbF9oZG1pLT53cml0ZV9pbmZvZnJhbWUoZW5jb2RlciwgZnJhbWUpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9oZG1pX3NldF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZGlwX2luZm9mcmFtZSBhdmlfaWYgPSB7CisJCS50eXBlID0gRElQX1RZUEVfQVZJLAorCQkudmVyID0gRElQX1ZFUlNJT05fQVZJLAorCQkubGVuID0gRElQX0xFTl9BVkksCisJfTsKKworCWludGVsX3NldF9pbmZvZnJhbWUoZW5jb2RlciwgJmF2aV9pZik7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2hkbWlfc2V0X3NwZF9pbmZvZnJhbWUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkaXBfaW5mb2ZyYW1lIHNwZF9pZjsKKworCW1lbXNldCgmc3BkX2lmLCAwLCBzaXplb2Yoc3BkX2lmKSk7CisJc3BkX2lmLnR5cGUgPSBESVBfVFlQRV9TUEQ7CisJc3BkX2lmLnZlciA9IERJUF9WRVJTSU9OX1NQRDsKKwlzcGRfaWYubGVuID0gRElQX0xFTl9TUEQ7CisJc3RyY3B5KHNwZF9pZi5ib2R5LnNwZC52biwgIkludGVsIik7CisJc3RyY3B5KHNwZF9pZi5ib2R5LnNwZC5wZCwgIkludGVncmF0ZWQgZ2Z4Iik7CisJc3BkX2lmLmJvZHkuc3BkLnNkaSA9IERJUF9TUERfUEM7CisKKwlpbnRlbF9zZXRfaW5mb2ZyYW1lKGVuY29kZXIsICZzcGRfaWYpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9oZG1pX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKQEAgLTE1Niw2ICsyNjAsNyBAQAogCVBPU1RJTkdfUkVBRChpbnRlbF9oZG1pLT5zZHZveF9yZWcpOwogCiAJaW50ZWxfaGRtaV9zZXRfYXZpX2luZm9mcmFtZShlbmNvZGVyKTsKKwlpbnRlbF9oZG1pX3NldF9zcGRfaW5mb2ZyYW1lKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9oZG1pX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKQEAgLTQzMyw2ICs1MzgsMTEgQEAKIAogCWludGVsX2hkbWktPnNkdm94X3JlZyA9IHNkdm94X3JlZzsKIAorCWlmICghSEFTX1BDSF9TUExJVChkZXYpKQorCQlpbnRlbF9oZG1pLT53cml0ZV9pbmZvZnJhbWUgPSBpOXh4X3dyaXRlX2luZm9mcmFtZTsKKwllbHNlCisJCWludGVsX2hkbWktPndyaXRlX2luZm9mcmFtZSA9IGlyb25sYWtlX3dyaXRlX2luZm9mcmFtZTsKKwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmludGVsX2VuY29kZXItPmJhc2UsICZpbnRlbF9oZG1pX2hlbHBlcl9mdW5jcyk7CiAKIAlpbnRlbF9oZG1pX2FkZF9wcm9wZXJ0aWVzKGludGVsX2hkbWksIGNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYjI4ZjdiZC4uMzFkYTc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNzIsMTQgKzcyLDE2IEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2x2ZHMtPmJhc2UuYmFzZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgY3RsX3JlZywgbHZkc19yZWc7CisJdTMyIGN0bF9yZWcsIGx2ZHNfcmVnLCBzdGF0X3JlZzsKIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJY3RsX3JlZyA9IFBDSF9QUF9DT05UUk9MOwogCQlsdmRzX3JlZyA9IFBDSF9MVkRTOworCQlzdGF0X3JlZyA9IFBDSF9QUF9TVEFUVVM7CiAJfSBlbHNlIHsKIAkJY3RsX3JlZyA9IFBQX0NPTlRST0w7CiAJCWx2ZHNfcmVnID0gTFZEUzsKKwkJc3RhdF9yZWcgPSBQUF9TVEFUVVM7CiAJfQogCiAJSTkxNV9XUklURShsdmRzX3JlZywgSTkxNV9SRUFEKGx2ZHNfcmVnKSB8IExWRFNfUE9SVF9FTik7CkBAIC05NCwxNyArOTYsMTYgQEAKIAkJRFJNX0RFQlVHX0tNUygiYXBwbHlpbmcgcGFuZWwtZml0dGVyOiAleCwgJXhcbiIsCiAJCQkgICAgICBpbnRlbF9sdmRzLT5wZml0X2NvbnRyb2wsCiAJCQkgICAgICBpbnRlbF9sdmRzLT5wZml0X3BnbV9yYXRpb3MpOwotCQlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChQUF9TVEFUVVMpICYgUFBfT04pID09IDAsIDEwMDApKSB7Ci0JCQlEUk1fRVJST1IoInRpbWVkIG91dCB3YWl0aW5nIGZvciBwYW5lbCB0byBwb3dlciBvZmZcbiIpOwotCQl9IGVsc2UgewotCQkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGludGVsX2x2ZHMtPnBmaXRfcGdtX3JhdGlvcyk7Ci0JCQlJOTE1X1dSSVRFKFBGSVRfQ09OVFJPTCwgaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sKTsKLQkJCWludGVsX2x2ZHMtPnBmaXRfZGlydHkgPSBmYWxzZTsKLQkJfQorCisJCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBpbnRlbF9sdmRzLT5wZml0X3BnbV9yYXRpb3MpOworCQlJOTE1X1dSSVRFKFBGSVRfQ09OVFJPTCwgaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sKTsKKwkJaW50ZWxfbHZkcy0+cGZpdF9kaXJ0eSA9IGZhbHNlOwogCX0KIAogCUk5MTVfV1JJVEUoY3RsX3JlZywgSTkxNV9SRUFEKGN0bF9yZWcpIHwgUE9XRVJfVEFSR0VUX09OKTsKIAlQT1NUSU5HX1JFQUQobHZkc19yZWcpOworCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKHN0YXRfcmVnKSAmIFBQX09OKSAhPSAwLCAxMDAwKSkKKwkJRFJNX0VSUk9SKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgcGFuZWwgdG8gcG93ZXIgb25cbiIpOwogCiAJaW50ZWxfcGFuZWxfZW5hYmxlX2JhY2tsaWdodChkZXYpOwogfQpAQCAtMTEzLDI0ICsxMTQsMjUgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfbHZkcy0+YmFzZS5iYXNlLmRldjsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBjdGxfcmVnLCBsdmRzX3JlZzsKKwl1MzIgY3RsX3JlZywgbHZkc19yZWcsIHN0YXRfcmVnOwogCiAJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQljdGxfcmVnID0gUENIX1BQX0NPTlRST0w7CiAJCWx2ZHNfcmVnID0gUENIX0xWRFM7CisJCXN0YXRfcmVnID0gUENIX1BQX1NUQVRVUzsKIAl9IGVsc2UgewogCQljdGxfcmVnID0gUFBfQ09OVFJPTDsKIAkJbHZkc19yZWcgPSBMVkRTOworCQlzdGF0X3JlZyA9IFBQX1NUQVRVUzsKIAl9CiAKIAlpbnRlbF9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodChkZXYpOwogCiAJSTkxNV9XUklURShjdGxfcmVnLCBJOTE1X1JFQUQoY3RsX3JlZykgJiB+UE9XRVJfVEFSR0VUX09OKTsKKwlpZiAod2FpdF9mb3IoKEk5MTVfUkVBRChzdGF0X3JlZykgJiBQUF9PTikgPT0gMCwgMTAwMCkpCisJCURSTV9FUlJPUigidGltZWQgb3V0IHdhaXRpbmcgZm9yIHBhbmVsIHRvIHBvd2VyIG9mZlxuIik7CiAKIAlpZiAoaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sKSB7Ci0JCWlmICh3YWl0X2ZvcigoSTkxNV9SRUFEKFBQX1NUQVRVUykgJiBQUF9PTikgPT0gMCwgMTAwMCkpCi0JCQlEUk1fRVJST1IoInRpbWVkIG91dCB3YWl0aW5nIGZvciBwYW5lbCB0byBwb3dlciBvZmZcbiIpOwotCiAJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCAwKTsKIAkJaW50ZWxfbHZkcy0+cGZpdF9kaXJ0eSA9IHRydWU7CiAJfQpAQCAtMzk4LDUzICs0MDAsMjEgQEAKIAogc3RhdGljIHZvaWQgaW50ZWxfbHZkc19wcmVwYXJlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVsX2x2ZHMgKmludGVsX2x2ZHMgPSB0b19pbnRlbF9sdmRzKGVuY29kZXIpOwogCi0JLyogV2UgdHJ5IHRvIGRvIHRoZSBtaW5pbXVtIHRoYXQgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHVubG9jawotCSAqIHRoZSByZWdpc3RlcnMgZm9yIG1vZGUgc2V0dGluZy4KLQkgKgotCSAqIE9uIElyb25sYWtlLCB0aGlzIGlzIHF1aXRlIHNpbXBsZSBhcyB3ZSBqdXN0IHNldCB0aGUgdW5sb2NrIGtleQotCSAqIGFuZCBpZ25vcmUgYWxsIHN1YnRsZXRpZXMuIChUaGlzIG1heSBjYXVzZSBzb21lIGlzc3Vlcy4uLikKLQkgKgorCS8qCiAJICogUHJpb3IgdG8gSXJvbmxha2UsIHdlIG11c3QgZGlzYWJsZSB0aGUgcGlwZSBpZiB3ZSB3YW50IHRvIGFkanVzdAogCSAqIHRoZSBwYW5lbCBmaXR0ZXIuIEhvd2V2ZXIgYXQgYWxsIG90aGVyIHRpbWVzIHdlIGNhbiBqdXN0IHJlc2V0CiAJICogdGhlIHJlZ2lzdGVycyByZWdhcmRsZXNzLgogCSAqLwotCi0JaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewotCQlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLAotCQkJICAgSTkxNV9SRUFEKFBDSF9QUF9DT05UUk9MKSB8IFBBTkVMX1VOTE9DS19SRUdTKTsKLQl9IGVsc2UgaWYgKGludGVsX2x2ZHMtPnBmaXRfZGlydHkpIHsKLQkJSTkxNV9XUklURShQUF9DT05UUk9MLAotCQkJICAgKEk5MTVfUkVBRChQUF9DT05UUk9MKSB8IFBBTkVMX1VOTE9DS19SRUdTKQotCQkJICAgJiB+UE9XRVJfVEFSR0VUX09OKTsKLQl9IGVsc2UgewotCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsCi0JCQkgICBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7Ci0JfQorCWlmICghSEFTX1BDSF9TUExJVChlbmNvZGVyLT5kZXYpICYmIGludGVsX2x2ZHMtPnBmaXRfZGlydHkpCisJCWludGVsX2x2ZHNfZGlzYWJsZShpbnRlbF9sdmRzKTsKIH0KIAogc3RhdGljIHZvaWQgaW50ZWxfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfbHZkcyAqaW50ZWxfbHZkcyA9IHRvX2ludGVsX2x2ZHMoZW5jb2Rlcik7CiAKLQkvKiBVbmRvIGFueSB1bmxvY2tpbmcgZG9uZSBpbiBwcmVwYXJlIHRvIHByZXZlbnQgYWNjaWRlbnRhbAotCSAqIGFkanVzdG1lbnQgb2YgdGhlIHJlZ2lzdGVycy4KLQkgKi8KLQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7Ci0JCXUzMiB2YWwgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOwotCQlpZiAoKHZhbCAmIFBBTkVMX1VOTE9DS19SRUdTKSA9PSBQQU5FTF9VTkxPQ0tfUkVHUykKLQkJCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIHZhbCAmIDB4Myk7Ci0JfSBlbHNlIHsKLQkJdTMyIHZhbCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQkJaWYgKCh2YWwgJiBQQU5FTF9VTkxPQ0tfUkVHUykgPT0gUEFORUxfVU5MT0NLX1JFR1MpCi0JCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIHZhbCAmIDB4Myk7Ci0JfQotCiAJLyogQWx3YXlzIGRvIGEgZnVsbCBwb3dlciBvbiBhcyB3ZSBkbyBub3Qga25vdyB3aGF0IHN0YXRlCiAJICogd2Ugd2VyZSBsZWZ0IGluLgogCSAqLwpAQCAtNTgyLDYgKzU1Miw4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlpbnRlbF9wYW5lbF9kZXN0cm95X2JhY2tsaWdodChkZXYpOworCiAJaWYgKGRldl9wcml2LT5saWRfbm90aWZpZXIubm90aWZpZXJfY2FsbCkKIAkJYWNwaV9saWRfbm90aWZpZXJfdW5yZWdpc3RlcigmZGV2X3ByaXYtPmxpZF9ub3RpZmllcik7CiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKQEAgLTY5MCw2ICs2NjIsMTQgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrID0gaW50ZWxfbm9fbHZkc19kbWlfY2FsbGJhY2ssCisJCS5pZGVudCA9ICJEZWxsIE9wdGlQbGV4IEZYMTcwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiT3B0aVBsZXggRlgxNzAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gaW50ZWxfbm9fbHZkc19kbWlfY2FsbGJhY2ssCiAJCS5pZGVudCA9ICJBT3BlbiBNaW5pIFBDIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBT3BlbiIpLApAQCAtMTAzMiw2ICsxMDEyLDE5IEBACiAJCXB3bSA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwxKTsKIAkJcHdtIHw9IFBXTV9QQ0hfRU5BQkxFOwogCQlJOTE1X1dSSVRFKEJMQ19QV01fUENIX0NUTDEsIHB3bSk7CisJCS8qCisJCSAqIFVubG9jayByZWdpc3RlcnMgYW5kIGp1c3QKKwkJICogbGVhdmUgdGhlbSB1bmxvY2tlZAorCQkgKi8KKwkJSTkxNV9XUklURShQQ0hfUFBfQ09OVFJPTCwKKwkJCSAgIEk5MTVfUkVBRChQQ0hfUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVW5sb2NrIHJlZ2lzdGVycyBhbmQganVzdAorCQkgKiBsZWF2ZSB0aGVtIHVubG9ja2VkCisJCSAqLworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsCisJCQkgICBJOTE1X1JFQUQoUFBfQ09OVFJPTCkgfCBQQU5FTF9VTkxPQ0tfUkVHUyk7CiAJfQogCWRldl9wcml2LT5saWRfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IGludGVsX2xpZF9ub3RpZnk7CiAJaWYgKGFjcGlfbGlkX25vdGlmaWVyX3JlZ2lzdGVyKCZkZXZfcHJpdi0+bGlkX25vdGlmaWVyKSkgewpAQCAtMTA0MSw2ICsxMDM0LDkgQEAKIAkvKiBrZWVwIHRoZSBMVkRTIGNvbm5lY3RvciAqLwogCWRldl9wcml2LT5pbnRfbHZkc19jb25uZWN0b3IgPSBjb25uZWN0b3I7CiAJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKworCWludGVsX3BhbmVsX3NldHVwX2JhY2tsaWdodChkZXYpOworCiAJcmV0dXJuIHRydWU7CiAKIGZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCmluZGV4IGI3YzVkZGIuLmI4ZTgxNThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKQEAgLTIyNyw3ICsyMjcsNiBAQAogCWFzbGUtPmFzbGMgPSBhc2xlX3N0YXQ7CiB9CiAKLS8qIE9ubHkgcHJlc2VudCBvbiBJcm9ubGFrZSsgKi8KIHZvaWQgaW50ZWxfb3ByZWdpb25fZ3NlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKaW5kZXggYTA2ZmYwNy4uYTllMGM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCkBAIC04MywxMSArODMsMTUgQEAKIAkJCXUzMiBzY2FsZWRfaGVpZ2h0ID0gbW9kZS0+aGRpc3BsYXkgKiBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheTsKIAkJCWlmIChzY2FsZWRfd2lkdGggPiBzY2FsZWRfaGVpZ2h0KSB7IC8qIHBpbGxhciAqLwogCQkJCXdpZHRoID0gc2NhbGVkX2hlaWdodCAvIG1vZGUtPnZkaXNwbGF5OworCQkJCWlmICh3aWR0aCAmIDEpCisJCQkJICAgIAl3aWR0aCsrOwogCQkJCXggPSAoYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgLSB3aWR0aCArIDEpIC8gMjsKIAkJCQl5ID0gMDsKIAkJCQloZWlnaHQgPSBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheTsKIAkJCX0gZWxzZSBpZiAoc2NhbGVkX3dpZHRoIDwgc2NhbGVkX2hlaWdodCkgeyAvKiBsZXR0ZXIgKi8KIAkJCQloZWlnaHQgPSBzY2FsZWRfd2lkdGggLyBtb2RlLT5oZGlzcGxheTsKKwkJCQlpZiAoaGVpZ2h0ICYgMSkKKwkJCQkgICAgaGVpZ2h0Kys7CiAJCQkJeSA9IChhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSAtIGhlaWdodCArIDEpIC8gMjsKIAkJCQl4ID0gMDsKIAkJCQl3aWR0aCA9IGFkanVzdGVkX21vZGUtPmhkaXNwbGF5OwpAQCAtMjczLDcgKzI3Nyw3IEBACiAJZGV2X3ByaXYtPmJhY2tsaWdodF9lbmFibGVkID0gdHJ1ZTsKIH0KIAotdm9pZCBpbnRlbF9wYW5lbF9zZXR1cF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGludGVsX3BhbmVsX2luaXRfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIApAQCAtMzA1LDMgKzMwOSw3MyBAQAogCiAJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKIH0KKworI2lmZGVmIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFCitzdGF0aWMgaW50IGludGVsX3BhbmVsX3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBibF9nZXRfZGF0YShiZCk7CisJaW50ZWxfcGFuZWxfc2V0X2JhY2tsaWdodChkZXYsIGJkLT5wcm9wcy5icmlnaHRuZXNzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlbF9wYW5lbF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGJsX2dldF9kYXRhKGJkKTsKKwlyZXR1cm4gaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgaW50ZWxfcGFuZWxfYmxfb3BzID0geworCS51cGRhdGVfc3RhdHVzID0gaW50ZWxfcGFuZWxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MgPSBpbnRlbF9wYW5lbF9nZXRfYnJpZ2h0bmVzcywKK307CisKK2ludCBpbnRlbF9wYW5lbF9zZXR1cF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJaW50ZWxfcGFuZWxfaW5pdF9iYWNrbGlnaHQoZGV2KTsKKworCWlmIChkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yKQorCQljb25uZWN0b3IgPSBkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yOworCWVsc2UgaWYgKGRldl9wcml2LT5pbnRfZWRwX2Nvbm5lY3RvcikKKwkJY29ubmVjdG9yID0gZGV2X3ByaXYtPmludF9lZHBfY29ubmVjdG9yOworCWVsc2UKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKKwlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IGludGVsX3BhbmVsX2dldF9tYXhfYmFja2xpZ2h0KGRldik7CisJZGV2X3ByaXYtPmJhY2tsaWdodCA9CisJCWJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImludGVsX2JhY2tsaWdodCIsCisJCQkJCSAgJmNvbm5lY3Rvci0+a2RldiwgZGV2LAorCQkJCQkgICZpbnRlbF9wYW5lbF9ibF9vcHMsICZwcm9wcyk7CisKKwlpZiAoSVNfRVJSKGRldl9wcml2LT5iYWNrbGlnaHQpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodDogJWxkXG4iLAorCQkJICBQVFJfRVJSKGRldl9wcml2LT5iYWNrbGlnaHQpKTsKKwkJZGV2X3ByaXYtPmJhY2tsaWdodCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZfcHJpdi0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID0gaW50ZWxfcGFuZWxfZ2V0X2JhY2tsaWdodChkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIGludGVsX3BhbmVsX2Rlc3Ryb3lfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoZGV2X3ByaXYtPmJhY2tsaWdodCkKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRldl9wcml2LT5iYWNrbGlnaHQpOworfQorI2Vsc2UKK2ludCBpbnRlbF9wYW5lbF9zZXR1cF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnRlbF9wYW5lbF9pbml0X2JhY2tsaWdodChkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIGludGVsX3BhbmVsX2Rlc3Ryb3lfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZTk2MTU2OC4uYzMwNjI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMjkwLDYgKzI5MCwxMCBAQAogCQlpZiAoSVNfR0VONihkZXYpIHx8IElTX0dFTjcoZGV2KSkKIAkJCW1vZGUgfD0gTUlfRkxVU0hfRU5BQkxFIDw8IDE2IHwgTUlfRkxVU0hfRU5BQkxFOwogCQlJOTE1X1dSSVRFKE1JX01PREUsIG1vZGUpOworCQlpZiAoSVNfR0VONyhkZXYpKQorCQkJSTkxNV9XUklURShHRlhfTU9ERV9HRU43LAorCQkJCSAgIEdGWF9NT0RFX0RJU0FCTEUoR0ZYX1RMQl9JTlZBTElEQVRFX0FMV0FZUykgfAorCQkJCSAgIEdGWF9NT0RFX0VOQUJMRShHRlhfUkVQTEFZX01PREUpKTsKIAl9CiAKIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNikgewpAQCAtMTMyMSw2ICsxMzI1LDkgQEAKIAkJcmluZy0+Z2V0X3NlcW5vID0gcGNfcmVuZGVyX2dldF9zZXFubzsKIAl9CiAKKwlpZiAoIUk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCXJpbmctPnN0YXR1c19wYWdlLnBhZ2VfYWRkciA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKKwogCXJpbmctPmRldiA9IGRldjsKIAlJTklUX0xJU1RfSEVBRCgmcmluZy0+YWN0aXZlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZyaW5nLT5yZXF1ZXN0X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCmluZGV4IDhkMDJkODcuLmM5MTljZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKQEAgLTUzMCw3ICs1MzAsOCBAQAogCQlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJm9iaik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7CisJfSBlbHNlCisJaWYgKFVTRV9TRU1BKGRldikpIHsKIAkJLyogbWFwIGZlbmNlIGJvIGludG8gY2hhbm5lbCdzIHZtICovCiAJCXJldCA9IG5vdXZlYXVfYm9fdm1hX2FkZChkZXZfcHJpdi0+ZmVuY2UuYm8sIGNoYW4tPnZtLAogCQkJCQkgJmNoYW4tPmZlbmNlLnZtYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKaW5kZXggYzQ0NGNhZC4uMjcwNmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwpAQCAtMzcsOCArMzcsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAludmJlLT50dG1fYWxsb2NlZCA9IGttYWxsb2Moc2l6ZW9mKGJvb2wpICogbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW52YmUtPnR0bV9hbGxvY2VkKQorCWlmICghbnZiZS0+dHRtX2FsbG9jZWQpIHsKKwkJa2ZyZWUobnZiZS0+cGFnZXMpOworCQludmJlLT5wYWdlcyA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW52YmUtPm5yX3BhZ2VzID0gMDsKIAl3aGlsZSAobnVtX3BhZ2VzLS0pIHsKQEAgLTEyNiw3ICsxMjksNyBAQAogCiAJCWZvciAoaiA9IDA7IGogPCBQQUdFX1NJWkUgLyBOVl9DVFhETUFfUEFHRV9TSVpFOyBqKyssIHB0ZSsrKSB7CiAJCQludl93bzMyKGdwdW9iaiwgKHB0ZSAqIDQpICsgMCwgb2Zmc2V0X2wgfCAzKTsKLQkJCWRtYV9vZmZzZXQgKz0gTlZfQ1RYRE1BX1BBR0VfU0laRTsKKwkJCW9mZnNldF9sICs9IE5WX0NUWERNQV9QQUdFX1NJWkU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKaW5kZXggMTE4MjYxZC4uNWU0NTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMKQEAgLTc4MSwxMSArNzgxLDIwIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBudjA0X2NydGNfcmVnICpyZWdwID0gJmRldl9wcml2LT5tb2RlX3JlZy5jcnRjX3JlZ1tudl9jcnRjLT5pbmRleF07Ci0Jc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2ZiID0gbnZfY3J0Yy0+YmFzZS5mYjsKLQlzdHJ1Y3Qgbm91dmVhdV9mcmFtZWJ1ZmZlciAqZmIgPSBub3V2ZWF1X2ZyYW1lYnVmZmVyKGRybV9mYik7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZHJtX2ZiOworCXN0cnVjdCBub3V2ZWF1X2ZyYW1lYnVmZmVyICpmYjsKIAlpbnQgYXJiX2J1cnN0LCBhcmJfbHdtOwogCWludCByZXQ7CiAKKwlOVl9ERUJVR19LTVMoZGV2LCAiaW5kZXggJWRcbiIsIG52X2NydGMtPmluZGV4KTsKKworCS8qIG5vIGZiIGJvdW5kICovCisJaWYgKCFhdG9taWMgJiYgIWNydGMtPmZiKSB7CisJCU5WX0RFQlVHX0tNUyhkZXYsICJObyBGQiBib3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKworCiAJLyogSWYgYXRvbWljLCB3ZSB3YW50IHRvIHN3aXRjaCB0byB0aGUgZmIgd2Ugd2VyZSBwYXNzZWQsIHNvCiAJICogbm93IHdlIHVwZGF0ZSBwb2ludGVycyB0byBkbyB0aGF0LiAgKFdlIGRvbid0IHBpbjsganVzdAogCSAqIGFzc3VtZSB3ZSdyZSBhbHJlYWR5IHBpbm5lZCBhbmQgdXBkYXRlIHRoZSBiYXNlIGFkZHJlc3MuKQpAQCAtNzk0LDYgKzgwMyw4IEBACiAJCWRybV9mYiA9IHBhc3NlZF9mYjsKIAkJZmIgPSBub3V2ZWF1X2ZyYW1lYnVmZmVyKHBhc3NlZF9mYik7CiAJfSBlbHNlIHsKKwkJZHJtX2ZiID0gY3J0Yy0+ZmI7CisJCWZiID0gbm91dmVhdV9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CiAJCS8qIElmIG5vdCBhdG9taWMsIHdlIGNhbiBnbyBhaGVhZCBhbmQgcGluLCBhbmQgdW5waW4gdGhlCiAJCSAqIG9sZCBmYiB3ZSB3ZXJlIHBhc3NlZC4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfY3J0Yy5jCmluZGV4IDQ2YWQ1OWUuLjVkOTg5MDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYwpAQCAtNTE5LDEyICs1MTksMTggQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbnZfY3J0Yy0+YmFzZS5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpldm8gPSBudjUwX2Rpc3BsYXkoZGV2KS0+bWFzdGVyOwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmRybV9mYiA9IG52X2NydGMtPmJhc2UuZmI7Ci0Jc3RydWN0IG5vdXZlYXVfZnJhbWVidWZmZXIgKmZiID0gbm91dmVhdV9mcmFtZWJ1ZmZlcihkcm1fZmIpOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmRybV9mYjsKKwlzdHJ1Y3Qgbm91dmVhdV9mcmFtZWJ1ZmZlciAqZmI7CiAJaW50IHJldDsKIAogCU5WX0RFQlVHX0tNUyhkZXYsICJpbmRleCAlZFxuIiwgbnZfY3J0Yy0+aW5kZXgpOwogCisJLyogbm8gZmIgYm91bmQgKi8KKwlpZiAoIWF0b21pYyAmJiAhY3J0Yy0+ZmIpIHsKKwkJTlZfREVCVUdfS01TKGRldiwgIk5vIEZCIGJvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogSWYgYXRvbWljLCB3ZSB3YW50IHRvIHN3aXRjaCB0byB0aGUgZmIgd2Ugd2VyZSBwYXNzZWQsIHNvCiAJICogbm93IHdlIHVwZGF0ZSBwb2ludGVycyB0byBkbyB0aGF0LiAgKFdlIGRvbid0IHBpbjsganVzdAogCSAqIGFzc3VtZSB3ZSdyZSBhbHJlYWR5IHBpbm5lZCBhbmQgdXBkYXRlIHRoZSBiYXNlIGFkZHJlc3MuKQpAQCAtNTMzLDYgKzUzOSw4IEBACiAJCWRybV9mYiA9IHBhc3NlZF9mYjsKIAkJZmIgPSBub3V2ZWF1X2ZyYW1lYnVmZmVyKHBhc3NlZF9mYik7CiAJfSBlbHNlIHsKKwkJZHJtX2ZiID0gY3J0Yy0+ZmI7CisJCWZiID0gbm91dmVhdV9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CiAJCS8qIElmIG5vdCBhdG9taWMsIHdlIGNhbiBnbyBhaGVhZCBhbmQgcGluLCBhbmQgdW5waW4gdGhlCiAJCSAqIG9sZCBmYiB3ZSB3ZXJlIHBhc3NlZC4KIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCAzODk2ZWY4Li45ZjM2M2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQogCiBob3N0cHJvZ3MteSA6PSBta3JlZ3RhYmxlCitjbGVhbi1maWxlcyA6PSBybjUwX3JlZ19zYWZlLmggcjEwMF9yZWdfc2FmZS5oIHIyMDBfcmVnX3NhZmUuaCBydjUxNV9yZWdfc2FmZS5oIHIzMDBfcmVnX3NhZmUuaCByNDIwX3JlZ19zYWZlLmggcnM2MDBfcmVnX3NhZmUuaCByNjAwX3JlZ19zYWZlLmggZXZlcmdyZWVuX3JlZ19zYWZlLmggY2F5bWFuX3JlZ19zYWZlLmgKIAogcXVpZXRfY21kX21rcmVndGFibGUgPSBNS1JFR1RBQkxFICRACiAgICAgICBjbWRfbWtyZWd0YWJsZSA9ICQob2JqKS9ta3JlZ3RhYmxlICQ8ID4gJEAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKaW5kZXggZWJkYjBmZC4uZTg4YzY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMKQEAgLTEyNDUsNiArMTI0NSw5IEBACiAJY2hhciBuYW1lWzUxMl07CiAJaW50IGk7CiAKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIE5VTEw7CisKIAljdHgtPmNhcmQgPSBjYXJkOwogCWN0eC0+YmlvcyA9IGJpb3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCA2NDViODRiLi43YWQ0M2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC02MTMsNiArNjEzLDE4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgcmFkZW9uX2RwX25lZWRzX2xpbmtfdHJhaW4oc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpCit7CisJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCisJaWYgKCFyYWRlb25fZHBfZ2V0X2xpbmtfc3RhdHVzKHJhZGVvbl9jb25uZWN0b3IsIGxpbmtfc3RhdHVzKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChkcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBkaWctPmRwX2xhbmVfY291bnQpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0cnVjdCByYWRlb25fZHBfbGlua190cmFpbl9pbmZvIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCAxNGRjZTlmLi5kYzBhNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTQxLDYgKzQxLDMxIEBACiB2b2lkIGV2ZXJncmVlbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyB2b2lkIGV2ZXJncmVlbl9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAordm9pZCBldmVyZ3JlZW5fZml4X3BjaV9tYXhfcmVhZF9yZXFfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MTYgY3RsLCB2OworCWludCBjYXAsIGVycjsKKworCWNhcCA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsKKwlpZiAoIWNhcCkKKwkJcmV0dXJuOworCisJZXJyID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgY2FwICsgUENJX0VYUF9ERVZDVEwsICZjdGwpOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXYgPSAoY3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMjsKKworCS8qIGlmIGJpb3Mgb3IgT1Mgc2V0cyBNQVhfUkVBRF9SRVFVRVNUX1NJWkUgdG8gYW4gaW52YWxpZCB2YWx1ZSwgZml4IGl0CisJICogdG8gYXZvaWQgaGFuZ3Mgb3IgcGVyZm9tYW5jZSBpc3N1ZXMKKwkgKi8KKwlpZiAoKHYgPT0gMCkgfHwgKHYgPT0gNikgfHwgKHYgPT0gNykpIHsKKwkJY3RsICY9IH5QQ0lfRVhQX0RFVkNUTF9SRUFEUlE7CisJCWN0bCB8PSAoMiA8PCAxMik7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgY3RsKTsKKwl9Cit9CisKIHZvaWQgZXZlcmdyZWVuX3ByZV9wYWdlX2ZsaXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQogewogCS8qIGVuYWJsZSB0aGUgcGZsaXAgaW50ICovCkBAIC03NDMsNyArNzY4LDcgQEAKIAkJICAgICFldmVyZ3JlZW5fYXZlcmFnZV9iYW5kd2lkdGhfdnNfYXZhaWxhYmxlX2JhbmR3aWR0aCgmd20pIHx8CiAJCSAgICAhZXZlcmdyZWVuX2NoZWNrX2xhdGVuY3lfaGlkaW5nKCZ3bSkgfHwKIAkJICAgIChyZGV2LT5kaXNwX3ByaW9yaXR5ID09IDIpKSB7Ci0JCQlEUk1fSU5GTygiZm9yY2UgcHJpb3JpdHkgdG8gaGlnaFxuIik7CisJCQlEUk1fREVCVUdfS01TKCJmb3JjZSBwcmlvcml0eSB0byBoaWdoXG4iKTsKIAkJCXByaW9yaXR5X2FfY250IHw9IFBSSU9SSVRZX0FMV0FZU19PTjsKIAkJCXByaW9yaXR5X2JfY250IHw9IFBSSU9SSVRZX0FMV0FZU19PTjsKIAkJfQpAQCAtMTM1Nyw2ICsxMzgyLDcgQEAKIAkJCQkgU09GVF9SRVNFVF9QQSB8CiAJCQkJIFNPRlRfUkVTRVRfU0ggfAogCQkJCSBTT0ZUX1JFU0VUX1ZHVCB8CisJCQkJIFNPRlRfUkVTRVRfU1BJIHwKIAkJCQkgU09GVF9SRVNFVF9TWCkpOwogCVJSRUczMihHUkJNX1NPRlRfUkVTRVQpOwogCW1kZWxheSgxNSk7CkBAIC0xODYyLDYgKzE4ODgsOCBAQAogCiAJV1JFRzMyKEdSQk1fQ05UTCwgR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOwogCisJZXZlcmdyZWVuX2ZpeF9wY2lfbWF4X3JlYWRfcmVxX3NpemUocmRldik7CisKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKSAmIH4yOwogCiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fY3MuYwppbmRleCAxODllODY1Li5hMTM0NzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2NzLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogCQlsYXN0X3JlZyA9IEFSUkFZX1NJWkUoZXZlcmdyZWVuX3JlZ19zYWZlX2JtKTsKIAogCWkgPSAocmVnID4+IDcpOwotCWlmIChpID4gbGFzdF9yZWcpIHsKKwlpZiAoaSA+PSBsYXN0X3JlZykgewogCQlkZXZfd2FybihwLT5kZXYsICJmb3JiaWRkZW4gcmVnaXN0ZXIgMHglMDh4IGF0ICVkXG4iLCByZWcsIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwppbmRleCA0NGM0NzUwLi5jYmY1N2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCkBAIC0zOSw2ICszOSw3IEBACiBleHRlcm4gdm9pZCBldmVyZ3JlZW5fbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCBldmVyZ3JlZW5faXJxX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBldmVyZ3JlZW5fbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBldmVyZ3JlZW5fZml4X3BjaV9tYXhfcmVhZF9yZXFfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKICNkZWZpbmUgRVZFUkdSRUVOX1BGUF9VQ09ERV9TSVpFIDExMjAKICNkZWZpbmUgRVZFUkdSRUVOX1BNNF9VQ09ERV9TSVpFIDEzNzYKQEAgLTY2OSw2ICs2NzAsOCBAQAogCiAJV1JFRzMyKEdSQk1fQ05UTCwgR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOwogCisJZXZlcmdyZWVuX2ZpeF9wY2lfbWF4X3JlYWRfcmVxX3NpemUocmRldik7CisKIAltY19zaGFyZWRfY2htYXAgPSBSUkVHMzIoTUNfU0hBUkVEX0NITUFQKTsKIAltY19hcmJfcmFtY2ZnID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOwogCkBAIC0xMTU5LDYgKzExNjIsNyBAQAogCQkJCSBTT0ZUX1JFU0VUX1BBIHwKIAkJCQkgU09GVF9SRVNFVF9TSCB8CiAJCQkJIFNPRlRfUkVTRVRfVkdUIHwKKwkJCQkgU09GVF9SRVNFVF9TUEkgfAogCQkJCSBTT0ZUX1JFU0VUX1NYKSk7CiAJUlJFRzMyKEdSQk1fU09GVF9SRVNFVCk7CiAJbWRlbGF5KDE1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKaW5kZXggZGI4ZWYxOS4uY2Y4M2FhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMKQEAgLTkxNSwxMiArOTE1LDExIEBACiB7CiAJc3RydWN0IHI2MDBfY3NfdHJhY2sgKnRyYWNrID0gKHN0cnVjdCByNjAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7Ci0JdTMyIGxhc3RfcmVnID0gQVJSQVlfU0laRShyNjAwX3JlZ19zYWZlX2JtKTsKIAl1MzIgbSwgaSwgdG1wLCAqaWI7CiAJaW50IHI7CiAKIAlpID0gKHJlZyA+PiA3KTsKLQlpZiAoaSA+IGxhc3RfcmVnKSB7CisJaWYgKGkgPj0gQVJSQVlfU0laRShyNjAwX3JlZ19zYWZlX2JtKSkgewogCQlkZXZfd2FybihwLT5kZXYsICJmb3JiaWRkZW4gcmVnaXN0ZXIgMHglMDh4IGF0ICVkXG4iLCByZWcsIGlkeCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggZGNkMDg2M2UuLmI2ZTE4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC0yMTksNiArMjE5LDkgQEAKIAkJfSBlbHNlIHsKIAkJCURSTV9JTkZPKCJVc2luZyBnZW5lcmljIGNsb2NrIGluZm9cbiIpOwogCisJCQkvKiBtYXkgbmVlZCB0byBiZSBwZXIgY2FyZCAqLworCQkJcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID0gMzUwMDA7CisKIAkJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKIAkJCQlwMXBsbC0+cmVmZXJlbmNlX2ZyZXEgPSAxNDMyOwogCQkJCXAycGxsLT5yZWZlcmVuY2VfZnJlcSA9IDE0MzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggYTc0MjE3Yy4uNjM2NzUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtMjU1Nyw2ICsyNTU3LDcgQEAKIAl1MTYgb2Zmc2V0LCBtaXNjLCBtaXNjMiA9IDA7CiAJdTggcmV2LCBibG9ja3MsIHRtcDsKIAlpbnQgc3RhdGVfaW5kZXggPSAwOworCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgaTJjX2J1czsKIAogCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSAtMTsKIApAQCAtMjU3NSw3ICsyNTc2LDYgQEAKIAlvZmZzZXQgPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX09WRVJEUklWRV9JTkZPX1RBQkxFKTsKIAlpZiAob2Zmc2V0KSB7CiAJCXU4IHRoZXJtYWxfY29udHJvbGxlciA9IDAsIGdwaW8gPSAwLCBpMmNfYWRkciA9IDAsIGNsa19iaXQgPSAwLCBkYXRhX2JpdCA9IDA7Ci0JCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgaTJjX2J1czsKIAogCQlyZXYgPSBSQklPUzgob2Zmc2V0KTsKIApAQCAtMjYxNyw2ICsyNjE3LDI1IEBACiAJCQkJaTJjX25ld19kZXZpY2UoJnJkZXYtPnBtLmkyY19idXMtPmFkYXB0ZXIsICZpbmZvKTsKIAkJCX0KIAkJfQorCX0gZWxzZSB7CisJCS8qIGJvYXJkcyB3aXRoIGEgdGhlcm1hbCBjaGlwLCBidXQgbm8gb3ZlcmRyaXZlIHRhYmxlICovCisKKwkJLyogQXN1cyA5NjAweHQgaGFzIGFuIGY3NTM3NSBvbiB0aGUgbW9uaWQgYnVzICovCisJCWlmICgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg0MTUyKSAmJgorCQkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwNDMpICYmCisJCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4YzAwMikpIHsKKwkJCWkyY19idXMgPSBjb21iaW9zX3NldHVwX2kyY19idXMocmRldiwgRERDX01PTklELCAwLCAwKTsKKwkJCXJkZXYtPnBtLmkyY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCAmaTJjX2J1cyk7CisJCQlpZiAocmRldi0+cG0uaTJjX2J1cykgeworCQkJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvID0geyB9OworCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSAiZjc1Mzc1IjsKKwkJCQlpbmZvLmFkZHIgPSAweDI4OworCQkJCXN0cmxjcHkoaW5mby50eXBlLCBuYW1lLCBzaXplb2YoaW5mby50eXBlKSk7CisJCQkJaTJjX25ld19kZXZpY2UoJnJkZXYtPnBtLmkyY19idXMtPmFkYXB0ZXIsICZpbmZvKTsKKwkJCQlEUk1fSU5GTygiUG9zc2libGUgJXMgdGhlcm1hbCBjb250cm9sbGVyIGF0IDB4JTAyeFxuIiwKKwkJCQkJIG5hbWUsIGluZm8uYWRkcik7CisJCQl9CisJCX0KIAl9CiAKIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKQEAgLTMyNzksNiArMzI5OCwxNCBAQAogCSAgICByZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MzBhNCkKIAkJcmV0dXJuOwogCisJLyogcXVpcmsgZm9yIHJzNHh4IENvbXBhcSBQcmVzYXJpbyBWNTI0NUVVIGxhcHRvcCB0byBtYWtlIGl0IHJlc3VtZQorCSAqIC0gaXQgaGFuZ3Mgb24gcmVzdW1lIGluc2lkZSB0aGUgZHluY2xrIDEgdGFibGUuCisJICovCisJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNDgwICYmCisJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDNjICYmCisJICAgIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgzMGFlKQorCQlyZXR1cm47CisKIAkvKiBEWU4gQ0xLIDEgKi8KIAl0YWJsZSA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfRFlOX0NMS18xX1RBQkxFKTsKIAlpZiAodGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggOTc5MmQ0Zi4uYzRiODc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtNjAsMTggKzYwLDIwIEBACiAKIAlyYWRlb25faHBkX3NldF9wb2xhcml0eShyZGV2LCByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkKTsKIAotCS8qIHBvd2VyaW5nIHVwL2Rvd24gdGhlIGVEUCBwYW5lbCBnZW5lcmF0ZXMgaHBkIGV2ZW50cyB3aGljaAotCSAqIGNhbiBpbnRlcmZlcmUgd2l0aCBtb2Rlc2V0dGluZy4KLQkgKi8KLQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKQorCS8qIGlmIHRoZSBjb25uZWN0b3IgaXMgYWxyZWFkeSBvZmYsIGRvbid0IHR1cm4gaXQgYmFjayBvbiAqLworCWlmIChjb25uZWN0b3ItPmRwbXMgIT0gRFJNX01PREVfRFBNU19PTikKIAkJcmV0dXJuOwogCi0JLyogcHJlLXI2MDAgZGlkIG5vdCBhbHdheXMgaGF2ZSB0aGUgaHBkIHBpbnMgbWFwcGVkIGFjY3VyYXRlbHkgdG8gY29ubmVjdG9ycyAqLwotCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7Ci0JCWlmIChyYWRlb25faHBkX3NlbnNlKHJkZXYsIHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQpKQorCS8qIGp1c3QgZGVhbCB3aXRoIERQIChub3QgZURQKSBoZXJlLiAqLworCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgeworCQlpbnQgc2F2ZWRfZHBtcyA9IGNvbm5lY3Rvci0+ZHBtczsKKworCQlpZiAocmFkZW9uX2hwZF9zZW5zZShyZGV2LCByYWRlb25fY29ubmVjdG9yLT5ocGQuaHBkKSAmJgorCQkgICAgcmFkZW9uX2RwX25lZWRzX2xpbmtfdHJhaW4ocmFkZW9uX2Nvbm5lY3RvcikpCiAJCQlkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zKGNvbm5lY3RvciwgRFJNX01PREVfRFBNU19PTik7CiAJCWVsc2UKIAkJCWRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMoY29ubmVjdG9yLCBEUk1fTU9ERV9EUE1TX09GRik7CisJCWNvbm5lY3Rvci0+ZHBtcyA9IHNhdmVkX2RwbXM7CiAJfQogfQogCkBAIC00MzAsMTYgKzQzMiw3MyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogU29tZSBpbnRlZ3JhdGVkIEFUSSBSYWRlb24gY2hpcHNldCBpbXBsZW1lbnRhdGlvbnMgKGUuIGcuCisgKiBBc3VzIE0yQS1WTSBIRE1JKSBtYXkgaW5kaWNhdGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIEREQywKKyAqIGV2ZW4gd2hlbiB0aGVyZSdzIG5vIG1vbml0b3IgY29ubmVjdGVkLiBGb3IgdGhlc2UgY29ubmVjdG9ycworICogZm9sbG93aW5nIEREQyBwcm9iZSBleHRlbnNpb24gd2lsbCBiZSBhcHBsaWVkOiBjaGVjayBhbHNvIGZvciB0aGUKKyAqIGF2YWlsYWJpbGl0eSBvZiBFRElEIHdpdGggYXQgbGVhc3QgYSBjb3JyZWN0IEVESUQgaGVhZGVyLiBPbmx5IHRoZW4sCisgKiBEREMgaXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUuIFRoaXMgcHJldmVudHMgZHJtX2dldF9lZGlkKCkgYW5kCisgKiBkcm1fZWRpZF9ibG9ja192YWxpZCgpIGZyb20gcGVyaW9kaWNhbGx5IGR1bXBpbmcgZGF0YSBhbmQga2VybmVsCisgKiBlcnJvcnMgaW50byB0aGUgbG9ncyBhbmQgb250byB0aGUgdGVybWluYWwuCisgKi8KK3N0YXRpYyBib29sIHJhZGVvbl9jb25uZWN0b3JfbmVlZHNfZXh0ZW5kZWRfcHJvYmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCisJCQkJICAgICBpbnQgY29ubmVjdG9yX3R5cGUpCit7CisJLyogQXN1cyBNMkEtVk0gSERNSSBib2FyZCBzZW5kcyBkYXRhIHRvIGkyYyBidXMgZXZlbiwKKwkgKiBpZiBIRE1JIGFkZC1vbiBjYXJkIGlzIG5vdCBwbHVnZ2VkIGluIG9yIEhETUkgaXMgZGlzYWJsZWQgaW4KKwkgKiBCSU9TLiBWYWxpZCBEREMgY2FuIG9ubHkgYmUgYXNzdW1lZCwgaWYgYWxzbyBhIHZhbGlkIEVESUQgaGVhZGVyCisJICogY2FuIGJlIHJldHJpZXZlZCB2aWEgaTJjIGJ1cyBkdXJpbmcgRERDIHByb2JlICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDc5MWUpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDQzKSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4ODI2ZCkpIHsKKwkJaWYgKChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpICYmCisJCSAgICAoc3VwcG9ydGVkX2RldmljZSA9PSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCS8qIEVDUyBBNzQwR00tTSB3aXRoIEFUSSBSQURFT04gMjEwMCBzZW5kcyBkYXRhIHRvIGkyYyBidXMKKwkgKiBmb3IgYSBEVkkgY29ubmVjdG9yIHRoYXQgaXMgbm90IGltcGxlbWVudGVkICovCisJaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDc5NmUpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDE5KSAmJgorCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjYxNSkpIHsKKwkJaWYgKChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCkgJiYKKwkJICAgIChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJLyogVE9TSElCQSBTYXRlbGxpdGUgTDMwMEQgd2l0aCBBVEkgTW9iaWxpdHkgUmFkZW9uIHgxMTAwCisJICogKFJTNjkwTSkgc2VuZHMgZGF0YSB0byBpMmMgYnVzIGZvciBhIEhETUkgY29ubmVjdG9yIHRoYXQKKwkgKiBpcyBub3QgaW1wbGVtZW50ZWQgKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NzkxZikgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDExNzkpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHhmZjY4KSkgeworCQlpZiAoKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSkgJiYKKwkJICAgIChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBEZWZhdWx0OiBubyBFRElEIGhlYWRlciBwcm9iZSByZXF1aXJlZCBmb3IgRERDIHByb2JpbmcgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIHJhZGVvbl9maXh1cF9sdmRzX25hdGl2ZV9tb2RlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPQl0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKKworCS8qIElmIHRoZSBFRElEIHByZWZlcnJlZCBtb2RlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5hdGl2ZSBtb2RlLCB1c2UgaXQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7CisJCWlmIChtb2RlLT50eXBlICYgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQpIHsKKwkJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgfHwKKwkJCSAgICBtb2RlLT52ZGlzcGxheSAhPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpCisJCQkJbWVtY3B5KG5hdGl2ZV9tb2RlLCBtb2RlLCBzaXplb2YoKm1vZGUpKTsKKwkJfQorCX0KIAogCS8qIFRyeSB0byBnZXQgbmF0aXZlIG1vZGUgZGV0YWlscyBmcm9tIEVESUQgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKLQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnQsICptb2RlOwotCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKIAkJCWlmIChtb2RlLT5oZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+aGRpc3BsYXkgJiYKIAkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpIHsKQEAgLTQ1MCw2ICs1MDksNyBAQAogCQkJfQogCQl9CiAJfQorCiAJaWYgKCFuYXRpdmVfbW9kZS0+Y2xvY2spIHsKIAkJRFJNX0RFQlVHX0tNUygiTm8gTFZEUyBuYXRpdmUgbW9kZSBkZXRhaWxzLCBkaXNhYmxpbmcgUk1YXG4iKTsKIAkJcmFkZW9uX2VuY29kZXItPnJteF90eXBlID0gUk1YX09GRjsKQEAgLTY2MSw3ICs3MjEsOCBAQAogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKKwkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3RvciwKKwkJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+cmVxdWlyZXNfZXh0ZW5kZWRfcHJvYmUpOwogCWlmIChkcmV0KSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKQEAgLTgzMyw3ICs4OTQsOCBAQAogCWJvb2wgZHJldCA9IGZhbHNlOwogCiAJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOworCQlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yLAorCQkJCQlyYWRlb25fY29ubmVjdG9yLT5yZXF1aXJlc19leHRlbmRlZF9wcm9iZSk7CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwpAQCAtMTIzNSwxMiArMTI5NywzMyBAQAogCQlpZiAoIXJhZGVvbl9kaWdfY29ubmVjdG9yLT5lZHBfb24pCiAJCQlhdG9tYmlvc19zZXRfZWRwX3BhbmVsX3Bvd2VyKGNvbm5lY3RvciwKIAkJCQkJCSAgICAgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT0ZGKTsKLQl9IGVsc2UgewotCQkvKiBuZWVkIHRvIHNldHVwIGRkYyBvbiB0aGUgYnJpZGdlICovCi0JCWlmIChyYWRlb25fY29ubmVjdG9yX2VuY29kZXJfaXNfZHBfYnJpZGdlKGNvbm5lY3RvcikpIHsKKwl9IGVsc2UgaWYgKHJhZGVvbl9jb25uZWN0b3JfZW5jb2Rlcl9pc19kcF9icmlkZ2UoY29ubmVjdG9yKSkgeworCQkvKiBEUCBicmlkZ2VzIGFyZSBhbHdheXMgRFAgKi8KKwkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9IENPTk5FQ1RPUl9PQkpFQ1RfSURfRElTUExBWVBPUlQ7CisJCS8qIGdldCB0aGUgRFBDRCBmcm9tIHRoZSBicmlkZ2UgKi8KKwkJcmFkZW9uX2RwX2dldGRwY2QocmFkZW9uX2Nvbm5lY3Rvcik7CisKKwkJaWYgKHJhZGVvbl9ocGRfc2Vuc2UocmRldiwgcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZCkpCisJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJZWxzZSB7CisJCQkvKiBuZWVkIHRvIHNldHVwIGRkYyBvbiB0aGUgYnJpZGdlICovCiAJCQlpZiAoZW5jb2RlcikKIAkJCQlyYWRlb25fYXRvbV9leHRfZW5jb2Rlcl9zZXR1cF9kZGMoZW5jb2Rlcik7CisJCQlpZiAocmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yLAorCQkJCQkgICAgIHJhZGVvbl9jb25uZWN0b3ItPnJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlKSkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAkJfQorCisJCWlmICgocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSAmJgorCQkgICAgcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CisJCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKwkJCWlmIChlbmNvZGVyKSB7CisJCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOworCQkJfQorCQl9CisJfSBlbHNlIHsKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9IHJhZGVvbl9kcF9nZXRzaW5rdHlwZShyYWRlb25fY29ubmVjdG9yKTsKIAkJaWYgKHJhZGVvbl9ocGRfc2Vuc2UocmRldiwgcmFkZW9uX2Nvbm5lY3Rvci0+aHBkLmhwZCkpIHsKIAkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwpAQCAtMTI1MSwyMCArMTMzNCwxMSBAQAogCQkJCWlmIChyYWRlb25fZHBfZ2V0ZHBjZChyYWRlb25fY29ubmVjdG9yKSkKIAkJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCQl9IGVsc2UgewotCQkJCWlmIChyYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpKQorCQkJCWlmIChyYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IsCisJCQkJCQkgICAgIHJhZGVvbl9jb25uZWN0b3ItPnJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlKSkKIAkJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCQl9CiAJCX0KLQotCQlpZiAoKHJldCA9PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCkgJiYKLQkJICAgIHJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCkgewotCQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gcmFkZW9uX2Jlc3Rfc2luZ2xlX2VuY29kZXIoY29ubmVjdG9yKTsKLQkJCXN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgKmVuY29kZXJfZnVuY3M7Ci0JCQlpZiAoZW5jb2RlcikgewotCQkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKLQkJCQlyZXQgPSBlbmNvZGVyX2Z1bmNzLT5kZXRlY3QoZW5jb2RlciwgY29ubmVjdG9yKTsKLQkJCX0KLQkJfQogCX0KIAogCXJhZGVvbl9jb25uZWN0b3JfdXBkYXRlX3NjcmF0Y2hfcmVncyhjb25uZWN0b3IsIHJldCk7CkBAIC0xNDA2LDYgKzE0ODAsOSBAQAogCXJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMgPSBzaGFyZWRfZGRjOwogCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmhwZCA9ICpocGQ7CisJcmFkZW9uX2Nvbm5lY3Rvci0+cmVxdWlyZXNfZXh0ZW5kZWRfcHJvYmUgPQorCQlyYWRlb25fY29ubmVjdG9yX25lZWRzX2V4dGVuZGVkX3Byb2JlKHJkZXYsIHN1cHBvcnRlZF9kZXZpY2UsCisJCQkJCQkJY29ubmVjdG9yX3R5cGUpOwogCXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlciA9ICpyb3V0ZXI7CiAJaWYgKHJvdXRlci0+ZGRjX3ZhbGlkIHx8IHJvdXRlci0+Y2RfdmFsaWQpIHsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsICZyb3V0ZXItPmkyY19pbmZvKTsKQEAgLTE3NTIsNiArMTgyOSw5IEBACiAJcmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyA9IHN1cHBvcnRlZF9kZXZpY2U7CiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJcmFkZW9uX2Nvbm5lY3Rvci0+aHBkID0gKmhwZDsKKwlyYWRlb25fY29ubmVjdG9yLT5yZXF1aXJlc19leHRlbmRlZF9wcm9iZSA9CisJCXJhZGVvbl9jb25uZWN0b3JfbmVlZHNfZXh0ZW5kZWRfcHJvYmUocmRldiwgc3VwcG9ydGVkX2RldmljZSwKKwkJCQkJCQljb25uZWN0b3JfdHlwZSk7CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCA3Y2ZhYTdlLi5iNTFlMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGRybS9yYWRlb25fZHJtLmg+CiAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+CiAjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KKyNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgpAQCAtMzAwLDYgKzMwMSw4IEBACiAJCW1jLT5tY192cmFtX3NpemUgPSBtYy0+YXBlcl9zaXplOwogCX0KIAltYy0+dnJhbV9lbmQgPSBtYy0+dnJhbV9zdGFydCArIG1jLT5tY192cmFtX3NpemUgLSAxOworCWlmIChyYWRlb25fdnJhbV9saW1pdCAmJiByYWRlb25fdnJhbV9saW1pdCA8IG1jLT5yZWFsX3ZyYW1fc2l6ZSkKKwkJbWMtPnJlYWxfdnJhbV9zaXplID0gcmFkZW9uX3ZyYW1fbGltaXQ7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiVlJBTTogJWxsdU0gMHglMDE2bGxYIC0gMHglMDE2bGxYICglbGx1TSB1c2VkKVxuIiwKIAkJCW1jLT5tY192cmFtX3NpemUgPj4gMjAsIG1jLT52cmFtX3N0YXJ0LAogCQkJbWMtPnZyYW1fZW5kLCBtYy0+cmVhbF92cmFtX3NpemUgPj4gMjApOwpAQCAtMzQ4LDYgKzM1MSw5IEBACiB7CiAJdWludDMyX3QgcmVnOwogCisJaWYgKGVmaV9lbmFibGVkICYmIHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUFBMRSkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyogZmlyc3QgY2hlY2sgQ1JUQ3MgKi8KIAlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkgewogCQlyZWcgPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpIHwKQEAgLTcwNCw4ICs3MTAsOSBAQAogCXJkZXYtPmdwdV9sb2NrdXAgPSBmYWxzZTsKIAlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAKLQlEUk1fSU5GTygiaW5pdGlhbGl6aW5nIGtlcm5lbCBtb2Rlc2V0dGluZyAoJXMgMHglMDRYOjB4JTA0WCkuXG4iLAotCQlyYWRlb25fZmFtaWx5X25hbWVbcmRldi0+ZmFtaWx5XSwgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCURSTV9JTkZPKCJpbml0aWFsaXppbmcga2VybmVsIG1vZGVzZXR0aW5nICglcyAweCUwNFg6MHglMDRYIDB4JTA0WDoweCUwNFgpLlxuIiwKKwkJcmFkZW9uX2ZhbWlseV9uYW1lW3JkZXYtPmZhbWlseV0sIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLAorCQlwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAogCS8qIG11dGV4IGluaXRpYWxpemF0aW9uIGFyZSBhbGwgZG9uZSBoZXJlIHNvIHdlCiAJICogY2FuIHJlY2FsbCBmdW5jdGlvbiB3aXRob3V0IGhhdmluZyBsb2NraW5nIGlzc3VlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDI4ZjQ2NTUuLjZjYzE3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTcwNywxNiArNzA3LDIxIEBACiAJCXJhZGVvbl9yb3V0ZXJfc2VsZWN0X2RkY19wb3J0KHJhZGVvbl9jb25uZWN0b3IpOwogCiAJaWYgKChyYWRlb25fY29ubmVjdG9yLT5iYXNlLmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgfHwKLQkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkpIHsKKwkgICAgKHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgfHwKKwkgICAgcmFkZW9uX2Nvbm5lY3Rvcl9lbmNvZGVyX2lzX2RwX2JyaWRnZSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSkpIHsKIAkJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCiAJCWlmICgoZGlnLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCB8fAogCQkgICAgIGRpZy0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQKSAmJiBkaWctPmRwX2kyY19idXMpCi0JCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmZGlnLT5kcF9pMmNfYnVzLT5hZGFwdGVyKTsKLQl9Ci0JaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7Ci0JCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkJICAgICAgJmRpZy0+ZHBfaTJjX2J1cy0+YWRhcHRlcik7CisJCWVsc2UgaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgJiYgIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJCSAgICAgICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKKwl9IGVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiAhcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkJICAgICAgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwogCX0KIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewpAQCAtNzUxLDggKzc1NiwxNyBAQAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwogCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJLyogTG9nIEVESUQgcmV0cmlldmFsIHN0YXR1cyBoZXJlLiBJbiBwYXJ0aWN1bGFyIHdpdGggcmVnYXJkIHRvCisJICogY29ubmVjdG9ycyB3aXRoIHJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlIGZsYWcgc2V0LCB0aGF0IHdpbGwgcHJldmVudAorCSAqIGZ1bmN0aW9uIHJhZGVvbl9kdmlfZGV0ZWN0KCkgdG8gZmV0Y2ggRURJRCBvbiB0aGlzIGNvbm5lY3RvciwKKwkgKiBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIHZhbGlkIEVESUQgaGVhZGVyIGZvdW5kICovCiAJaWYgKGVkaWQpIHsKKwkJRFJNX0lORk8oIlJhZGVvbiBkaXNwbGF5IGNvbm5lY3RvciAlczogRm91bmQgdmFsaWQgRURJRCIsCisJCQkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAkJa2ZyZWUoZWRpZCk7CisJfSBlbHNlIHsKKwkJRFJNX0lORk8oIlJhZGVvbiBkaXNwbGF5IGNvbm5lY3RvciAlczogTm8gbW9uaXRvciBjb25uZWN0ZWQgb3IgaW52YWxpZCBFRElEIiwKKwkJCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCA4NWYwMzNmLi5lNzFkMmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNTAsOCArNTAsOCBAQAogICogICAyLjcuMCAtIGZpeHVwcyBmb3IgcjYwMCAyRCB0aWxpbmcgc3VwcG9ydC4gKG5vIGV4dGVybmFsIEFCSSBjaGFuZ2UpLCBhZGQgZWcgZHluIGdwciByZWdzCiAgKiAgIDIuOC4wIC0gcGFnZWZsaXAgc3VwcG9ydCwgcjUwMCBVU19GT1JNQVQgcmVncy4gcjUwMCBBUkdCMjEwMTAxMCBjb2xvcmJ1ZiwgcjMwMC0+cjUwMCBDTUFTSywgY2xvY2sgY3J5c3RhbCBxdWVyeQogICogICAyLjkuMCAtIHI2MDAgdGlsaW5nIChzM3RjLHJndGMpIHdvcmtpbmcsIFNFVF9QUkVESUNBVElPTiBwYWNrZXQgMyBvbiByNjAwICsgZWcsIGJhY2tlbmQgcXVlcnkKLSAqICAgMi4xMC4wIC0gZnVzaW9uIDJEIHRpbGluZywgaW5pdGlhbCBjb21wdXRlIHN1cHBvcnQgZm9yIHRoZSBDUyBjaGVja2VyCi0gKiAgIDIuMTEuMCAtIGJhY2tlbmQgbWFwCisgKiAgIDIuMTAuMCAtIGZ1c2lvbiAyRCB0aWxpbmcKKyAqICAgMi4xMS4wIC0gYmFja2VuZCBtYXAsIGluaXRpYWwgY29tcHV0ZSBzdXBwb3J0IGZvciB0aGUgQ1MgY2hlY2tlcgogICovCiAjZGVmaW5lIEtNU19EUklWRVJfTUFKT1IJMgogI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTExCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCBiMjkzNDg3Li4zMTlkODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTIzMjMsNiArMjMyMyw5IEBACiAJZGVmYXVsdDoKIAkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweGY7CisJCWJyZWFrOwogCWNhc2UgNjoKIAkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDNmOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKaW5kZXggNzgxMTk2ZC4uNmMxMTFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKQEAgLTMyLDE3ICszMiwxNyBAQAogICogcmFkZW9uX2RkY19wcm9iZQogICoKICAqLwotYm9vbCByYWRlb25fZGRjX3Byb2JlKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKQorYm9vbCByYWRlb25fZGRjX3Byb2JlKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yLCBib29sIHJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlKQogewotCXU4IG91dF9idWZbXSA9IHsgMHgwLCAweDB9OwotCXU4IGJ1ZlsyXTsKKwl1OCBvdXQgPSAweDA7CisJdTggYnVmWzhdOwogCWludCByZXQ7CiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewogCQl7CiAJCQkuYWRkciA9IDB4NTAsCiAJCQkuZmxhZ3MgPSAwLAogCQkJLmxlbiA9IDEsCi0JCQkuYnVmID0gb3V0X2J1ZiwKKwkJCS5idWYgPSAmb3V0LAogCQl9LAogCQl7CiAJCQkuYWRkciA9IDB4NTAsCkBAIC01MiwxNSArNTIsMzEgQEAKIAkJfQogCX07CiAKKwkvKiBSZWFkIDggYnl0ZXMgZnJvbSBpMmMgZm9yIGV4dGVuZGVkIHByb2JlIG9mIEVESUQgaGVhZGVyICovCisJaWYgKHJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlKQorCQltc2dzWzFdLmxlbiA9IDg7CisKIAkvKiBvbiBodyB3aXRoIHJvdXRlcnMsIHNlbGVjdCByaWdodCBwb3J0ICovCiAJaWYgKHJhZGVvbl9jb25uZWN0b3ItPnJvdXRlci5kZGNfdmFsaWQpCiAJCXJhZGVvbl9yb3V0ZXJfc2VsZWN0X2RkY19wb3J0KHJhZGVvbl9jb25uZWN0b3IpOwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKCZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyLCBtc2dzLCAyKTsKLQlpZiAocmV0ID09IDIpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOworCWlmIChyZXQgIT0gMikKKwkJLyogQ291bGRuJ3QgZmluZCBhbiBhY2Nlc3NpYmxlIEREQyBvbiB0aGlzIGNvbm5lY3RvciAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKHJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlKSB7CisJCS8qIFByb2JlIGFsc28gZm9yIHZhbGlkIEVESUQgaGVhZGVyCisJCSAqIEVESUQgaGVhZGVyIHN0YXJ0cyB3aXRoOgorCQkgKiAweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAuCisJCSAqIE9ubHkgdGhlIGZpcnN0IDYgYnl0ZXMgbXVzdCBiZSB2YWxpZCBhcworCQkgKiBkcm1fZWRpZF9ibG9ja192YWxpZCgpIGNhbiBmaXggdGhlIGxhc3QgMiBieXRlcyAqLworCQlpZiAoZHJtX2VkaWRfaGVhZGVyX2lzX3ZhbGlkKGJ1ZikgPCA2KSB7CisJCQkvKiBDb3VsZG4ndCBmaW5kIGFuIGFjY2Vzc2libGUgRURJRCBvbiB0aGlzCisJCQkgKiBjb25uZWN0b3IgKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogYml0IGJhbmdpbmcgaTJjICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggNmRmNGUzYy4uNjg4MjBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtNDM4LDYgKzQzOCw5IEBACiAJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqZGRjX2J1czsKIAkvKiBzb21lIHN5c3RlbXMgaGF2ZSBhbiBoZG1pIGFuZCB2Z2EgcG9ydCB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lICovCiAJYm9vbCBzaGFyZWRfZGRjOworCS8qIGZvciBzb21lIFJhZGVvbiBjaGlwIGZhbWlsaWVzIHdlIGFwcGx5IGFuIGFkZGl0aW9uYWwgRURJRCBoZWFkZXIKKwkgICBjaGVjayBhcyBwYXJ0IG9mIHRoZSBEREMgcHJvYmUgKi8KKwlib29sIHJlcXVpcmVzX2V4dGVuZGVkX3Byb2JlOwogCWJvb2wgdXNlX2RpZ2l0YWw7CiAJLyogd2UgbmVlZCB0byBtaW5kIHRoZSBFRElEIGJldHdlZW4gZGV0ZWN0CiAJICAgYW5kIGdldCBtb2RlcyBkdWUgdG8gYW5hbG9nL2RpZ2l0YWwvdHZlbmNvZGVyICovCkBAIC00NzYsNiArNDc5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCByYWRlb25fZHBfbGlua190cmFpbihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworZXh0ZXJuIGJvb2wgcmFkZW9uX2RwX25lZWRzX2xpbmtfdHJhaW4oc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOwogZXh0ZXJuIHU4IHJhZGVvbl9kcF9nZXRzaW5rdHlwZShzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiBleHRlcm4gYm9vbCByYWRlb25fZHBfZ2V0ZHBjZChzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiBleHRlcm4gdm9pZCBhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGludCBhY3Rpb24sIGludCBwYW5lbF9tb2RlKTsKQEAgLTUxNCw3ICs1MTgsOCBAQAogCQkJCXU4IHZhbCk7CiBleHRlcm4gdm9pZCByYWRlb25fcm91dGVyX3NlbGVjdF9kZGNfcG9ydChzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiBleHRlcm4gdm9pZCByYWRlb25fcm91dGVyX3NlbGVjdF9jZF9wb3J0KHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKLWV4dGVybiBib29sIHJhZGVvbl9kZGNfcHJvYmUoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOworZXh0ZXJuIGJvb2wgcmFkZW9uX2RkY19wcm9iZShzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciwKKwkJCWJvb2wgcmVxdWlyZXNfZXh0ZW5kZWRfcHJvYmUpOwogZXh0ZXJuIGludCByYWRlb25fZGRjX2dldF9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiAKIGV4dGVybiBzdHJ1Y3QgZHJtX2VuY29kZXIgKnJhZGVvbl9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKaW5kZXggZGVlNGEwYy4uNjAyZmEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwpAQCAtNDAsMTAgKzQwLDE0IEBACiAJc2l6ZSA9IDEwMjQgKiAxMDI0OwogCiAJLyogTnVtYmVyIG9mIHRlc3RzID0KLQkgKiAoVG90YWwgR1RUIC0gSUIgcG9vbCAtIHdyaXRlYmFjayBwYWdlIC0gcmluZyBidWZmZXIpIC8gdGVzdCBzaXplCisJICogKFRvdGFsIEdUVCAtIElCIHBvb2wgLSB3cml0ZWJhY2sgcGFnZSAtIHJpbmcgYnVmZmVycykgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKCh1MzIpKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gUkFERU9OX0dQVV9QQUdFX1NJWkUgLQotCSAgICAgcmRldi0+Y3AucmluZ19zaXplKSkgLyBzaXplOworCW4gPSByZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIHJkZXYtPmNwLnJpbmdfc2l6ZTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKQorCQluIC09IFJBREVPTl9HUFVfUEFHRV9TSVpFOworCWlmIChyZGV2LT5paC5yaW5nX29iaikKKwkJbiAtPSByZGV2LT5paC5yaW5nX3NpemU7CisJbiAvPSBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwogCWlmICghZ3R0X29iaikgewpAQCAtMTMyLDkgKzEzNiwxNSBAQAogCQkgICAgIGd0dF9zdGFydCsrLCB2cmFtX3N0YXJ0KyspIHsKIAkJCWlmICgqdnJhbV9zdGFydCAhPSBndHRfc3RhcnQpIHsKIAkJCQlEUk1fRVJST1IoIkluY29ycmVjdCBHVFQtPlZSQU0gY29weSAlZDogR290IDB4JXAsICIKLQkJCQkJICAiZXhwZWN0ZWQgMHglcCAoR1RUIG1hcCAweCVwLTB4JXApXG4iLAotCQkJCQkgIGksICp2cmFtX3N0YXJ0LCBndHRfc3RhcnQsIGd0dF9tYXAsCi0JCQkJCSAgZ3R0X2VuZCk7CisJCQkJCSAgImV4cGVjdGVkIDB4JXAgKEdUVC9WUkFNIG9mZnNldCAiCisJCQkJCSAgIjB4JTE2bGx4LzB4JTE2bGx4KVxuIiwKKwkJCQkJICBpLCAqdnJhbV9zdGFydCwgZ3R0X3N0YXJ0LAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgKGd0dF9hZGRyIC0gcmRldi0+bWMuZ3R0X3N0YXJ0ICsKKwkJCQkJICAgKHZvaWQqKWd0dF9zdGFydCAtIGd0dF9tYXApLAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgKHZyYW1fYWRkciAtIHJkZXYtPm1jLnZyYW1fc3RhcnQgKworCQkJCQkgICAodm9pZCopZ3R0X3N0YXJ0IC0gZ3R0X21hcCkpOwogCQkJCXJhZGVvbl9ib19rdW5tYXAodnJhbV9vYmopOwogCQkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCQl9CkBAIC0xNzUsOSArMTg1LDE1IEBACiAJCSAgICAgZ3R0X3N0YXJ0KyssIHZyYW1fc3RhcnQrKykgewogCQkJaWYgKCpndHRfc3RhcnQgIT0gdnJhbV9zdGFydCkgewogCQkJCURSTV9FUlJPUigiSW5jb3JyZWN0IFZSQU0tPkdUVCBjb3B5ICVkOiBHb3QgMHglcCwgIgotCQkJCQkgICJleHBlY3RlZCAweCVwIChWUkFNIG1hcCAweCVwLTB4JXApXG4iLAotCQkJCQkgIGksICpndHRfc3RhcnQsIHZyYW1fc3RhcnQsIHZyYW1fbWFwLAotCQkJCQkgIHZyYW1fZW5kKTsKKwkJCQkJICAiZXhwZWN0ZWQgMHglcCAoVlJBTS9HVFQgb2Zmc2V0ICIKKwkJCQkJICAiMHglMTZsbHgvMHglMTZsbHgpXG4iLAorCQkJCQkgIGksICpndHRfc3RhcnQsIHZyYW1fc3RhcnQsCisJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJICAodnJhbV9hZGRyIC0gcmRldi0+bWMudnJhbV9zdGFydCArCisJCQkJCSAgICh2b2lkKil2cmFtX3N0YXJ0IC0gdnJhbV9tYXApLAorCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCSAgKGd0dF9hZGRyIC0gcmRldi0+bWMuZ3R0X3N0YXJ0ICsKKwkJCQkJICAgKHZvaWQqKXZyYW1fc3RhcnQgLSB2cmFtX21hcCkpOwogCQkJCXJhZGVvbl9ib19rdW5tYXAoZ3R0X29ialtpXSk7CiAJCQkJZ290byBvdXRfY2xlYW51cDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggNjAxMjVkZC4uOWI4NmZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTQ1MCw2ICs0NTAsMjkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQltZW0tPmJ1cy5iYXNlID0gcmRldi0+bWMuYXBlcl9iYXNlOwogCQltZW0tPmJ1cy5pc19pb21lbSA9IHRydWU7CisjaWZkZWYgX19hbHBoYV9fCisJCS8qCisJCSAqIEFscGhhOiB1c2UgYnVzLmFkZHIgdG8gaG9sZCB0aGUgaW9yZW1hcCgpIHJldHVybiwKKwkJICogc28gd2UgY2FuIG1vZGlmeSBidXMuYmFzZSBiZWxvdy4KKwkJICovCisJCWlmIChtZW0tPnBsYWNlbWVudCAmIFRUTV9QTF9GTEFHX1dDKQorCQkJbWVtLT5idXMuYWRkciA9CisJCQkJaW9yZW1hcF93YyhtZW0tPmJ1cy5iYXNlICsgbWVtLT5idXMub2Zmc2V0LAorCQkJCQkgICBtZW0tPmJ1cy5zaXplKTsKKwkJZWxzZQorCQkJbWVtLT5idXMuYWRkciA9CisJCQkJaW9yZW1hcF9ub2NhY2hlKG1lbS0+YnVzLmJhc2UgKyBtZW0tPmJ1cy5vZmZzZXQsCisJCQkJCQltZW0tPmJ1cy5zaXplKTsKKworCQkvKgorCQkgKiBBbHBoYTogVXNlIGp1c3QgdGhlIGJ1cyBvZmZzZXQgcGx1cworCQkgKiB0aGUgaG9zZS9kb21haW4gbWVtb3J5IGJhc2UgZm9yIGJ1cy5iYXNlLgorCQkgKiBJdCB0aGVuIGNhbiBiZSB1c2VkIHRvIGJ1aWxkIFBURXMgZm9yIFZSQU0KKwkJICogYWNjZXNzLCBhcyBkb25lIGluIHR0bV9ib192bV9mYXVsdCgpLgorCQkgKi8KKwkJbWVtLT5idXMuYmFzZSA9IChtZW0tPmJ1cy5iYXNlICYgMHgwZmZmZmZmZmZVTCkgKworCQkJcmRldi0+ZGRldi0+aG9zZS0+ZGVuc2VfbWVtX2Jhc2U7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwppbmRleCA1NjYxOWY2Li5hNGQzOGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKQEAgLTM1Myw4ICszNTMsMTAgQEAKIAogCQlyZXQgPSB0dG1fdHRfc2V0X3VzZXIoYm8tPnR0bSwgY3VycmVudCwKIAkJCQkgICAgICBiby0+YnVmZmVyX3N0YXJ0LCBiby0+bnVtX3BhZ2VzKTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJdHRtX3R0X2Rlc3Ryb3koYm8tPnR0bSk7CisJCQliby0+dHRtID0gTlVMTDsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgVFRNX1BGWCAiSWxsZWdhbCBidWZmZXIgb2JqZWN0IHR5cGVcbiIpOwpAQCAtMzkwLDEwICszOTIsMTIgQEAKIAkgKiBDcmVhdGUgYW5kIGJpbmQgYSB0dG0gaWYgcmVxdWlyZWQuCiAJICovCiAKLQlpZiAoIShuZXdfbWFuLT5mbGFncyAmIFRUTV9NRU1UWVBFX0ZMQUdfRklYRUQpICYmIChiby0+dHRtID09IE5VTEwpKSB7Ci0JCXJldCA9IHR0bV9ib19hZGRfdHRtKGJvLCBmYWxzZSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF9lcnI7CisJaWYgKCEobmV3X21hbi0+ZmxhZ3MgJiBUVE1fTUVNVFlQRV9GTEFHX0ZJWEVEKSkgeworCQlpZiAoYm8tPnR0bSA9PSBOVUxMKSB7CisJCQlyZXQgPSB0dG1fYm9fYWRkX3R0bShibywgZmFsc2UpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCX0KIAogCQlyZXQgPSB0dG1fdHRfc2V0X3BsYWNlbWVudF9jYWNoaW5nKGJvLT50dG0sIG1lbS0+cGxhY2VtZW50KTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3V0aWwuYwppbmRleCA3N2RiZjQwLi5hZTNjNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdXRpbC5jCkBAIC02MzUsMTMgKzYzNSwxMyBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQl0dG1fYm9fZnJlZV9vbGRfbm9kZShibyk7CiAJCWlmICgobWFuLT5mbGFncyAmIFRUTV9NRU1UWVBFX0ZMQUdfRklYRUQpICYmCiAJCSAgICAoYm8tPnR0bSAhPSBOVUxMKSkgewogCQkJdHRtX3R0X3VuYmluZChiby0+dHRtKTsKIAkJCXR0bV90dF9kZXN0cm95KGJvLT50dG0pOwogCQkJYm8tPnR0bSA9IE5VTEw7CiAJCX0KKwkJdHRtX2JvX2ZyZWVfb2xkX25vZGUoYm8pOwogCX0gZWxzZSB7CiAJCS8qKgogCQkgKiBUaGlzIHNob3VsZCBoZWxwIHBpcGVsaW5lIG9yZGluYXJ5IGJ1ZmZlciBtb3Zlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDMwNmIxNWYuLjExMzBhODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtNTg5LDYgKzU4OSw3IEBACiBjb25maWcgSElEX1dJSU1PVEUKIAl0cmlzdGF0ZSAiTmludGVuZG8gV2lpIFJlbW90ZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQlRfSElEUAorCWRlcGVuZHMgb24gTEVEU19DTEFTUwogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciB0aGUgTmludGVuZG8gV2lpIFJlbW90ZSBibHVldG9vdGggZGV2aWNlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCmluZGV4IGI4NTc0NGYuLjE4YjNiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCkBAIC00NDQsNiArNDQ0LDEyIEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTKSwKIAkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAogCQkJQVBQTEVfUkRFU0NfSklTIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9SRVZCX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1JFVkJfSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIHwgQVBQTEVfSVNPX0tFWUJPQVJEIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9SRVZCX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSksCiAJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggMWE1Y2YwYy4uMjQyMzUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMzQwLDYgKzEzNDAsOSBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1JFVkJfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1JFVkJfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfUkVWQl9KSVMpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0FOU0kpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0lTTykgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfSklTKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IGRiNjNjY2YuLjc0ODRlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTEwOSw2ICsxMDksOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0FOU0kJMHgwMjQ1CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSVNPCTB4MDI0NgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1X0pJUwkweDAyNDcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfUkVWQl9BTlNJCTB4MDI0ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9SRVZCX0lTTwkweDAyNTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfUkVWQl9KSVMJMHgwMjUxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfQU5TSSAgMHgwMjM5CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfSVNPICAgMHgwMjNhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTXzIwMDlfSklTICAgMHgwMjNiCkBAIC0yNzQsNiArMjc3LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QRU5QT1dFUgkJMHgwMGY0CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEJCTB4MGU4ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dSRUVOQVNJQV9EVUFMX1VTQl9KT1lQQUQJMHgzMDEzCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HUkVUQUdNQUNCRVRICTB4MDk3MQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0dSRVRBR01BQ0JFVEhfSFVFWQkweDIwMDUKQEAgLTU3Niw2ICs1ODAsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFCTB4MDAwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfV0lSRUxFU1NfS0JEX01PVVNFCTB4MDYwMAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0lHTUFfTUlDUk8JMHgxYzRmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0lHTUFfTUlDUk9fS0VZQk9BUkQJMHgwMDAyCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TS1lDQUJMRQkJCTB4MTIyMwogI2RlZmluZQlVU0JfREVWSUNFX0lEX1NLWUNBQkxFX1dJUkVMRVNTX1BSRVNFTlRFUgkweDNGMDcKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYyBiL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKaW5kZXggMGVjOTFjMS4uZjBmYmQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCkBAIC04MSw2ICs4MSwyOCBAQAogI2RlZmluZSBOT19UT1VDSEVTIC0xCiAjZGVmaW5lIFNJTkdMRV9UT1VDSF9VUCAtMgogCisvKiBUb3VjaCBzdXJmYWNlIGluZm9ybWF0aW9uLiBEaW1lbnNpb24gaXMgaW4gaHVuZHJlZHRocyBvZiBhIG1tLCBtaW4gYW5kIG1heAorICogYXJlIGluIHVuaXRzLiAqLworI2RlZmluZSBNT1VTRV9ESU1FTlNJT05fWCAoZmxvYXQpOTA1NgorI2RlZmluZSBNT1VTRV9NSU5fWCAtMTEwMAorI2RlZmluZSBNT1VTRV9NQVhfWCAxMjU4CisjZGVmaW5lIE1PVVNFX1JFU19YICgoTU9VU0VfTUFYX1ggLSBNT1VTRV9NSU5fWCkgLyAoTU9VU0VfRElNRU5TSU9OX1ggLyAxMDApKQorI2RlZmluZSBNT1VTRV9ESU1FTlNJT05fWSAoZmxvYXQpNTE1MgorI2RlZmluZSBNT1VTRV9NSU5fWSAtMTU4OQorI2RlZmluZSBNT1VTRV9NQVhfWSAyMDQ3CisjZGVmaW5lIE1PVVNFX1JFU19ZICgoTU9VU0VfTUFYX1kgLSBNT1VTRV9NSU5fWSkgLyAoTU9VU0VfRElNRU5TSU9OX1kgLyAxMDApKQorCisjZGVmaW5lIFRSQUNLUEFEX0RJTUVOU0lPTl9YIChmbG9hdCkxMzAwMAorI2RlZmluZSBUUkFDS1BBRF9NSU5fWCAtMjkwOQorI2RlZmluZSBUUkFDS1BBRF9NQVhfWCAzMTY3CisjZGVmaW5lIFRSQUNLUEFEX1JFU19YIFwKKwkoKFRSQUNLUEFEX01BWF9YIC0gVFJBQ0tQQURfTUlOX1gpIC8gKFRSQUNLUEFEX0RJTUVOU0lPTl9YIC8gMTAwKSkKKyNkZWZpbmUgVFJBQ0tQQURfRElNRU5TSU9OX1kgKGZsb2F0KTExMDAwCisjZGVmaW5lIFRSQUNLUEFEX01JTl9ZIC0yNDU2CisjZGVmaW5lIFRSQUNLUEFEX01BWF9ZIDI1NjUKKyNkZWZpbmUgVFJBQ0tQQURfUkVTX1kgXAorCSgoVFJBQ0tQQURfTUFYX1kgLSBUUkFDS1BBRF9NSU5fWSkgLyAoVFJBQ0tQQURfRElNRU5TSU9OX1kgLyAxMDApKQorCiAvKioKICAqIHN0cnVjdCBtYWdpY21vdXNlX3NjIC0gVHJhY2tzIE1hZ2ljIE1vdXNlLXNwZWNpZmljIGRhdGEuCiAgKiBAaW5wdXQ6IElucHV0IGRldmljZSB0aHJvdWdoIHdoaWNoIHdlIHJlcG9ydCBldmVudHMuCkBAIC00MDYsMTcgKzQyOCwzMSBAQAogCQkgKiBpbnZlcnNlIG9mIHRoZSByZXBvcnRlZCBZLgogCQkgKi8KIAkJaWYgKGlucHV0LT5pZC5wcm9kdWN0ID09IFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRSkgewotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCAtMTEwMCwKLQkJCQkxMzU4LCA0LCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgLTE1ODksCi0JCQkJMjA0NywgNCwgMCk7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsCisJCQkJTU9VU0VfTUlOX1gsIE1PVVNFX01BWF9YLCA0LCAwKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwKKwkJCQlNT1VTRV9NSU5fWSwgTU9VU0VfTUFYX1ksIDQsIDApOworCisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsCisJCQkJTU9VU0VfUkVTX1gpOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLAorCQkJCU1PVVNFX1JFU19ZKTsKIAkJfSBlbHNlIHsgLyogVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ1RSQUNLUEFEICovCi0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIC0yOTA5LCAzMTY3LCA0LCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgLTI0NTYsIDI1NjUsIDQsIDApOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCAtMjkwOSwKLQkJCQkzMTY3LCA0LCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgLTI0NTYsCi0JCQkJMjU2NSwgNCwgMCk7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX1gsIFRSQUNLUEFEX01JTl9YLAorCQkJCVRSQUNLUEFEX01BWF9YLCA0LCAwKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgVFJBQ0tQQURfTUlOX1ksCisJCQkJVFJBQ0tQQURfTUFYX1ksIDQsIDApOworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLAorCQkJCVRSQUNLUEFEX01JTl9YLCBUUkFDS1BBRF9NQVhfWCwgNCwgMCk7CisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksCisJCQkJVFJBQ0tQQURfTUlOX1ksIFRSQUNLUEFEX01BWF9ZLCA0LCAwKTsKKworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXQsIEFCU19YLCBUUkFDS1BBRF9SRVNfWCk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwgQUJTX1ksIFRSQUNLUEFEX1JFU19ZKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwKKwkJCQlUUkFDS1BBRF9SRVNfWCk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksCisJCQkJVFJBQ0tQQURfUkVTX1kpOwogCQl9CiAKIAkJaW5wdXRfc2V0X2V2ZW50c19wZXJfcGFja2V0KGlucHV0LCA2MCk7CkBAIC01MDEsOSArNTM3LDE3IEBACiAJfQogCXJlcG9ydC0+c2l6ZSA9IDY7CiAKKwkvKgorCSAqIFNvbWUgZGV2aWNlcyByZXBvbmQgd2l0aCAnaW52YWxpZCByZXBvcnQgaWQnIHdoZW4gZmVhdHVyZQorCSAqIHJlcG9ydCBzd2l0Y2hpbmcgaXQgaW50byBtdWx0aXRvdWNoIG1vZGUgaXMgc2VudCB0byBpdC4KKwkgKgorCSAqIFRoaXMgcmVzdWx0cyBpbiAtRUlPIGZyb20gdGhlIF9yYXcgbG93LWxldmVsIHRyYW5zcG9ydCBjYWxsYmFjaywKKwkgKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gb3RoZXIgd2F5IG9mIHN3aXRjaGluZyB0aGUgbW9kZS4KKwkgKiBUaHVzIHRoZSBzdXBlci11Z2x5IGhhY2t5IHN1Y2Nlc3MgY2hlY2sgYmVsb3cuCisJICovCiAJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmUsIHNpemVvZihmZWF0dXJlKSwKIAkJCUhJRF9GRUFUVVJFX1JFUE9SVCk7Ci0JaWYgKHJldCAhPSBzaXplb2YoZmVhdHVyZSkpIHsKKwlpZiAocmV0ICE9IC1FSU8gJiYgcmV0ICE9IHNpemVvZihmZWF0dXJlKSkgewogCQloaWRfZXJyKGhkZXYsICJ1bmFibGUgdG8gcmVxdWVzdCB0b3VjaCBkYXRhICglZClcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3N0b3BfaHc7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwppbmRleCAwNjg4ODMyLi5hNTk3MDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwpAQCAtMzUzLDExICszNTMsNyBAQAogCWlmIChyZXQpIHsKIAkJaGlkX3dhcm4oaGRldiwgImNhbid0IGNyZWF0ZSBzeXNmcyBiYXR0ZXJ5IGF0dHJpYnV0ZSwgZXJyOiAlZFxuIiwKIAkJCSByZXQpOwotCQkvKgotCQkgKiBiYXR0ZXJ5IGF0dHJpYnV0ZSBpcyBub3QgY3JpdGljYWwgZm9yIHRoZSB0YWJsZXQsIGJ1dCBpZiBpdAotCQkgKiBmYWlsZWQgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGNyZWF0ZSBhYyBhdHRyaWJ1dGUKLQkJICovCi0JCWdvdG8gbW92ZV9vbjsKKwkJZ290byBlcnJfYmF0dGVyeTsKIAl9CiAKIAl3ZGF0YS0+YWMucHJvcGVydGllcyA9IHdhY29tX2FjX3Byb3BzOwpAQCAtMzcxLDE0ICszNjcsOCBAQAogCWlmIChyZXQpIHsKIAkJaGlkX3dhcm4oaGRldiwKIAkJCSAiY2FuJ3QgY3JlYXRlIGFjIGJhdHRlcnkgYXR0cmlidXRlLCBlcnI6ICVkXG4iLCByZXQpOwotCQkvKgotCQkgKiBhYyBhdHRyaWJ1dGUgaXMgbm90IGNyaXRpY2FsIGZvciB0aGUgdGFibGV0LCBidXQgaWYgaXQKLQkJICogZmFpbGVkIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBiYXR0ZXJ5IGF0dHJpYnV0ZSB0byBleGlzdAotCQkgKi8KLQkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJndkYXRhLT5iYXR0ZXJ5KTsKKwkJZ290byBlcnJfYWM7CiAJfQotCi1tb3ZlX29uOgogI2VuZGlmCiAJaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhkZXYtPmlucHV0cy5uZXh0LCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKIAlpbnB1dCA9IGhpZGlucHV0LT5pbnB1dDsKQEAgLTQxNiw2ICs0MDYsMTMgQEAKIAogCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX0hJRF9XQUNPTV9QT1dFUl9TVVBQTFkKK2Vycl9hYzoKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3Rlcigmd2RhdGEtPmJhdHRlcnkpOworZXJyX2JhdHRlcnk6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9zcGVlZCk7CisJaGlkX2h3X3N0b3AoaGRldik7CisjZW5kaWYKIGVycl9mcmVlOgogCWtmcmVlKHdkYXRhKTsKIAlyZXR1cm4gcmV0OwpAQCAtNDI2LDYgKzQyMyw3IEBACiAjaWZkZWYgQ09ORklHX0hJRF9XQUNPTV9QT1dFUl9TVVBQTFkKIAlzdHJ1Y3Qgd2Fjb21fZGF0YSAqd2RhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CiAjZW5kaWYKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX3NwZWVkKTsKIAloaWRfaHdfc3RvcChoZGV2KTsKIAogI2lmZGVmIENPTkZJR19ISURfV0FDT01fUE9XRVJfU1VQUExZCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2lpbW90ZS5jIGIvZHJpdmVycy9oaWQvaGlkLXdpaW1vdGUuYwppbmRleCBhNTk0MzgzLi44NWEwMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2lpbW90ZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13aWltb3RlLmMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSAiaGlkLWlkcy5oIgpAQCAtMzMsOSArMzMsOSBAQAogfTsKIAogc3RydWN0IHdpaW1vdGVfZGF0YSB7Ci0JYXRvbWljX3QgcmVhZHk7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkc1s0XTsKIAogCXNwaW5sb2NrX3QgcWxvY2s7CiAJX191OCBoZWFkOwpAQCAtNTMsOCArNTMsMTUgQEAKICNkZWZpbmUgV0lJUFJPVE9fRkxBR1NfTEVEUyAoV0lJUFJPVE9fRkxBR19MRUQxIHwgV0lJUFJPVE9fRkxBR19MRUQyIHwgXAogCQkJCQlXSUlQUk9UT19GTEFHX0xFRDMgfCBXSUlQUk9UT19GTEFHX0xFRDQpCiAKKy8qIHJldHVybiBmbGFnIGZvciBsZWQgXG51bSAqLworI2RlZmluZSBXSUlQUk9UT19GTEFHX0xFRChudW0pIChXSUlQUk9UT19GTEFHX0xFRDEgPDwgKG51bSAtIDEpKQorCiBlbnVtIHdpaXByb3RvX3JlcXMgeworCVdJSVBST1RPX1JFUV9OVUxMID0gMHgwLAogCVdJSVBST1RPX1JFUV9MRUQgPSAweDExLAorCVdJSVBST1RPX1JFUV9EUk0gPSAweDEyLAorCVdJSVBST1RPX1JFUV9TVEFUVVMgPSAweDIwLAorCVdJSVBST1RPX1JFUV9SRVRVUk4gPSAweDIyLAogCVdJSVBST1RPX1JFUV9EUk1fSyA9IDB4MzAsCiB9OwogCkBAIC04Nyw5ICs5NCw2IEBACiAJQlROX01PREUsCS8qIFdJSVBST1RPX0tFWV9IT01FICovCiB9OwogCi0jZGVmaW5lIGRldl90b193aWkocGRldikgaGlkX2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihwZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgXAotCQkJCQkJCQkJZGV2KSkKLQogc3RhdGljIHNzaXplX3Qgd2lpbW90ZV9oaWRfc2VuZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqYnVmZmVyLAogCQkJCQkJCQlzaXplX3QgY291bnQpCiB7CkBAIC0xOTIsNjYgKzE5Niw5NiBAQAogCXdpaW1vdGVfcXVldWUod2RhdGEsIGNtZCwgc2l6ZW9mKGNtZCkpOwogfQogCi0jZGVmaW5lIHdpaWZzX2xlZF9zaG93X3NldChudW0pCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgd2lpZnNfbGVkX3Nob3dfIyNudW0oc3RydWN0IGRldmljZSAqZGV2LAkJCVwKLQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGEgPSBkZXZfdG9fd2lpKGRldik7CQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAotCWludCBzdGF0ZTsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmICghYXRvbWljX3JlYWQoJndkYXRhLT5yZWFkeSkpCQkJCVwKLQkJcmV0dXJuIC1FQlVTWTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndkYXRhLT5zdGF0ZS5sb2NrLCBmbGFncyk7CQkJXAotCXN0YXRlID0gISEod2RhdGEtPnN0YXRlLmZsYWdzICYgV0lJUFJPVE9fRkxBR19MRUQjI251bSk7CVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZGF0YS0+c3RhdGUubG9jaywgZmxhZ3MpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBzdGF0ZSk7CQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCB3aWlmc19sZWRfc2V0XyMjbnVtKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB3aWltb3RlX2RhdGEgKndkYXRhID0gZGV2X3RvX3dpaShkZXYpOwkJCVwKLQlpbnQgdG1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAotCV9fdTggc3RhdGU7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoIWF0b21pY19yZWFkKCZ3ZGF0YS0+cmVhZHkpKQkJCQlcCi0JCXJldHVybiAtRUJVU1k7CQkJCQkJXAotCQkJCQkJCQkJXAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZGF0YS0+c3RhdGUubG9jaywgZmxhZ3MpOwkJCVwKLQkJCQkJCQkJCVwKLQlzdGF0ZSA9IHdkYXRhLT5zdGF0ZS5mbGFnczsJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAodG1wKQkJCQkJCQlcCi0JCXdpaXByb3RvX3JlcV9sZWRzKHdkYXRhLCBzdGF0ZSB8IFdJSVBST1RPX0ZMQUdfTEVEIyNudW0pO1wKLQllbHNlCQkJCQkJCQlcCi0JCXdpaXByb3RvX3JlcV9sZWRzKHdkYXRhLCBzdGF0ZSAmIH5XSUlQUk9UT19GTEFHX0xFRCMjbnVtKTtcCi0JCQkJCQkJCQlcCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2RhdGEtPnN0YXRlLmxvY2ssIGZsYWdzKTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIobGVkIyNudW0sIFNfSVJVR08gfCBTX0lXVVNSLCB3aWlmc19sZWRfc2hvd18jI251bSwJXAotCQkJCQkJd2lpZnNfbGVkX3NldF8jI251bSkKKy8qCisgKiBDaGVjayB3aGF0IHBlcmlwaGVyYWxzIG9mIHRoZSB3aWltb3RlIGFyZSBjdXJyZW50bHkKKyAqIGFjdGl2ZSBhbmQgc2VsZWN0IGEgcHJvcGVyIERSTSB0aGF0IHN1cHBvcnRzIGFsbCBvZgorICogdGhlIHJlcXVlc3RlZCBkYXRhIGlucHV0cy4KKyAqLworc3RhdGljIF9fdTggc2VsZWN0X2RybShzdHJ1Y3Qgd2lpbW90ZV9kYXRhICp3ZGF0YSkKK3sKKwlyZXR1cm4gV0lJUFJPVE9fUkVRX0RSTV9LOworfQogCi13aWlmc19sZWRfc2hvd19zZXQoMSk7Ci13aWlmc19sZWRfc2hvd19zZXQoMik7Ci13aWlmc19sZWRfc2hvd19zZXQoMyk7Ci13aWlmc19sZWRfc2hvd19zZXQoNCk7CitzdGF0aWMgdm9pZCB3aWlwcm90b19yZXFfZHJtKHN0cnVjdCB3aWltb3RlX2RhdGEgKndkYXRhLCBfX3U4IGRybSkKK3sKKwlfX3U4IGNtZFszXTsKKworCWlmIChkcm0gPT0gV0lJUFJPVE9fUkVRX05VTEwpCisJCWRybSA9IHNlbGVjdF9kcm0od2RhdGEpOworCisJY21kWzBdID0gV0lJUFJPVE9fUkVRX0RSTTsKKwljbWRbMV0gPSAwOworCWNtZFsyXSA9IGRybTsKKworCXdpaW1vdGVfcXVldWUod2RhdGEsIGNtZCwgc2l6ZW9mKGNtZCkpOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyB3aWltb3RlX2xlZHNfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYpCit7CisJc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbGVkX2Rldi0+ZGV2LT5wYXJlbnQ7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHZhbHVlID0gZmFsc2U7CisKKwl3ZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCWlmICh3ZGF0YS0+bGVkc1tpXSA9PSBsZWRfZGV2KSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2RhdGEtPnN0YXRlLmxvY2ssIGZsYWdzKTsKKwkJCXZhbHVlID0gd2RhdGEtPnN0YXRlLmZsYWdzICYgV0lJUFJPVE9fRkxBR19MRUQoaSArIDEpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2RhdGEtPnN0YXRlLmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHZhbHVlID8gTEVEX0ZVTEwgOiBMRURfT0ZGOworfQorCitzdGF0aWMgdm9pZCB3aWltb3RlX2xlZHNfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJCQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCB3aWltb3RlX2RhdGEgKndkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGxlZF9kZXYtPmRldi0+cGFyZW50OworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191OCBzdGF0ZSwgZmxhZzsKKworCXdkYXRhID0gaGlkX2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBoaWRfZGV2aWNlLCBkZXYpKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJaWYgKHdkYXRhLT5sZWRzW2ldID09IGxlZF9kZXYpIHsKKwkJCWZsYWcgPSBXSUlQUk9UT19GTEFHX0xFRChpICsgMSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2RhdGEtPnN0YXRlLmxvY2ssIGZsYWdzKTsKKwkJCXN0YXRlID0gd2RhdGEtPnN0YXRlLmZsYWdzOworCQkJaWYgKHZhbHVlID09IExFRF9PRkYpCisJCQkJd2lpcHJvdG9fcmVxX2xlZHMod2RhdGEsIHN0YXRlICYgfmZsYWcpOworCQkJZWxzZQorCQkJCXdpaXByb3RvX3JlcV9sZWRzKHdkYXRhLCBzdGF0ZSB8IGZsYWcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2RhdGEtPnN0YXRlLmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQogCiBzdGF0aWMgaW50IHdpaW1vdGVfaW5wdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwKIAkJCQkJCXVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lpbW90ZV9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKIAlzdHJ1Y3Qgd2lpbW90ZV9kYXRhICp3ZGF0YSA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoIWF0b21pY19yZWFkKCZ3ZGF0YS0+cmVhZHkpKQotCQlyZXR1cm4gLUVCVVNZOwotCS8qIHNtcF9ybWI6IE1ha2Ugc3VyZSB3ZGF0YS0+eHkgaXMgYXZhaWxhYmxlIHdoZW4gd2RhdGEtPnJlYWR5IGlzIDEgKi8KLQlzbXBfcm1iKCk7CisJcmV0dXJuIGhpZF9od19vcGVuKHdkYXRhLT5oZGV2KTsKK30KIAotCXJldHVybiAwOworc3RhdGljIHZvaWQgd2lpbW90ZV9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGEgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJaGlkX2h3X2Nsb3NlKHdkYXRhLT5oZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlcl9rZXlzKHN0cnVjdCB3aWltb3RlX2RhdGEgKndkYXRhLCBjb25zdCBfX3U4ICpwYXlsb2FkKQpAQCAtMjgxLDYgKzMxNSwyNiBAQAogCWlucHV0X3N5bmMod2RhdGEtPmlucHV0KTsKIH0KIAorc3RhdGljIHZvaWQgaGFuZGxlcl9zdGF0dXMoc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGEsIGNvbnN0IF9fdTggKnBheWxvYWQpCit7CisJaGFuZGxlcl9rZXlzKHdkYXRhLCBwYXlsb2FkKTsKKworCS8qIG9uIHN0YXR1cyByZXBvcnRzIHRoZSBkcm0gaXMgcmVzZXQgc28gd2UgbmVlZCB0byByZXNlbmQgdGhlIGRybSAqLworCXdpaXByb3RvX3JlcV9kcm0od2RhdGEsIFdJSVBST1RPX1JFUV9OVUxMKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlcl9yZXR1cm4oc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGEsIGNvbnN0IF9fdTggKnBheWxvYWQpCit7CisJX191OCBlcnIgPSBwYXlsb2FkWzNdOworCV9fdTggY21kID0gcGF5bG9hZFsyXTsKKworCWhhbmRsZXJfa2V5cyh3ZGF0YSwgcGF5bG9hZCk7CisKKwlpZiAoZXJyKQorCQloaWRfd2Fybih3ZGF0YS0+aGRldiwgIlJlbW90ZSBlcnJvciAlaGh1IG9uIHJlcSAlaGh1XG4iLCBlcnIsCisJCQkJCQkJCQljbWQpOworfQorCiBzdHJ1Y3Qgd2lpcHJvdG9faGFuZGxlciB7CiAJX191OCBpZDsKIAlzaXplX3Qgc2l6ZTsKQEAgLTI4OCw2ICszNDIsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB3aWlwcm90b19oYW5kbGVyIGhhbmRsZXJzW10gPSB7CisJeyAuaWQgPSBXSUlQUk9UT19SRVFfU1RBVFVTLCAuc2l6ZSA9IDYsIC5mdW5jID0gaGFuZGxlcl9zdGF0dXMgfSwKKwl7IC5pZCA9IFdJSVBST1RPX1JFUV9SRVRVUk4sIC5zaXplID0gNCwgLmZ1bmMgPSBoYW5kbGVyX3JldHVybiB9LAogCXsgLmlkID0gV0lJUFJPVE9fUkVRX0RSTV9LLCAuc2l6ZSA9IDIsIC5mdW5jID0gaGFuZGxlcl9rZXlzIH0sCiAJeyAuaWQgPSAwIH0KIH07CkBAIC0zMDAsMTEgKzM1Niw2IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghYXRvbWljX3JlYWQoJndkYXRhLT5yZWFkeSkpCi0JCXJldHVybiAtRUJVU1k7Ci0JLyogc21wX3JtYjogTWFrZSBzdXJlIHdkYXRhLT54eSBpcyBhdmFpbGFibGUgd2hlbiB3ZGF0YS0+cmVhZHkgaXMgMSAqLwotCXNtcF9ybWIoKTsKLQogCWlmIChzaXplIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMyMSw2ICszNzIsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd2lpbW90ZV9sZWRzX2Rlc3Ryb3koc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkOworCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQlpZiAod2RhdGEtPmxlZHNbaV0pIHsKKwkJCWxlZCA9IHdkYXRhLT5sZWRzW2ldOworCQkJd2RhdGEtPmxlZHNbaV0gPSBOVUxMOworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIobGVkKTsKKwkJCWtmcmVlKGxlZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgd2lpbW90ZV9sZWRzX2NyZWF0ZShzdHJ1Y3Qgd2lpbW90ZV9kYXRhICp3ZGF0YSkKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ3ZGF0YS0+aGRldi0+ZGV2OworCXNpemVfdCBuYW1lc3ogPSBzdHJsZW4oZGV2X25hbWUoZGV2KSkgKyA5OworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZDsKKwljaGFyICpuYW1lOworCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQlsZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVkX2NsYXNzZGV2KSArIG5hbWVzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghbGVkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJbmFtZSA9ICh2b2lkKikmbGVkWzFdOworCQlzbnByaW50ZihuYW1lLCBuYW1lc3osICIlczpibHVlOnAlZCIsIGRldl9uYW1lKGRldiksIGkpOworCQlsZWQtPm5hbWUgPSBuYW1lOworCQlsZWQtPmJyaWdodG5lc3MgPSAwOworCQlsZWQtPm1heF9icmlnaHRuZXNzID0gMTsKKwkJbGVkLT5icmlnaHRuZXNzX2dldCA9IHdpaW1vdGVfbGVkc19nZXQ7CisJCWxlZC0+YnJpZ2h0bmVzc19zZXQgPSB3aWltb3RlX2xlZHNfc2V0OworCisJCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihkZXYsIGxlZCk7CisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKGxlZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQl3ZGF0YS0+bGVkc1tpXSA9IGxlZDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdpaW1vdGVfbGVkc19kZXN0cm95KHdkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHdpaW1vdGVfZGF0YSAqd2lpbW90ZV9jcmVhdGUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCiB7CiAJc3RydWN0IHdpaW1vdGVfZGF0YSAqd2RhdGE7CkBAIC0zNDEsNiArNDQ0LDggQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKHdkYXRhLT5pbnB1dCwgd2RhdGEpOwogCXdkYXRhLT5pbnB1dC0+ZXZlbnQgPSB3aWltb3RlX2lucHV0X2V2ZW50OworCXdkYXRhLT5pbnB1dC0+b3BlbiA9IHdpaW1vdGVfaW5wdXRfb3BlbjsKKwl3ZGF0YS0+aW5wdXQtPmNsb3NlID0gd2lpbW90ZV9pbnB1dF9jbG9zZTsKIAl3ZGF0YS0+aW5wdXQtPmRldi5wYXJlbnQgPSAmd2RhdGEtPmhkZXYtPmRldjsKIAl3ZGF0YS0+aW5wdXQtPmlkLmJ1c3R5cGUgPSB3ZGF0YS0+aGRldi0+YnVzOwogCXdkYXRhLT5pbnB1dC0+aWQudmVuZG9yID0gd2RhdGEtPmhkZXYtPnZlbmRvcjsKQEAgLTM2Miw2ICs0NjcsMTIgQEAKIAogc3RhdGljIHZvaWQgd2lpbW90ZV9kZXN0cm95KHN0cnVjdCB3aWltb3RlX2RhdGEgKndkYXRhKQogeworCXdpaW1vdGVfbGVkc19kZXN0cm95KHdkYXRhKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHdkYXRhLT5pbnB1dCk7CisJY2FuY2VsX3dvcmtfc3luYygmd2RhdGEtPndvcmtlcik7CisJaGlkX2h3X3N0b3Aod2RhdGEtPmhkZXYpOworCiAJa2ZyZWUod2RhdGEpOwogfQogCkBAIC0zNzcsMTkgKzQ4OCw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaGRldi0+ZGV2LCAmZGV2X2F0dHJfbGVkMSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9sZWQyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX2xlZDMpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaGRldi0+ZGV2LCAmZGV2X2F0dHJfbGVkNCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewogCQloaWRfZXJyKGhkZXYsICJISUQgcGFyc2UgZmFpbGVkXG4iKTsKQEAgLTQwOCw5ICs1MDYsMTAgQEAKIAkJZ290byBlcnJfc3RvcDsKIAl9CiAKLQkvKiBzbXBfd21iOiBXcml0ZSB3ZGF0YS0+eHkgZmlyc3QgYmVmb3JlIHdkYXRhLT5yZWFkeSBpcyBzZXQgdG8gMSAqLwotCXNtcF93bWIoKTsKLQlhdG9taWNfc2V0KCZ3ZGF0YS0+cmVhZHksIDEpOworCXJldCA9IHdpaW1vdGVfbGVkc19jcmVhdGUod2RhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKIAloaWRfaW5mbyhoZGV2LCAiTmV3IGRldmljZSByZWdpc3RlcmVkXG4iKTsKIAogCS8qIGJ5IGRlZmF1bHQgc2V0IGxlZDEgYWZ0ZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uICovCkBAIC00MjAsMTUgKzUxOSwxNSBAQAogCiAJcmV0dXJuIDA7CiAKK2Vycl9mcmVlOgorCXdpaW1vdGVfZGVzdHJveSh3ZGF0YSk7CisJcmV0dXJuIHJldDsKKwogZXJyX3N0b3A6CiAJaGlkX2h3X3N0b3AoaGRldik7CiBlcnI6CiAJaW5wdXRfZnJlZV9kZXZpY2Uod2RhdGEtPmlucHV0KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX2xlZDEpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaGRldi0+ZGV2LCAmZGV2X2F0dHJfbGVkMik7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9sZWQzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX2xlZDQpOwotCXdpaW1vdGVfZGVzdHJveSh3ZGF0YSk7CisJa2ZyZWUod2RhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzNywxNiArNTM2LDYgQEAKIAlzdHJ1Y3Qgd2lpbW90ZV9kYXRhICp3ZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAogCWhpZF9pbmZvKGhkZXYsICJEZXZpY2UgcmVtb3ZlZFxuIik7Ci0KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX2xlZDEpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaGRldi0+ZGV2LCAmZGV2X2F0dHJfbGVkMik7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZoZGV2LT5kZXYsICZkZXZfYXR0cl9sZWQzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmhkZXYtPmRldiwgJmRldl9hdHRyX2xlZDQpOwotCi0JaGlkX2h3X3N0b3AoaGRldik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uod2RhdGEtPmlucHV0KTsKLQotCWNhbmNlbF93b3JrX3N5bmMoJndkYXRhLT53b3JrZXIpOwogCXdpaW1vdGVfZGVzdHJveSh3ZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDYyMTk1OWQuLjMxNDZmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNDcsNiArNDcsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9BRkFURUNILCBVU0JfREVWSUNFX0lEX0FGQVRFQ0hfQUY5MDE2LCBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfRVRVUkJPVE9VQ0gsIFVTQl9ERVZJQ0VfSURfRVRVUkJPVE9VQ0gsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HUkVFTkFTSUEsIFVTQl9ERVZJQ0VfSURfR1JFRU5BU0lBX0RVQUxfVVNCX0pPWVBBRCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JELCBVU0JfREVWSUNFX0lEX1BBTlRIRVJMT1JEX1RXSU5fVVNCX0pPWVNUSUNLLCBISURfUVVJUktfTVVMVElfSU5QVVQgfCBISURfUVVJUktfU0tJUF9PVVRQVVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9QTEFZRE9UQ09NLCBVU0JfREVWSUNFX0lEX1BMQVlET1RDT01fRU1TX1VTQklJLCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVE9VQ0hQQUNLLCBVU0JfREVWSUNFX0lEX1RPVUNIUEFDS19SVFMsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LApAQCAtODksNiArOTAsNyBAQAogCiAJeyBVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9NVUxUSV9UT1VDSCwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9XSVJFTEVTUywgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1NJR01BX01JQ1JPLCBVU0JfREVWSUNFX0lEX1NJR01BX01JQ1JPX0tFWUJPQVJELCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCiAJeyAwLCAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCAwNTk4Y2QyLi4wYjYyYzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC02MjMsNyArNjIzLDcgQEAKIAkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIsIEFEVDc0NjEsIGFuZCBBRFQ3NDYxQSwKIAkgIE1heGltIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCiAJICBNQVg2NjgwLCBNQVg2NjgxLCBNQVg2NjkyLCBNQVg2Njk1LCBNQVg2Njk2LCBPTiBTZW1pY29uZHVjdG9yIE5DVDEwMDgsCi0JICBhbmQgV2luYm9uZC9OdXZvdG9uIFc4M0w3NzFXL0cvQVdHL0FTRyBzZW5zb3IgY2hpcHMuCisJICBXaW5ib25kL051dm90b24gVzgzTDc3MVcvRy9BV0cvQVNHIGFuZCBQaGlsaXBzIFNBNTYwMDQgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpAQCAtNjk0LDE0ICs2OTQsMjQgQEAKIAkgIGJlIGNhbGxlZCBsdGM0MjYxLgogCiBjb25maWcgU0VOU09SU19MTTk1MjQxCi0JdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05NTI0MSBzZW5zb3IgY2hpcCIKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQxIGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBMTTk1MjQxIHNlbnNvciBjaGlwLgorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExNOTUyMzEgYW5kIExNOTUyNDEgc2Vuc29yCisJICBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05NTI0MS4KIAorY29uZmlnIFNFTlNPUlNfTE05NTI0NQorCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTUyNDUgc2Vuc29yIGNoaXAiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExNOTUyNDUgc2Vuc29yIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyNDUuCisKIGNvbmZpZyBTRU5TT1JTX01BWDExMTEKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTExMSBNdWx0aWNoYW5uZWwsIFNlcmlhbCA4LWJpdCBBREMgY2hpcCIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKQEAgLTczNiw2ICs3NDYsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG1heDE2MTkuCiAKK2NvbmZpZyBTRU5TT1JTX01BWDE2NjgKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYMTY2OCBhbmQgY29tcGF0aWJsZXMiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE1BWDE2NjgsIE1BWDE5ODkgYW5kCisJICBNQVgxODA1IGNoaXBzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBtYXgxNjY4LgorCiBjb25maWcgU0VOU09SU19NQVg2NjM5CiAJdHJpc3RhdGUgIk1heGltIE1BWDY2Mzkgc2Vuc29yIGNoaXAiCiAJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCkBAIC03NjcsNiArNzg3LDIwIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBtYXg2NjUwLgogCitjb25maWcgU0VOU09SU19OVENfVEhFUk1JU1RPUgorCXRyaXN0YXRlICJOVEMgdGhlcm1pc3RvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTlRDIHRoZXJtaXN0b3JzIHNlbnNvciByZWFkaW5nIGFuZCBpdHMKKwkgIGludGVycHJldGF0aW9uLiBUaGUgZHJpdmVyIGNhbiBhbHNvIG1vbml0b3IgdGhlIHRlbXBlcmF0dXJlIGFuZAorCSAgc2VuZCBub3RpZmljYXRpb25zIGFib3V0IHRoZSB0ZW1wZXJhdHVyZS4KKworCSAgQ3VycmVudGx5LCB0aGlzIGRyaXZlciBzdXBwb3J0cworCSAgTkNQMTVXQjQ3MywgTkNQMThXQjQ3MywgTkNQMjFXQjQ3MywgTkNQMDNXQjQ3MywgYW5kIE5DUDE1V0wzMzMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG50Yy10aGVybWlzdG9yLgorCiBjb25maWcgU0VOU09SU19QQzg3MzYwCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzM2MCBmYW1pbHkiCiAJc2VsZWN0IEhXTU9OX1ZJRApAQCAtODA3LDkyICs4NDEsNyBAQAogCSAgVGhlc2UgZGV2aWNlcyBhcmUgaGFyZCB0byBkZXRlY3QgYW5kIHJhcmVseSBmb3VuZCBvbiBtYWluc3RyZWFtCiAJICBoYXJkd2FyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBQTUJVUwotCXRyaXN0YXRlICJQTUJ1cyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgUE1CdXMgc3VwcG9ydC4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCBwbWJ1c19jb3JlLgotCi1pZiBQTUJVUwotCi1jb25maWcgU0VOU09SU19QTUJVUwotCXRyaXN0YXRlICJHZW5lcmljIFBNQnVzIGRldmljZXMiCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgZ2VuZXJpYwotCSAgUE1CdXMgZGV2aWNlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBCTVI0NTAsIEJNUjQ1MSwgQk1SNDUzLAotCSAgQk1SNDU0LCBhbmQgTFRDMjk3OC4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCBwbWJ1cy4KLQotY29uZmlnIFNFTlNPUlNfQURNMTI3NQotCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRE0xMjc1IgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIEFuYWxvZwotCSAgRGV2aWNlcyBBRE0xMjc1IEhvdC1Td2FwIENvbnRyb2xsZXIgYW5kIERpZ2l0YWwgUG93ZXIgTW9uaXRvci4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCBhZG0xMjc1LgotCi1jb25maWcgU0VOU09SU19NQVgxNjA2NAotCXRyaXN0YXRlICJNYXhpbSBNQVgxNjA2NCIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0IGZvciBNYXhpbQotCSAgTUFYMTYwNjQuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCi0JICBiZSBjYWxsZWQgbWF4MTYwNjQuCi0KLWNvbmZpZyBTRU5TT1JTX01BWDM0NDQwCi0JdHJpc3RhdGUgIk1heGltIE1BWDM0NDQwL01BWDM0NDQxIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIE1heGltCi0JICBNQVgzNDQ0MCBhbmQgTUFYMzQ0NDEuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCi0JICBiZSBjYWxsZWQgbWF4MzQ0NDAuCi0KLWNvbmZpZyBTRU5TT1JTX01BWDg2ODgKLQl0cmlzdGF0ZSAiTWF4aW0gTUFYODY4OCIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0IGZvciBNYXhpbQotCSAgTUFYODY4OC4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCBtYXg4Njg4LgotCi1jb25maWcgU0VOU09SU19VQ0Q5MDAwCi0JdHJpc3RhdGUgIlRJIFVDRDkwMTIwLCBVQ0Q5MDEyNCwgVUNEOTA5MCwgVUNEOTA5MTAiCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgVEkKLQkgIFVDRDkwMTIwLCBVQ0Q5MDEyNCwgVUNEOTA5MCwgVUNEOTA5MTAgU2VxdWVuY2VyIGFuZCBTeXN0ZW0gSGVhbHRoCi0JICBDb250cm9sbGVycy4KLQotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKLQkgIGJlIGNhbGxlZCB1Y2Q5MDAwLgotCi1jb25maWcgU0VOU09SU19VQ0Q5MjAwCi0JdHJpc3RhdGUgIlRJIFVDRDkyMjAsIFVDRDkyMjIsIFVDRDkyMjQsIFVDRDkyNDAsIFVDRDkyNDQsIFVDRDkyNDYsIFVDRDkyNDgiCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgVEkKLQkgIFVDRDkyMjAsIFVDRDkyMjIsIFVDRDkyMjQsIFVDRDkyNDAsIFVDRDkyNDQsIFVDRDkyNDYsIGFuZCBVQ0Q5MjQ4Ci0JICBEaWdpdGFsIFBXTSBTeXN0ZW0gQ29udHJvbGxlcnMuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCi0JICBiZSBjYWxsZWQgdWNkOTIwMC4KLQotZW5kaWYgIyBQTUJVUworc291cmNlIGRyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZwogCiBjb25maWcgU0VOU09SU19TSFQxNQogCXRyaXN0YXRlICJTZW5zaXJvbiBodW1pZGl0eSBhbmQgdGVtcGVyYXR1cmUgc2Vuc29ycy4gU0hUMTUgYW5kIGNvbXBhdC4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCBkNzk5NWExLi4zYzljY2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTgwLDYgKzgwLDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0xNOTIpCSs9IGxtOTIubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE05MykJKz0gbG05My5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTk1MjQxKQkrPSBsbTk1MjQxLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0xNOTUyNDUpCSs9IGxtOTUyNDUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDNDE1MSkJKz0gbHRjNDE1MS5vCiBvYmotJChDT05GSUdfU0VOU09SU19MVEM0MjE1KQkrPSBsdGM0MjE1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xUQzQyNDUpCSs9IGx0YzQyNDUubwpAQCAtODcsMTAgKzg4LDEyIEBACiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxMTExKQkrPSBtYXgxMTExLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDE2MDY1KQkrPSBtYXgxNjA2NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxNjE5KQkrPSBtYXgxNjE5Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX01BWDE2NjgpCSs9IG1heDE2Njgubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYNjYzOSkJKz0gbWF4NjYzOS5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVg2NjQyKQkrPSBtYXg2NjQyLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDY2NTApCSs9IG1heDY2NTAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUMxMzc4M19BREMpKz0gbWMxMzc4My1hZGMubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTlRDX1RIRVJNSVNUT1IpCSs9IG50Y190aGVybWlzdG9yLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODczNjApCSs9IHBjODczNjAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzQyNykJKz0gcGM4NzQyNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQ0Y4NTkxKQkrPSBwY2Y4NTkxLm8KQEAgLTEyMSwxNSArMTI0LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX1dNODMxWCkJKz0gd204MzF4LWh3bW9uLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1dNODM1MCkJKz0gd204MzUwLWh3bW9uLm8KIAotIyBQTUJ1cyBkcml2ZXJzCi1vYmotJChDT05GSUdfUE1CVVMpCQkrPSBwbWJ1c19jb3JlLm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BNQlVTKQkrPSBwbWJ1cy5vCi1vYmotJChDT05GSUdfU0VOU09SU19BRE0xMjc1KQkrPSBhZG0xMjc1Lm8KLW9iai0kKENPTkZJR19TRU5TT1JTX01BWDE2MDY0KQkrPSBtYXgxNjA2NC5vCi1vYmotJChDT05GSUdfU0VOU09SU19NQVgzNDQ0MCkJKz0gbWF4MzQ0NDAubwotb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYODY4OCkJKz0gbWF4ODY4OC5vCi1vYmotJChDT05GSUdfU0VOU09SU19VQ0Q5MDAwKQkrPSB1Y2Q5MDAwLm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1VDRDkyMDApCSs9IHVjZDkyMDAubworb2JqLSQoQ09ORklHX1BNQlVTKQkJKz0gcG1idXMvCiAKIGNjZmxhZ3MtJChDT05GSUdfSFdNT05fREVCVUdfQ0hJUCkgOj0gLURERUJVRwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKaW5kZXggMDA3MGQ1NC4uNDExMjU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwpAQCAtNDQsNyArNDQsOSBAQAogI2RlZmluZSBCQVNFX1NZU0ZTX0FUVFJfTk8JMgkvKiBTeXNmcyBCYXNlIGF0dHIgbm8gZm9yIGNvcmV0ZW1wICovCiAjZGVmaW5lIE5VTV9SRUFMX0NPUkVTCQkxNgkvKiBOdW1iZXIgb2YgUmVhbCBjb3JlcyBwZXIgY3B1ICovCiAjZGVmaW5lIENPUkVURU1QX05BTUVfTEVOR1RICTE3CS8qIFN0cmluZyBMZW5ndGggb2YgYXR0cnMgKi8KLSNkZWZpbmUgTUFYX0FUVFJTCQk1CS8qIE1heGltdW0gbm8gb2YgcGVyLWNvcmUgYXR0cnMgKi8KKyNkZWZpbmUgTUFYX0NPUkVfQVRUUlMJCTQJLyogTWF4aW11bSBubyBvZiBiYXNpYyBhdHRycyAqLworI2RlZmluZSBNQVhfVEhSRVNIX0FUVFJTCTMJLyogTWF4aW11bSBubyBvZiBUaHJlc2hvbGQgYXR0cnMgKi8KKyNkZWZpbmUgVE9UQUxfQVRUUlMJCShNQVhfQ09SRV9BVFRSUyArIE1BWF9USFJFU0hfQVRUUlMpCiAjZGVmaW5lIE1BWF9DT1JFX0RBVEEJCShOVU1fUkVBTF9DT1JFUyArIEJBU0VfU1lTRlNfQVRUUl9OTykKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTY3LDYgKzY5LDkgQEAKICAqCQlUaGlzIHZhbHVlIGlzIHBhc3NlZCBhcyAiaWQiIGZpZWxkIHRvIHJkbXNyL3dybXNyIGZ1bmN0aW9ucy4KICAqIEBzdGF0dXNfcmVnOiBPbmUgb2YgSUEzMl9USEVSTV9TVEFUVVMgb3IgSUEzMl9QQUNLQUdFX1RIRVJNX1NUQVRVUywKICAqCQlmcm9tIHdoZXJlIHRoZSB0ZW1wZXJhdHVyZSB2YWx1ZXMgc2hvdWxkIGJlIHJlYWQuCisgKiBAaW50cnB0X3JlZzogT25lIG9mIElBMzJfVEhFUk1fSU5URVJSVVBUIG9yIElBMzJfUEFDS0FHRV9USEVSTV9JTlRFUlJVUFQsCisgKgkJZnJvbSB3aGVyZSB0aGUgdGhyZXNob2xkcyBhcmUgcmVhZC4KKyAqIEBhdHRyX3NpemU6ICBUb3RhbCBudW1iZXIgb2YgcHJlLWNvcmUgYXR0cnMgZGlzcGxheWVkIGluIHRoZSBzeXNmcy4KICAqIEBpc19wa2dfZGF0YTogSWYgdGhpcyBpcyAxLCB0aGUgdGVtcF9kYXRhIGhvbGRzIHBrZ3RlbXAgZGF0YS4KICAqCQlPdGhlcndpc2UsIHRlbXBfZGF0YSBob2xkcyBjb3JldGVtcCBkYXRhLgogICogQHZhbGlkOiBJZiB0aGlzIGlzIDEsIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGlzIHZhbGlkLgpAQCAtNzQsMTUgKzc5LDE4IEBACiBzdHJ1Y3QgdGVtcF9kYXRhIHsKIAlpbnQgdGVtcDsKIAlpbnQgdHRhcmdldDsKKwlpbnQgdG1pbjsKIAlpbnQgdGptYXg7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1MzIgY3B1X2NvcmVfaWQ7CiAJdTMyIHN0YXR1c19yZWc7CisJdTMyIGludHJwdF9yZWc7CisJaW50IGF0dHJfc2l6ZTsKIAlib29sIGlzX3BrZ19kYXRhOwogCWJvb2wgdmFsaWQ7Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkX2F0dHJzW01BWF9BVFRSU107Ci0JY2hhciBhdHRyX25hbWVbTUFYX0FUVFJTXVtDT1JFVEVNUF9OQU1FX0xFTkdUSF07CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkX2F0dHJzW1RPVEFMX0FUVFJTXTsKKwljaGFyIGF0dHJfbmFtZVtUT1RBTF9BVFRSU11bQ09SRVRFTVBfTkFNRV9MRU5HVEhdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIH07CiAKQEAgLTEzNSw2ICsxNDMsMTkgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGVheCA+PiA1KSAmIDEpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X21heF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwl1MzIgZWF4LCBlZHg7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0ZW1wX2RhdGEgKnRkYXRhID0gcGRhdGEtPmNvcmVfZGF0YVthdHRyLT5pbmRleF07CisKKwlyZG1zcl9vbl9jcHUodGRhdGEtPmNwdSwgdGRhdGEtPnN0YXR1c19yZWcsICZlYXgsICZlZHgpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKGVheCAmIFRIRVJNX1NUQVRVU19USFJFU0hPTEQxKSk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGptYXgoc3RydWN0IGRldmljZSAqZGV2LAogCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTE1Myw2ICsxNzQsODMgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGRhdGEtPmNvcmVfZGF0YVthdHRyLT5pbmRleF0tPnR0YXJnZXQpOwogfQogCitzdGF0aWMgc3NpemVfdCBzdG9yZV90dGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHRlbXBfZGF0YSAqdGRhdGEgPSBwZGF0YS0+Y29yZV9kYXRhW2F0dHItPmluZGV4XTsKKwl1MzIgZWF4LCBlZHg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGRpZmY7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUSEVSTV9NQVNLX1RIUkVTSE9MRDEgaXMgNyBiaXRzIHdpZGUuIFZhbHVlcyBhcmUgZW50ZXJlZCBpbiB0ZXJtcworCSAqIG9mIG1pbGxpIGRlZ3JlZSBjZWxzaXVzLiBIZW5jZSBkb24ndCBhY2NlcHQgdmFsID4gKDEyNyAqIDEwMDApCisJICovCisJaWYgKHZhbCA+IHRkYXRhLT50am1heCB8fCB2YWwgPiAxMjcwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJZGlmZiA9ICh0ZGF0YS0+dGptYXggLSB2YWwpIC8gMTAwMDsKKworCW11dGV4X2xvY2soJnRkYXRhLT51cGRhdGVfbG9jayk7CisJcmRtc3Jfb25fY3B1KHRkYXRhLT5jcHUsIHRkYXRhLT5pbnRycHRfcmVnLCAmZWF4LCAmZWR4KTsKKwllYXggPSAoZWF4ICYgflRIRVJNX01BU0tfVEhSRVNIT0xEMSkgfAorCQkJCShkaWZmIDw8IFRIRVJNX1NISUZUX1RIUkVTSE9MRDEpOworCXdybXNyX29uX2NwdSh0ZGF0YS0+Y3B1LCB0ZGF0YS0+aW50cnB0X3JlZywgZWF4LCBlZHgpOworCXRkYXRhLT50dGFyZ2V0ID0gdmFsOworCW11dGV4X3VubG9jaygmdGRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190bWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBwbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBkYXRhLT5jb3JlX2RhdGFbYXR0ci0+aW5kZXhdLT50bWluKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdG1pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCB0ZW1wX2RhdGEgKnRkYXRhID0gcGRhdGEtPmNvcmVfZGF0YVthdHRyLT5pbmRleF07CisJdTMyIGVheCwgZWR4OworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBkaWZmOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVEhFUk1fTUFTS19USFJFU0hPTEQwIGlzIDcgYml0cyB3aWRlLiBWYWx1ZXMgYXJlIGVudGVyZWQgaW4gdGVybXMKKwkgKiBvZiBtaWxsaSBkZWdyZWUgY2Vsc2l1cy4gSGVuY2UgZG9uJ3QgYWNjZXB0IHZhbCA+ICgxMjcgKiAxMDAwKQorCSAqLworCWlmICh2YWwgPiB0ZGF0YS0+dGptYXggfHwgdmFsID4gMTI3MDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpZmYgPSAodGRhdGEtPnRqbWF4IC0gdmFsKSAvIDEwMDA7CisKKwltdXRleF9sb2NrKCZ0ZGF0YS0+dXBkYXRlX2xvY2spOworCXJkbXNyX29uX2NwdSh0ZGF0YS0+Y3B1LCB0ZGF0YS0+aW50cnB0X3JlZywgJmVheCwgJmVkeCk7CisJZWF4ID0gKGVheCAmIH5USEVSTV9NQVNLX1RIUkVTSE9MRDApIHwKKwkJCQkoZGlmZiA8PCBUSEVSTV9TSElGVF9USFJFU0hPTEQwKTsKKwl3cm1zcl9vbl9jcHUodGRhdGEtPmNwdSwgdGRhdGEtPmludHJwdF9yZWcsIGVheCwgZWR4KTsKKwl0ZGF0YS0+dG1pbiA9IHZhbDsKKwltdXRleF91bmxvY2soJnRkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzQ0LDIzICs0NDIsMzEgQEAKIAkJCQlpbnQgYXR0cl9ubykKIHsKIAlpbnQgZXJyLCBpOwotCXN0YXRpYyBzc2l6ZV90ICgqcmRfcHRyW01BWF9BVFRSU10pIChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RhdGljIHNzaXplX3QgKCpyZF9wdHJbVE9UQUxfQVRUUlNdKSAoc3RydWN0IGRldmljZSAqZGV2LAogCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikgPSB7Ci0JCQlzaG93X2xhYmVsLCBzaG93X2NyaXRfYWxhcm0sIHNob3dfdHRhcmdldCwKLQkJCXNob3dfdGVtcCwgc2hvd190am1heCB9OwotCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tNQVhfQVRUUlNdID0geworCQkJc2hvd19sYWJlbCwgc2hvd19jcml0X2FsYXJtLCBzaG93X3RlbXAsIHNob3dfdGptYXgsCisJCQlzaG93X21heF9hbGFybSwgc2hvd190dGFyZ2V0LCBzaG93X3RtaW4gfTsKKwlzdGF0aWMgc3NpemVfdCAoKnJ3X3B0cltUT1RBTF9BVFRSU10pIChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQkJc2l6ZV90IGNvdW50KSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJc3RvcmVfdHRhcmdldCwgc3RvcmVfdG1pbiB9OworCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tUT1RBTF9BVFRSU10gPSB7CiAJCQkJCSJ0ZW1wJWRfbGFiZWwiLCAidGVtcCVkX2NyaXRfYWxhcm0iLAotCQkJCQkidGVtcCVkX21heCIsICJ0ZW1wJWRfaW5wdXQiLAotCQkJCQkidGVtcCVkX2NyaXQiIH07CisJCQkJCSJ0ZW1wJWRfaW5wdXQiLCAidGVtcCVkX2NyaXQiLAorCQkJCQkidGVtcCVkX21heF9hbGFybSIsICJ0ZW1wJWRfbWF4IiwKKwkJCQkJInRlbXAlZF9tYXhfaHlzdCIgfTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfQVRUUlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB0ZGF0YS0+YXR0cl9zaXplOyBpKyspIHsKIAkJc25wcmludGYodGRhdGEtPmF0dHJfbmFtZVtpXSwgQ09SRVRFTVBfTkFNRV9MRU5HVEgsIG5hbWVzW2ldLAogCQkJYXR0cl9ubyk7CiAJCXN5c2ZzX2F0dHJfaW5pdCgmdGRhdGEtPnNkX2F0dHJzW2ldLmRldl9hdHRyLmF0dHIpOwogCQl0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIuYXR0ci5uYW1lID0gdGRhdGEtPmF0dHJfbmFtZVtpXTsKIAkJdGRhdGEtPnNkX2F0dHJzW2ldLmRldl9hdHRyLmF0dHIubW9kZSA9IFNfSVJVR087CisJCWlmIChyd19wdHJbaV0pIHsKKwkJCXRkYXRhLT5zZF9hdHRyc1tpXS5kZXZfYXR0ci5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwkJCXRkYXRhLT5zZF9hdHRyc1tpXS5kZXZfYXR0ci5zdG9yZSA9IHJ3X3B0cltpXTsKKwkJfQogCQl0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIuc2hvdyA9IHJkX3B0cltpXTsKLQkJdGRhdGEtPnNkX2F0dHJzW2ldLmRldl9hdHRyLnN0b3JlID0gTlVMTDsKIAkJdGRhdGEtPnNkX2F0dHJzW2ldLmluZGV4ID0gYXR0cl9ubzsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRkYXRhLT5zZF9hdHRyc1tpXS5kZXZfYXR0cik7CiAJCWlmIChlcnIpCkBAIC0zNzQsMzggKzQ4MCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3R0YXJnZXQoX191OCBjcHVfbW9kZWwsIHN0cnVjdCB0ZW1wX2RhdGEgKnRkYXRhLAotCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCXUzMiBlYXgsIGVkeDsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0dGFyZ2V0IHZhbHVlLiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZQotCSAqIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlIGZyb20gTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUCi0JICogcmVnaXN0ZXIuIElmIElBMzJfVEVNUEVSQVRVUkVfVEFSR0VUIGlzIHN1cHBvcnRlZCwgdGhpcwotCSAqIHZhbHVlIHdpbGwgYmUgb3ZlciB3cml0dGVuIGJlbG93LgotCSAqIFRvIERvOiBQYXRjaCB0byBpbml0aWFsaXplIHR0YXJnZXQgZnJvbSBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQKLQkgKi8KLQl0ZGF0YS0+dHRhcmdldCA9IHRkYXRhLT50am1heCAtIDIwMDAwOwotCi0JLyoKLQkgKiBSZWFkIHRoZSBzdGlsbCB1bmRvY3VtZW50ZWQgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQuIEl0IGV4aXN0cwotCSAqIG9uIG9sZGVyIENQVXMgYnV0IG5vdCBpbiB0aGlzIHJlZ2lzdGVyLAotCSAqIEF0b21zIGRvbid0IGhhdmUgaXQgZWl0aGVyLgotCSAqLwotCWlmIChjcHVfbW9kZWwgPiAweGUgJiYgY3B1X21vZGVsICE9IDB4MWMpIHsKLQkJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUodGRhdGEtPmNwdSwKLQkJCQlNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZlYXgsICZlZHgpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfd2FybihkZXYsCi0JCQkiVW5hYmxlIHRvIHJlYWQgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgTVNSXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXRkYXRhLT50dGFyZ2V0ID0gdGRhdGEtPnRqbWF4IC0KLQkJCQkJKChlYXggPj4gOCkgJiAweGZmKSAqIDEwMDA7Ci0JCX0KLQl9Ci19CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNoa191Y29kZV92ZXJzaW9uKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC00NjQsOSArNTM4LDEyIEBACiAKIAl0ZGF0YS0+c3RhdHVzX3JlZyA9IHBrZ19mbGFnID8gTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMgOgogCQkJCQkJCU1TUl9JQTMyX1RIRVJNX1NUQVRVUzsKKwl0ZGF0YS0+aW50cnB0X3JlZyA9IHBrZ19mbGFnID8gTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9JTlRFUlJVUFQgOgorCQkJCQkJTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUOwogCXRkYXRhLT5pc19wa2dfZGF0YSA9IHBrZ19mbGFnOwogCXRkYXRhLT5jcHUgPSBjcHU7CiAJdGRhdGEtPmNwdV9jb3JlX2lkID0gVE9fQ09SRV9JRChjcHUpOworCXRkYXRhLT5hdHRyX3NpemUgPSBNQVhfQ09SRV9BVFRSUzsKIAltdXRleF9pbml0KCZ0ZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiB0ZGF0YTsKIH0KQEAgLTUxNiw3ICs1OTMsMjIgQEAKIAllbHNlCiAJCXRkYXRhLT50am1heCA9IGdldF90am1heChjLCBjcHUsICZwZGV2LT5kZXYpOwogCi0JdXBkYXRlX3R0YXJnZXQoYy0+eDg2X21vZGVsLCB0ZGF0YSwgJnBkZXYtPmRldik7CisJLyoKKwkgKiBUZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIGludHJwdCByZWdpc3Rlci4gSWYgc28sIGluY3JlYXNlIHRoZQorCSAqICdzaXplJyBlbm91Z2ggdG8gaGF2ZSB0dGFyZ2V0L3RtaW4vbWF4X2FsYXJtIGludGVyZmFjZXMuCisJICogSW5pdGlhbGl6ZSB0dGFyZ2V0IHdpdGggYml0cyAxNjoyMiBvZiBNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQKKwkgKi8KKwllcnIgPSByZG1zcl9zYWZlX29uX2NwdShjcHUsIHRkYXRhLT5pbnRycHRfcmVnLCAmZWF4LCAmZWR4KTsKKwlpZiAoIWVycikgeworCQl0ZGF0YS0+YXR0cl9zaXplICs9IE1BWF9USFJFU0hfQVRUUlM7CisJCXRkYXRhLT50bWluID0gdGRhdGEtPnRqbWF4IC0KKwkJCSAgICAgICgoZWF4ICYgVEhFUk1fTUFTS19USFJFU0hPTEQwKSA+PgorCQkJICAgICAgIFRIRVJNX1NISUZUX1RIUkVTSE9MRDApICogMTAwMDsKKwkJdGRhdGEtPnR0YXJnZXQgPSB0ZGF0YS0+dGptYXggLQorCQkJCSAoKGVheCAmIFRIRVJNX01BU0tfVEhSRVNIT0xEMSkgPj4KKwkJCQkgIFRIRVJNX1NISUZUX1RIUkVTSE9MRDEpICogMTAwMDsKKwl9CisKIAlwZGF0YS0+Y29yZV9kYXRhW2F0dHJfbm9dID0gdGRhdGE7CiAKIAkvKiBDcmVhdGUgc3lzZnMgaW50ZXJmYWNlcyAqLwpAQCAtNTUzLDcgKzY0NSw3IEBACiAJc3RydWN0IHRlbXBfZGF0YSAqdGRhdGEgPSBwZGF0YS0+Y29yZV9kYXRhW2luZHhdOwogCiAJLyogUmVtb3ZlIHRoZSBzeXNmcyBhdHRyaWJ1dGVzICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9BVFRSUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCB0ZGF0YS0+YXR0cl9zaXplOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ0ZGF0YS0+c2RfYXR0cnNbaV0uZGV2X2F0dHIpOwogCiAJa2ZyZWUocGRhdGEtPmNvcmVfZGF0YVtpbmR4XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2k1a19hbWIuYyBiL2RyaXZlcnMvaHdtb24vaTVrX2FtYi5jCmluZGV4IGM0YzQwYmUuLmQyMmYyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaTVrX2FtYi5jCisrKyBiL2RyaXZlcnMvaHdtb24vaTVrX2FtYi5jCkBAIC0xMTQsNyArMTE0LDYgQEAKIAl2b2lkIF9faW9tZW0gKmFtYl9tbWlvOwogCXN0cnVjdCBpNWtfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnM7CiAJdW5zaWduZWQgaW50IG51bV9hdHRyczsKLQl1bnNpZ25lZCBsb25nIGNoaXBzZXRfaWQ7CiB9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKQEAgLTQ0NCw4ICs0NDMsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkYXRhLT5jaGlwc2V0X2lkID0gZGV2aWQ7Ci0KIAlyZXMgPSAwOwogb3V0OgogCXBjaV9kZXZfcHV0KHBjaWRldik7CkBAIC00NzgsMjMgKzQ3NSwxMyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGk1a19jaGFubmVsX3BjaV9pZChzdHJ1Y3QgaTVrX2FtYl9kYXRhICpkYXRhLAotCQkJCQl1bnNpZ25lZCBsb25nIGNoYW5uZWwpCi17Ci0Jc3dpdGNoIChkYXRhLT5jaGlwc2V0X2lkKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzUwMDBfRVJSOgotCQlyZXR1cm4gUENJX0RFVklDRV9JRF9JTlRFTF81MDAwX0ZCRDAgKyBjaGFubmVsOwotCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF81NDAwX0VSUjoKLQkJcmV0dXJuIFBDSV9ERVZJQ0VfSURfSU5URUxfNTQwMF9GQkQwICsgY2hhbm5lbDsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNoaXBzZXRfaWRzW10gPSB7Ci0JUENJX0RFVklDRV9JRF9JTlRFTF81MDAwX0VSUiwKLQlQQ0lfREVWSUNFX0lEX0lOVEVMXzU0MDBfRVJSLAotCTAKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZXJyOworCXVuc2lnbmVkIGxvbmcgZmJkMDsKK30gY2hpcHNldF9pZHNbXSBfX2RldmluaXRkYXRhICA9IHsKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfNTAwMF9FUlIsIFBDSV9ERVZJQ0VfSURfSU5URUxfNTAwMF9GQkQwIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMXzU0MDBfRVJSLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzU0MDBfRkJEMCB9LAorCXsgMCwgMCB9CiB9OwogCiAjaWZkZWYgTU9EVUxFCkBAIC01MTAsOCArNDk3LDcgQEAKIHsKIAlzdHJ1Y3QgaTVrX2FtYl9kYXRhICpkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzbzsKLQlpbnQgaTsKLQlpbnQgcmVzID0gLUVOT0RFVjsKKwlpbnQgaSwgcmVzOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQpAQCAtNTIwLDIyICs1MDYsMjIgQEAKIAkvKiBGaWd1cmUgb3V0IHdoZXJlIHRoZSBBTUIgcmVnaXN0ZXJzIGxpdmUgKi8KIAlpID0gMDsKIAlkbyB7Ci0JCXJlcyA9IGk1a19maW5kX2FtYl9yZWdpc3RlcnMoZGF0YSwgY2hpcHNldF9pZHNbaV0pOworCQlyZXMgPSBpNWtfZmluZF9hbWJfcmVnaXN0ZXJzKGRhdGEsIGNoaXBzZXRfaWRzW2ldLmVycik7CisJCWlmIChyZXMgPT0gMCkKKwkJCWJyZWFrOwogCQlpKys7Ci0JfSB3aGlsZSAocmVzICYmIGNoaXBzZXRfaWRzW2ldKTsKKwl9IHdoaWxlIChjaGlwc2V0X2lkc1tpXS5lcnIpOwogCiAJaWYgKHJlcykKIAkJZ290byBlcnI7CiAKIAkvKiBDb3B5IHRoZSBESU1NIHByZXNlbmNlIG1hcCBmb3IgdGhlIGZpcnN0IHR3byBjaGFubmVscyAqLwotCXJlcyA9IGk1a19jaGFubmVsX3Byb2JlKCZkYXRhLT5hbWJfcHJlc2VudFswXSwKLQkJCQlpNWtfY2hhbm5lbF9wY2lfaWQoZGF0YSwgMCkpOworCXJlcyA9IGk1a19jaGFubmVsX3Byb2JlKCZkYXRhLT5hbWJfcHJlc2VudFswXSwgY2hpcHNldF9pZHNbaV0uZmJkMCk7CiAJaWYgKHJlcykKIAkJZ290byBlcnI7CiAKIAkvKiBDb3B5IHRoZSBESU1NIHByZXNlbmNlIG1hcCBmb3IgdGhlIG9wdGlvbmFsIHNlY29uZCB0d28gY2hhbm5lbHMgKi8KLQlpNWtfY2hhbm5lbF9wcm9iZSgmZGF0YS0+YW1iX3ByZXNlbnRbMl0sCi0JCQkgIGk1a19jaGFubmVsX3BjaV9pZChkYXRhLCAxKSk7CisJaTVrX2NoYW5uZWxfcHJvYmUoJmRhdGEtPmFtYl9wcmVzZW50WzJdLCBjaGlwc2V0X2lkc1tpXS5mYmQwICsgMSk7CiAKIAkvKiBTZXQgdXAgcmVzb3VyY2UgcmVnaW9ucyAqLwogCXJlc28gPSByZXF1ZXN0X21lbV9yZWdpb24oZGF0YS0+YW1iX2Jhc2UsIGRhdGEtPmFtYl9sZW4sIERSVk5BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1hZW0uYyBiL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKaW5kZXggMWE0MDljNS4uYzMxNjI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1hZW0uYworKysgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCkBAIC00MzIsMTMgKzQzMiwxNSBAQAogCWFlbV9zZW5kX21lc3NhZ2UoaXBtaSk7CiAKIAlyZXMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlwbWktPnJlYWRfY29tcGxldGUsIElQTUlfVElNRU9VVCk7Ci0JaWYgKCFyZXMpCi0JCXJldHVybiAtRVRJTUVET1VUOworCWlmICghcmVzKSB7CisJCXJlcyA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChpcG1pLT5yeF9yZXN1bHQgfHwgaXBtaS0+cnhfbXNnX2xlbiAhPSByc19zaXplIHx8CiAJICAgIG1lbWNtcCgmcnNfcmVzcC0+aWQsICZzeXN0ZW1feF9pZCwgc2l6ZW9mKHN5c3RlbV94X2lkKSkpIHsKLQkJa2ZyZWUocnNfcmVzcCk7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXMgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKIAl9CiAKIAlzd2l0Y2ggKHNpemUpIHsKQEAgLTQ2Myw4ICs0NjUsMTEgQEAKIAkJYnJlYWs7CiAJfQogCX0KKwlyZXMgPSAwOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJa2ZyZWUocnNfcmVzcCk7CisJcmV0dXJuIHJlczsKIH0KIAogLyogVXBkYXRlIEFFTSBlbmVyZ3kgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IDJmOTRmOTUuLjkwZGRiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC01NCw2ICs1NCw5IEBACiAgKiBhbmQgZXh0ZW5kZWQgbW9kZS4gVGhleSBhcmUgbW9zdGx5IGNvbXBhdGlibGUgd2l0aCBMTTkwIGV4Y2VwdCBmb3IgYSBkYXRhCiAgKiBmb3JtYXQgZGlmZmVyZW5jZSBmb3IgdGhlIHRlbXBlcmF0dXJlIHZhbHVlIHJlZ2lzdGVycy4KICAqCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBTQTU2MDA0IGZyb20gUGhpbGlwcy4gVGhpcyBkZXZpY2UgaXMKKyAqIHBpbi1jb21wYXRpYmxlIHdpdGggdGhlIExNODYsIHRoZSBFRC9FRFAgcGFydHMgYXJlIGFsc28gYWRkcmVzcy1jb21wYXRpYmxlLgorICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCiAgKiBjb25jZXJuIGFsbCBzdXBwb3J0ZWQgY2hpcHNldHMsIHVubGVzcyBtZW50aW9uZWQgb3RoZXJ3aXNlLgpAQCAtOTYsMTMgKzk5LDE1IEBACiAgKiBNQVg2NjU5IGNhbiBoYXZlIGFkZHJlc3MgMHg0YywgMHg0ZCBvciAweDRlLgogICogTUFYNjY4MCBhbmQgTUFYNjY4MSBjYW4gaGF2ZSBhZGRyZXNzIDB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsCiAgKiAweDRjLCAweDRkIG9yIDB4NGUuCisgKiBTQTU2MDA0IGNhbiBoYXZlIGFkZHJlc3MgMHg0OCB0aHJvdWdoIDB4NEYuCiAgKi8KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OworCTB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsCisJMHg0ZCwgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKIAogZW51bSBjaGlwcyB7IGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIG1heDY2NTksIGFkdDc0NjEsIG1heDY2ODAsCi0JbWF4NjY0NiwgdzgzbDc3MSwgbWF4NjY5NiB9OworCW1heDY2NDYsIHc4M2w3NzEsIG1heDY2OTYsIHNhNTYwMDQgfTsKIAogLyoKICAqIFRoZSBMTTkwIHJlZ2lzdGVycwpAQCAtMTUyLDYgKzE1NywxMCBAQAogI2RlZmluZSBNQVg2NjU5X1JFR19SX0xPQ0FMX0VNRVJHCTB4MTcKICNkZWZpbmUgTUFYNjY1OV9SRUdfV19MT0NBTF9FTUVSRwkweDE3CiAKKy8qICBTQTU2MDA0IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFNBNTYwMDRfUkVHX1JfTE9DQUxfVEVNUEwgMHgyMgorCiAjZGVmaW5lIExNOTBfREVGX0NPTlZSQVRFX1JWQUwJNgkvKiBEZWYgY29udmVyc2lvbiByYXRlIHJlZ2lzdGVyIHZhbHVlICovCiAjZGVmaW5lIExNOTBfTUFYX0NPTlZSQVRFX01TCTE2MDAwCS8qIE1heGltdW0gY29udmVyc2lvbiByYXRlIGluIG1zICovCiAKQEAgLTE2MSw3ICsxNzAsNiBAQAogI2RlZmluZSBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQJKDEgPDwgMCkgLyogQURUNzQ2MSBleHRlbmRlZCBtb2RlCSovCiAvKiBEZXZpY2UgZmVhdHVyZXMgKi8KICNkZWZpbmUgTE05MF9IQVZFX09GRlNFVAkoMSA8PCAxKSAvKiB0ZW1wZXJhdHVyZSBvZmZzZXQgcmVnaXN0ZXIJKi8KLSNkZWZpbmUgTE05MF9IQVZFX0xPQ0FMX0VYVAkoMSA8PCAyKSAvKiBleHRlbmRlZCBsb2NhbCB0ZW1wZXJhdHVyZQkqLwogI2RlZmluZSBMTTkwX0hBVkVfUkVNX0xJTUlUX0VYVAkoMSA8PCAzKSAvKiBleHRlbmRlZCByZW1vdGUgbGltaXQJKi8KICNkZWZpbmUgTE05MF9IQVZFX0VNRVJHRU5DWQkoMSA8PCA0KSAvKiAzcmQgdXBwZXIgKGVtZXJnZW5jeSkgbGltaXQJKi8KICNkZWZpbmUgTE05MF9IQVZFX0VNRVJHRU5DWV9BTEFSTSAoMSA8PCA1KS8qIGVtZXJnZW5jeSBhbGFybQkJKi8KQEAgLTE5Miw2ICsyMDAsNyBAQAogCXsgIm1heDY2OTYiLCBtYXg2Njk2IH0sCiAJeyAibmN0MTAwOCIsIGFkdDc0NjEgfSwKIAl7ICJ3ODNsNzcxIiwgdzgzbDc3MSB9LAorCXsgInNhNTYwMDQiLCBzYTU2MDA0IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtOTBfaWQpOwpAQCAtMjA0LDYgKzIxMyw3IEBACiAJdTE2IGFsZXJ0X2FsYXJtczsJLyogV2hpY2ggYWxhcm0gYml0cyB0cmlnZ2VyIEFMRVJUIyAqLwogCQkJCS8qIFVwcGVyIDggYml0cyBmb3IgbWF4NjY5NS85NiAqLwogCXU4IG1heF9jb252cmF0ZTsJLyogTWF4aW11bSBjb252ZXJzaW9uIHJhdGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCByZWdfbG9jYWxfZXh0OwkvKiBFeHRlbmRlZCBsb2NhbCB0ZW1wIHJlZ2lzdGVyIChvcHRpb25hbCkgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbG05MF9wYXJhbXMgbG05MF9wYXJhbXNbXSA9IHsKQEAgLTIzNSwxOSArMjQ1LDIwIEBACiAJCS5tYXhfY29udnJhdGUgPSA5LAogCX0sCiAJW21heDY2NDZdID0gewotCQkuZmxhZ3MgPSBMTTkwX0hBVkVfTE9DQUxfRVhULAogCQkuYWxlcnRfYWxhcm1zID0gMHg3YywKIAkJLm1heF9jb252cmF0ZSA9IDYsCisJCS5yZWdfbG9jYWxfZXh0ID0gTUFYNjY1N19SRUdfUl9MT0NBTF9URU1QTCwKIAl9LAogCVttYXg2NjU3XSA9IHsKLQkJLmZsYWdzID0gTE05MF9IQVZFX0xPQ0FMX0VYVCwKIAkJLmFsZXJ0X2FsYXJtcyA9IDB4N2MsCiAJCS5tYXhfY29udnJhdGUgPSA4LAorCQkucmVnX2xvY2FsX2V4dCA9IE1BWDY2NTdfUkVHX1JfTE9DQUxfVEVNUEwsCiAJfSwKIAlbbWF4NjY1OV0gPSB7Ci0JCS5mbGFncyA9IExNOTBfSEFWRV9MT0NBTF9FWFQgfCBMTTkwX0hBVkVfRU1FUkdFTkNZLAorCQkuZmxhZ3MgPSBMTTkwX0hBVkVfRU1FUkdFTkNZLAogCQkuYWxlcnRfYWxhcm1zID0gMHg3YywKIAkJLm1heF9jb252cmF0ZSA9IDgsCisJCS5yZWdfbG9jYWxfZXh0ID0gTUFYNjY1N19SRUdfUl9MT0NBTF9URU1QTCwKIAl9LAogCVttYXg2NjgwXSA9IHsKIAkJLmZsYWdzID0gTE05MF9IQVZFX09GRlNFVCwKQEAgLTI1NSwxNiArMjY2LDIzIEBACiAJCS5tYXhfY29udnJhdGUgPSA3LAogCX0sCiAJW21heDY2OTZdID0gewotCQkuZmxhZ3MgPSBMTTkwX0hBVkVfTE9DQUxfRVhUIHwgTE05MF9IQVZFX0VNRVJHRU5DWQorCQkuZmxhZ3MgPSBMTTkwX0hBVkVfRU1FUkdFTkNZCiAJCSAgfCBMTTkwX0hBVkVfRU1FUkdFTkNZX0FMQVJNIHwgTE05MF9IQVZFX1RFTVAzLAogCQkuYWxlcnRfYWxhcm1zID0gMHgxODdjLAogCQkubWF4X2NvbnZyYXRlID0gNiwKKwkJLnJlZ19sb2NhbF9leHQgPSBNQVg2NjU3X1JFR19SX0xPQ0FMX1RFTVBMLAogCX0sCiAJW3c4M2w3NzFdID0gewogCQkuZmxhZ3MgPSBMTTkwX0hBVkVfT0ZGU0VUIHwgTE05MF9IQVZFX1JFTV9MSU1JVF9FWFQsCiAJCS5hbGVydF9hbGFybXMgPSAweDdjLAogCQkubWF4X2NvbnZyYXRlID0gOCwKIAl9LAorCVtzYTU2MDA0XSA9IHsKKwkJLmZsYWdzID0gTE05MF9IQVZFX09GRlNFVCB8IExNOTBfSEFWRV9SRU1fTElNSVRfRVhULAorCQkuYWxlcnRfYWxhcm1zID0gMHg3YiwKKwkJLm1heF9jb252cmF0ZSA9IDksCisJCS5yZWdfbG9jYWxfZXh0ID0gU0E1NjAwNF9SRUdfUl9MT0NBTF9URU1QTCwKKwl9LAogfTsKIAogLyoKQEAgLTI4Niw2ICszMDQsNyBAQAogCXUxNiBhbGVydF9hbGFybXM7CS8qIFdoaWNoIGFsYXJtIGJpdHMgdHJpZ2dlciBBTEVSVCMgKi8KIAkJCQkvKiBVcHBlciA4IGJpdHMgZm9yIG1heDY2OTUvOTYgKi8KIAl1OCBtYXhfY29udnJhdGU7CS8qIE1heGltdW0gY29udmVyc2lvbiByYXRlICovCisJdTggcmVnX2xvY2FsX2V4dDsJLyogbG9jYWwgZXh0ZW5zaW9uIHJlZ2lzdGVyIG9mZnNldCAqLwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwogCXM4IHRlbXA4WzhdOwkvKiAwOiBsb2NhbCBsb3cgbGltaXQKQEAgLTQ1Miw5ICs0NzEsOSBAQAogCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfQ1JJVCwgJmRhdGEtPnRlbXA4WzNdKTsKIAkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfVENSSVRfSFlTVCwgJmRhdGEtPnRlbXBfaHlzdCk7CiAKLQkJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9IQVZFX0xPQ0FMX0VYVCkgeworCQlpZiAoZGF0YS0+cmVnX2xvY2FsX2V4dCkgewogCQkJbG05MF9yZWFkMTYoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCi0JCQkJICAgIE1BWDY2NTdfUkVHX1JfTE9DQUxfVEVNUEwsCisJCQkJICAgIGRhdGEtPnJlZ19sb2NhbF9leHQsCiAJCQkJICAgICZkYXRhLT50ZW1wMTFbNF0pOwogCQl9IGVsc2UgewogCQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCkBAIC0xMDkyLDcgKzExMTEsNyBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CiAJaW50IGFkZHJlc3MgPSBuZXdfY2xpZW50LT5hZGRyOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwotCWludCBtYW5faWQsIGNoaXBfaWQsIHJlZ19jb25maWcxLCByZWdfY29udnJhdGU7CisJaW50IG1hbl9pZCwgY2hpcF9pZCwgcmVnX2NvbmZpZzEsIHJlZ19jb25maWcyLCByZWdfY29udnJhdGU7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTEwOCwxNSArMTEyNywxNiBAQAogCQkJCQkJTE05MF9SRUdfUl9DT05WUkFURSkpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoKGFkZHJlc3MgPT0gMHg0QyB8fCBhZGRyZXNzID09IDB4NEQpCi0JICYmIG1hbl9pZCA9PSAweDAxKSB7IC8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgKi8KLQkJaW50IHJlZ19jb25maWcyOwotCisJaWYgKG1hbl9pZCA9PSAweDAxIHx8IG1hbl9pZCA9PSAweDVDIHx8IG1hbl9pZCA9PSAweDQxKSB7CiAJCXJlZ19jb25maWcyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsCiAJCQkJCQlMTTkwX1JFR19SX0NPTkZJRzIpOwogCQlpZiAocmVnX2NvbmZpZzIgPCAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlCisJCXJlZ19jb25maWcyID0gMDsJLyogTWFrZSBjb21waWxlciBoYXBweSAqLwogCisJaWYgKChhZGRyZXNzID09IDB4NEMgfHwgYWRkcmVzcyA9PSAweDREKQorCSAmJiBtYW5faWQgPT0gMHgwMSkgeyAvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yICovCiAJCWlmICgocmVnX2NvbmZpZzEgJiAweDJBKSA9PSAweDAwCiAJCSAmJiAocmVnX2NvbmZpZzIgJiAweEY4KSA9PSAweDAwCiAJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwOSkgewpAQCAtMTI0NSwxMyArMTI2NSw2IEBACiAJfSBlbHNlCiAJaWYgKGFkZHJlc3MgPT0gMHg0QwogCSAmJiBtYW5faWQgPT0gMHg1QykgeyAvKiBXaW5ib25kL051dm90b24gKi8KLQkJaW50IHJlZ19jb25maWcyOwotCi0JCXJlZ19jb25maWcyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsCi0JCQkJCQlMTTkwX1JFR19SX0NPTkZJRzIpOwotCQlpZiAocmVnX2NvbmZpZzIgPCAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkJaWYgKChyZWdfY29uZmlnMSAmIDB4MkEpID09IDB4MDAKIAkJICYmIChyZWdfY29uZmlnMiAmIDB4RjgpID09IDB4MDApIHsKIAkJCWlmIChjaGlwX2lkID09IDB4MDEgLyogVzgzTDc3MVcvRyAqLwpAQCAtMTI2Myw2ICsxMjc2LDE1IEBACiAJCQkJbmFtZSA9ICJ3ODNsNzcxIjsKIAkJCX0KIAkJfQorCX0gZWxzZQorCWlmIChhZGRyZXNzID49IDB4NDggJiYgYWRkcmVzcyA8PSAweDRGCisJICYmIG1hbl9pZCA9PSAweEExKSB7IC8qICBOWFAgU2VtaWNvbmR1Y3Rvci9QaGlsaXBzICovCisJCWlmIChjaGlwX2lkID09IDB4MDAKKwkJICYmIChyZWdfY29uZmlnMSAmIDB4MkEpID09IDB4MDAKKwkJICYmIChyZWdfY29uZmlnMiAmIDB4RkUpID09IDB4MDAKKwkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA5KSB7CisJCQluYW1lID0gInNhNTYwMDQiOworCQl9CiAJfQogCiAJaWYgKCFuYW1lKSB7IC8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLwpAQCAtMTM2OCw2ICsxMzkwLDcgQEAKIAogCS8qIFNldCBjaGlwIGNhcGFiaWxpdGllcyAqLwogCWRhdGEtPmZsYWdzID0gbG05MF9wYXJhbXNbZGF0YS0+a2luZF0uZmxhZ3M7CisJZGF0YS0+cmVnX2xvY2FsX2V4dCA9IGxtOTBfcGFyYW1zW2RhdGEtPmtpbmRdLnJlZ19sb2NhbF9leHQ7CiAKIAkvKiBTZXQgbWF4aW11bSBjb252ZXJzaW9uIHJhdGUgKi8KIAlkYXRhLT5tYXhfY29udnJhdGUgPSBsbTkwX3BhcmFtc1tkYXRhLT5raW5kXS5tYXhfY29udnJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDEuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCmluZGV4IGQzYjQ2NGIuLjUxMzkwMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCkBAIC03NCw4ICs3NCw5IEBACiAjZGVmaW5lIFRUX09GRiAwCiAjZGVmaW5lIFRUX09OIDEKICNkZWZpbmUgVFRfTUFTSyA3Ci0jZGVmaW5lIE1BTlVGQUNUVVJFUl9JRCAweDAxCi0jZGVmaW5lIERFRkFVTFRfUkVWSVNJT04gMHhBNAorI2RlZmluZSBOQVRTRU1JX01BTl9JRAkweDAxCisjZGVmaW5lIExNOTUyMzFfQ0hJUF9JRAkweEExCisjZGVmaW5lIExNOTUyNDFfQ0hJUF9JRAkweEE0CiAKIHN0YXRpYyBjb25zdCB1OCBsbTk1MjQxX3JlZ19hZGRyZXNzW10gPSB7CiAJTE05NTI0MV9SRUdfUl9MT0NBTF9URU1QSCwKQEAgLTMzOCwyMCArMzM5LDI1IEBACiAJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXdfY2xpZW50LT5hZGFwdGVyOwotCWludCBhZGRyZXNzID0gbmV3X2NsaWVudC0+YWRkcjsKIAljb25zdCBjaGFyICpuYW1lOworCWludCBtZmdfaWQsIGNoaXBfaWQ7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9NQU5fSUQpCi0JICAgICA9PSBNQU5VRkFDVFVSRVJfSUQpCi0JICAgICYmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9DSElQX0lEKQotCQk9PSBERUZBVUxUX1JFVklTSU9OKSkgewotCQluYW1lID0gREVWTkFNRTsKLQl9IGVsc2UgewotCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJMTTk1MjQxIGRldGVjdGlvbiBmYWlsZWQgYXQgMHglMDJ4XG4iLAotCQkJYWRkcmVzcyk7CisJbWZnX2lkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDFfUkVHX1JfTUFOX0lEKTsKKwlpZiAobWZnX2lkICE9IE5BVFNFTUlfTUFOX0lEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNoaXBfaWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9DSElQX0lEKTsKKwlzd2l0Y2ggKGNoaXBfaWQpIHsKKwljYXNlIExNOTUyMzFfQ0hJUF9JRDoKKwkJbmFtZSA9ICJsbTk1MjMxIjsKKwkJYnJlYWs7CisJY2FzZSBMTTk1MjQxX0NISVBfSUQ6CisJCW5hbWUgPSAibG05NTI0MSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDMxLDcgKzQzNyw4IEBACiAKIC8qIERyaXZlciBkYXRhIChjb21tb24gdG8gYWxsIGNsaWVudHMpICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05NTI0MV9pZFtdID0gewotCXsgREVWTkFNRSwgMCB9LAorCXsgImxtOTUyMzEiLCAwIH0sCisJeyAibG05NTI0MSIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG05NTI0MV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDUuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTllNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2xtOTUyNDUuYwpAQCAtMCwwICsxLDU0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbGV4YW5kZXIgU3RlaW4gPGFsZXhhbmRlci5zdGVpbkBzeXN0ZWMtZWxlY3Ryb25pYy5jb20+CisgKgorICogVGhlIExNOTUyNDUgaXMgYSBzZW5zb3IgY2hpcCBtYWRlIGJ5IE5hdGlvbmFsIFNlbWljb25kdWN0b3JzLgorICogSXQgcmVwb3J0cyB1cCB0byB0d28gdGVtcGVyYXR1cmVzIChpdHMgb3duIHBsdXMgYW4gZXh0ZXJuYWwgb25lKS4KKyAqIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUgb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6CisgKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL2RzLmNnaS9MTS9MTTk1MjQ1LnBkZgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIGxtOTUyNDEuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCisjZGVmaW5lIERFVk5BTUUgImxtOTUyNDUiCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgxOSwgMHgyOSwgMHg0YywgMHg0ZCwgSTJDX0NMSUVOVF9FTkQgfTsKKworLyogTE05NTI0NSByZWdpc3RlcnMgKi8KKy8qIGdlbmVyYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIExNOTUyNDVfUkVHX1JXX0NPTkZJRzEJCTB4MDMKKyNkZWZpbmUgTE05NTI0NV9SRUdfUldfQ09OVkVSU19SQVRFCTB4MDQKKyNkZWZpbmUgTE05NTI0NV9SRUdfV19PTkVfU0hPVAkJMHgwRgorCisvKiBkaW9kZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIExNOTUyNDVfUkVHX1JXX0NPTkZJRzIJCTB4QkYKKyNkZWZpbmUgTE05NTI0NV9SRUdfUldfUkVNT1RFX09GRkgJMHgxMQorI2RlZmluZSBMTTk1MjQ1X1JFR19SV19SRU1PVEVfT0ZGTAkweDEyCisKKy8qIHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9TVEFUVVMxCQkweDAyCisjZGVmaW5lIExNOTUyNDVfUkVHX1JfU1RBVFVTMgkJMHgzMworCisvKiBsaW1pdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTE05NTI0NV9SRUdfUldfUkVNT1RFX09TX0xJTUlUCQkweDA3CisjZGVmaW5lIExNOTUyNDVfUkVHX1JXX0xPQ0FMX09TX1RDUklUX0xJTUlUCTB4MjAKKyNkZWZpbmUgTE05NTI0NV9SRUdfUldfUkVNT1RFX1RDUklUX0xJTUlUCTB4MTkKKyNkZWZpbmUgTE05NTI0NV9SRUdfUldfQ09NTU9OX0hZU1RFUkVTSVMJMHgyMQorCisvKiB0ZW1wZXJhdHVyZSBzaWduZWQgKi8KKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9MT0NBTF9URU1QSF9TCTB4MDAKKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9MT0NBTF9URU1QTF9TCTB4MzAKKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9SRU1PVEVfVEVNUEhfUwkweDAxCisjZGVmaW5lIExNOTUyNDVfUkVHX1JfUkVNT1RFX1RFTVBMX1MJMHgxMAorLyogdGVtcGVyYXR1cmUgdW5zaWduZWQgKi8KKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9SRU1PVEVfVEVNUEhfVQkweDMxCisjZGVmaW5lIExNOTUyNDVfUkVHX1JfUkVNT1RFX1RFTVBMX1UJMHgzMgorCisvKiBpZCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9NQU5fSUQJCTB4RkUKKyNkZWZpbmUgTE05NTI0NV9SRUdfUl9DSElQX0lECQkweEZGCisKKy8qIExNOTUyNDUgc3BlY2lmaWMgYml0ZmllbGRzICovCisjZGVmaW5lIENGR19TVE9QCQkweDQwCisjZGVmaW5lIENGR19SRU1PVEVfVENSSVRfTUFTSwkweDEwCisjZGVmaW5lIENGR19SRU1PVEVfT1NfTUFTSwkweDA4CisjZGVmaW5lIENGR19MT0NBTF9UQ1JJVF9NQVNLCTB4MDQKKyNkZWZpbmUgQ0ZHX0xPQ0FMX09TX01BU0sJMHgwMgorCisjZGVmaW5lIENGRzJfT1NfQTAJCTB4NDAKKyNkZWZpbmUgQ0ZHMl9ESU9ERV9GQVVMVF9PUwkweDIwCisjZGVmaW5lIENGRzJfRElPREVfRkFVTFRfVENSSVQJMHgxMAorI2RlZmluZSBDRkcyX1JFTU9URV9UVAkJMHgwOAorI2RlZmluZSBDRkcyX1JFTU9URV9GSUxURVJfRElTCTB4MDAKKyNkZWZpbmUgQ0ZHMl9SRU1PVEVfRklMVEVSX0VOCTB4MDYKKworLyogY29udmVyc2F0aW9uIHJhdGUgaW4gbXMgKi8KKyNkZWZpbmUgUkFURV9DUjAwNjMJMHgwMAorI2RlZmluZSBSQVRFX0NSMDM2NAkweDAxCisjZGVmaW5lIFJBVEVfQ1IxMDAwCTB4MDIKKyNkZWZpbmUgUkFURV9DUjI1MDAJMHgwMworCisjZGVmaW5lIFNUQVRVUzFfRElPREVfRkFVTFQJMHgwNAorI2RlZmluZSBTVEFUVVMxX1JUQ1JJVAkJMHgwMgorI2RlZmluZSBTVEFUVVMxX0xPQwkJMHgwMQorCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9JRAkJMHgwMQorI2RlZmluZSBERUZBVUxUX1JFVklTSU9OCTB4QjMKKworc3RhdGljIGNvbnN0IHU4IGxtOTUyNDVfcmVnX2FkZHJlc3NbXSA9IHsKKwlMTTk1MjQ1X1JFR19SX0xPQ0FMX1RFTVBIX1MsCisJTE05NTI0NV9SRUdfUl9MT0NBTF9URU1QTF9TLAorCUxNOTUyNDVfUkVHX1JfUkVNT1RFX1RFTVBIX1MsCisJTE05NTI0NV9SRUdfUl9SRU1PVEVfVEVNUExfUywKKwlMTTk1MjQ1X1JFR19SX1JFTU9URV9URU1QSF9VLAorCUxNOTUyNDVfUkVHX1JfUkVNT1RFX1RFTVBMX1UsCisJTE05NTI0NV9SRUdfUldfTE9DQUxfT1NfVENSSVRfTElNSVQsCisJTE05NTI0NV9SRUdfUldfUkVNT1RFX1RDUklUX0xJTUlULAorCUxNOTUyNDVfUkVHX1JXX0NPTU1PTl9IWVNURVJFU0lTLAorCUxNOTUyNDVfUkVHX1JfU1RBVFVTMSwKK307CisKKy8qIENsaWVudCBkYXRhIChlYWNoIGNsaWVudCBnZXRzIGl0cyBvd24pICovCitzdHJ1Y3QgbG05NTI0NV9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBpbiBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsJLyogaW4gbXNlY3MgKi8KKwlib29sIHZhbGlkOwkJLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KKwl1OCByZWdzW0FSUkFZX1NJWkUobG05NTI0NV9yZWdfYWRkcmVzcyldOworCXU4IGNvbmZpZzEsIGNvbmZpZzI7Cit9OworCisvKiBDb252ZXJzaW9ucyAqLworc3RhdGljIGludCB0ZW1wX2Zyb21fcmVnX3Vuc2lnbmVkKHU4IHZhbF9oLCB1OCB2YWxfbCkKK3sKKwlyZXR1cm4gdmFsX2ggKiAxMDAwICsgdmFsX2wgKiAxMDAwIC8gMjU2OworfQorCitzdGF0aWMgaW50IHRlbXBfZnJvbV9yZWdfc2lnbmVkKHU4IHZhbF9oLCB1OCB2YWxfbCkKK3sKKwlpZiAodmFsX2ggJiAweDgwKQorCQlyZXR1cm4gKHZhbF9oIC0gMHgxMDApICogMTAwMDsKKwlyZXR1cm4gdGVtcF9mcm9tX3JlZ191bnNpZ25lZCh2YWxfaCwgdmFsX2wpOworfQorCitzdGF0aWMgc3RydWN0IGxtOTUyNDVfZGF0YSAqbG05NTI0NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsbTk1MjQ1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZAorCQkrIG1zZWNzX3RvX2ppZmZpZXMoZGF0YS0+aW50ZXJ2YWwpKSB8fCAhZGF0YS0+dmFsaWQpIHsKKwkJaW50IGk7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBsbTk1MjQ1IGRhdGEuXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG05NTI0NV9yZWdfYWRkcmVzcyk7IGkrKykKKwkJCWRhdGEtPnJlZ3NbaV0KKwkJCSAgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICAgICBsbTk1MjQ1X3JlZ19hZGRyZXNzW2ldKTsKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxtOTUyNDVfcmVhZF9jb252ZXJzaW9uX3JhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGludGVydmFsOworCisJcmF0ZSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDVfUkVHX1JXX0NPTlZFUlNfUkFURSk7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIFJBVEVfQ1IwMDYzOgorCQlpbnRlcnZhbCA9IDYzOworCQlicmVhazsKKwljYXNlIFJBVEVfQ1IwMzY0OgorCQlpbnRlcnZhbCA9IDM2NDsKKwkJYnJlYWs7CisJY2FzZSBSQVRFX0NSMTAwMDoKKwkJaW50ZXJ2YWwgPSAxMDAwOworCQlicmVhazsKKwljYXNlIFJBVEVfQ1IyNTAwOgorCWRlZmF1bHQ6CisJCWludGVydmFsID0gMjUwMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGludGVydmFsOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsbTk1MjQ1X3NldF9jb252ZXJzaW9uX3JhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCit7CisJaW50IHJhdGU7CisKKwlpZiAoaW50ZXJ2YWwgPD0gNjMpIHsKKwkJaW50ZXJ2YWwgPSA2MzsKKwkJcmF0ZSA9IFJBVEVfQ1IwMDYzOworCX0gZWxzZSBpZiAoaW50ZXJ2YWwgPD0gMzY0KSB7CisJCWludGVydmFsID0gMzY0OworCQlyYXRlID0gUkFURV9DUjAzNjQ7CisJfSBlbHNlIGlmIChpbnRlcnZhbCA8PSAxMDAwKSB7CisJCWludGVydmFsID0gMTAwMDsKKwkJcmF0ZSA9IFJBVEVfQ1IxMDAwOworCX0gZWxzZSB7CisJCWludGVydmFsID0gMjUwMDsKKwkJcmF0ZSA9IFJBVEVfQ1IyNTAwOworCX0KKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQ1X1JFR19SV19DT05WRVJTX1JBVEUsIHJhdGUpOworCisJcmV0dXJuIGludGVydmFsOworfQorCisvKiBTeXNmcyBzdHVmZiAqLworc3RhdGljIHNzaXplX3Qgc2hvd19pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGxtOTUyNDVfZGF0YSAqZGF0YSA9IGxtOTUyNDVfdXBkYXRlX2RldmljZShkZXYpOworCWludCB0ZW1wOworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisKKwkvKgorCSAqIEluZGV4IDAgKExvY2FsIHRlbXApIGlzIGFsd2F5cyBzaWduZWQKKwkgKiBJbmRleCAyIChSZW1vdGUgdGVtcCkgaGFzIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCBkYXRhCisJICogdXNlIHNpZ25lZCBjYWxjdWxhdGlvbiBmb3IgcmVtb3RlIGlmIHNpZ25lZCBiaXQgaXMgc2V0CisJICovCisJaWYgKGluZGV4ID09IDAgfHwgZGF0YS0+cmVnc1tpbmRleF0gJiAweDgwKQorCQl0ZW1wID0gdGVtcF9mcm9tX3JlZ19zaWduZWQoZGF0YS0+cmVnc1tpbmRleF0sCisJCQkgICAgZGF0YS0+cmVnc1tpbmRleCArIDFdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fcmVnX3Vuc2lnbmVkKGRhdGEtPnJlZ3NbaW5kZXggKyAyXSwKKwkJCSAgICBkYXRhLT5yZWdzW2luZGV4ICsgM10pOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgIiVkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19saW1pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhID0gbG05NTI0NV91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDEsICIlZFxuIiwKKwkJCWRhdGEtPnJlZ3NbaW5kZXhdICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9saW1pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIC89IDEwMDA7CisKKwl2YWwgPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgKGluZGV4ID09IDYgPyAxMjcgOiAyNTUpKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWRhdGEtPnZhbGlkID0gMDsKKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBsbTk1MjQ1X3JlZ19hZGRyZXNzW2luZGV4XSwgdmFsKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfY3JpdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsbTk1MjQ1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIC89IDEwMDA7CisKKwl2YWwgPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgMzEpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJZGF0YS0+dmFsaWQgPSAwOworCisJLyogc2hhcmVkIGNyaXQgaHlzdGVyZXNpcyAqLworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQ1X1JFR19SV19DT01NT05fSFlTVEVSRVNJUywKKwkJdmFsKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAxLAorCQlkYXRhLT5jb25maWcyICYgQ0ZHMl9SRU1PVEVfVFQgPyAiMVxuIiA6ICIyXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGxtOTUyNDVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh2YWwgPT0gMSkKKwkJZGF0YS0+Y29uZmlnMiB8PSBDRkcyX1JFTU9URV9UVDsKKwllbHNlCisJCWRhdGEtPmNvbmZpZzIgJj0gfkNGRzJfUkVNT1RFX1RUOworCisJZGF0YS0+dmFsaWQgPSAwOworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDVfUkVHX1JXX0NPTkZJRzIsCisJCQkJICBkYXRhLT5jb25maWcyKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbTk1MjQ1X2RhdGEgKmRhdGEgPSBsbTk1MjQ1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgIiVkXG4iLAorCQkJISEoZGF0YS0+cmVnc1s5XSAmIGluZGV4KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbTk1MjQ1X2RhdGEgKmRhdGEgPSBsbTk1MjQ1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDEsICIlbHVcbiIsIGRhdGEtPmludGVydmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWRhdGEtPmludGVydmFsID0gbG05NTI0NV9zZXRfY29udmVyc2lvbl9yYXRlKGNsaWVudCwgdmFsKTsKKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X2lucHV0LCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbGltaXQsCisJCXNldF9saW1pdCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbGltaXQsCisJCXNldF9jcml0X2h5c3QsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQlTVEFUVVMxX0xPQyk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5wdXQsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19saW1pdCwKKwkJc2V0X2xpbWl0LCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19saW1pdCwKKwkJc2V0X2NyaXRfaHlzdCwgOCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCisJCVNUQVRVUzFfUlRDUklUKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfdHlwZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdHlwZSwKKwkJc2V0X3R5cGUsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJU1RBVFVTMV9ESU9ERV9GQVVMVCk7CisKK3N0YXRpYyBERVZJQ0VfQVRUUih1cGRhdGVfaW50ZXJ2YWwsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ludGVydmFsLAorCQlzZXRfaW50ZXJ2YWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05NTI0NV9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl90eXBlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl91cGRhdGVfaW50ZXJ2YWwuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTk1MjQ1X2dyb3VwID0geworCS5hdHRycyA9IGxtOTUyNDVfYXR0cmlidXRlcywKK307CisKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLworc3RhdGljIGludCBsbTk1MjQ1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCwKKwkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IG5ld19jbGllbnQtPmFkYXB0ZXI7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQ1X1JFR19SX01BTl9JRCkKKwkJCSE9IE1BTlVGQUNUVVJFUl9JRAorCQl8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0NV9SRUdfUl9DSElQX0lEKQorCQkJIT0gREVGQVVMVF9SRVZJU0lPTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdHJsY3B5KGluZm8tPnR5cGUsIERFVk5BTUUsIEkyQ19OQU1FX1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsbTk1MjQ1X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGxtOTUyNDVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGF0YS0+dmFsaWQgPSAwOworCWRhdGEtPmludGVydmFsID0gbG05NTI0NV9yZWFkX2NvbnZlcnNpb25fcmF0ZShjbGllbnQpOworCisJZGF0YS0+Y29uZmlnMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCUxNOTUyNDVfUkVHX1JXX0NPTkZJRzEpOworCWRhdGEtPmNvbmZpZzIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQlMTTk1MjQ1X1JFR19SV19DT05GSUcyKTsKKworCWlmIChkYXRhLT5jb25maWcxICYgQ0ZHX1NUT1ApIHsKKwkJLyogQ2xlYXIgdGhlIHN0YW5kYnkgYml0ICovCisJCWRhdGEtPmNvbmZpZzEgJj0gfkNGR19TVE9QOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0NV9SRUdfUldfQ09ORklHMSwKKwkJCWRhdGEtPmNvbmZpZzEpOworCX0KK30KKworc3RhdGljIGludCBsbTk1MjQ1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxtOTUyNDVfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIEluaXRpYWxpemUgdGhlIExNOTUyNDUgY2hpcCAqLworCWxtOTUyNDVfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTk1MjQ1X2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05NTI0NV9ncm91cCk7CitleGl0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG05NTI0NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbG05NTI0NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtOTUyNDVfZ3JvdXApOworCisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIERyaXZlciBkYXRhIChjb21tb24gdG8gYWxsIGNsaWVudHMpICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05NTI0NV9pZFtdID0geworCXsgREVWTkFNRSwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTk1MjQ1X2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGxtOTUyNDVfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSBERVZOQU1FLAorCX0sCisJLnByb2JlCQk9IGxtOTUyNDVfcHJvYmUsCisJLnJlbW92ZQkJPSBsbTk1MjQ1X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsbTk1MjQ1X2lkLAorCS5kZXRlY3QJCT0gbG05NTI0NV9kZXRlY3QsCisJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX2xtOTUyNDVfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbG05NTI0NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2Vuc29yc19sbTk1MjQ1X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbG05NTI0NV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgU3RlaW4gPGFsZXhhbmRlci5zdGVpbkBzeXN0ZWMtZWxlY3Ryb25pYy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyNDUgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChzZW5zb3JzX2xtOTUyNDVfaW5pdCk7Cittb2R1bGVfZXhpdChzZW5zb3JzX2xtOTUyNDVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDE2MDY1LmMgYi9kcml2ZXJzL2h3bW9uL21heDE2MDY1LmMKaW5kZXggZDk0YTI0Zi4uZGQyZDdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjA2NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4MTYwNjUuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IEFEQ19UT19DVVJSKGludCBhZGMsIGludCBnYWluKQogewotCXJldHVybiBhZGMgKiAxNDAwMDAwIC8gZ2FpbiAqIDI1NTsKKwlyZXR1cm4gYWRjICogMTQwMDAwMCAvIChnYWluICogMjU1KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTY2OC5jIGIvZHJpdmVycy9od21vbi9tYXgxNjY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkMWIyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4MTY2OC5jCkBAIC0wLDAgKzEsNTAyIEBACisvKgorICAgIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBHZW9yZ2UgPGRhdmlkLmdlb3JnZUBza2EuYWMuemE+CisKKyAgICBiYXNlZCBvbiBhZG0xMDIxLmMKKyAgICBzb21lIGNyZWRpdCB0byBDaHJpc3RvcGggU2NoZXVyZXIsIGJ1dCBsYXJnZWx5IGEgcmV3cml0ZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4MTY2OF9hZGRyX2xpc3RbXSA9IHsKKwkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OworCisvKiBtYXgxNjY4IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIE1BWDE2NjhfUkVHX1RFTVAobnIpCShucikKKyNkZWZpbmUgTUFYMTY2OF9SRUdfU1RBVDEJMHgwNQorI2RlZmluZSBNQVgxNjY4X1JFR19TVEFUMgkweDA2CisjZGVmaW5lIE1BWDE2NjhfUkVHX01BTl9JRAkweGZlCisjZGVmaW5lIE1BWDE2NjhfUkVHX0RFVl9JRAkweGZmCisKKy8qIGxpbWl0cyAqLworCisvKiB3cml0ZSBoaWdoIGxpbWl0cyAqLworI2RlZmluZSBNQVgxNjY4X1JFR19MSU1IX1dSKG5yKQkoMHgxMyArIDIgKiAobnIpKQorLyogd3JpdGUgbG93IGxpbWl0cyAqLworI2RlZmluZSBNQVgxNjY4X1JFR19MSU1MX1dSKG5yKQkoMHgxNCArIDIgKiAobnIpKQorLyogcmVhZCBoaWdoIGxpbWl0cyAqLworI2RlZmluZSBNQVgxNjY4X1JFR19MSU1IX1JEKG5yKQkoMHgwOCArIDIgKiAobnIpKQorLyogcmVhZCBsb3cgbGltaXRzICovCisjZGVmaW5lIE1BWDE2NjhfUkVHX0xJTUxfUkQobnIpCSgweDA5ICsgMiAqIChucikpCisKKy8qIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIENvbnN0YW50cyAqLworI2RlZmluZSBNQU5fSURfTUFYSU0JCTB4NGQKKyNkZWZpbmUgREVWX0lEX01BWDE2NjgJCTB4MworI2RlZmluZSBERVZfSURfTUFYMTgwNQkJMHg1CisjZGVmaW5lIERFVl9JRF9NQVgxOTg5CQkweGIKKworLyogcmVhZCBvbmx5IG1vZGUgbW9kdWxlIHBhcmFtZXRlciAqLworc3RhdGljIGludCByZWFkX29ubHk7Cittb2R1bGVfcGFyYW0ocmVhZF9vbmx5LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVhZF9vbmx5LCAiRG9uJ3Qgc2V0IGFueSB2YWx1ZXMsIHJlYWQgb25seSBtb2RlIik7CisKK2VudW0gY2hpcHMgeyBtYXgxNjY4LCBtYXgxODA1LCBtYXgxOTg5IH07CisKK3N0cnVjdCBtYXgxNjY4X2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwllbnVtIGNoaXBzIHR5cGU7CisKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCisKKwkvKiAxeCBsb2NhbCBhbmQgNHggcmVtb3RlICovCisJczggdGVtcF9tYXhbNV07CisJczggdGVtcF9taW5bNV07CisJczggdGVtcFs1XTsKKwl1MTYgYWxhcm1zOworfTsKKworc3RhdGljIHN0cnVjdCBtYXgxNjY4X2RhdGEgKm1heDE2NjhfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG1heDE2NjhfZGF0YSAqcmV0ID0gZGF0YTsKKwlzMzIgdmFsOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKGRhdGEtPnZhbGlkICYmICF0aW1lX2FmdGVyKGppZmZpZXMsCisJCQlkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikpCisJCWdvdG8gYWJvcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2NjhfUkVHX1RFTVAoaSkpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+dGVtcFtpXSA9IChzOCkgdmFsOworCisJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2NjhfUkVHX0xJTUhfUkQoaSkpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+dGVtcF9tYXhbaV0gPSAoczgpIHZhbDsKKworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVgxNjY4X1JFR19MSU1MX1JEKGkpKTsKKwkJaWYgKHVubGlrZWx5KHZhbCA8IDApKSB7CisJCQlyZXQgPSBFUlJfUFRSKHZhbCk7CisJCQlnb3RvIGFib3J0OworCQl9CisJCWRhdGEtPnRlbXBfbWluW2ldID0gKHM4KSB2YWw7CisJfQorCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYMTY2OF9SRUdfU1RBVDEpOworCWlmICh1bmxpa2VseSh2YWwgPCAwKSkgeworCQlyZXQgPSBFUlJfUFRSKHZhbCk7CisJCWdvdG8gYWJvcnQ7CisJfQorCWRhdGEtPmFsYXJtcyA9IHZhbCA8PCA4OworCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYMTY2OF9SRUdfU1RBVDIpOworCWlmICh1bmxpa2VseSh2YWwgPCAwKSkgeworCQlyZXQgPSBFUlJfUFRSKHZhbCk7CisJCWdvdG8gYWJvcnQ7CisJfQorCWRhdGEtPmFsYXJtcyB8PSB2YWw7CisKKwlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCWRhdGEtPnZhbGlkID0gMTsKK2Fib3J0OgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisJc3RydWN0IG1heDE2NjhfZGF0YSAqZGF0YSA9IG1heDE2NjhfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+dGVtcFtpbmRleF0gKiAxMDAwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhID0gbWF4MTY2OF91cGRhdGVfZGV2aWNlKGRldik7CisKKwlpZiAoSVNfRVJSKGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wX21heFtpbmRleF0gKiAxMDAwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhID0gbWF4MTY2OF91cGRhdGVfZGV2aWNlKGRldik7CisKKwlpZiAoSVNfRVJSKGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50ZW1wX21pbltpbmRleF0gKiAxMDAwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhID0gbWF4MTY2OF91cGRhdGVfZGV2aWNlKGRldik7CisKKwlpZiAoSVNfRVJSKGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAoZGF0YS0+YWxhcm1zID4+IGluZGV4KSAmIDB4MSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmF1bHQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisJc3RydWN0IG1heDE2NjhfZGF0YSAqZGF0YSA9IG1heDE2NjhfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgIChkYXRhLT5hbGFybXMgJiAoMSA8PCAxMikpICYmIGRhdGEtPnRlbXBbaW5kZXhdID09IDEyNyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtYXgxNjY4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlsb25nIHRlbXA7CisJaW50IHJldDsKKworCXJldCA9IGtzdHJ0b2woYnVmLCAxMCwgJnRlbXApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfbWF4W2luZGV4XSA9IFNFTlNPUlNfTElNSVQodGVtcC8xMDAwLCAtMTI4LCAxMjcpOworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJTUFYMTY2OF9SRUdfTElNSF9XUihpbmRleCksCisJCQkJCWRhdGEtPnRlbXBfbWF4W2luZGV4XSkpCisJCWNvdW50ID0gLUVJTzsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IG1heDE2NjhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdGVtcDsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvbChidWYsIDEwLCAmdGVtcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGVtcF9taW5baW5kZXhdID0gU0VOU09SU19MSU1JVCh0ZW1wLzEwMDAsIC0xMjgsIDEyNyk7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlNQVgxNjY4X1JFR19MSU1MX1dSKGluZGV4KSwKKwkJCQkJZGF0YS0+dGVtcF9tYXhbaW5kZXhdKSkKKwkJY291bnQgPSAtRUlPOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCisJCQkJc2V0X3RlbXBfbWF4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJCXNldF90ZW1wX21pbiwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCisJCQkJc2V0X3RlbXBfbWF4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJCXNldF90ZW1wX21pbiwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCisJCQkJc2V0X3RlbXBfbWF4LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbWluLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJCXNldF90ZW1wX21pbiwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCisJCQkJc2V0X3RlbXBfbWF4LCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfbWluLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJCXNldF90ZW1wX21pbiwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNV9tYXgsIFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCisJCQkJc2V0X3RlbXBfbWF4LCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDVfbWluLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAorCQkJCXNldF90ZW1wX21pbiwgNCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDApOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2ZhdWx0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfZmF1bHQsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9mYXVsdCwgU19JUlVHTywgc2hvd19mYXVsdCwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA1X2ZhdWx0LCBTX0lSVUdPLCBzaG93X2ZhdWx0LCBOVUxMLCA0KTsKKworLyogQXR0cmlidXRlcyBjb21tb24gdG8gTUFYMTY2OCwgTUFYMTk4OSBhbmQgTUFYMTgwNSAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDE2NjhfYXR0cmlidXRlX2NvbW1vbltdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19mYXVsdC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKKy8qIEF0dHJpYnV0ZXMgbm90IHByZXNlbnQgb24gTUFYMTgwNSAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1heDE2NjhfYXR0cmlidXRlX3VuaXF1ZVtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBtb2RlX3QgbWF4MTY2OF9hdHRyaWJ1dGVfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpbmRleCkKK3sKKwlpbnQgcmV0ID0gU19JUlVHTzsKKwlpZiAocmVhZF9vbmx5KQorCQlyZXR1cm4gcmV0OworCWlmIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyIHx8CisJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciB8fAorCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heC5kZXZfYXR0ci5hdHRyIHx8CisJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciB8fAorCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbi5kZXZfYXR0ci5hdHRyIHx8CisJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW4uZGV2X2F0dHIuYXR0ciB8fAorCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfbWluLmRldl9hdHRyLmF0dHIpCisJCXJldCB8PSBTX0lXVVNSOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1heDE2NjhfZ3JvdXBfY29tbW9uID0geworCS5hdHRycyA9IG1heDE2NjhfYXR0cmlidXRlX2NvbW1vbiwKKwkuaXNfdmlzaWJsZSA9IG1heDE2NjhfYXR0cmlidXRlX21vZGUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1heDE2NjhfZ3JvdXBfdW5pcXVlID0geworCS5hdHRycyA9IG1heDE2NjhfYXR0cmlidXRlX3VuaXF1ZSwKKwkuaXNfdmlzaWJsZSA9IG1heDE2NjhfYXR0cmlidXRlX21vZGUKK307CisKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLworc3RhdGljIGludCBtYXgxNjY4X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWNvbnN0IGNoYXIgKnR5cGVfbmFtZTsKKwlpbnQgbWFuX2lkLCBkZXZfaWQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogQ2hlY2sgZm9yIHVuc3VwcG9ydGVkIHBhcnQgKi8KKwltYW5faWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVgxNjY4X1JFR19NQU5fSUQpOworCWlmIChtYW5faWQgIT0gTUFOX0lEX01BWElNKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl9pZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDE2NjhfUkVHX0RFVl9JRCk7CisJaWYgKGRldl9pZCA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJdHlwZV9uYW1lID0gTlVMTDsKKwlpZiAoZGV2X2lkID09IERFVl9JRF9NQVgxNjY4KQorCQl0eXBlX25hbWUgPSAibWF4MTY2OCI7CisJZWxzZSBpZiAoZGV2X2lkID09IERFVl9JRF9NQVgxODA1KQorCQl0eXBlX25hbWUgPSAibWF4MTgwNSI7CisJZWxzZSBpZiAoZGV2X2lkID09IERFVl9JRF9NQVgxOTg5KQorCQl0eXBlX25hbWUgPSAibWF4MTk4OSI7CisKKwlpZiAoIXR5cGVfbmFtZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdHJsY3B5KGluZm8tPnR5cGUsIHR5cGVfbmFtZSwgSTJDX05BTUVfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXgxNjY4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhOworCWludCBlcnI7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXgxNjY4X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1heDE2NjhfZ3JvdXBfY29tbW9uKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX2ZyZWU7CisKKwlpZiAoZGF0YS0+dHlwZSA9PSBtYXgxNjY4IHx8IGRhdGEtPnR5cGUgPT0gbWF4MTk4OSkgeworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCSAmbWF4MTY2OF9ncm91cF91bmlxdWUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcl9zeXNyZW0wOworCX0KKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gZXJyb3Jfc3lzcmVtMTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3Jfc3lzcmVtMToKKwlpZiAoZGF0YS0+dHlwZSA9PSBtYXgxNjY4IHx8IGRhdGEtPnR5cGUgPT0gbWF4MTk4OSkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbWF4MTY2OF9ncm91cF91bmlxdWUpOworZXJyb3Jfc3lzcmVtMDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtYXgxNjY4X2dyb3VwX2NvbW1vbik7CitlcnJvcl9mcmVlOgorCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWF4MTY2OF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWF4MTY2OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCWlmIChkYXRhLT50eXBlID09IG1heDE2NjggfHwgZGF0YS0+dHlwZSA9PSBtYXgxOTg5KQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtYXgxNjY4X2dyb3VwX3VuaXF1ZSk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZtYXgxNjY4X2dyb3VwX2NvbW1vbik7CisKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDE2NjhfaWRbXSA9IHsKKwl7ICJtYXgxNjY4IiwgbWF4MTY2OCB9LAorCXsgIm1heDE4MDUiLCBtYXgxODA1IH0sCisJeyAibWF4MTk4OSIsIG1heDE5ODkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4MTY2OF9pZCk7CisKKy8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXgxNjY4X2RyaXZlciA9IHsKKwkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJICAubmFtZQk9ICJtYXgxNjY4IiwKKwkJICB9LAorCS5wcm9iZSA9IG1heDE2NjhfcHJvYmUsCisJLnJlbW92ZQk9IG1heDE2NjhfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG1heDE2NjhfaWQsCisJLmRldGVjdAk9IG1heDE2NjhfZGV0ZWN0LAorCS5hZGRyZXNzX2xpc3QgPSBtYXgxNjY4X2FkZHJfbGlzdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfbWF4MTY2OF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXgxNjY4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX21heDE2NjhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXgxNjY4X2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRhdmlkIEdlb3JnZSA8ZGF2aWQuZ2VvcmdlQHNrYS5hYy56YT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUFYMTY2OCByZW1vdGUgdGVtcGVyYXR1cmUgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChzZW5zb3JzX21heDE2NjhfaW5pdCkKK21vZHVsZV9leGl0KHNlbnNvcnNfbWF4MTY2OF9leGl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9udGNfdGhlcm1pc3Rvci5jIGIvZHJpdmVycy9od21vbi9udGNfdGhlcm1pc3Rvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjExNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL250Y190aGVybWlzdG9yLmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiBudGNfdGhlcm1pc3Rvci5jIC0gTlRDIFRoZXJtaXN0b3JzCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiAgTXl1bmdKb28gSGFtIDxteXVuZ2pvby5oYW1Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvbnRjX3RoZXJtaXN0b3IuaD4KKworI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKworc3RydWN0IG50Y19jb21wZW5zYXRpb24geworCWludAkJdGVtcF9DOworCXVuc2lnbmVkIGludAlvaG07Cit9OworCisvKgorICogQSBjb21wZW5zYXRpb24gdGFibGUgc2hvdWxkIGJlIHNvcnRlZCBieSB0aGUgdmFsdWVzIG9mIC5vaG0KKyAqIGluIGRlc2NlbmRpbmcgb3JkZXIuCisgKiBUaGUgZm9sbG93aW5nIGNvbXBlbnNhdGlvbiB0YWJsZXMgYXJlIGZyb20gdGhlIHNwZWNpZmljYXRpb24gb2YgTXVyYXRhIE5UQworICogVGhlcm1pc3RvcnMgRGF0YXNoZWV0CisgKi8KK2NvbnN0IHN0cnVjdCBudGNfY29tcGVuc2F0aW9uIG5jcFhYd2I0NzNbXSA9IHsKKwl7IC50ZW1wX0MJPSAtNDAsIC5vaG0JPSAxNzQ3OTIwIH0sCisJeyAudGVtcF9DCT0gLTM1LCAub2htCT0gMTI0NTQyOCB9LAorCXsgLnRlbXBfQwk9IC0zMCwgLm9obQk9IDg5ODQ4NSB9LAorCXsgLnRlbXBfQwk9IC0yNSwgLm9obQk9IDY1NTgwMiB9LAorCXsgLnRlbXBfQwk9IC0yMCwgLm9obQk9IDQ4Mzk1NCB9LAorCXsgLnRlbXBfQwk9IC0xNSwgLm9obQk9IDM2MDg1MCB9LAorCXsgLnRlbXBfQwk9IC0xMCwgLm9obQk9IDI3MTY5NyB9LAorCXsgLnRlbXBfQwk9IC01LCAub2htCT0gMjA2NDYzIH0sCisJeyAudGVtcF9DCT0gMCwgLm9obQk9IDE1ODIxNCB9LAorCXsgLnRlbXBfQwk9IDUsIC5vaG0JPSAxMjIyNTkgfSwKKwl7IC50ZW1wX0MJPSAxMCwgLm9obQk9IDk1MjI3IH0sCisJeyAudGVtcF9DCT0gMTUsIC5vaG0JPSA3NDczMCB9LAorCXsgLnRlbXBfQwk9IDIwLCAub2htCT0gNTkwNjUgfSwKKwl7IC50ZW1wX0MJPSAyNSwgLm9obQk9IDQ3MDAwIH0sCisJeyAudGVtcF9DCT0gMzAsIC5vaG0JPSAzNzY0MyB9LAorCXsgLnRlbXBfQwk9IDM1LCAub2htCT0gMzAzMzQgfSwKKwl7IC50ZW1wX0MJPSA0MCwgLm9obQk9IDI0NTkxIH0sCisJeyAudGVtcF9DCT0gNDUsIC5vaG0JPSAyMDA0OCB9LAorCXsgLnRlbXBfQwk9IDUwLCAub2htCT0gMTY0MzMgfSwKKwl7IC50ZW1wX0MJPSA1NSwgLm9obQk9IDEzNTM5IH0sCisJeyAudGVtcF9DCT0gNjAsIC5vaG0JPSAxMTIwOSB9LAorCXsgLnRlbXBfQwk9IDY1LCAub2htCT0gOTMyOCB9LAorCXsgLnRlbXBfQwk9IDcwLCAub2htCT0gNzc5OCB9LAorCXsgLnRlbXBfQwk9IDc1LCAub2htCT0gNjU0NCB9LAorCXsgLnRlbXBfQwk9IDgwLCAub2htCT0gNTUxOCB9LAorCXsgLnRlbXBfQwk9IDg1LCAub2htCT0gNDY3NCB9LAorCXsgLnRlbXBfQwk9IDkwLCAub2htCT0gMzk3MiB9LAorCXsgLnRlbXBfQwk9IDk1LCAub2htCT0gMzM4OCB9LAorCXsgLnRlbXBfQwk9IDEwMCwgLm9obQk9IDI5MDIgfSwKKwl7IC50ZW1wX0MJPSAxMDUsIC5vaG0JPSAyNDk0IH0sCisJeyAudGVtcF9DCT0gMTEwLCAub2htCT0gMjE1MCB9LAorCXsgLnRlbXBfQwk9IDExNSwgLm9obQk9IDE4NjAgfSwKKwl7IC50ZW1wX0MJPSAxMjAsIC5vaG0JPSAxNjE1IH0sCisJeyAudGVtcF9DCT0gMTI1LCAub2htCT0gMTQwNiB9LAorfTsKK2NvbnN0IHN0cnVjdCBudGNfY29tcGVuc2F0aW9uIG5jcFhYd2wzMzNbXSA9IHsKKwl7IC50ZW1wX0MJPSAtNDAsIC5vaG0JPSAxNjEwMTU0IH0sCisJeyAudGVtcF9DCT0gLTM1LCAub2htCT0gMTEzMDg1MCB9LAorCXsgLnRlbXBfQwk9IC0zMCwgLm9obQk9IDgwMjYwOSB9LAorCXsgLnRlbXBfQwk9IC0yNSwgLm9obQk9IDU3NTM4NSB9LAorCXsgLnRlbXBfQwk9IC0yMCwgLm9obQk9IDQxNjQ2NCB9LAorCXsgLnRlbXBfQwk9IC0xNSwgLm9obQk9IDMwNDIxOSB9LAorCXsgLnRlbXBfQwk9IC0xMCwgLm9obQk9IDIyNDE5MyB9LAorCXsgLnRlbXBfQwk9IC01LCAub2htCT0gMTY2NjIzIH0sCisJeyAudGVtcF9DCT0gMCwgLm9obQk9IDEyNDg1MCB9LAorCXsgLnRlbXBfQwk9IDUsIC5vaG0JPSA5NDI4NyB9LAorCXsgLnRlbXBfQwk9IDEwLCAub2htCT0gNzE3NDcgfSwKKwl7IC50ZW1wX0MJPSAxNSwgLm9obQk9IDU0OTk2IH0sCisJeyAudGVtcF9DCT0gMjAsIC5vaG0JPSA0MjQ1NSB9LAorCXsgLnRlbXBfQwk9IDI1LCAub2htCT0gMzMwMDAgfSwKKwl7IC50ZW1wX0MJPSAzMCwgLm9obQk9IDI1ODIyIH0sCisJeyAudGVtcF9DCT0gMzUsIC5vaG0JPSAyMDMzNSB9LAorCXsgLnRlbXBfQwk9IDQwLCAub2htCT0gMTYxMTUgfSwKKwl7IC50ZW1wX0MJPSA0NSwgLm9obQk9IDEyODQ5IH0sCisJeyAudGVtcF9DCT0gNTAsIC5vaG0JPSAxMDMwNiB9LAorCXsgLnRlbXBfQwk9IDU1LCAub2htCT0gODMxNCB9LAorCXsgLnRlbXBfQwk9IDYwLCAub2htCT0gNjc0NiB9LAorCXsgLnRlbXBfQwk9IDY1LCAub2htCT0gNTUwMyB9LAorCXsgLnRlbXBfQwk9IDcwLCAub2htCT0gNDUxMyB9LAorCXsgLnRlbXBfQwk9IDc1LCAub2htCT0gMzcyMSB9LAorCXsgLnRlbXBfQwk9IDgwLCAub2htCT0gMzA4NCB9LAorCXsgLnRlbXBfQwk9IDg1LCAub2htCT0gMjU2OSB9LAorCXsgLnRlbXBfQwk9IDkwLCAub2htCT0gMjE1MSB9LAorCXsgLnRlbXBfQwk9IDk1LCAub2htCT0gMTgwOSB9LAorCXsgLnRlbXBfQwk9IDEwMCwgLm9obQk9IDE1MjkgfSwKKwl7IC50ZW1wX0MJPSAxMDUsIC5vaG0JPSAxMjk5IH0sCisJeyAudGVtcF9DCT0gMTEwLCAub2htCT0gMTEwOCB9LAorCXsgLnRlbXBfQwk9IDExNSwgLm9obQk9IDk0OSB9LAorCXsgLnRlbXBfQwk9IDEyMCwgLm9obQk9IDgxNyB9LAorCXsgLnRlbXBfQwk9IDEyNSwgLm9obQk9IDcwNyB9LAorfTsKKworc3RydWN0IG50Y19kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG50Y190aGVybWlzdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWNvbnN0IHN0cnVjdCBudGNfY29tcGVuc2F0aW9uICpjb21wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgbl9jb21wOworCWNoYXIgbmFtZVtQTEFURk9STV9OQU1FX1NJWkVdOworfTsKKworc3RhdGljIGlubGluZSB1NjQgZGl2NjRfdTY0X3NhZmUodTY0IGRpdmlkZW5kLCB1NjQgZGl2aXNvcikKK3sKKwlpZiAoZGl2aXNvciA9PSAwICYmIGRpdmlkZW5kID09IDApCisJCXJldHVybiAwOworCWlmIChkaXZpc29yID09IDApCisJCXJldHVybiBVSU5UX01BWDsKKwlyZXR1cm4gZGl2NjRfdTY0KGRpdmlkZW5kLCBkaXZpc29yKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfb2htX29mX3RoZXJtaXN0b3Ioc3RydWN0IG50Y19kYXRhICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgdVYpCit7CisJc3RydWN0IG50Y190aGVybWlzdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJdTY0IG1WID0gdVYgLyAxMDAwOworCXU2NCBwbVYgPSBwZGF0YS0+cHVsbHVwX3VWIC8gMTAwMDsKKwl1NjQgTiwgcHVPLCBwZE87CisJcHVPID0gcGRhdGEtPnB1bGx1cF9vaG07CisJcGRPID0gcGRhdGEtPnB1bGxkb3duX29obTsKKworCWlmIChtViA9PSAwKSB7CisJCWlmIChwZGF0YS0+Y29ubmVjdCA9PSBOVENfQ09OTkVDVEVEX1BPU0lUSVZFKQorCQkJcmV0dXJuIFVJTlRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1WID49IHBtVikKKwkJcmV0dXJuIChwZGF0YS0+Y29ubmVjdCA9PSBOVENfQ09OTkVDVEVEX1BPU0lUSVZFKSA/CisJCQkwIDogVUlOVF9NQVg7CisKKwlpZiAocGRhdGEtPmNvbm5lY3QgPT0gTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSAmJiBwdU8gPT0gMCkKKwkJTiA9IGRpdjY0X3U2NF9zYWZlKHBkTyAqIChwbVYgLSBtViksIG1WKTsKKwllbHNlIGlmIChwZGF0YS0+Y29ubmVjdCA9PSBOVENfQ09OTkVDVEVEX0dST1VORCAmJiBwZE8gPT0gMCkKKwkJTiA9IGRpdjY0X3U2NF9zYWZlKHB1TyAqIG1WLCBwbVYgLSBtVik7CisJZWxzZSBpZiAocGRhdGEtPmNvbm5lY3QgPT0gTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSkKKwkJTiA9IGRpdjY0X3U2NF9zYWZlKHBkTyAqIHB1TyAqIChwbVYgLSBtViksCisJCQkJcHVPICogbVYgLSBwZE8gKiAocG1WIC0gbVYpKTsKKwllbHNlCisJCU4gPSBkaXY2NF91NjRfc2FmZShwZE8gKiBwdU8gKiBtViwgcGRPICogKHBtViAtIG1WKSAtIHB1TyAqIG1WKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KSBOOworfQorCitzdGF0aWMgaW50IGxvb2t1cF9jb21wKHN0cnVjdCBudGNfZGF0YSAqZGF0YSwKKwkJdW5zaWduZWQgaW50IG9obSwgaW50ICppX2xvdywgaW50ICppX2hpZ2gpCit7CisJaW50IHN0YXJ0LCBlbmQsIG1pZCA9IC0xOworCisJLyogRG8gYSBiaW5hcnkgc2VhcmNoIG9uIGNvbXBlbnNhdGlvbiB0YWJsZSAqLworCXN0YXJ0ID0gMDsKKwllbmQgPSBkYXRhLT5uX2NvbXA7CisKKwl3aGlsZSAoZW5kID4gc3RhcnQpIHsKKwkJbWlkID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKKwkJaWYgKGRhdGEtPmNvbXBbbWlkXS5vaG0gPCBvaG0pCisJCQllbmQgPSBtaWQ7CisJCWVsc2UgaWYgKGRhdGEtPmNvbXBbbWlkXS5vaG0gPiBvaG0pCisJCQlzdGFydCA9IG1pZCArIDE7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmIChtaWQgPT0gMCkgeworCQlpZiAoZGF0YS0+Y29tcFttaWRdLm9obSA+IG9obSkgeworCQkJKmlfaGlnaCA9IG1pZDsKKwkJCSppX2xvdyA9IG1pZCArIDE7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCSppX2xvdyA9IG1pZDsKKwkJCSppX2hpZ2ggPSAtMTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWlmIChtaWQgPT0gKGRhdGEtPm5fY29tcCAtIDEpKSB7CisJCWlmIChkYXRhLT5jb21wW21pZF0ub2htIDw9IG9obSkgeworCQkJKmlfbG93ID0gbWlkOworCQkJKmlfaGlnaCA9IG1pZCAtIDE7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCSppX2xvdyA9IC0xOworCQkJKmlfaGlnaCA9IG1pZDsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGRhdGEtPmNvbXBbbWlkXS5vaG0gPD0gb2htKSB7CisJCSppX2xvdyA9IG1pZDsKKwkJKmlfaGlnaCA9IG1pZCAtIDE7CisJfSBlbHNlIHsKKwkJKmlfbG93ID0gbWlkICsgMTsKKwkJKmlfaGlnaCA9IG1pZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfdGVtcF9tQyhzdHJ1Y3QgbnRjX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBvaG0sIGludCAqdGVtcCkKK3sKKwlpbnQgbG93LCBoaWdoOworCWludCByZXQ7CisKKwlyZXQgPSBsb29rdXBfY29tcChkYXRhLCBvaG0sICZsb3csICZoaWdoKTsKKwlpZiAocmV0KSB7CisJCS8qIFVuYWJsZSB0byB1c2UgbGluZWFyIGFwcHJveGltYXRpb24gKi8KKwkJaWYgKGxvdyAhPSAtMSkKKwkJCSp0ZW1wID0gZGF0YS0+Y29tcFtsb3ddLnRlbXBfQyAqIDEwMDA7CisJCWVsc2UgaWYgKGhpZ2ggIT0gLTEpCisJCQkqdGVtcCA9IGRhdGEtPmNvbXBbaGlnaF0udGVtcF9DICogMTAwMDsKKwkJZWxzZQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQkqdGVtcCA9IGRhdGEtPmNvbXBbbG93XS50ZW1wX0MgKiAxMDAwICsKKwkJCSgoZGF0YS0+Y29tcFtoaWdoXS50ZW1wX0MgLSBkYXRhLT5jb21wW2xvd10udGVtcF9DKSAqCisJCQkgMTAwMCAqICgoaW50KW9obSAtIChpbnQpZGF0YS0+Y29tcFtsb3ddLm9obSkpIC8KKwkJCSgoaW50KWRhdGEtPmNvbXBbaGlnaF0ub2htIC0gKGludClkYXRhLT5jb21wW2xvd10ub2htKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudGNfdGhlcm1pc3Rvcl9yZWFkKHN0cnVjdCBudGNfZGF0YSAqZGF0YSwgaW50ICp0ZW1wKQoreworCWludCByZXQ7CisJaW50IHJlYWRfb2htLCByZWFkX3VWOworCXVuc2lnbmVkIGludCBvaG0gPSAwOworCisJaWYgKGRhdGEtPnBkYXRhLT5yZWFkX29obSkgeworCQlyZWFkX29obSA9IGRhdGEtPnBkYXRhLT5yZWFkX29obSgpOworCQlpZiAocmVhZF9vaG0gPCAwKQorCQkJcmV0dXJuIHJlYWRfb2htOworCQlvaG0gPSAodW5zaWduZWQgaW50KXJlYWRfb2htOworCX0KKworCWlmIChkYXRhLT5wZGF0YS0+cmVhZF91VikgeworCQlyZWFkX3VWID0gZGF0YS0+cGRhdGEtPnJlYWRfdVYoKTsKKwkJaWYgKHJlYWRfdVYgPCAwKQorCQkJcmV0dXJuIHJlYWRfdVY7CisJCW9obSA9IGdldF9vaG1fb2ZfdGhlcm1pc3RvcihkYXRhLCAodW5zaWduZWQgaW50KXJlYWRfdVYpOworCX0KKworCXJldCA9IGdldF90ZW1wX21DKGRhdGEsIG9obSwgdGVtcCk7CisJaWYgKHJldCkgeworCQlkZXZfZGJnKGRhdGEtPmRldiwgIlNlbnNvciByZWFkaW5nIGZ1bmN0aW9uIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbnRjX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG50Y19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG50Y19zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjRcbiIpOworfQorCitzdGF0aWMgc3NpemVfdCBudGNfc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbnRjX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgdGVtcCwgcmV0OworCisJcmV0ID0gbnRjX3RoZXJtaXN0b3JfcmVhZChkYXRhLCAmdGVtcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCk7Cit9CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfdHlwZSwgU19JUlVHTywgbnRjX3Nob3dfdHlwZSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBudGNfc2hvd190ZW1wLCBOVUxMLCAwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBudGNfc2hvd19uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm50Y19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG50Y19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IG50Y19hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbnRjX3RoZXJtaXN0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbnRjX2RhdGEgKmRhdGE7CisJc3RydWN0IG50Y190aGVybWlzdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGluaXQgZGF0YSBzdXBwbGllZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBFaXRoZXIgb25lIG9mIHRoZSB0d28gaXMgcmVxdWlyZWQuICovCisJaWYgKCFwZGF0YS0+cmVhZF91ViAmJiAhcGRhdGEtPnJlYWRfb2htKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkJvdGggcmVhZF91ViBhbmQgcmVhZF9vaG0gbWlzc2luZy4iCisJCQkJIk5lZWQgZWl0aGVyIG9uZSBvZiB0aGUgdHdvLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwZGF0YS0+cmVhZF91ViAmJiBwZGF0YS0+cmVhZF9vaG0pIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIk9ubHkgb25lIG9mIHJlYWRfdVYgYW5kIHJlYWRfb2htICIKKwkJCQkiaXMgbmVlZGVkOyBpZ25vcmluZyByZWFkX3VWLlxuIik7CisJCXBkYXRhLT5yZWFkX3VWID0gTlVMTDsKKwl9CisKKwlpZiAocGRhdGEtPnJlYWRfdVYgJiYgKHBkYXRhLT5wdWxsdXBfdVYgPT0gMCB8fAorCQkJCShwZGF0YS0+cHVsbHVwX29obSA9PSAwICYmIHBkYXRhLT5jb25uZWN0ID09CisJCQkJIE5UQ19DT05ORUNURURfR1JPVU5EKSB8fAorCQkJCShwZGF0YS0+cHVsbGRvd25fb2htID09IDAgJiYgcGRhdGEtPmNvbm5lY3QgPT0KKwkJCQkgTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSkgfHwKKwkJCQkocGRhdGEtPmNvbm5lY3QgIT0gTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSAmJgorCQkJCSBwZGF0YS0+Y29ubmVjdCAhPSBOVENfQ09OTkVDVEVEX0dST1VORCkpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlcXVpcmVkIGRhdGEgdG8gdXNlIHJlYWRfdVYgbm90ICIKKwkJCQkic3VwcGxpZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBudGNfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhdGEtPnBkYXRhID0gcGRhdGE7CisJc3RybmNweShkYXRhLT5uYW1lLCBwZGV2LT5pZF9lbnRyeS0+bmFtZSwgUExBVEZPUk1fTkFNRV9TSVpFKTsKKworCXN3aXRjaCAocGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhKSB7CisJY2FzZSBUWVBFX05DUFhYV0I0NzM6CisJCWRhdGEtPmNvbXAgPSBuY3BYWHdiNDczOworCQlkYXRhLT5uX2NvbXAgPSBBUlJBWV9TSVpFKG5jcFhYd2I0NzMpOworCQlicmVhazsKKwljYXNlIFRZUEVfTkNQWFhXTDMzMzoKKwkJZGF0YS0+Y29tcCA9IG5jcFhYd2wzMzM7CisJCWRhdGEtPm5fY29tcCA9IEFSUkFZX1NJWkUobmNwWFh3bDMzMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gZGV2aWNlIHR5cGU6ICVsdSglcylcbiIsCisJCQkJcGRldi0+aWRfZW50cnktPmRyaXZlcl9kYXRhLAorCQkJCXBkZXYtPmlkX2VudHJ5LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRhdGEtPmRldi0+a29iaiwgJm50Y19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGF0YS0+ZGV2LCAidW5hYmxlIHRvIGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkYXRhLT5kZXYpOworCWlmIChJU19FUlJfT1JfTlVMTChkYXRhLT5od21vbl9kZXYpKSB7CisJCWRldl9lcnIoZGF0YS0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIGFzIGh3bW9uIGRldmljZS5cbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9hZnRlcl9zeXNmczsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVGhlcm1pc3RvciAlczolZCAodHlwZTogJXMvJWx1KSBzdWNjZXNzZnVsbHkgcHJvYmVkLlxuIiwKKwkJCXBkZXYtPm5hbWUsIHBkZXYtPmlkLCBwZGV2LT5pZF9lbnRyeS0+bmFtZSwKKwkJCXBkZXYtPmlkX2VudHJ5LT5kcml2ZXJfZGF0YSk7CisJcmV0dXJuIDA7CitlcnJfYWZ0ZXJfc3lzZnM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkYXRhLT5kZXYtPmtvYmosICZudGNfYXR0cl9ncm91cCk7CitlcnI6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbnRjX3RoZXJtaXN0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG50Y19kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGF0YS0+ZGV2LT5rb2JqLCAmbnRjX2F0dHJfZ3JvdXApOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbnRjX3RoZXJtaXN0b3JfaWRbXSA9IHsKKwl7ICJuY3AxNXdiNDczIiwgVFlQRV9OQ1BYWFdCNDczIH0sCisJeyAibmNwMTh3YjQ3MyIsIFRZUEVfTkNQWFhXQjQ3MyB9LAorCXsgIm5jcDIxd2I0NzMiLCBUWVBFX05DUFhYV0I0NzMgfSwKKwl7ICJuY3AwM3diNDczIiwgVFlQRV9OQ1BYWFdCNDczIH0sCisJeyAibmNwMTV3bDMzMyIsIFRZUEVfTkNQWFhXTDMzMyB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG50Y190aGVybWlzdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJudGMtdGhlcm1pc3RvciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gbnRjX3RoZXJtaXN0b3JfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG50Y190aGVybWlzdG9yX3JlbW92ZSksCisJLmlkX3RhYmxlID0gbnRjX3RoZXJtaXN0b3JfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBudGNfdGhlcm1pc3Rvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbnRjX3RoZXJtaXN0b3JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobnRjX3RoZXJtaXN0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBudGNfdGhlcm1pc3Rvcl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm50Y190aGVybWlzdG9yX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KG50Y190aGVybWlzdG9yX2NsZWFudXApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk5UQyBUaGVybWlzdG9yIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTXl1bmdKb28gSGFtIDxteXVuZ2pvby5oYW1Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm50Yy10aGVybWlzdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMzdiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZwpAQCAtMCwwICsxLDEwMCBAQAorIworIyBQTUJ1cyBjaGlwIGRyaXZlcnMgY29uZmlndXJhdGlvbgorIworCittZW51Y29uZmlnIFBNQlVTCisJdHJpc3RhdGUgIlBNQnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IHllcyBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQTUJ1cyBzdXBwb3J0LgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHBtYnVzX2NvcmUuCisKK2lmIFBNQlVTCisKK2NvbmZpZyBTRU5TT1JTX1BNQlVTCisJdHJpc3RhdGUgIkdlbmVyaWMgUE1CdXMgZGV2aWNlcyIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0IGZvciBnZW5lcmljCisJICBQTUJ1cyBkZXZpY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIEFEUDQwMDAsIEJNUjQ1MCwgQk1SNDUxLAorCSAgQk1SNDUzLCBCTVI0NTQsIExUQzI5NzgsIE5DUDQyMDAsIGFuZCBOQ1A0MjA4LgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHBtYnVzLgorCitjb25maWcgU0VOU09SU19BRE0xMjc1CisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFETTEyNzUiCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgQW5hbG9nCisJICBEZXZpY2VzIEFETTEyNzUgSG90LVN3YXAgQ29udHJvbGxlciBhbmQgRGlnaXRhbCBQb3dlciBNb25pdG9yLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIGFkbTEyNzUuCisKK2NvbmZpZyBTRU5TT1JTX0xNMjUwNjYKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTI1MDY2IGFuZCBjb21wYXRpYmxlcyIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0IGZvciBOYXRpb25hbAorCSAgU2VtaWNvbmR1Y3RvciBMTTI1MDY2LCBMTTUwNjQsIGFuZCBMTTUwNjYuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbG0yNTA2Ni4KKworY29uZmlnIFNFTlNPUlNfTUFYMTYwNjQKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYMTYwNjQiCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgTWF4aW0KKwkgIE1BWDE2MDY0LgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIG1heDE2MDY0LgorCitjb25maWcgU0VOU09SU19NQVgzNDQ0MAorCXRyaXN0YXRlICJNYXhpbSBNQVgzNDQ0MC9NQVgzNDQ0MSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgaGFyZHdhcmUgbW9uaXRvcmluZyBzdXBwb3J0IGZvciBNYXhpbQorCSAgTUFYMzQ0NDAgYW5kIE1BWDM0NDQxLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIG1heDM0NDQwLgorCitjb25maWcgU0VOU09SU19NQVg4Njg4CisJdHJpc3RhdGUgIk1heGltIE1BWDg2ODgiCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IGhhcmR3YXJlIG1vbml0b3Jpbmcgc3VwcG9ydCBmb3IgTWF4aW0KKwkgIE1BWDg2ODguCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbWF4ODY4OC4KKworY29uZmlnIFNFTlNPUlNfVUNEOTAwMAorCXRyaXN0YXRlICJUSSBVQ0Q5MDEyMCwgVUNEOTAxMjQsIFVDRDkwOTAsIFVDRDkwOTEwIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIFRJCisJICBVQ0Q5MDEyMCwgVUNEOTAxMjQsIFVDRDkwOTAsIFVDRDkwOTEwIFNlcXVlbmNlciBhbmQgU3lzdGVtIEhlYWx0aAorCSAgQ29udHJvbGxlcnMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgdWNkOTAwMC4KKworY29uZmlnIFNFTlNPUlNfVUNEOTIwMAorCXRyaXN0YXRlICJUSSBVQ0Q5MjIwLCBVQ0Q5MjIyLCBVQ0Q5MjI0LCBVQ0Q5MjQwLCBVQ0Q5MjQ0LCBVQ0Q5MjQ2LCBVQ0Q5MjQ4IgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQgZm9yIFRJCisJICBVQ0Q5MjIwLCBVQ0Q5MjIyLCBVQ0Q5MjI0LCBVQ0Q5MjQwLCBVQ0Q5MjQ0LCBVQ0Q5MjQ2LCBhbmQgVUNEOTI0OAorCSAgRGlnaXRhbCBQV00gU3lzdGVtIENvbnRyb2xsZXJzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHVjZDkyMDAuCisKK2VuZGlmICMgUE1CVVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcG1idXMvTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyM2VlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFBNQnVzIGNoaXAgZHJpdmVycy4KKyMKKworb2JqLSQoQ09ORklHX1BNQlVTKQkJKz0gcG1idXNfY29yZS5vCitvYmotJChDT05GSUdfU0VOU09SU19QTUJVUykJKz0gcG1idXMubworb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTI3NSkJKz0gYWRtMTI3NS5vCitvYmotJChDT05GSUdfU0VOU09SU19MTTI1MDY2KQkrPSBsbTI1MDY2Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX01BWDE2MDY0KQkrPSBtYXgxNjA2NC5vCitvYmotJChDT05GSUdfU0VOU09SU19NQVgzNDQ0MCkJKz0gbWF4MzQ0NDAubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYODY4OCkJKz0gbWF4ODY4OC5vCitvYmotJChDT05GSUdfU0VOU09SU19VQ0Q5MDAwKQkrPSB1Y2Q5MDAwLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1VDRDkyMDApCSs9IHVjZDkyMDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMjc1LmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL2FkbTEyNzUuYwpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2h3bW9uL2FkbTEyNzUuYwpyZW5hbWUgdG8gZHJpdmVycy9od21vbi9wbWJ1cy9hZG0xMjc1LmMKaW5kZXggOGJjMWJkNi4uYzkzNmUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMjc1LmMKKysrIGIvZHJpdmVycy9od21vbi9wbWJ1cy9hZG0xMjc1LmMKQEAgLTIzLDExICsyMyw2OCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgInBtYnVzLmgiCiAKKyNkZWZpbmUgQURNMTI3NV9QRUFLX0lPVVQJCTB4ZDAKKyNkZWZpbmUgQURNMTI3NV9QRUFLX1ZJTgkJMHhkMQorI2RlZmluZSBBRE0xMjc1X1BFQUtfVk9VVAkJMHhkMgogI2RlZmluZSBBRE0xMjc1X1BNT05fQ09ORklHCQkweGQ0CiAKICNkZWZpbmUgQURNMTI3NV9WSU5fVk9VVF9TRUxFQ1QJCSgxIDw8IDYpCiAjZGVmaW5lIEFETTEyNzVfVlJBTkdFCQkJKDEgPDwgNSkKIAorc3RhdGljIGludCBhZG0xMjc1X3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKQoreworCWludCByZXQ7CisKKwlpZiAocGFnZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUE1CVVNfVklSVF9SRUFEX0lPVVRfTUFYOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsIEFETTEyNzVfUEVBS19JT1VUKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFQURfVk9VVF9NQVg6CisJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMCwgQURNMTI3NV9QRUFLX1ZPVVQpOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9WSU5fTUFYOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsIEFETTEyNzVfUEVBS19WSU4pOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfSU9VVF9ISVNUT1JZOgorCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9WT1VUX0hJU1RPUlk6CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX1ZJTl9ISVNUT1JZOgorCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREFUQTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRtMTI3NV93cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcsCisJCQkJICAgdTE2IHdvcmQpCit7CisJaW50IHJldDsKKworCWlmIChwYWdlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX0lPVVRfSElTVE9SWToKKwkJcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMCwgQURNMTI3NV9QRUFLX0lPVVQsIDApOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfVk9VVF9ISVNUT1JZOgorCQlyZXQgPSBwbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAwLCBBRE0xMjc1X1BFQUtfVk9VVCwgMCk7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9WSU5fSElTVE9SWToKKwkJcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMCwgQURNMTI3NV9QRUFLX1ZJTiwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBhZG0xMjc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtNTAsMTQgKzEwNywxNyBAQAogCX0KIAogCWluZm8tPnBhZ2VzID0gMTsKLQlpbmZvLT5kaXJlY3RbUFNDX1ZPTFRBR0VfSU5dID0gdHJ1ZTsKLQlpbmZvLT5kaXJlY3RbUFNDX1ZPTFRBR0VfT1VUXSA9IHRydWU7Ci0JaW5mby0+ZGlyZWN0W1BTQ19DVVJSRU5UX09VVF0gPSB0cnVlOworCWluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9JTl0gPSBkaXJlY3Q7CisJaW5mby0+Zm9ybWF0W1BTQ19WT0xUQUdFX09VVF0gPSBkaXJlY3Q7CisJaW5mby0+Zm9ybWF0W1BTQ19DVVJSRU5UX09VVF0gPSBkaXJlY3Q7CiAJaW5mby0+bVtQU0NfQ1VSUkVOVF9PVVRdID0gODA3OwogCWluZm8tPmJbUFNDX0NVUlJFTlRfT1VUXSA9IDIwNDc1OwogCWluZm8tPlJbUFNDX0NVUlJFTlRfT1VUXSA9IC0xOwogCWluZm8tPmZ1bmNbMF0gPSBQTUJVU19IQVZFX0lPVVQgfCBQTUJVU19IQVZFX1NUQVRVU19JT1VUOwogCisJaW5mby0+cmVhZF93b3JkX2RhdGEgPSBhZG0xMjc1X3JlYWRfd29yZF9kYXRhOworCWluZm8tPndyaXRlX3dvcmRfZGF0YSA9IGFkbTEyNzVfd3JpdGVfd29yZF9kYXRhOworCiAJaWYgKGNvbmZpZyAmIEFETTEyNzVfVlJBTkdFKSB7CiAJCWluZm8tPm1bUFNDX1ZPTFRBR0VfSU5dID0gMTkxOTk7CiAJCWluZm8tPmJbUFNDX1ZPTFRBR0VfSU5dID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcG1idXMvbG0yNTA2Ni5jIGIvZHJpdmVycy9od21vbi9wbWJ1cy9sbTI1MDY2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyNTRmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvbG0yNTA2Ni5jCkBAIC0wLDAgKzEsMzUyIEBACisvKgorICogSGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXIgZm9yIExNMjUwNjYgLyBMTTUwNjQgLyBMTTUwNjYKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRXJpY3Nzb24gQUIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJwbWJ1cy5oIgorCitlbnVtIGNoaXBzIHsgbG0yNTA2NiwgbG01MDY0LCBsbTUwNjYgfTsKKworI2RlZmluZSBMTTI1MDY2X1JFQURfVkFVWAkJMHhkMAorI2RlZmluZSBMTTI1MDY2X01GUl9SRUFEX0lJTgkJMHhkMQorI2RlZmluZSBMTTI1MDY2X01GUl9SRUFEX1BJTgkJMHhkMgorI2RlZmluZSBMTTI1MDY2X01GUl9JSU5fT0NfV0FSTl9MSU1JVAkweGQzCisjZGVmaW5lIExNMjUwNjZfTUZSX1BJTl9PUF9XQVJOX0xJTUlUCTB4ZDQKKyNkZWZpbmUgTE0yNTA2Nl9SRUFEX1BJTl9QRUFLCQkweGQ1CisjZGVmaW5lIExNMjUwNjZfQ0xFQVJfUElOX1BFQUsJCTB4ZDYKKyNkZWZpbmUgTE0yNTA2Nl9ERVZJQ0VfU0VUVVAJCTB4ZDkKKyNkZWZpbmUgTE0yNTA2Nl9SRUFEX0FWR19WSU4JCTB4ZGMKKyNkZWZpbmUgTE0yNTA2Nl9SRUFEX0FWR19WT1VUCQkweGRkCisjZGVmaW5lIExNMjUwNjZfUkVBRF9BVkdfSUlOCQkweGRlCisjZGVmaW5lIExNMjUwNjZfUkVBRF9BVkdfUElOCQkweGRmCisKKyNkZWZpbmUgTE0yNTA2Nl9ERVZfU0VUVVBfQ0wJCSgxIDw8IDQpCS8qIEN1cnJlbnQgbGltaXQgKi8KKworc3RydWN0IGxtMjUwNjZfZGF0YSB7CisJaW50IGlkOworCXN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyBpbmZvOworfTsKKworI2RlZmluZSB0b19sbTI1MDY2X2RhdGEoeCkgIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbG0yNTA2Nl9kYXRhLCBpbmZvKQorCitzdGF0aWMgaW50IGxtMjUwNjZfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCit7CisJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvID0gcG1idXNfZ2V0X2RyaXZlcl9pbmZvKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IGxtMjUwNjZfZGF0YSAqZGF0YSA9IHRvX2xtMjUwNjZfZGF0YShpbmZvKTsKKwlpbnQgcmV0OworCisJaWYgKHBhZ2UgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE1hcCBSRUFEX1ZBVVggaW50byBSRUFEX1ZPVVQgcmVnaXN0ZXIgb24gcGFnZSAxICovCisJaWYgKHBhZ2UgPT0gMSkgeworCQlzd2l0Y2ggKHJlZykgeworCQljYXNlIFBNQlVTX1JFQURfVk9VVDoKKwkJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMCwKKwkJCQkJCSAgIExNMjUwNjZfUkVBRF9WQVVYKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCQkJLyogQWRqdXN0IHJldHVybmVkIHZhbHVlIHRvIG1hdGNoIFZPVVQgY29lZmZpY2llbnRzICovCisJCQlzd2l0Y2ggKGRhdGEtPmlkKSB7CisJCQljYXNlIGxtMjUwNjY6CisJCQkJLyogVk9VVDogNC41NCBtViBWQVVYOiAyODMuMiB1ViBMU0IgKi8KKwkJCQlyZXQgPSBESVZfUk9VTkRfQ0xPU0VTVChyZXQgKiAyODMyLCA0NTQwMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIGxtNTA2NDoKKwkJCQkvKiBWT1VUOiA0LjUzIG1WIFZBVVg6IDcwMCB1ViBMU0IgKi8KKwkJCQlyZXQgPSBESVZfUk9VTkRfQ0xPU0VTVChyZXQgKiA3MCwgNDUzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgbG01MDY2OgorCQkJCS8qIFZPVVQ6IDIuMTggbVYgVkFVWDogNzI1IHVWIExTQiAqLworCQkJCXJldCA9IERJVl9ST1VORF9DTE9TRVNUKHJldCAqIDcyNSwgMjE4MCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIE5vIG90aGVyIHZhbGlkIHJlZ2lzdGVycyBvbiBwYWdlIDEgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBNQlVTX1JFQURfSUlOOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsIExNMjUwNjZfTUZSX1JFQURfSUlOKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19SRUFEX1BJTjoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLCBMTTI1MDY2X01GUl9SRUFEX1BJTik7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfSUlOX09DX1dBUk5fTElNSVQ6CisJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMCwKKwkJCQkJICAgTE0yNTA2Nl9NRlJfSUlOX09DX1dBUk5fTElNSVQpOworCQlicmVhazsKKwljYXNlIFBNQlVTX1BJTl9PUF9XQVJOX0xJTUlUOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsCisJCQkJCSAgIExNMjUwNjZfTUZSX1BJTl9PUF9XQVJOX0xJTUlUKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFQURfVklOX0FWRzoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLCBMTTI1MDY2X1JFQURfQVZHX1ZJTik7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfVklSVF9SRUFEX1ZPVVRfQVZHOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsIExNMjUwNjZfUkVBRF9BVkdfVk9VVCk7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfVklSVF9SRUFEX0lJTl9BVkc6CisJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMCwgTE0yNTA2Nl9SRUFEX0FWR19JSU4pOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9QSU5fQVZHOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDAsIExNMjUwNjZfUkVBRF9BVkdfUElOKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFQURfUElOX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLCBMTTI1MDY2X1JFQURfUElOX1BFQUspOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfUElOX0hJU1RPUlk6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG0yNTA2Nl93cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcsCisJCQkJICAgdTE2IHdvcmQpCit7CisJaW50IHJldDsKKworCWlmIChwYWdlID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUE1CVVNfSUlOX09DX1dBUk5fTElNSVQ6CisJCXJldCA9IHBtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDAsCisJCQkJCSAgICBMTTI1MDY2X01GUl9JSU5fT0NfV0FSTl9MSU1JVCwKKwkJCQkJICAgIHdvcmQpOworCQlicmVhazsKKwljYXNlIFBNQlVTX1BJTl9PUF9XQVJOX0xJTUlUOgorCQlyZXQgPSBwbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAwLAorCQkJCQkgICAgTE0yNTA2Nl9NRlJfUElOX09QX1dBUk5fTElNSVQsCisJCQkJCSAgICB3b3JkKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX1BJTl9ISVNUT1JZOgorCQlyZXQgPSBwbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgMCwgTE0yNTA2Nl9DTEVBUl9QSU5fUEVBSyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsbTI1MDY2X3dyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHZhbHVlKQoreworCWlmIChwYWdlID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGFnZSA9PSAwKQorCQlyZXR1cm4gcG1idXNfd3JpdGVfYnl0ZShjbGllbnQsIDAsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxtMjUwNjZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludCBjb25maWc7CisJaW50IHJldDsKKwlzdHJ1Y3QgbG0yNTA2Nl9kYXRhICpkYXRhOworCXN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqaW5mbzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG0yNTA2Nl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNMjUwNjZfREVWSUNFX1NFVFVQKTsKKwlpZiAoY29uZmlnIDwgMCkgeworCQlyZXQgPSBjb25maWc7CisJCWdvdG8gZXJyX21lbTsKKwl9CisKKwlkYXRhLT5pZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpbmZvID0gJmRhdGEtPmluZm87CisKKwlpbmZvLT5wYWdlcyA9IDI7CisJaW5mby0+Zm9ybWF0W1BTQ19WT0xUQUdFX0lOXSA9IGRpcmVjdDsKKwlpbmZvLT5mb3JtYXRbUFNDX1ZPTFRBR0VfT1VUXSA9IGRpcmVjdDsKKwlpbmZvLT5mb3JtYXRbUFNDX0NVUlJFTlRfSU5dID0gZGlyZWN0OworCWluZm8tPmZvcm1hdFtQU0NfVEVNUEVSQVRVUkVdID0gZGlyZWN0OworCWluZm8tPmZvcm1hdFtQU0NfUE9XRVJdID0gZGlyZWN0OworCisJaW5mby0+bVtQU0NfVEVNUEVSQVRVUkVdID0gMTY7CisJaW5mby0+YltQU0NfVEVNUEVSQVRVUkVdID0gMDsKKwlpbmZvLT5SW1BTQ19URU1QRVJBVFVSRV0gPSAwOworCisJaW5mby0+ZnVuY1swXSA9IFBNQlVTX0hBVkVfVklOIHwgUE1CVVNfSEFWRV9WT1VUCisJICB8IFBNQlVTX0hBVkVfU1RBVFVTX1ZPVVQgfCBQTUJVU19IQVZFX1BJTiB8IFBNQlVTX0hBVkVfSUlOCisJICB8IFBNQlVTX0hBVkVfU1RBVFVTX0lOUFVUIHwgUE1CVVNfSEFWRV9URU1QIHwgUE1CVVNfSEFWRV9TVEFUVVNfVEVNUDsKKwlpbmZvLT5mdW5jWzFdID0gUE1CVVNfSEFWRV9WT1VUOworCisJaW5mby0+cmVhZF93b3JkX2RhdGEgPSBsbTI1MDY2X3JlYWRfd29yZF9kYXRhOworCWluZm8tPndyaXRlX3dvcmRfZGF0YSA9IGxtMjUwNjZfd3JpdGVfd29yZF9kYXRhOworCWluZm8tPndyaXRlX2J5dGUgPSBsbTI1MDY2X3dyaXRlX2J5dGU7CisKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfZGF0YSkgeworCWNhc2UgbG0yNTA2NjoKKwkJaW5mby0+bVtQU0NfVk9MVEFHRV9JTl0gPSAyMjA3MDsKKwkJaW5mby0+YltQU0NfVk9MVEFHRV9JTl0gPSAwOworCQlpbmZvLT5SW1BTQ19WT0xUQUdFX0lOXSA9IC0yOworCQlpbmZvLT5tW1BTQ19WT0xUQUdFX09VVF0gPSAyMjA3MDsKKwkJaW5mby0+YltQU0NfVk9MVEFHRV9PVVRdID0gMDsKKwkJaW5mby0+UltQU0NfVk9MVEFHRV9PVVRdID0gLTI7CisKKwkJaWYgKGNvbmZpZyAmIExNMjUwNjZfREVWX1NFVFVQX0NMKSB7CisJCQlpbmZvLT5tW1BTQ19DVVJSRU5UX0lOXSA9IDY4NTI7CisJCQlpbmZvLT5iW1BTQ19DVVJSRU5UX0lOXSA9IDA7CisJCQlpbmZvLT5SW1BTQ19DVVJSRU5UX0lOXSA9IC0yOworCQkJaW5mby0+bVtQU0NfUE9XRVJdID0gMzY5OworCQkJaW5mby0+YltQU0NfUE9XRVJdID0gMDsKKwkJCWluZm8tPlJbUFNDX1BPV0VSXSA9IC0yOworCQl9IGVsc2UgeworCQkJaW5mby0+bVtQU0NfQ1VSUkVOVF9JTl0gPSAxMzY2MTsKKwkJCWluZm8tPmJbUFNDX0NVUlJFTlRfSU5dID0gMDsKKwkJCWluZm8tPlJbUFNDX0NVUlJFTlRfSU5dID0gLTI7CisJCQlpbmZvLT5tW1BTQ19QT1dFUl0gPSA3MzY7CisJCQlpbmZvLT5iW1BTQ19QT1dFUl0gPSAwOworCQkJaW5mby0+UltQU0NfUE9XRVJdID0gLTI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsbTUwNjQ6CisJCWluZm8tPm1bUFNDX1ZPTFRBR0VfSU5dID0gMjIwNzU7CisJCWluZm8tPmJbUFNDX1ZPTFRBR0VfSU5dID0gMDsKKwkJaW5mby0+UltQU0NfVk9MVEFHRV9JTl0gPSAtMjsKKwkJaW5mby0+bVtQU0NfVk9MVEFHRV9PVVRdID0gMjIwNzU7CisJCWluZm8tPmJbUFNDX1ZPTFRBR0VfT1VUXSA9IDA7CisJCWluZm8tPlJbUFNDX1ZPTFRBR0VfT1VUXSA9IC0yOworCisJCWlmIChjb25maWcgJiBMTTI1MDY2X0RFVl9TRVRVUF9DTCkgeworCQkJaW5mby0+bVtQU0NfQ1VSUkVOVF9JTl0gPSA2NzEzOworCQkJaW5mby0+YltQU0NfQ1VSUkVOVF9JTl0gPSAwOworCQkJaW5mby0+UltQU0NfQ1VSUkVOVF9JTl0gPSAtMjsKKwkJCWluZm8tPm1bUFNDX1BPV0VSXSA9IDM2MTk7CisJCQlpbmZvLT5iW1BTQ19QT1dFUl0gPSAwOworCQkJaW5mby0+UltQU0NfUE9XRVJdID0gLTM7CisJCX0gZWxzZSB7CisJCQlpbmZvLT5tW1BTQ19DVVJSRU5UX0lOXSA9IDEzNDI2OworCQkJaW5mby0+YltQU0NfQ1VSUkVOVF9JTl0gPSAwOworCQkJaW5mby0+UltQU0NfQ1VSUkVOVF9JTl0gPSAtMjsKKwkJCWluZm8tPm1bUFNDX1BPV0VSXSA9IDcyMzg7CisJCQlpbmZvLT5iW1BTQ19QT1dFUl0gPSAwOworCQkJaW5mby0+UltQU0NfUE9XRVJdID0gLTM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsbTUwNjY6CisJCWluZm8tPm1bUFNDX1ZPTFRBR0VfSU5dID0gNDU4NzsKKwkJaW5mby0+YltQU0NfVk9MVEFHRV9JTl0gPSAwOworCQlpbmZvLT5SW1BTQ19WT0xUQUdFX0lOXSA9IC0yOworCQlpbmZvLT5tW1BTQ19WT0xUQUdFX09VVF0gPSA0NTg3OworCQlpbmZvLT5iW1BTQ19WT0xUQUdFX09VVF0gPSAwOworCQlpbmZvLT5SW1BTQ19WT0xUQUdFX09VVF0gPSAtMjsKKworCQlpZiAoY29uZmlnICYgTE0yNTA2Nl9ERVZfU0VUVVBfQ0wpIHsKKwkJCWluZm8tPm1bUFNDX0NVUlJFTlRfSU5dID0gMTA3NTM7CisJCQlpbmZvLT5iW1BTQ19DVVJSRU5UX0lOXSA9IDA7CisJCQlpbmZvLT5SW1BTQ19DVVJSRU5UX0lOXSA9IC0yOworCQkJaW5mby0+bVtQU0NfUE9XRVJdID0gMTIwNDsKKwkJCWluZm8tPmJbUFNDX1BPV0VSXSA9IDA7CisJCQlpbmZvLT5SW1BTQ19QT1dFUl0gPSAtMzsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPm1bUFNDX0NVUlJFTlRfSU5dID0gNTQwNTsKKwkJCWluZm8tPmJbUFNDX0NVUlJFTlRfSU5dID0gMDsKKwkJCWluZm8tPlJbUFNDX0NVUlJFTlRfSU5dID0gLTI7CisJCQlpbmZvLT5tW1BTQ19QT1dFUl0gPSA2MDU7CisJCQlpbmZvLT5iW1BTQ19QT1dFUl0gPSAwOworCQkJaW5mby0+UltQU0NfUE9XRVJdID0gLTM7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfbWVtOworCX0KKworCXJldCA9IHBtYnVzX2RvX3Byb2JlKGNsaWVudCwgaWQsIGluZm8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX21lbTsKKwlyZXR1cm4gMDsKKworZXJyX21lbToKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxtMjUwNjZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvID0gcG1idXNfZ2V0X2RyaXZlcl9pbmZvKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IGxtMjUwNjZfZGF0YSAqZGF0YSA9IHRvX2xtMjUwNjZfZGF0YShpbmZvKTsKKwlpbnQgcmV0OworCisJcmV0ID0gcG1idXNfZG9fcmVtb3ZlKGNsaWVudCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtMjUwNjZfaWRbXSA9IHsKKwl7ImxtMjUwNjYiLCBsbTI1MDY2fSwKKwl7ImxtNTA2NCIsIGxtNTA2NH0sCisJeyJsbTUwNjYiLCBsbTUwNjZ9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtMjUwNjZfaWQpOworCisvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG0yNTA2Nl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAibG0yNTA2NiIsCisJCSAgIH0sCisJLnByb2JlID0gbG0yNTA2Nl9wcm9iZSwKKwkucmVtb3ZlID0gbG0yNTA2Nl9yZW1vdmUsCisJLmlkX3RhYmxlID0gbG0yNTA2Nl9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxtMjUwNjZfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbG0yNTA2Nl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbG0yNTA2Nl9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmxtMjUwNjZfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiR3VlbnRlciBSb2VjayIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUJ1cyBkcml2ZXIgZm9yIExNMjUwNjYvTE01MDY0L0xNNTA2NiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQobG0yNTA2Nl9pbml0KTsKK21vZHVsZV9leGl0KGxtMjUwNjZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDE2MDY0LmMgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL21heDE2MDY0LmMKc2ltaWxhcml0eSBpbmRleCA2NiUKcmVuYW1lIGZyb20gZHJpdmVycy9od21vbi9tYXgxNjA2NC5jCnJlbmFtZSB0byBkcml2ZXJzL2h3bW9uL3BtYnVzL21heDE2MDY0LmMKaW5kZXggMWQ2ZDcxNy4uZTUwYjI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjA2NC5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvbWF4MTYwNjQuYwpAQCAtMjUsMTEgKzI1LDYwIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSAicG1idXMuaCIKIAorI2RlZmluZSBNQVgxNjA2NF9NRlJfVk9VVF9QRUFLCQkweGQ0CisjZGVmaW5lIE1BWDE2MDY0X01GUl9URU1QRVJBVFVSRV9QRUFLCTB4ZDYKKworc3RhdGljIGludCBtYXgxNjA2NF9yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZykKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9WT1VUX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCBwYWdlLAorCQkJCQkgICBNQVgxNjA2NF9NRlJfVk9VVF9QRUFLKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFQURfVEVNUF9NQVg6CisJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgcGFnZSwKKwkJCQkJICAgTUFYMTYwNjRfTUZSX1RFTVBFUkFUVVJFX1BFQUspOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfVk9VVF9ISVNUT1JZOgorCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9URU1QX0hJU1RPUlk6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXgxNjA2NF93cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsCisJCQkJICAgIGludCByZWcsIHUxNiB3b3JkKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9WT1VUX0hJU1RPUlk6CisJCXJldCA9IHBtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsCisJCQkJCSAgICBNQVgxNjA2NF9NRlJfVk9VVF9QRUFLLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX1RFTVBfSElTVE9SWToKKwkJcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcGFnZSwKKwkJCQkJICAgIE1BWDE2MDY0X01GUl9URU1QRVJBVFVSRV9QRUFLLAorCQkJCQkgICAgMHhmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvIG1heDE2MDY0X2luZm8gPSB7CiAJLnBhZ2VzID0gNCwKLQkuZGlyZWN0W1BTQ19WT0xUQUdFX0lOXSA9IHRydWUsCi0JLmRpcmVjdFtQU0NfVk9MVEFHRV9PVVRdID0gdHJ1ZSwKLQkuZGlyZWN0W1BTQ19URU1QRVJBVFVSRV0gPSB0cnVlLAorCS5mb3JtYXRbUFNDX1ZPTFRBR0VfSU5dID0gZGlyZWN0LAorCS5mb3JtYXRbUFNDX1ZPTFRBR0VfT1VUXSA9IGRpcmVjdCwKKwkuZm9ybWF0W1BTQ19URU1QRVJBVFVSRV0gPSBkaXJlY3QsCiAJLm1bUFNDX1ZPTFRBR0VfSU5dID0gMTk5OTUsCiAJLmJbUFNDX1ZPTFRBR0VfSU5dID0gMCwKIAkuUltQU0NfVk9MVEFHRV9JTl0gPSAtMSwKQEAgLTQ0LDYgKzkzLDggQEAKIAkuZnVuY1sxXSA9IFBNQlVTX0hBVkVfVk9VVCB8IFBNQlVTX0hBVkVfU1RBVFVTX1ZPVVQsCiAJLmZ1bmNbMl0gPSBQTUJVU19IQVZFX1ZPVVQgfCBQTUJVU19IQVZFX1NUQVRVU19WT1VULAogCS5mdW5jWzNdID0gUE1CVVNfSEFWRV9WT1VUIHwgUE1CVVNfSEFWRV9TVEFUVVNfVk9VVCwKKwkucmVhZF93b3JkX2RhdGEgPSBtYXgxNjA2NF9yZWFkX3dvcmRfZGF0YSwKKwkud3JpdGVfd29yZF9kYXRhID0gbWF4MTYwNjRfd3JpdGVfd29yZF9kYXRhLAogfTsKIAogc3RhdGljIGludCBtYXgxNjA2NF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgzNDQ0MC5jIGIvZHJpdmVycy9od21vbi9wbWJ1cy9tYXgzNDQ0MC5jCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vbWF4MzQ0NDAuYwpyZW5hbWUgdG8gZHJpdmVycy9od21vbi9wbWJ1cy9tYXgzNDQ0MC5jCmluZGV4IGRiMTFlMWEuLmZkYTYyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4MzQ0NDAuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL21heDM0NDQwLmMKQEAgLTI3LDExICsyNyw3MCBAQAogCiBlbnVtIGNoaXBzIHsgbWF4MzQ0NDAsIG1heDM0NDQxIH07CiAKKyNkZWZpbmUgTUFYMzQ0NDBfTUZSX1ZPVVRfUEVBSwkJMHhkNAorI2RlZmluZSBNQVgzNDQ0MF9NRlJfSU9VVF9QRUFLCQkweGQ1CisjZGVmaW5lIE1BWDM0NDQwX01GUl9URU1QRVJBVFVSRV9QRUFLCTB4ZDYKKwogI2RlZmluZSBNQVgzNDQ0MF9TVEFUVVNfT0NfV0FSTgkJKDEgPDwgMCkKICNkZWZpbmUgTUFYMzQ0NDBfU1RBVFVTX09DX0ZBVUxUCSgxIDw8IDEpCiAjZGVmaW5lIE1BWDM0NDQwX1NUQVRVU19PVF9GQVVMVAkoMSA8PCA1KQogI2RlZmluZSBNQVgzNDQ0MF9TVEFUVVNfT1RfV0FSTgkJKDEgPDwgNikKIAorc3RhdGljIGludCBtYXgzNDQ0MF9yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZykKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9WT1VUX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCBwYWdlLAorCQkJCQkgICBNQVgzNDQ0MF9NRlJfVk9VVF9QRUFLKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFQURfSU9VVF9NQVg6CisJCXJldCA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgcGFnZSwKKwkJCQkJICAgTUFYMzQ0NDBfTUZSX0lPVVRfUEVBSyk7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfVklSVF9SRUFEX1RFTVBfTUFYOgorCQlyZXQgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsCisJCQkJCSAgIE1BWDM0NDQwX01GUl9URU1QRVJBVFVSRV9QRUFLKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX1ZPVVRfSElTVE9SWToKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfSU9VVF9ISVNUT1JZOgorCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9URU1QX0hJU1RPUlk6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXgzNDQ0MF93cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsCisJCQkJICAgIGludCByZWcsIHUxNiB3b3JkKQoreworCWludCByZXQ7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9WT1VUX0hJU1RPUlk6CisJCXJldCA9IHBtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsCisJCQkJCSAgICBNQVgzNDQ0MF9NRlJfVk9VVF9QRUFLLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX0lPVVRfSElTVE9SWToKKwkJcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcGFnZSwKKwkJCQkJICAgIE1BWDM0NDQwX01GUl9JT1VUX1BFQUssIDApOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfVEVNUF9ISVNUT1JZOgorCQlyZXQgPSBwbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCBwYWdlLAorCQkJCQkgICAgTUFYMzQ0NDBfTUZSX1RFTVBFUkFUVVJFX1BFQUssCisJCQkJCSAgICAweGZmZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREFUQTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgbWF4MzQ0NDBfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCiB7CiAJaW50IHJldDsKQEAgLTcyLDEwICsxMzEsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gbWF4MzQ0NDBfaW5mb1tdID0gewogCVttYXgzNDQ0MF0gPSB7CiAJCS5wYWdlcyA9IDE0LAotCQkuZGlyZWN0W1BTQ19WT0xUQUdFX0lOXSA9IHRydWUsCi0JCS5kaXJlY3RbUFNDX1ZPTFRBR0VfT1VUXSA9IHRydWUsCi0JCS5kaXJlY3RbUFNDX1RFTVBFUkFUVVJFXSA9IHRydWUsCi0JCS5kaXJlY3RbUFNDX0NVUlJFTlRfT1VUXSA9IHRydWUsCisJCS5mb3JtYXRbUFNDX1ZPTFRBR0VfSU5dID0gZGlyZWN0LAorCQkuZm9ybWF0W1BTQ19WT0xUQUdFX09VVF0gPSBkaXJlY3QsCisJCS5mb3JtYXRbUFNDX1RFTVBFUkFUVVJFXSA9IGRpcmVjdCwKKwkJLmZvcm1hdFtQU0NfQ1VSUkVOVF9PVVRdID0gZGlyZWN0LAogCQkubVtQU0NfVk9MVEFHRV9JTl0gPSAxLAogCQkuYltQU0NfVk9MVEFHRV9JTl0gPSAwLAogCQkuUltQU0NfVk9MVEFHRV9JTl0gPSAzLAkgICAgLyogUiA9IDAgaW4gZGF0YXNoZWV0IHJlZmxlY3RzIG1WICovCkBAIC0xMDksMTQgKzE2OCwxNiBAQAogCQkuZnVuY1sxMl0gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuZnVuY1sxM10gPSBQTUJVU19IQVZFX1RFTVAgfCBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkucmVhZF9ieXRlX2RhdGEgPSBtYXgzNDQ0MF9yZWFkX2J5dGVfZGF0YSwKKwkJLnJlYWRfd29yZF9kYXRhID0gbWF4MzQ0NDBfcmVhZF93b3JkX2RhdGEsCisJCS53cml0ZV93b3JkX2RhdGEgPSBtYXgzNDQ0MF93cml0ZV93b3JkX2RhdGEsCiAJfSwKIAlbbWF4MzQ0NDFdID0gewogCQkucGFnZXMgPSAxMiwKLQkJLmRpcmVjdFtQU0NfVk9MVEFHRV9JTl0gPSB0cnVlLAotCQkuZGlyZWN0W1BTQ19WT0xUQUdFX09VVF0gPSB0cnVlLAotCQkuZGlyZWN0W1BTQ19URU1QRVJBVFVSRV0gPSB0cnVlLAotCQkuZGlyZWN0W1BTQ19DVVJSRU5UX09VVF0gPSB0cnVlLAotCQkuZGlyZWN0W1BTQ19GQU5dID0gdHJ1ZSwKKwkJLmZvcm1hdFtQU0NfVk9MVEFHRV9JTl0gPSBkaXJlY3QsCisJCS5mb3JtYXRbUFNDX1ZPTFRBR0VfT1VUXSA9IGRpcmVjdCwKKwkJLmZvcm1hdFtQU0NfVEVNUEVSQVRVUkVdID0gZGlyZWN0LAorCQkuZm9ybWF0W1BTQ19DVVJSRU5UX09VVF0gPSBkaXJlY3QsCisJCS5mb3JtYXRbUFNDX0ZBTl0gPSBkaXJlY3QsCiAJCS5tW1BTQ19WT0xUQUdFX0lOXSA9IDEsCiAJCS5iW1BTQ19WT0xUQUdFX0lOXSA9IDAsCiAJCS5SW1BTQ19WT0xUQUdFX0lOXSA9IDMsCkBAIC0xNTAsNiArMjExLDggQEAKIAkJLmZ1bmNbMTBdID0gUE1CVVNfSEFWRV9URU1QIHwgUE1CVVNfSEFWRV9TVEFUVVNfVEVNUCwKIAkJLmZ1bmNbMTFdID0gUE1CVVNfSEFWRV9URU1QIHwgUE1CVVNfSEFWRV9TVEFUVVNfVEVNUCwKIAkJLnJlYWRfYnl0ZV9kYXRhID0gbWF4MzQ0NDBfcmVhZF9ieXRlX2RhdGEsCisJCS5yZWFkX3dvcmRfZGF0YSA9IG1heDM0NDQwX3JlYWRfd29yZF9kYXRhLAorCQkud3JpdGVfd29yZF9kYXRhID0gbWF4MzQ0NDBfd3JpdGVfd29yZF9kYXRhLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDg2ODguYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvbWF4ODY4OC5jCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vbWF4ODY4OC5jCnJlbmFtZSB0byBkcml2ZXJzL2h3bW9uL3BtYnVzL21heDg2ODguYwppbmRleCA3ZmI5M2Y0Li5jM2U3MmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDg2ODguYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL21heDg2ODguYwpAQCAtMjUsNiArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgInBtYnVzLmgiCiAKKyNkZWZpbmUgTUFYODY4OF9NRlJfVk9VVF9QRUFLCQkweGQ0CisjZGVmaW5lIE1BWDg2ODhfTUZSX0lPVVRfUEVBSwkJMHhkNQorI2RlZmluZSBNQVg4Njg4X01GUl9URU1QRVJBVFVSRV9QRUFLCTB4ZDYKICNkZWZpbmUgTUFYODY4OF9NRkdfU1RBVFVTCQkweGQ4CiAKICNkZWZpbmUgTUFYODY4OF9TVEFUVVNfT0NfRkFVTFQJCSgxIDw8IDQpCkBAIC0zNyw2ICs0MCw2MiBAQAogI2RlZmluZSBNQVg4Njg4X1NUQVRVU19PVF9GQVVMVAkJKDEgPDwgMTMpCiAjZGVmaW5lIE1BWDg2ODhfU1RBVFVTX09UX1dBUk5JTkcJKDEgPDwgMTQpCiAKK3N0YXRpYyBpbnQgbWF4ODY4OF9yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZykKK3sKKwlpbnQgcmV0OworCisJaWYgKHBhZ2UpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9WT1VUX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLCBNQVg4Njg4X01GUl9WT1VUX1BFQUspOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9JT1VUX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLCBNQVg4Njg4X01GUl9JT1VUX1BFQUspOworCQlicmVhazsKKwljYXNlIFBNQlVTX1ZJUlRfUkVBRF9URU1QX01BWDoKKwkJcmV0ID0gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAwLAorCQkJCQkgICBNQVg4Njg4X01GUl9URU1QRVJBVFVSRV9QRUFLKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX1ZPVVRfSElTVE9SWToKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfSU9VVF9ISVNUT1JZOgorCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9URU1QX0hJU1RPUlk6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg4Njg4X3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgaW50IHJlZywKKwkJCQkgICB1MTYgd29yZCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFBNQlVTX1ZJUlRfUkVTRVRfVk9VVF9ISVNUT1JZOgorCQlyZXQgPSBwbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAwLCBNQVg4Njg4X01GUl9WT1VUX1BFQUssCisJCQkJCSAgICAwKTsKKwkJYnJlYWs7CisJY2FzZSBQTUJVU19WSVJUX1JFU0VUX0lPVVRfSElTVE9SWToKKwkJcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMCwgTUFYODY4OF9NRlJfSU9VVF9QRUFLLAorCQkJCQkgICAgMCk7CisJCWJyZWFrOworCWNhc2UgUE1CVVNfVklSVF9SRVNFVF9URU1QX0hJU1RPUlk6CisJCXJldCA9IHBtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDAsCisJCQkJCSAgICBNQVg4Njg4X01GUl9URU1QRVJBVFVSRV9QRUFLLAorCQkJCQkgICAgMHhmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG1heDg2ODhfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCiB7CiAJaW50IHJldCA9IDA7CkBAIC05MSwxMCArMTUwLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gbWF4ODY4OF9pbmZvID0gewogCS5wYWdlcyA9IDEsCi0JLmRpcmVjdFtQU0NfVk9MVEFHRV9JTl0gPSB0cnVlLAotCS5kaXJlY3RbUFNDX1ZPTFRBR0VfT1VUXSA9IHRydWUsCi0JLmRpcmVjdFtQU0NfVEVNUEVSQVRVUkVdID0gdHJ1ZSwKLQkuZGlyZWN0W1BTQ19DVVJSRU5UX09VVF0gPSB0cnVlLAorCS5mb3JtYXRbUFNDX1ZPTFRBR0VfSU5dID0gZGlyZWN0LAorCS5mb3JtYXRbUFNDX1ZPTFRBR0VfT1VUXSA9IGRpcmVjdCwKKwkuZm9ybWF0W1BTQ19URU1QRVJBVFVSRV0gPSBkaXJlY3QsCisJLmZvcm1hdFtQU0NfQ1VSUkVOVF9PVVRdID0gZGlyZWN0LAogCS5tW1BTQ19WT0xUQUdFX0lOXSA9IDE5OTk1LAogCS5iW1BTQ19WT0xUQUdFX0lOXSA9IDAsCiAJLlJbUFNDX1ZPTFRBR0VfSU5dID0gLTEsCkBAIC0xMTEsNiArMTcwLDggQEAKIAkJfCBQTUJVU19IQVZFX1NUQVRVU19WT1VUIHwgUE1CVVNfSEFWRV9TVEFUVVNfSU9VVAogCQl8IFBNQlVTX0hBVkVfU1RBVFVTX1RFTVAsCiAJLnJlYWRfYnl0ZV9kYXRhID0gbWF4ODY4OF9yZWFkX2J5dGVfZGF0YSwKKwkucmVhZF93b3JkX2RhdGEgPSBtYXg4Njg4X3JlYWRfd29yZF9kYXRhLAorCS53cml0ZV93b3JkX2RhdGEgPSBtYXg4Njg4X3dyaXRlX3dvcmRfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgbWF4ODY4OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wbWJ1cy5jIGIvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vcG1idXMuYwpyZW5hbWUgdG8gZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5jCmluZGV4IDliMWYwYzMuLjczZGU5ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXMuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3BtYnVzLmMKQEAgLTk2LDYgKzk2LDggQEAKIHN0YXRpYyBpbnQgcG1idXNfaWRlbnRpZnkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvKQogeworCWludCByZXQgPSAwOworCiAJaWYgKCFpbmZvLT5wYWdlcykgewogCQkvKgogCQkgKiBDaGVjayBpZiB0aGUgUEFHRSBjb21tYW5kIGlzIHN1cHBvcnRlZC4gSWYgaXQgaXMsCkBAIC0xMTcsNiArMTE5LDI3IEBACiAJCX0KIAl9CiAKKwlpZiAocG1idXNfY2hlY2tfYnl0ZV9yZWdpc3RlcihjbGllbnQsIDAsIFBNQlVTX1ZPVVRfTU9ERSkpIHsKKwkJaW50IHZvdXRfbW9kZTsKKworCQl2b3V0X21vZGUgPSBwbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDAsIFBNQlVTX1ZPVVRfTU9ERSk7CisJCWlmICh2b3V0X21vZGUgPj0gMCAmJiB2b3V0X21vZGUgIT0gMHhmZikgeworCQkJc3dpdGNoICh2b3V0X21vZGUgPj4gNSkgeworCQkJY2FzZSAwOgorCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9PVVRdID0gdmlkOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9PVVRdID0gZGlyZWN0OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXQgPSAtRU5PREVWOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIFdlIHNob3VsZCBjaGVjayBpZiB0aGUgQ09FRkZJQ0lFTlRTIHJlZ2lzdGVyIGlzIHN1cHBvcnRlZC4KIAkgKiBJZiBpdCBpcywgYW5kIHRoZSBjaGlwIGlzIGNvbmZpZ3VyZWQgZm9yIGRpcmVjdCBtb2RlLCB3ZSBjYW4gcmVhZApAQCAtMTI1LDEzICsxNDgsMTggQEAKIAkgKgogCSAqIFRvIGRvIHRoaXMsIHdlIHdpbGwgbmVlZCBhY2Nlc3MgdG8gYSBjaGlwIHdoaWNoIGFjdHVhbGx5IHN1cHBvcnRzIHRoZQogCSAqIENPRUZGSUNJRU5UUyBjb21tYW5kLCBzaW5jZSB0aGUgY29tbWFuZCBpcyB0b28gY29tcGxleCB0byBpbXBsZW1lbnQKLQkgKiB3aXRob3V0IHRlc3RpbmcgaXQuCisJICogd2l0aG91dCB0ZXN0aW5nIGl0LiBVbnRpbCB0aGVuLCBhYm9ydCBpZiBhIGNoaXAgY29uZmlndXJlZCBmb3IgZGlyZWN0CisJICogbW9kZSB3YXMgZGV0ZWN0ZWQuCiAJICovCisJaWYgKGluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9PVVRdID09IGRpcmVjdCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGFib3J0OworCX0KIAogCS8qIFRyeSB0byBmaW5kIHNlbnNvciBncm91cHMgICovCiAJcG1idXNfZmluZF9zZW5zb3JfZ3JvdXBzKGNsaWVudCwgaW5mbyk7Ci0KLQlyZXR1cm4gMDsKK2Fib3J0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcG1idXNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTE3MiwxMSArMjAwLDE0IEBACiAgKiBVc2UgZHJpdmVyX2RhdGEgdG8gc2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwLgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcG1idXNfaWRbXSA9IHsKKwl7ImFkcDQwMDAiLCAxfSwKIAl7ImJtcjQ1MCIsIDF9LAogCXsiYm1yNDUxIiwgMX0sCiAJeyJibXI0NTMiLCAxfSwKIAl7ImJtcjQ1NCIsIDF9LAogCXsibHRjMjk3OCIsIDh9LAorCXsibmNwNDIwMCIsIDF9LAorCXsibmNwNDIwOCIsIDF9LAogCXsicG1idXMiLCAwfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcG1idXMuaCBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXMuaApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2h3bW9uL3BtYnVzLmgKcmVuYW1lIHRvIGRyaXZlcnMvaHdtb24vcG1idXMvcG1idXMuaAppbmRleCA1MDY0N2FiLi5hNmFlMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BtYnVzLmgKKysrIGIvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1cy5oCkBAIC0xMjYsNiArMTI2LDQyIEBACiAjZGVmaW5lIFBNQlVTX01GUl9TRVJJQUwJCTB4OUUKIAogLyoKKyAqIFZpcnR1YWwgcmVnaXN0ZXJzLgorICogVXNlZnVsIHRvIHN1cHBvcnQgYXR0cmlidXRlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBzdGFuZGFyZCBQTUJ1cworICogcmVnaXN0ZXJzIGJ1dCBleGlzdCBhcyBtYW51ZmFjdHVyZXIgc3BlY2lmaWMgcmVnaXN0ZXJzIG9uIGluZGl2aWR1YWwgY2hpcHMuCisgKiBNdXN0IGJlIG1hcHBlZCB0byByZWFsIHJlZ2lzdGVycyBpbiBkZXZpY2Ugc3BlY2lmaWMgY29kZS4KKyAqCisgKiBTZW1hbnRpY3M6CisgKiBWaXJ0dWFsIHJlZ2lzdGVycyBhcmUgYWxsIHdvcmQgc2l6ZS4KKyAqIFJFQUQgcmVnaXN0ZXJzIGFyZSByZWFkLW9ubHk7IHdyaXRlcyBhcmUgZWl0aGVyIGlnbm9yZWQgb3IgcmV0dXJuIGFuIGVycm9yLgorICogUkVTRVQgcmVnaXN0ZXJzIGFyZSByZWFkL3dyaXRlLiBSZWFkaW5nIHJldHVybnMgemVybyAodXNlZCBmb3IgZGV0ZWN0aW9uKSwKKyAqIHdyaXRpbmcgYW55IHZhbHVlIGNhdXNlcyB0aGUgYXNzb2NpYXRlZCBoaXN0b3J5IHRvIGJlIHJlc2V0LgorICovCisjZGVmaW5lIFBNQlVTX1ZJUlRfQkFTRQkJCTB4MTAwCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9URU1QX01JTgkoUE1CVVNfVklSVF9CQVNFICsgMCkKKyNkZWZpbmUgUE1CVVNfVklSVF9SRUFEX1RFTVBfTUFYCShQTUJVU19WSVJUX0JBU0UgKyAxKQorI2RlZmluZSBQTUJVU19WSVJUX1JFU0VUX1RFTVBfSElTVE9SWQkoUE1CVVNfVklSVF9CQVNFICsgMikKKyNkZWZpbmUgUE1CVVNfVklSVF9SRUFEX1ZJTl9BVkcJCShQTUJVU19WSVJUX0JBU0UgKyAzKQorI2RlZmluZSBQTUJVU19WSVJUX1JFQURfVklOX01JTgkJKFBNQlVTX1ZJUlRfQkFTRSArIDQpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9WSU5fTUFYCQkoUE1CVVNfVklSVF9CQVNFICsgNSkKKyNkZWZpbmUgUE1CVVNfVklSVF9SRVNFVF9WSU5fSElTVE9SWQkoUE1CVVNfVklSVF9CQVNFICsgNikKKyNkZWZpbmUgUE1CVVNfVklSVF9SRUFEX0lJTl9BVkcJCShQTUJVU19WSVJUX0JBU0UgKyA3KQorI2RlZmluZSBQTUJVU19WSVJUX1JFQURfSUlOX01JTgkJKFBNQlVTX1ZJUlRfQkFTRSArIDgpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9JSU5fTUFYCQkoUE1CVVNfVklSVF9CQVNFICsgOSkKKyNkZWZpbmUgUE1CVVNfVklSVF9SRVNFVF9JSU5fSElTVE9SWQkoUE1CVVNfVklSVF9CQVNFICsgMTApCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9QSU5fQVZHCQkoUE1CVVNfVklSVF9CQVNFICsgMTEpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9QSU5fTUFYCQkoUE1CVVNfVklSVF9CQVNFICsgMTIpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVTRVRfUElOX0hJU1RPUlkJKFBNQlVTX1ZJUlRfQkFTRSArIDEzKQorI2RlZmluZSBQTUJVU19WSVJUX1JFQURfVk9VVF9BVkcJKFBNQlVTX1ZJUlRfQkFTRSArIDE0KQorI2RlZmluZSBQTUJVU19WSVJUX1JFQURfVk9VVF9NSU4JKFBNQlVTX1ZJUlRfQkFTRSArIDE1KQorI2RlZmluZSBQTUJVU19WSVJUX1JFQURfVk9VVF9NQVgJKFBNQlVTX1ZJUlRfQkFTRSArIDE2KQorI2RlZmluZSBQTUJVU19WSVJUX1JFU0VUX1ZPVVRfSElTVE9SWQkoUE1CVVNfVklSVF9CQVNFICsgMTcpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9JT1VUX0FWRwkoUE1CVVNfVklSVF9CQVNFICsgMTgpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9JT1VUX01JTgkoUE1CVVNfVklSVF9CQVNFICsgMTkpCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVBRF9JT1VUX01BWAkoUE1CVVNfVklSVF9CQVNFICsgMjApCisjZGVmaW5lIFBNQlVTX1ZJUlRfUkVTRVRfSU9VVF9ISVNUT1JZCShQTUJVU19WSVJUX0JBU0UgKyAyMSkKKworLyoKICAqIENBUEFCSUxJVFkKICAqLwogI2RlZmluZSBQQl9DQVBBQklMSVRZX1NNQkFMRVJUCQkoMTw8NCkKQEAgLTI2NiwxMSArMzAyLDExIEBACiAjZGVmaW5lIFBNQlVTX0hBVkVfU1RBVFVTX0ZBTjEyCSgxIDw8IDE2KQogI2RlZmluZSBQTUJVU19IQVZFX1NUQVRVU19GQU4zNAkoMSA8PCAxNykKIAorZW51bSBwbWJ1c19kYXRhX2Zvcm1hdCB7IGxpbmVhciA9IDAsIGRpcmVjdCwgdmlkIH07CisKIHN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyB7CiAJaW50IHBhZ2VzOwkJLyogVG90YWwgbnVtYmVyIG9mIHBhZ2VzICovCi0JYm9vbCBkaXJlY3RbUFNDX05VTV9DTEFTU0VTXTsKLQkJCQkvKiB0cnVlIGlmIGRldmljZSB1c2VzIGRpcmVjdCBkYXRhIGZvcm1hdAotCQkJCSAgIGZvciB0aGUgZ2l2ZW4gc2Vuc29yIGNsYXNzICovCisJZW51bSBwbWJ1c19kYXRhX2Zvcm1hdCBmb3JtYXRbUFNDX05VTV9DTEFTU0VTXTsKIAkvKgogCSAqIFN1cHBvcnQgb25lIHNldCBvZiBjb2VmZmljaWVudHMgZm9yIGVhY2ggc2Vuc29yIHR5cGUKIAkgKiBVc2VkIGZvciBjaGlwcyBwcm92aWRpbmcgZGF0YSBpbiBkaXJlY3QgbW9kZS4KQEAgLTI4Niw2ICszMjIsMTAgQEAKIAkgKiBuZWNlc3NhcnkuCiAJICovCiAJaW50ICgqcmVhZF9ieXRlX2RhdGEpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKKwlpbnQgKCpyZWFkX3dvcmRfZGF0YSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpOworCWludCAoKndyaXRlX3dvcmRfZGF0YSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcsCisJCQkgICAgICAgdTE2IHdvcmQpOworCWludCAoKndyaXRlX2J5dGUpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCB2YWx1ZSk7CiAJLyoKIAkgKiBUaGUgaWRlbnRpZnkgZnVuY3Rpb24gZGV0ZXJtaW5lcyBzdXBwb3J0ZWQgUE1CdXMgZnVuY3Rpb25hbGl0eS4KIAkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIGEgY2hpcCBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUKQEAgLTI5OSw2ICszMzksOSBAQAogCiBpbnQgcG1idXNfc2V0X3BhZ2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcGFnZSk7CiBpbnQgcG1idXNfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcGFnZSwgdTggcmVnKTsKK2ludCBwbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcGFnZSwgdTggcmVnLCB1MTYgd29yZCk7CitpbnQgcG1idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZyk7CitpbnQgcG1idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgdTggdmFsdWUpOwogdm9pZCBwbWJ1c19jbGVhcl9mYXVsdHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBib29sIHBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpOwogYm9vbCBwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jIGIvZHJpdmVycy9od21vbi9wbWJ1cy9wbWJ1c19jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gZHJpdmVycy9od21vbi9wbWJ1c19jb3JlLmMKcmVuYW1lIHRvIGRyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCmluZGV4IDhlMzFhOGUuLjM5N2ZjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXMvcG1idXNfY29yZS5jCkBAIC0zMywxNCArMzMsMTggQEAKIC8qCiAgKiBDb25zdGFudHMgbmVlZGVkIHRvIGRldGVybWluZSBudW1iZXIgb2Ygc2Vuc29ycywgYm9vbGVhbnMsIGFuZCBsYWJlbHMuCiAgKi8KLSNkZWZpbmUgUE1CVVNfTUFYX0lOUFVUX1NFTlNPUlMJCTExCS8qIDYqdm9sdCwgMypjdXJyLCAyKnBvd2VyICovCi0jZGVmaW5lIFBNQlVTX1ZPVVRfU0VOU09SU19QRVJfUEFHRQk1CS8qIGlucHV0LCBtaW4sIG1heCwgbGNyaXQsCi0JCQkJCQkgICBjcml0ICovCi0jZGVmaW5lIFBNQlVTX0lPVVRfU0VOU09SU19QRVJfUEFHRQk0CS8qIGlucHV0LCBtaW4sIG1heCwgY3JpdCAqLworI2RlZmluZSBQTUJVU19NQVhfSU5QVVRfU0VOU09SUwkJMjIJLyogMTAqdm9sdCwgNypjdXJyLCA1KnBvd2VyICovCisjZGVmaW5lIFBNQlVTX1ZPVVRfU0VOU09SU19QRVJfUEFHRQk5CS8qIGlucHV0LCBtaW4sIG1heCwgbGNyaXQsCisJCQkJCQkgICBjcml0LCBsb3dlc3QsIGhpZ2hlc3QsIGF2ZywKKwkJCQkJCSAgIHJlc2V0ICovCisjZGVmaW5lIFBNQlVTX0lPVVRfU0VOU09SU19QRVJfUEFHRQk4CS8qIGlucHV0LCBtaW4sIG1heCwgY3JpdCwKKwkJCQkJCSAgIGxvd2VzdCwgaGlnaGVzdCwgYXZnLAorCQkJCQkJICAgcmVzZXQgKi8KICNkZWZpbmUgUE1CVVNfUE9VVF9TRU5TT1JTX1BFUl9QQUdFCTQJLyogaW5wdXQsIGNhcCwgbWF4LCBjcml0ICovCiAjZGVmaW5lIFBNQlVTX01BWF9TRU5TT1JTX1BFUl9GQU4JMQkvKiBpbnB1dCAqLwotI2RlZmluZSBQTUJVU19NQVhfU0VOU09SU19QRVJfVEVNUAk1CS8qIGlucHV0LCBtaW4sIG1heCwgbGNyaXQsCi0JCQkJCQkgICBjcml0ICovCisjZGVmaW5lIFBNQlVTX01BWF9TRU5TT1JTX1BFUl9URU1QCTgJLyogaW5wdXQsIG1pbiwgbWF4LCBsY3JpdCwKKwkJCQkJCSAgIGNyaXQsIGxvd2VzdCwgaGlnaGVzdCwKKwkJCQkJCSAgIHJlc2V0ICovCiAKICNkZWZpbmUgUE1CVVNfTUFYX0lOUFVUX0JPT0xFQU5TCTcJLyogdjogbWluX2FsYXJtLCBtYXhfYWxhcm0sCiAJCQkJCQkgICBsY3JpdF9hbGFybSwgY3JpdF9hbGFybTsKQEAgLTc0LDExICs3OCwxMyBAQAogI2RlZmluZSBQQl9TVEFUVVNfSU5QVVRfQkFTRQkoUEJfU1RBVFVTX0ZBTjM0X0JBU0UgKyBQTUJVU19QQUdFUykKICNkZWZpbmUgUEJfU1RBVFVTX1RFTVBfQkFTRQkoUEJfU1RBVFVTX0lOUFVUX0JBU0UgKyAxKQogCisjZGVmaW5lIFBNQlVTX05BTUVfU0laRQkJMjQKKwogc3RydWN0IHBtYnVzX3NlbnNvciB7Ci0JY2hhciBuYW1lW0kyQ19OQU1FX1NJWkVdOwkvKiBzeXNmcyBzZW5zb3IgbmFtZSAqLworCWNoYXIgbmFtZVtQTUJVU19OQU1FX1NJWkVdOwkvKiBzeXNmcyBzZW5zb3IgbmFtZSAqLwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyaWJ1dGU7CiAJdTggcGFnZTsJCS8qIHBhZ2UgbnVtYmVyICovCi0JdTggcmVnOwkJCS8qIHJlZ2lzdGVyICovCisJdTE2IHJlZzsJCS8qIHJlZ2lzdGVyICovCiAJZW51bSBwbWJ1c19zZW5zb3JfY2xhc3NlcyBjbGFzczsJLyogc2Vuc29yIGNsYXNzICovCiAJYm9vbCB1cGRhdGU7CQkvKiBydW50aW1lIHNlbnNvciB1cGRhdGUgbmVlZGVkICovCiAJaW50IGRhdGE7CQkvKiBTZW5zb3IgZGF0YS4KQEAgLTg2LDE0ICs5MiwxNCBAQAogfTsKIAogc3RydWN0IHBtYnVzX2Jvb2xlYW4gewotCWNoYXIgbmFtZVtJMkNfTkFNRV9TSVpFXTsJLyogc3lzZnMgYm9vbGVhbiBuYW1lICovCisJY2hhciBuYW1lW1BNQlVTX05BTUVfU0laRV07CS8qIHN5c2ZzIGJvb2xlYW4gbmFtZSAqLwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyaWJ1dGU7CiB9OwogCiBzdHJ1Y3QgcG1idXNfbGFiZWwgewotCWNoYXIgbmFtZVtJMkNfTkFNRV9TSVpFXTsJLyogc3lzZnMgbGFiZWwgbmFtZSAqLworCWNoYXIgbmFtZVtQTUJVU19OQU1FX1NJWkVdOwkvKiBzeXNmcyBsYWJlbCBuYW1lICovCiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGF0dHJpYnV0ZTsKLQljaGFyIGxhYmVsW0kyQ19OQU1FX1NJWkVdOwkvKiBsYWJlbCAqLworCWNoYXIgbGFiZWxbUE1CVVNfTkFNRV9TSVpFXTsJLyogbGFiZWwgKi8KIH07CiAKIHN0cnVjdCBwbWJ1c19kYXRhIHsKQEAgLTE2MiwxOSArMTY4LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbWJ1c19zZXRfcGFnZSk7CiAKLXN0YXRpYyBpbnQgcG1idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBwYWdlLCB1OCB2YWx1ZSkKK2ludCBwbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCB1OCB2YWx1ZSkKIHsKIAlpbnQgcnY7CiAKLQlydiA9IHBtYnVzX3NldF9wYWdlKGNsaWVudCwgcGFnZSk7Ci0JaWYgKHJ2IDwgMCkKLQkJcmV0dXJuIHJ2OworCWlmIChwYWdlID49IDApIHsKKwkJcnYgPSBwbWJ1c19zZXRfcGFnZShjbGllbnQsIHBhZ2UpOworCQlpZiAocnYgPCAwKQorCQkJcmV0dXJuIHJ2OworCX0KIAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIHZhbHVlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3dyaXRlX2J5dGUpOwogCi1zdGF0aWMgaW50IHBtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBwYWdlLCB1OCByZWcsCi0JCQkJIHUxNiB3b3JkKQorLyoKKyAqIF9wbWJ1c193cml0ZV9ieXRlKCkgaXMgc2ltaWxhciB0byBwbWJ1c193cml0ZV9ieXRlKCksIGJ1dCBjaGVja3MgaWYKKyAqIGEgZGV2aWNlIHNwZWNpZmljIG1hcHBpbmcgZnVuY2lvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCBfcG1idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSwgdTggdmFsdWUpCit7CisJc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOworCWludCBzdGF0dXM7CisKKwlpZiAoaW5mby0+d3JpdGVfYnl0ZSkgeworCQlzdGF0dXMgPSBpbmZvLT53cml0ZV9ieXRlKGNsaWVudCwgcGFnZSwgdmFsdWUpOworCQlpZiAoc3RhdHVzICE9IC1FTk9EQVRBKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisJcmV0dXJuIHBtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBwYWdlLCB2YWx1ZSk7Cit9CisKK2ludCBwbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcGFnZSwgdTggcmVnLCB1MTYgd29yZCkKIHsKIAlpbnQgcnY7CiAKQEAgLTE4NCw2ICsyMTAsMjggQEAKIAogCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnLCB3b3JkKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3dyaXRlX3dvcmRfZGF0YSk7CisKKy8qCisgKiBfcG1idXNfd3JpdGVfd29yZF9kYXRhKCkgaXMgc2ltaWxhciB0byBwbWJ1c193cml0ZV93b3JkX2RhdGEoKSwgYnV0IGNoZWNrcyBpZgorICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jdGlvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCBfcG1idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnLAorCQkJCSAgdTE2IHdvcmQpCit7CisJc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwljb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKmluZm8gPSBkYXRhLT5pbmZvOworCWludCBzdGF0dXM7CisKKwlpZiAoaW5mby0+d3JpdGVfd29yZF9kYXRhKSB7CisJCXN0YXR1cyA9IGluZm8tPndyaXRlX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsIHJlZywgd29yZCk7CisJCWlmIChzdGF0dXMgIT0gLUVOT0RBVEEpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKwlpZiAocmVnID49IFBNQlVTX1ZJUlRfQkFTRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHBtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsIHJlZywgd29yZCk7Cit9CiAKIGludCBwbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBwYWdlLCB1OCByZWcpCiB7CkBAIC0xOTcsODIgKzI0NSw0MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfcmVhZF93b3JkX2RhdGEpOwogCi1zdGF0aWMgaW50IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHBhZ2UsIHU4IHJlZykKKy8qCisgKiBfcG1idXNfcmVhZF93b3JkX2RhdGEoKSBpcyBzaW1pbGFyIHRvIHBtYnVzX3JlYWRfd29yZF9kYXRhKCksIGJ1dCBjaGVja3MgaWYKKyAqIGEgZGV2aWNlIHNwZWNpZmljIG1hcHBpbmcgZnVuY3Rpb24gZXhpc3RzIGFuZCBjYWxscyBpdCBpZiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyBpbnQgX3BtYnVzX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKQoreworCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJY29uc3Qgc3RydWN0IHBtYnVzX2RyaXZlcl9pbmZvICppbmZvID0gZGF0YS0+aW5mbzsKKwlpbnQgc3RhdHVzOworCisJaWYgKGluZm8tPnJlYWRfd29yZF9kYXRhKSB7CisJCXN0YXR1cyA9IGluZm8tPnJlYWRfd29yZF9kYXRhKGNsaWVudCwgcGFnZSwgcmVnKTsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PREFUQSkKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCWlmIChyZWcgPj0gUE1CVVNfVklSVF9CQVNFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCBwYWdlLCByZWcpOworfQorCitpbnQgcG1idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIHU4IHJlZykKIHsKIAlpbnQgcnY7CiAKLQlydiA9IHBtYnVzX3NldF9wYWdlKGNsaWVudCwgcGFnZSk7Ci0JaWYgKHJ2IDwgMCkKLQkJcmV0dXJuIHJ2OworCWlmIChwYWdlID49IDApIHsKKwkJcnYgPSBwbWJ1c19zZXRfcGFnZShjbGllbnQsIHBhZ2UpOworCQlpZiAocnYgPCAwKQorCQkJcmV0dXJuIHJ2OworCX0KIAogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQotCi1zdGF0aWMgdm9pZCBwbWJ1c19jbGVhcl9mYXVsdF9wYWdlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlKQotewotCXBtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBwYWdlLCBQTUJVU19DTEVBUl9GQVVMVFMpOwotfQotCi12b2lkIHBtYnVzX2NsZWFyX2ZhdWx0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5mby0+cGFnZXM7IGkrKykKLQkJcG1idXNfY2xlYXJfZmF1bHRfcGFnZShjbGllbnQsIGkpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfY2xlYXJfZmF1bHRzKTsKLQotc3RhdGljIGludCBwbWJ1c19jaGVja19zdGF0dXNfY21sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlKQotewotCWludCBzdGF0dXMsIHN0YXR1czI7Ci0KLQlzdGF0dXMgPSBwbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIFBNQlVTX1NUQVRVU19CWVRFKTsKLQlpZiAoc3RhdHVzIDwgMCB8fCAoc3RhdHVzICYgUEJfU1RBVFVTX0NNTCkpIHsKLQkJc3RhdHVzMiA9IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcGFnZSwgUE1CVVNfU1RBVFVTX0NNTCk7Ci0JCWlmIChzdGF0dXMyIDwgMCB8fCAoc3RhdHVzMiAmIFBCX0NNTF9GQVVMVF9JTlZBTElEX0NPTU1BTkQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1ib29sIHBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCi17Ci0JaW50IHJ2OwotCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlydiA9IHBtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcGFnZSwgcmVnKTsKLQlpZiAocnYgPj0gMCAmJiAhKGRhdGEtPmZsYWdzICYgUE1CVVNfU0tJUF9TVEFUVVNfQ0hFQ0spKQotCQlydiA9IHBtYnVzX2NoZWNrX3N0YXR1c19jbWwoY2xpZW50LCBwYWdlKTsKLQlwbWJ1c19jbGVhcl9mYXVsdF9wYWdlKGNsaWVudCwgcGFnZSk7Ci0JcmV0dXJuIHJ2ID49IDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwbWJ1c19jaGVja19ieXRlX3JlZ2lzdGVyKTsKLQotYm9vbCBwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYWdlLCBpbnQgcmVnKQotewotCWludCBydjsKLQlzdHJ1Y3QgcG1idXNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JcnYgPSBwbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsIHJlZyk7Ci0JaWYgKHJ2ID49IDAgJiYgIShkYXRhLT5mbGFncyAmIFBNQlVTX1NLSVBfU1RBVFVTX0NIRUNLKSkKLQkJcnYgPSBwbWJ1c19jaGVja19zdGF0dXNfY21sKGNsaWVudCwgcGFnZSk7Ci0JcG1idXNfY2xlYXJfZmF1bHRfcGFnZShjbGllbnQsIHBhZ2UpOwotCXJldHVybiBydiA+PSAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfY2hlY2tfd29yZF9yZWdpc3Rlcik7Ci0KLWNvbnN0IHN0cnVjdCBwbWJ1c19kcml2ZXJfaW5mbyAqcG1idXNfZ2V0X2RyaXZlcl9pbmZvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXJldHVybiBkYXRhLT5pbmZvOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocG1idXNfZ2V0X2RyaXZlcl9pbmZvKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX3JlYWRfYnl0ZV9kYXRhKTsKIAogLyoKICAqIF9wbWJ1c19yZWFkX2J5dGVfZGF0YSgpIGlzIHNpbWlsYXIgdG8gcG1idXNfcmVhZF9ieXRlX2RhdGEoKSwgYnV0IGNoZWNrcyBpZgotICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jaW9uIGV4aXN0cyBhbmQgY2FsbHMgaXQgaWYgbmVjZXNzYXJ5LgorICogYSBkZXZpY2Ugc3BlY2lmaWMgbWFwcGluZyBmdW5jdGlvbiBleGlzdHMgYW5kIGNhbGxzIGl0IGlmIG5lY2Vzc2FyeS4KICAqLwogc3RhdGljIGludCBfcG1idXNfcmVhZF9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCiB7CkBAIC0yODgsNiArMjk3LDY4IEBACiAJcmV0dXJuIHBtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcGFnZSwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcG1idXNfY2xlYXJfZmF1bHRfcGFnZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFnZSkKK3sKKwlfcG1idXNfd3JpdGVfYnl0ZShjbGllbnQsIHBhZ2UsIFBNQlVTX0NMRUFSX0ZBVUxUUyk7Cit9CisKK3ZvaWQgcG1idXNfY2xlYXJfZmF1bHRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbmZvLT5wYWdlczsgaSsrKQorCQlwbWJ1c19jbGVhcl9mYXVsdF9wYWdlKGNsaWVudCwgaSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbWJ1c19jbGVhcl9mYXVsdHMpOworCitzdGF0aWMgaW50IHBtYnVzX2NoZWNrX3N0YXR1c19jbWwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgc3RhdHVzLCBzdGF0dXMyOworCisJc3RhdHVzID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAtMSwgUE1CVVNfU1RBVFVTX0JZVEUpOworCWlmIChzdGF0dXMgPCAwIHx8IChzdGF0dXMgJiBQQl9TVEFUVVNfQ01MKSkgeworCQlzdGF0dXMyID0gcG1idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAtMSwgUE1CVVNfU1RBVFVTX0NNTCk7CisJCWlmIChzdGF0dXMyIDwgMCB8fCAoc3RhdHVzMiAmIFBCX0NNTF9GQVVMVF9JTlZBTElEX0NPTU1BTkQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitib29sIHBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCit7CisJaW50IHJ2OworCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlydiA9IF9wbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHBhZ2UsIHJlZyk7CisJaWYgKHJ2ID49IDAgJiYgIShkYXRhLT5mbGFncyAmIFBNQlVTX1NLSVBfU1RBVFVTX0NIRUNLKSkKKwkJcnYgPSBwbWJ1c19jaGVja19zdGF0dXNfY21sKGNsaWVudCk7CisJcG1idXNfY2xlYXJfZmF1bHRfcGFnZShjbGllbnQsIC0xKTsKKwlyZXR1cm4gcnYgPj0gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIpOworCitib29sIHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhZ2UsIGludCByZWcpCit7CisJaW50IHJ2OworCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlydiA9IF9wbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHBhZ2UsIHJlZyk7CisJaWYgKHJ2ID49IDAgJiYgIShkYXRhLT5mbGFncyAmIFBNQlVTX1NLSVBfU1RBVFVTX0NIRUNLKSkKKwkJcnYgPSBwbWJ1c19jaGVja19zdGF0dXNfY21sKGNsaWVudCk7CisJcG1idXNfY2xlYXJfZmF1bHRfcGFnZShjbGllbnQsIC0xKTsKKwlyZXR1cm4gcnYgPj0gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX2NoZWNrX3dvcmRfcmVnaXN0ZXIpOworCitjb25zdCBzdHJ1Y3QgcG1idXNfZHJpdmVyX2luZm8gKnBtYnVzX2dldF9kcml2ZXJfaW5mbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBwbWJ1c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlyZXR1cm4gZGF0YS0+aW5mbzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtYnVzX2dldF9kcml2ZXJfaW5mbyk7CisKIHN0YXRpYyBzdHJ1Y3QgcG1idXNfZGF0YSAqcG1idXNfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKQEAgLTM0Nyw4ICs0MTgsOSBAQAogCiAJCQlpZiAoIWRhdGEtPnZhbGlkIHx8IHNlbnNvci0+dXBkYXRlKQogCQkJCXNlbnNvci0+ZGF0YQotCQkJCSAgICA9IHBtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgc2Vuc29yLT5wYWdlLAotCQkJCQkJCSAgIHNlbnNvci0+cmVnKTsKKwkJCQkgICAgPSBfcG1idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LAorCQkJCQkJCSAgICBzZW5zb3ItPnBhZ2UsCisJCQkJCQkJICAgIHNlbnNvci0+cmVnKTsKIAkJfQogCQlwbWJ1c19jbGVhcl9mYXVsdHMoY2xpZW50KTsKIAkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKQEAgLTQ0MywxNSArNTE1LDM3IEBACiAJcmV0dXJuICh2YWwgLSBiKSAvIG07CiB9CiAKKy8qCisgKiBDb252ZXJ0IFZJRCBzZW5zb3IgdmFsdWVzIHRvIG1pbGxpLSBvciBtaWNyby11bml0cworICogZGVwZW5kaW5nIG9uIHNlbnNvciB0eXBlLgorICogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBWUjExLgorICovCitzdGF0aWMgbG9uZyBwbWJ1c19yZWcyZGF0YV92aWQoc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEsCisJCQkgICAgICAgc3RydWN0IHBtYnVzX3NlbnNvciAqc2Vuc29yKQoreworCWxvbmcgdmFsID0gc2Vuc29yLT5kYXRhOworCisJaWYgKHZhbCA8IDB4MDIgfHwgdmFsID4gMHhiMikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKDE2MDAwMCAtICh2YWwgLSAyKSAqIDYyNSwgMTAwKTsKK30KKwogc3RhdGljIGxvbmcgcG1idXNfcmVnMmRhdGEoc3RydWN0IHBtYnVzX2RhdGEgKmRhdGEsIHN0cnVjdCBwbWJ1c19zZW5zb3IgKnNlbnNvcikKIHsKIAlsb25nIHZhbDsKIAotCWlmIChkYXRhLT5pbmZvLT5kaXJlY3Rbc2Vuc29yLT5jbGFzc10pCisJc3dpdGNoIChkYXRhLT5pbmZvLT5mb3JtYXRbc2Vuc29yLT5jbGFzc10pIHsKKwljYXNlIGRpcmVjdDoKIAkJdmFsID0gcG1idXNfcmVnMmRhdGFfZGlyZWN0KGRhdGEsIHNlbnNvcik7Ci0JZWxzZQorCQlicmVhazsKKwljYXNlIHZpZDoKKwkJdmFsID0gcG1idXNfcmVnMmRhdGFfdmlkKGRhdGEsIHNlbnNvcik7CisJCWJyZWFrOworCWNhc2UgbGluZWFyOgorCWRlZmF1bHQ6CiAJCXZhbCA9IHBtYnVzX3JlZzJkYXRhX2xpbmVhcihkYXRhLCBzZW5zb3IpOwotCisJCWJyZWFrOworCX0KIAlyZXR1cm4gdmFsOwogfQogCkBAIC01NjEsMTYgKzY1NSwzMSBAQAogCXJldHVybiB2YWw7CiB9CiAKK3N0YXRpYyB1MTYgcG1idXNfZGF0YTJyZWdfdmlkKHN0cnVjdCBwbWJ1c19kYXRhICpkYXRhLAorCQkJICAgICAgZW51bSBwbWJ1c19zZW5zb3JfY2xhc3NlcyBjbGFzcywgbG9uZyB2YWwpCit7CisJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIDUwMCwgMTYwMCk7CisKKwlyZXR1cm4gMiArIERJVl9ST1VORF9DTE9TRVNUKCgxNjAwIC0gdmFsKSAqIDEwMCwgNjI1KTsKK30KKwogc3RhdGljIHUxNiBwbWJ1c19kYXRhMnJlZyhzdHJ1Y3QgcG1idXNfZGF0YSAqZGF0YSwKIAkJCSAgZW51bSBwbWJ1c19zZW5zb3JfY2xhc3NlcyBjbGFzcywgbG9uZyB2YWwpCiB7CiAJdTE2IHJlZ3ZhbDsKIAotCWlmIChkYXRhLT5pbmZvLT5kaXJlY3RbY2xhc3NdKQorCXN3aXRjaCAoZGF0YS0+aW5mby0+Zm9ybWF0W2NsYXNzXSkgeworCWNhc2UgZGlyZWN0OgogCQlyZWd2YWwgPSBwbWJ1c19kYXRhMnJlZ19kaXJlY3QoZGF0YSwgY2xhc3MsIHZhbCk7Ci0JZWxzZQorCQlicmVhazsKKwljYXNlIHZpZDoKKwkJcmVndmFsID0gcG1idXNfZGF0YTJyZWdfdmlkKGRhdGEsIGNsYXNzLCB2YWwpOworCQlicmVhazsKKwljYXNlIGxpbmVhcjoKKwlkZWZhdWx0OgogCQlyZWd2YWwgPSBwbWJ1c19kYXRhMnJlZ19saW5lYXIoZGF0YSwgY2xhc3MsIHZhbCk7Ci0KKwkJYnJlYWs7CisJfQogCXJldHVybiByZWd2YWw7CiB9CiAKQEAgLTY4Miw3ICs3OTEsNyBAQAogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJlZ3ZhbCA9IHBtYnVzX2RhdGEycmVnKGRhdGEsIHNlbnNvci0+Y2xhc3MsIHZhbCk7Ci0JcmV0ID0gcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgc2Vuc29yLT5wYWdlLCBzZW5zb3ItPnJlZywgcmVndmFsKTsKKwlyZXQgPSBfcG1idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgc2Vuc29yLT5wYWdlLCBzZW5zb3ItPnJlZywgcmVndmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJcnYgPSByZXQ7CiAJZWxzZQpAQCAtODY3LDcgKzk3NiwxMCBAQAogICogYW5kIGl0cyBhc3NvY2lhdGVkIGFsYXJtIGF0dHJpYnV0ZS4KICAqLwogc3RydWN0IHBtYnVzX2xpbWl0X2F0dHIgewotCXU4IHJlZzsJCQkvKiBMaW1pdCByZWdpc3RlciAqLworCXUxNiByZWc7CQkvKiBMaW1pdCByZWdpc3RlciAqLworCWJvb2wgdXBkYXRlOwkJLyogVHJ1ZSBpZiByZWdpc3RlciBuZWVkcyB1cGRhdGVzICovCisJYm9vbCBsb3c7CQkvKiBUcnVlIGlmIGxvdyBsaW1pdDsgZm9yIGxpbWl0cyB3aXRoIGNvbXBhcmUKKwkJCQkgICBmdW5jdGlvbnMgb25seSAqLwogCWNvbnN0IGNoYXIgKmF0dHI7CS8qIEF0dHJpYnV0ZSBuYW1lICovCiAJY29uc3QgY2hhciAqYWxhcm07CS8qIEFsYXJtIGF0dHJpYnV0ZSBuYW1lICovCiAJdTMyIHNiaXQ7CQkvKiBBbGFybSBhdHRyaWJ1dGUgc3RhdHVzIGJpdCAqLwpAQCAtOTEyLDEzICsxMDI0LDE1IEBACiAJCWlmIChwbWJ1c19jaGVja193b3JkX3JlZ2lzdGVyKGNsaWVudCwgcGFnZSwgbC0+cmVnKSkgewogCQkJY2luZGV4ID0gZGF0YS0+bnVtX3NlbnNvcnM7CiAJCQlwbWJ1c19hZGRfc2Vuc29yKGRhdGEsIG5hbWUsIGwtPmF0dHIsIGluZGV4LCBwYWdlLAotCQkJCQkgbC0+cmVnLCBhdHRyLT5jbGFzcywgYXR0ci0+dXBkYXRlLAorCQkJCQkgbC0+cmVnLCBhdHRyLT5jbGFzcywKKwkJCQkJIGF0dHItPnVwZGF0ZSB8fCBsLT51cGRhdGUsCiAJCQkJCSBmYWxzZSk7Ci0JCQlpZiAoaW5mby0+ZnVuY1twYWdlXSAmIGF0dHItPnNmdW5jKSB7CisJCQlpZiAobC0+c2JpdCAmJiAoaW5mby0+ZnVuY1twYWdlXSAmIGF0dHItPnNmdW5jKSkgewogCQkJCWlmIChhdHRyLT5jb21wYXJlKSB7CiAJCQkJCXBtYnVzX2FkZF9ib29sZWFuX2NtcChkYXRhLCBuYW1lLAogCQkJCQkJbC0+YWxhcm0sIGluZGV4LAotCQkJCQkJY2Jhc2UsIGNpbmRleCwKKwkJCQkJCWwtPmxvdyA/IGNpbmRleCA6IGNiYXNlLAorCQkJCQkJbC0+bG93ID8gY2Jhc2UgOiBjaW5kZXgsCiAJCQkJCQlhdHRyLT5zYmFzZSArIHBhZ2UsIGwtPnNiaXQpOwogCQkJCX0gZWxzZSB7CiAJCQkJCXBtYnVzX2FkZF9ib29sZWFuX3JlZyhkYXRhLCBuYW1lLApAQCAtOTUzLDkgKzEwNjcsMTEgQEAKIAkJCQkJCSAgIGluZGV4LCBwYWdlLCBjYmFzZSwgYXR0cik7CiAJCS8qCiAJCSAqIEFkZCBnZW5lcmljIGFsYXJtIGF0dHJpYnV0ZSBvbmx5IGlmIHRoZXJlIGFyZSBubyBpbmRpdmlkdWFsCi0JCSAqIGFsYXJtIGF0dHJpYnV0ZXMsIGFuZCBpZiB0aGVyZSBpcyBhIGdsb2JhbCBhbGFybSBiaXQuCisJCSAqIGFsYXJtIGF0dHJpYnV0ZXMsIGlmIHRoZXJlIGlzIGEgZ2xvYmFsIGFsYXJtIGJpdCwgYW5kIGlmCisJCSAqIHRoZSBnZW5lcmljIHN0YXR1cyByZWdpc3RlciBmb3IgdGhpcyBwYWdlIGlzIGFjY2Vzc2libGUuCiAJCSAqLwotCQlpZiAoIWhhdmVfYWxhcm0gJiYgYXR0ci0+Z2JpdCkKKwkJaWYgKCFoYXZlX2FsYXJtICYmIGF0dHItPmdiaXQgJiYKKwkJICAgIHBtYnVzX2NoZWNrX2J5dGVfcmVnaXN0ZXIoY2xpZW50LCBwYWdlLCBQTUJVU19TVEFUVVNfQllURSkpCiAJCQlwbWJ1c19hZGRfYm9vbGVhbl9yZWcoZGF0YSwgbmFtZSwgImFsYXJtIiwgaW5kZXgsCiAJCQkJCSAgICAgIFBCX1NUQVRVU19CQVNFICsgcGFnZSwKIAkJCQkJICAgICAgYXR0ci0+Z2JpdCk7CkBAIC0xMDA4LDYgKzExMjQsMjEgQEAKIAkJLmF0dHIgPSAiY3JpdCIsCiAJCS5hbGFybSA9ICJjcml0X2FsYXJtIiwKIAkJLnNiaXQgPSBQQl9WT0xUQUdFX09WX0ZBVUxULAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9WSU5fQVZHLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiYXZlcmFnZSIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRUFEX1ZJTl9NSU4sCisJCS51cGRhdGUgPSB0cnVlLAorCQkuYXR0ciA9ICJsb3dlc3QiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9WSU5fTUFYLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiaGlnaGVzdCIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRVNFVF9WSU5fSElTVE9SWSwKKwkJLmF0dHIgPSAicmVzZXRfaGlzdG9yeSIsCiAJfSwKIH07CiAKQEAgLTEwMzIsNiArMTE2MywyMSBAQAogCQkuYXR0ciA9ICJjcml0IiwKIAkJLmFsYXJtID0gImNyaXRfYWxhcm0iLAogCQkuc2JpdCA9IFBCX1ZPTFRBR0VfT1ZfRkFVTFQsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRUFEX1ZPVVRfQVZHLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiYXZlcmFnZSIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRUFEX1ZPVVRfTUlOLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAibG93ZXN0IiwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSVJUX1JFQURfVk9VVF9NQVgsCisJCS51cGRhdGUgPSB0cnVlLAorCQkuYXR0ciA9ICJoaWdoZXN0IiwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSVJUX1JFU0VUX1ZPVVRfSElTVE9SWSwKKwkJLmF0dHIgPSAicmVzZXRfaGlzdG9yeSIsCiAJfQogfTsKIApAQCAtMTA3OCw2ICsxMjI0LDIxIEBACiAJCS5hdHRyID0gImNyaXQiLAogCQkuYWxhcm0gPSAiY3JpdF9hbGFybSIsCiAJCS5zYml0ID0gUEJfSUlOX09DX0ZBVUxULAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9JSU5fQVZHLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiYXZlcmFnZSIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRUFEX0lJTl9NSU4sCisJCS51cGRhdGUgPSB0cnVlLAorCQkuYXR0ciA9ICJsb3dlc3QiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9JSU5fTUFYLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiaGlnaGVzdCIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRVNFVF9JSU5fSElTVE9SWSwKKwkJLmF0dHIgPSAicmVzZXRfaGlzdG9yeSIsCiAJfQogfTsKIApAQCAtMTA5Nyw2ICsxMjU4LDIxIEBACiAJCS5hdHRyID0gImNyaXQiLAogCQkuYWxhcm0gPSAiY3JpdF9hbGFybSIsCiAJCS5zYml0ID0gUEJfSU9VVF9PQ19GQVVMVCwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSVJUX1JFQURfSU9VVF9BVkcsCisJCS51cGRhdGUgPSB0cnVlLAorCQkuYXR0ciA9ICJhdmVyYWdlIiwKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSVJUX1JFQURfSU9VVF9NSU4sCisJCS51cGRhdGUgPSB0cnVlLAorCQkuYXR0ciA9ICJsb3dlc3QiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9JT1VUX01BWCwKKwkJLnVwZGF0ZSA9IHRydWUsCisJCS5hdHRyID0gImhpZ2hlc3QiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVTRVRfSU9VVF9ISVNUT1JZLAorCQkuYXR0ciA9ICJyZXNldF9oaXN0b3J5IiwKIAl9CiB9OwogCkBAIC0xMTMyLDYgKzEzMDgsMTcgQEAKIAkJLmF0dHIgPSAibWF4IiwKIAkJLmFsYXJtID0gImFsYXJtIiwKIAkJLnNiaXQgPSBQQl9QSU5fT1BfV0FSTklORywKKwl9LCB7CisJCS5yZWcgPSBQTUJVU19WSVJUX1JFQURfUElOX0FWRywKKwkJLnVwZGF0ZSA9IHRydWUsCisJCS5hdHRyID0gImF2ZXJhZ2UiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9QSU5fTUFYLAorCQkudXBkYXRlID0gdHJ1ZSwKKwkJLmF0dHIgPSAiaW5wdXRfaGlnaGVzdCIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRVNFVF9QSU5fSElTVE9SWSwKKwkJLmF0dHIgPSAicmVzZXRfaGlzdG9yeSIsCiAJfQogfTsKIApAQCAtMTE4MiwxMSArMTM2OSw0OCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwbWJ1c19saW1pdF9hdHRyIHRlbXBfbGltaXRfYXR0cnNbXSA9IHsKIAl7CiAJCS5yZWcgPSBQTUJVU19VVF9XQVJOX0xJTUlULAorCQkubG93ID0gdHJ1ZSwKIAkJLmF0dHIgPSAibWluIiwKIAkJLmFsYXJtID0gIm1pbl9hbGFybSIsCiAJCS5zYml0ID0gUEJfVEVNUF9VVF9XQVJOSU5HLAogCX0sIHsKIAkJLnJlZyA9IFBNQlVTX1VUX0ZBVUxUX0xJTUlULAorCQkubG93ID0gdHJ1ZSwKKwkJLmF0dHIgPSAibGNyaXQiLAorCQkuYWxhcm0gPSAibGNyaXRfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1RFTVBfVVRfRkFVTFQsCisJfSwgeworCQkucmVnID0gUE1CVVNfT1RfV0FSTl9MSU1JVCwKKwkJLmF0dHIgPSAibWF4IiwKKwkJLmFsYXJtID0gIm1heF9hbGFybSIsCisJCS5zYml0ID0gUEJfVEVNUF9PVF9XQVJOSU5HLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX09UX0ZBVUxUX0xJTUlULAorCQkuYXR0ciA9ICJjcml0IiwKKwkJLmFsYXJtID0gImNyaXRfYWxhcm0iLAorCQkuc2JpdCA9IFBCX1RFTVBfT1RfRkFVTFQsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRUFEX1RFTVBfTUlOLAorCQkuYXR0ciA9ICJsb3dlc3QiLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1ZJUlRfUkVBRF9URU1QX01BWCwKKwkJLmF0dHIgPSAiaGlnaGVzdCIsCisJfSwgeworCQkucmVnID0gUE1CVVNfVklSVF9SRVNFVF9URU1QX0hJU1RPUlksCisJCS5hdHRyID0gInJlc2V0X2hpc3RvcnkiLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1idXNfbGltaXRfYXR0ciB0ZW1wX2xpbWl0X2F0dHJzMjNbXSA9IHsKKwl7CisJCS5yZWcgPSBQTUJVU19VVF9XQVJOX0xJTUlULAorCQkubG93ID0gdHJ1ZSwKKwkJLmF0dHIgPSAibWluIiwKKwkJLmFsYXJtID0gIm1pbl9hbGFybSIsCisJCS5zYml0ID0gUEJfVEVNUF9VVF9XQVJOSU5HLAorCX0sIHsKKwkJLnJlZyA9IFBNQlVTX1VUX0ZBVUxUX0xJTUlULAorCQkubG93ID0gdHJ1ZSwKIAkJLmF0dHIgPSAibGNyaXQiLAogCQkuYWxhcm0gPSAibGNyaXRfYWxhcm0iLAogCQkuc2JpdCA9IFBCX1RFTVBfVVRfRkFVTFQsCkBAIC0xMjI2LDggKzE0NTAsOCBAQAogCQkuc2Z1bmMgPSBQTUJVU19IQVZFX1NUQVRVU19URU1QLAogCQkuc2Jhc2UgPSBQQl9TVEFUVVNfVEVNUF9CQVNFLAogCQkuZ2JpdCA9IFBCX1NUQVRVU19URU1QRVJBVFVSRSwKLQkJLmxpbWl0ID0gdGVtcF9saW1pdF9hdHRycywKLQkJLm5saW1pdCA9IEFSUkFZX1NJWkUodGVtcF9saW1pdF9hdHRycyksCisJCS5saW1pdCA9IHRlbXBfbGltaXRfYXR0cnMyMywKKwkJLm5saW1pdCA9IEFSUkFZX1NJWkUodGVtcF9saW1pdF9hdHRyczIzKSwKIAl9LCB7CiAJCS5yZWcgPSBQTUJVU19SRUFEX1RFTVBFUkFUVVJFXzMsCiAJCS5jbGFzcyA9IFBTQ19URU1QRVJBVFVSRSwKQEAgLTEyMzgsOCArMTQ2Miw4IEBACiAJCS5zZnVuYyA9IFBNQlVTX0hBVkVfU1RBVFVTX1RFTVAsCiAJCS5zYmFzZSA9IFBCX1NUQVRVU19URU1QX0JBU0UsCiAJCS5nYml0ID0gUEJfU1RBVFVTX1RFTVBFUkFUVVJFLAotCQkubGltaXQgPSB0ZW1wX2xpbWl0X2F0dHJzLAotCQkubmxpbWl0ID0gQVJSQVlfU0laRSh0ZW1wX2xpbWl0X2F0dHJzKSwKKwkJLmxpbWl0ID0gdGVtcF9saW1pdF9hdHRyczIzLAorCQkubmxpbWl0ID0gQVJSQVlfU0laRSh0ZW1wX2xpbWl0X2F0dHJzMjMpLAogCX0KIH07CiAKQEAgLTEzODAsNyArMTYwNCw3IEBACiAJCSAqLwogCQlzd2l0Y2ggKHZvdXRfbW9kZSA+PiA1KSB7CiAJCWNhc2UgMDoJLyogbGluZWFyIG1vZGUgICAgICAqLwotCQkJaWYgKGRhdGEtPmluZm8tPmRpcmVjdFtQU0NfVk9MVEFHRV9PVVRdKQorCQkJaWYgKGRhdGEtPmluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9PVVRdICE9IGxpbmVhcikKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQkJZXhwb25lbnQgPSB2b3V0X21vZGUgJiAweDFmOwpAQCAtMTM4OSw4ICsxNjEzLDEyIEBACiAJCQkJZXhwb25lbnQgfD0gfjB4MWY7CiAJCQlkYXRhLT5leHBvbmVudCA9IGV4cG9uZW50OwogCQkJYnJlYWs7CisJCWNhc2UgMTogLyogVklEIG1vZGUgICAgICAgICAqLworCQkJaWYgKGRhdGEtPmluZm8tPmZvcm1hdFtQU0NfVk9MVEFHRV9PVVRdICE9IHZpZCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOwogCQljYXNlIDI6CS8qIGRpcmVjdCBtb2RlICAgICAgKi8KLQkJCWlmICghZGF0YS0+aW5mby0+ZGlyZWN0W1BTQ19WT0xUQUdFX09VVF0pCisJCQlpZiAoZGF0YS0+aW5mby0+Zm9ybWF0W1BTQ19WT0xUQUdFX09VVF0gIT0gZGlyZWN0KQogCQkJCXJldHVybiAtRU5PREVWOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xNDU3LDE4ICsxNjg1LDYgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZGF0YTsKIAl9Ci0JLyoKLQkgKiBCYWlsIG91dCBpZiBtb3JlIHRoYW4gb25lIHBhZ2Ugd2FzIGNvbmZpZ3VyZWQsIGJ1dCB3ZSBjYW4gbm90Ci0JICogc2VsZWN0IHRoZSBoaWdoZXN0IHBhZ2UuIFRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSB3cm9uZwotCSAqIGNoaXAgdHlwZSB3YXMgc2VsZWN0ZWQuIEJldHRlciBiYWlsIG91dCBub3cgdGhhbiBrZWVwCi0JICogcmV0dXJuaW5nIGVycm9ycyBsYXRlciBvbi4KLQkgKi8KLQlpZiAoaW5mby0+cGFnZXMgPiAxICYmIHBtYnVzX3NldF9wYWdlKGNsaWVudCwgaW5mby0+cGFnZXMgLSAxKSA8IDApIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gc2VsZWN0IHBhZ2UgJWRcbiIsCi0JCQlpbmZvLT5wYWdlcyAtIDEpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9kYXRhOwotCX0KIAogCXJldCA9IHBtYnVzX2lkZW50aWZ5X2NvbW1vbihjbGllbnQsIGRhdGEpOwogCWlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3VjZDkwMDAuYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvdWNkOTAwMC5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vdWNkOTAwMC5jCnJlbmFtZSB0byBkcml2ZXJzL2h3bW9uL3BtYnVzL3VjZDkwMDAuYwppbmRleCBhY2UxYzczLi5kMGRkYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3VjZDkwMDAuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3VjZDkwMDAuYwpAQCAtMTQxLDEzICsxNDEsMTEgQEAKIAlibG9ja19idWZmZXJbcmV0XSA9ICdcMCc7CiAJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRGV2aWNlIElEICVzXG4iLCBibG9ja19idWZmZXIpOwogCi0JbWlkID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1Y2Q5MDAwX2lkKTsgaSsrKSB7Ci0JCW1pZCA9ICZ1Y2Q5MDAwX2lkW2ldOworCWZvciAobWlkID0gdWNkOTAwMF9pZDsgbWlkLT5uYW1lWzBdOyBtaWQrKykgewogCQlpZiAoIXN0cm5jYXNlY21wKG1pZC0+bmFtZSwgYmxvY2tfYnVmZmVyLCBzdHJsZW4obWlkLT5uYW1lKSkpCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFtaWQgfHwgIXN0cmxlbihtaWQtPm5hbWUpKSB7CisJaWYgKCFtaWQtPm5hbWVbMF0pIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbnN1cHBvcnRlZCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3VjZDkyMDAuYyBiL2RyaXZlcnMvaHdtb24vcG1idXMvdWNkOTIwMC5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGRyaXZlcnMvaHdtb24vdWNkOTIwMC5jCnJlbmFtZSB0byBkcml2ZXJzL2h3bW9uL3BtYnVzL3VjZDkyMDAuYwppbmRleCBmZmNjMWNmLi5jNjVlOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3VjZDkyMDAuYworKysgYi9kcml2ZXJzL2h3bW9uL3BtYnVzL3VjZDkyMDAuYwpAQCAtNjgsMTMgKzY4LDExIEBACiAJYmxvY2tfYnVmZmVyW3JldF0gPSAnXDAnOwogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldmljZSBJRCAlc1xuIiwgYmxvY2tfYnVmZmVyKTsKIAotCW1pZCA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWNkOTIwMF9pZCk7IGkrKykgewotCQltaWQgPSAmdWNkOTIwMF9pZFtpXTsKKwlmb3IgKG1pZCA9IHVjZDkyMDBfaWQ7IG1pZC0+bmFtZVswXTsgbWlkKyspIHsKIAkJaWYgKCFzdHJuY2FzZWNtcChtaWQtPm5hbWUsIGJsb2NrX2J1ZmZlciwgc3RybGVuKG1pZC0+bmFtZSkpKQogCQkJYnJlYWs7CiAJfQotCWlmICghbWlkIHx8ICFzdHJsZW4obWlkLT5uYW1lKSkgeworCWlmICghbWlkLT5uYW1lWzBdKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5zdXBwb3J0ZWQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwppbmRleCAwYzczMWNhLi5iMjI4ZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwpAQCAtMTQ2LDYgKzE0Niw3IEBACiAgKiBAc3RvcDogc3RvcCBjb25kaXRpb24KICAqIEB4ZmVyX2NvbXBsZXRlOiBhY2tub3dsZWRnZSBjb21wbGV0aW9uIGZvciBhIEkyQyBtZXNzYWdlCiAgKiBAcmVzdWx0OiBjb250cm9sbGVyIHByb3BvZ2F0ZWQgcmVzdWx0CisgKiBAcmVndWxhdG9yOiBwb2ludGVyIHRvIGkyYyByZWd1bGF0b3IKICAqIEBidXN5OiBCdXN5IGRvaW5nIHRyYW5zZmVyCiAgKi8KIHN0cnVjdCBubWtfaTJjX2RldiB7CkBAIC00MTcsMTIgKzQxOCwxMiBAQAogCXdyaXRlbChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKSB8IGlycV9tYXNrLAogCQkJZGV2LT52aXJ0YmFzZSArIEkyQ19JTVNDUik7CiAKLQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKIAkJJmRldi0+eGZlcl9jb21wbGV0ZSwgZGV2LT5hZGFwLnRpbWVvdXQpOwogCiAJaWYgKHRpbWVvdXQgPCAwKSB7CiAJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAotCQkJIndhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0IgorCQkJIndhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCIKIAkJCSJyZXR1cm5lZCAlZCB3YWl0aW5nIGZvciBldmVudFxuIiwgdGltZW91dCk7CiAJCXN0YXR1cyA9IHRpbWVvdXQ7CiAJfQpAQCAtNTA0LDEyICs1MDUsMTIgQEAKIAl3cml0ZWwocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19JTVNDUikgfCBpcnFfbWFzaywKIAkJCWRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpOwogCi0JdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoCiAJCSZkZXYtPnhmZXJfY29tcGxldGUsIGRldi0+YWRhcC50aW1lb3V0KTsKIAogCWlmICh0aW1lb3V0IDwgMCkgewogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwKLQkJCSJ3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCIKKwkJCSJ3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQgIgogCQkJInJldHVybmVkICVkIHdhaXRpbmcgZm9yIGV2ZW50XG4iLCB0aW1lb3V0KTsKIAkJc3RhdHVzID0gdGltZW91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IDFhNzY2Y2YuLjJkZmI2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC0xMTM5LDQxICsxMTM5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfU1VTUEVORAotc3RhdGljIGludCBvbWFwX2kyY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCi0JCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQpCi0JCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb21hcF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCi0JCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZSkKLQkJCWRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcF9pMmNfcG1fb3BzID0gewotCS5zdXNwZW5kID0gb21hcF9pMmNfc3VzcGVuZCwKLQkucmVzdW1lID0gb21hcF9pMmNfcmVzdW1lLAotfTsKLSNkZWZpbmUgT01BUF9JMkNfUE1fT1BTICgmb21hcF9pMmNfcG1fb3BzKQotI2Vsc2UKLSNkZWZpbmUgT01BUF9JMkNfUE1fT1BTIE5VTEwKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gb21hcF9pMmNfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJvbWFwX2kyYyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkucG0JPSBPTUFQX0kyQ19QTV9PUFMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLXBjaS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEtcGNpLmMKaW5kZXggNjY1OWQyNi4uYjczZGE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEtcGNpLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEtcGNpLmMKQEAgLTEwOSwxMiArMTA5LDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlzZHMgPSBremFsbG9jKHNpemVvZigqc2RzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZHMpCisJaWYgKCFzZHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfbWVtOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkcy0+cGRldik7IGkrKykgewogCQlzZHMtPnBkZXZbaV0gPSBhZGRfaTJjX2RldmljZShkZXYsIGkpOwogCQlpZiAoSVNfRVJSKHNkcy0+cGRldltpXSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoc2RzLT5wZGV2W2ldKTsKIAkJCXdoaWxlICgtLWkgPj0gMCkKIAkJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZHMtPnBkZXZbaV0pOwogCQkJZ290byBlcnJfZGV2X2FkZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGVncmEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGVncmEuYwppbmRleCAyNDQwYjc0Li4zYzk0YzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRlZ3JhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10ZWdyYS5jCkBAIC0yNzAsMTQgKzI3MCwzMCBAQAogCiAJLyogUm91bmRzIGRvd24gdG8gbm90IGluY2x1ZGUgcGFydGlhbCB3b3JkIGF0IHRoZSBlbmQgb2YgYnVmICovCiAJd29yZHNfdG9fdHJhbnNmZXIgPSBidWZfcmVtYWluaW5nIC8gQllURVNfUEVSX0ZJRk9fV09SRDsKLQlpZiAod29yZHNfdG9fdHJhbnNmZXIgPiB0eF9maWZvX2F2YWlsKQotCQl3b3Jkc190b190cmFuc2ZlciA9IHR4X2ZpZm9fYXZhaWw7CiAKLQlpMmNfd3JpdGVzbChpMmNfZGV2LCBidWYsIEkyQ19UWF9GSUZPLCB3b3Jkc190b190cmFuc2Zlcik7CisJLyogSXQncyB2ZXJ5IGNvbW1vbiB0byBoYXZlIDwgNCBieXRlcywgc28gb3B0aW1pemUgdGhhdCBjYXNlLiAqLworCWlmICh3b3Jkc190b190cmFuc2ZlcikgeworCQlpZiAod29yZHNfdG9fdHJhbnNmZXIgPiB0eF9maWZvX2F2YWlsKQorCQkJd29yZHNfdG9fdHJhbnNmZXIgPSB0eF9maWZvX2F2YWlsOwogCi0JYnVmICs9IHdvcmRzX3RvX3RyYW5zZmVyICogQllURVNfUEVSX0ZJRk9fV09SRDsKLQlidWZfcmVtYWluaW5nIC09IHdvcmRzX3RvX3RyYW5zZmVyICogQllURVNfUEVSX0ZJRk9fV09SRDsKLQl0eF9maWZvX2F2YWlsIC09IHdvcmRzX3RvX3RyYW5zZmVyOworCQkvKgorCQkgKiBVcGRhdGUgc3RhdGUgYmVmb3JlIHdyaXRpbmcgdG8gRklGTy4gIElmIHRoaXMgY2FzdWVzIHVzCisJCSAqIHRvIGZpbmlzaCB3cml0aW5nIGFsbCBieXRlcyAoQUtBIGJ1Zl9yZW1haW5pbmcgZ29lcyB0byAwKSB3ZQorCQkgKiBoYXZlIGEgcG90ZW50aWFsIGZvciBhbiBpbnRlcnJ1cHQgKFBBQ0tFVF9YRkVSX0NPTVBMRVRFIGlzCisJCSAqIG5vdCBtYXNrYWJsZSkuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpc3Igc2VlcworCQkgKiBidWZfcmVtYWluaW5nIGFzIDAgYW5kIGRvZXNuJ3QgY2FsbCB1cyBiYWNrIHJlLWVudHJhbnRseS4KKwkJICovCisJCWJ1Zl9yZW1haW5pbmcgLT0gd29yZHNfdG9fdHJhbnNmZXIgKiBCWVRFU19QRVJfRklGT19XT1JEOworCQl0eF9maWZvX2F2YWlsIC09IHdvcmRzX3RvX3RyYW5zZmVyOworCQlpMmNfZGV2LT5tc2dfYnVmX3JlbWFpbmluZyA9IGJ1Zl9yZW1haW5pbmc7CisJCWkyY19kZXYtPm1zZ19idWYgPSBidWYgKworCQkJd29yZHNfdG9fdHJhbnNmZXIgKiBCWVRFU19QRVJfRklGT19XT1JEOworCQliYXJyaWVyKCk7CisKKwkJaTJjX3dyaXRlc2woaTJjX2RldiwgYnVmLCBJMkNfVFhfRklGTywgd29yZHNfdG9fdHJhbnNmZXIpOworCisJCWJ1ZiArPSB3b3Jkc190b190cmFuc2ZlciAqIEJZVEVTX1BFUl9GSUZPX1dPUkQ7CisJfQogCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyBhIHBhcnRpYWwgd29yZCBhdCB0aGUgZW5kIG9mIGJ1ZiwgaGFuZGxlIGl0IG1hbnVhbGx5IHRvCkBAIC0yODcsMTQgKzMwMywxNSBAQAogCWlmICh0eF9maWZvX2F2YWlsID4gMCAmJiBidWZfcmVtYWluaW5nID4gMCkgewogCQlCVUdfT04oYnVmX3JlbWFpbmluZyA+IDMpOwogCQltZW1jcHkoJnZhbCwgYnVmLCBidWZfcmVtYWluaW5nKTsKKworCQkvKiBBZ2FpbiB1cGRhdGUgYmVmb3JlIHdyaXRpbmcgdG8gRklGTyB0byBtYWtlIHN1cmUgaXNyIHNlZXMuICovCisJCWkyY19kZXYtPm1zZ19idWZfcmVtYWluaW5nID0gMDsKKwkJaTJjX2Rldi0+bXNnX2J1ZiA9IE5VTEw7CisJCWJhcnJpZXIoKTsKKwogCQlpMmNfd3JpdGVsKGkyY19kZXYsIHZhbCwgSTJDX1RYX0ZJRk8pOwotCQlidWZfcmVtYWluaW5nID0gMDsKLQkJdHhfZmlmb19hdmFpbC0tOwogCX0KIAotCUJVR19PTih0eF9maWZvX2F2YWlsID4gMCAmJiBidWZfcmVtYWluaW5nID4gMCk7Ci0JaTJjX2Rldi0+bXNnX2J1Zl9yZW1haW5pbmcgPSBidWZfcmVtYWluaW5nOwotCWkyY19kZXYtPm1zZ19idWYgPSBidWY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxMSw5ICs0MjgsMTAgQEAKIAkJCXRlZ3JhX2kyY19tYXNrX2lycShpMmNfZGV2LCBJMkNfSU5UX1RYX0ZJRk9fREFUQV9SRVEpOwogCX0KIAotCWlmICgoc3RhdHVzICYgSTJDX0lOVF9QQUNLRVRfWEZFUl9DT01QTEVURSkgJiYKLQkJCSFpMmNfZGV2LT5tc2dfYnVmX3JlbWFpbmluZykKKwlpZiAoc3RhdHVzICYgSTJDX0lOVF9QQUNLRVRfWEZFUl9DT01QTEVURSkgeworCQlCVUdfT04oaTJjX2Rldi0+bXNnX2J1Zl9yZW1haW5pbmcpOwogCQljb21wbGV0ZSgmaTJjX2Rldi0+bXNnX2NvbXBsZXRlKTsKKwl9CiAKIAlpMmNfd3JpdGVsKGkyY19kZXYsIHN0YXR1cywgSTJDX0lOVF9TVEFUVVMpOwogCWlmIChpMmNfZGV2LT5pc19kdmMpCkBAIC01MzEsNyArNTQ5LDcgQEAKIAogc3RhdGljIHUzMiB0ZWdyYV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7Ci0JcmV0dXJuIEkyQ19GVU5DX0kyQzsKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHRlZ3JhX2kyY19hbGdvID0gewpAQCAtNzE5LDYgKzczNywxNyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19PRikKKy8qIE1hdGNoIHRhYmxlIGZvciBvZl9wbGF0Zm9ybSBiaW5kaW5nICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9pMmNfb2ZfbWF0Y2hbXSBfX2RldmluaXRjb25zdCA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIwLWkyYyIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfaTJjX29mX21hdGNoKTsKKyNlbHNlCisjZGVmaW5lIHRlZ3JhX2kyY19vZl9tYXRjaCBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUgICA9IHRlZ3JhX2kyY19wcm9iZSwKIAkucmVtb3ZlICA9IHRlZ3JhX2kyY19yZW1vdmUsCkBAIC03MjksNiArNzU4LDcgQEAKIAkuZHJpdmVyICA9IHsKIAkJLm5hbWUgID0gInRlZ3JhLWkyYyIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9pMmNfb2ZfbWF0Y2gsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCmluZGV4IDNiZTYwZGEuLjY3Y2JjZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvY3k4MmM2OTMuYwpAQCAtMTQxLDYgKzE0MSw4IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFX0lPVywgdGltZV8xNik7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFXzhCSVQsIHRpbWVfOCk7CiAJfQorCWlmIChod2lmLT5pbmRleCA+IDApCisJCXBjaV9kZXZfcHV0KGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2lvcHNfY3k4MmM2OTMoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9pZGUvaWRlX3BsYXRmb3JtLmMKaW5kZXggNTQyNjAzYi4uOTYyNjkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlX3BsYXRmb3JtLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGxhdF9pZGVfc2V0dXBfcG9ydHMoc3RydWN0IGlkZV9odyAqaHcsCkBAIC05NSw3ICs5NiwxMCBAQAogCXBsYXRfaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgYWx0X2Jhc2UsIHBkYXRhLCByZXNfaXJxLT5zdGFydCk7CiAJaHcuZGV2ID0gJnBkZXYtPmRldjsKIAotCWQuaXJxX2ZsYWdzID0gcmVzX2lycS0+ZmxhZ3M7CisJZC5pcnFfZmxhZ3MgPSByZXNfaXJxLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCWlmIChyZXNfaXJxLT5mbGFncyAmIElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSkKKwkJZC5pcnFfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisKIAlpZiAobW1pbykKIAkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19NTUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDQzZjg5YmEuLmZlODljNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC03MTcsMTEgKzcxNywxMyBAQAogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwb2liX25laWdoICpuZWlnaDsKLQlzdHJ1Y3QgbmVpZ2hib3VyICpuOworCXN0cnVjdCBuZWlnaGJvdXIgKm4gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQluID0gZHN0X2dldF9uZWlnaGJvdXIoc2tiX2RzdChza2IpKTsKLQlpZiAobGlrZWx5KHNrYl9kc3Qoc2tiKSAmJiBuKSkgeworCWlmIChsaWtlbHkoc2tiX2RzdChza2IpKSkKKwkJbiA9IGRzdF9nZXRfbmVpZ2hib3VyKHNrYl9kc3Qoc2tiKSk7CisKKwlpZiAobGlrZWx5KG4pKSB7CiAJCWlmICh1bmxpa2VseSghKnRvX2lwb2liX25laWdoKG4pKSkgewogCQkJaXBvaWJfcGF0aF9sb29rdXAoc2tiLCBkZXYpOwogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCmluZGV4IDhkYjAwOGQuLjljNjFiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtMTAxLDEzICsxMDEsMTcgQEAKIAogCS8qIHZlcmlmeSBQRFUgbGVuZ3RoICovCiAJZGF0YWxlbiA9IG50b2gyNChoZHItPmRsZW5ndGgpOwotCWlmIChkYXRhbGVuICE9IHJ4X2RhdGFfbGVuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXNjc2lfaXNlcjogZGF0YWxlbiAlZCAoaGRyKSAhPSAlZCAoSUIpIFxuIiwKLQkJICAgICAgIGRhdGFsZW4sIHJ4X2RhdGFfbGVuKTsKKwlpZiAoZGF0YWxlbiA+IHJ4X2RhdGFfbGVuIHx8IChkYXRhbGVuICsgNCkgPCByeF9kYXRhX2xlbikgeworCQlpc2VyX2Vycigid3JvbmcgZGF0YWxlbiAlZCAoaGRyKSwgJWQgKElCKVxuIiwKKwkJCWRhdGFsZW4sIHJ4X2RhdGFfbGVuKTsKIAkJcmMgPSBJU0NTSV9FUlJfREFUQUxFTjsKIAkJZ290byBlcnJvcjsKIAl9CiAKKwlpZiAoZGF0YWxlbiAhPSByeF9kYXRhX2xlbikKKwkJaXNlcl9kYmcoImFsaWduZWQgZGF0YWxlbiAoJWQpIGhkciwgJWQgKElCKVxuIiwKKwkJCWRhdGFsZW4sIHJ4X2RhdGFfbGVuKTsKKwogCS8qIHJlYWQgQUhTICovCiAJYWhzbGVuID0gaGRyLT5obGVuZ3RoICogNDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKaW5kZXggMzQyY2JjMS4uZGI2ZjNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCkBAIC04OSw3ICs4OSw3IEBACiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTSElGVF80SwkxMgotI2RlZmluZSBTSVpFXzRLCSgxVUwgPDwgU0hJRlRfNEspCisjZGVmaW5lIFNJWkVfNEsJKDFVTEwgPDwgU0hJRlRfNEspCiAjZGVmaW5lIE1BU0tfNEsJKH4oU0laRV80Sy0xKSkKIAogCQkJCQkvKiBzdXBwb3J0IHVwIHRvIDUxMktCIGluIG9uZSBSRE1BICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCmluZGV4IDU3NDViN2YuLmYyOTlkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCkBAIC00MTIsNyArNDEyLDcgQEAKIAkJbWVtY3B5KGlzZXJfY29ubi0+aWJfY29ubi0+bG9naW5fYnVmLCB0YXNrLT5kYXRhLAogCQkJCQkJCXRhc2stPmRhdGFfY291bnQpOwogCQl0eF9kc2ctPmFkZHIgICAgPSBpc2VyX2Nvbm4tPmliX2Nvbm4tPmxvZ2luX2RtYTsKLQkJdHhfZHNnLT5sZW5ndGggID0gZGF0YV9zZWdfbGVuOworCQl0eF9kc2ctPmxlbmd0aCAgPSB0YXNrLT5kYXRhX2NvdW50OwogCQl0eF9kc2ctPmxrZXkgICAgPSBkZXZpY2UtPm1yLT5sa2V5OwogCQltZGVzYy0+bnVtX3NnZSA9IDI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKaW5kZXggOTg4Mjk3MS4uMzU4Y2Q3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCkBAIC0xMzksNyArMTM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pODI1My5oPgogCiAjZGVmaW5lIEdFVF9USU1FKHgpCWRvIHsgaWYgKGNwdV9oYXNfdHNjKSByZHRzY2woeCk7IGVsc2UgeCA9IGdldF90aW1lX3BpdCgpOyB9IHdoaWxlICgwKQotI2RlZmluZSBERUxUQSh4LHkpCShjcHVfaGFzX3RzYyA/ICgoeSkgLSAoeCkpIDogKCh4KSAtICh5KSArICgoeCkgPCAoeSkgPyBDTE9DS19USUNLX1JBVEUgLyBIWiA6IDApKSkKKyNkZWZpbmUgREVMVEEoeCx5KQkoY3B1X2hhc190c2MgPyAoKHkpIC0gKHgpKSA6ICgoeCkgLSAoeSkgKyAoKHgpIDwgKHkpID8gUElUX1RJQ0tfUkFURSAvIEhaIDogMCkpKQogI2RlZmluZSBUSU1FX05BTUUJKGNwdV9oYXNfdHNjPyJUU0MiOiJQSVQiKQogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdGltZV9waXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZXA5M3h4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKaW5kZXggYzgyNDJkZC4uYWExN2UwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9lcDkzeHhfa2V5cGFkLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqIGZsYWcuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggY2UyODFkMS4uNjdkZjkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC00ODMsNyArNDgzLDcgQEAKIAogCWJ1dHRvbnMgPSBremFsbG9jKHBkYXRhLT5uYnV0dG9ucyAqIChzaXplb2YgKmJ1dHRvbnMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1dHRvbnMpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gLUVOT01FTTsKIAogCXBwID0gTlVMTDsKIAlpID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG04MzIzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xtODMyMy5jCmluZGV4IGFiMGFjYWYuLjc1NjM0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG04MzIzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sbTgzMjMuYwpAQCAtNzU0LDggKzc1NCwxMSBAQAogCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9kaXNhYmxlX2twKTsKIGZhaWwyOgogCXdoaWxlICgtLXB3bSA+PSAwKQotCQlpZiAobG0tPnB3bVtwd21dLmVuYWJsZWQpCisJCWlmIChsbS0+cHdtW3B3bV0uZW5hYmxlZCkgeworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGxtLT5wd21bcHdtXS5jZGV2LmRldiwKKwkJCQkJICAgJmRldl9hdHRyX3RpbWUpOwogCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxtLT5wd21bcHdtXS5jZGV2KTsKKwkJfQogZmFpbDE6CiAJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CiAJa2ZyZWUobG0pOwpAQCAtNzc1LDggKzc3OCwxMCBAQAogCWRldmljZV9yZW1vdmVfZmlsZSgmbG0tPmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZGlzYWJsZV9rcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCQlpZiAobG0tPnB3bVtpXS5lbmFibGVkKQorCQlpZiAobG0tPnB3bVtpXS5lbmFibGVkKSB7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUobG0tPnB3bVtpXS5jZGV2LmRldiwgJmRldl9hdHRyX3RpbWUpOwogCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxtLT5wd21baV0uY2Rldik7CisJCX0KIAogCWtmcmVlKGxtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMKaW5kZXggZGEzODI4Zi4uYTVhNzc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0zNyw3ICszOCw3IEBACiAjZGVmaW5lIEtCQ19ST1dfU0NBTl9ETFkJNQogCiAvKiBLQkMgdXNlcyBhIDMyS0h6IGNsb2NrIHNvIGEgY3ljbGUgPSAxLzMyS2h6ICovCi0jZGVmaW5lIEtCQ19DWUNMRV9VU0VDCTMyCisjZGVmaW5lIEtCQ19DWUNMRV9NUwkzMgogCiAvKiBLQkMgUmVnaXN0ZXJzICovCiAKQEAgLTY0Nyw3ICs2NDgsNyBAQAogCWRlYm91bmNlX2NudCA9IG1pbihwZGF0YS0+ZGVib3VuY2VfY250LCBLQkNfTUFYX0RFQk9VTkNFX0NOVCk7CiAJc2Nhbl90aW1lX3Jvd3MgPSAoS0JDX1JPV19TQ0FOX1RJTUUgKyBkZWJvdW5jZV9jbnQpICogbnVtX3Jvd3M7CiAJa2JjLT5yZXBvbGxfZGx5ID0gS0JDX1JPV19TQ0FOX0RMWSArIHNjYW5fdGltZV9yb3dzICsgcGRhdGEtPnJlcGVhdF9jbnQ7Ci0Ja2JjLT5yZXBvbGxfZGx5ID0gKChrYmMtPnJlcG9sbF9kbHkgKiBLQkNfQ1lDTEVfVVNFQykgKyA5OTkpIC8gMTAwMDsKKwlrYmMtPnJlcG9sbF9kbHkgPSBESVZfUk9VTkRfVVAoa2JjLT5yZXBvbGxfZGx5LCBLQkNfQ1lDTEVfTVMpOwogCiAJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKQEAgLTcwMSw3ICs3MDIsNyBAQAogZXJyX2ZyZWVfbWVtX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGVycl9mcmVlX21lbToKLQlpbnB1dF9mcmVlX2RldmljZShrYmMtPmlkZXYpOworCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUoa2JjKTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LWkyYy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC1pMmMuYwppbmRleCBlMjFkZWIxLi4wMjU0MTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LWkyYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHgtaTJjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQUQ3MTRYIENhcFRvdWNoIFByb2dyYW1tYWJsZSBDb250cm9sbGVyIGRyaXZlciAoSTJDIGJ1cykKICAqCi0gKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KQEAgLTI3LDU0ICsyNyw0OSBAQAogCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWQ3MTR4X2kyY19wbSwgYWQ3MTR4X2kyY19zdXNwZW5kLCBhZDcxNHhfaTJjX3Jlc3VtZSk7CiAKLXN0YXRpYyBpbnQgYWQ3MTR4X2kyY193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZywKLQkJCQl1bnNpZ25lZCBzaG9ydCBkYXRhKQorc3RhdGljIGludCBhZDcxNHhfaTJjX3dyaXRlKHN0cnVjdCBhZDcxNHhfY2hpcCAqY2hpcCwKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IGRhdGEpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQl1OCAqX3JlZyA9ICh1OCAqKSZyZWc7Ci0JdTggKl9kYXRhID0gKHU4ICopJmRhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+ZGV2KTsKKwlpbnQgZXJyb3I7CiAKLQl1OCB0eFs0XSA9IHsKLQkJX3JlZ1sxXSwKLQkJX3JlZ1swXSwKLQkJX2RhdGFbMV0sCi0JCV9kYXRhWzBdCi0JfTsKKwljaGlwLT54ZmVyX2J1ZlswXSA9IGNwdV90b19iZTE2KHJlZyk7CisJY2hpcC0+eGZlcl9idWZbMV0gPSBjcHVfdG9fYmUxNihkYXRhKTsKIAotCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIHR4LCA0KTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJJMkMgd3JpdGUgZXJyb3JcbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBhZDcxNHhfaTJjX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCQkJdW5zaWduZWQgc2hvcnQgKmRhdGEpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQl1OCAqX3JlZyA9ICh1OCAqKSZyZWc7Ci0JdTggKl9kYXRhID0gKHU4ICopZGF0YTsKLQotCXU4IHR4WzJdID0gewotCQlfcmVnWzFdLAotCQlfcmVnWzBdCi0JfTsKLQl1OCByeFsyXTsKLQotCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIHR4LCAyKTsKLQlpZiAocmV0ID49IDApCi0JCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHJ4LCAyKTsKLQotCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkkyQyByZWFkIGVycm9yXG4iKTsKLQl9IGVsc2UgewotCQlfZGF0YVswXSA9IHJ4WzFdOwotCQlfZGF0YVsxXSA9IHJ4WzBdOworCWVycm9yID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgKHU4ICopY2hpcC0+eGZlcl9idWYsCisJCQkJMiAqIHNpemVvZigqY2hpcC0+eGZlcl9idWYpKTsKKwlpZiAodW5saWtlbHkoZXJyb3IgPCAwKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkkyQyB3cml0ZSBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWQ3MTR4X2kyY19yZWFkKHN0cnVjdCBhZDcxNHhfY2hpcCAqY2hpcCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+ZGV2KTsKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwljaGlwLT54ZmVyX2J1ZlswXSA9IGNwdV90b19iZTE2KHJlZyk7CisKKwllcnJvciA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsICh1OCAqKWNoaXAtPnhmZXJfYnVmLAorCQkJCXNpemVvZigqY2hpcC0+eGZlcl9idWYpKTsKKwlpZiAoZXJyb3IgPj0gMCkKKwkJZXJyb3IgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAodTggKiljaGlwLT54ZmVyX2J1ZiwKKwkJCQkJbGVuICogc2l6ZW9mKCpjaGlwLT54ZmVyX2J1ZikpOworCisJaWYgKHVubGlrZWx5KGVycm9yIDwgMCkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJJMkMgcmVhZCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJZGF0YVtpXSA9IGJlMTZfdG9fY3B1KGNoaXAtPnhmZXJfYnVmW2ldKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDcxNHhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LXNwaS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC1zcGkuYwppbmRleCA0MTIwZGQ1Li44NzViNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LXNwaS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHgtc3BpLmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCiAgKiBBRDcxNFggQ2FwVG91Y2ggUHJvZ3JhbW1hYmxlIENvbnRyb2xsZXIgZHJpdmVyIChTUEkgYnVzKQogICoKLSAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4JLyogQlVTX0kyQyAqLworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CS8qIEJVU19TUEkgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTMwLDMwICszMCw2OCBAQAogCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYWQ3MTR4X3NwaV9wbSwgYWQ3MTR4X3NwaV9zdXNwZW5kLCBhZDcxNHhfc3BpX3Jlc3VtZSk7CiAKLXN0YXRpYyBpbnQgYWQ3MTR4X3NwaV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgcmVnLAotCQl1bnNpZ25lZCBzaG9ydCAqZGF0YSkKK3N0YXRpYyBpbnQgYWQ3MTR4X3NwaV9yZWFkKHN0cnVjdCBhZDcxNHhfY2hpcCAqY2hpcCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgKmRhdGEsIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKLQl1bnNpZ25lZCBzaG9ydCB0eCA9IEFENzE0eF9TUElfQ01EX1BSRUZJWCB8IEFENzE0eF9TUElfUkVBRCB8IHJlZzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShjaGlwLT5kZXYpOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtZXNzYWdlOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlclsyXTsKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CiAKLQlyZXR1cm4gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICh1OCAqKSZ0eCwgMiwgKHU4ICopZGF0YSwgMik7CisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KHhmZXIsIDAsIHNpemVvZih4ZmVyKSk7CisKKwljaGlwLT54ZmVyX2J1ZlswXSA9IGNwdV90b19iZTE2KEFENzE0eF9TUElfQ01EX1BSRUZJWCB8CisJCQkJCUFENzE0eF9TUElfUkVBRCB8IHJlZyk7CisJeGZlclswXS50eF9idWYgPSAmY2hpcC0+eGZlcl9idWZbMF07CisJeGZlclswXS5sZW4gPSBzaXplb2YoY2hpcC0+eGZlcl9idWZbMF0pOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyWzBdLCAmbWVzc2FnZSk7CisKKwl4ZmVyWzFdLnJ4X2J1ZiA9ICZjaGlwLT54ZmVyX2J1ZlsxXTsKKwl4ZmVyWzFdLmxlbiA9IHNpemVvZihjaGlwLT54ZmVyX2J1ZlsxXSkgKiBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJbMV0sICZtZXNzYWdlKTsKKworCWVycm9yID0gc3BpX3N5bmMoc3BpLCAmbWVzc2FnZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIlNQSSByZWFkIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlkYXRhW2ldID0gYmUxNl90b19jcHUoY2hpcC0+eGZlcl9idWZbaSArIDFdKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFkNzE0eF9zcGlfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCXVuc2lnbmVkIHNob3J0IGRhdGEpCitzdGF0aWMgaW50IGFkNzE0eF9zcGlfd3JpdGUoc3RydWN0IGFkNzE0eF9jaGlwICpjaGlwLAorCQkJICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgZGF0YSkKIHsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwotCXVuc2lnbmVkIHNob3J0IHR4WzJdID0gewotCQlBRDcxNHhfU1BJX0NNRF9QUkVGSVggfCByZWcsCi0JCWRhdGEKLQl9OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGNoaXAtPmRldik7CisJaW50IGVycm9yOwogCi0JcmV0dXJuIHNwaV93cml0ZShzcGksICh1OCAqKXR4LCA0KTsKKwljaGlwLT54ZmVyX2J1ZlswXSA9IGNwdV90b19iZTE2KEFENzE0eF9TUElfQ01EX1BSRUZJWCB8IHJlZyk7CisJY2hpcC0+eGZlcl9idWZbMV0gPSBjcHVfdG9fYmUxNihkYXRhKTsKKworCWVycm9yID0gc3BpX3dyaXRlKHNwaSwgKHU4ICopY2hpcC0+eGZlcl9idWYsCisJCQkgIDIgKiBzaXplb2YoKmNoaXAtPnhmZXJfYnVmKSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIlNQSSB3cml0ZSBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDcxNHhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGFkNzE0eF9jaGlwICpjaGlwOworCWludCBlcnI7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCWVyciA9IHNwaV9zZXR1cChzcGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2hpcCA9IGFkNzE0eF9wcm9iZSgmc3BpLT5kZXYsIEJVU19TUEksIHNwaS0+aXJxLAogCQkJICAgIGFkNzE0eF9zcGlfcmVhZCwgYWQ3MTR4X3NwaV93cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LmMKaW5kZXggYzNhNjJjNC4uY2E0MmM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBBRDcxNFggQ2FwVG91Y2ggUHJvZ3JhbW1hYmxlIENvbnRyb2xsZXIgZHJpdmVyIHN1cHBvcnRpbmcgQUQ3MTQyLzMvNy84LzdBCiAgKgotICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCkBAIC01OSw3ICs1OSw2IEBACiAjZGVmaW5lIFNUQUdFMTFfQU1CSUVOVAkJMHgyN0QKIAogI2RlZmluZSBQRVJfU1RBR0VfUkVHX05VTSAgICAgIDM2Ci0jZGVmaW5lIFNUQUdFX05VTSAgICAgICAgICAgICAgMTIKICNkZWZpbmUgU1RBR0VfQ0ZHUkVHX05VTSAgICAgICA4CiAjZGVmaW5lIFNZU19DRkdSRUdfTlVNICAgICAgICAgOAogCkBAIC0xMjQsMjcgKzEyMyw2IEBACiAgKiBpbmZvcm1hdGlvbiB0byBpbnRlZ3JhdGUgYWxsIHRoaW5ncyB3aGljaCB3aWxsIGJlIHByaXZhdGUgZGF0YQogICogb2Ygc3BpL2kyYyBkZXZpY2UKICAqLwotc3RydWN0IGFkNzE0eF9jaGlwIHsKLQl1bnNpZ25lZCBzaG9ydCBoX3N0YXRlOwotCXVuc2lnbmVkIHNob3J0IGxfc3RhdGU7Ci0JdW5zaWduZWQgc2hvcnQgY19zdGF0ZTsKLQl1bnNpZ25lZCBzaG9ydCBhZGNfcmVnW1NUQUdFX05VTV07Ci0JdW5zaWduZWQgc2hvcnQgYW1iX3JlZ1tTVEFHRV9OVU1dOwotCXVuc2lnbmVkIHNob3J0IHNlbnNvcl92YWxbU1RBR0VfTlVNXTsKLQotCXN0cnVjdCBhZDcxNHhfcGxhdGZvcm1fZGF0YSAqaHc7Ci0Jc3RydWN0IGFkNzE0eF9kcml2ZXJfZGF0YSAqc3c7Ci0KLQlpbnQgaXJxOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlhZDcxNHhfcmVhZF90IHJlYWQ7Ci0JYWQ3MTR4X3dyaXRlX3Qgd3JpdGU7Ci0KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLQl1bnNpZ25lZCBwcm9kdWN0OwotCXVuc2lnbmVkIHZlcnNpb247Ci19OwogCiBzdGF0aWMgdm9pZCBhZDcxNHhfdXNlX2NvbV9pbnQoc3RydWN0IGFkNzE0eF9jaGlwICphZDcxNHgsCiAJCQkJaW50IHN0YXJ0X3N0YWdlLCBpbnQgZW5kX3N0YWdlKQpAQCAtMTU0LDEzICsxMzIsMTMgQEAKIAogCW1hc2sgPSAoKDEgPDwgKGVuZF9zdGFnZSArIDEpKSAtIDEpIC0gKCgxIDw8IHN0YXJ0X3N0YWdlKSAtIDEpOwogCi0JYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LCBTVEdfQ09NX0lOVF9FTl9SRUcsICZkYXRhKTsKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBTVEdfQ09NX0lOVF9FTl9SRUcsICZkYXRhLCAxKTsKIAlkYXRhIHw9IDEgPDwgZW5kX3N0YWdlOwotCWFkNzE0eC0+d3JpdGUoYWQ3MTR4LT5kZXYsIFNUR19DT01fSU5UX0VOX1JFRywgZGF0YSk7CisJYWQ3MTR4LT53cml0ZShhZDcxNHgsIFNUR19DT01fSU5UX0VOX1JFRywgZGF0YSk7CiAKLQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIFNUR19ISUdIX0lOVF9FTl9SRUcsICZkYXRhKTsKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBTVEdfSElHSF9JTlRfRU5fUkVHLCAmZGF0YSwgMSk7CiAJZGF0YSAmPSB+bWFzazsKLQlhZDcxNHgtPndyaXRlKGFkNzE0eC0+ZGV2LCBTVEdfSElHSF9JTlRfRU5fUkVHLCBkYXRhKTsKKwlhZDcxNHgtPndyaXRlKGFkNzE0eCwgU1RHX0hJR0hfSU5UX0VOX1JFRywgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkNzE0eF91c2VfdGhyX2ludChzdHJ1Y3QgYWQ3MTR4X2NoaXAgKmFkNzE0eCwKQEAgLTE3MSwxMyArMTQ5LDEzIEBACiAKIAltYXNrID0gKCgxIDw8IChlbmRfc3RhZ2UgKyAxKSkgLSAxKSAtICgoMSA8PCBzdGFydF9zdGFnZSkgLSAxKTsKIAotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgU1RHX0NPTV9JTlRfRU5fUkVHLCAmZGF0YSk7CisJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgU1RHX0NPTV9JTlRfRU5fUkVHLCAmZGF0YSwgMSk7CiAJZGF0YSAmPSB+KDEgPDwgZW5kX3N0YWdlKTsKLQlhZDcxNHgtPndyaXRlKGFkNzE0eC0+ZGV2LCBTVEdfQ09NX0lOVF9FTl9SRUcsIGRhdGEpOworCWFkNzE0eC0+d3JpdGUoYWQ3MTR4LCBTVEdfQ09NX0lOVF9FTl9SRUcsIGRhdGEpOwogCi0JYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LCBTVEdfSElHSF9JTlRfRU5fUkVHLCAmZGF0YSk7CisJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgU1RHX0hJR0hfSU5UX0VOX1JFRywgJmRhdGEsIDEpOwogCWRhdGEgfD0gbWFzazsKLQlhZDcxNHgtPndyaXRlKGFkNzE0eC0+ZGV2LCBTVEdfSElHSF9JTlRfRU5fUkVHLCBkYXRhKTsKKwlhZDcxNHgtPndyaXRlKGFkNzE0eCwgU1RHX0hJR0hfSU5UX0VOX1JFRywgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgYWQ3MTR4X2NhbF9oaWdoZXN0X3N0YWdlKHN0cnVjdCBhZDcxNHhfY2hpcCAqYWQ3MTR4LApAQCAtMjczLDE1ICsyNTEsMTYgQEAKIAlzdHJ1Y3QgYWQ3MTR4X3NsaWRlcl9wbGF0ICpodyA9ICZhZDcxNHgtPmh3LT5zbGlkZXJbaWR4XTsKIAlpbnQgaTsKIAotCWZvciAoaSA9IGh3LT5zdGFydF9zdGFnZTsgaSA8PSBody0+ZW5kX3N0YWdlOyBpKyspIHsKLQkJYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LCBDRENfUkVTVUxUX1MwICsgaSwKLQkJCSZhZDcxNHgtPmFkY19yZWdbaV0pOwotCQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsCi0JCQkJU1RBR0UwX0FNQklFTlQgKyBpICogUEVSX1NUQUdFX1JFR19OVU0sCi0JCQkJJmFkNzE0eC0+YW1iX3JlZ1tpXSk7CisJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgQ0RDX1JFU1VMVF9TMCArIGh3LT5zdGFydF9zdGFnZSwKKwkJCSZhZDcxNHgtPmFkY19yZWdbaHctPnN0YXJ0X3N0YWdlXSwKKwkJCWh3LT5lbmRfc3RhZ2UgLSBody0+c3RhcnRfc3RhZ2UgKyAxKTsKIAotCQlhZDcxNHgtPnNlbnNvcl92YWxbaV0gPSBhYnMoYWQ3MTR4LT5hZGNfcmVnW2ldIC0KLQkJCQlhZDcxNHgtPmFtYl9yZWdbaV0pOworCWZvciAoaSA9IGh3LT5zdGFydF9zdGFnZTsgaSA8PSBody0+ZW5kX3N0YWdlOyBpKyspIHsKKwkJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgU1RBR0UwX0FNQklFTlQgKyBpICogUEVSX1NUQUdFX1JFR19OVU0sCisJCQkJJmFkNzE0eC0+YW1iX3JlZ1tpXSwgMSk7CisKKwkJYWQ3MTR4LT5zZW5zb3JfdmFsW2ldID0KKwkJCWFicyhhZDcxNHgtPmFkY19yZWdbaV0gLSBhZDcxNHgtPmFtYl9yZWdbaV0pOwogCX0KIH0KIApAQCAtNDQ0LDE1ICs0MjMsMTYgQEAKIAlzdHJ1Y3QgYWQ3MTR4X3doZWVsX3BsYXQgKmh3ID0gJmFkNzE0eC0+aHctPndoZWVsW2lkeF07CiAJaW50IGk7CiAKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBDRENfUkVTVUxUX1MwICsgaHctPnN0YXJ0X3N0YWdlLAorCQkJJmFkNzE0eC0+YWRjX3JlZ1tody0+c3RhcnRfc3RhZ2VdLAorCQkJaHctPmVuZF9zdGFnZSAtIGh3LT5zdGFydF9zdGFnZSArIDEpOworCiAJZm9yIChpID0gaHctPnN0YXJ0X3N0YWdlOyBpIDw9IGh3LT5lbmRfc3RhZ2U7IGkrKykgewotCQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIENEQ19SRVNVTFRfUzAgKyBpLAotCQkJJmFkNzE0eC0+YWRjX3JlZ1tpXSk7Ci0JCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwKLQkJCQlTVEFHRTBfQU1CSUVOVCArIGkgKiBQRVJfU1RBR0VfUkVHX05VTSwKLQkJCQkmYWQ3MTR4LT5hbWJfcmVnW2ldKTsKKwkJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgU1RBR0UwX0FNQklFTlQgKyBpICogUEVSX1NUQUdFX1JFR19OVU0sCisJCQkJJmFkNzE0eC0+YW1iX3JlZ1tpXSwgMSk7CiAJCWlmIChhZDcxNHgtPmFkY19yZWdbaV0gPiBhZDcxNHgtPmFtYl9yZWdbaV0pCi0JCQlhZDcxNHgtPnNlbnNvcl92YWxbaV0gPSBhZDcxNHgtPmFkY19yZWdbaV0gLQotCQkJCWFkNzE0eC0+YW1iX3JlZ1tpXTsKKwkJCWFkNzE0eC0+c2Vuc29yX3ZhbFtpXSA9CisJCQkJYWQ3MTR4LT5hZGNfcmVnW2ldIC0gYWQ3MTR4LT5hbWJfcmVnW2ldOwogCQllbHNlCiAJCQlhZDcxNHgtPnNlbnNvcl92YWxbaV0gPSAwOwogCX0KQEAgLTU5NywxNSArNTc3LDE2IEBACiAJc3RydWN0IGFkNzE0eF90b3VjaHBhZF9wbGF0ICpodyA9ICZhZDcxNHgtPmh3LT50b3VjaHBhZFtpZHhdOwogCWludCBpOwogCisJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgQ0RDX1JFU1VMVF9TMCArIGh3LT54X3N0YXJ0X3N0YWdlLAorCQkJJmFkNzE0eC0+YWRjX3JlZ1tody0+eF9zdGFydF9zdGFnZV0sCisJCQlody0+eF9lbmRfc3RhZ2UgLSBody0+eF9zdGFydF9zdGFnZSArIDEpOworCiAJZm9yIChpID0gaHctPnhfc3RhcnRfc3RhZ2U7IGkgPD0gaHctPnhfZW5kX3N0YWdlOyBpKyspIHsKLQkJYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LCBDRENfUkVTVUxUX1MwICsgaSwKLQkJCQkmYWQ3MTR4LT5hZGNfcmVnW2ldKTsKLQkJYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LAotCQkJCVNUQUdFMF9BTUJJRU5UICsgaSAqIFBFUl9TVEFHRV9SRUdfTlVNLAotCQkJCSZhZDcxNHgtPmFtYl9yZWdbaV0pOworCQlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBTVEFHRTBfQU1CSUVOVCArIGkgKiBQRVJfU1RBR0VfUkVHX05VTSwKKwkJCQkmYWQ3MTR4LT5hbWJfcmVnW2ldLCAxKTsKIAkJaWYgKGFkNzE0eC0+YWRjX3JlZ1tpXSA+IGFkNzE0eC0+YW1iX3JlZ1tpXSkKLQkJCWFkNzE0eC0+c2Vuc29yX3ZhbFtpXSA9IGFkNzE0eC0+YWRjX3JlZ1tpXSAtCi0JCQkJYWQ3MTR4LT5hbWJfcmVnW2ldOworCQkJYWQ3MTR4LT5zZW5zb3JfdmFsW2ldID0KKwkJCQlhZDcxNHgtPmFkY19yZWdbaV0gLSBhZDcxNHgtPmFtYl9yZWdbaV07CiAJCWVsc2UKIAkJCWFkNzE0eC0+c2Vuc29yX3ZhbFtpXSA9IDA7CiAJfQpAQCAtODkxLDcgKzg3Miw3IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgZGF0YTsKIAotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgQUQ3MTRYX1BBUlRJRF9SRUcsICZkYXRhKTsKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBBRDcxNFhfUEFSVElEX1JFRywgJmRhdGEsIDEpOwogCXN3aXRjaCAoZGF0YSAmIDB4RkZGMCkgewogCWNhc2UgQUQ3MTQyX1BBUlRJRDoKIAkJYWQ3MTR4LT5wcm9kdWN0ID0gMHg3MTQyOwpAQCAtOTQwLDIzICs5MjEsMjAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgU1RBR0VfTlVNOyBpKyspIHsKIAkJcmVnX2Jhc2UgPSBBRDcxNFhfU1RBR0VDRkdfUkVHICsgaSAqIFNUQUdFX0NGR1JFR19OVU07CiAJCWZvciAoaiA9IDA7IGogPCBTVEFHRV9DRkdSRUdfTlVNOyBqKyspCi0JCQlhZDcxNHgtPndyaXRlKGFkNzE0eC0+ZGV2LCByZWdfYmFzZSArIGosCisJCQlhZDcxNHgtPndyaXRlKGFkNzE0eCwgcmVnX2Jhc2UgKyBqLAogCQkJCQlhZDcxNHgtPmh3LT5zdGFnZV9jZmdfcmVnW2ldW2pdKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lTX0NGR1JFR19OVU07IGkrKykKLQkJYWQ3MTR4LT53cml0ZShhZDcxNHgtPmRldiwgQUQ3MTRYX1NZU0NGR19SRUcgKyBpLAorCQlhZDcxNHgtPndyaXRlKGFkNzE0eCwgQUQ3MTRYX1NZU0NGR19SRUcgKyBpLAogCQkJYWQ3MTR4LT5ody0+c3lzX2NmZ19yZWdbaV0pOwogCWZvciAoaSA9IDA7IGkgPCBTWVNfQ0ZHUkVHX05VTTsgaSsrKQotCQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIEFENzE0WF9TWVNDRkdfUkVHICsgaSwKLQkJCSZkYXRhKTsKKwkJYWQ3MTR4LT5yZWFkKGFkNzE0eCwgQUQ3MTRYX1NZU0NGR19SRUcgKyBpLCAmZGF0YSwgMSk7CiAKLQlhZDcxNHgtPndyaXRlKGFkNzE0eC0+ZGV2LCBBRDcxNFhfU1RHX0NBTF9FTl9SRUcsIDB4RkZGKTsKKwlhZDcxNHgtPndyaXRlKGFkNzE0eCwgQUQ3MTRYX1NUR19DQUxfRU5fUkVHLCAweEZGRik7CiAKIAkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLwotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgU1RHX0xPV19JTlRfU1RBX1JFRywgJmRhdGEpOwotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgU1RHX0hJR0hfSU5UX1NUQV9SRUcsICZkYXRhKTsKLQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIFNUR19DT01fSU5UX1NUQV9SRUcsICZkYXRhKTsKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBTVEdfTE9XX0lOVF9TVEFfUkVHLCAmYWQ3MTR4LT5sX3N0YXRlLCAzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGFkNzE0eF9pbnRlcnJ1cHRfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC05NjYsOSArOTQ0LDcgQEAKIAogCW11dGV4X2xvY2soJmFkNzE0eC0+bXV0ZXgpOwogCi0JYWQ3MTR4LT5yZWFkKGFkNzE0eC0+ZGV2LCBTVEdfTE9XX0lOVF9TVEFfUkVHLCAmYWQ3MTR4LT5sX3N0YXRlKTsKLQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIFNUR19ISUdIX0lOVF9TVEFfUkVHLCAmYWQ3MTR4LT5oX3N0YXRlKTsKLQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIFNUR19DT01fSU5UX1NUQV9SRUcsICZhZDcxNHgtPmNfc3RhdGUpOworCWFkNzE0eC0+cmVhZChhZDcxNHgsIFNUR19MT1dfSU5UX1NUQV9SRUcsICZhZDcxNHgtPmxfc3RhdGUsIDMpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkNzE0eC0+aHctPmJ1dHRvbl9udW07IGkrKykKIAkJYWQ3MTR4X2J1dHRvbl9zdGF0ZV9tYWNoaW5lKGFkNzE0eCwgaSk7CkBAIC0xMjQ1LDcgKzEyMjEsNyBAQAogCW11dGV4X2xvY2soJmFkNzE0eC0+bXV0ZXgpOwogCiAJZGF0YSA9IGFkNzE0eC0+aHctPnN5c19jZmdfcmVnW0FENzE0WF9QV1JfQ1RSTF0gfCAweDM7Ci0JYWQ3MTR4LT53cml0ZShhZDcxNHgtPmRldiwgQUQ3MTRYX1BXUl9DVFJMLCBkYXRhKTsKKwlhZDcxNHgtPndyaXRlKGFkNzE0eCwgQUQ3MTRYX1BXUl9DVFJMLCBkYXRhKTsKIAogCW11dGV4X3VubG9jaygmYWQ3MTR4LT5tdXRleCk7CiAKQEAgLTEyNTUsMjQgKzEyMzEsMjAgQEAKIAogaW50IGFkNzE0eF9lbmFibGUoc3RydWN0IGFkNzE0eF9jaGlwICphZDcxNHgpCiB7Ci0JdW5zaWduZWQgc2hvcnQgZGF0YTsKLQogCWRldl9kYmcoYWQ3MTR4LT5kZXYsICIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCiAJbXV0ZXhfbG9jaygmYWQ3MTR4LT5tdXRleCk7CiAKIAkvKiByZXN1bWUgdG8gbm9uLXNodXRkb3duIG1vZGUgKi8KIAotCWFkNzE0eC0+d3JpdGUoYWQ3MTR4LT5kZXYsIEFENzE0WF9QV1JfQ1RSTCwKKwlhZDcxNHgtPndyaXRlKGFkNzE0eCwgQUQ3MTRYX1BXUl9DVFJMLAogCQkJYWQ3MTR4LT5ody0+c3lzX2NmZ19yZWdbQUQ3MTRYX1BXUl9DVFJMXSk7CiAKIAkvKiBtYWtlIHN1cmUgdGhlIGludGVycnVwdCBvdXRwdXQgbGluZSBpcyBub3QgbG93IGxldmVsIGFmdGVyIHJlc3VtZSwKIAkgKiBvdGhlcndpc2Ugd2Ugd2lsbCBnZXQgbm8gY2hhbmNlIHRvIGVudGVyIGZhbGxpbmctZWRnZSBpcnEgYWdhaW4KIAkgKi8KIAotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgU1RHX0xPV19JTlRfU1RBX1JFRywgJmRhdGEpOwotCWFkNzE0eC0+cmVhZChhZDcxNHgtPmRldiwgU1RHX0hJR0hfSU5UX1NUQV9SRUcsICZkYXRhKTsKLQlhZDcxNHgtPnJlYWQoYWQ3MTR4LT5kZXYsIFNUR19DT01fSU5UX1NUQV9SRUcsICZkYXRhKTsKKwlhZDcxNHgtPnJlYWQoYWQ3MTR4LCBTVEdfTE9XX0lOVF9TVEFfUkVHLCAmYWQ3MTR4LT5sX3N0YXRlLCAzKTsKIAogCW11dGV4X3VubG9jaygmYWQ3MTR4LT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguaCBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZDcxNHguaAppbmRleCA0NWM1NGZiLi4zYzg1NDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYWQ3MTR4LmgKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2FkNzE0eC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEFENzE0WCBDYXBUb3VjaCBQcm9ncmFtbWFibGUgQ29udHJvbGxlciBkcml2ZXIgKGJ1cyBpbnRlcmZhY2VzKQogICoKLSAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtMTEsMTEgKzExLDQwIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisjZGVmaW5lIFNUQUdFX05VTSAgICAgICAgICAgICAgMTIKKwogc3RydWN0IGRldmljZTsKK3N0cnVjdCBhZDcxNHhfcGxhdGZvcm1fZGF0YTsKK3N0cnVjdCBhZDcxNHhfZHJpdmVyX2RhdGE7CiBzdHJ1Y3QgYWQ3MTR4X2NoaXA7CiAKLXR5cGVkZWYgaW50ICgqYWQ3MTR4X3JlYWRfdCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKik7Ci10eXBlZGVmIGludCAoKmFkNzE0eF93cml0ZV90KShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Cit0eXBlZGVmIGludCAoKmFkNzE0eF9yZWFkX3QpKHN0cnVjdCBhZDcxNHhfY2hpcCAqLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKiwgc2l6ZV90KTsKK3R5cGVkZWYgaW50ICgqYWQ3MTR4X3dyaXRlX3QpKHN0cnVjdCBhZDcxNHhfY2hpcCAqLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworCitzdHJ1Y3QgYWQ3MTR4X2NoaXAgeworCXVuc2lnbmVkIHNob3J0IGxfc3RhdGU7CisJdW5zaWduZWQgc2hvcnQgaF9zdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydCBjX3N0YXRlOworCXVuc2lnbmVkIHNob3J0IGFkY19yZWdbU1RBR0VfTlVNXTsKKwl1bnNpZ25lZCBzaG9ydCBhbWJfcmVnW1NUQUdFX05VTV07CisJdW5zaWduZWQgc2hvcnQgc2Vuc29yX3ZhbFtTVEFHRV9OVU1dOworCisJc3RydWN0IGFkNzE0eF9wbGF0Zm9ybV9kYXRhICpodzsKKwlzdHJ1Y3QgYWQ3MTR4X2RyaXZlcl9kYXRhICpzdzsKKworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqZGV2OworCWFkNzE0eF9yZWFkX3QgcmVhZDsKKwlhZDcxNHhfd3JpdGVfdCB3cml0ZTsKKworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCXVuc2lnbmVkIHByb2R1Y3Q7CisJdW5zaWduZWQgdmVyc2lvbjsKKworCV9fYmUxNiB4ZmVyX2J1ZlsxNl0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCit9OwogCiBpbnQgYWQ3MTR4X2Rpc2FibGUoc3RydWN0IGFkNzE0eF9jaGlwICphZDcxNHgpOwogaW50IGFkNzE0eF9lbmFibGUoc3RydWN0IGFkNzE0eF9jaGlwICphZDcxNHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2t4dGo5LmMgYi9kcml2ZXJzL2lucHV0L21pc2Mva3h0ajkuYwppbmRleCBjNDU2ZjYzLi43ODM1OTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mva3h0ajkuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mva3h0ajkuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L2t4dGo5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQtcG9sbGRldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL21tYTg0NTAuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9tbWE4NDUwLmMKaW5kZXggMjBmOGY5Mi4uMDc5NDc3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL21tYTg0NTAuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvbW1hODQ1MC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC1wb2xsZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKICNkZWZpbmUgTU1BODQ1MF9EUlZfTkFNRQkibW1hODQ1MCIKIApAQCAtMjI5LDEwICsyMzAsMTcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbW1hODQ1MF9pZCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1tYTg0NTBfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbW1hODQ1MCIsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW1hODQ1MF9kdF9pZHMpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbW1hODQ1MF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSBNTUE4NDUwX0RSVl9OQU1FLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbW1hODQ1MF9kdF9pZHMsCiAJfSwKIAkucHJvYmUJCT0gbW1hODQ1MF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1tYTg0NTBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9tcHUzMDUwLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvbXB1MzA1MC5jCmluZGV4IGI5NWZhYzEuLmY3MWRjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9tcHUzMDUwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL21wdTMwNTAuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiBlcnJfcG1fc2V0X3N1c3BlbmRlZDoKIAlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsKIGVycl9mcmVlX21lbToKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpZGV2KTsKKwlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKIAlrZnJlZShzZW5zb3IpOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKaW5kZXggMzEyNjk4My4uZGEyODAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKQEAgLTY3LDYgKzY3LDE0IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfQU5TSQkweDAyNDUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9JU08JMHgwMjQ2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSklTCTB4MDI0NworLyogTWFjYm9va0FpcjQsMiAodW5pYm9keSwgSnVseSAyMDExKSAqLworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc2X0FOU0kJMHgwMjRjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzZfSVNPCTB4MDI0ZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc2X0pJUwkweDAyNGUKKy8qIE1hY2Jvb2s4LDIgKHVuaWJvZHkpICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVBX0FOU0kJMHgwMjUyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVBX0lTTwkweDAyNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNUFfSklTCTB4MDI1NAogCiAjZGVmaW5lIEJDTTU5NzRfREVWSUNFKHByb2QpIHsJCQkJCVwKIAkubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAkJXApAQCAtMTA0LDYgKzExMiwxNCBAQAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfQU5TSSksCiAJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNV9JU08pLAogCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVfSklTKSwKKwkvKiBNYWNib29rQWlyNCwyICovCisJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNl9BTlNJKSwKKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc2X0lTTyksCisJQkNNNTk3NF9ERVZJQ0UoVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNl9KSVMpLAorCS8qIE1hY2Jvb2tQcm84LDIgKi8KKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1QV9BTlNJKSwKKwlCQ001OTc0X0RFVklDRShVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc1QV9JU08pLAorCUJDTTU5NzRfREVWSUNFKFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVBX0pJUyksCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7fQogfTsKQEAgLTI5NCw2ICszMTAsMzAgQEAKIAkJeyBESU1fWCwgRElNX1ggLyBTTl9DT09SRCwgLTQ0MTUsIDUwNTAgfSwKIAkJeyBESU1fWSwgRElNX1kgLyBTTl9DT09SRCwgLTU1LCA2NjgwIH0KIAl9LAorCXsKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNl9BTlNJLAorCQlVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkc2X0lTTywKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNl9KSVMsCisJCUhBU19JTlRFR1JBVEVEX0JVVFRPTiwKKwkJMHg4NCwgc2l6ZW9mKHN0cnVjdCBidF9kYXRhKSwKKwkJMHg4MSwgVFlQRTIsIEZJTkdFUl9UWVBFMiwgRklOR0VSX1RZUEUyICsgU0laRU9GX0FMTF9GSU5HRVJTLAorCQl7IERJTV9QUkVTU1VSRSwgRElNX1BSRVNTVVJFIC8gU05fUFJFU1NVUkUsIDAsIDMwMCB9LAorCQl7IERJTV9XSURUSCwgRElNX1dJRFRIIC8gU05fV0lEVEgsIDAsIDIwNDggfSwKKwkJeyBESU1fWCwgRElNX1ggLyBTTl9DT09SRCwgLTQ2MjAsIDUxNDAgfSwKKwkJeyBESU1fWSwgRElNX1kgLyBTTl9DT09SRCwgLTE1MCwgNjYwMCB9CisJfSwKKwl7CisJCVVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVBX0FOU0ksCisJCVVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzVBX0lTTywKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HNUFfSklTLAorCQlIQVNfSU5URUdSQVRFRF9CVVRUT04sCisJCTB4ODQsIHNpemVvZihzdHJ1Y3QgYnRfZGF0YSksCisJCTB4ODEsIFRZUEUyLCBGSU5HRVJfVFlQRTIsIEZJTkdFUl9UWVBFMiArIFNJWkVPRl9BTExfRklOR0VSUywKKwkJeyBESU1fUFJFU1NVUkUsIERJTV9QUkVTU1VSRSAvIFNOX1BSRVNTVVJFLCAwLCAzMDAgfSwKKwkJeyBESU1fV0lEVEgsIERJTV9XSURUSCAvIFNOX1dJRFRILCAwLCAyMDQ4IH0sCisJCXsgRElNX1gsIERJTV9YIC8gU05fQ09PUkQsIC00NzUwLCA1MjgwIH0sCisJCXsgRElNX1ksIERJTV9ZIC8gU05fQ09PUkQsIC0xNTAsIDY3MzAgfQorCX0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKaW5kZXggOTU1NzdjMS4uNGQxN2Q5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgREVCVUcKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYnBzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3hpbGlueF9wczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCmluZGV4IDgwYmFhNTMuLmQ2NGM1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8veGlsaW54X3BzMi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggNDQ5YzBhNC4uZDI3YzlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNkZWZpbmUgVVNCX1JFUV9HRVRfUkVQT1JUCTB4MDEKICNkZWZpbmUgVVNCX1JFUV9TRVRfUkVQT1JUCTB4MDkKICNkZWZpbmUgV0FDX0hJRF9GRUFUVVJFX1JFUE9SVAkweDAzCisjZGVmaW5lIFdBQ19NU0dfUkVUUklFUwkJNQogCiBzdGF0aWMgaW50IHVzYl9nZXRfcmVwb3J0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBjaGFyIHR5cGUsCiAJCQkJdW5zaWduZWQgY2hhciBpZCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKQEAgLTE2NSw3ICsxNjYsNyBAQAogCQkJcmVwb3J0LAogCQkJaGlkX2Rlc2MtPndEZXNjcmlwdG9yTGVuZ3RoLAogCQkJNTAwMCk7IC8qIDUgc2VjcyAqLwotCX0gd2hpbGUgKHJlc3VsdCA8IDAgJiYgbGltaXQrKyA8IDUpOworCX0gd2hpbGUgKHJlc3VsdCA8IDAgJiYgbGltaXQrKyA8IFdBQ19NU0dfUkVUUklFUyk7CiAKIAkvKiBObyBuZWVkIHRvIHBhcnNlIHRoZSBEZXNjcmlwdG9yLiBJdCBpc24ndCBhbiBlcnJvciB0aG91Z2ggKi8KIAlpZiAocmVzdWx0IDwgMCkKQEAgLTMxOSwyNCArMzIwLDI2IEBACiAJaW50IGxpbWl0ID0gMCwgcmVwb3J0X2lkID0gMjsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JcmVwX2RhdGEgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCXJlcF9kYXRhID0ga21hbGxvYyg0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcF9kYXRhKQogCQlyZXR1cm4gZXJyb3I7CiAKLQkvKiBhc2sgdG8gcmVwb3J0IHRhYmxldCBkYXRhIGlmIGl0IGlzIDJGR1QgVGFibGV0IFBDIG9yCisJLyogYXNrIHRvIHJlcG9ydCB0YWJsZXQgZGF0YSBpZiBpdCBpcyBNVCBUYWJsZXQgUEMgb3IKIAkgKiBub3QgYSBUYWJsZXQgUEMgKi8KIAlpZiAoZmVhdHVyZXMtPnR5cGUgPT0gVEFCTEVUUEMyRkcpIHsKIAkJZG8gewogCQkJcmVwX2RhdGFbMF0gPSAzOwogCQkJcmVwX2RhdGFbMV0gPSA0OworCQkJcmVwX2RhdGFbMl0gPSAwOworCQkJcmVwX2RhdGFbM10gPSAwOwogCQkJcmVwb3J0X2lkID0gMzsKIAkJCWVycm9yID0gdXNiX3NldF9yZXBvcnQoaW50ZiwgV0FDX0hJRF9GRUFUVVJFX1JFUE9SVCwKLQkJCQlyZXBvcnRfaWQsIHJlcF9kYXRhLCAyKTsKKwkJCQlyZXBvcnRfaWQsIHJlcF9kYXRhLCA0KTsKIAkJCWlmIChlcnJvciA+PSAwKQogCQkJCWVycm9yID0gdXNiX2dldF9yZXBvcnQoaW50ZiwKIAkJCQkJV0FDX0hJRF9GRUFUVVJFX1JFUE9SVCwgcmVwb3J0X2lkLAotCQkJCQlyZXBfZGF0YSwgMyk7Ci0JCX0gd2hpbGUgKChlcnJvciA8IDAgfHwgcmVwX2RhdGFbMV0gIT0gNCkgJiYgbGltaXQrKyA8IDUpOworCQkJCQlyZXBfZGF0YSwgNCk7CisJCX0gd2hpbGUgKChlcnJvciA8IDAgfHwgcmVwX2RhdGFbMV0gIT0gNCkgJiYgbGltaXQrKyA8IFdBQ19NU0dfUkVUUklFUyk7CiAJfSBlbHNlIGlmIChmZWF0dXJlcy0+dHlwZSAhPSBUQUJMRVRQQykgewogCQlkbyB7CiAJCQlyZXBfZGF0YVswXSA9IDI7CkBAIC0zNDcsNyArMzUwLDcgQEAKIAkJCQllcnJvciA9IHVzYl9nZXRfcmVwb3J0KGludGYsCiAJCQkJCVdBQ19ISURfRkVBVFVSRV9SRVBPUlQsIHJlcG9ydF9pZCwKIAkJCQkJcmVwX2RhdGEsIDIpOwotCQl9IHdoaWxlICgoZXJyb3IgPCAwIHx8IHJlcF9kYXRhWzFdICE9IDIpICYmIGxpbWl0KysgPCA1KTsKKwkJfSB3aGlsZSAoKGVycm9yIDwgMCB8fCByZXBfZGF0YVsxXSAhPSAyKSAmJiBsaW1pdCsrIDwgV0FDX01TR19SRVRSSUVTKTsKIAl9CiAKIAlrZnJlZShyZXBfZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IDAzZWJjYzguLmMxYzJmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC0xNDYwLDYgKzE0NjAsOSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc18weEQ0ID0KIAl7ICJXYWNvbSBCYW1ib28gUGVuIiwgICAgIFdBQ09NX1BLR0xFTl9CQkZVTiwgICAgIDE0NzIwLCAgOTIwMCwgMTAyMywKIAkgIDYzLCBCQU1CT09fUFQsIFdBQ09NX0lOVFVPU19SRVMsIFdBQ09NX0lOVFVPU19SRVMgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNfMHhENSA9CisJeyAiV2Fjb20gQmFtYm9vIFBlbiA2eDgiLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAyMTY0OCwgMTM1MzAsIDEwMjMsCisJICA2MywgQkFNQk9PX1BULCBXQUNPTV9JTlRVT1NfUkVTLCBXQUNPTV9JTlRVT1NfUkVTIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDYgPQogCXsgIldhY29tIEJhbWJvb1BUIDJGRyA0eDUiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMTQ3MjAsICA5MjAwLCAxMDIzLAogCSAgNjMsIEJBTUJPT19QVCwgV0FDT01fSU5UVU9TX1JFUywgV0FDT01fSU5UVU9TX1JFUyB9OwpAQCAtMTU2NCw2ICsxNTY3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMikgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENSkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENikgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEOCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCmluZGV4IGJjM2I1MTguLjEzMWY5ZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKQEAgLTI0OSwxMiArMjQ5LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9fYWQ3ODc5X2Rpc2FibGUoc3RydWN0IGFkNzg3OSAqdHMpCiB7CisJdTE2IHJlZyA9ICh0cy0+Y21kX2NydGwyICYgfkFENzg3OV9QTSgtMSkpIHwKKwkJQUQ3ODc5X1BNKEFENzg3OV9QTV9TSFVURE9XTik7CiAJZGlzYWJsZV9pcnEodHMtPmlycSk7CiAKIAlpZiAoZGVsX3RpbWVyX3N5bmMoJnRzLT50aW1lcikpCiAJCWFkNzg3OV90c19ldmVudF9yZWxlYXNlKHRzKTsKIAotCWFkNzg3OV93cml0ZSh0cywgQUQ3ODc5X1JFR19DVFJMMiwgQUQ3ODc5X1BNKEFENzg3OV9QTV9TSFVURE9XTikpOworCWFkNzg3OV93cml0ZSh0cywgQUQ3ODc5X1JFR19DVFJMMiwgcmVnKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF9teHRfdHMuYwppbmRleCBhZTAwNjA0Li5mNWQ2Njg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX214dF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfbXh0X3RzLmMKQEAgLTI0NCw2ICsyNDQsNyBAQAogCWludCB4OwogCWludCB5OwogCWludCBhcmVhOworCWludCBwcmVzc3VyZTsKIH07CiAKIC8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAqLwpAQCAtNTM2LDYgKzUzNyw4IEBACiAJCQkJCWZpbmdlcltpZF0ueCk7CiAJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX01UX1BPU0lUSU9OX1ksCiAJCQkJCWZpbmdlcltpZF0ueSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX01UX1BSRVNTVVJFLAorCQkJCQlmaW5nZXJbaWRdLnByZXNzdXJlKTsKIAkJfSBlbHNlIHsKIAkJCWZpbmdlcltpZF0uc3RhdHVzID0gMDsKIAkJfQpAQCAtNTQ2LDYgKzU0OSw4IEBACiAJaWYgKHN0YXR1cyAhPSBNWFRfUkVMRUFTRSkgewogCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIGZpbmdlcltzaW5nbGVfaWRdLngpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1ksIGZpbmdlcltzaW5nbGVfaWRdLnkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwKKwkJCQkgQUJTX1BSRVNTVVJFLCBmaW5nZXJbc2luZ2xlX2lkXS5wcmVzc3VyZSk7CiAJfQogCiAJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwpAQCAtNTYwLDYgKzU2NSw3IEBACiAJaW50IHg7CiAJaW50IHk7CiAJaW50IGFyZWE7CisJaW50IHByZXNzdXJlOwogCiAJLyogQ2hlY2sgdGhlIHRvdWNoIGlzIHByZXNlbnQgb24gdGhlIHNjcmVlbiAqLwogCWlmICghKHN0YXR1cyAmIE1YVF9ERVRFQ1QpKSB7CkBAIC01ODQsNiArNTkwLDcgQEAKIAkJeSA9IHkgPj4gMjsKIAogCWFyZWEgPSBtZXNzYWdlLT5tZXNzYWdlWzRdOworCXByZXNzdXJlID0gbWVzc2FnZS0+bWVzc2FnZVs1XTsKIAogCWRldl9kYmcoZGV2LCAiWyVkXSAlcyB4OiAlZCwgeTogJWQsIGFyZWE6ICVkXG4iLCBpZCwKIAkJc3RhdHVzICYgTVhUX01PVkUgPyAibW92ZWQiIDogInByZXNzZWQiLApAQCAtNTk0LDYgKzYwMSw3IEBACiAJZmluZ2VyW2lkXS54ID0geDsKIAlmaW5nZXJbaWRdLnkgPSB5OwogCWZpbmdlcltpZF0uYXJlYSA9IGFyZWE7CisJZmluZ2VyW2lkXS5wcmVzc3VyZSA9IHByZXNzdXJlOwogCiAJbXh0X2lucHV0X3JlcG9ydChkYXRhLCBpZCk7CiB9CkBAIC0xMTE2LDYgKzExMjQsOCBAQAogCQkJICAgICAwLCBkYXRhLT5tYXhfeCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwKIAkJCSAgICAgMCwgZGF0YS0+bWF4X3ksIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLAorCQkJICAgICAwLCAyNTUsIDAsIDApOwogCiAJLyogRm9yIG11bHRpIHRvdWNoICovCiAJaW5wdXRfbXRfaW5pdF9zbG90cyhpbnB1dF9kZXYsIE1YVF9NQVhfRklOR0VSKTsKQEAgLTExMjUsNiArMTEzNSw4IEBACiAJCQkgICAgIDAsIGRhdGEtPm1heF94LCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QT1NJVElPTl9ZLAogCQkJICAgICAwLCBkYXRhLT5tYXhfeSwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfUFJFU1NVUkUsCisJCQkgICAgIDAsIDI1NSwgMCwgMCk7CiAKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGRhdGEpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYXgxMTgwMV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYXgxMTgwMV90cy5jCmluZGV4IDRmMjcxM2QuLjQ2MjdmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWF4MTE4MDFfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21heDExODAxX3RzLmMKQEAgLTksNyArOSw4IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCmluZGV4IDA4OWIwYTAuLjBlOGY2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYwpAQCAtMTMsNiArMTMsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCmluZGV4IGExNGY4ZGMuLjBlNDIyN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYwpAQCAtNjA1LDcgKzYwNSw5IEBACiAgKiBXcml0ZXMgdGhlIGNvbW1hbmQgdG8gdGhlIElPTU1VcyBjb21tYW5kIGJ1ZmZlciBhbmQgaW5mb3JtcyB0aGUKICAqIGhhcmR3YXJlIGFib3V0IHRoZSBuZXcgY29tbWFuZC4KICAqLwotc3RhdGljIGludCBpb21tdV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCBzdHJ1Y3QgaW9tbXVfY21kICpjbWQpCitzdGF0aWMgaW50IGlvbW11X3F1ZXVlX2NvbW1hbmRfc3luYyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKKwkJCQkgICAgc3RydWN0IGlvbW11X2NtZCAqY21kLAorCQkJCSAgICBib29sIHN5bmMpCiB7CiAJdTMyIGxlZnQsIHRhaWwsIGhlYWQsIG5leHRfdGFpbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjM5LDEzICs2NDEsMTggQEAKIAljb3B5X2NtZF90b19idWZmZXIoaW9tbXUsIGNtZCwgdGFpbCk7CiAKIAkvKiBXZSBuZWVkIHRvIHN5bmMgbm93IHRvIG1ha2Ugc3VyZSBhbGwgY29tbWFuZHMgYXJlIHByb2Nlc3NlZCAqLwotCWlvbW11LT5uZWVkX3N5bmMgPSB0cnVlOworCWlvbW11LT5uZWVkX3N5bmMgPSBzeW5jOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlvbW11X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKK3sKKwlyZXR1cm4gaW9tbXVfcXVldWVfY29tbWFuZF9zeW5jKGlvbW11LCBjbWQsIHRydWUpOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kCiAgKiBidWZmZXIgb2YgYW4gSU9NTVUKQEAgLTY2MSw3ICs2NjgsNyBAQAogCiAJYnVpbGRfY29tcGxldGlvbl93YWl0KCZjbWQsICh1NjQpJnNlbSk7CiAKLQlyZXQgPSBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwlyZXQgPSBpb21tdV9xdWV1ZV9jb21tYW5kX3N5bmMoaW9tbXUsICZjbWQsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC04NDAsMTQgKzg0Nyw5IEBACiBzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfZGV2aWNlcyhzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKIAlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9kYXRhLCAmZG9tYWluLT5kZXZfbGlzdCwgbGlzdCkKIAkJZGV2aWNlX2ZsdXNoX2R0ZShkZXZfZGF0YSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWFtcy1kZWx0YS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtYW1zLWRlbHRhLmMKaW5kZXggYjk4MjYwMy4uOGMwMDkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtYW1zLWRlbHRhLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtYW1zLWRlbHRhLmMKQEAgLTgsNiArOCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwppbmRleCAzZWJlMzgyLi5lYTIxODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1iZDI4MDIuYwpAQCAtNjYyLDYgKzY2MiwxMSBAQAogc3RhdGljIHZvaWQgYmQyODAyX3VucmVnaXN0ZXJfbGVkX2NsYXNzZGV2KHN0cnVjdCBiZDI4MDJfbGVkICpsZWQpCiB7CiAJY2FuY2VsX3dvcmtfc3luYygmbGVkLT53b3JrKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDJiKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDJnKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDJyKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDFiKTsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDFnKTsKIAlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5jZGV2X2xlZDFyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKaW5kZXggZTRjZTFmZC4uYmNmYmQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKaW5kZXggZDg3YzlkMC4uMzI4YzY0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy10aW1lci5jCkBAIC00MSw2ICs0MSw3IEBACiAKIAlpZiAoY291bnQgPT0gc2l6ZSkgewogCQlsZWRfYmxpbmtfc2V0KGxlZF9jZGV2LCAmc3RhdGUsICZsZWRfY2Rldi0+YmxpbmtfZGVsYXlfb2ZmKTsKKwkJbGVkX2NkZXYtPmJsaW5rX2RlbGF5X29uID0gc3RhdGU7CiAJCXJldCA9IGNvdW50OwogCX0KIApAQCAtNjksNiArNzAsNyBAQAogCiAJaWYgKGNvdW50ID09IHNpemUpIHsKIAkJbGVkX2JsaW5rX3NldChsZWRfY2RldiwgJmxlZF9jZGV2LT5ibGlua19kZWxheV9vbiwgJnN0YXRlKTsKKwkJbGVkX2NkZXYtPmJsaW5rX2RlbGF5X29mZiA9IHN0YXRlOwogCQlyZXQgPSBjb3VudDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCA4NDIwMTI5Li5mNzVhNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC0yNDEsMTIgKzI0MSwxMyBAQAogICAgICAgICAgbmVlZGVkIGZvciBsaXZlIGRhdGEgbWlncmF0aW9uIHRvb2xzIHN1Y2ggYXMgJ3B2bW92ZScuCiAKIGNvbmZpZyBETV9SQUlECi0gICAgICAgdHJpc3RhdGUgIlJBSUQgNC81LzYgdGFyZ2V0IChFWFBFUklNRU5UQUwpIgorICAgICAgIHRyaXN0YXRlICJSQUlEIDEvNC81LzYgdGFyZ2V0IChFWFBFUklNRU5UQUwpIgogICAgICAgIGRlcGVuZHMgb24gQkxLX0RFVl9ETSAmJiBFWFBFUklNRU5UQUwKKyAgICAgICBzZWxlY3QgTURfUkFJRDEKICAgICAgICBzZWxlY3QgTURfUkFJRDQ1NgogICAgICAgIHNlbGVjdCBCTEtfREVWX01ECiAgICAgICAgLS0taGVscC0tLQotCSBBIGRtIHRhcmdldCB0aGF0IHN1cHBvcnRzIFJBSUQ0LCBSQUlENSBhbmQgUkFJRDYgbWFwcGluZ3MKKwkgQSBkbSB0YXJnZXQgdGhhdCBzdXBwb3J0cyBSQUlEMSwgUkFJRDQsIFJBSUQ1IGFuZCBSQUlENiBtYXBwaW5ncwogCiAJIEEgUkFJRC01IHNldCBvZiBOIGRyaXZlcyB3aXRoIGEgY2FwYWNpdHkgb2YgQyBNQiBwZXIgZHJpdmUgcHJvdmlkZXMKIAkgdGhlIGNhcGFjaXR5IG9mIEMgKiAoTiAtIDEpIE1CLCBhbmQgcHJvdGVjdHMgYWdhaW5zdCBhIGZhaWx1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwppbmRleCBiYWU2YzRlLi40OWRhNTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMKKysrIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogCiAjZGVmaW5lIERNX01TR19QUkVGSVggImNyeXB0IgotI2RlZmluZSBNRVNHX1NUUih4KSB4LCBzaXplb2YoeCkKIAogLyoKICAqIGNvbnRleHQgaG9sZGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIG11bHRpLXBhcnQgY29udmVyc2lvbgpAQCAtMjM5LDcgKzIzOCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqZG1yZXEpCiB7CiAJbWVtc2V0KGl2LCAwLCBjYy0+aXZfc2l6ZSk7Ci0JKih1MzIgKilpdiA9IGNwdV90b19sZTMyKGRtcmVxLT5pdl9zZWN0b3IgJiAweGZmZmZmZmZmKTsKKwkqKF9fbGUzMiAqKWl2ID0gY3B1X3RvX2xlMzIoZG1yZXEtPml2X3NlY3RvciAmIDB4ZmZmZmZmZmYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDgsNyArMjQ3LDcgQEAKIAkJCQlzdHJ1Y3QgZG1fY3J5cHRfcmVxdWVzdCAqZG1yZXEpCiB7CiAJbWVtc2V0KGl2LCAwLCBjYy0+aXZfc2l6ZSk7Ci0JKih1NjQgKilpdiA9IGNwdV90b19sZTY0KGRtcmVxLT5pdl9zZWN0b3IpOworCSooX19sZTY0ICopaXYgPSBjcHVfdG9fbGU2NChkbXJlcS0+aXZfc2VjdG9yKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDE1LDcgKzQxNCw3IEBACiAJc3RydWN0IGNyeXB0b19jaXBoZXIgKmVzc2l2X3RmbSA9IHRoaXNfY3J5cHRfY29uZmlnKGNjKS0+aXZfcHJpdmF0ZTsKIAogCW1lbXNldChpdiwgMCwgY2MtPml2X3NpemUpOwotCSoodTY0ICopaXYgPSBjcHVfdG9fbGU2NChkbXJlcS0+aXZfc2VjdG9yKTsKKwkqKF9fbGU2NCAqKWl2ID0gY3B1X3RvX2xlNjQoZG1yZXEtPml2X3NlY3Rvcik7CiAJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShlc3Npdl90Zm0sIGl2LCBpdik7CiAKIAlyZXR1cm4gMDsKQEAgLTE1NzUsMTEgKzE1NzQsMTcgQEAKIHN0YXRpYyBpbnQgY3J5cHRfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IGNyeXB0X2NvbmZpZyAqY2M7Ci0JdW5zaWduZWQgaW50IGtleV9zaXplOworCXVuc2lnbmVkIGludCBrZXlfc2l6ZSwgb3B0X3BhcmFtczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdG1wbGw7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZG1fYXJnX3NldCBhczsKKwljb25zdCBjaGFyICpvcHRfc3RyaW5nOwogCi0JaWYgKGFyZ2MgIT0gNSkgeworCXN0YXRpYyBzdHJ1Y3QgZG1fYXJnIF9hcmdzW10gPSB7CisJCXswLCAxLCAiSW52YWxpZCBudW1iZXIgb2YgZmVhdHVyZSBhcmdzIn0sCisJfTsKKworCWlmIChhcmdjIDwgNSkgewogCQl0aS0+ZXJyb3IgPSAiTm90IGVub3VnaCBhcmd1bWVudHMiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNjQ4LDYgKzE2NTMsMzAgQEAKIAl9CiAJY2MtPnN0YXJ0ID0gdG1wbGw7CiAKKwlhcmd2ICs9IDU7CisJYXJnYyAtPSA1OworCisJLyogT3B0aW9uYWwgcGFyYW1ldGVycyAqLworCWlmIChhcmdjKSB7CisJCWFzLmFyZ2MgPSBhcmdjOworCQlhcy5hcmd2ID0gYXJndjsKKworCQlyZXQgPSBkbV9yZWFkX2FyZ19ncm91cChfYXJncywgJmFzLCAmb3B0X3BhcmFtcywgJnRpLT5lcnJvcik7CisJCWlmIChyZXQpCisJCQlnb3RvIGJhZDsKKworCQlvcHRfc3RyaW5nID0gZG1fc2hpZnRfYXJnKCZhcyk7CisKKwkJaWYgKG9wdF9wYXJhbXMgPT0gMSAmJiBvcHRfc3RyaW5nICYmCisJCSAgICAhc3RyY2FzZWNtcChvcHRfc3RyaW5nLCAiYWxsb3dfZGlzY2FyZHMiKSkKKwkJCXRpLT5udW1fZGlzY2FyZF9yZXF1ZXN0cyA9IDE7CisJCWVsc2UgaWYgKG9wdF9wYXJhbXMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQl0aS0+ZXJyb3IgPSAiSW52YWxpZCBmZWF0dXJlIGFyZ3VtZW50cyI7CisJCQlnb3RvIGJhZDsKKwkJfQorCX0KKwogCXJldCA9IC1FTk9NRU07CiAJY2MtPmlvX3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJrY3J5cHRkX2lvIiwKIAkJCQkgICAgICAgV1FfTk9OX1JFRU5UUkFOVHwKQEAgLTE2ODIsOSArMTcxMSwxNiBAQAogCXN0cnVjdCBkbV9jcnlwdF9pbyAqaW87CiAJc3RydWN0IGNyeXB0X2NvbmZpZyAqY2M7CiAKLQlpZiAoYmlvLT5iaV9ydyAmIFJFUV9GTFVTSCkgeworCS8qCisJICogSWYgYmlvIGlzIFJFUV9GTFVTSCBvciBSRVFfRElTQ0FSRCwganVzdCBieXBhc3MgY3J5cHQgcXVldWVzLgorCSAqIC0gZm9yIFJFUV9GTFVTSCBkZXZpY2UtbWFwcGVyIGNvcmUgZW5zdXJlcyB0aGF0IG5vIElPIGlzIGluLWZsaWdodAorCSAqIC0gZm9yIFJFUV9ESVNDQVJEIGNhbGxlciBtdXN0IHVzZSBmbHVzaCBpZiBJTyBvcmRlcmluZyBtYXR0ZXJzCisJICovCisJaWYgKHVubGlrZWx5KGJpby0+YmlfcncgJiAoUkVRX0ZMVVNIIHwgUkVRX0RJU0NBUkQpKSkgewogCQljYyA9IHRpLT5wcml2YXRlOwogCQliaW8tPmJpX2JkZXYgPSBjYy0+ZGV2LT5iZGV2OworCQlpZiAoYmlvX3NlY3RvcnMoYmlvKSkKKwkJCWJpby0+Ymlfc2VjdG9yID0gY2MtPnN0YXJ0ICsgZG1fdGFyZ2V0X29mZnNldCh0aSwgYmlvLT5iaV9zZWN0b3IpOwogCQlyZXR1cm4gRE1fTUFQSU9fUkVNQVBQRUQ7CiAJfQogCkBAIC0xNzI3LDYgKzE3NjMsMTAgQEAKIAogCQlETUVNSVQoIiAlbGx1ICVzICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKWNjLT5pdl9vZmZzZXQsCiAJCQkJY2MtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyljYy0+c3RhcnQpOworCisJCWlmICh0aS0+bnVtX2Rpc2NhcmRfcmVxdWVzdHMpCisJCQlETUVNSVQoIiAxIGFsbG93X2Rpc2NhcmRzIik7CisKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMTc3MCwxMiArMTgxMCwxMiBAQAogCWlmIChhcmdjIDwgMikKIAkJZ290byBlcnJvcjsKIAotCWlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoImtleSIpKSkgeworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdLCAia2V5IikpIHsKIAkJaWYgKCF0ZXN0X2JpdChETV9DUllQVF9TVVNQRU5ERUQsICZjYy0+ZmxhZ3MpKSB7CiAJCQlETVdBUk4oIm5vdCBzdXNwZW5kZWQgZHVyaW5nIGtleSBtYW5pcHVsYXRpb24uIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoYXJnYyA9PSAzICYmICFzdHJuaWNtcChhcmd2WzFdLCBNRVNHX1NUUigic2V0IikpKSB7CisJCWlmIChhcmdjID09IDMgJiYgIXN0cmNhc2VjbXAoYXJndlsxXSwgInNldCIpKSB7CiAJCQlyZXQgPSBjcnlwdF9zZXRfa2V5KGNjLCBhcmd2WzJdKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTE3ODMsNyArMTgyMyw3IEBACiAJCQkJcmV0ID0gY2MtPml2X2dlbl9vcHMtPmluaXQoY2MpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlpZiAoYXJnYyA9PSAyICYmICFzdHJuaWNtcChhcmd2WzFdLCBNRVNHX1NUUigid2lwZSIpKSkgeworCQlpZiAoYXJnYyA9PSAyICYmICFzdHJjYXNlY21wKGFyZ3ZbMV0sICJ3aXBlIikpIHsKIAkJCWlmIChjYy0+aXZfZ2VuX29wcyAmJiBjYy0+aXZfZ2VuX29wcy0+d2lwZSkgewogCQkJCXJldCA9IGNjLT5pdl9nZW5fb3BzLT53aXBlKGNjKTsKIAkJCQlpZiAocmV0KQpAQCAtMTgyMyw3ICsxODYzLDcgQEAKIAogc3RhdGljIHN0cnVjdCB0YXJnZXRfdHlwZSBjcnlwdF90YXJnZXQgPSB7CiAJLm5hbWUgICA9ICJjcnlwdCIsCi0JLnZlcnNpb24gPSB7MSwgMTAsIDB9LAorCS52ZXJzaW9uID0gezEsIDExLCAwfSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciAgICA9IGNyeXB0X2N0ciwKIAkuZHRyICAgID0gY3J5cHRfZHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1mbGFrZXkuYyBiL2RyaXZlcnMvbWQvZG0tZmxha2V5LmMKaW5kZXggZWE3OTA2Mi4uODlmNzNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1mbGFrZXkuYworKysgYi9kcml2ZXJzL21kL2RtLWZsYWtleS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyBTaXN0aW5hIFNvZnR3YXJlIChVSykgTGltaXRlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAtMjAxMSBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCiAgKi8KQEAgLTE1LDYgKzE1LDkgQEAKIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJmbGFrZXkiCiAKKyNkZWZpbmUgYWxsX2NvcnJ1cHRfYmlvX2ZsYWdzX21hdGNoKGJpbywgZmMpCVwKKwkoKChiaW8pLT5iaV9ydyAmIChmYyktPmNvcnJ1cHRfYmlvX2ZsYWdzKSA9PSAoZmMpLT5jb3JydXB0X2Jpb19mbGFncykKKwogLyoKICAqIEZsYWtleTogVXNlZCBmb3IgdGVzdGluZyBvbmx5LCBzaW11bGF0ZXMgaW50ZXJtaXR0ZW50LAogICogY2F0YXN0cm9waGljIGRldmljZSBmYWlsdXJlLgpAQCAtMjUsNjAgKzI4LDE4OSBAQAogCXNlY3Rvcl90IHN0YXJ0OwogCXVuc2lnbmVkIHVwX2ludGVydmFsOwogCXVuc2lnbmVkIGRvd25faW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjb3JydXB0X2Jpb19ieXRlOworCXVuc2lnbmVkIGNvcnJ1cHRfYmlvX3J3OworCXVuc2lnbmVkIGNvcnJ1cHRfYmlvX3ZhbHVlOworCXVuc2lnbmVkIGNvcnJ1cHRfYmlvX2ZsYWdzOwogfTsKIAotLyoKLSAqIENvbnN0cnVjdCBhIGZsYWtleSBtYXBwaW5nOiA8ZGV2X3BhdGg+IDxvZmZzZXQ+IDx1cCBpbnRlcnZhbD4gPGRvd24gaW50ZXJ2YWw+Ci0gKi8KLXN0YXRpYyBpbnQgZmxha2V5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCXN0cnVjdCBmbGFrZXlfYyAqZmM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKK2VudW0gZmVhdHVyZV9mbGFnX2JpdHMgeworCURST1BfV1JJVEVTCit9OwogCi0JaWYgKGFyZ2MgIT0gNCkgewotCQl0aS0+ZXJyb3IgPSAiZG0tZmxha2V5OiBJbnZhbGlkIGFyZ3VtZW50IGNvdW50IjsKK3N0YXRpYyBpbnQgcGFyc2VfZmVhdHVyZXMoc3RydWN0IGRtX2FyZ19zZXQgKmFzLCBzdHJ1Y3QgZmxha2V5X2MgKmZjLAorCQkJICBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKK3sKKwlpbnQgcjsKKwl1bnNpZ25lZCBhcmdjOworCWNvbnN0IGNoYXIgKmFyZ19uYW1lOworCisJc3RhdGljIHN0cnVjdCBkbV9hcmcgX2FyZ3NbXSA9IHsKKwkJezAsIDYsICJJbnZhbGlkIG51bWJlciBvZiBmZWF0dXJlIGFyZ3MifSwKKwkJezEsIFVJTlRfTUFYLCAiSW52YWxpZCBjb3JydXB0IGJpbyBieXRlIn0sCisJCXswLCAyNTUsICJJbnZhbGlkIGNvcnJ1cHQgdmFsdWUgdG8gd3JpdGUgaW50byBiaW8gYnl0ZSAoMC0yNTUpIn0sCisJCXswLCBVSU5UX01BWCwgIkludmFsaWQgY29ycnVwdCBiaW8gZmxhZ3MgbWFzayJ9LAorCX07CisKKwkvKiBObyBmZWF0dXJlIGFyZ3VtZW50cyBzdXBwbGllZC4gKi8KKwlpZiAoIWFzLT5hcmdjKQorCQlyZXR1cm4gMDsKKworCXIgPSBkbV9yZWFkX2FyZ19ncm91cChfYXJncywgYXMsICZhcmdjLCAmdGktPmVycm9yKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwl3aGlsZSAoYXJnYykgeworCQlhcmdfbmFtZSA9IGRtX3NoaWZ0X2FyZyhhcyk7CisJCWFyZ2MtLTsKKworCQkvKgorCQkgKiBkcm9wX3dyaXRlcworCQkgKi8KKwkJaWYgKCFzdHJjYXNlY21wKGFyZ19uYW1lLCAiZHJvcF93cml0ZXMiKSkgeworCQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoRFJPUF9XUklURVMsICZmYy0+ZmxhZ3MpKSB7CisJCQkJdGktPmVycm9yID0gIkZlYXR1cmUgZHJvcF93cml0ZXMgZHVwbGljYXRlZCI7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogY29ycnVwdF9iaW9fYnl0ZSA8TnRoX2J5dGU+IDxkaXJlY3Rpb24+IDx2YWx1ZT4gPGJpb19mbGFncz4KKwkJICovCisJCWlmICghc3RyY2FzZWNtcChhcmdfbmFtZSwgImNvcnJ1cHRfYmlvX2J5dGUiKSkgeworCQkJaWYgKCFhcmdjKQorCQkJCXRpLT5lcnJvciA9ICJGZWF0dXJlIGNvcnJ1cHRfYmlvX2J5dGUgcmVxdWlyZXMgcGFyYW1ldGVycyI7CisKKwkJCXIgPSBkbV9yZWFkX2FyZyhfYXJncyArIDEsIGFzLCAmZmMtPmNvcnJ1cHRfYmlvX2J5dGUsICZ0aS0+ZXJyb3IpOworCQkJaWYgKHIpCisJCQkJcmV0dXJuIHI7CisJCQlhcmdjLS07CisKKwkJCS8qCisJCQkgKiBEaXJlY3Rpb24gciBvciB3PworCQkJICovCisJCQlhcmdfbmFtZSA9IGRtX3NoaWZ0X2FyZyhhcyk7CisJCQlpZiAoIXN0cmNhc2VjbXAoYXJnX25hbWUsICJ3IikpCisJCQkJZmMtPmNvcnJ1cHRfYmlvX3J3ID0gV1JJVEU7CisJCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmdfbmFtZSwgInIiKSkKKwkJCQlmYy0+Y29ycnVwdF9iaW9fcncgPSBSRUFEOworCQkJZWxzZSB7CisJCQkJdGktPmVycm9yID0gIkludmFsaWQgY29ycnVwdCBiaW8gZGlyZWN0aW9uIChyIG9yIHcpIjsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWFyZ2MtLTsKKworCQkJLyoKKwkJCSAqIFZhbHVlIG9mIGJ5dGUgKDAtMjU1KSB0byB3cml0ZSBpbiBwbGFjZSBvZiBjb3JyZWN0IG9uZS4KKwkJCSAqLworCQkJciA9IGRtX3JlYWRfYXJnKF9hcmdzICsgMiwgYXMsICZmYy0+Y29ycnVwdF9iaW9fdmFsdWUsICZ0aS0+ZXJyb3IpOworCQkJaWYgKHIpCisJCQkJcmV0dXJuIHI7CisJCQlhcmdjLS07CisKKwkJCS8qCisJCQkgKiBPbmx5IGNvcnJ1cHQgYmlvcyB3aXRoIHRoZXNlIGZsYWdzIHNldC4KKwkJCSAqLworCQkJciA9IGRtX3JlYWRfYXJnKF9hcmdzICsgMywgYXMsICZmYy0+Y29ycnVwdF9iaW9fZmxhZ3MsICZ0aS0+ZXJyb3IpOworCQkJaWYgKHIpCisJCQkJcmV0dXJuIHI7CisJCQlhcmdjLS07CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGktPmVycm9yID0gIlVucmVjb2duaXNlZCBmbGFrZXkgZmVhdHVyZSByZXF1ZXN0ZWQiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmYyA9IGttYWxsb2Moc2l6ZW9mKCpmYyksIEdGUF9LRVJORUwpOworCWlmICh0ZXN0X2JpdChEUk9QX1dSSVRFUywgJmZjLT5mbGFncykgJiYgKGZjLT5jb3JydXB0X2Jpb19ydyA9PSBXUklURSkpIHsKKwkJdGktPmVycm9yID0gImRyb3Bfd3JpdGVzIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvcnJ1cHRfYmlvX2J5dGUgd2l0aCB0aGUgV1JJVEUgZmxhZyBzZXQiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnN0cnVjdCBhIGZsYWtleSBtYXBwaW5nOgorICogPGRldl9wYXRoPiA8b2Zmc2V0PiA8dXAgaW50ZXJ2YWw+IDxkb3duIGludGVydmFsPiBbPCNmZWF0dXJlIGFyZ3M+IFs8YXJnPl0qXQorICoKKyAqICAgRmVhdHVyZSBhcmdzOgorICogICAgIFtkcm9wX3dyaXRlc10KKyAqICAgICBbY29ycnVwdF9iaW9fYnl0ZSA8TnRoX2J5dGU+IDxkaXJlY3Rpb24+IDx2YWx1ZT4gPGJpb19mbGFncz5dCisgKgorICogICBOdGhfYnl0ZSBzdGFydHMgZnJvbSAxIGZvciB0aGUgZmlyc3QgYnl0ZS4KKyAqICAgRGlyZWN0aW9uIGlzIHIgZm9yIFJFQUQgb3IgdyBmb3IgV1JJVEUuCisgKiAgIGJpb19mbGFncyBpcyBpZ25vcmVkIGlmIDAuCisgKi8KK3N0YXRpYyBpbnQgZmxha2V5X2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0YXRpYyBzdHJ1Y3QgZG1fYXJnIF9hcmdzW10gPSB7CisJCXswLCBVSU5UX01BWCwgIkludmFsaWQgdXAgaW50ZXJ2YWwifSwKKwkJezAsIFVJTlRfTUFYLCAiSW52YWxpZCBkb3duIGludGVydmFsIn0sCisJfTsKKworCWludCByOworCXN0cnVjdCBmbGFrZXlfYyAqZmM7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcGxsOworCXN0cnVjdCBkbV9hcmdfc2V0IGFzOworCWNvbnN0IGNoYXIgKmRldm5hbWU7CisKKwlhcy5hcmdjID0gYXJnYzsKKwlhcy5hcmd2ID0gYXJndjsKKworCWlmIChhcmdjIDwgNCkgeworCQl0aS0+ZXJyb3IgPSAiSW52YWxpZCBhcmd1bWVudCBjb3VudCI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZjID0ga3phbGxvYyhzaXplb2YoKmZjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmYykgewotCQl0aS0+ZXJyb3IgPSAiZG0tZmxha2V5OiBDYW5ub3QgYWxsb2NhdGUgbGluZWFyIGNvbnRleHQiOworCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGFsbG9jYXRlIGxpbmVhciBjb250ZXh0IjsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWZjLT5zdGFydF90aW1lID0gamlmZmllczsKIAotCWlmIChzc2NhbmYoYXJndlsxXSwgIiVsbHUiLCAmdG1wKSAhPSAxKSB7Ci0JCXRpLT5lcnJvciA9ICJkbS1mbGFrZXk6IEludmFsaWQgZGV2aWNlIHNlY3RvciI7Ci0JCWdvdG8gYmFkOwotCX0KLQlmYy0+c3RhcnQgPSB0bXA7CisJZGV2bmFtZSA9IGRtX3NoaWZ0X2FyZygmYXMpOwogCi0JaWYgKHNzY2FuZihhcmd2WzJdLCAiJXUiLCAmZmMtPnVwX2ludGVydmFsKSAhPSAxKSB7Ci0JCXRpLT5lcnJvciA9ICJkbS1mbGFrZXk6IEludmFsaWQgdXAgaW50ZXJ2YWwiOworCWlmIChzc2NhbmYoZG1fc2hpZnRfYXJnKCZhcyksICIlbGx1IiwgJnRtcGxsKSAhPSAxKSB7CisJCXRpLT5lcnJvciA9ICJJbnZhbGlkIGRldmljZSBzZWN0b3IiOwogCQlnb3RvIGJhZDsKIAl9CisJZmMtPnN0YXJ0ID0gdG1wbGw7CiAKLQlpZiAoc3NjYW5mKGFyZ3ZbM10sICIldSIsICZmYy0+ZG93bl9pbnRlcnZhbCkgIT0gMSkgewotCQl0aS0+ZXJyb3IgPSAiZG0tZmxha2V5OiBJbnZhbGlkIGRvd24gaW50ZXJ2YWwiOworCXIgPSBkbV9yZWFkX2FyZyhfYXJncywgJmFzLCAmZmMtPnVwX2ludGVydmFsLCAmdGktPmVycm9yKTsKKwlpZiAocikKIAkJZ290byBiYWQ7Ci0JfQorCisJciA9IGRtX3JlYWRfYXJnKF9hcmdzLCAmYXMsICZmYy0+ZG93bl9pbnRlcnZhbCwgJnRpLT5lcnJvcik7CisJaWYgKHIpCisJCWdvdG8gYmFkOwogCiAJaWYgKCEoZmMtPnVwX2ludGVydmFsICsgZmMtPmRvd25faW50ZXJ2YWwpKSB7Ci0JCXRpLT5lcnJvciA9ICJkbS1mbGFrZXk6IFRvdGFsICh1cCArIGRvd24pIGludGVydmFsIGlzIHplcm8iOworCQl0aS0+ZXJyb3IgPSAiVG90YWwgKHVwICsgZG93bikgaW50ZXJ2YWwgaXMgemVybyI7CiAJCWdvdG8gYmFkOwogCX0KIAogCWlmIChmYy0+dXBfaW50ZXJ2YWwgKyBmYy0+ZG93bl9pbnRlcnZhbCA8IGZjLT51cF9pbnRlcnZhbCkgewotCQl0aS0+ZXJyb3IgPSAiZG0tZmxha2V5OiBJbnRlcnZhbCBvdmVyZmxvdyI7CisJCXRpLT5lcnJvciA9ICJJbnRlcnZhbCBvdmVyZmxvdyI7CiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzBdLCBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZmMtPmRldikpIHsKLQkJdGktPmVycm9yID0gImRtLWZsYWtleTogRGV2aWNlIGxvb2t1cCBmYWlsZWQiOworCXIgPSBwYXJzZV9mZWF0dXJlcygmYXMsIGZjLCB0aSk7CisJaWYgKHIpCisJCWdvdG8gYmFkOworCisJaWYgKGRtX2dldF9kZXZpY2UodGksIGRldm5hbWUsIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZmYy0+ZGV2KSkgeworCQl0aS0+ZXJyb3IgPSAiRGV2aWNlIGxvb2t1cCBmYWlsZWQiOwogCQlnb3RvIGJhZDsKIAl9CiAKIAl0aS0+bnVtX2ZsdXNoX3JlcXVlc3RzID0gMTsKKwl0aS0+bnVtX2Rpc2NhcmRfcmVxdWVzdHMgPSAxOwogCXRpLT5wcml2YXRlID0gZmM7CiAJcmV0dXJuIDA7CiAKQEAgLTk5LDcgKzIzMSw3IEBACiB7CiAJc3RydWN0IGZsYWtleV9jICpmYyA9IHRpLT5wcml2YXRlOwogCi0JcmV0dXJuIGZjLT5zdGFydCArIChiaV9zZWN0b3IgLSB0aS0+YmVnaW4pOworCXJldHVybiBmYy0+c3RhcnQgKyBkbV90YXJnZXRfb2Zmc2V0KHRpLCBiaV9zZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBmbGFrZXlfbWFwX2JpbyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvKQpAQCAtMTExLDYgKzI0MywyNSBAQAogCQliaW8tPmJpX3NlY3RvciA9IGZsYWtleV9tYXBfc2VjdG9yKHRpLCBiaW8tPmJpX3NlY3Rvcik7CiB9CiAKK3N0YXRpYyB2b2lkIGNvcnJ1cHRfYmlvX2RhdGEoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZmxha2V5X2MgKmZjKQoreworCXVuc2lnbmVkIGJpb19ieXRlcyA9IGJpb19jdXJfYnl0ZXMoYmlvKTsKKwljaGFyICpkYXRhID0gYmlvX2RhdGEoYmlvKTsKKworCS8qCisJICogT3ZlcndyaXRlIHRoZSBOdGggYnl0ZSBvZiB0aGUgZGF0YSByZXR1cm5lZC4KKwkgKi8KKwlpZiAoZGF0YSAmJiBiaW9fYnl0ZXMgPj0gZmMtPmNvcnJ1cHRfYmlvX2J5dGUpIHsKKwkJZGF0YVtmYy0+Y29ycnVwdF9iaW9fYnl0ZSAtIDFdID0gZmMtPmNvcnJ1cHRfYmlvX3ZhbHVlOworCisJCURNREVCVUcoIkNvcnJ1cHRpbmcgZGF0YSBiaW89JXAgYnkgd3JpdGluZyAldSB0byBieXRlICV1ICIKKwkJCSIocnc9JWMgYmlfcnc9JWx1IGJpX3NlY3Rvcj0lbGx1IGN1cl9ieXRlcz0ldSlcbiIsCisJCQliaW8sIGZjLT5jb3JydXB0X2Jpb192YWx1ZSwgZmMtPmNvcnJ1cHRfYmlvX2J5dGUsCisJCQkoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpID8gJ3cnIDogJ3InLAorCQkJYmlvLT5iaV9ydywgKHVuc2lnbmVkIGxvbmcgbG9uZyliaW8tPmJpX3NlY3RvciwgYmlvX2J5dGVzKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZmxha2V5X21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLAogCQkgICAgICB1bmlvbiBtYXBfaW5mbyAqbWFwX2NvbnRleHQpCiB7CkBAIC0xMTksMTggKzI3MCw3MSBAQAogCiAJLyogQXJlIHdlIGFsaXZlID8gKi8KIAllbGFwc2VkID0gKGppZmZpZXMgLSBmYy0+c3RhcnRfdGltZSkgLyBIWjsKLQlpZiAoZWxhcHNlZCAlIChmYy0+dXBfaW50ZXJ2YWwgKyBmYy0+ZG93bl9pbnRlcnZhbCkgPj0gZmMtPnVwX2ludGVydmFsKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAoZWxhcHNlZCAlIChmYy0+dXBfaW50ZXJ2YWwgKyBmYy0+ZG93bl9pbnRlcnZhbCkgPj0gZmMtPnVwX2ludGVydmFsKSB7CisJCS8qCisJCSAqIEZsYWcgdGhpcyBiaW8gYXMgc3VibWl0dGVkIHdoaWxlIGRvd24uCisJCSAqLworCQltYXBfY29udGV4dC0+bGwgPSAxOwogCisJCS8qCisJCSAqIE1hcCByZWFkcyBhcyBub3JtYWwuCisJCSAqLworCQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCkKKwkJCWdvdG8gbWFwX2JpbzsKKworCQkvKgorCQkgKiBEcm9wIHdyaXRlcz8KKwkJICovCisJCWlmICh0ZXN0X2JpdChEUk9QX1dSSVRFUywgJmZjLT5mbGFncykpIHsKKwkJCWJpb19lbmRpbyhiaW8sIDApOworCQkJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKKwkJfQorCisJCS8qCisJCSAqIENvcnJ1cHQgbWF0Y2hpbmcgd3JpdGVzLgorCQkgKi8KKwkJaWYgKGZjLT5jb3JydXB0X2Jpb19ieXRlICYmIChmYy0+Y29ycnVwdF9iaW9fcncgPT0gV1JJVEUpKSB7CisJCQlpZiAoYWxsX2NvcnJ1cHRfYmlvX2ZsYWdzX21hdGNoKGJpbywgZmMpKQorCQkJCWNvcnJ1cHRfYmlvX2RhdGEoYmlvLCBmYyk7CisJCQlnb3RvIG1hcF9iaW87CisJCX0KKworCQkvKgorCQkgKiBCeSBkZWZhdWx0LCBlcnJvciBhbGwgSS9PLgorCQkgKi8KKwkJcmV0dXJuIC1FSU87CisJfQorCittYXBfYmlvOgogCWZsYWtleV9tYXBfYmlvKHRpLCBiaW8pOwogCiAJcmV0dXJuIERNX01BUElPX1JFTUFQUEVEOwogfQogCitzdGF0aWMgaW50IGZsYWtleV9lbmRfaW8oc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBiaW8gKmJpbywKKwkJCSBpbnQgZXJyb3IsIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCkKK3sKKwlzdHJ1Y3QgZmxha2V5X2MgKmZjID0gdGktPnByaXZhdGU7CisJdW5zaWduZWQgYmlvX3N1Ym1pdHRlZF93aGlsZV9kb3duID0gbWFwX2NvbnRleHQtPmxsOworCisJLyoKKwkgKiBDb3JydXB0IHN1Y2Nlc3NmdWwgUkVBRHMgd2hpbGUgaW4gZG93biBzdGF0ZS4KKwkgKiBJZiBmbGFncyB3ZXJlIHNwZWNpZmllZCwgb25seSBjb3JydXB0IHRob3NlIHRoYXQgbWF0Y2guCisJICovCisJaWYgKCFlcnJvciAmJiBiaW9fc3VibWl0dGVkX3doaWxlX2Rvd24gJiYKKwkgICAgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpICYmIChmYy0+Y29ycnVwdF9iaW9fcncgPT0gUkVBRCkgJiYKKwkgICAgYWxsX2NvcnJ1cHRfYmlvX2ZsYWdzX21hdGNoKGJpbywgZmMpKQorCQljb3JydXB0X2Jpb19kYXRhKGJpbywgZmMpOworCisJcmV0dXJuIGVycm9yOworfQorCiBzdGF0aWMgaW50IGZsYWtleV9zdGF0dXMoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0YXR1c190eXBlX3QgdHlwZSwKIAkJCSBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pCiB7CisJdW5zaWduZWQgc3ogPSAwOwogCXN0cnVjdCBmbGFrZXlfYyAqZmMgPSB0aS0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBkcm9wX3dyaXRlczsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgpAQCAtMTM4LDkgKzM0MiwyMiBAQAogCQlicmVhazsKIAogCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKLQkJc25wcmludGYocmVzdWx0LCBtYXhsZW4sICIlcyAlbGx1ICV1ICV1IiwgZmMtPmRldi0+bmFtZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWZjLT5zdGFydCwgZmMtPnVwX2ludGVydmFsLAotCQkJIGZjLT5kb3duX2ludGVydmFsKTsKKwkJRE1FTUlUKCIlcyAlbGx1ICV1ICV1ICIsIGZjLT5kZXYtPm5hbWUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZjLT5zdGFydCwgZmMtPnVwX2ludGVydmFsLAorCQkgICAgICAgZmMtPmRvd25faW50ZXJ2YWwpOworCisJCWRyb3Bfd3JpdGVzID0gdGVzdF9iaXQoRFJPUF9XUklURVMsICZmYy0+ZmxhZ3MpOworCQlETUVNSVQoIiV1ICIsIGRyb3Bfd3JpdGVzICsgKGZjLT5jb3JydXB0X2Jpb19ieXRlID4gMCkgKiA1KTsKKworCQlpZiAoZHJvcF93cml0ZXMpCisJCQlETUVNSVQoImRyb3Bfd3JpdGVzICIpOworCisJCWlmIChmYy0+Y29ycnVwdF9iaW9fYnl0ZSkKKwkJCURNRU1JVCgiY29ycnVwdF9iaW9fYnl0ZSAldSAlYyAldSAldSAiLAorCQkJICAgICAgIGZjLT5jb3JydXB0X2Jpb19ieXRlLAorCQkJICAgICAgIChmYy0+Y29ycnVwdF9iaW9fcncgPT0gV1JJVEUpID8gJ3cnIDogJ3InLAorCQkJICAgICAgIGZjLT5jb3JydXB0X2Jpb192YWx1ZSwgZmMtPmNvcnJ1cHRfYmlvX2ZsYWdzKTsKKwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzcsMTEgKzM5NCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIGZsYWtleV90YXJnZXQgPSB7CiAJLm5hbWUgICA9ICJmbGFrZXkiLAotCS52ZXJzaW9uID0gezEsIDEsIDB9LAorCS52ZXJzaW9uID0gezEsIDIsIDB9LAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkuY3RyICAgID0gZmxha2V5X2N0ciwKIAkuZHRyICAgID0gZmxha2V5X2R0ciwKIAkubWFwICAgID0gZmxha2V5X21hcCwKKwkuZW5kX2lvID0gZmxha2V5X2VuZF9pbywKIAkuc3RhdHVzID0gZmxha2V5X3N0YXR1cywKIAkuaW9jdGwJPSBmbGFrZXlfaW9jdGwsCiAJLm1lcmdlCT0gZmxha2V5X21lcmdlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby5jIGIvZHJpdmVycy9tZC9kbS1pby5jCmluZGV4IDIwNjcyODguLmFkMmViYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW8uYworKysgYi9kcml2ZXJzL21kL2RtLWlvLmMKQEAgLTM4LDYgKzM4LDggQEAKIAlzdHJ1Y3QgZG1faW9fY2xpZW50ICpjbGllbnQ7CiAJaW9fbm90aWZ5X2ZuIGNhbGxiYWNrOwogCXZvaWQgKmNvbnRleHQ7CisJdm9pZCAqdm1hX2ludmFsaWRhdGVfYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIHZtYV9pbnZhbGlkYXRlX3NpemU7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoRE1fSU9fTUFYX1JFR0lPTlMpKSk7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqX2RtX2lvX2NhY2hlOwpAQCAtMTE2LDYgKzExOCwxMCBAQAogCQlzZXRfYml0KHJlZ2lvbiwgJmlvLT5lcnJvcl9iaXRzKTsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpby0+Y291bnQpKSB7CisJCWlmIChpby0+dm1hX2ludmFsaWRhdGVfc2l6ZSkKKwkJCWludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2UoaW8tPnZtYV9pbnZhbGlkYXRlX2FkZHJlc3MsCisJCQkJCQkgICAgIGlvLT52bWFfaW52YWxpZGF0ZV9zaXplKTsKKwogCQlpZiAoaW8tPnNsZWVwZXIpCiAJCQl3YWtlX3VwX3Byb2Nlc3MoaW8tPnNsZWVwZXIpOwogCkBAIC0xNTksNiArMTY1LDkgQEAKIAogCXVuc2lnbmVkIGNvbnRleHRfdTsKIAl2b2lkICpjb250ZXh0X3B0cjsKKworCXZvaWQgKnZtYV9pbnZhbGlkYXRlX2FkZHJlc3M7CisJdW5zaWduZWQgbG9uZyB2bWFfaW52YWxpZGF0ZV9zaXplOwogfTsKIAogLyoKQEAgLTM3Nyw2ICszODYsOSBAQAogCWlvLT5zbGVlcGVyID0gY3VycmVudDsKIAlpby0+Y2xpZW50ID0gY2xpZW50OwogCisJaW8tPnZtYV9pbnZhbGlkYXRlX2FkZHJlc3MgPSBkcC0+dm1hX2ludmFsaWRhdGVfYWRkcmVzczsKKwlpby0+dm1hX2ludmFsaWRhdGVfc2l6ZSA9IGRwLT52bWFfaW52YWxpZGF0ZV9zaXplOworCiAJZGlzcGF0Y2hfaW8ocncsIG51bV9yZWdpb25zLCB3aGVyZSwgZHAsIGlvLCAxKTsKIAogCXdoaWxlICgxKSB7CkBAIC00MTUsMTMgKzQyNywyMSBAQAogCWlvLT5jYWxsYmFjayA9IGZuOwogCWlvLT5jb250ZXh0ID0gY29udGV4dDsKIAorCWlvLT52bWFfaW52YWxpZGF0ZV9hZGRyZXNzID0gZHAtPnZtYV9pbnZhbGlkYXRlX2FkZHJlc3M7CisJaW8tPnZtYV9pbnZhbGlkYXRlX3NpemUgPSBkcC0+dm1hX2ludmFsaWRhdGVfc2l6ZTsKKwogCWRpc3BhdGNoX2lvKHJ3LCBudW1fcmVnaW9ucywgd2hlcmUsIGRwLCBpbywgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHBfaW5pdChzdHJ1Y3QgZG1faW9fcmVxdWVzdCAqaW9fcmVxLCBzdHJ1Y3QgZHBhZ2VzICpkcCkKK3N0YXRpYyBpbnQgZHBfaW5pdChzdHJ1Y3QgZG1faW9fcmVxdWVzdCAqaW9fcmVxLCBzdHJ1Y3QgZHBhZ2VzICpkcCwKKwkJICAgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qIFNldCB1cCBkcGFnZXMgYmFzZWQgb24gbWVtb3J5IHR5cGUgKi8KKworCWRwLT52bWFfaW52YWxpZGF0ZV9hZGRyZXNzID0gTlVMTDsKKwlkcC0+dm1hX2ludmFsaWRhdGVfc2l6ZSA9IDA7CisKIAlzd2l0Y2ggKGlvX3JlcS0+bWVtLnR5cGUpIHsKIAljYXNlIERNX0lPX1BBR0VfTElTVDoKIAkJbGlzdF9kcF9pbml0KGRwLCBpb19yZXEtPm1lbS5wdHIucGwsIGlvX3JlcS0+bWVtLm9mZnNldCk7CkBAIC00MzIsNiArNDUyLDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBETV9JT19WTUE6CisJCWZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKGlvX3JlcS0+bWVtLnB0ci52bWEsIHNpemUpOworCQlpZiAoKGlvX3JlcS0+YmlfcncgJiBSV19NQVNLKSA9PSBSRUFEKSB7CisJCQlkcC0+dm1hX2ludmFsaWRhdGVfYWRkcmVzcyA9IGlvX3JlcS0+bWVtLnB0ci52bWE7CisJCQlkcC0+dm1hX2ludmFsaWRhdGVfc2l6ZSA9IHNpemU7CisJCX0KIAkJdm1fZHBfaW5pdChkcCwgaW9fcmVxLT5tZW0ucHRyLnZtYSk7CiAJCWJyZWFrOwogCkBAIC00NjAsNyArNDg1LDcgQEAKIAlpbnQgcjsKIAlzdHJ1Y3QgZHBhZ2VzIGRwOwogCi0JciA9IGRwX2luaXQoaW9fcmVxLCAmZHApOworCXIgPSBkcF9pbml0KGlvX3JlcSwgJmRwLCAodW5zaWduZWQgbG9uZyl3aGVyZS0+Y291bnQgPDwgU0VDVE9SX1NISUZUKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwppbmRleCA0Y2FjZGFkLi4yZTlhM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCkBAIC0xMjgsNiArMTI4LDI0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaGFzaF9jZWxsICpfX2dldF9kZXZfY2VsbCh1aW50NjRfdCBkZXYpCit7CisJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kOworCXN0cnVjdCBoYXNoX2NlbGwgKmhjOworCisJbWQgPSBkbV9nZXRfbWQoaHVnZV9kZWNvZGVfZGV2KGRldikpOworCWlmICghbWQpCisJCXJldHVybiBOVUxMOworCisJaGMgPSBkbV9nZXRfbWRwdHIobWQpOworCWlmICghaGMpIHsKKwkJZG1fcHV0KG1kKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGhjOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbnNlcnRpbmcsIHJlbW92aW5nIGFuZCByZW5hbWluZyBhIGRldmljZS4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTcxOCwyNSArNzM2LDQ1IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaGFzaF9jZWxsICpfX2ZpbmRfZGV2aWNlX2hhc2hfY2VsbChzdHJ1Y3QgZG1faW9jdGwgKnBhcmFtKQogewotCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKLQl2b2lkICptZHB0ciA9IE5VTEw7CisJc3RydWN0IGhhc2hfY2VsbCAqaGMgPSBOVUxMOwogCi0JaWYgKCpwYXJhbS0+dXVpZCkKLQkJcmV0dXJuIF9fZ2V0X3V1aWRfY2VsbChwYXJhbS0+dXVpZCk7CisJaWYgKCpwYXJhbS0+dXVpZCkgeworCQlpZiAoKnBhcmFtLT5uYW1lIHx8IHBhcmFtLT5kZXYpCisJCQlyZXR1cm4gTlVMTDsKIAotCWlmICgqcGFyYW0tPm5hbWUpCi0JCXJldHVybiBfX2dldF9uYW1lX2NlbGwocGFyYW0tPm5hbWUpOworCQloYyA9IF9fZ2V0X3V1aWRfY2VsbChwYXJhbS0+dXVpZCk7CisJCWlmICghaGMpCisJCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCpwYXJhbS0+bmFtZSkgeworCQlpZiAocGFyYW0tPmRldikKKwkJCXJldHVybiBOVUxMOwogCi0JbWQgPSBkbV9nZXRfbWQoaHVnZV9kZWNvZGVfZGV2KHBhcmFtLT5kZXYpKTsKLQlpZiAoIW1kKQotCQlnb3RvIG91dDsKKwkJaGMgPSBfX2dldF9uYW1lX2NlbGwocGFyYW0tPm5hbWUpOworCQlpZiAoIWhjKQorCQkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmIChwYXJhbS0+ZGV2KSB7CisJCWhjID0gX19nZXRfZGV2X2NlbGwocGFyYW0tPmRldik7CisJCWlmICghaGMpCisJCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UKKwkJcmV0dXJuIE5VTEw7CiAKLQltZHB0ciA9IGRtX2dldF9tZHB0cihtZCk7Ci0JaWYgKCFtZHB0cikKLQkJZG1fcHV0KG1kKTsKKwkvKgorCSAqIFNuZWFraWx5IHdyaXRlIGluIGJvdGggdGhlIG5hbWUgYW5kIHRoZSB1dWlkCisJICogd2hpbGUgd2UgaGF2ZSB0aGUgY2VsbC4KKwkgKi8KKwlzdHJsY3B5KHBhcmFtLT5uYW1lLCBoYy0+bmFtZSwgc2l6ZW9mKHBhcmFtLT5uYW1lKSk7CisJaWYgKGhjLT51dWlkKQorCQlzdHJsY3B5KHBhcmFtLT51dWlkLCBoYy0+dXVpZCwgc2l6ZW9mKHBhcmFtLT51dWlkKSk7CisJZWxzZQorCQlwYXJhbS0+dXVpZFswXSA9ICdcMCc7CiAKLW91dDoKLQlyZXR1cm4gbWRwdHI7CisJaWYgKGhjLT5uZXdfbWFwKQorCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fSU5BQ1RJVkVfUFJFU0VOVF9GTEFHOworCWVsc2UKKwkJcGFyYW0tPmZsYWdzICY9IH5ETV9JTkFDVElWRV9QUkVTRU5UX0ZMQUc7CisKKwlyZXR1cm4gaGM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqZmluZF9kZXZpY2Uoc3RydWN0IGRtX2lvY3RsICpwYXJhbSkKQEAgLTc0NiwyNCArNzg0LDggQEAKIAogCWRvd25fcmVhZCgmX2hhc2hfbG9jayk7CiAJaGMgPSBfX2ZpbmRfZGV2aWNlX2hhc2hfY2VsbChwYXJhbSk7Ci0JaWYgKGhjKSB7CisJaWYgKGhjKQogCQltZCA9IGhjLT5tZDsKLQotCQkvKgotCQkgKiBTbmVha2lseSB3cml0ZSBpbiBib3RoIHRoZSBuYW1lIGFuZCB0aGUgdXVpZAotCQkgKiB3aGlsZSB3ZSBoYXZlIHRoZSBjZWxsLgotCQkgKi8KLQkJc3RybGNweShwYXJhbS0+bmFtZSwgaGMtPm5hbWUsIHNpemVvZihwYXJhbS0+bmFtZSkpOwotCQlpZiAoaGMtPnV1aWQpCi0JCQlzdHJsY3B5KHBhcmFtLT51dWlkLCBoYy0+dXVpZCwgc2l6ZW9mKHBhcmFtLT51dWlkKSk7Ci0JCWVsc2UKLQkJCXBhcmFtLT51dWlkWzBdID0gJ1wwJzsKLQotCQlpZiAoaGMtPm5ld19tYXApCi0JCQlwYXJhbS0+ZmxhZ3MgfD0gRE1fSU5BQ1RJVkVfUFJFU0VOVF9GTEFHOwotCQllbHNlCi0JCQlwYXJhbS0+ZmxhZ3MgJj0gfkRNX0lOQUNUSVZFX1BSRVNFTlRfRkxBRzsKLQl9CiAJdXBfcmVhZCgmX2hhc2hfbG9jayk7CiAKIAlyZXR1cm4gbWQ7CkBAIC0xNDAyLDYgKzE0MjQsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKCFhcmdjKSB7CisJCURNV0FSTigiRW1wdHkgbWVzc2FnZSByZWNlaXZlZC4iKTsKKwkJZ290byBvdXQ7CisJfQorCiAJdGFibGUgPSBkbV9nZXRfbGl2ZV90YWJsZShtZCk7CiAJaWYgKCF0YWJsZSkKIAkJZ290byBvdXRfYXJndjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMgYi9kcml2ZXJzL21kL2RtLWtjb3B5ZC5jCmluZGV4IDMyMDQwMWQuLmY4MjE0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMKKysrIGIvZHJpdmVycy9tZC9kbS1rY29weWQuYwpAQCAtMjI0LDggKzIyNCw2IEBACiAJdW5zaWduZWQgaW50IG51bV9kZXN0czsKIAlzdHJ1Y3QgZG1faW9fcmVnaW9uIGRlc3RzW0RNX0tDT1BZRF9NQVhfUkVHSU9OU107CiAKLQlzZWN0b3JfdCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogCXN0cnVjdCBwYWdlX2xpc3QgKnBhZ2VzOwogCiAJLyoKQEAgLTM4MCw3ICszNzgsNyBAQAogCQkuYmlfcncgPSBqb2ItPnJ3LAogCQkubWVtLnR5cGUgPSBETV9JT19QQUdFX0xJU1QsCiAJCS5tZW0ucHRyLnBsID0gam9iLT5wYWdlcywKLQkJLm1lbS5vZmZzZXQgPSBqb2ItPm9mZnNldCwKKwkJLm1lbS5vZmZzZXQgPSAwLAogCQkubm90aWZ5LmZuID0gY29tcGxldGVfaW8sCiAJCS5ub3RpZnkuY29udGV4dCA9IGpvYiwKIAkJLmNsaWVudCA9IGpvYi0+a2MtPmlvX2NsaWVudCwKQEAgLTM5NywxMCArMzk1LDkgQEAKIHN0YXRpYyBpbnQgcnVuX3BhZ2VzX2pvYihzdHJ1Y3Qga2NvcHlkX2pvYiAqam9iKQogewogCWludCByOworCXVuc2lnbmVkIG5yX3BhZ2VzID0gZG1fZGl2X3VwKGpvYi0+ZGVzdHNbMF0uY291bnQsIFBBR0VfU0laRSA+PiA5KTsKIAotCWpvYi0+bnJfcGFnZXMgPSBkbV9kaXZfdXAoam9iLT5kZXN0c1swXS5jb3VudCArIGpvYi0+b2Zmc2V0LAotCQkJCSAgUEFHRV9TSVpFID4+IDkpOwotCXIgPSBrY29weWRfZ2V0X3BhZ2VzKGpvYi0+a2MsIGpvYi0+bnJfcGFnZXMsICZqb2ItPnBhZ2VzKTsKKwlyID0ga2NvcHlkX2dldF9wYWdlcyhqb2ItPmtjLCBucl9wYWdlcywgJmpvYi0+cGFnZXMpOwogCWlmICghcikgewogCQkvKiB0aGlzIGpvYiBpcyByZWFkeSBmb3IgaW8gKi8KIAkJcHVzaCgmam9iLT5rYy0+aW9fam9icywgam9iKTsKQEAgLTYwMiw4ICs1OTksNiBAQAogCWpvYi0+bnVtX2Rlc3RzID0gbnVtX2Rlc3RzOwogCW1lbWNweSgmam9iLT5kZXN0cywgZGVzdHMsIHNpemVvZigqZGVzdHMpICogbnVtX2Rlc3RzKTsKIAotCWpvYi0+b2Zmc2V0ID0gMDsKLQlqb2ItPm5yX3BhZ2VzID0gMDsKIAlqb2ItPnBhZ2VzID0gTlVMTDsKIAogCWpvYi0+Zm4gPSBmbjsKQEAgLTYyMiw2ICs2MTcsMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fa2NvcHlkX2NvcHkpOwogCit2b2lkICpkbV9rY29weWRfcHJlcGFyZV9jYWxsYmFjayhzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqa2MsCisJCQkJIGRtX2tjb3B5ZF9ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGtjb3B5ZF9qb2IgKmpvYjsKKworCWpvYiA9IG1lbXBvb2xfYWxsb2Moa2MtPmpvYl9wb29sLCBHRlBfTk9JTyk7CisKKwltZW1zZXQoam9iLCAwLCBzaXplb2Yoc3RydWN0IGtjb3B5ZF9qb2IpKTsKKwlqb2ItPmtjID0ga2M7CisJam9iLT5mbiA9IGZuOworCWpvYi0+Y29udGV4dCA9IGNvbnRleHQ7CisKKwlhdG9taWNfaW5jKCZrYy0+bnJfam9icyk7CisKKwlyZXR1cm4gam9iOworfQorRVhQT1JUX1NZTUJPTChkbV9rY29weWRfcHJlcGFyZV9jYWxsYmFjayk7CisKK3ZvaWQgZG1fa2NvcHlkX2RvX2NhbGxiYWNrKHZvaWQgKmosIGludCByZWFkX2VyciwgdW5zaWduZWQgbG9uZyB3cml0ZV9lcnIpCit7CisJc3RydWN0IGtjb3B5ZF9qb2IgKmpvYiA9IGo7CisJc3RydWN0IGRtX2tjb3B5ZF9jbGllbnQgKmtjID0gam9iLT5rYzsKKworCWpvYi0+cmVhZF9lcnIgPSByZWFkX2VycjsKKwlqb2ItPndyaXRlX2VyciA9IHdyaXRlX2VycjsKKworCXB1c2goJmtjLT5jb21wbGV0ZV9qb2JzLCBqb2IpOworCXdha2Uoa2MpOworfQorRVhQT1JUX1NZTUJPTChkbV9rY29weWRfZG9fY2FsbGJhY2spOworCiAvKgogICogQ2FuY2VscyBhIGtjb3B5ZCBqb2IsIGVnLiBzb21lb25lIG1pZ2h0IGJlIGRlYWN0aXZhdGluZyBhCiAgKiBtaXJyb3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwppbmRleCBhYTJlMGMzLi4xMDIxYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKQEAgLTM5NCw4ICszOTQsNyBAQAogCQkJZ3JvdXBbY291bnRdID0gZmUtPnJlZ2lvbjsKIAkJCWNvdW50Kys7CiAKLQkJCWxpc3RfZGVsKCZmZS0+bGlzdCk7Ci0JCQlsaXN0X2FkZCgmZmUtPmxpc3QsICZ0bXBfbGlzdCk7CisJCQlsaXN0X21vdmUoJmZlLT5saXN0LCAmdG1wX2xpc3QpOwogCiAJCQl0eXBlID0gZmUtPnR5cGU7CiAJCQlpZiAoY291bnQgPj0gTUFYX0ZMVVNIX0dST1VQX0NPVU5UKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggOTQ4ZTNmNC4uM2I1MmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC0xOTcsMTUgKzE5NywyMSBAQAogI2RlZmluZSBNSVJST1JfRElTS19WRVJTSU9OIDIKICNkZWZpbmUgTE9HX09GRlNFVCAyCiAKLXN0cnVjdCBsb2dfaGVhZGVyIHsKLQl1aW50MzJfdCBtYWdpYzsKK3N0cnVjdCBsb2dfaGVhZGVyX2Rpc2sgeworCV9fbGUzMiBtYWdpYzsKIAogCS8qCiAJICogU2ltcGxlLCBpbmNyZW1lbnRpbmcgdmVyc2lvbi4gbm8gYmFja3dhcmQKIAkgKiBjb21wYXRpYmlsaXR5LgogCSAqLworCV9fbGUzMiB2ZXJzaW9uOworCV9fbGU2NCBucl9yZWdpb25zOworfSBfX3BhY2tlZDsKKworc3RydWN0IGxvZ19oZWFkZXJfY29yZSB7CisJdWludDMyX3QgbWFnaWM7CiAJdWludDMyX3QgdmVyc2lvbjsKLQlzZWN0b3JfdCBucl9yZWdpb25zOworCXVpbnQ2NF90IG5yX3JlZ2lvbnM7CiB9OwogCiBzdHJ1Y3QgbG9nX2MgewpAQCAtMjM5LDEwICsyNDUsMTAgQEAKIAlpbnQgbG9nX2Rldl9mYWlsZWQ7CiAJaW50IGxvZ19kZXZfZmx1c2hfZmFpbGVkOwogCXN0cnVjdCBkbV9kZXYgKmxvZ19kZXY7Ci0Jc3RydWN0IGxvZ19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBsb2dfaGVhZGVyX2NvcmUgaGVhZGVyOwogCiAJc3RydWN0IGRtX2lvX3JlZ2lvbiBoZWFkZXJfbG9jYXRpb247Ci0Jc3RydWN0IGxvZ19oZWFkZXIgKmRpc2tfaGVhZGVyOworCXN0cnVjdCBsb2dfaGVhZGVyX2Rpc2sgKmRpc2tfaGVhZGVyOwogfTsKIAogLyoKQEAgLTI1MSwzNCArMjU3LDM0IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGxvZ190ZXN0X2JpdCh1aW50MzJfdCAqYnMsIHVuc2lnbmVkIGJpdCkKIHsKLQlyZXR1cm4gdGVzdF9iaXRfbGUoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicykgPyAxIDogMDsKKwlyZXR1cm4gdGVzdF9iaXRfbGUoYml0LCBicykgPyAxIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvZ19zZXRfYml0KHN0cnVjdCBsb2dfYyAqbCwKIAkJCSAgICAgICB1aW50MzJfdCAqYnMsIHVuc2lnbmVkIGJpdCkKIHsKLQlfX3Rlc3RfYW5kX3NldF9iaXRfbGUoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7CisJX19zZXRfYml0X2xlKGJpdCwgYnMpOwogCWwtPnRvdWNoZWRfY2xlYW5lZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dfY2xlYXJfYml0KHN0cnVjdCBsb2dfYyAqbCwKIAkJCQkgdWludDMyX3QgKmJzLCB1bnNpZ25lZCBiaXQpCiB7Ci0JX190ZXN0X2FuZF9jbGVhcl9iaXRfbGUoYml0LCAodW5zaWduZWQgbG9uZyAqKSBicyk7CisJX19jbGVhcl9iaXRfbGUoYml0LCBicyk7CiAJbC0+dG91Y2hlZF9kaXJ0aWVkID0gMTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBIZWFkZXIgSU8KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGVhZGVyX3RvX2Rpc2soc3RydWN0IGxvZ19oZWFkZXIgKmNvcmUsIHN0cnVjdCBsb2dfaGVhZGVyICpkaXNrKQorc3RhdGljIHZvaWQgaGVhZGVyX3RvX2Rpc2soc3RydWN0IGxvZ19oZWFkZXJfY29yZSAqY29yZSwgc3RydWN0IGxvZ19oZWFkZXJfZGlzayAqZGlzaykKIHsKIAlkaXNrLT5tYWdpYyA9IGNwdV90b19sZTMyKGNvcmUtPm1hZ2ljKTsKIAlkaXNrLT52ZXJzaW9uID0gY3B1X3RvX2xlMzIoY29yZS0+dmVyc2lvbik7CiAJZGlzay0+bnJfcmVnaW9ucyA9IGNwdV90b19sZTY0KGNvcmUtPm5yX3JlZ2lvbnMpOwogfQogCi1zdGF0aWMgdm9pZCBoZWFkZXJfZnJvbV9kaXNrKHN0cnVjdCBsb2dfaGVhZGVyICpjb3JlLCBzdHJ1Y3QgbG9nX2hlYWRlciAqZGlzaykKK3N0YXRpYyB2b2lkIGhlYWRlcl9mcm9tX2Rpc2soc3RydWN0IGxvZ19oZWFkZXJfY29yZSAqY29yZSwgc3RydWN0IGxvZ19oZWFkZXJfZGlzayAqZGlzaykKIHsKIAljb3JlLT5tYWdpYyA9IGxlMzJfdG9fY3B1KGRpc2stPm1hZ2ljKTsKIAljb3JlLT52ZXJzaW9uID0gbGUzMl90b19jcHUoZGlzay0+dmVyc2lvbik7CkBAIC00ODYsNyArNDkyLDcgQEAKIAltZW1zZXQobGMtPnN5bmNfYml0cywgKHN5bmMgPT0gTk9TWU5DKSA/IC0xIDogMCwgYml0c2V0X3NpemUpOwogCWxjLT5zeW5jX2NvdW50ID0gKHN5bmMgPT0gTk9TWU5DKSA/IHJlZ2lvbl9jb3VudCA6IDA7CiAKLQlsYy0+cmVjb3ZlcmluZ19iaXRzID0gdm1hbGxvYyhiaXRzZXRfc2l6ZSk7CisJbGMtPnJlY292ZXJpbmdfYml0cyA9IHZ6YWxsb2MoYml0c2V0X3NpemUpOwogCWlmICghbGMtPnJlY292ZXJpbmdfYml0cykgewogCQlETVdBUk4oImNvdWxkbid0IGFsbG9jYXRlIHN5bmMgYml0c2V0Iik7CiAJCXZmcmVlKGxjLT5zeW5jX2JpdHMpOwpAQCAtNDk4LDcgKzUwNCw2IEBACiAJCWtmcmVlKGxjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChsYy0+cmVjb3ZlcmluZ19iaXRzLCAwLCBiaXRzZXRfc2l6ZSk7CiAJbGMtPnN5bmNfc2VhcmNoID0gMDsKIAlsb2ctPmNvbnRleHQgPSBsYzsKIApAQCAtNzM5LDggKzc0NCw3IEBACiAJCXJldHVybiAwOwogCiAJZG8gewotCQkqcmVnaW9uID0gZmluZF9uZXh0X3plcm9fYml0X2xlKAotCQkJCQkgICAgICh1bnNpZ25lZCBsb25nICopIGxjLT5zeW5jX2JpdHMsCisJCSpyZWdpb24gPSBmaW5kX25leHRfemVyb19iaXRfbGUobGMtPnN5bmNfYml0cywKIAkJCQkJICAgICBsYy0+cmVnaW9uX2NvdW50LAogCQkJCQkgICAgIGxjLT5zeW5jX3NlYXJjaCk7CiAJCWxjLT5zeW5jX3NlYXJjaCA9ICpyZWdpb24gKyAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IGMzNTQ3MDEuLjVlMDA5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJtdWx0aXBhdGgiCi0jZGVmaW5lIE1FU0dfU1RSKHgpIHgsIHNpemVvZih4KQogI2RlZmluZSBETV9QR19JTklUX0RFTEFZX01TRUNTIDIwMDAKICNkZWZpbmUgRE1fUEdfSU5JVF9ERUxBWV9ERUZBVUxUICgodW5zaWduZWQpIC0xKQogCkBAIC01MDUsODAgKzUwNCwyOSBAQAogICogICAgICA8I3BhdGhzPiA8I3Blci1wYXRoIHNlbGVjdG9yIGFyZ3M+CiAgKiAgICAgICAgIFs8cGF0aD4gWzxhcmc+XSogXSsgXSsKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0cnVjdCBwYXJhbSB7Ci0JdW5zaWduZWQgbWluOwotCXVuc2lnbmVkIG1heDsKLQljaGFyICplcnJvcjsKLX07Ci0KLXN0YXRpYyBpbnQgcmVhZF9wYXJhbShzdHJ1Y3QgcGFyYW0gKnBhcmFtLCBjaGFyICpzdHIsIHVuc2lnbmVkICp2LCBjaGFyICoqZXJyb3IpCi17Ci0JaWYgKCFzdHIgfHwKLQkgICAgKHNzY2FuZihzdHIsICIldSIsIHYpICE9IDEpIHx8Ci0JICAgICgqdiA8IHBhcmFtLT5taW4pIHx8Ci0JICAgICgqdiA+IHBhcmFtLT5tYXgpKSB7Ci0JCSplcnJvciA9IHBhcmFtLT5lcnJvcjsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBhcmdfc2V0IHsKLQl1bnNpZ25lZCBhcmdjOwotCWNoYXIgKiphcmd2OwotfTsKLQotc3RhdGljIGNoYXIgKnNoaWZ0KHN0cnVjdCBhcmdfc2V0ICphcykKLXsKLQljaGFyICpyOwotCi0JaWYgKGFzLT5hcmdjKSB7Ci0JCWFzLT5hcmdjLS07Ci0JCXIgPSAqYXMtPmFyZ3Y7Ci0JCWFzLT5hcmd2Kys7Ci0JCXJldHVybiByOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBjb25zdW1lKHN0cnVjdCBhcmdfc2V0ICphcywgdW5zaWduZWQgbikKLXsKLQlCVUdfT04gKGFzLT5hcmdjIDwgbik7Ci0JYXMtPmFyZ2MgLT0gbjsKLQlhcy0+YXJndiArPSBuOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX3BhdGhfc2VsZWN0b3Ioc3RydWN0IGFyZ19zZXQgKmFzLCBzdHJ1Y3QgcHJpb3JpdHlfZ3JvdXAgKnBnLAorc3RhdGljIGludCBwYXJzZV9wYXRoX3NlbGVjdG9yKHN0cnVjdCBkbV9hcmdfc2V0ICphcywgc3RydWN0IHByaW9yaXR5X2dyb3VwICpwZywKIAkJCSAgICAgICBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgcGF0aF9zZWxlY3Rvcl90eXBlICpwc3Q7CiAJdW5zaWduZWQgcHNfYXJnYzsKIAotCXN0YXRpYyBzdHJ1Y3QgcGFyYW0gX3BhcmFtc1tdID0geworCXN0YXRpYyBzdHJ1Y3QgZG1fYXJnIF9hcmdzW10gPSB7CiAJCXswLCAxMDI0LCAiaW52YWxpZCBudW1iZXIgb2YgcGF0aCBzZWxlY3RvciBhcmdzIn0sCiAJfTsKIAotCXBzdCA9IGRtX2dldF9wYXRoX3NlbGVjdG9yKHNoaWZ0KGFzKSk7CisJcHN0ID0gZG1fZ2V0X3BhdGhfc2VsZWN0b3IoZG1fc2hpZnRfYXJnKGFzKSk7CiAJaWYgKCFwc3QpIHsKIAkJdGktPmVycm9yID0gInVua25vd24gcGF0aCBzZWxlY3RvciB0eXBlIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JciA9IHJlYWRfcGFyYW0oX3BhcmFtcywgc2hpZnQoYXMpLCAmcHNfYXJnYywgJnRpLT5lcnJvcik7CisJciA9IGRtX3JlYWRfYXJnX2dyb3VwKF9hcmdzLCBhcywgJnBzX2FyZ2MsICZ0aS0+ZXJyb3IpOwogCWlmIChyKSB7CiAJCWRtX3B1dF9wYXRoX3NlbGVjdG9yKHBzdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwc19hcmdjID4gYXMtPmFyZ2MpIHsKLQkJZG1fcHV0X3BhdGhfc2VsZWN0b3IocHN0KTsKLQkJdGktPmVycm9yID0gIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBwYXRoIHNlbGVjdG9yIjsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJciA9IHBzdC0+Y3JlYXRlKCZwZy0+cHMsIHBzX2FyZ2MsIGFzLT5hcmd2KTsKIAlpZiAocikgewogCQlkbV9wdXRfcGF0aF9zZWxlY3Rvcihwc3QpOwpAQCAtNTg3LDEyICs1MzUsMTIgQEAKIAl9CiAKIAlwZy0+cHMudHlwZSA9IHBzdDsKLQljb25zdW1lKGFzLCBwc19hcmdjKTsKKwlkbV9jb25zdW1lX2FyZ3MoYXMsIHBzX2FyZ2MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGdwYXRoICpwYXJzZV9wYXRoKHN0cnVjdCBhcmdfc2V0ICphcywgc3RydWN0IHBhdGhfc2VsZWN0b3IgKnBzLAorc3RhdGljIHN0cnVjdCBwZ3BhdGggKnBhcnNlX3BhdGgoc3RydWN0IGRtX2FyZ19zZXQgKmFzLCBzdHJ1Y3QgcGF0aF9zZWxlY3RvciAqcHMsCiAJCQkgICAgICAgc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7CiAJaW50IHI7CkBAIC02MDksNyArNTU3LDcgQEAKIAlpZiAoIXApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIHNoaWZ0KGFzKSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgZG1fc2hpZnRfYXJnKGFzKSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKIAkJCSAgJnAtPnBhdGguZGV2KTsKIAlpZiAocikgewogCQl0aS0+ZXJyb3IgPSAiZXJyb3IgZ2V0dGluZyBkZXZpY2UiOwpAQCAtNjYwLDE2ICs2MDgsMTYgQEAKIAlyZXR1cm4gRVJSX1BUUihyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwcmlvcml0eV9ncm91cCAqcGFyc2VfcHJpb3JpdHlfZ3JvdXAoc3RydWN0IGFyZ19zZXQgKmFzLAorc3RhdGljIHN0cnVjdCBwcmlvcml0eV9ncm91cCAqcGFyc2VfcHJpb3JpdHlfZ3JvdXAoc3RydWN0IGRtX2FyZ19zZXQgKmFzLAogCQkJCQkJICAgc3RydWN0IG11bHRpcGF0aCAqbSkKIHsKLQlzdGF0aWMgc3RydWN0IHBhcmFtIF9wYXJhbXNbXSA9IHsKKwlzdGF0aWMgc3RydWN0IGRtX2FyZyBfYXJnc1tdID0gewogCQl7MSwgMTAyNCwgImludmFsaWQgbnVtYmVyIG9mIHBhdGhzIn0sCiAJCXswLCAxMDI0LCAiaW52YWxpZCBudW1iZXIgb2Ygc2VsZWN0b3IgYXJncyJ9CiAJfTsKIAogCWludCByOwotCXVuc2lnbmVkIGksIG5yX3NlbGVjdG9yX2FyZ3MsIG5yX3BhcmFtczsKKwl1bnNpZ25lZCBpLCBucl9zZWxlY3Rvcl9hcmdzLCBucl9hcmdzOwogCXN0cnVjdCBwcmlvcml0eV9ncm91cCAqcGc7CiAJc3RydWN0IGRtX3RhcmdldCAqdGkgPSBtLT50aTsKIApAQCAtNjkzLDI2ICs2NDEsMjYgQEAKIAkvKgogCSAqIHJlYWQgdGhlIHBhdGhzCiAJICovCi0JciA9IHJlYWRfcGFyYW0oX3BhcmFtcywgc2hpZnQoYXMpLCAmcGctPm5yX3BncGF0aHMsICZ0aS0+ZXJyb3IpOworCXIgPSBkbV9yZWFkX2FyZyhfYXJncywgYXMsICZwZy0+bnJfcGdwYXRocywgJnRpLT5lcnJvcik7CiAJaWYgKHIpCiAJCWdvdG8gYmFkOwogCi0JciA9IHJlYWRfcGFyYW0oX3BhcmFtcyArIDEsIHNoaWZ0KGFzKSwgJm5yX3NlbGVjdG9yX2FyZ3MsICZ0aS0+ZXJyb3IpOworCXIgPSBkbV9yZWFkX2FyZyhfYXJncyArIDEsIGFzLCAmbnJfc2VsZWN0b3JfYXJncywgJnRpLT5lcnJvcik7CiAJaWYgKHIpCiAJCWdvdG8gYmFkOwogCi0JbnJfcGFyYW1zID0gMSArIG5yX3NlbGVjdG9yX2FyZ3M7CisJbnJfYXJncyA9IDEgKyBucl9zZWxlY3Rvcl9hcmdzOwogCWZvciAoaSA9IDA7IGkgPCBwZy0+bnJfcGdwYXRoczsgaSsrKSB7CiAJCXN0cnVjdCBwZ3BhdGggKnBncGF0aDsKLQkJc3RydWN0IGFyZ19zZXQgcGF0aF9hcmdzOworCQlzdHJ1Y3QgZG1fYXJnX3NldCBwYXRoX2FyZ3M7CiAKLQkJaWYgKGFzLT5hcmdjIDwgbnJfcGFyYW1zKSB7CisJCWlmIChhcy0+YXJnYyA8IG5yX2FyZ3MpIHsKIAkJCXRpLT5lcnJvciA9ICJub3QgZW5vdWdoIHBhdGggcGFyYW1ldGVycyI7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFkOwogCQl9CiAKLQkJcGF0aF9hcmdzLmFyZ2MgPSBucl9wYXJhbXM7CisJCXBhdGhfYXJncy5hcmdjID0gbnJfYXJnczsKIAkJcGF0aF9hcmdzLmFyZ3YgPSBhcy0+YXJndjsKIAogCQlwZ3BhdGggPSBwYXJzZV9wYXRoKCZwYXRoX2FyZ3MsICZwZy0+cHMsIHRpKTsKQEAgLTcyMyw3ICs2NzEsNyBAQAogCiAJCXBncGF0aC0+cGcgPSBwZzsKIAkJbGlzdF9hZGRfdGFpbCgmcGdwYXRoLT5saXN0LCAmcGctPnBncGF0aHMpOwotCQljb25zdW1lKGFzLCBucl9wYXJhbXMpOworCQlkbV9jb25zdW1lX2FyZ3MoYXMsIG5yX2FyZ3MpOwogCX0KIAogCXJldHVybiBwZzsKQEAgLTczMywyOCArNjgxLDIzIEBACiAJcmV0dXJuIEVSUl9QVFIocik7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfaHdfaGFuZGxlcihzdHJ1Y3QgYXJnX3NldCAqYXMsIHN0cnVjdCBtdWx0aXBhdGggKm0pCitzdGF0aWMgaW50IHBhcnNlX2h3X2hhbmRsZXIoc3RydWN0IGRtX2FyZ19zZXQgKmFzLCBzdHJ1Y3QgbXVsdGlwYXRoICptKQogewogCXVuc2lnbmVkIGh3X2FyZ2M7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSA9IG0tPnRpOwogCi0Jc3RhdGljIHN0cnVjdCBwYXJhbSBfcGFyYW1zW10gPSB7CisJc3RhdGljIHN0cnVjdCBkbV9hcmcgX2FyZ3NbXSA9IHsKIAkJezAsIDEwMjQsICJpbnZhbGlkIG51bWJlciBvZiBoYXJkd2FyZSBoYW5kbGVyIGFyZ3MifSwKIAl9OwogCi0JaWYgKHJlYWRfcGFyYW0oX3BhcmFtcywgc2hpZnQoYXMpLCAmaHdfYXJnYywgJnRpLT5lcnJvcikpCisJaWYgKGRtX3JlYWRfYXJnX2dyb3VwKF9hcmdzLCBhcywgJmh3X2FyZ2MsICZ0aS0+ZXJyb3IpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghaHdfYXJnYykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaHdfYXJnYyA+IGFzLT5hcmdjKSB7Ci0JCXRpLT5lcnJvciA9ICJub3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgaGFyZHdhcmUgaGFuZGxlciI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW0tPmh3X2hhbmRsZXJfbmFtZSA9IGtzdHJkdXAoc2hpZnQoYXMpLCBHRlBfS0VSTkVMKTsKKwltLT5od19oYW5kbGVyX25hbWUgPSBrc3RyZHVwKGRtX3NoaWZ0X2FyZyhhcyksIEdGUF9LRVJORUwpOwogCXJlcXVlc3RfbW9kdWxlKCJzY3NpX2RoXyVzIiwgbS0+aHdfaGFuZGxlcl9uYW1lKTsKIAlpZiAoc2NzaV9kaF9oYW5kbGVyX2V4aXN0KG0tPmh3X2hhbmRsZXJfbmFtZSkgPT0gMCkgewogCQl0aS0+ZXJyb3IgPSAidW5rbm93biBoYXJkd2FyZSBoYW5kbGVyIHR5cGUiOwpAQCAtNzc4LDcgKzcyMSw3IEBACiAJCWZvciAoaSA9IDAsIHArPWorMTsgaSA8PSBod19hcmdjIC0gMjsgaSsrLCBwKz1qKzEpCiAJCQlqID0gc3ByaW50ZihwLCAiJXMiLCBhcy0+YXJndltpXSk7CiAJfQotCWNvbnN1bWUoYXMsIGh3X2FyZ2MgLSAxKTsKKwlkbV9jb25zdW1lX2FyZ3MoYXMsIGh3X2FyZ2MgLSAxKTsKIAogCXJldHVybiAwOwogZmFpbDoKQEAgLTc4NywyMCArNzMwLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwYXJzZV9mZWF0dXJlcyhzdHJ1Y3QgYXJnX3NldCAqYXMsIHN0cnVjdCBtdWx0aXBhdGggKm0pCitzdGF0aWMgaW50IHBhcnNlX2ZlYXR1cmVzKHN0cnVjdCBkbV9hcmdfc2V0ICphcywgc3RydWN0IG11bHRpcGF0aCAqbSkKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBhcmdjOwogCXN0cnVjdCBkbV90YXJnZXQgKnRpID0gbS0+dGk7Ci0JY29uc3QgY2hhciAqcGFyYW1fbmFtZTsKKwljb25zdCBjaGFyICphcmdfbmFtZTsKIAotCXN0YXRpYyBzdHJ1Y3QgcGFyYW0gX3BhcmFtc1tdID0geworCXN0YXRpYyBzdHJ1Y3QgZG1fYXJnIF9hcmdzW10gPSB7CiAJCXswLCA1LCAiaW52YWxpZCBudW1iZXIgb2YgZmVhdHVyZSBhcmdzIn0sCiAJCXsxLCA1MCwgInBnX2luaXRfcmV0cmllcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAifSwKIAkJezAsIDYwMDAwLCAicGdfaW5pdF9kZWxheV9tc2VjcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNjAwMDAifSwKIAl9OwogCi0JciA9IHJlYWRfcGFyYW0oX3BhcmFtcywgc2hpZnQoYXMpLCAmYXJnYywgJnRpLT5lcnJvcik7CisJciA9IGRtX3JlYWRfYXJnX2dyb3VwKF9hcmdzLCBhcywgJmFyZ2MsICZ0aS0+ZXJyb3IpOwogCWlmIChyKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODA4LDI2ICs3NTEsMjQgQEAKIAkJcmV0dXJuIDA7CiAKIAlkbyB7Ci0JCXBhcmFtX25hbWUgPSBzaGlmdChhcyk7CisJCWFyZ19uYW1lID0gZG1fc2hpZnRfYXJnKGFzKTsKIAkJYXJnYy0tOwogCi0JCWlmICghc3RybmljbXAocGFyYW1fbmFtZSwgTUVTR19TVFIoInF1ZXVlX2lmX25vX3BhdGgiKSkpIHsKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ19uYW1lLCAicXVldWVfaWZfbm9fcGF0aCIpKSB7CiAJCQlyID0gcXVldWVfaWZfbm9fcGF0aChtLCAxLCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFzdHJuaWNtcChwYXJhbV9uYW1lLCBNRVNHX1NUUigicGdfaW5pdF9yZXRyaWVzIikpICYmCisJCWlmICghc3RyY2FzZWNtcChhcmdfbmFtZSwgInBnX2luaXRfcmV0cmllcyIpICYmCiAJCSAgICAoYXJnYyA+PSAxKSkgewotCQkJciA9IHJlYWRfcGFyYW0oX3BhcmFtcyArIDEsIHNoaWZ0KGFzKSwKLQkJCQkgICAgICAgJm0tPnBnX2luaXRfcmV0cmllcywgJnRpLT5lcnJvcik7CisJCQlyID0gZG1fcmVhZF9hcmcoX2FyZ3MgKyAxLCBhcywgJm0tPnBnX2luaXRfcmV0cmllcywgJnRpLT5lcnJvcik7CiAJCQlhcmdjLS07CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghc3RybmljbXAocGFyYW1fbmFtZSwgTUVTR19TVFIoInBnX2luaXRfZGVsYXlfbXNlY3MiKSkgJiYKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ19uYW1lLCAicGdfaW5pdF9kZWxheV9tc2VjcyIpICYmCiAJCSAgICAoYXJnYyA+PSAxKSkgewotCQkJciA9IHJlYWRfcGFyYW0oX3BhcmFtcyArIDIsIHNoaWZ0KGFzKSwKLQkJCQkgICAgICAgJm0tPnBnX2luaXRfZGVsYXlfbXNlY3MsICZ0aS0+ZXJyb3IpOworCQkJciA9IGRtX3JlYWRfYXJnKF9hcmdzICsgMiwgYXMsICZtLT5wZ19pbml0X2RlbGF5X21zZWNzLCAmdGktPmVycm9yKTsKIAkJCWFyZ2MtLTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC04NDIsMTUgKzc4MywxNSBAQAogc3RhdGljIGludCBtdWx0aXBhdGhfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywKIAkJCSBjaGFyICoqYXJndikKIHsKLQkvKiB0YXJnZXQgcGFyYW1ldGVycyAqLwotCXN0YXRpYyBzdHJ1Y3QgcGFyYW0gX3BhcmFtc1tdID0geworCS8qIHRhcmdldCBhcmd1bWVudHMgKi8KKwlzdGF0aWMgc3RydWN0IGRtX2FyZyBfYXJnc1tdID0gewogCQl7MCwgMTAyNCwgImludmFsaWQgbnVtYmVyIG9mIHByaW9yaXR5IGdyb3VwcyJ9LAogCQl7MCwgMTAyNCwgImludmFsaWQgaW5pdGlhbCBwcmlvcml0eSBncm91cCBudW1iZXIifSwKIAl9OwogCiAJaW50IHI7CiAJc3RydWN0IG11bHRpcGF0aCAqbTsKLQlzdHJ1Y3QgYXJnX3NldCBhczsKKwlzdHJ1Y3QgZG1fYXJnX3NldCBhczsKIAl1bnNpZ25lZCBwZ19jb3VudCA9IDA7CiAJdW5zaWduZWQgbmV4dF9wZ19udW07CiAKQEAgLTg3MSwxMSArODEyLDExIEBACiAJaWYgKHIpCiAJCWdvdG8gYmFkOwogCi0JciA9IHJlYWRfcGFyYW0oX3BhcmFtcywgc2hpZnQoJmFzKSwgJm0tPm5yX3ByaW9yaXR5X2dyb3VwcywgJnRpLT5lcnJvcik7CisJciA9IGRtX3JlYWRfYXJnKF9hcmdzLCAmYXMsICZtLT5ucl9wcmlvcml0eV9ncm91cHMsICZ0aS0+ZXJyb3IpOwogCWlmIChyKQogCQlnb3RvIGJhZDsKIAotCXIgPSByZWFkX3BhcmFtKF9wYXJhbXMgKyAxLCBzaGlmdCgmYXMpLCAmbmV4dF9wZ19udW0sICZ0aS0+ZXJyb3IpOworCXIgPSBkbV9yZWFkX2FyZyhfYXJncyArIDEsICZhcywgJm5leHRfcGdfbnVtLCAmdGktPmVycm9yKTsKIAlpZiAocikKIAkJZ290byBiYWQ7CiAKQEAgLTE1MDUsMTAgKzE0NDYsMTAgQEAKIAl9CiAKIAlpZiAoYXJnYyA9PSAxKSB7Ci0JCWlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoInF1ZXVlX2lmX25vX3BhdGgiKSkpIHsKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sICJxdWV1ZV9pZl9ub19wYXRoIikpIHsKIAkJCXIgPSBxdWV1ZV9pZl9ub19wYXRoKG0sIDEsIDApOwogCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJmYWlsX2lmX25vX3BhdGgiKSkpIHsKKwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCAiZmFpbF9pZl9ub19wYXRoIikpIHsKIAkJCXIgPSBxdWV1ZV9pZl9ub19wYXRoKG0sIDAsIDApOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE1MTksMTggKzE0NjAsMTggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZGlzYWJsZV9ncm91cCIpKSkgeworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdLCAiZGlzYWJsZV9ncm91cCIpKSB7CiAJCXIgPSBieXBhc3NfcGdfbnVtKG0sIGFyZ3ZbMV0sIDEpOwogCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZW5hYmxlX2dyb3VwIikpKSB7CisJfSBlbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdLCAiZW5hYmxlX2dyb3VwIikpIHsKIAkJciA9IGJ5cGFzc19wZ19udW0obSwgYXJndlsxXSwgMCk7CiAJCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIXN0cm5pY21wKGFyZ3ZbMF0sIE1FU0dfU1RSKCJzd2l0Y2hfZ3JvdXAiKSkpIHsKKwl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sICJzd2l0Y2hfZ3JvdXAiKSkgewogCQlyID0gc3dpdGNoX3BnX251bShtLCBhcmd2WzFdKTsKIAkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICghc3RybmljbXAoYXJndlswXSwgTUVTR19TVFIoInJlaW5zdGF0ZV9wYXRoIikpKQorCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSwgInJlaW5zdGF0ZV9wYXRoIikpCiAJCWFjdGlvbiA9IHJlaW5zdGF0ZV9wYXRoOwotCWVsc2UgaWYgKCFzdHJuaWNtcChhcmd2WzBdLCBNRVNHX1NUUigiZmFpbF9wYXRoIikpKQorCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sICJmYWlsX3BhdGgiKSkKIAkJYWN0aW9uID0gZmFpbF9wYXRoOwogCWVsc2UgewogCQlETVdBUk4oIlVucmVjb2duaXNlZCBtdWx0aXBhdGggbWVzc2FnZSByZWNlaXZlZC4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jIGIvZHJpdmVycy9tZC9kbS1yYWlkLmMKaW5kZXggZTVkODkwNC4uYTAwMmRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkLmMKQEAgLTgsMTkgKzgsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgInJhaWQxLmgiCiAjaW5jbHVkZSAicmFpZDUuaCIKLSNpbmNsdWRlICJkbS5oIgogI2luY2x1ZGUgImJpdG1hcC5oIgogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgorCiAjZGVmaW5lIERNX01TR19QUkVGSVggInJhaWQiCiAKIC8qCi0gKiBJZiB0aGUgTUQgZG9lc24ndCBzdXBwb3J0IE1EX1NZTkNfU1RBVEVfRk9SQ0VEIHlldCwgdGhlbgotICogbWFrZSBpdCBzbyB0aGUgZmxhZyBkb2Vzbid0IHNldCBhbnl0aGluZy4KKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHVzZWQgYnkgZG0tcmFpZC5jIHRvIHNldCB1cCB0aGUgYXJyYXkgc3RhdGUuCisgKiBUaGV5IG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgbWRfcnVuIGlzIGNhbGxlZC4KICAqLwotI2lmbmRlZiBNRF9TWU5DX1NUQVRFX0ZPUkNFRAotI2RlZmluZSBNRF9TWU5DX1NUQVRFX0ZPUkNFRCAwCi0jZW5kaWYKKyNkZWZpbmUgRmlyc3RVc2UgMTAgICAgICAgICAgICAgLyogcmRldiBmbGFnICovCiAKIHN0cnVjdCByYWlkX2RldiB7CiAJLyoKQEAgLTQzLDE0ICs0MywxNSBAQAogLyoKICAqIEZsYWdzIGZvciBycy0+cHJpbnRfZmxhZ3MgZmllbGQuCiAgKi8KLSNkZWZpbmUgRE1QRl9EQUVNT05fU0xFRVAgICAgICAweDEKLSNkZWZpbmUgRE1QRl9NQVhfV1JJVEVfQkVISU5EICAweDIKLSNkZWZpbmUgRE1QRl9TWU5DICAgICAgICAgICAgICAweDQKLSNkZWZpbmUgRE1QRl9OT1NZTkMgICAgICAgICAgICAweDgKLSNkZWZpbmUgRE1QRl9TVFJJUEVfQ0FDSEUgICAgICAweDEwCi0jZGVmaW5lIERNUEZfTUlOX1JFQ09WRVJZX1JBVEUgMHgyMAotI2RlZmluZSBETVBGX01BWF9SRUNPVkVSWV9SQVRFIDB4NDAKLQorI2RlZmluZSBETVBGX1NZTkMgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBETVBGX05PU1lOQyAgICAgICAgICAgIDB4MgorI2RlZmluZSBETVBGX1JFQlVJTEQgICAgICAgICAgIDB4NAorI2RlZmluZSBETVBGX0RBRU1PTl9TTEVFUCAgICAgIDB4OAorI2RlZmluZSBETVBGX01JTl9SRUNPVkVSWV9SQVRFIDB4MTAKKyNkZWZpbmUgRE1QRl9NQVhfUkVDT1ZFUllfUkFURSAweDIwCisjZGVmaW5lIERNUEZfTUFYX1dSSVRFX0JFSElORCAgMHg0MAorI2RlZmluZSBETVBGX1NUUklQRV9DQUNIRSAgICAgIDB4ODAKKyNkZWZpbmUgRE1QRl9SRUdJT05fU0laRSAgICAgICAwWDEwMAogc3RydWN0IHJhaWRfc2V0IHsKIAlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKIApAQCAtNzIsNiArNzMsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxldmVsOwkJLyogUkFJRCBsZXZlbC4gKi8KIAljb25zdCB1bnNpZ25lZCBhbGdvcml0aG07CS8qIFJBSUQgYWxnb3JpdGhtLiAqLwogfSByYWlkX3R5cGVzW10gPSB7CisJeyJyYWlkMSIsICAgICJSQUlEMSAobWlycm9yaW5nKSIsICAgICAgICAgICAgICAgMCwgMiwgMSwgMCAvKiBOT05FICovfSwKIAl7InJhaWQ0IiwgICAgIlJBSUQ0IChkZWRpY2F0ZWQgcGFyaXR5IGRpc2spIiwJMSwgMiwgNSwgQUxHT1JJVEhNX1BBUklUWV8wfSwKIAl7InJhaWQ1X2xhIiwgIlJBSUQ1IChsZWZ0IGFzeW1tZXRyaWMpIiwJCTEsIDIsIDUsIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUN9LAogCXsicmFpZDVfcmEiLCAiUkFJRDUgKHJpZ2h0IGFzeW1tZXRyaWMpIiwJMSwgMiwgNSwgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUN9LApAQCAtMTA1LDcgKzEwNyw4IEBACiAJfQogCiAJc2VjdG9yc19wZXJfZGV2ID0gdGktPmxlbjsKLQlpZiAoc2VjdG9yX2RpdihzZWN0b3JzX3Blcl9kZXYsIChyYWlkX2RldnMgLSByYWlkX3R5cGUtPnBhcml0eV9kZXZzKSkpIHsKKwlpZiAoKHJhaWRfdHlwZS0+bGV2ZWwgPiAxKSAmJgorCSAgICBzZWN0b3JfZGl2KHNlY3RvcnNfcGVyX2RldiwgKHJhaWRfZGV2cyAtIHJhaWRfdHlwZS0+cGFyaXR5X2RldnMpKSkgewogCQl0aS0+ZXJyb3IgPSAiVGFyZ2V0IGxlbmd0aCBub3QgZGl2aXNpYmxlIGJ5IG51bWJlciBvZiBkYXRhIGRldmljZXMiOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CkBAIC0xNDcsOSArMTUwLDE2IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcnMtPm1kLnJhaWRfZGlza3M7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcnMtPm1kLnJhaWRfZGlza3M7IGkrKykgeworCQlpZiAocnMtPmRldltpXS5tZXRhX2RldikKKwkJCWRtX3B1dF9kZXZpY2UocnMtPnRpLCBycy0+ZGV2W2ldLm1ldGFfZGV2KTsKKwkJaWYgKHJzLT5kZXZbaV0ucmRldi5zYl9wYWdlKQorCQkJcHV0X3BhZ2UocnMtPmRldltpXS5yZGV2LnNiX3BhZ2UpOworCQlycy0+ZGV2W2ldLnJkZXYuc2JfcGFnZSA9IE5VTEw7CisJCXJzLT5kZXZbaV0ucmRldi5zYl9sb2FkZWQgPSAwOwogCQlpZiAocnMtPmRldltpXS5kYXRhX2RldikKIAkJCWRtX3B1dF9kZXZpY2UocnMtPnRpLCBycy0+ZGV2W2ldLmRhdGFfZGV2KTsKKwl9CiAKIAlrZnJlZShycyk7CiB9CkBAIC0xNTksNyArMTY5LDE2IEBACiAgKiAgPG1ldGFfZGV2PjogbWV0YSBkZXZpY2UgbmFtZSBvciAnLScgaWYgbWlzc2luZwogICogIDxkYXRhX2Rldj46IGRhdGEgZGV2aWNlIG5hbWUgb3IgJy0nIGlmIG1pc3NpbmcKICAqCi0gKiBUaGlzIGNvZGUgcGFyc2VzIHRob3NlIHdvcmRzLgorICogVGhlIGZvbGxvd2luZyBhcmUgcGVybWl0dGVkOgorICogICAgLSAtCisgKiAgICAtIDxkYXRhX2Rldj4KKyAqICAgIDxtZXRhX2Rldj4gPGRhdGFfZGV2PgorICoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgbm90IGFsbG93ZWQ6CisgKiAgICA8bWV0YV9kZXY+IC0KKyAqCisgKiBUaGlzIGNvZGUgcGFyc2VzIHRob3NlIHdvcmRzLiAgSWYgdGhlcmUgaXMgYSBmYWlsdXJlLAorICogdGhlIGNhbGxlciBtdXN0IHVzZSBjb250ZXh0X2ZyZWUgdG8gdW53aW5kIHRoZSBvcGVyYXRpb25zLgogICovCiBzdGF0aWMgaW50IGRldl9wYXJtcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzLCBjaGFyICoqYXJndikKIHsKQEAgLTE4Miw4ICsyMDEsMTYgQEAKIAkJcnMtPmRldltpXS5yZGV2Lm1kZGV2ID0gJnJzLT5tZDsKIAogCQlpZiAoc3RyY21wKGFyZ3ZbMF0sICItIikpIHsKLQkJCXJzLT50aS0+ZXJyb3IgPSAiTWV0YWRhdGEgZGV2aWNlcyBub3Qgc3VwcG9ydGVkIjsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0ID0gZG1fZ2V0X2RldmljZShycy0+dGksIGFyZ3ZbMF0sCisJCQkJCSAgICBkbV90YWJsZV9nZXRfbW9kZShycy0+dGktPnRhYmxlKSwKKwkJCQkJICAgICZycy0+ZGV2W2ldLm1ldGFfZGV2KTsKKwkJCXJzLT50aS0+ZXJyb3IgPSAiUkFJRCBtZXRhZGF0YSBkZXZpY2UgbG9va3VwIGZhaWx1cmUiOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlycy0+ZGV2W2ldLnJkZXYuc2JfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXJzLT5kZXZbaV0ucmRldi5zYl9wYWdlKQorCQkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKIAkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0iKSkgewpAQCAtMTkzLDYgKzIyMCwxMCBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCisJCQlycy0+dGktPmVycm9yID0gIk5vIGRhdGEgZGV2aWNlIHN1cHBsaWVkIHdpdGggbWV0YWRhdGEgZGV2aWNlIjsKKwkJCWlmIChycy0+ZGV2W2ldLm1ldGFfZGV2KQorCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMDQsNiArMjM1LDEwIEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKKwkJaWYgKHJzLT5kZXZbaV0ubWV0YV9kZXYpIHsKKwkJCW1ldGFkYXRhX2F2YWlsYWJsZSA9IDE7CisJCQlycy0+ZGV2W2ldLnJkZXYubWV0YV9iZGV2ID0gcnMtPmRldltpXS5tZXRhX2Rldi0+YmRldjsKKwkJfQogCQlycy0+ZGV2W2ldLnJkZXYuYmRldiA9IHJzLT5kZXZbaV0uZGF0YV9kZXYtPmJkZXY7CiAJCWxpc3RfYWRkKCZycy0+ZGV2W2ldLnJkZXYuc2FtZV9zZXQsICZycy0+bWQuZGlza3MpOwogCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZycy0+ZGV2W2ldLnJkZXYuZmxhZ3MpKQpAQCAtMjM1LDMzICsyNzAsMTA5IEBACiB9CiAKIC8qCisgKiB2YWxpZGF0ZV9yZWdpb25fc2l6ZQorICogQHJzCisgKiBAcmVnaW9uX3NpemU6ICByZWdpb24gc2l6ZSBpbiBzZWN0b3JzLiAgSWYgMCwgcGljayBhIHNpemUgKDRNaUIgZGVmYXVsdCkuCisgKgorICogU2V0IHJzLT5tZC5iaXRtYXBfaW5mby5jaHVua3NpemUgKHdoaWNoIHJlYWxseSByZWZlcnMgdG8gJ3JlZ2lvbiBzaXplJykuCisgKiBFbnN1cmUgdGhhdCAodGktPmxlbi9yZWdpb25fc2l6ZSA8IDJeMjEpIC0gcmVxdWlyZWQgYnkgTUQgYml0bWFwLgorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX3JlZ2lvbl9zaXplKHN0cnVjdCByYWlkX3NldCAqcnMsIHVuc2lnbmVkIGxvbmcgcmVnaW9uX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3NpemUgPSBycy0+dGktPmxlbiAvICgxIDw8IDIxKTsKKworCWlmICghcmVnaW9uX3NpemUpIHsKKwkJLyoKKwkJICogQ2hvb3NlIGEgcmVhc29uYWJsZSBkZWZhdWx0LiAgQWxsIGZpZ3VyZXMgaW4gc2VjdG9ycy4KKwkJICovCisJCWlmIChtaW5fcmVnaW9uX3NpemUgPiAoMSA8PCAxMykpIHsKKwkJCURNSU5GTygiQ2hvb3NpbmcgZGVmYXVsdCByZWdpb24gc2l6ZSBvZiAlbHUgc2VjdG9ycyIsCisJCQkgICAgICAgcmVnaW9uX3NpemUpOworCQkJcmVnaW9uX3NpemUgPSBtaW5fcmVnaW9uX3NpemU7CisJCX0gZWxzZSB7CisJCQlETUlORk8oIkNob29zaW5nIGRlZmF1bHQgcmVnaW9uIHNpemUgb2YgNE1pQiIpOworCQkJcmVnaW9uX3NpemUgPSAxIDw8IDEzOyAvKiBzZWN0b3JzICovCisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBWYWxpZGF0ZSB1c2VyLXN1cHBsaWVkIHZhbHVlLgorCQkgKi8KKwkJaWYgKHJlZ2lvbl9zaXplID4gcnMtPnRpLT5sZW4pIHsKKwkJCXJzLT50aS0+ZXJyb3IgPSAiU3VwcGxpZWQgcmVnaW9uIHNpemUgaXMgdG9vIGxhcmdlIjsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJlZ2lvbl9zaXplIDwgbWluX3JlZ2lvbl9zaXplKSB7CisJCQlETUVSUigiU3VwcGxpZWQgcmVnaW9uX3NpemUgKCVsdSBzZWN0b3JzKSBiZWxvdyBtaW5pbXVtICglbHUpIiwKKwkJCSAgICAgIHJlZ2lvbl9zaXplLCBtaW5fcmVnaW9uX3NpemUpOworCQkJcnMtPnRpLT5lcnJvciA9ICJTdXBwbGllZCByZWdpb24gc2l6ZSBpcyB0b28gc21hbGwiOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIWlzX3Bvd2VyX29mXzIocmVnaW9uX3NpemUpKSB7CisJCQlycy0+dGktPmVycm9yID0gIlJlZ2lvbiBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmVnaW9uX3NpemUgPCBycy0+bWQuY2h1bmtfc2VjdG9ycykgeworCQkJcnMtPnRpLT5lcnJvciA9ICJSZWdpb24gc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNodW5rIHNpemUiOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKgorCSAqIENvbnZlcnQgc2VjdG9ycyB0byBieXRlcy4KKwkgKi8KKwlycy0+bWQuYml0bWFwX2luZm8uY2h1bmtzaXplID0gKHJlZ2lvbl9zaXplIDw8IDkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBQb3NzaWJsZSBhcmd1bWVudHMgYXJlLi4uCi0gKiBSQUlENDU2OgogICoJPGNodW5rX3NpemU+IFtvcHRpb25hbF9hcmdzXQogICoKLSAqIE9wdGlvbmFsIGFyZ3M6Ci0gKiAgICBbW25vXXN5bmNdCQkJRm9yY2Ugb3IgcHJldmVudCByZWNvdmVyeSBvZiB0aGUgZW50aXJlIGFycmF5CisgKiBBcmd1bWVudCBkZWZpbml0aW9ucworICogICAgPGNodW5rX3NpemU+CQkJVGhlIG51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGZvcm0gdGhlICJzdHJpcGUiCisgKiAgICBbW25vXXN5bmNdCQkJRm9yY2Ugb3IgcHJldmVudCByZWNvdmVyeSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgYXJyYXkKICAqICAgIFtyZWJ1aWxkIDxpZHg+XQkJCVJlYnVpbGQgdGhlIGRyaXZlIGluZGljYXRlZCBieSB0aGUgaW5kZXgKLSAqICAgIFtkYWVtb25fc2xlZXAgPG1zPl0JCVRpbWUgYmV0d2VlbiBiaXRtYXAgZGFlbW9uIHdvcmsgdG8gY2xlYXIgYml0cworICogICAgW2RhZW1vbl9zbGVlcCA8bXM+XQkJVGltZSBiZXR3ZWVuIGJpdG1hcCBkYWVtb24gd29yayB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyIGJpdHMKICAqICAgIFttaW5fcmVjb3ZlcnlfcmF0ZSA8a0Ivc2VjL2Rpc2s+XQlUaHJvdHRsZSBSQUlEIGluaXRpYWxpemF0aW9uCiAgKiAgICBbbWF4X3JlY292ZXJ5X3JhdGUgPGtCL3NlYy9kaXNrPl0JVGhyb3R0bGUgUkFJRCBpbml0aWFsaXphdGlvbgorICogICAgW3dyaXRlX21vc3RseSA8aWR4Pl0JCUluZGljYXRlIGEgd3JpdGUgbW9zdGx5IGRyaXZlIHZpYSBpbmRleAogICogICAgW21heF93cml0ZV9iZWhpbmQgPHNlY3RvcnM+XQlTZWUgJy13cml0ZS1iZWhpbmQ9JyAobWFuIG1kYWRtKQogICogICAgW3N0cmlwZV9jYWNoZSA8c2VjdG9ycz5dCQlTdHJpcGUgY2FjaGUgc2l6ZSBmb3IgaGlnaGVyIFJBSURzCisgKiAgICBbcmVnaW9uX3NpemUgPHNlY3RvcnM+XSAgICAgICAgICAgRGVmaW5lcyBncmFudWxhcml0eSBvZiBiaXRtYXAKICAqLwogc3RhdGljIGludCBwYXJzZV9yYWlkX3BhcmFtcyhzdHJ1Y3QgcmFpZF9zZXQgKnJzLCBjaGFyICoqYXJndiwKIAkJCSAgICAgdW5zaWduZWQgbnVtX3JhaWRfcGFyYW1zKQogewogCXVuc2lnbmVkIGksIHJlYnVpbGRfY250ID0gMDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgdmFsdWUsIHJlZ2lvbl9zaXplID0gMDsKIAljaGFyICprZXk7CiAKIAkvKgogCSAqIEZpcnN0LCBwYXJzZSB0aGUgaW4tb3JkZXIgcmVxdWlyZWQgYXJndW1lbnRzCisJICogImNodW5rX3NpemUiIGlzIHRoZSBvbmx5IGFyZ3VtZW50IG9mIHRoaXMgdHlwZS4KIAkgKi8KLQlpZiAoKHN0cmljdF9zdHJ0b3VsKGFyZ3ZbMF0sIDEwLCAmdmFsdWUpIDwgMCkgfHwKLQkgICAgIWlzX3Bvd2VyX29mXzIodmFsdWUpIHx8ICh2YWx1ZSA8IDgpKSB7CisJaWYgKChzdHJpY3Rfc3RydG91bChhcmd2WzBdLCAxMCwgJnZhbHVlKSA8IDApKSB7CiAJCXJzLT50aS0+ZXJyb3IgPSAiQmFkIGNodW5rIHNpemUiOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHJzLT5yYWlkX3R5cGUtPmxldmVsID09IDEpIHsKKwkJaWYgKHZhbHVlKQorCQkJRE1FUlIoIklnbm9yaW5nIGNodW5rIHNpemUgcGFyYW1ldGVyIGZvciBSQUlEIDEiKTsKKwkJdmFsdWUgPSAwOworCX0gZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIodmFsdWUpKSB7CisJCXJzLT50aS0+ZXJyb3IgPSAiQ2h1bmsgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgMiI7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAodmFsdWUgPCA4KSB7CisJCXJzLT50aS0+ZXJyb3IgPSAiQ2h1bmsgc2l6ZSB2YWx1ZSBpcyB0b28gc21hbGwiOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlycy0+bWQubmV3X2NodW5rX3NlY3RvcnMgPSBycy0+bWQuY2h1bmtfc2VjdG9ycyA9IHZhbHVlOwpAQCAtMjY5LDIyICszODAsMzkgQEAKIAludW1fcmFpZF9wYXJhbXMtLTsKIAogCS8qCisJICogV2Ugc2V0IGVhY2ggaW5kaXZpZHVhbCBkZXZpY2UgYXMgSW5fc3luYyB3aXRoIGEgY29tcGxldGVkCisJICogJ3JlY292ZXJ5X29mZnNldCcuICBJZiB0aGVyZSBoYXMgYmVlbiBhIGRldmljZSBmYWlsdXJlIG9yCisJICogcmVwbGFjZW1lbnQgdGhlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYXNlcyBhcHBsaWVzOgorCSAqCisJICogICAxKSBVc2VyIHNwZWNpZmllcyAncmVidWlsZCcuCisJICogICAgICAtIERldmljZSBpcyByZXNldCB3aGVuIHBhcmFtIGlzIHJlYWQuCisJICogICAyKSBBIG5ldyBkZXZpY2UgaXMgc3VwcGxpZWQuCisJICogICAgICAtIE5vIG1hdGNoaW5nIHN1cGVyYmxvY2sgZm91bmQsIHJlc2V0cyBkZXZpY2UuCisJICogICAzKSBEZXZpY2UgZmFpbHVyZSB3YXMgdHJhbnNpZW50IGFuZCByZXR1cm5zIG9uIHJlbG9hZC4KKwkgKiAgICAgIC0gRmFpbHVyZSBub3RpY2VkLCByZXNldHMgZGV2aWNlIGZvciBiaXRtYXAgcmVwbGF5LgorCSAqICAgNCkgRGV2aWNlIGhhZG4ndCBjb21wbGV0ZWQgcmVjb3ZlcnkgYWZ0ZXIgcHJldmlvdXMgZmFpbHVyZS4KKwkgKiAgICAgIC0gU3VwZXJibG9jayBpcyByZWFkIGFuZCBvdmVycmlkZXMgcmVjb3Zlcnlfb2Zmc2V0LgorCSAqCisJICogV2hhdCBpcyBmb3VuZCBpbiB0aGUgc3VwZXJibG9ja3Mgb2YgdGhlIGRldmljZXMgaXMgYWx3YXlzCisJICogYXV0aG9yaXRhdGl2ZSwgdW5sZXNzICdyZWJ1aWxkJyBvciAnW25vXXN5bmMnIHdhcyBzcGVjaWZpZWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHJzLT5tZC5yYWlkX2Rpc2tzOyBpKyspIHsKKwkJc2V0X2JpdChJbl9zeW5jLCAmcnMtPmRldltpXS5yZGV2LmZsYWdzKTsKKwkJcnMtPmRldltpXS5yZGV2LnJlY292ZXJ5X29mZnNldCA9IE1heFNlY3RvcjsKKwl9CisKKwkvKgogCSAqIFNlY29uZCwgcGFyc2UgdGhlIHVub3JkZXJlZCBvcHRpb25hbCBhcmd1bWVudHMKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcnMtPm1kLnJhaWRfZGlza3M7IGkrKykKLQkJc2V0X2JpdChJbl9zeW5jLCAmcnMtPmRldltpXS5yZGV2LmZsYWdzKTsKLQogCWZvciAoaSA9IDA7IGkgPCBudW1fcmFpZF9wYXJhbXM7IGkrKykgewotCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAibm9zeW5jIikpIHsKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJub3N5bmMiKSkgewogCQkJcnMtPm1kLnJlY292ZXJ5X2NwID0gTWF4U2VjdG9yOwogCQkJcnMtPnByaW50X2ZsYWdzIHw9IERNUEZfTk9TWU5DOwotCQkJcnMtPm1kLmZsYWdzIHw9IE1EX1NZTkNfU1RBVEVfRk9SQ0VEOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFzdHJjbXAoYXJndltpXSwgInN5bmMiKSkgeworCQlpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgInN5bmMiKSkgewogCQkJcnMtPm1kLnJlY292ZXJ5X2NwID0gMDsKIAkJCXJzLT5wcmludF9mbGFncyB8PSBETVBGX1NZTkM7Ci0JCQlycy0+bWQuZmxhZ3MgfD0gTURfU1lOQ19TVEFURV9GT1JDRUQ7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMDAsOSArNDI4LDEzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmICghc3RyY21wKGtleSwgInJlYnVpbGQiKSkgewotCQkJaWYgKCsrcmVidWlsZF9jbnQgPiBycy0+cmFpZF90eXBlLT5wYXJpdHlfZGV2cykgewotCQkJCXJzLT50aS0+ZXJyb3IgPSAiVG9vIG1hbnkgcmVidWlsZCBkcml2ZXMgZ2l2ZW4iOworCQlpZiAoIXN0cmNhc2VjbXAoa2V5LCAicmVidWlsZCIpKSB7CisJCQlyZWJ1aWxkX2NudCsrOworCQkJaWYgKCgocnMtPnJhaWRfdHlwZS0+bGV2ZWwgIT0gMSkgJiYKKwkJCSAgICAgKHJlYnVpbGRfY250ID4gcnMtPnJhaWRfdHlwZS0+cGFyaXR5X2RldnMpKSB8fAorCQkJICAgICgocnMtPnJhaWRfdHlwZS0+bGV2ZWwgPT0gMSkgJiYKKwkJCSAgICAgKHJlYnVpbGRfY250ID4gKHJzLT5tZC5yYWlkX2Rpc2tzIC0gMSkpKSkgeworCQkJCXJzLT50aS0+ZXJyb3IgPSAiVG9vIG1hbnkgcmVidWlsZCBkZXZpY2VzIHNwZWNpZmllZCBmb3IgZ2l2ZW4gUkFJRCB0eXBlIjsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICh2YWx1ZSA+IHJzLT5tZC5yYWlkX2Rpc2tzKSB7CkBAIC0zMTEsNyArNDQzLDIyIEBACiAJCQl9CiAJCQljbGVhcl9iaXQoSW5fc3luYywgJnJzLT5kZXZbdmFsdWVdLnJkZXYuZmxhZ3MpOwogCQkJcnMtPmRldlt2YWx1ZV0ucmRldi5yZWNvdmVyeV9vZmZzZXQgPSAwOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAibWF4X3dyaXRlX2JlaGluZCIpKSB7CisJCQlycy0+cHJpbnRfZmxhZ3MgfD0gRE1QRl9SRUJVSUxEOworCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGtleSwgIndyaXRlX21vc3RseSIpKSB7CisJCQlpZiAocnMtPnJhaWRfdHlwZS0+bGV2ZWwgIT0gMSkgeworCQkJCXJzLT50aS0+ZXJyb3IgPSAid3JpdGVfbW9zdGx5IG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBSQUlEMSI7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAodmFsdWUgPiBycy0+bWQucmFpZF9kaXNrcykgeworCQkJCXJzLT50aS0+ZXJyb3IgPSAiSW52YWxpZCB3cml0ZV9tb3N0bHkgZHJpdmUgaW5kZXggZ2l2ZW4iOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJzLT5kZXZbdmFsdWVdLnJkZXYuZmxhZ3MpOworCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGtleSwgIm1heF93cml0ZV9iZWhpbmQiKSkgeworCQkJaWYgKHJzLT5yYWlkX3R5cGUtPmxldmVsICE9IDEpIHsKKwkJCQlycy0+dGktPmVycm9yID0gIm1heF93cml0ZV9iZWhpbmQgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIFJBSUQxIjsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCXJzLT5wcmludF9mbGFncyB8PSBETVBGX01BWF9XUklURV9CRUhJTkQ7CiAKIAkJCS8qCkBAIC0zMjQsMTQgKzQ3MSwxNCBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJcnMtPm1kLmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQgPSB2YWx1ZTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImRhZW1vbl9zbGVlcCIpKSB7CisJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoa2V5LCAiZGFlbW9uX3NsZWVwIikpIHsKIAkJCXJzLT5wcmludF9mbGFncyB8PSBETVBGX0RBRU1PTl9TTEVFUDsKIAkJCWlmICghdmFsdWUgfHwgKHZhbHVlID4gTUFYX1NDSEVEVUxFX1RJTUVPVVQpKSB7CiAJCQkJcnMtPnRpLT5lcnJvciA9ICJkYWVtb24gc2xlZXAgcGVyaW9kIG91dCBvZiByYW5nZSI7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlycy0+bWQuYml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gdmFsdWU7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJzdHJpcGVfY2FjaGUiKSkgeworCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGtleSwgInN0cmlwZV9jYWNoZSIpKSB7CiAJCQlycy0+cHJpbnRfZmxhZ3MgfD0gRE1QRl9TVFJJUEVfQ0FDSEU7CiAKIAkJCS8qCkBAIC0zNDgsMjAgKzQ5NSwyMyBAQAogCQkJCXJzLT50aS0+ZXJyb3IgPSAiQmFkIHN0cmlwZV9jYWNoZSBzaXplIjsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgIm1pbl9yZWNvdmVyeV9yYXRlIikpIHsKKwkJfSBlbHNlIGlmICghc3RyY2FzZWNtcChrZXksICJtaW5fcmVjb3ZlcnlfcmF0ZSIpKSB7CiAJCQlycy0+cHJpbnRfZmxhZ3MgfD0gRE1QRl9NSU5fUkVDT1ZFUllfUkFURTsKIAkJCWlmICh2YWx1ZSA+IElOVF9NQVgpIHsKIAkJCQlycy0+dGktPmVycm9yID0gIm1pbl9yZWNvdmVyeV9yYXRlIG91dCBvZiByYW5nZSI7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlycy0+bWQuc3luY19zcGVlZF9taW4gPSAoaW50KXZhbHVlOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAibWF4X3JlY292ZXJ5X3JhdGUiKSkgeworCQl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGtleSwgIm1heF9yZWNvdmVyeV9yYXRlIikpIHsKIAkJCXJzLT5wcmludF9mbGFncyB8PSBETVBGX01BWF9SRUNPVkVSWV9SQVRFOwogCQkJaWYgKHZhbHVlID4gSU5UX01BWCkgewogCQkJCXJzLT50aS0+ZXJyb3IgPSAibWF4X3JlY292ZXJ5X3JhdGUgb3V0IG9mIHJhbmdlIjsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCXJzLT5tZC5zeW5jX3NwZWVkX21heCA9IChpbnQpdmFsdWU7CisJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAoa2V5LCAicmVnaW9uX3NpemUiKSkgeworCQkJcnMtPnByaW50X2ZsYWdzIHw9IERNUEZfUkVHSU9OX1NJWkU7CisJCQlyZWdpb25fc2l6ZSA9IHZhbHVlOwogCQl9IGVsc2UgewogCQkJRE1FUlIoIlVuYWJsZSB0byBwYXJzZSBSQUlEIHBhcmFtZXRlcjogJXMiLCBrZXkpOwogCQkJcnMtPnRpLT5lcnJvciA9ICJVbmFibGUgdG8gcGFyc2UgUkFJRCBwYXJhbWV0ZXJzIjsKQEAgLTM2OSw2ICs1MTksMTkgQEAKIAkJfQogCX0KIAorCWlmICh2YWxpZGF0ZV9yZWdpb25fc2l6ZShycywgcmVnaW9uX3NpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChycy0+bWQuY2h1bmtfc2VjdG9ycykKKwkJcnMtPnRpLT5zcGxpdF9pbyA9IHJzLT5tZC5jaHVua19zZWN0b3JzOworCWVsc2UKKwkJcnMtPnRpLT5zcGxpdF9pbyA9IHJlZ2lvbl9zaXplOworCisJaWYgKHJzLT5tZC5jaHVua19zZWN0b3JzKQorCQlycy0+dGktPnNwbGl0X2lvID0gcnMtPm1kLmNodW5rX3NlY3RvcnM7CisJZWxzZQorCQlycy0+dGktPnNwbGl0X2lvID0gcmVnaW9uX3NpemU7CisKIAkvKiBBc3N1bWUgdGhlcmUgYXJlIG5vIG1ldGFkYXRhIGRldmljZXMgdW50aWwgdGhlIGRyaXZlcyBhcmUgcGFyc2VkICovCiAJcnMtPm1kLnBlcnNpc3RlbnQgPSAwOwogCXJzLT5tZC5leHRlcm5hbCA9IDE7CkBAIC0zODcsMTcgKzU1MCwzNTEgQEAKIHsKIAlzdHJ1Y3QgcmFpZF9zZXQgKnJzID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgcmFpZF9zZXQsIGNhbGxiYWNrcyk7CiAKKwlpZiAocnMtPnJhaWRfdHlwZS0+bGV2ZWwgPT0gMSkKKwkJcmV0dXJuIG1kX3JhaWQxX2Nvbmdlc3RlZCgmcnMtPm1kLCBiaXRzKTsKKwogCXJldHVybiBtZF9yYWlkNV9jb25nZXN0ZWQoJnJzLT5tZCwgYml0cyk7CiB9CiAKIC8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBuZXZlciByb3V0aW5lbHkgdXNlZCBieSB1c2Vyc3BhY2UsIHVubGlrZSBtZCBzdXBlcmJsb2Nrcy4KKyAqIERldmljZXMgd2l0aCB0aGlzIHN1cGVyYmxvY2sgc2hvdWxkIG9ubHkgZXZlciBiZSBhY2Nlc3NlZCB2aWEgZGV2aWNlLW1hcHBlci4KKyAqLworI2RlZmluZSBETV9SQUlEX01BR0lDIDB4NjQ1MjZENDQKK3N0cnVjdCBkbV9yYWlkX3N1cGVyYmxvY2sgeworCV9fbGUzMiBtYWdpYzsJCS8qICJEbVJkIiAqLworCV9fbGUzMiBmZWF0dXJlczsJLyogVXNlZCB0byBpbmRpY2F0ZSBwb3NzaWJsZSBmdXR1cmUgY2hhbmdlcyAqLworCisJX19sZTMyIG51bV9kZXZpY2VzOwkvKiBOdW1iZXIgb2YgZGV2aWNlcyBpbiB0aGlzIGFycmF5LiAoTWF4IDY0KSAqLworCV9fbGUzMiBhcnJheV9wb3NpdGlvbjsJLyogVGhlIHBvc2l0aW9uIG9mIHRoaXMgZHJpdmUgaW4gdGhlIGFycmF5ICovCisKKwlfX2xlNjQgZXZlbnRzOwkJLyogSW5jcmVtZW50ZWQgYnkgbWQgd2hlbiBzdXBlcmJsb2NrIHVwZGF0ZWQgKi8KKwlfX2xlNjQgZmFpbGVkX2RldmljZXM7CS8qIEJpdCBmaWVsZCBvZiBkZXZpY2VzIHRvIGluZGljYXRlIGZhaWx1cmVzICovCisKKwkvKgorCSAqIFRoaXMgb2Zmc2V0IHRyYWNrcyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHJlcGFpciBvciByZXBsYWNlbWVudCBvZgorCSAqIGFuIGluZGl2aWR1YWwgZHJpdmUuCisJICovCisJX19sZTY0IGRpc2tfcmVjb3Zlcnlfb2Zmc2V0OworCisJLyoKKwkgKiBUaGlzIG9mZnNldCB0cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZSBpbml0aWFsIGFycmF5CisJICogc3luY2hyb25pc2F0aW9uL3Bhcml0eSBjYWxjdWxhdGlvbi4KKwkgKi8KKwlfX2xlNjQgYXJyYXlfcmVzeW5jX29mZnNldDsKKworCS8qCisJICogUkFJRCBjaGFyYWN0ZXJpc3RpY3MKKwkgKi8KKwlfX2xlMzIgbGV2ZWw7CisJX19sZTMyIGxheW91dDsKKwlfX2xlMzIgc3RyaXBlX3NlY3RvcnM7CisKKwlfX3U4IHBhZFs0NTJdOwkJLyogUm91bmQgc3RydWN0IHRvIDUxMiBieXRlcy4gKi8KKwkJCQkvKiBBbHdheXMgc2V0IHRvIDAgd2hlbiB3cml0aW5nLiAqLworfSBfX3BhY2tlZDsKKworc3RhdGljIGludCByZWFkX2Rpc2tfc2IobWRrX3JkZXZfdCAqcmRldiwgaW50IHNpemUpCit7CisJQlVHX09OKCFyZGV2LT5zYl9wYWdlKTsKKworCWlmIChyZGV2LT5zYl9sb2FkZWQpCisJCXJldHVybiAwOworCisJaWYgKCFzeW5jX3BhZ2VfaW8ocmRldiwgMCwgc2l6ZSwgcmRldi0+c2JfcGFnZSwgUkVBRCwgMSkpIHsKKwkJRE1FUlIoIkZhaWxlZCB0byByZWFkIGRldmljZSBzdXBlcmJsb2NrIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJkZXYtPnNiX2xvYWRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3VwZXJfc3luYyhtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikKK3sKKwltZGtfcmRldl90ICpyLCAqdDsKKwl1aW50NjRfdCBmYWlsZWRfZGV2aWNlczsKKwlzdHJ1Y3QgZG1fcmFpZF9zdXBlcmJsb2NrICpzYjsKKworCXNiID0gcGFnZV9hZGRyZXNzKHJkZXYtPnNiX3BhZ2UpOworCWZhaWxlZF9kZXZpY2VzID0gbGU2NF90b19jcHUoc2ItPmZhaWxlZF9kZXZpY2VzKTsKKworCXJkZXZfZm9yX2VhY2gociwgdCwgbWRkZXYpCisJCWlmICgoci0+cmFpZF9kaXNrID49IDApICYmIHRlc3RfYml0KEZhdWx0eSwgJnItPmZsYWdzKSkKKwkJCWZhaWxlZF9kZXZpY2VzIHw9ICgxVUxMIDw8IHItPnJhaWRfZGlzayk7CisKKwltZW1zZXQoc2IsIDAsIHNpemVvZigqc2IpKTsKKworCXNiLT5tYWdpYyA9IGNwdV90b19sZTMyKERNX1JBSURfTUFHSUMpOworCXNiLT5mZWF0dXJlcyA9IGNwdV90b19sZTMyKDApOwkvKiBObyBmZWF0dXJlcyB5ZXQgKi8KKworCXNiLT5udW1fZGV2aWNlcyA9IGNwdV90b19sZTMyKG1kZGV2LT5yYWlkX2Rpc2tzKTsKKwlzYi0+YXJyYXlfcG9zaXRpb24gPSBjcHVfdG9fbGUzMihyZGV2LT5yYWlkX2Rpc2spOworCisJc2ItPmV2ZW50cyA9IGNwdV90b19sZTY0KG1kZGV2LT5ldmVudHMpOworCXNiLT5mYWlsZWRfZGV2aWNlcyA9IGNwdV90b19sZTY0KGZhaWxlZF9kZXZpY2VzKTsKKworCXNiLT5kaXNrX3JlY292ZXJ5X29mZnNldCA9IGNwdV90b19sZTY0KHJkZXYtPnJlY292ZXJ5X29mZnNldCk7CisJc2ItPmFycmF5X3Jlc3luY19vZmZzZXQgPSBjcHVfdG9fbGU2NChtZGRldi0+cmVjb3ZlcnlfY3ApOworCisJc2ItPmxldmVsID0gY3B1X3RvX2xlMzIobWRkZXYtPmxldmVsKTsKKwlzYi0+bGF5b3V0ID0gY3B1X3RvX2xlMzIobWRkZXYtPmxheW91dCk7CisJc2ItPnN0cmlwZV9zZWN0b3JzID0gY3B1X3RvX2xlMzIobWRkZXYtPmNodW5rX3NlY3RvcnMpOworfQorCisvKgorICogc3VwZXJfbG9hZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHN1cGVyYmxvY2sgaWYgb25lIGlzIG5vdCBmb3VuZCBvbiB0aGUgZGV2aWNlCisgKiBhbmQgd2lsbCBkZWNpZGUgd2hpY2ggc3VwZXJibG9jayB0byB1c2UgaWYgdGhlcmUncyBhIGNob2ljZS4KKyAqCisgKiBSZXR1cm46IDEgaWYgdXNlIHJkZXYsIDAgaWYgdXNlIHJlZmRldiwgLUV4eHggb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgc3VwZXJfbG9hZChtZGtfcmRldl90ICpyZGV2LCBtZGtfcmRldl90ICpyZWZkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZG1fcmFpZF9zdXBlcmJsb2NrICpzYjsKKwlzdHJ1Y3QgZG1fcmFpZF9zdXBlcmJsb2NrICpyZWZzYjsKKwl1aW50NjRfdCBldmVudHNfc2IsIGV2ZW50c19yZWZzYjsKKworCXJkZXYtPnNiX3N0YXJ0ID0gMDsKKwlyZGV2LT5zYl9zaXplID0gc2l6ZW9mKCpzYik7CisKKwlyZXQgPSByZWFkX2Rpc2tfc2IocmRldiwgcmRldi0+c2Jfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNiID0gcGFnZV9hZGRyZXNzKHJkZXYtPnNiX3BhZ2UpOworCWlmIChzYi0+bWFnaWMgIT0gY3B1X3RvX2xlMzIoRE1fUkFJRF9NQUdJQykpIHsKKwkJc3VwZXJfc3luYyhyZGV2LT5tZGRldiwgcmRldik7CisKKwkJc2V0X2JpdChGaXJzdFVzZSwgJnJkZXYtPmZsYWdzKTsKKworCQkvKiBGb3JjZSB3cml0aW5nIG9mIHN1cGVyYmxvY2tzIHRvIGRpc2sgKi8KKwkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJnJkZXYtPm1kZGV2LT5mbGFncyk7CisKKwkJLyogQW55IHN1cGVyYmxvY2sgaXMgYmV0dGVyIHRoYW4gbm9uZSwgY2hvb3NlIHRoYXQgaWYgZ2l2ZW4gKi8KKwkJcmV0dXJuIHJlZmRldiA/IDAgOiAxOworCX0KKworCWlmICghcmVmZGV2KQorCQlyZXR1cm4gMTsKKworCWV2ZW50c19zYiA9IGxlNjRfdG9fY3B1KHNiLT5ldmVudHMpOworCisJcmVmc2IgPSBwYWdlX2FkZHJlc3MocmVmZGV2LT5zYl9wYWdlKTsKKwlldmVudHNfcmVmc2IgPSBsZTY0X3RvX2NwdShyZWZzYi0+ZXZlbnRzKTsKKworCXJldHVybiAoZXZlbnRzX3NiID4gZXZlbnRzX3JlZnNiKSA/IDEgOiAwOworfQorCitzdGF0aWMgaW50IHN1cGVyX2luaXRfdmFsaWRhdGlvbihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikKK3sKKwlpbnQgcm9sZTsKKwlzdHJ1Y3QgcmFpZF9zZXQgKnJzID0gY29udGFpbmVyX29mKG1kZGV2LCBzdHJ1Y3QgcmFpZF9zZXQsIG1kKTsKKwl1aW50NjRfdCBldmVudHNfc2I7CisJdWludDY0X3QgZmFpbGVkX2RldmljZXM7CisJc3RydWN0IGRtX3JhaWRfc3VwZXJibG9jayAqc2I7CisJdWludDMyX3QgbmV3X2RldnMgPSAwOworCXVpbnQzMl90IHJlYnVpbGRzID0gMDsKKwltZGtfcmRldl90ICpyLCAqdDsKKwlzdHJ1Y3QgZG1fcmFpZF9zdXBlcmJsb2NrICpzYjI7CisKKwlzYiA9IHBhZ2VfYWRkcmVzcyhyZGV2LT5zYl9wYWdlKTsKKwlldmVudHNfc2IgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzKTsKKwlmYWlsZWRfZGV2aWNlcyA9IGxlNjRfdG9fY3B1KHNiLT5mYWlsZWRfZGV2aWNlcyk7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdG8gMSBpZiB0aGlzIGlzIGEgbmV3IHN1cGVyYmxvY2suCisJICovCisJbWRkZXYtPmV2ZW50cyA9IGV2ZW50c19zYiA/IDogMTsKKworCS8qCisJICogUmVzaGFwaW5nIGlzIG5vdCBjdXJyZW50bHkgYWxsb3dlZAorCSAqLworCWlmICgobGUzMl90b19jcHUoc2ItPmxldmVsKSAhPSBtZGRldi0+bGV2ZWwpIHx8CisJICAgIChsZTMyX3RvX2NwdShzYi0+bGF5b3V0KSAhPSBtZGRldi0+bGF5b3V0KSB8fAorCSAgICAobGUzMl90b19jcHUoc2ItPnN0cmlwZV9zZWN0b3JzKSAhPSBtZGRldi0+Y2h1bmtfc2VjdG9ycykpIHsKKwkJRE1FUlIoIlJlc2hhcGluZyBhcnJheXMgbm90IHlldCBzdXBwb3J0ZWQuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGNhbiBvbmx5IGNoYW5nZSB0aGUgbnVtYmVyIG9mIGRldmljZXMgaW4gUkFJRDEgcmlnaHQgbm93ICovCisJaWYgKChycy0+cmFpZF90eXBlLT5sZXZlbCAhPSAxKSAmJgorCSAgICAobGUzMl90b19jcHUoc2ItPm51bV9kZXZpY2VzKSAhPSBtZGRldi0+cmFpZF9kaXNrcykpIHsKKwkJRE1FUlIoIlJlc2hhcGluZyBhcnJheXMgbm90IHlldCBzdXBwb3J0ZWQuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKHJzLT5wcmludF9mbGFncyAmIChETVBGX1NZTkMgfCBETVBGX05PU1lOQykpKQorCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBsZTY0X3RvX2NwdShzYi0+YXJyYXlfcmVzeW5jX29mZnNldCk7CisKKwkvKgorCSAqIER1cmluZyBsb2FkLCB3ZSBzZXQgRmlyc3RVc2UgaWYgYSBuZXcgc3VwZXJibG9jayB3YXMgd3JpdHRlbi4KKwkgKiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgd2UgbWlnaHQgbm90IGhhdmUgYSBzdXBlcmJsb2NrOgorCSAqIDEpIFRoZSBhcnJheSBpcyBicmFuZCBuZXcgLSBpbiB3aGljaCBjYXNlLCBhbGwgb2YgdGhlCisJICogICAgZGV2aWNlcyBtdXN0IGhhdmUgdGhlaXIgSW5fc3luYyBiaXQgc2V0LiAgQWxzbywKKwkgKiAgICByZWNvdmVyeV9jcCBtdXN0IGJlIDAsIHVubGVzcyBmb3JjZWQuCisJICogMikgVGhpcyBpcyBhIG5ldyBkZXZpY2UgYmVpbmcgYWRkZWQgdG8gYW4gb2xkIGFycmF5CisJICogICAgYW5kIHRoZSBuZXcgZGV2aWNlIG5lZWRzIHRvIGJlIHJlYnVpbHQgLSBpbiB3aGljaAorCSAqICAgIGNhc2UgdGhlIEluX3N5bmMgYml0IHdpbGwgL25vdC8gYmUgc2V0IGFuZAorCSAqICAgIHJlY292ZXJ5X2NwIG11c3QgYmUgTWF4U2VjdG9yLgorCSAqLworCXJkZXZfZm9yX2VhY2gociwgdCwgbWRkZXYpIHsKKwkJaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmci0+ZmxhZ3MpKSB7CisJCQlpZiAoIXRlc3RfYml0KEZpcnN0VXNlLCAmci0+ZmxhZ3MpKQorCQkJCURNRVJSKCJTdXBlcmJsb2NrIGFyZWEgb2YgIgorCQkJCSAgICAgICJyZWJ1aWxkIGRldmljZSAlZCBzaG91bGQgaGF2ZSBiZWVuICIKKwkJCQkgICAgICAiY2xlYXJlZC4iLCByLT5yYWlkX2Rpc2spOworCQkJc2V0X2JpdChGaXJzdFVzZSwgJnItPmZsYWdzKTsKKwkJCXJlYnVpbGRzKys7CisJCX0gZWxzZSBpZiAodGVzdF9iaXQoRmlyc3RVc2UsICZyLT5mbGFncykpCisJCQluZXdfZGV2cysrOworCX0KKworCWlmICghcmVidWlsZHMpIHsKKwkJaWYgKG5ld19kZXZzID09IG1kZGV2LT5yYWlkX2Rpc2tzKSB7CisJCQlETUlORk8oIlN1cGVyYmxvY2tzIGNyZWF0ZWQgZm9yIG5ldyBhcnJheSIpOworCQkJc2V0X2JpdChNRF9BUlJBWV9GSVJTVF9VU0UsICZtZGRldi0+ZmxhZ3MpOworCQl9IGVsc2UgaWYgKG5ld19kZXZzKSB7CisJCQlETUVSUigiTmV3IGRldmljZSBpbmplY3RlZCAiCisJCQkgICAgICAiaW50byBleGlzdGluZyBhcnJheSB3aXRob3V0ICdyZWJ1aWxkJyAiCisJCQkgICAgICAicGFyYW1ldGVyIHNwZWNpZmllZCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKG5ld19kZXZzKSB7CisJCURNRVJSKCIncmVidWlsZCcgZGV2aWNlcyBjYW5ub3QgYmUgIgorCQkgICAgICAiaW5qZWN0ZWQgaW50byBhbiBhcnJheSB3aXRoIG90aGVyIGZpcnN0LXRpbWUgZGV2aWNlcyIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpIHsKKwkJRE1FUlIoIidyZWJ1aWxkJyBzcGVjaWZpZWQgd2hpbGUgYXJyYXkgaXMgbm90IGluLXN5bmMiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBOb3cgd2Ugc2V0IHRoZSBGYXVsdHkgYml0IGZvciB0aG9zZSBkZXZpY2VzIHRoYXQgYXJlCisJICogcmVjb3JkZWQgaW4gdGhlIHN1cGVyYmxvY2sgYXMgZmFpbGVkLgorCSAqLworCXJkZXZfZm9yX2VhY2gociwgdCwgbWRkZXYpIHsKKwkJaWYgKCFyLT5zYl9wYWdlKQorCQkJY29udGludWU7CisJCXNiMiA9IHBhZ2VfYWRkcmVzcyhyLT5zYl9wYWdlKTsKKwkJc2IyLT5mYWlsZWRfZGV2aWNlcyA9IDA7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIGFueSBkZXZpY2UgcmUtb3JkZXJpbmcuCisJCSAqLworCQlpZiAoIXRlc3RfYml0KEZpcnN0VXNlLCAmci0+ZmxhZ3MpICYmIChyLT5yYWlkX2Rpc2sgPj0gMCkpIHsKKwkJCXJvbGUgPSBsZTMyX3RvX2NwdShzYjItPmFycmF5X3Bvc2l0aW9uKTsKKwkJCWlmIChyb2xlICE9IHItPnJhaWRfZGlzaykgeworCQkJCWlmIChycy0+cmFpZF90eXBlLT5sZXZlbCAhPSAxKSB7CisJCQkJCXJzLT50aS0+ZXJyb3IgPSAiQ2Fubm90IGNoYW5nZSBkZXZpY2UgIgorCQkJCQkJInBvc2l0aW9ucyBpbiBSQUlEIGFycmF5IjsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCURNSU5GTygiUkFJRDEgZGV2aWNlICMlZCBub3cgYXQgcG9zaXRpb24gIyVkIiwKKwkJCQkgICAgICAgcm9sZSwgci0+cmFpZF9kaXNrKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFBhcnRpYWwgcmVjb3ZlcnkgaXMgcGVyZm9ybWVkIG9uCisJCQkgKiByZXR1cm5pbmcgZmFpbGVkIGRldmljZXMuCisJCQkgKi8KKwkJCWlmIChmYWlsZWRfZGV2aWNlcyAmICgxIDw8IHJvbGUpKQorCQkJCXNldF9iaXQoRmF1bHR5LCAmci0+ZmxhZ3MpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VwZXJfdmFsaWRhdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpCit7CisJc3RydWN0IGRtX3JhaWRfc3VwZXJibG9jayAqc2IgPSBwYWdlX2FkZHJlc3MocmRldi0+c2JfcGFnZSk7CisKKwkvKgorCSAqIElmIG1kZGV2LT5ldmVudHMgaXMgbm90IHNldCwgd2Uga25vdyB3ZSBoYXZlIG5vdCB5ZXQgaW5pdGlhbGl6ZWQKKwkgKiB0aGUgYXJyYXkuCisJICovCisJaWYgKCFtZGRldi0+ZXZlbnRzICYmIHN1cGVyX2luaXRfdmFsaWRhdGlvbihtZGRldiwgcmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDQwOTYgPj4gOTsgLyogRW5hYmxlIGJpdG1hcCBjcmVhdGlvbiAqLworCXJkZXYtPm1kZGV2LT5iaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9IDQwOTYgPj4gOTsKKwlpZiAoIXRlc3RfYml0KEZpcnN0VXNlLCAmcmRldi0+ZmxhZ3MpKSB7CisJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IGxlNjRfdG9fY3B1KHNiLT5kaXNrX3JlY292ZXJ5X29mZnNldCk7CisJCWlmIChyZGV2LT5yZWNvdmVyeV9vZmZzZXQgIT0gTWF4U2VjdG9yKQorCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJfQorCisJLyoKKwkgKiBJZiBhIGRldmljZSBjb21lcyBiYWNrLCBzZXQgaXQgYXMgbm90IEluX3N5bmMgYW5kIG5vIGxvbmdlciBmYXVsdHkuCisJICovCisJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQljbGVhcl9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOworCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJcmRldi0+c2F2ZWRfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOworCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOworCX0KKworCWNsZWFyX2JpdChGaXJzdFVzZSwgJnJkZXYtPmZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQW5hbHlzZSBzdXBlcmJsb2NrcyBhbmQgc2VsZWN0IHRoZSBmcmVzaGVzdC4KKyAqLworc3RhdGljIGludCBhbmFseXNlX3N1cGVyYmxvY2tzKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgcmFpZF9zZXQgKnJzKQoreworCWludCByZXQ7CisJbWRrX3JkZXZfdCAqcmRldiwgKmZyZXNoZXN0LCAqdG1wOworCW1kZGV2X3QgKm1kZGV2ID0gJnJzLT5tZDsKKworCWZyZXNoZXN0ID0gTlVMTDsKKwlyZGV2X2Zvcl9lYWNoKHJkZXYsIHRtcCwgbWRkZXYpIHsKKwkJaWYgKCFyZGV2LT5tZXRhX2JkZXYpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBzdXBlcl9sb2FkKHJkZXYsIGZyZXNoZXN0KTsKKworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDE6CisJCQlmcmVzaGVzdCA9IHJkZXY7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0aS0+ZXJyb3IgPSAiRmFpbGVkIHRvIGxvYWQgc3VwZXJibG9jayI7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYgKCFmcmVzaGVzdCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFZhbGlkYXRpb24gb2YgdGhlIGZyZXNoZXN0IGRldmljZSBwcm92aWRlcyB0aGUgc291cmNlIG9mCisJICogdmFsaWRhdGlvbiBmb3IgdGhlIHJlbWFpbmluZyBkZXZpY2VzLgorCSAqLworCXRpLT5lcnJvciA9ICJVbmFibGUgdG8gYXNzZW1ibGUgYXJyYXk6IEludmFsaWQgc3VwZXJibG9ja3MiOworCWlmIChzdXBlcl92YWxpZGF0ZShtZGRldiwgZnJlc2hlc3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikKKwkJaWYgKChyZGV2ICE9IGZyZXNoZXN0KSAmJiBzdXBlcl92YWxpZGF0ZShtZGRldiwgcmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKgogICogQ29uc3RydWN0IGEgUkFJRDQvNS82IG1hcHBpbmc6CiAgKiBBcmdzOgogICoJPHJhaWRfdHlwZT4gPCNyYWlkX3BhcmFtcz4gPHJhaWRfcGFyYW1zPgkJXAogICoJPCNyYWlkX2RldnM+IHsgPG1ldGFfZGV2MT4gPGRldjE+IC4uIDxtZXRhX2Rldk4+IDxkZXZOPiB9CiAgKgotICogKiogbWV0YWRhdGEgZGV2aWNlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQsIHVzZSAnLScgaW5zdGVhZCAqKgotICoKICAqIDxyYWlkX3BhcmFtcz4gdmFyaWVzIGJ5IDxyYWlkX3R5cGU+LiAgU2VlICdwYXJzZV9yYWlkX3BhcmFtcycgZm9yCiAgKiBkZXRhaWxzIG9uIHBvc3NpYmxlIDxyYWlkX3BhcmFtcz4uCiAgKi8KQEAgLTQ2NSw4ICs5NjIsMTIgQEAKIAlpZiAocmV0KQogCQlnb3RvIGJhZDsKIAorCXJzLT5tZC5zeW5jX3N1cGVyID0gc3VwZXJfc3luYzsKKwlyZXQgPSBhbmFseXNlX3N1cGVyYmxvY2tzKHRpLCBycyk7CisJaWYgKHJldCkKKwkJZ290byBiYWQ7CisKIAlJTklUX1dPUksoJnJzLT5tZC5ldmVudF93b3JrLCBkb190YWJsZV9ldmVudCk7Ci0JdGktPnNwbGl0X2lvID0gcnMtPm1kLmNodW5rX3NlY3RvcnM7CiAJdGktPnByaXZhdGUgPSByczsKIAogCW11dGV4X2xvY2soJnJzLT5tZC5yZWNvbmZpZ19tdXRleCk7CkBAIC00ODIsNiArOTgzLDcgQEAKIAlycy0+Y2FsbGJhY2tzLmNvbmdlc3RlZF9mbiA9IHJhaWRfaXNfY29uZ2VzdGVkOwogCWRtX3RhYmxlX2FkZF90YXJnZXRfY2FsbGJhY2tzKHRpLT50YWJsZSwgJnJzLT5jYWxsYmFja3MpOwogCisJbWRkZXZfc3VzcGVuZCgmcnMtPm1kKTsKIAlyZXR1cm4gMDsKIAogYmFkOgpAQCAtNTQ2LDEyICsxMDQ4LDE3IEBACiAJCWJyZWFrOwogCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKIAkJLyogVGhlIHN0cmluZyB5b3Ugd291bGQgdXNlIHRvIGNvbnN0cnVjdCB0aGlzIGFycmF5ICovCi0JCWZvciAoaSA9IDA7IGkgPCBycy0+bWQucmFpZF9kaXNrczsgaSsrKQotCQkJaWYgKHJzLT5kZXZbaV0uZGF0YV9kZXYgJiYKKwkJZm9yIChpID0gMDsgaSA8IHJzLT5tZC5yYWlkX2Rpc2tzOyBpKyspIHsKKwkJCWlmICgocnMtPnByaW50X2ZsYWdzICYgRE1QRl9SRUJVSUxEKSAmJgorCQkJICAgIHJzLT5kZXZbaV0uZGF0YV9kZXYgJiYKIAkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJzLT5kZXZbaV0ucmRldi5mbGFncykpCi0JCQkJcmFpZF9wYXJhbV9jbnQrKzsgLyogZm9yIHJlYnVpbGRzICovCisJCQkJcmFpZF9wYXJhbV9jbnQgKz0gMjsgLyogZm9yIHJlYnVpbGRzICovCisJCQlpZiAocnMtPmRldltpXS5kYXRhX2RldiAmJgorCQkJICAgIHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcnMtPmRldltpXS5yZGV2LmZsYWdzKSkKKwkJCQlyYWlkX3BhcmFtX2NudCArPSAyOworCQl9CiAKLQkJcmFpZF9wYXJhbV9jbnQgKz0gKGh3ZWlnaHQ2NChycy0+cHJpbnRfZmxhZ3MpICogMik7CisJCXJhaWRfcGFyYW1fY250ICs9IChod2VpZ2h0NjQocnMtPnByaW50X2ZsYWdzICYgfkRNUEZfUkVCVUlMRCkgKiAyKTsKIAkJaWYgKHJzLT5wcmludF9mbGFncyAmIChETVBGX1NZTkMgfCBETVBGX05PU1lOQykpCiAJCQlyYWlkX3BhcmFtX2NudC0tOwogCkBAIC01NjUsNyArMTA3Miw4IEBACiAJCQlETUVNSVQoIiBub3N5bmMiKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgcnMtPm1kLnJhaWRfZGlza3M7IGkrKykKLQkJCWlmIChycy0+ZGV2W2ldLmRhdGFfZGV2ICYmCisJCQlpZiAoKHJzLT5wcmludF9mbGFncyAmIERNUEZfUkVCVUlMRCkgJiYKKwkJCSAgICBycy0+ZGV2W2ldLmRhdGFfZGV2ICYmCiAJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZycy0+ZGV2W2ldLnJkZXYuZmxhZ3MpKQogCQkJCURNRU1JVCgiIHJlYnVpbGQgJXUiLCBpKTsKIApAQCAtNTc5LDYgKzEwODcsMTEgQEAKIAkJaWYgKHJzLT5wcmludF9mbGFncyAmIERNUEZfTUFYX1JFQ09WRVJZX1JBVEUpCiAJCQlETUVNSVQoIiBtYXhfcmVjb3ZlcnlfcmF0ZSAlZCIsIHJzLT5tZC5zeW5jX3NwZWVkX21heCk7CiAKKwkJZm9yIChpID0gMDsgaSA8IHJzLT5tZC5yYWlkX2Rpc2tzOyBpKyspCisJCQlpZiAocnMtPmRldltpXS5kYXRhX2RldiAmJgorCQkJICAgIHRlc3RfYml0KFdyaXRlTW9zdGx5LCAmcnMtPmRldltpXS5yZGV2LmZsYWdzKSkKKwkJCQlETUVNSVQoIiB3cml0ZV9tb3N0bHkgJXUiLCBpKTsKKwogCQlpZiAocnMtPnByaW50X2ZsYWdzICYgRE1QRl9NQVhfV1JJVEVfQkVISU5EKQogCQkJRE1FTUlUKCIgbWF4X3dyaXRlX2JlaGluZCAlbHUiLAogCQkJICAgICAgIHJzLT5tZC5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kKTsKQEAgLTU5MSw5ICsxMTA0LDE2IEBACiAJCQkgICAgICAgY29uZiA/IGNvbmYtPm1heF9ucl9zdHJpcGVzICogMiA6IDApOwogCQl9CiAKKwkJaWYgKHJzLT5wcmludF9mbGFncyAmIERNUEZfUkVHSU9OX1NJWkUpCisJCQlETUVNSVQoIiByZWdpb25fc2l6ZSAlbHUiLAorCQkJICAgICAgIHJzLT5tZC5iaXRtYXBfaW5mby5jaHVua3NpemUgPj4gOSk7CisKIAkJRE1FTUlUKCIgJWQiLCBycy0+bWQucmFpZF9kaXNrcyk7CiAJCWZvciAoaSA9IDA7IGkgPCBycy0+bWQucmFpZF9kaXNrczsgaSsrKSB7Ci0JCQlETUVNSVQoIiAtIik7IC8qIG1ldGFkYXRhIGRldmljZSAqLworCQkJaWYgKHJzLT5kZXZbaV0ubWV0YV9kZXYpCisJCQkJRE1FTUlUKCIgJXMiLCBycy0+ZGV2W2ldLm1ldGFfZGV2LT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlETUVNSVQoIiAtIik7CiAKIAkJCWlmIChycy0+ZGV2W2ldLmRhdGFfZGV2KQogCQkJCURNRU1JVCgiICVzIiwgcnMtPmRldltpXS5kYXRhX2Rldi0+bmFtZSk7CkBAIC02NTAsMTIgKzExNzAsMTMgQEAKIHsKIAlzdHJ1Y3QgcmFpZF9zZXQgKnJzID0gdGktPnByaXZhdGU7CiAKKwliaXRtYXBfbG9hZCgmcnMtPm1kKTsKIAltZGRldl9yZXN1bWUoJnJzLT5tZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgcmFpZF90YXJnZXQgPSB7CiAJLm5hbWUgPSAicmFpZCIsCi0JLnZlcnNpb24gPSB7MSwgMCwgMH0sCisJLnZlcnNpb24gPSB7MSwgMSwgMH0sCiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogCS5jdHIgPSByYWlkX2N0ciwKIAkuZHRyID0gcmFpZF9kdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwppbmRleCAxMzVjMmYxLi5kMWYxZDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKQEAgLTU4LDI1ICs1OCwzMCBAQAogI2RlZmluZSBOVU1fU05BUFNIT1RfSERSX0NIVU5LUyAxCiAKIHN0cnVjdCBkaXNrX2hlYWRlciB7Ci0JdWludDMyX3QgbWFnaWM7CisJX19sZTMyIG1hZ2ljOwogCiAJLyoKIAkgKiBJcyB0aGlzIHNuYXBzaG90IHZhbGlkLiAgVGhlcmUgaXMgbm8gd2F5IG9mIHJlY292ZXJpbmcKIAkgKiBhbiBpbnZhbGlkIHNuYXBzaG90LgogCSAqLwotCXVpbnQzMl90IHZhbGlkOworCV9fbGUzMiB2YWxpZDsKIAogCS8qCiAJICogU2ltcGxlLCBpbmNyZW1lbnRpbmcgdmVyc2lvbi4gbm8gYmFja3dhcmQKIAkgKiBjb21wYXRpYmlsaXR5LgogCSAqLwotCXVpbnQzMl90IHZlcnNpb247CisJX19sZTMyIHZlcnNpb247CiAKIAkvKiBJbiBzZWN0b3JzICovCi0JdWludDMyX3QgY2h1bmtfc2l6ZTsKLX07CisJX19sZTMyIGNodW5rX3NpemU7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgZGlza19leGNlcHRpb24geworCV9fbGU2NCBvbGRfY2h1bms7CisJX19sZTY0IG5ld19jaHVuazsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjb3JlX2V4Y2VwdGlvbiB7CiAJdWludDY0X3Qgb2xkX2NodW5rOwogCXVpbnQ2NF90IG5ld19jaHVuazsKIH07CkBAIC0xNjksMTAgKzE3NCw5IEBACiAJaWYgKCFwcy0+YXJlYSkKIAkJZ290byBlcnJfYXJlYTsKIAotCXBzLT56ZXJvX2FyZWEgPSB2bWFsbG9jKGxlbik7CisJcHMtPnplcm9fYXJlYSA9IHZ6YWxsb2MobGVuKTsKIAlpZiAoIXBzLT56ZXJvX2FyZWEpCiAJCWdvdG8gZXJyX3plcm9fYXJlYTsKLQltZW1zZXQocHMtPnplcm9fYXJlYSwgMCwgbGVuKTsKIAogCXBzLT5oZWFkZXJfYXJlYSA9IHZtYWxsb2MobGVuKTsKIAlpZiAoIXBzLT5oZWFkZXJfYXJlYSkKQEAgLTM5NiwzMiArNDAwLDMyIEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZXhjZXB0aW9uKHN0cnVjdCBwc3RvcmUgKnBzLAotCQkJICAgdWludDMyX3QgaW5kZXgsIHN0cnVjdCBkaXNrX2V4Y2VwdGlvbiAqcmVzdWx0KQorCQkJICAgdWludDMyX3QgaW5kZXgsIHN0cnVjdCBjb3JlX2V4Y2VwdGlvbiAqcmVzdWx0KQogewotCXN0cnVjdCBkaXNrX2V4Y2VwdGlvbiAqZSA9IGdldF9leGNlcHRpb24ocHMsIGluZGV4KTsKKwlzdHJ1Y3QgZGlza19leGNlcHRpb24gKmRlID0gZ2V0X2V4Y2VwdGlvbihwcywgaW5kZXgpOwogCiAJLyogY29weSBpdCAqLwotCXJlc3VsdC0+b2xkX2NodW5rID0gbGU2NF90b19jcHUoZS0+b2xkX2NodW5rKTsKLQlyZXN1bHQtPm5ld19jaHVuayA9IGxlNjRfdG9fY3B1KGUtPm5ld19jaHVuayk7CisJcmVzdWx0LT5vbGRfY2h1bmsgPSBsZTY0X3RvX2NwdShkZS0+b2xkX2NodW5rKTsKKwlyZXN1bHQtPm5ld19jaHVuayA9IGxlNjRfdG9fY3B1KGRlLT5uZXdfY2h1bmspOwogfQogCiBzdGF0aWMgdm9pZCB3cml0ZV9leGNlcHRpb24oc3RydWN0IHBzdG9yZSAqcHMsCi0JCQkgICAgdWludDMyX3QgaW5kZXgsIHN0cnVjdCBkaXNrX2V4Y2VwdGlvbiAqZGUpCisJCQkgICAgdWludDMyX3QgaW5kZXgsIHN0cnVjdCBjb3JlX2V4Y2VwdGlvbiAqZSkKIHsKLQlzdHJ1Y3QgZGlza19leGNlcHRpb24gKmUgPSBnZXRfZXhjZXB0aW9uKHBzLCBpbmRleCk7CisJc3RydWN0IGRpc2tfZXhjZXB0aW9uICpkZSA9IGdldF9leGNlcHRpb24ocHMsIGluZGV4KTsKIAogCS8qIGNvcHkgaXQgKi8KLQllLT5vbGRfY2h1bmsgPSBjcHVfdG9fbGU2NChkZS0+b2xkX2NodW5rKTsKLQllLT5uZXdfY2h1bmsgPSBjcHVfdG9fbGU2NChkZS0+bmV3X2NodW5rKTsKKwlkZS0+b2xkX2NodW5rID0gY3B1X3RvX2xlNjQoZS0+b2xkX2NodW5rKTsKKwlkZS0+bmV3X2NodW5rID0gY3B1X3RvX2xlNjQoZS0+bmV3X2NodW5rKTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYXJfZXhjZXB0aW9uKHN0cnVjdCBwc3RvcmUgKnBzLCB1aW50MzJfdCBpbmRleCkKIHsKLQlzdHJ1Y3QgZGlza19leGNlcHRpb24gKmUgPSBnZXRfZXhjZXB0aW9uKHBzLCBpbmRleCk7CisJc3RydWN0IGRpc2tfZXhjZXB0aW9uICpkZSA9IGdldF9leGNlcHRpb24ocHMsIGluZGV4KTsKIAogCS8qIGNsZWFyIGl0ICovCi0JZS0+b2xkX2NodW5rID0gMDsKLQllLT5uZXdfY2h1bmsgPSAwOworCWRlLT5vbGRfY2h1bmsgPSAwOworCWRlLT5uZXdfY2h1bmsgPSAwOwogfQogCiAvKgpAQCAtNDM3LDEzICs0NDEsMTMgQEAKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgZGlza19leGNlcHRpb24gZGU7CisJc3RydWN0IGNvcmVfZXhjZXB0aW9uIGU7CiAKIAkvKiBwcmVzdW1lIHRoZSBhcmVhIGlzIGZ1bGwgKi8KIAkqZnVsbCA9IDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcHMtPmV4Y2VwdGlvbnNfcGVyX2FyZWE7IGkrKykgewotCQlyZWFkX2V4Y2VwdGlvbihwcywgaSwgJmRlKTsKKwkJcmVhZF9leGNlcHRpb24ocHMsIGksICZlKTsKIAogCQkvKgogCQkgKiBJZiB0aGUgbmV3X2NodW5rIGlzIHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZgpAQCAtNDUxLDcgKzQ1NSw3IEBACiAJCSAqIGlzIHdlIGtub3cgdGhhdCB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUKIAkJICogZXhjZXB0aW9ucy4gIFRoZXJlZm9yZSB0aGUgYXJlYSBpcyBub3QgZnVsbC4KIAkJICovCi0JCWlmIChkZS5uZXdfY2h1bmsgPT0gMExMKSB7CisJCWlmIChlLm5ld19jaHVuayA9PSAwTEwpIHsKIAkJCXBzLT5jdXJyZW50X2NvbW1pdHRlZCA9IGk7CiAJCQkqZnVsbCA9IDA7CiAJCQlicmVhazsKQEAgLTQ2MCwxMyArNDY0LDEzIEBACiAJCS8qCiAJCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmcmVlIGNodW5rcy4KIAkJICovCi0JCWlmIChwcy0+bmV4dF9mcmVlIDw9IGRlLm5ld19jaHVuaykKLQkJCXBzLT5uZXh0X2ZyZWUgPSBkZS5uZXdfY2h1bmsgKyAxOworCQlpZiAocHMtPm5leHRfZnJlZSA8PSBlLm5ld19jaHVuaykKKwkJCXBzLT5uZXh0X2ZyZWUgPSBlLm5ld19jaHVuayArIDE7CiAKIAkJLyoKIAkJICogT3RoZXJ3aXNlIHdlIGFkZCB0aGUgZXhjZXB0aW9uIHRvIHRoZSBzbmFwc2hvdC4KIAkJICovCi0JCXIgPSBjYWxsYmFjayhjYWxsYmFja19jb250ZXh0LCBkZS5vbGRfY2h1bmssIGRlLm5ld19jaHVuayk7CisJCXIgPSBjYWxsYmFjayhjYWxsYmFja19jb250ZXh0LCBlLm9sZF9jaHVuaywgZS5uZXdfY2h1bmspOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KQEAgLTU2Myw3ICs1NjcsNyBAQAogCXBzLT5leGNlcHRpb25zX3Blcl9hcmVhID0gKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpIC8KIAkJCQkgIHNpemVvZihzdHJ1Y3QgZGlza19leGNlcHRpb24pOwogCXBzLT5jYWxsYmFja3MgPSBkbV92Y2FsbG9jKHBzLT5leGNlcHRpb25zX3Blcl9hcmVhLAotCQkJc2l6ZW9mKCpwcy0+Y2FsbGJhY2tzKSk7CisJCQkJICAgc2l6ZW9mKCpwcy0+Y2FsbGJhY2tzKSk7CiAJaWYgKCFwcy0+Y2FsbGJhY2tzKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNjQxLDEyICs2NDUsMTIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKLQlzdHJ1Y3QgZGlza19leGNlcHRpb24gZGU7CisJc3RydWN0IGNvcmVfZXhjZXB0aW9uIGNlOwogCXN0cnVjdCBjb21taXRfY2FsbGJhY2sgKmNiOwogCi0JZGUub2xkX2NodW5rID0gZS0+b2xkX2NodW5rOwotCWRlLm5ld19jaHVuayA9IGUtPm5ld19jaHVuazsKLQl3cml0ZV9leGNlcHRpb24ocHMsIHBzLT5jdXJyZW50X2NvbW1pdHRlZCsrLCAmZGUpOworCWNlLm9sZF9jaHVuayA9IGUtPm9sZF9jaHVuazsKKwljZS5uZXdfY2h1bmsgPSBlLT5uZXdfY2h1bms7CisJd3JpdGVfZXhjZXB0aW9uKHBzLCBwcy0+Y3VycmVudF9jb21taXR0ZWQrKywgJmNlKTsKIAogCS8qCiAJICogQWRkIHRoZSBjYWxsYmFjayB0byB0aGUgYmFjayBvZiB0aGUgYXJyYXkuICBUaGlzIGNvZGUKQEAgLTY3MCw3ICs2NzQsNyBAQAogCSAqIElmIHdlIGNvbXBsZXRlbHkgZmlsbGVkIHRoZSBjdXJyZW50IGFyZWEsIHRoZW4gd2lwZSB0aGUgbmV4dCBvbmUuCiAJICovCiAJaWYgKChwcy0+Y3VycmVudF9jb21taXR0ZWQgPT0gcHMtPmV4Y2VwdGlvbnNfcGVyX2FyZWEpICYmCi0JICAgICB6ZXJvX2Rpc2tfYXJlYShwcywgcHMtPmN1cnJlbnRfYXJlYSArIDEpKQorCSAgICB6ZXJvX2Rpc2tfYXJlYShwcywgcHMtPmN1cnJlbnRfYXJlYSArIDEpKQogCQlwcy0+dmFsaWQgPSAwOwogCiAJLyoKQEAgLTcwMSw3ICs3MDUsNyBAQAogCQkJCSAgICBjaHVua190ICpsYXN0X25ld19jaHVuaykKIHsKIAlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKLQlzdHJ1Y3QgZGlza19leGNlcHRpb24gZGU7CisJc3RydWN0IGNvcmVfZXhjZXB0aW9uIGNlOwogCWludCBucl9jb25zZWN1dGl2ZTsKIAlpbnQgcjsKIApAQCAtNzIyLDkgKzcyNiw5IEBACiAJCXBzLT5jdXJyZW50X2NvbW1pdHRlZCA9IHBzLT5leGNlcHRpb25zX3Blcl9hcmVhOwogCX0KIAotCXJlYWRfZXhjZXB0aW9uKHBzLCBwcy0+Y3VycmVudF9jb21taXR0ZWQgLSAxLCAmZGUpOwotCSpsYXN0X29sZF9jaHVuayA9IGRlLm9sZF9jaHVuazsKLQkqbGFzdF9uZXdfY2h1bmsgPSBkZS5uZXdfY2h1bms7CisJcmVhZF9leGNlcHRpb24ocHMsIHBzLT5jdXJyZW50X2NvbW1pdHRlZCAtIDEsICZjZSk7CisJKmxhc3Rfb2xkX2NodW5rID0gY2Uub2xkX2NodW5rOworCSpsYXN0X25ld19jaHVuayA9IGNlLm5ld19jaHVuazsKIAogCS8qCiAJICogRmluZCBudW1iZXIgb2YgY29uc2VjdXRpdmUgY2h1bmtzIHdpdGhpbiB0aGUgY3VycmVudCBhcmVhLApAQCAtNzMzLDkgKzczNyw5IEBACiAJZm9yIChucl9jb25zZWN1dGl2ZSA9IDE7IG5yX2NvbnNlY3V0aXZlIDwgcHMtPmN1cnJlbnRfY29tbWl0dGVkOwogCSAgICAgbnJfY29uc2VjdXRpdmUrKykgewogCQlyZWFkX2V4Y2VwdGlvbihwcywgcHMtPmN1cnJlbnRfY29tbWl0dGVkIC0gMSAtIG5yX2NvbnNlY3V0aXZlLAotCQkJICAgICAgICZkZSk7Ci0JCWlmIChkZS5vbGRfY2h1bmsgIT0gKmxhc3Rfb2xkX2NodW5rIC0gbnJfY29uc2VjdXRpdmUgfHwKLQkJICAgIGRlLm5ld19jaHVuayAhPSAqbGFzdF9uZXdfY2h1bmsgLSBucl9jb25zZWN1dGl2ZSkKKwkJCSAgICAgICAmY2UpOworCQlpZiAoY2Uub2xkX2NodW5rICE9ICpsYXN0X29sZF9jaHVuayAtIG5yX2NvbnNlY3V0aXZlIHx8CisJCSAgICBjZS5uZXdfY2h1bmsgIT0gKmxhc3RfbmV3X2NodW5rIC0gbnJfY29uc2VjdXRpdmUpCiAJCQlicmVhazsKIAl9CiAKQEAgLTc1Myw3ICs3NTcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBucl9tZXJnZWQ7IGkrKykKIAkJY2xlYXJfZXhjZXB0aW9uKHBzLCBwcy0+Y3VycmVudF9jb21taXR0ZWQgLSAxIC0gaSk7CiAKLQlyID0gYXJlYV9pbyhwcywgV1JJVEUpOworCXIgPSBhcmVhX2lvKHBzLCBXUklURV9GTFVTSF9GVUEpOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggOWVjZmY1Zi4uNmY3NTg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTMwLDE2ICszMCw2IEBACiAJKCh0aSktPnR5cGUtPm5hbWUgPT0gZG1fc25hcHNob3RfbWVyZ2VfdGFyZ2V0X25hbWUpCiAKIC8qCi0gKiBUaGUgcGVyY2VudGFnZSBpbmNyZW1lbnQgd2Ugd2lsbCB3YWtlIHVwIHVzZXJzIGF0Ci0gKi8KLSNkZWZpbmUgV0FLRV9VUF9QRVJDRU5UIDUKLQotLyoKLSAqIGtjb3B5ZCBwcmlvcml0eSBvZiBzbmFwc2hvdCBvcGVyYXRpb25zCi0gKi8KLSNkZWZpbmUgU05BUFNIT1RfQ09QWV9QUklPUklUWSAyCi0KLS8qCiAgKiBUaGUgc2l6ZSBvZiB0aGUgbWVtcG9vbCB1c2VkIHRvIHRyYWNrIGNodW5rcyBpbiB1c2UuCiAgKi8KICNkZWZpbmUgTUlOX0lPUyAyNTYKQEAgLTE4MCw2ICsxNzAsMTMgQEAKIAkgKiBrY29weWQuCiAJICovCiAJaW50IHN0YXJ0ZWQ7CisKKwkvKgorCSAqIEZvciB3cml0aW5nIGEgY29tcGxldGUgY2h1bmssIGJ5cGFzc2luZyB0aGUgY29weS4KKwkgKi8KKwlzdHJ1Y3QgYmlvICpmdWxsX2JpbzsKKwliaW9fZW5kX2lvX3QgKmZ1bGxfYmlvX2VuZF9pbzsKKwl2b2lkICpmdWxsX2Jpb19wcml2YXRlOwogfTsKIAogLyoKQEAgLTEwNTUsOCArMTA1Miw3IEBACiAKIAlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXMpIHsKLQkJdGktPmVycm9yID0gIkNhbm5vdCBhbGxvY2F0ZSBzbmFwc2hvdCBjb250ZXh0IHByaXZhdGUgIgotCQkgICAgInN0cnVjdHVyZSI7CisJCXRpLT5lcnJvciA9ICJDYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBzbmFwc2hvdCBzdHJ1Y3R1cmUiOwogCQlyID0gLUVOT01FTTsKIAkJZ290byBiYWQ7CiAJfQpAQCAtMTM4MCw2ICsxMzc2LDcgQEAKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnMgPSBwZS0+c25hcDsKIAlzdHJ1Y3QgYmlvICpvcmlnaW5fYmlvcyA9IE5VTEw7CiAJc3RydWN0IGJpbyAqc25hcHNob3RfYmlvcyA9IE5VTEw7CisJc3RydWN0IGJpbyAqZnVsbF9iaW8gPSBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoIXN1Y2Nlc3MpIHsKQEAgLTE0MTUsMTAgKzE0MTIsMTUgQEAKIAkgKi8KIAlkbV9pbnNlcnRfZXhjZXB0aW9uKCZzLT5jb21wbGV0ZSwgZSk7CiAKLSBvdXQ6CitvdXQ6CiAJZG1fcmVtb3ZlX2V4Y2VwdGlvbigmcGUtPmUpOwogCXNuYXBzaG90X2Jpb3MgPSBiaW9fbGlzdF9nZXQoJnBlLT5zbmFwc2hvdF9iaW9zKTsKIAlvcmlnaW5fYmlvcyA9IGJpb19saXN0X2dldCgmcGUtPm9yaWdpbl9iaW9zKTsKKwlmdWxsX2JpbyA9IHBlLT5mdWxsX2JpbzsKKwlpZiAoZnVsbF9iaW8pIHsKKwkJZnVsbF9iaW8tPmJpX2VuZF9pbyA9IHBlLT5mdWxsX2Jpb19lbmRfaW87CisJCWZ1bGxfYmlvLT5iaV9wcml2YXRlID0gcGUtPmZ1bGxfYmlvX3ByaXZhdGU7CisJfQogCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwogCiAJaW5jcmVtZW50X3BlbmRpbmdfZXhjZXB0aW9uc19kb25lX2NvdW50KCk7CkBAIC0xNDI2LDEwICsxNDI4LDE1IEBACiAJdXBfd3JpdGUoJnMtPmxvY2spOwogCiAJLyogU3VibWl0IGFueSBwZW5kaW5nIHdyaXRlIGJpb3MgKi8KLQlpZiAoZXJyb3IpCisJaWYgKGVycm9yKSB7CisJCWlmIChmdWxsX2JpbykKKwkJCWJpb19pb19lcnJvcihmdWxsX2Jpbyk7CiAJCWVycm9yX2Jpb3Moc25hcHNob3RfYmlvcyk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChmdWxsX2JpbykKKwkJCWJpb19lbmRpbyhmdWxsX2JpbywgMCk7CiAJCWZsdXNoX2Jpb3Moc25hcHNob3RfYmlvcyk7CisJfQogCiAJcmV0cnlfb3JpZ2luX2Jpb3Mocywgb3JpZ2luX2Jpb3MpOwogfQpAQCAtMTQ4MCw4ICsxNDg3LDMzIEBACiAJZGVzdC5jb3VudCA9IHNyYy5jb3VudDsKIAogCS8qIEhhbmQgb3ZlciB0byBrY29weWQgKi8KLQlkbV9rY29weWRfY29weShzLT5rY29weWRfY2xpZW50LAotCQkgICAgJnNyYywgMSwgJmRlc3QsIDAsIGNvcHlfY2FsbGJhY2ssIHBlKTsKKwlkbV9rY29weWRfY29weShzLT5rY29weWRfY2xpZW50LCAmc3JjLCAxLCAmZGVzdCwgMCwgY29weV9jYWxsYmFjaywgcGUpOworfQorCitzdGF0aWMgdm9pZCBmdWxsX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCit7CisJdm9pZCAqY2FsbGJhY2tfZGF0YSA9IGJpby0+YmlfcHJpdmF0ZTsKKworCWRtX2tjb3B5ZF9kb19jYWxsYmFjayhjYWxsYmFja19kYXRhLCAwLCBlcnJvciA/IDEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfZnVsbF9iaW8oc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlLAorCQkJICAgc3RydWN0IGJpbyAqYmlvKQoreworCXN0cnVjdCBkbV9zbmFwc2hvdCAqcyA9IHBlLT5zbmFwOworCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisKKwlwZS0+ZnVsbF9iaW8gPSBiaW87CisJcGUtPmZ1bGxfYmlvX2VuZF9pbyA9IGJpby0+YmlfZW5kX2lvOworCXBlLT5mdWxsX2Jpb19wcml2YXRlID0gYmlvLT5iaV9wcml2YXRlOworCisJY2FsbGJhY2tfZGF0YSA9IGRtX2tjb3B5ZF9wcmVwYXJlX2NhbGxiYWNrKHMtPmtjb3B5ZF9jbGllbnQsCisJCQkJCQkgICBjb3B5X2NhbGxiYWNrLCBwZSk7CisKKwliaW8tPmJpX2VuZF9pbyA9IGZ1bGxfYmlvX2VuZF9pbzsKKwliaW8tPmJpX3ByaXZhdGUgPSBjYWxsYmFja19kYXRhOworCisJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICoKQEAgLTE1MTksNiArMTU1MSw3IEBACiAJYmlvX2xpc3RfaW5pdCgmcGUtPm9yaWdpbl9iaW9zKTsKIAliaW9fbGlzdF9pbml0KCZwZS0+c25hcHNob3RfYmlvcyk7CiAJcGUtPnN0YXJ0ZWQgPSAwOworCXBlLT5mdWxsX2JpbyA9IE5VTEw7CiAKIAlpZiAocy0+c3RvcmUtPnR5cGUtPnByZXBhcmVfZXhjZXB0aW9uKHMtPnN0b3JlLCAmcGUtPmUpKSB7CiAJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwpAQCAtMTYxMiwxMCArMTY0NSwxOSBAQAogCQl9CiAKIAkJcmVtYXBfZXhjZXB0aW9uKHMsICZwZS0+ZSwgYmlvLCBjaHVuayk7Ci0JCWJpb19saXN0X2FkZCgmcGUtPnNuYXBzaG90X2Jpb3MsIGJpbyk7CiAKIAkJciA9IERNX01BUElPX1NVQk1JVFRFRDsKIAorCQlpZiAoIXBlLT5zdGFydGVkICYmCisJCSAgICBiaW8tPmJpX3NpemUgPT0gKHMtPnN0b3JlLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCkpIHsKKwkJCXBlLT5zdGFydGVkID0gMTsKKwkJCXVwX3dyaXRlKCZzLT5sb2NrKTsKKwkJCXN0YXJ0X2Z1bGxfYmlvKHBlLCBiaW8pOworCQkJZ290byBvdXQ7CisJCX0KKworCQliaW9fbGlzdF9hZGQoJnBlLT5zbmFwc2hvdF9iaW9zLCBiaW8pOworCiAJCWlmICghcGUtPnN0YXJ0ZWQpIHsKIAkJCS8qIHRoaXMgaXMgcHJvdGVjdGVkIGJ5IHNuYXAtPmxvY2sgKi8KIAkJCXBlLT5zdGFydGVkID0gMTsKQEAgLTE2MjgsOSArMTY3MCw5IEBACiAJCW1hcF9jb250ZXh0LT5wdHIgPSB0cmFja19jaHVuayhzLCBjaHVuayk7CiAJfQogCi0gb3V0X3VubG9jazoKK291dF91bmxvY2s6CiAJdXBfd3JpdGUoJnMtPmxvY2spOwotIG91dDoKK291dDoKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTk3NCw3ICsyMDE2LDcgQEAKIAkJCXBlX3RvX3N0YXJ0X25vdyA9IHBlOwogCQl9CiAKLSBuZXh0X3NuYXBzaG90OgorbmV4dF9zbmFwc2hvdDoKIAkJdXBfd3JpdGUoJnNuYXAtPmxvY2spOwogCiAJCWlmIChwZV90b19zdGFydF9ub3cpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCBiZmU5YzIzLi45ODZiODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC01NCw3ICs1NCw2IEBACiAJc2VjdG9yX3QgKmhpZ2hzOwogCXN0cnVjdCBkbV90YXJnZXQgKnRhcmdldHM7CiAKLQl1bnNpZ25lZCBkaXNjYXJkc19zdXBwb3J0ZWQ6MTsKIAl1bnNpZ25lZCBpbnRlZ3JpdHlfc3VwcG9ydGVkOjE7CiAKIAkvKgpAQCAtMTU0LDEyICsxNTMsMTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlzaXplID0gbm1lbWIgKiBlbGVtX3NpemU7Ci0JYWRkciA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKGFkZHIpCi0JCW1lbXNldChhZGRyLCAwLCBzaXplKTsKKwlhZGRyID0gdnphbGxvYyhzaXplKTsKIAogCXJldHVybiBhZGRyOwogfQorRVhQT1JUX1NZTUJPTChkbV92Y2FsbG9jKTsKIAogLyoKICAqIGhpZ2hzLCBhbmQgdGFyZ2V0cyBhcmUgbWFuYWdlZCBhcyBkeW5hbWljIGFycmF5cyBkdXJpbmcgYQpAQCAtMjA5LDcgKzIwNyw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnQtPmRldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZ0LT50YXJnZXRfY2FsbGJhY2tzKTsKIAlhdG9taWNfc2V0KCZ0LT5ob2xkZXJzLCAwKTsKLQl0LT5kaXNjYXJkc19zdXBwb3J0ZWQgPSAxOwogCiAJaWYgKCFudW1fdGFyZ2V0cykKIAkJbnVtX3RhcmdldHMgPSBLRVlTX1BFUl9OT0RFOwpAQCAtMjgxLDYgKzI3OCw3IEBACiB7CiAJYXRvbWljX2luYygmdC0+aG9sZGVycyk7CiB9CitFWFBPUlRfU1lNQk9MKGRtX3RhYmxlX2dldCk7CiAKIHZvaWQgZG1fdGFibGVfcHV0KHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKQEAgLTI5MCw2ICsyODgsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKTsKIAlhdG9taWNfZGVjKCZ0LT5ob2xkZXJzKTsKIH0KK0VYUE9SVF9TWU1CT0woZG1fdGFibGVfcHV0KTsKIAogLyoKICAqIENoZWNrcyB0byBzZWUgaWYgd2UgbmVlZCB0byBleHRlbmQgaGlnaHMgb3IgdGFyZ2V0cy4KQEAgLTQ1NSwxMyArNDU0LDE0IEBACiAgKiBBZGQgYSBkZXZpY2UgdG8gdGhlIGxpc3QsIG9yIGp1c3QgaW5jcmVtZW50IHRoZSB1c2FnZSBjb3VudCBpZgogICogaXQncyBhbHJlYWR5IHByZXNlbnQuCiAgKi8KLXN0YXRpYyBpbnQgX190YWJsZV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IGRtX3RhcmdldCAqdGksCi0JCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGZtb2RlX3QgbW9kZSwgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKK2ludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsCisJCSAgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKIHsKIAlpbnQgcjsKIAlkZXZfdCB1bmluaXRpYWxpemVkX3ZhcihkZXYpOwogCXN0cnVjdCBkbV9kZXZfaW50ZXJuYWwgKmRkOwogCXVuc2lnbmVkIGludCBtYWpvciwgbWlub3I7CisJc3RydWN0IGRtX3RhYmxlICp0ID0gdGktPnRhYmxlOwogCiAJQlVHX09OKCF0KTsKIApAQCAtNTA5LDYgKzUwOSw3IEBACiAJKnJlc3VsdCA9ICZkZC0+ZG1fZGV2OwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChkbV9nZXRfZGV2aWNlKTsKIAogaW50IGRtX3NldF9kZXZpY2VfbGltaXRzKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgZG1fZGV2ICpkZXYsCiAJCQkgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGxlbiwgdm9pZCAqZGF0YSkKQEAgLTUzOSwyMyArNTQwLDE1IEBACiAJICogSWYgbm90IHdlJ2xsIGZvcmNlIERNIHRvIHVzZSBQQUdFX1NJWkUgb3IKIAkgKiBzbWFsbGVyIEkvTywganVzdCB0byBiZSBzYWZlLgogCSAqLwotCi0JaWYgKHEtPm1lcmdlX2J2ZWNfZm4gJiYgIXRpLT50eXBlLT5tZXJnZSkKKwlpZiAoZG1fcXVldWVfbWVyZ2VfaXNfY29tcHVsc29yeShxKSAmJiAhdGktPnR5cGUtPm1lcmdlKQogCQlibGtfbGltaXRzX21heF9od19zZWN0b3JzKGxpbWl0cywKIAkJCQkJICAodW5zaWduZWQgaW50KSAoUEFHRV9TSVpFID4+IDkpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX3NldF9kZXZpY2VfbGltaXRzKTsKIAotaW50IGRtX2dldF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsIGZtb2RlX3QgbW9kZSwKLQkJICBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KQotewotCXJldHVybiBfX3RhYmxlX2dldF9kZXZpY2UodGktPnRhYmxlLCB0aSwgcGF0aCwgbW9kZSwgcmVzdWx0KTsKLX0KLQotCiAvKgotICogRGVjcmVtZW50IGEgZGV2aWNlcyB1c2UgY291bnQgYW5kIHJlbW92ZSBpdCBpZiBuZWNlc3NhcnkuCisgKiBEZWNyZW1lbnQgYSBkZXZpY2UncyB1c2UgY291bnQgYW5kIHJlbW92ZSBpdCBpZiBuZWNlc3NhcnkuCiAgKi8KIHZvaWQgZG1fcHV0X2RldmljZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGRtX2RldiAqZCkKIHsKQEAgLTU2OCw2ICs1NjEsNyBAQAogCQlrZnJlZShkZCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChkbV9wdXRfZGV2aWNlKTsKIAogLyoKICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIHRhcmdldCBqb2lucyBvbnRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlLgpAQCAtNzkxLDggKzc4NSw5IEBACiAKIAl0LT5oaWdoc1t0LT5udW1fdGFyZ2V0cysrXSA9IHRndC0+YmVnaW4gKyB0Z3QtPmxlbiAtIDE7CiAKLQlpZiAoIXRndC0+bnVtX2Rpc2NhcmRfcmVxdWVzdHMpCi0JCXQtPmRpc2NhcmRzX3N1cHBvcnRlZCA9IDA7CisJaWYgKCF0Z3QtPm51bV9kaXNjYXJkX3JlcXVlc3RzICYmIHRndC0+ZGlzY2FyZHNfc3VwcG9ydGVkKQorCQlETVdBUk4oIiVzOiAlczogaWdub3JpbmcgZGlzY2FyZHNfc3VwcG9ydGVkIGJlY2F1c2UgbnVtX2Rpc2NhcmRfcmVxdWVzdHMgaXMgemVyby4iLAorCQkgICAgICAgZG1fZGV2aWNlX25hbWUodC0+bWQpLCB0eXBlKTsKIAogCXJldHVybiAwOwogCkBAIC04MDIsNiArNzk3LDYzIEBACiAJcmV0dXJuIHI7CiB9CiAKKy8qCisgKiBUYXJnZXQgYXJndW1lbnQgcGFyc2luZyBoZWxwZXJzLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX25leHRfYXJnKHN0cnVjdCBkbV9hcmcgKmFyZywgc3RydWN0IGRtX2FyZ19zZXQgKmFyZ19zZXQsCisJCQkgICAgIHVuc2lnbmVkICp2YWx1ZSwgY2hhciAqKmVycm9yLCB1bnNpZ25lZCBncm91cGVkKQoreworCWNvbnN0IGNoYXIgKmFyZ19zdHIgPSBkbV9zaGlmdF9hcmcoYXJnX3NldCk7CisKKwlpZiAoIWFyZ19zdHIgfHwKKwkgICAgKHNzY2FuZihhcmdfc3RyLCAiJXUiLCB2YWx1ZSkgIT0gMSkgfHwKKwkgICAgKCp2YWx1ZSA8IGFyZy0+bWluKSB8fAorCSAgICAoKnZhbHVlID4gYXJnLT5tYXgpIHx8CisJICAgIChncm91cGVkICYmIGFyZ19zZXQtPmFyZ2MgPCAqdmFsdWUpKSB7CisJCSplcnJvciA9IGFyZy0+ZXJyb3I7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZG1fcmVhZF9hcmcoc3RydWN0IGRtX2FyZyAqYXJnLCBzdHJ1Y3QgZG1fYXJnX3NldCAqYXJnX3NldCwKKwkJdW5zaWduZWQgKnZhbHVlLCBjaGFyICoqZXJyb3IpCit7CisJcmV0dXJuIHZhbGlkYXRlX25leHRfYXJnKGFyZywgYXJnX3NldCwgdmFsdWUsIGVycm9yLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woZG1fcmVhZF9hcmcpOworCitpbnQgZG1fcmVhZF9hcmdfZ3JvdXAoc3RydWN0IGRtX2FyZyAqYXJnLCBzdHJ1Y3QgZG1fYXJnX3NldCAqYXJnX3NldCwKKwkJICAgICAgdW5zaWduZWQgKnZhbHVlLCBjaGFyICoqZXJyb3IpCit7CisJcmV0dXJuIHZhbGlkYXRlX25leHRfYXJnKGFyZywgYXJnX3NldCwgdmFsdWUsIGVycm9yLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woZG1fcmVhZF9hcmdfZ3JvdXApOworCitjb25zdCBjaGFyICpkbV9zaGlmdF9hcmcoc3RydWN0IGRtX2FyZ19zZXQgKmFzKQoreworCWNoYXIgKnI7CisKKwlpZiAoYXMtPmFyZ2MpIHsKKwkJYXMtPmFyZ2MtLTsKKwkJciA9ICphcy0+YXJndjsKKwkJYXMtPmFyZ3YrKzsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGRtX3NoaWZ0X2FyZyk7CisKK3ZvaWQgZG1fY29uc3VtZV9hcmdzKHN0cnVjdCBkbV9hcmdfc2V0ICphcywgdW5zaWduZWQgbnVtX2FyZ3MpCit7CisJQlVHX09OKGFzLT5hcmdjIDwgbnVtX2FyZ3MpOworCWFzLT5hcmdjIC09IG51bV9hcmdzOworCWFzLT5hcmd2ICs9IG51bV9hcmdzOworfQorRVhQT1JUX1NZTUJPTChkbV9jb25zdW1lX2FyZ3MpOworCiBzdGF0aWMgaW50IGRtX3RhYmxlX3NldF90eXBlKHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBpOwpAQCAtMTA3NywxMSArMTEyOSwxMyBAQAogCQl0LT5ldmVudF9mbih0LT5ldmVudF9jb250ZXh0KTsKIAltdXRleF91bmxvY2soJl9ldmVudF9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woZG1fdGFibGVfZXZlbnQpOwogCiBzZWN0b3JfdCBkbV90YWJsZV9nZXRfc2l6ZShzdHJ1Y3QgZG1fdGFibGUgKnQpCiB7CiAJcmV0dXJuIHQtPm51bV90YXJnZXRzID8gKHQtPmhpZ2hzW3QtPm51bV90YXJnZXRzIC0gMV0gKyAxKSA6IDA7CiB9CitFWFBPUlRfU1lNQk9MKGRtX3RhYmxlX2dldF9zaXplKTsKIAogc3RydWN0IGRtX3RhcmdldCAqZG1fdGFibGVfZ2V0X3RhcmdldChzdHJ1Y3QgZG1fdGFibGUgKnQsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTExOTQsOSArMTI0OCw0NSBAQAogCQkJICAgICAgIGJsa19nZXRfaW50ZWdyaXR5KHRlbXBsYXRlX2Rpc2spKTsKIH0KIAorc3RhdGljIGludCBkZXZpY2VfZmx1c2hfY2FwYWJsZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGRtX2RldiAqZGV2LAorCQkJCXNlY3Rvcl90IHN0YXJ0LCBzZWN0b3JfdCBsZW4sIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgZmx1c2ggPSAoKih1bnNpZ25lZCAqKWRhdGEpOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoZGV2LT5iZGV2KTsKKworCXJldHVybiBxICYmIChxLT5mbHVzaF9mbGFncyAmIGZsdXNoKTsKK30KKworc3RhdGljIGJvb2wgZG1fdGFibGVfc3VwcG9ydHNfZmx1c2goc3RydWN0IGRtX3RhYmxlICp0LCB1bnNpZ25lZCBmbHVzaCkKK3sKKwlzdHJ1Y3QgZG1fdGFyZ2V0ICp0aTsKKwl1bnNpZ25lZCBpID0gMDsKKworCS8qCisJICogUmVxdWlyZSBhdCBsZWFzdCBvbmUgdW5kZXJseWluZyBkZXZpY2UgdG8gc3VwcG9ydCBmbHVzaGVzLgorCSAqIHQtPmRldmljZXMgaW5jbHVkZXMgaW50ZXJuYWwgZG0gZGV2aWNlcyBzdWNoIGFzIG1pcnJvciBsb2dzCisJICogc28gd2UgbmVlZCB0byB1c2UgaXRlcmF0ZV9kZXZpY2VzIGhlcmUsIHdoaWNoIHRhcmdldHMKKwkgKiBzdXBwb3J0aW5nIGZsdXNoZXMgbXVzdCBwcm92aWRlLgorCSAqLworCXdoaWxlIChpIDwgZG1fdGFibGVfZ2V0X251bV90YXJnZXRzKHQpKSB7CisJCXRpID0gZG1fdGFibGVfZ2V0X3RhcmdldCh0LCBpKyspOworCisJCWlmICghdGktPm51bV9mbHVzaF9yZXF1ZXN0cykKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aS0+dHlwZS0+aXRlcmF0ZV9kZXZpY2VzICYmCisJCSAgICB0aS0+dHlwZS0+aXRlcmF0ZV9kZXZpY2VzKHRpLCBkZXZpY2VfZmx1c2hfY2FwYWJsZSwgJmZsdXNoKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIGRtX3RhYmxlX3NldF9yZXN0cmljdGlvbnMoc3RydWN0IGRtX3RhYmxlICp0LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCSAgICAgICBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW1pdHMpCiB7CisJdW5zaWduZWQgZmx1c2ggPSAwOworCiAJLyoKIAkgKiBDb3B5IHRhYmxlJ3MgbGltaXRzIHRvIHRoZSBETSBkZXZpY2UncyByZXF1ZXN0X3F1ZXVlCiAJICovCkBAIC0xMjA3LDYgKzEyOTcsMTMgQEAKIAllbHNlCiAJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRElTQ0FSRCwgcSk7CiAKKwlpZiAoZG1fdGFibGVfc3VwcG9ydHNfZmx1c2godCwgUkVRX0ZMVVNIKSkgeworCQlmbHVzaCB8PSBSRVFfRkxVU0g7CisJCWlmIChkbV90YWJsZV9zdXBwb3J0c19mbHVzaCh0LCBSRVFfRlVBKSkKKwkJCWZsdXNoIHw9IFJFUV9GVUE7CisJfQorCWJsa19xdWV1ZV9mbHVzaChxLCBmbHVzaCk7CisKIAlkbV90YWJsZV9zZXRfaW50ZWdyaXR5KHQpOwogCiAJLyoKQEAgLTEyMzcsNiArMTMzNCw3IEBACiB7CiAJcmV0dXJuIHQtPm1vZGU7CiB9CitFWFBPUlRfU1lNQk9MKGRtX3RhYmxlX2dldF9tb2RlKTsKIAogc3RhdGljIHZvaWQgc3VzcGVuZF90YXJnZXRzKHN0cnVjdCBkbV90YWJsZSAqdCwgdW5zaWduZWQgcG9zdHN1c3BlbmQpCiB7CkBAIC0xMzQ1LDYgKzE0NDMsNyBAQAogewogCXJldHVybiB0LT5tZDsKIH0KK0VYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0X21kKTsKIAogc3RhdGljIGludCBkZXZpY2VfZGlzY2FyZF9jYXBhYmxlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgZG1fZGV2ICpkZXYsCiAJCQkJICBzZWN0b3JfdCBzdGFydCwgc2VjdG9yX3QgbGVuLCB2b2lkICpkYXRhKQpAQCAtMTM1OSwxOSArMTQ1OCwxOSBAQAogCXN0cnVjdCBkbV90YXJnZXQgKnRpOwogCXVuc2lnbmVkIGkgPSAwOwogCi0JaWYgKCF0LT5kaXNjYXJkc19zdXBwb3J0ZWQpCi0JCXJldHVybiAwOwotCiAJLyoKIAkgKiBVbmxlc3MgYW55IHRhcmdldCB1c2VkIGJ5IHRoZSB0YWJsZSBzZXQgZGlzY2FyZHNfc3VwcG9ydGVkLAogCSAqIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHVuZGVybHlpbmcgZGV2aWNlIHRvIHN1cHBvcnQgZGlzY2FyZHMuCiAJICogdC0+ZGV2aWNlcyBpbmNsdWRlcyBpbnRlcm5hbCBkbSBkZXZpY2VzIHN1Y2ggYXMgbWlycm9yIGxvZ3MKIAkgKiBzbyB3ZSBuZWVkIHRvIHVzZSBpdGVyYXRlX2RldmljZXMgaGVyZSwgd2hpY2ggdGFyZ2V0cwotCSAqIHN1cHBvcnRpbmcgZGlzY2FyZCBtdXN0IHByb3ZpZGUuCisJICogc3VwcG9ydGluZyBkaXNjYXJkIHNlbGVjdGl2ZWx5IG11c3QgcHJvdmlkZS4KIAkgKi8KIAl3aGlsZSAoaSA8IGRtX3RhYmxlX2dldF9udW1fdGFyZ2V0cyh0KSkgewogCQl0aSA9IGRtX3RhYmxlX2dldF90YXJnZXQodCwgaSsrKTsKIAorCQlpZiAoIXRpLT5udW1fZGlzY2FyZF9yZXF1ZXN0cykKKwkJCWNvbnRpbnVlOworCiAJCWlmICh0aS0+ZGlzY2FyZHNfc3VwcG9ydGVkKQogCQkJcmV0dXJuIDE7CiAKQEAgLTEzODIsMTMgKzE0ODEsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woZG1fdmNhbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKGRtX2dldF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChkbV9wdXRfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0woZG1fdGFibGVfZXZlbnQpOwotRVhQT1JUX1NZTUJPTChkbV90YWJsZV9nZXRfc2l6ZSk7Ci1FWFBPUlRfU1lNQk9MKGRtX3RhYmxlX2dldF9tb2RlKTsKLUVYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0X21kKTsKLUVYUE9SVF9TWU1CT0woZG1fdGFibGVfcHV0KTsKLUVYUE9SVF9TWU1CT0woZG1fdGFibGVfZ2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCAwY2Y2OGI0Li41MmIzOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0zNyw2ICszNyw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1ham9yID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX21ham9yID0gMDsKIAorc3RhdGljIERFRklORV9JRFIoX21pbm9yX2lkcik7CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soX21pbm9yX2xvY2spOwogLyoKICAqIEZvciBiaW8tYmFzZWQgZG0uCkBAIC0xMDksNiArMTExLDcgQEAKICNkZWZpbmUgRE1GX0ZSRUVJTkcgMwogI2RlZmluZSBETUZfREVMRVRJTkcgNAogI2RlZmluZSBETUZfTk9GTFVTSF9TVVNQRU5ESU5HIDUKKyNkZWZpbmUgRE1GX01FUkdFX0lTX09QVElPTkFMIDYKIAogLyoKICAqIFdvcmsgcHJvY2Vzc2VkIGJ5IHBlci1kZXZpY2Ugd29ya3F1ZXVlLgpAQCAtMzEzLDYgKzMxNiwxMiBAQAogCiAJd2hpbGUgKGktLSkKIAkJX2V4aXRzW2ldKCk7CisKKwkvKgorCSAqIFNob3VsZCBiZSBlbXB0eSBieSB0aGlzIHBvaW50LgorCSAqLworCWlkcl9yZW1vdmVfYWxsKCZfbWlub3JfaWRyKTsKKwlpZHJfZGVzdHJveSgmX21pbm9yX2lkcik7CiB9CiAKIC8qCkBAIC0xMTcxLDcgKzExODAsOCBAQAogCiAJCS8qCiAJCSAqIEV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgYWR2ZXJ0aXNlZCBkaXNjYXJkIHN1cHBvcnQsCi0JCSAqIHJlY29uZmlndXJhdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQgdGhhdCBzaW5jZSB0aGUKKwkJICogdGhhdCBkb2VzIG5vdCBtZWFuIGV2ZXJ5IHRhcmdldCBzdXBwb3J0cyBpdCwgYW5kCisJCSAqIHJlY29uZmlndXJhdGlvbiBtaWdodCBhbHNvIGhhdmUgY2hhbmdlZCB0aGF0IHNpbmNlIHRoZQogCQkgKiBjaGVjayB3YXMgcGVyZm9ybWVkLgogCQkgKi8KIAkJaWYgKCF0aS0+bnVtX2Rpc2NhcmRfcmVxdWVzdHMpCkBAIC0xNzA1LDggKzE3MTUsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQW4gSURSIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhbGxvY2F0ZWQgbWlub3IgbnVtYmVycy4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBERUZJTkVfSURSKF9taW5vcl9pZHIpOwotCiBzdGF0aWMgdm9pZCBmcmVlX21pbm9yKGludCBtaW5vcikKIHsKIAlzcGluX2xvY2soJl9taW5vcl9sb2NrKTsKQEAgLTE4MDAsNyArMTgwOCw2IEBACiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChtZC0+cXVldWUsIGRtX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobWQtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJYmxrX3F1ZXVlX21lcmdlX2J2ZWMobWQtPnF1ZXVlLCBkbV9tZXJnZV9idmVjKTsKLQlibGtfcXVldWVfZmx1c2gobWQtPnF1ZXVlLCBSRVFfRkxVU0ggfCBSRVFfRlVBKTsKIH0KIAogLyoKQEAgLTE5ODYsNiArMTk5Myw1OSBAQAogfQogCiAvKgorICogUmV0dXJuIDEgaWYgdGhlIHF1ZXVlIGhhcyBhIGNvbXB1bHNvcnkgbWVyZ2VfYnZlY19mbiBmdW5jdGlvbi4KKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCwgdGhlbiB0aGUgZGV2aWNlIGlzIGVpdGhlciBhIG5vbi1kbQorICogZGV2aWNlIHdpdGhvdXQgYSBtZXJnZV9idmVjX2ZuLCBvciBpdCBpcyBhIGRtIGRldmljZSB0aGF0IGlzCisgKiBhYmxlIHRvIHNwbGl0IGFueSBiaW9zIGl0IHJlY2VpdmVzIHRoYXQgYXJlIHRvbyBiaWcuCisgKi8KK2ludCBkbV9xdWV1ZV9tZXJnZV9pc19jb21wdWxzb3J5KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICpkZXZfbWQ7CisKKwlpZiAoIXEtPm1lcmdlX2J2ZWNfZm4pCisJCXJldHVybiAwOworCisJaWYgKHEtPm1ha2VfcmVxdWVzdF9mbiA9PSBkbV9yZXF1ZXN0KSB7CisJCWRldl9tZCA9IHEtPnF1ZXVlZGF0YTsKKwkJaWYgKHRlc3RfYml0KERNRl9NRVJHRV9JU19PUFRJT05BTCwgJmRldl9tZC0+ZmxhZ3MpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG1fZGV2aWNlX21lcmdlX2lzX2NvbXB1bHNvcnkoc3RydWN0IGRtX3RhcmdldCAqdGksCisJCQkJCSBzdHJ1Y3QgZG1fZGV2ICpkZXYsIHNlY3Rvcl90IHN0YXJ0LAorCQkJCQkgc2VjdG9yX3QgbGVuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBkZXYtPmJkZXY7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKworCXJldHVybiBkbV9xdWV1ZV9tZXJnZV9pc19jb21wdWxzb3J5KHEpOworfQorCisvKgorICogUmV0dXJuIDEgaWYgaXQgaXMgYWNjZXB0YWJsZSB0byBpZ25vcmUgbWVyZ2VfYnZlY19mbiBiYXNlZAorICogb24gdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlcy4KKyAqLworc3RhdGljIGludCBkbV90YWJsZV9tZXJnZV9pc19vcHRpb25hbChzdHJ1Y3QgZG1fdGFibGUgKnRhYmxlKQoreworCXVuc2lnbmVkIGkgPSAwOworCXN0cnVjdCBkbV90YXJnZXQgKnRpOworCisJd2hpbGUgKGkgPCBkbV90YWJsZV9nZXRfbnVtX3RhcmdldHModGFibGUpKSB7CisJCXRpID0gZG1fdGFibGVfZ2V0X3RhcmdldCh0YWJsZSwgaSsrKTsKKworCQlpZiAodGktPnR5cGUtPml0ZXJhdGVfZGV2aWNlcyAmJgorCQkgICAgdGktPnR5cGUtPml0ZXJhdGVfZGV2aWNlcyh0aSwgZG1fZGV2aWNlX21lcmdlX2lzX2NvbXB1bHNvcnksIE5VTEwpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBSZXR1cm5zIG9sZCBtYXAsIHdoaWNoIGNhbGxlciBtdXN0IGRlc3Ryb3kuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZG1fdGFibGUgKl9fYmluZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBkbV90YWJsZSAqdCwKQEAgLTE5OTUsNiArMjA1NSw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZC0+cXVldWU7CiAJc2VjdG9yX3Qgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtZXJnZV9pc19vcHRpb25hbDsKIAogCXNpemUgPSBkbV90YWJsZV9nZXRfc2l6ZSh0KTsKIApAQCAtMjAyMCwxMCArMjA4MSwxNiBAQAogCiAJX19iaW5kX21lbXBvb2xzKG1kLCB0KTsKIAorCW1lcmdlX2lzX29wdGlvbmFsID0gZG1fdGFibGVfbWVyZ2VfaXNfb3B0aW9uYWwodCk7CisKIAl3cml0ZV9sb2NrX2lycXNhdmUoJm1kLT5tYXBfbG9jaywgZmxhZ3MpOwogCW9sZF9tYXAgPSBtZC0+bWFwOwogCW1kLT5tYXAgPSB0OwogCWRtX3RhYmxlX3NldF9yZXN0cmljdGlvbnModCwgcSwgbGltaXRzKTsKKwlpZiAobWVyZ2VfaXNfb3B0aW9uYWwpCisJCXNldF9iaXQoRE1GX01FUkdFX0lTX09QVElPTkFMLCAmbWQtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChETUZfTUVSR0VfSVNfT1BUSU9OQUwsICZtZC0+ZmxhZ3MpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+bWFwX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBvbGRfbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDFhYWYxNjcuLjY3NDVkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTY2LDYgKzY2LDggQEAKIHZvaWQgZG1fdGFibGVfZnJlZV9tZF9tZW1wb29scyhzdHJ1Y3QgZG1fdGFibGUgKnQpOwogc3RydWN0IGRtX21kX21lbXBvb2xzICpkbV90YWJsZV9nZXRfbWRfbWVtcG9vbHMoc3RydWN0IGRtX3RhYmxlICp0KTsKIAoraW50IGRtX3F1ZXVlX21lcmdlX2lzX2NvbXB1bHNvcnkoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOworCiB2b2lkIGRtX2xvY2tfbWRfdHlwZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwogdm9pZCBkbV91bmxvY2tfbWRfdHlwZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwogdm9pZCBkbV9zZXRfbWRfdHlwZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHVuc2lnbmVkIHR5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuaCBiL2RyaXZlcnMvbWQvbGluZWFyLmgKaW5kZXggMGNlMjliNi4uMmYyZGEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuaAorKysgYi9kcml2ZXJzL21kL2xpbmVhci5oCkBAIC0xMCw5ICsxMCw5IEBACiAKIHN0cnVjdCBsaW5lYXJfcHJpdmF0ZV9kYXRhCiB7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CiAJc2VjdG9yX3QJCWFycmF5X3NlY3RvcnM7CiAJZGV2X2luZm9fdAkJZGlza3NbMF07Ci0Jc3RydWN0IHJjdV9oZWFkCQlyY3U7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCA4ZTIyMWEyLi41NDA0YjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC04NDgsNyArODQ4LDcgQEAKIAliaW8tPmJpX2VuZF9pbyA9IHN1cGVyX3dyaXR0ZW47CiAKIAlhdG9taWNfaW5jKCZtZGRldi0+cGVuZGluZ193cml0ZXMpOwotCXN1Ym1pdF9iaW8oUkVRX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfRkxVU0ggfCBSRVFfRlVBLCBiaW8pOworCXN1Ym1pdF9iaW8oV1JJVEVfRkxVU0hfRlVBLCBiaW8pOwogfQogCiB2b2lkIG1kX3N1cGVyX3dhaXQobWRkZXZfdCAqbWRkZXYpCkBAIC0xMTM4LDggKzExMzgsMTEgQEAKIAkJCXJldCA9IDA7CiAJfQogCXJkZXYtPnNlY3RvcnMgPSByZGV2LT5zYl9zdGFydDsKKwkvKiBMaW1pdCB0byA0VEIgYXMgbWV0YWRhdGEgY2Fubm90IHJlY29yZCBtb3JlIHRoYW4gdGhhdCAqLworCWlmIChyZGV2LT5zZWN0b3JzID49ICgyVUxMIDw8IDMyKSkKKwkJcmRldi0+c2VjdG9ycyA9ICgyVUxMIDw8IDMyKSAtIDI7CiAKLQlpZiAocmRldi0+c2VjdG9ycyA8IHNiLT5zaXplICogMiAmJiBzYi0+bGV2ZWwgPiAxKQorCWlmIChyZGV2LT5zZWN0b3JzIDwgKChzZWN0b3JfdClzYi0+c2l6ZSkgKiAyICYmIHNiLT5sZXZlbCA+PSAxKQogCQkvKiAidGhpcyBjYW5ub3QgcG9zc2libHkgaGFwcGVuIiAuLi4gKi8KIAkJcmV0ID0gLUVJTlZBTDsKIApAQCAtMTE3Myw3ICsxMTc2LDcgQEAKIAkJbWRkZXYtPmNsZXZlbFswXSA9IDA7CiAJCW1kZGV2LT5sYXlvdXQgPSBzYi0+bGF5b3V0OwogCQltZGRldi0+cmFpZF9kaXNrcyA9IHNiLT5yYWlkX2Rpc2tzOwotCQltZGRldi0+ZGV2X3NlY3RvcnMgPSBzYi0+c2l6ZSAqIDI7CisJCW1kZGV2LT5kZXZfc2VjdG9ycyA9ICgoc2VjdG9yX3Qpc2ItPnNpemUpICogMjsKIAkJbWRkZXYtPmV2ZW50cyA9IGV2MTsKIAkJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CiAJCW1kZGV2LT5iaXRtYXBfaW5mby5kZWZhdWx0X29mZnNldCA9IE1EX1NCX0JZVEVTID4+IDk7CkBAIC0xNDE1LDYgKzE0MTgsMTEgQEAKIAlyZGV2LT5zYl9zdGFydCA9IGNhbGNfZGV2X3Nib2Zmc2V0KHJkZXYpOwogCWlmICghbnVtX3NlY3RvcnMgfHwgbnVtX3NlY3RvcnMgPiByZGV2LT5zYl9zdGFydCkKIAkJbnVtX3NlY3RvcnMgPSByZGV2LT5zYl9zdGFydDsKKwkvKiBMaW1pdCB0byA0VEIgYXMgbWV0YWRhdGEgY2Fubm90IHJlY29yZCBtb3JlIHRoYW4gdGhhdC4KKwkgKiA0VEIgPT0gMl4zMiBLQiwgb3IgMioyXjMyIHNlY3RvcnMuCisJICovCisJaWYgKG51bV9zZWN0b3JzID49ICgyVUxMIDw8IDMyKSkKKwkJbnVtX3NlY3RvcnMgPSAoMlVMTCA8PCAzMikgLSAyOwogCW1kX3N1cGVyX3dyaXRlKHJkZXYtPm1kZGV2LCByZGV2LCByZGV2LT5zYl9zdGFydCwgcmRldi0+c2Jfc2l6ZSwKIAkJICAgICAgIHJkZXYtPnNiX3BhZ2UpOwogCW1kX3N1cGVyX3dhaXQocmRldi0+bWRkZXYpOwpAQCAtMTczOCw2ICsxNzQ2LDExIEBACiAJc2ItPmxldmVsID0gY3B1X3RvX2xlMzIobWRkZXYtPmxldmVsKTsKIAlzYi0+bGF5b3V0ID0gY3B1X3RvX2xlMzIobWRkZXYtPmxheW91dCk7CiAKKwlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncykpCisJCXNiLT5kZXZmbGFncyB8PSBXcml0ZU1vc3RseTE7CisJZWxzZQorCQlzYi0+ZGV2ZmxhZ3MgJj0gfldyaXRlTW9zdGx5MTsKKwogCWlmIChtZGRldi0+Yml0bWFwICYmIG1kZGV2LT5iaXRtYXBfaW5mby5maWxlID09IE5VTEwpIHsKIAkJc2ItPmJpdG1hcF9vZmZzZXQgPSBjcHVfdG9fbGUzMigoX191MzIpbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCk7CiAJCXNiLT5mZWF0dXJlX21hcCA9IGNwdV90b19sZTMyKE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCk7CkBAIC0yNTYxLDcgKzI1NzQsMTAgQEAKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlpZiAoY21kX21hdGNoKGJ1ZiwgImZhdWx0eSIpICYmIHJkZXYtPm1kZGV2LT5wZXJzKSB7CiAJCW1kX2Vycm9yKHJkZXYtPm1kZGV2LCByZGV2KTsKLQkJZXJyID0gMDsKKwkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJCWVyciA9IDA7CisJCWVsc2UKKwkJCWVyciA9IC1FQlVTWTsKIAl9IGVsc2UgaWYgKGNtZF9tYXRjaChidWYsICJyZW1vdmUiKSkgewogCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDApCiAJCQllcnIgPSAtRUJVU1k7CkBAIC0yNTg0LDcgKzI2MDAsNyBAQAogCQllcnIgPSAwOwogCX0gZWxzZSBpZiAoY21kX21hdGNoKGJ1ZiwgIi1ibG9ja2VkIikpIHsKIAkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKLQkJICAgIHRlc3RfYml0KEJsb2NrZWRCYWRCbG9ja3MsICZyZGV2LT5mbGFncykpIHsKKwkJICAgIHJkZXYtPmJhZGJsb2Nrcy51bmFja2VkX2V4aXN0KSB7CiAJCQkvKiBtZXRhZGF0YSBoYW5kbGVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBiYWRibG9ja3MsCiAJCQkgKiBzbyB3ZSBuZWVkIHRvIGZhaWwgdGhlIGRldmljZQogCQkJICovCkBAIC01OTgzLDYgKzU5OTksOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKKwlpZiAoIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDMyMzIzZjAuLmY0NjIyZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTEwOTksMTIgKzEwOTksMTEgQEAKIAkJYmlvX2xpc3RfYWRkKCZjb25mLT5wZW5kaW5nX2Jpb19saXN0LCBtYmlvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9Ci0JcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvKTsKLQotCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLwotCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7Ci0KKwkvKiBNdXN0bid0IGNhbGwgcjFfYmlvX3dyaXRlX2RvbmUgYmVmb3JlIHRoaXMgbmV4dCB0ZXN0LAorCSAqIGFzIGl0IGNvdWxkIHJlc3VsdCBpbiB0aGUgYmlvIGJlaW5nIGZyZWVkLgorCSAqLwogCWlmIChzZWN0b3JzX2hhbmRsZWQgPCAoYmlvLT5iaV9zaXplID4+IDkpKSB7CisJCXIxX2Jpb193cml0ZV9kb25lKHIxX2Jpbyk7CiAJCS8qIFdlIG5lZWQgYW5vdGhlciByMV9iaW8uICBJdCBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQKIAkJICogaW4gYmlvLT5iaV9waHlzX3NlZ21lbnRzCiAJCSAqLwpAQCAtMTExNyw2ICsxMTE2LDExIEBACiAJCWdvdG8gcmV0cnlfd3JpdGU7CiAJfQogCisJcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvKTsKKworCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLworCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CisKIAlpZiAoZG9fc3luYyB8fCAhYml0bWFwIHx8ICFwbHVnZ2VkKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA4YjI5Y2Q0Li5kN2E4NDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTMzNyw2ICszMzcsMjEgQEAKIAltZF93cml0ZV9lbmQocjEwX2Jpby0+bWRkZXYpOwogfQogCitzdGF0aWMgdm9pZCBvbmVfd3JpdGVfZG9uZShyMTBiaW9fdCAqcjEwX2JpbykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjEwX2Jpby0+cmVtYWluaW5nKSkgeworCQlpZiAodGVzdF9iaXQoUjEwQklPX1dyaXRlRXJyb3IsICZyMTBfYmlvLT5zdGF0ZSkpCisJCQlyZXNjaGVkdWxlX3JldHJ5KHIxMF9iaW8pOworCQllbHNlIHsKKwkJCWNsb3NlX3dyaXRlKHIxMF9iaW8pOworCQkJaWYgKHRlc3RfYml0KFIxMEJJT19NYWRlR29vZCwgJnIxMF9iaW8tPnN0YXRlKSkKKwkJCQlyZXNjaGVkdWxlX3JldHJ5KHIxMF9iaW8pOworCQkJZWxzZQorCQkJCXJhaWRfZW5kX2Jpb19pbyhyMTBfYmlvKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgcmFpZDEwX2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQogewogCWludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwpAQCAtMzg3LDE3ICs0MDIsNyBAQAogCSAqIExldCdzIHNlZSBpZiBhbGwgbWlycm9yZWQgd3JpdGUgb3BlcmF0aW9ucyBoYXZlIGZpbmlzaGVkCiAJICogYWxyZWFkeS4KIAkgKi8KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjEwX2Jpby0+cmVtYWluaW5nKSkgewotCQlpZiAodGVzdF9iaXQoUjEwQklPX1dyaXRlRXJyb3IsICZyMTBfYmlvLT5zdGF0ZSkpCi0JCQlyZXNjaGVkdWxlX3JldHJ5KHIxMF9iaW8pOwotCQllbHNlIHsKLQkJCWNsb3NlX3dyaXRlKHIxMF9iaW8pOwotCQkJaWYgKHRlc3RfYml0KFIxMEJJT19NYWRlR29vZCwgJnIxMF9iaW8tPnN0YXRlKSkKLQkJCQlyZXNjaGVkdWxlX3JldHJ5KHIxMF9iaW8pOwotCQkJZWxzZQotCQkJCXJhaWRfZW5kX2Jpb19pbyhyMTBfYmlvKTsKLQkJfQotCX0KKwlvbmVfd3JpdGVfZG9uZShyMTBfYmlvKTsKIAlpZiAoZGVjX3JkZXYpCiAJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tkZXZdLnJkZXYsIGNvbmYtPm1kZGV2KTsKIH0KQEAgLTExMjcsMjAgKzExMzIsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcjEwX2Jpby0+cmVtYWluaW5nKSkgewotCQkvKiBUaGlzIG1hdGNoZXMgdGhlIGVuZCBvZiByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3QoKSAqLwotCQliaXRtYXBfZW5kd3JpdGUocjEwX2Jpby0+bWRkZXYtPmJpdG1hcCwgcjEwX2Jpby0+c2VjdG9yLAotCQkJCXIxMF9iaW8tPnNlY3RvcnMsCi0JCQkJIXRlc3RfYml0KFIxMEJJT19EZWdyYWRlZCwgJnIxMF9iaW8tPnN0YXRlKSwKLQkJCQkwKTsKLQkJbWRfd3JpdGVfZW5kKG1kZGV2KTsKLQkJcmFpZF9lbmRfYmlvX2lvKHIxMF9iaW8pOwotCX0KLQotCS8qIEluIGNhc2UgcmFpZDEwZCBzbnVjayBpbiB0byBmcmVlemVfYXJyYXkgKi8KLQl3YWtlX3VwKCZjb25mLT53YWl0X2JhcnJpZXIpOworCS8qIERvbid0IHJlbW92ZSB0aGUgYmlhcyBvbiAncmVtYWluaW5nJyAob25lX3dyaXRlX2RvbmUpIHVudGlsCisJICogYWZ0ZXIgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byBnbyBhcm91bmQgYWdhaW4uCisJICovCiAKIAlpZiAoc2VjdG9yc19oYW5kbGVkIDwgKGJpby0+Ymlfc2l6ZSA+PiA5KSkgeworCQlvbmVfd3JpdGVfZG9uZShyMTBfYmlvKTsKIAkJLyogV2UgbmVlZCBhbm90aGVyIHIxMF9iaW8uICBJdCBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQKIAkJICogaW4gYmlvLT5iaV9waHlzX3NlZ21lbnRzLgogCQkgKi8KQEAgLTExNTQsNiArMTE1MSwxMCBAQAogCQlyMTBfYmlvLT5zdGF0ZSA9IDA7CiAJCWdvdG8gcmV0cnlfd3JpdGU7CiAJfQorCW9uZV93cml0ZV9kb25lKHIxMF9iaW8pOworCisJLyogSW4gY2FzZSByYWlkMTBkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLworCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CiAKIAlpZiAoZG9fc3luYyB8fCAhbWRkZXYtPmJpdG1hcCB8fCAhcGx1Z2dlZCkKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBkYmFlNDU5Li40MzcwOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0zMzM2LDcgKzMzMzYsNyBAQAogCiBmaW5pc2g6CiAJLyogd2FpdCBmb3IgdGhpcyBkZXZpY2UgdG8gYmVjb21lIHVuYmxvY2tlZCAqLwotCWlmICh1bmxpa2VseShzLmJsb2NrZWRfcmRldikpCisJaWYgKGNvbmYtPm1kZGV2LT5leHRlcm5hbCAmJiB1bmxpa2VseShzLmJsb2NrZWRfcmRldikpCiAJCW1kX3dhaXRfZm9yX2Jsb2NrZWRfcmRldihzLmJsb2NrZWRfcmRldiwgY29uZi0+bWRkZXYpOwogCiAJaWYgKHMuaGFuZGxlX2JhZF9ibG9ja3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKaW5kZXggNjk5NTk0MC4uOTU3NWRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtNjgsNyArNjgsNiBAQAogCiBjb25maWcgRFZCX0NPUkUKIAl0cmlzdGF0ZSAiRFZCIGZvciBMaW51eCIKLQlkZXBlbmRzIG9uIE5FVCAmJiBJTkVUCiAJc2VsZWN0IENSQzMyCiAJaGVscAogCSAgRFZCIGNvcmUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRldmljZSBoYW5kbGluZywgc29mdHdhcmUgZmFsbGJhY2tzIGV0Yy4KQEAgLTg1LDYgKzg0LDE5IEBACiAKIAkgIElmIHVuc3VyZSBzYXkgTi4KIAorY29uZmlnIERWQl9ORVQKKwlib29sICJEVkIgTmV0d29yayBTdXBwb3J0IgorCWRlZmF1bHQgKE5FVCAmJiBJTkVUKQorCWRlcGVuZHMgb24gTkVUICYmIElORVQgJiYgRFZCX0NPUkUKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIERWQiBOZXR3b3JrIFN1cHBvcnQgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSBEVkIKKwkgIHN0YW5kYXJkLiBJdCBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgYnkgYXV0b21hdGljIGZpcm13YXJlIHVwZGF0ZXMgdXNlZAorCSAgb24gU2V0LVRvcC1Cb3hlcy4gSXQgY2FuIGFsc28gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIEludGVybmV0IHZpYSB0aGUKKwkgIERWQiBjYXJkLCBpZiB0aGUgbmV0d29yayBwcm92aWRlciBzdXBwb3J0cyBpdC4KKworCSAgWW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG5ldHdvcmsgc3VwcG9ydCBvbiBlbWJlZGRlZCBkZXZpY2VzLiBJZgorCSAgdW5zdXJlIHNheSBZLgorCiBjb25maWcgVklERU9fTUVESUEKIAl0cmlzdGF0ZQogCWRlZmF1bHQgKERWQl9DT1JFICYmIChWSURFT19ERVYgPSBuKSkgfHwgKFZJREVPX0RFViAmJiAoRFZCX0NPUkUgPSBuKSkgfHwgKERWQl9DT1JFICYmIFZJREVPX0RFVikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKaW5kZXggMjJkM2NhMy4uOTk2MzAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKQEAgLTIzLDYgKzIzLDcgQEAKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzQwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwWFggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCkBAIC0xNTIsNiArMTUzLDE1IEBACiAJICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2dldGhlciB3aXRoIGEKIAkgIGRlbW9kdWxhdG9yIGZvciBub3cuCiAKK2NvbmZpZyBNRURJQV9UVU5FUl9YQzQwMDAKKwl0cmlzdGF0ZSAiWGNlaXZlIFhDNDAwMCBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBYQzQwMDAgZnJvbSBYY2VpdmUuCisJICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2dldGhlciB3aXRoIGEKKwkgIGRlbW9kdWxhdG9yIGZvciBub3cuCisKIGNvbmZpZyBNRURJQV9UVU5FUl9NWEw1MDA1UwogCXRyaXN0YXRlICJNYXhMaW5lYXIgTVNMNTAwNVMgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlCmluZGV4IDJjYjRmNTMuLjIwZDI0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9UREE4MjdYKSArPSB0ZGE4Mjd4Lm8KIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSkgKz0gdGRhMTgyNzEubwogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMCkgKz0geGM1MDAwLm8KK29iai0kKENPTkZJR19NRURJQV9UVU5FUl9YQzQwMDApICs9IHhjNDAwMC5vCiBvYmotJChDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwKSArPSBtdDIwNjAubwogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01UMjI2NikgKz0gbXQyMjY2Lm8KIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9RVDEwMTApICs9IHF0MTAxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IGFmYmE2ZGMuLjk0YTYwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC0xODA1LDYgKzE4MDUsMTAgQEAKIAkJLm5hbWUgICA9ICJYY2VpdmUgNTAwMCB0dW5lciIsCiAJCS8qIHNlZSB4YzUwMDAuYyBmb3IgZGV0YWlscyAqLwogCX0sCisJW1RVTkVSX1hDNDAwMF0gPSB7IC8qIFhjZWl2ZSA0MDAwICovCisJCS5uYW1lICAgPSAiWGNlaXZlIDQwMDAgdHVuZXIiLAorCQkvKiBzZWUgeGM0MDAwLmMgZm9yIGRldGFpbHMgKi8KKwl9LAogCVtUVU5FUl9UQ0xfTUYwMkdJUF81Tl0gPSB7IC8qIFRDTCB0dW5lciBNRjAyR0lQLTVOLUUgKi8KIAkJLm5hbWUgICA9ICJUQ0wgdHVuZXIgTUYwMkdJUC01Ti1FIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzQwMDAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzQwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzRmNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNDAwMC5jCkBAIC0wLDAgKzEsMTY5MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIFhjZWl2ZSBYQzQwMDAgIlFBTS84VlNCIHNpbmdsZSBjaGlwIHR1bmVyIgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgWGNlaXZlIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBrZXJuZWxsYWJzLmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgRGF2aWRlIEZlcnJpIDxkLmZlcnJpQHplcm8xMS5pdD4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgSXN0dmFuIFZhcmdhIDxpc3R2YW5fdkBtYWlsYm94Lmh1PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAieGM0MDAwLmgiCisjaW5jbHVkZSAidHVuZXItaTJjLmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LXR5cGVzLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIGxldmVsICgwIHRvIDIsIGRlZmF1bHQ6IDAgKG9mZikpLiIpOworCitzdGF0aWMgaW50IG5vX3Bvd2Vyb2ZmOworbW9kdWxlX3BhcmFtKG5vX3Bvd2Vyb2ZmLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhub19wb3dlcm9mZiwgIlBvd2VyIG1hbmFnZW1lbnQgKDE6IGRpc2FibGVkLCAyOiBlbmFibGVkLCAiCisJIjAgKGRlZmF1bHQpOiB1c2UgZGV2aWNlLXNwZWNpZmljIGRlZmF1bHQgbW9kZSkuIik7CisKK3N0YXRpYyBpbnQgYXVkaW9fc3RkOworbW9kdWxlX3BhcmFtKGF1ZGlvX3N0ZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYXVkaW9fc3RkLCAiQXVkaW8gc3RhbmRhcmQuIFhDNDAwMCBhdWRpbyBkZWNvZGVyIGV4cGxpY2l0bHkgIgorCSJuZWVkcyB0byBrbm93IHdoYXQgYXVkaW8gc3RhbmRhcmQgaXMgbmVlZGVkIGZvciBzb21lIHZpZGVvIHN0YW5kYXJkcyAiCisJIndpdGggYXVkaW8gQTIgb3IgTklDQU0uIFRoZSB2YWxpZCBzZXR0aW5ncyBhcmUgYSBzdW0gb2Y6XG4iCisJIiAxOiB1c2UgTklDQU0vQiBvciBBMi9CIGluc3RlYWQgb2YgTklDQU0vQSBvciBBMi9BXG4iCisJIiAyOiB1c2UgQTIgaW5zdGVhZCBvZiBOSUNBTSBvciBCVFNDXG4iCisJIiA0OiB1c2UgU0VDQU0vSzMgaW5zdGVhZCBvZiBLMVxuIgorCSIgODogdXNlIFBBTC1EL0sgYXVkaW8gZm9yIFNFQ0FNLUQvS1xuIgorCSIxNjogdXNlIEZNIHJhZGlvIGlucHV0IDEgaW5zdGVhZCBvZiBpbnB1dCAyXG4iCisJIjMyOiB1c2UgbW9ubyBhdWRpbyAodGhlIGxvd2VyIHRocmVlIGJpdHMgYXJlIGlnbm9yZWQpIik7CisKK3N0YXRpYyBjaGFyIGZpcm13YXJlX25hbWVbMzBdOworbW9kdWxlX3BhcmFtX3N0cmluZyhmaXJtd2FyZV9uYW1lLCBmaXJtd2FyZV9uYW1lLCBzaXplb2YoZmlybXdhcmVfbmFtZSksIDApOworTU9EVUxFX1BBUk1fREVTQyhmaXJtd2FyZV9uYW1lLCAiRmlybXdhcmUgZmlsZSBuYW1lLiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgIgorCSJkZWZhdWx0IGZpcm13YXJlIG5hbWUuIik7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoeGM0MDAwX2xpc3RfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCk7CisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyA+PSBsZXZlbCkgXAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgInhjNDAwMCIsICMjIGFyZykKKworLyogc3RydWN0IGZvciBzdG9yaW5nIGZpcm13YXJlIHRhYmxlICovCitzdHJ1Y3QgZmlybXdhcmVfZGVzY3JpcHRpb24geworCXVuc2lnbmVkIGludCAgdHlwZTsKKwl2NGwyX3N0ZF9pZCAgIGlkOworCV9fdTE2ICAgICAgICAgaW50X2ZyZXE7CisJdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIGludCAgc2l6ZTsKK307CisKK3N0cnVjdCBmaXJtd2FyZV9wcm9wZXJ0aWVzIHsKKwl1bnNpZ25lZCBpbnQJdHlwZTsKKwl2NGwyX3N0ZF9pZAlpZDsKKwl2NGwyX3N0ZF9pZAlzdGRfcmVxOworCV9fdTE2CQlpbnRfZnJlcTsKKwl1bnNpZ25lZCBpbnQJc2NvZGVfdGFibGU7CisJaW50CQlzY29kZV9ucjsKK307CisKK3N0cnVjdCB4YzQwMDBfcHJpdiB7CisJc3RydWN0IHR1bmVyX2kyY19wcm9wcyBpMmNfcHJvcHM7CisJc3RydWN0IGxpc3RfaGVhZCBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdDsKKwlzdHJ1Y3QgZmlybXdhcmVfZGVzY3JpcHRpb24gKmZpcm07CisJaW50CWZpcm1fc2l6ZTsKKwl1MzIJaWZfa2h6OworCXUzMglmcmVxX2h6OworCXUzMgliYW5kd2lkdGg7CisJdTgJdmlkZW9fc3RhbmRhcmQ7CisJdTgJcmZfbW9kZTsKKwl1OAlkZWZhdWx0X3BtOworCXU4CWR2Yl9hbXBsaXR1ZGU7CisJdTgJc2V0X3Ntb290aGVkY3ZiczsKKwl1OAlpZ25vcmVfaTJjX3dyaXRlX2Vycm9yczsKKwlfX3UxNglmaXJtX3ZlcnNpb247CisJc3RydWN0IGZpcm13YXJlX3Byb3BlcnRpZXMgY3VyX2Z3OworCV9fdTE2CWh3bW9kZWw7CisJX191MTYJaHd2ZXJzOworCXN0cnVjdCBtdXRleAlsb2NrOworfTsKKworI2RlZmluZSBYQzQwMDBfQVVESU9fU1REX0IJCSAxCisjZGVmaW5lIFhDNDAwMF9BVURJT19TVERfQTIJCSAyCisjZGVmaW5lIFhDNDAwMF9BVURJT19TVERfSzMJCSA0CisjZGVmaW5lIFhDNDAwMF9BVURJT19TVERfTAkJIDgKKyNkZWZpbmUgWEM0MDAwX0FVRElPX1NURF9JTlBVVDEJCTE2CisjZGVmaW5lIFhDNDAwMF9BVURJT19TVERfTU9OTwkJMzIKKworI2RlZmluZSBYQzQwMDBfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLXhjNDAwMC0xLjQuZnciCisKKy8qIE1pc2MgRGVmaW5lcyAqLworI2RlZmluZSBNQVhfVFZfU1RBTkRBUkQJCQkyNAorI2RlZmluZSBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSAkJNjQKKyNkZWZpbmUgWENfUE9XRVJFRF9ET1dOCQkJMHg4MDAwMDAwMFUKKworLyogU2lnbmFsIFR5cGVzICovCisjZGVmaW5lIFhDX1JGX01PREVfQUlSCQkJMAorI2RlZmluZSBYQ19SRl9NT0RFX0NBQkxFCQkxCisKKy8qIFByb2R1Y3QgaWQgKi8KKyNkZWZpbmUgWENfUFJPRFVDVF9JRF9GV19OT1RfTE9BREVECTB4MjAwMAorI2RlZmluZSBYQ19QUk9EVUNUX0lEX1hDNDAwMAkJMHgwRkEwCisjZGVmaW5lIFhDX1BST0RVQ1RfSURfWEM0MTAwCQkweDEwMDQKKworLyogUmVnaXN0ZXJzIChXcml0ZS1vbmx5KSAqLworI2RlZmluZSBYUkVHX0lOSVQgICAgICAgICAweDAwCisjZGVmaW5lIFhSRUdfVklERU9fTU9ERSAgIDB4MDEKKyNkZWZpbmUgWFJFR19BVURJT19NT0RFICAgMHgwMgorI2RlZmluZSBYUkVHX1JGX0ZSRVEgICAgICAweDAzCisjZGVmaW5lIFhSRUdfRF9DT0RFICAgICAgIDB4MDQKKyNkZWZpbmUgWFJFR19ESVJFQ1RTSVRUSU5HX01PREUgMHgwNQorI2RlZmluZSBYUkVHX1NFRUtfTU9ERSAgICAweDA2CisjZGVmaW5lIFhSRUdfUE9XRVJfRE9XTiAgIDB4MDgKKyNkZWZpbmUgWFJFR19TSUdOQUxTT1VSQ0UgMHgwQQorI2RlZmluZSBYUkVHX1NNT09USEVEQ1ZCUyAweDBFCisjZGVmaW5lIFhSRUdfQU1QTElUVURFICAgIDB4MTAKKworLyogUmVnaXN0ZXJzIChSZWFkLW9ubHkpICovCisjZGVmaW5lIFhSRUdfQURDX0VOViAgICAgIDB4MDAKKyNkZWZpbmUgWFJFR19RVUFMSVRZICAgICAgMHgwMQorI2RlZmluZSBYUkVHX0ZSQU1FX0xJTkVTICAweDAyCisjZGVmaW5lIFhSRUdfSFNZTkNfRlJFUSAgIDB4MDMKKyNkZWZpbmUgWFJFR19MT0NLICAgICAgICAgMHgwNAorI2RlZmluZSBYUkVHX0ZSRVFfRVJST1IgICAweDA1CisjZGVmaW5lIFhSRUdfU05SICAgICAgICAgIDB4MDYKKyNkZWZpbmUgWFJFR19WRVJTSU9OICAgICAgMHgwNworI2RlZmluZSBYUkVHX1BST0RVQ1RfSUQgICAweDA4CisKKy8qCisgICBCYXNpYyBmaXJtd2FyZSBkZXNjcmlwdGlvbi4gVGhpcyB3aWxsIHJlbWFpbiB3aXRoCisgICB0aGUgZHJpdmVyIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgorCisgICBUaGlzIHJlcHJlc2VudHMgYW4gSTJDIGZpcm13YXJlIGZpbGUgZW5jb2RlZCBhcyBhCisgICBzdHJpbmcgb2YgdW5zaWduZWQgY2hhci4gRm9ybWF0IGlzIGFzIGZvbGxvd3M6CisKKyAgIGNoYXJbMCAgXT1sZW4wX01TQiAgLT4gbGVuID0gbGVuX01TQiAqIDI1NiArIGxlbl9MU0IKKyAgIGNoYXJbMSAgXT1sZW4wX0xTQiAgLT4gbGVuZ3RoIG9mIGZpcnN0IHdyaXRlIHRyYW5zYWN0aW9uCisgICBjaGFyWzIgIF09ZGF0YTAgLT4gZmlyc3QgYnl0ZSB0byBiZSBzZW50CisgICBjaGFyWzMgIF09ZGF0YTEKKyAgIGNoYXJbNCAgXT1kYXRhMgorICAgY2hhclsgICBdPS4uLgorICAgY2hhcltNICBdPWRhdGFOICAtPiBsYXN0IGJ5dGUgdG8gYmUgc2VudAorICAgY2hhcltNKzFdPWxlbjFfTVNCICAtPiBsZW4gPSBsZW5fTVNCICogMjU2ICsgbGVuX0xTQgorICAgY2hhcltNKzJdPWxlbjFfTFNCICAtPiBsZW5ndGggb2Ygc2Vjb25kIHdyaXRlIHRyYW5zYWN0aW9uCisgICBjaGFyW00rM109ZGF0YTAKKyAgIGNoYXJbTSs0XT1kYXRhMQorICAgLi4uCisgICBldGMuCisKKyAgIFRoZSBbbGVuXSB2YWx1ZSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKworICAgbGVuPSBsZW5fTVNCIF8gbGVuX0xTQgorICAgbGVuPTExMTFfMTExMV8xMTExXzExMTEgICA6IEVuZCBvZiBJMkNfU0VRVUVOQ0UKKyAgIGxlbj0wMDAwXzAwMDBfMDAwMF8wMDAwICAgOiBSZXNldCBjb21tYW5kOiBEbyBoYXJkd2FyZSByZXNldAorICAgbGVuPTBOTk5fTk5OTl9OTk5OX05OTk4gICA6IE5vcm1hbCB0cmFuc2FjdGlvbjogbnVtYmVyIG9mIGJ5dGVzID0gezE6MzI3NjcpCisgICBsZW49MVdXV19XV1dXX1dXV1dfV1dXVyAgIDogV2FpdCBjb21tYW5kOiB3YWl0IGZvciB7MTozMjc2N30gbXMKKworICAgRm9yIHRoZSBSRVNFVCBhbmQgV0FJVCBjb21tYW5kcywgdGhlIHR3byBmb2xsb3dpbmcgYnl0ZXMgd2lsbCBjb250YWluCisgICBpbW1lZGlhdGVseSB0aGUgbGVuZ3RoIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNhY3Rpb24uCisqLworCitzdHJ1Y3QgWENfVFZfU1RBTkRBUkQgeworCWNvbnN0IGNoYXIgICpOYW1lOworCXUxNgkgICAgYXVkaW9fbW9kZTsKKwl1MTYJICAgIHZpZGVvX21vZGU7CisJdTE2CSAgICBpbnRfZnJlcTsKK307CisKKy8qIFR1bmVyIHN0YW5kYXJkcyAqLworI2RlZmluZSBYQzQwMDBfTU5fTlRTQ19QQUxfQlRTQwkJMAorI2RlZmluZSBYQzQwMDBfTU5fTlRTQ19QQUxfQTIJCTEKKyNkZWZpbmUgWEM0MDAwX01OX05UU0NfUEFMX0VJQUoJCTIKKyNkZWZpbmUgWEM0MDAwX01OX05UU0NfUEFMX01vbm8JCTMKKyNkZWZpbmUgWEM0MDAwX0JHX1BBTF9BMgkJNAorI2RlZmluZSBYQzQwMDBfQkdfUEFMX05JQ0FNCQk1CisjZGVmaW5lIFhDNDAwMF9CR19QQUxfTU9OTwkJNgorI2RlZmluZSBYQzQwMDBfSV9QQUxfTklDQU0JCTcKKyNkZWZpbmUgWEM0MDAwX0lfUEFMX05JQ0FNX01PTk8JCTgKKyNkZWZpbmUgWEM0MDAwX0RLX1BBTF9BMgkJOQorI2RlZmluZSBYQzQwMDBfREtfUEFMX05JQ0FNCQkxMAorI2RlZmluZSBYQzQwMDBfREtfUEFMX01PTk8JCTExCisjZGVmaW5lIFhDNDAwMF9ES19TRUNBTV9BMkRLMQkJMTIKKyNkZWZpbmUgWEM0MDAwX0RLX1NFQ0FNX0EyTERLMwkJMTMKKyNkZWZpbmUgWEM0MDAwX0RLX1NFQ0FNX0EyTU9OTwkJMTQKKyNkZWZpbmUgWEM0MDAwX0RLX1NFQ0FNX05JQ0FNCQkxNQorI2RlZmluZSBYQzQwMDBfTF9TRUNBTV9OSUNBTQkJMTYKKyNkZWZpbmUgWEM0MDAwX0xDX1NFQ0FNX05JQ0FNCQkxNworI2RlZmluZSBYQzQwMDBfRFRWNgkJCTE4CisjZGVmaW5lIFhDNDAwMF9EVFY4CQkJMTkKKyNkZWZpbmUgWEM0MDAwX0RUVjdfOAkJCTIwCisjZGVmaW5lIFhDNDAwMF9EVFY3CQkJMjEKKyNkZWZpbmUgWEM0MDAwX0ZNX1JhZGlvX0lOUFVUMgkJMjIKKyNkZWZpbmUgWEM0MDAwX0ZNX1JhZGlvX0lOUFVUMQkJMjMKKworc3RhdGljIHN0cnVjdCBYQ19UVl9TVEFOREFSRCB4YzQwMDBfc3RhbmRhcmRbTUFYX1RWX1NUQU5EQVJEXSA9IHsKKwl7Ik0vTi1OVFNDL1BBTC1CVFNDIiwJMHgwMDAwLCAweDgwQTAsIDQ1MDB9LAorCXsiTS9OLU5UU0MvUEFMLUEyIiwJMHgwMDAwLCAweDgwQTAsIDQ2MDB9LAorCXsiTS9OLU5UU0MvUEFMLUVJQUoiLAkweDAwNDAsIDB4ODBBMCwgNDUwMH0sCisJeyJNL04tTlRTQy9QQUwtTW9ubyIsCTB4MDA3OCwgMHg4MEEwLCA0NTAwfSwKKwl7IkIvRy1QQUwtQTIiLAkJMHgwMDAwLCAweDgxNTksIDU2NDB9LAorCXsiQi9HLVBBTC1OSUNBTSIsCTB4MDAwNCwgMHg4MTU5LCA1NzQwfSwKKwl7IkIvRy1QQUwtTU9OTyIsCTB4MDA3OCwgMHg4MTU5LCA1NTAwfSwKKwl7IkktUEFMLU5JQ0FNIiwJCTB4MDA4MCwgMHg4MDQ5LCA2MjQwfSwKKwl7IkktUEFMLU5JQ0FNLU1PTk8iLAkweDAwNzgsIDB4ODA0OSwgNjAwMH0sCisJeyJEL0stUEFMLUEyIiwJCTB4MDAwMCwgMHg4MDQ5LCA2MzgwfSwKKwl7IkQvSy1QQUwtTklDQU0iLAkweDAwODAsIDB4ODA0OSwgNjIwMH0sCisJeyJEL0stUEFMLU1PTk8iLAkweDAwNzgsIDB4ODA0OSwgNjUwMH0sCisJeyJEL0stU0VDQU0tQTIgREsxIiwJMHgwMDAwLCAweDgwNDksIDYzNDB9LAorCXsiRC9LLVNFQ0FNLUEyIEwvREszIiwJMHgwMDAwLCAweDgwNDksIDYwMDB9LAorCXsiRC9LLVNFQ0FNLUEyIE1PTk8iLAkweDAwNzgsIDB4ODA0OSwgNjUwMH0sCisJeyJEL0stU0VDQU0tTklDQU0iLAkweDAwODAsIDB4ODA0OSwgNjIwMH0sCisJeyJMLVNFQ0FNLU5JQ0FNIiwJMHg4MDgwLCAweDAwMDksIDYyMDB9LAorCXsiTCctU0VDQU0tTklDQU0iLAkweDgwODAsIDB4NDAwOSwgNjIwMH0sCisJeyJEVFY2IiwJCTB4MDBDMCwgMHg4MDAyLCAgICAwfSwKKwl7IkRUVjgiLAkJMHgwMEMwLCAweDgwMEIsICAgIDB9LAorCXsiRFRWNy84IiwJCTB4MDBDMCwgMHg4MDFCLCAgICAwfSwKKwl7IkRUVjciLAkJMHgwMEMwLCAweDgwMDcsICAgIDB9LAorCXsiRk0gUmFkaW8tSU5QVVQyIiwJMHgwMDA4LCAweDk4MDAsIDEwNzAwfSwKKwl7IkZNIFJhZGlvLUlOUFVUMSIsCTB4MDAwOCwgMHg5MDAwLCAxMDcwMH0KK307CisKK3N0YXRpYyBpbnQgeGM0MDAwX3JlYWRyZWcoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgcmVnLCB1MTYgKnZhbCk7CitzdGF0aWMgaW50IHhjNDAwMF90dW5lcl9yZXNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CitzdGF0aWMgdm9pZCB4Y19kZWJ1Z19kdW1wKHN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdik7CisKK3N0YXRpYyBpbnQgeGNfc2VuZF9pMmNfZGF0YShzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYsIHU4ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAorCQkJICAgICAgIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19wcm9wcy5hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCWlmIChwcml2LT5pZ25vcmVfaTJjX3dyaXRlX2Vycm9ycyA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhjNDAwMDogSTJDIHdyaXRlIGZhaWxlZCAobGVuPSVpKVxuIiwKKwkJCSAgICAgICBsZW4pOworCQkJaWYgKGxlbiA9PSA0KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJieXRlcyAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBidWZbMF0sCisJCQkJICAgICAgIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCQkJfQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGM0MDAwX3R1bmVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQ7CisKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPmNhbGxiYWNrKSB7CisJCXJldCA9IGZlLT5jYWxsYmFjaygoKGZlLT5kdmIpICYmIChmZS0+ZHZiLT5wcml2KSkgPworCQkJCQkgICBmZS0+ZHZiLT5wcml2IDoKKwkJCQkJICAgcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmFsZ29fZGF0YSwKKwkJCQkJICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwKKwkJCQkJICAgWEM0MDAwX1RVTkVSX1JFU0VULCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4YzQwMDA6IHJlc2V0IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAieGM0MDAwOiBubyB0dW5lciByZXNldCBjYWxsYmFjayBmdW5jdGlvbiwgIgorCQkJCSJmYXRhbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4Y193cml0ZV9yZWcoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgcmVnQWRkciwgdTE2IGkyY0RhdGEpCit7CisJdTggYnVmWzRdOworCWludCByZXN1bHQ7CisKKwlidWZbMF0gPSAocmVnQWRkciA+PiA4KSAmIDB4RkY7CisJYnVmWzFdID0gcmVnQWRkciAmIDB4RkY7CisJYnVmWzJdID0gKGkyY0RhdGEgPj4gOCkgJiAweEZGOworCWJ1ZlszXSA9IGkyY0RhdGEgJiAweEZGOworCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLCA0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgeGNfbG9hZF9pMmNfc2VxdWVuY2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGNvbnN0IHU4ICppMmNfc2VxdWVuY2UpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpbnQgaSwgbmJ5dGVzX3RvX3NlbmQsIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBwb3MsIGluZGV4OworCXU4IGJ1ZltYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSF07CisKKwlpbmRleCA9IDA7CisJd2hpbGUgKChpMmNfc2VxdWVuY2VbaW5kZXhdICE9IDB4RkYpIHx8CisJCShpMmNfc2VxdWVuY2VbaW5kZXggKyAxXSAhPSAweEZGKSkgeworCQlsZW4gPSBpMmNfc2VxdWVuY2VbaW5kZXhdICogMjU2ICsgaTJjX3NlcXVlbmNlW2luZGV4KzFdOworCQlpZiAobGVuID09IDB4MDAwMCkgeworCQkJLyogUkVTRVQgY29tbWFuZCAqLworCQkJLyogTk9URTogdGhpcyBpcyBpZ25vcmVkLCBhcyB0aGUgcmVzZXQgY2FsbGJhY2sgd2FzICovCisJCQkvKiBhbHJlYWR5IGNhbGxlZCBieSBjaGVja19maXJtd2FyZSgpICovCisJCQlpbmRleCArPSAyOworCQl9IGVsc2UgaWYgKGxlbiAmIDB4ODAwMCkgeworCQkJLyogV0FJVCBjb21tYW5kICovCisJCQltc2xlZXAobGVuICYgMHg3RkZGKTsKKwkJCWluZGV4ICs9IDI7CisJCX0gZWxzZSB7CisJCQkvKiBTZW5kIGkyYyBkYXRhIHdoaWxzdCBlbnN1cmluZyBpbmRpdmlkdWFsIHRyYW5zYWN0aW9ucworCQkJICogZG8gbm90IGV4Y2VlZCBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSCBieXRlcy4KKwkJCSAqLworCQkJaW5kZXggKz0gMjsKKwkJCWJ1ZlswXSA9IGkyY19zZXF1ZW5jZVtpbmRleF07CisJCQlidWZbMV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyAxXTsKKwkJCXBvcyA9IDI7CisJCQl3aGlsZSAocG9zIDwgbGVuKSB7CisJCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKQorCQkJCQluYnl0ZXNfdG9fc2VuZCA9CisJCQkJCQlYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSDsKKwkJCQllbHNlCisJCQkJCW5ieXRlc190b19zZW5kID0gKGxlbiAtIHBvcyArIDIpOworCQkJCWZvciAoaSA9IDI7IGkgPCBuYnl0ZXNfdG9fc2VuZDsgaSsrKSB7CisJCQkJCWJ1ZltpXSA9IGkyY19zZXF1ZW5jZVtpbmRleCArIHBvcyArCisJCQkJCQlpIC0gMl07CisJCQkJfQorCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLAorCQkJCQluYnl0ZXNfdG9fc2VuZCk7CisKKwkJCQlpZiAocmVzdWx0ICE9IDApCisJCQkJCXJldHVybiByZXN1bHQ7CisKKwkJCQlwb3MgKz0gbmJ5dGVzX3RvX3NlbmQgLSAyOworCQkJfQorCQkJaW5kZXggKz0gbGVuOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhjX3NldF90dl9zdGFuZGFyZChzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYsCisJdTE2IHZpZGVvX21vZGUsIHUxNiBhdWRpb19tb2RlKQoreworCWludCByZXQ7CisJZHByaW50aygxLCAiJXMoMHglMDR4LDB4JTA0eClcbiIsIF9fZnVuY19fLCB2aWRlb19tb2RlLCBhdWRpb19tb2RlKTsKKwlkcHJpbnRrKDEsICIlcygpIFN0YW5kYXJkID0gJXNcbiIsCisJCV9fZnVuY19fLAorCQl4YzQwMDBfc3RhbmRhcmRbcHJpdi0+dmlkZW9fc3RhbmRhcmRdLk5hbWUpOworCisJLyogRG9uJ3QgY29tcGxhaW4gd2hlbiB0aGUgcmVxdWVzdCBmYWlscyBiZWNhdXNlIG9mIGkyYyBzdHJldGNoaW5nICovCisJcHJpdi0+aWdub3JlX2kyY193cml0ZV9lcnJvcnMgPSAxOworCisJcmV0ID0geGNfd3JpdGVfcmVnKHByaXYsIFhSRUdfVklERU9fTU9ERSwgdmlkZW9fbW9kZSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSB4Y193cml0ZV9yZWcocHJpdiwgWFJFR19BVURJT19NT0RFLCBhdWRpb19tb2RlKTsKKworCXByaXYtPmlnbm9yZV9pMmNfd3JpdGVfZXJyb3JzID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeGNfc2V0X3NpZ25hbF9zb3VyY2Uoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgcmZfbW9kZSkKK3sKKwlkcHJpbnRrKDEsICIlcyglZCkgU291cmNlID0gJXNcbiIsIF9fZnVuY19fLCByZl9tb2RlLAorCQlyZl9tb2RlID09IFhDX1JGX01PREVfQUlSID8gIkFOVEVOTkEiIDogIkNBQkxFIik7CisKKwlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKSB7CisJCXJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOworCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpLCBJbnZhbGlkIG1vZGUsIGRlZmF1bHRpbmcgdG8gQ0FCTEUiLAorCQkJX19mdW5jX18pOworCX0KKwlyZXR1cm4geGNfd3JpdGVfcmVnKHByaXYsIFhSRUdfU0lHTkFMU09VUkNFLCByZl9tb2RlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdmJfdHVuZXJfb3BzIHhjNDAwMF90dW5lcl9vcHM7CisKK3N0YXRpYyBpbnQgeGNfc2V0X3JmX2ZyZXF1ZW5jeShzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYsIHUzMiBmcmVxX2h6KQoreworCXUxNiBmcmVxX2NvZGU7CisKKwlkcHJpbnRrKDEsICIlcygldSlcbiIsIF9fZnVuY19fLCBmcmVxX2h6KTsKKworCWlmICgoZnJlcV9oeiA+IHhjNDAwMF90dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWF4KSB8fAorCSAgICAoZnJlcV9oeiA8IHhjNDAwMF90dW5lcl9vcHMuaW5mby5mcmVxdWVuY3lfbWluKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcmVxX2NvZGUgPSAodTE2KShmcmVxX2h6IC8gMTU2MjUpOworCisJLyogV0FTOiBTdGFydGluZyBpbiBmaXJtd2FyZSB2ZXJzaW9uIDEuMS40NCwgWGNlaXZlIHJlY29tbWVuZHMgdXNpbmcgdGhlCisJICAgRklORVJGUkVRIGZvciBhbGwgbm9ybWFsIHR1bmluZyAodGhlIGRvYyBpbmRpY2F0ZXMgcmVnIDB4MDMgc2hvdWxkCisJICAgb25seSBiZSB1c2VkIGZvciBmYXN0IHNjYW5uaW5nIGZvciBjaGFubmVsIGxvY2spICovCisJLyogV0FTOiBYUkVHX0ZJTkVSRlJFUSAqLworCXJldHVybiB4Y193cml0ZV9yZWcocHJpdiwgWFJFR19SRl9GUkVRLCBmcmVxX2NvZGUpOworfQorCitzdGF0aWMgaW50IHhjX2dldF9hZGNfZW52ZWxvcGUoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgKmFkY19lbnZlbG9wZSkKK3sKKwlyZXR1cm4geGM0MDAwX3JlYWRyZWcocHJpdiwgWFJFR19BRENfRU5WLCBhZGNfZW52ZWxvcGUpOworfQorCitzdGF0aWMgaW50IHhjX2dldF9mcmVxdWVuY3lfZXJyb3Ioc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MzIgKmZyZXFfZXJyb3JfaHopCit7CisJaW50IHJlc3VsdDsKKwl1MTYgcmVnRGF0YTsKKwl1MzIgdG1wOworCisJcmVzdWx0ID0geGM0MDAwX3JlYWRyZWcocHJpdiwgWFJFR19GUkVRX0VSUk9SLCAmcmVnRGF0YSk7CisJaWYgKHJlc3VsdCAhPSAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJdG1wID0gKHUzMilyZWdEYXRhICYgMHhGRkZGVTsKKwl0bXAgPSAodG1wIDwgMHg4MDAwVSA/IHRtcCA6IDB4MTAwMDBVIC0gdG1wKTsKKwkoKmZyZXFfZXJyb3JfaHopID0gdG1wICogMTU2MjU7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB4Y19nZXRfbG9ja19zdGF0dXMoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgKmxvY2tfc3RhdHVzKQoreworCXJldHVybiB4YzQwMDBfcmVhZHJlZyhwcml2LCBYUkVHX0xPQ0ssIGxvY2tfc3RhdHVzKTsKK30KKworc3RhdGljIGludCB4Y19nZXRfdmVyc2lvbihzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYsCisJdTggKmh3X21ham9ydmVyc2lvbiwgdTggKmh3X21pbm9ydmVyc2lvbiwKKwl1OCAqZndfbWFqb3J2ZXJzaW9uLCB1OCAqZndfbWlub3J2ZXJzaW9uKQoreworCXUxNiBkYXRhOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB4YzQwMDBfcmVhZHJlZyhwcml2LCBYUkVHX1ZFUlNJT04sICZkYXRhKTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkoKmh3X21ham9ydmVyc2lvbikgPSAoZGF0YSA+PiAxMikgJiAweDBGOworCSgqaHdfbWlub3J2ZXJzaW9uKSA9IChkYXRhID4+ICA4KSAmIDB4MEY7CisJKCpmd19tYWpvcnZlcnNpb24pID0gKGRhdGEgPj4gIDQpICYgMHgwRjsKKwkoKmZ3X21pbm9ydmVyc2lvbikgPSBkYXRhICYgMHgwRjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhjX2dldF9oc3luY19mcmVxKHN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiwgdTMyICpoc3luY19mcmVxX2h6KQoreworCXUxNiByZWdEYXRhOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB4YzQwMDBfcmVhZHJlZyhwcml2LCBYUkVHX0hTWU5DX0ZSRVEsICZyZWdEYXRhKTsKKwlpZiAocmVzdWx0ICE9IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkoKmhzeW5jX2ZyZXFfaHopID0gKChyZWdEYXRhICYgMHgwZmZmKSAqIDc2MykvMTAwOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgeGNfZ2V0X2ZyYW1lX2xpbmVzKHN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiwgdTE2ICpmcmFtZV9saW5lcykKK3sKKwlyZXR1cm4geGM0MDAwX3JlYWRyZWcocHJpdiwgWFJFR19GUkFNRV9MSU5FUywgZnJhbWVfbGluZXMpOworfQorCitzdGF0aWMgaW50IHhjX2dldF9xdWFsaXR5KHN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiwgdTE2ICpxdWFsaXR5KQoreworCXJldHVybiB4YzQwMDBfcmVhZHJlZyhwcml2LCBYUkVHX1FVQUxJVFksIHF1YWxpdHkpOworfQorCitzdGF0aWMgdTE2IHhjX3dhaXRfZm9yX2xvY2soc3RydWN0IHhjNDAwMF9wcml2ICpwcml2KQoreworCXUxNglsb2NrX3N0YXRlID0gMDsKKwlpbnQJd2F0Y2hkb2dfY291bnQgPSA0MDsKKworCXdoaWxlICgobG9ja19zdGF0ZSA9PSAwKSAmJiAod2F0Y2hkb2dfY291bnQgPiAwKSkgeworCQl4Y19nZXRfbG9ja19zdGF0dXMocHJpdiwgJmxvY2tfc3RhdGUpOworCQlpZiAobG9ja19zdGF0ZSAhPSAxKSB7CisJCQltc2xlZXAoNSk7CisJCQl3YXRjaGRvZ19jb3VudC0tOworCQl9CisJfQorCXJldHVybiBsb2NrX3N0YXRlOworfQorCitzdGF0aWMgaW50IHhjX3R1bmVfY2hhbm5lbChzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYsIHUzMiBmcmVxX2h6KQoreworCWludAlmb3VuZCA9IDE7CisJaW50CXJlc3VsdDsKKworCWRwcmludGsoMSwgIiVzKCV1KVxuIiwgX19mdW5jX18sIGZyZXFfaHopOworCisJLyogRG9uJ3QgY29tcGxhaW4gd2hlbiB0aGUgcmVxdWVzdCBmYWlscyBiZWNhdXNlIG9mIGkyYyBzdHJldGNoaW5nICovCisJcHJpdi0+aWdub3JlX2kyY193cml0ZV9lcnJvcnMgPSAxOworCXJlc3VsdCA9IHhjX3NldF9yZl9mcmVxdWVuY3kocHJpdiwgZnJlcV9oeik7CisJcHJpdi0+aWdub3JlX2kyY193cml0ZV9lcnJvcnMgPSAwOworCisJaWYgKHJlc3VsdCAhPSAwKQorCQlyZXR1cm4gMDsKKworCS8qIHdhaXQgZm9yIGxvY2sgb25seSBpbiBhbmFsb2cgVFYgbW9kZSAqLworCWlmICgocHJpdi0+Y3VyX2Z3LnR5cGUgJiAoRk0gfCBEVFY2IHwgRFRWNyB8IERUVjc4IHwgRFRWOCkpID09IDApIHsKKwkJaWYgKHhjX3dhaXRfZm9yX2xvY2socHJpdikgIT0gMSkKKwkJCWZvdW5kID0gMDsKKwl9CisKKwkvKiBXYWl0IGZvciBzdGF0cyB0byBzdGFiaWxpemUuCisJICogRnJhbWUgTGluZXMgbmVlZHMgdHdvIGZyYW1lIHRpbWVzIGFmdGVyIGluaXRpYWwgbG9jaworCSAqIGJlZm9yZSBpdCBpcyB2YWxpZC4KKwkgKi8KKwltc2xlZXAoZGVidWcgPyAxMDAgOiAxMCk7CisKKwlpZiAoZGVidWcpCisJCXhjX2RlYnVnX2R1bXAocHJpdik7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbnQgeGM0MDAwX3JlYWRyZWcoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2LCB1MTYgcmVnLCB1MTYgKnZhbCkKK3sKKwl1OCBidWZbMl0gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07CisJdTggYnZhbFsyXSA9IHsgMCwgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAorCQkJLmZsYWdzID0gMCwgLmJ1ZiA9ICZidWZbMF0sIC5sZW4gPSAyIH0sCisJCXsgLmFkZHIgPSBwcml2LT5pMmNfcHJvcHMuYWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmJ2YWxbMF0sIC5sZW4gPSAyIH0sCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsIG1zZywgMikgIT0gMikgeworCQlwcmludGsoS0VSTl9FUlIgInhjNDAwMDogSTJDIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJKnZhbCA9IChidmFsWzBdIDw8IDgpIHwgYnZhbFsxXTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBkdW1wX2Zpcm1fdHlwZSh0KQlkdW1wX2Zpcm1fdHlwZV9hbmRfaW50X2ZyZXEodCwgMCkKK3N0YXRpYyB2b2lkIGR1bXBfZmlybV90eXBlX2FuZF9pbnRfZnJlcSh1bnNpZ25lZCBpbnQgdHlwZSwgdTE2IGludF9mcmVxKQoreworCSBpZiAodHlwZSAmIEJBU0UpCisJCXByaW50ayhLRVJOX0NPTlQgIkJBU0UgIik7CisJIGlmICh0eXBlICYgSU5JVDEpCisJCXByaW50ayhLRVJOX0NPTlQgIklOSVQxICIpOworCSBpZiAodHlwZSAmIEY4TUhaKQorCQlwcmludGsoS0VSTl9DT05UICJGOE1IWiAiKTsKKwkgaWYgKHR5cGUgJiBNVFMpCisJCXByaW50ayhLRVJOX0NPTlQgIk1UUyAiKTsKKwkgaWYgKHR5cGUgJiBEMjYyMCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRDI2MjAgIik7CisJIGlmICh0eXBlICYgRDI2MzMpCisJCXByaW50ayhLRVJOX0NPTlQgIkQyNjMzICIpOworCSBpZiAodHlwZSAmIERUVjYpCisJCXByaW50ayhLRVJOX0NPTlQgIkRUVjYgIik7CisJIGlmICh0eXBlICYgUUFNKQorCQlwcmludGsoS0VSTl9DT05UICJRQU0gIik7CisJIGlmICh0eXBlICYgRFRWNykKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRFRWNyAiKTsKKwkgaWYgKHR5cGUgJiBEVFY3OCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRFRWNzggIik7CisJIGlmICh0eXBlICYgRFRWOCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRFRWOCAiKTsKKwkgaWYgKHR5cGUgJiBGTSkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRk0gIik7CisJIGlmICh0eXBlICYgSU5QVVQxKQorCQlwcmludGsoS0VSTl9DT05UICJJTlBVVDEgIik7CisJIGlmICh0eXBlICYgTENEKQorCQlwcmludGsoS0VSTl9DT05UICJMQ0QgIik7CisJIGlmICh0eXBlICYgTk9HRCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiTk9HRCAiKTsKKwkgaWYgKHR5cGUgJiBNT05PKQorCQlwcmludGsoS0VSTl9DT05UICJNT05PICIpOworCSBpZiAodHlwZSAmIEFUU0MpCisJCXByaW50ayhLRVJOX0NPTlQgIkFUU0MgIik7CisJIGlmICh0eXBlICYgSUYpCisJCXByaW50ayhLRVJOX0NPTlQgIklGICIpOworCSBpZiAodHlwZSAmIExHNjApCisJCXByaW50ayhLRVJOX0NPTlQgIkxHNjAgIik7CisJIGlmICh0eXBlICYgQVRJNjM4KQorCQlwcmludGsoS0VSTl9DT05UICJBVEk2MzggIik7CisJIGlmICh0eXBlICYgT1JFTjUzOCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiT1JFTjUzOCAiKTsKKwkgaWYgKHR5cGUgJiBPUkVOMzYpCisJCXByaW50ayhLRVJOX0NPTlQgIk9SRU4zNiAiKTsKKwkgaWYgKHR5cGUgJiBUT1lPVEEzODgpCisJCXByaW50ayhLRVJOX0NPTlQgIlRPWU9UQTM4OCAiKTsKKwkgaWYgKHR5cGUgJiBUT1lPVEE3OTQpCisJCXByaW50ayhLRVJOX0NPTlQgIlRPWU9UQTc5NCAiKTsKKwkgaWYgKHR5cGUgJiBESUJDT001MikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiRElCQ09NNTIgIik7CisJIGlmICh0eXBlICYgWkFSTElOSzQ1NikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiWkFSTElOSzQ1NiAiKTsKKwkgaWYgKHR5cGUgJiBDSElOQSkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiQ0hJTkEgIik7CisJIGlmICh0eXBlICYgRjZNSFopCisJCXByaW50ayhLRVJOX0NPTlQgIkY2TUhaICIpOworCSBpZiAodHlwZSAmIElOUFVUMikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiSU5QVVQyICIpOworCSBpZiAodHlwZSAmIFNDT0RFKQorCQlwcmludGsoS0VSTl9DT05UICJTQ09ERSAiKTsKKwkgaWYgKHR5cGUgJiBIQVNfSUYpCisJCXByaW50ayhLRVJOX0NPTlQgIkhBU19JRl8lZCAiLCBpbnRfZnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vla19maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludAkJaSwgYmVzdF9pID0gLTE7CisJdW5zaWduZWQgaW50CWJlc3RfbnJfZGlmZnMgPSAyNTVVOworCisJaWYgKCFwcml2LT5maXJtKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IhIGZpcm13YXJlIG5vdCBsb2FkZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKCh0eXBlICYgflNDT0RFKSA9PSAwKSAmJiAoKmlkID09IDApKQorCQkqaWQgPSBWNEwyX1NURF9QQUw7CisKKwkvKiBTZWVrIGZvciBnZW5lcmljIHZpZGVvIHN0YW5kYXJkIG1hdGNoICovCisJZm9yIChpID0gMDsgaSA8IHByaXYtPmZpcm1fc2l6ZTsgaSsrKSB7CisJCXY0bDJfc3RkX2lkCWlkX2RpZmZfbWFzayA9CisJCQkocHJpdi0+ZmlybVtpXS5pZCBeICgqaWQpKSAmICgqaWQpOworCQl1bnNpZ25lZCBpbnQJdHlwZV9kaWZmX21hc2sgPQorCQkJKHByaXYtPmZpcm1baV0udHlwZSBeIHR5cGUpCisJCQkmIChCQVNFX1RZUEVTIHwgRFRWX1RZUEVTIHwgTENEIHwgTk9HRCB8IE1PTk8gfCBTQ09ERSk7CisJCXVuc2lnbmVkIGludAlucl9kaWZmczsKKworCQlpZiAodHlwZV9kaWZmX21hc2sKKwkJICAgICYgKEJBU0UgfCBJTklUMSB8IEZNIHwgRFRWNiB8IERUVjcgfCBEVFY3OCB8IERUVjggfCBTQ09ERSkpCisJCQljb250aW51ZTsKKworCQlucl9kaWZmcyA9IGh3ZWlnaHQ2NChpZF9kaWZmX21hc2spICsgaHdlaWdodDMyKHR5cGVfZGlmZl9tYXNrKTsKKwkJaWYgKCFucl9kaWZmcykJLyogU3VwcG9ydHMgYWxsIHRoZSByZXF1ZXN0ZWQgc3RhbmRhcmRzICovCisJCQlnb3RvIGZvdW5kOworCisJCWlmIChucl9kaWZmcyA8IGJlc3RfbnJfZGlmZnMpIHsKKwkJCWJlc3RfbnJfZGlmZnMgPSBucl9kaWZmczsKKwkJCWJlc3RfaSA9IGk7CisJCX0KKwl9CisKKwkvKiBGSVhNRTogV291bGQgbWFrZSBzZW5zZSB0byBzZWVrIGZvciB0eXBlICJoaW50IiBtYXRjaCA/ICovCisJaWYgKGJlc3RfaSA8IDApIHsKKwkJaSA9IC1FTk9FTlQ7CisJCWdvdG8gcmV0OworCX0KKworCWlmIChiZXN0X25yX2RpZmZzID4gMFUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNlbGVjdGluZyBiZXN0IG1hdGNoaW5nIGZpcm13YXJlICgldSBiaXRzIGRpZmZlcikgZm9yICIKKwkJICAgICAgICJ0eXBlPSgleCksIGlkICUwMTZsbHg6XG4iLAorCQkgICAgICAgYmVzdF9ucl9kaWZmcywgdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqaWQpOworCQlpID0gYmVzdF9pOworCX0KKworZm91bmQ6CisJKmlkID0gcHJpdi0+ZmlybVtpXS5pZDsKKworcmV0OgorCWlmIChkZWJ1ZykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgZmlybXdhcmUgZm9yIHR5cGU9IiwKKwkJICAgICAgIChpIDwgMCkgPyAiQ2FuJ3QgZmluZCIgOiAiRm91bmQiKTsKKwkJZHVtcF9maXJtX3R5cGUodHlwZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIoJXgpLCBpZCAlMDE2bGx4LlxuIiwgdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqaWQpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBsb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCSB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50ICAgICAgICAgICAgICAgIHBvcywgcmM7CisJdW5zaWduZWQgY2hhciAgICAgICpwOworCisJcG9zID0gc2Vla19maXJtd2FyZShmZSwgdHlwZSwgaWQpOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gcG9zOworCisJcCA9IHByaXYtPmZpcm1bcG9zXS5wdHI7CisKKwkvKiBEb24ndCBjb21wbGFpbiB3aGVuIHRoZSByZXF1ZXN0IGZhaWxzIGJlY2F1c2Ugb2YgaTJjIHN0cmV0Y2hpbmcgKi8KKwlwcml2LT5pZ25vcmVfaTJjX3dyaXRlX2Vycm9ycyA9IDE7CisKKwlyYyA9IHhjX2xvYWRfaTJjX3NlcXVlbmNlKGZlLCBwKTsKKworCXByaXYtPmlnbm9yZV9pMmNfd3JpdGVfZXJyb3JzID0gMDsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB4YzQwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyAgID0gTlVMTDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICAgKnAsICplbmRwOworCWludCAgICAgICAgICAgICAgICAgICByYyA9IDA7CisJaW50CQkgICAgICBuLCBuX2FycmF5OworCWNoYXIJCSAgICAgIG5hbWVbMzNdOworCWNvbnN0IGNoYXIJICAgICAgKmZuYW1lOworCisJaWYgKGZpcm13YXJlX25hbWVbMF0gIT0gJ1wwJykKKwkJZm5hbWUgPSBmaXJtd2FyZV9uYW1lOworCWVsc2UKKwkJZm5hbWUgPSBYQzQwMDBfREVGQVVMVF9GSVJNV0FSRTsKKworCWRwcmludGsoMSwgIlJlYWRpbmcgZmlybXdhcmUgJXNcbiIsIGZuYW1lKTsKKwlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbmFtZSwgcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmRldi5wYXJlbnQpOworCWlmIChyYyA8IDApIHsKKwkJaWYgKHJjID09IC1FTk9FTlQpCisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaXJtd2FyZSAlcyBub3QgZm91bmQuXG4iLCBmbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgd2hpbGUgcmVxdWVzdGluZyBmaXJtd2FyZSAlc1xuIiwKKwkJCSAgICAgICByYywgZm5hbWUpOworCisJCXJldHVybiByYzsKKwl9CisJcCA9IGZ3LT5kYXRhOworCWVuZHAgPSBwICsgZnctPnNpemU7CisKKwlpZiAoZnctPnNpemUgPCBzaXplb2YobmFtZSkgLSAxICsgMiArIDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogZmlybXdhcmUgZmlsZSAlcyBoYXMgaW52YWxpZCBzaXplIVxuIiwKKwkJICAgICAgIGZuYW1lKTsKKwkJZ290byBjb3JydXB0OworCX0KKworCW1lbWNweShuYW1lLCBwLCBzaXplb2YobmFtZSkgLSAxKTsKKwluYW1lW3NpemVvZihuYW1lKSAtIDFdID0gJ1wwJzsKKwlwICs9IHNpemVvZihuYW1lKSAtIDE7CisKKwlwcml2LT5maXJtX3ZlcnNpb24gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCk7CisJcCArPSAyOworCisJbl9hcnJheSA9IGdldF91bmFsaWduZWRfbGUxNihwKTsKKwlwICs9IDI7CisKKwlkcHJpbnRrKDEsICJMb2FkaW5nICVkIGZpcm13YXJlIGltYWdlcyBmcm9tICVzLCB0eXBlOiAlcywgdmVyICVkLiVkXG4iLAorCQluX2FycmF5LCBmbmFtZSwgbmFtZSwKKwkJcHJpdi0+ZmlybV92ZXJzaW9uID4+IDgsIHByaXYtPmZpcm1fdmVyc2lvbiAmIDB4ZmYpOworCisJcHJpdi0+ZmlybSA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2LT5maXJtKSAqIG5fYXJyYXksIEdGUF9LRVJORUwpOworCWlmIChwcml2LT5maXJtID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIG1lbW9yeSB0byBsb2FkIGZpcm13YXJlIGZpbGUuXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCXByaXYtPmZpcm1fc2l6ZSA9IG5fYXJyYXk7CisKKwluID0gLTE7CisJd2hpbGUgKHAgPCBlbmRwKSB7CisJCV9fdTMyIHR5cGUsIHNpemU7CisJCXY0bDJfc3RkX2lkIGlkOworCQlfX3UxNiBpbnRfZnJlcSA9IDA7CisKKwkJbisrOworCQlpZiAobiA+PSBuX2FycmF5KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIk1vcmUgZmlybXdhcmUgaW1hZ2VzIGluIGZpbGUgdGhhbiAiCisJCQkgICAgICAgIndlcmUgZXhwZWN0ZWQhXG4iKTsKKwkJCWdvdG8gY29ycnVwdDsKKwkJfQorCisJCS8qIENoZWNrcyBpZiB0aGVyZSdzIGVub3VnaCBieXRlcyB0byByZWFkICovCisJCWlmIChlbmRwIC0gcCA8IHNpemVvZih0eXBlKSArIHNpemVvZihpZCkgKyBzaXplb2Yoc2l6ZSkpCisJCQlnb3RvIGhlYWRlcjsKKworCQl0eXBlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOworCQlwICs9IHNpemVvZih0eXBlKTsKKworCQlpZCA9IGdldF91bmFsaWduZWRfbGU2NChwKTsKKwkJcCArPSBzaXplb2YoaWQpOworCisJCWlmICh0eXBlICYgSEFTX0lGKSB7CisJCQlpbnRfZnJlcSA9IGdldF91bmFsaWduZWRfbGUxNihwKTsKKwkJCXAgKz0gc2l6ZW9mKGludF9mcmVxKTsKKwkJCWlmIChlbmRwIC0gcCA8IHNpemVvZihzaXplKSkKKwkJCQlnb3RvIGhlYWRlcjsKKwkJfQorCisJCXNpemUgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7CisJCXAgKz0gc2l6ZW9mKHNpemUpOworCisJCWlmICghc2l6ZSB8fCBzaXplID4gZW5kcCAtIHApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmlybXdhcmUgdHlwZSAoJXgpLCBpZCAlbGx4IGlzIGNvcnJ1cHRlZCAoc2l6ZT0lZCwgZXhwZWN0ZWQgJWQpXG4iLAorCQkJICAgICAgIHR5cGUsICh1bnNpZ25lZCBsb25nIGxvbmcpaWQsCisJCQkgICAgICAgKHVuc2lnbmVkKShlbmRwIC0gcCksIHNpemUpOworCQkJZ290byBjb3JydXB0OworCQl9CisKKwkJcHJpdi0+ZmlybVtuXS5wdHIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAocHJpdi0+ZmlybVtuXS5wdHIgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJOb3QgZW5vdWdoIG1lbW9yeSB0byBsb2FkIGZpcm13YXJlIGZpbGUuXG4iKTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChkZWJ1ZykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgZmlybXdhcmUgdHlwZSAiKTsKKwkJCWR1bXBfZmlybV90eXBlX2FuZF9pbnRfZnJlcSh0eXBlLCBpbnRfZnJlcSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiKCV4KSwgaWQgJWxseCwgc2l6ZT0lZC5cbiIsCisJCQkgICAgICAgdHlwZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpZCwgc2l6ZSk7CisJCX0KKworCQltZW1jcHkocHJpdi0+ZmlybVtuXS5wdHIsIHAsIHNpemUpOworCQlwcml2LT5maXJtW25dLnR5cGUgPSB0eXBlOworCQlwcml2LT5maXJtW25dLmlkICAgPSBpZDsKKwkJcHJpdi0+ZmlybVtuXS5zaXplID0gc2l6ZTsKKwkJcHJpdi0+ZmlybVtuXS5pbnRfZnJlcSA9IGludF9mcmVxOworCisJCXAgKz0gc2l6ZTsKKwl9CisKKwlpZiAobiArIDEgIT0gcHJpdi0+ZmlybV9zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmlybXdhcmUgZmlsZSBpcyBpbmNvbXBsZXRlIVxuIik7CisJCWdvdG8gY29ycnVwdDsKKwl9CisKKwlnb3RvIGRvbmU7CisKK2hlYWRlcjoKKwlwcmludGsoS0VSTl9FUlIgIkZpcm13YXJlIGhlYWRlciBpcyBpbmNvbXBsZXRlIVxuIik7Citjb3JydXB0OgorCXJjID0gLUVJTlZBTDsKKwlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBmaXJtd2FyZSBmaWxlIGlzIGNvcnJ1cHRlZCFcbiIpOworCitkb25lOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlmIChyYyA9PSAwKQorCQlkcHJpbnRrKDEsICJGaXJtd2FyZSBmaWxlcyBsb2FkZWQuXG4iKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBsb2FkX3Njb2RlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCSB2NGwyX3N0ZF9pZCAqaWQsIF9fdTE2IGludF9mcmVxLCBpbnQgc2NvZGUpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50CQlwb3MsIHJjOworCXVuc2lnbmVkIGNoYXIJKnA7CisJdTgJCXNjb2RlX2J1ZlsxM107CisJdTgJCWluZGlyZWN0X21vZGVbNV07CisKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgaW50X2ZyZXE9JWRcbiIsIF9fZnVuY19fLCBpbnRfZnJlcSk7CisKKwlpZiAoIWludF9mcmVxKSB7CisJCXBvcyA9IHNlZWtfZmlybXdhcmUoZmUsIHR5cGUsIGlkKTsKKwkJaWYgKHBvcyA8IDApCisJCQlyZXR1cm4gcG9zOworCX0gZWxzZSB7CisJCWZvciAocG9zID0gMDsgcG9zIDwgcHJpdi0+ZmlybV9zaXplOyBwb3MrKykgeworCQkJaWYgKChwcml2LT5maXJtW3Bvc10uaW50X2ZyZXEgPT0gaW50X2ZyZXEpICYmCisJCQkgICAgKHByaXYtPmZpcm1bcG9zXS50eXBlICYgSEFTX0lGKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAocG9zID09IHByaXYtPmZpcm1fc2l6ZSkKKwkJCXJldHVybiAtRU5PRU5UOworCX0KKworCXAgPSBwcml2LT5maXJtW3Bvc10ucHRyOworCisJaWYgKHByaXYtPmZpcm1bcG9zXS5zaXplICE9IDEyICogMTYgfHwgc2NvZGUgPj0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCXAgKz0gMTIgKiBzY29kZTsKKworCWlmIChkZWJ1ZykgeworCQl0dW5lcl9pbmZvKCJMb2FkaW5nIFNDT0RFIGZvciB0eXBlPSIpOworCQlkdW1wX2Zpcm1fdHlwZV9hbmRfaW50X2ZyZXEocHJpdi0+ZmlybVtwb3NdLnR5cGUsCisJCQkJCSAgICBwcml2LT5maXJtW3Bvc10uaW50X2ZyZXEpOworCQlwcmludGsoS0VSTl9DT05UICIoJXgpLCBpZCAlMDE2bGx4LlxuIiwgcHJpdi0+ZmlybVtwb3NdLnR5cGUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSppZCk7CisJfQorCisJc2NvZGVfYnVmWzBdID0gMHgwMDsKKwltZW1jcHkoJnNjb2RlX2J1ZlsxXSwgcCwgMTIpOworCisJLyogRW50ZXIgZGlyZWN0LW1vZGUgKi8KKwlyYyA9IHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX0RJUkVDVFNJVFRJTkdfTU9ERSwgMCk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBwdXQgZGV2aWNlIGludG8gZGlyZWN0IG1vZGUhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmMgPSB4Y19zZW5kX2kyY19kYXRhKHByaXYsIHNjb2RlX2J1ZiwgMTMpOworCWlmIChyYyAhPSAwKSB7CisJCS8qIEV2ZW4gaWYgdGhlIHNlbmQgZmFpbGVkLCBtYWtlIHN1cmUgd2Ugc2V0IGJhY2sgdG8gaW5kaXJlY3QKKwkJICAgbW9kZSAqLworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgc2NvZGUgJWRcbiIsIHJjKTsKKwl9CisKKwkvKiBTd2l0Y2ggYmFjayB0byBpbmRpcmVjdC1tb2RlICovCisJbWVtc2V0KGluZGlyZWN0X21vZGUsIDAsIHNpemVvZihpbmRpcmVjdF9tb2RlKSk7CisJaW5kaXJlY3RfbW9kZVs0XSA9IDB4ODg7CisJeGNfc2VuZF9pMmNfZGF0YShwcml2LCBpbmRpcmVjdF9tb2RlLCBzaXplb2YoaW5kaXJlY3RfbW9kZSkpOworCW1zbGVlcCgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgIHY0bDJfc3RkX2lkIHN0ZCwgX191MTYgaW50X2ZyZXEpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICAgICAgICAgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgZmlybXdhcmVfcHJvcGVydGllcyBuZXdfZnc7CisJaW50CQkJICAgcmMgPSAwLCBpc19yZXRyeSA9IDA7CisJdTE2CQkJICAgaHdtb2RlbDsKKwl2NGwyX3N0ZF9pZAkJICAgc3RkMDsKKwl1OAkJCSAgIGh3X21ham9yLCBod19taW5vciwgZndfbWFqb3IsIGZ3X21pbm9yOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXByaXYtPmZpcm0pIHsKKwkJcmMgPSB4YzQwMDBfZnd1cGxvYWQoZmUpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0KKworcmV0cnk6CisJbmV3X2Z3LnR5cGUgPSB0eXBlOworCW5ld19mdy5pZCA9IHN0ZDsKKwluZXdfZncuc3RkX3JlcSA9IHN0ZDsKKwluZXdfZncuc2NvZGVfdGFibGUgPSBTQ09ERTsKKwluZXdfZncuc2NvZGVfbnIgPSAwOworCW5ld19mdy5pbnRfZnJlcSA9IGludF9mcmVxOworCisJZHByaW50aygxLCAiY2hlY2tpbmcgZmlybXdhcmUsIHVzZXIgcmVxdWVzdGVkIHR5cGU9Iik7CisJaWYgKGRlYnVnKSB7CisJCWR1bXBfZmlybV90eXBlKG5ld19mdy50eXBlKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKCV4KSwgaWQgJTAxNmxseCwgIiwgbmV3X2Z3LnR5cGUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19mdy5zdGRfcmVxKTsKKwkJaWYgKCFpbnRfZnJlcSkKKwkJCXByaW50ayhLRVJOX0NPTlQgInNjb2RlX3RibCAiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiaW50X2ZyZXEgJWQsICIsIG5ld19mdy5pbnRfZnJlcSk7CisJCXByaW50ayhLRVJOX0NPTlQgInNjb2RlX25yICVkXG4iLCBuZXdfZncuc2NvZGVfbnIpOworCX0KKworCS8qIE5vIG5lZWQgdG8gcmVsb2FkIGJhc2UgZmlybXdhcmUgaWYgaXQgbWF0Y2hlcyAqLworCWlmIChwcml2LT5jdXJfZncudHlwZSAmIEJBU0UpIHsKKwkJZHByaW50aygxLCAiQkFTRSBmaXJtd2FyZSBub3QgY2hhbmdlZC5cbiIpOworCQlnb3RvIHNraXBfYmFzZTsKKwl9CisKKwkvKiBVcGRhdGluZyBCQVNFIC0gZm9yZ2V0IGFib3V0IGFsbCBjdXJyZW50bHkgbG9hZGVkIGZpcm13YXJlICovCisJbWVtc2V0KCZwcml2LT5jdXJfZncsIDAsIHNpemVvZihwcml2LT5jdXJfZncpKTsKKworCS8qIFJlc2V0IGlzIG5lZWRlZCBiZWZvcmUgbG9hZGluZyBmaXJtd2FyZSAqLworCXJjID0geGM0MDAwX3R1bmVyX3Jlc2V0KGZlKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGZhaWw7CisKKwkvKiBCQVNFIGZpcm13YXJlcyBhcmUgYWxsIHN0ZDAgKi8KKwlzdGQwID0gMDsKKwlyYyA9IGxvYWRfZmlybXdhcmUoZmUsIEJBU0UsICZzdGQwKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgd2hpbGUgbG9hZGluZyBiYXNlIGZpcm13YXJlXG4iLCByYyk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBMb2FkIElOSVQxLCBpZiBuZWVkZWQgKi8KKwlkcHJpbnRrKDEsICJMb2FkIGluaXQxIGZpcm13YXJlLCBpZiBleGlzdHNcbiIpOworCisJcmMgPSBsb2FkX2Zpcm13YXJlKGZlLCBCQVNFIHwgSU5JVDEsICZzdGQwKTsKKwlpZiAocmMgPT0gLUVOT0VOVCkKKwkJcmMgPSBsb2FkX2Zpcm13YXJlKGZlLCBCQVNFIHwgSU5JVDEsICZzdGQwKTsKKwlpZiAocmMgPCAwICYmIHJjICE9IC1FTk9FTlQpIHsKKwkJdHVuZXJfZXJyKCJFcnJvciAlZCB3aGlsZSBsb2FkaW5nIGluaXQxIGZpcm13YXJlXG4iLAorCQkJICByYyk7CisJCWdvdG8gZmFpbDsKKwl9CisKK3NraXBfYmFzZToKKwkvKgorCSAqIE5vIG5lZWQgdG8gcmVsb2FkIHN0YW5kYXJkIHNwZWNpZmljIGZpcm13YXJlIGlmIGJhc2UgZmlybXdhcmUKKwkgKiB3YXMgbm90IHJlbG9hZGVkIGFuZCByZXF1ZXN0ZWQgdmlkZW8gc3RhbmRhcmRzIGhhdmUgbm90IGNoYW5nZWQuCisJICovCisJaWYgKHByaXYtPmN1cl9mdy50eXBlID09IChCQVNFIHwgbmV3X2Z3LnR5cGUpICYmCisJICAgIHByaXYtPmN1cl9mdy5zdGRfcmVxID09IHN0ZCkgeworCQlkcHJpbnRrKDEsICJTdGQtc3BlY2lmaWMgZmlybXdhcmUgYWxyZWFkeSBsb2FkZWQuXG4iKTsKKwkJZ290byBza2lwX3N0ZF9zcGVjaWZpYzsKKwl9CisKKwkvKiBSZWxvYWRpbmcgc3RkLXNwZWNpZmljIGZpcm13YXJlIGZvcmNlcyBhIFNDT0RFIHVwZGF0ZSAqLworCXByaXYtPmN1cl9mdy5zY29kZV90YWJsZSA9IDA7CisKKwkvKiBMb2FkIHRoZSBzdGFuZGFyZCBmaXJtd2FyZSAqLworCXJjID0gbG9hZF9maXJtd2FyZShmZSwgbmV3X2Z3LnR5cGUsICZuZXdfZncuaWQpOworCisJaWYgKHJjIDwgMCkKKwkJZ290byBmYWlsOworCitza2lwX3N0ZF9zcGVjaWZpYzoKKwlpZiAocHJpdi0+Y3VyX2Z3LnNjb2RlX3RhYmxlID09IG5ld19mdy5zY29kZV90YWJsZSAmJgorCSAgICBwcml2LT5jdXJfZncuc2NvZGVfbnIgPT0gbmV3X2Z3LnNjb2RlX25yKSB7CisJCWRwcmludGsoMSwgIlNDT0RFIGZpcm13YXJlIGFscmVhZHkgbG9hZGVkLlxuIik7CisJCWdvdG8gY2hlY2tfZGV2aWNlOworCX0KKworCS8qIExvYWQgU0NPREUgZmlybXdhcmUsIGlmIGV4aXN0cyAqLworCXJjID0gbG9hZF9zY29kZShmZSwgbmV3X2Z3LnR5cGUgfCBuZXdfZncuc2NvZGVfdGFibGUsICZuZXdfZncuaWQsCisJCQluZXdfZncuaW50X2ZyZXEsIG5ld19mdy5zY29kZV9ucik7CisJaWYgKHJjICE9IDApCisJCWRwcmludGsoMSwgImxvYWQgc2NvZGUgZmFpbGVkICVkXG4iLCByYyk7CisKK2NoZWNrX2RldmljZToKKwlyYyA9IHhjNDAwMF9yZWFkcmVnKHByaXYsIFhSRUdfUFJPRFVDVF9JRCwgJmh3bW9kZWwpOworCisJaWYgKHhjX2dldF92ZXJzaW9uKHByaXYsICZod19tYWpvciwgJmh3X21pbm9yLCAmZndfbWFqb3IsCisJCQkgICAmZndfbWlub3IpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVhZCB0dW5lciByZWdpc3RlcnMuXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWRwcmludGsoMSwgIkRldmljZSBpcyBYY2VpdmUgJWQgdmVyc2lvbiAlZC4lZCwgIgorCQkiZmlybXdhcmUgdmVyc2lvbiAlZC4lZFxuIiwKKwkJaHdtb2RlbCwgaHdfbWFqb3IsIGh3X21pbm9yLCBmd19tYWpvciwgZndfbWlub3IpOworCisJLyogQ2hlY2sgZmlybXdhcmUgdmVyc2lvbiBhZ2FpbnN0IHdoYXQgd2UgZG93bmxvYWRlZC4gKi8KKwlpZiAocHJpdi0+ZmlybV92ZXJzaW9uICE9ICgoZndfbWFqb3IgPDwgOCkgfCBmd19taW5vcikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkluY29ycmVjdCByZWFkYmFjayBvZiBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLlxuIiwKKwkJICAgICAgIGZ3X21ham9yLCBmd19taW5vcik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSB0dW5lciBoYXJkd2FyZSBtb2RlbCByZW1haW5zIGNvbnNpc3RlbnQgb3ZlciB0aW1lLiAqLworCWlmIChwcml2LT5od21vZGVsID09IDAgJiYKKwkgICAgKGh3bW9kZWwgPT0gWENfUFJPRFVDVF9JRF9YQzQwMDAgfHwKKwkgICAgIGh3bW9kZWwgPT0gWENfUFJPRFVDVF9JRF9YQzQxMDApKSB7CisJCXByaXYtPmh3bW9kZWwgPSBod21vZGVsOworCQlwcml2LT5od3ZlcnMgPSAoaHdfbWFqb3IgPDwgOCkgfCBod19taW5vcjsKKwl9IGVsc2UgaWYgKHByaXYtPmh3bW9kZWwgPT0gMCB8fCBwcml2LT5od21vZGVsICE9IGh3bW9kZWwgfHwKKwkJICAgcHJpdi0+aHd2ZXJzICE9ICgoaHdfbWFqb3IgPDwgOCkgfCBod19taW5vcikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlJlYWQgaW52YWxpZCBkZXZpY2UgaGFyZHdhcmUgaW5mb3JtYXRpb24gLSB0dW5lciAiCisJCSAgICAgICAiaHVuZz9cbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJbWVtY3B5KCZwcml2LT5jdXJfZncsICZuZXdfZncsIHNpemVvZihwcml2LT5jdXJfZncpKTsKKworCS8qCisJICogQnkgc2V0dGluZyBCQVNFIGluIGN1cl9mdy50eXBlIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRpbmcgYWxsCisJICogZmlybXdhcmVzLCB3ZSBjYW46CisJICogMS4gSWRlbnRpZnkgdGhhdCBCQVNFIGZpcm13YXJlIHdpdGggdHlwZT0wIGhhcyBiZWVuIGxvYWRlZDsKKwkgKiAyLiBUZWxsIHdoZXRoZXIgQkFTRSBmaXJtd2FyZSB3YXMganVzdCBjaGFuZ2VkIHRoZSBuZXh0IHRpbWUgdGhyb3VnaC4KKwkgKi8KKwlwcml2LT5jdXJfZncudHlwZSB8PSBCQVNFOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJbWVtc2V0KCZwcml2LT5jdXJfZncsIDAsIHNpemVvZihwcml2LT5jdXJfZncpKTsKKwlpZiAoIWlzX3JldHJ5KSB7CisJCW1zbGVlcCg1MCk7CisJCWlzX3JldHJ5ID0gMTsKKwkJZHByaW50aygxLCAiUmV0cnlpbmcgZmlybXdhcmUgbG9hZFxuIik7CisJCWdvdG8gcmV0cnk7CisJfQorCisJaWYgKHJjID09IC1FTk9FTlQpCisJCXJjID0gLUVJTlZBTDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHhjX2RlYnVnX2R1bXAoc3RydWN0IHhjNDAwMF9wcml2ICpwcml2KQoreworCXUxNglhZGNfZW52ZWxvcGU7CisJdTMyCWZyZXFfZXJyb3JfaHogPSAwOworCXUxNglsb2NrX3N0YXR1czsKKwl1MzIJaHN5bmNfZnJlcV9oeiA9IDA7CisJdTE2CWZyYW1lX2xpbmVzOworCXUxNglxdWFsaXR5OworCXU4CWh3X21ham9ydmVyc2lvbiA9IDAsIGh3X21pbm9ydmVyc2lvbiA9IDA7CisJdTgJZndfbWFqb3J2ZXJzaW9uID0gMCwgZndfbWlub3J2ZXJzaW9uID0gMDsKKworCXhjX2dldF9hZGNfZW52ZWxvcGUocHJpdiwgJmFkY19lbnZlbG9wZSk7CisJZHByaW50aygxLCAiKioqIEFEQyBlbnZlbG9wZSAoMC0xMDIzKSA9ICVkXG4iLCBhZGNfZW52ZWxvcGUpOworCisJeGNfZ2V0X2ZyZXF1ZW5jeV9lcnJvcihwcml2LCAmZnJlcV9lcnJvcl9oeik7CisJZHByaW50aygxLCAiKioqIEZyZXF1ZW5jeSBlcnJvciA9ICVkIEh6XG4iLCBmcmVxX2Vycm9yX2h6KTsKKworCXhjX2dldF9sb2NrX3N0YXR1cyhwcml2LCAmbG9ja19zdGF0dXMpOworCWRwcmludGsoMSwgIioqKiBMb2NrIHN0YXR1cyAoMC1XYWl0LCAxLUxvY2tlZCwgMi1Oby1zaWduYWwpID0gJWRcbiIsCisJCWxvY2tfc3RhdHVzKTsKKworCXhjX2dldF92ZXJzaW9uKHByaXYsICZod19tYWpvcnZlcnNpb24sICZod19taW5vcnZlcnNpb24sCisJCSAgICAgICAmZndfbWFqb3J2ZXJzaW9uLCAmZndfbWlub3J2ZXJzaW9uKTsKKwlkcHJpbnRrKDEsICIqKiogSFc6IFYlMDJ4LiUwMngsIEZXOiBWJTAyeC4lMDJ4XG4iLAorCQlod19tYWpvcnZlcnNpb24sIGh3X21pbm9ydmVyc2lvbiwKKwkJZndfbWFqb3J2ZXJzaW9uLCBmd19taW5vcnZlcnNpb24pOworCisJaWYgKHByaXYtPnZpZGVvX3N0YW5kYXJkIDwgWEM0MDAwX0RUVjYpIHsKKwkJeGNfZ2V0X2hzeW5jX2ZyZXEocHJpdiwgJmhzeW5jX2ZyZXFfaHopOworCQlkcHJpbnRrKDEsICIqKiogSG9yaXpvbnRhbCBzeW5jIGZyZXF1ZW5jeSA9ICVkIEh6XG4iLAorCQkJaHN5bmNfZnJlcV9oeik7CisKKwkJeGNfZ2V0X2ZyYW1lX2xpbmVzKHByaXYsICZmcmFtZV9saW5lcyk7CisJCWRwcmludGsoMSwgIioqKiBGcmFtZSBsaW5lcyA9ICVkXG4iLCBmcmFtZV9saW5lcyk7CisJfQorCisJeGNfZ2V0X3F1YWxpdHkocHJpdiwgJnF1YWxpdHkpOworCWRwcmludGsoMSwgIioqKiBRdWFsaXR5ICgwOjw4ZEIsIDc6PjU2ZEIpID0gJWRcbiIsIHF1YWxpdHkpOworfQorCitzdGF0aWMgaW50IHhjNDAwMF9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXVuc2lnbmVkIGludCB0eXBlOworCWludAlyZXQgPSAtRVJFTU9URUlPOworCisJZHByaW50aygxLCAiJXMoKSBmcmVxdWVuY3k9JWQgKEh6KVxuIiwgX19mdW5jX18sIHBhcmFtcy0+ZnJlcXVlbmN5KTsKKworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCisJaWYgKGZlLT5vcHMuaW5mby50eXBlID09IEZFX0FUU0MpIHsKKwkJZHByaW50aygxLCAiJXMoKSBBVFNDXG4iLCBfX2Z1bmNfXyk7CisJCXN3aXRjaCAocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJCWNhc2UgVlNCXzg6CisJCWNhc2UgVlNCXzE2OgorCQkJZHByaW50aygxLCAiJXMoKSBWU0IgbW9kdWxhdGlvblxuIiwgX19mdW5jX18pOworCQkJcHJpdi0+cmZfbW9kZSA9IFhDX1JGX01PREVfQUlSOworCQkJcHJpdi0+ZnJlcV9oeiA9IHBhcmFtcy0+ZnJlcXVlbmN5IC0gMTc1MDAwMDsKKwkJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RUVjY7CisJCQl0eXBlID0gRFRWNjsKKwkJCWJyZWFrOworCQljYXNlIFFBTV82NDoKKwkJY2FzZSBRQU1fMjU2OgorCQljYXNlIFFBTV9BVVRPOgorCQkJZHByaW50aygxLCAiJXMoKSBRQU0gbW9kdWxhdGlvblxuIiwgX19mdW5jX18pOworCQkJcHJpdi0+cmZfbW9kZSA9IFhDX1JGX01PREVfQ0FCTEU7CisJCQlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgLSAxNzUwMDAwOworCQkJcHJpdi0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOworCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfRFRWNjsKKwkJCXR5cGUgPSBEVFY2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmYWlsOworCQl9CisJfSBlbHNlIGlmIChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9PRkRNKSB7CisJCWRwcmludGsoMSwgIiVzKCkgT0ZETVxuIiwgX19mdW5jX18pOworCQlzd2l0Y2ggKHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCkgeworCQljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RUVjY7CisJCQlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgLSAxNzUwMDAwOworCQkJdHlwZSA9IERUVjY7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQlwcml2LT5iYW5kd2lkdGggPSBCQU5EV0lEVEhfN19NSFo7CisJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9EVFY3OworCQkJcHJpdi0+ZnJlcV9oeiA9IHBhcmFtcy0+ZnJlcXVlbmN5IC0gMjI1MDAwMDsKKwkJCXR5cGUgPSBEVFY3OworCQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQkJcHJpdi0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzhfTUhaOworCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfRFRWODsKKwkJCXByaXYtPmZyZXFfaHogPSBwYXJhbXMtPmZyZXF1ZW5jeSAtIDI3NTAwMDA7CisJCQl0eXBlID0gRFRWODsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF9BVVRPOgorCQkJaWYgKHBhcmFtcy0+ZnJlcXVlbmN5IDwgNDAwMDAwMDAwKSB7CisJCQkJcHJpdi0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzdfTUhaOworCQkJCXByaXYtPmZyZXFfaHogPSBwYXJhbXMtPmZyZXF1ZW5jeSAtIDIyNTAwMDA7CisJCQl9IGVsc2UgeworCQkJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF84X01IWjsKKwkJCQlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgLSAyNzUwMDAwOworCQkJfQorCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfRFRWN184OworCQkJdHlwZSA9IERUVjc4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgInhjNDAwMCBiYW5kd2lkdGggbm90IHNldCFcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlwcml2LT5yZl9tb2RlID0gWENfUkZfTU9ERV9BSVI7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4YzQwMDAgbW9kdWxhdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQhXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChjb21wZW5zYXRlZClcbiIsCisJCV9fZnVuY19fLCBwcml2LT5mcmVxX2h6KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgY29ycmVjdCBmaXJtd2FyZSB0eXBlIGlzIGxvYWRlZCAqLworCWlmIChjaGVja19maXJtd2FyZShmZSwgdHlwZSwgMCwgcHJpdi0+aWZfa2h6KSAhPSAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSB4Y19zZXRfc2lnbmFsX3NvdXJjZShwcml2LCBwcml2LT5yZl9tb2RlKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4YzQwMDA6IHhjX3NldF9zaWduYWxfc291cmNlKCVkKSBmYWlsZWRcbiIsCisJCSAgICAgICBwcml2LT5yZl9tb2RlKTsKKwkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXUxNgl2aWRlb19tb2RlLCBhdWRpb19tb2RlOworCQl2aWRlb19tb2RlID0geGM0MDAwX3N0YW5kYXJkW3ByaXYtPnZpZGVvX3N0YW5kYXJkXS52aWRlb19tb2RlOworCQlhdWRpb19tb2RlID0geGM0MDAwX3N0YW5kYXJkW3ByaXYtPnZpZGVvX3N0YW5kYXJkXS5hdWRpb19tb2RlOworCQlpZiAodHlwZSA9PSBEVFY2ICYmIHByaXYtPmZpcm1fdmVyc2lvbiAhPSAweDAxMDIpCisJCQl2aWRlb19tb2RlIHw9IDB4MDAwMTsKKwkJcmV0ID0geGNfc2V0X3R2X3N0YW5kYXJkKHByaXYsIHZpZGVvX21vZGUsIGF1ZGlvX21vZGUpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAieGM0MDAwOiB4Y19zZXRfdHZfc3RhbmRhcmQgZmFpbGVkXG4iKTsKKwkJCS8qIERKSCAtIGRvIG5vdCByZXR1cm4gd2hlbiBpdCBmYWlscy4uLiAqLworCQkJLyogZ290byBmYWlsOyAqLworCQl9CisJfQorCisJaWYgKHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX0RfQ09ERSwgMCkgPT0gMCkKKwkJcmV0ID0gMDsKKwlpZiAocHJpdi0+ZHZiX2FtcGxpdHVkZSAhPSAwKSB7CisJCWlmICh4Y193cml0ZV9yZWcocHJpdiwgWFJFR19BTVBMSVRVREUsCisJCQkJIChwcml2LT5maXJtX3ZlcnNpb24gIT0gMHgwMTAyIHx8CisJCQkJICBwcml2LT5kdmJfYW1wbGl0dWRlICE9IDEzNCA/CisJCQkJICBwcml2LT5kdmJfYW1wbGl0dWRlIDogMTMyKSkgIT0gMCkKKwkJCXJldCA9IC1FUkVNT1RFSU87CisJfQorCWlmIChwcml2LT5zZXRfc21vb3RoZWRjdmJzICE9IDApIHsKKwkJaWYgKHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX1NNT09USEVEQ1ZCUywgMSkgIT0gMCkKKwkJCXJldCA9IC1FUkVNT1RFSU87CisJfQorCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgInhjNDAwMDogc2V0dGluZyByZWdpc3RlcnMgZmFpbGVkXG4iKTsKKwkJLyogZ290byBmYWlsOyAqLworCX0KKworCXhjX3R1bmVfY2hhbm5lbChwcml2LCBwcml2LT5mcmVxX2h6KTsKKworCXJldCA9IDA7CisKK2ZhaWw6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeGM0MDAwX3NldF9hbmFsb2dfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBhbmFsb2dfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXVuc2lnbmVkIGludCB0eXBlID0gMDsKKwlpbnQJcmV0ID0gLUVSRU1PVEVJTzsKKworCWlmIChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgeworCQlkcHJpbnRrKDEsICIlcygpIGZyZXF1ZW5jeT0lZCAoaW4gdW5pdHMgb2YgNjIuNUh6KVxuIiwKKwkJCV9fZnVuY19fLCBwYXJhbXMtPmZyZXF1ZW5jeSk7CisKKwkJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwkJcGFyYW1zLT5zdGQgPSAwOworCQlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgKiAxMjVMIC8gMjsKKworCQlpZiAoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9JTlBVVDEpIHsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0ZNX1JhZGlvX0lOUFVUMTsKKwkJCXR5cGUgPSBGTSB8IElOUFVUMTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0ZNX1JhZGlvX0lOUFVUMjsKKwkJCXR5cGUgPSBGTSB8IElOUFVUMjsKKwkJfQorCisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKworCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChpbiB1bml0cyBvZiA2Mi41a2h6KVxuIiwKKwkJX19mdW5jX18sIHBhcmFtcy0+ZnJlcXVlbmN5KTsKKworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCisJLyogcGFyYW1zLT5mcmVxdWVuY3kgaXMgaW4gdW5pdHMgb2YgNjIuNWtoeiAqLworCXByaXYtPmZyZXFfaHogPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDYyNTAwOworCisJcGFyYW1zLT5zdGQgJj0gVjRMMl9TVERfQUxMOworCS8qIGlmIHN0ZCBpcyBub3QgZGVmaW5lZCwgY2hvb3NlIG9uZSAqLworCWlmICghcGFyYW1zLT5zdGQpCisJCXBhcmFtcy0+c3RkID0gVjRMMl9TVERfUEFMX0JHOworCisJaWYgKGF1ZGlvX3N0ZCAmIFhDNDAwMF9BVURJT19TVERfTU9OTykKKwkJdHlwZSA9IE1PTk87CisKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgeworCQlwYXJhbXMtPnN0ZCA9IFY0TDJfU1REX01OOworCQlpZiAoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9NT05PKSB7CisJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9NTl9OVFNDX1BBTF9Nb25vOworCQl9IGVsc2UgaWYgKGF1ZGlvX3N0ZCAmIFhDNDAwMF9BVURJT19TVERfQTIpIHsKKwkJCXBhcmFtcy0+c3RkIHw9IFY0TDJfU1REX0EyOworCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfTU5fTlRTQ19QQUxfQTI7CisJCX0gZWxzZSB7CisJCQlwYXJhbXMtPnN0ZCB8PSBWNEwyX1NURF9CVFNDOworCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfTU5fTlRTQ19QQUxfQlRTQzsKKwkJfQorCQlnb3RvIHR1bmVfY2hhbm5lbDsKKwl9CisKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsKKwkJcGFyYW1zLT5zdGQgPSBWNEwyX1NURF9QQUxfQkc7CisJCWlmIChhdWRpb19zdGQgJiBYQzQwMDBfQVVESU9fU1REX01PTk8pIHsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0JHX1BBTF9NT05POworCQl9IGVsc2UgaWYgKCEoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9BMikpIHsKKwkJCWlmICghKGF1ZGlvX3N0ZCAmIFhDNDAwMF9BVURJT19TVERfQikpIHsKKwkJCQlwYXJhbXMtPnN0ZCB8PSBWNEwyX1NURF9OSUNBTV9BOworCQkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0JHX1BBTF9OSUNBTTsKKwkJCX0gZWxzZSB7CisJCQkJcGFyYW1zLT5zdGQgfD0gVjRMMl9TVERfTklDQU1fQjsKKwkJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9CR19QQUxfTklDQU07CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIShhdWRpb19zdGQgJiBYQzQwMDBfQVVESU9fU1REX0IpKSB7CisJCQkJcGFyYW1zLT5zdGQgfD0gVjRMMl9TVERfQTJfQTsKKwkJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9CR19QQUxfQTI7CisJCQl9IGVsc2UgeworCQkJCXBhcmFtcy0+c3RkIHw9IFY0TDJfU1REX0EyX0I7CisJCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfQkdfUEFMX0EyOworCQkJfQorCQl9CisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KKwkJcGFyYW1zLT5zdGQgPSBWNEwyX1NURF9QQUxfSSB8IFY0TDJfU1REX05JQ0FNOworCQlpZiAoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9NT05PKQorCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfSV9QQUxfTklDQU1fTU9OTzsKKwkJZWxzZQorCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfSV9QQUxfTklDQU07CisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCQlwYXJhbXMtPnN0ZCA9IFY0TDJfU1REX1BBTF9ESzsKKwkJaWYgKGF1ZGlvX3N0ZCAmIFhDNDAwMF9BVURJT19TVERfTU9OTykgeworCQkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfREtfUEFMX01PTk87CisJCX0gZWxzZSBpZiAoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9BMikgeworCQkJcGFyYW1zLT5zdGQgfD0gVjRMMl9TVERfQTI7CisJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9ES19QQUxfQTI7CisJCX0gZWxzZSB7CisJCQlwYXJhbXMtPnN0ZCB8PSBWNEwyX1NURF9OSUNBTTsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RLX1BBTF9OSUNBTTsKKwkJfQorCQlnb3RvIHR1bmVfY2hhbm5lbDsKKwl9CisKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9ESykgeworCQkvKiBkZWZhdWx0IHRvIEEyIGF1ZGlvIHN0YW5kYXJkICovCisJCXBhcmFtcy0+c3RkID0gVjRMMl9TVERfU0VDQU1fREsgfCBWNEwyX1NURF9BMjsKKwkJaWYgKGF1ZGlvX3N0ZCAmIFhDNDAwMF9BVURJT19TVERfTCkgeworCQkJdHlwZSA9IDA7CisJCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IFhDNDAwMF9ES19TRUNBTV9OSUNBTTsKKwkJfSBlbHNlIGlmIChhdWRpb19zdGQgJiBYQzQwMDBfQVVESU9fU1REX01PTk8pIHsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RLX1NFQ0FNX0EyTU9OTzsKKwkJfSBlbHNlIGlmIChhdWRpb19zdGQgJiBYQzQwMDBfQVVESU9fU1REX0szKSB7CisJCQlwYXJhbXMtPnN0ZCB8PSBWNEwyX1NURF9TRUNBTV9LMzsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RLX1NFQ0FNX0EyTERLMzsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0RLX1NFQ0FNX0EyREsxOworCQl9CisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJLyogZGVmYXVsdCB0byBOSUNBTSBhdWRpbyBzdGFuZGFyZCAqLworCQl0eXBlID0gMDsKKwkJcGFyYW1zLT5zdGQgPSBWNEwyX1NURF9TRUNBTV9MIHwgVjRMMl9TVERfTklDQU07CisJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gWEM0MDAwX0xfU0VDQU1fTklDQU07CisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0xDKSB7CisJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KKwkJdHlwZSA9IDA7CisJCXBhcmFtcy0+c3RkID0gVjRMMl9TVERfU0VDQU1fTEMgfCBWNEwyX1NURF9OSUNBTTsKKwkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBYQzQwMDBfTENfU0VDQU1fTklDQU07CisJCWdvdG8gdHVuZV9jaGFubmVsOworCX0KKwordHVuZV9jaGFubmVsOgorCS8qIEZJWE1FOiBpdCBjb3VsZCBiZSBhaXIuICovCisJcHJpdi0+cmZfbW9kZSA9IFhDX1JGX01PREVfQ0FCTEU7CisKKwlpZiAoY2hlY2tfZmlybXdhcmUoZmUsIHR5cGUsIHBhcmFtcy0+c3RkLAorCQkJICAgeGM0MDAwX3N0YW5kYXJkW3ByaXYtPnZpZGVvX3N0YW5kYXJkXS5pbnRfZnJlcSkgIT0gMCkKKwkJZ290byBmYWlsOworCisJcmV0ID0geGNfc2V0X3NpZ25hbF9zb3VyY2UocHJpdiwgcHJpdi0+cmZfbW9kZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInhjNDAwMDogeGNfc2V0X3NpZ25hbF9zb3VyY2UoJWQpIGZhaWxlZFxuIiwKKwkJICAgICAgIHByaXYtPnJmX21vZGUpOworCQlnb3RvIGZhaWw7CisJfSBlbHNlIHsKKwkJdTE2CXZpZGVvX21vZGUsIGF1ZGlvX21vZGU7CisJCXZpZGVvX21vZGUgPSB4YzQwMDBfc3RhbmRhcmRbcHJpdi0+dmlkZW9fc3RhbmRhcmRdLnZpZGVvX21vZGU7CisJCWF1ZGlvX21vZGUgPSB4YzQwMDBfc3RhbmRhcmRbcHJpdi0+dmlkZW9fc3RhbmRhcmRdLmF1ZGlvX21vZGU7CisJCWlmIChwcml2LT52aWRlb19zdGFuZGFyZCA8IFhDNDAwMF9CR19QQUxfQTIpIHsKKwkJCWlmICh0eXBlICYgTk9HRCkKKwkJCQl2aWRlb19tb2RlICY9IDB4RkY3RjsKKwkJfSBlbHNlIGlmIChwcml2LT52aWRlb19zdGFuZGFyZCA8IFhDNDAwMF9JX1BBTF9OSUNBTSkgeworCQkJaWYgKHByaXYtPmZpcm1fdmVyc2lvbiA9PSAweDAxMDIpCisJCQkJdmlkZW9fbW9kZSAmPSAweEZFRkY7CisJCQlpZiAoYXVkaW9fc3RkICYgWEM0MDAwX0FVRElPX1NURF9CKQorCQkJCXZpZGVvX21vZGUgfD0gMHgwMDgwOworCQl9CisJCXJldCA9IHhjX3NldF90dl9zdGFuZGFyZChwcml2LCB2aWRlb19tb2RlLCBhdWRpb19tb2RlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInhjNDAwMDogeGNfc2V0X3R2X3N0YW5kYXJkIGZhaWxlZFxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlpZiAoeGNfd3JpdGVfcmVnKHByaXYsIFhSRUdfRF9DT0RFLCAwKSA9PSAwKQorCQlyZXQgPSAwOworCWlmICh4Y193cml0ZV9yZWcocHJpdiwgWFJFR19BTVBMSVRVREUsIDEpICE9IDApCisJCXJldCA9IC1FUkVNT1RFSU87CisJaWYgKHByaXYtPnNldF9zbW9vdGhlZGN2YnMgIT0gMCkgeworCQlpZiAoeGNfd3JpdGVfcmVnKHByaXYsIFhSRUdfU01PT1RIRURDVkJTLCAxKSAhPSAwKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwl9CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAieGM0MDAwOiBzZXR0aW5nIHJlZ2lzdGVycyBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJeGNfdHVuZV9jaGFubmVsKHByaXYsIHByaXYtPmZyZXFfaHopOworCisJcmV0ID0gMDsKKworZmFpbDoKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4YzQwMDBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCisJKmZyZXEgPSBwcml2LT5mcmVxX2h6OworCisJaWYgKGRlYnVnKSB7CisJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCQlpZiAoKHByaXYtPmN1cl9mdy50eXBlCisJCSAgICAgJiAoQkFTRSB8IEZNIHwgRFRWNiB8IERUVjcgfCBEVFY3OCB8IERUVjgpKSA9PSBCQVNFKSB7CisJCQl1MTYJc25yID0gMDsKKwkJCWlmICh4YzQwMDBfcmVhZHJlZyhwcml2LCBYUkVHX1NOUiwgJnNucikgPT0gMCkgeworCQkJCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJCQkJZHByaW50aygxLCAiJXMoKSBmcmVxID0gJXUsIFNOUiA9ICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgKmZyZXEsIHNucik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwl9CisKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4YzQwMDBfZ2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpidykKK3sKKwlzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkqYncgPSBwcml2LT5iYW5kd2lkdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGM0MDAwX2dldF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqc3RhdHVzKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXUxNglsb2NrX3N0YXR1cyA9IDA7CisKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKworCWlmIChwcml2LT5jdXJfZncudHlwZSAmIEJBU0UpCisJCXhjX2dldF9sb2NrX3N0YXR1cyhwcml2LCAmbG9ja19zdGF0dXMpOworCisJKnN0YXR1cyA9IChsb2NrX3N0YXR1cyA9PSAxID8KKwkJICAgVFVORVJfU1RBVFVTX0xPQ0tFRCB8IFRVTkVSX1NUQVRVU19TVEVSRU8gOiAwKTsKKwlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiAoRFRWNiB8IERUVjcgfCBEVFY3OCB8IERUVjgpKQorCQkqc3RhdHVzICY9ICh+VFVORVJfU1RBVFVTX1NURVJFTyk7CisKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJZHByaW50aygyLCAiJXMoKSBsb2NrX3N0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgbG9ja19zdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGM0MDAwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB4YzQwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludAlyZXQgPSAwOworCisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBBdm9pZCBmaXJtd2FyZSByZWxvYWQgb24gc2xvdyBkZXZpY2VzICovCisJaWYgKChub19wb3dlcm9mZiA9PSAyIHx8CisJICAgICAobm9fcG93ZXJvZmYgPT0gMCAmJiBwcml2LT5kZWZhdWx0X3BtICE9IDApKSAmJgorCSAgICAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBCQVNFKSAhPSAwKSB7CisJCS8qIGZvcmNlIHJlc2V0IGFuZCBmaXJtd2FyZSByZWxvYWQgKi8KKwkJcHJpdi0+Y3VyX2Z3LnR5cGUgPSBYQ19QT1dFUkVEX0RPV047CisKKwkJaWYgKHhjX3dyaXRlX3JlZyhwcml2LCBYUkVHX1BPV0VSX0RPV04sIDApICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJ4YzQwMDA6ICVzKCkgdW5hYmxlIHRvIHNodXRkb3duIHR1bmVyXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FUkVNT1RFSU87CisJCX0KKwkJbXNsZWVwKDIwKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4YzQwMDBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4YzQwMDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgeGM0MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnhjNDAwMF9saXN0X211dGV4KTsKKworCWlmIChwcml2KQorCQloeWJyaWRfdHVuZXJfcmVsZWFzZV9zdGF0ZShwcml2KTsKKworCW11dGV4X3VubG9jaygmeGM0MDAwX2xpc3RfbXV0ZXgpOworCisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyB4YzQwMDBfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSAgICAgICAgICAgPSAiWGNlaXZlIFhDNDAwMCIsCisJCS5mcmVxdWVuY3lfbWluICA9ICAgIDEwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDEwMjMwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcCA9ICAgICAgNTAwMDAsCisJfSwKKworCS5yZWxlYXNlCSAgID0geGM0MDAwX3JlbGVhc2UsCisJLmluaXQJCSAgID0geGM0MDAwX2luaXQsCisJLnNsZWVwCQkgICA9IHhjNDAwMF9zbGVlcCwKKworCS5zZXRfcGFyYW1zCSAgID0geGM0MDAwX3NldF9wYXJhbXMsCisJLnNldF9hbmFsb2dfcGFyYW1zID0geGM0MDAwX3NldF9hbmFsb2dfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5CSAgID0geGM0MDAwX2dldF9mcmVxdWVuY3ksCisJLmdldF9iYW5kd2lkdGgJICAgPSB4YzQwMDBfZ2V0X2JhbmR3aWR0aCwKKwkuZ2V0X3N0YXR1cwkgICA9IHhjNDAwMF9nZXRfc3RhdHVzCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzQwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCSAgIHN0cnVjdCB4YzQwMDBfY29uZmlnICpjZmcpCit7CisJc3RydWN0IHhjNDAwMF9wcml2ICpwcml2ID0gTlVMTDsKKwlpbnQJaW5zdGFuY2U7CisJdTE2CWlkID0gMDsKKworCWRwcmludGsoMSwgIiVzKCVkLSUwNHgpXG4iLCBfX2Z1bmNfXywKKwkJaTJjID8gaTJjX2FkYXB0ZXJfaWQoaTJjKSA6IC0xLAorCQljZmcgPyBjZmctPmkyY19hZGRyZXNzIDogLTEpOworCisJbXV0ZXhfbG9jaygmeGM0MDAwX2xpc3RfbXV0ZXgpOworCisJaW5zdGFuY2UgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgeGM0MDAwX3ByaXYsIHByaXYsCisJCQkJCSAgICAgIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0LAorCQkJCQkgICAgICBpMmMsIGNmZy0+aTJjX2FkZHJlc3MsICJ4YzQwMDAiKTsKKwlzd2l0Y2ggKGluc3RhbmNlKSB7CisJY2FzZSAwOgorCQlnb3RvIGZhaWw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCisJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJLyogc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLworCQlwcml2LT5pZl9raHogPSA0NTYwOworCQlwcml2LT5kZWZhdWx0X3BtID0gMDsKKwkJcHJpdi0+ZHZiX2FtcGxpdHVkZSA9IDEzNDsKKwkJcHJpdi0+c2V0X3Ntb290aGVkY3ZicyA9IDE7CisJCW11dGV4X2luaXQoJnByaXYtPmxvY2spOworCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGV4aXN0aW5nIHR1bmVyIGluc3RhbmNlICovCisJCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNmZy0+aWZfa2h6ICE9IDApIHsKKwkJLyogY29weSBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgKi8KKwkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7CisJCXByaXYtPmRlZmF1bHRfcG0gPSBjZmctPmRlZmF1bHRfcG07CisJCXByaXYtPmR2Yl9hbXBsaXR1ZGUgPSBjZmctPmR2Yl9hbXBsaXR1ZGU7CisJCXByaXYtPnNldF9zbW9vdGhlZGN2YnMgPSBjZmctPnNldF9zbW9vdGhlZGN2YnM7CisJfQorCisJLyogQ2hlY2sgaWYgZmlybXdhcmUgaGFzIGJlZW4gbG9hZGVkLiBJdCBpcyBwb3NzaWJsZSB0aGF0IGFub3RoZXIKKwkgICBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyIGhhcyBsb2FkZWQgdGhlIGZpcm13YXJlLgorCSAqLworCisJaWYgKGluc3RhbmNlID09IDEpIHsKKwkJaWYgKHhjNDAwMF9yZWFkcmVnKHByaXYsIFhSRUdfUFJPRFVDVF9JRCwgJmlkKSAhPSAwKQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCWlkID0gKChwcml2LT5jdXJfZncudHlwZSAmIEJBU0UpICE9IDAgPworCQkgICAgICBwcml2LT5od21vZGVsIDogWENfUFJPRFVDVF9JRF9GV19OT1RfTE9BREVEKTsKKwl9CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBYQ19QUk9EVUNUX0lEX1hDNDAwMDoKKwljYXNlIFhDX1BST0RVQ1RfSURfWEM0MTAwOgorCQlwcmludGsoS0VSTl9JTkZPCisJCQkieGM0MDAwOiBTdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKKwkJCWNmZy0+aTJjX2FkZHJlc3MpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkieGM0MDAwOiBGaXJtd2FyZSBoYXMgYmVlbiBsb2FkZWQgcHJldmlvdXNseVxuIik7CisJCWJyZWFrOworCWNhc2UgWENfUFJPRFVDVF9JRF9GV19OT1RfTE9BREVEOgorCQlwcmludGsoS0VSTl9JTkZPCisJCQkieGM0MDAwOiBTdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKKwkJCWNmZy0+aTJjX2FkZHJlc3MpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkieGM0MDAwOiBGaXJtd2FyZSBoYXMgbm90IGJlZW4gbG9hZGVkIHByZXZpb3VzbHlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ4YzQwMDA6IERldmljZSBub3QgZm91bmQgYXQgYWRkciAweCUwMnggKDB4JXgpXG4iLAorCQkJY2ZnLT5pMmNfYWRkcmVzcywgaWQpOworCQlnb3RvIGZhaWw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ4YzQwMDBfbGlzdF9tdXRleCk7CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmeGM0MDAwX3R1bmVyX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisKKwlpZiAoaW5zdGFuY2UgPT0gMSkgeworCQlpbnQJcmV0OworCQltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwkJcmV0ID0geGM0MDAwX2Z3dXBsb2FkKGZlKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBmYWlsMjsKKwl9CisKKwlyZXR1cm4gZmU7CitmYWlsOgorCW11dGV4X3VubG9jaygmeGM0MDAwX2xpc3RfbXV0ZXgpOworZmFpbDI6CisJeGM0MDAwX3JlbGVhc2UoZmUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh4YzQwMDBfYXR0YWNoKTsKKworTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgsIERhdmlkZSBGZXJyaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYY2VpdmUgeGM0MDAwIHNpbGljb24gdHVuZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM0MDAwLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM0MDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhNDRkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzQwMDAuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogIERyaXZlciBmb3IgWGNlaXZlIFhDNDAwMCAiUUFNLzhWU0Igc2luZ2xlIGNoaXAgdHVuZXIiCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNyBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1hDNDAwMF9IX18KKyNkZWZpbmUgX19YQzQwMDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCitzdHJ1Y3QgZHZiX2Zyb250ZW5kOworc3RydWN0IGkyY19hZGFwdGVyOworCitzdHJ1Y3QgeGM0MDAwX2NvbmZpZyB7CisJdTgJaTJjX2FkZHJlc3M7CisJLyogaWYgbm9uLXplcm8sIHBvd2VyIG1hbmFnZW1lbnQgaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovCisJdTgJZGVmYXVsdF9wbTsKKwkvKiB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIFhSRUdfQU1QTElUVURFIGluIERWQi1UIG1vZGUgKDA6IG5vIHdyaXRlKSAqLworCXU4CWR2Yl9hbXBsaXR1ZGU7CisJLyogaWYgbm9uLXplcm8sIHJlZ2lzdGVyIDB4MEUgaXMgc2V0IHRvIGZpbHRlciBhbmFsb2cgVFYgdmlkZW8gb3V0cHV0ICovCisJdTgJc2V0X3Ntb290aGVkY3ZiczsKKwkvKiBJRiBmb3IgRFZCLVQgKi8KKwl1MzIJaWZfa2h6OworfTsKKworLyogeGM0MDAwIGNhbGxiYWNrIGNvbW1hbmQgKi8KKyNkZWZpbmUgWEM0MDAwX1RVTkVSX1JFU0VUCQkwCisKKy8qIEZvciBlYWNoIGJyaWRnZSBmcmFtZXdvcmssIHdoZW4gaXQgYXR0YWNoZXMgZWl0aGVyIGFuYWxvZyBvciBkaWdpdGFsLAorICogaXQgaGFzIHRvIHN0b3JlIGEgcmVmZXJlbmNlIGJhY2sgdG8gaXRzIF9jb3JlIGVxdWl2YWxlbnQgc3RydWN0dXJlLAorICogc28gdGhhdCBpdCBjYW4gc2VydmljZSB0aGUgaGFyZHdhcmUgYnkgc3RlZXJpbmcgZ3BpbydzIGV0Yy4KKyAqIEVhY2ggYnJpZGdlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCBzbyBjYXN0IGRldnB0ciBhY2NvcmRpbmdseS4KKyAqIFRoZSB4YzQwMDAgZHJpdmVyIGNhcmVzIG5vdCBmb3IgdGhpcyB2YWx1ZSwgb3RoZXIgdGhhbiBlbnN1cmluZworICogaXQncyBwYXNzZWQgYmFjayB0byBhIGJyaWRnZSBkdXJpbmcgdHVuZXJfY2FsbGJhY2soKS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfWEM0MDAwKSB8fCAoZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfWEM0MDAwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnhjNDAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJCSAgc3RydWN0IHhjNDAwMF9jb25maWcgKmNmZyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzQwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCQkJIHN0cnVjdCB4YzQwMDBfY29uZmlnICpjZmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwppbmRleCBlZTIxNGMzLi5mNmU0MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKQEAgLTgwLDYgKzgwLDEwIEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiAJc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnIgogCitjb21tZW50ICJTdXBwb3J0ZWQgZGRicmlkZ2UgKCdPY3RvcHVzJykgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9LY29uZmlnIgorCiBjb21tZW50ICJTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQppbmRleCBhMWEwODc1Li5iMmNlZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogCQlkbTExMDUvCQlcCiAJCXB0MS8JCVwKIAkJbWFudGlzLwkJXAotCQluZ2VuZS8KKwkJbmdlbmUvCQlcCisJCWRkYnJpZGdlLwogCiBvYmotJChDT05GSUdfRFZCX0ZJUkVEVFYpCSs9IGZpcmV3aXJlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCAxZTExMDZkLi41MjFkNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtODkyLDcgKzg5Miw3IEBACiAJaWYgKCEoYnR0dl9wY2lfZGV2ID0gYnR0dl9nZXRfcGNpZGV2KGNhcmQtPmJ0dHZfbnIpKSkgewogCQlwcmludGsoImR2Yl9idDh4eDogbm8gcGNpIGRldmljZSBmb3IgY2FyZCAlZFxuIiwgY2FyZC0+YnR0dl9ucik7CiAJCWtmcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCEoY2FyZC0+YnQgPSBkdmJfYnQ4eHhfODc4X21hdGNoKGNhcmQtPmJ0dHZfbnIsIGJ0dHZfcGNpX2RldikpKSB7CkBAIC05MDIsNyArOTAyLDcgQEAKIAkJICAgICAgICJpbnN0YWxsZWQsIHRyeSByZW1vdmluZyBpdC5cbiIpOwogCiAJCWtmcmVlKGNhcmQpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJbXV0ZXhfaW5pdCgmY2FyZC0+YnQtPmdwaW9fbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDk5ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgRFZCX0REQlJJREdFCisJdHJpc3RhdGUgIkRpZ2l0YWwgRGV2aWNlcyBicmlkZ2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjA5MHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RSWEsgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTE4MjcxQzJERCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIGNhcmRzIHdpdGggdGhlIERpZ2l0YWwgRGV2aWNlcyBQQ0kgZXhwcmVzcyBicmlkZ2U6CisJICAtIE9jdG9wdXMgUENJZSBCcmlkZ2UKKwkgIC0gT2N0b3B1cyBtaW5pIFBDSWUgQnJpZGdlCisJICAtIE9jdG9wdXMgTEUKKwkgIC0gRHVvRmxleCBTMiBPY3RvcHVzCisJICAtIER1b0ZsZXggQ1QgT2N0b3B1cworCSAgLSBjaW5lUzIodjYpCisKKwkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGNhcmQgYW5kIHdhbnQgdG8gdXNlIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRmZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGRkYnJpZGdlIGRldmljZSBkcml2ZXIKKyMKKworZGRicmlkZ2Utb2JqcyA6PSBkZGJyaWRnZS1jb3JlLm8KKworb2JqLSQoQ09ORklHX0RWQl9EREJSSURHRSkgKz0gZGRicmlkZ2UubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy8KKworIyBGb3IgdGhlIHN0YWdpbmcgQ0kgZHJpdmVyIGN4ZDIwOTkKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvc3RhZ2luZy9jeGQyMDk5LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2Q1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9kZGJyaWRnZS1jb3JlLmMKQEAgLTAsMCArMSwxNzE5IEBACisvKgorICogZGRicmlkZ2UuYzogRGlnaXRhbCBEZXZpY2VzIFBDSWUgYnJpZGdlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDExIERpZ2l0YWwgRGV2aWNlcyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBvbmx5LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqIE9yLCBwb2ludCB5b3VyIGJyb3dzZXIgdG8gaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3dhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlICJkZGJyaWRnZS5oIgorCisjaW5jbHVkZSAiZGRicmlkZ2UtcmVncy5oIgorCisjaW5jbHVkZSAidGRhMTgyNzFjMmRkLmgiCisjaW5jbHVkZSAic3R2NjExMHguaCIKKyNpbmNsdWRlICJzdHYwOTB4LmgiCisjaW5jbHVkZSAibG5iaDI0LmgiCisjaW5jbHVkZSAiZHJ4ay5oIgorCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworLyogTVNJIGhhZCBwcm9ibGVtcyB3aXRoIGxvc3QgaW50ZXJydXB0cywgZml4ZWQgYnV0IG5lZWRzIHRlc3RpbmcgKi8KKyN1bmRlZiBDT05GSUdfUENJX01TSQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGkyY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTggYWRyLCB1OCAqdmFsKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMV0gPSB7ey5hZGRyID0gYWRyLCAgLmZsYWdzID0gSTJDX01fUkQsCisJCQkJICAgLmJ1ZiAgPSB2YWwsICAubGVuICAgPSAxIH0gfTsKKwlyZXR1cm4gKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAxKSA9PSAxKSA/IDAgOiAtMTsKK30KKworc3RhdGljIGludCBpMmNfcmVhZF9yZWcoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBhZHIsIHU4IHJlZywgdTggKnZhbCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0ge3suYWRkciA9IGFkciwgIC5mbGFncyA9IDAsCisJCQkJICAgLmJ1ZiAgPSAmcmVnLCAubGVuICAgPSAxIH0sCisJCQkJICB7LmFkZHIgPSBhZHIsICAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkgICAuYnVmICA9IHZhbCwgIC5sZW4gICA9IDEgfSB9OworCXJldHVybiAoaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpID8gMCA6IC0xOworfQorCitzdGF0aWMgaW50IGkyY19yZWFkX3JlZzE2KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTggYWRyLAorCQkJICB1MTYgcmVnLCB1OCAqdmFsKQoreworCXU4IG1zZ1syXSA9IHtyZWc+PjgsIHJlZyYweGZmfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0ge3suYWRkciA9IGFkciwgLmZsYWdzID0gMCwKKwkJCQkgICAuYnVmICA9IG1zZywgLmxlbiAgID0gMn0sCisJCQkJICB7LmFkZHIgPSBhZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAgIC5idWYgID0gdmFsLCAubGVuICAgPSAxfSB9OworCXJldHVybiAoaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIDIpID09IDIpID8gMCA6IC0xOworfQorCitzdGF0aWMgaW50IGRkYl9pMmNfY21kKHN0cnVjdCBkZGJfaTJjICppMmMsIHUzMiBhZHIsIHUzMiBjbWQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gaTJjLT5kZXY7CisJaW50IHN0YXQ7CisJdTMyIHZhbDsKKworCWkyYy0+ZG9uZSA9IDA7CisJZGRid3JpdGVsKChhZHIgPDwgOSkgfCBjbWQsIGkyYy0+cmVncyArIEkyQ19DT01NQU5EKTsKKwlzdGF0ID0gd2FpdF9ldmVudF90aW1lb3V0KGkyYy0+d3EsIGkyYy0+ZG9uZSA9PSAxLCBIWik7CisJaWYgKHN0YXQgPD0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkkyQyB0aW1lb3V0XG4iKTsKKwkJeyAvKiBNU0kgZGVidWdnaW5nKi8KKwkJCXUzMiBpc3RhdCA9IGRkYnJlYWRsKElOVEVSUlVQVF9TVEFUVVMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJJUlMgJTA4eFxuIiwgaXN0YXQpOworCQkJZGRid3JpdGVsKGlzdGF0LCBJTlRFUlJVUFRfQUNLKTsKKwkJfQorCQlyZXR1cm4gLUVJTzsKKwl9CisJdmFsID0gZGRicmVhZGwoaTJjLT5yZWdzK0kyQ19DT01NQU5EKTsKKwlpZiAodmFsICYgMHg3MDAwMCkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGRiX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCit7CisJc3RydWN0IGRkYl9pMmMgKmkyYyA9IChzdHJ1Y3QgZGRiX2kyYyAqKWkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IGRkYiAqZGV2ID0gaTJjLT5kZXY7CisJdTggYWRkciA9IDA7CisKKwlpZiAobnVtKQorCQlhZGRyID0gbXNnWzBdLmFkZHI7CisKKwlpZiAobnVtID09IDIgJiYgbXNnWzFdLmZsYWdzICYgSTJDX01fUkQgJiYKKwkgICAgIShtc2dbMF0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJbWVtY3B5X3RvaW8oZGV2LT5yZWdzICsgSTJDX1RBU0tNRU1fQkFTRSArIGkyYy0+d2J1ZiwKKwkJCSAgICBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKKwkJZGRid3JpdGVsKG1zZ1swXS5sZW58KG1zZ1sxXS5sZW4gPDwgMTYpLAorCQkJICBpMmMtPnJlZ3MrSTJDX1RBU0tMRU5HVEgpOworCQlpZiAoIWRkYl9pMmNfY21kKGkyYywgYWRkciwgMSkpIHsKKwkJCW1lbWNweV9mcm9taW8obXNnWzFdLmJ1ZiwKKwkJCQkgICAgICBkZXYtPnJlZ3MgKyBJMkNfVEFTS01FTV9CQVNFICsgaTJjLT5yYnVmLAorCQkJCSAgICAgIG1zZ1sxXS5sZW4pOworCQkJcmV0dXJuIG51bTsKKwkJfQorCX0KKworCWlmIChudW0gPT0gMSAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQlkZGJjcHl0byhJMkNfVEFTS01FTV9CQVNFICsgaTJjLT53YnVmLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKKwkJZGRid3JpdGVsKG1zZ1swXS5sZW4sIGkyYy0+cmVncyArIEkyQ19UQVNLTEVOR1RIKTsKKwkJaWYgKCFkZGJfaTJjX2NtZChpMmMsIGFkZHIsIDIpKQorCQkJcmV0dXJuIG51bTsKKwl9CisJaWYgKG51bSA9PSAxICYmIChtc2dbMF0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJZGRid3JpdGVsKG1zZ1swXS5sZW4gPDwgMTYsIGkyYy0+cmVncyArIEkyQ19UQVNLTEVOR1RIKTsKKwkJaWYgKCFkZGJfaTJjX2NtZChpMmMsIGFkZHIsIDMpKSB7CisJCQlkZGJjcHlmcm9tKG1zZ1swXS5idWYsCisJCQkJICAgSTJDX1RBU0tNRU1fQkFTRSArIGkyYy0+cmJ1ZiwgbXNnWzBdLmxlbik7CisJCQlyZXR1cm4gbnVtOworCQl9CisJfQorCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyB1MzIgZGRiX2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RydWN0IGkyY19hbGdvcml0aG0gZGRiX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gZGRiX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGRkYl9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyB2b2lkIGRkYl9pMmNfcmVsZWFzZShzdHJ1Y3QgZGRiICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGRkYl9pMmMgKmkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pbmZvLT5wb3J0X251bTsgaSsrKSB7CisJCWkyYyA9ICZkZXYtPmkyY1tpXTsKKwkJYWRhcCA9ICZpMmMtPmFkYXA7CisJCWkyY19kZWxfYWRhcHRlcihhZGFwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGRiX2kyY19pbml0KHN0cnVjdCBkZGIgKmRldikKK3sKKwlpbnQgaSwgaiwgc3RhdCA9IDA7CisJc3RydWN0IGRkYl9pMmMgKmkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pbmZvLT5wb3J0X251bTsgaSsrKSB7CisJCWkyYyA9ICZkZXYtPmkyY1tpXTsKKwkJaTJjLT5kZXYgPSBkZXY7CisJCWkyYy0+bnIgPSBpOworCQlpMmMtPndidWYgPSBpICogKEkyQ19UQVNLTUVNX1NJWkUgLyA0KTsKKwkJaTJjLT5yYnVmID0gaTJjLT53YnVmICsgKEkyQ19UQVNLTUVNX1NJWkUgLyA4KTsKKwkJaTJjLT5yZWdzID0gMHg4MCArIGkgKiAweDIwOworCQlkZGJ3cml0ZWwoSTJDX1NQRUVEXzEwMCwgaTJjLT5yZWdzICsgSTJDX1RJTUlORyk7CisJCWRkYndyaXRlbCgoaTJjLT5yYnVmIDw8IDE2KSB8IGkyYy0+d2J1ZiwKKwkJCSAgaTJjLT5yZWdzICsgSTJDX1RBU0tBRERSRVNTKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT53cSk7CisKKwkJYWRhcCA9ICZpMmMtPmFkYXA7CisJCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgaTJjKTsKKyNpZmRlZiBJMkNfQURBUF9DTEFTU19UVl9ESUdJVEFMCisJCWFkYXAtPmNsYXNzID0gSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTHxJMkNfQ0xBU1NfVFZfQU5BTE9HOworI2Vsc2UKKyNpZmRlZiBJMkNfQ0xBU1NfVFZfQU5BTE9HCisJCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKyNlbmRpZgorI2VuZGlmCisJCXN0cmNweShhZGFwLT5uYW1lLCAiZGRicmlkZ2UiKTsKKwkJYWRhcC0+YWxnbyA9ICZkZGJfaTJjX2FsZ287CisJCWFkYXAtPmFsZ29fZGF0YSA9ICh2b2lkICopaTJjOworCQlhZGFwLT5kZXYucGFyZW50ID0gJmRldi0+cGRldi0+ZGV2OworCQlzdGF0ID0gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworCQlpZiAoc3RhdCkKKwkJCWJyZWFrOworCX0KKwlpZiAoc3RhdCkKKwkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJaTJjID0gJmRldi0+aTJjW2pdOworCQkJYWRhcCA9ICZpMmMtPmFkYXA7CisJCQlpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7CisJCX0KKwlyZXR1cm4gc3RhdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAwCitzdGF0aWMgdm9pZCBzZXRfdGFibGUoc3RydWN0IGRkYiAqZGV2LCB1MzIgb2ZmLAorCQkgICAgICBkbWFfYWRkcl90ICpwYnVmLCB1MzIgbnVtKQoreworCXUzMiBpLCBiYXNlOworCXU2NCBtZW07CisKKwliYXNlID0gRE1BX0JBU0VfQUREUkVTU19UQUJMRSArIG9mZjsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJbWVtID0gcGJ1ZltpXTsKKwkJZGRid3JpdGVsKG1lbSAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBpICogOCk7CisJCWRkYndyaXRlbChtZW0gPj4gMzIsIGJhc2UgKyBpICogOCArIDQpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBkZGJfYWRkcmVzc190YWJsZShzdHJ1Y3QgZGRiICpkZXYpCit7CisJdTMyIGksIGosIGJhc2U7CisJdTY0IG1lbTsKKwlkbWFfYWRkcl90ICpwYnVmOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+aW5mby0+cG9ydF9udW0gKiAyOyBpKyspIHsKKwkJYmFzZSA9IERNQV9CQVNFX0FERFJFU1NfVEFCTEUgKyBpICogMHgxMDA7CisJCXBidWYgPSBkZXYtPmlucHV0W2ldLnBidWY7CisJCWZvciAoaiA9IDA7IGogPCBkZXYtPmlucHV0W2ldLmRtYV9idWZfbnVtOyBqKyspIHsKKwkJCW1lbSA9IHBidWZbal07CisJCQlkZGJ3cml0ZWwobWVtICYgMHhmZmZmZmZmZiwgYmFzZSArIGogKiA4KTsKKwkJCWRkYndyaXRlbChtZW0gPj4gMzIsIGJhc2UgKyBqICogOCArIDQpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBkZXYtPmluZm8tPnBvcnRfbnVtOyBpKyspIHsKKwkJYmFzZSA9IERNQV9CQVNFX0FERFJFU1NfVEFCTEUgKyAweDgwMCArIGkgKiAweDEwMDsKKwkJcGJ1ZiA9IGRldi0+b3V0cHV0W2ldLnBidWY7CisJCWZvciAoaiA9IDA7IGogPCBkZXYtPm91dHB1dFtpXS5kbWFfYnVmX251bTsgaisrKSB7CisJCQltZW0gPSBwYnVmW2pdOworCQkJZGRid3JpdGVsKG1lbSAmIDB4ZmZmZmZmZmYsIGJhc2UgKyBqICogOCk7CisJCQlkZGJ3cml0ZWwobWVtID4+IDMyLCBiYXNlICsgaiAqIDggKyA0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaW9fZnJlZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggKip2YnVmLAorCQkgICAgZG1hX2FkZHJfdCAqcGJ1ZiwgdTMyIHNpemUsIGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKHZidWZbaV0pIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZSwgdmJ1ZltpXSwgcGJ1ZltpXSk7CisJCQl2YnVmW2ldID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBpb19hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggKip2YnVmLAorCQkgICAgZG1hX2FkZHJfdCAqcGJ1ZiwgdTMyIHNpemUsIGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJdmJ1ZltpXSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemUsICZwYnVmW2ldKTsKKwkJaWYgKCF2YnVmW2ldKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRkYl9idWZmZXJzX2FsbG9jKHN0cnVjdCBkZGIgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGRiX3BvcnQgKnBvcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pbmZvLT5wb3J0X251bTsgaSsrKSB7CisJCXBvcnQgPSAmZGV2LT5wb3J0W2ldOworCQlzd2l0Y2ggKHBvcnQtPmNsYXNzKSB7CisJCWNhc2UgRERCX1BPUlRfVFVORVI6CisJCQlpZiAoaW9fYWxsb2MoZGV2LT5wZGV2LCBwb3J0LT5pbnB1dFswXS0+dmJ1ZiwKKwkJCQkgICAgIHBvcnQtPmlucHV0WzBdLT5wYnVmLAorCQkJCSAgICAgcG9ydC0+aW5wdXRbMF0tPmRtYV9idWZfc2l6ZSwKKwkJCQkgICAgIHBvcnQtPmlucHV0WzBdLT5kbWFfYnVmX251bSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChpb19hbGxvYyhkZXYtPnBkZXYsIHBvcnQtPmlucHV0WzFdLT52YnVmLAorCQkJCSAgICAgcG9ydC0+aW5wdXRbMV0tPnBidWYsCisJCQkJICAgICBwb3J0LT5pbnB1dFsxXS0+ZG1hX2J1Zl9zaXplLAorCQkJCSAgICAgcG9ydC0+aW5wdXRbMV0tPmRtYV9idWZfbnVtKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCWNhc2UgRERCX1BPUlRfQ0k6CisJCQlpZiAoaW9fYWxsb2MoZGV2LT5wZGV2LCBwb3J0LT5pbnB1dFswXS0+dmJ1ZiwKKwkJCQkgICAgIHBvcnQtPmlucHV0WzBdLT5wYnVmLAorCQkJCSAgICAgcG9ydC0+aW5wdXRbMF0tPmRtYV9idWZfc2l6ZSwKKwkJCQkgICAgIHBvcnQtPmlucHV0WzBdLT5kbWFfYnVmX251bSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChpb19hbGxvYyhkZXYtPnBkZXYsIHBvcnQtPm91dHB1dC0+dmJ1ZiwKKwkJCQkgICAgIHBvcnQtPm91dHB1dC0+cGJ1ZiwKKwkJCQkgICAgIHBvcnQtPm91dHB1dC0+ZG1hX2J1Zl9zaXplLAorCQkJCSAgICAgcG9ydC0+b3V0cHV0LT5kbWFfYnVmX251bSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJZGRiX2FkZHJlc3NfdGFibGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGRiX2J1ZmZlcnNfZnJlZShzdHJ1Y3QgZGRiICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGRkYl9wb3J0ICpwb3J0OworCisJZm9yIChpID0gMDsgaSA8IGRldi0+aW5mby0+cG9ydF9udW07IGkrKykgeworCQlwb3J0ID0gJmRldi0+cG9ydFtpXTsKKwkJaW9fZnJlZShkZXYtPnBkZXYsIHBvcnQtPmlucHV0WzBdLT52YnVmLAorCQkJcG9ydC0+aW5wdXRbMF0tPnBidWYsCisJCQlwb3J0LT5pbnB1dFswXS0+ZG1hX2J1Zl9zaXplLAorCQkJcG9ydC0+aW5wdXRbMF0tPmRtYV9idWZfbnVtKTsKKwkJaW9fZnJlZShkZXYtPnBkZXYsIHBvcnQtPmlucHV0WzFdLT52YnVmLAorCQkJcG9ydC0+aW5wdXRbMV0tPnBidWYsCisJCQlwb3J0LT5pbnB1dFsxXS0+ZG1hX2J1Zl9zaXplLAorCQkJcG9ydC0+aW5wdXRbMV0tPmRtYV9idWZfbnVtKTsKKwkJaW9fZnJlZShkZXYtPnBkZXYsIHBvcnQtPm91dHB1dC0+dmJ1ZiwKKwkJCXBvcnQtPm91dHB1dC0+cGJ1ZiwKKwkJCXBvcnQtPm91dHB1dC0+ZG1hX2J1Zl9zaXplLAorCQkJcG9ydC0+b3V0cHV0LT5kbWFfYnVmX251bSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZGJfaW5wdXRfc3RhcnQoc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gaW5wdXQtPnBvcnQtPmRldjsKKworCXNwaW5fbG9ja19pcnEoJmlucHV0LT5sb2NrKTsKKwlpbnB1dC0+Y2J1ZiA9IDA7CisJaW5wdXQtPmNvZmYgPSAwOworCisJLyogcmVzZXQgKi8KKwlkZGJ3cml0ZWwoMCwgVFNfSU5QVVRfQ09OVFJPTChpbnB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoMiwgVFNfSU5QVVRfQ09OVFJPTChpbnB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoMCwgVFNfSU5QVVRfQ09OVFJPTChpbnB1dC0+bnIpKTsKKworCWRkYndyaXRlbCgoMSA8PCAxNikgfAorCQkgIChpbnB1dC0+ZG1hX2J1Zl9udW0gPDwgMTEpIHwKKwkJICAoaW5wdXQtPmRtYV9idWZfc2l6ZSA+PiA3KSwKKwkJICBETUFfQlVGRkVSX1NJWkUoaW5wdXQtPm5yKSk7CisJZGRid3JpdGVsKDAsIERNQV9CVUZGRVJfQUNLKGlucHV0LT5ucikpOworCisJZGRid3JpdGVsKDEsIERNQV9CQVNFX1dSSVRFKTsKKwlkZGJ3cml0ZWwoMywgRE1BX0JVRkZFUl9DT05UUk9MKGlucHV0LT5ucikpOworCWRkYndyaXRlbCg5LCBUU19JTlBVVF9DT05UUk9MKGlucHV0LT5ucikpOworCWlucHV0LT5ydW5uaW5nID0gMTsKKwlzcGluX3VubG9ja19pcnEoJmlucHV0LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZGRiX2lucHV0X3N0b3Aoc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gaW5wdXQtPnBvcnQtPmRldjsKKworCXNwaW5fbG9ja19pcnEoJmlucHV0LT5sb2NrKTsKKwlkZGJ3cml0ZWwoMCwgVFNfSU5QVVRfQ09OVFJPTChpbnB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoMCwgRE1BX0JVRkZFUl9DT05UUk9MKGlucHV0LT5ucikpOworCWlucHV0LT5ydW5uaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmlucHV0LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZGRiX291dHB1dF9zdGFydChzdHJ1Y3QgZGRiX291dHB1dCAqb3V0cHV0KQoreworCXN0cnVjdCBkZGIgKmRldiA9IG91dHB1dC0+cG9ydC0+ZGV2OworCisJc3Bpbl9sb2NrX2lycSgmb3V0cHV0LT5sb2NrKTsKKwlvdXRwdXQtPmNidWYgPSAwOworCW91dHB1dC0+Y29mZiA9IDA7CisJZGRid3JpdGVsKDAsIFRTX09VVFBVVF9DT05UUk9MKG91dHB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoMiwgVFNfT1VUUFVUX0NPTlRST0wob3V0cHV0LT5ucikpOworCWRkYndyaXRlbCgwLCBUU19PVVRQVVRfQ09OVFJPTChvdXRwdXQtPm5yKSk7CisJZGRid3JpdGVsKDB4M2MsIFRTX09VVFBVVF9DT05UUk9MKG91dHB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoKDEgPDwgMTYpIHwKKwkJICAob3V0cHV0LT5kbWFfYnVmX251bSA8PCAxMSkgfAorCQkgIChvdXRwdXQtPmRtYV9idWZfc2l6ZSA+PiA3KSwKKwkJICBETUFfQlVGRkVSX1NJWkUob3V0cHV0LT5uciArIDgpKTsKKwlkZGJ3cml0ZWwoMCwgRE1BX0JVRkZFUl9BQ0sob3V0cHV0LT5uciArIDgpKTsKKworCWRkYndyaXRlbCgxLCBETUFfQkFTRV9SRUFEKTsKKwlkZGJ3cml0ZWwoMywgRE1BX0JVRkZFUl9DT05UUk9MKG91dHB1dC0+bnIgKyA4KSk7CisJLyogZGRid3JpdGVsKDB4YmQsIFRTX09VVFBVVF9DT05UUk9MKG91dHB1dC0+bnIpKTsgKi8KKwlkZGJ3cml0ZWwoMHgxZCwgVFNfT1VUUFVUX0NPTlRST0wob3V0cHV0LT5ucikpOworCW91dHB1dC0+cnVubmluZyA9IDE7CisJc3Bpbl91bmxvY2tfaXJxKCZvdXRwdXQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBkZGJfb3V0cHV0X3N0b3Aoc3RydWN0IGRkYl9vdXRwdXQgKm91dHB1dCkKK3sKKwlzdHJ1Y3QgZGRiICpkZXYgPSBvdXRwdXQtPnBvcnQtPmRldjsKKworCXNwaW5fbG9ja19pcnEoJm91dHB1dC0+bG9jayk7CisJZGRid3JpdGVsKDAsIFRTX09VVFBVVF9DT05UUk9MKG91dHB1dC0+bnIpKTsKKwlkZGJ3cml0ZWwoMCwgRE1BX0JVRkZFUl9DT05UUk9MKG91dHB1dC0+bnIgKyA4KSk7CisJb3V0cHV0LT5ydW5uaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnEoJm91dHB1dC0+bG9jayk7Cit9CisKK3N0YXRpYyB1MzIgZGRiX291dHB1dF9mcmVlKHN0cnVjdCBkZGJfb3V0cHV0ICpvdXRwdXQpCit7CisJdTMyIGlkeCwgb2ZmLCBzdGF0ID0gb3V0cHV0LT5zdGF0OworCXMzMiBkaWZmOworCisJaWR4ID0gKHN0YXQgPj4gMTEpICYgMHgxZjsKKwlvZmYgPSAoc3RhdCAmIDB4N2ZmKSA8PCA3OworCisJaWYgKG91dHB1dC0+Y2J1ZiAhPSBpZHgpIHsKKwkJaWYgKCgoKG91dHB1dC0+Y2J1ZiArIDEpICUgb3V0cHV0LT5kbWFfYnVmX251bSkgPT0gaWR4KSAmJgorCQkgICAgKG91dHB1dC0+ZG1hX2J1Zl9zaXplIC0gb3V0cHV0LT5jb2ZmIDw9IDE4OCkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE4ODsKKwl9CisJZGlmZiA9IG9mZiAtIG91dHB1dC0+Y29mZjsKKwlpZiAoZGlmZiA8PSAwIHx8IGRpZmYgPiAxODgpCisJCXJldHVybiAxODg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRkYl9vdXRwdXRfd3JpdGUoc3RydWN0IGRkYl9vdXRwdXQgKm91dHB1dCwKKwkJCQljb25zdCB1OCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gb3V0cHV0LT5wb3J0LT5kZXY7CisJdTMyIGlkeCwgb2ZmLCBzdGF0ID0gb3V0cHV0LT5zdGF0OworCXUzMiBsZWZ0ID0gY291bnQsIGxlbjsKKworCWlkeCA9IChzdGF0ID4+IDExKSAmIDB4MWY7CisJb2ZmID0gKHN0YXQgJiAweDdmZikgPDwgNzsKKworCXdoaWxlIChsZWZ0KSB7CisJCWxlbiA9IG91dHB1dC0+ZG1hX2J1Zl9zaXplIC0gb3V0cHV0LT5jb2ZmOworCQlpZiAoKCgob3V0cHV0LT5jYnVmICsgMSkgJSBvdXRwdXQtPmRtYV9idWZfbnVtKSA9PSBpZHgpICYmCisJCSAgICAob2ZmID09IDApKSB7CisJCQlpZiAobGVuIDw9IDE4OCkKKwkJCQlicmVhazsKKwkJCWxlbiAtPSAxODg7CisJCX0KKwkJaWYgKG91dHB1dC0+Y2J1ZiA9PSBpZHgpIHsKKwkJCWlmIChvZmYgPiBvdXRwdXQtPmNvZmYpIHsKKyNpZiAxCisJCQkJbGVuID0gb2ZmIC0gb3V0cHV0LT5jb2ZmOworCQkJCWxlbiAtPSAobGVuICUgMTg4KTsKKwkJCQlpZiAobGVuIDw9IDE4OCkKKworI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCWxlbiAtPSAxODg7CisJCQl9CisJCX0KKwkJaWYgKGxlbiA+IGxlZnQpCisJCQlsZW4gPSBsZWZ0OworCQlpZiAoY29weV9mcm9tX3VzZXIob3V0cHV0LT52YnVmW291dHB1dC0+Y2J1Zl0gKyBvdXRwdXQtPmNvZmYsCisJCQkJICAgYnVmLCBsZW4pKQorCQkJcmV0dXJuIC1FSU87CisJCWxlZnQgLT0gbGVuOworCQlidWYgKz0gbGVuOworCQlvdXRwdXQtPmNvZmYgKz0gbGVuOworCQlpZiAob3V0cHV0LT5jb2ZmID09IG91dHB1dC0+ZG1hX2J1Zl9zaXplKSB7CisJCQlvdXRwdXQtPmNvZmYgPSAwOworCQkJb3V0cHV0LT5jYnVmID0gKChvdXRwdXQtPmNidWYgKyAxKSAlIG91dHB1dC0+ZG1hX2J1Zl9udW0pOworCQl9CisJCWRkYndyaXRlbCgob3V0cHV0LT5jYnVmIDw8IDExKSB8IChvdXRwdXQtPmNvZmYgPj4gNyksCisJCQkgIERNQV9CVUZGRVJfQUNLKG91dHB1dC0+bnIgKyA4KSk7CisJfQorCXJldHVybiBjb3VudCAtIGxlZnQ7Cit9CisKK3N0YXRpYyB1MzIgZGRiX2lucHV0X2F2YWlsKHN0cnVjdCBkZGJfaW5wdXQgKmlucHV0KQoreworCXN0cnVjdCBkZGIgKmRldiA9IGlucHV0LT5wb3J0LT5kZXY7CisJdTMyIGlkeCwgb2ZmLCBzdGF0ID0gaW5wdXQtPnN0YXQ7CisJdTMyIGN0cmwgPSBkZGJyZWFkbChETUFfQlVGRkVSX0NPTlRST0woaW5wdXQtPm5yKSk7CisKKwlpZHggPSAoc3RhdCA+PiAxMSkgJiAweDFmOworCW9mZiA9IChzdGF0ICYgMHg3ZmYpIDw8IDc7CisKKwlpZiAoY3RybCAmIDQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJQSAlZCAlZCAlMDh4XG4iLCBpZHgsIG9mZiwgY3RybCk7CisJCWRkYndyaXRlbChpbnB1dC0+c3RhdCwgRE1BX0JVRkZFUl9BQ0soaW5wdXQtPm5yKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoaW5wdXQtPmNidWYgIT0gaWR4KQorCQlyZXR1cm4gMTg4OworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IGRkYl9pbnB1dF9yZWFkKHN0cnVjdCBkZGJfaW5wdXQgKmlucHV0LCB1OCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gaW5wdXQtPnBvcnQtPmRldjsKKwl1MzIgbGVmdCA9IGNvdW50OworCXUzMiBpZHgsIG9mZiwgZnJlZSwgc3RhdCA9IGlucHV0LT5zdGF0OworCWludCByZXQ7CisKKwlpZHggPSAoc3RhdCA+PiAxMSkgJiAweDFmOworCW9mZiA9IChzdGF0ICYgMHg3ZmYpIDw8IDc7CisKKwl3aGlsZSAobGVmdCkgeworCQlpZiAoaW5wdXQtPmNidWYgPT0gaWR4KQorCQkJcmV0dXJuIGNvdW50IC0gbGVmdDsKKwkJZnJlZSA9IGlucHV0LT5kbWFfYnVmX3NpemUgLSBpbnB1dC0+Y29mZjsKKwkJaWYgKGZyZWUgPiBsZWZ0KQorCQkJZnJlZSA9IGxlZnQ7CisJCXJldCA9IGNvcHlfdG9fdXNlcihidWYsIGlucHV0LT52YnVmW2lucHV0LT5jYnVmXSArCisJCQkJICAgaW5wdXQtPmNvZmYsIGZyZWUpOworCQlpbnB1dC0+Y29mZiArPSBmcmVlOworCQlpZiAoaW5wdXQtPmNvZmYgPT0gaW5wdXQtPmRtYV9idWZfc2l6ZSkgeworCQkJaW5wdXQtPmNvZmYgPSAwOworCQkJaW5wdXQtPmNidWYgPSAoaW5wdXQtPmNidWYrMSkgJSBpbnB1dC0+ZG1hX2J1Zl9udW07CisJCX0KKwkJbGVmdCAtPSBmcmVlOworCQlkZGJ3cml0ZWwoKGlucHV0LT5jYnVmIDw8IDExKSB8IChpbnB1dC0+Y29mZiA+PiA3KSwKKwkJCSAgRE1BX0JVRkZFUl9BQ0soaW5wdXQtPm5yKSk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMAorc3RhdGljIHN0cnVjdCBkZGJfaW5wdXQgKmZlMmlucHV0KHN0cnVjdCBkZGIgKmRldiwgc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pbmZvLT5wb3J0X251bSAqIDI7IGkrKykgeworCQlpZiAoZGV2LT5pbnB1dFtpXS5mZSA9PSBmZSkKKwkJCXJldHVybiAmZGV2LT5pbnB1dFtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkcnhrX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGRiX2lucHV0ICppbnB1dCA9IGZlLT5zZWNfcHJpdjsKKwlzdHJ1Y3QgZGRiX3BvcnQgKnBvcnQgPSBpbnB1dC0+cG9ydDsKKwlpbnQgc3RhdHVzOworCisJaWYgKGVuYWJsZSkgeworCQltdXRleF9sb2NrKCZwb3J0LT5pMmNfZ2F0ZV9sb2NrKTsKKwkJc3RhdHVzID0gaW5wdXQtPmdhdGVfY3RybChmZSwgMSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gaW5wdXQtPmdhdGVfY3RybChmZSwgMCk7CisJCW11dGV4X3VubG9jaygmcG9ydC0+aTJjX2dhdGVfbG9jayk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGVtb2RfYXR0YWNoX2RyeGsoc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmMgPSAmaW5wdXQtPnBvcnQtPmkyYy0+YWRhcDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgZHJ4a19jb25maWcgY29uZmlnOworCisJbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKKwljb25maWcuYWRyID0gMHgyOSArIChpbnB1dC0+bnIgJiAxKTsKKworCWZlID0gaW5wdXQtPmZlID0gZHZiX2F0dGFjaChkcnhrX2F0dGFjaCwgJmNvbmZpZywgaTJjLCAmaW5wdXQtPmZlMik7CisJaWYgKCFpbnB1dC0+ZmUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBEUlhLIGZvdW5kIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlmZS0+c2VjX3ByaXYgPSBpbnB1dDsKKwlpbnB1dC0+Z2F0ZV9jdHJsID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsOworCWZlLT5vcHMuaTJjX2dhdGVfY3RybCA9IGRyeGtfZ2F0ZV9jdHJsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR1bmVyX2F0dGFjaF90ZGExODI3MShzdHJ1Y3QgZGRiX2lucHV0ICppbnB1dCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyA9ICZpbnB1dC0+cG9ydC0+aTJjLT5hZGFwOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOworCisJaWYgKGlucHV0LT5mZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWlucHV0LT5mZS0+b3BzLmkyY19nYXRlX2N0cmwoaW5wdXQtPmZlLCAxKTsKKwlmZSA9IGR2Yl9hdHRhY2godGRhMTgyNzFjMmRkX2F0dGFjaCwgaW5wdXQtPmZlLCBpMmMsIDB4NjApOworCWlmICghZmUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBUREExODI3MSBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGlucHV0LT5mZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWlucHV0LT5mZS0+b3BzLmkyY19nYXRlX2N0cmwoaW5wdXQtPmZlLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHN0djA5MHhfY29uZmlnIHN0djA5MDAgPSB7CisJLmRldmljZSAgICAgICAgID0gU1RWMDkwMCwKKwkuZGVtb2RfbW9kZSAgICAgPSBTVFYwOTB4X0RVQUwsCisJLmNsa19tb2RlICAgICAgID0gU1RWMDkweF9DTEtfRVhULAorCisJLnh0YWwgICAgICAgICAgID0gMjcwMDAwMDAsCisJLmFkZHJlc3MgICAgICAgID0gMHg2OSwKKworCS50czFfbW9kZSAgICAgICA9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQsCisJLnRzMl9tb2RlICAgICAgID0gU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRCwKKworCS5yZXBlYXRlcl9sZXZlbCA9IFNUVjA5MHhfUlBUTEVWRUxfMTYsCisKKwkuYWRjMV9yYW5nZQk9IFNUVjA5MHhfQURDXzFWcHAsCisJLmFkYzJfcmFuZ2UJPSBTVFYwOTB4X0FEQ18xVnBwLAorCisJLmRpc2VxY19lbnZlbG9wZV9tb2RlID0gdHJ1ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgc3R2MDkwMF9hYSA9IHsKKwkuZGV2aWNlICAgICAgICAgPSBTVFYwOTAwLAorCS5kZW1vZF9tb2RlICAgICA9IFNUVjA5MHhfRFVBTCwKKwkuY2xrX21vZGUgICAgICAgPSBTVFYwOTB4X0NMS19FWFQsCisKKwkueHRhbCAgICAgICAgICAgPSAyNzAwMDAwMCwKKwkuYWRkcmVzcyAgICAgICAgPSAweDY4LAorCisJLnRzMV9tb2RlICAgICAgID0gU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRCwKKwkudHMyX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCisJLnJlcGVhdGVyX2xldmVsID0gU1RWMDkweF9SUFRMRVZFTF8xNiwKKworCS5hZGMxX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKwkuYWRjMl9yYW5nZQk9IFNUVjA5MHhfQURDXzFWcHAsCisKKwkuZGlzZXFjX2VudmVsb3BlX21vZGUgPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEweF9jb25maWcgc3R2NjExMGEgPSB7CisJLmFkZHIgICAgPSAweDYwLAorCS5yZWZjbGsJID0gMjcwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEweF9jb25maWcgc3R2NjExMGIgPSB7CisJLmFkZHIgICAgPSAweDYzLAorCS5yZWZjbGsJID0gMjcwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKworc3RhdGljIGludCBkZW1vZF9hdHRhY2hfc3R2MDkwMChzdHJ1Y3QgZGRiX2lucHV0ICppbnB1dCwgaW50IHR5cGUpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmMgPSAmaW5wdXQtPnBvcnQtPmkyYy0+YWRhcDsKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IHR5cGUgPyAmc3R2MDkwMF9hYSA6ICZzdHYwOTAwOworCisJaW5wdXQtPmZlID0gZHZiX2F0dGFjaChzdHYwOTB4X2F0dGFjaCwgZmVjb25mLCBpMmMsCisJCQkgICAgICAgKGlucHV0LT5uciAmIDEpID8gU1RWMDkweF9ERU1PRFVMQVRPUl8xCisJCQkgICAgICAgOiBTVFYwOTB4X0RFTU9EVUxBVE9SXzApOworCWlmICghaW5wdXQtPmZlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gU1RWMDkwMCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKCFkdmJfYXR0YWNoKGxuYmgyNF9hdHRhY2gsIGlucHV0LT5mZSwgaTJjLCAwLAorCQkJMCwgKGlucHV0LT5uciAmIDEpID8KKwkJCSgweDA5IC0gdHlwZSkgOiAoMHgwYiAtIHR5cGUpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIExOQkgyNCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHVuZXJfYXR0YWNoX3N0djYxMTAoc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQsIGludCB0eXBlKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gJmlucHV0LT5wb3J0LT5pMmMtPmFkYXA7CisJc3RydWN0IHN0djA5MHhfY29uZmlnICpmZWNvbmYgPSB0eXBlID8gJnN0djA5MDBfYWEgOiAmc3R2MDkwMDsKKwlzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnICp0dW5lcmNvbmYgPSAoaW5wdXQtPm5yICYgMSkgPworCQkmc3R2NjExMGIgOiAmc3R2NjExMGE7CisJc3RydWN0IHN0djYxMTB4X2RldmN0bCAqY3RsOworCisJY3RsID0gZHZiX2F0dGFjaChzdHY2MTEweF9hdHRhY2gsIGlucHV0LT5mZSwgdHVuZXJjb25mLCBpMmMpOworCWlmICghY3RsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gU1RWNjExMFggZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByaW50ayhLRVJOX0lORk8gImF0dGFjaCB0dW5lciBpbnB1dCAlZCBhZHIgJTAyeFxuIiwKKwkJCSBpbnB1dC0+bnIsIHR1bmVyY29uZi0+YWRkcik7CisKKwlmZWNvbmYtPnR1bmVyX2luaXQgICAgICAgICAgPSBjdGwtPnR1bmVyX2luaXQ7CisJZmVjb25mLT50dW5lcl9zbGVlcCAgICAgICAgID0gY3RsLT50dW5lcl9zbGVlcDsKKwlmZWNvbmYtPnR1bmVyX3NldF9tb2RlICAgICAgPSBjdGwtPnR1bmVyX3NldF9tb2RlOworCWZlY29uZi0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSA9IGN0bC0+dHVuZXJfc2V0X2ZyZXF1ZW5jeTsKKwlmZWNvbmYtPnR1bmVyX2dldF9mcmVxdWVuY3kgPSBjdGwtPnR1bmVyX2dldF9mcmVxdWVuY3k7CisJZmVjb25mLT50dW5lcl9zZXRfYmFuZHdpZHRoID0gY3RsLT50dW5lcl9zZXRfYmFuZHdpZHRoOworCWZlY29uZi0+dHVuZXJfZ2V0X2JhbmR3aWR0aCA9IGN0bC0+dHVuZXJfZ2V0X2JhbmR3aWR0aDsKKwlmZWNvbmYtPnR1bmVyX3NldF9iYmdhaW4gICAgPSBjdGwtPnR1bmVyX3NldF9iYmdhaW47CisJZmVjb25mLT50dW5lcl9nZXRfYmJnYWluICAgID0gY3RsLT50dW5lcl9nZXRfYmJnYWluOworCWZlY29uZi0+dHVuZXJfc2V0X3JlZmNsayAgICA9IGN0bC0+dHVuZXJfc2V0X3JlZmNsazsKKwlmZWNvbmYtPnR1bmVyX2dldF9zdGF0dXMgICAgPSBjdGwtPnR1bmVyX2dldF9zdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteV9kdmJfZG14X3RzX2NhcmRfaW5pdChzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCwgY2hhciAqaWQsCisJCQkgICAgaW50ICgqc3RhcnRfZmVlZCkoc3RydWN0IGR2Yl9kZW11eF9mZWVkICopLAorCQkJICAgIGludCAoKnN0b3BfZmVlZCkoc3RydWN0IGR2Yl9kZW11eF9mZWVkICopLAorCQkJICAgIHZvaWQgKnByaXYpCit7CisJZHZiZGVtdXgtPnByaXYgPSBwcml2OworCisJZHZiZGVtdXgtPmZpbHRlcm51bSA9IDI1NjsKKwlkdmJkZW11eC0+ZmVlZG51bSA9IDI1NjsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IHN0YXJ0X2ZlZWQ7CisJZHZiZGVtdXgtPnN0b3BfZmVlZCA9IHN0b3BfZmVlZDsKKwlkdmJkZW11eC0+d3JpdGVfdG9fZGVjb2RlciA9IE5VTEw7CisJZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8CisJCQkJICAgICAgRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwKKwkJCQkgICAgICBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CisJcmV0dXJuIGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7Cit9CisKK3N0YXRpYyBpbnQgbXlfZHZiX2RteGRldl90c19jYXJkX2luaXQoc3RydWN0IGRteGRldiAqZG14ZGV2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4LAorCQkJICAgICAgIHN0cnVjdCBkbXhfZnJvbnRlbmQgKmh3X2Zyb250ZW5kLAorCQkJICAgICAgIHN0cnVjdCBkbXhfZnJvbnRlbmQgKm1lbV9mcm9udGVuZCwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyKQoreworCWludCByZXQ7CisKKwlkbXhkZXYtPmZpbHRlcm51bSA9IDI1NjsKKwlkbXhkZXYtPmRlbXV4ID0gJmR2YmRlbXV4LT5kbXg7CisJZG14ZGV2LT5jYXBhYmlsaXRpZXMgPSAwOworCXJldCA9IGR2Yl9kbXhkZXZfaW5pdChkbXhkZXYsIGR2Yl9hZGFwdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWh3X2Zyb250ZW5kLT5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKKwlkdmJkZW11eC0+ZG14LmFkZF9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgaHdfZnJvbnRlbmQpOworCW1lbV9mcm9udGVuZC0+c291cmNlID0gRE1YX01FTU9SWV9GRTsKKwlkdmJkZW11eC0+ZG14LmFkZF9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgbWVtX2Zyb250ZW5kKTsKKwlyZXR1cm4gZHZiZGVtdXgtPmRteC5jb25uZWN0X2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LCBod19mcm9udGVuZCk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQgPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoIWlucHV0LT51c2VycykKKwkJZGRiX2lucHV0X3N0YXJ0KGlucHV0KTsKKworCXJldHVybiArK2lucHV0LT51c2VyczsKK30KKworc3RhdGljIGludCBzdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OworCXN0cnVjdCBkZGJfaW5wdXQgKmlucHV0ID0gZHZiZG14LT5wcml2OworCisJaWYgKC0taW5wdXQtPnVzZXJzKQorCQlyZXR1cm4gaW5wdXQtPnVzZXJzOworCisJZGRiX2lucHV0X3N0b3AoaW5wdXQpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGR2Yl9pbnB1dF9kZXRhY2goc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwID0gJmlucHV0LT5hZGFwOworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmlucHV0LT5kZW11eDsKKworCXN3aXRjaCAoaW5wdXQtPmF0dGFjaGVkKSB7CisJY2FzZSA1OgorCQlpZiAoaW5wdXQtPmZlMikKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGlucHV0LT5mZTIpOworCQlpZiAoaW5wdXQtPmZlKSB7CisJCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChpbnB1dC0+ZmUpOworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChpbnB1dC0+ZmUpOworCQkJaW5wdXQtPmZlID0gTlVMTDsKKwkJfQorCWNhc2UgNDoKKwkJZHZiX25ldF9yZWxlYXNlKCZpbnB1dC0+ZHZibmV0KTsKKworCWNhc2UgMzoKKwkJZHZiZGVtdXgtPmRteC5jbG9zZSgmZHZiZGVtdXgtPmRteCk7CisJCWR2YmRlbXV4LT5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmJkZW11eC0+ZG14LAorCQkJCQkgICAgICAmaW5wdXQtPmh3X2Zyb250ZW5kKTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZpbnB1dC0+bWVtX2Zyb250ZW5kKTsKKwkJZHZiX2RteGRldl9yZWxlYXNlKCZpbnB1dC0+ZG14ZGV2KTsKKworCWNhc2UgMjoKKwkJZHZiX2RteF9yZWxlYXNlKCZpbnB1dC0+ZGVtdXgpOworCisJY2FzZSAxOgorCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKGFkYXApOworCX0KKwlpbnB1dC0+YXR0YWNoZWQgPSAwOworfQorCitzdGF0aWMgaW50IGR2Yl9pbnB1dF9hdHRhY2goc3RydWN0IGRkYl9pbnB1dCAqaW5wdXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZGRiX3BvcnQgKnBvcnQgPSBpbnB1dC0+cG9ydDsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXAgPSAmaW5wdXQtPmFkYXA7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmaW5wdXQtPmRlbXV4OworCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoYWRhcCwgIkREQnJpZGdlIiwgVEhJU19NT0RVTEUsCisJCQkJICAgJmlucHV0LT5wb3J0LT5kZXYtPnBkZXYtPmRldiwKKwkJCQkgICBhZGFwdGVyX25yKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImRkYnJpZGdlOiBDb3VsZCBub3QgcmVnaXN0ZXIgYWRhcHRlci4iCisJCSAgICAgICAiQ2hlY2sgaWYgeW91IGVuYWJsZWQgZW5vdWdoIGFkYXB0ZXJzIGluIGR2Yi1jb3JlIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWlucHV0LT5hdHRhY2hlZCA9IDE7CisKKwlyZXQgPSBteV9kdmJfZG14X3RzX2NhcmRfaW5pdChkdmJkZW11eCwgIlNXIGRlbXV4IiwKKwkJCQkgICAgICBzdGFydF9mZWVkLAorCQkJCSAgICAgIHN0b3BfZmVlZCwgaW5wdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlucHV0LT5hdHRhY2hlZCA9IDI7CisKKwlyZXQgPSBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdCgmaW5wdXQtPmRteGRldiwgJmlucHV0LT5kZW11eCwKKwkJCQkJICZpbnB1dC0+aHdfZnJvbnRlbmQsCisJCQkJCSAmaW5wdXQtPm1lbV9mcm9udGVuZCwgYWRhcCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaW5wdXQtPmF0dGFjaGVkID0gMzsKKworCXJldCA9IGR2Yl9uZXRfaW5pdChhZGFwLCAmaW5wdXQtPmR2Ym5ldCwgaW5wdXQtPmRteGRldi5kZW11eCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaW5wdXQtPmF0dGFjaGVkID0gNDsKKworCWlucHV0LT5mZSA9IDA7CisJc3dpdGNoIChwb3J0LT50eXBlKSB7CisJY2FzZSBEREJfVFVORVJfRFZCU19TVDoKKwkJaWYgKGRlbW9kX2F0dGFjaF9zdHYwOTAwKGlucHV0LCAwKSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHR1bmVyX2F0dGFjaF9zdHY2MTEwKGlucHV0LCAwKSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGlucHV0LT5mZSkgeworCQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwLCBpbnB1dC0+ZmUpIDwgMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlicmVhazsKKwljYXNlIEREQl9UVU5FUl9EVkJTX1NUX0FBOgorCQlpZiAoZGVtb2RfYXR0YWNoX3N0djA5MDAoaW5wdXQsIDEpIDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAodHVuZXJfYXR0YWNoX3N0djYxMTAoaW5wdXQsIDEpIDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAoaW5wdXQtPmZlKSB7CisJCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXAsIGlucHV0LT5mZSkgPCAwKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWJyZWFrOworCWNhc2UgRERCX1RVTkVSX0RWQkNUX1RSOgorCQlpZiAoZGVtb2RfYXR0YWNoX2RyeGsoaW5wdXQpIDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAodHVuZXJfYXR0YWNoX3RkYTE4MjcxKGlucHV0KSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGlucHV0LT5mZSkgeworCQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwLCBpbnB1dC0+ZmUpIDwgMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoaW5wdXQtPmZlMikgeworCQkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZChhZGFwLCBpbnB1dC0+ZmUyKSA8IDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlpbnB1dC0+ZmUyLT50dW5lcl9wcml2ID0gaW5wdXQtPmZlLT50dW5lcl9wcml2OworCQkJbWVtY3B5KCZpbnB1dC0+ZmUyLT5vcHMudHVuZXJfb3BzLAorCQkJICAgICAgICZpbnB1dC0+ZmUtPm9wcy50dW5lcl9vcHMsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlucHV0LT5hdHRhY2hlZCA9IDU7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzc2l6ZV90IHRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZGJfb3V0cHV0ICpvdXRwdXQgPSBkdmJkZXYtPnByaXY7CisJc2l6ZV90IGxlZnQgPSBjb3VudDsKKwlpbnQgc3RhdDsKKworCXdoaWxlIChsZWZ0KSB7CisJCWlmIChkZGJfb3V0cHV0X2ZyZWUob3V0cHV0KSA8IDE4OCkgeworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCWJyZWFrOworCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKKwkJCQkgICAgb3V0cHV0LT53cSwgZGRiX291dHB1dF9mcmVlKG91dHB1dCkgPj0gMTg4KSA8IDApCisJCQkJYnJlYWs7CisJCX0KKwkJc3RhdCA9IGRkYl9vdXRwdXRfd3JpdGUob3V0cHV0LCBidWYsIGxlZnQpOworCQlpZiAoc3RhdCA8IDApCisJCQlicmVhazsKKwkJYnVmICs9IHN0YXQ7CisJCWxlZnQgLT0gc3RhdDsKKwl9CisJcmV0dXJuIChsZWZ0ID09IGNvdW50KSA/IC1FQUdBSU4gOiAoY291bnQgLSBsZWZ0KTsKK30KKworc3RhdGljIHNzaXplX3QgdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLAorCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGRiX291dHB1dCAqb3V0cHV0ID0gZHZiZGV2LT5wcml2OworCXN0cnVjdCBkZGJfaW5wdXQgKmlucHV0ID0gb3V0cHV0LT5wb3J0LT5pbnB1dFswXTsKKwlpbnQgbGVmdCwgcmVhZDsKKworCWNvdW50IC09IGNvdW50ICUgMTg4OworCWxlZnQgPSBjb3VudDsKKwl3aGlsZSAobGVmdCkgeworCQlpZiAoZGRiX2lucHV0X2F2YWlsKGlucHV0KSA8IDE4OCkgeworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCWJyZWFrOworCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgKKwkJCQkgICAgaW5wdXQtPndxLCBkZGJfaW5wdXRfYXZhaWwoaW5wdXQpID49IDE4OCkgPCAwKQorCQkJCWJyZWFrOworCQl9CisJCXJlYWQgPSBkZGJfaW5wdXRfcmVhZChpbnB1dCwgYnVmLCBsZWZ0KTsKKwkJbGVmdCAtPSByZWFkOworCQlidWYgKz0gcmVhZDsKKwl9CisJcmV0dXJuIChsZWZ0ID09IGNvdW50KSA/IC1FQUdBSU4gOiAoY291bnQgLSBsZWZ0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0c19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCS8qCisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGRiX291dHB1dCAqb3V0cHV0ID0gZHZiZGV2LT5wcml2OworCXN0cnVjdCBkZGJfaW5wdXQgKmlucHV0ID0gb3V0cHV0LT5wb3J0LT5pbnB1dFswXTsKKwkqLworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworI2lmIDAKKwlpZiAoZGF0YV9hdmFpbF90b19yZWFkKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJaWYgKGRhdGFfYXZhaWxfdG9fd3JpdGUpCisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisKKwlwb2xsX3dhaXQoZmlsZSwgJnJlYWRfcXVldWUsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmd3JpdGVfcXVldWUsIHdhaXQpOworI2VuZGlmCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkucmVhZCAgICA9IHRzX3JlYWQsCisJLndyaXRlICAgPSB0c193cml0ZSwKKwkub3BlbiAgICA9IGR2Yl9nZW5lcmljX29wZW4sCisJLnJlbGVhc2UgPSBkdmJfZ2VuZXJpY19yZWxlYXNlLAorCS5wb2xsICAgID0gdHNfcG9sbCwKKwkubW1hcCAgICA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UgZHZiZGV2X2NpID0geworCS5wcml2ICAgID0gMCwKKwkucmVhZGVycyA9IC0xLAorCS53cml0ZXJzID0gLTEsCisJLnVzZXJzICAgPSAtMSwKKwkuZm9wcyAgICA9ICZjaV9mb3BzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBpbnB1dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGRiX2lucHV0ICppbnB1dCA9IChzdHJ1Y3QgZGRiX2lucHV0ICopIGRhdGE7CisJc3RydWN0IGRkYiAqZGV2ID0gaW5wdXQtPnBvcnQtPmRldjsKKworCXNwaW5fbG9jaygmaW5wdXQtPmxvY2spOworCWlmICghaW5wdXQtPnJ1bm5pbmcpIHsKKwkJc3Bpbl91bmxvY2soJmlucHV0LT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlpbnB1dC0+c3RhdCA9IGRkYnJlYWRsKERNQV9CVUZGRVJfQ1VSUkVOVChpbnB1dC0+bnIpKTsKKworCWlmIChpbnB1dC0+cG9ydC0+Y2xhc3MgPT0gRERCX1BPUlRfVFVORVIpIHsKKwkJaWYgKDQmZGRicmVhZGwoRE1BX0JVRkZFUl9DT05UUk9MKGlucHV0LT5ucikpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJPdmVyZmxvdyBpbnB1dCAlZFxuIiwgaW5wdXQtPm5yKTsKKwkJd2hpbGUgKGlucHV0LT5jYnVmICE9ICgoaW5wdXQtPnN0YXQgPj4gMTEpICYgMHgxZikKKwkJICAgICAgIHx8ICg0JmRkYnJlYWRsKERNQV9CVUZGRVJfQ09OVFJPTChpbnB1dC0+bnIpKSkpIHsKKwkJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmaW5wdXQtPmRlbXV4LAorCQkJCQkJIGlucHV0LT52YnVmW2lucHV0LT5jYnVmXSwKKwkJCQkJCSBpbnB1dC0+ZG1hX2J1Zl9zaXplIC8gMTg4KTsKKworCQkJaW5wdXQtPmNidWYgPSAoaW5wdXQtPmNidWYgKyAxKSAlIGlucHV0LT5kbWFfYnVmX251bTsKKwkJCWRkYndyaXRlbCgoaW5wdXQtPmNidWYgPDwgMTEpLAorCQkJCSAgRE1BX0JVRkZFUl9BQ0soaW5wdXQtPm5yKSk7CisJCQlpbnB1dC0+c3RhdCA9IGRkYnJlYWRsKERNQV9CVUZGRVJfQ1VSUkVOVChpbnB1dC0+bnIpKTsKKwkJICAgICAgIH0KKwl9CisJaWYgKGlucHV0LT5wb3J0LT5jbGFzcyA9PSBEREJfUE9SVF9DSSkKKwkJd2FrZV91cCgmaW5wdXQtPndxKTsKKwlzcGluX3VubG9jaygmaW5wdXQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRkYl9vdXRwdXQgKm91dHB1dCA9IChzdHJ1Y3QgZGRiX291dHB1dCAqKSBkYXRhOworCXN0cnVjdCBkZGIgKmRldiA9IG91dHB1dC0+cG9ydC0+ZGV2OworCisJc3Bpbl9sb2NrKCZvdXRwdXQtPmxvY2spOworCWlmICghb3V0cHV0LT5ydW5uaW5nKSB7CisJCXNwaW5fdW5sb2NrKCZvdXRwdXQtPmxvY2spOworCQlyZXR1cm47CisJfQorCW91dHB1dC0+c3RhdCA9IGRkYnJlYWRsKERNQV9CVUZGRVJfQ1VSUkVOVChvdXRwdXQtPm5yICsgOCkpOworCXdha2VfdXAoJm91dHB1dC0+d3EpOworCXNwaW5fdW5sb2NrKCZvdXRwdXQtPmxvY2spOworfQorCisKK3N0cnVjdCBjeGQyMDk5X2NmZyBjeGRfY2ZnID0geworCS5iaXRyYXRlID0gIDYyMDAwLAorCS5hZHIgICAgID0gIDB4NDAsCisJLnBvbGFyaXR5ID0gMSwKKwkuY2xvY2tfbW9kZSA9IDEsCit9OworCitzdGF0aWMgaW50IGRkYl9jaV9hdHRhY2goc3RydWN0IGRkYl9wb3J0ICpwb3J0KQoreworCWludCByZXQ7CisKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmcG9ydC0+b3V0cHV0LT5hZGFwLAorCQkJCSAgICJEREJyaWRnZSIsCisJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJICAgJnBvcnQtPmRldi0+cGRldi0+ZGV2LAorCQkJCSAgIGFkYXB0ZXJfbnIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBvcnQtPmVuID0gY3hkMjA5OV9hdHRhY2goJmN4ZF9jZmcsIHBvcnQsICZwb3J0LT5pMmMtPmFkYXApOworCWlmICghcG9ydC0+ZW4pIHsKKwkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmcG9ydC0+b3V0cHV0LT5hZGFwKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRkYl9pbnB1dF9zdGFydChwb3J0LT5pbnB1dFswXSk7CisJZGRiX291dHB1dF9zdGFydChwb3J0LT5vdXRwdXQpOworCWR2Yl9jYV9lbjUwMjIxX2luaXQoJnBvcnQtPm91dHB1dC0+YWRhcCwKKwkJCSAgICBwb3J0LT5lbiwgMCwgMSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2RldmljZSgmcG9ydC0+b3V0cHV0LT5hZGFwLCAmcG9ydC0+b3V0cHV0LT5kZXYsCisJCQkJICAmZHZiZGV2X2NpLCAodm9pZCAqKSBwb3J0LT5vdXRwdXQsCisJCQkJICBEVkJfREVWSUNFX1NFQyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZGJfcG9ydF9hdHRhY2goc3RydWN0IGRkYl9wb3J0ICpwb3J0KQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwb3J0LT5jbGFzcykgeworCWNhc2UgRERCX1BPUlRfVFVORVI6CisJCXJldCA9IGR2Yl9pbnB1dF9hdHRhY2gocG9ydC0+aW5wdXRbMF0pOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlyZXQgPSBkdmJfaW5wdXRfYXR0YWNoKHBvcnQtPmlucHV0WzFdKTsKKwkJYnJlYWs7CisJY2FzZSBEREJfUE9SVF9DSToKKwkJcmV0ID0gZGRiX2NpX2F0dGFjaChwb3J0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgInBvcnRfYXR0YWNoIG9uIHBvcnQgJWQgZmFpbGVkXG4iLCBwb3J0LT5ucik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZGJfcG9ydHNfYXR0YWNoKHN0cnVjdCBkZGIgKmRldikKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgZGRiX3BvcnQgKnBvcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pbmZvLT5wb3J0X251bTsgaSsrKSB7CisJCXBvcnQgPSAmZGV2LT5wb3J0W2ldOworCQlyZXQgPSBkZGJfcG9ydF9hdHRhY2gocG9ydCk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRkYl9wb3J0c19kZXRhY2goc3RydWN0IGRkYiAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBkZGJfcG9ydCAqcG9ydDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmluZm8tPnBvcnRfbnVtOyBpKyspIHsKKwkJcG9ydCA9ICZkZXYtPnBvcnRbaV07CisJCXN3aXRjaCAocG9ydC0+Y2xhc3MpIHsKKwkJY2FzZSBEREJfUE9SVF9UVU5FUjoKKwkJCWR2Yl9pbnB1dF9kZXRhY2gocG9ydC0+aW5wdXRbMF0pOworCQkJZHZiX2lucHV0X2RldGFjaChwb3J0LT5pbnB1dFsxXSk7CisJCQlicmVhazsKKwkJY2FzZSBEREJfUE9SVF9DSToKKwkJCWlmIChwb3J0LT5vdXRwdXQtPmRldikKKwkJCQlkdmJfdW5yZWdpc3Rlcl9kZXZpY2UocG9ydC0+b3V0cHV0LT5kZXYpOworCQkJaWYgKHBvcnQtPmVuKSB7CisJCQkJZGRiX2lucHV0X3N0b3AocG9ydC0+aW5wdXRbMF0pOworCQkJCWRkYl9vdXRwdXRfc3RvcChwb3J0LT5vdXRwdXQpOworCQkJCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UocG9ydC0+ZW4pOworCQkJCWtmcmVlKHBvcnQtPmVuKTsKKwkJCQlwb3J0LT5lbiA9IDA7CisJCQkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmcG9ydC0+b3V0cHV0LT5hZGFwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHBvcnRfaGFzX2NpKHN0cnVjdCBkZGJfcG9ydCAqcG9ydCkKK3sKKwl1OCB2YWw7CisJcmV0dXJuIGkyY19yZWFkX3JlZygmcG9ydC0+aTJjLT5hZGFwLCAweDQwLCAwLCAmdmFsKSA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IHBvcnRfaGFzX3N0djA5MDAoc3RydWN0IGRkYl9wb3J0ICpwb3J0KQoreworCXU4IHZhbDsKKwlpZiAoaTJjX3JlYWRfcmVnMTYoJnBvcnQtPmkyYy0+YWRhcCwgMHg2OSwgMHhmMTAwLCAmdmFsKSA8IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBvcnRfaGFzX3N0djA5MDBfYWEoc3RydWN0IGRkYl9wb3J0ICpwb3J0KQoreworCXU4IHZhbDsKKwlpZiAoaTJjX3JlYWRfcmVnMTYoJnBvcnQtPmkyYy0+YWRhcCwgMHg2OCwgMHhmMTAwLCAmdmFsKSA8IDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBvcnRfaGFzX2RyeGtzKHN0cnVjdCBkZGJfcG9ydCAqcG9ydCkKK3sKKwl1OCB2YWw7CisJaWYgKGkyY19yZWFkKCZwb3J0LT5pMmMtPmFkYXAsIDB4MjksICZ2YWwpIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKGkyY19yZWFkKCZwb3J0LT5pMmMtPmFkYXAsIDB4MmEsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRkYl9wb3J0X3Byb2JlKHN0cnVjdCBkZGJfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZGRiICpkZXYgPSBwb3J0LT5kZXY7CisJY2hhciAqbW9kbmFtZSA9ICJOTyBNT0RVTEUiOworCisJcG9ydC0+Y2xhc3MgPSBEREJfUE9SVF9OT05FOworCisJaWYgKHBvcnRfaGFzX2NpKHBvcnQpKSB7CisJCW1vZG5hbWUgPSAiQ0kiOworCQlwb3J0LT5jbGFzcyA9IEREQl9QT1JUX0NJOworCQlkZGJ3cml0ZWwoSTJDX1NQRUVEXzQwMCwgcG9ydC0+aTJjLT5yZWdzICsgSTJDX1RJTUlORyk7CisJfSBlbHNlIGlmIChwb3J0X2hhc19zdHYwOTAwKHBvcnQpKSB7CisJCW1vZG5hbWUgPSAiRFVBTCBEVkItUzIiOworCQlwb3J0LT5jbGFzcyA9IEREQl9QT1JUX1RVTkVSOworCQlwb3J0LT50eXBlID0gRERCX1RVTkVSX0RWQlNfU1Q7CisJCWRkYndyaXRlbChJMkNfU1BFRURfMTAwLCBwb3J0LT5pMmMtPnJlZ3MgKyBJMkNfVElNSU5HKTsKKwl9IGVsc2UgaWYgKHBvcnRfaGFzX3N0djA5MDBfYWEocG9ydCkpIHsKKwkJbW9kbmFtZSA9ICJEVUFMIERWQi1TMiI7CisJCXBvcnQtPmNsYXNzID0gRERCX1BPUlRfVFVORVI7CisJCXBvcnQtPnR5cGUgPSBEREJfVFVORVJfRFZCU19TVF9BQTsKKwkJZGRid3JpdGVsKEkyQ19TUEVFRF8xMDAsIHBvcnQtPmkyYy0+cmVncyArIEkyQ19USU1JTkcpOworCX0gZWxzZSBpZiAocG9ydF9oYXNfZHJ4a3MocG9ydCkpIHsKKwkJbW9kbmFtZSA9ICJEVUFMIERWQi1DL1QiOworCQlwb3J0LT5jbGFzcyA9IEREQl9QT1JUX1RVTkVSOworCQlwb3J0LT50eXBlID0gRERCX1RVTkVSX0RWQkNUX1RSOworCQlkZGJ3cml0ZWwoSTJDX1NQRUVEXzQwMCwgcG9ydC0+aTJjLT5yZWdzICsgSTJDX1RJTUlORyk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIlBvcnQgJWQgKFRBQiAlZCk6ICVzXG4iLAorCQkJIHBvcnQtPm5yLCBwb3J0LT5ucisxLCBtb2RuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGRiX2lucHV0X2luaXQoc3RydWN0IGRkYl9wb3J0ICpwb3J0LCBpbnQgbnIpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBkZGJfaW5wdXQgKmlucHV0ID0gJmRldi0+aW5wdXRbbnJdOworCisJaW5wdXQtPm5yID0gbnI7CisJaW5wdXQtPnBvcnQgPSBwb3J0OworCWlucHV0LT5kbWFfYnVmX251bSA9IElOUFVUX0RNQV9CVUZTOworCWlucHV0LT5kbWFfYnVmX3NpemUgPSBJTlBVVF9ETUFfU0laRTsKKwlkZGJ3cml0ZWwoMCwgVFNfSU5QVVRfQ09OVFJPTChucikpOworCWRkYndyaXRlbCgyLCBUU19JTlBVVF9DT05UUk9MKG5yKSk7CisJZGRid3JpdGVsKDAsIFRTX0lOUFVUX0NPTlRST0wobnIpKTsKKwlkZGJ3cml0ZWwoMCwgRE1BX0JVRkZFUl9BQ0sobnIpKTsKKwl0YXNrbGV0X2luaXQoJmlucHV0LT50YXNrbGV0LCBpbnB1dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZykgaW5wdXQpOworCXNwaW5fbG9ja19pbml0KCZpbnB1dC0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5wdXQtPndxKTsKK30KKworc3RhdGljIHZvaWQgZGRiX291dHB1dF9pbml0KHN0cnVjdCBkZGJfcG9ydCAqcG9ydCwgaW50IG5yKQoreworCXN0cnVjdCBkZGIgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3QgZGRiX291dHB1dCAqb3V0cHV0ID0gJmRldi0+b3V0cHV0W25yXTsKKwlvdXRwdXQtPm5yID0gbnI7CisJb3V0cHV0LT5wb3J0ID0gcG9ydDsKKwlvdXRwdXQtPmRtYV9idWZfbnVtID0gT1VUUFVUX0RNQV9CVUZTOworCW91dHB1dC0+ZG1hX2J1Zl9zaXplID0gT1VUUFVUX0RNQV9TSVpFOworCisJZGRid3JpdGVsKDAsIFRTX09VVFBVVF9DT05UUk9MKG5yKSk7CisJZGRid3JpdGVsKDIsIFRTX09VVFBVVF9DT05UUk9MKG5yKSk7CisJZGRid3JpdGVsKDAsIFRTX09VVFBVVF9DT05UUk9MKG5yKSk7CisJdGFza2xldF9pbml0KCZvdXRwdXQtPnRhc2tsZXQsIG91dHB1dF90YXNrbGV0LCAodW5zaWduZWQgbG9uZykgb3V0cHV0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvdXRwdXQtPndxKTsKK30KKworc3RhdGljIHZvaWQgZGRiX3BvcnRzX2luaXQoc3RydWN0IGRkYiAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBkZGJfcG9ydCAqcG9ydDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmluZm8tPnBvcnRfbnVtOyBpKyspIHsKKwkJcG9ydCA9ICZkZXYtPnBvcnRbaV07CisJCXBvcnQtPmRldiA9IGRldjsKKwkJcG9ydC0+bnIgPSBpOworCQlwb3J0LT5pMmMgPSAmZGV2LT5pMmNbaV07CisJCXBvcnQtPmlucHV0WzBdID0gJmRldi0+aW5wdXRbMiAqIGldOworCQlwb3J0LT5pbnB1dFsxXSA9ICZkZXYtPmlucHV0WzIgKiBpICsgMV07CisJCXBvcnQtPm91dHB1dCA9ICZkZXYtPm91dHB1dFtpXTsKKworCQltdXRleF9pbml0KCZwb3J0LT5pMmNfZ2F0ZV9sb2NrKTsKKwkJZGRiX3BvcnRfcHJvYmUocG9ydCk7CisJCWRkYl9pbnB1dF9pbml0KHBvcnQsIDIgKiBpKTsKKwkJZGRiX2lucHV0X2luaXQocG9ydCwgMiAqIGkgKyAxKTsKKwkJZGRiX291dHB1dF9pbml0KHBvcnQsIGkpOworCX0KK30KKworc3RhdGljIHZvaWQgZGRiX3BvcnRzX3JlbGVhc2Uoc3RydWN0IGRkYiAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBkZGJfcG9ydCAqcG9ydDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmluZm8tPnBvcnRfbnVtOyBpKyspIHsKKwkJcG9ydCA9ICZkZXYtPnBvcnRbaV07CisJCXBvcnQtPmRldiA9IGRldjsKKwkJdGFza2xldF9raWxsKCZwb3J0LT5pbnB1dFswXS0+dGFza2xldCk7CisJCXRhc2tsZXRfa2lsbCgmcG9ydC0+aW5wdXRbMV0tPnRhc2tsZXQpOworCQl0YXNrbGV0X2tpbGwoJnBvcnQtPm91dHB1dC0+dGFza2xldCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGlycV9oYW5kbGVfaTJjKHN0cnVjdCBkZGIgKmRldiwgaW50IG4pCit7CisJc3RydWN0IGRkYl9pMmMgKmkyYyA9ICZkZXYtPmkyY1tuXTsKKworCWkyYy0+ZG9uZSA9IDE7CisJd2FrZV91cCgmaTJjLT53cSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gKHN0cnVjdCBkZGIgKikgZGV2X2lkOworCXUzMiBzID0gZGRicmVhZGwoSU5URVJSVVBUX1NUQVRVUyk7CisKKwlpZiAoIXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWRvIHsKKwkJZGRid3JpdGVsKHMsIElOVEVSUlVQVF9BQ0spOworCisJCWlmIChzICYgMHgwMDAwMDAwMSkKKwkJCWlycV9oYW5kbGVfaTJjKGRldiwgMCk7CisJCWlmIChzICYgMHgwMDAwMDAwMikKKwkJCWlycV9oYW5kbGVfaTJjKGRldiwgMSk7CisJCWlmIChzICYgMHgwMDAwMDAwNCkKKwkJCWlycV9oYW5kbGVfaTJjKGRldiwgMik7CisJCWlmIChzICYgMHgwMDAwMDAwOCkKKwkJCWlycV9oYW5kbGVfaTJjKGRldiwgMyk7CisKKwkJaWYgKHMgJiAweDAwMDAwMTAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFswXS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDAwMjAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFsxXS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDAwNDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFsyXS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDAwODAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFszXS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDAxMDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFs0XS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDAyMDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFs1XS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDA0MDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFs2XS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDA4MDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5pbnB1dFs3XS50YXNrbGV0KTsKKworCQlpZiAocyAmIDB4MDAwMTAwMDApCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPm91dHB1dFswXS50YXNrbGV0KTsKKwkJaWYgKHMgJiAweDAwMDIwMDAwKQorCQkJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5vdXRwdXRbMV0udGFza2xldCk7CisJCWlmIChzICYgMHgwMDA0MDAwMCkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+b3V0cHV0WzJdLnRhc2tsZXQpOworCQlpZiAocyAmIDB4MDAwODAwMDApCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPm91dHB1dFszXS50YXNrbGV0KTsKKworCQkvKiBpZiAocyAmIDB4MDAwZjAwMDApCXByaW50ayhLRVJOX0RFQlVHICIlMDh4XG4iLCBpc3RhdCk7ICovCisJfSB3aGlsZSAoKHMgPSBkZGJyZWFkbChJTlRFUlJVUFRfU1RBVFVTKSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZmxhc2hpbyhzdHJ1Y3QgZGRiICpkZXYsIHU4ICp3YnVmLCB1MzIgd2xlbiwgdTggKnJidWYsIHUzMiBybGVuKQoreworCXUzMiBkYXRhLCBzaGlmdDsKKworCWlmICh3bGVuID4gNCkKKwkJZGRid3JpdGVsKDEsIFNQSV9DT05UUk9MKTsKKwl3aGlsZSAod2xlbiA+IDQpIHsKKwkJLyogRklYTUU6IGNoZWNrIGZvciBiaWctZW5kaWFuICovCisJCWRhdGEgPSBzd2FiMzIoKih1MzIgKil3YnVmKTsKKwkJd2J1ZiArPSA0OworCQl3bGVuIC09IDQ7CisJCWRkYndyaXRlbChkYXRhLCBTUElfREFUQSk7CisJCXdoaWxlIChkZGJyZWFkbChTUElfQ09OVFJPTCkgJiAweDAwMDQpCisJCQk7CisJfQorCisJaWYgKHJsZW4pCisJCWRkYndyaXRlbCgweDAwMDEgfCAoKHdsZW4gPDwgKDggKyAzKSkgJiAweDFmMDApLCBTUElfQ09OVFJPTCk7CisJZWxzZQorCQlkZGJ3cml0ZWwoMHgwMDAzIHwgKCh3bGVuIDw8ICg4ICsgMykpICYgMHgxZjAwKSwgU1BJX0NPTlRST0wpOworCisJZGF0YSA9IDA7CisJc2hpZnQgPSAoKDQgLSB3bGVuKSAqIDgpOworCXdoaWxlICh3bGVuKSB7CisJCWRhdGEgPDw9IDg7CisJCWRhdGEgfD0gKndidWY7CisJCXdsZW4tLTsKKwkJd2J1ZisrOworCX0KKwlpZiAoc2hpZnQpCisJCWRhdGEgPDw9IHNoaWZ0OworCWRkYndyaXRlbChkYXRhLCBTUElfREFUQSk7CisJd2hpbGUgKGRkYnJlYWRsKFNQSV9DT05UUk9MKSAmIDB4MDAwNCkKKwkJOworCisJaWYgKCFybGVuKSB7CisJCWRkYndyaXRlbCgwLCBTUElfQ09OVFJPTCk7CisJCXJldHVybiAwOworCX0KKwlpZiAocmxlbiA+IDQpCisJCWRkYndyaXRlbCgxLCBTUElfQ09OVFJPTCk7CisKKwl3aGlsZSAocmxlbiA+IDQpIHsKKwkJZGRid3JpdGVsKDB4ZmZmZmZmZmYsIFNQSV9EQVRBKTsKKwkJd2hpbGUgKGRkYnJlYWRsKFNQSV9DT05UUk9MKSAmIDB4MDAwNCkKKwkJCTsKKwkJZGF0YSA9IGRkYnJlYWRsKFNQSV9EQVRBKTsKKwkJKih1MzIgKikgcmJ1ZiA9IHN3YWIzMihkYXRhKTsKKwkJcmJ1ZiArPSA0OworCQlybGVuIC09IDQ7CisJfQorCWRkYndyaXRlbCgweDAwMDMgfCAoKHJsZW4gPDwgKDggKyAzKSkgJiAweDFGMDApLCBTUElfQ09OVFJPTCk7CisJZGRid3JpdGVsKDB4ZmZmZmZmZmYsIFNQSV9EQVRBKTsKKwl3aGlsZSAoZGRicmVhZGwoU1BJX0NPTlRST0wpICYgMHgwMDA0KQorCQk7CisKKwlkYXRhID0gZGRicmVhZGwoU1BJX0RBVEEpOworCWRkYndyaXRlbCgwLCBTUElfQ09OVFJPTCk7CisKKwlpZiAocmxlbiA8IDQpCisJCWRhdGEgPDw9ICgoNCAtIHJsZW4pICogOCk7CisKKwl3aGlsZSAocmxlbiA+IDApIHsKKwkJKnJidWYgPSAoKGRhdGEgPj4gMjQpICYgMHhmZik7CisJCWRhdGEgPDw9IDg7CisJCXJidWYrKzsKKwkJcmxlbi0tOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBEREJfTUFHSUMgJ2QnCisKK3N0cnVjdCBkZGJfZmxhc2hpbyB7CisJX191OCAqd3JpdGVfYnVmOworCV9fdTMyIHdyaXRlX2xlbjsKKwlfX3U4ICpyZWFkX2J1ZjsKKwlfX3UzMiByZWFkX2xlbjsKK307CisKKyNkZWZpbmUgSU9DVExfRERCX0ZMQVNISU8gIF9JT1dSKEREQl9NQUdJQywgMHgwMCwgc3RydWN0IGRkYl9mbGFzaGlvKQorCisjZGVmaW5lIEREQl9OQU1FICJkZGJyaWRnZSIKKworc3RhdGljIHUzMiBkZGJfbnVtOworc3RhdGljIHN0cnVjdCBkZGIgKmRkYnNbMzJdOworc3RhdGljIHN0cnVjdCBjbGFzcyAqZGRiX2NsYXNzOworc3RhdGljIGludCBkZGJfbWFqb3I7CisKK3N0YXRpYyBpbnQgZGRiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gZGRic1tpbWlub3IoaW5vZGUpXTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgZGRiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZGRiICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdm9pZCAqcGFyZyA9ICh2b2lkICopYXJnOworCWludCByZXMgPSAtRUZBVUxUOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElPQ1RMX0REQl9GTEFTSElPOgorCXsKKwkJc3RydWN0IGRkYl9mbGFzaGlvIGZpbzsKKwkJdTggKnJidWYsICp3YnVmOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZmlvLCBwYXJnLCBzaXplb2YoZmlvKSkpCisJCQlicmVhazsKKwkJaWYgKGZpby53cml0ZV9sZW4gKyBmaW8ucmVhZF9sZW4gPiAxMDI4KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIklPQlVGIHRvbyBzbWFsbFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl3YnVmID0gJmRldi0+aW9idWZbMF07CisJCWlmICghd2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlyYnVmID0gd2J1ZiArIGZpby53cml0ZV9sZW47CisJCWlmIChjb3B5X2Zyb21fdXNlcih3YnVmLCBmaW8ud3JpdGVfYnVmLCBmaW8ud3JpdGVfbGVuKSkgeworCQkJdmZyZWUod2J1Zik7CisJCQlicmVhazsKKwkJfQorCQlyZXMgPSBmbGFzaGlvKGRldiwgd2J1ZiwgZmlvLndyaXRlX2xlbiwKKwkJCSAgICAgIHJidWYsIGZpby5yZWFkX2xlbik7CisJCWlmIChjb3B5X3RvX3VzZXIoZmlvLnJlYWRfYnVmLCByYnVmLCBmaW8ucmVhZF9sZW4pKQorCQkJcmVzID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZGJfZm9wcyA9IHsKKwkudW5sb2NrZWRfaW9jdGwgPSBkZGJfaW9jdGwsCisJLm9wZW4gICAgICAgICAgID0gZGRiX29wZW4sCit9OworCitzdGF0aWMgY2hhciAqZGRiX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2aWNlLCBtb2RlX3QgKm1vZGUpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisKKwlyZXR1cm4ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJkZGJyaWRnZS9jYXJkJWQiLCBkZXYtPm5yKTsKK30KKworc3RhdGljIGludCBkZGJfY2xhc3NfY3JlYXRlKHZvaWQpCit7CisJZGRiX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIEREQl9OQU1FLCAmZGRiX2ZvcHMpOworCWlmIChkZGJfbWFqb3IgPCAwKQorCQlyZXR1cm4gZGRiX21ham9yOworCisJZGRiX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBEREJfTkFNRSk7CisJaWYgKElTX0VSUihkZGJfY2xhc3MpKSB7CisJCXVucmVnaXN0ZXJfY2hyZGV2KGRkYl9tYWpvciwgRERCX05BTUUpOworCQlyZXR1cm4gLTE7CisJfQorCWRkYl9jbGFzcy0+ZGV2bm9kZSA9IGRkYl9kZXZub2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZGJfY2xhc3NfZGVzdHJveSh2b2lkKQoreworCWNsYXNzX2Rlc3Ryb3koZGRiX2NsYXNzKTsKKwl1bnJlZ2lzdGVyX2NocmRldihkZGJfbWFqb3IsIEREQl9OQU1FKTsKK30KKworc3RhdGljIGludCBkZGJfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGRiICpkZXYpCit7CisJZGV2LT5uciA9IGRkYl9udW0rKzsKKwlkZXYtPmRkYl9kZXYgPSBkZXZpY2VfY3JlYXRlKGRkYl9jbGFzcywgTlVMTCwKKwkJCQkgICAgIE1LREVWKGRkYl9tYWpvciwgZGV2LT5uciksCisJCQkJICAgICBkZXYsICJkZGJyaWRnZSVkIiwgZGV2LT5ucik7CisJZGRic1tkZXYtPm5yXSA9IGRldjsKKwlpZiAoSVNfRVJSKGRldi0+ZGRiX2RldikpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGRiX2RldmljZV9kZXN0cm95KHN0cnVjdCBkZGIgKmRldikKK3sKKwlkZGJfbnVtLS07CisJaWYgKElTX0VSUihkZXYtPmRkYl9kZXYpKQorCQlyZXR1cm47CisJZGV2aWNlX2Rlc3Ryb3koZGRiX2NsYXNzLCBNS0RFVihkZGJfbWFqb3IsIDApKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGRkYl91bm1hcChzdHJ1Y3QgZGRiICpkZXYpCit7CisJaWYgKGRldi0+cmVncykKKwkJaW91bm1hcChkZXYtPnJlZ3MpOworCXZmcmVlKGRldik7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRkYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRkYiAqZGV2ID0gKHN0cnVjdCBkZGIgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGRiX3BvcnRzX2RldGFjaChkZXYpOworCWRkYl9pMmNfcmVsZWFzZShkZXYpOworCisJZGRid3JpdGVsKDAsIElOVEVSUlVQVF9FTkFCTEUpOworCWZyZWVfaXJxKGRldi0+cGRldi0+aXJxLCBkZXYpOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGRldi0+bXNpKQorCQlwY2lfZGlzYWJsZV9tc2koZGV2LT5wZGV2KTsKKyNlbmRpZgorCWRkYl9wb3J0c19yZWxlYXNlKGRldik7CisJZGRiX2J1ZmZlcnNfZnJlZShkZXYpOworCWRkYl9kZXZpY2VfZGVzdHJveShkZXYpOworCisJZGRiX3VubWFwKGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIDApOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZGJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZGIgKmRldjsKKwlpbnQgc3RhdCA9IDA7CisJaW50IGlycV9mbGFnID0gSVJRRl9TSEFSRUQ7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZGIpKTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZGRiKSk7CisKKwlkZXYtPnBkZXYgPSBwZGV2OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCWRldi0+aW5mbyA9IChzdHJ1Y3QgZGRiX2luZm8gKikgaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gIkREQnJpZGdlIGRyaXZlciBkZXRlY3RlZDogJXNcbiIsIGRldi0+aW5mby0+bmFtZSk7CisKKwlkZXYtPnJlZ3MgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApLAorCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAwKSk7CisJaWYgKCFkZXYtPnJlZ3MpIHsKKwkJc3RhdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiSFcgJTA4eCBGVyAlMDh4XG4iLCBkZGJyZWFkbCgwKSwgZGRicmVhZGwoNCkpOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAocGNpX21zaV9lbmFibGVkKCkpCisJCXN0YXQgPSBwY2lfZW5hYmxlX21zaShkZXYtPnBkZXYpOworCWlmIChzdGF0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIjogTVNJIG5vdCBhdmFpbGFibGUuXG4iKTsKKwl9IGVsc2UgeworCQlpcnFfZmxhZyA9IDA7CisJCWRldi0+bXNpID0gMTsKKwl9CisjZW5kaWYKKwlzdGF0ID0gcmVxdWVzdF9pcnEoZGV2LT5wZGV2LT5pcnEsIGlycV9oYW5kbGVyLAorCQkJICAgaXJxX2ZsYWcsICJEREJyaWRnZSIsICh2b2lkICopIGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWwxOworCWRkYndyaXRlbCgwLCBETUFfQkFTRV9XUklURSk7CisJZGRid3JpdGVsKDAsIERNQV9CQVNFX1JFQUQpOworCWRkYndyaXRlbCgweGZmZmZmZmZmLCBJTlRFUlJVUFRfQUNLKTsKKwlkZGJ3cml0ZWwoMHhmZmYwZiwgSU5URVJSVVBUX0VOQUJMRSk7CisJZGRid3JpdGVsKDAsIE1TSTFfRU5BQkxFKTsKKworCWlmIChkZGJfaTJjX2luaXQoZGV2KSA8IDApCisJCWdvdG8gZmFpbDE7CisJZGRiX3BvcnRzX2luaXQoZGV2KTsKKwlpZiAoZGRiX2J1ZmZlcnNfYWxsb2MoZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiOiBDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIG1lbW9yeVxuIik7CisJCWdvdG8gZmFpbDI7CisJfQorCWlmIChkZGJfcG9ydHNfYXR0YWNoKGRldikgPCAwKQorCQlnb3RvIGZhaWwzOworCWRkYl9kZXZpY2VfY3JlYXRlKGRldik7CisJcmV0dXJuIDA7CisKK2ZhaWwzOgorCWRkYl9wb3J0c19kZXRhY2goZGV2KTsKKwlwcmludGsoS0VSTl9FUlIgImZhaWwzXG4iKTsKKwlkZGJfcG9ydHNfcmVsZWFzZShkZXYpOworZmFpbDI6CisJcHJpbnRrKEtFUk5fRVJSICJmYWlsMlxuIik7CisJZGRiX2J1ZmZlcnNfZnJlZShkZXYpOworZmFpbDE6CisJcHJpbnRrKEtFUk5fRVJSICJmYWlsMVxuIik7CisJaWYgKGRldi0+bXNpKQorCQlwY2lfZGlzYWJsZV9tc2koZGV2LT5wZGV2KTsKKwlmcmVlX2lycShkZXYtPnBkZXYtPmlycSwgZGV2KTsKK2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSICJmYWlsXG4iKTsKKwlkZGJfdW5tYXAoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgMCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiAtMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGRkYl9pbmZvIGRkYl9ub25lID0geworCS50eXBlICAgICA9IEREQl9OT05FLAorCS5uYW1lICAgICA9ICJEaWdpdGFsIERldmljZXMgUENJZSBicmlkZ2UiLAorfTsKKworc3RhdGljIHN0cnVjdCBkZGJfaW5mbyBkZGJfb2N0b3B1cyA9IHsKKwkudHlwZSAgICAgPSBEREJfT0NUT1BVUywKKwkubmFtZSAgICAgPSAiRGlnaXRhbCBEZXZpY2VzIE9jdG9wdXMgRFZCIGFkYXB0ZXIiLAorCS5wb3J0X251bSA9IDQsCit9OworCitzdGF0aWMgc3RydWN0IGRkYl9pbmZvIGRkYl9vY3RvcHVzX2xlID0geworCS50eXBlICAgICA9IEREQl9PQ1RPUFVTLAorCS5uYW1lICAgICA9ICJEaWdpdGFsIERldmljZXMgT2N0b3B1cyBMRSBEVkIgYWRhcHRlciIsCisJLnBvcnRfbnVtID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGRiX2luZm8gZGRiX3Y2ID0geworCS50eXBlICAgICA9IEREQl9PQ1RPUFVTLAorCS5uYW1lICAgICA9ICJEaWdpdGFsIERldmljZXMgQ2luZSBTMiBWNiBEVkIgYWRhcHRlciIsCisJLnBvcnRfbnVtID0gMywKK307CisKKyNkZWZpbmUgRERWSUQgMHhkZDAxIC8qIERpZ2l0YWwgRGV2aWNlcyBWZW5kb3IgSUQgKi8KKworI2RlZmluZSBEREJfSUQoX3ZlbmQsIF9kZXYsIF9zdWJ2ZW5kLCBfc3ViZGV2LCBfZHJpdmVyZGF0YSkgewlcCisJLnZlbmRvciAgICAgID0gX3ZlbmQsICAgIC5kZXZpY2UgICAgPSBfZGV2LCBcCisJLnN1YnZlbmRvciAgID0gX3N1YnZlbmQsIC5zdWJkZXZpY2UgPSBfc3ViZGV2LCBcCisJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpJl9kcml2ZXJkYXRhIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRkYl9pZF90YmxbXSBfX2RldmluaXRkYXRhID0geworCUREQl9JRChERFZJRCwgMHgwMDAyLCBERFZJRCwgMHgwMDAxLCBkZGJfb2N0b3B1cyksCisJRERCX0lEKEREVklELCAweDAwMDMsIEREVklELCAweDAwMDEsIGRkYl9vY3RvcHVzKSwKKwlEREJfSUQoRERWSUQsIDB4MDAwMywgRERWSUQsIDB4MDAwMiwgZGRiX29jdG9wdXNfbGUpLAorCUREQl9JRChERFZJRCwgMHgwMDAzLCBERFZJRCwgMHgwMDEwLCBkZGJfb2N0b3B1cyksCisJRERCX0lEKEREVklELCAweDAwMDMsIEREVklELCAweDAwMjAsIGRkYl92NiksCisJLyogaW4gY2FzZSBzdWItaWRzIGdvdCBkZWxldGVkIGluIGZsYXNoICovCisJRERCX0lEKEREVklELCAweDAwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRkYl9ub25lKSwKKwl7MH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGRiX2lkX3RibCk7CisKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRkYl9wY2lfZHJpdmVyID0geworCS5uYW1lICAgICAgICA9ICJEREJyaWRnZSIsCisJLmlkX3RhYmxlICAgID0gZGRiX2lkX3RibCwKKwkucHJvYmUgICAgICAgPSBkZGJfcHJvYmUsCisJLnJlbW92ZSAgICAgID0gZGRiX3JlbW92ZSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IG1vZHVsZV9pbml0X2RkYnJpZGdlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRGlnaXRhbCBEZXZpY2VzIFBDSUUgYnJpZGdlIGRyaXZlciwgIgorCSAgICAgICAiQ29weXJpZ2h0IChDKSAyMDEwLTExIERpZ2l0YWwgRGV2aWNlcyBHbWJIXG4iKTsKKwlpZiAoZGRiX2NsYXNzX2NyZWF0ZSgpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRkYl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIF9fZXhpdCB2b2lkIG1vZHVsZV9leGl0X2RkYnJpZGdlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkZGJfcGNpX2RyaXZlcik7CisJZGRiX2NsYXNzX2Rlc3Ryb3koKTsKK30KKworbW9kdWxlX2luaXQobW9kdWxlX2luaXRfZGRicmlkZ2UpOworbW9kdWxlX2V4aXQobW9kdWxlX2V4aXRfZGRicmlkZ2UpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRpZ2l0YWwgRGV2aWNlcyBQQ0llIEJyaWRnZSIpOworTU9EVUxFX0FVVEhPUigiUmFscGggTWV0emxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuNSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UtcmVncy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UtcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2NiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9kZGJyaWRnZS1yZWdzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBkZGJyaWRnZS1yZWdzLmg6IERpZ2l0YWwgRGV2aWNlcyBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBEaWdpdGFsIERldmljZXMgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKy8qIERELURWQkJyaWRnZVYxLmggMjczIDIwMTAtMDktMTcgMDU6MDM6MTZaIG1hbmZyZWQgKi8KKworLyogUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBDVVJfUkVHSVNURVJNQVBfVkVSU0lPTiAweDEwMDAwCisKKyNkZWZpbmUgSEFSRFdBUkVfVkVSU0lPTiAgICAgICAweDAwCisjZGVmaW5lIFJFR0lTVEVSTUFQX1ZFUlNJT04gICAgMHgwNAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBTUEkgQ29udHJvbGxlciAqLworCisjZGVmaW5lIFNQSV9DT05UUk9MICAgICAweDEwCisjZGVmaW5lIFNQSV9EQVRBICAgICAgICAweDE0CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEhvdyBtYW55IE1TSSdzIGFyZSBhdmFpbGFibGUgZGVwZW5kcyBvbiBIVyAoTWluIDIgbWF4IDgpICovCisvKiBIb3cgbWFueSBhcmUgdXNhYmxlIGFsc28gZGVwZW5kcyBvbiBIb3N0IHBsYXRmb3JtICAgICAgICAqLworCisjZGVmaW5lIElOVEVSUlVQVF9CQVNFICAgKDB4NDApCisKKyNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRSAoSU5URVJSVVBUX0JBU0UgKyAweDAwKQorI2RlZmluZSBNU0kwX0VOQUJMRSAgICAgIChJTlRFUlJVUFRfQkFTRSArIDB4MDApCisjZGVmaW5lIE1TSTFfRU5BQkxFICAgICAgKElOVEVSUlVQVF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgTVNJMl9FTkFCTEUgICAgICAoSU5URVJSVVBUX0JBU0UgKyAweDA4KQorI2RlZmluZSBNU0kzX0VOQUJMRSAgICAgIChJTlRFUlJVUFRfQkFTRSArIDB4MEMpCisjZGVmaW5lIE1TSTRfRU5BQkxFICAgICAgKElOVEVSUlVQVF9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTVNJNV9FTkFCTEUgICAgICAoSU5URVJSVVBUX0JBU0UgKyAweDE0KQorI2RlZmluZSBNU0k2X0VOQUJMRSAgICAgIChJTlRFUlJVUFRfQkFTRSArIDB4MTgpCisjZGVmaW5lIE1TSTdfRU5BQkxFICAgICAgKElOVEVSUlVQVF9CQVNFICsgMHgxQykKKworI2RlZmluZSBJTlRFUlJVUFRfU1RBVFVTIChJTlRFUlJVUFRfQkFTRSArIDB4MjApCisjZGVmaW5lIElOVEVSUlVQVF9BQ0sgICAgKElOVEVSUlVQVF9CQVNFICsgMHgyMCkKKworI2RlZmluZSBJTlRNQVNLX0kyQzEgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBJTlRNQVNLX0kyQzIgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBJTlRNQVNLX0kyQzMgICAgICAgICgweDAwMDAwMDA0KQorI2RlZmluZSBJTlRNQVNLX0kyQzQgICAgICAgICgweDAwMDAwMDA4KQorCisjZGVmaW5lIElOVE1BU0tfQ0lSUTEgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIElOVE1BU0tfQ0lSUTIgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIElOVE1BU0tfQ0lSUTMgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIElOVE1BU0tfQ0lSUTQgICAgICAgKDB4MDAwMDAwODApCisKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUMSAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUMiAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUMyAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUNCAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUNSAgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUNiAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUNyAgICAoMHgwMDAwNDAwMCkKKyNkZWZpbmUgSU5UTUFTS19UU0lOUFVUOCAgICAoMHgwMDAwODAwMCkKKworI2RlZmluZSBJTlRNQVNLX1RTT1VUUFVUMSAgICgweDAwMDEwMDAwKQorI2RlZmluZSBJTlRNQVNLX1RTT1VUUFVUMiAgICgweDAwMDIwMDAwKQorI2RlZmluZSBJTlRNQVNLX1RTT1VUUFVUMyAgICgweDAwMDQwMDAwKQorI2RlZmluZSBJTlRNQVNLX1RTT1VUUFVUNCAgICgweDAwMDgwMDAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBJMkMgTWFzdGVyIENvbnRyb2xsZXIgKi8KKworI2RlZmluZSBJMkNfQkFTRSAgICAgICAgKDB4ODApICAvKiBCeXRlIG9mZnNldCAqLworCisjZGVmaW5lIEkyQ19DT01NQU5EICAgICAoMHgwMCkKKyNkZWZpbmUgSTJDX1RJTUlORyAgICAgICgweDA0KQorI2RlZmluZSBJMkNfVEFTS0xFTkdUSCAgKDB4MDgpICAgICAvKiBIaWdoIHJlYWQsIGxvdyB3cml0ZSAqLworI2RlZmluZSBJMkNfVEFTS0FERFJFU1MgKDB4MEMpICAgICAvKiBIaWdoIHJlYWQsIGxvdyB3cml0ZSAqLworCisjZGVmaW5lIEkyQ19NT05JVE9SICAgICAoMHgxQykKKworI2RlZmluZSBJMkNfQkFTRV8xICAgICAgKEkyQ19CQVNFICsgMHgwMCkKKyNkZWZpbmUgSTJDX0JBU0VfMiAgICAgIChJMkNfQkFTRSArIDB4MjApCisjZGVmaW5lIEkyQ19CQVNFXzMgICAgICAoSTJDX0JBU0UgKyAweDQwKQorI2RlZmluZSBJMkNfQkFTRV80ICAgICAgKEkyQ19CQVNFICsgMHg2MCkKKworI2RlZmluZSBJMkNfQkFTRV9OKGkpICAgKEkyQ19CQVNFICsgKGkpICogMHgyMCkKKworI2RlZmluZSBJMkNfVEFTS01FTV9CQVNFICAgICgweDEwMDApICAgIC8qIEJ5dGUgb2Zmc2V0ICovCisjZGVmaW5lIEkyQ19UQVNLTUVNX1NJWkUgICAgKDB4MTAwMCkKKworI2RlZmluZSBJMkNfU1BFRURfNDAwICAgKDB4MDQwMzA0MDQpCisjZGVmaW5lIEkyQ19TUEVFRF8yMDAgICAoMHgwOTA4MDkwOSkKKyNkZWZpbmUgSTJDX1NQRUVEXzE1NCAgICgweDBDMEIwQzBDKQorI2RlZmluZSBJMkNfU1BFRURfMTAwICAgKDB4MTMxMjEzMTMpCisjZGVmaW5lIEkyQ19TUEVFRF83NyAgICAoMHgxOTE4MTkxOSkKKyNkZWZpbmUgSTJDX1NQRUVEXzUwICAgICgweDI3MjYyNzI3KQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERNQSAgQ29udHJvbGxlciAqLworCisjZGVmaW5lIERNQV9CQVNFX1dSSVRFICAgICAgICAoMHgxMDApCisjZGVmaW5lIERNQV9CQVNFX1JFQUQgICAgICAgICAoMHgxNDApCisKKyNkZWZpbmUgRE1BX0NPTlRST0wgICAgICgweDAwKSAgICAgICAgICAgICAgICAgIC8qIDY0ICovCisjZGVmaW5lIERNQV9FUlJPUiAgICAgICAoMHgwNCkgICAgICAgICAgICAgICAgICAvKiA2NSAoIG9ubHkgcmVhZCBpbnN0YW5jZSApICovCisKKyNkZWZpbmUgRE1BX0RJQUdfQ09OVFJPTCAgICAgICAgICAgICAgICAoMHgxQykgIC8qIDcxICovCisjZGVmaW5lIERNQV9ESUFHX1BBQ0tFVENPVU5URVJfTE9XICAgICAgKDB4MjApICAvKiA3MiAqLworI2RlZmluZSBETUFfRElBR19QQUNLRVRDT1VOVEVSX0hJR0ggICAgICgweDI0KSAgLyogNzMgKi8KKyNkZWZpbmUgRE1BX0RJQUdfVElNRUNPVU5URVJfTE9XICAgICAgICAoMHgyOCkgIC8qIDc0ICovCisjZGVmaW5lIERNQV9ESUFHX1RJTUVDT1VOVEVSX0hJR0ggICAgICAgKDB4MkMpICAvKiA3NSAqLworI2RlZmluZSBETUFfRElBR19SRUNIRUNLQ09VTlRFUiAgICAgICAgICgweDMwKSAgLyogNzYgICggU3BsaXQgY29tcGxldGlvbnMgb24gcmVhZCApICovCisjZGVmaW5lIERNQV9ESUFHX1dBSVRUSU1FT1VUSU5JVCAgICAgICAgKDB4MzQpICAvKiA3NyAqLworI2RlZmluZSBETUFfRElBR19XQUlUT1ZFUkZMT1dDT1VOVEVSICAgICgweDM4KSAgLyogNzggKi8KKyNkZWZpbmUgRE1BX0RJQUdfV0FJVENPVU5URVIgICAgICAgICAgICAoMHgzQykgIC8qIDc5ICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERNQSAgQnVmZmVyICovCisKKyNkZWZpbmUgVFNfSU5QVVRfQkFTRSAgICAgICAoMHgyMDApCisjZGVmaW5lIFRTX0lOUFVUX0NPTlRST0woaSkgICAgICAgICAoVFNfSU5QVVRfQkFTRSArIChpKSAqIDE2ICsgMHgwMCkKKworI2RlZmluZSBUU19PVVRQVVRfQkFTRSAgICAgICAoMHgyODApCisjZGVmaW5lIFRTX09VVFBVVF9DT05UUk9MKGkpICAgICAgICAgKFRTX09VVFBVVF9CQVNFICsgKGkpICogMTYgKyAweDAwKQorCisjZGVmaW5lIERNQV9CVUZGRVJfQkFTRSAgICAgKDB4MzAwKQorCisjZGVmaW5lIERNQV9CVUZGRVJfQ09OVFJPTChpKSAgICAgICAoRE1BX0JVRkZFUl9CQVNFICsgKGkpICogMTYgKyAweDAwKQorI2RlZmluZSBETUFfQlVGRkVSX0FDSyhpKSAgICAgICAgICAgKERNQV9CVUZGRVJfQkFTRSArIChpKSAqIDE2ICsgMHgwNCkKKyNkZWZpbmUgRE1BX0JVRkZFUl9DVVJSRU5UKGkpICAgICAgIChETUFfQlVGRkVSX0JBU0UgKyAoaSkgKiAxNiArIDB4MDgpCisjZGVmaW5lIERNQV9CVUZGRVJfU0laRShpKSAgICAgICAgICAoRE1BX0JVRkZFUl9CQVNFICsgKGkpICogMTYgKyAweDBjKQorCisjZGVmaW5lIERNQV9CQVNFX0FERFJFU1NfVEFCTEUgICgweDIwMDApCisjZGVmaW5lIERNQV9CQVNFX0FERFJFU1NfVEFCTEVfRU5UUklFUyAoNTEyKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kZGJyaWRnZS9kZGJyaWRnZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDE0ODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZGRicmlkZ2UvZGRicmlkZ2UuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGRkYnJpZGdlLmg6IERpZ2l0YWwgRGV2aWNlcyBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBEaWdpdGFsIERldmljZXMgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX0REQlJJREdFX0hfCisjZGVmaW5lIF9EREJSSURHRV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9jYS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorCisjaW5jbHVkZSAiZG14ZGV2LmgiCisjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiX3JpbmdidWZmZXIuaCIKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorI2luY2x1ZGUgImR2Yl9uZXQuaCIKKyNpbmNsdWRlICJjeGQyMDk5LmgiCisKKyNkZWZpbmUgRERCX01BWF9JMkMgICAgIDQKKyNkZWZpbmUgRERCX01BWF9QT1JUICAgIDQKKyNkZWZpbmUgRERCX01BWF9JTlBVVCAgIDgKKyNkZWZpbmUgRERCX01BWF9PVVRQVVQgIDQKKworc3RydWN0IGRkYl9pbmZvIHsKKwlpbnQgICB0eXBlOworI2RlZmluZSBEREJfTk9ORSAgICAgICAgIDAKKyNkZWZpbmUgRERCX09DVE9QVVMgICAgICAxCisJY2hhciAqbmFtZTsKKwlpbnQgICBwb3J0X251bTsKKwl1MzIgICBwb3J0X3R5cGVbRERCX01BWF9QT1JUXTsKK307CisKKy8qIERNQV9TSVpFIE1VU1QgYmUgZGl2aXNpYmxlIGJ5IDE4OCBhbmQgMTI4ICEhISAqLworCisjZGVmaW5lIElOUFVUX0RNQV9NQVhfQlVGUyAzMiAgICAgIC8qIGhhcmR3YXJlIHRhYmxlIGxpbWl0ICovCisjZGVmaW5lIElOUFVUX0RNQV9CVUZTIDgKKyNkZWZpbmUgSU5QVVRfRE1BX1NJWkUgKDEyOCo0NyoyMSkKKworI2RlZmluZSBPVVRQVVRfRE1BX01BWF9CVUZTIDMyCisjZGVmaW5lIE9VVFBVVF9ETUFfQlVGUyA4CisjZGVmaW5lIE9VVFBVVF9ETUFfU0laRSAoMTI4KjQ3KjIxKQorCitzdHJ1Y3QgZGRiOworc3RydWN0IGRkYl9wb3J0OworCitzdHJ1Y3QgZGRiX2lucHV0IHsKKwlzdHJ1Y3QgZGRiX3BvcnQgICAgICAgKnBvcnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICBucjsKKwlpbnQgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkOworCisJZG1hX2FkZHJfdCAgICAgICAgICAgICBwYnVmW0lOUFVUX0RNQV9NQVhfQlVGU107CisJdTggICAgICAgICAgICAgICAgICAgICp2YnVmW0lOUFVUX0RNQV9NQVhfQlVGU107CisJdTMyICAgICAgICAgICAgICAgICAgICBkbWFfYnVmX251bTsKKwl1MzIgICAgICAgICAgICAgICAgICAgIGRtYV9idWZfc2l6ZTsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgdGFza2xldDsKKwlzcGlubG9ja190ICAgICAgICAgICAgIGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICB3cTsKKwlpbnQgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmc7CisJdTMyICAgICAgICAgICAgICAgICAgICBzdGF0OworCXUzMiAgICAgICAgICAgICAgICAgICAgY2J1ZjsKKwl1MzIgICAgICAgICAgICAgICAgICAgIGNvZmY7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgIGFkYXA7CisJc3RydWN0IGR2Yl9kZXZpY2UgICAgICpkZXY7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAgICpmZTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgKmZlMjsKKwlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgIGRteGRldjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgIGRlbXV4OworCXN0cnVjdCBkdmJfbmV0ICAgICAgICAgZHZibmV0OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgICAgaHdfZnJvbnRlbmQ7CisJc3RydWN0IGRteF9mcm9udGVuZCAgICBtZW1fZnJvbnRlbmQ7CisJaW50ICAgICAgICAgICAgICAgICAgICB1c2VyczsKKwlpbnQgKCpnYXRlX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgaW50KTsKK307CisKK3N0cnVjdCBkZGJfb3V0cHV0IHsKKwlzdHJ1Y3QgZGRiX3BvcnQgICAgICAgKnBvcnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICBucjsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgIHBidWZbT1VUUFVUX0RNQV9NQVhfQlVGU107CisJdTggICAgICAgICAgICAgICAgICAgICp2YnVmW09VVFBVVF9ETUFfTUFYX0JVRlNdOworCXUzMiAgICAgICAgICAgICAgICAgICAgZG1hX2J1Zl9udW07CisJdTMyICAgICAgICAgICAgICAgICAgICBkbWFfYnVmX3NpemU7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICB0YXNrbGV0OworCXNwaW5sb2NrX3QgICAgICAgICAgICAgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgIHdxOworCWludCAgICAgICAgICAgICAgICAgICAgcnVubmluZzsKKwl1MzIgICAgICAgICAgICAgICAgICAgIHN0YXQ7CisJdTMyICAgICAgICAgICAgICAgICAgICBjYnVmOworCXUzMiAgICAgICAgICAgICAgICAgICAgY29mZjsKKworCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgYWRhcDsKKwlzdHJ1Y3QgZHZiX2RldmljZSAgICAgKmRldjsKK307CisKK3N0cnVjdCBkZGJfaTJjIHsKKwlzdHJ1Y3QgZGRiICAgICAgICAgICAgKmRldjsKKwl1MzIgICAgICAgICAgICAgICAgICAgIG5yOworCXN0cnVjdCBpMmNfYWRhcHRlciAgICAgYWRhcDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAgIGFkYXAyOworCXUzMiAgICAgICAgICAgICAgICAgICAgcmVnczsKKwl1MzIgICAgICAgICAgICAgICAgICAgIHJidWY7CisJdTMyICAgICAgICAgICAgICAgICAgICB3YnVmOworCWludCAgICAgICAgICAgICAgICAgICAgZG9uZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgIHdxOworfTsKKworc3RydWN0IGRkYl9wb3J0IHsKKwlzdHJ1Y3QgZGRiICAgICAgICAgICAgKmRldjsKKwl1MzIgICAgICAgICAgICAgICAgICAgIG5yOworCXN0cnVjdCBkZGJfaTJjICAgICAgICAqaTJjOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgaTJjX2dhdGVfbG9jazsKKwl1MzIgICAgICAgICAgICAgICAgICAgIGNsYXNzOworI2RlZmluZSBEREJfUE9SVF9OT05FICAgICAgICAgICAwCisjZGVmaW5lIEREQl9QT1JUX0NJICAgICAgICAgICAgIDEKKyNkZWZpbmUgRERCX1BPUlRfVFVORVIgICAgICAgICAgMgorCXUzMiAgICAgICAgICAgICAgICAgICAgdHlwZTsKKyNkZWZpbmUgRERCX1RVTkVSX05PTkUgICAgICAgICAgMAorI2RlZmluZSBEREJfVFVORVJfRFZCU19TVCAgICAgICAxCisjZGVmaW5lIEREQl9UVU5FUl9EVkJTX1NUX0FBICAgIDIKKyNkZWZpbmUgRERCX1RVTkVSX0RWQkNUX1RSICAgICAxNgorI2RlZmluZSBEREJfVFVORVJfRFZCQ1RfU1QgICAgIDE3CisJdTMyICAgICAgICAgICAgICAgICAgICBhZHI7CisKKwlzdHJ1Y3QgZGRiX2lucHV0ICAgICAgKmlucHV0WzJdOworCXN0cnVjdCBkZGJfb3V0cHV0ICAgICAqb3V0cHV0OworCXN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW47Cit9OworCitzdHJ1Y3QgZGRiIHsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAgKnBkZXY7CisJdW5zaWduZWQgY2hhciAgICAgICAgICpyZWdzOworCXN0cnVjdCBkZGJfcG9ydCAgICAgICAgcG9ydFtEREJfTUFYX1BPUlRdOworCXN0cnVjdCBkZGJfaTJjICAgICAgICAgaTJjW0REQl9NQVhfSTJDXTsKKwlzdHJ1Y3QgZGRiX2lucHV0ICAgICAgIGlucHV0W0REQl9NQVhfSU5QVVRdOworCXN0cnVjdCBkZGJfb3V0cHV0ICAgICAgb3V0cHV0W0REQl9NQVhfT1VUUFVUXTsKKworCXN0cnVjdCBkZXZpY2UgICAgICAgICAqZGRiX2RldjsKKwlpbnQgICAgICAgICAgICAgICAgICAgIG5yOworCXU4ICAgICAgICAgICAgICAgICAgICAgaW9idWZbMTAyOF07CisKKwlzdHJ1Y3QgZGRiX2luZm8gICAgICAgKmluZm87CisJaW50ICAgICAgICAgICAgICAgICAgICBtc2k7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBkZGJ3cml0ZWwoX3ZhbCwgX2FkcikgICAgICAgIHdyaXRlbCgoX3ZhbCksIFwKKwkJCQkgICAgIChjaGFyICopIChkZXYtPnJlZ3MrKF9hZHIpKSkKKyNkZWZpbmUgZGRicmVhZGwoX2FkcikgICAgICAgICAgICAgICByZWFkbCgoY2hhciAqKSAoZGV2LT5yZWdzKyhfYWRyKSkpCisjZGVmaW5lIGRkYmNweXRvKF9hZHIsIF9zcmMsIF9jb3VudCkgbWVtY3B5X3RvaW8oKGNoYXIgKikJXAorCQkJCSAgICAgKGRldi0+cmVncysoX2FkcikpLCAoX3NyYyksIChfY291bnQpKQorI2RlZmluZSBkZGJjcHlmcm9tKF9kc3QsIF9hZHIsIF9jb3VudCkgbWVtY3B5X2Zyb21pbygoX2RzdCksIChjaGFyICopIFwKKwkJCQkgICAgICAgKGRldi0+cmVncysoX2FkcikpLCAoX2NvdW50KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQppbmRleCAwYjUxODI4Li44ZjIyYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9NYWtlZmlsZQpAQCAtMiw4ICsyLDEwIEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIERWQiBkZXZpY2UgZHJpdmVycy4KICMKIAorZHZiLW5ldC0kKENPTkZJR19EVkJfTkVUKSA6PSBkdmJfbmV0Lm8KKwogZHZiLWNvcmUtb2JqcyA6PSBkdmJkZXYubyBkbXhkZXYubyBkdmJfZGVtdXgubyBkdmJfZmlsdGVyLm8gCVwKIAkJIGR2Yl9jYV9lbjUwMjIxLm8gZHZiX2Zyb250ZW5kLm8gCQlcCi0JCSBkdmJfbmV0Lm8gZHZiX3JpbmdidWZmZXIubyBkdmJfbWF0aC5vCisJCSAkKGR2Yi1uZXQteSkgZHZiX3JpbmdidWZmZXIubyBkdmJfbWF0aC5vCiAKIG9iai0kKENPTkZJR19EVkJfQ09SRSkgKz0gZHZiLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA1YjZiNDUxLi5lZmU5YzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtOTA0LDcgKzkwNCw3IEBACiAJLmJ1ZmZlciA9IGIgXAogfQogCi1zdGF0aWMgc3RydWN0IGR0dl9jbWRzX2ggZHR2X2NtZHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHR2X2NtZHNfaCBkdHZfY21kc1tEVFZfTUFYX0NPTU1BTkQgKyAxXSA9IHsKIAlfRFRWX0NNRChEVFZfVFVORSwgMSwgMCksCiAJX0RUVl9DTUQoRFRWX0NMRUFSLCAxLCAwKSwKIApAQCAtOTY2LDYgKzk2Niw3IEBACiAJX0RUVl9DTUQoRFRWX0lTREJUX0xBWUVSQ19USU1FX0lOVEVSTEVBVklORywgMCwgMCksCiAKIAlfRFRWX0NNRChEVFZfSVNEQlNfVFNfSUQsIDEsIDApLAorCV9EVFZfQ01EKERUVl9EVkJUMl9QTFBfSUQsIDEsIDApLAogCiAJLyogR2V0ICovCiAJX0RUVl9DTUQoRFRWX0RJU0VRQ19TTEFWRV9SRVBMWSwgMCwgMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmgKaW5kZXggM2EzMTI2Y2EuLjFlNTNhY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmgKQEAgLTMyLDYgKzMyLDggQEAKIAogI2RlZmluZSBEVkJfTkVUX0RFVklDRVNfTUFYIDEwCiAKKyNpZmRlZiBDT05GSUdfRFZCX05FVAorCiBzdHJ1Y3QgZHZiX25ldCB7CiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlW0RWQl9ORVRfREVWSUNFU19NQVhdOwpAQCAtNDAsOCArNDIsMjUgQEAKIAlzdHJ1Y3QgZG14X2RlbXV4ICpkZW11eDsKIH07CiAKLQogdm9pZCBkdmJfbmV0X3JlbGVhc2Uoc3RydWN0IGR2Yl9uZXQgKik7CiBpbnQgIGR2Yl9uZXRfaW5pdChzdHJ1Y3QgZHZiX2FkYXB0ZXIgKiwgc3RydWN0IGR2Yl9uZXQgKiwgc3RydWN0IGRteF9kZW11eCAqKTsKIAorI2Vsc2UKKworc3RydWN0IGR2Yl9uZXQgeworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXY7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZHZiX25ldF9yZWxlYXNlKHN0cnVjdCBkdmJfbmV0ICpkdmJuZXQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGR2Yl9uZXRfaW5pdChzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXAsCisJCQkgICAgICAgc3RydWN0IGR2Yl9uZXQgKmR2Ym5ldCwgc3RydWN0IGRteF9kZW11eCAqZG14KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogaWZkZWYgQ09ORklHX0RWQl9ORVQgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggZTg1MzA0Yy4uNWQ3M2RlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtODEsNiArODEsNyBAQAogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzQwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wLzEuMSBEVkIgcmVjZWl2ZXJzIGJhc2VkIG9uIHRoZSBEaUIwNzAwIFVTQiBicmlkZ2UuIFRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggMTAwZWJjMy4uZDdhZDA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC05MSw3ICs5MSw2IEBACiAJY2FzZSBHRVRfQ09ORklHOgogCWNhc2UgUkVBRF9NRU1PUlk6CiAJY2FzZSBSRUNPTk5FQ1RfVVNCOgotCWNhc2UgR0VUX0lSX0NPREU6CiAJCXdyaXRlID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBSRUFEX0kyQzoKQEAgLTE2NCwxMyArMTYzLDYgQEAKIAlkZWJfeGZlcigiPDw8ICIpOwogCWRlYnVnX2R1bXAoYnVmLCBhY3RfbGVuLCBkZWJfeGZlcik7CiAKLQkvKiByZW1vdGUgY29udHJvbGxlciBxdWVyeSBzdGF0dXMgaXMgMSBpZiByZW1vdGUgY29kZSBpcyBub3QgcmVjZWl2ZWQgKi8KLQlpZiAocmVxLT5jbWQgPT0gR0VUX0lSX0NPREUgJiYgYnVmWzFdID09IDEpIHsKLQkJYnVmWzFdID0gMDsgLyogY2xlYXIgY29tbWFuZCAiZXJyb3IiIHN0YXR1cyAqLwotCQltZW1zZXQoJmJ1ZlsyXSwgMCwgcmVxLT5kYXRhX2xlbik7Ci0JCWJ1ZlszXSA9IDE7IC8qIG5vIHJlbW90ZSBjb2RlIHJlY2VpdmVkIG1hcmsgKi8KLQl9Ci0KIAkvKiBjaGVjayBzdGF0dXMgKi8KIAlpZiAoYnVmWzFdKSB7CiAJCWVycigiY29tbWFuZCBmYWlsZWQ6JWQiLCBidWZbMV0pOwpAQCAtMjkyLDYgKzI4NCwxMCBAQAogCQl9CiAKIAkJaWYgKG51bSA+IGkgKyAxICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKG1zZ1tpXS5sZW4gPiAzIHx8IG1zZ1tpKzFdLmxlbiA+IDYxKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KIAkJCWlmIChtc2dbaV0uYWRkciA9PQogCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCiAJCQkJcmVxLmNtZCA9IFJFQURfTUVNT1JZOwpAQCAtMzA2LDEyICszMDIsMTYgQEAKIAkJCXJldCA9IGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKIAkJCWkgKz0gMjsKIAkJfSBlbHNlIGlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmIChtc2dbaV0uYWRkciA9PQotCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCisJCQlpZiAobXNnW2ldLmxlbiA+IDYxKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBlcnJvcjsKLQkJCWVsc2UKLQkJCQlyZXEuY21kID0gUkVBRF9JMkM7CisJCQl9CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJcmVxLmNtZCA9IFJFQURfSTJDOwogCQkJcmVxLmkyY19hZGRyID0gbXNnW2ldLmFkZHI7CiAJCQlyZXEuYWRkciA9IGFkZHI7CiAJCQlyZXEubWJveCA9IG1ib3g7CkBAIC0zMjEsNiArMzIxLDEwIEBACiAJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CiAJCQlpICs9IDE7CiAJCX0gZWxzZSB7CisJCQlpZiAobXNnW2ldLmxlbiA+IDIxKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KIAkJCWlmIChtc2dbaV0uYWRkciA9PQogCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCiAJCQkJcmVxLmNtZCA9IFdSSVRFX01FTU9SWTsKQEAgLTczNSw2ICs3MzksNyBAQAogCXsgMHhiOGZlYjcwOCwgUkNfTUFQX01TSV9ESUdJVk9YX0lJIH0sCiAJeyAweGEzNzAzZDAwLCBSQ19NQVBfQUxJTktfRFRVX00gfSwKIAl7IDB4OWI3ZGM2NGUsIFJDX01BUF9UT1RBTF9NRURJQV9JTl9IQU5EIH0sIC8qIE1ZR0lDVFYgVTcxOCAqLworCXsgMHg1ZDQ5ZTNkYiwgUkNfTUFQX0RJR0lUVFJBREUgfSwgLyogTEMtUG93ZXIgTEMtVVNCLURWQlQgKi8KIAl7IH0KIH07CiAKQEAgLTc0OSw2ICs3NTQsOCBAQAogCQlSQ19NQVBfQVpVUkVXQVZFX0FEX1RVNzAwIH0sCiAJeyAoVVNCX1ZJRF9NU0lfMiA8PCAxNikgKyBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJSSwKIAkJUkNfTUFQX01TSV9ESUdJVk9YX0lJSSB9LAorCXsgKFVTQl9WSURfTVNJXzIgPDwgMTYpICsgVVNCX1BJRF9NU0lfRElHSVZPWF9EVU8sCisJCVJDX01BUF9NU0lfRElHSVZPWF9JSUkgfSwKIAl7IChVU0JfVklEX0xFQURURUsgPDwgMTYpICsgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfR09MRCwKIAkJUkNfTUFQX0xFQURURUtfWTA0RzAwNTEgfSwKIAl7IChVU0JfVklEX0FWRVJNRURJQSA8PCAxNikgKyBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl9YLApAQCAtNzU5LDYgKzc2Niw4IEBACiAJCVJDX01BUF9ESUdJVEFMTk9XX1RJTllUV0lOIH0sCiAJeyAoVVNCX1ZJRF9HVEVLIDw8IDE2KSArIFVTQl9QSURfVElOWVRXSU5fMywKIAkJUkNfTUFQX0RJR0lUQUxOT1dfVElOWVRXSU4gfSwKKwl7IChVU0JfVklEX0tXT1JMRF8yIDw8IDE2KSArIFVTQl9QSURfU1ZFT05fU1RWMjIsCisJCVJDX01BUF9NU0lfRElHSVZPWF9JSUkgfSwKIAl7IH0KIH07CiAKQEAgLTEwODIsNDQgKzEwOTEsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBpbml0IDJuZCBJMkMgYWRhcHRlciAqLwotc3RhdGljIGludCBhZjkwMTVfaTJjX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBkLT5wcml2OwotCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKLQotCXN0cm5jcHkoc3RhdGUtPmkyY19hZGFwLm5hbWUsIGQtPmRlc2MtPm5hbWUsCi0JCXNpemVvZihzdGF0ZS0+aTJjX2FkYXAubmFtZSkpOwotCXN0YXRlLT5pMmNfYWRhcC5hbGdvICAgICAgPSBkLT5wcm9wcy5pMmNfYWxnbzsKLQlzdGF0ZS0+aTJjX2FkYXAuYWxnb19kYXRhID0gTlVMTDsKLQlzdGF0ZS0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkLT51ZGV2LT5kZXY7Ci0KLQlpMmNfc2V0X2FkYXBkYXRhKCZzdGF0ZS0+aTJjX2FkYXAsIGQpOwotCi0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZzdGF0ZS0+aTJjX2FkYXApOwotCWlmIChyZXQgPCAwKQotCQllcnIoImNvdWxkIG5vdCBhZGQgaTJjIGFkYXB0ZXIiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgYWY5MDE1X2FmOTAxM19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBhZjkwMTVfc3RhdGUgKnN0YXRlID0gYWRhcC0+ZGV2LT5wcml2OwotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CiAKLQlpZiAoYWRhcC0+aWQgPT0gMCkgewotCQkvKiBzZWxlY3QgSTJDIGFkYXB0ZXIgKi8KLQkJaTJjX2FkYXAgPSAmYWRhcC0+ZGV2LT5pMmNfYWRhcDsKLQotCQlkZWJfaW5mbygiJXM6IGluaXQgSTJDXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IGFmOTAxNV9pMmNfaW5pdChhZGFwLT5kZXYpOwotCX0gZWxzZSB7Ci0JCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLwotCQlpMmNfYWRhcCA9ICZzdGF0ZS0+aTJjX2FkYXA7Ci0KKwlpZiAoYWRhcC0+aWQgPT0gMSkgewogCQkvKiBjb3B5IGZpcm13YXJlIHRvIDJuZCBkZW1vZHVsYXRvciAqLwogCQlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpIHsKIAkJCXJldCA9IGFmOTAxNV9jb3B5X2Zpcm13YXJlKGFkYXAtPmRldik7CkBAIC0xMTM2LDcgKzExMTIsNyBAQAogCiAJLyogYXR0YWNoIGRlbW9kdWxhdG9yICovCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGFmOTAxM19hdHRhY2gsICZhZjkwMTVfYWY5MDEzX2NvbmZpZ1thZGFwLT5pZF0sCi0JCWkyY19hZGFwKTsKKwkJJmFkYXAtPmRldi0+aTJjX2FkYXApOwogCiAJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KQEAgLTEyMDYsNTcgKzExODIsNTYgQEAKIAogc3RhdGljIGludCBhZjkwMTVfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7Ci0Jc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5kZXYtPnByaXY7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKIAlpbnQgcmV0OwogCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKIAotCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLwotCWlmIChhZGFwLT5pZCA9PSAwKQotCQlpMmNfYWRhcCA9ICZhZGFwLT5kZXYtPmkyY19hZGFwOwotCWVsc2UKLQkJaTJjX2FkYXAgPSAmc3RhdGUtPmkyY19hZGFwOwotCiAJc3dpdGNoIChhZjkwMTVfYWY5MDEzX2NvbmZpZ1thZGFwLT5pZF0udHVuZXIpIHsKIAljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjA6CiAJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwXzI6Ci0JCXJldCA9IGR2Yl9hdHRhY2gobXQyMDYwX2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwLAorCQlyZXQgPSBkdmJfYXR0YWNoKG10MjA2MF9hdHRhY2gsIGFkYXAtPmZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKIAkJCSZhZjkwMTVfbXQyMDYwX2NvbmZpZywKIAkJCWFmOTAxNV9jb25maWcubXQyMDYwX2lmMVthZGFwLT5pZF0pCiAJCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7CiAJCWJyZWFrOwogCWNhc2UgQUY5MDEzX1RVTkVSX1FUMTAxMDoKIAljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTBBOgotCQlyZXQgPSBkdmJfYXR0YWNoKHF0MTAxMF9hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJcmV0ID0gZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCiAJCQkmYWY5MDE1X3F0MTAxMF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBBRjkwMTNfVFVORVJfVERBMTgyNzE6Ci0JCXJldCA9IGR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBhZGFwLT5mZSwgMHhjMCwgaTJjX2FkYXAsCisJCXJldCA9IGR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBhZGFwLT5mZSwgMHhjMCwKKwkJCSZhZGFwLT5kZXYtPmkyY19hZGFwLAogCQkJJmFmOTAxNV90ZGExODI3MV9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBBRjkwMTNfVFVORVJfVERBMTgyMTg6Ci0JCXJldCA9IGR2Yl9hdHRhY2godGRhMTgyMThfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCXJldCA9IGR2Yl9hdHRhY2godGRhMTgyMThfYXR0YWNoLCBhZGFwLT5mZSwKKwkJCSZhZGFwLT5kZXYtPmkyY19hZGFwLAogCQkJJmFmOTAxNV90ZGExODIxOF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwM0Q6Ci0JCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwKKwkJCSZhZGFwLT5kZXYtPmkyY19hZGFwLAogCQkJJmFmOTAxNV9teGw1MDAzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1RDoKIAljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1UjoKLQkJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA1c19hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA1c19hdHRhY2gsIGFkYXAtPmZlLAorCQkJJmFkYXAtPmRldi0+aTJjX2FkYXAsCiAJCQkmYWY5MDE1X214bDUwMDVfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CiAJCWJyZWFrOwogCWNhc2UgQUY5MDEzX1RVTkVSX0VOVjc3SDExRDU6Ci0JCXJldCA9IGR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweGMwLCBpMmNfYWRhcCwKKwkJcmV0ID0gZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgYWRhcC0+ZmUsIDB4YzAsCisJCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKIAkJCURWQl9QTExfVERBNjY1WCkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKLQkJcmV0ID0gZHZiX2F0dGFjaChtYzQ0czgwM19hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJcmV0ID0gZHZiX2F0dGFjaChtYzQ0czgwM19hdHRhY2gsIGFkYXAtPmZlLAorCQkJJmFkYXAtPmRldi0+aTJjX2FkYXAsCiAJCQkmYWY5MDE1X21jNDRzODAzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA3VDoKLQkJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA3dF9hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA3dF9hdHRhY2gsIGFkYXAtPmZlLAorCQkJJmFkYXAtPmRldi0+aTJjX2FkYXAsCiAJCQkweGMwLCAmYWY5MDE1X214bDUwMDd0X2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgpAQCAtMTMwOSw2ICsxMjg0LDcgQEAKIAkJVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfU1RJQ0tfRFVBTF9SQyl9LAogLyogMzUgKi97VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfQTg1MFQpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0dURUssICAgICAgVVNCX1BJRF9USU5ZVFdJTl8zKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfU1ZFT05fU1RWMjIpfSwKIAl7MH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOwpAQCAtMTUwMiw3ICsxNDc4LDcgQEAKIAogCQkuaTJjX2FsZ28gPSAmYWY5MDE1X2kyY19hbGdvLAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gOSwgLyogY2hlY2sgbWF4IGZyb20gZHZiLXVzYi5oICovCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMTAsIC8qIGNoZWNrIG1heCBmcm9tIGR2Yi11c2IuaCAqLwogCQkuZGV2aWNlcyA9IHsKIAkJCXsKIAkJCQkubmFtZSA9ICJYdGVuc2lvbnMgWEQtMzgwIiwKQEAgLTE1NTQsNiArMTUzMCwxMSBAQAogCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsyMF0sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiU3Zlb24gU1RWMjIgRHVhbCBVU0IgRFZCLVQgVHVuZXIgSERUViIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzM3XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKIAkJfQogCX0sIHsKIAkJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLApAQCAtMTcwNCwzMyArMTY4NSwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFmOTAxNV9pMmNfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCi17Ci0Jc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBkLT5wcml2OwotCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKLQotCS8qIHJlbW92ZSAybmQgSTJDIGFkYXB0ZXIgKi8KLQlpZiAoZC0+c3RhdGUgJiBEVkJfVVNCX1NUQVRFX0kyQykKLQkJaTJjX2RlbF9hZGFwdGVyKCZzdGF0ZS0+aTJjX2FkYXApOwotfQotCi1zdGF0aWMgdm9pZCBhZjkwMTVfdXNiX2RldmljZV9leGl0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOwotCi0JLyogcmVtb3ZlIDJuZCBJMkMgYWRhcHRlciAqLwotCWlmIChkICE9IE5VTEwgJiYgZC0+ZGVzYyAhPSBOVUxMKQotCQlhZjkwMTVfaTJjX2V4aXQoZCk7Ci0KLQlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOwotfQotCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWY5MDE1X3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZHZiX3VzYl9hZjkwMTUiLAogCS5wcm9iZSA9IGFmOTAxNV91c2JfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBhZjkwMTVfdXNiX2RldmljZV9leGl0LAorCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKIAkuaWRfdGFibGUgPSBhZjkwMTVfdXNiX3RhYmxlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKaW5kZXggYmViMzAwNC4uNjI1MmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC05OSw3ICs5OSw2IEBACiB9OwogCiBzdHJ1Y3QgYWY5MDE1X3N0YXRlIHsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7IC8qIEkyQyBhZGFwdGVyIGZvciAybmQgRkUgKi8KIAl1OCByY19yZXBlYXQ7CiAJdTMyIHJjX2tleWNvZGU7CiAJdTggcmNfbGFzdFs0XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCmluZGV4IDdjMzI3YjUuLjJjYmYxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwpAQCAtMzQ3LDE1ICszNDcsMTcgQEAKICAqIFBDQjogPwogICogcGFydHM6IEROT1M0MDRaSDEwMkEoTVQzNTIsIERUVDc1NzkoPykpCiAgKgotICogRTMwIFZJRD0wNGI0IFBJRD04NjFmIEhXPTIgRlc9Mi4xIFByb2R1Y3Q9Pz8/Pz8/Pz8KLSAqIFBDQjogPworICogRTMwIFZJRD0wNGI0IFBJRD04NjFmIEhXPTIgRlc9Mi4xICJhbnlzZWUtVChMUCkiCisgKiBQQ0I6IFBDQiA1MDdUIChyZXYxLjYxKQogICogcGFydHM6IEROT1M0MDRaSDEwM0EoWkwxMDM1MywgRFRUNzU3OSg/KSkKKyAqIE9FQT0wYSBPRUI9MDAgT0VDPTAwIE9FRD1mZiBPRUU9MDAKKyAqIElPQT00NSBJT0I9ZmYgSU9DPTAwIElPRD1mZiBJT0U9MDAKICAqCiAgKiBFMzAgUGx1cyBWSUQ9MDRiNCBQSUQ9ODYxZiBIVz02IEZXPTEuMCAiYW55c2VlIgogICogUENCOiA1MDdDRCAocmV2MS4xKQogICogcGFydHM6IEROT1M0MDRaSDEwM0EoWkwxMDM1MywgRFRUNzU3OSg/KSksIENTVDU2STAxCi0gKiBPRUE9ODAgT0VCPTAwIE9FQz0wMCBPRUQ9ZmYgT0VGPWZlCi0gKiBJT0E9NGYgSU9CPWZmIElPQz0wMCBJT0Q9MDYgSU9GPTAxCisgKiBPRUE9ODAgT0VCPTAwIE9FQz0wMCBPRUQ9ZmYgT0VFPWZlCisgKiBJT0E9NGYgSU9CPWZmIElPQz0wMCBJT0Q9MDYgSU9FPTAxCiAgKiBJT0RbMF0gWkwxMDM1MyAxPWVuYWJsZWQKICAqIElPQVs3XSBUUyAwPWVuYWJsZWQKICAqIHR1bmVyIGlzIG5vdCBiZWhpbmQgWkwxMDM1MyBJMkMtZ2F0ZSAobm8gY2FyZSBpZiBnYXRlIGRpc2FibGVkIG9yIG5vdCkKQEAgLTM2MywzMCArMzY1LDMwIEBACiAgKiBFMzAgQyBQbHVzIFZJRD0wNGI0IFBJRD04NjFmIEhXPTEwIEZXPTEuMCAiYW55c2VlLURDKExQKSIKICAqIFBDQjogNTA3REMgKHJldjAuMikKICAqIHBhcnRzOiBUREExMDAyMywgRFRPUzQwM0lIMTAyQiBUTSwgQ1NUNTZJMDEKLSAqIE9FQT04MCBPRUI9MDAgT0VDPTAwIE9FRD1mZiBPRUY9ZmUKLSAqIElPQT00ZiBJT0I9ZmYgSU9DPTAwIElPRD0yNiBJT0Y9MDEKKyAqIE9FQT04MCBPRUI9MDAgT0VDPTAwIE9FRD1mZiBPRUU9ZmUKKyAqIElPQT00ZiBJT0I9ZmYgSU9DPTAwIElPRD0yNiBJT0U9MDEKICAqIElPRFswXSBUREExMDAyMyAxPWVuYWJsZWQKICAqCiAgKiBFMzAgUzIgUGx1cyBWSUQ9MDRiNCBQSUQ9ODYxZiBIVz0xMSBGVz0wLjEgImFueXNlZS1TMihMUCkiCiAgKiBQQ0I6IDUwN1NJIChyZXYyLjEpCiAgKiBwYXJ0czogQlMyTjEwV0NDMDEoQ1gyNDExNiwgQ1gyNDExOCksIElTTDY0MjMsIFREQTgwMjQKLSAqIE9FQT04MCBPRUI9MDAgT0VDPWZmIE9FRD1mZiBPRUY9ZmUKLSAqIElPQT00ZCBJT0I9ZmYgSU9DPTAwIElPRD0yNiBJT0Y9MDEKKyAqIE9FQT04MCBPRUI9MDAgT0VDPWZmIE9FRD1mZiBPRUU9ZmUKKyAqIElPQT00ZCBJT0I9ZmYgSU9DPTAwIElPRD0yNiBJT0U9MDEKICAqIElPRFswXSBDWDI0MTE2IDE9ZW5hYmxlZAogICoKICAqIEUzMCBDIFBsdXMgVklEPTFjNzMgUElEPTg2MWYgSFc9MTUgRlc9MS4yICJhbnlzZWUtRkEoTFApIgogICogUENCOiA1MDdGQSAocmV2MC40KQogICogcGFydHM6IFREQTEwMDIzLCBEVE9TNDAzSUgxMDJCIFRNLCBUREE4MDI0Ci0gKiBPRUE9ODAgT0VCPTAwIE9FQz1mZiBPRUQ9ZmYgT0VGPWZmCi0gKiBJT0E9NGQgSU9CPWZmIElPQz0wMCBJT0Q9MDAgSU9GPWMwCisgKiBPRUE9ODAgT0VCPTAwIE9FQz1mZiBPRUQ9ZmYgT0VFPWZmCisgKiBJT0E9NGQgSU9CPWZmIElPQz0wMCBJT0Q9MDAgSU9FPWMwCiAgKiBJT0RbNV0gVERBMTAwMjMgMT1lbmFibGVkCiAgKiBJT0VbMF0gdHVuZXIgMT1lbmFibGVkCiAgKgogICogRTMwIENvbWJvIFBsdXMgVklEPTFjNzMgUElEPTg2MWYgSFc9MTUgRlc9MS4yICJhbnlzZWUtRkEoTFApIgogICogUENCOiA1MDdGQSAocmV2MS4xKQogICogcGFydHM6IFpMMTAzNTMsIFREQTEwMDIzLCBEVE9TNDAzSUgxMDJCIFRNLCBUREE4MDI0Ci0gKiBPRUE9ODAgT0VCPTAwIE9FQz1mZiBPRUQ9ZmYgT0VGPWZmCi0gKiBJT0E9NGQgSU9CPWZmIElPQz0wMCBJT0Q9MDAgSU9GPWMwCisgKiBPRUE9ODAgT0VCPTAwIE9FQz1mZiBPRUQ9ZmYgT0VFPWZmCisgKiBJT0E9NGQgSU9CPWZmIElPQz0wMCBJT0Q9MDAgSU9FPWMwCiAgKiBEVkItQzoKICAqIElPRFs1XSBUREExMDAyMyAxPWVuYWJsZWQKICAqIElPRVswXSB0dW5lciAxPWVuYWJsZWQKQEAgLTM5OCw4ICs0MDAsOCBAQAogICogRTcgVEMgVklEPTFjNzMgUElEPTg2MWYgSFc9MTggRlc9MC43IEFNVENJPTAuNSAiYW55c2VlLUU3VEMoTFApIgogICogUENCOiA1MDhUQyAocmV2MC42KQogICogcGFydHM6IFpMMTAzNTMsIFREQTEwMDIzLCBETk9ENDRDREgwODZBKFREQTE4MjEyKQotICogT0VBPTgwIE9FQj0wMCBPRUM9MDMgT0VEPWY3IE9FRj1mZgotICogSU9BPTRkIElPQj0wMCBJT0M9Y2MgSU9EPTQ4IElPRj1lNAorICogT0VBPTgwIE9FQj0wMCBPRUM9MDMgT0VEPWY3IE9FRT1mZgorICogSU9BPTRkIElPQj0wMCBJT0M9Y2MgSU9EPTQ4IElPRT1lNAogICogSU9BWzddIFRTIDE9ZW5hYmxlZAogICogSU9FWzRdIFREQTE4MjEyIDE9ZW5hYmxlZAogICogRFZCLUM6CkBAIC00MTQsMTEgKzQxNiwzNCBAQAogICogRTcgUzIgVklEPTFjNzMgUElEPTg2MWYgSFc9MTkgRlc9MC40IEFNVENJPTAuNSAiYW55c2VlLUU3UzIoTFApIgogICogUENCOiA1MDhTMiAocmV2MC43KQogICogcGFydHM6IEROQlUxMDUxMklTVChTVFYwOTAzLCBTVFY2MTEwKSwgSVNMNjQyMwotICogT0VBPTgwIE9FQj0wMCBPRUM9MDMgT0VEPWY3IE9FRj1mZgotICogSU9BPTRkIElPQj0wMCBJT0M9YzQgSU9EPTA4IElPRj1lNAorICogT0VBPTgwIE9FQj0wMCBPRUM9MDMgT0VEPWY3IE9FRT1mZgorICogSU9BPTRkIElPQj0wMCBJT0M9YzQgSU9EPTA4IElPRT1lNAogICogSU9BWzddIFRTIDE9ZW5hYmxlZAogICogSU9FWzVdIFNUVjA5MDMgMT1lbmFibGVkCiAgKgorICogRTcgUFRDIFZJRD0xYzczIFBJRD04NjFmIEhXPTIxIEZXPTAuMSBBTVRDST0/PyAiYW55c2VlLUU3UFRDKExQKSIKKyAqIFBDQjogNTA4UFRDIChyZXYwLjUpCisgKiBwYXJ0czogWkwxMDM1MywgVERBMTAwMjMsIEROT0Q0NENESDA4NkEoVERBMTgyMTIpCisgKiBPRUE9ODAgT0VCPTAwIE9FQz0wMyBPRUQ9ZjcgT0VFPWZmCisgKiBJT0E9NGQgSU9CPTAwIElPQz1jYyBJT0Q9NDggSU9FPWU0CisgKiBJT0FbN10gVFMgMT1lbmFibGVkCisgKiBJT0VbNF0gVERBMTgyMTIgMT1lbmFibGVkCisgKiBEVkItQzoKKyAqIElPRFs2XSBaTDEwMzUzIDA9ZGlzYWJsZWQKKyAqIElPRFs1XSBUREExMDAyMyAxPWVuYWJsZWQKKyAqIElPRVswXSBJRiAxPWVuYWJsZWQKKyAqIERWQi1UOgorICogSU9EWzVdIFREQTEwMDIzIDA9ZGlzYWJsZWQKKyAqIElPRFs2XSBaTDEwMzUzIDE9ZW5hYmxlZAorICogSU9FWzBdIElGIDA9ZW5hYmxlZAorICoKKyAqIEU3IFMyIFZJRD0xYzczIFBJRD04NjFmIEhXPTIyIEZXPTAuMSBBTVRDST0/PyAiYW55c2VlLUU3UFMyKExQKSIKKyAqIFBDQjogNTA4UFMyIChyZXYwLjQpCisgKiBwYXJ0czogRE5CVTEwNTEySVNUKFNUVjA5MDMsIFNUVjYxMTApLCBJU0w2NDIzCisgKiBPRUE9ODAgT0VCPTAwIE9FQz0wMyBPRUQ9ZjcgT0VFPWZmCisgKiBJT0E9NGQgSU9CPTAwIElPQz1jNCBJT0Q9MDggSU9FPWU0CisgKiBJT0FbN10gVFMgMT1lbmFibGVkCisgKiBJT0VbNV0gU1RWMDkwMyAxPWVuYWJsZWQKICAqLwogCiBzdGF0aWMgaW50IGFueXNlZV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKQEAgLTQ1OSw3ICs0ODQsNyBAQAogCXN0YXRlLT5odyA9IGh3X2luZm9bMF07CiAKIAlzd2l0Y2ggKHN0YXRlLT5odykgewotCWNhc2UgQU5ZU0VFX0hXXzAyOiAvKiAyICovCisJY2FzZSBBTllTRUVfSFdfNTA3VDogLyogMiAqLwogCQkvKiBFMzAgKi8KIAogCQkvKiBhdHRhY2ggZGVtb2QgKi8KQEAgLTU5Myw3ICs2MTgsOSBAQAogCiAJCWJyZWFrOwogCWNhc2UgQU5ZU0VFX0hXXzUwOFRDOiAvKiAxOCAqLworCWNhc2UgQU5ZU0VFX0hXXzUwOFBUQzogLyogMjEgKi8KIAkJLyogRTcgVEMgKi8KKwkJLyogRTcgUFRDICovCiAKIAkJLyogZW5hYmxlIHRyYW5zcG9ydCBzdHJlYW0gb24gSU9BWzddICovCiAJCXJldCA9IGFueXNlZV93cl9yZWdfbWFzayhhZGFwLT5kZXYsIFJFR19JT0EsICgxIDw8IDcpLCAweDgwKTsKQEAgLTY1MCw3ICs2NzcsOSBAQAogCiAJCWJyZWFrOwogCWNhc2UgQU5ZU0VFX0hXXzUwOFMyOiAvKiAxOSAqLworCWNhc2UgQU5ZU0VFX0hXXzUwOFBTMjogLyogMjIgKi8KIAkJLyogRTcgUzIgKi8KKwkJLyogRTcgUFMyICovCiAKIAkJLyogZW5hYmxlIHRyYW5zcG9ydCBzdHJlYW0gb24gSU9BWzddICovCiAJCXJldCA9IGFueXNlZV93cl9yZWdfbWFzayhhZGFwLT5kZXYsIFJFR19JT0EsICgxIDw8IDcpLCAweDgwKTsKQEAgLTY4Nyw3ICs3MTYsNyBAQAogCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAoc3RhdGUtPmh3KSB7Ci0JY2FzZSBBTllTRUVfSFdfMDI6IC8qIDIgKi8KKwljYXNlIEFOWVNFRV9IV181MDdUOiAvKiAyICovCiAJCS8qIEUzMCAqLwogCiAJCS8qIGF0dGFjaCB0dW5lciAqLwpAQCAtNzYyLDcgKzc5MSw5IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBBTllTRUVfSFdfNTA4VEM6IC8qIDE4ICovCisJY2FzZSBBTllTRUVfSFdfNTA4UFRDOiAvKiAyMSAqLwogCQkvKiBFNyBUQyAqLworCQkvKiBFNyBQVEMgKi8KIAogCQkvKiBlbmFibGUgdHVuZXIgb24gSU9FWzRdICovCiAJCXJldCA9IGFueXNlZV93cl9yZWdfbWFzayhhZGFwLT5kZXYsIFJFR19JT0UsICgxIDw8IDQpLCAweDEwKTsKQEAgLTc3NSw3ICs4MDYsOSBAQAogCiAJCWJyZWFrOwogCWNhc2UgQU5ZU0VFX0hXXzUwOFMyOiAvKiAxOSAqLworCWNhc2UgQU5ZU0VFX0hXXzUwOFBTMjogLyogMjIgKi8KIAkJLyogRTcgUzIgKi8KKwkJLyogRTcgUFMyICovCiAKIAkJLyogYXR0YWNoIHR1bmVyICovCiAJCWZlID0gZHZiX2F0dGFjaChzdHY2MTEwX2F0dGFjaCwgYWRhcC0+ZmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuaAppbmRleCBhNzY3M2FhLi5hZDZjY2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmgKQEAgLTYxLDEzICs2MSwxNSBAQAogCXU4IHNlcTsKIH07CiAKLSNkZWZpbmUgQU5ZU0VFX0hXXzAyICAgICAyIC8qIEUzMCAqLwotI2RlZmluZSBBTllTRUVfSFdfNTA3Q0QgIDYgLyogRTMwIFBsdXMgKi8KLSNkZWZpbmUgQU5ZU0VFX0hXXzUwN0RDIDEwIC8qIEUzMCBDIFBsdXMgKi8KLSNkZWZpbmUgQU5ZU0VFX0hXXzUwN1NJIDExIC8qIEUzMCBTMiBQbHVzICovCi0jZGVmaW5lIEFOWVNFRV9IV181MDdGQSAxNSAvKiBFMzAgQ29tYm8gUGx1cyAvIEUzMCBDIFBsdXMgKi8KLSNkZWZpbmUgQU5ZU0VFX0hXXzUwOFRDIDE4IC8qIEU3IFRDICovCi0jZGVmaW5lIEFOWVNFRV9IV181MDhTMiAxOSAvKiBFNyBTMiAqLworI2RlZmluZSBBTllTRUVfSFdfNTA3VCAgICAyIC8qIEUzMCAqLworI2RlZmluZSBBTllTRUVfSFdfNTA3Q0QgICA2IC8qIEUzMCBQbHVzICovCisjZGVmaW5lIEFOWVNFRV9IV181MDdEQyAgMTAgLyogRTMwIEMgUGx1cyAqLworI2RlZmluZSBBTllTRUVfSFdfNTA3U0kgIDExIC8qIEUzMCBTMiBQbHVzICovCisjZGVmaW5lIEFOWVNFRV9IV181MDdGQSAgMTUgLyogRTMwIENvbWJvIFBsdXMgLyBFMzAgQyBQbHVzICovCisjZGVmaW5lIEFOWVNFRV9IV181MDhUQyAgMTggLyogRTcgVEMgKi8KKyNkZWZpbmUgQU5ZU0VFX0hXXzUwOFMyICAxOSAvKiBFNyBTMiAqLworI2RlZmluZSBBTllTRUVfSFdfNTA4UFRDIDIxIC8qIEU3IFBUQyBQbHVzICovCisjZGVmaW5lIEFOWVNFRV9IV181MDhQUzIgMjIgLyogRTcgUFMyIFBsdXMgKi8KIAogI2RlZmluZSBSRUdfSU9BICAgICAgIDB4ODAgLyogUG9ydCBBIChiaXQgYWRkcmVzc2FibGUpICovCiAjZGVmaW5lIFJFR19JT0IgICAgICAgMHg5MCAvKiBQb3J0IEIgKGJpdCBhZGRyZXNzYWJsZSkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IGM1MTlhZDUuLmQwZWE1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIm10MjI2Ni5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgInhjNTAwMC5oIgorI2luY2x1ZGUgInhjNDAwMC5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJkaWIwMDcwLmgiCiAjaW5jbHVkZSAiZGliMDA5MC5oIgpAQCAtMjY1NSw2ICsyNjU2LDE1NiBAQAogCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7CiB9CiAKK3N0YXRpYyBpbnQgZGliMDcwMF94YzQwMDBfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwKKwkJCQkJIGludCBjb21tYW5kLCBpbnQgYXJnKQoreworCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBwcml2OworCisJaWYgKGNvbW1hbmQgPT0gWEM0MDAwX1RVTkVSX1JFU0VUKSB7CisJCS8qIFJlc2V0IHRoZSB0dW5lciAqLworCQlkaWI3MDAwcF9zZXRfZ3BpbyhhZGFwLT5mZSwgOCwgMCwgMCk7CisJCW1zbGVlcCgxMCk7CisJCWRpYjcwMDBwX3NldF9ncGlvKGFkYXAtPmZlLCA4LCAwLCAxKTsKKwl9IGVsc2UgeworCQllcnIoInhjNDAwMDogdW5rbm93biB0dW5lciBjYWxsYmFjayBjb21tYW5kOiAlZFxuIiwgY29tbWFuZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRpYngwMDBfYWdjX2NvbmZpZyBzdGs3NzAwcF83MDAwcF94YzQwMDBfYWdjX2NvbmZpZyA9IHsKKwkuYmFuZF9jYXBzID0gQkFORF9VSEYgfCBCQU5EX1ZIRiwKKwkuc2V0dXAgPSAweDY0LAorCS5pbnZfZ2FpbiA9IDB4MDJjOCwKKwkudGltZV9zdGFiaWxpeiA9IDB4MTUsCisJLmFscGhhX2xldmVsID0gMHgwMCwKKwkudGhsb2NrID0gMHg3NiwKKwkud2JkX2ludiA9IDB4MDEsCisJLndiZF9yZWYgPSAweDBiMzMsCisJLndiZF9zZWwgPSAweDAwLAorCS53YmRfYWxwaGEgPSAweDAyLAorCS5hZ2MxX21heCA9IDB4MDAsCisJLmFnYzFfbWluID0gMHgwMCwKKwkuYWdjMl9tYXggPSAweDliMjYsCisJLmFnYzJfbWluID0gMHgyNmNhLAorCS5hZ2MxX3B0MSA9IDB4MDAsCisJLmFnYzFfcHQyID0gMHgwMCwKKwkuYWdjMV9wdDMgPSAweDAwLAorCS5hZ2MxX3Nsb3BlMSA9IDB4MDAsCisJLmFnYzFfc2xvcGUyID0gMHgwMCwKKwkuYWdjMl9wdDEgPSAweDAwLAorCS5hZ2MyX3B0MiA9IDB4ODAsCisJLmFnYzJfc2xvcGUxID0gMHgxZCwKKwkuYWdjMl9zbG9wZTIgPSAweDFkLAorCS5hbHBoYV9tYW50ID0gMHgxMSwKKwkuYWxwaGFfZXhwID0gMHgxYiwKKwkuYmV0YV9tYW50ID0gMHgxNywKKwkuYmV0YV9leHAgPSAweDMzLAorCS5wZXJmb3JtX2FnY19zb2Z0c3BsaXQgPSAweDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgc3RrNzcwMHBfeGM0MDAwX3BsbF9jb25maWcgPSB7CisJNjAwMDAsIDMwMDAwLAkvKiBpbnRlcm5hbCwgc2FtcGxpbmcgKi8KKwkxLCA4LCAzLCAxLCAwLAkvKiBwbGxfY2ZnOiBwcmVkaXYsIHJhdGlvLCByYW5nZSwgcmVzZXQsIGJ5cGFzcyAqLworCTAsIDAsIDEsIDEsIDAsCS8qIG1pc2M6IHJlZmRpdiwgYnlwY2xrX2RpdiwgSU9fQ0xLX2VuX2NvcmUsICovCisJCQkvKiBBRENsa1NyYywgbW9kdWxvICovCisJKDMgPDwgMTQpIHwgKDEgPDwgMTIpIHwgNTI0LAkvKiBzYWRfY2ZnOiByZWZzZWwsIHNlbCwgZnJlcV8xNWsgKi8KKwkzOTM3MDUzNCwJLyogaWZyZXEgKi8KKwkyMDQ1MjIyNSwJLyogdGltZiAqLworCTMwMDAwMDAwCS8qIHh0YWwgKi8KK307CisKKy8qIEZJWE1FOiBub25lIG9mIHRoZXNlIGlucHV0cyBhcmUgdmFsaWRhdGVkIHlldCAqLworc3RhdGljIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgcGN0dl8zNDBlX2NvbmZpZyA9IHsKKwkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisKKwkuYWdjX2NvbmZpZ19jb3VudCA9IDEsCisJLmFnYyA9ICZzdGs3NzAwcF83MDAwcF94YzQwMDBfYWdjX2NvbmZpZywKKwkuYncgID0gJnN0azc3MDBwX3hjNDAwMF9wbGxfY29uZmlnLAorCisJLmdwaW9fZGlyID0gRElCNzAwME1fR1BJT19ERUZBVUxUX0RJUkVDVElPTlMsCisJLmdwaW9fdmFsID0gRElCNzAwME1fR1BJT19ERUZBVUxUX1ZBTFVFUywKKwkuZ3Bpb19wd21fcG9zID0gRElCNzAwME1fR1BJT19ERUZBVUxUX1BXTV9QT1MsCit9OworCisvKiBQQ1RWIDM0MGUgR1BJT3MgbWFwOgorICAgZGliMDcwMDoKKyAgIEdQSU8yICAtIENYMjU4NDMgc2xlZXAKKyAgIEdQSU8zICAtIENTNTM0MCByZXNldAorICAgR1BJTzUgIC0gSVJECisgICBHUElPNiAgLSBQb3dlciBTdXBwbHkKKyAgIEdQSU84ICAtIExOQSAoMT1vZmYgMD1vbikKKyAgIEdQSU8xMCAtIENYMjU4NDMgcmVzZXQKKyAgIGRpYjcwMDA6CisgICBHUElPOCAgLSB4YzQwMDAgcmVzZXQKKyAqLworc3RhdGljIGludCBwY3R2MzQwZV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBhZGFwLT5kZXYtPnByaXY7CisKKwkvKiBQb3dlciBTdXBwbHkgb24gKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsICBHUElPX09VVCwgMCk7CisJbXNsZWVwKDUwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsICBHUElPX09VVCwgMSk7CisJbXNsZWVwKDEwMCk7IC8qIEFsbG93IHBvd2VyIHN1cHBseSB0byBzZXR0bGUgYmVmb3JlIHByb2JpbmcgKi8KKworCS8qIGN4MjU4NDMgcmVzZXQgKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCAgR1BJT19PVVQsIDApOworCW1zbGVlcCgxKTsgLyogY3gyNTg0MyBkYXRhc2hlZXQgc2F5IDM1MHVzIHJlcXVpcmVkICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgIEdQSU9fT1VULCAxKTsKKworCS8qIExOQSBvZmYgZm9yIG5vdyAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPOCwgIEdQSU9fT1VULCAxKTsKKworCS8qIFB1dCB0aGUgQ1gyNTg0MyB0byBzbGVlcCBmb3Igbm93IHNpbmNlIHdlJ3JlIGluIGRpZ2l0YWwgbW9kZSAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMiwgR1BJT19PVVQsIDEpOworCisJLyogRklYTUU6IG5vdCB2ZXJpZmllZCB5ZXQgKi8KKwlkaWIwNzAwX2N0cmxfY2xvY2soYWRhcC0+ZGV2LCA3MiwgMSk7CisKKwltc2xlZXAoNTAwKTsKKworCWlmIChkaWI3MDAwcGNfZGV0ZWN0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwKSA9PSAwKSB7CisJCS8qIERlbW9kdWxhdG9yIG5vdCBmb3VuZCBmb3Igc29tZSByZWFzb24/ICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDEyLAorCQkJICAgICAgJnBjdHZfMzQwZV9jb25maWcpOworCXN0LT5pc19kaWI3MDAwcGMgPSAxOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIHN0cnVjdCB4YzQwMDBfY29uZmlnIGRpYjcwMDBwX3hjNDAwMF90dW5lcmNvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MJICA9IDB4NjEsCisJLmRlZmF1bHRfcG0JICA9IDEsCisJLmR2Yl9hbXBsaXR1ZGUJICA9IDAsCisJLnNldF9zbW9vdGhlZGN2YnMgPSAwLAorCS5pZl9raHoJCSAgPSA1NDAwCit9OworCitzdGF0aWMgaW50IHhjNDAwMF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnR1bl9pMmM7CisKKwkvKiBUaGUgeGM0MDAwIGlzIG5vdCBvbiB0aGUgbWFpbiBpMmMgYnVzICovCisJdHVuX2kyYyA9IGRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKGFkYXAtPmZlLAorCQkJCQkgIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CisJaWYgKHR1bl9pMmMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZWFjaCB0dW5lciBpMmMgYnVzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0dXAgdGhlIHJlc2V0IGNhbGxiYWNrICovCisJYWRhcC0+ZmUtPmNhbGxiYWNrID0gZGliMDcwMF94YzQwMDBfdHVuZXJfY2FsbGJhY2s7CisKKwlyZXR1cm4gZHZiX2F0dGFjaCh4YzQwMDBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywKKwkJCSAgJmRpYjcwMDBwX3hjNDAwMF90dW5lcmNvbmZpZykKKwkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCiBzdGF0aWMgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyBoY3dfbGdkdDMzMDVfY29uZmlnID0gewogCS5pMmNfYWRkciAgICAgICAgICAgPSAweDBlLAogCS5tcGVnX21vZGUgICAgICAgICAgPSBMR0RUMzMwNV9NUEVHX1BBUkFMTEVMLApAQCAtMjgwMiw2ICsyOTUzLDggQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1RGRTcwOTBQVlIpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVDSE5JU0FULCBVU0JfUElEX1RFQ0hOSVNBVF9BSVJTVEFSX1RFTEVTVElDS18yKSB9LAogLyogNzUgKi97IFVTQl9ERVZJQ0UoVVNCX1ZJRF9NRURJT04sICAgIFVTQl9QSURfQ1JFQVRJWF9DVFgxOTIxKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLCAgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMzQwRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwgIFVTQl9QSURfUElOTkFDTEVfUENUVjM0MEVfU0UpIH0sCiAJeyAwIH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRpYjA3MDBfdXNiX2lkX3RhYmxlKTsKQEAgLTM3NzIsNiArMzkyNSw0MSBAQAogCQkJCQkgICAgUkNfVFlQRV9ORUMsCiAJCQkuY2hhbmdlX3Byb3RvY29sICA9IGRpYjA3MDBfY2hhbmdlX3Byb3RvY29sLAogCQl9LAorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBwY3R2MzQwZV9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSB4YzQwMDBfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdAorCQkJCQkJZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCX0sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAyLAorCQkuZGV2aWNlcyA9IHsKKwkJCXsgICAiUGlubmFjbGUgUENUViAzNDBlIEhEIFBybyBVU0IgU3RpY2siLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzc2XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiUGlubmFjbGUgUENUViBIeWJyaWQgU3RpY2sgU29sbyIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNzddLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAorCQkucmMuY29yZSA9IHsKKwkJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJCS5yY19jb2RlcyAgICAgICAgID0gUkNfTUFQX0RJQjA3MDBfUkM1X1RBQkxFLAorCQkJLm1vZHVsZV9uYW1lCSAgPSAiZGliMDcwMCIsCisJCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnlfb2xkX2Zpcm13YXJlLAorCQkJLmFsbG93ZWRfcHJvdG9zICAgPSBSQ19UWVBFX1JDNSB8CisJCQkJCSAgICBSQ19UWVBFX1JDNiB8CisJCQkJCSAgICBSQ19UWVBFX05FQywKKwkJCS5jaGFuZ2VfcHJvdG9jb2wgID0gZGliMDcwMF9jaGFuZ2VfcHJvdG9jb2wsCisJCX0sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAyMWIxNTQ5Li4yYTc5YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0yMzAsNiArMjMwLDggQEAKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMzEwRQkJCTB4MzIxMQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFCQkJMHgwMjNhCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUVfU0UJCQkweDAyM2IKKyNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMzQwRQkJCTB4MDIzZAorI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzNDBFX1NFCQkJMHgwMjNlCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczQQkJCTB4MDI0MwogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0VTRQkJCTB4MDI0NQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3NEUJCQkweDAyNDYKQEAgLTMxMyw2ICszMTUsNyBAQAogI2RlZmluZSBVU0JfUElEX0ZSSUlPX1dISVRFCQkJCTB4MDAwMQogI2RlZmluZSBVU0JfUElEX1RWV0FZX1BMVVMJCQkJMHgwMDAyCiAjZGVmaW5lIFVTQl9QSURfU1ZFT05fU1RWMjAJCQkJMHhlMzlkCisjZGVmaW5lIFVTQl9QSURfU1ZFT05fU1RWMjIJCQkJMHhlNDAxCiAjZGVmaW5lIFVTQl9QSURfQVpVUkVXQVZFX0FaNjAyNwkJCTB4MzI3NQogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0RWQlMyQ0lfVjEJCQkweDEwYTQKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19EVkJTMkNJX1YyCQkJMHgxMGFjCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IDc2YTgwOTYuLjdkMzVkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC04NSw3ICs4NSw3IEBACiAJcmV0dXJuIGtleS0+c2NhbmNvZGUgJiAweGZmOwogfQogCi1zdGF0aWMgaW5saW5lIHU4IHJjNV9zY2FuKHN0cnVjdCByY19tYXBfdGFibGUgKmtleSkKK3N0YXRpYyBpbmxpbmUgdTE2IHJjNV9zY2FuKHN0cnVjdCByY19tYXBfdGFibGUgKmtleSkKIHsKIAlyZXR1cm4ga2V5LT5zY2FuY29kZSAmIDB4ZmZmZjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2dwOHBzay5oCmluZGV4IDgzMTc0OWEuLmVkMzJiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZ3A4cHNrLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ncDhwc2suaApAQCAtNzgsOSArNzgsNiBAQAogI2RlZmluZSBBRFZfTU9EX0RWQl9CUFNLIDkgICAgIC8qIERWQi1TIEJQU0sgKi8KIAogI2RlZmluZSBHRVRfVVNCX1NQRUVEICAgICAgICAgICAgICAgICAgICAgMHgwNwotICNkZWZpbmUgVVNCX1NQRUVEX0xPVyAgICAgICAgICAgICAgICAgICAgMAotICNkZWZpbmUgVVNCX1NQRUVEX0ZVTEwgICAgICAgICAgICAgICAgICAgMQotICNkZWZpbmUgVVNCX1NQRUVEX0hJR0ggICAgICAgICAgICAgICAgICAgMgogCiAjZGVmaW5lIFJFU0VUX0ZYMiAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdGVjaG5pc2F0LXVzYjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdGVjaG5pc2F0LXVzYjIuYwppbmRleCAwOGY4ODQyLi40NzNiOTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3RlY2huaXNhdC11c2IyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi90ZWNobmlzYXQtdXNiMi5jCkBAIC03NjUsMTAgKzc2NSw4IEBACiAJLyogd29yayBhbmQgc3R1ZmYgd2FzIG9ubHkgY3JlYXRlZCB3aGVuIHRoZSBkZXZpY2UgaXMgaXMgaG90LXN0YXRlICovCiAJaWYgKGRldiAhPSBOVUxMKSB7CiAJCXN0cnVjdCB0ZWNobmlzYXRfdXNiMl9zdGF0ZSAqc3RhdGUgPSBkZXYtPnByaXY7Ci0JCWlmIChzdGF0ZSAhPSBOVUxMKSB7CisJCWlmIChzdGF0ZSAhPSBOVUxMKQogCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzdGF0ZS0+Z3JlZW5fbGVkX3dvcmspOwotCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQkJfQogCX0KIAogCWR2Yl91c2JfZGV2aWNlX2V4aXQoaW50Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwppbmRleCAzZGI4OWUzLi41MzZjMTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKQEAgLTIyNCwyNiArMjI0LDggQEAKIHN0YXRpYyBpbnQgdnA3MDQ1X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZDsKLQlpbnQgcmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmdnA3MDQ1X3Byb3BlcnRpZXMsCi0JCQkJICAgVEhJU19NT0RVTEUsICZkLCBhZGFwdGVyX25yKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JZC0+cHJpdiA9IGttYWxsb2MoMjAsIEdGUF9LRVJORUwpOwotCWlmICghZC0+cHJpdikgewotCQlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB2cDcwNDVfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlrZnJlZShkLT5wcml2KTsKLQlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOworCXJldHVybiBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZ2cDcwNDVfcHJvcGVydGllcywKKwkJCQkgICBUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2cDcwNDVfdXNiX3RhYmxlIFtdID0gewpAQCAtMjU4LDcgKzI0MCw3IEBACiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgdnA3MDQ1X3Byb3BlcnRpZXMgPSB7CiAJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItdnA3MDQ1LTAxLmZ3IiwKLQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHU4ICopLAorCS5zaXplX29mX3ByaXYgPSAyMCwKIAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0gewpAQCAtMzA1LDcgKzI4Nyw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnA3MDQ1X3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImR2Yl91c2JfdnA3MDQ1IiwKIAkucHJvYmUJCT0gdnA3MDQ1X3VzYl9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHZwNzA0NV91c2JfZGlzY29ubmVjdCwKKwkuZGlzY29ubmVjdAk9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCiAJLmlkX3RhYmxlCT0gdnA3MDQ1X3VzYl90YWJsZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5oCmluZGV4IDk2OTY4OGYuLmNmNWVjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuaApAQCAtMzYsOSArMzYsNiBAQAogICNkZWZpbmUgVHVuZXJfUG93ZXJfT0ZGICAgICAgICAgICAgICAgICAgMAogCiAjZGVmaW5lIEdFVF9VU0JfU1BFRUQgICAgICAgICAgICAgICAgICAgICAweDA3Ci0gI2RlZmluZSBVU0JfU1BFRURfTE9XICAgICAgICAgICAgICAgICAgICAwCi0gI2RlZmluZSBVU0JfU1BFRURfRlVMTCAgICAgICAgICAgICAgICAgICAxCi0gI2RlZmluZSBVU0JfU1BFRURfSElHSCAgICAgICAgICAgICAgICAgICAyCiAKICNkZWZpbmUgTE9DS19UVU5FUl9DT01NQU5EICAgICAgICAgICAgICAgIDB4MDkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKaW5kZXggMjFjNTJlMy4uNDg5YWU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfQUNDRVBURUQpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsCiAJCQkiQ0EgUE1UIGZhaWxlZCB3aXRoIHJlc3BvbnNlIDB4JXhcbiIsIHItPnJlc3BvbnNlKTsKLQkJcmV0ID0gLUVGQVVMVDsKKwkJcmV0ID0gLUVBQ0NFUzsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCmluZGV4IDhmZmI1NjUuLmU1ZWJkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKQEAgLTQ1LDExICs0NSw2IEBACiAJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgaW50IGZkdHZfY2FfcmVzZXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCi17Ci0JcmV0dXJuIGF2Y19jYV9yZXNldChmZHR2KSA/IC1FRkFVTFQgOiAwOwotfQotCiBzdGF0aWMgaW50IGZkdHZfY2FfZ2V0X2NhcHModm9pZCAqYXJnKQogewogCXN0cnVjdCBjYV9jYXBzICpjYXAgPSBhcmc7CkBAIC02NSwxMiArNjAsMTQgQEAKIHsKIAlzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgc3RhdDsKIAlzdHJ1Y3QgY2Ffc2xvdF9pbmZvICpzbG90ID0gYXJnOworCWludCBlcnI7CiAKLQlpZiAoYXZjX3R1bmVyX3N0YXR1cyhmZHR2LCAmc3RhdCkpCi0JCXJldHVybiAtRUZBVUxUOworCWVyciA9IGF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAoc2xvdC0+bnVtICE9IDApCi0JCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVBQ0NFUzsKIAogCXNsb3QtPnR5cGUgPSBDQV9DSTsKIAlzbG90LT5mbGFncyA9IGZkdHZfZ2V0X2NhX2ZsYWdzKCZzdGF0KTsKQEAgLTgxLDIxICs3OCwyMSBAQAogewogCXN0cnVjdCBjYV9tc2cgKnJlcGx5ID0gYXJnOwogCi0JcmV0dXJuIGF2Y19jYV9hcHBfaW5mbyhmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCkgPyAtRUZBVUxUIDogMDsKKwlyZXR1cm4gYXZjX2NhX2FwcF9pbmZvKGZkdHYsIHJlcGx5LT5tc2csICZyZXBseS0+bGVuZ3RoKTsKIH0KIAogc3RhdGljIGludCBmZHR2X2NhX2luZm8oc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgY2FfbXNnICpyZXBseSA9IGFyZzsKIAotCXJldHVybiBhdmNfY2FfaW5mbyhmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCkgPyAtRUZBVUxUIDogMDsKKwlyZXR1cm4gYXZjX2NhX2luZm8oZmR0diwgcmVwbHktPm1zZywgJnJlcGx5LT5sZW5ndGgpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfY2FfZ2V0X21taShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBjYV9tc2cgKnJlcGx5ID0gYXJnOwogCi0JcmV0dXJuIGF2Y19jYV9nZXRfbW1pKGZkdHYsIHJlcGx5LT5tc2csICZyZXBseS0+bGVuZ3RoKSA/IC1FRkFVTFQgOiAwOworCXJldHVybiBhdmNfY2FfZ2V0X21taShmZHR2LCByZXBseS0+bXNnLCAmcmVwbHktPmxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbnQgZmR0dl9jYV9nZXRfbXNnKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB2b2lkICphcmcpCkBAIC0xMTEsMTQgKzEwOCwxNSBAQAogCQllcnIgPSBmZHR2X2NhX2luZm8oZmR0diwgYXJnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKGF2Y190dW5lcl9zdGF0dXMoZmR0diwgJnN0YXQpKQotCQkJZXJyID0gLUVGQVVMVDsKLQkJZWxzZSBpZiAoc3RhdC5jYV9tbWkgPT0gMSkKKwkJZXJyID0gYXZjX3R1bmVyX3N0YXR1cyhmZHR2LCAmc3RhdCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJaWYgKHN0YXQuY2FfbW1pID09IDEpCiAJCQllcnIgPSBmZHR2X2NhX2dldF9tbWkoZmR0diwgYXJnKTsKIAkJZWxzZSB7CiAJCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsICJ1bmhhbmRsZWQgQ0EgbWVzc2FnZSAweCUwOHhcbiIsCiAJCQkJIGZkdHYtPmNhX2xhc3RfY29tbWFuZCk7Ci0JCQllcnIgPSAtRUZBVUxUOworCQkJZXJyID0gLUVBQ0NFUzsKIAkJfQogCX0KIAlmZHR2LT5jYV9sYXN0X2NvbW1hbmQgPSAwOwpAQCAtMTQxLDcgKzEzOSw3IEBACiAJCWRhdGFfbGVuZ3RoID0gbXNnLT5tc2dbM107CiAJfQogCi0JcmV0dXJuIGF2Y19jYV9wbXQoZmR0diwgJm1zZy0+bXNnW2RhdGFfcG9zXSwgZGF0YV9sZW5ndGgpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIGF2Y19jYV9wbXQoZmR0diwgJm1zZy0+bXNnW2RhdGFfcG9zXSwgZGF0YV9sZW5ndGgpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfY2Ffc2VuZF9tc2coc3RydWN0IGZpcmVkdHYgKmZkdHYsIHZvaWQgKmFyZykKQEAgLTE3MCw3ICsxNjgsNyBAQAogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAidW5oYW5kbGVkIENBIG1lc3NhZ2UgMHglMDh4XG4iLAogCQkJZmR0di0+Y2FfbGFzdF9jb21tYW5kKTsKLQkJZXJyID0gLUVGQVVMVDsKKwkJZXJyID0gLUVBQ0NFUzsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE4NCw3ICsxODIsNyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENBX1JFU0VUOgotCQllcnIgPSBmZHR2X2NhX3Jlc2V0KGZkdHYpOworCQllcnIgPSBhdmNfY2FfcmVzZXQoZmR0dik7CiAJCWJyZWFrOwogCWNhc2UgQ0FfR0VUX0NBUDoKIAkJZXJyID0gZmR0dl9jYV9nZXRfY2FwcyhhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCA0NGI4MTZmLi4zMmUwOGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtNDksNiArNDksMjcgQEAKIAloZWxwCiAJICBBIFNpbGljb24gdHVuZXIgdGhhdCBzdXBwb3J0cyBEVkItUyBhbmQgRFZCLVMyIG1vZGVzCiAKK2NvbW1lbnQgIk11bHRpc3RhbmRhcmQgKGNhYmxlICsgdGVycmVzdHJpYWwpIGZyb250ZW5kcyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCisKK2NvbmZpZyBEVkJfRFJYSworCXRyaXN0YXRlICJNaWNyb25hcyBEUlhLIGJhc2VkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBNaWNyb25hcyBEUlgtSyBEVkItQy9UIGRlbW9kdWxhdG9yLgorCisJICBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKworY29uZmlnIERWQl9UREExODI3MUMyREQKKwl0cmlzdGF0ZSAiTlhQIFREQTE4MjcxQzIgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgTlhQIFREQTE4MjcxIHNpbGljb24gdHVuZXIuCisKKwkgIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgorCiBjb21tZW50ICJEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggMmYzYTZmNy4uNmE2YmEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMTAsNiArMTAsNyBAQAogYXU4NTIyLW9ianMgPSBhdTg1MjJfZGlnLm8gYXU4NTIyX2RlY29kZXIubwogZHJ4ZC1vYmpzID0gZHJ4ZF9maXJtLm8gZHJ4ZF9oYXJkLm8KIGN4ZDI4MjByLW9ianMgPSBjeGQyODIwcl9jb3JlLm8gY3hkMjgyMHJfYy5vIGN4ZDI4MjByX3QubyBjeGQyODIwcl90Mi5vCitkcnhrLW9ianMgOj0gZHJ4a19oYXJkLm8KIAogb2JqLSQoQ09ORklHX0RWQl9QTEwpICs9IGR2Yi1wbGwubwogb2JqLSQoQ09ORklHX0RWQl9TVFYwMjk5KSArPSBzdHYwMjk5Lm8KQEAgLTg4LDQgKzg5LDYgQEAKIG9iai0kKENPTkZJR19EVkJfSVgyNTA1VikgKz0gaXgyNTA1di5vCiBvYmotJChDT05GSUdfRFZCX1NUVjAzNjcpICs9IHN0djAzNjcubwogb2JqLSQoQ09ORklHX0RWQl9DWEQyODIwUikgKz0gY3hkMjgyMHIubworb2JqLSQoQ09ORklHX0RWQl9EUlhLKSArPSBkcnhrLm8KK29iai0kKENPTkZJR19EVkJfVERBMTgyNzFDMkREKSArPSB0ZGExODI3MWMyZGQubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCmluZGV4IGI1Mzc4OTEuLjJiMjQ4YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCkBAIC02OTIsNyArNjkyLDcgQEAKIAkvKiBJbnRlcnJvZ2F0ZSB0aGUgZGVjb2RlciB0byBzZWUgaWYgd2UgYXJlIGdldHRpbmcgYSByZWFsIHNpZ25hbCAqLwogCWxvY2tfc3RhdHVzID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIDB4MDApOwogCWlmIChsb2NrX3N0YXR1cyA9PSAweGEyKQotCQl2dC0+c2lnbmFsID0gMHgwMTsKKwkJdnQtPnNpZ25hbCA9IDB4ZmZmZjsKIAllbHNlCiAJCXZ0LT5zaWduYWwgPSAweDAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYwppbmRleCBlOWVlNTU1Li5jMzQxZDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKQEAgLTMxLDggKzMxLDggQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotI2RlZmluZSBpbmZvKGFyZ3MuLi4pIGRvIHsgcHJpbnRrKEtFUk5fSU5GTyAiQ1gyNDExMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZXJyKGFyZ3MuLi4pICBkbyB7IHByaW50ayhLRVJOX0VSUiAgIkNYMjQxMTM6ICIgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGN4X2luZm8oYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9JTkZPICJDWDI0MTEzOiAiIGFyZ3MpOyB9IHdoaWxlICgwKQorI2RlZmluZSBjeF9lcnIoYXJncy4uLikgIGRvIHsgcHJpbnRrKEtFUk5fRVJSICAiQ1gyNDExMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKIAlkbyB7IFwKQEAgLTM0MSw3ICszNDEsNyBAQAogCX0gd2hpbGUgKE4gPCA2ICYmIFIgPCAzKTsKIAogCWlmIChOIDwgNikgewotCQllcnIoInN0cmFuZ2UgZnJlcXVlbmN5OiBOIDwgNlxuIik7CisJCWN4X2Vycigic3RyYW5nZSBmcmVxdWVuY3k6IE4gPCA2XG4iKTsKIAkJcmV0dXJuOwogCX0KIAlGID0gZnJlcV9oejsKQEAgLTU2Myw3ICs1NjMsNyBAQAogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDExM19zdGF0ZSksIEdGUF9LRVJORUwpOwogCWludCByYzsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQllcnIoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKKwkJY3hfZXJyKCJVbmFibGUgdG8ga3phbGxvY1xuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC01NzEsNyArNTcxLDcgQEAKIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAKLQlpbmZvKCJ0cnlpbmcgdG8gZGV0ZWN0IG15c2VsZlxuIik7CisJY3hfaW5mbygidHJ5aW5nIHRvIGRldGVjdCBteXNlbGZcbiIpOwogCiAJLyogbWFraW5nIGEgZHVtbXkgcmVhZCwgYmVjYXVzZSBvZiBzb21lIGV4cGVjdGVkIHRyb3VibGVzCiAJICogYWZ0ZXIgcG93ZXIgb24gKi8KQEAgLTU3OSwyNCArNTc5LDI0IEBACiAKIAlyYyA9IGN4MjQxMTNfcmVhZHJlZyhzdGF0ZSwgMHgwMCk7CiAJaWYgKHJjIDwgMCkgewotCQlpbmZvKCJDWDI0MTEzIG5vdCBmb3VuZC5cbiIpOworCQljeF9pbmZvKCJDWDI0MTEzIG5vdCBmb3VuZC5cbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAlzdGF0ZS0+cmV2ID0gcmM7CiAKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAweDQzOgotCQlpbmZvKCJkZXRlY3RlZCBDWDI0MTEzIHZhcmlhbnRcbiIpOworCQljeF9pbmZvKCJkZXRlY3RlZCBDWDI0MTEzIHZhcmlhbnRcbiIpOwogCQlicmVhazsKIAljYXNlIFJFVl9DWDI0MTEzOgotCQlpbmZvKCJzdWNjZXNzZnVsbHkgZGV0ZWN0ZWRcbiIpOworCQljeF9pbmZvKCJzdWNjZXNzZnVsbHkgZGV0ZWN0ZWRcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVuc3VwcG9ydGVkIGRldmljZSBpZDogJXhcbiIsIHN0YXRlLT5yZXYpOworCQljeF9lcnIoInVuc3VwcG9ydGVkIGRldmljZSBpZDogJXhcbiIsIHN0YXRlLT5yZXYpOwogCQlnb3RvIGVycm9yOwogCX0KIAlzdGF0ZS0+dmVyID0gY3gyNDExM19yZWFkcmVnKHN0YXRlLCAweDAxKTsKLQlpbmZvKCJ2ZXJzaW9uOiAleFxuIiwgc3RhdGUtPnZlcik7CisJY3hfaW5mbygidmVyc2lvbjogJXhcbiIsIHN0YXRlLT52ZXIpOwogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwogCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZjeDI0MTEzX3R1bmVyX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCmluZGV4IDk1YzY0NjUuLmNjZDA1MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYwpAQCAtMTQ1MiwxMSArMTQ1Miw3IEBACiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfQkFORFdJRFRIOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKIAljbWQubGVuID0gMHgwMjsKLQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKIH0KIAogc3RhdGljIGludCBjeDI0MTE2X3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4ZDI4MjByLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3hkMjgyMHIuaAppbmRleCBhZDE3ODQ1Li4yOTA2NTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3hkMjgyMHIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3hkMjgyMHIuaApAQCAtNTUsMTMgKzU1LDEzIEBACiAJICogRGVmYXVsdDogMAogCSAqIFZhbHVlczogMCwgMQogCSAqLwotCWludCBpZl9hZ2NfcG9sYXJpdHk6MTsKKwlib29sIGlmX2FnY19wb2xhcml0eTsKIAogCS8qIFNwZWN0cnVtIGludmVyc2lvbi4KIAkgKiBEZWZhdWx0OiAwCiAJICogVmFsdWVzOiAwLCAxCiAJICovCi0JaW50IHNwZWNfaW52OjE7CisJYm9vbCBzcGVjX2ludjsKIAogCS8qIElGcyBmb3IgYWxsIHVzZWQgbW9kZXMuCiAJICogRGVmYXVsdDogbm9uZSwgbXVzdCBzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeGQyODIwcl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3hkMjgyMHJfY29yZS5jCmluZGV4IDA3NzlmNjkuLmQ0MTZlODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeGQyODIwcl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4ZDI4MjByX2NvcmUuYwpAQCAtMzE0LDYgKzMxNCw4IEBACiAJCQl9IGVsc2UgaWYgKGMtPmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfRFZCVDIpIHsKIAkJCQkvKiBEVkItVCA9PiBEVkItVDIgKi8KIAkJCQlyZXQgPSBjeGQyODIwcl9zbGVlcF90KGZlKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKIAkJCQlyZXQgPSBjeGQyODIwcl9zZXRfZnJvbnRlbmRfdDIoZmUsIHApOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMjQsNiArMzI2LDggQEAKIAkJCX0gZWxzZSBpZiAoYy0+ZGVsaXZlcnlfc3lzdGVtID09IFNZU19EVkJUKSB7CiAJCQkJLyogRFZCLVQyID0+IERWQi1UICovCiAJCQkJcmV0ID0gY3hkMjgyMHJfc2xlZXBfdDIoZmUpOworCQkJCWlmIChyZXQpCisJCQkJCWJyZWFrOwogCQkJCXJldCA9IGN4ZDI4MjByX3NldF9mcm9udGVuZF90KGZlLCBwKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNzQwLDEyICs3NDQsMTMgQEAKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKIHsKIAlzdHJ1Y3QgY3hkMjgyMHJfcHJpdiAqcHJpdiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOwotCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOworCWludCByZXQ7CisJdTggKm9idWYgPSBrbWFsbG9jKG1zZ1swXS5sZW4gKyAyLCBHRlBfS0VSTkVMKTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cyWzJdID0gewogCQl7CiAJCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkcmVzcywKIAkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gc2l6ZW9mKG9idWYpLAorCQkJLmxlbiA9IG1zZ1swXS5sZW4gKyAyLAogCQkJLmJ1ZiA9IG9idWYsCiAJCX0sIHsKIAkJCS5hZGRyID0gcHJpdi0+Y2ZnLmkyY19hZGRyZXNzLApAQCAtNzU1LDE1ICs3NjAsMjQgQEAKIAkJfQogCX07CiAKKwlpZiAoIW9idWYpCisJCXJldHVybiAtRU5PTUVNOworCiAJb2J1ZlswXSA9IDB4MDk7CiAJb2J1ZlsxXSA9IChtc2dbMF0uYWRkciA8PCAxKTsKIAlpZiAobnVtID09IDIpIHsgLyogSTJDIHJlYWQgKi8KIAkJb2J1ZlsxXSA9IChtc2dbMF0uYWRkciA8PCAxKSB8IEkyQ19NX1JEOyAvKiBJMkMgUkQgZmxhZyAqLwotCQltc2cyWzBdLmxlbiA9IHNpemVvZihvYnVmKSAtIDE7IC8qIG1heWJlIEhXIGJ1ZyA/ICovCisJCW1zZzJbMF0ubGVuID0gbXNnWzBdLmxlbiArIDIgLSAxOyAvKiAnLTEnIG1heWJlIEhXIGJ1ZyA/ICovCiAJfQogCW1lbWNweSgmb2J1ZlsyXSwgbXNnWzBdLmJ1ZiwgbXNnWzBdLmxlbik7CiAKLQlyZXR1cm4gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgbXNnMiwgbnVtKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2cyLCBudW0pOworCWlmIChyZXQgPCAwKQorCQl3YXJuKCJ0dW5lciBpMmMgZmFpbGVkIHJldDolZCIsIHJldCk7CisKKwlrZnJlZShvYnVmKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBjeGQyODIwcl90dW5lcl9pMmNfYWxnbyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeGQyODIwcl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3hkMjgyMHJfcHJpdi5oCmluZGV4IDI1YWRiZWUuLjBjMGViYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeGQyODIwcl9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4ZDI4MjByX3ByaXYuaApAQCAtNTUsMTMgKzU1LDEzIEBACiAJc3RydWN0IG11dGV4IGZlX2xvY2s7IC8qwqBGRSBsb2NrICovCiAJaW50IGFjdGl2ZV9mZToyOyAvKiBGRSBsb2NrLCAtMT1OT05FLCAwPURWQi1UL1QyLCAxPURWQi1DICovCiAKLQlpbnQgYmVyX3J1bm5pbmc6MTsKKwlib29sIGJlcl9ydW5uaW5nOwogCiAJdTggYmFua1syXTsKIAl1OCBncGlvWzNdOwogCiAJZmVfZGVsaXZlcnlfc3lzdGVtX3QgZGVsaXZlcnlfc3lzdGVtOwotCWludCBsYXN0X3R1bmVfZmFpbGVkOjE7IC8qIGZvciBzd2l0Y2ggYmV0d2VlbiBUIGFuZCBUMiB0dW5lICovCisJYm9vbCBsYXN0X3R1bmVfZmFpbGVkOyAvKiBmb3Igc3dpdGNoIGJldHdlZW4gVCBhbmQgVDIgdHVuZSAqLwogfTsKIAogLyogY3hkMjgyMHJfY29yZS5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDBjOWY0MGMuLmE2NGE1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC0yMzM2LDYgKzIzMzYsMTEgQEAKIAkJcmVxdWVzdF9maXJtd2FyZSgpIHdpbGwgaGl0IGFuIE9PUFMgKHRoaXMgc2hvdWxkIGJlIG1vdmVkIHNvbWV3aGVyZQogCQltb3JlIGNvbW1vbikgKi8KIAorCS8qIEZJWE1FOiBtYWtlIHN1cmUgdGhlIGRldi5wYXJlbnQgZmllbGQgaXMgaW5pdGlhbGl6ZWQsIG9yIGVsc2UKKwkgICByZXF1ZXN0X2Zpcm13YXJlKCkgd2lsbCBoaXQgYW4gT09QUyAodGhpcyBzaG91bGQgYmUgbW92ZWQgc29tZXdoZXJlCisJICAgbW9yZSBjb21tb24pICovCisJc3QtPmkyY19tYXN0ZXIuZ2F0ZWRfdHVuZXJfaTJjX2FkYXAuZGV2LnBhcmVudCA9IGkyY19hZGFwLT5kZXYucGFyZW50OworCiAJZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoJnN0LT5pMmNfbWFzdGVyLCBESUI3MDAwUCwgc3QtPmkyY19hZGFwLCBzdC0+aTJjX2FkZHIpOwogCiAJLyogaW5pdCA3MDkwIHR1bmVyIGFkYXB0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhkX2hhcmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhkX2hhcmQuYwppbmRleCBlYTRjMWMzLi4yMjM4YmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4ZF9oYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGRfaGFyZC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgpAQCAtMjMzLDcgKzIzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWlubGluZSB1MzIgTXVsRGl2MzIodTMyIGEsIHUzMiBiLCB1MzIgYykKK3N0YXRpYyBpbmxpbmUgdTMyIE11bERpdjMyKHUzMiBhLCB1MzIgYiwgdTMyIGMpCiB7CiAJdTY0IHRtcDY0OwogCkBAIC05MTAsMTQgKzkwOSwxNiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzdGF0ZS0+bWljcm9jb2RlID0ga3phbGxvYyhmdy0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUtPm1pY3JvY29kZSA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZS0+bWljcm9jb2RlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkcnhkOiBmaXJtd2FyZSBsb2FkIGZhaWx1cmU6IG5vbWVtb3J5XG4iKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCXByaW50ayhLRVJOX0VSUiAiZHJ4ZDogZmlybXdhcmUgbG9hZCBmYWlsdXJlOiBubyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAltZW1jcHkoc3RhdGUtPm1pY3JvY29kZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAlzdGF0ZS0+bWljcm9jb2RlX2xlbmd0aCA9IGZ3LT5zaXplOworCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4ay5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGJhZjQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGsuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9EUlhLX0hfCisjZGVmaW5lIF9EUlhLX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisvKioKKyAqIHN0cnVjdCBkcnhrX2NvbmZpZyAtIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzIGZvciBEUlgtSworICoKKyAqIGFkcjoJCQlJMkMgQWRkcmVzcyBvZiB0aGUgRFJYLUsKKyAqIHNpbmdsZV9tYXN0ZXI6CURldmljZSBpcyBvbiB0aGUgc2luZ2xlIG1hc3RlciBtb2RlCisgKiBub19pMmNfYnJpZGdlOglEb24ndCBzd2l0Y2ggdGhlIEkyQyBicmlkZ2UgdG8gdGFsayB3aXRoIHR1bmVyCisgKiBhbnRlbm5hX2dwaW86CUdQSU8gYml0IHVzZWQgdG8gY29udHJvbCB0aGUgYW50ZW5uYQorICogYW50ZW5uYV9kdmJ0OglHUElPIGJpdCBmb3IgY2hhbmdpbmcgYW50ZW5uYSB0byBEVkItQy4gQSB2YWx1ZSBvZiAxCisgKgkJCW1lYW5zIHRoYXQgMT1EVkJDLCAwID0gRFZCVC4gWmVybyBtZWFucyB0aGUgb3Bwb3NpdGUuCisgKiBtaWNyb2NvZGVfbmFtZToJTmFtZSBvZiB0aGUgZmlybXdhcmUgZmlsZSB3aXRoIHRoZSBtaWNyb2NvZGUKKyAqCisgKiBPbiB0aGUgKl9ncGlvIHZhcnMsIGJpdCAwIGlzIFVJTy0xLCBiaXQgMSBpcyBVSU8tMiBhbmQgYml0IDIgaXMKKyAqIFVJTy0zLgorICovCitzdHJ1Y3QgZHJ4a19jb25maWcgeworCXU4CWFkcjsKKwlib29sCXNpbmdsZV9tYXN0ZXI7CisJYm9vbAlub19pMmNfYnJpZGdlOworCisJYm9vbAlhbnRlbm5hX2R2YnQ7CisJdTE2CWFudGVubmFfZ3BpbzsKKworCWNvbnN0IGNoYXIgKm1pY3JvY29kZV9uYW1lOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9EUlhLKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RSWEtfTU9EVUxFKSBcCisgICAgICAgICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkcnhrX2F0dGFjaChjb25zdCBzdHJ1Y3QgZHJ4a19jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKipmZV90KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRyeGtfYXR0YWNoKGNvbnN0IHN0cnVjdCBkcnhrX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqKmZlX3QpCit7CisgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworICAgICAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhrX2hhcmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhrX2hhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWIwODM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGtfaGFyZC5jCkBAIC0wLDAgKzEsNjQ1NCBAQAorLyoKKyAqIGRyeGtfaGFyZDogRFJYLUsgRFZCLUMvVCBkZW1vZHVsYXRvciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBEaWdpdGFsIERldmljZXMgR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHJ4ay5oIgorI2luY2x1ZGUgImRyeGtfaGFyZC5oIgorCitzdGF0aWMgaW50IFBvd2VyRG93bkRWQlQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCBib29sIHNldFBvd2VyTW9kZSk7CitzdGF0aWMgaW50IFBvd2VyRG93blFBTShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpOworc3RhdGljIGludCBTZXREVkJUU3RhbmRhcmQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkJICAgZW51bSBPcGVyYXRpb25Nb2RlIG9Nb2RlKTsKK3N0YXRpYyBpbnQgU2V0UUFNU3RhbmRhcmQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkJICBlbnVtIE9wZXJhdGlvbk1vZGUgb01vZGUpOworc3RhdGljIGludCBTZXRRQU0oc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MTYgSW50ZXJtZWRpYXRlRnJlcWtIeiwKKwkJICBzMzIgdHVuZXJGcmVxT2Zmc2V0KTsKK3N0YXRpYyBpbnQgU2V0RFZCVFN0YW5kYXJkKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSAgIGVudW0gT3BlcmF0aW9uTW9kZSBvTW9kZSk7CitzdGF0aWMgaW50IERWQlRTdGFydChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpOworc3RhdGljIGludCBTZXREVkJUKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTE2IEludGVybWVkaWF0ZUZyZXFrSHosCisJCSAgIHMzMiB0dW5lckZyZXFPZmZzZXQpOworc3RhdGljIGludCBHZXRRQU1Mb2NrU3RhdHVzKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyICpwTG9ja1N0YXR1cyk7CitzdGF0aWMgaW50IEdldERWQlRMb2NrU3RhdHVzKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyICpwTG9ja1N0YXR1cyk7CitzdGF0aWMgaW50IFN3aXRjaEFudGVubmFUb1FBTShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpOworc3RhdGljIGludCBTd2l0Y2hBbnRlbm5hVG9EVkJUKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyBib29sIElzRFZCVChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIHN0YXRlLT5tX09wZXJhdGlvbk1vZGUgPT0gT01fRFZCVDsKK30KKworc3RhdGljIGJvb2wgSXNRQU0oc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID09IE9NX1FBTV9JVFVfQSB8fAorCSAgICBzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID09IE9NX1FBTV9JVFVfQiB8fAorCSAgICBzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID09IE9NX1FBTV9JVFVfQzsKK30KKworYm9vbCBJc0ExV2l0aFBhdGNoQ29kZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIHN0YXRlLT5tX0RSWEtfQTFfUEFUQ0hfQ09ERTsKK30KKworYm9vbCBJc0ExV2l0aFJvbUNvZGUoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+bV9EUlhLX0ExX1JPTV9DT0RFOworfQorCisjZGVmaW5lIE5PQTFST00gMAorCisjZGVmaW5lIERSWERBUF9GQVNJX1NIT1JUX0ZPUk1BVChhZGRyKSAoKChhZGRyKSAmIDB4RkMzMEZGODApID09IDApCisjZGVmaW5lIERSWERBUF9GQVNJX0xPTkdfRk9STUFUKGFkZHIpICAoKChhZGRyKSAmIDB4RkMzMEZGODApICE9IDApCisKKyNkZWZpbmUgREVGQVVMVF9NRVJfODMgIDE2NQorI2RlZmluZSBERUZBVUxUX01FUl85MyAgMjUwCisKKyNpZm5kZWYgRFJYS19NUEVHX1NFUklBTF9PVVRQVVRfUElOX0RSSVZFX1NUUkVOR1RICisjZGVmaW5lIERSWEtfTVBFR19TRVJJQUxfT1VUUFVUX1BJTl9EUklWRV9TVFJFTkdUSCAoMHgwMikKKyNlbmRpZgorCisjaWZuZGVmIERSWEtfTVBFR19QQVJBTExFTF9PVVRQVVRfUElOX0RSSVZFX1NUUkVOR1RICisjZGVmaW5lIERSWEtfTVBFR19QQVJBTExFTF9PVVRQVVRfUElOX0RSSVZFX1NUUkVOR1RIICgweDAzKQorI2VuZGlmCisKKyNpZm5kZWYgRFJYS19NUEVHX09VVFBVVF9DTEtfRFJJVkVfU1RSRU5HVEgKKyNkZWZpbmUgRFJYS19NUEVHX09VVFBVVF9DTEtfRFJJVkVfU1RSRU5HVEggKDB4MDYpCisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX0RSWEtfTVBFR19MT0NLX1RJTUVPVVQgNzAwCisjZGVmaW5lIERFRkFVTFRfRFJYS19ERU1PRF9MT0NLX1RJTUVPVVQgNTAwCisKKyNpZm5kZWYgRFJYS19LSV9SQUdDX0FUVgorI2RlZmluZSBEUlhLX0tJX1JBR0NfQVRWICAgNAorI2VuZGlmCisjaWZuZGVmIERSWEtfS0lfSUFHQ19BVFYKKyNkZWZpbmUgRFJYS19LSV9JQUdDX0FUViAgIDYKKyNlbmRpZgorI2lmbmRlZiBEUlhLX0tJX0RBR0NfQVRWCisjZGVmaW5lIERSWEtfS0lfREFHQ19BVFYgICA3CisjZW5kaWYKKworI2lmbmRlZiBEUlhLX0tJX1JBR0NfUUFNCisjZGVmaW5lIERSWEtfS0lfUkFHQ19RQU0gICAzCisjZW5kaWYKKyNpZm5kZWYgRFJYS19LSV9JQUdDX1FBTQorI2RlZmluZSBEUlhLX0tJX0lBR0NfUUFNICAgNAorI2VuZGlmCisjaWZuZGVmIERSWEtfS0lfREFHQ19RQU0KKyNkZWZpbmUgRFJYS19LSV9EQUdDX1FBTSAgIDcKKyNlbmRpZgorI2lmbmRlZiBEUlhLX0tJX1JBR0NfRFZCVAorI2RlZmluZSBEUlhLX0tJX1JBR0NfRFZCVCAgKElzQTFXaXRoUGF0Y2hDb2RlKHN0YXRlKSA/IDMgOiAyKQorI2VuZGlmCisjaWZuZGVmIERSWEtfS0lfSUFHQ19EVkJUCisjZGVmaW5lIERSWEtfS0lfSUFHQ19EVkJUICAoSXNBMVdpdGhQYXRjaENvZGUoc3RhdGUpID8gNCA6IDIpCisjZW5kaWYKKyNpZm5kZWYgRFJYS19LSV9EQUdDX0RWQlQKKyNkZWZpbmUgRFJYS19LSV9EQUdDX0RWQlQgIChJc0ExV2l0aFBhdGNoQ29kZShzdGF0ZSkgPyAxMCA6IDcpCisjZW5kaWYKKworI2lmbmRlZiBEUlhLX0FHQ19EQUNfT0ZGU0VUCisjZGVmaW5lIERSWEtfQUdDX0RBQ19PRkZTRVQgKDB4ODAwKQorI2VuZGlmCisKKyNpZm5kZWYgRFJYS19CQU5EV0lEVEhfOE1IWl9JTl9IWgorI2RlZmluZSBEUlhLX0JBTkRXSURUSF84TUhaX0lOX0haICAoMHg4QjgyNDlMKQorI2VuZGlmCisKKyNpZm5kZWYgRFJYS19CQU5EV0lEVEhfN01IWl9JTl9IWgorI2RlZmluZSBEUlhLX0JBTkRXSURUSF83TUhaX0lOX0haICAoMHg3QTEyMDBMKQorI2VuZGlmCisKKyNpZm5kZWYgRFJYS19CQU5EV0lEVEhfNk1IWl9JTl9IWgorI2RlZmluZSBEUlhLX0JBTkRXSURUSF82TUhaX0lOX0haICAoMHg2OEExQjZMKQorI2VuZGlmCisKKyNpZm5kZWYgRFJYS19RQU1fU1lNQk9MUkFURV9NQVgKKyNkZWZpbmUgRFJYS19RQU1fU1lNQk9MUkFURV9NQVggICAgICAgICAoNzIzMzAwMCkKKyNlbmRpZgorCisjZGVmaW5lIERSWEtfQkxfUk9NX09GRlNFVF9UQVBTX0RWQlQgICAgNTYKKyNkZWZpbmUgRFJYS19CTF9ST01fT0ZGU0VUX1RBUFNfSVRVX0EgICA2NAorI2RlZmluZSBEUlhLX0JMX1JPTV9PRkZTRVRfVEFQU19JVFVfQyAgIDB4NUZFMAorI2RlZmluZSBEUlhLX0JMX1JPTV9PRkZTRVRfVEFQU19CRyAgICAgIDI0CisjZGVmaW5lIERSWEtfQkxfUk9NX09GRlNFVF9UQVBTX0RLSUxMUCAgMzIKKyNkZWZpbmUgRFJYS19CTF9ST01fT0ZGU0VUX1RBUFNfTlRTQyAgICA0MAorI2RlZmluZSBEUlhLX0JMX1JPTV9PRkZTRVRfVEFQU19GTSAgICAgIDQ4CisjZGVmaW5lIERSWEtfQkxfUk9NX09GRlNFVF9VQ09ERSAgICAgICAgMAorCisjZGVmaW5lIERSWEtfQkxDX1RJTUVPVVQgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgRFJYS19CTENDX05SX0VMRU1FTlRTX1RBUFMgICAgICAyCisjZGVmaW5lIERSWEtfQkxDQ19OUl9FTEVNRU5UU19VQ09ERSAgICAgNgorCisjZGVmaW5lIERSWEtfQkxEQ19OUl9FTEVNRU5UU19UQVBTICAgICAgMjgKKworI2lmbmRlZiBEUlhLX09GRE1fTkVfTk9UQ0hfV0lEVEgKKyNkZWZpbmUgRFJYS19PRkRNX05FX05PVENIX1dJRFRIICAgICAgICAgICAgICg0KQorI2VuZGlmCisKKyNkZWZpbmUgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTE2ICAgICAgICg0MDk2MCkKKyNkZWZpbmUgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTMyICAgICAgICgyMDQ4MCkKKyNkZWZpbmUgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTY0ICAgICAgICg0MzAwOCkKKyNkZWZpbmUgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTEyOCAgICAgICgyMDk5MikKKyNkZWZpbmUgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTI1NiAgICAgICg0MzUyMCkKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKKworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgZG8gewkJCVwKK2lmIChkZWJ1ZyA+PSBsZXZlbCkJCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgImRyeGs6ICVzIiBmbXQsIF9fZnVuY19fLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIE11bERpdjMyKHUzMiBhLCB1MzIgYiwgdTMyIGMpCit7CisJdTY0IHRtcDY0OworCisJdG1wNjQgPSAodTY0KSBhICogKHU2NCkgYjsKKwlkb19kaXYodG1wNjQsIGMpOworCisJcmV0dXJuICh1MzIpIHRtcDY0OworfQorCitpbmxpbmUgdTMyIEZyYWMyOGEodTMyIGEsIHUzMiBjKQoreworCWludCBpID0gMDsKKwl1MzIgUTEgPSAwOworCXUzMiBSMCA9IDA7CisKKwlSMCA9IChhICUgYykgPDwgNDsJLyogMzItMjggPT0gNCBzaGlmdHMgcG9zc2libGUgYXQgbWF4ICovCisJUTEgPSBhIC8gYzsJCS8qIGludGVnZXIgcGFydCwgb25seSB0aGUgNCBsZWFzdCBzaWduaWZpY2FudCBiaXRzCisJCQkJICAgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSByZXN1bHQgKi8KKworCS8qIGRpdmlzaW9uIHVzaW5nIHJhZGl4IDE2LCA3IG5pYmJsZXMgaW4gdGhlIHJlc3VsdCAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJUTEgPSAoUTEgPDwgNCkgfCAoUjAgLyBjKTsKKwkJUjAgPSAoUjAgJSBjKSA8PCA0OworCX0KKwkvKiByb3VuZGluZyAqLworCWlmICgoUjAgPj4gMykgPj0gYykKKwkJUTErKzsKKworCXJldHVybiBRMTsKK30KKworc3RhdGljIHUzMiBMb2cxMFRpbWVzMTAwKHUzMiB4KQoreworCXN0YXRpYyBjb25zdCB1OCBzY2FsZSA9IDE1OworCXN0YXRpYyBjb25zdCB1OCBpbmRleFdpZHRoID0gNTsKKwl1OCBpID0gMDsKKwl1MzIgeSA9IDA7CisJdTMyIGQgPSAwOworCXUzMiBrID0gMDsKKwl1MzIgciA9IDA7CisJLyoKKwkgICBsb2cybHV0W25dID0gKDE8PHNjYWxlKSAqIDIwMCAqIGxvZzIoMS4wICsgKCgxLjAvKDE8PElOREVYV0lEVEgpKSAqIG4pKQorCSAgIDAgPD0gbiA8ICgoMTw8SU5ERVhXSURUSCkrMSkKKwkgKi8KKworCXN0YXRpYyBjb25zdCB1MzIgbG9nMmx1dFtdID0geworCQkwLAkJLyogMC4wMDAwMDAgKi8KKwkJMjkwOTQxLAkJLyogMjkwOTQxLjMwMDYyOCAqLworCQk1NzMxOTYsCQkvKiA1NzMxOTYuNDc2NDE4ICovCisJCTg0NzI2OSwJCS8qIDg0NzI2OS4xNzk4NTEgKi8KKwkJMTExMzYyMCwJLyogMTExMzYyMC40ODk0NTIgKi8KKwkJMTM3MjY3NCwJLyogMTM3MjY3My41NzY5ODYgKi8KKwkJMTYyNDgxOCwJLyogMTYyNDgxNy43NTIxMDQgKi8KKwkJMTg3MDQxMiwJLyogMTg3MDQxMS45ODE1MzYgKi8KKwkJMjEwOTc4OCwJLyogMjEwOTc4Ny45NjI2NTQgKi8KKwkJMjM0MzI1MywJLyogMjM0MzI1Mi44MTc0NjUgKi8KKwkJMjU3MTA5MSwJLyogMjU3MTA5MS40NjE5MjMgKi8KKwkJMjc5MzU2OSwJLyogMjc5MzU2OC42OTY0MTYgKi8KKwkJMzAxMDkzMSwJLyogMzAxMDkzMS4wNTU5MDEgKi8KKwkJMzIyMzQwOCwJLyogMzIyMzQwOC40NTIxMDYgKi8KKwkJMzQzMTIxNiwJLyogMzQzMTIxNS42MzUyMTUgKi8KKwkJMzYzNDU1MywJLyogMzYzNDU1My40OTgzNTUgKi8KKwkJMzgzMzYxMCwJLyogMzgzMzYxMC4yNDQ3MjYgKi8KKwkJNDAyODU2MiwJLyogNDAyODU2Mi40MzQzOTMgKi8KKwkJNDIxOTU3NiwJLyogNDIxOTU3NS45MjUzMDggKi8KKwkJNDQwNjgwNywJLyogNDQwNjgwNi43MjExNDQgKi8KKwkJNDU5MDQwMiwJLyogNDU5MDQwMS43MzY4MDkgKi8KKwkJNDc3MDQ5OSwJLyogNDc3MDQ5OS40OTEwMjUgKi8KKwkJNDk0NzIzMSwJLyogNDk0NzIzMC43MzQxNzkgKi8KKwkJNTEyMDcxOSwJLyogNTEyMDcxOS4wMTg1NTUgKi8KKwkJNTI5MTA4MSwJLyogNTI5MTA4MS4yMTcxOTcgKi8KKwkJNTQ1ODQyOCwJLyogNTQ1ODQyNy45OTY4MzAgKi8KKwkJNTYyMjg2NCwJLyogNTYyMjg2NC4yNDk2NjggKi8KKwkJNTc4NDQ4OSwJLyogNTc4NDQ4OS40ODgyOTggKi8KKwkJNTk0MzM5OCwJLyogNTk0MzM5OC4yMDczODAgKi8KKwkJNjA5OTY4MCwJLyogNjA5OTY4MC4yMTU0NTIgKi8KKwkJNjI1MzQyMSwJLyogNjI1MzQyMC45Mzk3NTEgKi8KKwkJNjQwNDcwMiwJLyogNjQwNDcwMS43MDY2NDkgKi8KKwkJNjU1MzYwMCwJLyogNjU1MzYwMC4wMDAwMDAgKi8KKwl9OworCisKKwlpZiAoeCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIFNjYWxlIHggKG5vcm1hbGl6ZSkgKi8KKwkvKiBjb21wdXRpbmcgeSBpbiBsb2coeC95KSA9IGxvZyh4KSAtIGxvZyh5KSAqLworCWlmICgoeCAmICgoMHhmZmZmZmZmZikgPDwgKHNjYWxlICsgMSkpKSA9PSAwKSB7CisJCWZvciAoayA9IHNjYWxlOyBrID4gMDsgay0tKSB7CisJCQlpZiAoeCAmICgoKHUzMikgMSkgPDwgc2NhbGUpKQorCQkJCWJyZWFrOworCQkJeCA8PD0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoayA9IHNjYWxlOyBrIDwgMzE7IGsrKykgeworCQkJaWYgKCh4ICYgKCgodTMyKSAoLTEpKSA8PCAoc2NhbGUgKyAxKSkpID09IDApCisJCQkJYnJlYWs7CisJCQl4ID4+PSAxOworCQl9CisJfQorCS8qCisJICAgTm93IHggaGFzIGJpbmFyeSBwb2ludCBiZXR3ZWVuIGJpdFtzY2FsZV0gYW5kIGJpdFtzY2FsZS0xXQorCSAgIGFuZCAxLjAgPD0geCA8IDIuMCAqLworCisJLyogY29ycmVjdGlvbiBmb3IgZGl2aXNvbjogbG9nKHgpID0gbG9nKHgveSkrbG9nKHkpICovCisJeSA9IGsgKiAoKCgodTMyKSAxKSA8PCBzY2FsZSkgKiAyMDApOworCisJLyogcmVtb3ZlIGludGVnZXIgcGFydCAqLworCXggJj0gKCgoKHUzMikgMSkgPDwgc2NhbGUpIC0gMSk7CisJLyogZ2V0IGluZGV4ICovCisJaSA9ICh1OCkgKHggPj4gKHNjYWxlIC0gaW5kZXhXaWR0aCkpOworCS8qIGNvbXB1dGUgZGVsdGEgKHggLSBhKSAqLworCWQgPSB4ICYgKCgoKHUzMikgMSkgPDwgKHNjYWxlIC0gaW5kZXhXaWR0aCkpIC0gMSk7CisJLyogY29tcHV0ZSBsb2csIG11bHRpcGxpY2F0aW9uIChkKiAoLi4pKSBtdXN0IGJlIHdpdGhpbiByYW5nZSAhICovCisJeSArPSBsb2cybHV0W2ldICsKKwkgICAgKChkICogKGxvZzJsdXRbaSArIDFdIC0gbG9nMmx1dFtpXSkpID4+IChzY2FsZSAtIGluZGV4V2lkdGgpKTsKKwkvKiBDb252ZXIgdG8gbG9nMTAoKSAqLworCXkgLz0gMTA4ODUzOwkJLyogKGxvZzIoMTApIDw8IHNjYWxlKSAqLworCXIgPSAoeSA+PiAxKTsKKwkvKiByb3VuZGluZyAqLworCWlmICh5ICYgKCh1MzIpIDEpKQorCQlyKys7CisJcmV0dXJuIHI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSTJDICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpMmNfcmVhZDEoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBhZHIsIHU4ICp2YWwpCit7CisJc3RydWN0IGkyY19tc2cgbXNnc1sxXSA9IHsgey5hZGRyID0gYWRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkgICAgLmJ1ZiA9IHZhbCwgLmxlbiA9IDF9CisJfTsKKworCXJldHVybiBpMmNfdHJhbnNmZXIoYWRhcHRlciwgbXNncywgMSk7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTggYWRyLCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkgICAgLmFkZHIgPSBhZHIsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gbGVuIH07CisKKwlkcHJpbnRrKDMsICI6Iik7CisJaWYgKGRlYnVnID4gMikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBkYXRhW2ldKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwl9CisJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGFkYXAsICZtc2csIDEpOworCWlmIChzdGF0dXMgPj0gMCAmJiBzdGF0dXMgIT0gMSkKKwkJc3RhdHVzID0gLUVJTzsKKworCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IGkyYyB3cml0ZSBlcnJvciBhdCBhZGRyIDB4JTAyeFxuIiwgYWRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkgICAgdTggYWRyLCB1OCAqbXNnLCBpbnQgbGVuLCB1OCAqYW5zdywgaW50IGFsZW4pCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0geworCQl7LmFkZHIgPSBhZHIsIC5mbGFncyA9IDAsCisJCQkJICAgIC5idWYgPSBtc2csIC5sZW4gPSBsZW59LAorCQl7LmFkZHIgPSBhZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkgLmJ1ZiA9IGFuc3csIC5sZW4gPSBhbGVufQorCX07CisKKwlzdGF0dXMgPSBpMmNfdHJhbnNmZXIoYWRhcCwgbXNncywgMik7CisJaWYgKHN0YXR1cyAhPSAyKSB7CisJCWlmIChkZWJ1ZyA+IDIpCisJCQlwcmludGsoS0VSTl9DT05UICI6IEVSUk9SIVxuIik7CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJCXN0YXR1cyA9IC1FSU87CisKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBpMmMgcmVhZCBlcnJvciBhdCBhZGRyIDB4JTAyeFxuIiwgYWRyKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGRlYnVnID4gMikgeworCQlpbnQgaTsKKwkJZHByaW50aygyLCAiOiByZWFkIGZyb20gIik7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgbXNnW2ldKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiVmFsdWUgPSAiKTsKKwkJZm9yIChpID0gMDsgaSA8IGFsZW47IGkrKykKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgYW5zd1tpXSk7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWQxNl9mbGFncyhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUxNiAqZGF0YSwgdTggZmxhZ3MpCit7CisJaW50IHN0YXR1czsKKwl1OCBhZHIgPSBzdGF0ZS0+ZGVtb2RfYWRkcmVzcywgbW0xWzRdLCBtbTJbMl0sIGxlbjsKKworCWlmIChzdGF0ZS0+c2luZ2xlX21hc3RlcikKKwkJZmxhZ3MgfD0gMHhDMDsKKworCWlmIChEUlhEQVBfRkFTSV9MT05HX0ZPUk1BVChyZWcpIHx8IChmbGFncyAhPSAwKSkgeworCQltbTFbMF0gPSAoKChyZWcgPDwgMSkgJiAweEZGKSB8IDB4MDEpOworCQltbTFbMV0gPSAoKHJlZyA+PiAxNikgJiAweEZGKTsKKwkJbW0xWzJdID0gKChyZWcgPj4gMjQpICYgMHhGRikgfCBmbGFnczsKKwkJbW0xWzNdID0gKChyZWcgPj4gNykgJiAweEZGKTsKKwkJbGVuID0gNDsKKwl9IGVsc2UgeworCQltbTFbMF0gPSAoKHJlZyA8PCAxKSAmIDB4RkYpOworCQltbTFbMV0gPSAoKChyZWcgPj4gMTYpICYgMHgwRikgfCAoKHJlZyA+PiAxOCkgJiAweEYwKSk7CisJCWxlbiA9IDI7CisJfQorCWRwcmludGsoMiwgIigweCUwOHgsIDB4JTAyeClcbiIsIHJlZywgZmxhZ3MpOworCXN0YXR1cyA9IGkyY19yZWFkKHN0YXRlLT5pMmMsIGFkciwgbW0xLCBsZW4sIG1tMiwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJaWYgKGRhdGEpCisJCSpkYXRhID0gbW0yWzBdIHwgKG1tMlsxXSA8PCA4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWQxNihzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUxNiAqZGF0YSkKK3sKKwlyZXR1cm4gcmVhZDE2X2ZsYWdzKHN0YXRlLCByZWcsIGRhdGEsIDApOworfQorCitzdGF0aWMgaW50IHJlYWQzMl9mbGFncyhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUzMiAqZGF0YSwgdTggZmxhZ3MpCit7CisJaW50IHN0YXR1czsKKwl1OCBhZHIgPSBzdGF0ZS0+ZGVtb2RfYWRkcmVzcywgbW0xWzRdLCBtbTJbNF0sIGxlbjsKKworCWlmIChzdGF0ZS0+c2luZ2xlX21hc3RlcikKKwkJZmxhZ3MgfD0gMHhDMDsKKworCWlmIChEUlhEQVBfRkFTSV9MT05HX0ZPUk1BVChyZWcpIHx8IChmbGFncyAhPSAwKSkgeworCQltbTFbMF0gPSAoKChyZWcgPDwgMSkgJiAweEZGKSB8IDB4MDEpOworCQltbTFbMV0gPSAoKHJlZyA+PiAxNikgJiAweEZGKTsKKwkJbW0xWzJdID0gKChyZWcgPj4gMjQpICYgMHhGRikgfCBmbGFnczsKKwkJbW0xWzNdID0gKChyZWcgPj4gNykgJiAweEZGKTsKKwkJbGVuID0gNDsKKwl9IGVsc2UgeworCQltbTFbMF0gPSAoKHJlZyA8PCAxKSAmIDB4RkYpOworCQltbTFbMV0gPSAoKChyZWcgPj4gMTYpICYgMHgwRikgfCAoKHJlZyA+PiAxOCkgJiAweEYwKSk7CisJCWxlbiA9IDI7CisJfQorCWRwcmludGsoMiwgIigweCUwOHgsIDB4JTAyeClcbiIsIHJlZywgZmxhZ3MpOworCXN0YXR1cyA9IGkyY19yZWFkKHN0YXRlLT5pMmMsIGFkciwgbW0xLCBsZW4sIG1tMiwgNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJaWYgKGRhdGEpCisJCSpkYXRhID0gbW0yWzBdIHwgKG1tMlsxXSA8PCA4KSB8CisJCSAgICAobW0yWzJdIDw8IDE2KSB8IChtbTJbM10gPDwgMjQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZDMyKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyIHJlZywgdTMyICpkYXRhKQoreworCXJldHVybiByZWFkMzJfZmxhZ3Moc3RhdGUsIHJlZywgZGF0YSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGUxNl9mbGFncyhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUxNiBkYXRhLCB1OCBmbGFncykKK3sKKwl1OCBhZHIgPSBzdGF0ZS0+ZGVtb2RfYWRkcmVzcywgbW1bNl0sIGxlbjsKKworCWlmIChzdGF0ZS0+c2luZ2xlX21hc3RlcikKKwkJZmxhZ3MgfD0gMHhDMDsKKwlpZiAoRFJYREFQX0ZBU0lfTE9OR19GT1JNQVQocmVnKSB8fCAoZmxhZ3MgIT0gMCkpIHsKKwkJbW1bMF0gPSAoKChyZWcgPDwgMSkgJiAweEZGKSB8IDB4MDEpOworCQltbVsxXSA9ICgocmVnID4+IDE2KSAmIDB4RkYpOworCQltbVsyXSA9ICgocmVnID4+IDI0KSAmIDB4RkYpIHwgZmxhZ3M7CisJCW1tWzNdID0gKChyZWcgPj4gNykgJiAweEZGKTsKKwkJbGVuID0gNDsKKwl9IGVsc2UgeworCQltbVswXSA9ICgocmVnIDw8IDEpICYgMHhGRik7CisJCW1tWzFdID0gKCgocmVnID4+IDE2KSAmIDB4MEYpIHwgKChyZWcgPj4gMTgpICYgMHhGMCkpOworCQlsZW4gPSAyOworCX0KKwltbVtsZW5dID0gZGF0YSAmIDB4ZmY7CisJbW1bbGVuICsgMV0gPSAoZGF0YSA+PiA4KSAmIDB4ZmY7CisKKwlkcHJpbnRrKDIsICIoMHglMDh4LCAweCUwNHgsIDB4JTAyeClcbiIsIHJlZywgZGF0YSwgZmxhZ3MpOworCXJldHVybiBpMmNfd3JpdGUoc3RhdGUtPmkyYywgYWRyLCBtbSwgbGVuICsgMik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGUxNihzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUxNiBkYXRhKQoreworCXJldHVybiB3cml0ZTE2X2ZsYWdzKHN0YXRlLCByZWcsIGRhdGEsIDApOworfQorCitzdGF0aWMgaW50IHdyaXRlMzJfZmxhZ3Moc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MzIgcmVnLCB1MzIgZGF0YSwgdTggZmxhZ3MpCit7CisJdTggYWRyID0gc3RhdGUtPmRlbW9kX2FkZHJlc3MsIG1tWzhdLCBsZW47CisKKwlpZiAoc3RhdGUtPnNpbmdsZV9tYXN0ZXIpCisJCWZsYWdzIHw9IDB4QzA7CisJaWYgKERSWERBUF9GQVNJX0xPTkdfRk9STUFUKHJlZykgfHwgKGZsYWdzICE9IDApKSB7CisJCW1tWzBdID0gKCgocmVnIDw8IDEpICYgMHhGRikgfCAweDAxKTsKKwkJbW1bMV0gPSAoKHJlZyA+PiAxNikgJiAweEZGKTsKKwkJbW1bMl0gPSAoKHJlZyA+PiAyNCkgJiAweEZGKSB8IGZsYWdzOworCQltbVszXSA9ICgocmVnID4+IDcpICYgMHhGRik7CisJCWxlbiA9IDQ7CisJfSBlbHNlIHsKKwkJbW1bMF0gPSAoKHJlZyA8PCAxKSAmIDB4RkYpOworCQltbVsxXSA9ICgoKHJlZyA+PiAxNikgJiAweDBGKSB8ICgocmVnID4+IDE4KSAmIDB4RjApKTsKKwkJbGVuID0gMjsKKwl9CisJbW1bbGVuXSA9IGRhdGEgJiAweGZmOworCW1tW2xlbiArIDFdID0gKGRhdGEgPj4gOCkgJiAweGZmOworCW1tW2xlbiArIDJdID0gKGRhdGEgPj4gMTYpICYgMHhmZjsKKwltbVtsZW4gKyAzXSA9IChkYXRhID4+IDI0KSAmIDB4ZmY7CisJZHByaW50aygyLCAiKDB4JTA4eCwgMHglMDh4LCAweCUwMngpXG4iLCByZWcsIGRhdGEsIGZsYWdzKTsKKworCXJldHVybiBpMmNfd3JpdGUoc3RhdGUtPmkyYywgYWRyLCBtbSwgbGVuICsgNCk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGUzMihzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUzMiByZWcsIHUzMiBkYXRhKQoreworCXJldHVybiB3cml0ZTMyX2ZsYWdzKHN0YXRlLCByZWcsIGRhdGEsIDApOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Jsb2NrKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyIEFkZHJlc3MsCisJCSAgICAgIGNvbnN0IGludCBCbG9ja1NpemUsIGNvbnN0IHU4IHBCbG9ja1tdKQoreworCWludCBzdGF0dXMgPSAwLCBCbGtTaXplID0gQmxvY2tTaXplOworCXU4IEZsYWdzID0gMDsKKworCWlmIChzdGF0ZS0+c2luZ2xlX21hc3RlcikKKwkJRmxhZ3MgfD0gMHhDMDsKKworCXdoaWxlIChCbGtTaXplID4gMCkgeworCQlpbnQgQ2h1bmsgPSBCbGtTaXplID4gc3RhdGUtPm1fQ2h1bmtTaXplID8KKwkJICAgIHN0YXRlLT5tX0NodW5rU2l6ZSA6IEJsa1NpemU7CisJCXU4ICpBZHJCdWYgPSAmc3RhdGUtPkNodW5rWzBdOworCQl1MzIgQWRyTGVuZ3RoID0gMDsKKworCQlpZiAoRFJYREFQX0ZBU0lfTE9OR19GT1JNQVQoQWRkcmVzcykgfHwgKEZsYWdzICE9IDApKSB7CisJCQlBZHJCdWZbMF0gPSAoKChBZGRyZXNzIDw8IDEpICYgMHhGRikgfCAweDAxKTsKKwkJCUFkckJ1ZlsxXSA9ICgoQWRkcmVzcyA+PiAxNikgJiAweEZGKTsKKwkJCUFkckJ1ZlsyXSA9ICgoQWRkcmVzcyA+PiAyNCkgJiAweEZGKTsKKwkJCUFkckJ1ZlszXSA9ICgoQWRkcmVzcyA+PiA3KSAmIDB4RkYpOworCQkJQWRyQnVmWzJdIHw9IEZsYWdzOworCQkJQWRyTGVuZ3RoID0gNDsKKwkJCWlmIChDaHVuayA9PSBzdGF0ZS0+bV9DaHVua1NpemUpCisJCQkJQ2h1bmsgLT0gMjsKKwkJfSBlbHNlIHsKKwkJCUFkckJ1ZlswXSA9ICgoQWRkcmVzcyA8PCAxKSAmIDB4RkYpOworCQkJQWRyQnVmWzFdID0gKCgoQWRkcmVzcyA+PiAxNikgJiAweDBGKSB8CisJCQkJICAgICAoKEFkZHJlc3MgPj4gMTgpICYgMHhGMCkpOworCQkJQWRyTGVuZ3RoID0gMjsKKwkJfQorCQltZW1jcHkoJnN0YXRlLT5DaHVua1tBZHJMZW5ndGhdLCBwQmxvY2ssIENodW5rKTsKKwkJZHByaW50aygyLCAiKDB4JTA4eCwgMHglMDJ4KVxuIiwgQWRkcmVzcywgRmxhZ3MpOworCQlpZiAoZGVidWcgPiAxKSB7CisJCQlpbnQgaTsKKwkJCWlmIChwQmxvY2spCisJCQkJZm9yIChpID0gMDsgaSA8IENodW5rOyBpKyspCisJCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgcEJsb2NrW2ldKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCX0KKwkJc3RhdHVzID0gaTJjX3dyaXRlKHN0YXRlLT5pMmMsIHN0YXRlLT5kZW1vZF9hZGRyZXNzLAorCQkJCSAgICZzdGF0ZS0+Q2h1bmtbMF0sIENodW5rICsgQWRyTGVuZ3RoKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogJXM6IGkyYyB3cml0ZSBlcnJvciBhdCBhZGRyIDB4JTAyeFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgQWRkcmVzcyk7CisJCQlicmVhazsKKwkJfQorCQlwQmxvY2sgKz0gQ2h1bms7CisJCUFkZHJlc3MgKz0gKENodW5rID4+IDEpOworCQlCbGtTaXplIC09IENodW5rOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWZuZGVmIERSWEtfTUFYX1JFVFJJRVNfUE9XRVJVUAorI2RlZmluZSBEUlhLX01BWF9SRVRSSUVTX1BPV0VSVVAgMjAKKyNlbmRpZgorCitpbnQgUG93ZXJVcERldmljZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1czsKKwl1OCBkYXRhID0gMDsKKwl1MTYgcmV0cnlDb3VudCA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3RhdHVzID0gaTJjX3JlYWQxKHN0YXRlLT5pMmMsIHN0YXRlLT5kZW1vZF9hZGRyZXNzLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZG8geworCQkJZGF0YSA9IDA7CisJCQlzdGF0dXMgPSBpMmNfd3JpdGUoc3RhdGUtPmkyYywgc3RhdGUtPmRlbW9kX2FkZHJlc3MsCisJCQkJCSAgICZkYXRhLCAxKTsKKwkJCW1zbGVlcCgxMCk7CisJCQlyZXRyeUNvdW50Kys7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCXN0YXR1cyA9IGkyY19yZWFkMShzdGF0ZS0+aTJjLCBzdGF0ZS0+ZGVtb2RfYWRkcmVzcywKKwkJCQkJICAgJmRhdGEpOworCQl9IHdoaWxlIChzdGF0dXMgPCAwICYmCisJCQkgKHJldHJ5Q291bnQgPCBEUlhLX01BWF9SRVRSSUVTX1BPV0VSVVApKTsKKwkJaWYgKHN0YXR1cyA8IDAgJiYgcmV0cnlDb3VudCA+PSBEUlhLX01BWF9SRVRSSUVTX1BPV0VSVVApCisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIE1ha2Ugc3VyZSBhbGwgY2xrIGRvbWFpbnMgYXJlIGFjdGl2ZSAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19DQ19QV0RfTU9ERV9fQSwgU0lPX0NDX1BXRF9NT0RFX0xFVkVMX05PTkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19DQ19VUERBVEVfX0EsIFNJT19DQ19VUERBVEVfS0VZKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBFbmFibGUgcGxsIGxvY2sgdGVzdHMgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQ0NfUExMX0xPQ0tfX0EsIDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdGUtPm1fY3VycmVudFBvd2VyTW9kZSA9IERSWF9QT1dFUl9VUDsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IGluaXRfc3RhdGUoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCS8qCisJICogRklYTUU6IG1vc3QgKGFsbD8pIG9mIHRoZSB2YWx1ZXMgYmVsbG93IHNob3VsZCBiZSBtb3ZlZCBpbnRvCisJICogc3RydWN0IGRyeGtfY29uZmlnLCBhcyB0aGV5IGFyZSBwcm9iYWJseSBib2FyZC1zcGVjaWZpYworCSAqLworCXUzMiB1bFZTQklmQWdjTW9kZSA9IERSWEtfQUdDX0NUUkxfQVVUTzsKKwl1MzIgdWxWU0JJZkFnY091dHB1dExldmVsID0gMDsKKwl1MzIgdWxWU0JJZkFnY01pbkxldmVsID0gMDsKKwl1MzIgdWxWU0JJZkFnY01heExldmVsID0gMHg3RkZGOworCXUzMiB1bFZTQklmQWdjU3BlZWQgPSAzOworCisJdTMyIHVsVlNCUmZBZ2NNb2RlID0gRFJYS19BR0NfQ1RSTF9BVVRPOworCXUzMiB1bFZTQlJmQWdjT3V0cHV0TGV2ZWwgPSAwOworCXUzMiB1bFZTQlJmQWdjTWluTGV2ZWwgPSAwOworCXUzMiB1bFZTQlJmQWdjTWF4TGV2ZWwgPSAweDdGRkY7CisJdTMyIHVsVlNCUmZBZ2NTcGVlZCA9IDM7CisJdTMyIHVsVlNCUmZBZ2NUb3AgPSA5NTAwOworCXUzMiB1bFZTQlJmQWdjQ3V0T2ZmQ3VycmVudCA9IDQwMDA7CisKKwl1MzIgdWxBVFZJZkFnY01vZGUgPSBEUlhLX0FHQ19DVFJMX0FVVE87CisJdTMyIHVsQVRWSWZBZ2NPdXRwdXRMZXZlbCA9IDA7CisJdTMyIHVsQVRWSWZBZ2NNaW5MZXZlbCA9IDA7CisJdTMyIHVsQVRWSWZBZ2NNYXhMZXZlbCA9IDA7CisJdTMyIHVsQVRWSWZBZ2NTcGVlZCA9IDM7CisKKwl1MzIgdWxBVFZSZkFnY01vZGUgPSBEUlhLX0FHQ19DVFJMX09GRjsKKwl1MzIgdWxBVFZSZkFnY091dHB1dExldmVsID0gMDsKKwl1MzIgdWxBVFZSZkFnY01pbkxldmVsID0gMDsKKwl1MzIgdWxBVFZSZkFnY01heExldmVsID0gMDsKKwl1MzIgdWxBVFZSZkFnY1RvcCA9IDk1MDA7CisJdTMyIHVsQVRWUmZBZ2NDdXRPZmZDdXJyZW50ID0gNDAwMDsKKwl1MzIgdWxBVFZSZkFnY1NwZWVkID0gMzsKKworCXUzMiB1bFF1YWw4MyA9IERFRkFVTFRfTUVSXzgzOworCXUzMiB1bFF1YWw5MyA9IERFRkFVTFRfTUVSXzkzOworCisJdTMyIHVsRFZCVFN0YXRpY1RTQ2xvY2sgPSAxOworCXUzMiB1bERWQkNTdGF0aWNUU0Nsb2NrID0gMTsKKworCXUzMiB1bE1wZWdMb2NrVGltZU91dCA9IERFRkFVTFRfRFJYS19NUEVHX0xPQ0tfVElNRU9VVDsKKwl1MzIgdWxEZW1vZExvY2tUaW1lT3V0ID0gREVGQVVMVF9EUlhLX0RFTU9EX0xPQ0tfVElNRU9VVDsKKworCS8qIGlvX3BhZF9jZmcgcmVnaXN0ZXIgKDggYml0IHJlZy4pIE1TQiBiaXQgaXMgMSAoZGVmYXVsdCB2YWx1ZSkgKi8KKwkvKiBpb19wYWRfY2ZnX21vZGUgb3V0cHV0IG1vZGUgaXMgZHJpdmUgYWx3YXlzICovCisJLyogaW9fcGFkX2NmZ19kcml2ZSBpcyBzZXQgdG8gcG93ZXIgMiAoMjMgbUEpICovCisJdTMyIHVsR1BJT0NmZyA9IDB4MDExMzsKKwl1MzIgdWxTZXJpYWxNb2RlID0gMTsKKwl1MzIgdWxJbnZlcnRUU0Nsb2NrID0gMDsKKwl1MzIgdWxUU0RhdGFTdHJlbmd0aCA9IERSWEtfTVBFR19TRVJJQUxfT1VUUFVUX1BJTl9EUklWRV9TVFJFTkdUSDsKKwl1MzIgdWxUU0Nsb2Nra1N0cmVuZ3RoID0gRFJYS19NUEVHX09VVFBVVF9DTEtfRFJJVkVfU1RSRU5HVEg7CisJdTMyIHVsRFZCVEJpdHJhdGUgPSA1MDAwMDAwMDsKKwl1MzIgdWxEVkJDQml0cmF0ZSA9IERSWEtfUUFNX1NZTUJPTFJBVEVfTUFYICogODsKKworCXUzMiB1bEluc2VydFJTQnl0ZSA9IDA7CisKKwl1MzIgdWxSZk1pcnJvciA9IDE7CisJdTMyIHVsUG93ZXJEb3duID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlzdGF0ZS0+bV9oYXNMTkEgPSBmYWxzZTsKKwlzdGF0ZS0+bV9oYXNEVkJUID0gZmFsc2U7CisJc3RhdGUtPm1faGFzRFZCQyA9IGZhbHNlOworCXN0YXRlLT5tX2hhc0FUViA9IGZhbHNlOworCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCXN0YXRlLT5tX2hhc0F1ZGlvID0gZmFsc2U7CisKKwlzdGF0ZS0+bV9DaHVua1NpemUgPSAxMjQ7CisKKwlzdGF0ZS0+bV9vc2NDbG9ja0ZyZXEgPSAwOworCXN0YXRlLT5tX3NtYXJ0QW50SW52ZXJ0ZWQgPSBmYWxzZTsKKwlzdGF0ZS0+bV9iUERvd25PcGVuQnJpZGdlID0gZmFsc2U7CisKKwkvKiByZWFsIHN5c3RlbSBjbG9jayBmcmVxdWVuY3kgaW4ga0h6ICovCisJc3RhdGUtPm1fc3lzQ2xvY2tGcmVxID0gMTUxODc1OworCS8qIFRpbWluZyBkaXYsIDI1MG5zL1BzeXMgKi8KKwkvKiBUaW1pbmcgZGl2LCA9IChkZWxheSAobmFubyBzZWNvbmRzKSAqIHN5c2NsayAoa0h6KSkvIDEwMDAgKi8KKwlzdGF0ZS0+bV9ISUNmZ1RpbWluZ0RpdiA9ICgoc3RhdGUtPm1fc3lzQ2xvY2tGcmVxIC8gMTAwMCkgKgorCQkJCSAgIEhJX0kyQ19ERUxBWSkgLyAxMDAwOworCS8qIENsaXBwaW5nICovCisJaWYgKHN0YXRlLT5tX0hJQ2ZnVGltaW5nRGl2ID4gU0lPX0hJX1JBX1JBTV9QQVJfMl9DRkdfRElWX19NKQorCQlzdGF0ZS0+bV9ISUNmZ1RpbWluZ0RpdiA9IFNJT19ISV9SQV9SQU1fUEFSXzJfQ0ZHX0RJVl9fTTsKKwlzdGF0ZS0+bV9ISUNmZ1dha2VVcEtleSA9IChzdGF0ZS0+ZGVtb2RfYWRkcmVzcyA8PCAxKTsKKwkvKiBwb3J0L2JyaWRnZS9wb3dlciBkb3duIGN0cmwgKi8KKwlzdGF0ZS0+bV9ISUNmZ0N0cmwgPSBTSU9fSElfUkFfUkFNX1BBUl81X0NGR19TTFYwX1NMQVZFOworCisJc3RhdGUtPm1fYlBvd2VyRG93biA9ICh1bFBvd2VyRG93biAhPSAwKTsKKworCXN0YXRlLT5tX0RSWEtfQTFfUEFUQ0hfQ09ERSA9IGZhbHNlOworCXN0YXRlLT5tX0RSWEtfQTFfUk9NX0NPREUgPSBmYWxzZTsKKwlzdGF0ZS0+bV9EUlhLX0EyX1JPTV9DT0RFID0gZmFsc2U7CisJc3RhdGUtPm1fRFJYS19BM19ST01fQ09ERSA9IGZhbHNlOworCXN0YXRlLT5tX0RSWEtfQTJfUEFUQ0hfQ09ERSA9IGZhbHNlOworCXN0YXRlLT5tX0RSWEtfQTNfUEFUQ0hfQ09ERSA9IGZhbHNlOworCisJLyogSW5pdCBBR0MgYW5kIFBHQSBwYXJhbWV0ZXJzICovCisJLyogVlNCIElGICovCisJc3RhdGUtPm1fdnNiSWZBZ2NDZmcuY3RybE1vZGUgPSAodWxWU0JJZkFnY01vZGUpOworCXN0YXRlLT5tX3ZzYklmQWdjQ2ZnLm91dHB1dExldmVsID0gKHVsVlNCSWZBZ2NPdXRwdXRMZXZlbCk7CisJc3RhdGUtPm1fdnNiSWZBZ2NDZmcubWluT3V0cHV0TGV2ZWwgPSAodWxWU0JJZkFnY01pbkxldmVsKTsKKwlzdGF0ZS0+bV92c2JJZkFnY0NmZy5tYXhPdXRwdXRMZXZlbCA9ICh1bFZTQklmQWdjTWF4TGV2ZWwpOworCXN0YXRlLT5tX3ZzYklmQWdjQ2ZnLnNwZWVkID0gKHVsVlNCSWZBZ2NTcGVlZCk7CisJc3RhdGUtPm1fdnNiUGdhQ2ZnID0gMTQwOworCisJLyogVlNCIFJGICovCisJc3RhdGUtPm1fdnNiUmZBZ2NDZmcuY3RybE1vZGUgPSAodWxWU0JSZkFnY01vZGUpOworCXN0YXRlLT5tX3ZzYlJmQWdjQ2ZnLm91dHB1dExldmVsID0gKHVsVlNCUmZBZ2NPdXRwdXRMZXZlbCk7CisJc3RhdGUtPm1fdnNiUmZBZ2NDZmcubWluT3V0cHV0TGV2ZWwgPSAodWxWU0JSZkFnY01pbkxldmVsKTsKKwlzdGF0ZS0+bV92c2JSZkFnY0NmZy5tYXhPdXRwdXRMZXZlbCA9ICh1bFZTQlJmQWdjTWF4TGV2ZWwpOworCXN0YXRlLT5tX3ZzYlJmQWdjQ2ZnLnNwZWVkID0gKHVsVlNCUmZBZ2NTcGVlZCk7CisJc3RhdGUtPm1fdnNiUmZBZ2NDZmcudG9wID0gKHVsVlNCUmZBZ2NUb3ApOworCXN0YXRlLT5tX3ZzYlJmQWdjQ2ZnLmN1dE9mZkN1cnJlbnQgPSAodWxWU0JSZkFnY0N1dE9mZkN1cnJlbnQpOworCXN0YXRlLT5tX3ZzYlByZVNhd0NmZy5yZWZlcmVuY2UgPSAweDA3OworCXN0YXRlLT5tX3ZzYlByZVNhd0NmZy51c2VQcmVTYXcgPSB0cnVlOworCisJc3RhdGUtPm1fUXVhbGl0eTgzcGVyY2VudCA9IERFRkFVTFRfTUVSXzgzOworCXN0YXRlLT5tX1F1YWxpdHk5M3BlcmNlbnQgPSBERUZBVUxUX01FUl85MzsKKwlpZiAodWxRdWFsOTMgPD0gNTAwICYmIHVsUXVhbDgzIDwgdWxRdWFsOTMpIHsKKwkJc3RhdGUtPm1fUXVhbGl0eTgzcGVyY2VudCA9IHVsUXVhbDgzOworCQlzdGF0ZS0+bV9RdWFsaXR5OTNwZXJjZW50ID0gdWxRdWFsOTM7CisJfQorCisJLyogQVRWIElGICovCisJc3RhdGUtPm1fYXR2SWZBZ2NDZmcuY3RybE1vZGUgPSAodWxBVFZJZkFnY01vZGUpOworCXN0YXRlLT5tX2F0dklmQWdjQ2ZnLm91dHB1dExldmVsID0gKHVsQVRWSWZBZ2NPdXRwdXRMZXZlbCk7CisJc3RhdGUtPm1fYXR2SWZBZ2NDZmcubWluT3V0cHV0TGV2ZWwgPSAodWxBVFZJZkFnY01pbkxldmVsKTsKKwlzdGF0ZS0+bV9hdHZJZkFnY0NmZy5tYXhPdXRwdXRMZXZlbCA9ICh1bEFUVklmQWdjTWF4TGV2ZWwpOworCXN0YXRlLT5tX2F0dklmQWdjQ2ZnLnNwZWVkID0gKHVsQVRWSWZBZ2NTcGVlZCk7CisKKwkvKiBBVFYgUkYgKi8KKwlzdGF0ZS0+bV9hdHZSZkFnY0NmZy5jdHJsTW9kZSA9ICh1bEFUVlJmQWdjTW9kZSk7CisJc3RhdGUtPm1fYXR2UmZBZ2NDZmcub3V0cHV0TGV2ZWwgPSAodWxBVFZSZkFnY091dHB1dExldmVsKTsKKwlzdGF0ZS0+bV9hdHZSZkFnY0NmZy5taW5PdXRwdXRMZXZlbCA9ICh1bEFUVlJmQWdjTWluTGV2ZWwpOworCXN0YXRlLT5tX2F0dlJmQWdjQ2ZnLm1heE91dHB1dExldmVsID0gKHVsQVRWUmZBZ2NNYXhMZXZlbCk7CisJc3RhdGUtPm1fYXR2UmZBZ2NDZmcuc3BlZWQgPSAodWxBVFZSZkFnY1NwZWVkKTsKKwlzdGF0ZS0+bV9hdHZSZkFnY0NmZy50b3AgPSAodWxBVFZSZkFnY1RvcCk7CisJc3RhdGUtPm1fYXR2UmZBZ2NDZmcuY3V0T2ZmQ3VycmVudCA9ICh1bEFUVlJmQWdjQ3V0T2ZmQ3VycmVudCk7CisJc3RhdGUtPm1fYXR2UHJlU2F3Q2ZnLnJlZmVyZW5jZSA9IDB4MDQ7CisJc3RhdGUtPm1fYXR2UHJlU2F3Q2ZnLnVzZVByZVNhdyA9IHRydWU7CisKKworCS8qIERWQlQgUkYgKi8KKwlzdGF0ZS0+bV9kdmJ0UmZBZ2NDZmcuY3RybE1vZGUgPSBEUlhLX0FHQ19DVFJMX09GRjsKKwlzdGF0ZS0+bV9kdmJ0UmZBZ2NDZmcub3V0cHV0TGV2ZWwgPSAwOworCXN0YXRlLT5tX2R2YnRSZkFnY0NmZy5taW5PdXRwdXRMZXZlbCA9IDA7CisJc3RhdGUtPm1fZHZidFJmQWdjQ2ZnLm1heE91dHB1dExldmVsID0gMHhGRkZGOworCXN0YXRlLT5tX2R2YnRSZkFnY0NmZy50b3AgPSAweDIxMDA7CisJc3RhdGUtPm1fZHZidFJmQWdjQ2ZnLmN1dE9mZkN1cnJlbnQgPSA0MDAwOworCXN0YXRlLT5tX2R2YnRSZkFnY0NmZy5zcGVlZCA9IDE7CisKKworCS8qIERWQlQgSUYgKi8KKwlzdGF0ZS0+bV9kdmJ0SWZBZ2NDZmcuY3RybE1vZGUgPSBEUlhLX0FHQ19DVFJMX0FVVE87CisJc3RhdGUtPm1fZHZidElmQWdjQ2ZnLm91dHB1dExldmVsID0gMDsKKwlzdGF0ZS0+bV9kdmJ0SWZBZ2NDZmcubWluT3V0cHV0TGV2ZWwgPSAwOworCXN0YXRlLT5tX2R2YnRJZkFnY0NmZy5tYXhPdXRwdXRMZXZlbCA9IDkwMDA7CisJc3RhdGUtPm1fZHZidElmQWdjQ2ZnLnRvcCA9IDEzNDI0OworCXN0YXRlLT5tX2R2YnRJZkFnY0NmZy5jdXRPZmZDdXJyZW50ID0gMDsKKwlzdGF0ZS0+bV9kdmJ0SWZBZ2NDZmcuc3BlZWQgPSAzOworCXN0YXRlLT5tX2R2YnRJZkFnY0NmZy5GYXN0Q2xpcEN0cmxEZWxheSA9IDMwOworCXN0YXRlLT5tX2R2YnRJZkFnY0NmZy5JbmdhaW5UZ3RNYXggPSAzMDAwMDsKKwkvKiBzdGF0ZS0+bV9kdmJ0UGdhQ2ZnID0gMTQwOyAqLworCisJc3RhdGUtPm1fZHZidFByZVNhd0NmZy5yZWZlcmVuY2UgPSA0OworCXN0YXRlLT5tX2R2YnRQcmVTYXdDZmcudXNlUHJlU2F3ID0gZmFsc2U7CisKKwkvKiBRQU0gUkYgKi8KKwlzdGF0ZS0+bV9xYW1SZkFnY0NmZy5jdHJsTW9kZSA9IERSWEtfQUdDX0NUUkxfT0ZGOworCXN0YXRlLT5tX3FhbVJmQWdjQ2ZnLm91dHB1dExldmVsID0gMDsKKwlzdGF0ZS0+bV9xYW1SZkFnY0NmZy5taW5PdXRwdXRMZXZlbCA9IDYwMjM7CisJc3RhdGUtPm1fcWFtUmZBZ2NDZmcubWF4T3V0cHV0TGV2ZWwgPSAyNzAwMDsKKwlzdGF0ZS0+bV9xYW1SZkFnY0NmZy50b3AgPSAweDIzODA7CisJc3RhdGUtPm1fcWFtUmZBZ2NDZmcuY3V0T2ZmQ3VycmVudCA9IDQwMDA7CisJc3RhdGUtPm1fcWFtUmZBZ2NDZmcuc3BlZWQgPSAzOworCisJLyogUUFNIElGICovCisJc3RhdGUtPm1fcWFtSWZBZ2NDZmcuY3RybE1vZGUgPSBEUlhLX0FHQ19DVFJMX0FVVE87CisJc3RhdGUtPm1fcWFtSWZBZ2NDZmcub3V0cHV0TGV2ZWwgPSAwOworCXN0YXRlLT5tX3FhbUlmQWdjQ2ZnLm1pbk91dHB1dExldmVsID0gMDsKKwlzdGF0ZS0+bV9xYW1JZkFnY0NmZy5tYXhPdXRwdXRMZXZlbCA9IDkwMDA7CisJc3RhdGUtPm1fcWFtSWZBZ2NDZmcudG9wID0gMHgwNTExOworCXN0YXRlLT5tX3FhbUlmQWdjQ2ZnLmN1dE9mZkN1cnJlbnQgPSAwOworCXN0YXRlLT5tX3FhbUlmQWdjQ2ZnLnNwZWVkID0gMzsKKwlzdGF0ZS0+bV9xYW1JZkFnY0NmZy5JbmdhaW5UZ3RNYXggPSA1MTE5OworCXN0YXRlLT5tX3FhbUlmQWdjQ2ZnLkZhc3RDbGlwQ3RybERlbGF5ID0gNTA7CisKKwlzdGF0ZS0+bV9xYW1QZ2FDZmcgPSAxNDA7CisJc3RhdGUtPm1fcWFtUHJlU2F3Q2ZnLnJlZmVyZW5jZSA9IDQ7CisJc3RhdGUtPm1fcWFtUHJlU2F3Q2ZnLnVzZVByZVNhdyA9IGZhbHNlOworCisJc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSA9IE9NX05PTkU7CisJc3RhdGUtPm1fRHJ4a1N0YXRlID0gRFJYS19VTklOSVRJQUxJWkVEOworCisJLyogTVBFRyBvdXRwdXQgY29uZmlndXJhdGlvbiAqLworCXN0YXRlLT5tX2VuYWJsZU1QRUdPdXRwdXQgPSB0cnVlOwkvKiBJZiBUUlVFOyBlbmFibGUgTVBFRyBvdXB1dCAqLworCXN0YXRlLT5tX2luc2VydFJTQnl0ZSA9IGZhbHNlOwkvKiBJZiBUUlVFOyBpbnNlcnQgUlMgYnl0ZSAqLworCXN0YXRlLT5tX2VuYWJsZVBhcmFsbGVsID0gdHJ1ZTsJLyogSWYgVFJVRTsKKwkJCQkJICAgcGFyYWxsZWwgb3V0IG90aGVyd2lzZSBzZXJpYWwgKi8KKwlzdGF0ZS0+bV9pbnZlcnREQVRBID0gZmFsc2U7CS8qIElmIFRSVUU7IGludmVydCBEQVRBIHNpZ25hbHMgKi8KKwlzdGF0ZS0+bV9pbnZlcnRFUlIgPSBmYWxzZTsJLyogSWYgVFJVRTsgaW52ZXJ0IEVSUiBzaWduYWwgKi8KKwlzdGF0ZS0+bV9pbnZlcnRTVFIgPSBmYWxzZTsJLyogSWYgVFJVRTsgaW52ZXJ0IFNUUiBzaWduYWxzICovCisJc3RhdGUtPm1faW52ZXJ0VkFMID0gZmFsc2U7CS8qIElmIFRSVUU7IGludmVydCBWQUwgc2lnbmFscyAqLworCXN0YXRlLT5tX2ludmVydENMSyA9ICh1bEludmVydFRTQ2xvY2sgIT0gMCk7CS8qIElmIFRSVUU7IGludmVydCBDTEsgc2lnbmFscyAqLworCXN0YXRlLT5tX0RWQlRTdGF0aWNDTEsgPSAodWxEVkJUU3RhdGljVFNDbG9jayAhPSAwKTsKKwlzdGF0ZS0+bV9EVkJDU3RhdGljQ0xLID0gKHVsRFZCQ1N0YXRpY1RTQ2xvY2sgIT0gMCk7CisJLyogSWYgVFJVRTsgc3RhdGljIE1QRUcgY2xvY2tyYXRlIHdpbGwgYmUgdXNlZDsKKwkgICBvdGhlcndpc2UgY2xvY2tyYXRlIHdpbGwgYWRhcHQgdG8gdGhlIGJpdHJhdGUgb2YgdGhlIFRTICovCisKKwlzdGF0ZS0+bV9EVkJUQml0cmF0ZSA9IHVsRFZCVEJpdHJhdGU7CisJc3RhdGUtPm1fRFZCQ0JpdHJhdGUgPSB1bERWQkNCaXRyYXRlOworCisJc3RhdGUtPm1fVFNEYXRhU3RyZW5ndGggPSAodWxUU0RhdGFTdHJlbmd0aCAmIDB4MDcpOworCXN0YXRlLT5tX1RTQ2xvY2trU3RyZW5ndGggPSAodWxUU0Nsb2Nra1N0cmVuZ3RoICYgMHgwNyk7CisKKwkvKiBNYXhpbXVtIGJpdHJhdGUgaW4gYi9zIGluIGNhc2Ugc3RhdGljIGNsb2NrcmF0ZSBpcyBzZWxlY3RlZCAqLworCXN0YXRlLT5tX21wZWdUc1N0YXRpY0JpdHJhdGUgPSAxOTM5MjY1ODsKKwlzdGF0ZS0+bV9kaXNhYmxlVEVJaGFuZGxpbmcgPSBmYWxzZTsKKworCWlmICh1bEluc2VydFJTQnl0ZSkKKwkJc3RhdGUtPm1faW5zZXJ0UlNCeXRlID0gdHJ1ZTsKKworCXN0YXRlLT5tX01wZWdMb2NrVGltZU91dCA9IERFRkFVTFRfRFJYS19NUEVHX0xPQ0tfVElNRU9VVDsKKwlpZiAodWxNcGVnTG9ja1RpbWVPdXQgPCAxMDAwMCkKKwkJc3RhdGUtPm1fTXBlZ0xvY2tUaW1lT3V0ID0gdWxNcGVnTG9ja1RpbWVPdXQ7CisJc3RhdGUtPm1fRGVtb2RMb2NrVGltZU91dCA9IERFRkFVTFRfRFJYS19ERU1PRF9MT0NLX1RJTUVPVVQ7CisJaWYgKHVsRGVtb2RMb2NrVGltZU91dCA8IDEwMDAwKQorCQlzdGF0ZS0+bV9EZW1vZExvY2tUaW1lT3V0ID0gdWxEZW1vZExvY2tUaW1lT3V0OworCisJLyogUUFNIGRlZmF1bHRzICovCisJc3RhdGUtPm1fQ29uc3RlbGxhdGlvbiA9IERSWF9DT05TVEVMTEFUSU9OX0FVVE87CisJc3RhdGUtPm1fcWFtSW50ZXJsZWF2ZU1vZGUgPSBEUlhLX1FBTV9JMTJfSjE3OworCXN0YXRlLT5tX2ZlY1JzUGxlbiA9IDIwNCAqIDg7CS8qIGZlY1JzUGxlbiAgYW5uZXggQSAqLworCXN0YXRlLT5tX2ZlY1JzUHJlc2NhbGUgPSAxOworCisJc3RhdGUtPm1fc3FpU3BlZWQgPSBEUlhLX0RWQlRfU1FJX1NQRUVEX01FRElVTTsKKwlzdGF0ZS0+bV9hZ2NGYXN0Q2xpcEN0cmxEZWxheSA9IDA7CisKKwlzdGF0ZS0+bV9HUElPQ2ZnID0gKHVsR1BJT0NmZyk7CisKKwlzdGF0ZS0+bV9iUG93ZXJEb3duID0gZmFsc2U7CisJc3RhdGUtPm1fY3VycmVudFBvd2VyTW9kZSA9IERSWF9QT1dFUl9ET1dOOworCisJc3RhdGUtPm1fZW5hYmxlUGFyYWxsZWwgPSAodWxTZXJpYWxNb2RlID09IDApOworCisJc3RhdGUtPm1fcmZtaXJyb3IgPSAodWxSZk1pcnJvciA9PSAwKTsKKwlzdGF0ZS0+bV9JZkFnY1BvbCA9IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IERSWFhfT3BlbihzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGp0YWcgPSAwOworCXUxNiBiaWQgPSAwOworCXUxNiBrZXkgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKwkvKiBzdG9wIGxvY2sgaW5kaWNhdG9yIHByb2Nlc3MgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0dQSU9fX0EsIFNDVV9SQU1fR1BJT19IV19MT0NLX0lORF9ESVNBQkxFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBDaGVjayBkZXZpY2UgaWQgKi8KKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNJT19UT1BfQ09NTV9LRVlfX0EsICZrZXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19UT1BfQ09NTV9LRVlfX0EsIFNJT19UT1BfQ09NTV9LRVlfS0VZKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSByZWFkMzIoc3RhdGUsIFNJT19UT1BfSlRBR0lEX0xPX19BLCAmanRhZyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTSU9fUERSX1VJT19JTl9ISV9fQSwgJmJpZCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1RPUF9DT01NX0tFWV9fQSwga2V5KTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IEdldERldmljZUNhcGFiaWxpdGllcyhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJdTE2IHNpb1Bkck9od0NmZyA9IDA7CisJdTMyIHNpb1RvcEp0YWdpZExvID0gMDsKKwlpbnQgc3RhdHVzOworCWNvbnN0IGNoYXIgKnNwaW4gPSAiIjsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwkvKiBkcml2ZXIgMC45LjAgKi8KKwkvKiBzdG9wIGxvY2sgaW5kaWNhdG9yIHByb2Nlc3MgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0dQSU9fX0EsIFNDVV9SQU1fR1BJT19IV19MT0NLX0lORF9ESVNBQkxFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fVE9QX0NPTU1fS0VZX19BLCAweEZBQkEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0lPX1BEUl9PSFdfQ0ZHX19BLCAmc2lvUGRyT2h3Q2ZnKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fVE9QX0NPTU1fS0VZX19BLCAweDAwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3dpdGNoICgoc2lvUGRyT2h3Q2ZnICYgU0lPX1BEUl9PSFdfQ0ZHX0ZSRUZfU0VMX19NKSkgeworCWNhc2UgMDoKKwkJLyogaWdub3JlIChieXBhc3MgPykgKi8KKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiAyNyBNSHogKi8KKwkJc3RhdGUtPm1fb3NjQ2xvY2tGcmVxID0gMjcwMDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogMjAuMjUgTUh6ICovCisJCXN0YXRlLT5tX29zY0Nsb2NrRnJlcSA9IDIwMjUwOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIDQgTUh6ICovCisJCXN0YXRlLT5tX29zY0Nsb2NrRnJlcSA9IDIwMjUwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IENsb2NrIEZyZXF1ZW5jeSBpcyB1bmtvbnduXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qCisJCURldGVybWluZSBkZXZpY2UgY2FwYWJpbGl0aWVzCisJCUJhc2VkIG9uIHBpbm5pbmcgdjE0CisJCSovCisJc3RhdHVzID0gcmVhZDMyKHN0YXRlLCBTSU9fVE9QX0pUQUdJRF9MT19fQSwgJnNpb1RvcEp0YWdpZExvKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBkcml2ZXIgMC45LjAgKi8KKwlzd2l0Y2ggKChzaW9Ub3BKdGFnaWRMbyA+PiAyOSkgJiAweEYpIHsKKwljYXNlIDA6CisJCXN0YXRlLT5tX2RldmljZVNwaW4gPSBEUlhLX1NQSU5fQTE7CisJCXNwaW4gPSAiQTEiOworCQlicmVhazsKKwljYXNlIDI6CisJCXN0YXRlLT5tX2RldmljZVNwaW4gPSBEUlhLX1NQSU5fQTI7CisJCXNwaW4gPSAiQTIiOworCQlicmVhazsKKwljYXNlIDM6CisJCXN0YXRlLT5tX2RldmljZVNwaW4gPSBEUlhLX1NQSU5fQTM7CisJCXNwaW4gPSAiQTMiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0ZS0+bV9kZXZpY2VTcGluID0gRFJYS19TUElOX1VOS05PV047CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogU3BpbiB1bmtub3duXG4iKTsKKwkJZ290byBlcnJvcjI7CisJfQorCXN3aXRjaCAoKHNpb1RvcEp0YWdpZExvID4+IDEyKSAmIDB4RkYpIHsKKwljYXNlIDB4MTM6CisJCS8qIHR5cGVJZCA9IERSWDM5MTNLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzQXVkaW8gPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzRFZCVCA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQkMgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNTQVdTVyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8yID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc0lSUU4gPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQkvKiB0eXBlSWQgPSBEUlgzOTE1S19UWVBFX0lEICovCisJCXN0YXRlLT5tX2hhc0xOQSA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNPT0IgPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzQVRWID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzQXVkaW8gPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzRFZCVCA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQkMgPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzU0FXU1cgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMiA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzSVJRTiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4MTY6CisJCS8qIHR5cGVJZCA9IERSWDM5MTZLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNBdWRpbyA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNEVkJUID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzRFZCQyA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNTQVdTVyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8yID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzR1BJTzEgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNJUlFOID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgMHgxODoKKwkJLyogdHlwZUlkID0gRFJYMzkxOEtfVFlQRV9JRCAqLworCQlzdGF0ZS0+bV9oYXNMTkEgPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzT09CID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc0FUViA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0F1ZGlvID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzRFZCVCA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQkMgPSBmYWxzZTsKKwkJc3RhdGUtPm1faGFzU0FXU1cgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMiA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzSVJRTiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4MjE6CisJCS8qIHR5cGVJZCA9IERSWDM5MjFLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNBdWRpbyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQlQgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNEVkJDID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzU0FXU1cgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMiA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzSVJRTiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4MjM6CisJCS8qIHR5cGVJZCA9IERSWDM5MjNLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNBdWRpbyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQlQgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNEVkJDID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzU0FXU1cgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMiA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzSVJRTiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4MjU6CisJCS8qIHR5cGVJZCA9IERSWDM5MjVLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNBdWRpbyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0RWQlQgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNEVkJDID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzU0FXU1cgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMiA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0dQSU8xID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzSVJRTiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDB4MjY6CisJCS8qIHR5cGVJZCA9IERSWDM5MjZLX1RZUEVfSUQgKi8KKwkJc3RhdGUtPm1faGFzTE5BID0gZmFsc2U7CisJCXN0YXRlLT5tX2hhc09PQiA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNBVFYgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNBdWRpbyA9IGZhbHNlOworCQlzdGF0ZS0+bV9oYXNEVkJUID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzRFZCQyA9IHRydWU7CisJCXN0YXRlLT5tX2hhc1NBV1NXID0gdHJ1ZTsKKwkJc3RhdGUtPm1faGFzR1BJTzIgPSB0cnVlOworCQlzdGF0ZS0+bV9oYXNHUElPMSA9IHRydWU7CisJCXN0YXRlLT5tX2hhc0lSUU4gPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBEZXZpY2VJRCAweCUwMnggbm90IHN1cHBvcnRlZFxuIiwKKwkJCSgoc2lvVG9wSnRhZ2lkTG8gPj4gMTIpICYgMHhGRikpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJkcnhrOiBkZXRlY3RlZCBhIGRyeC0zOSUwMnhrLCBzcGluICVzLCB4dGFsICVkLiUwM2QgTUh6XG4iLAorCSAgICAgICAoKHNpb1RvcEp0YWdpZExvID4+IDEyKSAmIDB4RkYpLCBzcGluLAorCSAgICAgICBzdGF0ZS0+bV9vc2NDbG9ja0ZyZXEgLyAxMDAwLAorCSAgICAgICBzdGF0ZS0+bV9vc2NDbG9ja0ZyZXEgJSAxMDAwKTsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCitlcnJvcjI6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBISV9Db21tYW5kKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTE2IGNtZCwgdTE2ICpwUmVzdWx0KQoreworCWludCBzdGF0dXM7CisJYm9vbCBwb3dlcmRvd25fY21kOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIFdyaXRlIGNvbW1hbmQgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fSElfUkFfUkFNX0NNRF9fQSwgY21kKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoY21kID09IFNJT19ISV9SQV9SQU1fQ01EX1JFU0VUKQorCQltc2xlZXAoMSk7CisKKwlwb3dlcmRvd25fY21kID0KKwkgICAgKGJvb2wpICgoY21kID09IFNJT19ISV9SQV9SQU1fQ01EX0NPTkZJRykgJiYKKwkJICAgICgoc3RhdGUtPm1fSElDZmdDdHJsKSAmCisJCSAgICAgU0lPX0hJX1JBX1JBTV9QQVJfNV9DRkdfU0xFRVBfX00pID09CisJCSAgICBTSU9fSElfUkFfUkFNX1BBUl81X0NGR19TTEVFUF9aWlopOworCWlmIChwb3dlcmRvd25fY21kID09IGZhbHNlKSB7CisJCS8qIFdhaXQgdW50aWwgY29tbWFuZCByZHkgKi8KKwkJdTMyIHJldHJ5Q291bnQgPSAwOworCQl1MTYgd2FpdENtZDsKKworCQlkbyB7CisJCQltc2xlZXAoMSk7CisJCQlyZXRyeUNvdW50ICs9IDE7CisJCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNJT19ISV9SQV9SQU1fQ01EX19BLAorCQkJCQkgICZ3YWl0Q21kKTsKKwkJfSB3aGlsZSAoKHN0YXR1cyA8IDApICYmIChyZXRyeUNvdW50IDwgRFJYS19NQVhfUkVUUklFUykKKwkJCSAmJiAod2FpdENtZCAhPSAwKSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTSU9fSElfUkFfUkFNX1JFU19fQSwgcFJlc3VsdCk7CisJfQorZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBISV9DZmdDb21tYW5kKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiXG4iKTsKKworCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fSElfUkFfUkFNX1BBUl82X19BLCBzdGF0ZS0+bV9ISUNmZ1RpbWVvdXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19ISV9SQV9SQU1fUEFSXzVfX0EsIHN0YXRlLT5tX0hJQ2ZnQ3RybCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0hJX1JBX1JBTV9QQVJfNF9fQSwgc3RhdGUtPm1fSElDZmdXYWtlVXBLZXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19ISV9SQV9SQU1fUEFSXzNfX0EsIHN0YXRlLT5tX0hJQ2ZnQnJpZGdlRGVsYXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19ISV9SQV9SQU1fUEFSXzJfX0EsIHN0YXRlLT5tX0hJQ2ZnVGltaW5nRGl2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fSElfUkFfUkFNX1BBUl8xX19BLCBTSU9fSElfUkFfUkFNX1BBUl8xX1BBUjFfU0VDX0tFWSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gSElfQ29tbWFuZChzdGF0ZSwgU0lPX0hJX1JBX1JBTV9DTURfQ09ORklHLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXRlLT5tX0hJQ2ZnQ3RybCAmPSB+U0lPX0hJX1JBX1JBTV9QQVJfNV9DRkdfU0xFRVBfWlpaOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IEluaXRISShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJZHByaW50aygxLCAiXG4iKTsKKworCXN0YXRlLT5tX0hJQ2ZnV2FrZVVwS2V5ID0gKHN0YXRlLT5kZW1vZF9hZGRyZXNzIDw8IDEpOworCXN0YXRlLT5tX0hJQ2ZnVGltZW91dCA9IDB4OTZGRjsKKwkvKiBwb3J0L2JyaWRnZS9wb3dlciBkb3duIGN0cmwgKi8KKwlzdGF0ZS0+bV9ISUNmZ0N0cmwgPSBTSU9fSElfUkFfUkFNX1BBUl81X0NGR19TTFYwX1NMQVZFOworCisJcmV0dXJuIEhJX0NmZ0NvbW1hbmQoc3RhdGUpOworfQorCitzdGF0aWMgaW50IE1QRUdUU0NvbmZpZ3VyZVBpbnMoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCBib29sIG1wZWdFbmFibGUpCit7CisJaW50IHN0YXR1cyA9IC0xOworCXUxNiBzaW9QZHJNY2xrQ2ZnID0gMDsKKwl1MTYgc2lvUGRyTWR4Q2ZnID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwkvKiBzdG9wIGxvY2sgaW5kaWNhdG9yIHByb2Nlc3MgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0dQSU9fX0EsIFNDVV9SQU1fR1BJT19IV19MT0NLX0lORF9ESVNBQkxFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qICBNUEVHIFRTIHBhZCBjb25maWd1cmF0aW9uICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1RPUF9DT01NX0tFWV9fQSwgMHhGQUJBKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChtcGVnRW5hYmxlID09IGZhbHNlKSB7CisJCS8qICBTZXQgTVBFRyBUUyBwYWRzIHRvIGlucHV0bW9kZSAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01TVFJUX0NGR19fQSwgMHgwMDAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01FUlJfQ0ZHX19BLCAweDAwMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUNMS19DRkdfX0EsIDB4MDAwMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NVkFMX0NGR19fQSwgMHgwMDAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01EMF9DRkdfX0EsIDB4MDAwMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDFfQ0ZHX19BLCAweDAwMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQyX0NGR19fQSwgMHgwMDAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01EM19DRkdfX0EsIDB4MDAwMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDRfQ0ZHX19BLCAweDAwMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQ1X0NGR19fQSwgMHgwMDAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01ENl9DRkdfX0EsIDB4MDAwMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDdfQ0ZHX19BLCAweDAwMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIE1QRUcgb3V0cHV0ICovCisJCXNpb1Bkck1keENmZyA9CisJCQkoKHN0YXRlLT5tX1RTRGF0YVN0cmVuZ3RoIDw8CisJCQlTSU9fUERSX01EMF9DRkdfRFJJVkVfX0IpIHwgMHgwMDAzKTsKKwkJc2lvUGRyTWNsa0NmZyA9ICgoc3RhdGUtPm1fVFNDbG9ja2tTdHJlbmd0aCA8PAorCQkJCQlTSU9fUERSX01DTEtfQ0ZHX0RSSVZFX19CKSB8CisJCQkJCTB4MDAwMyk7CisKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NU1RSVF9DRkdfX0EsIHNpb1Bkck1keENmZyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRVJSX0NGR19fQSwgMHgwMDAwKTsJLyogRGlzYWJsZSAqLworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTVZBTF9DRkdfX0EsIDB4MDAwMCk7CS8qIERpc2FibGUgKi8KKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlpZiAoc3RhdGUtPm1fZW5hYmxlUGFyYWxsZWwgPT0gdHJ1ZSkgeworCQkJLyogcGFyYWxlbCAtPiBlbmFibGUgTUQxIHRvIE1ENyAqLworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDFfQ0ZHX19BLCBzaW9QZHJNZHhDZmcpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQyX0NGR19fQSwgc2lvUGRyTWR4Q2ZnKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01EM19DRkdfX0EsIHNpb1Bkck1keENmZyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDRfQ0ZHX19BLCBzaW9QZHJNZHhDZmcpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQ1X0NGR19fQSwgc2lvUGRyTWR4Q2ZnKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01ENl9DRkdfX0EsIHNpb1Bkck1keENmZyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDdfQ0ZHX19BLCBzaW9QZHJNZHhDZmcpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJfSBlbHNlIHsKKwkJCXNpb1Bkck1keENmZyA9ICgoc3RhdGUtPm1fVFNEYXRhU3RyZW5ndGggPDwKKwkJCQkJCVNJT19QRFJfTUQwX0NGR19EUklWRV9fQikKKwkJCQkJfCAweDAwMDMpOworCQkJLyogc2VyaWFsIC0+IGRpc2FibGUgTUQxIHRvIE1ENyAqLworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDFfQ0ZHX19BLCAweDAwMDApOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQyX0NGR19fQSwgMHgwMDAwKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01EM19DRkdfX0EsIDB4MDAwMCk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDRfQ0ZHX19BLCAweDAwMDApOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTUQ1X0NGR19fQSwgMHgwMDAwKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01ENl9DRkdfX0EsIDB4MDAwMCk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9NRDdfQ0ZHX19BLCAweDAwMDApOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJfQorCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01DTEtfQ0ZHX19BLCBzaW9QZHJNY2xrQ2ZnKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX01EMF9DRkdfX0EsIHNpb1Bkck1keENmZyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisJLyogIEVuYWJsZSBNQiBvdXRwdXQgb3ZlciBNUEVHIHBhZHMgYW5kIGN0bCBpbnB1dCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfTU9OX0NGR19fQSwgMHgwMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiAgV3JpdGUgbm9tYWdpYyB3b3JkIHRvIGVuYWJsZSBwZHIgcmVnIHdyaXRlICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1RPUF9DT01NX0tFWV9fQSwgMHgwMDAwKTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IE1QRUdUU0Rpc2FibGUoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWRwcmludGsoMSwgIlxuIik7CisKKwlyZXR1cm4gTVBFR1RTQ29uZmlndXJlUGlucyhzdGF0ZSwgZmFsc2UpOworfQorCitzdGF0aWMgaW50IEJMQ2hhaW5DbWQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkgICAgICB1MTYgcm9tT2Zmc2V0LCB1MTYgbnJPZkVsZW1lbnRzLCB1MzIgdGltZU91dCkKK3sKKwl1MTYgYmxTdGF0dXMgPSAwOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0JMX01PREVfX0EsIFNJT19CTF9NT0RFX0NIQUlOKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQkxfQ0hBSU5fQUREUl9fQSwgcm9tT2Zmc2V0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQkxfQ0hBSU5fTEVOX19BLCBuck9mRWxlbWVudHMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19CTF9FTkFCTEVfX0EsIFNJT19CTF9FTkFCTEVfT04pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJZW5kID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZU91dCk7CisJZG8geworCQltc2xlZXAoMSk7CisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0lPX0JMX1NUQVRVU19fQSwgJmJsU3RhdHVzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCX0gd2hpbGUgKChibFN0YXR1cyA9PSAweDEpICYmCisJCQkoKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhlbmQpKSkpOworCisJaWYgKGJsU3RhdHVzID09IDB4MSkgeworCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IFNJTyBub3QgcmVhZHlcbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yMjsKKwl9CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CitlcnJvcjI6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCBEb3dubG9hZE1pY3JvY29kZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNvbnN0IHU4IHBNQ0ltYWdlW10sIHUzMiBMZW5ndGgpCit7CisJY29uc3QgdTggKnBTcmMgPSBwTUNJbWFnZTsKKwl1MTYgRmxhZ3M7CisJdTE2IERyYWluOworCXUzMiBBZGRyZXNzOworCXUxNiBuQmxvY2tzOworCXUxNiBCbG9ja1NpemU7CisJdTE2IEJsb2NrQ1JDOworCXUzMiBvZmZzZXQgPSAwOworCXUzMiBpOworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIGRvd24gdGhlIGRyYWluICh3ZSBkb24gY2FyZSBhYm91dCBNQUdJQ19XT1JEKSAqLworCURyYWluID0gKHBTcmNbMF0gPDwgOCkgfCBwU3JjWzFdOworCXBTcmMgKz0gc2l6ZW9mKHUxNik7CisJb2Zmc2V0ICs9IHNpemVvZih1MTYpOworCW5CbG9ja3MgPSAocFNyY1swXSA8PCA4KSB8IHBTcmNbMV07CisJcFNyYyArPSBzaXplb2YodTE2KTsKKwlvZmZzZXQgKz0gc2l6ZW9mKHUxNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbkJsb2NrczsgaSArPSAxKSB7CisJCUFkZHJlc3MgPSAocFNyY1swXSA8PCAyNCkgfCAocFNyY1sxXSA8PCAxNikgfAorCQkgICAgKHBTcmNbMl0gPDwgOCkgfCBwU3JjWzNdOworCQlwU3JjICs9IHNpemVvZih1MzIpOworCQlvZmZzZXQgKz0gc2l6ZW9mKHUzMik7CisKKwkJQmxvY2tTaXplID0gKChwU3JjWzBdIDw8IDgpIHwgcFNyY1sxXSkgKiBzaXplb2YodTE2KTsKKwkJcFNyYyArPSBzaXplb2YodTE2KTsKKwkJb2Zmc2V0ICs9IHNpemVvZih1MTYpOworCisJCUZsYWdzID0gKHBTcmNbMF0gPDwgOCkgfCBwU3JjWzFdOworCQlwU3JjICs9IHNpemVvZih1MTYpOworCQlvZmZzZXQgKz0gc2l6ZW9mKHUxNik7CisKKwkJQmxvY2tDUkMgPSAocFNyY1swXSA8PCA4KSB8IHBTcmNbMV07CisJCXBTcmMgKz0gc2l6ZW9mKHUxNik7CisJCW9mZnNldCArPSBzaXplb2YodTE2KTsKKworCQlpZiAob2Zmc2V0ICsgQmxvY2tTaXplID4gTGVuZ3RoKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEZpcm13YXJlIGlzIGNvcnJ1cHRlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzdGF0dXMgPSB3cml0ZV9ibG9jayhzdGF0ZSwgQWRkcmVzcywgQmxvY2tTaXplLCBwU3JjKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgd2hpbGUgbG9hZGluZyBmaXJtd2FyZVxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJCXBTcmMgKz0gQmxvY2tTaXplOworCQlvZmZzZXQgKz0gQmxvY2tTaXplOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IERWQlRFbmFibGVPRkRNVG9rZW5SaW5nKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCBlbmFibGUpCit7CisJaW50IHN0YXR1czsKKwl1MTYgZGF0YSA9IDA7CisJdTE2IGRlc2lyZWRDdHJsID0gU0lPX09GRE1fU0hfT0ZETV9SSU5HX0VOQUJMRV9PTjsKKwl1MTYgZGVzaXJlZFN0YXR1cyA9IFNJT19PRkRNX1NIX09GRE1fUklOR19TVEFUVVNfRU5BQkxFRDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlpZiAoZW5hYmxlID09IGZhbHNlKSB7CisJCWRlc2lyZWRDdHJsID0gU0lPX09GRE1fU0hfT0ZETV9SSU5HX0VOQUJMRV9PRkY7CisJCWRlc2lyZWRTdGF0dXMgPSBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfU1RBVFVTX0RPV047CisJfQorCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfU1RBVFVTX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA+PSAwICYmIGRhdGEgPT0gZGVzaXJlZFN0YXR1cykgeworCQkvKiB0b2tlbnJpbmcgYWxyZWFkeSBoYXMgY29ycmVjdCBzdGF0dXMgKi8KKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogRGlzYWJsZS9lbmFibGUgZHZidCB0b2tlbnJpbmcgYnJpZGdlICAgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfRU5BQkxFX19BLCBkZXNpcmVkQ3RybCk7CisKKwllbmQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhEUlhLX09GRE1fVFJfU0hVVERPV05fVElNRU9VVCk7CisJZG8geworCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNJT19PRkRNX1NIX09GRE1fUklOR19TVEFUVVNfX0EsICZkYXRhKTsKKwkJaWYgKChzdGF0dXMgPj0gMCAmJiBkYXRhID09IGRlc2lyZWRTdGF0dXMpIHx8IHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhlbmQpKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9IHdoaWxlICgxKTsKKwlpZiAoZGF0YSAhPSBkZXNpcmVkU3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogU0lPIG5vdCByZWFkeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IE1QRUdUU1N0b3Aoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCXUxNiBmZWNPY1NuY01vZGUgPSAwOworCXUxNiBmZWNPY0lwck1vZGUgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIEdyYWNlZnVsbCBzaHV0ZG93biAoYnl0ZSBib3VuZGFyaWVzKSAqLworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgRkVDX09DX1NOQ19NT0RFX19BLCAmZmVjT2NTbmNNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlmZWNPY1NuY01vZGUgfD0gRkVDX09DX1NOQ19NT0RFX1NIVVRET1dOX19NOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19TTkNfTU9ERV9fQSwgZmVjT2NTbmNNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFN1cHByZXNzIE1DTEsgZHVyaW5nIGFic2VuY2Ugb2YgZGF0YSAqLworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgRkVDX09DX0lQUl9NT0RFX19BLCAmZmVjT2NJcHJNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlmZWNPY0lwck1vZGUgfD0gRkVDX09DX0lQUl9NT0RFX01DTEtfRElTX0RBVF9BQlNfX007CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX0lQUl9NT0RFX19BLCBmZWNPY0lwck1vZGUpOworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHNjdV9jb21tYW5kKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJICAgICAgIHUxNiBjbWQsIHU4IHBhcmFtZXRlckxlbiwKKwkJICAgICAgIHUxNiAqcGFyYW1ldGVyLCB1OCByZXN1bHRMZW4sIHUxNiAqcmVzdWx0KQoreworI2lmIChTQ1VfUkFNX1BBUkFNXzBfX0EgLSBTQ1VfUkFNX1BBUkFNXzE1X19BKSAhPSAxNQorI2Vycm9yIERSWEsgcmVnaXN0ZXIgbWFwcGluZyBubyBsb25nZXIgY29tcGF0aWJsZSB3aXRoIHRoaXMgcm91dGluZSEKKyNlbmRpZgorCXUxNiBjdXJDbWQgPSAwOworCWludCBzdGF0dXMgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcgZW5kOworCXU4IGJ1ZmZlclszNF07CisJaW50IGNudCA9IDAsIGlpOworCWNvbnN0IGNoYXIgKnA7CisJY2hhciBlcnJuYW1lWzMwXTsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlpZiAoKGNtZCA9PSAwKSB8fCAoKHBhcmFtZXRlckxlbiA+IDApICYmIChwYXJhbWV0ZXIgPT0gTlVMTCkpIHx8CisJICAgICgocmVzdWx0TGVuID4gMCkgJiYgKHJlc3VsdCA9PSBOVUxMKSkpCisJCWdvdG8gZXJyb3I7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCisJLyogYXNzdW1lIHRoYXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgaXMgcmVhZHkKKwkJc2luY2UgaXQgaXMgY2hlY2tlZCBhZnRlcndhcmRzICovCisJZm9yIChpaSA9IHBhcmFtZXRlckxlbiAtIDE7IGlpID49IDA7IGlpIC09IDEpIHsKKwkJYnVmZmVyW2NudCsrXSA9IChwYXJhbWV0ZXJbaWldICYgMHhGRik7CisJCWJ1ZmZlcltjbnQrK10gPSAoKHBhcmFtZXRlcltpaV0gPj4gOCkgJiAweEZGKTsKKwl9CisJYnVmZmVyW2NudCsrXSA9IChjbWQgJiAweEZGKTsKKwlidWZmZXJbY250KytdID0gKChjbWQgPj4gOCkgJiAweEZGKTsKKworCXdyaXRlX2Jsb2NrKHN0YXRlLCBTQ1VfUkFNX1BBUkFNXzBfX0EgLQorCQkJKHBhcmFtZXRlckxlbiAtIDEpLCBjbnQsIGJ1ZmZlcik7CisJLyogV2FpdCB1bnRpbCBTQ1UgaGFzIHByb2Nlc3NlZCBjb21tYW5kICovCisJZW5kID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoRFJYS19NQVhfV0FJVFRJTUUpOworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNDVV9SQU1fQ09NTUFORF9fQSwgJmN1ckNtZCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9IHdoaWxlICghKGN1ckNtZCA9PSBEUlhfU0NVX1JFQURZKSAmJiAodGltZV9pc19hZnRlcl9qaWZmaWVzKGVuZCkpKTsKKwlpZiAoY3VyQ21kICE9IERSWF9TQ1VfUkVBRFkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBTQ1Ugbm90IHJlYWR5XG4iKTsKKwkJc3RhdHVzID0gLUVJTzsKKwkJZ290byBlcnJvcjI7CisJfQorCS8qIHJlYWQgcmVzdWx0cyAqLworCWlmICgocmVzdWx0TGVuID4gMCkgJiYgKHJlc3VsdCAhPSBOVUxMKSkgeworCQlzMTYgZXJyOworCQlpbnQgaWk7CisKKwkJZm9yIChpaSA9IHJlc3VsdExlbiAtIDE7IGlpID49IDA7IGlpIC09IDEpIHsKKwkJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0NVX1JBTV9QQVJBTV8wX19BIC0gaWksICZyZXN1bHRbaWldKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBDaGVjayBpZiBhbiBlcnJvciB3YXMgcmVwb3J0ZWQgYnkgU0NVICovCisJCWVyciA9IChzMTYpcmVzdWx0WzBdOworCQlpZiAoZXJyID49IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIGNoZWNrIGZvciB0aGUga25vd24gZXJyb3IgY29kZXMgKi8KKwkJc3dpdGNoIChlcnIpIHsKKwkJY2FzZSBTQ1VfUkVTVUxUX1VOS0NNRDoKKwkJCXAgPSAiU0NVX1JFU1VMVF9VTktDTUQiOworCQkJYnJlYWs7CisJCWNhc2UgU0NVX1JFU1VMVF9VTktTVEQ6CisJCQlwID0gIlNDVV9SRVNVTFRfVU5LU1REIjsKKwkJCWJyZWFrOworCQljYXNlIFNDVV9SRVNVTFRfU0laRToKKwkJCXAgPSAiU0NVX1JFU1VMVF9TSVpFIjsKKwkJCWJyZWFrOworCQljYXNlIFNDVV9SRVNVTFRfSU5WUEFSOgorCQkJcCA9ICJTQ1VfUkVTVUxUX0lOVlBBUiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDogLyogT3RoZXIgbmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMgKi8KKwkJCXNwcmludGYoZXJybmFtZSwgIkVSUk9SOiAlZFxuIiwgZXJyKTsKKwkJCXAgPSBlcnJuYW1lOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogJXMgd2hpbGUgc2VuZGluZyBjbWQgMHglMDR4IHdpdGggcGFyYW1zOiIsIHAsIGNtZCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJkcnhrOiAiLCBEVU1QX1BSRUZJWF9OT05FLCBidWZmZXIsIGNudCk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3IyOworCX0KKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworZXJyb3IyOgorCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFNldElxbUFmKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCBhY3RpdmUpCit7CisJdTE2IGRhdGEgPSAwOworCWludCBzdGF0dXM7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJLyogQ29uZmlndXJlIElRTSAqLworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIWFjdGl2ZSkgeworCQlkYXRhIHw9IChJUU1fQUZfU1REQllfU1REQllfQURDX1NUQU5EQlkKKwkJCQl8IElRTV9BRl9TVERCWV9TVERCWV9BTVBfU1RBTkRCWQorCQkJCXwgSVFNX0FGX1NUREJZX1NUREJZX1BEX1NUQU5EQlkKKwkJCQl8IElRTV9BRl9TVERCWV9TVERCWV9UQUdDX0lGX1NUQU5EQlkKKwkJCQl8IElRTV9BRl9TVERCWV9TVERCWV9UQUdDX1JGX1NUQU5EQlkpOworCX0gZWxzZSB7CisJCWRhdGEgJj0gKCh+SVFNX0FGX1NUREJZX1NUREJZX0FEQ19TVEFOREJZKQorCQkJCSYgKH5JUU1fQUZfU1REQllfU1REQllfQU1QX1NUQU5EQlkpCisJCQkJJiAofklRTV9BRl9TVERCWV9TVERCWV9QRF9TVEFOREJZKQorCQkJCSYgKH5JUU1fQUZfU1REQllfU1REQllfVEFHQ19JRl9TVEFOREJZKQorCQkJCSYgKH5JUU1fQUZfU1REQllfU1REQllfVEFHQ19SRl9TVEFOREJZKQorCQkJKTsKKwl9CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCBkYXRhKTsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgQ3RybFBvd2VyTW9kZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIGVudW0gRFJYUG93ZXJNb2RlICptb2RlKQoreworCWludCBzdGF0dXMgPSAwOworCXUxNiBzaW9DY1B3ZE1vZGUgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIENoZWNrIGFyZ3VtZW50cyAqLworCWlmIChtb2RlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICgqbW9kZSkgeworCWNhc2UgRFJYX1BPV0VSX1VQOgorCQlzaW9DY1B3ZE1vZGUgPSBTSU9fQ0NfUFdEX01PREVfTEVWRUxfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSBEUlhLX1BPV0VSX0RPV05fT0ZETToKKwkJc2lvQ2NQd2RNb2RlID0gU0lPX0NDX1BXRF9NT0RFX0xFVkVMX09GRE07CisJCWJyZWFrOworCWNhc2UgRFJYS19QT1dFUl9ET1dOX0NPUkU6CisJCXNpb0NjUHdkTW9kZSA9IFNJT19DQ19QV0RfTU9ERV9MRVZFTF9DTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBEUlhLX1BPV0VSX0RPV05fUExMOgorCQlzaW9DY1B3ZE1vZGUgPSBTSU9fQ0NfUFdEX01PREVfTEVWRUxfUExMOworCQlicmVhazsKKwljYXNlIERSWF9QT1dFUl9ET1dOOgorCQlzaW9DY1B3ZE1vZGUgPSBTSU9fQ0NfUFdEX01PREVfTEVWRUxfT1NDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3cgc2xlZXAgbW9kZSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBhbHJlYWR5IGluIHJlcXVlc3RlZCBwb3dlciBtb2RlLCBkbyBub3RoaW5nICovCisJaWYgKHN0YXRlLT5tX2N1cnJlbnRQb3dlck1vZGUgPT0gKm1vZGUpCisJCXJldHVybiAwOworCisJLyogRm9yIG5leHQgc3RlcHMgbWFrZSBzdXJlIHRvIHN0YXJ0IGZyb20gRFJYX1BPV0VSX1VQIG1vZGUgKi8KKwlpZiAoc3RhdGUtPm1fY3VycmVudFBvd2VyTW9kZSAhPSBEUlhfUE9XRVJfVVApIHsKKwkJc3RhdHVzID0gUG93ZXJVcERldmljZShzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gRFZCVEVuYWJsZU9GRE1Ub2tlblJpbmcoc3RhdGUsIHRydWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCptb2RlID09IERSWF9QT1dFUl9VUCkgeworCQkvKiBSZXN0b3JlIGFuYWxvZyAmIHBpbiBjb25maWd1YXJ0aW9uICovCisJfSBlbHNlIHsKKwkJLyogUG93ZXIgZG93biB0byByZXF1ZXN0ZWQgbW9kZSAqLworCQkvKiBCYWNrdXAgc29tZSByZWdpc3RlciBzZXR0aW5ncyAqLworCQkvKiBTZXQgcGlucyB3aXRoIHBvc3NpYmxlIHB1bGwtdXBzIGNvbm5lY3RlZAorCQkgICB0byB0aGVtIGluIGlucHV0IG1vZGUgKi8KKwkJLyogQW5hbG9nIHBvd2VyIGRvd24gKi8KKwkJLyogQURDIHBvd2VyIGRvd24gKi8KKwkJLyogUG93ZXIgZG93biBkZXZpY2UgKi8KKwkJLyogc3RvcCBhbGwgY29tbV9leGVjICovCisJCS8qIFN0b3AgYW5kIHBvd2VyIGRvd24gcHJldmlvdXMgc3RhbmRhcmQgKi8KKwkJc3dpdGNoIChzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlKSB7CisJCWNhc2UgT01fRFZCVDoKKwkJCXN0YXR1cyA9IE1QRUdUU1N0b3Aoc3RhdGUpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCXN0YXR1cyA9IFBvd2VyRG93bkRWQlQoc3RhdGUsIGZhbHNlKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlicmVhazsKKwkJY2FzZSBPTV9RQU1fSVRVX0E6CisJCWNhc2UgT01fUUFNX0lUVV9DOgorCQkJc3RhdHVzID0gTVBFR1RTU3RvcChzdGF0ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdHVzID0gUG93ZXJEb3duUUFNKHN0YXRlKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXN0YXR1cyA9IERWQlRFbmFibGVPRkRNVG9rZW5SaW5nKHN0YXRlLCBmYWxzZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0NDX1BXRF9NT0RFX19BLCBzaW9DY1B3ZE1vZGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19DQ19VUERBVEVfX0EsIFNJT19DQ19VUERBVEVfS0VZKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCWlmICgqbW9kZSAhPSBEUlhLX1BPV0VSX0RPV05fT0ZETSkgeworCQkJc3RhdGUtPm1fSElDZmdDdHJsIHw9CisJCQkJU0lPX0hJX1JBX1JBTV9QQVJfNV9DRkdfU0xFRVBfWlpaOworCQkJc3RhdHVzID0gSElfQ2ZnQ29tbWFuZChzdGF0ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorCXN0YXRlLT5tX2N1cnJlbnRQb3dlck1vZGUgPSAqbW9kZTsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBQb3dlckRvd25EVkJUKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCBzZXRQb3dlck1vZGUpCit7CisJZW51bSBEUlhQb3dlck1vZGUgcG93ZXJNb2RlID0gRFJYS19QT1dFUl9ET1dOX09GRE07CisJdTE2IGNtZFJlc3VsdCA9IDA7CisJdTE2IGRhdGEgPSAwOworCWludCBzdGF0dXM7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfQ09NTV9FWEVDX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJaWYgKGRhdGEgPT0gU0NVX0NPTU1fRVhFQ19BQ1RJVkUpIHsKKwkJLyogU2VuZCBPRkRNIHN0b3AgY29tbWFuZCAqLworCQlzdGF0dXMgPSBzY3VfY29tbWFuZChzdGF0ZSwgU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX09GRE0gfCBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX1NUT1AsIDAsIE5VTEwsIDEsICZjbWRSZXN1bHQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCS8qIFNlbmQgT0ZETSByZXNldCBjb21tYW5kICovCisJCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLCBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfT0ZETSB8IFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfUkVTRVQsIDAsIE5VTEwsIDEsICZjbWRSZXN1bHQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogUmVzZXQgZGF0YXBhdGggZm9yIE9GRE0sIHByb2Nlc3NvcnMgZmlyc3QgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX0NPTU1fRVhFQ19fQSwgT0ZETV9TQ19DT01NX0VYRUNfU1RPUCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9MQ19DT01NX0VYRUNfX0EsIE9GRE1fTENfQ09NTV9FWEVDX1NUT1ApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DT01NX0VYRUNfX0EsIElRTV9DT01NX0VYRUNfQl9TVE9QKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIHBvd2VyZG93biBBRkUgICAgICAgICAgICAgICAgICAgKi8KKwlzdGF0dXMgPSBTZXRJcW1BZihzdGF0ZSwgZmFsc2UpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogcG93ZXJkb3duIHRvIE9GRE0gbW9kZSAgICAgICAgICAqLworCWlmIChzZXRQb3dlck1vZGUpIHsKKwkJc3RhdHVzID0gQ3RybFBvd2VyTW9kZShzdGF0ZSwgJnBvd2VyTW9kZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBTZXRPcGVyYXRpb25Nb2RlKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSAgICBlbnVtIE9wZXJhdGlvbk1vZGUgb01vZGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qCisJICAgU3RvcCBhbmQgcG93ZXIgZG93biBwcmV2aW91cyBzdGFuZGFyZAorCSAgIFRPRE8gaW52ZXN0aWdhdGUgdG90YWwgcG93ZXIgZG93biBpbnN0ZWFkIG9mIHBhcnRpYWwKKwkgICBwb3dlciBkb3duIGRlcGVuZGluZyBvbiAicHJldmlvdXMiIHN0YW5kYXJkLgorCSAqLworCisJLyogZGlzYWJsZSBIVyBsb2NrIGluZGljYXRvciAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fR1BJT19fQSwgU0NVX1JBTV9HUElPX0hXX0xPQ0tfSU5EX0RJU0FCTEUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogRGV2aWNlIGlzIGFscmVhZHkgYXQgdGhlIHJlcXVpcmVkIG1vZGUgKi8KKwlpZiAoc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSA9PSBvTW9kZSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5tX09wZXJhdGlvbk1vZGUpIHsKKwkJLyogT01fTk9ORSB3YXMgYWRkZWQgZm9yIHN0YXJ0IHVwICovCisJY2FzZSBPTV9OT05FOgorCQlicmVhazsKKwljYXNlIE9NX0RWQlQ6CisJCXN0YXR1cyA9IE1QRUdUU1N0b3Aoc3RhdGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IFBvd2VyRG93bkRWQlQoc3RhdGUsIHRydWUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXRlLT5tX09wZXJhdGlvbk1vZGUgPSBPTV9OT05FOworCQlicmVhazsKKwljYXNlIE9NX1FBTV9JVFVfQToJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIE9NX1FBTV9JVFVfQzoKKwkJc3RhdHVzID0gTVBFR1RTU3RvcChzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gUG93ZXJEb3duUUFNKHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID0gT01fTk9ORTsKKwkJYnJlYWs7CisJY2FzZSBPTV9RQU1fSVRVX0I6CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKgorCQlQb3dlciB1cCBuZXcgc3RhbmRhcmQKKwkJKi8KKwlzd2l0Y2ggKG9Nb2RlKSB7CisJY2FzZSBPTV9EVkJUOgorCQlzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID0gb01vZGU7CisJCXN0YXR1cyA9IFNldERWQlRTdGFuZGFyZChzdGF0ZSwgb01vZGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgT01fUUFNX0lUVV9BOgkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgT01fUUFNX0lUVV9DOgorCQlzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID0gb01vZGU7CisJCXN0YXR1cyA9IFNldFFBTVN0YW5kYXJkKHN0YXRlLCBvTW9kZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisJY2FzZSBPTV9RQU1fSVRVX0I6CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBTdGFydChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHMzMiBvZmZzZXRGcmVxLAorCQkgczMyIEludGVybWVkaWF0ZUZyZXF1ZW5jeSkKK3sKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCXUxNiBJRnJlcWtIejsKKwlzMzIgT2Zmc2V0a0h6ID0gb2Zmc2V0RnJlcSAvIDEwMDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCWlmIChzdGF0ZS0+bV9EcnhrU3RhdGUgIT0gRFJYS19TVE9QUEVEICYmCisJCXN0YXRlLT5tX0RyeGtTdGF0ZSAhPSBEUlhLX0RUVl9TVEFSVEVEKQorCQlnb3RvIGVycm9yOworCisJc3RhdGUtPm1fYk1pcnJvckZyZXFTcGVjdCA9IChzdGF0ZS0+cGFyYW0uaW52ZXJzaW9uID09IElOVkVSU0lPTl9PTik7CisKKwlpZiAoSW50ZXJtZWRpYXRlRnJlcXVlbmN5IDwgMCkgeworCQlzdGF0ZS0+bV9iTWlycm9yRnJlcVNwZWN0ID0gIXN0YXRlLT5tX2JNaXJyb3JGcmVxU3BlY3Q7CisJCUludGVybWVkaWF0ZUZyZXF1ZW5jeSA9IC1JbnRlcm1lZGlhdGVGcmVxdWVuY3k7CisJfQorCisJc3dpdGNoIChzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlKSB7CisJY2FzZSBPTV9RQU1fSVRVX0E6CisJY2FzZSBPTV9RQU1fSVRVX0M6CisJCUlGcmVxa0h6ID0gKEludGVybWVkaWF0ZUZyZXF1ZW5jeSAvIDEwMDApOworCQlzdGF0dXMgPSBTZXRRQU0oc3RhdGUsIElGcmVxa0h6LCBPZmZzZXRrSHopOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXRlLT5tX0RyeGtTdGF0ZSA9IERSWEtfRFRWX1NUQVJURUQ7CisJCWJyZWFrOworCWNhc2UgT01fRFZCVDoKKwkJSUZyZXFrSHogPSAoSW50ZXJtZWRpYXRlRnJlcXVlbmN5IC8gMTAwMCk7CisJCXN0YXR1cyA9IE1QRUdUU1N0b3Aoc3RhdGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IFNldERWQlQoc3RhdGUsIElGcmVxa0h6LCBPZmZzZXRrSHopOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IERWQlRTdGFydChzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdGUtPm1fRHJ4a1N0YXRlID0gRFJYS19EVFZfU1RBUlRFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgU2h1dERvd24oc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWRwcmludGsoMSwgIlxuIik7CisKKwlNUEVHVFNTdG9wKHN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBHZXRMb2NrU3RhdHVzKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyICpwTG9ja1N0YXR1cywKKwkJCSB1MzIgVGltZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlpZiAocExvY2tTdGF0dXMgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCSpwTG9ja1N0YXR1cyA9IE5PVF9MT0NLRUQ7CisKKwkvKiBkZWZpbmUgdGhlIFNDVSBjb21tYW5kIGNvZGUgKi8KKwlzd2l0Y2ggKHN0YXRlLT5tX09wZXJhdGlvbk1vZGUpIHsKKwljYXNlIE9NX1FBTV9JVFVfQToKKwljYXNlIE9NX1FBTV9JVFVfQjoKKwljYXNlIE9NX1FBTV9JVFVfQzoKKwkJc3RhdHVzID0gR2V0UUFNTG9ja1N0YXR1cyhzdGF0ZSwgcExvY2tTdGF0dXMpOworCQlicmVhazsKKwljYXNlIE9NX0RWQlQ6CisJCXN0YXR1cyA9IEdldERWQlRMb2NrU3RhdHVzKHN0YXRlLCBwTG9ja1N0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IE1QRUdUU1N0YXJ0KHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJdTE2IGZlY09jU25jTW9kZSA9IDA7CisKKwkvKiBBbGxvdyBPQyB0byBzeW5jIGFnYWluICovCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBGRUNfT0NfU05DX01PREVfX0EsICZmZWNPY1NuY01vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCWZlY09jU25jTW9kZSAmPSB+RkVDX09DX1NOQ19NT0RFX1NIVVRET1dOX19NOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19TTkNfTU9ERV9fQSwgZmVjT2NTbmNNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfU05DX1VOTE9DS19fQSwgMSk7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBNUEVHVFNEdG9Jbml0KHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIFJhdGUgaW50ZWdyYXRpb24gc2V0dGluZ3MgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfUkNOX0NUTF9TVEVQX0xPX19BLCAweDAwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19SQ05fQ1RMX1NURVBfSElfX0EsIDB4MDAwQyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX1JDTl9HQUlOX19BLCAweDAwMEEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19BVlJfUEFSTV9BX19BLCAweDAwMDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19BVlJfUEFSTV9CX19BLCAweDAwMDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19UTURfSElfTUFSR0lOX19BLCAweDA2ODApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19UTURfTE9fTUFSR0lOX19BLCAweDAwODApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19UTURfQ09VTlRfX0EsIDB4MDNGNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfT0NSX0lOVkVSVF9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX1NOQ19MV01fX0EsIDIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19TTkNfSFdNX19BLCAxMik7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IE1QRUdUU0R0b1NldHVwKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSAgZW51bSBPcGVyYXRpb25Nb2RlIG9Nb2RlKQoreworCWludCBzdGF0dXM7CisKKwl1MTYgZmVjT2NSZWdNb2RlID0gMDsJLyogRkVDX09DX01PREUgICAgICAgcmVnaXN0ZXIgdmFsdWUgKi8KKwl1MTYgZmVjT2NSZWdJcHJNb2RlID0gMDsJLyogRkVDX09DX0lQUl9NT0RFICAgcmVnaXN0ZXIgdmFsdWUgKi8KKwl1MTYgZmVjT2NEdG9Nb2RlID0gMDsJLyogRkVDX09DX0lQUl9JTlZFUlQgcmVnaXN0ZXIgdmFsdWUgKi8KKwl1MTYgZmVjT2NGY3RNb2RlID0gMDsJLyogRkVDX09DX0lQUl9JTlZFUlQgcmVnaXN0ZXIgdmFsdWUgKi8KKwl1MTYgZmVjT2NEdG9QZXJpb2QgPSAyOwkvKiBGRUNfT0NfSVBSX0lOVkVSVCByZWdpc3RlciB2YWx1ZSAqLworCXUxNiBmZWNPY0R0b0J1cnN0TGVuID0gMTg4OwkvKiBGRUNfT0NfSVBSX0lOVkVSVCByZWdpc3RlciB2YWx1ZSAqLworCXUzMiBmZWNPY1JjbkN0bFJhdGUgPSAwOwkvKiBGRUNfT0NfSVBSX0lOVkVSVCByZWdpc3RlciB2YWx1ZSAqLworCXUxNiBmZWNPY1RtZE1vZGUgPSAwOworCXUxNiBmZWNPY1RtZEludFVwZFJhdGUgPSAwOworCXUzMiBtYXhCaXRSYXRlID0gMDsKKwlib29sIHN0YXRpY0NMSyA9IGZhbHNlOworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qIENoZWNrIGluc2VydGlvbiBvZiB0aGUgUmVlZC1Tb2xvbW9uIHBhcml0eSBieXRlcyAqLworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgRkVDX09DX01PREVfX0EsICZmZWNPY1JlZ01vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgRkVDX09DX0lQUl9NT0RFX19BLCAmZmVjT2NSZWdJcHJNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlmZWNPY1JlZ01vZGUgJj0gKH5GRUNfT0NfTU9ERV9QQVJJVFlfX00pOworCWZlY09jUmVnSXByTW9kZSAmPSAofkZFQ19PQ19JUFJfTU9ERV9NVkFMX0RJU19QQVJfX00pOworCWlmIChzdGF0ZS0+bV9pbnNlcnRSU0J5dGUgPT0gdHJ1ZSkgeworCQkvKiBlbmFibGUgcGFyaXR5IHN5bWJvbCBmb3J3YXJkICovCisJCWZlY09jUmVnTW9kZSB8PSBGRUNfT0NfTU9ERV9QQVJJVFlfX007CisJCS8qIE1WQUwgZGlzYWJsZSBkdXJpbmcgcGFyaXR5IGJ5dGVzICovCisJCWZlY09jUmVnSXByTW9kZSB8PSBGRUNfT0NfSVBSX01PREVfTVZBTF9ESVNfUEFSX19NOworCQkvKiBUUyBidXJzdCBsZW5ndGggdG8gMjA0ICovCisJCWZlY09jRHRvQnVyc3RMZW4gPSAyMDQ7CisJfQorCisJLyogQ2hlY2sgc2VyaWFsIG9yIHBhcnJhbGxlbCBvdXRwdXQgKi8KKwlmZWNPY1JlZ0lwck1vZGUgJj0gKH4oRkVDX09DX0lQUl9NT0RFX1NFUklBTF9fTSkpOworCWlmIChzdGF0ZS0+bV9lbmFibGVQYXJhbGxlbCA9PSBmYWxzZSkgeworCQkvKiBNUEVHIGRhdGEgb3V0cHV0IGlzIHNlcmlhbCAtPiBzZXQgaXByX21vZGVbMF0gKi8KKwkJZmVjT2NSZWdJcHJNb2RlIHw9IEZFQ19PQ19JUFJfTU9ERV9TRVJJQUxfX007CisJfQorCisJc3dpdGNoIChvTW9kZSkgeworCWNhc2UgT01fRFZCVDoKKwkJbWF4Qml0UmF0ZSA9IHN0YXRlLT5tX0RWQlRCaXRyYXRlOworCQlmZWNPY1RtZE1vZGUgPSAzOworCQlmZWNPY1JjbkN0bFJhdGUgPSAweEMwMDAwMDsKKwkJc3RhdGljQ0xLID0gc3RhdGUtPm1fRFZCVFN0YXRpY0NMSzsKKwkJYnJlYWs7CisJY2FzZSBPTV9RQU1fSVRVX0E6CS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBPTV9RQU1fSVRVX0M6CisJCWZlY09jVG1kTW9kZSA9IDB4MDAwNDsKKwkJZmVjT2NSY25DdGxSYXRlID0gMHhEMkI0RUU7CS8qIGdvb2QgZm9yID42MyBNYi9zICovCisJCW1heEJpdFJhdGUgPSBzdGF0ZS0+bV9EVkJDQml0cmF0ZTsKKwkJc3RhdGljQ0xLID0gc3RhdGUtPm1fRFZCQ1N0YXRpY0NMSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9CQkvKiBzd2l0Y2ggKHN0YW5kYXJkKSAqLworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogQ29uZmlndXJlIERUTydzICovCisJaWYgKHN0YXRpY0NMSykgeworCQl1MzIgYml0UmF0ZSA9IDA7CisKKwkJLyogUmF0aW9uYWwgRFRPIGZvciBNQ0xLIHNvdXJjZSAoc3RhdGljIE1DTEsgcmF0ZSksCisJCQlEeW5hbWljIERUTyBmb3Igb3B0aW1hbCBncm91cGluZworCQkJKGF2b2lkIGludHJhLXBhY2tldCBnYXBzKSwKKwkJCURUTyBvZmZzZXQgZW5hYmxlIHRvIHN5bmMgVFMgYnVyc3Qgd2l0aCBNU1RSVCAqLworCQlmZWNPY0R0b01vZGUgPSAoRkVDX09DX0RUT19NT0RFX0RZTkFNSUNfX00gfAorCQkJCUZFQ19PQ19EVE9fTU9ERV9PRkZTRVRfRU5BQkxFX19NKTsKKwkJZmVjT2NGY3RNb2RlID0gKEZFQ19PQ19GQ1RfTU9ERV9SQVRfRU5BX19NIHwKKwkJCQlGRUNfT0NfRkNUX01PREVfVklSVF9FTkFfX00pOworCisJCS8qIENoZWNrIHVzZXIgZGVmaW5lZCBiaXRyYXRlICovCisJCWJpdFJhdGUgPSBtYXhCaXRSYXRlOworCQlpZiAoYml0UmF0ZSA+IDc1OTAwMDAwVUwpIHsJLyogbWF4IGlzIDc1LjkgTWIvcyAqLworCQkJYml0UmF0ZSA9IDc1OTAwMDAwVUw7CisJCX0KKwkJLyogUmF0aW9uYWwgRFRPIHBlcmlvZDoKKwkJCWR0b19wZXJpb2QgPSAoRnN5cyAvIGJpdHJhdGUpIC0gMgorCisJCQlSZXN1bHQgc2hvdWxkIGJlIGZsb29yZWQsCisJCQl0byBtYWtlIHN1cmUgPj0gcmVxdWVzdGVkIGJpdHJhdGUKKwkJCSovCisJCWZlY09jRHRvUGVyaW9kID0gKHUxNikgKCgoc3RhdGUtPm1fc3lzQ2xvY2tGcmVxKQorCQkJCQkJKiAxMDAwKSAvIGJpdFJhdGUpOworCQlpZiAoZmVjT2NEdG9QZXJpb2QgPD0gMikKKwkJCWZlY09jRHRvUGVyaW9kID0gMDsKKwkJZWxzZQorCQkJZmVjT2NEdG9QZXJpb2QgLT0gMjsKKwkJZmVjT2NUbWRJbnRVcGRSYXRlID0gODsKKwl9IGVsc2UgeworCQkvKiAoY29tbW9uQXR0ci0+c3RhdGljQ0xLID09IGZhbHNlKSA9PiBkeW5hbWljIG1vZGUgKi8KKwkJZmVjT2NEdG9Nb2RlID0gRkVDX09DX0RUT19NT0RFX0RZTkFNSUNfX007CisJCWZlY09jRmN0TW9kZSA9IEZFQ19PQ19GQ1RfTU9ERV9fUFJFOworCQlmZWNPY1RtZEludFVwZFJhdGUgPSA1OworCX0KKworCS8qIFdyaXRlIGFwcHJvcHJpYXRlIHJlZ2lzdGVycyB3aXRoIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX0RUT19CVVJTVF9MRU5fX0EsIGZlY09jRHRvQnVyc3RMZW4pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19EVE9fUEVSSU9EX19BLCBmZWNPY0R0b1BlcmlvZCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX0RUT19NT0RFX19BLCBmZWNPY0R0b01vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19PQ19GQ1RfTU9ERV9fQSwgZmVjT2NGY3RNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfTU9ERV9fQSwgZmVjT2NSZWdNb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfSVBSX01PREVfX0EsIGZlY09jUmVnSXByTW9kZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBSYXRlIGludGVncmF0aW9uIHNldHRpbmdzICovCisJc3RhdHVzID0gd3JpdGUzMihzdGF0ZSwgRkVDX09DX1JDTl9DVExfUkFURV9MT19fQSwgZmVjT2NSY25DdGxSYXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfVE1EX0lOVF9VUERfUkFURV9fQSwgZmVjT2NUbWRJbnRVcGRSYXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfT0NfVE1EX01PREVfX0EsIGZlY09jVG1kTW9kZSk7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBNUEVHVFNDb25maWd1cmVQb2xhcml0eShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJdTE2IGZlY09jUmVnSXBySW52ZXJ0ID0gMDsKKworCS8qIERhdGEgbWFzayBmb3IgdGhlIG91dHB1dCBkYXRhIGJ5dGUgKi8KKwl1MTYgSW52ZXJ0RGF0YU1hc2sgPQorCSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDdfX00gfCBGRUNfT0NfSVBSX0lOVkVSVF9NRDZfX00gfAorCSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDVfX00gfCBGRUNfT0NfSVBSX0lOVkVSVF9NRDRfX00gfAorCSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDNfX00gfCBGRUNfT0NfSVBSX0lOVkVSVF9NRDJfX00gfAorCSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDFfX00gfCBGRUNfT0NfSVBSX0lOVkVSVF9NRDBfX007CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJLyogQ29udHJvbCBzZWxlY3RpdmUgaW52ZXJzaW9uIG9mIG91dHB1dCBiaXRzICovCisJZmVjT2NSZWdJcHJJbnZlcnQgJj0gKH4oSW52ZXJ0RGF0YU1hc2spKTsKKwlpZiAoc3RhdGUtPm1faW52ZXJ0REFUQSA9PSB0cnVlKQorCQlmZWNPY1JlZ0lwckludmVydCB8PSBJbnZlcnREYXRhTWFzazsKKwlmZWNPY1JlZ0lwckludmVydCAmPSAofihGRUNfT0NfSVBSX0lOVkVSVF9NRVJSX19NKSk7CisJaWYgKHN0YXRlLT5tX2ludmVydEVSUiA9PSB0cnVlKQorCQlmZWNPY1JlZ0lwckludmVydCB8PSBGRUNfT0NfSVBSX0lOVkVSVF9NRVJSX19NOworCWZlY09jUmVnSXBySW52ZXJ0ICY9ICh+KEZFQ19PQ19JUFJfSU5WRVJUX01TVFJUX19NKSk7CisJaWYgKHN0YXRlLT5tX2ludmVydFNUUiA9PSB0cnVlKQorCQlmZWNPY1JlZ0lwckludmVydCB8PSBGRUNfT0NfSVBSX0lOVkVSVF9NU1RSVF9fTTsKKwlmZWNPY1JlZ0lwckludmVydCAmPSAofihGRUNfT0NfSVBSX0lOVkVSVF9NVkFMX19NKSk7CisJaWYgKHN0YXRlLT5tX2ludmVydFZBTCA9PSB0cnVlKQorCQlmZWNPY1JlZ0lwckludmVydCB8PSBGRUNfT0NfSVBSX0lOVkVSVF9NVkFMX19NOworCWZlY09jUmVnSXBySW52ZXJ0ICY9ICh+KEZFQ19PQ19JUFJfSU5WRVJUX01DTEtfX00pKTsKKwlpZiAoc3RhdGUtPm1faW52ZXJ0Q0xLID09IHRydWUpCisJCWZlY09jUmVnSXBySW52ZXJ0IHw9IEZFQ19PQ19JUFJfSU5WRVJUX01DTEtfX007CisKKwlyZXR1cm4gd3JpdGUxNihzdGF0ZSwgRkVDX09DX0lQUl9JTlZFUlRfX0EsIGZlY09jUmVnSXBySW52ZXJ0KTsKK30KKworI2RlZmluZSAgIFNDVV9SQU1fQUdDX0tJX0lOVl9SRl9QT0xfX00gMHg0MDAwCisKK3N0YXRpYyBpbnQgU2V0QWdjUmYoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkgICAgc3RydWN0IFNDZmdBZ2MgKnBBZ2NDZmcsIGJvb2wgaXNEVFYpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisJdTE2IGRhdGEgPSAwOworCXN0cnVjdCBTQ2ZnQWdjICpwSWZBZ2NTZXR0aW5nczsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlpZiAocEFnY0NmZyA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3dpdGNoIChwQWdjQ2ZnLT5jdHJsTW9kZSkgeworCWNhc2UgRFJYS19BR0NfQ1RSTF9BVVRPOgorCQkvKiBFbmFibGUgUkYgQUdDIERBQyAqLworCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIElRTV9BRl9TVERCWV9fQSwgJmRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWRhdGEgJj0gfklRTV9BRl9TVERCWV9TVERCWV9UQUdDX1JGX1NUQU5EQlk7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9TVERCWV9fQSwgZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsICZkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIEVuYWJsZSBTQ1UgUkYgQUdDIGxvb3AgKi8KKwkJZGF0YSAmPSB+U0NVX1JBTV9BR0NfQ09ORklHX0RJU0FCTEVfUkZfQUdDX19NOworCisJCS8qIFBvbGFyaXR5ICovCisJCWlmIChzdGF0ZS0+bV9SZkFnY1BvbCkKKwkJCWRhdGEgfD0gU0NVX1JBTV9BR0NfQ09ORklHX0lOVl9SRl9QT0xfX007CisJCWVsc2UKKwkJCWRhdGEgJj0gflNDVV9SQU1fQUdDX0NPTkZJR19JTlZfUkZfUE9MX19NOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogU2V0IHNwZWVkICh1c2luZyBjb21wbGVtZW50YXJ5IHJlZHVjdGlvbiB2YWx1ZSkgKi8KKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19LSV9SRURfX0EsICZkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCWRhdGEgJj0gflNDVV9SQU1fQUdDX0tJX1JFRF9SQUdDX1JFRF9fTTsKKwkJZGF0YSB8PSAofihwQWdjQ2ZnLT5zcGVlZCA8PAorCQkJCVNDVV9SQU1fQUdDX0tJX1JFRF9SQUdDX1JFRF9fQikKKwkJCQkmIFNDVV9SQU1fQUdDX0tJX1JFRF9SQUdDX1JFRF9fTSk7CisKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfS0lfUkVEX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCWlmIChJc0RWQlQoc3RhdGUpKQorCQkJcElmQWdjU2V0dGluZ3MgPSAmc3RhdGUtPm1fZHZidElmQWdjQ2ZnOworCQllbHNlIGlmIChJc1FBTShzdGF0ZSkpCisJCQlwSWZBZ2NTZXR0aW5ncyA9ICZzdGF0ZS0+bV9xYW1JZkFnY0NmZzsKKwkJZWxzZQorCQkJcElmQWdjU2V0dGluZ3MgPSAmc3RhdGUtPm1fYXR2SWZBZ2NDZmc7CisJCWlmIChwSWZBZ2NTZXR0aW5ncyA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qIFNldCBUT1AsIG9ubHkgaWYgSUYtQUdDIGlzIGluIEFVVE8gbW9kZSAqLworCQlpZiAocElmQWdjU2V0dGluZ3MtPmN0cmxNb2RlID09IERSWEtfQUdDX0NUUkxfQVVUTykKKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0lGX0lBQ0NVX0hJX1RHVF9NQVhfX0EsIHBBZ2NDZmctPnRvcCk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCS8qIEN1dC1PZmYgY3VycmVudCAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19SRl9JQUNDVV9ISV9DT19fQSwgcEFnY0NmZy0+Y3V0T2ZmQ3VycmVudCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBNYXguIG91dHB1dCBsZXZlbCAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19SRl9NQVhfX0EsIHBBZ2NDZmctPm1heE91dHB1dExldmVsKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCWJyZWFrOworCisJY2FzZSBEUlhLX0FHQ19DVFJMX1VTRVI6CisJCS8qIEVuYWJsZSBSRiBBR0MgREFDICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSAmPSB+SVFNX0FGX1NUREJZX1NUREJZX1RBR0NfUkZfU1RBTkRCWTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIERpc2FibGUgU0NVIFJGIEFHQyBsb29wICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ09ORklHX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSB8PSBTQ1VfUkFNX0FHQ19DT05GSUdfRElTQUJMRV9SRl9BR0NfX007CisJCWlmIChzdGF0ZS0+bV9SZkFnY1BvbCkKKwkJCWRhdGEgfD0gU0NVX1JBTV9BR0NfQ09ORklHX0lOVl9SRl9QT0xfX007CisJCWVsc2UKKwkJCWRhdGEgJj0gflNDVV9SQU1fQUdDX0NPTkZJR19JTlZfUkZfUE9MX19NOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogU0NVIGMuby5jLiB0byAwLCBlbmFibGluZyBmdWxsIGNvbnRyb2wgcmFuZ2UgKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfUkZfSUFDQ1VfSElfQ09fX0EsIDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogV3JpdGUgdmFsdWUgdG8gb3V0cHV0IHBpbiAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19SRl9JQUNDVV9ISV9fQSwgcEFnY0NmZy0+b3V0cHV0TGV2ZWwpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCisJY2FzZSBEUlhLX0FHQ19DVFJMX09GRjoKKwkJLyogRGlzYWJsZSBSRiBBR0MgREFDICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSB8PSBJUU1fQUZfU1REQllfU1REQllfVEFHQ19SRl9TVEFOREJZOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfU1REQllfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogRGlzYWJsZSBTQ1UgUkYgQUdDIGxvb3AgKi8KKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsICZkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlkYXRhIHw9IFNDVV9SQU1fQUdDX0NPTkZJR19ESVNBQkxFX1JGX0FHQ19fTTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ09ORklHX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwl9CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBTQ1VfUkFNX0FHQ19LSV9JTlZfSUZfUE9MX19NIDB4MjAwMAorCitzdGF0aWMgaW50IFNldEFnY0lmKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJICAgIHN0cnVjdCBTQ2ZnQWdjICpwQWdjQ2ZnLCBib29sIGlzRFRWKQoreworCXUxNiBkYXRhID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgU0NmZ0FnYyAqcFJmQWdjU2V0dGluZ3M7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3dpdGNoIChwQWdjQ2ZnLT5jdHJsTW9kZSkgeworCWNhc2UgRFJYS19BR0NfQ1RSTF9BVVRPOgorCisJCS8qIEVuYWJsZSBJRiBBR0MgREFDICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSAmPSB+SVFNX0FGX1NUREJZX1NUREJZX1RBR0NfSUZfU1RBTkRCWTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ09ORklHX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBFbmFibGUgU0NVIElGIEFHQyBsb29wICovCisJCWRhdGEgJj0gflNDVV9SQU1fQUdDX0NPTkZJR19ESVNBQkxFX0lGX0FHQ19fTTsKKworCQkvKiBQb2xhcml0eSAqLworCQlpZiAoc3RhdGUtPm1fSWZBZ2NQb2wpCisJCQlkYXRhIHw9IFNDVV9SQU1fQUdDX0NPTkZJR19JTlZfSUZfUE9MX19NOworCQllbHNlCisJCQlkYXRhICY9IH5TQ1VfUkFNX0FHQ19DT05GSUdfSU5WX0lGX1BPTF9fTTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ09ORklHX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIFNldCBzcGVlZCAodXNpbmcgY29tcGxlbWVudGFyeSByZWR1Y3Rpb24gdmFsdWUpICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0NVX1JBTV9BR0NfS0lfUkVEX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSAmPSB+U0NVX1JBTV9BR0NfS0lfUkVEX0lBR0NfUkVEX19NOworCQlkYXRhIHw9ICh+KHBBZ2NDZmctPnNwZWVkIDw8CisJCQkJU0NVX1JBTV9BR0NfS0lfUkVEX0lBR0NfUkVEX19CKQorCQkJCSYgU0NVX1JBTV9BR0NfS0lfUkVEX0lBR0NfUkVEX19NKTsKKworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19LSV9SRURfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJaWYgKElzUUFNKHN0YXRlKSkKKwkJCXBSZkFnY1NldHRpbmdzID0gJnN0YXRlLT5tX3FhbVJmQWdjQ2ZnOworCQllbHNlCisJCQlwUmZBZ2NTZXR0aW5ncyA9ICZzdGF0ZS0+bV9hdHZSZkFnY0NmZzsKKwkJaWYgKHBSZkFnY1NldHRpbmdzID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCS8qIFJlc3RvcmUgVE9QICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0lGX0lBQ0NVX0hJX1RHVF9NQVhfX0EsIHBSZkFnY1NldHRpbmdzLT50b3ApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCisJY2FzZSBEUlhLX0FHQ19DVFJMX1VTRVI6CisKKwkJLyogRW5hYmxlIElGIEFHQyBEQUMgKi8KKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBJUU1fQUZfU1REQllfX0EsICZkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlkYXRhICY9IH5JUU1fQUZfU1REQllfU1REQllfVEFHQ19JRl9TVEFOREJZOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfU1REQllfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsICZkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIERpc2FibGUgU0NVIElGIEFHQyBsb29wICovCisJCWRhdGEgfD0gU0NVX1JBTV9BR0NfQ09ORklHX0RJU0FCTEVfSUZfQUdDX19NOworCisJCS8qIFBvbGFyaXR5ICovCisJCWlmIChzdGF0ZS0+bV9JZkFnY1BvbCkKKwkJCWRhdGEgfD0gU0NVX1JBTV9BR0NfQ09ORklHX0lOVl9JRl9QT0xfX007CisJCWVsc2UKKwkJCWRhdGEgJj0gflNDVV9SQU1fQUdDX0NPTkZJR19JTlZfSUZfUE9MX19NOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DT05GSUdfX0EsIGRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogV3JpdGUgdmFsdWUgdG8gb3V0cHV0IHBpbiAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9ISV9UR1RfTUFYX19BLCBwQWdjQ2ZnLT5vdXRwdXRMZXZlbCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisKKwljYXNlIERSWEtfQUdDX0NUUkxfT0ZGOgorCisJCS8qIERpc2FibGUgSWYgQUdDIERBQyAqLworCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIElRTV9BRl9TVERCWV9fQSwgJmRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWRhdGEgfD0gSVFNX0FGX1NUREJZX1NUREJZX1RBR0NfSUZfU1RBTkRCWTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1NUREJZX19BLCBkYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIERpc2FibGUgU0NVIElGIEFHQyBsb29wICovCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ09ORklHX19BLCAmZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJZGF0YSB8PSBTQ1VfUkFNX0FHQ19DT05GSUdfRElTQUJMRV9JRl9BR0NfX007CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0NPTkZJR19fQSwgZGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisJfQkJLyogc3dpdGNoIChhZ2NTZXR0aW5nc0lmLT5jdHJsTW9kZSkgKi8KKworCS8qIGFsd2F5cyBzZXQgdGhlIHRvcCB0byBzdXBwb3J0CisJCWNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgaWYtbG9vcCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0lOR0FJTl9UR1RfTUlOX19BLCBwQWdjQ2ZnLT50b3ApOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgUmVhZElGQWdjKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTMyICpwVmFsdWUpCit7CisJdTE2IGFnY0RhY0x2bDsKKwlpbnQgc3RhdHVzOworCXUxNiBMZXZlbCA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBJUU1fQUZfQUdDX0lGX19BLCAmYWdjRGFjTHZsKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkqcFZhbHVlID0gMDsKKworCWlmIChhZ2NEYWNMdmwgPiBEUlhLX0FHQ19EQUNfT0ZGU0VUKQorCQlMZXZlbCA9IGFnY0RhY0x2bCAtIERSWEtfQUdDX0RBQ19PRkZTRVQ7CisJaWYgKExldmVsIDwgMTQwMDApCisJCSpwVmFsdWUgPSAoMTQwMDAgLSBMZXZlbCkgLyA0OworCWVsc2UKKwkJKnBWYWx1ZSA9IDA7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IEdldFFBTVNpZ25hbFRvTm9pc2Uoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHMzMiAqcFNpZ25hbFRvTm9pc2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTE2IHFhbVNsRXJyUG93ZXIgPSAwOwkvKiBhY2N1bS4gZXJyb3IgYmV0d2VlbgorCQkJCQlyYXcgYW5kIHNsaWNlZCBzeW1ib2xzICovCisJdTMyIHFhbVNsU2lnUG93ZXIgPSAwOwkvKiB1c2VkIGZvciBNRVIsIGRlcGVuZHMgb2YKKwkJCQkJUUFNIGNvbnN0ZWxsYXRpb24gKi8KKwl1MzIgcWFtU2xNZXIgPSAwOwkvKiBRQU0gTUVSICovCisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJLyogTUVSIGNhbGN1bGF0aW9uICovCisKKwkvKiBnZXQgdGhlIHJlZ2lzdGVyIHZhbHVlIG5lZWRlZCBmb3IgTUVSICovCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBRQU1fU0xfRVJSX1BPV0VSX19BLCAmcWFtU2xFcnJQb3dlcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoc3RhdGUtPnBhcmFtLnUucWFtLm1vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8xNjoKKwkJcWFtU2xTaWdQb3dlciA9IERSWEtfUUFNX1NMX1NJR19QT1dFUl9RQU0xNiA8PCAyOworCQlicmVhazsKKwljYXNlIFFBTV8zMjoKKwkJcWFtU2xTaWdQb3dlciA9IERSWEtfUUFNX1NMX1NJR19QT1dFUl9RQU0zMiA8PCAyOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJcWFtU2xTaWdQb3dlciA9IERSWEtfUUFNX1NMX1NJR19QT1dFUl9RQU02NCA8PCAyOworCQlicmVhazsKKwljYXNlIFFBTV8xMjg6CisJCXFhbVNsU2lnUG93ZXIgPSBEUlhLX1FBTV9TTF9TSUdfUE9XRVJfUUFNMTI4IDw8IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBRQU1fMjU2OgorCQlxYW1TbFNpZ1Bvd2VyID0gRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTI1NiA8PCAyOworCQlicmVhazsKKwl9CisKKwlpZiAocWFtU2xFcnJQb3dlciA+IDApIHsKKwkJcWFtU2xNZXIgPSBMb2cxMFRpbWVzMTAwKHFhbVNsU2lnUG93ZXIpIC0KKwkJCUxvZzEwVGltZXMxMDAoKHUzMikgcWFtU2xFcnJQb3dlcik7CisJfQorCSpwU2lnbmFsVG9Ob2lzZSA9IHFhbVNsTWVyOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBHZXREVkJUU2lnbmFsVG9Ob2lzZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsCisJCQkJczMyICpwU2lnbmFsVG9Ob2lzZSkKK3sKKwlpbnQgc3RhdHVzOworCXUxNiByZWdEYXRhID0gMDsKKwl1MzIgRXFSZWdUZFNxckVyckkgPSAwOworCXUzMiBFcVJlZ1RkU3FyRXJyUSA9IDA7CisJdTE2IEVxUmVnVGRTcXJFcnJFeHAgPSAwOworCXUxNiBFcVJlZ1RkVHBzUHdyT2ZzID0gMDsKKwl1MTYgRXFSZWdUZFJlcVNtYkNudCA9IDA7CisJdTMyIHRwc0NudCA9IDA7CisJdTMyIFNxckVycklRID0gMDsKKwl1MzIgYSA9IDA7CisJdTMyIGIgPSAwOworCXUzMiBjID0gMDsKKwl1MzIgaU1FUiA9IDA7CisJdTE2IHRyYW5zbWlzc2lvblBhcmFtcyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX0VRX1RPUF9URF9UUFNfUFdSX09GU19fQSwgJkVxUmVnVGRUcHNQd3JPZnMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgT0ZETV9FUV9UT1BfVERfUkVRX1NNQl9DTlRfX0EsICZFcVJlZ1RkUmVxU21iQ250KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIE9GRE1fRVFfVE9QX1REX1NRUl9FUlJfRVhQX19BLCAmRXFSZWdUZFNxckVyckV4cCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX0VRX1RPUF9URF9TUVJfRVJSX0lfX0EsICZyZWdEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBFeHRlbmQgU1FSX0VSUl9JIG9wZXJhdGlvbmFsIHJhbmdlICovCisJRXFSZWdUZFNxckVyckkgPSAodTMyKSByZWdEYXRhOworCWlmICgoRXFSZWdUZFNxckVyckV4cCA+IDExKSAmJgorCQkoRXFSZWdUZFNxckVyckkgPCAweDAwMDAwRkZGVUwpKSB7CisJCUVxUmVnVGRTcXJFcnJJICs9IDB4MDAwMTAwMDBVTDsKKwl9CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX0VRX1RPUF9URF9TUVJfRVJSX1FfX0EsICZyZWdEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBFeHRlbmQgU1FSX0VSUl9RIG9wZXJhdGlvbmFsIHJhbmdlICovCisJRXFSZWdUZFNxckVyclEgPSAodTMyKSByZWdEYXRhOworCWlmICgoRXFSZWdUZFNxckVyckV4cCA+IDExKSAmJgorCQkoRXFSZWdUZFNxckVyclEgPCAweDAwMDAwRkZGVUwpKQorCQlFcVJlZ1RkU3FyRXJyUSArPSAweDAwMDEwMDAwVUw7CisKKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX19BLCAmdHJhbnNtaXNzaW9uUGFyYW1zKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIENoZWNrIGlucHV0IGRhdGEgZm9yIE1FUiAqLworCisJLyogTUVSIGNhbGN1bGF0aW9uIChpbiAwLjEgZEIpIHdpdGhvdXQgbWF0aC5oICovCisJaWYgKChFcVJlZ1RkVHBzUHdyT2ZzID09IDApIHx8IChFcVJlZ1RkUmVxU21iQ250ID09IDApKQorCQlpTUVSID0gMDsKKwllbHNlIGlmICgoRXFSZWdUZFNxckVyckkgKyBFcVJlZ1RkU3FyRXJyUSkgPT0gMCkgeworCQkvKiBObyBlcnJvciBhdCBhbGwsIHRoaXMgbXVzdCBiZSB0aGUgSFcgcmVzZXQgdmFsdWUKKwkJCSogQXBwYXJlbnRseSBubyBmaXJzdCBtZWFzdXJlbWVudCB5ZXQKKwkJCSogU2V0IE1FUiB0byAwLjAgKi8KKwkJaU1FUiA9IDA7CisJfSBlbHNlIHsKKwkJU3FyRXJySVEgPSAoRXFSZWdUZFNxckVyckkgKyBFcVJlZ1RkU3FyRXJyUSkgPDwKKwkJCUVxUmVnVGRTcXJFcnJFeHA7CisJCWlmICgodHJhbnNtaXNzaW9uUGFyYW1zICYKKwkJCU9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX01PREVfX00pCisJCQk9PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9NT0RFXzJLKQorCQkJdHBzQ250ID0gMTc7CisJCWVsc2UKKwkJCXRwc0NudCA9IDY4OworCisJCS8qIElNRVIgPSAxMDAgKiBsb2cxMCAoeCkKKwkJCXdoZXJlIHggPSAoRXFSZWdUZFRwc1B3ck9mc14yICoKKwkJCUVxUmVnVGRSZXFTbWJDbnQgKiB0cHNDbnQpL1NxckVycklRCisKKwkJCT0+IElNRVIgPSBhICsgYiAtYworCQkJd2hlcmUgYSA9IDEwMCAqIGxvZzEwIChFcVJlZ1RkVHBzUHdyT2ZzXjIpCisJCQliID0gMTAwICogbG9nMTAgKEVxUmVnVGRSZXFTbWJDbnQgKiB0cHNDbnQpCisJCQljID0gMTAwICogbG9nMTAgKFNxckVycklRKQorCQkJKi8KKworCQkvKiBsb2coeCkgeCA9IDliaXRzICogOWJpdHMtPjE4IGJpdHMgICovCisJCWEgPSBMb2cxMFRpbWVzMTAwKEVxUmVnVGRUcHNQd3JPZnMgKgorCQkJCQlFcVJlZ1RkVHBzUHdyT2ZzKTsKKwkJLyogbG9nKHgpIHggPSAxNmJpdHMgKiA3Yml0cy0+MjMgYml0cyAgKi8KKwkJYiA9IExvZzEwVGltZXMxMDAoRXFSZWdUZFJlcVNtYkNudCAqIHRwc0NudCk7CisJCS8qIGxvZyh4KSB4ID0gKDE2Yml0cyArIDE2Yml0cykgPDwgMTUgLT4zMiBiaXRzICAqLworCQljID0gTG9nMTBUaW1lczEwMChTcXJFcnJJUSk7CisKKwkJaU1FUiA9IGEgKyBiOworCQkvKiBObyBuZWdhdGl2ZSBNRVIsIGNsaXAgdG8gemVybyAqLworCQlpZiAoaU1FUiA+IGMpCisJCQlpTUVSIC09IGM7CisJCWVsc2UKKwkJCWlNRVIgPSAwOworCX0KKwkqcFNpZ25hbFRvTm9pc2UgPSBpTUVSOworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBHZXRTaWduYWxUb05vaXNlKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgczMyICpwU2lnbmFsVG9Ob2lzZSkKK3sKKwlkcHJpbnRrKDEsICJcbiIpOworCisJKnBTaWduYWxUb05vaXNlID0gMDsKKwlzd2l0Y2ggKHN0YXRlLT5tX09wZXJhdGlvbk1vZGUpIHsKKwljYXNlIE9NX0RWQlQ6CisJCXJldHVybiBHZXREVkJUU2lnbmFsVG9Ob2lzZShzdGF0ZSwgcFNpZ25hbFRvTm9pc2UpOworCWNhc2UgT01fUUFNX0lUVV9BOgorCWNhc2UgT01fUUFNX0lUVV9DOgorCQlyZXR1cm4gR2V0UUFNU2lnbmFsVG9Ob2lzZShzdGF0ZSwgcFNpZ25hbFRvTm9pc2UpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgR2V0RFZCVFF1YWxpdHkoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCBzMzIgKnBRdWFsaXR5KQoreworCS8qIFNOUiBWYWx1ZXMgZm9yIHF1YXNpIGVycm9yZnJlZSByZWNlcHRpb24gcm9tIE5vcmRpZyAyLjIgKi8KKwlpbnQgc3RhdHVzID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlzdGF0aWMgczMyIFFFX1NOW10gPSB7CisJCTUxLAkJLyogUVBTSyAxLzIgKi8KKwkJNjksCQkvKiBRUFNLIDIvMyAqLworCQk3OSwJCS8qIFFQU0sgMy80ICovCisJCTg5LAkJLyogUVBTSyA1LzYgKi8KKwkJOTcsCQkvKiBRUFNLIDcvOCAqLworCQkxMDgsCQkvKiAxNi1RQU0gMS8yICovCisJCTEzMSwJCS8qIDE2LVFBTSAyLzMgKi8KKwkJMTQ2LAkJLyogMTYtUUFNIDMvNCAqLworCQkxNTYsCQkvKiAxNi1RQU0gNS82ICovCisJCTE2MCwJCS8qIDE2LVFBTSA3LzggKi8KKwkJMTY1LAkJLyogNjQtUUFNIDEvMiAqLworCQkxODcsCQkvKiA2NC1RQU0gMi8zICovCisJCTIwMiwJCS8qIDY0LVFBTSAzLzQgKi8KKwkJMjE2LAkJLyogNjQtUUFNIDUvNiAqLworCQkyMjUsCQkvKiA2NC1RQU0gNy84ICovCisJfTsKKworCSpwUXVhbGl0eSA9IDA7CisKKwlkbyB7CisJCXMzMiBTaWduYWxUb05vaXNlID0gMDsKKwkJdTE2IENvbnN0ZWxsYXRpb24gPSAwOworCQl1MTYgQ29kZVJhdGUgPSAwOworCQl1MzIgU2lnbmFsVG9Ob2lzZVJlbDsKKwkJdTMyIEJFUlF1YWxpdHk7CisKKwkJc3RhdHVzID0gR2V0RFZCVFNpZ25hbFRvTm9pc2Uoc3RhdGUsICZTaWduYWxUb05vaXNlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX0VRX1RPUF9URF9UUFNfQ09OU1RfX0EsICZDb25zdGVsbGF0aW9uKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJQ29uc3RlbGxhdGlvbiAmPSBPRkRNX0VRX1RPUF9URF9UUFNfQ09OU1RfX007CisKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX0VRX1RPUF9URF9UUFNfQ09ERV9IUF9fQSwgJkNvZGVSYXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJQ29kZVJhdGUgJj0gT0ZETV9FUV9UT1BfVERfVFBTX0NPREVfSFBfX007CisKKwkJaWYgKENvbnN0ZWxsYXRpb24gPiBPRkRNX0VRX1RPUF9URF9UUFNfQ09OU1RfNjRRQU0gfHwKKwkJICAgIENvZGVSYXRlID4gT0ZETV9FUV9UT1BfVERfVFBTX0NPREVfTFBfN184KQorCQkJYnJlYWs7CisJCVNpZ25hbFRvTm9pc2VSZWwgPSBTaWduYWxUb05vaXNlIC0KKwkJICAgIFFFX1NOW0NvbnN0ZWxsYXRpb24gKiA1ICsgQ29kZVJhdGVdOworCQlCRVJRdWFsaXR5ID0gMTAwOworCisJCWlmIChTaWduYWxUb05vaXNlUmVsIDwgLTcwKQorCQkJKnBRdWFsaXR5ID0gMDsKKwkJZWxzZSBpZiAoU2lnbmFsVG9Ob2lzZVJlbCA8IDMwKQorCQkJKnBRdWFsaXR5ID0gKChTaWduYWxUb05vaXNlUmVsICsgNzApICoKKwkJCQkgICAgIEJFUlF1YWxpdHkpIC8gMTAwOworCQllbHNlCisJCQkqcFF1YWxpdHkgPSBCRVJRdWFsaXR5OworCX0gd2hpbGUgKDApOworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBHZXREVkJDUXVhbGl0eShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHMzMiAqcFF1YWxpdHkpCit7CisJaW50IHN0YXR1cyA9IDA7CisJKnBRdWFsaXR5ID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlkbyB7CisJCXUzMiBTaWduYWxUb05vaXNlID0gMDsKKwkJdTMyIEJFUlF1YWxpdHkgPSAxMDA7CisJCXUzMiBTaWduYWxUb05vaXNlUmVsID0gMDsKKworCQlzdGF0dXMgPSBHZXRRQU1TaWduYWxUb05vaXNlKHN0YXRlLCAmU2lnbmFsVG9Ob2lzZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChzdGF0ZS0+cGFyYW0udS5xYW0ubW9kdWxhdGlvbikgeworCQljYXNlIFFBTV8xNjoKKwkJCVNpZ25hbFRvTm9pc2VSZWwgPSBTaWduYWxUb05vaXNlIC0gMjAwOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzMyOgorCQkJU2lnbmFsVG9Ob2lzZVJlbCA9IFNpZ25hbFRvTm9pc2UgLSAyMzA7CisJCQlicmVhazsJLyogTm90IGluIE5vckRpZyAqLworCQljYXNlIFFBTV82NDoKKwkJCVNpZ25hbFRvTm9pc2VSZWwgPSBTaWduYWxUb05vaXNlIC0gMjYwOworCQkJYnJlYWs7CisJCWNhc2UgUUFNXzEyODoKKwkJCVNpZ25hbFRvTm9pc2VSZWwgPSBTaWduYWxUb05vaXNlIC0gMjkwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgUUFNXzI1NjoKKwkJCVNpZ25hbFRvTm9pc2VSZWwgPSBTaWduYWxUb05vaXNlIC0gMzIwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoU2lnbmFsVG9Ob2lzZVJlbCA8IC03MCkKKwkJCSpwUXVhbGl0eSA9IDA7CisJCWVsc2UgaWYgKFNpZ25hbFRvTm9pc2VSZWwgPCAzMCkKKwkJCSpwUXVhbGl0eSA9ICgoU2lnbmFsVG9Ob2lzZVJlbCArIDcwKSAqCisJCQkJICAgICBCRVJRdWFsaXR5KSAvIDEwMDsKKwkJZWxzZQorCQkJKnBRdWFsaXR5ID0gQkVSUXVhbGl0eTsKKwl9IHdoaWxlICgwKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgR2V0UXVhbGl0eShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHMzMiAqcFF1YWxpdHkpCit7CisJZHByaW50aygxLCAiXG4iKTsKKworCXN3aXRjaCAoc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSkgeworCWNhc2UgT01fRFZCVDoKKwkJcmV0dXJuIEdldERWQlRRdWFsaXR5KHN0YXRlLCBwUXVhbGl0eSk7CisJY2FzZSBPTV9RQU1fSVRVX0E6CisJCXJldHVybiBHZXREVkJDUXVhbGl0eShzdGF0ZSwgcFF1YWxpdHkpOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIEZyZWUgZGF0YSByYW0gaW4gU0lPIEhJICovCisjZGVmaW5lIFNJT19ISV9SQV9SQU1fVVNSX0JFR0lOX19BIDB4NDIwMDQwCisjZGVmaW5lIFNJT19ISV9SQV9SQU1fVVNSX0VORF9fQSAgIDB4NDIwMDYwCisKKyNkZWZpbmUgRFJYS19ISV9BVE9NSUNfQlVGX1NUQVJUIChTSU9fSElfUkFfUkFNX1VTUl9CRUdJTl9fQSkKKyNkZWZpbmUgRFJYS19ISV9BVE9NSUNfQlVGX0VORCAgIChTSU9fSElfUkFfUkFNX1VTUl9CRUdJTl9fQSArIDcpCisjZGVmaW5lIERSWEtfSElfQVRPTUlDX1JFQUQgICAgICBTSU9fSElfUkFfUkFNX1BBUl8zX0FDUF9SV19SRUFECisjZGVmaW5lIERSWEtfSElfQVRPTUlDX1dSSVRFICAgICBTSU9fSElfUkFfUkFNX1BBUl8zX0FDUF9SV19XUklURQorCisjZGVmaW5lIERSWERBUF9GQVNJX0FERFIyQkxPQ0soYWRkcikgICgoKGFkZHIpID4+IDIyKSAmIDB4M0YpCisjZGVmaW5lIERSWERBUF9GQVNJX0FERFIyQkFOSyhhZGRyKSAgICgoKGFkZHIpID4+IDE2KSAmIDB4M0YpCisjZGVmaW5lIERSWERBUF9GQVNJX0FERFIyT0ZGU0VUKGFkZHIpICgoYWRkcikgJiAweDdGRkYpCisKK3N0YXRpYyBpbnQgQ29uZmlndXJlSTJDQnJpZGdlKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCBiRW5hYmxlQnJpZGdlKQoreworCWludCBzdGF0dXMgPSAtRUlOVkFMOworCisJZHByaW50aygxLCAiXG4iKTsKKworCWlmIChzdGF0ZS0+bV9EcnhrU3RhdGUgPT0gRFJYS19VTklOSVRJQUxJWkVEKQorCQlnb3RvIGVycm9yOworCWlmIChzdGF0ZS0+bV9EcnhrU3RhdGUgPT0gRFJYS19QT1dFUkVEX0RPV04pCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoc3RhdGUtPm5vX2kyY19icmlkZ2UpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0hJX1JBX1JBTV9QQVJfMV9fQSwgU0lPX0hJX1JBX1JBTV9QQVJfMV9QQVIxX1NFQ19LRVkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCWlmIChiRW5hYmxlQnJpZGdlKSB7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19ISV9SQV9SQU1fUEFSXzJfX0EsIFNJT19ISV9SQV9SQU1fUEFSXzJfQlJEX0NGR19DTE9TRUQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0hJX1JBX1JBTV9QQVJfMl9fQSwgU0lPX0hJX1JBX1JBTV9QQVJfMl9CUkRfQ0ZHX09QRU4pOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gSElfQ29tbWFuZChzdGF0ZSwgU0lPX0hJX1JBX1JBTV9DTURfQlJEQ1RSTCwgMCk7CisKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFNldFByZVNhdyhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsCisJCSAgICAgc3RydWN0IFNDZmdQcmVTYXcgKnBQcmVTYXdDZmcpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJaWYgKChwUHJlU2F3Q2ZnID09IE5VTEwpCisJICAgIHx8IChwUHJlU2F3Q2ZnLT5yZWZlcmVuY2UgPiBJUU1fQUZfUERSRUZfX00pKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1BEUkVGX19BLCBwUHJlU2F3Q2ZnLT5yZWZlcmVuY2UpOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgQkxEaXJlY3RDbWQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MzIgdGFyZ2V0QWRkciwKKwkJICAgICAgIHUxNiByb21PZmZzZXQsIHUxNiBuck9mRWxlbWVudHMsIHUzMiB0aW1lT3V0KQoreworCXUxNiBibFN0YXR1cyA9IDA7CisJdTE2IG9mZnNldCA9ICh1MTYpICgodGFyZ2V0QWRkciA+PiAwKSAmIDB4MDBGRkZGKTsKKwl1MTYgYmxvY2tiYW5rID0gKHUxNikgKCh0YXJnZXRBZGRyID4+IDE2KSAmIDB4MDAwRkZGKTsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZW5kOworCisJZHByaW50aygxLCAiXG4iKTsKKworCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0JMX01PREVfX0EsIFNJT19CTF9NT0RFX0RJUkVDVCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0JMX1RHVF9IRFJfX0EsIGJsb2NrYmFuayk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0JMX1RHVF9BRERSX19BLCBvZmZzZXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19CTF9TUkNfQUREUl9fQSwgcm9tT2Zmc2V0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQkxfU1JDX0xFTl9fQSwgbnJPZkVsZW1lbnRzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQkxfRU5BQkxFX19BLCBTSU9fQkxfRU5BQkxFX09OKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWVuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVPdXQpOworCWRvIHsKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTSU9fQkxfU1RBVFVTX19BLCAmYmxTdGF0dXMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfSB3aGlsZSAoKGJsU3RhdHVzID09IDB4MSkgJiYgdGltZV9pc19hZnRlcl9qaWZmaWVzKGVuZCkpOworCWlmIChibFN0YXR1cyA9PSAweDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBTSU8gbm90IHJlYWR5XG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjI7CisJfQorZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworZXJyb3IyOgorCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworCit9CisKK3N0YXRpYyBpbnQgQURDU3luY01lYXN1cmVtZW50KHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgdTE2ICpjb3VudCkKK3sKKwl1MTYgZGF0YSA9IDA7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwkvKiBTdGFydCBtZWFzdXJlbWVudCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9DT01NX0VYRUNfX0EsIElRTV9BRl9DT01NX0VYRUNfQUNUSVZFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfU1RBUlRfTE9DS19fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkqY291bnQgPSAwOworCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX1BIQVNFMF9fQSwgJmRhdGEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCWlmIChkYXRhID09IDEyNykKKwkJKmNvdW50ID0gKmNvdW50ICsgMTsKKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIElRTV9BRl9QSEFTRTFfX0EsICZkYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlpZiAoZGF0YSA9PSAxMjcpCisJCSpjb3VudCA9ICpjb3VudCArIDE7CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBJUU1fQUZfUEhBU0UyX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJaWYgKGRhdGEgPT0gMTI3KQorCQkqY291bnQgPSAqY291bnQgKyAxOworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBBRENTeW5jaHJvbml6YXRpb24oc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCXUxNiBjb3VudCA9IDA7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlzdGF0dXMgPSBBRENTeW5jTWVhc3VyZW1lbnQoc3RhdGUsICZjb3VudCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoY291bnQgPT0gMSkgeworCQkvKiBUcnkgc2FtcGxpbmcgb24gYSBkaWZmcmVudCBlZGdlICovCisJCXUxNiBjbGtOZWcgPSAwOworCisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgSVFNX0FGX0NMS05FR19fQSwgJmNsa05lZyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJaWYgKChjbGtOZWcgfCBJUU1fQUZfQ0xLTkVHX0NMS05FR0RBVEFfX00pID09CisJCQlJUU1fQUZfQ0xLTkVHX0NMS05FR0RBVEFfQ0xLX0FEQ19EQVRBX1BPUykgeworCQkJY2xrTmVnICY9ICh+KElRTV9BRl9DTEtORUdfQ0xLTkVHREFUQV9fTSkpOworCQkJY2xrTmVnIHw9CisJCQkJSVFNX0FGX0NMS05FR19DTEtORUdEQVRBX0NMS19BRENfREFUQV9ORUc7CisJCX0gZWxzZSB7CisJCQljbGtOZWcgJj0gKH4oSVFNX0FGX0NMS05FR19DTEtORUdEQVRBX19NKSk7CisJCQljbGtOZWcgfD0KKwkJCQlJUU1fQUZfQ0xLTkVHX0NMS05FR0RBVEFfQ0xLX0FEQ19EQVRBX1BPUzsKKwkJfQorCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfQ0xLTkVHX19BLCBjbGtOZWcpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IEFEQ1N5bmNNZWFzdXJlbWVudChzdGF0ZSwgJmNvdW50KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmIChjb3VudCA8IDIpCisJCXN0YXR1cyA9IC1FSU5WQUw7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBTZXRGcmVxdWVuY3lTaGlmdGVyKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICB1MTYgaW50ZXJtZWRpYXRlRnJlcWtIeiwKKwkJCSAgICAgICBzMzIgdHVuZXJGcmVxT2Zmc2V0LCBib29sIGlzRFRWKQoreworCWJvb2wgc2VsZWN0UG9zSW1hZ2UgPSBmYWxzZTsKKwl1MzIgcmZGcmVxUmVzaWR1YWwgPSB0dW5lckZyZXFPZmZzZXQ7CisJdTMyIGZtRnJlcXVlbmN5U2hpZnQgPSAwOworCWJvb2wgdHVuZXJNaXJyb3IgPSAhc3RhdGUtPm1fYk1pcnJvckZyZXFTcGVjdDsKKwl1MzIgYWRjRnJlcTsKKwlib29sIGFkY0ZsaXA7CisJaW50IHN0YXR1czsKKwl1MzIgaWZGcmVxQWN0dWFsOworCXUzMiBzYW1wbGluZ0ZyZXF1ZW5jeSA9ICh1MzIpIChzdGF0ZS0+bV9zeXNDbG9ja0ZyZXEgLyAzKTsKKwl1MzIgZnJlcXVlbmN5U2hpZnQ7CisJYm9vbCBpbWFnZVRvU2VsZWN0OworCisJZHByaW50aygxLCAiXG4iKTsKKworCS8qCisJICAgUHJvZ3JhbSBmcmVxdWVuY3kgc2hpZnRlcgorCSAgIE5vIG5lZWQgdG8gYWNjb3VudCBmb3IgbWlycm9yaW5nIG9uIFJGCisJICovCisJaWYgKGlzRFRWKSB7CisJCWlmICgoc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSA9PSBPTV9RQU1fSVRVX0EpIHx8CisJCSAgICAoc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSA9PSBPTV9RQU1fSVRVX0MpIHx8CisJCSAgICAoc3RhdGUtPm1fT3BlcmF0aW9uTW9kZSA9PSBPTV9EVkJUKSkKKwkJCXNlbGVjdFBvc0ltYWdlID0gdHJ1ZTsKKwkJZWxzZQorCQkJc2VsZWN0UG9zSW1hZ2UgPSBmYWxzZTsKKwl9CisJaWYgKHR1bmVyTWlycm9yKQorCQkvKiB0dW5lciBkb2Vzbid0IG1pcnJvciAqLworCQlpZkZyZXFBY3R1YWwgPSBpbnRlcm1lZGlhdGVGcmVxa0h6ICsKKwkJICAgIHJmRnJlcVJlc2lkdWFsICsgZm1GcmVxdWVuY3lTaGlmdDsKKwllbHNlCisJCS8qIHR1bmVyIG1pcnJvcnMgKi8KKwkJaWZGcmVxQWN0dWFsID0gaW50ZXJtZWRpYXRlRnJlcWtIeiAtCisJCSAgICByZkZyZXFSZXNpZHVhbCAtIGZtRnJlcXVlbmN5U2hpZnQ7CisJaWYgKGlmRnJlcUFjdHVhbCA+IHNhbXBsaW5nRnJlcXVlbmN5IC8gMikgeworCQkvKiBhZGMgbWlycm9ycyAqLworCQlhZGNGcmVxID0gc2FtcGxpbmdGcmVxdWVuY3kgLSBpZkZyZXFBY3R1YWw7CisJCWFkY0ZsaXAgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIGFkYyBkb2Vzbid0IG1pcnJvciAqLworCQlhZGNGcmVxID0gaWZGcmVxQWN0dWFsOworCQlhZGNGbGlwID0gZmFsc2U7CisJfQorCisJZnJlcXVlbmN5U2hpZnQgPSBhZGNGcmVxOworCWltYWdlVG9TZWxlY3QgPSBzdGF0ZS0+bV9yZm1pcnJvciBeIHR1bmVyTWlycm9yIF4KKwkgICAgYWRjRmxpcCBeIHNlbGVjdFBvc0ltYWdlOworCXN0YXRlLT5tX0lxbUZzUmF0ZU9mcyA9CisJICAgIEZyYWMyOGEoKGZyZXF1ZW5jeVNoaWZ0KSwgc2FtcGxpbmdGcmVxdWVuY3kpOworCisJaWYgKGltYWdlVG9TZWxlY3QpCisJCXN0YXRlLT5tX0lxbUZzUmF0ZU9mcyA9IH5zdGF0ZS0+bV9JcW1Gc1JhdGVPZnMgKyAxOworCisJLyogUHJvZ3JhbSBmcmVxdWVuY3kgc2hpZnRlciB3aXRoIHR1bmVyIG9mZnNldCBjb21wZW5zYXRpb24gKi8KKwkvKiBmcmVxdWVuY3lTaGlmdCArPSB0dW5lckZyZXFPZmZzZXQ7IFRPRE8gKi8KKwlzdGF0dXMgPSB3cml0ZTMyKHN0YXRlLCBJUU1fRlNfUkFURV9PRlNfTE9fX0EsCisJCQkgc3RhdGUtPm1fSXFtRnNSYXRlT2ZzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBJbml0QUdDKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCBpc0RUVikKK3sKKwl1MTYgaW5nYWluVGd0ID0gMDsKKwl1MTYgaW5nYWluVGd0TWluID0gMDsKKwl1MTYgaW5nYWluVGd0TWF4ID0gMDsKKwl1MTYgY2xwQ3ljbGVuID0gMDsKKwl1MTYgY2xwU3VtTWluID0gMDsKKwl1MTYgY2xwRGlyVG8gPSAwOworCXUxNiBzbnNTdW1NaW4gPSAwOworCXUxNiBzbnNTdW1NYXggPSAwOworCXUxNiBjbHBTdW1NYXggPSAwOworCXUxNiBzbnNEaXJUbyA9IDA7CisJdTE2IGtpSW5uZXJnYWluTWluID0gMDsKKwl1MTYgaWZJYWNjdUhpVGd0ID0gMDsKKwl1MTYgaWZJYWNjdUhpVGd0TWluID0gMDsKKwl1MTYgaWZJYWNjdUhpVGd0TWF4ID0gMDsKKwl1MTYgZGF0YSA9IDA7CisJdTE2IGZhc3RDbHBDdHJsRGVsYXkgPSAwOworCXUxNiBjbHBDdHJsTW9kZSA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJLyogQ29tbW9uIHNldHRpbmdzICovCisJc25zU3VtTWF4ID0gMTAyMzsKKwlpZklhY2N1SGlUZ3RNaW4gPSAyMDQ3OworCWNscEN5Y2xlbiA9IDUwMDsKKwljbHBTdW1NYXggPSAxMDIzOworCisJLyogQUdDSW5pdCgpIG5vdCBhdmFpbGFibGUgZm9yIERWQlQ7IGluaXQgZG9uZSBpbiBtaWNyb2NvZGUgKi8KKwlpZiAoIUlzUUFNKHN0YXRlKSkgeworCQlwcmludGsoS0VSTl9FUlIgImRyeGs6ICVzOiBtb2RlICVkIGlzIG5vdCBEVkItQ1xuIiwgX19mdW5jX18sIHN0YXRlLT5tX09wZXJhdGlvbk1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRTogQW5hbG9nIFRWIEFHQyByZXF1aXJlIGRpZmZlcmVudCBzZXR0aW5ncyAqLworCisJLyogU3RhbmRhcmQgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKwljbHBTdW1NaW4gPSA4OworCWNscERpclRvID0gKHUxNikgLTk7CisJY2xwQ3RybE1vZGUgPSAwOworCXNuc1N1bU1pbiA9IDg7CisJc25zRGlyVG8gPSAodTE2KSAtOTsKKwlraUlubmVyZ2Fpbk1pbiA9ICh1MTYpIC0xMDMwOworCWlmSWFjY3VIaVRndE1heCA9IDB4MjM4MDsKKwlpZklhY2N1SGlUZ3QgPSAweDIzODA7CisJaW5nYWluVGd0TWluID0gMHgwNTExOworCWluZ2FpblRndCA9IDB4MDUxMTsKKwlpbmdhaW5UZ3RNYXggPSA1MTE5OworCWZhc3RDbHBDdHJsRGVsYXkgPSBzdGF0ZS0+bV9xYW1JZkFnY0NmZy5GYXN0Q2xpcEN0cmxEZWxheTsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0ZBU1RfQ0xQX0NUUkxfREVMQVlfX0EsIGZhc3RDbHBDdHJsRGVsYXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ0xQX0NUUkxfTU9ERV9fQSwgY2xwQ3RybE1vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0lOR0FJTl9UR1RfX0EsIGluZ2FpblRndCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfSU5HQUlOX1RHVF9NSU5fX0EsIGluZ2FpblRndE1pbik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfSU5HQUlOX1RHVF9NQVhfX0EsIGluZ2FpblRndE1heCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfSUZfSUFDQ1VfSElfVEdUX01JTl9fQSwgaWZJYWNjdUhpVGd0TWluKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9ISV9UR1RfTUFYX19BLCBpZklhY2N1SGlUZ3RNYXgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0lGX0lBQ0NVX0hJX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9MT19fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfUkZfSUFDQ1VfSElfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX1JGX0lBQ0NVX0xPX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DTFBfU1VNX01BWF9fQSwgY2xwU3VtTWF4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfU1VNX01BWF9fQSwgc25zU3VtTWF4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0tJX0lOTkVSR0FJTl9NSU5fX0EsIGtpSW5uZXJnYWluTWluKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9ISV9UR1RfX0EsIGlmSWFjY3VIaVRndCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfQ0xQX0NZQ0xFTl9fQSwgY2xwQ3ljbGVuKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX1JGX1NOU19ERVZfTUFYX19BLCAxMDIzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19SRl9TTlNfREVWX01JTl9fQSwgKHUxNikgLTEwMjMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0ZBU1RfU05TX0NUUkxfREVMQVlfX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0tJX01BWE1JTkdBSU5fVEhfX0EsIDIwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DTFBfU1VNX01JTl9fQSwgY2xwU3VtTWluKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfU1VNX01JTl9fQSwgc25zU3VtTWluKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19DTFBfRElSX1RPX19BLCBjbHBEaXJUbyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfU05TX0RJUl9UT19fQSwgc25zRGlyVG8pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0tJX01JTkdBSU5fX0EsIDB4N2ZmZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfS0lfTUFYR0FJTl9fQSwgMHgwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19LSV9NSU5fX0EsIDB4MDExNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfS0lfTUFYX19BLCAweDA2NTcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0NMUF9TVU1fX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0NMUF9DWUNDTlRfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0NMUF9ESVJfV0RfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0NMUF9ESVJfU1RQX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfU1VNX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfQ1lDQ05UX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfRElSX1dEX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19TTlNfRElSX1NUUF9fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfU05TX0NZQ0xFTl9fQSwgNTAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19LSV9DWUNMRU5fX0EsIDUwMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJbml0aWFsaXplIGlubmVyLWxvb3AgS0kgZ2FpbiBmYWN0b3JzICovCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19LSV9fQSwgJmRhdGEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJZGF0YSA9IDB4MDY1NzsKKwlkYXRhICY9IH5TQ1VfUkFNX0FHQ19LSV9SRl9fTTsKKwlkYXRhIHw9IChEUlhLX0tJX1JBR0NfUUFNIDw8IFNDVV9SQU1fQUdDX0tJX1JGX19CKTsKKwlkYXRhICY9IH5TQ1VfUkFNX0FHQ19LSV9JRl9fTTsKKwlkYXRhIHw9IChEUlhLX0tJX0lBR0NfUUFNIDw8IFNDVV9SQU1fQUdDX0tJX0lGX19CKTsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fQUdDX0tJX19BLCBkYXRhKTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IERWQlRRQU1HZXRBY2NQa3RFcnIoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MTYgKnBhY2tldEVycikKK3sKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiXG4iKTsKKwlpZiAocGFja2V0RXJyID09IE5VTEwpCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fRkVDX0FDQ1VNX1BLVF9GQUlMVVJFU19fQSwgMCk7CisJZWxzZQorCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNDVV9SQU1fRkVDX0FDQ1VNX1BLVF9GQUlMVVJFU19fQSwgcGFja2V0RXJyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBEVkJUU2NDb21tYW5kKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSB1MTYgY21kLCB1MTYgc3ViY21kLAorCQkJIHUxNiBwYXJhbTAsIHUxNiBwYXJhbTEsIHUxNiBwYXJhbTIsCisJCQkgdTE2IHBhcmFtMywgdTE2IHBhcmFtNCkKK3sKKwl1MTYgY3VyQ21kID0gMDsKKwl1MTYgZXJyQ29kZSA9IDA7CisJdTE2IHJldHJ5Q250ID0gMDsKKwl1MTYgc2NFeGVjID0gMDsKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiXG4iKTsKKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIE9GRE1fU0NfQ09NTV9FWEVDX19BLCAmc2NFeGVjKTsKKwlpZiAoc2NFeGVjICE9IDEpIHsKKwkJLyogU0MgaXMgbm90IHJ1bm5pbmcgKi8KKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBXYWl0IHVudGlsIHNjIGlzIHJlYWR5IHRvIHJlY2VpdmUgY29tbWFuZCAqLworCXJldHJ5Q250ID0gMDsKKwlkbyB7CisJCW1zbGVlcCgxKTsKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9DTURfX0EsICZjdXJDbWQpOworCQlyZXRyeUNudCsrOworCX0gd2hpbGUgKChjdXJDbWQgIT0gMCkgJiYgKHJldHJ5Q250IDwgRFJYS19NQVhfUkVUUklFUykpOworCWlmIChyZXRyeUNudCA+PSBEUlhLX01BWF9SRVRSSUVTICYmIChzdGF0dXMgPCAwKSkKKwkJZ290byBlcnJvcjsKKworCS8qIFdyaXRlIHN1Yi1jb21tYW5kICovCisJc3dpdGNoIChjbWQpIHsKKwkJLyogQWxsIGNvbW1hbmRzIHVzaW5nIHN1Yi1jbWQgKi8KKwljYXNlIE9GRE1fU0NfUkFfUkFNX0NNRF9QUk9DX1NUQVJUOgorCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX1NFVF9QUkVGX1BBUkFNOgorCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX1BST0dSQU1fUEFSQU06CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0NNRF9BRERSX19BLCBzdWJjbWQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIERvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJfQorCisJLyogV3JpdGUgbmVlZGVkIHBhcmFtZXRlcnMgYW5kIHRoZSBjb21tYW5kICovCisJc3dpdGNoIChjbWQpIHsKKwkJLyogQWxsIGNvbW1hbmRzIHVzaW5nIDUgcGFyYW1ldGVycyAqLworCQkvKiBBbGwgY29tbWFuZHMgdXNpbmcgNCBwYXJhbWV0ZXJzICovCisJCS8qIEFsbCBjb21tYW5kcyB1c2luZyAzIHBhcmFtZXRlcnMgKi8KKwkJLyogQWxsIGNvbW1hbmRzIHVzaW5nIDIgcGFyYW1ldGVycyAqLworCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX1BST0NfU1RBUlQ6CisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfU0VUX1BSRUZfUEFSQU06CisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfUFJPR1JBTV9QQVJBTToKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fUEFSQU0xX19BLCBwYXJhbTEpOworCQkvKiBBbGwgY29tbWFuZHMgdXNpbmcgMSBwYXJhbWV0ZXJzICovCisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfU0VUX0VDSE9fVElNSU5HOgorCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX1VTRVJfSU86CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX1BBUkFNMF9fQSwgcGFyYW0wKTsKKwkJLyogQWxsIGNvbW1hbmRzIHVzaW5nIDAgcGFyYW1ldGVycyAqLworCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX0dFVF9PUF9QQVJBTToKKwljYXNlIE9GRE1fU0NfUkFfUkFNX0NNRF9OVUxMOgorCQkvKiBXcml0ZSBjb21tYW5kICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0NNRF9fQSwgY21kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5rbm93biBjb21tYW5kICovCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogV2FpdCB1bnRpbCBzYyBpcyByZWFkeSBwcm9jZXNzaW5nIGNvbW1hbmQgKi8KKwlyZXRyeUNudCA9IDA7CisJZG8geworCQltc2xlZXAoMSk7CisJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fQ01EX19BLCAmY3VyQ21kKTsKKwkJcmV0cnlDbnQrKzsKKwl9IHdoaWxlICgoY3VyQ21kICE9IDApICYmIChyZXRyeUNudCA8IERSWEtfTUFYX1JFVFJJRVMpKTsKKwlpZiAocmV0cnlDbnQgPj0gRFJYS19NQVhfUkVUUklFUyAmJiAoc3RhdHVzIDwgMCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBDaGVjayBmb3IgaWxsZWdhbCBjbWQgKi8KKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0NNRF9BRERSX19BLCAmZXJyQ29kZSk7CisJaWYgKGVyckNvZGUgPT0gMHhGRkZGKSB7CisJCS8qIGlsbGVnYWwgY29tbWFuZCAqLworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFJldHJlaXZlIHJlc3VsdHMgcGFyYW1ldGVycyBmcm9tIFNDICovCisJc3dpdGNoIChjbWQpIHsKKwkJLyogQWxsIGNvbW1hbmRzIHlpZWxkaW5nIDUgcmVzdWx0cyAqLworCQkvKiBBbGwgY29tbWFuZHMgeWllbGRpbmcgNCByZXN1bHRzICovCisJCS8qIEFsbCBjb21tYW5kcyB5aWVsZGluZyAzIHJlc3VsdHMgKi8KKwkJLyogQWxsIGNvbW1hbmRzIHlpZWxkaW5nIDIgcmVzdWx0cyAqLworCQkvKiBBbGwgY29tbWFuZHMgeWllbGRpbmcgMSByZXN1bHQgKi8KKwljYXNlIE9GRE1fU0NfUkFfUkFNX0NNRF9VU0VSX0lPOgorCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX0dFVF9PUF9QQVJBTToKKwkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9QQVJBTTBfX0EsICYocGFyYW0wKSk7CisJCS8qIEFsbCBjb21tYW5kcyB5aWVsZGluZyAwIHJlc3VsdHMgKi8KKwljYXNlIE9GRE1fU0NfUkFfUkFNX0NNRF9TRVRfRUNIT19USU1JTkc6CisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfU0VUX1RJTUVSOgorCWNhc2UgT0ZETV9TQ19SQV9SQU1fQ01EX1BST0NfU1RBUlQ6CisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfU0VUX1BSRUZfUEFSQU06CisJY2FzZSBPRkRNX1NDX1JBX1JBTV9DTURfUFJPR1JBTV9QQVJBTToKKwljYXNlIE9GRE1fU0NfUkFfUkFNX0NNRF9OVUxMOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIGNvbW1hbmQgKi8KKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQkJCS8qIHN3aXRjaCAoY21kLT5jbWQpICovCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBQb3dlclVwRFZCVChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJZW51bSBEUlhQb3dlck1vZGUgcG93ZXJNb2RlID0gRFJYX1BPV0VSX1VQOworCWludCBzdGF0dXM7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCXN0YXR1cyA9IEN0cmxQb3dlck1vZGUoc3RhdGUsICZwb3dlck1vZGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IERWQlRDdHJsU2V0SW5jRW5hYmxlKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwgYm9vbCAqZW5hYmxlZCkKK3sKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiXG4iKTsKKwlpZiAoKmVuYWJsZWQgPT0gdHJ1ZSkKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX0JZUEFTU0RFVF9fQSwgMCk7CisJZWxzZQorCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfQllQQVNTREVUX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBERUZBVUxUX0ZSX1RIUkVTXzhLICAgICA0MDAwCitzdGF0aWMgaW50IERWQlRDdHJsU2V0RnJFbmFibGUoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCBib29sICplbmFibGVkKQoreworCisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisJaWYgKCplbmFibGVkID09IHRydWUpIHsKKwkJLyogd3JpdGUgbWFzayB0byAxICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0ZSX1RIUkVTXzhLX19BLAorCQkJCSAgIERFRkFVTFRfRlJfVEhSRVNfOEspOworCX0gZWxzZSB7CisJCS8qIHdyaXRlIG1hc2sgdG8gMCAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9GUl9USFJFU184S19fQSwgMCk7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgRFZCVEN0cmxTZXRFY2hvVGhyZXNob2xkKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgc3RydWN0IERSWEtDZmdEdmJ0RWNob1RocmVzX3QgKmVjaG9UaHJlcykKK3sKKwl1MTYgZGF0YSA9IDA7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9FQ0hPX1RIUkVTX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzd2l0Y2ggKGVjaG9UaHJlcy0+ZmZ0TW9kZSkgeworCWNhc2UgRFJYX0ZGVE1PREVfMks6CisJCWRhdGEgJj0gfk9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfMktfX007CisJCWRhdGEgfD0gKChlY2hvVGhyZXMtPnRocmVzaG9sZCA8PAorCQkJT0ZETV9TQ19SQV9SQU1fRUNIT19USFJFU18yS19fQikKKwkJCSYgKE9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfMktfX00pKTsKKwkJYnJlYWs7CisJY2FzZSBEUlhfRkZUTU9ERV84SzoKKwkJZGF0YSAmPSB+T0ZETV9TQ19SQV9SQU1fRUNIT19USFJFU184S19fTTsKKwkJZGF0YSB8PSAoKGVjaG9UaHJlcy0+dGhyZXNob2xkIDw8CisJCQlPRkRNX1NDX1JBX1JBTV9FQ0hPX1RIUkVTXzhLX19CKQorCQkJJiAoT0ZETV9TQ19SQV9SQU1fRUNIT19USFJFU184S19fTSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9FQ0hPX1RIUkVTX19BLCBkYXRhKTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IERWQlRDdHJsU2V0U3FpU3BlZWQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIGVudW0gRFJYS0NmZ0R2YnRTcWlTcGVlZCAqc3BlZWQpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJc3dpdGNoICgqc3BlZWQpIHsKKwljYXNlIERSWEtfRFZCVF9TUUlfU1BFRURfRkFTVDoKKwljYXNlIERSWEtfRFZCVF9TUUlfU1BFRURfTUVESVVNOgorCWNhc2UgRFJYS19EVkJUX1NRSV9TUEVFRF9TTE9XOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGVycm9yOworCX0KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0ZFQ19QUkVfUlNfQkVSX0ZJTFRFUl9TSF9fQSwKKwkJCSAgICh1MTYpICpzcGVlZCk7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisqIFxicmllZiBBY3RpdmF0ZSBEVkJUIHNwZWNpZmljIHByZXNldHMKKyogXHBhcmFtIGRlbW9kIGluc3RhbmNlIG9mIGRlbW9kdWxhdG9yLgorKiBccmV0dXJuIERSWFN0YXR1c190LgorKgorKiBDYWxsZWQgaW4gRFZCVFNldFN0YW5kYXJkCisqCisqLworc3RhdGljIGludCBEVkJUQWN0aXZhdGVQcmVzZXRzKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCWJvb2wgc2V0aW5jZW5hYmxlID0gZmFsc2U7CisJYm9vbCBzZXRmcmVuYWJsZSA9IHRydWU7CisKKwlzdHJ1Y3QgRFJYS0NmZ0R2YnRFY2hvVGhyZXNfdCBlY2hvVGhyZXMyayA9IHsgMCwgRFJYX0ZGVE1PREVfMksgfTsKKwlzdHJ1Y3QgRFJYS0NmZ0R2YnRFY2hvVGhyZXNfdCBlY2hvVGhyZXM4ayA9IHsgMCwgRFJYX0ZGVE1PREVfOEsgfTsKKworCWRwcmludGsoMSwgIlxuIik7CisJc3RhdHVzID0gRFZCVEN0cmxTZXRJbmNFbmFibGUoc3RhdGUsICZzZXRpbmNlbmFibGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IERWQlRDdHJsU2V0RnJFbmFibGUoc3RhdGUsICZzZXRmcmVuYWJsZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gRFZCVEN0cmxTZXRFY2hvVGhyZXNob2xkKHN0YXRlLCAmZWNob1RocmVzMmspOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IERWQlRDdHJsU2V0RWNob1RocmVzaG9sZChzdGF0ZSwgJmVjaG9UaHJlczhrKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0FHQ19JTkdBSU5fVEdUX01BWF9fQSwgc3RhdGUtPm1fZHZidElmQWdjQ2ZnLkluZ2FpblRndE1heCk7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisqIFxicmllZiBJbml0aWFsaXplIGNoYW5uZWxzd2l0Y2gtaW5kZXBlbmRlbnQgc2V0dGluZ3MgZm9yIERWQlQuCisqIFxwYXJhbSBkZW1vZCBpbnN0YW5jZSBvZiBkZW1vZHVsYXRvci4KKyogXHJldHVybiBEUlhTdGF0dXNfdC4KKyoKKyogRm9yIFJPTSBjb2RlIGNoYW5uZWwgZmlsdGVyIHRhcHMgYXJlIGxvYWRlZCBmcm9tIHRoZSBib290bG9hZGVyLiBGb3IgbWljcm9jb2RlCisqIHRoZSBEVkItVCB0YXBzIGZyb20gdGhlIGRyeGtfZmlsdGVycy5oIGFyZSB1c2VkLgorKi8KK3N0YXRpYyBpbnQgU2V0RFZCVFN0YW5kYXJkKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSwKKwkJCSAgIGVudW0gT3BlcmF0aW9uTW9kZSBvTW9kZSkKK3sKKwl1MTYgY21kUmVzdWx0ID0gMDsKKwl1MTYgZGF0YSA9IDA7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlQb3dlclVwRFZCVChzdGF0ZSk7CisJLyogYWRkZWQgYW50ZW5uYSBzd2l0Y2ggKi8KKwlTd2l0Y2hBbnRlbm5hVG9EVkJUKHN0YXRlKTsKKwkvKiBzZW5kIE9GRE0gcmVzZXQgY29tbWFuZCAqLworCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLCBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfT0ZETSB8IFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfUkVTRVQsIDAsIE5VTEwsIDEsICZjbWRSZXN1bHQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogc2VuZCBPRkRNIHNldGVudiBjb21tYW5kICovCisJc3RhdHVzID0gc2N1X2NvbW1hbmQoc3RhdGUsIFNDVV9SQU1fQ09NTUFORF9TVEFOREFSRF9PRkRNIHwgU0NVX1JBTV9DT01NQU5EX0NNRF9ERU1PRF9TRVRfRU5WLCAwLCBOVUxMLCAxLCAmY21kUmVzdWx0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIHJlc2V0IGRhdGFwYXRoIGZvciBPRkRNLCBwcm9jZXNzb3JzIGZpcnN0ICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19DT01NX0VYRUNfX0EsIE9GRE1fU0NfQ09NTV9FWEVDX1NUT1ApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fTENfQ09NTV9FWEVDX19BLCBPRkRNX0xDX0NPTU1fRVhFQ19TVE9QKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ09NTV9FWEVDX19BLCBJUU1fQ09NTV9FWEVDX0JfU1RPUCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJUU0gc2V0dXAgKi8KKwkvKiBzeW5jaHJvbml6ZSBvbiBvZmRzdGF0ZS0+bV9mZXN0YXJ0ICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1VQRF9TRUxfX0EsIDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCS8qIHdpbmRvdyBzaXplIGZvciBjbGlwcGluZyBBREMgZGV0ZWN0aW9uICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX0NMUF9MRU5fX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCS8qIHdpbmRvdyBzaXplIGZvciBmb3Igc2Vuc2UgcHJlLVNBVyBkZXRlY3Rpb24gKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfU05TX0xFTl9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJLyogc2Vuc2UgdGhyZXNob2xkIGZvciBzZW5zZSBwcmUtU0FXIGRldGVjdGlvbiAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9BTVVYX19BLCBJUU1fQUZfQU1VWF9TSUdOQUwyQURDKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSBTZXRJcW1BZihzdGF0ZSwgdHJ1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfQUdDX1JGX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIEltcHVsc2Ugbm9pc2UgY3J1bmNoZXIgc2V0dXAgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfSU5DX0xDVF9fQSwgMCk7CS8qIGNydW5jaCBpbiBJUU1fQ0YgKi8KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfREVUX0xDVF9fQSwgMCk7CS8qIGRldGVjdCBpbiBJUU1fQ0YgKi8KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfV05EX0xFTl9fQSwgMyk7CS8qIHBlYWsgZGV0ZWN0b3Igd2luZG93IGxlbmd0aCAqLworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX1JDX1NUUkVUQ0hfX0EsIDE2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfT1VUX0VOQV9fQSwgMHg0KTsJLyogZW5hYmxlIG91dHB1dCAyICovCisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX0RTX0VOQV9fQSwgMHg0KTsJLyogZGVjaW1hdGUgb3V0cHV0IDIgKi8KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfU0NBTEVfX0EsIDE2MDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9TQ0FMRV9TSF9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiB2aXJ0dWFsIGNsaXBwaW5nIHRocmVzaG9sZCBmb3IgY2xpcHBpbmcgQURDIGRldGVjdGlvbiAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9DTFBfVEhfX0EsIDQ0OCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX0RBVEFUSF9fQSwgNDk1KTsJLyogY3J1bmNoaW5nIHRocmVzaG9sZCAqLworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gQkxDaGFpbkNtZChzdGF0ZSwgRFJYS19CTF9ST01fT0ZGU0VUX1RBUFNfRFZCVCwgRFJYS19CTENDX05SX0VMRU1FTlRTX1RBUFMsIERSWEtfQkxDX1RJTUVPVVQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX1BLRFRIX19BLCAyKTsJLyogcGVhayBkZXRlY3RvciB0aHJlc2hvbGQgKi8KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfUE9XX01FQVNfTEVOX19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBlbmFibGUgcG93ZXIgbWVhc3VyZW1lbnQgaW50ZXJydXB0ICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX0NPTU1fSU5UX01TS19fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NPTU1fRVhFQ19fQSwgSVFNX0NPTU1fRVhFQ19CX0FDVElWRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJUU0gd2lsbCBub3QgYmUgcmVzZXQgZnJvbSBoZXJlLCBzeW5jIEFEQyBhbmQgdXBkYXRlL2luaXQgQUdDICovCisJc3RhdHVzID0gQURDU3luY2hyb25pemF0aW9uKHN0YXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSBTZXRQcmVTYXcoc3RhdGUsICZzdGF0ZS0+bV9kdmJ0UHJlU2F3Q2ZnKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIEhhbHQgU0NVIHRvIGVuYWJsZSBzYWZlIG5vbi1hdG9taWMgYWNjZXNzZXMgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfQ09NTV9FWEVDX19BLCBTQ1VfQ09NTV9FWEVDX0hPTEQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gU2V0QWdjUmYoc3RhdGUsICZzdGF0ZS0+bV9kdmJ0UmZBZ2NDZmcsIHRydWUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IFNldEFnY0lmKHN0YXRlLCAmc3RhdGUtPm1fZHZidElmQWdjQ2ZnLCB0cnVlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldCBOb2lzZSBFc3RpbWF0aW9uIG5vdGNoIHdpZHRoIGFuZCBlbmFibGUgREMgZml4ICovCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9DT05GSUdfX0EsICZkYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlkYXRhIHw9IE9GRE1fU0NfUkFfUkFNX0NPTkZJR19ORV9GSVhfRU5BQkxFX19NOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0NPTkZJR19fQSwgZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBBY3RpdmF0ZSBTQ1UgdG8gZW5hYmxlIFNDVSBjb21tYW5kcyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9DT01NX0VYRUNfX0EsIFNDVV9DT01NX0VYRUNfQUNUSVZFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWlmICghc3RhdGUtPm1fRFJYS19BM19ST01fQ09ERSkgeworCQkvKiBBR0NJbml0KCkgaXMgbm90IGRvbmUgZm9yIERWQlQsIHNvIHNldCBhZ2NGYXN0Q2xpcEN0cmxEZWxheSAgKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9BR0NfRkFTVF9DTFBfQ1RSTF9ERUxBWV9fQSwgc3RhdGUtPm1fZHZidElmQWdjQ2ZnLkZhc3RDbGlwQ3RybERlbGF5KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIE9GRE1fU0Mgc2V0dXAgKi8KKyNpZmRlZiBDT01QSUxFX0ZPUl9OT05SVAorCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0JFX09QVF9ERUxBWV9fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fQkVfT1BUX0lOSVRfREVMQVlfX0EsIDIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworI2VuZGlmCisKKwkvKiBGRUMgc2V0dXAgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfRElfSU5QVVRfQ1RMX19BLCAxKTsJLyogT0ZETSBpbnB1dCAqLworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisKKyNpZmRlZiBDT01QSUxFX0ZPUl9OT05SVAorCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19SU19NRUFTVVJFTUVOVF9QRVJJT0RfX0EsIDB4NDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKyNlbHNlCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX1JTX01FQVNVUkVNRU5UX1BFUklPRF9fQSwgMHgxMDAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKyNlbmRpZgorCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19SU19NRUFTVVJFTUVOVF9QUkVTQ0FMRV9fQSwgMHgwMDAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldHVwIE1QRUcgYnVzICovCisJc3RhdHVzID0gTVBFR1RTRHRvU2V0dXAoc3RhdGUsIE9NX0RWQlQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCS8qIFNldCBEVkJUIFByZXNldHMgKi8KKwlzdGF0dXMgPSBEVkJUQWN0aXZhdGVQcmVzZXRzKHN0YXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKioKKyogXGJyaWVmIFN0YXJ0IGR2YnQgZGVtb2R1bGF0aW5nIGZvciBjaGFubmVsLgorKiBccGFyYW0gZGVtb2QgaW5zdGFuY2Ugb2YgZGVtb2R1bGF0b3IuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworc3RhdGljIGludCBEVkJUU3RhcnQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCXUxNiBwYXJhbTE7CisJaW50IHN0YXR1czsKKwkvKiBEUlhLT2ZkbVNjQ21kX3Qgc2NDbWQ7ICovCisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qIFN0YXJ0IGNvcnJlY3QgcHJvY2Vzc2VzIHRvIGdldCBpbiBsb2NrICovCisJLyogRFJYSzogT0ZETV9TQ19SQV9SQU1fUFJPQ19MT0NLVFJBQ0sgaXMgbm8gbG9uZ2VyIGluIG1hcGZpbGUhICovCisJcGFyYW0xID0gT0ZETV9TQ19SQV9SQU1fTE9DS1RSQUNLX01JTjsKKwlzdGF0dXMgPSBEVkJUU2NDb21tYW5kKHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9DTURfUFJPQ19TVEFSVCwgMCwgT0ZETV9TQ19SQV9SQU1fU1dfRVZFTlRfUlVOX05NQVNLX19NLCBwYXJhbTEsIDAsIDAsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCS8qIFN0YXJ0IEZFQyBPQyAqLworCXN0YXR1cyA9IE1QRUdUU1N0YXJ0KHN0YXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfQ09NTV9FWEVDX19BLCBGRUNfQ09NTV9FWEVDX0FDVElWRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKioKKyogXGJyaWVmIFNldCB1cCBkdmJ0IGRlbW9kdWxhdG9yIGZvciBjaGFubmVsLgorKiBccGFyYW0gZGVtb2QgaW5zdGFuY2Ugb2YgZGVtb2R1bGF0b3IuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqIC8vIG9yaWdpbmFsIERWQlRTZXRDaGFubmVsKCkKKyovCitzdGF0aWMgaW50IFNldERWQlQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MTYgSW50ZXJtZWRpYXRlRnJlcWtIeiwKKwkJICAgczMyIHR1bmVyRnJlcU9mZnNldCkKK3sKKwl1MTYgY21kUmVzdWx0ID0gMDsKKwl1MTYgdHJhbnNtaXNzaW9uUGFyYW1zID0gMDsKKwl1MTYgb3BlcmF0aW9uTW9kZSA9IDA7CisJdTMyIGlxbVJjUmF0ZU9mcyA9IDA7CisJdTMyIGJhbmR3aWR0aCA9IDA7CisJdTE2IHBhcmFtMTsKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygxLCAiSUYgPSVkLCBURk8gPSAlZFxuIiwgSW50ZXJtZWRpYXRlRnJlcWtIeiwgdHVuZXJGcmVxT2Zmc2V0KTsKKworCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLCBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfT0ZETSB8IFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfU1RPUCwgMCwgTlVMTCwgMSwgJmNtZFJlc3VsdCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBIYWx0IFNDVSB0byBlbmFibGUgc2FmZSBub24tYXRvbWljIGFjY2Vzc2VzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX0NPTU1fRVhFQ19fQSwgU0NVX0NPTU1fRVhFQ19IT0xEKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFN0b3AgcHJvY2Vzc29ycyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfQ09NTV9FWEVDX19BLCBPRkRNX1NDX0NPTU1fRVhFQ19TVE9QKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX0xDX0NPTU1fRVhFQ19fQSwgT0ZETV9MQ19DT01NX0VYRUNfU1RPUCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBNYW5kYXRvcnkgZml4LCBhbHdheXMgc3RvcCBDUCwgcmVxdWlyZWQgdG8gc2V0IHNwbCBvZmZzZXQgYmFjayB0bworCQloYXJkd2FyZSBkZWZhdWx0IChpcyBzZXQgdG8gMCBieSB1Y29kZSBkdXJpbmcgcGlsb3QgZGV0ZWN0aW9uICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9DUF9DT01NX0VYRUNfX0EsIE9GRE1fQ1BfQ09NTV9FWEVDX1NUT1ApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyo9PSBXcml0ZSBjaGFubmVsIHNldHRpbmdzIHRvIGRldmljZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCS8qIG1vZGUgKi8KKwlzd2l0Y2ggKHN0YXRlLT5wYXJhbS51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFX0FVVE86CisJZGVmYXVsdDoKKwkJb3BlcmF0aW9uTW9kZSB8PSBPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX01PREVfX007CisJCS8qIGZhbGwgdGhyb3VnaCAsIHRyeSBmaXJzdCBndWVzcyBEUlhfRkZUTU9ERV84SyAqLworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9NT0RFXzhLOworCQlicmVhazsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fTU9ERV8ySzsKKwkJYnJlYWs7CisJfQorCisJLyogZ3VhcmQgKi8KKwlzd2l0Y2ggKHN0YXRlLT5wYXJhbS51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwpIHsKKwlkZWZhdWx0OgorCWNhc2UgR1VBUkRfSU5URVJWQUxfQVVUTzoKKwkJb3BlcmF0aW9uTW9kZSB8PSBPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX0dVQVJEX19NOworCQkvKiBmYWxsIHRocm91Z2ggLCB0cnkgZmlyc3QgZ3Vlc3MgRFJYX0dVQVJEXzFESVY0ICovCisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzQ6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9HVUFSRF80OworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMzI6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9HVUFSRF8zMjsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fR1VBUkRfMTY7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fR1VBUkRfODsKKwkJYnJlYWs7CisJfQorCisJLyogaGllcmFyY2h5ICovCisJc3dpdGNoIChzdGF0ZS0+cGFyYW0udS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgeworCWNhc2UgSElFUkFSQ0hZX0FVVE86CisJY2FzZSBISUVSQVJDSFlfTk9ORToKKwlkZWZhdWx0OgorCQlvcGVyYXRpb25Nb2RlIHw9IE9GRE1fU0NfUkFfUkFNX09QX0FVVE9fSElFUl9fTTsKKwkJLyogZmFsbCB0aHJvdWdoICwgdHJ5IGZpcnN0IGd1ZXNzIFNDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX05PICovCisJCS8qIHRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX05POyAqLworCQkvKiBicmVhazsgKi8KKwljYXNlIEhJRVJBUkNIWV8xOgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fSElFUl9BMTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfMjoKKwkJdHJhbnNtaXNzaW9uUGFyYW1zIHw9IE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX0hJRVJfQTI7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzQ6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX0E0OworCQlicmVhazsKKwl9CisKKworCS8qIGNvbnN0ZWxsYXRpb24gKi8KKwlzd2l0Y2ggKHN0YXRlLT5wYXJhbS51Lm9mZG0uY29uc3RlbGxhdGlvbikgeworCWNhc2UgUUFNX0FVVE86CisJZGVmYXVsdDoKKwkJb3BlcmF0aW9uTW9kZSB8PSBPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX0NPTlNUX19NOworCQkvKiBmYWxsIHRocm91Z2ggLCB0cnkgZmlyc3QgZ3Vlc3MgRFJYX0NPTlNURUxMQVRJT05fUUFNNjQgKi8KKwljYXNlIFFBTV82NDoKKwkJdHJhbnNtaXNzaW9uUGFyYW1zIHw9IE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX0NPTlNUX1FBTTY0OworCQlicmVhazsKKwljYXNlIFFQU0s6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9DT05TVF9RUFNLOworCQlicmVhazsKKwljYXNlIFFBTV8xNjoKKwkJdHJhbnNtaXNzaW9uUGFyYW1zIHw9IE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX0NPTlNUX1FBTTE2OworCQlicmVhazsKKwl9CisjaWYgMAorCS8qIE5vIGhpZXJhY2hpY2FsIGNoYW5uZWxzIHN1cHBvcnQgaW4gQkRBICovCisJLyogUHJpb3JpdHkgKG9ubHkgZm9yIGhpZXJhcmNoaWNhbCBjaGFubmVscykgKi8KKwlzd2l0Y2ggKGNoYW5uZWwtPnByaW9yaXR5KSB7CisJY2FzZSBEUlhfUFJJT1JJVFlfTE9XOgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fUFJJT19MTzsKKwkJV1IxNihkZXZBZGRyLCBPRkRNX0VDX1NCX1BSSU9SX19BLAorCQkJT0ZETV9FQ19TQl9QUklPUl9MTyk7CisJCWJyZWFrOworCWNhc2UgRFJYX1BSSU9SSVRZX0hJR0g6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9QUklPX0hJOworCQlXUjE2KGRldkFkZHIsIE9GRE1fRUNfU0JfUFJJT1JfX0EsCisJCQlPRkRNX0VDX1NCX1BSSU9SX0hJKSk7CisJCWJyZWFrOworCWNhc2UgRFJYX1BSSU9SSVRZX1VOS05PV046CS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorI2Vsc2UKKwkvKiBTZXQgUHJpb3J0eSBoaWdoICovCisJdHJhbnNtaXNzaW9uUGFyYW1zIHw9IE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX1BSSU9fSEk7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9FQ19TQl9QUklPUl9fQSwgT0ZETV9FQ19TQl9QUklPUl9ISSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisjZW5kaWYKKworCS8qIGNvZGVyYXRlICovCisJc3dpdGNoIChzdGF0ZS0+cGFyYW0udS5vZmRtLmNvZGVfcmF0ZV9IUCkgeworCWNhc2UgRkVDX0FVVE86CisJZGVmYXVsdDoKKwkJb3BlcmF0aW9uTW9kZSB8PSBPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX1JBVEVfX007CisJCS8qIGZhbGwgdGhyb3VnaCAsIHRyeSBmaXJzdCBndWVzcyBEUlhfQ09ERVJBVEVfMkRJVjMgKi8KKwljYXNlIEZFQ18yXzM6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9SQVRFXzJfMzsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMV8yOgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fUkFURV8xXzI7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdHJhbnNtaXNzaW9uUGFyYW1zIHw9IE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX1JBVEVfM180OworCQlicmVhazsKKwljYXNlIEZFQ181XzY6CisJCXRyYW5zbWlzc2lvblBhcmFtcyB8PSBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9SQVRFXzVfNjsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl0cmFuc21pc3Npb25QYXJhbXMgfD0gT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fUkFURV83Xzg7CisJCWJyZWFrOworCX0KKworCS8qIFNBVyBmaWx0ZXIgc2VsZWN0aW9uOiBub3JtYWx5IG5vdCBuZWNlc2FycnksIGJ1dCBpZiB3YW50ZWQKKwkJdGhlIGFwcGxpY2F0aW9uIGNhbiBzZWxlY3QgYSBTQVcgZmlsdGVyIHZpYSB0aGUgZHJpdmVyIGJ5IHVzaW5nIFVJT3MgKi8KKwkvKiBGaXJzdCBkZXRlcm1pbmUgcmVhbCBiYW5kd2lkdGggKEh6KSAqLworCS8qIEFsc28gc2V0IGRlbGF5IGZvciBpbXB1bHNlIG5vaXNlIGNydW5jaGVyICovCisJLyogQWxzbyBzZXQgcGFyYW1ldGVycyBmb3IgRUNfT0MgZml4LCBub3RlIEVDX09DX1JFR19UTURfSElMX01BUiBpcyBjaGFuZ2VkCisJCWJ5IFNDIGZvciBmaXggZm9yIHNvbWUgOEssMS84IGd1YXJkIGJ1dCBpcyByZXN0b3JlZCBieSBJbml0RUMgYW5kIFJlc2V0RUMKKwkJZnVuY3Rpb25zICovCisJc3dpdGNoIChzdGF0ZS0+cGFyYW0udS5vZmRtLmJhbmR3aWR0aCkgeworCWNhc2UgQkFORFdJRFRIX0FVVE86CisJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CisJCWJhbmR3aWR0aCA9IERSWEtfQkFORFdJRFRIXzhNSFpfSU5fSFo7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX1NSTU1fRklYX0ZBQ1RfOEtfX0EsIDMwNTIpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCS8qIGNvY2hhbm5lbCBwcm90ZWN0aW9uIGZvciBQQUwgOCBNSHogKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF84S19QRVJfTEVGVF9fQSwgNyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF84S19QRVJfUklHSFRfX0EsIDcpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX05JX0lOSVRfMktfUEVSX0xFRlRfX0EsIDcpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX05JX0lOSVRfMktfUEVSX1JJR0hUX19BLCAxKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKwljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJYmFuZHdpZHRoID0gRFJYS19CQU5EV0lEVEhfN01IWl9JTl9IWjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fU1JNTV9GSVhfRkFDVF84S19fQSwgMzQ5MSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJLyogY29jaGFubmVsIHByb3RlY3Rpb24gZm9yIFBBTCA3IE1IeiAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9OSV9JTklUXzhLX1BFUl9MRUZUX19BLCA4KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9OSV9JTklUXzhLX1BFUl9SSUdIVF9fQSwgOCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF8yS19QRVJfTEVGVF9fQSwgNCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF8yS19QRVJfUklHSFRfX0EsIDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQliYW5kd2lkdGggPSBEUlhLX0JBTkRXSURUSF82TUhaX0lOX0haOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9TUk1NX0ZJWF9GQUNUXzhLX19BLCA0MDczKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQkvKiBjb2NoYW5uZWwgcHJvdGVjdGlvbiBmb3IgTlRTQyA2IE1IeiAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9OSV9JTklUXzhLX1BFUl9MRUZUX19BLCAxOSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF84S19QRVJfUklHSFRfX0EsIDE5KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9OSV9JTklUXzJLX1BFUl9MRUZUX19BLCAxNCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF8yS19QRVJfUklHSFRfX0EsIDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGlxbVJjUmF0ZU9mcyA9PSAwKSB7CisJCS8qIE5vdyBjb21wdXRlIElRTV9SQ19SQVRFX09GUworCQkJKCgoU3lzRnJlcS9CYW5kV2lkdGgpLzIpLzIpIC0xKSAqIDJeMjMpCisJCQk9PgorCQkJKChTeXNGcmVxIC8gQmFuZFdpZHRoKSAqICgyXjIxKSkgLSAoMl4yMykKKwkJCSovCisJCS8qIChTeXNGcmVxIC8gQmFuZFdpZHRoKSAqICgyXjI4KSAgKi8KKwkJLyogYXNzZXJ0IChNQVgoc3lzQ2xrKS9NSU4oYmFuZHdpZHRoKSA8IDE2KQorCQkJPT4gYXNzZXJ0KE1BWChzeXNDbGspIDwgMTYqTUlOKGJhbmR3aWR0aCkpCisJCQk9PiBhc3NlcnQoMTA5NzE0MjcyID4gNDgwMDAwMDApID0gdHJ1ZSBzbyBGcmFjIDI4IGNhbiBiZSB1c2VkICAqLworCQlpcW1SY1JhdGVPZnMgPSBGcmFjMjhhKCh1MzIpCisJCQkJCSgoc3RhdGUtPm1fc3lzQ2xvY2tGcmVxICoKKwkJCQkJCTEwMDApIC8gMyksIGJhbmR3aWR0aCk7CisJCS8qIChTeXNGcmVxIC8gQmFuZFdpZHRoKSAqICgyXjIxKSwgcm91bmRpbmcgYmVmb3JlIHRydW5jYXRpbmcgICovCisJCWlmICgoaXFtUmNSYXRlT2ZzICYgMHg3ZkwpID49IDB4NDApCisJCQlpcW1SY1JhdGVPZnMgKz0gMHg4MEw7CisJCWlxbVJjUmF0ZU9mcyA9IGlxbVJjUmF0ZU9mcyA+PiA3OworCQkvKiAoKFN5c0ZyZXEgLyBCYW5kV2lkdGgpICogKDJeMjEpKSAtICgyXjIzKSAgKi8KKwkJaXFtUmNSYXRlT2ZzID0gaXFtUmNSYXRlT2ZzIC0gKDEgPDwgMjMpOworCX0KKworCWlxbVJjUmF0ZU9mcyAmPQorCQkoKCgodTMyKSBJUU1fUkNfUkFURV9PRlNfSElfX00pIDw8CisJCUlRTV9SQ19SQVRFX09GU19MT19fVykgfCBJUU1fUkNfUkFURV9PRlNfTE9fX00pOworCXN0YXR1cyA9IHdyaXRlMzIoc3RhdGUsIElRTV9SQ19SQVRFX09GU19MT19fQSwgaXFtUmNSYXRlT2ZzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIEJhbmR3aWR0aCBzZXR0aW5nIGRvbmUgKi8KKworI2lmIDAKKwlzdGF0dXMgPSBEVkJUU2V0RnJlcXVlbmN5U2hpZnQoZGVtb2QsIGNoYW5uZWwsIHR1bmVyT2Zmc2V0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKyNlbmRpZgorCXN0YXR1cyA9IFNldEZyZXF1ZW5jeVNoaWZ0ZXIoc3RhdGUsIEludGVybWVkaWF0ZUZyZXFrSHosIHR1bmVyRnJlcU9mZnNldCwgdHJ1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKj09IFN0YXJ0IFNDLCB3cml0ZSBjaGFubmVsIHNldHRpbmdzIHRvIFNDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJLyogQWN0aXZhdGUgU0NVIHRvIGVuYWJsZSBTQ1UgY29tbWFuZHMgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfQ09NTV9FWEVDX19BLCBTQ1VfQ09NTV9FWEVDX0FDVElWRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBFbmFibGUgU0MgYWZ0ZXIgc2V0dGluZyBhbGwgb3RoZXIgcGFyYW1ldGVycyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIE9GRE1fU0NfQ09NTV9TVEFURV9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgT0ZETV9TQ19DT01NX0VYRUNfX0EsIDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisKKwlzdGF0dXMgPSBzY3VfY29tbWFuZChzdGF0ZSwgU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX09GRE0gfCBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX1NUQVJULCAwLCBOVUxMLCAxLCAmY21kUmVzdWx0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFdyaXRlIFNDIHBhcmFtZXRlciByZWdpc3RlcnMsIHNldCBhbGwgQVVUTyBmbGFncyBpbiBvcGVyYXRpb24gbW9kZSAqLworCXBhcmFtMSA9IChPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX01PREVfX00gfAorCQkJT0ZETV9TQ19SQV9SQU1fT1BfQVVUT19HVUFSRF9fTSB8CisJCQlPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX0NPTlNUX19NIHwKKwkJCU9GRE1fU0NfUkFfUkFNX09QX0FVVE9fSElFUl9fTSB8CisJCQlPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX1JBVEVfX00pOworCXN0YXR1cyA9IERWQlRTY0NvbW1hbmQoc3RhdGUsIE9GRE1fU0NfUkFfUkFNX0NNRF9TRVRfUFJFRl9QQVJBTSwKKwkJCQkwLCB0cmFuc21pc3Npb25QYXJhbXMsIHBhcmFtMSwgMCwgMCwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXN0YXRlLT5tX0RSWEtfQTNfUk9NX0NPREUpCisJCXN0YXR1cyA9IERWQlRDdHJsU2V0U3FpU3BlZWQoc3RhdGUsICZzdGF0ZS0+bV9zcWlTcGVlZCk7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKgorKiBcYnJpZWYgUmV0cmVpdmUgbG9jayBzdGF0dXMgLgorKiBccGFyYW0gZGVtb2QgICAgUG9pbnRlciB0byBkZW1vZHVsYXRvciBpbnN0YW5jZS4KKyogXHBhcmFtIGxvY2tTdGF0IFBvaW50ZXIgdG8gbG9jayBzdGF0dXMgc3RydWN0dXJlLgorKiBccmV0dXJuIERSWFN0YXR1c190LgorKgorKi8KK3N0YXRpYyBpbnQgR2V0RFZCVExvY2tTdGF0dXMoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MzIgKnBMb2NrU3RhdHVzKQoreworCWludCBzdGF0dXM7CisJY29uc3QgdTE2IG1wZWdfbG9ja19tYXNrID0gKE9GRE1fU0NfUkFfUkFNX0xPQ0tfTVBFR19fTSB8CisJCQkJICAgIE9GRE1fU0NfUkFfUkFNX0xPQ0tfRkVDX19NKTsKKwljb25zdCB1MTYgZmVjX2xvY2tfbWFzayA9IChPRkRNX1NDX1JBX1JBTV9MT0NLX0ZFQ19fTSk7CisJY29uc3QgdTE2IGRlbW9kX2xvY2tfbWFzayA9IE9GRE1fU0NfUkFfUkFNX0xPQ0tfREVNT0RfX007CisKKwl1MTYgU2NSYVJhbUxvY2sgPSAwOworCXUxNiBTY0NvbW1FeGVjID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwkqcExvY2tTdGF0dXMgPSBOT1RfTE9DS0VEOworCS8qIGRyaXZlciAwLjkuMCAqLworCS8qIENoZWNrIGlmIFNDIGlzIHJ1bm5pbmcgKi8KKwlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIE9GRE1fU0NfQ09NTV9FWEVDX19BLCAmU2NDb21tRXhlYyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZW5kOworCWlmIChTY0NvbW1FeGVjID09IE9GRE1fU0NfQ09NTV9FWEVDX1NUT1ApCisJCWdvdG8gZW5kOworCisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBPRkRNX1NDX1JBX1JBTV9MT0NLX19BLCAmU2NSYVJhbUxvY2spOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVuZDsKKworCWlmICgoU2NSYVJhbUxvY2sgJiBtcGVnX2xvY2tfbWFzaykgPT0gbXBlZ19sb2NrX21hc2spCisJCSpwTG9ja1N0YXR1cyA9IE1QRUdfTE9DSzsKKwllbHNlIGlmICgoU2NSYVJhbUxvY2sgJiBmZWNfbG9ja19tYXNrKSA9PSBmZWNfbG9ja19tYXNrKQorCQkqcExvY2tTdGF0dXMgPSBGRUNfTE9DSzsKKwllbHNlIGlmICgoU2NSYVJhbUxvY2sgJiBkZW1vZF9sb2NrX21hc2spID09IGRlbW9kX2xvY2tfbWFzaykKKwkJKnBMb2NrU3RhdHVzID0gREVNT0RfTE9DSzsKKwllbHNlIGlmIChTY1JhUmFtTG9jayAmIE9GRE1fU0NfUkFfUkFNX0xPQ0tfTk9EVkJUX19NKQorCQkqcExvY2tTdGF0dXMgPSBORVZFUl9MT0NLOworZW5kOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgUG93ZXJVcFFBTShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJZW51bSBEUlhQb3dlck1vZGUgcG93ZXJNb2RlID0gRFJYS19QT1dFUl9ET1dOX09GRE07CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisJc3RhdHVzID0gQ3RybFBvd2VyTW9kZShzdGF0ZSwgJnBvd2VyTW9kZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKiogUG93ZXIgRG93biBRQU0gKi8KK3N0YXRpYyBpbnQgUG93ZXJEb3duUUFNKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgZGF0YSA9IDA7CisJdTE2IGNtZFJlc3VsdDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTQ1VfQ09NTV9FWEVDX19BLCAmZGF0YSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJaWYgKGRhdGEgPT0gU0NVX0NPTU1fRVhFQ19BQ1RJVkUpIHsKKwkJLyoKKwkJCVNUT1AgZGVtb2R1bGF0b3IKKwkJCVFBTSBhbmQgSFcgYmxvY2tzCisJCQkqLworCQkvKiBzdG9wIGFsbCBjb21zdGF0ZS0+bV9leGVjICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9DT01NX0VYRUNfX0EsIFFBTV9DT01NX0VYRUNfU1RPUCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gc2N1X2NvbW1hbmQoc3RhdGUsIFNDVV9SQU1fQ09NTUFORF9TVEFOREFSRF9RQU0gfCBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX1NUT1AsIDAsIE5VTEwsIDEsICZjbWRSZXN1bHQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCS8qIHBvd2VyZG93biBBRkUgICAgICAgICAgICAgICAgICAgKi8KKwlzdGF0dXMgPSBTZXRJcW1BZihzdGF0ZSwgZmFsc2UpOworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKioKKyogXGJyaWVmIFNldHVwIG9mIHRoZSBRQU0gTWVhc3VyZW1lbnQgaW50ZXJ2YWxzIGZvciBzaWduYWwgcXVhbGl0eQorKiBccGFyYW0gZGVtb2QgaW5zdGFuY2Ugb2YgZGVtb2QuCisqIFxwYXJhbSBjb25zdGVsbGF0aW9uIGN1cnJlbnQgY29uc3RlbGxhdGlvbi4KKyogXHJldHVybiBEUlhTdGF0dXNfdC4KKyoKKyogIE5PVEU6CisqICBUYWtlIGludG8gYWNjb3VudCB0aGF0IGZvciBjZXJ0YWluIHNldHRpbmdzIHRoZSBlcnJvcmNvdW50ZXJzIGNhbiBvdmVyZmxvdy4KKyogIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjaGVjayB0aGlzLgorKgorKi8KK3N0YXRpYyBpbnQgU2V0UUFNTWVhc3VyZW1lbnQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLAorCQkJICAgICBlbnVtIEVEcnhrQ29uc3RlbGxhdGlvbiBjb25zdGVsbGF0aW9uLAorCQkJICAgICB1MzIgc3ltYm9sUmF0ZSkKK3sKKwl1MzIgZmVjQml0c0Rlc2lyZWQgPSAwOwkvKiBCRVIgYWNjb3VudGluZyBwZXJpb2QgKi8KKwl1MzIgZmVjUnNQZXJpb2RUb3RhbCA9IDA7CS8qIFRvdGFsIHBlcmlvZCAqLworCXUxNiBmZWNSc1ByZXNjYWxlID0gMDsJLyogUmVlZFNvbG9tb24gTWVhc3VyZW1lbnQgUHJlc2NhbGUgKi8KKwl1MTYgZmVjUnNQZXJpb2QgPSAwOwkvKiBWYWx1ZSBmb3IgY29ycmVzcG9uZGluZyBJMkMgcmVnaXN0ZXIgKi8KKwlpbnQgc3RhdHVzID0gMDsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlmZWNSc1ByZXNjYWxlID0gMTsKKwkvKiBmZWNCaXRzRGVzaXJlZCA9IHN5bWJvbFJhdGUgW2tIel0gKgorCQlGcmFtZUxlbmdodCBbbXNdICoKKwkJKGNvbnN0ZWxsYXRpb24gKyAxKSAqCisJCVN5bmNMb3NzICg9PSAxKSAqCisJCVZpdGVyYmlMb3NzICg9PTEpCisJCSovCisJc3dpdGNoIChjb25zdGVsbGF0aW9uKSB7CisJY2FzZSBEUlhfQ09OU1RFTExBVElPTl9RQU0xNjoKKwkJZmVjQml0c0Rlc2lyZWQgPSA0ICogc3ltYm9sUmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBEUlhfQ09OU1RFTExBVElPTl9RQU0zMjoKKwkJZmVjQml0c0Rlc2lyZWQgPSA1ICogc3ltYm9sUmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBEUlhfQ09OU1RFTExBVElPTl9RQU02NDoKKwkJZmVjQml0c0Rlc2lyZWQgPSA2ICogc3ltYm9sUmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBEUlhfQ09OU1RFTExBVElPTl9RQU0xMjg6CisJCWZlY0JpdHNEZXNpcmVkID0gNyAqIHN5bWJvbFJhdGU7CisJCWJyZWFrOworCWNhc2UgRFJYX0NPTlNURUxMQVRJT05fUUFNMjU2OgorCQlmZWNCaXRzRGVzaXJlZCA9IDggKiBzeW1ib2xSYXRlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWZlY0JpdHNEZXNpcmVkIC89IDEwMDA7CS8qIHN5bWJvbFJhdGUgW0h6XSAtPiBzeW1ib2xSYXRlIFtrSHpdICAqLworCWZlY0JpdHNEZXNpcmVkICo9IDUwMDsJLyogbWVhcy4gcGVyaW9kIFttc10gKi8KKworCS8qIEFubmV4IEEvQzogYml0cy9Sc1BlcmlvZCA9IDIwNCAqIDggPSAxNjMyICovCisJLyogZmVjUnNQZXJpb2RUb3RhbCA9IGZlY0JpdHNEZXNpcmVkIC8gMTYzMiAqLworCWZlY1JzUGVyaW9kVG90YWwgPSAoZmVjQml0c0Rlc2lyZWQgLyAxNjMyVUwpICsgMTsJLyogcm91Z2hseSBjZWlsICovCisKKwkvKiBmZWNSc1BlcmlvZFRvdGFsID0gIGZlY1JzUHJlc2NhbGUgKiBmZWNSc1BlcmlvZCAgKi8KKwlmZWNSc1ByZXNjYWxlID0gMSArICh1MTYpIChmZWNSc1BlcmlvZFRvdGFsID4+IDE2KTsKKwlpZiAoZmVjUnNQcmVzY2FsZSA9PSAwKSB7CisJCS8qIERpdmlkZSBieSB6ZXJvICh0aG91Z2ggaW1wb3NzaWJsZSkgKi8KKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwlmZWNSc1BlcmlvZCA9CisJCSgodTE2KSBmZWNSc1BlcmlvZFRvdGFsICsKKwkJKGZlY1JzUHJlc2NhbGUgPj4gMSkpIC8gZmVjUnNQcmVzY2FsZTsKKworCS8qIHdyaXRlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX1JTX01FQVNVUkVNRU5UX1BFUklPRF9fQSwgZmVjUnNQZXJpb2QpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIEZFQ19SU19NRUFTVVJFTUVOVF9QUkVTQ0FMRV9fQSwgZmVjUnNQcmVzY2FsZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX09DX1NOQ19GQUlMX1BFUklPRF9fQSwgZmVjUnNQZXJpb2QpOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgU2V0UUFNMTYoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKwkvKiBRQU0gRXF1YWxpemVyIFNldHVwICovCisJLyogRXF1YWxpemVyICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDBfX0EsIDEzNTE3KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMV9fQSwgMTM1MTcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQyX19BLCAxMzUxNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDNfX0EsIDEzNTE3KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFENF9fQSwgMTM1MTcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQ1X19BLCAxMzUxNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJLyogRGVjaXNpb24gRmVlZGJhY2sgRXF1YWxpemVyICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMF9fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMV9fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMl9fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOM19fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVONF9fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVONV9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fU1lfU1lOQ19IV01fX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TWU5DX0FXTV9fQSwgNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX1NZX1NZTkNfTFdNX19BLCAzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFFBTSBTbGljZXIgU2V0dGluZ3MgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9TTF9TSUdfUE9XRVJfX0EsIERSWEtfUUFNX1NMX1NJR19QT1dFUl9RQU0xNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBRQU0gTG9vcCBDb250cm9sbGVyIENvZWZpY2llbnRzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0FfRklORV9fQSwgMTUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NBX0NPQVJTRV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VQX0ZJTkVfX0EsIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9NRURJVU1fX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9DT0FSU0VfX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FSV9GSU5FX19BLCAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfTUVESVVNX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfQ09BUlNFX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9NRURJVU1fX0EsIDIwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9DT0FSU0VfX0EsIDgwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9NRURJVU1fX0EsIDIwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9DT0FSU0VfX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9GSU5FX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfTUVESVVNX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfQ09BUlNFX19BLCAzMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0YxX0ZJTkVfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGMV9NRURJVU1fX0EsIDEwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRjFfQ09BUlNFX19BLCAxMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKworCS8qIFFBTSBTdGF0ZSBNYWNoaW5lIChGU00pIFRocmVzaG9sZHMgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SVEhfX0EsIDE0MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0ZUSF9fQSwgNTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9DVEhfX0EsIDk1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUFRIX19BLCAxMjApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9RVEhfX0EsIDIzMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX01USF9fQSwgMTA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SQVRFX0xJTV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9DT1VOVF9MSU1fX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9GUkVRX0xJTV9fQSwgMjQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisKKwkvKiBRQU0gRlNNIFRyYWNraW5nIFBhcmFtZXRlcnMgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9NRURJQU5fQVZfTVVMVF9fQSwgKHUxNikgMTYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SQURJVVNfQVZfTElNSVRfX0EsICh1MTYpIDIyMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDFfX0EsICh1MTYpIDI1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUMl9fQSwgKHUxNikgNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDNfX0EsICh1MTYpIC0yNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDRfX0EsICh1MTYpIC02NSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDVfX0EsICh1MTYpIC0xMjcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisqIFxicmllZiBRQU0zMiBzcGVjaWZpYyBzZXR1cAorKiBccGFyYW0gZGVtb2QgaW5zdGFuY2Ugb2YgZGVtb2QuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworc3RhdGljIGludCBTZXRRQU0zMihzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJLyogUUFNIEVxdWFsaXplciBTZXR1cCAqLworCS8qIEVxdWFsaXplciAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQwX19BLCA2NzA3KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMV9fQSwgNjcwNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDJfX0EsIDY3MDcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQzX19BLCA2NzA3KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFENF9fQSwgNjcwNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDVfX0EsIDY3MDcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogRGVjaXNpb24gRmVlZGJhY2sgRXF1YWxpemVyICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMF9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMV9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOMl9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVOM19fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVONF9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0RRX1FVQUxfRlVONV9fQSwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fU1lfU1lOQ19IV01fX0EsIDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TWU5DX0FXTV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX1NZX1NZTkNfTFdNX19BLCAzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFFBTSBTbGljZXIgU2V0dGluZ3MgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX1NMX1NJR19QT1dFUl9fQSwgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTMyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIExvb3AgQ29udHJvbGxlciBDb2VmaWNpZW50cyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0FfRklORV9fQSwgMTUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NBX0NPQVJTRV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VQX0ZJTkVfX0EsIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9NRURJVU1fX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9DT0FSU0VfX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FSV9GSU5FX19BLCAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfTUVESVVNX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfQ09BUlNFX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9NRURJVU1fX0EsIDIwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9DT0FSU0VfX0EsIDgwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9NRURJVU1fX0EsIDIwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9DT0FSU0VfX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9GSU5FX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfTUVESVVNX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfQ09BUlNFX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0YxX0ZJTkVfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGMV9NRURJVU1fX0EsIDEwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRjFfQ09BUlNFX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIFN0YXRlIE1hY2hpbmUgKEZTTSkgVGhyZXNob2xkcyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1JUSF9fQSwgOTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9GVEhfX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fQ1RIX19BLCA4MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1BUSF9fQSwgMTAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUVRIX19BLCAxNzApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9NVEhfX0EsIDEwMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUkFURV9MSU1fX0EsIDQwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fQ09VTlRfTElNX19BLCA0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fRlJFUV9MSU1fX0EsIDEwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIEZTTSBUcmFja2luZyBQYXJhbWV0ZXJzICovCisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTUVESUFOX0FWX01VTFRfX0EsICh1MTYpIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUkFESVVTX0FWX0xJTUlUX19BLCAodTE2KSAxNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQxX19BLCAodTE2KSAtOCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDJfX0EsICh1MTYpIC0xNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDNfX0EsICh1MTYpIC0yNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDRfX0EsICh1MTYpIC01Nik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDVfX0EsICh1MTYpIC04Nik7CitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisqIFxicmllZiBRQU02NCBzcGVjaWZpYyBzZXR1cAorKiBccGFyYW0gZGVtb2QgaW5zdGFuY2Ugb2YgZGVtb2QuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworc3RhdGljIGludCBTZXRRQU02NChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qIFFBTSBFcXVhbGl6ZXIgU2V0dXAgKi8KKwkvKiBFcXVhbGl6ZXIgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMF9fQSwgMTMzMzYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQxX19BLCAxMjYxOCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDJfX0EsIDExOTg4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEM19fQSwgMTM4MDkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQ0X19BLCAxMzgwOSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDVfX0EsIDE1NjA5KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIERlY2lzaW9uIEZlZWRiYWNrIEVxdWFsaXplciAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjBfX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjFfX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjJfX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjNfX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjRfX0EsIDMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjVfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX1NZX1NZTkNfSFdNX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fU1lfU1lOQ19BV01fX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TWU5DX0xXTV9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBRQU0gU2xpY2VyIFNldHRpbmdzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fU0xfU0lHX1BPV0VSX19BLCBEUlhLX1FBTV9TTF9TSUdfUE9XRVJfUUFNNjQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisKKwkvKiBRQU0gTG9vcCBDb250cm9sbGVyIENvZWZpY2llbnRzICovCisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DQV9GSU5FX19BLCAxNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0FfQ09BUlNFX19BLCA0MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRVBfRklORV9fQSwgMTIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VQX01FRElVTV9fQSwgMjQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VQX0NPQVJTRV9fQSwgMjQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VJX0ZJTkVfX0EsIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FSV9NRURJVU1fX0EsIDE2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FSV9DT0FSU0VfX0EsIDE2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NQX0ZJTkVfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NQX01FRElVTV9fQSwgMzApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NQX0NPQVJTRV9fQSwgMTAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9NRURJVU1fX0EsIDMwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DSV9DT0FSU0VfX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9GSU5FX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfTUVESVVNX19BLCAyNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0ZfQ09BUlNFX19BLCA0OCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0YxX0ZJTkVfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGMV9NRURJVU1fX0EsIDEwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRjFfQ09BUlNFX19BLCAxMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKworCS8qIFFBTSBTdGF0ZSBNYWNoaW5lIChGU00pIFRocmVzaG9sZHMgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SVEhfX0EsIDEwMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0ZUSF9fQSwgNjApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9DVEhfX0EsIDgwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUFRIX19BLCAxMTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9RVEhfX0EsIDIwMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX01USF9fQSwgOTUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1JBVEVfTElNX19BLCA0MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0NPVU5UX0xJTV9fQSwgNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0ZSRVFfTElNX19BLCAxNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKworCS8qIFFBTSBGU00gVHJhY2tpbmcgUGFyYW1ldGVycyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX01FRElBTl9BVl9NVUxUX19BLCAodTE2KSAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1JBRElVU19BVl9MSU1JVF9fQSwgKHUxNikgMTQxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUMV9fQSwgKHUxNikgNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDJfX0EsICh1MTYpIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQzX19BLCAodTE2KSAtMTUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQ0X19BLCAodTE2KSAtNDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQ1X19BLCAodTE2KSAtODApOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisqIFxicmllZiBRQU0xMjggc3BlY2lmaWMgc2V0dXAKKyogXHBhcmFtIGRlbW9kOiBpbnN0YW5jZSBvZiBkZW1vZC4KKyogXHJldHVybiBEUlhTdGF0dXNfdC4KKyovCitzdGF0aWMgaW50IFNldFFBTTEyOChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qIFFBTSBFcXVhbGl6ZXIgU2V0dXAgKi8KKwkvKiBFcXVhbGl6ZXIgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMF9fQSwgNjU2NCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDFfX0EsIDY1OTgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQyX19BLCA2Mzk0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEM19fQSwgNjQwOSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDRfX0EsIDY2NTYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQ1X19BLCA3MjM4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIERlY2lzaW9uIEZlZWRiYWNrIEVxdWFsaXplciAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjBfX0EsIDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjFfX0EsIDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjJfX0EsIDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjNfX0EsIDYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjRfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9EUV9RVUFMX0ZVTjVfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX1NZX1NZTkNfSFdNX19BLCA2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fU1lfU1lOQ19BV01fX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TWU5DX0xXTV9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKworCS8qIFFBTSBTbGljZXIgU2V0dGluZ3MgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX1NMX1NJR19QT1dFUl9fQSwgRFJYS19RQU1fU0xfU0lHX1BPV0VSX1FBTTEyOCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKworCS8qIFFBTSBMb29wIENvbnRyb2xsZXIgQ29lZmljaWVudHMgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NBX0ZJTkVfX0EsIDE1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DQV9DT0FSU0VfX0EsIDQwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9GSU5FX19BLCAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRVBfTUVESVVNX19BLCAyNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRVBfQ09BUlNFX19BLCAyNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfRklORV9fQSwgMTIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VJX01FRElVTV9fQSwgMTYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VJX0NPQVJTRV9fQSwgMTYpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ1BfRklORV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ1BfTUVESVVNX19BLCA0MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ1BfQ09BUlNFX19BLCAxMjApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NJX0ZJTkVfX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NJX01FRElVTV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NJX0NPQVJTRV9fQSwgNjApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGX0ZJTkVfX0EsIDE2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9NRURJVU1fX0EsIDI1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9DT0FSU0VfX0EsIDY0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRjFfRklORV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0YxX01FRElVTV9fQSwgMTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGMV9DT0FSU0VfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisKKwkvKiBRQU0gU3RhdGUgTWFjaGluZSAoRlNNKSBUaHJlc2hvbGRzICovCisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUlRIX19BLCA1MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0ZUSF9fQSwgNjApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9DVEhfX0EsIDgwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUFRIX19BLCAxMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9RVEhfX0EsIDE0MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX01USF9fQSwgMTAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SQVRFX0xJTV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9DT1VOVF9MSU1fX0EsIDUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0ZSRVFfTElNX19BLCAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBRQU0gRlNNIFRyYWNraW5nIFBhcmFtZXRlcnMgKi8KKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9NRURJQU5fQVZfTVVMVF9fQSwgKHUxNikgOCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1JBRElVU19BVl9MSU1JVF9fQSwgKHUxNikgNjUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQxX19BLCAodTE2KSA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUMl9fQSwgKHUxNikgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDNfX0EsICh1MTYpIC0xKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUNF9fQSwgKHUxNikgLTEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUNV9fQSwgKHUxNikgLTIzKTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKgorKiBcYnJpZWYgUUFNMjU2IHNwZWNpZmljIHNldHVwCisqIFxwYXJhbSBkZW1vZDogaW5zdGFuY2Ugb2YgZGVtb2QuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworc3RhdGljIGludCBTZXRRQU0yNTYoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygxLCAiXG4iKTsKKwkvKiBRQU0gRXF1YWxpemVyIFNldHVwICovCisJLyogRXF1YWxpemVyICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDBfX0EsIDExNTAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMV9fQSwgMTIwODQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQyX19BLCAxMjU0Myk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDNfX0EsIDEyOTMxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFENF9fQSwgMTM2MjkpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQ1X19BLCAxNTM4NSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBEZWNpc2lvbiBGZWVkYmFjayBFcXVhbGl6ZXIgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU4wX19BLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU4xX19BLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU4yX19BLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU4zX19BLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU40X19BLCA2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fRFFfUVVBTF9GVU41X19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TWU5DX0hXTV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX1NZX1NZTkNfQVdNX19BLCA0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fU1lfU1lOQ19MV01fX0EsIDMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogUUFNIFNsaWNlciBTZXR0aW5ncyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fU0xfU0lHX1BPV0VSX19BLCBEUlhLX1FBTV9TTF9TSUdfUE9XRVJfUUFNMjU2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIExvb3AgQ29udHJvbGxlciBDb2VmaWNpZW50cyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0FfRklORV9fQSwgMTUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NBX0NPQVJTRV9fQSwgNDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0VQX0ZJTkVfX0EsIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9NRURJVU1fX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FUF9DT0FSU0VfX0EsIDI0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19FSV9GSU5FX19BLCAxMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfTUVESVVNX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfRUlfQ09BUlNFX19BLCAxNik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9GSU5FX19BLCA1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9NRURJVU1fX0EsIDUwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DUF9DT0FSU0VfX0EsIDI1MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0lfRklORV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0lfTUVESVVNX19BLCA1MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0lfQ09BUlNFX19BLCAxMjUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGX0ZJTkVfX0EsIDE2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9NRURJVU1fX0EsIDI1KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRl9DT0FSU0VfX0EsIDQ4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9MQ19DRjFfRklORV9fQSwgNSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fTENfQ0YxX01FRElVTV9fQSwgMTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0xDX0NGMV9DT0FSU0VfX0EsIDEwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIFN0YXRlIE1hY2hpbmUgKEZTTSkgVGhyZXNob2xkcyAqLworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1JUSF9fQSwgNTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9GVEhfX0EsIDYwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fQ1RIX19BLCA4MCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX1BUSF9fQSwgMTAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUVRIX19BLCAxNTApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9NVEhfX0EsIDExMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fUkFURV9MSU1fX0EsIDQwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fQ09VTlRfTElNX19BLCA0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fRlJFUV9MSU1fX0EsIDEyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCisJLyogUUFNIEZTTSBUcmFja2luZyBQYXJhbWV0ZXJzICovCisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTUVESUFOX0FWX01VTFRfX0EsICh1MTYpIDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9SQURJVVNfQVZfTElNSVRfX0EsICh1MTYpIDc0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUMV9fQSwgKHUxNikgMTgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQyX19BLCAodTE2KSAxMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDNfX0EsICh1MTYpIDcpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQ0X19BLCAodTE2KSAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUNV9fQSwgKHUxNikgLTgpOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qKgorKiBcYnJpZWYgUmVzZXQgUUFNIGJsb2NrLgorKiBccGFyYW0gZGVtb2Q6ICAgaW5zdGFuY2Ugb2YgZGVtb2QuCisqIFxwYXJhbSBjaGFubmVsOiBwb2ludGVyIHRvIGNoYW5uZWwgZGF0YS4KKyogXHJldHVybiBEUlhTdGF0dXNfdC4KKyovCitzdGF0aWMgaW50IFFBTVJlc2V0UUFNKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCXUxNiBjbWRSZXN1bHQ7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qIFN0b3AgUUFNIGNvbXN0YXRlLT5tX2V4ZWMgKi8KKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fQ09NTV9FWEVDX19BLCBRQU1fQ09NTV9FWEVDX1NUT1ApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gc2N1X2NvbW1hbmQoc3RhdGUsIFNDVV9SQU1fQ09NTUFORF9TVEFOREFSRF9RQU0gfCBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX1JFU0VULCAwLCBOVUxMLCAxLCAmY21kUmVzdWx0KTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKioKKyogXGJyaWVmIFNldCBRQU0gc3ltYm9scmF0ZS4KKyogXHBhcmFtIGRlbW9kOiAgIGluc3RhbmNlIG9mIGRlbW9kLgorKiBccGFyYW0gY2hhbm5lbDogcG9pbnRlciB0byBjaGFubmVsIGRhdGEuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworc3RhdGljIGludCBRQU1TZXRTeW1ib2xyYXRlKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwl1MzIgYWRjRnJlcXVlbmN5ID0gMDsKKwl1MzIgc3ltYkZyZXEgPSAwOworCXUzMiBpcW1SY1JhdGUgPSAwOworCXUxNiByYXRlc2VsID0gMDsKKwl1MzIgbGNTeW1iUmF0ZSA9IDA7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisJLyogU2VsZWN0ICYgY2FsY3VsYXRlIGNvcnJlY3QgSVFNIHJhdGUgKi8KKwlhZGNGcmVxdWVuY3kgPSAoc3RhdGUtPm1fc3lzQ2xvY2tGcmVxICogMTAwMCkgLyAzOworCXJhdGVzZWwgPSAwOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJkcnhrOiBTUiAlZFxuIiwgc3RhdGUtPnBhcmFtLnUucWFtLnN5bWJvbF9yYXRlKTsgKi8KKwlpZiAoc3RhdGUtPnBhcmFtLnUucWFtLnN5bWJvbF9yYXRlIDw9IDExODg3NTApCisJCXJhdGVzZWwgPSAzOworCWVsc2UgaWYgKHN0YXRlLT5wYXJhbS51LnFhbS5zeW1ib2xfcmF0ZSA8PSAyMzc3NTAwKQorCQlyYXRlc2VsID0gMjsKKwllbHNlIGlmIChzdGF0ZS0+cGFyYW0udS5xYW0uc3ltYm9sX3JhdGUgPD0gNDc1NTAwMCkKKwkJcmF0ZXNlbCA9IDE7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0ZEX1JBVEVTRUxfX0EsIHJhdGVzZWwpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyoKKwkJSXFtUmNSYXRlID0gKChGYWRjIC8gKHN5bWJvbHJhdGUgKiAoNDw8cmF0ZXNlbCkpKSAtIDEpICogKDE8PDIzKQorCQkqLworCXN5bWJGcmVxID0gc3RhdGUtPnBhcmFtLnUucWFtLnN5bWJvbF9yYXRlICogKDEgPDwgcmF0ZXNlbCk7CisJaWYgKHN5bWJGcmVxID09IDApIHsKKwkJLyogRGl2aWRlIGJ5IHplcm8gKi8KKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisJaXFtUmNSYXRlID0gKGFkY0ZyZXF1ZW5jeSAvIHN5bWJGcmVxKSAqICgxIDw8IDIxKSArCisJCShGcmFjMjhhKChhZGNGcmVxdWVuY3kgJSBzeW1iRnJlcSksIHN5bWJGcmVxKSA+PiA3KSAtCisJCSgxIDw8IDIzKTsKKwlzdGF0dXMgPSB3cml0ZTMyKHN0YXRlLCBJUU1fUkNfUkFURV9PRlNfTE9fX0EsIGlxbVJjUmF0ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdGUtPm1faXFtUmNSYXRlID0gaXFtUmNSYXRlOworCS8qCisJCUxjU3ltYkZyZXEgPSByb3VuZCAoLjEyNSAqICBzeW1ib2xyYXRlIC8gYWRjRnJlcSAqICgxPDwxNSkpCisJCSovCisJc3ltYkZyZXEgPSBzdGF0ZS0+cGFyYW0udS5xYW0uc3ltYm9sX3JhdGU7CisJaWYgKGFkY0ZyZXF1ZW5jeSA9PSAwKSB7CisJCS8qIERpdmlkZSBieSB6ZXJvICovCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCWxjU3ltYlJhdGUgPSAoc3ltYkZyZXEgLyBhZGNGcmVxdWVuY3kpICogKDEgPDwgMTIpICsKKwkJKEZyYWMyOGEoKHN5bWJGcmVxICUgYWRjRnJlcXVlbmN5KSwgYWRjRnJlcXVlbmN5KSA+PgorCQkxNik7CisJaWYgKGxjU3ltYlJhdGUgPiA1MTEpCisJCWxjU3ltYlJhdGUgPSA1MTE7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0xDX1NZTUJPTF9GUkVRX19BLCAodTE2KSBsY1N5bWJSYXRlKTsKKworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKgorKiBcYnJpZWYgR2V0IFFBTSBsb2NrIHN0YXR1cy4KKyogXHBhcmFtIGRlbW9kOiAgIGluc3RhbmNlIG9mIGRlbW9kLgorKiBccGFyYW0gY2hhbm5lbDogcG9pbnRlciB0byBjaGFubmVsIGRhdGEuCisqIFxyZXR1cm4gRFJYU3RhdHVzX3QuCisqLworCitzdGF0aWMgaW50IEdldFFBTUxvY2tTdGF0dXMoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlLCB1MzIgKnBMb2NrU3RhdHVzKQoreworCWludCBzdGF0dXM7CisJdTE2IFJlc3VsdFsyXSA9IHsgMCwgMCB9OworCisJZHByaW50aygxLCAiXG4iKTsKKwkqcExvY2tTdGF0dXMgPSBOT1RfTE9DS0VEOworCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLAorCQkJU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX1FBTSB8CisJCQlTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX0dFVF9MT0NLLCAwLCBOVUxMLCAyLAorCQkJUmVzdWx0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiAlcyBzdGF0dXMgPSAlMDh4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKworCWlmIChSZXN1bHRbMV0gPCBTQ1VfUkFNX1FBTV9MT0NLRURfTE9DS0VEX0RFTU9EX0xPQ0tFRCkgeworCQkvKiAweDAwMDAgTk9UIExPQ0tFRCAqLworCX0gZWxzZSBpZiAoUmVzdWx0WzFdIDwgU0NVX1JBTV9RQU1fTE9DS0VEX0xPQ0tFRF9MT0NLRUQpIHsKKwkJLyogMHg0MDAwIERFTU9EIExPQ0tFRCAqLworCQkqcExvY2tTdGF0dXMgPSBERU1PRF9MT0NLOworCX0gZWxzZSBpZiAoUmVzdWx0WzFdIDwgU0NVX1JBTV9RQU1fTE9DS0VEX0xPQ0tFRF9ORVZFUl9MT0NLKSB7CisJCS8qIDB4ODAwMCBERU1PRCArIEZFQyBMT0NLRUQgKHN5c3RlbSBsb2NrKSAqLworCQkqcExvY2tTdGF0dXMgPSBNUEVHX0xPQ0s7CisJfSBlbHNlIHsKKwkJLyogMHhDMDAwIE5FVkVSIExPQ0tFRCAqLworCQkvKiAoc3lzdGVtIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBsb2NrIHRvIHRoZSBzaWduYWwpICovCisJCS8qIFRPRE86IGNoZWNrIHRoaXMsIGludGVybWVkaWF0ZSAmIHN0YW5kYXJkIHNwZWNpZmljIGxvY2sgc3RhdGVzIGFyZSBub3QKKwkJICAgdGFrZW4gaW50byBhY2NvdW50IGhlcmUgKi8KKwkJKnBMb2NrU3RhdHVzID0gTkVWRVJfTE9DSzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBRQU1fTUlSUk9SX19NICAgICAgICAgMHgwMworI2RlZmluZSBRQU1fTUlSUk9SX05PUk1BTCAgICAgMHgwMAorI2RlZmluZSBRQU1fTUlSUk9SRUQgICAgICAgICAgMHgwMQorI2RlZmluZSBRQU1fTUlSUk9SX0FVVE9fT04gICAgMHgwMgorI2RlZmluZSBRQU1fTE9DS1JBTkdFX19NICAgICAgMHgxMAorI2RlZmluZSBRQU1fTE9DS1JBTkdFX05PUk1BTCAgMHgxMAorCitzdGF0aWMgaW50IFNldFFBTShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIHUxNiBJbnRlcm1lZGlhdGVGcmVxa0h6LAorCQkgIHMzMiB0dW5lckZyZXFPZmZzZXQpCit7CisJaW50IHN0YXR1czsKKwl1MTYgc2V0UGFyYW1QYXJhbWV0ZXJzWzRdID0geyAwLCAwLCAwLCAwIH07CisJdTE2IGNtZFJlc3VsdDsKKworCWRwcmludGsoMSwgIlxuIik7CisJLyoKKwkgKiBTVEVQIDE6IHJlc2V0IGRlbW9kdWxhdG9yCisJICoJcmVzZXRzIEZFQyBESSBhbmQgRkVDIFJTCisJICoJcmVzZXRzIFFBTSBibG9jaworCSAqCXJlc2V0cyBTQ1UgdmFyaWFibGVzCisJICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX0RJX0NPTU1fRVhFQ19fQSwgRkVDX0RJX0NPTU1fRVhFQ19TVE9QKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfUlNfQ09NTV9FWEVDX19BLCBGRUNfUlNfQ09NTV9FWEVDX1NUT1ApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IFFBTVJlc2V0UUFNKHN0YXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qCisJICogU1RFUCAyOiBjb25maWd1cmUgZGVtb2R1bGF0b3IKKwkgKgktc2V0IHBhcmFtczsgcmVzZXRzIElRTSxRQU0sRkVDIEhXOyBpbml0aWFsaXplcyBzb21lCisJICogICAgICAgU0NVIHZhcmlhYmxlcworCSAqLworCXN0YXR1cyA9IFFBTVNldFN5bWJvbHJhdGUoc3RhdGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogU2V0IHBhcmFtcyAqLworCXN3aXRjaCAoc3RhdGUtPnBhcmFtLnUucWFtLm1vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8yNTY6CisJCXN0YXRlLT5tX0NvbnN0ZWxsYXRpb24gPSBEUlhfQ09OU1RFTExBVElPTl9RQU0yNTY7CisJCWJyZWFrOworCWNhc2UgUUFNX0FVVE86CisJY2FzZSBRQU1fNjQ6CisJCXN0YXRlLT5tX0NvbnN0ZWxsYXRpb24gPSBEUlhfQ09OU1RFTExBVElPTl9RQU02NDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMTY6CisJCXN0YXRlLT5tX0NvbnN0ZWxsYXRpb24gPSBEUlhfQ09OU1RFTExBVElPTl9RQU0xNjsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMzI6CisJCXN0YXRlLT5tX0NvbnN0ZWxsYXRpb24gPSBEUlhfQ09OU1RFTExBVElPTl9RQU0zMjsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMTI4OgorCQlzdGF0ZS0+bV9Db25zdGVsbGF0aW9uID0gRFJYX0NPTlNURUxMQVRJT05fUUFNMTI4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc2V0UGFyYW1QYXJhbWV0ZXJzWzBdID0gc3RhdGUtPm1fQ29uc3RlbGxhdGlvbjsJLyogY29uc3RlbGxhdGlvbiAgICAgKi8KKwlzZXRQYXJhbVBhcmFtZXRlcnNbMV0gPSBEUlhLX1FBTV9JMTJfSjE3OwkvKiBpbnRlcmxlYXZlIG1vZGUgICAqLworCWlmIChzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID09IE9NX1FBTV9JVFVfQykKKwkJc2V0UGFyYW1QYXJhbWV0ZXJzWzJdID0gUUFNX1RPUF9BTk5FWF9DOworCWVsc2UKKwkJc2V0UGFyYW1QYXJhbWV0ZXJzWzJdID0gUUFNX1RPUF9BTk5FWF9BOworCXNldFBhcmFtUGFyYW1ldGVyc1szXSB8PSAoUUFNX01JUlJPUl9BVVRPX09OKTsKKwkvKiBFbnYgcGFyYW1ldGVycyAqLworCS8qIGNoZWNrIGZvciBMT0NLUkFOR0UgRXh0ZW50ZWQgKi8KKwkvKiBzZXRQYXJhbVBhcmFtZXRlcnNbM10gfD0gUUFNX0xPQ0tSQU5HRV9OT1JNQUw7ICovCisKKwlzdGF0dXMgPSBzY3VfY29tbWFuZChzdGF0ZSwgU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX1FBTSB8IFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfU0VUX1BBUkFNLCA0LCBzZXRQYXJhbVBhcmFtZXRlcnMsIDEsICZjbWRSZXN1bHQpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCS8qIEZhbGwtYmFjayB0byB0aGUgc2ltcGxlciBjYWxsICovCisJCWlmIChzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlID09IE9NX1FBTV9JVFVfQykKKwkJCXNldFBhcmFtUGFyYW1ldGVyc1swXSA9IFFBTV9UT1BfQU5ORVhfQzsKKwkJZWxzZQorCQkJc2V0UGFyYW1QYXJhbWV0ZXJzWzBdID0gUUFNX1RPUF9BTk5FWF9BOworCQlzdGF0dXMgPSBzY3VfY29tbWFuZChzdGF0ZSwgU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX1FBTSB8IFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfU0VUX0VOViwgMSwgc2V0UGFyYW1QYXJhbWV0ZXJzLCAxLCAmY21kUmVzdWx0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCXNldFBhcmFtUGFyYW1ldGVyc1swXSA9IHN0YXRlLT5tX0NvbnN0ZWxsYXRpb247IC8qIGNvbnN0ZWxsYXRpb24gICAgICovCisJCXNldFBhcmFtUGFyYW1ldGVyc1sxXSA9IERSWEtfUUFNX0kxMl9KMTc7ICAgICAgIC8qIGludGVybGVhdmUgbW9kZSAgICovCisJCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLCBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfUUFNIHwgU0NVX1JBTV9DT01NQU5EX0NNRF9ERU1PRF9TRVRfUEFSQU0sIDIsIHNldFBhcmFtUGFyYW1ldGVycywgMSwgJmNtZFJlc3VsdCk7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyoKKwkgKiBTVEVQIDM6IGVuYWJsZSB0aGUgc3lzdGVtIGluIGEgbW9kZSB3aGVyZSB0aGUgQURDIHByb3ZpZGVzIHZhbGlkCisJICogc2lnbmFsIHNldHVwIGNvbnN0ZWxsYXRpb24gaW5kZXBlbmRlbnQgcmVnaXN0ZXJzCisJICovCisjaWYgMAorCXN0YXR1cyA9IFNldEZyZXF1ZW5jeShjaGFubmVsLCB0dW5lckZyZXFPZmZzZXQpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKyNlbmRpZgorCXN0YXR1cyA9IFNldEZyZXF1ZW5jeVNoaWZ0ZXIoc3RhdGUsIEludGVybWVkaWF0ZUZyZXFrSHosIHR1bmVyRnJlcU9mZnNldCwgdHJ1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBTZXR1cCBCRVIgbWVhc3VyZW1lbnQgKi8KKwlzdGF0dXMgPSBTZXRRQU1NZWFzdXJlbWVudChzdGF0ZSwgc3RhdGUtPm1fQ29uc3RlbGxhdGlvbiwgc3RhdGUtPnBhcmFtLnUuIHFhbS5zeW1ib2xfcmF0ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBSZXNldCBkZWZhdWx0IHZhbHVlcyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9TQ0FMRV9TSF9fQSwgSVFNX0NGX1NDQUxFX1NIX19QUkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9USU1FT1VUX19BLCBRQU1fU1lfVElNRU9VVF9fUFJFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFJlc2V0IGRlZmF1bHQgTEMgdmFsdWVzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0xDX1JBVEVfTElNSVRfX0EsIDMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9MQ19MUEZfRkFDVE9SUF9fQSwgNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0xDX0xQRl9GQUNUT1JJX19BLCA0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfTU9ERV9fQSwgNyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIwX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIxX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIyX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIzX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUI0X19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUI1X19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUI2X19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUI4X19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUI5X19BLCAyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIxMF9fQSwgMik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0xDX1FVQUxfVEFCMTJfX0EsIDIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9MQ19RVUFMX1RBQjE1X19BLCAzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBRQU1fTENfUVVBTF9UQUIxNl9fQSwgMyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0xDX1FVQUxfVEFCMjBfX0EsIDQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9MQ19RVUFMX1RBQjI1X19BLCA0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIE1pcnJvcmluZywgUUFNLWJsb2NrIHN0YXJ0aW5nIHBvaW50IG5vdCBpbnZlcnRlZCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFFBTV9TWV9TUF9JTlZfX0EsIFFBTV9TWV9TUF9JTlZfU1BFQ1RSVU1fSU5WX0RJUyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBIYWx0IFNDVSB0byBlbmFibGUgc2FmZSBub24tYXRvbWljIGFjY2Vzc2VzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX0NPTU1fRVhFQ19fQSwgU0NVX0NPTU1fRVhFQ19IT0xEKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNURVAgNDogY29uc3RlbGxhdGlvbiBzcGVjaWZpYyBzZXR1cCAqLworCXN3aXRjaCAoc3RhdGUtPnBhcmFtLnUucWFtLm1vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8xNjoKKwkJc3RhdHVzID0gU2V0UUFNMTYoc3RhdGUpOworCQlicmVhazsKKwljYXNlIFFBTV8zMjoKKwkJc3RhdHVzID0gU2V0UUFNMzIoc3RhdGUpOworCQlicmVhazsKKwljYXNlIFFBTV9BVVRPOgorCWNhc2UgUUFNXzY0OgorCQlzdGF0dXMgPSBTZXRRQU02NChzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgUUFNXzEyODoKKwkJc3RhdHVzID0gU2V0UUFNMTI4KHN0YXRlKTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMjU2OgorCQlzdGF0dXMgPSBTZXRRQU0yNTYoc3RhdGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBBY3RpdmF0ZSBTQ1UgdG8gZW5hYmxlIFNDVSBjb21tYW5kcyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9DT01NX0VYRUNfX0EsIFNDVV9DT01NX0VYRUNfQUNUSVZFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFJlLWNvbmZpZ3VyZSBNUEVHIG91dHB1dCwgcmVxdWlyZXMga25vd2xlZGdlIG9mIGNoYW5uZWwgYml0cmF0ZSAqLworCS8qIGV4dEF0dHItPmN1cnJlbnRDaGFubmVsLmNvbnN0ZWxsYXRpb24gPSBjaGFubmVsLT5jb25zdGVsbGF0aW9uOyAqLworCS8qIGV4dEF0dHItPmN1cnJlbnRDaGFubmVsLnN5bWJvbHJhdGUgICAgPSBjaGFubmVsLT5zeW1ib2xyYXRlOyAqLworCXN0YXR1cyA9IE1QRUdUU0R0b1NldHVwKHN0YXRlLCBzdGF0ZS0+bV9PcGVyYXRpb25Nb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFN0YXJ0IHByb2Nlc3NlcyAqLworCXN0YXR1cyA9IE1QRUdUU1N0YXJ0KHN0YXRlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBGRUNfQ09NTV9FWEVDX19BLCBGRUNfQ09NTV9FWEVDX0FDVElWRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgUUFNX0NPTU1fRVhFQ19fQSwgUUFNX0NPTU1fRVhFQ19BQ1RJVkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DT01NX0VYRUNfX0EsIElRTV9DT01NX0VYRUNfQl9BQ1RJVkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogU1RFUCA1OiBzdGFydCBRQU0gZGVtb2R1bGF0b3IgKHN0YXJ0cyBGRUMsIFFBTSBhbmQgSVFNIEhXKSAqLworCXN0YXR1cyA9IHNjdV9jb21tYW5kKHN0YXRlLCBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfUUFNIHwgU0NVX1JBTV9DT01NQU5EX0NNRF9ERU1PRF9TVEFSVCwgMCwgTlVMTCwgMSwgJmNtZFJlc3VsdCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiB1cGRhdGUgZ2xvYmFsIERSWEsgZGF0YSBjb250YWluZXIgKi8KKy8qPyAgICAgZXh0QXR0ci0+cWFtSW50ZXJsZWF2ZU1vZGUgPSBEUlhLX1FBTV9JMTJfSjE3OyAqLworCitlcnJvcjoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBTZXRRQU1TdGFuZGFyZChzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsCisJCQkgIGVudW0gT3BlcmF0aW9uTW9kZSBvTW9kZSkKK3sKKwlpbnQgc3RhdHVzOworI2lmZGVmIERSWEtfUUFNX1RBUFMKKyNkZWZpbmUgRFJYS19RQU1BX1RBUFNfU0VMRUNUCisjaW5jbHVkZSAiZHJ4a19maWx0ZXJzLmgiCisjdW5kZWYgRFJYS19RQU1BX1RBUFNfU0VMRUNUCisjZW5kaWYKKworCWRwcmludGsoMSwgIlxuIik7CisKKwkvKiBhZGRlZCBhbnRlbm5hIHN3aXRjaCAqLworCVN3aXRjaEFudGVubmFUb1FBTShzdGF0ZSk7CisKKwkvKiBFbnN1cmUgY29ycmVjdCBwb3dlci11cCBtb2RlICovCisJc3RhdHVzID0gUG93ZXJVcFFBTShzdGF0ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJLyogUmVzZXQgUUFNIGJsb2NrICovCisJc3RhdHVzID0gUUFNUmVzZXRRQU0oc3RhdGUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogU2V0dXAgSVFNICovCisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ09NTV9FWEVDX19BLCBJUU1fQ09NTV9FWEVDX0JfU1RPUCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX0FNVVhfX0EsIElRTV9BRl9BTVVYX1NJR05BTDJBREMpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogVXBsb2FkIElRTSBDaGFubmVsIEZpbHRlciBzZXR0aW5ncyBieQorCQlib290IGxvYWRlciBmcm9tIFJPTSB0YWJsZSAqLworCXN3aXRjaCAob01vZGUpIHsKKwljYXNlIE9NX1FBTV9JVFVfQToKKwkJc3RhdHVzID0gQkxDaGFpbkNtZChzdGF0ZSwgRFJYS19CTF9ST01fT0ZGU0VUX1RBUFNfSVRVX0EsIERSWEtfQkxDQ19OUl9FTEVNRU5UU19UQVBTLCBEUlhLX0JMQ19USU1FT1VUKTsKKwkJYnJlYWs7CisJY2FzZSBPTV9RQU1fSVRVX0M6CisJCXN0YXR1cyA9IEJMRGlyZWN0Q21kKHN0YXRlLCBJUU1fQ0ZfVEFQX1JFMF9fQSwgRFJYS19CTF9ST01fT0ZGU0VUX1RBUFNfSVRVX0MsIERSWEtfQkxEQ19OUl9FTEVNRU5UU19UQVBTLCBEUlhLX0JMQ19USU1FT1VUKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSBCTERpcmVjdENtZChzdGF0ZSwgSVFNX0NGX1RBUF9JTTBfX0EsIERSWEtfQkxfUk9NX09GRlNFVF9UQVBTX0lUVV9DLCBEUlhLX0JMRENfTlJfRUxFTUVOVFNfVEFQUywgRFJYS19CTENfVElNRU9VVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX09VVF9FTkFfX0EsICgxIDw8IElRTV9DRl9PVVRfRU5BX1FBTV9fQikpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9TWU1NRVRSSUNfX0EsIDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9NSURUQVBfX0EsICgoMSA8PCBJUU1fQ0ZfTUlEVEFQX1JFX19CKSB8ICgxIDw8IElRTV9DRl9NSURUQVBfSU1fX0IpKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fUkNfU1RSRVRDSF9fQSwgMjEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9DTFBfTEVOX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfQ0xQX1RIX19BLCA0NDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9TTlNfTEVOX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfUE9XX01FQVNfTEVOX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9GU19BREpfU0VMX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fUkNfQURKX1NFTF9fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX0FESl9TRUxfX0EsIDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9BRl9VUERfU0VMX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIElRTSBJbXB1bHNlIE5vaXNlIFByb2Nlc3NpbmcgVW5pdCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9DTFBfVkFMX19BLCA1MDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9EQVRBVEhfX0EsIDEwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9CWVBBU1NERVRfX0EsIDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIElRTV9DRl9ERVRfTENUX19BLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQ0ZfV05EX0xFTl9fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0NGX1BLRFRIX19BLCAxKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBJUU1fQUZfSU5DX0JZUEFTU19fQSwgMSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiB0dXJuIG9uIElRTUFGLiBNdXN0IGJlIGRvbmUgYmVmb3JlIHNldEFnYyoqKCkgKi8KKwlzdGF0dXMgPSBTZXRJcW1BZihzdGF0ZSwgdHJ1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgSVFNX0FGX1NUQVJUX0xPQ0tfX0EsIDB4MDEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogSVFNIHdpbGwgbm90IGJlIHJlc2V0IGZyb20gaGVyZSwgc3luYyBBREMgYW5kIHVwZGF0ZS9pbml0IEFHQyAqLworCXN0YXR1cyA9IEFEQ1N5bmNocm9uaXphdGlvbihzdGF0ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBTZXQgdGhlIEZTTSBzdGVwIHBlcmlvZCAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fUUFNX0ZTTV9TVEVQX1BFUklPRF9fQSwgMjAwMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBIYWx0IFNDVSB0byBlbmFibGUgc2FmZSBub24tYXRvbWljIGFjY2Vzc2VzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX0NPTU1fRVhFQ19fQSwgU0NVX0NPTU1fRVhFQ19IT0xEKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIE5vIG1vcmUgcmVzZXRzIG9mIHRoZSBJUU0sIGN1cnJlbnQgc3RhbmRhcmQgY29ycmVjdGx5IHNldCA9PgorCQlub3cgQUdDcyBjYW4gYmUgY29uZmlndXJlZC4gKi8KKworCXN0YXR1cyA9IEluaXRBR0Moc3RhdGUsIHRydWUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IFNldFByZVNhdyhzdGF0ZSwgJihzdGF0ZS0+bV9xYW1QcmVTYXdDZmcpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIENvbmZpZ3VyZSBBR0MncyAqLworCXN0YXR1cyA9IFNldEFnY1JmKHN0YXRlLCAmKHN0YXRlLT5tX3FhbVJmQWdjQ2ZnKSwgdHJ1ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyb3I7CisJc3RhdHVzID0gU2V0QWdjSWYoc3RhdGUsICYoc3RhdGUtPm1fcWFtSWZBZ2NDZmcpLCB0cnVlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIEFjdGl2YXRlIFNDVSB0byBlbmFibGUgU0NVIGNvbW1hbmRzICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX0NPTU1fRVhFQ19fQSwgU0NVX0NPTU1fRVhFQ19BQ1RJVkUpOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgV3JpdGVHUElPKHN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCXUxNiB2YWx1ZSA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCS8qIHN0b3AgbG9jayBpbmRpY2F0b3IgcHJvY2VzcyAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fR1BJT19fQSwgU0NVX1JBTV9HUElPX0hXX0xPQ0tfSU5EX0RJU0FCTEUpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogIFdyaXRlIG1hZ2ljIHdvcmQgdG8gZW5hYmxlIHBkciByZWcgd3JpdGUgICAgICAgICAgICAgICAqLworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19UT1BfQ09NTV9LRVlfX0EsIFNJT19UT1BfQ09NTV9LRVlfS0VZKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKworCWlmIChzdGF0ZS0+bV9oYXNTQVdTVykgeworCQlpZiAoc3RhdGUtPlVJT19tYXNrICYgMHgwMDAxKSB7IC8qIFVJTy0xICovCisJCQkvKiB3cml0ZSB0byBpbyBwYWQgY29uZmlndXJhdGlvbiByZWdpc3RlciAtIG91dHB1dCBtb2RlICovCisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX1NNQV9UWF9DRkdfX0EsIHN0YXRlLT5tX0dQSU9DZmcpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKworCQkJLyogdXNlIGNvcnJlc3BvbmRpbmcgYml0IGluIGlvIGRhdGEgb3V0cHV0IHJlZ2lzdGFyICovCisJCQlzdGF0dXMgPSByZWFkMTYoc3RhdGUsIFNJT19QRFJfVUlPX09VVF9MT19fQSwgJnZhbHVlKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpZiAoKHN0YXRlLT5tX0dQSU8gJiAweDAwMDEpID09IDApCisJCQkJdmFsdWUgJj0gMHg3RkZGOwkvKiB3cml0ZSB6ZXJvIHRvIDE1dGggYml0IC0gMXN0IFVJTyAqLworCQkJZWxzZQorCQkJCXZhbHVlIHw9IDB4ODAwMDsJLyogd3JpdGUgb25lIHRvIDE1dGggYml0IC0gMXN0IFVJTyAqLworCQkJLyogd3JpdGUgYmFjayB0byBpbyBkYXRhIG91dHB1dCByZWdpc3RlciAqLworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9VSU9fT1VUX0xPX19BLCB2YWx1ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCWlmIChzdGF0ZS0+VUlPX21hc2sgJiAweDAwMDIpIHsgLyogVUlPLTIgKi8KKwkJCS8qIHdyaXRlIHRvIGlvIHBhZCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIC0gb3V0cHV0IG1vZGUgKi8KKwkJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19QRFJfU01BX1RYX0NGR19fQSwgc3RhdGUtPm1fR1BJT0NmZyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCQkvKiB1c2UgY29ycmVzcG9uZGluZyBiaXQgaW4gaW8gZGF0YSBvdXRwdXQgcmVnaXN0YXIgKi8KKwkJCXN0YXR1cyA9IHJlYWQxNihzdGF0ZSwgU0lPX1BEUl9VSU9fT1VUX0xPX19BLCAmdmFsdWUpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJCWlmICgoc3RhdGUtPm1fR1BJTyAmIDB4MDAwMikgPT0gMCkKKwkJCQl2YWx1ZSAmPSAweEJGRkY7CS8qIHdyaXRlIHplcm8gdG8gMTR0aCBiaXQgLSAyc3QgVUlPICovCisJCQllbHNlCisJCQkJdmFsdWUgfD0gMHg0MDAwOwkvKiB3cml0ZSBvbmUgdG8gMTR0aCBiaXQgLSAyc3QgVUlPICovCisJCQkvKiB3cml0ZSBiYWNrIHRvIGlvIGRhdGEgb3V0cHV0IHJlZ2lzdGVyICovCisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fUERSX1VJT19PVVRfTE9fX0EsIHZhbHVlKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwkJaWYgKHN0YXRlLT5VSU9fbWFzayAmIDB4MDAwNCkgeyAvKiBVSU8tMyAqLworCQkJLyogd3JpdGUgdG8gaW8gcGFkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgLSBvdXRwdXQgbW9kZSAqLworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9TTUFfVFhfQ0ZHX19BLCBzdGF0ZS0+bV9HUElPQ2ZnKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCS8qIHVzZSBjb3JyZXNwb25kaW5nIGJpdCBpbiBpbyBkYXRhIG91dHB1dCByZWdpc3RhciAqLworCQkJc3RhdHVzID0gcmVhZDE2KHN0YXRlLCBTSU9fUERSX1VJT19PVVRfTE9fX0EsICZ2YWx1ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKChzdGF0ZS0+bV9HUElPICYgMHgwMDA0KSA9PSAwKQorCQkJCXZhbHVlICY9IDB4RkZGQjsgICAgICAgICAgICAvKiB3cml0ZSB6ZXJvIHRvIDJuZCBiaXQgLSAzcmQgVUlPICovCisJCQllbHNlCisJCQkJdmFsdWUgfD0gMHgwMDA0OyAgICAgICAgICAgIC8qIHdyaXRlIG9uZSB0byAybmQgYml0IC0gM3JkIFVJTyAqLworCQkJLyogd3JpdGUgYmFjayB0byBpbyBkYXRhIG91dHB1dCByZWdpc3RlciAqLworCQkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1BEUl9VSU9fT1VUX0xPX19BLCB2YWx1ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorCS8qICBXcml0ZSBtYWdpYyB3b3JkIHRvIGRpc2FibGUgcGRyIHJlZyB3cml0ZSAgICAgICAgICAgICAgICovCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX1RPUF9DT01NX0tFWV9fQSwgMHgwMDAwKTsKK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFN3aXRjaEFudGVubmFUb1FBTShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJYm9vbCBncGlvX3N0YXRlOworCisJZHByaW50aygxLCAiXG4iKTsKKworCWlmICghc3RhdGUtPmFudGVubmFfZ3BpbykKKwkJcmV0dXJuIDA7CisKKwlncGlvX3N0YXRlID0gc3RhdGUtPm1fR1BJTyAmIHN0YXRlLT5hbnRlbm5hX2dwaW87CisKKwlpZiAoc3RhdGUtPmFudGVubmFfZHZidCBeIGdwaW9fc3RhdGUpIHsKKwkJLyogQW50ZW5uYSBpcyBvbiBEVkItVCBtb2RlLiBTd2l0Y2ggKi8KKwkJaWYgKHN0YXRlLT5hbnRlbm5hX2R2YnQpCisJCQlzdGF0ZS0+bV9HUElPICY9IH5zdGF0ZS0+YW50ZW5uYV9ncGlvOworCQllbHNlCisJCQlzdGF0ZS0+bV9HUElPIHw9IHN0YXRlLT5hbnRlbm5hX2dwaW87CisJCXN0YXR1cyA9IFdyaXRlR1BJTyhzdGF0ZSk7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IFN3aXRjaEFudGVubmFUb0RWQlQoc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCWJvb2wgZ3Bpb19zdGF0ZTsKKworCWRwcmludGsoMSwgIlxuIik7CisKKwlpZiAoIXN0YXRlLT5hbnRlbm5hX2dwaW8pCisJCXJldHVybiAwOworCisJZ3Bpb19zdGF0ZSA9IHN0YXRlLT5tX0dQSU8gJiBzdGF0ZS0+YW50ZW5uYV9ncGlvOworCisJaWYgKCEoc3RhdGUtPmFudGVubmFfZHZidCBeIGdwaW9fc3RhdGUpKSB7CisJCS8qIEFudGVubmEgaXMgb24gRFZCLUMgbW9kZS4gU3dpdGNoICovCisJCWlmIChzdGF0ZS0+YW50ZW5uYV9kdmJ0KQorCQkJc3RhdGUtPm1fR1BJTyB8PSBzdGF0ZS0+YW50ZW5uYV9ncGlvOworCQllbHNlCisJCQlzdGF0ZS0+bV9HUElPICY9IH5zdGF0ZS0+YW50ZW5uYV9ncGlvOworCQlzdGF0dXMgPSBXcml0ZUdQSU8oc3RhdGUpOworCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBFcnJvciAlZCBvbiAlc1xuIiwgc3RhdHVzLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IFBvd2VyRG93bkRldmljZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJLyogUG93ZXIgZG93biB0byByZXF1ZXN0ZWQgbW9kZSAqLworCS8qIEJhY2t1cCBzb21lIHJlZ2lzdGVyIHNldHRpbmdzICovCisJLyogU2V0IHBpbnMgd2l0aCBwb3NzaWJsZSBwdWxsLXVwcyBjb25uZWN0ZWQgdG8gdGhlbSBpbiBpbnB1dCBtb2RlICovCisJLyogQW5hbG9nIHBvd2VyIGRvd24gKi8KKwkvKiBBREMgcG93ZXIgZG93biAqLworCS8qIFBvd2VyIGRvd24gZGV2aWNlICovCisJaW50IHN0YXR1czsKKworCWRwcmludGsoMSwgIlxuIik7CisJaWYgKHN0YXRlLT5tX2JQRG93bk9wZW5CcmlkZ2UpIHsKKwkJLyogT3BlbiBJMkMgYnJpZGdlIGJlZm9yZSBwb3dlciBkb3duIG9mIERSWEsgKi8KKwkJc3RhdHVzID0gQ29uZmlndXJlSTJDQnJpZGdlKHN0YXRlLCB0cnVlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwkvKiBkcml2ZXIgMC45LjAgKi8KKwlzdGF0dXMgPSBEVkJURW5hYmxlT0ZETVRva2VuUmluZyhzdGF0ZSwgZmFsc2UpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCisJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0NDX1BXRF9NT0RFX19BLCBTSU9fQ0NfUFdEX01PREVfTEVWRUxfQ0xPQ0spOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycm9yOworCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19DQ19VUERBVEVfX0EsIFNJT19DQ19VUERBVEVfS0VZKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJvcjsKKwlzdGF0ZS0+bV9ISUNmZ0N0cmwgfD0gU0lPX0hJX1JBX1JBTV9QQVJfNV9DRkdfU0xFRVBfWlpaOworCXN0YXR1cyA9IEhJX0NmZ0NvbW1hbmQoc3RhdGUpOworZXJyb3I6CisJaWYgKHN0YXR1cyA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZHJ4azogRXJyb3IgJWQgb24gJXNcbiIsIHN0YXR1cywgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBsb2FkX21pY3JvY29kZShzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1jX25hbWUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG1jX25hbWUsIHN0YXRlLT5pMmMtPmRldi5wYXJlbnQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImRyeGs6IENvdWxkIG5vdCBsb2FkIGZpcm13YXJlIGZpbGUgJXMuXG4iLCBtY19uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImRyeGs6IENvcHkgJXMgdG8geW91ciBob3RwbHVnIGRpcmVjdG9yeSFcbiIsIG1jX25hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBEb3dubG9hZE1pY3JvY29kZShzdGF0ZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGluaXRfZHJ4ayhzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJZW51bSBEUlhQb3dlck1vZGUgcG93ZXJNb2RlID0gRFJYS19QT1dFUl9ET1dOX09GRE07CisJdTE2IGRyaXZlclZlcnNpb247CisKKwlkcHJpbnRrKDEsICJcbiIpOworCWlmICgoc3RhdGUtPm1fRHJ4a1N0YXRlID09IERSWEtfVU5JTklUSUFMSVpFRCkpIHsKKwkJc3RhdHVzID0gUG93ZXJVcERldmljZShzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gRFJYWF9PcGVuKHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQkvKiBTb2Z0IHJlc2V0IG9mIE9GRE0tLCBzeXMtIGFuZCBvc2MtY2xvY2tkb21haW4gKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0lPX0NDX1NPRlRfUlNUX19BLCBTSU9fQ0NfU09GVF9SU1RfT0ZETV9fTSB8IFNJT19DQ19TT0ZUX1JTVF9TWVNfX00gfCBTSU9fQ0NfU09GVF9SU1RfT1NDX19NKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fQ0NfVVBEQVRFX19BLCBTSU9fQ0NfVVBEQVRFX0tFWSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJLyogVE9ETyBpcyB0aGlzIG5lZWRlZCwgaWYgeWVzIGhvdyBtdWNoIGRlbGF5IGluIHdvcnN0IGNhc2Ugc2NlbmFyaW8gKi8KKwkJbXNsZWVwKDEpOworCQlzdGF0ZS0+bV9EUlhLX0EzX1BBVENIX0NPREUgPSB0cnVlOworCQlzdGF0dXMgPSBHZXREZXZpY2VDYXBhYmlsaXRpZXMoc3RhdGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogQnJpZGdlIGRlbGF5LCB1c2VzIG9zY2lsYXRvciBjbG9jayAqLworCQkvKiBEZWxheSA9IChkZWxheSAobmFubyBzZWNvbmRzKSAqIG9zY2NsayAoa0h6KSkvIDEwMDAgKi8KKwkJLyogU0RBIGJyZGlnZSBkZWxheSAqLworCQlzdGF0ZS0+bV9ISUNmZ0JyaWRnZURlbGF5ID0KKwkJCSh1MTYpICgoc3RhdGUtPm1fb3NjQ2xvY2tGcmVxIC8gMTAwMCkgKgorCQkJCUhJX0kyQ19CUklER0VfREVMQVkpIC8gMTAwMDsKKwkJLyogQ2xpcHBpbmcgKi8KKwkJaWYgKHN0YXRlLT5tX0hJQ2ZnQnJpZGdlRGVsYXkgPgorCQkJU0lPX0hJX1JBX1JBTV9QQVJfM19DRkdfREJMX1NEQV9fTSkgeworCQkJc3RhdGUtPm1fSElDZmdCcmlkZ2VEZWxheSA9CisJCQkJU0lPX0hJX1JBX1JBTV9QQVJfM19DRkdfREJMX1NEQV9fTTsKKwkJfQorCQkvKiBTQ0wgYnJpZGdlIGRlbGF5LCBzYW1lIGFzIFNEQSBmb3Igbm93ICovCisJCXN0YXRlLT5tX0hJQ2ZnQnJpZGdlRGVsYXkgKz0KKwkJCXN0YXRlLT5tX0hJQ2ZnQnJpZGdlRGVsYXkgPDwKKwkJCVNJT19ISV9SQV9SQU1fUEFSXzNfQ0ZHX0RCTF9TQ0xfX0I7CisKKwkJc3RhdHVzID0gSW5pdEhJKHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQkvKiBkaXNhYmxlIHZhcmlvdXMgcHJvY2Vzc2VzICovCisjaWYgTk9BMVJPTQorCQlpZiAoIShzdGF0ZS0+bV9EUlhLX0ExX1JPTV9DT0RFKQorCQkJJiYgIShzdGF0ZS0+bV9EUlhLX0EyX1JPTV9DT0RFKSkKKyNlbmRpZgorCQl7CisJCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0dQSU9fX0EsIFNDVV9SQU1fR1BJT19IV19MT0NLX0lORF9ESVNBQkxFKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKworCQkvKiBkaXNhYmxlIE1QRUcgcG9ydCAqLworCQlzdGF0dXMgPSBNUEVHVFNEaXNhYmxlKHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIFN0b3AgQVVEIGFuZCBTQ1UgKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgQVVEX0NPTU1fRVhFQ19fQSwgQVVEX0NPTU1fRVhFQ19TVE9QKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfQ09NTV9FWEVDX19BLCBTQ1VfQ09NTV9FWEVDX1NUT1ApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogZW5hYmxlIHRva2VuLXJpbmcgYnVzIHRocm91Z2ggT0ZETSBibG9jayBmb3IgcG9zc2libGUgdWNvZGUgdXBsb2FkICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19PRkRNX1NIX09GRE1fUklOR19FTkFCTEVfX0EsIFNJT19PRkRNX1NIX09GRE1fUklOR19FTkFCTEVfT04pOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogaW5jbHVkZSBib290IGxvYWRlciBzZWN0aW9uICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNJT19CTF9DT01NX0VYRUNfX0EsIFNJT19CTF9DT01NX0VYRUNfQUNUSVZFKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSBCTENoYWluQ21kKHN0YXRlLCAwLCA2LCAxMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJaWYgKCFzdGF0ZS0+bWljcm9jb2RlX25hbWUpCisJCQlsb2FkX21pY3JvY29kZShzdGF0ZSwgImRyeGtfYTMubWMiKTsKKwkJZWxzZQorCQkJbG9hZF9taWNyb2NvZGUoc3RhdGUsIHN0YXRlLT5taWNyb2NvZGVfbmFtZSk7CisKKwkJLyogZGlzYWJsZSB0b2tlbi1yaW5nIGJ1cyB0aHJvdWdoIE9GRE0gYmxvY2sgZm9yIHBvc3NpYmxlIHVjb2RlIHVwbG9hZCAqLworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfRU5BQkxFX19BLCBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfRU5BQkxFX09GRik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBSdW4gU0NVIGZvciBhIGxpdHRsZSB3aGlsZSB0byBpbml0aWFsaXplIG1pY3JvY29kZSB2ZXJzaW9uIG51bWJlcnMgKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX0NPTU1fRVhFQ19fQSwgU0NVX0NPTU1fRVhFQ19BQ1RJVkUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN0YXR1cyA9IERSWFhfT3BlbihzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJLyogYWRkZWQgZm9yIHRlc3QgKi8KKwkJbXNsZWVwKDMwKTsKKworCQlwb3dlck1vZGUgPSBEUlhLX1BPV0VSX0RPV05fT0ZETTsKKwkJc3RhdHVzID0gQ3RybFBvd2VyTW9kZShzdGF0ZSwgJnBvd2VyTW9kZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBTdGFtcCBkcml2ZXIgdmVyc2lvbiBudW1iZXIgaW4gU0NVIGRhdGEgUkFNIGluIEJDRCBjb2RlCisJCQlEb25lIHRvIGVuYWJsZSBmaWVsZCBhcHBsaWNhdGlvbiBlbmdpbmVlcnMgdG8gcmV0cmVpdmUgZHJ4ZHJpdmVyIHZlcnNpb24KKwkJCXZpYSBJMkMgZnJvbSBTQ1UgUkFNLgorCQkJTm90IHVzaW5nIFNDVSBjb21tYW5kIGludGVyZmFjZSBmb3IgU0NVIHJlZ2lzdGVyIGFjY2VzcyBzaW5jZSBubworCQkJbWljcm9jb2RlIG1heSBiZSBwcmVzZW50LgorCQkJKi8KKwkJZHJpdmVyVmVyc2lvbiA9CisJCQkoKChEUlhLX1ZFUlNJT05fTUFKT1IgLyAxMDApICUgMTApIDw8IDEyKSArCisJCQkoKChEUlhLX1ZFUlNJT05fTUFKT1IgLyAxMCkgJSAxMCkgPDwgOCkgKworCQkJKChEUlhLX1ZFUlNJT05fTUFKT1IgJSAxMCkgPDwgNCkgKworCQkJKERSWEtfVkVSU0lPTl9NSU5PUiAlIDEwKTsKKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgU0NVX1JBTV9EUklWRVJfVkVSX0hJX19BLCBkcml2ZXJWZXJzaW9uKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlkcml2ZXJWZXJzaW9uID0KKwkJCSgoKERSWEtfVkVSU0lPTl9QQVRDSCAvIDEwMDApICUgMTApIDw8IDEyKSArCisJCQkoKChEUlhLX1ZFUlNJT05fUEFUQ0ggLyAxMDApICUgMTApIDw8IDgpICsKKwkJCSgoKERSWEtfVkVSU0lPTl9QQVRDSCAvIDEwKSAlIDEwKSA8PCA0KSArCisJCQkoRFJYS19WRVJTSU9OX1BBVENIICUgMTApOworCQlzdGF0dXMgPSB3cml0ZTE2KHN0YXRlLCBTQ1VfUkFNX0RSSVZFUl9WRVJfTE9fX0EsIGRyaXZlclZlcnNpb24pOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFJYSyBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCURSWEtfVkVSU0lPTl9NQUpPUiwgRFJYS19WRVJTSU9OX01JTk9SLAorCQkJRFJYS19WRVJTSU9OX1BBVENIKTsKKworCQkvKiBEaXJ0eSBmaXggb2YgZGVmYXVsdCB2YWx1ZXMgZm9yIFJPTS9QQVRDSCBtaWNyb2NvZGUKKwkJCURpcnR5IGJlY2F1c2UgdGhpcyBmaXggbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzZXR1cCBzdWl0YWJsZSB2YWx1ZXMKKwkJCWJlZm9yZSBjYWxsaW5nIERSWF9PcGVuLiBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIGNoYW5nZXMgdG8gUkYgQUdDIHNwZWVkCisJCQl0byBiZSBkb25lIHZpYSB0aGUgQ1RSTCBmdW5jdGlvbiBhZnRlciBjYWxsaW5nIERSWF9PcGVuICovCisKKwkJLyogbV9kdmJ0UmZBZ2NDZmcuc3BlZWQgPSAzOyAqLworCisJCS8qIFJlc2V0IGRyaXZlciBkZWJ1ZyBmbGFncyB0byAwICovCisJCXN0YXR1cyA9IHdyaXRlMTYoc3RhdGUsIFNDVV9SQU1fRFJJVkVSX0RFQlVHX19BLCAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQkvKiBkcml2ZXIgMC45LjAgKi8KKwkJLyogU2V0dXAgRkVDIE9DOgorCQkJTk9URTogTm8gbW9yZSBmdWxsIEZFQyByZXNldHMgYWxsb3dlZCBhZnRlcndhcmRzISEgKi8KKwkJc3RhdHVzID0gd3JpdGUxNihzdGF0ZSwgRkVDX0NPTU1fRVhFQ19fQSwgRkVDX0NPTU1fRVhFQ19TVE9QKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQkvKiBNUEVHVFMgZnVuY3Rpb25zIGFyZSBzdGlsbCB0aGUgc2FtZSAqLworCQlzdGF0dXMgPSBNUEVHVFNEdG9Jbml0KHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSBNUEVHVFNTdG9wKHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlnb3RvIGVycm9yOworCQlzdGF0dXMgPSBNUEVHVFNDb25maWd1cmVQb2xhcml0eShzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3RhdHVzID0gTVBFR1RTQ29uZmlndXJlUGlucyhzdGF0ZSwgc3RhdGUtPm1fZW5hYmxlTVBFR091dHB1dCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJLyogYWRkZWQ6IGNvbmZpZ3VyZSBHUElPICovCisJCXN0YXR1cyA9IFdyaXRlR1BJTyhzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlzdGF0ZS0+bV9EcnhrU3RhdGUgPSBEUlhLX1NUT1BQRUQ7CisKKwkJaWYgKHN0YXRlLT5tX2JQb3dlckRvd24pIHsKKwkJCXN0YXR1cyA9IFBvd2VyRG93bkRldmljZShzdGF0ZSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQkJc3RhdGUtPm1fRHJ4a1N0YXRlID0gRFJYS19QT1dFUkVEX0RPV047CisJCX0gZWxzZQorCQkJc3RhdGUtPm1fRHJ4a1N0YXRlID0gRFJYS19TVE9QUEVEOworCX0KK2Vycm9yOgorCWlmIChzdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImRyeGs6IEVycm9yICVkIG9uICVzXG4iLCBzdGF0dXMsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGRyeGtfY19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygxLCAiXG4iKTsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZHJ4a19jX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCWlmIChtdXRleF90cnlsb2NrKCZzdGF0ZS0+Y3Rsb2NrKSA9PSAwKQorCQlyZXR1cm4gLUVCVVNZOworCVNldE9wZXJhdGlvbk1vZGUoc3RhdGUsIE9NX1FBTV9JVFVfQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJ4a19jX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygxLCAiXG4iKTsKKwlTaHV0RG93bihzdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y3Rsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcnhrX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoMSwgIiVzXG4iLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJcmV0dXJuIENvbmZpZ3VyZUkyQ0JyaWRnZShzdGF0ZSwgZW5hYmxlID8gdHJ1ZSA6IGZhbHNlKTsKK30KKworc3RhdGljIGludCBkcnhrX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgZHJ4a19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgSUY7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCisJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJc3RhdGUtPnBhcmFtID0gKnA7CisJZmUtPm9wcy50dW5lcl9vcHMuZ2V0X2ZyZXF1ZW5jeShmZSwgJklGKTsKKwlTdGFydChzdGF0ZSwgMCwgSUYpOworCisJLyogcHJpbnRrKEtFUk5fREVCVUcgImRyeGs6ICVzIElGPSVkIGRvbmVcbiIsIF9fZnVuY19fLCBJRik7ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcnhrX2NfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlkcHJpbnRrKDEsICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyeGtfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTMyIHN0YXQ7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCSpzdGF0dXMgPSAwOworCUdldExvY2tTdGF0dXMoc3RhdGUsICZzdGF0LCAwKTsKKwlpZiAoc3RhdCA9PSBNUEVHX0xPQ0spCisJCSpzdGF0dXMgfD0gMHgxZjsKKwlpZiAoc3RhdCA9PSBGRUNfTE9DSykKKwkJKnN0YXR1cyB8PSAweDBmOworCWlmIChzdGF0ID09IERFTU9EX0xPQ0spCisJCSpzdGF0dXMgfD0gMHgwNzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcnhrX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlkcHJpbnRrKDEsICJcbiIpOworCisJKmJlciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJ4a19yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTMyIHZhbCA9IDA7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCVJlYWRJRkFnYyhzdGF0ZSwgJnZhbCk7CisJKnN0cmVuZ3RoID0gdmFsICYgMHhmZmZmOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyeGtfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXMzMiBzbnIyOworCisJZHByaW50aygxLCAiXG4iKTsKKwlHZXRTaWduYWxUb05vaXNlKHN0YXRlLCAmc25yMik7CisJKnNuciA9IHNucjIgJiAweGZmZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJ4a19yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBlcnI7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCURWQlRRQU1HZXRBY2NQa3RFcnIoc3RhdGUsICZlcnIpOworCSp1Y2Jsb2NrcyA9ICh1MzIpIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcnhrX2NfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncworCQkJCSAgICAqc2V0cykKK3sKKwlkcHJpbnRrKDEsICJcbiIpOworCXNldHMtPm1pbl9kZWxheV9tcyA9IDMwMDA7CisJc2V0cy0+bWF4X2RyaWZ0ID0gMDsKKwlzZXRzLT5zdGVwX3NpemUgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcnhrX3RfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwkvKgorCSAqIFRoZXJlJ3Mgbm90aGluZyB0byByZWxlYXNlIGhlcmUsIGFzIHRoZSBzdGF0ZSBzdHJ1Y3QKKwkgKiBpcyBhbHJlYWR5IGZyZWVkIGJ5IGRyeGtfY19yZWxlYXNlLgorCSAqLworfQorCitzdGF0aWMgaW50IGRyeGtfdF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkcnhrX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygxLCAiXG4iKTsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmc3RhdGUtPmN0bG9jaykgPT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlTZXRPcGVyYXRpb25Nb2RlKHN0YXRlLCBPTV9EVkJUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcnhrX3Rfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKDEsICJcbiIpOworCW11dGV4X3VubG9jaygmc3RhdGUtPmN0bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJ4a190X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJZHByaW50aygxLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgZHJ4a19jX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJIC5uYW1lID0gIkRSWEsgRFZCLUMiLAorCQkgLnR5cGUgPSBGRV9RQU0sCisJCSAuZnJlcXVlbmN5X3N0ZXBzaXplID0gNjI1MDAsCisJCSAuZnJlcXVlbmN5X21pbiA9IDQ3MDAwMDAwLAorCQkgLmZyZXF1ZW5jeV9tYXggPSA4NjIwMDAwMDAsCisJCSAuc3ltYm9sX3JhdGVfbWluID0gODcwMDAwLAorCQkgLnN5bWJvbF9yYXRlX21heCA9IDExNzAwMDAwLAorCQkgLmNhcHMgPSBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV8zMiB8IEZFX0NBTl9RQU1fNjQgfAorCQkgRkVfQ0FOX1FBTV8xMjggfCBGRV9DQU5fUUFNXzI1NiB8IEZFX0NBTl9GRUNfQVVUT30sCisJLnJlbGVhc2UgPSBkcnhrX2NfcmVsZWFzZSwKKwkuaW5pdCA9IGRyeGtfY19pbml0LAorCS5zbGVlcCA9IGRyeGtfY19zbGVlcCwKKwkuaTJjX2dhdGVfY3RybCA9IGRyeGtfZ2F0ZV9jdHJsLAorCisJLnNldF9mcm9udGVuZCA9IGRyeGtfc2V0X3BhcmFtZXRlcnMsCisJLmdldF9mcm9udGVuZCA9IGRyeGtfY19nZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzID0gZHJ4a19jX2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzID0gZHJ4a19yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBkcnhrX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGRyeGtfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gZHJ4a19yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IGRyeGtfcmVhZF91Y2Jsb2NrcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkcnhrX3Rfb3BzID0geworCS5pbmZvID0geworCQkgLm5hbWUgPSAiRFJYSyBEVkItVCIsCisJCSAudHlwZSA9IEZFX09GRE0sCisJCSAuZnJlcXVlbmN5X21pbiA9IDQ3MTI1MDAwLAorCQkgLmZyZXF1ZW5jeV9tYXggPSA4NjUwMDAwMDAsCisJCSAuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTY2NjY3LAorCQkgLmZyZXF1ZW5jeV90b2xlcmFuY2UgPSAwLAorCQkgLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwKKwkJIEZFX0NBTl9GRUNfM180IHwgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8CisJCSBGRV9DQU5fRkVDX0FVVE8gfAorCQkgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfAorCQkgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJIEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJIEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJIEZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8IEZFX0NBTl9SRUNPVkVSIHwgRkVfQ0FOX01VVEVfVFN9LAorCS5yZWxlYXNlID0gZHJ4a190X3JlbGVhc2UsCisJLmluaXQgPSBkcnhrX3RfaW5pdCwKKwkuc2xlZXAgPSBkcnhrX3Rfc2xlZXAsCisJLmkyY19nYXRlX2N0cmwgPSBkcnhrX2dhdGVfY3RybCwKKworCS5zZXRfZnJvbnRlbmQgPSBkcnhrX3NldF9wYXJhbWV0ZXJzLAorCS5nZXRfZnJvbnRlbmQgPSBkcnhrX3RfZ2V0X2Zyb250ZW5kLAorCisJLnJlYWRfc3RhdHVzID0gZHJ4a19yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBkcnhrX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGRyeGtfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gZHJ4a19yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IGRyeGtfcmVhZF91Y2Jsb2NrcywKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRyeGtfYXR0YWNoKGNvbnN0IHN0cnVjdCBkcnhrX2NvbmZpZyAqY29uZmlnLAorCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZCAqKmZlX3QpCit7CisJc3RydWN0IGRyeGtfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwl1OCBhZHIgPSBjb25maWctPmFkcjsKKworCWRwcmludGsoMSwgIlxuIik7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJ4a19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmkyYyA9IGkyYzsKKwlzdGF0ZS0+ZGVtb2RfYWRkcmVzcyA9IGFkcjsKKwlzdGF0ZS0+c2luZ2xlX21hc3RlciA9IGNvbmZpZy0+c2luZ2xlX21hc3RlcjsKKwlzdGF0ZS0+bWljcm9jb2RlX25hbWUgPSBjb25maWctPm1pY3JvY29kZV9uYW1lOworCXN0YXRlLT5ub19pMmNfYnJpZGdlID0gY29uZmlnLT5ub19pMmNfYnJpZGdlOworCXN0YXRlLT5hbnRlbm5hX2dwaW8gPSBjb25maWctPmFudGVubmFfZ3BpbzsKKwlzdGF0ZS0+YW50ZW5uYV9kdmJ0ID0gY29uZmlnLT5hbnRlbm5hX2R2YnQ7CisKKwkvKiBOT1RFOiBhcyBtb3JlIFVJTyBiaXRzIHdpbGwgYmUgdXNlZCwgYWRkIHRoZW0gdG8gdGhlIG1hc2sgKi8KKwlzdGF0ZS0+VUlPX21hc2sgPSBjb25maWctPmFudGVubmFfZ3BpbzsKKworCS8qIERlZmF1bHQgZ3BpbyB0byBEVkItQyAqLworCWlmICghc3RhdGUtPmFudGVubmFfZHZidCAmJiBzdGF0ZS0+YW50ZW5uYV9ncGlvKQorCQlzdGF0ZS0+bV9HUElPIHw9IHN0YXRlLT5hbnRlbm5hX2dwaW87CisJZWxzZQorCQlzdGF0ZS0+bV9HUElPICY9IH5zdGF0ZS0+YW50ZW5uYV9ncGlvOworCisJbXV0ZXhfaW5pdCgmc3RhdGUtPm11dGV4KTsKKwltdXRleF9pbml0KCZzdGF0ZS0+Y3Rsb2NrKTsKKworCW1lbWNweSgmc3RhdGUtPmNfZnJvbnRlbmQub3BzLCAmZHJ4a19jX29wcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+dF9mcm9udGVuZC5vcHMsICZkcnhrX3Rfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+Y19mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJc3RhdGUtPnRfZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJaW5pdF9zdGF0ZShzdGF0ZSk7CisJaWYgKGluaXRfZHJ4ayhzdGF0ZSkgPCAwKQorCQlnb3RvIGVycm9yOworCSpmZV90ID0gJnN0YXRlLT50X2Zyb250ZW5kOworCisJcmV0dXJuICZzdGF0ZS0+Y19mcm9udGVuZDsKKworZXJyb3I6CisJcHJpbnRrKEtFUk5fRVJSICJkcnhrOiBub3QgZm91bmRcbiIpOworCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZHJ4a19hdHRhY2gpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRSWC1LIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiUmFscGggTWV0emxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGtfaGFyZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGtfaGFyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWMzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4a19oYXJkLmgKQEAgLTAsMCArMSwzNDggQEAKKyNpbmNsdWRlICJkcnhrX21hcC5oIgorCisjZGVmaW5lIERSWEtfVkVSU0lPTl9NQUpPUiAwCisjZGVmaW5lIERSWEtfVkVSU0lPTl9NSU5PUiA5CisjZGVmaW5lIERSWEtfVkVSU0lPTl9QQVRDSCA0MzAwCisKKyNkZWZpbmUgSElfSTJDX0RFTEFZICAgICAgICA0MgorI2RlZmluZSBISV9JMkNfQlJJREdFX0RFTEFZIDM1MAorI2RlZmluZSBEUlhLX01BWF9SRVRSSUVTICAgIDEwMAorCisjZGVmaW5lIERSSVZFUl80NDAwIDEKKworI2RlZmluZSBEUlhYX0pUQUdJRCAgIDB4MDM5MjEwRDkKKyNkZWZpbmUgRFJYWF9KX0pUQUdJRCAweDIzOTMxMEQ5CisjZGVmaW5lIERSWFhfS19KVEFHSUQgMHgwMzkyMTBEOQorCisjZGVmaW5lIERSWF9VTktOT1dOICAgICAyNTQKKyNkZWZpbmUgRFJYX0FVVE8gICAgICAgIDI1NQorCisjZGVmaW5lIERSWF9TQ1VfUkVBRFkgICAwCisjZGVmaW5lIERSWEtfTUFYX1dBSVRUSU1FICgyMDApCisjZGVmaW5lIFNDVV9SRVNVTFRfT0sgICAgICAwCisjZGVmaW5lIFNDVV9SRVNVTFRfU0laRSAgIC00CisjZGVmaW5lIFNDVV9SRVNVTFRfSU5WUEFSIC0zCisjZGVmaW5lIFNDVV9SRVNVTFRfVU5LU1REIC0yCisjZGVmaW5lIFNDVV9SRVNVTFRfVU5LQ01EIC0xCisKKyNpZm5kZWYgRFJYS19PRkRNX1RSX1NIVVRET1dOX1RJTUVPVVQKKyNkZWZpbmUgRFJYS19PRkRNX1RSX1NIVVRET1dOX1RJTUVPVVQgKDIwMCkKKyNlbmRpZgorCisjZGVmaW5lIERSWEtfOFZTQl9NUEVHX0JJVF9SQVRFICAgICAxOTM5MjY1OFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfRFZCVF9NUEVHX0JJVF9SQVRFICAgICAzMjAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfUUFNMTZfTVBFR19CSVRfUkFURSAgICAyNzAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfUUFNMzJfTVBFR19CSVRfUkFURSAgICAzMzAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfUUFNNjRfTVBFR19CSVRfUkFURSAgICA0MDAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfUUFNMTI4X01QRUdfQklUX1JBVEUgICA0NjAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfUUFNMjU2X01QRUdfQklUX1JBVEUgICA1MjAwMDAwMFVMICAvKmJwcyovCisjZGVmaW5lIERSWEtfTUFYX01QRUdfQklUX1JBVEUgICAgICA1MjAwMDAwMFVMICAvKmJwcyovCisKKyNkZWZpbmUgICBJUU1fQ0ZfT1VUX0VOQV9PRkRNX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICAgIElRTV9GU19BREpfU0VMX0JfUUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgIElRTV9GU19BREpfU0VMX0JfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgIElRTV9GU19BREpfU0VMX0JfVlNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICAgIElRTV9SQ19BREpfU0VMX0JfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgIElRTV9SQ19BREpfU0VMX0JfUUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgIElRTV9SQ19BREpfU0VMX0JfVlNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKworZW51bSBPcGVyYXRpb25Nb2RlIHsKKwlPTV9OT05FLAorCU9NX1FBTV9JVFVfQSwKKwlPTV9RQU1fSVRVX0IsCisJT01fUUFNX0lUVV9DLAorCU9NX0RWQlQKK307CisKK2VudW0gRFJYUG93ZXJNb2RlIHsKKwlEUlhfUE9XRVJfVVAgPSAwLAorCURSWF9QT1dFUl9NT0RFXzEsCisJRFJYX1BPV0VSX01PREVfMiwKKwlEUlhfUE9XRVJfTU9ERV8zLAorCURSWF9QT1dFUl9NT0RFXzQsCisJRFJYX1BPV0VSX01PREVfNSwKKwlEUlhfUE9XRVJfTU9ERV82LAorCURSWF9QT1dFUl9NT0RFXzcsCisJRFJYX1BPV0VSX01PREVfOCwKKworCURSWF9QT1dFUl9NT0RFXzksCisJRFJYX1BPV0VSX01PREVfMTAsCisJRFJYX1BPV0VSX01PREVfMTEsCisJRFJYX1BPV0VSX01PREVfMTIsCisJRFJYX1BPV0VSX01PREVfMTMsCisJRFJYX1BPV0VSX01PREVfMTQsCisJRFJYX1BPV0VSX01PREVfMTUsCisJRFJYX1BPV0VSX01PREVfMTYsCisJRFJYX1BPV0VSX0RPV04gPSAyNTUKK307CisKKworLyoqIC9icmllZiBJbnRlcm1lZGlhdGUgcG93ZXIgbW9kZSBmb3IgRFJYSywgcG93ZXIgZG93biBPRkRNIGNsb2NrIGRvbWFpbiAqLworI2lmbmRlZiBEUlhLX1BPV0VSX0RPV05fT0ZETQorI2RlZmluZSBEUlhLX1BPV0VSX0RPV05fT0ZETSAgICAgICAgRFJYX1BPV0VSX01PREVfMQorI2VuZGlmCisKKy8qKiAvYnJpZWYgSW50ZXJtZWRpYXRlIHBvd2VyIG1vZGUgZm9yIERSWEssIHBvd2VyIGRvd24gY29yZSAoc3lzY2xrKSAqLworI2lmbmRlZiBEUlhLX1BPV0VSX0RPV05fQ09SRQorI2RlZmluZSBEUlhLX1BPV0VSX0RPV05fQ09SRSAgICAgICAgRFJYX1BPV0VSX01PREVfOQorI2VuZGlmCisKKy8qKiAvYnJpZWYgSW50ZXJtZWRpYXRlIHBvd2VyIG1vZGUgZm9yIERSWEssIHBvd2VyIGRvd24gcGxsIChvbmx5IG9zYyBydW5zKSAqLworI2lmbmRlZiBEUlhLX1BPV0VSX0RPV05fUExMCisjZGVmaW5lIERSWEtfUE9XRVJfRE9XTl9QTEwgICAgICAgICBEUlhfUE9XRVJfTU9ERV8xMAorI2VuZGlmCisKKworZW51bSBBR0NfQ1RSTF9NT0RFIHsgRFJYS19BR0NfQ1RSTF9BVVRPID0gMCwgRFJYS19BR0NfQ1RSTF9VU0VSLCBEUlhLX0FHQ19DVFJMX09GRiB9OworZW51bSBFRHJ4a1N0YXRlIHsgRFJYS19VTklOSVRJQUxJWkVEID0gMCwgRFJYS19TVE9QUEVELCBEUlhLX0RUVl9TVEFSVEVELCBEUlhLX0FUVl9TVEFSVEVELCBEUlhLX1BPV0VSRURfRE9XTiB9OworZW51bSBFRHJ4a0NvZWZBcnJheUluZGV4IHsKKwlEUlhLX0NPRUZfSURYX01OID0gMCwKKwlEUlhLX0NPRUZfSURYX0ZNICAgICwKKwlEUlhLX0NPRUZfSURYX0wgICAgICwKKwlEUlhLX0NPRUZfSURYX0xQICAgICwKKwlEUlhLX0NPRUZfSURYX0JHICAgICwKKwlEUlhLX0NPRUZfSURYX0RLICAgICwKKwlEUlhLX0NPRUZfSURYX0kgICAgICwKKwlEUlhLX0NPRUZfSURYX01BWAorfTsKK2VudW0gRURyeGtTaWZBdHRlbnVhdGlvbiB7CisJRFJYS19TSUZfQVRURU5VQVRJT05fMERCLAorCURSWEtfU0lGX0FUVEVOVUFUSU9OXzNEQiwKKwlEUlhLX1NJRl9BVFRFTlVBVElPTl82REIsCisJRFJYS19TSUZfQVRURU5VQVRJT05fOURCCit9OworZW51bSBFRHJ4a0NvbnN0ZWxsYXRpb24geworCURSWF9DT05TVEVMTEFUSU9OX0JQU0sgPSAwLAorCURSWF9DT05TVEVMTEFUSU9OX1FQU0ssCisJRFJYX0NPTlNURUxMQVRJT05fUFNLOCwKKwlEUlhfQ09OU1RFTExBVElPTl9RQU0xNiwKKwlEUlhfQ09OU1RFTExBVElPTl9RQU0zMiwKKwlEUlhfQ09OU1RFTExBVElPTl9RQU02NCwKKwlEUlhfQ09OU1RFTExBVElPTl9RQU0xMjgsCisJRFJYX0NPTlNURUxMQVRJT05fUUFNMjU2LAorCURSWF9DT05TVEVMTEFUSU9OX1FBTTUxMiwKKwlEUlhfQ09OU1RFTExBVElPTl9RQU0xMDI0LAorCURSWF9DT05TVEVMTEFUSU9OX1VOS05PV04gPSBEUlhfVU5LTk9XTiwKKwlEUlhfQ09OU1RFTExBVElPTl9BVVRPICAgID0gRFJYX0FVVE8KK307CitlbnVtIEVEcnhrSW50ZXJsZWF2ZU1vZGUgeworCURSWEtfUUFNX0kxMl9KMTcgICAgPSAxNiwKKwlEUlhLX1FBTV9JX1VOS05PV04gID0gRFJYX1VOS05PV04KK307CitlbnVtIHsKKwlEUlhLX1NQSU5fQTEgPSAwLAorCURSWEtfU1BJTl9BMiwKKwlEUlhLX1NQSU5fQTMsCisJRFJYS19TUElOX1VOS05PV04KK307CisKK2VudW0gRFJYS0NmZ0R2YnRTcWlTcGVlZCB7CisJRFJYS19EVkJUX1NRSV9TUEVFRF9GQVNUID0gMCwKKwlEUlhLX0RWQlRfU1FJX1NQRUVEX01FRElVTSwKKwlEUlhLX0RWQlRfU1FJX1NQRUVEX1NMT1csCisJRFJYS19EVkJUX1NRSV9TUEVFRF9VTktOT1dOID0gRFJYX1VOS05PV04KK30gOworCitlbnVtIERSWEZmdG1vZGVfdCB7CisJRFJYX0ZGVE1PREVfMksgPSAwLAorCURSWF9GRlRNT0RFXzRLLAorCURSWF9GRlRNT0RFXzhLLAorCURSWF9GRlRNT0RFX1VOS05PV04gPSBEUlhfVU5LTk9XTiwKKwlEUlhfRkZUTU9ERV9BVVRPICAgID0gRFJYX0FVVE8KK307CisKK2VudW0gRFJYTVBFR1N0cldpZHRoX3QgeworCURSWF9NUEVHX1NUUl9XSURUSF8xLAorCURSWF9NUEVHX1NUUl9XSURUSF84Cit9OworCitlbnVtIERSWFFhbUxvY2tSYW5nZV90IHsKKwlEUlhfUUFNX0xPQ0tSQU5HRV9OT1JNQUwsCisJRFJYX1FBTV9MT0NLUkFOR0VfRVhURU5ERUQKK307CisKK3N0cnVjdCBEUlhLQ2ZnRHZidEVjaG9UaHJlc190IHsKKwl1MTYgICAgICAgICAgICAgdGhyZXNob2xkOworCWVudW0gRFJYRmZ0bW9kZV90ICAgICAgZmZ0TW9kZTsKK30gOworCitzdHJ1Y3QgU0NmZ0FnYyB7CisJZW51bSBBR0NfQ1RSTF9NT0RFICAgICBjdHJsTW9kZTsgICAgICAgIC8qIG9mZiwgdXNlciwgYXV0byAqLworCXUxNiAgICAgICAgICAgIG91dHB1dExldmVsOyAgICAgLyogcmFuZ2UgZGVwZW5kZW50IG9uIEFHQyAqLworCXUxNiAgICAgICAgICAgIG1pbk91dHB1dExldmVsOyAgLyogcmFuZ2UgZGVwZW5kZW50IG9uIEFHQyAqLworCXUxNiAgICAgICAgICAgIG1heE91dHB1dExldmVsOyAgLyogcmFuZ2UgZGVwZW5kZW50IG9uIEFHQyAqLworCXUxNiAgICAgICAgICAgIHNwZWVkOyAgICAgICAgICAgLyogcmFuZ2UgZGVwZW5kZW50IG9uIEFHQyAqLworCXUxNiAgICAgICAgICAgIHRvcDsgICAgICAgICAgICAgLyogcmYtYWdjIHRha2Ugb3ZlciBwb2ludCAqLworCXUxNiAgICAgICAgICAgIGN1dE9mZkN1cnJlbnQ7ICAgLyogcmYtYWdjIGlzIGFjY2VsZXJhdGVkIGlmIG91dHB1dCBjdXJyZW50CisJCQkJCSAgIGlzIGJlbG93IGN1dC1vZmYgY3VycmVudCAqLworCXUxNiAgICAgICAgICAgIEluZ2FpblRndE1heDsKKwl1MTYgICAgICAgICAgICBGYXN0Q2xpcEN0cmxEZWxheTsKK307CisKK3N0cnVjdCBTQ2ZnUHJlU2F3IHsKKwl1MTYgICAgICAgIHJlZmVyZW5jZTsgLyogcHJlIFNBVyByZWZlcmVuY2UgdmFsdWUsIHJhbmdlIDAgLi4gMzEgKi8KKwlib29sICAgICAgICAgIHVzZVByZVNhdzsgLyogVFJVRSBhbGdvcml0aG1zIG11c3QgdXNlIHByZSBTQVcgc2Vuc2UgKi8KK307CisKK3N0cnVjdCBEUlhLT2ZkbVNjQ21kX3QgeworCXUxNiBjbWQ7ICAgICAgICAvKio8IENvbW1hbmQgbnVtYmVyICovCisJdTE2IHN1YmNtZDsgICAgIC8qKjwgU3ViLWNvbW1hbmQgcGFyYW1ldGVyKi8KKwl1MTYgcGFyYW0wOyAgICAgLyoqPCBHZW5lcmFsIHB1cnBvdXMgcGFyYW0gKi8KKwl1MTYgcGFyYW0xOyAgICAgLyoqPCBHZW5lcmFsIHB1cnBvdXMgcGFyYW0gKi8KKwl1MTYgcGFyYW0yOyAgICAgLyoqPCBHZW5lcmFsIHB1cnBvdXMgcGFyYW0gKi8KKwl1MTYgcGFyYW0zOyAgICAgLyoqPCBHZW5lcmFsIHB1cnBvdXMgcGFyYW0gKi8KKwl1MTYgcGFyYW00OyAgICAgLyoqPCBHZW5lcmFsIHB1cnBvdXMgcGFyYW0gKi8KK307CisKK3N0cnVjdCBkcnhrX3N0YXRlIHsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGNfZnJvbnRlbmQ7CisJc3RydWN0IGR2Yl9mcm9udGVuZCB0X2Zyb250ZW5kOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBwYXJhbTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwl1OCAgICAgZGVtb2RfYWRkcmVzczsKKwl2b2lkICAqcHJpdjsKKworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgbXV0ZXggY3Rsb2NrOworCisJdTMyICAgIG1fSW5zdGFuY2U7ICAgICAgICAgICAvKio8IENoYW5uZWwgMSwyLDMgb3IgNCAqLworCisJaW50ICAgIG1fQ2h1bmtTaXplOworCXU4IENodW5rWzI1Nl07CisKKwlib29sICAgbV9oYXNMTkE7CisJYm9vbCAgIG1faGFzRFZCVDsKKwlib29sICAgbV9oYXNEVkJDOworCWJvb2wgICBtX2hhc0F1ZGlvOworCWJvb2wgICBtX2hhc0FUVjsKKwlib29sICAgbV9oYXNPT0I7CisJYm9vbCAgIG1faGFzU0FXU1c7ICAgICAgICAgLyoqPCBUUlVFIGlmIG1hdF90eCBpcyBhdmFpbGFibGUgKi8KKwlib29sICAgbV9oYXNHUElPMTsgICAgICAgICAvKio8IFRSVUUgaWYgbWF0X3J4IGlzIGF2YWlsYWJsZSAqLworCWJvb2wgICBtX2hhc0dQSU8yOyAgICAgICAgIC8qKjwgVFJVRSBpZiBHUElPIGlzIGF2YWlsYWJsZSAqLworCWJvb2wgICBtX2hhc0lSUU47ICAgICAgICAgIC8qKjwgVFJVRSBpZiBJUlFOIGlzIGF2YWlsYWJsZSAqLworCXUxNiAgICBtX29zY0Nsb2NrRnJlcTsKKwl1MTYgICAgbV9ISUNmZ1RpbWluZ0RpdjsKKwl1MTYgICAgbV9ISUNmZ0JyaWRnZURlbGF5OworCXUxNiAgICBtX0hJQ2ZnV2FrZVVwS2V5OworCXUxNiAgICBtX0hJQ2ZnVGltZW91dDsKKwl1MTYgICAgbV9ISUNmZ0N0cmw7CisJczMyICAgIG1fc3lzQ2xvY2tGcmVxOyAgICAgIC8qKjwgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jeSBpbiBrSHogKi8KKworCWVudW0gRURyeGtTdGF0ZSAgICBtX0RyeGtTdGF0ZTsgICAgICAvKio8IFN0YXRlIG9mIERyeGsgKGluaXQsc3RvcHBlZCxzdGFydGVkKSAqLworCWVudW0gT3BlcmF0aW9uTW9kZSBtX09wZXJhdGlvbk1vZGU7ICAvKio8IGRpZ2l0YWwgc3RhbmRhcmRzICovCisJc3RydWN0IFNDZmdBZ2MgICAgIG1fdnNiUmZBZ2NDZmc7ICAgIC8qKjwgc2V0dGluZ3MgZm9yIFZTQiBSRi1BR0MgKi8KKwlzdHJ1Y3QgU0NmZ0FnYyAgICAgbV92c2JJZkFnY0NmZzsgICAgLyoqPCBzZXR0aW5ncyBmb3IgVlNCIElGLUFHQyAqLworCXUxNiAgICAgICAgICAgICAgICBtX3ZzYlBnYUNmZzsgICAgICAvKio8IHNldHRpbmdzIGZvciBWU0IgUEdBICovCisJc3RydWN0IFNDZmdQcmVTYXcgIG1fdnNiUHJlU2F3Q2ZnOyAgIC8qKjwgc2V0dGluZ3MgZm9yIHByZSBTQVcgc2Vuc2UgKi8KKwlzMzIgICAgbV9RdWFsaXR5ODNwZXJjZW50OyAgLyoqPCBNRVIgbGV2ZWwgKCowLjEgZEIpIGZvciA4MyUgcXVhbGl0eSBpbmRpY2F0aW9uICovCisJczMyICAgIG1fUXVhbGl0eTkzcGVyY2VudDsgIC8qKjwgTUVSIGxldmVsICgqMC4xIGRCKSBmb3IgOTMlIHF1YWxpdHkgaW5kaWNhdGlvbiAqLworCWJvb2wgICBtX3NtYXJ0QW50SW52ZXJ0ZWQ7CisJYm9vbCAgIG1fYkRlYnVnRW5hYmxlQnJpZGdlOworCWJvb2wgICBtX2JQRG93bk9wZW5CcmlkZ2U7ICAvKio8IG9ubHkgb3BlbiBEUlhLIGJyaWRnZSBiZWZvcmUgcG93ZXItZG93biBvbmNlIGl0IGhhcyBiZWVuIGFjY2Vzc2VkICovCisJYm9vbCAgIG1fYlBvd2VyRG93bjsgICAgICAgIC8qKjwgUG93ZXIgZG93biB3aGVuIG5vdCB1c2VkICovCisKKwl1MzIgICAgbV9JcW1Gc1JhdGVPZnM7ICAgICAgLyoqPCBmcmVxdWVuY3kgc2hpZnQgYXMgd3JpdHRlbiB0byBEUlhLIHJlZ2lzdGVyICgyOGJpdCBmaXhwb2ludCkgKi8KKworCWJvb2wgICBtX2VuYWJsZU1QRUdPdXRwdXQ7ICAvKio8IElmIFRSVUUsIGVuYWJsZSBNUEVHIG91dHB1dCAqLworCWJvb2wgICBtX2luc2VydFJTQnl0ZTsgICAgICAvKio8IElmIFRSVUUsIGluc2VydCBSUyBieXRlICovCisJYm9vbCAgIG1fZW5hYmxlUGFyYWxsZWw7ICAgIC8qKjwgSWYgVFJVRSwgcGFyYWxsZWwgb3V0IG90aGVyd2lzZSBzZXJpYWwgKi8KKwlib29sICAgbV9pbnZlcnREQVRBOyAgICAgICAgLyoqPCBJZiBUUlVFLCBpbnZlcnQgREFUQSBzaWduYWxzICovCisJYm9vbCAgIG1faW52ZXJ0RVJSOyAgICAgICAgIC8qKjwgSWYgVFJVRSwgaW52ZXJ0IEVSUiBzaWduYWwgKi8KKwlib29sICAgbV9pbnZlcnRTVFI7ICAgICAgICAgLyoqPCBJZiBUUlVFLCBpbnZlcnQgU1RSIHNpZ25hbHMgKi8KKwlib29sICAgbV9pbnZlcnRWQUw7ICAgICAgICAgLyoqPCBJZiBUUlVFLCBpbnZlcnQgVkFMIHNpZ25hbHMgKi8KKwlib29sICAgbV9pbnZlcnRDTEs7ICAgICAgICAgLyoqPCBJZiBUUlVFLCBpbnZlcnQgQ0xLIHNpZ25hbHMgKi8KKwlib29sICAgbV9EVkJDU3RhdGljQ0xLOworCWJvb2wgICBtX0RWQlRTdGF0aWNDTEs7ICAgICAvKio8IElmIFRSVUUsIHN0YXRpYyBNUEVHIGNsb2NrcmF0ZSB3aWxsCisJCQkJCSBiZSB1c2VkLCBvdGhlcndpc2UgY2xvY2tyYXRlIHdpbGwKKwkJCQkJIGFkYXB0IHRvIHRoZSBiaXRyYXRlIG9mIHRoZSBUUyAqLworCXUzMiAgICBtX0RWQlRCaXRyYXRlOworCXUzMiAgICBtX0RWQkNCaXRyYXRlOworCisJdTggICAgIG1fVFNEYXRhU3RyZW5ndGg7CisJdTggICAgIG1fVFNDbG9ja2tTdHJlbmd0aDsKKworCWVudW0gRFJYTVBFR1N0cldpZHRoX3QgIG1fd2lkdGhTVFI7ICAgIC8qKjwgTVBFRyBzdGFydCB3aWR0aCAqLworCXUzMiAgICBtX21wZWdUc1N0YXRpY0JpdHJhdGU7ICAgICAgICAgIC8qKjwgTWF4aW11bSBiaXRyYXRlIGluIGIvcyBpbiBjYXNlCisJCQkJCQkgICAgc3RhdGljIGNsb2NrcmF0ZSBpcyBzZWxlY3RlZCAqLworCisJLyogTEFSR0VfSU5URUdFUiAgIG1fU3RhcnRUaW1lOyAqLyAgICAgLyoqPCBDb250YWlucyB0aGUgdGltZSBvZiB0aGUgbGFzdCBkZW1vZCBzdGFydCAqLworCXMzMiAgICBtX01wZWdMb2NrVGltZU91dDsgICAgICAvKio8IFdhaXRGb3JMb2NrU3RhdHVzIFRpbWVvdXQgKGNvdW50cyBmcm9tIHN0YXJ0IHRpbWUpICovCisJczMyICAgIG1fRGVtb2RMb2NrVGltZU91dDsgICAgIC8qKjwgV2FpdEZvckxvY2tTdGF0dXMgVGltZW91dCAoY291bnRzIGZyb20gc3RhcnQgdGltZSkgKi8KKworCWJvb2wgICBtX2Rpc2FibGVURUloYW5kbGluZzsKKworCWJvb2wgICBtX1JmQWdjUG9sOworCWJvb2wgICBtX0lmQWdjUG9sOworCisJc3RydWN0IFNDZmdBZ2MgICAgbV9hdHZSZkFnY0NmZzsgIC8qKjwgc2V0dGluZ3MgZm9yIEFUViBSRi1BR0MgKi8KKwlzdHJ1Y3QgU0NmZ0FnYyAgICBtX2F0dklmQWdjQ2ZnOyAgLyoqPCBzZXR0aW5ncyBmb3IgQVRWIElGLUFHQyAqLworCXN0cnVjdCBTQ2ZnUHJlU2F3IG1fYXR2UHJlU2F3Q2ZnOyAvKio8IHNldHRpbmdzIGZvciBBVFYgcHJlIFNBVyBzZW5zZSAqLworCWJvb2wgICAgICAgICAgICAgIG1fcGhhc2VDb3JyZWN0aW9uQnlwYXNzOworCXMxNiAgICAgICAgICAgICAgIG1fYXR2VG9wVmlkUGVhazsKKwl1MTYgICAgICAgICAgICAgICBtX2F0dlRvcE5vaXNlVGg7CisJZW51bSBFRHJ4a1NpZkF0dGVudWF0aW9uIG1fc2lmQXR0ZW51YXRpb247CisJYm9vbCAgICAgICAgICAgICAgbV9lbmFibGVDVkJTT3V0cHV0OworCWJvb2wgICAgICAgICAgICAgIG1fZW5hYmxlU0lGT3V0cHV0OworCWJvb2wgICAgICAgICAgICAgIG1fYk1pcnJvckZyZXFTcGVjdDsKKwllbnVtIEVEcnhrQ29uc3RlbGxhdGlvbiAgbV9Db25zdGVsbGF0aW9uOyAvKio8IENvbnN0ZWxsYXRpb24gdHlwZSBvZiB0aGUgY2hhbm5lbCAqLworCXUzMiAgICAgICAgICAgICAgIG1fQ3VyclN5bWJvbFJhdGU7ICAgICAgIC8qKjwgQ3VycmVudCBRQU0gc3ltYm9sIHJhdGUgKi8KKwlzdHJ1Y3QgU0NmZ0FnYyAgICBtX3FhbVJmQWdjQ2ZnOyAgICAgICAgICAvKio8IHNldHRpbmdzIGZvciBRQU0gUkYtQUdDICovCisJc3RydWN0IFNDZmdBZ2MgICAgbV9xYW1JZkFnY0NmZzsgICAgICAgICAgLyoqPCBzZXR0aW5ncyBmb3IgUUFNIElGLUFHQyAqLworCXUxNiAgICAgICAgICAgICAgIG1fcWFtUGdhQ2ZnOyAgICAgICAgICAgIC8qKjwgc2V0dGluZ3MgZm9yIFFBTSBQR0EgKi8KKwlzdHJ1Y3QgU0NmZ1ByZVNhdyBtX3FhbVByZVNhd0NmZzsgICAgICAgICAvKio8IHNldHRpbmdzIGZvciBRQU0gcHJlIFNBVyBzZW5zZSAqLworCWVudW0gRURyeGtJbnRlcmxlYXZlTW9kZSBtX3FhbUludGVybGVhdmVNb2RlOyAvKio8IFFBTSBJbnRlcmxlYXZlIG1vZGUgKi8KKwl1MTYgICAgICAgICAgICAgICBtX2ZlY1JzUGxlbjsKKwl1MTYgICAgICAgICAgICAgICBtX2ZlY1JzUHJlc2NhbGU7CisKKwllbnVtIERSWEtDZmdEdmJ0U3FpU3BlZWQgbV9zcWlTcGVlZDsKKworCXUxNiAgICAgICAgICAgICAgIG1fR1BJTzsKKwl1MTYgICAgICAgICAgICAgICBtX0dQSU9DZmc7CisKKwlzdHJ1Y3QgU0NmZ0FnYyAgICBtX2R2YnRSZkFnY0NmZzsgICAgIC8qKjwgc2V0dGluZ3MgZm9yIFFBTSBSRi1BR0MgKi8KKwlzdHJ1Y3QgU0NmZ0FnYyAgICBtX2R2YnRJZkFnY0NmZzsgICAgIC8qKjwgc2V0dGluZ3MgZm9yIFFBTSBJRi1BR0MgKi8KKwlzdHJ1Y3QgU0NmZ1ByZVNhdyBtX2R2YnRQcmVTYXdDZmc7ICAgIC8qKjwgc2V0dGluZ3MgZm9yIFFBTSBwcmUgU0FXIHNlbnNlICovCisKKwl1MTYgICAgICAgICAgICAgICBtX2FnY0Zhc3RDbGlwQ3RybERlbGF5OworCWJvb2wgICAgICAgICAgICAgIG1fYWRjQ29tcFBhc3NlZDsKKwl1MTYgICAgICAgICAgICAgICBtX2FkY0NvbXBDb2VmWzY0XTsKKwl1MTYgICAgICAgICAgICAgICBtX2FkY1N0YXRlOworCisJdTggICAgICAgICAgICAgICAqbV9taWNyb2NvZGU7CisJaW50ICAgICAgICAgICAgICAgbV9taWNyb2NvZGVfbGVuZ3RoOworCWJvb2wgICAgICAgICAgICAgIG1fRFJYS19BMV9QQVRDSF9DT0RFOworCWJvb2wgICAgICAgICAgICAgIG1fRFJYS19BMV9ST01fQ09ERTsKKwlib29sICAgICAgICAgICAgICBtX0RSWEtfQTJfUk9NX0NPREU7CisJYm9vbCAgICAgICAgICAgICAgbV9EUlhLX0EzX1JPTV9DT0RFOworCWJvb2wgICAgICAgICAgICAgIG1fRFJYS19BMl9QQVRDSF9DT0RFOworCWJvb2wgICAgICAgICAgICAgIG1fRFJYS19BM19QQVRDSF9DT0RFOworCisJYm9vbCAgICAgICAgICAgICAgbV9yZm1pcnJvcjsKKwl1OCAgICAgICAgICAgICAgICBtX2RldmljZVNwaW47CisJdTMyICAgICAgICAgICAgICAgbV9pcW1SY1JhdGU7CisKKwllbnVtIERSWFBvd2VyTW9kZSBtX2N1cnJlbnRQb3dlck1vZGU7CisKKwkvKgorCSAqIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIGF0IHRoZSBkcml2ZXIuIFRoZXkgc3RvcmVzIHRoZSB2YWx1ZXMgZm91bmQKKwkgKiBhdCBzdHJ1Y3QgZHJ4a19jb25maWcuCisJICovCisKKwl1MTYJVUlPX21hc2s7CS8qIEJpdHMgdXNlZCBieSBVSU8gKi8KKworCWJvb2wJc2luZ2xlX21hc3RlcjsKKwlib29sCW5vX2kyY19icmlkZ2U7CisJYm9vbAlhbnRlbm5hX2R2YnQ7CisJdTE2CWFudGVubmFfZ3BpbzsKKworCWNvbnN0IGNoYXIgKm1pY3JvY29kZV9uYW1lOworfTsKKworI2RlZmluZSBORVZFUl9MT0NLIDAKKyNkZWZpbmUgTk9UX0xPQ0tFRCAxCisjZGVmaW5lIERFTU9EX0xPQ0sgMgorI2RlZmluZSBGRUNfTE9DSyAgIDMKKyNkZWZpbmUgTVBFR19MT0NLICA0CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhrX21hcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeGtfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxMWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcnhrX21hcC5oCkBAIC0wLDAgKzEsNDQ5IEBACisjZGVmaW5lICBBVURfQ09NTV9FWEVDX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAKKyNkZWZpbmUgICAgQVVEX0NPTU1fRVhFQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgRkVDX0NPTU1fRVhFQ19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzAwMDAwCisjZGVmaW5lICAgIEZFQ19DT01NX0VYRUNfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgRkVDX0NPTU1fRVhFQ19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgRkVDX0RJX0NPTU1fRVhFQ19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzIwMDAwCisjZGVmaW5lICAgIEZFQ19ESV9DT01NX0VYRUNfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIEZFQ19ESV9JTlBVVF9DVExfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMyMDAxNgorI2RlZmluZSAgRkVDX1JTX0NPTU1fRVhFQ19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzMwMDAwCisjZGVmaW5lICAgIEZFQ19SU19DT01NX0VYRUNfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIEZFQ19SU19NRUFTVVJFTUVOVF9QRVJJT0RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMzMDAxMgorI2RlZmluZSAgRkVDX1JTX01FQVNVUkVNRU5UX1BSRVNDQUxFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzMwMDEzCisjZGVmaW5lICBGRUNfT0NfTU9ERV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMTEKKyNkZWZpbmUgICAgRkVDX09DX01PREVfUEFSSVRZX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgRkVDX09DX0RUT19NT0RFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDE0CisjZGVmaW5lICAgIEZFQ19PQ19EVE9fTU9ERV9EWU5BTUlDX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgRkVDX09DX0RUT19NT0RFX09GRlNFVF9FTkFCTEVfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgRkVDX09DX0RUT19QRVJJT0RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDE1CisjZGVmaW5lICBGRUNfT0NfRFRPX0JVUlNUX0xFTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMTgKKyNkZWZpbmUgIEZFQ19PQ19GQ1RfTU9ERV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDAxQQorI2RlZmluZSAgRkVDX09DX0ZDVF9NT0RFX19QUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgIEZFQ19PQ19GQ1RfTU9ERV9SQVRfRU5BX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgRkVDX09DX0ZDVF9NT0RFX1ZJUlRfRU5BX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgRkVDX09DX1RNRF9NT0RFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDFFCisjZGVmaW5lICBGRUNfT0NfVE1EX0NPVU5UX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMUYKKyNkZWZpbmUgIEZFQ19PQ19UTURfSElfTUFSR0lOX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDAyMAorI2RlZmluZSAgRkVDX09DX1RNRF9MT19NQVJHSU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDIxCisjZGVmaW5lICBGRUNfT0NfVE1EX0lOVF9VUERfUkFURV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMjMKKyNkZWZpbmUgIEZFQ19PQ19BVlJfUEFSTV9BX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDAyNgorI2RlZmluZSAgRkVDX09DX0FWUl9QQVJNX0JfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDI3CisjZGVmaW5lICBGRUNfT0NfUkNOX0dBSU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMkUKKyNkZWZpbmUgIEZFQ19PQ19SQ05fQ1RMX1JBVEVfTE9fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDAzMAorI2RlZmluZSAgRkVDX09DX1JDTl9DVExfU1RFUF9MT19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDMyCisjZGVmaW5lICBGRUNfT0NfUkNOX0NUTF9TVEVQX0hJX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwMzMKKyNkZWZpbmUgIEZFQ19PQ19TTkNfTU9ERV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDA0MAorI2RlZmluZSAgICBGRUNfT0NfU05DX01PREVfU0hVVERPV05fX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgRkVDX09DX1NOQ19MV01fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDQxCisjZGVmaW5lICBGRUNfT0NfU05DX0hXTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwNDIKKyNkZWZpbmUgIEZFQ19PQ19TTkNfVU5MT0NLX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDA0MworI2RlZmluZSAgRkVDX09DX1NOQ19GQUlMX1BFUklPRF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzQwMDQ2CisjZGVmaW5lICBGRUNfT0NfSVBSX01PREVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwNDgKKyNkZWZpbmUgICAgRkVDX09DX0lQUl9NT0RFX1NFUklBTF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICBGRUNfT0NfSVBSX01PREVfTUNMS19ESVNfREFUX0FCU19fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgIEZFQ19PQ19JUFJfTU9ERV9NVkFMX0RJU19QQVJfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICBGRUNfT0NfSVBSX0lOVkVSVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDNDAwNDkKKyNkZWZpbmUgICAgRkVDX09DX0lQUl9JTlZFUlRfTUQwX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDFfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgIEZFQ19PQ19JUFJfSU5WRVJUX01EMl9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICAgRkVDX09DX0lQUl9JTlZFUlRfTUQzX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDRfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDVfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDZfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRDdfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NRVJSX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgICAgRkVDX09DX0lQUl9JTlZFUlRfTVNUUlRfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lICAgIEZFQ19PQ19JUFJfSU5WRVJUX01WQUxfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSAgICBGRUNfT0NfSVBSX0lOVkVSVF9NQ0xLX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAKKyNkZWZpbmUgIEZFQ19PQ19PQ1JfSU5WRVJUX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUM0MDA1MgorI2RlZmluZSAgSVFNX0NPTU1fRVhFQ19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwMDAwCisjZGVmaW5lICAgICAgSVFNX0NPTU1fRVhFQ19CX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgICBJUU1fQ09NTV9FWEVDX0JfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgSVFNX0ZTX1JBVEVfT0ZTX0xPX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODIwMDEwCisjZGVmaW5lICBJUU1fRlNfQURKX1NFTF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MjAwMTQKKyNkZWZpbmUgICAgICBJUU1fRlNfQURKX1NFTF9CX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIElRTV9GU19BREpfU0VMX0JfUUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgICAgSVFNX0ZTX0FESl9TRUxfQl9WU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgIElRTV9GRF9SQVRFU0VMX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgzMDAxMAorI2RlZmluZSAgSVFNX1JDX1JBVEVfT0ZTX0xPX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODQwMDEwCisjZGVmaW5lICBJUU1fUkNfUkFURV9PRlNfTE9fX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgSVFNX1JDX1JBVEVfT0ZTX0xPX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGCisjZGVmaW5lICBJUU1fUkNfUkFURV9PRlNfSElfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lICBJUU1fUkNfQURKX1NFTF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NDAwMTQKKyNkZWZpbmUgICAgICBJUU1fUkNfQURKX1NFTF9CX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIElRTV9SQ19BREpfU0VMX0JfUUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgICAgSVFNX1JDX0FESl9TRUxfQl9WU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgIElRTV9SQ19TVFJFVENIX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg0MDAxNgorI2RlZmluZSAgSVFNX0NGX0NPTU1fSU5UX01TS19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDA2CisjZGVmaW5lICBJUU1fQ0ZfU1lNTUVUUklDX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NjAwMTAKKyNkZWZpbmUgIElRTV9DRl9NSURUQVBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg2MDAxMQorI2RlZmluZSAgICBJUU1fQ0ZfTUlEVEFQX1JFX19CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICBJUU1fQ0ZfTUlEVEFQX0lNX19CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgSVFNX0NGX09VVF9FTkFfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDEyCisjZGVmaW5lICAgIElRTV9DRl9PVVRfRU5BX1FBTV9fQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgIElRTV9DRl9PVVRfRU5BX09GRE1fX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgIElRTV9DRl9BREpfU0VMX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg2MDAxMworI2RlZmluZSAgSVFNX0NGX1NDQUxFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDE0CisjZGVmaW5lICBJUU1fQ0ZfU0NBTEVfU0hfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NjAwMTUKKyNkZWZpbmUgIElRTV9DRl9TQ0FMRV9TSF9fUFJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgSVFNX0NGX1BPV19NRUFTX0xFTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDE3CisjZGVmaW5lICBJUU1fQ0ZfRFNfRU5BX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NjAwMTkKKyNkZWZpbmUgIElRTV9DRl9UQVBfUkUwX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg2MDAyMAorI2RlZmluZSAgSVFNX0NGX1RBUF9JTTBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDQwCisjZGVmaW5lICBJUU1fQ0ZfQ0xQX1ZBTF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NjAwNjAKKyNkZWZpbmUgIElRTV9DRl9EQVRBVEhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg2MDA2MQorI2RlZmluZSAgSVFNX0NGX1BLRFRIX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDYyCisjZGVmaW5lICBJUU1fQ0ZfV05EX0xFTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NjAwNjMKKyNkZWZpbmUgIElRTV9DRl9ERVRfTENUX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg2MDA2NAorI2RlZmluZSAgSVFNX0NGX0JZUEFTU0RFVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODYwMDY3CisjZGVmaW5lICBJUU1fQUZfQ09NTV9FWEVDX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMDAKKyNkZWZpbmUgICAgSVFNX0FGX0NPTU1fRVhFQ19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgSVFNX0FGX0NMS05FR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDEyCisjZGVmaW5lICAgIElRTV9BRl9DTEtORUdfQ0xLTkVHREFUQV9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICAgICBJUU1fQUZfQ0xLTkVHX0NMS05FR0RBVEFfQ0xLX0FEQ19EQVRBX1BPUyAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIElRTV9BRl9DTEtORUdfQ0xLTkVHREFUQV9DTEtfQURDX0RBVEFfTkVHICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICBJUU1fQUZfU1RBUlRfTE9DS19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMUIKKyNkZWZpbmUgIElRTV9BRl9QSEFTRTBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg3MDAxQworI2RlZmluZSAgSVFNX0FGX1BIQVNFMV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDFECisjZGVmaW5lICBJUU1fQUZfUEhBU0UyX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMUUKKyNkZWZpbmUgIElRTV9BRl9DTFBfTEVOX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg3MDAyMworI2RlZmluZSAgSVFNX0FGX0NMUF9USF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDI0CisjZGVmaW5lICBJUU1fQUZfU05TX0xFTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMjYKKyNkZWZpbmUgIElRTV9BRl9BR0NfSUZfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg3MDAyOAorI2RlZmluZSAgSVFNX0FGX0FHQ19SRl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDI5CisjZGVmaW5lICBJUU1fQUZfUERSRUZfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMkIKKyNkZWZpbmUgIElRTV9BRl9QRFJFRl9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgIElRTV9BRl9TVERCWV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg3MDAyQworI2RlZmluZSAgICAgIElRTV9BRl9TVERCWV9TVERCWV9BRENfU1RBTkRCWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgICAgSVFNX0FGX1NUREJZX1NUREJZX0FNUF9TVEFOREJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICAgICBJUU1fQUZfU1REQllfU1REQllfUERfU1RBTkRCWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgICAgIElRTV9BRl9TVERCWV9TVERCWV9UQUdDX0lGX1NUQU5EQlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSAgICAgIElRTV9BRl9TVERCWV9TVERCWV9UQUdDX1JGX1NUQU5EQlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgSVFNX0FGX0FNVVhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDJECisjZGVmaW5lICAgIElRTV9BRl9BTVVYX1NJR05BTDJBREMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgIElRTV9BRl9VUERfU0VMX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTg3MDAyRgorI2RlZmluZSAgSVFNX0FGX0lOQ19MQ1RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODcwMDM0CisjZGVmaW5lICBJUU1fQUZfSU5DX0JZUEFTU19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4NzAwMzYKKyNkZWZpbmUgIE9GRE1fQ1BfQ09NTV9FWEVDX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMDAwMAorI2RlZmluZSAgICBPRkRNX0NQX0NPTU1fRVhFQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICBPRkRNX0VDX1NCX1BSSU9SX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM0MTAwMTMKKyNkZWZpbmUgICAgT0ZETV9FQ19TQl9QUklPUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICBPRkRNX0VDX1NCX1BSSU9SX0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICBPRkRNX0VRX1RPUF9URF9UUFNfQ09OU1RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMTAwNTQKKyNkZWZpbmUgIE9GRE1fRVFfVE9QX1REX1RQU19DT05TVF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgICBPRkRNX0VRX1RPUF9URF9UUFNfQ09OU1RfNjRRQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICBPRkRNX0VRX1RPUF9URF9UUFNfQ09ERV9IUF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMTAwNTYKKyNkZWZpbmUgIE9GRE1fRVFfVE9QX1REX1RQU19DT0RFX0hQX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworI2RlZmluZSAgICBPRkRNX0VRX1RPUF9URF9UUFNfQ09ERV9MUF83XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICBPRkRNX0VRX1RPUF9URF9TUVJfRVJSX0lfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMTAwNUUKKyNkZWZpbmUgIE9GRE1fRVFfVE9QX1REX1NRUl9FUlJfUV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAxMDA1RgorI2RlZmluZSAgT0ZETV9FUV9UT1BfVERfU1FSX0VSUl9FWFBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDEwMDYwCisjZGVmaW5lICBPRkRNX0VRX1RPUF9URF9SRVFfU01CX0NOVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMTAwNjEKKyNkZWZpbmUgIE9GRE1fRVFfVE9QX1REX1RQU19QV1JfT0ZTX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAxMDA2MgorI2RlZmluZSAgT0ZETV9MQ19DT01NX0VYRUNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzODAwMDAwCisjZGVmaW5lICAgIE9GRE1fTENfQ09NTV9FWEVDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIE9GRE1fU0NfQ09NTV9FWEVDX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MwMDAwMAorI2RlZmluZSAgICBPRkRNX1NDX0NPTU1fRVhFQ19TVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICBPRkRNX1NDX0NPTU1fU1RBVEVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMDAwMDEKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX1BBUkFNMF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA0MAorI2RlZmluZSAgT0ZETV9TQ19SQV9SQU1fUEFSQU0xX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQzIwMDQxCisjZGVmaW5lICBPRkRNX1NDX1JBX1JBTV9DTURfQUREUl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMjAwNDIKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX0NNRF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA0MworI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9DTURfTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0NNRF9QUk9DX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fQ01EX1NFVF9QUkVGX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9DTURfUFJPR1JBTV9QQVJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0NNRF9HRVRfT1BfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fQ01EX1VTRVJfSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NgorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9DTURfU0VUX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0NNRF9TRVRfRUNIT19USU1JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fU1dfRVZFTlRfUlVOX05NQVNLX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9MT0NLVFJBQ0tfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMjAwNDgKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fTU9ERV9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX01PREVfMksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fTU9ERV84SyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9HVUFSRF8zMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX0dVQVJEXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fR1VBUkRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9HVUFSRF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QworI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX0NPTlNUX1FQU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fQ09OU1RfUUFNMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fQ09OU1RfUUFNNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fSElFUl9OTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX0ExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX0EyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9ISUVSX0E0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9SQVRFXzFfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX1JBVEVfMl8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9SQVRFXzNfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwCisjZGVmaW5lICAgICAgT0ZETV9TQ19SQV9SQU1fT1BfUEFSQU1fUkFURV81XzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwMAorI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX1JBVEVfN184ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAKKyNkZWZpbmUgICAgICBPRkRNX1NDX1JBX1JBTV9PUF9QQVJBTV9QUklPX0hJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIE9GRE1fU0NfUkFfUkFNX09QX1BBUkFNX1BSSU9fTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX09QX0FVVE9fTU9ERV9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fT1BfQVVUT19HVUFSRF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9PUF9BVVRPX0NPTlNUX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX09QX0FVVE9fSElFUl9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fT1BfQVVUT19SQVRFX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX0xPQ0tfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA0QgorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9MT0NLX0RFTU9EX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0xPQ0tfRkVDX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICAgT0ZETV9TQ19SQV9SQU1fTE9DS19NUEVHX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9MT0NLX05PRFZCVF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICBPRkRNX1NDX1JBX1JBTV9CRV9PUFRfREVMQVlfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMjAwNEQKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX0JFX09QVF9JTklUX0RFTEFZX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA0RQorI2RlZmluZSAgT0ZETV9TQ19SQV9SQU1fRUNIT19USFJFU19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQzIwMDRGCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfOEtfX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfOEtfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGCisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfMktfX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgIE9GRE1fU0NfUkFfUkFNX0VDSE9fVEhSRVNfMktfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGMDAKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX0NPTkZJR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA1MAorI2RlZmluZSAgICBPRkRNX1NDX1JBX1JBTV9DT05GSUdfTkVfRklYX0VOQUJMRV9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX0ZSX1RIUkVTXzhLX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDA3RAorI2RlZmluZSAgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF8yS19QRVJfTEVGVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQzIwMEUwCisjZGVmaW5lICBPRkRNX1NDX1JBX1JBTV9OSV9JTklUXzJLX1BFUl9SSUdIVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMjAwRTEKKyNkZWZpbmUgIE9GRE1fU0NfUkFfUkFNX05JX0lOSVRfOEtfUEVSX0xFRlRfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MyMDBFMworI2RlZmluZSAgT0ZETV9TQ19SQV9SQU1fTklfSU5JVF84S19QRVJfUklHSFRfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQzIwMEU0CisjZGVmaW5lICBPRkRNX1NDX1JBX1JBTV9TUk1NX0ZJWF9GQUNUXzhLX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNDMjAwRjgKKyNkZWZpbmUgIFFBTV9DT01NX0VYRUNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMDAwMAorI2RlZmluZSAgICBRQU1fQ09NTV9FWEVDX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgIFFBTV9DT01NX0VYRUNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgUUFNX1RPUF9BTk5FWF9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICBRQU1fVE9QX0FOTkVYX0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICBRQU1fU0xfRVJSX1BPV0VSX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MzAwMTcKKyNkZWZpbmUgIFFBTV9EUV9RVUFMX0ZVTjBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ0MDAxOAorI2RlZmluZSAgUUFNX0RRX1FVQUxfRlVOMV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDQwMDE5CisjZGVmaW5lICBRQU1fRFFfUVVBTF9GVU4yX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NDAwMUEKKyNkZWZpbmUgIFFBTV9EUV9RVUFMX0ZVTjNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ0MDAxQgorI2RlZmluZSAgUUFNX0RRX1FVQUxfRlVONF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDQwMDFDCisjZGVmaW5lICBRQU1fRFFfUVVBTF9GVU41X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NDAwMUQKKyNkZWZpbmUgIFFBTV9MQ19NT0RFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAxMAorI2RlZmluZSAgUUFNX0xDX1FVQUxfVEFCMF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDE4CisjZGVmaW5lICBRQU1fTENfUVVBTF9UQUIxX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMTkKKyNkZWZpbmUgIFFBTV9MQ19RVUFMX1RBQjJfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAxQQorI2RlZmluZSAgUUFNX0xDX1FVQUxfVEFCM19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDFCCisjZGVmaW5lICBRQU1fTENfUVVBTF9UQUI0X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMUMKKyNkZWZpbmUgIFFBTV9MQ19RVUFMX1RBQjVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAxRAorI2RlZmluZSAgUUFNX0xDX1FVQUxfVEFCNl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDFFCisjZGVmaW5lICBRQU1fTENfUVVBTF9UQUI4X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMUYKKyNkZWZpbmUgIFFBTV9MQ19RVUFMX1RBQjlfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAyMAorI2RlZmluZSAgUUFNX0xDX1FVQUxfVEFCMTBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDIxCisjZGVmaW5lICBRQU1fTENfUVVBTF9UQUIxMl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMjIKKyNkZWZpbmUgIFFBTV9MQ19RVUFMX1RBQjE1X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAyMworI2RlZmluZSAgUUFNX0xDX1FVQUxfVEFCMTZfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDI0CisjZGVmaW5lICBRQU1fTENfUVVBTF9UQUIyMF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMjUKKyNkZWZpbmUgIFFBTV9MQ19RVUFMX1RBQjI1X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAyNgorI2RlZmluZSAgUUFNX0xDX0xQRl9GQUNUT1JQX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDI4CisjZGVmaW5lICBRQU1fTENfTFBGX0ZBQ1RPUklfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NTAwMjkKKyNkZWZpbmUgIFFBTV9MQ19SQVRFX0xJTUlUX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ1MDAyQQorI2RlZmluZSAgUUFNX0xDX1NZTUJPTF9GUkVRX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDUwMDJCCisjZGVmaW5lICBRQU1fU1lfVElNRU9VVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NzAwMTEKKyNkZWZpbmUgIFFBTV9TWV9USU1FT1VUX19QUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0E5OAorI2RlZmluZSAgUUFNX1NZX1NZTkNfTFdNX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDcwMDEyCisjZGVmaW5lICBRQU1fU1lfU1lOQ19BV01fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0NzAwMTMKKyNkZWZpbmUgIFFBTV9TWV9TWU5DX0hXTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQ3MDAxNAorI2RlZmluZSAgUUFNX1NZX1NQX0lOVl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDcwMDE3CisjZGVmaW5lICAgIFFBTV9TWV9TUF9JTlZfU1BFQ1RSVU1fSU5WX0RJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIFNDVV9DT01NX0VYRUNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwCisjZGVmaW5lICAgIFNDVV9DT01NX0VYRUNfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgU0NVX0NPTU1fRVhFQ19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICBTQ1VfQ09NTV9FWEVDX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICBTQ1VfUkFNX0RSSVZFUl9ERUJVR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUVCRgorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX1NURVBfUEVSSU9EX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFFQzQKKyNkZWZpbmUgIFNDVV9SQU1fR1BJT19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRUM3CisjZGVmaW5lICAgICAgU0NVX1JBTV9HUElPX0hXX0xPQ0tfSU5EX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0NMUF9DVFJMX01PREVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRUM4CisjZGVmaW5lICBTQ1VfUkFNX0ZFQ19BQ0NVTV9QS1RfRkFJTFVSRVNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUVDQgorI2RlZmluZSAgU0NVX1JBTV9GRUNfUFJFX1JTX0JFUl9GSUxURVJfU0hfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMDUKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0ZBU1RfU05TX0NUUkxfREVMQVlfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjE1CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19LSV9DWUNMRU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYxNworI2RlZmluZSAgU0NVX1JBTV9BR0NfU05TX0NZQ0xFTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMTgKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX1JGX1NOU19ERVZfTUFYX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjE5CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19SRl9TTlNfREVWX01JTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYxQQorI2RlZmluZSAgU0NVX1JBTV9BR0NfUkZfTUFYX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMUIKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0NPTkZJR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjI0CisjZGVmaW5lICAgIFNDVV9SQU1fQUdDX0NPTkZJR19ESVNBQkxFX1JGX0FHQ19fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgU0NVX1JBTV9BR0NfQ09ORklHX0RJU0FCTEVfSUZfQUdDX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgICBTQ1VfUkFNX0FHQ19DT05GSUdfSU5WX0lGX1BPTF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgICAgU0NVX1JBTV9BR0NfQ09ORklHX0lOVl9SRl9QT0xfX00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19LSV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYyNQorI2RlZmluZSAgICBTQ1VfUkFNX0FHQ19LSV9SRl9fQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICBTQ1VfUkFNX0FHQ19LSV9SRl9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMAorI2RlZmluZSAgICBTQ1VfUkFNX0FHQ19LSV9JRl9fQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICBTQ1VfUkFNX0FHQ19LSV9JRl9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMDAKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0tJX1JFRF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjI2CisjZGVmaW5lICAgIFNDVV9SQU1fQUdDX0tJX1JFRF9SQUdDX1JFRF9fQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgIFNDVV9SQU1fQUdDX0tJX1JFRF9SQUdDX1JFRF9fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMKKyNkZWZpbmUgICAgU0NVX1JBTV9BR0NfS0lfUkVEX0lBR0NfUkVEX19CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgU0NVX1JBTV9BR0NfS0lfUkVEX0lBR0NfUkVEX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0tJX0lOTkVSR0FJTl9NSU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjI3CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19LSV9NSU5HQUlOX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYyOAorI2RlZmluZSAgU0NVX1JBTV9BR0NfS0lfTUFYR0FJTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMjkKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0tJX01BWE1JTkdBSU5fVEhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjJBCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19LSV9NSU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYyQgorI2RlZmluZSAgU0NVX1JBTV9BR0NfS0lfTUFYX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMkMKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0NMUF9TVU1fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjJECisjZGVmaW5lICBTQ1VfUkFNX0FHQ19DTFBfU1VNX01JTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYyRQorI2RlZmluZSAgU0NVX1JBTV9BR0NfQ0xQX1NVTV9NQVhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMkYKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0NMUF9DWUNMRU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjMwCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19DTFBfQ1lDQ05UX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYzMQorI2RlZmluZSAgU0NVX1JBTV9BR0NfQ0xQX0RJUl9UT19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMzIKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0NMUF9ESVJfV0RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjMzCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19DTFBfRElSX1NUUF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYzNAorI2RlZmluZSAgU0NVX1JBTV9BR0NfU05TX1NVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMzUKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX1NOU19TVU1fTUlOX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjM2CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19TTlNfU1VNX01BWF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYzNworI2RlZmluZSAgU0NVX1JBTV9BR0NfU05TX0NZQ0NOVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGMzgKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX1NOU19ESVJfVE9fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjM5CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19TTlNfRElSX1dEX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYzQQorI2RlZmluZSAgU0NVX1JBTV9BR0NfU05TX0RJUl9TVFBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGM0IKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0lOR0FJTl9UR1RfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjNECisjZGVmaW5lICBTQ1VfUkFNX0FHQ19JTkdBSU5fVEdUX01JTl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUYzRQorI2RlZmluZSAgU0NVX1JBTV9BR0NfSU5HQUlOX1RHVF9NQVhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGM0YKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0lGX0lBQ0NVX0hJX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjQwCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9MT19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY0MQorI2RlZmluZSAgU0NVX1JBTV9BR0NfSUZfSUFDQ1VfSElfVEdUX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGNDIKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0lGX0lBQ0NVX0hJX1RHVF9NSU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjQzCisjZGVmaW5lICBTQ1VfUkFNX0FHQ19JRl9JQUNDVV9ISV9UR1RfTUFYX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY0NAorI2RlZmluZSAgU0NVX1JBTV9BR0NfUkZfSUFDQ1VfSElfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGNDUKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX1JGX0lBQ0NVX0xPX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjQ2CisjZGVmaW5lICBTQ1VfUkFNX0FHQ19SRl9JQUNDVV9ISV9DT19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY0NworI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX01FRElBTl9BVl9NVUxUX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGODQKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0ZTTV9SQURJVVNfQVZfTElNSVRfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjg1CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUMV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY4NgorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDJfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGODcKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0ZTTV9MQ0FWR19PRkZTRVQzX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjg4CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9GU01fTENBVkdfT0ZGU0VUNF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY4OQorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX0xDQVZHX09GRlNFVDVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOEEKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0ZTTV9SVEhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjhFCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9GU01fRlRIX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY4RgorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX1BUSF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOTAKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0ZTTV9NVEhfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjkxCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9GU01fQ1RIX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY5MgorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX1FUSF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOTMKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0ZTTV9SQVRFX0xJTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjk0CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9GU01fRlJFUV9MSU1fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY5NQorI2RlZmluZSAgU0NVX1JBTV9RQU1fRlNNX0NPVU5UX0xJTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOTYKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0NBX0NPQVJTRV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjk3CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19DQV9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY5OQorI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfQ1BfQ09BUlNFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOUEKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0NQX01FRElVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjlCCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19DUF9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY5QworI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfQ0lfQ09BUlNFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGOUQKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0NJX01FRElVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRjlFCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19DSV9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUY5RgorI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfRVBfQ09BUlNFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQTAKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0VQX01FRElVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkExCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19FUF9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZBMgorI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfRUlfQ09BUlNFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQTMKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0VJX01FRElVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkE0CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19FSV9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZBNQorI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfQ0ZfQ09BUlNFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQTYKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0NGX01FRElVTV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkE3CisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19DRl9GSU5FX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZBOAorI2RlZmluZSAgU0NVX1JBTV9RQU1fTENfQ0YxX0NPQVJTRV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQTkKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0xDX0NGMV9NRURJVU1fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkFBCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9MQ19DRjFfRklORV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZBQgorI2RlZmluZSAgU0NVX1JBTV9RQU1fU0xfU0lHX1BPV0VSX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQUMKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQwX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkFECisjZGVmaW5lICBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFEMV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZBRQorI2RlZmluZSAgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDJfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQUYKKyNkZWZpbmUgIFNDVV9SQU1fUUFNX0VRX0NNQV9SQUQzX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkIwCisjZGVmaW5lICBTQ1VfUkFNX1FBTV9FUV9DTUFfUkFENF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZCMQorI2RlZmluZSAgU0NVX1JBTV9RQU1fRVFfQ01BX1JBRDVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGQjIKKyNkZWZpbmUgICAgICBTQ1VfUkFNX1FBTV9MT0NLRURfTE9DS0VEX0RFTU9EX0xPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSAgICAgIFNDVV9SQU1fUUFNX0xPQ0tFRF9MT0NLRURfTE9DS0VEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lICAgICAgU0NVX1JBTV9RQU1fTE9DS0VEX0xPQ0tFRF9ORVZFUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgIFNDVV9SQU1fQUdDX0ZBU1RfQ0xQX0NUUkxfREVMQVlfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkVBCisjZGVmaW5lICBTQ1VfUkFNX0RSSVZFUl9WRVJfSElfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZFQgorI2RlZmluZSAgU0NVX1JBTV9EUklWRVJfVkVSX0xPX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGRUMKKyNkZWZpbmUgIFNDVV9SQU1fUEFSQU1fMTVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMxRkVECisjZGVmaW5lICBTQ1VfUkFNX1BBUkFNXzBfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzMUZGQworI2RlZmluZSAgU0NVX1JBTV9DT01NQU5EX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzFGRkQKKyNkZWZpbmUgICAgU0NVX1JBTV9DT01NQU5EX0NNRF9ERU1PRF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgICBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX1NFVF9FTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgIFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfU0VUX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICAgU0NVX1JBTV9DT01NQU5EX0NNRF9ERU1PRF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgICBTQ1VfUkFNX0NPTU1BTkRfQ01EX0RFTU9EX0dFVF9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1CisjZGVmaW5lICAgIFNDVV9SQU1fQ09NTUFORF9DTURfREVNT0RfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkKKyNkZWZpbmUgICAgICBTQ1VfUkFNX0NPTU1BTkRfU1RBTkRBUkRfUUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lICAgICAgU0NVX1JBTV9DT01NQU5EX1NUQU5EQVJEX09GRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSAgU0lPX1RPUF9DT01NX0tFWV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MTAwMEYKKyNkZWZpbmUgICAgU0lPX1RPUF9DT01NX0tFWV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkFCQQorI2RlZmluZSAgU0lPX1RPUF9KVEFHSURfTE9fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MTAwMTIKKyNkZWZpbmUgIFNJT19ISV9SQV9SQU1fUkVTX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDIwMDMxCisjZGVmaW5lICBTSU9fSElfUkFfUkFNX0NNRF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQyMDAzMgorI2RlZmluZSAgICBTSU9fSElfUkFfUkFNX0NNRF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgIFNJT19ISV9SQV9SQU1fQ01EX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICAgU0lPX0hJX1JBX1JBTV9DTURfQlJEQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworI2RlZmluZSAgU0lPX0hJX1JBX1JBTV9QQVJfMV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MjAwMzMKKyNkZWZpbmUgICAgICBTSU9fSElfUkFfUkFNX1BBUl8xX1BBUjFfU0VDX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mzk0NQorI2RlZmluZSAgU0lPX0hJX1JBX1JBTV9QQVJfMl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MjAwMzQKKyNkZWZpbmUgICAgU0lPX0hJX1JBX1JBTV9QQVJfMl9DRkdfRElWX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YKKyNkZWZpbmUgICAgICBTSU9fSElfUkFfUkFNX1BBUl8yX0JSRF9DRkdfT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSAgICAgIFNJT19ISV9SQV9SQU1fUEFSXzJfQlJEX0NGR19DTE9TRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICBTSU9fSElfUkFfUkFNX1BBUl8zX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQyMDAzNQorI2RlZmluZSAgICBTSU9fSElfUkFfUkFNX1BBUl8zX0NGR19EQkxfU0RBX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RgorI2RlZmluZSAgICBTSU9fSElfUkFfUkFNX1BBUl8zX0NGR19EQkxfU0NMX19CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgIFNJT19ISV9SQV9SQU1fUEFSXzNfQUNQX1JXX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgICAgU0lPX0hJX1JBX1JBTV9QQVJfM19BQ1BfUldfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgIFNJT19ISV9SQV9SQU1fUEFSXzRfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDIwMDM2CisjZGVmaW5lICBTSU9fSElfUkFfUkFNX1BBUl81X19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQyMDAzNworI2RlZmluZSAgICAgIFNJT19ISV9SQV9SQU1fUEFSXzVfQ0ZHX1NMVjBfU0xBVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgIFNJT19ISV9SQV9SQU1fUEFSXzVfQ0ZHX1NMRUVQX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICAgICBTSU9fSElfUkFfUkFNX1BBUl81X0NGR19TTEVFUF9aWlogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgU0lPX0hJX1JBX1JBTV9QQVJfNl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MjAwMzgKKyNkZWZpbmUgIFNJT19DQ19QTExfTE9DS19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDUwMDEyCisjZGVmaW5lICBTSU9fQ0NfUFdEX01PREVfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ1MDAxNQorI2RlZmluZSAgICAgIFNJT19DQ19QV0RfTU9ERV9MRVZFTF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgICAgU0lPX0NDX1BXRF9NT0RFX0xFVkVMX09GRE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgICBTSU9fQ0NfUFdEX01PREVfTEVWRUxfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgICAgIFNJT19DQ19QV0RfTU9ERV9MRVZFTF9QTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgICAgU0lPX0NDX1BXRF9NT0RFX0xFVkVMX09TQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgIFNJT19DQ19TT0ZUX1JTVF9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDUwMDE2CisjZGVmaW5lICAgIFNJT19DQ19TT0ZUX1JTVF9PRkRNX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICAgU0lPX0NDX1NPRlRfUlNUX1NZU19fTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgICBTSU9fQ0NfU09GVF9SU1RfT1NDX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICBTSU9fQ0NfVVBEQVRFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ1MDAxNworI2RlZmluZSAgICBTSU9fQ0NfVVBEQVRFX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQUJBCisjZGVmaW5lICBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfRU5BQkxFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ3MDAxMAorI2RlZmluZSAgICBTSU9fT0ZETV9TSF9PRkRNX1JJTkdfRU5BQkxFX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgIFNJT19PRkRNX1NIX09GRE1fUklOR19FTkFCTEVfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgIFNJT19PRkRNX1NIX09GRE1fUklOR19TVEFUVVNfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDcwMDEyCisjZGVmaW5lICAgIFNJT19PRkRNX1NIX09GRE1fUklOR19TVEFUVVNfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgU0lPX09GRE1fU0hfT0ZETV9SSU5HX1NUQVRVU19FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgU0lPX0JMX0NPTU1fRVhFQ19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ODAwMDAKKyNkZWZpbmUgICAgU0lPX0JMX0NPTU1fRVhFQ19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgU0lPX0JMX1NUQVRVU19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ODAwMTAKKyNkZWZpbmUgIFNJT19CTF9NT0RFX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDgwMDExCisjZGVmaW5lICAgIFNJT19CTF9NT0RFX0RJUkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgICAgU0lPX0JMX01PREVfQ0hBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgU0lPX0JMX0VOQUJMRV9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ODAwMTIKKyNkZWZpbmUgICAgU0lPX0JMX0VOQUJMRV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgU0lPX0JMX1RHVF9IRFJfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ODAwMTQKKyNkZWZpbmUgIFNJT19CTF9UR1RfQUREUl9fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDgwMDE1CisjZGVmaW5lICBTSU9fQkxfU1JDX0FERFJfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ4MDAxNgorI2RlZmluZSAgU0lPX0JMX1NSQ19MRU5fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0ODAwMTcKKyNkZWZpbmUgIFNJT19CTF9DSEFJTl9BRERSX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDgwMDE4CisjZGVmaW5lICBTSU9fQkxfQ0hBSU5fTEVOX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQ4MDAxOQorI2RlZmluZSAgU0lPX1BEUl9NT05fQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMTAKKyNkZWZpbmUgIFNJT19QRFJfVUlPX0lOX0hJX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YwMDE1CisjZGVmaW5lICBTSU9fUERSX1VJT19PVVRfTE9fX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGMDAxNgorI2RlZmluZSAgU0lPX1BEUl9PSFdfQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMUYKKyNkZWZpbmUgICAgU0lPX1BEUl9PSFdfQ0ZHX0ZSRUZfU0VMX19NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSAgU0lPX1BEUl9NU1RSVF9DRkdfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMjUKKyNkZWZpbmUgIFNJT19QRFJfTUVSUl9DRkdfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YwMDI2CisjZGVmaW5lICBTSU9fUERSX01DTEtfQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGMDAyOAorI2RlZmluZSAgICBTSU9fUERSX01DTEtfQ0ZHX0RSSVZFX19CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgU0lPX1BEUl9NVkFMX0NGR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMjkKKyNkZWZpbmUgIFNJT19QRFJfTUQwX0NGR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YwMDJBCisjZGVmaW5lICAgIFNJT19QRFJfTUQwX0NGR19EUklWRV9fQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICBTSU9fUERSX01EMV9DRkdfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGMDAyQgorI2RlZmluZSAgU0lPX1BEUl9NRDJfQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMkMKKyNkZWZpbmUgIFNJT19QRFJfTUQzX0NGR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YwMDJECisjZGVmaW5lICBTSU9fUERSX01ENF9DRkdfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGMDAyRgorI2RlZmluZSAgU0lPX1BEUl9NRDVfQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMzAKKyNkZWZpbmUgIFNJT19QRFJfTUQ2X0NGR19fQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YwMDMxCisjZGVmaW5lICBTSU9fUERSX01EN19DRkdfX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGMDAzMgorI2RlZmluZSAgU0lPX1BEUl9TTUFfVFhfQ0ZHX19BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RjAwMzgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMC5jCmluZGV4IGY3YTQwYTEuLmFhOWNjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDAuYwpAQCAtMzUsMjEgKzM1LDE4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAKLSNkZWZpbmUgZGViKGFyZ3MuLi4pICBkbyB7IFwKKyNkZWZpbmUgaXRkX2RiZyhhcmdzLi4uKSAgZG8geyBcCiAJaWYgKGRlYnVnKSB7IFwKIAkJcHJpbnRrKEtFUk5fREVCVUcgICAiSVREMTAwMDogIiBhcmdzKTtcCi0JCXByaW50aygiXG4iKTsgXAogCX0gXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSB3YXJuKGFyZ3MuLi4pIGRvIHsgXAorI2RlZmluZSBpdGRfd2FybihhcmdzLi4uKSBkbyB7IFwKIAlwcmludGsoS0VSTl9XQVJOSU5HICJJVEQxMDAwOiAiIGFyZ3MpOyBcCi0JcHJpbnRrKCJcbiIpOyBcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIGluZm8oYXJncy4uLikgZG8geyBcCisjZGVmaW5lIGl0ZF9pbmZvKGFyZ3MuLi4pIGRvIHsgXAogCXByaW50ayhLRVJOX0lORk8gICAgIklURDEwMDA6ICIgYXJncyk7IFwKLQlwcmludGsoIlxuIik7IFwKIH0gd2hpbGUgKDApCiAKIC8qIGRvbid0IHdyaXRlIG1vcmUgdGhhbiBvbmUgYnl0ZSB3aXRoIGZsZXhjb3AgYmVoaW5kICovCkBAIC02Miw3ICs1OSw3IEBACiAJYnVmWzBdID0gcmVnOwogCW1lbWNweSgmYnVmWzFdLCB2LCBsZW4pOwogCi0JLyogZGViKCJ3ciAlMDJ4OiAlMDJ4IiwgcmVnLCB2WzBdKTsgKi8KKwkvKiBpdGRfZGJnKCJ3ciAlMDJ4OiAlMDJ4XG4iLCByZWcsIHZbMF0pOyAqLwogCiAJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIml0ZDEwMDAgSTJDIHdyaXRlIGZhaWxlZFxuIik7CkBAIC04Myw3ICs4MCw3IEBACiAJaXRkMTAwMF93cml0ZV9yZWdzKHN0YXRlLCAocmVnIC0gMSkgJiAweGZmLCAmc3RhdGUtPnNoYWRvd1socmVnIC0gMSkgJiAweGZmXSwgMSk7CiAKIAlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMikgIT0gMikgewotCQl3YXJuKCJpdGQxMDAwIEkyQyByZWFkIGZhaWxlZCIpOworCQlpdGRfd2FybigiaXRkMTAwMCBJMkMgcmVhZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAJcmV0dXJuIHZhbDsKQEAgLTEyNywxNCArMTI0LDE0IEBACiAJdTggYmJndm1pbiA9IGl0ZDEwMDBfcmVhZF9yZWcoc3RhdGUsIEJCR1ZNSU4pICYgMHhmMDsKIAl1OCBidyAgICAgID0gaXRkMTAwMF9yZWFkX3JlZyhzdGF0ZSwgQlcpICAgICAgJiAweGYwOwogCi0JZGViKCJzeW1ib2xfcmF0ZSA9ICVkIiwgc3ltYm9sX3JhdGUpOworCWl0ZF9kYmcoInN5bWJvbF9yYXRlID0gJWRcbiIsIHN5bWJvbF9yYXRlKTsKIAogCS8qIG5vdCBzdXJlIHdoYXQgaXMgdGhhdCA/IC0gc3RhcnRpbmcgdG8gZG93bmxvYWQgdGhlIHRhYmxlICovCiAJaXRkMTAwMF93cml0ZV9yZWcoc3RhdGUsIENPTjEsIGNvbjEgfCAoMSA8PCAxKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpdGQxMDAwX2xwZl9wZ2EpOyBpKyspCiAJCWlmIChzeW1ib2xfcmF0ZSA8IGl0ZDEwMDBfbHBmX3BnYVtpXS5zeW1ib2xfcmF0ZSkgewotCQkJZGViKCJzeW1yYXRlOiBpbmRleDogJWQgcGdhZXh0OiAleCwgYmJndm1pbjogJXgiLCBpLCBpdGQxMDAwX2xwZl9wZ2FbaV0ucGdhZXh0LCBpdGQxMDAwX2xwZl9wZ2FbaV0uYmJndm1pbik7CisJCQlpdGRfZGJnKCJzeW1yYXRlOiBpbmRleDogJWQgcGdhZXh0OiAleCwgYmJndm1pbjogJXhcbiIsIGksIGl0ZDEwMDBfbHBmX3BnYVtpXS5wZ2FleHQsIGl0ZDEwMDBfbHBmX3BnYVtpXS5iYmd2bWluKTsKIAkJCWl0ZDEwMDBfd3JpdGVfcmVnKHN0YXRlLCBQTExGSCwgICBwbGxmaCB8IChpdGQxMDAwX2xwZl9wZ2FbaV0ucGdhZXh0IDw8IDQpKTsKIAkJCWl0ZDEwMDBfd3JpdGVfcmVnKHN0YXRlLCBCQkdWTUlOLCBiYmd2bWluIHwgKGl0ZDEwMDBfbHBmX3BnYVtpXS5iYmd2bWluKSk7CiAJCQlpdGQxMDAwX3dyaXRlX3JlZyhzdGF0ZSwgQlcsICAgICAgYncgfCAoaSAmIDB4MGYpKTsKQEAgLTE4Miw3ICsxNzksNyBAQAogCiAJCQlhZGNvdXQgPSBpdGQxMDAwX3JlYWRfcmVnKHN0YXRlLCBQTExMT0NLKSAmIDB4MGY7CiAKLQkJCWRlYigiVkNPOiAlZGtIejogJWQgLT4gQURDT1VUOiAlZCAlMDJ4IiwgZnJlcV9raHosIGl0ZDEwMDBfdmNvcmdbaV0udmNvcmcsIGFkY291dCwgdmNvX2NocDFfaTJjKTsKKwkJCWl0ZF9kYmcoIlZDTzogJWRrSHo6ICVkIC0+IEFEQ09VVDogJWQgJTAyeFxuIiwgZnJlcV9raHosIGl0ZDEwMDBfdmNvcmdbaV0udmNvcmcsIGFkY291dCwgdmNvX2NocDFfaTJjKTsKIAogCQkJaWYgKGFkY291dCA+IDEzKSB7CiAJCQkJaWYgKCEoaXRkMTAwMF92Y29yZ1tpXS52Y29yZyA9PSA3IHx8IGl0ZDEwMDBfdmNvcmdbaV0udmNvcmcgPT0gMTUpKQpAQCAtMjMyLDcgKzIyOSw3IEBACiAJcGxsZiA9ICh1MzIpIHRtcDsKIAogCXN0YXRlLT5mcmVxdWVuY3kgPSAoKHBsbG4gKiAxMDAwKSArIChwbGxmICogMTAwMCkvMTA0ODU3NikgKiAyKkZSRUY7Ci0JZGViKCJmcmVxdWVuY3k6ICVka0h6ICh3YW50ZWQpICVka0h6IChzZXQpLCBQTExGID0gJWQsIFBMTE4gPSAlZCIsIGZyZXFfa2h6LCBzdGF0ZS0+ZnJlcXVlbmN5LCBwbGxmLCBwbGxuKTsKKwlpdGRfZGJnKCJmcmVxdWVuY3k6ICVka0h6ICh3YW50ZWQpICVka0h6IChzZXQpLCBQTExGID0gJWQsIFBMTE4gPSAlZFxuIiwgZnJlcV9raHosIHN0YXRlLT5mcmVxdWVuY3ksIHBsbGYsIHBsbG4pOwogCiAJaXRkMTAwMF93cml0ZV9yZWcoc3RhdGUsIFBMTE5ILCAweDgwKTsgLyogUExMTkggKi87CiAJaXRkMTAwMF93cml0ZV9yZWcoc3RhdGUsIFBMTE5MLCBwbGxuICYgMHhmZik7CkBAIC0yNDIsNyArMjM5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl0ZDEwMDBfZnJlX3ZhbHVlcyk7IGkrKykgewogCQlpZiAoZnJlcV9raHogPD0gaXRkMTAwMF9mcmVfdmFsdWVzW2ldLmZyZXEpIHsKLQkJCWRlYigiZnJlX3ZhbHVlczogJWQiLCBpKTsKKwkJCWl0ZF9kYmcoImZyZV92YWx1ZXM6ICVkXG4iLCBpKTsKIAkJCWl0ZDEwMDBfd3JpdGVfcmVnKHN0YXRlLCBSRlRSLCBpdGQxMDAwX2ZyZV92YWx1ZXNbaV0udmFsdWVzWzBdKTsKIAkJCWZvciAoaiA9IDA7IGogPCA5OyBqKyspCiAJCQkJaXRkMTAwMF93cml0ZV9yZWcoc3RhdGUsIFJGU1QxK2osIGl0ZDEwMDBfZnJlX3ZhbHVlc1tpXS52YWx1ZXNbaisxXSk7CkBAIC0zODIsNyArMzc5LDcgQEAKIAkJa2ZyZWUoc3RhdGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaW5mbygic3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgKElEOiAlZCkiLCBpKTsKKwlpdGRfaW5mbygic3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgKElEOiAlZClcbiIsIGkpOwogCiAJbWVtc2V0KHN0YXRlLT5zaGFkb3csIDB4ZmYsIHNpemVvZihzdGF0ZS0+c2hhZG93KSk7CiAJZm9yIChpID0gMHg2NTsgaSA8IDB4OWM7IGkrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQ2MDAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5jCmluZGV4IGE3NjNlYzc1Li42NTk5YjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQ2MDAwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAlpZiAoKHJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKIAkJZHByaW50aygibnh0NjAwMDogbnh0NjAwMF93cml0ZSBlcnJvciAocmVnOiAweCUwMlgsIGRhdGE6IDB4JTAyWCwgcmV0OiAlZClcbiIsIHJlZywgZGF0YSwgcmV0KTsKIAotCXJldHVybiAocmV0ICE9IDEpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIChyZXQgIT0gMSkgPyAtRUlPIDogMDsKIH0KIAogc3RhdGljIHU4IG54dDYwMDBfcmVhZHJlZyhzdHJ1Y3Qgbnh0NjAwMF9zdGF0ZSogc3RhdGUsIHU4IHJlZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5jCmluZGV4IDE3ZjhjZGYuLjM4NzlkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuYwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJc3RydWN0IHM1aDE0MjBfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGZyZXF1ZW5jeV9kZWx0YTsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgZmVzZXR0aW5nczsKLQl1aW50OF90IGNsb2NrX3NldHR0aW5nOworCXVpbnQ4X3QgY2xvY2tfc2V0dGluZzsKIAogCWRwcmludGsoImVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTY4NCwxOSArNjg0LDE5IEBACiAJc3dpdGNoIChzdGF0ZS0+ZmNsaykgewogCWRlZmF1bHQ6CiAJY2FzZSA4ODAwMDAwMDoKLQkJY2xvY2tfc2V0dHRpbmcgPSA4MDsKKwkJY2xvY2tfc2V0dGluZyA9IDgwOwogCQlicmVhazsKIAljYXNlIDg2MDAwMDAwOgotCQljbG9ja19zZXR0dGluZyA9IDc4OworCQljbG9ja19zZXR0aW5nID0gNzg7CiAJCWJyZWFrOwogCWNhc2UgODAwMDAwMDA6Ci0JCWNsb2NrX3NldHR0aW5nID0gNzI7CisJCWNsb2NrX3NldHRpbmcgPSA3MjsKIAkJYnJlYWs7CiAJY2FzZSA1OTAwMDAwMDoKLQkJY2xvY2tfc2V0dHRpbmcgPSA1MTsKKwkJY2xvY2tfc2V0dGluZyA9IDUxOwogCQlicmVhazsKIAljYXNlIDQ0MDAwMDAwOgotCQljbG9ja19zZXR0dGluZyA9IDM2OworCQljbG9ja19zZXR0aW5nID0gMzY7CiAJCWJyZWFrOwogCX0KIAlkcHJpbnRrKCJwbGwwMTogJWQsIFRvbmVGcmVxOiAlZFxuIiwgc3RhdGUtPmZjbGsvMTAwMDAwMCAtIDgsIChzdGF0ZS0+ZmNsayArIChUT05FX0ZSRVEgKiAzMikgLSAxKSAvIChUT05FX0ZSRVEgKiAzMikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxYzJkZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxYzJkZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODRlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTgyNzFjMmRkLmMKQEAgLTAsMCArMSwxMjUxIEBACisvKgorICogdGRhMTgyNzFjMmRkOiBEcml2ZXIgZm9yIHRoZSBUREExODI3MUMyIHR1bmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIERpZ2l0YWwgRGV2aWNlcyBHbWJICisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKK3N0cnVjdCBTU3RhbmRhcmRQYXJhbSB7CisJczMyICAgbV9JRkZyZXF1ZW5jeTsKKwl1MzIgICBtX0JhbmRXaWR0aDsKKwl1OCAgICBtX0VQM180XzA7CisJdTggICAgbV9FQjIyOworfTsKKworc3RydWN0IFNNYXAgeworCXUzMiAgIG1fRnJlcXVlbmN5OworCXU4ICAgIG1fUGFyYW07Cit9OworCitzdHJ1Y3QgU01hcEkgeworCXUzMiAgIG1fRnJlcXVlbmN5OworCXMzMiAgICBtX1BhcmFtOworfTsKKworc3RydWN0IFNNYXAyIHsKKwl1MzIgICBtX0ZyZXF1ZW5jeTsKKwl1OCAgICBtX1BhcmFtMTsKKwl1OCAgICBtX1BhcmFtMjsKK307CisKK3N0cnVjdCBTUkZCYW5kTWFwIHsKKwl1MzIgICBtX1JGX21heDsKKwl1MzIgICBtX1JGMV9EZWZhdWx0OworCXUzMiAgIG1fUkYyX0RlZmF1bHQ7CisJdTMyICAgbV9SRjNfRGVmYXVsdDsKK307CisKK2VudW0gRVJlZ2lzdGVyIHsKKwlJRCA9IDAsCisJVE0sCisJUEwsCisJRVAxLCBFUDIsIEVQMywgRVA0LCBFUDUsCisJQ1BELCBDRDEsIENEMiwgQ0QzLAorCU1QRCwgTUQxLCBNRDIsIE1EMywKKwlFQjEsIEVCMiwgRUIzLCBFQjQsIEVCNSwgRUI2LCBFQjcsIEVCOCwgRUI5LCBFQjEwLAorCUVCMTEsIEVCMTIsIEVCMTMsIEVCMTQsIEVCMTUsIEVCMTYsIEVCMTcsIEVCMTgsIEVCMTksIEVCMjAsCisJRUIyMSwgRUIyMiwgRUIyMywKKwlOVU1fUkVHUworfTsKKworc3RydWN0IHRkYV9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJdTggYWRyOworCisJdTMyICAgbV9GcmVxdWVuY3k7CisJdTMyICAgSUY7CisKKwl1OCAgICBtX0lGTGV2ZWxBbmFsb2c7CisJdTggICAgbV9JRkxldmVsRGlnaXRhbDsKKwl1OCAgICBtX0lGTGV2ZWxEVkJDOworCXU4ICAgIG1fSUZMZXZlbERWQlQ7CisKKwl1OCAgICBtX0VQNDsKKwl1OCAgICBtX0VQM19TdGFuZGJ5OworCisJYm9vbCAgbV9iTWFzdGVyOworCisJczMyICAgbV9TZXR0bGluZ1RpbWU7CisKKwl1OCAgICBtX1JlZ3NbTlVNX1JFR1NdOworCisJLyogVHJhY2tpbmcgZmlsdGVyIHNldHRpbmdzIGZvciBiYW5kIDAuLjYgKi8KKwl1MzIgICBtX1JGMVs3XTsKKwlzMzIgICBtX1JGX0ExWzddOworCXMzMiAgIG1fUkZfQjFbN107CisJdTMyICAgbV9SRjJbN107CisJczMyICAgbV9SRl9BMls3XTsKKwlzMzIgICBtX1JGX0IyWzddOworCXUzMiAgIG1fUkYzWzddOworCisJdTggICAgbV9UTVZhbHVlX1JGQ2FsOyAgICAvKiBDYWxpYnJhdGlvbiB0ZW1wZXJhdHVyICovCisKKwlib29sICBtX2JGTUlucHV0OyAgICAgICAgIC8qIHRydWUgdG8gdXNlIFBpbiA4IGZvciBGTSBSYWRpbyAqLworCit9OworCitzdGF0aWMgaW50IFBvd2VyU2NhbihzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwKKwkJICAgICB1OCBSRkJhbmQsIHUzMiBSRl9pbiwKKwkJICAgICB1MzIgKnBSRl9PdXQsIGJvb2wgKnBiY2FsKTsKKworc3RhdGljIGludCBpMmNfcmVhZG4oc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1OCBhZHIsIHU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMV0gPSB7ey5hZGRyID0gYWRyLCAgLmZsYWdzID0gSTJDX01fUkQsCisJCQkJICAgLmJ1ZiAgPSBkYXRhLCAubGVuICAgPSBsZW59IH07CisJcmV0dXJuIChpMmNfdHJhbnNmZXIoYWRhcHRlciwgbXNncywgMSkgPT0gMSkgPyAwIDogLTE7Cit9CisKK3N0YXRpYyBpbnQgaTJjX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTggYWRyLCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBhZHIsIC5mbGFncyA9IDAsCisJCQkgICAgICAuYnVmID0gZGF0YSwgLmxlbiA9IGxlbn07CisKKwlpZiAoaTJjX3RyYW5zZmVyKGFkYXAsICZtc2csIDEpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZGExODI3MWMyZGQ6IGkyYyB3cml0ZSBlcnJvciBhdCBhZGRyICVpXG4iLCBhZHIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFdyaXRlUmVncyhzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwKKwkJICAgICB1OCBTdWJBZGRyLCB1OCAqUmVncywgdTE2IG5SZWdzKQoreworCXU4IGRhdGFbblJlZ3MrMV07CisKKwlkYXRhWzBdID0gU3ViQWRkcjsKKwltZW1jcHkoZGF0YSArIDEsIFJlZ3MsIG5SZWdzKTsKKwlyZXR1cm4gaTJjX3dyaXRlKHN0YXRlLT5pMmMsIHN0YXRlLT5hZHIsIGRhdGEsIG5SZWdzKzEpOworfQorCitzdGF0aWMgaW50IFdyaXRlUmVnKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlLCB1OCBTdWJBZGRyLCB1OCBSZWcpCit7CisJdTggbXNnWzJdID0ge1N1YkFkZHIsIFJlZ307CisKKwlyZXR1cm4gaTJjX3dyaXRlKHN0YXRlLT5pMmMsIHN0YXRlLT5hZHIsIG1zZywgMik7Cit9CisKK3N0YXRpYyBpbnQgUmVhZChzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwgdTggKiBSZWdzKQoreworCXJldHVybiBpMmNfcmVhZG4oc3RhdGUtPmkyYywgc3RhdGUtPmFkciwgUmVncywgMTYpOworfQorCitzdGF0aWMgaW50IFJlYWRFeHRlbnRlZChzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwgdTggKiBSZWdzKQoreworCXJldHVybiBpMmNfcmVhZG4oc3RhdGUtPmkyYywgc3RhdGUtPmFkciwgUmVncywgTlVNX1JFR1MpOworfQorCitzdGF0aWMgaW50IFVwZGF0ZVJlZ3Moc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUsIHU4IFJlZ0Zyb20sIHU4IFJlZ1RvKQoreworCXJldHVybiBXcml0ZVJlZ3Moc3RhdGUsIFJlZ0Zyb20sCisJCQkgJnN0YXRlLT5tX1JlZ3NbUmVnRnJvbV0sIFJlZ1RvLVJlZ0Zyb20rMSk7Cit9CitzdGF0aWMgaW50IFVwZGF0ZVJlZyhzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwgdTggUmVnKQoreworCXJldHVybiBXcml0ZVJlZyhzdGF0ZSwgUmVnLCBzdGF0ZS0+bV9SZWdzW1JlZ10pOworfQorCisjaW5jbHVkZSAidGRhMTgyNzFjMmRkX21hcHMuaCIKKworc3RhdGljIHZvaWQgcmVzZXQoc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUpCit7CisJdTMyICAgdWxJRkxldmVsQW5hbG9nID0gMDsKKwl1MzIgICB1bElGTGV2ZWxEaWdpdGFsID0gMjsKKwl1MzIgICB1bElGTGV2ZWxEVkJDID0gNzsKKwl1MzIgICB1bElGTGV2ZWxEVkJUID0gNjsKKwl1MzIgICB1bFhUT3V0ID0gMDsKKwl1MzIgICB1bFN0YW5kYnlNb2RlID0gMHgwNjsgICAgLyogU2VuZCBpbiBzdGRiLCBidXQgbGVhdmUgb3NjIG9uICovCisJdTMyICAgdWxTbGF2ZSA9IDA7CisJdTMyICAgdWxGTUlucHV0ID0gMDsKKwl1MzIgICB1bFNldHRsaW5nVGltZSA9IDEwMDsKKworCXN0YXRlLT5tX0ZyZXF1ZW5jeSAgICAgICAgID0gMDsKKwlzdGF0ZS0+bV9TZXR0bGluZ1RpbWUgPSAxMDA7CisJc3RhdGUtPm1fSUZMZXZlbEFuYWxvZyA9ICh1bElGTGV2ZWxBbmFsb2cgJiAweDA3KSA8PCAyOworCXN0YXRlLT5tX0lGTGV2ZWxEaWdpdGFsID0gKHVsSUZMZXZlbERpZ2l0YWwgJiAweDA3KSA8PCAyOworCXN0YXRlLT5tX0lGTGV2ZWxEVkJDID0gKHVsSUZMZXZlbERWQkMgJiAweDA3KSA8PCAyOworCXN0YXRlLT5tX0lGTGV2ZWxEVkJUID0gKHVsSUZMZXZlbERWQlQgJiAweDA3KSA8PCAyOworCisJc3RhdGUtPm1fRVA0ID0gMHgyMDsKKwlpZiAodWxYVE91dCAhPSAwKQorCQlzdGF0ZS0+bV9FUDQgfD0gMHg0MDsKKworCXN0YXRlLT5tX0VQM19TdGFuZGJ5ID0gKCh1bFN0YW5kYnlNb2RlICYgMHgwNykgPDwgNSkgfCAweDBGOworCXN0YXRlLT5tX2JNYXN0ZXIgPSAodWxTbGF2ZSA9PSAwKTsKKworCXN0YXRlLT5tX1NldHRsaW5nVGltZSA9IHVsU2V0dGxpbmdUaW1lOworCisJc3RhdGUtPm1fYkZNSW5wdXQgPSAodWxGTUlucHV0ID09IDIpOworfQorCitzdGF0aWMgYm9vbCBTZWFyY2hNYXAxKHN0cnVjdCBTTWFwIE1hcFtdLAorCQkgICAgICAgdTMyIEZyZXF1ZW5jeSwgdTggKnBQYXJhbSkKK3sKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoKE1hcFtpXS5tX0ZyZXF1ZW5jeSAhPSAwKSAmJiAoRnJlcXVlbmN5ID4gTWFwW2ldLm1fRnJlcXVlbmN5KSkKKwkJaSArPSAxOworCWlmIChNYXBbaV0ubV9GcmVxdWVuY3kgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCSpwUGFyYW0gPSBNYXBbaV0ubV9QYXJhbTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgU2VhcmNoTWFwMihzdHJ1Y3QgU01hcEkgTWFwW10sCisJCSAgICAgICB1MzIgRnJlcXVlbmN5LCBzMzIgKnBQYXJhbSkKK3sKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoKE1hcFtpXS5tX0ZyZXF1ZW5jeSAhPSAwKSAmJgorCSAgICAgICAoRnJlcXVlbmN5ID4gTWFwW2ldLm1fRnJlcXVlbmN5KSkKKwkJaSArPSAxOworCWlmIChNYXBbaV0ubV9GcmVxdWVuY3kgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCSpwUGFyYW0gPSBNYXBbaV0ubV9QYXJhbTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgU2VhcmNoTWFwMyhzdHJ1Y3QgU01hcDIgTWFwW10sIHUzMiBGcmVxdWVuY3ksCisJCSAgICAgICB1OCAqcFBhcmFtMSwgdTggKnBQYXJhbTIpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKChNYXBbaV0ubV9GcmVxdWVuY3kgIT0gMCkgJiYKKwkgICAgICAgKEZyZXF1ZW5jeSA+IE1hcFtpXS5tX0ZyZXF1ZW5jeSkpCisJCWkgKz0gMTsKKwlpZiAoTWFwW2ldLm1fRnJlcXVlbmN5ID09IDApCisJCXJldHVybiBmYWxzZTsKKwkqcFBhcmFtMSA9IE1hcFtpXS5tX1BhcmFtMTsKKwkqcFBhcmFtMiA9IE1hcFtpXS5tX1BhcmFtMjsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgU2VhcmNoTWFwNChzdHJ1Y3QgU1JGQmFuZE1hcCBNYXBbXSwKKwkJICAgICAgIHUzMiBGcmVxdWVuY3ksIHU4ICpwUkZCYW5kKQoreworCWludCBpID0gMDsKKworCXdoaWxlIChpIDwgNyAmJiAoRnJlcXVlbmN5ID4gTWFwW2ldLm1fUkZfbWF4KSkKKwkJaSArPSAxOworCWlmIChpID09IDcpCisJCXJldHVybiBmYWxzZTsKKwkqcFJGQmFuZCA9IGk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgVGhlcm1vbWV0ZXJSZWFkKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlLCB1OCAqcFRNX1ZhbHVlKQoreworCWludCBzdGF0dXMgPSAwOworCisJZG8geworCQl1OCBSZWdzWzE2XTsKKwkJc3RhdGUtPm1fUmVnc1tUTV0gfD0gMHgxMDsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBUTSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IFJlYWQoc3RhdGUsIFJlZ3MpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoKChSZWdzW1RNXSAmIDB4MEYpID09IDAgJiYgKFJlZ3NbVE1dICYgMHgyMCkgPT0gMHgyMCkgfHwKKwkJICAgICgoUmVnc1tUTV0gJiAweDBGKSA9PSA4ICYmIChSZWdzW1RNXSAmIDB4MjApID09IDB4MDApKSB7CisJCQlzdGF0ZS0+bV9SZWdzW1RNXSBePSAweDIwOworCQkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBUTSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCgxMCk7CisJCQlzdGF0dXMgPSBSZWFkKHN0YXRlLCBSZWdzKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQl9CisJCSpwVE1fVmFsdWUgPSAoUmVnc1tUTV0gJiAweDIwKQorCQkJCT8gbV9UaGVybW9tZXRlcl9NYXBfMltSZWdzW1RNXSAmIDB4MEZdCisJCQkJOiBtX1RoZXJtb21ldGVyX01hcF8xW1JlZ3NbVE1dICYgMHgwRl0gOworCQlzdGF0ZS0+bV9SZWdzW1RNXSAmPSB+MHgxMDsgICAgICAgIC8qIFRoZXJtb21ldGVyIG9mZiAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIFRNKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdGUtPm1fUmVnc1tFUDRdICY9IH4weDAzOyAgICAgICAvKiBDQUxfbW9kZSA9IDAgPz8/Pz8/Pz8/ICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVA0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgwKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgU3RhbmRCeShzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlkbyB7CisJCXN0YXRlLT5tX1JlZ3NbRUIxMl0gJj0gfjB4MjA7ICAvKiBQRF9BR0MxX0RldCA9IDAgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjEyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdGUtPm1fUmVnc1tFQjE4XSAmPSB+MHg4MzsgIC8qIEFHQzFfbG9vcF9vZmYgPSAwLCBBR0MxX0dhaW4gPSA2IGRCICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUIxOCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXRlLT5tX1JlZ3NbRUIyMV0gfD0gMHgwMzsgLyogQUdDMl9HYWluID0gLTYgZEIgKi8KKwkJc3RhdGUtPm1fUmVnc1tFUDNdID0gc3RhdGUtPm1fRVAzX1N0YW5kYnk7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdGUtPm1fUmVnc1tFQjIzXSAmPSB+MHgwNjsgLyogRm9yY2VMUF9GYzJfRW4gPSAwLCBMUF9GY1syXSA9IDAgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRUIyMSwgRUIyMyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoMCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBDYWxjTWFpblBMTChzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSwgdTMyIGZyZXEpCit7CisKKwl1OCAgUG9zdERpdjsKKwl1OCAgRGl2OworCXU2NCBPc2NGcmVxOworCXUzMiBNYWluRGl2OworCisJaWYgKCFTZWFyY2hNYXAzKG1fTWFpbl9QTExfTWFwLCBmcmVxLCAmUG9zdERpdiwgJkRpdikpCisJCXJldHVybiAtRUlOVkFMOworCisJT3NjRnJlcSA9ICh1NjQpIGZyZXEgKiAodTY0KSBEaXY7CisJT3NjRnJlcSAqPSAodTY0KSAxNjM4NDsKKwlkb19kaXYoT3NjRnJlcSwgKHU2NCkxNjAwMDAwMCk7CisJTWFpbkRpdiA9IE9zY0ZyZXE7CisKKwlzdGF0ZS0+bV9SZWdzW01QRF0gPSBQb3N0RGl2ICYgMHg3NzsKKwlzdGF0ZS0+bV9SZWdzW01EMV0gPSAoKE1haW5EaXYgPj4gMTYpICYgMHg3Rik7CisJc3RhdGUtPm1fUmVnc1tNRDJdID0gKChNYWluRGl2ID4+ICA4KSAmIDB4RkYpOworCXN0YXRlLT5tX1JlZ3NbTUQzXSA9IChNYWluRGl2ICYgMHhGRik7CisKKwlyZXR1cm4gVXBkYXRlUmVncyhzdGF0ZSwgTVBELCBNRDMpOworfQorCitzdGF0aWMgaW50IENhbGNDYWxQTEwoc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxKQoreworCXU4IFBvc3REaXY7CisJdTggRGl2OworCXU2NCBPc2NGcmVxOworCXUzMiBDYWxEaXY7CisKKwlpZiAoIVNlYXJjaE1hcDMobV9DYWxfUExMX01hcCwgZnJlcSwgJlBvc3REaXYsICZEaXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCU9zY0ZyZXEgPSAodTY0KWZyZXEgKiAodTY0KURpdjsKKwkvKiBDYWxEaXYgPSB1MzIoIE9zY0ZyZXEgKiAxNjM4NCAvIDE2MDAwMDAwICk7ICovCisJT3NjRnJlcSAqPSAodTY0KTE2Mzg0OworCWRvX2RpdihPc2NGcmVxLCAodTY0KTE2MDAwMDAwKTsKKwlDYWxEaXYgPSBPc2NGcmVxOworCisJc3RhdGUtPm1fUmVnc1tDUERdID0gUG9zdERpdjsKKwlzdGF0ZS0+bV9SZWdzW0NEMV0gPSAoKENhbERpdiA+PiAxNikgJiAweEZGKTsKKwlzdGF0ZS0+bV9SZWdzW0NEMl0gPSAoKENhbERpdiA+PiAgOCkgJiAweEZGKTsKKwlzdGF0ZS0+bV9SZWdzW0NEM10gPSAoQ2FsRGl2ICYgMHhGRik7CisKKwlyZXR1cm4gVXBkYXRlUmVncyhzdGF0ZSwgQ1BELCBDRDMpOworfQorCitzdGF0aWMgaW50IENhbGlicmF0ZVJGKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlLAorCQkgICAgICAgdTggUkZCYW5kLCB1MzIgZnJlcSwgczMyICpwQ3Byb2cpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTggUmVnc1tOVU1fUkVHU107CisJZG8geworCQl1OCBCUF9GaWx0ZXIgPSAwOworCQl1OCBHYWluVGFwZXIgPSAwOworCQl1OCBSRkNfSyA9IDA7CisJCXU4IFJGQ19NID0gMDsKKworCQlzdGF0ZS0+bV9SZWdzW0VQNF0gJj0gfjB4MDM7IC8qIENBTF9tb2RlID0gMCAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQNCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXRlLT5tX1JlZ3NbRUIxOF0gfD0gMHgwMzsgIC8qIEFHQzFfR2FpbiA9IDMgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE4KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQkvKiBTd2l0Y2hpbmcgb2ZmIExUIChhcyBkYXRhc2hlZXQgc2F5cykgY2F1c2VzIGNhbGlicmF0aW9uIG9uIEMxIHRvIGZhaWwgKi8KKwkJLyogKFJlYWRvdXQgb2YgQ3Byb2cgaXMgYWxsd2F5cyAyNTUpICovCisJCWlmIChzdGF0ZS0+bV9SZWdzW0lEXSAhPSAweDgzKSAgICAvKiBDMTogSUQgPT0gODMsIEMyOiBJRCA9PSA4NCAqLworCQkJc3RhdGUtPm1fUmVnc1tFUDNdIHw9IDB4NDA7IC8qIFNNX0xUID0gMSAqLworCisJCWlmICghKFNlYXJjaE1hcDEobV9CUF9GaWx0ZXJfTWFwLCBmcmVxLCAmQlBfRmlsdGVyKSAmJgorCQkJU2VhcmNoTWFwMShtX0dhaW5UYXBlcl9NYXAsIGZyZXEsICZHYWluVGFwZXIpICYmCisJCQlTZWFyY2hNYXAzKG1fS01fTWFwLCBmcmVxLCAmUkZDX0ssICZSRkNfTSkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3RhdGUtPm1fUmVnc1tFUDFdID0gKHN0YXRlLT5tX1JlZ3NbRVAxXSAmIH4weDA3KSB8IEJQX0ZpbHRlcjsKKwkJc3RhdGUtPm1fUmVnc1tFUDJdID0gKFJGQmFuZCA8PCA1KSB8IEdhaW5UYXBlcjsKKworCQlzdGF0ZS0+bV9SZWdzW0VCMTNdID0gKHN0YXRlLT5tX1JlZ3NbRUIxM10gJiB+MHg3QykgfCAoUkZDX0sgPDwgNCkgfCAoUkZDX00gPDwgMik7CisKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVAxLCBFUDMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCMTMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXRlLT5tX1JlZ3NbRUI0XSB8PSAweDIwOyAgICAvKiBMT19Gb3JjZVNyY2UgPSAxICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUI0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQlzdGF0ZS0+bV9SZWdzW0VCN10gfD0gMHgyMDsgICAgLyogQ0FMX0ZvcmNlU3JjZSA9IDEgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjcpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXRlLT5tX1JlZ3NbRUIxNF0gPSAwOyAvKiBSRkNfQ3Byb2cgPSAwICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUIxNCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3RhdGUtPm1fUmVnc1tFQjIwXSAmPSB+MHgyMDsgIC8qIEZvcmNlTG9jayA9IDA7ICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUIyMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3RhdGUtPm1fUmVnc1tFUDRdIHw9IDB4MDM7ICAvKiBDQUxfTW9kZSA9IDMgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVA0LCBFUDUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IENhbGNDYWxQTEwoc3RhdGUsIGZyZXEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBDYWxjTWFpblBMTChzdGF0ZSwgZnJlcSArIDEwMDAwMDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCg1KTsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDIpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXRlLT5tX1JlZ3NbRUI0XSAmPSB+MHgyMDsgICAgLyogTE9fRm9yY2VTcmNlID0gMCAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCNCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3RhdGUtPm1fUmVnc1tFQjddICY9IH4weDIwOyAgICAvKiBDQUxfRm9yY2VTcmNlID0gMCAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCNyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisKKwkJc3RhdGUtPm1fUmVnc1tFQjIwXSB8PSAweDIwOyAgLyogRm9yY2VMb2NrID0gMTsgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjIwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDYwKTsKKworCQlzdGF0ZS0+bV9SZWdzW0VQNF0gJj0gfjB4MDM7ICAvKiBDQUxfTW9kZSA9IDAgKi8KKwkJc3RhdGUtPm1fUmVnc1tFUDNdICY9IH4weDQwOyAvKiBTTV9MVCA9IDAgKi8KKwkJc3RhdGUtPm1fUmVnc1tFQjE4XSAmPSB+MHgwMzsgIC8qIEFHQzFfR2FpbiA9IDAgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE4KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVAzLCBFUDQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3RhdHVzID0gUmVhZEV4dGVudGVkKHN0YXRlLCBSZWdzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQkqcENwcm9nID0gUmVnc1tFQjE0XTsKKworCX0gd2hpbGUgKDApOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlLAorCQkJCSB1OCBSRkJhbmQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwl1MzIgICBSRjEgPSBtX1JGX0JhbmRfTWFwW1JGQmFuZF0ubV9SRjFfRGVmYXVsdDsKKwl1MzIgICBSRjIgPSBtX1JGX0JhbmRfTWFwW1JGQmFuZF0ubV9SRjJfRGVmYXVsdDsKKwl1MzIgICBSRjMgPSBtX1JGX0JhbmRfTWFwW1JGQmFuZF0ubV9SRjNfRGVmYXVsdDsKKwlib29sICAgIGJjYWwgPSBmYWxzZTsKKworCXMzMiAgICBDcHJvZ19jYWwxID0gMDsKKwlzMzIgICAgQ3Byb2dfdGFibGUxID0gMDsKKwlzMzIgICAgQ3Byb2dfY2FsMiA9IDA7CisJczMyICAgIENwcm9nX3RhYmxlMiA9IDA7CisJczMyICAgIENwcm9nX2NhbDMgPSAwOworCXMzMiAgICBDcHJvZ190YWJsZTMgPSAwOworCisJc3RhdGUtPm1fUkZfQTFbUkZCYW5kXSA9IDA7CisJc3RhdGUtPm1fUkZfQjFbUkZCYW5kXSA9IDA7CisJc3RhdGUtPm1fUkZfQTJbUkZCYW5kXSA9IDA7CisJc3RhdGUtPm1fUkZfQjJbUkZCYW5kXSA9IDA7CisKKwlkbyB7CisJCXN0YXR1cyA9IFBvd2VyU2NhbihzdGF0ZSwgUkZCYW5kLCBSRjEsICZSRjEsICZiY2FsKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJaWYgKGJjYWwpIHsKKwkJCXN0YXR1cyA9IENhbGlicmF0ZVJGKHN0YXRlLCBSRkJhbmQsIFJGMSwgJkNwcm9nX2NhbDEpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCX0KKwkJU2VhcmNoTWFwMihtX1JGX0NhbF9NYXAsIFJGMSwgJkNwcm9nX3RhYmxlMSk7CisJCWlmICghYmNhbCkKKwkJCUNwcm9nX2NhbDEgPSBDcHJvZ190YWJsZTE7CisJCXN0YXRlLT5tX1JGX0IxW1JGQmFuZF0gPSBDcHJvZ19jYWwxIC0gQ3Byb2dfdGFibGUxOworCQkvKiBzdGF0ZS0+bV9SRl9BMVtSRl9CYW5kXSA9ID8/Pz8gKi8KKworCQlpZiAoUkYyID09IDApCisJCQlicmVhazsKKworCQlzdGF0dXMgPSBQb3dlclNjYW4oc3RhdGUsIFJGQmFuZCwgUkYyLCAmUkYyLCAmYmNhbCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCWlmIChiY2FsKSB7CisJCQlzdGF0dXMgPSBDYWxpYnJhdGVSRihzdGF0ZSwgUkZCYW5kLCBSRjIsICZDcHJvZ19jYWwyKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQl9CisJCVNlYXJjaE1hcDIobV9SRl9DYWxfTWFwLCBSRjIsICZDcHJvZ190YWJsZTIpOworCQlpZiAoIWJjYWwpCisJCQlDcHJvZ19jYWwyID0gQ3Byb2dfdGFibGUyOworCisJCXN0YXRlLT5tX1JGX0ExW1JGQmFuZF0gPQorCQkJKENwcm9nX2NhbDIgLSBDcHJvZ190YWJsZTIgLSBDcHJvZ19jYWwxICsgQ3Byb2dfdGFibGUxKSAvCisJCQkoKHMzMikoUkYyKSAtIChzMzIpKFJGMSkpOworCisJCWlmIChSRjMgPT0gMCkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IFBvd2VyU2NhbihzdGF0ZSwgUkZCYW5kLCBSRjMsICZSRjMsICZiY2FsKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJaWYgKGJjYWwpIHsKKwkJCXN0YXR1cyA9IENhbGlicmF0ZVJGKHN0YXRlLCBSRkJhbmQsIFJGMywgJkNwcm9nX2NhbDMpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCX0KKwkJU2VhcmNoTWFwMihtX1JGX0NhbF9NYXAsIFJGMywgJkNwcm9nX3RhYmxlMyk7CisJCWlmICghYmNhbCkKKwkJCUNwcm9nX2NhbDMgPSBDcHJvZ190YWJsZTM7CisJCXN0YXRlLT5tX1JGX0EyW1JGQmFuZF0gPSAoQ3Byb2dfY2FsMyAtIENwcm9nX3RhYmxlMyAtIENwcm9nX2NhbDIgKyBDcHJvZ190YWJsZTIpIC8gKChzMzIpKFJGMykgLSAoczMyKShSRjIpKTsKKwkJc3RhdGUtPm1fUkZfQjJbUkZCYW5kXSA9IENwcm9nX2NhbDIgLSBDcHJvZ190YWJsZTI7CisKKwl9IHdoaWxlICgwKTsKKworCXN0YXRlLT5tX1JGMVtSRkJhbmRdID0gUkYxOworCXN0YXRlLT5tX1JGMltSRkJhbmRdID0gUkYyOworCXN0YXRlLT5tX1JGM1tSRkJhbmRdID0gUkYzOworCisjaWYgMAorCXByaW50ayhLRVJOX0VSUiAidGRhMTgyNzFjMmRkOiAlcyAlZCBSRjEgPSAlZCBBMSA9ICVkIEIxID0gJWQgUkYyID0gJWQgQTIgPSAlZCBCMiA9ICVkIFJGMyA9ICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgICAgUkZCYW5kLCBSRjEsIHN0YXRlLT5tX1JGX0ExW1JGQmFuZF0sIHN0YXRlLT5tX1JGX0IxW1JGQmFuZF0sIFJGMiwKKwkgICAgICAgc3RhdGUtPm1fUkZfQTJbUkZCYW5kXSwgc3RhdGUtPm1fUkZfQjJbUkZCYW5kXSwgUkYzKTsKKyNlbmRpZgorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBQb3dlclNjYW4oc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUsCisJCSAgICAgdTggUkZCYW5kLCB1MzIgUkZfaW4sIHUzMiAqcFJGX091dCwgYm9vbCAqcGJjYWwpCit7CisJaW50IHN0YXR1cyA9IDA7CisJZG8geworCQl1OCAgIEdhaW5fVGFwZXIgPSAwOworCQlzMzIgIFJGQ19DcHJvZyA9IDA7CisJCXU4ICAgQ0lEX1RhcmdldCA9IDA7CisJCXU4ICAgQ291bnRMaW1pdCA9IDA7CisJCXUzMiAgZnJlcV9NYWluUExMOworCQl1OCAgIFJlZ3NbTlVNX1JFR1NdOworCQl1OCAgIENJRF9HYWluOworCQlzMzIgIENvdW50ID0gMDsKKwkJaW50ICBzaWduICA9IDE7CisJCWJvb2wgd2FpdCA9IGZhbHNlOworCisJCWlmICghKFNlYXJjaE1hcDIobV9SRl9DYWxfTWFwLCBSRl9pbiwgJlJGQ19DcHJvZykgJiYKKwkJICAgICAgU2VhcmNoTWFwMShtX0dhaW5UYXBlcl9NYXAsIFJGX2luLCAmR2Fpbl9UYXBlcikgJiYKKwkJICAgICAgU2VhcmNoTWFwMyhtX0NJRF9UYXJnZXRfTWFwLCBSRl9pbiwgJkNJRF9UYXJnZXQsICZDb3VudExpbWl0KSkpIHsKKworCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZGExODI3MWMyZGQ6ICVzIFNlYXJjaCBtYXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN0YXRlLT5tX1JlZ3NbRVAyXSA9IChSRkJhbmQgPDwgNSkgfCBHYWluX1RhcGVyOworCQlzdGF0ZS0+bV9SZWdzW0VCMTRdID0gKFJGQ19DcHJvZyk7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQlmcmVxX01haW5QTEwgPSBSRl9pbiArIDEwMDAwMDA7CisJCXN0YXR1cyA9IENhbGNNYWluUExMKHN0YXRlLCBmcmVxX01haW5QTEwpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisJCXN0YXRlLT5tX1JlZ3NbRVA0XSA9IChzdGF0ZS0+bV9SZWdzW0VQNF0gJiB+MHgwMykgfCAxOyAgICAvKiBDQUxfbW9kZSA9IDEgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMik7ICAvKiBMYXVuY2ggcG93ZXIgbWVhc3VyZW1lbnQgKi8KKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUmVhZEV4dGVudGVkKHN0YXRlLCBSZWdzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJQ0lEX0dhaW4gPSBSZWdzW0VCMTBdICYgMHgzRjsKKwkJc3RhdGUtPm1fUmVnc1tJRF0gPSBSZWdzW0lEXTsgIC8qIENoaXAgdmVyc2lvbiwgKG5lZWRlZCBmb3IgQzEgd29ya2Fycm91bmQgaW4gQ2FsaWJyYXRlUkYpICovCisKKwkJKnBSRl9PdXQgPSBSRl9pbjsKKworCQl3aGlsZSAoQ0lEX0dhaW4gPCBDSURfVGFyZ2V0KSB7CisJCQlmcmVxX01haW5QTEwgPSBSRl9pbiArIHNpZ24gKiBDb3VudCArIDEwMDAwMDA7CisJCQlzdGF0dXMgPSBDYWxjTWFpblBMTChzdGF0ZSwgZnJlcV9NYWluUExMKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKHdhaXQgPyA1IDogMSk7CisJCQl3YWl0ID0gZmFsc2U7CisJCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMik7ICAvKiBMYXVuY2ggcG93ZXIgbWVhc3VyZW1lbnQgKi8KKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJc3RhdHVzID0gUmVhZEV4dGVudGVkKHN0YXRlLCBSZWdzKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJQ0lEX0dhaW4gPSBSZWdzW0VCMTBdICYgMHgzRjsKKwkJCUNvdW50ICs9IDIwMDAwMDsKKworCQkJaWYgKENvdW50IDwgQ291bnRMaW1pdCAqIDEwMDAwMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaWduIDwgMCkKKwkJCQlicmVhazsKKworCQkJc2lnbiA9IC1zaWduOworCQkJQ291bnQgPSAyMDAwMDA7CisJCQl3YWl0ID0gdHJ1ZTsKKwkJfQorCQlzdGF0dXMgPSBzdGF0dXM7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCWlmIChDSURfR2FpbiA+PSBDSURfVGFyZ2V0KSB7CisJCQkqcGJjYWwgPSB0cnVlOworCQkJKnBSRl9PdXQgPSBmcmVxX01haW5QTEwgLSAxMDAwMDAwOworCQl9IGVsc2UKKwkJCSpwYmNhbCA9IGZhbHNlOworCX0gd2hpbGUgKDApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBQb3dlclNjYW5Jbml0KHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCWRvIHsKKwkJc3RhdGUtPm1fUmVnc1tFUDNdID0gKHN0YXRlLT5tX1JlZ3NbRVAzXSAmIH4weDFGKSB8IDB4MTI7CisJCXN0YXRlLT5tX1JlZ3NbRVA0XSA9IChzdGF0ZS0+bV9SZWdzW0VQNF0gJiB+MHgxRik7IC8qIElmIGxldmVsID0gMCwgQ2FsIG1vZGUgPSAwICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZ3Moc3RhdGUsIEVQMywgRVA0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdGUtPm1fUmVnc1tFQjE4XSA9IChzdGF0ZS0+bV9SZWdzW0VCMThdICYgfjB4MDMpOyAvKiBBR0MgMSBHYWluID0gMCAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCMTgpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0ZS0+bV9SZWdzW0VCMjFdID0gKHN0YXRlLT5tX1JlZ3NbRUIyMV0gJiB+MHgwMyk7IC8qIEFHQyAyIEdhaW4gPSAwIChEYXRhc2hlZXQgPSAzKSAqLworCQlzdGF0ZS0+bV9SZWdzW0VCMjNdID0gKHN0YXRlLT5tX1JlZ3NbRUIyM10gfCAweDA2KTsgLyogRm9yY2VMUF9GYzJfRW4gPSAxLCBMUEZjWzJdID0gMSAqLworCQlzdGF0dXMgPSBVcGRhdGVSZWdzKHN0YXRlLCBFQjIxLCBFQjIzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgwKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IENhbGNSRkZpbHRlckN1cnZlKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCWRvIHsKKwkJbXNsZWVwKDIwMCk7ICAgICAgLyogVGVtcGVyYXR1cmUgc3RhYmlsaXNhdGlvbiAqLworCQlzdGF0dXMgPSBQb3dlclNjYW5Jbml0KHN0YXRlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCAwKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCAxKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCAzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCA0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCA1KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gUkZUcmFja2luZ0ZpbHRlcnNJbml0KHN0YXRlLCA2KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gVGhlcm1vbWV0ZXJSZWFkKHN0YXRlLCAmc3RhdGUtPm1fVE1WYWx1ZV9SRkNhbCk7IC8qIGFsc28gc3dpdGNoZXMgb2ZmIENhbCBtb2RlICEhISAqLworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKDApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBGaXhlZENvbnRlbnRzSTJDVXBkYXRlKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlKQoreworCXN0YXRpYyB1OCBJbml0UmVnc1tdID0geworCQkweDA4LCAweDgwLCAweEM2LAorCQkweERGLCAweDE2LCAweDYwLCAweDgwLAorCQkweDgwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweEZDLCAweDAxLCAweDg0LCAweDQxLAorCQkweDAxLCAweDg0LCAweDQwLCAweDA3LAorCQkweDAwLCAweDAwLCAweDk2LCAweDNGLAorCQkweEMxLCAweDAwLCAweDhGLCAweDAwLAorCQkweDAwLCAweDhDLCAweDAwLCAweDIwLAorCQkweEIzLCAweDQ4LCAweEIwLAorCX07CisJaW50IHN0YXR1cyA9IDA7CisJbWVtY3B5KCZzdGF0ZS0+bV9SZWdzW1RNXSwgSW5pdFJlZ3MsIEVCMjMgLSBUTSArIDEpOworCWRvIHsKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgVE0sIEVCMjMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIEFHQzEgZ2FpbiBzZXR1cCAqLworCQlzdGF0ZS0+bV9SZWdzW0VCMTddID0gMHgwMDsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE3KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdGUtPm1fUmVnc1tFQjE3XSA9IDB4MDM7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUIxNyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXRlLT5tX1JlZ3NbRUIxN10gPSAweDQzOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCMTcpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0ZS0+bV9SZWdzW0VCMTddID0gMHg0QzsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE3KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQkvKiBJUkMgQ2FsIExvdyBiYW5kICovCisJCXN0YXRlLT5tX1JlZ3NbRVAzXSA9IDB4MUY7CisJCXN0YXRlLT5tX1JlZ3NbRVA0XSA9IDB4NjY7CisJCXN0YXRlLT5tX1JlZ3NbRVA1XSA9IDB4ODE7CisJCXN0YXRlLT5tX1JlZ3NbQ1BEXSA9IDB4Q0M7CisJCXN0YXRlLT5tX1JlZ3NbQ0QxXSA9IDB4NkM7CisJCXN0YXRlLT5tX1JlZ3NbQ0QyXSA9IDB4MDA7CisJCXN0YXRlLT5tX1JlZ3NbQ0QzXSA9IDB4MDA7CisJCXN0YXRlLT5tX1JlZ3NbTVBEXSA9IDB4QzU7CisJCXN0YXRlLT5tX1JlZ3NbTUQxXSA9IDB4Nzc7CisJCXN0YXRlLT5tX1JlZ3NbTUQyXSA9IDB4MDg7CisJCXN0YXRlLT5tX1JlZ3NbTUQzXSA9IDB4MDA7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZ3Moc3RhdGUsIEVQMiwgTUQzKTsgLyogZGlmZiBiZXR3ZWVuIHN3IGFuZCBkYXRhc2hlZXQgKGVwMy1tZDMpICovCisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKyNpZiAwCisJCXN0YXRlLT5tX1JlZ3NbRUI0XSA9IDB4NjE7ICAgICAgICAgIC8qIG1pc3NpbmcgaW4gc3cgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJCXN0YXRlLT5tX1JlZ3NbRUI0XSA9IDB4NDE7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUI0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKyNlbmRpZgorCisJCW1zbGVlcCg1KTsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisKKwkJc3RhdGUtPm1fUmVnc1tFUDVdID0gMHg4NTsKKwkJc3RhdGUtPm1fUmVnc1tDUERdID0gMHhDQjsKKwkJc3RhdGUtPm1fUmVnc1tDRDFdID0gMHg2NjsKKwkJc3RhdGUtPm1fUmVnc1tDRDJdID0gMHg3MDsKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVAzLCBDRDMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDMwKTsKKworCQkvKiBJUkMgQ2FsIG1pZCBiYW5kICovCisJCXN0YXRlLT5tX1JlZ3NbRVA1XSA9IDB4ODI7CisJCXN0YXRlLT5tX1JlZ3NbQ1BEXSA9IDB4QTg7CisJCXN0YXRlLT5tX1JlZ3NbQ0QyXSA9IDB4MDA7CisJCXN0YXRlLT5tX1JlZ3NbTVBEXSA9IDB4QTE7IC8qIERhdGFzaGVldCA9IDB4QTkgKi8KKwkJc3RhdGUtPm1fUmVnc1tNRDFdID0gMHg3MzsKKwkJc3RhdGUtPm1fUmVnc1tNRDJdID0gMHgxQTsKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVAzLCBNRDMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCg1KTsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisKKwkJc3RhdGUtPm1fUmVnc1tFUDVdID0gMHg4NjsKKwkJc3RhdGUtPm1fUmVnc1tDUERdID0gMHhBODsKKwkJc3RhdGUtPm1fUmVnc1tDRDFdID0gMHg2NjsKKwkJc3RhdGUtPm1fUmVnc1tDRDJdID0gMHhBMDsKKwkJc3RhdHVzID0gVXBkYXRlUmVncyhzdGF0ZSwgRVAzLCBDRDMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDMwKTsKKworCQkvKiBJUkMgQ2FsIGhpZ2ggYmFuZCAqLworCQlzdGF0ZS0+bV9SZWdzW0VQNV0gPSAweDgzOworCQlzdGF0ZS0+bV9SZWdzW0NQRF0gPSAweDk4OworCQlzdGF0ZS0+bV9SZWdzW0NEMV0gPSAweDY1OworCQlzdGF0ZS0+bV9SZWdzW0NEMl0gPSAweDAwOworCQlzdGF0ZS0+bV9SZWdzW01QRF0gPSAweDkxOyAgLyogRGF0YXNoZWV0ID0gMHg5MSAqLworCQlzdGF0ZS0+bV9SZWdzW01EMV0gPSAweDcxOworCQlzdGF0ZS0+bV9SZWdzW01EMl0gPSAweENEOworCQlzdGF0dXMgPSBVcGRhdGVSZWdzKHN0YXRlLCBFUDMsIE1EMyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCg1KTsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDEpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNSk7CisJCXN0YXRlLT5tX1JlZ3NbRVA1XSA9IDB4ODc7CisJCXN0YXRlLT5tX1JlZ3NbQ0QxXSA9IDB4NjU7CisJCXN0YXRlLT5tX1JlZ3NbQ0QyXSA9IDB4NTA7CisJCXN0YXR1cyA9IFVwZGF0ZVJlZ3Moc3RhdGUsIEVQMywgQ0QzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDUpOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgzMCk7CisKKwkJLyogQmFjayB0byBub3JtYWwgKi8KKwkJc3RhdGUtPm1fUmVnc1tFUDRdID0gMHg2NDsKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVQMSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwl9IHdoaWxlICgwKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IEluaXRDYWwoc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkbyB7CisJCXN0YXR1cyA9IEZpeGVkQ29udGVudHNJMkNVcGRhdGUoc3RhdGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBDYWxjUkZGaWx0ZXJDdXJ2ZShzdGF0ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IFN0YW5kQnkoc3RhdGUpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQkvKiBtX2JJbml0RG9uZSA9IHRydWU7ICovCisJfSB3aGlsZSAoMCk7CisJcmV0dXJuIHN0YXR1czsKK307CisKK3N0YXRpYyBpbnQgUkZUcmFja2luZ0ZpbHRlcnNDb3JyZWN0aW9uKHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICB1MzIgRnJlcXVlbmN5KQoreworCWludCBzdGF0dXMgPSAwOworCXMzMiBDcHJvZ190YWJsZTsKKwl1OCBSRkJhbmQ7CisJdTggZENvdmVyZFQ7CisKKwlpZiAoIVNlYXJjaE1hcDIobV9SRl9DYWxfTWFwLCBGcmVxdWVuY3ksICZDcHJvZ190YWJsZSkgfHwKKwkgICAgIVNlYXJjaE1hcDQobV9SRl9CYW5kX01hcCwgRnJlcXVlbmN5LCAmUkZCYW5kKSB8fAorCSAgICAhU2VhcmNoTWFwMShtX1JGX0NhbF9EQ19PdmVyX0RUX01hcCwgRnJlcXVlbmN5LCAmZENvdmVyZFQpKQorCisJCXJldHVybiAtRUlOVkFMOworCisJZG8geworCQl1OCBUTVZhbHVlX0N1cnJlbnQ7CisJCXUzMiAgIFJGMSA9IHN0YXRlLT5tX1JGMVtSRkJhbmRdOworCQl1MzIgICBSRjIgPSBzdGF0ZS0+bV9SRjFbUkZCYW5kXTsKKwkJdTMyICAgUkYzID0gc3RhdGUtPm1fUkYxW1JGQmFuZF07CisJCXMzMiAgICBSRl9BMSA9IHN0YXRlLT5tX1JGX0ExW1JGQmFuZF07CisJCXMzMiAgICBSRl9CMSA9IHN0YXRlLT5tX1JGX0IxW1JGQmFuZF07CisJCXMzMiAgICBSRl9BMiA9IHN0YXRlLT5tX1JGX0EyW1JGQmFuZF07CisJCXMzMiAgICBSRl9CMiA9IHN0YXRlLT5tX1JGX0IyW1JGQmFuZF07CisJCXMzMiBDYXBwcm94ID0gMDsKKwkJaW50IFRDb21wOworCisJCXN0YXRlLT5tX1JlZ3NbRVAzXSAmPSB+MHhFMDsgIC8qIFBvd2VyIHVwICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRVAzKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQlzdGF0dXMgPSBUaGVybW9tZXRlclJlYWQoc3RhdGUsICZUTVZhbHVlX0N1cnJlbnQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChSRjMgPT0gMCB8fCBGcmVxdWVuY3kgPCBSRjIpCisJCQlDYXBwcm94ID0gUkZfQTEgKiAoKHMzMikoRnJlcXVlbmN5KSAtIChzMzIpKFJGMSkpICsgUkZfQjEgKyBDcHJvZ190YWJsZTsKKwkJZWxzZQorCQkJQ2FwcHJveCA9IFJGX0EyICogKChzMzIpKEZyZXF1ZW5jeSkgLSAoczMyKShSRjIpKSArIFJGX0IyICsgQ3Byb2dfdGFibGU7CisKKwkJVENvbXAgPSAoaW50KShkQ292ZXJkVCkgKiAoKGludCkoVE1WYWx1ZV9DdXJyZW50KSAtIChpbnQpKHN0YXRlLT5tX1RNVmFsdWVfUkZDYWwpKS8xMDAwOworCisJCUNhcHByb3ggKz0gVENvbXA7CisKKwkJaWYgKENhcHByb3ggPCAwKQorCQkJQ2FwcHJveCA9IDA7CisJCWVsc2UgaWYgKENhcHByb3ggPiAyNTUpCisJCQlDYXBwcm94ID0gMjU1OworCisKKwkJLyogVE9ETyBUZW1wZXJhdHVyZSBjb21wZW5zYXRpb24uIFRoZXJlIGlzIGRlZmVuaXRlbHkgYSBzY2FsZSBmYWN0b3IgKi8KKwkJLyogICAgICBtaXNzaW5nIGluIHRoZSBkYXRhc2hlZXQsIHNvIGxlYXZlIGl0IG91dCBmb3Igbm93LiAgICAgICAgICAgKi8KKwkJc3RhdGUtPm1fUmVnc1tFQjE0XSA9IENhcHByb3g7CisKKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjE0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCX0gd2hpbGUgKDApOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgQ2hhbm5lbENvbmZpZ3VyYXRpb24oc3RydWN0IHRkYV9zdGF0ZSAqc3RhdGUsCisJCQkJdTMyIEZyZXF1ZW5jeSwgaW50IFN0YW5kYXJkKQoreworCisJczMyIEludGVybWVkaWF0ZUZyZXF1ZW5jeSA9IG1fU3RhbmRhcmRUYWJsZVtTdGFuZGFyZF0ubV9JRkZyZXF1ZW5jeTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXU4IEJQX0ZpbHRlciA9IDA7CisJdTggUkZfQmFuZCA9IDA7CisJdTggR2FpblRhcGVyID0gMDsKKwl1OCBJUl9NZWFzID0gMDsKKworCXN0YXRlLT5JRiA9IEludGVybWVkaWF0ZUZyZXF1ZW5jeTsKKwkvKiBwcmludGsoInRkYTE4MjcxYzJkZDogJXMgRnJlcSA9ICVkIFN0YW5kYXJkID0gJWQgSUYgPSAlZFxuIiwgX19mdW5jX18sIEZyZXF1ZW5jeSwgU3RhbmRhcmQsIEludGVybWVkaWF0ZUZyZXF1ZW5jeSk7ICovCisJLyogZ2V0IHZhbHVlcyBmcm9tIHRhYmxlcyAqLworCisJaWYgKCEoU2VhcmNoTWFwMShtX0JQX0ZpbHRlcl9NYXAsIEZyZXF1ZW5jeSwgJkJQX0ZpbHRlcikgJiYKKwkgICAgICAgU2VhcmNoTWFwMShtX0dhaW5UYXBlcl9NYXAsIEZyZXF1ZW5jeSwgJkdhaW5UYXBlcikgJiYKKwkgICAgICAgU2VhcmNoTWFwMShtX0lSX01lYXNfTWFwLCBGcmVxdWVuY3ksICZJUl9NZWFzKSAmJgorCSAgICAgICBTZWFyY2hNYXA0KG1fUkZfQmFuZF9NYXAsIEZyZXF1ZW5jeSwgJlJGX0JhbmQpKSkgeworCisJCXByaW50ayhLRVJOX0VSUiAidGRhMTgyNzFjMmRkOiAlcyBTZWFyY2hNYXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvIHsKKwkJc3RhdGUtPm1fUmVnc1tFUDNdID0gKHN0YXRlLT5tX1JlZ3NbRVAzXSAmIH4weDFGKSB8IG1fU3RhbmRhcmRUYWJsZVtTdGFuZGFyZF0ubV9FUDNfNF8wOworCQlzdGF0ZS0+bV9SZWdzW0VQM10gJj0gfjB4MDQ7ICAgLyogc3dpdGNoIFJGQUdDIHRvIGhpZ2ggc3BlZWQgbW9kZSAqLworCisJCS8qIG1fRVA0IGRlZmF1bHQgZm9yIFhUb3V0T24sIENBTF9Nb2RlICgwKSAqLworCQlzdGF0ZS0+bV9SZWdzW0VQNF0gPSBzdGF0ZS0+bV9FUDQgfCAoKFN0YW5kYXJkID4gSEZfQW5hbG9nTWF4KSA/IHN0YXRlLT5tX0lGTGV2ZWxEaWdpdGFsIDogc3RhdGUtPm1fSUZMZXZlbEFuYWxvZyk7CisJCS8qIHN0YXRlLT5tX1JlZ3NbRVA0XSA9IHN0YXRlLT5tX0VQNCB8IHN0YXRlLT5tX0lGTGV2ZWxEaWdpdGFsOyAqLworCQlpZiAoU3RhbmRhcmQgPD0gSEZfQW5hbG9nTWF4KQorCQkJc3RhdGUtPm1fUmVnc1tFUDRdID0gc3RhdGUtPm1fRVA0IHwgc3RhdGUtPm1fSUZMZXZlbEFuYWxvZzsKKwkJZWxzZSBpZiAoU3RhbmRhcmQgPD0gSEZfQVRTQykKKwkJCXN0YXRlLT5tX1JlZ3NbRVA0XSA9IHN0YXRlLT5tX0VQNCB8IHN0YXRlLT5tX0lGTGV2ZWxEVkJUOworCQllbHNlIGlmIChTdGFuZGFyZCA8PSBIRl9EVkJDKQorCQkJc3RhdGUtPm1fUmVnc1tFUDRdID0gc3RhdGUtPm1fRVA0IHwgc3RhdGUtPm1fSUZMZXZlbERWQkM7CisJCWVsc2UKKwkJCXN0YXRlLT5tX1JlZ3NbRVA0XSA9IHN0YXRlLT5tX0VQNCB8IHN0YXRlLT5tX0lGTGV2ZWxEaWdpdGFsOworCisJCWlmICgoU3RhbmRhcmQgPT0gSEZfRk1fUmFkaW8pICYmIHN0YXRlLT5tX2JGTUlucHV0KQorCQkJc3RhdGUtPm1fUmVnc1tFUDRdIHw9IDgwOworCisJCXN0YXRlLT5tX1JlZ3NbTVBEXSAmPSB+MHg4MDsKKwkJaWYgKFN0YW5kYXJkID4gSEZfQW5hbG9nTWF4KQorCQkJc3RhdGUtPm1fUmVnc1tNUERdIHw9IDB4ODA7IC8qIEFkZCBJRl9ub3RjaCBmb3IgZGlnaXRhbCAqLworCisJCXN0YXRlLT5tX1JlZ3NbRUIyMl0gPSBtX1N0YW5kYXJkVGFibGVbU3RhbmRhcmRdLm1fRUIyMjsKKworCQkvKiBOb3RlOiBUaGlzIGlzIG1pc3NpbmcgZnJvbSBmbG93Y2hhcnQgaW4gVERBMTgyNzEgc3BlY2lmaWNhdGlvbiAoIDEuNSBNSHogY3V0b2ZmIGZvciBGTSApICovCisJCWlmIChTdGFuZGFyZCA9PSBIRl9GTV9SYWRpbykKKwkJCXN0YXRlLT5tX1JlZ3NbRUIyM10gfD0gIDB4MDY7IC8qIEZvcmNlTFBfRmMyX0VuID0gMSwgTFBGY1syXSA9IDEgKi8KKwkJZWxzZQorCQkJc3RhdGUtPm1fUmVnc1tFQjIzXSAmPSB+MHgwNjsgLyogRm9yY2VMUF9GYzJfRW4gPSAwLCBMUEZjWzJdID0gMCAqLworCisJCXN0YXR1cyA9IFVwZGF0ZVJlZ3Moc3RhdGUsIEVCMjIsIEVCMjMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXRlLT5tX1JlZ3NbRVAxXSA9IChzdGF0ZS0+bV9SZWdzW0VQMV0gJiB+MHgwNykgfCAweDQwIHwgQlBfRmlsdGVyOyAgIC8qIERpc19Qb3dlcl9sZXZlbCA9IDEsIEZpbHRlciAqLworCQlzdGF0ZS0+bV9SZWdzW0VQNV0gPSAoc3RhdGUtPm1fUmVnc1tFUDVdICYgfjB4MDcpIHwgSVJfTWVhczsKKwkJc3RhdGUtPm1fUmVnc1tFUDJdID0gKFJGX0JhbmQgPDwgNSkgfCBHYWluVGFwZXI7CisKKwkJc3RhdGUtPm1fUmVnc1tFQjFdID0gKHN0YXRlLT5tX1JlZ3NbRUIxXSAmIH4weDA3KSB8CisJCQkoc3RhdGUtPm1fYk1hc3RlciA/IDB4MDQgOiAweDAwKTsgLyogQ0FMVkNPX0ZvcnRMT24gPSBNUyAqLworCQkvKiBBR0MxX2Fsd2F5c19tYXN0ZXIgPSAwICovCisJCS8qIEFHQ19maXJzdG4gPSAwICovCisJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUIxKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQlpZiAoc3RhdGUtPm1fYk1hc3RlcikgeworCQkJc3RhdHVzID0gQ2FsY01haW5QTEwoc3RhdGUsIEZyZXF1ZW5jeSArIEludGVybWVkaWF0ZUZyZXF1ZW5jeSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IFVwZGF0ZVJlZ3Moc3RhdGUsIFRNLCBFUDUpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQlzdGF0ZS0+bV9SZWdzW0VCNF0gfD0gMHgyMDsgICAgLyogTE9fZm9yY2VTcmNlID0gMSAqLworCQkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjQpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQltc2xlZXAoMSk7CisJCQlzdGF0ZS0+bV9SZWdzW0VCNF0gJj0gfjB4MjA7ICAgLyogTE9fZm9yY2VTcmNlID0gMCAqLworCQkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFQjQpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl1OCBQb3N0RGl2ID0gMDsKKwkJCXU4IERpdjsKKwkJCXN0YXR1cyA9IENhbGNDYWxQTEwoc3RhdGUsIEZyZXF1ZW5jeSArIEludGVybWVkaWF0ZUZyZXF1ZW5jeSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKworCQkJU2VhcmNoTWFwMyhtX0NhbF9QTExfTWFwLCBGcmVxdWVuY3kgKyBJbnRlcm1lZGlhdGVGcmVxdWVuY3ksICZQb3N0RGl2LCAmRGl2KTsKKwkJCXN0YXRlLT5tX1JlZ3NbTVBEXSA9IChzdGF0ZS0+bV9SZWdzW01QRF0gJiB+MHg3RikgfCAoUG9zdERpdiAmIDB4NzcpOworCQkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBNUEQpOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBVcGRhdGVSZWdzKHN0YXRlLCBUTSwgRVA1KTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlzdGF0ZS0+bV9SZWdzW0VCN10gfD0gMHgyMDsgICAgLyogQ0FMX2ZvcmNlU3JjZSA9IDEgKi8KKwkJCXN0YXR1cyA9IFVwZGF0ZVJlZyhzdGF0ZSwgRUI3KTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDEpOworCQkJc3RhdGUtPm1fUmVnc1tFQjddICY9IH4weDIwOyAgIC8qIENBTF9mb3JjZVNyY2UgPSAwICovCisJCQlzdGF0dXMgPSBVcGRhdGVSZWcoc3RhdGUsIEVCNyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMjApOworCQlpZiAoU3RhbmRhcmQgIT0gSEZfRk1fUmFkaW8pCisJCQlzdGF0ZS0+bV9SZWdzW0VQM10gfD0gMHgwNDsgICAgLyogUkZBR0MgdG8gbm9ybWFsIG1vZGUgKi8KKwkJc3RhdHVzID0gVXBkYXRlUmVnKHN0YXRlLCBFUDMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJfSB3aGlsZSAoMCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBzbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJU3RhbmRCeShzdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBcyBkZWZpbmVkIG9uIEVOIDMwMCA0MjkgQW5uZXggQSBhbmQgb24gSVRVLVQgSi44MyBhbm5leCBBLCB0aGUgRFZCLUMKKyAqIHJvbGwtb2ZmIGZhY3RvciBpcyAwLjE1LgorICogQWNjb3JkaW5nIHdpdGggdGhlIHNwZWNzLCB0aGUgYW1vdW50IG9mIHRoZSBuZWVkZWQgYmFuZHdpdGggaXMgZ2l2ZW4gYnk6CisgKglCdyA9IFN5bWJvbF9yYXRlICogKDEgKyAwLjE1KQorICogQXMgc3VjaCwgdGhlIG1heGltdW0gc3ltYm9sIHJhdGUgc3VwcG9ydGVkIGJ5IDYgTUh6IGlzCisgKgltYXhfc3ltYm9sX3JhdGUgPSA2IE1IeiAvIDEuMTUgPSA1MjE3MzkxIEJhdWRzCisgKk5PVEU6IEZvciBJVFUtVCBKLjgzIEFubmV4IEMsIHRoZSByb2xsLW9mZiBmYWN0b3IgaXMgMC4xMy4gU286CisgKgltYXhfc3ltYm9sX3JhdGUgPSA2IE1IeiAvIDEuMTMgPSA1MzA5NzM1IEJhdWQKKyAqCVRoYXQgbWVhbnMgdGhhdCBhbiBhZGp1c3RtZW50IGlzIG5lZWRlZCBmb3IgSmFwYW4sCisgKglidXQsIGFzIGN1cnJlbnRseSBEUlgtSyBpcyBoYXJkY29kZWQgdG8gQW5uZXggQSwgbGV0J3Mgc3RpY2sKKyAqCXdpdGggMC4xNSByb2xsLW9mZiBmYWN0b3IuCisgKi8KKyNkZWZpbmUgTUFYX1NZTUJPTF9SQVRFXzZNSHoJNTIxNzM5MQorCitzdGF0aWMgaW50IHNldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IFN0YW5kYXJkOworCisJc3RhdGUtPm1fRnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwlpZiAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkKKwkJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKKwkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCQlTdGFuZGFyZCA9IEhGX0RWQlRfNk1IWjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJCVN0YW5kYXJkID0gSEZfRFZCVF83TUhaOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQkJU3RhbmRhcmQgPSBIRl9EVkJUXzhNSFo7CisJCQlicmVhazsKKwkJfQorCWVsc2UgaWYgKGZlLT5vcHMuaW5mby50eXBlID09IEZFX1FBTSkgeworCQlpZiAocGFyYW1zLT51LnFhbS5zeW1ib2xfcmF0ZSA8PSBNQVhfU1lNQk9MX1JBVEVfNk1IeikKKwkJCVN0YW5kYXJkID0gSEZfRFZCQ182TUhaOworCQllbHNlCisJCQlTdGFuZGFyZCA9IEhGX0RWQkNfOE1IWjsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJZG8geworCQlzdGF0dXMgPSBSRlRyYWNraW5nRmlsdGVyc0NvcnJlY3Rpb24oc3RhdGUsIHBhcmFtcy0+ZnJlcXVlbmN5KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gQ2hhbm5lbENvbmZpZ3VyYXRpb24oc3RhdGUsIHBhcmFtcy0+ZnJlcXVlbmN5LCBTdGFuZGFyZCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKHN0YXRlLT5tX1NldHRsaW5nVGltZSk7ICAvKiBBbGxvdyBBR0MncyB0byBzZXR0bGUgZG93biAqLworCX0gd2hpbGUgKDApOworCXJldHVybiBzdGF0dXM7Cit9CisKKyNpZiAwCitzdGF0aWMgaW50IEdldFNpZ25hbFN0cmVuZ3RoKHMzMiAqcFNpZ25hbFN0cmVuZ3RoLCB1MzIgUkZBZ2MsIHUzMiBJRkFnYykKK3sKKwlpZiAoSUZBZ2MgPCA1MDApIHsKKwkJLyogU2NhbGUgdGhpcyBmcm9tIDAgdG8gNTAwMDAgKi8KKwkJKnBTaWduYWxTdHJlbmd0aCA9IElGQWdjICogMTAwOworCX0gZWxzZSB7CisJCS8qIFNjYWxlIHJhbmdlIDUwMC0xNTAwIHRvIDUwMDAwLTgwMDAwICovCisJCSpwU2lnbmFsU3RyZW5ndGggPSA1MDAwMCArIChJRkFnYyAtIDUwMCkgKiAzMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGdldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwkqZnJlcXVlbmN5ID0gc3RhdGUtPklGOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCS8qIHN0cnVjdCB0ZGFfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7ICovCisJLyogKmJhbmR3aWR0aCA9IHByaXYtPmJhbmR3aWR0aDsgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJOWFAgVERBMTgyNzFDMkQiLAorCQkuZnJlcXVlbmN5X21pbiAgPSAgNDcxMjUwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDg2NTAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gICAgIDYyNTAwCisJfSwKKwkuaW5pdCAgICAgICAgICAgICAgPSBpbml0LAorCS5zbGVlcCAgICAgICAgICAgICA9IHNsZWVwLAorCS5zZXRfcGFyYW1zICAgICAgICA9IHNldF9wYXJhbXMsCisJLnJlbGVhc2UgICAgICAgICAgID0gcmVsZWFzZSwKKwkuZ2V0X2ZyZXF1ZW5jeSAgICAgPSBnZXRfZnJlcXVlbmN5LAorCS5nZXRfYmFuZHdpZHRoICAgICA9IGdldF9iYW5kd2lkdGgsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0ZGExODI3MWMyZGRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGFkcikKK3sKKwlzdHJ1Y3QgdGRhX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRkYV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJZmUtPnR1bmVyX3ByaXYgPSBzdGF0ZTsKKwlzdGF0ZS0+YWRyID0gYWRyOworCXN0YXRlLT5pMmMgPSBpMmM7CisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnR1bmVyX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJcmVzZXQoc3RhdGUpOworCUluaXRDYWwoc3RhdGUpOworCisJcmV0dXJuIGZlOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGRhMTgyNzFjMmRkX2F0dGFjaCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVERBMTgyNzFDMiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkREIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTgyNzFjMmRkLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTgyNzFjMmRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4OWM3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExODI3MWMyZGQuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIF9UREExODI3MUMyRERfSF8KKyNkZWZpbmUgX1REQTE4MjcxQzJERF9IXworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9UREExODI3MUMyREQpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVERBMTgyNzFDMkREX01PRFVMRSkgXAorICAgICAgICAmJiBkZWZpbmVkKE1PRFVMRSkpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0ZGExODI3MWMyZGRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGFkcik7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp0ZGExODI3MWMyZGRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGFkcikKK3sKKyAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxYzJkZF9tYXBzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTgyNzFjMmRkX21hcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2NjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTE4MjcxYzJkZF9tYXBzLmgKQEAgLTAsMCArMSw4MTQgQEAKK2VudW0gSEZfUyB7CisJSEZfTm9uZSA9IDAsIEhGX0IsIEhGX0RLLCBIRl9HLCBIRl9JLCBIRl9MLCBIRl9MMSwgSEZfTU4sIEhGX0ZNX1JhZGlvLAorCUhGX0FuYWxvZ01heCwgSEZfRFZCVF82TUhaLCBIRl9EVkJUXzdNSFosIEhGX0RWQlRfOE1IWiwKKwlIRl9EVkJULCBIRl9BVFNDLCAgSEZfRFZCQ182TUhaLCAgSEZfRFZCQ183TUhaLAorCUhGX0RWQkNfOE1IWiwgSEZfRFZCQworfTsKKworc3RydWN0IFNTdGFuZGFyZFBhcmFtIG1fU3RhbmRhcmRUYWJsZVtdID0geworCXsgICAgICAgMCwgICAgICAgIDAsIDB4MDAsIDB4MDAgfSwgICAgLyogSEZfTm9uZSAqLworCXsgNjAwMDAwMCwgIDcwMDAwMDAsIDB4MUQsIDB4MkMgfSwgICAgLyogSEZfQiwgKi8KKwl7IDY5MDAwMDAsICA4MDAwMDAwLCAweDFFLCAweDJDIH0sICAgIC8qIEhGX0RLLCAqLworCXsgNzEwMDAwMCwgIDgwMDAwMDAsIDB4MUUsIDB4MkMgfSwgICAgLyogSEZfRywgKi8KKwl7IDcyNTAwMDAsICA4MDAwMDAwLCAweDFFLCAweDJDIH0sICAgIC8qIEhGX0ksICovCisJeyA2OTAwMDAwLCAgODAwMDAwMCwgMHgxRSwgMHgyQyB9LCAgICAvKiBIRl9MLCAqLworCXsgMTI1MDAwMCwgIDgwMDAwMDAsIDB4MUUsIDB4MkMgfSwgICAgLyogSEZfTDEsICovCisJeyA1NDAwMDAwLCAgNjAwMDAwMCwgMHgxQywgMHgyQyB9LCAgICAvKiBIRl9NTiwgKi8KKwl7IDEyNTAwMDAsICAgNTAwMDAwLCAweDE4LCAweDJDIH0sICAgIC8qIEhGX0ZNX1JhZGlvLCAqLworCXsgICAgICAgMCwgICAgICAgIDAsIDB4MDAsIDB4MDAgfSwgICAgLyogSEZfQW5hbG9nTWF4IChVbnVzZWQpICovCisJeyAzMzAwMDAwLCAgNjAwMDAwMCwgMHgxQywgMHg1OCB9LCAgICAvKiBIRl9EVkJUXzZNSFogKi8KKwl7IDM1MDAwMDAsICA3MDAwMDAwLCAweDFDLCAweDM3IH0sICAgIC8qIEhGX0RWQlRfN01IWiAqLworCXsgNDAwMDAwMCwgIDgwMDAwMDAsIDB4MUQsIDB4MzcgfSwgICAgLyogSEZfRFZCVF84TUhaICovCisJeyAgICAgICAwLCAgICAgICAgMCwgMHgwMCwgMHgwMCB9LCAgICAvKiBIRl9EVkJUIChVbnVzZWQpICovCisJeyA1MDAwMDAwLCAgNjAwMDAwMCwgMHgxQywgMHgzNyB9LCAgICAvKiBIRl9BVFNDICAoY2VudGVyID0gMy4yNSBNSHopICovCisJeyA0MDAwMDAwLCAgNjAwMDAwMCwgMHgxRCwgMHg1OCB9LCAgICAvKiBIRl9EVkJDXzZNSFogKENoaWNhZ28pICovCisJeyA0NTAwMDAwLCAgNzAwMDAwMCwgMHgxRSwgMHgzNyB9LCAgICAvKiBIRl9EVkJDXzdNSFogKG5vdCBkb2N1bWVudGVkIGJ5IE5YUCkgKi8KKwl7IDUwMDAwMDAsICA4MDAwMDAwLCAweDFGLCAweDM3IH0sICAgIC8qIEhGX0RWQkNfOE1IWiAqLworCXsgICAgICAgMCwgICAgICAgIDAsIDB4MDAsIDB4MDAgfSwgICAgLyogSEZfRFZCQyAoVW51c2VkKSAqLworfTsKKworc3RydWN0IFNNYXAgIG1fQlBfRmlsdGVyX01hcFtdID0geworCXsgICA2MjAwMDAwMCwgIDB4MDAgfSwKKwl7ICAgODQwMDAwMDAsICAweDAxIH0sCisJeyAgMTAwMDAwMDAwLCAgMHgwMiB9LAorCXsgIDE0MDAwMDAwMCwgIDB4MDMgfSwKKwl7ICAxNzAwMDAwMDAsICAweDA0IH0sCisJeyAgMTgwMDAwMDAwLCAgMHgwNSB9LAorCXsgIDg2NTAwMDAwMCwgIDB4MDYgfSwKKwl7ICAgICAgICAgIDAsICAweDAwIH0sICAgIC8qIFRhYmxlIEVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBTTWFwSSBtX1JGX0NhbF9NYXBbXSA9IHsKKwl7ICAgNDEwMDAwMDAsICAweDBGIH0sCisJeyAgIDQzMDAwMDAwLCAgMHgxQyB9LAorCXsgICA0NTAwMDAwMCwgIDB4MkYgfSwKKwl7ICAgNDYwMDAwMDAsICAweDM5IH0sCisJeyAgIDQ3MDAwMDAwLCAgMHg0MCB9LAorCXsgICA0NzkwMDAwMCwgIDB4NTAgfSwKKwl7ICAgNDkxMDAwMDAsICAweDE2IH0sCisJeyAgIDUwMDAwMDAwLCAgMHgxOCB9LAorCXsgICA1MTAwMDAwMCwgIDB4MjAgfSwKKwl7ICAgNTMwMDAwMDAsICAweDI4IH0sCisJeyAgIDU1MDAwMDAwLCAgMHgyQiB9LAorCXsgICA1NjAwMDAwMCwgIDB4MzIgfSwKKwl7ICAgNTcwMDAwMDAsICAweDM1IH0sCisJeyAgIDU4MDAwMDAwLCAgMHgzRSB9LAorCXsgICA1OTAwMDAwMCwgIDB4NDMgfSwKKwl7ICAgNjAwMDAwMDAsICAweDRFIH0sCisJeyAgIDYxMTAwMDAwLCAgMHg1NSB9LAorCXsgICA2MzAwMDAwMCwgIDB4MEYgfSwKKwl7ICAgNjQwMDAwMDAsICAweDExIH0sCisJeyAgIDY1MDAwMDAwLCAgMHgxMiB9LAorCXsgICA2NjAwMDAwMCwgIDB4MTUgfSwKKwl7ICAgNjcwMDAwMDAsICAweDE2IH0sCisJeyAgIDY4MDAwMDAwLCAgMHgxNyB9LAorCXsgICA3MDAwMDAwMCwgIDB4MTkgfSwKKwl7ICAgNzEwMDAwMDAsICAweDFDIH0sCisJeyAgIDcyMDAwMDAwLCAgMHgxRCB9LAorCXsgICA3MzAwMDAwMCwgIDB4MUYgfSwKKwl7ICAgNzQwMDAwMDAsICAweDIwIH0sCisJeyAgIDc1MDAwMDAwLCAgMHgyMSB9LAorCXsgICA3NjAwMDAwMCwgIDB4MjQgfSwKKwl7ICAgNzcwMDAwMDAsICAweDI1IH0sCisJeyAgIDc4MDAwMDAwLCAgMHgyNyB9LAorCXsgICA4MDAwMDAwMCwgIDB4MjggfSwKKwl7ICAgODEwMDAwMDAsICAweDI5IH0sCisJeyAgIDgyMDAwMDAwLCAgMHgyRCB9LAorCXsgICA4MzAwMDAwMCwgIDB4MkUgfSwKKwl7ICAgODQwMDAwMDAsICAweDJGIH0sCisJeyAgIDg1MDAwMDAwLCAgMHgzMSB9LAorCXsgICA4NjAwMDAwMCwgIDB4MzMgfSwKKwl7ICAgODcwMDAwMDAsICAweDM0IH0sCisJeyAgIDg4MDAwMDAwLCAgMHgzNSB9LAorCXsgICA4OTAwMDAwMCwgIDB4MzcgfSwKKwl7ICAgOTAwMDAwMDAsICAweDM4IH0sCisJeyAgIDkxMDAwMDAwLCAgMHgzOSB9LAorCXsgICA5MzAwMDAwMCwgIDB4M0MgfSwKKwl7ICAgOTQwMDAwMDAsICAweDNFIH0sCisJeyAgIDk1MDAwMDAwLCAgMHgzRiB9LAorCXsgICA5NjAwMDAwMCwgIDB4NDAgfSwKKwl7ICAgOTcwMDAwMDAsICAweDQyIH0sCisJeyAgIDk5MDAwMDAwLCAgMHg0NSB9LAorCXsgIDEwMDAwMDAwMCwgIDB4NDYgfSwKKwl7ICAxMDIwMDAwMDAsICAweDQ4IH0sCisJeyAgMTAzMDAwMDAwLCAgMHg0QSB9LAorCXsgIDEwNTAwMDAwMCwgIDB4NEQgfSwKKwl7ICAxMDYwMDAwMDAsICAweDRFIH0sCisJeyAgMTA3MDAwMDAwLCAgMHg1MCB9LAorCXsgIDEwODAwMDAwMCwgIDB4NTEgfSwKKwl7ICAxMTAwMDAwMDAsICAweDU0IH0sCisJeyAgMTExMDAwMDAwLCAgMHg1NiB9LAorCXsgIDExMjAwMDAwMCwgIDB4NTcgfSwKKwl7ICAxMTMwMDAwMDAsICAweDU4IH0sCisJeyAgMTE0MDAwMDAwLCAgMHg1OSB9LAorCXsgIDExNTAwMDAwMCwgIDB4NUMgfSwKKwl7ICAxMTYwMDAwMDAsICAweDVEIH0sCisJeyAgMTE3MDAwMDAwLCAgMHg1RiB9LAorCXsgIDExOTAwMDAwMCwgIDB4NjAgfSwKKwl7ICAxMjAwMDAwMDAsICAweDY0IH0sCisJeyAgMTIxMDAwMDAwLCAgMHg2NSB9LAorCXsgIDEyMjAwMDAwMCwgIDB4NjYgfSwKKwl7ICAxMjMwMDAwMDAsICAweDY4IH0sCisJeyAgMTI0MDAwMDAwLCAgMHg2OSB9LAorCXsgIDEyNTAwMDAwMCwgIDB4NkMgfSwKKwl7ICAxMjYwMDAwMDAsICAweDZEIH0sCisJeyAgMTI3MDAwMDAwLCAgMHg2RSB9LAorCXsgIDEyODAwMDAwMCwgIDB4NzAgfSwKKwl7ICAxMjkwMDAwMDAsICAweDcxIH0sCisJeyAgMTMwMDAwMDAwLCAgMHg3NSB9LAorCXsgIDEzMTAwMDAwMCwgIDB4NzcgfSwKKwl7ICAxMzIwMDAwMDAsICAweDc4IH0sCisJeyAgMTMzMDAwMDAwLCAgMHg3QiB9LAorCXsgIDEzNDAwMDAwMCwgIDB4N0UgfSwKKwl7ICAxMzUwMDAwMDAsICAweDgxIH0sCisJeyAgMTM2MDAwMDAwLCAgMHg4MiB9LAorCXsgIDEzNzAwMDAwMCwgIDB4ODcgfSwKKwl7ICAxMzgwMDAwMDAsICAweDg4IH0sCisJeyAgMTM5MDAwMDAwLCAgMHg4RCB9LAorCXsgIDE0MDAwMDAwMCwgIDB4OEUgfSwKKwl7ICAxNDEwMDAwMDAsICAweDkxIH0sCisJeyAgMTQyMDAwMDAwLCAgMHg5NSB9LAorCXsgIDE0MzAwMDAwMCwgIDB4OUEgfSwKKwl7ICAxNDQwMDAwMDAsICAweDlEIH0sCisJeyAgMTQ1MDAwMDAwLCAgMHhBMSB9LAorCXsgIDE0NjAwMDAwMCwgIDB4QTIgfSwKKwl7ICAxNDcwMDAwMDAsICAweEE0IH0sCisJeyAgMTQ4MDAwMDAwLCAgMHhBOSB9LAorCXsgIDE0OTAwMDAwMCwgIDB4QUUgfSwKKwl7ICAxNTAwMDAwMDAsICAweEIwIH0sCisJeyAgMTUxMDAwMDAwLCAgMHhCMSB9LAorCXsgIDE1MjAwMDAwMCwgIDB4QjcgfSwKKwl7ICAxNTI2MDAwMDAsICAweEJEIH0sCisJeyAgMTU0MDAwMDAwLCAgMHgyMCB9LAorCXsgIDE1NTAwMDAwMCwgIDB4MjIgfSwKKwl7ICAxNTYwMDAwMDAsICAweDI0IH0sCisJeyAgMTU3MDAwMDAwLCAgMHgyNSB9LAorCXsgIDE1ODAwMDAwMCwgIDB4MjcgfSwKKwl7ICAxNTkwMDAwMDAsICAweDI5IH0sCisJeyAgMTYwMDAwMDAwLCAgMHgyQyB9LAorCXsgIDE2MTAwMDAwMCwgIDB4MkQgfSwKKwl7ICAxNjMwMDAwMDAsICAweDJFIH0sCisJeyAgMTY0MDAwMDAwLCAgMHgyRiB9LAorCXsgIDE2NDcwMDAwMCwgIDB4MzAgfSwKKwl7ICAxNjYwMDAwMDAsICAweDExIH0sCisJeyAgMTY3MDAwMDAwLCAgMHgxMiB9LAorCXsgIDE2ODAwMDAwMCwgIDB4MTMgfSwKKwl7ICAxNjkwMDAwMDAsICAweDE0IH0sCisJeyAgMTcwMDAwMDAwLCAgMHgxNSB9LAorCXsgIDE3MjAwMDAwMCwgIDB4MTYgfSwKKwl7ICAxNzMwMDAwMDAsICAweDE3IH0sCisJeyAgMTc0MDAwMDAwLCAgMHgxOCB9LAorCXsgIDE3NTAwMDAwMCwgIDB4MUEgfSwKKwl7ICAxNzYwMDAwMDAsICAweDFCIH0sCisJeyAgMTc4MDAwMDAwLCAgMHgxRCB9LAorCXsgIDE3OTAwMDAwMCwgIDB4MUUgfSwKKwl7ICAxODAwMDAwMDAsICAweDFGIH0sCisJeyAgMTgxMDAwMDAwLCAgMHgyMCB9LAorCXsgIDE4MjAwMDAwMCwgIDB4MjEgfSwKKwl7ICAxODMwMDAwMDAsICAweDIyIH0sCisJeyAgMTg0MDAwMDAwLCAgMHgyNCB9LAorCXsgIDE4NTAwMDAwMCwgIDB4MjUgfSwKKwl7ICAxODYwMDAwMDAsICAweDI2IH0sCisJeyAgMTg3MDAwMDAwLCAgMHgyNyB9LAorCXsgIDE4ODAwMDAwMCwgIDB4MjkgfSwKKwl7ICAxODkwMDAwMDAsICAweDJBIH0sCisJeyAgMTkwMDAwMDAwLCAgMHgyQyB9LAorCXsgIDE5MTAwMDAwMCwgIDB4MkQgfSwKKwl7ICAxOTIwMDAwMDAsICAweDJFIH0sCisJeyAgMTkzMDAwMDAwLCAgMHgyRiB9LAorCXsgIDE5NDAwMDAwMCwgIDB4MzAgfSwKKwl7ICAxOTUwMDAwMDAsICAweDMzIH0sCisJeyAgMTk2MDAwMDAwLCAgMHgzNSB9LAorCXsgIDE5ODAwMDAwMCwgIDB4MzYgfSwKKwl7ICAyMDAwMDAwMDAsICAweDM4IH0sCisJeyAgMjAxMDAwMDAwLCAgMHgzQyB9LAorCXsgIDIwMjAwMDAwMCwgIDB4M0QgfSwKKwl7ICAyMDM1MDAwMDAsICAweDNFIH0sCisJeyAgMjA2MDAwMDAwLCAgMHgwRSB9LAorCXsgIDIwODAwMDAwMCwgIDB4MEYgfSwKKwl7ICAyMTIwMDAwMDAsICAweDEwIH0sCisJeyAgMjE2MDAwMDAwLCAgMHgxMSB9LAorCXsgIDIxNzAwMDAwMCwgIDB4MTIgfSwKKwl7ICAyMTgwMDAwMDAsICAweDEzIH0sCisJeyAgMjIwMDAwMDAwLCAgMHgxNCB9LAorCXsgIDIyMjAwMDAwMCwgIDB4MTUgfSwKKwl7ICAyMjUwMDAwMDAsICAweDE2IH0sCisJeyAgMjI4MDAwMDAwLCAgMHgxNyB9LAorCXsgIDIzMTAwMDAwMCwgIDB4MTggfSwKKwl7ICAyMzQwMDAwMDAsICAweDE5IH0sCisJeyAgMjM1MDAwMDAwLCAgMHgxQSB9LAorCXsgIDIzNjAwMDAwMCwgIDB4MUIgfSwKKwl7ICAyMzcwMDAwMDAsICAweDFDIH0sCisJeyAgMjQwMDAwMDAwLCAgMHgxRCB9LAorCXsgIDI0MjAwMDAwMCwgIDB4MUUgfSwKKwl7ICAyNDQwMDAwMDAsICAweDFGIH0sCisJeyAgMjQ3MDAwMDAwLCAgMHgyMCB9LAorCXsgIDI0OTAwMDAwMCwgIDB4MjEgfSwKKwl7ICAyNTIwMDAwMDAsICAweDIyIH0sCisJeyAgMjUzMDAwMDAwLCAgMHgyMyB9LAorCXsgIDI1NDAwMDAwMCwgIDB4MjQgfSwKKwl7ICAyNTYwMDAwMDAsICAweDI1IH0sCisJeyAgMjU5MDAwMDAwLCAgMHgyNiB9LAorCXsgIDI2MjAwMDAwMCwgIDB4MjcgfSwKKwl7ICAyNjQwMDAwMDAsICAweDI4IH0sCisJeyAgMjY3MDAwMDAwLCAgMHgyOSB9LAorCXsgIDI2OTAwMDAwMCwgIDB4MkEgfSwKKwl7ICAyNzEwMDAwMDAsICAweDJCIH0sCisJeyAgMjczMDAwMDAwLCAgMHgyQyB9LAorCXsgIDI3NTAwMDAwMCwgIDB4MkQgfSwKKwl7ICAyNzcwMDAwMDAsICAweDJFIH0sCisJeyAgMjc5MDAwMDAwLCAgMHgyRiB9LAorCXsgIDI4MjAwMDAwMCwgIDB4MzAgfSwKKwl7ICAyODQwMDAwMDAsICAweDMxIH0sCisJeyAgMjg2MDAwMDAwLCAgMHgzMiB9LAorCXsgIDI4NzAwMDAwMCwgIDB4MzMgfSwKKwl7ICAyOTAwMDAwMDAsICAweDM0IH0sCisJeyAgMjkzMDAwMDAwLCAgMHgzNSB9LAorCXsgIDI5NTAwMDAwMCwgIDB4MzYgfSwKKwl7ICAyOTcwMDAwMDAsICAweDM3IH0sCisJeyAgMzAwMDAwMDAwLCAgMHgzOCB9LAorCXsgIDMwMzAwMDAwMCwgIDB4MzkgfSwKKwl7ICAzMDUwMDAwMDAsICAweDNBIH0sCisJeyAgMzA2MDAwMDAwLCAgMHgzQiB9LAorCXsgIDMwNzAwMDAwMCwgIDB4M0MgfSwKKwl7ICAzMTAwMDAwMDAsICAweDNEIH0sCisJeyAgMzEyMDAwMDAwLCAgMHgzRSB9LAorCXsgIDMxNTAwMDAwMCwgIDB4M0YgfSwKKwl7ICAzMTgwMDAwMDAsICAweDQwIH0sCisJeyAgMzIwMDAwMDAwLCAgMHg0MSB9LAorCXsgIDMyMzAwMDAwMCwgIDB4NDIgfSwKKwl7ICAzMjQwMDAwMDAsICAweDQzIH0sCisJeyAgMzI1MDAwMDAwLCAgMHg0NCB9LAorCXsgIDMyNzAwMDAwMCwgIDB4NDUgfSwKKwl7ICAzMzEwMDAwMDAsICAweDQ2IH0sCisJeyAgMzM0MDAwMDAwLCAgMHg0NyB9LAorCXsgIDMzNzAwMDAwMCwgIDB4NDggfSwKKwl7ICAzMzkwMDAwMDAsICAweDQ5IH0sCisJeyAgMzQwMDAwMDAwLCAgMHg0QSB9LAorCXsgIDM0MTAwMDAwMCwgIDB4NEIgfSwKKwl7ICAzNDMwMDAwMDAsICAweDRDIH0sCisJeyAgMzQ1MDAwMDAwLCAgMHg0RCB9LAorCXsgIDM0OTAwMDAwMCwgIDB4NEUgfSwKKwl7ICAzNTIwMDAwMDAsICAweDRGIH0sCisJeyAgMzUzMDAwMDAwLCAgMHg1MCB9LAorCXsgIDM1NTAwMDAwMCwgIDB4NTEgfSwKKwl7ICAzNTcwMDAwMDAsICAweDUyIH0sCisJeyAgMzU5MDAwMDAwLCAgMHg1MyB9LAorCXsgIDM2MTAwMDAwMCwgIDB4NTQgfSwKKwl7ICAzNjIwMDAwMDAsICAweDU1IH0sCisJeyAgMzY0MDAwMDAwLCAgMHg1NiB9LAorCXsgIDM2ODAwMDAwMCwgIDB4NTcgfSwKKwl7ICAzNzAwMDAwMDAsICAweDU4IH0sCisJeyAgMzcyMDAwMDAwLCAgMHg1OSB9LAorCXsgIDM3NTAwMDAwMCwgIDB4NUEgfSwKKwl7ICAzNzYwMDAwMDAsICAweDVCIH0sCisJeyAgMzc3MDAwMDAwLCAgMHg1QyB9LAorCXsgIDM3OTAwMDAwMCwgIDB4NUQgfSwKKwl7ICAzODIwMDAwMDAsICAweDVFIH0sCisJeyAgMzg0MDAwMDAwLCAgMHg1RiB9LAorCXsgIDM4NTAwMDAwMCwgIDB4NjAgfSwKKwl7ICAzODYwMDAwMDAsICAweDYxIH0sCisJeyAgMzg4MDAwMDAwLCAgMHg2MiB9LAorCXsgIDM5MDAwMDAwMCwgIDB4NjMgfSwKKwl7ICAzOTMwMDAwMDAsICAweDY0IH0sCisJeyAgMzk0MDAwMDAwLCAgMHg2NSB9LAorCXsgIDM5NjAwMDAwMCwgIDB4NjYgfSwKKwl7ICAzOTcwMDAwMDAsICAweDY3IH0sCisJeyAgMzk4MDAwMDAwLCAgMHg2OCB9LAorCXsgIDQwMDAwMDAwMCwgIDB4NjkgfSwKKwl7ICA0MDIwMDAwMDAsICAweDZBIH0sCisJeyAgNDAzMDAwMDAwLCAgMHg2QiB9LAorCXsgIDQwNzAwMDAwMCwgIDB4NkMgfSwKKwl7ICA0MDgwMDAwMDAsICAweDZEIH0sCisJeyAgNDA5MDAwMDAwLCAgMHg2RSB9LAorCXsgIDQxMDAwMDAwMCwgIDB4NkYgfSwKKwl7ICA0MTEwMDAwMDAsICAweDcwIH0sCisJeyAgNDEyMDAwMDAwLCAgMHg3MSB9LAorCXsgIDQxMzAwMDAwMCwgIDB4NzIgfSwKKwl7ICA0MTQwMDAwMDAsICAweDczIH0sCisJeyAgNDE3MDAwMDAwLCAgMHg3NCB9LAorCXsgIDQxODAwMDAwMCwgIDB4NzUgfSwKKwl7ICA0MjAwMDAwMDAsICAweDc2IH0sCisJeyAgNDIyMDAwMDAwLCAgMHg3NyB9LAorCXsgIDQyMzAwMDAwMCwgIDB4NzggfSwKKwl7ICA0MjQwMDAwMDAsICAweDc5IH0sCisJeyAgNDI3MDAwMDAwLCAgMHg3QSB9LAorCXsgIDQyODAwMDAwMCwgIDB4N0IgfSwKKwl7ICA0MjkwMDAwMDAsICAweDdEIH0sCisJeyAgNDMyMDAwMDAwLCAgMHg3RiB9LAorCXsgIDQzNDAwMDAwMCwgIDB4ODAgfSwKKwl7ICA0MzUwMDAwMDAsICAweDgxIH0sCisJeyAgNDM2MDAwMDAwLCAgMHg4MyB9LAorCXsgIDQzNzAwMDAwMCwgIDB4ODQgfSwKKwl7ICA0MzgwMDAwMDAsICAweDg1IH0sCisJeyAgNDM5MDAwMDAwLCAgMHg4NiB9LAorCXsgIDQ0MDAwMDAwMCwgIDB4ODcgfSwKKwl7ICA0NDEwMDAwMDAsICAweDg4IH0sCisJeyAgNDQyMDAwMDAwLCAgMHg4OSB9LAorCXsgIDQ0NTAwMDAwMCwgIDB4OEEgfSwKKwl7ICA0NDYwMDAwMDAsICAweDhCIH0sCisJeyAgNDQ3MDAwMDAwLCAgMHg4QyB9LAorCXsgIDQ0ODAwMDAwMCwgIDB4OEUgfSwKKwl7ICA0NDkwMDAwMDAsICAweDhGIH0sCisJeyAgNDUwMDAwMDAwLCAgMHg5MCB9LAorCXsgIDQ1MjAwMDAwMCwgIDB4OTEgfSwKKwl7ICA0NTMwMDAwMDAsICAweDkzIH0sCisJeyAgNDU0MDAwMDAwLCAgMHg5NCB9LAorCXsgIDQ1NjAwMDAwMCwgIDB4OTYgfSwKKwl7ICA0NTc4MDAwMDAsICAweDk4IH0sCisJeyAgNDYxMDAwMDAwLCAgMHgxMSB9LAorCXsgIDQ2ODAwMDAwMCwgIDB4MTIgfSwKKwl7ICA0NzIwMDAwMDAsICAweDEzIH0sCisJeyAgNDczMDAwMDAwLCAgMHgxNCB9LAorCXsgIDQ3NDAwMDAwMCwgIDB4MTUgfSwKKwl7ICA0ODEwMDAwMDAsICAweDE2IH0sCisJeyAgNDg2MDAwMDAwLCAgMHgxNyB9LAorCXsgIDQ5MTAwMDAwMCwgIDB4MTggfSwKKwl7ICA0OTgwMDAwMDAsICAweDE5IH0sCisJeyAgNDk5MDAwMDAwLCAgMHgxQSB9LAorCXsgIDUwMTAwMDAwMCwgIDB4MUIgfSwKKwl7ICA1MDYwMDAwMDAsICAweDFDIH0sCisJeyAgNTExMDAwMDAwLCAgMHgxRCB9LAorCXsgIDUxNjAwMDAwMCwgIDB4MUUgfSwKKwl7ICA1MjAwMDAwMDAsICAweDFGIH0sCisJeyAgNTIxMDAwMDAwLCAgMHgyMCB9LAorCXsgIDUyNTAwMDAwMCwgIDB4MjEgfSwKKwl7ICA1MjkwMDAwMDAsICAweDIyIH0sCisJeyAgNTMzMDAwMDAwLCAgMHgyMyB9LAorCXsgIDUzOTAwMDAwMCwgIDB4MjQgfSwKKwl7ICA1NDEwMDAwMDAsICAweDI1IH0sCisJeyAgNTQ3MDAwMDAwLCAgMHgyNiB9LAorCXsgIDU0OTAwMDAwMCwgIDB4MjcgfSwKKwl7ICA1NTEwMDAwMDAsICAweDI4IH0sCisJeyAgNTU2MDAwMDAwLCAgMHgyOSB9LAorCXsgIDU2MTAwMDAwMCwgIDB4MkEgfSwKKwl7ICA1NjMwMDAwMDAsICAweDJCIH0sCisJeyAgNTY1MDAwMDAwLCAgMHgyQyB9LAorCXsgIDU2OTAwMDAwMCwgIDB4MkQgfSwKKwl7ICA1NzEwMDAwMDAsICAweDJFIH0sCisJeyAgNTc3MDAwMDAwLCAgMHgyRiB9LAorCXsgIDU4MDAwMDAwMCwgIDB4MzAgfSwKKwl7ICA1ODIwMDAwMDAsICAweDMxIH0sCisJeyAgNTg0MDAwMDAwLCAgMHgzMiB9LAorCXsgIDU4ODAwMDAwMCwgIDB4MzMgfSwKKwl7ICA1OTEwMDAwMDAsICAweDM0IH0sCisJeyAgNTk2MDAwMDAwLCAgMHgzNSB9LAorCXsgIDU5ODAwMDAwMCwgIDB4MzYgfSwKKwl7ICA2MDMwMDAwMDAsICAweDM3IH0sCisJeyAgNjA0MDAwMDAwLCAgMHgzOCB9LAorCXsgIDYwNjAwMDAwMCwgIDB4MzkgfSwKKwl7ICA2MTIwMDAwMDAsICAweDNBIH0sCisJeyAgNjE1MDAwMDAwLCAgMHgzQiB9LAorCXsgIDYxNzAwMDAwMCwgIDB4M0MgfSwKKwl7ICA2MjEwMDAwMDAsICAweDNEIH0sCisJeyAgNjIyMDAwMDAwLCAgMHgzRSB9LAorCXsgIDYyNTAwMDAwMCwgIDB4M0YgfSwKKwl7ICA2MzIwMDAwMDAsICAweDQwIH0sCisJeyAgNjMzMDAwMDAwLCAgMHg0MSB9LAorCXsgIDYzNDAwMDAwMCwgIDB4NDIgfSwKKwl7ICA2NDIwMDAwMDAsICAweDQzIH0sCisJeyAgNjQzMDAwMDAwLCAgMHg0NCB9LAorCXsgIDY0NzAwMDAwMCwgIDB4NDUgfSwKKwl7ICA2NTAwMDAwMDAsICAweDQ2IH0sCisJeyAgNjUyMDAwMDAwLCAgMHg0NyB9LAorCXsgIDY1NzAwMDAwMCwgIDB4NDggfSwKKwl7ICA2NjEwMDAwMDAsICAweDQ5IH0sCisJeyAgNjYyMDAwMDAwLCAgMHg0QSB9LAorCXsgIDY2NTAwMDAwMCwgIDB4NEIgfSwKKwl7ICA2NjcwMDAwMDAsICAweDRDIH0sCisJeyAgNjcwMDAwMDAwLCAgMHg0RCB9LAorCXsgIDY3MzAwMDAwMCwgIDB4NEUgfSwKKwl7ICA2NzYwMDAwMDAsICAweDRGIH0sCisJeyAgNjc3MDAwMDAwLCAgMHg1MCB9LAorCXsgIDY4MTAwMDAwMCwgIDB4NTEgfSwKKwl7ICA2ODMwMDAwMDAsICAweDUyIH0sCisJeyAgNjg2MDAwMDAwLCAgMHg1MyB9LAorCXsgIDY4ODAwMDAwMCwgIDB4NTQgfSwKKwl7ICA2ODkwMDAwMDAsICAweDU1IH0sCisJeyAgNjkxMDAwMDAwLCAgMHg1NiB9LAorCXsgIDY5NTAwMDAwMCwgIDB4NTcgfSwKKwl7ICA2OTgwMDAwMDAsICAweDU4IH0sCisJeyAgNzAzMDAwMDAwLCAgMHg1OSB9LAorCXsgIDcwNDAwMDAwMCwgIDB4NUEgfSwKKwl7ICA3MDUwMDAwMDAsICAweDVCIH0sCisJeyAgNzA3MDAwMDAwLCAgMHg1QyB9LAorCXsgIDcxMDAwMDAwMCwgIDB4NUQgfSwKKwl7ICA3MTIwMDAwMDAsICAweDVFIH0sCisJeyAgNzE3MDAwMDAwLCAgMHg1RiB9LAorCXsgIDcxODAwMDAwMCwgIDB4NjAgfSwKKwl7ICA3MjEwMDAwMDAsICAweDYxIH0sCisJeyAgNzIyMDAwMDAwLCAgMHg2MiB9LAorCXsgIDcyMzAwMDAwMCwgIDB4NjMgfSwKKwl7ICA3MjUwMDAwMDAsICAweDY0IH0sCisJeyAgNzI3MDAwMDAwLCAgMHg2NSB9LAorCXsgIDczMDAwMDAwMCwgIDB4NjYgfSwKKwl7ICA3MzIwMDAwMDAsICAweDY3IH0sCisJeyAgNzM1MDAwMDAwLCAgMHg2OCB9LAorCXsgIDc0MDAwMDAwMCwgIDB4NjkgfSwKKwl7ICA3NDEwMDAwMDAsICAweDZBIH0sCisJeyAgNzQyMDAwMDAwLCAgMHg2QiB9LAorCXsgIDc0MzAwMDAwMCwgIDB4NkMgfSwKKwl7ICA3NDUwMDAwMDAsICAweDZEIH0sCisJeyAgNzQ3MDAwMDAwLCAgMHg2RSB9LAorCXsgIDc0ODAwMDAwMCwgIDB4NkYgfSwKKwl7ICA3NTAwMDAwMDAsICAweDcwIH0sCisJeyAgNzUyMDAwMDAwLCAgMHg3MSB9LAorCXsgIDc1NDAwMDAwMCwgIDB4NzIgfSwKKwl7ICA3NTcwMDAwMDAsICAweDczIH0sCisJeyAgNzU4MDAwMDAwLCAgMHg3NCB9LAorCXsgIDc2MDAwMDAwMCwgIDB4NzUgfSwKKwl7ICA3NjMwMDAwMDAsICAweDc2IH0sCisJeyAgNzY0MDAwMDAwLCAgMHg3NyB9LAorCXsgIDc2NjAwMDAwMCwgIDB4NzggfSwKKwl7ICA3NjcwMDAwMDAsICAweDc5IH0sCisJeyAgNzY4MDAwMDAwLCAgMHg3QSB9LAorCXsgIDc3MzAwMDAwMCwgIDB4N0IgfSwKKwl7ICA3NzQwMDAwMDAsICAweDdDIH0sCisJeyAgNzc2MDAwMDAwLCAgMHg3RCB9LAorCXsgIDc3NzAwMDAwMCwgIDB4N0UgfSwKKwl7ICA3NzgwMDAwMDAsICAweDdGIH0sCisJeyAgNzc5MDAwMDAwLCAgMHg4MCB9LAorCXsgIDc4MTAwMDAwMCwgIDB4ODEgfSwKKwl7ICA3ODMwMDAwMDAsICAweDgyIH0sCisJeyAgNzg0MDAwMDAwLCAgMHg4MyB9LAorCXsgIDc4NTAwMDAwMCwgIDB4ODQgfSwKKwl7ICA3ODYwMDAwMDAsICAweDg1IH0sCisJeyAgNzkzMDAwMDAwLCAgMHg4NiB9LAorCXsgIDc5NDAwMDAwMCwgIDB4ODcgfSwKKwl7ICA3OTUwMDAwMDAsICAweDg4IH0sCisJeyAgNzk3MDAwMDAwLCAgMHg4OSB9LAorCXsgIDc5OTAwMDAwMCwgIDB4OEEgfSwKKwl7ICA4MDEwMDAwMDAsICAweDhCIH0sCisJeyAgODAyMDAwMDAwLCAgMHg4QyB9LAorCXsgIDgwMzAwMDAwMCwgIDB4OEQgfSwKKwl7ICA4MDQwMDAwMDAsICAweDhFIH0sCisJeyAgODEwMDAwMDAwLCAgMHg5MCB9LAorCXsgIDgxMTAwMDAwMCwgIDB4OTEgfSwKKwl7ICA4MTIwMDAwMDAsICAweDkyIH0sCisJeyAgODE0MDAwMDAwLCAgMHg5MyB9LAorCXsgIDgxNjAwMDAwMCwgIDB4OTQgfSwKKwl7ICA4MTcwMDAwMDAsICAweDk2IH0sCisJeyAgODE4MDAwMDAwLCAgMHg5NyB9LAorCXsgIDgyMDAwMDAwMCwgIDB4OTggfSwKKwl7ICA4MjEwMDAwMDAsICAweDk5IH0sCisJeyAgODIyMDAwMDAwLCAgMHg5QSB9LAorCXsgIDgyODAwMDAwMCwgIDB4OUIgfSwKKwl7ICA4MjkwMDAwMDAsICAweDlEIH0sCisJeyAgODMwMDAwMDAwLCAgMHg5RiB9LAorCXsgIDgzMTAwMDAwMCwgIDB4QTAgfSwKKwl7ICA4MzMwMDAwMDAsICAweEExIH0sCisJeyAgODM1MDAwMDAwLCAgMHhBMiB9LAorCXsgIDgzNjAwMDAwMCwgIDB4QTMgfSwKKwl7ICA4MzcwMDAwMDAsICAweEE0IH0sCisJeyAgODM4MDAwMDAwLCAgMHhBNiB9LAorCXsgIDg0MDAwMDAwMCwgIDB4QTggfSwKKwl7ICA4NDIwMDAwMDAsICAweEE5IH0sCisJeyAgODQ1MDAwMDAwLCAgMHhBQSB9LAorCXsgIDg0NjAwMDAwMCwgIDB4QUIgfSwKKwl7ICA4NDcwMDAwMDAsICAweEFEIH0sCisJeyAgODQ4MDAwMDAwLCAgMHhBRSB9LAorCXsgIDg1MjAwMDAwMCwgIDB4QUYgfSwKKwl7ICA4NTMwMDAwMDAsICAweEIwIH0sCisJeyAgODU4MDAwMDAwLCAgMHhCMSB9LAorCXsgIDg2MDAwMDAwMCwgIDB4QjIgfSwKKwl7ICA4NjEwMDAwMDAsICAweEIzIH0sCisJeyAgODYyMDAwMDAwLCAgMHhCNCB9LAorCXsgIDg2MzAwMDAwMCwgIDB4QjYgfSwKKwl7ICA4NjQwMDAwMDAsICAweEI4IH0sCisJeyAgODY1MDAwMDAwLCAgMHhCOSB9LAorCXsgICAgICAgICAgMCwgIDB4MDAgfSwgICAgLyogVGFibGUgRW5kICovCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgU01hcDIgIG1fS01fTWFwW10gPSB7CisJeyAgIDQ3OTAwMDAwLCAgMywgMiB9LAorCXsgICA2MTEwMDAwMCwgIDMsIDEgfSwKKwl7ICAzNTAwMDAwMDAsICAzLCAwIH0sCisJeyAgNzIwMDAwMDAwLCAgMiwgMSB9LAorCXsgIDg2NTAwMDAwMCwgIDMsIDMgfSwKKwl7ICAgICAgICAgIDAsICAweDAwIH0sICAgIC8qIFRhYmxlIEVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBTTWFwMiBtX01haW5fUExMX01hcFtdID0geworCXsgIDMzMTI1MDAwLCAweDU3LCAweEYwIH0sCisJeyAgMzU1MDAwMDAsIDB4NTYsIDB4RTAgfSwKKwl7ICAzODE4ODAwMCwgMHg1NSwgMHhEMCB9LAorCXsgIDQxMzc1MDAwLCAweDU0LCAweEMwIH0sCisJeyAgNDUxMjUwMDAsIDB4NTMsIDB4QjAgfSwKKwl7ICA0OTY4ODAwMCwgMHg1MiwgMHhBMCB9LAorCXsgIDU1MTg4MDAwLCAweDUxLCAweDkwIH0sCisJeyAgNjIxMjUwMDAsIDB4NTAsIDB4ODAgfSwKKwl7ICA2NjI1MDAwMCwgMHg0NywgMHg3OCB9LAorCXsgIDcxMDAwMDAwLCAweDQ2LCAweDcwIH0sCisJeyAgNzYzNzUwMDAsIDB4NDUsIDB4NjggfSwKKwl7ICA4Mjc1MDAwMCwgMHg0NCwgMHg2MCB9LAorCXsgIDkwMjUwMDAwLCAweDQzLCAweDU4IH0sCisJeyAgOTkzNzUwMDAsIDB4NDIsIDB4NTAgfSwKKwl7IDExMDM3NTAwMCwgMHg0MSwgMHg0OCB9LAorCXsgMTI0MjUwMDAwLCAweDQwLCAweDQwIH0sCisJeyAxMzI1MDAwMDAsIDB4MzcsIDB4M0MgfSwKKwl7IDE0MjAwMDAwMCwgMHgzNiwgMHgzOCB9LAorCXsgMTUyNzUwMDAwLCAweDM1LCAweDM0IH0sCisJeyAxNjU1MDAwMDAsIDB4MzQsIDB4MzAgfSwKKwl7IDE4MDUwMDAwMCwgMHgzMywgMHgyQyB9LAorCXsgMTk4NzUwMDAwLCAweDMyLCAweDI4IH0sCisJeyAyMjA3NTAwMDAsIDB4MzEsIDB4MjQgfSwKKwl7IDI0ODUwMDAwMCwgMHgzMCwgMHgyMCB9LAorCXsgMjY1MDAwMDAwLCAweDI3LCAweDFFIH0sCisJeyAyODQwMDAwMDAsIDB4MjYsIDB4MUMgfSwKKwl7IDMwNTUwMDAwMCwgMHgyNSwgMHgxQSB9LAorCXsgMzMxMDAwMDAwLCAweDI0LCAweDE4IH0sCisJeyAzNjEwMDAwMDAsIDB4MjMsIDB4MTYgfSwKKwl7IDM5NzUwMDAwMCwgMHgyMiwgMHgxNCB9LAorCXsgNDQxNTAwMDAwLCAweDIxLCAweDEyIH0sCisJeyA0OTcwMDAwMDAsIDB4MjAsIDB4MTAgfSwKKwl7IDUzMDAwMDAwMCwgMHgxNywgMHgwRiB9LAorCXsgNTY4MDAwMDAwLCAweDE2LCAweDBFIH0sCisJeyA2MTEwMDAwMDAsIDB4MTUsIDB4MEQgfSwKKwl7IDY2MjAwMDAwMCwgMHgxNCwgMHgwQyB9LAorCXsgNzIyMDAwMDAwLCAweDEzLCAweDBCIH0sCisJeyA3OTUwMDAwMDAsIDB4MTIsIDB4MEEgfSwKKwl7IDg4MzAwMDAwMCwgMHgxMSwgMHgwOSB9LAorCXsgOTk0MDAwMDAwLCAweDEwLCAweDA4IH0sCisJeyAgICAgICAgIDAsIDB4MDAsIDB4MDAgfSwgICAgLyogVGFibGUgRW5kICovCit9OworCitzdGF0aWMgc3RydWN0IFNNYXAyIG1fQ2FsX1BMTF9NYXBbXSA9IHsKKwl7ICAzMzgxMzAwMCwgMHhERCwgMHhEMCB9LAorCXsgIDM2NjI1MDAwLCAweERDLCAweEMwIH0sCisJeyAgMzk5MzgwMDAsIDB4REIsIDB4QjAgfSwKKwl7ICA0MzkzODAwMCwgMHhEQSwgMHhBMCB9LAorCXsgIDQ4ODEzMDAwLCAweEQ5LCAweDkwIH0sCisJeyAgNTQ5MzgwMDAsIDB4RDgsIDB4ODAgfSwKKwl7ICA2MjgxMzAwMCwgMHhEMywgMHg3MCB9LAorCXsgIDY3NjI1MDAwLCAweENELCAweDY4IH0sCisJeyAgNzMyNTAwMDAsIDB4Q0MsIDB4NjAgfSwKKwl7ICA3OTg3NTAwMCwgMHhDQiwgMHg1OCB9LAorCXsgIDg3ODc1MDAwLCAweENBLCAweDUwIH0sCisJeyAgOTc2MjUwMDAsIDB4QzksIDB4NDggfSwKKwl7IDEwOTg3NTAwMCwgMHhDOCwgMHg0MCB9LAorCXsgMTI1NjI1MDAwLCAweEMzLCAweDM4IH0sCisJeyAxMzUyNTAwMDAsIDB4QkQsIDB4MzQgfSwKKwl7IDE0NjUwMDAwMCwgMHhCQywgMHgzMCB9LAorCXsgMTU5NzUwMDAwLCAweEJCLCAweDJDIH0sCisJeyAxNzU3NTAwMDAsIDB4QkEsIDB4MjggfSwKKwl7IDE5NTI1MDAwMCwgMHhCOSwgMHgyNCB9LAorCXsgMjE5NzUwMDAwLCAweEI4LCAweDIwIH0sCisJeyAyNTEyNTAwMDAsIDB4QjMsIDB4MUMgfSwKKwl7IDI3MDUwMDAwMCwgMHhBRCwgMHgxQSB9LAorCXsgMjkzMDAwMDAwLCAweEFDLCAweDE4IH0sCisJeyAzMTk1MDAwMDAsIDB4QUIsIDB4MTYgfSwKKwl7IDM1MTUwMDAwMCwgMHhBQSwgMHgxNCB9LAorCXsgMzkwNTAwMDAwLCAweEE5LCAweDEyIH0sCisJeyA0Mzk1MDAwMDAsIDB4QTgsIDB4MTAgfSwKKwl7IDUwMjUwMDAwMCwgMHhBMywgMHgwRSB9LAorCXsgNTQxMDAwMDAwLCAweDlELCAweDBEIH0sCisJeyA1ODYwMDAwMDAsIDB4OUMsIDB4MEMgfSwKKwl7IDYzOTAwMDAwMCwgMHg5QiwgMHgwQiB9LAorCXsgNzAzMDAwMDAwLCAweDlBLCAweDBBIH0sCisJeyA3ODEwMDAwMDAsIDB4OTksIDB4MDkgfSwKKwl7IDg3OTAwMDAwMCwgMHg5OCwgMHgwOCB9LAorCXsgICAgICAgICAwLCAweDAwLCAweDAwIH0sICAgIC8qIFRhYmxlIEVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBTTWFwICBtX0dhaW5UYXBlcl9NYXBbXSA9IHsKKwl7ICA0NTQwMDAwMCwgMHgxRiB9LAorCXsgIDQ1ODAwMDAwLCAweDFFIH0sCisJeyAgNDYyMDAwMDAsIDB4MUQgfSwKKwl7ICA0NjcwMDAwMCwgMHgxQyB9LAorCXsgIDQ3MTAwMDAwLCAweDFCIH0sCisJeyAgNDc1MDAwMDAsIDB4MUEgfSwKKwl7ICA0NzkwMDAwMCwgMHgxOSB9LAorCXsgIDQ5NjAwMDAwLCAweDE3IH0sCisJeyAgNTEyMDAwMDAsIDB4MTYgfSwKKwl7ICA1MjkwMDAwMCwgMHgxNSB9LAorCXsgIDU0NTAwMDAwLCAweDE0IH0sCisJeyAgNTYyMDAwMDAsIDB4MTMgfSwKKwl7ICA1NzgwMDAwMCwgMHgxMiB9LAorCXsgIDU5NTAwMDAwLCAweDExIH0sCisJeyAgNjExMDAwMDAsIDB4MTAgfSwKKwl7ICA2NzYwMDAwMCwgMHgwRCB9LAorCXsgIDc0MjAwMDAwLCAweDBDIH0sCisJeyAgODA3MDAwMDAsIDB4MEIgfSwKKwl7ICA4NzIwMDAwMCwgMHgwQSB9LAorCXsgIDkzODAwMDAwLCAweDA5IH0sCisJeyAxMDAzMDAwMDAsIDB4MDggfSwKKwl7IDEwNjkwMDAwMCwgMHgwNyB9LAorCXsgMTEzNDAwMDAwLCAweDA2IH0sCisJeyAxMTk5MDAwMDAsIDB4MDUgfSwKKwl7IDEyNjUwMDAwMCwgMHgwNCB9LAorCXsgMTMzMDAwMDAwLCAweDAzIH0sCisJeyAxMzk1MDAwMDAsIDB4MDIgfSwKKwl7IDE0NjEwMDAwMCwgMHgwMSB9LAorCXsgMTUyNjAwMDAwLCAweDAwIH0sCisJeyAxNTQzMDAwMDAsIDB4MUYgfSwKKwl7IDE1NjEwMDAwMCwgMHgxRSB9LAorCXsgMTU3ODAwMDAwLCAweDFEIH0sCisJeyAxNTk1MDAwMDAsIDB4MUMgfSwKKwl7IDE2MTIwMDAwMCwgMHgxQiB9LAorCXsgMTYzMDAwMDAwLCAweDFBIH0sCisJeyAxNjQ3MDAwMDAsIDB4MTkgfSwKKwl7IDE3MDIwMDAwMCwgMHgxNyB9LAorCXsgMTc1ODAwMDAwLCAweDE2IH0sCisJeyAxODEzMDAwMDAsIDB4MTUgfSwKKwl7IDE4NjkwMDAwMCwgMHgxNCB9LAorCXsgMTkyNDAwMDAwLCAweDEzIH0sCisJeyAxOTgwMDAwMDAsIDB4MTIgfSwKKwl7IDIwMzUwMDAwMCwgMHgxMSB9LAorCXsgMjE2MjAwMDAwLCAweDE0IH0sCisJeyAyMjg5MDAwMDAsIDB4MTMgfSwKKwl7IDI0MTYwMDAwMCwgMHgxMiB9LAorCXsgMjU0NDAwMDAwLCAweDExIH0sCisJeyAyNjcxMDAwMDAsIDB4MTAgfSwKKwl7IDI3OTgwMDAwMCwgMHgwRiB9LAorCXsgMjkyNTAwMDAwLCAweDBFIH0sCisJeyAzMDUyMDAwMDAsIDB4MEQgfSwKKwl7IDMxNzkwMDAwMCwgMHgwQyB9LAorCXsgMzMwNzAwMDAwLCAweDBCIH0sCisJeyAzNDM0MDAwMDAsIDB4MEEgfSwKKwl7IDM1NjEwMDAwMCwgMHgwOSB9LAorCXsgMzY4ODAwMDAwLCAweDA4IH0sCisJeyAzODE1MDAwMDAsIDB4MDcgfSwKKwl7IDM5NDIwMDAwMCwgMHgwNiB9LAorCXsgNDA2OTAwMDAwLCAweDA1IH0sCisJeyA0MTk3MDAwMDAsIDB4MDQgfSwKKwl7IDQzMjQwMDAwMCwgMHgwMyB9LAorCXsgNDQ1MTAwMDAwLCAweDAyIH0sCisJeyA0NTc4MDAwMDAsIDB4MDEgfSwKKwl7IDQ3NjMwMDAwMCwgMHgxOSB9LAorCXsgNDk0ODAwMDAwLCAweDE4IH0sCisJeyA1MTMzMDAwMDAsIDB4MTcgfSwKKwl7IDUzMTgwMDAwMCwgMHgxNiB9LAorCXsgNTUwMzAwMDAwLCAweDE1IH0sCisJeyA1Njg5MDAwMDAsIDB4MTQgfSwKKwl7IDU4NzQwMDAwMCwgMHgxMyB9LAorCXsgNjA1OTAwMDAwLCAweDEyIH0sCisJeyA2MjQ0MDAwMDAsIDB4MTEgfSwKKwl7IDY0MjkwMDAwMCwgMHgxMCB9LAorCXsgNjYxNDAwMDAwLCAweDBGIH0sCisJeyA2Nzk5MDAwMDAsIDB4MEUgfSwKKwl7IDY5ODQwMDAwMCwgMHgwRCB9LAorCXsgNzE2OTAwMDAwLCAweDBDIH0sCisJeyA3MzU0MDAwMDAsIDB4MEIgfSwKKwl7IDc1MzkwMDAwMCwgMHgwQSB9LAorCXsgNzcyNTAwMDAwLCAweDA5IH0sCisJeyA3OTEwMDAwMDAsIDB4MDggfSwKKwl7IDgwOTUwMDAwMCwgMHgwNyB9LAorCXsgODI4MDAwMDAwLCAweDA2IH0sCisJeyA4NDY1MDAwMDAsIDB4MDUgfSwKKwl7IDg2NTAwMDAwMCwgMHgwNCB9LAorCXsgICAgICAgICAwLCAweDAwIH0sICAgIC8qIFRhYmxlIEVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBTTWFwIG1fUkZfQ2FsX0RDX092ZXJfRFRfTWFwW10gPSB7CisJeyAgNDc5MDAwMDAsIDB4MDAgfSwKKwl7ICA1NTAwMDAwMCwgMHgwMCB9LAorCXsgIDYxMTAwMDAwLCAweDBBIH0sCisJeyAgNjQwMDAwMDAsIDB4MEEgfSwKKwl7ICA4MjAwMDAwMCwgMHgxNCB9LAorCXsgIDg0MDAwMDAwLCAweDE5IH0sCisJeyAxMTkwMDAwMDAsIDB4MUMgfSwKKwl7IDEyNDAwMDAwMCwgMHgyMCB9LAorCXsgMTI5MDAwMDAwLCAweDJBIH0sCisJeyAxMzQwMDAwMDAsIDB4MzIgfSwKKwl7IDEzOTAwMDAwMCwgMHgzOSB9LAorCXsgMTQ0MDAwMDAwLCAweDNFIH0sCisJeyAxNDkwMDAwMDAsIDB4M0YgfSwKKwl7IDE1MjYwMDAwMCwgMHg0MCB9LAorCXsgMTU0MDAwMDAwLCAweDQwIH0sCisJeyAxNjQ3MDAwMDAsIDB4NDEgfSwKKwl7IDIwMzUwMDAwMCwgMHgzMiB9LAorCXsgMzUzMDAwMDAwLCAweDE5IH0sCisJeyAzNTYwMDAwMDAsIDB4MUEgfSwKKwl7IDM1OTAwMDAwMCwgMHgxQiB9LAorCXsgMzYzMDAwMDAwLCAweDFDIH0sCisJeyAzNjYwMDAwMDAsIDB4MUQgfSwKKwl7IDM2OTAwMDAwMCwgMHgxRSB9LAorCXsgMzczMDAwMDAwLCAweDFGIH0sCisJeyAzNzYwMDAwMDAsIDB4MjAgfSwKKwl7IDM3OTAwMDAwMCwgMHgyMSB9LAorCXsgMzgzMDAwMDAwLCAweDIyIH0sCisJeyAzODYwMDAwMDAsIDB4MjMgfSwKKwl7IDM4OTAwMDAwMCwgMHgyNCB9LAorCXsgMzkzMDAwMDAwLCAweDI1IH0sCisJeyAzOTYwMDAwMDAsIDB4MjYgfSwKKwl7IDM5OTAwMDAwMCwgMHgyNyB9LAorCXsgNDAyMDAwMDAwLCAweDI4IH0sCisJeyA0MDQwMDAwMDAsIDB4MjkgfSwKKwl7IDQwNzAwMDAwMCwgMHgyQSB9LAorCXsgNDA5MDAwMDAwLCAweDJCIH0sCisJeyA0MTIwMDAwMDAsIDB4MkMgfSwKKwl7IDQxNDAwMDAwMCwgMHgyRCB9LAorCXsgNDE3MDAwMDAwLCAweDJFIH0sCisJeyA0MTkwMDAwMDAsIDB4MkYgfSwKKwl7IDQyMjAwMDAwMCwgMHgzMCB9LAorCXsgNDI0MDAwMDAwLCAweDMxIH0sCisJeyA0MjcwMDAwMDAsIDB4MzIgfSwKKwl7IDQyOTAwMDAwMCwgMHgzMyB9LAorCXsgNDMyMDAwMDAwLCAweDM0IH0sCisJeyA0MzQwMDAwMDAsIDB4MzUgfSwKKwl7IDQzNzAwMDAwMCwgMHgzNiB9LAorCXsgNDM5MDAwMDAwLCAweDM3IH0sCisJeyA0NDIwMDAwMDAsIDB4MzggfSwKKwl7IDQ0NDAwMDAwMCwgMHgzOSB9LAorCXsgNDQ3MDAwMDAwLCAweDNBIH0sCisJeyA0NDkwMDAwMDAsIDB4M0IgfSwKKwl7IDQ1NzgwMDAwMCwgMHgzQyB9LAorCXsgNDY1MDAwMDAwLCAweDBGIH0sCisJeyA0NzcwMDAwMDAsIDB4MTIgfSwKKwl7IDQ4MzAwMDAwMCwgMHgxNCB9LAorCXsgNTAyMDAwMDAwLCAweDE5IH0sCisJeyA1MDgwMDAwMDAsIDB4MUIgfSwKKwl7IDUxOTAwMDAwMCwgMHgxQyB9LAorCXsgNTIyMDAwMDAwLCAweDFEIH0sCisJeyA1MjQwMDAwMDAsIDB4MUUgfSwKKwl7IDUzNDAwMDAwMCwgMHgxRiB9LAorCXsgNTQ5MDAwMDAwLCAweDIwIH0sCisJeyA1NTQwMDAwMDAsIDB4MjIgfSwKKwl7IDU4NDAwMDAwMCwgMHgyNCB9LAorCXsgNTg5MDAwMDAwLCAweDI2IH0sCisJeyA2NTgwMDAwMDAsIDB4MjcgfSwKKwl7IDY2NDAwMDAwMCwgMHgyQyB9LAorCXsgNjY5MDAwMDAwLCAweDJEIH0sCisJeyA2OTkwMDAwMDAsIDB4MkUgfSwKKwl7IDcwNDAwMDAwMCwgMHgzMCB9LAorCXsgNzA5MDAwMDAwLCAweDMxIH0sCisJeyA3MTQwMDAwMDAsIDB4MzIgfSwKKwl7IDcyNDAwMDAwMCwgMHgzMyB9LAorCXsgNzI5MDAwMDAwLCAweDM2IH0sCisJeyA3MzkwMDAwMDAsIDB4MzggfSwKKwl7IDc0NDAwMDAwMCwgMHgzOSB9LAorCXsgNzQ5MDAwMDAwLCAweDNCIH0sCisJeyA3NTQwMDAwMDAsIDB4M0MgfSwKKwl7IDc1OTAwMDAwMCwgMHgzRCB9LAorCXsgNzY0MDAwMDAwLCAweDNFIH0sCisJeyA3NjkwMDAwMDAsIDB4M0YgfSwKKwl7IDc3NDAwMDAwMCwgMHg0MCB9LAorCXsgNzc5MDAwMDAwLCAweDQxIH0sCisJeyA3ODQwMDAwMDAsIDB4NDMgfSwKKwl7IDc4OTAwMDAwMCwgMHg0NiB9LAorCXsgNzk0MDAwMDAwLCAweDQ4IH0sCisJeyA3OTkwMDAwMDAsIDB4NEIgfSwKKwl7IDgwNDAwMDAwMCwgMHg0RiB9LAorCXsgODA5MDAwMDAwLCAweDU0IH0sCisJeyA4MTQwMDAwMDAsIDB4NTkgfSwKKwl7IDgxOTAwMDAwMCwgMHg1RCB9LAorCXsgODI0MDAwMDAwLCAweDYxIH0sCisJeyA4MjkwMDAwMDAsIDB4NjggfSwKKwl7IDgzNDAwMDAwMCwgMHg2RSB9LAorCXsgODM5MDAwMDAwLCAweDc1IH0sCisJeyA4NDQwMDAwMDAsIDB4N0UgfSwKKwl7IDg0OTAwMDAwMCwgMHg4MiB9LAorCXsgODU0MDAwMDAwLCAweDg0IH0sCisJeyA4NTkwMDAwMDAsIDB4OEYgfSwKKwl7IDg2NTAwMDAwMCwgMHg5QSB9LAorCXsgICAgICAgICAwLCAweDAwIH0sICAgIC8qIFRhYmxlIEVuZCAqLworfTsKKworCitzdGF0aWMgc3RydWN0IFNNYXAgIG1fSVJfTWVhc19NYXBbXSA9IHsKKwl7IDIwMDAwMDAwMCwgMHgwNSB9LAorCXsgNDAwMDAwMDAwLCAweDA2IH0sCisJeyA4NjUwMDAwMDAsIDB4MDcgfSwKKwl7ICAgICAgICAgMCwgMHgwMCB9LCAgICAvKiBUYWJsZSBFbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgU01hcDIgbV9DSURfVGFyZ2V0X01hcFtdID0geworCXsgIDQ2MDAwMDAwLCAweDA0LCAxOCB9LAorCXsgIDUyMjAwMDAwLCAweDBBLCAxNSB9LAorCXsgIDcwMTAwMDAwLCAweDAxLCA0MCB9LAorCXsgMTM2ODAwMDAwLCAweDE4LCA0MCB9LAorCXsgMTU2NzAwMDAwLCAweDE4LCA0MCB9LAorCXsgMTg2MjUwMDAwLCAweDBBLCA0MCB9LAorCXsgMjMwMDAwMDAwLCAweDBBLCA0MCB9LAorCXsgMzQ1MDAwMDAwLCAweDE4LCA0MCB9LAorCXsgNDI2MDAwMDAwLCAweDBFLCA0MCB9LAorCXsgNDg5NTAwMDAwLCAweDFFLCA0MCB9LAorCXsgNjk3NTAwMDAwLCAweDMyLCA0MCB9LAorCXsgODQyMDAwMDAwLCAweDNBLCA0MCB9LAorCXsgICAgICAgICAwLCAweDAwLCAgMCB9LCAgICAvKiBUYWJsZSBFbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgU1JGQmFuZE1hcCAgbV9SRl9CYW5kX01hcFs3XSA9IHsKKwl7ICAgNDc5MDAwMDAsICAgNDYwMDAwMDAsICAgICAgICAgICAwLCAgICAgICAgICAwfSwKKwl7ICAgNjExMDAwMDAsICAgNTIyMDAwMDAsICAgICAgICAgICAwLCAgICAgICAgICAwfSwKKwl7ICAxNTI2MDAwMDAsICAgNzAxMDAwMDAsICAgMTM2ODAwMDAwLCAgICAgICAgICAwfSwKKwl7ICAxNjQ3MDAwMDAsICAxNTY3MDAwMDAsICAgICAgICAgICAwLCAgICAgICAgICAwfSwKKwl7ICAyMDM1MDAwMDAsICAxODYyNTAwMDAsICAgICAgICAgICAwLCAgICAgICAgICAwfSwKKwl7ICA0NTc4MDAwMDAsICAyMzAwMDAwMDAsICAgMzQ1MDAwMDAwLCAgNDI2MDAwMDAwfSwKKwl7ICA4NjUwMDAwMDAsICA0ODk1MDAwMDAsICAgNjk3NTAwMDAwLCAgODQyMDAwMDAwfSwKK307CisKK3U4IG1fVGhlcm1vbWV0ZXJfTWFwXzFbMTZdID0geworCTYwLCA2MiwgNjYsIDY0LAorCTc0LCA3MiwgNjgsIDcwLAorCTkwLCA4OCwgODQsIDg2LAorCTc2LCA3OCwgODIsIDgwLAorfTsKKwordTggbV9UaGVybW9tZXRlcl9NYXBfMlsxNl0gPSB7CisJOTIsIDk0LCA5OCwgOTYsCisJMTA2LCAxMDQsIDEwMCwgMTAyLAorCTEyMiwgMTIwLCAxMTYsIDExOCwKKwkxMDgsIDExMCwgMTE0LCAxMTIsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWcKaW5kZXggY2VjMjQyYi4uNjRjODQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCkBAIC01LDYgKzUsOCBAQAogCXNlbGVjdCBEVkJfU1RWNjExMHggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjA5MHggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9EUlhLIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExODI3MUMyREQgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMTMxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBNaWNyb25hcyBQQ0kgZXhwcmVzcyBjYXJkcyB3aXRoIG5HZW5lIGJyaWRnZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jYXJkcy5jCmluZGV4IGZjZjRiZTkuLjA1NjQxOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY2FyZHMuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgImxuYmgyNC5oIgogI2luY2x1ZGUgImxnZHQzMzB4LmgiCiAjaW5jbHVkZSAibXQyMTMxLmgiCisjaW5jbHVkZSAidGRhMTgyNzFjMmRkLmgiCisjaW5jbHVkZSAiZHJ4ay5oIgogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODMsNiArODUsNDkgQEAKIH0KIAogCitzdGF0aWMgaW50IGRyeGtfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gZmUtPnNlY19wcml2OworCWludCBzdGF0dXM7CisKKwlpZiAoZW5hYmxlKSB7CisJCWRvd24oJmNoYW4tPmRldi0+cGxsX211dGV4KTsKKwkJc3RhdHVzID0gY2hhbi0+Z2F0ZV9jdHJsKGZlLCAxKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBjaGFuLT5nYXRlX2N0cmwoZmUsIDApOworCQl1cCgmY2hhbi0+ZGV2LT5wbGxfbXV0ZXgpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHR1bmVyX2F0dGFjaF90ZGExODI3MShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKworCWkyYyA9ICZjaGFuLT5kZXYtPmNoYW5uZWxbMF0uaTJjX2FkYXB0ZXI7CisJaWYgKGNoYW4tPmZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJY2hhbi0+ZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGNoYW4tPmZlLCAxKTsKKwlmZSA9IGR2Yl9hdHRhY2godGRhMTgyNzFjMmRkX2F0dGFjaCwgY2hhbi0+ZmUsIGkyYywgMHg2MCk7CisJaWYgKGNoYW4tPmZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJY2hhbi0+ZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGNoYW4tPmZlLCAwKTsKKwlpZiAoIWZlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gVERBMTgyNzEgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHVuZXJfYXR0YWNoX3Byb2JlKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCWlmIChjaGFuLT5kZW1vZF90eXBlID09IDApCisJCXJldHVybiB0dW5lcl9hdHRhY2hfc3R2NjExMChjaGFuKTsKKwlpZiAoY2hhbi0+ZGVtb2RfdHlwZSA9PSAxKQorCQlyZXR1cm4gdHVuZXJfYXR0YWNoX3RkYTE4MjcxKGNoYW4pOworCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgaW50IGRlbW9kX2F0dGFjaF9zdHYwOTAwKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwpAQCAtMTMwLDYgKzE3NSw2MCBAQAogCQl1cCgmY2hhbi0+ZGV2LT5wbGxfbXV0ZXgpOwogfQogCitzdGF0aWMgaW50IGkyY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTggYWRyLCB1OCAqdmFsKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMV0gPSB7ey5hZGRyID0gYWRyLCAgLmZsYWdzID0gSTJDX01fUkQsCisJCQkJICAgLmJ1ZiAgPSB2YWwsICAubGVuICAgPSAxIH0gfTsKKwlyZXR1cm4gKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAxKSA9PSAxKSA/IDAgOiAtMTsKK30KKworc3RhdGljIGludCBpMmNfcmVhZF9yZWcxNihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGFkciwKKwkJCSAgdTE2IHJlZywgdTggKnZhbCkKK3sKKwl1OCBtc2dbMl0gPSB7cmVnPj44LCByZWcmMHhmZn07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHt7LmFkZHIgPSBhZHIsIC5mbGFncyA9IDAsCisJCQkJICAgLmJ1ZiAgPSBtc2csIC5sZW4gICA9IDJ9LAorCQkJCSAgey5hZGRyID0gYWRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkgICAuYnVmICA9IHZhbCwgLmxlbiAgID0gMX0gfTsKKwlyZXR1cm4gKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKSA/IDAgOiAtMTsKK30KKworc3RhdGljIGludCBwb3J0X2hhc19zdHYwOTAwKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgcG9ydCkKK3sKKwl1OCB2YWw7CisJaWYgKGkyY19yZWFkX3JlZzE2KGkyYywgMHg2OCtwb3J0LzIsIDB4ZjEwMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwb3J0X2hhc19kcnhrKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgcG9ydCkKK3sKKwl1OCB2YWw7CisKKwlpZiAoaTJjX3JlYWQoaTJjLCAweDI5K3BvcnQsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGVtb2RfYXR0YWNoX2RyeGsoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCBkcnhrX2NvbmZpZyBjb25maWc7CisKKwltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCWNvbmZpZy5hZHIgPSAweDI5ICsgKGNoYW4tPm51bWJlciBeIDIpOworCisJY2hhbi0+ZmUgPSBkdmJfYXR0YWNoKGRyeGtfYXR0YWNoLCAmY29uZmlnLCBpMmMsICZjaGFuLT5mZTIpOworCWlmICghY2hhbi0+ZmUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBEUlhLIGZvdW5kIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwljaGFuLT5mZS0+c2VjX3ByaXYgPSBjaGFuOworCWNoYW4tPmdhdGVfY3RybCA9IGNoYW4tPmZlLT5vcHMuaTJjX2dhdGVfY3RybDsKKwljaGFuLT5mZS0+b3BzLmkyY19nYXRlX2N0cmwgPSBkcnhrX2dhdGVfY3RybDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjaW5lUzJfcHJvYmUoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CkBAIC0xNDQsNDMgKzI0Myw0MiBAQAogCWVsc2UKIAkJaTJjID0gJmNoYW4tPmRldi0+Y2hhbm5lbFsxXS5pMmNfYWRhcHRlcjsKIAotCWZlX2NvbmYgPSBjaGFuLT5kZXYtPmNhcmRfaW5mby0+ZmVfY29uZmlnW2NoYW4tPm51bWJlcl07Ci0JaTJjX21zZy5hZGRyID0gZmVfY29uZi0+YWRkcmVzczsKKwlpZiAocG9ydF9oYXNfc3R2MDkwMChpMmMsIGNoYW4tPm51bWJlcikpIHsKKwkJY2hhbi0+ZGVtb2RfdHlwZSA9IDA7CisJCWZlX2NvbmYgPSBjaGFuLT5kZXYtPmNhcmRfaW5mby0+ZmVfY29uZmlnW2NoYW4tPm51bWJlcl07CisJCS8qIGRlbW9kIGZvdW5kLCBhdHRhY2ggaXQgKi8KKwkJcmMgPSBkZW1vZF9hdHRhY2hfc3R2MDkwMChjaGFuKTsKKwkJaWYgKHJjIDwgMCB8fCBjaGFuLT5udW1iZXIgPCAyKQorCQkJcmV0dXJuIHJjOwogCi0JLyogcHJvYmUgZGVtb2QgKi8KLQlpMmNfbXNnLmxlbiA9IDI7Ci0JYnVmWzBdID0gMHhmMTsKLQlidWZbMV0gPSAweDAwOwotCXJjID0gaTJjX3RyYW5zZmVyKGkyYywgJmkyY19tc2csIDEpOwotCWlmIChyYyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGRlbW9kIGZvdW5kLCBhdHRhY2ggaXQgKi8KLQlyYyA9IGRlbW9kX2F0dGFjaF9zdHYwOTAwKGNoYW4pOwotCWlmIChyYyA8IDAgfHwgY2hhbi0+bnVtYmVyIDwgMikKLQkJcmV0dXJuIHJjOwotCi0JLyogZGVtb2QgIzI6IHJlcHJvZ3JhbSBvdXRwdXRzIERQTjEgJiBEUE4yICovCi0JaTJjX21zZy5sZW4gPSAzOwotCWJ1ZlswXSA9IDB4ZjE7Ci0Jc3dpdGNoIChjaGFuLT5udW1iZXIpIHsKLQljYXNlIDI6Ci0JCWJ1ZlsxXSA9IDB4NWM7Ci0JCWJ1ZlsyXSA9IDB4YzI7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJYnVmWzFdID0gMHg2MTsKLQkJYnVmWzJdID0gMHhjYzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwkJLyogZGVtb2QgIzI6IHJlcHJvZ3JhbSBvdXRwdXRzIERQTjEgJiBEUE4yICovCisJCWkyY19tc2cuYWRkciA9IGZlX2NvbmYtPmFkZHJlc3M7CisJCWkyY19tc2cubGVuID0gMzsKKwkJYnVmWzBdID0gMHhmMTsKKwkJc3dpdGNoIChjaGFuLT5udW1iZXIpIHsKKwkJY2FzZSAyOgorCQkJYnVmWzFdID0gMHg1YzsKKwkJCWJ1ZlsyXSA9IDB4YzI7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJYnVmWzFdID0gMHg2MTsKKwkJCWJ1ZlsyXSA9IDB4Y2M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXJjID0gaTJjX3RyYW5zZmVyKGkyYywgJmkyY19tc2csIDEpOworCQlpZiAocmMgIT0gMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGNvdWxkIG5vdCBzZXR1cCBEUE54XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIGlmIChwb3J0X2hhc19kcnhrKGkyYywgY2hhbi0+bnVtYmVyXjIpKSB7CisJCWNoYW4tPmRlbW9kX3R5cGUgPSAxOworCQlkZW1vZF9hdHRhY2hfZHJ4ayhjaGFuLCBpMmMpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gZGVtb2QgZm91bmQgb24gY2hhbiAlZFxuIiwgY2hhbi0+bnVtYmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJjID0gaTJjX3RyYW5zZmVyKGkyYywgJmkyY19tc2csIDEpOwotCWlmIChyYyAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBjb3VsZCBub3Qgc2V0dXAgRFBOeFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0zMDYsNyArNDA0LDcgQEAKIAkuaW9fdHlwZQk9IHtOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLAogCQkJICAgTkdFTkVfSU9fVFNPVVR9LAogCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwLCBjaW5lUzJfcHJvYmUsIGNpbmVTMl9wcm9iZX0sCi0JLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9wcm9iZSwgdHVuZXJfYXR0YWNoX3Byb2JlfSwKIAkuZmVfY29uZmlnCT0geyZmZV9jaW5lUzIsICZmZV9jaW5lUzIsICZmZV9jaW5lUzJfMiwgJmZlX2NpbmVTMl8yfSwKIAkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xLCAmdHVuZXJfY2luZVMyXzAsICZ0dW5lcl9jaW5lUzJfMX0sCiAJLmxuYgkJPSB7MHgwYSwgMHgwOCwgMHgwYiwgMHgwOX0sCkBAIC0zMjEsNyArNDE5LDcgQEAKIAkuaW9fdHlwZQk9IHtOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLCBOR0VORV9JT19UU0lOLAogCQkJICAgTkdFTkVfSU9fVFNPVVR9LAogCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwLCBjaW5lUzJfcHJvYmUsIGNpbmVTMl9wcm9iZX0sCi0JLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLnR1bmVyX2F0dGFjaAk9IHt0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9wcm9iZSwgdHVuZXJfYXR0YWNoX3Byb2JlfSwKIAkuZmVfY29uZmlnCT0geyZmZV9jaW5lUzIsICZmZV9jaW5lUzIsICZmZV9jaW5lUzJfMiwgJmZlX2NpbmVTMl8yfSwKIAkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xLCAmdHVuZXJfY2luZVMyXzAsICZ0dW5lcl9jaW5lUzJfMX0sCiAJLmxuYgkJPSB7MHgwYSwgMHgwOCwgMHgwYiwgMHgwOX0sCkBAIC0zMzEsMTMgKzQyOSwxMyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IG5nZW5lX2luZm8gbmdlbmVfaW5mb19kdW9GbGV4UzIgPSB7CitzdGF0aWMgc3RydWN0IG5nZW5lX2luZm8gbmdlbmVfaW5mb19kdW9GbGV4ID0gewogCS50eXBlICAgICAgICAgICA9IE5HRU5FX1NJREVXSU5ERVIsCi0JLm5hbWUgICAgICAgICAgID0gIkRpZ2l0YWwgRGV2aWNlcyBEdW9GbGV4IFMyIG1pbmlQQ0llIiwKKwkubmFtZSAgICAgICAgICAgPSAiRGlnaXRhbCBEZXZpY2VzIER1b0ZsZXggUENJZSBvciBtaW5pUENJZSIsCiAJLmlvX3R5cGUgICAgICAgID0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU4sCiAJCQkgICBOR0VORV9JT19UU09VVH0sCiAJLmRlbW9kX2F0dGFjaCAgID0ge2NpbmVTMl9wcm9iZSwgY2luZVMyX3Byb2JlLCBjaW5lUzJfcHJvYmUsIGNpbmVTMl9wcm9iZX0sCi0JLnR1bmVyX2F0dGFjaCAgID0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMCwgdHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwfSwKKwkudHVuZXJfYXR0YWNoICAgPSB7dHVuZXJfYXR0YWNoX3Byb2JlLCB0dW5lcl9hdHRhY2hfcHJvYmUsIHR1bmVyX2F0dGFjaF9wcm9iZSwgdHVuZXJfYXR0YWNoX3Byb2JlfSwKIAkuZmVfY29uZmlnICAgICAgPSB7JmZlX2NpbmVTMiwgJmZlX2NpbmVTMiwgJmZlX2NpbmVTMl8yLCAmZmVfY2luZVMyXzJ9LAogCS50dW5lcl9jb25maWcgICA9IHsmdHVuZXJfY2luZVMyXzAsICZ0dW5lcl9jaW5lUzJfMSwgJnR1bmVyX2NpbmVTMl8wLCAmdHVuZXJfY2luZVMyXzF9LAogCS5sbmIgICAgICAgICAgICA9IHsweDBhLCAweDA4LCAweDBiLCAweDA5fSwKQEAgLTM4NSw4ICs0ODMsOCBAQAogCU5HRU5FX0lEKDB4MThjMywgMHhkYjAxLCBuZ2VuZV9pbmZvX3NhdGl4UzIpLAogCU5HRU5FX0lEKDB4MThjMywgMHhkYjAyLCBuZ2VuZV9pbmZvX3NhdGl4UzJ2MiksCiAJTkdFTkVfSUQoMHgxOGMzLCAweGRkMDAsIG5nZW5lX2luZm9fY2luZVMydjUpLAotCU5HRU5FX0lEKDB4MThjMywgMHhkZDEwLCBuZ2VuZV9pbmZvX2R1b0ZsZXhTMiksCi0JTkdFTkVfSUQoMHgxOGMzLCAweGRkMjAsIG5nZW5lX2luZm9fZHVvRmxleFMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4ZGQxMCwgbmdlbmVfaW5mb19kdW9GbGV4KSwKKwlOR0VORV9JRCgweDE4YzMsIDB4ZGQyMCwgbmdlbmVfaW5mb19kdW9GbGV4KSwKIAlOR0VORV9JRCgweDE0NjEsIDB4MDYyZSwgbmdlbmVfaW5mb19tNzgwKSwKIAl7MH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKaW5kZXggNjkyN2M3Mi4uZjEyOWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtNDEsNyArNDEsNyBAQAogCiAjaW5jbHVkZSAibmdlbmUuaCIKIAotc3RhdGljIGludCBvbmVfYWRhcHRlciA9IDE7CitzdGF0aWMgaW50IG9uZV9hZGFwdGVyOwogbW9kdWxlX3BhcmFtKG9uZV9hZGFwdGVyLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhvbmVfYWRhcHRlciwgIlVzZSBvbmx5IG9uZSBhZGFwdGVyLiIpOwogCkBAIC00NjEsNyArNDYxLDcgQEAKIAkweDQyLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAogCTB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEggKi8KIAkweDcxLCAweDA3LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBEUlhIc2VyICovCi0JMHg3MiwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogUzJzZXIgKi8KKwkweDcyLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBTMnNlciAqLwogCTB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsIC8qIExHRFQzMzAzICovCiB9OwogCkBAIC01MDcsNyArNTA3LDcgQEAKIHsKIAl1MzIgKnB0ciA9IEJ1ZmZlcjsKIAotCW1lbXNldChCdWZmZXIsIDB4ZmYsIExlbmd0aCk7CisJbWVtc2V0KEJ1ZmZlciwgVFNfRklMTEVSLCBMZW5ndGgpOwogCXdoaWxlIChMZW5ndGggPiAwKSB7CiAJCWlmIChGbGFncyAmIERGX1NXQVAzMikKIAkJCSpwdHIgPSAweDQ3MUZGRjEwOwpAQCAtMTQ0Myw2ICsxNDQzLDkgQEAKIAkJY2hhbi0+Y2lfZGV2ID0gTlVMTDsKIAl9CiAKKwlpZiAoY2hhbi0+ZmUyKQorCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChjaGFuLT5mZTIpOworCiAJaWYgKGNoYW4tPmZlKSB7CiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGNoYW4tPmZlKTsKIAkJZHZiX2Zyb250ZW5kX2RldGFjaChjaGFuLT5mZSk7CkBAIC0xNTM0LDYgKzE1MzcsMTQgQEAKIAkJCWdvdG8gZXJyOwogCQljaGFuLT5oYXNfZGVtdXggPSB0cnVlOwogCX0KKwlpZiAoY2hhbi0+ZmUyKSB7CisJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoYWRhcHRlciwgY2hhbi0+ZmUyKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2hhbi0+ZmUyLT50dW5lcl9wcml2ID0gY2hhbi0+ZmUtPnR1bmVyX3ByaXY7CisJCW1lbWNweSgmY2hhbi0+ZmUyLT5vcHMudHVuZXJfb3BzLAorCQkgICAgICAgJmNoYW4tPmZlLT5vcHMudHVuZXJfb3BzLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJfQogCiAJaWYgKGNoYW4tPmhhc19kZW11eCkgewogCQlyZXQgPSBteV9kdmJfZG14X3RzX2NhcmRfaW5pdChkdmJkZW11eCwgIlNXIGRlbXV4IiwKQEAgLTE1NzEsMTEgKzE1ODIsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBjeGQyMDk5X2NmZyBjeGRfY2ZnID0geworCS5iaXRyYXRlID0gNjIwMDAsCisJLmFkciA9IDB4NDAsCisJLnBvbGFyaXR5ID0gMCwKKwkuY2xvY2tfbW9kZSA9IDAsCit9OworCiBzdGF0aWMgdm9pZCBjeGRfYXR0YWNoKHN0cnVjdCBuZ2VuZSAqZGV2KQogewogCXN0cnVjdCBuZ2VuZV9jaSAqY2kgPSAmZGV2LT5jaTsKIAotCWNpLT5lbiA9IGN4ZDIwOTlfYXR0YWNoKDB4NDAsIGRldiwgJmRldi0+Y2hhbm5lbFswXS5pMmNfYWRhcHRlcik7CisJY2ktPmVuID0gY3hkMjA5OV9hdHRhY2goJmN4ZF9jZmcsIGRldiwgJmRldi0+Y2hhbm5lbFswXS5pMmNfYWRhcHRlcik7CiAJY2ktPmRldiA9IGRldjsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWR2Yi5jCmluZGV4IDBiNDk0MzIuLmZjYjE2YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWR2Yi5jCkBAIC0xMTgsNiArMTE4LDE2IEBACiAJfQogfQogCisvKiBzdGFydCBvZiBmaWxsZXIgcGFja2V0ICovCitzdGF0aWMgdTggZmlsbF90c1tdID0geyAweDQ3LCAweDFmLCAweGZmLCAweDEwLCBUU19GSUxMRVIgfTsKKworLyogI2RlZmluZSBERUJVR19DSV9YRkVSICovCisjaWZkZWYgREVCVUdfQ0lfWEZFUgorc3RhdGljIHUzMiBvazsKK3N0YXRpYyB1MzIgb3ZlcmZsb3c7CitzdGF0aWMgdTMyIHN0cmlwcGVkOworI2VuZGlmCisKIHZvaWQgKnRzaW5fZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLCB1MzIgY2xvY2ssIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9IHByaXY7CkBAIC0xMjYsMjEgKzEzNiw0MSBAQAogCiAJaWYgKGZsYWdzICYgREZfU1dBUDMyKQogCQlzd2FwX2J1ZmZlcihidWYsIGxlbik7CisKIAlpZiAoZGV2LT5jaS5lbiAmJiBjaGFuLT5udW1iZXIgPT0gMikgewotCQlpZiAoZHZiX3JpbmdidWZmZXJfZnJlZSgmZGV2LT50c2luX3JidWYpID4gbGVuKSB7Ci0JCQlkdmJfcmluZ2J1ZmZlcl93cml0ZSgmZGV2LT50c2luX3JidWYsIGJ1ZiwgbGVuKTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT50c2luX3JidWYucXVldWUpOworCQl3aGlsZSAobGVuID49IDE4OCkgeworCQkJaWYgKG1lbWNtcChidWYsIGZpbGxfdHMsIHNpemVvZiBmaWxsX3RzKSAhPSAwKSB7CisJCQkJaWYgKGR2Yl9yaW5nYnVmZmVyX2ZyZWUoJmRldi0+dHNpbl9yYnVmKSA+PSAxODgpIHsKKwkJCQkJZHZiX3JpbmdidWZmZXJfd3JpdGUoJmRldi0+dHNpbl9yYnVmLCBidWYsIDE4OCk7CisJCQkJCXdha2VfdXAoJmRldi0+dHNpbl9yYnVmLnF1ZXVlKTsKKyNpZmRlZiBERUJVR19DSV9YRkVSCisJCQkJCW9rKys7CisjZW5kaWYKKwkJCQl9CisjaWZkZWYgREVCVUdfQ0lfWEZFUgorCQkJCWVsc2UKKwkJCQkJb3ZlcmZsb3crKzsKKyNlbmRpZgorCQkJfQorI2lmZGVmIERFQlVHX0NJX1hGRVIKKwkJCWVsc2UKKwkJCQlzdHJpcHBlZCsrOworCisJCQlpZiAob2sgJSAxMDAgPT0gMCAmJiBvdmVyZmxvdykKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogb2sgJXUgb3ZlcmZsb3cgJXUgZHJvcHBlZCAldVxuIiwgX19mdW5jX18sIG9rLCBvdmVyZmxvdywgc3RyaXBwZWQpOworI2VuZGlmCisJCQlidWYgKz0gMTg4OworCQkJbGVuIC09IDE4ODsKIAkJfQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJfQotCWlmIChjaGFuLT51c2VycyA+IDApIHsKKworCWlmIChjaGFuLT51c2VycyA+IDApCiAJCWR2Yl9kbXhfc3dmaWx0ZXIoJmNoYW4tPmRlbXV4LCBidWYsIGxlbik7Ci0JfQorCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXU4IGZpbGxfdHNbMTg4XSA9IHsgMHg0NywgMHgxZiwgMHhmZiwgMHgxMCB9OwotCiB2b2lkICp0c291dF9leGNoYW5nZSh2b2lkICpwcml2LCB2b2lkICpidWYsIHUzMiBsZW4sIHUzMiBjbG9jaywgdTMyIGZsYWdzKQogewogCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS5oCmluZGV4IDQwZmNlOWUuLjU0NDNkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUuaApAQCAtNjQxLDggKzY0MSwxMSBAQAogCWludCAgICAgICAgICAgICAgICAgICBtb2RlOwogCWJvb2wgICAgICAgICAgICAgICAgICBoYXNfYWRhcHRlcjsKIAlib29sICAgICAgICAgICAgICAgICAgaGFzX2RlbXV4OworCWludCAgICAgICAgICAgICAgICAgICBkZW1vZF90eXBlOworCWludCAoKmdhdGVfY3RybCkoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBpbnQpOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCAgKmZlOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgICpmZTI7CiAJc3RydWN0IGRteGRldiAgICAgICAgIGRteGRldjsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgZGVtdXg7CiAJc3RydWN0IGR2Yl9uZXQgICAgICAgIGR2Ym5ldDsKQEAgLTc4Niw2ICs3ODksOCBAQAogCXU4ICAgICAgICAgICAgICAgICAgICB1YXJ0X3JidWZbVUFSVF9SQlVGX0xFTl07CiAJaW50ICAgICAgICAgICAgICAgICAgIHVhcnRfcnAsIHVhcnRfd3A7CiAKKyNkZWZpbmUgVFNfRklMTEVSICAweDZmCisKIAl1OCAgICAgICAgICAgICAgICAgICAqdHNvdXRfYnVmOwogI2RlZmluZSBUU09VVF9CVUZfU0laRSAoNTEyKjE4OCo4KQogCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciB0c291dF9yYnVmOwpAQCAtODUyLDcgKzg1Nyw3IEBACiB9OwogCiAjaWZkZWYgTkdFTkVfVjRMCi1zdHJ1Y3QgbmdlbmVfZm9ybWF0eworc3RydWN0IG5nZW5lX2Zvcm1hdCB7CiAJY2hhciAqbmFtZTsKIAlpbnQgICBmb3VyY2M7ICAgICAgICAgIC8qIHZpZGVvNGxpbnV4IDIgICAgICAqLwogCWludCAgIGJ0Zm9ybWF0OyAgICAgICAgLyogQlQ4NDhfQ09MT1JfRk1UXyogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggNzg3NjVlZC4uNzMzMWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAogCWlmICghY2xpZW50KSB7CiAJCXNtc19lcnIoImJhZCBwYXJhbWV0ZXIuIik7Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmVnaXN0ZXJlZF9jbGllbnQgPSBzbXNjb3JlX2ZpbmRfY2xpZW50KGNvcmVkZXYsIGRhdGFfdHlwZSwgaWQpOwogCWlmIChyZWdpc3RlcmVkX2NsaWVudCA9PSBjbGllbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKaW5kZXggOGVjYWRlYy4uYzU5MmFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfX1NNU19DT1JFX0FQSV9IX18KICNkZWZpbmUgX19TTVNfQ09SRV9BUElfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCmluZGV4IDNkOGNjNDIuLjI1ZTU4Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCkBAIC0xMDIsMTAgKzEwMiw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNDYiCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgNCwgNikKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuNC43IgogCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmt1cyBEZW1sZWl0bmVyIDxtc2RlbWxlaUB0dWNhbmEuaGFydmFyZC5lZHU+IgogI2RlZmluZSBEUklWRVJfREVTQyAiRC1MaW5rIERTQi1SMTAwIFVTQiBGTSByYWRpbyBkcml2ZXIiCkBAIC0zMzUsNyArMzMyLDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCB2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CiB9CkBAIC02NDcsMyArNjQzLDQgQEAKIE1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKIE1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggNGNlMTBkYi4uMWMzZjg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogbXNsZWVwCQkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KQEAgLTQxLDYgKzQwLDcgQEAKIE1PRFVMRV9BVVRIT1IoIk0uS2lya3dvb2QiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIHJhZGlvIGNhcmQuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjMiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1JUUkFDS19QT1JUIC0xCkBAIC01Myw4ICs1Myw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGYgb3IgMHgzMGYpIik7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQotCiBzdHJ1Y3QgcnRyYWNrCiB7CiAJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwpAQCAtMjIzLDcgKzIyMSw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1haW1zbGFiIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlJhZGlvVHJhY2siLCBzaXplb2Yodi0+Y2FyZCkpOwogCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKLQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggZGQ4YTZhYi4uZWVkN2IwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCiAjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CkBAIC0zOCw2ICszNyw3IEBACiBNT0RVTEVfQVVUSE9SKCJSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEF6dGVjaCByYWRpbyBjYXJkLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMC4zIik7CiAKIC8qIGFjY2VwdGFibGUgcG9ydHM6IDB4MzUwIChKUDMgc2hvcnRlZCksIDB4MzU4IChKUDMgb3BlbikgKi8KIApAQCAtNTMsOCArNTMsNiBAQAogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBBenRlY2ggY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQotCiBzdHJ1Y3QgYXp0ZWNoCiB7CiAJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwpAQCAtMTg4LDcgKzE4Niw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1henRlY2giLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiQXp0ZWNoIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCBiYzlhZDA4Li4xNmEwODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0zMCw3ICszMCw2IEBACiAgKgkJQ2hhbmdlZCBBUEkgdG8gVjRMMgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwpAQCAtNDYsNiArNDUsNyBAQAogTU9EVUxFX0FVVEhPUigiRnJlZCBHbGVhc29uLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEFEUyBDYWRldCBBTS9GTS9SRFMgcmFkaW8gY2FyZC4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjMuNCIpOwogCiBzdGF0aWMgaW50IGlvID0gLTE7CQkvKiBkZWZhdWx0IHRvIGlzYXBucCBhY3RpdmF0aW9uICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CkBAIC01NCw4ICs1NCw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgQ2FkZXQgY2FyZCAoMHgzMzAsMHgzMzIsMHgzMzQsMHgzMzYsMHgzMzgsMHgzM2EsMHgzM2MsMHgzM2UpIik7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CiAKLSNkZWZpbmUgQ0FERVRfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAzLCAzKQotCiAjZGVmaW5lIFJEU19CVUZGRVIgMjU2CiAjZGVmaW5lIFJEU19SWF9GTEFHIDEKICNkZWZpbmUgTUJTX1JYX0ZMQUcgMgpAQCAtMzYxLDcgKzM1OSw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJBRFMgQ2FkZXQiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiQURTIENhZGV0Iiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IENBREVUX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTyB8CiAJCQkgIFY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1JEU19DQVBUVVJFOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKaW5kZXggMjU5OTM2NC4uZWRhZGM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCkBAIC0yMSwyMSArMjEsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMykKLQogLyoKICAqIE1vZHVsZSBpbmZvLgogICovCiAKLU1PRFVMRV9BVVRIT1IoIkpvbmFzIE11bnNpbiwgUGVra2EgU2VwcORuZW4gPHBleHVAa2Fwc2kuZmk+Iik7CitNT0RVTEVfQVVUSE9SKCJKb25hcyBNdW5zaW4sIFBla2thIFNlcHDDpG5lbiA8cGV4dUBrYXBzaS5maT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBHZW1UZWsgUmFkaW8gY2FyZC4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjAuNCIpOwogCiAvKgogICogTW9kdWxlIHBhcmFtcy4KQEAgLTM4Nyw3ICszODUsNiBAQAogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tZ2VtdGVrIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkdlbVRlayIsIHNpemVvZih2LT5jYXJkKSk7CiAJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwppbmRleCBlODNlODQwLi5mODcyYTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKQEAgLTQwLDE1ICs0MCwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC43LjgiCisKKwogTU9EVUxFX0FVVEhPUigiRGltaXRyb21hbm9sYWtpcyBBcG9zdG9sb3MsIGFwZGltQGdyZWNpYW4ubmV0Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJhZGlvIGRyaXZlciBmb3IgdGhlIEd1aWxsZW1vdCBNYXhpIFJhZGlvIEZNMjAwMCByYWRpby4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwpAQCAtNTgsMTAgKzYxLDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjc3IgotCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgNywgNykKLQogI2RlZmluZSBkcHJpbnRrKGRldiwgbnVtLCBmbXQsIGFyZy4uLikgXAogCXY0bDJfZGJnKG51bSwgZGVidWcsICZkZXYtPnY0bDJfZGV2LCBmbXQsICMjIGFyZykKIApAQCAtMTk1LDcgKzE5NCw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYXhpcmFkaW8iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwogCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wZGV2KSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwppbmRleCBiM2E2MzViLi4xNzQyYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC02MywxOCArNjMsMTcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIGRyaXZlciBhbmQgbW9kdWxlIGRlZmluaXRpb25zICovCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFsZXhleSBLbGltb3YgPGtsaW1vdi5saW51eEBnbWFpbC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gcmFkaW8gZHJpdmVyIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xMSIKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAxKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xLjIiCiAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogCiAjZGVmaW5lIFVTQl9BTVJBRElPX1ZFTkRPUiAweDA3Y2EKICNkZWZpbmUgVVNCX0FNUkFESU9fUFJPRFVDVCAweGI4MDAKQEAgLTMwMSw3ICszMDAsNiBAQAogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbXI4MDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwogCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwppbmRleCA4ZDZlYTU5Li4zNjI4YmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KQEAgLTIzLDYgKzIyLDcgQEAKIE1PRFVMRV9BVVRIT1IoIkJlbiBQZmFmZiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2sgSUkgcmFkaW8gY2FyZC4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjAuMyIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1JUUkFDSzJfUE9SVCAtMQpAQCAtMzUsOCArMzUsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBSYWRpb1RyYWNrIGNhcmQgKDB4MjBjIG9yIDB4MzBjKSIpOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKLQogc3RydWN0IHJ0cmFjazIKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CkBAIC0xMjEsNyArMTE5LDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXJ0cmFjazIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiUmFkaW9UcmFjayBJSSIsIHNpemVvZih2LT5jYXJkKSk7CiAJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IGI1YTVmODkuLjIyYzU3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogX19zZXR1cAkJCSovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCkBAIC0zMiw2ICszMSw3IEBACiBNT0RVTEVfQVVUSE9SKCJQZXRyIFZhbmRyb3ZlYywgdmFuZHJvdmVAdmMuY3Z1dC5jeiBhbmQgTS4gS2lya3dvb2QiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2LUZNSSBhbmQgU0YxNi1GTVAgcmFkaW8uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjMiKTsKIAogc3RhdGljIGludCBpbyA9IC0xOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwpAQCAtNDAsOCArNDAsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2LUZNSSBvciBTRjE2LUZNUCBjYXJkICgweDI4NCBvciAweDM4NCkiKTsKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCi0KIHN0cnVjdCBmbWkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CkBAIC0xMzQsNyArMTMyLDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXNmMTZmbWkiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiU0YxNi1GTXggcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwogCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKLQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IDg3YmFkNzYuLjJkZDQ4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTEsNDQxICsxLDIwOSBAQAotLyogU0YxNkZNUjIgcmFkaW8gZHJpdmVyIGZvciBMaW51eCByYWRpbyBzdXBwb3J0Ci0gKiBoZWF2aWx5IGJhc2VkIG9uIGZtaSBkcml2ZXIuLi4KLSAqIChjKSAyMDAwLTIwMDIgWmlnbGlvIEZyZWRpYW5vLCBmcmVkZHk3N0BhbmdlbGZpcmUuY29tCisvKiBTRjE2LUZNUjIgcmFkaW8gZHJpdmVyIGZvciBMaW51eAorICogQ29weXJpZ2h0IChjKSAyMDExIE9uZHJlaiBaYXJ5CiAgKgotICogTm90ZXMgb24gdGhlIGhhcmR3YXJlCi0gKgotICogIEZyZXF1ZW5jeSBjb250cm9sIGlzIGRvbmUgZGlnaXRhbGx5IC0tIGllIG91dChwb3J0LGVuY29kZWZyZXEoOTUuOCkpOwotICogIE5vIHZvbHVtZSBjb250cm9sIC0gb25seSBtdXRlL3VubXV0ZSAtIHlvdSBoYXZlIHRvIHVzZSBsaW5lIHZvbHVtZQotICoKLSAqICBGb3IgcmVhZCBzdGVyZW8vbW9ubyB5b3UgbXVzdCB3YWl0IDAuMSBzZWMgYWZ0ZXIgc2V0IGZyZXF1ZW5jeSBhbmQKLSAqICBjYXJkIHVubXV0ZWQgc28gSSBzZXQgZnJlcXVlbmN5IG9uIHVubXV0ZQotICogIFNpZ25hbCBoYW5kbGluZyBzZWVtIHRvIHdvcmsgb25seSBvbiBhdXRvc2Nhbm5pbmcgKG5vdCBpbXBsZW1lbnRlZCkKLSAqCi0gKiAgQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICogT3JpZ2luYWwgZHJpdmVyIHdhcyAoYykgMjAwMC0yMDAyIFppZ2xpbyBGcmVkaWFubywgZnJlZGR5NzdAYW5nZWxmaXJlLmNvbQorICogYnV0IGFsbW9zdCBub3RoaW5nIHJlbWFpbmVkIGhlcmUgYWZ0ZXIgY29udmVyc2lvbiB0byBnZW5lcmljIFRFQTU3NXgKKyAqIGltcGxlbWVudGF0aW9uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxzb3VuZC90ZWE1NzV4LXR1bmVyLmg+CiAKLU1PRFVMRV9BVVRIT1IoIlppZ2xpbyBGcmVkaWFubywgZnJlZGR5NzdAYW5nZWxmaXJlLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZGTVIyIHJhZGlvLiIpOworTU9EVUxFX0FVVEhPUigiT25kcmVqIFphcnkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFGb3J0ZSBTRjE2LUZNUjIgRk0gcmFkaW8gY2FyZCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGludCBpbyA9IDB4Mzg0Owotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZGTVIyIGNhcmQgKHNob3VsZCBiZSAweDM4NCwgaWYgZG8gbm90IHdvcmsgdHJ5IDB4Mjg0KSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLSNkZWZpbmUgQVVEX1ZPTF9JTkRFWCAxCi0KLSN1bmRlZiBERUJVRwotLy8jZGVmaW5lIERFQlVHIDEKLQotI2lmZGVmIERFQlVHCi0jIGRlZmluZSAgZGVidWdfcHJpbnQocykgcHJpbnRrIHMKLSNlbHNlCi0jIGRlZmluZSAgZGVidWdfcHJpbnQocykKLSNlbmRpZgotCi0vKiB0aGlzIHNob3VsZCBiZSBzdGF0aWMgdmFycyBmb3IgbW9kdWxlIHNpemUgKi8KLXN0cnVjdCBmbXIyCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKK3N0cnVjdCBmbXIyIHsKIAlpbnQgaW87Ci0JaW50IGN1cnZvbDsgLyogMC0xNSAqLwotCWludCBtdXRlOwotCWludCBzdGVyZW87IC8qIGNhcmQgaXMgcHJvZHVjaW5nIHN0ZXJlbyBhdWRpbyAqLwotCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsgLyogZnJlcSBpbiBrSHogKi8KLQlpbnQgY2FyZF90eXBlOworCXN0cnVjdCBzbmRfdGVhNTc1eCB0ZWE7CisJc3RydWN0IHY0bDJfY3RybCAqdm9sdW1lOworCXN0cnVjdCB2NGwyX2N0cmwgKmJhbGFuY2U7CiB9OwogCisvKiB0aGUgcG9ydCBpcyBoYXJkd2lyZWQgc28gbm8gbmVlZCB0byBzdXBwb3J0IG11bHRpcGxlIGNhcmRzICovCisjZGVmaW5lIEZNUjJfUE9SVAkweDM4NAogc3RhdGljIHN0cnVjdCBmbXIyIGZtcjJfY2FyZDsKIAotLyogaHcgcHJlY2lzaW9uIGlzIDEyLjUga0h6Ci0gKiBJdCBpcyBvbmx5IHVzZWZ1bCB0byBnaXZlIGZyZXEgaW4gaW50ZXJ2YWwgb2YgMjAwICg9MC4wMTI1TWh6KSwKLSAqIG90aGVyIGJpdHMgd2lsbCBiZSB0cnVuY2F0ZWQKLSAqLwotI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KSAvIDIwMCArIDg1NikKLSNkZWZpbmUgUlNGMTZfTUlORlJFUSAoODcgKiAxNjAwMCkKLSNkZWZpbmUgUlNGMTZfTUFYRlJFUSAoMTA4ICogMTYwMDApCisvKiBURUE1NzV4IHR1bmVyIHBpbnMgKi8KKyNkZWZpbmUgU1RSX0RBVEEJKDEgPDwgMCkKKyNkZWZpbmUgU1RSX0NMSwkJKDEgPDwgMSkKKyNkZWZpbmUgU1RSX1dSRU4JKDEgPDwgMikKKyNkZWZpbmUgU1RSX01PU1QJKDEgPDwgMykKKy8qIFBUMjI1NEEvVEM5MTU0QSB2b2x1bWUgY29udHJvbCBwaW5zICovCisjZGVmaW5lIFBUX1NUCQkoMSA8PCA0KQorI2RlZmluZSBQVF9DSwkJKDEgPDwgNSkKKyNkZWZpbmUgUFRfREFUQQkJKDEgPDwgNikKKy8qIHZvbHVtZSBjb250cm9sIHByZXNlbmNlIHBpbiAqLworI2RlZmluZSBGTVIyX0hBU1ZPTAkoMSA8PCA3KQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdChpbnQgbiwgaW50IGlvKQorc3RhdGljIHZvaWQgZm1yMl90ZWE1NzV4X3NldF9waW5zKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLCB1OCBwaW5zKQogewotCWZvciAoOyBuOyAtLW4pCi0JCWluYihpbyk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB0ZWEtPnByaXZhdGVfZGF0YTsKKwl1OCBiaXRzID0gMDsKKworCWJpdHMgfD0gKHBpbnMgJiBURUE1NzVYX0RBVEEpID8gU1RSX0RBVEEgOiAwOworCWJpdHMgfD0gKHBpbnMgJiBURUE1NzVYX0NMSykgID8gU1RSX0NMSyAgOiAwOworCS8qIFdSSVRFX0VOQUJMRSBpcyBpbnZlcnRlZCwgREFUQSBtdXN0IGJlIGhpZ2ggZHVyaW5nIHJlYWQgKi8KKwliaXRzIHw9IChwaW5zICYgVEVBNTc1WF9XUkVOKSA/IDAgOiBTVFJfV1JFTiB8IFNUUl9EQVRBOworCisJb3V0YihiaXRzLCBmbXIyLT5pbyk7CiB9CiAKLXN0YXRpYyB2b2lkIG91dGJpdHMoaW50IGJpdHMsIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgbldhaXQsIGludCBpbykKK3N0YXRpYyB1OCBmbXIyX3RlYTU3NXhfZ2V0X3BpbnMoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7Ci0JaW50IGJpdDsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCXU4IGJpdHMgPSBpbmIoZm1yMi0+aW8pOwogCi0JZm9yICg7IC0tYml0cyA+PSAwOykgewotCQliaXQgPSAoZGF0YSA+PiBiaXRzKSAmIDE7Ci0JCW91dGIoYml0LCBpbyk7Ci0JCXdhaXQobldhaXQsIGlvKTsKLQkJb3V0YihiaXQgfCAyLCBpbyk7Ci0JCXdhaXQobldhaXQsIGlvKTsKLQkJb3V0YihiaXQsIGlvKTsKLQkJd2FpdChuV2FpdCwgaW8pOworCXJldHVybiAgKGJpdHMgJiBTVFJfREFUQSkgPyBURUE1NzVYX0RBVEEgOiAwIHwKKwkJKGJpdHMgJiBTVFJfTU9TVCkgPyBURUE1NzVYX01PU1QgOiAwOworfQorCitzdGF0aWMgdm9pZCBmbXIyX3RlYTU3NXhfc2V0X2RpcmVjdGlvbihzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgYm9vbCBvdXRwdXQpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3RlYTU3NXhfb3BzIGZtcjJfdGVhX29wcyA9IHsKKwkuc2V0X3BpbnMgPSBmbXIyX3RlYTU3NXhfc2V0X3BpbnMsCisJLmdldF9waW5zID0gZm1yMl90ZWE1NzV4X2dldF9waW5zLAorCS5zZXRfZGlyZWN0aW9uID0gZm1yMl90ZWE1NzV4X3NldF9kaXJlY3Rpb24sCit9OworCisvKiBUQzkxNTRBL1BUMjI1NEEgdm9sdW1lIGNvbnRyb2wgKi8KKworLyogMTgtYml0IHNoaWZ0IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUQzkxNTRBX0FUVF9NQUpfMERCCSgxIDw8IDApCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl8xMERCCSgxIDw8IDEpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl8yMERCCSgxIDw8IDIpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl8zMERCCSgxIDw8IDMpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl80MERCCSgxIDw8IDQpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl81MERCCSgxIDw8IDUpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01BSl82MERCCSgxIDw8IDYpCisKKyNkZWZpbmUgVEM5MTU0QV9BVFRfTUlOXzBEQgkoMSA8PCA3KQorI2RlZmluZSBUQzkxNTRBX0FUVF9NSU5fMkRCCSgxIDw8IDgpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01JTl80REIJKDEgPDwgOSkKKyNkZWZpbmUgVEM5MTU0QV9BVFRfTUlOXzZEQgkoMSA8PCAxMCkKKyNkZWZpbmUgVEM5MTU0QV9BVFRfTUlOXzhEQgkoMSA8PCAxMSkKKy8qIGJpdCAxMiBpcyBpZ25vcmVkICovCisjZGVmaW5lIFRDOTE1NEFfQ0hBTk5FTF9MRUZUCSgxIDw8IDEzKQorI2RlZmluZSBUQzkxNTRBX0NIQU5ORUxfUklHSFQJKDEgPDwgMTQpCisvKiBiaXRzIDE1LCAxNiwgMTcgbXVzdCBiZSAwICovCisKKyNkZWZpbmUJVEM5MTU0QV9BVFRfTUFKKHgpCSgxIDw8IHgpCisjZGVmaW5lIFRDOTE1NEFfQVRUX01JTih4KQkoMSA8PCAoNyArIHgpKQorCitzdGF0aWMgdm9pZCB0YzkxNTRhX3NldF9waW5zKHN0cnVjdCBmbXIyICpmbXIyLCB1OCBwaW5zKQoreworCWlmICghZm1yMi0+dGVhLm11dGUpCisJCXBpbnMgfD0gU1RSX1dSRU47CisKKwlvdXRiKHBpbnMsIGZtcjItPmlvKTsKK30KKworc3RhdGljIHZvaWQgdGM5MTU0YV9zZXRfYXR0ZW51YXRpb24oc3RydWN0IGZtcjIgKmZtcjIsIGludCBhdHQsIHUzMiBjaGFubmVsKQoreworCWludCBpOworCXUzMiByZWc7CisJdTggYml0OworCisJcmVnID0gVEM5MTU0QV9BVFRfTUFKKGF0dCAvIDEwKSB8IFRDOTE1NEFfQVRUX01JTigoYXR0ICUgMTApIC8gMik7CisJcmVnIHw9IGNoYW5uZWw7CisJLyogd3JpdGUgMTgtYml0IHNoaWZ0IHJlZ2lzdGVyLCBMU0IgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTg7IGkrKykgeworCQliaXQgPSByZWcgJiAoMSA8PCBpKSA/IFBUX0RBVEEgOiAwOworCQl0YzkxNTRhX3NldF9waW5zKGZtcjIsIGJpdCk7CisJCXVkZWxheSg1KTsKKwkJdGM5MTU0YV9zZXRfcGlucyhmbXIyLCBiaXQgfCBQVF9DSyk7CisJCXVkZWxheSg1KTsKKwkJdGM5MTU0YV9zZXRfcGlucyhmbXIyLCBiaXQpOwogCX0KKworCS8qIGxhdGNoIHJlZ2lzdGVyIGRhdGEgKi8KKwl1ZGVsYXkoNSk7CisJdGM5MTU0YV9zZXRfcGlucyhmbXIyLCBQVF9TVCk7CisJdWRlbGF5KDUpOworCXRjOTE1NGFfc2V0X3BpbnMoZm1yMiwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX211dGUoaW50IGlvKQorc3RhdGljIGludCBmbXIyX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQogewotCW91dGIoMHgwMCwgaW8pOwotCXdhaXQoNCwgaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1yMl91bm11dGUoaW50IGlvKQotewotCW91dGIoMHgwNCwgaW8pOwotCXdhaXQoNCwgaW8pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBmbXIyX3N0ZXJlb19tb2RlKGludCBpbykKLXsKLQlpbnQgbiA9IGluYihpbyk7Ci0KLQlvdXRiKDYsIGlvKTsKLQlpbmIoaW8pOwotCW4gPSAoKG4gPj4gMykgJiAxKSBeIDE7Ci0JZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgInN0ZXJlbzogJWRcbiIsIG4pKTsKLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludCBmbXIyX3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZm1yMiAqZGV2KQotewotCWludCBuID0gaW5iKGRldi0+aW8pOwotCi0JbiAmPSAweEMxOwotCWlmIChuID09IDApIHsKLQkJLyogdGhpcyBzaG91bGQgc3VwcG9ydCB2b2x1bWUgc2V0ICovCi0JCWRldi0+Y2FyZF90eXBlID0gMTI7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBub3Qgdm9sdW1lIChtaW5lIGlzIDExKSAqLwotCWRldi0+Y2FyZF90eXBlID0gKG4gPT0gMTI4KSA/IDExIDogMDsKLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZm1yMl9nZXRzaWdzdHIoc3RydWN0IGZtcjIgKmRldikKLXsKLQkvKiAhISEgd29ya3Mgb25seSBpZiBzY2FubmluZyBmcmVxICovCi0JaW50IHJlcyA9IDB4ZmZmZjsKLQotCW91dGIoNSwgZGV2LT5pbyk7Ci0Jd2FpdCg0LCBkZXYtPmlvKTsKLQlpZiAoIShpbmIoZGV2LT5pbykgJiAxKSkKLQkJcmVzID0gMDsKLQlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAic2lnbmFsOiAlZFxuIiwgcmVzKSk7Ci0JcmV0dXJuIHJlczsKLX0KLQotLyogc2V0IGZyZXF1ZW5jeSBhbmQgdW5tdXRlIGNhcmQgKi8KLXN0YXRpYyBpbnQgZm1yMl9zZXRmcmVxKHN0cnVjdCBmbXIyICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmcmVxID0gZGV2LT5jdXJmcmVxOwotCi0JZm1yMl9tdXRlKGRldi0+aW8pOwotCi0JLyogMHg0MiBmb3IgbW9ubyBvdXRwdXQKLQkgKiAweDEwMiBmb3J3YXJkIHNjYW5uaW5nCi0JICogMHgxODIgc2NhbnNpb25lIGF2YW50aQotCSAqLwotCW91dGJpdHMoOSwgMHgyLCAzLCBkZXYtPmlvKTsKLQlvdXRiaXRzKDE2LCBSU0YxNl9FTkNPREUoZnJlcSksIDIsIGRldi0+aW8pOwotCi0JZm1yMl91bm11dGUoZGV2LT5pbyk7Ci0KLQkvKiB3YWl0IDAuMTEgc2VjICovCi0JbXNsZWVwKDExMCk7Ci0KLQkvKiBOT1RFIGlmIG11dGUgdGhpcyBzdG9wIHJhZGlvCi0JICAgeW91IG11c3Qgc2V0IGZyZXEgb24gdW5tdXRlICovCi0JZGV2LT5zdGVyZW8gPSBmbXIyX3N0ZXJlb19tb2RlKGRldi0+aW8pOwotCXJldHVybiAwOwotfQotCi0vKiAhISEgbm90IHRlc3RlZCwgaW4gbXkgY2FyZCB0aGlzIGRvZXNuJ3Qgd29yayAhISEgKi8KLXN0YXRpYyBpbnQgZm1yMl9zZXR2b2x1bWUoc3RydWN0IGZtcjIgKmRldikKLXsKLQlpbnQgdm9sWzE2XSA9IHsgMHgwMjEsIDB4MDg0LCAweDA5MCwgMHgxMDQsCi0JCQkweDExMCwgMHgyMDQsIDB4MjEwLCAweDQwMiwKLQkJCTB4NDA0LCAweDQwOCwgMHg0MTAsIDB4ODAxLAotCQkJMHg4MDIsIDB4ODA0LCAweDgwOCwgMHg4MTAgfTsKLQlpbnQgaSwgYTsKLQlpbnQgbiA9IHZvbFtkZXYtPmN1cnZvbCAmIDB4MGZdOwotCi0JaWYgKGRldi0+Y2FyZF90eXBlICE9IDExKQotCQlyZXR1cm4gMTsKLQotCWZvciAoaSA9IDEyOyAtLWkgPj0gMDsgKSB7Ci0JCWEgPSAoKG4gPj4gaSkgJiAxKSA8PCA2OyAvKiBpZiAoYT09MCkgYSA9IDA7IGVsc2UgYSA9IDB4NDA7ICovCi0JCW91dGIoYSB8IDQsIGRldi0+aW8pOwotCQl3YWl0KDQsIGRldi0+aW8pOwotCQlvdXRiKGEgfCAweDI0LCBkZXYtPmlvKTsKLQkJd2FpdCg0LCBkZXYtPmlvKTsKLQkJb3V0YihhIHwgNCwgZGV2LT5pbyk7Ci0JCXdhaXQoNCwgZGV2LT5pbyk7Ci0JfQotCWZvciAoaSA9IDY7IC0taSA+PSAwOyApIHsKLQkJYSA9ICgoMHgxOCA+PiBpKSAmIDEpIDw8IDY7Ci0JCW91dGIoYSB8IDQsIGRldi0+aW8pOwotCQl3YWl0KDQsIGRldi0+aW8pOwotCQlvdXRiKGEgfCAweDI0LCBkZXYtPmlvKTsKLQkJd2FpdCg0LCBkZXYtPmlvKTsKLQkJb3V0YihhIHwgNCwgZGV2LT5pbyk7Ci0JCXdhaXQoNCwgZGV2LT5pbyk7Ci0JfQotCXdhaXQoNCwgZGV2LT5pbyk7Ci0Jb3V0YigweDE0LCBkZXYtPmlvKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQotewotCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tc2YxNmZtcjIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2LT5jYXJkLCAiU0YxNi1GTVIyIHJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCi17Ci0Jc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7Ci0Jdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0KLQl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVE7Ci0Jdi0+cmFuZ2VoaWdoID0gUlNGMTZfTUFYRlJFUTsKLQl2LT5yeHN1YmNoYW5zID0gZm1yMi0+c3RlcmVvID8gVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDoKLQkJCQkJVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTE9XOwotCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwotCXYtPnNpZ25hbCA9IGZtcjJfZ2V0c2lnc3RyKGZtcjIpOwotCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQotewotCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQotewotCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGYtPmZyZXF1ZW5jeSA8IFJTRjE2X01JTkZSRVEgfHwKLQkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEpCi0JCXJldHVybiAtRUlOVkFMOwotCS8qIHJvdW5kaW5nIGluIHN0ZXBzIG9mIDIwMCB0byBtYXRjaCB0aGUgZnJlcQotCSAgIHRoYXQgd2lsbCBiZSB1c2VkICovCi0JZm1yMi0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kgLyAyMDApICogMjAwOwotCi0JLyogc2V0IGNhcmQgZnJlcSAoaWYgbm90IG11dGVkKSAqLwotCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKLQkJbXV0ZXhfbG9jaygmZm1yMi0+bG9jayk7Ci0JCWZtcjJfc2V0ZnJlcShmbXIyKTsKLQkJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCi17Ci0Jc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JaWYgKGYtPnR1bmVyICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IGZtcjItPmN1cmZyZXE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKLXsKLQlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzd2l0Y2ggKHFjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJLyogT25seSBjYXJkX3R5cGUgPT0gMTEgaW1wbGVtZW50cyB2b2x1bWUgKi8KLQkJaWYgKGZtcjItPmNhcmRfdHlwZSA9PSAxMSkKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTUsIDEsIDApOwotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3Qgc25kX3RlYTU3NXgsIGN0cmxfaGFuZGxlcik7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB0ZWEtPnByaXZhdGVfZGF0YTsKKwlpbnQgdm9sdW1lLCBiYWxhbmNlLCBsZWZ0LCByaWdodDsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gZm1yMi0+bXV0ZTsKLQkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gZm1yMi0+Y3Vydm9sOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlmbXIyLT5tdXRlID0gY3RybC0+dmFsdWU7CisJCXZvbHVtZSA9IGN0cmwtPnZhbDsKKwkJYmFsYW5jZSA9IGZtcjItPmJhbGFuY2UtPmN1ci52YWw7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCWJhbGFuY2UgPSBjdHJsLT52YWw7CisJCXZvbHVtZSA9IGZtcjItPnZvbHVtZS0+Y3VyLnZhbDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0jaWZkZWYgREVCVUcKLQlpZiAoZm1yMi0+Y3Vydm9sICYmICFmbXIyLT5tdXRlKQotCQlwcmludGsoS0VSTl9ERUJVRyAidW5tdXRlXG4iKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0RFQlVHICJtdXRlXG4iKTsKLSNlbmRpZgorCWxlZnQgPSByaWdodCA9IHZvbHVtZTsKKwlpZiAoYmFsYW5jZSA8IDApCisJCXJpZ2h0ID0gbWF4KDAsIHJpZ2h0ICsgYmFsYW5jZSk7CisJaWYgKGJhbGFuY2UgPiAwKQorCQlsZWZ0ID0gbWF4KDAsIGxlZnQgLSBiYWxhbmNlKTsKIAotCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwotCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKLQkJZm1yMl9zZXR2b2x1bWUoZm1yMik7Ci0JCS8qIFNldCBmcmVxdWVuY3kgYW5kIHVubXV0ZSBjYXJkICovCi0JCWZtcjJfc2V0ZnJlcShmbXIyKTsKLQl9IGVsc2UKLQkJZm1yMl9tdXRlKGZtcjItPmlvKTsKLQltdXRleF91bmxvY2soJmZtcjItPmxvY2spOworCXRjOTE1NGFfc2V0X2F0dGVudWF0aW9uKGZtcjIsIGFicyhsZWZ0IC0gNjgpLCBUQzkxNTRBX0NIQU5ORUxfTEVGVCk7CisJdGM5MTU0YV9zZXRfYXR0ZW51YXRpb24oZm1yMiwgYWJzKHJpZ2h0IC0gNjgpLCBUQzkxNTRBX0NIQU5ORUxfUklHSFQpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKLXsKLQkqaSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQotewotCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWEtPmluZGV4ID0gMDsKLQlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm1yMl9mb3BzID0gewotCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBmbXIyX2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBmbXIyX3NfY3RybCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgZm1yMl9pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAotCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCi0JLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCi0JLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCi19Oworc3RhdGljIGludCBmbXIyX3RlYV9leHRfaW5pdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKK3sKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHRlYS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGluYihmbXIyLT5pbykgJiBGTVIyX0hBU1ZPTCkgeworCQlmbXIyLT52b2x1bWUgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmdGVhLT5jdHJsX2hhbmRsZXIsICZmbXIyX2N0cmxfb3BzLCBWNEwyX0NJRF9BVURJT19WT0xVTUUsIDAsIDY4LCAyLCA1Nik7CisJCWZtcjItPmJhbGFuY2UgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmdGVhLT5jdHJsX2hhbmRsZXIsICZmbXIyX2N0cmxfb3BzLCBWNEwyX0NJRF9BVURJT19CQUxBTkNFLCAtNjgsIDY4LCAyLCAwKTsKKwkJaWYgKHRlYS0+Y3RybF9oYW5kbGVyLmVycm9yKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbXIyOiBjYW4ndCBpbml0aWFsaXplIGNvbnRybHNcbiIpOworCQkJcmV0dXJuIHRlYS0+Y3RybF9oYW5kbGVyLmVycm9yOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgX19pbml0IGZtcjJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBmbXIyICpmbXIyID0gJmZtcjJfY2FyZDsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmZtcjItPnY0bDJfZGV2OwotCWludCByZXM7CiAKLQlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAic2YxNmZtcjIiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKLQlmbXIyLT5pbyA9IGlvOwotCWZtcjItPnN0ZXJlbyA9IDE7Ci0JbXV0ZXhfaW5pdCgmZm1yMi0+bG9jayk7CisJZm1yMi0+aW8gPSBGTVIyX1BPUlQ7CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGZtcjItPmlvLCAyLCAic2YxNmZtcjIiKSkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgInJlcXVlc3RfcmVnaW9uIGZhaWxlZCFcbiIpOworCWlmICghcmVxdWVzdF9yZWdpb24oZm1yMi0+aW8sIDIsICJTRjE2LUZNUjIiKSkgeworCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbXIyOiBJL08gcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBmbXIyLT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOwotCWlmIChyZXMgPCAwKSB7CisJZm1yMi0+dGVhLnByaXZhdGVfZGF0YSA9IGZtcjI7CisJZm1yMi0+dGVhLm9wcyA9ICZmbXIyX3RlYV9vcHM7CisJZm1yMi0+dGVhLmV4dF9pbml0ID0gZm1yMl90ZWFfZXh0X2luaXQ7CisJc3RybGNweShmbXIyLT50ZWEuY2FyZCwgIlNGMTYtRk1SMiIsIHNpemVvZihmbXIyLT50ZWEuY2FyZCkpOworCXN0cmNweShmbXIyLT50ZWEuYnVzX2luZm8sICJJU0EiKTsKKworCWlmIChzbmRfdGVhNTc1eF9pbml0KCZmbXIyLT50ZWEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtcjI6IFVuYWJsZSB0byBkZXRlY3QgVEVBNTc1eCB0dW5lclxuIik7CiAJCXJlbGVhc2VfcmVnaW9uKGZtcjItPmlvLCAyKTsKLQkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOwotCQlyZXR1cm4gcmVzOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlzdHJsY3B5KGZtcjItPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihmbXIyLT52ZGV2Lm5hbWUpKTsKLQlmbXIyLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7Ci0JZm1yMi0+dmRldi5mb3BzID0gJmZtcjJfZm9wczsKLQlmbXIyLT52ZGV2LmlvY3RsX29wcyA9ICZmbXIyX2lvY3RsX29wczsKLQlmbXIyLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMi0+dmRldiwgZm1yMik7Ci0KLQkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0JZm1yMl9tdXRlKGZtcjItPmlvKTsKLQlmbXIyX3Byb2R1Y3RfaW5mbyhmbXIyKTsKLQotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtcjItPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwotCQlyZWxlYXNlX3JlZ2lvbihmbXIyLT5pbywgMik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXY0bDJfaW5mbyh2NGwyX2RldiwgIlNGMTZGTVIyIHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXguXG4iLCBmbXIyLT5pbyk7Ci0JZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgImNhcmRfdHlwZSAlZFxuIiwgZm1yMi0+Y2FyZF90eXBlKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tc2YxNmZtcjI6IFNGMTYtRk1SMiByYWRpbyBjYXJkIGF0IDB4JXguXG4iLCBmbXIyLT5pbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MywyMiArMjExLDkgQEAKIHsKIAlzdHJ1Y3QgZm1yMiAqZm1yMiA9ICZmbXIyX2NhcmQ7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZm1yMi0+dmRldik7Ci0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZm1yMi0+djRsMl9kZXYpOworCXNuZF90ZWE1NzV4X2V4aXQoJmZtcjItPnRlYSk7CiAJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdChmbXIyX2luaXQpOwogbW9kdWxlX2V4aXQoZm1yMl9leGl0KTsKLQotI2lmbmRlZiBNT0RVTEUKLQotc3RhdGljIGludCBfX2luaXQgZm1yMl9zZXR1cF9pbyhjaGFyICpzdHIpCi17Ci0JZ2V0X29wdGlvbigmc3RyLCAmaW8pOwotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJzZjE2Zm1yMj0iLCBmbXIyX3NldHVwX2lvKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDBlNzFkODEuLjk1ZGRjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0zOSwxMCArMzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgkJCS8qIEkyQwkJCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAJLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSJ2MC4wMSIKLSNkZWZpbmUgUkFESU9fVkVSU0lPTglLRVJORUxfVkVSU0lPTigwLCAwLCAxKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4wLjIiCiAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiRmFiaW8gQmVsYXZlbnV0byA8YmVsYXZlbnV0b0BnbWFpbC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQwkiQSBkcml2ZXIgZm9yIHRoZSBURUE1NzY0IHJhZGlvIGNoaXAgZm9yIEVaWCBQaG9uZXMuIgpAQCAtMzAwLDcgKzI5OCw2IEBACiAJc3RybGNweSh2LT5jYXJkLCBkZXYtPm5hbWUsIHNpemVvZih2LT5jYXJkKSk7CiAJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCiAJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KQEAgLTU5NSw4ICs1OTIsOSBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CiAKLW1vZHVsZV9wYXJhbSh1c2VfeHRhbCwgaW50LCAxKTsKK21vZHVsZV9wYXJhbSh1c2VfeHRhbCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModXNlX3h0YWwsICJDaGlwIGhhdmUgYSB4dGFsIGNvbm5lY3RlZCBpbiBib2FyZCIpOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgInZpZGVvNGxpbnV4IGRldmljZSBudW1iZXIgdG8gdXNlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKaW5kZXggYTMyNjYzOS4uZjJlZDljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgpAQCAtMzcsNiArMzYsNyBAQAogTU9EVUxFX0FVVEhPUigiUi5PRkZFUk1BTk5TICYgb3RoZXJzIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gU3RhbmRhbG9uZSByYWRpbyBjYXJkLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMC4zIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQgMHg1OTAKQEAgLTQ5LDggKzQ5LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gY2FyZCAoMHg1OTAgb3IgMHg1OTEpIik7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQotCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CiAJewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCkBAIC0yMDUsNyArMjAzLDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRlcnJhdGVjIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkFjdGl2ZVJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGltYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10aW1iLmMKaW5kZXggYTE4NTYxMC4uZjE3YjU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10aW1iLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10aW1iLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KQEAgLTQ0LDcgKzQzLDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJUaW1iZXJkYWxlIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgInBsYXRmb3JtOiJEUklWRVJfTkFNRSk7Ci0Jdi0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDUsNCArMjQzLDUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBSYWRpbyBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oIjAuMC4yIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiJEUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKaW5kZXggMjJmYTljYy4uYjNmNDVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KQEAgLTI4LDYgKzI3LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMsIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZC4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjAuMyIpOwogCiAvKiBhY2NlcHRhYmxlIHBvcnRzOiAweDM1MCAoSlAzIHNob3J0ZWQpLCAweDM1OCAoSlAzIG9wZW4pICovCiAKQEAgLTQyLDggKzQyLDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQotCiBzdHJ1Y3QgdHJ1c3QgewogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CkBAIC0xOTYsNyArMTk0LDYgQEAKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRydXN0Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlRydXN0IEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKaW5kZXggOGRiYmYwOC4uMzk4NzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKQEAgLTMxLDE1ICszMSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSAgKi8KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cyAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMS4yIgorCiBNT0RVTEVfQVVUSE9SKCJEci4gSGVucmlrIFNlaWRlbCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFR5cGhvb24gcmFkaW8gY2FyZCAoYS5rLmEuIEVjb1JhZGlvKS4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19UWVBIT09OX1BPUlQgLTEKQEAgLTYxLDkgKzYzLDcgQEAKIG1vZHVsZV9wYXJhbShtdXRlZnJlcSwgdWxvbmcsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtdXRlZnJlcSwgIkZyZXF1ZW5jeSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkIChpbiBrSHopIik7CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAxKQotCi0jZGVmaW5lIEJBTk5FUiAiVHlwaG9vbiBSYWRpbyBDYXJkIGRyaXZlciB2MC4xLjFcbiIKKyNkZWZpbmUgQkFOTkVSICJUeXBob29uIFJhZGlvIENhcmQgZHJpdmVyIHYiIERSSVZFUl9WRVJTSU9OICJcbiIKIAogc3RydWN0IHR5cGhvb24gewogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKQEAgLTE3MSw3ICsxNzEsNiBAQAogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tdHlwaG9vbiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJUeXBob29uIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8td2wxMjczLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXdsMTI3My5jCmluZGV4IDQ1OWY3MjcuLjQ2Y2FjZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8td2wxMjczLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby13bDEyNzMuYwpAQCAtMTM4Miw3ICsxMzgyLDcgQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlICBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SOgotCQljdHJsLT5jdXIudmFsID0gd2wxMjczX2ZtX2dldF90eF9jdHVuZShyYWRpbyk7CisJCWN0cmwtPnZhbCA9IHdsMTI3M19mbV9nZXRfdHhfY3R1bmUocmFkaW8pOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCmluZGV4IGFmOTljNWIuLmY1NjEzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5LCBtc2xlZXAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CkBAIC00Myw2ICs0Miw3IEBACiBNT0RVTEVfQVVUSE9SKCJDLnZhbiBTY2hhaWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBab2x0cml4IFJhZGlvIFBsdXMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjMiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19aT0xUUklYX1BPUlQgLTEKQEAgLTU1LDggKzU1LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzICgweDIwYyBvciAweDMwYykiKTsKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCi0KIHN0cnVjdCB6b2x0cml4IHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwpAQCAtMjI4LDcgKzIyNiw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby16b2x0cml4Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlpvbHRyaXggUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwogCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKLQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWkyYy5jCmluZGV4IGEyYTY3NzcuLmZkMzU0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtaTJjLmMKQEAgLTI0LDEwICsyNCw5IEBACiAKIC8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+IjsKLSNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDEpCiAjZGVmaW5lIERSSVZFUl9DQVJEICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiSTJDIHJhZGlvIGRyaXZlciBmb3IgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycyIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC4xIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wLjIiCiAKIC8qIGtlcm5lbCBpbmNsdWRlcyAqLwogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpAQCAtMjQ4LDcgKzI0Nyw2IEBACiB7CiAJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKLQljYXBhYmlsaXR5LT52ZXJzaW9uID0gRFJJVkVSX0tFUk5FTF9WRVJTSU9OOwogCWNhcGFiaWxpdHktPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyB8CiAJCVY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYwppbmRleCAzOTJlODRmLi40Y2Y1MzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCkBAIC0yOSw3ICsyOSw2IEBACiAKIC8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+IgotI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgMTApCiAjZGVmaW5lIERSSVZFUl9DQVJEICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIHJhZGlvIGRyaXZlciBmb3IgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycyIKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC4xMCIKQEAgLTYyNiw3ICs2MjUsNiBAQAogCXN0cmxjcHkoY2FwYWJpbGl0eS0+Y2FyZCwgRFJJVkVSX0NBUkQsIHNpemVvZihjYXBhYmlsaXR5LT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCBjYXBhYmlsaXR5LT5idXNfaW5mbywKIAkJCXNpemVvZihjYXBhYmlsaXR5LT5idXNfaW5mbykpOwotCWNhcGFiaWxpdHktPnZlcnNpb24gPSBEUklWRVJfS0VSTkVMX1ZFUlNJT047CiAJY2FwYWJpbGl0eS0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfSFdfRlJFUV9TRUVLIHwKIAkJVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTyB8IFY0TDJfQ0FQX1JEU19DQVBUVVJFOwogCkBAIC02OTksNyArNjk3LDcgQEAKIAlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoIXJhZGlvLT52aWRlb2RldikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9pbnRidWZmZXI7CisJCWdvdG8gZXJyX3VyYjsKIAl9CiAJbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJnNpNDcweF92aWRkZXZfdGVtcGxhdGUsCiAJCQlzaXplb2Yoc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSkpOwpAQCAtNzkwLDYgKzc4OCw4IEBACiAJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiBlcnJfdmlkZW86CiAJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKK2Vycl91cmI6CisJdXNiX2ZyZWVfdXJiKHJhZGlvLT5pbnRfaW5fdXJiKTsKIGVycl9pbnRidWZmZXI6CiAJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOwogZXJyX3JhZGlvOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LmggYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAppbmRleCA2OGRhMDAxLi5mMzAwYTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHguaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2LmggYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydi5oCmluZGV4IDFhNDVhNWQuLmQ4NGFkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnYuaApAQCAtMjgsMTQgKzI4LDExIEBACiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAKLSNkZWZpbmUgRk1fRFJWX1ZFUlNJT04gICAgICAgICAgICAiMC4xMCIKLS8qIFNob3VsZCBtYXRjaCB3aXRoIEZNX0RSVl9WRVJTSU9OICovCi0jZGVmaW5lIEZNX0RSVl9SQURJT19WRVJTSU9OICAgICAgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKyNkZWZpbmUgRk1fRFJWX1ZFUlNJT04gICAgICAgICAgICAiMC4xLjEiCiAjZGVmaW5lIEZNX0RSVl9OQU1FICAgICAgICAgICAgICAgInRpX2ZtZHJ2IgogI2RlZmluZSBGTV9EUlZfQ0FSRF9TSE9SVF9OQU1FICAgICJUSSBGTSBSYWRpbyIKICNkZWZpbmUgRk1fRFJWX0NBUkRfTE9OR19OQU1FICAgICAiVGV4YXMgSW5zdHJ1bWVudHMgRk0gUmFkaW8iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl92NGwyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl92NGwyLmMKaW5kZXggODcwMTA3Mi4uOGMwZTE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X3Y0bDIuYwpAQCAtMTc1LDcgKzE3NSw2IEBACiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBGTV9EUlZfQ0FSRF9TSE9SVF9OQU1FLAogCQkJc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKIAlzcHJpbnRmKGNhcGFiaWxpdHktPmJ1c19pbmZvLCAiVUFSVCIpOwotCWNhcGFiaWxpdHktPnZlcnNpb24gPSBGTV9EUlZfUkFESU9fVkVSU0lPTjsKIAljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgfCBWNEwyX0NBUF9UVU5FUiB8CiAJCVY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfTU9EVUxBVE9SIHwKIAkJVjRMMl9DQVBfQVVESU8gfCBWNEwyX0NBUF9SRUFEV1JJVEUgfApAQCAtMTkxLDcgKzE5MCw3IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSAgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUjoKLQkJY3RybC0+Y3VyLnZhbCA9IGZtX3R4X2dldF90dW5lX2NhcF92YWwoZm1kZXYpOworCQljdHJsLT52YWwgPSBmbV90eF9nZXRfdHVuZV9jYXBfdmFsKGZtZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZm13YXJuKCIlczogVW5rbm93biBJT0NUTDogJWRcbiIsIF9fZnVuY19fLCBjdHJsLT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JjL0tjb25maWcKaW5kZXggN2Q0YmJjMi4uODk5Zjc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZwpAQCAtODcsNiArODcsMTcgQEAKIAkgICB1c2VzIGFuIElSIHByb3RvY29sIHRoYXQgaXMgYWxtb3N0IHN0YW5kYXJkIFJDLTUsIGJ1dCBub3QgcXVpdGUsCiAJICAgYXMgaXQgdXNlcyBhbiBhZGRpdGlvbmFsIGJpdCkuCiAKK2NvbmZpZyBJUl9NQ0VfS0JEX0RFQ09ERVIKKwl0cmlzdGF0ZSAiRW5hYmxlIElSIHJhdyBkZWNvZGVyIGZvciB0aGUgTUNFIGtleWJvYXJkL21vdXNlIHByb3RvY29sIgorCWRlcGVuZHMgb24gUkNfQ09SRQorCXNlbGVjdCBCSVRSRVZFUlNFCisJZGVmYXVsdCB5CisKKwktLS1oZWxwLS0tCisJICAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWljcm9zb2Z0IFJlbW90ZSBLZXlib2FyZCBmb3IKKwkgICBXaW5kb3dzIE1lZGlhIENlbnRlciBFZGl0aW9uLCB3aGljaCB5b3Ugd291bGQgbGlrZSB0byB1c2Ugd2l0aAorCSAgIGEgcmF3IElSIHJlY2VpdmVyIGluIHlvdXIgc3lzdGVtLgorCiBjb25maWcgSVJfTElSQ19DT0RFQwogCXRyaXN0YXRlICJFbmFibGUgSVIgdG8gTElSQyBicmlkZ2UiCiAJZGVwZW5kcyBvbiBSQ19DT1JFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYy9NYWtlZmlsZQppbmRleCA1MjgzMGU1Li5mMjI0ZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvTWFrZWZpbGUKQEAgLTEwLDYgKzEwLDcgQEAKIG9iai0kKENPTkZJR19JUl9KVkNfREVDT0RFUikgKz0gaXItanZjLWRlY29kZXIubwogb2JqLSQoQ09ORklHX0lSX1NPTllfREVDT0RFUikgKz0gaXItc29ueS1kZWNvZGVyLm8KIG9iai0kKENPTkZJR19JUl9SQzVfU1pfREVDT0RFUikgKz0gaXItcmM1LXN6LWRlY29kZXIubworb2JqLSQoQ09ORklHX0lSX01DRV9LQkRfREVDT0RFUikgKz0gaXItbWNlX2tiZC1kZWNvZGVyLm8KIG9iai0kKENPTkZJR19JUl9MSVJDX0NPREVDKSArPSBpci1saXJjLWNvZGVjLm8KIAogIyBzdGFuZC1hbG9uZSBJUiByZWNlaXZlcnMvdHJhbnNtaXR0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYwppbmRleCBhNDNlZDZjLi4yYjljMjU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5jCkBAIC05NTMsMTMgKzk1MywxMyBAQAogfQogCiAvKiBvdXRzaWRlIGludGVyZmFjZTogdHJhbnNtaXQgKi8KLXN0YXRpYyBpbnQgZW5lX3RyYW5zbWl0KHN0cnVjdCByY19kZXYgKnJkZXYsIGludCAqYnVmLCB1MzIgbikKK3N0YXRpYyBpbnQgZW5lX3RyYW5zbWl0KHN0cnVjdCByY19kZXYgKnJkZXYsIHVuc2lnbmVkICpidWYsIHVuc2lnbmVkIG4pCiB7CiAJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHJkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldi0+dHhfYnVmZmVyID0gYnVmOwotCWRldi0+dHhfbGVuID0gbiAvIHNpemVvZihpbnQpOworCWRldi0+dHhfbGVuID0gbjsKIAlkZXYtPnR4X3BvcyA9IDA7CiAJZGV2LT50eF9yZWcgPSAwOwogCWRldi0+dHhfZG9uZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5oIGIvZHJpdmVycy9tZWRpYS9yYy9lbmVfaXIuaAppbmRleCAzMzdhNDFkLi4wMTdjMjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2VuZV9pci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvZW5lX2lyLmgKQEAgLTIzNSw3ICsyMzUsNyBAQAogCWJvb2wgdHhfc2FtcGxlX3B1bHNlOwkJCS8qIGN1cnJlbnQgc2FtcGxlIGlzIHB1bHNlICovCiAKIAkvKiBUWCBidWZmZXIgKi8KLQlpbnQgKnR4X2J1ZmZlcjsJCQkJLyogaW5wdXQgc2FtcGxlcyBidWZmZXIqLworCXVuc2lnbmVkICp0eF9idWZmZXI7CQkJLyogaW5wdXQgc2FtcGxlcyBidWZmZXIqLwogCWludCB0eF9wb3M7CQkJCS8qIHBvc2l0aW9uIGluIHRoYXQgYnVmZXIgKi8KIAlpbnQgdHhfbGVuOwkJCQkvKiBjdXJyZW50IGxlbiBvZiB0eCBidWZmZXIgKi8KIAlpbnQgdHhfZG9uZTsJCQkJLyogZG9uZSB0cmFuc21pdHRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKaW5kZXggMWM1Y2M2NS4uZTVlZWVjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKQEAgLTEwMywxOSArMTAzLDE5IEBACiB7CiAJc3RydWN0IGxpcmNfY29kZWMgKmxpcmM7CiAJc3RydWN0IHJjX2RldiAqZGV2OwotCWludCAqdHhidWY7IC8qIGJ1ZmZlciB3aXRoIHZhbHVlcyB0byB0cmFuc21pdCAqLwotCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCAqdHhidWY7IC8qIGJ1ZmZlciB3aXRoIHZhbHVlcyB0byB0cmFuc21pdCAqLworCXNzaXplX3QgcmV0ID0gMDsKIAlzaXplX3QgY291bnQ7CiAKIAlsaXJjID0gbGlyY19nZXRfcGRhdGEoZmlsZSk7CiAJaWYgKCFsaXJjKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChuICUgc2l6ZW9mKGludCkpCisJaWYgKG4gPCBzaXplb2YodW5zaWduZWQpIHx8IG4gJSBzaXplb2YodW5zaWduZWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNvdW50ID0gbiAvIHNpemVvZihpbnQpOwotCWlmIChjb3VudCA+IExJUkNCVUZfU0laRSB8fCBjb3VudCAlIDIgPT0gMCB8fCBuICUgc2l6ZW9mKGludCkgIT0gMCkKKwljb3VudCA9IG4gLyBzaXplb2YodW5zaWduZWQpOworCWlmIChjb3VudCA+IExJUkNCVUZfU0laRSB8fCBjb3VudCAlIDIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl0eGJ1ZiA9IG1lbWR1cF91c2VyKGJ1Ziwgbik7CkBAIC0xMjksNyArMTI5LDEwIEBACiAJfQogCiAJaWYgKGRldi0+dHhfaXIpCi0JCXJldCA9IGRldi0+dHhfaXIoZGV2LCB0eGJ1ZiwgKHUzMiluKTsKKwkJcmV0ID0gZGV2LT50eF9pcihkZXYsIHR4YnVmLCBjb3VudCk7CisKKwlpZiAocmV0ID4gMCkKKwkJcmV0ICo9IHNpemVvZih1bnNpZ25lZCk7CiAKIG91dDoKIAlrZnJlZSh0eGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLW1jZV9rYmQtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1tY2Vfa2JkLWRlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg0ZWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1tY2Vfa2JkLWRlY29kZXIuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyogaXItbWNlX2tiZC1kZWNvZGVyLmMgLSBBIGRlY29kZXIgZm9yIHRoZSBSQzYtaXNoIGtleWJvYXJkL21vdXNlIElSIHByb3RvY29sCisgKiB1c2VkIGJ5IHRoZSBNaWNyb3NvZnQgUmVtb3RlIEtleWJvYXJkIGZvciBXaW5kb3dzIE1lZGlhIENlbnRlciBFZGl0aW9uLAorICogcmVmZXJyZWQgdG8gYnkgTWljcm9zb2Z0J3MgV2luZG93cyBNZWRpYSBDZW50ZXIgcmVtb3RlIHNwZWNpZmljYXRpb24gZG9jcworICogYXMgImFuIGludGVybmFsIHByb3RvY29sIGNhbGxlZCBNQ0lSLTIiLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJyYy1jb3JlLXByaXYuaCIKKworLyoKKyAqIFRoaXMgZGVjb2RlciBjdXJyZW50bHkgc3VwcG9ydHM6CisgKiAtIE1DSVItMiAyOS1iaXQgSVIgc2lnbmFscyB1c2VkIGZvciBtb3VzZSBtb3ZlbWVudCBhbmQgYnV0dG9ucworICogLSBNQ0lSLTIgMzItYml0IElSIHNpZ25hbHMgdXNlZCBmb3Igc3RhbmRhcmQga2V5Ym9hcmQga2V5cworICoKKyAqIFRoZSBtZWRpYSBrZXlzIG9uIHRoZSBrZXlib2FyZCBzZW5kIFJDLTYgc2lnbmFscyB0aGF0IGFyZSBpbmRpdGluZ3Vpc2hhYmxlCisgKiBmcm9tIHRoZSBrZXlzIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHN0b2NrIE1DRSByZW1vdGUsIGFuZCB3aWxsIGJlIGhhbmRsZWQKKyAqIGJ5IHRoZSBzdGFuZGFyZCBSQy02IGRlY29kZXIsIGFuZCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtIHZpYSB0aGUKKyAqIGlucHV0IGRldmljZSBmb3IgdGhlIHJlbW90ZSwgcmF0aGVyIHRoYW4gdGhlIGtleWJvYXJkL21vdXNlIG9uZS4KKyAqLworCisjZGVmaW5lIE1DSVIyX1VOSVQJCTMzMzMzMwkvKiBucyAqLworI2RlZmluZSBNQ0lSMl9IRUFERVJfTkJJVFMJNQorI2RlZmluZSBNQ0lSMl9NT1VTRV9OQklUUwkyOQorI2RlZmluZSBNQ0lSMl9LRVlCT0FSRF9OQklUUwkzMgorI2RlZmluZSBNQ0lSMl9QUkVGSVhfUFVMU0UJKDggKiBNQ0lSMl9VTklUKQorI2RlZmluZSBNQ0lSMl9QUkVGSVhfU1BBQ0UJKDEgKiBNQ0lSMl9VTklUKQorI2RlZmluZSBNQ0lSMl9NQVhfTEVOCQkoMyAqIE1DSVIyX1VOSVQpCisjZGVmaW5lIE1DSVIyX0JJVF9TVEFSVAkJKDEgKiBNQ0lSMl9VTklUKQorI2RlZmluZSBNQ0lSMl9CSVRfRU5ECQkoMSAqIE1DSVIyX1VOSVQpCisjZGVmaW5lIE1DSVIyX0JJVF8wCQkoMSAqIE1DSVIyX1VOSVQpCisjZGVmaW5lIE1DSVIyX0JJVF9TRVQJCSgyICogTUNJUjJfVU5JVCkKKyNkZWZpbmUgTUNJUjJfTU9ERV9NQVNLCQkweGYJLyogZm9yIHRoZSBoZWFkZXIgYml0cyAqLworI2RlZmluZSBNQ0lSMl9LRVlCT0FSRF9IRUFERVIJMHg0CisjZGVmaW5lIE1DSVIyX01PVVNFX0hFQURFUgkweDEKKyNkZWZpbmUgTUNJUjJfTUFTS19LRVlTX1NUQVJUCTB4ZTAKKworZW51bSBtY2Vfa2JkX21vZGUgeworCU1DSVIyX01PREVfS0VZQk9BUkQsCisJTUNJUjJfTU9ERV9NT1VTRSwKKwlNQ0lSMl9NT0RFX1VOS05PV04sCit9OworCitlbnVtIG1jZV9rYmRfc3RhdGUgeworCVNUQVRFX0lOQUNUSVZFLAorCVNUQVRFX0hFQURFUl9CSVRfU1RBUlQsCisJU1RBVEVfSEVBREVSX0JJVF9FTkQsCisJU1RBVEVfQk9EWV9CSVRfU1RBUlQsCisJU1RBVEVfQk9EWV9CSVRfRU5ELAorCVNUQVRFX0ZJTklTSEVELAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIga2JkX2tleWNvZGVzWzI1Nl0gPSB7CisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfQSwKKwlLRVlfQiwJCUtFWV9DLAkJS0VZX0QsCQlLRVlfRSwJCUtFWV9GLAorCUtFWV9HLAkJS0VZX0gsCQlLRVlfSSwJCUtFWV9KLAkJS0VZX0ssCisJS0VZX0wsCQlLRVlfTSwJCUtFWV9OLAkJS0VZX08sCQlLRVlfUCwKKwlLRVlfUSwJCUtFWV9SLAkJS0VZX1MsCQlLRVlfVCwJCUtFWV9VLAorCUtFWV9WLAkJS0VZX1csCQlLRVlfWCwJCUtFWV9ZLAkJS0VZX1osCisJS0VZXzEsCQlLRVlfMiwJCUtFWV8zLAkJS0VZXzQsCQlLRVlfNSwKKwlLRVlfNiwJCUtFWV83LAkJS0VZXzgsCQlLRVlfOSwJCUtFWV8wLAorCUtFWV9FTlRFUiwJS0VZX0VTQywJS0VZX0JBQ0tTUEFDRSwJS0VZX1RBQiwJS0VZX1NQQUNFLAorCUtFWV9NSU5VUywJS0VZX0VRVUFMLAlLRVlfTEVGVEJSQUNFLAlLRVlfUklHSFRCUkFDRSwJS0VZX0JBQ0tTTEFTSCwKKwlLRVlfUkVTRVJWRUQsCUtFWV9TRU1JQ09MT04sCUtFWV9BUE9TVFJPUEhFLAlLRVlfR1JBVkUsCUtFWV9DT01NQSwKKwlLRVlfRE9ULAlLRVlfU0xBU0gsCUtFWV9DQVBTTE9DSywJS0VZX0YxLAkJS0VZX0YyLAorCUtFWV9GMywJCUtFWV9GNCwJCUtFWV9GNSwJCUtFWV9GNiwJCUtFWV9GNywKKwlLRVlfRjgsCQlLRVlfRjksCQlLRVlfRjEwLAlLRVlfRjExLAlLRVlfRjEyLAorCUtFWV9TWVNSUSwJS0VZX1NDUk9MTExPQ0ssCUtFWV9QQVVTRSwJS0VZX0lOU0VSVCwJS0VZX0hPTUUsCisJS0VZX1BBR0VVUCwJS0VZX0RFTEVURSwJS0VZX0VORCwJS0VZX1BBR0VET1dOLAlLRVlfUklHSFQsCisJS0VZX0xFRlQsCUtFWV9ET1dOLAlLRVlfVVAsCQlLRVlfTlVNTE9DSywJS0VZX0tQU0xBU0gsCisJS0VZX0tQQVNURVJJU0ssCUtFWV9LUE1JTlVTLAlLRVlfS1BQTFVTLAlLRVlfS1BFTlRFUiwJS0VZX0tQMSwKKwlLRVlfS1AyLAlLRVlfS1AzLAlLRVlfS1A0LAlLRVlfS1A1LAlLRVlfS1A2LAorCUtFWV9LUDcsCUtFWV9LUDgsCUtFWV9LUDksCUtFWV9LUDAsCUtFWV9LUERPVCwKKwlLRVlfMTAyTkQsCUtFWV9DT01QT1NFLAlLRVlfUE9XRVIsCUtFWV9LUEVRVUFMLAlLRVlfRjEzLAorCUtFWV9GMTQsCUtFWV9GMTUsCUtFWV9GMTYsCUtFWV9GMTcsCUtFWV9GMTgsCisJS0VZX0YxOSwJS0VZX0YyMCwJS0VZX0YyMSwJS0VZX0YyMiwJS0VZX0YyMywKKwlLRVlfRjI0LAlLRVlfT1BFTiwJS0VZX0hFTFAsCUtFWV9QUk9QUywJS0VZX0ZST05ULAorCUtFWV9TVE9QLAlLRVlfQUdBSU4sCUtFWV9VTkRPLAlLRVlfQ1VULAlLRVlfQ09QWSwKKwlLRVlfUEFTVEUsCUtFWV9GSU5ELAlLRVlfTVVURSwJS0VZX1ZPTFVNRVVQLAlLRVlfVk9MVU1FRE9XTiwKKwlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfS1BDT01NQSwJS0VZX1JFU0VSVkVELAorCUtFWV9STywJCUtFWV9LQVRBS0FOQUhJUkFHQU5BLCBLRVlfWUVOLAlLRVlfSEVOS0FOLAlLRVlfTVVIRU5LQU4sCisJS0VZX0tQSlBDT01NQSwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX0hBTkdVRUwsCisJS0VZX0hBTkpBLAlLRVlfS0FUQUtBTkEsCUtFWV9ISVJBR0FOQSwJS0VZX1pFTktBS1VIQU5LQUtVLCBLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCisJS0VZX1JFU0VSVkVELAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAlLRVlfTEVGVENUUkwsCisJS0VZX0xFRlRTSElGVCwJS0VZX0xFRlRBTFQsCUtFWV9MRUZUTUVUQSwJS0VZX1JJR0hUQ1RSTCwJS0VZX1JJR0hUU0hJRlQsCisJS0VZX1JJR0hUQUxULAlLRVlfUklHSFRNRVRBLAlLRVlfUExBWVBBVVNFLAlLRVlfU1RPUENELAlLRVlfUFJFVklPVVNTT05HLAorCUtFWV9ORVhUU09ORywJS0VZX0VKRUNUQ0QsCUtFWV9WT0xVTUVVUCwJS0VZX1ZPTFVNRURPV04sCUtFWV9NVVRFLAorCUtFWV9XV1csCUtFWV9CQUNLLAlLRVlfRk9SV0FSRCwJS0VZX1NUT1AsCUtFWV9GSU5ELAorCUtFWV9TQ1JPTExVUCwJS0VZX1NDUk9MTERPV04sCUtFWV9FRElULAlLRVlfU0xFRVAsCUtFWV9DT0ZGRUUsCisJS0VZX1JFRlJFU0gsCUtFWV9DQUxDLAlLRVlfUkVTRVJWRUQsCUtFWV9SRVNFUlZFRCwJS0VZX1JFU0VSVkVELAorCUtFWV9SRVNFUlZFRAorfTsKKworc3RhdGljIHZvaWQgbWNlX2tiZF9yeF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbWNlX2tiZF9kZWMgKm1jZV9rYmQgPSAoc3RydWN0IG1jZV9rYmRfZGVjICopZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG1hc2tjb2RlOworCisJSVJfZHByaW50aygyLCAidGltZXIgY2FsbGJhY2sgY2xlYXJpbmcgYWxsIGtleXNcbiIpOworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQltYXNrY29kZSA9IGtiZF9rZXljb2Rlc1tNQ0lSMl9NQVNLX0tFWVNfU1RBUlQgKyBpXTsKKwkJaW5wdXRfcmVwb3J0X2tleShtY2Vfa2JkLT5pZGV2LCBtYXNrY29kZSwgMCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1DSVIyX01BU0tfS0VZU19TVEFSVDsgaSsrKQorCQlpbnB1dF9yZXBvcnRfa2V5KG1jZV9rYmQtPmlkZXYsIGtiZF9rZXljb2Rlc1tpXSwgMCk7Cit9CisKK3N0YXRpYyBlbnVtIG1jZV9rYmRfbW9kZSBtY2Vfa2JkX21vZGUoc3RydWN0IG1jZV9rYmRfZGVjICpkYXRhKQoreworCXN3aXRjaCAoZGF0YS0+aGVhZGVyICYgTUNJUjJfTU9ERV9NQVNLKSB7CisJY2FzZSBNQ0lSMl9LRVlCT0FSRF9IRUFERVI6CisJCXJldHVybiBNQ0lSMl9NT0RFX0tFWUJPQVJEOworCWNhc2UgTUNJUjJfTU9VU0VfSEVBREVSOgorCQlyZXR1cm4gTUNJUjJfTU9ERV9NT1VTRTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTUNJUjJfTU9ERV9VTktOT1dOOworCX0KK30KKworc3RhdGljIHZvaWQgaXJfbWNlX2tiZF9wcm9jZXNzX2tleWJvYXJkX2RhdGEoc3RydWN0IGlucHV0X2RldiAqaWRldiwKKwkJCQkJICAgICB1MzIgc2NhbmNvZGUpCit7CisJdTgga2V5ZGF0YSAgID0gKHNjYW5jb2RlID4+IDgpICYgMHhmZjsKKwl1OCBzaGlmdG1hc2sgPSBzY2FuY29kZSAmIDB4ZmY7CisJdW5zaWduZWQgY2hhciBrZXljb2RlLCBtYXNrY29kZTsKKwlpbnQgaSwga2V5c3RhdGU7CisKKwlJUl9kcHJpbnRrKDEsICJrZXlib2FyZDoga2V5ZGF0YSA9IDB4JTAyeCwgc2hpZnRtYXNrID0gMHglMDJ4XG4iLAorCQkgICBrZXlkYXRhLCBzaGlmdG1hc2spOworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQltYXNrY29kZSA9IGtiZF9rZXljb2Rlc1tNQ0lSMl9NQVNLX0tFWVNfU1RBUlQgKyBpXTsKKwkJaWYgKHNoaWZ0bWFzayAmICgxIDw8IGkpKQorCQkJa2V5c3RhdGUgPSAxOworCQllbHNlCisJCQlrZXlzdGF0ZSA9IDA7CisJCWlucHV0X3JlcG9ydF9rZXkoaWRldiwgbWFza2NvZGUsIGtleXN0YXRlKTsKKwl9CisKKwlpZiAoa2V5ZGF0YSkgeworCQlrZXljb2RlID0ga2JkX2tleWNvZGVzW2tleWRhdGFdOworCQlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIGtleWNvZGUsIDEpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQ0lSMl9NQVNLX0tFWVNfU1RBUlQ7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoaWRldiwga2JkX2tleWNvZGVzW2ldLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlyX21jZV9rYmRfcHJvY2Vzc19tb3VzZV9kYXRhKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHUzMiBzY2FuY29kZSkKK3sKKwkvKiByYXcgbW91c2UgY29vcmRpbmF0ZXMgKi8KKwl1OCB4ZGF0YSA9IChzY2FuY29kZSA+PiA3KSAmIDB4N2Y7CisJdTggeWRhdGEgPSAoc2NhbmNvZGUgPj4gMTQpICYgMHg3ZjsKKwlpbnQgeCwgeTsKKwkvKiBtb3VzZSBidXR0b25zICovCisJYm9vbCByaWdodCA9IHNjYW5jb2RlICYgMHg0MDsKKwlib29sIGxlZnQgID0gc2NhbmNvZGUgJiAweDIwOworCisJaWYgKHhkYXRhICYgMHg0MCkKKwkJeCA9IC0oKH54ZGF0YSAmIDB4N2YpICsgMSk7CisJZWxzZQorCQl4ID0geGRhdGE7CisKKwlpZiAoeWRhdGEgJiAweDQwKQorCQl5ID0gLSgofnlkYXRhICYgMHg3ZikgKyAxKTsKKwllbHNlCisJCXkgPSB5ZGF0YTsKKworCUlSX2RwcmludGsoMSwgIm1vdXNlOiB4ID0gJWQsIHkgPSAlZCwgYnRucyA9ICVzJXNcbiIsCisJCSAgIHgsIHksIGxlZnQgPyAiTCIgOiAiIiwgcmlnaHQgPyAiUiIgOiAiIik7CisKKwlpbnB1dF9yZXBvcnRfcmVsKGlkZXYsIFJFTF9YLCB4KTsKKwlpbnB1dF9yZXBvcnRfcmVsKGlkZXYsIFJFTF9ZLCB5KTsKKworCWlucHV0X3JlcG9ydF9rZXkoaWRldiwgQlROX0xFRlQsIGxlZnQpOworCWlucHV0X3JlcG9ydF9rZXkoaWRldiwgQlROX1JJR0hULCByaWdodCk7Cit9CisKKy8qKgorICogaXJfbWNlX2tiZF9kZWNvZGUoKSAtIERlY29kZSBvbmUgbWNlX2tiZCBwdWxzZSBvciBzcGFjZQorICogQGRldjoJdGhlIHN0cnVjdCByY19kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKiBAZXY6CQl0aGUgc3RydWN0IGlyX3Jhd19ldmVudCBkZXNjcmlwdG9yIG9mIHRoZSBwdWxzZS9zcGFjZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwdWxzZSB2aW9sYXRlcyB0aGUgc3RhdGUgbWFjaGluZQorICovCitzdGF0aWMgaW50IGlyX21jZV9rYmRfZGVjb2RlKHN0cnVjdCByY19kZXYgKmRldiwgc3RydWN0IGlyX3Jhd19ldmVudCBldikKK3sKKwlzdHJ1Y3QgbWNlX2tiZF9kZWMgKmRhdGEgPSAmZGV2LT5yYXctPm1jZV9rYmQ7CisJdTMyIHNjYW5jb2RlOworCXVuc2lnbmVkIGxvbmcgZGVsYXk7CisKKwlpZiAoIShkZXYtPnJhdy0+ZW5hYmxlZF9wcm90b2NvbHMgJiBSQ19UWVBFX01DRV9LQkQpKQorCQlyZXR1cm4gMDsKKworCWlmICghaXNfdGltaW5nX2V2ZW50KGV2KSkgeworCQlpZiAoZXYucmVzZXQpCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWdlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE1DSVIyX1VOSVQsIE1DSVIyX1VOSVQgLyAyKSkKKwkJZ290byBvdXQ7CisKK2FnYWluOgorCUlSX2RwcmludGsoMiwgInN0YXJ0ZWQgYXQgc3RhdGUgJWkgKCV1dXMgJXMpXG4iLAorCQkgICBkYXRhLT5zdGF0ZSwgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKKworCWlmICghZ2VxX21hcmdpbihldi5kdXJhdGlvbiwgTUNJUjJfVU5JVCwgTUNJUjJfVU5JVCAvIDIpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGF0YS0+c3RhdGUpIHsKKworCWNhc2UgU1RBVEVfSU5BQ1RJVkU6CisJCWlmICghZXYucHVsc2UpCisJCQlicmVhazsKKworCQkvKiBOb3RlOiBsYXJnZXIgbWFyZ2luIG9uIGZpcnN0IHB1bHNlIHNpbmNlIGVhY2ggTUNJUjJfVU5JVAorCQkgICBpcyBxdWl0ZSBzaG9ydCBhbmQgc29tZSBoYXJkd2FyZSB0YWtlcyBzb21lIHRpbWUgdG8KKwkJICAgYWRqdXN0IHRvIHRoZSBzaWduYWwgKi8KKwkJaWYgKCFlcV9tYXJnaW4oZXYuZHVyYXRpb24sIE1DSVIyX1BSRUZJWF9QVUxTRSwgTUNJUjJfVU5JVCkpCisJCQlicmVhazsKKworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9CSVRfU1RBUlQ7CisJCWRhdGEtPmNvdW50ID0gMDsKKwkJZGF0YS0+aGVhZGVyID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNUQVRFX0hFQURFUl9CSVRfU1RBUlQ6CisJCWlmIChnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBNQ0lSMl9NQVhfTEVOLCBNQ0lSMl9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5oZWFkZXIgPDw9IDE7CisJCWlmIChldi5wdWxzZSkKKwkJCWRhdGEtPmhlYWRlciB8PSAxOworCQlkYXRhLT5jb3VudCsrOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0hFQURFUl9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfSEVBREVSX0JJVF9FTkQ6CisJCWlmICghaXNfdHJhbnNpdGlvbigmZXYsICZkZXYtPnJhdy0+cHJldl9ldikpCisJCQlicmVhazsKKworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIE1DSVIyX0JJVF9FTkQpOworCisJCWlmIChkYXRhLT5jb3VudCAhPSBNQ0lSMl9IRUFERVJfTkJJVFMpIHsKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfSEVBREVSX0JJVF9TVEFSVDsKKwkJCWdvdG8gYWdhaW47CisJCX0KKworCQlzd2l0Y2ggKG1jZV9rYmRfbW9kZShkYXRhKSkgeworCQljYXNlIE1DSVIyX01PREVfS0VZQk9BUkQ6CisJCQlkYXRhLT53YW50ZWRfYml0cyA9IE1DSVIyX0tFWUJPQVJEX05CSVRTOworCQkJYnJlYWs7CisJCWNhc2UgTUNJUjJfTU9ERV9NT1VTRToKKwkJCWRhdGEtPndhbnRlZF9iaXRzID0gTUNJUjJfTU9VU0VfTkJJVFM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUlSX2RwcmludGsoMSwgIm5vdCBrZXlib2FyZCBvciBtb3VzZSBkYXRhXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZGF0YS0+Y291bnQgPSAwOworCQlkYXRhLT5ib2R5ID0gMDsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9CT0RZX0JJVF9TVEFSVDsKKwkJZ290byBhZ2FpbjsKKworCWNhc2UgU1RBVEVfQk9EWV9CSVRfU1RBUlQ6CisJCWlmIChnZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBNQ0lSMl9NQVhfTEVOLCBNQ0lSMl9VTklUIC8gMikpCisJCQlicmVhazsKKworCQlkYXRhLT5ib2R5IDw8PSAxOworCQlpZiAoZXYucHVsc2UpCisJCQlkYXRhLT5ib2R5IHw9IDE7CisJCWRhdGEtPmNvdW50Kys7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfQk9EWV9CSVRfRU5EOworCQlyZXR1cm4gMDsKKworCWNhc2UgU1RBVEVfQk9EWV9CSVRfRU5EOgorCQlpZiAoIWlzX3RyYW5zaXRpb24oJmV2LCAmZGV2LT5yYXctPnByZXZfZXYpKQorCQkJYnJlYWs7CisKKwkJaWYgKGRhdGEtPmNvdW50ID09IGRhdGEtPndhbnRlZF9iaXRzKQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9GSU5JU0hFRDsKKwkJZWxzZQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CT0RZX0JJVF9TVEFSVDsKKworCQlkZWNyZWFzZV9kdXJhdGlvbigmZXYsIE1DSVIyX0JJVF9FTkQpOworCQlnb3RvIGFnYWluOworCisJY2FzZSBTVEFURV9GSU5JU0hFRDoKKwkJaWYgKGV2LnB1bHNlKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChkYXRhLT53YW50ZWRfYml0cykgeworCQljYXNlIE1DSVIyX0tFWUJPQVJEX05CSVRTOgorCQkJc2NhbmNvZGUgPSBkYXRhLT5ib2R5ICYgMHhmZmZmOworCQkJSVJfZHByaW50aygxLCAia2V5Ym9hcmQgZGF0YSAweCUwOHhcbiIsIGRhdGEtPmJvZHkpOworCQkJaWYgKGRldi0+dGltZW91dCkKKwkJCQlkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGV2LT50aW1lb3V0IC8gMTAwMCk7CisJCQllbHNlCisJCQkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDEwMCk7CisJCQltb2RfdGltZXIoJmRhdGEtPnJ4X3RpbWVvdXQsIGppZmZpZXMgKyBkZWxheSk7CisJCQkvKiBQYXNzIGRhdGEgdG8ga2V5Ym9hcmQgYnVmZmVyIHBhcnNlciAqLworCQkJaXJfbWNlX2tiZF9wcm9jZXNzX2tleWJvYXJkX2RhdGEoZGF0YS0+aWRldiwgc2NhbmNvZGUpOworCQkJYnJlYWs7CisJCWNhc2UgTUNJUjJfTU9VU0VfTkJJVFM6CisJCQlzY2FuY29kZSA9IGRhdGEtPmJvZHkgJiAweDFmZmZmZjsKKwkJCUlSX2RwcmludGsoMSwgIm1vdXNlIGRhdGEgMHglMDZ4XG4iLCBzY2FuY29kZSk7CisJCQkvKiBQYXNzIGRhdGEgdG8gbW91c2UgYnVmZmVyIHBhcnNlciAqLworCQkJaXJfbWNlX2tiZF9wcm9jZXNzX21vdXNlX2RhdGEoZGF0YS0+aWRldiwgc2NhbmNvZGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlJUl9kcHJpbnRrKDEsICJub3Qga2V5Ym9hcmQgb3IgbW91c2UgZGF0YVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJCWlucHV0X3N5bmMoZGF0YS0+aWRldik7CisJCXJldHVybiAwOworCX0KKworb3V0OgorCUlSX2RwcmludGsoMSwgImZhaWxlZCBhdCBzdGF0ZSAlaSAoJXV1cyAlcylcbiIsCisJCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOworCWRhdGEtPnN0YXRlID0gU1RBVEVfSU5BQ1RJVkU7CisJaW5wdXRfc3luYyhkYXRhLT5pZGV2KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBpcl9tY2Vfa2JkX3JlZ2lzdGVyKHN0cnVjdCByY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWNlX2tiZF9kZWMgKm1jZV9rYmQgPSAmZGV2LT5yYXctPm1jZV9rYmQ7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwlpbnQgaSwgcmV0OworCisJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbnByaW50ZihtY2Vfa2JkLT5uYW1lLCBzaXplb2YobWNlX2tiZC0+bmFtZSksCisJCSAiTUNFIElSIEtleWJvYXJkL01vdXNlICglcykiLCBkZXYtPmRyaXZlcl9uYW1lKTsKKwlzdHJsY2F0KG1jZV9rYmQtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKG1jZV9rYmQtPnBoeXMpKTsKKworCWlkZXYtPm5hbWUgPSBtY2Vfa2JkLT5uYW1lOworCWlkZXYtPnBoeXMgPSBtY2Vfa2JkLT5waHlzOworCisJLyogS2V5Ym9hcmQgYml0cyAqLworCXNldF9iaXQoRVZfS0VZLCBpZGV2LT5ldmJpdCk7CisJc2V0X2JpdChFVl9SRVAsIGlkZXYtPmV2Yml0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGtiZF9rZXljb2Rlcyk7IGkrKykKKwkJc2V0X2JpdChrYmRfa2V5Y29kZXNbaV0sIGlkZXYtPmtleWJpdCk7CisKKwkvKiBNb3VzZSBiaXRzICovCisJc2V0X2JpdChFVl9SRUwsIGlkZXYtPmV2Yml0KTsKKwlzZXRfYml0KFJFTF9YLCBpZGV2LT5yZWxiaXQpOworCXNldF9iaXQoUkVMX1ksIGlkZXYtPnJlbGJpdCk7CisJc2V0X2JpdChCVE5fTEVGVCwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEJUTl9SSUdIVCwgaWRldi0+a2V5Yml0KTsKKworCS8qIFJlcG9ydCBzY2FuY29kZXMgdG9vICovCisJc2V0X2JpdChFVl9NU0MsIGlkZXYtPmV2Yml0KTsKKwlzZXRfYml0KE1TQ19TQ0FOLCBpZGV2LT5tc2NiaXQpOworCisJc2V0dXBfdGltZXIoJm1jZV9rYmQtPnJ4X3RpbWVvdXQsIG1jZV9rYmRfcnhfdGltZW91dCwKKwkJICAgICh1bnNpZ25lZCBsb25nKW1jZV9rYmQpOworCisJaW5wdXRfc2V0X2RydmRhdGEoaWRldiwgbWNlX2tiZCk7CisKKyNpZiAwCisJLyogQWRkaW5nIHRoaXMgcmVmZXJlbmNlIG1lYW5zIHR3byBpbnB1dCBkZXZpY2VzIGFyZSBhc3NvY2lhdGVkIHdpdGgKKwkgKiB0aGlzIHJjLWNvcmUgZGV2aWNlLCB3aGljaCBpci1rZXl0YWJsZSBkb2Vzbid0IGNvcGUgd2l0aCB5ZXQgKi8KKwlpZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworI2VuZGlmCisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CisJaWYgKHJldCA8IDApIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CisJCXJldHVybiAtRUlPOworCX0KKworCW1jZV9rYmQtPmlkZXYgPSBpZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXJfbWNlX2tiZF91bnJlZ2lzdGVyKHN0cnVjdCByY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWNlX2tiZF9kZWMgKm1jZV9rYmQgPSAmZGV2LT5yYXctPm1jZV9rYmQ7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IG1jZV9rYmQtPmlkZXY7CisKKwlkZWxfdGltZXJfc3luYygmbWNlX2tiZC0+cnhfdGltZW91dCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaWRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcl9yYXdfaGFuZGxlciBtY2Vfa2JkX2hhbmRsZXIgPSB7CisJLnByb3RvY29scwk9IFJDX1RZUEVfTUNFX0tCRCwKKwkuZGVjb2RlCQk9IGlyX21jZV9rYmRfZGVjb2RlLAorCS5yYXdfcmVnaXN0ZXIJPSBpcl9tY2Vfa2JkX3JlZ2lzdGVyLAorCS5yYXdfdW5yZWdpc3Rlcgk9IGlyX21jZV9rYmRfdW5yZWdpc3RlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlyX21jZV9rYmRfZGVjb2RlX2luaXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl9yZWdpc3RlcigmbWNlX2tiZF9oYW5kbGVyKTsKKworCXByaW50ayhLRVJOX0lORk8gIklSIE1DRSBLZXlib2FyZC9tb3VzZSBwcm90b2NvbCBoYW5kbGVyIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlyX21jZV9rYmRfZGVjb2RlX2V4aXQodm9pZCkKK3sKKwlpcl9yYXdfaGFuZGxlcl91bnJlZ2lzdGVyKCZtY2Vfa2JkX2hhbmRsZXIpOworfQorCittb2R1bGVfaW5pdChpcl9tY2Vfa2JkX2RlY29kZV9pbml0KTsKK21vZHVsZV9leGl0KGlyX21jZV9rYmRfZGVjb2RlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1DRSBLZXlib2FyZC9tb3VzZSBJUiBwcm90b2NvbCBkZWNvZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2lyLXJhdy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1yYXcuYwppbmRleCA0MjNlZDQ1Li4yNzgwOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2lyLXJhdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXItcmF3LmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCWxvYWRfcmM2X2RlY29kZSgpOwogCWxvYWRfanZjX2RlY29kZSgpOwogCWxvYWRfc29ueV9kZWNvZGUoKTsKKwlsb2FkX21jZV9rYmRfZGVjb2RlKCk7CiAJbG9hZF9saXJjX2NvZGVjKCk7CiAKIAkvKiBJZiBuZWVkZWQsIHdlIG1heSBsYXRlciBhZGQgc29tZSBpbml0IGNvZGUuIEluIHRoaXMgY2FzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKaW5kZXggZDIwMTY4Zi4uNjgyMDA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKQEAgLTM4Miw3ICszODIsNyBAQAogLyogdHJhbnNtaXQgb3V0IElSIHB1bHNlczsgd2hhdCB5b3UgZ2V0IGhlcmUgaXMgYSBiYXRjaCBvZiBhbHRlcm5hdGluZwogICogcHVsc2Uvc3BhY2UvcHVsc2Uvc3BhY2UgbGVuZ3RocyB0aGF0IHdlIHNob3VsZCB3cml0ZSBvdXQgY29tcGxldGVseSB0aHJvdWdoCiAgKiB0aGUgRklGTywgYmxvY2tpbmcgb24gYSBmdWxsIEZJRk8gKi8KLXN0YXRpYyBpbnQgaXRlX3R4X2lyKHN0cnVjdCByY19kZXYgKnJjZGV2LCBpbnQgKnR4YnVmLCB1MzIgbikKK3N0YXRpYyBpbnQgaXRlX3R4X2lyKHN0cnVjdCByY19kZXYgKnJjZGV2LCB1bnNpZ25lZCAqdHhidWYsIHVuc2lnbmVkIG4pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXRlX2RldiAqZGV2ID0gcmNkZXYtPnByaXY7CkBAIC0zOTgsOSArMzk4LDYgQEAKIAkvKiBjbGVhciB0aGUgYXJyYXkganVzdCBpbiBjYXNlICovCiAJbWVtc2V0KGxhc3Rfc2VudCwgMCwgQVJSQVlfU0laRShsYXN0X3NlbnQpKTsKIAotCS8qIG4gY29tZXMgaW4gYnl0ZXM7IGNvbnZlcnQgdG8gaW50cyAqLwotCW4gLz0gc2l6ZW9mKGludCk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBsZXQgZXZlcnlib2R5IGtub3cgd2UncmUgbm93IHRyYW5zbWl0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKaW5kZXggMDFiNjliYy4uYzM5MDdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIAl7IDB4ODAwZjA0MGEsIEtFWV9ERUxFVEUgfSwKIAl7IDB4ODAwZjA0MGIsIEtFWV9FTlRFUiB9LAotCXsgMHg4MDBmMDQwYywgS0VZX1BPV0VSIH0sCQkvKiBQQyBQb3dlciAqLworCXsgMHg4MDBmMDQwYywgS0VZX1NMRUVQIH0sCQkvKiBGb3JtZXJseSBQQyBQb3dlciAqLwogCXsgMHg4MDBmMDQwZCwgS0VZX01FRElBIH0sCQkvKiBXaW5kb3dzIE1DRSBidXR0b24gKi8KIAl7IDB4ODAwZjA0MGUsIEtFWV9NVVRFIH0sCiAJeyAweDgwMGYwNDBmLCBLRVlfSU5GTyB9LApAQCAtNDQsNyArNDQsNiBAQAogCXsgMHg4MDBmMDQxNiwgS0VZX1BMQVkgfSwKIAl7IDB4ODAwZjA0MTcsIEtFWV9SRUNPUkQgfSwKIAl7IDB4ODAwZjA0MTgsIEtFWV9QQVVTRSB9LAotCXsgMHg4MDBmMDQ2ZSwgS0VZX1BMQVlQQVVTRSB9LAogCXsgMHg4MDBmMDQxOSwgS0VZX1NUT1AgfSwKIAl7IDB4ODAwZjA0MWEsIEtFWV9ORVhUIH0sCiAJeyAweDgwMGYwNDFiLCBLRVlfUFJFVklPVVMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCmluZGV4IGVjOTcyZGMuLjg1ZmY5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwpAQCAtNjkyLDIwICs2OTIsMTggQEAKIH0KIAogLyogU2VuZCBkYXRhIG91dCB0aGUgSVIgYmxhc3RlciBwb3J0KHMpICovCi1zdGF0aWMgaW50IG1jZXVzYl90eF9pcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCAqdHhidWYsIHUzMiBuKQorc3RhdGljIGludCBtY2V1c2JfdHhfaXIoc3RydWN0IHJjX2RldiAqZGV2LCB1bnNpZ25lZCAqdHhidWYsIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCBtY2V1c2JfZGV2ICppciA9IGRldi0+cHJpdjsKIAlpbnQgaSwgcmV0ID0gMDsKLQlpbnQgY291bnQsIGNtZGNvdW50ID0gMDsKKwlpbnQgY21kY291bnQgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmNtZGJ1ZjsgLyogTUNFIGNvbW1hbmQgYnVmZmVyICovCiAJbG9uZyBzaWduYWxfZHVyYXRpb24gPSAwOyAvKiBTaW5nbmFsIGxlbmd0aCBpbiB1cyAqLwogCXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWUsIGVuZF90aW1lOwogCiAJZG9fZ2V0dGltZW9mZGF5KCZzdGFydF90aW1lKTsKIAotCWNvdW50ID0gbiAvIHNpemVvZihpbnQpOwotCi0JY21kYnVmID0ga3phbGxvYyhzaXplb2YoaW50KSAqIE1DRV9DTURCVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJY21kYnVmID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQpICogTUNFX0NNREJVRl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtZGJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc3NCw3ICs3NzIsNyBAQAogCiBvdXQ6CiAJa2ZyZWUoY21kYnVmKTsKLQlyZXR1cm4gcmV0ID8gcmV0IDogbjsKKwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CiAKIC8qIFNldHMgYWN0aXZlIElSIG91dHB1dHMgLS0gbWNlIGRldmljZXMgdHlwaWNhbGx5IGhhdmUgdHdvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKaW5kZXggY2U1OTVmOS4uMTQ0ZjNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYwpAQCAtNTQ2LDI0ICs1NDYsMTggQEAKICAqIG51bWJlciBtYXkgbGFyZ2VyIHRoYW4gVFhGQ09OVCAoMHhmZikuIFNvIGluIGludGVycnVwdF9oYW5kbGVyLCBpdCBoYXMgdG8KICAqIHNldCBUWEZDT05UIGFzIDB4ZmYsIHVudGlsIGJ1Zl9jb3VudCBsZXNzIHRoYW4gMHhmZi4KICAqLwotc3RhdGljIGludCBudnRfdHhfaXIoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgKnR4YnVmLCB1MzIgbikKK3N0YXRpYyBpbnQgbnZ0X3R4X2lyKHN0cnVjdCByY19kZXYgKmRldiwgdW5zaWduZWQgKnR4YnVmLCB1bnNpZ25lZCBuKQogewogCXN0cnVjdCBudnRfZGV2ICpudnQgPSBkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaXplX3QgY3VyX2NvdW50OwogCXVuc2lnbmVkIGludCBpOwogCXU4IGlyZW47CiAJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZudnQtPnR4LmxvY2ssIGZsYWdzKTsKIAotCWlmIChuID49IFRYX0JVRl9MRU4pIHsKLQkJbnZ0LT50eC5idWZfY291bnQgPSBjdXJfY291bnQgPSBUWF9CVUZfTEVOOwotCQlyZXQgPSBUWF9CVUZfTEVOOwotCX0gZWxzZSB7Ci0JCW52dC0+dHguYnVmX2NvdW50ID0gY3VyX2NvdW50ID0gbjsKLQkJcmV0ID0gbjsKLQl9CisJcmV0ID0gbWluKCh1bnNpZ25lZCkoVFhfQlVGX0xFTiAvIHNpemVvZih1bnNpZ25lZCkpLCBuKTsKKwludnQtPnR4LmJ1Zl9jb3VudCA9IChyZXQgKiBzaXplb2YodW5zaWduZWQpKTsKIAogCW1lbWNweShudnQtPnR4LmJ1ZiwgdHhidWYsIG52dC0+dHguYnVmX2NvdW50KTsKIApAQCAtNjI0LDcgKzYxOCw2IEBACiBzdGF0aWMgdm9pZCBudnRfcHJvY2Vzc19yeF9pcl9kYXRhKHN0cnVjdCBudnRfZGV2ICpudnQpCiB7CiAJREVGSU5FX0lSX1JBV19FVkVOVChyYXdpcik7Ci0JdW5zaWduZWQgaW50IGNvdW50OwogCXUzMiBjYXJyaWVyOwogCXU4IHNhbXBsZTsKIAlpbnQgaTsKQEAgLTYzNyw2NSArNjMwLDM4IEBACiAJaWYgKG52dC0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCkKIAkJY2FycmllciA9IG52dF9yeF9jYXJyaWVyX2RldGVjdChudnQpOwogCi0JY291bnQgPSBudnQtPnBrdHM7Ci0JbnZ0X2RiZ192ZXJib3NlKCJQcm9jZXNzaW5nIGJ1ZmZlciBvZiBsZW4gJWQiLCBjb3VudCk7CisJbnZ0X2RiZ192ZXJib3NlKCJQcm9jZXNzaW5nIGJ1ZmZlciBvZiBsZW4gJWQiLCBudnQtPnBrdHMpOwogCiAJaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCW52dC0+cGt0cy0tOworCWZvciAoaSA9IDA7IGkgPCBudnQtPnBrdHM7IGkrKykgewogCQlzYW1wbGUgPSBudnQtPmJ1ZltpXTsKIAogCQlyYXdpci5wdWxzZSA9ICgoc2FtcGxlICYgQlVGX1BVTFNFX0JJVCkgIT0gMCk7CiAJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKIAkJCQkJICAqIFNBTVBMRV9QRVJJT0QpOwogCi0JCWlmICgoc2FtcGxlICYgQlVGX0xFTl9NQVNLKSA9PSBCVUZfTEVOX01BU0spIHsKLQkJCWlmIChudnQtPnJhd2lyLnB1bHNlID09IHJhd2lyLnB1bHNlKQotCQkJCW52dC0+cmF3aXIuZHVyYXRpb24gKz0gcmF3aXIuZHVyYXRpb247Ci0JCQllbHNlIHsKLQkJCQludnQtPnJhd2lyLmR1cmF0aW9uID0gcmF3aXIuZHVyYXRpb247Ci0JCQkJbnZ0LT5yYXdpci5wdWxzZSA9IHJhd2lyLnB1bHNlOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KKwkJbnZ0X2RiZygiU3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkIiwKKwkJCXJhd2lyLnB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIsIHJhd2lyLmR1cmF0aW9uKTsKIAotCQlyYXdpci5kdXJhdGlvbiArPSBudnQtPnJhd2lyLmR1cmF0aW9uOwotCi0JCWluaXRfaXJfcmF3X2V2ZW50KCZudnQtPnJhd2lyKTsKLQkJbnZ0LT5yYXdpci5kdXJhdGlvbiA9IDA7Ci0JCW52dC0+cmF3aXIucHVsc2UgPSByYXdpci5wdWxzZTsKLQotCQlpZiAoc2FtcGxlID09IEJVRl9QVUxTRV9CSVQpCi0JCQlyYXdpci5wdWxzZSA9IGZhbHNlOwotCi0JCWlmIChyYXdpci5kdXJhdGlvbikgewotCQkJbnZ0X2RiZygiU3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkIiwKLQkJCQlyYXdpci5wdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiLAotCQkJCXJhd2lyLmR1cmF0aW9uKTsKLQotCQkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKG52dC0+cmRldiwgJnJhd2lyKTsKLQkJfQorCQlpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIobnZ0LT5yZGV2LCAmcmF3aXIpOwogCiAJCS8qCiAJCSAqIEJVRl9QVUxTRV9CSVQgaW5kaWNhdGVzIGVuZCBvZiBJUiBkYXRhLCBCVUZfUkVQRUFUX0JZVEUKIAkJICogaW5kaWNhdGVzIGVuZCBvZiBJUiBzaWduYWwsIGJ1dCBuZXcgZGF0YSBpbmNvbWluZy4gSW4gYm90aAogCQkgKiBjYXNlcywgaXQgbWVhbnMgd2UncmUgcmVhZHkgdG8gY2FsbCBpcl9yYXdfZXZlbnRfaGFuZGxlCiAJCSAqLwotCQlpZiAoKHNhbXBsZSA9PSBCVUZfUFVMU0VfQklUKSAmJiBudnQtPnBrdHMpIHsKKwkJaWYgKChzYW1wbGUgPT0gQlVGX1BVTFNFX0JJVCkgJiYgKGkgKyAxIDwgbnZ0LT5wa3RzKSkgewogCQkJbnZ0X2RiZygiQ2FsbGluZyBpcl9yYXdfZXZlbnRfaGFuZGxlIChzaWduYWwgZW5kKVxuIik7CiAJCQlpcl9yYXdfZXZlbnRfaGFuZGxlKG52dC0+cmRldik7CiAJCX0KIAl9CiAKKwludnQtPnBrdHMgPSAwOworCiAJbnZ0X2RiZygiQ2FsbGluZyBpcl9yYXdfZXZlbnRfaGFuZGxlIChidWZmZXIgZW1wdHkpXG4iKTsKIAlpcl9yYXdfZXZlbnRfaGFuZGxlKG52dC0+cmRldik7CiAKLQlpZiAobnZ0LT5wa3RzKSB7Ci0JCW52dF9kYmcoIk9kZCwgcGt0cyBzaG91bGQgYmUgMCBub3cuLi4gKGl0cyAldSkiLCBudnQtPnBrdHMpOwotCQludnQtPnBrdHMgPSAwOwotCX0KLQogCW52dF9kYmdfdmVyYm9zZSgiJXMgZG9uZSIsIF9fZnVuY19fKTsKIH0KIApAQCAtMTA1NCw3ICsxMDIwLDYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZudnQtPm52dF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmbnZ0LT50eC5sb2NrKTsKLQlpbml0X2lyX3Jhd19ldmVudCgmbnZ0LT5yYXdpcik7CiAKIAlyZXQgPSAtRUJVU1k7CiAJLyogbm93IGNsYWltIHJlc291cmNlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5oIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5oCmluZGV4IDEyNDFmYzguLjBkNWUwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmgKQEAgLTY3LDcgKzY3LDYgQEAKIHN0cnVjdCBudnRfZGV2IHsKIAlzdHJ1Y3QgcG5wX2RldiAqcGRldjsKIAlzdHJ1Y3QgcmNfZGV2ICpyZGV2OwotCXN0cnVjdCBpcl9yYXdfZXZlbnQgcmF3aXI7CiAKIAlzcGlubG9ja190IG52dF9sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLWNvcmUtcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1jb3JlLXByaXYuaAppbmRleCA4NzNiMzg3Li4wNGMyYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLWNvcmUtcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtY29yZS1wcml2LmgKQEAgLTg0LDYgKzg0LDE3IEBACiAJCXVuc2lnbmVkIGNvdW50OwogCQl1bnNpZ25lZCB3YW50ZWRfYml0czsKIAl9IHJjNV9zejsKKwlzdHJ1Y3QgbWNlX2tiZF9kZWMgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCQlzdHJ1Y3QgdGltZXJfbGlzdCByeF90aW1lb3V0OworCQljaGFyIG5hbWVbNjRdOworCQljaGFyIHBoeXNbNjRdOworCQlpbnQgc3RhdGU7CisJCXU4IGhlYWRlcjsKKwkJdTMyIGJvZHk7CisJCXVuc2lnbmVkIGNvdW50OworCQl1bnNpZ25lZCB3YW50ZWRfYml0czsKKwl9IG1jZV9rYmQ7CiAJc3RydWN0IGxpcmNfY29kZWMgewogCQlzdHJ1Y3QgcmNfZGV2ICpkZXY7CiAJCXN0cnVjdCBsaXJjX2RyaXZlciAqZHJ2OwpAQCAtMTgyLDYgKzE5MywxMyBAQAogI2RlZmluZSBsb2FkX3NvbnlfZGVjb2RlKCkJMAogI2VuZGlmCiAKKy8qIGZyb20gaXItbWNlX2tiZC1kZWNvZGVyLmMgKi8KKyNpZmRlZiBDT05GSUdfSVJfTUNFX0tCRF9ERUNPREVSX01PRFVMRQorI2RlZmluZSBsb2FkX21jZV9rYmRfZGVjb2RlKCkJcmVxdWVzdF9tb2R1bGUoImlyLW1jZV9rYmQtZGVjb2RlciIpCisjZWxzZQorI2RlZmluZSBsb2FkX21jZV9rYmRfZGVjb2RlKCkJMAorI2VuZGlmCisKIC8qIGZyb20gaXItbGlyYy1jb2RlYy5jICovCiAjaWZkZWYgQ09ORklHX0lSX0xJUkNfQ09ERUNfTU9EVUxFCiAjZGVmaW5lIGxvYWRfbGlyY19jb2RlYygpCXJlcXVlc3RfbW9kdWxlKCJpci1saXJjLWNvZGVjIikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbG9vcGJhY2suYyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtbG9vcGJhY2suYwppbmRleCBjYzg0NmIyLi5lZmM2YTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLWxvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1sb29wYmFjay5jCkBAIC0xMDEsMjEgKzEwMSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxvb3BfdHhfaXIoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgKnR4YnVmLCB1MzIgbikKK3N0YXRpYyBpbnQgbG9vcF90eF9pcihzdHJ1Y3QgcmNfZGV2ICpkZXYsIHVuc2lnbmVkICp0eGJ1ZiwgdW5zaWduZWQgY291bnQpCiB7CiAJc3RydWN0IGxvb3BiYWNrX2RldiAqbG9kZXYgPSBkZXYtPnByaXY7CiAJdTMyIHJ4bWFzazsKLQl1bnNpZ25lZCBjb3VudDsKIAl1bnNpZ25lZCB0b3RhbF9kdXJhdGlvbiA9IDA7CiAJdW5zaWduZWQgaTsKIAlERUZJTkVfSVJfUkFXX0VWRU5UKHJhd2lyKTsKIAotCWlmIChuID09IDAgfHwgbiAlIHNpemVvZihpbnQpKSB7Ci0JCWRwcmludGsoImludmFsaWQgdHggYnVmZmVyIHNpemVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljb3VudCA9IG4gLyBzaXplb2YoaW50KTsKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAkJdG90YWxfZHVyYXRpb24gKz0gYWJzKHR4YnVmW2ldKTsKIApAQCAtMTQyLDcgKzEzNSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlyYXdpci5wdWxzZSA9IGkgJSAyID8gZmFsc2UgOiB0cnVlOwotCQlyYXdpci5kdXJhdGlvbiA9IGFicyh0eGJ1ZltpXSkgKiAxMDAwOworCQlyYXdpci5kdXJhdGlvbiA9IHR4YnVmW2ldICogMTAwMDsKIAkJaWYgKHJhd2lyLmR1cmF0aW9uKQogCQkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKGRldiwgJnJhd2lyKTsKIAl9CkBAIC0xNTgsNyArMTUxLDcgQEAKIAkvKiBMaXJjIGV4cGVjdHMgdGhpcyBmdW5jdGlvbiB0byB0YWtlIGFzIGxvbmcgYXMgdGhlIHRvdGFsIGR1cmF0aW9uICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAlzY2hlZHVsZV90aW1lb3V0KHVzZWNzX3RvX2ppZmZpZXModG90YWxfZHVyYXRpb24pKTsKLQlyZXR1cm4gbjsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X2lkbGUoc3RydWN0IHJjX2RldiAqZGV2LCBib29sIGVuYWJsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggMzE4NmFjNy4uNTFhMjNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTczNSw2ICs3MzUsNyBAQAogCXsgUkNfVFlQRV9KVkMsCQkianZjIgkJfSwKIAl7IFJDX1RZUEVfU09OWSwJCSJzb255IgkJfSwKIAl7IFJDX1RZUEVfUkM1X1NaLAkicmMtNS1zeiIJfSwKKwl7IFJDX1RZUEVfTUNFX0tCRCwJIm1jZV9rYmQiCX0sCiAJeyBSQ19UWVBFX0xJUkMsCQkibGlyYyIJCX0sCiAJeyBSQ19UWVBFX09USEVSLAkib3RoZXIiCQl9LAogfTsKQEAgLTEwOTksNyArMTEwMCw2IEBACiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIG91dF9pbnB1dDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJaWYgKGRldi0+Y2hhbmdlX3Byb3RvY29sKSB7CiAJCXJjID0gZGV2LT5jaGFuZ2VfcHJvdG9jb2woZGV2LCByY19tYXAtPnJjX3R5cGUpOwpAQCAtMTEwNyw2ICsxMTA3LDggQEAKIAkJCWdvdG8gb3V0X3JhdzsKIAl9CiAKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKIAlJUl9kcHJpbnRrKDEsICJSZWdpc3RlcmVkIHJjJWxkIChkcml2ZXI6ICVzLCByZW1vdGU6ICVzLCBtb2RlICVzKVxuIiwKIAkJICAgZGV2LT5kZXZubywKIAkJICAgZGV2LT5kcml2ZXJfbmFtZSA/IGRldi0+ZHJpdmVyX25hbWUgOiAidW5rbm93biIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JlZHJhdDMuYyBiL2RyaXZlcnMvbWVkaWEvcmMvcmVkcmF0My5jCmluZGV4IDUxNDc3NjcuLmExNjYwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvcmVkcmF0My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvcmVkcmF0My5jCkBAIC0yMDUsNiArMjA1LDcgQEAKIAogCS8qIHJ4IHNpZ25hbCB0aW1lb3V0IHRpbWVyICovCiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfdGltZW91dDsKKwl1MzIgaHdfdGltZW91dDsKIAogCS8qIElzIHRoZSBkZXZpY2UgY3VycmVudGx5IHJlY2VpdmluZz8gKi8KIAlib29sIHJlY3ZfaW5fcHJvZ3Jlc3M7CkBAIC00MTQsMjAgKzQxNSwxMCBAQAogCiB9CiAKLS8qIHRpbWVyIGNhbGxiYWNrIHRvIHNlbmQgbG9uZyB0cmFpbGluZyBzcGFjZSBvbiByZWNlaXZlIHRpbWVvdXQgKi8KKy8qIHRpbWVyIGNhbGxiYWNrIHRvIHNlbmQgcmVzZXQgZXZlbnQgKi8KIHN0YXRpYyB2b2lkIHJlZHJhdDNfcnhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHJlZHJhdDNfZGV2ICpycjMgPSAoc3RydWN0IHJlZHJhdDNfZGV2ICopZGF0YTsKLQlERUZJTkVfSVJfUkFXX0VWRU5UKHJhd2lyKTsKLQotCXJhd2lyLnB1bHNlID0gZmFsc2U7Ci0JcmF3aXIuZHVyYXRpb24gPSBycjMtPnJjLT50aW1lb3V0OwotCXJyM19kYmcocnIzLT5kZXYsICJzdG9yaW5nIHRyYWlsaW5nIHNwYWNlIHdpdGggZHVyYXRpb24gJWRcbiIsCi0JCXJhd2lyLmR1cmF0aW9uKTsKLQlpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIocnIzLT5yYywgJnJhd2lyKTsKLQotCXJyM19kYmcocnIzLT5kZXYsICJjYWxsaW5nIGlyX3Jhd19ldmVudF9oYW5kbGVcbiIpOwotCWlyX3Jhd19ldmVudF9oYW5kbGUocnIzLT5yYyk7CiAKIAlycjNfZGJnKHJyMy0+ZGV2LCAiY2FsbGluZyBpcl9yYXdfZXZlbnRfcmVzZXRcbiIpOwogCWlyX3Jhd19ldmVudF9yZXNldChycjMtPnJjKTsKQEAgLTQzOCw3ICs0MjksNyBAQAogCURFRklORV9JUl9SQVdfRVZFTlQocmF3aXIpOwogCXN0cnVjdCByZWRyYXQzX3NpZ25hbF9oZWFkZXIgaGVhZGVyOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlpbnQgaTsKKwlpbnQgaSwgdHJhaWxlciA9IDA7CiAJdW5zaWduZWQgbG9uZyBkZWxheTsKIAl1MzIgbW9kX2ZyZXEsIHNpbmdsZV9sZW47CiAJdTE2ICpsZW5fdmFsczsKQEAgLTQ2NCw3ICs0NTUsOCBAQAogCWlmICghKGhlYWRlci5sZW5ndGggPj0gUlIzX0hFQURFUl9MRU5HVEgpKQogCQlkZXZfd2FybihkZXYsICJyZWFkIHJldHVybmVkIGxlc3MgdGhhbiBycjMgaGVhZGVyIGxlblxuIik7CiAKLQlkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMocnIzLT5yYy0+dGltZW91dCAvIDEwMDApOworCS8qIE1ha2Ugc3VyZSB3ZSByZXNldCB0aGUgSVIga2ZpZm8gYWZ0ZXIgYSBiaXQgb2YgaW5hY3Rpdml0eSAqLworCWRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhycjMtPmh3X3RpbWVvdXQpOwogCW1vZF90aW1lcigmcnIzLT5yeF90aW1lb3V0LCBqaWZmaWVzICsgZGVsYXkpOwogCiAJbWVtY3B5KCZ0bXAzMiwgc2lnX2RhdGEgKyBSUjNfUEFVU0VfT0ZGU0VULCBzaXplb2YodG1wMzIpKTsKQEAgLTUwNiw5ICs0OTgsNiBAQAogCQl1MTYgdmFsID0gbGVuX3ZhbHNbZGF0YV92YWxzW2ldXTsKIAkJc2luZ2xlX2xlbiA9IHJlZHJhdDNfbGVuX3RvX3VzKCh1MzIpYmUxNl90b19jcHUodmFsKSk7CiAKLQkJLyogY2FwIHRoZSB2YWx1ZSB0byBJUl9NQVhfRFVSQVRJT04gKi8KLQkJc2luZ2xlX2xlbiAmPSBJUl9NQVhfRFVSQVRJT047Ci0KIAkJLyogd2Ugc2hvdWxkIGFsd2F5cyBnZXQgcHVsc2Uvc3BhY2UvcHVsc2Uvc3BhY2Ugc2FtcGxlcyAqLwogCQlpZiAoaSAlIDIpCiAJCQlyYXdpci5wdWxzZSA9IGZhbHNlOwpAQCAtNTE2LDYgKzUwNSwxMiBAQAogCQkJcmF3aXIucHVsc2UgPSB0cnVlOwogCiAJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoc2luZ2xlX2xlbik7CisJCS8qIFNhdmUgaW5pdGlhbCBwdWxzZSBsZW5ndGggdG8gZnVkZ2UgdHJhaWxlciAqLworCQlpZiAoaSA9PSAwKQorCQkJdHJhaWxlciA9IHJhd2lyLmR1cmF0aW9uOworCQkvKiBjYXAgdGhlIHZhbHVlIHRvIElSX01BWF9EVVJBVElPTiAqLworCQlyYXdpci5kdXJhdGlvbiAmPSBJUl9NQVhfRFVSQVRJT047CisKIAkJcnIzX2RiZyhkZXYsICJzdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJWQgKGk6ICVkKVxuIiwKIAkJCXJhd2lyLnB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIsIHJhd2lyLmR1cmF0aW9uLCBpKTsKIAkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKHJyMy0+cmMsICZyYXdpcik7CkBAIC01MjUsNyArNTIwLDEwIEBACiAJaWYgKGkgJSAyKSB7CiAJCXJhd2lyLnB1bHNlID0gZmFsc2U7CiAJCS8qIHRoaXMgZHVyYXRpb24gaXMgbWFkZSB1cCwgYW5kIG1heSBub3QgYmUgaWRlYWwuLi4gKi8KLQkJcmF3aXIuZHVyYXRpb24gPSBycjMtPnJjLT50aW1lb3V0IC8gMjsKKwkJaWYgKHRyYWlsZXIgPCBVU19UT19OUygxMDAwKSkKKwkJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoMjgwMCk7CisJCWVsc2UKKwkJCXJhd2lyLmR1cmF0aW9uID0gdHJhaWxlcjsKIAkJcnIzX2RiZyhkZXYsICJzdG9yaW5nIHRyYWlsaW5nIHNwYWNlIHdpdGggZHVyYXRpb24gJWRcbiIsCiAJCQlyYXdpci5kdXJhdGlvbik7CiAJCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihycjMtPnJjLCAmcmF3aXIpOwpAQCAtNjI5LDM2ICs2MjcsMzEgQEAKIAlrZnJlZShycjMpOwogfQogCi1zdGF0aWMgdTMyIHJlZHJhdDNfZ2V0X3RpbWVvdXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCByY19kZXYgKnJjLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3N0YXRpYyB1MzIgcmVkcmF0M19nZXRfdGltZW91dChzdHJ1Y3QgcmVkcmF0M19kZXYgKnJyMykKIHsKIAl1MzIgKnRtcDsKLQl1MzIgdGltZW91dCA9IE1TX1RPX05TKDE1MCk7IC8qIGEgc2FuZSBkZWZhdWx0LCBpZiB0aGluZ3MgZ28gaGF5d2lyZSAqLworCXUzMiB0aW1lb3V0ID0gTVNfVE9fVVMoMTUwKTsgLyogYSBzYW5lIGRlZmF1bHQsIGlmIHRoaW5ncyBnbyBoYXl3aXJlICovCiAJaW50IGxlbiwgcmV0LCBwaXBlOwogCiAJbGVuID0gc2l6ZW9mKCp0bXApOwogCXRtcCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRtcCkgewotCQlkZXZfd2FybihkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsbHVyZVxuIik7CisJCWRldl93YXJuKHJyMy0+ZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGx1cmVcbiIpOwogCQlyZXR1cm4gdGltZW91dDsKIAl9CiAKLQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApOwotCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLCBSUjNfR0VUX0lSX1BBUkFNLAorCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUocnIzLT51ZGV2LCAwKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2cocnIzLT51ZGV2LCBwaXBlLCBSUjNfR0VUX0lSX1BBUkFNLAogCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCiAJCQkgICAgICBSUjNfSVJfSU9fU0lHX1RJTUVPVVQsIDAsIHRtcCwgbGVuLCBIWiAqIDUpOwogCWlmIChyZXQgIT0gbGVuKSB7Ci0JCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIHRpbWVvdXQgZnJvbSBoYXJkd2FyZVxuIik7CisJCWRldl93YXJuKHJyMy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgdGltZW91dCBmcm9tIGhhcmR3YXJlXG4iKTsKIAkJcmV0dXJuIHRpbWVvdXQ7CiAJfQogCi0JdGltZW91dCA9IFVTX1RPX05TKHJlZHJhdDNfbGVuX3RvX3VzKGJlMzJfdG9fY3B1KCp0bXApKSk7Ci0JaWYgKHRpbWVvdXQgPCByYy0+bWluX3RpbWVvdXQpCi0JCXRpbWVvdXQgPSByYy0+bWluX3RpbWVvdXQ7Ci0JZWxzZSBpZiAodGltZW91dCA+IHJjLT5tYXhfdGltZW91dCkKLQkJdGltZW91dCA9IHJjLT5tYXhfdGltZW91dDsKKwl0aW1lb3V0ID0gcmVkcmF0M19sZW5fdG9fdXMoYmUzMl90b19jcHUoKnRtcCkpOwogCi0JcnIzX2RiZyhkZXYsICJHb3QgdGltZW91dCBvZiAlZCBtc1xuIiwgdGltZW91dCAvICgxMDAwICogMTAwMCkpOworCXJyM19kYmcocnIzLT5kZXYsICJHb3QgdGltZW91dCBvZiAlZCBtc1xuIiwgdGltZW91dCAvIDEwMDApOwogCXJldHVybiB0aW1lb3V0OwogfQogCkBAIC0xMTEwLDkgKzExMDMsNyBAQAogCXJjLT5wcml2ID0gcnIzOwogCXJjLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CiAJcmMtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7Ci0JcmMtPm1pbl90aW1lb3V0ID0gTVNfVE9fTlMoUlIzX1JYX01JTl9USU1FT1VUKTsKLQlyYy0+bWF4X3RpbWVvdXQgPSBNU19UT19OUyhSUjNfUlhfTUFYX1RJTUVPVVQpOwotCXJjLT50aW1lb3V0ID0gcmVkcmF0M19nZXRfdGltZW91dChkZXYsIHJjLCBycjMtPnVkZXYpOworCXJjLT50aW1lb3V0ID0gVVNfVE9fTlMoMjc1MCk7CiAJcmMtPnR4X2lyID0gcmVkcmF0M190cmFuc21pdF9pcjsKIAlyYy0+c190eF9jYXJyaWVyID0gcmVkcmF0M19zZXRfdHhfY2FycmllcjsKIAlyYy0+ZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRTsKQEAgLTExODYsNyArMTE3Nyw3IEBACiAJcnIzID0ga3phbGxvYyhzaXplb2YoKnJyMyksIEdGUF9LRVJORUwpOwogCWlmIChycjMgPT0gTlVMTCkgewogCQlkZXZfZXJyKGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIG5vX2VuZHBvaW50czsKIAl9CiAKIAlycjMtPmRldiA9ICZpbnRmLT5kZXY7CkBAIC0xMjQyLDYgKzEyMzMsOSBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycm9yOwogCisJLyogc3RvcmUgY3VycmVudCBoYXJkd2FyZSB0aW1lb3V0LCBpbiB1cywgd2lsbCB1c2UgZm9yIGtmaWZvIHJlc2V0cyAqLworCXJyMy0+aHdfdGltZW91dCA9IHJlZHJhdDNfZ2V0X3RpbWVvdXQocnIzKTsKKwogCS8qIGRlZmF1bHQuLiB3aWxsIGdldCBvdmVycmlkZGVuIGJ5IGFueSBzZW5kcyB3aXRoIGEgZnJlcSBkZWZpbmVkICovCiAJcnIzLT5jYXJyaWVyID0gMzgwMDA7CiAKQEAgLTEyODAsNiArMTI3NCw3IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCXJjX3VucmVnaXN0ZXJfZGV2aWNlKHJyMy0+cmMpOworCWRlbF90aW1lcl9zeW5jKCZycjMtPnJ4X3RpbWVvdXQpOwogCXJlZHJhdDNfZGVsZXRlKHJyMywgdWRldik7CiAKIAlycjNfZnRyKCZpbnRmLT5kZXYsICJSZWRSYXQzIElSIFRyYW5zY2VpdmVyIG5vdyBkaXNjb25uZWN0ZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy93aW5ib25kLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy93aW5ib25kLWNpci5jCmluZGV4IDVkMDZiODkuLmJlYzhhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvd2luYm9uZC1jaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3dpbmJvbmQtY2lyLmMKQEAgLTYsOCArNiw4IEBACiAgKiAgY291bGQgcHJvYmFibHkgc3VwcG9ydCBvdGhlcnMgKFdpbmJvbmQgV0VDMTAyWCwgTmF0U2VtaSwgZXRjKQogICogIHdpdGggbWlub3IgbW9kaWZpY2F0aW9ucy4KICAqCi0gKiAgT3JpZ2luYWwgQXV0aG9yOiBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+Ci0gKiAgICAgQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CisgKiAgT3JpZ2luYWwgQXV0aG9yOiBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQGhhcmRlbWFuLm51PgorICogICAgIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTEgRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KICAqCiAgKiAgRGVkaWNhdGVkIHRvIG15IGRhdWdodGVyIE1hdGlsZGEsIHdpdGhvdXQgd2hvc2UgbG92aW5nIGF0dGVudGlvbiB0aGlzCiAgKiAgZHJpdmVyIHdvdWxkIGhhdmUgYmVlbiBmaW5pc2hlZCBpbiBoYWxmIHRoZSB0aW1lIGFuZCB3aXRoIGEgZnJhY3Rpb24KQEAgLTU3NywxNiArNTc3LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQKLXdiY2lyX3R4KHN0cnVjdCByY19kZXYgKmRldiwgaW50ICpidWYsIHUzMiBidWZzaXplKQord2JjaXJfdHgoc3RydWN0IHJjX2RldiAqZGV2LCB1bnNpZ25lZCAqYnVmLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlzdHJ1Y3Qgd2JjaXJfZGF0YSAqZGF0YSA9IGRldi0+cHJpdjsKLQl1MzIgY291bnQ7CiAJdW5zaWduZWQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogYnVmc2l6ZSBoYXMgYmVlbiBzYW5pdHkgY2hlY2tlZCBieSB0aGUgY2FsbGVyICovCi0JY291bnQgPSBidWZzaXplIC8gc2l6ZW9mKGludCk7Ci0KIAkvKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHBvc3NpYmxlLCBidXQgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT5zcGlubG9jaywgZmxhZ3MpOwogCWlmIChkYXRhLT50eHN0YXRlICE9IFdCQ0lSX1RYU1RBVEVfSU5BQ1RJVkUpIHsKQEAgLTg3NiwxOCArODcyLDggQEAKIAkvKiBwcmVzY2FsZXIgMS4wLCB0eC9yeCBmaWZvIGx2bCAxNiAqLwogCW91dGIoMHgzMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0VYQ1IyKTsKIAotCS8qIFNldCBiYXVkIGRpdmlzb3IgdG8gZ2VuZXJhdGUgb25lIGJ5dGUgcGVyIGJpdC9jZWxsICovCi0Jc3dpdGNoIChwcm90b2NvbCkgewotCWNhc2UgSVJfUFJPVE9DT0xfUkM1OgotCQlvdXRiKDB4QTcsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19CR0RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUl9QUk9UT0NPTF9SQzY6Ci0JCW91dGIoMHg1MywgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOwotCQlicmVhazsKLQljYXNlIElSX1BST1RPQ09MX05FQzoKLQkJb3V0YigweDY5LCBkYXRhLT5zYmFzZSArIFdCQ0lSX1JFR19TUDNfQkdETCk7Ci0JCWJyZWFrOwotCX0KKwkvKiBTZXQgYmF1ZCBkaXZpc29yIHRvIHNhbXBsZSBldmVyeSAxMCB1cyAqLworCW91dGIoMHgwRiwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREwpOwogCW91dGIoMHgwMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX0JHREgpOwogCiAJLyogU2V0IENFSVIgbW9kZSAqLwpAQCAtODk2LDkgKzg4Miw5IEBACiAJaW5iKGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19MU1IpOyAvKiBDbGVhciBMU1IgKi8KIAlpbmIoZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX01TUik7IC8qIENsZWFyIE1TUiAqLwogCi0JLyogRGlzYWJsZSBSWCBkZW1vZCwgcnVuLWxlbmd0aCBlbmNvZGluZy9kZWNvZGluZywgc2V0IGZyZXEgc3BhbiAqLworCS8qIERpc2FibGUgUlggZGVtb2QsIGVuYWJsZSBydW4tbGVuZ3RoIGVuYy9kZWMsIHNldCBmcmVxIHNwYW4gKi8KIAl3YmNpcl9zZWxlY3RfYmFuayhkYXRhLCBXQkNJUl9CQU5LXzcpOwotCW91dGIoMHgxMCwgZGF0YS0+c2Jhc2UgKyBXQkNJUl9SRUdfU1AzX1JDQ0ZHKTsKKwlvdXRiKDB4OTAsIGRhdGEtPnNiYXNlICsgV0JDSVJfUkVHX1NQM19SQ0NGRyk7CiAKIAkvKiBEaXNhYmxlIHRpbWVyICovCiAJd2JjaXJfc2VsZWN0X2JhbmsoZGF0YSwgV0JDSVJfQkFOS180KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCBiYjUzZGU3Li5mNTc0ZGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC00ODksNiArNDg5LDE1IEBACiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVG9zaGliYSBUQ004MjV4IFZHQSBjYW1lcmEgc2Vuc29yLgogCSAgSXQgaXMgdXNlZCBmb3IgZXhhbXBsZSBpbiBOb2tpYSBOODAwLgogCitjb21tZW50ICJGbGFzaCBkZXZpY2VzIgorCitjb25maWcgVklERU9fQURQMTY1MworCXRyaXN0YXRlICJBRFAxNjUzIGZsYXNoIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMiAmJiBNRURJQV9DT05UUk9MTEVSCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEFEUDE2NTMgZmxhc2ggY29udHJvbGxlci4gSXQgaXMgdXNlZCBmb3IKKwkgIGV4YW1wbGUgaW4gTm9raWEgTjkwMC4KKwogY29tbWVudCAiVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMiCiAKIGNvbmZpZyBWSURFT19VUEQ2NDAzMUEKQEAgLTcwNyw2ICs3MTYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL0tjb25maWciCisKIGNvbmZpZyBWSURFT19NMzJSX0FSCiAJdHJpc3RhdGUgIkFSIGRldmljZXMiCiAJZGVwZW5kcyBvbiBNMzJSICYmIFZJREVPX1Y0TDIKQEAgLTcyNiwxNSArNzM3LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFydi4KIAotY29uZmlnIFZJREVPX0NBRkVfQ0NJQwotCXRyaXN0YXRlICJNYXJ2ZWxsIDg4QUxQMDEgKENhZmUpIENNT1MgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMgotCXNlbGVjdCBWSURFT19PVjc2NzAKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXgyIGRyaXZlciBmb3IgdGhlIE1hcnZlbGwgODhBTFAwMSBpbnRlZ3JhdGVkCi0JICBDTU9TIGNhbWVyYSBjb250cm9sbGVyLiAgVGhpcyBpcyB0aGUgY29udHJvbGxlciBmb3VuZCBvbiBmaXJzdC0KLQkgIGdlbmVyYXRpb24gT0xQQyBzeXN0ZW1zLgotCiBjb25maWcgVklERU9fU1IwMzBQQzMwCiAJdHJpc3RhdGUgIlNSMDMwUEMzMCBWR0EgY2FtZXJhIHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKQEAgLTg0Niw2ICs4NDgsMTIgQEAKIAloZWxwCiAJICBUaGlzIGlzIGEgb3YyNjQwIGNhbWVyYSBkcml2ZXIKIAorY29uZmlnIFNPQ19DQU1FUkFfT1Y1NjQyCisJdHJpc3RhdGUgIm92NTY0MiBjYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCisJaGVscAorCSAgVGhpcyBpcyBhIFY0TDIgY2FtZXJhIGRyaXZlciBmb3IgdGhlIE9tbmlWaXNpb24gT1Y1NjQyIHNlbnNvcgorCiBjb25maWcgU09DX0NBTUVSQV9PVjY2NTAKIAl0cmlzdGF0ZSAib3Y2NjUwIHNlbnNvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKQEAgLTk1Miw2ICs5NjAsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHM1cC1maW1jLgogCitjb25maWcgVklERU9fQVRNRUxfSVNJCisJdHJpc3RhdGUgIkFUTUVMIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKElTSSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBTT0NfQ0FNRVJBICYmIEFSQ0hfQVQ5MQorCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRworCS0tLWhlbHAtLS0KKwkgIFRoaXMgbW9kdWxlIG1ha2VzIHRoZSBBVE1FTCBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlIGF2YWlsYWJsZQorCSAgYXMgYSB2NGwyIGRldmljZS4KKwogY29uZmlnIFZJREVPX1M1UF9NSVBJX0NTSVMKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNVAgYW5kIEVYWU5PUzQgTUlQSSBDU0kgcmVjZWl2ZXIgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBQTV9SVU5USU1FICYmIFBMQVRfUzVQICYmIFZJREVPX1Y0TDJfU1VCREVWX0FQSQpAQCAtOTYxLDYgKzk3Nyw4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzNXAtY3Npcy4KIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9LY29uZmlnIgorCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCiAjCkBAIC0xMDU2LDQgKzEwNzQsMTIgQEAKIAkgIGZyYW1ld29yay4KIAogCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfTUZDCisJdHJpc3RhdGUgIlNhbXN1bmcgUzVQIE1GQyA1LjEgVmlkZW8gQ29kZWMiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVklERU9fVjRMMiAmJiBQTEFUX1M1UAorCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRworCWRlZmF1bHQgbgorCWhlbHAKKwkgICAgTUZDIDUuMSBkcml2ZXIgZm9yIFY0TDIuCisKIGVuZGlmICMgVjRMX01FTTJNRU1fRFJJVkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggZjBmZWNkNi4uMjcyMzkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC03MCw2ICs3MCw3IEBACiBvYmotJChDT05GSUdfVklERU9fU1IwMzBQQzMwKQkrPSBzcjAzMHBjMzAubwogb2JqLSQoQ09ORklHX1ZJREVPX05PT04wMTBQQzMwKQkrPSBub29uMDEwcGMzMC5vCiBvYmotJChDT05GSUdfVklERU9fTTVNT0xTKQkrPSBtNW1vbHMvCitvYmotJChDT05GSUdfVklERU9fQURQMTY1MykJKz0gYWRwMTY1My5vCiAKIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX0lNWDA3NCkJCSs9IGlteDA3NC5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxKQkrPSBtdDltMDAxLm8KQEAgLTc4LDYgKzc5LDcgQEAKIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVQxMTIpCSs9IG10OXQxMTIubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMikJKz0gbXQ5djAyMi5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9PVjI2NDApCQkrPSBvdjI2NDAubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfT1Y1NjQyKQkJKz0gb3Y1NjQyLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX09WNjY1MCkJCSs9IG92NjY1MC5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9PVjc3MlgpCQkrPSBvdjc3Mngubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfT1Y5NjQwKQkJKz0gb3Y5NjQwLm8KQEAgLTEyNyw3ICsxMjksOCBAQAogCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzQxWCkgKz0gY3gyMzQxeC5vCiAKLW9iai0kKENPTkZJR19WSURFT19DQUZFX0NDSUMpICs9IGNhZmVfY2NpYy5vCitvYmotJChDT05GSUdfVklERU9fQ0FGRV9DQ0lDKSArPSBtYXJ2ZWxsLWNjaWMvCitvYmotJChDT05GSUdfVklERU9fTU1QX0NBTUVSQSkgKz0gbWFydmVsbC1jY2ljLwogCiBvYmotJChDT05GSUdfVklERU9fVklBX0NBTUVSQSkgKz0gdmlhLWNhbWVyYS5vCiAKQEAgLTE2Niw4ICsxNjksMTEgQEAKIG9iai0kKENPTkZJR19WSURFT19TSF9NT0JJTEVfQ1NJMikJKz0gc2hfbW9iaWxlX2NzaTIubwogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUpCSs9IHNoX21vYmlsZV9jZXVfY2FtZXJhLm8KIG9iai0kKENPTkZJR19WSURFT19PTUFQMSkJCSs9IG9tYXAxX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fQVRNRUxfSVNJKQkJKz0gYXRtZWwtaXNpLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0ZJTUMpIAkrPSBzNXAtZmltYy8KK29iai0kKENPTkZJR19WSURFT19TQU1TVU5HX1M1UF9NRkMpCSs9IHM1cC1tZmMvCitvYmotJChDT05GSUdfVklERU9fU0FNU1VOR19TNVBfVFYpCSs9IHM1cC10di8KIAogb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJCSs9IGRhdmluY2kvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWRwMTY1My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHAxNjUzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3YmVmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWRwMTY1My5jCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogZHJpdmVycy9tZWRpYS92aWRlby9hZHAxNjUzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtLTIwMTEgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBTYWthcmkgQWlsdXMgPHNha2FyaS5haWx1c0BtYXh3ZWxsLnJlc2VhcmNoLm5va2lhLmNvbT4KKyAqCisgKiBDb250cmlidXRvcnM6CisgKglTYWthcmkgQWlsdXMgPHNha2FyaS5haWx1c0BtYXh3ZWxsLnJlc2VhcmNoLm5va2lhLmNvbT4KKyAqCVR1dWtrYSBUb2l2b25lbiA8dHV1a2thdDc2QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICogVE9ETzoKKyAqIC0gZmF1bHQgaW50ZXJydXB0IGhhbmRsaW5nCisgKiAtIGhhcmR3YXJlIHN0cm9iZQorICogLSBwb3dlciBkb2Vzbid0IG5lZWQgdG8gYmUgT04gaWYgYWxsIGxpZ2h0cyBhcmUgb2ZmCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvYWRwMTY1My5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNkZWZpbmUgVElNRU9VVF9NQVgJCTgyMDAwMAorI2RlZmluZSBUSU1FT1VUX1NURVAJCTU0NjAwCisjZGVmaW5lIFRJTUVPVVRfTUlOCQkoVElNRU9VVF9NQVggLSBBRFAxNjUzX1JFR19DT05GSUdfVE1SX1NFVF9NQVggXAorCQkJCSAqIFRJTUVPVVRfU1RFUCkKKyNkZWZpbmUgVElNRU9VVF9VU19UT19DT0RFKHQpCSgoVElNRU9VVF9NQVggKyAoVElNRU9VVF9TVEVQIC8gMikgLSAodCkpIFwKKwkJCQkgLyBUSU1FT1VUX1NURVApCisjZGVmaW5lIFRJTUVPVVRfQ09ERV9UT19VUyhjKQkoVElNRU9VVF9NQVggLSAoYykgKiBUSU1FT1VUX1NURVApCisKKy8qIFdyaXRlIHZhbHVlcyBpbnRvIEFEUDE2NTMgcmVnaXN0ZXJzLiAqLworc3RhdGljIGludCBhZHAxNjUzX3VwZGF0ZV9odyhzdHJ1Y3QgYWRwMTY1M19mbGFzaCAqZmxhc2gpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmZsYXNoLT5zdWJkZXYpOworCXU4IG91dF9zZWw7CisJdTggY29uZmlnID0gMDsKKwlpbnQgcnZhbDsKKworCW91dF9zZWwgPSBBRFAxNjUzX0lORElDQVRPUl9JTlRFTlNJVFlfdUFfVE9fUkVHKAorCQlmbGFzaC0+aW5kaWNhdG9yX2ludGVuc2l0eS0+dmFsKQorCQk8PCBBRFAxNjUzX1JFR19PVVRfU0VMX0lMRURfU0hJRlQ7CisKKwlzd2l0Y2ggKGZsYXNoLT5sZWRfbW9kZS0+dmFsKSB7CisJY2FzZSBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkU6CisJCWJyZWFrOworCWNhc2UgVjRMMl9GTEFTSF9MRURfTU9ERV9GTEFTSDoKKwkJLyogRmxhc2ggbW9kZSwgbGlnaHQgb24gd2l0aCBzdHJvYmUsIGR1cmF0aW9uIGZyb20gdGltZXIgKi8KKwkJY29uZmlnID0gQURQMTY1M19SRUdfQ09ORklHX1RNUl9DRkc7CisJCWNvbmZpZyB8PSBUSU1FT1VUX1VTX1RPX0NPREUoZmxhc2gtPmZsYXNoX3RpbWVvdXQtPnZhbCkKKwkJCSAgPDwgQURQMTY1M19SRUdfQ09ORklHX1RNUl9TRVRfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GTEFTSF9MRURfTU9ERV9UT1JDSDoKKwkJLyogVG9yY2ggbW9kZSwgbGlnaHQgaW1tZWRpYXRlbHkgb24sIGR1cmF0aW9uIGluZGVmaW5pdGUgKi8KKwkJb3V0X3NlbCB8PSBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9tQV9UT19SRUcoCisJCQlmbGFzaC0+dG9yY2hfaW50ZW5zaXR5LT52YWwpCisJCQk8PCBBRFAxNjUzX1JFR19PVVRfU0VMX0hQTEVEX1NISUZUOworCQlicmVhazsKKwl9CisKKwlydmFsID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEUDE2NTNfUkVHX09VVF9TRUwsIG91dF9zZWwpOworCWlmIChydmFsIDwgMCkKKwkJcmV0dXJuIHJ2YWw7CisKKwlydmFsID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEUDE2NTNfUkVHX0NPTkZJRywgY29uZmlnKTsKKwlpZiAocnZhbCA8IDApCisJCXJldHVybiBydmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRwMTY1M19nZXRfZmF1bHQoc3RydWN0IGFkcDE2NTNfZmxhc2ggKmZsYXNoKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZmbGFzaC0+c3ViZGV2KTsKKwlpbnQgZmF1bHQ7CisJaW50IHJ2YWw7CisKKwlmYXVsdCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEUDE2NTNfUkVHX0ZBVUxUKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKGZhdWx0KSkKKwkJcmV0dXJuIGZhdWx0OworCisJZmxhc2gtPmZhdWx0IHw9IGZhdWx0OworCisJaWYgKCFmbGFzaC0+ZmF1bHQpCisJCXJldHVybiAwOworCisJLyogQ2xlYXIgZmF1bHRzLiAqLworCXJ2YWwgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURQMTY1M19SRUdfT1VUX1NFTCwgMCk7CisJaWYgKElTX0VSUl9WQUxVRShydmFsKSkKKwkJcmV0dXJuIHJ2YWw7CisKKwlmbGFzaC0+bGVkX21vZGUtPnZhbCA9IFY0TDJfRkxBU0hfTEVEX01PREVfTk9ORTsKKworCXJ2YWwgPSBhZHAxNjUzX3VwZGF0ZV9odyhmbGFzaCk7CisJaWYgKElTX0VSUl9WQUxVRShydmFsKSkKKwkJcmV0dXJuIHJ2YWw7CisKKwlyZXR1cm4gZmxhc2gtPmZhdWx0OworfQorCitzdGF0aWMgaW50IGFkcDE2NTNfc3Ryb2JlKHN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZmxhc2gtPnN1YmRldik7CisJdTggb3V0X3NlbCA9IEFEUDE2NTNfSU5ESUNBVE9SX0lOVEVOU0lUWV91QV9UT19SRUcoCisJCWZsYXNoLT5pbmRpY2F0b3JfaW50ZW5zaXR5LT52YWwpCisJCTw8IEFEUDE2NTNfUkVHX09VVF9TRUxfSUxFRF9TSElGVDsKKwlpbnQgcnZhbDsKKworCWlmIChmbGFzaC0+bGVkX21vZGUtPnZhbCAhPSBWNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNIKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFlbmFibGUpCisJCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURQMTY1M19SRUdfT1VUX1NFTCwKKwkJCQkJCSBvdXRfc2VsKTsKKworCW91dF9zZWwgfD0gQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfbUFfVE9fUkVHKAorCQlmbGFzaC0+Zmxhc2hfaW50ZW5zaXR5LT52YWwpCisJCTw8IEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfU0hJRlQ7CisJcnZhbCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFAxNjUzX1JFR19PVVRfU0VMLCBvdXRfc2VsKTsKKwlpZiAocnZhbCkKKwkJcmV0dXJuIHJ2YWw7CisKKwkvKiBTb2Z0d2FyZSBzdHJvYmUgdXNpbmcgaTJjICovCisJcnZhbCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFAxNjUzX1JFR19TV19TVFJPQkUsCisJCUFEUDE2NTNfUkVHX1NXX1NUUk9CRV9TV19TVFJPQkUpOworCWlmIChydmFsKQorCQlyZXR1cm4gcnZhbDsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEUDE2NTNfUkVHX1NXX1NUUk9CRSwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBWNEwyIGNvbnRyb2xzCisgKi8KKworc3RhdGljIGludCBhZHAxNjUzX2dldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IGFkcDE2NTNfZmxhc2ggKmZsYXNoID0KKwkJY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBhZHAxNjUzX2ZsYXNoLCBjdHJscyk7CisJaW50IHJ2YWw7CisKKwlydmFsID0gYWRwMTY1M19nZXRfZmF1bHQoZmxhc2gpOworCWlmIChJU19FUlJfVkFMVUUocnZhbCkpCisJCXJldHVybiBydmFsOworCisJY3RybC0+Y3VyLnZhbCA9IDA7CisKKwlpZiAoZmxhc2gtPmZhdWx0ICYgQURQMTY1M19SRUdfRkFVTFRfRkxUX1NDUCkKKwkJY3RybC0+Y3VyLnZhbCB8PSBWNEwyX0ZMQVNIX0ZBVUxUX1NIT1JUX0NJUkNVSVQ7CisJaWYgKGZsYXNoLT5mYXVsdCAmIEFEUDE2NTNfUkVHX0ZBVUxUX0ZMVF9PVCkKKwkJY3RybC0+Y3VyLnZhbCB8PSBWNEwyX0ZMQVNIX0ZBVUxUX09WRVJfVEVNUEVSQVRVUkU7CisJaWYgKGZsYXNoLT5mYXVsdCAmIEFEUDE2NTNfUkVHX0ZBVUxUX0ZMVF9UTVIpCisJCWN0cmwtPmN1ci52YWwgfD0gVjRMMl9GTEFTSF9GQVVMVF9USU1FT1VUOworCWlmIChmbGFzaC0+ZmF1bHQgJiBBRFAxNjUzX1JFR19GQVVMVF9GTFRfT1YpCisJCWN0cmwtPmN1ci52YWwgfD0gVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0U7CisKKwlmbGFzaC0+ZmF1bHQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRwMTY1M19zZXRfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCA9CisJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgYWRwMTY1M19mbGFzaCwgY3RybHMpOworCWludCBydmFsOworCisJcnZhbCA9IGFkcDE2NTNfZ2V0X2ZhdWx0KGZsYXNoKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKHJ2YWwpKQorCQlyZXR1cm4gcnZhbDsKKwlpZiAoKHJ2YWwgJiAoQURQMTY1M19SRUdfRkFVTFRfRkxUX1NDUCB8CisJCSAgICAgQURQMTY1M19SRUdfRkFVTFRfRkxUX09UIHwKKwkJICAgICBBRFAxNjUzX1JFR19GQVVMVF9GTFRfT1YpKSAmJgorCSAgICAoY3RybC0+aWQgPT0gVjRMMl9DSURfRkxBU0hfU1RST0JFIHx8CisJICAgICBjdHJsLT5pZCA9PSBWNEwyX0NJRF9GTEFTSF9UT1JDSF9JTlRFTlNJVFkgfHwKKwkgICAgIGN0cmwtPmlkID09IFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRToKKwkJcmV0dXJuIGFkcDE2NTNfc3Ryb2JlKGZsYXNoLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVE9QOgorCQlyZXR1cm4gYWRwMTY1M19zdHJvYmUoZmxhc2gsIDApOworCX0KKworCXJldHVybiBhZHAxNjUzX3VwZGF0ZV9odyhmbGFzaCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBhZHAxNjUzX2N0cmxfb3BzID0geworCS5nX3ZvbGF0aWxlX2N0cmwgPSBhZHAxNjUzX2dldF9jdHJsLAorCS5zX2N0cmwgPSBhZHAxNjUzX3NldF9jdHJsLAorfTsKKworc3RhdGljIGludCBhZHAxNjUzX2luaXRfY29udHJvbHMoc3RydWN0IGFkcDE2NTNfZmxhc2ggKmZsYXNoKQoreworCXN0cnVjdCB2NGwyX2N0cmwgKmZhdWx0OworCisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmZmxhc2gtPmN0cmxzLCA5KTsKKworCWZsYXNoLT5sZWRfbW9kZSA9CisJCXY0bDJfY3RybF9uZXdfc3RkX21lbnUoJmZsYXNoLT5jdHJscywgJmFkcDE2NTNfY3RybF9vcHMsCisJCQkJICAgICAgIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFLAorCQkJCSAgICAgICBWNEwyX0ZMQVNIX0xFRF9NT0RFX1RPUkNILCB+MHg3LCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZF9tZW51KCZmbGFzaC0+Y3RybHMsICZhZHAxNjUzX2N0cmxfb3BzLAorCQkJICAgICAgIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TT1VSQ0UsCisJCQkgICAgICAgVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX1NPRlRXQVJFLCB+MHgxLCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmZmxhc2gtPmN0cmxzLCAmYWRwMTY1M19jdHJsX29wcywKKwkJCSAgVjRMMl9DSURfRkxBU0hfU1RST0JFLCAwLCAwLCAwLCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmZmxhc2gtPmN0cmxzLCAmYWRwMTY1M19jdHJsX29wcywKKwkJCSAgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUT1AsIDAsIDAsIDAsIDApOworCWZsYXNoLT5mbGFzaF90aW1lb3V0ID0KKwkJdjRsMl9jdHJsX25ld19zdGQoJmZsYXNoLT5jdHJscywgJmFkcDE2NTNfY3RybF9vcHMsCisJCQkJICBWNEwyX0NJRF9GTEFTSF9USU1FT1VULCBUSU1FT1VUX01JTiwKKwkJCQkgIGZsYXNoLT5wbGF0Zm9ybV9kYXRhLT5tYXhfZmxhc2hfdGltZW91dCwKKwkJCQkgIFRJTUVPVVRfU1RFUCwKKwkJCQkgIGZsYXNoLT5wbGF0Zm9ybV9kYXRhLT5tYXhfZmxhc2hfdGltZW91dCk7CisJZmxhc2gtPmZsYXNoX2ludGVuc2l0eSA9CisJCXY0bDJfY3RybF9uZXdfc3RkKCZmbGFzaC0+Y3RybHMsICZhZHAxNjUzX2N0cmxfb3BzLAorCQkJCSAgVjRMMl9DSURfRkxBU0hfSU5URU5TSVRZLAorCQkJCSAgQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfTUlOLAorCQkJCSAgZmxhc2gtPnBsYXRmb3JtX2RhdGEtPm1heF9mbGFzaF9pbnRlbnNpdHksCisJCQkJICAxLCBmbGFzaC0+cGxhdGZvcm1fZGF0YS0+bWF4X2ZsYXNoX2ludGVuc2l0eSk7CisJZmxhc2gtPnRvcmNoX2ludGVuc2l0eSA9CisJCXY0bDJfY3RybF9uZXdfc3RkKCZmbGFzaC0+Y3RybHMsICZhZHAxNjUzX2N0cmxfb3BzLAorCQkJCSAgVjRMMl9DSURfRkxBU0hfVE9SQ0hfSU5URU5TSVRZLAorCQkJCSAgQURQMTY1M19UT1JDSF9JTlRFTlNJVFlfTUlOLAorCQkJCSAgZmxhc2gtPnBsYXRmb3JtX2RhdGEtPm1heF90b3JjaF9pbnRlbnNpdHksCisJCQkJICBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9TVEVQLAorCQkJCSAgZmxhc2gtPnBsYXRmb3JtX2RhdGEtPm1heF90b3JjaF9pbnRlbnNpdHkpOworCWZsYXNoLT5pbmRpY2F0b3JfaW50ZW5zaXR5ID0KKwkJdjRsMl9jdHJsX25ld19zdGQoJmZsYXNoLT5jdHJscywgJmFkcDE2NTNfY3RybF9vcHMsCisJCQkJICBWNEwyX0NJRF9GTEFTSF9JTkRJQ0FUT1JfSU5URU5TSVRZLAorCQkJCSAgQURQMTY1M19JTkRJQ0FUT1JfSU5URU5TSVRZX01JTiwKKwkJCQkgIGZsYXNoLT5wbGF0Zm9ybV9kYXRhLT5tYXhfaW5kaWNhdG9yX2ludGVuc2l0eSwKKwkJCQkgIEFEUDE2NTNfSU5ESUNBVE9SX0lOVEVOU0lUWV9TVEVQLAorCQkJCSAgQURQMTY1M19JTkRJQ0FUT1JfSU5URU5TSVRZX01JTik7CisJZmF1bHQgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmZmxhc2gtPmN0cmxzLCAmYWRwMTY1M19jdHJsX29wcywKKwkJCQkgIFY0TDJfQ0lEX0ZMQVNIX0ZBVUxULCAwLAorCQkJCSAgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0UKKwkJCQkgIHwgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFCisJCQkJICB8IFY0TDJfRkxBU0hfRkFVTFRfU0hPUlRfQ0lSQ1VJVCwgMCwgMCk7CisKKwlpZiAoZmxhc2gtPmN0cmxzLmVycm9yKQorCQlyZXR1cm4gZmxhc2gtPmN0cmxzLmVycm9yOworCisJZmF1bHQtPmlzX3ZvbGF0aWxlID0gMTsKKworCWZsYXNoLT5zdWJkZXYuY3RybF9oYW5kbGVyID0gJmZsYXNoLT5jdHJsczsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFY0TDIgc3ViZGV2IG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50CithZHAxNjUzX2luaXRfZGV2aWNlKHN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZmxhc2gtPnN1YmRldik7CisJaW50IHJ2YWw7CisKKwkvKiBDbGVhciBGQVVMVCByZWdpc3RlciBieSB3cml0aW5nIHplcm8gdG8gT1VUX1NFTCAqLworCXJ2YWwgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURQMTY1M19SRUdfT1VUX1NFTCwgMCk7CisJaWYgKHJ2YWwgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHdyaXRpbmcgZmF1bHQgcmVnaXN0ZXJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltdXRleF9sb2NrKCZmbGFzaC0+Y3RybHMubG9jayk7CisJLyogUmVzZXQgZmF1bHRzIGJlZm9yZSByZWFkaW5nIG5ldyBvbmVzLiAqLworCWZsYXNoLT5mYXVsdCA9IDA7CisJcnZhbCA9IGFkcDE2NTNfZ2V0X2ZhdWx0KGZsYXNoKTsKKwltdXRleF91bmxvY2soJmZsYXNoLT5jdHJscy5sb2NrKTsKKwlpZiAocnZhbCA+IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYXVsdHMgZGV0ZWN0ZWQ6IDB4JTEuMXhcbiIsIHJ2YWwpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltdXRleF9sb2NrKCZmbGFzaC0+Y3RybHMubG9jayk7CisJcnZhbCA9IGFkcDE2NTNfdXBkYXRlX2h3KGZsYXNoKTsKKwltdXRleF91bmxvY2soJmZsYXNoLT5jdHJscy5sb2NrKTsKKwlpZiAocnZhbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJhZHAxNjUzX3VwZGF0ZV9odyBmYWlsZWQgYXQgJXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19fYWRwMTY1M19zZXRfcG93ZXIoc3RydWN0IGFkcDE2NTNfZmxhc2ggKmZsYXNoLCBpbnQgb24pCit7CisJaW50IHJldDsKKworCXJldCA9IGZsYXNoLT5wbGF0Zm9ybV9kYXRhLT5wb3dlcigmZmxhc2gtPnN1YmRldiwgb24pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFvbikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBhZHAxNjUzX2luaXRfZGV2aWNlKGZsYXNoKTsKKwlpZiAocmV0IDwgMCkKKwkJZmxhc2gtPnBsYXRmb3JtX2RhdGEtPnBvd2VyKCZmbGFzaC0+c3ViZGV2LCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FkcDE2NTNfc2V0X3Bvd2VyKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LCBpbnQgb24pCit7CisJc3RydWN0IGFkcDE2NTNfZmxhc2ggKmZsYXNoID0gdG9fYWRwMTY1M19mbGFzaChzdWJkZXYpOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZmxhc2gtPnBvd2VyX2xvY2spOworCisJLyogSWYgdGhlIHBvd2VyIGNvdW50IGlzIG1vZGlmaWVkIGZyb20gMCB0byAhPSAwIG9yIGZyb20gIT0gMCB0byAwLAorCSAqIHVwZGF0ZSB0aGUgcG93ZXIgc3RhdGUuCisJICovCisJaWYgKGZsYXNoLT5wb3dlcl9jb3VudCA9PSAhb24pIHsKKwkJcmV0ID0gX19hZHAxNjUzX3NldF9wb3dlcihmbGFzaCwgISFvbik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBkb25lOworCX0KKworCS8qIFVwZGF0ZSB0aGUgcG93ZXIgY291bnQuICovCisJZmxhc2gtPnBvd2VyX2NvdW50ICs9IG9uID8gMSA6IC0xOworCVdBUk5fT04oZmxhc2gtPnBvd2VyX2NvdW50IDwgMCk7CisKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+cG93ZXJfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHAxNjUzX29wZW4oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCkKK3sKKwlyZXR1cm4gYWRwMTY1M19zZXRfcG93ZXIoc2QsIDEpOworfQorCitzdGF0aWMgaW50IGFkcDE2NTNfY2xvc2Uoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCkKK3sKKwlyZXR1cm4gYWRwMTY1M19zZXRfcG93ZXIoc2QsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkcDE2NTNfY29yZV9vcHMgPSB7CisJLnNfcG93ZXIgPSBhZHAxNjUzX3NldF9wb3dlciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGFkcDE2NTNfb3BzID0geworCS5jb3JlID0gJmFkcDE2NTNfY29yZV9vcHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVybmFsX29wcyBhZHAxNjUzX2ludGVybmFsX29wcyA9IHsKKwkub3BlbiA9IGFkcDE2NTNfb3BlbiwKKwkuY2xvc2UgPSBhZHAxNjUzX2Nsb3NlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEkyQyBkcml2ZXIKKyAqLworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IGFkcDE2NTNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCA9IHRvX2FkcDE2NTNfZmxhc2goc3ViZGV2KTsKKworCWlmICghZmxhc2gtPnBvd2VyX2NvdW50KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2FkcDE2NTNfc2V0X3Bvd2VyKGZsYXNoLCAwKTsKK30KKworc3RhdGljIGludCBhZHAxNjUzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCA9IHRvX2FkcDE2NTNfZmxhc2goc3ViZGV2KTsKKworCWlmICghZmxhc2gtPnBvd2VyX2NvdW50KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2FkcDE2NTNfc2V0X3Bvd2VyKGZsYXNoLCAxKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBhZHAxNjUzX3N1c3BlbmQJTlVMTAorI2RlZmluZSBhZHAxNjUzX3Jlc3VtZQlOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGludCBhZHAxNjUzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRldmlkKQoreworCXN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaDsKKwlpbnQgcmV0OworCisJZmxhc2ggPSBremFsbG9jKHNpemVvZigqZmxhc2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmxhc2ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmbGFzaC0+cGxhdGZvcm1fZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwltdXRleF9pbml0KCZmbGFzaC0+cG93ZXJfbG9jayk7CisKKwl2NGwyX2kyY19zdWJkZXZfaW5pdCgmZmxhc2gtPnN1YmRldiwgY2xpZW50LCAmYWRwMTY1M19vcHMpOworCWZsYXNoLT5zdWJkZXYuaW50ZXJuYWxfb3BzID0gJmFkcDE2NTNfaW50ZXJuYWxfb3BzOworCWZsYXNoLT5zdWJkZXYuZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7CisKKwlhZHAxNjUzX2luaXRfY29udHJvbHMoZmxhc2gpOworCisJcmV0ID0gbWVkaWFfZW50aXR5X2luaXQoJmZsYXNoLT5zdWJkZXYuZW50aXR5LCAwLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUoZmxhc2gpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2V4aXQgYWRwMTY1M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHAxNjUzX2ZsYXNoICpmbGFzaCA9IHRvX2FkcDE2NTNfZmxhc2goc3ViZGV2KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZmbGFzaC0+c3ViZGV2KTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZmbGFzaC0+Y3RybHMpOworCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZmbGFzaC0+c3ViZGV2LmVudGl0eSk7CisJa2ZyZWUoZmxhc2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWRwMTY1M19pZF90YWJsZVtdID0geworCXsgQURQMTY1M19OQU1FLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkcDE2NTNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWRwMTY1M19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBhZHAxNjUzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHAxNjUzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZHAxNjUzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gQURQMTY1M19OQU1FLAorCQkucG0JPSAmYWRwMTY1M19wbV9vcHMsCisJfSwKKwkucHJvYmUJCT0gYWRwMTY1M19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGFkcDE2NTNfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBhZHAxNjUzX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWRwMTY1M19pbml0KHZvaWQpCit7CisJaW50IHJ2YWw7CisKKwlydmFsID0gaTJjX2FkZF9kcml2ZXIoJmFkcDE2NTNfaTJjX2RyaXZlcik7CisJaWYgKHJ2YWwpCisJCXByaW50ayhLRVJOX0FMRVJUICIlczogZmFpbGVkIGF0IGkyY19hZGRfZHJpdmVyXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFkcDE2NTNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHAxNjUzX2kyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZHAxNjUzX2luaXQpOworbW9kdWxlX2V4aXQoYWRwMTY1M19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAbm9raWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFAxNjUzIExFRCBmbGFzaCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCmluZGV4IGY5ODlmMjguLmI2ZWQ0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KQEAgLTU0LDcgKzUzLDcgQEAKICAqLwogI2RlZmluZSBVU0VfSU5UCQkwCS8qIERvbid0IG1vZGlmeSAqLwogCi0jZGVmaW5lIFZFUlNJT04JIjAuMDQiCisjZGVmaW5lIFZFUlNJT04JIjAuMC41IgogCiAjZGVmaW5lIGFyX2lubChhZGRyKSAJCWlubCgodW5zaWduZWQgbG9uZykoYWRkcikpCiAjZGVmaW5lIGFyX291dGwodmFsLCBhZGRyKQlvdXRsKCh1bnNpZ25lZCBsb25nKSh2YWwpLCAodW5zaWduZWQgbG9uZykoYWRkcikpCkBAIC00MDQsNyArNDAzLDYgQEAKIAlzdHJsY3B5KHZjYXAtPmRyaXZlciwgYXItPnZkZXYubmFtZSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkodmNhcC0+Y2FyZCwgIkNvbG91ciBBUiBWR0EiLCBzaXplb2YodmNhcC0+Y2FyZCkpOwogCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sICJQbGF0Zm9ybSIsIHNpemVvZih2Y2FwLT5idXNfaW5mbykpOwotCXZjYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCA0KTsKIAl2Y2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwogfQpAQCAtODc5LDMgKzg3Nyw0IEBACiBNT0RVTEVfQVVUSE9SKCJUYWtlbyBUYWthaGFzaGkgPHRha2FoYXNoaS50YWtlb0ByZW5lc2FzLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ29sb3VyIEFSIE02NDI3OChWR0EpIGZvciBWaWRlbzRMaW51eCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F0bWVsLWlzaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdG1lbC1pc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg5ZjAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdG1lbC1pc2kuYwpAQCAtMCwwICsxLDEwNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQXRtZWwgQ29ycG9yYXRpb24KKyAqIEpvc2ggV3UsIDxqb3NoLnd1QGF0bWVsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBwcmV2aW91cyB3b3JrIGJ5IExhcnMgSGFyaW5nLCA8bGFycy5oYXJpbmdAYXRtZWwuY29tPgorICogYW5kIFNlZGppIEdhb3Vhb3UKKyAqIEJhc2VkIG9uIHRoZSBidHR2IGRyaXZlciBmb3IgQnQ4NDggd2l0aCByZXNwZWN0aXZlIGNvcHlyaWdodCBob2xkZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8bWVkaWEvYXRtZWwtaXNpLmg+CisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19tZWRpYWJ1cy5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+CisKKyNkZWZpbmUgTUFYX0JVRkZFUl9OVU0JCQkzMgorI2RlZmluZSBNQVhfU1VQUE9SVF9XSURUSAkJMjA0OAorI2RlZmluZSBNQVhfU1VQUE9SVF9IRUlHSFQJCTIwNDgKKyNkZWZpbmUgVklEX0xJTUlUX0JZVEVTCQkJKDE2ICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIE1JTl9GUkFNRV9SQVRFCQkJMTUKKyNkZWZpbmUgRlJBTUVfSU5URVJWQUxfTUlMTElfU0VDCSgxMDAwIC8gTUlOX0ZSQU1FX1JBVEUpCisKKy8qIElTSSBzdGF0ZXMgKi8KK2VudW0geworCUlTSV9TVEFURV9JRExFID0gMCwKKwlJU0lfU1RBVEVfUkVBRFksCisJSVNJX1NUQVRFX1dBSVRfU09GLAorfTsKKworLyogRnJhbWUgYnVmZmVyIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBmYmQgeworCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLworCXUzMiBmYl9hZGRyZXNzOworCS8qIERNQSBDb250cm9sIFJlZ2lzdGVyKG9ubHkgaW4gSElTSTIpICovCisJdTMyIGRtYV9jdHJsOworCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG5leHQgZmJkICovCisJdTMyIG5leHRfZmJkX2FkZHJlc3M7Cit9OworCitzdGF0aWMgdm9pZCBzZXRfZG1hX2N0cmwoc3RydWN0IGZiZCAqZmJfZGVzYywgdTMyIGN0cmwpCit7CisJZmJfZGVzYy0+ZG1hX2N0cmwgPSBjdHJsOworfQorCitzdHJ1Y3QgaXNpX2RtYV9kZXNjIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGZiZCAqcF9mYmQ7CisJdTMyIGZiZF9waHlzOworfTsKKworLyogRnJhbWUgYnVmZmVyIGRhdGEgKi8KK3N0cnVjdCBmcmFtZV9idWZmZXIgeworCXN0cnVjdCB2YjJfYnVmZmVyIHZiOworCXN0cnVjdCBpc2lfZG1hX2Rlc2MgKnBfZG1hX2Rlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGF0bWVsX2lzaSB7CisJLyogUHJvdGVjdHMgdGhlIGFjY2VzcyBvZiB2YXJpYWJsZXMgc2hhcmVkIHdpdGggdGhlIElTUiAqLworCXNwaW5sb2NrX3QJCQlsb2NrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCisJaW50CQkJCXNlcXVlbmNlOworCS8qIFN0YXRlIG9mIHRoZSBJU0kgbW9kdWxlIGluIGNhcHR1cmluZyBtb2RlICovCisJaW50CQkJCXN0YXRlOworCisJLyogV2FpdCBxdWV1ZSBmb3Igd2FpdGluZyBmb3IgU09GICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJCXZzeW5jX3dxOworCisJc3RydWN0IHZiMl9hbGxvY19jdHgJCSphbGxvY19jdHg7CisKKwkvKiBBbGxvY2F0ZSBkZXNjcmlwdG9ycyBmb3IgZG1hIGJ1ZmZlciB1c2UgKi8KKwlzdHJ1Y3QgZmJkCQkJKnBfZmJfZGVzY3JpcHRvcnM7CisJdTMyCQkJCWZiX2Rlc2NyaXB0b3JzX3BoeXM7CisJc3RydWN0CQkJCWxpc3RfaGVhZCBkbWFfZGVzY19oZWFkOworCXN0cnVjdCBpc2lfZG1hX2Rlc2MJCWRtYV9kZXNjW01BWF9CVUZGRVJfTlVNXTsKKworCXN0cnVjdCBjb21wbGV0aW9uCQljb21wbGV0ZTsKKwlzdHJ1Y3QgY2xrCQkJKnBjbGs7CisJdW5zaWduZWQgaW50CQkJaXJxOworCisJc3RydWN0IGlzaV9wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKKworCXN0cnVjdCBsaXN0X2hlYWQJCXZpZGVvX2J1ZmZlcl9saXN0OworCXN0cnVjdCBmcmFtZV9idWZmZXIJCSphY3RpdmU7CisKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UJKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0CQlzb2NfaG9zdDsKK307CisKK3N0YXRpYyB2b2lkIGlzaV93cml0ZWwoc3RydWN0IGF0bWVsX2lzaSAqaXNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGlzaS0+cmVncyArIHJlZyk7Cit9CitzdGF0aWMgdTMyIGlzaV9yZWFkbChzdHJ1Y3QgYXRtZWxfaXNpICppc2ksIHUzMiByZWcpCit7CisJcmV0dXJuIHJlYWRsKGlzaS0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2dlb21ldHJ5KHN0cnVjdCBhdG1lbF9pc2kgKmlzaSwgdTMyIHdpZHRoLAorCQkJdTMyIGhlaWdodCwgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUpCit7CisJdTMyIGNmZzIsIGNyOworCisJc3dpdGNoIChjb2RlKSB7CisJLyogWVVWLCBpbmNsdWRpbmcgZ3JleSAqLworCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZOF8xWDg6CisJCWNyID0gSVNJX0NGRzJfR1JBWVNDQUxFOworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfVVlWWThfMlg4OgorCQljciA9IElTSV9DRkcyX1lDQ19TV0FQX01PREVfMzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1ZZVVk4XzJYODoKKwkJY3IgPSBJU0lfQ0ZHMl9ZQ0NfU1dBUF9NT0RFXzI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDg6CisJCWNyID0gSVNJX0NGRzJfWUNDX1NXQVBfTU9ERV8xOworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4OgorCQljciA9IElTSV9DRkcyX1lDQ19TV0FQX0RFRkFVTFQ7CisJCWJyZWFrOworCS8qIFJHQiwgVE9ETyAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlzaV93cml0ZWwoaXNpLCBJU0lfQ1RSTCwgSVNJX0NUUkxfRElTKTsKKworCWNmZzIgPSBpc2lfcmVhZGwoaXNpLCBJU0lfQ0ZHMik7CisJY2ZnMiB8PSBjcjsKKwkvKiBTZXQgd2lkdGggKi8KKwljZmcyICY9IH4oSVNJX0NGRzJfSU1fSFNJWkVfTUFTSyk7CisJY2ZnMiB8PSAoKHdpZHRoIC0gMSkgPDwgSVNJX0NGRzJfSU1fSFNJWkVfT0ZGU0VUKSAmCisJCQlJU0lfQ0ZHMl9JTV9IU0laRV9NQVNLOworCS8qIFNldCBoZWlnaHQgKi8KKwljZmcyICY9IH4oSVNJX0NGRzJfSU1fVlNJWkVfTUFTSyk7CisJY2ZnMiB8PSAoKGhlaWdodCAtIDEpIDw8IElTSV9DRkcyX0lNX1ZTSVpFX09GRlNFVCkKKwkJCSYgSVNJX0NGRzJfSU1fVlNJWkVfTUFTSzsKKwlpc2lfd3JpdGVsKGlzaSwgSVNJX0NGRzIsIGNmZzIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdG1lbF9pc2lfaGFuZGxlX3N0cmVhbWluZyhzdHJ1Y3QgYXRtZWxfaXNpICppc2kpCit7CisJaWYgKGlzaS0+YWN0aXZlKSB7CisJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZpc2ktPmFjdGl2ZS0+dmI7CisJCXN0cnVjdCBmcmFtZV9idWZmZXIgKmJ1ZiA9IGlzaS0+YWN0aXZlOworCisJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7CisJCWRvX2dldHRpbWVvZmRheSgmdmItPnY0bDJfYnVmLnRpbWVzdGFtcCk7CisJCXZiLT52NGwyX2J1Zi5zZXF1ZW5jZSA9IGlzaS0+c2VxdWVuY2UrKzsKKwkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZpc2ktPnZpZGVvX2J1ZmZlcl9saXN0KSkgeworCQlpc2ktPmFjdGl2ZSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogc3RhcnQgbmV4dCBkbWEgZnJhbWUuICovCisJCWlzaS0+YWN0aXZlID0gbGlzdF9lbnRyeShpc2ktPnZpZGVvX2J1ZmZlcl9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCBmcmFtZV9idWZmZXIsIGxpc3QpOworCQlpc2lfd3JpdGVsKGlzaSwgSVNJX0RNQV9DX0RTQ1IsCisJCQlpc2ktPmFjdGl2ZS0+cF9kbWFfZGVzYy0+ZmJkX3BoeXMpOworCQlpc2lfd3JpdGVsKGlzaSwgSVNJX0RNQV9DX0NUUkwsCisJCQlJU0lfRE1BX0NUUkxfRkVUQ0ggfCBJU0lfRE1BX0NUUkxfRE9ORSk7CisJCWlzaV93cml0ZWwoaXNpLCBJU0lfRE1BX0NIRVIsIElTSV9ETUFfQ0hTUl9DX0NIKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBJU0kgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IGlzaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaSA9IGRldl9pZDsKKwl1MzIgc3RhdHVzLCBtYXNrLCBwZW5kaW5nOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZpc2ktPmxvY2spOworCisJc3RhdHVzID0gaXNpX3JlYWRsKGlzaSwgSVNJX1NUQVRVUyk7CisJbWFzayA9IGlzaV9yZWFkbChpc2ksIElTSV9JTlRNQVNLKTsKKwlwZW5kaW5nID0gc3RhdHVzICYgbWFzazsKKworCWlmIChwZW5kaW5nICYgSVNJX0NUUkxfU1JTVCkgeworCQljb21wbGV0ZSgmaXNpLT5jb21wbGV0ZSk7CisJCWlzaV93cml0ZWwoaXNpLCBJU0lfSU5URElTLCBJU0lfQ1RSTF9TUlNUKTsKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJfSBlbHNlIGlmIChwZW5kaW5nICYgSVNJX0NUUkxfRElTKSB7CisJCWNvbXBsZXRlKCZpc2ktPmNvbXBsZXRlKTsKKwkJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRESVMsIElTSV9DVFJMX0RJUyk7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0gZWxzZSB7CisJCWlmICgocGVuZGluZyAmIElTSV9TUl9WU1lOQykgJiYKKwkJCQkoaXNpLT5zdGF0ZSA9PSBJU0lfU1RBVEVfSURMRSkpIHsKKwkJCWlzaS0+c3RhdGUgPSBJU0lfU1RBVEVfUkVBRFk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmlzaS0+dnN5bmNfd3EpOworCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJCX0KKwkJaWYgKGxpa2VseShwZW5kaW5nICYgSVNJX1NSX0NYRlJfRE9ORSkpCisJCQlyZXQgPSBhdG1lbF9pc2lfaGFuZGxlX3N0cmVhbWluZyhpc2kpOworCX0KKworCXNwaW5fdW5sb2NrKCZpc2ktPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUJV0FJVF9JU0lfUkVTRVQJCTEKKyNkZWZpbmUJV0FJVF9JU0lfRElTQUJMRQkwCitzdGF0aWMgaW50IGF0bWVsX2lzaV93YWl0X3N0YXR1cyhzdHJ1Y3QgYXRtZWxfaXNpICppc2ksIGludCB3YWl0X3Jlc2V0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwkvKgorCSAqIFRoZSByZXNldCBvciBkaXNhYmxlIHdpbGwgb25seSBzdWNjZWVkIGlmIHdlIGhhdmUgYQorCSAqIHBpeGVsIGNsb2NrIGZyb20gdGhlIGNhbWVyYS4KKwkgKi8KKwlpbml0X2NvbXBsZXRpb24oJmlzaS0+Y29tcGxldGUpOworCisJaWYgKHdhaXRfcmVzZXQpIHsKKwkJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRFTiwgSVNJX0NUUkxfU1JTVCk7CisJCWlzaV93cml0ZWwoaXNpLCBJU0lfQ1RSTCwgSVNJX0NUUkxfU1JTVCk7CisJfSBlbHNlIHsKKwkJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRFTiwgSVNJX0NUUkxfRElTKTsKKwkJaXNpX3dyaXRlbChpc2ksIElTSV9DVFJMLCBJU0lfQ1RSTF9ESVMpOworCX0KKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlzaS0+Y29tcGxldGUsCisJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCWlmICh0aW1lb3V0ID09IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZpZGVvYnVmIG9wZXJhdGlvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHF1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKm5idWZmZXJzLAorCQkJCXVuc2lnbmVkIGludCAqbnBsYW5lcywgdW5zaWduZWQgbG9uZyBzaXplc1tdLAorCQkJCXZvaWQgKmFsbG9jX2N0eHNbXSkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHNvY19jYW1lcmFfZnJvbV92YjJxKHZxKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaSA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldCwgYnl0ZXNfcGVyX2xpbmU7CisKKwkvKiBSZXNldCBJU0kgKi8KKwlyZXQgPSBhdG1lbF9pc2lfd2FpdF9zdGF0dXMoaXNpLCBXQUlUX0lTSV9SRVNFVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihpY2QtPnBhcmVudCwgIlJlc2V0IElTSSB0aW1lZCBvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRESVMsIH4wVUwpOworCisJYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CisKKwlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQorCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CisKKwlzaXplID0gYnl0ZXNfcGVyX2xpbmUgKiBpY2QtPnVzZXJfaGVpZ2h0OworCisJaWYgKCEqbmJ1ZmZlcnMgfHwgKm5idWZmZXJzID4gTUFYX0JVRkZFUl9OVU0pCisJCSpuYnVmZmVycyA9IE1BWF9CVUZGRVJfTlVNOworCisJaWYgKHNpemUgKiAqbmJ1ZmZlcnMgPiBWSURfTElNSVRfQllURVMpCisJCSpuYnVmZmVycyA9IFZJRF9MSU1JVF9CWVRFUyAvIHNpemU7CisKKwkqbnBsYW5lcyA9IDE7CisJc2l6ZXNbMF0gPSBzaXplOworCWFsbG9jX2N0eHNbMF0gPSBpc2ktPmFsbG9jX2N0eDsKKworCWlzaS0+c2VxdWVuY2UgPSAwOworCWlzaS0+YWN0aXZlID0gTlVMTDsKKworCWRldl9kYmcoaWNkLT5wYXJlbnQsICIlcywgY291bnQ9JWQsIHNpemU9JWxkXG4iLCBfX2Z1bmNfXywKKwkJKm5idWZmZXJzLCBzaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgZnJhbWVfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBmcmFtZV9idWZmZXIsIHZiKTsKKworCWJ1Zi0+cF9kbWFfZGVzYyA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJmJ1Zi0+bGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBzb2NfY2FtZXJhX2Zyb21fdmIycSh2Yi0+dmIyX3F1ZXVlKTsKKwlzdHJ1Y3QgZnJhbWVfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBmcmFtZV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaSA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IGlzaV9kbWFfZGVzYyAqZGVzYzsKKwlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCisJCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CisKKwlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQorCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CisKKwlzaXplID0gYnl0ZXNfcGVyX2xpbmUgKiBpY2QtPnVzZXJfaGVpZ2h0OworCisJaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsKKwkJZGV2X2VycihpY2QtPnBhcmVudCwgIiVzIGRhdGEgd2lsbCBub3QgZml0IGludG8gcGxhbmUgKCVsdSA8ICVsdSlcbiIsCisJCQkJX19mdW5jX18sIHZiMl9wbGFuZV9zaXplKHZiLCAwKSwgc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCgmYnVmLT52YiwgMCwgc2l6ZSk7CisKKwlpZiAoIWJ1Zi0+cF9kbWFfZGVzYykgeworCQlpZiAobGlzdF9lbXB0eSgmaXNpLT5kbWFfZGVzY19oZWFkKSkgeworCQkJZGV2X2VycihpY2QtPnBhcmVudCwgIk5vdCBlbm91Z2ggZG1hIGRlc2NyaXB0b3JzLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCS8qIEdldCBhbiBhdmFpbGFibGUgZGVzY3JpcHRvciAqLworCQkJZGVzYyA9IGxpc3RfZW50cnkoaXNpLT5kbWFfZGVzY19oZWFkLm5leHQsCisJCQkJCQlzdHJ1Y3QgaXNpX2RtYV9kZXNjLCBsaXN0KTsKKwkJCS8qIERlbGV0ZSB0aGUgZGVzY3JpcHRvciBzaW5jZSBub3cgaXQgaXMgdXNlZCAqLworCQkJbGlzdF9kZWxfaW5pdCgmZGVzYy0+bGlzdCk7CisKKwkJCS8qIEluaXRpYWxpemUgdGhlIGRtYSBkZXNjcmlwdG9yICovCisJCQlkZXNjLT5wX2ZiZC0+ZmJfYWRkcmVzcyA9CisJCQkJCXZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKHZiLCAwKTsKKwkJCWRlc2MtPnBfZmJkLT5uZXh0X2ZiZF9hZGRyZXNzID0gMDsKKwkJCXNldF9kbWFfY3RybChkZXNjLT5wX2ZiZCwgSVNJX0RNQV9DVFJMX1dCKTsKKworCQkJYnVmLT5wX2RtYV9kZXNjID0gZGVzYzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2NsZWFudXAoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKKwlzdHJ1Y3QgYXRtZWxfaXNpICppc2kgPSBpY2ktPnByaXY7CisJc3RydWN0IGZyYW1lX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZnJhbWVfYnVmZmVyLCB2Yik7CisKKwkvKiBUaGlzIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlIG5vdyBhbmQgd2UgYWRkIHRvIGhlYWQgbGlzdCAqLworCWlmIChidWYtPnBfZG1hX2Rlc2MpCisJCWxpc3RfYWRkKCZidWYtPnBfZG1hX2Rlc2MtPmxpc3QsICZpc2ktPmRtYV9kZXNjX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9kbWEoc3RydWN0IGF0bWVsX2lzaSAqaXNpLCBzdHJ1Y3QgZnJhbWVfYnVmZmVyICpidWZmZXIpCit7CisJdTMyIGN0cmwsIGNmZzE7CisKKwljZmcxID0gaXNpX3JlYWRsKGlzaSwgSVNJX0NGRzEpOworCS8qIEVuYWJsZSBpcnE6IGN4ZnIgZm9yIHRoZSBjb2RlYyBwYXRoLCBweGZyIGZvciB0aGUgcHJldmlldyBwYXRoICovCisJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRFTiwKKwkJCUlTSV9TUl9DWEZSX0RPTkUgfCBJU0lfU1JfUFhGUl9ET05FKTsKKworCS8qIENoZWNrIGlmIGFscmVhZHkgaW4gYSBmcmFtZSAqLworCWlmIChpc2lfcmVhZGwoaXNpLCBJU0lfU1RBVFVTKSAmIElTSV9DVFJMX0NEQykgeworCQlkZXZfZXJyKGlzaS0+aWNkLT5wYXJlbnQsICJBbHJlYWR5IGluIGZyYW1lIGhhbmRsaW5nLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpc2lfd3JpdGVsKGlzaSwgSVNJX0RNQV9DX0RTQ1IsIGJ1ZmZlci0+cF9kbWFfZGVzYy0+ZmJkX3BoeXMpOworCWlzaV93cml0ZWwoaXNpLCBJU0lfRE1BX0NfQ1RSTCwgSVNJX0RNQV9DVFJMX0ZFVENIIHwgSVNJX0RNQV9DVFJMX0RPTkUpOworCWlzaV93cml0ZWwoaXNpLCBJU0lfRE1BX0NIRVIsIElTSV9ETUFfQ0hTUl9DX0NIKTsKKworCS8qIEVuYWJsZSBsaW5rZWQgbGlzdCAqLworCWNmZzEgfD0gaXNpLT5wZGF0YS0+ZnJhdGUgfCBJU0lfQ0ZHMV9ESVNDUjsKKworCS8qIEVuYWJsZSBjb2RlYyBwYXRoIGFuZCBJU0kgKi8KKwljdHJsID0gSVNJX0NUUkxfQ0RDIHwgSVNJX0NUUkxfRU47CisJaXNpX3dyaXRlbChpc2ksIElTSV9DVFJMLCBjdHJsKTsKKwlpc2lfd3JpdGVsKGlzaSwgSVNJX0NGRzEsIGNmZzEpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKKwlzdHJ1Y3QgYXRtZWxfaXNpICppc2kgPSBpY2ktPnByaXY7CisJc3RydWN0IGZyYW1lX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZnJhbWVfYnVmZmVyLCB2Yik7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNpLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmaXNpLT52aWRlb19idWZmZXJfbGlzdCk7CisKKwlpZiAoaXNpLT5hY3RpdmUgPT0gTlVMTCkgeworCQlpc2ktPmFjdGl2ZSA9IGJ1ZjsKKwkJc3RhcnRfZG1hKGlzaSwgYnVmKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNpLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodnEpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CisJc3RydWN0IGF0bWVsX2lzaSAqaXNpID0gaWNpLT5wcml2OworCisJdTMyIHNyID0gMDsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmaXNpLT5sb2NrKTsKKwlpc2ktPnN0YXRlID0gSVNJX1NUQVRFX0lETEU7CisJLyogQ2xlYXIgYW55IHBlbmRpbmcgU09GIGludGVycnVwdCAqLworCXNyID0gaXNpX3JlYWRsKGlzaSwgSVNJX1NUQVRVUyk7CisJLyogRW5hYmxlIFZTWU5DIGludGVycnVwdCBmb3IgU09GICovCisJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRFTiwgSVNJX1NSX1ZTWU5DKTsKKwlpc2lfd3JpdGVsKGlzaSwgSVNJX0NUUkwsIElTSV9DVFJMX0VOKTsKKwlzcGluX3VubG9ja19pcnEoJmlzaS0+bG9jayk7CisKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiV2FpdGluZyBmb3IgU09GXG4iKTsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaXNpLT52c3luY193cSwKKwkJCQkgICAgICAgaXNpLT5zdGF0ZSAhPSBJU0lfU1RBVEVfSURMRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChpc2ktPnN0YXRlICE9IElTSV9TVEFURV9SRUFEWSkKKwkJcmV0dXJuIC1FSU87CisKKwlzcGluX2xvY2tfaXJxKCZpc2ktPmxvY2spOworCWlzaS0+c3RhdGUgPSBJU0lfU1RBVEVfV0FJVF9TT0Y7CisJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRESVMsIElTSV9TUl9WU1lOQyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpc2ktPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFib3J0IHN0cmVhbWluZyBhbmQgd2FpdCBmb3IgbGFzdCBidWZmZXIgKi8KK3N0YXRpYyBpbnQgc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBzb2NfY2FtZXJhX2Zyb21fdmIycSh2cSk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKKwlzdHJ1Y3QgYXRtZWxfaXNpICppc2kgPSBpY2ktPnByaXY7CisJc3RydWN0IGZyYW1lX2J1ZmZlciAqYnVmLCAqbm9kZTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlzcGluX2xvY2tfaXJxKCZpc2ktPmxvY2spOworCWlzaS0+YWN0aXZlID0gTlVMTDsKKwkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVycyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYsIG5vZGUsICZpc2ktPnZpZGVvX2J1ZmZlcl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaXNpLT5sb2NrKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgRlJBTUVfSU5URVJWQUxfTUlMTElfU0VDICogSFo7CisJLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lLiAqLworCXdoaWxlICgoaXNpX3JlYWRsKGlzaSwgSVNJX1NUQVRVUykgJiBJU0lfQ1RSTF9DREMpICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJbXNsZWVwKDEpOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJZGV2X2VycihpY2QtPnBhcmVudCwKKwkJCSJUaW1lb3V0IHdhaXRpbmcgZm9yIGZpbmlzaGluZyBjb2RlYyByZXF1ZXN0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaXNpX3dyaXRlbChpc2ksIElTSV9JTlRESVMsCisJCQlJU0lfU1JfQ1hGUl9ET05FIHwgSVNJX1NSX1BYRlJfRE9ORSk7CisKKwkvKiBEaXNhYmxlIElTSSBhbmQgd2FpdCBmb3IgaXQgaXMgZG9uZSAqLworCXJldCA9IGF0bWVsX2lzaV93YWl0X3N0YXR1cyhpc2ksIFdBSVRfSVNJX0RJU0FCTEUpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGljZC0+cGFyZW50LCAiRGlzYWJsZSBJU0kgdGltZWQgb3V0XG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmIyX29wcyBpc2lfdmlkZW9fcW9wcyA9IHsKKwkucXVldWVfc2V0dXAJCT0gcXVldWVfc2V0dXAsCisJLmJ1Zl9pbml0CQk9IGJ1ZmZlcl9pbml0LAorCS5idWZfcHJlcGFyZQkJPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX2NsZWFudXAJCT0gYnVmZmVyX2NsZWFudXAsCisJLmJ1Zl9xdWV1ZQkJPSBidWZmZXJfcXVldWUsCisJLnN0YXJ0X3N0cmVhbWluZwk9IHN0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gc3RvcF9zdHJlYW1pbmcsCisJLndhaXRfcHJlcGFyZQkJPSBzb2NfY2FtZXJhX3VubG9jaywKKwkud2FpdF9maW5pc2gJCT0gc29jX2NhbWVyYV9sb2NrLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU09DIGNhbWVyYSBvcGVyYXRpb25zIGZvciB0aGUgZGV2aWNlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBpc2lfY2FtZXJhX2luaXRfdmlkZW9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwKKwkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUDsKKwlxLT5kcnZfcHJpdiA9IGljZDsKKwlxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IGZyYW1lX2J1ZmZlcik7CisJcS0+b3BzID0gJmlzaV92aWRlb19xb3BzOworCXEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOworCisJcmV0dXJuIHZiMl9xdWV1ZV9pbml0KHEpOworfQorCitzdGF0aWMgaW50IGlzaV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKKwkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIlBsYW4gdG8gc2V0IGZvcm1hdCAlZHglZFxuIiwKKwkJCXBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKworCW1mLndpZHRoCT0gcGl4LT53aWR0aDsKKwltZi5oZWlnaHQJPSBwaXgtPmhlaWdodDsKKwltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfbWJ1c19mbXQsICZtZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAobWYuY29kZSAhPSB4bGF0ZS0+Y29kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBjb25maWd1cmVfZ2VvbWV0cnkoaXNpLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCwgeGxhdGUtPmNvZGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGl4LT53aWR0aAkJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAkJPSBtZi5oZWlnaHQ7CisJcGl4LT5maWVsZAkJPSBtZi5maWVsZDsKKwlwaXgtPmNvbG9yc3BhY2UJCT0gbWYuY29sb3JzcGFjZTsKKwlpY2QtPmN1cnJlbnRfZm10CT0geGxhdGU7CisKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiRmluYWxseSBzZXQgZm9ybWF0ICVkeCVkXG4iLAorCQlwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzaV9jYW1lcmFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CisJdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOworCWlmIChwaXhmbXQgJiYgIXhsYXRlKSB7CisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbGltaXQgdG8gQXRtZWwgSVNJIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworCWlmIChwaXgtPmhlaWdodCA+IE1BWF9TVVBQT1JUX0hFSUdIVCkKKwkJcGl4LT5oZWlnaHQgPSBNQVhfU1VQUE9SVF9IRUlHSFQ7CisJaWYgKHBpeC0+d2lkdGggPiBNQVhfU1VQUE9SVF9XSURUSCkKKwkJcGl4LT53aWR0aCA9IE1BWF9TVVBQT1JUX1dJRFRIOworCisJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLworCW1mLndpZHRoCT0gcGl4LT53aWR0aDsKKwltZi5oZWlnaHQJPSBwaXgtPmhlaWdodDsKKwltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKKwltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBpeC0+d2lkdGgJPSBtZi53aWR0aDsKKwlwaXgtPmhlaWdodAk9IG1mLmhlaWdodDsKKwlwaXgtPmNvbG9yc3BhY2UJPSBtZi5jb2xvcnNwYWNlOworCisJc3dpdGNoIChtZi5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9BTlk6CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9OT05FOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGljZC0+cGFyZW50LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsCisJCQltZi5maWVsZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCBpc2lfY2FtZXJhX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkubmFtZQkJCT0gIlBhY2tlZCBZVVY0MjIgMTYgYml0IiwKKwkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCisJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAorCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAorCX0sCit9OworCisvKiBUaGlzIHdpbGwgYmUgY29ycmVjdGVkIGFzIHdlIGdldCBtb3JlIGZvcm1hdHMgKi8KK3N0YXRpYyBib29sIGlzaV9jYW1lcmFfcGFja2luZ19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQpCit7CisJcmV0dXJuCWZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HX05PTkUgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID09IDggJiYKKwkJIGZtdC0+cGFja2luZyA9PSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSkgfHwKKwkJKGZtdC0+Yml0c19wZXJfc2FtcGxlID4gOCAmJgorCQkgZm10LT5wYWNraW5nID09IFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWtlX2J1c19wYXJhbShzdHJ1Y3QgYXRtZWxfaXNpICppc2kpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKgorCSAqIFBsYXRmb3JtIHNwZWNpZmllZCBzeW5jaHJvbml6YXRpb24gYW5kIHBpeGVsIGNsb2NrIHBvbGFyaXRpZXMgYXJlCisJICogb25seSBhIHJlY29tbWVuZGF0aW9uIGFuZCBhcmUgb25seSB1c2VkIGR1cmluZyBwcm9iaW5nLiBBdG1lbCBJU0kKKwkgKiBjYW1lcmEgaW50ZXJmYWNlIG9ubHkgd29ya3MgaW4gbWFzdGVyIG1vZGUsIGkuZS4sIHVzZXMgSFNZTkMgYW5kCisJICogVlNZTkMgc2lnbmFscyBmcm9tIHRoZSBzZW5zb3IKKwkgKi8KKwlmbGFncyA9IFNPQ0FNX01BU1RFUiB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAorCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIOworCisJaWYgKGlzaS0+cGRhdGEtPmRhdGFfd2lkdGhfZmxhZ3MgJiBJU0lfREFUQVdJRFRIXzEwKQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlpZiAoaXNpLT5wZGF0YS0+ZGF0YV93aWR0aF9mbGFncyAmIElTSV9EQVRBV0lEVEhfOCkKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSykKKwkJcmV0dXJuIGZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNpX2NhbWVyYV90cnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgICB1bnNpZ25lZCBjaGFyIGJ1c3dpZHRoKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CisJc3RydWN0IGF0bWVsX2lzaSAqaXNpID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgY2FtZXJhX2ZsYWdzOworCWludCByZXQ7CisKKwljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CisJcmV0ID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCisJCQkJCW1ha2VfYnVzX3BhcmFtKGlzaSkpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGlzaV9jYW1lcmFfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCSAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlpbnQgZm9ybWF0cyA9IDAsIHJldDsKKwkvKiBzZW5zb3IgZm9ybWF0ICovCisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CisJLyogc29jIGNhbWVyYSBob3N0IGZvcm1hdCAqLworCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZm10OworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fbWJ1c19mbXQsIGlkeCwgJmNvZGUpOworCWlmIChyZXQgPCAwKQorCQkvKiBObyBtb3JlIGZvcm1hdHMgKi8KKwkJcmV0dXJuIDA7CisKKwlmbXQgPSBzb2NfbWJ1c19nZXRfZm10ZGVzYyhjb2RlKTsKKwlpZiAoIWZtdCkgeworCQlkZXZfZXJyKGljZC0+cGFyZW50LAorCQkJIkludmFsaWQgZm9ybWF0IGNvZGUgIyV1OiAlZFxuIiwgaWR4LCBjb2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVGhpcyBhbHNvIGNoZWNrcyBzdXBwb3J0IGZvciB0aGUgcmVxdWVzdGVkIGJpdHMtcGVyLXNhbXBsZSAqLworCXJldCA9IGlzaV9jYW1lcmFfdHJ5X2J1c19wYXJhbShpY2QsIGZtdC0+Yml0c19wZXJfc2FtcGxlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGljZC0+cGFyZW50LAorCQkJIkZhaWwgdG8gdHJ5IHRoZSBidXMgcGFyYW1ldGVycy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfVVlWWThfMlg4OgorCWNhc2UgVjRMMl9NQlVTX0ZNVF9WWVVZOF8yWDg6CisJY2FzZSBWNEwyX01CVVNfRk1UX1lVWVY4XzJYODoKKwljYXNlIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4OgorCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10CT0gJmlzaV9jYW1lcmFfZm9ybWF0c1swXTsKKwkJCXhsYXRlLT5jb2RlCT0gY29kZTsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKGljZC0+cGFyZW50LCAiUHJvdmlkaW5nIGZvcm1hdCAlcyB1c2luZyBjb2RlICVkXG4iLAorCQkJCWlzaV9jYW1lcmFfZm9ybWF0c1swXS5uYW1lLCBjb2RlKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoIWlzaV9jYW1lcmFfcGFja2luZ19zdXBwb3J0ZWQoZm10KSkKKwkJCXJldHVybiAwOworCQlpZiAoeGxhdGUpCisJCQlkZXZfZGJnKGljZC0+cGFyZW50LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJCWZtdC0+bmFtZSk7CisJfQorCisJLyogR2VuZXJpYyBwYXNzLXRocm91Z2ggKi8KKwlmb3JtYXRzKys7CisJaWYgKHhsYXRlKSB7CisJCXhsYXRlLT5ob3N0X2ZtdAk9IGZtdDsKKwkJeGxhdGUtPmNvZGUJPSBjb2RlOworCQl4bGF0ZSsrOworCX0KKworCXJldHVybiBmb3JtYXRzOworfQorCisvKiBDYWxsZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCitzdGF0aWMgaW50IGlzaV9jYW1lcmFfYWRkX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaSA9IGljaS0+cHJpdjsKKwlpbnQgcmV0OworCisJaWYgKGlzaS0+aWNkKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gY2xrX2VuYWJsZShpc2ktPnBjbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpc2ktPmljZCA9IGljZDsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiQXRtZWwgSVNJIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOworCXJldHVybiAwOworfQorLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgaXNpX2NhbWVyYV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CisJc3RydWN0IGF0bWVsX2lzaSAqaXNpID0gaWNpLT5wcml2OworCisJQlVHX09OKGljZCAhPSBpc2ktPmljZCk7CisKKwljbGtfZGlzYWJsZShpc2ktPnBjbGspOworCWlzaS0+aWNkID0gTlVMTDsKKworCWRldl9kYmcoaWNkLT5wYXJlbnQsICJBdG1lbCBJU0kgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwkJIGljZC0+ZGV2bnVtKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpc2lfY2FtZXJhX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZiMl9wb2xsKCZpY2QtPnZiMl92aWRxLCBmaWxlLCBwdCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpX2NhbWVyYV9xdWVyeWNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2ksCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cmNweShjYXAtPmRyaXZlciwgImF0bWVsLWlzaSIpOworCXN0cmNweShjYXAtPmNhcmQsICJBdG1lbCBJbWFnZSBTZW5zb3IgSW50ZXJmYWNlIik7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfU1RSRUFNSU5HKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc2lfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHUzMiBwaXhmbXQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKKwlzdHJ1Y3QgYXRtZWxfaXNpICppc2kgPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOworCWludCByZXQ7CisJdTMyIGNmZzEgPSAwOworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJYnVzX2ZsYWdzID0gbWFrZV9idXNfcGFyYW0oaXNpKTsKKwljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiRmxhZ3MgY2FtOiAweCVseCBob3N0OiAweCVseCBjb21tb246IDB4JWx4XG4iLAorCQljYW1lcmFfZmxhZ3MsIGJ1c19mbGFncywgY29tbW9uX2ZsYWdzKTsKKwlpZiAoIWNvbW1vbl9mbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNYWtlIGNob2lzZXMsIGJhc2VkIG9uIHBsYXRmb3JtIHByZWZlcmVuY2VzICovCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChpc2ktPnBkYXRhLT5oc3luY19hY3RfbG93KQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9IU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9IU1lOQ19BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0gpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKSkgeworCQlpZiAoaXNpLT5wZGF0YS0+dnN5bmNfYWN0X2xvdykKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fVlNZTkNfQUNUSVZFX0hJR0g7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fVlNZTkNfQUNUSVZFX0xPVzsKKwl9CisKKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORykgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpKSB7CisJCWlmIChpc2ktPnBkYXRhLT5wY2xrX2FjdF9mYWxsaW5nKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkc7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKKwl9CisKKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIGNvbW1vbl9mbGFncyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2RiZyhpY2QtPnBhcmVudCwgIkNhbWVyYSBzZXRfYnVzX3BhcmFtKCVseCkgcmV0dXJuZWQgJWRcbiIsCisJCQljb21tb25fZmxhZ3MsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogc2V0IGJ1cyBwYXJhbSBmb3IgSVNJICovCisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpCisJCWNmZzEgfD0gSVNJX0NGRzFfSFNZTkNfUE9MX0FDVElWRV9MT1c7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCWNmZzEgfD0gSVNJX0NGRzFfVlNZTkNfUE9MX0FDVElWRV9MT1c7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpCisJCWNmZzEgfD0gSVNJX0NGRzFfUElYQ0xLX1BPTF9BQ1RJVkVfRkFMTElORzsKKworCWlmIChpc2ktPnBkYXRhLT5oYXNfZW1iX3N5bmMpCisJCWNmZzEgfD0gSVNJX0NGRzFfRU1CX1NZTkM7CisJaWYgKGlzaS0+cGRhdGEtPmlzaV9mdWxsX21vZGUpCisJCWNmZzEgfD0gSVNJX0NGRzFfRlVMTF9NT0RFOworCisJaXNpX3dyaXRlbChpc2ksIElTSV9DVFJMLCBJU0lfQ1RSTF9ESVMpOworCWlzaV93cml0ZWwoaXNpLCBJU0lfQ0ZHMSwgY2ZnMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIGlzaV9zb2NfY2FtZXJhX2hvc3Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYWRkCQk9IGlzaV9jYW1lcmFfYWRkX2RldmljZSwKKwkucmVtb3ZlCQk9IGlzaV9jYW1lcmFfcmVtb3ZlX2RldmljZSwKKwkuc2V0X2ZtdAk9IGlzaV9jYW1lcmFfc2V0X2ZtdCwKKwkudHJ5X2ZtdAk9IGlzaV9jYW1lcmFfdHJ5X2ZtdCwKKwkuZ2V0X2Zvcm1hdHMJPSBpc2lfY2FtZXJhX2dldF9mb3JtYXRzLAorCS5pbml0X3ZpZGVvYnVmMgk9IGlzaV9jYW1lcmFfaW5pdF92aWRlb2J1ZiwKKwkucG9sbAkJPSBpc2lfY2FtZXJhX3BvbGwsCisJLnF1ZXJ5Y2FwCT0gaXNpX2NhbWVyYV9xdWVyeWNhcCwKKwkuc2V0X2J1c19wYXJhbQk9IGlzaV9jYW1lcmFfc2V0X2J1c19wYXJhbSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0bWVsX2lzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICpzb2NfaG9zdCA9IHRvX3NvY19jYW1lcmFfaG9zdCgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfaXNpICppc2kgPSBjb250YWluZXJfb2Yoc29jX2hvc3QsCisJCQkJCXN0cnVjdCBhdG1lbF9pc2ksIHNvY19ob3N0KTsKKworCWZyZWVfaXJxKGlzaS0+aXJxLCBpc2kpOworCXNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKHNvY19ob3N0KTsKKwl2YjJfZG1hX2NvbnRpZ19jbGVhbnVwX2N0eChpc2ktPmFsbG9jX2N0eCk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJCXNpemVvZihzdHJ1Y3QgZmJkKSAqIE1BWF9CVUZGRVJfTlVNLAorCQkJaXNpLT5wX2ZiX2Rlc2NyaXB0b3JzLAorCQkJaXNpLT5mYl9kZXNjcmlwdG9yc19waHlzKTsKKworCWlvdW5tYXAoaXNpLT5yZWdzKTsKKwljbGtfcHV0KGlzaS0+cGNsayk7CisJa2ZyZWUoaXNpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9pc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBhdG1lbF9pc2kgKmlzaTsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqc29jX2hvc3Q7CisJc3RydWN0IGlzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5kYXRhX3dpZHRoX2ZsYWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJObyBjb25maWcgYXZhaWxhYmxlIGZvciBBdG1lbCBJU0lcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpCisJCXJldHVybiAtRU5YSU87CisKKwlwY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaXNpX2NsayIpOworCWlmIChJU19FUlIocGNsaykpCisJCXJldHVybiBQVFJfRVJSKHBjbGspOworCisJaXNpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0bWVsX2lzaSksIEdGUF9LRVJORUwpOworCWlmICghaXNpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGFsbG9jYXRlIGludGVyZmFjZSFcbiIpOworCQlnb3RvIGVycl9hbGxvY19pc2k7CisJfQorCisJaXNpLT5wY2xrID0gcGNsazsKKwlpc2ktPnBkYXRhID0gcGRhdGE7CisJaXNpLT5hY3RpdmUgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZpc2ktPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlzaS0+dnN5bmNfd3EpOworCUlOSVRfTElTVF9IRUFEKCZpc2ktPnZpZGVvX2J1ZmZlcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaXNpLT5kbWFfZGVzY19oZWFkKTsKKworCWlzaS0+cF9mYl9kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgZmJkKSAqIE1BWF9CVUZGRVJfTlVNLAorCQkJCSZpc2ktPmZiX2Rlc2NyaXB0b3JzX3BoeXMsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFpc2ktPnBfZmJfZGVzY3JpcHRvcnMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgZGVzY3JpcHRvcnMhXG4iKTsKKwkJZ290byBlcnJfYWxsb2NfZGVzY3JpcHRvcnM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJfTlVNOyBpKyspIHsKKwkJaXNpLT5kbWFfZGVzY1tpXS5wX2ZiZCA9IGlzaS0+cF9mYl9kZXNjcmlwdG9ycyArIGk7CisJCWlzaS0+ZG1hX2Rlc2NbaV0uZmJkX3BoeXMgPSBpc2ktPmZiX2Rlc2NyaXB0b3JzX3BoeXMgKworCQkJCQlpICogc2l6ZW9mKHN0cnVjdCBmYmQpOworCQlsaXN0X2FkZCgmaXNpLT5kbWFfZGVzY1tpXS5saXN0LCAmaXNpLT5kbWFfZGVzY19oZWFkKTsKKwl9CisKKwlpc2ktPmFsbG9jX2N0eCA9IHZiMl9kbWFfY29udGlnX2luaXRfY3R4KCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoaXNpLT5hbGxvY19jdHgpKSB7CisJCXJldCA9IFBUUl9FUlIoaXNpLT5hbGxvY19jdHgpOworCQlnb3RvIGVycl9hbGxvY19jdHg7CisJfQorCisJaXNpLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CisJaWYgKCFpc2ktPnJlZ3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlpc2lfd3JpdGVsKGlzaSwgSVNJX0NUUkwsIElTSV9DVFJMX0RJUyk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXJldCA9IGlycTsKKwkJZ290byBlcnJfcmVxX2lycTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlzaV9pbnRlcnJ1cHQsIDAsICJpc2kiLCBpc2kpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOworCQlnb3RvIGVycl9yZXFfaXJxOworCX0KKwlpc2ktPmlycSA9IGlycTsKKworCXNvY19ob3N0CQk9ICZpc2ktPnNvY19ob3N0OworCXNvY19ob3N0LT5kcnZfbmFtZQk9ICJpc2ktY2FtZXJhIjsKKwlzb2NfaG9zdC0+b3BzCQk9ICZpc2lfc29jX2NhbWVyYV9ob3N0X29wczsKKwlzb2NfaG9zdC0+cHJpdgkJPSBpc2k7CisJc29jX2hvc3QtPnY0bDJfZGV2LmRldgk9ICZwZGV2LT5kZXY7CisJc29jX2hvc3QtPm5yCQk9IHBkZXYtPmlkOworCisJcmV0ID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHNvY19ob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWdpc3RlciBzb2MgY2FtZXJhIGhvc3RcbiIpOworCQlnb3RvIGVycl9yZWdpc3Rlcl9zb2NfY2FtZXJhX2hvc3Q7CisJfQorCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXJfc29jX2NhbWVyYV9ob3N0OgorCWZyZWVfaXJxKGlzaS0+aXJxLCBpc2kpOworZXJyX3JlcV9pcnE6CisJaW91bm1hcChpc2ktPnJlZ3MpOworZXJyX2lvcmVtYXA6CisJdmIyX2RtYV9jb250aWdfY2xlYW51cF9jdHgoaXNpLT5hbGxvY19jdHgpOworZXJyX2FsbG9jX2N0eDoKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBmYmQpICogTUFYX0JVRkZFUl9OVU0sCisJCQlpc2ktPnBfZmJfZGVzY3JpcHRvcnMsCisJCQlpc2ktPmZiX2Rlc2NyaXB0b3JzX3BoeXMpOworZXJyX2FsbG9jX2Rlc2NyaXB0b3JzOgorCWtmcmVlKGlzaSk7CitlcnJfYWxsb2NfaXNpOgorCWNsa19wdXQoaXNpLT5wY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWVsX2lzaV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGF0bWVsX2lzaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0bWVsX2lzaV9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZSA9ICJhdG1lbF9pc2kiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfaXNpX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuICBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2lzaV9kcml2ZXIsICZhdG1lbF9pc2lfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfaXNpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtZWxfaXNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhdG1lbF9pc2lfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoYXRtZWxfaXNpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKb3NoIFd1IDxqb3NoLnd1QGF0bWVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGhlIFY0TDIgZHJpdmVyIGZvciBBdG1lbCBMaW51eCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwppbmRleCBjYTM0MmU0Li4xZTRjZTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCkBAIC0yOTIsMyArMjkyLDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdXZpdGVrIEFVMDgyOCBiYXNlZCBwcm9kdWN0cyIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMC4yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCmluZGV4IGMwM2ViMjkuLjBiM2U0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC00Myw4ICs0Miw2IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYXUwODI4X3N5c2ZzX2xvY2spOwogCi0jZGVmaW5lIEFVMDgyOF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJVmlkZW9idWYgb3BlcmF0aW9ucwogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNTQsOCArMTI1MSw2IEBACiAJc3RybGNweShjYXAtPmNhcmQsIGRldi0+Ym9hcmQubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCi0JY2FwLT52ZXJzaW9uID0gQVUwODI4X1ZFUlNJT05fQ09ERTsKLQogCS8qc2V0IHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfVkJJX0NBUFRVUkUgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCAzYzllNmM3Li41YjE1ZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMjg5MiwxMyArMjg5MiwxMCBAQAogewogCXVuc2lnbmVkIGludCBncGlvYml0czsKIAlpbnQgaSx0eXBlOwotCXVuc2lnbmVkIHNob3J0IHRtcDsKIAogCS8qIHJlYWQgUENJIHN1YnN5c3RlbSBJRCAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJ0di0+Yy5wY2ksIFBDSV9TVUJTWVNURU1fSUQsICZ0bXApOwotCWJ0di0+Y2FyZGlkID0gdG1wIDw8IDE2OwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJ0di0+Yy5wY2ksIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELCAmdG1wKTsKLQlidHYtPmNhcmRpZCB8PSB0bXA7CisJYnR2LT5jYXJkaWQgID0gYnR2LT5jLnBjaS0+c3Vic3lzdGVtX2RldmljZSA8PCAxNjsKKwlidHYtPmNhcmRpZCB8PSBidHYtPmMucGNpLT5zdWJzeXN0ZW1fdmVuZG9yOwogCiAJaWYgKDAgIT0gYnR2LT5jYXJkaWQgJiYgMHhmZmZmZmZmZiAhPSBidHYtPmNhcmRpZCkgewogCQkvKiBsb29rIGZvciB0aGUgY2FyZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDgzNGE0ODMuLjE0NDQ0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3NhYTY1ODguaD4KIAorI2RlZmluZSBCVFRWX1ZFUlNJT04gIjAuOS4xOSIKIAogdW5zaWduZWQgaW50IGJ0dHZfbnVtOwkJCS8qIG51bWJlciBvZiBCdDg0OHMgaW4gdXNlICovCiBzdHJ1Y3QgYnR0diAqYnR0dnNbQlRUVl9NQVhdOwpAQCAtMTYzLDYgKzE2NCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImJ0dHYgLSB2NGwvdjRsMiBkcml2ZXIgbW9kdWxlIGZvciBidDg0OC84NzggYmFzZWQgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlJhbHBoIE1ldHpsZXIgJiBNYXJjdXMgTWV0emxlciAmIEdlcmQgS25vcnIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEJUVFZfVkVSU0lPTik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzeXNmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjYxNiw3ICsyNjE4LDYgQEAKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgYnR2LT52aWRlb19kZXYtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksCiAJCSAiUENJOiVzIiwgcGNpX25hbWUoYnR2LT5jLnBjaSkpOwotCWNhcC0+dmVyc2lvbiA9IEJUVFZfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0KIAkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKQEAgLTM0MTYsNyArMzQxNyw2IEBACiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiYnR0diIpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBidHYtPnJhZGlvX2Rldi0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXNwcmludGYoY2FwLT5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKGJ0di0+Yy5wY2kpKTsKLQljYXAtPnZlcnNpb24gPSBCVFRWX1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCiAJcmV0dXJuIDA7CkBAIC00NTg1LDE0ICs0NTg1LDggQEAKIAogCWJ0dHZfbnVtID0gMDsKIAotCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKLQkgICAgICAgKEJUVFZfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChCVFRWX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCi0JICAgICAgIEJUVFZfVkVSU0lPTl9DT0RFICYgMHhmZik7Ci0jaWZkZWYgU05BUFNIT1QKLQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAotCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwotI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogZHJpdmVyIHZlcnNpb24gJXMgbG9hZGVkXG4iLAorCSAgICAgICBCVFRWX1ZFUlNJT04pOwogCWlmIChnYnVmZmVycyA8IDIgfHwgZ2J1ZmZlcnMgPiBWSURFT19NQVhfRlJBTUUpCiAJCWdidWZmZXJzID0gMjsKIAlpZiAoZ2J1ZnNpemUgPiBCVFRWX01BWF9GQlVGKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IDliNzc2ZmEuLjMxOGVkZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTI1LDkgKzI1LDYgQEAKICNpZm5kZWYgX0JUVFZQX0hfCiAjZGVmaW5lIF9CVFRWUF9IXwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2RlZmluZSBCVFRWX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLDksMTgpCi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmMKaW5kZXggYzExOTM1MC4uZjA5ZGY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmMKQEAgLTcxLDcgKzcxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC02NDcsNyArNjQ2LDYgQEAKIAlzdHJsY3B5KHZjYXAtPmRyaXZlciwgcWNhbS0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkodmNhcC0+Y2FyZCwgIkImVyBRdWlja2NhbSIsIHNpemVvZih2Y2FwLT5jYXJkKSk7CiAJc3RybGNweSh2Y2FwLT5idXNfaW5mbywgInBhcnBvcnQiLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKLQl2Y2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMik7CiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg5NSw2ICs4OTMsNyBAQAogCiAJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KSA8IDApIHsKIAkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlrZnJlZShxY2FtKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMDkyLDMgKzEwOTEsNCBAQAogbW9kdWxlX2V4aXQoZXhpdF9id19xY2Ftcyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjAuMyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKaW5kZXggMjRmYzAwOS4uY2Q4ZmYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgpAQCAtNTE3LDcgKzUxNiw2IEBACiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIHFjYW0tPnY0bDJfZGV2Lm5hbWUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsICJDb2xvciBRdWlja2NhbSIsIHNpemVvZih2Y2FwLT5jYXJkKSk7CiAJc3RybGNweSh2Y2FwLT5idXNfaW5mbywgInBhcnBvcnQiLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKLQl2Y2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMyk7CiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc1Miw2ICs3NTAsNyBAQAogCiAJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KSA8IDApIHsKIAkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlrZnJlZShxY2FtKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04ODYsNiArODg1LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTihCQU5ORVIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMC40Iik7CiAKIG1vZHVsZV9pbml0KGNxY2FtX2luaXQpOwogbW9kdWxlX2V4aXQoY3FjYW1fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy1yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy1yZWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMmE4N2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMtcmVncy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIG04OGFscDAxIGNhbWVyYSBpbnRlcmZhY2UuICBPZmZzZXRzIGluIGJ5dGVzCi0gKiBhcyBnaXZlbiBpbiB0aGUgc3BlYy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNiBPbmUgTGFwdG9wIFBlciBDaGlsZCBBc3NvY2lhdGlvbiwgSW5jLgotICoKLSAqIFdyaXR0ZW4gYnkgSm9uYXRoYW4gQ29yYmV0LCBjb3JiZXRAbHduLm5ldC4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCi0gKi8KLSNkZWZpbmUgUkVHX1kwQkFSCTB4MDAKLSNkZWZpbmUgUkVHX1kxQkFSCTB4MDQKLSNkZWZpbmUgUkVHX1kyQkFSCTB4MDgKLS8qIC4uLiAqLwotCi0jZGVmaW5lIFJFR19JTUdQSVRDSAkweDI0CS8qIEltYWdlIHBpdGNoIHJlZ2lzdGVyICovCi0jZGVmaW5lICAgSU1HUF9ZUF9TSEZUCSAgMgkJLyogWSBwaXRjaCBwYXJhbXMgKi8KLSNkZWZpbmUgICBJTUdQX1lQX01BU0sJICAweDAwMDAzZmZjCS8qIFkgcGl0Y2ggZmllbGQgKi8KLSNkZWZpbmUJICBJTUdQX1VWUF9TSEZUCSAgMTgJCS8qIFVWIHBpdGNoIChwbGFuYXIpICovCi0jZGVmaW5lICAgSU1HUF9VVlBfTUFTSyAgIDB4M2ZmYzAwMDAKLSNkZWZpbmUgUkVHX0lSUVNUQVRSQVcJMHgyOAkvKiBSQVcgSVJRIFN0YXR1cyAqLwotI2RlZmluZSAgIElSUV9FT0YwCSAgMHgwMDAwMDAwMQkvKiBFbmQgb2YgZnJhbWUgMCAqLwotI2RlZmluZSAgIElSUV9FT0YxCSAgMHgwMDAwMDAwMgkvKiBFbmQgb2YgZnJhbWUgMSAqLwotI2RlZmluZSAgIElSUV9FT0YyCSAgMHgwMDAwMDAwNAkvKiBFbmQgb2YgZnJhbWUgMiAqLwotI2RlZmluZSAgIElSUV9TT0YwCSAgMHgwMDAwMDAwOAkvKiBTdGFydCBvZiBmcmFtZSAwICovCi0jZGVmaW5lICAgSVJRX1NPRjEJICAweDAwMDAwMDEwCS8qIFN0YXJ0IG9mIGZyYW1lIDEgKi8KLSNkZWZpbmUgICBJUlFfU09GMgkgIDB4MDAwMDAwMjAJLyogU3RhcnQgb2YgZnJhbWUgMiAqLwotI2RlZmluZSAgIElSUV9PVkVSRkxPVwkgIDB4MDAwMDAwNDAJLyogRklGTyBvdmVyZmxvdyAqLwotI2RlZmluZSAgIElSUV9UV1NJVwkgIDB4MDAwMTAwMDAJLyogVFdTSSAoc21idXMpIHdyaXRlICovCi0jZGVmaW5lICAgSVJRX1RXU0lSCSAgMHgwMDAyMDAwMAkvKiBUV1NJIHJlYWQgKi8KLSNkZWZpbmUgICBJUlFfVFdTSUUJICAweDAwMDQwMDAwCS8qIFRXU0kgZXJyb3IgKi8KLSNkZWZpbmUgICBUV1NJSVJRUyAoSVJRX1RXU0lXfElSUV9UV1NJUnxJUlFfVFdTSUUpCi0jZGVmaW5lICAgRlJBTUVJUlFTIChJUlFfRU9GMHxJUlFfRU9GMXxJUlFfRU9GMnxJUlFfU09GMHxJUlFfU09GMXxJUlFfU09GMikKLSNkZWZpbmUgICBBTExJUlFTIChUV1NJSVJRU3xGUkFNRUlSUVN8SVJRX09WRVJGTE9XKQotI2RlZmluZSBSRUdfSVJRTUFTSwkweDJjCS8qIElSUSBtYXNrIC0gc2FtZSBiaXRzIGFzIElSUVNUQVQgKi8KLSNkZWZpbmUgUkVHX0lSUVNUQVQJMHgzMAkvKiBJUlEgc3RhdHVzIC8gY2xlYXIgKi8KLQotI2RlZmluZSBSRUdfSU1HU0laRQkweDM0CS8qIEltYWdlIHNpemUgKi8KLSNkZWZpbmUgIElNR1NaX1ZfTUFTSwkgIDB4MWZmZjAwMDAKLSNkZWZpbmUgIElNR1NaX1ZfU0hJRlQJICAxNgotI2RlZmluZQkgSU1HU1pfSF9NQVNLCSAgMHgwMDAwM2ZmZgotI2RlZmluZSBSRUdfSU1HT0ZGU0VUCTB4MzgJLyogSU1hZ2Ugb2Zmc2V0ICovCi0KLSNkZWZpbmUgUkVHX0NUUkwwCTB4M2MJLyogQ29udHJvbCAwICovCi0jZGVmaW5lICAgQzBfRU5BQkxFCSAgMHgwMDAwMDAwMQkvKiBNYWtlcyB0aGUgd2hvbGUgdGhpbmcgZ28gKi8KLQotLyogTWFzayBmb3IgYWxsIHRoZSBmb3JtYXQgYml0cyAqLwotI2RlZmluZSAgIEMwX0RGX01BU0sJICAweDAwZmZmZmZjICAgIC8qIEJpdHMgMi0yMyAqLwotCi0vKiBSR0Igb3JkZXJpbmcgKi8KLSNkZWZpbmUgICBDMF9SR0I0X1JHQlgJICAweDAwMDAwMDAwCi0jZGVmaW5lCSAgQzBfUkdCNF9YUkdCCSAgMHgwMDAwMDAwNAotI2RlZmluZQkgIEMwX1JHQjRfQkdSWAkgIDB4MDAwMDAwMDgKLSNkZWZpbmUgICBDMF9SR0I0X1hCR1IJICAweDAwMDAwMDBjCi0jZGVmaW5lICAgQzBfUkdCNV9SR0dCCSAgMHgwMDAwMDAwMAotI2RlZmluZQkgIEMwX1JHQjVfR1JCRwkgIDB4MDAwMDAwMDQKLSNkZWZpbmUJICBDMF9SR0I1X0dCUkcJICAweDAwMDAwMDA4Ci0jZGVmaW5lICAgQzBfUkdCNV9CR0dSCSAgMHgwMDAwMDAwYwotCi0vKiBTcGVjIGhhcyB0d28gZmllbGRzIGZvciBESU4gYW5kIERPVVQsIGJ1dCB0aGV5IG11c3QgbWF0Y2gsIHNvCi0gICBjb21iaW5lIHRoZW0gaGVyZS4gKi8KLSNkZWZpbmUgICBDMF9ERl9ZVVYJICAweDAwMDAwMDAwICAgIC8qIERhdGEgaXMgWVVWCSAgICAqLwotI2RlZmluZSAgIEMwX0RGX1JHQgkgIDB4MDAwMDAwYTAJLyogLi4uIFJHQgkJICAgICovCi0jZGVmaW5lICAgQzBfREZfQkFZRVIgICAgIDB4MDAwMDAxNDAJLyogLi4uIEJheWVyICAgICAgICAgICAgICAgICovCi0vKiA4LTgtOCBtdXN0IGJlIG1pc3NpbmcgZnJvbSB0aGUgYmVsb3cgLSBhc2sgKi8KLSNkZWZpbmUgICBDMF9SR0JGXzU2NQkgIDB4MDAwMDAwMDAKLSNkZWZpbmUgICBDMF9SR0JGXzQ0NAkgIDB4MDAwMDA4MDAKLSNkZWZpbmUgICBDMF9SR0JfQkdSCSAgMHgwMDAwMTAwMAkvKiBCbHVlIGNvbWVzIGZpcnN0ICovCi0jZGVmaW5lICAgQzBfWVVWX1BMQU5BUgkgIDB4MDAwMDAwMDAJLyogWVVWIDQyMiBwbGFuYXIgZm9ybWF0ICovCi0jZGVmaW5lICAgQzBfWVVWX1BBQ0tFRAkgIDB4MDAwMDgwMDAJLyogWVVWIDQyMiBwYWNrZWQJKi8KLSNkZWZpbmUgICBDMF9ZVVZfNDIwUEwJICAweDAwMDBhMDAwCS8qIFlVViA0MjAgcGxhbmFyCSovCi0vKiBUaGluayB0aGF0IDQyMCBwYWNrZWQgbXVzdCBiZSAxMTEgLSBhc2sgKi8KLSNkZWZpbmUJICBDMF9ZVVZFX1lVWVYJICAweDAwMDAwMDAwCS8qIFkxQ2JZMENyIAkJKi8KLSNkZWZpbmUJICBDMF9ZVVZFX1lWWVUJICAweDAwMDEwMDAwCS8qIFkxQ3JZMENiIAkJKi8KLSNkZWZpbmUJICBDMF9ZVVZFX1ZZVVkJICAweDAwMDIwMDAwCS8qIENyWTFDYlkwIAkJKi8KLSNkZWZpbmUJICBDMF9ZVVZFX1VZVlkJICAweDAwMDMwMDAwCS8qIENiWTFDclkwIAkJKi8KLSNkZWZpbmUgICBDMF9ZVVZFX1hZVVYJICAweDAwMDAwMDAwICAgIC8qIDQyMDogLllVVgkJKi8KLSNkZWZpbmUJICBDMF9ZVVZFX1hZVlUJICAweDAwMDEwMDAwCS8qIDQyMDogLllWVSAJCSovCi0jZGVmaW5lCSAgQzBfWVVWRV9YVVZZCSAgMHgwMDAyMDAwMAkvKiA0MjA6IC5VVlkgCQkqLwotI2RlZmluZQkgIEMwX1lVVkVfWFZVWQkgIDB4MDAwMzAwMDAJLyogNDIwOiAuVlVZIAkJKi8KLS8qIEJheWVyIGJpdHMgMTgsMTkgaWYgbmVlZGVkICovCi0jZGVmaW5lICAgQzBfSFBPTF9MT1cJICAweDAxMDAwMDAwCS8qIEhTWU5DIHBvbGFyaXR5IGFjdGl2ZSBsb3cgKi8KLSNkZWZpbmUgICBDMF9WUE9MX0xPVwkgIDB4MDIwMDAwMDAJLyogVlNZTkMgcG9sYXJpdHkgYWN0aXZlIGxvdyAqLwotI2RlZmluZSAgIEMwX1ZDTEtfTE9XCSAgMHgwNDAwMDAwMAkvKiBWQ0xLIG9uIGZhbGxpbmcgZWRnZSAqLwotI2RlZmluZSAgIEMwX0RPV05TQ0FMRQkgIDB4MDgwMDAwMDAJLyogRW5hYmxlIGRvd25zY2FsZXIgKi8KLSNkZWZpbmUJICBDMF9TSUZNX01BU0sJICAweGMwMDAwMDAwCS8qIFNJRiBtb2RlIGJpdHMgKi8KLSNkZWZpbmUgICBDMF9TSUZfSFZTWU5DCSAgMHgwMDAwMDAwMAkvKiBVc2UgSC9WU1lOQyAqLwotI2RlZmluZSAgIENPX1NPRl9OT1NZTkMJICAweDQwMDAwMDAwCS8qIFVzZSBpbmJhbmQgYWN0aXZlIHNpZ25hbGluZyAqLwotCi0KLSNkZWZpbmUgUkVHX0NUUkwxCTB4NDAJLyogQ29udHJvbCAxICovCi0jZGVmaW5lICAgQzFfNDQ0QUxQSEEJICAweDAwZjAwMDAwCS8qIEFscGhhIGZpZWxkIGluIFJHQjQ0NCAqLwotI2RlZmluZSAgIEMxX0FMUEhBX1NIRlQJICAyMAotI2RlZmluZSAgIEMxX0RNQUIzMgkgIDB4MDAwMDAwMDAJLyogMzItYnl0ZSBETUEgYnVyc3QgKi8KLSNkZWZpbmUgICBDMV9ETUFCMTYJICAweDAyMDAwMDAwCS8qIDE2LWJ5dGUgRE1BIGJ1cnN0ICovCi0jZGVmaW5lCSAgQzFfRE1BQjY0CSAgMHgwNDAwMDAwMAkvKiA2NC1ieXRlIERNQSBidXJzdCAqLwotI2RlZmluZQkgIEMxX0RNQUJfTUFTSwkgIDB4MDYwMDAwMDAKLSNkZWZpbmUgICBDMV9UV09CVUZTCSAgMHgwODAwMDAwMAkvKiBVc2Ugb25seSB0d28gRE1BIGJ1ZmZlcnMgKi8KLSNkZWZpbmUgICBDMV9QV1JEV04JICAweDEwMDAwMDAwCS8qIFBvd2VyIGRvd24gKi8KLQotI2RlZmluZSBSRUdfQ0xLQ1RSTAkweDg4CS8qIENsb2NrIGNvbnRyb2wgKi8KLSNkZWZpbmUgICBDTEtfRElWX01BU0sJICAweDAwMDBmZmZmCS8qIFVwcGVyIGJpdHMgUlcgInJlc2VydmVkIiAqLwotCi0jZGVmaW5lIFJFR19HUFIJCTB4YjQJLyogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyLiAgVGhpcwotCQkJCSAgIGNvbnRyb2xzIGlucHV0cyB0byB0aGUgcG93ZXIgYW5kIHJlc2V0Ci0JCQkJICAgcGlucyBvbiB0aGUgT1Y3NjcwIHVzZWQgd2l0aCBPTFBDOwotCQkJCSAgIG90aGVyIGRlcGxveW1lbnRzIGNvdWxkIGRpZmZlci4gICovCi0jZGVmaW5lICAgR1BSX0MxRU4JICAweDAwMDAwMDIwCS8qIFBhZCAxIChwb3dlciBkb3duKSBlbmFibGUgKi8KLSNkZWZpbmUgICBHUFJfQzBFTgkgIDB4MDAwMDAwMTAJLyogUGFkIDAgKHJlc2V0KSBlbmFibGUgKi8KLSNkZWZpbmUJICBHUFJfQzEJICAweDAwMDAwMDAyCS8qIENvbnRyb2wgMSB2YWx1ZSAqLwotLyoKLSAqIENvbnRyb2wgMCBpcyB3aXJlZCB0byByZXNldCBvbiBPTFBDIG1hY2hpbmVzLiAgRm9yIG92N3ggc2Vuc29ycywKLSAqIGl0IGlzIGFjdGl2ZSBsb3csIGZvciAwdjZ4LCBpbnN0ZWFkLCBpdCdzIGFjdGl2ZSBoaWdoLiAgV2hhdAotICogZnVuLgotICovCi0jZGVmaW5lICAgR1BSX0MwCSAgMHgwMDAwMDAwMQkvKiBDb250cm9sIDAgdmFsdWUgKi8KLQotI2RlZmluZSBSRUdfVFdTSUMwCTB4YjgJLyogVFdTSSAoc21idXMpIGNvbnRyb2wgMCAqLwotI2RlZmluZSAgIFRXU0lDMF9FTiAgICAgICAweDAwMDAwMDAxCS8qIFRXU0kgZW5hYmxlICovCi0jZGVmaW5lICAgVFdTSUMwX01PREUJICAweDAwMDAwMDAyCS8qIDEgPSAxNi1iaXQsIDAgPSA4LWJpdCAqLwotI2RlZmluZSAgIFRXU0lDMF9TSUQJICAweDAwMDAwM2ZjCS8qIFNsYXZlIElEICovCi0jZGVmaW5lICAgVFdTSUMwX1NJRF9TSElGVCAyCi0jZGVmaW5lICAgVFdTSUMwX0NMS0RJViAgIDB4MDAwN2ZjMDAJLyogQ2xvY2sgZGl2aWRlciAqLwotI2RlZmluZSAgIFRXU0lDMF9NQVNLQUNLICAweDAwNDAwMDAwCS8qIE1hc2sgYWNrIGZyb20gc2Vuc29yICovCi0jZGVmaW5lICAgVFdTSUMwX09WTUFHSUMgIDB4MDA4MDAwMDAJLyogTWFrZSBpdCB3b3JrIG9uIE9WIHNlbnNvcnMgKi8KLQotI2RlZmluZSBSRUdfVFdTSUMxCTB4YmMJLyogVFdTSSBjb250cm9sIDEgKi8KLSNkZWZpbmUgICBUV1NJQzFfREFUQQkgIDB4MDAwMGZmZmYJLyogRGF0YSB0by9mcm9tIGNhbWNoaXAgKi8KLSNkZWZpbmUgICBUV1NJQzFfQUREUgkgIDB4MDBmZjAwMDAJLyogQWRkcmVzcyAocmVnaXN0ZXIpICovCi0jZGVmaW5lICAgVFdTSUMxX0FERFJfU0hJRlQgMTYKLSNkZWZpbmUgICBUV1NJQzFfUkVBRAkgIDB4MDEwMDAwMDAJLyogU2V0IGZvciByZWFkIG9wICovCi0jZGVmaW5lICAgVFdTSUMxX1dTVEFUCSAgMHgwMjAwMDAwMAkvKiBXcml0ZSBzdGF0dXMgKi8KLSNkZWZpbmUgICBUV1NJQzFfUlZBTElECSAgMHgwNDAwMDAwMAkvKiBSZWFkIGRhdGEgdmFsaWQgKi8KLSNkZWZpbmUgICBUV1NJQzFfRVJST1IJICAweDA4MDAwMDAwCS8qIFNvbWV0aGluZyBzY3Jld2VkIHVwICovCi0KLQotI2RlZmluZSBSRUdfVUJBUgkweGM0CS8qIFVwcGVyIGJhc2UgYWRkcmVzcyByZWdpc3RlciAqLwotCi0vKgotICogSGVyZSdzIHRoZSB3ZWlyZCBnbG9iYWwgY29udHJvbCByZWdpc3RlcnMgd2hpY2ggYXJlIHNhaWQgdG8gbGl2ZQotICogd2F5IHVwIGhlcmUuCi0gKi8KLSNkZWZpbmUgUkVHX0dMX0NTUiAgICAgMHgzMDA0ICAvKiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSAgIEdDU1JfU1JTCSAweDAwMDAwMDAxCS8qIFNXIFJlc2V0IHNldCAqLwotI2RlZmluZSAgIEdDU1JfU1JDICAJIDB4MDAwMDAwMDIJLyogU1cgUmVzZXQgY2xlYXIgKi8KLSNkZWZpbmUJICBHQ1NSX01SUwkgMHgwMDAwMDAwNAkvKiBNYXN0ZXIgcmVzZXQgc2V0ICovCi0jZGVmaW5lCSAgR0NTUl9NUkMJIDB4MDAwMDAwMDgJLyogSFcgUmVzZXQgY2xlYXIgKi8KLSNkZWZpbmUgICBHQ1NSX0NDSUNfRU4gICAweDAwMDA0MDAwICAgIC8qIENDSUMgQ2xvY2sgZW5hYmxlICovCi0jZGVmaW5lIFJFR19HTF9JTUFTSyAgIDB4MzAwYyAgLyogSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgICBHSU1TS19DQ0lDX0VOICAgICAgICAgIDB4MDAwMDAwMDQgICAgLyogQ0NJQyBJbnRlcnJ1cHQgZW5hYmxlICovCi0KLSNkZWZpbmUgUkVHX0dMX0ZDUgkweDMwMzggIC8qIEdQSU8gZnVuY3Rpb25hbCBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lCSAgR0ZDUl9HUElPX09OCSAgMHgwOAkJLyogQ2FtZXJhIEdQSU8gZW5hYmxlZCAqLwotI2RlZmluZSBSRUdfR0xfR1BJT1IJMHgzMTVjCS8qIEdQSU8gcmVnaXN0ZXIgKi8KLSNkZWZpbmUgICBHR1BJT19PVVQgIAkJMHg4MDAwMAkvKiBHUElPIG91dHB1dCAqLwotI2RlZmluZSAgIEdHUElPX1ZBTCAgCQkweDAwMDA4CS8qIE91dHB1dCBwaW4gdmFsdWUgKi8KLQotI2RlZmluZSBSRUdfTEVOICAgICAgICAgICAgICAgIFJFR19HTF9JTUFTSyArIDQKLQotCi0vKgotICogVXNlZnVsIHN0dWZmIHRoYXQgcHJvYmFibHkgYmVsb25ncyBzb21ld2hlcmUgZ2xvYmFsLgotICovCi0jZGVmaW5lIFZHQV9XSURUSAk2NDAKLSNkZWZpbmUgVkdBX0hFSUdIVAk0ODAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjQ3MDMzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjY3ICswLDAgQEAKLS8qCi0gKiBBIGRyaXZlciBmb3IgdGhlIENNT1MgY2FtZXJhIGNvbnRyb2xsZXIgaW4gdGhlIE1hcnZlbGwgODhBTFAwMSAiY2FmZSIKLSAqIG11bHRpZnVuY3Rpb24gY2hpcC4gIEN1cnJlbnRseSB3b3JrcyB3aXRoIHRoZSBPbW5pdmlzaW9uIE9WNzY3MAotICogc2Vuc29yLgotICoKLSAqIFRoZSBkYXRhIHNoZWV0IGZvciB0aGlzIGRldmljZSBjYW4gYmUgZm91bmQgYXQ6Ci0gKiAgICBodHRwOi8vd3d3Lm1hcnZlbGwuY29tL3Byb2R1Y3RzL3BjX2Nvbm5lY3Rpdml0eS84OGFscDAxLyAKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNiBPbmUgTGFwdG9wIFBlciBDaGlsZCBBc3NvY2lhdGlvbiwgSW5jLgotICogQ29weXJpZ2h0IDIwMDYtNyBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgotICoKLSAqIFdyaXR0ZW4gYnkgSm9uYXRoYW4gQ29yYmV0LCBjb3JiZXRAbHduLm5ldC4KLSAqCi0gKiB2NGwyX2RldmljZS92NGwyX3N1YmRldiBjb252ZXJzaW9uIGJ5OgotICogQ29weXJpZ2h0IChDKSAyMDA5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgotICoKLSAqIE5vdGU6IHRoaXMgY29udmVyc2lvbiBpcyB1bnRlc3RlZCEgUGxlYXNlIGNvbnRhY3QgdGhlIGxpbnV4LW1lZGlhCi0gKiBtYWlsaW5nbGlzdCBpZiB5b3UgY2FuIHRlc3QgdGhpcywgdG9nZXRoZXIgd2l0aCB0aGUgdGVzdCByZXN1bHRzLgotICoKLSAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgIm92NzY3MC5oIgotI2luY2x1ZGUgImNhZmVfY2NpYy1yZWdzLmgiCi0KLSNkZWZpbmUgQ0FGRV9WRVJTSU9OIDB4MDAwMDAyCi0KLQotLyoKLSAqIFBhcmFtZXRlcnMuCi0gKi8KLU1PRFVMRV9BVVRIT1IoIkpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgODhBTFAwMSBDTU9TIENhbWVyYSBDb250cm9sbGVyIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlZpZGVvIik7Ci0KLS8qCi0gKiBJbnRlcm5hbCBETUEgYnVmZmVyIG1hbmFnZW1lbnQuICBTaW5jZSB0aGUgY29udHJvbGxlciBjYW5ub3QgZG8gUy9HIEkvTywKLSAqIHdlIG11c3QgaGF2ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYnVmZmVycyB0byBicmluZyBmcmFtZXMgaW50by4KLSAqIFRoZXNlIHBhcmFtZXRlcnMgY29udHJvbCBob3cgbWFueSBidWZmZXJzIHdlIHVzZSwgd2hldGhlciB3ZQotICogYWxsb2NhdGUgdGhlbSBhdCBsb2FkIHRpbWUgKGJldHRlciBjaGFuY2Ugb2Ygc3VjY2VzcywgYnV0IG5haWxzIGRvd24KLSAqIG1lbW9yeSkgb3Igd2hlbiBzb21lYm9keSB0cmllcyB0byB1c2UgdGhlIGNhbWVyYSAocmlza2llciksIGFuZCwKLSAqIGZvciBsb2FkLXRpbWUgYWxsb2NhdGlvbiwgaG93IGJpZyB0aGV5IHNob3VsZCBiZS4KLSAqCi0gKiBUaGUgY29udHJvbGxlciBjYW4gY3ljbGUgdGhyb3VnaCB0aHJlZSBidWZmZXJzLiAgV2UgY291bGQgdXNlCi0gKiBtb3JlIGJ5IGZsaXBwaW5nIHBvaW50ZXJzIGFyb3VuZCwgYnV0IGl0IHByb2JhYmx5IG1ha2VzIGxpdHRsZQotICogc2Vuc2UuCi0gKi8KLQotI2RlZmluZSBNQVhfRE1BX0JVRlMgMwotc3RhdGljIGludCBhbGxvY19idWZzX2F0X3JlYWQ7Ci1tb2R1bGVfcGFyYW0oYWxsb2NfYnVmc19hdF9yZWFkLCBib29sLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWxsb2NfYnVmc19hdF9yZWFkLAotCQkiTm9uLXplcm8gdmFsdWUgY2F1c2VzIERNQSBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZCB3aGVuIHRoZSAiCi0JCSJ2aWRlbyBjYXB0dXJlIGRldmljZSBpcyByZWFkLCByYXRoZXIgdGhhbiBhdCBtb2R1bGUgbG9hZCAiCi0JCSJ0aW1lLiAgVGhpcyBzYXZlcyBtZW1vcnksIGJ1dCBkZWNyZWFzZXMgdGhlIGNoYW5jZXMgb2YgIgotCQkic3VjY2Vzc2Z1bGx5IGdldHRpbmcgdGhvc2UgYnVmZmVycy4iKTsKLQotc3RhdGljIGludCBuX2RtYV9idWZzID0gMzsKLW1vZHVsZV9wYXJhbShuX2RtYV9idWZzLCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mobl9kbWFfYnVmcywKLQkJIlRoZSBudW1iZXIgb2YgRE1BIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuICBDYW4gYmUgZWl0aGVyIHR3byAiCi0JCSIoc2F2ZXMgbWVtb3J5LCBtYWtlcyB0aW1pbmcgdGlnaHRlcikgb3IgdGhyZWUuIik7Ci0KLXN0YXRpYyBpbnQgZG1hX2J1Zl9zaXplID0gVkdBX1dJRFRIICogVkdBX0hFSUdIVCAqIDI7ICAvKiBXb3JzdCBjYXNlICovCi1tb2R1bGVfcGFyYW0oZG1hX2J1Zl9zaXplLCB1aW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZG1hX2J1Zl9zaXplLAotCQkiVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBETUEgYnVmZmVycy4gIElmIGFjdHVhbCBvcGVyYXRpbmcgIgotCQkicGFyYW1ldGVycyByZXF1aXJlIGxhcmdlciBidWZmZXJzLCBhbiBhdHRlbXB0IHRvIHJlYWxsb2NhdGUgIgotCQkid2lsbCBiZSBtYWRlLiIpOwotCi1zdGF0aWMgaW50IG1pbl9idWZmZXJzID0gMTsKLW1vZHVsZV9wYXJhbShtaW5fYnVmZmVycywgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9idWZmZXJzLAotCQkiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycyB3ZSBhcmUgd2lsbGluZyAiCi0JCSJ0byB3b3JrIHdpdGguIik7Ci0KLXN0YXRpYyBpbnQgbWF4X2J1ZmZlcnMgPSAxMDsKLW1vZHVsZV9wYXJhbShtYXhfYnVmZmVycywgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9idWZmZXJzLAotCQkiVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0cmVhbWluZyBJL08gYnVmZmVycyBhbiBhcHBsaWNhdGlvbiAiCi0JCSJ3aWxsIGJlIGFsbG93ZWQgdG8gYWxsb2NhdGUuICBUaGVzZSBidWZmZXJzIGFyZSBiaWcgYW5kIGxpdmUgIgotCQkiaW4gdm1hbGxvYyBzcGFjZS4iKTsKLQotc3RhdGljIGludCBmbGlwOwotbW9kdWxlX3BhcmFtKGZsaXAsIGJvb2wsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmbGlwLAotCQkiSWYgc2V0LCB0aGUgc2Vuc29yIHdpbGwgYmUgaW5zdHJ1Y3RlZCB0byBmbGlwIHRoZSBpbWFnZSAiCi0JCSJ2ZXJ0aWNhbGx5LiIpOwotCi0KLWVudW0gY2FmZV9zdGF0ZSB7Ci0JU19OT1RSRUFEWSwJLyogTm90IHlldCBpbml0aWFsaXplZCAqLwotCVNfSURMRSwJCS8qIEp1c3QgaGFuZ2luZyBhcm91bmQgKi8KLQlTX0ZMQUtFRCwJLyogU29tZSBzb3J0IG9mIHByb2JsZW0gKi8KLQlTX1NJTkdMRVJFQUQsCS8qIEluIHJlYWQoKSAqLwotCVNfU1BFQ1JFQUQsICAgCS8qIFNwZWN1bGF0aXZlIHJlYWQgKGZvciBmdXR1cmUgcmVhZCgpKSAqLwotCVNfU1RSRUFNSU5HCS8qIFN0cmVhbWluZyBkYXRhICovCi19OwotCi0vKgotICogVHJhY2tpbmcgb2Ygc3RyZWFtaW5nIEkvTyBidWZmZXJzLgotICovCi1zdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHY0bDJfYnVmZmVyIHY0bGJ1ZjsKLQljaGFyICpidWZmZXI7ICAgLyogV2hlcmUgaXQgbGl2ZXMgaW4ga2VybmVsIHNwYWNlICovCi0JaW50IG1hcGNvdW50OwotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOwotfTsKLQotLyoKLSAqIEEgZGVzY3JpcHRpb24gb2Ygb25lIG9mIG91ciBkZXZpY2VzLgotICogTG9ja2luZzogY29udHJvbGxlZCBieSBzX211dGV4LiAgQ2VydGFpbiBmaWVsZHMsIGhvd2V2ZXIsIHJlcXVpcmUKLSAqIAkgICAgdGhlIGRldl9sb2NrIHNwaW5sb2NrOyB0aGV5IGFyZSBtYXJrZWQgYXMgc3VjaCBieSBjb21tZW50cy4KLSAqCSAgICBkZXZfbG9jayBpcyBhbHNvIHJlcXVpcmVkIGZvciBhY2Nlc3MgdG8gZGV2aWNlIHJlZ2lzdGVycy4KLSAqLwotc3RydWN0IGNhZmVfY2FtZXJhCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwotCWVudW0gY2FmZV9zdGF0ZSBzdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOyAgIAkJLyogQnVmZmVyIHN0YXR1cywgbWFpbmx5IChkZXZfbG9jaykgKi8KLQlpbnQgdXNlcnM7CQkJLyogSG93IG1hbnkgb3BlbiBGRHMgKi8KLQlzdHJ1Y3QgZmlsZSAqb3duZXI7CQkvKiBXaG8gaGFzIGRhdGEgYWNjZXNzICh2NGwyKSAqLwotCi0JLyoKLQkgKiBTdWJzeXN0ZW0gc3RydWN0dXJlcy4KLQkgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0Jc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOwotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Vuc29yOwotCXVuc2lnbmVkIHNob3J0IHNlbnNvcl9hZGRyOwotCi0JdW5zaWduZWQgY2hhciBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CS8qIGxpbmsgdG8gb3RoZXIgZGV2aWNlcyAqLwotCi0JLyogRE1BIGJ1ZmZlcnMgKi8KLQl1bnNpZ25lZCBpbnQgbmJ1ZnM7CQkvKiBIb3cgbWFueSBhcmUgYWxsb2MnZCAqLwotCWludCBuZXh0X2J1ZjsJCQkvKiBOZXh0IHRvIGNvbnN1bWUgKGRldl9sb2NrKSAqLwotCXVuc2lnbmVkIGludCBkbWFfYnVmX3NpemU7ICAJLyogYWxsb2NhdGVkIHNpemUgKi8KLQl2b2lkICpkbWFfYnVmc1tNQVhfRE1BX0JVRlNdOwkvKiBJbnRlcm5hbCBidWZmZXIgYWRkcmVzc2VzICovCi0JZG1hX2FkZHJfdCBkbWFfaGFuZGxlc1tNQVhfRE1BX0JVRlNdOyAvKiBCdWZmZXIgYnVzIGFkZHJlc3NlcyAqLwotCXVuc2lnbmVkIGludCBzcGVjZnJhbWVzOwkvKiBVbmNvbnN1bWVkIHNwZWMgZnJhbWVzIChkZXZfbG9jaykgKi8KLQl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CQkvKiBGcmFtZSBzZXF1ZW5jZSBudW1iZXIgKi8KLQl1bnNpZ25lZCBpbnQgYnVmX3NlcVtNQVhfRE1BX0JVRlNdOyAvKiBTZXF1ZW5jZSBmb3IgaW5kaXZpZHVhbCBidWZmZXJzICovCi0KLQkvKiBTdHJlYW1pbmcgYnVmZmVycyAqLwotCXVuc2lnbmVkIGludCBuX3NidWZzOwkJLyogSG93IG1hbnkgd2UgaGF2ZSAqLwotCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNiX2J1ZnM7IC8qIFRoZSBhcnJheSBvZiBob3VzZWtlZXBpbmcgc3RydWN0cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2JfYXZhaWw7CS8qIEF2YWlsYWJsZSBmb3IgZGF0YSAod2Ugb3duKSAoZGV2X2xvY2spICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzYl9mdWxsOwkvKiBXaXRoIGRhdGEgKHVzZXIgc3BhY2Ugb3ducykgKGRldl9sb2NrKSAqLwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBzX3Rhc2tsZXQ7Ci0KLQkvKiBDdXJyZW50IG9wZXJhdGluZyBwYXJhbWV0ZXJzICovCi0JdTMyIHNlbnNvcl90eXBlOwkJLyogQ3VycmVudGx5IG92NzY3MCBvbmx5ICovCi0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXhfZm9ybWF0OwotCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBtYnVzX2NvZGU7Ci0KLQkvKiBMb2NrcyAqLwotCXN0cnVjdCBtdXRleCBzX211dGV4OyAvKiBBY2Nlc3MgdG8gdGhpcyBzdHJ1Y3R1cmUgKi8KLQlzcGlubG9ja190IGRldl9sb2NrOyAgLyogQWNjZXNzIHRvIGRldmljZSAqLwotCi0JLyogTWlzYyAqLwotCXdhaXRfcXVldWVfaGVhZF90IHNtYnVzX3dhaXQ7CS8qIFdhaXRpbmcgb24gaTJjIGV2ZW50cyAqLwotCXdhaXRfcXVldWVfaGVhZF90IGlvd2FpdDsJLyogV2FpdGluZyBvbiBmcmFtZSBkYXRhICovCi19OwotCi0vKgotICogU3RhdHVzIGZsYWdzLiAgQWx3YXlzIG1hbmlwdWxhdGVkIHdpdGggYml0IG9wZXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUgQ0ZfQlVGMF9WQUxJRAkgMAkvKiBCdWZmZXJzIHZhbGlkIC0gZmlyc3QgdGhyZWUgKi8KLSNkZWZpbmUgQ0ZfQlVGMV9WQUxJRAkgMQotI2RlZmluZSBDRl9CVUYyX1ZBTElECSAyCi0jZGVmaW5lIENGX0RNQV9BQ1RJVkUJIDMJLyogQSBmcmFtZSBpcyBpbmNvbWluZyAqLwotI2RlZmluZSBDRl9DT05GSUdfTkVFREVEIDQJLyogTXVzdCBjb25maWd1cmUgaGFyZHdhcmUgKi8KLQotI2RlZmluZSBzZW5zb3JfY2FsbChjYW0sIG8sIGYsIGFyZ3MuLi4pIFwKLQl2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yLCBvLCBmLCAjI2FyZ3MpCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNhZmVfY2FtZXJhICp0b19jYW0oc3RydWN0IHY0bDJfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjYWZlX2NhbWVyYSwgdjRsMl9kZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IGNhZmVfZm9ybWF0X3N0cnVjdCB7Ci0JX191OCAqZGVzYzsKLQlfX3UzMiBwaXhlbGZvcm1hdDsKLQlpbnQgYnBwOyAgIC8qIEJ5dGVzIHBlciBwaXhlbCAqLwotCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBtYnVzX2NvZGU7Ci19IGNhZmVfZm9ybWF0c1tdID0gewotCXsKLQkJLmRlc2MJCT0gIllVWVYgNDoyOjIiLAotCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVVZViwKLQkJLm1idXNfY29kZQk9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4LAotCQkuYnBwCQk9IDIsCi0JfSwKLQl7Ci0JCS5kZXNjCQk9ICJSR0IgNDQ0IiwKLQkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1JHQjQ0NCwKLQkJLm1idXNfY29kZQk9IFY0TDJfTUJVU19GTVRfUkdCNDQ0XzJYOF9QQURISV9MRSwKLQkJLmJwcAkJPSAyLAotCX0sCi0JewotCQkuZGVzYwkJPSAiUkdCIDU2NSIsCi0JCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCi0JCS5tYnVzX2NvZGUJPSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEUsCi0JCS5icHAJCT0gMiwKLQl9LAotCXsKLQkJLmRlc2MJCT0gIlJhdyBSR0IgQmF5ZXIiLAotCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAotCQkubWJ1c19jb2RlCT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAotCQkuYnBwCQk9IDEKLQl9LAotfTsKLSNkZWZpbmUgTl9DQUZFX0ZNVFMgQVJSQVlfU0laRShjYWZlX2Zvcm1hdHMpCi0KLXN0YXRpYyBzdHJ1Y3QgY2FmZV9mb3JtYXRfc3RydWN0ICpjYWZlX2ZpbmRfZm9ybWF0KHUzMiBwaXhlbGZvcm1hdCkKLXsKLQl1bnNpZ25lZCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5fQ0FGRV9GTVRTOyBpKyspCi0JCWlmIChjYWZlX2Zvcm1hdHNbaV0ucGl4ZWxmb3JtYXQgPT0gcGl4ZWxmb3JtYXQpCi0JCQlyZXR1cm4gY2FmZV9mb3JtYXRzICsgaTsKLQkvKiBOb3QgZm91bmQ/IFRoZW4gcmV0dXJuIHRoZSBmaXJzdCBmb3JtYXQuICovCi0JcmV0dXJuIGNhZmVfZm9ybWF0czsKLX0KLQotLyoKLSAqIFN0YXJ0IG92ZXIgd2l0aCBETUEgYnVmZmVycyAtIGRldl9sb2NrIG5lZWRlZC4KLSAqLwotc3RhdGljIHZvaWQgY2FmZV9yZXNldF9idWZmZXJzKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWludCBpOwotCi0JY2FtLT5uZXh0X2J1ZiA9IC0xOwotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspCi0JCWNsZWFyX2JpdChpLCAmY2FtLT5mbGFncyk7Ci0JY2FtLT5zcGVjZnJhbWVzID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2FmZV9uZWVkc19jb25maWcoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JcmV0dXJuIHRlc3RfYml0KENGX0NPTkZJR19ORUVERUQsICZjYW0tPmZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9zZXRfY29uZmlnX25lZWRlZChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgaW50IG5lZWRlZCkKLXsKLQlpZiAobmVlZGVkKQotCQlzZXRfYml0KENGX0NPTkZJR19ORUVERUQsICZjYW0tPmZsYWdzKTsKLQllbHNlCi0JCWNsZWFyX2JpdChDRl9DT05GSUdfTkVFREVELCAmY2FtLT5mbGFncyk7Ci19Ci0KLQotCi0KLS8qCi0gKiBEZWJ1Z2dpbmcgYW5kIHJlbGF0ZWQuCi0gKi8KLSNkZWZpbmUgY2FtX2VycihjYW0sIGZtdCwgYXJnLi4uKSBcCi0JZGV2X2VycigmKGNhbSktPnBkZXYtPmRldiwgZm10LCAjI2FyZyk7Ci0jZGVmaW5lIGNhbV93YXJuKGNhbSwgZm10LCBhcmcuLi4pIFwKLQlkZXZfd2FybigmKGNhbSktPnBkZXYtPmRldiwgZm10LCAjI2FyZyk7Ci0jZGVmaW5lIGNhbV9kYmcoY2FtLCBmbXQsIGFyZy4uLikgXAotCWRldl9kYmcoJihjYW0pLT5wZGV2LT5kZXYsIGZtdCwgIyNhcmcpOwotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qCi0gKiBEZXZpY2UgcmVnaXN0ZXIgSS9PCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWZlX3JlZ193cml0ZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgdW5zaWduZWQgaW50IHJlZywKLQkJdW5zaWduZWQgaW50IHZhbCkKLXsKLQlpb3dyaXRlMzIodmFsLCBjYW0tPnJlZ3MgKyByZWcpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWZlX3JlZ19yZWFkKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLAotCQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXJldHVybiBpb3JlYWQzMihjYW0tPnJlZ3MgKyByZWcpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWZlX3JlZ193cml0ZV9tYXNrKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCB1bnNpZ25lZCBpbnQgcmVnLAotCQl1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgbWFzaykKLXsKLQl1bnNpZ25lZCBpbnQgdiA9IGNhZmVfcmVnX3JlYWQoY2FtLCByZWcpOwotCi0JdiA9ICh2ICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOwotCWNhZmVfcmVnX3dyaXRlKGNhbSwgcmVnLCB2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNhZmVfcmVnX2NsZWFyX2JpdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKLQkJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKLXsKLQljYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgcmVnLCAwLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FmZV9yZWdfc2V0X2JpdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKLQkJdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKLXsKLQljYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgcmVnLCB2YWwsIHZhbCk7Ci19Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFRoZSBJMkMvU01CVVMgaW50ZXJmYWNlIHRvIHRoZSBjYW1lcmEgaXRzZWxmIHN0YXJ0cyBoZXJlLiAgVGhlCi0gKiBjb250cm9sbGVyIGhhbmRsZXMgU01CVVMgaXRzZWxmLCBwcmVzZW50aW5nIGEgcmVsYXRpdmVseSBzaW1wbGUgcmVnaXN0ZXIKLSAqIGludGVyZmFjZTsgYWxsIHdlIGhhdmUgdG8gZG8gaXMgdG8gdGVsbCBpdCB3aGVyZSB0byByb3V0ZSB0aGUgZGF0YS4KLSAqLwotI2RlZmluZSBDQUZFX1NNQlVTX1RJTUVPVVQgKEhaKSAgLyogZ2VuZXJvdXMgKi8KLQotc3RhdGljIGludCBjYWZlX3NtYnVzX3dyaXRlX2RvbmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYzE7Ci0KLQkvKgotCSAqIFdlIG11c3QgZGVsYXkgYWZ0ZXIgdGhlIGludGVycnVwdCwgb3IgdGhlIGNvbnRyb2xsZXIgZ2V0cyBjb25mdXNlZAotCSAqIGFuZCBuZXZlciBkb2VzIGdpdmUgdXMgZ29vZCBzdGF0dXMuICBGb3J0dW5hdGVseSwgd2UgZG9uJ3QgZG8gdGhpcwotCSAqIG9mdGVuLgotCSAqLwotCXVkZWxheSgyMCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQljMSA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIChjMSAmIChUV1NJQzFfV1NUQVR8VFdTSUMxX0VSUk9SKSkgIT0gVFdTSUMxX1dTVEFUOwotfQotCi1zdGF0aWMgaW50IGNhZmVfc21idXNfd3JpdGVfZGF0YShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKLQkJdTE2IGFkZHIsIHU4IGNvbW1hbmQsIHU4IHZhbHVlKQotewotCXVuc2lnbmVkIGludCBydmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCXJ2YWwgPSBUV1NJQzBfRU4gfCAoKGFkZHIgPDwgVFdTSUMwX1NJRF9TSElGVCkgJiBUV1NJQzBfU0lEKTsKLQlydmFsIHw9IFRXU0lDMF9PVk1BR0lDOyAgLyogTWFrZSBPViBzZW5zb3JzIHdvcmsgKi8KLQkvKgotCSAqIE1hcnZlbGwgc2V6IHNldCBjbGtkaXYgdG8gYWxsIDEncyBmb3Igbm93LgotCSAqLwotCXJ2YWwgfD0gVFdTSUMwX0NMS0RJVjsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzAsIHJ2YWwpOwotCSh2b2lkKSBjYWZlX3JlZ19yZWFkKGNhbSwgUkVHX1RXU0lDMSk7IC8qIGZvcmNlIHdyaXRlICovCi0JcnZhbCA9IHZhbHVlIHwgKChjb21tYW5kIDw8IFRXU0lDMV9BRERSX1NISUZUKSAmIFRXU0lDMV9BRERSKTsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzEsIHJ2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCS8qIFVuZm9ydHVuYXRlbHksIHJlYWRpbmcgVFdTSUMxIHRvbyBzb29uIGFmdGVyIHNlbmRpbmcgYSBjb21tYW5kCi0JICogY2F1c2VzIHRoZSBkZXZpY2UgdG8gZGllLgotCSAqIFVzZSBhIGJ1c3ktd2FpdCBiZWNhdXNlIHdlIG9mdGVuIHNlbmQgYSBsYXJnZSBxdWFudGl0eSBvZiBzbWFsbAotCSAqIGNvbW1hbmRzIGF0LW9uY2U7IHVzaW5nIG1zbGVlcCgpIHdvdWxkIGNhdXNlIGEgbG90IG9mIGNvbnRleHQKLQkgKiBzd2l0Y2hlcyB3aGljaCB0YWtlIGxvbmdlciB0aGFuIDJtcywgcmVzdWx0aW5nIGluIGEgbm90aWNlYWJsZQotCSAqIGJvb3QtdGltZSBhbmQgY2FwdHVyZS1zdGFydCBkZWxheXMuCi0JICovCi0JbWRlbGF5KDIpOwotCi0JLyoKLQkgKiBBbm90aGVyIHNhZCBmYWN0IGlzIHRoYXQgc29tZXRpbWVzLCBjb21tYW5kcyBzaWxlbnRseSBjb21wbGV0ZSBidXQKLQkgKiBjYWZlX3NtYnVzX3dyaXRlX2RvbmUoKSBuZXZlciBiZWNvbWVzIGF3YXJlIG9mIHRoaXMuCi0JICogVGhpcyBoYXBwZW5zIGF0IHJhbmRvbSBhbmQgYXBwZWFycyB0byBwb3NzaWJsZSBvY2N1ciB3aXRoIGFueQotCSAqIGNvbW1hbmQuCi0JICogV2UgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcy4gV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZQotCSAqIHdpdGggdGhlIHRpbWVvdXQgaW4gdGhlIHdhaXQgYmVsb3csIGFzc3VtaW5nIHRoYXQgYWxsIGNvbW1hbmRzCi0JICogY29tcGxldGUgd2l0aGluIHRoZSB0aW1lb3V0LgotCSAqLwotCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPnNtYnVzX3dhaXQsIGNhZmVfc21idXNfd3JpdGVfZG9uZShjYW0pLAotCQkJQ0FGRV9TTUJVU19USU1FT1VUKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAocnZhbCAmIFRXU0lDMV9XU1RBVCkgewotCQljYW1fZXJyKGNhbSwgIlNNQlVTIHdyaXRlICglMDJ4LyUwMngvJTAyeCkgdGltZWQgb3V0XG4iLCBhZGRyLAotCQkJCWNvbW1hbmQsIHZhbHVlKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChydmFsICYgVFdTSUMxX0VSUk9SKSB7Ci0JCWNhbV9lcnIoY2FtLCAiU01CVVMgd3JpdGUgKCUwMngvJTAyeC8lMDJ4KSBlcnJvclxuIiwgYWRkciwKLQkJCQljb21tYW5kLCB2YWx1ZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgY2FmZV9zbWJ1c19yZWFkX2RvbmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYzE7Ci0KLQkvKgotCSAqIFdlIG11c3QgZGVsYXkgYWZ0ZXIgdGhlIGludGVycnVwdCwgb3IgdGhlIGNvbnRyb2xsZXIgZ2V0cyBjb25mdXNlZAotCSAqIGFuZCBuZXZlciBkb2VzIGdpdmUgdXMgZ29vZCBzdGF0dXMuICBGb3J0dW5hdGVseSwgd2UgZG9uJ3QgZG8gdGhpcwotCSAqIG9mdGVuLgotCSAqLwotCXVkZWxheSgyMCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQljMSA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGMxICYgKFRXU0lDMV9SVkFMSUR8VFdTSUMxX0VSUk9SKTsKLX0KLQotCi0KLXN0YXRpYyBpbnQgY2FmZV9zbWJ1c19yZWFkX2RhdGEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sCi0JCXUxNiBhZGRyLCB1OCBjb21tYW5kLCB1OCAqdmFsdWUpCi17Ci0JdW5zaWduZWQgaW50IHJ2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcnZhbCA9IFRXU0lDMF9FTiB8ICgoYWRkciA8PCBUV1NJQzBfU0lEX1NISUZUKSAmIFRXU0lDMF9TSUQpOwotCXJ2YWwgfD0gVFdTSUMwX09WTUFHSUM7IC8qIE1ha2UgT1Ygc2Vuc29ycyB3b3JrICovCi0JLyoKLQkgKiBNYXJ2ZWwgc2V6IHNldCBjbGtkaXYgdG8gYWxsIDEncyBmb3Igbm93LgotCSAqLwotCXJ2YWwgfD0gVFdTSUMwX0NMS0RJVjsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzAsIHJ2YWwpOwotCSh2b2lkKSBjYWZlX3JlZ19yZWFkKGNhbSwgUkVHX1RXU0lDMSk7IC8qIGZvcmNlIHdyaXRlICovCi0JcnZhbCA9IFRXU0lDMV9SRUFEIHwgKChjb21tYW5kIDw8IFRXU0lDMV9BRERSX1NISUZUKSAmIFRXU0lDMV9BRERSKTsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19UV1NJQzEsIHJ2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQotCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPnNtYnVzX3dhaXQsCi0JCQljYWZlX3NtYnVzX3JlYWRfZG9uZShjYW0pLCBDQUZFX1NNQlVTX1RJTUVPVVQpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCBSRUdfVFdTSUMxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAocnZhbCAmIFRXU0lDMV9FUlJPUikgewotCQljYW1fZXJyKGNhbSwgIlNNQlVTIHJlYWQgKCUwMngvJTAyeCkgZXJyb3JcbiIsIGFkZHIsIGNvbW1hbmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKCEgKHJ2YWwgJiBUV1NJQzFfUlZBTElEKSkgewotCQljYW1fZXJyKGNhbSwgIlNNQlVTIHJlYWQgKCUwMngvJTAyeCkgdGltZWQgb3V0XG4iLCBhZGRyLAotCQkJCWNvbW1hbmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JKnZhbHVlID0gcnZhbCAmIDB4ZmY7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEgdHJhbnNmZXIgb3ZlciBTTUJVUy4gIFRoaXMgdGhpbmcgaXMgY2FsbGVkIHVuZGVyCi0gKiB0aGUgaTJjIGJ1cyBsb2NrLCBzbyB3ZSBzaG91bGRuJ3QgcmFjZSB3aXRoIG91cnNlbHZlcy4uLgotICovCi1zdGF0aWMgaW50IGNhZmVfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAotCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciBydywgdTggY29tbWFuZCwKLQkJaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQotewotCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOwotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCS8qCi0JICogVGhpcyBpbnRlcmZhY2Ugd291bGQgYXBwZWFyIHRvIG9ubHkgZG8gYnl0ZSBkYXRhIG9wcy4gIE9LCi0JICogaXQgY2FuIGRvIHdvcmQgdG9vLCBidXQgdGhlIGNhbSBjaGlwIGhhcyBubyB1c2UgZm9yIHRoYXQuCi0JICovCi0JaWYgKHNpemUgIT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgewotCQljYW1fZXJyKGNhbSwgImZ1bmt5IHhmZXIgc2l6ZSAlZFxuIiwgc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChydyA9PSBJMkNfU01CVVNfV1JJVEUpCi0JCXJldCA9IGNhZmVfc21idXNfd3JpdGVfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOwotCWVsc2UgaWYgKHJ3ID09IEkyQ19TTUJVU19SRUFEKQotCQlyZXQgPSBjYWZlX3NtYnVzX3JlYWRfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfc21idXNfZW5hYmxlX2lycShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0lSUU1BU0ssIFRXU0lJUlFTKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB1MzIgY2FmZV9zbWJ1c19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgIHwKLQkgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBOwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gY2FmZV9zbWJ1c19hbGdvID0gewotCS5zbWJ1c194ZmVyID0gY2FmZV9zbWJ1c194ZmVyLAotCS5mdW5jdGlvbmFsaXR5ID0gY2FmZV9zbWJ1c19mdW5jCi19OwotCi0vKiBTb21lYm9keSBpcyBvbiB0aGUgYnVzICovCi1zdGF0aWMgdm9pZCBjYWZlX2N0bHJfc3RvcF9kbWEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwotc3RhdGljIHZvaWQgY2FmZV9jdGxyX3Bvd2VyX2Rvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwotCi1zdGF0aWMgaW50IGNhZmVfc21idXNfc2V0dXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJmNhbS0+aTJjX2FkYXB0ZXI7Ci0JaW50IHJldDsKLQotCWNhZmVfc21idXNfZW5hYmxlX2lycShjYW0pOwotCWFkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JYWRhcC0+YWxnbyA9ICZjYWZlX3NtYnVzX2FsZ287Ci0Jc3RyY3B5KGFkYXAtPm5hbWUsICJjYWZlX2NjaWMiKTsKLQlhZGFwLT5kZXYucGFyZW50ID0gJmNhbS0+cGRldi0+ZGV2OwotCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgJmNhbS0+djRsMl9kZXYpOwotCXJldCA9IGkyY19hZGRfYWRhcHRlcihhZGFwKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlIGkyYyBhZGFwdGVyXG4iKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBjYWZlX3NtYnVzX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWkyY19kZWxfYWRhcHRlcigmY2FtLT5pMmNfYWRhcHRlcik7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIERlYWwgd2l0aCB0aGUgY29udHJvbGxlci4KLSAqLwotCi0vKgotICogRG8gZXZlcnl0aGluZyB3ZSB0aGluayB3ZSBuZWVkIHRvIGhhdmUgdGhlIGludGVyZmFjZSBvcGVyYXRpbmcKLSAqIGFjY29yZGluZyB0byB0aGUgZGVzaXJlZCBmb3JtYXQuCi0gKi8KLXN0YXRpYyB2b2lkIGNhZmVfY3Rscl9kbWEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JLyoKLQkgKiBTdG9yZSB0aGUgZmlyc3QgdHdvIFkgYnVmZmVycyAod2UgYXJlbid0IHN1cHBvcnRpbmcKLQkgKiBwbGFuYXIgZm9ybWF0cyBmb3Igbm93LCBzbyBubyBVViBidWZzKS4gIFRoZW4gZWl0aGVyCi0JICogc2V0IHRoZSB0aGlyZCBpZiBpdCBleGlzdHMsIG9yIHRlbGwgdGhlIGNvbnRyb2xsZXIKLQkgKiB0byBqdXN0IHVzZSB0d28uCi0JICovCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfWTBCQVIsIGNhbS0+ZG1hX2hhbmRsZXNbMF0pOwotCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX1kxQkFSLCBjYW0tPmRtYV9oYW5kbGVzWzFdKTsKLQlpZiAoY2FtLT5uYnVmcyA+IDIpIHsKLQkJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfWTJCQVIsIGNhbS0+ZG1hX2hhbmRsZXNbMl0pOwotCQljYWZlX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1RXT0JVRlMpOwotCX0KLQllbHNlCi0JCWNhZmVfcmVnX3NldF9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1RXT0JVRlMpOwotCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX1VCQVIsIDApOyAvKiAzMiBiaXRzIG9ubHkgZm9yIG5vdyAqLwotfQotCi1zdGF0aWMgdm9pZCBjYWZlX2N0bHJfaW1hZ2Uoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JaW50IGltZ3N6OwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmZtdCA9ICZjYW0tPnBpeF9mb3JtYXQ7Ci0KLQlpbWdzeiA9ICgoZm10LT5oZWlnaHQgPDwgSU1HU1pfVl9TSElGVCkgJiBJTUdTWl9WX01BU0spIHwKLQkJKGZtdC0+Ynl0ZXNwZXJsaW5lICYgSU1HU1pfSF9NQVNLKTsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19JTUdTSVpFLCBpbWdzeik7Ci0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfSU1HT0ZGU0VULCAwKTsKLQkvKiBZUElUQ0gganVzdCBkcm9wcyB0aGUgbGFzdCB0d28gYml0cyAqLwotCWNhZmVfcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfSU1HUElUQ0gsIGZtdC0+Ynl0ZXNwZXJsaW5lLAotCQkJSU1HUF9ZUF9NQVNLKTsKLQkvKgotCSAqIFRlbGwgdGhlIGNvbnRyb2xsZXIgYWJvdXQgdGhlIGltYWdlIGZvcm1hdCB3ZSBhcmUgdXNpbmcuCi0JICovCi0Jc3dpdGNoIChjYW0tPnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQpIHsKLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotCSAgICBjYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0NUUkwwLAotCQkJICAgIEMwX0RGX1lVVnxDMF9ZVVZfUEFDS0VEfEMwX1lVVkVfWVVZViwKLQkJCSAgICBDMF9ERl9NQVNLKTsKLQkgICAgYnJlYWs7Ci0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I0NDQ6Ci0JICAgIGNhZmVfcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfQ1RSTDAsCi0JCQkgICAgQzBfREZfUkdCfEMwX1JHQkZfNDQ0fEMwX1JHQjRfWFJHQiwKLQkJCSAgICBDMF9ERl9NQVNLKTsKLQkJLyogQWxwaGEgdmFsdWU/ICovCi0JICAgIGJyZWFrOwotCi0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgotCSAgICBjYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0NUUkwwLAotCQkJICAgIEMwX0RGX1JHQnxDMF9SR0JGXzU2NXxDMF9SR0I1X0JHR1IsCi0JCQkgICAgQzBfREZfTUFTSyk7Ci0JICAgIGJyZWFrOwotCi0JZGVmYXVsdDoKLQkgICAgY2FtX2VycihjYW0sICJVbmtub3duIGZvcm1hdCAleFxuIiwgY2FtLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0KTsKLQkgICAgYnJlYWs7Ci0JfQotCS8qCi0JICogTWFrZSBzdXJlIGl0IGtub3dzIHdlIHdhbnQgdG8gdXNlIGhzeW5jL3ZzeW5jLgotCSAqLwotCWNhZmVfcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfQ1RSTDAsIEMwX1NJRl9IVlNZTkMsCi0JCQlDMF9TSUZNX01BU0spOwotfQotCi0KLS8qCi0gKiBDb25maWd1cmUgdGhlIGNvbnRyb2xsZXIgZm9yIG9wZXJhdGlvbjsgY2FsbGVyIGhvbGRzIHRoZQotICogZGV2aWNlIG11dGV4LgotICovCi1zdGF0aWMgaW50IGNhZmVfY3Rscl9jb25maWd1cmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JY2FmZV9jdGxyX2RtYShjYW0pOwotCWNhZmVfY3Rscl9pbWFnZShjYW0pOwotCWNhZmVfc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhZmVfY3Rscl9pcnFfZW5hYmxlKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCS8qCi0JICogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cywgc2luY2Ugd2UgZG8gbm90Ci0JICogZXhwZWN0IHRvIGhhdmUgSS9PIGFjdGl2ZSBwcmlvciB0byBlbmFibGluZy4KLQkgKi8KLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19JUlFTVEFULCBGUkFNRUlSUVMpOwotCWNhZmVfcmVnX3NldF9iaXQoY2FtLCBSRUdfSVJRTUFTSywgRlJBTUVJUlFTKTsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9jdGxyX2lycV9kaXNhYmxlKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWNhZmVfcmVnX2NsZWFyX2JpdChjYW0sIFJFR19JUlFNQVNLLCBGUkFNRUlSUVMpOwotfQotCi0vKgotICogTWFrZSB0aGUgY29udHJvbGxlciBzdGFydCBncmFiYmluZyBpbWFnZXMuICBFdmVyeXRoaW5nIG11c3QKLSAqIGJlIHNldCB1cCBiZWZvcmUgZG9pbmcgdGhpcy4KLSAqLwotc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0YXJ0KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCS8qIHNldF9iaXQgcGVyZm9ybXMgYSByZWFkLCBzbyBubyBvdGhlciBiYXJyaWVyIHNob3VsZCBiZQotCSAgIG5lZWRlZCBoZXJlICovCi0JY2FmZV9yZWdfc2V0X2JpdChjYW0sIFJFR19DVFJMMCwgQzBfRU5BQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0b3Aoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JY2FmZV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwwLCBDMF9FTkFCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBjYWZlX2N0bHJfaW5pdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEFkZGVkIG1hZ2ljIHRvIGJyaW5nIHVwIHRoZSBoYXJkd2FyZSBvbiB0aGUgQi1UZXN0IGJvYXJkCi0JICovCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCAweDMwMzgsIDB4OCk7Ci0JY2FmZV9yZWdfd3JpdGUoY2FtLCAweDMxNWMsIDB4ODAwMDgpOwotCS8qCi0JICogR28gdGhyb3VnaCB0aGUgZGFuY2UgbmVlZGVkIHRvIHdha2UgdGhlIGRldmljZSB1cC4KLQkgKiBOb3RlIHRoYXQgdGhlc2UgcmVnaXN0ZXJzIGFyZSBnbG9iYWwgYW5kIHNoYXJlZAotCSAqIHdpdGggdGhlIE5BTkQgYW5kIFNEIGRldmljZXMuICBJbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZQotCSAqIHRocmVlIHN0aWxsIG5lZWRzIHRvIGJlIGV4YW1pbmVkLgotCSAqLwotCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dMX0NTUiwgR0NTUl9TUlN8R0NTUl9NUlMpOyAvKiBOZWVkZWQ/ICovCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX1NSQ3xHQ1NSX01SQyk7Ci0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX1NSQ3xHQ1NSX01SUyk7Ci0JLyoKLQkgKiBIZXJlIHdlIG11c3Qgd2FpdCBhIGJpdCBmb3IgdGhlIGNvbnRyb2xsZXIgdG8gY29tZSBhcm91bmQuCi0JICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCW1zbGVlcCg1KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX0NDSUNfRU58R0NTUl9TUkN8R0NTUl9NUkMpOwotCWNhZmVfcmVnX3NldF9iaXQoY2FtLCBSRUdfR0xfSU1BU0ssIEdJTVNLX0NDSUNfRU4pOwotCS8qCi0JICogTWFrZSBzdXJlIGl0J3Mgbm90IHBvd2VyZWQgZG93bi4KLQkgKi8KLQljYWZlX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1BXUkRXTik7Ci0JLyoKLQkgKiBUdXJuIG9mZiB0aGUgZW5hYmxlIGJpdC4gIEl0IHN1cmUgc2hvdWxkIGJlIG9mZiBhbnl3YXksCi0JICogYnV0IGl0J3MgZ29vZCB0byBiZSBzdXJlLgotCSAqLwotCWNhZmVfcmVnX2NsZWFyX2JpdChjYW0sIFJFR19DVFJMMCwgQzBfRU5BQkxFKTsKLQkvKgotCSAqIE1hc2sgYWxsIGludGVycnVwdHMuCi0JICovCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfSVJRTUFTSywgMCk7Ci0JLyoKLQkgKiBDbG9jayB0aGUgc2Vuc29yIGFwcHJvcHJpYXRlbHkuICBDb250cm9sbGVyIGNsb2NrIHNob3VsZAotCSAqIGJlIDQ4TUh6LCBzZW5zb3IgInR5cGljYWwiIHZhbHVlIGlzIGhhbGYgdGhhdC4KLQkgKi8KLQljYWZlX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0NMS0NUUkwsIDIsIENMS19ESVZfTUFTSyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotfQotCi0KLS8qCi0gKiBTdG9wIHRoZSBjb250cm9sbGVyLCBhbmQgZG9uJ3QgcmV0dXJuIHVudGlsIHdlJ3JlIHJlYWxseSBzdXJlIHRoYXQgbm8KLSAqIGZ1cnRoZXIgRE1BIGlzIGdvaW5nIG9uLgotICovCi1zdGF0aWMgdm9pZCBjYWZlX2N0bHJfc3RvcF9kbWEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogVGhlb3J5OiBzdG9wIHRoZSBjYW1lcmEgY29udHJvbGxlciAod2hldGhlciBpdCBpcyBvcGVyYXRpbmcKLQkgKiBvciBub3QpLiAgRGVsYXkgYnJpZWZseSBqdXN0IGluIGNhc2Ugd2UgcmFjZSB3aXRoIHRoZSBTT0YKLQkgKiBpbnRlcnJ1cHQsIHRoZW4gd2FpdCB1bnRpbCBubyBETUEgaXMgYWN0aXZlLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JY2FmZV9jdGxyX3N0b3AoY2FtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JbWRlbGF5KDEpOwotCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPmlvd2FpdCwKLQkJCSF0ZXN0X2JpdChDRl9ETUFfQUNUSVZFLCAmY2FtLT5mbGFncyksIEhaKTsKLQlpZiAodGVzdF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpKQotCQljYW1fZXJyKGNhbSwgIlRpbWVvdXQgd2FpdGluZyBmb3IgRE1BIHRvIGVuZFxuIik7Ci0JCS8qIFRoaXMgd291bGQgYmUgYmFkIG5ld3MgLSB3aGF0IG5vdz8gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCWNhbS0+c3RhdGUgPSBTX0lETEU7Ci0JY2FmZV9jdGxyX2lycV9kaXNhYmxlKGNhbSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogUG93ZXIgdXAgYW5kIGRvd24uCi0gKi8KLXN0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl91cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQljYWZlX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1BXUkRXTik7Ci0JLyoKLQkgKiBQYXJ0IG9uZSBvZiB0aGUgc2Vuc29yIGRhbmNlOiB0dXJuIHRoZSBnbG9iYWwKLQkgKiBHUElPIHNpZ25hbCBvbi4KLQkgKi8KLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HTF9GQ1IsIEdGQ1JfR1BJT19PTik7Ci0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR0xfR1BJT1IsIEdHUElPX09VVHxHR1BJT19WQUwpOwotCS8qCi0JICogUHV0IHRoZSBzZW5zb3IgaW50byBvcGVyYXRpb25hbCBtb2RlIChhc3N1bWVzIE9MUEMtc3R5bGUKLQkgKiB3aXJpbmcpLiAgQ29udHJvbCAwIGlzIHJlc2V0IC0gc2V0IHRvIDEgdG8gb3BlcmF0ZS4KLQkgKiBDb250cm9sIDEgaXMgcG93ZXIgZG93biwgc2V0IHRvIDAgdG8gb3BlcmF0ZS4KLQkgKi8KLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOKTsgLyogcHdyIHVwLCByZXNldCAqLwotLyoJbWRlbGF5KDEpOyAqLyAvKiBNYXJ2ZWxsIHNheXMgMW1zIHdpbGwgZG8gaXQgKi8KLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOfEdQUl9DMCk7Ci0vKgltZGVsYXkoMSk7ICovIC8qIEVub3VnaD8gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JbXNsZWVwKDUpOyAvKiBKdXN0IHRvIGJlIHN1cmUgKi8KLX0KLQotc3RhdGljIHZvaWQgY2FmZV9jdGxyX3Bvd2VyX2Rvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzEpOwotCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dMX0ZDUiwgR0ZDUl9HUElPX09OKTsKLQljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HTF9HUElPUiwgR0dQSU9fT1VUKTsKLQljYWZlX3JlZ19zZXRfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBDb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBzZW5zb3IuCi0gKi8KLQotc3RhdGljIGludCBfX2NhZmVfY2FtX3Jlc2V0KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHJlc2V0LCAwKTsKLX0KLQotLyoKLSAqIFdlIGhhdmUgZm91bmQgdGhlIHNlbnNvciBvbiB0aGUgaTJjLiAgTGV0J3MgdHJ5IHRvIGhhdmUgYQotICogY29udmVyc2F0aW9uLgotICovCi1zdGF0aWMgaW50IGNhZmVfY2FtX2luaXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0Jc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgY2hpcDsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoY2FtLT5zdGF0ZSAhPSBTX05PVFJFQURZKQotCQljYW1fd2FybihjYW0sICJDYW0gaW5pdCB3aXRoIGRldmljZSBpbiBmdW5reSBzdGF0ZSAlZCIsCi0JCQkJY2FtLT5zdGF0ZSk7Ci0JcmV0ID0gX19jYWZlX2NhbV9yZXNldChjYW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCWNoaXAuaWRlbnQgPSBWNEwyX0lERU5UX05PTkU7Ci0JY2hpcC5tYXRjaC50eXBlID0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSOwotCWNoaXAubWF0Y2guYWRkciA9IGNhbS0+c2Vuc29yX2FkZHI7Ci0JcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQljYW0tPnNlbnNvcl90eXBlID0gY2hpcC5pZGVudDsKLQlpZiAoY2FtLT5zZW5zb3JfdHlwZSAhPSBWNEwyX0lERU5UX09WNzY3MCkgewotCQljYW1fZXJyKGNhbSwgIlVuc3VwcG9ydGVkIHNlbnNvciB0eXBlIDB4JXgiLCBjYW0tPnNlbnNvcl90eXBlKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotLyogR2V0L3NldCBwYXJhbWV0ZXJzPyAqLwotCXJldCA9IDA7Ci0JY2FtLT5zdGF0ZSA9IFNfSURMRTsKLSAgb3V0OgotCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBDb25maWd1cmUgdGhlIHNlbnNvciB0byBtYXRjaCB0aGUgcGFyYW1ldGVycyB3ZSBoYXZlLiAgQ2FsbGVyIHNob3VsZAotICogaG9sZCBzX211dGV4Ci0gKi8KLXN0YXRpYyBpbnQgY2FmZV9jYW1fc2V0X2ZsaXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0Jc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCi0JbWVtc2V0KCZjdHJsLCAwLCBzaXplb2YoY3RybCkpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9WRkxJUDsKLQljdHJsLnZhbHVlID0gZmxpcDsKLQlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNhZmVfY2FtX2NvbmZpZ3VyZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1idXNfZm10OwotCWludCByZXQ7Ci0KLQl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJm1idXNfZm10LCAmY2FtLT5waXhfZm9ybWF0LCBjYW0tPm1idXNfY29kZSk7Ci0JcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBpbml0LCAwKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfbWJ1c19mbXQsICZtYnVzX2ZtdCk7Ci0JLyoKLQkgKiBPVjc2NzAgZG9lcyB3ZWlyZCB0aGluZ3MgaWYgZmxpcCBpcyBzZXQgKmJlZm9yZSogZm9ybWF0Li4uCi0JICovCi0JcmV0ICs9IGNhZmVfY2FtX3NldF9mbGlwKGNhbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBETUEgYnVmZmVyIG1hbmFnZW1lbnQuICBUaGVzZSBmdW5jdGlvbnMgbmVlZCBzX211dGV4IGhlbGQuCi0gKi8KLQotLyogRklYTUU6IHRoaXMgaXMgaW5lZmZpY2llbnQgYXMgaGVsbCwgc2luY2UgZG1hX2FsbG9jX2NvaGVyZW50IGp1c3QKLSAqIGRvZXMgYSBnZXRfZnJlZV9wYWdlcygpIGNhbGwsIGFuZCB3ZSB3YXN0ZSBhIGdvb2QgY2h1bmsgb2YgYW4gb3JkZXJOCi0gKiBhbGxvY2F0aW9uLiAgU2hvdWxkIHRyeSB0byBhbGxvY2F0ZSB0aGUgd2hvbGUgc2V0IGluIG9uZSBjaHVuay4KLSAqLwotc3RhdGljIGludCBjYWZlX2FsbG9jX2RtYV9idWZzKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCBpbnQgbG9hZHRpbWUpCi17Ci0JaW50IGk7Ci0KLQljYWZlX3NldF9jb25maWdfbmVlZGVkKGNhbSwgMSk7Ci0JaWYgKGxvYWR0aW1lKQotCQljYW0tPmRtYV9idWZfc2l6ZSA9IGRtYV9idWZfc2l6ZTsKLQllbHNlCi0JCWNhbS0+ZG1hX2J1Zl9zaXplID0gY2FtLT5waXhfZm9ybWF0LnNpemVpbWFnZTsKLQlpZiAobl9kbWFfYnVmcyA+IDMpCi0JCW5fZG1hX2J1ZnMgPSAzOwotCi0JY2FtLT5uYnVmcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5fZG1hX2J1ZnM7IGkrKykgewotCQljYW0tPmRtYV9idWZzW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KCZjYW0tPnBkZXYtPmRldiwKLQkJCQljYW0tPmRtYV9idWZfc2l6ZSwgY2FtLT5kbWFfaGFuZGxlcyArIGksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmIChjYW0tPmRtYV9idWZzW2ldID09IE5VTEwpIHsKLQkJCWNhbV93YXJuKGNhbSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBETUEgYnVmZmVyXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIEZvciBkZWJ1ZywgcmVtb3ZlIGV2ZW50dWFsbHkgKi8KLQkJbWVtc2V0KGNhbS0+ZG1hX2J1ZnNbaV0sIDB4Y2MsIGNhbS0+ZG1hX2J1Zl9zaXplKTsKLQkJKGNhbS0+bmJ1ZnMpKys7Ci0JfQotCi0Jc3dpdGNoIChjYW0tPm5idWZzKSB7Ci0JY2FzZSAxOgotCSAgICBkbWFfZnJlZV9jb2hlcmVudCgmY2FtLT5wZGV2LT5kZXYsIGNhbS0+ZG1hX2J1Zl9zaXplLAotCQkJICAgIGNhbS0+ZG1hX2J1ZnNbMF0sIGNhbS0+ZG1hX2hhbmRsZXNbMF0pOwotCSAgICBjYW0tPm5idWZzID0gMDsKLQljYXNlIDA6Ci0JICAgIGNhbV9lcnIoY2FtLCAiSW5zdWZmaWNpZW50IERNQSBidWZmZXJzLCBjYW5ub3Qgb3BlcmF0ZVxuIik7Ci0JICAgIHJldHVybiAtRU5PTUVNOwotCi0JY2FzZSAyOgotCSAgICBpZiAobl9kbWFfYnVmcyA+IDIpCi0JCSAgICBjYW1fd2FybihjYW0sICJXaWxsIGxpbXAgYWxvbmcgd2l0aCBvbmx5IDIgYnVmZmVyc1xuIik7Ci0JICAgIGJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9mcmVlX2RtYV9idWZzKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZnM7IGkrKykgewotCQlkbWFfZnJlZV9jb2hlcmVudCgmY2FtLT5wZGV2LT5kZXYsIGNhbS0+ZG1hX2J1Zl9zaXplLAotCQkJCWNhbS0+ZG1hX2J1ZnNbaV0sIGNhbS0+ZG1hX2hhbmRsZXNbaV0pOwotCQljYW0tPmRtYV9idWZzW2ldID0gTlVMTDsKLQl9Ci0JY2FtLT5uYnVmcyA9IDA7Ci19Ci0KLQotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBIZXJlIHN0YXJ0cyB0aGUgVjRMMiBpbnRlcmZhY2UgY29kZS4KLSAqLwotCi0vKgotICogUmVhZCBhbiBpbWFnZSBmcm9tIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGNhZmVfZGVsaXZlcl9idWZmZXIoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sCi0JCWNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQotewotCWludCBidWZubzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQlpZiAoY2FtLT5uZXh0X2J1ZiA8IDApIHsKLQkJY2FtX2VycihjYW0sICJkZWxpdmVyX2J1ZmZlcjogTm8gbmV4dCBidWZmZXJcbiIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlidWZubyA9IGNhbS0+bmV4dF9idWY7Ci0JY2xlYXJfYml0KGJ1Zm5vLCAmY2FtLT5mbGFncyk7Ci0JaWYgKCsrKGNhbS0+bmV4dF9idWYpID49IGNhbS0+bmJ1ZnMpCi0JCWNhbS0+bmV4dF9idWYgPSAwOwotCWlmICghIHRlc3RfYml0KGNhbS0+bmV4dF9idWYsICZjYW0tPmZsYWdzKSkKLQkJY2FtLT5uZXh0X2J1ZiA9IC0xOwotCWNhbS0+c3BlY2ZyYW1lcyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGxlbiA+IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2UpCi0JCWxlbiA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2U7Ci0JaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGNhbS0+ZG1hX2J1ZnNbYnVmbm9dLCBsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkoKnBvcykgKz0gbGVuOwotCXJldHVybiBsZW47Ci19Ci0KLS8qCi0gKiBHZXQgZXZlcnl0aGluZyByZWFkeSwgYW5kIHN0YXJ0IGdyYWJiaW5nIGZyYW1lcy4KLSAqLwotc3RhdGljIGludCBjYWZlX3JlYWRfc2V0dXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGVudW0gY2FmZV9zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIENvbmZpZ3VyYXRpb24uICBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIERNQSBidWZmZXJzLAotCSAqIG1ha2Ugb25lIGxhc3QsIGRlc3BlcmF0ZSBhdHRlbXB0LgotCSAqLwotCWlmIChjYW0tPm5idWZzID09IDApCi0JCWlmIChjYWZlX2FsbG9jX2RtYV9idWZzKGNhbSwgMCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjYWZlX25lZWRzX2NvbmZpZyhjYW0pKSB7Ci0JCWNhZmVfY2FtX2NvbmZpZ3VyZShjYW0pOwotCQlyZXQgPSBjYWZlX2N0bHJfY29uZmlndXJlKGNhbSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogVHVybiBpdCBsb29zZS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCWNhZmVfcmVzZXRfYnVmZmVycyhjYW0pOwotCWNhZmVfY3Rscl9pcnFfZW5hYmxlKGNhbSk7Ci0JY2FtLT5zdGF0ZSA9IHN0YXRlOwotCWNhZmVfY3Rscl9zdGFydChjYW0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBjYWZlX3Y0bF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLAotCQljaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogUGVyaGFwcyB3ZSdyZSBpbiBzcGVjdWxhdGl2ZSByZWFkIG1vZGUgYW5kIGFscmVhZHkKLQkgKiBoYXZlIGRhdGE/Ci0JICovCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoY2FtLT5zdGF0ZSA9PSBTX1NQRUNSRUFEKSB7Ci0JCWlmIChjYW0tPm5leHRfYnVmID49IDApIHsKLQkJCXJldCA9IGNhZmVfZGVsaXZlcl9idWZmZXIoY2FtLCBidWZmZXIsIGxlbiwgcG9zKTsKLQkJCWlmIChyZXQgIT0gMCkKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9IGVsc2UgaWYgKGNhbS0+c3RhdGUgPT0gU19GTEFLRUQgfHwgY2FtLT5zdGF0ZSA9PSBTX05PVFJFQURZKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9IGVsc2UgaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCS8qCi0JICogdjRsMjogbXVsdGlwbGUgcHJvY2Vzc2VzIGNhbiBvcGVuIHRoZSBkZXZpY2UsIGJ1dCBvbmx5Ci0JICogb25lIGdldHMgdG8gZ3JhYiBkYXRhIGZyb20gaXQuCi0JICovCi0JaWYgKGNhbS0+b3duZXIgJiYgY2FtLT5vd25lciAhPSBmaWxwKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQljYW0tPm93bmVyID0gZmlscDsKLQotCS8qCi0JICogRG8gc2V0dXAgaWYgbmVlZCBiZS4KLQkgKi8KLQlpZiAoY2FtLT5zdGF0ZSAhPSBTX1NQRUNSRUFEKSB7Ci0JCXJldCA9IGNhZmVfcmVhZF9zZXR1cChjYW0sIFNfU0lOR0xFUkVBRCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCS8qCi0JICogV2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbi4gIFRoaXMgc2hvdWxkIHByb2JhYmx5Ci0JICogYmUgaW50ZXJydXB0aWJsZSAoRklYTUUpLgotCSAqLwotCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPmlvd2FpdCwgY2FtLT5uZXh0X2J1ZiA+PSAwLCBIWik7Ci0JaWYgKGNhbS0+bmV4dF9idWYgPCAwKSB7Ci0JCWNhbV9lcnIoY2FtLCAicmVhZCgpIG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIpOwotCQljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQkvKgotCSAqIEdpdmUgdGhlbSB0aGVpciBkYXRhIGFuZCB3ZSBzaG91bGQgYmUgZG9uZS4KLQkgKi8KLQlyZXQgPSBjYWZlX2RlbGl2ZXJfYnVmZmVyKGNhbSwgYnVmZmVyLCBsZW4sIHBvcyk7Ci0KLSAgb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0KLQotCi0KLQotCi0vKgotICogU3RyZWFtaW5nIEkvTyBzdXBwb3J0LgotICovCi0KLQotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXQ7Ci0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUgfHwgY2FtLT5uX3NidWZzID09IDApCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWNhbS0+c2VxdWVuY2UgPSAwOwotCXJldCA9IGNhZmVfcmVhZF9zZXR1cChjYW0sIFNfU1RSRUFNSU5HKTsKLQotICBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLSAgb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlnb3RvIG91dDsKLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWlmIChjYW0tPnN0YXRlICE9IFNfU1RSRUFNSU5HKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKLQlyZXQgPSAwOwotCi0gIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotICBvdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgY2FmZV9zZXR1cF9zaW9idWYoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGludCBpbmRleCkKLXsKLQlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpidWYgPSBjYW0tPnNiX2J1ZnMgKyBpbmRleDsKLQotCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOwotCWJ1Zi0+djRsYnVmLmxlbmd0aCA9IFBBR0VfQUxJR04oY2FtLT5waXhfZm9ybWF0LnNpemVpbWFnZSk7Ci0JYnVmLT5idWZmZXIgPSB2bWFsbG9jX3VzZXIoYnVmLT52NGxidWYubGVuZ3RoKTsKLQlpZiAoYnVmLT5idWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYnVmLT5tYXBjb3VudCA9IDA7Ci0JYnVmLT5jYW0gPSBjYW07Ci0KLQlidWYtPnY0bGJ1Zi5pbmRleCA9IGluZGV4OwotCWJ1Zi0+djRsYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JYnVmLT52NGxidWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JYnVmLT52NGxidWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQkvKgotCSAqIE9mZnNldDogbXVzdCBiZSAzMi1iaXQgZXZlbiBvbiBhIDY0LWJpdCBzeXN0ZW0uICB2aWRlb2J1Zi1kbWEtc2cKLQkgKiBqdXN0IHVzZXMgdGhlIGxlbmd0aCB0aW1lcyB0aGUgaW5kZXgsIGJ1dCB0aGUgc3BlYyB3YXJucwotCSAqIGFnYWluc3QgZG9pbmcganVzdCB0aGF0IC0gdm1hIG1lcmdpbmcgcHJvYmxlbXMuICBTbyB3ZQotCSAqIGxlYXZlIGEgZ2FwIGJldHdlZW4gZWFjaCBwYWlyIG9mIGJ1ZmZlcnMuCi0JICovCi0JYnVmLT52NGxidWYubS5vZmZzZXQgPSAyKmluZGV4KmJ1Zi0+djRsYnVmLmxlbmd0aDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYWZlX2ZyZWVfc2lvX2J1ZmZlcnMoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIElmIGFueSBidWZmZXJzIGFyZSBtYXBwZWQsIHdlIGNhbm5vdCBmcmVlIHRoZW0gYXQgYWxsLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKLQkJaWYgKGNhbS0+c2JfYnVmc1tpXS5tYXBjb3VudCA+IDApCi0JCQlyZXR1cm4gLUVCVVNZOwotCS8qCi0JICogT0ssIGxldCdzIGRvIGl0LgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKLQkJdmZyZWUoY2FtLT5zYl9idWZzW2ldLmJ1ZmZlcik7Ci0JY2FtLT5uX3NidWZzID0gMDsKLQlrZnJlZShjYW0tPnNiX2J1ZnMpOwotCWNhbS0+c2JfYnVmcyA9IE5VTEw7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+c2JfYXZhaWwpOwotCUlOSVRfTElTVF9IRUFEKCZjYW0tPnNiX2Z1bGwpOwotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQgPSAwOyAgLyogU2lsZW5jZSB3YXJuaW5nICovCi0KLQkvKgotCSAqIE1ha2Ugc3VyZSBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZG8uICBVc2VyIHBvaW50ZXJzIGNvdWxkIGJlCi0JICogaW1wbGVtZW50ZWQgd2l0aG91dCBncmVhdCBwYWluLCBidXQgdGhhdCdzIG5vdCBiZWVuIGRvbmUgeWV0LgotCSAqLwotCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkvKgotCSAqIElmIHRoZXkgYXNrIGZvciB6ZXJvIGJ1ZmZlcnMsIHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gc3RvcCBzdHJlYW1pbmcKLQkgKiAoaWYgaXQncyBoYXBwZW5pbmcpIGFuZCBmcmVlIGV2ZXJ5dGhpbmcuICBTaG91bGQgd2UgY2hlY2sgb3duZXI/Ci0JICovCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAocmVxLT5jb3VudCA9PSAwKSB7Ci0JCWlmIChjYW0tPnN0YXRlID09IFNfU1RSRUFNSU5HKQotCQkJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7Ci0JCXJldCA9IGNhZmVfZnJlZV9zaW9fYnVmZmVycyAoY2FtKTsKLQkJZ290byBvdXQ7Ci0JfQotCS8qCi0JICogRGV2aWNlIG5lZWRzIHRvIGJlIGlkbGUgYW5kIHdvcmtpbmcuICBXZSAqY291bGQqIHRyeSB0byBkbyB0aGUKLQkgKiByaWdodCB0aGluZyBpbiBTX1NQRUNSRUFEIGJ5IHNodXR0aW5nIHRoaW5ncyBkb3duLCBidXQgaXQKLQkgKiBwcm9iYWJseSBkb2Vzbid0IG1hdHRlci4KLQkgKi8KLQlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUgfHwgKGNhbS0+b3duZXIgJiYgY2FtLT5vd25lciAhPSBmaWxwKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQljYW0tPm93bmVyID0gZmlscDsKLQotCWlmIChyZXEtPmNvdW50IDwgbWluX2J1ZmZlcnMpCi0JCXJlcS0+Y291bnQgPSBtaW5fYnVmZmVyczsKLQllbHNlIGlmIChyZXEtPmNvdW50ID4gbWF4X2J1ZmZlcnMpCi0JCXJlcS0+Y291bnQgPSBtYXhfYnVmZmVyczsKLQlpZiAoY2FtLT5uX3NidWZzID4gMCkgewotCQlyZXQgPSBjYWZlX2ZyZWVfc2lvX2J1ZmZlcnMoY2FtKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWNhbS0+c2JfYnVmcyA9IGt6YWxsb2MocmVxLT5jb3VudCpzaXplb2Yoc3RydWN0IGNhZmVfc2lvX2J1ZmZlciksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoY2FtLT5zYl9idWZzID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCWZvciAoY2FtLT5uX3NidWZzID0gMDsgY2FtLT5uX3NidWZzIDwgcmVxLT5jb3VudDsgKGNhbS0+bl9zYnVmcysrKSkgewotCQlyZXQgPSBjYWZlX3NldHVwX3Npb2J1ZihjYW0sIGNhbS0+bl9zYnVmcyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoY2FtLT5uX3NidWZzID09IDApICAvKiBubyBsdWNrIGF0IGFsbCAtIHJldCBhbHJlYWR5IHNldCAqLwotCQlrZnJlZShjYW0tPnNiX2J1ZnMpOwotCXJlcS0+Y291bnQgPSBjYW0tPm5fc2J1ZnM7ICAvKiBJbiBjYXNlIG9mIHBhcnRpYWwgc3VjY2VzcyAqLwotCi0gIG91dDoKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQotCQlnb3RvIG91dDsKLQkqYnVmID0gY2FtLT5zYl9idWZzW2J1Zi0+aW5kZXhdLnY0bGJ1ZjsKLQlyZXQgPSAwOwotICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNhZmVfc2lvX2J1ZmZlciAqc2J1ZjsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCi0JCWdvdG8gb3V0OwotCXNidWYgPSBjYW0tPnNiX2J1ZnMgKyBidWYtPmluZGV4OwotCWlmIChzYnVmLT52NGxidWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkgewotCQlyZXQgPSAwOyAvKiBBbHJlYWR5IHF1ZXVlZD8/ICovCi0JCWdvdG8gb3V0OwotCX0KLQlpZiAoc2J1Zi0+djRsYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19ET05FKSB7Ci0JCS8qIFNwZWMgZG9lc24ndCBzYXkgYW55dGhpbmcsIHNlZW1zIGFwcHJvcHJpYXRlIHRobyAqLwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQlzYnVmLT52NGxidWYuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmc2J1Zi0+bGlzdCwgJmNhbS0+c2JfYXZhaWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSAwOwotICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNidWY7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGNhbS0+c3RhdGUgIT0gU19TVFJFQU1JTkcpCi0JCWdvdG8gb3V0X3VubG9jazsKLQlpZiAobGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSAmJiBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Jd2hpbGUgKGxpc3RfZW1wdHkoJmNhbS0+c2JfZnVsbCkgJiYgY2FtLT5zdGF0ZSA9PSBTX1NUUkVBTUlORykgewotCQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT5pb3dhaXQsCi0JCQkJCQkhbGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSkpIHsKLQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JfQotCi0JaWYgKGNhbS0+c3RhdGUgIT0gU19TVFJFQU1JTkcpCi0JCXJldCA9IC1FSU5UUjsKLQllbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQkJLyogU2hvdWxkIHByb2JhYmx5IHJlY2hlY2sgIWxpc3RfZW1wdHkoKSBoZXJlICovCi0JCXNidWYgPSBsaXN0X2VudHJ5KGNhbS0+c2JfZnVsbC5uZXh0LAotCQkJCXN0cnVjdCBjYWZlX3Npb19idWZmZXIsIGxpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZzYnVmLT5saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCQlzYnVmLT52NGxidWYuZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKLQkJKmJ1ZiA9IHNidWYtPnY0bGJ1ZjsKLQkJcmV0ID0gMDsKLQl9Ci0KLSAgb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0gIG91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KLQotc3RhdGljIHZvaWQgY2FmZV92NGxfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0JLyoKLQkgKiBMb2NraW5nOiBkb25lIHVuZGVyIG1tYXBfc2VtLCBzbyB3ZSBkb24ndCBuZWVkIHRvCi0JICogZ28gYmFjayB0byB0aGUgY2FtZXJhIGxvY2sgaGVyZS4KLQkgKi8KLQlzYnVmLT5tYXBjb3VudCsrOwotfQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfdjRsX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNidWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQotCW11dGV4X2xvY2soJnNidWYtPmNhbS0+c19tdXRleCk7Ci0Jc2J1Zi0+bWFwY291bnQtLTsKLQkvKiBEb2NzIHNheSB3ZSBzaG91bGQgc3RvcCBJL08gdG9vLi4uICovCi0JaWYgKHNidWYtPm1hcGNvdW50ID09IDApCi0JCXNidWYtPnY0bGJ1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19NQVBQRUQ7Ci0JbXV0ZXhfdW5sb2NrKCZzYnVmLT5jYW0tPnNfbXV0ZXgpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNhZmVfdjRsX3ZtX29wcyA9IHsKLQkub3BlbiA9IGNhZmVfdjRsX3ZtX29wZW4sCi0JLmNsb3NlID0gY2FmZV92NGxfdm1fY2xvc2UKLX07Ci0KLQotc3RhdGljIGludCBjYWZlX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaTsKLQlzdHJ1Y3QgY2FmZV9zaW9fYnVmZmVyICpzYnVmID0gTlVMTDsKLQotCWlmICghICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8ICEgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkvKgotCSAqIEZpbmQgdGhlIGJ1ZmZlciB0aGV5IGFyZSBsb29raW5nIGZvci4KLQkgKi8KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5fc2J1ZnM7IGkrKykKLQkJaWYgKGNhbS0+c2JfYnVmc1tpXS52NGxidWYubS5vZmZzZXQgPT0gb2Zmc2V0KSB7Ci0JCQlzYnVmID0gY2FtLT5zYl9idWZzICsgaTsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKHNidWYgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSByZW1hcF92bWFsbG9jX3JhbmdlKHZtYSwgc2J1Zi0+YnVmZmVyLCAwKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7Ci0Jdm1hLT52bV9wcml2YXRlX2RhdGEgPSBzYnVmOwotCXZtYS0+dm1fb3BzID0gJmNhZmVfdjRsX3ZtX29wczsKLQlzYnVmLT52NGxidWYuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7Ci0JY2FmZV92NGxfdm1fb3Blbih2bWEpOwotCXJldCA9IDA7Ci0gIG91dDoKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgY2FmZV92NGxfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7Ci0KLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07Ci0KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWlmIChjYW0tPnVzZXJzID09IDApIHsKLQkJY2FmZV9jdGxyX3Bvd2VyX3VwKGNhbSk7Ci0JCV9fY2FmZV9jYW1fcmVzZXQoY2FtKTsKLQkJY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOwotCS8qIEZJWE1FIG1ha2Ugc3VyZSB0aGlzIGlzIGNvbXBsZXRlICovCi0JfQotCShjYW0tPnVzZXJzKSsrOwotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNhZmVfdjRsX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCShjYW0tPnVzZXJzKS0tOwotCWlmIChmaWxwID09IGNhbS0+b3duZXIpIHsKLQkJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7Ci0JCWNhZmVfZnJlZV9zaW9fYnVmZmVycyhjYW0pOwotCQljYW0tPm93bmVyID0gTlVMTDsKLQl9Ci0JaWYgKGNhbS0+dXNlcnMgPT0gMCkgewotCQljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwotCQlpZiAoYWxsb2NfYnVmc19hdF9yZWFkKQotCQkJY2FmZV9mcmVlX2RtYV9idWZzKGNhbSk7Ci0JfQotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FmZV92NGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQotCXBvbGxfd2FpdChmaWxwLCAmY2FtLT5pb3dhaXQsIHB0KTsKLQlpZiAoY2FtLT5uZXh0X2J1ZiA+PSAwKQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOwotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY3RybCwgY3RybCk7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgc19jdHJsLCBjdHJsKTsKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0KLQotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCi17Ci0Jc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY2FmZV9jY2ljIik7Ci0Jc3RyY3B5KGNhcC0+Y2FyZCwgImNhZmVfY2NpYyIpOwotCWNhcC0+dmVyc2lvbiA9IENBRkVfVkVSU0lPTjsKLQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQlWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFRoZSBkZWZhdWx0IGZvcm1hdCB3ZSB1c2UgdW50aWwgc29tZWJvZHkgc2F5cyBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNhZmVfZGVmX3BpeF9mb3JtYXQgPSB7Ci0JLndpZHRoCQk9IFZHQV9XSURUSCwKLQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsCi0JLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lVWVYsCi0JLmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORSwKLQkuYnl0ZXNwZXJsaW5lCT0gVkdBX1dJRFRIKjIsCi0JLnNpemVpbWFnZQk9IFZHQV9XSURUSCpWR0FfSEVJR0hUKjIsCi19OwotCi1zdGF0aWMgY29uc3QgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNhZmVfZGVmX21idXNfY29kZSA9Ci0JCQkJCVY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OwotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsCi0JCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKLXsKLQlpZiAoZm10LT5pbmRleCA+PSBOX0NBRkVfRk1UUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RybGNweShmbXQtPmRlc2NyaXB0aW9uLCBjYWZlX2Zvcm1hdHNbZm10LT5pbmRleF0uZGVzYywKLQkJCXNpemVvZihmbXQtPmRlc2NyaXB0aW9uKSk7Ci0JZm10LT5waXhlbGZvcm1hdCA9IGNhZmVfZm9ybWF0c1tmbXQtPmluZGV4XS5waXhlbGZvcm1hdDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKLQlzdHJ1Y3QgY2FmZV9mb3JtYXRfc3RydWN0ICpmOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7Ci0Jc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKLQlpbnQgcmV0OwotCi0JZiA9IGNhZmVfZmluZF9mb3JtYXQocGl4LT5waXhlbGZvcm1hdCk7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IGYtPnBpeGVsZm9ybWF0OwotCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmbWJ1c19mbXQsIHBpeCwgZi0+bWJ1c19jb2RlKTsKLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1idXNfZm10KTsKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JdjRsMl9maWxsX3BpeF9mb3JtYXQocGl4LCAmbWJ1c19mbXQpOwotCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqIGYtPmJwcDsKLQlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0Jc3RydWN0IGNhZmVfZm9ybWF0X3N0cnVjdCAqZjsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBDYW4ndCBkbyBhbnl0aGluZyBpZiB0aGUgZGV2aWNlIGlzIG5vdCBpZGxlCi0JICogQWxzbyBjYW4ndCBpZiB0aGVyZSBhcmUgc3RyZWFtaW5nIGJ1ZmZlcnMgaW4gcGxhY2UuCi0JICovCi0JaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFIHx8IGNhbS0+bl9zYnVmcyA+IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlmID0gY2FmZV9maW5kX2Zvcm1hdChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCi0JLyoKLQkgKiBTZWUgaWYgdGhlIGZvcm1hdHRpbmcgd29ya3MgaW4gcHJpbmNpcGxlLgotCSAqLwotCXJldCA9IGNhZmVfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxwLCBwcml2LCBmbXQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JLyoKLQkgKiBOb3cgd2Ugc3RhcnQgdG8gY2hhbmdlIHRoaW5ncyBmb3IgcmVhbCwgc28gbGV0J3MgZG8gaXQKLQkgKiB1bmRlciBsb2NrLgotCSAqLwotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JY2FtLT5waXhfZm9ybWF0ID0gZm10LT5mbXQucGl4OwotCWNhbS0+bWJ1c19jb2RlID0gZi0+bWJ1c19jb2RlOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhcHByb3ByaWF0ZSBETUEgYnVmZmVycy4KLQkgKi8KLQlyZXQgPSAtRU5PTUVNOwotCWlmIChjYW0tPm5idWZzID4gMCAmJiBjYW0tPmRtYV9idWZfc2l6ZSA8IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2UpCi0JCWNhZmVfZnJlZV9kbWFfYnVmcyhjYW0pOwotCWlmIChjYW0tPm5idWZzID09IDApIHsKLQkJaWYgKGNhZmVfYWxsb2NfZG1hX2J1ZnMoY2FtLCAwKSkKLQkJCWdvdG8gb3V0OwotCX0KLQkvKgotCSAqIEl0IGxvb2tzIGxpa2UgdGhpcyBtaWdodCB3b3JrLCBzbyBsZXQncyBwcm9ncmFtIHRoZSBzZW5zb3IuCi0JICovCi0JcmV0ID0gY2FmZV9jYW1fY29uZmlndXJlKGNhbSk7Ci0JaWYgKCEgcmV0KQotCQlyZXQgPSBjYWZlX2N0bHJfY29uZmlndXJlKGNhbSk7Ci0gIG91dDoKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJldHVybiBvdXIgc3RvcmVkIG5vdGlvbiBvZiBob3cgdGhlIGNhbWVyYSBpcy9zaG91bGQgYmUgY29uZmlndXJlZC4KLSAqIFRoZSBWNGwyIHNwZWMgd2FudHMgdXMgdG8gYmUgc21hcnRlciwgYW5kIGFjdHVhbGx5IGdldCB0aGlzIGZyb20KLSAqIHRoZSBjYW1lcmEgKGFuZCBub3QgbWVzcyB3aXRoIGl0IGF0IG9wZW4gdGltZSkuICBTb21lZGF5LgotICovCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0KLQlmLT5mbXQucGl4ID0gY2FtLT5waXhfZm9ybWF0OwotCXJldHVybiAwOwotfQotCi0vKgotICogV2Ugb25seSBoYXZlIG9uZSBpbnB1dCAtIHRoZSBzZW5zb3IgLSBzbyBtaW5pbWl6ZSB0aGUgbm9uc2Vuc2UgaGVyZS4KLSAqLwotc3RhdGljIGludCBjYWZlX3ZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCi17Ci0JaWYgKGlucHV0LT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQlpbnB1dC0+c3RkID0gVjRMMl9TVERfQUxMOyAvKiBOb3Qgc3VyZSB3aGF0IHNob3VsZCBnbyBoZXJlICovCi0Jc3RyY3B5KGlucHV0LT5uYW1lLCAiQ2FtZXJhIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQotewotCSppID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKLXsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQotLyogZnJvbSB2aXZpLmMgKi8KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICphKQotewotCXJldHVybiAwOwotfQotCi0vKgotICogRy9TX1BBUk0uICBNb3N0IG9mIHRoaXMgaXMgZG9uZSBieSB0aGUgc2Vuc29yLCBidXQgd2UgYXJlCi0gKiB0aGUgbGV2ZWwgd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiByZWFkIGJ1ZmZlcnMuCi0gKi8KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgZ19wYXJtLCBwYXJtcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgc19wYXJtLCBwYXJtcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7Ci0KLQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKLQljaGlwLT5yZXZpc2lvbiA9IDA7Ci0JaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZjaGlwLT5tYXRjaCkpIHsKLQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NBRkU7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOwotfQotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKnNpemVzKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBlbnVtX2ZyYW1lc2l6ZXMsIHNpemVzKTsKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjYWZlX3ZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqaW50ZXJ2YWwpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGVudW1fZnJhbWVpbnRlcnZhbHMsIGludGVydmFsKTsKLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLXN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwotCi0JaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkgewotCQlyZWctPnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCByZWctPnJlZyk7Ci0JCXJlZy0+c2l6ZSA9IDQ7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOwotfQotCi1zdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKLQotCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpIHsKLQkJY2FmZV9yZWdfd3JpdGUoY2FtLCByZWctPnJlZywgcmVnLT52YWwpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKLX0KLSNlbmRpZgotCi0vKgotICogVGhpcyB0ZW1wbGF0ZSBkZXZpY2UgaG9sZHMgYWxsIG9mIHRob3NlIHY0bDIgbWV0aG9kczsgd2UKLSAqIGNsb25lIGl0IGZvciBzcGVjaWZpYyByZWFsIGRldmljZXMuCi0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBjYWZlX3Y0bF9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gY2FmZV92NGxfb3BlbiwKLQkucmVsZWFzZSA9IGNhZmVfdjRsX3JlbGVhc2UsCi0JLnJlYWQgPSBjYWZlX3Y0bF9yZWFkLAotCS5wb2xsID0gY2FmZV92NGxfcG9sbCwKLQkubW1hcCA9IGNhZmVfdjRsX21tYXAsCi0JLnVubG9ja2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBjYWZlX3Y0bF9pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCAJPSBjYWZlX3ZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgPSBjYWZlX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCT0gY2FmZV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2Nfc19mbXRfdmlkX2NhcAk9IGNhZmVfdmlkaW9jX3NfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19nX2ZtdF92aWRfY2FwCT0gY2FmZV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2VudW1faW5wdXQJPSBjYWZlX3ZpZGlvY19lbnVtX2lucHV0LAotCS52aWRpb2NfZ19pbnB1dAkJPSBjYWZlX3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dAkJPSBjYWZlX3ZpZGlvY19zX2lucHV0LAotCS52aWRpb2Nfc19zdGQJCT0gY2FmZV92aWRpb2Nfc19zdGQsCi0JLnZpZGlvY19yZXFidWZzCQk9IGNhZmVfdmlkaW9jX3JlcWJ1ZnMsCi0JLnZpZGlvY19xdWVyeWJ1Zgk9IGNhZmVfdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZgkJPSBjYWZlX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYJCT0gY2FmZV92aWRpb2NfZHFidWYsCi0JLnZpZGlvY19zdHJlYW1vbgk9IGNhZmVfdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmCT0gY2FmZV92aWRpb2Nfc3RyZWFtb2ZmLAotCS52aWRpb2NfcXVlcnljdHJsCT0gY2FmZV92aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2NfZ19jdHJsCQk9IGNhZmVfdmlkaW9jX2dfY3RybCwKLQkudmlkaW9jX3NfY3RybAkJPSBjYWZlX3ZpZGlvY19zX2N0cmwsCi0JLnZpZGlvY19nX3Bhcm0JCT0gY2FmZV92aWRpb2NfZ19wYXJtLAotCS52aWRpb2Nfc19wYXJtCQk9IGNhZmVfdmlkaW9jX3NfcGFybSwKLQkudmlkaW9jX2VudW1fZnJhbWVzaXplcyA9IGNhZmVfdmlkaW9jX2VudW1fZnJhbWVzaXplcywKLQkudmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMgPSBjYWZlX3ZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzLAotCS52aWRpb2NfZ19jaGlwX2lkZW50ICAgID0gY2FmZV92aWRpb2NfZ19jaGlwX2lkZW50LAotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQkudmlkaW9jX2dfcmVnaXN0ZXIgCT0gY2FmZV92aWRpb2NfZ19yZWdpc3RlciwKLQkudmlkaW9jX3NfcmVnaXN0ZXIgCT0gY2FmZV92aWRpb2Nfc19yZWdpc3RlciwKLSNlbmRpZgotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY2FmZV92NGxfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPSAiY2FmZSIsCi0JLnR2bm9ybXMgPSBWNEwyX1NURF9OVFNDX00sCi0JLmN1cnJlbnRfbm9ybSA9IFY0TDJfU1REX05UU0NfTSwgIC8qIG1ha2UgbXBsYXllciBoYXBweSAqLwotCi0JLmZvcHMgPSAmY2FmZV92NGxfZm9wcywKLQkuaW9jdGxfb3BzID0gJmNhZmVfdjRsX2lvY3RsX29wcywKLQkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogSW50ZXJydXB0IGhhbmRsZXIgc3R1ZmYKLSAqLwotCi0KLQotc3RhdGljIHZvaWQgY2FmZV9mcmFtZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgY2FmZV9jYW1lcmEgKikgZGF0YTsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBjYWZlX3Npb19idWZmZXIgKnNidWY7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspIHsKLQkJaW50IGJ1Zm5vID0gY2FtLT5uZXh0X2J1ZjsKLQkJaWYgKGJ1Zm5vIDwgMCkgeyAgLyogIndpbGwgbmV2ZXIgaGFwcGVuIiAqLwotCQkJY2FtX2VycihjYW0sICJObyB2YWxpZCBidWZzIGluIHRhc2tsZXQhXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgrKyhjYW0tPm5leHRfYnVmKSA+PSBjYW0tPm5idWZzKQotCQkJY2FtLT5uZXh0X2J1ZiA9IDA7Ci0JCWlmICghIHRlc3RfYml0KGJ1Zm5vLCAmY2FtLT5mbGFncykpCi0JCQljb250aW51ZTsKLQkJaWYgKGxpc3RfZW1wdHkoJmNhbS0+c2JfYXZhaWwpKQotCQkJYnJlYWs7ICAvKiBMZWF2ZSBpdCB2YWxpZCwgaG9wZSBmb3IgYmV0dGVyIGxhdGVyICovCi0JCWNsZWFyX2JpdChidWZubywgJmNhbS0+ZmxhZ3MpOwotCQlzYnVmID0gbGlzdF9lbnRyeShjYW0tPnNiX2F2YWlsLm5leHQsCi0JCQkJc3RydWN0IGNhZmVfc2lvX2J1ZmZlciwgbGlzdCk7Ci0JCS8qCi0JCSAqIERyb3AgdGhlIGxvY2sgZHVyaW5nIHRoZSBiaWcgY29weS4gIFRoaXMgKnNob3VsZCogYmUgc2FmZS4uLgotCQkgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwotCQltZW1jcHkoc2J1Zi0+YnVmZmVyLCBjYW0tPmRtYV9idWZzW2J1Zm5vXSwKLQkJCQljYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlKTsKLQkJc2J1Zi0+djRsYnVmLmJ5dGVzdXNlZCA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2U7Ci0JCXNidWYtPnY0bGJ1Zi5zZXF1ZW5jZSA9IGNhbS0+YnVmX3NlcVtidWZub107Ci0JCXNidWYtPnY0bGJ1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JCXNidWYtPnY0bGJ1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfbW92ZV90YWlsKCZzYnVmLT5saXN0LCAmY2FtLT5zYl9mdWxsKTsKLQl9Ci0JaWYgKCEgbGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSkKLQkJd2FrZV91cCgmY2FtLT5pb3dhaXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKLX0KLQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfZnJhbWVfY29tcGxldGUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGludCBmcmFtZSkKLXsKLQkvKgotCSAqIEJhc2ljIGZyYW1lIGhvdXNla2VlcGluZy4KLQkgKi8KLQlpZiAodGVzdF9iaXQoZnJhbWUsICZjYW0tPmZsYWdzKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCi0JCWNhbV9lcnIoY2FtLCAiRnJhbWUgb3ZlcnJ1biBvbiAlZCwgZnJhbWVzIGxvc3RcbiIsIGZyYW1lKTsKLQlzZXRfYml0KGZyYW1lLCAmY2FtLT5mbGFncyk7Ci0JY2xlYXJfYml0KENGX0RNQV9BQ1RJVkUsICZjYW0tPmZsYWdzKTsKLQlpZiAoY2FtLT5uZXh0X2J1ZiA8IDApCi0JCWNhbS0+bmV4dF9idWYgPSBmcmFtZTsKLQljYW0tPmJ1Zl9zZXFbZnJhbWVdID0gKysoY2FtLT5zZXF1ZW5jZSk7Ci0KLQlzd2l0Y2ggKGNhbS0+c3RhdGUpIHsKLQkvKgotCSAqIElmIGluIHNpbmdsZSByZWFkIG1vZGUsIHRyeSBnb2luZyBzcGVjdWxhdGl2ZS4KLQkgKi8KLQkgICAgY2FzZSBTX1NJTkdMRVJFQUQ6Ci0JCWNhbS0+c3RhdGUgPSBTX1NQRUNSRUFEOwotCQljYW0tPnNwZWNmcmFtZXMgPSAwOwotCQl3YWtlX3VwKCZjYW0tPmlvd2FpdCk7Ci0JCWJyZWFrOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgYWxyZWFkeSBkb2luZyBzcGVjdWxhdGl2ZSByZWFkcywgYW5kIG5vYm9keSBpcwotCSAqIHJlYWRpbmcgdGhlbSwganVzdCBzdG9wLgotCSAqLwotCSAgICBjYXNlIFNfU1BFQ1JFQUQ6Ci0JCWlmICgrKyhjYW0tPnNwZWNmcmFtZXMpID49IGNhbS0+bmJ1ZnMpIHsKLQkJCWNhZmVfY3Rscl9zdG9wKGNhbSk7Ci0JCQljYWZlX2N0bHJfaXJxX2Rpc2FibGUoY2FtKTsKLQkJCWNhbS0+c3RhdGUgPSBTX0lETEU7Ci0JCX0KLQkJd2FrZV91cCgmY2FtLT5pb3dhaXQpOwotCQlicmVhazsKLQkvKgotCSAqIEZvciB0aGUgc3RyZWFtaW5nIGNhc2UsIHdlIGRlZmVyIHRoZSByZWFsIHdvcmsgdG8gdGhlCi0JICogY2FtZXJhIHRhc2tsZXQuCi0JICoKLQkgKiBGSVhNRTogaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBjb25zdW1pbmcgdGhlIGJ1ZmZlcnMsCi0JICogd2Ugc2hvdWxkIGV2ZW50dWFsbHkgcHV0IHRoaW5ncyBvbiBob2xkIGFuZCByZXN0YXJ0IGluCi0JICogdmlkaW9jX2RxYnVmKCkuCi0JICovCi0JICAgIGNhc2UgU19TVFJFQU1JTkc6Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJmNhbS0+c190YXNrbGV0KTsKLQkJYnJlYWs7Ci0KLQkgICAgZGVmYXVsdDoKLQkJY2FtX2VycihjYW0sICJGcmFtZSBpbnRlcnJ1cHQgaW4gbm9uLW9wZXJhdGlvbmFsIHN0YXRlXG4iKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0KLQotCi1zdGF0aWMgdm9pZCBjYWZlX2ZyYW1lX2lycShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgdW5zaWduZWQgaW50IGlycXMpCi17Ci0JdW5zaWduZWQgaW50IGZyYW1lOwotCi0JY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfSVJRU1RBVCwgRlJBTUVJUlFTKTsgLyogQ2xlYXInZW0gYWxsICovCi0JLyoKLQkgKiBIYW5kbGUgYW55IGZyYW1lIGNvbXBsZXRpb25zLiAgVGhlcmUgcmVhbGx5IHNob3VsZAotCSAqIG5vdCBiZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlLCBvciB3ZSBoYXZlIGZhbGxlbgotCSAqIGZhciBiZWhpbmQuCi0JICovCi0JZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgY2FtLT5uYnVmczsgZnJhbWUrKykKLQkJaWYgKGlycXMgJiAoSVJRX0VPRjAgPDwgZnJhbWUpKQotCQkJY2FmZV9mcmFtZV9jb21wbGV0ZShjYW0sIGZyYW1lKTsKLQkvKgotCSAqIElmIGEgZnJhbWUgc3RhcnRzLCBub3RlIHRoYXQgd2UgaGF2ZSBETUEgYWN0aXZlLiAgVGhpcwotCSAqIGNvZGUgYXNzdW1lcyB0aGF0IHdlIHdvbid0IGdldCBtdWx0aXBsZSBmcmFtZSBpbnRlcnJ1cHRzCi0JICogYXQgb25jZTsgbWF5IHdhbnQgdG8gcmV0aGluayB0aGF0LgotCSAqLwotCWlmIChpcnFzICYgKElSUV9TT0YwIHwgSVJRX1NPRjEgfCBJUlFfU09GMikpCi0JCXNldF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpOwotfQotCi0KLQotc3RhdGljIGlycXJldHVybl90IGNhZmVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBkYXRhOwotCXVuc2lnbmVkIGludCBpcnFzOwotCi0Jc3Bpbl9sb2NrKCZjYW0tPmRldl9sb2NrKTsKLQlpcnFzID0gY2FmZV9yZWdfcmVhZChjYW0sIFJFR19JUlFTVEFUKTsKLQlpZiAoKGlycXMgJiBBTExJUlFTKSA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZjYW0tPmRldl9sb2NrKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQlpZiAoaXJxcyAmIEZSQU1FSVJRUykKLQkJY2FmZV9mcmFtZV9pcnEoY2FtLCBpcnFzKTsKLQlpZiAoaXJxcyAmIFRXU0lJUlFTKSB7Ci0JCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0lSUVNUQVQsIFRXU0lJUlFTKTsKLQkJd2FrZV91cCgmY2FtLT5zbWJ1c193YWl0KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmNhbS0+ZGV2X2xvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIFBDSSBpbnRlcmZhY2Ugc3R1ZmYuCi0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIG9scGNfeG8xX2RtaVtdID0gewotCXsKLQkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJPTFBDIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlhPIiksCi0JCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIjEiKSwKLQkJfSwKLQl9LAotCXsgfQotfTsKLQotc3RhdGljIGludCBjYWZlX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07Ci0Jc3RydWN0IG92NzY3MF9jb25maWcgc2Vuc29yX2NmZyA9IHsKLQkJLyogVGhpcyBjb250cm9sbGVyIG9ubHkgZG9lcyBTTUJVUyAqLwotCQkudXNlX3NtYnVzID0gdHJ1ZSwKLQotCQkvKgotCQkgKiBFeGNsdWRlIFFDSUYgbW9kZSwgYmVjYXVzZSBpdCBvbmx5IGNhcHR1cmVzIGEgdGlueSBwb3J0aW9uCi0JCSAqIG9mIHRoZSBzZW5zb3IgRk9WCi0JCSAqLwotCQkubWluX3dpZHRoID0gMzIwLAotCQkubWluX2hlaWdodCA9IDI0MCwKLQl9OwotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBvdjc2NzBfaW5mbyA9IHsKLQkJLnR5cGUgPSAib3Y3NjcwIiwKLQkJLmFkZHIgPSAweDQyLAotCQkucGxhdGZvcm1fZGF0YSA9ICZzZW5zb3JfY2ZnLAotCX07Ci0KLQkvKgotCSAqIFN0YXJ0IHB1dHRpbmcgdG9nZXRoZXIgb25lIG9mIG91ciBiaWcgY2FtZXJhIHN0cnVjdHVyZXMuCi0JICovCi0JcmV0ID0gLUVOT01FTTsKLQljYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FmZV9jYW1lcmEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FtID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjYW0tPnY0bDJfZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JbXV0ZXhfaW5pdCgmY2FtLT5zX211dGV4KTsKLQlzcGluX2xvY2tfaW5pdCgmY2FtLT5kZXZfbG9jayk7Ci0JY2FtLT5zdGF0ZSA9IFNfTk9UUkVBRFk7Ci0JY2FmZV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+c21idXNfd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5pb3dhaXQpOwotCWNhbS0+cGRldiA9IHBkZXY7Ci0JY2FtLT5waXhfZm9ybWF0ID0gY2FmZV9kZWZfcGl4X2Zvcm1hdDsKLQljYW0tPm1idXNfY29kZSA9IGNhZmVfZGVmX21idXNfY29kZTsKLQlJTklUX0xJU1RfSEVBRCgmY2FtLT5kZXZfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbS0+c2JfYXZhaWwpOwotCUlOSVRfTElTVF9IRUFEKCZjYW0tPnNiX2Z1bGwpOwotCXRhc2tsZXRfaW5pdCgmY2FtLT5zX3Rhc2tsZXQsIGNhZmVfZnJhbWVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGNhbSk7Ci0JLyoKLQkgKiBHZXQgc2V0IHVwIG9uIHRoZSBQQ0kgYnVzLgotCSAqLwotCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3VucmVnOwotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JcmV0ID0gLUVJTzsKLQljYW0tPnJlZ3MgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCEgY2FtLT5yZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGlvcmVtYXAgY2FmZS1jY2ljIHJlZ3NcbiIpOwotCQlnb3RvIG91dF91bnJlZzsKLQl9Ci0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBjYWZlX2lycSwgSVJRRl9TSEFSRUQsICJjYWZlLWNjaWMiLCBjYW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2lvdW5tYXA7Ci0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sbGVyIGFuZCBsZWF2ZSBpdCBwb3dlcmVkIHVwLiAgSXQgd2lsbAotCSAqIHN0YXkgdGhhdCB3YXkgdW50aWwgdGhlIHNlbnNvciBkcml2ZXIgc2hvd3MgdXAuCi0JICovCi0JY2FmZV9jdGxyX2luaXQoY2FtKTsKLQljYWZlX2N0bHJfcG93ZXJfdXAoY2FtKTsKLQkvKgotCSAqIFNldCB1cCBJMkMvU01CVVMgY29tbXVuaWNhdGlvbnMuICBXZSBoYXZlIHRvIGRyb3AgdGhlIG11dGV4IGhlcmUKLQkgKiBiZWNhdXNlIHRoZSBzZW5zb3IgY291bGQgYXR0YWNoIGluIHRoaXMgY2FsbCBjaGFpbiwgbGVhZGluZyB0bwotCSAqIHVuc2lnaHRseSBkZWFkbG9ja3MuCi0JICovCi0JcmV0ID0gY2FmZV9zbWJ1c19zZXR1cChjYW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWVpcnE7Ci0KLQkvKiBBcHBseSBYTy0xIGNsb2NrIHNwZWVkICovCi0JaWYgKGRtaV9jaGVja19zeXN0ZW0ob2xwY194bzFfZG1pKSkKLQkJc2Vuc29yX2NmZy5jbG9ja19zcGVlZCA9IDQ1OwotCi0JY2FtLT5zZW5zb3JfYWRkciA9IG92NzY3MF9pbmZvLmFkZHI7Ci0JY2FtLT5zZW5zb3IgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZjYW0tPnY0bDJfZGV2LCAmY2FtLT5pMmNfYWRhcHRlciwKLQkJCSZvdjc2NzBfaW5mbywgTlVMTCk7Ci0JaWYgKGNhbS0+c2Vuc29yID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfc21idXM7Ci0JfQotCi0JcmV0ID0gY2FmZV9jYW1faW5pdChjYW0pOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NtYnVzOwotCi0JLyoKLQkgKiBHZXQgdGhlIHY0bDIgc2V0dXAgZG9uZS4KLQkgKi8KLQltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWNhbS0+dmRldiA9IGNhZmVfdjRsX3RlbXBsYXRlOwotCWNhbS0+dmRldi5kZWJ1ZyA9IDA7Ci0vKgljYW0tPnZkZXYuZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsqLwotCWNhbS0+dmRldi52NGwyX2RldiA9ICZjYW0tPnY0bDJfZGV2OwotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5sb2NrOwotCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7Ci0KLQkvKgotCSAqIElmIHNvIHJlcXVlc3RlZCwgdHJ5IHRvIGdldCBvdXIgRE1BIGJ1ZmZlcnMgbm93LgotCSAqLwotCWlmICghYWxsb2NfYnVmc19hdF9yZWFkKSB7Ci0JCWlmIChjYWZlX2FsbG9jX2RtYV9idWZzKGNhbSwgMSkpCi0JCQljYW1fd2FybihjYW0sICJVbmFibGUgdG8gYWxsb2MgRE1BIGJ1ZmZlcnMgYXQgbG9hZCIKLQkJCQkJIiB3aWxsIHRyeSBhZ2FpbiBsYXRlci4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0dXJuIDA7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotb3V0X3NtYnVzOgotCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKLW91dF9mcmVlaXJxOgotCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBjYW0pOwotb3V0X2lvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgY2FtLT5yZWdzKTsKLW91dF9mcmVlOgotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOwotb3V0X3VucmVnOgotCWtmcmVlKGNhbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKgotICogU2h1dCBkb3duIGFuIGluaXRpYWxpemVkIGRldmljZQotICovCi1zdGF0aWMgdm9pZCBjYWZlX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotLyogRklYTUU6IE1ha2Ugc3VyZSB3ZSB0YWtlIGNhcmUgb2YgZXZlcnl0aGluZyBoZXJlICovCi0JaWYgKGNhbS0+bl9zYnVmcyA+IDApCi0JCS8qIFdoYXQgaWYgdGhleSBhcmUgc3RpbGwgbWFwcGVkPyAgU2hvdWxkbid0IGJlLCBidXQuLi4gKi8KLQkJY2FmZV9mcmVlX3Npb19idWZmZXJzKGNhbSk7Ci0JY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7Ci0JY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKLQljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7Ci0JY2FmZV9mcmVlX2RtYV9idWZzKGNhbSk7Ci0JZnJlZV9pcnEoY2FtLT5wZGV2LT5pcnEsIGNhbSk7Ci0JcGNpX2lvdW5tYXAoY2FtLT5wZGV2LCBjYW0tPnJlZ3MpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYpOwotfQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKLQotCWlmIChjYW0gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY2lfcmVtb3ZlIG9uIHVua25vd24gcGRldiAlcFxuIiwgcGRldik7Ci0JCXJldHVybjsKLQl9Ci0JbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoY2FtLT51c2VycyA+IDApCi0JCWNhbV93YXJuKGNhbSwgIlJlbW92aW5nIGEgZGV2aWNlIHdpdGggdXNlcnMhXG4iKTsKLQljYWZlX3NodXRkb3duKGNhbSk7Ci0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7Ci0Ja2ZyZWUoY2FtKTsKLS8qIE5vIHVubG9jayAtIGl0IG5vIGxvbmdlciBleGlzdHMgKi8KLX0KLQotCi0jaWZkZWYgQ09ORklHX1BNCi0vKgotICogQmFzaWMgcG93ZXIgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGludCBjYWZlX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7Ci0JaW50IHJldDsKLQllbnVtIGNhZmVfc3RhdGUgY3N0YXRlOwotCi0JcmV0ID0gcGNpX3NhdmVfc3RhdGUocGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQljc3RhdGUgPSBjYW0tPnN0YXRlOyAvKiBIQUNLIC0gc3RvcF9kbWEgc2V0cyB0byBpZGxlICovCi0JY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7Ci0JY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JY2FtLT5zdGF0ZSA9IGNzdGF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNhZmVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCi0JaWYgKHJldCkgewotCQljYW1fd2FybihjYW0sICJVbmFibGUgdG8gcmUtZW5hYmxlIGRldmljZSBvbiByZXN1bWUhXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JY2FmZV9jdGxyX2luaXQoY2FtKTsKLQotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGNhbS0+dXNlcnMgPiAwKSB7Ci0JCWNhZmVfY3Rscl9wb3dlcl91cChjYW0pOwotCQlfX2NhZmVfY2FtX3Jlc2V0KGNhbSk7Ci0JfSBlbHNlIHsKLQkJY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCi0Jc2V0X2JpdChDRl9DT05GSUdfTkVFREVELCAmY2FtLT5mbGFncyk7Ci0JaWYgKGNhbS0+c3RhdGUgPT0gU19TUEVDUkVBRCkKLQkJY2FtLT5zdGF0ZSA9IFNfSURMRTsgIC8qIERvbid0IGJvdGhlciByZXN0YXJ0aW5nICovCi0JZWxzZSBpZiAoY2FtLT5zdGF0ZSA9PSBTX1NJTkdMRVJFQUQgfHwgY2FtLT5zdGF0ZSA9PSBTX1NUUkVBTUlORykKLQkJcmV0ID0gY2FmZV9yZWFkX3NldHVwKGNhbSwgY2FtLT5zdGF0ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmICAvKiBDT05GSUdfUE0gKi8KLQotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FmZV9pZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLAotCQkgICAgIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF84OEFMUDAxX0NDSUMpIH0sCi0JeyAwLCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2FmZV9pZHMpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2FmZV9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gImNhZmUxMDAwLWNjaWMiLAotCS5pZF90YWJsZSA9IGNhZmVfaWRzLAotCS5wcm9iZSA9IGNhZmVfcGNpX3Byb2JlLAotCS5yZW1vdmUgPSBjYWZlX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBjYWZlX3BjaV9zdXNwZW5kLAotCS5yZXN1bWUgPSBjYWZlX3BjaV9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLQotCi0KLXN0YXRpYyBpbnQgX19pbml0IGNhZmVfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIk1hcnZlbGwgTTg4QUxQMDEgJ0NBRkUnIENhbWVyYSBDb250cm9sbGVyIHZlcnNpb24gJWRcbiIsCi0JCQlDQUZFX1ZFUlNJT04pOwotCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlX2NjaWMgZHJpdmVyXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IDA7Ci0KLSAgb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19leGl0IGNhZmVfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY2FmZV9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoY2FmZV9pbml0KTsKLW1vZHVsZV9leGl0KGNhZmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKaW5kZXggNmQ2ZDE4NC4uYWIyNTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaApAQCAtMzEsNyArMzEsNiBAQAogI2lmbmRlZiBfX0NQSUEyX0hfXwogI2RlZmluZSBfX0NQSUEyX0hfXwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC00MywxMCArNDIsNiBAQAogLyogZGVmaW5lIGZvciB2ZXJib3NlIGRlYnVnIG91dHB1dCAqLwogLy8jZGVmaW5lIF9DUElBMl9ERUJVR18KIAotI2RlZmluZSBDUElBMl9NQUpfVkVSCTMKLSNkZWZpbmUgQ1BJQTJfTUlOX1ZFUiAgIDAKLSNkZWZpbmUgQ1BJQTJfUEFUQ0hfVkVSCTAKLQogLyoqKgogICogSW1hZ2UgZGVmaW5lcwogICoqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IDQwZWI2MzIuLjA3N2ViMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMjksOCArMjksNyBAQAogICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQorI2RlZmluZSBDUElBX1ZFUlNJT04gIjMuMC4xIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtODAsNiArNzksNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJWNEwtZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgQ1BpQTIgYmFzZWQgY2FtZXJhcyIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVvIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihDUElBX1ZFUlNJT04pOwogCiAjZGVmaW5lIEFCT1VUICJWNEwtRHJpdmVyIGZvciBWaXNpb24gQ1BpQTIgYmFzZWQgY2FtZXJhcyIKIApAQCAtNDY1LDkgKzQ2NSw2IEBACiAJaWYgKHVzYl9tYWtlX3BhdGgoY2FtLT5kZXYsIHZjLT5idXNfaW5mbywgc2l6ZW9mKHZjLT5idXNfaW5mbykpIDwwKQogCQltZW1zZXQodmMtPmJ1c19pbmZvLDAsIHNpemVvZih2Yy0+YnVzX2luZm8pKTsKIAotCXZjLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oQ1BJQTJfTUFKX1ZFUiwgQ1BJQTJfTUlOX1ZFUiwKLQkJCQkgICAgIENQSUEyX1BBVENIX1ZFUik7Ci0KIAl2Yy0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICBWNEwyX0NBUF9SRUFEV1JJVEUgfAogCQkJICAgVjRMMl9DQVBfU1RSRUFNSU5HOwpAQCAtMTU1OCw4ICsxNTU1LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgX19pbml0IGNwaWEyX2luaXQodm9pZCkKIHsKLQlMT0coIiVzIHYlZC4lZC4lZFxuIiwKLQkgICAgQUJPVVQsIENQSUEyX01BSl9WRVIsIENQSUEyX01JTl9WRVIsIENQSUEyX1BBVENIX1ZFUik7CisJTE9HKCIlcyB2JXNcbiIsCisJICAgIEFCT1VULCBDUElBX1ZFUlNJT04pOwogCWNoZWNrX3BhcmFtZXRlcnMoKTsKIAljcGlhMl91c2JfaW5pdCgpOwogCXJldHVybiAwOwpAQCAtMTU3OSw0ICsxNTc2LDMgQEAKIAogbW9kdWxlX2luaXQoY3BpYTJfaW5pdCk7CiBtb2R1bGVfZXhpdChjcGlhMl9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwppbmRleCBkNTBkNjlkLi5hMWU2YzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwpAQCAtMTkyLDYgKzE5Miw3IEBACiBlcnJfZXhpdF9mcmVlOgogCWlmIChzYyAhPSBOVUxMKQogCQlzbmRfY2FyZF9mcmVlKHNjKTsKKwlrZnJlZShjeHNjKTsKIGVycl9leGl0OgogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCmluZGV4IDA4NjQyNzIuLjE4MzQyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaWZuZGVmIENYMThfRFJJVkVSX0gKICNkZWZpbmUgQ1gxOF9EUklWRVJfSAogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggZTgwMTM0Zi4uYWZlMGEyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC00NjksNyArNDY5LDYgQEAKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGN4LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7CiAJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksCiAJCSAiUENJOiVzIiwgcGNpX25hbWUoY3gtPnBjaV9kZXYpKTsKLQl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCmluZGV4IGNkMTg5YjYuLmZlZDQ4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTIzLDEyICsyMyw2IEBACiAjZGVmaW5lIENYMThfVkVSU0lPTl9ICiAKICNkZWZpbmUgQ1gxOF9EUklWRVJfTkFNRSAiY3gxOCIKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCi0jZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgNQotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAotCi0jZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SLCBcCi0JQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiwgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQorI2RlZmluZSBDWDE4X1ZFUlNJT04gIjEuNS4xIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWF2Y29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKaW5kZXggOGQ3ODEzNC4uNTNmZjI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtYXZjb3JlLmMKQEAgLTM1NSw2ICszNTUsOCBAQAogCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfRVhFVEVSOgogCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCTElWRTI6CiAJY2FzZSBDWDIzMVhYX0JPQVJEX1BWX1BMQVlUVl9VU0JfSFlCUklEOgorCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9QQUw6CisJY2FzZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX05UU0M6CiAJCWlmIChhdm1vZGUgPT0gUE9MQVJJU19BVk1PREVfQU5BTE9HVF9UVikgewogCQkJd2hpbGUgKGFmZV9wb3dlcl9zdGF0dXMgIT0gKEZMRF9QV1JETl9UVU5JTkdfQklBUyB8CiAJCQkJCQlGTERfUFdSRE5fRU5BQkxFX1BMTCkpIHsKQEAgLTE3MzMsNiArMTczNSw4IEBACiAJCWJyZWFrOwogCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JERV8yNTNTOgogCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JEVV8yNTNTOgorCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9QQUw6CisJY2FzZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX05UU0M6CiAJCWZ1bmNfbW9kZSA9IDB4MDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYwppbmRleCAyMjcwMzgxLi41M2RhZTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNhcmRzLmMKQEAgLTM4Nyw2ICszODcsNyBAQAogCQkubm9ybSA9IFY0TDJfU1REX05UU0MsCiAJCS5ub19hbHRfdmFuYyA9IDEsCiAJCS5leHRlcm5hbF9hdiA9IDEsCisJCS5kb250X3VzZV9wb3J0XzMgPSAxLAogCQkuaW5wdXQgPSB7ewogCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ID0gQ1gyMzFYWF9WSU5fMl8xLApAQCAtNTMyLDYgKzUzMyw3NiBAQAogCQkJLmdwaW8gPSBOVUxMLAogCQl9IH0sCiAJfSwKKwlbQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9QQUxdID0geworCQkubmFtZSA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCMiBGTSAoUEFMKSIsCisJCS50dW5lcl90eXBlID0gVFVORVJfTlhQX1REQTE4MjcxLAorCQkudHVuZXJfYWRkciA9IDB4NjAsCisJCS50dW5lcl9ncGlvID0gUkRFMjUwX1hDVl9UVU5FUiwKKwkJLnR1bmVyX3NpZl9ncGlvID0gMHgwNSwKKwkJLnR1bmVyX3NjbF9ncGlvID0gMHgxYSwKKwkJLnR1bmVyX3NkYV9ncGlvID0gMHgxYiwKKwkJLmRlY29kZXIgPSBDWDIzMVhYX0FWREVDT0RFUiwKKwkJLm91dHB1dF9tb2RlID0gT1VUX01PREVfVklQMTEsCisJCS5jdGxfcGluX3N0YXR1c19tYXNrID0gMHhGRkZGRkZDNCwKKwkJLmFnY19hbmFsb2dfZGlnaXRhbF9zZWxlY3RfZ3BpbyA9IDB4MGMsCisJCS5ncGlvX3Bpbl9zdGF0dXNfbWFzayA9IDB4NDAwMTAwMCwKKwkJLnR1bmVyX2kyY19tYXN0ZXIgPSAxLAorCQkubm9ybSA9IFY0TDJfU1REX1BBTCwKKworCQkuaW5wdXQgPSB7eworCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ID0gQ1gyMzFYWF9WSU5fM18xLAorCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfVklERU8sCisJCQkuZ3BpbyA9IE5VTEwsCisJCX0sIHsKKwkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCA9IENYMjMxWFhfVklOXzJfMSwKKwkJCS5hbXV4ID0gQ1gyMzFYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyA9IE5VTEwsCisJCX0sIHsKKwkJCS50eXBlID0gQ1gyMzFYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ID0gQ1gyMzFYWF9WSU5fMV8xIHwKKwkJCQkoQ1gyMzFYWF9WSU5fMV8yIDw8IDgpIHwKKwkJCQlDWDI1ODQwX1NWSURFT19PTiwKKwkJCS5hbXV4ID0gQ1gyMzFYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyA9IE5VTEwsCisJCX0gfSwKKwl9LAorCVtDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX05UU0NdID0geworCQkubmFtZSA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCMiBGTSAoTlRTQykiLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX05YUF9UREExODI3MSwKKwkJLnR1bmVyX2FkZHIgPSAweDYwLAorCQkudHVuZXJfZ3BpbyA9IFJERTI1MF9YQ1ZfVFVORVIsCisJCS50dW5lcl9zaWZfZ3BpbyA9IDB4MDUsCisJCS50dW5lcl9zY2xfZ3BpbyA9IDB4MWEsCisJCS50dW5lcl9zZGFfZ3BpbyA9IDB4MWIsCisJCS5kZWNvZGVyID0gQ1gyMzFYWF9BVkRFQ09ERVIsCisJCS5vdXRwdXRfbW9kZSA9IE9VVF9NT0RFX1ZJUDExLAorCQkuY3RsX3Bpbl9zdGF0dXNfbWFzayA9IDB4RkZGRkZGQzQsCisJCS5hZ2NfYW5hbG9nX2RpZ2l0YWxfc2VsZWN0X2dwaW8gPSAweDBjLAorCQkuZ3Bpb19waW5fc3RhdHVzX21hc2sgPSAweDQwMDEwMDAsCisJCS50dW5lcl9pMmNfbWFzdGVyID0gMSwKKwkJLm5vcm0gPSBWNEwyX1NURF9OVFNDLAorCisJCS5pbnB1dCA9IHt7CisJCQkudHlwZSA9IENYMjMxWFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8zXzEsCisJCQkuYW11eCA9IENYMjMxWFhfQU1VWF9WSURFTywKKwkJCS5ncGlvID0gTlVMTCwKKwkJfSwgeworCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ID0gQ1gyMzFYWF9WSU5fMl8xLAorCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvID0gTlVMTCwKKwkJfSwgeworCQkJLnR5cGUgPSBDWDIzMVhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggPSBDWDIzMVhYX1ZJTl8xXzEgfAorCQkJCShDWDIzMVhYX1ZJTl8xXzIgPDwgOCkgfAorCQkJCUNYMjU4NDBfU1ZJREVPX09OLAorCQkJLmFtdXggPSBDWDIzMVhYX0FNVVhfTElORV9JTiwKKwkJCS5ncGlvID0gTlVMTCwKKwkJfSB9LAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjMxeHhfYmNvdW50ID0gQVJSQVlfU0laRShjeDIzMXh4X2JvYXJkcyk7CiAKQEAgLTU1Myw2ICs2MjQsMTAgQEAKIAkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9DTlhUX1JERV8yNTB9LAogCXtVU0JfREVWSUNFKDB4MDU3MiwgMHg1OEEwKSwKIAkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9DTlhUX1JEVV8yNTB9LAorCXtVU0JfREVWSUNFKDB4MjA0MCwgMHhiMTEwKSwKKwkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9QQUx9LAorCXtVU0JfREVWSUNFKDB4MjA0MCwgMHhiMTExKSwKKwkgLmRyaXZlcl9pbmZvID0gQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9OVFNDfSwKIAl7VVNCX0RFVklDRSgweDIwNDAsIDB4YjEyMCksCiAJIC5kcml2ZXJfaW5mbyA9IENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX0VYRVRFUn0sCiAJe1VTQl9ERVZJQ0UoMHgyMDQwLCAweGIxNDApLApAQCAtMTA1MSw2ICsxMTI2LDkgQEAKIAlpZiAoYXNzb2NfZGVzYy0+YkZpcnN0SW50ZXJmYWNlICE9IGlmbnVtKSB7CiAJCWN4MjMxeHhfZXJyKERSSVZFUl9OQU1FICI6IE5vdCBmb3VuZCAiCiAJCQkgICAgIm1hdGNoaW5nIElBRCBpbnRlcmZhY2VcbiIpOworCQljeDIzMXh4X2RldnVzZWQgJj0gfigxIDw8IG5yKTsKKwkJa2ZyZWUoZGV2KTsKKwkJZGV2ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb3JlLmMKaW5kZXggYWJlNTAwZi4uZDQ0NTdmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNvcmUuYwpAQCAtNzQyLDYgKzc0Miw4IEBACiAJCWNhc2UgQ1gyMzFYWF9CT0FSRF9DTlhUX1JEVV8yNTNTOgogCQljYXNlIENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX0VYRVRFUjoKIAkJY2FzZSBDWDIzMVhYX0JPQVJEX1BWX1BMQVlUVl9VU0JfSFlCUklEOgorCQljYXNlIENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX1VTQjJfRk1fUEFMOgorCQljYXNlIENYMjMxWFhfQk9BUkRfSEFVUFBBVUdFX1VTQjJfRk1fTlRTQzoKIAkJZXJyQ29kZSA9IGN4MjMxeHhfc2V0X2FnY19hbmFsb2dfZGlnaXRhbF9tdXhfc2VsZWN0KGRldiwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTEzODEsNiArMTM4Myw4IEBACiAJY2FzZSBDWDIzMVhYX0JPQVJEX0NOWFRfUkRVXzI1M1M6CiAJY2FzZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9FWEVURVI6CiAJY2FzZSBDWDIzMVhYX0JPQVJEX1BWX1BMQVlUVl9VU0JfSFlCUklEOgorCWNhc2UgQ1gyMzFYWF9CT0FSRF9IQVVQUEFVR0VfVVNCMl9GTV9QQUw6CisJY2FzZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX05UU0M6CiAJZXJyQ29kZSA9IGN4MjMxeHhfc2V0X2FnY19hbmFsb2dfZGlnaXRhbF9tdXhfc2VsZWN0KGRldiwgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwppbmRleCBhNjljMjRkLi42ZTgxZjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQ1LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJjeDIzMXh4LmgiCiAjaW5jbHVkZSAiY3gyMzF4eC12YmkuaCIKIAotI2RlZmluZSBDWDIzMVhYX1ZFUlNJT05fQ09ERSAgICAgICAgICAgIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisjZGVmaW5lIENYMjMxWFhfVkVSU0lPTiAiMC4wLjIiCiAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJTcmluaXZhc2EgRGVldmkgPHNyaW5pdmFzYS5kZWV2aUBjb25leGFudC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQyAgICAgIkNvbmV4YW50IGN4MjMxeHggYmFzZWQgVVNCIHZpZGVvIGRldmljZSBkcml2ZXIiCkBAIC03MCw2ICs2OSw3IEBACiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKENYMjMxWFhfVkVSU0lPTik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICAgICA9IHtbMCAuLi4gKENYMjMxWFhfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gKENYMjMxWFhfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKQEAgLTExNzksNyArMTE3OSw4IEBACiB7CiAJc3RydWN0IGN4MjMxeHhfZmggKmZoID0gcHJpdjsKIAlzdHJ1Y3QgY3gyMzF4eCAqZGV2ID0gZmgtPmRldjsKLQl1bnNpZ25lZCBpbnQgbjsKKwl1MzIgZ2VuX3N0YXQ7CisJdW5zaWduZWQgaW50IHJldCwgbjsKIAogCW4gPSBpLT5pbmRleDsKIAlpZiAobiA+PSBNQVhfQ1gyMzFYWF9JTlBVVCkKQEAgLTExOTgsNiArMTE5OSwxOCBAQAogCiAJaS0+c3RkID0gZGV2LT52ZGV2LT50dm5vcm1zOwogCisJLyogSWYgdGhleSBhcmUgYXNraW5nIGFib3V0IHRoZSBhY3RpdmUgaW5wdXQsIHJlYWQgc2lnbmFsIHN0YXR1cyAqLworCWlmIChuID09IGRldi0+dmlkZW9faW5wdXQpIHsKKwkJcmV0ID0gY3gyMzF4eF9yZWFkX2kyY19kYXRhKGRldiwgVklEX0JMS19JMkNfQUREUkVTUywKKwkJCQkJICAgIEdFTl9TVEFULCAyLCAmZ2VuX3N0YXQsIDQpOworCQlpZiAocmV0ID4gMCkgeworCQkJaWYgKChnZW5fc3RhdCAmIEZMRF9WUFJFUykgPT0gMHgwMCkKKwkJCQlpLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJCQlpZiAoKGdlbl9zdGF0ICYgRkxEX0hMT0NLKSA9PSAweDAwKQorCQkJCWktPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX0hfTE9DSzsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xODY5LDggKzE4ODIsNiBAQAogCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDIzMXh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAKLQljYXAtPnZlcnNpb24gPSBDWDIzMVhYX1ZFUlNJT05fQ09ERTsKLQogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAogI2lmIDAKIAkJVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIHwKQEAgLTIwNTcsNyArMjA2OCw2IEBACiAJc3RybGNweShjYXAtPmNhcmQsIGN4MjMxeHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAotCWNhcC0+dmVyc2lvbiA9IENYMjMxWFhfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTcwLDExICsyNTgwLDggQEAKIHsKIAlpbnQgcmV0OwogCi0JY3gyMzF4eF9pbmZvKCIlczogdjRsMiBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkJICAgICBkZXYtPm5hbWUsCi0JCSAgICAgKENYMjMxWFhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JCSAgICAgKENYMjMxWFhfVkVSU0lPTl9DT0RFID4+IDgpICYgMHhmZiwKLQkJICAgICBDWDIzMVhYX1ZFUlNJT05fQ09ERSAmIDB4ZmYpOworCWN4MjMxeHhfaW5mbygiJXM6IHY0bDIgZHJpdmVyIHZlcnNpb24gJXNcbiIsCisJCSAgICAgZGV2LT5uYW1lLCBDWDIzMVhYX1ZFUlNJT04pOwogCiAJLyogc2V0IGRlZmF1bHQgbm9ybSAqLwogCS8qZGV2LT5ub3JtID0gY3gyMzF4eF92aWRlb190ZW1wbGF0ZS5jdXJyZW50X25vcm07ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHguaAppbmRleCA0NmRkODQwLi4yMDAwYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LmgKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJjeDIzMXh4LWNvbmYtcmVnLmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgICAgICAgICAgICAgICAgICAgICAiY3gyMzF4eCIKLSNkZWZpbmUgUFdSX1NMRUVQX0lOVEVSVkFMICAgICAgICAgICAgICA1CisjZGVmaW5lIFBXUl9TTEVFUF9JTlRFUlZBTCAgICAgICAgICAgICAgMTAKIAogLyogSTJDIGFkZHJlc3NlcyBmb3IgY29udHJvbCBibG9jayBpbiBDeDIzMXh4ICovCiAjZGVmaW5lICAgICBBRkVfREVWSUNFX0FERFJFU1MJCTB4NjAKQEAgLTY3LDYgKzY3LDggQEAKICNkZWZpbmUgQ1gyMzFYWF9CT0FSRF9QVl9YQ0FQVFVSRV9VU0IgMTEKICNkZWZpbmUgQ1gyMzFYWF9CT0FSRF9LV09STERfVUI0MzBfVVNCX0hZQlJJRCAxMgogI2RlZmluZSBDWDIzMVhYX0JPQVJEX0lDT05CSVRfVTEwMCAxMworI2RlZmluZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX1BBTCAxNAorI2RlZmluZSBDWDIzMVhYX0JPQVJEX0hBVVBQQVVHRV9VU0IyX0ZNX05UU0MgMTUKIAogLyogTGltaXRzIG1pbmltdW0gYW5kIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KICNkZWZpbmUgQ1gyMzFYWF9NSU5fQlVGICAgICAgICAgICAgICAgICA0CkBAIC0xMTIsNyArMTE0LDYgQEAKIAlWNEwyX1NURF9QQUxfQkcgfCAgVjRMMl9TVERfUEFMX0RLICAgIHwgIFY0TDJfU1REX1BBTF9JICAgIHwgXAogCVY0TDJfU1REX1BBTF9NICB8ICBWNEwyX1NURF9QQUxfTiAgICAgfCAgVjRMMl9TVERfUEFMX05jICAgfCBcCiAJVjRMMl9TVERfUEFMXzYwIHwgIFY0TDJfU1REX1NFQ0FNX0wgICB8ICBWNEwyX1NURF9TRUNBTV9ESykKLSNkZWZpbmUgQ1gyMzF4eF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKIAogI2RlZmluZSBTTEVFUF9TNUgxNDMyICAgIDMwCiAjZGVmaW5lIENYMjM0MTdfT1NDX0VOICAgOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2FsdGVyYS1jaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2FsdGVyYS1jaS5jCmluZGV4IDY3ODUzOWIuLjFmYTg5MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9hbHRlcmEtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvYWx0ZXJhLWNpLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAqIHwgIERBVEE3fCAgREFUQTZ8ICBEQVRBNXwgIERBVEE0fCAgREFUQTN8ICBEQVRBMnwgIERBVEExfCAgREFUQTB8CiAgKiArLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKwogICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWR2Yi5oPgogI2luY2x1ZGUgImFsdGVyYS1jaS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCA5YTk4ZGM1Li42N2M0YTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtMTM1OSw3ICsxMzU5LDYgQEAKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgY3gyMzg4NV9ib2FyZHNbdHNwb3J0LT5kZXYtPmJvYXJkXS5uYW1lLAogCQlzaXplb2YoY2FwLT5jYXJkKSk7CiAJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKLQljYXAtPnZlcnNpb24gPSBDWDIzODg1X1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9CiAJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDkzNDE4NWMuLjc2Yjc1NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjksMTEgKzI5LDE3IEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmgiCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorI2luY2x1ZGUgIm5ldHVwLWVlcHJvbS5oIgogI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKICNpbmNsdWRlICJhbHRlcmEtY2kuaCIKKyNpbmNsdWRlICJ4YzQwMDAuaCIKICNpbmNsdWRlICJ4YzUwMDAuaCIKICNpbmNsdWRlICJjeDIzODg4LWlyLmgiCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmV0dXBfY2FyZF9yZXYgPSAxOworbW9kdWxlX3BhcmFtKG5ldHVwX2NhcmRfcmV2LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhuZXR1cF9jYXJkX3JldiwKKwkJIk5ldFVQIER1YWwgRFZCLVQvQyBDSSBjYXJkIHJldmlzaW9uIik7CiBzdGF0aWMgdW5zaWduZWQgaW50IGVuYWJsZV84ODVfaXI7CiBtb2R1bGVfcGFyYW0oZW5hYmxlXzg4NV9pciwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlXzg4NV9pciwKQEAgLTE3NSw2ICsxODEsMzQgQEAKIAkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luZmFzdCBQeERWUjMyMDAgSCIsCiAJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAogCX0sCisJW0NYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IX1hDNDAwMF0gPSB7CisJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbmZhc3QgUHhEVlIzMjAwIEggWEM0MDAwIiwKKwkJLnBvcnRhCQk9IENYMjM4ODVfQU5BTE9HX1ZJREVPLAorCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9YQzQwMDAsCisJCS50dW5lcl9hZGRyCT0gMHg2MSwKKwkJLnJhZGlvX3R5cGUJPSBUVU5FUl9YQzQwMDAsCisJCS5yYWRpb19hZGRyCT0gMHg2MSwKKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZQk9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXgJPSBDWDI1ODQwX1ZJTjJfQ0gxIHwKKwkJCQkgIENYMjU4NDBfVklONV9DSDIgfAorCQkJCSAgQ1gyNTg0MF9OT05FMF9DSDMsCisJCX0sIHsKKwkJCS50eXBlCT0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eAk9IENYMjU4NDBfQ09NUE9TSVRFMSwKKwkJfSwgeworCQkJLnR5cGUJPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXgJPSBDWDI1ODQwX1NWSURFT19MVU1BMyB8CisJCQkJICBDWDI1ODQwX1NWSURFT19DSFJPTUE0LAorCQl9LCB7CisJCQkudHlwZQk9IENYMjM4ODVfVk1VWF9DT01QT05FTlQsCisJCQkudm11eAk9IENYMjU4NDBfVklON19DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU42X0NIMiB8CisJCQkJICBDWDI1ODQwX1ZJTjhfQ0gzIHwKKwkJCQkgIENYMjU4NDBfQ09NUE9ORU5UX09OLAorCQl9IH0sCisJfSwKIAlbQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGXSA9IHsKIAkJLm5hbWUJCT0gIkNvbXBybyBWaWRlb01hdGUgRTY1MEYiLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKQEAgLTQzMyw2ICs0NjcsMTAgQEAKIAkJLnN1YmRldmljZSA9IDB4NjY4MSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9ILAogCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NmYzOSwKKwkJLmNhcmQJICAgPSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSF9YQzQwMDAsCisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxODViLAogCQkuc3ViZGV2aWNlID0gMHhlODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGLApAQCAtNzQ5LDYgKzc4Nyw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IX1hDNDAwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FODAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDA6CkBAIC05MDksNiArOTQ4LDcgQEAKIAkJY3hfc2V0KEdQMF9JTywgMHgwMDBmMDAwZik7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSF9YQzQwMDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTgwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgpAQCAtMTA5NywxMiArMTEzNywxOSBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgotCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI3MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNzU6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjU1OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIxMDoKIAkJLyogRklYTUU6IEltcGxlbWVudCBtZSAqLwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNzA6CisJCXJldCA9IGN4MjM4ODhfaXJfcHJvYmUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlkZXYtPnNkX2lyID0gY3gyMzg4NV9maW5kX2h3KGRldiwgQ1gyMzg4NV9IV184ODhfSVIpOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgc19pb19waW5fY29uZmlnLAorCQkJCSBpcl9yeF9waW5fY2ZnX2NvdW50LCBpcl9yeF9waW5fY2ZnKTsKKwkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKIAkJcmV0ID0gY3gyMzg4OF9pcl9wcm9iZShkZXYpOwpAQCAtMTE1Niw2ICsxMjAzLDcgQEAKIHZvaWQgY3gyMzg4NV9pcl9maW5pKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewogCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI3MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgogCQljeDIzODg1X2lycV9yZW1vdmUoZGV2LCBQQ0lfTVNLX0lSKTsKQEAgLTExOTksNiArMTI0Nyw3IEBACiB2b2lkIGN4MjM4ODVfaXJfcGNpX2ludF9lbmFibGUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7CiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjcwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6CiAJCWlmIChkZXYtPnNkX2lyKQpAQCAtMTMyNSw2ICsxMzc0LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSF9YQzQwMDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjcwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI3NToKQEAgLTEzNTMsMTAgKzE0MDMsMTIgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IX1hDNDAwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKIAljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKIAljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJfVF9DX0NJX1JGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjcwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfTVlHSUNBX1g4NTA2OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTI6CkBAIC0xMzgzLDYgKzE0MzUsNyBAQAogCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCQljb25zdCBjaGFyICpmaWxlbmFtZSA9ICJkdmItbmV0dXAtYWx0ZXJhLTAxLmZ3IjsKIAkJY2hhciAqYWN0aW9uID0gImNvbmZpZ3VyZSI7CisJCXN0YXRpYyBzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvIGNpbmZvOwogCQlzdHJ1Y3QgYWx0ZXJhX2NvbmZpZyBuZXR1cF9jb25maWcgPSB7CiAJCQkuZGV2ID0gZGV2LAogCQkJLmFjdGlvbiA9IGFjdGlvbiwKQEAgLTEzOTEsNiArMTQ0NCwyMSBAQAogCiAJCW5ldHVwX2luaXRpYWxpemUoZGV2KTsKIAorCQluZXR1cF9nZXRfY2FyZF9pbmZvKCZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsICZjaW5mbyk7CisJCWlmIChuZXR1cF9jYXJkX3JldikKKwkJCWNpbmZvLnJldiA9IG5ldHVwX2NhcmRfcmV2OworCisJCXN3aXRjaCAoY2luZm8ucmV2KSB7CisJCWNhc2UgMHg0OgorCQkJZmlsZW5hbWUgPSAiZHZiLW5ldHVwLWFsdGVyYS0wNC5mdyI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZpbGVuYW1lID0gImR2Yi1uZXR1cC1hbHRlcmEtMDEuZnciOworCQkJYnJlYWs7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0VVAgY2FyZCByZXY9MHgleCBmd19maWxlbmFtZT0lc1xuIiwKKwkJCQljaW5mby5yZXYsIGZpbGVuYW1lKTsKKwogCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZW5hbWUsICZkZXYtPnBjaS0+ZGV2KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcHJpbnRrKEtFUk5fRVJSICJkaWQgbm90IGZpbmQgdGhlIGZpcm13YXJlIGZpbGUuICglcykgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDQxOTc3N2EuLmVlNDFhODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTQyLDYgKzQyLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihDWDIzODg1X1ZFUlNJT04pOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwpAQCAtMjE0NywxNCArMjE0OCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGN4MjM4ODVfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gImN4MjM4ODUgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAotCSAgICAgICAoQ1gyMzg4NV9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKLQkgICAgICAgKENYMjM4ODVfVkVSU0lPTl9DT0RFID4+ICA4KSAmIDB4ZmYsCi0JICAgICAgIENYMjM4ODVfVkVSU0lPTl9DT0RFICYgMHhmZik7Ci0jaWZkZWYgU05BUFNIT1QKLQlwcmludGsoS0VSTl9JTkZPICJjeDIzODg1OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAotCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwotI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4NSBkcml2ZXIgdmVyc2lvbiAlcyBsb2FkZWRcbiIsCisJCUNYMjM4ODVfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4MjM4ODVfcGNpX2RyaXZlcik7CiB9CiAKQEAgLTIxNjUsNSArMjE2MCwzIEBACiAKIG1vZHVsZV9pbml0KGN4MjM4ODVfaW5pdCk7CiBtb2R1bGVfZXhpdChjeDIzODg1X2ZpbmkpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCAzYzMxNWY5Li5hYTgzZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInRkYTgyOTAuaCIKICNpbmNsdWRlICJ0ZGExODI3MS5oIgogI2luY2x1ZGUgImxnZHQzMzB4LmgiCisjaW5jbHVkZSAieGM0MDAwLmgiCiAjaW5jbHVkZSAieGM1MDAwLmgiCiAjaW5jbHVkZSAibWF4MjE2NS5oIgogI2luY2x1ZGUgInRkYTEwMDQ4LmgiCkBAIC05MjEsNiArOTIyLDI2IEBACiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSF9YQzQwMDA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3hjMzAyOCwKKwkJCQkJICAgICAgICZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCSpmZTsKKwkJCXN0cnVjdCB4YzQwMDBfY29uZmlnCWNmZyA9IHsKKwkJCQkuaTJjX2FkZHJlc3MJICA9IDB4NjEsCisJCQkJLmRlZmF1bHRfcG0JICA9IDAsCisJCQkJLmR2Yl9hbXBsaXR1ZGUJICA9IDEzNCwKKwkJCQkuc2V0X3Ntb290aGVkY3ZicyA9IDEsCisJCQkJLmlmX2toegkJICA9IDQ1NjAKKwkJCX07CisKKwkJCWZlID0gZHZiX2F0dGFjaCh4YzQwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwgJmNmZyk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1sxXTsKIApAQCAtMTI0OSw3ICsxMjcwLDcgQEAKIAkgKiBpbXBsZW1lbnQgTUZFIHN1cHBvcnQuCiAJICovCiAJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKLQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJaWYgKGZlMCAmJiBmZTAtPmR2Yi5mcm9udGVuZCkKIAkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMpOwogCiAJc3dpdGNoIChwb3J0LT5kZXYtPmJvYXJkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCBlOTdjYWZkLi5jZTc2NWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTgyLDYgKzgyLDcgQEAKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjcwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CkBAIC0xMzMsNiArMTM0LDcgQEAKIAogCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X2dfcGFyYW1ldGVycywgJnBhcmFtcyk7CiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjcwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgpAQCAtMjI5LDYgKzIzMSw5IEBACiAJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X3NfcGFyYW1ldGVycywgJnBhcmFtcyk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X2dfcGFyYW1ldGVycywgJnBhcmFtcyk7CiAJfQorCWZsdXNoX3dvcmtfc3luYygmZGV2LT5jeDI1ODQwX3dvcmspOworCWZsdXNoX3dvcmtfc3luYygmZGV2LT5pcl9yeF93b3JrKTsKKwlmbHVzaF93b3JrX3N5bmMoJmRldi0+aXJfdHhfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4MjM4ODVfaW5wdXRfaXJfY2xvc2Uoc3RydWN0IHJjX2RldiAqcmMpCkBAIC0yNTcsNiArMjYyLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNzA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCBlZTU3ZjZiLi44OTZiYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTEwMDAsNyArMTAwMCw2IEBACiAJc3RybGNweShjYXAtPmNhcmQsIGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCiAJCXNpemVvZihjYXAtPmNhcmQpKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0llOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKLQljYXAtPnZlcnNpb24gPSBDWDIzODg1X1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9CiAJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGMxODY0NzMuLmQ4NmJjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMzYsMTAgKzM2LDkgQEAKICNpbmNsdWRlICJjeDIzODg1LXJlZy5oIgogI2luY2x1ZGUgIm1lZGlhL2N4MjM0MXguaCIKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jZGVmaW5lIENYMjM4ODVfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisjZGVmaW5lIENYMjM4ODVfVkVSU0lPTiAiMC4wLjMiCiAKICNkZWZpbmUgVU5TRVQgKC0xVSkKIApAQCAtODYsNiArODUsNyBAQAogI2RlZmluZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMCAyOAogI2RlZmluZSBDWDIzODg1X0JPQVJEX0dPVFZJRVdfWDVfM0RfSFlCUklEICAgICAyOQogI2RlZmluZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCX1RfQ19DSV9SRiAzMAorI2RlZmluZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSF9YQzQwMDAgMzEKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCmluZGV4IDQyM2MxYWYuLjY4ZDEyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTExMyw2ICsxMTMsOCBAQAogTU9EVUxFX0FVVEhPUigiUmljYXJkbyBDZXJxdWVpcmEiKTsKIE1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oQ1g4OF9WRVJTSU9OKTsKKwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Q29uZXhhbnQsMjM4ODF9LCIKIAkJCSJ7e0NvbmV4YW50LDIzODgyfSwiCiAJCQkie3tDb25leGFudCwyMzg4M30iKTsKQEAgLTk3MywxNCArOTc1LDggQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgY3g4OF9hdWRpb19pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eCBhbHNhIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKLQkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAgOCkgJiAweGZmLAotCSAgICAgICBDWDg4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotI2lmZGVmIFNOQVBTSE9UCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eDogc25hcHNob3QgZGF0ZSAlMDRkLSUwMmQtJTAyZFxuIiwKLQkgICAgICAgU05BUFNIT1QvMTAwMDAsIChTTkFQU0hPVC8xMDApJTEwMCwgU05BUFNIT1QlMTAwKTsKLSNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gImN4MjM4OHggYWxzYSBkcml2ZXIgdmVyc2lvbiAlcyBsb2FkZWRcbiIsCisJICAgICAgIENYODhfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4ODhfYXVkaW9fcGNpX2RyaXZlcik7CiB9CiAKQEAgLTk5NCwxMCArOTkwLDMgQEAKIAogbW9kdWxlX2luaXQoY3g4OF9hdWRpb19pbml0KTsKIG1vZHVsZV9leGl0KGN4ODhfYXVkaW9fZmluaSk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwppbmRleCAxMWU0OWJiLi5lNDY0NDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtNDIsNiArNDIsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjM4OHgvY3gyMzQxNiBiYXNlZCBtcGVnIGVuY29kZXIgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIkplbGxlIEZva3MgPGplbGxlQGZva3MudXM+LCBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihDWDg4X1ZFUlNJT04pOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1wZWdidWZzID0gMzI7CiBtb2R1bGVfcGFyYW0obXBlZ2J1ZnMsaW50LDA2NDQpOwpAQCAtNzMwLDcgKzczMSw2IEBACiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4OF9ibGFja2JpcmQiKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgY29yZS0+Ym9hcmQubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXNwcmludGYoY2FwLT5idXNfaW5mbywiUENJOiVzIixwY2lfbmFtZShkZXYtPnBjaSkpOwotCWNhcC0+dmVyc2lvbiA9IENYODhfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0KIAkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1JFQURXUklURSAgICAgfApAQCAtMTM2OCwxNCArMTM2OCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJsYWNrYmlyZF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eCBibGFja2JpcmQgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAotCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKLQkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+ICA4KSAmIDB4ZmYsCi0JICAgICAgIENYODhfVkVSU0lPTl9DT0RFICYgMHhmZik7Ci0jaWZkZWYgU05BUFNIT1QKLQlwcmludGsoS0VSTl9JTkZPICJjeDIzODh4OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAotCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwotI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eCBibGFja2JpcmQgZHJpdmVyIHZlcnNpb24gJXMgbG9hZGVkXG4iLAorCSAgICAgICBDWDg4X1ZFUlNJT04pOwogCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfYmxhY2tiaXJkX2RyaXZlcik7CiB9CiAKQEAgLTEzODksMTEgKzEzODMsMyBAQAogCiBtb2R1bGVfcGFyYW1fbmFtZWQodmlkZW9fZGVidWcsY3g4ODAyX21wZWdfdGVtcGxhdGUuZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW3ZpZGVvXSIpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDI3MjIyYzkuLjBkNzE5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiY3g4OC5oIgogI2luY2x1ZGUgInRlYTU3NjcuaCIKKyNpbmNsdWRlICJ4YzQwMDAuaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCB0dW5lcltdID0ge1swIC4uLiAoQ1g4OF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCByYWRpb1tdID0ge1swIC4uLiAoQ1g4OF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OwpAQCAtMjExOSw2ICsyMTIwLDk5IEBACiAJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIX1hDNDAwMF0gPSB7CisJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgRFRWMTgwMCBIIChYQzQwMDApIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9YQzQwMDAsCisJCS5yYWRpb190eXBlCT0gVFVORVJfWEM0MDAwLAorCQkudHVuZXJfYWRkcgk9IDB4NjEsCisJCS5yYWRpb19hZGRyCT0gMHg2MSwKKwkJLyoKKwkJICogR1BJTyBzZXR0aW5nCisJCSAqCisJCSAqICAyOiBtdXRlICgwPW9mZiwxPW9uKQorCQkgKiAxMjogdHVuZXIgcmVzZXQgcGluCisJCSAqIDEzOiBhdWRpbyBzb3VyY2UgKDA9dHVuZXIgYXVkaW8sMT1saW5lIGluKQorCQkgKiAxNDogRk0gKDA9b24sMT1vZmYgPz8/KQorCQkgKi8KKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZQk9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXgJPSAwLAorCQkJLmdwaW8wCT0gMHgwNDAwLAkvKiBwaW4gMiA9IDAgKi8KKwkJCS5ncGlvMQk9IDB4NjA0MCwJLyogcGluIDEzID0gMCwgcGluIDE0ID0gMSAqLworCQkJLmdwaW8yCT0gMHgwMDAwLAorCQl9LCB7CisJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXgJPSAxLAorCQkJLmdwaW8wCT0gMHgwNDAwLAkvKiBwaW4gMiA9IDAgKi8KKwkJCS5ncGlvMQk9IDB4NjA2MCwJLyogcGluIDEzID0gMSwgcGluIDE0ID0gMSAqLworCQkJLmdwaW8yCT0gMHgwMDAwLAorCQl9LCB7CisJCQkudHlwZQk9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eAk9IDIsCisJCQkuZ3BpbzAJPSAweDA0MDAsCS8qIHBpbiAyID0gMCAqLworCQkJLmdwaW8xCT0gMHg2MDYwLAkvKiBwaW4gMTMgPSAxLCBwaW4gMTQgPSAxICovCisJCQkuZ3BpbzIJPSAweDAwMDAsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkudHlwZQk9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweDA0MDAsCS8qIHBpbiAyID0gMCAqLworCQkJLmdwaW8xCT0gMHg2MDAwLAkvKiBwaW4gMTMgPSAwLCBwaW4gMTQgPSAwICovCisJCQkuZ3BpbzIJPSAweDAwMDAsCisJCX0sCisJCS5tcGVnCQk9IENYODhfTVBFR19EVkIsCisJfSwKKwlbQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX1BMVVNdID0geworCQkubmFtZQkJPSAiTGVhZHRlayBXaW5GYXN0IERUVjIwMDAgSCBQTFVTIiwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9YQzQwMDAsCisJCS5yYWRpb190eXBlCT0gVFVORVJfWEM0MDAwLAorCQkudHVuZXJfYWRkcgk9IDB4NjEsCisJCS5yYWRpb19hZGRyCT0gMHg2MSwKKwkJLyoKKwkJICogR1BJTworCQkgKiAgIDI6IDE6IG11dGUgYXVkaW8KKwkJICogIDEyOiAwOiByZXNldCBYQzQwMDAKKwkJICogIDEzOiAxOiBhdWRpbyBpbnB1dCBpcyBsaW5lIGluICgwOiB0dW5lcikKKwkJICogIDE0OiAwOiBGTSByYWRpbworCQkgKiAgMTY6IDA6IFJGIGlucHV0IGlzIGNhYmxlCisJCSAqLworCQkuaW5wdXQJCT0ge3sKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eAk9IDAsCisJCQkuZ3BpbzAJPSAweDA0MDMsCisJCQkuZ3BpbzEJPSAweEYwRDcsCisJCQkuZ3BpbzIJPSAweDAxMDEsCisJCQkuZ3BpbzMJPSAweDAwMDAsCisJCX0sIHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX0NBQkxFLAorCQkJLnZtdXgJPSAwLAorCQkJLmdwaW8wCT0gMHgwNDAzLAorCQkJLmdwaW8xCT0gMHhGMEQ3LAorCQkJLmdwaW8yCT0gMHgwMTAwLAorCQkJLmdwaW8zCT0gMHgwMDAwLAorCQl9LCB7CisJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXgJPSAxLAorCQkJLmdwaW8wCT0gMHgwNDAzLAkvKiB3YXMgMHgwNDA3ICovCisJCQkuZ3BpbzEJPSAweEYwRjcsCisJCQkuZ3BpbzIJPSAweDAxMDEsCisJCQkuZ3BpbzMJPSAweDAwMDAsCisJCX0sIHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4CT0gMiwKKwkJCS5ncGlvMAk9IDB4MDQwMywJLyogd2FzIDB4MDQwNyAqLworCQkJLmdwaW8xCT0gMHhGMEY3LAorCQkJLmdwaW8yCT0gMHgwMTAxLAorCQkJLmdwaW8zCT0gMHgwMDAwLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUJPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wCT0gMHgwNDAzLAorCQkJLmdwaW8xCT0gMHhGMDk3LAorCQkJLmdwaW8yCT0gMHgwMTAwLAorCQkJLmdwaW8zCT0gMHgwMDAwLAorCQl9LAorCQkubXBlZwkJPSBDWDg4X01QRUdfRFZCLAorCX0sCiAJW0NYODhfQk9BUkRfUFJPRl83MzAxXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlByb2YgNzMwMSBEVkItUy9TMiIsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULApAQCAtMjU4MSw2ICsyNjc1LDE1IEBACiAJCS5zdWJkZXZpY2UgPSAweDY2NTQsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEgsCiAJfSwgeworCQkvKiBXaW5GYXN0IERUVjE4MDAgSCB3aXRoIFhDNDAwMCB0dW5lciAqLworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2ZjM4LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIX1hDNDAwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDZmNDIsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEhfUExVUywKKwl9LCB7CiAJCS8qIFBWUjIwMDAgUEFMIE1vZGVsIFsxMDdkOjY2MzBdICovCiAJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCiAJCS5zdWJkZXZpY2UgPSAweDY2MzAsCkBAIC0yODQ2LDYgKzI5NDksMjMgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBjeDg4X3hjNDAwMF93aW5mYXN0MjAwMGhfcGx1c19jYWxsYmFjayhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAorCQkJCQkJICBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIFhDNDAwMF9UVU5FUl9SRVNFVDoKKwkJLyogR1BJTyAxMiAoeGM0MDAwIHR1bmVyIHJlc2V0KSAqLworCQljeF9zZXQoTU9fR1AxX0lPLCAweDEwMTApOworCQltZGVsYXkoNTApOworCQljeF9jbGVhcihNT19HUDFfSU8sIDB4MTApOworCQltZGVsYXkoNzUpOworCQljeF9zZXQoTU9fR1AxX0lPLCAweDEwKTsKKwkJbWRlbGF5KDc1KTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzb21lIERpdmNvIHNwZWNpZmljIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGN4ODhfcHZfODAwMGd0X2NhbGxiYWNrKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCkBAIC0yOTQ4LDYgKzMwNjgsMTkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBjeDg4X3hjNDAwMF90dW5lcl9jYWxsYmFjayhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAorCQkJCSAgICAgIGludCBjb21tYW5kLCBpbnQgYXJnKQoreworCS8qIEJvYXJkLXNwZWNpZmljIGNhbGxiYWNrcyAqLworCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgeworCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIX1hDNDAwMDoKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9QTFVTOgorCQlyZXR1cm4gY3g4OF94YzQwMDBfd2luZmFzdDIwMDBoX3BsdXNfY2FsbGJhY2soY29yZSwKKwkJCQkJCQkgICAgICBjb21tYW5kLCBhcmcpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFR1bmVyIGNhbGxiYWNrIGZ1bmN0aW9uLiBDdXJyZW50bHkgb25seSBuZWVkZWQgZm9yIHRoZSBQaW5uYWNsZSAJICAgKgogICogUENUViBIRCA4MDBpIHdpdGggYW4geGM1MDAwIHNpbGxpY29uIHR1bmVyLiBUaGlzIGlzIHVzZWQgZm9yIGJvdGgJICAgKgpAQCAtMzAyMiw2ICszMTU1LDkgQEAKIAkJY2FzZSBUVU5FUl9YQzIwMjg6CiAJCQlpbmZvX3ByaW50ayhjb3JlLCAiQ2FsbGluZyBYQzIwMjgvMzAyOCBjYWxsYmFja1xuIik7CiAJCQlyZXR1cm4gY3g4OF94YzIwMjhfdHVuZXJfY2FsbGJhY2soY29yZSwgY29tbWFuZCwgYXJnKTsKKwkJY2FzZSBUVU5FUl9YQzQwMDA6CisJCQlpbmZvX3ByaW50ayhjb3JlLCAiQ2FsbGluZyBYQzQwMDAgY2FsbGJhY2tcbiIpOworCQkJcmV0dXJuIGN4ODhfeGM0MDAwX3R1bmVyX2NhbGxiYWNrKGNvcmUsIGNvbW1hbmQsIGFyZyk7CiAJCWNhc2UgVFVORVJfWEM1MDAwOgogCQkJaW5mb19wcmludGsoY29yZSwgIkNhbGxpbmcgWEM1MDAwIGNhbGxiYWNrXG4iKTsKIAkJCXJldHVybiBjeDg4X3hjNTAwMF90dW5lcl9jYWxsYmFjayhjb3JlLCBjb21tYW5kLCBhcmcpOwpAQCAtMzEwOSwxMyArMzI0NSwxMyBAQAogCiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfVFYyMDAwX1hQX0dMT0JBTDoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxODAwSDoKLQkJLyogR1BJTyAxMiAoeGMzMDI4IHR1bmVyIHJlc2V0KSAqLwotCQljeF9zZXQoTU9fR1AxX0lPLCAweDEwMTApOwotCQltZGVsYXkoNTApOwotCQljeF9jbGVhcihNT19HUDFfSU8sIDB4MTApOwotCQltZGVsYXkoNTApOwotCQljeF9zZXQoTU9fR1AxX0lPLCAweDEwKTsKLQkJbWRlbGF5KDUwKTsKKwkJY3g4OF94YzMwMjhfd2luZmFzdDE4MDBoX2NhbGxiYWNrKGNvcmUsIFhDMjAyOF9UVU5FUl9SRVNFVCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEhfWEM0MDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX1BMVVM6CisJCWN4ODhfeGM0MDAwX3dpbmZhc3QyMDAwaF9wbHVzX2NhbGxiYWNrKGNvcmUsCisJCQkJCQkgICAgICAgWEM0MDAwX1RVTkVSX1JFU0VULCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIENYODhfQk9BUkRfVFdJTkhBTl9WUDEwMjdfRFZCUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCAyZTE0NWYwLi5mYmNhYTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC02MzYsNiArNjM2LDkgQEAKIAljeF93cml0ZShNT19QQ0lfSU5UU1RBVCwgICAweEZGRkZGRkZGKTsgLy8gQ2xlYXIgUENJIGludAogCWN4X3dyaXRlKE1PX0lOVDFfU1RBVCwgICAgIDB4RkZGRkZGRkYpOyAvLyBDbGVhciBSSVNDIGludAogCisJLyogc2V0IGRlZmF1bHQgbm90Y2ggZmlsdGVyICovCisJY3hfYW5kb3IoTU9fSFRPVEFMLCAweDE4MDAsIChITE5vdGNoRmlsdGVyNHhGc2MgPDwgMTEpKTsKKwogCS8qIFJlc2V0IG9uLWJvYXJkIHBhcnRzICovCiAJY3hfd3JpdGUoTU9fU1JTVF9JTywgMCk7CiAJbXNsZWVwKDEwKTsKQEAgLTc1OSw4ICs3NjIsOCBAQAogCWlmIChub2NvbWIpCiAJCXZhbHVlIHw9ICgzIDw8IDUpOyAvLyBkaXNhYmxlIGNvbWIgZmlsdGVyCiAKLQljeF93cml0ZShNT19GSUxURVJfRVZFTiwgIHZhbHVlKTsKLQljeF93cml0ZShNT19GSUxURVJfT0RELCAgIHZhbHVlKTsKKwljeF9hbmRvcihNT19GSUxURVJfRVZFTiwgIDB4N2ZmYzdmLCB2YWx1ZSk7IC8qIHByZXNlcnZlIFBFQUtFTiwgUFNFTCAqLworCWN4X2FuZG9yKE1PX0ZJTFRFUl9PREQsICAgMHg3ZmZjN2YsIHZhbHVlKTsKIAlkcHJpbnRrKDEsInNldF9zY2FsZTogZmlsdGVyICAweCUwNHhcbiIsIHZhbHVlKTsKIAogCXJldHVybiAwOwpAQCAtOTk0LDEwICs5OTcsMTAgQEAKIAkvLyBodG90YWwKIAl0bXA2NCA9IG5vcm1faHRvdGFsKG5vcm0pICogKHU2NCl2ZGVjX2Nsb2NrOwogCWRvX2Rpdih0bXA2NCwgZnNjOCk7Ci0JaHRvdGFsID0gKHUzMil0bXA2NCB8IChITE5vdGNoRmlsdGVyNHhGc2MgPDwgMTEpOworCWh0b3RhbCA9ICh1MzIpdG1wNjQ7CiAJZHByaW50aygxLCJzZXRfdHZub3JtOiBNT19IVE9UQUwgICAgICAgIDB4JTA4eCBbb2xkPTB4JTA4eCxodG90YWw9JWRdXG4iLAogCQlodG90YWwsIGN4X3JlYWQoTU9fSFRPVEFMKSwgKHUzMil0bXA2NCk7Ci0JY3hfd3JpdGUoTU9fSFRPVEFMLCBodG90YWwpOworCWN4X2FuZG9yKE1PX0hUT1RBTCwgMHgwN2ZmLCBodG90YWwpOwogCiAJLy8gdmJpIHN0dWZmLCBzZXQgdmJpIG9mZnNldCB0byAxMCAoZm9yIDIwIENsayoyIHBpeGVscyksIHRoaXMgbWFrZXMKIAkvLyB0aGUgZWZmZWN0aXZlIHZiaSBvZmZzZXQgfjI0NCBzYW1wbGVzLCB0aGUgc2FtZSBhcyB0aGUgQnQ4eDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYzY5ZGY3ZS4uY2YzZDMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJvcjUxMTMyLmgiCiAjaW5jbHVkZSAibGdkdDMzMHguaCIKICNpbmNsdWRlICJzNWgxNDA5LmgiCisjaW5jbHVkZSAieGM0MDAwLmgiCiAjaW5jbHVkZSAieGM1MDAwLmgiCiAjaW5jbHVkZSAibnh0MjAweC5oIgogI2luY2x1ZGUgImN4MjQxMjMuaCIKQEAgLTYzLDYgKzY0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkNocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+Iik7CiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihDWDg4X1ZFUlNJT04pOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwpAQCAtNjA1LDYgKzYwNywzOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF0dGFjaF94YzQwMDAoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IHhjNDAwMF9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAgPSBOVUxMOworCisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogZHZiIGZyb250ZW5kIG5vdCBhdHRhY2hlZC4gIgorCQkJCSJDYW4ndCBhdHRhY2ggeGM0MDAwXG4iLAorCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmUgPSBkdmJfYXR0YWNoKHhjNDAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCWNmZyk7CisJaWYgKCFmZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IHhjNDAwMCBhdHRhY2ggZmFpbGVkXG4iLAorCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlcy8yOiB4YzQwMDAgYXR0YWNoZWRcbiIsIGRldi0+Y29yZS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeDI0MTE2X3NldF90c19wYXJhbShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAlpbnQgaXNfcHVuY3R1cmVkKQogewpAQCAtMTI5NCw3ICsxMzI5LDI1IEBACiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7Ci0JIGNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfWDgwMDBfTVQ6CisJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEhfWEM0MDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX1BMVVM6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZjeDg4X3Bpbm5hY2xlX2h5YnJpZF9wY3R2LAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlzdHJ1Y3QgeGM0MDAwX2NvbmZpZyBjZmcgPSB7CisJCQkJLmkyY19hZGRyZXNzCSAgPSAweDYxLAorCQkJCS5kZWZhdWx0X3BtCSAgPSAwLAorCQkJCS5kdmJfYW1wbGl0dWRlCSAgPSAxMzQsCisJCQkJLnNldF9zbW9vdGhlZGN2YnMgPSAxLAorCQkJCS5pZl9raHoJCSAgPSA0NTYwCisJCQl9OworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gTlVMTDsKKwkJCWlmIChhdHRhY2hfeGM0MDAwKGRldiwgJmNmZykgPCAwKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfWDgwMDBfTVQ6CiAJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwMDsKIAogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCkBAIC0xNTc3LDYgKzE2MzAsMTEgQEAKIAkJdWRlbGF5KDEwMDApOwogCQlicmVhazsKIAorCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX1BMVVM6CisJCS8qIHNldCBSRiBpbnB1dCB0byBBSVIgZm9yIERWQi1UIChHUElPIDE2KSAqLworCQljeF93cml0ZShNT19HUDJfSU8sIDB4MDEwMSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC0xNjkyLDE0ICsxNzUwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgZHZiX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJjeDg4LzI6IGN4MjM4OHggZHZiIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKLQkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAgOCkgJiAweGZmLAotCSAgICAgICBDWDg4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotI2lmZGVmIFNOQVBTSE9UCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eDogc25hcHNob3QgZGF0ZSAlMDRkLSUwMmQtJTAyZFxuIiwKLQkgICAgICAgU05BUFNIT1QvMTAwMDAsIChTTkFQU0hPVC8xMDApJTEwMCwgU05BUFNIT1QlMTAwKTsKLSNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gImN4ODgvMjogY3gyMzg4eCBkdmIgZHJpdmVyIHZlcnNpb24gJXMgbG9hZGVkXG4iLAorCSAgICAgICBDWDg4X1ZFUlNJT04pOwogCXJldHVybiBjeDg4MDJfcmVnaXN0ZXJfZHJpdmVyKCZjeDg4MDJfZHZiX2RyaXZlcik7CiB9CiAKQEAgLTE3MTAsMTAgKzE3NjIsMyBAQAogCiBtb2R1bGVfaW5pdChkdmJfaW5pdCk7CiBtb2R1bGVfZXhpdChkdmJfZmluaSk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogY29tcGlsZS1jb21tYW5kOiAibWFrZSBEVkI9MSIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggM2Y0NDIwMC4uZTYxNDIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0xMDAsNiArMTAwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMDoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxODAwSDoKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxODAwSF9YQzQwMDA6CisJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEhfUExVUzoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9UVjIwMDBfWFBfR0xPQkFMOgogCQlncGlvID0gKGdwaW8gJiAweDZmZikgfCAoKGN4X3JlYWQoTU9fR1AxX0lPKSA8PCA4KSAmIDB4OTAwKTsKIAkJYXV4Z3BpbyA9IGdwaW87CkBAIC0yODksNiArMjkxLDggQEAKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSDoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KOgogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIOgorCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIX1hDNDAwMDoKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9QTFVTOgogCQlpcl9jb2RlcyA9IFJDX01BUF9XSU5GQVNUOwogCQlpci0+Z3Bpb19hZGRyID0gTU9fR1AwX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHg4Zjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggMWE3Yjk4My4uY2Q1Mzg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMzksNiArMzksNyBAQAogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKENYODhfVkVSU0lPTik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsaW50LDA2NDQpOwpAQCAtNjEzLDEzICs2MTQsMTcgQEAKIAkgICAgY29yZS0+YWN0aXZlX3R5cGVfaWQgIT0gZHJ2LT50eXBlX2lkKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JY29yZS0+aW5wdXQgPSAwOwotCWZvciAoaSA9IDA7Ci0JICAgICBpIDwgKHNpemVvZihjb3JlLT5ib2FyZC5pbnB1dCkgLyBzaXplb2Yoc3RydWN0IGN4ODhfaW5wdXQpKTsKLQkgICAgIGkrKykgewotCQlpZiAoY29yZS0+Ym9hcmQuaW5wdXRbaV0udHlwZSA9PSBDWDg4X1ZNVVhfRFZCKSB7Ci0JCQljb3JlLT5pbnB1dCA9IGk7Ci0JCQlicmVhazsKKwlpZiAoZHJ2LT50eXBlX2lkID09IENYODhfTVBFR19EVkIpIHsKKwkJLyogV2hlbiBzd2l0Y2hpbmcgdG8gRFZCLCBhbHdheXMgc2V0IHRoZSBpbnB1dCB0byB0aGUgdHVuZXIgKi8KKwkJY29yZS0+bGFzdF9hbmFsb2dfaW5wdXQgPSBjb3JlLT5pbnB1dDsKKwkJY29yZS0+aW5wdXQgPSAwOworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCAoc2l6ZW9mKGNvcmUtPmJvYXJkLmlucHV0KSAvIHNpemVvZihzdHJ1Y3QgY3g4OF9pbnB1dCkpOworCQkgICAgIGkrKykgeworCQkJaWYgKGNvcmUtPmJvYXJkLmlucHV0W2ldLnR5cGUgPT0gQ1g4OF9WTVVYX0RWQikgeworCQkJCWNvcmUtPmlucHV0ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCX0KIApAQCAtNjQ0LDYgKzY0OSwxMiBAQAogCiAJaWYgKGRydi0+YWR2aXNlX3JlbGVhc2UgJiYgLS1jb3JlLT5hY3RpdmVfcmVmID09IDApCiAJeworCQlpZiAoZHJ2LT50eXBlX2lkID09IENYODhfTVBFR19EVkIpIHsKKwkJCS8qIElmIHRoZSBEVkIgZHJpdmVyIGlzIHJlbGVhc2luZywgcmVzZXQgdGhlIGlucHV0CisJCQkgICBzdGF0ZSB0byB0aGUgbGFzdCBjb25maWd1cmVkIGFuYWxvZyBpbnB1dCAqLworCQkJY29yZS0+aW5wdXQgPSBjb3JlLT5sYXN0X2FuYWxvZ19pbnB1dDsKKwkJfQorCiAJCWRydi0+YWR2aXNlX3JlbGVhc2UoZHJ2KTsKIAkJY29yZS0+YWN0aXZlX3R5cGVfaWQgPSBDWDg4X0JPQVJEX05PTkU7CiAJCW1wZWdfZGJnKDEsIiVzKCkgUG9zdCByZWxlYXNlIEdQSU89JXhcbiIsIF9fZnVuY19fLCBjeF9yZWFkKE1PX0dQMF9JTykpOwpAQCAtODkwLDE0ICs5MDEsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjeDg4MDJfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gImN4ODgvMjogY3gyMzg4eCBNUEVHLVRTIERyaXZlciBNYW5hZ2VyIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAotCSAgICAgICAoQ1g4OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKLQkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+ICA4KSAmIDB4ZmYsCi0JICAgICAgIENYODhfVkVSU0lPTl9DT0RFICYgMHhmZik7Ci0jaWZkZWYgU05BUFNIT1QKLQlwcmludGsoS0VSTl9JTkZPICJjeDIzODh4OiBzbmFwc2hvdCBkYXRlICUwNGQtJTAyZC0lMDJkXG4iLAotCSAgICAgICBTTkFQU0hPVC8xMDAwMCwgKFNOQVBTSE9ULzEwMCklMTAwLCBTTkFQU0hPVCUxMDApOwotI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiY3g4OC8yOiBjeDIzODh4IE1QRUctVFMgRHJpdmVyIE1hbmFnZXIgdmVyc2lvbiAlcyBsb2FkZWRcbiIsCisJICAgICAgIENYODhfVkVSU0lPTik7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4ODgwMl9wY2lfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggY2VmNGYyOC4uNjBkMjhmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00NSw2ICs0NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oQ1g4OF9WRVJTSU9OKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTIyMCw3ICsyMjEsMjMgQEAKIAkJLnJlZyAgICAgICAgICAgICAgICAgICA9IE1PX1VWX1NBVFVSQVRJT04sCiAJCS5tYXNrICAgICAgICAgICAgICAgICAgPSAweDAwZmYsCiAJCS5zaGlmdCAgICAgICAgICAgICAgICAgPSAwLAotCX0seworCX0sIHsKKwkJLnYgPSB7CisJCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJCS5uYW1lICAgICAgICAgID0gIlNoYXJwbmVzcyIsCisJCQkubWluaW11bSAgICAgICA9IDAsCisJCQkubWF4aW11bSAgICAgICA9IDQsCisJCQkuc3RlcCAgICAgICAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MCwKKwkJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJfSwKKwkJLm9mZiAgICAgICAgICAgICAgICAgICA9IDAsCisJCS8qIE5PVEU6IHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgYW5kIHdyaXR0ZW4gdG8gYm90aCBldmVuCisJCSAgIGFuZCBvZGQgcmVnaXN0ZXJzIGluIHRoZSBjb2RlICovCisJCS5yZWcgICAgICAgICAgICAgICAgICAgPSBNT19GSUxURVJfT0RELAorCQkubWFzayAgICAgICAgICAgICAgICAgID0gNyA8PCA3LAorCQkuc2hpZnQgICAgICAgICAgICAgICAgID0gNywKKwl9LCB7CiAJCS52ID0gewogCQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9DSFJPTUFfQUdDLAogCQkJLm5hbWUgICAgICAgICAgPSAiQ2hyb21hIEFHQyIsCkBAIC0yNDUsNiArMjYyLDIwIEBACiAJCS5tYXNrICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCiAJCS5zaGlmdCAgICAgICAgICAgICAgICAgPSA5LAogCX0sIHsKKwkJLnYgPSB7CisJCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIsCisJCQkubmFtZSAgICAgICAgICA9ICJOb3RjaCBmaWx0ZXIiLAorCQkJLm1pbmltdW0gICAgICAgPSAwLAorCQkJLm1heGltdW0gICAgICAgPSAzLAorCQkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAsCisJCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCX0sCisJCS5vZmYgICAgICAgICAgICAgICAgICAgPSAwLAorCQkucmVnICAgICAgICAgICAgICAgICAgID0gTU9fSFRPVEFMLAorCQkubWFzayAgICAgICAgICAgICAgICAgID0gMyA8PCAxMSwKKwkJLnNoaWZ0ICAgICAgICAgICAgICAgICA9IDExLAorCX0sIHsKIAkvKiAtLS0gYXVkaW8gLS0tICovCiAJCS52ID0gewogCQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLApAQCAtMzAwLDggKzMzMSwxMCBAQAogCVY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKIAlWNEwyX0NJRF9BVURJT19CQUxBTkNFLAogCVY0TDJfQ0lEX0FVRElPX01VVEUsCisJVjRMMl9DSURfU0hBUlBORVNTLAogCVY0TDJfQ0lEX0NIUk9NQV9BR0MsCiAJVjRMMl9DSURfQ09MT1JfS0lMTEVSLAorCVY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIsCiAJMAogfTsKIEVYUE9SVF9TWU1CT0woY3g4OF91c2VyX2N0cmxzKTsKQEAgLTk2Miw2ICs5OTUsMTAgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKIAkJY3RsLT52YWx1ZSA9IDB4M2YgLSAodmFsdWUgJiAweDNmKTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCWN0bC0+dmFsdWUgPSAoKHZhbHVlICYgMHgwMjAwKSA/ICgoKHZhbHVlICYgMHgwMTgwKSA+PiA3KSArIDEpCisJCQkJCQkgOiAwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY3RsLT52YWx1ZSA9ICgodmFsdWUgKyAoYy0+b2ZmIDw8IGMtPnNoaWZ0KSkgJiBjLT5tYXNrKSA+PiBjLT5zaGlmdDsKIAkJYnJlYWs7CkBAIC0xMDM5LDYgKzEwNzYsMTIgQEAKIAkJfQogCQltYXNrPTB4ZmZmZjsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCS8qIDBiMDAwLCAwYjEwMCwgMGIxMDEsIDBiMTEwLCBvciAwYjExMSAqLworCQl2YWx1ZSA9IChjdGwtPnZhbHVlIDwgMSA/IDAgOiAoKGN0bC0+dmFsdWUgKyAzKSA8PCA3KSk7CisJCS8qIG5lZWRzIHRvIGJlIHNldCBmb3IgYm90aCBmaWVsZHMgKi8KKwkJY3hfYW5kb3IoTU9fRklMVEVSX0VWRU4sIG1hc2ssIHZhbHVlKTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DSFJPTUFfQUdDOgogCQkvKiBEbyBub3QgYWxsb3cgY2hyb21hIEFHQyB0byBiZSBlbmFibGVkIGZvciBTRUNBTSAqLwogCQl2YWx1ZSA9ICgoY3RsLT52YWx1ZSAtIGMtPm9mZikgPDwgYy0+c2hpZnQpICYgYy0+bWFzazsKQEAgLTExNjEsNyArMTIwNCw2IEBACiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4ODAwIik7CiAJc3RybGNweShjYXAtPmNhcmQsIGNvcmUtPmJvYXJkLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIscGNpX25hbWUoZGV2LT5wY2kpKTsKLQljYXAtPnZlcnNpb24gPSBDWDg4X1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9CiAJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQlWNEwyX0NBUF9SRUFEV1JJVEUgICAgIHwKQEAgLTE0ODAsNyArMTUyMiw2IEBACiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiY3g4ODAwIik7CiAJc3RybGNweShjYXAtPmNhcmQsIGNvcmUtPmJvYXJkLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7Ci0JY2FwLT52ZXJzaW9uID0gQ1g4OF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMzksMTQgKzIxODAsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjeDg4MDBfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gImN4ODgvMDogY3gyMzg4eCB2NGwyIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkIGxvYWRlZFxuIiwKLQkgICAgICAgKENYODhfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JICAgICAgIChDWDg4X1ZFUlNJT05fQ09ERSA+PiAgOCkgJiAweGZmLAotCSAgICAgICBDWDg4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotI2lmZGVmIFNOQVBTSE9UCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3gyMzg4eDogc25hcHNob3QgZGF0ZSAlMDRkLSUwMmQtJTAyZFxuIiwKLQkgICAgICAgU05BUFNIT1QvMTAwMDAsIChTTkFQU0hPVC8xMDApJTEwMCwgU05BUFNIT1QlMTAwKTsKLSNlbmRpZgorCXByaW50ayhLRVJOX0lORk8gImN4ODgvMDogY3gyMzg4eCB2NGwyIGRyaXZlciB2ZXJzaW9uICVzIGxvYWRlZFxuIiwKKwkgICAgICAgQ1g4OF9WRVJTSU9OKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3g4ODAwX3BjaV9kcml2ZXIpOwogfQogCkBAIC0yMTU3LDExICsyMTkyLDMgQEAKIAogbW9kdWxlX2luaXQoY3g4ODAwX2luaXQpOwogbW9kdWxlX2V4aXQoY3g4ODAwX2ZpbmkpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGEzOTlhOGIuLmZhOGQzMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMzksOSArMzksOSBAQAogI2luY2x1ZGUgImN4ODgtcmVnLmgiCiAjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNkZWZpbmUgQ1g4OF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgOCkKKworI2RlZmluZSBDWDg4X1ZFUlNJT04gIjAuMC45IgogCiAjZGVmaW5lIFVOU0VUICgtMVUpCiAKQEAgLTI0Miw2ICsyNDIsOCBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAgICAgICAgIDg0CiAjZGVmaW5lIENYODhfQk9BUkRfVFdJTkhBTl9WUDEwMjdfRFZCUyAgICAgODUKICNkZWZpbmUgQ1g4OF9CT0FSRF9URVZJSV9TNDY0ICAgICAgICAgICAgICA4NgorI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEhfUExVUyAgIDg3CisjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYxODAwSF9YQzQwMDAgODgKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCkBAIC0zNzUsNiArMzc3LDcgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb21vZGVfbWFudWFsOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvbW9kZV9jdXJyZW50OwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfYW5hbG9nX2lucHV0OwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGFzdGF0OwogCXUzMgkJCSAgIHVzZV9uaWNhbTsKIAl1bnNpZ25lZCBsb25nCQkgICBsYXN0X2NoYW5nZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL0tjb25maWcKaW5kZXggNmIxOTU0MC4uNjBhNDU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL0tjb25maWcKQEAgLTkxLDMgKzkxLDI2IEBACiAKIAkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnBmZS4KKworY29uZmlnIFZJREVPX0RNNjQ0WF9WUEJFCisJdHJpc3RhdGUgIkRNNjQ0WCBWUEJFIEhXIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NHgKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCWhlbHAKKwkgICAgRW5hYmxlcyBWUEJFIG1vZHVsZXMgdXNlZCBmb3IgZGlzcGxheSBvbiBhIERNNjQ0eAorCSAgICBTb0MuCisKKwkgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGJlLgorCisKK2NvbmZpZyBWSURFT19WUEJFX0RJU1BMQVkKKwl0cmlzdGF0ZSAiVlBCRSBWNEwyIERpc3BsYXkgZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eAorCXNlbGVjdCBWSURFT19ETTY0NFhfVlBCRQorCWhlbHAKKwkgICAgRW5hYmxlcyBWUEJFIFY0TDIgRGlzcGxheSBkcml2ZXIgb24gYSBETTY0NHggZGV2aWNlCisKKwkgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGJlX2Rpc3BsYXkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKaW5kZXggYTM3OTU1Ny4uYWU3ZGFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQpAQCAtMTYsMyArMTYsNSBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0RNNjQ0Nl9DQ0RDKSArPSBkbTY0NHhfY2NkYy5vCiBvYmotJChDT05GSUdfVklERU9fRE0zNTVfQ0NEQykgKz0gZG0zNTVfY2NkYy5vCiBvYmotJChDT05GSUdfVklERU9fSVNJRikgKz0gaXNpZi5vCitvYmotJChDT05GSUdfVklERU9fRE02NDRYX1ZQQkUpICs9IHZwYmUubyB2cGJlX29zZC5vIHZwYmVfdmVuYy5vCitvYmotJChDT05GSUdfVklERU9fVlBCRV9ESVNQTEFZKSArPSB2cGJlX2Rpc3BsYXkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3M2QzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlLmMKQEAgLTAsMCArMSw4NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3Zwc3MuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdmVuYy5oPgorCisjZGVmaW5lIFZQQkVfREVGQVVMVF9PVVRQVVQJIkNvbXBvc2l0ZSIKKyNkZWZpbmUgVlBCRV9ERUZBVUxUX01PREUJIm50c2MiCisKK3N0YXRpYyBjaGFyICpkZWZfb3V0cHV0ID0gVlBCRV9ERUZBVUxUX09VVFBVVDsKK3N0YXRpYyBjaGFyICpkZWZfbW9kZSA9IFZQQkVfREVGQVVMVF9NT0RFOworc3RhdGljIGludCBkZWJ1ZzsKKworbW9kdWxlX3BhcmFtKGRlZl9vdXRwdXQsIGNoYXJwLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShkZWZfbW9kZSwgY2hhcnAsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlZl9vdXRwdXQsICJ2cGJlIG91dHB1dCBuYW1lIChkZWZhdWx0OkNvbXBvc2l0ZSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmX21vZGUsICJ2cGJlIG91dHB1dCBtb2RlIG5hbWUgKGRlZmF1bHQ6bnRzYyIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIDAtMSIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIERNWFhYIFZQQkUgRGlzcGxheSBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworCisvKioKKyAqIHZwYmVfY3VycmVudF9lbmNvZGVyX2luZm8gLSBHZXQgY29uZmlnIGluZm8gZm9yIGN1cnJlbnQgZW5jb2RlcgorICogQHZwYmVfZGV2IC0gdnBiZSBkZXZpY2UgcHRyCisgKgorICogUmV0dXJuIHB0ciB0byBjdXJyZW50IGVuY29kZXIgY29uZmlnIGluZm8KKyAqLworc3RhdGljIHN0cnVjdCBlbmNvZGVyX2NvbmZpZ19pbmZvKgordnBiZV9jdXJyZW50X2VuY29kZXJfaW5mbyhzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2KQoreworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnID0gdnBiZV9kZXYtPmNmZzsKKwlpbnQgaW5kZXggPSB2cGJlX2Rldi0+Y3VycmVudF9zZF9pbmRleDsKKworCXJldHVybiAoKGluZGV4ID09IDApID8gJmNmZy0+dmVuYyA6CisJCQkJJmNmZy0+ZXh0X2VuY29kZXJzW2luZGV4LTFdKTsKK30KKworLyoqCisgKiB2cGJlX2ZpbmRfZW5jb2Rlcl9zZF9pbmRleCAtIEdpdmVuIGEgbmFtZSBmaW5kIGVuY29kZXIgc2QgaW5kZXgKKyAqCisgKiBAdnBiZV9jb25maWcgLSBwdHIgdG8gdnBiZSBjZmcKKyAqIEBvdXRwdXRfaW5kZXggLSBpbmRleCB1c2VkIGJ5IGFwcGxpY2F0aW9uCisgKgorICogUmV0dXJuIHNkIGluZGV4IG9mIHRoZSBlbmNvZGVyCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9maW5kX2VuY29kZXJfc2RfaW5kZXgoc3RydWN0IHZwYmVfY29uZmlnICpjZmcsCisJCQkgICAgIGludCBpbmRleCkKK3sKKwljaGFyICplbmNvZGVyX25hbWUgPSBjZmctPm91dHB1dHNbaW5kZXhdLnN1YmRldl9uYW1lOworCWludCBpOworCisJLyogVmVuYyBpcyBhbHdheXMgZmlyc3QJKi8KKwlpZiAoIXN0cmNtcChlbmNvZGVyX25hbWUsIGNmZy0+dmVuYy5tb2R1bGVfbmFtZSkpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX2V4dF9lbmNvZGVyczsgaSsrKSB7CisJCWlmICghc3RyY21wKGVuY29kZXJfbmFtZSwKKwkJICAgICBjZmctPmV4dF9lbmNvZGVyc1tpXS5tb2R1bGVfbmFtZSkpCisJCQlyZXR1cm4gaSsxOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHZwYmVfZ19jcm9wY2FwIC0gR2V0IGNyb3AgY2FwYWJpbGl0aWVzIG9mIHRoZSBkaXNwbGF5CisgKiBAdnBiZV9kZXYgLSB2cGJlIGRldmljZSBwdHIKKyAqIEBjcm9wY2FwIC0gY3JvcGNhcCBpcyBhIHB0ciB0byBzdHJ1Y3QgdjRsMl9jcm9wY2FwCisgKgorICogVXBkYXRlIHRoZSBjcm9wIGNhcGFiaWxpdGllcyBpbiBjcm9wIGNhcCBmb3IgY3VycmVudAorICogbW9kZQorICovCitzdGF0aWMgaW50IHZwYmVfZ19jcm9wY2FwKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApCit7CisJaWYgKE5VTEwgPT0gY3JvcGNhcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCWNyb3BjYXAtPmJvdW5kcy50b3AgPSAwOworCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MueHJlczsKKwljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy55cmVzOworCWNyb3BjYXAtPmRlZnJlY3QgPSBjcm9wY2FwLT5ib3VuZHM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGJlX2VudW1fb3V0cHV0cyAtIGVudW1lcmF0ZSBvdXRwdXRzCisgKiBAdnBiZV9kZXYgLSB2cGJlIGRldmljZSBwdHIKKyAqIEBvdXRwdXQgLSBwdHIgdG8gdjRsMl9vdXRwdXQgc3RydWN0dXJlCisgKgorICogRW51bWVyYXRlcyB0aGUgb3V0cHV0cyBhdmFpbGFibGUgYXQgdGhlIHZwYmUgZGlzcGxheQorICogcmV0dXJucyB0aGUgc3RhdHVzLCAtRUlOVkFMIGlmIGVuZCBvZiBvdXRwdXQgbGlzdAorICovCitzdGF0aWMgaW50IHZwYmVfZW51bV9vdXRwdXRzKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX291dHB1dCAqb3V0cHV0KQoreworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnID0gdnBiZV9kZXYtPmNmZzsKKwlpbnQgdGVtcF9pbmRleCA9IG91dHB1dC0+aW5kZXg7CisKKwlpZiAodGVtcF9pbmRleCA+PSBjZmctPm51bV9vdXRwdXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpvdXRwdXQgPSBjZmctPm91dHB1dHNbdGVtcF9pbmRleF0ub3V0cHV0OworCW91dHB1dC0+aW5kZXggPSB0ZW1wX2luZGV4OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9nZXRfbW9kZV9pbmZvKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsIGNoYXIgKm1vZGUpCit7CisJc3RydWN0IHZwYmVfY29uZmlnICpjZmcgPSB2cGJlX2Rldi0+Y2ZnOworCXN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gdmFyOworCWludCBjdXJyX291dHB1dCA9IHZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleDsKKwlpbnQgaTsKKworCWlmIChOVUxMID09IG1vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+b3V0cHV0c1tjdXJyX291dHB1dF0ubnVtX21vZGVzOyBpKyspIHsKKwkJdmFyID0gY2ZnLT5vdXRwdXRzW2N1cnJfb3V0cHV0XS5tb2Rlc1tpXTsKKwkJaWYgKCFzdHJjbXAobW9kZSwgdmFyLm5hbWUpKSB7CisJCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzID0gdmFyOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2cGJlX2dldF9jdXJyZW50X21vZGVfaW5mbyhzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkJCSAgICAgIHN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gKm1vZGVfaW5mbykKK3sKKwlpZiAoTlVMTCA9PSBtb2RlX2luZm8pCisJCXJldHVybiAtRUlOVkFMOworCisJKm1vZGVfaW5mbyA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGJlX2dldF9kdl9wcmVzZXRfaW5mbyhzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkJCSAgIHVuc2lnbmVkIGludCBkdl9wcmVzZXQpCit7CisJc3RydWN0IHZwYmVfY29uZmlnICpjZmcgPSB2cGJlX2Rldi0+Y2ZnOworCXN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gdmFyOworCWludCBjdXJyX291dHB1dCA9IHZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB2cGJlX2Rldi0+Y2ZnLT5vdXRwdXRzW2N1cnJfb3V0cHV0XS5udW1fbW9kZXM7IGkrKykgeworCQl2YXIgPSBjZmctPm91dHB1dHNbY3Vycl9vdXRwdXRdLm1vZGVzW2ldOworCQlpZiAoKHZhci50aW1pbmdzX3R5cGUgJiBWUEJFX0VOQ19EVl9QUkVTRVQpICYmCisJCSAgKHZhci50aW1pbmdzLmR2X3ByZXNldCA9PSBkdl9wcmVzZXQpKSB7CisJCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzID0gdmFyOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogR2V0IHN0ZCBieSBzdGQgaWQgKi8KK3N0YXRpYyBpbnQgdnBiZV9nZXRfc3RkX2luZm8oc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiwKKwkJCSAgICAgdjRsMl9zdGRfaWQgc3RkX2lkKQoreworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnID0gdnBiZV9kZXYtPmNmZzsKKwlzdHJ1Y3QgdnBiZV9lbmNfbW9kZV9pbmZvIHZhcjsKKwlpbnQgY3Vycl9vdXRwdXQgPSB2cGJlX2Rldi0+Y3VycmVudF9vdXRfaW5kZXg7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdnBiZV9kZXYtPmNmZy0+b3V0cHV0c1tjdXJyX291dHB1dF0ubnVtX21vZGVzOyBpKyspIHsKKwkJdmFyID0gY2ZnLT5vdXRwdXRzW2N1cnJfb3V0cHV0XS5tb2Rlc1tpXTsKKwkJaWYgKCh2YXIudGltaW5nc190eXBlICYgVlBCRV9FTkNfU1REKSAmJgorCQkgICh2YXIudGltaW5ncy5zdGRfaWQgJiBzdGRfaWQpKSB7CisJCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzID0gdmFyOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2cGJlX2dldF9zdGRfaW5mb19ieV9uYW1lKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkJY2hhciAqc3RkX25hbWUpCit7CisJc3RydWN0IHZwYmVfY29uZmlnICpjZmcgPSB2cGJlX2Rldi0+Y2ZnOworCXN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gdmFyOworCWludCBjdXJyX291dHB1dCA9IHZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB2cGJlX2Rldi0+Y2ZnLT5vdXRwdXRzW2N1cnJfb3V0cHV0XS5udW1fbW9kZXM7IGkrKykgeworCQl2YXIgPSBjZmctPm91dHB1dHNbY3Vycl9vdXRwdXRdLm1vZGVzW2ldOworCQlpZiAoIXN0cmNtcCh2YXIubmFtZSwgc3RkX25hbWUpKSB7CisJCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzID0gdmFyOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB2cGJlX3NldF9vdXRwdXQgLSBTZXQgb3V0cHV0CisgKiBAdnBiZV9kZXYgLSB2cGJlIGRldmljZSBwdHIKKyAqIEBpbmRleCAtIGluZGV4IG9mIG91dHB1dAorICoKKyAqIFNldCB2cGJlIG91dHB1dCB0byB0aGUgb3V0cHV0IHNwZWNpZmllZCBieSB0aGUgaW5kZXgKKyAqLworc3RhdGljIGludCB2cGJlX3NldF9vdXRwdXQoc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBlbmNvZGVyX2NvbmZpZ19pbmZvICpjdXJyX2VuY19pbmZvID0KKwkJCXZwYmVfY3VycmVudF9lbmNvZGVyX2luZm8odnBiZV9kZXYpOworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnID0gdnBiZV9kZXYtPmNmZzsKKwlpbnQgZW5jX291dF9pbmRleDsKKwlpbnQgc2RfaW5kZXg7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaW5kZXggPj0gY2ZnLT5udW1fb3V0cHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ2cGJlX2Rldi0+bG9jayk7CisKKwlzZF9pbmRleCA9IHZwYmVfZGV2LT5jdXJyZW50X3NkX2luZGV4OworCWVuY19vdXRfaW5kZXggPSBjZmctPm91dHB1dHNbaW5kZXhdLm91dHB1dC5pbmRleDsKKwkvKgorCSAqIEN1cnJlbnRseSB3ZSBzd2l0Y2ggdGhlIGVuY29kZXIgYmFzZWQgb24gb3V0cHV0IHNlbGVjdGVkCisJICogYnkgdGhlIGFwcGxpY2F0aW9uLiBJZiBtZWRpYSBjb250cm9sbGVyIGlzIGltcGxlbWVudGVkIGxhdGVyCisJICogdGhlcmUgaXMgd2lsbCBiZSBhbiBBUEkgYWRkZWQgdG8gc2V0dXBfbGluayBiZXR3ZWVuIHZlbmMKKwkgKiBhbmQgZXh0ZXJuYWwgZW5jb2Rlci4gU28gaW4gdGhhdCBjYXNlIGJlbG93IGNvbXBhcmlzb24gYWx3YXlzCisJICogbWF0Y2ggYW5kIGVuY29kZXIgd2lsbCBub3QgYmUgc3dpdGNoZWQuIEJ1dCBpZiBhcHBsaWNhdGlvbgorCSAqIGNob3NlIG5vdCB0byB1c2UgbWVkaWEgY29udHJvbGxlciwgdGhlbiB0aGlzIHByb3ZpZGVzIGN1cnJlbnQKKwkgKiB3YXkgb2Ygc3dpdGNoaW5nIGVuY29kZXIgYXQgdGhlIHZlbmMgb3V0cHV0LgorCSAqLworCWlmIChzdHJjbXAoY3Vycl9lbmNfaW5mby0+bW9kdWxlX25hbWUsCisJCSAgIGNmZy0+b3V0cHV0c1tpbmRleF0uc3ViZGV2X25hbWUpKSB7CisJCS8qIE5lZWQgdG8gc3dpdGNoIHRoZSBlbmNvZGVyIGF0IHRoZSBvdXRwdXQgKi8KKwkJc2RfaW5kZXggPSB2cGJlX2ZpbmRfZW5jb2Rlcl9zZF9pbmRleChjZmcsIGluZGV4KTsKKwkJaWYgKHNkX2luZGV4IDwgMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIFNldCBvdXRwdXQgYXQgdGhlIGVuY29kZXIgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHZwYmVfZGV2LT5lbmNvZGVyc1tzZF9pbmRleF0sIHZpZGVvLAorCQkJCSAgICAgICBzX3JvdXRpbmcsIDAsIGVuY19vdXRfaW5kZXgsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJdCBpcyBhc3N1bWVkIHRoYXQgdmVuYyBvciBleHRlbmFsIGVuY29kZXIgd2lsbCBzZXQgYSBkZWZhdWx0CisJICogbW9kZSBpbiB0aGUgc3ViIGRldmljZS4gRm9yIGV4dGVybmFsIGVuY29kZXIgb3IgTENEIHBhbm5lbCBvdXRwdXQsCisJICogd2UgYWxzbyBuZWVkIHRvIHNldCB1cCB0aGUgbGNkIHBvcnQgZm9yIHRoZSByZXF1aXJlZCBtb2RlLiBTbyBzZXR1cAorCSAqIHRoZSBsY2QgcG9ydCBmb3IgdGhlIGRlZmF1bHQgbW9kZSB0aGF0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGJvYXJkCisJICogYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzU1LWV2bS5zZXR1cCBmaWxlIGZvciB0aGUgZXh0ZXJuYWwKKwkgKiBlbmNvZGVyLgorCSAqLworCXJldCA9IHZwYmVfZ2V0X21vZGVfaW5mbyh2cGJlX2RldiwKKwkJCQkgY2ZnLT5vdXRwdXRzW2luZGV4XS5kZWZhdWx0X21vZGUpOworCWlmICghcmV0KSB7CisJCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSB2cGJlX2Rldi0+b3NkX2RldmljZTsKKworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X2xlZnRfbWFyZ2luKG9zZF9kZXZpY2UsCisJCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLmxlZnRfbWFyZ2luKTsKKwkJb3NkX2RldmljZS0+b3BzLnNldF90b3BfbWFyZ2luKG9zZF9kZXZpY2UsCisJCXZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudXBwZXJfbWFyZ2luKTsKKwkJdnBiZV9kZXYtPmN1cnJlbnRfc2RfaW5kZXggPSBzZF9pbmRleDsKKwkJdnBiZV9kZXYtPmN1cnJlbnRfb3V0X2luZGV4ID0gaW5kZXg7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmdnBiZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9zZXRfZGVmYXVsdF9vdXRwdXQoc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldikKK3sKKwlzdHJ1Y3QgdnBiZV9jb25maWcgKmNmZyA9IHZwYmVfZGV2LT5jZmc7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1fb3V0cHV0czsgaSsrKSB7CisJCWlmICghc3RyY21wKGRlZl9vdXRwdXQsCisJCQkgICAgY2ZnLT5vdXRwdXRzW2ldLm91dHB1dC5uYW1lKSkgeworCQkJcmV0ID0gdnBiZV9zZXRfb3V0cHV0KHZwYmVfZGV2LCBpKTsKKwkJCWlmICghcmV0KQorCQkJCXZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleCA9IGk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBiZV9nZXRfb3V0cHV0IC0gR2V0IG91dHB1dAorICogQHZwYmVfZGV2IC0gdnBiZSBkZXZpY2UgcHRyCisgKgorICogcmV0dXJuIGN1cnJlbnQgdnBiZSBvdXRwdXQgdG8gdGhlIHRoZSBpbmRleAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHZwYmVfZ2V0X291dHB1dChzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2KQoreworCXJldHVybiB2cGJlX2Rldi0+Y3VycmVudF9vdXRfaW5kZXg7Cit9CisKKy8qKgorICogdnBiZV9zX2R2X3ByZXNldCAtIFNldCB0aGUgZ2l2ZW4gcHJlc2V0IHRpbWluZ3MgaW4gdGhlIGVuY29kZXIKKyAqCisgKiBTZXRzIHRoZSBwcmVzZXQgaWYgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGVuY29kZXIuIFJldHVybiB0aGUgc3RhdHVzLgorICogMCAtIHN1Y2Nlc3MgJiAtRUlOVkFMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9zX2R2X3ByZXNldChzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkgICAgIHN0cnVjdCB2NGwyX2R2X3ByZXNldCAqZHZfcHJlc2V0KQoreworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnID0gdnBiZV9kZXYtPmNmZzsKKwlpbnQgb3V0X2luZGV4ID0gdnBiZV9kZXYtPmN1cnJlbnRfb3V0X2luZGV4OworCWludCBzZF9pbmRleCA9IHZwYmVfZGV2LT5jdXJyZW50X3NkX2luZGV4OworCWludCByZXQ7CisKKworCWlmICghKGNmZy0+b3V0cHV0c1tvdXRfaW5kZXhdLm91dHB1dC5jYXBhYmlsaXRpZXMgJgorCSAgICBWNEwyX09VVF9DQVBfUFJFU0VUUykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdnBiZV9nZXRfZHZfcHJlc2V0X2luZm8odnBiZV9kZXYsIGR2X3ByZXNldC0+cHJlc2V0KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZ2cGJlX2Rldi0+bG9jayk7CisKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwodnBiZV9kZXYtPmVuY29kZXJzW3NkX2luZGV4XSwgdmlkZW8sCisJCQkJCXNfZHZfcHJlc2V0LCBkdl9wcmVzZXQpOworCS8qIHNldCB0aGUgbGNkIGNvbnRyb2xsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4gbW9kZSAqLworCWlmICghcmV0KSB7CisJCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSB2cGJlX2Rldi0+b3NkX2RldmljZTsKKworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X2xlZnRfbWFyZ2luKG9zZF9kZXZpY2UsCisJCXZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MubGVmdF9tYXJnaW4pOworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X3RvcF9tYXJnaW4ob3NkX2RldmljZSwKKwkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy51cHBlcl9tYXJnaW4pOworCX0KKwltdXRleF91bmxvY2soJnZwYmVfZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBiZV9nX2R2X3ByZXNldCAtIEdldCB0aGUgcHJlc2V0IGluIHRoZSBjdXJyZW50IGVuY29kZXIKKyAqCisgKiBHZXQgdGhlIHByZXNldCBpbiB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4gMCAtIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgb24gZXJyb3IKKyAqLworc3RhdGljIGludCB2cGJlX2dfZHZfcHJlc2V0KHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCSAgICAgc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpkdl9wcmVzZXQpCit7CisJaWYgKHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudGltaW5nc190eXBlICYKKwkgIFZQQkVfRU5DX0RWX1BSRVNFVCkgeworCQlkdl9wcmVzZXQtPnByZXNldCA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudGltaW5ncy5kdl9wcmVzZXQ7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHZwYmVfZW51bV9kdl9wcmVzZXRzIC0gRW51bWVyYXRlIHRoZSBkdiBwcmVzZXRzIGluIHRoZSBjdXJyZW50IGVuY29kZXIKKyAqCisgKiBHZXQgdGhlIHByZXNldCBpbiB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4gMCAtIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgb24gZXJyb3IKKyAqLworc3RhdGljIGludCB2cGJlX2VudW1fZHZfcHJlc2V0cyhzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkJIHN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICpwcmVzZXRfaW5mbykKK3sKKwlzdHJ1Y3QgdnBiZV9jb25maWcgKmNmZyA9IHZwYmVfZGV2LT5jZmc7CisJaW50IG91dF9pbmRleCA9IHZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleDsKKwlzdHJ1Y3QgdnBiZV9vdXRwdXQgKm91dHB1dCA9ICZjZmctPm91dHB1dHNbb3V0X2luZGV4XTsKKwlpbnQgaiA9IDA7CisJaW50IGk7CisKKwlpZiAoIShvdXRwdXQtPm91dHB1dC5jYXBhYmlsaXRpZXMgJiBWNEwyX09VVF9DQVBfUFJFU0VUUykpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IG91dHB1dC0+bnVtX21vZGVzOyBpKyspIHsKKwkJaWYgKG91dHB1dC0+bW9kZXNbaV0udGltaW5nc190eXBlID09IFZQQkVfRU5DX0RWX1BSRVNFVCkgeworCQkJaWYgKGogPT0gcHJlc2V0X2luZm8tPmluZGV4KQorCQkJCWJyZWFrOworCQkJaisrOworCQl9CisJfQorCisJaWYgKGkgPT0gb3V0cHV0LT5udW1fbW9kZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHY0bF9maWxsX2R2X3ByZXNldF9pbmZvKG91dHB1dC0+bW9kZXNbaV0udGltaW5ncy5kdl9wcmVzZXQsCisJCQkJCXByZXNldF9pbmZvKTsKK30KKworLyoqCisgKiB2cGJlX3Nfc3RkIC0gU2V0IHRoZSBnaXZlbiBzdGFuZGFyZCBpbiB0aGUgZW5jb2RlcgorICoKKyAqIFNldHMgdGhlIHN0YW5kYXJkIGlmIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4KKyAqIDAgLSBzdWNjZXNzICYgLUVJTlZBTCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IHZwYmVfc19zdGQoc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBiZV9jb25maWcgKmNmZyA9IHZwYmVfZGV2LT5jZmc7CisJaW50IG91dF9pbmRleCA9IHZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleDsKKwlpbnQgc2RfaW5kZXggPSB2cGJlX2Rldi0+Y3VycmVudF9zZF9pbmRleDsKKwlpbnQgcmV0OworCisJaWYgKCEoY2ZnLT5vdXRwdXRzW291dF9pbmRleF0ub3V0cHV0LmNhcGFiaWxpdGllcyAmCisJCVY0TDJfT1VUX0NBUF9TVEQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHZwYmVfZ2V0X3N0ZF9pbmZvKHZwYmVfZGV2LCAqc3RkX2lkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmdnBiZV9kZXYtPmxvY2spOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGJlX2Rldi0+ZW5jb2RlcnNbc2RfaW5kZXhdLCB2aWRlbywKKwkJCSAgICAgICBzX3N0ZF9vdXRwdXQsICpzdGRfaWQpOworCS8qIHNldCB0aGUgbGNkIGNvbnRyb2xsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4gbW9kZSAqLworCWlmICghcmV0KSB7CisJCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSB2cGJlX2Rldi0+b3NkX2RldmljZTsKKworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X2xlZnRfbWFyZ2luKG9zZF9kZXZpY2UsCisJCXZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MubGVmdF9tYXJnaW4pOworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X3RvcF9tYXJnaW4ob3NkX2RldmljZSwKKwkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy51cHBlcl9tYXJnaW4pOworCX0KKwltdXRleF91bmxvY2soJnZwYmVfZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBiZV9nX3N0ZCAtIEdldCB0aGUgc3RhbmRhcmQgaW4gdGhlIGN1cnJlbnQgZW5jb2RlcgorICoKKyAqIEdldCB0aGUgc3RhbmRhcmQgaW4gdGhlIGN1cnJlbnQgZW5jb2Rlci4gUmV0dXJuIHRoZSBzdGF0dXMuIDAgLSBzdWNjZXNzCisgKiAtRUlOVkFMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9nX3N0ZChzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LCB2NGwyX3N0ZF9pZCAqc3RkX2lkKQoreworCXN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gY3VyX3RpbWluZ3MgPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzOworCisJaWYgKGN1cl90aW1pbmdzLnRpbWluZ3NfdHlwZSAmIFZQQkVfRU5DX1NURCkgeworCQkqc3RkX2lkID0gY3VyX3RpbWluZ3MudGltaW5ncy5zdGRfaWQ7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHZwYmVfc2V0X21vZGUgLSBTZXQgbW9kZSBpbiB0aGUgY3VycmVudCBlbmNvZGVyIHVzaW5nIG1vZGUgaW5mbworICoKKyAqIFVzZSB0aGUgbW9kZSBzdHJpbmcgdG8gZGVjaWRlIHdoYXQgdGltaW5ncyB0byBzZXQgaW4gdGhlIGVuY29kZXIKKyAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1bCB3aGVuIGZic2V0IGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAqIHRpbWluZ3MgYnkgc3BlY2lmeWluZyBhIHN0cmluZyB0byBpbmRpY2F0ZSB0aGUgdGltaW5ncy4KKyAqLworc3RhdGljIGludCB2cGJlX3NldF9tb2RlKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgc3RydWN0IHZwYmVfZW5jX21vZGVfaW5mbyAqbW9kZV9pbmZvKQoreworCXN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8gKnByZXNldF9tb2RlID0gTlVMTDsKKwlzdHJ1Y3QgdnBiZV9jb25maWcgKmNmZyA9IHZwYmVfZGV2LT5jZmc7CisJc3RydWN0IHY0bDJfZHZfcHJlc2V0IGR2X3ByZXNldDsKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2RfZGV2aWNlOworCWludCBvdXRfaW5kZXggPSB2cGJlX2Rldi0+Y3VycmVudF9vdXRfaW5kZXg7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlpZiAoKE5VTEwgPT0gbW9kZV9pbmZvKSB8fCAoTlVMTCA9PSBtb2RlX2luZm8tPm5hbWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPm91dHB1dHNbb3V0X2luZGV4XS5udW1fbW9kZXM7IGkrKykgeworCQlpZiAoIXN0cmNtcChtb2RlX2luZm8tPm5hbWUsCisJCSAgICAgY2ZnLT5vdXRwdXRzW291dF9pbmRleF0ubW9kZXNbaV0ubmFtZSkpIHsKKwkJCXByZXNldF9tb2RlID0gJmNmZy0+b3V0cHV0c1tvdXRfaW5kZXhdLm1vZGVzW2ldOworCQkJLyoKKwkJCSAqIGl0IG1heSBiZSBvbmUgb2YgdGhlIDMgdGltaW5ncyB0eXBlLiBDaGVjayBhbmQKKwkJCSAqIGludm9rZSByaWdodCBBUEkKKwkJCSAqLworCQkJaWYgKHByZXNldF9tb2RlLT50aW1pbmdzX3R5cGUgJiBWUEJFX0VOQ19TVEQpCisJCQkJcmV0dXJuIHZwYmVfc19zdGQodnBiZV9kZXYsCisJCQkJCQkgJnByZXNldF9tb2RlLT50aW1pbmdzLnN0ZF9pZCk7CisJCQlpZiAocHJlc2V0X21vZGUtPnRpbWluZ3NfdHlwZSAmIFZQQkVfRU5DX0RWX1BSRVNFVCkgeworCQkJCWR2X3ByZXNldC5wcmVzZXQgPQorCQkJCQlwcmVzZXRfbW9kZS0+dGltaW5ncy5kdl9wcmVzZXQ7CisJCQkJcmV0dXJuIHZwYmVfc19kdl9wcmVzZXQodnBiZV9kZXYsICZkdl9wcmVzZXQpOworCQkJfQorCQl9CisJfQorCisJLyogT25seSBjdXN0b20gdGltaW5nIHNob3VsZCByZWFjaCBoZXJlICovCisJaWYgKHByZXNldF9tb2RlID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmdnBiZV9kZXYtPmxvY2spOworCisJb3NkX2RldmljZSA9IHZwYmVfZGV2LT5vc2RfZGV2aWNlOworCXZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MgPSAqcHJlc2V0X21vZGU7CisJb3NkX2RldmljZS0+b3BzLnNldF9sZWZ0X21hcmdpbihvc2RfZGV2aWNlLAorCQl2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLmxlZnRfbWFyZ2luKTsKKwlvc2RfZGV2aWNlLT5vcHMuc2V0X3RvcF9tYXJnaW4ob3NkX2RldmljZSwKKwkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy51cHBlcl9tYXJnaW4pOworCisJbXV0ZXhfdW5sb2NrKCZ2cGJlX2Rldi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwYmVfc2V0X2RlZmF1bHRfbW9kZShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSB2cGJlX2dldF9zdGRfaW5mb19ieV9uYW1lKHZwYmVfZGV2LCBkZWZfbW9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCB0aGUgZGVmYXVsdCBtb2RlIGluIHRoZSBlbmNvZGVyICovCisJcmV0dXJuIHZwYmVfc2V0X21vZGUodnBiZV9kZXYsICZ2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzKTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9kZXZpY2VfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGRhdGE7CisKKwlpZiAoc3RyY21wKCJ2cGJlLW9zZCIsIHBkZXYtPm5hbWUpID09IDApCisJCXZwYmVfZGV2LT5vc2RfZGV2aWNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGJlX2luaXRpYWxpemUoKSAtIEluaXRpYWxpemUgdGhlIHZwYmUgZGlzcGxheSBjb250cm9sbGVyCisgKiBAdnBiZV9kZXYgLSB2cGJlIGRldmljZSBwdHIKKyAqCisgKiBNYXN0ZXIgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXJzIGNhbGxzIHRoaXMgdG8gaW5pdGlhbGl6ZSB2cGJlCisgKiBkaXNwbGF5IGNvbnRyb2xsZXIuIFRoaXMgd2lsbCB0aGVuIHJlZ2lzdGVycyB2NGwyIGRldmljZSBhbmQgdGhlIHN1YgorICogZGV2aWNlcyBhbmQgc2V0cyBhIGN1cnJlbnQgZW5jb2RlciBzdWIgZGV2aWNlIGZvciBkaXNwbGF5LiB2NGwyIGRpc3BsYXkKKyAqIGRldmljZSBkcml2ZXIgaXMgdGhlIG1hc3RlciBhbmQgZnJhbWUgYnVmZmVyIGRpc3BsYXkgZGV2aWNlIGRyaXZlciBpcworICogdGhlIHNsYXZlLiBGcmFtZSBidWZmZXIgZGlzcGxheSBkcml2ZXIgY2hlY2tzIHRoZSBpbml0aWFsaXplZCBkdXJpbmcKKyAqIHByb2JlIGFuZCBleGl0IGlmIG5vdCBpbml0aWFsaXplZC4gUmV0dXJucyBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9pbml0aWFsaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldikKK3sKKwlzdHJ1Y3QgZW5jb2Rlcl9jb25maWdfaW5mbyAqZW5jX2luZm87CisJc3RydWN0IHY0bDJfc3ViZGV2ICoqZW5jX3N1YmRldjsKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2RfZGV2aWNlOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJaW50IG91dHB1dF9pbmRleDsKKwlpbnQgbnVtX2VuY29kZXJzOworCWludCByZXQgPSAwOworCWludCBlcnI7CisJaW50IGk7CisKKwkvKgorCSAqIHY0bDIgYWJkIEZCRGV2IGZyYW1lIGJ1ZmZlciBkZXZpY2VzIHdpbGwgZ2V0IHRoZSB2cGJlX2RldiBwb2ludGVyCisJICogZnJvbSB0aGUgcGxhdGZvcm0gZGV2aWNlIGJ5IGl0ZXJhdGlvbiBvZiBwbGF0Zm9ybSBkcml2ZXJzIGFuZAorCSAqIG1hdGNoaW5nIHdpdGggZGV2aWNlIG5hbWUKKwkgKi8KKwlpZiAoTlVMTCA9PSB2cGJlX2RldiB8fCBOVUxMID09IGRldikgeworCQlwcmludGsoS0VSTl9FUlIgIk51bGwgZGV2aWNlIHBvaW50ZXJzLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh2cGJlX2Rldi0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdnBiZV9kZXYtPmxvY2spOworCisJaWYgKHN0cmNtcCh2cGJlX2Rldi0+Y2ZnLT5tb2R1bGVfbmFtZSwgImRtNjQ0eC12cGJlLWRpc3BsYXkiKSAhPSAwKSB7CisJCS8qIFdlIGhhdmUgZGFjIGNsb2NrIGF2YWlsYWJsZSBmb3IgcGxhdGZvcm0gKi8KKwkJdnBiZV9kZXYtPmRhY19jbGsgPSBjbGtfZ2V0KHZwYmVfZGV2LT5wZGV2LCAidnBzc19kYWMiKTsKKwkJaWYgKElTX0VSUih2cGJlX2Rldi0+ZGFjX2NsaykpIHsKKwkJCXJldCA9ICBQVFJfRVJSKHZwYmVfZGV2LT5kYWNfY2xrKTsKKwkJCWdvdG8gdnBiZV91bmxvY2s7CisJCX0KKwkJaWYgKGNsa19lbmFibGUodnBiZV9kZXYtPmRhY19jbGspKSB7CisJCQlyZXQgPSAgLUVOT0RFVjsKKwkJCWdvdG8gdnBiZV91bmxvY2s7CisJCX0KKwl9CisKKwkvKiBmaXJzdCBlbmFibGUgdnBzcyBjbG9ja3MgKi8KKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX1ZQQkVfQ0xPQ0ssIDEpOworCisJLyogRmlyc3QgcmVnaXN0ZXIgYSB2NGwyIGRldmljZSAqLworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKGRldiwgJnZwYmVfZGV2LT52NGwyX2Rldik7CisJaWYgKHJldCkgeworCQl2NGwyX2VycihkZXYtPmRyaXZlciwKKwkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdjRsMiBkZXZpY2UuXG4iKTsKKwkJZ290byB2cGJlX2ZhaWxfY2xvY2s7CisJfQorCXY0bDJfaW5mbygmdnBiZV9kZXYtPnY0bDJfZGV2LCAidnBiZSB2NGwyIGRldmljZSByZWdpc3RlcmVkXG4iKTsKKworCWVyciA9IGJ1c19mb3JfZWFjaF9kZXYoJnBsYXRmb3JtX2J1c190eXBlLCBOVUxMLCB2cGJlX2RldiwKKwkJCSAgICAgICBwbGF0Zm9ybV9kZXZpY2VfZ2V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXZwYmVfZGV2LT52ZW5jID0gdmVuY19zdWJfZGV2X2luaXQoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCQkJICAgdnBiZV9kZXYtPmNmZy0+dmVuYy5tb2R1bGVfbmFtZSk7CisJLyogcmVnaXN0ZXIgdmVuYyBzdWIgZGV2aWNlICovCisJaWYgKHZwYmVfZGV2LT52ZW5jID09IE5VTEwpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJ2cGJlIHVuYWJsZSB0byBpbml0IHZlbmMgc3ViIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gdnBiZV9mYWlsX3Y0bDJfZGV2aWNlOworCX0KKwkvKiBpbml0aWFsaXplIG9zZCBkZXZpY2UgKi8KKwlvc2RfZGV2aWNlID0gdnBiZV9kZXYtPm9zZF9kZXZpY2U7CisKKwlpZiAoTlVMTCAhPSBvc2RfZGV2aWNlLT5vcHMuaW5pdGlhbGl6ZSkgeworCQllcnIgPSBvc2RfZGV2aWNlLT5vcHMuaW5pdGlhbGl6ZShvc2RfZGV2aWNlKTsKKwkJaWYgKGVycikgeworCQkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCQkgInVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBPU0QgZGV2aWNlIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byB2cGJlX2ZhaWxfdjRsMl9kZXZpY2U7CisJCX0KKwl9CisKKwkvKgorCSAqIFJlZ2lzdGVyIGFueSBleHRlcm5hbCBlbmNvZGVycyB0aGF0IGFyZSBjb25maWd1cmVkLiBBdCBpbmRleCAwIHdlCisJICogc3RvcmUgdmVuYyBzZCBpbmRleC4KKwkgKi8KKwludW1fZW5jb2RlcnMgPSB2cGJlX2Rldi0+Y2ZnLT5udW1fZXh0X2VuY29kZXJzICsgMTsKKwl2cGJlX2Rldi0+ZW5jb2RlcnMgPSBrbWFsbG9jKAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYgKikqbnVtX2VuY29kZXJzLAorCQkJCUdGUF9LRVJORUwpOworCWlmIChOVUxMID09IHZwYmVfZGV2LT5lbmNvZGVycykgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGVuY29kZXJzIHN1YiBkZXZpY2VzIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gdnBiZV9mYWlsX3Y0bDJfZGV2aWNlOworCX0KKworCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKHZwYmVfZGV2LT5jZmctPmkyY19hZGFwdGVyX2lkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKHZwYmVfZGV2LT5jZmctPm51bV9leHRfZW5jb2RlcnMgKyAxKTsgaSsrKSB7CisJCWlmIChpID09IDApIHsKKwkJCS8qIHZlbmMgaXMgYXQgaW5kZXggMCAqLworCQkJZW5jX3N1YmRldiA9ICZ2cGJlX2Rldi0+ZW5jb2RlcnNbaV07CisJCQkqZW5jX3N1YmRldiA9IHZwYmVfZGV2LT52ZW5jOworCQkJY29udGludWU7CisJCX0KKwkJZW5jX2luZm8gPSAmdnBiZV9kZXYtPmNmZy0+ZXh0X2VuY29kZXJzW2ldOworCQlpZiAoZW5jX2luZm8tPmlzX2kyYykgeworCQkJZW5jX3N1YmRldiA9ICZ2cGJlX2Rldi0+ZW5jb2RlcnNbaV07CisJCQkqZW5jX3N1YmRldiA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoCisJCQkJCQkmdnBiZV9kZXYtPnY0bDJfZGV2LCBpMmNfYWRhcCwKKwkJCQkJCSZlbmNfaW5mby0+Ym9hcmRfaW5mbywgTlVMTCk7CisJCQlpZiAoKmVuY19zdWJkZXYpCisJCQkJdjRsMl9pbmZvKCZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkJCSAgInY0bDIgc3ViIGRldmljZSAlcyByZWdpc3RlcmVkXG4iLAorCQkJCQkgIGVuY19pbmZvLT5tb2R1bGVfbmFtZSk7CisJCQllbHNlIHsKKwkJCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiZW5jb2RlciAlcyIKKwkJCQkJICIgZmFpbGVkIHRvIHJlZ2lzdGVyIiwKKwkJCQkJIGVuY19pbmZvLT5tb2R1bGVfbmFtZSk7CisJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQlnb3RvIHZwYmVfZmFpbF9zZF9yZWdpc3RlcjsKKwkJCX0KKwkJfSBlbHNlCisJCQl2NGwyX3dhcm4oJnZwYmVfZGV2LT52NGwyX2RldiwgIm5vbi1pMmMgZW5jb2RlcnMiCisJCQkJICIgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQiKTsKKwl9CisKKwkvKiBzZXQgdGhlIGN1cnJlbnQgZW5jb2RlciBhbmQgb3V0cHV0IHRvIHRoYXQgb2YgdmVuYyBieSBkZWZhdWx0ICovCisJdnBiZV9kZXYtPmN1cnJlbnRfc2RfaW5kZXggPSAwOworCXZwYmVfZGV2LT5jdXJyZW50X291dF9pbmRleCA9IDA7CisJb3V0cHV0X2luZGV4ID0gMDsKKworCW11dGV4X3VubG9jaygmdnBiZV9kZXYtPmxvY2spOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJTZXR0aW5nIGRlZmF1bHQgb3V0cHV0IHRvICVzXG4iLCBkZWZfb3V0cHV0KTsKKwlyZXQgPSB2cGJlX3NldF9kZWZhdWx0X291dHB1dCh2cGJlX2Rldik7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHNldCBkZWZhdWx0IG91dHB1dCAlcyIsCisJCQkgZGVmX291dHB1dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJTZXR0aW5nIGRlZmF1bHQgbW9kZSB0byAlc1xuIiwgZGVmX21vZGUpOworCXJldCA9IHZwYmVfc2V0X2RlZmF1bHRfbW9kZSh2cGJlX2Rldik7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHNldCBkZWZhdWx0IG1vZGUgJXMiLAorCQkJIGRlZl9tb2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdnBiZV9kZXYtPmluaXRpYWxpemVkID0gMTsKKwkvKiBUQkQgaGFuZGxpbmcgb2YgYm9vdGFyZ3MgZm9yIGRlZmF1bHQgb3V0cHV0IGFuZCBtb2RlICovCisJcmV0dXJuIDA7CisKK3ZwYmVfZmFpbF9zZF9yZWdpc3RlcjoKKwlrZnJlZSh2cGJlX2Rldi0+ZW5jb2RlcnMpOwordnBiZV9mYWlsX3Y0bDJfZGV2aWNlOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwYmVfZGV2LT52NGwyX2Rldik7Cit2cGJlX2ZhaWxfY2xvY2s6CisJaWYgKHN0cmNtcCh2cGJlX2Rldi0+Y2ZnLT5tb2R1bGVfbmFtZSwgImRtNjQ0eC12cGJlLWRpc3BsYXkiKSAhPSAwKQorCQljbGtfcHV0KHZwYmVfZGV2LT5kYWNfY2xrKTsKK3ZwYmVfdW5sb2NrOgorCW11dGV4X3VubG9jaygmdnBiZV9kZXYtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnBiZV9kZWluaXRpYWxpemUoKSAtIGRlLWluaXRpYWxpemUgdGhlIHZwYmUgZGlzcGxheSBjb250cm9sbGVyCisgKiBAZGV2IC0gTWFzdGVyIGFuZCBzbGF2ZSBkZXZpY2UgcHRyCisgKgorICogdnBiZV9tYXN0ZXIgYW5kIHNsYXZlIGZyYW1lIGJ1ZmZlciBkZXZpY2VzIGNhbGxzIHRoaXMgdG8gZGUtaW5pdGlhbGl6ZQorICogdGhlIGRpc3BsYXkgY29udHJvbGxlci4gSXQgaXMgY2FsbGVkIHdoZW4gbWFzdGVyIGFuZCBzbGF2ZSBkZXZpY2UKKyAqIGRyaXZlciBtb2R1bGVzIGFyZSByZW1vdmVkIGFuZCBubyBsb25nZXIgcmVxdWlyZXMgdGhlIGRpc3BsYXkgY29udHJvbGxlci4KKyAqLworc3RhdGljIHZvaWQgdnBiZV9kZWluaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2KQoreworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwYmVfZGV2LT52NGwyX2Rldik7CisJaWYgKHN0cmNtcCh2cGJlX2Rldi0+Y2ZnLT5tb2R1bGVfbmFtZSwgImRtNjQ0eC12cGJlLWRpc3BsYXkiKSAhPSAwKQorCQljbGtfcHV0KHZwYmVfZGV2LT5kYWNfY2xrKTsKKworCWtmcmVlKHZwYmVfZGV2LT5lbmNvZGVycyk7CisJdnBiZV9kZXYtPmluaXRpYWxpemVkID0gMDsKKwkvKiBkaXNhYmxlIHZwc3MgY2xvY2tzICovCisJdnBzc19lbmFibGVfY2xvY2soVlBTU19WUEJFX0NMT0NLLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCB2cGJlX2RldmljZV9vcHMgdnBiZV9kZXZfb3BzID0geworCS5nX2Nyb3BjYXAgPSB2cGJlX2dfY3JvcGNhcCwKKwkuZW51bV9vdXRwdXRzID0gdnBiZV9lbnVtX291dHB1dHMsCisJLnNldF9vdXRwdXQgPSB2cGJlX3NldF9vdXRwdXQsCisJLmdldF9vdXRwdXQgPSB2cGJlX2dldF9vdXRwdXQsCisJLnNfZHZfcHJlc2V0ID0gdnBiZV9zX2R2X3ByZXNldCwKKwkuZ19kdl9wcmVzZXQgPSB2cGJlX2dfZHZfcHJlc2V0LAorCS5lbnVtX2R2X3ByZXNldHMgPSB2cGJlX2VudW1fZHZfcHJlc2V0cywKKwkuc19zdGQgPSB2cGJlX3Nfc3RkLAorCS5nX3N0ZCA9IHZwYmVfZ19zdGQsCisJLmluaXRpYWxpemUgPSB2cGJlX2luaXRpYWxpemUsCisJLmRlaW5pdGlhbGl6ZSA9IHZwYmVfZGVpbml0aWFsaXplLAorCS5nZXRfbW9kZV9pbmZvID0gdnBiZV9nZXRfY3VycmVudF9tb2RlX2luZm8sCisJLnNldF9tb2RlID0gdnBiZV9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHZwYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2OworCXN0cnVjdCB2cGJlX2NvbmZpZyAqY2ZnOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoIWNmZy0+bW9kdWxlX25hbWVbMF0gfHwKKwkgICAgIWNmZy0+b3NkLm1vZHVsZV9uYW1lWzBdIHx8CisJICAgICFjZmctPnZlbmMubW9kdWxlX25hbWVbMF0pIHsKKwkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgInZwYmUgZGlzcGxheSBtb2R1bGUgbmFtZXMgbm90IgorCQkJICIgZGVmaW5lZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdnBiZV9kZXYgPSBremFsbG9jKHNpemVvZigqdnBiZV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodnBiZV9kZXYgPT0gTlVMTCkgeworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSIKKwkJCSAiIGZvciB2cGJlX2RldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl2cGJlX2Rldi0+Y2ZnID0gY2ZnOworCXZwYmVfZGV2LT5vcHMgPSB2cGJlX2Rldl9vcHM7CisJdnBiZV9kZXYtPnBkZXYgPSAmcGRldi0+ZGV2OworCisJaWYgKGNmZy0+b3V0cHV0cy0+bnVtX21vZGVzID4gMCkKKwkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncyA9IHZwYmVfZGV2LT5jZmctPm91dHB1dHNbMF0ubW9kZXNbMF07CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNldCB0aGUgZHJpdmVyIGRhdGEgaW4gcGxhdGZvcm0gZGV2aWNlICovCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdnBiZV9kZXYpOworCW11dGV4X2luaXQoJnZwYmVfZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwYmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKKworCWtmcmVlKHZwYmVfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGJlX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ2cGJlX2NvbnRyb2xsZXIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHZwYmVfcHJvYmUsCisJLnJlbW92ZSA9IHZwYmVfcmVtb3ZlLAorfTsKKworLyoqCisgKiB2cGJlX2luaXQ6IGluaXRpYWxpemUgdGhlIHZwYmUgZHJpdmVyCisgKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgZGV2aWNlIGFuZCBkcml2ZXIgdG8gdGhlIGtlcm5lbAorICovCitzdGF0aWMgX19pbml0IGludCB2cGJlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2cGJlX2RyaXZlcik7Cit9CisKKy8qKgorICogdnBiZV9jbGVhbnVwIDogY2xlYW51cCBmdW5jdGlvbiBmb3IgdnBiZSBkcml2ZXIKKyAqCisgKiBUaGlzIHdpbGwgdW4tcmVnaXN0ZXJzIHRoZSBkZXZpY2UgYW5kIGRyaXZlciB0byB0aGUga2VybmVsCisgKi8KK3N0YXRpYyB2b2lkIHZwYmVfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cGJlX2RyaXZlcik7Cit9CisKKy8qIEZ1bmN0aW9uIGZvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgKi8KK21vZHVsZV9pbml0KHZwYmVfaW5pdCk7Cittb2R1bGVfZXhpdCh2cGJlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfZGlzcGxheS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfZGlzcGxheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMWQ4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV9kaXNwbGF5LmMKQEAgLTAsMCArMSwxODYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGJlX2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmUuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdmVuYy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV9vc2QuaD4KKyNpbmNsdWRlICJ2cGJlX3ZlbmNfcmVncy5oIgorCisjZGVmaW5lIFZQQkVfRElTUExBWV9EUklWRVIgInZwYmUtdjRsMiIKKworc3RhdGljIGludCBkZWJ1ZzsKKworI2RlZmluZSBWUEJFX0RJU1BMQVlfU0RfQlVGX1NJWkUgKDcyMCo1NzYqMikKKyNkZWZpbmUgVlBCRV9ERUZBVUxUX05VTV9CVUZTIDMKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitzdGF0aWMgaW50IHZlbmNfaXNfc2Vjb25kX2ZpZWxkKHN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2KQoreworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisJaW50IHJldDsKKwlpbnQgdmFsOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh2cGJlX2Rldi0+dmVuYywKKwkJCSAgICAgICBjb3JlLAorCQkJICAgICAgIGlvY3RsLAorCQkJICAgICAgIFZFTkNfR0VUX0ZMRCwKKwkJCSAgICAgICAmdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJICJFcnJvciBpbiBnZXR0aW5nIEZpZWxkIElEIDBcbiIpOworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCB2cGJlX2lzcl9ldmVuX2ZpZWxkKHN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3Bfb2JqLAorCQkJCXN0cnVjdCB2cGJlX2xheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdGltZXZhbHVlOworCisJaWYgKGxheWVyLT5jdXJfZnJtID09IGxheWVyLT5uZXh0X2ZybSkKKwkJcmV0dXJuOworCWt0aW1lX2dldF90cygmdGltZXZhbHVlKTsKKwlsYXllci0+Y3VyX2ZybS0+dHMudHZfc2VjID0gdGltZXZhbHVlLnR2X3NlYzsKKwlsYXllci0+Y3VyX2ZybS0+dHMudHZfdXNlYyA9IHRpbWV2YWx1ZS50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKwlsYXllci0+Y3VyX2ZybS0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbGF5ZXItPmN1cl9mcm0tPmRvbmUpOworCS8qIE1ha2UgY3VyX2ZybSBwb2ludGluZyB0byBuZXh0X2ZybSAqLworCWxheWVyLT5jdXJfZnJtID0gbGF5ZXItPm5leHRfZnJtOworfQorCitzdGF0aWMgdm9pZCB2cGJlX2lzcl9vZGRfZmllbGQoc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcF9vYmosCisJCQkJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyKQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSBkaXNwX29iai0+b3NkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlzcGluX2xvY2soJmRpc3Bfb2JqLT5kbWFfcXVldWVfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmxheWVyLT5kbWFfcXVldWUpIHx8CisJCShsYXllci0+Y3VyX2ZybSAhPSBsYXllci0+bmV4dF9mcm0pKSB7CisJCXNwaW5fdW5sb2NrKCZkaXNwX29iai0+ZG1hX3F1ZXVlX2xvY2spOworCQlyZXR1cm47CisJfQorCS8qCisJICogb25lIGZpZWxkIGlzIGRpc3BsYXllZCBjb25maWd1cmUKKwkgKiB0aGUgbmV4dCBmcmFtZSBpZiBpdCBpcyBhdmFpbGFibGUKKwkgKiBvdGhlcndpc2UgaG9sZCBvbiBjdXJyZW50IGZyYW1lCisJICogR2V0IG5leHQgZnJvbSB0aGUgYnVmZmVyIHF1ZXVlCisJICovCisJbGF5ZXItPm5leHRfZnJtID0gbGlzdF9lbnRyeSgKKwkJCQlsYXllci0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJc3RydWN0ICB2aWRlb2J1Zl9idWZmZXIsCisJCQkJcXVldWUpOworCS8qIFJlbW92ZSB0aGF0IGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWxpc3RfZGVsKCZsYXllci0+bmV4dF9mcm0tPnF1ZXVlKTsKKwlzcGluX3VubG9jaygmZGlzcF9vYmotPmRtYV9xdWV1ZV9sb2NrKTsKKwkvKiBNYXJrIHN0YXRlIG9mIHRoZSBmcmFtZSB0byBhY3RpdmUgKi8KKwlsYXllci0+bmV4dF9mcm0tPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKGxheWVyLT5uZXh0X2ZybSk7CisJb3NkX2RldmljZS0+b3BzLnN0YXJ0X2xheWVyKG9zZF9kZXZpY2UsCisJCQlsYXllci0+bGF5ZXJfaW5mby5pZCwKKwkJCWFkZHIsCisJCQlkaXNwX29iai0+Y2Jjcl9vZnN0KTsKK30KKworLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IHZlbmNfaXNyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiA9IChzdHJ1Y3QgdnBiZV9kaXNwbGF5ICopYXJnOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllcjsKKwlzdGF0aWMgdW5zaWduZWQgbGFzdF9ldmVudDsKKwl1bnNpZ25lZCBldmVudCA9IDA7CisJaW50IGZpZDsKKwlpbnQgaTsKKworCWlmICgoTlVMTCA9PSBhcmcpIHx8IChOVUxMID09IGRpc3BfZGV2LT5kZXZbMF0pKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlpZiAodmVuY19pc19zZWNvbmRfZmllbGQoZGlzcF9kZXYpKQorCQlldmVudCB8PSBWRU5DX1NFQ09ORF9GSUVMRDsKKwllbHNlCisJCWV2ZW50IHw9IFZFTkNfRklSU1RfRklFTEQ7CisKKwlpZiAoZXZlbnQgPT0gKGxhc3RfZXZlbnQgJiB+VkVOQ19FTkRfT0ZfRlJBTUUpKSB7CisJCS8qCisJCSogSWYgdGhlIGRpc3BsYXkgaXMgbm9uLWludGVybGFjZWQsIHRoZW4gd2UgbmVlZCB0byBmbGFnIHRoZQorCQkqIGVuZC1vZi1mcmFtZSBldmVudCBhdCBldmVyeSBpbnRlcnJ1cHQgcmVnYXJkbGVzcyBvZiB0aGUKKwkJKiB2YWx1ZSBvZiB0aGUgRklEU1QgYml0LiAgV2UgY2FuIGNvbmNsdWRlIHRoYXQgdGhlIGRpc3BsYXkgaXMKKwkJKiBub24taW50ZXJsYWNlZCBpZiB0aGUgdmFsdWUgb2YgdGhlIEZJRFNUIGJpdCBpcyB1bmNoYW5nZWQKKwkJKiBmcm9tIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQuCisJCSovCisJCWV2ZW50IHw9IFZFTkNfRU5EX09GX0ZSQU1FOworCX0gZWxzZSBpZiAoZXZlbnQgPT0gVkVOQ19TRUNPTkRfRklFTEQpIHsKKwkJLyogZW5kLW9mLWZyYW1lIGZvciBpbnRlcmxhY2VkIGRpc3BsYXkgKi8KKwkJZXZlbnQgfD0gVkVOQ19FTkRfT0ZfRlJBTUU7CisJfQorCWxhc3RfZXZlbnQgPSBldmVudDsKKworCWZvciAoaSA9IDA7IGkgPCBWUEJFX0RJU1BMQVlfTUFYX0RFVklDRVM7IGkrKykgeworCQlsYXllciA9IGRpc3BfZGV2LT5kZXZbaV07CisJCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkIGluIHRoaXMgbGF5ZXIgKi8KKwkJaWYgKCFsYXllci0+c3RhcnRlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChsYXllci0+bGF5ZXJfZmlyc3RfaW50KSB7CisJCQlsYXllci0+bGF5ZXJfZmlyc3RfaW50ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIENoZWNrIHRoZSBmaWVsZCBmb3JtYXQgKi8KKwkJaWYgKChWNEwyX0ZJRUxEX05PTkUgPT0gbGF5ZXItPnBpeF9mbXQuZmllbGQpICYmCisJCQkoZXZlbnQgJiBWRU5DX0VORF9PRl9GUkFNRSkpIHsKKwkJCS8qIFByb2dyZXNzaXZlIG1vZGUgKi8KKworCQkJdnBiZV9pc3JfZXZlbl9maWVsZChkaXNwX2RldiwgbGF5ZXIpOworCQkJdnBiZV9pc3Jfb2RkX2ZpZWxkKGRpc3BfZGV2LCBsYXllcik7CisJCX0gZWxzZSB7CisJCS8qIEludGVybGFjZWQgbW9kZSAqLworCisJCQlsYXllci0+ZmllbGRfaWQgXj0gMTsKKwkJCWlmIChldmVudCAmIFZFTkNfRklSU1RfRklFTEQpCisJCQkJZmlkID0gMDsKKwkJCWVsc2UKKwkJCQlmaWQgPSAxOworCisJCQkvKgorCQkJKiBJZiBmaWVsZCBpZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHN0b3JlCisJCQkqIGZpZWxkIGlkCisJCQkqLworCQkJaWYgKGZpZCAhPSBsYXllci0+ZmllbGRfaWQpIHsKKwkJCQkvKiBNYWtlIHRoZW0gaW4gc3luYyAqLworCQkJCWxheWVyLT5maWVsZF9pZCA9IGZpZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qCisJCQkqIGRldmljZSBmaWVsZCBpZCBhbmQgbG9jYWwgZmllbGQgaWQgYXJlCisJCQkqIGluIHN5bmMuIElmIHRoaXMgaXMgZXZlbiBmaWVsZAorCQkJKi8KKwkJCWlmICgwID09IGZpZCkKKwkJCQl2cGJlX2lzcl9ldmVuX2ZpZWxkKGRpc3BfZGV2LCBsYXllcik7CisJCQllbHNlICAvKiBvZGQgZmllbGQgKi8KKwkJCQl2cGJlX2lzcl9vZGRfZmllbGQoZGlzcF9kZXYsIGxheWVyKTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHZwYmVfYnVmZmVyX3ByZXBhcmUoKQorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZyb20gdmlkZW9idWZfcWJ1ZigpIGZ1bmN0aW9uCisgKiB0aGUgYnVmZmVyIGlzIHByZXBhcmVkIGFuZCB1c2VyIHNwYWNlIHZpcnR1YWwgYWRkcmVzcyBpcyBjb252ZXJ0ZWQgaW50bworICogcGh5c2ljYWwgYWRkcmVzcworICovCitzdGF0aWMgaW50IHZwYmVfYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkJICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJ2cGJlX2J1ZmZlcl9wcmVwYXJlXG4iKTsKKworCS8qIElmIGJ1ZmZlciBpcyBub3QgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgKi8KKwlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKKwkJdmItPndpZHRoID0gbGF5ZXItPnBpeF9mbXQud2lkdGg7CisJCXZiLT5oZWlnaHQgPSBsYXllci0+cGl4X2ZtdC5oZWlnaHQ7CisJCXZiLT5zaXplID0gbGF5ZXItPnBpeF9mbXQuc2l6ZWltYWdlOworCQl2Yi0+ZmllbGQgPSBmaWVsZDsKKworCQlyZXQgPSB2aWRlb2J1Zl9pb2xvY2socSwgdmIsIE5VTEwpOworCQlpZiAocmV0IDwgMCkgeworCQkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byBtYXAgXAorCQkJCXVzZXIgYWRkcmVzc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKworCQlpZiAocS0+c3RyZWFtaW5nKSB7CisJCQlpZiAoIUlTX0FMSUdORUQoYWRkciwgOCkpIHsKKwkJCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCQkiYnVmZmVyX3ByZXBhcmU6b2Zmc2V0IGlzIFwKKwkJCQkJbm90IGFsaWduZWQgdG8gMzIgYnl0ZXNcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwYmVfYnVmZmVyX3NldHVwKCkKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGJ1ZmZlcnMKKyAqLworc3RhdGljIGludCB2cGJlX2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCQl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJLyogR2V0IHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgYW5kIGxheWVyIG9iamVjdCAqLworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwgInZwYmVfYnVmZmVyX3NldHVwXG4iKTsKKworCSpzaXplID0gbGF5ZXItPnBpeF9mbXQuc2l6ZWltYWdlOworCisJLyogU3RvcmUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIGluIG51bWJ1ZmZlciBtZW1iZXIgKi8KKwlpZiAoKmNvdW50IDwgVlBCRV9ERUZBVUxUX05VTV9CVUZTKQorCQkqY291bnQgPSBsYXllci0+bnVtYnVmZmVycyA9IFZQQkVfREVGQVVMVF9OVU1fQlVGUzsKKworCXJldHVybiAwOworfQorCisvKgorICogdnBiZV9idWZmZXJfcXVldWUoKQorICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBidWZmZXIgdG8gRE1BIHF1ZXVlCisgKi8KK3N0YXRpYyB2b2lkIHZwYmVfYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJLyogR2V0IHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgYW5kIGxheWVyIG9iamVjdCAqLworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcCA9IGZoLT5kaXNwX2RldjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkidnBiZV9idWZmZXJfcXVldWVcbiIpOworCisJLyogYWRkIHRoZSBidWZmZXIgdG8gdGhlIERNQSBxdWV1ZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkaXNwLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJmxheWVyLT5kbWFfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpc3AtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJLyogQ2hhbmdlIHN0YXRlIG9mIHRoZSBidWZmZXIgKi8KKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Cit9CisKKy8qCisgKiB2cGJlX2J1ZmZlcl9yZWxlYXNlKCkKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIHZpZGVvYnVmIGxheWVyIHRvIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCB0bworICogdGhlIGJ1ZmZlcnMKKyAqLworc3RhdGljIHZvaWQgdnBiZV9idWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJLyogR2V0IHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgYW5kIGxheWVyIG9iamVjdCAqLworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJ2cGJlX2J1ZmZlcl9yZWxlYXNlXG4iKTsKKworCWlmIChWNEwyX01FTU9SWV9VU0VSUFRSICE9IGxheWVyLT5tZW1vcnkpCisJCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZShxLCB2Yik7CisKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSB2cGJlX2J1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgPSB2cGJlX2J1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgPSB2cGJlX2J1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSB2cGJlX2J1ZmZlcl9yZWxlYXNlLAorfTsKKworc3RhdGljCitzdHJ1Y3QgdnBiZV9sYXllcioKK192cGJlX2Rpc3BsYXlfZ2V0X290aGVyX3dpbl9sYXllcihzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiwKKwkJCXN0cnVjdCB2cGJlX2xheWVyICpsYXllcikKK3sKKwllbnVtIHZwYmVfZGlzcGxheV9kZXZpY2VfaWQgdGhpc3dpbiwgb3RoZXJ3aW47CisJdGhpc3dpbiA9IGxheWVyLT5kZXZpY2VfaWQ7CisKKwlvdGhlcndpbiA9ICh0aGlzd2luID09IFZQQkVfRElTUExBWV9ERVZJQ0VfMCkgPworCVZQQkVfRElTUExBWV9ERVZJQ0VfMSA6IFZQQkVfRElTUExBWV9ERVZJQ0VfMDsKKwlyZXR1cm4gZGlzcF9kZXYtPmRldltvdGhlcndpbl07Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9zZXRfb3NkX2Rpc3BsYXlfcGFyYW1zKHN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2LAorCQkJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyKQoreworCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpjZmcgID0gJmxheWVyLT5sYXllcl9pbmZvLmNvbmZpZzsKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2RfZGV2aWNlID0gZGlzcF9kZXYtPm9zZF9kZXZpY2U7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGRpc3BfZGV2LT52cGJlX2RldjsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHJldDsKKworCWFkZHIgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKGxheWVyLT5jdXJfZnJtKTsKKwkvKiBTZXQgYWRkcmVzcyBpbiB0aGUgZGlzcGxheSByZWdpc3RlcnMgKi8KKwlvc2RfZGV2aWNlLT5vcHMuc3RhcnRfbGF5ZXIob3NkX2RldmljZSwKKwkJCQkgICAgbGF5ZXItPmxheWVyX2luZm8uaWQsCisJCQkJICAgIGFkZHIsCisJCQkJICAgIGRpc3BfZGV2LT5jYmNyX29mc3QpOworCisJcmV0ID0gb3NkX2RldmljZS0+b3BzLmVuYWJsZV9sYXllcihvc2RfZGV2aWNlLAorCQkJCWxheWVyLT5sYXllcl9pbmZvLmlkLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIkVycm9yIGluIGVuYWJsaW5nIG9zZCB3aW5kb3cgbGF5ZXIgMFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIHdpbmRvdyAqLworCWxheWVyLT5sYXllcl9pbmZvLmVuYWJsZSA9IDE7CisJaWYgKGNmZy0+cGl4Zm10ID09IFBJWEZNVF9OVjEyKSB7CisJCXN0cnVjdCB2cGJlX2xheWVyICpvdGhlcmxheWVyID0KKwkJCV92cGJlX2Rpc3BsYXlfZ2V0X290aGVyX3dpbl9sYXllcihkaXNwX2RldiwgbGF5ZXIpOworCisJCXJldCA9IG9zZF9kZXZpY2UtPm9wcy5lbmFibGVfbGF5ZXIob3NkX2RldmljZSwKKwkJCQlvdGhlcmxheWVyLT5sYXllcl9pbmZvLmlkLCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkJIkVycm9yIGluIGVuYWJsaW5nIG9zZCB3aW5kb3cgbGF5ZXIgMVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJb3RoZXJsYXllci0+bGF5ZXJfaW5mby5lbmFibGUgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZwYmVfZGlzcF9jYWxjdWxhdGVfc2NhbGVfZmFjdG9yKHN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2LAorCQkJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyLAorCQkJaW50IGV4cGVjdGVkX3hzaXplLCBpbnQgZXhwZWN0ZWRfeXNpemUpCit7CisJc3RydWN0IGRpc3BsYXlfbGF5ZXJfaW5mbyAqbGF5ZXJfaW5mbyA9ICZsYXllci0+bGF5ZXJfaW5mbzsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmbGF5ZXItPnBpeF9mbXQ7CisJc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmNmZyAgPSAmbGF5ZXItPmxheWVyX2luZm8uY29uZmlnOworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisJaW50IGNhbGN1bGF0ZWRfeHNpemU7CisJaW50IGhfZXhwID0gMDsKKwlpbnQgdl9leHAgPSAwOworCWludCBoX3NjYWxlOworCWludCB2X3NjYWxlOworCisJdjRsMl9zdGRfaWQgc3RhbmRhcmRfaWQgPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnRpbWluZ3Muc3RkX2lkOworCisJLyoKKwkgKiBBcHBsaWNhdGlvbiBpbml0aWFsbHkgc2V0IHRoZSBpbWFnZSBmb3JtYXQuIEN1cnJlbnQgZGlzcGxheQorCSAqIHNpemUgaXMgb2J0YWluZWQgZnJvbSB0aGUgdnBiZSBkaXNwbGF5IGNvbnRyb2xsZXIuIGV4cGVjdGVkX3hzaXplCisJICogYW5kIGV4cGVjdGVkX3lzaXplIGFyZSBzZXQgdGhyb3VnaCBTX0NST1AgaW9jdGwuIEJhc2VkIG9uIHRoaXMsCisJICogZHJpdmVyIHdpbGwgY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3JzIGZvciB2ZXJ0aWNhbCBhbmQKKwkgKiBob3Jpem9udGFsIGRpcmVjdGlvbiBzbyB0aGF0IHRoZSBpbWFnZSBpcyBkaXNwbGF5ZWQgc2NhbGVkCisJICogYW5kIGV4cGFuZGVkLiBBcHBsaWNhdGlvbiB1c2VzIGV4cGFuc2lvbiB0byBkaXNwbGF5IHRoZSBpbWFnZQorCSAqIGluIGEgc3F1YXJlIHBpeGVsLiBPdGhlcndpc2UgaXQgaXMgZGlzcGxheWVkIHVzaW5nIGRpc3BsYXlzCisJICogcGl4ZWwgYXNwZWN0IHJhdGlvLkl0IGlzIGV4cGVjdGVkIHRoYXQgYXBwbGljYXRpb24gY2hvb3NlcworCSAqIHRoZSBjcm9wIGNvb3JkaW5hdGVzIGZvciBjcm9wcGVkIG9yIHNjYWxlZCBkaXNwbGF5LiBpZiBjcm9wCisJICogc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGltYWdlIHNpemUsIGl0IGlzIGRpc3BsYXllZCBjcm9wcGVkIG9yCisJICogaXQgaXMgZGlzcGxheWVkIHNjYWxlZCBhbmQvb3IgZXhwYW5kZWQuCisJICoKKwkgKiB0byBiZWdpbiB3aXRoLCBzZXQgdGhlIGNyb3Agd2luZG93IHNhbWUgYXMgZXhwZWN0ZWQuIExhdGVyIHdlCisJICogd2lsbCBvdmVycmlkZSB3aXRoIHNjYWxlZCB3aW5kb3cgc2l6ZQorCSAqLworCisJY2ZnLT54c2l6ZSA9IHBpeGZtdC0+d2lkdGg7CisJY2ZnLT55c2l6ZSA9IHBpeGZtdC0+aGVpZ2h0OworCWxheWVyX2luZm8tPmhfem9vbSA9IFpPT01fWDE7CS8qIG5vIGhvcml6b250YWwgem9vbSAqLworCWxheWVyX2luZm8tPnZfem9vbSA9IFpPT01fWDE7CS8qIG5vIGhvcml6b250YWwgem9vbSAqLworCWxheWVyX2luZm8tPmhfZXhwID0gSF9FWFBfT0ZGOwkvKiBubyBob3Jpem9udGFsIHpvb20gKi8KKwlsYXllcl9pbmZvLT52X2V4cCA9IFZfRVhQX09GRjsJLyogbm8gaG9yaXpvbnRhbCB6b29tICovCisKKwlpZiAocGl4Zm10LT53aWR0aCA8IGV4cGVjdGVkX3hzaXplKSB7CisJCWhfc2NhbGUgPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnhyZXMgLyBwaXhmbXQtPndpZHRoOworCQlpZiAoaF9zY2FsZSA8IDIpCisJCQloX3NjYWxlID0gMTsKKwkJZWxzZSBpZiAoaF9zY2FsZSA+PSA0KQorCQkJaF9zY2FsZSA9IDQ7CisJCWVsc2UKKwkJCWhfc2NhbGUgPSAyOworCQljZmctPnhzaXplICo9IGhfc2NhbGU7CisJCWlmIChjZmctPnhzaXplIDwgZXhwZWN0ZWRfeHNpemUpIHsKKwkJCWlmICgoc3RhbmRhcmRfaWQgJiBWNEwyX1NURF81MjVfNjApIHx8CisJCQkoc3RhbmRhcmRfaWQgJiBWNEwyX1NURF82MjVfNTApKSB7CisJCQkJY2FsY3VsYXRlZF94c2l6ZSA9IChjZmctPnhzaXplICoKKwkJCQkJVlBCRV9ESVNQTEFZX0hfRVhQX1JBVElPX04pIC8KKwkJCQkJVlBCRV9ESVNQTEFZX0hfRVhQX1JBVElPX0Q7CisJCQkJaWYgKGNhbGN1bGF0ZWRfeHNpemUgPD0gZXhwZWN0ZWRfeHNpemUpIHsKKwkJCQkJaF9leHAgPSAxOworCQkJCQljZmctPnhzaXplID0gY2FsY3VsYXRlZF94c2l6ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGhfc2NhbGUgPT0gMikKKwkJCWxheWVyX2luZm8tPmhfem9vbSA9IFpPT01fWDI7CisJCWVsc2UgaWYgKGhfc2NhbGUgPT0gNCkKKwkJCWxheWVyX2luZm8tPmhfem9vbSA9IFpPT01fWDQ7CisJCWlmIChoX2V4cCkKKwkJCWxheWVyX2luZm8tPmhfZXhwID0gSF9FWFBfOV9PVkVSXzg7CisJfSBlbHNlIHsKKwkJLyogbm8gc2NhbGluZywgb25seSBjcm9wcGluZy4gU2V0IGRpc3BsYXkgYXJlYSB0byBjcm9wIGFyZWEgKi8KKwkJY2ZnLT54c2l6ZSA9IGV4cGVjdGVkX3hzaXplOworCX0KKworCWlmIChwaXhmbXQtPmhlaWdodCA8IGV4cGVjdGVkX3lzaXplKSB7CisJCXZfc2NhbGUgPSBleHBlY3RlZF95c2l6ZSAvIHBpeGZtdC0+aGVpZ2h0OworCQlpZiAodl9zY2FsZSA8IDIpCisJCQl2X3NjYWxlID0gMTsKKwkJZWxzZSBpZiAodl9zY2FsZSA+PSA0KQorCQkJdl9zY2FsZSA9IDQ7CisJCWVsc2UKKwkJCXZfc2NhbGUgPSAyOworCQljZmctPnlzaXplICo9IHZfc2NhbGU7CisJCWlmIChjZmctPnlzaXplIDwgZXhwZWN0ZWRfeXNpemUpIHsKKwkJCWlmICgoc3RhbmRhcmRfaWQgJiBWNEwyX1NURF82MjVfNTApKSB7CisJCQkJY2FsY3VsYXRlZF94c2l6ZSA9IChjZmctPnlzaXplICoKKwkJCQkJVlBCRV9ESVNQTEFZX1ZfRVhQX1JBVElPX04pIC8KKwkJCQkJVlBCRV9ESVNQTEFZX1ZfRVhQX1JBVElPX0Q7CisJCQkJaWYgKGNhbGN1bGF0ZWRfeHNpemUgPD0gZXhwZWN0ZWRfeXNpemUpIHsKKwkJCQkJdl9leHAgPSAxOworCQkJCQljZmctPnlzaXplID0gY2FsY3VsYXRlZF94c2l6ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHZfc2NhbGUgPT0gMikKKwkJCWxheWVyX2luZm8tPnZfem9vbSA9IFpPT01fWDI7CisJCWVsc2UgaWYgKHZfc2NhbGUgPT0gNCkKKwkJCWxheWVyX2luZm8tPnZfem9vbSA9IFpPT01fWDQ7CisJCWlmICh2X2V4cCkKKwkJCWxheWVyX2luZm8tPmhfZXhwID0gVl9FWFBfNl9PVkVSXzU7CisJfSBlbHNlIHsKKwkJLyogbm8gc2NhbGluZywgb25seSBjcm9wcGluZy4gU2V0IGRpc3BsYXkgYXJlYSB0byBjcm9wIGFyZWEgKi8KKwkJY2ZnLT55c2l6ZSA9IGV4cGVjdGVkX3lzaXplOworCX0KKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJImNyb3AgZGlzcGxheSB4c2l6ZSA9ICVkLCB5c2l6ZSA9ICVkXG4iLAorCQljZmctPnhzaXplLCBjZmctPnlzaXplKTsKK30KKworc3RhdGljIHZvaWQgdnBiZV9kaXNwX2Fkal9wb3NpdGlvbihzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiwKKwkJCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciwKKwkJCWludCB0b3AsIGludCBsZWZ0KQoreworCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpjZmcgPSAmbGF5ZXItPmxheWVyX2luZm8uY29uZmlnOworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisKKwljZmctPnhwb3MgPSBtaW4oKHVuc2lnbmVkIGludClsZWZ0LAorCQkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy54cmVzIC0gY2ZnLT54c2l6ZSk7CisJY2ZnLT55cG9zID0gbWluKCh1bnNpZ25lZCBpbnQpdG9wLAorCQkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy55cmVzIC0gY2ZnLT55c2l6ZSk7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJIm5ldyB4cG9zID0gJWQsIHlwb3MgPSAlZFxuIiwKKwkJY2ZnLT54cG9zLCBjZmctPnlwb3MpOworfQorCitzdGF0aWMgdm9pZCB2cGJlX2Rpc3BfY2hlY2tfd2luZG93X3BhcmFtcyhzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiwKKwkJCXN0cnVjdCB2NGwyX3JlY3QgKmMpCit7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGRpc3BfZGV2LT52cGJlX2RldjsKKworCWlmICgoYy0+d2lkdGggPT0gMCkgfHwKKwkgICgoYy0+d2lkdGggKyBjLT5sZWZ0KSA+IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MueHJlcykpCisJCWMtPndpZHRoID0gdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy54cmVzIC0gYy0+bGVmdDsKKworCWlmICgoYy0+aGVpZ2h0ID09IDApIHx8ICgoYy0+aGVpZ2h0ICsgYy0+dG9wKSA+CisJICB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnlyZXMpKQorCQljLT5oZWlnaHQgPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnlyZXMgLSBjLT50b3A7CisKKwkvKiB3aW5kb3cgaGVpZ2h0IG11c3QgYmUgZXZlbiBmb3IgaW50ZXJsYWNlZCBkaXNwbGF5ICovCisJaWYgKHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MuaW50ZXJsYWNlZCkKKwkJYy0+aGVpZ2h0ICY9ICh+MHgwMSk7CisKK30KKworLyoqCisgKiB2cGJlX3RyeV9mb3JtYXQoKQorICogSWYgdXNlciBhcHBsaWNhdGlvbiBwcm92aWRlcyB3aWR0aCBhbmQgaGVpZ2h0LCBhbmQgaGF2ZSBieXRlc3BlcmxpbmUgc2V0CisgKiB0byB6ZXJvLCBkcml2ZXIgY2FsY3VsYXRlcyBieXRlc3BlcmxpbmUgYW5kIHNpemVpbWFnZSBiYXNlZCBvbiBoYXJkd2FyZQorICogbGltaXRzLgorICovCitzdGF0aWMgaW50IHZwYmVfdHJ5X2Zvcm1hdChzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiwKKwkJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCwgaW50IGNoZWNrKQoreworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisJaW50IG1pbl9oZWlnaHQgPSAxOworCWludCBtaW5fd2lkdGggPSAzMjsKKwlpbnQgbWF4X2hlaWdodDsKKwlpbnQgbWF4X3dpZHRoOworCWludCBicHA7CisKKwlpZiAoKHBpeGZtdC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1VZVlkpICYmCisJICAgIChwaXhmbXQtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9OVjEyKSkKKwkJLyogY2hvb3NlIGRlZmF1bHQgYXMgVjRMMl9QSVhfRk1UX1VZVlkgKi8KKwkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCisJLyogQ2hlY2sgdGhlIGZpZWxkIGZvcm1hdCAqLworCWlmICgocGl4Zm10LT5maWVsZCAhPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpICYmCisJCShwaXhmbXQtPmZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkpIHsKKwkJaWYgKHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MuaW50ZXJsYWNlZCkKKwkJCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCWVsc2UKKwkJCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJfQorCisJaWYgKHBpeGZtdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKQorCQltaW5faGVpZ2h0ID0gMjsKKworCWlmIChwaXhmbXQtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjEyKQorCQlicHAgPSAxOworCWVsc2UKKwkJYnBwID0gMjsKKworCW1heF93aWR0aCA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MueHJlczsKKwltYXhfaGVpZ2h0ID0gdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy55cmVzOworCisJbWluX3dpZHRoIC89IGJwcDsKKworCWlmICghcGl4Zm10LT53aWR0aCB8fCAocGl4Zm10LT53aWR0aCA8IG1pbl93aWR0aCkgfHwKKwkJKHBpeGZtdC0+d2lkdGggPiBtYXhfd2lkdGgpKSB7CisJCXBpeGZtdC0+d2lkdGggPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnhyZXM7CisJfQorCisJaWYgKCFwaXhmbXQtPmhlaWdodCB8fCAocGl4Zm10LT5oZWlnaHQgIDwgbWluX2hlaWdodCkgfHwKKwkJKHBpeGZtdC0+aGVpZ2h0ICA+IG1heF9oZWlnaHQpKSB7CisJCXBpeGZtdC0+aGVpZ2h0ID0gdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy55cmVzOworCX0KKworCWlmIChwaXhmbXQtPmJ5dGVzcGVybGluZSA8IChwaXhmbXQtPndpZHRoICogYnBwKSkKKwkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSBwaXhmbXQtPndpZHRoICogYnBwOworCisJLyogTWFrZSB0aGUgYnl0ZXNwZXJsaW5lIDMyIGJ5dGUgYWxpZ25lZCAqLworCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gKChwaXhmbXQtPndpZHRoICogYnBwICsgMzEpICYgfjMxKTsKKworCWlmIChwaXhmbXQtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjEyKQorCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+Ynl0ZXNwZXJsaW5lICogcGl4Zm10LT5oZWlnaHQgKworCQkJCShwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0ID4+IDEpOworCWVsc2UKKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X2dfcHJpb3JpdHkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJZW51bSB2NGwyX3ByaW9yaXR5ICpwKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisKKwkqcCA9IHY0bDJfcHJpb19tYXgoJmxheWVyLT5wcmlvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9zX3ByaW9yaXR5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9wcmlvcml0eSBwKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJaW50IHJldDsKKworCXJldCA9IHY0bDJfcHJpb19jaGFuZ2UoJmxheWVyLT5wcmlvLCAmZmgtPnByaW8sIHApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwljYXAtPnZlcnNpb24gPSBWUEJFX0RJU1BMQVlfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCXN0cmxjcHkoY2FwLT5kcml2ZXIsIFZQQkVfRElTUExBWV9EUklWRVIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgInBsYXRmb3JtIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgdnBiZV9kZXYtPmNmZy0+bW9kdWxlX25hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiA9IGZoLT5kaXNwX2RldjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZGlzcF9kZXYtPnZwYmVfZGV2OworCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpjZmcgPSAmbGF5ZXItPmxheWVyX2luZm8uY29uZmlnOworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSBkaXNwX2Rldi0+b3NkX2RldmljZTsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmNyb3AtPmM7CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkiVklESU9DX1NfQ1JPUCwgbGF5ZXIgaWQgPSAlZFxuIiwgbGF5ZXItPmRldmljZV9pZCk7CisKKwlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWYgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZWN0LT50b3AgPCAwKQorCQlyZWN0LT50b3AgPSAwOworCWlmIChyZWN0LT5sZWZ0IDwgMCkKKwkJcmVjdC0+bGVmdCA9IDA7CisKKwl2cGJlX2Rpc3BfY2hlY2tfd2luZG93X3BhcmFtcyhkaXNwX2RldiwgcmVjdCk7CisKKwlvc2RfZGV2aWNlLT5vcHMuZ2V0X2xheWVyX2NvbmZpZyhvc2RfZGV2aWNlLAorCQkJbGF5ZXItPmxheWVyX2luZm8uaWQsIGNmZyk7CisKKwl2cGJlX2Rpc3BfY2FsY3VsYXRlX3NjYWxlX2ZhY3RvcihkaXNwX2RldiwgbGF5ZXIsCisJCQkJCXJlY3QtPndpZHRoLAorCQkJCQlyZWN0LT5oZWlnaHQpOworCXZwYmVfZGlzcF9hZGpfcG9zaXRpb24oZGlzcF9kZXYsIGxheWVyLCByZWN0LT50b3AsCisJCQkJCXJlY3QtPmxlZnQpOworCXJldCA9IG9zZF9kZXZpY2UtPm9wcy5zZXRfbGF5ZXJfY29uZmlnKG9zZF9kZXZpY2UsCisJCQkJbGF5ZXItPmxheWVyX2luZm8uaWQsIGNmZyk7CisJaWYgKHJldCA8IDApIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJFcnJvciBpbiBzZXQgbGF5ZXIgY29uZmlnOlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFwcGx5IHpvb21pbmcgYW5kIGggb3IgdiBleHBhbnNpb24gKi8KKwlvc2RfZGV2aWNlLT5vcHMuc2V0X3pvb20ob3NkX2RldmljZSwKKwkJCWxheWVyLT5sYXllcl9pbmZvLmlkLAorCQkJbGF5ZXItPmxheWVyX2luZm8uaF96b29tLAorCQkJbGF5ZXItPmxheWVyX2luZm8udl96b29tKTsKKwlyZXQgPSBvc2RfZGV2aWNlLT5vcHMuc2V0X3ZpZF9leHBhbnNpb24ob3NkX2RldmljZSwKKwkJCWxheWVyLT5sYXllcl9pbmZvLmhfZXhwLAorCQkJbGF5ZXItPmxheWVyX2luZm8udl9leHApOworCWlmIChyZXQgPCAwKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCSJFcnJvciBpbiBzZXQgdmlkIGV4cGFuc2lvbjpcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKGxheWVyLT5sYXllcl9pbmZvLmhfem9vbSAhPSBaT09NX1gxKSB8fAorCQkobGF5ZXItPmxheWVyX2luZm8udl96b29tICE9IFpPT01fWDEpIHx8CisJCShsYXllci0+bGF5ZXJfaW5mby5oX2V4cCAhPSBIX0VYUF9PRkYpIHx8CisJCShsYXllci0+bGF5ZXJfaW5mby52X2V4cCAhPSBWX0VYUF9PRkYpKQorCQkvKiBFbmFibGUgZXhwYW5zaW9uIGZpbHRlciAqLworCQlvc2RfZGV2aWNlLT5vcHMuc2V0X2ludGVycG9sYXRpb25fZmlsdGVyKG9zZF9kZXZpY2UsIDEpOworCWVsc2UKKwkJb3NkX2RldmljZS0+b3BzLnNldF9pbnRlcnBvbGF0aW9uX2ZpbHRlcihvc2RfZGV2aWNlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyAqY2ZnID0gJmxheWVyLT5sYXllcl9pbmZvLmNvbmZpZzsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2RfZGV2aWNlID0gZmgtPmRpc3BfZGV2LT5vc2RfZGV2aWNlOworCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmY3JvcC0+YzsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkiVklESU9DX0dfQ1JPUCwgbGF5ZXIgaWQgPSAlZFxuIiwKKwkJCWxheWVyLT5kZXZpY2VfaWQpOworCisJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlvc2RfZGV2aWNlLT5vcHMuZ2V0X2xheWVyX2NvbmZpZyhvc2RfZGV2aWNlLAorCQkJCWxheWVyLT5sYXllcl9pbmZvLmlkLCBjZmcpOworCXJlY3QtPnRvcCA9IGNmZy0+eXBvczsKKwlyZWN0LT5sZWZ0ID0gY2ZnLT54cG9zOworCXJlY3QtPndpZHRoID0gY2ZnLT54c2l6ZTsKKwlyZWN0LT5oZWlnaHQgPSBjZmctPnlzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LCAiVklESU9DX0NST1BDQVAgaW9jdGxcbiIpOworCisJY3JvcGNhcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwljcm9wY2FwLT5ib3VuZHMud2lkdGggPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnhyZXM7CisJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MueXJlczsKKwljcm9wY2FwLT5waXhlbGFzcGVjdCA9IHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MuYXNwZWN0OworCWNyb3BjYXAtPmRlZnJlY3QgPSBjcm9wY2FwLT5ib3VuZHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X2dfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJWSURJT0NfR19GTVQsIGxheWVyIGlkID0gJWRcbiIsCisJCQlsYXllci0+ZGV2aWNlX2lkKTsKKworCS8qIElmIGJ1ZmZlciB0eXBlIGlzIHZpZGVvIG91dHB1dCAqLworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAhPSBmbXQtPnR5cGUpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgImludmFsaWQgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBGaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBmb3JtYXQgKi8KKwlmbXQtPmZtdC5waXggPSBsYXllci0+cGl4X2ZtdDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9lbnVtX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJWSURJT0NfRU5VTV9GTVQsIGxheWVyIGlkID0gJWRcbiIsCisJCQkJbGF5ZXItPmRldmljZV9pZCk7CisJaWYgKGZtdC0+aW5kZXggPiAxKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGZvcm1hdCBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpbGwgaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IGZvcm1hdCAqLworCWluZGV4ID0gZm10LT5pbmRleDsKKwltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOworCWZtdC0+aW5kZXggPSBpbmRleDsKKwlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwlpZiAoaW5kZXggPT0gMCkgeworCQlzdHJjcHkoZm10LT5kZXNjcmlwdGlvbiwgIllVViA0OjI6MiAtIFVZVlkiKTsKKwkJZm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0gZWxzZSB7CisJCXN0cmNweShmbXQtPmRlc2NyaXB0aW9uLCAiWS9DYkNyIDQ6MjowIik7CisJCWZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTlYxMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiA9IGZoLT5kaXNwX2RldjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZGlzcF9kZXYtPnZwYmVfZGV2OworCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpjZmcgID0gJmxheWVyLT5sYXllcl9pbmZvLmNvbmZpZzsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZm10LT5mbXQucGl4OworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSBkaXNwX2Rldi0+b3NkX2RldmljZTsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkiVklESU9DX1NfRk1ULCBsYXllciBpZCA9ICVkXG4iLAorCQkJbGF5ZXItPmRldmljZV9pZCk7CisKKwkvKiBJZiBzdHJlYW1pbmcgaXMgc3RhcnRlZCwgcmV0dXJuIGVycm9yICovCisJaWYgKGxheWVyLT5zdGFydGVkKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsICJTdHJlYW1pbmcgaXMgc3RhcnRlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAhPSBmbXQtPnR5cGUpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJpbnZhbGlkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogQ2hlY2sgZm9yIHZhbGlkIHBpeGVsIGZvcm1hdCAqLworCXJldCA9IHZwYmVfdHJ5X2Zvcm1hdChkaXNwX2RldiwgcGl4Zm10LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogWVVWNDIwIGlzIHJlcXVlc3RlZCwgY2hlY2sgYXZhaWxhYmlsaXR5IG9mIHRoZQorCW90aGVyIHZpZGVvIHdpbmRvdyAqLworCisJbGF5ZXItPnBpeF9mbXQgPSAqcGl4Zm10OworCisJLyogR2V0IG9zZCBsYXllciBjb25maWcgKi8KKwlvc2RfZGV2aWNlLT5vcHMuZ2V0X2xheWVyX2NvbmZpZyhvc2RfZGV2aWNlLAorCQkJbGF5ZXItPmxheWVyX2luZm8uaWQsIGNmZyk7CisJLyogU3RvcmUgdGhlIHBpeGVsIGZvcm1hdCBpbiB0aGUgbGF5ZXIgb2JqZWN0ICovCisJY2ZnLT54c2l6ZSA9IHBpeGZtdC0+d2lkdGg7CisJY2ZnLT55c2l6ZSA9IHBpeGZtdC0+aGVpZ2h0OworCWNmZy0+bGluZV9sZW5ndGggPSBwaXhmbXQtPmJ5dGVzcGVybGluZTsKKwljZmctPnlwb3MgPSAwOworCWNmZy0+eHBvcyA9IDA7CisJY2ZnLT5pbnRlcmxhY2VkID0gdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy5pbnRlcmxhY2VkOworCisJaWYgKFY0TDJfUElYX0ZNVF9VWVZZID09IHBpeGZtdC0+cGl4ZWxmb3JtYXQpCisJCWNmZy0+cGl4Zm10ID0gUElYRk1UX1lDYkNySTsKKworCS8qIENoYW5nZSBvZiB0aGUgZGVmYXVsdCBwaXhlbCBmb3JtYXQgZm9yIGJvdGggdmlkZW8gd2luZG93cyAqLworCWlmIChWNEwyX1BJWF9GTVRfTlYxMiA9PSBwaXhmbXQtPnBpeGVsZm9ybWF0KSB7CisJCXN0cnVjdCB2cGJlX2xheWVyICpvdGhlcmxheWVyOworCQljZmctPnBpeGZtdCA9IFBJWEZNVF9OVjEyOworCQlvdGhlcmxheWVyID0gX3ZwYmVfZGlzcGxheV9nZXRfb3RoZXJfd2luX2xheWVyKGRpc3BfZGV2LAorCQkJCQkJCQlsYXllcik7CisJCW90aGVybGF5ZXItPmxheWVyX2luZm8uY29uZmlnLnBpeGZtdCA9IFBJWEZNVF9OVjEyOworCX0KKworCS8qIFNldCB0aGUgbGF5ZXIgY29uZmlnIGluIHRoZSBvc2Qgd2luZG93ICovCisJcmV0ID0gb3NkX2RldmljZS0+b3BzLnNldF9sYXllcl9jb25maWcob3NkX2RldmljZSwKKwkJCQlsYXllci0+bGF5ZXJfaW5mby5pZCwgY2ZnKTsKKwlpZiAocmV0IDwgMCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJFcnJvciBpbiBTX0ZNVCBwYXJhbXM6XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZGJhY2sgYW5kIGZpbGwgdGhlIGxvY2FsIGNvcHkgb2YgY3VycmVudCBwaXggZm9ybWF0ICovCisJb3NkX2RldmljZS0+b3BzLmdldF9sYXllcl9jb25maWcob3NkX2RldmljZSwKKwkJCWxheWVyLT5sYXllcl9pbmZvLmlkLCBjZmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3RyeV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcF9kZXYgPSBmaC0+ZGlzcF9kZXY7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0gJmZtdC0+Zm10LnBpeDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LCAiVklESU9DX1RSWV9GTVRcbiIpOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICE9IGZtdC0+dHlwZSkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiaW52YWxpZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgZm9yIHZhbGlkIGZpZWxkIGZvcm1hdCAqLworCXJldHVybiAgdnBiZV90cnlfZm9ybWF0KGRpc3BfZGV2LCBwaXhmbXQsIDApOworCit9CisKKy8qKgorICogdnBiZV9kaXNwbGF5X3Nfc3RkIC0gU2V0IHRoZSBnaXZlbiBzdGFuZGFyZCBpbiB0aGUgZW5jb2RlcgorICoKKyAqIFNldHMgdGhlIHN0YW5kYXJkIGlmIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4KKyAqIDAgLSBzdWNjZXNzICYgLUVJTlZBTCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQl2NGwyX3N0ZF9pZCAqc3RkX2lkKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyID0gZmgtPmxheWVyOworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBmaC0+ZGlzcF9kZXYtPnZwYmVfZGV2OworCWludCByZXQ7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwgIlZJRElPQ19TX1NURFxuIik7CisKKwkvKiBJZiBzdHJlYW1pbmcgaXMgc3RhcnRlZCwgcmV0dXJuIGVycm9yICovCisJaWYgKGxheWVyLT5zdGFydGVkKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsICJTdHJlYW1pbmcgaXMgc3RhcnRlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChOVUxMICE9IHZwYmVfZGV2LT5vcHMuc19zdGQpIHsKKwkJcmV0ID0gdnBiZV9kZXYtPm9wcy5zX3N0ZCh2cGJlX2Rldiwgc3RkX2lkKTsKKwkJaWYgKHJldCkgeworCQkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJGYWlsZWQgdG8gc2V0IHN0YW5kYXJkIGZvciBzdWIgZGV2aWNlc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwYmVfZGlzcGxheV9nX3N0ZCAtIEdldCB0aGUgc3RhbmRhcmQgaW4gdGhlIGN1cnJlbnQgZW5jb2RlcgorICoKKyAqIEdldCB0aGUgc3RhbmRhcmQgaW4gdGhlIGN1cnJlbnQgZW5jb2Rlci4gUmV0dXJuIHRoZSBzdGF0dXMuIDAgLSBzdWNjZXNzCisgKiAtRUlOVkFMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXY0bDJfc3RkX2lkICpzdGRfaWQpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAkiVklESU9DX0dfU1REXG4iKTsKKworCS8qIEdldCB0aGUgc3RhbmRhcmQgZnJvbSB0aGUgY3VycmVudCBlbmNvZGVyICovCisJaWYgKHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudGltaW5nc190eXBlICYgVlBCRV9FTkNfU1REKSB7CisJCSpzdGRfaWQgPSB2cGJlX2Rldi0+Y3VycmVudF90aW1pbmdzLnRpbWluZ3Muc3RkX2lkOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB2cGJlX2Rpc3BsYXlfZW51bV9vdXRwdXQgLSBlbnVtZXJhdGUgb3V0cHV0cworICoKKyAqIEVudW1lcmF0ZXMgdGhlIG91dHB1dHMgYXZhaWxhYmxlIGF0IHRoZSB2cGJlIGRpc3BsYXkKKyAqIHJldHVybnMgdGhlIHN0YXR1cywgLUVJTlZBTCBpZiBlbmQgb2Ygb3V0cHV0IGxpc3QKKyAqLworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfZW51bV9vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgIHN0cnVjdCB2NGwyX291dHB1dCAqb3V0cHV0KQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAkiVklESU9DX0VOVU1fT1VUUFVUXG4iKTsKKworCS8qIEVudW1lcmF0ZSBvdXRwdXRzICovCisKKwlpZiAoTlVMTCA9PSB2cGJlX2Rldi0+b3BzLmVudW1fb3V0cHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB2cGJlX2Rldi0+b3BzLmVudW1fb3V0cHV0cyh2cGJlX2Rldiwgb3V0cHV0KTsKKwlpZiAocmV0KSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIkZhaWxlZCB0byBlbnVtZXJhdGUgb3V0cHV0c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwYmVfZGlzcGxheV9zX291dHB1dCAtIFNldCBvdXRwdXQgdG8KKyAqIHRoZSBvdXRwdXQgc3BlY2lmaWVkIGJ5IHRoZSBpbmRleAorICovCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9zX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQl1bnNpZ25lZCBpbnQgaSkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCSJWSURJT0NfU19PVVRQVVRcbiIpOworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAobGF5ZXItPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIlN0cmVhbWluZyBpcyBzdGFydGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKE5VTEwgPT0gdnBiZV9kZXYtPm9wcy5zZXRfb3V0cHV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHZwYmVfZGV2LT5vcHMuc2V0X291dHB1dCh2cGJlX2RldiwgaSk7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIkZhaWxlZCB0byBzZXQgb3V0cHV0IGZvciBzdWIgZGV2aWNlc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZwYmVfZGlzcGxheV9nX291dHB1dCAtIEdldCBvdXRwdXQgZnJvbSBzdWJkZXZpY2UKKyAqIGZvciBhIGdpdmVuIGJ5IHRoZSBpbmRleAorICovCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9nX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQl1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LCAiVklESU9DX0dfT1VUUFVUXG4iKTsKKwkvKiBHZXQgdGhlIHN0YW5kYXJkIGZyb20gdGhlIGN1cnJlbnQgZW5jb2RlciAqLworCSppID0gdnBiZV9kZXYtPmN1cnJlbnRfb3V0X2luZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBiZV9kaXNwbGF5X2VudW1fZHZfcHJlc2V0cyAtIEVudW1lcmF0ZSB0aGUgZHYgcHJlc2V0cworICoKKyAqIGVudW0gdGhlIHByZXNldCBpbiB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4gMCAtIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgb24gZXJyb3IKKyAqLworc3RhdGljIGludAordnBiZV9kaXNwbGF5X2VudW1fZHZfcHJlc2V0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJWSURJT0NfRU5VTV9EVl9QUkVTRVRTXG4iKTsKKworCS8qIEVudW1lcmF0ZSBvdXRwdXRzICovCisJaWYgKE5VTEwgPT0gdnBiZV9kZXYtPm9wcy5lbnVtX2R2X3ByZXNldHMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdnBiZV9kZXYtPm9wcy5lbnVtX2R2X3ByZXNldHModnBiZV9kZXYsIHByZXNldCk7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIkZhaWxlZCB0byBlbnVtZXJhdGUgZHYgcHJlc2V0cyBpbmZvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnBiZV9kaXNwbGF5X3NfZHZfcHJlc2V0IC0gU2V0IHRoZSBkdiBwcmVzZXRzCisgKgorICogU2V0IHRoZSBwcmVzZXQgaW4gdGhlIGN1cnJlbnQgZW5jb2Rlci4gUmV0dXJuIHRoZSBzdGF0dXMuIDAgLSBzdWNjZXNzCisgKiAtRUlOVkFMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK3ZwYmVfZGlzcGxheV9zX2R2X3ByZXNldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJWSURJT0NfU19EVl9QUkVTRVRTXG4iKTsKKworCisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmIChsYXllci0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiU3RyZWFtaW5nIGlzIHN0YXJ0ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFNldCB0aGUgZ2l2ZW4gc3RhbmRhcmQgaW4gdGhlIGVuY29kZXIgKi8KKwlpZiAoTlVMTCAhPSB2cGJlX2Rldi0+b3BzLnNfZHZfcHJlc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHZwYmVfZGV2LT5vcHMuc19kdl9wcmVzZXQodnBiZV9kZXYsIHByZXNldCk7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIkZhaWxlZCB0byBzZXQgdGhlIGR2IHByZXNldHMgaW5mb1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBzZXQgdGhlIGN1cnJlbnQgbm9ybSB0byB6ZXJvIHRvIGJlIGNvbnNpc3RlbnQuIElmIFNURCBpcyB1c2VkCisJICogdjRsMiBsYXllciB3aWxsIHNldCB0aGUgbm9ybSBwcm9wZXJseSBvbiBzdWNjZXNzZnVsIHNfc3RkIGNhbGwKKwkgKi8KKwlsYXllci0+dmlkZW9fZGV2LmN1cnJlbnRfbm9ybSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2cGJlX2Rpc3BsYXlfZ19kdl9wcmVzZXQgLSBTZXQgdGhlIGR2IHByZXNldHMKKyAqCisgKiBHZXQgdGhlIHByZXNldCBpbiB0aGUgY3VycmVudCBlbmNvZGVyLiBSZXR1cm4gdGhlIHN0YXR1cy4gMCAtIHN1Y2Nlc3MKKyAqIC1FSU5WQUwgb24gZXJyb3IKKyAqLworc3RhdGljIGludAordnBiZV9kaXNwbGF5X2dfZHZfcHJlc2V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqZHZfcHJlc2V0KQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwgIlZJRElPQ19HX0RWX1BSRVNFVFNcbiIpOworCisJLyogR2V0IHRoZSBnaXZlbiBzdGFuZGFyZCBpbiB0aGUgZW5jb2RlciAqLworCisJaWYgKHZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudGltaW5nc190eXBlICYKKwkJCQlWUEJFX0VOQ19EVl9QUkVTRVQpIHsKKwkJZHZfcHJlc2V0LT5wcmVzZXQgPQorCQkJdnBiZV9kZXYtPmN1cnJlbnRfdGltaW5ncy50aW1pbmdzLmR2X3ByZXNldDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSBidWZfdHlwZSkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyID0gZmgtPmxheWVyOworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBmaC0+ZGlzcF9kZXYtPnZwYmVfZGV2OworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSBmaC0+ZGlzcF9kZXYtPm9zZF9kZXZpY2U7CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJIlZJRElPQ19TVFJFQU1PRkYsbGF5ZXIgaWQgPSAlZFxuIiwKKwkJCWxheWVyLT5kZXZpY2VfaWQpOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICE9IGJ1Zl90eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZmZlciB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgaW8gaXMgYWxsb3dlZCBmb3IgdGhpcyBmaWxlIGhhbmRsZSwgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiTm8gaW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8qIElmIHN0cmVhbWluZyBpcyBub3Qgc3RhcnRlZCwgcmV0dXJuIGVycm9yICovCisJaWYgKCFsYXllci0+c3RhcnRlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAic3RyZWFtaW5nIG5vdCBzdGFydGVkIGluIGxheWVyIgorCQkJIiBpZCA9ICVkXG4iLCBsYXllci0+ZGV2aWNlX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3NkX2RldmljZS0+b3BzLmRpc2FibGVfbGF5ZXIob3NkX2RldmljZSwKKwkJCWxheWVyLT5sYXllcl9pbmZvLmlkKTsKKwlsYXllci0+c3RhcnRlZCA9IDA7CisJcmV0ID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZsYXllci0+YnVmZmVyX3F1ZXVlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIGVudW0gdjRsMl9idWZfdHlwZSBidWZfdHlwZSkKK3sKKwlzdHJ1Y3QgdnBiZV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyID0gZmgtPmxheWVyOworCXN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2ID0gZmgtPmRpc3BfZGV2OworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBmaC0+ZGlzcF9kZXYtPnZwYmVfZGV2OworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZF9kZXZpY2UgPSBkaXNwX2Rldi0+b3NkX2RldmljZTsKKwlpbnQgcmV0OworCisJb3NkX2RldmljZS0+b3BzLmRpc2FibGVfbGF5ZXIob3NkX2RldmljZSwKKwkJCWxheWVyLT5sYXllcl9pbmZvLmlkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LCAiVklESU9DX1NUUkVBTU9OLCBsYXllcmlkPSVkXG4iLAorCQkJCQkJbGF5ZXItPmRldmljZV9pZCk7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgIT0gYnVmX3R5cGUpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmZmVyIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBmaWxlIGhhbmRsZSBpcyBub3QgYWxsb3dlZCBJTywgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiTm8gaW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKwkvKiBJZiBTdHJlYW1pbmcgaXMgYWxyZWFkeSBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAobGF5ZXItPnN0YXJ0ZWQpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgImxheWVyIGlzIGFscmVhZHkgc3RyZWFtaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKgorCSAqIENhbGwgdmlkZW9idWZfc3RyZWFtb24gdG8gc3RhcnQgc3RyZWFtaW5nCisJICogaW4gdmlkZW9idWYKKwkgKi8KKwlyZXQgPSB2aWRlb2J1Zl9zdHJlYW1vbigmbGF5ZXItPmJ1ZmZlcl9xdWV1ZSk7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkiZXJyb3IgaW4gdmlkZW9idWZfc3RyZWFtb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBJZiBidWZmZXIgcXVldWUgaXMgZW1wdHksIHJldHVybiBlcnJvciAqLworCWlmIChsaXN0X2VtcHR5KCZsYXllci0+ZG1hX3F1ZXVlKSkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiYnVmZmVyIHF1ZXVlIGlzIGVtcHR5XG4iKTsKKwkJZ290byBzdHJlYW1vZmY7CisJfQorCS8qIEdldCB0aGUgbmV4dCBmcmFtZSBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwlsYXllci0+bmV4dF9mcm0gPSBsYXllci0+Y3VyX2ZybSA9IGxpc3RfZW50cnkobGF5ZXItPmRtYV9xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKwkvKiBSZW1vdmUgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWxpc3RfZGVsKCZsYXllci0+Y3VyX2ZybS0+cXVldWUpOworCS8qIE1hcmsgc3RhdGUgb2YgdGhlIGN1cnJlbnQgZnJhbWUgdG8gYWN0aXZlICovCisJbGF5ZXItPmN1cl9mcm0tPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCS8qIEluaXRpYWxpemUgZmllbGRfaWQgYW5kIHN0YXJ0ZWQgbWVtYmVyICovCisJbGF5ZXItPmZpZWxkX2lkID0gMDsKKworCS8qIFNldCBwYXJhbWV0ZXJzIGluIE9TRCBhbmQgVkVOQyAqLworCXJldCA9IHZwYmVfc2V0X29zZF9kaXNwbGF5X3BhcmFtcyhkaXNwX2RldiwgbGF5ZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHN0cmVhbW9mZjsKKworCS8qCisJICogaWYgcmVxdWVzdCBmb3JtYXQgaXMgeXV2NDIwIHNlbWlwbGFuYXIsIG5lZWQgdG8KKwkgKiBlbmFibGUgYm90aCB2aWRlbyB3aW5kb3dzCisJICovCisJbGF5ZXItPnN0YXJ0ZWQgPSAxOworCisJbGF5ZXItPmxheWVyX2ZpcnN0X2ludCA9IDE7CisKKwlyZXR1cm4gcmV0Oworc3RyZWFtb2ZmOgorCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9mZigmbGF5ZXItPmJ1ZmZlcl9xdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisJaW50IHJldDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkiVklESU9DX0RRQlVGLCBsYXllciBpZCA9ICVkXG4iLAorCQlsYXllci0+ZGV2aWNlX2lkKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAhPSBidWYtPnR5cGUpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIkludmFsaWQgYnVmZmVyIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogSWYgdGhpcyBmaWxlIGhhbmRsZSBpcyBub3QgYWxsb3dlZCB0byBkbyBJTywgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiTm8gaW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKwlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCS8qIENhbGwgdmlkZW9idWZfZHFidWYgZm9yIG5vbiBibG9ja2luZyBtb2RlICovCisJCXJldCA9IHZpZGVvYnVmX2RxYnVmKCZsYXllci0+YnVmZmVyX3F1ZXVlLCBidWYsIDEpOworCWVsc2UKKwkJLyogQ2FsbCB2aWRlb2J1Zl9kcWJ1ZiBmb3IgYmxvY2tpbmcgbW9kZSAqLworCQlyZXQgPSB2aWRlb2J1Zl9kcWJ1ZigmbGF5ZXItPmJ1ZmZlcl9xdWV1ZSwgYnVmLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJIlZJRElPQ19RQlVGLCBsYXllciBpZCA9ICVkXG4iLAorCQlsYXllci0+ZGV2aWNlX2lkKTsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAhPSBwLT50eXBlKSB7CisJCXY0bDJfZXJyKCZ2cGJlX2Rldi0+djRsMl9kZXYsICJJbnZhbGlkIGJ1ZmZlciB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgdGhpcyBmaWxlIGhhbmRsZSBpcyBub3QgYWxsb3dlZCB0byBkbyBJTywgcmV0dXJuIGVycm9yICovCisJaWYgKCFmaC0+aW9fYWxsb3dlZCkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiTm8gaW9fYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZsYXllci0+YnVmZmVyX3F1ZXVlLCBwKTsKK30KKworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCSJWSURJT0NfUVVFUllCVUYsIGxheWVyIGlkID0gJWRcbiIsCisJCWxheWVyLT5kZXZpY2VfaWQpOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICE9IGJ1Zi0+dHlwZSkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWZmZXIgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENhbGwgdmlkZW9idWZfcXVlcnlidWYgdG8gZ2V0IGluZm9ybWF0aW9uICovCisJcmV0ID0gdmlkZW9idWZfcXVlcnlidWYoJmxheWVyLT5idWZmZXJfcXVldWUsIGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwYmVfZGlzcGxheV9yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcV9idWYpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2cGJlX2xheWVyICpsYXllciA9IGZoLT5sYXllcjsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZmgtPmRpc3BfZGV2LT52cGJlX2RldjsKKwlpbnQgcmV0OworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJ2cGJlX2Rpc3BsYXlfcmVxYnVmc1xuIik7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgIT0gcmVxX2J1Zi0+dHlwZSkgeworCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBidWZmZXIgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElmIGlvIHVzZXJzIG9mIHRoZSBsYXllciBpcyBub3QgemVybywgcmV0dXJuIGVycm9yICovCisJaWYgKDAgIT0gbGF5ZXItPmlvX3VzcnMpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwgIm5vdCBJTyB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJLyogSW5pdGlhbGl6ZSB2aWRlb2J1ZiBxdWV1ZSBhcyBwZXIgdGhlIGJ1ZmZlciB0eXBlICovCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KCZsYXllci0+YnVmZmVyX3F1ZXVlLAorCQkJCSZ2aWRlb19xb3BzLAorCQkJCXZwYmVfZGV2LT5wZGV2LAorCQkJCSZsYXllci0+aXJxbG9jaywKKwkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCwKKwkJCQlsYXllci0+cGl4X2ZtdC5maWVsZCwKKwkJCQlzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksCisJCQkJZmgsIE5VTEwpOworCisJLyogU2V0IGlvIGFsbG93ZWQgbWVtYmVyIG9mIGZpbGUgaGFuZGxlIHRvIFRSVUUgKi8KKwlmaC0+aW9fYWxsb3dlZCA9IDE7CisJLyogSW5jcmVtZW50IGlvIHVzcnMgbWVtYmVyIG9mIGxheWVyIG9iamVjdCB0byAxICovCisJbGF5ZXItPmlvX3VzcnMgPSAxOworCS8qIFN0b3JlIHR5cGUgb2YgbWVtb3J5IHJlcXVlc3RlZCBpbiBsYXllciBvYmplY3QgKi8KKwlsYXllci0+bWVtb3J5ID0gcmVxX2J1Zi0+bWVtb3J5OworCS8qIEluaXRpYWxpemUgYnVmZmVyIHF1ZXVlICovCisJSU5JVF9MSVNUX0hFQUQoJmxheWVyLT5kbWFfcXVldWUpOworCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwlyZXQgPSB2aWRlb2J1Zl9yZXFidWZzKCZsYXllci0+YnVmZmVyX3F1ZXVlLCByZXFfYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2cGJlX2Rpc3BsYXlfbW1hcCgpCisgKiBJdCBpcyB1c2VkIHRvIG1hcCBrZXJuZWwgc3BhY2UgYnVmZmVycyBpbnRvIHVzZXIgc3BhY2VzCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X21tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBHZXQgdGhlIGxheWVyIG9iamVjdCBhbmQgZmlsZSBoYW5kbGUgb2JqZWN0ICovCisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwgInZwYmVfZGlzcGxheV9tbWFwXG4iKTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmbGF5ZXItPmJ1ZmZlcl9xdWV1ZSwgdm1hKTsKK30KKworLyogdnBiZV9kaXNwbGF5X3BvbGwoKTogSXQgaXMgdXNlZCBmb3Igc2VsZWN0L3BvbGwgc3lzdGVtIGNhbGwKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB2cGJlX2Rpc3BsYXlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiA9IGZoLT5kaXNwX2Rldi0+dnBiZV9kZXY7CisJdW5zaWduZWQgaW50IGVyciA9IDA7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnZwYmVfZGV2LT52NGwyX2RldiwgInZwYmVfZGlzcGxheV9wb2xsXG4iKTsKKwlpZiAobGF5ZXItPnN0YXJ0ZWQpCisJCWVyciA9IHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGVwLCAmbGF5ZXItPmJ1ZmZlcl9xdWV1ZSwgd2FpdCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHZwYmVfZGlzcGxheV9vcGVuKCkKKyAqIEl0IGNyZWF0ZXMgb2JqZWN0IG9mIGZpbGUgaGFuZGxlIHN0cnVjdHVyZSBhbmQgc3RvcmVzIGl0IGluIHByaXZhdGVfZGF0YQorICogbWVtYmVyIG9mIGZpbGVwb2ludGVyCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZwYmVfZmggKmZoID0gTlVMTDsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2ID0gbGF5ZXItPmRpc3BfZGV2OworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkX2RldmljZSA9IGRpc3BfZGV2LT5vc2RfZGV2aWNlOworCWludCBlcnI7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlmaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2cGJlX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZoID09IE5VTEwpIHsKKwkJdjRsMl9lcnIoJnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlIGhhbmRsZSBvYmplY3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkidnBiZSBkaXNwbGF5IG9wZW4gcGxhbmUgPSAlZFxuIiwKKwkJCWxheWVyLT5kZXZpY2VfaWQpOworCisJLyogc3RvcmUgcG9pbnRlciB0byBmaCBpbiBwcml2YXRlX2RhdGEgbWVtYmVyIG9mIGZpbGVwICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPmxheWVyID0gbGF5ZXI7CisJZmgtPmRpc3BfZGV2ID0gZGlzcF9kZXY7CisKKwlpZiAoIWxheWVyLT51c3JzKSB7CisKKwkJLyogRmlyc3QgY2xhaW0gdGhlIGxheWVyIGZvciB0aGlzIGRldmljZSAqLworCQllcnIgPSBvc2RfZGV2aWNlLT5vcHMucmVxdWVzdF9sYXllcihvc2RfZGV2aWNlLAorCQkJCQkJbGF5ZXItPmxheWVyX2luZm8uaWQpOworCQlpZiAoZXJyIDwgMCkgeworCQkJLyogQ291bGRuJ3QgZ2V0IGxheWVyICovCisJCQl2NGwyX2VycigmdnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJEaXNwbGF5IE1hbmFnZXIgZmFpbGVkIHRvIGFsbG9jYXRlIGxheWVyXG4iKTsKKwkJCWtmcmVlKGZoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCS8qIEluY3JlbWVudCBsYXllciB1c3JzIGNvdW50ZXIgKi8KKwlsYXllci0+dXNycysrOworCS8qIFNldCBpb19hbGxvd2VkIG1lbWJlciB0byBmYWxzZSAqLworCWZoLT5pb19hbGxvd2VkID0gMDsKKwkvKiBJbml0aWFsaXplIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgdG8gZGVmYXVsdCBwcmlvcml0eSAqLworCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKKwl2NGwyX3ByaW9fb3BlbigmbGF5ZXItPnByaW8sICZmaC0+cHJpbyk7CisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsCisJCQkidnBiZSBkaXNwbGF5IGRldmljZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwYmVfZGlzcGxheV9yZWxlYXNlKCkKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBidWZmZXIgcXVldWUsIGZyZWVzIHRoZSBidWZmZXJzIGFuZCB0aGUgZGF2aW5jaQorICogZGlzcGxheSBmaWxlICogaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJLyogR2V0IHRoZSBsYXllciBvYmplY3QgYW5kIGZpbGUgaGFuZGxlIG9iamVjdCAqLworCXN0cnVjdCB2cGJlX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdnBiZV9sYXllciAqbGF5ZXIgPSBmaC0+bGF5ZXI7CisJc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmNmZyAgPSAmbGF5ZXItPmxheWVyX2luZm8uY29uZmlnOworCXN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2ID0gZmgtPmRpc3BfZGV2OworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYgPSBkaXNwX2Rldi0+dnBiZV9kZXY7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkX2RldmljZSA9IGRpc3BfZGV2LT5vc2RfZGV2aWNlOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJ2cGJlX2Rpc3BsYXlfcmVsZWFzZVxuIik7CisKKwkvKiBpZiB0aGlzIGluc3RhbmNlIGlzIGRvaW5nIElPICovCisJaWYgKGZoLT5pb19hbGxvd2VkKSB7CisJCS8qIFJlc2V0IGlvX3VzcnMgbWVtYmVyIG9mIGxheWVyIG9iamVjdCAqLworCQlsYXllci0+aW9fdXNycyA9IDA7CisKKwkJb3NkX2RldmljZS0+b3BzLmRpc2FibGVfbGF5ZXIob3NkX2RldmljZSwKKwkJCQlsYXllci0+bGF5ZXJfaW5mby5pZCk7CisJCWxheWVyLT5zdGFydGVkID0gMDsKKwkJLyogRnJlZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQl2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoJmxheWVyLT5idWZmZXJfcXVldWUpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmxheWVyLT5idWZmZXJfcXVldWUpOworCX0KKworCS8qIERlY3JlbWVudCBsYXllciB1c3JzIGNvdW50ZXIgKi8KKwlsYXllci0+dXNycy0tOworCS8qIElmIHRoaXMgZmlsZSBoYW5kbGUgaGFzIGluaXRpYWxpemUgZW5jb2RlciBkZXZpY2UsIHJlc2V0IGl0ICovCisJaWYgKCFsYXllci0+dXNycykgeworCQlpZiAoY2ZnLT5waXhmbXQgPT0gUElYRk1UX05WMTIpIHsKKwkJCXN0cnVjdCB2cGJlX2xheWVyICpvdGhlcmxheWVyOworCQkJb3RoZXJsYXllciA9CisJCQlfdnBiZV9kaXNwbGF5X2dldF9vdGhlcl93aW5fbGF5ZXIoZGlzcF9kZXYsIGxheWVyKTsKKwkJCW9zZF9kZXZpY2UtPm9wcy5kaXNhYmxlX2xheWVyKG9zZF9kZXZpY2UsCisJCQkJCW90aGVybGF5ZXItPmxheWVyX2luZm8uaWQpOworCQkJb3NkX2RldmljZS0+b3BzLnJlbGVhc2VfbGF5ZXIob3NkX2RldmljZSwKKwkJCQkJb3RoZXJsYXllci0+bGF5ZXJfaW5mby5pZCk7CisJCX0KKwkJb3NkX2RldmljZS0+b3BzLmRpc2FibGVfbGF5ZXIob3NkX2RldmljZSwKKwkJCQlsYXllci0+bGF5ZXJfaW5mby5pZCk7CisJCW9zZF9kZXZpY2UtPm9wcy5yZWxlYXNlX2xheWVyKG9zZF9kZXZpY2UsCisJCQkJbGF5ZXItPmxheWVyX2luZm8uaWQpOworCX0KKwkvKiBDbG9zZSB0aGUgcHJpb3JpdHkgKi8KKwl2NGwyX3ByaW9fY2xvc2UoJmxheWVyLT5wcmlvLCBmaC0+cHJpbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCB0byBmaWxlIGhhbmRsZSBvYmplY3QgKi8KKwlrZnJlZShmaCk7CisKKwlkaXNwX2Rldi0+Y2Jjcl9vZnN0ID0gMDsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB2cGJlX2Rpc3BsYXlfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCB2NGwyX2RiZ19tYXRjaCAqbWF0Y2ggPSAmcmVnLT5tYXRjaDsKKworCWlmIChtYXRjaC0+dHlwZSA+PSAyKSB7CisJCXY0bDJfc3ViZGV2X2NhbGwodnBiZV9kZXYtPnZlbmMsCisJCQkJIGNvcmUsCisJCQkJIGdfcmVnaXN0ZXIsCisJCQkJIHJlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiB2cGJlIGNhcHR1cmUgaW9jdGwgb3BlcmF0aW9ucyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2cGJlX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCSA9IHZwYmVfZGlzcGxheV9xdWVyeWNhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdXQgICAgPSB2cGJlX2Rpc3BsYXlfZ19mbXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0ID0gdnBiZV9kaXNwbGF5X2VudW1fZm10LAorCS52aWRpb2Nfc19mbXRfdmlkX291dCAgICA9IHZwYmVfZGlzcGxheV9zX2ZtdCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX291dCAgPSB2cGJlX2Rpc3BsYXlfdHJ5X2ZtdCwKKwkudmlkaW9jX3JlcWJ1ZnMJCSA9IHZwYmVfZGlzcGxheV9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJID0gdnBiZV9kaXNwbGF5X3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJID0gdnBiZV9kaXNwbGF5X3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJID0gdnBiZV9kaXNwbGF5X2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JID0gdnBiZV9kaXNwbGF5X3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCSA9IHZwYmVfZGlzcGxheV9zdHJlYW1vZmYsCisJLnZpZGlvY19jcm9wY2FwCQkgPSB2cGJlX2Rpc3BsYXlfY3JvcGNhcCwKKwkudmlkaW9jX2dfY3JvcAkJID0gdnBiZV9kaXNwbGF5X2dfY3JvcCwKKwkudmlkaW9jX3NfY3JvcAkJID0gdnBiZV9kaXNwbGF5X3NfY3JvcCwKKwkudmlkaW9jX2dfcHJpb3JpdHkJID0gdnBiZV9kaXNwbGF5X2dfcHJpb3JpdHksCisJLnZpZGlvY19zX3ByaW9yaXR5CSA9IHZwYmVfZGlzcGxheV9zX3ByaW9yaXR5LAorCS52aWRpb2Nfc19zdGQJCSA9IHZwYmVfZGlzcGxheV9zX3N0ZCwKKwkudmlkaW9jX2dfc3RkCQkgPSB2cGJlX2Rpc3BsYXlfZ19zdGQsCisJLnZpZGlvY19lbnVtX291dHB1dAkgPSB2cGJlX2Rpc3BsYXlfZW51bV9vdXRwdXQsCisJLnZpZGlvY19zX291dHB1dAkgPSB2cGJlX2Rpc3BsYXlfc19vdXRwdXQsCisJLnZpZGlvY19nX291dHB1dAkgPSB2cGJlX2Rpc3BsYXlfZ19vdXRwdXQsCisJLnZpZGlvY19zX2R2X3ByZXNldAkgPSB2cGJlX2Rpc3BsYXlfc19kdl9wcmVzZXQsCisJLnZpZGlvY19nX2R2X3ByZXNldAkgPSB2cGJlX2Rpc3BsYXlfZ19kdl9wcmVzZXQsCisJLnZpZGlvY19lbnVtX2R2X3ByZXNldHMJID0gdnBiZV9kaXNwbGF5X2VudW1fZHZfcHJlc2V0cywKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyCSA9IHZwYmVfZGlzcGxheV9nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlcgkgPSB2cGJlX2Rpc3BsYXlfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2cGJlX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB2cGJlX2Rpc3BsYXlfb3BlbiwKKwkucmVsZWFzZSA9IHZwYmVfZGlzcGxheV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwKKwkubW1hcCA9IHZwYmVfZGlzcGxheV9tbWFwLAorCS5wb2xsID0gdnBiZV9kaXNwbGF5X3BvbGwKK307CisKK3N0YXRpYyBpbnQgdnBiZV9kZXZpY2VfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHZwYmVfZGlzcGxheSAqdnBiZV9kaXNwICA9IGRhdGE7CisKKwlpZiAoc3RyY21wKCJ2cGJlX2NvbnRyb2xsZXIiLCBwZGV2LT5uYW1lKSA9PSAwKQorCQl2cGJlX2Rpc3AtPnZwYmVfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoc3RyY21wKCJ2cGJlLW9zZCIsIHBkZXYtPm5hbWUpID09IDApCisJCXZwYmVfZGlzcC0+b3NkX2RldmljZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IGluaXRfdnBiZV9sYXllcihpbnQgaSwgc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcF9kZXYsCisJCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGJlX2xheWVyICp2cGJlX2Rpc3BsYXlfbGF5ZXIgPSBOVUxMOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiZCA9IE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGZvdXIgcGxhbmUgZGlzcGxheSBvYmplY3RzICovCisKKwlkaXNwX2Rldi0+ZGV2W2ldID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHZwYmVfbGF5ZXIpLCBHRlBfS0VSTkVMKTsKKworCS8qIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAoIWRpc3BfZGV2LT5kZXZbaV0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYW4gb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAgLUVOT01FTTsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJmRpc3BfZGV2LT5kZXZbaV0tPmlycWxvY2spOworCW11dGV4X2luaXQoJmRpc3BfZGV2LT5kZXZbaV0tPm9wc2xvY2spOworCisJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBsYXllciBvYmplY3QgKi8KKwl2cGJlX2Rpc3BsYXlfbGF5ZXIgPSBkaXNwX2Rldi0+ZGV2W2ldOworCXZiZCA9ICZ2cGJlX2Rpc3BsYXlfbGF5ZXItPnZpZGVvX2RldjsKKwkvKiBJbml0aWFsaXplIGZpZWxkIG9mIHZpZGVvIGRldmljZSAqLworCXZiZC0+cmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZiZC0+Zm9wcwk9ICZ2cGJlX2ZvcHM7CisJdmJkLT5pb2N0bF9vcHMJPSAmdnBiZV9pb2N0bF9vcHM7CisJdmJkLT5taW5vcgk9IC0xOworCXZiZC0+djRsMl9kZXYgICA9ICZkaXNwX2Rldi0+dnBiZV9kZXYtPnY0bDJfZGV2OworCXZiZC0+bG9jawk9ICZ2cGJlX2Rpc3BsYXlfbGF5ZXItPm9wc2xvY2s7CisKKwlpZiAoZGlzcF9kZXYtPnZwYmVfZGV2LT5jdXJyZW50X3RpbWluZ3MudGltaW5nc190eXBlICYKKwkJCVZQQkVfRU5DX1NURCkgeworCQl2YmQtPnR2bm9ybXMgPSAoVjRMMl9TVERfNTI1XzYwIHwgVjRMMl9TVERfNjI1XzUwKTsKKwkJdmJkLT5jdXJyZW50X25vcm0gPQorCQkJZGlzcF9kZXYtPnZwYmVfZGV2LT4KKwkJCWN1cnJlbnRfdGltaW5ncy50aW1pbmdzLnN0ZF9pZDsKKwl9IGVsc2UKKwkJdmJkLT5jdXJyZW50X25vcm0gPSAwOworCisJc25wcmludGYodmJkLT5uYW1lLCBzaXplb2YodmJkLT5uYW1lKSwKKwkJCSJEYVZpbmNpX1ZQQkUgRGlzcGxheV9EUklWRVJfViVkLiVkLiVkIiwKKwkJCShWUEJFX0RJU1BMQVlfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCisJCQkoVlBCRV9ESVNQTEFZX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCisJCQkoVlBCRV9ESVNQTEFZX1ZFUlNJT05fQ09ERSkgJiAweGZmKTsKKworCXZwYmVfZGlzcGxheV9sYXllci0+ZGV2aWNlX2lkID0gaTsKKworCXZwYmVfZGlzcGxheV9sYXllci0+bGF5ZXJfaW5mby5pZCA9CisJCSgoaSA9PSBWUEJFX0RJU1BMQVlfREVWSUNFXzApID8gV0lOX1ZJRDAgOiBXSU5fVklEMSk7CisKKwkvKiBJbml0aWFsaXplIHByaW8gbWVtYmVyIG9mIGxheWVyIG9iamVjdCAqLworCXY0bDJfcHJpb19pbml0KCZ2cGJlX2Rpc3BsYXlfbGF5ZXItPnByaW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdnBiZV9sYXllciAqdnBiZV9kaXNwbGF5X2xheWVyLAorCQkJCQlzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldiwKKwkJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgeworCWludCBlcnI7CisKKwl2NGwyX2luZm8oJmRpc3BfZGV2LT52cGJlX2Rldi0+djRsMl9kZXYsCisJCSAgIlRyeWluZyB0byByZWdpc3RlciBWUEJFIGRpc3BsYXkgZGV2aWNlLlxuIik7CisJdjRsMl9pbmZvKCZkaXNwX2Rldi0+dnBiZV9kZXYtPnY0bDJfZGV2LAorCQkgICJsYXllcj0leCxsYXllci0+dmlkZW9fZGV2PSV4XG4iLAorCQkgIChpbnQpdnBiZV9kaXNwbGF5X2xheWVyLAorCQkgIChpbnQpJnZwYmVfZGlzcGxheV9sYXllci0+dmlkZW9fZGV2KTsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdnBiZV9kaXNwbGF5X2xheWVyLT52aWRlb19kZXYsCisJCQkJICAgIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICAgIC0xKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZwYmVfZGlzcGxheV9sYXllci0+ZGlzcF9kZXYgPSBkaXNwX2RldjsKKwkvKiBzZXQgdGhlIGRyaXZlciBkYXRhIGluIHBsYXRmb3JtIGRldmljZSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRpc3BfZGV2KTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdnBiZV9kaXNwbGF5X2xheWVyLT52aWRlb19kZXYsCisJCQkgIHZwYmVfZGlzcGxheV9sYXllcik7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qCisgKiB2cGJlX2Rpc3BsYXlfcHJvYmUoKQorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyIGl0c2VsZiB0byB0aGUgVjRMMiBkcml2ZXIKKyAqIGFuZCBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaCBsYXllciBvYmplY3RzCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IHZwYmVfZGlzcGxheV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGJlX2xheWVyICp2cGJlX2Rpc3BsYXlfbGF5ZXI7CisJc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcF9kZXY7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOworCWludCBrOworCWludCBpOworCWludCBlcnI7CisJaW50IGlycTsKKworCXByaW50ayhLRVJOX0RFQlVHICJ2cGJlX2Rpc3BsYXlfcHJvYmVcbiIpOworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdnBiZV9kaXNwbGF5ICovCisJZGlzcF9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBiZV9kaXNwbGF5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaXNwX2RldikgeworCQlwcmludGsoS0VSTl9FUlIgInJhbiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmRpc3BfZGV2LT5kbWFfcXVldWVfbG9jayk7CisJLyoKKwkgKiBTY2FuIGFsbCB0aGUgcGxhdGZvcm0gZGV2aWNlcyB0byBmaW5kIHRoZSB2cGJlCisJICogY29udHJvbGxlciBkZXZpY2UgYW5kIGdldCB0aGUgdnBiZV9kZXYgb2JqZWN0CisJICovCisJZXJyID0gYnVzX2Zvcl9lYWNoX2RldigmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsIGRpc3BfZGV2LAorCQkJdnBiZV9kZXZpY2VfZ2V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwkvKiBJbml0aWFsaXplIHRoZSB2cGJlIGRpc3BsYXkgY29udHJvbGxlciAqLworCWlmIChOVUxMICE9IGRpc3BfZGV2LT52cGJlX2Rldi0+b3BzLmluaXRpYWxpemUpIHsKKwkJZXJyID0gZGlzcF9kZXYtPnZwYmVfZGV2LT5vcHMuaW5pdGlhbGl6ZSgmcGRldi0+ZGV2LAorCQkJCQkJCSBkaXNwX2Rldi0+dnBiZV9kZXYpOworCQlpZiAoZXJyKSB7CisJCQl2NGwyX2VycigmZGlzcF9kZXYtPnZwYmVfZGV2LT52NGwyX2RldiwKKwkJCQkJIkVycm9yIGluaXRpbmcgdnBiZVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBwcm9iZV9vdXQ7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJaWYgKGluaXRfdnBiZV9sYXllcihpLCBkaXNwX2RldiwgcGRldikpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIHByb2JlX291dDsKKwkJfQorCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJdjRsMl9lcnIoJmRpc3BfZGV2LT52cGJlX2Rldi0+djRsMl9kZXYsCisJCQkgIlVuYWJsZSB0byBnZXQgVkVOQyBpbnRlcnJ1cHQgcmVzb3VyY2VcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIHByb2JlX291dDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZlbmNfaXNyLCAgSVJRRl9ESVNBQkxFRCwgVlBCRV9ESVNQTEFZX0RSSVZFUiwKKwkJZGlzcF9kZXYpKSB7CisJCXY0bDJfZXJyKCZkaXNwX2Rldi0+dnBiZV9kZXYtPnY0bDJfZGV2LAorCQkJCSJVbmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHRcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIHByb2JlX291dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJaWYgKHJlZ2lzdGVyX2RldmljZShkaXNwX2Rldi0+ZGV2W2ldLCBkaXNwX2RldiwgcGRldikpIHsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIHByb2JlX291dDsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJTdWNjZXNzZnVsbHkgY29tcGxldGVkIHRoZSBwcm9iaW5nIG9mIHZwYmUgdjRsMiBkZXZpY2VcbiIpOworCXJldHVybiAwOworCitwcm9iZV9vdXQ6CisJZnJlZV9pcnEocmVzLT5zdGFydCwgZGlzcF9kZXYpOworCWZvciAoayA9IDA7IGsgPCBWUEJFX0RJU1BMQVlfTUFYX0RFVklDRVM7IGsrKykgeworCQkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGxheWVyIG9iamVjdCAqLworCQl2cGJlX2Rpc3BsYXlfbGF5ZXIgPSBkaXNwX2Rldi0+ZGV2W2tdOworCQkvKiBVbnJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCQlpZiAodnBiZV9kaXNwbGF5X2xheWVyKSB7CisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgKKwkJCQkmdnBiZV9kaXNwbGF5X2xheWVyLT52aWRlb19kZXYpOworCQkJCWtmcmVlKGRpc3BfZGV2LT5kZXZba10pOworCQl9CisJfQorCWtmcmVlKGRpc3BfZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogdnBiZV9kaXNwbGF5X3JlbW92ZSgpCisgKiBJdCB1bi1yZWdpc3RlciBoYXJkd2FyZSBsYXllciBmcm9tIFY0TDIgZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgdnBiZV9kaXNwbGF5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGJlX2xheWVyICp2cGJlX2Rpc3BsYXlfbGF5ZXI7CisJc3RydWN0IHZwYmVfZGlzcGxheSAqZGlzcF9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2ID0gZGlzcF9kZXYtPnZwYmVfZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZ2cGJlX2Rldi0+djRsMl9kZXYsICJ2cGJlX2Rpc3BsYXlfcmVtb3ZlXG4iKTsKKworCS8qIHVucmVnaXN0ZXIgaXJxICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlmcmVlX2lycShyZXMtPnN0YXJ0LCBkaXNwX2Rldik7CisKKwkvKiBkZWluaXRpYWxpemUgdGhlIHZwYmUgZGlzcGxheSBjb250cm9sbGVyICovCisJaWYgKE5VTEwgIT0gdnBiZV9kZXYtPm9wcy5kZWluaXRpYWxpemUpCisJCXZwYmVfZGV2LT5vcHMuZGVpbml0aWFsaXplKCZwZGV2LT5kZXYsIHZwYmVfZGV2KTsKKwkvKiB1bi1yZWdpc3RlciBkZXZpY2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBsYXllciBvYmplY3QgKi8KKwkJdnBiZV9kaXNwbGF5X2xheWVyID0gZGlzcF9kZXYtPmRldltpXTsKKwkJLyogVW5yZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnZwYmVfZGlzcGxheV9sYXllci0+dmlkZW9fZGV2KTsKKworCX0KKwlmb3IgKGkgPSAwOyBpIDwgVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJa2ZyZWUoZGlzcF9kZXYtPmRldltpXSk7CisJCWRpc3BfZGV2LT5kZXZbaV0gPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGJlX2Rpc3BsYXlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gVlBCRV9ESVNQTEFZX0RSSVZFUiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJfSwKKwkucHJvYmUgPSB2cGJlX2Rpc3BsYXlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHZwYmVfZGlzcGxheV9yZW1vdmUpLAorfTsKKworLyoKKyAqIHZwYmVfZGlzcGxheV9pbml0KCkKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGRldmljZSBhbmQgZHJpdmVyIHRvIHRoZSBrZXJuZWwsIHJlcXVlc3RzIGlycQorICogaGFuZGxlciBhbmQgYWxsb2NhdGVzIG1lbW9yeSBmb3IgbGF5ZXIgb2JqZWN0cworICovCitzdGF0aWMgX19kZXZpbml0IGludCB2cGJlX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcmludGsoS0VSTl9ERUJVRyAidnBiZV9kaXNwbGF5X2luaXRcbiIpOworCisJLyogUmVnaXN0ZXIgZHJpdmVyIHRvIHRoZSBrZXJuZWwgKi8KKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZwYmVfZGlzcGxheV9kcml2ZXIpOworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKworCXByaW50ayhLRVJOX0RFQlVHICJ2cGJlX2Rpc3BsYXlfaW5pdDoiCisJCQkiVlBCRSBWNEwyIERpc3BsYXkgRHJpdmVyIFYxLjAgbG9hZGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwYmVfZGlzcGxheV9jbGVhbnVwKCkKKyAqIFRoaXMgZnVuY3Rpb24gdW4tcmVnaXN0ZXJzIGRldmljZSBhbmQgZHJpdmVyIHRvIHRoZSBrZXJuZWwsIGZyZWVzIHJlcXVlc3RlZAorICogaXJxIGhhbmRsZXIgYW5kIGRlLWFsbG9jYXRlcyBtZW1vcnkgYWxsb2NhdGVkIGZvciBsYXllciBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZCB2cGJlX2Rpc3BsYXlfY2xlYW51cCh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJ2cGJlX2Rpc3BsYXlfY2xlYW51cFxuIik7CisKKwkvKiBwbGF0Zm9ybSBkcml2ZXIgdW5yZWdpc3RlciAqLworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cGJlX2Rpc3BsYXlfZHJpdmVyKTsKK30KKworLyogRnVuY3Rpb24gZm9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCAqLworbW9kdWxlX2luaXQodnBiZV9kaXNwbGF5X2luaXQpOworbW9kdWxlX2V4aXQodnBiZV9kaXNwbGF5X2NsZWFudXApOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIERNNjQ0eC9ETTM1NS9ETTM2NSBWUEJFIERpc3BsYXkgY29udHJvbGxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX29zZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfb3NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Mjg4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX29zZC5jCkBAIC0wLDAgKzEsMTIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFRleGFzIEluc3RydW1lbnRzIEluYworICogQ29weXJpZ2h0IChDKSAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBbmR5IExvd2UgKGFsb3dlQG12aXN0YS5jb20pLCBNb250YVZpc3RhIFNvZnR3YXJlCisgKiAtIEluaXRpYWwgdmVyc2lvbgorICogTXVyYWxpIEthcmljaGVyaSAobWthcmljaGVyaUBnbWFpbC5jb20pLCBUZXhhcyBJbnN0cnVtZW50cyBMdGQuCisgKiAtIHBvcnRlZCB0byBzdWIgZGV2aWNlIGludGVyZmFjZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvLmg+CisjaW5jbHVkZSA8bWFjaC9jcHV0eXBlLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfb3NkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgInZwYmVfb3NkX3JlZ3MuaCIKKworI2RlZmluZSBNT0RVTEVfTkFNRQlWUEJFX09TRF9TVUJERVZfTkFNRQorCisvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIG9zZF9yZWFkKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCB1MzIgb2Zmc2V0KQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCisJcmV0dXJuIHJlYWRsKG9zZC0+b3NkX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBvc2Rfd3JpdGUoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkID0gc2Q7CisKKwl3cml0ZWwodmFsLCBvc2QtPm9zZF9iYXNlICsgb2Zmc2V0KTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG9zZF9zZXQoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiBtYXNrLCB1MzIgb2Zmc2V0KQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCisJdTMyIGFkZHIgPSBvc2QtPm9zZF9iYXNlICsgb2Zmc2V0OworCXUzMiB2YWwgPSByZWFkbChhZGRyKSB8IG1hc2s7CisKKwl3cml0ZWwodmFsLCBhZGRyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG9zZF9jbGVhcihzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkID0gc2Q7CisKKwl1MzIgYWRkciA9IG9zZC0+b3NkX2Jhc2UgKyBvZmZzZXQ7CisJdTMyIHZhbCA9IHJlYWRsKGFkZHIpICYgfm1hc2s7CisKKwl3cml0ZWwodmFsLCBhZGRyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG9zZF9tb2RpZnkoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiBtYXNrLCB1MzIgdmFsLAorCQkJCSB1MzIgb2Zmc2V0KQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCisJdTMyIGFkZHIgPSBvc2QtPm9zZF9iYXNlICsgb2Zmc2V0OworCXUzMiBuZXdfdmFsID0gKHJlYWRsKGFkZHIpICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCisJd3JpdGVsKG5ld192YWwsIGFkZHIpOworCisJcmV0dXJuIG5ld192YWw7Cit9CisKKy8qIGRlZmluZSBzb21lIG1hY3JvcyBmb3IgbGF5ZXIgYW5kIHBpeGZtdCBjbGFzc2lmaWNhdGlvbiAqLworI2RlZmluZSBpc19vc2Rfd2luKGxheWVyKSAoKChsYXllcikgPT0gV0lOX09TRDApIHx8ICgobGF5ZXIpID09IFdJTl9PU0QxKSkKKyNkZWZpbmUgaXNfdmlkX3dpbihsYXllcikgKCgobGF5ZXIpID09IFdJTl9WSUQwKSB8fCAoKGxheWVyKSA9PSBXSU5fVklEMSkpCisjZGVmaW5lIGlzX3JnYl9waXhmbXQocGl4Zm10KSBcCisJKCgocGl4Zm10KSA9PSBQSVhGTVRfUkdCNTY1KSB8fCAoKHBpeGZtdCkgPT0gUElYRk1UX1JHQjg4OCkpCisjZGVmaW5lIGlzX3ljX3BpeGZtdChwaXhmbXQpIFwKKwkoKChwaXhmbXQpID09IFBJWEZNVF9ZQ2JDckkpIHx8ICgocGl4Zm10KSA9PSBQSVhGTVRfWUNyQ2JJKSB8fCBcCisJKChwaXhmbXQpID09IFBJWEZNVF9OVjEyKSkKKyNkZWZpbmUgTUFYX1dJTl9TSVpFIE9TRF9WSURXSU4wWFBfVjBYCisjZGVmaW5lIE1BWF9MSU5FX0xFTkdUSCAoT1NEX1ZJRFdJTjBPRlNUX1YwTE8gPDwgNSkKKworLyoqCisgKiBfb3NkX2RtNjQ0Nl92aWQwX3Bpbmdwb25nKCkgLSBmaWVsZCBpbnZlcnNpb24gZml4IGZvciBETTY0NDYKKyAqIEBzZCAtIHB0ciB0byBzdHJ1Y3Qgb3NkX3N0YXRlCisgKiBAZmllbGRfaW52ZXJzaW9uIC0gaW52ZXJzaW9uIGZsYWcKKyAqIEBmYl9iYXNlX3BoeXMgLSBmcmFtZSBidWZmZXIgYWRkcmVzcworICogQGxjb25maWcgLSBwdHIgdG8gbGF5ZXIgY29uZmlnCisgKgorICogVGhpcyByb3V0aW5lIGltcGxlbWVudHMgYSB3b3JrYXJvdW5kIGZvciB0aGUgZmllbGQgc2lnbmFsIGludmVyc2lvbiBzaWxpY29uCisgKiBlcnJhdHVtIGRlc2NyaWJlZCBpbiBBZHZpc29yeSAxLjMuOCBmb3IgdGhlIERNNjQ0Ni4gIFRoZSBmYl9iYXNlX3BoeXMgYW5kCisgKiBsY29uZmlnIHBhcmFtZXRlcnMgYXBwbHkgdG8gdGhlIHZpZDAgd2luZG93LiAgVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQKKyAqIHdoZW5ldmVyIHRoZSB2aWQwIGxheWVyIGNvbmZpZ3VyYXRpb24gb3Igc3RhcnQgYWRkcmVzcyBpcyBtb2RpZmllZCwgb3Igd2hlbgorICogdGhlIE9TRCBmaWVsZCBpbnZlcnNpb24gc2V0dGluZyBpcyBtb2RpZmllZC4KKyAqIFJldHVybnM6IDEgaWYgdGhlIHBpbmctcG9uZyBidWZmZXJzIG5lZWQgdG8gYmUgdG9nZ2xlZCBpbiB0aGUgdnN5bmMgaXNyLCBvcgorICogICAgICAgICAgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBfb3NkX2RtNjQ0Nl92aWQwX3Bpbmdwb25nKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLAorCQkJCSAgICAgaW50IGZpZWxkX2ludmVyc2lvbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmJfYmFzZV9waHlzLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmxjb25maWcpCit7CisJc3RydWN0IG9zZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXBkYXRhID0gKHN0cnVjdCBvc2RfcGxhdGZvcm1fZGF0YSAqKXNkLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhLT5maWVsZF9pbnZfd2FfZW5hYmxlKSB7CisKKwkJaWYgKCFmaWVsZF9pbnZlcnNpb24gfHwgIWxjb25maWctPmludGVybGFjZWQpIHsKKwkJCW9zZF93cml0ZShzZCwgZmJfYmFzZV9waHlzICYgfjB4MUYsIE9TRF9WSURXSU4wQURSKTsKKwkJCW9zZF93cml0ZShzZCwgZmJfYmFzZV9waHlzICYgfjB4MUYsIE9TRF9QUFZXSU4wQURSKTsKKwkJCW9zZF9tb2RpZnkoc2QsIE9TRF9NSVNDQ1RMX1BQU1cgfCBPU0RfTUlTQ0NUTF9QUFJWLCAwLAorCQkJCSAgIE9TRF9NSVNDQ1RMKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgbWlzY2N0bCA9IE9TRF9NSVNDQ1RMX1BQUlY7CisKKwkJCW9zZF93cml0ZShzZCwKKwkJCQkoZmJfYmFzZV9waHlzICYgfjB4MUYpIC0gbGNvbmZpZy0+bGluZV9sZW5ndGgsCisJCQkJT1NEX1ZJRFdJTjBBRFIpOworCQkJb3NkX3dyaXRlKHNkLAorCQkJCShmYl9iYXNlX3BoeXMgJiB+MHgxRikgKyBsY29uZmlnLT5saW5lX2xlbmd0aCwKKwkJCQlPU0RfUFBWV0lOMEFEUik7CisJCQlvc2RfbW9kaWZ5KHNkLAorCQkJCU9TRF9NSVNDQ1RMX1BQU1cgfCBPU0RfTUlTQ0NUTF9QUFJWLCBtaXNjY3RsLAorCQkJCU9TRF9NSVNDQ1RMKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX29zZF9zZXRfZmllbGRfaW52ZXJzaW9uKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGZzaW52ID0gMDsKKworCWlmIChlbmFibGUpCisJCWZzaW52ID0gT1NEX01PREVfRlNJTlY7CisKKwlvc2RfbW9kaWZ5KHNkLCBPU0RfTU9ERV9GU0lOViwgZnNpbnYsIE9TRF9NT0RFKTsKK30KKworc3RhdGljIHZvaWQgX29zZF9zZXRfYmxpbmtfYXR0cmlidXRlKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBpbnQgZW5hYmxlLAorCQkJCSAgICAgZW51bSBvc2RfYmxpbmtfaW50ZXJ2YWwgYmxpbmspCit7CisJdTMyIG9zZGF0cm1kID0gMDsKKworCWlmIChlbmFibGUpIHsKKwkJb3NkYXRybWQgfD0gT1NEX09TREFUUk1EX0JMTks7CisJCW9zZGF0cm1kIHw9IGJsaW5rIDw8IE9TRF9PU0RBVFJNRF9CTE5LSU5UX1NISUZUOworCX0KKwkvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBPU0QxIGlzIGNvbmZpZ3VyZWQgaW4gYXR0cmlidXRlIG1vZGUgKi8KKwlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEQVRSTURfQkxOS0lOVCB8IE9TRF9PU0RBVFJNRF9CTE5LLCBvc2RhdHJtZCwKKwkJICBPU0RfT1NEQVRSTUQpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3NldF9yb21fY2x1dChzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCSAgICAgIGVudW0gb3NkX3JvbV9jbHV0IHJvbV9jbHV0KQoreworCWlmIChyb21fY2x1dCA9PSBST01fQ0xVVDApCisJCW9zZF9jbGVhcihzZCwgT1NEX01JU0NDVExfUlNFTCwgT1NEX01JU0NDVEwpOworCWVsc2UKKwkJb3NkX3NldChzZCwgT1NEX01JU0NDVExfUlNFTCwgT1NEX01JU0NDVEwpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3NldF9wYWxldHRlX21hcChzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCQkgZW51bSBvc2Rfd2luX2xheWVyIG9zZHdpbiwKKwkJCQkgdW5zaWduZWQgY2hhciBwaXhlbF92YWx1ZSwKKwkJCQkgdW5zaWduZWQgY2hhciBjbHV0X2luZGV4LAorCQkJCSBlbnVtIG9zZF9waXhfZm9ybWF0IHBpeGZtdCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IG1hcF8yYnBwW10gPSB7IDAsIDUsIDEwLCAxNSB9OworCXN0YXRpYyBjb25zdCBpbnQgbWFwXzFicHBbXSA9IHsgMCwgMTUgfTsKKwlpbnQgYm1wX29mZnNldDsKKwlpbnQgYm1wX3NoaWZ0OworCWludCBibXBfbWFzazsKKwlpbnQgYm1wX3JlZzsKKworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSBQSVhGTVRfMUJQUDoKKwkJYm1wX3JlZyA9IG1hcF8xYnBwW3BpeGVsX3ZhbHVlICYgMHgxXTsKKwkJYnJlYWs7CisJY2FzZSBQSVhGTVRfMkJQUDoKKwkJYm1wX3JlZyA9IG1hcF8yYnBwW3BpeGVsX3ZhbHVlICYgMHgzXTsKKwkJYnJlYWs7CisJY2FzZSBQSVhGTVRfNEJQUDoKKwkJYm1wX3JlZyA9IHBpeGVsX3ZhbHVlICYgMHhmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChvc2R3aW4pIHsKKwljYXNlIE9TRFdJTl9PU0QwOgorCQlibXBfb2Zmc2V0ID0gT1NEX1cwQk1QMDEgKyAoYm1wX3JlZyA+PiAxKSAqIHNpemVvZih1MzIpOworCQlicmVhazsKKwljYXNlIE9TRFdJTl9PU0QxOgorCQlibXBfb2Zmc2V0ID0gT1NEX1cxQk1QMDEgKyAoYm1wX3JlZyA+PiAxKSAqIHNpemVvZih1MzIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJaWYgKGJtcF9yZWcgJiAxKSB7CisJCWJtcF9zaGlmdCA9IDg7CisJCWJtcF9tYXNrID0gMHhmZiA8PCA4OworCX0gZWxzZSB7CisJCWJtcF9zaGlmdCA9IDA7CisJCWJtcF9tYXNrID0gMHhmZjsKKwl9CisKKwlvc2RfbW9kaWZ5KHNkLCBibXBfbWFzaywgY2x1dF9pbmRleCA8PCBibXBfc2hpZnQsIGJtcF9vZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3NldF9yZWM2MDFfYXR0ZW51YXRpb24oc3RydWN0IG9zZF9zdGF0ZSAqc2QsCisJCQkJCWVudW0gb3NkX3dpbl9sYXllciBvc2R3aW4sIGludCBlbmFibGUpCit7CisJc3dpdGNoIChvc2R3aW4pIHsKKwljYXNlIE9TRFdJTl9PU0QwOgorCQlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEV0lOME1EX0FUTjBFLAorCQkJICBlbmFibGUgPyBPU0RfT1NEV0lOME1EX0FUTjBFIDogMCwKKwkJCSAgT1NEX09TRFdJTjBNRCk7CisJCWJyZWFrOworCWNhc2UgT1NEV0lOX09TRDE6CisJCW9zZF9tb2RpZnkoc2QsIE9TRF9PU0RXSU4xTURfQVROMUUsCisJCQkgIGVuYWJsZSA/IE9TRF9PU0RXSU4xTURfQVROMUUgOiAwLAorCQkJICBPU0RfT1NEV0lOMU1EKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfb3NkX3NldF9ibGVuZGluZ19mYWN0b3Ioc3RydWN0IG9zZF9zdGF0ZSAqc2QsCisJCQkJICAgICBlbnVtIG9zZF93aW5fbGF5ZXIgb3Nkd2luLAorCQkJCSAgICAgZW51bSBvc2RfYmxlbmRpbmdfZmFjdG9yIGJsZW5kKQoreworCXN3aXRjaCAob3Nkd2luKSB7CisJY2FzZSBPU0RXSU5fT1NEMDoKKwkJb3NkX21vZGlmeShzZCwgT1NEX09TRFdJTjBNRF9CTE5EMCwKKwkJCSAgYmxlbmQgPDwgT1NEX09TRFdJTjBNRF9CTE5EMF9TSElGVCwgT1NEX09TRFdJTjBNRCk7CisJCWJyZWFrOworCWNhc2UgT1NEV0lOX09TRDE6CisJCW9zZF9tb2RpZnkoc2QsIE9TRF9PU0RXSU4xTURfQkxORDEsCisJCQkgIGJsZW5kIDw8IE9TRF9PU0RXSU4xTURfQkxORDFfU0hJRlQsIE9TRF9PU0RXSU4xTUQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9vc2RfZW5hYmxlX2NvbG9yX2tleShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCQkgIGVudW0gb3NkX3dpbl9sYXllciBvc2R3aW4sCisJCQkJICB1bnNpZ25lZCBjb2xvcmtleSwKKwkJCQkgIGVudW0gb3NkX3BpeF9mb3JtYXQgcGl4Zm10KQoreworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSBQSVhGTVRfUkdCNTY1OgorCQlvc2Rfd3JpdGUoc2QsIGNvbG9ya2V5ICYgT1NEX1RSQU5TUFZBTF9SR0JUUkFOUywKKwkJCSAgT1NEX1RSQU5TUFZBTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAob3Nkd2luKSB7CisJY2FzZSBPU0RXSU5fT1NEMDoKKwkJb3NkX3NldChzZCwgT1NEX09TRFdJTjBNRF9URTAsIE9TRF9PU0RXSU4wTUQpOworCQlicmVhazsKKwljYXNlIE9TRFdJTl9PU0QxOgorCQlvc2Rfc2V0KHNkLCBPU0RfT1NEV0lOMU1EX1RFMSwgT1NEX09TRFdJTjFNRCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX29zZF9kaXNhYmxlX2NvbG9yX2tleShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCQkgICBlbnVtIG9zZF93aW5fbGF5ZXIgb3Nkd2luKQoreworCXN3aXRjaCAob3Nkd2luKSB7CisJY2FzZSBPU0RXSU5fT1NEMDoKKwkJb3NkX2NsZWFyKHNkLCBPU0RfT1NEV0lOME1EX1RFMCwgT1NEX09TRFdJTjBNRCk7CisJCWJyZWFrOworCWNhc2UgT1NEV0lOX09TRDE6CisJCW9zZF9jbGVhcihzZCwgT1NEX09TRFdJTjFNRF9URTEsIE9TRF9PU0RXSU4xTUQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9vc2Rfc2V0X29zZF9jbHV0KHN0cnVjdCBvc2Rfc3RhdGUgKnNkLAorCQkJICAgICAgZW51bSBvc2Rfd2luX2xheWVyIG9zZHdpbiwKKwkJCSAgICAgIGVudW0gb3NkX2NsdXQgY2x1dCkKK3sKKwl1MzIgd2lubWQgPSAwOworCisJc3dpdGNoIChvc2R3aW4pIHsKKwljYXNlIE9TRFdJTl9PU0QwOgorCQlpZiAoY2x1dCA9PSBSQU1fQ0xVVCkKKwkJCXdpbm1kIHw9IE9TRF9PU0RXSU4wTURfQ0xVVFMwOworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEV0lOME1EX0NMVVRTMCwgd2lubWQsIE9TRF9PU0RXSU4wTUQpOworCQlicmVhazsKKwljYXNlIE9TRFdJTl9PU0QxOgorCQlpZiAoY2x1dCA9PSBSQU1fQ0xVVCkKKwkJCXdpbm1kIHw9IE9TRF9PU0RXSU4xTURfQ0xVVFMxOworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEV0lOMU1EX0NMVVRTMSwgd2lubWQsIE9TRF9PU0RXSU4xTUQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9vc2Rfc2V0X3pvb20oc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyLAorCQkJICBlbnVtIG9zZF96b29tX2ZhY3RvciBoX3pvb20sCisJCQkgIGVudW0gb3NkX3pvb21fZmFjdG9yIHZfem9vbSkKK3sKKwl1MzIgd2lubWQgPSAwOworCisJc3dpdGNoIChsYXllcikgeworCWNhc2UgV0lOX09TRDA6CisJCXdpbm1kIHw9IChoX3pvb20gPDwgT1NEX09TRFdJTjBNRF9PSFowX1NISUZUKTsKKwkJd2lubWQgfD0gKHZfem9vbSA8PCBPU0RfT1NEV0lOME1EX09WWjBfU0hJRlQpOworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEV0lOME1EX09IWjAgfCBPU0RfT1NEV0lOME1EX09WWjAsIHdpbm1kLAorCQkJICBPU0RfT1NEV0lOME1EKTsKKwkJYnJlYWs7CisJY2FzZSBXSU5fVklEMDoKKwkJd2lubWQgfD0gKGhfem9vbSA8PCBPU0RfVklEV0lOTURfVkhaMF9TSElGVCk7CisJCXdpbm1kIHw9ICh2X3pvb20gPDwgT1NEX1ZJRFdJTk1EX1ZWWjBfU0hJRlQpOworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfVklEV0lOTURfVkhaMCB8IE9TRF9WSURXSU5NRF9WVlowLCB3aW5tZCwKKwkJCSAgT1NEX1ZJRFdJTk1EKTsKKwkJYnJlYWs7CisJY2FzZSBXSU5fT1NEMToKKwkJd2lubWQgfD0gKGhfem9vbSA8PCBPU0RfT1NEV0lOMU1EX09IWjFfU0hJRlQpOworCQl3aW5tZCB8PSAodl96b29tIDw8IE9TRF9PU0RXSU4xTURfT1ZaMV9TSElGVCk7CisJCW9zZF9tb2RpZnkoc2QsIE9TRF9PU0RXSU4xTURfT0haMSB8IE9TRF9PU0RXSU4xTURfT1ZaMSwgd2lubWQsCisJCQkgIE9TRF9PU0RXSU4xTUQpOworCQlicmVhazsKKwljYXNlIFdJTl9WSUQxOgorCQl3aW5tZCB8PSAoaF96b29tIDw8IE9TRF9WSURXSU5NRF9WSFoxX1NISUZUKTsKKwkJd2lubWQgfD0gKHZfem9vbSA8PCBPU0RfVklEV0lOTURfVlZaMV9TSElGVCk7CisJCW9zZF9tb2RpZnkoc2QsIE9TRF9WSURXSU5NRF9WSFoxIHwgT1NEX1ZJRFdJTk1EX1ZWWjEsIHdpbm1kLAorCQkJICBPU0RfVklEV0lOTUQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9vc2RfZGlzYWJsZV9sYXllcihzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIpCit7CisJc3dpdGNoIChsYXllcikgeworCWNhc2UgV0lOX09TRDA6CisJCW9zZF9jbGVhcihzZCwgT1NEX09TRFdJTjBNRF9PQUNUMCwgT1NEX09TRFdJTjBNRCk7CisJCWJyZWFrOworCWNhc2UgV0lOX1ZJRDA6CisJCW9zZF9jbGVhcihzZCwgT1NEX1ZJRFdJTk1EX0FDVDAsIE9TRF9WSURXSU5NRCk7CisJCWJyZWFrOworCWNhc2UgV0lOX09TRDE6CisJCS8qIGRpc2FibGUgYXR0cmlidXRlIG1vZGUgYXMgd2VsbCBhcyBkaXNhYmxpbmcgdGhlIHdpbmRvdyAqLworCQlvc2RfY2xlYXIoc2QsIE9TRF9PU0RXSU4xTURfT0FTVyB8IE9TRF9PU0RXSU4xTURfT0FDVDEsCisJCQkgIE9TRF9PU0RXSU4xTUQpOworCQlicmVhazsKKwljYXNlIFdJTl9WSUQxOgorCQlvc2RfY2xlYXIoc2QsIE9TRF9WSURXSU5NRF9BQ1QxLCBPU0RfVklEV0lOTUQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9zZF9kaXNhYmxlX2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllcikKK3sKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2QgPSBzZDsKKwlzdHJ1Y3Qgb3NkX3dpbmRvd19zdGF0ZSAqd2luID0gJm9zZC0+d2luW2xheWVyXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCF3aW4tPmlzX2VuYWJsZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJd2luLT5pc19lbmFibGVkID0gMDsKKworCV9vc2RfZGlzYWJsZV9sYXllcihzZCwgbGF5ZXIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9vc2RfZW5hYmxlX2F0dHJpYnV0ZV9tb2RlKHN0cnVjdCBvc2Rfc3RhdGUgKnNkKQoreworCS8qIGVuYWJsZSBhdHRyaWJ1dGUgbW9kZSBmb3IgT1NEMSAqLworCW9zZF9zZXQoc2QsIE9TRF9PU0RXSU4xTURfT0FTVywgT1NEX09TRFdJTjFNRCk7Cit9CisKK3N0YXRpYyB2b2lkIF9vc2RfZW5hYmxlX2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllcikKK3sKKwlzd2l0Y2ggKGxheWVyKSB7CisJY2FzZSBXSU5fT1NEMDoKKwkJb3NkX3NldChzZCwgT1NEX09TRFdJTjBNRF9PQUNUMCwgT1NEX09TRFdJTjBNRCk7CisJCWJyZWFrOworCWNhc2UgV0lOX1ZJRDA6CisJCW9zZF9zZXQoc2QsIE9TRF9WSURXSU5NRF9BQ1QwLCBPU0RfVklEV0lOTUQpOworCQlicmVhazsKKwljYXNlIFdJTl9PU0QxOgorCQkvKiBlbmFibGUgT1NEMSBhbmQgZGlzYWJsZSBhdHRyaWJ1dGUgbW9kZSAqLworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfT1NEV0lOMU1EX09BU1cgfCBPU0RfT1NEV0lOMU1EX09BQ1QxLAorCQkJICBPU0RfT1NEV0lOMU1EX09BQ1QxLCBPU0RfT1NEV0lOMU1EKTsKKwkJYnJlYWs7CisJY2FzZSBXSU5fVklEMToKKwkJb3NkX3NldChzZCwgT1NEX1ZJRFdJTk1EX0FDVDEsIE9TRF9WSURXSU5NRCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBvc2RfZW5hYmxlX2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllciwKKwkJCSAgICBpbnQgb3RoZXJ3aW4pCit7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkID0gc2Q7CisJc3RydWN0IG9zZF93aW5kb3dfc3RhdGUgKndpbiA9ICZvc2QtPndpbltsYXllcl07CisJc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmNmZyA9ICZ3aW4tPmxjb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvc2QtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogdXNlIG90aGVyd2luIGZsYWcgdG8ga25vdyB0aGlzIGlzIHRoZSBvdGhlciB2aWQgd2luZG93CisJICogaW4gWVVWNDIwIG1vZGUsIGlmIGlzLCBza2lwIHRoaXMgY2hlY2sKKwkgKi8KKwlpZiAoIW90aGVyd2luICYmICghd2luLT5pc19hbGxvY2F0ZWQgfHwKKwkJCSF3aW4tPmZiX2Jhc2VfcGh5cyB8fAorCQkJIWNmZy0+bGluZV9sZW5ndGggfHwKKwkJCSFjZmctPnhzaXplIHx8CisJCQkhY2ZnLT55c2l6ZSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAod2luLT5pc19lbmFibGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJd2luLT5pc19lbmFibGVkID0gMTsKKworCWlmIChjZmctPnBpeGZtdCAhPSBQSVhGTVRfT1NEX0FUVFIpCisJCV9vc2RfZW5hYmxlX2xheWVyKHNkLCBsYXllcik7CisJZWxzZSB7CisJCV9vc2RfZW5hYmxlX2F0dHJpYnV0ZV9tb2RlKHNkKTsKKwkJX29zZF9zZXRfYmxpbmtfYXR0cmlidXRlKHNkLCBvc2QtPmlzX2JsaW5raW5nLCBvc2QtPmJsaW5rKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvc2QtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfb3NkX3N0YXJ0X2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBmYl9iYXNlX3BoeXMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2Jjcl9vZnN0KQoreworCXN3aXRjaCAobGF5ZXIpIHsKKwljYXNlIFdJTl9PU0QwOgorCQlvc2Rfd3JpdGUoc2QsIGZiX2Jhc2VfcGh5cyAmIH4weDFGLCBPU0RfT1NEV0lOMEFEUik7CisJCWJyZWFrOworCWNhc2UgV0lOX1ZJRDA6CisJCW9zZF93cml0ZShzZCwgZmJfYmFzZV9waHlzICYgfjB4MUYsIE9TRF9WSURXSU4wQURSKTsKKwkJYnJlYWs7CisJY2FzZSBXSU5fT1NEMToKKwkJb3NkX3dyaXRlKHNkLCBmYl9iYXNlX3BoeXMgJiB+MHgxRiwgT1NEX09TRFdJTjFBRFIpOworCQlicmVhazsKKwljYXNlIFdJTl9WSUQxOgorCQlvc2Rfd3JpdGUoc2QsIGZiX2Jhc2VfcGh5cyAmIH4weDFGLCBPU0RfVklEV0lOMUFEUik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgb3NkX3N0YXJ0X2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllciwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGZiX2Jhc2VfcGh5cywKKwkJCSAgICB1bnNpZ25lZCBsb25nIGNiY3Jfb2ZzdCkKK3sKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2QgPSBzZDsKKwlzdHJ1Y3Qgb3NkX3dpbmRvd19zdGF0ZSAqd2luID0gJm9zZC0+d2luW2xheWVyXTsKKwlzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyAqY2ZnID0gJndpbi0+bGNvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJd2luLT5mYl9iYXNlX3BoeXMgPSBmYl9iYXNlX3BoeXMgJiB+MHgxRjsKKwlfb3NkX3N0YXJ0X2xheWVyKHNkLCBsYXllciwgZmJfYmFzZV9waHlzLCBjYmNyX29mc3QpOworCisJaWYgKGxheWVyID09IFdJTl9WSUQwKSB7CisJCW9zZC0+cGluZ3BvbmcgPQorCQkgICAgX29zZF9kbTY0NDZfdmlkMF9waW5ncG9uZyhzZCwgb3NkLT5maWVsZF9pbnZlcnNpb24sCisJCQkJCQkgICAgICAgd2luLT5mYl9iYXNlX3BoeXMsCisJCQkJCQkgICAgICAgY2ZnKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvc2QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb3NkX2dldF9sYXllcl9jb25maWcoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyLAorCQkJCSBzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyAqbGNvbmZpZykKK3sKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2QgPSBzZDsKKwlzdHJ1Y3Qgb3NkX3dpbmRvd19zdGF0ZSAqd2luID0gJm9zZC0+d2luW2xheWVyXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJKmxjb25maWcgPSB3aW4tPmxjb25maWc7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvc2QtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiB0cnlfbGF5ZXJfY29uZmlnKCkgLSBUcnkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgbGF5ZXIKKyAqIEBzZCAgLSBwdHIgdG8gc3RydWN0IG9zZF9zdGF0ZQorICogQGxheWVyIC0gbGF5ZXIgdG8gY29uZmlndXJlCisgKiBAbGNvbmZpZyAtIGxheWVyIGNvbmZpZ3VyYXRpb24gdG8gdHJ5CisgKgorICogSWYgdGhlIHJlcXVlc3RlZCBsY29uZmlnIGlzIGNvbXBsZXRlbHkgcmVqZWN0ZWQgYW5kIHRoZSB2YWx1ZSBvZiBsY29uZmlnIG9uCisgKiBleGl0IGlzIHRoZSBjdXJyZW50IGxjb25maWcsIHRoZW4gdHJ5X2xheWVyX2NvbmZpZygpIHJldHVybnMgMS4gIE90aGVyd2lzZSwKKyAqIHRyeV9sYXllcl9jb25maWcoKSByZXR1cm5zIDAuICBBIHJldHVybiB2YWx1ZSBvZiAwIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4KKyAqIHRoYXQgdGhlIHZhbHVlIG9mIGxjb25maWcgb24gZXhpdCBpcyBpZGVudGljYWwgdG8gdGhlIHZhbHVlIG9mIGxjb25maWcgb24KKyAqIGVudHJ5LCBidXQgbWVyZWx5IHRoYXQgaXQgcmVwcmVzZW50cyBhIGNoYW5nZSBmcm9tIHRoZSBjdXJyZW50IGxjb25maWcuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X2xheWVyX2NvbmZpZyhzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIsCisJCQkgICAgc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmxjb25maWcpCit7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkID0gc2Q7CisJc3RydWN0IG9zZF93aW5kb3dfc3RhdGUgKndpbiA9ICZvc2QtPndpbltsYXllcl07CisJaW50IGJhZF9jb25maWc7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgcGl4ZWwgZm9ybWF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF5ZXIgKi8KKwlzd2l0Y2ggKGxjb25maWctPnBpeGZtdCkgeworCWNhc2UgUElYRk1UXzFCUFA6CisJY2FzZSBQSVhGTVRfMkJQUDoKKwljYXNlIFBJWEZNVF80QlBQOgorCWNhc2UgUElYRk1UXzhCUFA6CisJY2FzZSBQSVhGTVRfUkdCNTY1OgorCQliYWRfY29uZmlnID0gIWlzX29zZF93aW4obGF5ZXIpOworCQlicmVhazsKKwljYXNlIFBJWEZNVF9ZQ2JDckk6CisJY2FzZSBQSVhGTVRfWUNyQ2JJOgorCQliYWRfY29uZmlnID0gIWlzX3ZpZF93aW4obGF5ZXIpOworCQlicmVhazsKKwljYXNlIFBJWEZNVF9SR0I4ODg6CisJCWJhZF9jb25maWcgPSAhaXNfdmlkX3dpbihsYXllcik7CisJCWJyZWFrOworCWNhc2UgUElYRk1UX05WMTI6CisJCWJhZF9jb25maWcgPSAxOworCQlicmVhazsKKwljYXNlIFBJWEZNVF9PU0RfQVRUUjoKKwkJYmFkX2NvbmZpZyA9IChsYXllciAhPSBXSU5fT1NEMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhZF9jb25maWcgPSAxOworCQlicmVhazsKKwl9CisJaWYgKGJhZF9jb25maWcpIHsKKwkJLyoKKwkJICogVGhlIHJlcXVlc3RlZCBwaXhlbCBmb3JtYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGxheWVyLAorCQkgKiBzbyBrZWVwIHRoZSBjdXJyZW50IGxheWVyIGNvbmZpZ3VyYXRpb24uCisJCSAqLworCQkqbGNvbmZpZyA9IHdpbi0+bGNvbmZpZzsKKwkJcmV0dXJuIGJhZF9jb25maWc7CisJfQorCisJLyogRE02NDQ2OiAqLworCS8qIG9ubHkgb25lIE9TRCB3aW5kb3cgYXQgYSB0aW1lIGNhbiB1c2UgUkdCIHBpeGVsIGZvcm1hdHMgKi8KKwlpZiAoaXNfb3NkX3dpbihsYXllcikgJiYgaXNfcmdiX3BpeGZtdChsY29uZmlnLT5waXhmbXQpKSB7CisJCWVudW0gb3NkX3BpeF9mb3JtYXQgcGl4Zm10OworCQlpZiAobGF5ZXIgPT0gV0lOX09TRDApCisJCQlwaXhmbXQgPSBvc2QtPndpbltXSU5fT1NEMV0ubGNvbmZpZy5waXhmbXQ7CisJCWVsc2UKKwkJCXBpeGZtdCA9IG9zZC0+d2luW1dJTl9PU0QwXS5sY29uZmlnLnBpeGZtdDsKKworCQlpZiAoaXNfcmdiX3BpeGZtdChwaXhmbXQpKSB7CisJCQkvKgorCQkJICogVGhlIG90aGVyIE9TRCB3aW5kb3cgaXMgYWxyZWFkeSBjb25maWd1cmVkIGZvciBhbgorCQkJICogUkdCLCBzbyBrZWVwIHRoZSBjdXJyZW50IGxheWVyIGNvbmZpZ3VyYXRpb24uCisJCQkgKi8KKwkJCSpsY29uZmlnID0gd2luLT5sY29uZmlnOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBETTY0NDY6IG9ubHkgb25lIHZpZGVvIHdpbmRvdyBhdCBhIHRpbWUgY2FuIHVzZSBSR0I4ODggKi8KKwlpZiAoaXNfdmlkX3dpbihsYXllcikgJiYgbGNvbmZpZy0+cGl4Zm10ID09IFBJWEZNVF9SR0I4ODgpIHsKKwkJZW51bSBvc2RfcGl4X2Zvcm1hdCBwaXhmbXQ7CisKKwkJaWYgKGxheWVyID09IFdJTl9WSUQwKQorCQkJcGl4Zm10ID0gb3NkLT53aW5bV0lOX1ZJRDFdLmxjb25maWcucGl4Zm10OworCQllbHNlCisJCQlwaXhmbXQgPSBvc2QtPndpbltXSU5fVklEMF0ubGNvbmZpZy5waXhmbXQ7CisKKwkJaWYgKHBpeGZtdCA9PSBQSVhGTVRfUkdCODg4KSB7CisJCQkvKgorCQkJICogVGhlIG90aGVyIHZpZGVvIHdpbmRvdyBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yCisJCQkgKiBSR0I4ODgsIHNvIGtlZXAgdGhlIGN1cnJlbnQgbGF5ZXIgY29uZmlndXJhdGlvbi4KKwkJCSAqLworCQkJKmxjb25maWcgPSB3aW4tPmxjb25maWc7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qIHdpbmRvdyBkaW1lbnNpb25zIG11c3QgYmUgbm9uLXplcm8gKi8KKwlpZiAoIWxjb25maWctPmxpbmVfbGVuZ3RoIHx8ICFsY29uZmlnLT54c2l6ZSB8fCAhbGNvbmZpZy0+eXNpemUpIHsKKwkJKmxjb25maWcgPSB3aW4tPmxjb25maWc7CisJCXJldHVybiAxOworCX0KKworCS8qIHJvdW5kIGxpbmVfbGVuZ3RoIHVwIHRvIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwlsY29uZmlnLT5saW5lX2xlbmd0aCA9ICgobGNvbmZpZy0+bGluZV9sZW5ndGggKyAzMSkgLyAzMikgKiAzMjsKKwlsY29uZmlnLT5saW5lX2xlbmd0aCA9CisJICAgIG1pbihsY29uZmlnLT5saW5lX2xlbmd0aCwgKHVuc2lnbmVkKU1BWF9MSU5FX0xFTkdUSCk7CisJbGNvbmZpZy0+eHNpemUgPSBtaW4obGNvbmZpZy0+eHNpemUsICh1bnNpZ25lZClNQVhfV0lOX1NJWkUpOworCWxjb25maWctPnlzaXplID0gbWluKGxjb25maWctPnlzaXplLCAodW5zaWduZWQpTUFYX1dJTl9TSVpFKTsKKwlsY29uZmlnLT54cG9zID0gbWluKGxjb25maWctPnhwb3MsICh1bnNpZ25lZClNQVhfV0lOX1NJWkUpOworCWxjb25maWctPnlwb3MgPSBtaW4obGNvbmZpZy0+eXBvcywgKHVuc2lnbmVkKU1BWF9XSU5fU0laRSk7CisJbGNvbmZpZy0+aW50ZXJsYWNlZCA9IChsY29uZmlnLT5pbnRlcmxhY2VkICE9IDApOworCWlmIChsY29uZmlnLT5pbnRlcmxhY2VkKSB7CisJCS8qIHlzaXplIGFuZCB5cG9zIG11c3QgYmUgZXZlbiBmb3IgaW50ZXJsYWNlZCBkaXNwbGF5cyAqLworCQlsY29uZmlnLT55c2l6ZSAmPSB+MTsKKwkJbGNvbmZpZy0+eXBvcyAmPSB+MTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX29zZF9kaXNhYmxlX3ZpZF9yZ2I4ODgoc3RydWN0IG9zZF9zdGF0ZSAqc2QpCit7CisJLyoKKwkgKiBUaGUgRE02NDQ2IHN1cHBvcnRzIFJHQjg4OCBwaXhlbCBmb3JtYXQgaW4gYSBzaW5nbGUgdmlkZW8gd2luZG93LgorCSAqIFRoaXMgcm91dGluZSBkaXNhYmxlcyBSR0I4ODggcGl4ZWwgZm9ybWF0IGZvciBib3RoIHZpZGVvIHdpbmRvd3MuCisJICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IG5laXRoZXIgdmlkZW8gd2luZG93IGlzIGN1cnJlbnRseQorCSAqIGNvbmZpZ3VyZWQgZm9yIFJHQjg4OCBwaXhlbCBmb3JtYXQuCisJICovCisJb3NkX2NsZWFyKHNkLCBPU0RfTUlTQ0NUTF9SR0JFTiwgT1NEX01JU0NDVEwpOworfQorCitzdGF0aWMgdm9pZCBfb3NkX2VuYWJsZV92aWRfcmdiODg4KHN0cnVjdCBvc2Rfc3RhdGUgKnNkLAorCQkJCSAgIGVudW0gb3NkX2xheWVyIGxheWVyKQoreworCS8qCisJICogVGhlIERNNjQ0NiBzdXBwb3J0cyBSR0I4ODggcGl4ZWwgZm9ybWF0IGluIGEgc2luZ2xlIHZpZGVvIHdpbmRvdy4KKwkgKiBUaGlzIHJvdXRpbmUgZW5hYmxlcyBSR0I4ODggcGl4ZWwgZm9ybWF0IGZvciB0aGUgc3BlY2lmaWVkIHZpZGVvCisJICogd2luZG93LiAgVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBvdGhlciB2aWRlbyB3aW5kb3cgaXMgbm90CisJICogY3VycmVudGx5IGNvbmZpZ3VyZWQgZm9yIFJHQjg4OCBwaXhlbCBmb3JtYXQsIGFzIHRoaXMgcm91dGluZSB3aWxsCisJICogZGlzYWJsZSBSR0I4ODggcGl4ZWwgZm9ybWF0IGZvciB0aGUgb3RoZXIgd2luZG93LgorCSAqLworCWlmIChsYXllciA9PSBXSU5fVklEMCkgeworCQlvc2RfbW9kaWZ5KHNkLCBPU0RfTUlTQ0NUTF9SR0JFTiB8IE9TRF9NSVNDQ1RMX1JHQldJTiwKKwkJCSAgT1NEX01JU0NDVExfUkdCRU4sIE9TRF9NSVNDQ1RMKTsKKwl9IGVsc2UgaWYgKGxheWVyID09IFdJTl9WSUQxKSB7CisJCW9zZF9tb2RpZnkoc2QsIE9TRF9NSVNDQ1RMX1JHQkVOIHwgT1NEX01JU0NDVExfUkdCV0lOLAorCQkJICBPU0RfTUlTQ0NUTF9SR0JFTiB8IE9TRF9NSVNDQ1RMX1JHQldJTiwKKwkJCSAgT1NEX01JU0NDVEwpOworCX0KK30KKworc3RhdGljIHZvaWQgX29zZF9zZXRfY2Jjcl9vcmRlcihzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCQllbnVtIG9zZF9waXhfZm9ybWF0IHBpeGZtdCkKK3sKKwkvKgorCSAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBhbGwgd2luZG93cyB1c2luZyBZQyBwaXhmbXQgdXNlIHRoZSBzYW1lCisJICogQ2IvQ3Igb3JkZXIuCisJICovCisJaWYgKHBpeGZtdCA9PSBQSVhGTVRfWUNiQ3JJKQorCQlvc2RfY2xlYXIoc2QsIE9TRF9NT0RFX0NTLCBPU0RfTU9ERSk7CisJZWxzZSBpZiAocGl4Zm10ID09IFBJWEZNVF9ZQ3JDYkkpCisJCW9zZF9zZXQoc2QsIE9TRF9NT0RFX0NTLCBPU0RfTU9ERSk7Cit9CisKK3N0YXRpYyB2b2lkIF9vc2Rfc2V0X2xheWVyX2NvbmZpZyhzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyAqbGNvbmZpZykKK3sKKwl1MzIgd2lubWQgPSAwLCB3aW5tZF9tYXNrID0gMCwgYm13ID0gMDsKKworCV9vc2Rfc2V0X2NiY3Jfb3JkZXIoc2QsIGxjb25maWctPnBpeGZtdCk7CisKKwlzd2l0Y2ggKGxheWVyKSB7CisJY2FzZSBXSU5fT1NEMDoKKwkJd2lubWRfbWFzayB8PSBPU0RfT1NEV0lOME1EX1JHQjBFOworCQlpZiAobGNvbmZpZy0+cGl4Zm10ID09IFBJWEZNVF9SR0I1NjUpCisJCQl3aW5tZCB8PSBPU0RfT1NEV0lOME1EX1JHQjBFOworCisJCXdpbm1kX21hc2sgfD0gT1NEX09TRFdJTjBNRF9CTVcwIHwgT1NEX09TRFdJTjBNRF9PRkYwOworCisJCXN3aXRjaCAobGNvbmZpZy0+cGl4Zm10KSB7CisJCWNhc2UgUElYRk1UXzFCUFA6CisJCQlibXcgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgUElYRk1UXzJCUFA6CisJCQlibXcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgUElYRk1UXzRCUFA6CisJCQlibXcgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUElYRk1UXzhCUFA6CisJCQlibXcgPSAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQl3aW5tZCB8PSAoYm13IDw8IE9TRF9PU0RXSU4wTURfQk1XMF9TSElGVCk7CisKKwkJaWYgKGxjb25maWctPmludGVybGFjZWQpCisJCQl3aW5tZCB8PSBPU0RfT1NEV0lOME1EX09GRjA7CisKKwkJb3NkX21vZGlmeShzZCwgd2lubWRfbWFzaywgd2lubWQsIE9TRF9PU0RXSU4wTUQpOworCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPmxpbmVfbGVuZ3RoID4+IDUsIE9TRF9PU0RXSU4wT0ZTVCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHBvcywgT1NEX09TRFdJTjBYUCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHNpemUsIE9TRF9PU0RXSU4wWEwpOworCQlpZiAobGNvbmZpZy0+aW50ZXJsYWNlZCkgeworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55cG9zID4+IDEsIE9TRF9PU0RXSU4wWVApOworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55c2l6ZSA+PiAxLCBPU0RfT1NEV0lOMFlMKTsKKwkJfSBlbHNlIHsKKwkJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eXBvcywgT1NEX09TRFdJTjBZUCk7CisJCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPnlzaXplLCBPU0RfT1NEV0lOMFlMKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdJTl9WSUQwOgorCQl3aW5tZF9tYXNrIHw9IE9TRF9WSURXSU5NRF9WRkYwOworCQlpZiAobGNvbmZpZy0+aW50ZXJsYWNlZCkKKwkJCXdpbm1kIHw9IE9TRF9WSURXSU5NRF9WRkYwOworCisJCW9zZF9tb2RpZnkoc2QsIHdpbm1kX21hc2ssIHdpbm1kLCBPU0RfVklEV0lOTUQpOworCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPmxpbmVfbGVuZ3RoID4+IDUsIE9TRF9WSURXSU4wT0ZTVCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHBvcywgT1NEX1ZJRFdJTjBYUCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHNpemUsIE9TRF9WSURXSU4wWEwpOworCQkvKgorCQkgKiBGb3IgWVVWNDIwUCBmb3JtYXQgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIGFyZQorCQkgKiBkdXBsaWNhdGVkIGluIGJvdGggVklEIHJlZ2lzdGVycworCQkgKi8KKwkJaWYgKGxjb25maWctPmludGVybGFjZWQpIHsKKwkJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eXBvcyA+PiAxLCBPU0RfVklEV0lOMFlQKTsKKwkJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eXNpemUgPj4gMSwgT1NEX1ZJRFdJTjBZTCk7CisJCX0gZWxzZSB7CisJCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPnlwb3MsIE9TRF9WSURXSU4wWVApOworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55c2l6ZSwgT1NEX1ZJRFdJTjBZTCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXSU5fT1NEMToKKwkJLyoKKwkJICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IE9TRDEgaXMgZGlzYWJsZWQgcHJpb3IgdG8KKwkJICogc3dpdGNoaW5nIGZyb20gYSBub3JtYWwgbW9kZSB0byBhdHRyaWJ1dGUgbW9kZSBvciBmcm9tCisJCSAqIGF0dHJpYnV0ZSBtb2RlIHRvIGEgbm9ybWFsIG1vZGUuCisJCSAqLworCQlpZiAobGNvbmZpZy0+cGl4Zm10ID09IFBJWEZNVF9PU0RfQVRUUikgeworCQkJd2lubWRfbWFzayB8PQorCQkJICAgIE9TRF9PU0RXSU4xTURfQVROMUUgfCBPU0RfT1NEV0lOMU1EX1JHQjFFIHwKKwkJCSAgICBPU0RfT1NEV0lOMU1EX0NMVVRTMSB8CisJCQkgICAgT1NEX09TRFdJTjFNRF9CTE5EMSB8IE9TRF9PU0RXSU4xTURfVEUxOworCQl9IGVsc2UgeworCQkJd2lubWRfbWFzayB8PSBPU0RfT1NEV0lOMU1EX1JHQjFFOworCQkJaWYgKGxjb25maWctPnBpeGZtdCA9PSBQSVhGTVRfUkdCNTY1KQorCQkJCXdpbm1kIHw9IE9TRF9PU0RXSU4xTURfUkdCMUU7CisKKwkJCXdpbm1kX21hc2sgfD0gT1NEX09TRFdJTjFNRF9CTVcxOworCQkJc3dpdGNoIChsY29uZmlnLT5waXhmbXQpIHsKKwkJCWNhc2UgUElYRk1UXzFCUFA6CisJCQkJYm13ID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUElYRk1UXzJCUFA6CisJCQkJYm13ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUElYRk1UXzRCUFA6CisJCQkJYm13ID0gMjsKKwkJCQlicmVhazsKKwkJCWNhc2UgUElYRk1UXzhCUFA6CisJCQkJYm13ID0gMzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQl3aW5tZCB8PSAoYm13IDw8IE9TRF9PU0RXSU4xTURfQk1XMV9TSElGVCk7CisJCX0KKworCQl3aW5tZF9tYXNrIHw9IE9TRF9PU0RXSU4xTURfT0ZGMTsKKwkJaWYgKGxjb25maWctPmludGVybGFjZWQpCisJCQl3aW5tZCB8PSBPU0RfT1NEV0lOMU1EX09GRjE7CisKKwkJb3NkX21vZGlmeShzZCwgd2lubWRfbWFzaywgd2lubWQsIE9TRF9PU0RXSU4xTUQpOworCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPmxpbmVfbGVuZ3RoID4+IDUsIE9TRF9PU0RXSU4xT0ZTVCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHBvcywgT1NEX09TRFdJTjFYUCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHNpemUsIE9TRF9PU0RXSU4xWEwpOworCQlpZiAobGNvbmZpZy0+aW50ZXJsYWNlZCkgeworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55cG9zID4+IDEsIE9TRF9PU0RXSU4xWVApOworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55c2l6ZSA+PiAxLCBPU0RfT1NEV0lOMVlMKTsKKwkJfSBlbHNlIHsKKwkJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eXBvcywgT1NEX09TRFdJTjFZUCk7CisJCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPnlzaXplLCBPU0RfT1NEV0lOMVlMKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdJTl9WSUQxOgorCQl3aW5tZF9tYXNrIHw9IE9TRF9WSURXSU5NRF9WRkYxOworCQlpZiAobGNvbmZpZy0+aW50ZXJsYWNlZCkKKwkJCXdpbm1kIHw9IE9TRF9WSURXSU5NRF9WRkYxOworCisJCW9zZF9tb2RpZnkoc2QsIHdpbm1kX21hc2ssIHdpbm1kLCBPU0RfVklEV0lOTUQpOworCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPmxpbmVfbGVuZ3RoID4+IDUsIE9TRF9WSURXSU4xT0ZTVCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHBvcywgT1NEX1ZJRFdJTjFYUCk7CisJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eHNpemUsIE9TRF9WSURXSU4xWEwpOworCQkvKgorCQkgKiBGb3IgWVVWNDIwUCBmb3JtYXQgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIGFyZQorCQkgKiBkdXBsaWNhdGVkIGluIGJvdGggVklEIHJlZ2lzdGVycworCQkgKi8KKwkJb3NkX21vZGlmeShzZCwgT1NEX01JU0NDVExfUzQyMEQsIH5PU0RfTUlTQ0NUTF9TNDIwRCwKKwkJCSAgIE9TRF9NSVNDQ1RMKTsKKworCQlpZiAobGNvbmZpZy0+aW50ZXJsYWNlZCkgeworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55cG9zID4+IDEsIE9TRF9WSURXSU4xWVApOworCQkJb3NkX3dyaXRlKHNkLCBsY29uZmlnLT55c2l6ZSA+PiAxLCBPU0RfVklEV0lOMVlMKTsKKwkJfSBlbHNlIHsKKwkJCW9zZF93cml0ZShzZCwgbGNvbmZpZy0+eXBvcywgT1NEX1ZJRFdJTjFZUCk7CisJCQlvc2Rfd3JpdGUoc2QsIGxjb25maWctPnlzaXplLCBPU0RfVklEV0lOMVlMKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgb3NkX3NldF9sYXllcl9jb25maWcoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyLAorCQkJCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpsY29uZmlnKQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCXN0cnVjdCBvc2Rfd2luZG93X3N0YXRlICp3aW4gPSAmb3NkLT53aW5bbGF5ZXJdOworCXN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpjZmcgPSAmd2luLT5sY29uZmlnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlamVjdF9jb25maWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3NkLT5sb2NrLCBmbGFncyk7CisKKwlyZWplY3RfY29uZmlnID0gdHJ5X2xheWVyX2NvbmZpZyhzZCwgbGF5ZXIsIGxjb25maWcpOworCWlmIChyZWplY3RfY29uZmlnKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmVqZWN0X2NvbmZpZzsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIGN1cnJlbnQgQ2IvQ3Igb3JkZXIgKi8KKwlpZiAoaXNfeWNfcGl4Zm10KGxjb25maWctPnBpeGZtdCkpCisJCW9zZC0+eWNfcGl4Zm10ID0gbGNvbmZpZy0+cGl4Zm10OworCisJLyoKKwkgKiBJZiB3ZSBhcmUgc3dpdGNoaW5nIE9TRDEgZnJvbSBub3JtYWwgbW9kZSB0byBhdHRyaWJ1dGUgbW9kZSBvciBmcm9tCisJICogYXR0cmlidXRlIG1vZGUgdG8gbm9ybWFsIG1vZGUsIHRoZW4gd2UgbXVzdCBkaXNhYmxlIHRoZSB3aW5kb3cuCisJICovCisJaWYgKGxheWVyID09IFdJTl9PU0QxKSB7CisJCWlmICgoKGxjb25maWctPnBpeGZtdCA9PSBQSVhGTVRfT1NEX0FUVFIpICYmCisJCSAgKGNmZy0+cGl4Zm10ICE9IFBJWEZNVF9PU0RfQVRUUikpIHx8CisJCSAgKChsY29uZmlnLT5waXhmbXQgIT0gUElYRk1UX09TRF9BVFRSKSAmJgorCQkgIChjZmctPnBpeGZtdCA9PSBQSVhGTVRfT1NEX0FUVFIpKSkgeworCQkJd2luLT5pc19lbmFibGVkID0gMDsKKwkJCV9vc2RfZGlzYWJsZV9sYXllcihzZCwgbGF5ZXIpOworCQl9CisJfQorCisJX29zZF9zZXRfbGF5ZXJfY29uZmlnKHNkLCBsYXllciwgbGNvbmZpZyk7CisKKwlpZiAobGF5ZXIgPT0gV0lOX09TRDEpIHsKKwkJc3RydWN0IG9zZF9vc2R3aW5fc3RhdGUgKm9zZHdpbl9zdGF0ZSA9CisJCSAgICAmb3NkLT5vc2R3aW5bT1NEV0lOX09TRDFdOworCisJCWlmICgobGNvbmZpZy0+cGl4Zm10ICE9IFBJWEZNVF9PU0RfQVRUUikgJiYKKwkJICAoY2ZnLT5waXhmbXQgPT0gUElYRk1UX09TRF9BVFRSKSkgeworCQkJLyoKKwkJCSAqIFdlIGp1c3Qgc3dpdGNoZWQgT1NEMSBmcm9tIGF0dHJpYnV0ZSBtb2RlIHRvIG5vcm1hbAorCQkJICogbW9kZSwgc28gd2UgbXVzdCBpbml0aWFsaXplIHRoZSBDTFVUIHNlbGVjdCwgdGhlCisJCQkgKiBibGVuZCBmYWN0b3IsIHRyYW5zcGFyZW5jeSBjb2xvcmtleSBlbmFibGUsIGFuZAorCQkJICogYXR0ZW51YXRpb24gZW5hYmxlIChETTY0NDYgb25seSkgYml0cyBpbiB0aGUKKwkJCSAqIE9TRFdJTjFNRCByZWdpc3Rlci4KKwkJCSAqLworCQkJX29zZF9zZXRfb3NkX2NsdXQoc2QsIE9TRFdJTl9PU0QxLAorCQkJCQkJICAgb3Nkd2luX3N0YXRlLT5jbHV0KTsKKwkJCV9vc2Rfc2V0X2JsZW5kaW5nX2ZhY3RvcihzZCwgT1NEV0lOX09TRDEsCisJCQkJCQkJICBvc2R3aW5fc3RhdGUtPmJsZW5kKTsKKwkJCWlmIChvc2R3aW5fc3RhdGUtPmNvbG9ya2V5X2JsZW5kaW5nKSB7CisJCQkJX29zZF9lbmFibGVfY29sb3Jfa2V5KHNkLCBPU0RXSU5fT1NEMSwKKwkJCQkJCQkgICAgICAgb3Nkd2luX3N0YXRlLT4KKwkJCQkJCQkgICAgICAgY29sb3JrZXksCisJCQkJCQkJICAgICAgIGxjb25maWctPnBpeGZtdCk7CisJCQl9IGVsc2UKKwkJCQlfb3NkX2Rpc2FibGVfY29sb3Jfa2V5KHNkLCBPU0RXSU5fT1NEMSk7CisJCQlfb3NkX3NldF9yZWM2MDFfYXR0ZW51YXRpb24oc2QsIE9TRFdJTl9PU0QxLAorCQkJCQkJICAgIG9zZHdpbl9zdGF0ZS0+CisJCQkJCQkgICAgcmVjNjAxX2F0dGVudWF0aW9uKTsKKwkJfSBlbHNlIGlmICgobGNvbmZpZy0+cGl4Zm10ID09IFBJWEZNVF9PU0RfQVRUUikgJiYKKwkJICAoY2ZnLT5waXhmbXQgIT0gUElYRk1UX09TRF9BVFRSKSkgeworCQkJLyoKKwkJCSAqIFdlIGp1c3Qgc3dpdGNoZWQgT1NEMSBmcm9tIG5vcm1hbCBtb2RlIHRvIGF0dHJpYnV0ZQorCQkJICogbW9kZSwgc28gd2UgbXVzdCBpbml0aWFsaXplIHRoZSBibGluayBlbmFibGUgYW5kCisJCQkgKiBibGluayBpbnRlcnZhbCBiaXRzIGluIHRoZSBPU0RBVFJNRCByZWdpc3Rlci4KKwkJCSAqLworCQkJX29zZF9zZXRfYmxpbmtfYXR0cmlidXRlKHNkLCBvc2QtPmlzX2JsaW5raW5nLAorCQkJCQkJCSAgb3NkLT5ibGluayk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGp1c3Qgc3dpdGNoZWQgdG8gYSAxLSwgMi0sIG9yIDQtYml0cy1wZXItcGl4ZWwgYml0bWFwIGZvcm1hdAorCSAqIHRoZW4gY29uZmlndXJlIGEgZGVmYXVsdCBwYWxldHRlIG1hcC4KKwkgKi8KKwlpZiAoKGxjb25maWctPnBpeGZtdCAhPSBjZmctPnBpeGZtdCkgJiYKKwkgICgobGNvbmZpZy0+cGl4Zm10ID09IFBJWEZNVF8xQlBQKSB8fAorCSAgKGxjb25maWctPnBpeGZtdCA9PSBQSVhGTVRfMkJQUCkgfHwKKwkgIChsY29uZmlnLT5waXhmbXQgPT0gUElYRk1UXzRCUFApKSkgeworCQllbnVtIG9zZF93aW5fbGF5ZXIgb3Nkd2luID0KKwkJICAgICgobGF5ZXIgPT0gV0lOX09TRDApID8gT1NEV0lOX09TRDAgOiBPU0RXSU5fT1NEMSk7CisJCXN0cnVjdCBvc2Rfb3Nkd2luX3N0YXRlICpvc2R3aW5fc3RhdGUgPQorCQkgICAgJm9zZC0+b3Nkd2luW29zZHdpbl07CisJCXVuc2lnbmVkIGNoYXIgY2x1dF9pbmRleDsKKwkJdW5zaWduZWQgY2hhciBjbHV0X2VudHJpZXMgPSAwOworCisJCXN3aXRjaCAobGNvbmZpZy0+cGl4Zm10KSB7CisJCWNhc2UgUElYRk1UXzFCUFA6CisJCQljbHV0X2VudHJpZXMgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUElYRk1UXzJCUFA6CisJCQljbHV0X2VudHJpZXMgPSA0OworCQkJYnJlYWs7CisJCWNhc2UgUElYRk1UXzRCUFA6CisJCQljbHV0X2VudHJpZXMgPSAxNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogVGhlIGRlZmF1bHQgcGFsZXR0ZSBtYXAgbWFwcyB0aGUgcGl4ZWwgdmFsdWUgdG8gdGhlIGNsdXQKKwkJICogaW5kZXgsIGkuZS4gcGl4ZWwgdmFsdWUgMCBtYXBzIHRvIGNsdXQgZW50cnkgMCwgcGl4ZWwgdmFsdWUKKwkJICogMSBtYXBzIHRvIGNsdXQgZW50cnkgMSwgZXRjLgorCQkgKi8KKwkJZm9yIChjbHV0X2luZGV4ID0gMDsgY2x1dF9pbmRleCA8IDE2OyBjbHV0X2luZGV4KyspIHsKKwkJCW9zZHdpbl9zdGF0ZS0+cGFsZXR0ZV9tYXBbY2x1dF9pbmRleF0gPSBjbHV0X2luZGV4OworCQkJaWYgKGNsdXRfaW5kZXggPCBjbHV0X2VudHJpZXMpIHsKKwkJCQlfb3NkX3NldF9wYWxldHRlX21hcChzZCwgb3Nkd2luLCBjbHV0X2luZGV4LAorCQkJCQkJICAgICBjbHV0X2luZGV4LAorCQkJCQkJICAgICBsY29uZmlnLT5waXhmbXQpOworCQkJfQorCQl9CisJfQorCisJKmNmZyA9ICpsY29uZmlnOworCS8qIERNNjQ0NjogY29uZmlndXJlIHRoZSBSR0I4ODggZW5hYmxlIGFuZCB3aW5kb3cgc2VsZWN0aW9uICovCisJaWYgKG9zZC0+d2luW1dJTl9WSUQwXS5sY29uZmlnLnBpeGZtdCA9PSBQSVhGTVRfUkdCODg4KQorCQlfb3NkX2VuYWJsZV92aWRfcmdiODg4KHNkLCBXSU5fVklEMCk7CisJZWxzZSBpZiAob3NkLT53aW5bV0lOX1ZJRDFdLmxjb25maWcucGl4Zm10ID09IFBJWEZNVF9SR0I4ODgpCisJCV9vc2RfZW5hYmxlX3ZpZF9yZ2I4ODgoc2QsIFdJTl9WSUQxKTsKKwllbHNlCisJCV9vc2RfZGlzYWJsZV92aWRfcmdiODg4KHNkKTsKKworCWlmIChsYXllciA9PSBXSU5fVklEMCkgeworCQlvc2QtPnBpbmdwb25nID0KKwkJICAgIF9vc2RfZG02NDQ2X3ZpZDBfcGluZ3Bvbmcoc2QsIG9zZC0+ZmllbGRfaW52ZXJzaW9uLAorCQkJCQkJICAgICAgIHdpbi0+ZmJfYmFzZV9waHlzLAorCQkJCQkJICAgICAgIGNmZyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3NkX2luaXRfbGF5ZXIoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyKQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCXN0cnVjdCBvc2Rfd2luZG93X3N0YXRlICp3aW4gPSAmb3NkLT53aW5bbGF5ZXJdOworCWVudW0gb3NkX3dpbl9sYXllciBvc2R3aW47CisJc3RydWN0IG9zZF9vc2R3aW5fc3RhdGUgKm9zZHdpbl9zdGF0ZTsKKwlzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyAqY2ZnID0gJndpbi0+bGNvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJd2luLT5pc19lbmFibGVkID0gMDsKKwlfb3NkX2Rpc2FibGVfbGF5ZXIoc2QsIGxheWVyKTsKKworCXdpbi0+aF96b29tID0gWk9PTV9YMTsKKwl3aW4tPnZfem9vbSA9IFpPT01fWDE7CisJX29zZF9zZXRfem9vbShzZCwgbGF5ZXIsIHdpbi0+aF96b29tLCB3aW4tPnZfem9vbSk7CisKKwl3aW4tPmZiX2Jhc2VfcGh5cyA9IDA7CisJX29zZF9zdGFydF9sYXllcihzZCwgbGF5ZXIsIHdpbi0+ZmJfYmFzZV9waHlzLCAwKTsKKworCWNmZy0+bGluZV9sZW5ndGggPSAwOworCWNmZy0+eHNpemUgPSAwOworCWNmZy0+eXNpemUgPSAwOworCWNmZy0+eHBvcyA9IDA7CisJY2ZnLT55cG9zID0gMDsKKwljZmctPmludGVybGFjZWQgPSAwOworCXN3aXRjaCAobGF5ZXIpIHsKKwljYXNlIFdJTl9PU0QwOgorCWNhc2UgV0lOX09TRDE6CisJCW9zZHdpbiA9IChsYXllciA9PSBXSU5fT1NEMCkgPyBPU0RXSU5fT1NEMCA6IE9TRFdJTl9PU0QxOworCQlvc2R3aW5fc3RhdGUgPSAmb3NkLT5vc2R3aW5bb3Nkd2luXTsKKwkJLyoKKwkJICogT3RoZXIgY29kZSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBPU0Qgd2luZG93cyBkZWZhdWx0IHRvIGEKKwkJICogYml0bWFwIHBpeGVsIGZvcm1hdCB3aGVuIHRoZXkgYXJlIGRlYWxsb2NhdGVkLCBzbyBkb24ndAorCQkgKiBjaGFuZ2UgdGhpcyBkZWZhdWx0IHBpeGVsIGZvcm1hdC4KKwkJICovCisJCWNmZy0+cGl4Zm10ID0gUElYRk1UXzhCUFA7CisJCV9vc2Rfc2V0X2xheWVyX2NvbmZpZyhzZCwgbGF5ZXIsIGNmZyk7CisJCW9zZHdpbl9zdGF0ZS0+Y2x1dCA9IFJBTV9DTFVUOworCQlfb3NkX3NldF9vc2RfY2x1dChzZCwgb3Nkd2luLCBvc2R3aW5fc3RhdGUtPmNsdXQpOworCQlvc2R3aW5fc3RhdGUtPmNvbG9ya2V5X2JsZW5kaW5nID0gMDsKKwkJX29zZF9kaXNhYmxlX2NvbG9yX2tleShzZCwgb3Nkd2luKTsKKwkJb3Nkd2luX3N0YXRlLT5ibGVuZCA9IE9TRF84X1ZJRF8wOworCQlfb3NkX3NldF9ibGVuZGluZ19mYWN0b3Ioc2QsIG9zZHdpbiwgb3Nkd2luX3N0YXRlLT5ibGVuZCk7CisJCW9zZHdpbl9zdGF0ZS0+cmVjNjAxX2F0dGVudWF0aW9uID0gMDsKKwkJX29zZF9zZXRfcmVjNjAxX2F0dGVudWF0aW9uKHNkLCBvc2R3aW4sCisJCQkJCQkgICAgIG9zZHdpbl9zdGF0ZS0+CisJCQkJCQkgICAgIHJlYzYwMV9hdHRlbnVhdGlvbik7CisJCWlmIChvc2R3aW4gPT0gT1NEV0lOX09TRDEpIHsKKwkJCW9zZC0+aXNfYmxpbmtpbmcgPSAwOworCQkJb3NkLT5ibGluayA9IEJMSU5LX1gxOworCQl9CisJCWJyZWFrOworCWNhc2UgV0lOX1ZJRDA6CisJY2FzZSBXSU5fVklEMToKKwkJY2ZnLT5waXhmbXQgPSBvc2QtPnljX3BpeGZtdDsKKwkJX29zZF9zZXRfbGF5ZXJfY29uZmlnKHNkLCBsYXllciwgY2ZnKTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG9zZF9yZWxlYXNlX2xheWVyKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllcikKK3sKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2QgPSBzZDsKKwlzdHJ1Y3Qgb3NkX3dpbmRvd19zdGF0ZSAqd2luID0gJm9zZC0+d2luW2xheWVyXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKCF3aW4tPmlzX2FsbG9jYXRlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvc2QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCW9zZF9pbml0X2xheWVyKHNkLCBsYXllcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9zZC0+bG9jaywgZmxhZ3MpOworCisJd2luLT5pc19hbGxvY2F0ZWQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb3NkX3JlcXVlc3RfbGF5ZXIoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyKQoreworCXN0cnVjdCBvc2Rfc3RhdGUgKm9zZCA9IHNkOworCXN0cnVjdCBvc2Rfd2luZG93X3N0YXRlICp3aW4gPSAmb3NkLT53aW5bbGF5ZXJdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3NkLT5sb2NrLCBmbGFncyk7CisKKwlpZiAod2luLT5pc19hbGxvY2F0ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisJd2luLT5pc19hbGxvY2F0ZWQgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3NkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX29zZF9pbml0KHN0cnVjdCBvc2Rfc3RhdGUgKnNkKQoreworCW9zZF93cml0ZShzZCwgMCwgT1NEX01PREUpOworCW9zZF93cml0ZShzZCwgMCwgT1NEX1ZJRFdJTk1EKTsKKwlvc2Rfd3JpdGUoc2QsIDAsIE9TRF9PU0RXSU4wTUQpOworCW9zZF93cml0ZShzZCwgMCwgT1NEX09TRFdJTjFNRCk7CisJb3NkX3dyaXRlKHNkLCAwLCBPU0RfUkVDVENVUik7CisJb3NkX3dyaXRlKHNkLCAwLCBPU0RfTUlTQ0NUTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9zZF9zZXRfbGVmdF9tYXJnaW4oc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiB2YWwpCit7CisJb3NkX3dyaXRlKHNkLCB2YWwsIE9TRF9CQVNFUFgpOworfQorCitzdGF0aWMgdm9pZCBvc2Rfc2V0X3RvcF9tYXJnaW4oc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiB2YWwpCit7CisJb3NkX3dyaXRlKHNkLCB2YWwsIE9TRF9CQVNFUFkpOworfQorCitzdGF0aWMgaW50IG9zZF9pbml0aWFsaXplKHN0cnVjdCBvc2Rfc3RhdGUgKm9zZCkKK3sKKwlpZiAob3NkID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCV9vc2RfaW5pdChvc2QpOworCisJLyogc2V0IGRlZmF1bHQgQ2IvQ3Igb3JkZXIgKi8KKwlvc2QtPnljX3BpeGZtdCA9IFBJWEZNVF9ZQ2JDckk7CisKKwlfb3NkX3NldF9maWVsZF9pbnZlcnNpb24ob3NkLCBvc2QtPmZpZWxkX2ludmVyc2lvbik7CisJX29zZF9zZXRfcm9tX2NsdXQob3NkLCBvc2QtPnJvbV9jbHV0KTsKKworCW9zZF9pbml0X2xheWVyKG9zZCwgV0lOX09TRDApOworCW9zZF9pbml0X2xheWVyKG9zZCwgV0lOX1ZJRDApOworCW9zZF9pbml0X2xheWVyKG9zZCwgV0lOX09TRDEpOworCW9zZF9pbml0X2xheWVyKG9zZCwgV0lOX1ZJRDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBiZV9vc2Rfb3BzIG9zZF9vcHMgPSB7CisJLmluaXRpYWxpemUgPSBvc2RfaW5pdGlhbGl6ZSwKKwkucmVxdWVzdF9sYXllciA9IG9zZF9yZXF1ZXN0X2xheWVyLAorCS5yZWxlYXNlX2xheWVyID0gb3NkX3JlbGVhc2VfbGF5ZXIsCisJLmVuYWJsZV9sYXllciA9IG9zZF9lbmFibGVfbGF5ZXIsCisJLmRpc2FibGVfbGF5ZXIgPSBvc2RfZGlzYWJsZV9sYXllciwKKwkuc2V0X2xheWVyX2NvbmZpZyA9IG9zZF9zZXRfbGF5ZXJfY29uZmlnLAorCS5nZXRfbGF5ZXJfY29uZmlnID0gb3NkX2dldF9sYXllcl9jb25maWcsCisJLnN0YXJ0X2xheWVyID0gb3NkX3N0YXJ0X2xheWVyLAorCS5zZXRfbGVmdF9tYXJnaW4gPSBvc2Rfc2V0X2xlZnRfbWFyZ2luLAorCS5zZXRfdG9wX21hcmdpbiA9IG9zZF9zZXRfdG9wX21hcmdpbiwKK307CisKK3N0YXRpYyBpbnQgb3NkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9zZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldCA9IDA7CisKKwlvc2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NkX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG9zZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9zZC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwZGF0YSA9IChzdHJ1Y3Qgb3NkX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlvc2QtPnZwYmVfdHlwZSA9IChlbnVtIHZwYmVfdmVyc2lvbilwZGF0YS0+dnBiZV90eXBlOworCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWRldl9lcnIob3NkLT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhIGRlZmluZWQgZm9yIE9TRCIKKwkJCSIgc3ViIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9tZW07CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKG9zZC0+ZGV2LCAiVW5hYmxlIHRvIGdldCBPU0QgcmVnaXN0ZXIgYWRkcmVzcyBtYXBcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfbWVtOworCX0KKwlvc2QtPm9zZF9iYXNlX3BoeXMgPSByZXMtPnN0YXJ0OworCW9zZC0+b3NkX3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG9zZC0+b3NkX2Jhc2VfcGh5cywgb3NkLT5vc2Rfc2l6ZSwKKwkJCQlNT0RVTEVfTkFNRSkpIHsKKwkJZGV2X2Vycihvc2QtPmRldiwgIlVuYWJsZSB0byByZXNlcnZlIE9TRCBNTUlPIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9tZW07CisJfQorCW9zZC0+b3NkX2Jhc2UgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwKKwkJCQkJCQlvc2QtPm9zZF9zaXplKTsKKwlpZiAoIW9zZC0+b3NkX2Jhc2UpIHsKKwkJZGV2X2Vycihvc2QtPmRldiwgIlVuYWJsZSB0byBtYXAgdGhlIE9TRCByZWdpb25cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJm9zZC0+bG9jayk7CisJb3NkLT5vcHMgPSBvc2Rfb3BzOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG9zZCk7CisJZGV2X25vdGljZShvc2QtPmRldiwgIk9TRCBzdWIgZGV2aWNlIHByb2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiByZXQ7CisKK3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24ob3NkLT5vc2RfYmFzZV9waHlzLCBvc2QtPm9zZF9zaXplKTsKK2ZyZWVfbWVtOgorCWtmcmVlKG9zZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvc2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpb3VubWFwKCh2b2lkICopb3NkLT5vc2RfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG9zZC0+b3NkX2Jhc2VfcGh5cywgb3NkLT5vc2Rfc2l6ZSk7CisJa2ZyZWUob3NkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3NkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb3NkX3Byb2JlLAorCS5yZW1vdmUJCT0gb3NkX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBNT0RVTEVfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgb3NkX2luaXQodm9pZCkKK3sKKwlpZiAocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvc2RfZHJpdmVyKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBkYXZpbmNpIG9zZCBkcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3NkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb3NkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9zZF9pbml0KTsKK21vZHVsZV9leGl0KG9zZF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEYVZpbmNpIE9TRCBNYW5hZ2VyIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGJlX29zZF9yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV9vc2RfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDUyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV9vc2RfcmVncy5oCkBAIC0wLDAgKzEsMzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9WUEJFX09TRF9SRUdTX0gKKyNkZWZpbmUgX1ZQQkVfT1NEX1JFR1NfSAorCisvKiBWUEJFIEdsb2JhbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgVlBCRV9QSUQJCQkJMHgwCisjZGVmaW5lIFZQQkVfUENSCQkJCTB4NAorCisvKiBWUFNTIENMb2NrIFJlZ2lzdGVycyAqLworI2RlZmluZSBWUFNTQ0xLX1BJRAkJCQkweDAwCisjZGVmaW5lIFZQU1NDTEtfQ0xLQ1RSTAkJCQkweDA0CisKKy8qIFZQU1MgQnVmZmVyIExvZ2ljIFJlZ2lzdGVycyAqLworI2RlZmluZSBWUFNTQkxfUElECQkJCTB4MDAKKyNkZWZpbmUgVlBTU0JMX1BDUgkJCQkweDA0CisjZGVmaW5lIFZQU1NCTF9CQ1IJCQkJMHgwOAorI2RlZmluZSBWUFNTQkxfSU5UU1RBVAkJCQkweDBDCisjZGVmaW5lIFZQU1NCTF9JTlRTRUwJCQkJMHgxMAorI2RlZmluZSBWUFNTQkxfRVZUU0VMCQkJCTB4MTQKKyNkZWZpbmUgVlBTU0JMX01FTUNUUkwJCQkJMHgxOAorI2RlZmluZSBWUFNTQkxfQ0NEQ01VWAkJCQkweDFDCisKKy8qIERNMzY1IElTUDUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgSVNQNV9QSUQJCQkJMHgwCisjZGVmaW5lIElTUDVfUENDUgkJCQkweDQKKyNkZWZpbmUgSVNQNV9CQ1IJCQkJMHg4CisjZGVmaW5lIElTUDVfSU5UU1RBVAkJCQkweEMKKyNkZWZpbmUgSVNQNV9JTlRTRUwxCQkJCTB4MTAKKyNkZWZpbmUgSVNQNV9JTlRTRUwyCQkJCTB4MTQKKyNkZWZpbmUgSVNQNV9JTlRTRUwzCQkJCTB4MTgKKyNkZWZpbmUgSVNQNV9FVlRTRUwJCQkJMHgxYworI2RlZmluZSBJU1A1X0NDRENNVVgJCQkJMHgyMAorCisvKiBWUEJFIE9uLVNjcmVlbiBEaXNwbGF5IFN1YnN5c3RlbSBSZWdpc3RlcnMgKE9TRCkgKi8KKyNkZWZpbmUgT1NEX01PREUJCQkJMHgwMAorI2RlZmluZSBPU0RfVklEV0lOTUQJCQkJMHgwNAorI2RlZmluZSBPU0RfT1NEV0lOME1ECQkJCTB4MDgKKyNkZWZpbmUgT1NEX09TRFdJTjFNRAkJCQkweDBDCisjZGVmaW5lIE9TRF9PU0RBVFJNRAkJCQkweDBDCisjZGVmaW5lIE9TRF9SRUNUQ1VSCQkJCTB4MTAKKyNkZWZpbmUgT1NEX1ZJRFdJTjBPRlNUCQkJCTB4MTgKKyNkZWZpbmUgT1NEX1ZJRFdJTjFPRlNUCQkJCTB4MUMKKyNkZWZpbmUgT1NEX09TRFdJTjBPRlNUCQkJCTB4MjAKKyNkZWZpbmUgT1NEX09TRFdJTjFPRlNUCQkJCTB4MjQKKyNkZWZpbmUgT1NEX1ZJRFdJTkFESAkJCQkweDI4CisjZGVmaW5lIE9TRF9WSURXSU4wQURMCQkJCTB4MkMKKyNkZWZpbmUgT1NEX1ZJRFdJTjBBRFIJCQkJMHgyQworI2RlZmluZSBPU0RfVklEV0lOMUFETAkJCQkweDMwCisjZGVmaW5lIE9TRF9WSURXSU4xQURSCQkJCTB4MzAKKyNkZWZpbmUgT1NEX09TRFdJTkFESAkJCQkweDM0CisjZGVmaW5lIE9TRF9PU0RXSU4wQURMCQkJCTB4MzgKKyNkZWZpbmUgT1NEX09TRFdJTjBBRFIJCQkJMHgzOAorI2RlZmluZSBPU0RfT1NEV0lOMUFETAkJCQkweDNDCisjZGVmaW5lIE9TRF9PU0RXSU4xQURSCQkJCTB4M0MKKyNkZWZpbmUgT1NEX0JBU0VQWAkJCQkweDQwCisjZGVmaW5lIE9TRF9CQVNFUFkJCQkJMHg0NAorI2RlZmluZSBPU0RfVklEV0lOMFhQCQkJCTB4NDgKKyNkZWZpbmUgT1NEX1ZJRFdJTjBZUAkJCQkweDRDCisjZGVmaW5lIE9TRF9WSURXSU4wWEwJCQkJMHg1MAorI2RlZmluZSBPU0RfVklEV0lOMFlMCQkJCTB4NTQKKyNkZWZpbmUgT1NEX1ZJRFdJTjFYUAkJCQkweDU4CisjZGVmaW5lIE9TRF9WSURXSU4xWVAJCQkJMHg1QworI2RlZmluZSBPU0RfVklEV0lOMVhMCQkJCTB4NjAKKyNkZWZpbmUgT1NEX1ZJRFdJTjFZTAkJCQkweDY0CisjZGVmaW5lIE9TRF9PU0RXSU4wWFAJCQkJMHg2OAorI2RlZmluZSBPU0RfT1NEV0lOMFlQCQkJCTB4NkMKKyNkZWZpbmUgT1NEX09TRFdJTjBYTAkJCQkweDcwCisjZGVmaW5lIE9TRF9PU0RXSU4wWUwJCQkJMHg3NAorI2RlZmluZSBPU0RfT1NEV0lOMVhQCQkJCTB4NzgKKyNkZWZpbmUgT1NEX09TRFdJTjFZUAkJCQkweDdDCisjZGVmaW5lIE9TRF9PU0RXSU4xWEwJCQkJMHg4MAorI2RlZmluZSBPU0RfT1NEV0lOMVlMCQkJCTB4ODQKKyNkZWZpbmUgT1NEX0NVUlhQCQkJCTB4ODgKKyNkZWZpbmUgT1NEX0NVUllQCQkJCTB4OEMKKyNkZWZpbmUgT1NEX0NVUlhMCQkJCTB4OTAKKyNkZWZpbmUgT1NEX0NVUllMCQkJCTB4OTQKKyNkZWZpbmUgT1NEX1cwQk1QMDEJCQkJMHhBMAorI2RlZmluZSBPU0RfVzBCTVAyMwkJCQkweEE0CisjZGVmaW5lIE9TRF9XMEJNUDQ1CQkJCTB4QTgKKyNkZWZpbmUgT1NEX1cwQk1QNjcJCQkJMHhBQworI2RlZmluZSBPU0RfVzBCTVA4OQkJCQkweEIwCisjZGVmaW5lIE9TRF9XMEJNUEFCCQkJCTB4QjQKKyNkZWZpbmUgT1NEX1cwQk1QQ0QJCQkJMHhCOAorI2RlZmluZSBPU0RfVzBCTVBFRgkJCQkweEJDCisjZGVmaW5lIE9TRF9XMUJNUDAxCQkJCTB4QzAKKyNkZWZpbmUgT1NEX1cxQk1QMjMJCQkJMHhDNAorI2RlZmluZSBPU0RfVzFCTVA0NQkJCQkweEM4CisjZGVmaW5lIE9TRF9XMUJNUDY3CQkJCTB4Q0MKKyNkZWZpbmUgT1NEX1cxQk1QODkJCQkJMHhEMAorI2RlZmluZSBPU0RfVzFCTVBBQgkJCQkweEQ0CisjZGVmaW5lIE9TRF9XMUJNUENECQkJCTB4RDgKKyNkZWZpbmUgT1NEX1cxQk1QRUYJCQkJMHhEQworI2RlZmluZSBPU0RfVkJORFJZCQkJCTB4RTAKKyNkZWZpbmUgT1NEX0VYVE1PREUJCQkJMHhFNAorI2RlZmluZSBPU0RfTUlTQ0NUTAkJCQkweEU4CisjZGVmaW5lIE9TRF9DTFVUUkFNWUNCCQkJCTB4RUMKKyNkZWZpbmUgT1NEX0NMVVRSQU1DUgkJCQkweEYwCisjZGVmaW5lIE9TRF9UUkFOU1BWQUwJCQkJMHhGNAorI2RlZmluZSBPU0RfVFJBTlNQVkFMTAkJCQkweEY0CisjZGVmaW5lIE9TRF9UUkFOU1BWQUxVCQkJCTB4RjgKKyNkZWZpbmUgT1NEX1RSQU5TUEJNUElEWAkJCTB4RkMKKyNkZWZpbmUgT1NEX1BQVldJTjBBRFIJCQkJMHhGQworCisvKiBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVlBCRV9QQ1JfVkVOQ19ESVYJCQkoMSA8PCAxKQorI2RlZmluZSBWUEJFX1BDUl9DTEtfT0ZGCQkJKDEgPDwgMCkKKworI2RlZmluZSBWUFNTQkxfSU5UU1RBVF9IU1NJSU5UCQkJKDEgPDwgMTQpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0NGQUxESU5UCQkJKDEgPDwgMTMpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0lQSVBFX0lOVDUJCSgxIDw8IDEyKQorI2RlZmluZSBWUFNTQkxfSU5UU1RBVF9JUElQRV9JTlQ0CQkoMSA8PCAxMSkKKyNkZWZpbmUgVlBTU0JMX0lOVFNUQVRfSVBJUEVfSU5UMwkJKDEgPDwgMTApCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0lQSVBFX0lOVDIJCSgxIDw8IDkpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0lQSVBFX0lOVDEJCSgxIDw8IDgpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0lQSVBFX0lOVDAJCSgxIDw8IDcpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0lQSVBFSUZJTlQJCSgxIDw8IDYpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX09TRElOVAkJCSgxIDw8IDUpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX1ZFTkNJTlQJCQkoMSA8PCA0KQorI2RlZmluZSBWUFNTQkxfSU5UU1RBVF9IM0FJTlQJCQkoMSA8PCAzKQorI2RlZmluZSBWUFNTQkxfSU5UU1RBVF9DQ0RDX1ZESU5UMgkJKDEgPDwgMikKKyNkZWZpbmUgVlBTU0JMX0lOVFNUQVRfQ0NEQ19WRElOVDEJCSgxIDw8IDEpCisjZGVmaW5lIFZQU1NCTF9JTlRTVEFUX0NDRENfVkRJTlQwCQkoMSA8PCAwKQorCisvKiBETTM2NSBJU1A1IGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJU1A1X0lOVFNUQVRfVkVOQ0lOVAkJCSgxIDw8IDIxKQorI2RlZmluZSBJU1A1X0lOVFNUQVRfT1NESU5UCQkJKDEgPDwgMjApCisKKy8qIFZNT0QgVFZUWVAgb3B0aW9ucyBmb3IgSERNRD0wICovCisjZGVmaW5lIFNEVFZfTlRTQwkJCQkwCisjZGVmaW5lIFNEVFZfUEFMCQkJCTEKKy8qIFZNT0QgVFZUWVAgb3B0aW9ucyBmb3IgSERNRD0xICovCisjZGVmaW5lIEhEVFZfNTI1UAkJCQkwCisjZGVmaW5lIEhEVFZfNjI1UAkJCQkxCisjZGVmaW5lIEhEVFZfMTA4MEkJCQkJMgorI2RlZmluZSBIRFRWXzcyMFAJCQkJMworCisjZGVmaW5lIE9TRF9NT0RFX0NTCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPU0RfTU9ERV9PVlJTWgkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT1NEX01PREVfT0hSU1oJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9TRF9NT0RFX0VGCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPU0RfTU9ERV9WVlJTWgkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT1NEX01PREVfVkhSU1oJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9TRF9NT0RFX0ZTSU5WCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9TRF9NT0RFX0JDTFVUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9TRF9NT0RFX0NBQkdfU0hJRlQJCQkwCisjZGVmaW5lIE9TRF9NT0RFX0NBQkcJCQkJKDB4ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOTURfVkZJTlYJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1YxRUZDCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9TRF9WSURXSU5NRF9WSFoxX1NISUZUCQkJMTIKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1ZIWjEJCQkoMyA8PCAxMikKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1ZWWjFfU0hJRlQJCQkxMAorI2RlZmluZSBPU0RfVklEV0lOTURfVlZaMQkJCSgzIDw8IDEwKQorI2RlZmluZSBPU0RfVklEV0lOTURfVkZGMQkJCSgxIDw8IDkpCisjZGVmaW5lIE9TRF9WSURXSU5NRF9BQ1QxCQkJKDEgPDwgOCkKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1YwRUZDCQkJKDEgPDwgNikKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1ZIWjBfU0hJRlQJCQk0CisjZGVmaW5lIE9TRF9WSURXSU5NRF9WSFowCQkJKDMgPDwgNCkKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1ZWWjBfU0hJRlQJCQkyCisjZGVmaW5lIE9TRF9WSURXSU5NRF9WVlowCQkJKDMgPDwgMikKKyNkZWZpbmUgT1NEX1ZJRFdJTk1EX1ZGRjAJCQkoMSA8PCAxKQorI2RlZmluZSBPU0RfVklEV0lOTURfQUNUMAkJCSgxIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9BVE4wRQkJCSgxIDw8IDE0KQorI2RlZmluZSBPU0RfT1NEV0lOME1EX1JHQjBFCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9TRF9PU0RXSU4wTURfQk1QME1EX1NISUZUCQkxMworI2RlZmluZSBPU0RfT1NEV0lOME1EX0JNUDBNRAkJCSgzIDw8IDEzKQorI2RlZmluZSBPU0RfT1NEV0lOME1EX0NMVVRTMAkJCSgxIDw8IDEyKQorI2RlZmluZSBPU0RfT1NEV0lOME1EX09IWjBfU0hJRlQJCTEwCisjZGVmaW5lIE9TRF9PU0RXSU4wTURfT0haMAkJCSgzIDw8IDEwKQorI2RlZmluZSBPU0RfT1NEV0lOME1EX09WWjBfU0hJRlQJCTgKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9PVlowCQkJKDMgPDwgOCkKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9CTVcwX1NISUZUCQk2CisjZGVmaW5lIE9TRF9PU0RXSU4wTURfQk1XMAkJCSgzIDw8IDYpCisjZGVmaW5lIE9TRF9PU0RXSU4wTURfQkxORDBfU0hJRlQJCTMKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9CTE5EMAkJCSg3IDw8IDMpCisjZGVmaW5lIE9TRF9PU0RXSU4wTURfVEUwCQkJKDEgPDwgMikKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9PRkYwCQkJKDEgPDwgMSkKKyNkZWZpbmUgT1NEX09TRFdJTjBNRF9PQUNUMAkJCSgxIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9PQVNXCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9TRF9PU0RXSU4xTURfQVROMUUJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9SR0IxRQkJCSgxIDw8IDEzKQorI2RlZmluZSBPU0RfT1NEV0lOMU1EX0JNUDFNRF9TSElGVAkJMTMKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9CTVAxTUQJCQkoMyA8PCAxMykKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9DTFVUUzEJCQkoMSA8PCAxMikKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9PSFoxX1NISUZUCQkxMAorI2RlZmluZSBPU0RfT1NEV0lOMU1EX09IWjEJCQkoMyA8PCAxMCkKKyNkZWZpbmUgT1NEX09TRFdJTjFNRF9PVloxX1NISUZUCQk4CisjZGVmaW5lIE9TRF9PU0RXSU4xTURfT1ZaMQkJCSgzIDw8IDgpCisjZGVmaW5lIE9TRF9PU0RXSU4xTURfQk1XMV9TSElGVAkJNgorI2RlZmluZSBPU0RfT1NEV0lOMU1EX0JNVzEJCQkoMyA8PCA2KQorI2RlZmluZSBPU0RfT1NEV0lOMU1EX0JMTkQxX1NISUZUCQkzCisjZGVmaW5lIE9TRF9PU0RXSU4xTURfQkxORDEJCQkoNyA8PCAzKQorI2RlZmluZSBPU0RfT1NEV0lOMU1EX1RFMQkJCSgxIDw8IDIpCisjZGVmaW5lIE9TRF9PU0RXSU4xTURfT0ZGMQkJCSgxIDw8IDEpCisjZGVmaW5lIE9TRF9PU0RXSU4xTURfT0FDVDEJCQkoMSA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RBVFJNRF9PQVNXCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9TRF9PU0RBVFJNRF9PSFpBX1NISUZUCQkJMTAKKyNkZWZpbmUgT1NEX09TREFUUk1EX09IWkEJCQkoMyA8PCAxMCkKKyNkZWZpbmUgT1NEX09TREFUUk1EX09WWkFfU0hJRlQJCQk4CisjZGVmaW5lIE9TRF9PU0RBVFJNRF9PVlpBCQkJKDMgPDwgOCkKKyNkZWZpbmUgT1NEX09TREFUUk1EX0JMTktJTlRfU0hJRlQJCTYKKyNkZWZpbmUgT1NEX09TREFUUk1EX0JMTktJTlQJCQkoMyA8PCA2KQorI2RlZmluZSBPU0RfT1NEQVRSTURfT0ZGQQkJCSgxIDw8IDEpCisjZGVmaW5lIE9TRF9PU0RBVFJNRF9CTE5LCQkJKDEgPDwgMCkKKworI2RlZmluZSBPU0RfUkVDVENVUl9SQ0FEX1NISUZUCQkJOAorI2RlZmluZSBPU0RfUkVDVENVUl9SQ0FECQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgT1NEX1JFQ1RDVVJfQ0xVVFNSCQkJKDEgPDwgNykKKyNkZWZpbmUgT1NEX1JFQ1RDVVJfUkNIV19TSElGVAkJCTQKKyNkZWZpbmUgT1NEX1JFQ1RDVVJfUkNIVwkJCSg3IDw8IDQpCisjZGVmaW5lIE9TRF9SRUNUQ1VSX1JDVldfU0hJRlQJCQkxCisjZGVmaW5lIE9TRF9SRUNUQ1VSX1JDVlcJCQkoNyA8PCAxKQorI2RlZmluZSBPU0RfUkVDVENVUl9SQ0FDVAkJCSgxIDw8IDApCisKKyNkZWZpbmUgT1NEX1ZJRFdJTjBPRlNUX1YwTE8JCQkoMHgxZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOMU9GU1RfVjFMTwkJCSgweDFmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU4wT0ZTVF9PMExPCQkJKDB4MWZmIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjFPRlNUX08xTE8JCQkoMHgxZmYgPDwgMCkKKworI2RlZmluZSBPU0RfV0lOT0ZTVF9BSF9TSElGVAkJCTkKKworI2RlZmluZSBPU0RfVklEV0lOME9GU1RfVjBBSAkJCSgweGYgPDwgOSkKKyNkZWZpbmUgT1NEX1ZJRFdJTjFPRlNUX1YxQUgJCQkoMHhmIDw8IDkpCisjZGVmaW5lIE9TRF9PU0RXSU4wT0ZTVF9PMEFICQkJKDB4ZiA8PCA5KQorI2RlZmluZSBPU0RfT1NEV0lOMU9GU1RfTzFBSAkJCSgweGYgPDwgOSkKKworI2RlZmluZSBPU0RfVklEV0lOQURIX1YxQUhfU0hJRlQJCTgKKyNkZWZpbmUgT1NEX1ZJRFdJTkFESF9WMUFICQkJKDB4N2YgPDwgOCkKKyNkZWZpbmUgT1NEX1ZJRFdJTkFESF9WMEFIX1NISUZUCQkwCisjZGVmaW5lIE9TRF9WSURXSU5BREhfVjBBSAkJCSgweDdmIDw8IDApCisKKyNkZWZpbmUgT1NEX1ZJRFdJTjBBRExfVjBBTAkJCSgweGZmZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOMUFETF9WMUFMCQkJKDB4ZmZmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU5BREhfTzFBSF9TSElGVAkJOAorI2RlZmluZSBPU0RfT1NEV0lOQURIX08xQUgJCQkoMHg3ZiA8PCA4KQorI2RlZmluZSBPU0RfT1NEV0lOQURIX08wQUhfU0hJRlQJCTAKKyNkZWZpbmUgT1NEX09TRFdJTkFESF9PMEFICQkJKDB4N2YgPDwgMCkKKworI2RlZmluZSBPU0RfT1NEV0lOMEFETF9PMEFMCQkJKDB4ZmZmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU4xQURMX08xQUwJCQkoMHhmZmZmIDw8IDApCisKKyNkZWZpbmUgT1NEX0JBU0VQWF9CUFgJCQkJKDB4M2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX0JBU0VQWV9CUFkJCQkJKDB4MWZmIDw8IDApCisKKyNkZWZpbmUgT1NEX1ZJRFdJTjBYUF9WMFgJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOMFlQX1YwWQkJCSgweDdmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9WSURXSU4wWExfVjBXCQkJKDB4N2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX1ZJRFdJTjBZTF9WMEgJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOMVhQX1YxWAkJCSgweDdmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9WSURXSU4xWVBfVjFZCQkJKDB4N2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX1ZJRFdJTjFYTF9WMVcJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVklEV0lOMVlMX1YxSAkJCSgweDdmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU4wWFBfVzBYCQkJKDB4N2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjBZUF9XMFkJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfT1NEV0lOMFhMX1cwVwkJCSgweDdmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU4wWUxfVzBICQkJKDB4N2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjFYUF9XMVgJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfT1NEV0lOMVlQX1cxWQkJCSgweDdmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9PU0RXSU4xWExfVzFXCQkJKDB4N2ZmIDw8IDApCisKKyNkZWZpbmUgT1NEX09TRFdJTjFZTF9XMUgJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfQ1VSWFBfUkNTWAkJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfQ1VSWVBfUkNTWQkJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfQ1VSWExfUkNTVwkJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfQ1VSWUxfUkNTSAkJCQkoMHg3ZmYgPDwgMCkKKworI2RlZmluZSBPU0RfRVhUTU9ERV9FWFBNRFNFTAkJCSgxIDw8IDE1KQorI2RlZmluZSBPU0RfRVhUTU9ERV9TQ1JOSEVYUF9TSElGVAkJMTMKKyNkZWZpbmUgT1NEX0VYVE1PREVfU0NSTkhFWFAJCQkoMyA8PCAxMykKKyNkZWZpbmUgT1NEX0VYVE1PREVfU0NSTlZFWFAJCQkoMSA8PCAxMikKKyNkZWZpbmUgT1NEX0VYVE1PREVfT1NEMUJMRENIUgkJCSgxIDw8IDExKQorI2RlZmluZSBPU0RfRVhUTU9ERV9PU0QwQkxEQ0hSCQkJKDEgPDwgMTApCisjZGVmaW5lIE9TRF9FWFRNT0RFX0FUTk9TRDFFTgkJCSgxIDw8IDkpCisjZGVmaW5lIE9TRF9FWFRNT0RFX0FUTk9TRDBFTgkJCSgxIDw8IDgpCisjZGVmaW5lIE9TRF9FWFRNT0RFX09TREhSU1oxNQkJCSgxIDw8IDcpCisjZGVmaW5lIE9TRF9FWFRNT0RFX1ZJREhSU1oxNQkJCSgxIDw8IDYpCisjZGVmaW5lIE9TRF9FWFRNT0RFX1pNRklMVjFIRU4JCQkoMSA8PCA1KQorI2RlZmluZSBPU0RfRVhUTU9ERV9aTUZJTFYxVkVOCQkJKDEgPDwgNCkKKyNkZWZpbmUgT1NEX0VYVE1PREVfWk1GSUxWMEhFTgkJCSgxIDw8IDMpCisjZGVmaW5lIE9TRF9FWFRNT0RFX1pNRklMVjBWRU4JCQkoMSA8PCAyKQorI2RlZmluZSBPU0RfRVhUTU9ERV9FWFBGSUxIRU4JCQkoMSA8PCAxKQorI2RlZmluZSBPU0RfRVhUTU9ERV9FWFBGSUxWRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIE9TRF9NSVNDQ1RMX0JMRFNFTAkJCSgxIDw8IDE1KQorI2RlZmluZSBPU0RfTUlTQ0NUTF9TNDIwRAkJCSgxIDw8IDE0KQorI2RlZmluZSBPU0RfTUlTQ0NUTF9CTUFQVAkJCSgxIDw8IDEzKQorI2RlZmluZSBPU0RfTUlTQ0NUTF9ETTM2NU0JCQkoMSA8PCAxMikKKyNkZWZpbmUgT1NEX01JU0NDVExfUkdCRU4JCQkoMSA8PCA3KQorI2RlZmluZSBPU0RfTUlTQ0NUTF9SR0JXSU4JCQkoMSA8PCA2KQorI2RlZmluZSBPU0RfTUlTQ0NUTF9ETUFORwkJCSgxIDw8IDYpCisjZGVmaW5lIE9TRF9NSVNDQ1RMX1RNT04JCQkoMSA8PCA1KQorI2RlZmluZSBPU0RfTUlTQ0NUTF9SU0VMCQkJKDEgPDwgNCkKKyNkZWZpbmUgT1NEX01JU0NDVExfQ1BCU1kJCQkoMSA8PCAzKQorI2RlZmluZSBPU0RfTUlTQ0NUTF9QUFNXCQkJKDEgPDwgMikKKyNkZWZpbmUgT1NEX01JU0NDVExfUFBSVgkJCSgxIDw8IDEpCisKKyNkZWZpbmUgT1NEX0NMVVRSQU1ZQ0JfWV9TSElGVAkJCTgKKyNkZWZpbmUgT1NEX0NMVVRSQU1ZQ0JfWQkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9TRF9DTFVUUkFNWUNCX0NCX1NISUZUCQkJMAorI2RlZmluZSBPU0RfQ0xVVFJBTVlDQl9DQgkJCSgweGZmIDw8IDApCisKKyNkZWZpbmUgT1NEX0NMVVRSQU1DUl9DUl9TSElGVAkJCTgKKyNkZWZpbmUgT1NEX0NMVVRSQU1DUl9DUgkJCSgweGZmIDw8IDgpCisjZGVmaW5lIE9TRF9DTFVUUkFNQ1JfQ0FERFJfU0hJRlQJCTAKKyNkZWZpbmUgT1NEX0NMVVRSQU1DUl9DQUREUgkJCSgweGZmIDw8IDApCisKKyNkZWZpbmUgT1NEX1RSQU5TUFZBTF9SR0JUUkFOUwkJCSgweGZmZmYgPDwgMCkKKworI2RlZmluZSBPU0RfVFJBTlNQVkFMTF9SR0JMCQkJKDB4ZmZmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9UUkFOU1BWQUxVX1lfU0hJRlQJCQk4CisjZGVmaW5lIE9TRF9UUkFOU1BWQUxVX1kJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBPU0RfVFJBTlNQVkFMVV9SR0JVX1NISUZUCQkwCisjZGVmaW5lIE9TRF9UUkFOU1BWQUxVX1JHQlUJCQkoMHhmZiA8PCAwKQorCisjZGVmaW5lIE9TRF9UUkFOU1BCTVBJRFhfQk1QMV9TSElGVAkJOAorI2RlZmluZSBPU0RfVFJBTlNQQk1QSURYX0JNUDEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBPU0RfVFJBTlNQQk1QSURYX0JNUDBfU0hJRlQJCTAKKyNkZWZpbmUgT1NEX1RSQU5TUEJNUElEWF9CTVAwCQkJMHhmZgorCisjZW5kaWYJCQkJLyogX0RBVklOQ0lfVlBCRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfdmVuYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfdmVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV92ZW5jLmMKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2lvLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmVfdmVuYy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBzcy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2cGJlX3ZlbmNfcmVncy5oIgorCisjZGVmaW5lIE1PRFVMRV9OQU1FCVZQQkVfVkVOQ19TVUJERVZfTkFNRQorCitzdGF0aWMgaW50IGRlYnVnID0gMjsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAwLTIiKTsKKworc3RydWN0IHZlbmNfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdmVuY19jYWxsYmFjayAqY2FsbGJhY2s7CisJc3RydWN0IHZlbmNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZSAqcGRldjsKKwl1MzIgb3V0cHV0OworCXY0bDJfc3RkX2lkIHN0ZDsKKwlzcGlubG9ja190IGxvY2s7CisJdm9pZCBfX2lvbWVtICp2ZW5jX2Jhc2U7CisJdm9pZCBfX2lvbWVtICp2ZGFjY2ZnX3JlZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZlbmNfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHZlbmNfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdmVuY19yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHZlbmNfc3RhdGUgKnZlbmMgPSB0b19zdGF0ZShzZCk7CisKKwlyZXR1cm4gcmVhZGwodmVuYy0+dmVuY19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdmVuY193cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jID0gdG9fc3RhdGUoc2QpOworCisJd3JpdGVsKHZhbCwgKHZlbmMtPnZlbmNfYmFzZSArIG9mZnNldCkpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB1MzIgdmVuY19tb2RpZnkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIG9mZnNldCwKKwkJCQkgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdTMyIG5ld192YWwgPSAodmVuY19yZWFkKHNkLCBvZmZzZXQpICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCisJdmVuY193cml0ZShzZCwgb2Zmc2V0LCBuZXdfdmFsKTsKKworCXJldHVybiBuZXdfdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB2ZGFjY2ZnX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IHZlbmNfc3RhdGUgKnZlbmMgPSB0b19zdGF0ZShzZCk7CisKKwl3cml0ZWwodmFsLCB2ZW5jLT52ZGFjY2ZnX3JlZyk7CisKKwl2YWwgPSByZWFkbCh2ZW5jLT52ZGFjY2ZnX3JlZyk7CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRhYyBvZiB0aGUgVlBCRSBmb3IgdmFyaW91cyBvdXRwdXRzCisgKi8KK3N0YXRpYyBpbnQgdmVuY19zZXRfZGFjKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBvdXRfaW5kZXgpCit7CisJc3dpdGNoIChvdXRfaW5kZXgpIHsKKwljYXNlIDA6CisJCXY0bDJfZGJnKGRlYnVnLCAxLCBzZCwgIlNldHRpbmcgb3V0cHV0IHRvIENvbXBvc2l0ZVxuIik7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfREFDU0VMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2NGwyX2RiZyhkZWJ1ZywgMSwgc2QsICJTZXR0aW5nIG91dHB1dCB0byBTLVZpZGVvXG4iKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19EQUNTRUwsIDB4MjEwKTsKKwkJYnJlYWs7CisJY2FzZSAgMjoKKwkJdmVuY193cml0ZShzZCwgVkVOQ19EQUNTRUwsIDB4NTQzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZlbmNfZW5hYmxlZGlnaXRhbG91dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgYmVuYWJsZSkKK3sKKwl2NGwyX2RiZyhkZWJ1ZywgMiwgc2QsICJ2ZW5jX2VuYWJsZWRpZ2l0YWxvdXRwdXRcbiIpOworCisJaWYgKGJlbmFibGUpIHsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19WTU9ELCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19DVkJTLCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19MQ0RPVVQsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0hTUExTLCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19IU1RBUlQsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0hWQUxJRCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfSElOVCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfVlNQTFMsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZTVEFSVCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfVlZBTElELCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19WSU5ULCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19ZQ0NDVEwsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0RBQ1NFTCwgMCk7CisKKwl9IGVsc2UgeworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZNT0QsIDApOworCQkvKiBkaXNhYmxlIFZDTEsgb3V0cHV0IHBpbiBlbmFibGUgKi8KKwkJdmVuY193cml0ZShzZCwgVkVOQ19WSURDVEwsIDB4MTQxKTsKKworCQkvKiBEaXNhYmxlIG91dHB1dCBzeW5jIHBpbnMgKi8KKwkJdmVuY193cml0ZShzZCwgVkVOQ19TWU5DQ1RMLCAwKTsKKworCQkvKiBEaXNhYmxlIERDTE9DSyAqLworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0RDTEtDVEwsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0RSR0JYMSwgMHgwMDAwMDU3Qyk7CisKKwkJLyogRGlzYWJsZSBMQ0Qgb3V0cHV0IGNvbnRyb2wgKGFjY2VwdGluZyBkZWZhdWx0IHBvbGFyaXR5KSAqLworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0xDRE9VVCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfQ01QTlQsIDB4MTAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19IU1BMUywgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfSElOVCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfSFNUQVJULCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19IVkFMSUQsIDApOworCisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfVlNQTFMsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZJTlQsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZTVEFSVCwgMCk7CisJCXZlbmNfd3JpdGUoc2QsIFZFTkNfVlZBTElELCAwKTsKKworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX0hTRExZLCAwKTsKKwkJdmVuY193cml0ZShzZCwgVkVOQ19WU0RMWSwgMCk7CisKKwkJdmVuY193cml0ZShzZCwgVkVOQ19ZQ0NDVEwsIDApOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZTVEFSVEEsIDApOworCisJCS8qIFNldCBPU0QgY2xvY2sgYW5kIE9TRCBTeW5jIEFkYXZhbmNlIHJlZ2lzdGVycyAqLworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX09TRENMSzAsIDEpOworCQl2ZW5jX3dyaXRlKHNkLCBWRU5DX09TRENMSzEsIDIpOworCX0KK30KKworLyoKKyAqIHNldHRpbmcgTlRTQyBtb2RlCisgKi8KK3N0YXRpYyBpbnQgdmVuY19zZXRfbnRzYyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCB2ZW5jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdmVuYy0+cGRhdGE7CisKKwl2NGwyX2RiZyhkZWJ1ZywgMiwgc2QsICJ2ZW5jX3NldF9udHNjXG4iKTsKKworCS8qIFNldHVwIGNsb2NrIGF0IFZQU1MgJiBWRU5DIGZvciBTRCAqLworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfVkVOQ19DTE9DS19TRUwsIDEpOworCWlmIChwZGF0YS0+c2V0dXBfY2xvY2soVlBCRV9FTkNfU1RELCBWNEwyX1NURF81MjVfNjApIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZW5jX2VuYWJsZWRpZ2l0YWxvdXRwdXQoc2QsIDApOworCisJLyogdG8gc2V0IFZFTkMgQ0xLIERJViB0byAxIC0gZmluYWwgY2xvY2sgaXMgNTQgTUh6ICovCisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVklEQ1RMLCAwLCAxIDw8IDEpOworCS8qIFNldCBSRUM2NTYgTW9kZSAqLworCXZlbmNfd3JpdGUoc2QsIFZFTkNfWUNDQ1RMLCAweDEpOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZEUFJPLCAwLCBWRU5DX1ZEUFJPX0RBRlJRKTsKKwl2ZW5jX21vZGlmeShzZCwgVkVOQ19WRFBSTywgMCwgVkVOQ19WRFBST19EQVVQUyk7CisKKwl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZNT0QsIDApOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsICgxIDw8IFZFTkNfVk1PRF9WSUVfU0hJRlQpLAorCQkJVkVOQ19WTU9EX1ZJRSk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwgKDAgPDwgVkVOQ19WTU9EX1ZNRCksIFZFTkNfVk1PRF9WTUQpOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsICgwIDw8IFZFTkNfVk1PRF9UVlRZUF9TSElGVCksCisJCQlWRU5DX1ZNT0RfVFZUWVApOworCXZlbmNfd3JpdGUoc2QsIFZFTkNfREFDVFNULCAweDApOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsIFZFTkNfVk1PRF9WRU5DLCBWRU5DX1ZNT0RfVkVOQyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldHRpbmcgUEFMIG1vZGUKKyAqLworc3RhdGljIGludCB2ZW5jX3NldF9wYWwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgdmVuY19zdGF0ZSAqdmVuYyA9IHRvX3N0YXRlKHNkKTsKKworCXY0bDJfZGJnKGRlYnVnLCAyLCBzZCwgInZlbmNfc2V0X3BhbFxuIik7CisKKwkvKiBTZXR1cCBjbG9jayBhdCBWUFNTICYgVkVOQyBmb3IgU0QgKi8KKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX1ZFTkNfQ0xPQ0tfU0VMLCAxKTsKKwlpZiAodmVuYy0+cGRhdGEtPnNldHVwX2Nsb2NrKFZQQkVfRU5DX1NURCwgVjRMMl9TVERfNjI1XzUwKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmVuY19lbmFibGVkaWdpdGFsb3V0cHV0KHNkLCAwKTsKKworCS8qIHRvIHNldCBWRU5DIENMSyBESVYgdG8gMSAtIGZpbmFsIGNsb2NrIGlzIDU0IE1IeiAqLworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZJRENUTCwgMCwgMSA8PCAxKTsKKwkvKiBTZXQgUkVDNjU2IE1vZGUgKi8KKwl2ZW5jX3dyaXRlKHNkLCBWRU5DX1lDQ0NUTCwgMHgxKTsKKworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1NZTkNDVEwsIDEgPDwgVkVOQ19TWU5DQ1RMX09WRF9TSElGVCwKKwkJCVZFTkNfU1lOQ0NUTF9PVkQpOworCXZlbmNfd3JpdGUoc2QsIFZFTkNfVk1PRCwgMCk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwKKwkJCSgxIDw8IFZFTkNfVk1PRF9WSUVfU0hJRlQpLAorCQkJVkVOQ19WTU9EX1ZJRSk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwKKwkJCSgwIDw8IFZFTkNfVk1PRF9WTUQpLCBWRU5DX1ZNT0RfVk1EKTsKKwl2ZW5jX21vZGlmeShzZCwgVkVOQ19WTU9ELAorCQkJKDEgPDwgVkVOQ19WTU9EX1RWVFlQX1NISUZUKSwKKwkJCVZFTkNfVk1PRF9UVlRZUCk7CisJdmVuY193cml0ZShzZCwgVkVOQ19EQUNUU1QsIDB4MCk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwgVkVOQ19WTU9EX1ZFTkMsIFZFTkNfVk1PRF9WRU5DKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdmVuY19zZXRfNDgwcDU5Xzk0CisgKgorICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSB2aWRlbyBlbmNvZGVyIHRvIEVEVFYoNTI1cCkgY29tcG9uZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbnQgdmVuY19zZXRfNDgwcDU5Xzk0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHZlbmNfc3RhdGUgKnZlbmMgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IHZlbmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSB2ZW5jLT5wZGF0YTsKKworCXY0bDJfZGJnKGRlYnVnLCAyLCBzZCwgInZlbmNfc2V0XzQ4MHA1OV85NFxuIik7CisKKwkvKiBTZXR1cCBjbG9jayBhdCBWUFNTICYgVkVOQyBmb3IgU0QgKi8KKwlpZiAocGRhdGEtPnNldHVwX2Nsb2NrKFZQQkVfRU5DX0RWX1BSRVNFVCwgVjRMMl9EVl80ODBQNTlfOTQpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZW5jX2VuYWJsZWRpZ2l0YWxvdXRwdXQoc2QsIDApOworCisJdmVuY193cml0ZShzZCwgVkVOQ19PU0RDTEswLCAwKTsKKwl2ZW5jX3dyaXRlKHNkLCBWRU5DX09TRENMSzEsIDEpOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZEUFJPLCBWRU5DX1ZEUFJPX0RBRlJRLAorCQkgICAgVkVOQ19WRFBST19EQUZSUSk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVkRQUk8sIFZFTkNfVkRQUk9fREFVUFMsCisJCSAgICBWRU5DX1ZEUFJPX0RBVVBTKTsKKwl2ZW5jX3dyaXRlKHNkLCBWRU5DX1ZNT0QsIDApOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsICgxIDw8IFZFTkNfVk1PRF9WSUVfU0hJRlQpLAorCQkgICAgVkVOQ19WTU9EX1ZJRSk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwgVkVOQ19WTU9EX0hETUQsIFZFTkNfVk1PRF9IRE1EKTsKKwl2ZW5jX21vZGlmeShzZCwgVkVOQ19WTU9ELCAoSERUVl81MjVQIDw8IFZFTkNfVk1PRF9UVlRZUF9TSElGVCksCisJCSAgICBWRU5DX1ZNT0RfVFZUWVApOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsIFZFTkNfVk1PRF9WRE1EX1lDQkNSOCA8PAorCQkgICAgVkVOQ19WTU9EX1ZETURfU0hJRlQsIFZFTkNfVk1PRF9WRE1EKTsKKworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsIFZFTkNfVk1PRF9WRU5DLCBWRU5DX1ZNT0RfVkVOQyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZlbmNfc2V0XzYyNXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHZpZGVvIGVuY29kZXIgdG8gSERUVig2MjVwKSBjb21wb25lbnQgc2V0dGluZworICovCitzdGF0aWMgaW50IHZlbmNfc2V0XzU3NnA1MChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCB2ZW5jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gdmVuYy0+cGRhdGE7CisKKwl2NGwyX2RiZyhkZWJ1ZywgMiwgc2QsICJ2ZW5jX3NldF81NzZwNTBcbiIpOworCisJLyogU2V0dXAgY2xvY2sgYXQgVlBTUyAmIFZFTkMgZm9yIFNEICovCisJaWYgKHBkYXRhLT5zZXR1cF9jbG9jayhWUEJFX0VOQ19EVl9QUkVTRVQsIFY0TDJfRFZfNTc2UDUwKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmVuY19lbmFibGVkaWdpdGFsb3V0cHV0KHNkLCAwKTsKKworCXZlbmNfd3JpdGUoc2QsIFZFTkNfT1NEQ0xLMCwgMCk7CisJdmVuY193cml0ZShzZCwgVkVOQ19PU0RDTEsxLCAxKTsKKworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZEUFJPLCBWRU5DX1ZEUFJPX0RBRlJRLAorCQkgICAgVkVOQ19WRFBST19EQUZSUSk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVkRQUk8sIFZFTkNfVkRQUk9fREFVUFMsCisJCSAgICBWRU5DX1ZEUFJPX0RBVVBTKTsKKworCXZlbmNfd3JpdGUoc2QsIFZFTkNfVk1PRCwgMCk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwgKDEgPDwgVkVOQ19WTU9EX1ZJRV9TSElGVCksCisJCSAgICBWRU5DX1ZNT0RfVklFKTsKKwl2ZW5jX21vZGlmeShzZCwgVkVOQ19WTU9ELCBWRU5DX1ZNT0RfSERNRCwgVkVOQ19WTU9EX0hETUQpOworCXZlbmNfbW9kaWZ5KHNkLCBWRU5DX1ZNT0QsIChIRFRWXzYyNVAgPDwgVkVOQ19WTU9EX1RWVFlQX1NISUZUKSwKKwkJICAgIFZFTkNfVk1PRF9UVlRZUCk7CisKKwl2ZW5jX21vZGlmeShzZCwgVkVOQ19WTU9ELCBWRU5DX1ZNT0RfVkRNRF9ZQ0JDUjggPDwKKwkJICAgIFZFTkNfVk1PRF9WRE1EX1NISUZULCBWRU5DX1ZNT0RfVkRNRCk7CisJdmVuY19tb2RpZnkoc2QsIFZFTkNfVk1PRCwgVkVOQ19WTU9EX1ZFTkMsIFZFTkNfVk1PRF9WRU5DKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlbmNfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCit7CisJdjRsMl9kYmcoZGVidWcsIDEsIHNkLCAidmVuY19zX3N0ZF9vdXRwdXRcbiIpOworCisJaWYgKG5vcm0gJiBWNEwyX1NURF81MjVfNjApCisJCXJldHVybiB2ZW5jX3NldF9udHNjKHNkKTsKKwllbHNlIGlmIChub3JtICYgVjRMMl9TVERfNjI1XzUwKQorCQlyZXR1cm4gdmVuY19zZXRfcGFsKHNkKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZlbmNfc19kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKmR2X3ByZXNldCkKK3sKKwl2NGwyX2RiZyhkZWJ1ZywgMSwgc2QsICJ2ZW5jX3NfZHZfcHJlc2V0XG4iKTsKKworCWlmIChkdl9wcmVzZXQtPnByZXNldCA9PSBWNEwyX0RWXzU3NlA1MCkKKwkJcmV0dXJuIHZlbmNfc2V0XzU3NnA1MChzZCk7CisJZWxzZSBpZiAoZHZfcHJlc2V0LT5wcmVzZXQgPT0gVjRMMl9EVl80ODBQNTlfOTQpCisJCXJldHVybiB2ZW5jX3NldF80ODBwNTlfOTQoc2QpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmVuY19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGlucHV0LCB1MzIgb3V0cHV0LAorCQkJICB1MzIgY29uZmlnKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jID0gdG9fc3RhdGUoc2QpOworCWludCByZXQ7CisKKwl2NGwyX2RiZyhkZWJ1ZywgMSwgc2QsICJ2ZW5jX3Nfcm91dGluZ1xuIik7CisKKwlyZXQgPSB2ZW5jX3NldF9kYWMoc2QsIG91dHB1dCk7CisJaWYgKCFyZXQpCisJCXZlbmMtPm91dHB1dCA9IG91dHB1dDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBsb25nIHZlbmNfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXVuc2lnbmVkIGludCBjbWQsCisJCQl2b2lkICphcmcpCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWRU5DX0dFVF9GTEQ6CisJCXZhbCA9IHZlbmNfcmVhZChzZCwgVkVOQ19WU1RBVCk7CisJCSooKGludCAqKWFyZykgPSAoKHZhbCAmIFZFTkNfVlNUQVRfRklEU1QpID09CisJCVZFTkNfVlNUQVRfRklEU1QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGwyX2VycihzZCwgIldyb25nIElPQ1RMIGNtZFxuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZlbmNfY29yZV9vcHMgPSB7CisJLmlvY3RsICAgICAgPSB2ZW5jX2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgdmVuY192aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHZlbmNfc19yb3V0aW5nLAorCS5zX3N0ZF9vdXRwdXQgPSB2ZW5jX3Nfc3RkX291dHB1dCwKKwkuc19kdl9wcmVzZXQgPSB2ZW5jX3NfZHZfcHJlc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdmVuY19vcHMgPSB7CisJLmNvcmUgPSAmdmVuY19jb3JlX29wcywKKwkudmlkZW8gPSAmdmVuY192aWRlb19vcHMsCit9OworCitzdGF0aWMgaW50IHZlbmNfaW5pdGlhbGl6ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jID0gdG9fc3RhdGUoc2QpOworCWludCByZXQ7CisKKwkvKiBTZXQgZGVmYXVsdCB0byBvdXRwdXQgdG8gY29tcG9zaXRlIGFuZCBzdGQgdG8gTlRTQyAqLworCXZlbmMtPm91dHB1dCA9IDA7CisJdmVuYy0+c3RkID0gVjRMMl9TVERfNTI1XzYwOworCisJcmV0ID0gdmVuY19zX3JvdXRpbmcoc2QsIDAsIHZlbmMtPm91dHB1dCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJdjRsMl9lcnIoc2QsICJFcnJvciBzZXR0aW5nIG91dHB1dCBkdXJpbmcgaW5pdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHZlbmNfc19zdGRfb3V0cHV0KHNkLCB2ZW5jLT5zdGQpOworCWlmIChyZXQgPCAwKSB7CisJCXY0bDJfZXJyKHNkLCAiRXJyb3Igc2V0dGluZyBzdGQgZHVyaW5nIGluaXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZlbmNfZGV2aWNlX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB2ZW5jX3N0YXRlICoqdmVuYyA9IGRhdGE7CisKKwlpZiAoc3RyY21wKE1PRFVMRV9OQU1FLCBwZGV2LT5uYW1lKSA9PSAwKQorCQkqdmVuYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2NGwyX3N1YmRldiAqdmVuY19zdWJfZGV2X2luaXQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJY29uc3QgY2hhciAqdmVuY19uYW1lKQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jOworCWludCBlcnI7CisKKwllcnIgPSBidXNfZm9yX2VhY2hfZGV2KCZwbGF0Zm9ybV9idXNfdHlwZSwgTlVMTCwgJnZlbmMsCisJCQl2ZW5jX2RldmljZV9nZXQpOworCWlmICh2ZW5jID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJdjRsMl9zdWJkZXZfaW5pdCgmdmVuYy0+c2QsICZ2ZW5jX29wcyk7CisKKwlzdHJjcHkodmVuYy0+c2QubmFtZSwgdmVuY19uYW1lKTsKKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCAmdmVuYy0+c2QpIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwKKwkJCSJ2cGJlIHVuYWJsZSB0byByZWdpc3RlciB2ZW5jIHN1YiBkZXZpY2VcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHZlbmNfaW5pdGlhbGl6ZSgmdmVuYy0+c2QpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LAorCQkJInZwYmUgdmVuYyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJnZlbmMtPnNkOworfQorRVhQT1JUX1NZTUJPTCh2ZW5jX3N1Yl9kZXZfaW5pdCk7CisKK3N0YXRpYyBpbnQgdmVuY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2ZW5jX3N0YXRlICp2ZW5jOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwl2ZW5jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZlbmNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodmVuYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXZlbmMtPnBkZXYgPSAmcGRldi0+ZGV2OworCXZlbmMtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKE5VTEwgPT0gdmVuYy0+cGRhdGEpIHsKKwkJZGV2X2Vycih2ZW5jLT5wZGV2LCAiVW5hYmxlIHRvIGdldCBwbGF0Zm9ybSBkYXRhIGZvciIKKwkJCSIgVkVOQyBzdWIgZGV2aWNlIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9tZW07CisJfQorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2Vycih2ZW5jLT5wZGV2LAorCQkJIlVuYWJsZSB0byBnZXQgVkVOQyByZWdpc3RlciBhZGRyZXNzIG1hcFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9tZW07CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCAidmVuYyIpKSB7CisJCWRldl9lcnIodmVuYy0+cGRldiwgIlVuYWJsZSB0byByZXNlcnZlIFZFTkMgTU1JTyByZWdpb25cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfbWVtOworCX0KKworCXZlbmMtPnZlbmNfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghdmVuYy0+dmVuY19iYXNlKSB7CisJCWRldl9lcnIodmVuYy0+cGRldiwgIlVuYWJsZSB0byBtYXAgVkVOQyBJTyBzcGFjZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcmVsZWFzZV92ZW5jX21lbV9yZWdpb247CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnZlbmMtPmxvY2spOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHZlbmMpOworCWRldl9ub3RpY2UodmVuYy0+cGRldiwgIlZFTkMgc3ViIGRldmljZSBwcm9iZSBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKKworcmVsZWFzZV92ZW5jX21lbV9yZWdpb246CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZyZWVfbWVtOgorCWtmcmVlKHZlbmMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmVuY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdmVuY19zdGF0ZSAqdmVuYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpb3VubWFwKCh2b2lkICopdmVuYy0+dmVuY19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZSh2ZW5jKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZW5jX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdmVuY19wcm9iZSwKKwkucmVtb3ZlCQk9IHZlbmNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IE1PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCB2ZW5jX2luaXQodm9pZCkKK3sKKwlpZiAocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2ZW5jX2RyaXZlcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgdmVuYyBkcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZlbmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2ZW5jX2RyaXZlcik7CisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdCh2ZW5jX2luaXQpOworbW9kdWxlX2V4aXQodmVuY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWUEJFIFZFTkMgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfdmVuY19yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBiZV92ZW5jX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDdjYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwYmVfdmVuY19yZWdzLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaWZuZGVmIF9WUEJFX1ZFTkNfUkVHU19ICisjZGVmaW5lIF9WUEJFX1ZFTkNfUkVHU19ICisKKy8qIFZQQkUgVmlkZW8gRW5jb2RlciAvIERpZ2l0YWwgTENEIFN1YnN5c3RlbSBSZWdpc3RlcnMgKFZFTkMpICovCisjZGVmaW5lIFZFTkNfVk1PRAkJCQkweDAwCisjZGVmaW5lIFZFTkNfVklEQ1RMCQkJCTB4MDQKKyNkZWZpbmUgVkVOQ19WRFBSTwkJCQkweDA4CisjZGVmaW5lIFZFTkNfU1lOQ0NUTAkJCQkweDBDCisjZGVmaW5lIFZFTkNfSFNQTFMJCQkJMHgxMAorI2RlZmluZSBWRU5DX1ZTUExTCQkJCTB4MTQKKyNkZWZpbmUgVkVOQ19ISU5UCQkJCTB4MTgKKyNkZWZpbmUgVkVOQ19IU1RBUlQJCQkJMHgxQworI2RlZmluZSBWRU5DX0hWQUxJRAkJCQkweDIwCisjZGVmaW5lIFZFTkNfVklOVAkJCQkweDI0CisjZGVmaW5lIFZFTkNfVlNUQVJUCQkJCTB4MjgKKyNkZWZpbmUgVkVOQ19WVkFMSUQJCQkJMHgyQworI2RlZmluZSBWRU5DX0hTRExZCQkJCTB4MzAKKyNkZWZpbmUgVkVOQ19WU0RMWQkJCQkweDM0CisjZGVmaW5lIFZFTkNfWUNDQ1RMCQkJCTB4MzgKKyNkZWZpbmUgVkVOQ19SR0JDVEwJCQkJMHgzQworI2RlZmluZSBWRU5DX1JHQkNMUAkJCQkweDQwCisjZGVmaW5lIFZFTkNfTElORUNUTAkJCQkweDQ0CisjZGVmaW5lIFZFTkNfQ1VMTExJTkUJCQkJMHg0OAorI2RlZmluZSBWRU5DX0xDRE9VVAkJCQkweDRDCisjZGVmaW5lIFZFTkNfQlJUUwkJCQkweDUwCisjZGVmaW5lIFZFTkNfQlJUVwkJCQkweDU0CisjZGVmaW5lIFZFTkNfQUNDVEwJCQkJMHg1OAorI2RlZmluZSBWRU5DX1BXTVAJCQkJMHg1QworI2RlZmluZSBWRU5DX1BXTVcJCQkJMHg2MAorI2RlZmluZSBWRU5DX0RDTEtDVEwJCQkJMHg2NAorI2RlZmluZSBWRU5DX0RDTEtQVE4wCQkJCTB4NjgKKyNkZWZpbmUgVkVOQ19EQ0xLUFROMQkJCQkweDZDCisjZGVmaW5lIFZFTkNfRENMS1BUTjIJCQkJMHg3MAorI2RlZmluZSBWRU5DX0RDTEtQVE4zCQkJCTB4NzQKKyNkZWZpbmUgVkVOQ19EQ0xLUFROMEEJCQkJMHg3OAorI2RlZmluZSBWRU5DX0RDTEtQVE4xQQkJCQkweDdDCisjZGVmaW5lIFZFTkNfRENMS1BUTjJBCQkJCTB4ODAKKyNkZWZpbmUgVkVOQ19EQ0xLUFROM0EJCQkJMHg4NAorI2RlZmluZSBWRU5DX0RDTEtIUwkJCQkweDg4CisjZGVmaW5lIFZFTkNfRENMS0hTQQkJCQkweDhDCisjZGVmaW5lIFZFTkNfRENMS0hSCQkJCTB4OTAKKyNkZWZpbmUgVkVOQ19EQ0xLVlMJCQkJMHg5NAorI2RlZmluZSBWRU5DX0RDTEtWUgkJCQkweDk4CisjZGVmaW5lIFZFTkNfQ0FQQ1RMCQkJCTB4OUMKKyNkZWZpbmUgVkVOQ19DQVBETwkJCQkweEEwCisjZGVmaW5lIFZFTkNfQ0FQREUJCQkJMHhBNAorI2RlZmluZSBWRU5DX0FUUjAJCQkJMHhBOAorI2RlZmluZSBWRU5DX0FUUjEJCQkJMHhBQworI2RlZmluZSBWRU5DX0FUUjIJCQkJMHhCMAorI2RlZmluZSBWRU5DX1ZTVEFUCQkJCTB4QjgKKyNkZWZpbmUgVkVOQ19SQU1BRFIJCQkJMHhCQworI2RlZmluZSBWRU5DX1JBTVBPUlQJCQkJMHhDMAorI2RlZmluZSBWRU5DX0RBQ1RTVAkJCQkweEM0CisjZGVmaW5lIFZFTkNfWUNPTFZMCQkJCTB4QzgKKyNkZWZpbmUgVkVOQ19TQ1BST0cJCQkJMHhDQworI2RlZmluZSBWRU5DX0NWQlMJCQkJMHhEQworI2RlZmluZSBWRU5DX0NNUE5UCQkJCTB4RTAKKyNkZWZpbmUgVkVOQ19FVE1HMAkJCQkweEU0CisjZGVmaW5lIFZFTkNfRVRNRzEJCQkJMHhFOAorI2RlZmluZSBWRU5DX0VUTUcyCQkJCTB4RUMKKyNkZWZpbmUgVkVOQ19FVE1HMwkJCQkweEYwCisjZGVmaW5lIFZFTkNfREFDU0VMCQkJCTB4RjQKKyNkZWZpbmUgVkVOQ19BUkdCWDAJCQkJMHgxMDAKKyNkZWZpbmUgVkVOQ19BUkdCWDEJCQkJMHgxMDQKKyNkZWZpbmUgVkVOQ19BUkdCWDIJCQkJMHgxMDgKKyNkZWZpbmUgVkVOQ19BUkdCWDMJCQkJMHgxMEMKKyNkZWZpbmUgVkVOQ19BUkdCWDQJCQkJMHgxMTAKKyNkZWZpbmUgVkVOQ19EUkdCWDAJCQkJMHgxMTQKKyNkZWZpbmUgVkVOQ19EUkdCWDEJCQkJMHgxMTgKKyNkZWZpbmUgVkVOQ19EUkdCWDIJCQkJMHgxMUMKKyNkZWZpbmUgVkVOQ19EUkdCWDMJCQkJMHgxMjAKKyNkZWZpbmUgVkVOQ19EUkdCWDQJCQkJMHgxMjQKKyNkZWZpbmUgVkVOQ19WU1RBUlRBCQkJCTB4MTI4CisjZGVmaW5lIFZFTkNfT1NEQ0xLMAkJCQkweDEyQworI2RlZmluZSBWRU5DX09TRENMSzEJCQkJMHgxMzAKKyNkZWZpbmUgVkVOQ19IVkxEQ0wwCQkJCTB4MTM0CisjZGVmaW5lIFZFTkNfSFZMRENMMQkJCQkweDEzOAorI2RlZmluZSBWRU5DX09TREhBRFYJCQkJMHgxM0MKKyNkZWZpbmUgVkVOQ19DTEtDVEwJCQkJMHgxNDAKKyNkZWZpbmUgVkVOQ19HQU1DVEwJCQkJMHgxNDQKKyNkZWZpbmUgVkVOQ19YSElOVFZMCQkJCTB4MTc0CisKKy8qIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBWUEJFX1BDUl9WRU5DX0RJVgkJCSgxIDw8IDEpCisjZGVmaW5lIFZQQkVfUENSX0NMS19PRkYJCQkoMSA8PCAwKQorCisjZGVmaW5lIFZFTkNfVk1PRF9WRE1EX1NISUZUCQkJMTIKKyNkZWZpbmUgVkVOQ19WTU9EX1ZETURfWUNCQ1IxNgkJCTAKKyNkZWZpbmUgVkVOQ19WTU9EX1ZETURfWUNCQ1I4CQkJMQorI2RlZmluZSBWRU5DX1ZNT0RfVkRNRF9SR0I2NjYJCQkyCisjZGVmaW5lIFZFTkNfVk1PRF9WRE1EX1JHQjgJCQkzCisjZGVmaW5lIFZFTkNfVk1PRF9WRE1EX0VQU09OCQkJNAorI2RlZmluZSBWRU5DX1ZNT0RfVkRNRF9DQVNJTwkJCTUKKyNkZWZpbmUgVkVOQ19WTU9EX1ZETURfVURJU1BRVkdBCQk2CisjZGVmaW5lIFZFTkNfVk1PRF9WRE1EX1NUTkxDRAkJCTcKKyNkZWZpbmUgVkVOQ19WTU9EX1ZJRV9TSElGVAkJCTEKKyNkZWZpbmUgVkVOQ19WTU9EX1ZETUQJCQkJKDcgPDwgMTIpCisjZGVmaW5lIFZFTkNfVk1PRF9JVExDTAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgVkVOQ19WTU9EX0lUTEMJCQkJKDEgPDwgMTApCisjZGVmaW5lIFZFTkNfVk1PRF9OU0lUCQkJCSgxIDw8IDkpCisjZGVmaW5lIFZFTkNfVk1PRF9IRE1ECQkJCSgxIDw8IDgpCisjZGVmaW5lIFZFTkNfVk1PRF9UVlRZUF9TSElGVAkJCTYKKyNkZWZpbmUgVkVOQ19WTU9EX1RWVFlQCQkJCSgzIDw8IDYpCisjZGVmaW5lIFZFTkNfVk1PRF9TTEFWRQkJCQkoMSA8PCA1KQorI2RlZmluZSBWRU5DX1ZNT0RfVk1ECQkJCSgxIDw8IDQpCisjZGVmaW5lIFZFTkNfVk1PRF9CTE5LCQkJCSgxIDw8IDMpCisjZGVmaW5lIFZFTkNfVk1PRF9WSUUJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVkVOQ19WTU9EX1ZFTkMJCQkJKDEgPDwgMCkKKworLyogVk1PRCBUVlRZUCBvcHRpb25zIGZvciBIRE1EPTAgKi8KKyNkZWZpbmUgU0RUVl9OVFNDCQkJCTAKKyNkZWZpbmUgU0RUVl9QQUwJCQkJMQorLyogVk1PRCBUVlRZUCBvcHRpb25zIGZvciBIRE1EPTEgKi8KKyNkZWZpbmUgSERUVl81MjVQCQkJCTAKKyNkZWZpbmUgSERUVl82MjVQCQkJCTEKKyNkZWZpbmUgSERUVl8xMDgwSQkJCQkyCisjZGVmaW5lIEhEVFZfNzIwUAkJCQkzCisKKyNkZWZpbmUgVkVOQ19WSURDVExfVkNMS1AJCQkoMSA8PCAxNCkKKyNkZWZpbmUgVkVOQ19WSURDVExfVkNMS0VfU0hJRlQJCQkxMworI2RlZmluZSBWRU5DX1ZJRENUTF9WQ0xLRQkJCSgxIDw8IDEzKQorI2RlZmluZSBWRU5DX1ZJRENUTF9WQ0xLWl9TSElGVAkJCTEyCisjZGVmaW5lIFZFTkNfVklEQ1RMX1ZDTEtaCQkJKDEgPDwgMTIpCisjZGVmaW5lIFZFTkNfVklEQ1RMX1NZRElSX1NISUZUCQkJOAorI2RlZmluZSBWRU5DX1ZJRENUTF9TWURJUgkJCSgxIDw8IDgpCisjZGVmaW5lIFZFTkNfVklEQ1RMX0RPTURfU0hJRlQJCQk0CisjZGVmaW5lIFZFTkNfVklEQ1RMX0RPTUQJCQkoMyA8PCA0KQorI2RlZmluZSBWRU5DX1ZJRENUTF9ZQ0RJUl9TSElGVAkJCTAKKyNkZWZpbmUgVkVOQ19WSURDVExfWUNESVIJCQkoMSA8PCAwKQorCisjZGVmaW5lIFZFTkNfVkRQUk9fQVRZQ0NfU0hJRlQJCQk1CisjZGVmaW5lIFZFTkNfVkRQUk9fQVRZQ0MJCQkoMSA8PCA1KQorI2RlZmluZSBWRU5DX1ZEUFJPX0FUQ09NX1NISUZUCQkJNAorI2RlZmluZSBWRU5DX1ZEUFJPX0FUQ09NCQkJKDEgPDwgNCkKKyNkZWZpbmUgVkVOQ19WRFBST19EQUZSUQkJCSgxIDw8IDMpCisjZGVmaW5lIFZFTkNfVkRQUk9fREFVUFMJCQkoMSA8PCAyKQorI2RlZmluZSBWRU5DX1ZEUFJPX0NVUFMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVkVOQ19WRFBST19ZVVBTCQkJCSgxIDw8IDApCisKKyNkZWZpbmUgVkVOQ19TWU5DQ1RMX1ZQTF9TSElGVAkJCTMKKyNkZWZpbmUgVkVOQ19TWU5DQ1RMX1ZQTAkJCSgxIDw8IDMpCisjZGVmaW5lIFZFTkNfU1lOQ0NUTF9IUExfU0hJRlQJCQkyCisjZGVmaW5lIFZFTkNfU1lOQ0NUTF9IUEwJCQkoMSA8PCAyKQorI2RlZmluZSBWRU5DX1NZTkNDVExfU1lFVl9TSElGVAkJCTEKKyNkZWZpbmUgVkVOQ19TWU5DQ1RMX1NZRVYJCQkoMSA8PCAxKQorI2RlZmluZSBWRU5DX1NZTkNDVExfU1lFSF9TSElGVAkJCTAKKyNkZWZpbmUgVkVOQ19TWU5DQ1RMX1NZRUgJCQkoMSA8PCAwKQorI2RlZmluZSBWRU5DX1NZTkNDVExfT1ZEX1NISUZUCQkJMTQKKyNkZWZpbmUgVkVOQ19TWU5DQ1RMX09WRAkJCSgxIDw8IDE0KQorCisjZGVmaW5lIFZFTkNfRENMS0NUTF9EQ0tFQ19TSElGVAkJMTEKKyNkZWZpbmUgVkVOQ19EQ0xLQ1RMX0RDS0VDCQkJKDEgPDwgMTEpCisjZGVmaW5lIFZFTkNfRENMS0NUTF9EQ0tQV19TSElGVAkJMAorI2RlZmluZSBWRU5DX0RDTEtDVExfRENLUFcJCQkoMHgzZiA8PCAwKQorCisjZGVmaW5lIFZFTkNfVlNUQVRfRklEU1QJCQkoMSA8PCA0KQorCisjZGVmaW5lIFZFTkNfQ01QTlRfTVJHQl9TSElGVAkJCTE0CisjZGVmaW5lIFZFTkNfQ01QTlRfTVJHQgkJCQkoMSA8PCAxNCkKKworI2VuZGlmCQkJCS8qIF9WUEJFX1ZFTkNfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmMKaW5kZXggZDkzYWQ3NC4uNDllNGRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KQEAgLTQ0LDYgKzQzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFZQSUYgQ2FwdHVyZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZQSUZfQ0FQVFVSRV9WRVJTSU9OKTsKIAogI2RlZmluZSB2cGlmX2VycihmbXQsIGFyZy4uLikJdjRsMl9lcnIoJnZwaWZfb2JqLnY0bDJfZGV2LCBmbXQsICMjIGFyZykKICNkZWZpbmUgdnBpZl9kYmcobGV2ZWwsIGRlYnVnLCBmbXQsIGFyZy4uLikJXApAQCAtMTY3Nyw3ICsxNjc3LDYgQEAKIHsKIAlzdHJ1Y3QgdnBpZl9jYXB0dXJlX2NvbmZpZyAqY29uZmlnID0gdnBpZl9kZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQljYXAtPnZlcnNpb24gPSBWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAidnBpZiBjYXB0dXJlIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmJ1c19pbmZvLCAiRE02NDZ4IFBsYXRmb3JtIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKQEAgLTIyMTEsMTAgKzIyMTAsOCBAQAogCQl2ZmQtPnY0bDJfZGV2ID0gJnZwaWZfb2JqLnY0bDJfZGV2OwogCQl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwKLQkJCSAiRE02NDZ4X1ZQSUZDYXB0dXJlX0RSSVZFUl9WJWQuJWQuJWQiLAotCQkJIChWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JCQkgKFZQSUZfQ0FQVFVSRV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAotCQkJIChWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFKSAmIDB4ZmYpOworCQkJICJETTY0NnhfVlBJRkNhcHR1cmVfRFJJVkVSX1YlcyIsCisJCQkgVlBJRl9DQVBUVVJFX1ZFUlNJT04pOwogCQkvKiBTZXQgdmlkZW9fZGV2IHRvIHRoZSB2aWRlbyBkZXZpY2UgKi8KIAkJY2gtPnZpZGVvX2RldiA9IHZmZDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9jYXB0dXJlLmgKaW5kZXggN2E0MTk2ZC4uMDY0NTUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfY2FwdHVyZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2NhcHR1cmUuaApAQCAtMjMsNyArMjMsNiBAQAogCiAvKiBIZWFkZXIgZmlsZXMgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KQEAgLTMzLDExICszMiw3IEBACiAjaW5jbHVkZSAidnBpZi5oIgogCiAvKiBNYWNyb3MgKi8KLSNkZWZpbmUgVlBJRl9NQUpPUl9SRUxFQVNFCQkwCi0jZGVmaW5lIFZQSUZfTUlOT1JfUkVMRUFTRQkJMAotI2RlZmluZSBWUElGX0JVSUxECQkJMQotI2RlZmluZSBWUElGX0NBUFRVUkVfVkVSU0lPTl9DT0RFCSgoVlBJRl9NQUpPUl9SRUxFQVNFIDw8IDE2KSB8IFwKLQkoVlBJRl9NSU5PUl9SRUxFQVNFIDw8IDgpIHwgVlBJRl9CVUlMRCkKKyNkZWZpbmUgVlBJRl9DQVBUVVJFX1ZFUlNJT04JCSIwLjAuMiIKIAogI2RlZmluZSBWUElGX1ZBTElEX0ZJRUxEKGZpZWxkKQkJKCgoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHx8IFwKIAkoVjRMMl9GSUVMRF9OT05FID09IGZpZWxkKSkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5jCmluZGV4IGNkZjY1OWEuLjI4NmYwMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC00Nyw2ICs0Niw3IEBACiAKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgRGFWaW5jaSBWUElGIERpc3BsYXkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihWUElGX0RJU1BMQVlfVkVSU0lPTik7CiAKICNkZWZpbmUgRE02NDZYX1Y0TDJfU1REIChWNEwyX1NURF81MjVfNjAgfCBWNEwyX1NURF82MjVfNTApCiAKQEAgLTcwMSw3ICs3MDEsNiBAQAogewogCXN0cnVjdCB2cGlmX2Rpc3BsYXlfY29uZmlnICpjb25maWcgPSB2cGlmX2Rldi0+cGxhdGZvcm1fZGF0YTsKIAotCWNhcC0+dmVyc2lvbiA9IFZQSUZfRElTUExBWV9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAJc3RybGNweShjYXAtPmRyaXZlciwgInZwaWYgZGlzcGxheSIsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIlBsYXRmb3JtIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKQEAgLTE3NDAsMTAgKzE3MzksOCBAQAogCQl2ZmQtPnY0bDJfZGV2ID0gJnZwaWZfb2JqLnY0bDJfZGV2OwogCQl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwKLQkJCSAiRE02NDZ4X1ZQSUZEaXNwbGF5X0RSSVZFUl9WJWQuJWQuJWQiLAotCQkJIChWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFID4+IDE2KSAmIDB4ZmYsCi0JCQkgKFZQSUZfRElTUExBWV9WRVJTSU9OX0NPREUgPj4gOCkgJiAweGZmLAotCQkJIChWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFKSAmIDB4ZmYpOworCQkJICJETTY0NnhfVlBJRkRpc3BsYXlfRFJJVkVSX1YlcyIsCisJCQkgVlBJRl9ESVNQTEFZX1ZFUlNJT04pOwogCiAJCS8qIFNldCB2aWRlb19kZXYgdG8gdGhlIHZpZGVvIGRldmljZSAqLwogCQljaC0+dmlkZW9fZGV2ID0gdmZkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwaWZfZGlzcGxheS5oCmluZGV4IGI1M2FhYTguLjVkMTkzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGlmX2Rpc3BsYXkuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBpZl9kaXNwbGF5LmgKQEAgLTE4LDcgKzE4LDYgQEAKIAogLyogSGVhZGVyIGZpbGVzICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1jb3JlLmg+CkBAIC0yNywxMiArMjYsNyBAQAogI2luY2x1ZGUgInZwaWYuaCIKIAogLyogTWFjcm9zICovCi0jZGVmaW5lIFZQSUZfTUFKT1JfUkVMRUFTRQkoMCkKLSNkZWZpbmUgVlBJRl9NSU5PUl9SRUxFQVNFCSgwKQotI2RlZmluZSBWUElGX0JVSUxECQkoMSkKLQotI2RlZmluZSBWUElGX0RJU1BMQVlfVkVSU0lPTl9DT0RFIFwKLQkoKFZQSUZfTUFKT1JfUkVMRUFTRSA8PCAxNikgfCAoVlBJRl9NSU5PUl9SRUxFQVNFIDw8IDgpIHwgVlBJRl9CVUlMRCkKKyNkZWZpbmUgVlBJRl9ESVNQTEFZX1ZFUlNJT04JIjAuMC4yIgogCiAjZGVmaW5lIFZQSUZfVkFMSURfRklFTEQoZmllbGQpIFwKIAkoKChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgfHwgKFY0TDJfRklFTERfTk9ORSA9PSBmaWVsZCkpIHx8IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCmluZGV4IDNjYjc4ZjIuLjI4MWVlNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZwpAQCAtMyw3ICszLDYgQEAKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlkZXBlbmRzIG9uIFJDX0NPUkUKIAlzZWxlY3QgVklERU9CVUZfVk1BTExPQwogCXNlbGVjdCBWSURFT19TQUE3MTFYIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1RWUDUxNTAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KQEAgLTQwLDcgKzM5LDE4IEBACiAJc2VsZWN0IERWQl9TOTIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9EUlhEIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWEQyODIwUiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfRFJYSyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTgyNzFDMkREIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IFZJREVPQlVGX0RWQgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBFbXBpYXRlY2ggZW0yOHh4IGNoaXBzLgorCitjb25maWcgVklERU9fRU0yOFhYX1JDCisgICAgICAgIGJvb2wgIkVNMjhYWCBSZW1vdGUgQ29udHJvbGxlciBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIFJDX0NPUkUKKyAgICAgICAgZGVwZW5kcyBvbiBWSURFT19FTTI4WFgKKyAgICAgICAgZGVwZW5kcyBvbiAhKFJDX0NPUkU9bSAmJiBWSURFT19FTTI4WFg9eSkKKyAgICAgICAgZGVmYXVsdCB5CisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGVzIFJlbW90ZSBDb250cm9sbGVyIHN1cHBvcnQgb24gZW0yOHh4IGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKaW5kZXggZDBmMDkzZC4uMzhhYWEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvTWFrZWZpbGUKQEAgLTEsNSArMSw3IEBACi1lbTI4eHgtb2JqcyAgICAgOj0gZW0yOHh4LXZpZGVvLm8gZW0yOHh4LWkyYy5vIGVtMjh4eC1jYXJkcy5vIGVtMjh4eC1jb3JlLm8gXAotCQkgICBlbTI4eHgtaW5wdXQubyBlbTI4eHgtdmJpLm8KK2VtMjh4eC15IDo9CWVtMjh4eC12aWRlby5vIGVtMjh4eC1pMmMubyBlbTI4eHgtY2FyZHMubworZW0yOHh4LXkgKz0JZW0yOHh4LWNvcmUubyAgZW0yOHh4LXZiaS5vCisKK2VtMjh4eC0kKENPTkZJR19WSURFT19FTTI4WFhfUkMpICs9IGVtMjh4eC1pbnB1dC5vCiAKIGVtMjh4eC1hbHNhLW9ianMgOj0gZW0yOHh4LWF1ZGlvLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCAzYzQ4YTcyLi5jZmYwNzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtMyw5ICszLDkgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KICAqCS0gUG9ydCB0byB3b3JrIHdpdGggdGhlIGluLWtlcm5lbCBkcml2ZXIKLSAqCS0gU2V2ZXJhbCBjbGVhbnVwcworICoJLSBDbGVhbnVwcywgZml4ZXMsIGFsc2EtY29udHJvbHMsIGV0Yy4KICAqCiAgKiAgVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gbXkgcHJldmlvdXMgYXU2MDAgdXNiIHBzdG4gYXVkaW8gZHJpdmVyCiAgKiAgYW5kIGluaGVyaXRzIGFsbCB0aGUgY29weXJpZ2h0cwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAKQEAgLTIxMiw5ICsyMTMsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX0FVRElPX0JVRlM7IGkrKykgewogCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5hZGV2LnVyYltpXSwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnJDb2RlKSB7CisJCQllbTI4eHhfZXJyZGV2KCJzdWJtaXQgb2YgYXVkaW8gdXJiIGZhaWxlZFxuIik7CiAJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKKwkJCWF0b21pY19zZXQoJmRldi0+c3RyZWFtX3N0YXJ0ZWQsIDApOwogCQkJcmV0dXJuIGVyckNvZGU7CiAJCX0KKwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1LDYgKzI0OSw3IEBACiAJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CiAJCVNORFJWX1BDTV9JTkZPX01NQVAgICAgICAgICAgIHwKIAkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgICAgfAorCQlTTkRSVl9QQ01fSU5GT19CQVRDSAkgICAgICB8CiAJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCiAKIAkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLApAQCAtMjc2LDI0ICsyODEsMjcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogU2V0cyB2b2x1bWUsIG11dGUsIGV0YyAqLwotCi0JZGV2LT5tdXRlID0gMDsKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCXJldCA9IGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyOwotCiAJcnVudGltZS0+aHcgPSBzbmRfZW0yOHh4X2h3X2NhcHR1cmU7Ci0JaWYgKGRldi0+YWx0ID09IDAgJiYgZGV2LT5hZGV2LnVzZXJzID09IDApIHsKLQkJaW50IGVyckNvZGU7Ci0JCWRldi0+YWx0ID0gNzsKLQkJZHByaW50aygiY2hhbmdpbmcgYWx0ZXJuYXRlIG51bWJlciB0byA3XG4iKTsKLQkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dWRldiwgMCwgNyk7Ci0JfQorCWlmICgoZGV2LT5hbHQgPT0gMCB8fCBkZXYtPmF1ZGlvX2lmbnVtKSAmJiBkZXYtPmFkZXYudXNlcnMgPT0gMCkgeworCQlpZiAoZGV2LT5hdWRpb19pZm51bSkKKwkJCWRldi0+YWx0ID0gMTsKKwkJZWxzZQorCQkJZGV2LT5hbHQgPSA3OwogCi0JZGV2LT5hZGV2LnVzZXJzKys7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlkcHJpbnRrKCJjaGFuZ2luZyBhbHRlcm5hdGUgbnVtYmVyIG9uIGludGVyZmFjZSAlZCB0byAlZFxuIiwKKwkJCWRldi0+YXVkaW9faWZudW0sIGRldi0+YWx0KTsKKwkJdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51ZGV2LCBkZXYtPmF1ZGlvX2lmbnVtLCBkZXYtPmFsdCk7CisKKwkJLyogU2V0cyB2b2x1bWUsIG11dGUsIGV0YyAqLworCQlkZXYtPm11dGUgPSAwOworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlyZXQgPSBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWRldi0+YWRldi51c2VycysrOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJfQogCiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCWRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC0zNDIsNiArMzUwLDggQEAKIAogCXJldCA9IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAogCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOwogCXJhdGUgPSBwYXJhbXNfcmF0ZShod19wYXJhbXMpOwogCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcyk7CkBAIC0zOTMsMjAgKzQwMywyNCBAQAogCQkJCSAgICAgIGludCBjbWQpCiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAKIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJCWF0b21pY19zZXQoJmRldi0+c3RyZWFtX3N0YXJ0ZWQsIDEpOwogCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQlhdG9taWNfc2V0KCZkZXYtPnN0cmVhbV9zdGFydGVkLCAxKTsKKwkJYXRvbWljX3NldCgmZGV2LT5zdHJlYW1fc3RhcnRlZCwgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQogCXNjaGVkdWxlX3dvcmsoJmRldi0+d3FfdHJpZ2dlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9lbTI4eHhfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQpAQCAtNDMyLDYgKzQ0NiwxNzkgQEAKIAlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwogfQogCisvKgorICogQUM5NyB2b2x1bWUgY29udHJvbCBzdXBwb3J0CisgKi8KK3N0YXRpYyBpbnQgZW0yOHh4X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJaW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAweDFmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXUxNiB2YWwgPSAoMHgxZiAtICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDB4MWYpKSB8CisJCSAgKDB4MWYgLSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJiAweDFmKSkgPDwgODsKKwlpbnQgcmM7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gZW0yOHh4X3JlYWRfYWM5NyhkZXYsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKKworCXZhbCB8PSByYyAmIDB4ODAwMDsJLyogUHJlc2VydmUgdGhlIG11dGUgZmxhZyAqLworCisJcmMgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlLCB2YWwpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJZHByaW50aygiJXNsZWZ0IHZvbCAlZCwgcmlnaHQgdm9sICVkICgweCUwNHgpIHRvIGFjOTcgdm9sdW1lIGNvbnRyb2wgMHglMDR4XG4iLAorCQkodmFsICYgMHg4MDAwKSA/ICJtdXRlZCAiIDogIiIsCisJCTB4MWYgLSAoKHZhbCA+PiA4KSAmIDB4MWYpLCAweDFmIC0gKHZhbCAmIDB4MWYpLAorCQl2YWwsIChpbnQpa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOworCitlcnI6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBlbTI4eHhfdm9sX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHZhbDsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJdmFsID0gZW0yOHh4X3JlYWRfYWM5NyhkZXYsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwlkcHJpbnRrKCIlc2xlZnQgdm9sICVkLCByaWdodCB2b2wgJWQgKDB4JTA0eCkgZnJvbSBhYzk3IHZvbHVtZSBjb250cm9sIDB4JTA0eFxuIiwKKwkJKHZhbCAmIDB4ODAwMCkgPyAibXV0ZWQgIiA6ICIiLAorCQkweDFmIC0gKCh2YWwgPj4gOCkgJiAweDFmKSwgMHgxZiAtICh2YWwgJiAweDFmKSwKKwkJdmFsLCAoaW50KWtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gMHgxZiAtICh2YWwgJiAweDFmKTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IDB4MWYgLSAoKHZhbCA8PCA4KSAmIDB4MWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X3ZvbF9wdXRfbXV0ZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdTE2IHZhbCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWludCByYzsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmMgPSBlbTI4eHhfcmVhZF9hYzk3KGRldiwga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJaWYgKHZhbCkKKwkJcmMgJj0gMHgxZjFmOworCWVsc2UKKwkJcmMgfD0gMHg4MDAwOworCisJcmMgPSBlbTI4eHhfd3JpdGVfYWM5NyhkZXYsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlLCByYyk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CisKKwlkcHJpbnRrKCIlc2xlZnQgdm9sICVkLCByaWdodCB2b2wgJWQgKDB4JTA0eCkgdG8gYWM5NyB2b2x1bWUgY29udHJvbCAweCUwNHhcbiIsCisJCSh2YWwgJiAweDgwMDApID8gIm11dGVkICIgOiAiIiwKKwkJMHgxZiAtICgodmFsID4+IDgpICYgMHgxZiksIDB4MWYgLSAodmFsICYgMHgxZiksCisJCXZhbCwgKGludClrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CisKK2VycjoKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGVtMjh4eF92b2xfZ2V0X211dGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCB2YWw7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXZhbCA9IGVtMjh4eF9yZWFkX2FjOTcoZGV2LCBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJaWYgKHZhbCAmIDB4ODAwMCkKKwkJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAwOworCWVsc2UKKwkJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAxOworCisJZHByaW50aygiJXNsZWZ0IHZvbCAlZCwgcmlnaHQgdm9sICVkICgweCUwNHgpIGZyb20gYWM5NyB2b2x1bWUgY29udHJvbCAweCUwNHhcbiIsCisJCSh2YWwgJiAweDgwMDApID8gIm11dGVkICIgOiAiIiwKKwkJMHgxZiAtICgodmFsID4+IDgpICYgMHgxZiksIDB4MWYgLSAodmFsICYgMHgxZiksCisJCXZhbCwgKGludClrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVtMjh4eF9kYl9zY2FsZSwgLTM0NTAsIDE1MCwgMCk7CisKK3N0YXRpYyBpbnQgZW0yOHh4X2N2b2xfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGVtMjh4eCAqZGV2LAorCQkJICAgY2hhciAqbmFtZSwgaW50IGlkKQoreworCWludCBlcnI7CisJY2hhciBjdGxfbmFtZVs0NF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0bXA7CisKKwltZW1zZXQgKCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl0bXAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwl0bXAucHJpdmF0ZV92YWx1ZSA9IGlkLAorCXRtcC5uYW1lICA9IGN0bF9uYW1lLAorCisJLyogQWRkIE11dGUgQ29udHJvbCAqLworCXNwcmludGYoY3RsX25hbWUsICIlcyBTd2l0Y2giLCBuYW1lKTsKKwl0bXAuZ2V0ICA9IGVtMjh4eF92b2xfZ2V0X211dGU7CisJdG1wLnB1dCAgPSBlbTI4eHhfdm9sX3B1dF9tdXRlOworCXRtcC5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbzsKKwlrY3RsID0gc25kX2N0bF9uZXcxKCZ0bXAsIGRldik7CisJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwga2N0bCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZHByaW50aygiQWRkZWQgY29udHJvbCAlcyBmb3IgYWM5NyB2b2x1bWUgY29udHJvbCAweCUwNHhcbiIsCisJCWN0bF9uYW1lLCBpZCk7CisKKwltZW1zZXQgKCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl0bXAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwl0bXAucHJpdmF0ZV92YWx1ZSA9IGlkLAorCXRtcC5uYW1lICA9IGN0bF9uYW1lLAorCisJLyogQWRkIFZvbHVtZSBDb250cm9sICovCisJc3ByaW50ZihjdGxfbmFtZSwgIiVzIFZvbHVtZSIsIG5hbWUpOworCXRtcC5nZXQgICA9IGVtMjh4eF92b2xfZ2V0OworCXRtcC5wdXQgICA9IGVtMjh4eF92b2xfcHV0OworCXRtcC5pbmZvICA9IGVtMjh4eF92b2xfaW5mbzsKKwl0bXAudGx2LnAgPSBlbTI4eHhfZGJfc2NhbGUsCisJa2N0bCA9IHNuZF9jdGxfbmV3MSgmdG1wLCBkZXYpOworCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjdGwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWRwcmludGsoIkFkZGVkIGNvbnRyb2wgJXMgZm9yIGFjOTcgdm9sdW1lIGNvbnRyb2wgMHglMDR4XG4iLAorCQljdGxfbmFtZSwgaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWdpc3Rlci91bnJlZ2lzdGVyIGNvZGUgYW5kIGRhdGEKKyAqLwogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfZW0yOHh4X3BjbV9jYXB0dXJlID0gewogCS5vcGVuICAgICAgPSBzbmRfZW0yOHh4X2NhcHR1cmVfb3BlbiwKIAkuY2xvc2UgICAgID0gc25kX2VtMjh4eF9wY21fY2xvc2UsCkBAIC00NTIsMTcgKzYzOSwxNyBAQAogCXN0YXRpYyBpbnQgICAgICAgICAgZGV2bnI7CiAJaW50ICAgICAgICAgICAgICAgICBlcnI7CiAKLQlpZiAoZGV2LT5oYXNfYWxzYV9hdWRpbyAhPSAxKSB7CisJaWYgKCFkZXYtPmhhc19hbHNhX2F1ZGlvIHx8IGRldi0+YXVkaW9faWZudW0gPCAwKSB7CiAJCS8qIFRoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGV4dGVuc2lvbiAoaW4gdGhpcyBjYXNlCiAJCSAgIHRoZSBkZXZpY2UgaXMgZXhwZWN0aW5nIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZSBvcgogCQkgICBkb2Vzbid0IGhhdmUgYW5hbG9nIGF1ZGlvIHN1cHBvcnQgYXQgYWxsKSAqLwogCQlyZXR1cm4gMDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJlbTI4eHgtYXVkaW8uYzogcHJvYmluZyBmb3IgZW0yOHgxICIKLQkJCSAibm9uIHN0YW5kYXJkIHVzYmF1ZGlvXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJlbTI4eHgtYXVkaW8uYzogcHJvYmluZyBmb3IgZW0yOHh4IEF1ZGlvIFZlbmRvciBDbGFzc1xuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZW0yOHh4LWF1ZGlvLmM6IENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgIgogCQkJICJSZWNoYmVyZ2VyXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJlbTI4eHgtYXVkaW8uYzogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiXG4iKTsKIAogCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZucl0sICJFbTI4eHggQXVkaW8iLCBUSElTX01PRFVMRSwgMCwKIAkJCSAgICAgICZjYXJkKTsKQEAgLTQ4OCw2ICs2NzUsMjIgQEAKIAogCUlOSVRfV09SSygmZGV2LT53cV90cmlnZ2VyLCBhdWRpb190cmlnZ2VyKTsKIAorCWlmIChkZXYtPmF1ZGlvX21vZGUuYWM5NyAhPSBFTTI4WFhfTk9fQUM5NykgeworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiVmlkZW8iLCBBQzk3X1ZJREVPX1ZPTCk7CisJCWVtMjh4eF9jdm9sX25ldyhjYXJkLCBkZXYsICJMaW5lIEluIiwgQUM5N19MSU5FSU5fVk9MKTsKKwkJZW0yOHh4X2N2b2xfbmV3KGNhcmQsIGRldiwgIlBob25lIiwgQUM5N19QSE9ORV9WT0wpOworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiTWljcm9waG9uZSIsIEFDOTdfUEhPTkVfVk9MKTsKKwkJZW0yOHh4X2N2b2xfbmV3KGNhcmQsIGRldiwgIkNEIiwgQUM5N19DRF9WT0wpOworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiQVVYIiwgQUM5N19BVVhfVk9MKTsKKwkJZW0yOHh4X2N2b2xfbmV3KGNhcmQsIGRldiwgIlBDTSIsIEFDOTdfUENNX09VVF9WT0wpOworCisJCWVtMjh4eF9jdm9sX25ldyhjYXJkLCBkZXYsICJNYXN0ZXIiLCBBQzk3X01BU1RFUl9WT0wpOworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiTGluZSIsIEFDOTdfTElORV9MRVZFTF9WT0wpOworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiTW9ubyIsIEFDOTdfTUFTVEVSX01PTk9fVk9MKTsKKwkJZW0yOHh4X2N2b2xfbmV3KGNhcmQsIGRldiwgIkxGRSIsIEFDOTdfTEZFX01BU1RFUl9WT0wpOworCQllbTI4eHhfY3ZvbF9uZXcoY2FyZCwgZGV2LCAiU3Vycm91bmQiLCBBQzk3X1NVUlJfTUFTVEVSX1ZPTCk7CisJfQorCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTUzOCw3ICs3NDEsNyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPiIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRW0yOHh4IEF1ZGlvIGRyaXZlciIpOwogCiBtb2R1bGVfaW5pdChlbTI4eHhfYWxzYV9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDRlMzczNzUuLjNlMzk1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yODksNyArMjg5LDcgQEAKIAl7CS0xLAkJLTEsCS0xLAktMX0sCiB9OwogCi0vKiAyMDEzOjAyNGYgUENUViBTeXN0ZW1zIG5hbm9TdGljayBUMiAyOTBlCisvKiAyMDEzOjAyNGYgUENUViBuYW5vU3RpY2sgVDIgMjkwZQogICogR1BJT182IC0gZGVtb2QgcmVzZXQKICAqIEdQSU9fNyAtIExFRAogICovCkBAIC0zMDAsNiArMzAwLDIzIEBACiAJey0xLAkJCS0xLAktMSwJCS0xfSwKIH07CiAKKyNpZiAwCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIHRlcnJhdGVjX2g1X2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAkweGZmLAkweGZmLAkxMH0sCisJe0VNMjg3NF9SODBfR1BJTywJMHhmNiwJMHhmZiwJMTAwfSwKKwl7RU0yODc0X1I4MF9HUElPLAkweGYyLAkweGZmLAk1MH0sCisJe0VNMjg3NF9SODBfR1BJTywJMHhmNiwJMHhmZiwJNTB9LAorCXsgLTEsCQkJLTEsCS0xLAktMX0sCit9OworCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIHRlcnJhdGVjX2g1X2RpZ2l0YWxbXSA9IHsKKwl7RU0yODc0X1I4MF9HUElPLAkweGY2LAkweGZmLAkxMH0sCisJe0VNMjg3NF9SODBfR1BJTywJMHhlNiwJMHhmZiwJMTAwfSwKKwl7RU0yODc0X1I4MF9HUElPLAkweGE2LAkweGZmLAkxMH0sCisJeyAtMSwJCQktMSwJLTEsCS0xfSwKK307CisjZW5kaWYKKwogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwogICovCkBAIC04NDMsNiArODYwLDE5IEBACiAJCQkuZ3BpbyAgICAgPSB0ZXJyYXRlY19jaW5lcmd5X1VTQl9YU19GUl9hbmFsb2csCiAJCX0gfSwKIAl9LAorCVtFTTI4ODRfQk9BUkRfVEVSUkFURUNfSDVdID0geworCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSDUiLAorCQkuaGFzX2R2YiAgICAgID0gMSwKKyNpZiAwCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS50dW5lcl9hZGRyICAgPSAweDQxLAorCQkuZHZiX2dwaW8gICAgID0gdGVycmF0ZWNfaDVfZGlnaXRhbCwgLyogRklYTUU6IHByb2JhYmx5IHdyb25nICovCisJCS50dW5lcl9ncGlvICAgPSB0ZXJyYXRlY19oNV9ncGlvLAorI2VuZGlmCisJCS5pMmNfc3BlZWQgICAgPSBFTTI4NzRfSTJDX1NFQ09OREFSWV9CVVNfU0VMRUNUIHwKKwkJCQlFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8CisJCQkJRU0yOFhYX0kyQ19GUkVRXzQwMF9LSFosCisJfSwKIAlbRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCIsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCkBAIC0xMjU5LDcgKzEyODksNyBAQAogCQl9IH0sCiAJfSwKIAotCVtFTTI4NzRfTEVBREVSU0hJUF9JU0RCVF0gPSB7CisJW0VNMjg3NF9CT0FSRF9MRUFERVJTSElQX0lTREJUXSA9IHsKIAkJLmkyY19zcGVlZCAgICAgID0gRU0yODc0X0kyQ19TRUNPTkRBUllfQlVTX1NFTEVDVCB8CiAJCQkJICBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8CiAJCQkJICBFTTI4WFhfSTJDX0ZSRVFfMTAwX0tIWiwKQEAgLTEzMTksNyArMTM0OSw2IEBACiAJfSwKIAlbRU0yODgwX0JPQVJEX0tXT1JMRF9EVkJfMzA1VV0gPSB7CiAJCS5uYW1lCSAgICAgID0gIktXb3JsZCBEVkItVCAzMDVVIiwKLQkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCkBAIC0xNzcwLDE2ICsxNzk5LDE2IEBACiAJCS5kdmJfZ3BpbyAgID0ga3dvcmxkX2EzNDBfZGlnaXRhbCwKIAkJLnR1bmVyX2dwaW8gPSBkZWZhdWx0X3R1bmVyX2dwaW8sCiAJfSwKLQkvKiAyMDEzOjAyNGYgUENUViBTeXN0ZW1zIG5hbm9TdGljayBUMiAyOTBlLgorCS8qIDIwMTM6MDI0ZiBQQ1RWIG5hbm9TdGljayBUMiAyOTBlLgogCSAqIEVtcGlhIEVNMjgxNzQsIFNvbnkgQ1hEMjgyMFIgYW5kIE5YUCBUREExODI3MUhEL0MyICovCiAJW0VNMjgxNzRfQk9BUkRfUENUVl8yOTBFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgPSAiUENUViBuYW5vU3RpY2sgVDIgMjkwZSIsCiAJCS5pMmNfc3BlZWQgICAgICA9IEVNMjg3NF9JMkNfU0VDT05EQVJZX0JVU19TRUxFQ1QgfAogCQkJRU0yOFhYX0kyQ19DTEtfV0FJVF9FTkFCTEUgfCBFTTI4WFhfSTJDX0ZSRVFfMTAwX0tIWiwKLQkJLnhjbGsgICAgICAgICAgPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCi0JCS5uYW1lICAgICAgICAgID0gIlBDVFYgU3lzdGVtcyBuYW5vU3RpY2sgVDIgMjkwZSIsCiAJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfZ3BpbyAgICA9IHBjdHZfMjkwZSwKIAkJLmhhc19kdmIgICAgICAgPSAxLAorCQkuaXJfY29kZXMgICAgICA9IFJDX01BUF9QSU5OQUNMRV9QQ1RWX0hELAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwpAQCAtMTg1NSw4ICsxODg0LDEwIEBACiAJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQyKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4Ml9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFMgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNDMpLAotCQkJLmRyaXZlcl9pbmZvID0gRU0yODcwX0JPQVJEX1RFUlJBVEVDX1hTIH0sCi0JeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDQ3KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4NF9CT0FSRF9URVJSQVRFQ19INSB9LAorCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MTBhMiksCS8qIFJldi4gMSAqLworCQkJLmRyaXZlcl9pbmZvID0gRU0yODg0X0JPQVJEX1RFUlJBVEVDX0g1IH0sCisJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgxMGFkKSwJLyogUmV2LiAyICovCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfUFJPRElHWV9YUyB9LAogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA4NCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjBfQk9BUkRfVEVSUkFURUNfQVYzNTAgfSwKQEAgLTE5MzcsNyArMTk2OCw3IEBACiAJezB4Nzc4MDAwODAsIEVNMjg2MF9CT0FSRF9UVlA1MTUwX1JFRkVSRU5DRV9ERVNJR04sIFRVTkVSX0FCU0VOVH0sCiAJezB4YzUxMjAwZTMsIEVNMjgyMF9CT0FSRF9HQURNRUlfVFZSMjAwLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAogCXsweDRiYTUwMDgwLCBFTTI4NjFfQk9BUkRfR0FETUVJX1VUVjMzMFBMVVMsIFRVTkVSX1RORl81MzM1TUZ9LAotCXsweDZiODAwMDgwLCBFTTI4NzRfTEVBREVSU0hJUF9JU0RCVCwgVFVORVJfQUJTRU5UfSwKKwl7MHg2YjgwMDA4MCwgRU0yODc0X0JPQVJEX0xFQURFUlNISVBfSVNEQlQsIFRVTkVSX0FCU0VOVH0sCiB9OwogCiAvKiBJMkMgcG9zc2libGUgYWRkcmVzcyB0byBzYWE3MTE1LCB0dnA1MTUwLCBtc3AzNDAwLCB0dmF1ZGlvICovCkBAIC0yNjYwLDEwICsyNjkxLDkgQEAKIAkJCS5hZGRyID0gMHhiYSA+PiAxLAogCQkJLnBsYXRmb3JtX2RhdGEgPSAmcGRhdGEsCiAJCX07Ci0JCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkJcGRhdGEueHRhbCA9IGRldi0+c2Vuc29yX3h0YWw7Ci0JCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldl9ib2FyZCgmZGV2LT52NGwyX2RldiwgJmRldi0+aTJjX2FkYXAsCisJCXY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmRldi0+djRsMl9kZXYsICZkZXYtPmkyY19hZGFwLAogCQkJCSZtdDl2MDExX2luZm8sIE5VTEwpOwogCX0KIApAQCAtMjg0MiwxMSArMjg3MiwyNiBAQAogCQkJZW0yOHh4X2luZm8oImNoaXAgSUQgaXMgZW0yODgyL2VtMjg4M1xuIik7CiAJCQlkZXYtPndhaXRfYWZ0ZXJfd3JpdGUgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9JRF9FTTI4ODQ6CisJCQllbTI4eHhfaW5mbygiY2hpcCBJRCBpcyBlbTI4ODRcbiIpOworCQkJZGV2LT5yZWdfZ3Bpb19udW0gPSBFTTI4NzRfUjgwX0dQSU87CisJCQlkZXYtPndhaXRfYWZ0ZXJfd3JpdGUgPSAwOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbTI4eHhfaW5mbygiZW0yOHh4IGNoaXAgSUQgPSAlZFxuIiwgZGV2LT5jaGlwX2lkKTsKIAkJfQogCX0KIAorCWlmIChkZXYtPmlzX2F1ZGlvX29ubHkpIHsKKwkJZXJyQ29kZSA9IGVtMjh4eF9hdWRpb19zZXR1cChkZXYpOworCQlpZiAoZXJyQ29kZSkKKwkJCXJldHVybiAtRU5PREVWOworCQllbTI4eHhfYWRkX2ludG9fZGV2bGlzdChkZXYpOworCQllbTI4eHhfaW5pdF9leHRlbnNpb24oZGV2KTsKKworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBQcmVwb3B1bGF0ZSBjYWNoZWQgR1BPIHJlZ2lzdGVyIGNvbnRlbnQgKi8KIAlyZXR2YWwgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBkZXYtPnJlZ19ncG9fbnVtKTsKIAlpZiAocmV0dmFsID49IDApCkBAIC0yOTQ3LDYgKzI5OTIsOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKy8qIGhpZ2ggYmFuZHdpZHRoIG11bHRpcGxpZXIsIGFzIGVuY29kZWQgaW4gaGlnaHNwZWVkIGVuZHBvaW50IGRlc2NyaXB0b3JzICovCisjZGVmaW5lIGhiX211bHQod01heFBhY2tldFNpemUpICgxICsgKCgod01heFBhY2tldFNpemUpID4+IDExKSAmIDB4MDMpKQorCiAvKgogICogZW0yOHh4X3VzYl9wcm9iZSgpCiAgKiBjaGVja3MgZm9yIHN1cHBvcnRlZCBkZXZpY2VzCkBAIC0yOTU2LDE1ICszMDA0LDE1IEBACiB7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWlmOwogCXN0cnVjdCBlbTI4eHggKmRldiA9IE5VTEw7CiAJaW50IHJldHZhbDsKLQlpbnQgaSwgbnIsIGlmbnVtLCBpc29jX3BpcGU7CisJYm9vbCBpc19hdWRpb19vbmx5ID0gZmFsc2UsIGhhc19hdWRpbyA9IGZhbHNlOworCWludCBpLCBuciwgaXNvY19waXBlOworCWNvbnN0IGludCBpZm51bSA9IGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJY2hhciAqc3BlZWQ7CiAJY2hhciBkZXNjclsyNTVdID0gIiI7CiAKIAl1ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKLQlpZm51bSA9IGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKIAkvKiBDaGVjayB0byBzZWUgbmV4dCBmcmVlIGRldmljZSBhbmQgbWFyayBhcyB1c2VkICovCiAJbnIgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZlbTI4eHhfZGV2dXNlZCwgRU0yOFhYX01BWEJPQVJEUyk7CkBAIC0yOTg0LDYgKzMwMzIsMTkgQEAKIAkJZ290byBlcnI7CiAJfQogCisJLyogR2V0IGVuZHBvaW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKwkJaW50IGVwOworCisJCWZvciAoZXAgPSAwOyBlcCA8IGludGVyZmFjZS0+YWx0c2V0dGluZ1tpXS5kZXNjLmJOdW1FbmRwb2ludHM7IGVwKyspIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZTsKKwkJCWUgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nW2ldLmVuZHBvaW50W2VwXTsKKworCQkJaWYgKGUtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSAweDgzKQorCQkJCWhhc19hdWRpbyA9IHRydWU7CisJCX0KKwl9CisKIAllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOwogCiAJLyogY2hlY2sgaWYgdGhlIGRldmljZSBoYXMgdGhlIGlzbyBpbiBlbmRwb2ludCBhdCB0aGUgY29ycmVjdCBwbGFjZSAqLwpAQCAtMzAwMywxOSArMzA2NCwyMiBAQAogCQkJY2hlY2tfaW50ZXJmYWNlID0gMDsKIAogCQlpZiAoIWNoZWNrX2ludGVyZmFjZSkgewotCQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHZpZGVvIGRldmljZSAoJTA0eDolMDR4KTogIgotCQkJCSJpbnRlcmZhY2UgJWksIGNsYXNzICVpIGZvdW5kLlxuIiwKLQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCi0JCQkJaWZudW0sCi0JCQkJaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzKTsKKwkJCWlmIChoYXNfYXVkaW8pIHsKKwkJCQlpc19hdWRpb19vbmx5ID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHZpZGVvIGRldmljZSAoJTA0eDolMDR4KTogIgorCQkJCQkiaW50ZXJmYWNlICVpLCBjbGFzcyAlaSBmb3VuZC5cbiIsCisJCQkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQkJCWlmbnVtLAorCQkJCQlpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOworCQkJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBUaGlzIGlzIGFuIGFuY2lsaWFyeSAiCisJCQkJCSJpbnRlcmZhY2Ugbm90IHVzZWQgYnkgdGhlIGRyaXZlclxuIik7CiAKLQkJCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIiBUaGlzIGlzIGFuIGFuY2lsaWFyeSAiCi0JCQkJImludGVyZmFjZSBub3QgdXNlZCBieSB0aGUgZHJpdmVyXG4iKTsKLQotCQkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7Ci0JCQlyZXR2YWwgPSAtRU5PREVWOwotCQkJZ290byBlcnI7CisJCQkJZW0yOHh4X2RldnVzZWQgJj0gfigxPDxucik7CisJCQkJcmV0dmFsID0gLUVOT0RFVjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KIAkJfQogCX0KIApAQCAtMzA0NSw4ICszMTA5LDggQEAKIAlpZiAoKmRlc2NyKQogCQlzdHJsY2F0KGRlc2NyLCAiICIsIHNpemVvZihkZXNjcikpOwogCi0JcHJpbnRrKERSSVZFUl9OQU1FICI6IE5ldyBkZXZpY2UgJXNAICVzIE1icHMgIgotCQkiKCUwNHg6JTA0eCwgaW50ZXJmYWNlICVkLCBjbGFzcyAlZClcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQorCQkiOiBOZXcgZGV2aWNlICVzQCAlcyBNYnBzICglMDR4OiUwNHgsIGludGVyZmFjZSAlZCwgY2xhc3MgJWQpXG4iLAogCQlkZXNjciwKIAkJc3BlZWQsCiAJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLApAQCAtMzA1NCw2ICszMTE4LDExIEBACiAJCWlmbnVtLAogCQlpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKKwlpZiAoaGFzX2F1ZGlvKQorCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiBBdWRpbyBWZW5kb3IgQ2xhc3MgaW50ZXJmYWNlICVpIGZvdW5kXG4iLAorCQkgICAgICAgaWZudW0pOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgd2UgaGF2ZSA0ODAgTWJwcyBvZiBiYW5kd2lkdGgsIG90aGVyd2lzZSB0aGluZ3MgbGlrZQogCSAqIHZpZGVvIHN0cmVhbSB3b3VsZG4ndCBsaWtlbHkgd29yaywgc2luY2UgMTIgTWJwcyBpcyBnZW5lcmFsbHkKQEAgLTMwODksMTAgKzMxNTgsMTMgQEAKIAlkZXYtPmRldm5vID0gbnI7CiAJZGV2LT5tb2RlbCA9IGlkLT5kcml2ZXJfaW5mbzsKIAlkZXYtPmFsdCAgID0gLTE7CisJZGV2LT5pc19hdWRpb19vbmx5ID0gaXNfYXVkaW9fb25seTsKKwlkZXYtPmhhc19hbHNhX2F1ZGlvID0gaGFzX2F1ZGlvOworCWRldi0+YXVkaW9faWZudW0gPSBpZm51bTsKIAogCS8qIENoZWNrcyBpZiBhdWRpbyBpcyBwcm92aWRlZCBieSBzb21lIGludGVyZmFjZSAqLwogCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewotCQl1aWYgPSB1ZGV2LT5jb25maWctPmludGVyZmFjZVtpXTsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpZiA9IHVkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ldOwogCQlpZiAodWlmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19BVURJTykgewogCQkJZGV2LT5oYXNfYXVkaW9fY2xhc3MgPSAxOwogCQkJYnJlYWs7CkBAIC0zMTAwLDkgKzMxNzIsNyBAQAogCX0KIAogCS8qIGNvbXB1dGUgYWx0ZXJuYXRlIG1heCBwYWNrZXQgc2l6ZXMgKi8KLQl1aWYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXTsKLQotCWRldi0+bnVtX2FsdCA9IHVpZi0+bnVtX2FsdHNldHRpbmc7CisJZGV2LT5udW1fYWx0ID0gaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZzsKIAlkZXYtPmFsdF9tYXhfcGt0X3NpemUgPSBrbWFsbG9jKDMyICogZGV2LT5udW1fYWx0LCBHRlBfS0VSTkVMKTsKIAogCWlmIChkZXYtPmFsdF9tYXhfcGt0X3NpemUgPT0gTlVMTCkgewpAQCAtMzExNCwxNCArMzE4NCwyMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9hbHQgOyBpKyspIHsKLQkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KHVpZi0+YWx0c2V0dGluZ1tpXS5lbmRwb2ludFtpc29jX3BpcGVdLmRlc2Mud01heFBhY2tldFNpemUpOwotCQlkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPQotCQkgICAgKHRtcCAmIDB4MDdmZikgKiAoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOworCQl1MTYgdG1wID0gbGUxNl90b19jcHUoaW50ZXJmYWNlLT5hbHRzZXR0aW5nW2ldLmVuZHBvaW50W2lzb2NfcGlwZV0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJCXVuc2lnbmVkIGludCBzaXplID0gdG1wICYgMHg3ZmY7CisKKwkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJc2l6ZSA9IHNpemUgKiBoYl9tdWx0KHRtcCk7CisKKwkJZGV2LT5hbHRfbWF4X3BrdF9zaXplW2ldID0gc2l6ZTsKIAl9CiAKIAlpZiAoKGNhcmRbbnJdID49IDApICYmIChjYXJkW25yXSA8IGVtMjh4eF9iY291bnQpKQogCQlkZXYtPm1vZGVsID0gY2FyZFtucl07CiAKKwkvKiBzYXZlIG91ciBkYXRhIHBvaW50ZXIgaW4gdGhpcyBpbnRlcmZhY2UgZGV2aWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKIAkvKiBhbGxvY2F0ZSBkZXZpY2Ugc3RydWN0ICovCiAJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwpAQCAtMzEzMyw5ICszMjEwLDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwotCiAJcmVxdWVzdF9tb2R1bGVzKGRldik7CiAKIAkvKiBTaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgdG8gZG8sIHRvIGF2b2lkIG5ld2VyIHVkZXYncyB0bwpAQCAtMzE2NCw2ICszMjM4LDEzIEBACiAJaWYgKCFkZXYpCiAJCXJldHVybjsKIAorCWlmIChkZXYtPmlzX2F1ZGlvX29ubHkpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZW0yOHh4X2Nsb3NlX2V4dGVuc2lvbihkZXYpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybjsKKwl9CisKIAllbTI4eHhfaW5mbygiZGlzY29ubmVjdGluZyAlc1xuIiwgZGV2LT52ZGV2LT5uYW1lKTsKIAogCWZsdXNoX3JlcXVlc3RfbW9kdWxlcyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKaW5kZXggZTMzZjE0NS4uNTdiMWI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCkBAIC0yMTEsNiArMjExLDcgQEAKIHsKIAlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCByZWcsICZ2YWwsIDEpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X3dyaXRlX3JlZyk7CiAKIC8qCiAgKiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoKQpAQCAtMjg2LDYgKzI4Nyw3IEBACiAJCXJldHVybiByZXQ7CiAJcmV0dXJuIGxlMTZfdG9fY3B1KHZhbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChlbTI4eHhfcmVhZF9hYzk3KTsKIAogLyoKICAqIGVtMjh4eF93cml0ZV9hYzk3KCkKQEAgLTMxMywxMyArMzE1LDE0IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGVtMjh4eF93cml0ZV9hYzk3KTsKIAotc3RydWN0IGVtMjh4eF92b2xfdGFibGUgeworc3RydWN0IGVtMjh4eF92b2xfaXRhYmxlIHsKIAllbnVtIGVtMjh4eF9hbXV4IG11eDsKIAl1OAkJIHJlZzsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X3ZvbF90YWJsZSBpbnB1dHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3ZvbF9pdGFibGUgaW5wdXRzW10gPSB7CiAJeyBFTTI4WFhfQU1VWF9WSURFTywgCUFDOTdfVklERU9fVk9MICAgfSwKIAl7IEVNMjhYWF9BTVVYX0xJTkVfSU4sCUFDOTdfTElORUlOX1ZPTCAgfSwKIAl7IEVNMjhYWF9BTVVYX1BIT05FLAlBQzk3X1BIT05FX1ZPTCAgIH0sCkBAIC00MDMsNyArNDA2LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBlbTI4eHhfdm9sX3RhYmxlIG91dHB1dHNbXSA9IHsKK3N0cnVjdCBlbTI4eHhfdm9sX290YWJsZSB7CisJZW51bSBlbTI4eHhfYW91dCBtdXg7CisJdTgJCSByZWc7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVtMjh4eF92b2xfb3RhYmxlIG91dHB1dHNbXSA9IHsKIAl7IEVNMjhYWF9BT1VUX01BU1RFUiwgQUM5N19NQVNURVJfVk9MICAgICAgfSwKIAl7IEVNMjhYWF9BT1VUX0xJTkUsICAgQUM5N19MSU5FX0xFVkVMX1ZPTCAgfSwKIAl7IEVNMjhYWF9BT1VUX01PTk8sICAgQUM5N19NQVNURVJfTU9OT19WT0wgfSwKQEAgLTQ5MiwxNyArNTAwLDEzIEBACiAJaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg3MCB8fCBkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4NzQKIAkJfHwgZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODE3NCkgewogCQkvKiBEaWdpdGFsIG9ubHkgZGV2aWNlIC0gZG9uJ3QgbG9hZCBhbnkgYWxzYSBtb2R1bGUgKi8KLQkJZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbyA9IDA7Ci0JCWRldi0+aGFzX2F1ZGlvX2NsYXNzID0gMDsKLQkJZGV2LT5oYXNfYWxzYV9hdWRpbyA9IDA7CisJCWRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8gPSBmYWxzZTsKKwkJZGV2LT5oYXNfYXVkaW9fY2xhc3MgPSBmYWxzZTsKKwkJZGV2LT5oYXNfYWxzYV9hdWRpbyA9IGZhbHNlOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJZiBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IFVzYiBBdWRpbyBDbGFzcywgdXNlIHZlbmRvciBjbGFzcyAqLwotCWlmICghZGV2LT5oYXNfYXVkaW9fY2xhc3MpCi0JCWRldi0+aGFzX2Fsc2FfYXVkaW8gPSAxOwotCi0JZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbyA9IDE7CisJZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbyA9IHRydWU7CiAKIAkvKiBTZWUgaG93IHRoaXMgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgKi8KIAljZmcgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjAwX0NISVBDRkcpOwpAQCAtNTEyLDggKzUxNiw4IEBACiAJCWNmZyA9IEVNMjhYWF9DSElQQ0ZHX0FDOTc7IC8qIEJlIGNvbnNlcnZhdGl2ZSAqLwogCX0gZWxzZSBpZiAoKGNmZyAmIEVNMjhYWF9DSElQQ0ZHX0FVRElPTUFTSykgPT0gMHgwMCkgewogCQkvKiBUaGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZSB2ZW5kb3IgYXVkaW8gYXQgYWxsICovCi0JCWRldi0+aGFzX2Fsc2FfYXVkaW8gPSAwOwotCQlkZXYtPmF1ZGlvX21vZGUuaGFzX2F1ZGlvID0gMDsKKwkJZGV2LT5oYXNfYWxzYV9hdWRpbyA9IGZhbHNlOworCQlkZXYtPmF1ZGlvX21vZGUuaGFzX2F1ZGlvID0gZmFsc2U7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoKGNmZyAmIEVNMjhYWF9DSElQQ0ZHX0FVRElPTUFTSykgPT0KIAkJICAgRU0yOFhYX0NISVBDRkdfSTJTXzNfU0FNUFJBVEVTKSB7CkBAIC01NDIsOCArNTQ2LDggQEAKIAkJICovCiAJCWVtMjh4eF93YXJuKCJBQzk3IGNoaXAgdHlwZSBjb3VsZG4ndCBiZSBkZXRlcm1pbmVkXG4iKTsKIAkJZGV2LT5hdWRpb19tb2RlLmFjOTcgPSBFTTI4WFhfTk9fQUM5NzsKLQkJZGV2LT5oYXNfYWxzYV9hdWRpbyA9IDA7Ci0JCWRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8gPSAwOworCQlkZXYtPmhhc19hbHNhX2F1ZGlvID0gZmFsc2U7CisJCWRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8gPSBmYWxzZTsKIAkJZ290byBpbml0X2F1ZGlvOwogCX0KIApAQCAtNjE1LDcgKzYxOSw5IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg3NCB8fCBkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4MTc0KSB7CisJaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjg3NCB8fAorCSAgICBkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4ODQgfHwKKwkgICAgZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODE3NCkgewogCQkvKiBUaGUgVHJhbnNwb3J0IFN0cmVhbSBFbmFibGUgUmVnaXN0ZXIgbW92ZWQgaW4gZW0yODc0ICovCiAJCWlmICghc3RhcnQpIHsKIAkJCXJjID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yODc0X1I1Rl9UU19FTkFCTEUsCkBAIC04ODQsNiArODkwLDcgQEAKIAl9CiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X2dwaW9fc2V0KTsKIAogaW50IGVtMjh4eF9zZXRfbW9kZShzdHJ1Y3QgZW0yOHh4ICpkZXYsIGVudW0gZW0yOHh4X21vZGUgc2V0X21vZGUpCiB7CkBAIC05MTcsNyArOTI0LDcgQEAKIHN0YXRpYyB2b2lkIGVtMjh4eF9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBlbTI4eHggKmRldiA9IHVyYi0+Y29udGV4dDsKLQlpbnQgcmMsIGk7CisJaW50IGk7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCkBAIC05MzQsNyArOTQxLDcgQEAKIAogCS8qIENvcHkgZGF0YSBmcm9tIFVSQiAqLwogCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7Ci0JcmMgPSBkZXYtPmlzb2NfY3RsLmlzb2NfY29weShkZXYsIHVyYik7CisJZGV2LT5pc29jX2N0bC5pc29jX2NvcHkoZGV2LCB1cmIpOwogCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKIAogCS8qIFJlc2V0IHVyYiBidWZmZXJzICovCkBAIC0xMTA2LDE3ICsxMTEzLDE5IEBACiBpbnQgZW0yOHh4X2lzb2NfZHZiX21heF9wYWNrZXRzaXplKHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgY2hpcF9jZmcyOwotCXVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZSA9IDU2NDsKKwl1bnNpZ25lZCBpbnQgcGFja2V0X3NpemU7CiAKLQlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODc0KSB7Ci0JCS8qIEZJWE1FIC0gZm9yIG5vdyBhc3N1bWUgNTY0IGxpa2UgaXQgd2FzIGJlZm9yZSwgYnV0IHRoZQotCQkgICBlbTI4NzQgY29kZSBzaG91bGQgYmUgYWRkZWQgdG8gcmV0dXJuIHRoZSBwcm9wZXIgdmFsdWUuLi4gKi8KLQkJcGFja2V0X3NpemUgPSA1NjQ7Ci0JfSBlbHNlIGlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9FTTI4MTc0KSB7Ci0JCS8qIEZJWE1FIHNhbWUgYXMgZW0yODc0LiA1NjQgd2FzIGVub3VnaCBmb3IgMjIgTWJpdCBEVkItVAotCQkgICBidXQgdG9vIG11Y2ggZm9yIDQ0IE1iaXQgRFZCLUMuICovCi0JCXBhY2tldF9zaXplID0gNzUyOwotCX0gZWxzZSB7CisJc3dpdGNoIChkZXYtPmNoaXBfaWQpIHsKKwljYXNlIENISVBfSURfRU0yNzEwOgorCWNhc2UgQ0hJUF9JRF9FTTI3NTA6CisJY2FzZSBDSElQX0lEX0VNMjgwMDoKKwljYXNlIENISVBfSURfRU0yODIwOgorCWNhc2UgQ0hJUF9JRF9FTTI4NDA6CisJY2FzZSBDSElQX0lEX0VNMjg2MDoKKwkJLyogTm8gRFZCIHN1cHBvcnQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBDSElQX0lEX0VNMjg3MDoKKwljYXNlIENISVBfSURfRU0yODgzOgogCQkvKiBUUyBtYXggcGFja2V0IHNpemUgc3RvcmVkIGluIGJpdHMgMS0wIG9mIFIwMSAqLwogCQljaGlwX2NmZzIgPSBlbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjAxX0NISVBDRkcyKTsKIAkJc3dpdGNoIChjaGlwX2NmZzIgJiBFTTI4WFhfQ0hJUENGRzJfVFNfUEFDS0VUU0laRV9NQVNLKSB7CkBAIC0xMTMzLDkgKzExNDIsMjQgQEAKIAkJCXBhY2tldF9zaXplID0gNzUyOwogCQkJYnJlYWs7CiAJCX0KKwkJYnJlYWs7CisJY2FzZSBDSElQX0lEX0VNMjg3NDoKKwkJLyoKKwkJICogRklYTUU6IGZvciBub3cgYXNzdW1lcyA1NjQgbGlrZSBpdCB3YXMgYmVmb3JlLCBidXQgdGhlCisJCSAqIGVtMjg3NCBjb2RlIHNob3VsZCBiZSBhZGRlZCB0byByZXR1cm4gdGhlIHByb3BlciB2YWx1ZQorCQkgKi8KKwkJcGFja2V0X3NpemUgPSA1NjQ7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF9FTTI4ODQ6CisJY2FzZSBDSElQX0lEX0VNMjgxNzQ6CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRklYTUU6IHNhbWUgYXMgZW0yODc0LiA1NjQgd2FzIGVub3VnaCBmb3IgMjIgTWJpdCBEVkItVAorCQkgKiBidXQgbm90IGVub3VnaCBmb3IgNDQgTWJpdCBEVkItQy4KKwkJICovCisJCXBhY2tldF9zaXplID0gNzUyOwogCX0KIAotCWVtMjh4eF9jb3JlZGJnKCJkdmIgbWF4IHBhY2tldCBzaXplPSVkXG4iLCBwYWNrZXRfc2l6ZSk7CiAJcmV0dXJuIHBhY2tldF9zaXplOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X2lzb2NfZHZiX21heF9wYWNrZXRzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwppbmRleCA3OTA0Y2E0Li5lNTkxNmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICBEVkIgZGV2aWNlIGRyaXZlciBmb3IgZW0yOHh4CiAKLSAoYykgMjAwOCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAoYykgMjAwOC0yMDExIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogCiAgKGMpIDIwMDggRGV2aW4gSGVpdG11ZWxsZXIgPGRldmluLmhlaXRtdWVsbGVyQGdtYWlsLmNvbT4KIAktIEZpeGVzIGZvciB0aGUgZHJpdmVyIHRvIHByb3Blcmx5IHdvcmsgd2l0aCBIVlItOTUwCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiczkyMS5oIgogI2luY2x1ZGUgImRyeGQuaCIKICNpbmNsdWRlICJjeGQyODIwci5oIgorI2luY2x1ZGUgInRkYTE4MjcxYzJkZC5oIgorI2luY2x1ZGUgImRyeGsuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGVtMjh4eCBiYXNlZCBEVkIgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiIpOwpAQCAtNzMsNiArNzUsMTEgQEAKIAlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgICAgICBmZV9odzsKIAlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgICAgICBmZV9tZW07CiAJc3RydWN0IGR2Yl9uZXQgICAgICAgICAgICAgbmV0OworCisJLyogRHVlIHRvIERSWC1LIC0gcHJvYmFibHkgbmVlZCBjaGFuZ2VzICovCisJaW50ICgqZ2F0ZV9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCk7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIHBsbF9tdXRleDsKKwlib29sCQkJZG9udF9hdHRhY2hfZmUxOwogfTsKIAogCkBAIC0xNjAsNiArMTY3LDExIEBACiAJCXJldHVybiByYzsKIAogCW1heF9kdmJfcGFja2V0X3NpemUgPSBlbTI4eHhfaXNvY19kdmJfbWF4X3BhY2tldHNpemUoZGV2KTsKKwlpZiAobWF4X2R2Yl9wYWNrZXRfc2l6ZSA8IDApCisJCXJldHVybiBtYXhfZHZiX3BhY2tldF9zaXplOworCWRwcmludGsoMSwgIlVzaW5nICVkIGJ1ZmZlcnMgZWFjaCB3aXRoICVkIGJ5dGVzXG4iLAorCQlFTTI4WFhfRFZCX05VTV9CVUZTLAorCQltYXhfZHZiX3BhY2tldF9zaXplKTsKIAogCXJldHVybiBlbTI4eHhfaW5pdF9pc29jKGRldiwgRU0yOFhYX0RWQl9NQVhfUEFDS0VUUywKIAkJCQlFTTI4WFhfRFZCX05VTV9CVUZTLCBtYXhfZHZiX3BhY2tldF9zaXplLApAQCAtMjk1LDYgKzMwNyw3OSBAQAogCS5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLAogfTsKIAorc3RydWN0IGRyeGtfY29uZmlnIHRlcnJhdGVjX2g1X2RyeGsgPSB7CisJLmFkciA9IDB4MjksCisJLnNpbmdsZV9tYXN0ZXIgPSAxLAorCS5ub19pMmNfYnJpZGdlID0gMSwKKwkubWljcm9jb2RlX25hbWUgPSAiZHZiLXVzYi10ZXJyYXRlYy1oNS1kcnhrLmZ3IiwKK307CisKK3N0YXRpYyBpbnQgZHJ4a19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCit7CisJc3RydWN0IGVtMjh4eF9kdmIgKmR2YiA9IGZlLT5zZWNfcHJpdjsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFkdmIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVuYWJsZSkgeworCQlkb3duKCZkdmItPnBsbF9tdXRleCk7CisJCXN0YXR1cyA9IGR2Yi0+Z2F0ZV9jdHJsKGZlLCAxKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBkdmItPmdhdGVfY3RybChmZSwgMCk7CisJCXVwKCZkdmItPnBsbF9tdXRleCk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHRlcnJhdGVjX2g1X2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSB0ZXJyYXRlY19oNV9pbml0W10gPSB7CisJCXtFTTI4WFhfUjA4X0dQSU8sCTB4ZmYsCTB4ZmYsCTEwfSwKKwkJe0VNMjg3NF9SODBfR1BJTywJMHhmNiwJMHhmZiwJMTAwfSwKKwkJe0VNMjg3NF9SODBfR1BJTywJMHhmMiwJMHhmZiwJNTB9LAorCQl7RU0yODc0X1I4MF9HUElPLAkweGY2LAkweGZmLAkxMDB9LAorCQl7IC0xLCAgICAgICAgICAgICAgICAgICAtMSwgICAgIC0xLCAgICAgLTF9LAorCX07CisJc3RydWN0IGVtMjh4eF9yZWdfc2VxIHRlcnJhdGVjX2g1X2VuZFtdID0geworCQl7RU0yODc0X1I4MF9HUElPLAkweGU2LAkweGZmLAkxMDB9LAorCQl7RU0yODc0X1I4MF9HUElPLAkweGE2LAkweGZmLAk1MH0sCisJCXtFTTI4NzRfUjgwX0dQSU8sCTB4ZTYsCTB4ZmYsCTEwMH0sCisJCXsgLTEsICAgICAgICAgICAgICAgICAgIC0xLCAgICAgLTEsICAgICAtMX0sCisJfTsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIHJbNF07CisJCWludCBsZW47CisJfSByZWdzW10gPSB7CisJCXt7IDB4MDYsIDB4MDIsIDB4MDAsIDB4MzEgfSwgNH0sCisJCXt7IDB4MDEsIDB4MDIgfSwgMn0sCisJCXt7IDB4MDEsIDB4MDIsIDB4MDAsIDB4YzYgfSwgNH0sCisJCXt7IDB4MDEsIDB4MDAgfSwgMn0sCisJCXt7IDB4MDEsIDB4MDAsIDB4ZmYsIDB4YWYgfSwgNH0sCisJCXt7IDB4MDEsIDB4MDAsIDB4MDMsIDB4YTAgfSwgNH0sCisJCXt7IDB4MDEsIDB4MDAgfSwgMn0sCisJCXt7IDB4MDEsIDB4MDAsIDB4NzMsIDB4YWYgfSwgNH0sCisJCXt7IDB4MDQsIDB4MDAgfSwgMn0sCisJCXt7IDB4MDAsIDB4MDQgfSwgMn0sCisJCXt7IDB4MDAsIDB4MDQsIDB4MDAsIDB4MGEgfSwgNH0sCisJCXt7IDB4MDQsIDB4MTQgfSwgMn0sCisJCXt7IDB4MDQsIDB4MTQsIDB4MDAsIDB4MDAgfSwgNH0sCisJfTsKKworCWVtMjh4eF9ncGlvX3NldChkZXYsIHRlcnJhdGVjX2g1X2luaXQpOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssIDB4NDApOworCW1zbGVlcCgxMCk7CisJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgMHg0NSk7CisJbXNsZWVwKDEwKTsKKworCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHg4MiA+PiAxOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykKKwkJaTJjX21hc3Rlcl9zZW5kKCZkZXYtPmkyY19jbGllbnQsIHJlZ3NbaV0uciwgcmVnc1tpXS5sZW4pOworCWVtMjh4eF9ncGlvX3NldChkZXYsIHRlcnJhdGVjX2g1X2VuZCk7Cit9OworCiBzdGF0aWMgaW50IG10MzUyX3RlcnJhdGVjX3hzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJLyogVmFsdWVzIGV4dHJhY3RlZCBmcm9tIGEgVVNCIHRyYWNlIG9mIHRoZSBUZXJyYXRlYyBXaW5kb3dzIGRyaXZlciAqLwpAQCAtNTE2LDcgKzYwMSw3IEBACiAJaWYgKGR2Yi0+ZmVbMV0pCiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZmVbMV0pOwogCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZmVbMF0pOwotCWlmIChkdmItPmZlWzFdKQorCWlmIChkdmItPmZlWzFdICYmICFkdmItPmRvbnRfYXR0YWNoX2ZlMSkKIAkJZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZlWzFdKTsKIAlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZmVbMF0pOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7CkBAIC01NDYsNyArNjMxLDcgQEAKIAllbTI4eHhfc2V0X21vZGUoZGV2LCBFTTI4WFhfRElHSVRBTF9NT0RFKTsKIAkvKiBpbml0IGZyb250ZW5kICovCiAJc3dpdGNoIChkZXYtPm1vZGVsKSB7Ci0JY2FzZSBFTTI4NzRfTEVBREVSU0hJUF9JU0RCVDoKKwljYXNlIEVNMjg3NF9CT0FSRF9MRUFERVJTSElQX0lTREJUOgogCQlkdmItPmZlWzBdID0gZHZiX2F0dGFjaChzOTIxX2F0dGFjaCwKIAkJCQkmc2hhcnBfaXNkYnQsICZkZXYtPmkyY19hZGFwKTsKIApAQCAtNjg5LDYgKzc3NCw0MSBAQAogCQkJfQogCQl9CiAJCWJyZWFrOworCWNhc2UgRU0yODg0X0JPQVJEX1RFUlJBVEVDX0g1OgorCQl0ZXJyYXRlY19oNV9pbml0KGRldik7CisKKwkJZHZiLT5kb250X2F0dGFjaF9mZTEgPSAxOworCisJCWR2Yi0+ZmVbMF0gPSBkdmJfYXR0YWNoKGRyeGtfYXR0YWNoLCAmdGVycmF0ZWNfaDVfZHJ4aywgJmRldi0+aTJjX2FkYXAsICZkdmItPmZlWzFdKTsKKwkJaWYgKCFkdmItPmZlWzBdKSB7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCS8qIEZJWE1FOiBkbyB3ZSBuZWVkIGEgcGxsIHNlbWFwaG9yZT8gKi8KKwkJZHZiLT5mZVswXS0+c2VjX3ByaXYgPSBkdmI7CisJCXNlbWFfaW5pdCgmZHZiLT5wbGxfbXV0ZXgsIDEpOworCQlkdmItPmdhdGVfY3RybCA9IGR2Yi0+ZmVbMF0tPm9wcy5pMmNfZ2F0ZV9jdHJsOworCQlkdmItPmZlWzBdLT5vcHMuaTJjX2dhdGVfY3RybCA9IGRyeGtfZ2F0ZV9jdHJsOworCQlkdmItPmZlWzFdLT5pZCA9IDE7CisKKwkJLyogQXR0YWNoIHRkYTE4MjcxIHRvIERWQi1DIGZyb250ZW5kICovCisJCWlmIChkdmItPmZlWzBdLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWR2Yi0+ZmVbMF0tPm9wcy5pMmNfZ2F0ZV9jdHJsKGR2Yi0+ZmVbMF0sIDEpOworCQlpZiAoIWR2Yl9hdHRhY2godGRhMTgyNzFjMmRkX2F0dGFjaCwgZHZiLT5mZVswXSwgJmRldi0+aTJjX2FkYXAsIDB4NjApKSB7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQlpZiAoZHZiLT5mZVswXS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlkdmItPmZlWzBdLT5vcHMuaTJjX2dhdGVfY3RybChkdmItPmZlWzBdLCAwKTsKKworCQkvKiBIYWNrIC0gbmVlZGVkIGJ5IGRyeGsvdGRhMTgyNzFjMmRkICovCisJCWR2Yi0+ZmVbMV0tPnR1bmVyX3ByaXYgPSBkdmItPmZlWzBdLT50dW5lcl9wcml2OworCQltZW1jcHkoJmR2Yi0+ZmVbMV0tPm9wcy50dW5lcl9vcHMsCisJCSAgICAgICAmZHZiLT5mZVswXS0+b3BzLnR1bmVyX29wcywKKwkJICAgICAgIHNpemVvZihkdmItPmZlWzBdLT5vcHMudHVuZXJfb3BzKSk7CisKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZW0yOHh4X2VycmRldigiLzI6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQiCiAJCQkJIiBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCA0NzM5ZmM3Li4zNmY1YTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC0xODEsMTYgKzE4MSwyNSBAQAogCiAvKgogICogZW0yOHh4X2kyY19zZW5kX2J5dGVzKCkKLSAqIHVudGVzdGVkIGZvciBtb3JlIHRoYW4gNCBieXRlcwogICovCiBzdGF0aWMgaW50IGVtMjh4eF9pMmNfc2VuZF9ieXRlcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKIAkJCQkgc2hvcnQgbGVuLCBpbnQgc3RvcCkKIHsKIAlpbnQgd3Jjb3VudCA9IDA7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gKHN0cnVjdCBlbTI4eHggKilkYXRhOworCWludCB3cml0ZV90aW1lb3V0LCByZXQ7CiAKIAl3cmNvdW50ID0gZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCBzdG9wID8gMiA6IDMsIGFkZHIsIGJ1ZiwgbGVuKTsKIAorCS8qIFNlZW1zIHRvIGJlIHJlcXVpcmVkIGFmdGVyIGEgd3JpdGUgKi8KKwlmb3IgKHdyaXRlX3RpbWVvdXQgPSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQ7IHdyaXRlX3RpbWVvdXQgPiAwOworCSAgICAgd3JpdGVfdGltZW91dCAtPSA1KSB7CisJCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHgwNSk7CisJCWlmICghcmV0KQorCQkJYnJlYWs7CisJCW1zbGVlcCg1KTsKKwl9CisKIAlyZXR1cm4gd3Jjb3VudDsKIH0KIApAQCAtMjE4LDkgKzIyNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZW0yOHh4X2kyY19jaGVja19mb3JfZGV2aWNlKHN0cnVjdCBlbTI4eHggKmRldiwgdW5zaWduZWQgY2hhciBhZGRyKQogewotCWNoYXIgbXNnOwogCWludCByZXQ7Ci0JbXNnID0gYWRkcjsKIAogCXJldCA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcShkZXYsIDIsIGFkZHIpOwogCWlmIChyZXQgPCAwKSB7CkBAIC0zMzIsNyArMzM5LDkgQEAKIAlzdHJ1Y3QgZW0yOHh4X2VlcHJvbSAqZW1fZWVwcm9tID0gKHZvaWQgKillZWRhdGE7CiAJaW50IGksIGVyciwgc2l6ZSA9IGxlbiwgYmxvY2s7CiAKLQlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODc0IHx8IGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjgxNzQpIHsKKwlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODc0IHx8CisJICAgIGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX0VNMjgxNzQgfHwKKwkgICAgZGV2LT5jaGlwX2lkID09IENISVBfSURfRU0yODg0KSB7CiAJCS8qIEVtcGlhIHN3aXRjaGVkIHRvIGEgMTYtYml0IGFkZHJlc3NhYmxlIGVlcHJvbSBpbiBuZXdlcgogCQkgICBkZXZpY2VzLiAgV2hpbGUgd2UgY291bGQgY2VydGFpbmx5IHdyaXRlIGEgcm91dGluZSB0byByZWFkCiAJCSAgIHRoZSBlZXByb20sIHRoZXJlIGlzIG5vdGhpbmcgb2YgdXNlIGluIHRoZXJlIHRoYXQgY2Fubm90IGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IGJhMWJhODYuLjVkMTJiMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC0zNzIsNiArMzcyLDcgQEAKIAkJaXItPmdldF9rZXkgPSBkZWZhdWx0X3BvbGxpbmdfZ2V0a2V5OwogCQlicmVhazsKIAljYXNlIENISVBfSURfRU0yODc0OgorCWNhc2UgQ0hJUF9JRF9FTTI4MTc0OgogCQlpci0+Z2V0X2tleSA9IGVtMjg3NF9wb2xsaW5nX2dldGtleTsKIAkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4NzRfUjUwX0lSX0NPTkZJRywgJmlyX2NvbmZpZywgMSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCmluZGV4IGU5MmEyOGUuLjY2Zjc5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKQEAgLTIwMSw2ICsyMDEsNyBAQAogCUNISVBfSURfRU0yODcwID0gMzUsCiAJQ0hJUF9JRF9FTTI4ODMgPSAzNiwKIAlDSElQX0lEX0VNMjg3NCA9IDY1LAorCUNISVBfSURfRU0yODg0ID0gNjgsCiAJQ0hJUF9JRF9FTTI4MTc0ID0gMTEzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA3YjY0NjFkLi5kMTc2ZGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTAsNyArNDksOCBAQAogCQkgICAgICAiU2FzY2hhIFNvbW1lciA8c2FzY2hhc29tbWVyQGZyZWVuZXQuZGU+IgogCiAjZGVmaW5lIERSSVZFUl9ERVNDICAgICAgICAgIkVtcGlhIGVtMjh4eCBiYXNlZCBVU0IgdmlkZW8gZGV2aWNlIGRyaXZlciIKLSNkZWZpbmUgRU0yOFhYX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMCwgMSwgMikKKworI2RlZmluZSBFTTI4WFhfVkVSU0lPTiAiMC4xLjMiCiAKICNkZWZpbmUgZW0yOHh4X3ZpZGVvZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAogCWlmICh2aWRlb19kZWJ1ZykgXApAQCAtNzIsNiArNzIsNyBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihFTTI4WFhfVkVSU0lPTik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gKEVNMjhYWF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCB2YmlfbnJbXSAgID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CkBAIC0xNzU3LDggKzE3NTgsNiBAQAogCXN0cmxjcHkoY2FwLT5jYXJkLCBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAotCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7Ci0KIAljYXAtPmNhcGFiaWxpdGllcyA9CiAJCQlWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUgfAogCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CkBAIC0xOTc2LDcgKzE5NzUsNiBAQAogCXN0cmxjcHkoY2FwLT5jYXJkLCBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKIAl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAotCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NTAsMTAgKzI0NDgsOCBAQAogICAgICAgdTggdmFsOwogCWludCByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogdjRsMiBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkJZGV2LT5uYW1lLAotCQkoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAotCQkoRU0yOFhYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsIEVNMjhYWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogdjRsMiBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKKwkJZGV2LT5uYW1lLCBFTTI4WFhfVkVSU0lPTik7CiAKIAkvKiBzZXQgZGVmYXVsdCBub3JtICovCiAJZGV2LT5ub3JtID0gZW0yOHh4X3ZpZGVvX3RlbXBsYXRlLmN1cnJlbnRfbm9ybTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggM2NjYTMzMS4uZDgwNjU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTExNyw5ICsxMTcsOSBAQAogI2RlZmluZSBFTTI4MDBfQk9BUkRfVkMyMTFBCQkJICA3NAogI2RlZmluZSBFTTI4ODJfQk9BUkRfRElLT01fREszMDAJCSAgNzUKICNkZWZpbmUgRU0yODcwX0JPQVJEX0tXT1JMRF9BMzQwCQkgIDc2Ci0jZGVmaW5lIEVNMjg3NF9MRUFERVJTSElQX0lTREJUCQkJICA3NworI2RlZmluZSBFTTI4NzRfQk9BUkRfTEVBREVSU0hJUF9JU0RCVAkJICA3NwogI2RlZmluZSBFTTI4MTc0X0JPQVJEX1BDVFZfMjkwRSAgICAgICAgICAgICAgICAgICA3OAotCisjZGVmaW5lIEVNMjg4NF9CT0FSRF9URVJSQVRFQ19INQkJICA3OQogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC00ODcsNiArNDg3LDggQEAKIAlpbnQgZGV2bm87CQkvKiBtYXJrcyB0aGUgbnVtYmVyIG9mIHRoaXMgZGV2aWNlICovCiAJZW51bSBlbTI4eHhfY2hpcF9pZCBjaGlwX2lkOwogCisJaW50IGF1ZGlvX2lmbnVtOworCiAJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCBlbTI4eHhfYm9hcmQgYm9hcmQ7CiAKQEAgLTUwMyw2ICs1MDUsNyBAQAogCiAJdW5zaWduZWQgaW50IGhhc19hdWRpb19jbGFzczoxOwogCXVuc2lnbmVkIGludCBoYXNfYWxzYV9hdWRpbzoxOworCXVuc2lnbmVkIGludCBpc19hdWRpb19vbmx5OjE7CiAKIAkvKiBDb250cm9scyBhdWRpbyBzdHJlYW1pbmcgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3FfdHJpZ2dlcjsgICAgICAgICAgICAgIC8qIFRyaWdnZXIgdG8gc3RhcnQvc3RvcCBhdWRpbyBmb3IgYWxzYSBtb2R1bGUgKi8KQEAgLTY5Nyw2ICs3MDAsOSBAQAogdm9pZCBlbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGVtMjh4eCAqZGV2KTsKIAogLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KKworI2lmZGVmIENPTkZJR19WSURFT19FTTI4WFhfUkMKKwogaW50IGVtMjh4eF9nZXRfa2V5X3RlcnJhdGVjKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpOwogaW50IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXAoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3Jhdyk7CiBpbnQgZW0yOHh4X2dldF9rZXlfcGlubmFjbGVfdXNiX2dyZXkoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LApAQCAtNzA5LDYgKzcxNSwyMCBAQAogaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldik7CiBpbnQgZW0yOHh4X2lyX2Zpbmkoc3RydWN0IGVtMjh4eCAqZGV2KTsKIAorI2Vsc2UKKworI2RlZmluZSBlbTI4eHhfZ2V0X2tleV90ZXJyYXRlYwkJCU5VTEwKKyNkZWZpbmUgZW0yOHh4X2dldF9rZXlfZW1faGF1cAkJCU5VTEwKKyNkZWZpbmUgZW0yOHh4X2dldF9rZXlfcGlubmFjbGVfdXNiX2dyZXkJTlVMTAorI2RlZmluZSBlbTI4eHhfZ2V0X2tleV93aW5mYXN0X3VzYmlpX2RlbHV4ZQlOVUxMCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbTI4eHhfcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbTI4eHhfZGVyZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oc3RydWN0IGVtMjh4eCAqZGV2KSB7fQorc3RhdGljIGlubGluZSBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBlbTI4eHhfaXJfZmluaShzdHJ1Y3QgZW0yOHh4ICpkZXYpIHsgcmV0dXJuIDA7IH0KKworI2VuZGlmCisKIC8qIFByb3ZpZGVkIGJ5IGVtMjh4eC12YmkuYyAqLwogZXh0ZXJuIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZW0yOHh4X3ZiaV9xb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmgKaW5kZXggYmY2NjE4OS4uMTRiYjkwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTEuaApAQCAtMjEsNyArMjEsNiBAQAogI2lmbmRlZiBfRVQ2MVgyNTFfSF8KICNkZWZpbmUgX0VUNjFYMjUxX0hfCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggYTk4Mjc1MC4uOWExZTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDgsOCArNDksNyBAQAogI2RlZmluZSBFVDYxWDI1MV9NT0RVTEVfQVVUSE9SICAiKEMpIDIwMDYtMjAwNyBMdWNhIFJpc29saWEiCiAjZGVmaW5lIEVUNjFYMjUxX0FVVEhPUl9FTUFJTCAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9MSUNFTlNFICJHUEwiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxOjEuMDkiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDEsIDkpCisjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxLjEuMTAiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IGNhcCA9IHsKIAkJLmRyaXZlciA9ICJldDYxeDI1MSIsCi0JCS52ZXJzaW9uID0gRVQ2MVgyNTFfTU9EVUxFX1ZFUlNJT05fQ09ERSwKKwkJLnZlcnNpb24gPSBMSU5VWF9WRVJTSU9OX0NPREUsCiAJCS5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwKIAkJCQlWNEwyX0NBUF9TVFJFQU1JTkcsCiAJfTsKQEAgLTI0ODAsMTYgKzI0ODAsOCBAQAogCWNhc2UgVklESU9DX1NfUEFSTToKIAkJcmV0dXJuIGV0NjF4MjUxX3ZpZGlvY19zX3Bhcm0oY2FtLCBhcmcpOwogCi0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JY2FzZSBWSURJT0NfUVVFUllTVEQ6Ci0JY2FzZSBWSURJT0NfRU5VTVNURDoKLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JY2FzZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUzoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9UVFk7CiAKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2ZzbC12aXUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZnNsLXZpdS5jCmluZGV4IDkwOGQ3MDEuLjI3Y2IxOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZnNsLXZpdS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZnNsLXZpdS5jCkBAIC0yMywxOSArMjMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkJImZzbF92aXUiCi0jZGVmaW5lIFZJVV9NQUpPUl9WRVJTSU9OCTAKLSNkZWZpbmUgVklVX01JTk9SX1ZFUlNJT04JNQotI2RlZmluZSBWSVVfUkVMRUFTRQkJMAotI2RlZmluZSBWSVVfVkVSU0lPTgkJS0VSTkVMX1ZFUlNJT04oVklVX01BSk9SX1ZFUlNJT04sIFwKLQkJCQkJICAgICAgIFZJVV9NSU5PUl9WRVJTSU9OLCBcCi0JCQkJCSAgICAgICBWSVVfUkVMRUFTRSkKKyNkZWZpbmUgVklVX1ZFUlNJT04JCSIwLjUuMSIKIAogI2RlZmluZSBCVUZGRVJfVElNRU9VVAkJbXNlY3NfdG9famlmZmllcyg1MDApICAvKiAwLjUgc2Vjb25kcyAqLwogCkBAIC02MTAsNyArNjA0LDYgQEAKIHsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJ2aXUiKTsKIAlzdHJjcHkoY2FwLT5jYXJkLCAidml1Iik7Ci0JY2FwLT52ZXJzaW9uID0gVklVX1ZFUlNJT047CiAJY2FwLT5jYXBhYmlsaXRpZXMgPQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKIAkJCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKQEAgLTE2ODQsMyArMTY3Nyw0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBWaWRlby1JbihWSVUpIik7CiBNT0RVTEVfQVVUSE9SKCJIb25nanVuIENoZW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZJVV9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwppbmRleCAzNGFlMmMyLi40M2Q5YTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCkBAIC0xNzksNiArMTc5LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9wYWM3MzExLgogCitjb25maWcgVVNCX0dTUENBX1NFNDAxCisJdHJpc3RhdGUgIlNFNDAxIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUKKwkgRW5kcG9pbnRzIChmb3JtZXJseSBrbm93biBhcyBBT1gpIHNlNDAxIGNoaXAuCisKKwkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zZTQwMS4KKwogY29uZmlnIFVTQl9HU1BDQV9TTjlDMjAyOAogCXRyaXN0YXRlICJTT05JWCBEdWFsLU1vZGUgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggODAyZmJlMS4uZDYzNjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykgICArPSBnc3BjYV9wYWMyMDcubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyKSAgKz0gZ3NwY2FfcGFjNzMwMi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzczMTEpICArPSBnc3BjYV9wYWM3MzExLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU0U0MDEpICAgICs9IGdzcGNhX3NlNDAxLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU045QzIwMjgpICs9IGdzcGNhX3NuOWMyMDI4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCkgICs9IGdzcGNhX3NuOWMyMHgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEIpICAgKz0gZ3NwY2Ffc29uaXhiLm8KQEAgLTU4LDYgKzU5LDcgQEAKIGdzcGNhX3BhYzIwNy1vYmpzICAgOj0gcGFjMjA3Lm8KIGdzcGNhX3BhYzczMDItb2JqcyAgOj0gcGFjNzMwMi5vCiBnc3BjYV9wYWM3MzExLW9ianMgIDo9IHBhYzczMTEubworZ3NwY2Ffc2U0MDEtb2JqcyAgICA6PSBzZTQwMS5vCiBnc3BjYV9zbjljMjAyOC1vYmpzIDo9IHNuOWMyMDI4Lm8KIGdzcGNhX3NuOWMyMHgtb2JqcyAgOj0gc245YzIweC5vCiBnc3BjYV9zb25peGItb2JqcyAgIDo9IHNvbml4Yi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmgKaW5kZXggNDlhZDRhYy4uMDMzMGEwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuaApAQCAtMTgsNyArMTgsNiBAQAogICovCiAjaWZuZGVmIEdMODYwX0RFVl9ICiAjZGVmaW5lIEdMODYwX0RFVl9ICi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IDA4Y2U5OTQuLjVkYTQ4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgImdzcGNhIgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNTEsMTEgKzUwLDEyIEBACiAjZXJyb3IgIkRFRl9OVVJCUyB0b28gYmlnIgogI2VuZGlmCiAKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCSIyLjEzLjAiCisKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbsOnb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAxMywgMCkKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OX05VTUJFUik7CiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtNDQzLDggKzQ0MywxMSBAQAogCX0gZWxzZSB7CiAJCXN3aXRjaCAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlKSB7CiAJCWNhc2UgRElTQ0FSRF9QQUNLRVQ6Ci0JCQlpZiAocGFja2V0X3R5cGUgPT0gTEFTVF9QQUNLRVQpCisJCQlpZiAocGFja2V0X3R5cGUgPT0gTEFTVF9QQUNLRVQpIHsKIAkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBwYWNrZXRfdHlwZTsKKwkJCQlnc3BjYV9kZXYtPmltYWdlID0gTlVMTDsKKwkJCQlnc3BjYV9kZXYtPmltYWdlX2xlbiA9IDA7CisJCQl9CiAJCQlyZXR1cm47CiAJCWNhc2UgTEFTVF9QQUNLRVQ6CiAJCQlyZXR1cm47CkBAIC0xMjc4LDEwICsxMjgxLDEwIEBACiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQlzdHJuY3B5KChjaGFyICopIGNhcC0+ZHJpdmVyLCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5hbWUsCisJc3RybGNweSgoY2hhciAqKSBjYXAtPmRyaXZlciwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uYW1lLAogCQkJc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKIAlpZiAoZ3NwY2FfZGV2LT5kZXYtPnByb2R1Y3QgIT0gTlVMTCkgewotCQlzdHJuY3B5KChjaGFyICopIGNhcC0+Y2FyZCwgZ3NwY2FfZGV2LT5kZXYtPnByb2R1Y3QsCisJCXN0cmxjcHkoKGNoYXIgKikgY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCwKIAkJCXNpemVvZiBjYXAtPmNhcmQpOwogCX0gZWxzZSB7CiAJCXNucHJpbnRmKChjaGFyICopIGNhcC0+Y2FyZCwgc2l6ZW9mIGNhcC0+Y2FyZCwKQEAgLTEyOTEsNyArMTI5NCw2IEBACiAJfQogCXVzYl9tYWtlX3BhdGgoZ3NwY2FfZGV2LT5kZXYsIChjaGFyICopIGNhcC0+YnVzX2luZm8sCiAJCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOwotCWNhcC0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUKIAkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkcKIAkJCSAgfCBWNEwyX0NBUF9SRUFEV1JJVEU7CkBAIC0xNDYwLDcgKzE0NjIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbnB1dC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaW5wdXQtPnN0YXR1cyA9IGdzcGNhX2Rldi0+Y2FtLmlucHV0X2ZsYWdzOwotCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwKKwlzdHJsY3B5KGlucHV0LT5uYW1lLCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5hbWUsCiAJCXNpemVvZiBpbnB1dC0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDc4LDEwICsyNDgwLDcgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGdzcGNhX2luaXQodm9pZCkKIHsKLQlpbmZvKCJ2JWQuJWQuJWQgcmVnaXN0ZXJlZCIsCi0JCShEUklWRVJfVkVSU0lPTl9OVU1CRVIgPj4gMTYpICYgMHhmZiwKLQkJKERSSVZFUl9WRVJTSU9OX05VTUJFUiA+PiA4KSAmIDB4ZmYsCi0JCURSSVZFUl9WRVJTSU9OX05VTUJFUiAmIDB4ZmYpOworCWluZm8oInYiIERSSVZFUl9WRVJTSU9OX05VTUJFUiAiIHJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyB2b2lkIF9fZXhpdCBnc3BjYV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggMDU3ZTI4Ny4uMTgzMDVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMTM0LDYgKzEzNCw3IEBACiAJU0VOX09WNzY3MCwKIAlTRU5fT1Y3NkJFLAogCVNFTl9PVjg2MTAsCisJU0VOX09WOTYwMCwKIH07CiAKIC8qIE5vdGUgdGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB0aGUgdzk5NjhjZiBkcml2ZXIgbmVlZHMgdGhlIGNvZGUgZm9yIGFsbApAQCAtMzQwLDYgKzM0MSwxMCBAQAogCQkJKDEgPDwgRVhQT1NVUkUpIHwKIAkJCSgxIDw8IEFVVE9HQUlOKSB8CiAJCQkoMSA8PCBGUkVRKSwKK1tTRU5fT1Y5NjAwXSA9CQkoKDEgPDwgTkNUUkwpIC0gMSkJLyogbm8gY29udHJvbCAqLworCQkJXiAoKDEgPDwgRVhQT1NVUkUpCS8qIGJ1dCBleHBvc3VyZSAqLworCQkJIHwgKDEgPDwgQVVUT0dBSU4pKSwJLyogYW5kIGF1dG9nYWluICovCisKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG92NTE5X3ZnYV9tb2RlW10gPSB7CkBAIC01MjUsNiArNTMwLDE3IEBACiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5wcml2ID0gMH0sCiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3ZmeDJfb3Y5NjAwX21vZGVbXSA9IHsKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKK307CiAKIC8qIFJlZ2lzdGVycyBjb21tb24gdG8gT1Y1MTEgLyBPVjUxOCAqLwogI2RlZmluZSBSNTF4X0ZJRk9fUFNJWkUJCQkweDMwCS8qIDIgYnl0ZXMgd2lkZSB3LyBPVjUxOCgrKSAqLwpAQCAtMTgwNyw2ICsxODIzLDIyIEBACiAJCQl8IE9WNzY3MF9DT004X0FFQ30sCiAJezB4YTEsIDB4Yzh9CiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvdl9pMmNfcmVndmFscyBub3JtXzk2MDBbXSA9IHsKKwl7MHgxMiwgMHg4MH0sCisJezB4MGMsIDB4Mjh9LAorCXsweDExLCAweDgwfSwKKwl7MHgxMywgMHhiNX0sCisJezB4MTQsIDB4M2V9LAorCXsweDFiLCAweDA0fSwKKwl7MHgyNCwgMHhiMH0sCisJezB4MjUsIDB4OTB9LAorCXsweDI2LCAweDk0fSwKKwl7MHgzNSwgMHg5MH0sCisJezB4MzcsIDB4MDd9LAorCXsweDM4LCAweDA4fSwKKwl7MHgwMSwgMHg4ZX0sCisJezB4MDIsIDB4ODV9Cit9OwogCiAvKiA3NjcwLiBEZWZhdWx0cyB0YWtlbiBmcm9tIE9tbmlWaXNpb24gcHJvdmlkZWQgZGF0YSwKICogIGFzIHByb3ZpZGVkIGJ5IEpvbmF0aGFuIENvcmJldCBvZiBPTFBDCQkqLwpAQCAtMjQwMCw5ICsyNDMyLDEyIEBACiAKIAkvKiBJbml0aWF0ZSAyLWJ5dGUgd3JpdGUgY3ljbGUgKi8KIAlyZWdfdyhzZCwgUjUxOF9JMkNfQ1RMLCAweDAzKTsKKwlyZWdfcjgoc2QsIFI1MThfSTJDX0NUTCk7CiAKIAkvKiBJbml0aWF0ZSAyLWJ5dGUgcmVhZCBjeWNsZSAqLwogCXJlZ193KHNkLCBSNTE4X0kyQ19DVEwsIDB4MDUpOworCXJlZ19yOChzZCwgUjUxOF9JMkNfQ1RMKTsKKwogCXZhbHVlID0gcmVnX3Ioc2QsIFI1MXhfSTJDX0RBVEEpOwogCVBERUJVRyhEX1VTQkksICJvdjUxOF9pMmNfciAlMDJ4ICUwMngiLCByZWcsIHZhbHVlKTsKIAlyZXR1cm4gdmFsdWU7CkBAIC0yNjg2LDcgKzI3MjEsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WMngxMCAvIE9WMzYxMCAvIE9WMzYyMCAqLworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1YyeDEwIC8gT1YzNjEwIC8gT1YzNjIwIC8gT1Y5NjAwICovCiBzdGF0aWMgdm9pZCBvdl9oaXJlc19jb25maWd1cmUoc3RydWN0IHNkICpzZCkKIHsKIAlpbnQgaGlnaCwgbG93OwpAQCAtMjcwMiwxOSArMjczNywzMiBAQAogCWhpZ2ggPSBpMmNfcihzZCwgMHgwYSk7CiAJbG93ID0gaTJjX3Ioc2QsIDB4MGIpOwogCS8qIGluZm8oIiV4LCAleCIsIGhpZ2gsIGxvdyk7ICovCi0JaWYgKGhpZ2ggPT0gMHg5NiAmJiBsb3cgPT0gMHg0MCkgewotCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjI2MTAiKTsKLQkJc2QtPnNlbnNvciA9IFNFTl9PVjI2MTA7Ci0JfSBlbHNlIGlmIChoaWdoID09IDB4OTYgJiYgbG93ID09IDB4NDEpIHsKLQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYW4gT1YyNjEwQUUiKTsKLQkJc2QtPnNlbnNvciA9IFNFTl9PVjI2MTBBRTsKLQl9IGVsc2UgaWYgKGhpZ2ggPT0gMHgzNiAmJiAobG93ICYgMHgwZikgPT0gMHgwMCkgewotCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjM2MTAiKTsKLQkJc2QtPnNlbnNvciA9IFNFTl9PVjM2MTA7Ci0JfSBlbHNlIHsKLQkJZXJyKCJFcnJvciB1bmtub3duIHNlbnNvciB0eXBlOiAlMDJ4JTAyeCIsCi0JCQloaWdoLCBsb3cpOworCXN3aXRjaCAoaGlnaCkgeworCWNhc2UgMHg5NjoKKwkJc3dpdGNoIChsb3cpIHsKKwkJY2FzZSAweDQwOgorCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgaXMgYSBPVjI2MTAiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1YyNjEwOworCQkJcmV0dXJuOworCQljYXNlIDB4NDE6CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhIE9WMjYxMEFFIik7CisJCQlzZC0+c2Vuc29yID0gU0VOX09WMjYxMEFFOworCQkJcmV0dXJuOworCQljYXNlIDB4YjE6CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhIE9WOTYwMCIpOworCQkJc2QtPnNlbnNvciA9IFNFTl9PVjk2MDA7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDM2OgorCQlpZiAoKGxvdyAmIDB4MGYpID09IDB4MDApIHsKKwkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGEgT1YzNjEwIik7CisJCQlzZC0+c2Vuc29yID0gU0VOX09WMzYxMDsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKIAl9CisJZXJyKCJFcnJvciB1bmtub3duIHNlbnNvciB0eXBlOiAlMDJ4JTAyeCIsIGhpZ2gsIGxvdyk7CiB9CiAKIC8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WODExMCwgT1Y4NjEwIHNlbnNvci4gVGhlIE9WODExMCB1c2VzCkBAIC0yODEwLDcgKzI4NTgsNiBAQAogCQkJY2FzZSAweDYwOgogCQkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGEgT1Y3NjYwIik7CiAJCQkJc2QtPnNlbnNvciA9IFNFTl9PVjc2NjA7Ci0JCQkJc2QtPmludmVydF9sZWQgPSAwOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlVua25vd24gc2Vuc29yOiAweDc2JXgiLCBsb3cpOwpAQCAtMzI4OSw3ICszMzM2LDYgQEAKIAljYXNlIEJSSURHRV9PVjUxOToKIAkJY2FtLT5jYW1fbW9kZSA9IG92NTE5X3ZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y1MTlfdmdhX21vZGUpOwotCQlzZC0+aW52ZXJ0X2xlZCA9ICFzZC0+aW52ZXJ0X2xlZDsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfT1ZGWDI6CiAJCWNhbS0+Y2FtX21vZGUgPSBvdjUxOV92Z2FfbW9kZTsKQEAgLTM0MDAsNiArMzQ0NiwxMCBAQAogCQkJY2FtLT5jYW1fbW9kZSA9IG92ZngyX292MzYxMF9tb2RlOwogCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92ZngyX292MzYxMF9tb2RlKTsKIAkJCWJyZWFrOworCQljYXNlIFNFTl9PVjk2MDA6CisJCQljYW0tPmNhbV9tb2RlID0gb3ZmeDJfb3Y5NjAwX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3ZmeDJfb3Y5NjAwX21vZGUpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoc2QtPnNpZikgewogCQkJCWNhbS0+Y2FtX21vZGUgPSBvdjUxOV9zaWZfbW9kZTsKQEAgLTM0OTcsNiArMzU0NywxMiBAQAogCWNhc2UgU0VOX09WODYxMDoKIAkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fODYxMCwgQVJSQVlfU0laRShub3JtXzg2MTApKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5fT1Y5NjAwOgorCQl3cml0ZV9pMmNfcmVndmFscyhzZCwgbm9ybV85NjAwLCBBUlJBWV9TSVpFKG5vcm1fOTYwMCkpOworCisJCS8qIGVuYWJsZSBhdXRvZXhwbyAqLworLyoJCWkyY193X21hc2soc2QsIDB4MTMsIDB4MDUsIDB4MDUpOyAqLworCQlicmVhazsKIAl9CiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIGVycm9yOgpAQCAtNDA4NSw2ICs0MTQxLDMzIEBACiAJCWkyY193X21hc2soc2QsIDB4MTQsIHF2Z2EgPyAweDIwIDogMHgwMCwgMHgyMCk7CiAJCWkyY193X21hc2soc2QsIDB4MTIsIDB4MDQsIDB4MDYpOyAvKiBBV0I6IDEgVGVzdCBwYXR0ZXJuOiAwICovCiAJCWJyZWFrOworCWNhc2UgU0VOX09WOTYwMDogeworCQljb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgKnZhbHM7CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgc3hnYV8xNVtdID0geworCQkJezB4MTEsIDB4ODB9LCB7MHgxNCwgMHgzZX0sIHsweDI0LCAweDg1fSwgezB4MjUsIDB4NzV9CisJCX07CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgc3hnYV83XzVbXSA9IHsKKwkJCXsweDExLCAweDgxfSwgezB4MTQsIDB4M2V9LCB7MHgyNCwgMHg4NX0sIHsweDI1LCAweDc1fQorCQl9OworCQlzdGF0aWMgY29uc3Qgc3RydWN0IG92X2kyY19yZWd2YWxzIHZnYV8zMFtdID0geworCQkJezB4MTEsIDB4ODF9LCB7MHgxNCwgMHg3ZX0sIHsweDI0LCAweDcwfSwgezB4MjUsIDB4NjB9CisJCX07CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZfaTJjX3JlZ3ZhbHMgdmdhXzE1W10gPSB7CisJCQl7MHgxMSwgMHg4M30sIHsweDE0LCAweDNlfSwgezB4MjQsIDB4ODB9LCB7MHgyNSwgMHg3MH0KKwkJfTsKKworCQkvKiBmcmFtZSByYXRlczoKKwkJICoJMTVmcHMgLyA3LjUgZnBzIGZvciAxMjgweDEwMjQKKwkJICoJMzBmcHMgLyAxNWZwcyBmb3IgNjQweDQ4MAorCQkgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgxMiwgcXZnYSA/IDB4NDAgOiAweDAwLCAweDQwKTsKKwkJaWYgKHF2Z2EpCisJCQl2YWxzID0gc2QtPmZyYW1lX3JhdGUgPCAzMCA/IHZnYV8xNSA6IHZnYV8zMDsKKwkJZWxzZQorCQkJdmFscyA9IHNkLT5mcmFtZV9yYXRlIDwgMTUgPyBzeGdhXzdfNSA6IHN4Z2FfMTU7CisJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCB2YWxzLCBBUlJBWV9TSVpFKHN4Z2FfMTUpKTsKKwkJcmV0dXJuOworCSAgICB9CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KQEAgLTQxMjAsNiArNDIwMyw3IEBACiAJY2FzZSBTRU5fT1YyNjEwQUU6CiAJY2FzZSBTRU5fT1YzNjEwOgogCWNhc2UgU0VOX09WNzY3MDoKKwljYXNlIFNFTl9PVjk2MDA6CiAJCW1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncyhzZCk7CiAJCXJldHVybjsKIAljYXNlIFNFTl9PVjc2NjA6CkBAIC00OTE5LDIzICs1MDAzLDI0IEBACiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDAwMyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9XOTk2OENGIH0sCi0Je1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNTIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1MiksCisJCS5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB8IEJSSURHRV9JTlZFUlRfTEVEIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNWYpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2MCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDYxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCi0Je1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNjQpLAotCQkuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAorCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDY0KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNjcpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKLQl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA2OCksCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNjgpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKKwl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDI4YyksCiAJCS5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB8IEJSSURHRV9JTlZFUlRfTEVEIH0sCi0Je1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAyOGMpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKIAl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAotCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU1KSwKLQkJLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKKwl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTExKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTExIH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTgpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTggfSwKLQl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxOSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAotCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTMwKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCisJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTkpLAorCQkuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAorCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MjgwMCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVkZYMiB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHg0NTE5KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDg1MTkpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc2U0MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc2U0MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzI4M2MyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zZTQwMS5jCkBAIC0wLDAgKzEsNzc0IEBACisvKgorICogR1NQQ0EgRW5kcG9pbnRzIChmb3JtZXJseSBrbm93biBhcyBBT1gpIHNlNDAxIFVTQiBDYW1lcmEgc3ViIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIEJhc2VkIG9uIHRoZSB2NGwxIHNlNDAxIGRyaXZlciB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyb2VuIEIuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzZTQwMSIKKworI2RlZmluZSBCVUxLX1NJWkUgNDA5NgorI2RlZmluZSBQQUNLRVRfU0laRSAxMDI0CisjZGVmaW5lIFJFQURfUkVRX1NJWkUgNjQKKyNkZWZpbmUgTUFYX01PREVTICgoUkVBRF9SRVFfU0laRSAtIDYpIC8gNCkKKy8qIFRoZSBzZTQwMSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdXNlcyBhIGZpeGVkIHF1YW50IGZhY3Rvciwgd2hpY2gKKyAgIGNhbiBiZSBjb25maWd1cmVkIGJ5IHNldHRpbmcgdGhlIGhpZ2ggbmliYmxlIG9mIHRoZSBTRTQwMV9PUEVSQVRJTkdNT0RFCisgICBmZWF0dXJlLiBUaGlzIG5lZWRzIHRvIGV4YWN0bHkgbWF0Y2ggd2hhdCBpcyBpbiBsaWJ2NGwhICovCisjZGVmaW5lIFNFNDAxX1FVQU5UX0ZBQ1QgOAorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJzZTQwMS5oIgorCitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFbmRwb2ludHMgc2U0MDEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogY29udHJvbHMgKi8KK2VudW0gZV9jdHJsIHsKKwlCUklHSFRORVNTLAorCUdBSU4sCisJRVhQT1NVUkUsCisJRlJFUSwKKwlOQ1RSTAkvKiBudW1iZXIgb2YgY29udHJvbHMgKi8KK307CisKKy8qIGV4cG9zdXJlIGNoYW5nZSBzdGF0ZSBtYWNoaW5lIHN0YXRlcyAqLworZW51bSB7CisJRVhQT19DSEFOR0VELAorCUVYUE9fRFJPUF9GUkFNRSwKKwlFWFBPX05PX0NIQU5HRSwKK307CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJc3RydWN0IGdzcGNhX2N0cmwgY3RybHNbTkNUUkxdOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm10c1tNQVhfTU9ERVNdOworCWludCBwaXhlbHNfcmVhZDsKKwlpbnQgcGFja2V0X3JlYWQ7CisJdTggcGFja2V0W1BBQ0tFVF9TSVpFXTsKKwl1OCByZXN0YXJ0X3N0cmVhbTsKKwl1OCBidXR0b25fc3RhdGU7CisJdTggcmVzZXRsZXZlbDsKKwl1OCByZXNldGxldmVsX2ZyYW1lX2NvdW50OworCWludCByZXNldGxldmVsX2FkanVzdF9kaXI7CisJaW50IGV4cG9fY2hhbmdlX3N0YXRlOworfTsKKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW05DVFJMXSA9IHsKK1tCUklHSFRORVNTXSA9IHsKKwkJeworCQkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDI1NSwKKwkJCS5zdGVwICAgID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMTUsCisJCX0sCisJCS5zZXRfY29udHJvbCA9IHNldGJyaWdodG5lc3MKKwl9LAorW0dBSU5dID0geworCQl7CisJCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAgICA9ICJHYWluIiwKKwkJCS5taW5pbXVtID0gMCwKKwkJCS5tYXhpbXVtID0gNTAsIC8qIFJlYWxseSA2MyBidXQgPiA1MCBpcyBub3QgcHJldHR5ICovCisJCQkuc3RlcCAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDI1LAorCQl9LAorCQkuc2V0X2NvbnRyb2wgPSBzZXRnYWluCisJfSwKK1tFWFBPU1VSRV0gPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAzMjc2NywKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMTUwMDAsCisJCX0sCisJCS5zZXRfY29udHJvbCA9IHNldGV4cG9zdXJlCisJfSwKK1tGUkVRXSA9IHsKKwkJeworCQkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDIsCisJCQkuc3RlcCAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCX0sCisJCS5zZXRfY29udHJvbCA9IHNldGV4cG9zdXJlCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHNlNDAxX3dyaXRlX3JlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZXEsIHUxNiB2YWx1ZSwKKwkJCSAgICBpbnQgc2lsZW50KQoreworCWludCBlcnI7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwgcmVxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgdmFsdWUsIDAsIE5VTEwsIDAsIDEwMDApOworCWlmIChlcnIgPCAwKSB7CisJCWlmICghc2lsZW50KQorCQkJZXJyKCJ3cml0ZSByZXEgZmFpbGVkIHJlcSAlIzA0eCB2YWwgJSMwNHggZXJyb3IgJWQiLAorCQkJICAgIHJlcSwgdmFsdWUsIGVycik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX3JlYWRfcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlcSwgaW50IHNpbGVudCkKK3sKKwlpbnQgZXJyOworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKworCWlmIChVU0JfQlVGX1NaIDwgUkVBRF9SRVFfU0laRSkgeworCQllcnIoIlVTQl9CVUZfU1ogdG9vIHNtYWxsISEiKTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gLUVOT0JVRlM7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLCByZXEsCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgUkVBRF9SRVFfU0laRSwgMTAwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCFzaWxlbnQpCisJCQllcnIoInJlYWQgcmVxIGZhaWxlZCByZXEgJSMwNHggZXJyb3IgJWQiLCByZXEsIGVycik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX3NldF9mZWF0dXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgICAgIHUxNiBzZWxlY3RvciwgdTE2IHBhcmFtKQoreworCWludCBlcnI7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFNFNDAxX1JFUV9TRVRfRVhUX0ZFQVRVUkUsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBwYXJhbSwgc2VsZWN0b3IsIE5VTEwsIDAsIDEwMDApOworCWlmIChlcnIgPCAwKSB7CisJCWVycigic2V0IGZlYXR1cmUgZmFpbGVkIHNlbCAlIzA0eCBwYXJhbSAlIzA0eCBlcnJvciAlZCIsCisJCSAgICBzZWxlY3RvciwgcGFyYW0sIGVycik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfZ2V0X2ZlYXR1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgc2VsZWN0b3IpCit7CisJaW50IGVycjsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworCisJaWYgKFVTQl9CVUZfU1ogPCAyKSB7CisJCWVycigiVVNCX0JVRl9TWiB0b28gc21hbGwhISIpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRU5PQlVGUzsKKwkJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKKwl9CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgU0U0MDFfUkVRX0dFVF9FWFRfRkVBVFVSRSwKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwgc2VsZWN0b3IsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMiwgMTAwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCJnZXQgZmVhdHVyZSBmYWlsZWQgc2VsICUjMDR4IGVycm9yICVkIiwgc2VsZWN0b3IsIGVycik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IGVycjsKKwkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSB8IChnc3BjYV9kZXYtPnVzYl9idWZbMV0gPDwgOCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQlJJR0hUTkVTUykpCisJCXJldHVybjsKKworCS8qIEhERzogdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGRvIGFueXRoaW5nIG9uIG15IGNhbSAqLworCXNlNDAxX3dyaXRlX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9TRVRfQlJULAorCQkJc2QtPmN0cmxzW0JSSUdIVE5FU1NdLnZhbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1MTYgZ2FpbiA9IDYzIC0gc2QtPmN0cmxzW0dBSU5dLnZhbDsKKworCS8qIHJlZCBjb2xvciBnYWluICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0FSQ0csIGdhaW4pOworCS8qIGdyZWVuIGNvbG9yIGdhaW4gKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShnc3BjYV9kZXYsIEhWNzEzMV9SRUdfQUdDRywgZ2Fpbik7CisJLyogYmx1ZSBjb2xvciBnYWluICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0FCQ0csIGdhaW4pOworfQorCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpbnRlZ3JhdGlvbiA9IHNkLT5jdHJsc1tFWFBPU1VSRV0udmFsIDw8IDY7CisJdTggZXhwb3NlX2gsIGV4cG9zZV9tLCBleHBvc2VfbDsKKworCS8qIERvIHRoaXMgYmVmb3JlIHRoZSBzZXRfZmVhdHVyZSBjYWxscywgZm9yIHByb3BlciB0aW1pbmcgd3J0CisJICAgdGhlIGludGVycnVwdCBkcml2ZW4gcGt0X3NjYW4uIE5vdGUgd2UgbWF5IHN0aWxsIHJhY2UgYnV0IHRoYXQKKwkgICBpcyBub3QgYSBiaWcgaXNzdWUsIHRoZSBleHBvIGNoYW5nZSBzdGF0ZSBtYWNoaW5lIGlzIG1lcmVseSBmb3IKKwkgICBhdm9pZGluZyB1bmRlcmV4cG9zZWQgZnJhbWVzIGdldHRpbmcgc2VuZCBvdXQsIGlmIG9uZSBzbmVha3MKKwkgICB0aHJvdWdoIHNvIGJlIGl0ICovCisJc2QtPmV4cG9fY2hhbmdlX3N0YXRlID0gRVhQT19DSEFOR0VEOworCisJaWYgKHNkLT5jdHJsc1tGUkVRXS52YWwgPT0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWikKKwkJaW50ZWdyYXRpb24gPSBpbnRlZ3JhdGlvbiAtIGludGVncmF0aW9uICUgMTA2NjY3OworCWlmIChzZC0+Y3RybHNbRlJFUV0udmFsID09IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFopCisJCWludGVncmF0aW9uID0gaW50ZWdyYXRpb24gLSBpbnRlZ3JhdGlvbiAlIDg4ODg5OworCisJZXhwb3NlX2ggPSAoaW50ZWdyYXRpb24gPj4gMTYpOworCWV4cG9zZV9tID0gKGludGVncmF0aW9uID4+IDgpOworCWV4cG9zZV9sID0gaW50ZWdyYXRpb247CisKKwkvKiBpbnRlZ3JhdGlvbiB0aW1lIGxvdyAqLworCXNlNDAxX3NldF9mZWF0dXJlKGdzcGNhX2RldiwgSFY3MTMxX1JFR19USVRMLCBleHBvc2VfbCk7CisJLyogaW50ZWdyYXRpb24gdGltZSBtaWQgKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShnc3BjYV9kZXYsIEhWNzEzMV9SRUdfVElUTSwgZXhwb3NlX20pOworCS8qIGludGVncmF0aW9uIHRpbWUgaGlnaCAqLworCXNlNDAxX3NldF9mZWF0dXJlKGdzcGNhX2RldiwgSFY3MTMxX1JFR19USVRVLCBleHBvc2VfaCk7Cit9CisKK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKWdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJdTggKmNkID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWludCBpLCBqLCBuOworCWludCB3aWR0aHNbTUFYX01PREVTXSwgaGVpZ2h0c1tNQVhfTU9ERVNdOworCisJLyogUmVhZCB0aGUgY2FtZXJhIGRlc2NyaXB0b3IgKi8KKwlzZTQwMV9yZWFkX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9HRVRfQ0FNRVJBX0RFU0NSSVBUT1IsIDEpOworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIpIHsKKwkJLyogU29tZXRpbWVzIGFmdGVyIGJlaW5nIGlkbGUgZm9yIGEgd2hpbGUgdGhlIHNlNDAxIHdvbid0CisJCSAgIHJlc3BvbmQgYW5kIG5lZWRzIGEgZ29vZCBraWNraW5nICAqLworCQl1c2JfcmVzZXRfZGV2aWNlKGdzcGNhX2Rldi0+ZGV2KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gMDsKKwkJc2U0MDFfcmVhZF9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfR0VUX0NBTUVSQV9ERVNDUklQVE9SLCAwKTsKKwl9CisKKwkvKiBTb21lIGNhbWVyYXMgc3RhcnQgd2l0aCB0aGVpciBMRUQgb24gKi8KKwlzZTQwMV93cml0ZV9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDAsIDApOworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIpCisJCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CisKKwlpZiAoY2RbMV0gIT0gMHg0MSkgeworCQllcnIoIldyb25nIGRlc2NyaXB0b3IgdHlwZSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIShjZFsyXSAmIFNFNDAxX0ZPUk1BVF9CQVlFUikpIHsKKwkJZXJyKCJCYXllciBmb3JtYXQgbm90IHN1cHBvcnRlZCEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNkWzNdKQorCQlpbmZvKCJFeHRyYUZlYXR1cmVzOiAlZCIsIGNkWzNdKTsKKworCW4gPSBjZFs0XSB8IChjZFs1XSA8PCA4KTsKKwlpZiAobiA+IE1BWF9NT0RFUykgeworCQllcnIoIlRvbyBtYW55IGZyYW1lIHNpemVzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuIDsgaSsrKSB7CisJCXdpZHRoc1tpXSA9IGNkWzYgKyBpICogNCArIDBdIHwgKGNkWzYgKyBpICogNCArIDFdIDw8IDgpOworCQloZWlnaHRzW2ldID0gY2RbNiArIGkgKiA0ICsgMl0gfCAoY2RbNiArIGkgKiA0ICsgM10gPDwgOCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG4gOyBpKyspIHsKKwkJc2QtPmZtdHNbaV0ud2lkdGggPSB3aWR0aHNbaV07CisJCXNkLT5mbXRzW2ldLmhlaWdodCA9IGhlaWdodHNbaV07CisJCXNkLT5mbXRzW2ldLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlzZC0+Zm10c1tpXS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJCXNkLT5mbXRzW2ldLnByaXYgPSAxOworCisJCS8qIGphbmdndSBjb21wcmVzc2lvbiBvbmx5IHdvcmtzIGZvciAxLzR0aCBvciAxLzE2dGggcmVzICovCisJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKKwkJCWlmICh3aWR0aHNbal0gLyAyID09IHdpZHRoc1tpXSAmJgorCQkJICAgIGhlaWdodHNbal0gLyAyID09IGhlaWdodHNbaV0pIHsKKwkJCQlzZC0+Zm10c1tpXS5wcml2ID0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiAxLzE2dGggaWYgYXZhaWxhYmxlIHRvbyBpcyBiZXR0ZXIgdGhlbiAxLzR0aCwgYmVjYXVzZQorCQkgICB3ZSB0aGVuIHVzZSBhIGxhcmdlciBhcmVhIG9mIHRoZSBzZW5zb3IgKi8KKwkJZm9yIChqID0gMDsgaiA8IG47IGorKykgeworCQkJaWYgKHdpZHRoc1tqXSAvIDQgPT0gd2lkdGhzW2ldICYmCisJCQkgICAgaGVpZ2h0c1tqXSAvIDQgPT0gaGVpZ2h0c1tpXSkgeworCQkJCXNkLT5mbXRzW2ldLnByaXYgPSA0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHNkLT5mbXRzW2ldLnByaXYgPT0gMSkgeworCQkJLyogTm90IGEgMS80dGggb3IgMS8xNnRoIHJlcywgdXNlIGJheWVyICovCisJCQlzZC0+Zm10c1tpXS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCQlzZC0+Zm10c1tpXS5ieXRlc3BlcmxpbmUgPSB3aWR0aHNbaV07CisJCQlzZC0+Zm10c1tpXS5zaXplaW1hZ2UgPSB3aWR0aHNbaV0gKiBoZWlnaHRzW2ldOworCQkJaW5mbygiRnJhbWUgc2l6ZTogJWR4JWQgYmF5ZXIiLCB3aWR0aHNbaV0sIGhlaWdodHNbaV0pOworCQl9IGVsc2UgeworCQkJLyogRm91bmQgYSBtYXRjaCB1c2UgamFuZ2d1IGNvbXByZXNzaW9uICovCisJCQlzZC0+Zm10c1tpXS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TRTQwMTsKKwkJCXNkLT5mbXRzW2ldLmJ5dGVzcGVybGluZSA9IDA7CisJCQlzZC0+Zm10c1tpXS5zaXplaW1hZ2UgPSB3aWR0aHNbaV0gKiBoZWlnaHRzW2ldICogMzsKKwkJCWluZm8oIkZyYW1lIHNpemU6ICVkeCVkIDEvJWR0aCBqYW5nZ3UiLAorCQkJICAgICB3aWR0aHNbaV0sIGhlaWdodHNbaV0sCisJCQkgICAgIHNkLT5mbXRzW2ldLnByaXYgKiBzZC0+Zm10c1tpXS5wcml2KTsKKwkJfQorCX0KKworCWNhbS0+Y2FtX21vZGUgPSBzZC0+Zm10czsKKwljYW0tPm5tb2RlcyA9IG47CisJY2FtLT5idWxrID0gMTsKKwljYW0tPmJ1bGtfc2l6ZSA9IEJVTEtfU0laRTsKKwljYW0tPmJ1bGtfbnVyYnMgPSA0OworCWNhbS0+Y3RybHMgPSBzZC0+Y3RybHM7CisJZ3NwY2FfZGV2LT5uYmFsdCA9IDE7ICAvKiBJZ25vcmUgdGhlIGJvZ3VzIGlzb2MgYWx0IHNldHRpbmdzICovCisJc2QtPnJlc2V0bGV2ZWwgPSAweDJkOyAvKiBTZXQgaW5pdGlhbCByZXNldGxldmVsICovCisKKwkvKiBTZWUgaWYgdGhlIGNhbWVyYSBzdXBwb3J0cyBicmlnaHRuZXNzICovCisJc2U0MDFfcmVhZF9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfR0VUX0JSVCwgMSk7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VycikgeworCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQlJJR0hUTkVTUyk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKilnc3BjYV9kZXY7CisJaW50IG11bHQgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlpbnQgbW9kZSA9IDA7CisKKwlzZTQwMV93cml0ZV9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCAxKTsKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyKSB7CisJCS8qIFNvbWV0aW1lcyBhZnRlciBiZWluZyBpZGxlIGZvciBhIHdoaWxlIHRoZSBzZTQwMSB3b24ndAorCQkgICByZXNwb25kIGFuZCBuZWVkcyBhIGdvb2Qga2lja2luZyAgKi8KKwkJdXNiX3Jlc2V0X2RldmljZShnc3BjYV9kZXYtPmRldik7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisJCXNlNDAxX3dyaXRlX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDEsIDApOworCX0KKwlzZTQwMV93cml0ZV9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIDApOworCisJc2U0MDFfc2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX01PREVfQiwgMHgwNSk7CisKKwkvKiBzZXQgc2l6ZSArIG1vZGUgKi8KKwlzZTQwMV93cml0ZV9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfU0VUX1dJRFRILAorCQkJZ3NwY2FfZGV2LT53aWR0aCAqIG11bHQsIDApOworCXNlNDAxX3dyaXRlX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9TRVRfSEVJR0hULAorCQkJZ3NwY2FfZGV2LT5oZWlnaHQgKiBtdWx0LCAwKTsKKwkvKgorCSAqIEhERzogZGlzYWJsZWQgdGhpcyBhcyBpdCBkb2VzIG5vdCBzZWVtIHRvIGRvIGFueXRoaW5nCisJICogc2U0MDFfd3JpdGVfcmVxKGdzcGNhX2RldiwgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERSwKKwkgKgkJICAgU0U0MDFfRk9STUFUX0JBWUVSLCAwKTsKKwkgKi8KKworCXN3aXRjaCAobXVsdCkgeworCWNhc2UgMTogLyogUmF3IGJheWVyICovCisJCW1vZGUgPSAweDAzOyBicmVhazsKKwljYXNlIDI6IC8qIDEvNHRoIGphbmdndSAqLworCQltb2RlID0gU0U0MDFfUVVBTlRfRkFDVCA8PCA0OyBicmVhazsKKwljYXNlIDQ6IC8qIDEvMTZ0aCBqYW5nZ3UgKi8KKwkJbW9kZSA9IChTRTQwMV9RVUFOVF9GQUNUIDw8IDQpIHwgMHgwMjsgYnJlYWs7CisJfQorCXNlNDAxX3NldF9mZWF0dXJlKGdzcGNhX2RldiwgU0U0MDFfT1BFUkFUSU5HTU9ERSwgbW9kZSk7CisKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2U0MDFfc2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0FSTFYsIHNkLT5yZXNldGxldmVsKTsKKworCXNkLT5wYWNrZXRfcmVhZCA9IDA7CisJc2QtPnBpeGVsc19yZWFkID0gMDsKKwlzZC0+cmVzdGFydF9zdHJlYW0gPSAwOworCXNkLT5yZXNldGxldmVsX2ZyYW1lX2NvdW50ID0gMDsKKwlzZC0+cmVzZXRsZXZlbF9hZGp1c3RfZGlyID0gMDsKKwlzZC0+ZXhwb19jaGFuZ2Vfc3RhdGUgPSBFWFBPX05PX0NIQU5HRTsKKworCXNlNDAxX3dyaXRlX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9TVEFSVF9DT05USU5VT1VTX0NBUFRVUkUsIDAsIDApOworCisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXNlNDAxX3dyaXRlX3JlcShnc3BjYV9kZXYsIFNFNDAxX1JFUV9TVE9QX0NPTlRJTlVPVVNfQ0FQVFVSRSwgMCwgMCk7CisJc2U0MDFfd3JpdGVfcmVxKGdzcGNhX2RldiwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAwLCAwKTsKKwlzZTQwMV93cml0ZV9yZXEoZ3NwY2FfZGV2LCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2RfZHFfY2FsbGJhY2soc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopZ3NwY2FfZGV2OworCXVuc2lnbmVkIGludCBhaHJjLCBhbHJjOworCWludCBvbGRyZXNldCwgYWRqdXN0X2RpcjsKKworCS8qIFJlc3RhcnQgdGhlIHN0cmVhbSBpZiByZXF1ZXN0ZWQgZG8gc28gYnkgcGt0X3NjYW4gKi8KKwlpZiAoc2QtPnJlc3RhcnRfc3RyZWFtKSB7CisJCXNkX3N0b3BOKGdzcGNhX2Rldik7CisJCXNkX3N0YXJ0KGdzcGNhX2Rldik7CisJCXNkLT5yZXN0YXJ0X3N0cmVhbSA9IDA7CisJfQorCisJLyogQXV0b21hdGljYWxseSBhZGp1c3Qgc2Vuc29yIHJlc2V0IGxldmVsCisJICAgSHl1bmRhaSBoYXZlIHNvbWUgcmVhbGx5IG5pY2UgZG9jcyBhYm91dCB0aGlzIGFuZCBvdGhlciBzZW5zb3IKKwkgICByZWxhdGVkIHN0dWZmIG9uIHRoZWlyIGhvbWVwYWdlOiB3d3cuaGVpLmNvLmtyICovCisJc2QtPnJlc2V0bGV2ZWxfZnJhbWVfY291bnQrKzsKKwlpZiAoc2QtPnJlc2V0bGV2ZWxfZnJhbWVfY291bnQgPCAyMCkKKwkJcmV0dXJuOworCisJLyogRm9yIHNvbWUgcmVhc29uIHRoaXMgbm9ybWFsbHkgcmVhZC1vbmx5IHJlZ2lzdGVyIGRvZXNuJ3QgZ2V0IHJlc2V0CisJICAgdG8gemVybyBhZnRlciByZWFkaW5nIHRoZW0ganVzdCBvbmNlLi4uICovCisJc2U0MDFfZ2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0hJUkVGTk9IKTsKKwlzZTQwMV9nZXRfZmVhdHVyZShnc3BjYV9kZXYsIEhWNzEzMV9SRUdfSElSRUZOT0wpOworCXNlNDAxX2dldF9mZWF0dXJlKGdzcGNhX2RldiwgSFY3MTMxX1JFR19MT1JFRk5PSCk7CisJc2U0MDFfZ2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0xPUkVGTk9MKTsKKwlhaHJjID0gMjU2KnNlNDAxX2dldF9mZWF0dXJlKGdzcGNhX2RldiwgSFY3MTMxX1JFR19ISVJFRk5PSCkgKworCSAgICBzZTQwMV9nZXRfZmVhdHVyZShnc3BjYV9kZXYsIEhWNzEzMV9SRUdfSElSRUZOT0wpOworCWFscmMgPSAyNTYqc2U0MDFfZ2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0xPUkVGTk9IKSArCisJICAgIHNlNDAxX2dldF9mZWF0dXJlKGdzcGNhX2RldiwgSFY3MTMxX1JFR19MT1JFRk5PTCk7CisKKwkvKiBOb3QgYW4gZXhhY3Qgc2NpZW5jZSwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgcHJldHR5IHdlbGwuLi4gKi8KKwlvbGRyZXNldCA9IHNkLT5yZXNldGxldmVsOworCWlmIChhbHJjID4gMTApIHsKKwkJd2hpbGUgKGFscmMgPj0gMTAgJiYgc2QtPnJlc2V0bGV2ZWwgPCA2MykgeworCQkJc2QtPnJlc2V0bGV2ZWwrKzsKKwkJCWFscmMgLz0gMjsKKwkJfQorCX0gZWxzZSBpZiAoYWhyYyA+IDIwKSB7CisJCXdoaWxlIChhaHJjID49IDIwICYmIHNkLT5yZXNldGxldmVsID4gMCkgeworCQkJc2QtPnJlc2V0bGV2ZWwtLTsKKwkJCWFocmMgLz0gMjsKKwkJfQorCX0KKwkvKiBEZXRlY3QgcGluZy1wb25nLWluZyBhbmQgaGFsdmUgYWRqdXN0bWVudCB0byBhdm9pZCBvdmVyc2hvb3QgKi8KKwlpZiAoc2QtPnJlc2V0bGV2ZWwgPiBvbGRyZXNldCkKKwkJYWRqdXN0X2RpciA9IDE7CisJZWxzZQorCQlhZGp1c3RfZGlyID0gLTE7CisJaWYgKHNkLT5yZXNldGxldmVsX2FkanVzdF9kaXIgJiYKKwkgICAgc2QtPnJlc2V0bGV2ZWxfYWRqdXN0X2RpciAhPSBhZGp1c3RfZGlyKQorCQlzZC0+cmVzZXRsZXZlbCA9IG9sZHJlc2V0ICsgKHNkLT5yZXNldGxldmVsIC0gb2xkcmVzZXQpIC8gMjsKKworCWlmIChzZC0+cmVzZXRsZXZlbCAhPSBvbGRyZXNldCkgeworCQlzZC0+cmVzZXRsZXZlbF9hZGp1c3RfZGlyID0gYWRqdXN0X2RpcjsKKwkJc2U0MDFfc2V0X2ZlYXR1cmUoZ3NwY2FfZGV2LCBIVjcxMzFfUkVHX0FSTFYsIHNkLT5yZXNldGxldmVsKTsKKwl9CisKKwlzZC0+cmVzZXRsZXZlbF9mcmFtZV9jb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2NvbXBsZXRlX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKilnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5leHBvX2NoYW5nZV9zdGF0ZSkgeworCWNhc2UgRVhQT19DSEFOR0VEOgorCQkvKiBUaGUgZXhwb3N1cmUgd2FzIGNoYW5nZWQgd2hpbGUgdGhpcyBmcmFtZQorCQkgICB3YXMgYmVpbmcgc2VuZCwgc28gdGhpcyBmcmFtZSBpcyBvayAqLworCQlzZC0+ZXhwb19jaGFuZ2Vfc3RhdGUgPSBFWFBPX0RST1BfRlJBTUU7CisJCWJyZWFrOworCWNhc2UgRVhQT19EUk9QX0ZSQU1FOgorCQkvKiBUaGUgZXhwb3N1cmUgd2FzIGNoYW5nZWQgd2hpbGUgdGhpcyBmcmFtZQorCQkgICB3YXMgYmVpbmcgY2FwdHVyZWQsIGRyb3AgaXQhICovCisJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQlzZC0+ZXhwb19jaGFuZ2Vfc3RhdGUgPSBFWFBPX05PX0NIQU5HRTsKKwkJYnJlYWs7CisJY2FzZSBFWFBPX05PX0NIQU5HRToKKwkJYnJlYWs7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2Nhbl9qYW5nZ3Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKWdzcGNhX2RldjsKKwlpbnQgaW1hZ2VzaXplID0gZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0OworCWludCBpLCBwbGVuLCBiaXRzLCBwaXhlbHMsIGluZm8sIGNvdW50OworCisJaWYgKHNkLT5yZXN0YXJ0X3N0cmVhbSkKKwkJcmV0dXJuOworCisJLyogU29tZXRpbWVzIGEgMTAyNCBieXRlcyBnYXJiYWdlIGJ1bGsgcGFja2V0IGlzIHNlbmQgYmV0d2VlbiBmcmFtZXMgKi8KKwlpZiAoZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID09IExBU1RfUEFDS0VUICYmIGxlbiA9PSAxMDI0KSB7CisJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQlyZXR1cm47CisJfQorCisJaSA9IDA7CisJd2hpbGUgKGkgPCBsZW4pIHsKKwkJLyogUmVhZCBoZWFkZXIgaWYgbm90IGFscmVhZHkgYmUgcHJlc2VudCBmcm9tIHByZXYgYnVsayBwa3QgKi8KKwkJaWYgKHNkLT5wYWNrZXRfcmVhZCA8IDQpIHsKKwkJCWNvdW50ID0gNCAtIHNkLT5wYWNrZXRfcmVhZDsKKwkJCWlmIChjb3VudCA+IGxlbiAtIGkpCisJCQkJY291bnQgPSBsZW4gLSBpOworCQkJbWVtY3B5KCZzZC0+cGFja2V0W3NkLT5wYWNrZXRfcmVhZF0sICZkYXRhW2ldLCBjb3VudCk7CisJCQlzZC0+cGFja2V0X3JlYWQgKz0gY291bnQ7CisJCQlpICs9IGNvdW50OworCQkJaWYgKHNkLT5wYWNrZXRfcmVhZCA8IDQpCisJCQkJYnJlYWs7CisJCX0KKwkJYml0cyAgID0gc2QtPnBhY2tldFszXSArIChzZC0+cGFja2V0WzJdIDw8IDgpOworCQlwaXhlbHMgPSBzZC0+cGFja2V0WzFdICsgKChzZC0+cGFja2V0WzBdICYgMHgzZikgPDwgOCk7CisJCWluZm8gICA9IChzZC0+cGFja2V0WzBdICYgMHhjMCkgPj4gNjsKKwkJcGxlbiAgID0gKChiaXRzICsgNDcpID4+IDQpIDw8IDE7CisJCS8qIFNhbml0eSBjaGVja3MgKi8KKwkJaWYgKHBsZW4gPiAxMDI0KSB7CisJCQllcnIoImludmFsaWQgcGFja2V0IGxlbiAlZCByZXN0YXJ0aW5nIHN0cmVhbSIsIHBsZW4pOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAoaW5mbyA9PSAzKSB7CisJCQllcnIoInVua25vd24gZnJhbWUgaW5mbyB2YWx1ZSByZXN0YXJ0aW5nIHN0cmVhbSIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJCS8qIFJlYWQgKHJlbWFpbmRlciBvZikgcGFja2V0IGNvbnRlbnRzICovCisJCWNvdW50ID0gcGxlbiAtIHNkLT5wYWNrZXRfcmVhZDsKKwkJaWYgKGNvdW50ID4gbGVuIC0gaSkKKwkJCWNvdW50ID0gbGVuIC0gaTsKKwkJbWVtY3B5KCZzZC0+cGFja2V0W3NkLT5wYWNrZXRfcmVhZF0sICZkYXRhW2ldLCBjb3VudCk7CisJCXNkLT5wYWNrZXRfcmVhZCArPSBjb3VudDsKKwkJaSArPSBjb3VudDsKKwkJaWYgKHNkLT5wYWNrZXRfcmVhZCA8IHBsZW4pCisJCQlicmVhazsKKworCQlzZC0+cGl4ZWxzX3JlYWQgKz0gcGl4ZWxzOworCQlzZC0+cGFja2V0X3JlYWQgPSAwOworCisJCXN3aXRjaCAoaW5mbykgeworCQljYXNlIDA6IC8qIEZyYW1lIGRhdGEgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgc2QtPnBhY2tldCwKKwkJCQkJcGxlbik7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBFT0YgKi8KKwkJCWlmIChzZC0+cGl4ZWxzX3JlYWQgIT0gaW1hZ2VzaXplKSB7CisJCQkJZXJyKCJmcmFtZSBzaXplICVkIGV4cGVjdGVkICVkIiwKKwkJCQkgICAgc2QtPnBpeGVsc19yZWFkLCBpbWFnZXNpemUpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlzZF9jb21wbGV0ZV9mcmFtZShnc3BjYV9kZXYsIHNkLT5wYWNrZXQsIHBsZW4pOworCQkJcmV0dXJuOyAvKiBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBidWxrIHBhY2tldCAhISAqLworCQljYXNlIDI6IC8qIFNPRiAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBzZC0+cGFja2V0LAorCQkJCQlwbGVuKTsKKwkJCXNkLT5waXhlbHNfcmVhZCA9IHBpeGVsczsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybjsKKworZXJyb3I6CisJc2QtPnJlc3RhcnRfc3RyZWFtID0gMTsKKwkvKiBHaXZlIHVzZXJzcGFjZSBhIDAgYnl0ZXMgZnJhbWUsIHNvIG91ciBkcSBjYWxsYmFjayBnZXRzCisJICAgY2FsbGVkIGFuZCBpdCBjYW4gcmVzdGFydCB0aGUgc3RyZWFtICovCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBOVUxMLCAwKTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuX2JheWVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWludCBpbWFnZXNpemUgPSBjYW0tPmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5zaXplaW1hZ2U7CisKKwlpZiAoZ3NwY2FfZGV2LT5pbWFnZV9sZW4gPT0gMCkgeworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGRhdGEsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZ3NwY2FfZGV2LT5pbWFnZV9sZW4gKyBsZW4gPj0gaW1hZ2VzaXplKSB7CisJCXNkX2NvbXBsZXRlX2ZyYW1lKGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgbXVsdCA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAobXVsdCA9PSAxKSAvKiBtdWx0ID09IDEgbWVhbnMgcmF3IGJheWVyICovCisJCXNkX3BrdF9zY2FuX2JheWVyKGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwllbHNlCisJCXNkX3BrdF9zY2FuX2phbmdndShnc3BjYV9kZXYsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKK3sKKwlzd2l0Y2ggKG1lbnUtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKKwkJc3dpdGNoIChtZW51LT5pbmRleCkgeworCQljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEOgorCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWjoKKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKKwkJCXJldHVybiAwOworCQljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFo6CisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTU9EVUxFKQorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKWdzcGNhX2RldjsKKwl1OCBzdGF0ZTsKKworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlzdGF0ZSA9IGRhdGFbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoc2QtPmJ1dHRvbl9zdGF0ZSAhPSBzdGF0ZSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCBzdGF0ZSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlzZC0+YnV0dG9uX3N0YXRlID0gc3RhdGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY3RybHMgPSBzZF9jdHJscywKKwkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCA9IHNkX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLmRxX2NhbGxiYWNrID0gc2RfZHFfY2FsbGJhY2ssCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTU9EVUxFKQorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDNlOCwgMHgwMDA0KX0sIC8qIEVuZHBvaW50cy9Bb3ggU0U0MDEgKi8KKwl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMwYil9LCAvKiBQaGlsaXBzIFBDVkM2NjVLICovCisJe1VTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDEpfSwgLyogS2Vuc2luZ3RvbiA2NzAxNCAqLworCXtVU0JfREVWSUNFKDB4MDQ3ZCwgMHg1MDAyKX0sIC8qIEtlbnNpbmd0b24gNjcwMSg1LzcpICovCisJe1VTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDMpfSwgLyogS2Vuc2luZ3RvbiA2NzAxNiAqLworCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCQlUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBpbnQgc2RfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCisJLnByZV9yZXNldCA9IHNkX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9IHNkX3Bvc3RfcmVzZXQsCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zZTQwMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zZTQwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDhlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NlNDAxLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIEdTUENBIEVuZHBvaW50cyAoZm9ybWVybHkga25vd24gYXMgQU9YKSBzZTQwMSBVU0IgQ2FtZXJhIHN1YiBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgdjRsMSBzZTQwMSBkcml2ZXIgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEplcm9lbiBCLiBWcmVla2VuIChwZTFyeHFAYW1zYXQub3JnKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBTRTQwMV9SRVFfR0VUX0NBTUVSQV9ERVNDUklQVE9SCQkweDA2CisjZGVmaW5lIFNFNDAxX1JFUV9TVEFSVF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MQorI2RlZmluZSBTRTQwMV9SRVFfU1RPUF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MgorI2RlZmluZSBTRTQwMV9SRVFfQ0FQVFVSRV9GUkFNRQkJCTB4NDMKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9CUlQJCQkweDQ0CisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfQlJUCQkJMHg0NQorI2RlZmluZSBTRTQwMV9SRVFfR0VUX1dJRFRICQkJMHg0YworI2RlZmluZSBTRTQwMV9SRVFfU0VUX1dJRFRICQkJMHg0ZAorI2RlZmluZSBTRTQwMV9SRVFfR0VUX0hFSUdIVAkJCTB4NGUKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9IRUlHSFQJCQkweDRmCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfT1VUUFVUX01PREUJCTB4NTAKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERQkJMHg1MQorI2RlZmluZSBTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFCQkweDUyCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfRVhUX0ZFQVRVUkUJCTB4NTMKKyNkZWZpbmUgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUgkJCTB4NTYKKyNkZWZpbmUgU0U0MDFfUkVRX0xFRF9DT05UUk9MCQkJMHg1NworI2RlZmluZSBTRTQwMV9SRVFfQklPUwkJCQkweGZmCisKKyNkZWZpbmUgU0U0MDFfQklPU19SRUFECQkJCTB4MDcKKworI2RlZmluZSBTRTQwMV9GT1JNQVRfQkFZRVIJMHg0MAorCisvKiBIeXVuZGFpIGh2NzEzMWIgcmVnaXN0ZXJzCisgICA3MTIxIGFuZCA3MTQxIHNob3VsZCBiZSB0aGUgc2FtZSAoaGF2ZW4ndCByZWFsbHkgY2hlY2tlZC4uLikgKi8KKy8qIE1vZGUgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQQkJMHgwMAorI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQgkJMHgwMQorI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQwkJMHgwMgorLyogRnJhbWUgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0ZSU1UJCTB4MTAKKyNkZWZpbmUgSFY3MTMxX1JFR19GUlNMCQkweDExCisjZGVmaW5lIEhWNzEzMV9SRUdfRkNTVQkJMHgxMgorI2RlZmluZSBIVjcxMzFfUkVHX0ZDU0wJCTB4MTMKKyNkZWZpbmUgSFY3MTMxX1JFR19GV0hVCQkweDE0CisjZGVmaW5lIEhWNzEzMV9SRUdfRldITAkJMHgxNQorI2RlZmluZSBIVjcxMzFfUkVHX0ZXV1UJCTB4MTYKKyNkZWZpbmUgSFY3MTMxX1JFR19GV1dMCQkweDE3CisvKiBUaW1pbmcgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX1RIQlUJCTB4MjAKKyNkZWZpbmUgSFY3MTMxX1JFR19USEJMCQkweDIxCisjZGVmaW5lIEhWNzEzMV9SRUdfVFZCVQkJMHgyMgorI2RlZmluZSBIVjcxMzFfUkVHX1RWQkwJCTB4MjMKKyNkZWZpbmUgSFY3MTMxX1JFR19USVRVCQkweDI1CisjZGVmaW5lIEhWNzEzMV9SRUdfVElUTQkJMHgyNgorI2RlZmluZSBIVjcxMzFfUkVHX1RJVEwJCTB4MjcKKyNkZWZpbmUgSFY3MTMxX1JFR19UTUNECQkweDI4CisvKiBBZGp1c3QgUmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0FSTFYJCTB4MzAKKyNkZWZpbmUgSFY3MTMxX1JFR19BUkNHCQkweDMxCisjZGVmaW5lIEhWNzEzMV9SRUdfQUdDRwkJMHgzMgorI2RlZmluZSBIVjcxMzFfUkVHX0FCQ0cJCTB4MzMKKyNkZWZpbmUgSFY3MTMxX1JFR19BUEJWCQkweDM0CisjZGVmaW5lIEhWNzEzMV9SRUdfQVNMUAkJMHg1NAorLyogT2Zmc2V0IFJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19PRlNSCQkweDUwCisjZGVmaW5lIEhWNzEzMV9SRUdfT0ZTRwkJMHg1MQorI2RlZmluZSBIVjcxMzFfUkVHX09GU0IJCTB4NTIKKy8qIFJFc2V0IGxldmVsIHN0YXRpc3RpY3MgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0xPUkVGTk9ICTB4NTcKKyNkZWZpbmUgSFY3MTMxX1JFR19MT1JFRk5PTAkweDU4CisjZGVmaW5lIEhWNzEzMV9SRUdfSElSRUZOT0gJMHg1OQorI2RlZmluZSBIVjcxMzFfUkVHX0hJUkVGTk9MCTB4NWEKKworLyogc2U0MDEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNFNDAxX09QRVJBVElOR01PREUJMHgyMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCA4MWI4YTYwLi5jNDc3YWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTIzODYsNyArMjM4Niw3IEBACiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4MjIpOwogCQltc2xlZXAoMTAwKTsKIAkJcmVnMDEgPSBTQ0xfU0VMX09EIHwgU19QRE5fSU5WOwotCQlyZWcxNyAmPSBNQ0tfU0laRV9NQVNLOworCQlyZWcxNyAmPSB+TUNLX1NJWkVfTUFTSzsKIAkJcmVnMTcgfD0gMHgwNDsJCS8qIGNsb2NrIC8gNCAqLwogCQlicmVhazsKIAl9CkBAIC0yNTMyLDYgKzI1MzIsMTAgQEAKIAkJaWYgKCFtb2RlKSB7CQkJLyogaWYgNjQweDQ4MCAqLwogCQkJcmVnMTcgJj0gfk1DS19TSVpFX01BU0s7CiAJCQlyZWcxNyB8PSAweDA0OwkJLyogY2xvY2sgLyA0ICovCisJCX0gZWxzZSB7CisJCQlyZWcwMSAmPSB+U1lTX1NFTF80OE07CS8qIGNsayAyNE16ICovCisJCQlyZWcxNyAmPSB+TUNLX1NJWkVfTUFTSzsKKwkJCXJlZzE3IHw9IDB4MDI7CQkvKiBjbG9jayAvIDIgKi8KIAkJfQogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2MzA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCmluZGV4IGIwODljMGQuLjZlYzIzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jCkBAIC0yNDcsNyArMjQ3LDYgQEAKIAl7MHgzMCwgMHgwMDA0LCAweDAwMGF9LAogCXsweGIwLCAweDAwMDEsIDB4MDAwMH0sCiAKLQogCXsweGExLCAweDAwODAsIDB4MDAwMX0sCiAJezB4MzAsIDB4MDA0OSwgMHgwMDAwfSwKIAl7MHgzMCwgMHgwMDYwLCAweDAwMDV9LApAQCAtMjU2LDggKzI1NSw2IEBACiAJezB4MDAsIDB4MDAwMCwgMHgyMDAwfSwKIAl7MHgwMCwgMHgwMDEzLCAweDIzMDF9LAogCXsweDAwLCAweDAwMDMsIDB4MjAwMH0sCi0JezB4MDAsIDB4MDAwMCwgMHgyMDAwfSwKLQogfTsKIAogLyogY2xpY2tzbWFydCA0MjAgb3BlbiBkYXRhID8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggN2U3NjJkNS4uZDFkNzMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTEzODcsNyArMTM4Nyw3IEBACiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfRUZGRUNUUzoKIAkJaWYgKCh1bnNpZ25lZCkgbWVudS0+aW5kZXggPCBBUlJBWV9TSVpFKGVmZmVjdHNfY29udHJvbCkpIHsKLQkJCXN0cm5jcHkoKGNoYXIgKikgbWVudS0+bmFtZSwKKwkJCXN0cmxjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwKIAkJCQllZmZlY3RzX2NvbnRyb2xbbWVudS0+aW5kZXhdLAogCQkJCXNpemVvZiBtZW51LT5uYW1lKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCA1ZjFkYjQ2Li40NDFkYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtNDc0LDUgKzQ3NCw2IEBACiBtb2R1bGVfZXhpdChoZHB2cl9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMi4xIik7CiBNT0RVTEVfQVVUSE9SKCJKYW5uZSBHcnVuYXUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSGF1cHBhdWdlIEhEIFBWUiBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwppbmRleCA1MTRhZWE3Li4wODdmN2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC01NzQsNyArNTczLDYgQEAKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJoZHB2ciIpOwogCXN0cmNweShjYXAtPmNhcmQsICJIYXVwcGF1Z2UgSEQgUFZSIik7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7Ci0JY2FwLT52ZXJzaW9uID0gSERQVlJfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9ICAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJCQlWNEwyX0NBUF9BVURJTyAgICAgICAgIHwKIAkJCQlWNEwyX0NBUF9SRUFEV1JJVEU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKaW5kZXggMDcyZjIzYy4uZDY0MzlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMTgsMTIgKzE4LDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KIAotI2RlZmluZSBIRFBWUl9NQUpPUl9WRVJTSU9OIDAKLSNkZWZpbmUgSERQVlJfTUlOT1JfVkVSU0lPTiAyCi0jZGVmaW5lIEhEUFZSX1JFTEVBU0UgMAotI2RlZmluZSBIRFBWUl9WRVJTSU9OIFwKLQlLRVJORUxfVkVSU0lPTihIRFBWUl9NQUpPUl9WRVJTSU9OLCBIRFBWUl9NSU5PUl9WRVJTSU9OLCBIRFBWUl9SRUxFQVNFKQotCiAjZGVmaW5lIEhEUFZSX01BWCA4CiAjZGVmaW5lIEhEUFZSX0kyQ19NQVhfU0laRSAxMjgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCA4NGJkZjBmLi44ZjljYzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtMzYsNyArMzYsNiBAQAogICogICAgICAgICAgICAgICAgdXNpbmcgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgSml1bi1LdWVpIEp1bmcgQCBBVmVyTWVkaWEuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwppbmRleCBhN2Y1NGIwLi4zOGYwNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCkBAIC03MjIsOCArNzIyLDggQEAKIAogCS8qIElmIHRoZXJlIGFyZSBzdWJzY3JpYmVkIGV2ZW50cywgdGhlbiBvbmx5IHVzZSB0aGUgbmV3IGV2ZW50CiAJICAgQVBJIGluc3RlYWQgb2YgdGhlIG9sZCB2aWRlby5oIGJhc2VkIEFQSS4gKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmlkLT5maC5ldmVudHMtPnN1YnNjcmliZWQpKSB7Ci0JCXBvbGxfd2FpdChmaWxwLCAmaWQtPmZoLmV2ZW50cy0+d2FpdCwgd2FpdCk7CisJaWYgKCFsaXN0X2VtcHR5KCZpZC0+Zmguc3Vic2NyaWJlZCkpIHsKKwkJcG9sbF93YWl0KGZpbHAsICZpZC0+Zmgud2FpdCwgd2FpdCk7CiAJCS8qIFR1cm4gb2ZmIHRoZSBvbGQtc3R5bGUgdnN5bmMgZXZlbnRzICovCiAJCWNsZWFyX2JpdChJVlRWX0ZfSV9FVl9WU1lOQ19FTkFCTEVELCAmaXR2LT5pX2ZsYWdzKTsKIAkJaWYgKHY0bDJfZXZlbnRfcGVuZGluZygmaWQtPmZoKSkKQEAgLTc1MCw2ICs3NTAsNyBAQAogCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OwogCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbaWQtPnR5cGVdOwogCWludCBlb2YgPSB0ZXN0X2JpdChJVlRWX0ZfU19TVFJFQU1PRkYsICZzLT5zX2ZsYWdzKTsKKwl1bnNpZ25lZCByZXMgPSAwOwogCiAJLyogU3RhcnQgYSBjYXB0dXJlIGlmIHRoZXJlIGlzIG5vbmUgKi8KIAlpZiAoIWVvZiAmJiAhdGVzdF9iaXQoSVZUVl9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpIHsKQEAgLTc2OSwxMiArNzcwLDE2IEBACiAJLyogYWRkIHN0cmVhbSdzIHdhaXRxIHRvIHRoZSBwb2xsIGxpc3QgKi8KIAlJVlRWX0RFQlVHX0hJX0ZJTEUoIkVuY29kZXIgcG9sbFxuIik7CiAJcG9sbF93YWl0KGZpbHAsICZzLT53YWl0cSwgd2FpdCk7CisJaWYgKHY0bDJfZXZlbnRfcGVuZGluZygmaWQtPmZoKSkKKwkJcmVzIHw9IFBPTExQUkk7CisJZWxzZQorCQlwb2xsX3dhaXQoZmlscCwgJmlkLT5maC53YWl0LCB3YWl0KTsKIAogCWlmIChzLT5xX2Z1bGwubGVuZ3RoIHx8IHMtPnFfaW8ubGVuZ3RoKQotCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwkJcmV0dXJuIHJlcyB8IFBPTExJTiB8IFBPTExSRE5PUk07CiAJaWYgKGVvZikKLQkJcmV0dXJuIFBPTExIVVA7Ci0JcmV0dXJuIDA7CisJCXJldHVybiByZXMgfCBQT0xMSFVQOworCXJldHVybiByZXM7CiB9CiAKIHZvaWQgaXZ0dl9zdG9wX2NhcHR1cmUoc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQsIGludCBnb3BfZW5kKQpAQCAtOTYxLDEwICs5NjYsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdjRsMl9maF9pbml0KCZpdGVtLT5maCwgcy0+dmRldik7Ci0JaWYgKHMtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWIHx8Ci0JICAgIHMtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHKSB7Ci0JCXJlcyA9IHY0bDJfZXZlbnRfYWxsb2MoJml0ZW0tPmZoLCA2MCk7Ci0JfQogCWlmIChyZXMgPCAwKSB7CiAJCXY0bDJfZmhfZXhpdCgmaXRlbS0+ZmgpOwogCQlrZnJlZShpdGVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDEyMGM3ZDguLjNlNWMwOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtNzU3LDcgKzc1Nyw2IEBACiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIElWVFZfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGl0di0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwogCXNucHJpbnRmKHZjYXAtPmJ1c19pbmZvLCBzaXplb2YodmNhcC0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoaXR2LT5wZGV2KSk7Ci0JdmNhcC0+dmVyc2lvbiA9IElWVFZfRFJJVkVSX1ZFUlNJT047IAkgICAgLyogdmVyc2lvbiAqLwogCXZjYXAtPmNhcGFiaWxpdGllcyA9IGl0di0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDUxLDExICsxNDUwLDExIEBACiAJc3dpdGNoIChzdWItPnR5cGUpIHsKIAljYXNlIFY0TDJfRVZFTlRfVlNZTkM6CiAJY2FzZSBWNEwyX0VWRU5UX0VPUzoKLQkJYnJlYWs7CisJY2FzZSBWNEwyX0VWRU5UX0NUUkw6CisJCXJldHVybiB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCAwKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIHY0bDJfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIpOwogfQogCiBzdGF0aWMgaW50IGl2dHZfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKaW5kZXggYjY3YTQwNC4uYTIwZjM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaApAQCAtMjEsMTEgKzIxLDYgQEAKICNkZWZpbmUgSVZUVl9WRVJTSU9OX0gKIAogI2RlZmluZSBJVlRWX0RSSVZFUl9OQU1FICJpdnR2IgotI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKLSNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9NSU5PUiA0Ci0jZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAyCi0KLSNkZWZpbmUgSVZUVl9WRVJTSU9OIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IpICIuIiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SKSAiLiIgX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQotI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IsSVZUVl9EUklWRVJfVkVSU0lPTl9NSU5PUixJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCisjZGVmaW5lIElWVFZfVkVSU0lPTiAiMS40LjMiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tNW1vbHMvbTVtb2xzX2NhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTVtb2xzL201bW9sc19jYXB0dXJlLmMKaW5kZXggYTQ1ZDhmMC4uMzI0OGFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tNW1vbHMvbTVtb2xzX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201bW9scy9tNW1vbHNfY2FwdHVyZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tNW1vbHMvbTVtb2xzX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTVtb2xzL201bW9sc19jb3JlLmMKaW5kZXggNDNjNjhmNS4uZmI4ZTRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tNW1vbHMvbTVtb2xzX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201bW9scy9tNW1vbHNfY29yZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3MzllMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL0tjb25maWcKQEAgLTAsMCArMSwyMyBAQAorY29uZmlnIFZJREVPX0NBRkVfQ0NJQworCXRyaXN0YXRlICJNYXJ2ZWxsIDg4QUxQMDEgKENhZmUpIENNT1MgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMgorCXNlbGVjdCBWSURFT19PVjc2NzAKKwlzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0MKKwlzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXgyIGRyaXZlciBmb3IgdGhlIE1hcnZlbGwgODhBTFAwMSBpbnRlZ3JhdGVkCisJICBDTU9TIGNhbWVyYSBjb250cm9sbGVyLiAgVGhpcyBpcyB0aGUgY29udHJvbGxlciBmb3VuZCBvbiBmaXJzdC0KKwkgIGdlbmVyYXRpb24gT0xQQyBzeXN0ZW1zLgorCitjb25maWcgVklERU9fTU1QX0NBTUVSQQorCXRyaXN0YXRlICJNYXJ2ZWxsIEFybWFkYSA2MTAgaW50ZWdyYXRlZCBjYW1lcmEgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NTVAgJiYgSTJDICYmIFZJREVPX1Y0TDIKKwlzZWxlY3QgVklERU9fT1Y3NjcwCisJc2VsZWN0IEkyQ19HUElPCisJc2VsZWN0IFZJREVPQlVGMl9ETUFfU0cKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgVmlkZW80TGludXgyIGRyaXZlciBmb3IgdGhlIGludGVncmF0ZWQgY2FtZXJhCisJICBjb250cm9sbGVyIGZvdW5kIG9uIE1hcnZlbGwgQXJtYWRhIDYxMCBhcHBsaWNhdGlvbgorCSAgcHJvY2Vzc29ycyAoYW5kIGxpa2VseSBiZXlvbmQpLiAgVGhpcyBpcyB0aGUgY29udHJvbGxlciBmb3VuZAorCSAgaW4gT0xQQyBYTyAxLjc1IHN5c3RlbXMuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhNzkyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorb2JqLSQoQ09ORklHX1ZJREVPX0NBRkVfQ0NJQykgKz0gY2FmZV9jY2ljLm8KK2NhZmVfY2NpYy15IDo9IGNhZmUtZHJpdmVyLm8gbWNhbS1jb3JlLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX01NUF9DQU1FUkEpICs9IG1tcF9jYW1lcmEubworbW1wX2NhbWVyYS15IDo9IG1tcC1kcml2ZXIubyBtY2FtLWNvcmUubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21hcnZlbGwtY2NpYy9jYWZlLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvY2FmZS1kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDMwZjliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvY2FmZS1kcml2ZXIuYwpAQCAtMCwwICsxLDY1NCBAQAorLyoKKyAqIEEgZHJpdmVyIGZvciB0aGUgQ01PUyBjYW1lcmEgY29udHJvbGxlciBpbiB0aGUgTWFydmVsbCA4OEFMUDAxICJjYWZlIgorICogbXVsdGlmdW5jdGlvbiBjaGlwLiAgQ3VycmVudGx5IHdvcmtzIHdpdGggdGhlIE9tbml2aXNpb24gT1Y3NjcwCisgKiBzZW5zb3IuCisgKgorICogVGhlIGRhdGEgc2hlZXQgZm9yIHRoaXMgZGV2aWNlIGNhbiBiZSBmb3VuZCBhdDoKKyAqICAgIGh0dHA6Ly93d3cubWFydmVsbC5jb20vcHJvZHVjdHMvcGNfY29ubmVjdGl2aXR5Lzg4YWxwMDEvCisgKgorICogQ29weXJpZ2h0IDIwMDYtMTEgT25lIExhcHRvcCBQZXIgQ2hpbGQgQXNzb2NpYXRpb24sIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTExIEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CisgKgorICogV3JpdHRlbiBieSBKb25hdGhhbiBDb3JiZXQsIGNvcmJldEBsd24ubmV0LgorICoKKyAqIHY0bDJfZGV2aWNlL3Y0bDJfc3ViZGV2IGNvbnZlcnNpb24gYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgorICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgIm1jYW0tY29yZS5oIgorCisjZGVmaW5lIENBRkVfVkVSU0lPTiAweDAwMDAwMgorCisKKy8qCisgKiBQYXJhbWV0ZXJzLgorICovCitNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIDg4QUxQMDEgQ01PUyBDYW1lcmEgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJWaWRlbyIpOworCisKKworCitzdHJ1Y3QgY2FmZV9jYW1lcmEgeworCWludCByZWdpc3RlcmVkOwkJCS8qIEZ1bGx5IGluaXRpYWxpemVkPyAqLworCXN0cnVjdCBtY2FtX2NhbWVyYSBtY2FtOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXdhaXRfcXVldWVfaGVhZF90IHNtYnVzX3dhaXQ7CS8qIFdhaXRpbmcgb24gaTJjIGV2ZW50cyAqLworfTsKKworLyoKKyAqIE1vc3Qgb2YgdGhlIGNhbWVyYSBjb250cm9sbGVyIHJlZ2lzdGVycyBhcmUgZGVmaW5lZCBpbiBtY2FtLWNvcmUuaCwKKyAqIGJ1dCB0aGUgQ2FmZSBwbGF0Zm9ybSBoYXMgc29tZSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBvZiBpdHMgb3duOworICogdGhleSBhcmUgZGVzY3JpYmVkIGhlcmUuCisgKi8KKworLyoKKyAqICJHZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIiIGhhcyBhIGNvdXBsZSBvZiBHUElPcyB1c2VkIGZvciBzZW5zb3IKKyAqIHBvd2VyIGFuZCByZXNldCBvbiBPTFBDIFhPIDEuMCBzeXN0ZW1zLgorICovCisjZGVmaW5lIFJFR19HUFIJCTB4YjQKKyNkZWZpbmUJICBHUFJfQzFFTgkgIDB4MDAwMDAwMjAJLyogUGFkIDEgKHBvd2VyIGRvd24pIGVuYWJsZSAqLworI2RlZmluZQkgIEdQUl9DMEVOCSAgMHgwMDAwMDAxMAkvKiBQYWQgMCAocmVzZXQpIGVuYWJsZSAqLworI2RlZmluZQkgIEdQUl9DMQkgIDB4MDAwMDAwMDIJLyogQ29udHJvbCAxIHZhbHVlICovCisvKgorICogQ29udHJvbCAwIGlzIHdpcmVkIHRvIHJlc2V0IG9uIE9MUEMgbWFjaGluZXMuICBGb3Igb3Y3eCBzZW5zb3JzLAorICogaXQgaXMgYWN0aXZlIGxvdy4KKyAqLworI2RlZmluZQkgIEdQUl9DMAkgIDB4MDAwMDAwMDEJLyogQ29udHJvbCAwIHZhbHVlICovCisKKy8qCisgKiBUaGVzZSByZWdpc3RlcnMgY29udHJvbCB0aGUgU01CVVMgbW9kdWxlIGZvciBjb21tdW5pY2F0aW5nCisgKiB3aXRoIHRoZSBzZW5zb3IuCisgKi8KKyNkZWZpbmUgUkVHX1RXU0lDMAkweGI4CS8qIFRXU0kgKHNtYnVzKSBjb250cm9sIDAgKi8KKyNkZWZpbmUJICBUV1NJQzBfRU4JICAweDAwMDAwMDAxCS8qIFRXU0kgZW5hYmxlICovCisjZGVmaW5lCSAgVFdTSUMwX01PREUJICAweDAwMDAwMDAyCS8qIDEgPSAxNi1iaXQsIDAgPSA4LWJpdCAqLworI2RlZmluZQkgIFRXU0lDMF9TSUQJICAweDAwMDAwM2ZjCS8qIFNsYXZlIElEICovCisvKgorICogU3VidGxlIHRyaWNrZXJ5OiB0aGUgc2xhdmUgSUQgZmllbGQgc3RhcnRzIHdpdGggYml0IDIuICBCdXQgdGhlCisgKiBMaW51eCBpMmMgc3RhY2sgd2FudHMgdG8gdHJlYXQgdGhlIGJvdHRvbW1vc3QgYml0IGFzIGEgc2VwYXJhdGUKKyAqIHJlYWQvd3JpdGUgYml0LCB3aGljaCBpcyB3aHkgc2xhdmUgSUQncyBhcmUgdXN1YWxseSBwcmVzZW50ZWQKKyAqID4+MS4gIEZvciBjb25zaXN0ZW5jeSB3aXRoIHRoYXQgYmVoYXZpb3IsIHdlIHNoaWZ0IG92ZXIgdGhyZWUKKyAqIGJpdHMgaW5zdGVhZCBvZiB0d28uCisgKi8KKyNkZWZpbmUJICBUV1NJQzBfU0lEX1NISUZUIDMKKyNkZWZpbmUJICBUV1NJQzBfQ0xLRElWCSAgMHgwMDA3ZmMwMAkvKiBDbG9jayBkaXZpZGVyICovCisjZGVmaW5lCSAgVFdTSUMwX01BU0tBQ0sgIDB4MDA0MDAwMDAJLyogTWFzayBhY2sgZnJvbSBzZW5zb3IgKi8KKyNkZWZpbmUJICBUV1NJQzBfT1ZNQUdJQyAgMHgwMDgwMDAwMAkvKiBNYWtlIGl0IHdvcmsgb24gT1Ygc2Vuc29ycyAqLworCisjZGVmaW5lIFJFR19UV1NJQzEJMHhiYwkvKiBUV1NJIGNvbnRyb2wgMSAqLworI2RlZmluZQkgIFRXU0lDMV9EQVRBCSAgMHgwMDAwZmZmZgkvKiBEYXRhIHRvL2Zyb20gY2FtY2hpcCAqLworI2RlZmluZQkgIFRXU0lDMV9BRERSCSAgMHgwMGZmMDAwMAkvKiBBZGRyZXNzIChyZWdpc3RlcikgKi8KKyNkZWZpbmUJICBUV1NJQzFfQUREUl9TSElGVCAxNgorI2RlZmluZQkgIFRXU0lDMV9SRUFECSAgMHgwMTAwMDAwMAkvKiBTZXQgZm9yIHJlYWQgb3AgKi8KKyNkZWZpbmUJICBUV1NJQzFfV1NUQVQJICAweDAyMDAwMDAwCS8qIFdyaXRlIHN0YXR1cyAqLworI2RlZmluZQkgIFRXU0lDMV9SVkFMSUQJICAweDA0MDAwMDAwCS8qIFJlYWQgZGF0YSB2YWxpZCAqLworI2RlZmluZQkgIFRXU0lDMV9FUlJPUgkgIDB4MDgwMDAwMDAJLyogU29tZXRoaW5nIHNjcmV3ZWQgdXAgKi8KKworLyoKKyAqIEhlcmUncyB0aGUgd2VpcmQgZ2xvYmFsIGNvbnRyb2wgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgUkVHX0dMX0NTUiAgICAgMHgzMDA0ICAvKiBDb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQkgIEdDU1JfU1JTCSAweDAwMDAwMDAxCS8qIFNXIFJlc2V0IHNldCAqLworI2RlZmluZQkgIEdDU1JfU1JDCSAweDAwMDAwMDAyCS8qIFNXIFJlc2V0IGNsZWFyICovCisjZGVmaW5lCSAgR0NTUl9NUlMJIDB4MDAwMDAwMDQJLyogTWFzdGVyIHJlc2V0IHNldCAqLworI2RlZmluZQkgIEdDU1JfTVJDCSAweDAwMDAwMDA4CS8qIEhXIFJlc2V0IGNsZWFyICovCisjZGVmaW5lCSAgR0NTUl9DQ0lDX0VOCSAweDAwMDA0MDAwICAgIC8qIENDSUMgQ2xvY2sgZW5hYmxlICovCisjZGVmaW5lIFJFR19HTF9JTUFTSyAgIDB4MzAwYyAgLyogSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJICBHSU1TS19DQ0lDX0VOCQkgMHgwMDAwMDAwNCAgICAvKiBDQ0lDIEludGVycnVwdCBlbmFibGUgKi8KKworI2RlZmluZSBSRUdfR0xfRkNSCTB4MzAzOAkvKiBHUElPIGZ1bmN0aW9uYWwgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZQkgIEdGQ1JfR1BJT19PTgkgIDB4MDgJCS8qIENhbWVyYSBHUElPIGVuYWJsZWQgKi8KKyNkZWZpbmUgUkVHX0dMX0dQSU9SCTB4MzE1YwkvKiBHUElPIHJlZ2lzdGVyICovCisjZGVmaW5lCSAgR0dQSU9fT1VUCQkweDgwMDAwCS8qIEdQSU8gb3V0cHV0ICovCisjZGVmaW5lCSAgR0dQSU9fVkFMCQkweDAwMDA4CS8qIE91dHB1dCBwaW4gdmFsdWUgKi8KKworI2RlZmluZSBSRUdfTEVOCQkgICAgICAgKFJFR19HTF9JTUFTSyArIDQpCisKKworLyoKKyAqIERlYnVnZ2luZyBhbmQgcmVsYXRlZC4KKyAqLworI2RlZmluZSBjYW1fZXJyKGNhbSwgZm10LCBhcmcuLi4pIFwKKwlkZXZfZXJyKCYoY2FtKS0+cGRldi0+ZGV2LCBmbXQsICMjYXJnKTsKKyNkZWZpbmUgY2FtX3dhcm4oY2FtLCBmbXQsIGFyZy4uLikgXAorCWRldl93YXJuKCYoY2FtKS0+cGRldi0+ZGV2LCBmbXQsICMjYXJnKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBUaGUgSTJDL1NNQlVTIGludGVyZmFjZSB0byB0aGUgY2FtZXJhIGl0c2VsZiBzdGFydHMgaGVyZS4gIFRoZQorICogY29udHJvbGxlciBoYW5kbGVzIFNNQlVTIGl0c2VsZiwgcHJlc2VudGluZyBhIHJlbGF0aXZlbHkgc2ltcGxlIHJlZ2lzdGVyCisgKiBpbnRlcmZhY2U7IGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvIHRlbGwgaXQgd2hlcmUgdG8gcm91dGUgdGhlIGRhdGEuCisgKi8KKyNkZWZpbmUgQ0FGRV9TTUJVU19USU1FT1VUIChIWikgIC8qIGdlbmVyb3VzICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhZmVfY2FtZXJhICp0b19jYW0oc3RydWN0IHY0bDJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICptID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1jYW1fY2FtZXJhLCB2NGwyX2Rldik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtLCBzdHJ1Y3QgY2FmZV9jYW1lcmEsIG1jYW0pOworfQorCisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c193cml0ZV9kb25lKHN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjMTsKKworCS8qCisJICogV2UgbXVzdCBkZWxheSBhZnRlciB0aGUgaW50ZXJydXB0LCBvciB0aGUgY29udHJvbGxlciBnZXRzIGNvbmZ1c2VkCisJICogYW5kIG5ldmVyIGRvZXMgZ2l2ZSB1cyBnb29kIHN0YXR1cy4gIEZvcnR1bmF0ZWx5LCB3ZSBkb24ndCBkbyB0aGlzCisJICogb2Z0ZW4uCisJICovCisJdWRlbGF5KDIwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljMSA9IG1jYW1fcmVnX3JlYWQobWNhbSwgUkVHX1RXU0lDMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gKGMxICYgKFRXU0lDMV9XU1RBVHxUV1NJQzFfRVJST1IpKSAhPSBUV1NJQzFfV1NUQVQ7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c193cml0ZV9kYXRhKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLAorCQl1MTYgYWRkciwgdTggY29tbWFuZCwgdTggdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJ2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKm1jYW0gPSAmY2FtLT5tY2FtOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcnZhbCA9IFRXU0lDMF9FTiB8ICgoYWRkciA8PCBUV1NJQzBfU0lEX1NISUZUKSAmIFRXU0lDMF9TSUQpOworCXJ2YWwgfD0gVFdTSUMwX09WTUFHSUM7ICAvKiBNYWtlIE9WIHNlbnNvcnMgd29yayAqLworCS8qCisJICogTWFydmVsbCBzZXogc2V0IGNsa2RpdiB0byBhbGwgMSdzIGZvciBub3cuCisJICovCisJcnZhbCB8PSBUV1NJQzBfQ0xLRElWOworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19UV1NJQzAsIHJ2YWwpOworCSh2b2lkKSBtY2FtX3JlZ19yZWFkKG1jYW0sIFJFR19UV1NJQzEpOyAvKiBmb3JjZSB3cml0ZSAqLworCXJ2YWwgPSB2YWx1ZSB8ICgoY29tbWFuZCA8PCBUV1NJQzFfQUREUl9TSElGVCkgJiBUV1NJQzFfQUREUik7CisJbWNhbV9yZWdfd3JpdGUobWNhbSwgUkVHX1RXU0lDMSwgcnZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCS8qIFVuZm9ydHVuYXRlbHksIHJlYWRpbmcgVFdTSUMxIHRvbyBzb29uIGFmdGVyIHNlbmRpbmcgYSBjb21tYW5kCisJICogY2F1c2VzIHRoZSBkZXZpY2UgdG8gZGllLgorCSAqIFVzZSBhIGJ1c3ktd2FpdCBiZWNhdXNlIHdlIG9mdGVuIHNlbmQgYSBsYXJnZSBxdWFudGl0eSBvZiBzbWFsbAorCSAqIGNvbW1hbmRzIGF0LW9uY2U7IHVzaW5nIG1zbGVlcCgpIHdvdWxkIGNhdXNlIGEgbG90IG9mIGNvbnRleHQKKwkgKiBzd2l0Y2hlcyB3aGljaCB0YWtlIGxvbmdlciB0aGFuIDJtcywgcmVzdWx0aW5nIGluIGEgbm90aWNlYWJsZQorCSAqIGJvb3QtdGltZSBhbmQgY2FwdHVyZS1zdGFydCBkZWxheXMuCisJICovCisJbWRlbGF5KDIpOworCisJLyoKKwkgKiBBbm90aGVyIHNhZCBmYWN0IGlzIHRoYXQgc29tZXRpbWVzLCBjb21tYW5kcyBzaWxlbnRseSBjb21wbGV0ZSBidXQKKwkgKiBjYWZlX3NtYnVzX3dyaXRlX2RvbmUoKSBuZXZlciBiZWNvbWVzIGF3YXJlIG9mIHRoaXMuCisJICogVGhpcyBoYXBwZW5zIGF0IHJhbmRvbSBhbmQgYXBwZWFycyB0byBwb3NzaWJsZSBvY2N1ciB3aXRoIGFueQorCSAqIGNvbW1hbmQuCisJICogV2UgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcy4gV2Ugd29yayBhcm91bmQgdGhpcyBpc3N1ZQorCSAqIHdpdGggdGhlIHRpbWVvdXQgaW4gdGhlIHdhaXQgYmVsb3csIGFzc3VtaW5nIHRoYXQgYWxsIGNvbW1hbmRzCisJICogY29tcGxldGUgd2l0aGluIHRoZSB0aW1lb3V0LgorCSAqLworCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPnNtYnVzX3dhaXQsIGNhZmVfc21idXNfd3JpdGVfZG9uZShtY2FtKSwKKwkJCUNBRkVfU01CVVNfVElNRU9VVCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlydmFsID0gbWNhbV9yZWdfcmVhZChtY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKHJ2YWwgJiBUV1NJQzFfV1NUQVQpIHsKKwkJY2FtX2VycihjYW0sICJTTUJVUyB3cml0ZSAoJTAyeC8lMDJ4LyUwMngpIHRpbWVkIG91dFxuIiwgYWRkciwKKwkJCQljb21tYW5kLCB2YWx1ZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocnZhbCAmIFRXU0lDMV9FUlJPUikgeworCQljYW1fZXJyKGNhbSwgIlNNQlVTIHdyaXRlICglMDJ4LyUwMngvJTAyeCkgZXJyb3JcbiIsIGFkZHIsCisJCQkJY29tbWFuZCwgdmFsdWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50IGNhZmVfc21idXNfcmVhZF9kb25lKHN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjMTsKKworCS8qCisJICogV2UgbXVzdCBkZWxheSBhZnRlciB0aGUgaW50ZXJydXB0LCBvciB0aGUgY29udHJvbGxlciBnZXRzIGNvbmZ1c2VkCisJICogYW5kIG5ldmVyIGRvZXMgZ2l2ZSB1cyBnb29kIHN0YXR1cy4gIEZvcnR1bmF0ZWx5LCB3ZSBkb24ndCBkbyB0aGlzCisJICogb2Z0ZW4uCisJICovCisJdWRlbGF5KDIwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljMSA9IG1jYW1fcmVnX3JlYWQobWNhbSwgUkVHX1RXU0lDMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gYzEgJiAoVFdTSUMxX1JWQUxJRHxUV1NJQzFfRVJST1IpOworfQorCisKKworc3RhdGljIGludCBjYWZlX3NtYnVzX3JlYWRfZGF0YShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwKKwkJdTE2IGFkZHIsIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcnZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSA9ICZjYW0tPm1jYW07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlydmFsID0gVFdTSUMwX0VOIHwgKChhZGRyIDw8IFRXU0lDMF9TSURfU0hJRlQpICYgVFdTSUMwX1NJRCk7CisJcnZhbCB8PSBUV1NJQzBfT1ZNQUdJQzsgLyogTWFrZSBPViBzZW5zb3JzIHdvcmsgKi8KKwkvKgorCSAqIE1hcnZlbCBzZXogc2V0IGNsa2RpdiB0byBhbGwgMSdzIGZvciBub3cuCisJICovCisJcnZhbCB8PSBUV1NJQzBfQ0xLRElWOworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19UV1NJQzAsIHJ2YWwpOworCSh2b2lkKSBtY2FtX3JlZ19yZWFkKG1jYW0sIFJFR19UV1NJQzEpOyAvKiBmb3JjZSB3cml0ZSAqLworCXJ2YWwgPSBUV1NJQzFfUkVBRCB8ICgoY29tbWFuZCA8PCBUV1NJQzFfQUREUl9TSElGVCkgJiBUV1NJQzFfQUREUik7CisJbWNhbV9yZWdfd3JpdGUobWNhbSwgUkVHX1RXU0lDMSwgcnZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYW0tPnNtYnVzX3dhaXQsCisJCQljYWZlX3NtYnVzX3JlYWRfZG9uZShtY2FtKSwgQ0FGRV9TTUJVU19USU1FT1VUKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlydmFsID0gbWNhbV9yZWdfcmVhZChtY2FtLCBSRUdfVFdTSUMxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKHJ2YWwgJiBUV1NJQzFfRVJST1IpIHsKKwkJY2FtX2VycihjYW0sICJTTUJVUyByZWFkICglMDJ4LyUwMngpIGVycm9yXG4iLCBhZGRyLCBjb21tYW5kKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICghKHJ2YWwgJiBUV1NJQzFfUlZBTElEKSkgeworCQljYW1fZXJyKGNhbSwgIlNNQlVTIHJlYWQgKCUwMngvJTAyeCkgdGltZWQgb3V0XG4iLCBhZGRyLAorCQkJCWNvbW1hbmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJKnZhbHVlID0gcnZhbCAmIDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgdHJhbnNmZXIgb3ZlciBTTUJVUy4gIFRoaXMgdGhpbmcgaXMgY2FsbGVkIHVuZGVyCisgKiB0aGUgaTJjIGJ1cyBsb2NrLCBzbyB3ZSBzaG91bGRuJ3QgcmFjZSB3aXRoIG91cnNlbHZlcy4uLgorICovCitzdGF0aWMgaW50IGNhZmVfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAorCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciBydywgdTggY29tbWFuZCwKKwkJaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qCisJICogVGhpcyBpbnRlcmZhY2Ugd291bGQgYXBwZWFyIHRvIG9ubHkgZG8gYnl0ZSBkYXRhIG9wcy4gIE9LCisJICogaXQgY2FuIGRvIHdvcmQgdG9vLCBidXQgdGhlIGNhbSBjaGlwIGhhcyBubyB1c2UgZm9yIHRoYXQuCisJICovCisJaWYgKHNpemUgIT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgeworCQljYW1fZXJyKGNhbSwgImZ1bmt5IHhmZXIgc2l6ZSAlZFxuIiwgc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChydyA9PSBJMkNfU01CVVNfV1JJVEUpCisJCXJldCA9IGNhZmVfc21idXNfd3JpdGVfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOworCWVsc2UgaWYgKHJ3ID09IEkyQ19TTUJVU19SRUFEKQorCQlyZXQgPSBjYWZlX3NtYnVzX3JlYWRfZGF0YShjYW0sIGFkZHIsIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfc21idXNfZW5hYmxlX2lycShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+bWNhbS5kZXZfbG9jaywgZmxhZ3MpOworCW1jYW1fcmVnX3NldF9iaXQoJmNhbS0+bWNhbSwgUkVHX0lSUU1BU0ssIFRXU0lJUlFTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPm1jYW0uZGV2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHUzMiBjYWZlX3NtYnVzX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBjYWZlX3NtYnVzX2FsZ28gPSB7CisJLnNtYnVzX3hmZXIgPSBjYWZlX3NtYnVzX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBjYWZlX3NtYnVzX2Z1bmMKK307CisKK3N0YXRpYyBpbnQgY2FmZV9zbWJ1c19zZXR1cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CisJaW50IHJldDsKKworCWFkYXAgPSBremFsbG9jKHNpemVvZigqYWRhcCksIEdGUF9LRVJORUwpOworCWlmIChhZGFwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNhbS0+bWNhbS5pMmNfYWRhcHRlciA9IGFkYXA7CisJY2FmZV9zbWJ1c19lbmFibGVfaXJxKGNhbSk7CisJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlhZGFwLT5hbGdvID0gJmNhZmVfc21idXNfYWxnbzsKKwlzdHJjcHkoYWRhcC0+bmFtZSwgImNhZmVfY2NpYyIpOworCWFkYXAtPmRldi5wYXJlbnQgPSAmY2FtLT5wZGV2LT5kZXY7CisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCBjYW0pOworCXJldCA9IGkyY19hZGRfYWRhcHRlcihhZGFwKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlIGkyYyBhZGFwdGVyXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjYWZlX3NtYnVzX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQoreworCWkyY19kZWxfYWRhcHRlcihjYW0tPm1jYW0uaTJjX2FkYXB0ZXIpOworCWtmcmVlKGNhbS0+bWNhbS5pMmNfYWRhcHRlcik7Cit9CisKKworLyoKKyAqIENvbnRyb2xsZXItbGV2ZWwgc3R1ZmYKKyAqLworCitzdGF0aWMgdm9pZCBjYWZlX2N0bHJfaW5pdChzdHJ1Y3QgbWNhbV9jYW1lcmEgKm1jYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCS8qCisJICogQWRkZWQgbWFnaWMgdG8gYnJpbmcgdXAgdGhlIGhhcmR3YXJlIG9uIHRoZSBCLVRlc3QgYm9hcmQKKwkgKi8KKwltY2FtX3JlZ193cml0ZShtY2FtLCAweDMwMzgsIDB4OCk7CisJbWNhbV9yZWdfd3JpdGUobWNhbSwgMHgzMTVjLCAweDgwMDA4KTsKKwkvKgorCSAqIEdvIHRocm91Z2ggdGhlIGRhbmNlIG5lZWRlZCB0byB3YWtlIHRoZSBkZXZpY2UgdXAuCisJICogTm90ZSB0aGF0IHRoZXNlIHJlZ2lzdGVycyBhcmUgZ2xvYmFsIGFuZCBzaGFyZWQKKwkgKiB3aXRoIHRoZSBOQU5EIGFuZCBTRCBkZXZpY2VzLiAgSW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUKKwkgKiB0aHJlZSBzdGlsbCBuZWVkcyB0byBiZSBleGFtaW5lZC4KKwkgKi8KKwltY2FtX3JlZ193cml0ZShtY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX1NSU3xHQ1NSX01SUyk7IC8qIE5lZWRlZD8gKi8KKwltY2FtX3JlZ193cml0ZShtY2FtLCBSRUdfR0xfQ1NSLCBHQ1NSX1NSQ3xHQ1NSX01SQyk7CisJbWNhbV9yZWdfd3JpdGUobWNhbSwgUkVHX0dMX0NTUiwgR0NTUl9TUkN8R0NTUl9NUlMpOworCS8qCisJICogSGVyZSB3ZSBtdXN0IHdhaXQgYSBiaXQgZm9yIHRoZSBjb250cm9sbGVyIHRvIGNvbWUgYXJvdW5kLgorCSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jYW0tPmRldl9sb2NrLCBmbGFncyk7CisJbXNsZWVwKDUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCisJbWNhbV9yZWdfd3JpdGUobWNhbSwgUkVHX0dMX0NTUiwgR0NTUl9DQ0lDX0VOfEdDU1JfU1JDfEdDU1JfTVJDKTsKKwltY2FtX3JlZ19zZXRfYml0KG1jYW0sIFJFR19HTF9JTUFTSywgR0lNU0tfQ0NJQ19FTik7CisJLyoKKwkgKiBNYXNrIGFsbCBpbnRlcnJ1cHRzLgorCSAqLworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19JUlFNQVNLLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl91cChzdHJ1Y3QgbWNhbV9jYW1lcmEgKm1jYW0pCit7CisJLyoKKwkgKiBQYXJ0IG9uZSBvZiB0aGUgc2Vuc29yIGRhbmNlOiB0dXJuIHRoZSBnbG9iYWwKKwkgKiBHUElPIHNpZ25hbCBvbi4KKwkgKi8KKwltY2FtX3JlZ193cml0ZShtY2FtLCBSRUdfR0xfRkNSLCBHRkNSX0dQSU9fT04pOworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19HTF9HUElPUiwgR0dQSU9fT1VUfEdHUElPX1ZBTCk7CisJLyoKKwkgKiBQdXQgdGhlIHNlbnNvciBpbnRvIG9wZXJhdGlvbmFsIG1vZGUgKGFzc3VtZXMgT0xQQy1zdHlsZQorCSAqIHdpcmluZykuICBDb250cm9sIDAgaXMgcmVzZXQgLSBzZXQgdG8gMSB0byBvcGVyYXRlLgorCSAqIENvbnRyb2wgMSBpcyBwb3dlciBkb3duLCBzZXQgdG8gMCB0byBvcGVyYXRlLgorCSAqLworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOKTsgLyogcHdyIHVwLCByZXNldCAqLworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOfEdQUl9DMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl9kb3duKHN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSkKK3sKKwltY2FtX3JlZ193cml0ZShtY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzEpOworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19HTF9GQ1IsIEdGQ1JfR1BJT19PTik7CisJbWNhbV9yZWdfd3JpdGUobWNhbSwgUkVHX0dMX0dQSU9SLCBHR1BJT19PVVQpOworfQorCisKKworLyoKKyAqIFRoZSBwbGF0Zm9ybSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IGNhZmVfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBkYXRhOworCXN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSA9ICZjYW0tPm1jYW07CisJdW5zaWduZWQgaW50IGlycXMsIGhhbmRsZWQ7CisKKwlzcGluX2xvY2soJm1jYW0tPmRldl9sb2NrKTsKKwlpcnFzID0gbWNhbV9yZWdfcmVhZChtY2FtLCBSRUdfSVJRU1RBVCk7CisJaGFuZGxlZCA9IGNhbS0+cmVnaXN0ZXJlZCAmJiBtY2NpY19pcnEobWNhbSwgaXJxcyk7CisJaWYgKGlycXMgJiBUV1NJSVJRUykgeworCQltY2FtX3JlZ193cml0ZShtY2FtLCBSRUdfSVJRU1RBVCwgVFdTSUlSUVMpOworCQl3YWtlX3VwKCZjYW0tPnNtYnVzX3dhaXQpOworCQloYW5kbGVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2soJm1jYW0tPmRldl9sb2NrKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFBDSSBpbnRlcmZhY2Ugc3R1ZmYuCisgKi8KKworc3RhdGljIGludCBjYWZlX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CisJc3RydWN0IG1jYW1fY2FtZXJhICptY2FtOworCisJLyoKKwkgKiBTdGFydCBwdXR0aW5nIHRvZ2V0aGVyIG9uZSBvZiBvdXIgYmlnIGNhbWVyYSBzdHJ1Y3R1cmVzLgorCSAqLworCXJldCA9IC1FTk9NRU07CisJY2FtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhZmVfY2FtZXJhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNhbSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKwljYW0tPnBkZXYgPSBwZGV2OworCW1jYW0gPSAmY2FtLT5tY2FtOworCW1jYW0tPmNoaXBfaWQgPSBWNEwyX0lERU5UX0NBRkU7CisJc3Bpbl9sb2NrX2luaXQoJm1jYW0tPmRldl9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYW0tPnNtYnVzX3dhaXQpOworCW1jYW0tPnBsYXRfcG93ZXJfdXAgPSBjYWZlX2N0bHJfcG93ZXJfdXA7CisJbWNhbS0+cGxhdF9wb3dlcl9kb3duID0gY2FmZV9jdGxyX3Bvd2VyX2Rvd247CisJbWNhbS0+ZGV2ID0gJnBkZXYtPmRldjsKKwkvKgorCSAqIFNldCB0aGUgY2xvY2sgc3BlZWQgZm9yIHRoZSBYTyAxOyBJIGRvbid0IGJlbGlldmUgdGhpcworCSAqIGRyaXZlciBoYXMgZXZlciBydW4gYW55d2hlcmUgZWxzZS4KKwkgKi8KKwltY2FtLT5jbG9ja19zcGVlZCA9IDQ1OworCW1jYW0tPnVzZV9zbWJ1cyA9IDE7CisJLyoKKwkgKiBWbWFsbG9jIG1vZGUgZm9yIGJ1ZmZlcnMgaXMgdHJhZGl0aW9uYWwgd2l0aCB0aGlzIGRyaXZlci4KKwkgKiBXZSAqbWlnaHQqIGJlIGFibGUgdG8gcnVuIERNQV9jb250aWcsIGVzcGVjaWFsbHkgb24gYSBzeXN0ZW0KKwkgKiB3aXRoIENNQSBpbiBpdC4KKwkgKi8KKwltY2FtLT5idWZmZXJfbW9kZSA9IEJfdm1hbGxvYzsKKwkvKgorCSAqIEdldCBzZXQgdXAgb24gdGhlIFBDSSBidXMuCisJICovCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXJldCA9IC1FSU87CisJbWNhbS0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1jYW0tPnJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW9yZW1hcCBjYWZlLWNjaWMgcmVnc1xuIik7CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2FmZV9pcnEsIElSUUZfU0hBUkVELCAiY2FmZS1jY2ljIiwgY2FtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9pb3VubWFwOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sbGVyIGFuZCBsZWF2ZSBpdCBwb3dlcmVkIHVwLiAgSXQgd2lsbAorCSAqIHN0YXkgdGhhdCB3YXkgdW50aWwgdGhlIHNlbnNvciBkcml2ZXIgc2hvd3MgdXAuCisJICovCisJY2FmZV9jdGxyX2luaXQobWNhbSk7CisJY2FmZV9jdGxyX3Bvd2VyX3VwKG1jYW0pOworCS8qCisJICogU2V0IHVwIEkyQy9TTUJVUyBjb21tdW5pY2F0aW9ucy4gIFdlIGhhdmUgdG8gZHJvcCB0aGUgbXV0ZXggaGVyZQorCSAqIGJlY2F1c2UgdGhlIHNlbnNvciBjb3VsZCBhdHRhY2ggaW4gdGhpcyBjYWxsIGNoYWluLCBsZWFkaW5nIHRvCisJICogdW5zaWdodGx5IGRlYWRsb2Nrcy4KKwkgKi8KKwlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcGRvd247CisKKwlyZXQgPSBtY2NpY19yZWdpc3RlcihtY2FtKTsKKwlpZiAocmV0ID09IDApIHsKKwkJY2FtLT5yZWdpc3RlcmVkID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOworb3V0X3Bkb3duOgorCWNhZmVfY3Rscl9wb3dlcl9kb3duKG1jYW0pOworCWZyZWVfaXJxKHBkZXYtPmlycSwgY2FtKTsKK291dF9pb3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIG1jYW0tPnJlZ3MpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworb3V0X2ZyZWU6CisJa2ZyZWUoY2FtKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBTaHV0IGRvd24gYW4gaW5pdGlhbGl6ZWQgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGNhZmVfc2h1dGRvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCit7CisJbWNjaWNfc2h1dGRvd24oJmNhbS0+bWNhbSk7CisJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOworCWZyZWVfaXJxKGNhbS0+cGRldi0+aXJxLCBjYW0pOworCXBjaV9pb3VubWFwKGNhbS0+cGRldiwgY2FtLT5tY2FtLnJlZ3MpOworfQorCisKK3N0YXRpYyB2b2lkIGNhZmVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKKworCWlmIChjYW0gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY2lfcmVtb3ZlIG9uIHVua25vd24gcGRldiAlcFxuIiwgcGRldik7CisJCXJldHVybjsKKwl9CisJY2FmZV9zaHV0ZG93bihjYW0pOworCWtmcmVlKGNhbSk7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorLyoKKyAqIEJhc2ljIHBvd2VyIG1hbmFnZW1lbnQuCisgKi8KK3N0YXRpYyBpbnQgY2FmZV9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW1jY2ljX3N1c3BlbmQoJmNhbS0+bWNhbSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgY2FmZV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOworCWludCByZXQgPSAwOworCisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisKKwlpZiAocmV0KSB7CisJCWNhbV93YXJuKGNhbSwgIlVuYWJsZSB0byByZS1lbmFibGUgZGV2aWNlIG9uIHJlc3VtZSFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljYWZlX2N0bHJfaW5pdCgmY2FtLT5tY2FtKTsKKwlyZXR1cm4gbWNjaWNfcmVzdW1lKCZjYW0tPm1jYW0pOworfQorCisjZW5kaWYgIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FmZV9pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLAorCQkgICAgIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF84OEFMUDAxX0NDSUMpIH0sCisJeyAwLCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2FmZV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2FmZV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gImNhZmUxMDAwLWNjaWMiLAorCS5pZF90YWJsZSA9IGNhZmVfaWRzLAorCS5wcm9iZSA9IGNhZmVfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBjYWZlX3BjaV9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBjYWZlX3BjaV9zdXNwZW5kLAorCS5yZXN1bWUgPSBjYWZlX3BjaV9yZXN1bWUsCisjZW5kaWYKK307CisKKworCisKK3N0YXRpYyBpbnQgX19pbml0IGNhZmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIk1hcnZlbGwgTTg4QUxQMDEgJ0NBRkUnIENhbWVyYSBDb250cm9sbGVyIHZlcnNpb24gJWRcbiIsCisJCQlDQUZFX1ZFUlNJT04pOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlX2NjaWMgZHJpdmVyXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWZlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNhZmVfaW5pdCk7Cittb2R1bGVfZXhpdChjYWZlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvbWNhbS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MxNDUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvbWNhbS1jb3JlLmMKQEAgLTAsMCArMSwxODQzIEBACisvKgorICogVGhlIE1hcnZlbGwgY2FtZXJhIGNvcmUuICBUaGlzIGRldmljZSBhcHBlYXJzIGluIGEgbnVtYmVyIG9mIHNldHRpbmdzLAorICogc28gaXQgbmVlZHMgcGxhdGZvcm0tc3BlY2lmaWMgc3VwcG9ydCBvdXRzaWRlIG9mIHRoZSBjb3JlLgorICoKKyAqIENvcHlyaWdodCAyMDExIEpvbmF0aGFuIENvcmJldCBjb3JiZXRAbHduLm5ldAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL292NzY3MC5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLXNnLmg+CisKKyNpbmNsdWRlICJtY2FtLWNvcmUuaCIKKworLyoKKyAqIEJhc2ljIGZyYW1lIHN0YXRzIC0gdG8gYmUgZGVsZXRlZCBzaG9ydGx5CisgKi8KK3N0YXRpYyBpbnQgZnJhbWVzOworc3RhdGljIGludCBzaW5nbGVzOworc3RhdGljIGludCBkZWxpdmVyZWQ7CisKKyNpZmRlZiBNQ0FNX01PREVfVk1BTExPQworLyoKKyAqIEludGVybmFsIERNQSBidWZmZXIgbWFuYWdlbWVudC4gIFNpbmNlIHRoZSBjb250cm9sbGVyIGNhbm5vdCBkbyBTL0cgSS9PLAorICogd2UgbXVzdCBoYXZlIHBoeXNpY2FsbHkgY29udGlndW91cyBidWZmZXJzIHRvIGJyaW5nIGZyYW1lcyBpbnRvLgorICogVGhlc2UgcGFyYW1ldGVycyBjb250cm9sIGhvdyBtYW55IGJ1ZmZlcnMgd2UgdXNlLCB3aGV0aGVyIHdlCisgKiBhbGxvY2F0ZSB0aGVtIGF0IGxvYWQgdGltZSAoYmV0dGVyIGNoYW5jZSBvZiBzdWNjZXNzLCBidXQgbmFpbHMgZG93bgorICogbWVtb3J5KSBvciB3aGVuIHNvbWVib2R5IHRyaWVzIHRvIHVzZSB0aGUgY2FtZXJhIChyaXNraWVyKSwgYW5kLAorICogZm9yIGxvYWQtdGltZSBhbGxvY2F0aW9uLCBob3cgYmlnIHRoZXkgc2hvdWxkIGJlLgorICoKKyAqIFRoZSBjb250cm9sbGVyIGNhbiBjeWNsZSB0aHJvdWdoIHRocmVlIGJ1ZmZlcnMuICBXZSBjb3VsZCB1c2UKKyAqIG1vcmUgYnkgZmxpcHBpbmcgcG9pbnRlcnMgYXJvdW5kLCBidXQgaXQgcHJvYmFibHkgbWFrZXMgbGl0dGxlCisgKiBzZW5zZS4KKyAqLworCitzdGF0aWMgaW50IGFsbG9jX2J1ZnNfYXRfcmVhZDsKK21vZHVsZV9wYXJhbShhbGxvY19idWZzX2F0X3JlYWQsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhhbGxvY19idWZzX2F0X3JlYWQsCisJCSJOb24temVybyB2YWx1ZSBjYXVzZXMgRE1BIGJ1ZmZlcnMgdG8gYmUgYWxsb2NhdGVkIHdoZW4gdGhlICIKKwkJInZpZGVvIGNhcHR1cmUgZGV2aWNlIGlzIHJlYWQsIHJhdGhlciB0aGFuIGF0IG1vZHVsZSBsb2FkICIKKwkJInRpbWUuICBUaGlzIHNhdmVzIG1lbW9yeSwgYnV0IGRlY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiAiCisJCSJzdWNjZXNzZnVsbHkgZ2V0dGluZyB0aG9zZSBidWZmZXJzLiAgVGhpcyBwYXJhbWV0ZXIgaXMgIgorCQkib25seSB1c2VkIGluIHRoZSB2bWFsbG9jIGJ1ZmZlciBtb2RlIik7CisKK3N0YXRpYyBpbnQgbl9kbWFfYnVmcyA9IDM7Cittb2R1bGVfcGFyYW0obl9kbWFfYnVmcywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5fZG1hX2J1ZnMsCisJCSJUaGUgbnVtYmVyIG9mIERNQSBidWZmZXJzIHRvIGFsbG9jYXRlLiAgQ2FuIGJlIGVpdGhlciB0d28gIgorCQkiKHNhdmVzIG1lbW9yeSwgbWFrZXMgdGltaW5nIHRpZ2h0ZXIpIG9yIHRocmVlLiIpOworCitzdGF0aWMgaW50IGRtYV9idWZfc2l6ZSA9IFZHQV9XSURUSCAqIFZHQV9IRUlHSFQgKiAyOyAgLyogV29yc3QgY2FzZSAqLworbW9kdWxlX3BhcmFtKGRtYV9idWZfc2l6ZSwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRtYV9idWZfc2l6ZSwKKwkJIlRoZSBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgRE1BIGJ1ZmZlcnMuICBJZiBhY3R1YWwgb3BlcmF0aW5nICIKKwkJInBhcmFtZXRlcnMgcmVxdWlyZSBsYXJnZXIgYnVmZmVycywgYW4gYXR0ZW1wdCB0byByZWFsbG9jYXRlICIKKwkJIndpbGwgYmUgbWFkZS4iKTsKKyNlbHNlIC8qIE1DQU1fTU9ERV9WTUFMTE9DICovCitzdGF0aWMgY29uc3QgaW50IGFsbG9jX2J1ZnNfYXRfcmVhZCA9IDA7CitzdGF0aWMgY29uc3QgaW50IG5fZG1hX2J1ZnMgPSAzOyAgLyogVXNlZCBieSBTL0dfUEFSTSAqLworI2VuZGlmIC8qIE1DQU1fTU9ERV9WTUFMTE9DICovCisKK3N0YXRpYyBpbnQgZmxpcDsKK21vZHVsZV9wYXJhbShmbGlwLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmxpcCwKKwkJIklmIHNldCwgdGhlIHNlbnNvciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gZmxpcCB0aGUgaW1hZ2UgIgorCQkidmVydGljYWxseS4iKTsKKworc3RhdGljIGludCBidWZmZXJfbW9kZSA9IC0xOworbW9kdWxlX3BhcmFtKGJ1ZmZlcl9tb2RlLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfbW9kZSwKKwkJIlNldCB0aGUgYnVmZmVyIG1vZGUgdG8gYmUgdXNlZDsgZGVmYXVsdCBpcyB0byBnbyB3aXRoIHdoYXQgIgorCQkidGhlIHBsYXRmb3JtIGRyaXZlciBhc2tzIGZvci4gIFNldCB0byAwIGZvciB2bWFsbG9jLCAxIGZvciAiCisJCSJETUEgY29udGlndW91cy4iKTsKKworLyoKKyAqIFN0YXR1cyBmbGFncy4gIEFsd2F5cyBtYW5pcHVsYXRlZCB3aXRoIGJpdCBvcGVyYXRpb25zLgorICovCisjZGVmaW5lIENGX0JVRjBfVkFMSUQJIDAJLyogQnVmZmVycyB2YWxpZCAtIGZpcnN0IHRocmVlICovCisjZGVmaW5lIENGX0JVRjFfVkFMSUQJIDEKKyNkZWZpbmUgQ0ZfQlVGMl9WQUxJRAkgMgorI2RlZmluZSBDRl9ETUFfQUNUSVZFCSAzCS8qIEEgZnJhbWUgaXMgaW5jb21pbmcgKi8KKyNkZWZpbmUgQ0ZfQ09ORklHX05FRURFRCA0CS8qIE11c3QgY29uZmlndXJlIGhhcmR3YXJlICovCisjZGVmaW5lIENGX1NJTkdMRV9CVUZGRVIgNQkvKiBSdW5uaW5nIHdpdGggYSBzaW5nbGUgYnVmZmVyICovCisjZGVmaW5lIENGX1NHX1JFU1RBUlQJIDYJLyogU0cgcmVzdGFydCBuZWVkZWQgKi8KKworI2RlZmluZSBzZW5zb3JfY2FsbChjYW0sIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yLCBvLCBmLCAjI2FyZ3MpCisKK3N0YXRpYyBzdHJ1Y3QgbWNhbV9mb3JtYXRfc3RydWN0IHsKKwlfX3U4ICpkZXNjOworCV9fdTMyIHBpeGVsZm9ybWF0OworCWludCBicHA7ICAgLyogQnl0ZXMgcGVyIHBpeGVsICovCisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIG1idXNfY29kZTsKK30gbWNhbV9mb3JtYXRzW10gPSB7CisJeworCQkuZGVzYwkJPSAiWVVZViA0OjI6MiIsCisJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkubWJ1c19jb2RlCT0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDgsCisJCS5icHAJCT0gMiwKKwl9LAorCXsKKwkJLmRlc2MJCT0gIlJHQiA0NDQiLAorCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCNDQ0LAorCQkubWJ1c19jb2RlCT0gVjRMMl9NQlVTX0ZNVF9SR0I0NDRfMlg4X1BBREhJX0xFLAorCQkuYnBwCQk9IDIsCisJfSwKKwl7CisJCS5kZXNjCQk9ICJSR0IgNTY1IiwKKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKKwkJLm1idXNfY29kZQk9IFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwKKwkJLmJwcAkJPSAyLAorCX0sCisJeworCQkuZGVzYwkJPSAiUmF3IFJHQiBCYXllciIsCisJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5tYnVzX2NvZGUJPSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJCS5icHAJCT0gMQorCX0sCit9OworI2RlZmluZSBOX01DQU1fRk1UUyBBUlJBWV9TSVpFKG1jYW1fZm9ybWF0cykKKworc3RhdGljIHN0cnVjdCBtY2FtX2Zvcm1hdF9zdHJ1Y3QgKm1jYW1fZmluZF9mb3JtYXQodTMyIHBpeGVsZm9ybWF0KQoreworCXVuc2lnbmVkIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTl9NQ0FNX0ZNVFM7IGkrKykKKwkJaWYgKG1jYW1fZm9ybWF0c1tpXS5waXhlbGZvcm1hdCA9PSBwaXhlbGZvcm1hdCkKKwkJCXJldHVybiBtY2FtX2Zvcm1hdHMgKyBpOworCS8qIE5vdCBmb3VuZD8gVGhlbiByZXR1cm4gdGhlIGZpcnN0IGZvcm1hdC4gKi8KKwlyZXR1cm4gbWNhbV9mb3JtYXRzOworfQorCisvKgorICogVGhlIGRlZmF1bHQgZm9ybWF0IHdlIHVzZSB1bnRpbCBzb21lYm9keSBzYXlzIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbWNhbV9kZWZfcGl4X2Zvcm1hdCA9IHsKKwkud2lkdGgJCT0gVkdBX1dJRFRILAorCS5oZWlnaHQJCT0gVkdBX0hFSUdIVCwKKwkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkuZmllbGQJCT0gVjRMMl9GSUVMRF9OT05FLAorCS5ieXRlc3BlcmxpbmUJPSBWR0FfV0lEVEgqMiwKKwkuc2l6ZWltYWdlCT0gVkdBX1dJRFRIKlZHQV9IRUlHSFQqMiwKK307CisKK3N0YXRpYyBjb25zdCBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgbWNhbV9kZWZfbWJ1c19jb2RlID0KKwkJCQkJVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDg7CisKKworLyoKKyAqIFRoZSB0d28td29yZCBETUEgZGVzY3JpcHRvciBmb3JtYXQgdXNlZCBieSB0aGUgQXJtYWRhIDYxMCBhbmQgbGlrZS4gIFRoZXJlCisgKiBJcyBhIHRocmVlLXdvcmQgZm9ybWF0IGFzIHdlbGwgKHNldCBDMV9ERVNDXzNXT1JEKSB3aGVyZSB0aGUgdGhpcmQKKyAqIHdvcmQgaXMgYSBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IsIGJ1dCB3ZSBkb24ndCB1c2UgaXQuICBUd28td29yZAorICogZGVzY3JpcHRvcnMgaGF2ZSB0byBiZSBjb250aWd1b3VzIGluIG1lbW9yeS4KKyAqLworc3RydWN0IG1jYW1fZG1hX2Rlc2MgeworCXUzMiBkbWFfYWRkcjsKKwl1MzIgc2VnbWVudF9sZW47Cit9OworCisvKgorICogT3VyIGJ1ZmZlciB0eXBlIGZvciB3b3JraW5nIHdpdGggdmlkZW9idWYyLiAgTm90ZSB0aGF0IHRoZSB2YjIKKyAqIGRldmVsb3BlcnMgaGF2ZSBkZWNyZWVkIHRoYXQgc3RydWN0IHZiMl9idWZmZXIgbXVzdCBiZSBhdCB0aGUKKyAqIGJlZ2lubmluZyBvZiB0aGlzIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IG1jYW1fdmJfYnVmZmVyIHsKKwlzdHJ1Y3QgdmIyX2J1ZmZlciB2Yl9idWY7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwlzdHJ1Y3QgbWNhbV9kbWFfZGVzYyAqZG1hX2Rlc2M7CS8qIERlc2NyaXB0b3IgdmlydHVhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdCBkbWFfZGVzY19wYTsJCS8qIERlc2NyaXB0b3IgcGh5c2ljYWwgYWRkcmVzcyAqLworCWludCBkbWFfZGVzY19uZW50OwkJLyogTnVtYmVyIG9mIG1hcHBlZCBkZXNjcmlwdG9ycyAqLworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWNhbV92Yl9idWZmZXIgKnZiX3RvX212YihzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG1jYW1fdmJfYnVmZmVyLCB2Yl9idWYpOworfQorCisvKgorICogSGFuZCBhIGNvbXBsZXRlZCBidWZmZXIgYmFjayB0byB1c2VyIHNwYWNlLgorICovCitzdGF0aWMgdm9pZCBtY2FtX2J1ZmZlcl9kb25lKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWUsCisJCXN0cnVjdCB2YjJfYnVmZmVyICp2YnVmKQoreworCXZidWYtPnY0bDJfYnVmLmJ5dGVzdXNlZCA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2U7CisJdmJ1Zi0+djRsMl9idWYuc2VxdWVuY2UgPSBjYW0tPmJ1Zl9zZXFbZnJhbWVdOworCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YnVmLCAwLCBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlKTsKKwl2YjJfYnVmZmVyX2RvbmUodmJ1ZiwgVkIyX0JVRl9TVEFURV9ET05FKTsKK30KKworCisKKy8qCisgKiBEZWJ1Z2dpbmcgYW5kIHJlbGF0ZWQuCisgKi8KKyNkZWZpbmUgY2FtX2VycihjYW0sIGZtdCwgYXJnLi4uKSBcCisJZGV2X2VycigoY2FtKS0+ZGV2LCBmbXQsICMjYXJnKTsKKyNkZWZpbmUgY2FtX3dhcm4oY2FtLCBmbXQsIGFyZy4uLikgXAorCWRldl93YXJuKChjYW0pLT5kZXYsIGZtdCwgIyNhcmcpOworI2RlZmluZSBjYW1fZGJnKGNhbSwgZm10LCBhcmcuLi4pIFwKKwlkZXZfZGJnKChjYW0pLT5kZXYsIGZtdCwgIyNhcmcpOworCisKKy8qCisgKiBGbGFnIG1hbmlwdWxhdGlvbiBoZWxwZXJzCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fcmVzZXRfYnVmZmVycyhzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgaTsKKworCWNhbS0+bmV4dF9idWYgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmczsgaSsrKQorCQljbGVhcl9iaXQoaSwgJmNhbS0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtY2FtX25lZWRzX2NvbmZpZyhzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoQ0ZfQ09ORklHX05FRURFRCwgJmNhbS0+ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtY2FtX3NldF9jb25maWdfbmVlZGVkKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCBpbnQgbmVlZGVkKQoreworCWlmIChuZWVkZWQpCisJCXNldF9iaXQoQ0ZfQ09ORklHX05FRURFRCwgJmNhbS0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KENGX0NPTkZJR19ORUVERUQsICZjYW0tPmZsYWdzKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIE1ha2UgdGhlIGNvbnRyb2xsZXIgc3RhcnQgZ3JhYmJpbmcgaW1hZ2VzLiAgRXZlcnl0aGluZyBtdXN0CisgKiBiZSBzZXQgdXAgYmVmb3JlIGRvaW5nIHRoaXMuCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9zdGFydChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwkvKiBzZXRfYml0IHBlcmZvcm1zIGEgcmVhZCwgc28gbm8gb3RoZXIgYmFycmllciBzaG91bGQgYmUKKwkgICBuZWVkZWQgaGVyZSAqLworCW1jYW1fcmVnX3NldF9iaXQoY2FtLCBSRUdfQ1RSTDAsIEMwX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9zdG9wKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCW1jYW1fcmVnX2NsZWFyX2JpdChjYW0sIFJFR19DVFJMMCwgQzBfRU5BQkxFKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgTUNBTV9NT0RFX1ZNQUxMT0MKKy8qCisgKiBDb2RlIHNwZWNpZmljIHRvIHRoZSB2bWFsbG9jIGJ1ZmZlciBtb2RlLgorICovCisKKy8qCisgKiBBbGxvY2F0ZSBpbi1rZXJuZWwgRE1BIGJ1ZmZlcnMgZm9yIHZtYWxsb2MgbW9kZS4KKyAqLworc3RhdGljIGludCBtY2FtX2FsbG9jX2RtYV9idWZzKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCBpbnQgbG9hZHRpbWUpCit7CisJaW50IGk7CisKKwltY2FtX3NldF9jb25maWdfbmVlZGVkKGNhbSwgMSk7CisJaWYgKGxvYWR0aW1lKQorCQljYW0tPmRtYV9idWZfc2l6ZSA9IGRtYV9idWZfc2l6ZTsKKwllbHNlCisJCWNhbS0+ZG1hX2J1Zl9zaXplID0gY2FtLT5waXhfZm9ybWF0LnNpemVpbWFnZTsKKwlpZiAobl9kbWFfYnVmcyA+IDMpCisJCW5fZG1hX2J1ZnMgPSAzOworCisJY2FtLT5uYnVmcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5fZG1hX2J1ZnM7IGkrKykgeworCQljYW0tPmRtYV9idWZzW2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KGNhbS0+ZGV2LAorCQkJCWNhbS0+ZG1hX2J1Zl9zaXplLCBjYW0tPmRtYV9oYW5kbGVzICsgaSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKGNhbS0+ZG1hX2J1ZnNbaV0gPT0gTlVMTCkgeworCQkJY2FtX3dhcm4oY2FtLCAiRmFpbGVkIHRvIGFsbG9jYXRlIERNQSBidWZmZXJcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJKGNhbS0+bmJ1ZnMpKys7CisJfQorCisJc3dpdGNoIChjYW0tPm5idWZzKSB7CisJY2FzZSAxOgorCQlkbWFfZnJlZV9jb2hlcmVudChjYW0tPmRldiwgY2FtLT5kbWFfYnVmX3NpemUsCisJCQkJY2FtLT5kbWFfYnVmc1swXSwgY2FtLT5kbWFfaGFuZGxlc1swXSk7CisJCWNhbS0+bmJ1ZnMgPSAwOworCWNhc2UgMDoKKwkJY2FtX2VycihjYW0sICJJbnN1ZmZpY2llbnQgRE1BIGJ1ZmZlcnMsIGNhbm5vdCBvcGVyYXRlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYXNlIDI6CisJCWlmIChuX2RtYV9idWZzID4gMikKKwkJCWNhbV93YXJuKGNhbSwgIldpbGwgbGltcCBhbG9uZyB3aXRoIG9ubHkgMiBidWZmZXJzXG4iKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2FtX2ZyZWVfZG1hX2J1ZnMoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmczsgaSsrKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGNhbS0+ZGV2LCBjYW0tPmRtYV9idWZfc2l6ZSwKKwkJCQljYW0tPmRtYV9idWZzW2ldLCBjYW0tPmRtYV9oYW5kbGVzW2ldKTsKKwkJY2FtLT5kbWFfYnVmc1tpXSA9IE5VTEw7CisJfQorCWNhbS0+bmJ1ZnMgPSAwOworfQorCisKKy8qCisgKiBTZXQgdXAgRE1BIGJ1ZmZlcnMgd2hlbiBvcGVyYXRpbmcgaW4gdm1hbGxvYyBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9kbWFfdm1hbGxvYyhzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwkvKgorCSAqIFN0b3JlIHRoZSBmaXJzdCB0d28gWSBidWZmZXJzICh3ZSBhcmVuJ3Qgc3VwcG9ydGluZworCSAqIHBsYW5hciBmb3JtYXRzIGZvciBub3csIHNvIG5vIFVWIGJ1ZnMpLiAgVGhlbiBlaXRoZXIKKwkgKiBzZXQgdGhlIHRoaXJkIGlmIGl0IGV4aXN0cywgb3IgdGVsbCB0aGUgY29udHJvbGxlcgorCSAqIHRvIGp1c3QgdXNlIHR3by4KKwkgKi8KKwltY2FtX3JlZ193cml0ZShjYW0sIFJFR19ZMEJBUiwgY2FtLT5kbWFfaGFuZGxlc1swXSk7CisJbWNhbV9yZWdfd3JpdGUoY2FtLCBSRUdfWTFCQVIsIGNhbS0+ZG1hX2hhbmRsZXNbMV0pOworCWlmIChjYW0tPm5idWZzID4gMikgeworCQltY2FtX3JlZ193cml0ZShjYW0sIFJFR19ZMkJBUiwgY2FtLT5kbWFfaGFuZGxlc1syXSk7CisJCW1jYW1fcmVnX2NsZWFyX2JpdChjYW0sIFJFR19DVFJMMSwgQzFfVFdPQlVGUyk7CisJfSBlbHNlCisJCW1jYW1fcmVnX3NldF9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1RXT0JVRlMpOworCWlmIChjYW0tPmNoaXBfaWQgPT0gVjRMMl9JREVOVF9DQUZFKQorCQltY2FtX3JlZ193cml0ZShjYW0sIFJFR19VQkFSLCAwKTsgLyogMzIgYml0cyBvbmx5ICovCit9CisKKy8qCisgKiBDb3B5IGRhdGEgb3V0IHRvIHVzZXIgc3BhY2UgaW4gdGhlIHZtYWxsb2MgY2FzZQorICovCitzdGF0aWMgdm9pZCBtY2FtX2ZyYW1lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gKHN0cnVjdCBtY2FtX2NhbWVyYSAqKSBkYXRhOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICpidWY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZzOyBpKyspIHsKKwkJaW50IGJ1Zm5vID0gY2FtLT5uZXh0X2J1ZjsKKworCQlpZiAoY2FtLT5zdGF0ZSAhPSBTX1NUUkVBTUlORyB8fCBidWZubyA8IDApCisJCQlicmVhazsgIC8qIEkvTyBnb3Qgc3RvcHBlZCAqLworCQlpZiAoKysoY2FtLT5uZXh0X2J1ZikgPj0gY2FtLT5uYnVmcykKKwkJCWNhbS0+bmV4dF9idWYgPSAwOworCQlpZiAoIXRlc3RfYml0KGJ1Zm5vLCAmY2FtLT5mbGFncykpCisJCQljb250aW51ZTsKKwkJaWYgKGxpc3RfZW1wdHkoJmNhbS0+YnVmZmVycykpIHsKKwkJCXNpbmdsZXMrKzsKKwkJCWJyZWFrOyAgLyogTGVhdmUgaXQgdmFsaWQsIGhvcGUgZm9yIGJldHRlciBsYXRlciAqLworCQl9CisJCWRlbGl2ZXJlZCsrOworCQljbGVhcl9iaXQoYnVmbm8sICZjYW0tPmZsYWdzKTsKKwkJYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmY2FtLT5idWZmZXJzLCBzdHJ1Y3QgbWNhbV92Yl9idWZmZXIsCisJCQkJcXVldWUpOworCQlsaXN0X2RlbF9pbml0KCZidWYtPnF1ZXVlKTsKKwkJLyoKKwkJICogRHJvcCB0aGUgbG9jayBkdXJpbmcgdGhlIGJpZyBjb3B5LiAgVGhpcyAqc2hvdWxkKiBiZSBzYWZlLi4uCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJCW1lbWNweSh2YjJfcGxhbmVfdmFkZHIoJmJ1Zi0+dmJfYnVmLCAwKSwgY2FtLT5kbWFfYnVmc1tidWZub10sCisJCQkJY2FtLT5waXhfZm9ybWF0LnNpemVpbWFnZSk7CisJCW1jYW1fYnVmZmVyX2RvbmUoY2FtLCBidWZubywgJmJ1Zi0+dmJfYnVmKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworfQorCisKKy8qCisgKiBNYWtlIHN1cmUgb3VyIGFsbG9jYXRlZCBidWZmZXJzIGFyZSB1cCB0byB0aGUgdGFzay4KKyAqLworc3RhdGljIGludCBtY2FtX2NoZWNrX2RtYV9idWZmZXJzKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCWlmIChjYW0tPm5idWZzID4gMCAmJiBjYW0tPmRtYV9idWZfc2l6ZSA8IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2UpCisJCQltY2FtX2ZyZWVfZG1hX2J1ZnMoY2FtKTsKKwlpZiAoY2FtLT5uYnVmcyA9PSAwKQorCQlyZXR1cm4gbWNhbV9hbGxvY19kbWFfYnVmcyhjYW0sIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2FtX3ZtYWxsb2NfZG9uZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSwgaW50IGZyYW1lKQoreworCXRhc2tsZXRfc2NoZWR1bGUoJmNhbS0+c190YXNrbGV0KTsKK30KKworI2Vsc2UgLyogTUNBTV9NT0RFX1ZNQUxMT0MgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWNhbV9hbGxvY19kbWFfYnVmcyhzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSwgaW50IGxvYWR0aW1lKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhbV9mcmVlX2RtYV9idWZzKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWNhbV9jaGVja19kbWFfYnVmZmVycyhzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworCisKKyNlbmRpZiAvKiBNQ0FNX01PREVfVk1BTExPQyAqLworCisKKyNpZmRlZiBNQ0FNX01PREVfRE1BX0NPTlRJRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIERNQS1jb250aWd1b3VzIGNvZGUuCisgKi8KKy8qCisgKiBTZXQgdXAgYSBjb250aWd1b3VzIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGZyYW1lLiAgSGVyZSBhbHNvIGlzIHdoZXJlCisgKiB0aGUgdW5kZXJydW4gc3RyYXRlZ3kgaXMgc2V0OiBpZiB0aGVyZSBpcyBubyBidWZmZXIgYXZhaWxhYmxlLCByZXVzZQorICogdGhlIGJ1ZmZlciBmcm9tIHRoZSBvdGhlciBCQVIgYW5kIHNldCB0aGUgQ0ZfU0lOR0xFX0JVRkZFUiBmbGFnIHRvCisgKiBrZWVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmcm9tIGdpdmluZyB0aGF0IGJ1ZmZlciBiYWNrIHRvIHVzZXIKKyAqIHNwYWNlLiAgSW4gdGhpcyB3YXksIHdlIGFsd2F5cyBoYXZlIGEgYnVmZmVyIHRvIERNQSB0byBhbmQgZG9uJ3QKKyAqIGhhdmUgdG8gdHJ5IHRvIHBsYXkgZ2FtZXMgc3RvcHBpbmcgYW5kIHJlc3RhcnRpbmcgdGhlIGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fc2V0X2NvbnRpZ19idWZmZXIoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZSkKK3sKKwlzdHJ1Y3QgbWNhbV92Yl9idWZmZXIgKmJ1ZjsKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgYnVmZmVycywgZ28gaW50byBzaW5nbGUgbW9kZQorCSAqLworCWlmIChsaXN0X2VtcHR5KCZjYW0tPmJ1ZmZlcnMpKSB7CisJCWJ1ZiA9IGNhbS0+dmJfYnVmc1tmcmFtZSBeIDB4MV07CisJCWNhbS0+dmJfYnVmc1tmcmFtZV0gPSBidWY7CisJCW1jYW1fcmVnX3dyaXRlKGNhbSwgZnJhbWUgPT0gMCA/IFJFR19ZMEJBUiA6IFJFR19ZMUJBUiwKKwkJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcigmYnVmLT52Yl9idWYsIDApKTsKKwkJc2V0X2JpdChDRl9TSU5HTEVfQlVGRkVSLCAmY2FtLT5mbGFncyk7CisJCXNpbmdsZXMrKzsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIE9LLCB3ZSBoYXZlIGEgYnVmZmVyIHdlIGNhbiB1c2UuCisJICovCisJYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmY2FtLT5idWZmZXJzLCBzdHJ1Y3QgbWNhbV92Yl9idWZmZXIsIHF1ZXVlKTsKKwlsaXN0X2RlbF9pbml0KCZidWYtPnF1ZXVlKTsKKwltY2FtX3JlZ193cml0ZShjYW0sIGZyYW1lID09IDAgPyBSRUdfWTBCQVIgOiBSRUdfWTFCQVIsCisJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcigmYnVmLT52Yl9idWYsIDApKTsKKwljYW0tPnZiX2J1ZnNbZnJhbWVdID0gYnVmOworCWNsZWFyX2JpdChDRl9TSU5HTEVfQlVGRkVSLCAmY2FtLT5mbGFncyk7Cit9CisKKy8qCisgKiBJbml0aWFsIEJfRE1BX2NvbnRpZyBzZXR1cC4KKyAqLworc3RhdGljIHZvaWQgbWNhbV9jdGxyX2RtYV9jb250aWcoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJbWNhbV9yZWdfc2V0X2JpdChjYW0sIFJFR19DVFJMMSwgQzFfVFdPQlVGUyk7CisJY2FtLT5uYnVmcyA9IDI7CisJbWNhbV9zZXRfY29udGlnX2J1ZmZlcihjYW0sIDApOworCW1jYW1fc2V0X2NvbnRpZ19idWZmZXIoY2FtLCAxKTsKK30KKworLyoKKyAqIEZyYW1lIGNvbXBsZXRpb24gaGFuZGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fZG1hX2NvbnRpZ19kb25lKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCBpbnQgZnJhbWUpCit7CisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICpidWYgPSBjYW0tPnZiX2J1ZnNbZnJhbWVdOworCisJaWYgKCF0ZXN0X2JpdChDRl9TSU5HTEVfQlVGRkVSLCAmY2FtLT5mbGFncykpIHsKKwkJZGVsaXZlcmVkKys7CisJCW1jYW1fYnVmZmVyX2RvbmUoY2FtLCBmcmFtZSwgJmJ1Zi0+dmJfYnVmKTsKKwl9CisJbWNhbV9zZXRfY29udGlnX2J1ZmZlcihjYW0sIGZyYW1lKTsKK30KKworI2VuZGlmIC8qIE1DQU1fTU9ERV9ETUFfQ09OVElHICovCisKKyNpZmRlZiBNQ0FNX01PREVfRE1BX1NHCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogU2NhdHRlci9nYXRoZXItc3BlY2lmaWMgY29kZS4KKyAqLworCisvKgorICogU2V0IHVwIHRoZSBuZXh0IGJ1ZmZlciBmb3IgUy9HIEkvTzsgY2FsbGVyIHNob3VsZCBiZSBzdXJlIHRoYXQKKyAqIHRoZSBjb250cm9sbGVyIGlzIHN0b3BwZWQgYW5kIGEgYnVmZmVyIGlzIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHZvaWQgbWNhbV9zZ19uZXh0X2J1ZmZlcihzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgbWNhbV92Yl9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJmNhbS0+YnVmZmVycywgc3RydWN0IG1jYW1fdmJfYnVmZmVyLCBxdWV1ZSk7CisJbGlzdF9kZWxfaW5pdCgmYnVmLT5xdWV1ZSk7CisJbWNhbV9yZWdfd3JpdGUoY2FtLCBSRUdfRE1BX0RFU0NfWSwgYnVmLT5kbWFfZGVzY19wYSk7CisJbWNhbV9yZWdfd3JpdGUoY2FtLCBSRUdfREVTQ19MRU5fWSwKKwkJCWJ1Zi0+ZG1hX2Rlc2NfbmVudCpzaXplb2Yoc3RydWN0IG1jYW1fZG1hX2Rlc2MpKTsKKwltY2FtX3JlZ193cml0ZShjYW0sIFJFR19ERVNDX0xFTl9VLCAwKTsKKwltY2FtX3JlZ193cml0ZShjYW0sIFJFR19ERVNDX0xFTl9WLCAwKTsKKwljYW0tPnZiX2J1ZnNbMF0gPSBidWY7Cit9CisKKy8qCisgKiBJbml0aWFsIEJfRE1BX3NnIHNldHVwCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9kbWFfc2coc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJbWNhbV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9ERVNDXzNXT1JEKTsKKwltY2FtX3NnX25leHRfYnVmZmVyKGNhbSk7CisJbWNhbV9yZWdfc2V0X2JpdChjYW0sIFJFR19DVFJMMSwgQzFfREVTQ19FTkEpOworCWNhbS0+bmJ1ZnMgPSAzOworfQorCisKKy8qCisgKiBGcmFtZSBjb21wbGV0aW9uIHdpdGggUy9HIGlzIHRyaWNraWVyLiAgV2UgY2FuJ3QgbXVjayB3aXRoCisgKiBhIGRlc2NyaXB0b3IgY2hhaW4gb24gdGhlIGZseSwgc2luY2UgdGhlIGNvbnRyb2xsZXIgYnVmZmVycyBpdAorICogaW50ZXJuYWxseS4gIFNvIHdlIGhhdmUgdG8gYWN0dWFsbHkgc3RvcCBhbmQgcmVzdGFydDsgTWFydmVsbAorICogc2F5cyB0aGlzIGlzIHRoZSB3YXkgdG8gZG8gaXQuCisgKgorICogT2YgY291cnNlLCBzdG9wcGluZyBpcyBlYXNpZXIgc2FpZCB0aGFuIGRvbmU7IGV4cGVyaWVuY2Ugc2hvd3MKKyAqIHRoYXQgdGhlIGNvbnRyb2xsZXIgY2FuIHN0YXJ0IGEgZnJhbWUgKmFmdGVyKiBDMF9FTkFCTEUgaGFzIGJlZW4KKyAqIGNsZWFyZWQuICBTbyB3aGVuIHJ1bm5pbmcgaW4gUy9HIG1vZGUsIHRoZSBjb250cm9sbGVyIGlzICJzdG9wcGVkIgorICogb24gcmVjZWlwdCBvZiB0aGUgc3RhcnQtb2YtZnJhbWUgaW50ZXJydXB0LiAgVGhhdCBtZWFucyB3ZSBjYW4KKyAqIHNhZmVseSBjaGFuZ2UgdGhlIERNQSBkZXNjcmlwdG9yIGFycmF5IGhlcmUgYW5kIHJlc3RhcnQgdGhpbmdzCisgKiAoYXNzdW1pbmcgdGhlcmUncyBhbm90aGVyIGJ1ZmZlciB3YWl0aW5nIHRvIGdvKS4KKyAqLworc3RhdGljIHZvaWQgbWNhbV9kbWFfc2dfZG9uZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSwgaW50IGZyYW1lKQoreworCXN0cnVjdCBtY2FtX3ZiX2J1ZmZlciAqYnVmID0gY2FtLT52Yl9idWZzWzBdOworCisJLyoKKwkgKiBWZXJ5IEJhZCBOb3QgR29vZCBUaGluZ3MgaGFwcGVuIGlmIHlvdSBkb24ndCBjbGVhcgorCSAqIEMxX0RFU0NfRU5BIGJlZm9yZSBtYWtpbmcgYW55IGRlc2NyaXB0b3IgY2hhbmdlcy4KKwkgKi8KKwltY2FtX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX0RFU0NfRU5BKTsKKwkvKgorCSAqIElmIHdlIGhhdmUgYW5vdGhlciBidWZmZXIgYXZhaWxhYmxlLCBwdXQgaXQgaW4gYW5kCisJICogcmVzdGFydCB0aGUgZW5naW5lLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmY2FtLT5idWZmZXJzKSkgeworCQltY2FtX3NnX25leHRfYnVmZmVyKGNhbSk7CisJCW1jYW1fcmVnX3NldF9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX0RFU0NfRU5BKTsKKwkJbWNhbV9jdGxyX3N0YXJ0KGNhbSk7CisJLyoKKwkgKiBPdGhlcndpc2Ugc2V0IENGX1NHX1JFU1RBUlQgYW5kIHRoZSBjb250cm9sbGVyIHdpbGwKKwkgKiBiZSByZXN0YXJ0ZWQgb25jZSBhbm90aGVyIGJ1ZmZlciBzaG93cyB1cC4KKwkgKi8KKwl9IGVsc2UgeworCQlzZXRfYml0KENGX1NHX1JFU1RBUlQsICZjYW0tPmZsYWdzKTsKKwkJc2luZ2xlcysrOworCX0KKwkvKgorCSAqIE5vdyB3ZSBjYW4gZ2l2ZSB0aGUgY29tcGxldGVkIGZyYW1lIGJhY2sgdG8gdXNlciBzcGFjZS4KKwkgKi8KKwlkZWxpdmVyZWQrKzsKKwltY2FtX2J1ZmZlcl9kb25lKGNhbSwgZnJhbWUsICZidWYtPnZiX2J1Zik7Cit9CisKKworLyoKKyAqIFNjYXR0ZXIvZ2F0aGVyIG1vZGUgcmVxdWlyZXMgc3RvcHBpbmcgdGhlIGNvbnRyb2xsZXIgYmV0d2VlbgorICogZnJhbWVzIHNvIHdlIGNhbiBwdXQgaW4gYSBuZXcgRE1BIGRlc2NyaXB0b3IgYXJyYXkuICBJZiBubyBuZXcKKyAqIGJ1ZmZlciBleGlzdHMgYXQgZnJhbWUgY29tcGxldGlvbiwgdGhlIGNvbnRyb2xsZXIgaXMgbGVmdCBzdG9wcGVkOworICogdGhpcyBmdW5jdGlvbiBpcyBjaGFyZ2VkIHdpdGggZ2V0dGlnIHRoaW5ncyBnb2luZyBhZ2Fpbi4KKyAqLworc3RhdGljIHZvaWQgbWNhbV9zZ19yZXN0YXJ0KHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCW1jYW1fY3Rscl9kbWFfc2coY2FtKTsKKwltY2FtX2N0bHJfc3RhcnQoY2FtKTsKKwljbGVhcl9iaXQoQ0ZfU0dfUkVTVEFSVCwgJmNhbS0+ZmxhZ3MpOworfQorCisjZWxzZSAvKiBNQ0FNX01PREVfRE1BX1NHICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2FtX3NnX3Jlc3RhcnQoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJcmV0dXJuOworfQorCisjZW5kaWYgLyogTUNBTV9NT0RFX0RNQV9TRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogQnVmZmVyLW1vZGUtaW5kZXBlbmRlbnQgY29udHJvbGxlciBjb2RlLgorICovCisKKy8qCisgKiBJbWFnZSBmb3JtYXQgc2V0dXAKKyAqLworc3RhdGljIHZvaWQgbWNhbV9jdGxyX2ltYWdlKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCWludCBpbWdzejsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpmbXQgPSAmY2FtLT5waXhfZm9ybWF0OworCisJaW1nc3ogPSAoKGZtdC0+aGVpZ2h0IDw8IElNR1NaX1ZfU0hJRlQpICYgSU1HU1pfVl9NQVNLKSB8CisJCShmbXQtPmJ5dGVzcGVybGluZSAmIElNR1NaX0hfTUFTSyk7CisJbWNhbV9yZWdfd3JpdGUoY2FtLCBSRUdfSU1HU0laRSwgaW1nc3opOworCW1jYW1fcmVnX3dyaXRlKGNhbSwgUkVHX0lNR09GRlNFVCwgMCk7CisJLyogWVBJVENIIGp1c3QgZHJvcHMgdGhlIGxhc3QgdHdvIGJpdHMgKi8KKwltY2FtX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0lNR1BJVENILCBmbXQtPmJ5dGVzcGVybGluZSwKKwkJCUlNR1BfWVBfTUFTSyk7CisJLyoKKwkgKiBUZWxsIHRoZSBjb250cm9sbGVyIGFib3V0IHRoZSBpbWFnZSBmb3JtYXQgd2UgYXJlIHVzaW5nLgorCSAqLworCXN3aXRjaCAoY2FtLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkgICAgbWNhbV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19DVFJMMCwKKwkJCSAgICBDMF9ERl9ZVVZ8QzBfWVVWX1BBQ0tFRHxDMF9ZVVZFX1lVWVYsCisJCQkgICAgQzBfREZfTUFTSyk7CisJICAgIGJyZWFrOworCisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNDQ0OgorCSAgICBtY2FtX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0NUUkwwLAorCQkJICAgIEMwX0RGX1JHQnxDMF9SR0JGXzQ0NHxDMF9SR0I0X1hSR0IsCisJCQkgICAgQzBfREZfTUFTSyk7CisJCS8qIEFscGhhIHZhbHVlPyAqLworCSAgICBicmVhazsKKworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkgICAgbWNhbV9yZWdfd3JpdGVfbWFzayhjYW0sIFJFR19DVFJMMCwKKwkJCSAgICBDMF9ERl9SR0J8QzBfUkdCRl81NjV8QzBfUkdCNV9CR0dSLAorCQkJICAgIEMwX0RGX01BU0spOworCSAgICBicmVhazsKKworCWRlZmF1bHQ6CisJICAgIGNhbV9lcnIoY2FtLCAiVW5rbm93biBmb3JtYXQgJXhcbiIsIGNhbS0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCk7CisJICAgIGJyZWFrOworCX0KKwkvKgorCSAqIE1ha2Ugc3VyZSBpdCBrbm93cyB3ZSB3YW50IHRvIHVzZSBoc3luYy92c3luYy4KKwkgKi8KKwltY2FtX3JlZ193cml0ZV9tYXNrKGNhbSwgUkVHX0NUUkwwLCBDMF9TSUZfSFZTWU5DLAorCQkJQzBfU0lGTV9NQVNLKTsKK30KKworCisvKgorICogQ29uZmlndXJlIHRoZSBjb250cm9sbGVyIGZvciBvcGVyYXRpb247IGNhbGxlciBob2xkcyB0aGUKKyAqIGRldmljZSBtdXRleC4KKyAqLworc3RhdGljIGludCBtY2FtX2N0bHJfY29uZmlndXJlKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCWNhbS0+ZG1hX3NldHVwKGNhbSk7CisJbWNhbV9jdGxyX2ltYWdlKGNhbSk7CisJbWNhbV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDApOworCWNsZWFyX2JpdChDRl9TR19SRVNUQVJULCAmY2FtLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2FtX2N0bHJfaXJxX2VuYWJsZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwkvKgorCSAqIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMsIHNpbmNlIHdlIGRvIG5vdAorCSAqIGV4cGVjdCB0byBoYXZlIEkvTyBhY3RpdmUgcHJpb3IgdG8gZW5hYmxpbmcuCisJICovCisJbWNhbV9yZWdfd3JpdGUoY2FtLCBSRUdfSVJRU1RBVCwgRlJBTUVJUlFTKTsKKwltY2FtX3JlZ19zZXRfYml0KGNhbSwgUkVHX0lSUU1BU0ssIEZSQU1FSVJRUyk7Cit9CisKK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9pcnFfZGlzYWJsZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwltY2FtX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfSVJRTUFTSywgRlJBTUVJUlFTKTsKK30KKworCisKK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9pbml0KHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCS8qCisJICogTWFrZSBzdXJlIGl0J3Mgbm90IHBvd2VyZWQgZG93bi4KKwkgKi8KKwltY2FtX3JlZ19jbGVhcl9iaXQoY2FtLCBSRUdfQ1RSTDEsIEMxX1BXUkRXTik7CisJLyoKKwkgKiBUdXJuIG9mZiB0aGUgZW5hYmxlIGJpdC4gIEl0IHN1cmUgc2hvdWxkIGJlIG9mZiBhbnl3YXksCisJICogYnV0IGl0J3MgZ29vZCB0byBiZSBzdXJlLgorCSAqLworCW1jYW1fcmVnX2NsZWFyX2JpdChjYW0sIFJFR19DVFJMMCwgQzBfRU5BQkxFKTsKKwkvKgorCSAqIENsb2NrIHRoZSBzZW5zb3IgYXBwcm9wcmlhdGVseS4gIENvbnRyb2xsZXIgY2xvY2sgc2hvdWxkCisJICogYmUgNDhNSHosIHNlbnNvciAidHlwaWNhbCIgdmFsdWUgaXMgaGFsZiB0aGF0LgorCSAqLworCW1jYW1fcmVnX3dyaXRlX21hc2soY2FtLCBSRUdfQ0xLQ1RSTCwgMiwgQ0xLX0RJVl9NQVNLKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7Cit9CisKKworLyoKKyAqIFN0b3AgdGhlIGNvbnRyb2xsZXIsIGFuZCBkb24ndCByZXR1cm4gdW50aWwgd2UncmUgcmVhbGx5IHN1cmUgdGhhdCBubworICogZnVydGhlciBETUEgaXMgZ29pbmcgb24uCisgKi8KK3N0YXRpYyB2b2lkIG1jYW1fY3Rscl9zdG9wX2RtYShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUaGVvcnk6IHN0b3AgdGhlIGNhbWVyYSBjb250cm9sbGVyICh3aGV0aGVyIGl0IGlzIG9wZXJhdGluZworCSAqIG9yIG5vdCkuICBEZWxheSBicmllZmx5IGp1c3QgaW4gY2FzZSB3ZSByYWNlIHdpdGggdGhlIFNPRgorCSAqIGludGVycnVwdCwgdGhlbiB3YWl0IHVudGlsIG5vIERNQSBpcyBhY3RpdmUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwljbGVhcl9iaXQoQ0ZfU0dfUkVTVEFSVCwgJmNhbS0+ZmxhZ3MpOworCW1jYW1fY3Rscl9zdG9wKGNhbSk7CisJY2FtLT5zdGF0ZSA9IFNfSURMRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJbXNsZWVwKDQwKTsKKwlpZiAodGVzdF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpKQorCQljYW1fZXJyKGNhbSwgIlRpbWVvdXQgd2FpdGluZyBmb3IgRE1BIHRvIGVuZFxuIik7CisJCS8qIFRoaXMgd291bGQgYmUgYmFkIG5ld3MgLSB3aGF0IG5vdz8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCW1jYW1fY3Rscl9pcnFfZGlzYWJsZShjYW0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFBvd2VyIHVwIGFuZCBkb3duLgorICovCitzdGF0aWMgdm9pZCBtY2FtX2N0bHJfcG93ZXJfdXAoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJY2FtLT5wbGF0X3Bvd2VyX3VwKGNhbSk7CisJbWNhbV9yZWdfY2xlYXJfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwltc2xlZXAoNSk7IC8qIEp1c3QgdG8gYmUgc3VyZSAqLworfQorCitzdGF0aWMgdm9pZCBtY2FtX2N0bHJfcG93ZXJfZG93bihzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFNjaG9vbCBvZiBoYXJkIGtub2NrcyBkZXBhcnRtZW50OiBiZSBzdXJlIHdlIGRvIGFueSByZWdpc3RlcgorCSAqIHR3aWRkbGluZyBvbiB0aGUgY29udHJvbGxlciAqYmVmb3JlKiBjYWxsaW5nIHRoZSBwbGF0Zm9ybQorCSAqIHBvd2VyIGRvd24gcm91dGluZS4KKwkgKi8KKwltY2FtX3JlZ19zZXRfYml0KGNhbSwgUkVHX0NUUkwxLCBDMV9QV1JEV04pOworCWNhbS0+cGxhdF9wb3dlcl9kb3duKGNhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIENvbW11bmljYXRpb25zIHdpdGggdGhlIHNlbnNvci4KKyAqLworCitzdGF0aWMgaW50IF9fbWNhbV9jYW1fcmVzZXQoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgcmVzZXQsIDApOworfQorCisvKgorICogV2UgaGF2ZSBmb3VuZCB0aGUgc2Vuc29yIG9uIHRoZSBpMmMuICBMZXQncyB0cnkgdG8gaGF2ZSBhCisgKiBjb252ZXJzYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgbWNhbV9jYW1faW5pdChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCBjaGlwOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWlmIChjYW0tPnN0YXRlICE9IFNfTk9UUkVBRFkpCisJCWNhbV93YXJuKGNhbSwgIkNhbSBpbml0IHdpdGggZGV2aWNlIGluIGZ1bmt5IHN0YXRlICVkIiwKKwkJCQljYW0tPnN0YXRlKTsKKwlyZXQgPSBfX21jYW1fY2FtX3Jlc2V0KGNhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJY2hpcC5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLm1hdGNoLnR5cGUgPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI7CisJY2hpcC5tYXRjaC5hZGRyID0gY2FtLT5zZW5zb3JfYWRkcjsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWNhbS0+c2Vuc29yX3R5cGUgPSBjaGlwLmlkZW50OworCWlmIChjYW0tPnNlbnNvcl90eXBlICE9IFY0TDJfSURFTlRfT1Y3NjcwKSB7CisJCWNhbV9lcnIoY2FtLCAiVW5zdXBwb3J0ZWQgc2Vuc29yIHR5cGUgMHgleCIsIGNhbS0+c2Vuc29yX3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisvKiBHZXQvc2V0IHBhcmFtZXRlcnM/ICovCisJcmV0ID0gMDsKKwljYW0tPnN0YXRlID0gU19JRExFOworb3V0OgorCW1jYW1fY3Rscl9wb3dlcl9kb3duKGNhbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb25maWd1cmUgdGhlIHNlbnNvciB0byBtYXRjaCB0aGUgcGFyYW1ldGVycyB3ZSBoYXZlLiAgQ2FsbGVyIHNob3VsZAorICogaG9sZCBzX211dGV4CisgKi8KK3N0YXRpYyBpbnQgbWNhbV9jYW1fc2V0X2ZsaXAoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCisJbWVtc2V0KCZjdHJsLCAwLCBzaXplb2YoY3RybCkpOworCWN0cmwuaWQgPSBWNEwyX0NJRF9WRkxJUDsKKwljdHJsLnZhbHVlID0gZmxpcDsKKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKK30KKworCitzdGF0aWMgaW50IG1jYW1fY2FtX2NvbmZpZ3VyZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1idXNfZm10OworCWludCByZXQ7CisKKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJm1idXNfZm10LCAmY2FtLT5waXhfZm9ybWF0LCBjYW0tPm1idXNfY29kZSk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBpbml0LCAwKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfbWJ1c19mbXQsICZtYnVzX2ZtdCk7CisJLyoKKwkgKiBPVjc2NzAgZG9lcyB3ZWlyZCB0aGluZ3MgaWYgZmxpcCBpcyBzZXQgKmJlZm9yZSogZm9ybWF0Li4uCisJICovCisJcmV0ICs9IG1jYW1fY2FtX3NldF9mbGlwKGNhbSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEdldCBldmVyeXRoaW5nIHJlYWR5LCBhbmQgc3RhcnQgZ3JhYmJpbmcgZnJhbWVzLgorICovCitzdGF0aWMgaW50IG1jYW1fcmVhZF9zZXR1cChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24uICBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIERNQSBidWZmZXJzLAorCSAqIG1ha2Ugb25lIGxhc3QsIGRlc3BlcmF0ZSBhdHRlbXB0LgorCSAqLworCWlmIChjYW0tPmJ1ZmZlcl9tb2RlID09IEJfdm1hbGxvYyAmJiBjYW0tPm5idWZzID09IDAgJiYKKwkJCW1jYW1fYWxsb2NfZG1hX2J1ZnMoY2FtLCAwKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAobWNhbV9uZWVkc19jb25maWcoY2FtKSkgeworCQltY2FtX2NhbV9jb25maWd1cmUoY2FtKTsKKwkJcmV0ID0gbWNhbV9jdGxyX2NvbmZpZ3VyZShjYW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIFR1cm4gaXQgbG9vc2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwltY2FtX3Jlc2V0X2J1ZmZlcnMoY2FtKTsKKwltY2FtX2N0bHJfaXJxX2VuYWJsZShjYW0pOworCWNhbS0+c3RhdGUgPSBTX1NUUkVBTUlORzsKKwltY2FtX2N0bHJfc3RhcnQoY2FtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVmlkZW9idWYyIGludGVyZmFjZSBjb2RlLgorICovCisKK3N0YXRpYyBpbnQgbWNhbV92Yl9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpuYnVmcywKKwkJdW5zaWduZWQgaW50ICpudW1fcGxhbmVzLCB1bnNpZ25lZCBsb25nIHNpemVzW10sCisJCXZvaWQgKmFsbG9jX2N0eHNbXSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCWludCBtaW5idWZzID0gKGNhbS0+YnVmZmVyX21vZGUgPT0gQl9ETUFfY29udGlnKSA/IDMgOiAyOworCisJc2l6ZXNbMF0gPSBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlOworCSpudW1fcGxhbmVzID0gMTsgLyogU29tZWRheSB3ZSBoYXZlIHRvIHN1cHBvcnQgcGxhbmFyIGZvcm1hdHMuLi4gKi8KKwlpZiAoKm5idWZzIDwgbWluYnVmcykKKwkJKm5idWZzID0gbWluYnVmczsKKwlpZiAoY2FtLT5idWZmZXJfbW9kZSA9PSBCX0RNQV9jb250aWcpCisJCWFsbG9jX2N0eHNbMF0gPSBjYW0tPnZiX2FsbG9jX2N0eDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBtY2FtX3ZiX2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICptdmIgPSB2Yl90b19tdmIodmIpOworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGFydDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJc3RhcnQgPSAoY2FtLT5zdGF0ZSA9PSBTX0JVRldBSVQpICYmICFsaXN0X2VtcHR5KCZjYW0tPmJ1ZmZlcnMpOworCWxpc3RfYWRkKCZtdmItPnF1ZXVlLCAmY2FtLT5idWZmZXJzKTsKKwlpZiAodGVzdF9iaXQoQ0ZfU0dfUkVTVEFSVCwgJmNhbS0+ZmxhZ3MpKQorCQltY2FtX3NnX3Jlc3RhcnQoY2FtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CisJaWYgKHN0YXJ0KQorCQltY2FtX3JlYWRfc2V0dXAoY2FtKTsKK30KKworCisvKgorICogdmIyIHVzZXMgdGhlc2UgdG8gcmVsZWFzZSB0aGUgbXV0ZXggd2hlbiB3YWl0aW5nIGluIGRxYnVmLiAgSSdtCisgKiBub3QgYWN0dWFsbHkgc3VyZSB3ZSBuZWVkIHRvIGRvIHRoaXMgKEknbSBub3Qgc3VyZSB0aGF0IHZiMl9kcWJ1ZigpIG5lZWRzCisgKiB0byBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXggaGVsZCksIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LgorICovCitzdGF0aWMgdm9pZCBtY2FtX3ZiX3dhaXRfcHJlcGFyZShzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBtY2FtX3ZiX3dhaXRfZmluaXNoKHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworfQorCisvKgorICogVGhlc2UgbmVlZCB0byBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXggaGVsZCBmcm9tIHZiMgorICovCitzdGF0aWMgaW50IG1jYW1fdmJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisKKwlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUpCisJCXJldHVybiAtRUlOVkFMOworCWNhbS0+c2VxdWVuY2UgPSAwOworCS8qCisJICogVmlkZW9idWYyIHNuZWFraWx5IGhvYXJkcyBhbGwgdGhlIGJ1ZmZlcnMgYW5kIHdvbid0CisJICogZ2l2ZSB0aGVtIHRvIHVzIHVudGlsICphZnRlciogc3RyZWFtaW5nIHN0YXJ0cy4gIEJ1dAorCSAqIHdlIGNhbid0IGFjdHVhbGx5IHN0YXJ0IHN0cmVhbWluZyB1bnRpbCB3ZSBoYXZlIGEKKwkgKiBkZXN0aW5hdGlvbi4gIFNvIGdvIGludG8gYSB3YWl0IHN0YXRlIGFuZCBob3BlIHRoZXkKKwkgKiBnaXZlIHVzIGJ1ZmZlcnMgc29vbi4KKwkgKi8KKwlpZiAoY2FtLT5idWZmZXJfbW9kZSAhPSBCX3ZtYWxsb2MgJiYgbGlzdF9lbXB0eSgmY2FtLT5idWZmZXJzKSkgeworCQljYW0tPnN0YXRlID0gU19CVUZXQUlUOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG1jYW1fcmVhZF9zZXR1cChjYW0pOworfQorCitzdGF0aWMgaW50IG1jYW1fdmJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNhbS0+c3RhdGUgPT0gU19CVUZXQUlUKSB7CisJCS8qIFRoZXkgbmV2ZXIgZ2F2ZSB1cyBidWZmZXJzICovCisJCWNhbS0+c3RhdGUgPSBTX0lETEU7CisJCXJldHVybiAwOworCX0KKwlpZiAoY2FtLT5zdGF0ZSAhPSBTX1NUUkVBTUlORykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWNhbV9jdGxyX3N0b3BfZG1hKGNhbSk7CisJLyoKKwkgKiBWQjIgcmVjbGFpbXMgdGhlIGJ1ZmZlcnMsIHNvIHdlIG5lZWQgdG8gZm9yZ2V0CisJICogYWJvdXQgdGhlbS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmJ1ZmZlcnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgbWNhbV92YjJfb3BzID0geworCS5xdWV1ZV9zZXR1cAkJPSBtY2FtX3ZiX3F1ZXVlX3NldHVwLAorCS5idWZfcXVldWUJCT0gbWNhbV92Yl9idWZfcXVldWUsCisJLnN0YXJ0X3N0cmVhbWluZwk9IG1jYW1fdmJfc3RhcnRfc3RyZWFtaW5nLAorCS5zdG9wX3N0cmVhbWluZwkJPSBtY2FtX3ZiX3N0b3Bfc3RyZWFtaW5nLAorCS53YWl0X3ByZXBhcmUJCT0gbWNhbV92Yl93YWl0X3ByZXBhcmUsCisJLndhaXRfZmluaXNoCQk9IG1jYW1fdmJfd2FpdF9maW5pc2gsCit9OworCisKKyNpZmRlZiBNQ0FNX01PREVfRE1BX1NHCisvKgorICogU2NhdHRlci9nYXRoZXIgbW9kZSB1c2VzIGFsbCBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zIHBsdXMgYQorICogZmV3IGV4dHJhcyB0byBkZWFsIHdpdGggRE1BIG1hcHBpbmcuCisgKi8KK3N0YXRpYyBpbnQgbWNhbV92Yl9zZ19idWZfaW5pdChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICptdmIgPSB2Yl90b19tdmIodmIpOworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKwlpbnQgbmRlc2MgPSBjYW0tPnBpeF9mb3JtYXQuc2l6ZWltYWdlL1BBR0VfU0laRSArIDE7CisKKwltdmItPmRtYV9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KGNhbS0+ZGV2LAorCQkJbmRlc2MgKiBzaXplb2Yoc3RydWN0IG1jYW1fZG1hX2Rlc2MpLAorCQkJJm12Yi0+ZG1hX2Rlc2NfcGEsIEdGUF9LRVJORUwpOworCWlmIChtdmItPmRtYV9kZXNjID09IE5VTEwpIHsKKwkJY2FtX2VycihjYW0sICJVbmFibGUgdG8gZ2V0IERNQSBkZXNjcmlwdG9yIGFycmF5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jYW1fdmJfc2dfYnVmX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBtY2FtX3ZiX2J1ZmZlciAqbXZiID0gdmJfdG9fbXZiKHZiKTsKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHZiMl9kbWFfc2dfZGVzYyAqc2dkID0gdmIyX2RtYV9zZ19wbGFuZV9kZXNjKHZiLCAwKTsKKwlzdHJ1Y3QgbWNhbV9kbWFfZGVzYyAqZGVzYyA9IG12Yi0+ZG1hX2Rlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCW12Yi0+ZG1hX2Rlc2NfbmVudCA9IGRtYV9tYXBfc2coY2FtLT5kZXYsIHNnZC0+c2dsaXN0LCBzZ2QtPm51bV9wYWdlcywKKwkJCURNQV9GUk9NX0RFVklDRSk7CisJaWYgKG12Yi0+ZG1hX2Rlc2NfbmVudCA8PSAwKQorCQlyZXR1cm4gLUVJTzsgIC8qIE5vdCBzdXJlIHdoYXQncyByaWdodCBoZXJlICovCisJZm9yX2VhY2hfc2coc2dkLT5zZ2xpc3QsIHNnLCBtdmItPmRtYV9kZXNjX25lbnQsIGkpIHsKKwkJZGVzYy0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWRlc2MtPnNlZ21lbnRfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCWRlc2MrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNhbV92Yl9zZ19idWZfZmluaXNoKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHZiMl9kbWFfc2dfZGVzYyAqc2dkID0gdmIyX2RtYV9zZ19wbGFuZV9kZXNjKHZiLCAwKTsKKworCWRtYV91bm1hcF9zZyhjYW0tPmRldiwgc2dkLT5zZ2xpc3QsIHNnZC0+bnVtX3BhZ2VzLCBETUFfRlJPTV9ERVZJQ0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2FtX3ZiX3NnX2J1Zl9jbGVhbnVwKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICptdmIgPSB2Yl90b19tdmIodmIpOworCWludCBuZGVzYyA9IGNhbS0+cGl4X2Zvcm1hdC5zaXplaW1hZ2UvUEFHRV9TSVpFICsgMTsKKworCWRtYV9mcmVlX2NvaGVyZW50KGNhbS0+ZGV2LCBuZGVzYyAqIHNpemVvZihzdHJ1Y3QgbWNhbV9kbWFfZGVzYyksCisJCQltdmItPmRtYV9kZXNjLCBtdmItPmRtYV9kZXNjX3BhKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgbWNhbV92YjJfc2dfb3BzID0geworCS5xdWV1ZV9zZXR1cAkJPSBtY2FtX3ZiX3F1ZXVlX3NldHVwLAorCS5idWZfaW5pdAkJPSBtY2FtX3ZiX3NnX2J1Zl9pbml0LAorCS5idWZfcHJlcGFyZQkJPSBtY2FtX3ZiX3NnX2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUJCT0gbWNhbV92Yl9idWZfcXVldWUsCisJLmJ1Zl9maW5pc2gJCT0gbWNhbV92Yl9zZ19idWZfZmluaXNoLAorCS5idWZfY2xlYW51cAkJPSBtY2FtX3ZiX3NnX2J1Zl9jbGVhbnVwLAorCS5zdGFydF9zdHJlYW1pbmcJPSBtY2FtX3ZiX3N0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gbWNhbV92Yl9zdG9wX3N0cmVhbWluZywKKwkud2FpdF9wcmVwYXJlCQk9IG1jYW1fdmJfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAkJPSBtY2FtX3ZiX3dhaXRfZmluaXNoLAorfTsKKworI2VuZGlmIC8qIE1DQU1fTU9ERV9ETUFfU0cgKi8KKworc3RhdGljIGludCBtY2FtX3NldHVwX3ZiMihzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgdmIyX3F1ZXVlICp2cSA9ICZjYW0tPnZiX3F1ZXVlOworCisJbWVtc2V0KHZxLCAwLCBzaXplb2YoKnZxKSk7CisJdnEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJdnEtPmRydl9wcml2ID0gY2FtOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmJ1ZmZlcnMpOworCXN3aXRjaCAoY2FtLT5idWZmZXJfbW9kZSkgeworCWNhc2UgQl9ETUFfY29udGlnOgorI2lmZGVmIE1DQU1fTU9ERV9ETUFfQ09OVElHCisJCXZxLT5vcHMgPSAmbWNhbV92YjJfb3BzOworCQl2cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CisJCWNhbS0+dmJfYWxsb2NfY3R4ID0gdmIyX2RtYV9jb250aWdfaW5pdF9jdHgoY2FtLT5kZXYpOworCQl2cS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9VU0VSUFRSOworCQljYW0tPmRtYV9zZXR1cCA9IG1jYW1fY3Rscl9kbWFfY29udGlnOworCQljYW0tPmZyYW1lX2NvbXBsZXRlID0gbWNhbV9kbWFfY29udGlnX2RvbmU7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBCX0RNQV9zZzoKKyNpZmRlZiBNQ0FNX01PREVfRE1BX1NHCisJCXZxLT5vcHMgPSAmbWNhbV92YjJfc2dfb3BzOworCQl2cS0+bWVtX29wcyA9ICZ2YjJfZG1hX3NnX21lbW9wczsKKwkJdnEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUjsKKwkJY2FtLT5kbWFfc2V0dXAgPSBtY2FtX2N0bHJfZG1hX3NnOworCQljYW0tPmZyYW1lX2NvbXBsZXRlID0gbWNhbV9kbWFfc2dfZG9uZTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIEJfdm1hbGxvYzoKKyNpZmRlZiBNQ0FNX01PREVfVk1BTExPQworCQl0YXNrbGV0X2luaXQoJmNhbS0+c190YXNrbGV0LCBtY2FtX2ZyYW1lX3Rhc2tsZXQsCisJCQkJKHVuc2lnbmVkIGxvbmcpIGNhbSk7CisJCXZxLT5vcHMgPSAmbWNhbV92YjJfb3BzOworCQl2cS0+bWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7CisJCXZxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IG1jYW1fdmJfYnVmZmVyKTsKKwkJdnEtPmlvX21vZGVzID0gVkIyX01NQVA7CisJCWNhbS0+ZG1hX3NldHVwID0gbWNhbV9jdGxyX2RtYV92bWFsbG9jOworCQljYW0tPmZyYW1lX2NvbXBsZXRlID0gbWNhbV92bWFsbG9jX2RvbmU7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCXJldHVybiB2YjJfcXVldWVfaW5pdCh2cSk7Cit9CisKK3N0YXRpYyB2b2lkIG1jYW1fY2xlYW51cF92YjIoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJdmIyX3F1ZXVlX3JlbGVhc2UoJmNhbS0+dmJfcXVldWUpOworI2lmZGVmIE1DQU1fTU9ERV9ETUFfQ09OVElHCisJaWYgKGNhbS0+YnVmZmVyX21vZGUgPT0gQl9ETUFfY29udGlnKQorCQl2YjJfZG1hX2NvbnRpZ19jbGVhbnVwX2N0eChjYW0tPnZiX2FsbG9jX2N0eCk7CisjZW5kaWYKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVGhlIGxvbmcgbGlzdCBvZiBWNEwyIGlvY3RsKCkgb3BlcmF0aW9ucy4KKyAqLworCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSB2YjJfc3RyZWFtb24oJmNhbS0+dmJfcXVldWUsIHR5cGUpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSB2YjJfc3RyZWFtb2ZmKCZjYW0tPnZiX3F1ZXVlLCB0eXBlKTsKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gdmIyX3JlcWJ1ZnMoJmNhbS0+dmJfcXVldWUsIHJlcSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gdmIyX3F1ZXJ5YnVmKCZjYW0tPnZiX3F1ZXVlLCBidWYpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHZiMl9xYnVmKCZjYW0tPnZiX3F1ZXVlLCBidWYpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSB2YjJfZHFidWYoJmNhbS0+dmJfcXVldWUsIGJ1ZiwgZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgcXVlcnljdHJsLCBxYyk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19jdHJsLCBjdHJsKTsKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJtYXJ2ZWxsX2NjaWMiKTsKKwlzdHJjcHkoY2FwLT5jYXJkLCAibWFydmVsbF9jY2ljIik7CisJY2FwLT52ZXJzaW9uID0gMTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQlWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLAorCQl2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCit7CisJaWYgKGZtdC0+aW5kZXggPj0gTl9NQ0FNX0ZNVFMpCisJCXJldHVybiAtRUlOVkFMOworCXN0cmxjcHkoZm10LT5kZXNjcmlwdGlvbiwgbWNhbV9mb3JtYXRzW2ZtdC0+aW5kZXhdLmRlc2MsCisJCQlzaXplb2YoZm10LT5kZXNjcmlwdGlvbikpOworCWZtdC0+cGl4ZWxmb3JtYXQgPSBtY2FtX2Zvcm1hdHNbZm10LT5pbmRleF0ucGl4ZWxmb3JtYXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHByaXY7CisJc3RydWN0IG1jYW1fZm9ybWF0X3N0cnVjdCAqZjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZm10LT5mbXQucGl4OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWJ1c19mbXQ7CisJaW50IHJldDsKKworCWYgPSBtY2FtX2ZpbmRfZm9ybWF0KHBpeC0+cGl4ZWxmb3JtYXQpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSBmLT5waXhlbGZvcm1hdDsKKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJm1idXNfZm10LCBwaXgsIGYtPm1idXNfY29kZSk7CisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCB0cnlfbWJ1c19mbXQsICZtYnVzX2ZtdCk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeCwgJm1idXNfZm10KTsKKwlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGggKiBmLT5icHA7CisJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqIHBpeC0+Ynl0ZXNwZXJsaW5lOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCXN0cnVjdCBtY2FtX2Zvcm1hdF9zdHJ1Y3QgKmY7CisJaW50IHJldDsKKworCS8qCisJICogQ2FuJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGRldmljZSBpcyBub3QgaWRsZQorCSAqIEFsc28gY2FuJ3QgaWYgdGhlcmUgYXJlIHN0cmVhbWluZyBidWZmZXJzIGluIHBsYWNlLgorCSAqLworCWlmIChjYW0tPnN0YXRlICE9IFNfSURMRSB8fCBjYW0tPnZiX3F1ZXVlLm51bV9idWZmZXJzID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWYgPSBtY2FtX2ZpbmRfZm9ybWF0KGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgZm9ybWF0dGluZyB3b3JrcyBpbiBwcmluY2lwbGUuCisJICovCisJcmV0ID0gbWNhbV92aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbHAsIHByaXYsIGZtdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIE5vdyB3ZSBzdGFydCB0byBjaGFuZ2UgdGhpbmdzIGZvciByZWFsLCBzbyBsZXQncyBkbyBpdAorCSAqIHVuZGVyIGxvY2suCisJICovCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwljYW0tPnBpeF9mb3JtYXQgPSBmbXQtPmZtdC5waXg7CisJY2FtLT5tYnVzX2NvZGUgPSBmLT5tYnVzX2NvZGU7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGFwcHJvcHJpYXRlIERNQSBidWZmZXJzLgorCSAqLworCWlmIChjYW0tPmJ1ZmZlcl9tb2RlID09IEJfdm1hbGxvYykgeworCQlyZXQgPSBtY2FtX2NoZWNrX2RtYV9idWZmZXJzKGNhbSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisJbWNhbV9zZXRfY29uZmlnX25lZWRlZChjYW0sIDEpOworCXJldCA9IDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gb3VyIHN0b3JlZCBub3Rpb24gb2YgaG93IHRoZSBjYW1lcmEgaXMvc2hvdWxkIGJlIGNvbmZpZ3VyZWQuCisgKiBUaGUgVjRsMiBzcGVjIHdhbnRzIHVzIHRvIGJlIHNtYXJ0ZXIsIGFuZCBhY3R1YWxseSBnZXQgdGhpcyBmcm9tCisgKiB0aGUgY2FtZXJhIChhbmQgbm90IG1lc3Mgd2l0aCBpdCBhdCBvcGVuIHRpbWUpLiAgU29tZWRheS4KKyAqLworc3RhdGljIGludCBtY2FtX3ZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCisJZi0+Zm10LnBpeCA9IGNhbS0+cGl4X2Zvcm1hdDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIG9ubHkgaGF2ZSBvbmUgaW5wdXQgLSB0aGUgc2Vuc29yIC0gc28gbWluaW1pemUgdGhlIG5vbnNlbnNlIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgbWNhbV92aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0KQoreworCWlmIChpbnB1dC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnB1dC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJaW5wdXQtPnN0ZCA9IFY0TDJfU1REX0FMTDsgLyogTm90IHN1cmUgd2hhdCBzaG91bGQgZ28gaGVyZSAqLworCXN0cmNweShpbnB1dC0+bmFtZSwgIkNhbWVyYSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZyb20gdml2aS5jICovCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqYSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEcvU19QQVJNLiAgTW9zdCBvZiB0aGlzIGlzIGRvbmUgYnkgdGhlIHNlbnNvciwgYnV0IHdlIGFyZQorICogdGhlIGxldmVsIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgcmVhZCBidWZmZXJzLgorICovCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGdfcGFybSwgcGFybXMpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfcGFybSwgcGFybXMpOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICpjYW0gPSBwcml2OworCisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7CisJCWNoaXAtPmlkZW50ID0gY2FtLT5jaGlwX2lkOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKK30KKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpzaXplcykKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgZW51bV9mcmFtZXNpemVzLCBzaXplcyk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWNhbV92aWRpb2NfZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmludGVydmFsKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gcHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBlbnVtX2ZyYW1laW50ZXJ2YWxzLCBpbnRlcnZhbCk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG1jYW1fdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gcHJpdjsKKworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpIHsKKwkJcmVnLT52YWwgPSBtY2FtX3JlZ19yZWFkKGNhbSwgcmVnLT5yZWcpOworCQlyZWctPnNpemUgPSA0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKK30KKworc3RhdGljIGludCBtY2FtX3ZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IHByaXY7CisKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKSB7CisJCW1jYW1fcmVnX3dyaXRlKGNhbSwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBtY2FtX3Y0bF9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IG1jYW1fdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IG1jYW1fdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJPSBtY2FtX3ZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0gbWNhbV92aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJPSBtY2FtX3ZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9pbnB1dAk9IG1jYW1fdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0CQk9IG1jYW1fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IG1jYW1fdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19zX3N0ZAkJPSBtY2FtX3ZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3JlcWJ1ZnMJCT0gbWNhbV92aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCT0gbWNhbV92aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQk9IG1jYW1fdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJPSBtY2FtX3ZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uCT0gbWNhbV92aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJPSBtY2FtX3ZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19xdWVyeWN0cmwJPSBtY2FtX3ZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwJCT0gbWNhbV92aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IG1jYW1fdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX2dfcGFybQkJPSBtY2FtX3ZpZGlvY19nX3Bhcm0sCisJLnZpZGlvY19zX3Bhcm0JCT0gbWNhbV92aWRpb2Nfc19wYXJtLAorCS52aWRpb2NfZW51bV9mcmFtZXNpemVzID0gbWNhbV92aWRpb2NfZW51bV9mcmFtZXNpemVzLAorCS52aWRpb2NfZW51bV9mcmFtZWludGVydmFscyA9IG1jYW1fdmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMsCisJLnZpZGlvY19nX2NoaXBfaWRlbnQJPSBtY2FtX3ZpZGlvY19nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3Rlcgk9IG1jYW1fdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyCT0gbWNhbV92aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIE91ciB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIGludCBtY2FtX3Y0bF9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKKwlpbnQgcmV0ID0gMDsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKKworCWZyYW1lcyA9IHNpbmdsZXMgPSBkZWxpdmVyZWQgPSAwOworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJaWYgKGNhbS0+dXNlcnMgPT0gMCkgeworCQlyZXQgPSBtY2FtX3NldHVwX3ZiMihjYW0pOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCW1jYW1fY3Rscl9wb3dlcl91cChjYW0pOworCQlfX21jYW1fY2FtX3Jlc2V0KGNhbSk7CisJCW1jYW1fc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAxKTsKKwl9CisJKGNhbS0+dXNlcnMpKys7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBtY2FtX3Y0bF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJY2FtX2VycihjYW0sICJSZWxlYXNlLCAlZCBmcmFtZXMsICVkIHNpbmdsZXMsICVkIGRlbGl2ZXJlZFxuIiwgZnJhbWVzLAorCQkJc2luZ2xlcywgZGVsaXZlcmVkKTsKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCShjYW0tPnVzZXJzKS0tOworCWlmIChmaWxwID09IGNhbS0+b3duZXIpIHsKKwkJbWNhbV9jdGxyX3N0b3BfZG1hKGNhbSk7CisJCWNhbS0+b3duZXIgPSBOVUxMOworCX0KKwlpZiAoY2FtLT51c2VycyA9PSAwKSB7CisJCW1jYW1fY2xlYW51cF92YjIoY2FtKTsKKwkJbWNhbV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKKwkJaWYgKGNhbS0+YnVmZmVyX21vZGUgPT0gQl92bWFsbG9jICYmIGFsbG9jX2J1ZnNfYXRfcmVhZCkKKwkJCW1jYW1fZnJlZV9kbWFfYnVmcyhjYW0pOworCX0KKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1jYW1fdjRsX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCisJCWNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHZiMl9yZWFkKCZjYW0tPnZiX3F1ZXVlLCBidWZmZXIsIGxlbiwgcG9zLAorCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKKworc3RhdGljIHVuc2lnbmVkIGludCBtY2FtX3Y0bF9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLAorCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQoreworCXN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldCA9IHZiMl9wb2xsKCZjYW0tPnZiX3F1ZXVlLCBmaWxwLCBwdCk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBtY2FtX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKKwlyZXQgPSB2YjJfbW1hcCgmY2FtLT52Yl9xdWV1ZSwgdm1hKTsKKwltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWNhbV92NGxfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IG1jYW1fdjRsX29wZW4sCisJLnJlbGVhc2UgPSBtY2FtX3Y0bF9yZWxlYXNlLAorCS5yZWFkID0gbWNhbV92NGxfcmVhZCwKKwkucG9sbCA9IG1jYW1fdjRsX3BvbGwsCisJLm1tYXAgPSBtY2FtX3Y0bF9tbWFwLAorCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwKK307CisKKworLyoKKyAqIFRoaXMgdGVtcGxhdGUgZGV2aWNlIGhvbGRzIGFsbCBvZiB0aG9zZSB2NGwyIG1ldGhvZHM7IHdlCisgKiBjbG9uZSBpdCBmb3Igc3BlY2lmaWMgcmVhbCBkZXZpY2VzLgorICovCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtY2FtX3Y0bF90ZW1wbGF0ZSA9IHsKKwkubmFtZSA9ICJtY2FtIiwKKwkudHZub3JtcyA9IFY0TDJfU1REX05UU0NfTSwKKwkuY3VycmVudF9ub3JtID0gVjRMMl9TVERfTlRTQ19NLCAgLyogbWFrZSBtcGxheWVyIGhhcHB5ICovCisKKwkuZm9wcyA9ICZtY2FtX3Y0bF9mb3BzLAorCS5pb2N0bF9vcHMgPSAmbWNhbV92NGxfaW9jdGxfb3BzLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogSW50ZXJydXB0IGhhbmRsZXIgc3R1ZmYKKyAqLworc3RhdGljIHZvaWQgbWNhbV9mcmFtZV9jb21wbGV0ZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSwgaW50IGZyYW1lKQoreworCS8qCisJICogQmFzaWMgZnJhbWUgaG91c2VrZWVwaW5nLgorCSAqLworCXNldF9iaXQoZnJhbWUsICZjYW0tPmZsYWdzKTsKKwljbGVhcl9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpOworCWNhbS0+bmV4dF9idWYgPSBmcmFtZTsKKwljYW0tPmJ1Zl9zZXFbZnJhbWVdID0gKysoY2FtLT5zZXF1ZW5jZSk7CisJZnJhbWVzKys7CisJLyoKKwkgKiAiVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIgorCSAqLworCWlmIChjYW0tPnN0YXRlICE9IFNfU1RSRUFNSU5HKQorCQlyZXR1cm47CisJLyoKKwkgKiBQcm9jZXNzIHRoZSBmcmFtZSBhbmQgc2V0IHVwIHRoZSBuZXh0IG9uZS4KKwkgKi8KKwljYW0tPmZyYW1lX2NvbXBsZXRlKGNhbSwgZnJhbWUpOworfQorCisKKy8qCisgKiBUaGUgaW50ZXJydXB0IGhhbmRsZXI7IHRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGZyb20gdGhlCisgKiBwbGF0Zm9ybSBpcnEgaGFuZGxlciB3aXRoIHRoZSBsb2NrIGhlbGQuCisgKi8KK2ludCBtY2NpY19pcnEoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0sIHVuc2lnbmVkIGludCBpcnFzKQoreworCXVuc2lnbmVkIGludCBmcmFtZSwgaGFuZGxlZCA9IDA7CisKKwltY2FtX3JlZ193cml0ZShjYW0sIFJFR19JUlFTVEFULCBGUkFNRUlSUVMpOyAvKiBDbGVhcidlbSBhbGwgKi8KKwkvKgorCSAqIEhhbmRsZSBhbnkgZnJhbWUgY29tcGxldGlvbnMuICBUaGVyZSByZWFsbHkgc2hvdWxkCisJICogbm90IGJlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UsIG9yIHdlIGhhdmUgZmFsbGVuCisJICogZmFyIGJlaGluZC4KKwkgKgorCSAqIFdoZW4gcnVubmluZyBpbiBTL0cgbW9kZSwgdGhlIGZyYW1lIG51bWJlciBsYWNrcyBhbnkKKwkgKiByZWFsIG1lYW5pbmcgLSB0aGVyZSdzIG9ubHkgb25lIGRlc2NyaXB0b3IgYXJyYXkgLSBidXQKKwkgKiB0aGUgY29udHJvbGxlciBzdGlsbCBwaWNrcyBhIGRpZmZlcmVudCBvbmUgdG8gc2lnbmFsCisJICogZWFjaCB0aW1lLgorCSAqLworCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IGNhbS0+bmJ1ZnM7IGZyYW1lKyspCisJCWlmIChpcnFzICYgKElSUV9FT0YwIDw8IGZyYW1lKSkgeworCQkJbWNhbV9mcmFtZV9jb21wbGV0ZShjYW0sIGZyYW1lKTsKKwkJCWhhbmRsZWQgPSAxOworCQl9CisJLyoKKwkgKiBJZiBhIGZyYW1lIHN0YXJ0cywgbm90ZSB0aGF0IHdlIGhhdmUgRE1BIGFjdGl2ZS4gIFRoaXMKKwkgKiBjb2RlIGFzc3VtZXMgdGhhdCB3ZSB3b24ndCBnZXQgbXVsdGlwbGUgZnJhbWUgaW50ZXJydXB0cworCSAqIGF0IG9uY2U7IG1heSB3YW50IHRvIHJldGhpbmsgdGhhdC4KKwkgKi8KKwlpZiAoaXJxcyAmIChJUlFfU09GMCB8IElSUV9TT0YxIHwgSVJRX1NPRjIpKSB7CisJCXNldF9iaXQoQ0ZfRE1BX0FDVElWRSwgJmNhbS0+ZmxhZ3MpOworCQloYW5kbGVkID0gMTsKKwkJaWYgKGNhbS0+YnVmZmVyX21vZGUgPT0gQl9ETUFfc2cpCisJCQltY2FtX2N0bHJfc3RvcChjYW0pOworCX0KKwlyZXR1cm4gaGFuZGxlZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFJlZ2lzdHJhdGlvbiBhbmQgc3VjaC4KKyAqLworc3RhdGljIHN0cnVjdCBvdjc2NzBfY29uZmlnIHNlbnNvcl9jZmcgPSB7CisJLyoKKwkgKiBFeGNsdWRlIFFDSUYgbW9kZSwgYmVjYXVzZSBpdCBvbmx5IGNhcHR1cmVzIGEgdGlueSBwb3J0aW9uCisJICogb2YgdGhlIHNlbnNvciBGT1YKKwkgKi8KKwkubWluX3dpZHRoID0gMzIwLAorCS5taW5faGVpZ2h0ID0gMjQwLAorfTsKKworCitpbnQgbWNjaWNfcmVnaXN0ZXIoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIG92NzY3MF9pbmZvID0geworCQkudHlwZSA9ICJvdjc2NzAiLAorCQkuYWRkciA9IDB4NDIgPj4gMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2Vuc29yX2NmZywKKwl9OworCWludCByZXQ7CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIG1vZGUuCisJICovCisJaWYgKGJ1ZmZlcl9tb2RlID49IDApCisJCWNhbS0+YnVmZmVyX21vZGUgPSBidWZmZXJfbW9kZTsKKwlpZiAoY2FtLT5idWZmZXJfbW9kZSA9PSBCX0RNQV9zZyAmJgorCQkJY2FtLT5jaGlwX2lkID09IFY0TDJfSURFTlRfQ0FGRSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1hcnZlbGwtY2FtOiBDYWZlIGNhbid0IGRvIFMvRyBJL08sICIKKwkJCSJhdHRlbXB0aW5nIHZtYWxsb2MgbW9kZSBpbnN0ZWFkXG4iKTsKKwkJY2FtLT5idWZmZXJfbW9kZSA9IEJfdm1hbGxvYzsKKwl9CisJaWYgKCFtY2FtX2J1ZmZlcl9tb2RlX3N1cHBvcnRlZChjYW0tPmJ1ZmZlcl9tb2RlKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1hcnZlbGwtY2FtOiBidWZmZXIgbW9kZSAlZCB1bnN1cHBvcnRlZFxuIiwKKwkJCQljYW0tPmJ1ZmZlcl9tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qCisJICogUmVnaXN0ZXIgd2l0aCBWNEwKKwkgKi8KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihjYW0tPmRldiwgJmNhbS0+djRsMl9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9pbml0KCZjYW0tPnNfbXV0ZXgpOworCWNhbS0+c3RhdGUgPSBTX05PVFJFQURZOworCW1jYW1fc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAxKTsKKwljYW0tPnBpeF9mb3JtYXQgPSBtY2FtX2RlZl9waXhfZm9ybWF0OworCWNhbS0+bWJ1c19jb2RlID0gbWNhbV9kZWZfbWJ1c19jb2RlOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmJ1ZmZlcnMpOworCW1jYW1fY3Rscl9pbml0KGNhbSk7CisKKwkvKgorCSAqIFRyeSB0byBmaW5kIHRoZSBzZW5zb3IuCisJICovCisJc2Vuc29yX2NmZy5jbG9ja19zcGVlZCA9IGNhbS0+Y2xvY2tfc3BlZWQ7CisJc2Vuc29yX2NmZy51c2Vfc21idXMgPSBjYW0tPnVzZV9zbWJ1czsKKwljYW0tPnNlbnNvcl9hZGRyID0gb3Y3NjcwX2luZm8uYWRkcjsKKwljYW0tPnNlbnNvciA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmNhbS0+djRsMl9kZXYsCisJCQljYW0tPmkyY19hZGFwdGVyLCAmb3Y3NjcwX2luZm8sIE5VTEwpOworCWlmIChjYW0tPnNlbnNvciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJfQorCisJcmV0ID0gbWNhbV9jYW1faW5pdChjYW0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJLyoKKwkgKiBHZXQgdGhlIHY0bDIgc2V0dXAgZG9uZS4KKwkgKi8KKwltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOworCWNhbS0+dmRldiA9IG1jYW1fdjRsX3RlbXBsYXRlOworCWNhbS0+dmRldi5kZWJ1ZyA9IDA7CisJY2FtLT52ZGV2LnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOworCisJLyoKKwkgKiBJZiBzbyByZXF1ZXN0ZWQsIHRyeSB0byBnZXQgb3VyIERNQSBidWZmZXJzIG5vdy4KKwkgKi8KKwlpZiAoY2FtLT5idWZmZXJfbW9kZSA9PSBCX3ZtYWxsb2MgJiYgIWFsbG9jX2J1ZnNfYXRfcmVhZCkgeworCQlpZiAobWNhbV9hbGxvY19kbWFfYnVmcyhjYW0sIDEpKQorCQkJY2FtX3dhcm4oY2FtLCAiVW5hYmxlIHRvIGFsbG9jIERNQSBidWZmZXJzIGF0IGxvYWQiCisJCQkJCSIgd2lsbCB0cnkgYWdhaW4gbGF0ZXIuIik7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXJldHVybiByZXQ7CitvdXRfdW5yZWdpc3RlcjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgbWNjaWNfc2h1dGRvd24oc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pCit7CisJLyoKKwkgKiBJZiB3ZSBoYXZlIG5vIHVzZXJzIChhbmQgd2UgcmVhbGx5LCByZWFsbHkgc2hvdWxkIGhhdmUgbm8KKwkgKiB1c2VycykgdGhlIGRldmljZSB3aWxsIGFscmVhZHkgYmUgcG93ZXJlZCBkb3duLiAgVHJ5aW5nIHRvCisJICogdGFrZSBpdCBkb3duIGFnYWluIHdpbGwgd2VkZ2UgdGhlIG1hY2hpbmUsIHdoaWNoIGlzIGZyb3duZWQKKwkgKiB1cG9uLgorCSAqLworCWlmIChjYW0tPnVzZXJzID4gMCkgeworCQljYW1fd2FybihjYW0sICJSZW1vdmluZyBhIGRldmljZSB3aXRoIHVzZXJzIVxuIik7CisJCW1jYW1fY3Rscl9wb3dlcl9kb3duKGNhbSk7CisJfQorCXZiMl9xdWV1ZV9yZWxlYXNlKCZjYW0tPnZiX3F1ZXVlKTsKKwlpZiAoY2FtLT5idWZmZXJfbW9kZSA9PSBCX3ZtYWxsb2MpCisJCW1jYW1fZnJlZV9kbWFfYnVmcyhjYW0pOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOworfQorCisvKgorICogUG93ZXIgbWFuYWdlbWVudAorICovCisjaWZkZWYgQ09ORklHX1BNCisKK3ZvaWQgbWNjaWNfc3VzcGVuZChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwllbnVtIG1jYW1fc3RhdGUgY3N0YXRlID0gY2FtLT5zdGF0ZTsKKworCW1jYW1fY3Rscl9zdG9wX2RtYShjYW0pOworCW1jYW1fY3Rscl9wb3dlcl9kb3duKGNhbSk7CisJY2FtLT5zdGF0ZSA9IGNzdGF0ZTsKK30KKworaW50IG1jY2ljX3Jlc3VtZShzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CisJaWYgKGNhbS0+dXNlcnMgPiAwKSB7CisJCW1jYW1fY3Rscl9wb3dlcl91cChjYW0pOworCQlfX21jYW1fY2FtX3Jlc2V0KGNhbSk7CisJfSBlbHNlIHsKKwkJbWNhbV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCisJc2V0X2JpdChDRl9DT05GSUdfTkVFREVELCAmY2FtLT5mbGFncyk7CisJaWYgKGNhbS0+c3RhdGUgPT0gU19TVFJFQU1JTkcpCisJCXJldCA9IG1jYW1fcmVhZF9zZXR1cChjYW0pOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL21jYW0tY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzIwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuaApAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIE1hcnZlbGwgY2FtZXJhIGNvcmUgc3RydWN0dXJlcy4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBKb25hdGhhbiBDb3JiZXQgY29yYmV0QGx3bi5uZXQKKyAqLworI2lmbmRlZiBfTUNBTV9DT1JFX0gKKyNkZWZpbmUgX01DQU1fQ09SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+CisKKy8qCisgKiBDcmVhdGUgb3VyIG93biBzeW1ib2xzIGZvciB0aGUgc3VwcG9ydGVkIGJ1ZmZlciBtb2RlcywgYnV0LCBmb3Igbm93LAorICogYmFzZSB0aGVtIGVudGlyZWx5IG9uIHdoaWNoIHZpZGVvYnVmMiBvcHRpb25zIGhhdmUgYmVlbiBzZWxlY3RlZC4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPQlVGMl9WTUFMTE9DKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT0JVRjJfVk1BTExPQ19NT0RVTEUpCisjZGVmaW5lIE1DQU1fTU9ERV9WTUFMTE9DIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9CVUYyX0RNQV9DT05USUcpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPQlVGMl9ETUFfQ09OVElHX01PRFVMRSkKKyNkZWZpbmUgTUNBTV9NT0RFX0RNQV9DT05USUcgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT0JVRjJfRE1BX1NHKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT0JVRjJfRE1BX1NHX01PRFVMRSkKKyNkZWZpbmUgTUNBTV9NT0RFX0RNQV9TRyAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1DQU1fTU9ERV9WTUFMTE9DKSAmJiAhZGVmaW5lZChNQ0FNX01PREVfRE1BX0NPTlRJRykgJiYgXAorCSFkZWZpbmVkKE1DQU1fTU9ERV9ETUFfU0cpCisjZXJyb3IgT25lIG9mIHRoZSB2aWRlb2J1ZiBidWZmZXIgbW9kZXMgbXVzdCBiZSBzZWxlY3RlZCBpbiB0aGUgY29uZmlnCisjZW5kaWYKKworCitlbnVtIG1jYW1fc3RhdGUgeworCVNfTk9UUkVBRFksCS8qIE5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlTX0lETEUsCQkvKiBKdXN0IGhhbmdpbmcgYXJvdW5kICovCisJU19GTEFLRUQsCS8qIFNvbWUgc29ydCBvZiBwcm9ibGVtICovCisJU19TVFJFQU1JTkcsCS8qIFN0cmVhbWluZyBkYXRhICovCisJU19CVUZXQUlUCS8qIHN0cmVhbWluZyByZXF1ZXN0ZWQgYnV0IG5vIGJ1ZmZlcnMgeWV0ICovCit9OworI2RlZmluZSBNQVhfRE1BX0JVRlMgMworCisvKgorICogRGlmZmVyZW50IHBsYXRmb3JtcyB3b3JrIGJlc3Qgd2l0aCBkaWZmZXJlbnQgYnVmZmVyIG1vZGVzLCBzbyB3ZQorICogbGV0IHRoZSBwbGF0Zm9ybSBwaWNrLgorICovCitlbnVtIG1jYW1fYnVmZmVyX21vZGUgeworCUJfdm1hbGxvYyA9IDAsCisJQl9ETUFfY29udGlnID0gMSwKKwlCX0RNQV9zZyA9IDIKK307CisKKy8qCisgKiBJcyBhIGdpdmVuIGJ1ZmZlciBtb2RlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbj8KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWNhbV9idWZmZXJfbW9kZV9zdXBwb3J0ZWQoZW51bSBtY2FtX2J1ZmZlcl9tb2RlIG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisjaWZkZWYgTUNBTV9NT0RFX1ZNQUxMT0MKKwljYXNlIEJfdm1hbGxvYzoKKyNlbmRpZgorI2lmZGVmIE1DQU1fTU9ERV9ETUFfQ09OVElHCisJY2FzZSBCX0RNQV9jb250aWc6CisjZW5kaWYKKyNpZmRlZiBNQ0FNX01PREVfRE1BX1NHCisJY2FzZSBCX0RNQV9zZzoKKyNlbmRpZgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKworLyoKKyAqIEEgZGVzY3JpcHRpb24gb2Ygb25lIG9mIG91ciBkZXZpY2VzLgorICogTG9ja2luZzogY29udHJvbGxlZCBieSBzX211dGV4LiAgQ2VydGFpbiBmaWVsZHMsIGhvd2V2ZXIsIHJlcXVpcmUKKyAqICAgICAgICAgIHRoZSBkZXZfbG9jayBzcGlubG9jazsgdGhleSBhcmUgbWFya2VkIGFzIHN1Y2ggYnkgY29tbWVudHMuCisgKiAgICAgICAgICBkZXZfbG9jayBpcyBhbHNvIHJlcXVpcmVkIGZvciBhY2Nlc3MgdG8gZGV2aWNlIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IG1jYW1fY2FtZXJhIHsKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBwbGF0Zm9ybSBjb2RlIHByaW9yIHRvCisJICogY2FsbGluZyBtY2FtX3JlZ2lzdGVyKCkuCisJICovCisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcHRlcjsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnJlZ3M7CisJc3BpbmxvY2tfdCBkZXZfbG9jazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7IC8qIEZvciBtZXNzYWdlcywgZG1hIGFsbG9jICovCisJdW5zaWduZWQgaW50IGNoaXBfaWQ7CisJc2hvcnQgaW50IGNsb2NrX3NwZWVkOwkvKiBTZW5zb3IgY2xvY2sgc3BlZWQsIGRlZmF1bHQgMzAgKi8KKwlzaG9ydCBpbnQgdXNlX3NtYnVzOwkvKiBTTUJVUyBvciBzdHJhaWdodCBJMmM/ICovCisJZW51bSBtY2FtX2J1ZmZlcl9tb2RlIGJ1ZmZlcl9tb2RlOworCS8qCisJICogQ2FsbGJhY2tzIGZyb20gdGhlIGNvcmUgdG8gdGhlIHBsYXRmb3JtIGNvZGUuCisJICovCisJdm9pZCAoKnBsYXRfcG93ZXJfdXApIChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSk7CisJdm9pZCAoKnBsYXRfcG93ZXJfZG93bikgKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKTsKKworCS8qCisJICogRXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIHByaXZhdGUgdG8gdGhlIG1jYW0gY29yZSBhbmQKKwkgKiBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgdGhlIHBsYXRmb3JtIGNvZGUuCisJICovCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCWVudW0gbWNhbV9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogQnVmZmVyIHN0YXR1cywgbWFpbmx5IChkZXZfbG9jaykgKi8KKwlpbnQgdXNlcnM7CQkJLyogSG93IG1hbnkgb3BlbiBGRHMgKi8KKwlzdHJ1Y3QgZmlsZSAqb3duZXI7CQkvKiBXaG8gaGFzIGRhdGEgYWNjZXNzICh2NGwyKSAqLworCisJLyoKKwkgKiBTdWJzeXN0ZW0gc3RydWN0dXJlcy4KKwkgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3I7CisJdW5zaWduZWQgc2hvcnQgc2Vuc29yX2FkZHI7CisKKwkvKiBWaWRlb2J1ZjIgc3R1ZmYgKi8KKwlzdHJ1Y3QgdmIyX3F1ZXVlIHZiX3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQgYnVmZmVyczsJLyogQXZhaWxhYmxlIGZyYW1lcyAqLworCisJdW5zaWduZWQgaW50IG5idWZzOwkJLyogSG93IG1hbnkgYXJlIGFsbG9jJ2QgKi8KKwlpbnQgbmV4dF9idWY7CQkJLyogTmV4dCB0byBjb25zdW1lIChkZXZfbG9jaykgKi8KKworCS8qIERNQSBidWZmZXJzIC0gdm1hbGxvYyBtb2RlICovCisjaWZkZWYgTUNBTV9NT0RFX1ZNQUxMT0MKKwl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zaXplOwkvKiBhbGxvY2F0ZWQgc2l6ZSAqLworCXZvaWQgKmRtYV9idWZzW01BWF9ETUFfQlVGU107CS8qIEludGVybmFsIGJ1ZmZlciBhZGRyZXNzZXMgKi8KKwlkbWFfYWRkcl90IGRtYV9oYW5kbGVzW01BWF9ETUFfQlVGU107IC8qIEJ1ZmZlciBidXMgYWRkcmVzc2VzICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNfdGFza2xldDsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsJCS8qIEZyYW1lIHNlcXVlbmNlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBidWZfc2VxW01BWF9ETUFfQlVGU107IC8qIFNlcXVlbmNlIGZvciBpbmRpdmlkdWFsIGJ1ZnMgKi8KKworCS8qIERNQSBidWZmZXJzIC0gRE1BIG1vZGVzICovCisJc3RydWN0IG1jYW1fdmJfYnVmZmVyICp2Yl9idWZzW01BWF9ETUFfQlVGU107CisJc3RydWN0IHZiMl9hbGxvY19jdHggKnZiX2FsbG9jX2N0eDsKKworCS8qIE1vZGUtc3BlY2lmaWMgb3BzLCBzZXQgYXQgb3BlbiB0aW1lICovCisJdm9pZCAoKmRtYV9zZXR1cCkoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0pOworCXZvaWQgKCpmcmFtZV9jb21wbGV0ZSkoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZSk7CisKKwkvKiBDdXJyZW50IG9wZXJhdGluZyBwYXJhbWV0ZXJzICovCisJdTMyIHNlbnNvcl90eXBlOwkJLyogQ3VycmVudGx5IG92NzY3MCBvbmx5ICovCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXhfZm9ybWF0OworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBtYnVzX2NvZGU7CisKKwkvKiBMb2NrcyAqLworCXN0cnVjdCBtdXRleCBzX211dGV4OyAvKiBBY2Nlc3MgdG8gdGhpcyBzdHJ1Y3R1cmUgKi8KK307CisKKworLyoKKyAqIFJlZ2lzdGVyIEkvTyBmdW5jdGlvbnMuICBUaGVzZSBhcmUgaGVyZSBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBjb2RlCisgKiBtYXkgbGVnaXRpbWF0ZWx5IG5lZWQgdG8gbWVzcyB3aXRoIHRoZSByZWdpc3RlciBzcGFjZS4KKyAqLworLyoKKyAqIERldmljZSByZWdpc3RlciBJL08KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1jYW1fcmVnX3dyaXRlKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCB1bnNpZ25lZCBpbnQgcmVnLAorCQl1bnNpZ25lZCBpbnQgdmFsKQoreworCWlvd3JpdGUzMih2YWwsIGNhbS0+cmVncyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG1jYW1fcmVnX3JlYWQoc3RydWN0IG1jYW1fY2FtZXJhICpjYW0sCisJCXVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDMyKGNhbS0+cmVncyArIHJlZyk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIG1jYW1fcmVnX3dyaXRlX21hc2soc3RydWN0IG1jYW1fY2FtZXJhICpjYW0sIHVuc2lnbmVkIGludCByZWcsCisJCXVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBtYXNrKQoreworCXVuc2lnbmVkIGludCB2ID0gbWNhbV9yZWdfcmVhZChjYW0sIHJlZyk7CisKKwl2ID0gKHYgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJbWNhbV9yZWdfd3JpdGUoY2FtLCByZWcsIHYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhbV9yZWdfY2xlYXJfYml0KHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLAorCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCW1jYW1fcmVnX3dyaXRlX21hc2soY2FtLCByZWcsIDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2FtX3JlZ19zZXRfYml0KHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLAorCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCW1jYW1fcmVnX3dyaXRlX21hc2soY2FtLCByZWcsIHZhbCwgdmFsKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgdXNlIGJ5IHBsYXRmb3JtIGNvZGUuCisgKi8KK2ludCBtY2NpY19yZWdpc3RlcihzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSk7CitpbnQgbWNjaWNfaXJxKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtLCB1bnNpZ25lZCBpbnQgaXJxcyk7Cit2b2lkIG1jY2ljX3NodXRkb3duKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKTsKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgbWNjaWNfc3VzcGVuZChzdHJ1Y3QgbWNhbV9jYW1lcmEgKmNhbSk7CitpbnQgbWNjaWNfcmVzdW1lKHN0cnVjdCBtY2FtX2NhbWVyYSAqY2FtKTsKKyNlbmRpZgorCisvKgorICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBtODhhbHAwMSBjYW1lcmEgaW50ZXJmYWNlLiAgT2Zmc2V0cyBpbiBieXRlcworICogYXMgZ2l2ZW4gaW4gdGhlIHNwZWMuCisgKi8KKyNkZWZpbmUgUkVHX1kwQkFSCTB4MDAKKyNkZWZpbmUgUkVHX1kxQkFSCTB4MDQKKyNkZWZpbmUgUkVHX1kyQkFSCTB4MDgKKy8qIC4uLiAqLworCisjZGVmaW5lIFJFR19JTUdQSVRDSAkweDI0CS8qIEltYWdlIHBpdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lICAgSU1HUF9ZUF9TSEZUCSAgMgkJLyogWSBwaXRjaCBwYXJhbXMgKi8KKyNkZWZpbmUgICBJTUdQX1lQX01BU0sJICAweDAwMDAzZmZjCS8qIFkgcGl0Y2ggZmllbGQgKi8KKyNkZWZpbmUJICBJTUdQX1VWUF9TSEZUCSAgMTgJCS8qIFVWIHBpdGNoIChwbGFuYXIpICovCisjZGVmaW5lICAgSU1HUF9VVlBfTUFTSyAgIDB4M2ZmYzAwMDAKKyNkZWZpbmUgUkVHX0lSUVNUQVRSQVcJMHgyOAkvKiBSQVcgSVJRIFN0YXR1cyAqLworI2RlZmluZSAgIElSUV9FT0YwCSAgMHgwMDAwMDAwMQkvKiBFbmQgb2YgZnJhbWUgMCAqLworI2RlZmluZSAgIElSUV9FT0YxCSAgMHgwMDAwMDAwMgkvKiBFbmQgb2YgZnJhbWUgMSAqLworI2RlZmluZSAgIElSUV9FT0YyCSAgMHgwMDAwMDAwNAkvKiBFbmQgb2YgZnJhbWUgMiAqLworI2RlZmluZSAgIElSUV9TT0YwCSAgMHgwMDAwMDAwOAkvKiBTdGFydCBvZiBmcmFtZSAwICovCisjZGVmaW5lICAgSVJRX1NPRjEJICAweDAwMDAwMDEwCS8qIFN0YXJ0IG9mIGZyYW1lIDEgKi8KKyNkZWZpbmUgICBJUlFfU09GMgkgIDB4MDAwMDAwMjAJLyogU3RhcnQgb2YgZnJhbWUgMiAqLworI2RlZmluZSAgIElSUV9PVkVSRkxPVwkgIDB4MDAwMDAwNDAJLyogRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSAgIElSUV9UV1NJVwkgIDB4MDAwMTAwMDAJLyogVFdTSSAoc21idXMpIHdyaXRlICovCisjZGVmaW5lICAgSVJRX1RXU0lSCSAgMHgwMDAyMDAwMAkvKiBUV1NJIHJlYWQgKi8KKyNkZWZpbmUgICBJUlFfVFdTSUUJICAweDAwMDQwMDAwCS8qIFRXU0kgZXJyb3IgKi8KKyNkZWZpbmUgICBUV1NJSVJRUyAoSVJRX1RXU0lXfElSUV9UV1NJUnxJUlFfVFdTSUUpCisjZGVmaW5lICAgRlJBTUVJUlFTIChJUlFfRU9GMHxJUlFfRU9GMXxJUlFfRU9GMnxJUlFfU09GMHxJUlFfU09GMXxJUlFfU09GMikKKyNkZWZpbmUgICBBTExJUlFTIChUV1NJSVJRU3xGUkFNRUlSUVN8SVJRX09WRVJGTE9XKQorI2RlZmluZSBSRUdfSVJRTUFTSwkweDJjCS8qIElSUSBtYXNrIC0gc2FtZSBiaXRzIGFzIElSUVNUQVQgKi8KKyNkZWZpbmUgUkVHX0lSUVNUQVQJMHgzMAkvKiBJUlEgc3RhdHVzIC8gY2xlYXIgKi8KKworI2RlZmluZSBSRUdfSU1HU0laRQkweDM0CS8qIEltYWdlIHNpemUgKi8KKyNkZWZpbmUgIElNR1NaX1ZfTUFTSwkgIDB4MWZmZjAwMDAKKyNkZWZpbmUgIElNR1NaX1ZfU0hJRlQJICAxNgorI2RlZmluZQkgSU1HU1pfSF9NQVNLCSAgMHgwMDAwM2ZmZgorI2RlZmluZSBSRUdfSU1HT0ZGU0VUCTB4MzgJLyogSU1hZ2Ugb2Zmc2V0ICovCisKKyNkZWZpbmUgUkVHX0NUUkwwCTB4M2MJLyogQ29udHJvbCAwICovCisjZGVmaW5lICAgQzBfRU5BQkxFCSAgMHgwMDAwMDAwMQkvKiBNYWtlcyB0aGUgd2hvbGUgdGhpbmcgZ28gKi8KKworLyogTWFzayBmb3IgYWxsIHRoZSBmb3JtYXQgYml0cyAqLworI2RlZmluZSAgIEMwX0RGX01BU0sJICAweDAwZmZmZmZjICAgIC8qIEJpdHMgMi0yMyAqLworCisvKiBSR0Igb3JkZXJpbmcgKi8KKyNkZWZpbmUJICBDMF9SR0I0X1JHQlgJICAweDAwMDAwMDAwCisjZGVmaW5lCSAgQzBfUkdCNF9YUkdCCSAgMHgwMDAwMDAwNAorI2RlZmluZQkgIEMwX1JHQjRfQkdSWAkgIDB4MDAwMDAwMDgKKyNkZWZpbmUJICBDMF9SR0I0X1hCR1IJICAweDAwMDAwMDBjCisjZGVmaW5lCSAgQzBfUkdCNV9SR0dCCSAgMHgwMDAwMDAwMAorI2RlZmluZQkgIEMwX1JHQjVfR1JCRwkgIDB4MDAwMDAwMDQKKyNkZWZpbmUJICBDMF9SR0I1X0dCUkcJICAweDAwMDAwMDA4CisjZGVmaW5lCSAgQzBfUkdCNV9CR0dSCSAgMHgwMDAwMDAwYworCisvKiBTcGVjIGhhcyB0d28gZmllbGRzIGZvciBESU4gYW5kIERPVVQsIGJ1dCB0aGV5IG11c3QgbWF0Y2gsIHNvCisgICBjb21iaW5lIHRoZW0gaGVyZS4gKi8KKyNkZWZpbmUJICBDMF9ERl9ZVVYJICAweDAwMDAwMDAwCS8qIERhdGEgaXMgWVVWCSAgICAqLworI2RlZmluZQkgIEMwX0RGX1JHQgkgIDB4MDAwMDAwYTAJLyogLi4uIFJHQgkJICAgICovCisjZGVmaW5lCSAgQzBfREZfQkFZRVIJICAweDAwMDAwMTQwCS8qIC4uLiBCYXllcgkJICAgICovCisvKiA4LTgtOCBtdXN0IGJlIG1pc3NpbmcgZnJvbSB0aGUgYmVsb3cgLSBhc2sgKi8KKyNkZWZpbmUJICBDMF9SR0JGXzU2NQkgIDB4MDAwMDAwMDAKKyNkZWZpbmUJICBDMF9SR0JGXzQ0NAkgIDB4MDAwMDA4MDAKKyNkZWZpbmUJICBDMF9SR0JfQkdSCSAgMHgwMDAwMTAwMAkvKiBCbHVlIGNvbWVzIGZpcnN0ICovCisjZGVmaW5lCSAgQzBfWVVWX1BMQU5BUgkgIDB4MDAwMDAwMDAJLyogWVVWIDQyMiBwbGFuYXIgZm9ybWF0ICovCisjZGVmaW5lCSAgQzBfWVVWX1BBQ0tFRAkgIDB4MDAwMDgwMDAJLyogWVVWIDQyMiBwYWNrZWQJKi8KKyNkZWZpbmUJICBDMF9ZVVZfNDIwUEwJICAweDAwMDBhMDAwCS8qIFlVViA0MjAgcGxhbmFyCSovCisvKiBUaGluayB0aGF0IDQyMCBwYWNrZWQgbXVzdCBiZSAxMTEgLSBhc2sgKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1lVWVYJICAweDAwMDAwMDAwCS8qIFkxQ2JZMENyCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWVZZVQkgIDB4MDAwMTAwMDAJLyogWTFDclkwQ2IJCSovCisjZGVmaW5lCSAgQzBfWVVWRV9WWVVZCSAgMHgwMDAyMDAwMAkvKiBDclkxQ2JZMAkJKi8KKyNkZWZpbmUJICBDMF9ZVVZFX1VZVlkJICAweDAwMDMwMDAwCS8qIENiWTFDclkwCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWFlVVgkgIDB4MDAwMDAwMDAJLyogNDIwOiAuWVVWCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWFlWVQkgIDB4MDAwMTAwMDAJLyogNDIwOiAuWVZVCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWFVWWQkgIDB4MDAwMjAwMDAJLyogNDIwOiAuVVZZCQkqLworI2RlZmluZQkgIEMwX1lVVkVfWFZVWQkgIDB4MDAwMzAwMDAJLyogNDIwOiAuVlVZCQkqLworLyogQmF5ZXIgYml0cyAxOCwxOSBpZiBuZWVkZWQgKi8KKyNkZWZpbmUJICBDMF9IUE9MX0xPVwkgIDB4MDEwMDAwMDAJLyogSFNZTkMgcG9sYXJpdHkgYWN0aXZlIGxvdyAqLworI2RlZmluZQkgIEMwX1ZQT0xfTE9XCSAgMHgwMjAwMDAwMAkvKiBWU1lOQyBwb2xhcml0eSBhY3RpdmUgbG93ICovCisjZGVmaW5lCSAgQzBfVkNMS19MT1cJICAweDA0MDAwMDAwCS8qIFZDTEsgb24gZmFsbGluZyBlZGdlICovCisjZGVmaW5lCSAgQzBfRE9XTlNDQUxFCSAgMHgwODAwMDAwMAkvKiBFbmFibGUgZG93bnNjYWxlciAqLworI2RlZmluZQkgIEMwX1NJRk1fTUFTSwkgIDB4YzAwMDAwMDAJLyogU0lGIG1vZGUgYml0cyAqLworI2RlZmluZQkgIEMwX1NJRl9IVlNZTkMJICAweDAwMDAwMDAwCS8qIFVzZSBIL1ZTWU5DICovCisjZGVmaW5lCSAgQ09fU09GX05PU1lOQwkgIDB4NDAwMDAwMDAJLyogVXNlIGluYmFuZCBhY3RpdmUgc2lnbmFsaW5nICovCisKKy8qIEJpdHMgYmVsb3cgQzFfNDQ0QUxQSEEgYXJlIG5vdCBwcmVzZW50IGluIENhZmUgKi8KKyNkZWZpbmUgUkVHX0NUUkwxCTB4NDAJLyogQ29udHJvbCAxICovCisjZGVmaW5lCSAgQzFfQ0xLR0FURQkgIDB4MDAwMDAwMDEJLyogU2Vuc29yIGNsb2NrIGdhdGUgKi8KKyNkZWZpbmUgICBDMV9ERVNDX0VOQQkgIDB4MDAwMDAxMDAJLyogRE1BIGRlc2NyaXB0b3IgZW5hYmxlICovCisjZGVmaW5lICAgQzFfREVTQ18zV09SRCAgIDB4MDAwMDAyMDAJLyogVGhyZWUtd29yZCBkZXNjcmlwdG9ycyB1c2VkICovCisjZGVmaW5lCSAgQzFfNDQ0QUxQSEEJICAweDAwZjAwMDAwCS8qIEFscGhhIGZpZWxkIGluIFJHQjQ0NCAqLworI2RlZmluZQkgIEMxX0FMUEhBX1NIRlQJICAyMAorI2RlZmluZQkgIEMxX0RNQUIzMgkgIDB4MDAwMDAwMDAJLyogMzItYnl0ZSBETUEgYnVyc3QgKi8KKyNkZWZpbmUJICBDMV9ETUFCMTYJICAweDAyMDAwMDAwCS8qIDE2LWJ5dGUgRE1BIGJ1cnN0ICovCisjZGVmaW5lCSAgQzFfRE1BQjY0CSAgMHgwNDAwMDAwMAkvKiA2NC1ieXRlIERNQSBidXJzdCAqLworI2RlZmluZQkgIEMxX0RNQUJfTUFTSwkgIDB4MDYwMDAwMDAKKyNkZWZpbmUJICBDMV9UV09CVUZTCSAgMHgwODAwMDAwMAkvKiBVc2Ugb25seSB0d28gRE1BIGJ1ZmZlcnMgKi8KKyNkZWZpbmUJICBDMV9QV1JEV04JICAweDEwMDAwMDAwCS8qIFBvd2VyIGRvd24gKi8KKworI2RlZmluZSBSRUdfQ0xLQ1RSTAkweDg4CS8qIENsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUJICBDTEtfRElWX01BU0sJICAweDAwMDBmZmZmCS8qIFVwcGVyIGJpdHMgUlcgInJlc2VydmVkIiAqLworCisvKiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBDYWZlLW9ubHkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1VCQVIJMHhjNAkvKiBVcHBlciBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKworLyogQXJtYWRhIDYxMCBETUEgZGVzY3JpcHRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJUkVHX0RNQV9ERVNDX1kJMHgyMDAKKyNkZWZpbmUJUkVHX0RNQV9ERVNDX1UJMHgyMDQKKyNkZWZpbmUJUkVHX0RNQV9ERVNDX1YJMHgyMDgKKyNkZWZpbmUgUkVHX0RFU0NfTEVOX1kJMHgyMGMJLyogTGVuZ3RocyBhcmUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUJUkVHX0RFU0NfTEVOX1UJMHgyMTAKKyNkZWZpbmUgUkVHX0RFU0NfTEVOX1YJMHgyMTQKKworLyoKKyAqIFVzZWZ1bCBzdHVmZiB0aGF0IHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdoZXJlIGdsb2JhbC4KKyAqLworI2RlZmluZSBWR0FfV0lEVEgJNjQwCisjZGVmaW5lIFZHQV9IRUlHSFQJNDgwCisKKyNlbmRpZiAvKiBfTUNBTV9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL21tcC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWFydmVsbC1jY2ljL21tcC1kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmI3NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tYXJ2ZWxsLWNjaWMvbW1wLWRyaXZlci5jCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogU3VwcG9ydCBmb3IgdGhlIGNhbWVyYSBkZXZpY2UgZm91bmQgb24gTWFydmVsbCBNTVAgcHJvY2Vzc29yczsga25vd24KKyAqIHRvIHdvcmsgd2l0aCB0aGUgQXJtYWRhIDYxMCBhcyB1c2VkIGluIHRoZSBPTFBDIDEuNzUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAyMDExIEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CisgKgorICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL21tcC1jYW1lcmEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgIm1jYW0tY29yZS5oIgorCitNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgbW1wX2NhbWVyYSB7CisJdm9pZCAqcG93ZXJfcmVnczsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBtY2FtX2NhbWVyYSBtY2FtOworCXN0cnVjdCBsaXN0X2hlYWQgZGV2bGlzdDsKKwlpbnQgaXJxOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW1wX2NhbWVyYSAqbWNhbV90b19jYW0oc3RydWN0IG1jYW1fY2FtZXJhICptY2FtKQoreworCXJldHVybiBjb250YWluZXJfb2YobWNhbSwgc3RydWN0IG1tcF9jYW1lcmEsIG1jYW0pOworfQorCisvKgorICogQSBzaWxseSBsaXR0bGUgaW5mcmFzdHJ1Y3R1cmUgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2Ygb3VyIGRldmljZXMuCisgKiBDaGFuY2VzIGFyZSB0aGF0IHdlIHdpbGwgbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZW0sIGJ1dAorICogdGhlIEFybWFkYSA2MTAgKmRvZXMqIGhhdmUgdHdvIGNvbnRyb2xsZXJzLi4uCisgKi8KKworc3RhdGljIExJU1RfSEVBRChtbXBjYW1fZGV2aWNlcyk7CitzdGF0aWMgc3RydWN0IG11dGV4IG1tcGNhbV9kZXZpY2VzX2xvY2s7CisKK3N0YXRpYyB2b2lkIG1tcGNhbV9hZGRfZGV2aWNlKHN0cnVjdCBtbXBfY2FtZXJhICpjYW0pCit7CisJbXV0ZXhfbG9jaygmbW1wY2FtX2RldmljZXNfbG9jayk7CisJbGlzdF9hZGQoJmNhbS0+ZGV2bGlzdCwgJm1tcGNhbV9kZXZpY2VzKTsKKwltdXRleF91bmxvY2soJm1tcGNhbV9kZXZpY2VzX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtbXBjYW1fcmVtb3ZlX2RldmljZShzdHJ1Y3QgbW1wX2NhbWVyYSAqY2FtKQoreworCW11dGV4X2xvY2soJm1tcGNhbV9kZXZpY2VzX2xvY2spOworCWxpc3RfZGVsKCZjYW0tPmRldmxpc3QpOworCW11dGV4X3VubG9jaygmbW1wY2FtX2RldmljZXNfbG9jayk7Cit9CisKKy8qCisgKiBQbGF0Zm9ybSBkZXYgcmVtb3ZlIHBhc3NlcyB1cyBhIHBsYXRmb3JtX2RldmljZSwgYW5kIHRoZXJlJ3MKKyAqIG5vIGhhbmR5IHVudXNlZCBkcnZkYXRhIHRvIHN0YXNoIGEgYmFja3BvaW50ZXIgaW4uICBTbyBqdXN0CisgKiBkaWcgaXQgb3V0IG9mIG91ciBsaXN0LgorICovCitzdGF0aWMgc3RydWN0IG1tcF9jYW1lcmEgKm1tcGNhbV9maW5kX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbXBfY2FtZXJhICpjYW07CisKKwltdXRleF9sb2NrKCZtbXBjYW1fZGV2aWNlc19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbSwgJm1tcGNhbV9kZXZpY2VzLCBkZXZsaXN0KSB7CisJCWlmIChjYW0tPnBkZXYgPT0gcGRldikgeworCQkJbXV0ZXhfdW5sb2NrKCZtbXBjYW1fZGV2aWNlc19sb2NrKTsKKwkJCXJldHVybiBjYW07CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZtbXBjYW1fZGV2aWNlc19sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KKworCisKKworLyoKKyAqIFBvd2VyLXJlbGF0ZWQgcmVnaXN0ZXJzOyB0aGlzIGFsbW9zdCBjZXJ0YWlubHkgYmVsb25ncworICogc29tZXdoZXJlIGVsc2UuCisgKgorICogQVJNQURBIDYxMCByZWdpc3RlciBtYW51YWwsIHNlYyA3LjIuMSwgcDE4NDIuCisgKi8KKyNkZWZpbmUgQ1BVX1NVQlNZU19QTVVfQkFTRQkweGQ0MjgyODAwCisjZGVmaW5lIFJFR19DQ0lDX0RDR0NSCQkweDI4CS8qIENDSUMgZHluIGNsb2NrIGdhdGUgY3RybCByZWcgKi8KKyNkZWZpbmUgUkVHX0NDSUNfQ1JDUgkJMHg1MAkvKiBDQ0lDIGNsayByZXNldCBjdHJsIHJlZwkqLworCisvKgorICogUG93ZXIgY29udHJvbC4KKyAqLworc3RhdGljIHZvaWQgbW1wY2FtX3Bvd2VyX3VwKHN0cnVjdCBtY2FtX2NhbWVyYSAqbWNhbSkKK3sKKwlzdHJ1Y3QgbW1wX2NhbWVyYSAqY2FtID0gbWNhbV90b19jYW0obWNhbSk7CisJc3RydWN0IG1tcF9jYW1lcmFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisvKgorICogVHVybiBvbiBwb3dlciBhbmQgY2xvY2tzIHRvIHRoZSBjb250cm9sbGVyLgorICovCisJaW93cml0ZTMyKDB4M2YsIGNhbS0+cG93ZXJfcmVncyArIFJFR19DQ0lDX0RDR0NSKTsKKwlpb3dyaXRlMzIoMHgzODA1YiwgY2FtLT5wb3dlcl9yZWdzICsgUkVHX0NDSUNfQ1JDUik7CisJbWRlbGF5KDEpOworLyoKKyAqIFByb3ZpZGUgcG93ZXIgdG8gdGhlIHNlbnNvci4KKyAqLworCW1jYW1fcmVnX3dyaXRlKG1jYW0sIFJFR19DTEtDVFJMLCAweDYwMDAwMDAyKTsKKwlwZGF0YSA9IGNhbS0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPnNlbnNvcl9wb3dlcl9ncGlvLCAxKTsKKwltZGVsYXkoNSk7CisJbWNhbV9yZWdfY2xlYXJfYml0KG1jYW0sIFJFR19DVFJMMSwgMHgxMDAwMDAwMCk7CisJZ3Bpb19zZXRfdmFsdWUocGRhdGEtPnNlbnNvcl9yZXNldF9ncGlvLCAwKTsgLyogcmVzZXQgaXMgYWN0aXZlIGxvdyAqLworCW1kZWxheSg1KTsKKwlncGlvX3NldF92YWx1ZShwZGF0YS0+c2Vuc29yX3Jlc2V0X2dwaW8sIDEpOyAvKiByZXNldCBpcyBhY3RpdmUgbG93ICovCisJbWRlbGF5KDUpOworfQorCitzdGF0aWMgdm9pZCBtbXBjYW1fcG93ZXJfZG93bihzdHJ1Y3QgbWNhbV9jYW1lcmEgKm1jYW0pCit7CisJc3RydWN0IG1tcF9jYW1lcmEgKmNhbSA9IG1jYW1fdG9fY2FtKG1jYW0pOworCXN0cnVjdCBtbXBfY2FtZXJhX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworLyoKKyAqIFR1cm4gb2ZmIGNsb2NrcyBhbmQgc2V0IHJlc2V0IGxpbmVzCisgKi8KKwlpb3dyaXRlMzIoMCwgY2FtLT5wb3dlcl9yZWdzICsgUkVHX0NDSUNfRENHQ1IpOworCWlvd3JpdGUzMigwLCBjYW0tPnBvd2VyX3JlZ3MgKyBSRUdfQ0NJQ19DUkNSKTsKKy8qCisgKiBTaHV0IGRvd24gdGhlIHNlbnNvci4KKyAqLworCXBkYXRhID0gY2FtLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlncGlvX3NldF92YWx1ZShwZGF0YS0+c2Vuc29yX3Bvd2VyX2dwaW8sIDApOworCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5zZW5zb3JfcmVzZXRfZ3BpbywgMCk7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IG1tcGNhbV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWNhbV9jYW1lcmEgKm1jYW0gPSBkYXRhOworCXVuc2lnbmVkIGludCBpcnFzLCBoYW5kbGVkOworCisJc3Bpbl9sb2NrKCZtY2FtLT5kZXZfbG9jayk7CisJaXJxcyA9IG1jYW1fcmVnX3JlYWQobWNhbSwgUkVHX0lSUVNUQVQpOworCWhhbmRsZWQgPSBtY2NpY19pcnEobWNhbSwgaXJxcyk7CisJc3Bpbl91bmxvY2soJm1jYW0tPmRldl9sb2NrKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworCitzdGF0aWMgaW50IG1tcGNhbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtbXBfY2FtZXJhICpjYW07CisJc3RydWN0IG1jYW1fY2FtZXJhICptY2FtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtbXBfY2FtZXJhX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CisKKwljYW0gPSBremFsbG9jKHNpemVvZigqY2FtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNhbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwljYW0tPnBkZXYgPSBwZGV2OworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmRldmxpc3QpOworCisJbWNhbSA9ICZjYW0tPm1jYW07CisJbWNhbS0+cGxhdGZvcm0gPSBNSFBfQXJtYWRhNjEwOworCW1jYW0tPnBsYXRfcG93ZXJfdXAgPSBtbXBjYW1fcG93ZXJfdXA7CisJbWNhbS0+cGxhdF9wb3dlcl9kb3duID0gbW1wY2FtX3Bvd2VyX2Rvd247CisJbWNhbS0+ZGV2ID0gJnBkZXYtPmRldjsKKwltY2FtLT51c2Vfc21idXMgPSAwOworCW1jYW0tPmNoaXBfaWQgPSBWNEwyX0lERU5UX0FSTUFEQTYxMDsKKwltY2FtLT5idWZmZXJfbW9kZSA9IEJfRE1BX3NnOworCXNwaW5fbG9ja19pbml0KCZtY2FtLT5kZXZfbG9jayk7CisJLyoKKwkgKiBHZXQgb3VyIEkvTyBtZW1vcnkuCisJICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaW9tZW0gcmVzb3VyY2UhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJbWNhbS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAobWNhbS0+cmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1NSU8gaW9yZW1hcCBmYWlsXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJLyoKKwkgKiBQb3dlci9jbG9jayBtZW1vcnkgaXMgZWxzZXdoZXJlOyBnZXQgaXQgdG9vLiAgUGVyaGFwcyB0aGlzCisJICogc2hvdWxkIHJlYWxseSBiZSBtYW5hZ2VkIG91dHNpZGUgb2YgdGhpcyBkcml2ZXI/CisJICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcG93ZXIgcmVzb3VyY2UhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5tYXAxOworCX0KKwljYW0tPnBvd2VyX3JlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGNhbS0+cG93ZXJfcmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBvd2VyIE1NSU8gaW9yZW1hcCBmYWlsXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5tYXAxOworCX0KKwkvKgorCSAqIEZpbmQgdGhlIGkyYyBhZGFwdGVyLiAgVGhpcyBhc3N1bWVzLCBvZiBjb3Vyc2UsIHRoYXQgdGhlCisJICogaTJjIGJ1cyBpcyBhbHJlYWR5IHVwIGFuZCBmdW5jdGlvbmluZy4KKwkgKi8KKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW1jYW0tPmkyY19hZGFwdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRhdGEtPmkyY19kZXZpY2UpOworCWlmIChtY2FtLT5pMmNfYWRhcHRlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGkyYyBhZGFwdGVyXG4iKTsKKwkJZ290byBvdXRfdW5tYXAyOworCX0KKwkvKgorCSAqIFNlbnNvciBHUElPIHBpbnMuCisJICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zZW5zb3JfcG93ZXJfZ3BpbywgImNhbS1wb3dlciIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IHNlbnNvciBwb3dlciBncGlvICVkIiwKKwkJCQlwZGF0YS0+c2Vuc29yX3Bvd2VyX2dwaW8pOworCQlnb3RvIG91dF91bm1hcDI7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+c2Vuc29yX3Bvd2VyX2dwaW8sIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+c2Vuc29yX3Jlc2V0X2dwaW8sICJjYW0tcmVzZXQiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGdldCBzZW5zb3IgcmVzZXQgZ3BpbyAlZCIsCisJCQkJcGRhdGEtPnNlbnNvcl9yZXNldF9ncGlvKTsKKwkJZ290byBvdXRfZ3BpbzsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5zZW5zb3JfcmVzZXRfZ3BpbywgMCk7CisJLyoKKwkgKiBQb3dlciB0aGUgZGV2aWNlIHVwIGFuZCBoYW5kIGl0IG9mZiB0byB0aGUgY29yZS4KKwkgKi8KKwltbXBjYW1fcG93ZXJfdXAobWNhbSk7CisJcmV0ID0gbWNjaWNfcmVnaXN0ZXIobWNhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ3BpbzI7CisJLyoKKwkgKiBGaW5hbGx5LCBzZXQgdXAgb3VyIElSUSBub3cgdGhhdCB0aGUgY29yZSBpcyByZWFkeSB0bworCSAqIGRlYWwgd2l0aCBpdC4KKwkgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCX0KKwljYW0tPmlycSA9IHJlcy0+c3RhcnQ7CisJcmV0ID0gcmVxdWVzdF9pcnEoY2FtLT5pcnEsIG1tcGNhbV9pcnEsIElSUUZfU0hBUkVELAorCQkJIm1tcC1jYW1lcmEiLCBtY2FtKTsKKwlpZiAocmV0ID09IDApIHsKKwkJbW1wY2FtX2FkZF9kZXZpY2UoY2FtKTsKKwkJcmV0dXJuIDA7CisJfQorCitvdXRfdW5yZWdpc3RlcjoKKwltY2NpY19zaHV0ZG93bihtY2FtKTsKK291dF9ncGlvMjoKKwltbXBjYW1fcG93ZXJfZG93bihtY2FtKTsKKwlncGlvX2ZyZWUocGRhdGEtPnNlbnNvcl9yZXNldF9ncGlvKTsKK291dF9ncGlvOgorCWdwaW9fZnJlZShwZGF0YS0+c2Vuc29yX3Bvd2VyX2dwaW8pOworb3V0X3VubWFwMjoKKwlpb3VubWFwKGNhbS0+cG93ZXJfcmVncyk7CitvdXRfdW5tYXAxOgorCWlvdW5tYXAobWNhbS0+cmVncyk7CitvdXRfZnJlZToKKwlrZnJlZShjYW0pOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBtbXBjYW1fcmVtb3ZlKHN0cnVjdCBtbXBfY2FtZXJhICpjYW0pCit7CisJc3RydWN0IG1jYW1fY2FtZXJhICptY2FtID0gJmNhbS0+bWNhbTsKKwlzdHJ1Y3QgbW1wX2NhbWVyYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCW1tcGNhbV9yZW1vdmVfZGV2aWNlKGNhbSk7CisJZnJlZV9pcnEoY2FtLT5pcnEsIG1jYW0pOworCW1jY2ljX3NodXRkb3duKG1jYW0pOworCW1tcGNhbV9wb3dlcl9kb3duKG1jYW0pOworCXBkYXRhID0gY2FtLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlncGlvX2ZyZWUocGRhdGEtPnNlbnNvcl9yZXNldF9ncGlvKTsKKwlncGlvX2ZyZWUocGRhdGEtPnNlbnNvcl9wb3dlcl9ncGlvKTsKKwlpb3VubWFwKGNhbS0+cG93ZXJfcmVncyk7CisJaW91bm1hcChtY2FtLT5yZWdzKTsKKwlrZnJlZShjYW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tcGNhbV9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbW1wX2NhbWVyYSAqY2FtID0gbW1wY2FtX2ZpbmRfZGV2aWNlKHBkZXYpOworCisJaWYgKGNhbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gbW1wY2FtX3JlbW92ZShjYW0pOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1tcGNhbV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1tcGNhbV9wcm9iZSwKKwkucmVtb3ZlCQk9IG1tcGNhbV9wbGF0Zm9ybV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibW1wLWNhbWVyYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFCisJfQorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBtbXBjYW1faW5pdF9tb2R1bGUodm9pZCkKK3sKKwltdXRleF9pbml0KCZtbXBjYW1fZGV2aWNlc19sb2NrKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtbXBjYW1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1tcGNhbV9leGl0X21vZHVsZSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtbXBjYW1fZHJpdmVyKTsKKwkvKgorCSAqIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCkgc2hvdWxkIGhhdmUgZW1wdGllZCB0aGUgbGlzdAorCSAqLworCWlmICghbGlzdF9lbXB0eSgmbW1wY2FtX2RldmljZXMpKQorCQlwcmludGsoS0VSTl9FUlIgIm1tcF9jYW1lcmEgbGVhdmluZyBkZXZpY2VzIGJlaGluZFxuIik7Cit9CisKK21vZHVsZV9pbml0KG1tcGNhbV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChtbXBjYW1fZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZW0ybWVtX3Rlc3RkZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWVtMm1lbV90ZXN0ZGV2LmMKaW5kZXggYjAzZDc0ZS4uMTY2YmY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZW0ybWVtX3Rlc3RkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21lbTJtZW1fdGVzdGRldi5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzUsNyArMzQsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0dWFsIGRldmljZSBmb3IgbWVtMm1lbSBmcmFtZXdvcmsgdGVzdGluZyIpOwogTU9EVUxFX0FVVEhPUigiUGF3ZWwgT3NjaWFrLCA8cGF3ZWxAb3NjaWFrLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQorTU9EVUxFX1ZFUlNJT04oIjAuMS4xIik7CiAKICNkZWZpbmUgTUlOX1cgMzIKICNkZWZpbmUgTUlOX0ggMzIKQEAgLTM4MCw3ICszNzksNiBAQAogCXN0cm5jcHkoY2FwLT5kcml2ZXIsIE1FTTJNRU1fTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSAtIDEpOwogCXN0cm5jcHkoY2FwLT5jYXJkLCBNRU0yTUVNX05BTUUsIHNpemVvZihjYXAtPmNhcmQpIC0gMSk7CiAJY2FwLT5idXNfaW5mb1swXSA9IDA7Ci0JY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMSwgMCk7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVklERU9fT1VUUFVUCiAJCQkgIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCmluZGV4IGUyYmJkOGMuLjRkYTljY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCkBAIC02MDMsMTMgKzYwMyw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgotCSAqIFNvIHRoaXMgZW50aXJlIHRlc3QgaXMgY29tcGxldGVseSByZWR1bmRhbnQuCi0JICovCi0JaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKLQkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCi0JCXJldHVybiAtRU5PREVWOworCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuICovCisJQlVHX09OKCFpY2QtPnBhcmVudCB8fAorCSAgICAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKTsKIAogCS8qIEVuYWJsZSB0aGUgY2hpcCAqLwogCWRhdGEgPSByZWdfd3JpdGUoY2xpZW50LCBNVDlNMDAxX0NISVBfRU5BQkxFLCAxKTsKQEAgLTY3NSw4ICs2NzEsOCBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyByZW1vdmVkOiAlcCwgJXBcbiIsCi0JCWljZC0+ZGV2LnBhcmVudCwgaWNkLT52ZGV2KTsKKwlkZXZfZGJnKGljZC0+cGRldiwgIlZpZGVvIHJlbW92ZWQ6ICVwLCAlcFxuIiwKKwkJaWNkLT5wYXJlbnQsIGljZC0+dmRldik7CiAJaWYgKGljbC0+ZnJlZV9idXMpCiAJCWljbC0+ZnJlZV9idXMoaWNsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKaW5kZXggZWJlYmVkOS4uYTM1N2FhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKQEAgLTYzLDYgKzYzLDEyIEBACiAjZGVmaW5lIE1UOU0xMTFfUkVTRVRfUkVTVEFSVF9GUkFNRQkoMSA8PCAxKQogI2RlZmluZSBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUJKDEgPDwgMCkKIAorI2RlZmluZSBNVDlNMTExX1JNX0ZVTExfUE9XRVJfUkQJKDAgPDwgMTApCisjZGVmaW5lIE1UOU0xMTFfUk1fTE9XX1BPV0VSX1JECQkoMSA8PCAxMCkKKyNkZWZpbmUgTVQ5TTExMV9STV9DT0xfU0tJUF80WAkJKDEgPDwgNSkKKyNkZWZpbmUgTVQ5TTExMV9STV9ST1dfU0tJUF80WAkJKDEgPDwgNCkKKyNkZWZpbmUgTVQ5TTExMV9STV9DT0xfU0tJUF8yWAkJKDEgPDwgMykKKyNkZWZpbmUgTVQ5TTExMV9STV9ST1dfU0tJUF8yWAkJKDEgPDwgMikKICNkZWZpbmUgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMJCSgxIDw8IDEpCiAjZGVmaW5lIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTCQkoMSA8PCAwKQogI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9SRVNUQVJUCSgxIDw8IDE1KQpAQCAtOTUsNyArMTAxLDggQEAKIAogI2RlZmluZSBNVDlNMTExX09QTU9ERV9BVVRPRVhQT19FTgkoMSA8PCAxNCkKICNkZWZpbmUgTVQ5TTExMV9PUE1PREVfQVVUT1dISVRFQkFMX0VOCSgxIDw8IDEpCi0KKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfRkxJUF9CQVlFUl9DT0wJKDEgPDwgOSkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfRkxJUF9CQVlFUl9ST1cJKDEgPDwgOCkKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUFJPQ0VTU0VEX0JBWUVSCSgxIDw8IDE0KQogI2RlZmluZSBNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQCSgxIDw8IDEwKQogI2RlZmluZSBNVDlNMTExX09VVEZNVF9JTlZfUElYX0NMT0NLCSgxIDw8IDkpCkBAIC0xMTAsOSArMTE3LDggQEAKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfVFNUX1JBTVBfRlJBTUUJKDMgPDwgNCkKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU0hJRlRfM19VUAkoMSA8PCAzKQogI2RlZmluZSBNVDlNMTExX09VVEZNVF9BVkdfQ0hST01BCSgxIDw8IDIpCi0jZGVmaW5lIE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZCSgxIDw8IDEpCi0jZGVmaW5lIE1UOU0xMTFfT1VURk1UX1NXQVBfUkdCX0VWRU4JKDEgPDwgMSkKLSNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DYl9DcgkoMSA8PCAwKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWV9SR0JfRVZFTgkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyX1JHQl9SX0IJKDEgPDwgMCkKIAogLyoKICAqIENhbWVyYSBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3NlcyAoMHgyMDAuLjB4MmZmIG5vdCBpbXBsZW1lbnRlZCkKQEAgLTEyMiw2ICsxMjgsOCBAQAogI2RlZmluZSByZWdfd3JpdGUocmVnLCB2YWwpIG10OW0xMTFfcmVnX3dyaXRlKGNsaWVudCwgTVQ5TTExMV8jI3JlZywgKHZhbCkpCiAjZGVmaW5lIHJlZ19zZXQocmVnLCB2YWwpIG10OW0xMTFfcmVnX3NldChjbGllbnQsIE1UOU0xMTFfIyNyZWcsICh2YWwpKQogI2RlZmluZSByZWdfY2xlYXIocmVnLCB2YWwpIG10OW0xMTFfcmVnX2NsZWFyKGNsaWVudCwgTVQ5TTExMV8jI3JlZywgKHZhbCkpCisjZGVmaW5lIHJlZ19tYXNrKHJlZywgdmFsLCBtYXNrKSBtdDltMTExX3JlZ19tYXNrKGNsaWVudCwgTVQ5TTExMV8jI3JlZywgXAorCQkodmFsKSwgKG1hc2spKQogCiAjZGVmaW5lIE1UOU0xMTFfTUlOX0RBUktfUk9XUwk4CiAjZGVmaW5lIE1UOU0xMTFfTUlOX0RBUktfQ09MUwkyNgpAQCAtMTUzLDcgKzE2MSwxMSBAQAogCXtWNEwyX01CVVNfRk1UX1VZVlk4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAogCXtWNEwyX01CVVNfRk1UX1ZZVVk4XzJYOCwgVjRMMl9DT0xPUlNQQUNFX0pQRUd9LAogCXtWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfTEUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7VjRMMl9NQlVTX0ZNVF9SR0I1NTVfMlg4X1BBREhJX0JFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCiAJe1Y0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAorCXtWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7VjRMMl9NQlVTX0ZNVF9CR1I1NjVfMlg4X0xFLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQn0sCisJe1Y0TDJfTUJVU19GTVRfQkdSNTY1XzJYOF9CRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogCXtWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsIFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKIAl7VjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRSwgVjRMMl9DT0xPUlNQQUNFX1NSR0J9LAogfTsKQEAgLTE2OSw2ICsxODEsOCBAQAogCQkJICogZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0OworCXN0cnVjdCBtdXRleCBwb3dlcl9sb2NrOyAvKiBsb2NrIHRvIHByb3RlY3QgcG93ZXJfY291bnQgKi8KKwlpbnQgcG93ZXJfY291bnQ7CiAJY29uc3Qgc3RydWN0IG10OW0xMTFfZGF0YWZtdCAqZm10OwogCXVuc2lnbmVkIGludCBnYWluOwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwpAQCAtMTc2LDEwICsxOTAsNiBAQAogCXVuc2lnbmVkIGludCBwb3dlcmVkOjE7CiAJdW5zaWduZWQgaW50IGhmbGlwOjE7CiAJdW5zaWduZWQgaW50IHZmbGlwOjE7Ci0JdW5zaWduZWQgaW50IHN3YXBfcmdiX2V2ZW5fb2RkOjE7Ci0JdW5zaWduZWQgaW50IHN3YXBfcmdiX3JlZF9ibHVlOjE7Ci0JdW5zaWduZWQgaW50IHN3YXBfeXV2X3lfY2hyb21hczoxOwotCXVuc2lnbmVkIGludCBzd2FwX3l1dl9jYl9jcjoxOwogCXVuc2lnbmVkIGludCBhdXRvd2hpdGViYWxhbmNlOjE7CiB9OwogCkBAIC0yNDgsMTIgKzI1OCwyNiBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBtdDltMTExX3JlZ19yZWFkKGNsaWVudCwgcmVnKTsKLQlyZXR1cm4gbXQ5bTExMV9yZWdfd3JpdGUoY2xpZW50LCByZWcsIHJldCAmIH5kYXRhKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IG10OW0xMTFfcmVnX3dyaXRlKGNsaWVudCwgcmVnLCByZXQgJiB+ZGF0YSk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9jb250ZXh0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IG10OW0xMTFfcmVnX21hc2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTE2IHJlZywKKwkJCSAgICBjb25zdCB1MTYgZGF0YSwgY29uc3QgdTE2IG1hc2spCit7CisJaW50IHJldDsKKworCXJldCA9IG10OW0xMTFfcmVnX3JlYWQoY2xpZW50LCByZWcpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gbXQ5bTExMV9yZWdfd3JpdGUoY2xpZW50LCByZWcsIChyZXQgJiB+bWFzaykgfCBkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRleHQoc3RydWN0IG10OW0xMTEgKm10OW0xMTEsCiAJCQkgICAgICAgZW51bSBtdDltMTExX2NvbnRleHQgY3R4dCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmbXQ5bTExMS0+c3ViZGV2KTsKIAlpbnQgdmFsQiA9IE1UOU0xMTFfQ1RYVF9DVFJMX1JFU1RBUlQgfCBNVDlNMTExX0NUWFRfQ1RSTF9ERUZFQ1RDT1JfQgogCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX1JFU0laRV9CIHwgTVQ5TTExMV9DVFhUX0NUUkxfQ1RSTDJfQgogCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX0dBTU1BX0IgfCBNVDlNMTExX0NUWFRfQ1RSTF9SRUFEX01PREVfQgpAQCAtMjY3LDEwICsyOTEsMTAgQEAKIAkJcmV0dXJuIHJlZ193cml0ZShDT05URVhUX0NPTlRST0wsIHZhbEEpOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcmVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IG10OW0xMTEgKm10OW0xMTEsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOwogCWludCByZXQsIGlzX3Jhd19mb3JtYXQ7CiAJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CiAJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKQEAgLTMxMiw4MSArMzM2LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcGl4Zm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBvdXRmbXQpCitzdGF0aWMgaW50IG10OW0xMTFfZW5hYmxlKHN0cnVjdCBtdDltMTExICptdDltMTExKQogewotCWludCByZXQ7Ci0JdTE2IG1hc2sgPSBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIgfCBNVDlNMTExX09VVEZNVF9SR0IgfAotCQlNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQIHwgTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTiB8Ci0JCU1UOU0xMTFfT1VURk1UX1JHQjU2NSB8IE1UOU0xMTFfT1VURk1UX1JHQjU1NSB8Ci0JCU1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3IgfAotCQlNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWTsKLQotCXJldCA9IHJlZ19yZWFkKE9VVFBVVF9GT1JNQVRfQ1RSTDJfQSk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXQgPSByZWdfd3JpdGUoT1VUUFVUX0ZPUk1BVF9DVFJMMl9BLCAocmV0ICYgfm1hc2spIHwgb3V0Zm10KTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3JlYWQoT1VUUFVUX0ZPUk1BVF9DVFJMMl9CKTsKLQlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShPVVRQVVRfRk9STUFUX0NUUkwyX0IsIChyZXQgJiB+bWFzaykgfCBvdXRmbXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9iYXllcjgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoY2xpZW50LCBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIgfAotCQkJCSAgICBNVDlNMTExX09VVEZNVF9SR0IpOwotfQotCi1zdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X2JheWVyMTAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoY2xpZW50LCBNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQKTsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NjUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKLQlpbnQgdmFsID0gMDsKLQotCWlmIChtdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSkKLQkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7Ci0JaWYgKG10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkKQotCQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTjsKLQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTY1OwotCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NTUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKLQlpbnQgdmFsID0gMDsKLQotCWlmIChtdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSkKLQkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7Ci0JaWYgKG10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkKQotCQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTjsKLQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTU1OwotCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKLX0KLQotc3RhdGljIGludCBtdDltMTExX3NldGZtdF95dXYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKLQlpbnQgdmFsID0gMDsKLQotCWlmIChtdDltMTExLT5zd2FwX3l1dl9jYl9jcikKLQkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7Ci0JaWYgKG10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcykKLQkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZOwotCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGNsaWVudCwgdmFsKTsKLX0KLQotc3RhdGljIGludCBtdDltMTExX2VuYWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOwogCWludCByZXQ7CiAKIAlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX0NISVBfRU5BQkxFKTsKQEAgLTM5NSw4ICszNDcsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBtdDltMTExICptdDltMTExKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOwogCWludCByZXQ7CiAKIAlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUpOwpAQCAtNDI0LDExICszNzcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfbWFrZV9yZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IG10OW0xMTFfbWFrZV9yZWN0KHN0cnVjdCBtdDltMTExICptdDltMTExLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwotCiAJaWYgKG10OW0xMTEtPmZtdC0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggfHwKIAkgICAgbXQ5bTExMS0+Zm10LT5jb2RlID09IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEUpIHsKIAkJLyogQmF5ZXIgZm9ybWF0IC0gZXZlbiBzaXplIGxlbmd0aHMgKi8KQEAgLTQ0NCwxNCArMzk1LDE0IEBACiAJc29jX2NhbWVyYV9saW1pdF9zaWRlKCZyZWN0LT50b3AsICZyZWN0LT5oZWlnaHQsCiAJCSAgICAgTVQ5TTExMV9NSU5fREFSS19ST1dTLCAyLCBNVDlNMTExX01BWF9IRUlHSFQpOwogCi0JcmV0dXJuIG10OW0xMTFfc2V0dXBfcmVjdChjbGllbnQsIHJlY3QpOworCXJldHVybiBtdDltMTExX3NldHVwX3JlY3QobXQ5bTExMSwgcmVjdCk7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9zX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSBhLT5jOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG10OW0xMTEsIHN1YmRldik7CiAJaW50IHJldDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLApAQCAtNDYwLDcgKzQxMSw3IEBACiAJaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IG10OW0xMTFfbWFrZV9yZWN0KGNsaWVudCwgJnJlY3QpOworCXJldCA9IG10OW0xMTFfbWFrZV9yZWN0KG10OW0xMTEsICZyZWN0KTsKIAlpZiAoIXJldCkKIAkJbXQ5bTExMS0+cmVjdCA9IHJlY3Q7CiAJcmV0dXJuIHJldDsKQEAgLTQ2OCw4ICs0MTksNyBAQAogCiBzdGF0aWMgaW50IG10OW0xMTFfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgbXQ5bTExMSwgc3ViZGV2KTsKIAogCWEtPmMJPSBtdDltMTExLT5yZWN0OwogCWEtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CkBAIC00OTYsOCArNDQ2LDcgQEAKIHN0YXRpYyBpbnQgbXQ5bTExMV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG10OW0xMTEsIHN1YmRldik7CiAKIAltZi0+d2lkdGgJPSBtdDltMTExLT5yZWN0LndpZHRoOwogCW1mLT5oZWlnaHQJPSBtdDltMTExLT5yZWN0LmhlaWdodDsKQEAgLTUwOCw1MSArNDU3LDczIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfcGl4Zm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSwKIAkJCSAgICAgIGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOworCXUxNiBkYXRhX291dGZtdDIsIG1hc2tfb3V0Zm10MiA9IE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUiB8CisJCU1UOU0xMTFfT1VURk1UX0JZUEFTU19JRlAgfCBNVDlNMTExX09VVEZNVF9SR0IgfAorCQlNVDlNMTExX09VVEZNVF9SR0I1NjUgfCBNVDlNMTExX09VVEZNVF9SR0I1NTUgfAorCQlNVDlNMTExX09VVEZNVF9SR0I0NDR4IHwgTVQ5TTExMV9PVVRGTVRfUkdCeDQ0NCB8CisJCU1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZX1JHQl9FVkVOIHwKKwkJTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DYl9Dcl9SR0JfUl9COwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKGNvZGUpIHsKIAljYXNlIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYODoKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXI4KGNsaWVudCk7CisJCWRhdGFfb3V0Zm10MiA9IE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUiB8CisJCQlNVDlNMTExX09VVEZNVF9SR0I7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRToKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChjbGllbnQpOworCQlkYXRhX291dGZtdDIgPSBNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQIHwgTVQ5TTExMV9PVVRGTVRfUkdCOwogCQlicmVhazsKIAljYXNlIFY0TDJfTUJVU19GTVRfUkdCNTU1XzJYOF9QQURISV9MRToKLQkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfcmdiNTU1KGNsaWVudCk7CisJCWRhdGFfb3V0Zm10MiA9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU1NSB8CisJCQlNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWV9SR0JfRVZFTjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfQkU6CisJCWRhdGFfb3V0Zm10MiA9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU1NTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEU6Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU2NShjbGllbnQpOworCQlkYXRhX291dGZtdDIgPSBNVDlNMTExX09VVEZNVF9SR0IgfCBNVDlNMTExX09VVEZNVF9SR0I1NjUgfAorCQkJTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DX1lfUkdCX0VWRU47CisJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0JFOgorCQlkYXRhX291dGZtdDIgPSBNVDlNMTExX09VVEZNVF9SR0IgfCBNVDlNMTExX09VVEZNVF9SR0I1NjU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9NQlVTX0ZNVF9CR1I1NjVfMlg4X0JFOgorCQlkYXRhX291dGZtdDIgPSBNVDlNMTExX09VVEZNVF9SR0IgfCBNVDlNMTExX09VVEZNVF9SR0I1NjUgfAorCQkJTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DYl9Dcl9SR0JfUl9COworCQlicmVhazsKKwljYXNlIFY0TDJfTUJVU19GTVRfQkdSNTY1XzJYOF9MRToKKwkJZGF0YV9vdXRmbXQyID0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTY1IHwKKwkJCU1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZX1JHQl9FVkVOIHwKKwkJCU1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3JfUkdCX1JfQjsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01CVVNfRk1UX1VZVlk4XzJYODoKLQkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMDsKLQkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAwOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKKwkJZGF0YV9vdXRmbXQyID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01CVVNfRk1UX1ZZVVk4XzJYODoKLQkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMDsKLQkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAxOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKKwkJZGF0YV9vdXRmbXQyID0gTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DYl9Dcl9SR0JfUl9COwogCQlicmVhazsKIAljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OgotCQltdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMgPSAxOwotCQltdDltMTExLT5zd2FwX3l1dl9jYl9jciA9IDA7Ci0JCXJldCA9IG10OW0xMTFfc2V0Zm10X3l1dihjbGllbnQpOworCQlkYXRhX291dGZtdDIgPSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWV9SR0JfRVZFTjsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYODoKLQkJbXQ5bTExMS0+c3dhcF95dXZfeV9jaHJvbWFzID0gMTsKLQkJbXQ5bTExMS0+c3dhcF95dXZfY2JfY3IgPSAxOwotCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoY2xpZW50KTsKKwkJZGF0YV9vdXRmbXQyID0gTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DX1lfUkdCX0VWRU4gfAorCQkJTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DYl9Dcl9SR0JfUl9COwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlBpeGVsIGZvcm1hdCBub3QgaGFuZGxlZCA6ICV4XG4iLAotCQkJY29kZSk7Ci0JCXJldCA9IC1FSU5WQUw7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiUGl4ZWwgZm9ybWF0IG5vdCBoYW5kbGVkOiAleFxuIiwgY29kZSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXJldCA9IHJlZ19tYXNrKE9VVFBVVF9GT1JNQVRfQ1RSTDJfQSwgZGF0YV9vdXRmbXQyLAorCQkgICAgICAgbWFza19vdXRmbXQyKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX21hc2soT1VUUFVUX0ZPUk1BVF9DVFJMMl9CLCBkYXRhX291dGZtdDIsCisJCQkgICAgICAgbWFza19vdXRmbXQyKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU2MSw3ICs1MzIsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljb25zdCBzdHJ1Y3QgbXQ5bTExMV9kYXRhZm10ICpmbXQ7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBtdDltMTExLCBzdWJkZXYpOwogCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKIAkJLmxlZnQJPSBtdDltMTExLT5yZWN0LmxlZnQsCiAJCS50b3AJPSBtdDltMTExLT5yZWN0LnRvcCwKQEAgLTU3OSw5ICs1NTAsOSBAQAogCQkiJXMgY29kZT0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsIF9fZnVuY19fLAogCQltZi0+Y29kZSwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwogCi0JcmV0ID0gbXQ5bTExMV9tYWtlX3JlY3QoY2xpZW50LCAmcmVjdCk7CisJcmV0ID0gbXQ5bTExMV9tYWtlX3JlY3QobXQ5bTExMSwgJnJlY3QpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3NldF9waXhmbXQoY2xpZW50LCBtZi0+Y29kZSk7CisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChtdDltMTExLCBtZi0+Y29kZSk7CiAJaWYgKCFyZXQpIHsKIAkJbXQ5bTExMS0+cmVjdAk9IHJlY3Q7CiAJCW10OW0xMTEtPmZtdAk9IGZtdDsKQEAgLTU5NCw4ICs1NjUsNyBAQAogc3RhdGljIGludCBtdDltMTExX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG10OW0xMTEsIHN1YmRldik7CiAJY29uc3Qgc3RydWN0IG10OW0xMTFfZGF0YWZtdCAqZm10OwogCWJvb2wgYmF5ZXIgPSBtZi0+Y29kZSA9PSBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggfHwKIAkJbWYtPmNvZGUgPT0gVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRTsKQEAgLTYzNSw3ICs2MDUsNyBAQAogCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBtdDltMTExLCBzdWJkZXYpOwogCiAJaWYgKGlkLT5tYXRjaC50eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MjYsMjEgKzY5NiwxNiBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOwotc3RhdGljIGludCBtdDltMTExX3N1c3BlbmQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0KIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgbXQ5bTExMV9vcHMgPSB7Ci0JLnN1c3BlbmQJCT0gbXQ5bTExMV9zdXNwZW5kLAotCS5yZXN1bWUJCQk9IG10OW0xMTFfcmVzdW1lLAogCS5xdWVyeV9idXNfcGFyYW0JPSBtdDltMTExX3F1ZXJ5X2J1c19wYXJhbSwKIAkuc2V0X2J1c19wYXJhbQkJPSBtdDltMTExX3NldF9idXNfcGFyYW0sCiAJLmNvbnRyb2xzCQk9IG10OW0xMTFfY29udHJvbHMsCiAJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG10OW0xMTFfY29udHJvbHMpLAogfTsKIAotc3RhdGljIGludCBtdDltMTExX3NldF9mbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBmbGlwLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZmxpcChzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSwgaW50IGZsaXAsIGludCBtYXNrKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOwogCWludCByZXQ7CiAKIAlpZiAobXQ5bTExMS0+Y29udGV4dCA9PSBISUdIUE9XRVIpIHsKQEAgLTc1OCw4ICs3MjMsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oc3RydWN0IG10OW0xMTEgKm10OW0xMTEpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm10OW0xMTEtPnN1YmRldik7CiAJaW50IGRhdGE7CiAKIAlkYXRhID0gcmVnX3JlYWQoR0xPQkFMX0dBSU4pOwpAQCAtNzY5LDkgKzczNSw5IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGdhaW4pCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKHN0cnVjdCBtdDltMTExICptdDltMTExLCBpbnQgZ2FpbikKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmbXQ5bTExMS0+c3ViZGV2KTsKIAl1MTYgdmFsOwogCiAJaWYgKGdhaW4gPiA2MyAqIDIgKiAyKQpAQCAtNzg4LDkgKzc1NCw5IEBACiAJcmV0dXJuIHJlZ193cml0ZShHTE9CQUxfR0FJTiwgdmFsKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG9uKQorc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoc3RydWN0IG10OW0xMTEgKm10OW0xMTEsIGludCBvbikKIHsKLQlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IHRvX210OW0xMTEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmbXQ5bTExMS0+c3ViZGV2KTsKIAlpbnQgcmV0OwogCiAJaWYgKG9uKQpAQCAtODA0LDkgKzc3MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBvbikKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSwgaW50IG9uKQogewotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZtdDltMTExLT5zdWJkZXYpOwogCWludCByZXQ7CiAKIAlpZiAob24pCkBAIC04MjMsNyArNzg5LDcgQEAKIHN0YXRpYyBpbnQgbXQ5bTExMV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBtdDltMTExLCBzdWJkZXYpOwogCWludCBkYXRhOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewpAQCAtODQ4LDcgKzgxNCw3IEBACiAJCWN0cmwtPnZhbHVlID0gISEoZGF0YSAmIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlkYXRhID0gbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oY2xpZW50KTsKKwkJZGF0YSA9IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKG10OW0xMTEpOwogCQlpZiAoZGF0YSA8IDApCiAJCQlyZXR1cm4gZGF0YTsKIAkJY3RybC0+dmFsdWUgPSBkYXRhOwpAQCAtODY1LDggKzgzMSw3IEBACiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBtdDltMTExLCBzdWJkZXYpOwogCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CiAJaW50IHJldDsKIApAQCAtODc3LDIyICs4NDIsMjIgQEAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAkJbXQ5bTExMS0+dmZsaXAgPSBjdHJsLT52YWx1ZTsKLQkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIGN0cmwtPnZhbHVlLAorCQlyZXQgPSBtdDltMTExX3NldF9mbGlwKG10OW0xMTEsIGN0cmwtPnZhbHVlLAogCQkJCQlNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJCW10OW0xMTEtPmhmbGlwID0gY3RybC0+dmFsdWU7Ci0JCXJldCA9IG10OW0xMTFfc2V0X2ZsaXAoY2xpZW50LCBjdHJsLT52YWx1ZSwKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChtdDltMTExLCBjdHJsLT52YWx1ZSwKIAkJCQkJTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46Ci0JCXJldCA9IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlyZXQgPSBtdDltMTExX3NldF9nbG9iYWxfZ2FpbihtdDltMTExLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKLQkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShtdDltMTExLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgotCQlyZXQgPSAgbXQ5bTExMV9zZXRfYXV0b3doaXRlYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2UobXQ5bTExMSwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtOTAxLDYwICs4NjYsNTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfc3VzcGVuZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtdDltMTExX3N1c3BlbmQoc3RydWN0IG10OW0xMTEgKm10OW0xMTEpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQodG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpOwotCXN0cnVjdCBtdDltMTExICptdDltMTExID0gdG9fbXQ5bTExMShjbGllbnQpOwotCi0JbXQ5bTExMS0+Z2FpbiA9IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKGNsaWVudCk7CisJbXQ5bTExMS0+Z2FpbiA9IG10OW0xMTFfZ2V0X2dsb2JhbF9nYWluKG10OW0xMTEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBtdDltMTExX3Jlc3RvcmVfc3RhdGUoc3RydWN0IG10OW0xMTEgKm10OW0xMTEpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7Ci0KLQltdDltMTExX3NldF9jb250ZXh0KGNsaWVudCwgbXQ5bTExMS0+Y29udGV4dCk7Ci0JbXQ5bTExMV9zZXRfcGl4Zm10KGNsaWVudCwgbXQ5bTExMS0+Zm10LT5jb2RlKTsKLQltdDltMTExX3NldHVwX3JlY3QoY2xpZW50LCAmbXQ5bTExMS0+cmVjdCk7Ci0JbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIG10OW0xMTEtPmhmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7Ci0JbXQ5bTExMV9zZXRfZmxpcChjbGllbnQsIG10OW0xMTEtPnZmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7Ci0JbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oY2xpZW50LCBtdDltMTExLT5nYWluKTsKLQltdDltMTExX3NldF9hdXRvZXhwb3N1cmUoY2xpZW50LCBtdDltMTExLT5hdXRvZXhwb3N1cmUpOwotCW10OW0xMTFfc2V0X2F1dG93aGl0ZWJhbGFuY2UoY2xpZW50LCBtdDltMTExLT5hdXRvd2hpdGViYWxhbmNlKTsKLQlyZXR1cm4gMDsKKwltdDltMTExX3NldF9jb250ZXh0KG10OW0xMTEsIG10OW0xMTEtPmNvbnRleHQpOworCW10OW0xMTFfc2V0X3BpeGZtdChtdDltMTExLCBtdDltMTExLT5mbXQtPmNvZGUpOworCW10OW0xMTFfc2V0dXBfcmVjdChtdDltMTExLCAmbXQ5bTExMS0+cmVjdCk7CisJbXQ5bTExMV9zZXRfZmxpcChtdDltMTExLCBtdDltMTExLT5oZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOworCW10OW0xMTFfc2V0X2ZsaXAobXQ5bTExMSwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKKwltdDltMTExX3NldF9nbG9iYWxfZ2FpbihtdDltMTExLCBtdDltMTExLT5nYWluKTsKKwltdDltMTExX3NldF9hdXRvZXhwb3N1cmUobXQ5bTExMSwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKKwltdDltMTExX3NldF9hdXRvd2hpdGViYWxhbmNlKG10OW0xMTEsIG10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UpOwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfcmVzdW1lKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3Jlc3VtZShzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudCh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobXQ5bTExMS0+cG93ZXJlZCkgewotCQlyZXQgPSBtdDltMTExX2VuYWJsZShjbGllbnQpOworCQlyZXQgPSBtdDltMTExX2VuYWJsZShtdDltMTExKTsKIAkJaWYgKCFyZXQpCi0JCQlyZXQgPSBtdDltMTExX3Jlc2V0KGNsaWVudCk7CisJCQlyZXQgPSBtdDltMTExX3Jlc2V0KG10OW0xMTEpOwogCQlpZiAoIXJldCkKLQkJCXJldCA9IG10OW0xMTFfcmVzdG9yZV9zdGF0ZShjbGllbnQpOworCQkJbXQ5bTExMV9yZXN0b3JlX3N0YXRlKG10OW0xMTEpOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG10OW0xMTFfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBtdDltMTExX2luaXQoc3RydWN0IG10OW0xMTEgKm10OW0xMTEpCiB7Ci0Jc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSB0b19tdDltMTExKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm10OW0xMTEtPnN1YmRldik7CiAJaW50IHJldDsKIAogCW10OW0xMTEtPmNvbnRleHQgPSBISUdIUE9XRVI7Ci0JcmV0ID0gbXQ5bTExMV9lbmFibGUoY2xpZW50KTsKKwlyZXQgPSBtdDltMTExX2VuYWJsZShtdDltMTExKTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gbXQ5bTExMV9yZXNldChjbGllbnQpOworCQlyZXQgPSBtdDltMTExX3Jlc2V0KG10OW0xMTEpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3NldF9jb250ZXh0KGNsaWVudCwgbXQ5bTExMS0+Y29udGV4dCk7CisJCXJldCA9IG10OW0xMTFfc2V0X2NvbnRleHQobXQ5bTExMSwgbXQ5bTExMS0+Y29udGV4dCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShjbGllbnQsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CisJCXJldCA9IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShtdDltMTExLCBtdDltMTExLT5hdXRvZXhwb3N1cmUpOwogCWlmIChyZXQpCiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibXQ5bTExMSBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTk3MSwyMCArOTI4LDEzIEBACiAJczMyIGRhdGE7CiAJaW50IHJldDsKIAotCS8qCi0JICogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KLQkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LgotCSAqLwotCWlmICghaWNkLT5kZXYucGFyZW50IHx8Ci0JICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLiAqLworCUJVR19PTighaWNkLT5wYXJlbnQgfHwKKwkgICAgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSk7CiAKIAltdDltMTExLT5hdXRvZXhwb3N1cmUgPSAxOwogCW10OW0xMTEtPmF1dG93aGl0ZWJhbGFuY2UgPSAxOwogCi0JbXQ5bTExMS0+c3dhcF9yZ2JfZXZlbl9vZGQgPSAxOwotCW10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlID0gMTsKLQogCWRhdGEgPSByZWdfcmVhZChDSElQX1ZFUlNJT04pOwogCiAJc3dpdGNoIChkYXRhKSB7CkBAIC0xMDA1LDE2ICs5NTUsNTEgQEAKIAkJZ290byBlaTJjOwogCX0KIAotCXJldCA9IG10OW0xMTFfaW5pdChjbGllbnQpOworCXJldCA9IG10OW0xMTFfaW5pdChtdDltMTExKTsKIAogZWkyYzoKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG10OW0xMTFfc19wb3dlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBtdDltMTExLCBzdWJkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJm10OW0xMTEtPnBvd2VyX2xvY2spOworCisJLyoKKwkgKiBJZiB0aGUgcG93ZXIgY291bnQgaXMgbW9kaWZpZWQgZnJvbSAwIHRvICE9IDAgb3IgZnJvbSAhPSAwIHRvIDAsCisJICogdXBkYXRlIHRoZSBwb3dlciBzdGF0ZS4KKwkgKi8KKwlpZiAobXQ5bTExMS0+cG93ZXJfY291bnQgPT0gIW9uKSB7CisJCWlmIChvbikgeworCQkJcmV0ID0gbXQ5bTExMV9yZXN1bWUobXQ5bTExMSk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gcmVzdW1lIHRoZSBzZW5zb3I6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJbXQ5bTExMV9zdXNwZW5kKG10OW0xMTEpOworCQl9CisJfQorCisJLyogVXBkYXRlIHRoZSBwb3dlciBjb3VudC4gKi8KKwltdDltMTExLT5wb3dlcl9jb3VudCArPSBvbiA/IDEgOiAtMTsKKwlXQVJOX09OKG10OW0xMTEtPnBvd2VyX2NvdW50IDwgMCk7CisKK291dDoKKwltdXRleF91bmxvY2soJm10OW0xMTEtPnBvd2VyX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbXQ5bTExMV9zdWJkZXZfY29yZV9vcHMgPSB7CiAJLmdfY3RybAkJPSBtdDltMTExX2dfY3RybCwKIAkuc19jdHJsCQk9IG10OW0xMTFfc19jdHJsLAogCS5nX2NoaXBfaWRlbnQJPSBtdDltMTExX2dfY2hpcF9pZGVudCwKKwkuc19wb3dlcgk9IG10OW0xMTFfc19wb3dlciwKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJLmdfcmVnaXN0ZXIJPSBtdDltMTExX2dfcmVnaXN0ZXIsCiAJLnNfcmVnaXN0ZXIJPSBtdDltMTExX3NfcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCmluZGV4IDdjZTI3OWMuLjMwNTQ3Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC03MDAsOCArNzAwLDcgQEAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHRvX3ZpZGVvX2RldmljZShkZXYpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY29udGFpbmVyX29mKHZkZXYtPnBhcmVudCwKLQkJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLCBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZGV2X2dldF9kcnZkYXRhKHZkZXYtPnBhcmVudCk7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gdG9fbXQ5dDAzMShjbGllbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MTEyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYwppbmRleCBiZmZhOWVlLi5kMmUwYTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQxMTIuYwpAQCAtMTA1NywxMyArMTA1Nyw5IEBACiAJY29uc3QgY2hhciAgICAgICAgICAqZGV2bmFtZTsKIAlpbnQgICAgICAgICAgICAgICAgICBjaGlwaWQ7CiAKLQkvKgotCSAqIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KLQkgKi8KLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4gKi8KKwlCVUdfT04oIWljZC0+cGFyZW50IHx8CisJICAgICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpOwogCiAJLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBjaGlwIElECmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAxMS5jCmluZGV4IDQ5MDRkMjUuLjg5M2E4YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAxMS5jCkBAIC01NCwxMSArNTQsMjAgQEAKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJHYWluIiwKIAkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9ICgxIDw8IDEwKSAtIDEsCisJCS5tYXhpbXVtID0gKDEgPDwgMTIpIC0gMSAtIDB4MDAyMCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAyMCwKIAkJLmZsYWdzID0gMCwKIAl9LCB7CisJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkV4cG9zdXJlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIwNDcsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDAxZmMsCisJCS5mbGFncyA9IDAsCisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJSZWQgQmFsYW5jZSIsCkBAIC0xMDUsNyArMTE0LDggQEAKIAl1bnNpZ25lZCBoZmxpcDoxOwogCXVuc2lnbmVkIHZmbGlwOjE7CiAKLQl1MTYgZ2xvYmFsX2dhaW4sIHJlZF9iYWwsIGJsdWVfYmFsOworCXUxNiBnbG9iYWxfZ2FpbiwgZXhwb3N1cmU7CisJczE2IHJlZF9iYWwsIGJsdWVfYmFsOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXQ5djAxMSAqdG9fbXQ5djAxMShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQpAQCAtMTgwLDI0ICsxOTAsNjggQEAKIAkJeyBSMDdfTVQ5VjAxMV9PVVRfQ1RSTCwgMHgwMDAyIH0sCS8qIGNoaXAgZW5hYmxlICovCiB9OwogCisKK3N0YXRpYyB1MTYgY2FsY19tdDl2MDExX2dhaW4oczE2IGxpbmVhcmdhaW4pCit7CisKKwl1MTYgZGlnaXRhbGdhaW4gPSAwOworCXUxNiBhbmFsb2dtdWx0ID0gMDsKKwl1MTYgYW5hbG9naW5pdCA9IDA7CisKKwlpZiAobGluZWFyZ2FpbiA8IDApCisJCWxpbmVhcmdhaW4gPSAwOworCisJLyogcmVjb21tZW5kZWQgbWluaW11bSAqLworCWxpbmVhcmdhaW4gKz0gMHgwMDIwOworCisJaWYgKGxpbmVhcmdhaW4gPiAyMDQ3KQorCQlsaW5lYXJnYWluID0gMjA0NzsKKworCWlmIChsaW5lYXJnYWluID4gMTAyMykgeworCQlkaWdpdGFsZ2FpbiA9IDM7CisJCWFuYWxvZ211bHQgPSAzOworCQlhbmFsb2dpbml0ID0gbGluZWFyZ2FpbiAvIDE2OworCX0gZWxzZSBpZiAobGluZWFyZ2FpbiA+IDUxMSkgeworCQlkaWdpdGFsZ2FpbiA9IDE7CisJCWFuYWxvZ211bHQgPSAzOworCQlhbmFsb2dpbml0ID0gbGluZWFyZ2FpbiAvIDg7CisJfSBlbHNlIGlmIChsaW5lYXJnYWluID4gMjU1KSB7CisJCWFuYWxvZ211bHQgPSAzOworCQlhbmFsb2dpbml0ID0gbGluZWFyZ2FpbiAvIDQ7CisJfSBlbHNlIGlmIChsaW5lYXJnYWluID4gMTI3KSB7CisJCWFuYWxvZ211bHQgPSAxOworCQlhbmFsb2dpbml0ID0gbGluZWFyZ2FpbiAvIDI7CisJfSBlbHNlCisJCWFuYWxvZ2luaXQgPSBsaW5lYXJnYWluOworCisJcmV0dXJuIGFuYWxvZ2luaXQgKyAoYW5hbG9nbXVsdCA8PCA3KSArIChkaWdpdGFsZ2FpbiA8PCA5KTsKKworfQorCiBzdGF0aWMgdm9pZCBzZXRfYmFsYW5jZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXN0cnVjdCBtdDl2MDExICpjb3JlID0gdG9fbXQ5djAxMShzZCk7Ci0JdTE2IGdyZWVuMV9nYWluLCBncmVlbjJfZ2FpbiwgYmx1ZV9nYWluLCByZWRfZ2FpbjsKKwl1MTYgZ3JlZW5fZ2FpbiwgYmx1ZV9nYWluLCByZWRfZ2FpbjsKKwl1MTYgZXhwb3N1cmU7CisJczE2IGJhbDsKIAotCWdyZWVuMV9nYWluID0gY29yZS0+Z2xvYmFsX2dhaW47Ci0JZ3JlZW4yX2dhaW4gPSBjb3JlLT5nbG9iYWxfZ2FpbjsKKwlleHBvc3VyZSA9IGNvcmUtPmV4cG9zdXJlOwogCi0JYmx1ZV9nYWluID0gY29yZS0+Z2xvYmFsX2dhaW4gKwotCQkgICAgY29yZS0+Z2xvYmFsX2dhaW4gKiBjb3JlLT5ibHVlX2JhbCAvICgxIDw8IDkpOworCWdyZWVuX2dhaW4gPSBjYWxjX210OXYwMTFfZ2Fpbihjb3JlLT5nbG9iYWxfZ2Fpbik7CiAKLQlyZWRfZ2FpbiA9IGNvcmUtPmdsb2JhbF9nYWluICsKLQkJICAgY29yZS0+Z2xvYmFsX2dhaW4gKiBjb3JlLT5ibHVlX2JhbCAvICgxIDw8IDkpOworCWJhbCA9IGNvcmUtPmdsb2JhbF9nYWluOworCWJhbCArPSAoY29yZS0+Ymx1ZV9iYWwgKiBjb3JlLT5nbG9iYWxfZ2FpbiAvICgxIDw8IDcpKTsKKwlibHVlX2dhaW4gPSBjYWxjX210OXYwMTFfZ2FpbihiYWwpOwogCi0JbXQ5djAxMV93cml0ZShzZCwgUjJCX01UOVYwMTFfR1JFRU5fMV9HQUlOLCBncmVlbjFfZ2Fpbik7Ci0JbXQ5djAxMV93cml0ZShzZCwgUjJFX01UOVYwMTFfR1JFRU5fMl9HQUlOLCAgZ3JlZW4xX2dhaW4pOworCWJhbCA9IGNvcmUtPmdsb2JhbF9nYWluOworCWJhbCArPSAoY29yZS0+cmVkX2JhbCAqIGNvcmUtPmdsb2JhbF9nYWluIC8gKDEgPDwgNykpOworCXJlZF9nYWluID0gY2FsY19tdDl2MDExX2dhaW4oYmFsKTsKKworCW10OXYwMTFfd3JpdGUoc2QsIFIyQl9NVDlWMDExX0dSRUVOXzFfR0FJTiwgZ3JlZW5fZ2Fpbik7CisJbXQ5djAxMV93cml0ZShzZCwgUjJFX01UOVYwMTFfR1JFRU5fMl9HQUlOLCBncmVlbl9nYWluKTsKIAltdDl2MDExX3dyaXRlKHNkLCBSMkNfTVQ5VjAxMV9CTFVFX0dBSU4sIGJsdWVfZ2Fpbik7CiAJbXQ5djAxMV93cml0ZShzZCwgUjJEX01UOVYwMTFfUkVEX0dBSU4sIHJlZF9nYWluKTsKKwltdDl2MDExX3dyaXRlKHNkLCBSMDlfTVQ5VjAxMV9TSFVUVEVSX1dJRFRILCBleHBvc3VyZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGNfZnBzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqbnVtZXJhdG9yLCB1MzIgKmRlbm9taW5hdG9yKQpAQCAtMjg2LDcgKzM0MCw3IEBACiAJICogYmUgbWlzc2luZy4KIAkgKi8KIAotCWhzdGFydCA9IDE0ICsgKDY0MCAtIGNvcmUtPndpZHRoKSAvIDI7CisJaHN0YXJ0ID0gMjAgKyAoNjQwIC0gY29yZS0+d2lkdGgpIC8gMjsKIAltdDl2MDExX3dyaXRlKHNkLCBSMDJfTVQ5VjAxMV9DT0xTVEFSVCwgaHN0YXJ0KTsKIAltdDl2MDExX3dyaXRlKHNkLCBSMDRfTVQ5VjAxMV9XSURUSCwgY29yZS0+d2lkdGgpOwogCW10OXYwMTFfd3JpdGUoc2QsIFIwNV9NVDlWMDExX0hCTEFOSywgNzcxIC0gY29yZS0+d2lkdGgpOwpAQCAtMzM4LDYgKzM5Miw5IEBACiAJY2FzZSBWNEwyX0NJRF9HQUlOOgogCQljdHJsLT52YWx1ZSA9IGNvcmUtPmdsb2JhbF9nYWluOwogCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQljdHJsLT52YWx1ZSA9IGNvcmUtPmV4cG9zdXJlOworCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgogCQljdHJsLT52YWx1ZSA9IGNvcmUtPnJlZF9iYWw7CiAJCXJldHVybiAwOwpAQCAtMzkyLDYgKzQ0OSw5IEBACiAJY2FzZSBWNEwyX0NJRF9HQUlOOgogCQljb3JlLT5nbG9iYWxfZ2FpbiA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQljb3JlLT5leHBvc3VyZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgogCQljb3JlLT5yZWRfYmFsID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwpAQCAtNTk4LDYgKzY1OCw3IEBACiAJfQogCiAJY29yZS0+Z2xvYmFsX2dhaW4gPSAweDAwMjQ7CisJY29yZS0+ZXhwb3N1cmUgPSAweDAxZmM7CiAJY29yZS0+d2lkdGggID0gNjQwOwogCWNvcmUtPmhlaWdodCA9IDQ4MDsKIAljb3JlLT54dGFsID0gMjcwMDAwMDA7CS8qIEh6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IGZjNzZlZDEuLjUxYjBmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC03MjgsOSArNzI4LDkgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4gKi8KKwlCVUdfT04oIWljZC0+cGFyZW50IHx8CisJICAgICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpOwogCiAJLyogUmVhZCBvdXQgdGhlIGNoaXAgdmVyc2lvbiByZWdpc3RlciAqLwogCWRhdGEgPSByZWdfcmVhZChjbGllbnQsIE1UOVYwMjJfQ0hJUF9WRVJTSU9OKTsKQEAgLTgwOSw4ICs4MDksOCBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyByZW1vdmVkOiAlcCwgJXBcbiIsCi0JCWljZC0+ZGV2LnBhcmVudCwgaWNkLT52ZGV2KTsKKwlkZXZfZGJnKGljZC0+cGRldiwgIlZpZGVvIHJlbW92ZWQ6ICVwLCAlcFxuIiwKKwkJaWNkLT5wYXJlbnQsIGljZC0+dmRldik7CiAJaWYgKGljbC0+ZnJlZV9idXMpCiAJCWljbC0+ZnJlZV9idXMoaWNsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDMyLmMKaW5kZXggMTMxOWMyYy4uYzY0ZTFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDMyLmMKQEAgLTMxLDE0ICszMSwxNCBAQAogI2RlZmluZSBNVDlWMDMyX0NISVBfVkVSU0lPTgkJCQkweDAwCiAjZGVmaW5lCQlNVDlWMDMyX0NISVBfSURfUkVWMQkJCTB4MTMxMQogI2RlZmluZQkJTVQ5VjAzMl9DSElQX0lEX1JFVjMJCQkweDEzMTMKLSNkZWZpbmUgTVQ5VjAzMl9ST1dfU1RBUlQJCQkJMHgwMQotI2RlZmluZQkJTVQ5VjAzMl9ST1dfU1RBUlRfTUlOCQkJNAotI2RlZmluZQkJTVQ5VjAzMl9ST1dfU1RBUlRfREVGCQkJMTAKLSNkZWZpbmUJCU1UOVYwMzJfUk9XX1NUQVJUX01BWAkJCTQ4MgotI2RlZmluZSBNVDlWMDMyX0NPTFVNTl9TVEFSVAkJCQkweDAyCisjZGVmaW5lIE1UOVYwMzJfQ09MVU1OX1NUQVJUCQkJCTB4MDEKICNkZWZpbmUJCU1UOVYwMzJfQ09MVU1OX1NUQVJUX01JTgkJMQotI2RlZmluZQkJTVQ5VjAzMl9DT0xVTU5fU1RBUlRfREVGCQkyCisjZGVmaW5lCQlNVDlWMDMyX0NPTFVNTl9TVEFSVF9ERUYJCTEKICNkZWZpbmUJCU1UOVYwMzJfQ09MVU1OX1NUQVJUX01BWAkJNzUyCisjZGVmaW5lIE1UOVYwMzJfUk9XX1NUQVJUCQkJCTB4MDIKKyNkZWZpbmUJCU1UOVYwMzJfUk9XX1NUQVJUX01JTgkJCTQKKyNkZWZpbmUJCU1UOVYwMzJfUk9XX1NUQVJUX0RFRgkJCTUKKyNkZWZpbmUJCU1UOVYwMzJfUk9XX1NUQVJUX01BWAkJCTQ4MgogI2RlZmluZSBNVDlWMDMyX1dJTkRPV19IRUlHSFQJCQkJMHgwMwogI2RlZmluZQkJTVQ5VjAzMl9XSU5ET1dfSEVJR0hUX01JTgkJMQogI2RlZmluZQkJTVQ5VjAzMl9XSU5ET1dfSEVJR0hUX0RFRgkJNDgwCkBAIC00MjAsMTMgKzQyMCwxMyBAQAogCXN0cnVjdCB2NGwyX3JlY3QgKl9fY3JvcDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAKLQkvKiBDbGFtcCB0aGUgY3JvcCByZWN0YW5nbGUgYm91bmRhcmllcyBhbmQgYWxpZ24gdGhlbSB0byBhIG11bHRpcGxlIG9mIDIKLQkgKiBwaXhlbHMuCisJLyogQ2xhbXAgdGhlIGNyb3AgcmVjdGFuZ2xlIGJvdW5kYXJpZXMgYW5kIGFsaWduIHRoZW0gdG8gYSBub24gbXVsdGlwbGUKKwkgKiBvZiAyIHBpeGVscyB0byBlbnN1cmUgYSBHUkJHIEJheWVyIHBhdHRlcm4uCiAJICovCi0JcmVjdC5sZWZ0ID0gY2xhbXAoQUxJR04oY3JvcC0+cmVjdC5sZWZ0LCAyKSwKKwlyZWN0LmxlZnQgPSBjbGFtcChBTElHTihjcm9wLT5yZWN0LmxlZnQgKyAxLCAyKSAtIDEsCiAJCQkgIE1UOVYwMzJfQ09MVU1OX1NUQVJUX01JTiwKIAkJCSAgTVQ5VjAzMl9DT0xVTU5fU1RBUlRfTUFYKTsKLQlyZWN0LnRvcCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QudG9wLCAyKSwKKwlyZWN0LnRvcCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QudG9wICsgMSwgMikgLSAxLAogCQkJIE1UOVYwMzJfUk9XX1NUQVJUX01JTiwKIAkJCSBNVDlWMDMyX1JPV19TVEFSVF9NQVgpOwogCXJlY3Qud2lkdGggPSBjbGFtcChBTElHTihjcm9wLT5yZWN0LndpZHRoLCAyKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgxX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKaW5kZXggNjNmOGEwYy4uMDg3ZGIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDFfY2FtZXJhLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgpAQCAtNzMsNyArNzIsNyBAQAogI2RlZmluZSBDU0lTUl9TT0ZfSU5UCQkoMSA8PCAxNikKICNkZWZpbmUgQ1NJU1JfRFJEWQkJKDEgPDwgMCkKIAotI2RlZmluZSBWRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMC4yIgogI2RlZmluZSBEUklWRVJfTkFNRSAibXgxLWNhbWVyYSIKIAogI2RlZmluZSBDU0lfSVJRX01BU0sJKENTSVNSX1NGRl9PUl9JTlQgfCBDU0lTUl9SRkZfT1JfSU5UIHwgXApAQCAtMTQyLDcgKzE0MSw3IEBACiAJaWYgKCpzaXplICogKmNvdW50ID4gTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KQogCQkqY291bnQgPSAoTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KSAvICpzaXplOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CisJZGV2X2RiZyhpY2QtPnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU0LDcgKzE1Myw3IEBACiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qCkBAIC0xNzksNyArMTc4LDcgQEAKIAlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQogCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJLyogQWRkZWQgbGlzdCBoZWFkIGluaXRpYWxpemF0aW9uIG9uIGFsbG9jICovCkBAIC0yMzIsNyArMjMxLDcgQEAKIHN0YXRpYyBpbnQgbXgxX2NhbWVyYV9zZXR1cF9kbWEoc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldikKIHsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YnVmID0gJnBjZGV2LT5hY3RpdmUtPnZiOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPmljZC0+cGFyZW50OwogCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoIXBjZGV2LT5hY3RpdmUpKSB7CkBAIC0yNTYsMTEgKzI1NSwxMSBAQAogCQkJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgbXgxX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgxX2J1ZmZlciwgdmIpOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKQEAgLTI4Nyw3ICsyODYsNyBAQAogCXN0cnVjdCBteDFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDFfYnVmZmVyLCB2Yik7CiAjaWZkZWYgREVCVUcKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OwogCiAJZGV2X2RiZyhkZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CkBAIC0zNDMsNyArMzQyLDcgQEAKIHN0YXRpYyB2b2lkIG14MV9jYW1lcmFfZG1hX2lycShpbnQgY2hhbm5lbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+aWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPnBhcmVudDsKIAlzdHJ1Y3QgbXgxX2J1ZmZlciAqYnVmOwogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNzgsMTAgKzM3NywxMCBAQAogc3RhdGljIHZvaWQgbXgxX2NhbWVyYV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14MV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAotCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgxX3ZpZGVvYnVmX29wcywgaWNkLT5kZXYucGFyZW50LAorCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgxX3ZpZGVvYnVmX29wcywgaWNkLT5wYXJlbnQsCiAJCQkJJnBjZGV2LT5sb2NrLCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkJVjRMMl9GSUVMRF9OT05FLAogCQkJCXNpemVvZihzdHJ1Y3QgbXgxX2J1ZmZlciksIGljZCwgJmljZC0+dmlkZW9fbG9jayk7CkBAIC00MDEsNyArNDAwLDcgQEAKIAkgKi8KIAlkaXYgPSAobGNkY2xrICsgMiAqIG1jbGsgLSAxKSAvICgyICogbWNsaykgLSAxOwogCi0JZGV2X2RiZyhwY2Rldi0+aWNkLT5kZXYucGFyZW50LAorCWRldl9kYmcocGNkZXYtPmljZC0+cGFyZW50LAogCQkiU3lzdGVtIGNsb2NrICVsdWtIeiwgdGFyZ2V0IGZyZXEgJWRrSHosIGRpdmlzb3IgJWx1XG4iLAogCQlsY2RjbGsgLyAxMDAwLCBtY2xrIC8gMTAwMCwgZGl2KTsKIApAQCAtNDEyLDcgKzQxMSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGNzaWNyMSA9IENTSUNSMV9FTjsKIAotCWRldl9kYmcocGNkZXYtPmljZC0+ZGV2LnBhcmVudCwgIkFjdGl2YXRlIGRldmljZVxuIik7CisJZGV2X2RiZyhwY2Rldi0+aWNkLT5wYXJlbnQsICJBY3RpdmF0ZSBkZXZpY2VcbiIpOwogCiAJY2xrX2VuYWJsZShwY2Rldi0+Y2xrKTsKIApAQCAtNDI4LDcgKzQyNyw3IEBACiAKIHN0YXRpYyB2b2lkIG14MV9jYW1lcmFfZGVhY3RpdmF0ZShzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2KQogewotCWRldl9kYmcocGNkZXYtPmljZC0+ZGV2LnBhcmVudCwgIkRlYWN0aXZhdGUgZGV2aWNlXG4iKTsKKwlkZXZfZGJnKHBjZGV2LT5pY2QtPnBhcmVudCwgIkRlYWN0aXZhdGUgZGV2aWNlXG4iKTsKIAogCS8qIERpc2FibGUgYWxsIENTSSBpbnRlcmZhY2UgKi8KIAlfX3Jhd193cml0ZWwoMHgwMCwgcGNkZXYtPmJhc2UgKyBDU0lDUjEpOwpAQCAtNDQyLDEzICs0NDEsMTMgQEAKICAqLwogc3RhdGljIGludCBteDFfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCiAJaWYgKHBjZGV2LT5pY2QpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJNWDEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5wYXJlbnQsICJNWDEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlteDFfY2FtZXJhX2FjdGl2YXRlKHBjZGV2KTsKQEAgLTQ2MCw3ICs0NTksNyBAQAogCiBzdGF0aWMgdm9pZCBteDFfY2FtZXJhX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgxX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXVuc2lnbmVkIGludCBjc2ljcjE7CiAKQEAgLTQ3Myw3ICs0NzIsNyBAQAogCS8qIFN0b3AgRE1BIGVuZ2luZSAqLwogCWlteF9kbWFfZGlzYWJsZShwY2Rldi0+ZG1hX2NoYW4pOwogCi0JZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgxIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5wYXJlbnQsICJNWDEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAogCW14MV9jYW1lcmFfZGVhY3RpdmF0ZShwY2Rldik7CkBAIC00OTEsNyArNDkwLDcgQEAKIAogc3RhdGljIGludCBteDFfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBteDFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJdW5zaWduZWQgbG9uZyBjYW1lcmFfZmxhZ3MsIGNvbW1vbl9mbGFnczsKIAl1bnNpZ25lZCBpbnQgY3NpY3IxOwpAQCAtNTYyLDE0ICs1NjEsMTQgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJYnVzd2lkdGggPSB4bGF0ZS0+aG9zdF9mbXQtPmJpdHNfcGVyX3NhbXBsZTsKIAlpZiAoYnVzd2lkdGggPiA4KSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsCiAJCQkgImJpdHMtcGVyLXNhbXBsZSAlZCBmb3IgZm9ybWF0ICV4IHVuc3VwcG9ydGVkXG4iLAogCQkJIGJ1c3dpZHRoLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MDksNyArNjA4LDcgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNjc2LDcgKzY3NSw2IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZnJpZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsICJpLk1YMS9pLk1YTCBDYW1lcmEiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT52ZXJzaW9uID0gVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAogCXJldHVybiAwOwpAQCAtODgzLDQgKzg4MSw1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImkuTVgxL2kuTVhMIFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgyX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKaW5kZXggNGVhYjFjNi4uZWMyNDEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDJfY2FtZXJhLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtNDcsNyArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogI2RlZmluZSBNWDJfQ0FNX0RSVl9OQU1FICJteDItY2FtZXJhIgotI2RlZmluZSBNWDJfQ0FNX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCA1KQorI2RlZmluZSBNWDJfQ0FNX1ZFUlNJT04gIjAuMC42IgogI2RlZmluZSBNWDJfQ0FNX0RSSVZFUl9ERVNDUklQVElPTiAiaS5NWDJ4X0NhbWVyYSIKIAogLyogcmVzZXQgdmFsdWVzICovCkBAIC0yNzgsNyArMjc3LDcgQEAKICAqLwogc3RhdGljIGludCBteDJfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCByZXQ7CiAJdTMyIGNzaWNyMTsKQEAgLTMwMyw3ICszMDIsNyBAQAogCiAJcGNkZXYtPmljZCA9IGljZDsKIAotCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwgIkNhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCWRldl9pbmZvKGljZC0+cGFyZW50LCAiQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlyZXR1cm4gMDsKQEAgLTMxMSwxMiArMzEwLDEyIEBACiAKIHN0YXRpYyB2b2lkIG14Ml9jYW1lcmFfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKIAlCVUdfT04oaWNkICE9IHBjZGV2LT5pY2QpOwogCi0JZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPnBhcmVudCwgIkNhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlteDJfY2FtZXJhX2RlYWN0aXZhdGUocGNkZXYpOwpAQCAtNDM3LDcgKzQzNiw3IEBACiAJaW50IGJ5dGVzX3Blcl9saW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUoaWNkLT51c2VyX3dpZHRoLAogCQkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJjb3VudD0lZCwgc2l6ZT0lZFxuIiwgKmNvdW50LCAqc2l6ZSk7CisJZGV2X2RiZyhpY2QtPnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKIAogCWlmIChieXRlc19wZXJfbGluZSA8IDApCiAJCXJldHVybiBieXRlc19wZXJfbGluZTsKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9ICZidWYtPnZiOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCS8qCkBAIC00NjcsNyArNDY2LDcgQEAKIAl2aWRlb2J1Zl93YWl0b24odnEsIHZiLCAwLCAwKTsKIAogCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOwotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKIAogCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CiB9CkBAIC00ODEsNyArNDgwLDcgQEAKIAkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKIAlpbnQgcmV0ID0gMDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAorCWRldl9kYmcoaWNkLT5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKIAlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQpAQCAtNTMzLDEyICs1MzIsMTIgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgbXgyX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgyX2J1ZmZlciwgdmIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWRcbiIsIF9fZnVuY19fLAogCQl2YiwgdmItPmJhZGRyLCB2Yi0+YnNpemUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CkBAIC02MTEsMjcgKzYxMCwyNyBAQAogCQkJCSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgyX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCBteDJfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteDJfYnVmZmVyLCB2Yik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIERFQlVHCi0JZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKIAogCXN3aXRjaCAodmItPnN0YXRlKSB7CiAJY2FzZSBWSURFT0JVRl9BQ1RJVkU6Ci0JCWRldl9pbmZvKCZpY2QtPmRldiwgIiVzIChhY3RpdmUpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKGljZC0+cGFyZW50LCAiJXMgKGFjdGl2ZSlcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJY2FzZSBWSURFT0JVRl9RVUVVRUQ6Ci0JCWRldl9pbmZvKCZpY2QtPmRldiwgIiVzIChxdWV1ZWQpXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKGljZC0+cGFyZW50LCAiJXMgKHF1ZXVlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJY2FzZSBWSURFT0JVRl9QUkVQQVJFRDoKLQkJZGV2X2luZm8oJmljZC0+ZGV2LCAiJXMgKHByZXBhcmVkKVxuIiwgX19mdW5jX18pOworCQlkZXZfaW5mbyhpY2QtPnBhcmVudCwgIiVzIChwcmVwYXJlZClcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2luZm8oJmljZC0+ZGV2LCAiJXMgKHVua25vd24pICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2X2luZm8oaWNkLT5wYXJlbnQsICIlcyAodW5rbm93bikgJWRcbiIsIF9fZnVuY19fLAogCQkJCXZiLT5zdGF0ZSk7CiAJCWJyZWFrOwogCX0KQEAgLTY3OCw3ICs2NzcsNyBAQAogc3RhdGljIHZvaWQgbXgyX2NhbWVyYV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChxLCAmbXgyX3ZpZGVvYnVmX29wcywgcGNkZXYtPmRldiwKQEAgLTcxOSw3ICs3MTgsNyBAQAogCQlpbnQgYnl0ZXNwZXJsaW5lKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9Ci0JCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCQl0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBteDJfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKIAl3cml0ZWwocGNkZXYtPmRpc2NhcmRfYnVmZmVyX2RtYSwKQEAgLTc3Miw3ICs3NzEsNyBAQAogCQlfX3UzMiBwaXhmbXQpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0KLQkJdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJCXRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14Ml9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOwogCWludCByZXQgPSAwOwpAQCAtODkxLDcgKzg5MCw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNlbnNvciBjcm9wcGVkICVkeCVkXG4iLAorCWRldl9kYmcoaWNkLT5wYXJlbnQsICJTZW5zb3IgY3JvcHBlZCAlZHglZFxuIiwKIAkJbWYud2lkdGgsIG1mLmhlaWdodCk7CiAKIAlpY2QtPnVzZXJfd2lkdGgJCT0gbWYud2lkdGg7CkBAIC05MTEsNyArOTEwLDcgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKIAkJCQlwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtOTUxLDcgKzk1MCw3IEBACiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAocGl4Zm10ICYmICF4bGF0ZSkgewotCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlkZXZfd2FybihpY2QtPnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTc0LDExICs5NzMsMTYgQEAKIAkJaWYgKHBpeC0+Ynl0ZXNwZXJsaW5lIDwgMCkKIAkJCXJldHVybiBwaXgtPmJ5dGVzcGVybGluZTsKIAkJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqIHBpeC0+Ynl0ZXNwZXJsaW5lOwotCQlpZiAocGl4LT5zaXplaW1hZ2UgPiAoNCAqIDB4M2ZmZmYpKSB7IC8qIENTSVJYQ05UIGxpbWl0ICovCi0JCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsCi0JCQkJCSJJbWFnZSBzaXplICgldSkgYWJvdmUgbGltaXRcbiIsCi0JCQkJCXBpeC0+c2l6ZWltYWdlKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkvKiBDaGVjayBhZ2FpbnN0IHRoZSBDU0lSWENOVCBsaW1pdCAqLworCQlpZiAocGl4LT5zaXplaW1hZ2UgPiA0ICogMHgzZmZmZikgeworCQkJLyogQWRqdXN0IGdlb21ldHJ5LCBwcmVzZXJ2ZSBhc3BlY3QgcmF0aW8gKi8KKwkJCXVuc2lnbmVkIGludCBuZXdfaGVpZ2h0ID0gaW50X3NxcnQoNCAqIDB4M2ZmZmYgKgorCQkJCQlwaXgtPmhlaWdodCAvIHBpeC0+Ynl0ZXNwZXJsaW5lKTsKKwkJCXBpeC0+d2lkdGggPSBuZXdfaGVpZ2h0ICogcGl4LT53aWR0aCAvIHBpeC0+aGVpZ2h0OworCQkJcGl4LT5oZWlnaHQgPSBuZXdfaGVpZ2h0OworCQkJcGl4LT5ieXRlc3BlcmxpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAorCQkJCQkJCXhsYXRlLT5ob3N0X2ZtdCk7CisJCQlCVUdfT04ocGl4LT5ieXRlc3BlcmxpbmUgPCAwKTsKIAkJfQogCX0KIApAQCAtOTk2LDcgKzEwMDAsNyBAQAogCWlmIChtZi5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkKIAkJbWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJaWYgKG1mLmZpZWxkICE9IFY0TDJfRklFTERfTk9ORSkgewotCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLAorCQlkZXZfZXJyKGljZC0+cGFyZW50LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsCiAJCQkJbWYuZmllbGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMDE0LDcgKzEwMTgsNiBAQAogewogCS8qIGNhcC0+bmFtZSBpcyBzZXQgYnkgdGhlIGZyaWVuZGx5IGNhbGxlcjotPiAqLwogCXN0cmxjcHkoY2FwLT5jYXJkLCBNWDJfQ0FNX0RSSVZFUl9ERVNDUklQVElPTiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+dmVyc2lvbiA9IE1YMl9DQU1fVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAogCXJldHVybiAwOwpAQCAtMTUyMywzICsxNTI2LDQgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiaS5NWDI3L2kuTVgyNSBTb0MgQ2FtZXJhIEhvc3QgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHNoYUBwZW5ndXRyb25peC5kZT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKE1YMl9DQU1fVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCmluZGV4IGM3NjgwZWIuLmMwNDViNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMTk1LDcgKzE5NCw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHNpemVzW10sIHZvaWQgKmFsbG9jX2N0eHNbXSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHNvY19jYW1lcmFfZnJvbV92YjJxKHZxKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKIAlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCiAJCQkJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7CkBAIC0yMjQsNyArMjIzLDcgQEAKIHN0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtMjQyLDcgKzI0MSw3IEBACiAJbmV3X3NpemUgPSBieXRlc19wZXJfbGluZSAqIGljZC0+dXNlcl9oZWlnaHQ7CiAKIAlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgbmV3X3NpemUpIHsKLQkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJCdWZmZXIgdG9vIHNtYWxsICglbHUgPCAlenUpXG4iLAorCQlkZXZfZXJyKGljZC0+cGFyZW50LCAiQnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJXp1KVxuIiwKIAkJCXZiMl9wbGFuZV9zaXplKHZiLCAwKSwgbmV3X3NpemUpOwogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQpAQCAtMjg0LDcgKzI4Myw3IEBACiBzdGF0aWMgdm9pZCBteDNfdmlkZW9idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICpidWYgPSB0b19teDNfdmIodmIpOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkID0gYnVmLT50eGQ7CkBAIC0zMzcsNyArMzM2LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJm14M19jYW0tPmxvY2spOwogCiAJY29va2llID0gdHhkLT50eF9zdWJtaXQodHhkKTsKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlN1Ym1pdHRlZCBjb29raWUgJWQgRE1BIDB4JTA4eFxuIiwKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiU3VibWl0dGVkIGNvb2tpZSAlZCBETUEgMHglMDh4XG4iLAogCQljb29raWUsIHNnX2RtYV9hZGRyZXNzKCZidWYtPnNnKSk7CiAKIAlpZiAoY29va2llID49IDApCkBAIC0zNTgsMTMgKzM1NywxMyBAQAogc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3JlbGVhc2Uoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICpidWYgPSB0b19teDNfdmIodmIpOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkID0gYnVmLT50eGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LAorCWRldl9kYmcoaWNkLT5wYXJlbnQsCiAJCSJSZWxlYXNlJXMgRE1BIDB4JTA4eCwgcXVldWUgJXNlbXB0eVxuIiwKIAkJbXgzX2NhbS0+YWN0aXZlID09IGJ1ZiA/ICIgYWN0aXZlIiA6ICIiLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZyksCiAJCWxpc3RfZW1wdHkoJmJ1Zi0+cXVldWUpID8gIiIgOiAibm90ICIpOwpAQCAtNDAzLDcgKzQwMiw3IEBACiBzdGF0aWMgaW50IG14M19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEocSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CkBAIC00OTksNyArNDk4LDcgQEAKIAogCWNsa19lbmFibGUobXgzX2NhbS0+Y2xrKTsKIAlyYXRlID0gY2xrX3JvdW5kX3JhdGUobXgzX2NhbS0+Y2xrLCBteDNfY2FtLT5tY2xrKTsKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNldCBTRU5TX0NPTkYgdG8gJXgsIHJhdGUgJWxkXG4iLCBjb25mLCByYXRlKTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOwogCWlmIChyYXRlKQogCQljbGtfc2V0X3JhdGUobXgzX2NhbS0+Y2xrLCByYXRlKTsKIH0KQEAgLTUwNyw3ICs1MDYsNyBAQAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIGludCBteDNfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAKIAlpZiAobXgzX2NhbS0+aWNkKQpAQCAtNTE3LDcgKzUxNiw3IEBACiAKIAlteDNfY2FtLT5pY2QgPSBpY2Q7CiAKLQlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJNWDMgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5wYXJlbnQsICJNWDMgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlyZXR1cm4gMDsKQEAgLTUyNiw3ICs1MjUsNyBAQAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQgbXgzX2NhbWVyYV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwogCXN0cnVjdCBpZG1hY19jaGFubmVsICoqaWNoYW4gPSAmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKIApAQCAtNTQxLDcgKzU0MCw3IEBACiAKIAlteDNfY2FtLT5pY2QgPSBOVUxMOwogCi0JZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiTVgzIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCisJZGV2X2luZm8oaWNkLT5wYXJlbnQsICJNWDMgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIH0KIApAQCAtNjA4LDEyICs2MDcsMTIgQEAKIHN0YXRpYyBpbnQgbXgzX2NhbWVyYV90cnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGVwdGgpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFnczsKIAlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShteDNfY2FtLCBkZXB0aCwgJmJ1c19mbGFncyk7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgInJlcXVlc3QgYnVzIHdpZHRoICVkIGJpdDogJWRcbiIsIGRlcHRoLCByZXQpOworCWRldl9kYmcoaWNkLT5wYXJlbnQsICJyZXF1ZXN0IGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLCBkZXB0aCwgcmV0KTsKIAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNjIyLDcgKzYyMSw3IEBACiAKIAlyZXQgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKIAlpZiAocmV0IDwgMCkKLQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LAorCQlkZXZfd2FybihpY2QtPnBhcmVudCwKIAkJCSAiRmxhZ3MgaW5jb21wYXRpYmxlOiBjYW1lcmEgJWx4LCBob3N0ICVseFxuIiwKIAkJCSBjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CiAKQEAgLTY3Niw3ICs2NzUsNyBAQAogCQkJCSAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CiAJaW50IGZvcm1hdHMgPSAwLCByZXQ7CiAJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CiAJY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQ7CkBAIC02ODgsNyArNjg3LDcgQEAKIAogCWZtdCA9IHNvY19tYnVzX2dldF9mbXRkZXNjKGNvZGUpOwogCWlmICghZm10KSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsCiAJCQkgIlVuc3VwcG9ydGVkIGZvcm1hdCBjb2RlICMldTogJWRcbiIsIGlkeCwgY29kZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTgxNiw3ICs4MTUsNyBAQAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7CiAJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCA9ICZhLT5jOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CkBAIC04NDksNyArODQ4LDcgQEAKIAkJY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sIG1mLndpZHRoLCBtZi5oZWlnaHQsCiAJCQkJICAgaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQpOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJTZW5zb3IgY3JvcHBlZCAlZHglZFxuIiwKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiU2Vuc29yIGNyb3BwZWQgJWR4JWRcbiIsCiAJCW1mLndpZHRoLCBtZi5oZWlnaHQpOwogCiAJaWNkLT51c2VyX3dpZHRoCQk9IG1mLndpZHRoOwpAQCAtODYxLDcgKzg2MCw3IEBACiBzdGF0aWMgaW50IG14M19jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwpAQCAtODcxLDEzICs4NzAsMTMgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKIAlpZiAoIXhsYXRlKSB7Ci0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsCisJCWRldl93YXJuKGljZC0+cGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3RyaWRlX2FsaWduKCZwaXgtPndpZHRoKTsKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNldCBmb3JtYXQgJWR4JWRcbiIsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiU2V0IGZvcm1hdCAlZHglZFxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCiAJLyoKIAkgKiBNaWdodCBoYXZlIHRvIHBlcmZvcm0gYSBjb21wbGV0ZSBpbnRlcmZhY2UgaW5pdGlhbGlzYXRpb24gbGlrZSBpbgpAQCAtOTEzLDEzICs5MTIsNyBAQAogCXBpeC0+Y29sb3JzcGFjZQkJPSBtZi5jb2xvcnNwYWNlOwogCWljZC0+Y3VycmVudF9mbXQJPSB4bGF0ZTsKIAotCXBpeC0+Ynl0ZXNwZXJsaW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUocGl4LT53aWR0aCwKLQkJCQkJCSAgICB4bGF0ZS0+aG9zdF9mbXQpOwotCWlmIChwaXgtPmJ5dGVzcGVybGluZSA8IDApCi0JCXJldHVybiBwaXgtPmJ5dGVzcGVybGluZTsKLQlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7Ci0KLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIlNlbnNvciBzZXQgJWR4JWRcbiIsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiU2Vuc29yIHNldCAlZHglZFxuIiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTkzNiw3ICs5MjksNyBAQAogCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKHBpeGZtdCAmJiAheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTk0NiwxMiArOTM5LDYgQEAKIAlpZiAocGl4LT53aWR0aCA+IDQwOTYpCiAJCXBpeC0+d2lkdGggPSA0MDk2OwogCi0JcGl4LT5ieXRlc3BlcmxpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAotCQkJCQkJICAgIHhsYXRlLT5ob3N0X2ZtdCk7Ci0JaWYgKHBpeC0+Ynl0ZXNwZXJsaW5lIDwgMCkKLQkJcmV0dXJuIHBpeC0+Ynl0ZXNwZXJsaW5lOwotCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKLQogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KIAltZi53aWR0aAk9IHBpeC0+d2lkdGg7CiAJbWYuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CkBAIC05NzQsNyArOTYxLDcgQEAKIAljYXNlIFY0TDJfRklFTERfTk9ORToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwKKwkJZGV2X2VycihpY2QtPnBhcmVudCwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLAogCQkJbWYuZmllbGQpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KQEAgLTEwMDAsNyArOTg3LDYgQEAKIHsKIAkvKiBjYXAtPm5hbWUgaXMgc2V0IGJ5IHRoZSBmaXJlbmRseSBjYWxsZXI6LT4gKi8KIAlzdHJsY3B5KGNhcC0+Y2FyZCwgImkuTVgzeCBDYW1lcmEiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMiwgMik7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCiAJcmV0dXJuIDA7CkBAIC0xMDA4LDcgKzk5NCw3IEBACiAKIHN0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CiAJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOwogCXUzMiBkdywgc2Vuc19jb25mOwpAQCAtMTAxNiw3ICsxMDAyLDcgQEAKIAlpbnQgYnVzd2lkdGg7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKIAogCWZtdCA9IHNvY19tYnVzX2dldF9mbXRkZXNjKGljZC0+Y3VycmVudF9mbXQtPmNvZGUpOwogCWlmICghZm10KQpAQCAtMTMyNSw0ICsxMzExLDUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiaS5NWDN4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8bGdAZGVueC5kZT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjIuMyIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1YM19DQU1fRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvS2NvbmZpZwppbmRleCBlNjMyMzNmZC4uMzkwYWIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL0tjb25maWcKQEAgLTEsMTEgKzEsMTQgQEAKK2NvbmZpZyBWSURFT19PTUFQMl9WT1VUX1ZSRkIKKwlib29sCisKIGNvbmZpZyBWSURFT19PTUFQMl9WT1VUCiAJdHJpc3RhdGUgIk9NQVAyL09NQVAzIFY0TDItRGlzcGxheSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAlzZWxlY3QgVklERU9CVUZfR0VOCiAJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKIAlzZWxlY3QgT01BUDJfRFNTCi0Jc2VsZWN0IE9NQVAyX1ZSQU0KLQlzZWxlY3QgT01BUDJfVlJGQgorCXNlbGVjdCBPTUFQMl9WUkZCIGlmIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMworCXNlbGVjdCBWSURFT19PTUFQMl9WT1VUX1ZSRkIgaWYgVklERU9fT01BUDJfVk9VVCAmJiBPTUFQMl9WUkZCCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVjRMMiBEaXNwbGF5IGRyaXZlciBzdXBwb3J0IGZvciBPTUFQMi8zIGJhc2VkIGJvYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZQppbmRleCBiMjg3ODgwNy4uZmM0MTBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9NYWtlZmlsZQpAQCAtNCw0ICs0LDUgQEAKIAogIyBPTUFQMi8zIERpc3BsYXkgZHJpdmVyCiBvbWFwLXZvdXQteSA6PSBvbWFwX3ZvdXQubyBvbWFwX3ZvdXRsaWIubworb21hcC12b3V0LSQoQ09ORklHX1ZJREVPX09NQVAyX1ZPVVRfVlJGQikgKz0gb21hcF92b3V0X3ZyZmIubwogb2JqLSQoQ09ORklHX1ZJREVPX09NQVAyX1ZPVVQpICs9IG9tYXAtdm91dC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0LmMKaW5kZXggYTY0Nzg5NC4uYjVlZjM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXQuYwpAQCAtMzUsMjggKzM1LDI2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlIDxwbGF0L2RtYS5oPgotI2luY2x1ZGUgPHBsYXQvdnJhbS5oPgogI2luY2x1ZGUgPHBsYXQvdnJmYi5oPgogI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KIAogI2luY2x1ZGUgIm9tYXBfdm91dGxpYi5oIgogI2luY2x1ZGUgIm9tYXBfdm91dGRlZi5oIgorI2luY2x1ZGUgIm9tYXBfdm91dF92cmZiLmgiCiAKIE1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgVmlkZW8gZm9yIExpbnV4IFZpZGVvIG91dCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCiAvKiBEcml2ZXIgQ29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNkZWZpbmUgVk9VVF9OQU1FCQkib21hcF92b3V0IgogCkBAIC02NSwzMSArNjMsNiBAQAogCU9NQVBfVklERU8yLAogfTsKIAotZW51bSBkbWFfY2hhbm5lbF9zdGF0ZSB7Ci0JRE1BX0NIQU5fTk9UX0FMTE9URUQsCi0JRE1BX0NIQU5fQUxMT1RFRCwKLX07Ci0KLSNkZWZpbmUgUVFWR0FfV0lEVEgJCTE2MAotI2RlZmluZSBRUVZHQV9IRUlHSFQJCTEyMAotCi0vKiBNYXggUmVzb2x1dGlvbiBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotI2RlZmluZSBWSURfTUFYX1dJRFRICQkxMjgwCS8qIExhcmdlc3Qgd2lkdGggKi8KLSNkZWZpbmUgVklEX01BWF9IRUlHSFQJCTcyMAkvKiBMYXJnZXN0IGhlaWdodCAqLwotCi0vKiBNaW1pbXVtIHJlcXVpcmVtZW50IGlzIDJ4MiBmb3IgRFNTICovCi0jZGVmaW5lIFZJRF9NSU5fV0lEVEgJCTIKLSNkZWZpbmUgVklEX01JTl9IRUlHSFQJCTIKLQotLyogMjA0OCB4IDIwNDggaXMgbWF4IHJlcyBzdXBwb3J0ZWQgYnkgT01BUCBkaXNwbGF5IGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgTUFYX1BJWEVMU19QRVJfTElORSAgICAgMjA0OAotCi0jZGVmaW5lIFZSRkJfVFhfVElNRU9VVCAgICAgICAgIDEwMDAKLSNkZWZpbmUgVlJGQl9OVU1fQlVGUwkJNAotCi0vKiBNYXggYnVmZmVyIHNpemUgdG9iZSBhbGxvY2F0ZWQgZHVyaW5nIGluaXQgKi8KLSNkZWZpbmUgT01BUF9WT1VUX01BWF9CVUZfU0laRSAoVklEX01BWF9XSURUSCpWSURfTUFYX0hFSUdIVCo0KQotCiBzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aWRlb192YnFfb3BzOwogLyogVmFyaWFibGVzIGNvbmZpZ3VyYWJsZSB0aHJvdWdoIG1vZHVsZSBwYXJhbXMqLwogc3RhdGljIHUzMiB2aWRlbzFfbnVtYnVmZmVycyA9IDM7CkBAIC0xNzIsODQgKzE0NSw2IEBACiAjZGVmaW5lIE5VTV9PVVRQVVRfRk9STUFUUyAoQVJSQVlfU0laRShvbWFwX2Zvcm1hdHMpKQogCiAvKgotICogQWxsb2NhdGUgYnVmZmVycwotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3ZvdXRfYWxsb2NfYnVmZmVyKHUzMiBidWZfc2l6ZSwgdTMyICpwaHlzX2FkZHIpCi17Ci0JdTMyIG9yZGVyLCBzaXplOwotCXVuc2lnbmVkIGxvbmcgdmlydF9hZGRyLCBhZGRyOwotCi0Jc2l6ZSA9IFBBR0VfQUxJR04oYnVmX3NpemUpOwotCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwotCXZpcnRfYWRkciA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIG9yZGVyKTsKLQlhZGRyID0gdmlydF9hZGRyOwotCi0JaWYgKHZpcnRfYWRkcikgewotCQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JCQlzaXplIC09IFBBR0VfU0laRTsKLQkJfQotCX0KLQkqcGh5c19hZGRyID0gKHUzMikgdmlydF90b19waHlzKCh2b2lkICopIHZpcnRfYWRkcik7Ci0JcmV0dXJuIHZpcnRfYWRkcjsKLX0KLQotLyoKLSAqIEZyZWUgYnVmZmVycwotICovCi1zdGF0aWMgdm9pZCBvbWFwX3ZvdXRfZnJlZV9idWZmZXIodW5zaWduZWQgbG9uZyB2aXJ0YWRkciwgdTMyIGJ1Zl9zaXplKQotewotCXUzMiBvcmRlciwgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSB2aXJ0YWRkcjsKLQotCXNpemUgPSBQQUdFX0FMSUdOKGJ1Zl9zaXplKTsKLQlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKLQotCXdoaWxlIChzaXplID4gMCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHZpcnRhZGRyLCBvcmRlcik7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbiBmb3IgYWxsb2NhdGluZyB2aWRlbyBidWZmZXJzCi0gKi8KLXN0YXRpYyBpbnQgb21hcF92b3V0X2FsbG9jYXRlX3ZyZmJfYnVmZmVycyhzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCwKLQkJdW5zaWduZWQgaW50ICpjb3VudCwgaW50IHN0YXJ0aW5kZXgpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKmNvdW50OyBpKyspIHsKLQkJaWYgKCF2b3V0LT5zbXNzaGFkb192aXJ0X2FkZHJbaV0pIHsKLQkJCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSA9Ci0JCQkJb21hcF92b3V0X2FsbG9jX2J1ZmZlcih2b3V0LT5zbXNzaGFkb19zaXplLAotCQkJCQkJJnZvdXQtPnNtc3NoYWRvX3BoeV9hZGRyW2ldKTsKLQkJfQotCQlpZiAoIXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSAmJiBzdGFydGluZGV4ICE9IC0xKSB7Ci0JCQlpZiAoVjRMMl9NRU1PUllfTU1BUCA9PSB2b3V0LT5tZW1vcnkgJiYgaSA+PSBzdGFydGluZGV4KQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICghdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2ldKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQkJb21hcF92b3V0X2ZyZWVfYnVmZmVyKAotCQkJCQkJdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2pdLAotCQkJCQkJdm91dC0+c21zc2hhZG9fc2l6ZSk7Ci0JCQkJdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2pdID0gMDsKLQkJCQl2b3V0LT5zbXNzaGFkb19waHlfYWRkcltqXSA9IDA7Ci0JCQl9Ci0JCQkqY291bnQgPSAwOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJbWVtc2V0KCh2b2lkICopIHZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSwgMCwKLQkJCQl2b3V0LT5zbXNzaGFkb19zaXplKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBUcnkgZm9ybWF0CiAgKi8KIHN0YXRpYyBpbnQgb21hcF92b3V0X3RyeV9mb3JtYXQoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4KQpAQCAtMzQyLDczICsyMzcsOSBAQAogfQogCiAvKgotICogV2FrZXMgdXAgdGhlIGFwcGxpY2F0aW9uIG9uY2UgdGhlIERNQSB0cmFuc2ZlciB0byBWUkZCIHNwYWNlIGlzIGNvbXBsZXRlZC4KLSAqLwotc3RhdGljIHZvaWQgb21hcF92b3V0X3ZyZmJfZG1hX3R4X2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHZpZF92cmZiX2RtYSAqdCA9IChzdHJ1Y3QgdmlkX3ZyZmJfZG1hICopIGRhdGE7Ci0KLQl0LT50eF9zdGF0dXMgPSAxOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdC0+d2FpdCk7Ci19Ci0KLS8qCi0gKiBSZWxlYXNlIHRoZSBWUkZCIGNvbnRleHQgb25jZSB0aGUgbW9kdWxlIGV4aXRzCi0gKi8KLXN0YXRpYyB2b2lkIG9tYXBfdm91dF9yZWxlYXNlX3ZyZmIoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVlJGQl9OVU1fQlVGUzsgaSsrKQotCQlvbWFwX3ZyZmJfcmVsZWFzZV9jdHgoJnZvdXQtPnZyZmJfY29udGV4dFtpXSk7Ci0KLQlpZiAodm91dC0+dnJmYl9kbWFfdHgucmVxX3N0YXR1cyA9PSBETUFfQ0hBTl9BTExPVEVEKSB7Ci0JCXZvdXQtPnZyZmJfZG1hX3R4LnJlcV9zdGF0dXMgPSBETUFfQ0hBTl9OT1RfQUxMT1RFRDsKLQkJb21hcF9mcmVlX2RtYSh2b3V0LT52cmZiX2RtYV90eC5kbWFfY2gpOwotCX0KLX0KLQotLyoKLSAqIFJldHVybiB0cnVlIGlmIHJvdGF0aW9uIGlzIDkwIG9yIDI3MAotICovCi1zdGF0aWMgaW5saW5lIGludCByb3RhdGVfOTBfb3JfMjcwKGNvbnN0IHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQotewotCXJldHVybiAodm91dC0+cm90YXRpb24gPT0gZHNzX3JvdGF0aW9uXzkwX2RlZ3JlZSB8fAotCQkJdm91dC0+cm90YXRpb24gPT0gZHNzX3JvdGF0aW9uXzI3MF9kZWdyZWUpOwotfQotCi0vKgotICogUmV0dXJuIHRydWUgaWYgcm90YXRpb24gaXMgZW5hYmxlZAotICovCi1zdGF0aWMgaW5saW5lIGludCByb3RhdGlvbl9lbmFibGVkKGNvbnN0IHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQotewotCXJldHVybiB2b3V0LT5yb3RhdGlvbiB8fCB2b3V0LT5taXJyb3I7Ci19Ci0KLS8qCi0gKiBSZXZlcnNlIHRoZSByb3RhdGlvbiBkZWdyZWUgaWYgbWlycm9yaW5nIGlzIGVuYWJsZWQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgY2FsY19yb3RhdGlvbihjb25zdCBzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKLXsKLQlpZiAoIXZvdXQtPm1pcnJvcikKLQkJcmV0dXJuIHZvdXQtPnJvdGF0aW9uOwotCi0Jc3dpdGNoICh2b3V0LT5yb3RhdGlvbikgewotCWNhc2UgZHNzX3JvdGF0aW9uXzkwX2RlZ3JlZToKLQkJcmV0dXJuIGRzc19yb3RhdGlvbl8yNzBfZGVncmVlOwotCWNhc2UgZHNzX3JvdGF0aW9uXzI3MF9kZWdyZWU6Ci0JCXJldHVybiBkc3Nfcm90YXRpb25fOTBfZGVncmVlOwotCWNhc2UgZHNzX3JvdGF0aW9uXzE4MF9kZWdyZWU6Ci0JCXJldHVybiBkc3Nfcm90YXRpb25fMF9kZWdyZWU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGRzc19yb3RhdGlvbl8xODBfZGVncmVlOwotCX0KLX0KLQotLyoKICAqIEZyZWUgdGhlIFY0TDIgYnVmZmVycwogICovCi1zdGF0aWMgdm9pZCBvbWFwX3ZvdXRfZnJlZV9idWZmZXJzKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQordm9pZCBvbWFwX3ZvdXRfZnJlZV9idWZmZXJzKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQogewogCWludCBpLCBudW1idWZmZXJzOwogCkBAIC00MjUsNTIgKzI1Niw2IEBACiB9CiAKIC8qCi0gKiBGcmVlIFZSRkIgYnVmZmVycwotICovCi1zdGF0aWMgdm9pZCBvbWFwX3ZvdXRfZnJlZV92cmZiX2J1ZmZlcnMoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpCi17Ci0JaW50IGo7Ci0KLQlmb3IgKGogPSAwOyBqIDwgVlJGQl9OVU1fQlVGUzsgaisrKSB7Ci0JCW9tYXBfdm91dF9mcmVlX2J1ZmZlcih2b3V0LT5zbXNzaGFkb192aXJ0X2FkZHJbal0sCi0JCQkJdm91dC0+c21zc2hhZG9fc2l6ZSk7Ci0JCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltqXSA9IDA7Ci0JCXZvdXQtPnNtc3NoYWRvX3BoeV9hZGRyW2pdID0gMDsKLQl9Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSB0aGUgYnVmZmVycyBmb3IgdGhlIFZSRkIgc3BhY2UuICBEYXRhIGlzIGNvcGllZCBmcm9tIFY0TDIKLSAqIGJ1ZmZlcnMgdG8gdGhlIFZSRkIgYnVmZmVycyB1c2luZyB0aGUgRE1BIGVuZ2luZS4KLSAqLwotc3RhdGljIGludCBvbWFwX3ZvdXRfdnJmYl9idWZmZXJfc2V0dXAoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQsCi0JCQkgIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCBzdGFydGluZGV4KQotewotCWludCBpOwotCWJvb2wgeXV2X21vZGU7Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgVlJGQiBidWZmZXJzIG9ubHkgaWYgdGhlIGJ1ZmZlcnMgYXJlIG5vdAotCSAqIGFsbG9jYXRlZCBkdXJpbmcgaW5pdCB0aW1lLgotCSAqLwotCWlmICgocm90YXRpb25fZW5hYmxlZCh2b3V0KSkgJiYgIXZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24pCi0JCWlmIChvbWFwX3ZvdXRfYWxsb2NhdGVfdnJmYl9idWZmZXJzKHZvdXQsIGNvdW50LCBzdGFydGluZGV4KSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKHZvdXQtPmRzc19tb2RlID09IE9NQVBfRFNTX0NPTE9SX1lVVjIgfHwKLQkJCXZvdXQtPmRzc19tb2RlID09IE9NQVBfRFNTX0NPTE9SX1VZVlkpCi0JCXl1dl9tb2RlID0gdHJ1ZTsKLQllbHNlCi0JCXl1dl9tb2RlID0gZmFsc2U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKmNvdW50OyBpKyspCi0JCW9tYXBfdnJmYl9zZXR1cCgmdm91dC0+dnJmYl9jb250ZXh0W2ldLAotCQkJCXZvdXQtPnNtc3NoYWRvX3BoeV9hZGRyW2ldLCB2b3V0LT5waXgud2lkdGgsCi0JCQkJdm91dC0+cGl4LmhlaWdodCwgdm91dC0+YnBwLCB5dXZfbW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIENvbnZlcnQgVjRMMiByb3RhdGlvbiB0byBEU1Mgcm90YXRpb24KICAqCVY0TDIgdW5kZXJzdGFuZCAwLCA5MCwgMTgwLCAyNzAuCiAgKglDb252ZXJ0IHRvIDAsIDEsIDIgYW5kIDMgcmVzcGVjdGl2ZWx5IGZvciBEU1MKQEAgLTQ5OSwxMjQgKzI4NCwzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBDYWxjdWxhdGUgdGhlIGJ1ZmZlciBvZmZzZXRzIGZyb20gd2hpY2ggdGhlIHN0cmVhbWluZyBzaG91bGQKLSAqIHN0YXJ0LiBUaGlzIG9mZnNldCBjYWxjdWxhdGlvbiBpcyBtYWlubHkgcmVxdWlyZWQgYmVjYXVzZSBvZgotICogdGhlIFZSRkIgMzIgcGl4ZWxzIGFsaWdubWVudCB3aXRoIHJvdGF0aW9uLgotICovCiBzdGF0aWMgaW50IG9tYXBfdm91dF9jYWxjdWxhdGVfb2Zmc2V0KHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQogewotCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92bDsKLQllbnVtIGRzc19yb3RhdGlvbiByb3RhdGlvbjsKIAlzdHJ1Y3Qgb21hcHZpZGVvX2luZm8gKm92aWQ7Ci0JYm9vbCBtaXJyb3JpbmcgPSB2b3V0LT5taXJyb3I7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqY3VyX2Rpc3BsYXk7CiAJc3RydWN0IHY0bDJfcmVjdCAqY3JvcCA9ICZ2b3V0LT5jcm9wOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZ2b3V0LT5waXg7CiAJaW50ICpjcm9wcGVkX29mZnNldCA9ICZ2b3V0LT5jcm9wcGVkX29mZnNldDsKLQlpbnQgdnJfcHMgPSAxLCBwcyA9IDIsIHRlbXBfcHMgPSAyOwotCWludCBvZmZzZXQgPSAwLCBjdG9wID0gMCwgY2xlZnQgPSAwLCBsaW5lX2xlbmd0aCA9IDA7CisJaW50IHBzID0gMiwgbGluZV9sZW5ndGggPSAwOwogCiAJb3ZpZCA9ICZ2b3V0LT52aWRfaW5mbzsKLQlvdmwgPSBvdmlkLT5vdmVybGF5c1swXTsKLQkvKiBnZXQgdGhlIGRpc3BsYXkgZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBvdmVybGF5ICovCi0JaWYgKCFvdmwtPm1hbmFnZXIgfHwgIW92bC0+bWFuYWdlci0+ZGV2aWNlKQotCQlyZXR1cm4gLTE7CiAKLQljdXJfZGlzcGxheSA9IG92bC0+bWFuYWdlci0+ZGV2aWNlOwotCXJvdGF0aW9uID0gY2FsY19yb3RhdGlvbih2b3V0KTsKLQotCWlmIChWNEwyX1BJWF9GTVRfWVVZViA9PSBwaXgtPnBpeGVsZm9ybWF0IHx8Ci0JCQlWNEwyX1BJWF9GTVRfVVlWWSA9PSBwaXgtPnBpeGVsZm9ybWF0KSB7Ci0JCWlmIChyb3RhdGlvbl9lbmFibGVkKHZvdXQpKSB7Ci0JCQkvKgotCQkJICogcHMgICAgLSBBY3R1YWwgcGl4ZWwgc2l6ZSBmb3IgWVVZVi9VWVZZIGZvcgotCQkJICogICAgICAgICBWUkZCL01pcnJvcmluZyBpcyA0IGJ5dGVzCi0JCQkgKiB2cl9wcyAtIFZpcnR1YWxseSBwaXhlbCBzaXplIGZvciBZVVlWL1VZVlkgaXMKLQkJCSAqICAgICAgICAgMiBieXRlcwotCQkJICovCi0JCQlwcyA9IDQ7Ci0JCQl2cl9wcyA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQlwcyA9IDI7CS8qIG90aGVyd2lzZSB0aGUgcGl4ZWwgc2l6ZSBpcyAyIGJ5dGUgKi8KLQkJfQotCX0gZWxzZSBpZiAoVjRMMl9QSVhfRk1UX1JHQjMyID09IHBpeC0+cGl4ZWxmb3JtYXQpIHsKLQkJcHMgPSA0OwotCX0gZWxzZSBpZiAoVjRMMl9QSVhfRk1UX1JHQjI0ID09IHBpeC0+cGl4ZWxmb3JtYXQpIHsKLQkJcHMgPSAzOwotCX0KLQl2b3V0LT5wcyA9IHBzOwotCXZvdXQtPnZyX3BzID0gdnJfcHM7Ci0KLQlpZiAocm90YXRpb25fZW5hYmxlZCh2b3V0KSkgewotCQlsaW5lX2xlbmd0aCA9IE1BWF9QSVhFTFNfUEVSX0xJTkU7Ci0JCWN0b3AgPSAocGl4LT5oZWlnaHQgLSBjcm9wLT5oZWlnaHQpIC0gY3JvcC0+dG9wOwotCQljbGVmdCA9IChwaXgtPndpZHRoIC0gY3JvcC0+d2lkdGgpIC0gY3JvcC0+bGVmdDsKKwlpZiAob3ZpZC0+cm90YXRpb25fdHlwZSA9PSBWT1VUX1JPVF9WUkZCKSB7CisJCW9tYXBfdm91dF9jYWxjdWxhdGVfdnJmYl9vZmZzZXQodm91dCk7CiAJfSBlbHNlIHsKLQkJbGluZV9sZW5ndGggPSBwaXgtPndpZHRoOwotCX0KLQl2b3V0LT5saW5lX2xlbmd0aCA9IGxpbmVfbGVuZ3RoOwotCXN3aXRjaCAocm90YXRpb24pIHsKLQljYXNlIGRzc19yb3RhdGlvbl85MF9kZWdyZWU6Ci0JCW9mZnNldCA9IHZvdXQtPnZyZmJfY29udGV4dFswXS55b2Zmc2V0ICoKLQkJCXZvdXQtPnZyZmJfY29udGV4dFswXS5ieXRlc3BwOwotCQl0ZW1wX3BzID0gcHMgLyB2cl9wczsKLQkJaWYgKG1pcnJvcmluZyA9PSAwKSB7Ci0JCQkqY3JvcHBlZF9vZmZzZXQgPSBvZmZzZXQgKyBsaW5lX2xlbmd0aCAqCi0JCQkJdGVtcF9wcyAqIGNsZWZ0ICsgY3JvcC0+dG9wICogdGVtcF9wczsKLQkJfSBlbHNlIHsKLQkJCSpjcm9wcGVkX29mZnNldCA9IG9mZnNldCArIGxpbmVfbGVuZ3RoICogdGVtcF9wcyAqCi0JCQkJY2xlZnQgKyBjcm9wLT50b3AgKiB0ZW1wX3BzICsgKGxpbmVfbGVuZ3RoICoKLQkJCQkoKGNyb3AtPndpZHRoIC8gKHZyX3BzKSkgLSAxKSAqIHBzKTsKLQkJfQotCQlicmVhazsKLQljYXNlIGRzc19yb3RhdGlvbl8xODBfZGVncmVlOgotCQlvZmZzZXQgPSAoKE1BWF9QSVhFTFNfUEVSX0xJTkUgKiB2b3V0LT52cmZiX2NvbnRleHRbMF0ueW9mZnNldCAqCi0JCQl2b3V0LT52cmZiX2NvbnRleHRbMF0uYnl0ZXNwcCkgKwotCQkJKHZvdXQtPnZyZmJfY29udGV4dFswXS54b2Zmc2V0ICoKLQkJCXZvdXQtPnZyZmJfY29udGV4dFswXS5ieXRlc3BwKSk7Ci0JCWlmIChtaXJyb3JpbmcgPT0gMCkgewotCQkJKmNyb3BwZWRfb2Zmc2V0ID0gb2Zmc2V0ICsgKGxpbmVfbGVuZ3RoICogcHMgKiBjdG9wKSArCi0JCQkJKGNsZWZ0IC8gdnJfcHMpICogcHM7CisJCXZvdXQtPmxpbmVfbGVuZ3RoID0gbGluZV9sZW5ndGggPSBwaXgtPndpZHRoOwogCi0JCX0gZWxzZSB7Ci0JCQkqY3JvcHBlZF9vZmZzZXQgPSBvZmZzZXQgKyAobGluZV9sZW5ndGggKiBwcyAqIGN0b3ApICsKLQkJCQkoY2xlZnQgLyB2cl9wcykgKiBwcyArIChsaW5lX2xlbmd0aCAqCi0JCQkJKGNyb3AtPmhlaWdodCAtIDEpICogcHMpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgZHNzX3JvdGF0aW9uXzI3MF9kZWdyZWU6Ci0JCW9mZnNldCA9IE1BWF9QSVhFTFNfUEVSX0xJTkUgKiB2b3V0LT52cmZiX2NvbnRleHRbMF0ueG9mZnNldCAqCi0JCQl2b3V0LT52cmZiX2NvbnRleHRbMF0uYnl0ZXNwcDsKLQkJdGVtcF9wcyA9IHBzIC8gdnJfcHM7Ci0JCWlmIChtaXJyb3JpbmcgPT0gMCkgewotCQkJKmNyb3BwZWRfb2Zmc2V0ID0gb2Zmc2V0ICsgbGluZV9sZW5ndGggKgotCQkJICAgIHRlbXBfcHMgKiBjcm9wLT5sZWZ0ICsgY3RvcCAqIHBzOwotCQl9IGVsc2UgewotCQkJKmNyb3BwZWRfb2Zmc2V0ID0gb2Zmc2V0ICsgbGluZV9sZW5ndGggKgotCQkJCXRlbXBfcHMgKiBjcm9wLT5sZWZ0ICsgY3RvcCAqIHBzICsKLQkJCQkobGluZV9sZW5ndGggKiAoKGNyb3AtPndpZHRoIC8gdnJfcHMpIC0gMSkgKgotCQkJCSBwcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBkc3Nfcm90YXRpb25fMF9kZWdyZWU6Ci0JCWlmIChtaXJyb3JpbmcgPT0gMCkgewotCQkJKmNyb3BwZWRfb2Zmc2V0ID0gKGxpbmVfbGVuZ3RoICogcHMpICoKLQkJCQljcm9wLT50b3AgKyAoY3JvcC0+bGVmdCAvIHZyX3BzKSAqIHBzOwotCQl9IGVsc2UgewotCQkJKmNyb3BwZWRfb2Zmc2V0ID0gKGxpbmVfbGVuZ3RoICogcHMpICoKLQkJCQljcm9wLT50b3AgKyAoY3JvcC0+bGVmdCAvIHZyX3BzKSAqIHBzICsKLQkJCQkobGluZV9sZW5ndGggKiAoY3JvcC0+aGVpZ2h0IC0gMSkgKiBwcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKmNyb3BwZWRfb2Zmc2V0ID0gKGxpbmVfbGVuZ3RoICogcHMgKiBjcm9wLT50b3ApIC8KLQkJCXZyX3BzICsgKGNyb3AtPmxlZnQgKiBwcykgLyB2cl9wcyArCi0JCQkoKGNyb3AtPndpZHRoIC8gdnJfcHMpIC0gMSkgKiBwczsKLQkJYnJlYWs7CisJCWlmIChWNEwyX1BJWF9GTVRfWVVZViA9PSBwaXgtPnBpeGVsZm9ybWF0IHx8CisJCQlWNEwyX1BJWF9GTVRfVVlWWSA9PSBwaXgtPnBpeGVsZm9ybWF0KQorCQkJcHMgPSAyOworCQllbHNlIGlmIChWNEwyX1BJWF9GTVRfUkdCMzIgPT0gcGl4LT5waXhlbGZvcm1hdCkKKwkJCXBzID0gNDsKKwkJZWxzZSBpZiAoVjRMMl9QSVhfRk1UX1JHQjI0ID09IHBpeC0+cGl4ZWxmb3JtYXQpCisJCQlwcyA9IDM7CisKKwkJdm91dC0+cHMgPSBwczsKKworCQkqY3JvcHBlZF9vZmZzZXQgPSAobGluZV9sZW5ndGggKiBwcykgKgorCQkJY3JvcC0+dG9wICsgY3JvcC0+bGVmdCAqIHBzOwogCX0KKwogCXY0bDJfZGJnKDEsIGRlYnVnLCAmdm91dC0+dmlkX2Rldi0+djRsMl9kZXYsICIlcyBPZmZzZXQ6JXhcbiIsCi0JCQlfX2Z1bmNfXywgKmNyb3BwZWRfb2Zmc2V0KTsKKwkJCV9fZnVuY19fLCB2b3V0LT5jcm9wcGVkX29mZnNldCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDcgKzM2Myw3IEBACiAvKgogICogU2V0dXAgdGhlIG92ZXJsYXkKICAqLwotaW50IG9tYXB2aWRfc2V0dXBfb3ZlcmxheShzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCwKK3N0YXRpYyBpbnQgb21hcHZpZF9zZXR1cF9vdmVybGF5KHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LAogCQlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmwsIGludCBwb3N4LCBpbnQgcG9zeSwgaW50IG91dHcsCiAJCWludCBvdXRoLCB1MzIgYWRkcikKIHsKQEAgLTY4Nyw3ICszODYsNyBAQAogCS8qIFNldHVwIHRoZSBpbnB1dCBwbGFuZSBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bwogCSAqIHJvdGF0aW9uIHZhbHVlIHNlbGVjdGVkLgogCSAqLwotCWlmIChyb3RhdGVfOTBfb3JfMjcwKHZvdXQpKSB7CisJaWYgKGlzX3JvdGF0aW9uXzkwX29yXzI3MCh2b3V0KSkgewogCQljcm9waGVpZ2h0ID0gdm91dC0+Y3JvcC53aWR0aDsKIAkJY3JvcHdpZHRoID0gdm91dC0+Y3JvcC5oZWlnaHQ7CiAJCXBpeGhlaWdodCA9IHZvdXQtPnBpeC53aWR0aDsKQEAgLTcxMSw3ICs0MTAsNyBAQAogCWluZm8ub3V0X3dpZHRoID0gb3V0dzsKIAlpbmZvLm91dF9oZWlnaHQgPSBvdXRoOwogCWluZm8uZ2xvYmFsX2FscGhhID0gdm91dC0+d2luLmdsb2JhbF9hbHBoYTsKLQlpZiAoIXJvdGF0aW9uX2VuYWJsZWQodm91dCkpIHsKKwlpZiAoIWlzX3JvdGF0aW9uX2VuYWJsZWQodm91dCkpIHsKIAkJaW5mby5yb3RhdGlvbiA9IDA7CiAJCWluZm8ucm90YXRpb25fdHlwZSA9IE9NQVBfRFNTX1JPVF9ETUE7CiAJCWluZm8uc2NyZWVuX3dpZHRoID0gcGl4d2lkdGg7CkBAIC03NDQsNyArNDQzLDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBvdmVybGF5IHN0cnVjdHVyZQogICovCi1pbnQgb21hcHZpZF9pbml0KHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LCB1MzIgYWRkcikKK3N0YXRpYyBpbnQgb21hcHZpZF9pbml0KHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LCB1MzIgYWRkcikKIHsKIAlpbnQgcmV0ID0gMCwgaTsKIAlzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbjsKQEAgLTgwOSw3ICs1MDgsNyBAQAogLyoKICAqIEFwcGx5IHRoZSBjaGFuZ2VzIHNldCB0aGUgZ28gYml0IG9mIERTUwogICovCi1pbnQgb21hcHZpZF9hcHBseV9jaGFuZ2VzKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQorc3RhdGljIGludCBvbWFwdmlkX2FwcGx5X2NoYW5nZXMoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpCiB7CiAJaW50IGk7CiAJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwpAQCAtODI1LDcgKzUyNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb21hcF92b3V0X2lzcih2b2lkICphcmcsIHVuc2lnbmVkIGludCBpcnFzdGF0dXMpCitzdGF0aWMgdm9pZCBvbWFwX3ZvdXRfaXNyKHZvaWQgKmFyZywgdW5zaWduZWQgaW50IGlycXN0YXR1cykKIHsKIAlpbnQgcmV0OwogCXUzMiBhZGRyLCBmaWQ7CkBAIC04NDgsMTAgKzU0NywyMCBAQAogCiAJc3Bpbl9sb2NrKCZ2b3V0LT52YnFfbG9jayk7CiAJZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsdWUpOwotCWlmIChjdXJfZGlzcGxheS0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9EUEkpIHsKLQkJaWYgKCEoaXJxc3RhdHVzICYgRElTUENfSVJRX1ZTWU5DKSkKLQkJCWdvdG8gdm91dF9pc3JfZXJyOwogCisJaWYgKGN1cl9kaXNwbGF5LT50eXBlICE9IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpIHsKKwkJc3dpdGNoIChjdXJfZGlzcGxheS0+dHlwZSkgeworCQljYXNlIE9NQVBfRElTUExBWV9UWVBFX0RQSToKKwkJCWlmICghKGlycXN0YXR1cyAmIChESVNQQ19JUlFfVlNZTkMgfCBESVNQQ19JUlFfVlNZTkMyKSkpCisJCQkJZ290byB2b3V0X2lzcl9lcnI7CisJCQlicmVhazsKKwkJY2FzZSBPTUFQX0RJU1BMQVlfVFlQRV9IRE1JOgorCQkJaWYgKCEoaXJxc3RhdHVzICYgRElTUENfSVJRX0VWU1lOQ19FVkVOKSkKKwkJCQlnb3RvIHZvdXRfaXNyX2VycjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byB2b3V0X2lzcl9lcnI7CisJCX0KIAkJaWYgKCF2b3V0LT5maXJzdF9pbnQgJiYgKHZvdXQtPmN1cl9mcm0gIT0gdm91dC0+bmV4dF9mcm0pKSB7CiAJCQl2b3V0LT5jdXJfZnJtLT50cyA9IHRpbWV2YWx1ZTsKIAkJCXZvdXQtPmN1cl9mcm0tPnN0YXRlID0gVklERU9CVUZfRE9ORTsKQEAgLTg3NSw3ICs1ODQsNyBAQAogCQlyZXQgPSBvbWFwdmlkX2luaXQodm91dCwgYWRkcik7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9FUlIgVk9VVF9OQU1FCi0JCQkJCSJmYWlsZWQgdG8gc2V0IG92ZXJsYXkgaW5mb1xuIik7CisJCQkJImZhaWxlZCB0byBzZXQgb3ZlcmxheSBpbmZvXG4iKTsKIAkJLyogRW5hYmxlIHRoZSBwaXBlbGluZSBhbmQgc2V0IHRoZSBHbyBiaXQgKi8KIAkJcmV0ID0gb21hcHZpZF9hcHBseV9jaGFuZ2VzKHZvdXQpOwogCQlpZiAocmV0KQpAQCAtOTU0LDYgKzY2Myw3IEBACiAJaW50IHN0YXJ0aW5kZXggPSAwLCBpLCBqOwogCXUzMiBwaHlfYWRkciA9IDAsIHZpcnRfYWRkciA9IDA7CiAJc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQgPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IG9tYXB2aWRlb19pbmZvICpvdmlkID0gJnZvdXQtPnZpZF9pbmZvOwogCiAJaWYgKCF2b3V0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk2NiwxMyArNjc2LDEwIEBACiAJaWYgKFY0TDJfTUVNT1JZX01NQVAgPT0gdm91dC0+bWVtb3J5ICYmICpjb3VudCA8IHN0YXJ0aW5kZXgpCiAJCSpjb3VudCA9IHN0YXJ0aW5kZXg7CiAKLQlpZiAoKHJvdGF0aW9uX2VuYWJsZWQodm91dCkpICYmICpjb3VudCA+IFZSRkJfTlVNX0JVRlMpCi0JCSpjb3VudCA9IFZSRkJfTlVNX0JVRlM7Ci0KLQkvKiBJZiByb3RhdGlvbiBpcyBlbmFibGVkLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFZSRkIgc3BhY2UgYWxzbyAqLwotCWlmIChyb3RhdGlvbl9lbmFibGVkKHZvdXQpKQorCWlmIChvdmlkLT5yb3RhdGlvbl90eXBlID09IFZPVVRfUk9UX1ZSRkIpIHsKIAkJaWYgKG9tYXBfdm91dF92cmZiX2J1ZmZlcl9zZXR1cCh2b3V0LCBjb3VudCwgc3RhcnRpbmRleCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlpZiAoVjRMMl9NRU1PUllfTU1BUCAhPSB2b3V0LT5tZW1vcnkpCiAJCXJldHVybiAwOwpAQCAtOTk2LDggKzcwMywxMSBAQAogCQl2aXJ0X2FkZHIgPSBvbWFwX3ZvdXRfYWxsb2NfYnVmZmVyKHZvdXQtPmJ1ZmZlcl9zaXplLAogCQkJCSZwaHlfYWRkcik7CiAJCWlmICghdmlydF9hZGRyKSB7Ci0JCQlpZiAoIXJvdGF0aW9uX2VuYWJsZWQodm91dCkpCisJCQlpZiAob3ZpZC0+cm90YXRpb25fdHlwZSA9PSBWT1VUX1JPVF9OT05FKSB7CiAJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmICghaXNfcm90YXRpb25fZW5hYmxlZCh2b3V0KSkKKwkJCQkJYnJlYWs7CiAJCQkvKiBGcmVlIHRoZSBWUkZCIGJ1ZmZlcnMgaWYgbm8gc3BhY2UgZm9yIFY0TDIgYnVmZmVycyAqLwogCQkJZm9yIChqID0gaTsgaiA8ICpjb3VudDsgaisrKSB7CiAJCQkJb21hcF92b3V0X2ZyZWVfYnVmZmVyKApAQCAtMTAwNSw2ICs3MTUsNyBAQAogCQkJCQkJdm91dC0+c21zc2hhZG9fc2l6ZSk7CiAJCQkJdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2pdID0gMDsKIAkJCQl2b3V0LT5zbXNzaGFkb19waHlfYWRkcltqXSA9IDA7CisJCQkJfQogCQkJfQogCQl9CiAJCXZvdXQtPmJ1Zl92aXJ0X2FkZHJbaV0gPSB2aXJ0X2FkZHI7CkBAIC0xMDE3LDkgKzcyOCw5IEBACiAKIC8qCiAgKiBGcmVlIHRoZSBWNEwyIGJ1ZmZlcnMgYWRkaXRpb25hbGx5IGFsbG9jYXRlZCB0aGFuIGRlZmF1bHQKLSAqIG51bWJlciBvZiBidWZmZXJzIGFuZCBmcmVlIGFsbCB0aGUgVlJGQiBidWZmZXJzCisgKiBudW1iZXIgb2YgYnVmZmVycwogICovCi1zdGF0aWMgdm9pZCBvbWFwX3ZvdXRfZnJlZV9hbGxidWZmZXJzKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KQorc3RhdGljIHZvaWQgb21hcF92b3V0X2ZyZWVfZXh0cmFfYnVmZmVycyhzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKIHsKIAlpbnQgbnVtX2J1ZmZlcnMgPSAwLCBpOwogCkBAIC0xMDM0LDIwICs3NDUsNiBAQAogCQl2b3V0LT5idWZfdmlydF9hZGRyW2ldID0gMDsKIAkJdm91dC0+YnVmX3BoeV9hZGRyW2ldID0gMDsKIAl9Ci0JLyogRnJlZSB0aGUgVlJGQiBidWZmZXJzIG9ubHkgaWYgdGhleSBhcmUgYWxsb2NhdGVkCi0JICogZHVyaW5nIHJlcWJ1ZnMuICBEb24ndCBmcmVlIGlmIGluaXQgdGltZSBhbGxvY2F0ZWQKLQkgKi8KLQlpZiAoIXZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24pIHsKLQkJZm9yIChpID0gMDsgaSA8IFZSRkJfTlVNX0JVRlM7IGkrKykgewotCQkJaWYgKHZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSkgewotCQkJCW9tYXBfdm91dF9mcmVlX2J1ZmZlcigKLQkJCQkJCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSwKLQkJCQkJCXZvdXQtPnNtc3NoYWRvX3NpemUpOwotCQkJCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSA9IDA7Ci0JCQkJdm91dC0+c21zc2hhZG9fcGh5X2FkZHJbaV0gPSAwOwotCQkJfQotCQl9Ci0JfQogCXZvdXQtPmJ1ZmZlcl9hbGxvY2F0ZWQgPSBudW1fYnVmZmVyczsKIH0KIApAQCAtMTA1OSwxNiArNzU2LDExIEBACiAgKiBidWZmZXIgaW50byBWUkZCIG1lbW9yeSBzcGFjZSBiZWZvcmUgZ2l2aW5nIGl0IHRvIHRoZSBEU1MuCiAgKi8KIHN0YXRpYyBpbnQgb21hcF92b3V0X2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKLQkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKLQkJCSAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCisJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKLQlkbWFfYWRkcl90IGRtYWJ1ZjsKLQlzdHJ1Y3QgdmlkX3ZyZmJfZG1hICp0eDsKLQllbnVtIGRzc19yb3RhdGlvbiByb3RhdGlvbjsKIAlzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCA9IHEtPnByaXZfZGF0YTsKLQl1MzIgZGVzdF9mcmFtZV9pbmRleCA9IDAsIHNyY19lbGVtZW50X2luZGV4ID0gMDsKLQl1MzIgZGVzdF9lbGVtZW50X2luZGV4ID0gMCwgc3JjX2ZyYW1lX2luZGV4ID0gMDsKLQl1MzIgZWxlbV9jb3VudCA9IDAsIGZyYW1lX2NvdW50ID0gMCwgcGl4c2l6ZSA9IDI7CisJc3RydWN0IG9tYXB2aWRlb19pbmZvICpvdmlkID0gJnZvdXQtPnZpZF9pbmZvOwogCiAJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gdmItPnN0YXRlKSB7CiAJCXZiLT53aWR0aCA9IHZvdXQtPnBpeC53aWR0aDsKQEAgLTEwODcsNjYgKzc3OSwyNCBAQAogCQl2b3V0LT5xdWV1ZWRfYnVmX2FkZHJbdmItPmldID0gKHU4ICopCiAJCQlvbWFwX3ZvdXRfdXNlcnZpcnRfdG9fcGh5cyh2Yi0+YmFkZHIpOwogCX0gZWxzZSB7CisJCXUzMiBhZGRyLCBkbWFfYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgdm91dC0+YnVmX3ZpcnRfYWRkclt2Yi0+aV07CisJCXNpemUgPSAodW5zaWduZWQgbG9uZykgdmItPnNpemU7CisKKwkJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSh2b3V0LT52aWRfZGV2LT52NGwyX2Rldi5kZXYsICh2b2lkICopIGFkZHIsCisJCQkJc2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcih2b3V0LT52aWRfZGV2LT52NGwyX2Rldi5kZXYsIGRtYV9hZGRyKSkKKwkJCXY0bDJfZXJyKCZ2b3V0LT52aWRfZGV2LT52NGwyX2RldiwgImRtYV9tYXBfc2luZ2xlIGZhaWxlZFxuIik7CisKIAkJdm91dC0+cXVldWVkX2J1Zl9hZGRyW3ZiLT5pXSA9ICh1OCAqKXZvdXQtPmJ1Zl9waHlfYWRkclt2Yi0+aV07CiAJfQogCi0JaWYgKCFyb3RhdGlvbl9lbmFibGVkKHZvdXQpKQorCWlmIChvdmlkLT5yb3RhdGlvbl90eXBlID09IFZPVVRfUk9UX1ZSRkIpCisJCXJldHVybiBvbWFwX3ZvdXRfcHJlcGFyZV92cmZiKHZvdXQsIHZiKTsKKwllbHNlCiAJCXJldHVybiAwOwotCi0JZG1hYnVmID0gdm91dC0+YnVmX3BoeV9hZGRyW3ZiLT5pXTsKLQkvKiBJZiByb3RhdGlvbiBpcyBlbmFibGVkLCBjb3B5IGlucHV0IGJ1ZmZlciBpbnRvIFZSRkIKLQkgKiBtZW1vcnkgc3BhY2UgdXNpbmcgRE1BLiBXZSBhcmUgY29weWluZyBpbnB1dCBidWZmZXIKLQkgKiBpbnRvIFZSRkIgbWVtb3J5IHNwYWNlIG9mIGRlc2lyZWQgYW5nbGUgYW5kIERTUyB3aWxsCi0JICogcmVhZCBpbWFnZSBWUkZCIG1lbW9yeSBmb3IgMCBkZWdyZWUgYW5nbGUKLQkgKi8KLQlwaXhzaXplID0gdm91dC0+YnBwICogdm91dC0+dnJmYl9icHA7Ci0JLyoKLQkgKiBETUEgdHJhbnNmZXIgaW4gZG91YmxlIGluZGV4IG1vZGUKLQkgKi8KLQotCS8qIEZyYW1lIGluZGV4ICovCi0JZGVzdF9mcmFtZV9pbmRleCA9ICgoTUFYX1BJWEVMU19QRVJfTElORSAqIHBpeHNpemUpIC0KLQkJCSh2b3V0LT5waXgud2lkdGggKiB2b3V0LT5icHApKSArIDE7Ci0KLQkvKiBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBhcmFtZXRlcnMgKi8KLQlzcmNfZWxlbWVudF9pbmRleCA9IDA7Ci0Jc3JjX2ZyYW1lX2luZGV4ID0gMDsKLQlkZXN0X2VsZW1lbnRfaW5kZXggPSAxOwotCS8qIE51bWJlciBvZiBlbGVtZW50cyBwZXIgZnJhbWUgKi8KLQllbGVtX2NvdW50ID0gdm91dC0+cGl4LndpZHRoICogdm91dC0+YnBwOwotCWZyYW1lX2NvdW50ID0gdm91dC0+cGl4LmhlaWdodDsKLQl0eCA9ICZ2b3V0LT52cmZiX2RtYV90eDsKLQl0eC0+dHhfc3RhdHVzID0gMDsKLQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKHR4LT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCi0JCQkoZWxlbV9jb3VudCAvIDQpLCBmcmFtZV9jb3VudCwgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAotCQkJdHgtPmRldl9pZCwgMHgwKTsKLQkvKiBzcmNfcG9ydCByZXF1aXJlZCBvbmx5IGZvciBPTUFQMSAqLwotCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKHR4LT5kbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJZG1hYnVmLCBzcmNfZWxlbWVudF9pbmRleCwgc3JjX2ZyYW1lX2luZGV4KTsKLQkvKnNldCBkbWEgc291cmNlIGJ1cnN0IG1vZGUgZm9yIFZSRkIgKi8KLQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUodHgtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9CVVJTVF8xNik7Ci0Jcm90YXRpb24gPSBjYWxjX3JvdGF0aW9uKHZvdXQpOwotCi0JLyogZGVzdF9wb3J0IHJlcXVpcmVkIG9ubHkgZm9yIE9NQVAxICovCi0Jb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKHR4LT5kbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX0RPVUJMRV9JRFgsCi0JCQl2b3V0LT52cmZiX2NvbnRleHRbdmItPmldLnBhZGRyWzBdLCBkZXN0X2VsZW1lbnRfaW5kZXgsCi0JCQlkZXN0X2ZyYW1lX2luZGV4KTsKLQkvKnNldCBkbWEgZGVzdCBidXJzdCBtb2RlIGZvciBWUkZCICovCi0Jb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZSh0eC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKLQlvbWFwX2RtYV9zZXRfZ2xvYmFsX3BhcmFtcyhETUFfREVGQVVMVF9BUkJfUkFURSwgMHgyMCwgMCk7Ci0KLQlvbWFwX3N0YXJ0X2RtYSh0eC0+ZG1hX2NoKTsKLQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnR4LT53YWl0LCBWUkZCX1RYX1RJTUVPVVQpOwotCi0JaWYgKHR4LT50eF9zdGF0dXMgPT0gMCkgewotCQlvbWFwX3N0b3BfZG1hKHR4LT5kbWFfY2gpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogU3RvcmUgYnVmZmVycyBwaHlzaWNhbCBhZGRyZXNzIGludG8gYW4gYXJyYXkuIEFkZHJlc3NlcwotCSAqIGZyb20gdGhpcyBhcnJheSB3aWxsIGJlIHVzZWQgdG8gY29uZmlndXJlIERTUyAqLwotCXZvdXQtPnF1ZXVlZF9idWZfYWRkclt2Yi0+aV0gPSAodTggKikKLQkJdm91dC0+dnJmYl9jb250ZXh0W3ZiLT5pXS5wYWRkcltyb3RhdGlvbl07Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMjk4LDcgKzk0OCwxNSBAQAogCQkJCSJVbmFibGUgdG8gYXBwbHkgY2hhbmdlc1xuIik7CiAKIAkvKiBGcmVlIGFsbCBidWZmZXJzICovCi0Jb21hcF92b3V0X2ZyZWVfYWxsYnVmZmVycyh2b3V0KTsKKwlvbWFwX3ZvdXRfZnJlZV9leHRyYV9idWZmZXJzKHZvdXQpOworCisJLyogRnJlZSB0aGUgVlJGQiBidWZmZXJzIG9ubHkgaWYgdGhleSBhcmUgYWxsb2NhdGVkCisJICogZHVyaW5nIHJlcWJ1ZnMuICBEb24ndCBmcmVlIGlmIGluaXQgdGltZSBhbGxvY2F0ZWQKKwkgKi8KKwlpZiAob3ZpZC0+cm90YXRpb25fdHlwZSA9PSBWT1VUX1JPVF9WUkZCKSB7CisJCWlmICghdm91dC0+dnJmYl9zdGF0aWNfYWxsb2NhdGlvbikKKwkJCW9tYXBfdm91dF9mcmVlX3ZyZmJfYnVmZmVycyh2b3V0KTsKKwl9CiAJdmlkZW9idWZfbW1hcF9mcmVlKHEpOwogCiAJLyogRXZlbiBpZiBhcHBseSBjaGFuZ2VzIGZhaWxzIHdlIHNob3VsZCBjb250aW51ZQpAQCAtMTMwNyw3ICs5NjUsNyBAQAogCQl1MzIgbWFzayA9IDA7CiAKIAkJbWFzayA9IERJU1BDX0lSUV9WU1lOQyB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTiB8Ci0JCQlESVNQQ19JUlFfRVZTWU5DX09ERDsKKwkJCURJU1BDX0lSUV9FVlNZTkNfT0REIHwgRElTUENfSVJRX1ZTWU5DMjsKIAkJb21hcF9kaXNwY191bnJlZ2lzdGVyX2lzcihvbWFwX3ZvdXRfaXNyLCB2b3V0LCBtYXNrKTsKIAkJdm91dC0+c3RyZWFtaW5nID0gMDsKIApAQCAtMTM4MywxMCArMTA0MSw3IEBACiAJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCiB7CiAJaW50IGluZGV4ID0gZm10LT5pbmRleDsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZtdC0+dHlwZTsKIAotCWZtdC0+aW5kZXggPSBpbmRleDsKLQlmbXQtPnR5cGUgPSB0eXBlOwogCWlmIChpbmRleCA+PSBOVU1fT1VUUFVUX0ZPUk1BVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNDU3LDcgKzExMTIsNyBAQAogCiAJLyogV2UgZG9udCBzdXBwb3J0IFJHQjI0LXBhY2tlZCBtb2RlIGlmIHZyZmIgcm90YXRpb24KIAkgKiBpcyBlbmFibGVkKi8KLQlpZiAoKHJvdGF0aW9uX2VuYWJsZWQodm91dCkpICYmCisJaWYgKChpc19yb3RhdGlvbl9lbmFibGVkKHZvdXQpKSAmJgogCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCMjQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBzX2ZtdF92aWRfb3V0X2V4aXQ7CkBAIC0xNDY1LDcgKzExMjAsNyBAQAogCiAJLyogZ2V0IHRoZSBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzICovCiAKLQlpZiAocm90YXRlXzkwX29yXzI3MCh2b3V0KSkgeworCWlmIChpc19yb3RhdGlvbl85MF9vcl8yNzAodm91dCkpIHsKIAkJdm91dC0+ZmJ1Zi5mbXQuaGVpZ2h0ID0gdGltaW5nLT54X3JlczsKIAkJdm91dC0+ZmJ1Zi5mbXQud2lkdGggPSB0aW1pbmctPnlfcmVzOwogCX0gZWxzZSB7CkBAIC0xNTU1LDEwICsxMjEwLDcgQEAKIAkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCkKIHsKIAlpbnQgaW5kZXggPSBmbXQtPmluZGV4OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOwogCi0JZm10LT5pbmRleCA9IGluZGV4OwotCWZtdC0+dHlwZSA9IHR5cGU7CiAJaWYgKGluZGV4ID49IE5VTV9PVVRQVVRfRk9STUFUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE2NDUsNyArMTI5Nyw3IEBACiAJLyogZ2V0IHRoZSBkaXNwbGF5IGRldmljZSBhdHRhY2hlZCB0byB0aGUgb3ZlcmxheSAqLwogCXRpbWluZyA9ICZvdmwtPm1hbmFnZXItPmRldmljZS0+cGFuZWwudGltaW5nczsKIAotCWlmIChyb3RhdGVfOTBfb3JfMjcwKHZvdXQpKSB7CisJaWYgKGlzX3JvdGF0aW9uXzkwX29yXzI3MCh2b3V0KSkgewogCQl2b3V0LT5mYnVmLmZtdC5oZWlnaHQgPSB0aW1pbmctPnhfcmVzOwogCQl2b3V0LT5mYnVmLmZtdC53aWR0aCA9IHRpbWluZy0+eV9yZXM7CiAJfSBlbHNlIHsKQEAgLTE3MjUsOSArMTM3NywxNyBAQAogCXN3aXRjaCAoYS0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX1JPVEFURToKIAl7CisJCXN0cnVjdCBvbWFwdmlkZW9faW5mbyAqb3ZpZDsKIAkJaW50IHJvdGF0aW9uID0gYS0+dmFsdWU7CiAKKwkJb3ZpZCA9ICZ2b3V0LT52aWRfaW5mbzsKKwogCQltdXRleF9sb2NrKCZ2b3V0LT5sb2NrKTsKKwkJaWYgKHJvdGF0aW9uICYmIG92aWQtPnJvdGF0aW9uX3R5cGUgPT0gVk9VVF9ST1RfTk9ORSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2b3V0LT5sb2NrKTsKKwkJCXJldCA9IC1FUkFOR0U7CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChyb3RhdGlvbiAmJiB2b3V0LT5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjI0KSB7CiAJCQltdXRleF91bmxvY2soJnZvdXQtPmxvY2spOwpAQCAtMTc4Myw2ICsxNDQzLDExIEBACiAJCW92bCA9IG92aWQtPm92ZXJsYXlzWzBdOwogCiAJCW11dGV4X2xvY2soJnZvdXQtPmxvY2spOworCQlpZiAobWlycm9yICYmIG92aWQtPnJvdGF0aW9uX3R5cGUgPT0gVk9VVF9ST1RfTk9ORSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2b3V0LT5sb2NrKTsKKwkJCXJldCA9IC1FUkFOR0U7CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChtaXJyb3IgICYmIHZvdXQtPnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUkdCMjQpIHsKIAkJCW11dGV4X3VubG9jaygmdm91dC0+bG9jayk7CkBAIC0xODkzLDcgKzE1NTgsNyBAQAogCQl9CiAJfQogCi0JaWYgKChyb3RhdGlvbl9lbmFibGVkKHZvdXQpKSAmJgorCWlmICgoaXNfcm90YXRpb25fZW5hYmxlZCh2b3V0KSkgJiYKIAkJCXZvdXQtPnZyZmJfZG1hX3R4LnJlcV9zdGF0dXMgPT0gRE1BX0NIQU5fTk9UX0FMTE9URUQpIHsKIAkJdjRsMl93YXJuKCZ2b3V0LT52aWRfZGV2LT52NGwyX2RldiwKIAkJCQkiRE1BIENoYW5uZWwgbm90IGFsbG9jYXRlZCBmb3IgUm90YXRpb25cbiIpOwpAQCAtMTkwOCwxNSArMTU3MywyOCBAQAogCXN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0ID0gZmg7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJnZvdXQtPnZicTsKIAorCWludCByZXQ7CisJdTMyIGFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOworCisJdmIgPSBxLT5idWZzW2ItPmluZGV4XTsKKwogCWlmICghdm91dC0+c3RyZWFtaW5nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJLyogQ2FsbCB2aWRlb2J1Zl9kcWJ1ZiBmb3Igbm9uIGJsb2NraW5nIG1vZGUgKi8KLQkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKHEsIChzdHJ1Y3QgdjRsMl9idWZmZXIgKiliLCAxKTsKKwkJcmV0ID0gdmlkZW9idWZfZHFidWYocSwgKHN0cnVjdCB2NGwyX2J1ZmZlciAqKWIsIDEpOwogCWVsc2UKIAkJLyogQ2FsbCB2aWRlb2J1Zl9kcWJ1ZiBmb3IgIGJsb2NraW5nIG1vZGUgKi8KLQkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKHEsIChzdHJ1Y3QgdjRsMl9idWZmZXIgKiliLCAwKTsKKwkJcmV0ID0gdmlkZW9idWZfZHFidWYocSwgKHN0cnVjdCB2NGwyX2J1ZmZlciAqKWIsIDApOworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2b3V0LT5idWZfcGh5X2FkZHJbdmItPmldOworCXNpemUgPSAodW5zaWduZWQgbG9uZykgdmItPnNpemU7CisJZG1hX3VubWFwX3NpbmdsZSh2b3V0LT52aWRfZGV2LT52NGwyX2Rldi5kZXYsICBhZGRyLAorCQkJCXNpemUsIERNQV9UT19ERVZJQ0UpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCkBAIC0xOTY1LDcgKzE2NDMsOCBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgdm91dC0+cXVldWVkX2J1Zl9hZGRyW3ZvdXQtPmN1cl9mcm0tPmldCiAJCSsgdm91dC0+Y3JvcHBlZF9vZmZzZXQ7CiAKLQltYXNrID0gRElTUENfSVJRX1ZTWU5DIHwgRElTUENfSVJRX0VWU1lOQ19FVkVOIHwgRElTUENfSVJRX0VWU1lOQ19PREQ7CisJbWFzayA9IERJU1BDX0lSUV9WU1lOQyB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTiB8IERJU1BDX0lSUV9FVlNZTkNfT0RECisJCXwgRElTUENfSVJRX1ZTWU5DMjsKIAogCW9tYXBfZGlzcGNfcmVnaXN0ZXJfaXNyKG9tYXBfdm91dF9pc3IsIHZvdXQsIG1hc2spOwogCkBAIC0yMDE1LDcgKzE2OTQsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZvdXQtPnN0cmVhbWluZyA9IDA7Ci0JbWFzayA9IERJU1BDX0lSUV9WU1lOQyB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTiB8IERJU1BDX0lSUV9FVlNZTkNfT0REOworCW1hc2sgPSBESVNQQ19JUlFfVlNZTkMgfCBESVNQQ19JUlFfRVZTWU5DX0VWRU4gfCBESVNQQ19JUlFfRVZTWU5DX09ERAorCQl8IERJU1BDX0lSUV9WU1lOQzI7CiAKIAlvbWFwX2Rpc3BjX3VucmVnaXN0ZXJfaXNyKG9tYXBfdm91dF9pc3IsIHZvdXQsIG1hc2spOwogCkBAIC0yMjI4LDcgKzE5MDgsOCBAQAogCXZvdXQtPm1pcnJvciA9IDA7CiAJdm91dC0+Y29udHJvbFsyXS5pZCA9IFY0TDJfQ0lEX0hGTElQOwogCXZvdXQtPmNvbnRyb2xbMl0udmFsdWUgPSAwOwotCXZvdXQtPnZyZmJfYnBwID0gMjsKKwlpZiAodm91dC0+dmlkX2luZm8ucm90YXRpb25fdHlwZSA9PSBWT1VUX1JPVF9WUkZCKQorCQl2b3V0LT52cmZiX2JwcCA9IDI7CiAKIAljb250cm9sWzFdLmlkID0gVjRMMl9DSURfQkdfQ09MT1I7CiAJY29udHJvbFsxXS52YWx1ZSA9IDA7CkBAIC0yMjYwLDE3ICsxOTQxLDE1IEBACiAJCWludCB2aWRfbnVtKQogewogCXUzMiBudW1idWZmZXJzOwotCWludCByZXQgPSAwLCBpLCBqOwotCWludCBpbWFnZV93aWR0aCwgaW1hZ2VfaGVpZ2h0OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlpbnQgcmV0ID0gMCwgaTsKKwlzdHJ1Y3Qgb21hcHZpZGVvX2luZm8gKm92aWQ7CiAJc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQ7Ci0JaW50IHN0YXRpY192cmZiX2FsbG9jYXRpb24gPSAwLCB2cmZiX251bV9idWZzID0gVlJGQl9OVU1fQlVGUzsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9tYXAydmlkZW9fZGV2aWNlICp2aWRfZGV2ID0KIAkJY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgb21hcDJ2aWRlb19kZXZpY2UsIHY0bDJfZGV2KTsKIAogCXZvdXQgPSB2aWRfZGV2LT52b3V0c1t2aWRfbnVtXTsKLQl2ZmQgPSB2b3V0LT52ZmQ7CisJb3ZpZCA9ICZ2b3V0LT52aWRfaW5mbzsKIAogCW51bWJ1ZmZlcnMgPSAodmlkX251bSA9PSAwKSA/IHZpZGVvMV9udW1idWZmZXJzIDogdmlkZW8yX251bWJ1ZmZlcnM7CiAJdm91dC0+YnVmZmVyX3NpemUgPSAodmlkX251bSA9PSAwKSA/IHZpZGVvMV9idWZzaXplIDogdmlkZW8yX2J1ZnNpemU7CkBAIC0yMjg3LDY2ICsxOTY2LDE2IEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgVlJGQl9OVU1fQlVGUzsgaSsrKSB7Ci0JCWlmIChvbWFwX3ZyZmJfcmVxdWVzdF9jdHgoJnZvdXQtPnZyZmJfY29udGV4dFtpXSkpIHsKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICI6IFZSRkIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQlvbWFwX3ZyZmJfcmVsZWFzZV9jdHgoJnZvdXQtPnZyZmJfY29udGV4dFtqXSk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBmcmVlX2J1ZmZlcnM7Ci0JCX0KLQl9CiAJdm91dC0+Y3JvcHBlZF9vZmZzZXQgPSAwOwogCi0JLyogQ2FsY3VsYXRlIFZSRkIgbWVtb3J5IHNpemUgKi8KLQkvKiBhbGxvY2F0ZSBmb3Igd29yc3QgY2FzZSBzaXplICovCi0JaW1hZ2Vfd2lkdGggPSBWSURfTUFYX1dJRFRIIC8gVElMRV9TSVpFOwotCWlmIChWSURfTUFYX1dJRFRIICUgVElMRV9TSVpFKQotCQlpbWFnZV93aWR0aCsrOwotCi0JaW1hZ2Vfd2lkdGggPSBpbWFnZV93aWR0aCAqIFRJTEVfU0laRTsKLQlpbWFnZV9oZWlnaHQgPSBWSURfTUFYX0hFSUdIVCAvIFRJTEVfU0laRTsKLQotCWlmIChWSURfTUFYX0hFSUdIVCAlIFRJTEVfU0laRSkKLQkJaW1hZ2VfaGVpZ2h0Kys7Ci0KLQlpbWFnZV9oZWlnaHQgPSBpbWFnZV9oZWlnaHQgKiBUSUxFX1NJWkU7Ci0Jdm91dC0+c21zc2hhZG9fc2l6ZSA9IFBBR0VfQUxJR04oaW1hZ2Vfd2lkdGggKiBpbWFnZV9oZWlnaHQgKiAyICogMik7Ci0KLQkvKgotCSAqIFJlcXVlc3QgYW5kIEluaXRpYWxpemUgRE1BLCBmb3IgRE1BIGJhc2VkIFZSRkIgdHJhbnNmZXIKLQkgKi8KLQl2b3V0LT52cmZiX2RtYV90eC5kZXZfaWQgPSBPTUFQX0RNQV9OT19ERVZJQ0U7Ci0Jdm91dC0+dnJmYl9kbWFfdHguZG1hX2NoID0gLTE7Ci0Jdm91dC0+dnJmYl9kbWFfdHgucmVxX3N0YXR1cyA9IERNQV9DSEFOX0FMTE9URUQ7Ci0JcmV0ID0gb21hcF9yZXF1ZXN0X2RtYSh2b3V0LT52cmZiX2RtYV90eC5kZXZfaWQsICJWUkZCIERNQSBUWCIsCi0JCQlvbWFwX3ZvdXRfdnJmYl9kbWFfdHhfY2FsbGJhY2ssCi0JCQkodm9pZCAqKSAmdm91dC0+dnJmYl9kbWFfdHgsICZ2b3V0LT52cmZiX2RtYV90eC5kbWFfY2gpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXZvdXQtPnZyZmJfZG1hX3R4LnJlcV9zdGF0dXMgPSBETUFfQ0hBTl9OT1RfQUxMT1RFRDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIjogZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBDaGFubmVsIGZvciIKLQkJCQkiIHZpZGVvJWRcbiIsIHZmZC0+bWlub3IpOworCWlmIChvdmlkLT5yb3RhdGlvbl90eXBlID09IFZPVVRfUk9UX1ZSRkIpIHsKKwkJaW50IHN0YXRpY192cmZiX2FsbG9jYXRpb24gPSAodmlkX251bSA9PSAwKSA/CisJCQl2aWQxX3N0YXRpY192cmZiX2FsbG9jIDogdmlkMl9zdGF0aWNfdnJmYl9hbGxvYzsKKwkJcmV0ID0gb21hcF92b3V0X3NldHVwX3ZyZmJfYnVmcyhwZGV2LCB2aWRfbnVtLAorCQkJCXN0YXRpY192cmZiX2FsbG9jYXRpb24pOwogCX0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2b3V0LT52cmZiX2RtYV90eC53YWl0KTsKIAotCS8qIEFsbG9jYXRlIFZSRkIgYnVmZmVycyBpZiBzZWxlY3RlZCB0aHJvdWdoIGJvb3RhcmdzICovCi0Jc3RhdGljX3ZyZmJfYWxsb2NhdGlvbiA9ICh2aWRfbnVtID09IDApID8KLQkJdmlkMV9zdGF0aWNfdnJmYl9hbGxvYyA6IHZpZDJfc3RhdGljX3ZyZmJfYWxsb2M7Ci0KLQkvKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0aGUgVlJGQiBidWZmZXIgaXMgZG9uZSB0aHJvdWdoCi0JICAgY29tbWFuZHMgbGluZSBhcnVtZW50cyAqLwotCWlmIChzdGF0aWNfdnJmYl9hbGxvY2F0aW9uKSB7Ci0JCWlmIChvbWFwX3ZvdXRfYWxsb2NhdGVfdnJmYl9idWZmZXJzKHZvdXQsICZ2cmZiX251bV9idWZzLCAtMSkpIHsKLQkJCXJldCA9ICAtRU5PTUVNOwotCQkJZ290byByZWxlYXNlX3ZyZmJfY3R4OwotCQl9Ci0JCXZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24gPSAxOwotCX0KLQlyZXR1cm4gMDsKLQotcmVsZWFzZV92cmZiX2N0eDoKLQlmb3IgKGogPSAwOyBqIDwgVlJGQl9OVU1fQlVGUzsgaisrKQotCQlvbWFwX3ZyZmJfcmVsZWFzZV9jdHgoJnZvdXQtPnZyZmJfY29udGV4dFtqXSk7CisJcmV0dXJuIHJldDsKIAogZnJlZV9idWZmZXJzOgogCWZvciAoaSA9IDA7IGkgPCBudW1idWZmZXJzOyBpKyspIHsKQEAgLTIzODksNiArMjAxOCwxMCBAQAogCQl2b3V0LT52aWRfaW5mby5udW1fb3ZlcmxheXMgPSAxOwogCQl2b3V0LT52aWRfaW5mby5pZCA9IGsgKyAxOwogCisJCS8qIFNldCBWUkZCIGFzIHJvdGF0aW9uX3R5cGUgZm9yIG9tYXAyIGFuZCBvbWFwMyAqLworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCQl2b3V0LT52aWRfaW5mby5yb3RhdGlvbl90eXBlID0gVk9VVF9ST1RfVlJGQjsKKwogCQkvKiBTZXR1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgdmlkZW8gZGV2aWNlcwogCQkgKi8KIAkJaWYgKG9tYXBfdm91dF9zZXR1cF92aWRlb19kYXRhKHZvdXQpICE9IDApIHsKQEAgLTI0MjIsNyArMjA1NSw4IEBACiAJCQlnb3RvIHN1Y2Nlc3M7CiAKIGVycm9yMjoKLQkJb21hcF92b3V0X3JlbGVhc2VfdnJmYih2b3V0KTsKKwkJaWYgKHZvdXQtPnZpZF9pbmZvLnJvdGF0aW9uX3R5cGUgPT0gVk9VVF9ST1RfVlJGQikKKwkJCW9tYXBfdm91dF9yZWxlYXNlX3ZyZmIodm91dCk7CiAJCW9tYXBfdm91dF9mcmVlX2J1ZmZlcnModm91dCk7CiBlcnJvcjE6CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZmZCk7CkBAIC0yNDQzLDExICsyMDc3LDEzIEBACiBzdGF0aWMgdm9pZCBvbWFwX3ZvdXRfY2xlYW51cF9kZXZpY2Uoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCXN0cnVjdCBvbWFwdmlkZW9faW5mbyAqb3ZpZDsKIAogCWlmICghdm91dCkKIAkJcmV0dXJuOwogCiAJdmZkID0gdm91dC0+dmZkOworCW92aWQgPSAmdm91dC0+dmlkX2luZm87CiAJaWYgKHZmZCkgewogCQlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQodmZkKSkgewogCQkJLyoKQEAgLTI0NjMsMTQgKzIwOTksMTUgQEAKIAkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZmZCk7CiAJCX0KIAl9Ci0KLQlvbWFwX3ZvdXRfcmVsZWFzZV92cmZiKHZvdXQpOworCWlmIChvdmlkLT5yb3RhdGlvbl90eXBlID09IFZPVVRfUk9UX1ZSRkIpIHsKKwkJb21hcF92b3V0X3JlbGVhc2VfdnJmYih2b3V0KTsKKwkJLyogRnJlZSB0aGUgVlJGQiBidWZmZXIgaWYgYWxsb2NhdGVkCisJCSAqIGluaXQgdGltZQorCQkgKi8KKwkJaWYgKHZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24pCisJCQlvbWFwX3ZvdXRfZnJlZV92cmZiX2J1ZmZlcnModm91dCk7CisJfQogCW9tYXBfdm91dF9mcmVlX2J1ZmZlcnModm91dCk7Ci0JLyogRnJlZSB0aGUgVlJGQiBidWZmZXIgaWYgYWxsb2NhdGVkCi0JICogaW5pdCB0aW1lCi0JICovCi0JaWYgKHZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24pCi0JCW9tYXBfdm91dF9mcmVlX3ZyZmJfYnVmZmVycyh2b3V0KTsKIAogCWtmcmVlKHZvdXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dF92cmZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0X3ZyZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmViY2FjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRfdnJmYi5jCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogb21hcF92b3V0X3ZyZmIuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L3ZyZmIuaD4KKworI2luY2x1ZGUgIm9tYXBfdm91dGRlZi5oIgorI2luY2x1ZGUgIm9tYXBfdm91dGxpYi5oIgorCisvKgorICogRnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgdmlkZW8gYnVmZmVycworICovCitzdGF0aWMgaW50IG9tYXBfdm91dF9hbGxvY2F0ZV92cmZiX2J1ZmZlcnMoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQsCisJCXVuc2lnbmVkIGludCAqY291bnQsIGludCBzdGFydGluZGV4KQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8ICpjb3VudDsgaSsrKSB7CisJCWlmICghdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2ldKSB7CisJCQl2b3V0LT5zbXNzaGFkb192aXJ0X2FkZHJbaV0gPQorCQkJCW9tYXBfdm91dF9hbGxvY19idWZmZXIodm91dC0+c21zc2hhZG9fc2l6ZSwKKwkJCQkJCSZ2b3V0LT5zbXNzaGFkb19waHlfYWRkcltpXSk7CisJCX0KKwkJaWYgKCF2b3V0LT5zbXNzaGFkb192aXJ0X2FkZHJbaV0gJiYgc3RhcnRpbmRleCAhPSAtMSkgeworCQkJaWYgKFY0TDJfTUVNT1JZX01NQVAgPT0gdm91dC0+bWVtb3J5ICYmIGkgPj0gc3RhcnRpbmRleCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltpXSkgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJCW9tYXBfdm91dF9mcmVlX2J1ZmZlcigKKwkJCQkJCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltqXSwKKwkJCQkJCXZvdXQtPnNtc3NoYWRvX3NpemUpOworCQkJCXZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltqXSA9IDA7CisJCQkJdm91dC0+c21zc2hhZG9fcGh5X2FkZHJbal0gPSAwOworCQkJfQorCQkJKmNvdW50ID0gMDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCgodm9pZCAqKSB2b3V0LT5zbXNzaGFkb192aXJ0X2FkZHJbaV0sIDAsCisJCQkJdm91dC0+c21zc2hhZG9fc2l6ZSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV2FrZXMgdXAgdGhlIGFwcGxpY2F0aW9uIG9uY2UgdGhlIERNQSB0cmFuc2ZlciB0byBWUkZCIHNwYWNlIGlzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgb21hcF92b3V0X3ZyZmJfZG1hX3R4X2NhbGxiYWNrKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHZpZF92cmZiX2RtYSAqdCA9IChzdHJ1Y3QgdmlkX3ZyZmJfZG1hICopIGRhdGE7CisKKwl0LT50eF9zdGF0dXMgPSAxOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdC0+d2FpdCk7Cit9CisKKy8qCisgKiBGcmVlIFZSRkIgYnVmZmVycworICovCit2b2lkIG9tYXBfdm91dF9mcmVlX3ZyZmJfYnVmZmVycyhzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKK3sKKwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBWUkZCX05VTV9CVUZTOyBqKyspIHsKKwkJb21hcF92b3V0X2ZyZWVfYnVmZmVyKHZvdXQtPnNtc3NoYWRvX3ZpcnRfYWRkcltqXSwKKwkJCQl2b3V0LT5zbXNzaGFkb19zaXplKTsKKwkJdm91dC0+c21zc2hhZG9fdmlydF9hZGRyW2pdID0gMDsKKwkJdm91dC0+c21zc2hhZG9fcGh5X2FkZHJbal0gPSAwOworCX0KK30KKworaW50IG9tYXBfdm91dF9zZXR1cF92cmZiX2J1ZnMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHZpZF9udW0sCisJCQl1MzIgc3RhdGljX3ZyZmJfYWxsb2NhdGlvbikKK3sKKwlpbnQgcmV0ID0gMCwgaSwgajsKKwlzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQ7CisJaW50IHZyZmJfbnVtX2J1ZnMgPSBWUkZCX05VTV9CVUZTOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb21hcDJ2aWRlb19kZXZpY2UgKnZpZF9kZXYgPQorCQljb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBvbWFwMnZpZGVvX2RldmljZSwgdjRsMl9kZXYpOworCisJdm91dCA9IHZpZF9kZXYtPnZvdXRzW3ZpZF9udW1dOworCXZmZCA9IHZvdXQtPnZmZDsKKworCWZvciAoaSA9IDA7IGkgPCBWUkZCX05VTV9CVUZTOyBpKyspIHsKKwkJaWYgKG9tYXBfdnJmYl9yZXF1ZXN0X2N0eCgmdm91dC0+dnJmYl9jb250ZXh0W2ldKSkgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIjogVlJGQiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCW9tYXBfdnJmYl9yZWxlYXNlX2N0eCgmdm91dC0+dnJmYl9jb250ZXh0W2pdKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfYnVmZmVyczsKKwkJfQorCX0KKworCS8qIENhbGN1bGF0ZSBWUkZCIG1lbW9yeSBzaXplICovCisJLyogYWxsb2NhdGUgZm9yIHdvcnN0IGNhc2Ugc2l6ZSAqLworCWltYWdlX3dpZHRoID0gVklEX01BWF9XSURUSCAvIFRJTEVfU0laRTsKKwlpZiAoVklEX01BWF9XSURUSCAlIFRJTEVfU0laRSkKKwkJaW1hZ2Vfd2lkdGgrKzsKKworCWltYWdlX3dpZHRoID0gaW1hZ2Vfd2lkdGggKiBUSUxFX1NJWkU7CisJaW1hZ2VfaGVpZ2h0ID0gVklEX01BWF9IRUlHSFQgLyBUSUxFX1NJWkU7CisKKwlpZiAoVklEX01BWF9IRUlHSFQgJSBUSUxFX1NJWkUpCisJCWltYWdlX2hlaWdodCsrOworCisJaW1hZ2VfaGVpZ2h0ID0gaW1hZ2VfaGVpZ2h0ICogVElMRV9TSVpFOworCXZvdXQtPnNtc3NoYWRvX3NpemUgPSBQQUdFX0FMSUdOKGltYWdlX3dpZHRoICogaW1hZ2VfaGVpZ2h0ICogMiAqIDIpOworCisJLyoKKwkgKiBSZXF1ZXN0IGFuZCBJbml0aWFsaXplIERNQSwgZm9yIERNQSBiYXNlZCBWUkZCIHRyYW5zZmVyCisJICovCisJdm91dC0+dnJmYl9kbWFfdHguZGV2X2lkID0gT01BUF9ETUFfTk9fREVWSUNFOworCXZvdXQtPnZyZmJfZG1hX3R4LmRtYV9jaCA9IC0xOworCXZvdXQtPnZyZmJfZG1hX3R4LnJlcV9zdGF0dXMgPSBETUFfQ0hBTl9BTExPVEVEOworCXJldCA9IG9tYXBfcmVxdWVzdF9kbWEodm91dC0+dnJmYl9kbWFfdHguZGV2X2lkLCAiVlJGQiBETUEgVFgiLAorCQkJb21hcF92b3V0X3ZyZmJfZG1hX3R4X2NhbGxiYWNrLAorCQkJKHZvaWQgKikgJnZvdXQtPnZyZmJfZG1hX3R4LCAmdm91dC0+dnJmYl9kbWFfdHguZG1hX2NoKTsKKwlpZiAocmV0IDwgMCkgeworCQl2b3V0LT52cmZiX2RtYV90eC5yZXFfc3RhdHVzID0gRE1BX0NIQU5fTk9UX0FMTE9URUQ7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICI6IGZhaWxlZCB0byBhbGxvY2F0ZSBETUEgQ2hhbm5lbCBmb3IiCisJCQkJIiB2aWRlbyVkXG4iLCB2ZmQtPm1pbm9yKTsKKwl9CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdm91dC0+dnJmYl9kbWFfdHgud2FpdCk7CisKKwkvKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0aGUgVlJGQiBidWZmZXIgaXMgZG9uZSB0aHJvdWdoCisJICAgY29tbWFuZHMgbGluZSBhcnVtZW50cyAqLworCWlmIChzdGF0aWNfdnJmYl9hbGxvY2F0aW9uKSB7CisJCWlmIChvbWFwX3ZvdXRfYWxsb2NhdGVfdnJmYl9idWZmZXJzKHZvdXQsICZ2cmZiX251bV9idWZzLCAtMSkpIHsKKwkJCXJldCA9ICAtRU5PTUVNOworCQkJZ290byByZWxlYXNlX3ZyZmJfY3R4OworCQl9CisJCXZvdXQtPnZyZmJfc3RhdGljX2FsbG9jYXRpb24gPSAxOworCX0KKwlyZXR1cm4gMDsKKworcmVsZWFzZV92cmZiX2N0eDoKKwlmb3IgKGogPSAwOyBqIDwgVlJGQl9OVU1fQlVGUzsgaisrKQorCQlvbWFwX3ZyZmJfcmVsZWFzZV9jdHgoJnZvdXQtPnZyZmJfY29udGV4dFtqXSk7CitmcmVlX2J1ZmZlcnM6CisJb21hcF92b3V0X2ZyZWVfYnVmZmVycyh2b3V0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBWUkZCIGNvbnRleHQgb25jZSB0aGUgbW9kdWxlIGV4aXRzCisgKi8KK3ZvaWQgb21hcF92b3V0X3JlbGVhc2VfdnJmYihzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBWUkZCX05VTV9CVUZTOyBpKyspCisJCW9tYXBfdnJmYl9yZWxlYXNlX2N0eCgmdm91dC0+dnJmYl9jb250ZXh0W2ldKTsKKworCWlmICh2b3V0LT52cmZiX2RtYV90eC5yZXFfc3RhdHVzID09IERNQV9DSEFOX0FMTE9URUQpIHsKKwkJdm91dC0+dnJmYl9kbWFfdHgucmVxX3N0YXR1cyA9IERNQV9DSEFOX05PVF9BTExPVEVEOworCQlvbWFwX2ZyZWVfZG1hKHZvdXQtPnZyZmJfZG1hX3R4LmRtYV9jaCk7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBWUkZCIHNwYWNlLiAgRGF0YSBpcyBjb3BpZWQgZnJvbSBWNEwyCisgKiBidWZmZXJzIHRvIHRoZSBWUkZCIGJ1ZmZlcnMgdXNpbmcgdGhlIERNQSBlbmdpbmUuCisgKi8KK2ludCBvbWFwX3ZvdXRfdnJmYl9idWZmZXJfc2V0dXAoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQsCisJCQkgIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCBzdGFydGluZGV4KQoreworCWludCBpOworCWJvb2wgeXV2X21vZGU7CisKKwlpZiAoIWlzX3JvdGF0aW9uX2VuYWJsZWQodm91dCkpCisJCXJldHVybiAwOworCisJLyogSWYgcm90YXRpb24gaXMgZW5hYmxlZCwgYWxsb2NhdGUgbWVtb3J5IGZvciBWUkZCIHNwYWNlIGFsc28gKi8KKwkqY291bnQgPSAqY291bnQgPiBWUkZCX05VTV9CVUZTID8gVlJGQl9OVU1fQlVGUyA6ICpjb3VudDsKKworCS8qIEFsbG9jYXRlIHRoZSBWUkZCIGJ1ZmZlcnMgb25seSBpZiB0aGUgYnVmZmVycyBhcmUgbm90CisJICogYWxsb2NhdGVkIGR1cmluZyBpbml0IHRpbWUuCisJICovCisJaWYgKCF2b3V0LT52cmZiX3N0YXRpY19hbGxvY2F0aW9uKQorCQlpZiAob21hcF92b3V0X2FsbG9jYXRlX3ZyZmJfYnVmZmVycyh2b3V0LCBjb3VudCwgc3RhcnRpbmRleCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh2b3V0LT5kc3NfbW9kZSA9PSBPTUFQX0RTU19DT0xPUl9ZVVYyIHx8CisJCQl2b3V0LT5kc3NfbW9kZSA9PSBPTUFQX0RTU19DT0xPUl9VWVZZKQorCQl5dXZfbW9kZSA9IHRydWU7CisJZWxzZQorCQl5dXZfbW9kZSA9IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8ICpjb3VudDsgaSsrKQorCQlvbWFwX3ZyZmJfc2V0dXAoJnZvdXQtPnZyZmJfY29udGV4dFtpXSwKKwkJCQl2b3V0LT5zbXNzaGFkb19waHlfYWRkcltpXSwgdm91dC0+cGl4LndpZHRoLAorCQkJCXZvdXQtPnBpeC5oZWlnaHQsIHZvdXQtPmJwcCwgeXV2X21vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBvbWFwX3ZvdXRfcHJlcGFyZV92cmZiKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCWRtYV9hZGRyX3QgZG1hYnVmOworCXN0cnVjdCB2aWRfdnJmYl9kbWEgKnR4OworCWVudW0gZHNzX3JvdGF0aW9uIHJvdGF0aW9uOworCXUzMiBkZXN0X2ZyYW1lX2luZGV4ID0gMCwgc3JjX2VsZW1lbnRfaW5kZXggPSAwOworCXUzMiBkZXN0X2VsZW1lbnRfaW5kZXggPSAwLCBzcmNfZnJhbWVfaW5kZXggPSAwOworCXUzMiBlbGVtX2NvdW50ID0gMCwgZnJhbWVfY291bnQgPSAwLCBwaXhzaXplID0gMjsKKworCWlmICghaXNfcm90YXRpb25fZW5hYmxlZCh2b3V0KSkKKwkJcmV0dXJuIDA7CisKKwlkbWFidWYgPSB2b3V0LT5idWZfcGh5X2FkZHJbdmItPmldOworCS8qIElmIHJvdGF0aW9uIGlzIGVuYWJsZWQsIGNvcHkgaW5wdXQgYnVmZmVyIGludG8gVlJGQgorCSAqIG1lbW9yeSBzcGFjZSB1c2luZyBETUEuIFdlIGFyZSBjb3B5aW5nIGlucHV0IGJ1ZmZlcgorCSAqIGludG8gVlJGQiBtZW1vcnkgc3BhY2Ugb2YgZGVzaXJlZCBhbmdsZSBhbmQgRFNTIHdpbGwKKwkgKiByZWFkIGltYWdlIFZSRkIgbWVtb3J5IGZvciAwIGRlZ3JlZSBhbmdsZQorCSAqLworCXBpeHNpemUgPSB2b3V0LT5icHAgKiB2b3V0LT52cmZiX2JwcDsKKwkvKgorCSAqIERNQSB0cmFuc2ZlciBpbiBkb3VibGUgaW5kZXggbW9kZQorCSAqLworCisJLyogRnJhbWUgaW5kZXggKi8KKwlkZXN0X2ZyYW1lX2luZGV4ID0gKChNQVhfUElYRUxTX1BFUl9MSU5FICogcGl4c2l6ZSkgLQorCQkJKHZvdXQtPnBpeC53aWR0aCAqIHZvdXQtPmJwcCkpICsgMTsKKworCS8qIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gcGFyYW1ldGVycyAqLworCXNyY19lbGVtZW50X2luZGV4ID0gMDsKKwlzcmNfZnJhbWVfaW5kZXggPSAwOworCWRlc3RfZWxlbWVudF9pbmRleCA9IDE7CisJLyogTnVtYmVyIG9mIGVsZW1lbnRzIHBlciBmcmFtZSAqLworCWVsZW1fY291bnQgPSB2b3V0LT5waXgud2lkdGggKiB2b3V0LT5icHA7CisJZnJhbWVfY291bnQgPSB2b3V0LT5waXguaGVpZ2h0OworCXR4ID0gJnZvdXQtPnZyZmJfZG1hX3R4OworCXR4LT50eF9zdGF0dXMgPSAwOworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXModHgtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJCShlbGVtX2NvdW50IC8gNCksIGZyYW1lX2NvdW50LCBPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCisJCQl0eC0+ZGV2X2lkLCAweDApOworCS8qIHNyY19wb3J0IHJlcXVpcmVkIG9ubHkgZm9yIE9NQVAxICovCisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXModHgtPmRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQlkbWFidWYsIHNyY19lbGVtZW50X2luZGV4LCBzcmNfZnJhbWVfaW5kZXgpOworCS8qc2V0IGRtYSBzb3VyY2UgYnVyc3QgbW9kZSBmb3IgVlJGQiAqLworCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZSh0eC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwlyb3RhdGlvbiA9IGNhbGNfcm90YXRpb24odm91dCk7CisKKwkvKiBkZXN0X3BvcnQgcmVxdWlyZWQgb25seSBmb3IgT01BUDEgKi8KKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXModHgtPmRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWCwKKwkJCXZvdXQtPnZyZmJfY29udGV4dFt2Yi0+aV0ucGFkZHJbMF0sIGRlc3RfZWxlbWVudF9pbmRleCwKKwkJCWRlc3RfZnJhbWVfaW5kZXgpOworCS8qc2V0IGRtYSBkZXN0IGJ1cnN0IG1vZGUgZm9yIFZSRkIgKi8KKwlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHR4LT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCW9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKERNQV9ERUZBVUxUX0FSQl9SQVRFLCAweDIwLCAwKTsKKworCW9tYXBfc3RhcnRfZG1hKHR4LT5kbWFfY2gpOworCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmdHgtPndhaXQsIFZSRkJfVFhfVElNRU9VVCk7CisKKwlpZiAodHgtPnR4X3N0YXR1cyA9PSAwKSB7CisJCW9tYXBfc3RvcF9kbWEodHgtPmRtYV9jaCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBTdG9yZSBidWZmZXJzIHBoeXNpY2FsIGFkZHJlc3MgaW50byBhbiBhcnJheS4gQWRkcmVzc2VzCisJICogZnJvbSB0aGlzIGFycmF5IHdpbGwgYmUgdXNlZCB0byBjb25maWd1cmUgRFNTICovCisJdm91dC0+cXVldWVkX2J1Zl9hZGRyW3ZiLT5pXSA9ICh1OCAqKQorCQl2b3V0LT52cmZiX2NvbnRleHRbdmItPmldLnBhZGRyW3JvdGF0aW9uXTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgYnVmZmVyIG9mZnNldHMgZnJvbSB3aGljaCB0aGUgc3RyZWFtaW5nIHNob3VsZAorICogc3RhcnQuIFRoaXMgb2Zmc2V0IGNhbGN1bGF0aW9uIGlzIG1haW5seSByZXF1aXJlZCBiZWNhdXNlIG9mCisgKiB0aGUgVlJGQiAzMiBwaXhlbHMgYWxpZ25tZW50IHdpdGggcm90YXRpb24uCisgKi8KK3ZvaWQgb21hcF92b3V0X2NhbGN1bGF0ZV92cmZiX29mZnNldChzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKK3sKKwllbnVtIGRzc19yb3RhdGlvbiByb3RhdGlvbjsKKwlib29sIG1pcnJvcmluZyA9IHZvdXQtPm1pcnJvcjsKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wID0gJnZvdXQtPmNyb3A7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJnZvdXQtPnBpeDsKKwlpbnQgKmNyb3BwZWRfb2Zmc2V0ID0gJnZvdXQtPmNyb3BwZWRfb2Zmc2V0OworCWludCB2cl9wcyA9IDEsIHBzID0gMiwgdGVtcF9wcyA9IDI7CisJaW50IG9mZnNldCA9IDAsIGN0b3AgPSAwLCBjbGVmdCA9IDAsIGxpbmVfbGVuZ3RoID0gMDsKKworCXJvdGF0aW9uID0gY2FsY19yb3RhdGlvbih2b3V0KTsKKworCWlmIChWNEwyX1BJWF9GTVRfWVVZViA9PSBwaXgtPnBpeGVsZm9ybWF0IHx8CisJCQlWNEwyX1BJWF9GTVRfVVlWWSA9PSBwaXgtPnBpeGVsZm9ybWF0KSB7CisJCWlmIChpc19yb3RhdGlvbl9lbmFibGVkKHZvdXQpKSB7CisJCQkvKgorCQkJICogcHMgICAgLSBBY3R1YWwgcGl4ZWwgc2l6ZSBmb3IgWVVZVi9VWVZZIGZvcgorCQkJICogICAgICAgICBWUkZCL01pcnJvcmluZyBpcyA0IGJ5dGVzCisJCQkgKiB2cl9wcyAtIFZpcnR1YWxseSBwaXhlbCBzaXplIGZvciBZVVlWL1VZVlkgaXMKKwkJCSAqICAgICAgICAgMiBieXRlcworCQkJICovCisJCQlwcyA9IDQ7CisJCQl2cl9wcyA9IDI7CisJCX0gZWxzZSB7CisJCQlwcyA9IDI7CS8qIG90aGVyd2lzZSB0aGUgcGl4ZWwgc2l6ZSBpcyAyIGJ5dGUgKi8KKwkJfQorCX0gZWxzZSBpZiAoVjRMMl9QSVhfRk1UX1JHQjMyID09IHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwkJcHMgPSA0OworCX0gZWxzZSBpZiAoVjRMMl9QSVhfRk1UX1JHQjI0ID09IHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwkJcHMgPSAzOworCX0KKwl2b3V0LT5wcyA9IHBzOworCXZvdXQtPnZyX3BzID0gdnJfcHM7CisKKwlpZiAoaXNfcm90YXRpb25fZW5hYmxlZCh2b3V0KSkgeworCQlsaW5lX2xlbmd0aCA9IE1BWF9QSVhFTFNfUEVSX0xJTkU7CisJCWN0b3AgPSAocGl4LT5oZWlnaHQgLSBjcm9wLT5oZWlnaHQpIC0gY3JvcC0+dG9wOworCQljbGVmdCA9IChwaXgtPndpZHRoIC0gY3JvcC0+d2lkdGgpIC0gY3JvcC0+bGVmdDsKKwl9IGVsc2UgeworCQlsaW5lX2xlbmd0aCA9IHBpeC0+d2lkdGg7CisJfQorCXZvdXQtPmxpbmVfbGVuZ3RoID0gbGluZV9sZW5ndGg7CisJc3dpdGNoIChyb3RhdGlvbikgeworCWNhc2UgZHNzX3JvdGF0aW9uXzkwX2RlZ3JlZToKKwkJb2Zmc2V0ID0gdm91dC0+dnJmYl9jb250ZXh0WzBdLnlvZmZzZXQgKgorCQkJdm91dC0+dnJmYl9jb250ZXh0WzBdLmJ5dGVzcHA7CisJCXRlbXBfcHMgPSBwcyAvIHZyX3BzOworCQlpZiAobWlycm9yaW5nID09IDApIHsKKwkJCSpjcm9wcGVkX29mZnNldCA9IG9mZnNldCArIGxpbmVfbGVuZ3RoICoKKwkJCQl0ZW1wX3BzICogY2xlZnQgKyBjcm9wLT50b3AgKiB0ZW1wX3BzOworCQl9IGVsc2UgeworCQkJKmNyb3BwZWRfb2Zmc2V0ID0gb2Zmc2V0ICsgbGluZV9sZW5ndGggKiB0ZW1wX3BzICoKKwkJCQljbGVmdCArIGNyb3AtPnRvcCAqIHRlbXBfcHMgKyAobGluZV9sZW5ndGggKgorCQkJCSgoY3JvcC0+d2lkdGggLyAodnJfcHMpKSAtIDEpICogcHMpOworCQl9CisJCWJyZWFrOworCWNhc2UgZHNzX3JvdGF0aW9uXzE4MF9kZWdyZWU6CisJCW9mZnNldCA9ICgoTUFYX1BJWEVMU19QRVJfTElORSAqIHZvdXQtPnZyZmJfY29udGV4dFswXS55b2Zmc2V0ICoKKwkJCXZvdXQtPnZyZmJfY29udGV4dFswXS5ieXRlc3BwKSArCisJCQkodm91dC0+dnJmYl9jb250ZXh0WzBdLnhvZmZzZXQgKgorCQkJdm91dC0+dnJmYl9jb250ZXh0WzBdLmJ5dGVzcHApKTsKKwkJaWYgKG1pcnJvcmluZyA9PSAwKSB7CisJCQkqY3JvcHBlZF9vZmZzZXQgPSBvZmZzZXQgKyAobGluZV9sZW5ndGggKiBwcyAqIGN0b3ApICsKKwkJCQkoY2xlZnQgLyB2cl9wcykgKiBwczsKKworCQl9IGVsc2UgeworCQkJKmNyb3BwZWRfb2Zmc2V0ID0gb2Zmc2V0ICsgKGxpbmVfbGVuZ3RoICogcHMgKiBjdG9wKSArCisJCQkJKGNsZWZ0IC8gdnJfcHMpICogcHMgKyAobGluZV9sZW5ndGggKgorCQkJCShjcm9wLT5oZWlnaHQgLSAxKSAqIHBzKTsKKwkJfQorCQlicmVhazsKKwljYXNlIGRzc19yb3RhdGlvbl8yNzBfZGVncmVlOgorCQlvZmZzZXQgPSBNQVhfUElYRUxTX1BFUl9MSU5FICogdm91dC0+dnJmYl9jb250ZXh0WzBdLnhvZmZzZXQgKgorCQkJdm91dC0+dnJmYl9jb250ZXh0WzBdLmJ5dGVzcHA7CisJCXRlbXBfcHMgPSBwcyAvIHZyX3BzOworCQlpZiAobWlycm9yaW5nID09IDApIHsKKwkJCSpjcm9wcGVkX29mZnNldCA9IG9mZnNldCArIGxpbmVfbGVuZ3RoICoKKwkJCSAgICB0ZW1wX3BzICogY3JvcC0+bGVmdCArIGN0b3AgKiBwczsKKwkJfSBlbHNlIHsKKwkJCSpjcm9wcGVkX29mZnNldCA9IG9mZnNldCArIGxpbmVfbGVuZ3RoICoKKwkJCQl0ZW1wX3BzICogY3JvcC0+bGVmdCArIGN0b3AgKiBwcyArCisJCQkJKGxpbmVfbGVuZ3RoICogKChjcm9wLT53aWR0aCAvIHZyX3BzKSAtIDEpICoKKwkJCQkgcHMpOworCQl9CisJCWJyZWFrOworCWNhc2UgZHNzX3JvdGF0aW9uXzBfZGVncmVlOgorCQlpZiAobWlycm9yaW5nID09IDApIHsKKwkJCSpjcm9wcGVkX29mZnNldCA9IChsaW5lX2xlbmd0aCAqIHBzKSAqCisJCQkJY3JvcC0+dG9wICsgKGNyb3AtPmxlZnQgLyB2cl9wcykgKiBwczsKKwkJfSBlbHNlIHsKKwkJCSpjcm9wcGVkX29mZnNldCA9IChsaW5lX2xlbmd0aCAqIHBzKSAqCisJCQkJY3JvcC0+dG9wICsgKGNyb3AtPmxlZnQgLyB2cl9wcykgKiBwcyArCisJCQkJKGxpbmVfbGVuZ3RoICogKGNyb3AtPmhlaWdodCAtIDEpICogcHMpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpjcm9wcGVkX29mZnNldCA9IChsaW5lX2xlbmd0aCAqIHBzICogY3JvcC0+dG9wKSAvCisJCQl2cl9wcyArIChjcm9wLT5sZWZ0ICogcHMpIC8gdnJfcHMgKworCQkJKChjcm9wLT53aWR0aCAvIHZyX3BzKSAtIDEpICogcHM7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRfdnJmYi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dF92cmZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkZTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRfdnJmYi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBvbWFwX3ZvdXRfdnJmYi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICovCisKKyNpZm5kZWYgT01BUF9WT1VUX1ZSRkJfSAorI2RlZmluZSBPTUFQX1ZPVVRfVlJGQl9ICisKKyNpZmRlZiBDT05GSUdfVklERU9fT01BUDJfVk9VVF9WUkZCCit2b2lkIG9tYXBfdm91dF9mcmVlX3ZyZmJfYnVmZmVycyhzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCk7CitpbnQgb21hcF92b3V0X3NldHVwX3ZyZmJfYnVmcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmlkX251bSwKKwkJCXUzMiBzdGF0aWNfdnJmYl9hbGxvY2F0aW9uKTsKK3ZvaWQgb21hcF92b3V0X3JlbGVhc2VfdnJmYihzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCk7CitpbnQgb21hcF92b3V0X3ZyZmJfYnVmZmVyX3NldHVwKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LAorCQkJdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50IHN0YXJ0aW5kZXgpOworaW50IG9tYXBfdm91dF9wcmVwYXJlX3ZyZmIoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQsCisJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7Cit2b2lkIG9tYXBfdm91dF9jYWxjdWxhdGVfdnJmYl9vZmZzZXQoc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpOworI2Vsc2UKK3ZvaWQgb21hcF92b3V0X2ZyZWVfdnJmYl9idWZmZXJzKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0KSB7IH0KK2ludCBvbWFwX3ZvdXRfc2V0dXBfdnJmYl9idWZzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCB2aWRfbnVtLAorCQkJdTMyIHN0YXRpY192cmZiX2FsbG9jYXRpb24pCisJCXsgcmV0dXJuIDA7IH0KK3ZvaWQgb21hcF92b3V0X3JlbGVhc2VfdnJmYihzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkgeyB9CitpbnQgb21hcF92b3V0X3ZyZmJfYnVmZmVyX3NldHVwKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LAorCQkJdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50IHN0YXJ0aW5kZXgpCisJCXsgcmV0dXJuIDA7IH0KK2ludCBvbWFwX3ZvdXRfcHJlcGFyZV92cmZiKHN0cnVjdCBvbWFwX3ZvdXRfZGV2aWNlICp2b3V0LAorCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCisJCXsgcmV0dXJuIDA7IH0KK3ZvaWQgb21hcF92b3V0X2NhbGN1bGF0ZV92cmZiX29mZnNldChzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkgeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0ZGVmLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0ZGVmLmgKaW5kZXggNjU5NDk3Yi4uZDc5MzUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dGRlZi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRkZWYuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBPTUFQX1ZPVVRERUZfSAogCiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgorI2luY2x1ZGUgPHBsYXQvdnJmYi5oPgogCiAjZGVmaW5lIFlVWVZfQlBQICAgICAgICAyCiAjZGVmaW5lIFJHQjU2NV9CUFAgICAgICAyCkBAIC0yNyw2ICsyOCwzMSBAQAogI2RlZmluZSBNQVhfRElTUExBWVMJMwogI2RlZmluZSBNQVhfTUFOQUdFUlMJMwogCisjZGVmaW5lIFFRVkdBX1dJRFRICQkxNjAKKyNkZWZpbmUgUVFWR0FfSEVJR0hUCQkxMjAKKworLyogTWF4IFJlc29sdXRpb24gc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgVklEX01BWF9XSURUSAkJMTI4MAkvKiBMYXJnZXN0IHdpZHRoICovCisjZGVmaW5lIFZJRF9NQVhfSEVJR0hUCQk3MjAJLyogTGFyZ2VzdCBoZWlnaHQgKi8KKworLyogTWltaW11bSByZXF1aXJlbWVudCBpcyAyeDIgZm9yIERTUyAqLworI2RlZmluZSBWSURfTUlOX1dJRFRICQkyCisjZGVmaW5lIFZJRF9NSU5fSEVJR0hUCQkyCisKKy8qIDIwNDggeCAyMDQ4IGlzIG1heCByZXMgc3VwcG9ydGVkIGJ5IE9NQVAgZGlzcGxheSBjb250cm9sbGVyICovCisjZGVmaW5lIE1BWF9QSVhFTFNfUEVSX0xJTkUgICAgIDIwNDgKKworI2RlZmluZSBWUkZCX1RYX1RJTUVPVVQgICAgICAgICAxMDAwCisjZGVmaW5lIFZSRkJfTlVNX0JVRlMJCTQKKworLyogTWF4IGJ1ZmZlciBzaXplIHRvYmUgYWxsb2NhdGVkIGR1cmluZyBpbml0ICovCisjZGVmaW5lIE9NQVBfVk9VVF9NQVhfQlVGX1NJWkUgKFZJRF9NQVhfV0lEVEgqVklEX01BWF9IRUlHSFQqNCkKKworZW51bSBkbWFfY2hhbm5lbF9zdGF0ZSB7CisJRE1BX0NIQU5fTk9UX0FMTE9URUQsCisJRE1BX0NIQU5fQUxMT1RFRCwKK307CisKIC8qIEVudW0gZm9yIFJvdGF0aW9uCiAgKiBEU1MgdW5kZXJzdGFuZHMgcm90YXRpb24gaW4gMCwgMSwgMiwgMyBjb250ZXh0CiAgKiB3aGlsZSBWNEwyIGRyaXZlciB1bmRlcnN0YW5kcyBpdCBhcyAwLCA5MCwgMTgwLCAyNzAKQEAgLTM3LDYgKzYzLDE4IEBACiAJZHNzX3JvdGF0aW9uXzE4MF9kZWdyZWUJPSAyLAogCWRzc19yb3RhdGlvbl8yNzBfZGVncmVlID0gMywKIH07CisKKy8qIEVudW0gZm9yIGNob29zaW5nIHJvdGF0aW9uIHR5cGUgZm9yIHZvdXQKKyAqIERTUzIgZG9lc24ndCB1bmRlcnN0YW5kIG5vIHJvdGF0aW9uIGFzIGFuCisgKiBvcHRpb24gd2hpbGUgVjRMMiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0CisgKiByb3RhdGlvbiBpbiB0aGUgY2FzZSB3aGVyZSBWUkZCIGlzIG5vdCBidWlsdCBpbgorICogdGhlIGtlcm5lbAorICovCitlbnVtIHZvdXRfcm90YWlvbl90eXBlIHsKKwlWT1VUX1JPVF9OT05FCT0gMCwKKwlWT1VUX1JPVF9WUkZCCT0gMSwKK307CisKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBETUEgdHJhbnNmZXIgcGFyYW1ldGVycwogICogZm9yIFZSRkIgaGlkZGVuIGJ1ZmZlcgpAQCAtNTMsNiArOTEsNyBAQAogCWludCBpZDsKIAlpbnQgbnVtX292ZXJsYXlzOwogCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92ZXJsYXlzW01BWF9PVkxTXTsKKwllbnVtIHZvdXRfcm90YWlvbl90eXBlIHJvdGF0aW9uX3R5cGU7CiB9OwogCiBzdHJ1Y3Qgb21hcDJ2aWRlb19kZXZpY2UgewpAQCAtMTQ0LDQgKzE4Myw0MyBAQAogCWludCBpb19hbGxvd2VkOwogCiB9OworCisvKgorICogUmV0dXJuIHRydWUgaWYgcm90YXRpb24gaXMgOTAgb3IgMjcwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JvdGF0aW9uXzkwX29yXzI3MChjb25zdCBzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKK3sKKwlyZXR1cm4gKHZvdXQtPnJvdGF0aW9uID09IGRzc19yb3RhdGlvbl85MF9kZWdyZWUgfHwKKwkJCXZvdXQtPnJvdGF0aW9uID09IGRzc19yb3RhdGlvbl8yNzBfZGVncmVlKTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHJvdGF0aW9uIGlzIGVuYWJsZWQKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfcm90YXRpb25fZW5hYmxlZChjb25zdCBzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCkKK3sKKwlyZXR1cm4gdm91dC0+cm90YXRpb24gfHwgdm91dC0+bWlycm9yOworfQorCisvKgorICogUmV2ZXJzZSB0aGUgcm90YXRpb24gZGVncmVlIGlmIG1pcnJvcmluZyBpcyBlbmFibGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhbGNfcm90YXRpb24oY29uc3Qgc3RydWN0IG9tYXBfdm91dF9kZXZpY2UgKnZvdXQpCit7CisJaWYgKCF2b3V0LT5taXJyb3IpCisJCXJldHVybiB2b3V0LT5yb3RhdGlvbjsKKworCXN3aXRjaCAodm91dC0+cm90YXRpb24pIHsKKwljYXNlIGRzc19yb3RhdGlvbl85MF9kZWdyZWU6CisJCXJldHVybiBkc3Nfcm90YXRpb25fMjcwX2RlZ3JlZTsKKwljYXNlIGRzc19yb3RhdGlvbl8yNzBfZGVncmVlOgorCQlyZXR1cm4gZHNzX3JvdGF0aW9uXzkwX2RlZ3JlZTsKKwljYXNlIGRzc19yb3RhdGlvbl8xODBfZGVncmVlOgorCQlyZXR1cm4gZHNzX3JvdGF0aW9uXzBfZGVncmVlOworCWRlZmF1bHQ6CisJCXJldHVybiBkc3Nfcm90YXRpb25fMTgwX2RlZ3JlZTsKKwl9Cit9CisKK3ZvaWQgb21hcF92b3V0X2ZyZWVfYnVmZmVycyhzdHJ1Y3Qgb21hcF92b3V0X2RldmljZSAqdm91dCk7CiAjZW5kaWYJLyogaWZuZGVmIE9NQVBfVk9VVERFRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmMKaW5kZXggOGFlNzQ4MS4uMTE1NDA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dGxpYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuYwpAQCAtMjQsOCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKwogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKKyNpbmNsdWRlICJvbWFwX3ZvdXRsaWIuaCIKKwogTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiT01BUCBWaWRlbyBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0yOTEsMyArMjk1LDQ1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvbWFwX3ZvdXRfbmV3X2Zvcm1hdCk7CiAKKy8qCisgKiBBbGxvY2F0ZSBidWZmZXJzCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcF92b3V0X2FsbG9jX2J1ZmZlcih1MzIgYnVmX3NpemUsIHUzMiAqcGh5c19hZGRyKQoreworCXUzMiBvcmRlciwgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHZpcnRfYWRkciwgYWRkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKGJ1Zl9zaXplKTsKKwlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwl2aXJ0X2FkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKKwlhZGRyID0gdmlydF9hZGRyOworCisJaWYgKHZpcnRfYWRkcikgeworCQl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQkJYWRkciArPSBQQUdFX1NJWkU7CisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJfQorCX0KKwkqcGh5c19hZGRyID0gKHUzMikgdmlydF90b19waHlzKCh2b2lkICopIHZpcnRfYWRkcik7CisJcmV0dXJuIHZpcnRfYWRkcjsKK30KKworLyoKKyAqIEZyZWUgYnVmZmVycworICovCit2b2lkIG9tYXBfdm91dF9mcmVlX2J1ZmZlcih1bnNpZ25lZCBsb25nIHZpcnRhZGRyLCB1MzIgYnVmX3NpemUpCit7CisJdTMyIG9yZGVyLCBzaXplOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZpcnRhZGRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oYnVmX3NpemUpOworCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCWFkZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdmlydGFkZHIsIG9yZGVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcC9vbWFwX3ZvdXRsaWIuaAppbmRleCBhNjBiMTZlLi5lNTE3NTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAvb21hcF92b3V0bGliLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwL29tYXBfdm91dGxpYi5oCkBAIC0xMiwyMyArMTIsMjUgQEAKICNpZm5kZWYgT01BUF9WT1VUTElCX0gKICNkZWZpbmUgT01BUF9WT1VUTElCX0gKIAotZXh0ZXJuIHZvaWQgb21hcF92b3V0X2RlZmF1bHRfY3JvcChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgsCit2b2lkIG9tYXBfdm91dF9kZWZhdWx0X2Nyb3Aoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4LAogCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Ziwgc3RydWN0IHY0bDJfcmVjdCAqY3JvcCk7CiAKLWV4dGVybiBpbnQgb21hcF92b3V0X25ld19jcm9wKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCwKK2ludCBvbWFwX3ZvdXRfbmV3X2Nyb3Aoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4LAogCQlzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wLCBzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbiwKIAkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZidWYsCiAJCWNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKm5ld19jcm9wKTsKIAotZXh0ZXJuIGludCBvbWFwX3ZvdXRfdHJ5X3dpbmRvdyhzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1ZiwKK2ludCBvbWFwX3ZvdXRfdHJ5X3dpbmRvdyhzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1ZiwKIAkJc3RydWN0IHY0bDJfd2luZG93ICpuZXdfd2luKTsKIAotZXh0ZXJuIGludCBvbWFwX3ZvdXRfbmV3X3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wLAoraW50IG9tYXBfdm91dF9uZXdfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKmNyb3AsCiAJCXN0cnVjdCB2NGwyX3dpbmRvdyAqd2luLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1ZiwKIAkJc3RydWN0IHY0bDJfd2luZG93ICpuZXdfd2luKTsKIAotZXh0ZXJuIHZvaWQgb21hcF92b3V0X25ld19mb3JtYXQoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4LAordm9pZCBvbWFwX3ZvdXRfbmV3X2Zvcm1hdChzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgsCiAJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmLCBzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wLAogCQlzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbik7Cit1bnNpZ25lZCBsb25nIG9tYXBfdm91dF9hbGxvY19idWZmZXIodTMyIGJ1Zl9zaXplLCB1MzIgKnBoeXNfYWRkcik7Cit2b2lkIG9tYXBfdm91dF9mcmVlX2J1ZmZlcih1bnNpZ25lZCBsb25nIHZpcnRhZGRyLCB1MzIgYnVmX3NpemUpOwogI2VuZGlmCS8qICNpZm5kZWYgT01BUF9WT1VUTElCX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDFfY2FtZXJhLmMKaW5kZXggZTdjZmM4NS4uOGE5NDdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAxX2NhbWVyYS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPG1lZGlhL29tYXAxX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KQEAgLTM4LDcgKzM3LDcgQEAKIAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkib21hcDEtY2FtZXJhIgotI2RlZmluZSBWRVJTSU9OX0NPREUJCUtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMC4wLjIiCiAKIAogLyoKQEAgLTIwOCw3ICsyMDcsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKIAlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCiAJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKIAlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQpAQCAtMjIyLDcgKzIyMSw3IEBACiAJaWYgKCpzaXplICogKmNvdW50ID4gTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KQogCQkqY291bnQgPSAoTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KSAvICpzaXplOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsCisJZGV2X2RiZyhpY2QtPnBhcmVudCwKIAkJCSIlczogY291bnQ9JWQsIHNpemU9JWRcbiIsIF9fZnVuY19fLCAqY291bnQsICpzaXplKTsKIAogCXJldHVybiAwOwpAQCAtMjQxLDcgKzI0MCw3IEBACiAJCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQkJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKIAkJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hID0gdmlkZW9idWZfdG9fZG1hKHZiKTsKIAogCQl2aWRlb2J1Zl9kbWFfdW5tYXAoZGV2LCBkbWEpOwpAQCAtMjU4LDcgKzI1Nyw3IEBACiAJc3RydWN0IG9tYXAxX2NhbV9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG9tYXAxX2NhbV9idWYsIHZiKTsKIAlpbnQgYnl0ZXNfcGVyX2xpbmUgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShpY2QtPnVzZXJfd2lkdGgsCiAJCQlpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJaW50IHJldDsKIApAQCAtNDkwLDcgKzQ4OSw3IEBACiAJCQkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IG9tYXAxX2NhbV9idWYgKmJ1ZjsKIAl1MzIgbW9kZTsKQEAgLTUxOSw3ICs1MTgsNyBAQAogCXBjZGV2LT5hY3RpdmUgPSBidWY7CiAJcGNkZXYtPnJlYWR5ID0gTlVMTDsKIAotCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LAorCWRldl9kYmcoaWNkLT5wYXJlbnQsCiAJCSIlczogY2FwdHVyZSBub3QgYWN0aXZlLCBzZXR1cCBGSUZPLCBzdGFydCBETUFcbiIsIF9fZnVuY19fKTsKIAltb2RlID0gQ0FNX1JFQURfQ0FDSEUocGNkZXYsIE1PREUpICYgflRIUkVTSE9MRF9NQVNLOwogCW1vZGUgfD0gVEhSRVNIT0xEX0xFVkVMKHBjZGV2LT52Yl9tb2RlKSA8PCBUSFJFU0hPTERfU0hJRlQ7CkBAIC01NDMsOCArNTQyLDggQEAKIAlzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiAqYnVmID0KIAkJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG9tYXAxX2NhbV9idWYsIHZiKTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChkZXYpOwogCXN0cnVjdCBvbWFwMV9jYW1fZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCXN3aXRjaCAodmItPnN0YXRlKSB7CkBAIC01NzMsNyArNTcyLDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiAqYnVmID0gcGNkZXYtPmFjdGl2ZTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+aWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPnBhcmVudDsKIAogCWlmIChXQVJOX09OKCFidWYpKSB7CiAJCXN1c3BlbmRfY2FwdHVyZShwY2Rldik7CkBAIC03OTksNyArNzk4LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjYW1faXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXAxX2NhbV9kZXYgKnBjZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+aWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjZGV2LT5pY2QtPnBhcmVudDsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiAqYnVmID0gcGNkZXYtPmFjdGl2ZTsKIAl1MzIgaXRfc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC05MDksNyArOTA4LDcgQEAKICAqLwogc3RhdGljIGludCBvbWFwMV9jYW1fYWRkX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBvbWFwMV9jYW1fZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1MzIgY3RybGNsb2NrOwogCkBAIC05NTIsMTQgKzk1MSwxNCBAQAogCiAJcGNkZXYtPmljZCA9IGljZDsKIAotCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiT01BUDEgQ2FtZXJhIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIk9NQVAxIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAogCQkJaWNkLT5kZXZudW0pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwMV9jYW1fcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBvbWFwMV9jYW1fZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1MzIgY3RybGNsb2NrOwogCkBAIC05ODUsNyArOTg0LDcgQEAKIAogCXBjZGV2LT5pY2QgPSBOVUxMOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsCisJZGV2X2RiZyhpY2QtPnBhcmVudCwKIAkJIk9NQVAxIENhbWVyYSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsIGljZC0+ZGV2bnVtKTsKIH0KIApAQCAtMTA3MCw3ICsxMDY5LDcgQEAKIAkJdW5zaWduZWQgaW50IGlkeCwgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CiAJaW50IGZvcm1hdHMgPSAwLCByZXQ7CiAJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CiAJY29uc3Qgc3RydWN0IHNvY19tYnVzX3BpeGVsZm10ICpmbXQ7CkBAIC0xMjIyLDkgKzEyMjEsOSBAQAogCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmY3JvcC0+YzsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlID0gaWNkLT5jdXJyZW50X2ZtdDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2KTsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7CiAJaW50IHJldDsKIApAQCAtMTI3MCw4ICsxMjY5LDggQEAKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2KTsKIAlzdHJ1Y3Qgb21hcDFfY2FtX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtZjsKQEAgLTEzMjYsNyArMTMyNSw3IEBACiAKIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CiAJaWYgKCF4bGF0ZSkgewotCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsICJGb3JtYXQgJSN4IG5vdCBmb3VuZFxuIiwKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsICJGb3JtYXQgJSN4IG5vdCBmb3VuZFxuIiwKIAkJCSBwaXgtPnBpeGVsZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTM2Miw3ICsxMzYxLDcgQEAKIAkJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gcS0+cHJpdl9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG9tYXAxX2NhbV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCByZXQ7CiAKQEAgLTEzNzcsMTcgKzEzNzYsMTcgQEAKIHN0YXRpYyB2b2lkIG9tYXAxX2NhbV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IG9tYXAxX2NhbV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCiAJaWYgKCFzZ19tb2RlKQogCQl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm9tYXAxX3ZpZGVvYnVmX29wcywKLQkJCQlpY2QtPmRldi5wYXJlbnQsICZwY2Rldi0+bG9jaywKKwkJCQlpY2QtPnBhcmVudCwgJnBjZGV2LT5sb2NrLAogCQkJCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwgVjRMMl9GSUVMRF9OT05FLAogCQkJCXNpemVvZihzdHJ1Y3Qgb21hcDFfY2FtX2J1ZiksIGljZCwgJmljZC0+dmlkZW9fbG9jayk7CiAJZWxzZQogCQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KHEsICZvbWFwMV92aWRlb2J1Zl9vcHMsCi0JCQkJaWNkLT5kZXYucGFyZW50LCAmcGNkZXYtPmxvY2ssCisJCQkJaWNkLT5wYXJlbnQsICZwY2Rldi0+bG9jaywKIAkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfRklFTERfTk9ORSwKIAkJCQlzaXplb2Yoc3RydWN0IG9tYXAxX2NhbV9idWYpLCBpY2QsICZpY2QtPnZpZGVvX2xvY2spOwogCkBAIC0xNDMxLDcgKzE0MzAsNiBAQAogewogCS8qIGNhcC0+bmFtZSBpcyBzZXQgYnkgdGhlIGZyaWVuZGx5IGNhbGxlcjotPiAqLwogCXN0cmxjcHkoY2FwLT5jYXJkLCAiT01BUDEgQ2FtZXJhIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+dmVyc2lvbiA9IFZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAKIAlyZXR1cm4gMDsKQEAgLTE0NDAsOSArMTQzOCw5IEBACiBzdGF0aWMgaW50IG9tYXAxX2NhbV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQlfX3UzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGRldik7CiAJc3RydWN0IG9tYXAxX2NhbV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOwogCWNvbnN0IHN0cnVjdCBzb2NfbWJ1c19waXhlbGZtdCAqZm10OwogCXVuc2lnbmVkIGxvbmcgY2FtZXJhX2ZsYWdzLCBjb21tb25fZmxhZ3M7CkBAIC0xNzE4LDQgKzE3MTYsNSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQMSBDYW1lcmEgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiSmFudXN6IEtyenlzenRvZmlrIDxqa3J6eXN6dEB0aXMuaWNuZXQucGw+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfTElDRU5TRShEUklWRVJfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDY5YjYwYmEuLmViOTdiZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIG5lZWRlZCBmb3IgdmlkZW9idWZzICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC00Myw3ICs0Miw3IEBACiAKICNpbmNsdWRlICJvbWFwMjR4eGNhbS5oIgogCi0jZGVmaW5lIE9NQVAyNFhYQ0FNX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMCkKKyNkZWZpbmUgT01BUDI0WFhDQU1fVkVSU0lPTiAiMC4wLjEiCiAKICNkZWZpbmUgUkVTRVRfVElNRU9VVF9OUyAxMDAwMAogCkBAIC0zMDksMTEgKzMwOCwxMSBAQAogCQkJb3JkZXItLTsKIAogCQkvKiB0cnkgdG8gYWxsb2NhdGUgYXMgbWFueSBjb250aWd1b3VzIHBhZ2VzIGFzIHBvc3NpYmxlICovCi0JCXBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwgb3JkZXIpOworCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOwogCQkvKiBpZiBhbGxvY2F0aW9uIGZhaWxzLCB0cnkgdG8gYWxsb2NhdGUgc21hbGxlciBhbW91bnQgKi8KIAkJd2hpbGUgKHBhZ2UgPT0gTlVMTCkgewogCQkJb3JkZXItLTsKLQkJCXBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0RNQSwgb3JkZXIpOworCQkJcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIG9yZGVyKTsKIAkJCWlmIChwYWdlID09IE5VTEwgJiYgIW9yZGVyKSB7CiAJCQkJZXJyID0gLUVOT01FTTsKIAkJCQlnb3RvIG91dDsKQEAgLTk5Myw3ICs5OTIsNiBAQAogCiAJc3RybGNweShjYXAtPmRyaXZlciwgQ0FNX05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBjYW0tPnZmZC0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+dmVyc2lvbiA9IE9NQVAyNFhYQ0FNX1ZFUlNJT047CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCiAJcmV0dXJuIDA7CkBAIC0xODg4LDYgKzE4ODYsNyBAQAogTU9EVUxFX0FVVEhPUigiU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAbm9raWEuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQMjR4eCBWaWRlbyBmb3IgTGludXggY2FtZXJhIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oT01BUDI0WFhDQU1fVkVSU0lPTik7CiBtb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAogCQkgIk1pbm9yIG51bWJlciBmb3IgdmlkZW8gZGV2aWNlICgtMSA9PT4gYXV0byBhc3NpZ24pIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwppbmRleCA5NGI2ZWQ4Li41Y2VhMmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKQEAgLTIyMzQsMyArMjIzNCw0IEBACiBNT0RVTEVfQVVUSE9SKCJOb2tpYSBDb3Jwb3JhdGlvbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBPTUFQMyBJU1AgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihJU1BfVklERU9fRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmgKaW5kZXggMjYyMGM0MC4uNTI5ZTU4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5oCkBAIC0xMzksNiArMTM5LDEwIEBACiAgKgkJMyAtIENBTUVYVFsxMzo2XSAtPiBDQU1bNzowXQogICogQGNsa19wb2w6IFBpeGVsIGNsb2NrIHBvbGFyaXR5CiAgKgkJMCAtIE5vbiBJbnZlcnRlZCwgMSAtIEludmVydGVkCisgKiBAaHNfcG9sOiBIb3Jpem9udGFsIHN5bmNocm9uaXphdGlvbiBwb2xhcml0eQorICoJCTAgLSBBY3RpdmUgaGlnaCwgMSAtIEFjdGl2ZSBsb3cKKyAqIEB2c19wb2w6IFZlcnRpY2FsIHN5bmNocm9uaXphdGlvbiBwb2xhcml0eQorICoJCTAgLSBBY3RpdmUgaGlnaCwgMSAtIEFjdGl2ZSBsb3cKICAqIEBicmlkZ2U6IENDREMgQnJpZGdlIGlucHV0IGNvbnRyb2wKICAqCQlJU1BDVFJMX1BBUl9CUklER0VfRElTQUJMRSAtIERpc2FibGUKICAqCQlJU1BDVFJMX1BBUl9CUklER0VfTEVORElBTiAtIExpdHRsZSBlbmRpYW4KQEAgLTE0Nyw2ICsxNTEsOCBAQAogc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgZGF0YV9sYW5lX3NoaWZ0OjI7CiAJdW5zaWduZWQgaW50IGNsa19wb2w6MTsKKwl1bnNpZ25lZCBpbnQgaHNfcG9sOjE7CisJdW5zaWduZWQgaW50IHZzX3BvbDoxOwogCXVuc2lnbmVkIGludCBicmlkZ2U6NDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKaW5kZXggMzlkNTAxYi4uOWQzNDU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKQEAgLTExNDgsNiArMTE0OCw4IEBACiAJb21hcDNpc3BfY29uZmlndXJlX2JyaWRnZShpc3AsIGNjZGMtPmlucHV0LCBwZGF0YSwgc2hpZnQpOwogCiAJY2NkYy0+c3luY2lmLmRhdHN6ID0gZGVwdGhfb3V0OworCWNjZGMtPnN5bmNpZi5oZHBvbCA9IHBkYXRhID8gcGRhdGEtPmhzX3BvbCA6IDA7CisJY2NkYy0+c3luY2lmLnZkcG9sID0gcGRhdGEgPyBwZGF0YS0+dnNfcG9sIDogMDsKIAljY2RjX2NvbmZpZ19zeW5jX2lmKGNjZGMsICZjY2RjLT5zeW5jaWYpOwogCiAJLyogQ0NEQ19QQURfU0lOSyAqLwpAQCAtMTY5MSw3ICsxNjkzLDcgQEAKIAlpZiAoc3ViLT50eXBlICE9IFY0TDJfRVZFTlRfT01BUDNJU1BfSFNfVlMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHY0bDJfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIpOworCXJldHVybiB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCBPTUFQM0lTUF9DQ0RDX05FVkVOVFMpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfdW5zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZmggKmZoLApAQCAtMjE2Miw3ICsyMTY0LDYgQEAKIAlzZC0+Z3JwX2lkID0gMSA8PCAxNjsJLyogZ3JvdXAgSUQgZm9yIGlzcCBzdWJkZXZzICovCiAJdjRsMl9zZXRfc3ViZGV2ZGF0YShzZCwgY2NkYyk7CiAJc2QtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFMgfCBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsKLQlzZC0+bmV2ZW50cyA9IE9NQVAzSVNQX0NDRENfTkVWRU5UUzsKIAogCXBhZHNbQ0NEQ19QQURfU0lOS10uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSzsKIAlwYWRzW0NDRENfUEFEX1NPVVJDRV9WUF0uZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOwpAQCAtMjI1Nyw4ICsyMjU4LDYgQEAKIAljY2RjLT5zeW5jaWYuZmxkb3V0ID0gMDsKIAljY2RjLT5zeW5jaWYuZmxkcG9sID0gMDsKIAljY2RjLT5zeW5jaWYuZmxkc3RhdCA9IDA7Ci0JY2NkYy0+c3luY2lmLmhkcG9sID0gMDsKLQljY2RjLT5zeW5jaWYudmRwb2wgPSAwOwogCiAJY2NkYy0+Y2xhbXAub2JsZW4gPSAwOwogCWNjZGMtPmNsYW1wLmRjc3VidmFsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKaW5kZXggMGUxNmNhYi4uZWM5ZTM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY3AyLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgImlzcC5oIgogI2luY2x1ZGUgImlzcHJlZy5oIgpAQCAtMTYzLDYgKzE2NCw5IEBACiAJc3RydWN0IGlzcF9waXBlbGluZSAqcGlwZSA9IHRvX2lzcF9waXBlbGluZSgmY2NwMi0+c3ViZGV2LmVudGl0eSk7CiAJaW50IGk7CiAKKwlpZiAoZW5hYmxlICYmIGNjcDItPnZkZHNfY3NpYikKKwkJcmVndWxhdG9yX2VuYWJsZShjY3AyLT52ZGRzX2NzaWIpOworCiAJLyogRW5hYmxlL0Rpc2FibGUgYWxsIHRoZSBMQ3ggY2hhbm5lbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ0NQMl9MQ3hfQ0hBTlNfTlVNOyBpKyspCiAJCWlzcF9yZWdfY2xyX3NldChpc3AsIE9NQVAzX0lTUF9JT01FTV9DQ1AyLCBJU1BDQ1AyX0xDeF9DVFJMKGkpLApAQCAtMTg2LDYgKzE5MCw5IEBACiAJCQkJICAgIElTUENDUDJfTEMwMV9JUlFFTkFCTEUsCiAJCQkJICAgIElTUENDUDJfTEMwMV9JUlFTVEFUVVNfTEMwX0ZTX0lSUSk7CiAJfQorCisJaWYgKCFlbmFibGUgJiYgY2NwMi0+dmRkc19jc2liKQorCQlyZWd1bGF0b3JfZGlzYWJsZShjY3AyLT52ZGRzX2NzaWIpOwogfQogCiAvKgpAQCAtMTEzNyw2ICsxMTQ0LDkgQEAKICAqLwogdm9pZCBvbWFwM2lzcF9jY3AyX2NsZWFudXAoc3RydWN0IGlzcF9kZXZpY2UgKmlzcCkKIHsKKwlzdHJ1Y3QgaXNwX2NjcDJfZGV2aWNlICpjY3AyID0gJmlzcC0+aXNwX2NjcDI7CisKKwlyZWd1bGF0b3JfcHV0KGNjcDItPnZkZHNfY3NpYik7CiB9CiAKIC8qCkBAIC0xMTUxLDE0ICsxMTYxLDI3IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjY3AyLT53YWl0KTsKIAotCS8qIE9uIHRoZSBPTUFQMzZ4eCwgdGhlIENDUDIgdXNlcyB0aGUgQ1NJIFBIWTEgb3IgUEhZMiwgc2hhcmVkIHdpdGgKKwkvKgorCSAqIE9uIHRoZSBPTUFQMzR4eCB0aGUgQ1NJMSByZWNlaXZlciBpcyBvcGVyYXRlZCBpbiB0aGUgQ1NJYiBJTworCSAqIGNvbXBsZXgsIHdoaWNoIGlzIHBvd2VyZWQgYnkgdmRkc19jc2liIHBvd2VyIHJhaWwuIEhlbmNlIHRoZQorCSAqIHJlcXVlc3QgZm9yIHRoZSByZWd1bGF0b3IuCisJICoKKwkgKiBPbiB0aGUgT01BUDM2eHgsIHRoZSBDQ1AyIHVzZXMgdGhlIENTSSBQSFkxIG9yIFBIWTIsIHNoYXJlZCB3aXRoCiAJICogdGhlIENTSTJjIG9yIENTSTJhIHJlY2VpdmVycy4gVGhlIFBIWSB0aGVuIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkKIAkgKiBjb25maWd1cmVkLgogCSAqCiAJICogVE9ETzogRG9uJ3QgaGFyZGNvZGUgdGhlIHVzYWdlIG9mIFBIWTEgKHNoYXJlZCB3aXRoIENTSTJjKS4KIAkgKi8KLQlpZiAoaXNwLT5yZXZpc2lvbiA9PSBJU1BfUkVWSVNJT05fMTVfMCkKKwlpZiAoaXNwLT5yZXZpc2lvbiA9PSBJU1BfUkVWSVNJT05fMl8wKSB7CisJCWNjcDItPnZkZHNfY3NpYiA9IHJlZ3VsYXRvcl9nZXQoaXNwLT5kZXYsICJ2ZGRzX2NzaWIiKTsKKwkJaWYgKElTX0VSUihjY3AyLT52ZGRzX2NzaWIpKSB7CisJCQlkZXZfZGJnKGlzcC0+ZGV2LAorCQkJCSJDb3VsZCBub3QgZ2V0IHJlZ3VsYXRvciB2ZGRzX2NzaWJcbiIpOworCQkJY2NwMi0+dmRkc19jc2liID0gTlVMTDsKKwkJfQorCX0gZWxzZSBpZiAoaXNwLT5yZXZpc2lvbiA9PSBJU1BfUkVWSVNJT05fMTVfMCkgewogCQljY3AyLT5waHkgPSAmaXNwLT5pc3BfY3NpcGh5MTsKKwl9CiAKIAlyZXQgPSBjY3AyX2luaXRfZW50aXRpZXMoY2NwMik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjcDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5oCmluZGV4IDU1MDVhODYuLjY2NzRlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NwMi5oCkBAIC04MSw2ICs4MSw3IEBACiAJc3RydWN0IGlzcF9pbnRlcmZhY2VfbWVtX2NvbmZpZyBtZW1fY2ZnOwogCXN0cnVjdCBpc3BfdmlkZW8gdmlkZW9faW47CiAJc3RydWN0IGlzcF9jc2lwaHkgKnBoeTsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGRzX2NzaWI7CiAJdW5zaWduZWQgaW50IGVycm9yOwogCWVudW0gaXNwX3BpcGVsaW5lX3N0cmVhbV9zdGF0ZSBzdGF0ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BzdGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuYwppbmRleCBiNDRjYjY4Li44MDgwNjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuYwpAQCAtMTAzMiw3ICsxMDMyLDYgQEAKIAlzbnByaW50ZihzdWJkZXYtPm5hbWUsIFY0TDJfU1VCREVWX05BTUVfU0laRSwgIk9NQVAzIElTUCAlcyIsIG5hbWUpOwogCXN1YmRldi0+Z3JwX2lkID0gMSA8PCAxNjsJLyogZ3JvdXAgSUQgZm9yIGlzcCBzdWJkZXZzICovCiAJc3ViZGV2LT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTIHwgVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7Ci0Jc3ViZGV2LT5uZXZlbnRzID0gU1RBVF9ORVZFTlRTOwogCXY0bDJfc2V0X3N1YmRldmRhdGEoc3ViZGV2LCBzdGF0KTsKIAogCXN0YXQtPnBhZC5mbGFncyA9IE1FRElBX1BBRF9GTF9TSU5LOwpAQCAtMTA1MCw3ICsxMDQ5LDcgQEAKIAlpZiAoc3ViLT50eXBlICE9IHN0YXQtPmV2ZW50X3R5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHY0bDJfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIpOworCXJldHVybiB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCBTVEFUX05FVkVOVFMpOwogfQogCiBpbnQgb21hcDNpc3Bfc3RhdF91bnN1YnNjcmliZV9ldmVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYwppbmRleCA5Y2Q4ZjFhLi5mZDk2NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jCkBAIC02OTUsNyArNjk1LDYgQEAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCBJU1BfVklERU9fRFJJVkVSX05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCB2aWRlby0+dmlkZW8ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgIm1lZGlhIiwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKLQljYXAtPnZlcnNpb24gPSBJU1BfVklERU9fRFJJVkVSX1ZFUlNJT047CiAKIAlpZiAodmlkZW8tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmgKaW5kZXggOTExYmVhNi4uNTMxNjBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uaApAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBPTUFQM19JU1BfVklERU9fSAogCiAjaW5jbHVkZSA8bGludXgvdjRsMi1tZWRpYWJ1cy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxtZWRpYS9tZWRpYS1lbnRpdHkuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmguaD4KQEAgLTM1LDcgKzM0LDcgQEAKICNpbmNsdWRlICJpc3BxdWV1ZS5oIgogCiAjZGVmaW5lIElTUF9WSURFT19EUklWRVJfTkFNRQkJImlzcHZpZGVvIgotI2RlZmluZSBJU1BfVklERU9fRFJJVkVSX1ZFUlNJT04JS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKyNkZWZpbmUgSVNQX1ZJREVPX0RSSVZFUl9WRVJTSU9OCSIwLjAuMiIKIAogc3RydWN0IGlzcF9kZXZpY2U7CiBzdHJ1Y3QgaXNwX3ZpZGVvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjI2NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3YyNjQwLmMKaW5kZXggMGNlYTBjZi4uOWNlMmZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjI2NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292MjY0MC5jCkBAIC0xMDMxLDE2ICsxMDMxLDkgQEAKIAljb25zdCBjaGFyICpkZXZuYW1lOwogCWludCByZXQ7CiAKLQkvKgotCSAqIHdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KLQkgKi8KLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlBhcmVudCBtaXNzaW5nIG9yIGludmFsaWQhXG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnI7Ci0JfQorCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuICovCisJQlVHX09OKCFpY2QtPnBhcmVudCB8fAorCSAgICAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKTsKIAogCS8qCiAJICogY2hlY2sgYW5kIHNob3cgcHJvZHVjdCBJRCBhbmQgbWFudWZhY3R1cmVyIElECmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTY0Mi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjU2NDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlhNGFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjU2NDIuYwpAQCAtMCwwICsxLDEwMTIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIE9WNTY0MiBDTU9TIEltYWdlIFNlbnNvciBmcm9tIE9tbml2aXNpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEJhc3RpYW4gSGVjaHQgPGhlY2h0YkBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gU29ueSBJTVgwNzQgQ2FtZXJhIERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBCYXNlZCBvbiBPbW5pdmlzaW9uIE9WNzY3MCBDYW1lcmEgRHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtNyBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19tZWRpYWJ1cy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CisKKy8qIE9WNTY0MiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVHX0NISVBfSURfSElHSAkJMHgzMDBhCisjZGVmaW5lIFJFR19DSElQX0lEX0xPVwkJCTB4MzAwYgorCisjZGVmaW5lIFJFR19XSU5ET1dfU1RBUlRfWF9ISUdICQkweDM4MDAKKyNkZWZpbmUgUkVHX1dJTkRPV19TVEFSVF9YX0xPVwkJMHgzODAxCisjZGVmaW5lIFJFR19XSU5ET1dfU1RBUlRfWV9ISUdICQkweDM4MDIKKyNkZWZpbmUgUkVHX1dJTkRPV19TVEFSVF9ZX0xPVwkJMHgzODAzCisjZGVmaW5lIFJFR19XSU5ET1dfV0lEVEhfSElHSAkJMHgzODA0CisjZGVmaW5lIFJFR19XSU5ET1dfV0lEVEhfTE9XCQkweDM4MDUKKyNkZWZpbmUgUkVHX1dJTkRPV19IRUlHSFRfSElHSCAJCTB4MzgwNgorI2RlZmluZSBSRUdfV0lORE9XX0hFSUdIVF9MT1cJCTB4MzgwNworI2RlZmluZSBSRUdfT1VUX1dJRFRIX0hJR0gJCTB4MzgwOAorI2RlZmluZSBSRUdfT1VUX1dJRFRIX0xPVwkJMHgzODA5CisjZGVmaW5lIFJFR19PVVRfSEVJR0hUX0hJR0gJCTB4MzgwYQorI2RlZmluZSBSRUdfT1VUX0hFSUdIVF9MT1cJCTB4MzgwYgorI2RlZmluZSBSRUdfT1VUX1RPVEFMX1dJRFRIX0hJR0gJMHgzODBjCisjZGVmaW5lIFJFR19PVVRfVE9UQUxfV0lEVEhfTE9XCQkweDM4MGQKKyNkZWZpbmUgUkVHX09VVF9UT1RBTF9IRUlHSFRfSElHSAkweDM4MGUKKyNkZWZpbmUgUkVHX09VVF9UT1RBTF9IRUlHSFRfTE9XCTB4MzgwZgorCisvKgorICogZGVmaW5lIHN0YW5kYXJkIHJlc29sdXRpb24uCisgKiBXb3JrcyBjdXJyZW50bHkgb25seSBmb3IgdXAgdG8gNzIwIGxpbmVzCisgKiBlZy4gMzIweDI0MCwgNjQweDQ4MCwgODAweDYwMCwgMTI4MHg3MjAsIDIwNDh4NzIwCisgKi8KKworI2RlZmluZSBPVjU2NDJfV0lEVEgJCTEyODAKKyNkZWZpbmUgT1Y1NjQyX0hFSUdIVAkJNzIwCisjZGVmaW5lIE9WNTY0Ml9UT1RBTF9XSURUSAkzMjAwCisjZGVmaW5lIE9WNTY0Ml9UT1RBTF9IRUlHSFQJMjAwMAorI2RlZmluZSBPVjU2NDJfU0VOU09SX1NJWkVfWAkyNTkyCisjZGVmaW5lIE9WNTY0Ml9TRU5TT1JfU0laRV9ZCTE5NDQKKworc3RydWN0IHJlZ3ZhbF9saXN0IHsKKwl1MTYgcmVnX251bTsKKwl1OCB2YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y1NjQyX2RlZmF1bHRfcmVnc19pbml0W10gPSB7CisJeyAweDMxMDMsIDB4OTMgfSwKKwl7IDB4MzAwOCwgMHg4MiB9LAorCXsgMHgzMDE3LCAweDdmIH0sCisJeyAweDMwMTgsIDB4ZmMgfSwKKwl7IDB4MzgxMCwgMHhjMiB9LAorCXsgMHgzNjE1LCAweGYwIH0sCisJeyAweDMwMDAsIDB4MCAgfSwKKwl7IDB4MzAwMSwgMHgwICB9LAorCXsgMHgzMDAyLCAweDAgIH0sCisJeyAweDMwMDMsIDB4MCAgfSwKKwl7IDB4MzAwNCwgMHhmZiB9LAorCXsgMHgzMDMwLCAweDJiIH0sCisJeyAweDMwMTEsIDB4OCAgfSwKKwl7IDB4MzAxMCwgMHgxMCB9LAorCXsgMHgzNjA0LCAweDYwIH0sCisJeyAweDM2MjIsIDB4NjAgfSwKKwl7IDB4MzYyMSwgMHg5ICB9LAorCXsgMHgzNzA5LCAweDAgIH0sCisJeyAweDQwMDAsIDB4MjEgfSwKKwl7IDB4NDAxZCwgMHgyMiB9LAorCXsgMHgzNjAwLCAweDU0IH0sCisJeyAweDM2MDUsIDB4NCAgfSwKKwl7IDB4MzYwNiwgMHgzZiB9LAorCXsgMHgzYzAxLCAweDgwIH0sCisJeyAweDMwMGQsIDB4MjIgfSwKKwl7IDB4MzYyMywgMHgyMiB9LAorCXsgMHg1MDAwLCAweDRmIH0sCisJeyAweDUwMjAsIDB4NCAgfSwKKwl7IDB4NTE4MSwgMHg3OSB9LAorCXsgMHg1MTgyLCAweDAgIH0sCisJeyAweDUxODUsIDB4MjIgfSwKKwl7IDB4NTE5NywgMHgxICB9LAorCXsgMHg1NTAwLCAweGEgIH0sCisJeyAweDU1MDQsIDB4MCAgfSwKKwl7IDB4NTUwNSwgMHg3ZiB9LAorCXsgMHg1MDgwLCAweDggIH0sCisJeyAweDMwMGUsIDB4MTggfSwKKwl7IDB4NDYxMCwgMHgwICB9LAorCXsgMHg0NzFkLCAweDUgIH0sCisJeyAweDQ3MDgsIDB4NiAgfSwKKwl7IDB4MzcwYywgMHhhMCB9LAorCXsgMHg1Njg3LCAweDk0IH0sCisJeyAweDUwMWYsIDB4MCAgfSwKKwl7IDB4NTAwMCwgMHg0ZiB9LAorCXsgMHg1MDAxLCAweGNmIH0sCisJeyAweDQzMDAsIDB4MzAgfSwKKwl7IDB4NDMwMCwgMHgzMCB9LAorCXsgMHg0NjBiLCAweDM1IH0sCisJeyAweDQ3MWQsIDB4MCAgfSwKKwl7IDB4MzAwMiwgMHhjICB9LAorCXsgMHgzMDAyLCAweDAgIH0sCisJeyAweDQ3MTMsIDB4MyAgfSwKKwl7IDB4NDcxYywgMHg1MCB9LAorCXsgMHg0NzIxLCAweDIgIH0sCisJeyAweDQ0MDIsIDB4OTAgfSwKKwl7IDB4NDYwYywgMHgyMiB9LAorCXsgMHgzODE1LCAweDQ0IH0sCisJeyAweDM1MDMsIDB4NyAgfSwKKwl7IDB4MzUwMSwgMHg3MyB9LAorCXsgMHgzNTAyLCAweDgwIH0sCisJeyAweDM1MGIsIDB4MCAgfSwKKwl7IDB4MzgxOCwgMHhjOCB9LAorCXsgMHgzODI0LCAweDExIH0sCisJeyAweDNhMDAsIDB4NzggfSwKKwl7IDB4M2ExYSwgMHg0ICB9LAorCXsgMHgzYTEzLCAweDMwIH0sCisJeyAweDNhMTgsIDB4MCAgfSwKKwl7IDB4M2ExOSwgMHg3YyB9LAorCXsgMHgzYTA4LCAweDEyIH0sCisJeyAweDNhMDksIDB4YzAgfSwKKwl7IDB4M2EwYSwgMHhmICB9LAorCXsgMHgzYTBiLCAweGEwIH0sCisJeyAweDM1MGMsIDB4NyAgfSwKKwl7IDB4MzUwZCwgMHhkMCB9LAorCXsgMHgzYTBkLCAweDggIH0sCisJeyAweDNhMGUsIDB4NiAgfSwKKwl7IDB4MzUwMCwgMHgwICB9LAorCXsgMHgzNTAxLCAweDAgIH0sCisJeyAweDM1MDIsIDB4MCAgfSwKKwl7IDB4MzUwYSwgMHgwICB9LAorCXsgMHgzNTBiLCAweDAgIH0sCisJeyAweDM1MDMsIDB4MCAgfSwKKwl7IDB4M2EwZiwgMHgzYyB9LAorCXsgMHgzYTEwLCAweDMyIH0sCisJeyAweDNhMWIsIDB4M2MgfSwKKwl7IDB4M2ExZSwgMHgzMiB9LAorCXsgMHgzYTExLCAweDgwIH0sCisJeyAweDNhMWYsIDB4MjAgfSwKKwl7IDB4MzAzMCwgMHgyYiB9LAorCXsgMHgzYTAyLCAweDAgIH0sCisJeyAweDNhMDMsIDB4N2QgfSwKKwl7IDB4M2EwNCwgMHgwICB9LAorCXsgMHgzYTE0LCAweDAgIH0sCisJeyAweDNhMTUsIDB4N2QgfSwKKwl7IDB4M2ExNiwgMHgwICB9LAorCXsgMHgzYTAwLCAweDc4IH0sCisJeyAweDNhMDgsIDB4OSAgfSwKKwl7IDB4M2EwOSwgMHg2MCB9LAorCXsgMHgzYTBhLCAweDcgIH0sCisJeyAweDNhMGIsIDB4ZDAgfSwKKwl7IDB4M2EwZCwgMHgxMCB9LAorCXsgMHgzYTBlLCAweGQgIH0sCisJeyAweDQ0MDcsIDB4NCAgfSwKKwl7IDB4NTE5MywgMHg3MCB9LAorCXsgMHg1ODliLCAweDAgIH0sCisJeyAweDU4OWEsIDB4YzAgfSwKKwl7IDB4NDAxZSwgMHgyMCB9LAorCXsgMHg0MDAxLCAweDQyIH0sCisJeyAweDQwMWMsIDB4NiAgfSwKKwl7IDB4MzgyNSwgMHhhYyB9LAorCXsgMHgzODI3LCAweGMgIH0sCisJeyAweDUyOGEsIDB4MSAgfSwKKwl7IDB4NTI4YiwgMHg0ICB9LAorCXsgMHg1MjhjLCAweDggIH0sCisJeyAweDUyOGQsIDB4MTAgfSwKKwl7IDB4NTI4ZSwgMHgyMCB9LAorCXsgMHg1MjhmLCAweDI4IH0sCisJeyAweDUyOTAsIDB4MzAgfSwKKwl7IDB4NTI5MiwgMHgwICB9LAorCXsgMHg1MjkzLCAweDEgIH0sCisJeyAweDUyOTQsIDB4MCAgfSwKKwl7IDB4NTI5NSwgMHg0ICB9LAorCXsgMHg1Mjk2LCAweDAgIH0sCisJeyAweDUyOTcsIDB4OCAgfSwKKwl7IDB4NTI5OCwgMHgwICB9LAorCXsgMHg1Mjk5LCAweDEwIH0sCisJeyAweDUyOWEsIDB4MCAgfSwKKwl7IDB4NTI5YiwgMHgyMCB9LAorCXsgMHg1MjljLCAweDAgIH0sCisJeyAweDUyOWQsIDB4MjggfSwKKwl7IDB4NTI5ZSwgMHgwICB9LAorCXsgMHg1MjlmLCAweDMwIH0sCisJeyAweDUyODIsIDB4MCAgfSwKKwl7IDB4NTMwMCwgMHgwICB9LAorCXsgMHg1MzAxLCAweDIwIH0sCisJeyAweDUzMDIsIDB4MCAgfSwKKwl7IDB4NTMwMywgMHg3YyB9LAorCXsgMHg1MzBjLCAweDAgIH0sCisJeyAweDUzMGQsIDB4YyAgfSwKKwl7IDB4NTMwZSwgMHgyMCB9LAorCXsgMHg1MzBmLCAweDgwIH0sCisJeyAweDUzMTAsIDB4MjAgfSwKKwl7IDB4NTMxMSwgMHg4MCB9LAorCXsgMHg1MzA4LCAweDIwIH0sCisJeyAweDUzMDksIDB4NDAgfSwKKwl7IDB4NTMwNCwgMHgwICB9LAorCXsgMHg1MzA1LCAweDMwIH0sCisJeyAweDUzMDYsIDB4MCAgfSwKKwl7IDB4NTMwNywgMHg4MCB9LAorCXsgMHg1MzE0LCAweDggIH0sCisJeyAweDUzMTUsIDB4MjAgfSwKKwl7IDB4NTMxOSwgMHgzMCB9LAorCXsgMHg1MzE2LCAweDEwIH0sCisJeyAweDUzMTcsIDB4MCAgfSwKKwl7IDB4NTMxOCwgMHgyICB9LAorCXsgMHg1MzgwLCAweDEgIH0sCisJeyAweDUzODEsIDB4MCAgfSwKKwl7IDB4NTM4MiwgMHgwICB9LAorCXsgMHg1MzgzLCAweDRlIH0sCisJeyAweDUzODQsIDB4MCAgfSwKKwl7IDB4NTM4NSwgMHhmICB9LAorCXsgMHg1Mzg2LCAweDAgIH0sCisJeyAweDUzODcsIDB4MCAgfSwKKwl7IDB4NTM4OCwgMHgxICB9LAorCXsgMHg1Mzg5LCAweDE1IH0sCisJeyAweDUzOGEsIDB4MCAgfSwKKwl7IDB4NTM4YiwgMHgzMSB9LAorCXsgMHg1MzhjLCAweDAgIH0sCisJeyAweDUzOGQsIDB4MCAgfSwKKwl7IDB4NTM4ZSwgMHgwICB9LAorCXsgMHg1MzhmLCAweGYgIH0sCisJeyAweDUzOTAsIDB4MCAgfSwKKwl7IDB4NTM5MSwgMHhhYiB9LAorCXsgMHg1MzkyLCAweDAgIH0sCisJeyAweDUzOTMsIDB4YTIgfSwKKwl7IDB4NTM5NCwgMHg4ICB9LAorCXsgMHg1NDgwLCAweDE0IH0sCisJeyAweDU0ODEsIDB4MjEgfSwKKwl7IDB4NTQ4MiwgMHgzNiB9LAorCXsgMHg1NDgzLCAweDU3IH0sCisJeyAweDU0ODQsIDB4NjUgfSwKKwl7IDB4NTQ4NSwgMHg3MSB9LAorCXsgMHg1NDg2LCAweDdkIH0sCisJeyAweDU0ODcsIDB4ODcgfSwKKwl7IDB4NTQ4OCwgMHg5MSB9LAorCXsgMHg1NDg5LCAweDlhIH0sCisJeyAweDU0OGEsIDB4YWEgfSwKKwl7IDB4NTQ4YiwgMHhiOCB9LAorCXsgMHg1NDhjLCAweGNkIH0sCisJeyAweDU0OGQsIDB4ZGQgfSwKKwl7IDB4NTQ4ZSwgMHhlYSB9LAorCXsgMHg1NDhmLCAweDFkIH0sCisJeyAweDU0OTAsIDB4NSAgfSwKKwl7IDB4NTQ5MSwgMHgwICB9LAorCXsgMHg1NDkyLCAweDQgIH0sCisJeyAweDU0OTMsIDB4MjAgfSwKKwl7IDB4NTQ5NCwgMHgzICB9LAorCXsgMHg1NDk1LCAweDYwIH0sCisJeyAweDU0OTYsIDB4MiAgfSwKKwl7IDB4NTQ5NywgMHhiOCB9LAorCXsgMHg1NDk4LCAweDIgIH0sCisJeyAweDU0OTksIDB4ODYgfSwKKwl7IDB4NTQ5YSwgMHgyICB9LAorCXsgMHg1NDliLCAweDViIH0sCisJeyAweDU0OWMsIDB4MiAgfSwKKwl7IDB4NTQ5ZCwgMHgzYiB9LAorCXsgMHg1NDllLCAweDIgIH0sCisJeyAweDU0OWYsIDB4MWMgfSwKKwl7IDB4NTRhMCwgMHgyICB9LAorCXsgMHg1NGExLCAweDQgIH0sCisJeyAweDU0YTIsIDB4MSAgfSwKKwl7IDB4NTRhMywgMHhlZCB9LAorCXsgMHg1NGE0LCAweDEgIH0sCisJeyAweDU0YTUsIDB4YzUgfSwKKwl7IDB4NTRhNiwgMHgxICB9LAorCXsgMHg1NGE3LCAweGE1IH0sCisJeyAweDU0YTgsIDB4MSAgfSwKKwl7IDB4NTRhOSwgMHg2YyB9LAorCXsgMHg1NGFhLCAweDEgIH0sCisJeyAweDU0YWIsIDB4NDEgfSwKKwl7IDB4NTRhYywgMHgxICB9LAorCXsgMHg1NGFkLCAweDIwIH0sCisJeyAweDU0YWUsIDB4MCAgfSwKKwl7IDB4NTRhZiwgMHgxNiB9LAorCXsgMHg1NGIwLCAweDEgIH0sCisJeyAweDU0YjEsIDB4MjAgfSwKKwl7IDB4NTRiMiwgMHgwICB9LAorCXsgMHg1NGIzLCAweDEwIH0sCisJeyAweDU0YjQsIDB4MCAgfSwKKwl7IDB4NTRiNSwgMHhmMCB9LAorCXsgMHg1NGI2LCAweDAgIH0sCisJeyAweDU0YjcsIDB4ZGYgfSwKKwl7IDB4NTQwMiwgMHgzZiB9LAorCXsgMHg1NDAzLCAweDAgIH0sCisJeyAweDM0MDYsIDB4MCAgfSwKKwl7IDB4NTE4MCwgMHhmZiB9LAorCXsgMHg1MTgxLCAweDUyIH0sCisJeyAweDUxODIsIDB4MTEgfSwKKwl7IDB4NTE4MywgMHgxNCB9LAorCXsgMHg1MTg0LCAweDI1IH0sCisJeyAweDUxODUsIDB4MjQgfSwKKwl7IDB4NTE4NiwgMHg2ICB9LAorCXsgMHg1MTg3LCAweDggIH0sCisJeyAweDUxODgsIDB4OCAgfSwKKwl7IDB4NTE4OSwgMHg3YyB9LAorCXsgMHg1MThhLCAweDYwIH0sCisJeyAweDUxOGIsIDB4YjIgfSwKKwl7IDB4NTE4YywgMHhiMiB9LAorCXsgMHg1MThkLCAweDQ0IH0sCisJeyAweDUxOGUsIDB4M2QgfSwKKwl7IDB4NTE4ZiwgMHg1OCB9LAorCXsgMHg1MTkwLCAweDQ2IH0sCisJeyAweDUxOTEsIDB4ZjggfSwKKwl7IDB4NTE5MiwgMHg0ICB9LAorCXsgMHg1MTkzLCAweDcwIH0sCisJeyAweDUxOTQsIDB4ZjAgfSwKKwl7IDB4NTE5NSwgMHhmMCB9LAorCXsgMHg1MTk2LCAweDMgIH0sCisJeyAweDUxOTcsIDB4MSAgfSwKKwl7IDB4NTE5OCwgMHg0ICB9LAorCXsgMHg1MTk5LCAweDEyIH0sCisJeyAweDUxOWEsIDB4NCAgfSwKKwl7IDB4NTE5YiwgMHgwICB9LAorCXsgMHg1MTljLCAweDYgIH0sCisJeyAweDUxOWQsIDB4ODIgfSwKKwl7IDB4NTE5ZSwgMHgwICB9LAorCXsgMHg1MDI1LCAweDgwIH0sCisJeyAweDNhMGYsIDB4MzggfSwKKwl7IDB4M2ExMCwgMHgzMCB9LAorCXsgMHgzYTFiLCAweDNhIH0sCisJeyAweDNhMWUsIDB4MmUgfSwKKwl7IDB4M2ExMSwgMHg2MCB9LAorCXsgMHgzYTFmLCAweDEwIH0sCisJeyAweDU2ODgsIDB4YTYgfSwKKwl7IDB4NTY4OSwgMHg2YSB9LAorCXsgMHg1NjhhLCAweGVhIH0sCisJeyAweDU2OGIsIDB4YWUgfSwKKwl7IDB4NTY4YywgMHhhNiB9LAorCXsgMHg1NjhkLCAweDZhIH0sCisJeyAweDU2OGUsIDB4NjIgfSwKKwl7IDB4NTY4ZiwgMHgyNiB9LAorCXsgMHg1NTgzLCAweDQwIH0sCisJeyAweDU1ODQsIDB4NDAgfSwKKwl7IDB4NTU4MCwgMHgyICB9LAorCXsgMHg1MDAwLCAweGNmIH0sCisJeyAweDU4MDAsIDB4MjcgfSwKKwl7IDB4NTgwMSwgMHgxOSB9LAorCXsgMHg1ODAyLCAweDEyIH0sCisJeyAweDU4MDMsIDB4ZiAgfSwKKwl7IDB4NTgwNCwgMHgxMCB9LAorCXsgMHg1ODA1LCAweDE1IH0sCisJeyAweDU4MDYsIDB4MWUgfSwKKwl7IDB4NTgwNywgMHgyZiB9LAorCXsgMHg1ODA4LCAweDE1IH0sCisJeyAweDU4MDksIDB4ZCAgfSwKKwl7IDB4NTgwYSwgMHhhICB9LAorCXsgMHg1ODBiLCAweDkgIH0sCisJeyAweDU4MGMsIDB4YSAgfSwKKwl7IDB4NTgwZCwgMHhjICB9LAorCXsgMHg1ODBlLCAweDEyIH0sCisJeyAweDU4MGYsIDB4MTkgfSwKKwl7IDB4NTgxMCwgMHhiICB9LAorCXsgMHg1ODExLCAweDcgIH0sCisJeyAweDU4MTIsIDB4NCAgfSwKKwl7IDB4NTgxMywgMHgzICB9LAorCXsgMHg1ODE0LCAweDMgIH0sCisJeyAweDU4MTUsIDB4NiAgfSwKKwl7IDB4NTgxNiwgMHhhICB9LAorCXsgMHg1ODE3LCAweGYgIH0sCisJeyAweDU4MTgsIDB4YSAgfSwKKwl7IDB4NTgxOSwgMHg1ICB9LAorCXsgMHg1ODFhLCAweDEgIH0sCisJeyAweDU4MWIsIDB4MCAgfSwKKwl7IDB4NTgxYywgMHgwICB9LAorCXsgMHg1ODFkLCAweDMgIH0sCisJeyAweDU4MWUsIDB4OCAgfSwKKwl7IDB4NTgxZiwgMHhjICB9LAorCXsgMHg1ODIwLCAweGEgIH0sCisJeyAweDU4MjEsIDB4NSAgfSwKKwl7IDB4NTgyMiwgMHgxICB9LAorCXsgMHg1ODIzLCAweDAgIH0sCisJeyAweDU4MjQsIDB4MCAgfSwKKwl7IDB4NTgyNSwgMHgzICB9LAorCXsgMHg1ODI2LCAweDggIH0sCisJeyAweDU4MjcsIDB4YyAgfSwKKwl7IDB4NTgyOCwgMHhlICB9LAorCXsgMHg1ODI5LCAweDggIH0sCisJeyAweDU4MmEsIDB4NiAgfSwKKwl7IDB4NTgyYiwgMHg0ICB9LAorCXsgMHg1ODJjLCAweDUgIH0sCisJeyAweDU4MmQsIDB4NyAgfSwKKwl7IDB4NTgyZSwgMHhiICB9LAorCXsgMHg1ODJmLCAweDEyIH0sCisJeyAweDU4MzAsIDB4MTggfSwKKwl7IDB4NTgzMSwgMHgxMCB9LAorCXsgMHg1ODMyLCAweGMgIH0sCisJeyAweDU4MzMsIDB4YSAgfSwKKwl7IDB4NTgzNCwgMHhiICB9LAorCXsgMHg1ODM1LCAweGUgIH0sCisJeyAweDU4MzYsIDB4MTUgfSwKKwl7IDB4NTgzNywgMHgxOSB9LAorCXsgMHg1ODM4LCAweDMyIH0sCisJeyAweDU4MzksIDB4MWYgfSwKKwl7IDB4NTgzYSwgMHgxOCB9LAorCXsgMHg1ODNiLCAweDE2IH0sCisJeyAweDU4M2MsIDB4MTcgfSwKKwl7IDB4NTgzZCwgMHgxZSB9LAorCXsgMHg1ODNlLCAweDI2IH0sCisJeyAweDU4M2YsIDB4NTMgfSwKKwl7IDB4NTg0MCwgMHgxMCB9LAorCXsgMHg1ODQxLCAweGYgIH0sCisJeyAweDU4NDIsIDB4ZCAgfSwKKwl7IDB4NTg0MywgMHhjICB9LAorCXsgMHg1ODQ0LCAweGUgIH0sCisJeyAweDU4NDUsIDB4OSAgfSwKKwl7IDB4NTg0NiwgMHgxMSB9LAorCXsgMHg1ODQ3LCAweDEwIH0sCisJeyAweDU4NDgsIDB4MTAgfSwKKwl7IDB4NTg0OSwgMHgxMCB9LAorCXsgMHg1ODRhLCAweDEwIH0sCisJeyAweDU4NGIsIDB4ZSAgfSwKKwl7IDB4NTg0YywgMHgxMCB9LAorCXsgMHg1ODRkLCAweDEwIH0sCisJeyAweDU4NGUsIDB4MTEgfSwKKwl7IDB4NTg0ZiwgMHgxMCB9LAorCXsgMHg1ODUwLCAweGYgIH0sCisJeyAweDU4NTEsIDB4YyAgfSwKKwl7IDB4NTg1MiwgMHhmICB9LAorCXsgMHg1ODUzLCAweDEwIH0sCisJeyAweDU4NTQsIDB4MTAgfSwKKwl7IDB4NTg1NSwgMHhmICB9LAorCXsgMHg1ODU2LCAweGUgIH0sCisJeyAweDU4NTcsIDB4YiAgfSwKKwl7IDB4NTg1OCwgMHgxMCB9LAorCXsgMHg1ODU5LCAweGQgIH0sCisJeyAweDU4NWEsIDB4ZCAgfSwKKwl7IDB4NTg1YiwgMHhjICB9LAorCXsgMHg1ODVjLCAweGMgIH0sCisJeyAweDU4NWQsIDB4YyAgfSwKKwl7IDB4NTg1ZSwgMHhiICB9LAorCXsgMHg1ODVmLCAweGMgIH0sCisJeyAweDU4NjAsIDB4YyAgfSwKKwl7IDB4NTg2MSwgMHhjICB9LAorCXsgMHg1ODYyLCAweGQgIH0sCisJeyAweDU4NjMsIDB4OCAgfSwKKwl7IDB4NTg2NCwgMHgxMSB9LAorCXsgMHg1ODY1LCAweDE4IH0sCisJeyAweDU4NjYsIDB4MTggfSwKKwl7IDB4NTg2NywgMHgxOSB9LAorCXsgMHg1ODY4LCAweDE3IH0sCisJeyAweDU4NjksIDB4MTkgfSwKKwl7IDB4NTg2YSwgMHgxNiB9LAorCXsgMHg1ODZiLCAweDEzIH0sCisJeyAweDU4NmMsIDB4MTMgfSwKKwl7IDB4NTg2ZCwgMHgxMiB9LAorCXsgMHg1ODZlLCAweDEzIH0sCisJeyAweDU4NmYsIDB4MTYgfSwKKwl7IDB4NTg3MCwgMHgxNCB9LAorCXsgMHg1ODcxLCAweDEyIH0sCisJeyAweDU4NzIsIDB4MTAgfSwKKwl7IDB4NTg3MywgMHgxMSB9LAorCXsgMHg1ODc0LCAweDExIH0sCisJeyAweDU4NzUsIDB4MTYgfSwKKwl7IDB4NTg3NiwgMHgxNCB9LAorCXsgMHg1ODc3LCAweDExIH0sCisJeyAweDU4NzgsIDB4MTAgfSwKKwl7IDB4NTg3OSwgMHhmICB9LAorCXsgMHg1ODdhLCAweDEwIH0sCisJeyAweDU4N2IsIDB4MTQgfSwKKwl7IDB4NTg3YywgMHgxMyB9LAorCXsgMHg1ODdkLCAweDEyIH0sCisJeyAweDU4N2UsIDB4MTEgfSwKKwl7IDB4NTg3ZiwgMHgxMSB9LAorCXsgMHg1ODgwLCAweDEyIH0sCisJeyAweDU4ODEsIDB4MTUgfSwKKwl7IDB4NTg4MiwgMHgxNCB9LAorCXsgMHg1ODgzLCAweDE1IH0sCisJeyAweDU4ODQsIDB4MTUgfSwKKwl7IDB4NTg4NSwgMHgxNSB9LAorCXsgMHg1ODg2LCAweDEzIH0sCisJeyAweDU4ODcsIDB4MTcgfSwKKwl7IDB4MzcxMCwgMHgxMCB9LAorCXsgMHgzNjMyLCAweDUxIH0sCisJeyAweDM3MDIsIDB4MTAgfSwKKwl7IDB4MzcwMywgMHhiMiB9LAorCXsgMHgzNzA0LCAweDE4IH0sCisJeyAweDM3MGIsIDB4NDAgfSwKKwl7IDB4MzcwZCwgMHgzICB9LAorCXsgMHgzNjMxLCAweDEgIH0sCisJeyAweDM2MzIsIDB4NTIgfSwKKwl7IDB4MzYwNiwgMHgyNCB9LAorCXsgMHgzNjIwLCAweDk2IH0sCisJeyAweDU3ODUsIDB4NyAgfSwKKwl7IDB4M2ExMywgMHgzMCB9LAorCXsgMHgzNjAwLCAweDUyIH0sCisJeyAweDM2MDQsIDB4NDggfSwKKwl7IDB4MzYwNiwgMHgxYiB9LAorCXsgMHgzNzBkLCAweGIgIH0sCisJeyAweDM3MGYsIDB4YzAgfSwKKwl7IDB4MzcwOSwgMHgxICB9LAorCXsgMHgzODIzLCAweDAgIH0sCisJeyAweDUwMDcsIDB4MCAgfSwKKwl7IDB4NTAwOSwgMHgwICB9LAorCXsgMHg1MDExLCAweDAgIH0sCisJeyAweDUwMTMsIDB4MCAgfSwKKwl7IDB4NTE5ZSwgMHgwICB9LAorCXsgMHg1MDg2LCAweDAgIH0sCisJeyAweDUwODcsIDB4MCAgfSwKKwl7IDB4NTA4OCwgMHgwICB9LAorCXsgMHg1MDg5LCAweDAgIH0sCisJeyAweDMwMmIsIDB4MCAgfSwKKwl7IDB4MzUwMywgMHg3ICB9LAorCXsgMHgzMDExLCAweDggIH0sCisJeyAweDM1MGMsIDB4MiAgfSwKKwl7IDB4MzUwZCwgMHhlNCB9LAorCXsgMHgzNjIxLCAweGM5IH0sCisJeyAweDM3MGEsIDB4ODEgfSwKKwl7IDB4ZmZmZiwgMHhmZiB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd2YWxfbGlzdCBvdjU2NDJfZGVmYXVsdF9yZWdzX2ZpbmFsaXNlW10gPSB7CisJeyAweDM4MTAsIDB4YzIgfSwKKwl7IDB4MzgxOCwgMHhjOSB9LAorCXsgMHgzODFjLCAweDEwIH0sCisJeyAweDM4MWQsIDB4YTAgfSwKKwl7IDB4MzgxZSwgMHg1ICB9LAorCXsgMHgzODFmLCAweGIwIH0sCisJeyAweDM4MjAsIDB4MCAgfSwKKwl7IDB4MzgyMSwgMHgwICB9LAorCXsgMHgzODI0LCAweDExIH0sCisJeyAweDNhMDgsIDB4MWIgfSwKKwl7IDB4M2EwOSwgMHhjMCB9LAorCXsgMHgzYTBhLCAweDE3IH0sCisJeyAweDNhMGIsIDB4MjAgfSwKKwl7IDB4M2EwZCwgMHgyICB9LAorCXsgMHgzYTBlLCAweDEgIH0sCisJeyAweDQwMWMsIDB4NCAgfSwKKwl7IDB4NTY4MiwgMHg1ICB9LAorCXsgMHg1NjgzLCAweDAgIH0sCisJeyAweDU2ODYsIDB4MiAgfSwKKwl7IDB4NTY4NywgMHhjYyB9LAorCXsgMHg1MDAxLCAweDRmIH0sCisJeyAweDU4OWIsIDB4NiAgfSwKKwl7IDB4NTg5YSwgMHhjNSB9LAorCXsgMHgzNTAzLCAweDAgIH0sCisJeyAweDQ2MGMsIDB4MjAgfSwKKwl7IDB4NDYwYiwgMHgzNyB9LAorCXsgMHg0NzFjLCAweGQwIH0sCisJeyAweDQ3MWQsIDB4NSAgfSwKKwl7IDB4MzgxNSwgMHgxICB9LAorCXsgMHgzODE4LCAweGMxIH0sCisJeyAweDUwMWYsIDB4MCAgfSwKKwl7IDB4NTAwMiwgMHhlMCB9LAorCXsgMHg0MzAwLCAweDMyIH0sIC8qIFVZVlkgKi8KKwl7IDB4MzAwMiwgMHgxYyB9LAorCXsgMHg0ODAwLCAweDE0IH0sCisJeyAweDQ4MDEsIDB4ZiAgfSwKKwl7IDB4MzAwNywgMHgzYiB9LAorCXsgMHgzMDBlLCAweDQgIH0sCisJeyAweDQ4MDMsIDB4NTAgfSwKKwl7IDB4MzgxNSwgMHgxICB9LAorCXsgMHg0NzEzLCAweDIgIH0sCisJeyAweDQ4NDIsIDB4MSAgfSwKKwl7IDB4MzAwZiwgMHhlICB9LAorCXsgMHgzMDAzLCAweDMgIH0sCisJeyAweDMwMDMsIDB4MSAgfSwKKwl7IDB4ZmZmZiwgMHhmZiB9LAorfTsKKworc3RydWN0IG92NTY0Ml9kYXRhZm10IHsKKwllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUJY29kZTsKKwllbnVtIHY0bDJfY29sb3JzcGFjZQkJY29sb3JzcGFjZTsKK307CisKK3N0cnVjdCBvdjU2NDIgeworCXN0cnVjdCB2NGwyX3N1YmRldgkJc3ViZGV2OworCWNvbnN0IHN0cnVjdCBvdjU2NDJfZGF0YWZtdAkqZm10OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvdjU2NDJfZGF0YWZtdCBvdjU2NDJfY29sb3VyX2ZtdHNbXSA9IHsKKwl7VjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDgsIFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3Y1NjQyICp0b19vdjU2NDIoY29uc3Qgc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBzdHJ1Y3Qgb3Y1NjQyLCBzdWJkZXYpOworfQorCisvKiBGaW5kIGEgZGF0YSBmb3JtYXQgYnkgYSBwaXhlbCBjb2RlIGluIGFuIGFycmF5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG92NTY0Ml9kYXRhZm10CisJCQkqb3Y1NjQyX2ZpbmRfZGF0YWZtdChlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NTY0Ml9jb2xvdXJfZm10cyk7IGkrKykKKwkJaWYgKG92NTY0Ml9jb2xvdXJfZm10c1tpXS5jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gb3Y1NjQyX2NvbG91cl9mbXRzICsgaTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHU4ICp2YWwpCit7CisJaW50IHJldDsKKwkvKiBXZSBoYXZlIDE2LWJpdCBpMmMgYWRkcmVzc2VzIC0gY2FyZSBmb3IgZW5kaWFuZXNzICovCisJdW5zaWduZWQgY2hhciBkYXRhWzJdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgMik7CisJaWYgKHJldCA8IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHJlYWQgZXJyb3IsIHJlZzogJXhcbiIsCisJCQlfX2Z1bmNfXywgcmVnKTsKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUlPOworCX0KKworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHZhbCwgMSk7CisJaWYgKHJldCA8IDEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHJlYWQgZXJyb3IsIHJlZzogJXhcbiIsCisJCQkJX19mdW5jX18sIHJlZyk7CisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgZGF0YVszXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYsIHZhbCB9OworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgMyk7CisJaWYgKHJldCA8IDMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogaTJjIHdyaXRlIGVycm9yLCByZWc6ICV4XG4iLAorCQkJX19mdW5jX18sIHJlZyk7CisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG92NTY0Ml9nZXRfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXQ7CisJdTggdmFsOworCisJaWYgKHJlZy0+cmVnICYgfjB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWctPnNpemUgPSAxOworCisJcmV0ID0gcmVnX3JlYWQoY2xpZW50LCByZWctPnJlZywgJnZhbCk7CisJaWYgKCFyZXQpCisJCXJlZy0+dmFsID0gKF9fdTY0KXZhbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y1NjQyX3NldF9yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAocmVnLT5yZWcgJiB+MHhmZmZmIHx8IHJlZy0+dmFsICYgfjB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ193cml0ZShjbGllbnQsIHJlZy0+cmVnLCByZWctPnZhbCk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBvdjU2NDJfd3JpdGVfYXJyYXkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQlzdHJ1Y3QgcmVndmFsX2xpc3QgKnZhbHMpCit7CisJd2hpbGUgKHZhbHMtPnJlZ19udW0gIT0gMHhmZmZmIHx8IHZhbHMtPnZhbHVlICE9IDB4ZmYpIHsKKwkJaW50IHJldCA9IHJlZ193cml0ZShjbGllbnQsIHZhbHMtPnJlZ19udW0sIHZhbHMtPnZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQl2YWxzKys7CisJfQorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiUmVnaXN0ZXIgbGlzdCBsb2FkZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NTY0Ml9zZXRfcmVzb2x1dGlvbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByZXQ7CisJdTggc3RhcnRfeF9oaWdoID0gKChPVjU2NDJfU0VOU09SX1NJWkVfWCAtIE9WNTY0Ml9XSURUSCkgLyAyKSA+PiA4OworCXU4IHN0YXJ0X3hfbG93ICA9ICgoT1Y1NjQyX1NFTlNPUl9TSVpFX1ggLSBPVjU2NDJfV0lEVEgpIC8gMikgJiAweGZmOworCXU4IHN0YXJ0X3lfaGlnaCA9ICgoT1Y1NjQyX1NFTlNPUl9TSVpFX1kgLSBPVjU2NDJfSEVJR0hUKSAvIDIpID4+IDg7CisJdTggc3RhcnRfeV9sb3cgID0gKChPVjU2NDJfU0VOU09SX1NJWkVfWSAtIE9WNTY0Ml9IRUlHSFQpIC8gMikgJiAweGZmOworCisJdTggd2lkdGhfaGlnaAk9IE9WNTY0Ml9XSURUSCAgPj4gODsKKwl1OCB3aWR0aF9sb3cJPSBPVjU2NDJfV0lEVEggICYgMHhmZjsKKwl1OCBoZWlnaHRfaGlnaAk9IE9WNTY0Ml9IRUlHSFQgPj4gODsKKwl1OCBoZWlnaHRfbG93CT0gT1Y1NjQyX0hFSUdIVCAmIDB4ZmY7CisKKwl1OCB0b3RhbF93aWR0aF9oaWdoICA9IE9WNTY0Ml9UT1RBTF9XSURUSCAgPj4gODsKKwl1OCB0b3RhbF93aWR0aF9sb3cgICA9IE9WNTY0Ml9UT1RBTF9XSURUSCAgJiAweGZmOworCXU4IHRvdGFsX2hlaWdodF9oaWdoID0gT1Y1NjQyX1RPVEFMX0hFSUdIVCA+PiA4OworCXU4IHRvdGFsX2hlaWdodF9sb3cgID0gT1Y1NjQyX1RPVEFMX0hFSUdIVCAmIDB4ZmY7CisKKwlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSRUdfV0lORE9XX1NUQVJUX1hfSElHSCwgc3RhcnRfeF9oaWdoKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX1dJTkRPV19TVEFSVF9YX0xPVywgc3RhcnRfeF9sb3cpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSRUdfV0lORE9XX1NUQVJUX1lfSElHSCwgc3RhcnRfeV9oaWdoKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX1dJTkRPV19TVEFSVF9ZX0xPVywgc3RhcnRfeV9sb3cpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJFR19XSU5ET1dfV0lEVEhfSElHSCwgd2lkdGhfaGlnaCk7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJFR19XSU5ET1dfV0lEVEhfTE9XICwgd2lkdGhfbG93KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX1dJTkRPV19IRUlHSFRfSElHSCwgaGVpZ2h0X2hpZ2gpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSRUdfV0lORE9XX0hFSUdIVF9MT1csICBoZWlnaHRfbG93KTsKKworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSRUdfT1VUX1dJRFRIX0hJR0gsIHdpZHRoX2hpZ2gpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoY2xpZW50LCBSRUdfT1VUX1dJRFRIX0xPVyAsIHdpZHRoX2xvdyk7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJFR19PVVRfSEVJR0hUX0hJR0gsIGhlaWdodF9oaWdoKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX09VVF9IRUlHSFRfTE9XLCAgaGVpZ2h0X2xvdyk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX09VVF9UT1RBTF9XSURUSF9ISUdILCB0b3RhbF93aWR0aF9oaWdoKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX09VVF9UT1RBTF9XSURUSF9MT1csIHRvdGFsX3dpZHRoX2xvdyk7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ193cml0ZShjbGllbnQsIFJFR19PVVRfVE9UQUxfSEVJR0hUX0hJR0gsIHRvdGFsX2hlaWdodF9oaWdoKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGNsaWVudCwgUkVHX09VVF9UT1RBTF9IRUlHSFRfTE9XLCAgdG90YWxfaGVpZ2h0X2xvdyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NTY0Ml90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQoreworCWNvbnN0IHN0cnVjdCBvdjU2NDJfZGF0YWZtdCAqZm10ID0gb3Y1NjQyX2ZpbmRfZGF0YWZtdChtZi0+Y29kZSk7CisKKwlkZXZfZGJnKHNkLT52NGwyX2Rldi0+ZGV2LCAiJXMoJXUpIHdpZHRoOiAldSBoZWlndGg6ICV1XG4iLAorCQkJX19mdW5jX18sIG1mLT5jb2RlLCBtZi0+d2lkdGgsIG1mLT5oZWlnaHQpOworCisJaWYgKCFmbXQpIHsKKwkJbWYtPmNvZGUJPSBvdjU2NDJfY29sb3VyX2ZtdHNbMF0uY29kZTsKKwkJbWYtPmNvbG9yc3BhY2UJPSBvdjU2NDJfY29sb3VyX2ZtdHNbMF0uY29sb3JzcGFjZTsKKwl9CisKKwltZi0+d2lkdGgJPSBPVjU2NDJfV0lEVEg7CisJbWYtPmhlaWdodAk9IE9WNTY0Ml9IRUlHSFQ7CisJbWYtPmZpZWxkCT0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y1NjQyX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IG92NTY0MiAqcHJpdiA9IHRvX292NTY0MihjbGllbnQpOworCisJZGV2X2RiZyhzZC0+djRsMl9kZXYtPmRldiwgIiVzKCV1KVxuIiwgX19mdW5jX18sIG1mLT5jb2RlKTsKKworCS8qIE1JUEkgQ1NJIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgZm9ybWF0LCBkb3VibGUtY2hlY2sgKi8KKwlpZiAoIW92NTY0Ml9maW5kX2RhdGFmbXQobWYtPmNvZGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW92NTY0Ml90cnlfZm10KHNkLCBtZik7CisKKwlwcml2LT5mbXQgPSBvdjU2NDJfZmluZF9kYXRhZm10KG1mLT5jb2RlKTsKKworCW92NTY0Ml93cml0ZV9hcnJheShjbGllbnQsIG92NTY0Ml9kZWZhdWx0X3JlZ3NfaW5pdCk7CisJb3Y1NjQyX3NldF9yZXNvbHV0aW9uKGNsaWVudCk7CisJb3Y1NjQyX3dyaXRlX2FycmF5KGNsaWVudCwgb3Y1NjQyX2RlZmF1bHRfcmVnc19maW5hbGlzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjU2NDJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgb3Y1NjQyICpwcml2ID0gdG9fb3Y1NjQyKGNsaWVudCk7CisKKwljb25zdCBzdHJ1Y3Qgb3Y1NjQyX2RhdGFmbXQgKmZtdCA9IHByaXYtPmZtdDsKKworCW1mLT5jb2RlCT0gZm10LT5jb2RlOworCW1mLT5jb2xvcnNwYWNlCT0gZm10LT5jb2xvcnNwYWNlOworCW1mLT53aWR0aAk9IE9WNTY0Ml9XSURUSDsKKwltZi0+aGVpZ2h0CT0gT1Y1NjQyX0hFSUdIVDsKKwltZi0+ZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjU2NDJfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQoreworCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKG92NTY0Ml9jb2xvdXJfZm10cykpCisJCXJldHVybiAtRUlOVkFMOworCisJKmNvZGUgPSBvdjU2NDJfY29sb3VyX2ZtdHNbaW5kZXhdLmNvZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y1NjQyX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoaWQtPm1hdGNoLnR5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpZC0+bWF0Y2guYWRkciAhPSBjbGllbnQtPmFkZHIpCisJCXJldHVybiAtRU5PREVWOworCisJaWQtPmlkZW50CT0gVjRMMl9JREVOVF9PVjU2NDI7CisJaWQtPnJldmlzaW9uCT0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NTY0Ml9nX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CisKKwlhLT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlyZWN0LT50b3AJPSAwOworCXJlY3QtPmxlZnQJPSAwOworCXJlY3QtPndpZHRoCT0gT1Y1NjQyX1dJRFRIOworCXJlY3QtPmhlaWdodAk9IE9WNTY0Ml9IRUlHSFQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjU2NDJfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQkJPSAwOworCWEtPmJvdW5kcy50b3AJCQk9IDA7CisJYS0+Ym91bmRzLndpZHRoCQkJPSBPVjU2NDJfV0lEVEg7CisJYS0+Ym91bmRzLmhlaWdodAkJPSBPVjU2NDJfSEVJR0hUOworCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CisJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG92NTY0Ml9zdWJkZXZfdmlkZW9fb3BzID0geworCS5zX21idXNfZm10CT0gb3Y1NjQyX3NfZm10LAorCS5nX21idXNfZm10CT0gb3Y1NjQyX2dfZm10LAorCS50cnlfbWJ1c19mbXQJPSBvdjU2NDJfdHJ5X2ZtdCwKKwkuZW51bV9tYnVzX2ZtdAk9IG92NTY0Ml9lbnVtX2ZtdCwKKwkuZ19jcm9wCQk9IG92NTY0Ml9nX2Nyb3AsCisJLmNyb3BjYXAJPSBvdjU2NDJfY3JvcGNhcCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3Y1NjQyX3N1YmRldl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50CT0gb3Y1NjQyX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIJPSBvdjU2NDJfZ2V0X3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyCT0gb3Y1NjQyX3NldF9yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3Y1NjQyX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJPSAmb3Y1NjQyX3N1YmRldl9jb3JlX29wcywKKwkudmlkZW8JPSAmb3Y1NjQyX3N1YmRldl92aWRlb19vcHMsCit9OworCisvKgorICogV2UgaGF2ZSB0byBwcm92aWRlIHNvYy1jYW1lcmEgb3BlcmF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2F5CisgKiB0aGVyZS4gVGhlIE1JUEkgQ1NJMiBkcml2ZXIgd2lsbCBwcm92aWRlIC5xdWVyeV9idXNfcGFyYW0gYW5kIC5zZXRfYnVzX3BhcmFtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNvY19vdjU2NDJfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvY19vdjU2NDJfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBzb2Nfb3Y1NjQyX29wcyA9IHsKKwkucXVlcnlfYnVzX3BhcmFtCT0gc29jX292NTY0Ml9xdWVyeV9idXNfcGFyYW0sCisJLnNldF9idXNfcGFyYW0JCT0gc29jX292NTY0Ml9zZXRfYnVzX3BhcmFtLAorfTsKKworc3RhdGljIGludCBvdjU2NDJfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByZXQ7CisJdTggaWRfaGlnaCwgaWRfbG93OworCXUxNiBpZDsKKworCS8qIFJlYWQgc2Vuc29yIE1vZGVsIElEICovCisJcmV0ID0gcmVnX3JlYWQoY2xpZW50LCBSRUdfQ0hJUF9JRF9ISUdILCAmaWRfaGlnaCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZCA9IGlkX2hpZ2ggPDwgODsKKworCXJldCA9IHJlZ19yZWFkKGNsaWVudCwgUkVHX0NISVBfSURfTE9XLCAmaWRfbG93KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlkIHw9IGlkX2xvdzsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkNoaXAgSUQgMHglMDR4IGRldGVjdGVkXG4iLCBpZCk7CisKKwlpZiAoaWQgIT0gMHg1NjQyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NTY0Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKK3sKKwlzdHJ1Y3Qgb3Y1NjQyICpwcml2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2w7CisJaW50IHJldDsKKworCWlmICghaWNkKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiT1Y1NjQyOiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKKwlpZiAoIWljbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk9WNTY0MjogbWlzc2luZyBwbGF0Zm9ybSBkYXRhIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3Y1NjQyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXY0bDJfaTJjX3N1YmRldl9pbml0KCZwcml2LT5zdWJkZXYsIGNsaWVudCwgJm92NTY0Ml9zdWJkZXZfb3BzKTsKKworCWljZC0+b3BzCT0gJnNvY19vdjU2NDJfb3BzOworCXByaXYtPmZtdAk9ICZvdjU2NDJfY29sb3VyX2ZtdHNbMF07CisKKwlyZXQgPSBvdjU2NDJfdmlkZW9fcHJvYmUoaWNkLCBjbGllbnQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWljZC0+b3BzID0gTlVMTDsKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NTY0Ml9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgb3Y1NjQyICpwcml2ID0gdG9fb3Y1NjQyKGNsaWVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOworCisJaWNkLT5vcHMgPSBOVUxMOworCWlmIChpY2wtPmZyZWVfYnVzKQorCQlpY2wtPmZyZWVfYnVzKGljbCk7CisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92NTY0Ml9pZFtdID0geworCXsgIm92NTY0MiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3Y1NjQyX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NTY0Ml9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm92NTY0MiIsCisJfSwKKwkucHJvYmUJCT0gb3Y1NjQyX3Byb2JlLAorCS5yZW1vdmUJCT0gb3Y1NjQyX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBvdjU2NDJfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvdjU2NDJfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm92NTY0Ml9pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG92NTY0Ml9tb2RfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZvdjU2NDJfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG92NTY0Ml9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChvdjU2NDJfbW9kX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk9tbml2aXNpb24gT1Y1NjQyIENhbWVyYSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJhc3RpYW4gSGVjaHQgPGhlY2h0YkBnbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwppbmRleCBkNGU3YzExLi44YWEwNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTE5LDggKzE5LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KLQotI2luY2x1ZGUgIm92NzY3MC5oIgorI2luY2x1ZGUgPG1lZGlhL292NzY3MC5oPgogCiBNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGxvdy1sZXZlbCBkcml2ZXIgZm9yIE9tbmlWaXNpb24gb3Y3NjcwIHNlbnNvcnMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCmluZGV4IDQ4ODk1ZWYuLjM5Nzg3MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwpAQCAtMTAzMiwxMyArMTAzMiw5IEBACiAJdTggICAgICAgICAgICAgICAgICBwaWQsIHZlcjsKIAljb25zdCBjaGFyICAgICAgICAgKmRldm5hbWU7CiAKLQkvKgotCSAqIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KLQkgKi8KLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4gKi8KKwlCVUdfT04oIWljZC0+cGFyZW50IHx8CisJICAgICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpOwogCiAJLyoKIAkgKiBjaGVjayBhbmQgc2hvdyBwcm9kdWN0IElEIGFuZCBtYW51ZmFjdHVyZXIgSUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTY0MC5jCmluZGV4IDUxNzNhYzQuLjM2ODFhNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NjQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjk2NDAuYwpAQCAtNjU3LDE2ICs2NTcsOSBAQAogCWNvbnN0IGNoYXIJKmRldm5hbWU7CiAJaW50CQlyZXQgPSAwOwogCi0JLyoKLQkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgotCSAqIFNvIHRoaXMgZW50aXJlIHRlc3QgaXMgY29tcGxldGVseSByZWR1bmRhbnQuCi0JICovCi0JaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKLQkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQYXJlbnQgbWlzc2luZyBvciBpbnZhbGlkIVxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyOwotCX0KKwkvKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLiAqLworCUJVR19PTighaWNkLT5wYXJlbnQgfHwKKwkgICAgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSk7CiAKIAkvKgogCSAqIGNoZWNrIGFuZCBzaG93IHByb2R1Y3QgSUQgYW5kIG1hbnVmYWN0dXJlciBJRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjk3NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y5NzQwLmMKaW5kZXggNGQ0ZWU0Zi4uZWRkMWZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjk3NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292OTc0MC5jCkBAIC00NCwxMiArNDQsMTIgQEAKICNkZWZpbmUgT1Y5NzQwX1lfQUREUl9TVEFSVF9MTwkJMHgwMzQ3CiAjZGVmaW5lIE9WOTc0MF9YX0FERFJfRU5EX0hJCQkweDAzNDgKICNkZWZpbmUgT1Y5NzQwX1hfQUREUl9FTkRfTE8JCTB4MDM0OQotI2RlZmluZSBPVjk3NDBfWV9BRERSX0VORF9ISQkJMHgwMzRBCi0jZGVmaW5lIE9WOTc0MF9ZX0FERFJfRU5EX0xPCQkweDAzNEIKLSNkZWZpbmUgT1Y5NzQwX1hfT1VUUFVUX1NJWkVfSEkJCTB4MDM0QwotI2RlZmluZSBPVjk3NDBfWF9PVVRQVVRfU0laRV9MTwkJMHgwMzRECi0jZGVmaW5lIE9WOTc0MF9ZX09VVFBVVF9TSVpFX0hJCQkweDAzNEUKLSNkZWZpbmUgT1Y5NzQwX1lfT1VUUFVUX1NJWkVfTE8JCTB4MDM0RgorI2RlZmluZSBPVjk3NDBfWV9BRERSX0VORF9ISQkJMHgwMzRhCisjZGVmaW5lIE9WOTc0MF9ZX0FERFJfRU5EX0xPCQkweDAzNGIKKyNkZWZpbmUgT1Y5NzQwX1hfT1VUUFVUX1NJWkVfSEkJCTB4MDM0YworI2RlZmluZSBPVjk3NDBfWF9PVVRQVVRfU0laRV9MTwkJMHgwMzRkCisjZGVmaW5lIE9WOTc0MF9ZX09VVFBVVF9TSVpFX0hJCQkweDAzNGUKKyNkZWZpbmUgT1Y5NzQwX1lfT1VUUFVUX1NJWkVfTE8JCTB4MDM0ZgogCiAvKiBJTyBDb250cm9sIFJlZ2lzdGVycyAqLwogI2RlZmluZSBPVjk3NDBfSU9fQ1JFTDAwCQkweDMwMDIKQEAgLTY4LDYgKzY4LDcgQEAKICNkZWZpbmUgT1Y5NzQwX0FOQUxPR19DVFJMMDQJCTB4MzYwNAogI2RlZmluZSBPVjk3NDBfQU5BTE9HX0NUUkwxMAkJMHgzNjEwCiAjZGVmaW5lIE9WOTc0MF9BTkFMT0dfQ1RSTDEyCQkweDM2MTIKKyNkZWZpbmUgT1Y5NzQwX0FOQUxPR19DVFJMMTUJCTB4MzYxNQogI2RlZmluZSBPVjk3NDBfQU5BTE9HX0NUUkwyMAkJMHgzNjIwCiAjZGVmaW5lIE9WOTc0MF9BTkFMT0dfQ1RSTDIxCQkweDM2MjEKICNkZWZpbmUgT1Y5NzQwX0FOQUxPR19DVFJMMjIJCTB4MzYyMgpAQCAtODksMjggKzkwLDI4IEBACiAjZGVmaW5lIE9WOTc0MF9USU1JTkdfQ1RSTDM1CQkweDM4MzUKIAogLyogQmFuZGluZyBGaWx0ZXIgKi8KLSNkZWZpbmUgT1Y5NzQwX0FFQ19NQVhFWFBPXzYwX0gJCTB4M0EwMgotI2RlZmluZSBPVjk3NDBfQUVDX01BWEVYUE9fNjBfTAkJMHgzQTAzCi0jZGVmaW5lIE9WOTc0MF9BRUNfQjUwX1NURVBfSEkJCTB4M0EwOAotI2RlZmluZSBPVjk3NDBfQUVDX0I1MF9TVEVQX0xPCQkweDNBMDkKLSNkZWZpbmUgT1Y5NzQwX0FFQ19CNjBfU1RFUF9ISQkJMHgzQTBBCi0jZGVmaW5lIE9WOTc0MF9BRUNfQjYwX1NURVBfTE8JCTB4M0EwQgotI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwwRAkJMHgzQTBECi0jZGVmaW5lIE9WOTc0MF9BRUNfQ1RSTDBFCQkweDNBMEUKLSNkZWZpbmUgT1Y5NzQwX0FFQ19NQVhFWFBPXzUwX0gJCTB4M0ExNAotI2RlZmluZSBPVjk3NDBfQUVDX01BWEVYUE9fNTBfTAkJMHgzQTE1CisjZGVmaW5lIE9WOTc0MF9BRUNfTUFYRVhQT182MF9ICQkweDNhMDIKKyNkZWZpbmUgT1Y5NzQwX0FFQ19NQVhFWFBPXzYwX0wJCTB4M2EwMworI2RlZmluZSBPVjk3NDBfQUVDX0I1MF9TVEVQX0hJCQkweDNhMDgKKyNkZWZpbmUgT1Y5NzQwX0FFQ19CNTBfU1RFUF9MTwkJMHgzYTA5CisjZGVmaW5lIE9WOTc0MF9BRUNfQjYwX1NURVBfSEkJCTB4M2EwYQorI2RlZmluZSBPVjk3NDBfQUVDX0I2MF9TVEVQX0xPCQkweDNhMGIKKyNkZWZpbmUgT1Y5NzQwX0FFQ19DVFJMMEQJCTB4M2EwZAorI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwwRQkJMHgzYTBlCisjZGVmaW5lIE9WOTc0MF9BRUNfTUFYRVhQT181MF9ICQkweDNhMTQKKyNkZWZpbmUgT1Y5NzQwX0FFQ19NQVhFWFBPXzUwX0wJCTB4M2ExNQogCiAvKiBBRUMvQUdDIENvbnRyb2wgKi8KICNkZWZpbmUgT1Y5NzQwX0FFQ19FTkFCTEUJCTB4MzUwMwotI2RlZmluZSBPVjk3NDBfR0FJTl9DRUlMSU5HXzAxCQkweDNBMTgKLSNkZWZpbmUgT1Y5NzQwX0dBSU5fQ0VJTElOR18wMgkJMHgzQTE5Ci0jZGVmaW5lIE9WOTc0MF9BRUNfSElfVEhSRVNIT0xECQkweDNBMTEKLSNkZWZpbmUgT1Y5NzQwX0FFQ18zQTFBCQkJMHgzQTFBCi0jZGVmaW5lIE9WOTc0MF9BRUNfQ1RSTDFCX1dQVDIJCTB4M0ExQgotI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwwRl9XUFQJCTB4M0EwRgotI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwxMF9CUFQJCTB4M0ExMAotI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwxRV9CUFQyCQkweDNBMUUKLSNkZWZpbmUgT1Y5NzQwX0FFQ19MT19USFJFU0hPTEQJCTB4M0ExRgorI2RlZmluZSBPVjk3NDBfR0FJTl9DRUlMSU5HXzAxCQkweDNhMTgKKyNkZWZpbmUgT1Y5NzQwX0dBSU5fQ0VJTElOR18wMgkJMHgzYTE5CisjZGVmaW5lIE9WOTc0MF9BRUNfSElfVEhSRVNIT0xECQkweDNhMTEKKyNkZWZpbmUgT1Y5NzQwX0FFQ18zQTFBCQkJMHgzYTFhCisjZGVmaW5lIE9WOTc0MF9BRUNfQ1RSTDFCX1dQVDIJCTB4M2ExYgorI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwwRl9XUFQJCTB4M2EwZgorI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwxMF9CUFQJCTB4M2ExMAorI2RlZmluZSBPVjk3NDBfQUVDX0NUUkwxRV9CUFQyCQkweDNhMWUKKyNkZWZpbmUgT1Y5NzQwX0FFQ19MT19USFJFU0hPTEQJCTB4M2ExZgogCiAvKiBCTEMgQ29udHJvbCAqLwogI2RlZmluZSBPVjk3NDBfQkxDX0FVVE9fRU5BQkxFCQkweDQwMDIKQEAgLTEzMiw3ICsxMzMsNyBAQAogI2RlZmluZSBPVjk3NDBfVlRfU1lTX0NMS19ESVYJCTB4MDMwMwogI2RlZmluZSBPVjk3NDBfVlRfUElYX0NMS19ESVYJCTB4MDMwMQogI2RlZmluZSBPVjk3NDBfUExMX0NUUkwzMDEwCQkweDMwMTAKLSNkZWZpbmUgT1Y5NzQwX1ZGSUZPX0NUUkwwMAkJMHg0NjBFCisjZGVmaW5lIE9WOTc0MF9WRklGT19DVFJMMDAJCTB4NDYwZQogCiAvKiBJU1AgQ29udHJvbCAqLwogI2RlZmluZSBPVjk3NDBfSVNQX0NUUkwwMAkJMHg1MDAwCkBAIC0xNDEsOSArMTQyLDkgQEAKICNkZWZpbmUgT1Y5NzQwX0lTUF9DVFJMMDUJCTB4NTAwNQogI2RlZmluZSBPVjk3NDBfSVNQX0NUUkwxMgkJMHg1MDEyCiAjZGVmaW5lIE9WOTc0MF9JU1BfQ1RSTDE5CQkweDUwMTkKLSNkZWZpbmUgT1Y5NzQwX0lTUF9DVFJMMUEJCTB4NTAxQQotI2RlZmluZSBPVjk3NDBfSVNQX0NUUkwxRQkJMHg1MDFFCi0jZGVmaW5lIE9WOTc0MF9JU1BfQ1RSTDFGCQkweDUwMUYKKyNkZWZpbmUgT1Y5NzQwX0lTUF9DVFJMMUEJCTB4NTAxYQorI2RlZmluZSBPVjk3NDBfSVNQX0NUUkwxRQkJMHg1MDFlCisjZGVmaW5lIE9WOTc0MF9JU1BfQ1RSTDFGCQkweDUwMWYKICNkZWZpbmUgT1Y5NzQwX0lTUF9DVFJMMjAJCTB4NTAyMAogI2RlZmluZSBPVjk3NDBfSVNQX0NUUkwyMQkJMHg1MDIxCiAKQEAgLTE1OCwxMiArMTU5LDEyIEBACiAjZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwNAkJMHg1MTg3CiAjZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwNQkJMHg1MTg4CiAjZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwNgkJMHg1MTg5Ci0jZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwNwkJMHg1MThBCi0jZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwOAkJMHg1MThCCi0jZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwwOQkJMHg1MThDCi0jZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwxMAkJMHg1MThECi0jZGVmaW5lIE9WOTc0MF9BV0JfQURWX0NUUkwxMQkJMHg1MThFCi0jZGVmaW5lIE9WOTc0MF9BV0JfQ1RSTDBGCQkweDUxOEYKKyNkZWZpbmUgT1Y5NzQwX0FXQl9BRFZfQ1RSTDA3CQkweDUxOGEKKyNkZWZpbmUgT1Y5NzQwX0FXQl9BRFZfQ1RSTDA4CQkweDUxOGIKKyNkZWZpbmUgT1Y5NzQwX0FXQl9BRFZfQ1RSTDA5CQkweDUxOGMKKyNkZWZpbmUgT1Y5NzQwX0FXQl9BRFZfQ1RSTDEwCQkweDUxOGQKKyNkZWZpbmUgT1Y5NzQwX0FXQl9BRFZfQ1RSTDExCQkweDUxOGUKKyNkZWZpbmUgT1Y5NzQwX0FXQl9DVFJMMEYJCTB4NTE4ZgogI2RlZmluZSBPVjk3NDBfQVdCX0NUUkwxMAkJMHg1MTkwCiAjZGVmaW5lIE9WOTc0MF9BV0JfQ1RSTDExCQkweDUxOTEKICNkZWZpbmUgT1Y5NzQwX0FXQl9DVFJMMTIJCTB4NTE5MgpAQCAtMTgwLDI3ICsxODEsOCBAQAogI2RlZmluZSBPVjk3NDBfTUlQSV9DVFJMXzMwMTIJCTB4MzAxMgogI2RlZmluZSBPVjk3NDBfU0NfQ01NTV9NSVBJX0NUUgkJMHgzMDE0CiAKLS8qIHN1cHBvcnRlZCByZXNvbHV0aW9ucyAqLwotZW51bSB7Ci0JT1Y5NzQwX1ZHQSwKLQlPVjk3NDBfNzIwUCwKLX07Ci0KLXN0cnVjdCBvdjk3NDBfcmVzb2x1dGlvbiB7Ci0JdW5zaWduZWQgaW50IHdpZHRoOwotCXVuc2lnbmVkIGludCBoZWlnaHQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IG92OTc0MF9yZXNvbHV0aW9uIG92OTc0MF9yZXNvbHV0aW9uc1tdID0gewotCVtPVjk3NDBfVkdBXSA9IHsKLQkJLndpZHRoCT0gNjQwLAotCQkuaGVpZ2h0CT0gNDgwLAotCX0sCi0JW09WOTc0MF83MjBQXSA9IHsKLQkJLndpZHRoCT0gMTI4MCwKLQkJLmhlaWdodAk9IDcyMCwKLQl9LAotfTsKKyNkZWZpbmUgT1Y5NzQwX01BWF9XSURUSAkJMTI4MAorI2RlZmluZSBPVjk3NDBfTUFYX0hFSUdIVAkJNzIwCiAKIC8qIE1pc2MuIHN0cnVjdHVyZXMgKi8KIHN0cnVjdCBvdjk3NDBfcmVnIHsKQEAgLTIxOSw5ICsyMDEsMTYgQEAKIAogCWJvb2wJCQkJZmxhZ192ZmxpcDsKIAlib29sCQkJCWZsYWdfaGZsaXA7CisKKwkvKiBGb3Igc3VzcGVuZC9yZXN1bWUuICovCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdAljdXJyZW50X21mOworCWJvb2wJCQkJY3VycmVudF9lbmFibGU7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG92OTc0MF9yZWcgb3Y5NzQwX2RlZmF1bHRzW10gPSB7CisJLyogU29mdHdhcmUgUmVzZXQgKi8KKwl7IE9WOTc0MF9TT0ZUV0FSRV9SRVNFVCwJMHgwMSB9LAorCiAJLyogQmFuZGluZyBGaWx0ZXIgKi8KIAl7IE9WOTc0MF9BRUNfQjUwX1NURVBfSEksCTB4MDAgfSwKIAl7IE9WOTc0MF9BRUNfQjUwX1NURVBfTE8sCTB4ZTggfSwKQEAgLTI0MSwzNiArMjMwLDM2IEBACiAJLyogVW4tZG9jdW1lbnRlZCBPVjk3NDAgcmVnaXN0ZXJzICovCiAJeyAweDU4MDAsIDB4MjkgfSwgeyAweDU4MDEsIDB4MjUgfSwgeyAweDU4MDIsIDB4MjAgfSwgeyAweDU4MDMsIDB4MjEgfSwKIAl7IDB4NTgwNCwgMHgyNiB9LCB7IDB4NTgwNSwgMHgyZSB9LCB7IDB4NTgwNiwgMHgxMSB9LCB7IDB4NTgwNywgMHgwYyB9LAotCXsgMHg1ODA4LCAweDA5IH0sIHsgMHg1ODA5LCAweDBhIH0sIHsgMHg1ODBBLCAweDBlIH0sIHsgMHg1ODBCLCAweDE2IH0sCi0JeyAweDU4MEMsIDB4MDYgfSwgeyAweDU4MEQsIDB4MDIgfSwgeyAweDU4MEUsIDB4MDAgfSwgeyAweDU4MEYsIDB4MDAgfSwKKwl7IDB4NTgwOCwgMHgwOSB9LCB7IDB4NTgwOSwgMHgwYSB9LCB7IDB4NTgwYSwgMHgwZSB9LCB7IDB4NTgwYiwgMHgxNiB9LAorCXsgMHg1ODBjLCAweDA2IH0sIHsgMHg1ODBkLCAweDAyIH0sIHsgMHg1ODBlLCAweDAwIH0sIHsgMHg1ODBmLCAweDAwIH0sCiAJeyAweDU4MTAsIDB4MDQgfSwgeyAweDU4MTEsIDB4MGEgfSwgeyAweDU4MTIsIDB4MDUgfSwgeyAweDU4MTMsIDB4MDIgfSwKIAl7IDB4NTgxNCwgMHgwMCB9LCB7IDB4NTgxNSwgMHgwMCB9LCB7IDB4NTgxNiwgMHgwMyB9LCB7IDB4NTgxNywgMHgwOSB9LAotCXsgMHg1ODE4LCAweDBmIH0sIHsgMHg1ODE5LCAweDBhIH0sIHsgMHg1ODFBLCAweDA3IH0sIHsgMHg1ODFCLCAweDA4IH0sCi0JeyAweDU4MUMsIDB4MGIgfSwgeyAweDU4MUQsIDB4MTQgfSwgeyAweDU4MUUsIDB4MjggfSwgeyAweDU4MUYsIDB4MjMgfSwKKwl7IDB4NTgxOCwgMHgwZiB9LCB7IDB4NTgxOSwgMHgwYSB9LCB7IDB4NTgxYSwgMHgwNyB9LCB7IDB4NTgxYiwgMHgwOCB9LAorCXsgMHg1ODFjLCAweDBiIH0sIHsgMHg1ODFkLCAweDE0IH0sIHsgMHg1ODFlLCAweDI4IH0sIHsgMHg1ODFmLCAweDIzIH0sCiAJeyAweDU4MjAsIDB4MWQgfSwgeyAweDU4MjEsIDB4MWUgfSwgeyAweDU4MjIsIDB4MjQgfSwgeyAweDU4MjMsIDB4MmEgfSwKIAl7IDB4NTgyNCwgMHg0ZiB9LCB7IDB4NTgyNSwgMHg2ZiB9LCB7IDB4NTgyNiwgMHg1ZiB9LCB7IDB4NTgyNywgMHg3ZiB9LAotCXsgMHg1ODI4LCAweDlmIH0sIHsgMHg1ODI5LCAweDVmIH0sIHsgMHg1ODJBLCAweDhmIH0sIHsgMHg1ODJCLCAweDllIH0sCi0JeyAweDU4MkMsIDB4OGYgfSwgeyAweDU4MkQsIDB4OWYgfSwgeyAweDU4MkUsIDB4NGYgfSwgeyAweDU4MkYsIDB4ODcgfSwKKwl7IDB4NTgyOCwgMHg5ZiB9LCB7IDB4NTgyOSwgMHg1ZiB9LCB7IDB4NTgyYSwgMHg4ZiB9LCB7IDB4NTgyYiwgMHg5ZSB9LAorCXsgMHg1ODJjLCAweDhmIH0sIHsgMHg1ODJkLCAweDlmIH0sIHsgMHg1ODJlLCAweDRmIH0sIHsgMHg1ODJmLCAweDg3IH0sCiAJeyAweDU4MzAsIDB4ODYgfSwgeyAweDU4MzEsIDB4OTcgfSwgeyAweDU4MzIsIDB4YWUgfSwgeyAweDU4MzMsIDB4M2YgfSwKIAl7IDB4NTgzNCwgMHg4ZSB9LCB7IDB4NTgzNSwgMHg3YyB9LCB7IDB4NTgzNiwgMHg3ZSB9LCB7IDB4NTgzNywgMHhhZiB9LAotCXsgMHg1ODM4LCAweDhmIH0sIHsgMHg1ODM5LCAweDhmIH0sIHsgMHg1ODNBLCAweDlmIH0sIHsgMHg1ODNCLCAweDdmIH0sCi0JeyAweDU4M0MsIDB4NWYgfSwKKwl7IDB4NTgzOCwgMHg4ZiB9LCB7IDB4NTgzOSwgMHg4ZiB9LCB7IDB4NTgzYSwgMHg5ZiB9LCB7IDB4NTgzYiwgMHg3ZiB9LAorCXsgMHg1ODNjLCAweDVmIH0sCiAKIAkvKiBZIEdhbW1hICovCiAJeyAweDU0ODAsIDB4MDcgfSwgeyAweDU0ODEsIDB4MTggfSwgeyAweDU0ODIsIDB4MmMgfSwgeyAweDU0ODMsIDB4NGUgfSwKIAl7IDB4NTQ4NCwgMHg1ZSB9LCB7IDB4NTQ4NSwgMHg2YiB9LCB7IDB4NTQ4NiwgMHg3NyB9LCB7IDB4NTQ4NywgMHg4MiB9LAotCXsgMHg1NDg4LCAweDhjIH0sIHsgMHg1NDg5LCAweDk1IH0sIHsgMHg1NDhBLCAweGE0IH0sIHsgMHg1NDhCLCAweGIxIH0sCi0JeyAweDU0OEMsIDB4YzYgfSwgeyAweDU0OEQsIDB4ZDggfSwgeyAweDU0OEUsIDB4ZTkgfSwKKwl7IDB4NTQ4OCwgMHg4YyB9LCB7IDB4NTQ4OSwgMHg5NSB9LCB7IDB4NTQ4YSwgMHhhNCB9LCB7IDB4NTQ4YiwgMHhiMSB9LAorCXsgMHg1NDhjLCAweGM2IH0sIHsgMHg1NDhkLCAweGQ4IH0sIHsgMHg1NDhlLCAweGU5IH0sCiAKIAkvKiBVViBHYW1tYSAqLwogCXsgMHg1NDkwLCAweDBmIH0sIHsgMHg1NDkxLCAweGZmIH0sIHsgMHg1NDkyLCAweDBkIH0sIHsgMHg1NDkzLCAweDA1IH0sCiAJeyAweDU0OTQsIDB4MDcgfSwgeyAweDU0OTUsIDB4MWEgfSwgeyAweDU0OTYsIDB4MDQgfSwgeyAweDU0OTcsIDB4MDEgfSwKLQl7IDB4NTQ5OCwgMHgwMyB9LCB7IDB4NTQ5OSwgMHg1MyB9LCB7IDB4NTQ5QSwgMHgwMiB9LCB7IDB4NTQ5QiwgMHhlYiB9LAotCXsgMHg1NDlDLCAweDAyIH0sIHsgMHg1NDlELCAweGEwIH0sIHsgMHg1NDlFLCAweDAyIH0sIHsgMHg1NDlGLCAweDY3IH0sCi0JeyAweDU0QTAsIDB4MDIgfSwgeyAweDU0QTEsIDB4M2IgfSwgeyAweDU0QTIsIDB4MDIgfSwgeyAweDU0QTMsIDB4MTggfSwKLQl7IDB4NTRBNCwgMHgwMSB9LCB7IDB4NTRBNSwgMHhlNyB9LCB7IDB4NTRBNiwgMHgwMSB9LCB7IDB4NTRBNywgMHhjMyB9LAotCXsgMHg1NEE4LCAweDAxIH0sIHsgMHg1NEE5LCAweDk0IH0sIHsgMHg1NEFBLCAweDAxIH0sIHsgMHg1NEFCLCAweDcyIH0sCi0JeyAweDU0QUMsIDB4MDEgfSwgeyAweDU0QUQsIDB4NTcgfSwKKwl7IDB4NTQ5OCwgMHgwMyB9LCB7IDB4NTQ5OSwgMHg1MyB9LCB7IDB4NTQ5YSwgMHgwMiB9LCB7IDB4NTQ5YiwgMHhlYiB9LAorCXsgMHg1NDljLCAweDAyIH0sIHsgMHg1NDlkLCAweGEwIH0sIHsgMHg1NDllLCAweDAyIH0sIHsgMHg1NDlmLCAweDY3IH0sCisJeyAweDU0YTAsIDB4MDIgfSwgeyAweDU0YTEsIDB4M2IgfSwgeyAweDU0YTIsIDB4MDIgfSwgeyAweDU0YTMsIDB4MTggfSwKKwl7IDB4NTRhNCwgMHgwMSB9LCB7IDB4NTRhNSwgMHhlNyB9LCB7IDB4NTRhNiwgMHgwMSB9LCB7IDB4NTRhNywgMHhjMyB9LAorCXsgMHg1NGE4LCAweDAxIH0sIHsgMHg1NGE5LCAweDk0IH0sIHsgMHg1NGFhLCAweDAxIH0sIHsgMHg1NGFiLCAweDcyIH0sCisJeyAweDU0YWMsIDB4MDEgfSwgeyAweDU0YWQsIDB4NTcgfSwKIAogCS8qIEFXQiAqLwogCXsgT1Y5NzQwX0FXQl9DVFJMMDAsCQkweGYwIH0sCkBAIC0yOTYsMTggKzI4NSwxOCBAQAogCXsgT1Y5NzQwX0FXQl9DVFJMMTQsCQkweDAwIH0sCiAKIAkvKiBDSVAgKi8KLQl7IDB4NTMwRCwgMHgxMiB9LAorCXsgMHg1MzBkLCAweDEyIH0sCiAKIAkvKiBDTVggKi8KIAl7IDB4NTM4MCwgMHgwMSB9LCB7IDB4NTM4MSwgMHgwMCB9LCB7IDB4NTM4MiwgMHgwMCB9LCB7IDB4NTM4MywgMHgxNyB9LAogCXsgMHg1Mzg0LCAweDAwIH0sIHsgMHg1Mzg1LCAweDAxIH0sIHsgMHg1Mzg2LCAweDAwIH0sIHsgMHg1Mzg3LCAweDAwIH0sCi0JeyAweDUzODgsIDB4MDAgfSwgeyAweDUzODksIDB4ZTAgfSwgeyAweDUzOEEsIDB4MDAgfSwgeyAweDUzOEIsIDB4MjAgfSwKLQl7IDB4NTM4QywgMHgwMCB9LCB7IDB4NTM4RCwgMHgwMCB9LCB7IDB4NTM4RSwgMHgwMCB9LCB7IDB4NTM4RiwgMHgxNiB9LAorCXsgMHg1Mzg4LCAweDAwIH0sIHsgMHg1Mzg5LCAweGUwIH0sIHsgMHg1MzhhLCAweDAwIH0sIHsgMHg1MzhiLCAweDIwIH0sCisJeyAweDUzOGMsIDB4MDAgfSwgeyAweDUzOGQsIDB4MDAgfSwgeyAweDUzOGUsIDB4MDAgfSwgeyAweDUzOGYsIDB4MTYgfSwKIAl7IDB4NTM5MCwgMHgwMCB9LCB7IDB4NTM5MSwgMHg5YyB9LCB7IDB4NTM5MiwgMHgwMCB9LCB7IDB4NTM5MywgMHhhMCB9LAogCXsgMHg1Mzk0LCAweDE4IH0sCiAKIAkvKiA1MC82MCBEZXRlY3Rpb24gKi8KLQl7IDB4M0MwQSwgMHg5YyB9LCB7IDB4M0MwQiwgMHgzZiB9LAorCXsgMHgzYzBhLCAweDljIH0sIHsgMHgzYzBiLCAweDNmIH0sCiAKIAkvKiBPdXRwdXQgU2VsZWN0ICovCiAJeyBPVjk3NDBfSU9fT1VUUFVUX1NFTDAxLAkweDAwIH0sCkBAIC0zMzMsNiArMzIyLDcgQEAKIAl7IE9WOTc0MF9BTkFMT0dfQ1RSTDEwLAkJMHhhMSB9LAogCXsgT1Y5NzQwX0FOQUxPR19DVFJMMTIsCQkweDI0IH0sCiAJeyBPVjk3NDBfQU5BTE9HX0NUUkwyMiwJCTB4OWYgfSwKKwl7IE9WOTc0MF9BTkFMT0dfQ1RSTDE1LAkJMHhmMCB9LAogCiAJLyogU2Vuc29yIENvbnRyb2wgKi8KIAl7IE9WOTc0MF9TRU5TT1JfQ1RSTDAzLAkJMHg0MiB9LApAQCAtMzg1LDcgKzM3NSw3IEBACiAJeyBPVjk3NDBfTE5fTEVOR1RIX1BDS19MTywJMHg2MiB9LAogCiAJLyogTUlQSSBDb250cm9sICovCi0JeyBPVjk3NDBfTUlQSV9DVFJMMDAsCQkweDQ0IH0sCisJeyBPVjk3NDBfTUlQSV9DVFJMMDAsCQkweDQ0IH0sIC8qIDB4NjQgZm9yIGRpc2NvbnRpbnVvdXMgY2xrICovCiAJeyBPVjk3NDBfTUlQSV8zODM3LAkJMHgwMSB9LAogCXsgT1Y5NzQwX01JUElfQ1RSTDAxLAkJMHgwZiB9LAogCXsgT1Y5NzQwX01JUElfQ1RSTDAzLAkJMHgwNSB9LApAQCAtMzkzLDU0ICszODMsOSBAQAogCXsgT1Y5NzQwX1ZGSUZPX1JEX0NUUkwsCQkweDE2IH0sCiAJeyBPVjk3NDBfTUlQSV9DVFJMXzMwMTIsCTB4NzAgfSwKIAl7IE9WOTc0MF9TQ19DTU1NX01JUElfQ1RSLAkweDAxIH0sCi19OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG92OTc0MF9yZWcgb3Y5NzQwX3JlZ3NfdmdhW10gPSB7Ci0JeyBPVjk3NDBfWF9BRERSX1NUQVJUX0hJLAkweDAwIH0sCi0JeyBPVjk3NDBfWF9BRERSX1NUQVJUX0xPLAkweGEwIH0sCi0JeyBPVjk3NDBfWV9BRERSX1NUQVJUX0hJLAkweDAwIH0sCi0JeyBPVjk3NDBfWV9BRERSX1NUQVJUX0xPLAkweDAwIH0sCi0JeyBPVjk3NDBfWF9BRERSX0VORF9ISSwJCTB4MDQgfSwKLQl7IE9WOTc0MF9YX0FERFJfRU5EX0xPLAkJMHg2MyB9LAotCXsgT1Y5NzQwX1lfQUREUl9FTkRfSEksCQkweDAyIH0sCi0JeyBPVjk3NDBfWV9BRERSX0VORF9MTywJCTB4ZDMgfSwKLQl7IE9WOTc0MF9YX09VVFBVVF9TSVpFX0hJLAkweDAyIH0sCi0JeyBPVjk3NDBfWF9PVVRQVVRfU0laRV9MTywJMHg4MCB9LAotCXsgT1Y5NzQwX1lfT1VUUFVUX1NJWkVfSEksCTB4MDEgfSwKLQl7IE9WOTc0MF9ZX09VVFBVVF9TSVpFX0xPLAkweGUwIH0sCi0JeyBPVjk3NDBfSVNQX0NUUkwxRSwJCTB4MDMgfSwKLQl7IE9WOTc0MF9JU1BfQ1RSTDFGLAkJMHhjMCB9LAotCXsgT1Y5NzQwX0lTUF9DVFJMMjAsCQkweDAyIH0sCi0JeyBPVjk3NDBfSVNQX0NUUkwyMSwJCTB4ZDAgfSwKLQl7IE9WOTc0MF9WRklGT19SRUFEX1NUQVJUX0hJLAkweDAxIH0sCi0JeyBPVjk3NDBfVkZJRk9fUkVBRF9TVEFSVF9MTywJMHg0MCB9LAotCXsgT1Y5NzQwX0lTUF9DVFJMMDAsCQkweGZmIH0sCi0JeyBPVjk3NDBfSVNQX0NUUkwwMSwJCTB4ZmYgfSwKLQl7IE9WOTc0MF9JU1BfQ1RSTDAzLAkJMHhmZiB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvdjk3NDBfcmVnIG92OTc0MF9yZWdzXzcyMHBbXSA9IHsKLQl7IE9WOTc0MF9YX0FERFJfU1RBUlRfSEksCTB4MDAgfSwKLQl7IE9WOTc0MF9YX0FERFJfU1RBUlRfTE8sCTB4MDAgfSwKLQl7IE9WOTc0MF9ZX0FERFJfU1RBUlRfSEksCTB4MDAgfSwKLQl7IE9WOTc0MF9ZX0FERFJfU1RBUlRfTE8sCTB4MDAgfSwKLQl7IE9WOTc0MF9YX0FERFJfRU5EX0hJLAkJMHgwNSB9LAotCXsgT1Y5NzQwX1hfQUREUl9FTkRfTE8sCQkweDAzIH0sCi0JeyBPVjk3NDBfWV9BRERSX0VORF9ISSwJCTB4MDIgfSwKLQl7IE9WOTc0MF9ZX0FERFJfRU5EX0xPLAkJMHhkMyB9LAotCXsgT1Y5NzQwX1hfT1VUUFVUX1NJWkVfSEksCTB4MDUgfSwKLQl7IE9WOTc0MF9YX09VVFBVVF9TSVpFX0xPLAkweDAwIH0sCi0JeyBPVjk3NDBfWV9PVVRQVVRfU0laRV9ISSwJMHgwMiB9LAotCXsgT1Y5NzQwX1lfT1VUUFVUX1NJWkVfTE8sCTB4ZDAgfSwKLQl7IE9WOTc0MF9JU1BfQ1RSTDFFLAkJMHgwNSB9LAotCXsgT1Y5NzQwX0lTUF9DVFJMMUYsCQkweDAwIH0sCi0JeyBPVjk3NDBfSVNQX0NUUkwyMCwJCTB4MDIgfSwKLQl7IE9WOTc0MF9JU1BfQ1RSTDIxLAkJMHhkMCB9LAotCXsgT1Y5NzQwX1ZGSUZPX1JFQURfU1RBUlRfSEksCTB4MDIgfSwKLQl7IE9WOTc0MF9WRklGT19SRUFEX1NUQVJUX0xPLAkweDMwIH0sCi0JeyBPVjk3NDBfSVNQX0NUUkwwMCwJCTB4ZmYgfSwKLQl7IE9WOTc0MF9JU1BfQ1RSTDAxLAkJMHhlZiB9LAotCXsgT1Y5NzQwX0lTUF9DVFJMMDMsCQkweGZmIH0sCisJLyogWVVZViBvcmRlciAqLworCXsgT1Y5NzQwX0lTUF9DVFJMMTksCQkweDAyIH0sCiB9OwogCiBzdGF0aWMgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIG92OTc0MF9jb2Rlc1tdID0gewpAQCAtNTM3LDcgKzQ4Miw4IEBACiAJcmV0ID0gb3Y5NzQwX3JlZ19yZWFkKGNsaWVudCwgcmVnLCAmdmFsKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJbUmVhZF0tTW9kaWZ5LVdyaXRlIG9mIHJlZ2lzdGVyICUwMnggZmFpbGVkIVxuIiwgcmVnKTsKKwkJCSJbUmVhZF0tTW9kaWZ5LVdyaXRlIG9mIHJlZ2lzdGVyIDB4JTA0eCBmYWlsZWQhXG4iLAorCQkJcmVnKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTU0Nyw3ICs0OTMsOCBAQAogCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCByZWcsIHZhbCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkiUmVhZC1Nb2RpZnktW1dyaXRlXSBvZiByZWdpc3RlciAlMDJ4IGZhaWxlZCFcbiIsIHJlZyk7CisJCQkiUmVhZC1Nb2RpZnktW1dyaXRlXSBvZiByZWdpc3RlciAweCUwNHggZmFpbGVkIVxuIiwKKwkJCXJlZyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC02MDgsNiArNTU1LDggQEAKIAkJCQkJICAgICAgIDB4MDApOwogCX0KIAorCXByaXYtPmN1cnJlbnRfZW5hYmxlID0gZW5hYmxlOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjMwLDYgKzU3OSwyMTUgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKKy8qIHNlbGVjdCBuZWFyZXN0IGhpZ2hlciByZXNvbHV0aW9uIGZvciBjYXB0dXJlICovCitzdGF0aWMgdm9pZCBvdjk3NDBfcmVzX3JvdW5kdXAodTMyICp3aWR0aCwgdTMyICpoZWlnaHQpCit7CisJLyogV2lkdGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgcGl4ZWxzLiAqLworCSp3aWR0aCA9IEFMSUdOKCp3aWR0aCwgNCk7CisKKwkvKiBNYXggcmVzb2x1dGlvbiBpcyAxMjgweDcyMCAoNzIwcCkuICovCisJaWYgKCp3aWR0aCA+IE9WOTc0MF9NQVhfV0lEVEgpCisJCSp3aWR0aCA9IE9WOTc0MF9NQVhfV0lEVEg7CisKKwlpZiAoKmhlaWdodCA+IE9WOTc0MF9NQVhfSEVJR0hUKQorCQkqaGVpZ2h0ID0gT1Y5NzQwX01BWF9IRUlHSFQ7Cit9CisKKy8qIFNldHVwIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gcmVzb2x1dGlvbiBhbmQgY29sb3IgZW5jb2RpbmcgKi8KK3N0YXRpYyBpbnQgb3Y5NzQwX3NldF9yZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCXUzMiB4X3N0YXJ0OworCXUzMiB5X3N0YXJ0OworCXUzMiB4X2VuZDsKKwl1MzIgeV9lbmQ7CisJYm9vbCBzY2FsaW5nID0gMDsKKwl1MzIgc2NhbGVfaW5wdXRfeDsKKwl1MzIgc2NhbGVfaW5wdXRfeTsKKwlpbnQgcmV0OworCisJaWYgKCh3aWR0aCAhPSBPVjk3NDBfTUFYX1dJRFRIKSB8fCAoaGVpZ2h0ICE9IE9WOTc0MF9NQVhfSEVJR0hUKSkKKwkJc2NhbGluZyA9IDE7CisKKwkvKgorCSAqIFRyeSB0byB1c2UgYXMgbXVjaCBvZiB0aGUgc2Vuc29yIGFyZWEgYXMgcG9zc2libGUgd2hlbiBzdXBwb3J0aW5nCisJICogc21hbGxlciByZXNvbHV0aW9ucy4gIERlcGVuZGluZyBvbiB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZQorCSAqIGNob3NlbiByZXNvbHV0aW9uLCB3ZSBjYW4gZWl0aGVyIHVzZSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgc2Vuc29yLAorCSAqIG9yIHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgc2Vuc29yIChvciBib3RoIGlmIHRoZSBhc3BlY3QgcmF0aW8gaXMKKwkgKiB0aGUgc2FtZSBhcyAxMjgweDcyMC4KKwkgKi8KKwlpZiAoKE9WOTc0MF9NQVhfV0lEVEggKiBoZWlnaHQpID4gKE9WOTc0MF9NQVhfSEVJR0hUICogd2lkdGgpKSB7CisJCXNjYWxlX2lucHV0X3ggPSAoT1Y5NzQwX01BWF9IRUlHSFQgKiB3aWR0aCkgLyBoZWlnaHQ7CisJCXNjYWxlX2lucHV0X3kgPSBPVjk3NDBfTUFYX0hFSUdIVDsKKwl9IGVsc2UgeworCQlzY2FsZV9pbnB1dF94ID0gT1Y5NzQwX01BWF9XSURUSDsKKwkJc2NhbGVfaW5wdXRfeSA9IChPVjk3NDBfTUFYX1dJRFRIICogaGVpZ2h0KSAvIHdpZHRoOworCX0KKworCS8qIFRoZXNlIGRlc2NyaWJlIHRoZSBhcmVhIG9mIHRoZSBzZW5zb3IgdG8gdXNlLiAqLworCXhfc3RhcnQgPSAoT1Y5NzQwX01BWF9XSURUSCAtIHNjYWxlX2lucHV0X3gpIC8gMjsKKwl5X3N0YXJ0ID0gKE9WOTc0MF9NQVhfSEVJR0hUIC0gc2NhbGVfaW5wdXRfeSkgLyAyOworCXhfZW5kID0geF9zdGFydCArIHNjYWxlX2lucHV0X3ggLSAxOworCXlfZW5kID0geV9zdGFydCArIHNjYWxlX2lucHV0X3kgLSAxOworCisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9YX0FERFJfU1RBUlRfSEksIHhfc3RhcnQgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWF9BRERSX1NUQVJUX0xPLCB4X3N0YXJ0ICYgMHhmZik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWV9BRERSX1NUQVJUX0hJLCB5X3N0YXJ0ID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKwlyZXQgPSBvdjk3NDBfcmVnX3dyaXRlKGNsaWVudCwgT1Y5NzQwX1lfQUREUl9TVEFSVF9MTywgeV9zdGFydCAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWF9BRERSX0VORF9ISSwgeF9lbmQgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWF9BRERSX0VORF9MTywgeF9lbmQgJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9ZX0FERFJfRU5EX0hJLCB5X2VuZCA+PiA4KTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9ZX0FERFJfRU5EX0xPLCB5X2VuZCAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWF9PVVRQVVRfU0laRV9ISSwgd2lkdGggPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWF9PVVRQVVRfU0laRV9MTywgd2lkdGggJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9ZX09VVFBVVF9TSVpFX0hJLCBoZWlnaHQgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfWV9PVVRQVVRfU0laRV9MTywgaGVpZ2h0ICYgMHhmZik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9JU1BfQ1RSTDFFLCBzY2FsZV9pbnB1dF94ID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKwlyZXQgPSBvdjk3NDBfcmVnX3dyaXRlKGNsaWVudCwgT1Y5NzQwX0lTUF9DVFJMMUYsIHNjYWxlX2lucHV0X3ggJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZShjbGllbnQsIE9WOTc0MF9JU1BfQ1RSTDIwLCBzY2FsZV9pbnB1dF95ID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKwlyZXQgPSBvdjk3NDBfcmVnX3dyaXRlKGNsaWVudCwgT1Y5NzQwX0lTUF9DVFJMMjEsIHNjYWxlX2lucHV0X3kgJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlyZXQgPSBvdjk3NDBfcmVnX3dyaXRlKGNsaWVudCwgT1Y5NzQwX1ZGSUZPX1JFQURfU1RBUlRfSEksCisJCQkgICAgICAgKHNjYWxlX2lucHV0X3ggLSB3aWR0aCkgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfVkZJRk9fUkVBRF9TVEFSVF9MTywKKwkJCSAgICAgICAoc2NhbGVfaW5wdXRfeCAtIHdpZHRoKSAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfSVNQX0NUUkwwMCwgMHhmZik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfSVNQX0NUUkwwMSwgMHhlZiB8CisJCQkJCQkJICAoc2NhbGluZyA8PCA0KSk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCXJldCA9IG92OTc0MF9yZWdfd3JpdGUoY2xpZW50LCBPVjk3NDBfSVNQX0NUUkwwMywgMHhmZik7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyogc2V0IHRoZSBmb3JtYXQgd2Ugd2lsbCBjYXB0dXJlIGluICovCitzdGF0aWMgaW50IG92OTc0MF9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBvdjk3NDBfcHJpdiAqcHJpdiA9IHRvX292OTc0MChzZCk7CisJZW51bSB2NGwyX2NvbG9yc3BhY2UgY3NwYWNlOworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlID0gbWYtPmNvZGU7CisJaW50IHJldDsKKworCW92OTc0MF9yZXNfcm91bmR1cCgmbWYtPndpZHRoLCAmbWYtPmhlaWdodCk7CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OgorCQljc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZV9hcnJheShjbGllbnQsIG92OTc0MF9kZWZhdWx0cywKKwkJCQkgICAgIEFSUkFZX1NJWkUob3Y5NzQwX2RlZmF1bHRzKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvdjk3NDBfc2V0X3JlcyhjbGllbnQsIG1mLT53aWR0aCwgbWYtPmhlaWdodCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltZi0+Y29kZQk9IGNvZGU7CisJbWYtPmNvbG9yc3BhY2UJPSBjc3BhY2U7CisKKwltZW1jcHkoJnByaXYtPmN1cnJlbnRfbWYsIG1mLCBzaXplb2Yoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCkpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjk3NDBfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKK3sKKwlvdjk3NDBfcmVzX3JvdW5kdXAoJm1mLT53aWR0aCwgJm1mLT5oZWlnaHQpOworCisJbWYtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCW1mLT5jb2RlID0gVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDg7CisJbWYtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92OTc0MF9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkgICBlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgKmNvZGUpCit7CisJaWYgKGluZGV4ID49IEFSUkFZX1NJWkUob3Y5NzQwX2NvZGVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqY29kZSA9IG92OTc0MF9jb2Rlc1tpbmRleF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk3NDBfY3JvcGNhcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQoreworCWEtPmJvdW5kcy5sZWZ0CQk9IDA7CisJYS0+Ym91bmRzLnRvcAkJPSAwOworCWEtPmJvdW5kcy53aWR0aAkJPSBPVjk3NDBfTUFYX1dJRFRIOworCWEtPmJvdW5kcy5oZWlnaHQJPSBPVjk3NDBfTUFYX0hFSUdIVDsKKwlhLT5kZWZyZWN0CQk9IGEtPmJvdW5kczsKKwlhLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKKwlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdjk3NDBfZ19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJYS0+Yy5sZWZ0CQk9IDA7CisJYS0+Yy50b3AJCT0gMDsKKwlhLT5jLndpZHRoCQk9IE9WOTc0MF9NQVhfV0lEVEg7CisJYS0+Yy5oZWlnaHQJCT0gT1Y5NzQwX01BWF9IRUlHSFQ7CisJYS0+dHlwZQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJcmV0dXJuIDA7Cit9CisKIC8qIEdldCBzdGF0dXMgb2YgYWRkaXRpb25hbCBjYW1lcmEgY2FwYWJpbGl0aWVzICovCiBzdGF0aWMgaW50IG92OTc0MF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKQEAgLTY4MCw2ICs4MzgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvdjk3NDBfc19wb3dlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pCit7CisJc3RydWN0IG92OTc0MF9wcml2ICpwcml2ID0gdG9fb3Y5NzQwKHNkKTsKKworCWlmICghcHJpdi0+Y3VycmVudF9lbmFibGUpCisJCXJldHVybiAwOworCisJaWYgKG9uKSB7CisJCW92OTc0MF9zX2ZtdChzZCwgJnByaXYtPmN1cnJlbnRfbWYpOworCQlvdjk3NDBfc19zdHJlYW0oc2QsIHByaXYtPmN1cnJlbnRfZW5hYmxlKTsKKwl9IGVsc2UgeworCQlvdjk3NDBfc19zdHJlYW0oc2QsIDApOworCQlwcml2LT5jdXJyZW50X2VuYWJsZSA9IHRydWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiBzdGF0aWMgaW50IG92OTc0MF9nZXRfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKQEAgLTcxNCwxMjcgKzg5MCw2IEBACiB9CiAjZW5kaWYKIAotLyogc2VsZWN0IG5lYXJlc3QgaGlnaGVyIHJlc29sdXRpb24gZm9yIGNhcHR1cmUgKi8KLXN0YXRpYyB2b2lkIG92OTc0MF9yZXNfcm91bmR1cCh1MzIgKndpZHRoLCB1MzIgKmhlaWdodCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92OTc0MF9yZXNvbHV0aW9ucyk7IGkrKykKLQkJaWYgKChvdjk3NDBfcmVzb2x1dGlvbnNbaV0ud2lkdGggPj0gKndpZHRoKSAmJgotCQkgICAgKG92OTc0MF9yZXNvbHV0aW9uc1tpXS5oZWlnaHQgPj0gKmhlaWdodCkpIHsKLQkJCSp3aWR0aCA9IG92OTc0MF9yZXNvbHV0aW9uc1tpXS53aWR0aDsKLQkJCSpoZWlnaHQgPSBvdjk3NDBfcmVzb2x1dGlvbnNbaV0uaGVpZ2h0OwotCQkJcmV0dXJuOwotCQl9Ci0KLQkqd2lkdGggPSBvdjk3NDBfcmVzb2x1dGlvbnNbT1Y5NzQwXzcyMFBdLndpZHRoOwotCSpoZWlnaHQgPSBvdjk3NDBfcmVzb2x1dGlvbnNbT1Y5NzQwXzcyMFBdLmhlaWdodDsKLX0KLQotLyogU2V0dXAgcmVnaXN0ZXJzIGFjY29yZGluZyB0byByZXNvbHV0aW9uIGFuZCBjb2xvciBlbmNvZGluZyAqLwotc3RhdGljIGludCBvdjk3NDBfc2V0X3JlcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgd2lkdGgpCi17Ci0JaW50IHJldDsKLQotCS8qIHNlbGVjdCByZWdpc3RlciBjb25maWd1cmF0aW9uIGZvciBnaXZlbiByZXNvbHV0aW9uICovCi0JaWYgKHdpZHRoID09IG92OTc0MF9yZXNvbHV0aW9uc1tPVjk3NDBfVkdBXS53aWR0aCkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgaW1hZ2Ugc2l6ZSB0byA2NDB4NDgwXG4iKTsKLQkJcmV0ID0gb3Y5NzQwX3JlZ193cml0ZV9hcnJheShjbGllbnQsIG92OTc0MF9yZWdzX3ZnYSwKLQkJCQkJICAgICBBUlJBWV9TSVpFKG92OTc0MF9yZWdzX3ZnYSkpOwotCX0gZWxzZSBpZiAod2lkdGggPT0gb3Y5NzQwX3Jlc29sdXRpb25zW09WOTc0MF83MjBQXS53aWR0aCkgewotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlNldHRpbmcgaW1hZ2Ugc2l6ZSB0byAxMjgweDcyMFxuIik7Ci0JCXJldCA9IG92OTc0MF9yZWdfd3JpdGVfYXJyYXkoY2xpZW50LCBvdjk3NDBfcmVnc183MjBwLAotCQkJCQkgICAgIEFSUkFZX1NJWkUob3Y5NzQwX3JlZ3NfNzIwcCkpOwotCX0gZWxzZSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHNlbGVjdCByZXNvbHV0aW9uIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHNldCB0aGUgZm9ybWF0IHdlIHdpbGwgY2FwdHVyZSBpbiAqLwotc3RhdGljIGludCBvdjk3NDBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1mKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQllbnVtIHY0bDJfY29sb3JzcGFjZSBjc3BhY2U7Ci0JZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGUgPSBtZi0+Y29kZTsKLQlpbnQgcmV0OwotCi0Jb3Y5NzQwX3Jlc19yb3VuZHVwKCZtZi0+d2lkdGgsICZtZi0+aGVpZ2h0KTsKLQotCXN3aXRjaCAoY29kZSkgewotCWNhc2UgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8yWDg6Ci0JCWNzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBvdjk3NDBfcmVnX3dyaXRlX2FycmF5KGNsaWVudCwgb3Y5NzQwX2RlZmF1bHRzLAotCQkJCSAgICAgQVJSQVlfU0laRShvdjk3NDBfZGVmYXVsdHMpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IG92OTc0MF9zZXRfcmVzKGNsaWVudCwgbWYtPndpZHRoKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCW1mLT5jb2RlCT0gY29kZTsKLQltZi0+Y29sb3JzcGFjZQk9IGNzcGFjZTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y5NzQwX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKLQkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWYpCi17Ci0Jb3Y5NzQwX3Jlc19yb3VuZHVwKCZtZi0+d2lkdGgsICZtZi0+aGVpZ2h0KTsKLQotCW1mLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQltZi0+Y29kZSA9IFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4OwotCW1mLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjk3NDBfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGluZGV4LAotCQkJICAgZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlICpjb2RlKQotewotCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKG92OTc0MF9jb2RlcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JKmNvZGUgPSBvdjk3NDBfY29kZXNbaW5kZXhdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y5NzQwX2Nyb3BjYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKLXsKLQlhLT5ib3VuZHMubGVmdAkJPSAwOwotCWEtPmJvdW5kcy50b3AJCT0gMDsKLQlhLT5ib3VuZHMud2lkdGgJCT0gb3Y5NzQwX3Jlc29sdXRpb25zW09WOTc0MF83MjBQXS53aWR0aDsKLQlhLT5ib3VuZHMuaGVpZ2h0CT0gb3Y5NzQwX3Jlc29sdXRpb25zW09WOTc0MF83MjBQXS5oZWlnaHQ7Ci0JYS0+ZGVmcmVjdAkJPSBhLT5ib3VuZHM7Ci0JYS0+dHlwZQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7Ci0JYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y5NzQwX2dfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jcm9wICphKQotewotCWEtPmMubGVmdAkJPSAwOwotCWEtPmMudG9wCQk9IDA7Ci0JYS0+Yy53aWR0aAkJPSBvdjk3NDBfcmVzb2x1dGlvbnNbT1Y5NzQwXzcyMFBdLndpZHRoOwotCWEtPmMuaGVpZ2h0CQk9IG92OTc0MF9yZXNvbHV0aW9uc1tPVjk3NDBfNzIwUF0uaGVpZ2h0OwotCWEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG92OTc0MF92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CkBAIC04NDMsMTYgKzg5OCw5IEBACiAJdTggbW9kZWxoaSwgbW9kZWxsbzsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgotCSAqIFNvIHRoaXMgZW50aXJlIHRlc3QgaXMgY29tcGxldGVseSByZWR1bmRhbnQuCi0JICovCi0JaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKLQkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQYXJlbnQgbWlzc2luZyBvciBpbnZhbGlkIVxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyOwotCX0KKwkvKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLiAqLworCUJVR19PTighaWNkLT5wYXJlbnQgfHwKKwkgICAgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSk7CiAKIAkvKgogCSAqIGNoZWNrIGFuZCBzaG93IHByb2R1Y3QgSUQgYW5kIG1hbnVmYWN0dXJlciBJRApAQCAtOTAxLDE3ICs5NDksNiBAQAogCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShvdjk3NDBfY29udHJvbHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBvdjk3NDBfY29yZV9vcHMgPSB7Ci0JLmdfY3RybAkJCT0gb3Y5NzQwX2dfY3RybCwKLQkuc19jdHJsCQkJPSBvdjk3NDBfc19jdHJsLAotCS5nX2NoaXBfaWRlbnQJCT0gb3Y5NzQwX2dfY2hpcF9pZGVudCwKLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JLmdfcmVnaXN0ZXIJCT0gb3Y5NzQwX2dldF9yZWdpc3RlciwKLQkuc19yZWdpc3RlcgkJPSBvdjk3NDBfc2V0X3JlZ2lzdGVyLAotI2VuZGlmCi0KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG92OTc0MF92aWRlb19vcHMgPSB7CiAJLnNfc3RyZWFtCQk9IG92OTc0MF9zX3N0cmVhbSwKIAkuc19tYnVzX2ZtdAkJPSBvdjk3NDBfc19mbXQsCkBAIC05MjEsNiArOTU4LDE3IEBACiAJLmdfY3JvcAkJCT0gb3Y5NzQwX2dfY3JvcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3Y5NzQwX2NvcmVfb3BzID0geworCS5nX2N0cmwJCQk9IG92OTc0MF9nX2N0cmwsCisJLnNfY3RybAkJCT0gb3Y5NzQwX3NfY3RybCwKKwkuZ19jaGlwX2lkZW50CQk9IG92OTc0MF9nX2NoaXBfaWRlbnQsCisJLnNfcG93ZXIJCT0gb3Y5NzQwX3NfcG93ZXIsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyCQk9IG92OTc0MF9nZXRfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIJCT0gb3Y5NzQwX3NldF9yZWdpc3RlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3Y5NzQwX3N1YmRldl9vcHMgPSB7CiAJLmNvcmUJCQk9ICZvdjk3NDBfY29yZV9vcHMsCiAJLnZpZGVvCQkJPSAmb3Y5NzQwX3ZpZGVvX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCmluZGV4IDc1NTE5MDcuLmU3NTNiNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM5LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KK01PRFVMRV9WRVJTSU9OKCIwLjAuNCIpOwogCiAjZGVmaW5lIE1PVE9ST0xBCTEKICNkZWZpbmUgUEhJTElQUzIJMiAgICAgICAgICAgICAgIC8qIFNBQTcxOTEgKi8KQEAgLTY3OCw3ICs2NzcsNiBAQAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsICJNZWRpYXZpc2lvbiBQTVMiLCBzaXplb2YodmNhcC0+Y2FyZCkpOwogCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sICJJU0EiLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKLQl2Y2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMyk7CiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwppbmRleCAyMjU0MTk0Li5jMWQ5YmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCkBAIC0xNjgsNiArMTY4LDcgQEAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuOS4xIik7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCAzODc2MTE0Li5lMjdmOGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC05MSw3ICs5MSw3IEBACiAJLmRyaXZlciAgICAgICAgID0gInB2cnVzYjIiLAogCS5jYXJkICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgcHZyLXVzYjIiLAogCS5idXNfaW5mbyAgICAgICA9ICJ1c2IiLAotCS52ZXJzaW9uICAgICAgICA9IEtFUk5FTF9WRVJTSU9OKDAsIDksIDApLAorCS52ZXJzaW9uICAgICAgICA9IExJTlVYX1ZFUlNJT05fQ09ERSwKIAkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAogCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKQEAgLTM2OSwxMSArMzY5LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JY2FzZSBWSURJT0NfU19BVURJTzoKLQl7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gKHN0cnVjdCB2NGwyX3R1bmVyICopYXJnOwpAQCAtODUwLDcgKzg0NSw3IEBACiAjZW5kaWYKIAogCWRlZmF1bHQgOgotCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSAtRU5PVFRZOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCmluZGV4IDhkYTQyZTQuLmQ2M2QwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBVU0JfUFdDCiAJdHJpc3RhdGUgIlVTQiBQaGlsaXBzIENhbWVyYXMiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJc2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DCiAJLS0taGVscC0tLQogCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlc2UgUGhpbGlwcyAmIE9FTQogCSAgd2ViY2FtczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCmluZGV4IDc2MGI0ZGUuLjM5NzdhZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwpAQCAtMyw2ICszLDcgQEAKICAgIHZpZGVvIG1vZGVzLgogICAgKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCiAgICAoQykgMjAwNC0yMDA2IEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKyAgIChDKSAyMDExIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAKICAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAogICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCkBAIC00Myw2MSArNDQsMTIgQEAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAogI2luY2x1ZGUgInB3Yy5oIgotI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCiAjaW5jbHVkZSAicHdjLWtpYXJhLmgiCiAjaW5jbHVkZSAicHdjLXRpbW9uLmgiCiAjaW5jbHVkZSAicHdjLWRlYzEuaCIKICNpbmNsdWRlICJwd2MtZGVjMjMuaCIKIAotLyogUmVxdWVzdCB0eXBlczogdmlkZW8gKi8KLSNkZWZpbmUgU0VUX0xVTV9DVEwJCQkweDAxCi0jZGVmaW5lIEdFVF9MVU1fQ1RMCQkJMHgwMgotI2RlZmluZSBTRVRfQ0hST01fQ1RMCQkJMHgwMwotI2RlZmluZSBHRVRfQ0hST01fQ1RMCQkJMHgwNAotI2RlZmluZSBTRVRfU1RBVFVTX0NUTAkJCTB4MDUKLSNkZWZpbmUgR0VUX1NUQVRVU19DVEwJCQkweDA2Ci0jZGVmaW5lIFNFVF9FUF9TVFJFQU1fQ1RMCQkweDA3Ci0jZGVmaW5lIEdFVF9FUF9TVFJFQU1fQ1RMCQkweDA4Ci0jZGVmaW5lIEdFVF9YWF9DVEwJCQkweDA5Ci0jZGVmaW5lIFNFVF9YWF9DVEwJCQkweDBBCi0jZGVmaW5lIEdFVF9YWV9DVEwJCQkweDBCCi0jZGVmaW5lIFNFVF9YWV9DVEwJCQkweDBDCi0jZGVmaW5lIFNFVF9NUFRfQ1RMCQkJMHgwRAotI2RlZmluZSBHRVRfTVBUX0NUTAkJCTB4MEUKLQotLyogU2VsZWN0b3JzIGZvciB0aGUgTHVtaW5hbmNlIGNvbnRyb2xzIFtHU11FVF9MVU1fQ1RMICovCi0jZGVmaW5lIEFHQ19NT0RFX0ZPUk1BVFRFUgkJCTB4MjAwMAotI2RlZmluZSBQUkVTRVRfQUdDX0ZPUk1BVFRFUgkJCTB4MjEwMAotI2RlZmluZSBTSFVUVEVSX01PREVfRk9STUFUVEVSCQkJMHgyMjAwCi0jZGVmaW5lIFBSRVNFVF9TSFVUVEVSX0ZPUk1BVFRFUgkJMHgyMzAwCi0jZGVmaW5lIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUgkJMHgyNDAwCi0jZGVmaW5lIEFVVE9fQ09OVE9VUl9GT1JNQVRURVIJCQkweDI1MDAKLSNkZWZpbmUgQkFDS19MSUdIVF9DT01QRU5TQVRJT05fRk9STUFUVEVSCTB4MjYwMAotI2RlZmluZSBDT05UUkFTVF9GT1JNQVRURVIJCQkweDI3MDAKLSNkZWZpbmUgRFlOQU1JQ19OT0lTRV9DT05UUk9MX0ZPUk1BVFRFUgkJMHgyODAwCi0jZGVmaW5lIEZMSUNLRVJMRVNTX01PREVfRk9STUFUVEVSCQkweDI5MDAKLSNkZWZpbmUgQUVfQ09OVFJPTF9TUEVFRAkJCTB4MkEwMAotI2RlZmluZSBCUklHSFRORVNTX0ZPUk1BVFRFUgkJCTB4MkIwMAotI2RlZmluZSBHQU1NQV9GT1JNQVRURVIJCQkJMHgyQzAwCi0KLS8qIFNlbGVjdG9ycyBmb3IgdGhlIENocm9taW5hbmNlIGNvbnRyb2xzIFtHU11FVF9DSFJPTV9DVEwgKi8KLSNkZWZpbmUgV0JfTU9ERV9GT1JNQVRURVIJCQkweDEwMDAKLSNkZWZpbmUgQVdCX0NPTlRST0xfU1BFRURfRk9STUFUVEVSCQkweDExMDAKLSNkZWZpbmUgQVdCX0NPTlRST0xfREVMQVlfRk9STUFUVEVSCQkweDEyMDAKLSNkZWZpbmUgUFJFU0VUX01BTlVBTF9SRURfR0FJTl9GT1JNQVRURVIJMHgxMzAwCi0jZGVmaW5lIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUgkweDE0MDAKLSNkZWZpbmUgQ09MT1VSX01PREVfRk9STUFUVEVSCQkJMHgxNTAwCi0jZGVmaW5lIFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIxCQkweDE2MDAKLSNkZWZpbmUgU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjIJCTB4MTcwMAotCi0vKiBTZWxlY3RvcnMgZm9yIHRoZSBTdGF0dXMgY29udHJvbHMgW0dTXUVUX1NUQVRVU19DVEwgKi8KLSNkZWZpbmUgU0FWRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUgkJMHgwMjAwCi0jZGVmaW5lIFJFU1RPUkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIJCTB4MDMwMAotI2RlZmluZSBSRVNUT1JFX0ZBQ1RPUllfREVGQVVMVFNfRk9STUFUVEVSCTB4MDQwMAotI2RlZmluZSBSRUFEX0FHQ19GT1JNQVRURVIJCQkweDA1MDAKLSNkZWZpbmUgUkVBRF9TSFVUVEVSX0ZPUk1BVFRFUgkJCTB4MDYwMAotI2RlZmluZSBSRUFEX1JFRF9HQUlOX0ZPUk1BVFRFUgkJCTB4MDcwMAotI2RlZmluZSBSRUFEX0JMVUVfR0FJTl9GT1JNQVRURVIJCTB4MDgwMAorLyogU2VsZWN0b3JzIGZvciBzdGF0dXMgY29udHJvbHMgdXNlZCBvbmx5IGluIHRoaXMgZmlsZSAqLwogI2RlZmluZSBHRVRfU1RBVFVTX0IwMAkJCQkweDBCMDAKICNkZWZpbmUgU0VOU09SX1RZUEVfRk9STUFUVEVSMQkJCTB4MEMwMAogI2RlZmluZSBHRVRfU1RBVFVTXzMwMDAJCQkJMHgzMDAwCkBAIC0xMTYsMTEgKzY4LDYgQEAKIC8qIEZvcm1hdHRlcnMgZm9yIHRoZSBWaWRlbyBFbmRwb2ludCBjb250cm9scyBbR1NdRVRfRVBfU1RSRUFNX0NUTCAqLwogI2RlZmluZSBWSURFT19PVVRQVVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEwMAogCi0vKiBGb3JtYXR0ZXJzIGZvciB0aGUgbW90b3JpemVkIHBhbiAmIHRpbHQgW0dTXUVUX01QVF9DVEwgKi8KLSNkZWZpbmUgUFRfUkVMQVRJVkVfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDEKLSNkZWZpbmUgUFRfUkVTRVRfQ09OVFJPTF9GT1JNQVRURVIJCTB4MDIKLSNkZWZpbmUgUFRfU1RBVFVTX0ZPUk1BVFRFUgkJCTB4MDMKLQogc3RhdGljIGNvbnN0IGNoYXIgKnNpemUybmFtZVtQU1pfTUFYXSA9CiB7CiAJInN1YlFDSUYiLApAQCAtMTYwLDcgKzEwNyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBfc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwKLQl1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqYnVmLCBpbnQgYnVmbGVuLCBpbnQgdGltZW91dCkKKwl1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqYnVmLCBpbnQgYnVmbGVuKQogewogCWludCByYzsKIAl2b2lkICprYnVmID0gTlVMTDsKQEAgLTE3Nyw3ICsxMjQsNyBAQAogCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCXZhbHVlLAogCQlpbmRleCwKLQkJa2J1ZiwgYnVmbGVuLCB0aW1lb3V0KTsKKwkJa2J1ZiwgYnVmbGVuLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAKIAlrZnJlZShrYnVmKTsKIAlyZXR1cm4gcmM7CkBAIC0xOTcsOSArMTQ0LDEzIEBACiAJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQl2YWx1ZSwKIAkJcGRldi0+dmNpbnRlcmZhY2UsCi0JCWtidWYsIGJ1ZmxlbiwgNTAwKTsKKwkJa2J1ZiwgYnVmbGVuLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CiAJbWVtY3B5KGJ1Ziwga2J1ZiwgYnVmbGVuKTsKIAlrZnJlZShrYnVmKTsKKworCWlmIChyYyA8IDApCisJCVBXQ19FUlJPUigicmVjdl9jb250cm9sX21zZyBlcnJvciAlZCByZXEgJTAyeCB2YWwgJTA0eFxuIiwKKwkJCSAgcmMsIHJlcXVlc3QsIHZhbHVlKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxMCwxOCArMTYxLDE2IEBACiAJCVNFVF9FUF9TVFJFQU1fQ1RMLAogCQlWSURFT19PVVRQVVRfQ09OVFJPTF9GT1JNQVRURVIsCiAJCWluZGV4LAotCQlidWYsIGJ1ZmxlbiwgMTAwMCk7CisJCWJ1ZiwgYnVmbGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwKK2ludCBzZW5kX2NvbnRyb2xfbXNnKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LAogCXU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwgdm9pZCAqYnVmLCBpbnQgYnVmbGVuKQogewogCXJldHVybiBfc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlyZXF1ZXN0LCB2YWx1ZSwgcGRldi0+dmNpbnRlcmZhY2UsIGJ1ZiwgYnVmbGVuLCA1MDApOworCQlyZXF1ZXN0LCB2YWx1ZSwgcGRldi0+dmNpbnRlcmZhY2UsIGJ1ZiwgYnVmbGVuKTsKIH0KIAotCi0KIHN0YXRpYyBpbnQgc2V0X3ZpZGVvX21vZGVfTmFsYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNpemUsIGludCBmcmFtZXMpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbM107CkBAIC0yNjEsOCArMjEwLDExIEBACiAJCVBXQ19ERUJVR19NT0RVTEUoIkZhaWxlZCB0byBzZW5kIHZpZGVvIGNvbW1hbmQuLi4gJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChwRW50cnktPmNvbXByZXNzZWQgJiYgcGRldi0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjApCi0JCXB3Y19kZWMxX2luaXQocGRldi0+dHlwZSwgcGRldi0+cmVsZWFzZSwgYnVmLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCWlmIChwRW50cnktPmNvbXByZXNzZWQgJiYgcGRldi0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjApIHsKKwkJcmV0ID0gcHdjX2RlYzFfaW5pdChwZGV2LCBwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcGRldi0+Y21kX2xlbiA9IDM7CiAJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMyk7CkBAIC0zMjEsOCArMjczLDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocENob29zZS0+YmFuZGxlbmd0aCA+IDAgJiYgcGRldi0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVY0MjApCi0JCXB3Y19kZWMyM19pbml0KHBkZXYsIHBkZXYtPnR5cGUsIGJ1Zik7CisJaWYgKHBDaG9vc2UtPmJhbmRsZW5ndGggPiAwICYmIHBkZXYtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwKSB7CisJCXJldCA9IHB3Y19kZWMyM19pbml0KHBkZXYsIHBkZXYtPnR5cGUsIGJ1Zik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlwZGV2LT5jbWRfbGVuID0gMTM7CiAJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMTMpOwpAQCAtMzk0LDggKzM0OSwxMSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHBDaG9vc2UtPmJhbmRsZW5ndGggPiAwICYmIHBkZXYtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwKQotCQlwd2NfZGVjMjNfaW5pdChwZGV2LCBwZGV2LT50eXBlLCBidWYpOworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCAmJiBwZGV2LT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVVjQyMCkgeworCQlyZXQgPSBwd2NfZGVjMjNfaW5pdChwZGV2LCBwZGV2LT50eXBlLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJcGRldi0+Y21kX2xlbiA9IDEyOwogCW1lbWNweShwZGV2LT5jbWRfYnVmLCBidWYsIDEyKTsKQEAgLTQ1Miw2ICs0MTAsNyBAQAogCX0KIAlwZGV2LT52aWV3LnggPSB3aWR0aDsKIAlwZGV2LT52aWV3LnkgPSBoZWlnaHQ7CisJcGRldi0+dmNvbXByZXNzaW9uID0gY29tcHJlc3Npb247CiAJcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSA9IHBkZXYtPmZyYW1lX3NpemUgKyBwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZSArIHBkZXYtPmZyYW1lX3RyYWlsZXJfc2l6ZTsKIAlwd2Nfc2V0X2ltYWdlX2J1ZmZlcl9zaXplKHBkZXYpOwogCVBXQ19ERUJVR19TSVpFKCJTZXQgdmlld3BvcnQgdG8gJWR4JWQsIGltYWdlIHNpemUgaXMgJWR4JWQuXG4iLCB3aWR0aCwgaGVpZ2h0LCBwd2NfaW1hZ2Vfc2l6ZXNbc2l6ZV0ueCwgcHdjX2ltYWdlX3NpemVzW3NpemVdLnkpOwpAQCAtNTExLDEzICs0NzAsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgQkxBQ0tfWSAwCi0jZGVmaW5lIEJMQUNLX1UgMTI4Ci0jZGVmaW5lIEJMQUNLX1YgMTI4Ci0KIHN0YXRpYyB2b2lkIHB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IGksIGZhY3RvciA9IDA7CisJaW50IGZhY3RvciA9IDA7CiAKIAkvKiBmb3IgVjRMMl9QSVhfRk1UX1lVVjQyMCAqLwogCXN3aXRjaCAocGRldi0+cGl4Zm10KSB7CkBAIC01NDEsNDQyICs0OTYsMTA4IEBACiAJICovCiAJcGRldi0+b2Zmc2V0LnggPSAoKHBkZXYtPnZpZXcueCAtIHBkZXYtPmltYWdlLngpIC8gMikgJiAweEZGRkM7CiAJcGRldi0+b2Zmc2V0LnkgPSAoKHBkZXYtPnZpZXcueSAtIHBkZXYtPmltYWdlLnkpIC8gMikgJiAweEZGRkU7Ci0KLQkvKiBGaWxsIGJ1ZmZlcnMgd2l0aCBibGFjayBjb2xvcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcHdjX21idWZzOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciAqcCA9IHBkZXYtPmltYWdlX2RhdGEgKyBwZGV2LT5pbWFnZXNbaV0ub2Zmc2V0OwotCQltZW1zZXQocCwgQkxBQ0tfWSwgcGRldi0+dmlldy54ICogcGRldi0+dmlldy55KTsKLQkJcCArPSBwZGV2LT52aWV3LnggKiBwZGV2LT52aWV3Lnk7Ci0JCW1lbXNldChwLCBCTEFDS19VLCBwZGV2LT52aWV3LnggKiBwZGV2LT52aWV3LnkvNCk7Ci0JCXAgKz0gcGRldi0+dmlldy54ICogcGRldi0+dmlldy55LzQ7Ci0JCW1lbXNldChwLCBCTEFDS19WLCBwZGV2LT52aWV3LnggKiBwZGV2LT52aWV3LnkvNCk7Ci0JfQogfQogCi0KLQotLyogQlJJR0hUTkVTUyAqLwotCi1pbnQgcHdjX2dldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoraW50IHB3Y19nZXRfdThfY3RybChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCBpbnQgKmRhdGEpCiB7Ci0JY2hhciBidWY7CiAJaW50IHJldDsKKwl1OCBidWY7CiAKLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9MVU1fQ1RMLCBCUklHSFRORVNTX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwgcmVxdWVzdCwgdmFsdWUsICZidWYsIHNpemVvZihidWYpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gYnVmOwotfQogCi1pbnQgcHdjX3NldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCi17Ci0JY2hhciBidWY7Ci0KLQlpZiAodmFsdWUgPCAwKQotCQl2YWx1ZSA9IDA7Ci0JaWYgKHZhbHVlID4gMHhmZmZmKQotCQl2YWx1ZSA9IDB4ZmZmZjsKLQlidWYgPSAodmFsdWUgPj4gOSkgJiAweDdmOwotCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBCUklHSFRORVNTX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotfQotCi0vKiBDT05UUkFTVCAqLwotCi1pbnQgcHdjX2dldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKLXsKLQljaGFyIGJ1ZjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfTFVNX0NUTCwgQ09OVFJBU1RfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIGJ1ZjsKLX0KLQotaW50IHB3Y19zZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKLXsKLQljaGFyIGJ1ZjsKLQotCWlmICh2YWx1ZSA8IDApCi0JCXZhbHVlID0gMDsKLQlpZiAodmFsdWUgPiAweGZmZmYpCi0JCXZhbHVlID0gMHhmZmZmOwotCWJ1ZiA9ICh2YWx1ZSA+PiAxMCkgJiAweDNmOwotCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBDT05UUkFTVF9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLX0KLQotLyogR0FNTUEgKi8KLQotaW50IHB3Y19nZXRfZ2FtbWEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JY2hhciBidWY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwKLQkJR0VUX0xVTV9DVEwsIEdBTU1BX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiBidWY7Ci19Ci0KLWludCBwd2Nfc2V0X2dhbW1hKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCi17Ci0JY2hhciBidWY7Ci0KLQlpZiAodmFsdWUgPCAwKQotCQl2YWx1ZSA9IDA7Ci0JaWYgKHZhbHVlID4gMHhmZmZmKQotCQl2YWx1ZSA9IDB4ZmZmZjsKLQlidWYgPSAodmFsdWUgPj4gMTEpICYgMHgxZjsKLQlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfTFVNX0NUTCwgR0FNTUFfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci19Ci0KLQotLyogU0FUVVJBVElPTiAqLwotCi0vKiByZXR1cm4gYSB2YWx1ZSBiZXR3ZWVuIFstMTAwICwgMTAwXSAqLwotaW50IHB3Y19nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKLXsKLQljaGFyIGJ1ZjsKLQlpbnQgcmV0LCBzYXR1cmF0aW9uX3JlZ2lzdGVyOwotCi0JaWYgKHBkZXYtPnR5cGUgPCA2NzUpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChwZGV2LT50eXBlIDwgNzMwKQotCQlzYXR1cmF0aW9uX3JlZ2lzdGVyID0gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjI7Ci0JZWxzZQotCQlzYXR1cmF0aW9uX3JlZ2lzdGVyID0gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjE7Ci0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfQ0hST01fQ1RMLCBzYXR1cmF0aW9uX3JlZ2lzdGVyLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JKnZhbHVlID0gKHNpZ25lZClidWY7CisJKmRhdGEgPSBidWY7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIEBwYXJhbSB2YWx1ZSBzYXR1cmF0aW9uIGNvbG9yIGJldHdlZW4gWy0xMDAgLCAxMDBdICovCi1pbnQgcHdjX3NldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCitpbnQgcHdjX3NldF91OF9jdHJsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHU4IGRhdGEpCiB7Ci0JY2hhciBidWY7Ci0JaW50IHNhdHVyYXRpb25fcmVnaXN0ZXI7Ci0KLQlpZiAocGRldi0+dHlwZSA8IDY3NSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHZhbHVlIDwgLTEwMCkKLQkJdmFsdWUgPSAtMTAwOwotCWlmICh2YWx1ZSA+IDEwMCkKLQkJdmFsdWUgPSAxMDA7Ci0JaWYgKHBkZXYtPnR5cGUgPCA3MzApCi0JCXNhdHVyYXRpb25fcmVnaXN0ZXIgPSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMjsKLQllbHNlCi0JCXNhdHVyYXRpb25fcmVnaXN0ZXIgPSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMTsKLQlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfQ0hST01fQ1RMLCBzYXR1cmF0aW9uX3JlZ2lzdGVyLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci19Ci0KLS8qIEFHQyAqLwotCi1pbnQgcHdjX3NldF9hZ2Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlLCBpbnQgdmFsdWUpCi17Ci0JY2hhciBidWY7CiAJaW50IHJldDsKIAotCWlmIChtb2RlKQotCQlidWYgPSAweDA7IC8qIGF1dG8gKi8KLQllbHNlCi0JCWJ1ZiA9IDB4ZmY7IC8qIGZpeGVkICovCi0KLQlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmICghbW9kZSAmJiByZXQgPj0gMCkgewotCQlpZiAodmFsdWUgPCAwKQotCQkJdmFsdWUgPSAwOwotCQlpZiAodmFsdWUgPiAweGZmZmYpCi0JCQl2YWx1ZSA9IDB4ZmZmZjsKLQkJYnVmID0gKHZhbHVlID4+IDEwKSAmIDB4M0Y7Ci0JCXJldCA9IHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJCVNFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCX0KKwlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsIHJlcXVlc3QsIHZhbHVlLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHB3Y19nZXRfYWdjKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQotewotCXVuc2lnbmVkIGNoYXIgYnVmOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChidWYgIT0gMCkgeyAvKiBmaXhlZCAqLwotCQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCQlHRVRfTFVNX0NUTCwgUFJFU0VUX0FHQ19GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCQlpZiAoYnVmID4gMHgzRikKLQkJCWJ1ZiA9IDB4M0Y7Ci0JCSp2YWx1ZSA9IChidWYgPDwgMTApOwotCX0KLQllbHNlIHsgLyogYXV0byAqLwotCQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCQlHRVRfU1RBVFVTX0NUTCwgUkVBRF9BR0NfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJLyogR2FoLi4uIHRoaXMgdmFsdWUgcmFuZ2VzIGZyb20gMHgwMCAuLi4gMHg5RiAqLwotCQlpZiAoYnVmID4gMHg5RikKLQkJCWJ1ZiA9IDB4OUY7Ci0JCSp2YWx1ZSA9IC0oNDggKyBidWYgKiA0MDkpOwotCX0KIAogCXJldHVybiAwOwogfQogCi1pbnQgcHdjX3NldF9zaHV0dGVyX3NwZWVkKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSwgaW50IHZhbHVlKQoraW50IHB3Y19nZXRfczhfY3RybChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCBpbnQgKmRhdGEpCiB7Ci0JY2hhciBidWZbMl07Ci0JaW50IHNwZWVkLCByZXQ7Ci0KLQotCWlmIChtb2RlKQotCQlidWZbMF0gPSAweDA7CS8qIGF1dG8gKi8KLQllbHNlCi0JCWJ1ZlswXSA9IDB4ZmY7IC8qIGZpeGVkICovCi0KLQlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBTSFVUVEVSX01PREVfRk9STUFUVEVSLCAmYnVmLCAxKTsKLQotCWlmICghbW9kZSAmJiByZXQgPj0gMCkgewotCQlpZiAodmFsdWUgPCAwKQotCQkJdmFsdWUgPSAwOwotCQlpZiAodmFsdWUgPiAweGZmZmYpCi0JCQl2YWx1ZSA9IDB4ZmZmZjsKLQotCQlpZiAoREVWSUNFX1VTRV9DT0RFQzIocGRldi0+dHlwZSkpIHsKLQkJCS8qIHNwZWVkIHJhbmdlcyBmcm9tIDB4MCB0byAweDI5MCAoNjU2KSAqLwotCQkJc3BlZWQgPSAodmFsdWUgLyAxMDApOwotCQkJYnVmWzFdID0gc3BlZWQgPj4gODsKLQkJCWJ1ZlswXSA9IHNwZWVkICYgMHhmZjsKLQkJfSBlbHNlIGlmIChERVZJQ0VfVVNFX0NPREVDMyhwZGV2LT50eXBlKSkgewotCQkJLyogc3BlZWQgc2VlbXMgdG8gcmFuZ2UgZnJvbSAweDAgdG8gMHhmZiAqLwotCQkJYnVmWzFdID0gMDsKLQkJCWJ1ZlswXSA9IHZhbHVlID4+IDg7Ci0JCX0KLQotCQlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCQlTRVRfTFVNX0NUTCwgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSLAotCQkJJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBleHBvcnRlZCB0byB2NGwxLCBzbyBvdXRwdXQgdmFsdWVzIGJldHdlZW4gMCAtPiAyNTYgKi8KLWludCBwd2NfZ2V0X3NodXR0ZXJfc3BlZWQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbMl07CiAJaW50IHJldDsKKwlzOCBidWY7CiAKLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9TVEFUVVNfQ1RMLCBSRUFEX1NIVVRURVJfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7CisJcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LCByZXF1ZXN0LCB2YWx1ZSwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCSp2YWx1ZSA9IGJ1ZlswXSArIChidWZbMV0gPDwgOCk7Ci0JaWYgKERFVklDRV9VU0VfQ09ERUMyKHBkZXYtPnR5cGUpKSB7Ci0JCS8qIHNwZWVkIHJhbmdlcyBmcm9tIDB4MCB0byAweDI5MCAoNjU2KSAqLwotCQkqdmFsdWUgKj0gMjU2LzY1NjsKLQl9IGVsc2UgaWYgKERFVklDRV9VU0VfQ09ERUMzKHBkZXYtPnR5cGUpKSB7Ci0JCS8qIHNwZWVkIHNlZW1zIHRvIHJhbmdlIGZyb20gMHgwIHRvIDB4ZmYgKi8KLQl9CisKKwkqZGF0YSA9IGJ1ZjsKIAlyZXR1cm4gMDsKIH0KIAoraW50IHB3Y19nZXRfdTE2X2N0cmwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwgaW50ICpkYXRhKQoreworCWludCByZXQ7CisJdTggYnVmWzJdOworCisJcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LCByZXF1ZXN0LCB2YWx1ZSwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqZGF0YSA9IChidWZbMV0gPDwgOCkgfCBidWZbMF07CisJcmV0dXJuIDA7Cit9CisKK2ludCBwd2Nfc2V0X3UxNl9jdHJsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHUxNiBkYXRhKQoreworCWludCByZXQ7CisJdTggYnVmWzJdOworCisJYnVmWzBdID0gZGF0YSAmIDB4ZmY7CisJYnVmWzFdID0gZGF0YSA+PiA4OworCXJldCA9IHNlbmRfY29udHJvbF9tc2cocGRldiwgcmVxdWVzdCwgdmFsdWUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwd2NfYnV0dG9uX2N0cmwoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHUxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2VuZF9jb250cm9sX21zZyhwZGV2LCBTRVRfU1RBVFVTX0NUTCwgdmFsdWUsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CiAKIC8qIFBPV0VSICovCi0KLWludCBwd2NfY2FtZXJhX3Bvd2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcG93ZXIpCit2b2lkIHB3Y19jYW1lcmFfcG93ZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwb3dlcikKIHsKIAljaGFyIGJ1ZjsKKwlpbnQgcjsKKworCWlmICghcGRldi0+cG93ZXJfc2F2ZSkKKwkJcmV0dXJuOwogCiAJaWYgKHBkZXYtPnR5cGUgPCA2NzUgfHwgKHBkZXYtPnR5cGUgPCA3MzAgJiYgcGRldi0+cmVsZWFzZSA8IDYpKQotCQlyZXR1cm4gMDsJLyogTm90IHN1cHBvcnRlZCBieSBOYWxhIG9yIFRpbW9uIDwgcmVsZWFzZSA2ICovCisJCXJldHVybjsJLyogTm90IHN1cHBvcnRlZCBieSBOYWxhIG9yIFRpbW9uIDwgcmVsZWFzZSA2ICovCiAKIAlpZiAocG93ZXIpCiAJCWJ1ZiA9IDB4MDA7IC8qIGFjdGl2ZSAqLwogCWVsc2UKIAkJYnVmID0gMHhGRjsgLyogcG93ZXIgc2F2ZSAqLwotCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCisJciA9IHNlbmRfY29udHJvbF9tc2cocGRldiwKIAkJU0VUX1NUQVRVU19DVEwsIFNFVF9QT1dFUl9TQVZFX01PREVfRk9STUFUVEVSLAogCQkmYnVmLCBzaXplb2YoYnVmKSk7CisKKwlpZiAociA8IDApCisJCVBXQ19FUlJPUigiRmFpbGVkIHRvIHBvd2VyICVzIGNhbWVyYSAoJWQpXG4iLAorCQkJICBwb3dlciA/ICJvbiIgOiAib2ZmIiwgcik7CiB9CiAKLQotCi0vKiBwcml2YXRlIGNhbGxzICovCi0KLWludCBwd2NfcmVzdG9yZV91c2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQotewotCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9TVEFUVVNfQ1RMLCBSRVNUT1JFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSLCBOVUxMLCAwKTsKLX0KLQotaW50IHB3Y19zYXZlX3VzZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJU0VUX1NUQVRVU19DVEwsIFNBVkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIsIE5VTEwsIDApOwotfQotCi1pbnQgcHdjX3Jlc3RvcmVfZmFjdG9yeShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfU1RBVFVTX0NUTCwgUkVTVE9SRV9GQUNUT1JZX0RFRkFVTFRTX0ZPUk1BVFRFUiwgTlVMTCwgMCk7Ci19Ci0KLSAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0gLyogUGF0Y2ggYnkgQWx2YXJhZG86IChub3QgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gICAqLwotCi0gLyoKLSAgKiB0aGUgY2FtZXJhIHJlY29nbml6ZXMgbW9kZXMgZnJvbSAwIHRvIDQ6Ci0gICoKLSAgKiAwMDogaW5kb29yIChpbmNhbmRlc2NhbnQgbGlnaHRpbmcpCi0gICogMDE6IG91dGRvb3IgKHN1bmxpZ2h0KQotICAqIDAyOiBmbHVvcmVzY2VudCBsaWdodGluZwotICAqIDAzOiBtYW51YWwKLSAgKiAwNDogYXV0bwotICAqLwotaW50IHB3Y19zZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSkKLXsKLQljaGFyIGJ1ZjsKLQlpbnQgcmV0OwotCi0JaWYgKG1vZGUgPCAwKQotCSAgICBtb2RlID0gMDsKLQotCWlmIChtb2RlID4gNCkKLQkgICAgbW9kZSA9IDQ7Ci0KLQlidWYgPSBtb2RlICYgMHgwNzsgLyoganVzdCB0aGUgbG93ZXN0IHRocmVlIGJpdHMgKi8KLQotCXJldCA9IHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJU0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiAwOwotfQotCi1pbnQgcHdjX2dldF9hd2Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwKLQkJR0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiBidWY7Ci19Ci0KLWludCBwd2Nfc2V0X3JlZF9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0KLQlpZiAodmFsdWUgPCAwKQotCQl2YWx1ZSA9IDA7Ci0JaWYgKHZhbHVlID4gMHhmZmZmKQotCQl2YWx1ZSA9IDB4ZmZmZjsKLQkvKiBvbmx5IHRoZSBtc2IgaXMgY29uc2lkZXJlZCAqLwotCWJ1ZiA9IHZhbHVlID4+IDg7Ci0JcmV0dXJuIHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJU0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9SRURfR0FJTl9GT1JNQVRURVIsCi0JCSZidWYsIHNpemVvZihidWYpKTsKLX0KLQotaW50IHB3Y19nZXRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwKLQkJR0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9SRURfR0FJTl9GT1JNQVRURVIsCi0JCSZidWYsIHNpemVvZihidWYpKTsKLQlpZiAocmV0IDwgMCkKLQkgICAgcmV0dXJuIHJldDsKLQkqdmFsdWUgPSBidWYgPDwgODsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgcHdjX3NldF9ibHVlX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQotCWlmICh2YWx1ZSA8IDApCi0JCXZhbHVlID0gMDsKLQlpZiAodmFsdWUgPiAweGZmZmYpCi0JCXZhbHVlID0gMHhmZmZmOwotCS8qIG9ubHkgdGhlIG1zYiBpcyBjb25zaWRlcmVkICovCi0JYnVmID0gdmFsdWUgPj4gODsKLQlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfQ0hST01fQ1RMLCBQUkVTRVRfTUFOVUFMX0JMVUVfR0FJTl9GT1JNQVRURVIsCi0JCSZidWYsIHNpemVvZihidWYpKTsKLX0KLQotaW50IHB3Y19nZXRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQotewotCXVuc2lnbmVkIGNoYXIgYnVmOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwKLQkJJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXQgPCAwKQotCSAgICByZXR1cm4gcmV0OwotCSp2YWx1ZSA9IGJ1ZiA8PCA4OwotCXJldHVybiAwOwotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgZGlmZmVyZW50LCBzaW5jZSB0aGV5IG9ubHkgcmVhZCB0aGUKLSAgIGludGVybmFsIHJlZC9ibHVlIGdhaW5zLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIG1hbnVhbAotICAgZ2FpbnMgc2V0IG9yIHJlYWQgYWJvdmUuCi0gKi8KLXN0YXRpYyBpbnQgcHdjX3JlYWRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqdmFsdWUpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwKLQkJR0VUX1NUQVRVU19DVEwsIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JKnZhbHVlID0gYnVmIDw8IDg7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHdjX3JlYWRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQotewotCXVuc2lnbmVkIGNoYXIgYnVmOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9TVEFUVVNfQ1RMLCBSRUFEX0JMVUVfR0FJTl9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQkqdmFsdWUgPSBidWYgPDwgODsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHB3Y19zZXRfd2Jfc3BlZWQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBzcGVlZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKQEAgLTEwMjgsNiArNjQ5LDcgQEAKIGludCBwd2Nfc2V0X2xlZHMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBvbl92YWx1ZSwgaW50IG9mZl92YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlpbnQgcjsKIAogCWlmIChwZGV2LT50eXBlIDwgNzMwKQogCQlyZXR1cm4gMDsKQEAgLTEwNDUsOCArNjY3LDEyIEBACiAJYnVmWzBdID0gb25fdmFsdWU7CiAJYnVmWzFdID0gb2ZmX3ZhbHVlOwogCi0JcmV0dXJuIHNlbmRfY29udHJvbF9tc2cocGRldiwKKwlyID0gc2VuZF9jb250cm9sX21zZyhwZGV2LAogCQlTRVRfU1RBVFVTX0NUTCwgTEVEX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyIDwgMCkKKwkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZSAoJWQpXG4iLCByKTsKKworCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IHB3Y19nZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpvbl92YWx1ZSwgaW50ICpvZmZfdmFsdWUpCkBAIC0xMDY5LDE2NCArNjk1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHB3Y19zZXRfY29udG91cihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGNvbnRvdXIpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0JaW50IHJldDsKLQotCWlmIChjb250b3VyIDwgMCkKLQkJYnVmID0gMHhmZjsgLyogYXV0byBjb250b3VyIG9uICovCi0JZWxzZQotCQlidWYgPSAweDA7IC8qIGF1dG8gY29udG91ciBvZmYgKi8KLQlyZXQgPSBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBBVVRPX0NPTlRPVVJfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoY29udG91ciA8IDApCi0JCXJldHVybiAwOwotCWlmIChjb250b3VyID4gMHhmZmZmKQotCQljb250b3VyID0gMHhmZmZmOwotCi0JYnVmID0gKGNvbnRvdXIgPj4gMTApOyAvKiBjb250b3VyIHByZXNldCBpcyBbMC4uM2ZdICovCi0JcmV0ID0gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfTFVNX0NUTCwgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwd2NfZ2V0X2NvbnRvdXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqY29udG91cikKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfTFVNX0NUTCwgQVVUT19DT05UT1VSX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKGJ1ZiA9PSAwKSB7Ci0JCS8qIGF1dG8gbW9kZSBvZmYsIHF1ZXJ5IGN1cnJlbnQgcHJlc2V0IHZhbHVlICovCi0JCXJldCA9IHJlY3ZfY29udHJvbF9tc2cocGRldiwKLQkJCUdFVF9MVU1fQ1RMLCBQUkVTRVRfQ09OVE9VUl9GT1JNQVRURVIsCi0JCQkmYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQkJKmNvbnRvdXIgPSBidWYgPDwgMTA7Ci0JfQotCWVsc2UKLQkJKmNvbnRvdXIgPSAtMTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgcHdjX3NldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBiYWNrbGlnaHQpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0KLQlpZiAoYmFja2xpZ2h0KQotCQlidWYgPSAweGZmOwotCWVsc2UKLQkJYnVmID0gMHgwOwotCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKHBkZXYsCi0JCVNFVF9MVU1fQ1RMLCBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIsCi0JCSZidWYsIHNpemVvZihidWYpKTsKLX0KLQotaW50IHB3Y19nZXRfYmFja2xpZ2h0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmJhY2tsaWdodCkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGNoYXIgYnVmOwotCi0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfTFVNX0NUTCwgQkFDS19MSUdIVF9DT01QRU5TQVRJT05fRk9STUFUVEVSLAotCQkmYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JKmJhY2tsaWdodCA9ICEhYnVmOwotCXJldHVybiAwOwotfQotCi1pbnQgcHdjX3NldF9jb2xvdXJfbW9kZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGNvbG91cikKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQotCWlmIChjb2xvdXIpCi0JCWJ1ZiA9IDB4ZmY7Ci0JZWxzZQotCQlidWYgPSAweDA7Ci0JcmV0dXJuIHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJU0VUX0NIUk9NX0NUTCwgQ09MT1VSX01PREVfRk9STUFUVEVSLCAmYnVmLCBzaXplb2YoYnVmKSk7Ci19Ci0KLWludCBwd2NfZ2V0X2NvbG91cl9tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmNvbG91cikKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGNoYXIgYnVmOwotCi0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfQ0hST01fQ1RMLCBDT0xPVVJfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQkqY29sb3VyID0gISFidWY7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IHB3Y19zZXRfZmxpY2tlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsaWNrZXIpCi17Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0KLQlpZiAoZmxpY2tlcikKLQkJYnVmID0gMHhmZjsKLQllbHNlCi0JCWJ1ZiA9IDB4MDsKLQlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhwZGV2LAotCQlTRVRfTFVNX0NUTCwgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsICZidWYsIHNpemVvZihidWYpKTsKLX0KLQotaW50IHB3Y19nZXRfZmxpY2tlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpmbGlja2VyKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgY2hhciBidWY7Ci0KLQlyZXQgPSByZWN2X2NvbnRyb2xfbXNnKHBkZXYsCi0JCUdFVF9MVU1fQ1RMLCBGTElDS0VSTEVTU19NT0RFX0ZPUk1BVFRFUiwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCSpmbGlja2VyID0gISFidWY7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwd2Nfc2V0X2R5bmFtaWNfbm9pc2Uoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBub2lzZSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQotCWlmIChub2lzZSA8IDApCi0JCW5vaXNlID0gMDsKLQlpZiAobm9pc2UgPiAzKQotCQlub2lzZSA9IDM7Ci0JYnVmID0gbm9pc2U7Ci0JcmV0dXJuIHNlbmRfY29udHJvbF9tc2cocGRldiwKLQkJU0VUX0xVTV9DVEwsIERZTkFNSUNfTk9JU0VfQ09OVFJPTF9GT1JNQVRURVIsCi0JCSZidWYsIHNpemVvZihidWYpKTsKLX0KLQotaW50IHB3Y19nZXRfZHluYW1pY19ub2lzZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpub2lzZSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGNoYXIgYnVmOwotCi0JcmV0ID0gcmVjdl9jb250cm9sX21zZyhwZGV2LAotCQlHRVRfTFVNX0NUTCwgRFlOQU1JQ19OT0lTRV9DT05UUk9MX0ZPUk1BVFRFUiwKLQkJJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCSpub2lzZSA9IGJ1ZjsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfcHdjX21wdF9yZXNldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgYnVmOwpAQCAtMTMwOSw3ICs3NzcsNyBAQAogCXJldHVybiAwOwogfQogCi0KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogaW50IHB3Y19nZXRfY21vc19zZW5zb3Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqc2Vuc29yKQogewogCXVuc2lnbmVkIGNoYXIgYnVmOwpAQCAtMTMzMiw3ICs4MDAsNyBAQAogCQkqc2Vuc29yID0gYnVmOwogCXJldHVybiAwOwogfQotCisjZW5kaWYKIAogIC8qIEVuZCBvZiBBZGQtT25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCkBAIC0xMzU2LDM3ICs4MjQsNDEgQEAKIC8qIGNvcHkgbG9jYWwgdmFyaWFibGUgdG8gYXJnICovCiAjZGVmaW5lIEFSR19PVVQoQVJHX25hbWUpIC8qIG5vdGhpbmcgKi8KIAorLyoKKyAqIE91ciBjdHJscyB1c2UgbmF0aXZlIHZhbHVlcywgYnV0IHRoZSBvbGQgY3VzdG9tIHB3YyBpb2N0bCBpbnRlcmZhY2UgZXhwZWN0cworICogdmFsdWVzIGZyb20gMCAtIDY1NTM1LCBkZWZpbmUgMiBoZWxwZXIgZnVuY3Rpb25zIHRvIHNjYWxlIHRoaW5ncy4gKi8KK3N0YXRpYyBpbnQgcHdjX2lvY3RsX2dfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXJldHVybiB2NGwyX2N0cmxfZ19jdHJsKGN0cmwpICogNjU1MzUgLyBjdHJsLT5tYXhpbXVtOworfQorCitzdGF0aWMgaW50IHB3Y19pb2N0bF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCwgaW50IHZhbCkKK3sKKwlyZXR1cm4gdjRsMl9jdHJsX3NfY3RybChjdHJsLCB2YWwgKiBjdHJsLT5tYXhpbXVtIC8gNjU1MzUpOworfQorCiBsb25nIHB3Y19pb2N0bChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCWxvbmcgcmV0ID0gMDsKIAogCXN3aXRjaChjbWQpIHsKIAljYXNlIFZJRElPQ1BXQ1JVU0VSOgotCXsKLQkJaWYgKHB3Y19yZXN0b3JlX3VzZXIocGRldikpCi0JCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSBwd2NfYnV0dG9uX2N0cmwocGRldiwgUkVTVE9SRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUik7CiAJCWJyZWFrOwotCX0KIAogCWNhc2UgVklESU9DUFdDU1VTRVI6Ci0JewotCQlpZiAocHdjX3NhdmVfdXNlcihwZGV2KSkKLQkJCXJldCA9IC1FSU5WQUw7CisJCXJldCA9IHB3Y19idXR0b25fY3RybChwZGV2LCBTQVZFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSKTsKIAkJYnJlYWs7Ci0JfQogCiAJY2FzZSBWSURJT0NQV0NGQUNUT1JZOgotCXsKLQkJaWYgKHB3Y19yZXN0b3JlX2ZhY3RvcnkocGRldikpCi0JCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSBwd2NfYnV0dG9uX2N0cmwocGRldiwgUkVTVE9SRV9GQUNUT1JZX0RFRkFVTFRTX0ZPUk1BVFRFUik7CiAJCWJyZWFrOwotCX0KIAogCWNhc2UgVklESU9DUFdDU0NRVUFMOgogCXsKIAkJQVJHX0RFRihpbnQsIHF1YWwpCiAKLQkJaWYgKHBkZXYtPmlzb19pbml0KSB7CisJCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZwZGV2LT52Yl9xdWV1ZSkpIHsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzk2LDggKzg2OCw2IEBACiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlCiAJCQlyZXQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlldy54LCBwZGV2LT52aWV3LnksIHBkZXYtPnZmcmFtZXMsIEFSR1IocXVhbCksIHBkZXYtPnZzbmFwc2hvdCk7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXBkZXYtPnZjb21wcmVzc2lvbiA9IEFSR1IocXVhbCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQzMiw3MSArOTAyLDU5IEBACiAJY2FzZSBWSURJT0NQV0NTQUdDOgogCXsKIAkJQVJHX0RFRihpbnQsIGFnYykKLQogCQlBUkdfSU4oYWdjKQotCQlpZiAocHdjX3NldF9hZ2MocGRldiwgQVJHUihhZ2MpIDwgMCA/IDEgOiAwLCBBUkdSKGFnYykpKQotCQkJcmV0ID0gLUVJTlZBTDsKKwkJcmV0ID0gdjRsMl9jdHJsX3NfY3RybChwZGV2LT5hdXRvZ2FpbiwgQVJHUihhZ2MpIDwgMCk7CisJCWlmIChyZXQgPT0gMCAmJiBBUkdSKGFnYykgPj0gMCkKKwkJCXJldCA9IHB3Y19pb2N0bF9zX2N0cmwocGRldi0+Z2FpbiwgQVJHUihhZ2MpKTsKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBWSURJT0NQV0NHQUdDOgogCXsKIAkJQVJHX0RFRihpbnQsIGFnYykKLQotCQlpZiAocHdjX2dldF9hZ2MocGRldiwgQVJHQShhZ2MpKSkKLQkJCXJldCA9IC1FSU5WQUw7CisJCWlmICh2NGwyX2N0cmxfZ19jdHJsKHBkZXYtPmF1dG9nYWluKSkKKwkJCUFSR1IoYWdjKSA9IC0xOworCQllbHNlCisJCQlBUkdSKGFnYykgPSBwd2NfaW9jdGxfZ19jdHJsKHBkZXYtPmdhaW4pOwogCQlBUkdfT1VUKGFnYykKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBWSURJT0NQV0NTU0hVVFRFUjoKIAl7Ci0JCUFSR19ERUYoaW50LCBzaHV0dGVyX3NwZWVkKQotCi0JCUFSR19JTihzaHV0dGVyX3NwZWVkKQotCQlyZXQgPSBwd2Nfc2V0X3NodXR0ZXJfc3BlZWQocGRldiwgQVJHUihzaHV0dGVyX3NwZWVkKSA8IDAgPyAxIDogMCwgQVJHUihzaHV0dGVyX3NwZWVkKSk7CisJCUFSR19ERUYoaW50LCBzaHV0dGVyKQorCQlBUkdfSU4oc2h1dHRlcikKKwkJcmV0ID0gdjRsMl9jdHJsX3NfY3RybChwZGV2LT5leHBvc3VyZV9hdXRvLAorCQkJCSAgICAgICAvKiBNZW51IGlkeCAwID0gYXV0bywgaWR4IDEgPSBtYW51YWwgKi8KKwkJCQkgICAgICAgQVJHUihzaHV0dGVyKSA+PSAwKTsKKwkJaWYgKHJldCA9PSAwICYmIEFSR1Ioc2h1dHRlcikgPj0gMCkKKwkJCXJldCA9IHB3Y19pb2N0bF9zX2N0cmwocGRldi0+ZXhwb3N1cmUsIEFSR1Ioc2h1dHRlcikpOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ1BXQ1NBV0I6CiAJewogCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlLCB3YikKLQogCQlBUkdfSU4od2IpCi0JCXJldCA9IHB3Y19zZXRfYXdiKHBkZXYsIEFSR1Iod2IpLm1vZGUpOwotCQlpZiAocmV0ID49IDAgJiYgQVJHUih3YikubW9kZSA9PSBQV0NfV0JfTUFOVUFMKSB7Ci0JCQlwd2Nfc2V0X3JlZF9nYWluKHBkZXYsIEFSR1Iod2IpLm1hbnVhbF9yZWQpOwotCQkJcHdjX3NldF9ibHVlX2dhaW4ocGRldiwgQVJHUih3YikubWFudWFsX2JsdWUpOwotCQl9CisJCXJldCA9IHY0bDJfY3RybF9zX2N0cmwocGRldi0+YXV0b193aGl0ZV9iYWxhbmNlLAorCQkJCSAgICAgICBBUkdSKHdiKS5tb2RlKTsKKwkJaWYgKHJldCA9PSAwICYmIEFSR1Iod2IpLm1vZGUgPT0gUFdDX1dCX01BTlVBTCkKKwkJCXJldCA9IHB3Y19pb2N0bF9zX2N0cmwocGRldi0+cmVkX2JhbGFuY2UsCisJCQkJCSAgICAgICBBUkdSKHdiKS5tYW51YWxfcmVkKTsKKwkJaWYgKHJldCA9PSAwICYmIEFSR1Iod2IpLm1vZGUgPT0gUFdDX1dCX01BTlVBTCkKKwkJCXJldCA9IHB3Y19pb2N0bF9zX2N0cmwocGRldi0+Ymx1ZV9iYWxhbmNlLAorCQkJCQkgICAgICAgQVJHUih3YikubWFudWFsX2JsdWUpOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ1BXQ0dBV0I6CiAJewogCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlLCB3YikKLQotCQltZW1zZXQoQVJHQSh3YiksIDAsIHNpemVvZihzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSkpOwotCQlBUkdSKHdiKS5tb2RlID0gcHdjX2dldF9hd2IocGRldik7Ci0JCWlmIChBUkdSKHdiKS5tb2RlIDwgMCkKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaWYgKEFSR1Iod2IpLm1vZGUgPT0gUFdDX1dCX01BTlVBTCkgewotCQkJCXJldCA9IHB3Y19nZXRfcmVkX2dhaW4ocGRldiwgJkFSR1Iod2IpLm1hbnVhbF9yZWQpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlicmVhazsKLQkJCQlyZXQgPSBwd2NfZ2V0X2JsdWVfZ2FpbihwZGV2LCAmQVJHUih3YikubWFudWFsX2JsdWUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9BVVRPKSB7Ci0JCQkJcmV0ID0gcHdjX3JlYWRfcmVkX2dhaW4ocGRldiwgJkFSR1Iod2IpLnJlYWRfcmVkKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJYnJlYWs7Ci0JCQkJcmV0ID0gcHdjX3JlYWRfYmx1ZV9nYWluKHBkZXYsICZBUkdSKHdiKS5yZWFkX2JsdWUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQorCQlBUkdSKHdiKS5tb2RlID0gdjRsMl9jdHJsX2dfY3RybChwZGV2LT5hdXRvX3doaXRlX2JhbGFuY2UpOworCQlBUkdSKHdiKS5tYW51YWxfcmVkID0gQVJHUih3YikucmVhZF9yZWQgPQorCQkJcHdjX2lvY3RsX2dfY3RybChwZGV2LT5yZWRfYmFsYW5jZSk7CisJCUFSR1Iod2IpLm1hbnVhbF9ibHVlID0gQVJHUih3YikucmVhZF9ibHVlID0KKwkJCXB3Y19pb2N0bF9nX2N0cmwocGRldi0+Ymx1ZV9iYWxhbmNlKTsKIAkJQVJHX09VVCh3YikKIAkJYnJlYWs7CiAJfQpAQCAtMTU1MCwxNyArMTAwOCwyMCBAQAogCWNhc2UgVklESU9DUFdDU0NPTlRPVVI6CiAJewogCQlBUkdfREVGKGludCwgY29udG91cikKLQogCQlBUkdfSU4oY29udG91cikKLQkJcmV0ID0gcHdjX3NldF9jb250b3VyKHBkZXYsIEFSR1IoY29udG91cikpOworCQlyZXQgPSB2NGwyX2N0cmxfc19jdHJsKHBkZXYtPmF1dG9jb250b3VyLCBBUkdSKGNvbnRvdXIpIDwgMCk7CisJCWlmIChyZXQgPT0gMCAmJiBBUkdSKGNvbnRvdXIpID49IDApCisJCQlyZXQgPSBwd2NfaW9jdGxfc19jdHJsKHBkZXYtPmNvbnRvdXIsIEFSR1IoY29udG91cikpOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ1BXQ0dDT05UT1VSOgogCXsKIAkJQVJHX0RFRihpbnQsIGNvbnRvdXIpCi0KLQkJcmV0ID0gcHdjX2dldF9jb250b3VyKHBkZXYsIEFSR0EoY29udG91cikpOworCQlpZiAodjRsMl9jdHJsX2dfY3RybChwZGV2LT5hdXRvY29udG91cikpCisJCQlBUkdSKGNvbnRvdXIpID0gLTE7CisJCWVsc2UKKwkJCUFSR1IoY29udG91cikgPSBwd2NfaW9jdGxfZ19jdHJsKHBkZXYtPmNvbnRvdXIpOwogCQlBUkdfT1VUKGNvbnRvdXIpCiAJCWJyZWFrOwogCX0KQEAgLTE1NjgsMTcgKzEwMjksMTUgQEAKIAljYXNlIFZJRElPQ1BXQ1NCQUNLTElHSFQ6CiAJewogCQlBUkdfREVGKGludCwgYmFja2xpZ2h0KQotCiAJCUFSR19JTihiYWNrbGlnaHQpCi0JCXJldCA9IHB3Y19zZXRfYmFja2xpZ2h0KHBkZXYsIEFSR1IoYmFja2xpZ2h0KSk7CisJCXJldCA9IHY0bDJfY3RybF9zX2N0cmwocGRldi0+YmFja2xpZ2h0LCBBUkdSKGJhY2tsaWdodCkpOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ1BXQ0dCQUNLTElHSFQ6CiAJewogCQlBUkdfREVGKGludCwgYmFja2xpZ2h0KQotCi0JCXJldCA9IHB3Y19nZXRfYmFja2xpZ2h0KHBkZXYsIEFSR0EoYmFja2xpZ2h0KSk7CisJCUFSR1IoYmFja2xpZ2h0KSA9IHY0bDJfY3RybF9nX2N0cmwocGRldi0+YmFja2xpZ2h0KTsKIAkJQVJHX09VVChiYWNrbGlnaHQpCiAJCWJyZWFrOwogCX0KQEAgLTE1ODYsMTcgKzEwNDUsMTUgQEAKIAljYXNlIFZJRElPQ1BXQ1NGTElDS0VSOgogCXsKIAkJQVJHX0RFRihpbnQsIGZsaWNrZXIpCi0KIAkJQVJHX0lOKGZsaWNrZXIpCi0JCXJldCA9IHB3Y19zZXRfZmxpY2tlcihwZGV2LCBBUkdSKGZsaWNrZXIpKTsKKwkJcmV0ID0gdjRsMl9jdHJsX3NfY3RybChwZGV2LT5mbGlja2VyLCBBUkdSKGZsaWNrZXIpKTsKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBWSURJT0NQV0NHRkxJQ0tFUjoKIAl7CiAJCUFSR19ERUYoaW50LCBmbGlja2VyKQotCi0JCXJldCA9IHB3Y19nZXRfZmxpY2tlcihwZGV2LCBBUkdBKGZsaWNrZXIpKTsKKwkJQVJHUihmbGlja2VyKSA9IHY0bDJfY3RybF9nX2N0cmwocGRldi0+ZmxpY2tlcik7CiAJCUFSR19PVVQoZmxpY2tlcikKIAkJYnJlYWs7CiAJfQpAQCAtMTYwNCwxNyArMTA2MSwxNSBAQAogCWNhc2UgVklESU9DUFdDU0RZTk5PSVNFOgogCXsKIAkJQVJHX0RFRihpbnQsIGR5bm5vaXNlKQotCiAJCUFSR19JTihkeW5ub2lzZSkKLQkJcmV0ID0gcHdjX3NldF9keW5hbWljX25vaXNlKHBkZXYsIEFSR1IoZHlubm9pc2UpKTsKKwkJcmV0ID0gdjRsMl9jdHJsX3NfY3RybChwZGV2LT5ub2lzZV9yZWR1Y3Rpb24sIEFSR1IoZHlubm9pc2UpKTsKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBWSURJT0NQV0NHRFlOTk9JU0U6CiAJewogCQlBUkdfREVGKGludCwgZHlubm9pc2UpCi0KLQkJcmV0ID0gcHdjX2dldF9keW5hbWljX25vaXNlKHBkZXYsIEFSR0EoZHlubm9pc2UpKTsKKwkJQVJHUihkeW5ub2lzZSkgPSB2NGwyX2N0cmxfZ19jdHJsKHBkZXYtPm5vaXNlX3JlZHVjdGlvbik7CiAJCUFSR19PVVQoZHlubm9pc2UpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzEuYwppbmRleCBjMjk1OTNmLi5iZTBlMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1kZWMxLmMKQEAgLTIyLDI5ICsyMiwxOSBAQAogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCi0KLQotCiAjaW5jbHVkZSAicHdjLWRlYzEuaCIKIAotCi12b2lkIHB3Y19kZWMxX2luaXQoaW50IHR5cGUsIGludCByZWxlYXNlLCB2b2lkICpidWZmZXIsIHZvaWQgKnRhYmxlKQoraW50IHB3Y19kZWMxX2luaXQoc3RydWN0IHB3Y19kZXZpY2UgKnB3YywgaW50IHR5cGUsIGludCByZWxlYXNlLCB2b2lkICpidWZmZXIpCiB7CisJc3RydWN0IHB3Y19kZWMxX3ByaXZhdGUgKnBkZWM7CiAKLX0KKwlpZiAocHdjLT5kZWNvbXByZXNzX2RhdGEgPT0gTlVMTCkgeworCQlwZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBkZWMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlwd2MtPmRlY29tcHJlc3NfZGF0YSA9IHBkZWM7CisJfQorCXBkZWMgPSBwd2MtPmRlY29tcHJlc3NfZGF0YTsKIAotdm9pZCBwd2NfZGVjMV9leGl0KHZvaWQpCi17Ci0KLQotCi19Ci0KLWludCBwd2NfZGVjMV9hbGxvYyhzdHJ1Y3QgcHdjX2RldmljZSAqcHdjKQotewotCXB3Yy0+ZGVjb21wcmVzc19kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAocHdjLT5kZWNvbXByZXNzX2RhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1kZWMxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMS5oCmluZGV4IDhiNjJkZGMuLmE1N2Q4NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1kZWMxLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzEuaApAQCAtMjIsOCArMjIsNiBAQAogICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KIAotCi0KICNpZm5kZWYgUFdDX0RFQzFfSAogI2RlZmluZSBQV0NfREVDMV9ICiAKQEAgLTMyLDEyICszMCw4IEBACiBzdHJ1Y3QgcHdjX2RlYzFfcHJpdmF0ZQogewogCWludCB2ZXJzaW9uOwotCiB9OwogCi1pbnQgIHB3Y19kZWMxX2FsbG9jKHN0cnVjdCBwd2NfZGV2aWNlICpwd2MpOwotdm9pZCBwd2NfZGVjMV9pbml0KGludCB0eXBlLCBpbnQgcmVsZWFzZSwgdm9pZCAqYnVmZmVyLCB2b2lkICpwcml2YXRlX2RhdGEpOwotdm9pZCBwd2NfZGVjMV9leGl0KHZvaWQpOworaW50IHB3Y19kZWMxX2luaXQoc3RydWN0IHB3Y19kZXZpY2UgKnB3YywgaW50IHR5cGUsIGludCByZWxlYXNlLCB2b2lkICpidWZmZXIpOwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzIzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMjMuYwppbmRleCAwYzgwMWI4Li4wNmE0ZTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMjMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtZGVjMjMuYwpAQCAtOTE2LDI3ICs5MTYsNSBAQAogCQkJcG91dF9wbGFuYXJfdiArPSBwd2MtPnZpZXcueDsKIAogCQl9Ci0KIAl9Ci0KIH0KLQotdm9pZCBwd2NfZGVjMjNfZXhpdCh2b2lkKQotewotCS8qIERvIG5vdGhpbmcgKi8KLQotfQotCi0vKioKLSAqIEFsbG9jYXRlIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUgdXNlZCBieSBsb29rdXAgdGFibGUuCi0gKiBZb3UgbXVzdCBjYWxsIGtmcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZC4KLSAqLwotaW50IHB3Y19kZWMyM19hbGxvYyhzdHJ1Y3QgcHdjX2RldmljZSAqcHdjKQotewotCXB3Yy0+ZGVjb21wcmVzc19kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHB3Yy0+ZGVjb21wcmVzc19kYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotCi0vKiB2aW06IHNldCBjaW5vPSBmb3JtYXRvcHRpb25zPWNyb3FsIGNpbmRlbnQgc2hpZnR3aWR0aD04IHRhYnN0b3A9ODogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1kZWMyMy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzIzLmgKaW5kZXggMWM1NTI5OC4uYTBhYzRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzIzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWRlYzIzLmgKQEAgLTQ5LDE5ICs0OSw5IEBACiAKIH07CiAKLQotaW50IHB3Y19kZWMyM19hbGxvYyhzdHJ1Y3QgcHdjX2RldmljZSAqcHdjKTsKIGludCBwd2NfZGVjMjNfaW5pdChzdHJ1Y3QgcHdjX2RldmljZSAqcHdjLCBpbnQgdHlwZSwgdW5zaWduZWQgY2hhciAqY21kKTsKLXZvaWQgcHdjX2RlYzIzX2V4aXQodm9pZCk7CiB2b2lkIHB3Y19kZWMyM19kZWNvbXByZXNzKGNvbnN0IHN0cnVjdCBwd2NfZGV2aWNlICpwd2MsCiAJCQkgIGNvbnN0IHZvaWQgKnNyYywKIAkJCSAgdm9pZCAqZHN0LAogCQkJICBpbnQgZmxhZ3MpOwotCi0KLQogI2VuZGlmCi0KLQotLyogdmltOiBzZXQgY2lubz0gZm9ybWF0b3B0aW9ucz1jcm9xbCBjaW5kZW50IHNoaWZ0d2lkdGg9OCB0YWJzdG9wPTg6ICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggYjBiZGU1YS4uNTFjYTM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTIsNiArMiw3IEBACiAgICBVU0IgYW5kIFZpZGVvNExpbnV4IGludGVyZmFjZSBwYXJ0LgogICAgKEMpIDE5OTktMjAwNCBOZW1vc29mdCBVbnYuCiAgICAoQykgMjAwNC0yMDA2IEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKyAgIChDKSAyMDExIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAKICAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAogICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCkBAIC03NCw3ICs3NSw2IEBACiAjaW5jbHVkZSAicHdjLXRpbW9uLmgiCiAjaW5jbHVkZSAicHdjLWRlYzIzLmgiCiAjaW5jbHVkZSAicHdjLWRlYzEuaCIKLSNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBkcml2ZXIgdGVtcGxhdGVzICovCiAKQEAgLTExNiw2ICsxMTYsNyBAQAogCiBzdGF0aWMgaW50IHVzYl9wd2NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCB1c2JfcHdjX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIHZvaWQgcHdjX2lzb2NfY2xlYW51cChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwd2NfZHJpdmVyID0gewogCS5uYW1lID0JCQkiUGhpbGlwcyB3ZWJjYW0iLAkvKiBuYW1lICovCkBAIC0xMjcsMTQgKzEyOCwxMSBAQAogI2RlZmluZSBNQVhfREVWX0hJTlRTCTIwCiAjZGVmaW5lIE1BWF9JU09DX0VSUk9SUwkyMAogCi1zdGF0aWMgaW50IGRlZmF1bHRfc2l6ZSA9IFBTWl9RQ0lGOwogc3RhdGljIGludCBkZWZhdWx0X2ZwcyA9IDEwOwotc3RhdGljIGludCBkZWZhdWx0X2ZidWZzID0gMzsgICAvKiBEZWZhdWx0IG51bWJlciBvZiBmcmFtZSBidWZmZXJzICovCi0JaW50IHB3Y19tYnVmcyA9IDI7CS8qIERlZmF1bHQgbnVtYmVyIG9mIG1tYXAoKSBidWZmZXJzICovCiAjaWZkZWYgQ09ORklHX1VTQl9QV0NfREVCVUcKIAlpbnQgcHdjX3RyYWNlID0gUFdDX0RFQlVHX0xFVkVMOwogI2VuZGlmCi1zdGF0aWMgaW50IHBvd2VyX3NhdmU7CitzdGF0aWMgaW50IHBvd2VyX3NhdmUgPSAtMTsKIHN0YXRpYyBpbnQgbGVkX29uID0gMTAwLCBsZWRfb2ZmOyAvKiBkZWZhdWx0cyB0byBMRUQgdGhhdCBpcyBvbiB3aGlsZSBpbiB1c2UgKi8KIHN0YXRpYyBpbnQgcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbiA9IDE7IC8qIDAuLjMgPSB1bmNvbXByZXNzZWQuLmhpZ2ggKi8KIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTczLDM4OSArMTcxLDIwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIAotLyogSGVyZSB3ZSB3YW50IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkuCi0gKiBUaGlzIGlzIHVzZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhcmVhLgotICovCi0KLQotCi1zdGF0aWMgdm9pZCAqcHdjX3J2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0cnVjdCBwd2NfZnJhbWVfYnVmICpwd2NfZ2V0X25leHRfZmlsbF9idWYoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCiB7Ci0Jdm9pZCAqIG1lbTsKLQl1bnNpZ25lZCBsb25nIGFkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqYnVmID0gTlVMTDsKIAotCW1lbT12bWFsbG9jXzMyKHNpemUpOwotCWlmICghbWVtKQotCQlyZXR1cm4gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cXVldWVkX2J1ZnNfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZwZGV2LT5xdWV1ZWRfYnVmcykpCisJCWdvdG8gbGVhdmU7CiAKLQltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KLQlhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApCi0JIHsKLQkgICBTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7Ci0JICAgYWRyICArPSBQQUdFX1NJWkU7Ci0JICAgc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JIH0KLQlyZXR1cm4gbWVtOwotfQotCi1zdGF0aWMgdm9pZCBwd2NfcnZmcmVlKHZvaWQgKiBtZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCWlmICghbWVtKQotCQlyZXR1cm47Ci0KLQlhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKLQl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKQotCSB7Ci0JICAgQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7Ci0JICAgYWRyICArPSBQQUdFX1NJWkU7Ci0JICAgc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JIH0KLQl2ZnJlZShtZW0pOwotfQotCi0KLQotCi1zdGF0aWMgaW50IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQotewotCWludCBpLCBlcnI7Ci0Jdm9pZCAqa2J1ZjsKLQotCVBXQ19ERUJVR19NRU1PUlkoIj4+IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYgPSAweCVwKVxuIiwgcGRldik7Ci0KLQlpZiAocGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOwotCi0JLyogQWxsb2NhdGUgSXNvY2hyb251b3VzIHBpcGUgYnVmZmVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewotCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhID09IE5VTEwpIHsKLQkJCWtidWYgPSBremFsbG9jKElTT19CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoa2J1ZiA9PSBOVUxMKSB7Ci0JCQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgaXNvIGJ1ZmZlciAlZC5cbiIsIGkpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJUFdDX0RFQlVHX01FTU9SWSgiQWxsb2NhdGVkIGlzbyBidWZmZXIgYXQgJXAuXG4iLCBrYnVmKTsKLQkJCXBkZXYtPnNidWZbaV0uZGF0YSA9IGtidWY7Ci0JCX0KLQl9Ci0KLQkvKiBBbGxvY2F0ZSBmcmFtZSBidWZmZXIgc3RydWN0dXJlICovCi0JaWYgKHBkZXYtPmZidWYgPT0gTlVMTCkgewotCQlrYnVmID0ga3phbGxvYyhkZWZhdWx0X2ZidWZzICogc2l6ZW9mKHN0cnVjdCBwd2NfZnJhbWVfYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChrYnVmID09IE5VTEwpIHsKLQkJCVBXQ19FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUuXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCVBXQ19ERUJVR19NRU1PUlkoIkFsbG9jYXRlZCBmcmFtZSBidWZmZXIgc3RydWN0dXJlIGF0ICVwLlxuIiwga2J1Zik7Ci0JCXBkZXYtPmZidWYgPSBrYnVmOwotCX0KLQotCS8qIGNyZWF0ZSBmcmFtZSBidWZmZXJzLCBhbmQgbWFrZSBjaXJjdWxhciByaW5nICovCi0JZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgewotCQlpZiAocGRldi0+ZmJ1ZltpXS5kYXRhID09IE5VTEwpIHsKLQkJCWtidWYgPSB2emFsbG9jKFBXQ19GUkFNRV9TSVpFKTsgLyogbmVlZCB2bWFsbG9jIHNpbmNlIGZyYW1lIGJ1ZmZlciA+IDEyOEsgKi8KLQkJCWlmIChrYnVmID09IE5VTEwpIHsKLQkJCQlQV0NfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZSBidWZmZXIgJWQuXG4iLCBpKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJCVBXQ19ERUJVR19NRU1PUlkoIkFsbG9jYXRlZCBmcmFtZSBidWZmZXIgJWQgYXQgJXAuXG4iLCBpLCBrYnVmKTsKLQkJCXBkZXYtPmZidWZbaV0uZGF0YSA9IGtidWY7Ci0JCX0KLQl9Ci0KLQkvKiBBbGxvY2F0ZSBkZWNvbXByZXNzb3IgdGFibGUgc3BhY2UgKi8KLQlpZiAoREVWSUNFX1VTRV9DT0RFQzEocGRldi0+dHlwZSkpCi0JCWVyciA9IHB3Y19kZWMxX2FsbG9jKHBkZXYpOwotCWVsc2UKLQkJZXJyID0gcHdjX2RlYzIzX2FsbG9jKHBkZXYpOwotCi0JaWYgKGVycikgewotCQlQV0NfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBkZWNvbXByZXNzIHRhYmxlLlxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogQWxsb2NhdGUgaW1hZ2UgYnVmZmVyOyBkb3VibGUgYnVmZmVyIGZvciBtbWFwKCkgKi8KLQlrYnVmID0gcHdjX3J2bWFsbG9jKHB3Y19tYnVmcyAqIHBkZXYtPmxlbl9wZXJfaW1hZ2UpOwotCWlmIChrYnVmID09IE5VTEwpIHsKLQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UgYnVmZmVyKHMpLiBuZWVkZWQgKCVkKVxuIiwKLQkJCQlwd2NfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCVBXQ19ERUJVR19NRU1PUlkoIkFsbG9jYXRlZCBpbWFnZSBidWZmZXIgYXQgJXAuXG4iLCBrYnVmKTsKLQlwZGV2LT5pbWFnZV9kYXRhID0ga2J1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgcHdjX21idWZzOyBpKyspIHsKLQkJcGRldi0+aW1hZ2VzW2ldLm9mZnNldCA9IGkgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOwotCQlwZGV2LT5pbWFnZXNbaV0udm1hX3VzZV9jb3VudCA9IDA7Ci0JfQotCWZvciAoOyBpIDwgTUFYX0lNQUdFUzsgaSsrKSB7Ci0JCXBkZXYtPmltYWdlc1tpXS5vZmZzZXQgPSAwOwotCX0KLQotCWtidWYgPSBOVUxMOwotCi0JUFdDX0RFQlVHX01FTU9SWSgiPDwgcHdjX2FsbG9jYXRlX2J1ZmZlcnMoKVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHB3Y19mcmVlX2J1ZmZlcnMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JaW50IGk7Ci0KLQlQV0NfREVCVUdfTUVNT1JZKCJFbnRlcmluZyBmcmVlX2J1ZmZlcnMoJXApLlxuIiwgcGRldik7Ci0KLQlpZiAocGRldiA9PSBOVUxMKQotCQlyZXR1cm47Ci0JLyogUmVsZWFzZSBJc28tcGlwZSBidWZmZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKQotCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhICE9IE5VTEwpIHsKLQkJCVBXQ19ERUJVR19NRU1PUlkoIkZyZWVpbmcgSVNPIGJ1ZmZlciBhdCAlcC5cbiIsIHBkZXYtPnNidWZbaV0uZGF0YSk7Ci0JCQlrZnJlZShwZGV2LT5zYnVmW2ldLmRhdGEpOwotCQkJcGRldi0+c2J1ZltpXS5kYXRhID0gTlVMTDsKLQkJfQotCi0JLyogVGhlIHNhbWUgZm9yIGZyYW1lIGJ1ZmZlcnMgKi8KLQlpZiAocGRldi0+ZmJ1ZiAhPSBOVUxMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X2ZidWZzOyBpKyspIHsKLQkJCWlmIChwZGV2LT5mYnVmW2ldLmRhdGEgIT0gTlVMTCkgewotCQkJCVBXQ19ERUJVR19NRU1PUlkoIkZyZWVpbmcgZnJhbWUgYnVmZmVyICVkIGF0ICVwLlxuIiwgaSwgcGRldi0+ZmJ1ZltpXS5kYXRhKTsKLQkJCQl2ZnJlZShwZGV2LT5mYnVmW2ldLmRhdGEpOwotCQkJCXBkZXYtPmZidWZbaV0uZGF0YSA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUocGRldi0+ZmJ1Zik7Ci0JCXBkZXYtPmZidWYgPSBOVUxMOwotCX0KLQotCS8qIEludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlciAmIHRhYmxlcyAqLwotCWlmIChwZGV2LT5kZWNvbXByZXNzX2RhdGEgIT0gTlVMTCkgewotCQlQV0NfREVCVUdfTUVNT1JZKCJGcmVlaW5nIGRlY29tcHJlc3Npb24gYnVmZmVyIGF0ICVwLlxuIiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKLQkJa2ZyZWUocGRldi0+ZGVjb21wcmVzc19kYXRhKTsKLQkJcGRldi0+ZGVjb21wcmVzc19kYXRhID0gTlVMTDsKLQl9Ci0KLQkvKiBSZWxlYXNlIGltYWdlIGJ1ZmZlcnMgKi8KLQlpZiAocGRldi0+aW1hZ2VfZGF0YSAhPSBOVUxMKSB7Ci0JCVBXQ19ERUJVR19NRU1PUlkoIkZyZWVpbmcgaW1hZ2UgYnVmZmVyIGF0ICVwLlxuIiwgcGRldi0+aW1hZ2VfZGF0YSk7Ci0JCXB3Y19ydmZyZWUocGRldi0+aW1hZ2VfZGF0YSwgcHdjX21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7Ci0JfQotCXBkZXYtPmltYWdlX2RhdGEgPSBOVUxMOwotCi0JUFdDX0RFQlVHX01FTU9SWSgiTGVhdmluZyBmcmVlX2J1ZmZlcnMoKS5cbiIpOwotfQotCi0vKiBUaGUgZnJhbWUgJiBpbWFnZSBidWZmZXIgbWVzcy4KLQotICAgWWVzLCB0aGlzIGlzIGEgbWVzcy4gV2VsbCwgaXQgdXNlZCB0byBiZSBzaW1wbGUsIGJ1dCBhbGFzLi4uICBJbiB0aGlzCi0gICBtb2R1bGUsIDMgYnVmZmVycyBzY2hlbWVzIGFyZSB1c2VkIHRvIGdldCB0aGUgZGF0YSBmcm9tIHRoZSBVU0IgYnVzIHRvCi0gICB0aGUgdXNlciBwcm9ncmFtLiBUaGUgZmlyc3Qgc2NoZW1lIGludm9sdmVzIHRoZSBJU08gYnVmZmVycyAoY2FsbGVkIHRodXMKLSAgIHNpbmNlIHRoZXkgdHJhbnNwb3J0IElTTyBkYXRhIGZyb20gdGhlIFVTQiBjb250cm9sbGVyKSwgYW5kIG5vdCByZWFsbHkKLSAgIGludGVyZXN0aW5nLiBTdWZmaWNlcyB0byBzYXkgdGhlIGRhdGEgZnJvbSB0aGlzIGJ1ZmZlciBpcyBxdWlja2x5Ci0gICBnYXRoZXJlZCBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciAocHdjX2lzb2NfaGFuZGxlcikgYW5kIHBsYWNlZCBpbnRvIHRoZQotICAgZnJhbWUgYnVmZmVyLgotCi0gICBUaGUgZnJhbWUgYnVmZmVyIGlzIHRoZSBzZWNvbmQgc2NoZW1lLCBhbmQgaXMgdGhlIGNlbnRyYWwgZWxlbWVudCBoZXJlLgotICAgSXQgY29sbGVjdHMgdGhlIGRhdGEgZnJvbSBhIHNpbmdsZSBmcmFtZSBmcm9tIHRoZSBjYW1lcmEgKGhlbmNlLCB0aGUKLSAgIG5hbWUpLiBGcmFtZXMgYXJlIGRlbGltaXRlZCBieSB0aGUgVVNCIGNhbWVyYSB3aXRoIGEgc2hvcnQgVVNCIHBhY2tldCwKLSAgIHNvIHRoYXQncyBlYXN5IHRvIGRldGVjdC4gVGhlIGZyYW1lIGJ1ZmZlcnMgZm9ybSBhIGxpc3QgdGhhdCBpcyBmaWxsZWQKLSAgIGJ5IHRoZSBjYW1lcmErVVNCIGNvbnRyb2xsZXIgYW5kIGRyYWluZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyB0aHJvdWdoCi0gICBlaXRoZXIgcmVhZCgpIG9yIG1tYXAoKS4KLQotICAgVGhlIGltYWdlIGJ1ZmZlciBpcyB0aGUgdGhpcmQgc2NoZW1lLCBpbiB3aGljaCBmcmFtZXMgYXJlIGRlY29tcHJlc3NlZAotICAgYW5kIGNvbnZlcnRlZCBpbnRvIHBsYW5hciBmb3JtYXQuIEZvciBtbWFwKCkgdGhlcmUgaXMgbW9yZSB0aGFuCi0gICBvbmUgaW1hZ2UgYnVmZmVyIGF2YWlsYWJsZS4KLQotICAgVGhlIGZyYW1lIGJ1ZmZlcnMgcHJvdmlkZSB0aGUgaW1hZ2UgYnVmZmVyaW5nLiBJbiBjYXNlIHRoZSB1c2VyIHByb2Nlc3MKLSAgIGlzIGEgYml0IHNsb3csIHRoaXMgaW50cm9kdWNlcyBsYWcgYW5kIHNvbWUgdW5kZXNpcmVkIHNpZGUtZWZmZWN0cy4KLSAgIFRoZSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoZSBmcmFtZSBidWZmZXIgaXMgZnVsbC4gSSB1c2VkIHRvIGRyb3AgdGhlIGxhc3QKLSAgIGZyYW1lLCB3aGljaCBtYWtlcyB0aGUgZGF0YSBpbiB0aGUgcXVldWUgc3RhbGUgdmVyeSBxdWlja2x5LiBCdXQgZHJvcHBpbmcKLSAgIHRoZSBmcmFtZSBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgcHJvdmVkIHRvIGJlIGEgbGl0dGUgYml0IG1vcmUgZGlmZmljdWx0LgotICAgSSB0cmllZCBhIGNpcmN1bGFyIGxpbmtlZCBzY2hlbWUsIGJ1dCB0aGlzIGludHJvZHVjZWQgbW9yZSBwcm9ibGVtcyB0aGFuCi0gICBpdCBzb2x2ZWQuCi0KLSAgIEJlY2F1c2UgZmlsbGluZyBhbmQgZHJhaW5pbmcgYXJlIGNvbXBsZXRlbHkgYXN5bmNocm9ub3VzIHByb2Nlc3NlcywgdGhpcwotICAgcmVxdWlyZXMgc29tZSBmaWRkbGluZyB3aXRoIHBvaW50ZXJzIGFuZCBtdXRleGVzLgotCi0gICBFdmVudHVhbGx5LCBJIGNhbWUgdXAgd2l0aCBhIHN5c3RlbSB3aXRoIDIgbGlzdHM6IGFuICdlbXB0eScgZnJhbWUgbGlzdAotICAgYW5kIGEgJ2Z1bGwnIGZyYW1lIGxpc3Q6Ci0gICAgICogSW5pdGlhbGx5LCBhbGwgZnJhbWUgYnVmZmVycyBidXQgb25lIGFyZSBvbiB0aGUgJ2VtcHR5JyBsaXN0OyB0aGUgb25lCi0gICAgICAgcmVtYWluaW5nIGJ1ZmZlciBpcyBvdXIgaW5pdGlhbCBmaWxsIGZyYW1lLgotICAgICAqIElmIGEgZnJhbWUgaXMgbmVlZGVkIGZvciBmaWxsaW5nLCB3ZSB0cnkgdG8gdGFrZSBpdCBmcm9tIHRoZSAnZW1wdHknCi0gICAgICAgbGlzdCwgdW5sZXNzIHRoYXQgbGlzdCBpcyBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZSB0YWtlIHRoZSBidWZmZXIgYXQKLSAgICAgICB0aGUgaGVhZCBvZiB0aGUgJ2Z1bGwnIGxpc3QuCi0gICAgICogV2hlbiBvdXIgZmlsbCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkLCBpdCBpcyBhcHBlbmRlZCB0byB0aGUgJ2Z1bGwnCi0gICAgICAgbGlzdC4KLSAgICAgKiBJZiBhIGZyYW1lIGlzIG5lZWRlZCBieSByZWFkKCkgb3IgbW1hcCgpLCBpdCBpcyB0YWtlbiBmcm9tIHRoZSBoZWFkIG9mCi0gICAgICAgdGhlICdmdWxsJyBsaXN0LCBoYW5kbGVkLCBhbmQgdGhlbiBhcHBlbmRlZCB0byB0aGUgJ2VtcHR5JyBsaXN0LiBJZiBubwotICAgICAgIGJ1ZmZlciBpcyBwcmVzZW50IG9uIHRoZSAnZnVsbCcgbGlzdCwgd2Ugd2FpdC4KLSAgIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRlY29tcHJlc3NlZC8KLSAgIGNvbnZlcnRlZCwgaXMgb24gbmVpdGhlciBsaXN0LCBhbmQgdGh1cyBub3QgaW4gb3VyIHdheSAoYW55IG90aGVyIHNjaGVtZQotICAgSSB0cmllZCBoYWQgdGhlIHByb2JsZW0gb2Ygb2xkIGRhdGEgbGluZ2VyaW5nIGluIHRoZSBxdWV1ZSkuCi0KLSAgIFdoYXRldmVyIHN0cmF0ZWd5IHlvdSBjaG9vc2UsIGl0IGFsd2F5cyByZW1haW5zIGEgdHJhZGVvZmY6IHdpdGggbW9yZQotICAgZnJhbWUgYnVmZmVycyB0aGUgY2hhbmNlcyBvZiBhIG1pc3NlZCBmcmFtZSBhcmUgcmVkdWNlZC4gT24gdGhlIG90aGVyCi0gICBoYW5kLCBvbiBzbG93ZXIgbWFjaGluZXMgaXQgaW50cm9kdWNlcyBsYWcgYmVjYXVzZSB0aGUgcXVldWUgd2lsbAotICAgYWx3YXlzIGJlIGZ1bGwuCi0gKi8KLQotLyoqCi0gIFxicmllZiBGaW5kIG5leHQgZnJhbWUgYnVmZmVyIHRvIGZpbGwuIFRha2UgZnJvbSBlbXB0eSBvciBmdWxsIGxpc3QsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KLSAqLwotc3RhdGljIGludCBwd2NfbmV4dF9maWxsX2ZyYW1lKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXJldCA9IDA7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKLQlpZiAocGRldi0+ZmlsbF9mcmFtZSAhPSBOVUxMKSB7Ci0JCS8qIGFwcGVuZCB0byAnZnVsbCcgbGlzdCAqLwotCQlpZiAocGRldi0+ZnVsbF9mcmFtZXMgPT0gTlVMTCkgewotCQkJcGRldi0+ZnVsbF9mcmFtZXMgPSBwZGV2LT5maWxsX2ZyYW1lOwotCQkJcGRldi0+ZnVsbF9mcmFtZXNfdGFpbCA9IHBkZXYtPmZ1bGxfZnJhbWVzOwotCQl9Ci0JCWVsc2UgewotCQkJcGRldi0+ZnVsbF9mcmFtZXNfdGFpbC0+bmV4dCA9IHBkZXYtPmZpbGxfZnJhbWU7Ci0JCQlwZGV2LT5mdWxsX2ZyYW1lc190YWlsID0gcGRldi0+ZmlsbF9mcmFtZTsKLQkJfQotCX0KLQlpZiAocGRldi0+ZW1wdHlfZnJhbWVzICE9IE5VTEwpIHsKLQkJLyogV2UgaGF2ZSBlbXB0eSBmcmFtZXMgYXZhaWxhYmxlLiBUaGF0J3MgZWFzeSAqLwotCQlwZGV2LT5maWxsX2ZyYW1lID0gcGRldi0+ZW1wdHlfZnJhbWVzOwotCQlwZGV2LT5lbXB0eV9mcmFtZXMgPSBwZGV2LT5lbXB0eV9mcmFtZXMtPm5leHQ7Ci0JfQotCWVsc2UgewotCQkvKiBIbW0uIFRha2UgaXQgZnJvbSB0aGUgZnVsbCBsaXN0ICovCi0JCS8qIHNhbml0eSBjaGVjayAqLwotCQlpZiAocGRldi0+ZnVsbF9mcmFtZXMgPT0gTlVMTCkgewotCQkJUFdDX0VSUk9SKCJOZWl0aGVyIGVtcHR5IG9yIGZ1bGwgZnJhbWVzIGF2YWlsYWJsZSFcbiIpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmZ1bGxfZnJhbWVzOwotCQlwZGV2LT5mdWxsX2ZyYW1lcyA9IHBkZXYtPmZ1bGxfZnJhbWVzLT5uZXh0OwotCQlyZXQgPSAxOwotCX0KLQlwZGV2LT5maWxsX2ZyYW1lLT5uZXh0ID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAgXGJyaWVmIFJlc2V0IGFsbCBidWZmZXJzLCBwb2ludGVycyBhbmQgbGlzdHMsIGV4Y2VwdCBmb3IgdGhlIGltYWdlX3VzZWRbXSBidWZmZXIuCi0KLSAgSWYgdGhlIGltYWdlX3VzZWRbXSBidWZmZXIgaXMgY2xlYXJlZCB0b28sIG1tYXAoKS9WSURJT0NTWU5DIHdpbGwgcnVuIGludG8gdHJvdWJsZS4KLSAqLwotc3RhdGljIHZvaWQgcHdjX3Jlc2V0X2J1ZmZlcnMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVBXQ19ERUJVR19NRU1PUlkoIj4+ICVzIF9fZW50ZXJfX1xuIiwgX19mdW5jX18pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKLQlwZGV2LT5mdWxsX2ZyYW1lcyA9IE5VTEw7Ci0JcGRldi0+ZnVsbF9mcmFtZXNfdGFpbCA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgewotCQlwZGV2LT5mYnVmW2ldLmZpbGxlZCA9IDA7Ci0JCWlmIChpID4gMCkKLQkJCXBkZXYtPmZidWZbaV0ubmV4dCA9ICZwZGV2LT5mYnVmW2kgLSAxXTsKLQkJZWxzZQotCQkJcGRldi0+ZmJ1Zi0+bmV4dCA9IE5VTEw7Ci0JfQotCXBkZXYtPmVtcHR5X2ZyYW1lcyA9ICZwZGV2LT5mYnVmW2RlZmF1bHRfZmJ1ZnMgLSAxXTsKLQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPmZidWY7Ci0JcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7Ci0JcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmVtcHR5X2ZyYW1lczsKLQlwZGV2LT5lbXB0eV9mcmFtZXMgPSBwZGV2LT5lbXB0eV9mcmFtZXMtPm5leHQ7Ci0KLQlwZGV2LT5pbWFnZV9yZWFkX3BvcyA9IDA7Ci0JcGRldi0+ZmlsbF9pbWFnZSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOwotCi0JUFdDX0RFQlVHX01FTU9SWSgiPDwgJXMgX19sZWF2aW5nX19cbiIsIF9fZnVuY19fKTsKLX0KLQotCi0vKioKLSAgXGJyaWVmIERvIGFsbCB0aGUgaGFuZGxpbmcgZm9yIGdldHRpbmcgb25lIGZyYW1lOiBnZXQgcG9pbnRlciwgZGVjb21wcmVzcywgYWR2YW5jZSBwb2ludGVycy4KLSAqLwotaW50IHB3Y19oYW5kbGVfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7Ci0JLyogRmlyc3QgZ3JhYiBvdXIgcmVhZF9mcmFtZTsgdGhpcyBpcyByZW1vdmVkIGZyb20gYWxsIGxpc3RzLCBzbwotCSAgIHdlIGNhbiByZWxlYXNlIHRoZSBsb2NrIGFmdGVyIHRoaXMgd2l0aG91dCBwcm9ibGVtcyAqLwotCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKLQkJLyogVGhpcyBjYW4ndCB0aGVvcmV0aWNhbGx5IGhhcHBlbiAqLwotCQlQV0NfRVJST1IoIkh1aD8gUmVhZCBmcmFtZSBzdGlsbCBpbiB1c2U/XG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JaWYgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKLQkJUFdDX0VSUk9SKCJXb29wcy4gTm8gZnJhbWVzIHJlYWR5LlxuIik7Ci0JfQotCWVsc2UgewotCQlwZGV2LT5yZWFkX2ZyYW1lID0gcGRldi0+ZnVsbF9mcmFtZXM7Ci0JCXBkZXYtPmZ1bGxfZnJhbWVzID0gcGRldi0+ZnVsbF9mcmFtZXMtPm5leHQ7Ci0JCXBkZXYtPnJlYWRfZnJhbWUtPm5leHQgPSBOVUxMOwotCX0KLQotCWlmIChwZGV2LT5yZWFkX2ZyYW1lICE9IE5VTEwpIHsKLQkJLyogRGVjb21wcmVzc2lvbiBpcyBhIGxlbmd0aHkgcHJvY2Vzcywgc28gaXQncyBvdXRzaWRlIG9mIHRoZSBsb2NrLgotCQkgICBUaGlzIGdpdmVzIHRoZSBpc29jX2hhbmRsZXIgdGhlIG9wcG9ydHVuaXR5IHRvIGZpbGwgbW9yZSBmcmFtZXMKLQkJICAgaW4gdGhlIG1lYW4gdGltZS4KLQkJKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOwotCQlyZXQgPSBwd2NfZGVjb21wcmVzcyhwZGV2KTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKLQotCQkvKiBXZSdyZSBkb25lIHdpdGggcmVhZF9idWZmZXIsIHRhY2sgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZW1wdHkgYnVmZmVyIGxpc3QgKi8KLQkJaWYgKHBkZXYtPmVtcHR5X2ZyYW1lcyA9PSBOVUxMKSB7Ci0JCQlwZGV2LT5lbXB0eV9mcmFtZXMgPSBwZGV2LT5yZWFkX2ZyYW1lOwotCQkJcGRldi0+ZW1wdHlfZnJhbWVzX3RhaWwgPSBwZGV2LT5lbXB0eV9mcmFtZXM7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbC0+bmV4dCA9IHBkZXYtPnJlYWRfZnJhbWU7Ci0JCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPnJlYWRfZnJhbWU7Ci0JCX0KLQkJcGRldi0+cmVhZF9mcmFtZSA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAgXGJyaWVmIEFkdmFuY2UgcG9pbnRlcnMgb2YgaW1hZ2UgYnVmZmVyIChhZnRlciBlYWNoIHVzZXIgcmVxdWVzdCkKLSovCi12b2lkIHB3Y19uZXh0X2ltYWdlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQotewotCXBkZXYtPmltYWdlX3VzZWRbcGRldi0+ZmlsbF9pbWFnZV0gPSAwOwotCXBkZXYtPmZpbGxfaW1hZ2UgPSAocGRldi0+ZmlsbF9pbWFnZSArIDEpICUgcHdjX21idWZzOwotfQotCi0vKioKLSAqIFByaW50IGRlYnVnIGluZm9ybWF0aW9uIHdoZW4gYSBmcmFtZSBpcyBkaXNjYXJkZWQgYmVjYXVzZSBhbGwgb2Ygb3VyIGJ1ZmZlcgotICogaXMgZnVsbAotICovCi1zdGF0aWMgdm9pZCBwd2NfZnJhbWVfZHVtcGVkKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQotewotCXBkZXYtPnZmcmFtZXNfZHVtcGVkKys7Ci0JaWYgKHBkZXYtPnZmcmFtZV9jb3VudCA8IEZSQU1FX0xPV01BUkspCi0JCXJldHVybjsKLQotCWlmIChwZGV2LT52ZnJhbWVzX2R1bXBlZCA8IDIwKQotCQlQV0NfREVCVUdfRkxPVygiRHVtcGluZyBmcmFtZSAlZFxuIiwgcGRldi0+dmZyYW1lX2NvdW50KTsKLQllbHNlIGlmIChwZGV2LT52ZnJhbWVzX2R1bXBlZCA9PSAyMCkKLQkJUFdDX0RFQlVHX0ZMT1coIkR1bXBpbmcgZnJhbWUgJWQgKGxhc3QgbWVzc2FnZSlcbiIsCi0JCQkJcGRldi0+dmZyYW1lX2NvdW50KTsKKwlidWYgPSBsaXN0X2VudHJ5KHBkZXYtPnF1ZXVlZF9idWZzLm5leHQsIHN0cnVjdCBwd2NfZnJhbWVfYnVmLCBsaXN0KTsKKwlsaXN0X2RlbCgmYnVmLT5saXN0KTsKK2xlYXZlOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gYnVmOwogfQogCiBzdGF0aWMgdm9pZCBwd2Nfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZG93bikKQEAgLTU3NSw5ICsyMDQsOSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgcHdjX3Jjdl9zaG9ydF9wYWNrZXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGNvbnN0IHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmKQorc3RhdGljIHZvaWQgcHdjX2ZyYW1lX2NvbXBsZXRlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQogewotCWludCBhd2FrZSA9IDA7CisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWYgPSBwZGV2LT5maWxsX2J1ZjsKIAogCS8qIFRoZSBUb1VDYW0gRnVuIENNT1Mgc2Vuc29yIGNhdXNlcyB0aGUgZmlybXdhcmUgdG8gc2VuZCAyIG9yIDMgYm9ndXMKIAkgICBmcmFtZXMgb24gdGhlIFVTQiB3aXJlIGFmdGVyIGFuIGV4cG9zdXJlIGNoYW5nZS4gVGhpcyBjb25kaXRpdGlvbiBpcwpAQCAtNTg5LDcgKzIxOCw2IEBACiAJCWlmIChwdHJbMV0gPT0gMSAmJiBwdHJbMF0gJiAweDEwKSB7CiAJCQlQV0NfVFJBQ0UoIkh5dW5kYWkgQ01PUyBzZW5zb3IgYnVnLiBEcm9wcGluZyBmcmFtZS5cbiIpOwogCQkJcGRldi0+ZHJvcF9mcmFtZXMgKz0gMjsKLQkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKIAkJfQogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewogCQkJcHdjX3NuYXBzaG90X2J1dHRvbihwZGV2LCBwdHJbMF0gJiAweDAxKTsKQEAgLTYxMiw4ICsyNDAsNyBAQAogCQkgICAqLwogCQlpZiAoZmJ1Zi0+ZmlsbGVkID09IDQpCiAJCQlwZGV2LT5kcm9wX2ZyYW1lcysrOwotCX0KLQllbHNlIGlmIChwZGV2LT50eXBlID09IDc0MCB8fCBwZGV2LT50eXBlID09IDcyMCkgeworCX0gZWxzZSBpZiAocGRldi0+dHlwZSA9PSA3NDAgfHwgcGRldi0+dHlwZSA9PSA3MjApIHsKIAkJdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilmYnVmLT5kYXRhOwogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewogCQkJcHdjX3NuYXBzaG90X2J1dHRvbihwZGV2LCBwdHJbMF0gJiAweDAxKTsKQEAgLTYyMSwzMyArMjQ4LDIzIEBACiAJCXBkZXYtPnZtaXJyb3IgPSBwdHJbMF0gJiAweDAzOwogCX0KIAotCS8qIEluIGNhc2Ugd2Ugd2VyZSBpbnN0cnVjdGVkIHRvIGRyb3AgdGhlIGZyYW1lLCBkbyBzbyBzaWxlbnRseS4KLQkgICBUaGUgYnVmZmVyIHBvaW50ZXJzIGFyZSBub3QgdXBkYXRlZCBlaXRoZXIgKGJ1dCB0aGUgY291bnRlcnMgYXJlIHJlc2V0IGJlbG93KS4KLQkgICAqLwotCWlmIChwZGV2LT5kcm9wX2ZyYW1lcyA+IDApCisJLyogSW4gY2FzZSB3ZSB3ZXJlIGluc3RydWN0ZWQgdG8gZHJvcCB0aGUgZnJhbWUsIGRvIHNvIHNpbGVudGx5LiAqLworCWlmIChwZGV2LT5kcm9wX2ZyYW1lcyA+IDApIHsKIAkJcGRldi0+ZHJvcF9mcmFtZXMtLTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBDaGVjayBmb3IgdW5kZXJmbG93IGZpcnN0ICovCiAJCWlmIChmYnVmLT5maWxsZWQgPCBwZGV2LT5mcmFtZV90b3RhbF9zaXplKSB7CiAJCQlQV0NfREVCVUdfRkxPVygiRnJhbWUgYnVmZmVyIHVuZGVyZmxvdyAoJWQgYnl0ZXMpOyIKIAkJCQkgICAgICAgIiBkaXNjYXJkZWQuXG4iLCBmYnVmLT5maWxsZWQpOwotCQkJcGRldi0+dmZyYW1lc19lcnJvcisrOwotCQl9Ci0JCWVsc2UgewotCQkJLyogU2VuZCBvbmx5IG9uY2UgcGVyIEVPRiAqLwotCQkJYXdha2UgPSAxOyAvKiBkZWxheSB3YWtlX3VwcyAqLwotCi0JCQkvKiBGaW5kIG91ciBuZXh0IGZyYW1lIHRvIGZpbGwuIFRoaXMgd2lsbCBhbHdheXMgc3VjY2VlZCwgc2luY2Ugd2UKLQkJCSAqIG5pY2sgYSBmcmFtZSBmcm9tIGVpdGhlciBlbXB0eSBvciBmdWxsIGxpc3QsIGJ1dCBpZiB3ZSBoYWQgdG8KLQkJCSAqIHRha2UgaXQgZnJvbSB0aGUgZnVsbCBsaXN0LCBpdCBtZWFucyBhIGZyYW1lIGdvdCBkcm9wcGVkLgotCQkJICovCi0JCQlpZiAocHdjX25leHRfZmlsbF9mcmFtZShwZGV2KSkKLQkJCQlwd2NfZnJhbWVfZHVtcGVkKHBkZXYpOwotCisJCX0gZWxzZSB7CisJCQlmYnVmLT52Yi52NGwyX2J1Zi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJCWZidWYtPnZiLnY0bDJfYnVmLnNlcXVlbmNlID0gcGRldi0+dmZyYW1lX2NvdW50OworCQkJdmIyX2J1ZmZlcl9kb25lKCZmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKKwkJCXBkZXYtPmZpbGxfYnVmID0gTlVMTDsKKwkJCXBkZXYtPnZzeW5jID0gMDsKIAkJfQogCX0gLyogIWRyb3BfZnJhbWVzICovCiAJcGRldi0+dmZyYW1lX2NvdW50Kys7Ci0JcmV0dXJuIGF3YWtlOwogfQogCiAvKiBUaGlzIGdldHMgY2FsbGVkIGZvciB0aGUgSXNvY2hyb25vdXMgcGlwZSAodmlkZW8pLiBUaGlzIGlzIGRvbmUgaW4KQEAgLTY1NSwyNCArMjcyLDIwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHB3Y19pc29jX2hhbmRsZXIoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdXJiLT5jb250ZXh0OwogCWludCBpLCBmc3QsIGZsZW47Ci0JaW50IGF3YWtlOwotCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmOwotCXVuc2lnbmVkIGNoYXIgKmZpbGxwdHIgPSBOVUxMLCAqaXNvX2J1ZiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqaXNvX2J1ZiA9IE5VTEw7CiAKLQlhd2FrZSA9IDA7Ci0JcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXVyYi0+Y29udGV4dDsKLQlpZiAocGRldiA9PSBOVUxMKSB7Ci0JCVBXQ19FUlJPUigiaXNvY19oYW5kbGVyKCkgY2FsbGVkIHdpdGggTlVMTCBkZXZpY2U/IVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgeworCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKIAkJUFdDX0RFQlVHX09QRU4oIlVSQiAoJXApIHVubGlua2VkICVzc3luY2hyb251b3VzbHkuXG4iLCB1cmIsIHVyYi0+c3RhdHVzID09IC1FTk9FTlQgPyAiIiA6ICJhIik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiB1cmItPnN0YXR1cyAhPSAwKSB7CisKKwlpZiAocGRldi0+ZmlsbF9idWYgPT0gTlVMTCkKKwkJcGRldi0+ZmlsbF9idWYgPSBwd2NfZ2V0X25leHRfZmlsbF9idWYocGRldik7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgewogCQljb25zdCBjaGFyICplcnJtc2c7CiAKIAkJZXJybXNnID0gIlVua25vd24iOwpAQCAtNjg0LDI5ICsyOTcsMjEgQEAKIAkJCWNhc2UgLUVJTFNFUToJCWVycm1zZyA9ICJDUkMvVGltZW91dCAoY291bGQgYmUgYW55dGhpbmcpIjsgYnJlYWs7CiAJCQljYXNlIC1FVElNRToJCWVycm1zZyA9ICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCI7IGJyZWFrOwogCQl9Ci0JCVBXQ19ERUJVR19GTE9XKCJwd2NfaXNvY19oYW5kbGVyKCkgY2FsbGVkIHdpdGggc3RhdHVzICVkIFslc10uXG4iLCB1cmItPnN0YXR1cywgZXJybXNnKTsKLQkJLyogR2l2ZSB1cCBhZnRlciBhIG51bWJlciBvZiBjb250aWd1b3VzIGVycm9ycyBvbiB0aGUgVVNCIGJ1cy4KLQkJICAgQXBwZWFyYW50bHkgc29tZXRoaW5nIGlzIHdyb25nIHNvIHdlIHNpbXVsYXRlIGFuIHVucGx1ZyBldmVudC4KLQkJICovCisJCVBXQ19FUlJPUigicHdjX2lzb2NfaGFuZGxlcigpIGNhbGxlZCB3aXRoIHN0YXR1cyAlZCBbJXNdLlxuIiwKKwkJCSAgdXJiLT5zdGF0dXMsIGVycm1zZyk7CisJCS8qIEdpdmUgdXAgYWZ0ZXIgYSBudW1iZXIgb2YgY29udGlndW91cyBlcnJvcnMgKi8KIAkJaWYgKCsrcGRldi0+dmlzb2NfZXJyb3JzID4gTUFYX0lTT0NfRVJST1JTKQogCQl7Ci0JCQlQV0NfSU5GTygiVG9vIG1hbnkgSVNPQyBlcnJvcnMsIGJhaWxpbmcgb3V0LlxuIik7Ci0JCQlwZGV2LT5lcnJvcl9zdGF0dXMgPSBFSU87Ci0JCQlhd2FrZSA9IDE7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CisJCQlQV0NfRVJST1IoIlRvbyBtYW55IElTT0MgZXJyb3JzLCBiYWlsaW5nIG91dC5cbiIpOworCQkJaWYgKHBkZXYtPmZpbGxfYnVmKSB7CisJCQkJdmIyX2J1ZmZlcl9kb25lKCZwZGV2LT5maWxsX2J1Zi0+dmIsCisJCQkJCQlWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwkJCQlwZGV2LT5maWxsX2J1ZiA9IE5VTEw7CisJCQl9CiAJCX0KLQkJZ290byBoYW5kbGVyX2VuZDsgLy8gdWdseSwgYnV0IHByYWN0aWNhbAotCX0KLQotCWZidWYgPSBwZGV2LT5maWxsX2ZyYW1lOwotCWlmIChmYnVmID09IE5VTEwpIHsKLQkJUFdDX0VSUk9SKCJwd2NfaXNvY19oYW5kbGVyIHdpdGhvdXQgdmFsaWQgZmlsbCBmcmFtZS5cbiIpOwotCQlhd2FrZSA9IDE7CisJCXBkZXYtPnZzeW5jID0gMDsgLyogRHJvcCB0aGUgY3VycmVudCBmcmFtZSAqLwogCQlnb3RvIGhhbmRsZXJfZW5kOwogCX0KLQllbHNlIHsKLQkJZmlsbHB0ciA9IGZidWYtPmRhdGEgKyBmYnVmLT5maWxsZWQ7Ci0JfQogCiAJLyogUmVzZXQgSVNPQyBlcnJvciBjb3VudGVyLiBXZSBkaWQgZ2V0IGhlcmUsIGFmdGVyIGFsbC4gKi8KIAlwZGV2LT52aXNvY19lcnJvcnMgPSAwOwpAQCAtNzIwLDg5ICszMjUsNzMgQEAKIAkJZnN0ICA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOwogCQlmbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOwogCQlpc29fYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKLQkJaWYgKGZzdCA9PSAwKSB7Ci0JCQlpZiAoZmxlbiA+IDApIHsgLyogaWYgdmFsaWQgZGF0YS4uLiAqLwotCQkJCWlmIChwZGV2LT52c3luYyA+IDApIHsgLyogLi4uYW5kIHdlIGFyZSBub3Qgc3luYy1odW50aW5nLi4uICovCi0JCQkJCXBkZXYtPnZzeW5jID0gMjsKKwkJaWYgKGZzdCAhPSAwKSB7CisJCQlQV0NfRVJST1IoIklzbyBmcmFtZSAlZCBoYXMgZXJyb3IgJWRcbiIsIGksIGZzdCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxlbiA+IDAgJiYgcGRldi0+dnN5bmMpIHsKKwkJCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmID0gcGRldi0+ZmlsbF9idWY7CiAKLQkJCQkJLyogLi4uY29weSBkYXRhIHRvIGZyYW1lIGJ1ZmZlciwgaWYgcG9zc2libGUgKi8KLQkJCQkJaWYgKGZsZW4gKyBmYnVmLT5maWxsZWQgPiBwZGV2LT5mcmFtZV90b3RhbF9zaXplKSB7Ci0JCQkJCQlQV0NfREVCVUdfRkxPVygiRnJhbWUgYnVmZmVyIG92ZXJmbG93IChmbGVuID0gJWQsIGZyYW1lX3RvdGFsX3NpemUgPSAlZCkuXG4iLCBmbGVuLCBwZGV2LT5mcmFtZV90b3RhbF9zaXplKTsKLQkJCQkJCXBkZXYtPnZzeW5jID0gMDsgLyogSG1tLCBsZXQncyB3YWl0IGZvciBhbiBFT0YgKGVuZC1vZi1mcmFtZSkgKi8KLQkJCQkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCW1lbW1vdmUoZmlsbHB0ciwgaXNvX2J1ZiwgZmxlbik7Ci0JCQkJCQlmaWxscHRyICs9IGZsZW47Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZmJ1Zi0+ZmlsbGVkICs9IGZsZW47Ci0JCQl9IC8qIC4uZmxlbiA+IDAgKi8KLQotCQkJaWYgKGZsZW4gPCBwZGV2LT52bGFzdF9wYWNrZXRfc2l6ZSkgewotCQkJCS8qIFNob3J0ZXIgcGFja2V0Li4uIFdlIHByb2JhYmx5IGhhdmUgdGhlIGVuZCBvZiBhbiBpbWFnZS1mcmFtZTsKLQkJCQkgICB3YWtlIHVwIHJlYWQoKSBwcm9jZXNzIGFuZCBsZXQgc2VsZWN0KCkvcG9sbCgpIGRvIHNvbWV0aGluZy4KLQkJCQkgICBEZWNvbXByZXNzaW9uIGlzIGRvbmUgaW4gdXNlciB0aW1lIG92ZXIgdGhlcmUuCi0JCQkJICAgKi8KLQkJCQlpZiAocGRldi0+dnN5bmMgPT0gMikgewotCQkJCQlpZiAocHdjX3Jjdl9zaG9ydF9wYWNrZXQocGRldiwgZmJ1ZikpIHsKLQkJCQkJCWF3YWtlID0gMTsKLQkJCQkJCWZidWYgPSBwZGV2LT5maWxsX2ZyYW1lOwotCQkJCQl9Ci0JCQkJfQotCQkJCWZidWYtPmZpbGxlZCA9IDA7Ci0JCQkJZmlsbHB0ciA9IGZidWYtPmRhdGE7Ci0JCQkJcGRldi0+dnN5bmMgPSAxOworCQkJaWYgKHBkZXYtPnZzeW5jID09IDEpIHsKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJmZidWYtPnZiLnY0bDJfYnVmLnRpbWVzdGFtcCk7CisJCQkJcGRldi0+dnN5bmMgPSAyOwogCQkJfQogCi0JCQlwZGV2LT52bGFzdF9wYWNrZXRfc2l6ZSA9IGZsZW47Ci0JCX0gLyogLi5zdGF0dXMgPT0gMCAqLwotCQllbHNlIHsKLQkJCS8qIFRoaXMgaXMgbm9ybWFsbHkgbm90IGludGVyZXN0aW5nIHRvIHRoZSB1c2VyLCB1bmxlc3MKLQkJCSAqIHlvdSBhcmUgcmVhbGx5IGRlYnVnZ2luZyBzb21ldGhpbmcsIGRlZmF1bHQgPSAwICovCi0JCQlzdGF0aWMgaW50IGlzb19lcnJvcjsKLQkJCWlzb19lcnJvcisrOwotCQkJaWYgKGlzb19lcnJvciA8IDIwKQotCQkJCVBXQ19ERUJVR19GTE9XKCJJc28gZnJhbWUgJWQgb2YgVVNCIGhhcyBlcnJvciAlZFxuIiwgaSwgZnN0KTsKKwkJCWlmIChmbGVuICsgZmJ1Zi0+ZmlsbGVkID4gcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSkgeworCQkJCVBXQ19FUlJPUigiRnJhbWUgb3ZlcmZsb3cgKCVkID4gJWQpXG4iLAorCQkJCQkgIGZsZW4gKyBmYnVmLT5maWxsZWQsCisJCQkJCSAgcGRldi0+ZnJhbWVfdG90YWxfc2l6ZSk7CisJCQkJcGRldi0+dnN5bmMgPSAwOyAvKiBMZXQncyB3YWl0IGZvciBhbiBFT0YgKi8KKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5KGZidWYtPmRhdGEgKyBmYnVmLT5maWxsZWQsIGlzb19idWYsCisJCQkJICAgICAgIGZsZW4pOworCQkJCWZidWYtPmZpbGxlZCArPSBmbGVuOworCQkJfQogCQl9CisJCWlmIChmbGVuIDwgcGRldi0+dmxhc3RfcGFja2V0X3NpemUpIHsKKwkJCS8qIFNob3J0ZXIgcGFja2V0Li4uIGVuZCBvZiBmcmFtZSAqLworCQkJaWYgKHBkZXYtPnZzeW5jID09IDIpCisJCQkJcHdjX2ZyYW1lX2NvbXBsZXRlKHBkZXYpOworCQkJaWYgKHBkZXYtPmZpbGxfYnVmID09IE5VTEwpCisJCQkJcGRldi0+ZmlsbF9idWYgPSBwd2NfZ2V0X25leHRfZmlsbF9idWYocGRldik7CisJCQlpZiAocGRldi0+ZmlsbF9idWYpIHsKKwkJCQlwZGV2LT5maWxsX2J1Zi0+ZmlsbGVkID0gMDsKKwkJCQlwZGV2LT52c3luYyA9IDE7CisJCQl9CisJCX0KKwkJcGRldi0+dmxhc3RfcGFja2V0X3NpemUgPSBmbGVuOwogCX0KIAogaGFuZGxlcl9lbmQ6Ci0JaWYgKGF3YWtlKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7Ci0KLQl1cmItPmRldiA9IHBkZXYtPnVkZXY7CiAJaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKGkgIT0gMCkKIAkJUFdDX0VSUk9SKCJFcnJvciAoJWQpIHJlLXN1Ym1pdHRpbmcgdXJiIGluIHB3Y19pc29jX2hhbmRsZXIuXG4iLCBpKTsKIH0KIAotCi1pbnQgcHdjX2lzb2NfaW5pdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHdjX2lzb2NfaW5pdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IGksIGosIHJldDsKLQogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlkZXNjID0gTlVMTDsKIAotCWlmIChwZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwogCWlmIChwZGV2LT5pc29faW5pdCkKIAkJcmV0dXJuIDA7CisKIAlwZGV2LT52c3luYyA9IDA7CisJcGRldi0+dmxhc3RfcGFja2V0X3NpemUgPSAwOworCXBkZXYtPmZpbGxfYnVmID0gTlVMTDsKKwlwZGV2LT52ZnJhbWVfY291bnQgPSAwOworCXBkZXYtPnZpc29jX2Vycm9ycyA9IDA7CiAJdWRldiA9IHBkZXYtPnVkZXY7CiAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgYWx0ZXJuYXRlIGludGVyZmFjZSwgYWRqdXN0IHBhY2tldCBzaXplICovCi0JaWYgKCF1ZGV2LT5hY3Rjb25maWcpCi0JCXJldHVybiAtRUZBVUxUOwogCWludGYgPSB1c2JfaWZudW1fdG9faWYodWRldiwgMCk7CiAJaWYgKGludGYpCiAJCWlkZXNjID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIHBkZXYtPnZhbHRlcm5hdGUpOwotCiAJaWYgKCFpZGVzYykKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAtRUlPOwogCiAJLyogU2VhcmNoIHZpZGVvIGVuZHBvaW50ICovCiAJcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA9IC0xOwpAQCAtODI1LDM0ICs0MTQsMzIgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIEFsbG9jYXRlIGFuZCBpbml0IElzb2Nocm9udW91cyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIoSVNPX0ZSQU1FU19QRVJfREVTQywgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewogCQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgdXJiICVkXG4iLCBpKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKKwkJCXBkZXYtPmlzb19pbml0ID0gMTsKKwkJCXB3Y19pc29jX2NsZWFudXAocGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQlwZGV2LT5zYnVmW2ldLnVyYiA9IHVyYjsKKwkJcGRldi0+dXJic1tpXSA9IHVyYjsKIAkJUFdDX0RFQlVHX01FTU9SWSgiQWxsb2NhdGVkIFVSQiBhdCAweCVwXG4iLCB1cmIpOwotCX0KLQlpZiAocmV0KSB7Ci0JCS8qIERlLWFsbG9jYXRlIGluIHJldmVyc2Ugb3JkZXIgKi8KLQkJd2hpbGUgKGktLSkgewotCQkJdXNiX2ZyZWVfdXJiKHBkZXYtPnNidWZbaV0udXJiKTsKLQkJCXBkZXYtPnNidWZbaV0udXJiID0gTlVMTDsKLQkJfQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIGluaXQgVVJCIHN0cnVjdHVyZSAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewotCQl1cmIgPSBwZGV2LT5zYnVmW2ldLnVyYjsKIAogCQl1cmItPmludGVydmFsID0gMTsgLy8gZGV2aWsKIAkJdXJiLT5kZXYgPSB1ZGV2OwogCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgcGRldi0+dmVuZHBvaW50KTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwZGV2LT5zYnVmW2ldLmRhdGE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2JfYWxsb2NfY29oZXJlbnQodWRldiwKKwkJCQkJCQkgIElTT19CVUZGRVJfU0laRSwKKwkJCQkJCQkgIEdGUF9LRVJORUwsCisJCQkJCQkJICAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgdXJiIGJ1ZmZlciAlZFxuIiwgaSk7CisJCQlwZGV2LT5pc29faW5pdCA9IDE7CisJCQlwd2NfaXNvY19jbGVhbnVwKHBkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gSVNPX0JVRkZFUl9TSVpFOwogCQl1cmItPmNvbXBsZXRlID0gcHdjX2lzb2NfaGFuZGxlcjsKIAkJdXJiLT5jb250ZXh0ID0gcGRldjsKQEAgLTg2NiwxNCArNDUzLDE0IEBACiAKIAkvKiBsaW5rICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7Ci0JCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkZXYtPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocGRldi0+dXJic1tpXSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXQpIHsKIAkJCVBXQ19FUlJPUigiaXNvY19pbml0KCkgc3VibWl0X3VyYiAlZCBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgaSwgcmV0KTsKIAkJCXBkZXYtPmlzb19pbml0ID0gMTsKIAkJCXB3Y19pc29jX2NsZWFudXAocGRldik7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCVBXQ19ERUJVR19NRU1PUlkoIlVSQiAweCVwIHN1Ym1pdHRlZC5cbiIsIHBkZXYtPnNidWZbaV0udXJiKTsKKwkJUFdDX0RFQlVHX01FTU9SWSgiVVJCIDB4JXAgc3VibWl0dGVkLlxuIiwgcGRldi0+dXJic1tpXSk7CiAJfQogCiAJLyogQWxsIGlzIGRvbmUuLi4gKi8KQEAgLTg4OCwxMiArNDc1LDkgQEAKIAogCS8qIFVubGlua2luZyBJU09DIGJ1ZmZlcnMgb25lIGJ5IG9uZSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewotCQlzdHJ1Y3QgdXJiICp1cmI7Ci0KLQkJdXJiID0gcGRldi0+c2J1ZltpXS51cmI7Ci0JCWlmICh1cmIpIHsKLQkJCVBXQ19ERUJVR19NRU1PUlkoIlVubGlua2luZyBVUkIgJXBcbiIsIHVyYik7Ci0JCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJaWYgKHBkZXYtPnVyYnNbaV0pIHsKKwkJCVBXQ19ERUJVR19NRU1PUlkoIlVubGlua2luZyBVUkIgJXBcbiIsIHBkZXYtPnVyYnNbaV0pOworCQkJdXNiX2tpbGxfdXJiKHBkZXYtPnVyYnNbaV0pOwogCQl9CiAJfQogfQpAQCAtOTA0LDQwICs0ODgsNTEgQEAKIAogCS8qIEZyZWVpbmcgSVNPQyBidWZmZXJzIG9uZSBieSBvbmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKLQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCXVyYiA9IHBkZXYtPnNidWZbaV0udXJiOwotCQlpZiAodXJiKSB7CisJCWlmIChwZGV2LT51cmJzW2ldKSB7CiAJCQlQV0NfREVCVUdfTUVNT1JZKCJGcmVlaW5nIFVSQlxuIik7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCXBkZXYtPnNidWZbaV0udXJiID0gTlVMTDsKKwkJCWlmIChwZGV2LT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCQl1c2JfZnJlZV9jb2hlcmVudChwZGV2LT51ZGV2LAorCQkJCQlwZGV2LT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQlwZGV2LT51cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXBkZXYtPnVyYnNbaV0tPnRyYW5zZmVyX2RtYSk7CisJCQl9CisJCQl1c2JfZnJlZV91cmIocGRldi0+dXJic1tpXSk7CisJCQlwZGV2LT51cmJzW2ldID0gTlVMTDsKIAkJfQogCX0KIH0KIAotdm9pZCBwd2NfaXNvY19jbGVhbnVwKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQorc3RhdGljIHZvaWQgcHdjX2lzb2NfY2xlYW51cChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKIHsKIAlQV0NfREVCVUdfT1BFTigiPj4gcHdjX2lzb2NfY2xlYW51cCgpXG4iKTsKLQlpZiAocGRldiA9PSBOVUxMKQotCQlyZXR1cm47CisKIAlpZiAocGRldi0+aXNvX2luaXQgPT0gMCkKIAkJcmV0dXJuOwogCiAJcHdjX2lzb19zdG9wKHBkZXYpOwogCXB3Y19pc29fZnJlZShwZGV2KTsKLQotCS8qIFN0b3AgY2FtZXJhLCBidXQgb25seSBpZiB3ZSBhcmUgc3VyZSB0aGUgY2FtZXJhIGlzIHN0aWxsIHRoZXJlICh1bnBsdWcKLQkgICBpcyBzaWduYWxsZWQgYnkgRVBJUEUpCi0JICovCi0JaWYgKHBkZXYtPmVycm9yX3N0YXR1cyAhPSBFUElQRSkgewotCQlQV0NfREVCVUdfT1BFTigiU2V0dGluZyBhbHRlcm5hdGUgaW50ZXJmYWNlIDAuXG4iKTsKLQkJdXNiX3NldF9pbnRlcmZhY2UocGRldi0+dWRldiwgMCwgMCk7Ci0JfQorCXVzYl9zZXRfaW50ZXJmYWNlKHBkZXYtPnVkZXYsIDAsIDApOwogCiAJcGRldi0+aXNvX2luaXQgPSAwOwogCVBXQ19ERUJVR19PUEVOKCI8PCBwd2NfaXNvY19jbGVhbnVwKClcbiIpOwogfQogCisvKgorICogUmVsZWFzZSBhbGwgcXVldWVkIGJ1ZmZlcnMsIG5vIG5lZWQgdG8gdGFrZSBxdWV1ZWRfYnVmc19sb2NrLCBzaW5jZSBhbGwKKyAqIGlzbyB1cmJzIGhhdmUgYmVlbiBraWxsZWQgd2hlbiB3ZSdyZSBjYWxsZWQgc28gcHdjX2lzb2NfaGFuZGxlciB3b24ndCBydW4uCisgKi8KK3N0YXRpYyB2b2lkIHB3Y19jbGVhbnVwX3F1ZXVlZF9idWZzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXdoaWxlICghbGlzdF9lbXB0eSgmcGRldi0+cXVldWVkX2J1ZnMpKSB7CisJCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpidWY7CisKKwkJYnVmID0gbGlzdF9lbnRyeShwZGV2LT5xdWV1ZWRfYnVmcy5uZXh0LCBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiwKKwkJCQkgbGlzdCk7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRVJST1IpOworCX0KK30KKwogLyoqKioqKioqKgogICogc3lzZnMKICAqKioqKioqKiovCkBAIC0xMDUxLDk4ICs2NDYsMTUgQEAKIAogc3RhdGljIGludCBwd2NfdmlkZW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgaSwgcmV0OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OwogCiAJUFdDX0RFQlVHX09QRU4oIj4+IHZpZGVvX29wZW4gY2FsbGVkKHZkZXYgPSAweCVwKS5cbiIsIHZkZXYpOwogCiAJcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCUJVR19PTighcGRldik7Ci0JaWYgKHBkZXYtPnZvcGVuKSB7Ci0JCVBXQ19ERUJVR19PUEVOKCJJJ20gYnVzeSwgc29tZW9uZSBpcyB1c2luZyB0aGUgZGV2aWNlLlxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQorCWlmICghcGRldi0+dWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCi0JaWYgKCFwZGV2LT51c2JfaW5pdCkgewotCQlQV0NfREVCVUdfT1BFTigiRG9pbmcgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbi5cbiIpOwotCQlwZGV2LT51c2JfaW5pdCA9IDE7Ci0KLQkJLyogUXVlcnkgc2Vuc29yIHR5cGUgKi8KLQkJcmV0ID0gcHdjX2dldF9jbW9zX3NlbnNvcihwZGV2LCAmaSk7Ci0JCWlmIChyZXQgPj0gMCkKLQkJewotCQkJUFdDX0RFQlVHX09QRU4oIlRoaXMgJXMgY2FtZXJhIGlzIGVxdWlwcGVkIHdpdGggYSAlcyAoJWQpLlxuIiwKLQkJCQkJcGRldi0+dmRldi5uYW1lLAotCQkJCQlwd2Nfc2Vuc29yX3R5cGVfdG9fc3RyaW5nKGkpLCBpKTsKLQkJfQotCX0KLQotCS8qIFR1cm4gb24gY2FtZXJhICovCi0JaWYgKHBvd2VyX3NhdmUpIHsKLQkJaSA9IHB3Y19jYW1lcmFfcG93ZXIocGRldiwgMSk7Ci0JCWlmIChpIDwgMCkKLQkJCVBXQ19ERUJVR19PUEVOKCJGYWlsZWQgdG8gcmVzdG9yZSBwb3dlciB0byB0aGUgY2FtZXJhISAoJWQpXG4iLCBpKTsKLQl9Ci0JLyogU2V0IExFRCBvbi9vZmYgdGltZSAqLwotCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgbGVkX29uLCBsZWRfb2ZmKSA8IDApCi0JCVBXQ19ERUJVR19PUEVOKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOwotCi0KLQkvKiBTbyBmYXIsIHNvIGdvb2QuIEFsbG9jYXRlIG1lbW9yeS4gKi8KLQlpID0gcHdjX2FsbG9jYXRlX2J1ZmZlcnMocGRldik7Ci0JaWYgKGkgPCAwKSB7Ci0JCVBXQ19ERUJVR19PUEVOKCJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVycyBtZW1vcnkuXG4iKTsKLQkJcHdjX2ZyZWVfYnVmZmVycyhwZGV2KTsKLQkJcmV0dXJuIGk7Ci0JfQotCi0JLyogUmVzZXQgYnVmZmVycyAmIHBhcmFtZXRlcnMgKi8KLQlwd2NfcmVzZXRfYnVmZmVycyhwZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgcHdjX21idWZzOyBpKyspCi0JCXBkZXYtPmltYWdlX3VzZWRbaV0gPSAwOwotCXBkZXYtPnZmcmFtZV9jb3VudCA9IDA7Ci0JcGRldi0+dmZyYW1lc19kdW1wZWQgPSAwOwotCXBkZXYtPnZmcmFtZXNfZXJyb3IgPSAwOwotCXBkZXYtPnZpc29jX2Vycm9ycyA9IDA7Ci0JcGRldi0+ZXJyb3Jfc3RhdHVzID0gMDsKLQlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCi0KLQkvKiBTZXQgc29tZSBkZWZhdWx0cyAqLwotCXBkZXYtPnZzbmFwc2hvdCA9IDA7Ci0KLQkvKiBTZXQgdmlkZW8gc2l6ZSwgZmlyc3QgdHJ5IHRoZSBsYXN0IHVzZWQgdmlkZW8gc2l6ZQotCSAgIChvciB0aGUgZGVmYXVsdCBvbmUpOyBpZiB0aGF0IGZhaWxzIHRyeSBRQ0lGLzEwIG9yIFFTSUYvMTA7Ci0JICAgaXQgdGhhdCBmYWlscyB0b28sIGdpdmUgdXAuCi0JICovCi0JaSA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCBwd2NfaW1hZ2Vfc2l6ZXNbcGRldi0+dnNpemVdLngsIHB3Y19pbWFnZV9zaXplc1twZGV2LT52c2l6ZV0ueSwgcGRldi0+dmZyYW1lcywgcGRldi0+dmNvbXByZXNzaW9uLCAwKTsKLQlpZiAoaSkJewotCQl1bnNpZ25lZCBpbnQgZGVmYXVsdF9yZXNvbHV0aW9uOwotCQlQV0NfREVCVUdfT1BFTigiRmlyc3QgYXR0ZW1wdCBhdCBzZXRfdmlkZW9fbW9kZSBmYWlsZWQuXG4iKTsKLQkJaWYgKHBkZXYtPnR5cGU+PSA3MzApCi0JCQlkZWZhdWx0X3Jlc29sdXRpb24gPSBQU1pfUVNJRjsKLQkJZWxzZQotCQkJZGVmYXVsdF9yZXNvbHV0aW9uID0gUFNaX1FDSUY7Ci0KLQkJaSA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LAotCQkJCSAgICAgICBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9yZXNvbHV0aW9uXS54LAotCQkJCSAgICAgICBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9yZXNvbHV0aW9uXS55LAotCQkJCSAgICAgICAxMCwKLQkJCQkgICAgICAgcGRldi0+dmNvbXByZXNzaW9uLAotCQkJCSAgICAgICAwKTsKLQl9Ci0JaWYgKGkpIHsKLQkJUFdDX0RFQlVHX09QRU4oIlNlY29uZCBhdHRlbXB0IGF0IHNldF92aWRlb19tb2RlIGZhaWxlZC5cbiIpOwotCQlwd2NfZnJlZV9idWZmZXJzKHBkZXYpOwotCQlyZXR1cm4gaTsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHRoZSB3ZWJjYW0gdG8gc2FuZSB2YWx1ZSAqLwotCXB3Y19zZXRfYnJpZ2h0bmVzcyhwZGV2LCAweDdmZmYpOwotCXB3Y19zZXRfYWdjKHBkZXYsIDEsIDApOwotCi0JcGRldi0+dm9wZW4rKzsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB2ZGV2OwogCVBXQ19ERUJVR19PUEVOKCI8PCB2aWRlb19vcGVuKCkgcmV0dXJucyAwLlxuIik7CiAJcmV0dXJuIDA7CkBAIC0xMTU4LDIzOSArNjcwLDIxMSBAQAogCQlpZiAoZGV2aWNlX2hpbnRbaGludF0ucGRldiA9PSBwZGV2KQogCQkJZGV2aWNlX2hpbnRbaGludF0ucGRldiA9IE5VTEw7CiAKKwkvKiBGcmVlIGludGVybWVkaWF0ZSBkZWNvbXByZXNzaW9uIGJ1ZmZlciAmIHRhYmxlcyAqLworCWlmIChwZGV2LT5kZWNvbXByZXNzX2RhdGEgIT0gTlVMTCkgeworCQlQV0NfREVCVUdfTUVNT1JZKCJGcmVlaW5nIGRlY29tcHJlc3Npb24gYnVmZmVyIGF0ICVwLlxuIiwKKwkJCQkgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJa2ZyZWUocGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKwkJcGRldi0+ZGVjb21wcmVzc19kYXRhID0gTlVMTDsKKwl9CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZwZGV2LT5jdHJsX2hhbmRsZXIpOworCiAJa2ZyZWUocGRldik7CiB9CiAKLS8qIE5vdGUgdGhhdCBhbGwgY2xlYW51cCBpcyBkb25lIGluIHRoZSByZXZlcnNlIG9yZGVyIGFzIGluIF9vcGVuICovCiBzdGF0aWMgaW50IHB3Y192aWRlb19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OwotCWludCBpOwogCiAJUFdDX0RFQlVHX09QRU4oIj4+IHZpZGVvX2Nsb3NlIGNhbGxlZCh2ZGV2ID0gMHglcCkuXG4iLCB2ZGV2KTsKIAogCXBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQlpZiAocGRldi0+dm9wZW4gPT0gMCkKLQkJUFdDX0RFQlVHX01PRFVMRSgidmlkZW9fY2xvc2UoKSBjYWxsZWQgb24gY2xvc2VkIGRldmljZT9cbiIpOwotCi0JLyogRHVtcCBzdGF0aXN0aWNzLCBidXQgb25seSBpZiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIGZyYW1lcyB3ZXJlCi0JICAgcHJvY2Vzc2VkICh0byBwcmV2ZW50IGVuZGxlc3MgbG9nLWVudHJpZXMgaW4gY2FzZSBvZiBzbmFwLXNob3QKLQkgICBwcm9ncmFtcykKLQkgKi8KLQlpZiAocGRldi0+dmZyYW1lX2NvdW50ID4gMjApCi0JCVBXQ19ERUJVR19NT0RVTEUoIkNsb3NpbmcgdmlkZW8gZGV2aWNlOiAlZCBmcmFtZXMgcmVjZWl2ZWQsIGR1bXBlZCAlZCBmcmFtZXMsICVkIGZyYW1lcyB3aXRoIGVycm9ycy5cbiIsIHBkZXYtPnZmcmFtZV9jb3VudCwgcGRldi0+dmZyYW1lc19kdW1wZWQsIHBkZXYtPnZmcmFtZXNfZXJyb3IpOwotCi0JaWYgKERFVklDRV9VU0VfQ09ERUMxKHBkZXYtPnR5cGUpKQotCSAgICBwd2NfZGVjMV9leGl0KCk7Ci0JZWxzZQotCSAgICBwd2NfZGVjMjNfZXhpdCgpOwotCi0JcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKLQlwd2NfZnJlZV9idWZmZXJzKHBkZXYpOwotCi0JLyogVHVybiBvZmYgTEVEUyBhbmQgcG93ZXIgZG93biBjYW1lcmEsIGJ1dCBvbmx5IHdoZW4gbm90IHVucGx1Z2dlZCAqLwotCWlmICghcGRldi0+dW5wbHVnZ2VkKSB7Ci0JCS8qIFR1cm4gTEVEcyBvZmYgKi8KLQkJaWYgKHB3Y19zZXRfbGVkcyhwZGV2LCAwLCAwKSA8IDApCi0JCQlQV0NfREVCVUdfTU9EVUxFKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOwotCQlpZiAocG93ZXJfc2F2ZSkgewotCQkJaSA9IHB3Y19jYW1lcmFfcG93ZXIocGRldiwgMCk7Ci0JCQlpZiAoaSA8IDApCi0JCQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gcG93ZXIgZG93biBjYW1lcmEgKCVkKVxuIiwgaSk7Ci0JCX0KLQkJcGRldi0+dm9wZW4tLTsKLQkJUFdDX0RFQlVHX09QRU4oIjw8IHZpZGVvX2Nsb3NlKCkgdm9wZW49JWRcbiIsIHBkZXYtPnZvcGVuKTsKKwlpZiAocGRldi0+Y2FwdF9maWxlID09IGZpbGUpIHsKKwkJdmIyX3F1ZXVlX3JlbGVhc2UoJnBkZXYtPnZiX3F1ZXVlKTsKKwkJcGRldi0+Y2FwdF9maWxlID0gTlVMTDsKIAl9CiAKKwlQV0NfREVCVUdfT1BFTigiPDwgdmlkZW9fY2xvc2UoKVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKglGSVhNRTogd2hhdCBhYm91dCB0d28gcGFyYWxsZWwgcmVhZHMgPz8/PwotICogICAgICBBTlNXRVI6IE5vdCBzdXBwb3J0ZWQuIFlvdSBjYW4ndCBvcGVuIHRoZSBkZXZpY2UgbW9yZSB0aGFuIG9uY2UsCi0JCWRlc3BpdGUgd2hhdCB0aGUgVjRMMSBpbnRlcmZhY2Ugc2F5cy4gRmlyc3QsIEkgZG9uJ3Qgc2VlCi0JCXRoZSBuZWVkLCBzZWNvbmQgdGhlcmUncyBubyBtZWNoYW5pc20gb2YgYWxlcnRpbmcgdGhlCi0JCTJuZC8zcmQvLi4uIHByb2Nlc3Mgb2YgZXZlbnRzIGxpa2UgY2hhbmdpbmcgaW1hZ2Ugc2l6ZS4KLQkJQW5kIEkgZG9uJ3Qgc2VlIHRoZSBwb2ludCBvZiBibG9ja2luZyB0aGF0IGZvciB0aGUKLQkJMm5kLzNyZC8uLi4gcHJvY2Vzcy4KLQkJSW4gbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnRzIHJlYWRpbmcgcGFyYWxsZWwgZnJvbSBhbnkKLQkJZGV2aWNlIGlzIHRyaWNreSBhbnlob3cuCi0gKi8KLQogc3RhdGljIHNzaXplX3QgcHdjX3ZpZGVvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKLQlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCWludCBieXRlc190b19yZWFkLCBydiA9IDA7Ci0Jdm9pZCAqaW1hZ2VfYnVmZmVyX2FkZHI7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCVBXQ19ERUJVR19SRUFEKCJwd2NfdmlkZW9fcmVhZCh2ZGV2PTB4JXAsIGJ1Zj0lcCwgY291bnQ9JXpkKSBjYWxsZWQuXG4iLAotCQkJdmRldiwgYnVmLCBjb3VudCk7Ci0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCWlmIChwZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOworCWlmICghcGRldi0+dWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKSB7Ci0JCXJ2ID0gLXBkZXYtPmVycm9yX3N0YXR1czsgLyogU29tZXRoaW5nIGhhcHBlbmVkLCByZXBvcnQgd2hhdC4gKi8KLQkJZ290byBlcnJfb3V0OwotCX0KKwlpZiAocGRldi0+Y2FwdF9maWxlICE9IE5VTEwgJiYKKwkgICAgcGRldi0+Y2FwdF9maWxlICE9IGZpbGUpCisJCXJldHVybiAtRUJVU1k7CiAKLQkvKiBTdGFydCB0aGUgc3RyZWFtIChpZiBub3QgYWxyZWFkeSBzdGFydGVkKSAqLwotCXJ2ID0gcHdjX2lzb2NfaW5pdChwZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gZXJyX291dDsKKwlwZGV2LT5jYXB0X2ZpbGUgPSBmaWxlOwogCi0JLyogSW4gY2FzZSB3ZSdyZSBkb2luZyBwYXJ0aWFsIHJlYWRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnJhbWUgKi8KLQlpZiAocGRldi0+aW1hZ2VfcmVhZF9wb3MgPT0gMCkgewotCQkvKiBEbyB3YWl0IHF1ZXVlaW5nIGFjY29yZGluZyB0byB0aGUgKGRvYylib29rICovCi0JCWFkZF93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKLQkJd2hpbGUgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKLQkJCS8qIENoZWNrIGZvciB1bnBsdWdnZWQvZXRjLiBoZXJlICovCi0JCQlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKSB7Ci0JCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwotCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQkJcnYgPSAtcGRldi0+ZXJyb3Jfc3RhdHVzIDsKLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9Ci0JCQlpZiAobm9ibG9jaykgewotCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKLQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJCXJ2ID0gLUVXT1VMREJMT0NLOwotCQkJCWdvdG8gZXJyX291dDsKLQkJCX0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKLQkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJCXJ2ID0gLUVSRVNUQVJUU1lTOwotCQkJCWdvdG8gZXJyX291dDsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmcGRldi0+bW9kbG9jayk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOwotCQl9Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQotCQkvKiBEZWNvbXByZXNzIGFuZCByZWxlYXNlIGZyYW1lICovCi0JCWlmIChwd2NfaGFuZGxlX2ZyYW1lKHBkZXYpKSB7Ci0JCQlydiA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQl9Ci0KLQlQV0NfREVCVUdfUkVBRCgiQ29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuXG4iKTsKLQlpZiAocGRldi0+cGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9ZVVY0MjApCi0JCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBwd2NfcmF3X2ZyYW1lKTsKLQllbHNlCi0JCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT52aWV3LnNpemU7Ci0KLQkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzICovCi0JaWYgKGNvdW50ICsgcGRldi0+aW1hZ2VfcmVhZF9wb3MgPiBieXRlc190b19yZWFkKQotCQljb3VudCA9IGJ5dGVzX3RvX3JlYWQgLSBwZGV2LT5pbWFnZV9yZWFkX3BvczsKLQlpbWFnZV9idWZmZXJfYWRkciA9IHBkZXYtPmltYWdlX2RhdGE7Ci0JaW1hZ2VfYnVmZmVyX2FkZHIgKz0gcGRldi0+aW1hZ2VzW3BkZXYtPmZpbGxfaW1hZ2VdLm9mZnNldDsKLQlpbWFnZV9idWZmZXJfYWRkciArPSBwZGV2LT5pbWFnZV9yZWFkX3BvczsKLQlpZiAoY29weV90b191c2VyKGJ1ZiwgaW1hZ2VfYnVmZmVyX2FkZHIsIGNvdW50KSkgewotCQlydiA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JcGRldi0+aW1hZ2VfcmVhZF9wb3MgKz0gY291bnQ7Ci0JaWYgKHBkZXYtPmltYWdlX3JlYWRfcG9zID49IGJ5dGVzX3RvX3JlYWQpIHsgLyogQWxsIGRhdGEgaGFzIGJlZW4gcmVhZCAqLwotCQlwZGV2LT5pbWFnZV9yZWFkX3BvcyA9IDA7Ci0JCXB3Y19uZXh0X2ltYWdlKHBkZXYpOwotCX0KLQlyZXR1cm4gY291bnQ7Ci1lcnJfb3V0OgotCXJldHVybiBydjsKKwlyZXR1cm4gdmIyX3JlYWQoJnBkZXYtPnZiX3F1ZXVlLCBidWYsIGNvdW50LCBwcG9zLAorCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHB3Y192aWRlb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCi0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCWlmIChwZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOworCWlmICghcGRldi0+dWRldikKKwkJcmV0dXJuIFBPTExfRVJSOwogCi0JLyogU3RhcnQgdGhlIHN0cmVhbSAoaWYgbm90IGFscmVhZHkgc3RhcnRlZCkgKi8KLQlyZXQgPSBwd2NfaXNvY19pbml0KHBkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJnBkZXYtPmZyYW1lcSwgd2FpdCk7Ci0JaWYgKHBkZXYtPmVycm9yX3N0YXR1cykKLQkJcmV0dXJuIFBPTExFUlI7Ci0JaWYgKHBkZXYtPmZ1bGxfZnJhbWVzICE9IE5VTEwpIC8qIHdlIGhhdmUgZnJhbWVzIHdhaXRpbmcgKi8KLQkJcmV0dXJuIChQT0xMSU4gfCBQT0xMUkROT1JNKTsKLQotCXJldHVybiAwOworCXJldHVybiB2YjJfcG9sbCgmcGRldi0+dmJfcXVldWUsIGZpbGUsIHdhaXQpOwogfQogCiBzdGF0aWMgaW50IHB3Y192aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zID0gMDsKLQlpbnQgaW5kZXg7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCVBXQ19ERUJVR19NRU1PUlkoIj4+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0Jc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCWlmIChwZGV2LT5jYXB0X2ZpbGUgIT0gZmlsZSkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIEZpbmQgdGhlIGlkeCBidWZmZXIgZm9yIHRoaXMgbWFwcGluZyAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHB3Y19tYnVmczsgaW5kZXgrKykgewotCQlwb3MgPSBwZGV2LT5pbWFnZXNbaW5kZXhdLm9mZnNldDsKLQkJaWYgKChwb3M+PlBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGluZGV4ID09IE1BWF9JTUFHRVMpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChpbmRleCA9PSAwKSB7Ci0JCS8qCi0JCSAqIFNwZWNpYWwgY2FzZSBmb3IgdjRsMS4gSW4gdjRsMSwgd2UgbWFwIG9ubHkgb25lIGJpZyBidWZmZXIsCi0JCSAqIGJ1dCBpbiB2NGwyIGVhY2ggYnVmZmVyIGlzIG1hcHBlZAotCQkgKi8KLQkJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOwotCQl0b3RhbF9zaXplID0gcHdjX21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZTsKLQkJaWYgKHNpemUgIT0gcGRldi0+bGVuX3Blcl9pbWFnZSAmJiBzaXplICE9IHRvdGFsX3NpemUpIHsKLQkJCVBXQ19FUlJPUigiV3Jvbmcgc2l6ZSAoJWx1KSBuZWVkZWQgdG8gYmUgbGVuX3Blcl9pbWFnZT0lZCBvciB0b3RhbF9zaXplPSVsdVxuIiwKLQkJCQkgICBzaXplLCBwZGV2LT5sZW5fcGVyX2ltYWdlLCB0b3RhbF9zaXplKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIGlmIChzaXplID4gcGRldi0+bGVuX3Blcl9pbWFnZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHZiMl9tbWFwKCZwZGV2LT52Yl9xdWV1ZSwgdm1hKTsKK30KIAotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CS8qIGZyb20gMi42LjktYWNYICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVmlkZW9idWYyIG9wZXJhdGlvbnMgKi8KIAotCXBvcyArPSAodW5zaWduZWQgbG9uZylwZGV2LT5pbWFnZV9kYXRhOwotCXdoaWxlIChzaXplID4gMCkgewotCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwotCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJcG9zICs9IFBBR0VfU0laRTsKLQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCi0JCQlzaXplIC09IFBBR0VfU0laRTsKLQkJZWxzZQotCQkJc2l6ZSA9IDA7Ci0JfQorc3RhdGljIGludCBxdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpuYnVmZmVycywKKwkJCQl1bnNpZ25lZCBpbnQgKm5wbGFuZXMsIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSwKKwkJCQl2b2lkICphbGxvY19jdHhzW10pCit7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKworCWlmICgqbmJ1ZmZlcnMgPCBNSU5fRlJBTUVTKQorCQkqbmJ1ZmZlcnMgPSBNSU5fRlJBTUVTOworCWVsc2UgaWYgKCpuYnVmZmVycyA+IE1BWF9GUkFNRVMpCisJCSpuYnVmZmVycyA9IE1BWF9GUkFNRVM7CisKKwkqbnBsYW5lcyA9IDE7CisKKwlzaXplc1swXSA9IFBBR0VfQUxJR04oKHBkZXYtPmFic19tYXgueCAqIHBkZXYtPmFic19tYXgueSAqIDMpIC8gMik7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidWZmZXJfaW5pdChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHB3Y19mcmFtZV9idWYsIHZiKTsKKworCS8qIG5lZWQgdm1hbGxvYyBzaW5jZSBmcmFtZSBidWZmZXIgPiAxMjhLICovCisJYnVmLT5kYXRhID0gdnphbGxvYyhQV0NfRlJBTUVfU0laRSk7CisJaWYgKGJ1Zi0+ZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisKKwkvKiBEb24ndCBhbGxvdyBxdWVpbmcgbmV3IGJ1ZmZlcnMgYWZ0ZXIgZGV2aWNlIGRpc2Nvbm5lY3Rpb24gKi8KKwlpZiAoIXBkZXYtPnVkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVmZmVyX2ZpbmlzaChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOworCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBwd2NfZnJhbWVfYnVmLCB2Yik7CisKKwkvKgorCSAqIEFwcGxpY2F0aW9uIGhhcyBjYWxsZWQgZHFidWYgYW5kIGlzIGdldHRpbmcgYmFjayBhIGJ1ZmZlciB3ZSd2ZQorCSAqIGZpbGxlZCwgdGFrZSB0aGUgcHdjIGRhdGEgd2UndmUgc3RvcmVkIGluIGJ1Zi0+ZGF0YSBhbmQgZGVjb21wcmVzcworCSAqIGl0IGludG8gYSB1c2FibGUgZm9ybWF0LCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gdGhlIHZiMl9idWZmZXIKKwkgKi8KKwlyZXR1cm4gcHdjX2RlY29tcHJlc3MocGRldiwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2NsZWFudXAoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBwd2NfZnJhbWVfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBwd2NfZnJhbWVfYnVmLCB2Yik7CisKKwl2ZnJlZShidWYtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKwlzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiwgdmIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZwZGV2LT5xdWV1ZWRfYnVmcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cXVldWVkX2J1ZnNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHN0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCisJaWYgKCFwZGV2LT51ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFR1cm4gb24gY2FtZXJhIGFuZCBzZXQgTEVEUyBvbiAqLworCXB3Y19jYW1lcmFfcG93ZXIocGRldiwgMSk7CisJaWYgKHBkZXYtPnBvd2VyX3NhdmUpIHsKKwkJLyogUmVzdG9yZSB2aWRlbyBtb2RlICovCisJCXB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCBwZGV2LT52aWV3LngsIHBkZXYtPnZpZXcueSwKKwkJCQkgICBwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sCisJCQkJICAgcGRldi0+dnNuYXBzaG90KTsKKwl9CisJcHdjX3NldF9sZWRzKHBkZXYsIGxlZF9vbiwgbGVkX29mZik7CisKKwlyZXR1cm4gcHdjX2lzb2NfaW5pdChwZGV2KTsKK30KKworc3RhdGljIGludCBzdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCisJaWYgKHBkZXYtPnVkZXYpIHsKKwkJcHdjX3NldF9sZWRzKHBkZXYsIDAsIDApOworCQlwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDApOworCQlwd2NfaXNvY19jbGVhbnVwKHBkZXYpOworCX0KKwlwd2NfY2xlYW51cF9xdWV1ZWRfYnVmcyhwZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwd2NfbG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOworfQorCitzdGF0aWMgdm9pZCBwd2NfdW5sb2NrKHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJbXV0ZXhfdW5sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCB2YjJfb3BzIHB3Y192Yl9xdWV1ZV9vcHMgPSB7CisJLnF1ZXVlX3NldHVwCQk9IHF1ZXVlX3NldHVwLAorCS5idWZfaW5pdAkJPSBidWZmZXJfaW5pdCwKKwkuYnVmX3ByZXBhcmUJCT0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9maW5pc2gJCT0gYnVmZmVyX2ZpbmlzaCwKKwkuYnVmX2NsZWFudXAJCT0gYnVmZmVyX2NsZWFudXAsCisJLmJ1Zl9xdWV1ZQkJPSBidWZmZXJfcXVldWUsCisJLnN0YXJ0X3N0cmVhbWluZwk9IHN0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gc3RvcF9zdHJlYW1pbmcsCisJLndhaXRfcHJlcGFyZQkJPSBwd2NfdW5sb2NrLAorCS53YWl0X2ZpbmlzaAkJPSBwd2NfbG9jaywKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBVU0IgZnVuY3Rpb25zICovCiAKQEAgLTE0MDYsNiArODkwLDcgQEAKIAlpbnQgaGludCwgcmM7CiAJaW50IGZlYXR1cmVzID0gMDsKIAlpbnQgdmlkZW9fbnIgPSAtMTsgLyogZGVmYXVsdDogdXNlIG5leHQgYXZhaWxhYmxlIGRldmljZSAqLworCWludCBteV9wb3dlcl9zYXZlID0gcG93ZXJfc2F2ZTsKIAljaGFyIHNlcmlhbF9udW1iZXJbMzBdLCAqbmFtZTsKIAogCXZlbmRvcl9pZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwpAQCAtMTUxMyw2ICs5OTgsOCBAQAogCQkJUFdDX0lORk8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIDQwMDAgUHJvIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKIAkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDQwMDAiOwogCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJaWYgKG15X3Bvd2VyX3NhdmUgPT0gLTEpCisJCQkJbXlfcG93ZXJfc2F2ZSA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAweDA4YjM6CiAJCQlQV0NfSU5GTygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CkBAIC0xNTIzLDEyICsxMDEwLDE1IEBACiAJCQlQV0NfSU5GTygiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSAobmV3IG1vZGVsKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CiAJCQluYW1lID0gIkxvZ2l0ZWNoIFF1aWNrQ2FtIFpvb20iOwogCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLwotCQkJcG93ZXJfc2F2ZSA9IDE7CisJCQlpZiAobXlfcG93ZXJfc2F2ZSA9PSAtMSkKKwkJCQlteV9wb3dlcl9zYXZlID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDhiNToKIAkJCVBXQ19JTkZPKCJMb2dpdGVjaCBRdWlja0NhbSBPcmJpdC9TcGhlcmUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOwogCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSBPcmJpdCI7CiAJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlpZiAobXlfcG93ZXJfc2F2ZSA9PSAtMSkKKwkJCQlteV9wb3dlcl9zYXZlID0gMTsKIAkJCWZlYXR1cmVzIHw9IEZFQVRVUkVfTU9UT1JfUEFOVElMVDsKIAkJCWJyZWFrOwogCQljYXNlIDB4MDhiNjoKQEAgLTE1ODMsNiArMTA3Myw4IEBACiAJCQlQV0NfSU5GTygiQ3JlYXRpdmUgTGFicyBXZWJjYW0gNSBkZXRlY3RlZC5cbiIpOwogCQkJbmFtZSA9ICJDcmVhdGl2ZSBMYWJzIFdlYmNhbSA1IjsKIAkJCXR5cGVfaWQgPSA3MzA7CisJCQlpZiAobXlfcG93ZXJfc2F2ZSA9PSAtMSkKKwkJCQlteV9wb3dlcl9zYXZlID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIDB4NDAxMToKIAkJCVBXQ19JTkZPKCJDcmVhdGl2ZSBMYWJzIFdlYmNhbSBQcm8gRXggZGV0ZWN0ZWQuXG4iKTsKQEAgLTE2NDAsNiArMTEzMiw5IEBACiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsgLyogTm90IGFueSBvZiB0aGUga25vdyB0eXBlczsgYnV0IHRoZSBsaXN0IGtlZXBzIGdyb3dpbmcuICovCiAKKwlpZiAobXlfcG93ZXJfc2F2ZSA9PSAtMSkKKwkJbXlfcG93ZXJfc2F2ZSA9IDA7CisKIAltZW1zZXQoc2VyaWFsX251bWJlciwgMCwgMzApOwogCXVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pU2VyaWFsTnVtYmVyLCBzZXJpYWxfbnVtYmVyLCAyOSk7CiAJUFdDX0RFQlVHX1BST0JFKCJEZXZpY2Ugc2VyaWFsIG51bWJlciBpcyAlc1xuIiwgc2VyaWFsX251bWJlcik7CkBAIC0xNjU0LDcgKzExNDksNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcGRldi0+dHlwZSA9IHR5cGVfaWQ7Ci0JcGRldi0+dnNpemUgPSBkZWZhdWx0X3NpemU7CiAJcGRldi0+dmZyYW1lcyA9IGRlZmF1bHRfZnBzOwogCXN0cmNweShwZGV2LT5zZXJpYWwsIHNlcmlhbF9udW1iZXIpOwogCXBkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CkBAIC0xNjY4LDEzICsxMTYyLDI2IEBACiAJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWluID0gLTMwMDA7CiAJCXBkZXYtPmFuZ2xlX3JhbmdlLnRpbHRfbWF4ID0gIDI1MDA7CiAJfQorCXB3Y19jb25zdHJ1Y3QocGRldik7IC8qIHNldCBtaW4vbWF4IHNpemVzIGNvcnJlY3QgKi8KIAogCW11dGV4X2luaXQoJnBkZXYtPm1vZGxvY2spOwotCXNwaW5fbG9ja19pbml0KCZwZGV2LT5wdHJsb2NrKTsKKwltdXRleF9pbml0KCZwZGV2LT51ZGV2bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBkZXYtPnF1ZXVlZF9idWZzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwZGV2LT5xdWV1ZWRfYnVmcyk7CiAKIAlwZGV2LT51ZGV2ID0gdWRldjsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZGV2LT5mcmFtZXEpOwogCXBkZXYtPnZjb21wcmVzc2lvbiA9IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb247CisJcGRldi0+cG93ZXJfc2F2ZSA9IG15X3Bvd2VyX3NhdmU7CisKKwkvKiBJbml0IHZpZGVvYnVmMiBxdWV1ZSBzdHJ1Y3R1cmUgKi8KKwltZW1zZXQoJnBkZXYtPnZiX3F1ZXVlLCAwLCBzaXplb2YocGRldi0+dmJfcXVldWUpKTsKKwlwZGV2LT52Yl9xdWV1ZS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCXBkZXYtPnZiX3F1ZXVlLmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUiB8IFZCMl9SRUFEOworCXBkZXYtPnZiX3F1ZXVlLmRydl9wcml2ID0gcGRldjsKKwlwZGV2LT52Yl9xdWV1ZS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHB3Y19mcmFtZV9idWYpOworCXBkZXYtPnZiX3F1ZXVlLm9wcyA9ICZwd2NfdmJfcXVldWVfb3BzOworCXBkZXYtPnZiX3F1ZXVlLm1lbV9vcHMgPSAmdmIyX3ZtYWxsb2NfbWVtb3BzOworCXZiMl9xdWV1ZV9pbml0KCZwZGV2LT52Yl9xdWV1ZSk7CiAKIAkvKiBJbml0IHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgKi8KIAltZW1jcHkoJnBkZXYtPnZkZXYsICZwd2NfdGVtcGxhdGUsIHNpemVvZihwd2NfdGVtcGxhdGUpKTsKQEAgLTE3MDcsMTQgKzEyMTQsNDAgQEAKIAlQV0NfREVCVUdfUFJPQkUoInByb2JlKCkgZnVuY3Rpb24gcmV0dXJuaW5nIHN0cnVjdCBhdCAweCVwLlxuIiwgcGRldik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwZGV2KTsKIAorI2lmZGVmIENPTkZJR19VU0JfUFdDX0RFQlVHCisJLyogUXVlcnkgc2Vuc29yIHR5cGUgKi8KKwlpZiAocHdjX2dldF9jbW9zX3NlbnNvcihwZGV2LCAmcmMpID49IDApIHsKKwkJUFdDX0RFQlVHX09QRU4oIlRoaXMgJXMgY2FtZXJhIGlzIGVxdWlwcGVkIHdpdGggYSAlcyAoJWQpLlxuIiwKKwkJCQlwZGV2LT52ZGV2Lm5hbWUsCisJCQkJcHdjX3NlbnNvcl90eXBlX3RvX3N0cmluZyhyYyksIHJjKTsKKwl9CisjZW5kaWYKKwogCS8qIFNldCB0aGUgbGVkcyBvZmYgKi8KIAlwd2Nfc2V0X2xlZHMocGRldiwgMCwgMCk7CisKKwkvKiBTZXR1cCBpbnRpYWwgdmlkZW9tb2RlICovCisJcmMgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlld19tYXgueCwgcGRldi0+dmlld19tYXgueSwKKwkJCQlwZGV2LT52ZnJhbWVzLCBwZGV2LT52Y29tcHJlc3Npb24sIDApOworCWlmIChyYykKKwkJZ290byBlcnJfZnJlZV9tZW07CisKKwkvKiBSZWdpc3RlciBjb250cm9scyAoYW5kIHJlYWQgZGVmYXVsdCB2YWx1ZXMgZnJvbSBjYW1lcmEgKi8KKwlyYyA9IHB3Y19pbml0X2NvbnRyb2xzKHBkZXYpOworCWlmIChyYykgeworCQlQV0NfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciB2NGwyIGNvbnRyb2xzICglZCkuXG4iLCByYyk7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCXBkZXYtPnZkZXYuY3RybF9oYW5kbGVyID0gJnBkZXYtPmN0cmxfaGFuZGxlcjsKKworCS8qIEFuZCBwb3dlcmRvd24gdGhlIGNhbWVyYSB1bnRpbCBzdHJlYW1pbmcgc3RhcnRzICovCiAJcHdjX2NhbWVyYV9wb3dlcihwZGV2LCAwKTsKIAogCXJjID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZwZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CiAJaWYgKHJjIDwgMCkgewogCQlQV0NfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBhcyB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsIHJjKTsKLQkJZ290byBlcnJfZnJlZV9tZW07CisJCWdvdG8gZXJyX2ZyZWVfY29udHJvbHM7CiAJfQogCXJjID0gcHdjX2NyZWF0ZV9zeXNmc19maWxlcyhwZGV2KTsKIAlpZiAocmMpCkBAIC0xNzU3LDcgKzEyOTAsMTAgQEAKIAlpZiAoaGludCA8IE1BWF9ERVZfSElOVFMpCiAJCWRldmljZV9oaW50W2hpbnRdLnBkZXYgPSBOVUxMOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZwZGV2LT52ZGV2KTsKK2Vycl9mcmVlX2NvbnRyb2xzOgorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnBkZXYtPmN0cmxfaGFuZGxlcik7CiBlcnJfZnJlZV9tZW06CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlrZnJlZShwZGV2KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNzY3LDMzICsxMzAzLDE3IEBACiB7CiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAorCW11dGV4X2xvY2soJnBkZXYtPnVkZXZsb2NrKTsKIAltdXRleF9sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKLQlpZiAocGRldiA9PSBOVUxMKSB7Ci0JCVBXQ19FUlJPUigicHdjX2Rpc2Nvbm5lY3QoKSBDYWxsZWQgd2l0aG91dCBwcml2YXRlIHBvaW50ZXIuXG4iKTsKLQkJZ290byBkaXNjb25uZWN0X291dDsKLQl9Ci0JaWYgKHBkZXYtPnVkZXYgPT0gTlVMTCkgewotCQlQV0NfRVJST1IoInB3Y19kaXNjb25uZWN0KCkgYWxyZWFkeSBjYWxsZWQgZm9yICVwXG4iLCBwZGV2KTsKLQkJZ290byBkaXNjb25uZWN0X291dDsKLQl9Ci0JaWYgKHBkZXYtPnVkZXYgIT0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSkgewotCQlQV0NfRVJST1IoInB3Y19kaXNjb25uZWN0KCkgV29vcHM6IHBvaW50ZXIgbWlzbWF0Y2ggdWRldi9wZGV2LlxuIik7Ci0JCWdvdG8gZGlzY29ubmVjdF9vdXQ7Ci0JfQogCi0JLyogV2UgZ290IHVucGx1Z2dlZDsgdGhpcyBpcyBzaWduYWxsZWQgYnkgYW4gRVBJUEUgZXJyb3IgY29kZSAqLwotCXBkZXYtPmVycm9yX3N0YXR1cyA9IEVQSVBFOwotCXBkZXYtPnVucGx1Z2dlZCA9IDE7Ci0KLQkvKiBBbGVydCB3YWl0aW5nIHByb2Nlc3NlcyAqLwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGRldi0+ZnJhbWVxKTsKLQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJLyogTm8gbmVlZCB0byBrZWVwIHRoZSB1cmJzIGFyb3VuZCBhZnRlciBkaXNjb25uZWN0aW9uICovCiAJcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKKwlwd2NfY2xlYW51cF9xdWV1ZWRfYnVmcyhwZGV2KTsKKwlwZGV2LT51ZGV2ID0gTlVMTDsKIAotZGlzY29ubmVjdF9vdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKwltdXRleF91bmxvY2soJnBkZXYtPnVkZXZsb2NrKTsKIAogCXB3Y19yZW1vdmVfc3lzZnNfZmlsZXMocGRldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnBkZXYtPnZkZXYpOwpAQCAtMTgwOSwzNiArMTMyOSwyNyBAQAogICogSW5pdGlhbGl6YXRpb24gY29kZSAmIG1vZHVsZSBzdHVmZgogICovCiAKLXN0YXRpYyBjaGFyICpzaXplOwogc3RhdGljIGludCBmcHM7Ci1zdGF0aWMgaW50IGZidWZzOwotc3RhdGljIGludCBtYnVmczsKIHN0YXRpYyBpbnQgY29tcHJlc3Npb24gPSAtMTsKIHN0YXRpYyBpbnQgbGVkc1syXSA9IHsgLTEsIC0xIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGxlZHNfbmFyZ3M7CiBzdGF0aWMgY2hhciAqZGV2X2hpbnRbTUFYX0RFVl9ISU5UU107CiBzdGF0aWMgdW5zaWduZWQgaW50IGRldl9oaW50X25hcmdzOwogCi1tb2R1bGVfcGFyYW0oc2l6ZSwgY2hhcnAsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGZwcywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShmYnVmcywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShtYnVmcywgaW50LCAwNDQ0KTsKICNpZmRlZiBDT05GSUdfVVNCX1BXQ19ERUJVRwogbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCBwd2NfdHJhY2UsIGludCwgMDY0NCk7CiAjZW5kaWYKLW1vZHVsZV9wYXJhbShwb3dlcl9zYXZlLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHBvd2VyX3NhdmUsIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oY29tcHJlc3Npb24sIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkobGVkcywgaW50LCAmbGVkc19uYXJncywgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZGV2X2hpbnQsIGNoYXJwLCAmZGV2X2hpbnRfbmFyZ3MsIDA0NDQpOwogCi1NT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbml0aWFsIGltYWdlIHNpemUuIE9uZSBvZiBzcWNpZiwgcXNpZiwgcWNpZiwgc2lmLCBjaWYsIHZnYSIpOwogTU9EVUxFX1BBUk1fREVTQyhmcHMsICJJbml0aWFsIGZyYW1lcyBwZXIgc2Vjb25kLiBWYXJpZXMgd2l0aCBtb2RlbCwgdXNlZnVsIHJhbmdlIDUtMzAiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmJ1ZnMsICJOdW1iZXIgb2YgaW50ZXJuYWwgZnJhbWUgYnVmZmVycyB0byByZXNlcnZlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1idWZzLCAiTnVtYmVyIG9mIGV4dGVybmFsIChtbWFwKCllZCkgaW1hZ2UgYnVmZmVycyIpOwogI2lmZGVmIENPTkZJR19VU0JfUFdDX0RFQlVHCiBNT0RVTEVfUEFSTV9ERVNDKHRyYWNlLCAiRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyIpOwogI2VuZGlmCi1NT0RVTEVfUEFSTV9ERVNDKHBvd2VyX3NhdmUsICJUdXJuIHBvd2VyIHNhdmUgZmVhdHVyZSBpbiBjYW1lcmEgb24gb3Igb2ZmIik7CitNT0RVTEVfUEFSTV9ERVNDKHBvd2VyX3NhdmUsICJUdXJuIHBvd2VyIHNhdmluZyBmb3IgbmV3IGNhbWVyYXMgb24gb3Igb2ZmIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbXByZXNzaW9uLCAiUHJlZmVycmVkIGNvbXByZXNzaW9uIHF1YWxpdHkuIFJhbmdlIDAgKHVuY29tcHJlc3NlZCkgdG8gMyAoaGlnaCBjb21wcmVzc2lvbikiKTsKIE1PRFVMRV9QQVJNX0RFU0MobGVkcywgIkxFRCBvbixvZmYgdGltZSBpbiBtaWxsaXNlY29uZHMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGV2X2hpbnQsICJEZXZpY2Ugbm9kZSBoaW50cyIpOwpAQCAtMTg1MSwxNCArMTM2MiwxOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfcHdjX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgc3o7Ci0JY2hhciAqc2l6ZW5hbWVzW1BTWl9NQVhdID0geyAic3FjaWYiLCAicXNpZiIsICJxY2lmIiwgInNpZiIsICJjaWYiLCAidmdhIiB9OworCWludCBpOwogCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfREVCVUcKIAlQV0NfSU5GTygiUGhpbGlwcyB3ZWJjYW0gbW9kdWxlIHZlcnNpb24gIiBQV0NfVkVSU0lPTiAiIGxvYWRlZC5cbiIpOwogCVBXQ19JTkZPKCJTdXBwb3J0cyBQaGlsaXBzIFBDQTY0NS82NDYsIFBDVkM2NzUvNjgwLzY5MCwgUENWQzcyMFs0MF0vNzMwLzc0MC83NTAgJiBQQ1ZDODMwLzg0MC5cbiIpOwogCVBXQ19JTkZPKCJBbHNvIHN1cHBvcnRzIHRoZSBBc2tleSBWQzAxMCwgdmFyaW91cyBMb2dpdGVjaCBRdWlja2NhbXMsIFNhbXN1bmcgTVBDLUMxMCBhbmQgTVBDLUMzMCxcbiIpOwogCVBXQ19JTkZPKCJ0aGUgQ3JlYXRpdmUgV2ViQ2FtIDUgJiBQcm8gRXgsIFNPVEVDIEFmaW5hIEV5ZSBhbmQgVmlzaW9uaXRlIFZDUy1VQzMwMCBhbmQgVkNTLVVNMTAwLlxuIik7CiAKKwlpZiAocHdjX3RyYWNlID49IDApIHsKKwkJUFdDX0RFQlVHX01PRFVMRSgiVHJhY2Ugb3B0aW9uczogMHglMDR4XG4iLCBwd2NfdHJhY2UpOworCX0KKyNlbmRpZgorCiAJaWYgKGZwcykgewogCQlpZiAoZnBzIDwgNCB8fCBmcHMgPiAzMCkgewogCQkJUFdDX0VSUk9SKCJGcmFtZXJhdGUgb3V0IG9mIGJvdW5kcyAoNC0zMCkuXG4iKTsKQEAgLTE4NjgsNDEgKzEzODQsNiBAQAogCQlQV0NfREVCVUdfTU9EVUxFKCJEZWZhdWx0IGZyYW1lcmF0ZSBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X2Zwcyk7CiAJfQogCi0JaWYgKHNpemUpIHsKLQkJLyogc3RyaW5nOyB0cnkgbWF0Y2hpbmcgd2l0aCBhcnJheSAqLwotCQlmb3IgKHN6ID0gMDsgc3ogPCBQU1pfTUFYOyBzeisrKSB7Ci0JCQlpZiAoIXN0cmNtcChzaXplbmFtZXNbc3pdLCBzaXplKSkgeyAvKiBGb3VuZCEgKi8KLQkJCQlkZWZhdWx0X3NpemUgPSBzejsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoc3ogPT0gUFNaX01BWCkgewotCQkJUFdDX0VSUk9SKCJTaXplIG5vdCByZWNvZ25pemVkOyB0cnkgc2l6ZT1bc3FjaWYgfCBxc2lmIHwgcWNpZiB8IHNpZiB8IGNpZiB8IHZnYV0uXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCVBXQ19ERUJVR19NT0RVTEUoIkRlZmF1bHQgaW1hZ2Ugc2l6ZSBzZXQgdG8gJXMgWyVkeCVkXS5cbiIsIHNpemVuYW1lc1tkZWZhdWx0X3NpemVdLCBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9zaXplXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9zaXplXS55KTsKLQl9Ci0JaWYgKG1idWZzKSB7Ci0JCWlmIChtYnVmcyA8IDEgfHwgbWJ1ZnMgPiBNQVhfSU1BR0VTKSB7Ci0JCQlQV0NfRVJST1IoIklsbGVnYWwgbnVtYmVyIG9mIG1tYXAoKSBidWZmZXJzOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAlZC5cbiIsIE1BWF9JTUFHRVMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcHdjX21idWZzID0gbWJ1ZnM7Ci0JCVBXQ19ERUJVR19NT0RVTEUoIk51bWJlciBvZiBpbWFnZSBidWZmZXJzIHNldCB0byAlZC5cbiIsIHB3Y19tYnVmcyk7Ci0JfQotCWlmIChmYnVmcykgewotCQlpZiAoZmJ1ZnMgPCAyIHx8IGZidWZzID4gTUFYX0ZSQU1FUykgewotCQkJUFdDX0VSUk9SKCJJbGxlZ2FsIG51bWJlciBvZiBmcmFtZSBidWZmZXJzOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAyIGFuZCAlZC5cbiIsIE1BWF9GUkFNRVMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZGVmYXVsdF9mYnVmcyA9IGZidWZzOwotCQlQV0NfREVCVUdfTU9EVUxFKCJOdW1iZXIgb2YgZnJhbWUgYnVmZmVycyBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X2ZidWZzKTsKLQl9Ci0jaWZkZWYgQ09ORklHX1VTQl9QV0NfREVCVUcKLQlpZiAocHdjX3RyYWNlID49IDApIHsKLQkJUFdDX0RFQlVHX01PRFVMRSgiVHJhY2Ugb3B0aW9uczogMHglMDR4XG4iLCBwd2NfdHJhY2UpOwotCX0KLSNlbmRpZgogCWlmIChjb21wcmVzc2lvbiA+PSAwKSB7CiAJCWlmIChjb21wcmVzc2lvbiA+IDMpIHsKIAkJCVBXQ19FUlJPUigiSW52YWxpZCBjb21wcmVzc2lvbiBzZXR0aW5nOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAwICh1bmNvbXByZXNzZWQpIGFuZCAzIChoaWdoKS5cbiIpOwpAQCAtMTkxMSw4ICsxMzkyLDYgQEAKIAkJcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uOwogCQlQV0NfREVCVUdfTU9EVUxFKCJQcmVmZXJyZWQgY29tcHJlc3Npb24gc2V0IHRvICVkLlxuIiwgcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbik7CiAJfQotCWlmIChwb3dlcl9zYXZlKQotCQlQV0NfREVCVUdfTU9EVUxFKCJFbmFibGluZyBwb3dlciBzYXZlIG9uIG9wZW4vY2xvc2UuXG4iKTsKIAlpZiAobGVkc1swXSA+PSAwKQogCQlsZWRfb24gPSBsZWRzWzBdOwogCWlmIChsZWRzWzFdID49IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaW9jdGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzBjYWU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pb2N0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLSNpZm5kZWYgUFdDX0lPQ1RMX0gKLSNkZWZpbmUgUFdDX0lPQ1RMX0gKLQotLyogKEMpIDIwMDEtMjAwNCBOZW1vc29mdCBVbnYuCi0gICAoQykgMjAwNC0yMDA2IEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKLQotICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4Ci0gICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KLSAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KLSAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQotICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSovCi0KLS8qIFRoaXMgaXMgcHdjLWlvY3RsLmggYmVsb25naW5nIHRvIFBXQyAxMC4wLjEwCi0gICBJdCBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHRvIGNvbW11bmljYXRlIGZyb20gdXNlciBzcGFjZQotICAgZGlyZWN0bHkgdG8gdGhlIGRyaXZlci4KLSAqLwotCi0vKgotICAgQ2hhbmdlcwotICAgMjAwMS8wOC8wMyAgQWx2YXJhZG8gICBBZGRlZCBpb2N0bCBjb25zdGFudHMgdG8gYWNjZXNzIG1ldGhvZHMgZm9yCi0JCQkgIGNoYW5naW5nIHdoaXRlIGJhbGFuY2UgYW5kIHJlZC9ibHVlIGdhaW5zCi0gICAyMDAyLzEyLzE1ICBHLiBILiBGZXJuYW5kZXotVG9yaWJpbyAgIFZJRElPQ0dSRUFMU0laRQotICAgMjAwMy8xMi8xMyAgTmVtb3NmdCBVbnYuIFNvbWUgbW9kaWZpY2F0aW9ucyB0byBtYWtlIGludGVyZmFjaW5nIHRvCi0JICAgICAgIFBXQ1ggZWFzaWVyCi0gKi8KLQotLyogVGhlc2UgYXJlIHByaXZhdGUgaW9jdGwoKSBjb21tYW5kcywgc3BlY2lmaWMgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbXMuCi0gICBUaGV5IGNvbnRhaW4gZnVuY3Rpb25zIG5vdCBmb3VuZCBpbiBvdGhlciB3ZWJjYW1zLCBhbmQgc2V0dGluZ3Mgbm90Ci0gICBzcGVjaWZpZWQgaW4gdGhlIFZpZGVvNExpbnV4IEFQSS4KLQotICAgVGhlICNkZWZpbmUgbmFtZXMgYXJlIGJ1aWx0IHVwIGxpa2UgZm9sbG93czoKLSAgIFZJRElPQwkJVklEZW8gSU9DdGwgcHJlZml4Ci0JIFBXQwkJUGhpbHBzIFdlYkNhbQotCSAgICBHICAgICAgICAgICBvcHRpb25hbDogR2V0Ci0JICAgIFMgICAgICAgICAgIG9wdGlvbmFsOiBTZXQKLQkgICAgIC4uLiAJdGhlIGZ1bmN0aW9uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCi0gLyogRW51bWVyYXRpb24gb2YgaW1hZ2Ugc2l6ZXMgKi8KLSNkZWZpbmUgUFNaX1NRQ0lGCTB4MDAKLSNkZWZpbmUgUFNaX1FTSUYJMHgwMQotI2RlZmluZSBQU1pfUUNJRgkweDAyCi0jZGVmaW5lIFBTWl9TSUYJCTB4MDMKLSNkZWZpbmUgUFNaX0NJRgkJMHgwNAotI2RlZmluZSBQU1pfVkdBCQkweDA1Ci0jZGVmaW5lIFBTWl9NQVgJCTYKLQotCi0vKiBUaGUgZnJhbWUgcmF0ZSBpcyBlbmNvZGVkIGluIHRoZSB2aWRlb193aW5kb3cuZmxhZ3MgcGFyYW1ldGVyIHVzaW5nCi0gICB0aGUgdXBwZXIgMTYgYml0cywgc2luY2Ugc29tZSBmbGFncyBhcmUgZGVmaW5lZCBub3dhZGF5cy4gVGhlIGZvbGxvd2luZwotICAgZGVmaW5lcyBwcm92aWRlIGEgbWFzayBhbmQgc2hpZnQgdG8gZmlsdGVyIG91dCB0aGlzIHZhbHVlLgotICAgVGhpcyB2YWx1ZSBjYW4gYWxzbyBiZSBwYXNzaW5nIHVzaW5nIHRoZSBwcml2YXRlIGZsYWcgd2hlbiB1c2luZyB2NGwyIGFuZAotICAgVklESU9DX1NfRk1UIGlvY3RsLgotCi0gICBJbiAnU25hcHNob3QnIG1vZGUgdGhlIGNhbWVyYSBmcmVlemVzIGl0cyBhdXRvbWF0aWMgZXhwb3N1cmUgYW5kIGNvbG91cgotICAgYmFsYW5jZSBjb250cm9scy4KLSAqLwotI2RlZmluZSBQV0NfRlBTX1NISUZUCQkxNgotI2RlZmluZSBQV0NfRlBTX01BU0sJCTB4MDBGRjAwMDAKLSNkZWZpbmUgUFdDX0ZQU19GUk1BU0sJCTB4MDAzRjAwMDAKLSNkZWZpbmUgUFdDX0ZQU19TTkFQU0hPVAkweDAwNDAwMDAwCi0jZGVmaW5lIFBXQ19RTFRfTUFTSwkJMHgwMzAwMDAwMAotI2RlZmluZSBQV0NfUUxUX1NISUZUCQkyNAotCi0KLS8qIHN0cnVjdHVyZSBmb3IgdHJhbnNmZXJyaW5nIHggJiB5IGNvb3JkaW5hdGVzICovCi1zdHJ1Y3QgcHdjX2Nvb3JkCi17Ci0JaW50IHgsIHk7CQkvKiBndWVzcyB3aGF0ICovCi0JaW50IHNpemU7CQkvKiBzaXplLCBvciBvZmZzZXQgKi8KLX07Ci0KLQotLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1BST0JFICovCi1zdHJ1Y3QgcHdjX3Byb2JlCi17Ci0JY2hhciBuYW1lWzMyXTsKLQlpbnQgdHlwZTsKLX07Ci0KLXN0cnVjdCBwd2Nfc2VyaWFsCi17Ci0JY2hhciBzZXJpYWxbMzBdOwkvKiBTdHJpbmcgd2l0aCBzZXJpYWwgbnVtYmVyLiBDb250YWlucyB0ZXJtaW5hdGluZyAwICovCi19OwotCi0vKiBwd2Nfd2hpdGViYWxhbmNlLm1vZGUgdmFsdWVzICovCi0jZGVmaW5lIFBXQ19XQl9JTkRPT1IJCTAKLSNkZWZpbmUgUFdDX1dCX09VVERPT1IJCTEKLSNkZWZpbmUgUFdDX1dCX0ZMCQkyCi0jZGVmaW5lIFBXQ19XQl9NQU5VQUwJCTMKLSNkZWZpbmUgUFdDX1dCX0FVVE8JCTQKLQotLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1tTR11BV0IgKEF1dG8gV2hpdGUgQmFsYW5jZSkuCi0gICBTZXQgbW9kZSB0byBvbmUgb2YgdGhlIFBXQ19XQl8qIHZhbHVlcyBhYm92ZS4KLSAgICpyZWQgYW5kICpibHVlIGFyZSB0aGUgcmVzcGVjdGl2ZSBnYWlucyBvZiB0aGVzZSBjb2xvdXIgY29tcG9uZW50cyBpbnNpZGUKLSAgIHRoZSBjYW1lcmE7IHJhbmdlIDAuLjY1NTM1Ci0gICBXaGVuICdtb2RlJyA9PSBQV0NfV0JfTUFOVUFMLCAnbWFudWFsX3JlZCcgYW5kICdtYW51YWxfYmx1ZScgYXJlIHNldCBvciByZWFkOwotICAgb3RoZXJ3aXNlIHVuZGVmaW5lZC4KLSAgICdyZWFkX3JlZCcgYW5kICdyZWFkX2JsdWUnIGFyZSByZWFkLW9ubHkuCi0qLwotc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UKLXsKLQlpbnQgbW9kZTsKLQlpbnQgbWFudWFsX3JlZCwgbWFudWFsX2JsdWU7CS8qIFIvVyAqLwotCWludCByZWFkX3JlZCwgcmVhZF9ibHVlOwkvKiBSL08gKi8KLX07Ci0KLS8qCi0gICAnY29udHJvbF9zcGVlZCcgYW5kICdjb250cm9sX2RlbGF5JyBhcmUgdXNlZCBpbiBhdXRvbWF0aWMgd2hpdGViYWxhbmNlIG1vZGUsCi0gICBhbmQgdGVsbCB0aGUgY2FtZXJhIGhvdyBmYXN0IGl0IHNob3VsZCByZWFjdCB0byBjaGFuZ2VzIGluIGxpZ2h0aW5nLCBhbmQKLSAgIHdpdGggaG93IG11Y2ggZGVsYXkuIFZhbGlkIHZhbHVlcyBhcmUgMC4uNjU1MzUuCi0qLwotc3RydWN0IHB3Y193Yl9zcGVlZAotewotCWludCBjb250cm9sX3NwZWVkOwotCWludCBjb250cm9sX2RlbGF5OwotCi19OwotCi0vKiBVc2VkIHdpdGggVklESU9DUFdDW1NHXUxFRCAqLwotc3RydWN0IHB3Y19sZWRzCi17Ci0JaW50IGxlZF9vbjsJCQkvKiBMZWQgb24tdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAqLwotCWludCBsZWRfb2ZmOwkJCS8qIExlZCBvZmYtdGltZTsgcmFuZ2UgPSAwLi4yNTAwMCAgKi8KLX07Ci0KLS8qIEltYWdlIHNpemUgKHVzZWQgd2l0aCBHUkVBTFNJWkUpICovCi1zdHJ1Y3QgcHdjX2ltYWdlc2l6ZQotewotCWludCB3aWR0aDsKLQlpbnQgaGVpZ2h0OwotfTsKLQotLyogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgTW90b3JpemVkIFBhbiAmIFRpbHQgKi8KLSNkZWZpbmUgUFdDX01QVF9QQU4JCTB4MDEKLSNkZWZpbmUgUFdDX01QVF9USUxUCQkweDAyCi0jZGVmaW5lIFBXQ19NUFRfVElNRU9VVAkJMHgwNCAvKiBmb3Igc3RhdHVzICovCi0KLS8qIFNldCBhbmdsZXM7IHdoZW4gYWJzb2x1dGUgIT0gMCwgdGhlIGFuZ2xlIGlzIGFic29sdXRlIGFuZCB0aGUKLSAgIGRyaXZlciBjYWxjdWxhdGVzIHRoZSByZWxhdGl2ZSBvZmZzZXQgZm9yIHlvdS4gVGhpcyBjYW4gb25seQotICAgYmUgdXNlZCB3aXRoIFZJRElPQ1BXQ1NBTkdMRTsgVklESU9DUFdDR0FOR0xFIGFsd2F5cyByZXR1cm5zCi0gICBhYnNvbHV0ZSBhbmdsZXMuCi0gKi8KLXN0cnVjdCBwd2NfbXB0X2FuZ2xlcwotewotCWludCBhYnNvbHV0ZTsJCS8qIHdyaXRlLW9ubHkgKi8KLQlpbnQgcGFuOwkJLyogZGVncmVlcyAqIDEwMCAqLwotCWludCB0aWx0OwkJLyogZGVncmVzcyAqIDEwMCAqLwotfTsKLQotLyogUmFuZ2Ugb2YgYW5nbGVzIG9mIHRoZSBjYW1lcmEsIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5LgotICovCi1zdHJ1Y3QgcHdjX21wdF9yYW5nZQotewotCWludCBwYW5fbWluLCBwYW5fbWF4OwkJLyogZGVncmVlcyAqIDEwMCAqLwotCWludCB0aWx0X21pbiwgdGlsdF9tYXg7Ci19OwotCi1zdHJ1Y3QgcHdjX21wdF9zdGF0dXMKLXsKLQlpbnQgc3RhdHVzOwotCWludCB0aW1lX3BhbjsKLQlpbnQgdGltZV90aWx0OwotfTsKLQotCi0vKiBUaGlzIGlzIHVzZWQgZm9yIG91dC1vZi1rZXJuZWwgZGVjb21wcmVzc2lvbi4gV2l0aCBpdCwgeW91IGNhbiBnZXQKLSAgIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGluaXRpYWxpemUgYW5kIHVzZSB0aGUgZGVjb21wcmVzc29yCi0gICByb3V0aW5lcyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucy4KLSAqLwotc3RydWN0IHB3Y192aWRlb19jb21tYW5kCi17Ci0JaW50IHR5cGU7CQkvKiBjYW1lcmEgdHlwZSAoNjQ1LCA2NzUsIDczMCwgZXRjLikgKi8KLQlpbnQgcmVsZWFzZTsJCS8qIHJlbGVhc2UgbnVtYmVyICovCi0KLQlpbnQgc2l6ZTsJCS8qIG9uZSBvZiBQU1pfKiAqLwotCWludCBhbHRlcm5hdGU7Ci0JaW50IGNvbW1hbmRfbGVuOwkvKiBsZW5ndGggb2YgVVNCIHZpZGVvIGNvbW1hbmQgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbW1hbmRfYnVmWzEzXTsJLyogQWN0dWFsIFVTQiB2aWRlbyBjb21tYW5kICovCi0JaW50IGJhbmRsZW5ndGg7CQkvKiA+MCA9IGNvbXByZXNzZWQgKi8KLQlpbnQgZnJhbWVfc2l6ZTsJCS8qIFNpemUgb2Ygb25lICh1biljb21wcmVzc2VkIGZyYW1lICovCi19OwotCi0vKiBGbGFncyBmb3IgUFdDWCBzdWJyb3V0aW5lcy4gTm90IGFsbCBtb2R1bGVzIGhvbm91ciBhbGwgZmxhZ3MuICovCi0jZGVmaW5lIFBXQ1hfRkxBR19QTEFOQVIJMHgwMDAxCi0jZGVmaW5lIFBXQ1hfRkxBR19CQVlFUgkJMHgwMDA4Ci0KLQotLyogSU9DVEwgZGVmaW5pdGlvbnMgKi8KLQotIC8qIFJlc3RvcmUgdXNlciBzZXR0aW5ncyAqLwotI2RlZmluZSBWSURJT0NQV0NSVVNFUgkJX0lPKCd2JywgMTkyKQotIC8qIFNhdmUgdXNlciBzZXR0aW5ncyAqLwotI2RlZmluZSBWSURJT0NQV0NTVVNFUgkJX0lPKCd2JywgMTkzKQotIC8qIFJlc3RvcmUgZmFjdG9yeSBzZXR0aW5ncyAqLwotI2RlZmluZSBWSURJT0NQV0NGQUNUT1JZCV9JTygndicsIDE5NCkKLQotIC8qIFlvdSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29tcHJlc3Npb24gZmFjdG9yLiBBIGNvbXByZXNzaW9uIHByZWZlcmVuY2Ugb2YgMAotICAgIG1lYW5zIHVzZSB1bmNvbXByZXNzZWQgbW9kZXMgd2hlbiBhdmFpbGFibGU7IDEgaXMgbG93IGNvbXByZXNzaW9uLCAyIGlzCi0gICAgbWVkaXVtIGFuZCAzIGlzIGhpZ2ggY29tcHJlc3Npb24gcHJlZmVycmVkLiBPZiBjb3Vyc2UsIHRoZSBoaWdoZXIgdGhlCi0gICAgY29tcHJlc3Npb24sIHRoZSBsb3dlciB0aGUgYmFuZHdpZHRoIHVzZWQgYnV0IG1vcmUgY2hhbmNlIG9mIGFydGVmYWN0cwotICAgIGluIHRoZSBpbWFnZS4gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGNob29zZXMgYSBoaWdoZXIgY29tcHJlc3Npb24gd2hlbgotICAgIHRoZSBwcmVmZXJyZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLgotICAqLwotIC8qIFNldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAoMCA9IHVuY29tcHJlc3NlZCwgMyA9IGhpZ2hlc3QgY29tcHJlc3Npb24pICovCi0jZGVmaW5lIFZJRElPQ1BXQ1NDUVVBTAkJX0lPVygndicsIDE5NSwgaW50KQotIC8qIEdldCBwcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eSAqLwotI2RlZmluZSBWSURJT0NQV0NHQ1FVQUwJCV9JT1IoJ3YnLCAxOTUsIGludCkKLQotCi0vKiBSZXRyaWV2ZSBzZXJpYWwgbnVtYmVyIG9mIGNhbWVyYSAqLwotI2RlZmluZSBWSURJT0NQV0NHU0VSSUFMCV9JT1IoJ3YnLCAxOTgsIHN0cnVjdCBwd2Nfc2VyaWFsKQotCi0gLyogVGhpcyBpcyBhIHByb2JlIGZ1bmN0aW9uOyBzaW5jZSBzbyBtYW55IGRldmljZXMgYXJlIHN1cHBvcnRlZCwgaXQKLSAgICBiZWNvbWVzIGRpZmZpY3VsdCB0byBpbmNsdWRlIGFsbCB0aGUgbmFtZXMgaW4gcHJvZ3JhbXMgdGhhdCB3YW50IHRvCi0gICAgY2hlY2sgZm9yIHRoZSBlbmhhbmNlZCBQaGlsaXBzIHN0dWZmLiBTbyBpbiBzdGVhZCwgdHJ5IHRoaXMgUFJPQkU7Ci0gICAgaXQgcmV0dXJucyBhIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBuYW1lLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICBQaGlsaXBzIHR5cGUuCi0gICAgVG8gdXNlLCBmaWxsIHRoZSBzdHJ1Y3R1cmUgd2l0aCB6ZXJvZXMsIGNhbGwgUFJPQkUgYW5kIGlmIHRoYXQgc3VjY2VlZHMsCi0gICAgY29tcGFyZSB0aGUgbmFtZSB3aXRoIHRoYXQgcmV0dXJuZWQgZnJvbSBWSURJT0NHQ0FQOyB0aGV5IHNob3VsZCBiZSB0aGUKLSAgICBzYW1lLiBJZiBzbywgeW91IGNhbiBiZSBhc3N1cmVkIGl0IGlzIGEgUGhpbGlwcyAoT0VNKSBjYW0gYW5kIHRoZSB0eXBlCi0gICAgaXMgdmFsaWQuCi0gKi8KLSNkZWZpbmUgVklESU9DUFdDUFJPQkUJCV9JT1IoJ3YnLCAxOTksIHN0cnVjdCBwd2NfcHJvYmUpCi0KLSAvKiBTZXQgQUdDIChBdXRvbWF0aWMgR2FpbiBDb250cm9sKTsgaW50IDwgMCA9IGF1dG8sIDAuLjY1NTM1ID0gZml4ZWQgKi8KLSNkZWZpbmUgVklESU9DUFdDU0FHQwkJX0lPVygndicsIDIwMCwgaW50KQotIC8qIEdldCBBR0M7IGludCA8IDAgPSBhdXRvOyA+PSAwID0gZml4ZWQsIHJhbmdlIDAuLjY1NTM1ICovCi0jZGVmaW5lIFZJRElPQ1BXQ0dBR0MJCV9JT1IoJ3YnLCAyMDAsIGludCkKLSAvKiBTZXQgc2h1dHRlciBzcGVlZDsgaW50IDwgMCA9IGF1dG87ID49IDAgPSBmaXhlZCwgcmFuZ2UgMC4uNjU1MzUgKi8KLSNkZWZpbmUgVklESU9DUFdDU1NIVVRURVIJX0lPVygndicsIDIwMSwgaW50KQotCi0gLyogQ29sb3IgY29tcGVuc2F0aW9uIChBdXRvIFdoaXRlIEJhbGFuY2UpICovCi0jZGVmaW5lIFZJRElPQ1BXQ1NBV0IgICAgICAgICAgIF9JT1coJ3YnLCAyMDIsIHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlKQotI2RlZmluZSBWSURJT0NQV0NHQVdCICAgICAgICAgICBfSU9SKCd2JywgMjAyLCBzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSkKLQotIC8qIEF1dG8gV0Igc3BlZWQgKi8KLSNkZWZpbmUgVklESU9DUFdDU0FXQlNQRUVECV9JT1coJ3YnLCAyMDMsIHN0cnVjdCBwd2Nfd2Jfc3BlZWQpCi0jZGVmaW5lIFZJRElPQ1BXQ0dBV0JTUEVFRAlfSU9SKCd2JywgMjAzLCBzdHJ1Y3QgcHdjX3diX3NwZWVkKQotCi0gLyogTEVEcyBvbi9vZmYvYmxpbms7IGludCByYW5nZSAwLi42NTUzNSAqLwotI2RlZmluZSBWSURJT0NQV0NTTEVEICAgICAgICAgICBfSU9XKCd2JywgMjA1LCBzdHJ1Y3QgcHdjX2xlZHMpCi0jZGVmaW5lIFZJRElPQ1BXQ0dMRUQgICAgICAgICAgIF9JT1IoJ3YnLCAyMDUsIHN0cnVjdCBwd2NfbGVkcykKLQotICAvKiBDb250b3VyIChzaGFycG5lc3MpOyBpbnQgPCAwID0gYXV0bywgMC4uNjU1MzYgPSBmaXhlZCAqLwotI2RlZmluZSBWSURJT0NQV0NTQ09OVE9VUglfSU9XKCd2JywgMjA2LCBpbnQpCi0jZGVmaW5lIFZJRElPQ1BXQ0dDT05UT1VSCV9JT1IoJ3YnLCAyMDYsIGludCkKLQotICAvKiBCYWNrbGlnaHQgY29tcGVuc2F0aW9uOyAwID0gb2ZmLCBvdGhlcndpc2Ugb24gKi8KLSNkZWZpbmUgVklESU9DUFdDU0JBQ0tMSUdIVAlfSU9XKCd2JywgMjA3LCBpbnQpCi0jZGVmaW5lIFZJRElPQ1BXQ0dCQUNLTElHSFQJX0lPUigndicsIDIwNywgaW50KQotCi0gIC8qIEZsaWNrZXJsZXNzIG1vZGU7ID0gMCBvZmYsIG90aGVyd2lzZSBvbiAqLwotI2RlZmluZSBWSURJT0NQV0NTRkxJQ0tFUglfSU9XKCd2JywgMjA4LCBpbnQpCi0jZGVmaW5lIFZJRElPQ1BXQ0dGTElDS0VSCV9JT1IoJ3YnLCAyMDgsIGludCkKLQotICAvKiBEeW5hbWljIG5vaXNlIHJlZHVjdGlvbjsgMCBvZmYsIDMgPSBoaWdoIG5vaXNlIHJlZHVjdGlvbiAqLwotI2RlZmluZSBWSURJT0NQV0NTRFlOTk9JU0UJX0lPVygndicsIDIwOSwgaW50KQotI2RlZmluZSBWSURJT0NQV0NHRFlOTk9JU0UJX0lPUigndicsIDIwOSwgaW50KQotCi0gLyogUmVhbCBpbWFnZSBzaXplIGFzIHVzZWQgYnkgdGhlIGNhbWVyYTsgdGVsbHMgeW91IHdoZXRoZXIgb3Igbm90IHRoZXJlJ3MgYSBncmF5IGJvcmRlciBhcm91bmQgdGhlIGltYWdlICovCi0jZGVmaW5lIFZJRElPQ1BXQ0dSRUFMU0laRQlfSU9SKCd2JywgMjEwLCBzdHJ1Y3QgcHdjX2ltYWdlc2l6ZSkKLQotIC8qIE1vdG9yaXplZCBwYW4gJiB0aWx0IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBWSURJT0NQV0NNUFRSRVNFVAlfSU9XKCd2JywgMjExLCBpbnQpCi0jZGVmaW5lIFZJRElPQ1BXQ01QVEdSQU5HRQlfSU9SKCd2JywgMjExLCBzdHJ1Y3QgcHdjX21wdF9yYW5nZSkKLSNkZWZpbmUgVklESU9DUFdDTVBUU0FOR0xFCV9JT1coJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKLSNkZWZpbmUgVklESU9DUFdDTVBUR0FOR0xFCV9JT1IoJ3YnLCAyMTIsIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcykKLSNkZWZpbmUgVklESU9DUFdDTVBUU1RBVFVTCV9JT1IoJ3YnLCAyMTMsIHN0cnVjdCBwd2NfbXB0X3N0YXR1cykKLQotIC8qIEdldCB0aGUgVVNCIHNldC12aWRlbyBjb21tYW5kOyBuZWVkZWQgZm9yIGluaXRpYWxpemluZyBsaWJwd2N4ICovCi0jZGVmaW5lIFZJRElPQ1BXQ0dWSURDTUQJX0lPUigndicsIDIxNSwgc3RydWN0IHB3Y192aWRlb19jb21tYW5kKQotc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlciB7Ci0gICBpbnQgbGVuOwotICAgY2hhciAqYnVmZmVyOwotCi19OwotI2RlZmluZSBWSURJT0NQV0NHVklEVEFCTEUJX0lPUigndicsIDIxNiwgc3RydWN0IHB3Y190YWJsZV9pbml0X2J1ZmZlcikKLQotLyoKLSAqIFRoaXMgaXMgcHJpdmF0ZSBjb21tYW5kIHVzZWQgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdjRsMi4KLSAqIEluIHRoZSBmdXR1cmUgYWxsIHByaXZhdGUgaW9jdGwgd2lsbCBiZSByZW1vdmUvcmVwbGFjZSB0bwotICogdXNlIGludGVyZmFjZSBvZmZlciBieSB2NGwyLgotICovCi0KLSNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9TQVZFX1VTRVIgICAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCi0jZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfUkVTVE9SRV9VU0VSICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQotI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX1JFU1RPUkVfRkFDVE9SWSAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9DT0xPVVJfTU9ERSAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMpCi0jZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQVVUT0NPTlRPVVIgICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0KQotI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX0NPTlRPVVIgICAgICAgICAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNSkKLSNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9CQUNLTElHSFQgICAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYpCi0jZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfRkxJQ0tFUkxFU1MgICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA3KQotI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX05PSVNFX1JFRFVDVElPTiAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgOCkKLQotc3RydWN0IHB3Y19yYXdfZnJhbWUgewotICAgX19sZTE2IHR5cGU7CQkvKiB0eXBlIG9mIHRoZSB3ZWJjYW0gKi8KLSAgIF9fbGUxNiB2YmFuZGxlbmd0aDsJLyogU2l6ZSBvZiA0bGluZXMgY29tcHJlc3NlZCAodXNlZCBieSB0aGUgZGVjb21wcmVzc29yKSAqLwotICAgX191OCAgIGNtZFs0XTsJLyogdGhlIGZvdXIgYnl0ZSBvZiB0aGUgY29tbWFuZCAoaW4gY2FzZSBvZiBuYWxhLAotCQkJICAgb25seSB0aGUgZmlyc3QgMyBieXRlcyBpcyBmaWxsZWQpICovCi0gICBfX3U4ICAgcmF3ZnJhbWVbMF07CS8qIGZyYW1lX3NpemUgPSBILzQqdmJhbmRsZW5ndGggKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWtpYXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2Mta2lhcmEuYwppbmRleCBmNGFlODNjLi5lNWY0ZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2Mta2lhcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2Mta2lhcmEuYwpAQCAtNDAsNyArNDAsNiBAQAogCiAKICNpbmNsdWRlICJwd2Mta2lhcmEuaCIKLSNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgogCiBjb25zdCB1bnNpZ25lZCBpbnQgS2lhcmFfZnBzX3ZlY3RvcltQV0NfRlBTX01BWF9LSUFSQV0gPSB7IDUsIDEwLCAxNSwgMjAsIDI1LCAzMCB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtbWlzYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLW1pc2MuYwppbmRleCA2YWY1YmI1Li4wYjAzMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtbWlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1taXNjLmMKQEAgLTEyNiw4ICsxMjYsNCBAQAogCXBkZXYtPnBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVY0MjA7IC8qIGRlZmF1bHQgKi8KIAlwZGV2LT52aWV3X21pbi5zaXplID0gcGRldi0+dmlld19taW4ueCAqIHBkZXYtPnZpZXdfbWluLnk7CiAJcGRldi0+dmlld19tYXguc2l6ZSA9IHBkZXYtPnZpZXdfbWF4LnggKiBwZGV2LT52aWV3X21heC55OwotCS8qIGxlbmd0aCBvZiBpbWFnZSwgaW4gWVVWIGZvcm1hdDsgYWx3YXlzIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkuICovCi0JcGRldi0+bGVuX3Blcl9pbWFnZSA9IFBBR0VfQUxJR04oKHBkZXYtPmFic19tYXgueCAqIHBkZXYtPmFic19tYXgueSAqIDMpIC8gMik7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy11bmNvbXByZXNzLmMKaW5kZXggM2I3M2YyOS4uNTEyNjUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5jCkBAIC0zMCwyNiArMzAsMTcgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2luY2x1ZGUgInB3Yy5oIgotI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCiAjaW5jbHVkZSAicHdjLWRlYzEuaCIKICNpbmNsdWRlICJwd2MtZGVjMjMuaCIKIAotaW50IHB3Y19kZWNvbXByZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoraW50IHB3Y19kZWNvbXByZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmJ1ZikKIHsKLQlzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmJ1ZjsKIAlpbnQgbiwgbGluZSwgY29sLCBzdHJpZGU7CiAJdm9pZCAqeXV2LCAqaW1hZ2U7CiAJdTE2ICpzcmM7CiAJdTE2ICpkc3R5LCAqZHN0dSwgKmRzdHY7CiAKLQlpZiAocGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWZidWYgPSBwZGV2LT5yZWFkX2ZyYW1lOwotCWlmIChmYnVmID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCWltYWdlICA9IHBkZXYtPmltYWdlX2RhdGE7Ci0JaW1hZ2UgKz0gcGRldi0+aW1hZ2VzW3BkZXYtPmZpbGxfaW1hZ2VdLm9mZnNldDsKKwlpbWFnZSA9IHZiMl9wbGFuZV92YWRkcigmZmJ1Zi0+dmIsIDApOwogCiAJeXV2ID0gZmJ1Zi0+ZGF0YSArIHBkZXYtPmZyYW1lX2hlYWRlcl9zaXplOyAgLyogU2tpcCBoZWFkZXIgKi8KIApAQCAtNjQsOSArNTUsMTMgQEAKIAkJCSAqIGRldGVybWluZSB0aGlzIHVzaW5nIHRoZSB0eXBlIG9mIHRoZSB3ZWJjYW0gKi8KIAkJbWVtY3B5KHJhd19mcmFtZS0+Y21kLCBwZGV2LT5jbWRfYnVmLCA0KTsKIAkJbWVtY3B5KHJhd19mcmFtZSsxLCB5dXYsIHBkZXYtPmZyYW1lX3NpemUpOworCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmZidWYtPnZiLCAwLAorCQkJcGRldi0+ZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgcHdjX3Jhd19mcmFtZSkpOwogCQlyZXR1cm4gMDsKIAl9CiAKKwl2YjJfc2V0X3BsYW5lX3BheWxvYWQoJmZidWYtPnZiLCAwLCBwZGV2LT52aWV3LnNpemUpOworCiAJaWYgKHBkZXYtPnZiYW5kbGVuZ3RoID09IDApIHsKIAkJLyogVW5jb21wcmVzc2VkIG1vZGUuCiAJCSAqIFdlIGNvcHkgdGhlIGRhdGEgaW50byB0aGUgb3V0cHV0IGJ1ZmZlciwgdXNpbmcgdGhlIHZpZXdwb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMwMjhlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyogKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCi0gICAoQykgMjAwNC0yMDA2IEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKLQotICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4Ci0gICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KLSAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KLSAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQotICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSovCi0KLS8qIFRoaXMgZmlsZSBpcyB0aGUgYnJpZGdlIGJldHdlZW4gdGhlIGtlcm5lbCBtb2R1bGUgYW5kIHRoZSBwbHVnaW47IGl0Ci0gICBkZXNjcmliZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGRhdGF0eXBlcyB1c2VkIGluIGJvdGggbW9kdWxlcy4gQW55Ci0gICBzaWduaWZpY2FudCBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBieSBpbmNyZWFzaW5nIHRoZQotICAgcHdjX2RlY29tcHJlc3Nvcl92ZXJzaW9uIG1ham9yIG51bWJlci4KLSAqLwotI2lmbmRlZiBQV0NfVU5DT01QUkVTU19ICi0jZGVmaW5lIFBXQ19VTkNPTVBSRVNTX0gKLQotCi0jaW5jbHVkZSA8bWVkaWEvcHdjLWlvY3RsLmg+Ci0KLS8qIGZyb20gcHdjLWRlYy5oICovCi0jZGVmaW5lIFBXQ1hfRkxBR19QTEFOQVIgICAgICAgIDB4MDAwMQotLyogKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKaW5kZXggZjg1YzUxMi4uOGM3MGU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYwpAQCAtMiw2ICsyLDcgQEAKICAgIFVTQiBhbmQgVmlkZW80TGludXggaW50ZXJmYWNlIHBhcnQuCiAgICAoQykgMTk5OS0yMDA0IE5lbW9zb2Z0IFVudi4KICAgIChDKSAyMDA0LTIwMDYgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorICAgKEMpIDIwMTEgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KIAogICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CiAgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KQEAgLTMxLDE4NCArMzIsMzMwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJwd2MuaCIKIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBwd2NfY29udHJvbHNbXSA9IHsKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEyOCwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDY0LAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JICAgIC5uYW1lICAgID0gIkNvbnRyYXN0IiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDY0LAotCSAgICAuc3RlcCAgICA9IDEsCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gMCwKLQl9LAotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JICAgIC5uYW1lICAgID0gIlNhdHVyYXRpb24iLAotCSAgICAubWluaW11bSA9IC0xMDAsCi0JICAgIC5tYXhpbXVtID0gMTAwLAotCSAgICAuc3RlcCAgICA9IDEsCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gMCwKLQl9LAotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJHYW1tYSIsCi0JICAgIC5taW5pbXVtID0gMCwKLQkgICAgLm1heGltdW0gPSAzMiwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiUmVkIEdhaW4iLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMjU2LAotCSAgICAuc3RlcCAgICA9IDEsCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gMCwKLQl9LAotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiQmx1ZSBHYWluIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDI1NiwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG8gV2hpdGUgQmFsYW5jZSIsCi0JICAgIC5taW5pbXVtID0gMCwKLQkgICAgLm1heGltdW0gPSAxLAotCSAgICAuc3RlcCAgICA9IDEsCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gMCwKLQl9LAotCXsKLQkgICAgLmlkICAgICAgPSBWNEwyX0NJRF9FWFBPU1VSRSwKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJTaHV0dGVyIFNwZWVkIChFeHBvc3VyZSkiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMjU2LAotCSAgICAuc3RlcCAgICA9IDEsCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gMjAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG8gR2FpbiBFbmFibGVkIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEsCi0JICAgIC5zdGVwICAgID0gMSwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAxLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0dBSU4sCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiR2FpbiBMZXZlbCIsCi0JICAgIC5taW5pbXVtID0gMCwKLQkgICAgLm1heGltdW0gPSAyNTYsCi0JICAgIC5zdGVwICAgID0gMSwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfU0FWRV9VU0VSLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiwKLQkgICAgLm5hbWUgICAgPSAiU2F2ZSBVc2VyIFNldHRpbmdzIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDAsCi0JICAgIC5zdGVwICAgID0gMCwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfUkVTVE9SRV9VU0VSLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiwKLQkgICAgLm5hbWUgICAgPSAiUmVzdG9yZSBVc2VyIFNldHRpbmdzIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDAsCi0JICAgIC5zdGVwICAgID0gMCwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfUkVTVE9SRV9GQUNUT1JZLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiwKLQkgICAgLm5hbWUgICAgPSAiUmVzdG9yZSBGYWN0b3J5IFNldHRpbmdzIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDAsCi0JICAgIC5zdGVwICAgID0gMCwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfQ09MT1VSX01PREUsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkgICAgLm5hbWUgICAgPSAiQ29sb3VyIG1vZGUiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMSwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfUFJJVkFURV9BVVRPQ09OVE9VUiwKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCSAgICAubmFtZSAgICA9ICJBdXRvIGNvbnRvdXIiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMSwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfUFJJVkFURV9DT05UT1VSLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JICAgIC5uYW1lICAgID0gIkNvbnRvdXIiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gNjMsCi0JICAgIC5zdGVwICAgID0gMSwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFDS0xJR0hULAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkJhY2tsaWdodCBjb21wZW5zYXRpb24iLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMSwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAuaWQgICAgICA9IFY0TDJfQ0lEX1BSSVZBVEVfRkxJQ0tFUkxFU1MsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkgICAgLm5hbWUgICAgPSAiRmxpY2tlcmxlc3MiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMSwKLQkgICAgLnN0ZXAgICAgPSAxLAotCSAgICAuZGVmYXVsdF92YWx1ZSA9IDAsCi0JfSwKLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfUFJJVkFURV9OT0lTRV9SRURVQ1RJT04sCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiTm9pc2UgcmVkdWN0aW9uIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDMsCi0JICAgIC5zdGVwICAgID0gMSwKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSAwLAotCX0sCisjZGVmaW5lIFBXQ19DSURfQ1VTVE9NKGN0cmwpICgoVjRMMl9DSURfVVNFUl9CQVNFIHwgMHhmMDAwKSArIGN1c3RvbV8gIyMgY3RybCkKKworc3RhdGljIGludCBwd2NfZ192b2xhdGlsZV9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOworc3RhdGljIGludCBwd2Nfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgcHdjX2N0cmxfb3BzID0geworCS5nX3ZvbGF0aWxlX2N0cmwgPSBwd2NfZ192b2xhdGlsZV9jdHJsLAorCS5zX2N0cmwgPSBwd2Nfc19jdHJsLAogfTsKIAorZW51bSB7IGF3Yl9pbmRvb3IsIGF3Yl9vdXRkb29yLCBhd2JfZmwsIGF3Yl9tYW51YWwsIGF3Yl9hdXRvIH07CitlbnVtIHsgY3VzdG9tX2F1dG9jb250b3VyLCBjdXN0b21fY29udG91ciwgY3VzdG9tX25vaXNlX3JlZHVjdGlvbiwKKwljdXN0b21fc2F2ZV91c2VyLCBjdXN0b21fcmVzdG9yZV91c2VyLCBjdXN0b21fcmVzdG9yZV9mYWN0b3J5IH07CisKK2NvbnN0IGNoYXIgKiBjb25zdCBwd2NfYXV0b193aGl0ZWJhbF9xbWVudVtdID0geworCSJJbmRvb3IgKEluY2FuZGVzY2FudCBMaWdodGluZykgTW9kZSIsCisJIk91dGRvb3IgKFN1bmxpZ2h0KSBNb2RlIiwKKwkiSW5kb29yIChGbHVvcmVzY2VudCBMaWdodGluZykgTW9kZSIsCisJIk1hbnVhbCBNb2RlIiwKKwkiQXV0byBNb2RlIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgcHdjX2F1dG9fd2hpdGVfYmFsYW5jZV9jZmcgPSB7CisJLm9wcwk9ICZwd2NfY3RybF9vcHMsCisJLmlkCT0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAorCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkubWF4CT0gYXdiX2F1dG8sCisJLnFtZW51CT0gcHdjX2F1dG9fd2hpdGViYWxfcW1lbnUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgcHdjX2F1dG9jb250b3VyX2NmZyA9IHsKKwkub3BzCT0gJnB3Y19jdHJsX29wcywKKwkuaWQJPSBQV0NfQ0lEX0NVU1RPTShhdXRvY29udG91ciksCisJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCS5uYW1lCT0gIkF1dG8gY29udG91ciIsCisJLm1pbgk9IDAsCisJLm1heAk9IDEsCisJLnN0ZXAJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIHB3Y19jb250b3VyX2NmZyA9IHsKKwkub3BzCT0gJnB3Y19jdHJsX29wcywKKwkuaWQJPSBQV0NfQ0lEX0NVU1RPTShjb250b3VyKSwKKwkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJLm5hbWUJPSAiQ29udG91ciIsCisJLm1pbgk9IDAsCisJLm1heAk9IDYzLAorCS5zdGVwCT0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyBwd2NfYmFja2xpZ2h0X2NmZyA9IHsKKwkub3BzCT0gJnB3Y19jdHJsX29wcywKKwkuaWQJPSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OLAorCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkubWluCT0gMCwKKwkubWF4CT0gMSwKKwkuc3RlcAk9IDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgcHdjX2ZsaWNrZXJfY2ZnID0geworCS5vcHMJPSAmcHdjX2N0cmxfb3BzLAorCS5pZAk9IFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIsCisJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCS5taW4JPSAwLAorCS5tYXgJPSAxLAorCS5zdGVwCT0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyBwd2Nfbm9pc2VfcmVkdWN0aW9uX2NmZyA9IHsKKwkub3BzCT0gJnB3Y19jdHJsX29wcywKKwkuaWQJPSBQV0NfQ0lEX0NVU1RPTShub2lzZV9yZWR1Y3Rpb24pLAorCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkubmFtZQk9ICJEeW5hbWljIE5vaXNlIFJlZHVjdGlvbiIsCisJLm1pbgk9IDAsCisJLm1heAk9IDMsCisJLnN0ZXAJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIHB3Y19zYXZlX3VzZXJfY2ZnID0geworCS5vcHMJPSAmcHdjX2N0cmxfb3BzLAorCS5pZAk9IFBXQ19DSURfQ1VTVE9NKHNhdmVfdXNlciksCisJLnR5cGUJPSBWNEwyX0NUUkxfVFlQRV9CVVRUT04sCisJLm5hbWUgICAgPSAiU2F2ZSBVc2VyIFNldHRpbmdzIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyBwd2NfcmVzdG9yZV91c2VyX2NmZyA9IHsKKwkub3BzCT0gJnB3Y19jdHJsX29wcywKKwkuaWQJPSBQV0NfQ0lEX0NVU1RPTShyZXN0b3JlX3VzZXIpLAorCS50eXBlCT0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OLAorCS5uYW1lICAgID0gIlJlc3RvcmUgVXNlciBTZXR0aW5ncyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgcHdjX3Jlc3RvcmVfZmFjdG9yeV9jZmcgPSB7CisJLm9wcwk9ICZwd2NfY3RybF9vcHMsCisJLmlkCT0gUFdDX0NJRF9DVVNUT00ocmVzdG9yZV9mYWN0b3J5KSwKKwkudHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiwKKwkubmFtZSAgICA9ICJSZXN0b3JlIEZhY3RvcnkgU2V0dGluZ3MiLAorfTsKKworaW50IHB3Y19pbml0X2NvbnRyb2xzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsOworCXN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIGNmZzsKKwlpbnQgciwgZGVmOworCisJaGRsID0gJnBkZXYtPmN0cmxfaGFuZGxlcjsKKwlyID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDIwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBCcmlnaHRuZXNzLCBjb250cmFzdCwgc2F0dXJhdGlvbiwgZ2FtbWEgKi8KKwlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLCBCUklHSFRORVNTX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgZGVmID4gMTI3KQorCQlkZWYgPSA2MzsKKwlwZGV2LT5icmlnaHRuZXNzID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDEyNywgMSwgZGVmKTsKKworCXIgPSBwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX0xVTV9DVEwsIENPTlRSQVNUX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgZGVmID4gNjMpCisJCWRlZiA9IDMxOworCXBkZXYtPmNvbnRyYXN0ID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX0NPTlRSQVNULCAwLCA2MywgMSwgZGVmKTsKKworCWlmIChwZGV2LT50eXBlID49IDY3NSkgeworCQlpZiAocGRldi0+dHlwZSA8IDczMCkKKwkJCXBkZXYtPnNhdHVyYXRpb25fZm10ID0gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjI7CisJCWVsc2UKKwkJCXBkZXYtPnNhdHVyYXRpb25fZm10ID0gU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjE7CisJCXIgPSBwd2NfZ2V0X3M4X2N0cmwocGRldiwgR0VUX0NIUk9NX0NUTCwgcGRldi0+c2F0dXJhdGlvbl9mbXQsCisJCQkJICAgICZkZWYpOworCQlpZiAociB8fCBkZWYgPCAtMTAwIHx8IGRlZiA+IDEwMCkKKwkJCWRlZiA9IDA7CisJCXBkZXYtPnNhdHVyYXRpb24gPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwd2NfY3RybF9vcHMsCisJCQkJICAgICAgVjRMMl9DSURfU0FUVVJBVElPTiwgLTEwMCwgMTAwLCAxLCBkZWYpOworCX0KKworCXIgPSBwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX0xVTV9DVEwsIEdBTU1BX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgZGVmID4gMzEpCisJCWRlZiA9IDE1OworCXBkZXYtPmdhbW1hID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX0dBTU1BLCAwLCAzMSwgMSwgZGVmKTsKKworCS8qIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVkIGdhaW4sIGJsdWUgZ2FpbiAqLworCXIgPSBwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsICZkZWYpOworCWlmIChyIHx8IGRlZiA+IGF3Yl9hdXRvKQorCQlkZWYgPSBhd2JfYXV0bzsKKwljZmcgPSBwd2NfYXV0b193aGl0ZV9iYWxhbmNlX2NmZzsKKwljZmcubmFtZSA9IHY0bDJfY3RybF9nZXRfbmFtZShjZmcuaWQpOworCWNmZy5kZWYgPSBkZWY7CisJcGRldi0+YXV0b193aGl0ZV9iYWxhbmNlID0gdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmY2ZnLCBOVUxMKTsKKwkvKiBjaGVjayBhdXRvIGNvbnRyb2xzIHRvIGF2b2lkIE5VTEwgZGVyZWYgaW4gdjRsMl9jdHJsX2F1dG9fY2x1c3RlciAqLworCWlmICghcGRldi0+YXV0b193aGl0ZV9iYWxhbmNlKQorCQlyZXR1cm4gaGRsLT5lcnJvcjsKKworCXIgPSBwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX0NIUk9NX0NUTCwKKwkJCSAgICBQUkVTRVRfTUFOVUFMX1JFRF9HQUlOX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIpCisJCWRlZiA9IDEyNzsKKwlwZGV2LT5yZWRfYmFsYW5jZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnB3Y19jdHJsX29wcywKKwkJCQlWNEwyX0NJRF9SRURfQkFMQU5DRSwgMCwgMjU1LCAxLCBkZWYpOworCisJciA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfQ0hST01fQ1RMLAorCQkJICAgIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIpCisJCWRlZiA9IDEyNzsKKwlwZGV2LT5ibHVlX2JhbGFuY2UgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwd2NfY3RybF9vcHMsCisJCQkJVjRMMl9DSURfQkxVRV9CQUxBTkNFLCAwLCAyNTUsIDEsIGRlZik7CisKKwl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDMsICZwZGV2LT5hdXRvX3doaXRlX2JhbGFuY2UsIGF3Yl9tYW51YWwsCisJCQkgICAgICAgcGRldi0+YXV0b193aGl0ZV9iYWxhbmNlLT5jdXIudmFsID09IGF3Yl9hdXRvKTsKKworCS8qIGF1dG9nYWluLCBnYWluICovCisJciA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfTFVNX0NUTCwgQUdDX01PREVfRk9STUFUVEVSLCAmZGVmKTsKKwlpZiAociB8fCAoZGVmICE9IDAgJiYgZGVmICE9IDB4ZmYpKQorCQlkZWYgPSAwOworCS8qIE5vdGUgYSByZWdpc3RlciB2YWx1ZSBpZiAwIG1lYW5zIGF1dG8gZ2FpbiBpcyBvbiAqLworCXBkZXYtPmF1dG9nYWluID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX0FVVE9HQUlOLCAwLCAxLCAxLCBkZWYgPT0gMCk7CisJaWYgKCFwZGV2LT5hdXRvZ2FpbikKKwkJcmV0dXJuIGhkbC0+ZXJyb3I7CisKKwlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLCBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgZGVmID4gNjMpCisJCWRlZiA9IDMxOworCXBkZXYtPmdhaW4gPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwd2NfY3RybF9vcHMsCisJCQkJVjRMMl9DSURfR0FJTiwgMCwgNjMsIDEsIGRlZik7CisKKwkvKiBhdXRvIGV4cG9zdXJlLCBleHBvc3VyZSAqLworCWlmIChERVZJQ0VfVVNFX0NPREVDMihwZGV2LT50eXBlKSkgeworCQlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLCBTSFVUVEVSX01PREVfRk9STUFUVEVSLAorCQkJCSAgICAmZGVmKTsKKwkJaWYgKHIgfHwgKGRlZiAhPSAwICYmIGRlZiAhPSAweGZmKSkKKwkJCWRlZiA9IDA7CisJCS8qCisJCSAqIGRlZiA9IDAgYXV0bywgZGVmID0gZmYgbWFudWFsCisJCSAqIG1lbnUgaWR4IDAgPSBhdXRvLCBpZHggMSA9IG1hbnVhbAorCQkgKi8KKwkJcGRldi0+ZXhwb3N1cmVfYXV0byA9IHY0bDJfY3RybF9uZXdfc3RkX21lbnUoaGRsLAorCQkJCQkmcHdjX2N0cmxfb3BzLAorCQkJCQlWNEwyX0NJRF9FWFBPU1VSRV9BVVRPLAorCQkJCQkxLCAwLCBkZWYgIT0gMCk7CisJCWlmICghcGRldi0+ZXhwb3N1cmVfYXV0bykKKwkJCXJldHVybiBoZGwtPmVycm9yOworCisJCS8qIEdFVF9MVU1fQ1RMLCBQUkVTRVRfU0hVVFRFUl9GT1JNQVRURVIgaXMgdW5yZWxpYWJsZSAqLworCQlyID0gcHdjX2dldF91MTZfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkgICAgIFJFQURfU0hVVFRFUl9GT1JNQVRURVIsICZkZWYpOworCQlpZiAociB8fCBkZWYgPiA2NTUpCisJCQlkZWYgPSA2NTU7CisJCXBkZXYtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCQlWNEwyX0NJRF9FWFBPU1VSRSwgMCwgNjU1LCAxLCBkZWYpOworCQkvKiBDT0RFQzI6IHNlcGFyYXRlIGF1dG8gZ2FpbiAmIGF1dG8gZXhwb3N1cmUgKi8KKwkJdjRsMl9jdHJsX2F1dG9fY2x1c3RlcigyLCAmcGRldi0+YXV0b2dhaW4sIDAsIHRydWUpOworCQl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDIsICZwZGV2LT5leHBvc3VyZV9hdXRvLAorCQkJCSAgICAgICBWNEwyX0VYUE9TVVJFX01BTlVBTCwgdHJ1ZSk7CisJfSBlbHNlIGlmIChERVZJQ0VfVVNFX0NPREVDMyhwZGV2LT50eXBlKSkgeworCQkvKiBHRVRfTFVNX0NUTCwgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSIGlzIHVucmVsaWFibGUgKi8KKwkJciA9IHB3Y19nZXRfdTE2X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJICAgICBSRUFEX1NIVVRURVJfRk9STUFUVEVSLCAmZGVmKTsKKwkJaWYgKHIgfHwgZGVmID4gMjU1KQorCQkJZGVmID0gMjU1OworCQlwZGV2LT5leHBvc3VyZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnB3Y19jdHJsX29wcywKKwkJCQkJVjRMMl9DSURfRVhQT1NVUkUsIDAsIDI1NSwgMSwgZGVmKTsKKwkJLyogQ09ERUMzOiBib3RoIGdhaW4gYW5kIGV4cG9zdXJlIGNvbnRyb2xsZWQgYnkgYXV0b2dhaW4gKi8KKwkJcGRldi0+YXV0b2dhaW5fZXhwb19jbHVzdGVyWzBdID0gcGRldi0+YXV0b2dhaW47CisJCXBkZXYtPmF1dG9nYWluX2V4cG9fY2x1c3RlclsxXSA9IHBkZXYtPmdhaW47CisJCXBkZXYtPmF1dG9nYWluX2V4cG9fY2x1c3RlclsyXSA9IHBkZXYtPmV4cG9zdXJlOworCQl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDMsIHBkZXYtPmF1dG9nYWluX2V4cG9fY2x1c3RlciwKKwkJCQkgICAgICAgMCwgdHJ1ZSk7CisJfQorCisJLyogY29sb3IgLyBidyBzZXR0aW5nICovCisJciA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfQ0hST01fQ1RMLCBDT0xPVVJfTU9ERV9GT1JNQVRURVIsCisJCQkgJmRlZik7CisJaWYgKHIgfHwgKGRlZiAhPSAwICYmIGRlZiAhPSAweGZmKSkKKwkJZGVmID0gMHhmZjsKKwkvKiBkZWYgPSAwIGJ3LCBkZWYgPSBmZiBjb2xvciwgbWVudSBpZHggMCA9IGNvbG9yLCBpZHggMSA9IGJ3ICovCisJcGRldi0+Y29sb3JmeCA9IHY0bDJfY3RybF9uZXdfc3RkX21lbnUoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX0NPTE9SRlgsIDEsIDAsIGRlZiA9PSAwKTsKKworCS8qIGF1dG9jb250b3VyLCBjb250b3VyICovCisJciA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfTFVNX0NUTCwgQVVUT19DT05UT1VSX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgKGRlZiAhPSAwICYmIGRlZiAhPSAweGZmKSkKKwkJZGVmID0gMDsKKwljZmcgPSBwd2NfYXV0b2NvbnRvdXJfY2ZnOworCWNmZy5kZWYgPSBkZWYgPT0gMDsKKwlwZGV2LT5hdXRvY29udG91ciA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKGhkbCwgJmNmZywgTlVMTCk7CisJaWYgKCFwZGV2LT5hdXRvY29udG91cikKKwkJcmV0dXJuIGhkbC0+ZXJyb3I7CisKKwlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLCBQUkVTRVRfQ09OVE9VUl9GT1JNQVRURVIsICZkZWYpOworCWlmIChyIHx8IGRlZiA+IDYzKQorCQlkZWYgPSAzMTsKKwljZmcgPSBwd2NfY29udG91cl9jZmc7CisJY2ZnLmRlZiA9IGRlZjsKKwlwZGV2LT5jb250b3VyID0gdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmY2ZnLCBOVUxMKTsKKworCXY0bDJfY3RybF9hdXRvX2NsdXN0ZXIoMiwgJnBkZXYtPmF1dG9jb250b3VyLCAwLCBmYWxzZSk7CisKKwkvKiBiYWNrbGlnaHQgKi8KKwlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLAorCQkJICAgIEJBQ0tfTElHSFRfQ09NUEVOU0FUSU9OX0ZPUk1BVFRFUiwgJmRlZik7CisJaWYgKHIgfHwgKGRlZiAhPSAwICYmIGRlZiAhPSAweGZmKSkKKwkJZGVmID0gMDsKKwljZmcgPSBwd2NfYmFja2xpZ2h0X2NmZzsKKwljZmcubmFtZSA9IHY0bDJfY3RybF9nZXRfbmFtZShjZmcuaWQpOworCWNmZy5kZWYgPSBkZWYgPT0gMDsKKwlwZGV2LT5iYWNrbGlnaHQgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZjZmcsIE5VTEwpOworCisJLyogZmxpa2tlciByZWRpY3Rpb24gKi8KKwlyID0gcHdjX2dldF91OF9jdHJsKHBkZXYsIEdFVF9MVU1fQ1RMLAorCQkJICAgIEZMSUNLRVJMRVNTX01PREVfRk9STUFUVEVSLCAmZGVmKTsKKwlpZiAociB8fCAoZGVmICE9IDAgJiYgZGVmICE9IDB4ZmYpKQorCQlkZWYgPSAwOworCWNmZyA9IHB3Y19mbGlja2VyX2NmZzsKKwljZmcubmFtZSA9IHY0bDJfY3RybF9nZXRfbmFtZShjZmcuaWQpOworCWNmZy5kZWYgPSBkZWYgPT0gMDsKKwlwZGV2LT5mbGlja2VyID0gdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmY2ZnLCBOVUxMKTsKKworCS8qIER5bmFtaWMgbm9pc2UgcmVkdWN0aW9uICovCisJciA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfTFVNX0NUTCwKKwkJCSAgICBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSLCAmZGVmKTsKKwlpZiAociB8fCBkZWYgPiAzKQorCQlkZWYgPSAyOworCWNmZyA9IHB3Y19ub2lzZV9yZWR1Y3Rpb25fY2ZnOworCWNmZy5kZWYgPSBkZWY7CisJcGRldi0+bm9pc2VfcmVkdWN0aW9uID0gdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmY2ZnLCBOVUxMKTsKKworCS8qIFNhdmUgLyBSZXN0b3JlIFVzZXIgLyBGYWN0b3J5IFNldHRpbmdzICovCisJcGRldi0+c2F2ZV91c2VyID0gdjRsMl9jdHJsX25ld19jdXN0b20oaGRsLCAmcHdjX3NhdmVfdXNlcl9jZmcsIE5VTEwpOworCXBkZXYtPnJlc3RvcmVfdXNlciA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKGhkbCwgJnB3Y19yZXN0b3JlX3VzZXJfY2ZnLAorCQkJCQkJICBOVUxMKTsKKwlpZiAocGRldi0+cmVzdG9yZV91c2VyKQorCQlwZGV2LT5yZXN0b3JlX3VzZXItPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfVVBEQVRFOworCXBkZXYtPnJlc3RvcmVfZmFjdG9yeSA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCQkJCSAgICAgJnB3Y19yZXN0b3JlX2ZhY3RvcnlfY2ZnLAorCQkJCQkJICAgICBOVUxMKTsKKwlpZiAocGRldi0+cmVzdG9yZV9mYWN0b3J5KQorCQlwZGV2LT5yZXN0b3JlX2ZhY3RvcnktPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfVVBEQVRFOworCisJaWYgKCEocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpKQorCQlyZXR1cm4gaGRsLT5lcnJvcjsKKworCS8qIE1vdG9yIHBhbiAvIHRpbHQgLyByZXNldCAqLworCXBkZXYtPm1vdG9yX3BhbiA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnB3Y19jdHJsX29wcywKKwkJCQlWNEwyX0NJRF9QQU5fUkVMQVRJVkUsIC00NDgwLCA0NDgwLCA2NCwgMCk7CisJaWYgKCFwZGV2LT5tb3Rvcl9wYW4pCisJCXJldHVybiBoZGwtPmVycm9yOworCXBkZXYtPm1vdG9yX3RpbHQgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwd2NfY3RybF9vcHMsCisJCQkJVjRMMl9DSURfVElMVF9SRUxBVElWRSwgLTE5MjAsIDE5MjAsIDY0LCAwKTsKKwlwZGV2LT5tb3Rvcl9wYW5fcmVzZXQgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwd2NfY3RybF9vcHMsCisJCQkJVjRMMl9DSURfUEFOX1JFU0VULCAwLCAwLCAwLCAwKTsKKwlwZGV2LT5tb3Rvcl90aWx0X3Jlc2V0ID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcHdjX2N0cmxfb3BzLAorCQkJCVY0TDJfQ0lEX1RJTFRfUkVTRVQsIDAsIDAsIDAsIDApOworCXY0bDJfY3RybF9jbHVzdGVyKDQsICZwZGV2LT5tb3Rvcl9wYW4pOworCisJcmV0dXJuIGhkbC0+ZXJyb3I7Cit9CiAKIHN0YXRpYyB2b2lkIHB3Y192aWRpb2NfZmlsbF9mbXQoY29uc3Qgc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTI4NCwxMCArNDMxLDIxIEBACiB9CiAKIC8qIGlvY3RsKFZJRElPQ19TRVRfRk1UKSAqLwotc3RhdGljIGludCBwd2NfdmlkaW9jX3NldF9mbXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKworc3RhdGljIGludCBwd2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldCwgZnBzLCBzbmFwc2hvdCwgY29tcHJlc3Npb24sIHBpeGVsZm9ybWF0OwogCisJaWYgKCFwZGV2LT51ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGV2LT5jYXB0X2ZpbGUgIT0gTlVMTCAmJgorCSAgICBwZGV2LT5jYXB0X2ZpbGUgIT0gZmlsZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBkZXYtPmNhcHRfZmlsZSA9IGZpbGU7CisKIAlyZXQgPSBwd2NfdmlkaW9jX3RyeV9mbXQocGRldiwgZik7CiAJaWYgKHJldDwwKQogCQlyZXR1cm4gcmV0OwpAQCAtMzA5LDcgKzQ2Nyw3IEBACiAJICAgIHBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9QV0MyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwZGV2LT5pc29faW5pdCkKKwlpZiAodmIyX2lzX3N0cmVhbWluZygmcGRldi0+dmJfcXVldWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJUFdDX0RFQlVHX0lPQ1RMKCJUcnlpbmcgdG8gc2V0IGZvcm1hdCB0bzogd2lkdGg9JWQgaGVpZ2h0PSVkIGZwcz0lZCAiCkBAIC0zNDMsMTMgKzUwMSwxNCBAQAogCiBzdGF0aWMgaW50IHB3Y19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAoIXBkZXYtPnVkZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBQV0NfTkFNRSk7Ci0Jc3RybGNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgcGRldi0+dmRldi5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aChwZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwotCWNhcC0+dmVyc2lvbiA9IFBXQ19WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPQogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFCXwKIAkJVjRMMl9DQVBfU1RSRUFNSU5HCXwKQEAgLTM3NywyNTUgKzUzNiwzOTYgQEAKIAlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOwogfQogCi1zdGF0aWMgaW50IHB3Y19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCitzdGF0aWMgaW50IHB3Y19nX3ZvbGF0aWxlX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKLQlpbnQgaSwgaWR4OwotCXUzMiBpZDsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9CisJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgcHdjX2RldmljZSwgY3RybF9oYW5kbGVyKTsKKwlpbnQgcmV0ID0gMDsKIAotCWlkID0gYy0+aWQ7Ci0JaWYgKGlkICYgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMKSB7Ci0JCWlkICY9IFY0TDJfQ1RSTF9JRF9NQVNLOwotCQlpZCsrOwotCQlpZHggPSAtMTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHdjX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCQlpZiAocHdjX2NvbnRyb2xzW2ldLmlkIDwgaWQpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoaWR4ID49IDAKLQkJCSAmJiBwd2NfY29udHJvbHNbaV0uaWQgPiBwd2NfY29udHJvbHNbaWR4XS5pZCkKLQkJCQljb250aW51ZTsKLQkJCWlkeCA9IGk7Ci0JCX0KLQkJaWYgKGlkeCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWVtY3B5KGMsICZwd2NfY29udHJvbHNbaWR4XSwgc2l6ZW9mIHB3Y19jb250cm9sc1swXSk7Ci0JCXJldHVybiAwOworCS8qCisJICogU29tZXRpbWVzIGl0IGNhbiB0YWtlIHF1aXRlIGxvbmcgZm9yIHRoZSBwd2MgdG8gY29tcGxldGUgdXNiIGNvbnRyb2wKKwkgKiB0cmFuc2ZlcnMsIHNvIHJlbGVhc2UgdGhlIG1vZGxvY2sgdG8gZ2l2ZSBzdHJlYW1pbmcgYnkgYW5vdGhlcgorCSAqIHByb2Nlc3MgLyB0aHJlYWQgdGhlIGNoYW5jZSB0byBjb250aW51ZSB3aXRoIGEgZHFidWYuCisJICovCisJbXV0ZXhfdW5sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKworCS8qCisJICogVGFrZSB0aGUgdWRldi1sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aGUgZGlzY29ubmVjdCBoYW5kbGVyCisJICogY29tcGxldGluZyBhbmQgc2V0dGluZyBkZXYtPnVkZXYgdG8gTlVMTCB1bmRlcm5lYXRoIHVzLiBPdGhlciBjb2RlCisJICogZG9lcyBub3QgbmVlZCB0byBkbyB0aGlzIHNpbmNlIGl0IGlzIHByb3RlY3RlZCBieSB0aGUgbW9kbG9jay4KKwkgKi8KKwltdXRleF9sb2NrKCZwZGV2LT51ZGV2bG9jayk7CisKKwlpZiAoIXBkZXYtPnVkZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihwd2NfY29udHJvbHMpIC8gc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCk7IGkrKykgewotCQlpZiAocHdjX2NvbnRyb2xzW2ldLmlkID09IGMtPmlkKSB7Ci0JCQlQV0NfREVCVUdfSU9DVEwoImlvY3RsKFZJRElPQ19RVUVSWUNUUkwpIGZvdW5kXG4iKTsKLQkJCW1lbWNweShjLCAmcHdjX2NvbnRyb2xzW2ldLCBzaXplb2Yoc3RydWN0IHY0bDJfcXVlcnljdHJsKSk7Ci0JCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJaWYgKHBkZXYtPmNvbG9yX2JhbF92YWxpZCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXBkZXYtPmxhc3RfY29sb3JfYmFsX3VwZGF0ZSArIEhaIC8gNCkpIHsKKwkJCXBkZXYtPnJlZF9iYWxhbmNlLT52YWwgID0gcGRldi0+bGFzdF9yZWRfYmFsYW5jZTsKKwkJCXBkZXYtPmJsdWVfYmFsYW5jZS0+dmFsID0gcGRldi0+bGFzdF9ibHVlX2JhbGFuY2U7CisJCQlicmVhazsKIAkJfQorCQlyZXQgPSBwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJICAgICAgUkVBRF9SRURfR0FJTl9GT1JNQVRURVIsCisJCQkJICAgICAgJnBkZXYtPnJlZF9iYWxhbmNlLT52YWwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJldCA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkgICAgICBSRUFEX0JMVUVfR0FJTl9GT1JNQVRURVIsCisJCQkJICAgICAgJnBkZXYtPmJsdWVfYmFsYW5jZS0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlwZGV2LT5sYXN0X3JlZF9iYWxhbmNlICA9IHBkZXYtPnJlZF9iYWxhbmNlLT52YWw7CisJCXBkZXYtPmxhc3RfYmx1ZV9iYWxhbmNlID0gcGRldi0+Ymx1ZV9iYWxhbmNlLT52YWw7CisJCXBkZXYtPmxhc3RfY29sb3JfYmFsX3VwZGF0ZSA9IGppZmZpZXM7CisJCXBkZXYtPmNvbG9yX2JhbF92YWxpZCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJCWlmIChwZGV2LT5nYWluX3ZhbGlkICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJcGRldi0+bGFzdF9nYWluX3VwZGF0ZSArIEhaIC8gNCkpIHsKKwkJCXBkZXYtPmdhaW4tPnZhbCA9IHBkZXYtPmxhc3RfZ2FpbjsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkgICAgICBSRUFEX0FHQ19GT1JNQVRURVIsICZwZGV2LT5nYWluLT52YWwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXBkZXYtPmxhc3RfZ2FpbiA9IHBkZXYtPmdhaW4tPnZhbDsKKwkJcGRldi0+bGFzdF9nYWluX3VwZGF0ZSA9IGppZmZpZXM7CisJCXBkZXYtPmdhaW5fdmFsaWQgPSB0cnVlOworCQlpZiAoIURFVklDRV9VU0VfQ09ERUMzKHBkZXYtPnR5cGUpKQorCQkJYnJlYWs7CisJCS8qIEZhbGwgdGhyb3VnaCBmb3IgQ09ERUMzIHdoZXJlIGF1dG9nYWluIGFsc28gY29udHJvbHMgZXhwbyAqLworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKKwkJaWYgKHBkZXYtPmV4cG9zdXJlX3ZhbGlkICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJcGRldi0+bGFzdF9leHBvc3VyZV91cGRhdGUgKyBIWiAvIDQpKSB7CisJCQlwZGV2LT5leHBvc3VyZS0+dmFsID0gcGRldi0+bGFzdF9leHBvc3VyZTsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHB3Y19nZXRfdTE2X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJICAgICAgIFJFQURfU0hVVFRFUl9GT1JNQVRURVIsCisJCQkJICAgICAgICZwZGV2LT5leHBvc3VyZS0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlwZGV2LT5sYXN0X2V4cG9zdXJlID0gcGRldi0+ZXhwb3N1cmUtPnZhbDsKKwkJcGRldi0+bGFzdF9leHBvc3VyZV91cGRhdGUgPSBqaWZmaWVzOworCQlwZGV2LT5leHBvc3VyZV92YWxpZCA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CiAJfQotCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJldCkKKwkJUFdDX0VSUk9SKCJnX2N0cmwgJXMgZXJyb3IgJWRcbiIsIGN0cmwtPm5hbWUsIHJldCk7CisKK2xlYXZlOgorCW11dGV4X3VubG9jaygmcGRldi0+dWRldmxvY2spOworCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHdjX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCitzdGF0aWMgaW50IHB3Y19zZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJYy0+dmFsdWUgPSBwd2NfZ2V0X2JyaWdodG5lc3MocGRldik7Ci0JCWlmIChjLT52YWx1ZSA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJYy0+dmFsdWUgPSBwd2NfZ2V0X2NvbnRyYXN0KHBkZXYpOwotCQlpZiAoYy0+dmFsdWUgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJcmV0ID0gcHdjX2dldF9zYXR1cmF0aW9uKHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfR0FNTUE6Ci0JCWMtPnZhbHVlID0gcHdjX2dldF9nYW1tYShwZGV2KTsKLQkJaWYgKGMtPnZhbHVlIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgotCQlyZXQgPSBwd2NfZ2V0X3JlZF9nYWluKHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWMtPnZhbHVlID4+PSA4OwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLQkJcmV0ID0gcHdjX2dldF9ibHVlX2dhaW4ocGRldiwgJmMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYy0+dmFsdWUgPj49IDg7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgotCQlyZXQgPSBwd2NfZ2V0X2F3YihwZGV2KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYy0+dmFsdWUgPSAocmV0ID09IFBXQ19XQl9NQU5VQUwpID8gMCA6IDE7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfR0FJTjoKLQkJcmV0ID0gcHdjX2dldF9hZ2MocGRldiwgJmMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYy0+dmFsdWUgPj49IDg7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46Ci0JCXJldCA9IHB3Y19nZXRfYWdjKHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWMtPnZhbHVlID0gKGMtPnZhbHVlIDwgMCkgPyAxIDogMDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKLQkJcmV0ID0gcHdjX2dldF9zaHV0dGVyX3NwZWVkKHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DT0xPVVJfTU9ERToKLQkJcmV0ID0gcHdjX2dldF9jb2xvdXJfbW9kZShwZGV2LCAmYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQVVUT0NPTlRPVVI6Ci0JCXJldCA9IHB3Y19nZXRfY29udG91cihwZGV2LCAmYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljLT52YWx1ZSA9IChjLT52YWx1ZSA9PSAtMSA/IDEgOiAwKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9QUklWQVRFX0NPTlRPVVI6Ci0JCXJldCA9IHB3Y19nZXRfY29udG91cihwZGV2LCAmYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljLT52YWx1ZSA+Pj0gMTA7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfUFJJVkFURV9CQUNLTElHSFQ6Ci0JCXJldCA9IHB3Y19nZXRfYmFja2xpZ2h0KHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfUFJJVkFURV9GTElDS0VSTEVTUzoKLQkJcmV0ID0gcHdjX2dldF9mbGlja2VyKHBkZXYsICZjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWMtPnZhbHVlID0gKGMtPnZhbHVlID8gMSA6IDApOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfTk9JU0VfUkVEVUNUSU9OOgotCQlyZXQgPSBwd2NfZ2V0X2R5bmFtaWNfbm9pc2UocGRldiwgJmMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7CisJaWYgKHBkZXYtPmF1dG9fd2hpdGVfYmFsYW5jZS0+aXNfbmV3KSB7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfQ0hST01fQ1RMLAorCQkJCSAgICAgIFdCX01PREVfRk9STUFUVEVSLAorCQkJCSAgICAgIHBkZXYtPmF1dG9fd2hpdGVfYmFsYW5jZS0+dmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfU0FWRV9VU0VSOgotCWNhc2UgVjRMMl9DSURfUFJJVkFURV9SRVNUT1JFX1VTRVI6Ci0JY2FzZSBWNEwyX0NJRF9QUklWQVRFX1JFU1RPUkVfRkFDVE9SWToKLQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIFVwZGF0ZSB2YWwgd2hlbiBjb21pbmcgZnJvbSBhdXRvIG9yIGdvaW5nIHRvIGEgcHJlc2V0ICovCisJCWlmIChwZGV2LT5yZWRfYmFsYW5jZS0+aXNfdm9sYXRpbGUgfHwKKwkJICAgIHBkZXYtPmF1dG9fd2hpdGVfYmFsYW5jZS0+dmFsID09IGF3Yl9pbmRvb3IgfHwKKwkJICAgIHBkZXYtPmF1dG9fd2hpdGVfYmFsYW5jZS0+dmFsID09IGF3Yl9vdXRkb29yIHx8CisJCSAgICBwZGV2LT5hdXRvX3doaXRlX2JhbGFuY2UtPnZhbCA9PSBhd2JfZmwpIHsKKwkJCWlmICghcGRldi0+cmVkX2JhbGFuY2UtPmlzX25ldykKKwkJCQlwd2NfZ2V0X3U4X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJCVJFQURfUkVEX0dBSU5fRk9STUFUVEVSLAorCQkJCQkmcGRldi0+cmVkX2JhbGFuY2UtPnZhbCk7CisJCQlpZiAoIXBkZXYtPmJsdWVfYmFsYW5jZS0+aXNfbmV3KQorCQkJCXB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkJUkVBRF9CTFVFX0dBSU5fRk9STUFUVEVSLAorCQkJCQkmcGRldi0+Ymx1ZV9iYWxhbmNlLT52YWwpOworCQl9CisJCWlmIChwZGV2LT5hdXRvX3doaXRlX2JhbGFuY2UtPnZhbCA9PSBhd2JfYXV0bykgeworCQkJcGRldi0+cmVkX2JhbGFuY2UtPmlzX3ZvbGF0aWxlID0gdHJ1ZTsKKwkJCXBkZXYtPmJsdWVfYmFsYW5jZS0+aXNfdm9sYXRpbGUgPSB0cnVlOworCQkJcGRldi0+Y29sb3JfYmFsX3ZhbGlkID0gZmFsc2U7IC8qIEZvcmNlIGNhY2hlIHVwZGF0ZSAqLworCQl9IGVsc2UgeworCQkJcGRldi0+cmVkX2JhbGFuY2UtPmlzX3ZvbGF0aWxlID0gZmFsc2U7CisJCQlwZGV2LT5ibHVlX2JhbGFuY2UtPmlzX3ZvbGF0aWxlID0gZmFsc2U7CisJCX0KIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmV0ID09IDAgJiYgcGRldi0+cmVkX2JhbGFuY2UtPmlzX25ldykgeworCQlpZiAocGRldi0+YXV0b193aGl0ZV9iYWxhbmNlLT52YWwgIT0gYXdiX21hbnVhbCkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfQ0hST01fQ1RMLAorCQkJCSAgICAgIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSLAorCQkJCSAgICAgIHBkZXYtPnJlZF9iYWxhbmNlLT52YWwpOworCX0KKworCWlmIChyZXQgPT0gMCAmJiBwZGV2LT5ibHVlX2JhbGFuY2UtPmlzX25ldykgeworCQlpZiAocGRldi0+YXV0b193aGl0ZV9iYWxhbmNlLT52YWwgIT0gYXdiX21hbnVhbCkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfQ0hST01fQ1RMLAorCQkJCSAgICAgIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwKKwkJCQkgICAgICBwZGV2LT5ibHVlX2JhbGFuY2UtPnZhbCk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHdjX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCisvKiBGb3IgQ09ERUMyIG1vZGVscyB3aGljaCBoYXZlIHNlcGFyYXRlIGF1dG9nYWluIGFuZCBhdXRvIGV4cG9zdXJlICovCitzdGF0aWMgaW50IHB3Y19zZXRfYXV0b2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljLT52YWx1ZSA8PD0gOTsKLQkJcmV0ID0gcHdjX3NldF9icmlnaHRuZXNzKHBkZXYsIGMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJYy0+dmFsdWUgPDw9IDEwOwotCQlyZXQgPSBwd2Nfc2V0X2NvbnRyYXN0KHBkZXYsIGMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlyZXQgPSBwd2Nfc2V0X3NhdHVyYXRpb24ocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0dBTU1BOgotCQljLT52YWx1ZSA8PD0gMTE7Ci0JCXJldCA9IHB3Y19zZXRfZ2FtbWEocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgotCQljLT52YWx1ZSA8PD0gODsKLQkJcmV0ID0gcHdjX3NldF9yZWRfZ2FpbihwZGV2LCBjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgotCQljLT52YWx1ZSA8PD0gODsKLQkJcmV0ID0gcHdjX3NldF9ibHVlX2dhaW4ocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKLQkJYy0+dmFsdWUgPSAoYy0+dmFsdWUgPT0gMCkgPyBQV0NfV0JfTUFOVUFMIDogUFdDX1dCX0FVVE87Ci0JCXJldCA9IHB3Y19zZXRfYXdiKHBkZXYsIGMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKLQkJYy0+dmFsdWUgPDw9IDg7Ci0JCXJldCA9IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChwZGV2LCBjLT52YWx1ZSA/IDAgOiAxLCBjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46Ci0JCS8qIGF1dG9nYWluIG9mZiBtZWFucyBub3RoaW5nIHdpdGhvdXQgYSBnYWluICovCi0JCWlmIChjLT52YWx1ZSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXJldCA9IHB3Y19zZXRfYWdjKHBkZXYsIGMtPnZhbHVlLCAwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9HQUlOOgotCQljLT52YWx1ZSA8PD0gODsKLQkJcmV0ID0gcHdjX3NldF9hZ2MocGRldiwgMCwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfU0FWRV9VU0VSOgotCQlpZiAocHdjX3NhdmVfdXNlcihwZGV2KSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfUkVTVE9SRV9VU0VSOgotCQlpZiAocHdjX3Jlc3RvcmVfdXNlcihwZGV2KSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfUkVTVE9SRV9GQUNUT1JZOgotCQlpZiAocHdjX3Jlc3RvcmVfZmFjdG9yeShwZGV2KSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ09MT1VSX01PREU6Ci0JCXJldCA9IHB3Y19zZXRfY29sb3VyX21vZGUocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQVVUT0NPTlRPVVI6Ci0JCWMtPnZhbHVlID0gKGMtPnZhbHVlID09IDEpID8gLTEgOiAwOwotCQlyZXQgPSBwd2Nfc2V0X2NvbnRvdXIocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ09OVE9VUjoKLQkJYy0+dmFsdWUgPDw9IDEwOwotCQlyZXQgPSBwd2Nfc2V0X2NvbnRvdXIocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQkFDS0xJR0hUOgotCQlyZXQgPSBwd2Nfc2V0X2JhY2tsaWdodChwZGV2LCBjLT52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfUFJJVkFURV9GTElDS0VSTEVTUzoKLQkJcmV0ID0gcHdjX3NldF9mbGlja2VyKHBkZXYsIGMtPnZhbHVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfTk9JU0VfUkVEVUNUSU9OOgotCQlyZXQgPSBwd2Nfc2V0X2R5bmFtaWNfbm9pc2UocGRldiwgYy0+dmFsdWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQorCWlmIChwZGV2LT5hdXRvZ2Fpbi0+aXNfbmV3KSB7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBBR0NfTU9ERV9GT1JNQVRURVIsCisJCQkJICAgICAgcGRldi0+YXV0b2dhaW4tPnZhbCA/IDAgOiAweGZmKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChwZGV2LT5hdXRvZ2Fpbi0+dmFsKQorCQkJcGRldi0+Z2Fpbl92YWxpZCA9IGZhbHNlOyAvKiBGb3JjZSBjYWNoZSB1cGRhdGUgKi8KKwkJZWxzZSBpZiAoIXBkZXYtPmdhaW4tPmlzX25ldykKKwkJCXB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkJUkVBRF9BR0NfRk9STUFUVEVSLAorCQkJCQkmcGRldi0+Z2Fpbi0+dmFsKTsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJldCA9PSAwICYmIHBkZXYtPmdhaW4tPmlzX25ldykgeworCQlpZiAocGRldi0+YXV0b2dhaW4tPnZhbCkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwKKwkJCQkgICAgICBwZGV2LT5nYWluLT52YWwpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBGb3IgQ09ERUMyIG1vZGVscyB3aGljaCBoYXZlIHNlcGFyYXRlIGF1dG9nYWluIGFuZCBhdXRvIGV4cG9zdXJlICovCitzdGF0aWMgaW50IHB3Y19zZXRfZXhwb3N1cmVfYXV0byhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaXNfYXV0byA9IHBkZXYtPmV4cG9zdXJlX2F1dG8tPnZhbCA9PSBWNEwyX0VYUE9TVVJFX0FVVE87CisKKwlpZiAocGRldi0+ZXhwb3N1cmVfYXV0by0+aXNfbmV3KSB7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBTSFVUVEVSX01PREVfRk9STUFUVEVSLAorCQkJCSAgICAgIGlzX2F1dG8gPyAwIDogMHhmZik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZiAoaXNfYXV0bykKKwkJCXBkZXYtPmV4cG9zdXJlX3ZhbGlkID0gZmFsc2U7IC8qIEZvcmNlIGNhY2hlIHVwZGF0ZSAqLworCQllbHNlIGlmICghcGRldi0+ZXhwb3N1cmUtPmlzX25ldykKKwkJCXB3Y19nZXRfdTE2X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJCSBSRUFEX1NIVVRURVJfRk9STUFUVEVSLAorCQkJCQkgJnBkZXYtPmV4cG9zdXJlLT52YWwpOworCX0KKwlpZiAocmV0ID09IDAgJiYgcGRldi0+ZXhwb3N1cmUtPmlzX25ldykgeworCQlpZiAoaXNfYXV0bykKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdTE2X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgIFBSRVNFVF9TSFVUVEVSX0ZPUk1BVFRFUiwKKwkJCQkgICAgICAgcGRldi0+ZXhwb3N1cmUtPnZhbCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIEZvciBDT0RFQzMgbW9kZWxzIHdoaWNoIGhhdmUgYXV0b2dhaW4gY29udHJvbGxpbmcgYm90aCBnYWluIGFuZCBleHBvc3VyZSAqLworc3RhdGljIGludCBwd2Nfc2V0X2F1dG9nYWluX2V4cG8oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGRldi0+YXV0b2dhaW4tPmlzX25ldykgeworCQlyZXQgPSBwd2Nfc2V0X3U4X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgQUdDX01PREVfRk9STUFUVEVSLAorCQkJCSAgICAgIHBkZXYtPmF1dG9nYWluLT52YWwgPyAwIDogMHhmZik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZiAocGRldi0+YXV0b2dhaW4tPnZhbCkgeworCQkJcGRldi0+Z2Fpbl92YWxpZCAgICAgPSBmYWxzZTsgLyogRm9yY2UgY2FjaGUgdXBkYXRlICovCisJCQlwZGV2LT5leHBvc3VyZV92YWxpZCA9IGZhbHNlOyAvKiBGb3JjZSBjYWNoZSB1cGRhdGUgKi8KKwkJfSBlbHNlIHsKKwkJCWlmICghcGRldi0+Z2Fpbi0+aXNfbmV3KQorCQkJCXB3Y19nZXRfdThfY3RybChwZGV2LCBHRVRfU1RBVFVTX0NUTCwKKwkJCQkJCVJFQURfQUdDX0ZPUk1BVFRFUiwKKwkJCQkJCSZwZGV2LT5nYWluLT52YWwpOworCQkJaWYgKCFwZGV2LT5leHBvc3VyZS0+aXNfbmV3KQorCQkJCXB3Y19nZXRfdTE2X2N0cmwocGRldiwgR0VUX1NUQVRVU19DVEwsCisJCQkJCQkgUkVBRF9TSFVUVEVSX0ZPUk1BVFRFUiwKKwkJCQkJCSAmcGRldi0+ZXhwb3N1cmUtPnZhbCk7CisJCX0KKwl9CisJaWYgKHJldCA9PSAwICYmIHBkZXYtPmdhaW4tPmlzX25ldykgeworCQlpZiAocGRldi0+YXV0b2dhaW4tPnZhbCkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBQUkVTRVRfQUdDX0ZPUk1BVFRFUiwKKwkJCQkgICAgICBwZGV2LT5nYWluLT52YWwpOworCX0KKwlpZiAocmV0ID09IDAgJiYgcGRldi0+ZXhwb3N1cmUtPmlzX25ldykgeworCQlpZiAocGRldi0+YXV0b2dhaW4tPnZhbCkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldCA9IHB3Y19zZXRfdTE2X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgIFBSRVNFVF9TSFVUVEVSX0ZPUk1BVFRFUiwKKwkJCQkgICAgICAgcGRldi0+ZXhwb3N1cmUtPnZhbCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHdjX3NldF9tb3RvcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXU4IGJ1Zls0XTsKKworCWJ1ZlswXSA9IDA7CisJaWYgKHBkZXYtPm1vdG9yX3Bhbl9yZXNldC0+aXNfbmV3KQorCQlidWZbMF0gfD0gMHgwMTsKKwlpZiAocGRldi0+bW90b3JfdGlsdF9yZXNldC0+aXNfbmV3KQorCQlidWZbMF0gfD0gMHgwMjsKKwlpZiAocGRldi0+bW90b3JfcGFuX3Jlc2V0LT5pc19uZXcgfHwgcGRldi0+bW90b3JfdGlsdF9yZXNldC0+aXNfbmV3KSB7CisJCXJldCA9IHNlbmRfY29udHJvbF9tc2cocGRldiwgU0VUX01QVF9DVEwsCisJCQkJICAgICAgIFBUX1JFU0VUX0NPTlRST0xfRk9STUFUVEVSLCBidWYsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWlmIChwZGV2LT5tb3Rvcl9wYW4tPmlzX25ldykgeworCQlidWZbMF0gPSBwZGV2LT5tb3Rvcl9wYW4tPnZhbCAmIDB4RkY7CisJCWJ1ZlsxXSA9IChwZGV2LT5tb3Rvcl9wYW4tPnZhbCA+PiA4KTsKKwl9CisJaWYgKHBkZXYtPm1vdG9yX3RpbHQtPmlzX25ldykgeworCQlidWZbMl0gPSBwZGV2LT5tb3Rvcl90aWx0LT52YWwgJiAweEZGOworCQlidWZbM10gPSAocGRldi0+bW90b3JfdGlsdC0+dmFsID4+IDgpOworCX0KKwlpZiAocGRldi0+bW90b3JfcGFuLT5pc19uZXcgfHwgcGRldi0+bW90b3JfdGlsdC0+aXNfbmV3KSB7CisJCXJldCA9IHNlbmRfY29udHJvbF9tc2cocGRldiwgU0VUX01QVF9DVEwsCisJCQkJICAgICAgIFBUX1JFTEFUSVZFX0NPTlRST0xfRk9STUFUVEVSLAorCQkJCSAgICAgICBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB3Y19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9CisJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgcHdjX2RldmljZSwgY3RybF9oYW5kbGVyKTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFNlZSB0aGUgY29tbWVudHMgb24gbG9ja2luZyBpbiBwd2NfZ192b2xhdGlsZV9jdHJsICovCisJbXV0ZXhfdW5sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKwltdXRleF9sb2NrKCZwZGV2LT51ZGV2bG9jayk7CisKKwlpZiAoIXBkZXYtPnVkZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXQgPSBwd2Nfc2V0X3U4X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgQlJJR0hUTkVTU19GT1JNQVRURVIsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBDT05UUkFTVF9GT1JNQVRURVIsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0ID0gcHdjX3NldF9zOF9jdHJsKHBkZXYsIFNFVF9DSFJPTV9DVEwsCisJCQkJICAgICAgcGRldi0+c2F0dXJhdGlvbl9mbXQsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FNTUE6CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBHQU1NQV9GT1JNQVRURVIsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgorCQlyZXQgPSBwd2Nfc2V0X2F3YihwZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwkJaWYgKERFVklDRV9VU0VfQ09ERUMyKHBkZXYtPnR5cGUpKQorCQkJcmV0ID0gcHdjX3NldF9hdXRvZ2FpbihwZGV2KTsKKwkJZWxzZSBpZiAoREVWSUNFX1VTRV9DT0RFQzMocGRldi0+dHlwZSkpCisJCQlyZXQgPSBwd2Nfc2V0X2F1dG9nYWluX2V4cG8ocGRldik7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKKwkJaWYgKERFVklDRV9VU0VfQ09ERUMyKHBkZXYtPnR5cGUpKQorCQkJcmV0ID0gcHdjX3NldF9leHBvc3VyZV9hdXRvKHBkZXYpOworCQllbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfQ0hST01fQ1RMLAorCQkJCSAgICAgIENPTE9VUl9NT0RFX0ZPUk1BVFRFUiwKKwkJCQkgICAgICBjdHJsLT52YWwgPyAwIDogMHhmZik7CisJCWJyZWFrOworCWNhc2UgUFdDX0NJRF9DVVNUT00oYXV0b2NvbnRvdXIpOgorCQlpZiAocGRldi0+YXV0b2NvbnRvdXItPmlzX25ldykgeworCQkJcmV0ID0gcHdjX3NldF91OF9jdHJsKHBkZXYsIFNFVF9MVU1fQ1RMLAorCQkJCQlBVVRPX0NPTlRPVVJfRk9STUFUVEVSLAorCQkJCQlwZGV2LT5hdXRvY29udG91ci0+dmFsID8gMCA6IDB4ZmYpOworCQl9CisJCWlmIChyZXQgPT0gMCAmJiBwZGV2LT5jb250b3VyLT5pc19uZXcpIHsKKwkJCWlmIChwZGV2LT5hdXRvY29udG91ci0+dmFsKSB7CisJCQkJcmV0ID0gLUVCVVNZOworCQkJCWJyZWFrOworCQkJfQorCQkJcmV0ID0gcHdjX3NldF91OF9jdHJsKHBkZXYsIFNFVF9MVU1fQ1RMLAorCQkJCQkgICAgICBQUkVTRVRfQ09OVE9VUl9GT1JNQVRURVIsCisJCQkJCSAgICAgIHBkZXYtPmNvbnRvdXItPnZhbCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OOgorCQlyZXQgPSBwd2Nfc2V0X3U4X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgQkFDS19MSUdIVF9DT01QRU5TQVRJT05fRk9STUFUVEVSLAorCQkJCSAgICAgIGN0cmwtPnZhbCA/IDAgOiAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CQU5EX1NUT1BfRklMVEVSOgorCQlyZXQgPSBwd2Nfc2V0X3U4X2N0cmwocGRldiwgU0VUX0xVTV9DVEwsCisJCQkJICAgICAgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsCisJCQkJICAgICAgY3RybC0+dmFsID8gMCA6IDB4ZmYpOworCQlicmVhazsKKwljYXNlIFBXQ19DSURfQ1VTVE9NKG5vaXNlX3JlZHVjdGlvbik6CisJCXJldCA9IHB3Y19zZXRfdThfY3RybChwZGV2LCBTRVRfTFVNX0NUTCwKKwkJCQkgICAgICBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSLAorCQkJCSAgICAgIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgUFdDX0NJRF9DVVNUT00oc2F2ZV91c2VyKToKKwkJcmV0ID0gcHdjX2J1dHRvbl9jdHJsKHBkZXYsIFNBVkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIpOworCQlicmVhazsKKwljYXNlIFBXQ19DSURfQ1VTVE9NKHJlc3RvcmVfdXNlcik6CisJCXJldCA9IHB3Y19idXR0b25fY3RybChwZGV2LCBSRVNUT1JFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSKTsKKwkJYnJlYWs7CisJY2FzZSBQV0NfQ0lEX0NVU1RPTShyZXN0b3JlX2ZhY3RvcnkpOgorCQlyZXQgPSBwd2NfYnV0dG9uX2N0cmwocGRldiwKKwkJCQkgICAgICBSRVNUT1JFX0ZBQ1RPUllfREVGQVVMVFNfRk9STUFUVEVSKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CisJCXJldCA9IHB3Y19zZXRfbW90b3IocGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJaWYgKHJldCkKKwkJUFdDX0VSUk9SKCJzX2N0cmwgJXMgZXJyb3IgJWRcbiIsIGN0cmwtPm5hbWUsIHJldCk7CisKK2xlYXZlOgorCW11dGV4X3VubG9jaygmcGRldi0+dWRldmxvY2spOworCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcHdjX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQpAQCAtNjY3LDE1NyArOTY3LDc3IEBACiAJcmV0dXJuIHB3Y192aWRpb2NfdHJ5X2ZtdChwZGV2LCBmKTsKIH0KIAotc3RhdGljIGludCBwd2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3N0YXRpYyBpbnQgcHdjX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkgICAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQogewogCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXJldHVybiBwd2NfdmlkaW9jX3NldF9mbXQocGRldiwgZik7Ci19CisJaWYgKHBkZXYtPmNhcHRfZmlsZSAhPSBOVUxMICYmCisJICAgIHBkZXYtPmNhcHRfZmlsZSAhPSBmaWxlKQorCQlyZXR1cm4gLUVCVVNZOwogCi1zdGF0aWMgaW50IHB3Y19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQotewotCWludCBuYnVmZmVyczsKKwlwZGV2LT5jYXB0X2ZpbGUgPSBmaWxlOwogCi0JUFdDX0RFQlVHX0lPQ1RMKCJpb2N0bChWSURJT0NfUkVRQlVGUykgY291bnQ9JWRcbiIsIHJiLT5jb3VudCk7Ci0JaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQluYnVmZmVycyA9IHJiLT5jb3VudDsKLQlpZiAobmJ1ZmZlcnMgPCAyKQotCQluYnVmZmVycyA9IDI7Ci0JZWxzZSBpZiAobmJ1ZmZlcnMgPiBwd2NfbWJ1ZnMpCi0JCW5idWZmZXJzID0gcHdjX21idWZzOwotCS8qIEZvcmNlIHRvIHVzZSBvdXIgIyBvZiBidWZmZXJzICovCi0JcmItPmNvdW50ID0gcHdjX21idWZzOwotCXJldHVybiAwOworCXJldHVybiB2YjJfcmVxYnVmcygmcGRldi0+dmJfcXVldWUsIHJiKTsKIH0KIAogc3RhdGljIGludCBwd2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGluZGV4OwogCi0JUFdDX0RFQlVHX0lPQ1RMKCJpb2N0bChWSURJT0NfUVVFUllCVUYpIGluZGV4PSVkXG4iLCBidWYtPmluZGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQlQV0NfREVCVUdfSU9DVEwoImlvY3RsKFZJRElPQ19RVUVSWUJVRikgQmFkIHR5cGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaW5kZXggPSBidWYtPmluZGV4OwotCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gcHdjX21idWZzKSB7Ci0JCVBXQ19ERUJVR19JT0NUTCgiaW9jdGwoVklESU9DX1FVRVJZQlVGKSBCYWQgaW5kZXggJWRcbiIsIGJ1Zi0+aW5kZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlidWYtPm0ub2Zmc2V0ID0gaW5kZXggKiBwZGV2LT5sZW5fcGVyX2ltYWdlOwotCWlmIChwZGV2LT5waXhmbXQgIT0gVjRMMl9QSVhfRk1UX1lVVjQyMCkKLQkJYnVmLT5ieXRlc3VzZWQgPSBwZGV2LT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBwd2NfcmF3X2ZyYW1lKTsKLQllbHNlCi0JCWJ1Zi0+Ynl0ZXN1c2VkID0gcGRldi0+dmlldy5zaXplOwotCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOwotCS8qYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOyovCi0JYnVmLT5sZW5ndGggPSBwZGV2LT5sZW5fcGVyX2ltYWdlOwotCi0JUFdDX0RFQlVHX1JFQUQoIlZJRElPQ19RVUVSWUJVRjogaW5kZXg9JWRcbiIsIGJ1Zi0+aW5kZXgpOwotCVBXQ19ERUJVR19SRUFEKCJWSURJT0NfUVVFUllCVUY6IG0ub2Zmc2V0PSVkXG4iLCBidWYtPm0ub2Zmc2V0KTsKLQlQV0NfREVCVUdfUkVBRCgiVklESU9DX1FVRVJZQlVGOiBieXRlc3VzZWQ9JWRcbiIsIGJ1Zi0+Ynl0ZXN1c2VkKTsKLQotCXJldHVybiAwOworCXJldHVybiB2YjJfcXVlcnlidWYoJnBkZXYtPnZiX3F1ZXVlLCBidWYpOwogfQogCiBzdGF0aWMgaW50IHB3Y19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JUFdDX0RFQlVHX0lPQ1RMKCJpb2N0bChWSURJT0NfUUJVRikgaW5kZXg9JWRcbiIsIGJ1Zi0+aW5kZXgpOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGJ1Zi0+aW5kZXggPj0gcHdjX21idWZzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwotCWJ1Zi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKKwlpZiAoIXBkZXYtPnVkZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIDA7CisJaWYgKHBkZXYtPmNhcHRfZmlsZSAhPSBmaWxlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIHZiMl9xYnVmKCZwZGV2LT52Yl9xdWV1ZSwgYnVmKTsKIH0KIAogc3RhdGljIGludCBwd2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKIHsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldDsKIAotCVBXQ19ERUJVR19JT0NUTCgiaW9jdGwoVklESU9DX0RRQlVGKVxuIik7CisJaWYgKCFwZGV2LT51ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocGRldi0+Y2FwdF9maWxlICE9IGZpbGUpCisJCXJldHVybiAtRUJVU1k7CiAKLQlhZGRfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7Ci0Jd2hpbGUgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKLQkJaWYgKHBkZXYtPmVycm9yX3N0YXR1cykgewotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzOwotCQl9Ci0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJfQotCQltdXRleF91bmxvY2soJnBkZXYtPm1vZGxvY2spOwotCQlzY2hlZHVsZSgpOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQltdXRleF9sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0KLQlQV0NfREVCVUdfSU9DVEwoIlZJRElPQ19EUUJVRjogZnJhbWUgcmVhZHkuXG4iKTsKLQkvKiBEZWNvbXByZXNzIGRhdGEgaW4gcGRldi0+aW1hZ2VzW3BkZXYtPmZpbGxfaW1hZ2VdICovCi0JcmV0ID0gcHdjX2hhbmRsZV9mcmFtZShwZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gLUVGQVVMVDsKLQlQV0NfREVCVUdfSU9DVEwoIlZJRElPQ19EUUJVRjogYWZ0ZXIgcHdjX2hhbmRsZV9mcmFtZVxuIik7Ci0KLQlidWYtPmluZGV4ID0gcGRldi0+ZmlsbF9pbWFnZTsKLQlpZiAocGRldi0+cGl4Zm10ICE9IFY0TDJfUElYX0ZNVF9ZVVY0MjApCi0JCWJ1Zi0+Ynl0ZXN1c2VkID0gcGRldi0+ZnJhbWVfc2l6ZSArIHNpemVvZihzdHJ1Y3QgcHdjX3Jhd19mcmFtZSk7Ci0JZWxzZQotCQlidWYtPmJ5dGVzdXNlZCA9IHBkZXYtPnZpZXcuc2l6ZTsKLQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7Ci0JYnVmLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dGltZXN0YW1wKTsKLQlidWYtPnNlcXVlbmNlID0gMDsKLQlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7Ci0JYnVmLT5tLm9mZnNldCA9IHBkZXYtPmZpbGxfaW1hZ2UgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOwotCWJ1Zi0+bGVuZ3RoID0gcGRldi0+bGVuX3Blcl9pbWFnZTsKLQlwd2NfbmV4dF9pbWFnZShwZGV2KTsKLQotCVBXQ19ERUJVR19JT0NUTCgiVklESU9DX0RRQlVGOiBidWYtPmluZGV4PSVkXG4iLCBidWYtPmluZGV4KTsKLQlQV0NfREVCVUdfSU9DVEwoIlZJRElPQ19EUUJVRjogYnVmLT5sZW5ndGg9JWRcbiIsIGJ1Zi0+bGVuZ3RoKTsKLQlQV0NfREVCVUdfSU9DVEwoIlZJRElPQ19EUUJVRjogbS5vZmZzZXQ9JWRcbiIsIGJ1Zi0+bS5vZmZzZXQpOwotCVBXQ19ERUJVR19JT0NUTCgiVklESU9DX0RRQlVGOiBieXRlc3VzZWQ9JWRcbiIsIGJ1Zi0+Ynl0ZXN1c2VkKTsKLQlQV0NfREVCVUdfSU9DVEwoIlZJRElPQ19EUUJVRjogbGVhdmluZ1xuIik7Ci0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gdmIyX2RxYnVmKCZwZGV2LT52Yl9xdWV1ZSwgYnVmLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKIHN0YXRpYyBpbnQgcHdjX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JcmV0dXJuIHB3Y19pc29jX2luaXQocGRldik7CisJaWYgKCFwZGV2LT51ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGV2LT5jYXB0X2ZpbGUgIT0gZmlsZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiB2YjJfc3RyZWFtb24oJnBkZXYtPnZiX3F1ZXVlLCBpKTsKIH0KIAogc3RhdGljIGludCBwd2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JcHdjX2lzb2NfY2xlYW51cChwZGV2KTsKLQlyZXR1cm4gMDsKKwlpZiAoIXBkZXYtPnVkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBkZXYtPmNhcHRfZmlsZSAhPSBmaWxlKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIHZiMl9zdHJlYW1vZmYoJnBkZXYtPnZiX3F1ZXVlLCBpKTsKIH0KIAogc3RhdGljIGludCBwd2NfZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTg5Niw5ICsxMTE2LDYgQEAKIAkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCSAgICA9IHB3Y19nX2ZtdF92aWRfY2FwLAogCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJICAgID0gcHdjX3NfZm10X3ZpZF9jYXAsCiAJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCSAgICA9IHB3Y190cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19xdWVyeWN0cmwJCSAgICA9IHB3Y19xdWVyeWN0cmwsCi0JLnZpZGlvY19nX2N0cmwJCQkgICAgPSBwd2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsCQkJICAgID0gcHdjX3NfY3RybCwKIAkudmlkaW9jX3JlcWJ1ZnMJCQkgICAgPSBwd2NfcmVxYnVmcywKIAkudmlkaW9jX3F1ZXJ5YnVmCQkgICAgPSBwd2NfcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmCQkJICAgID0gcHdjX3FidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCmluZGV4IDA4M2Y4YjEuLjBlNGUyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zNywxOSArMzYsMTYgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLXZtYWxsb2MuaD4KICNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCiAjaW5jbHVkZSA8bWVkaWEvcHdjLWlvY3RsLmg+CiAKIC8qIFZlcnNpb24gYmxvY2sgKi8KLSNkZWZpbmUgUFdDX01BSk9SCTEwCi0jZGVmaW5lIFBXQ19NSU5PUgkwCi0jZGVmaW5lIFBXQ19FWFRSQU1JTk9SCTEyCi0jZGVmaW5lIFBXQ19WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oUFdDX01BSk9SLFBXQ19NSU5PUixQV0NfRVhUUkFNSU5PUikKLSNkZWZpbmUgUFdDX1ZFUlNJT04JIjEwLjAuMTQiCisjZGVmaW5lIFBXQ19WRVJTSU9OCSIxMC4wLjE1IgogI2RlZmluZSBQV0NfTkFNRSAJInB3YyIKICNkZWZpbmUgUEZYCQlQV0NfTkFNRSAiOiAiCiAKQEAgLTgxLDkgKzc3LDkgQEAKICNkZWZpbmUgUFdDX0RFQlVHX0xFVkVMCShQV0NfREVCVUdfTEVWRUxfTU9EVUxFKQogCiAjZGVmaW5lIFBXQ19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7XAotCSAgaWYgKChQV0NfREVCVUdfTEVWRUxfICMjbGV2ZWwpICYgcHdjX3RyYWNlKSBcCi0JICAgICBwcmludGsoS0VSTl9ERUJVRyBQRlggZm10LCAjI2FyZ3MpOyBcCi0JICB9IHdoaWxlKDApCisJaWYgKChQV0NfREVCVUdfTEVWRUxfICMjbGV2ZWwpICYgcHdjX3RyYWNlKSBcCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCBmbXQsICMjYXJncyk7IFwKKwl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFBXQ19FUlJPUihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBQRlggZm10LCAjI2FyZ3MpCiAjZGVmaW5lIFBXQ19XQVJOSU5HKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBQRlggZm10LCAjI2FyZ3MpCkBAIC0xMTAsMjUgKzEwNiwyMSBAQAogI2RlZmluZSBGRUFUVVJFX0NPREVDMQkJCTB4MDAwMgogI2RlZmluZSBGRUFUVVJFX0NPREVDMgkJCTB4MDAwNAogCi0vKiBUdXJuIGNlcnRhaW4gZmVhdHVyZXMgb24vb2ZmICovCi0jZGVmaW5lIFBXQ19JTlRfUElQRSAwCi0KIC8qIElnbm9yZSBlcnJvcnMgaW4gdGhlIGZpcnN0IE4gZnJhbWVzLCB0byBhbGxvdyBmb3Igc3RhcnR1cCBkZWxheXMgKi8KICNkZWZpbmUgRlJBTUVfTE9XTUFSSyA1CiAKIC8qIFNpemUgYW5kIG51bWJlciBvZiBidWZmZXJzIGZvciB0aGUgSVNPIHBpcGUuICovCi0jZGVmaW5lIE1BWF9JU09fQlVGUwkJMgorI2RlZmluZSBNQVhfSVNPX0JVRlMJCTMKICNkZWZpbmUgSVNPX0ZSQU1FU19QRVJfREVTQwkxMAogI2RlZmluZSBJU09fTUFYX0ZSQU1FX1NJWkUJOTYwCiAjZGVmaW5lIElTT19CVUZGRVJfU0laRSAJKElTT19GUkFNRVNfUEVSX0RFU0MgKiBJU09fTUFYX0ZSQU1FX1NJWkUpCiAKLS8qIEZyYW1lIGJ1ZmZlcnM6IGNvbnRhaW5zIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkIHZpZGVvIGRhdGEuICovCi0jZGVmaW5lIE1BWF9GUkFNRVMJCTUKIC8qIE1heGltdW0gc2l6ZSBhZnRlciBkZWNvbXByZXNzaW9uIGlzIDY0MHg0ODAgWVVWIGRhdGEsIDEuNSAqIDY0MCAqIDQ4MCAqLwogI2RlZmluZSBQV0NfRlJBTUVfU0laRSAJCSg0NjA4MDAgKyBUT1VDQU1fSEVBREVSX1NJWkUgKyBUT1VDQU1fVFJBSUxFUl9TSVpFKQogCi0vKiBBYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiBidWZmZXJzIGF2YWlsYWJsZSBmb3IgbW1hcCgpICovCi0jZGVmaW5lIE1BWF9JTUFHRVMgCQkxMAorLyogQWJzb2x1dGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgYnVmZmVycyBhdmFpbGFibGUgZm9yIG1tYXAoKSAqLworI2RlZmluZSBNSU5fRlJBTUVTCQkyCisjZGVmaW5lIE1BWF9GUkFNRVMJCTE2CiAKIC8qIFNvbWUgbWFjcm9zIHRvIHF1aWNrbHkgZmluZCB0aGUgdHlwZSBvZiBhIHdlYmNhbSAqLwogI2RlZmluZSBERVZJQ0VfVVNFX0NPREVDMSh4KSAoKHgpPDY3NSkKQEAgLTEzNiwxNDkgKzEyOCwyMjEgQEAKICNkZWZpbmUgREVWSUNFX1VTRV9DT0RFQzMoeCkgKCh4KT49NzAwKQogI2RlZmluZSBERVZJQ0VfVVNFX0NPREVDMjMoeCkgKCh4KT49Njc1KQogCi0vKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZXMgd2VyZSBiYXNlZCBvbiBjcGlhLmguIFdoeSByZWludmVudCB0aGUgd2hlZWw/IDotKSAqLwotc3RydWN0IHB3Y19pc29fYnVmCi17Ci0Jdm9pZCAqZGF0YTsKLQlpbnQgIGxlbmd0aDsKLQlpbnQgIHJlYWQ7Ci0Jc3RydWN0IHVyYiAqdXJiOwotfTsKKy8qIGZyb20gcHdjLWRlYy5oICovCisjZGVmaW5lIFBXQ1hfRkxBR19QTEFOQVIgICAgICAgIDB4MDAwMQorCisvKiBSZXF1ZXN0IHR5cGVzOiB2aWRlbyAqLworI2RlZmluZSBTRVRfTFVNX0NUTAkJCTB4MDEKKyNkZWZpbmUgR0VUX0xVTV9DVEwJCQkweDAyCisjZGVmaW5lIFNFVF9DSFJPTV9DVEwJCQkweDAzCisjZGVmaW5lIEdFVF9DSFJPTV9DVEwJCQkweDA0CisjZGVmaW5lIFNFVF9TVEFUVVNfQ1RMCQkJMHgwNQorI2RlZmluZSBHRVRfU1RBVFVTX0NUTAkJCTB4MDYKKyNkZWZpbmUgU0VUX0VQX1NUUkVBTV9DVEwJCTB4MDcKKyNkZWZpbmUgR0VUX0VQX1NUUkVBTV9DVEwJCTB4MDgKKyNkZWZpbmUgR0VUX1hYX0NUTAkJCTB4MDkKKyNkZWZpbmUgU0VUX1hYX0NUTAkJCTB4MEEKKyNkZWZpbmUgR0VUX1hZX0NUTAkJCTB4MEIKKyNkZWZpbmUgU0VUX1hZX0NUTAkJCTB4MEMKKyNkZWZpbmUgU0VUX01QVF9DVEwJCQkweDBECisjZGVmaW5lIEdFVF9NUFRfQ1RMCQkJMHgwRQorCisvKiBTZWxlY3RvcnMgZm9yIHRoZSBMdW1pbmFuY2UgY29udHJvbHMgW0dTXUVUX0xVTV9DVEwgKi8KKyNkZWZpbmUgQUdDX01PREVfRk9STUFUVEVSCQkJMHgyMDAwCisjZGVmaW5lIFBSRVNFVF9BR0NfRk9STUFUVEVSCQkJMHgyMTAwCisjZGVmaW5lIFNIVVRURVJfTU9ERV9GT1JNQVRURVIJCQkweDIyMDAKKyNkZWZpbmUgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSCQkweDIzMDAKKyNkZWZpbmUgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSCQkweDI0MDAKKyNkZWZpbmUgQVVUT19DT05UT1VSX0ZPUk1BVFRFUgkJCTB4MjUwMAorI2RlZmluZSBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIJMHgyNjAwCisjZGVmaW5lIENPTlRSQVNUX0ZPUk1BVFRFUgkJCTB4MjcwMAorI2RlZmluZSBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSCQkweDI4MDAKKyNkZWZpbmUgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIJCTB4MjkwMAorI2RlZmluZSBBRV9DT05UUk9MX1NQRUVECQkJMHgyQTAwCisjZGVmaW5lIEJSSUdIVE5FU1NfRk9STUFUVEVSCQkJMHgyQjAwCisjZGVmaW5lIEdBTU1BX0ZPUk1BVFRFUgkJCQkweDJDMDAKKworLyogU2VsZWN0b3JzIGZvciB0aGUgQ2hyb21pbmFuY2UgY29udHJvbHMgW0dTXUVUX0NIUk9NX0NUTCAqLworI2RlZmluZSBXQl9NT0RFX0ZPUk1BVFRFUgkJCTB4MTAwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9TUEVFRF9GT1JNQVRURVIJCTB4MTEwMAorI2RlZmluZSBBV0JfQ09OVFJPTF9ERUxBWV9GT1JNQVRURVIJCTB4MTIwMAorI2RlZmluZSBQUkVTRVRfTUFOVUFMX1JFRF9HQUlOX0ZPUk1BVFRFUgkweDEzMDAKKyNkZWZpbmUgUFJFU0VUX01BTlVBTF9CTFVFX0dBSU5fRk9STUFUVEVSCTB4MTQwMAorI2RlZmluZSBDT0xPVVJfTU9ERV9GT1JNQVRURVIJCQkweDE1MDAKKyNkZWZpbmUgU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjEJCTB4MTYwMAorI2RlZmluZSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMgkJMHgxNzAwCisKKy8qIFNlbGVjdG9ycyBmb3IgdGhlIFN0YXR1cyBjb250cm9scyBbR1NdRVRfU1RBVFVTX0NUTCAqLworI2RlZmluZSBTQVZFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSCQkweDAyMDAKKyNkZWZpbmUgUkVTVE9SRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUgkJMHgwMzAwCisjZGVmaW5lIFJFU1RPUkVfRkFDVE9SWV9ERUZBVUxUU19GT1JNQVRURVIJMHgwNDAwCisjZGVmaW5lIFJFQURfQUdDX0ZPUk1BVFRFUgkJCTB4MDUwMAorI2RlZmluZSBSRUFEX1NIVVRURVJfRk9STUFUVEVSCQkJMHgwNjAwCisjZGVmaW5lIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSCQkJMHgwNzAwCisjZGVmaW5lIFJFQURfQkxVRV9HQUlOX0ZPUk1BVFRFUgkJMHgwODAwCisKKy8qIEZvcm1hdHRlcnMgZm9yIHRoZSBtb3Rvcml6ZWQgcGFuICYgdGlsdCBbR1NdRVRfTVBUX0NUTCAqLworI2RlZmluZSBQVF9SRUxBVElWRV9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMQorI2RlZmluZSBQVF9SRVNFVF9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMgorI2RlZmluZSBQVF9TVEFUVVNfRk9STUFUVEVSCQkJMHgwMwogCiAvKiBpbnRlcm1lZGlhdGUgYnVmZmVycyB3aXRoIHJhdyBkYXRhIGZyb20gdGhlIFVTQiBjYW0gKi8KIHN0cnVjdCBwd2NfZnJhbWVfYnVmCiB7Ci0gICB2b2lkICpkYXRhOwotICAgdm9sYXRpbGUgaW50IGZpbGxlZDsJCS8qIG51bWJlciBvZiBieXRlcyBmaWxsZWQgKi8KLSAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpuZXh0OwkvKiBsaXN0ICovCi19OwotCi0vKiBhZGRpdGlvbm5hbCBpbmZvcm1hdGlvbnMgdXNlZCB3aGVuIGRlYWxpbmcgaW1hZ2UgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXJsYW5kICovCi1zdHJ1Y3QgcHdjX2ltZ2J1ZgotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwkvKiBvZmZzZXQgb2YgdGhpcyBidWZmZXIgaW4gdGhlIGJpZyBhcnJheSBvZiBpbWFnZV9kYXRhICovCi0JaW50ICAgdm1hX3VzZV9jb3VudDsJLyogY291bnQgdGhlIG51bWJlciBvZiB0aW1lIHRoaXMgbWVtb3J5IGlzIG1hcHBlZCAqLworCXN0cnVjdCB2YjJfYnVmZmVyIHZiOwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXZvaWQgKmRhdGE7CisJaW50IGZpbGxlZDsJCS8qIG51bWJlciBvZiBieXRlcyBmaWxsZWQgKi8KIH07CiAKIHN0cnVjdCBwd2NfZGV2aWNlCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBtdXRleCBtb2Rsb2NrOwogCi0gICAvKiBQb2ludGVyIHRvIG91ciB1c2JfZGV2aWNlLCBtYXkgYmUgTlVMTCBhZnRlciB1bnBsdWcgKi8KLSAgIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCS8qIFBvaW50ZXIgdG8gb3VyIHVzYl9kZXZpY2UsIG1heSBiZSBOVUxMIGFmdGVyIHVucGx1ZyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCS8qIFByb3RlY3RzIHRoZSBzZXR0aW5nIG9mIHVkZXYgdG8gTlVMTCBieSBvdXIgZGlzY29ubmVjdCBoYW5kbGVyICovCisJc3RydWN0IG11dGV4IHVkZXZsb2NrOwogCi0gICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgY2FtICg2NDUsIDY0NiwgNjc1LCA2ODAsIDY5MCwgNzIwLCA3MzAsIDc0MCwgNzUwKSAqLwotICAgaW50IHJlbGVhc2U7CQkJLyogcmVsZWFzZSBudW1iZXIgKi8KLSAgIGludCBmZWF0dXJlczsJCS8qIGZlYXR1cmUgYml0cyAqLwotICAgY2hhciBzZXJpYWxbMzBdOwkJLyogc2VyaWFsIG51bWJlciAoc3RyaW5nKSAqLwotICAgaW50IGVycm9yX3N0YXR1czsJCS8qIHNldCB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGNhbSAodW5wbHVnZ2VkLCBVU0IgZXJyb3JzKSAqLwotICAgaW50IHVzYl9pbml0OwkJLyogc2V0IHdoZW4gdGhlIGNhbSBoYXMgYmVlbiBpbml0aWFsaXplZCBvdmVyIFVTQiAqLworCS8qIHR5cGUgb2YgY2FtICg2NDUsIDY0NiwgNjc1LCA2ODAsIDY5MCwgNzIwLCA3MzAsIDc0MCwgNzUwKSAqLworCWludCB0eXBlOworCWludCByZWxlYXNlOwkJLyogcmVsZWFzZSBudW1iZXIgKi8KKwlpbnQgZmVhdHVyZXM7CQkvKiBmZWF0dXJlIGJpdHMgKi8KKwljaGFyIHNlcmlhbFszMF07CS8qIHNlcmlhbCBudW1iZXIgKHN0cmluZykgKi8KIAotICAgLyoqKiBWaWRlbyBkYXRhICoqKi8KLSAgIGludCB2b3BlbjsJCQkvKiBmbGFnICovCi0gICBpbnQgdmVuZHBvaW50OwkJLyogdmlkZW8gaXNvYyBlbmRwb2ludCAqLwotICAgaW50IHZjaW50ZXJmYWNlOwkJLyogdmlkZW8gY29udHJvbCBpbnRlcmZhY2UgKi8KLSAgIGludCB2YWx0ZXJuYXRlOwkJLyogYWx0ZXJuYXRlIGludGVyZmFjZSBuZWVkZWQgKi8KLSAgIGludCB2ZnJhbWVzLCB2c2l6ZTsJCS8qIGZyYW1lcy1wZXItc2Vjb25kICYgc2l6ZSAoc2VlIFBTWl8qKSAqLwotICAgaW50IHBpeGZtdDsJCQkvKiBwaXhlbGZvcm1hdDogVjRMMl9QSVhfRk1UX1lVVjQyMCBvciByYXc6IF9QV0MxLCBfUFdDMiAqLwotICAgaW50IHZmcmFtZV9jb3VudDsJCS8qIHJlY2VpdmVkIGZyYW1lcyAqLwotICAgaW50IHZmcmFtZXNfZHVtcGVkOyAJCS8qIGNvdW50ZXIgZm9yIGR1bXBlZCBmcmFtZXMgKi8KLSAgIGludCB2ZnJhbWVzX2Vycm9yOwkJLyogZnJhbWVzIHJlY2VpdmVkIGluIGVycm9yICovCi0gICBpbnQgdm1heF9wYWNrZXRfc2l6ZTsJLyogVVNCIG1heHBhY2tldCBzaXplICovCi0gICBpbnQgdmxhc3RfcGFja2V0X3NpemU7CS8qIGZvciBmcmFtZSBzeW5jaHJvbmlzYXRpb24gKi8KLSAgIGludCB2aXNvY19lcnJvcnM7CQkvKiBudW1iZXIgb2YgY29udGlndW91cyBJU09DIGVycm9ycyAqLwotICAgaW50IHZjb21wcmVzc2lvbjsJCS8qIGRlc2lyZWQgY29tcHJlc3Npb24gZmFjdG9yICovCi0gICBpbnQgdmJhbmRsZW5ndGg7CQkvKiBjb21wcmVzc2VkIGJhbmQgbGVuZ3RoOyAwIGlzIHVuY29tcHJlc3NlZCAqLwotICAgY2hhciB2c25hcHNob3Q7CQkvKiBzbmFwc2hvdCBtb2RlICovCi0gICBjaGFyIHZzeW5jOwkJCS8qIHVzZWQgYnkgaXNvYyBoYW5kbGVyICovCi0gICBjaGFyIHZtaXJyb3I7CQkvKiBmb3IgVG9VQ2FNIHNlcmllcyAqLwotCWNoYXIgdW5wbHVnZ2VkOworCS8qKiogVmlkZW8gZGF0YSAqKiovCisJc3RydWN0IGZpbGUgKmNhcHRfZmlsZTsJLyogZmlsZSBkb2luZyB2aWRlbyBjYXB0dXJlICovCisJaW50IHZlbmRwb2ludDsJCS8qIHZpZGVvIGlzb2MgZW5kcG9pbnQgKi8KKwlpbnQgdmNpbnRlcmZhY2U7CS8qIHZpZGVvIGNvbnRyb2wgaW50ZXJmYWNlICovCisJaW50IHZhbHRlcm5hdGU7CQkvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIG5lZWRlZCAqLworCWludCB2ZnJhbWVzLCB2c2l6ZTsJLyogZnJhbWVzLXBlci1zZWNvbmQgJiBzaXplIChzZWUgUFNaXyopICovCisJaW50IHBpeGZtdDsJCS8qIHBpeGVsZm9ybWF0OiBWNEwyX1BJWF9GTVRfWVVWNDIwIG9yIF9QV0NYICovCisJaW50IHZmcmFtZV9jb3VudDsJLyogcmVjZWl2ZWQgZnJhbWVzICovCisJaW50IHZtYXhfcGFja2V0X3NpemU7CS8qIFVTQiBtYXhwYWNrZXQgc2l6ZSAqLworCWludCB2bGFzdF9wYWNrZXRfc2l6ZTsJLyogZm9yIGZyYW1lIHN5bmNocm9uaXNhdGlvbiAqLworCWludCB2aXNvY19lcnJvcnM7CS8qIG51bWJlciBvZiBjb250aWd1b3VzIElTT0MgZXJyb3JzICovCisJaW50IHZjb21wcmVzc2lvbjsJLyogZGVzaXJlZCBjb21wcmVzc2lvbiBmYWN0b3IgKi8KKwlpbnQgdmJhbmRsZW5ndGg7CS8qIGNvbXByZXNzZWQgYmFuZCBsZW5ndGg7IDAgaXMgdW5jb21wcmVzc2VkICovCisJY2hhciB2c25hcHNob3Q7CQkvKiBzbmFwc2hvdCBtb2RlICovCisJY2hhciB2c3luYzsJCS8qIHVzZWQgYnkgaXNvYyBoYW5kbGVyICovCisJY2hhciB2bWlycm9yOwkJLyogZm9yIFRvVUNhTSBzZXJpZXMgKi8KKwljaGFyIHBvd2VyX3NhdmU7CS8qIERvIHBvd2Vyc2F2aW5nIGZvciB0aGlzIGNhbSAqLwogCi0gICBpbnQgY21kX2xlbjsKLSAgIHVuc2lnbmVkIGNoYXIgY21kX2J1ZlsxM107CisJaW50IGNtZF9sZW47CisJdW5zaWduZWQgY2hhciBjbWRfYnVmWzEzXTsKIAotICAgLyogVGhlIGltYWdlIGFjcXVpc2l0aW9uIHJlcXVpcmVzIDMgdG8gNCBzdGVwczoKLSAgICAgIDEuIGRhdGEgaXMgZ2F0aGVyZWQgaW4gc2hvcnQgcGFja2V0cyBmcm9tIHRoZSBVU0IgY29udHJvbGxlcgotICAgICAgMi4gZGF0YSBpcyBzeW5jaHJvbml6ZWQgYW5kIHBhY2tlZCBpbnRvIGEgZnJhbWUgYnVmZmVyCi0gICAgICAzYS4gaW4gY2FzZSBkYXRhIGlzIGNvbXByZXNzZWQsIGRlY29tcHJlc3MgaXQgZGlyZWN0bHkgaW50byBpbWFnZSBidWZmZXIKLSAgICAgIDNiLiBpbiBjYXNlIGRhdGEgaXMgdW5jb21wcmVzc2VkLCBjb3B5IGludG8gaW1hZ2UgYnVmZmVyIHdpdGggdmlld3BvcnQKLSAgICAgIDQuIGRhdGEgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHVzZXIgcHJvY2VzcworCXN0cnVjdCB1cmIgKnVyYnNbTUFYX0lTT19CVUZTXTsKKwljaGFyIGlzb19pbml0OwogCi0gICAgICBOb3RlIHRoYXQgTUFYX0lTT19CVUZTICE9IE1BWF9GUkFNRVMgIT0gTUFYX0lNQUdFUy4uLi4KLSAgICAgIFdlIGhhdmUgaW4gZWZmZWN0IGEgYmFjay10by1iYWNrLWRvdWJsZS1idWZmZXIgc3lzdGVtLgotICAgICovCi0gICAvKiAxOiBpc29jICovCi0gICBzdHJ1Y3QgcHdjX2lzb19idWYgc2J1ZltNQVhfSVNPX0JVRlNdOwotICAgY2hhciBpc29faW5pdDsKKwkvKiB2aWRlb2J1ZjIgcXVldWUgYW5kIHF1ZXVlZCBidWZmZXJzIGxpc3QgKi8KKwlzdHJ1Y3QgdmIyX3F1ZXVlIHZiX3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVkX2J1ZnM7CisJc3BpbmxvY2tfdCBxdWV1ZWRfYnVmc19sb2NrOwogCi0gICAvKiAyOiBmcmFtZSAqLwotICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWY7CS8qIGFsbCBmcmFtZXMgKi8KLSAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICplbXB0eV9mcmFtZXMsICplbXB0eV9mcmFtZXNfdGFpbDsJLyogYWxsIGVtcHR5IGZyYW1lcyAqLwotICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZ1bGxfZnJhbWVzLCAqZnVsbF9mcmFtZXNfdGFpbDsJLyogYWxsIGZpbGxlZCBmcmFtZXMgKi8KLSAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmaWxsX2ZyYW1lOwkvKiBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZmlsbGVkICovCi0gICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqcmVhZF9mcmFtZTsJLyogZnJhbWUgY3VycmVudGx5IHJlYWQgYnkgdXNlciBwcm9jZXNzICovCi0gICBpbnQgZnJhbWVfaGVhZGVyX3NpemUsIGZyYW1lX3RyYWlsZXJfc2l6ZTsKLSAgIGludCBmcmFtZV9zaXplOwotICAgaW50IGZyYW1lX3RvdGFsX3NpemU7IC8qIGluY2x1ZGluZyBoZWFkZXIgJiB0cmFpbGVyICovCi0gICBpbnQgZHJvcF9mcmFtZXM7CisJLyoKKwkgKiBGcmFtZSBjdXJyZW50bHkgYmVpbmcgZmlsbGVkLCB0aGlzIG9ubHkgZ2V0cyB0b3VjaGVkIGJ5IHRoZQorCSAqIGlzb2MgdXJiIGNvbXBsZXRlIGhhbmRsZXIsIGFuZCBieSBzdHJlYW0gc3RhcnQgLyBzdG9wIHNpbmNlCisJICogc3RhcnQgLyBzdG9wIHRvdWNoIGl0IGJlZm9yZSAvIGFmdGVyIHN0YXJ0aW5nIC8ga2lsbGluZyB0aGUgdXJicworCSAqIG5vIGxvY2tpbmcgaXMgbmVlZGVkIGFyb3VuZCB0aGlzCisJICovCisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmZpbGxfYnVmOwogCi0gICAvKiAzOiBkZWNvbXByZXNzaW9uICovCi0gICB2b2lkICpkZWNvbXByZXNzX2RhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGRlY29tcHJlc3Npb24gZW5naW5lICovCisJaW50IGZyYW1lX2hlYWRlcl9zaXplLCBmcmFtZV90cmFpbGVyX3NpemU7CisJaW50IGZyYW1lX3NpemU7CisJaW50IGZyYW1lX3RvdGFsX3NpemU7CS8qIGluY2x1ZGluZyBoZWFkZXIgJiB0cmFpbGVyICovCisJaW50IGRyb3BfZnJhbWVzOwogCi0gICAvKiA0OiBpbWFnZSAqLwotICAgLyogV2UgaGF2ZSBhbiAnaW1hZ2UnIGFuZCBhICd2aWV3Jywgd2hlcmUgJ2ltYWdlJyBpcyB0aGUgZml4ZWQtc2l6ZSBpbWFnZQotICAgICAgYXMgZGVsaXZlcmVkIGJ5IHRoZSBjYW1lcmEsIGFuZCAndmlldycgaXMgdGhlIHNpemUgcmVxdWVzdGVkIGJ5IHRoZQotICAgICAgcHJvZ3JhbS4gVGhlIGNhbWVyYSBpbWFnZSBpcyBjZW50ZXJlZCBpbiB0aGlzIHZpZXdwb3J0LCBsYWNlZCB3aXRoCi0gICAgICBhIGdyYXkgb3IgYmxhY2sgYm9yZGVyLiB2aWV3X21pbiA8PSBpbWFnZSA8PSB2aWV3IDw9IHZpZXdfbWF4OwotICAgICovCi0gICBpbnQgaW1hZ2VfbWFzazsJCQkvKiBiaXRtYXNrIG9mIHN1cHBvcnRlZCBzaXplcyAqLwotICAgc3RydWN0IHB3Y19jb29yZCB2aWV3X21pbiwgdmlld19tYXg7CS8qIG1pbmltdW0gYW5kIG1heGltdW0gdmlld2FibGUgc2l6ZXMgKi8KLSAgIHN0cnVjdCBwd2NfY29vcmQgYWJzX21heDsgICAgICAgICAgICAvKiBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIHdpdGggY29tcHJlc3Npb24gKi8KLSAgIHN0cnVjdCBwd2NfY29vcmQgaW1hZ2UsIHZpZXc7CS8qIGltYWdlIGFuZCB2aWV3cG9ydCBzaXplICovCi0gICBzdHJ1Y3QgcHdjX2Nvb3JkIG9mZnNldDsJCS8qIG9mZnNldCB3aXRoaW4gdGhlIHZpZXdwb3J0ICovCisJdm9pZCAqZGVjb21wcmVzc19kYXRhOwkvKiBwcml2YXRlIGRhdGEgZm9yIGRlY29tcHJlc3Npb24gZW5naW5lICovCiAKLSAgIHZvaWQgKmltYWdlX2RhdGE7CQkJLyogdG90YWwgYnVmZmVyLCB3aGljaCBpcyBzdWJkaXZpZGVkIGludG8gLi4uICovCi0gICBzdHJ1Y3QgcHdjX2ltZ2J1ZiBpbWFnZXNbTUFYX0lNQUdFU107LyogLi4uc2V2ZXJhbCBpbWFnZXMuLi4gKi8KLSAgIGludCBmaWxsX2ltYWdlOwkJCS8qIC4uLndoaWNoIGFyZSByb3RhdGVkLiAqLwotICAgaW50IGxlbl9wZXJfaW1hZ2U7CQkJLyogbGVuZ3RoIHBlciBpbWFnZSAqLwotICAgaW50IGltYWdlX3JlYWRfcG9zOwkJCS8qIEluIGNhc2Ugd2UgcmVhZCBkYXRhIGluIHBpZWNlcywga2VlcCB0cmFjayBvZiB3ZXJlIHdlIGFyZSBpbiB0aGUgaW1hZ2VidWZmZXIgKi8KLSAgIGludCBpbWFnZV91c2VkW01BWF9JTUFHRVNdOwkJLyogRm9yIE1DQVBUVVJFIGFuZCBTWU5DICovCisJLyoKKwkgKiBXZSBoYXZlIGFuICdpbWFnZScgYW5kIGEgJ3ZpZXcnLCB3aGVyZSAnaW1hZ2UnIGlzIHRoZSBmaXhlZC1zaXplIGltZworCSAqIGFzIGRlbGl2ZXJlZCBieSB0aGUgY2FtZXJhLCBhbmQgJ3ZpZXcnIGlzIHRoZSBzaXplIHJlcXVlc3RlZCBieSB0aGUKKwkgKiBwcm9ncmFtLiBUaGUgY2FtZXJhIGltYWdlIGlzIGNlbnRlcmVkIGluIHRoaXMgdmlld3BvcnQsIGxhY2VkIHdpdGgKKwkgKiBhIGdyYXkgb3IgYmxhY2sgYm9yZGVyLiB2aWV3X21pbiA8PSBpbWFnZSA8PSB2aWV3IDw9IHZpZXdfbWF4OworCSAqLworCWludCBpbWFnZV9tYXNrOwkJCQkvKiBzdXBwb3J0ZWQgc2l6ZXMgKi8KKwlzdHJ1Y3QgcHdjX2Nvb3JkIHZpZXdfbWluLCB2aWV3X21heDsJLyogbWluaW11bSBhbmQgbWF4aW11bSB2aWV3ICovCisJc3RydWN0IHB3Y19jb29yZCBhYnNfbWF4OwkJLyogbWF4aW11bSBzdXBwb3J0ZWQgc2l6ZSAqLworCXN0cnVjdCBwd2NfY29vcmQgaW1hZ2UsIHZpZXc7CQkvKiBpbWFnZSBhbmQgdmlld3BvcnQgc2l6ZSAqLworCXN0cnVjdCBwd2NfY29vcmQgb2Zmc2V0OwkJLyogb2Zmc2V0IG9mIHRoZSB2aWV3cG9ydCAqLwogCi0gICBzdHJ1Y3QgbXV0ZXggbW9kbG9jazsJCS8qIHRvIHByZXZlbnQgcmFjZXMgaW4gdmlkZW9fb3BlbigpLCBldGMgKi8KLSAgIHNwaW5sb2NrX3QgcHRybG9jazsJCQkvKiBmb3IgbWFuaXB1bGF0aW5nIHRoZSBidWZmZXIgcG9pbnRlcnMgKi8KKwkvKioqIG1vdG9yaXplZCBwYW4vdGlsdCBmZWF0dXJlICovCisJc3RydWN0IHB3Y19tcHRfcmFuZ2UgYW5nbGVfcmFuZ2U7CisJaW50IHBhbl9hbmdsZTsJCQkvKiBpbiBkZWdyZWVzICogMTAwICovCisJaW50IHRpbHRfYW5nbGU7CQkJLyogYWJzb2x1dGUgYW5nbGU7IDAsMCBpcyBob21lICovCiAKLSAgIC8qKiogbW90b3JpemVkIHBhbi90aWx0IGZlYXR1cmUgKi8KLSAgIHN0cnVjdCBwd2NfbXB0X3JhbmdlIGFuZ2xlX3JhbmdlOwotICAgaW50IHBhbl9hbmdsZTsJCQkvKiBpbiBkZWdyZWVzICogMTAwICovCi0gICBpbnQgdGlsdF9hbmdsZTsJCQkvKiBhYnNvbHV0ZSBhbmdsZTsgMCwwIGlzIGhvbWUgcG9zaXRpb24gKi8KLSAgIGludCBzbmFwc2hvdF9idXR0b25fc3RhdHVzOwkJLyogc2V0IHRvIDEgd2hlbiB0aGUgdXNlciBwdXNoIHRoZSBidXR0b24sIHJlc2V0IHRvIDAgd2hlbiB0aGlzIHZhbHVlIGlzIHJlYWQgKi8KKwkvKgorCSAqIFNldCB0byAxIHdoZW4gdGhlIHVzZXIgcHVzaCB0aGUgYnV0dG9uLCByZXNldCB0byAwCisJICogd2hlbiB0aGlzIHZhbHVlIGlzIHJlYWQgZnJvbSBzeXNmcy4KKwkgKi8KKwlpbnQgc25hcHNob3RfYnV0dG9uX3N0YXR1czsKICNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgotICAgc3RydWN0IGlucHV0X2RldiAqYnV0dG9uX2RldjsJLyogd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBpbnB1dCAqLwotICAgY2hhciBidXR0b25fcGh5c1s2NF07CisJc3RydWN0IGlucHV0X2RldiAqYnV0dG9uX2RldjsJLyogd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBpbnB1dCAqLworCWNoYXIgYnV0dG9uX3BoeXNbNjRdOwogI2VuZGlmCiAKLSAgIC8qKiogTWlzYy4gZGF0YSAqKiovCi0gICB3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZXE7CQkvKiBXaGVuIHdhaXRpbmcgZm9yIGEgZnJhbWUgdG8gZmluaXNoLi4uICovCi0jaWYgUFdDX0lOVF9QSVBFCi0gICB2b2lkICp1c2JfaW50X2hhbmRsZXI7CQkvKiBmb3IgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLwotI2VuZGlmCisJLyogY29udHJvbHMgKi8KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIJY3RybF9oYW5kbGVyOworCXUxNgkJCQlzYXR1cmF0aW9uX2ZtdDsKKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqYnJpZ2h0bmVzczsKKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqY29udHJhc3Q7CisJc3RydWN0IHY0bDJfY3RybAkJKnNhdHVyYXRpb247CisJc3RydWN0IHY0bDJfY3RybAkJKmdhbW1hOworCXN0cnVjdCB7CisJCS8qIGF3YiAvIHJlZC1ibHVlIGJhbGFuY2UgY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsCSphdXRvX3doaXRlX2JhbGFuY2U7CisJCXN0cnVjdCB2NGwyX2N0cmwJKnJlZF9iYWxhbmNlOworCQlzdHJ1Y3QgdjRsMl9jdHJsCSpibHVlX2JhbGFuY2U7CisJCS8qIHVzYiBjdHJsIHRyYW5zZmVycyBhcmUgc2xvdywgc28gd2UgY2FjaGUgdGhpbmdzICovCisJCWludAkJCWNvbG9yX2JhbF92YWxpZDsKKwkJdW5zaWduZWQgbG9uZwkJbGFzdF9jb2xvcl9iYWxfdXBkYXRlOyAvKiBJbiBqaWZmaWVzICovCisJCXMzMgkJCWxhc3RfcmVkX2JhbGFuY2U7CisJCXMzMgkJCWxhc3RfYmx1ZV9iYWxhbmNlOworCX07CisJc3RydWN0IHsKKwkJLyogYXV0b2dhaW4gLyBnYWluIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybAkqYXV0b2dhaW47CisJCXN0cnVjdCB2NGwyX2N0cmwJKmdhaW47CisJCWludAkJCWdhaW5fdmFsaWQ7CisJCXVuc2lnbmVkIGxvbmcJCWxhc3RfZ2Fpbl91cGRhdGU7IC8qIEluIGppZmZpZXMgKi8KKwkJczMyCQkJbGFzdF9nYWluOworCX07CisJc3RydWN0IHsKKwkJLyogZXhwb3N1cmVfYXV0byAvIGV4cG9zdXJlIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybAkqZXhwb3N1cmVfYXV0bzsKKwkJc3RydWN0IHY0bDJfY3RybAkqZXhwb3N1cmU7CisJCWludAkJCWV4cG9zdXJlX3ZhbGlkOworCQl1bnNpZ25lZCBsb25nCQlsYXN0X2V4cG9zdXJlX3VwZGF0ZTsgLyogSW4gamlmZmllcyAqLworCQlzMzIJCQlsYXN0X2V4cG9zdXJlOworCX07CisJc3RydWN0IHY0bDJfY3RybAkJKmNvbG9yZng7CisJc3RydWN0IHsKKwkJLyogYXV0b2NvbnRvdXIvY29udG91ciBjbHVzdGVyICovCisJCXN0cnVjdCB2NGwyX2N0cmwJKmF1dG9jb250b3VyOworCQlzdHJ1Y3QgdjRsMl9jdHJsCSpjb250b3VyOworCX07CisJc3RydWN0IHY0bDJfY3RybAkJKmJhY2tsaWdodDsKKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqZmxpY2tlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqbm9pc2VfcmVkdWN0aW9uOworCXN0cnVjdCB2NGwyX2N0cmwJCSpzYXZlX3VzZXI7CisJc3RydWN0IHY0bDJfY3RybAkJKnJlc3RvcmVfdXNlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqcmVzdG9yZV9mYWN0b3J5OworCXN0cnVjdCB7CisJCS8qIG1vdG9yIGNvbnRyb2wgY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsCSptb3Rvcl9wYW47CisJCXN0cnVjdCB2NGwyX2N0cmwJKm1vdG9yX3RpbHQ7CisJCXN0cnVjdCB2NGwyX2N0cmwJKm1vdG9yX3Bhbl9yZXNldDsKKwkJc3RydWN0IHY0bDJfY3RybAkqbW90b3JfdGlsdF9yZXNldDsKKwl9OworCS8qIENPREVDMyBtb2RlbHMgaGF2ZSBib3RoIGdhaW4gYW5kIGV4cG9zdXJlIGNvbnRyb2xsZWQgYnkgYXV0b2dhaW4gKi8KKwlzdHJ1Y3QgdjRsMl9jdHJsCQkqYXV0b2dhaW5fZXhwb19jbHVzdGVyWzNdOwogfTsKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiAjaWZkZWYgQ09ORklHX1VTQl9QV0NfREVCVUcKIGV4dGVybiBpbnQgcHdjX3RyYWNlOwogI2VuZGlmCi1leHRlcm4gaW50IHB3Y19tYnVmczsKLQotLyoqIGZ1bmN0aW9ucyBpbiBwd2MtaWYuYyAqLwotaW50IHB3Y19oYW5kbGVfZnJhbWUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOwotdm9pZCBwd2NfbmV4dF9pbWFnZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7Ci1pbnQgcHdjX2lzb2NfaW5pdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7Ci12b2lkIHB3Y19pc29jX2NsZWFudXAoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOwogCiAvKiogRnVuY3Rpb25zIGluIHB3Yy1taXNjLmMgKi8KIC8qIHNpemVzIGluIHBpeGVscyAqLwpAQCAtMjkxLDUwICszNTUsMjUgQEAKIC8qIFJlcXVlc3QgYSBjZXJ0YWluIHZpZGVvIG1vZGUuIFJldHVybnMgPCAwIGlmIG5vdCBwb3NzaWJsZSAqLwogZXh0ZXJuIGludCBwd2Nfc2V0X3ZpZGVvX21vZGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcywgaW50IGNvbXByZXNzaW9uLCBpbnQgc25hcHNob3QpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBwd2NfZ2V0X2ZwcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0vKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgaW1hZ2UgKG5vdCBmcmFtZSkgKi8KIGV4dGVybiBpbnQgcHdjX21wdF9yZXNldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgcHdjX21wdF9zZXRfYW5nbGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwYW4sIGludCB0aWx0KTsKLQotLyogVmFyaW91cyBjb250cm9sczsgc2hvdWxkIGJlIG9idmlvdXMuIFZhbHVlIDAuLjY1NTM1LCBvciA8IDAgb24gZXJyb3IgKi8KLWV4dGVybiBpbnQgcHdjX2dldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKLWV4dGVybiBpbnQgcHdjX3NldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCBwd2NfZ2V0X2NvbnRyYXN0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKLWV4dGVybiBpbnQgcHdjX3NldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKLWV4dGVybiBpbnQgcHdjX2dldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7Ci1leHRlcm4gaW50IHB3Y19zZXRfZ2FtbWEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19zZXRfc2F0dXJhdGlvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKIGV4dGVybiBpbnQgcHdjX3NldF9sZWRzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgb25fdmFsdWUsIGludCBvZmZfdmFsdWUpOwogZXh0ZXJuIGludCBwd2NfZ2V0X2Ntb3Nfc2Vuc29yKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnNlbnNvcik7Ci1leHRlcm4gaW50IHB3Y19yZXN0b3JlX3VzZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOwotZXh0ZXJuIGludCBwd2Nfc2F2ZV91c2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKLWV4dGVybiBpbnQgcHdjX3Jlc3RvcmVfZmFjdG9yeShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CitleHRlcm4gaW50IHNlbmRfY29udHJvbF9tc2coc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsCisJCQkgICAgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB2b2lkICpidWYsIGludCBidWZsZW4pOwogCi0vKiBleHBvcnRlZCBmb3IgdXNlIGJ5IHY0bDIgY29udHJvbHMgKi8KLWV4dGVybiBpbnQgcHdjX2dldF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19zZXRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKTsKLWV4dGVybiBpbnQgcHdjX3NldF9ibHVlX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfYXdiKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKLWV4dGVybiBpbnQgcHdjX3NldF9hd2Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlKTsKLWV4dGVybiBpbnQgcHdjX3NldF9hZ2Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlLCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCBwd2NfZ2V0X2FnYyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19zZXRfc2h1dHRlcl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG1vZGUsIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfc2h1dHRlcl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSk7Ci0KLWV4dGVybiBpbnQgcHdjX3NldF9jb2xvdXJfbW9kZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGNvbG91cik7Ci1leHRlcm4gaW50IHB3Y19nZXRfY29sb3VyX21vZGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqY29sb3VyKTsKLWV4dGVybiBpbnQgcHdjX3NldF9jb250b3VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgY29udG91cik7Ci1leHRlcm4gaW50IHB3Y19nZXRfY29udG91cihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpjb250b3VyKTsKLWV4dGVybiBpbnQgcHdjX3NldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBiYWNrbGlnaHQpOwotZXh0ZXJuIGludCBwd2NfZ2V0X2JhY2tsaWdodChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpiYWNrbGlnaHQpOwotZXh0ZXJuIGludCBwd2Nfc2V0X2ZsaWNrZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBmbGlja2VyKTsKLWV4dGVybiBpbnQgcHdjX2dldF9mbGlja2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKmZsaWNrZXIpOwotZXh0ZXJuIGludCBwd2Nfc2V0X2R5bmFtaWNfbm9pc2Uoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBub2lzZSk7Ci1leHRlcm4gaW50IHB3Y19nZXRfZHluYW1pY19ub2lzZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpub2lzZSk7CisvKiBDb250cm9sIGdldCAvIHNldCBoZWxwZXJzICovCitpbnQgcHdjX2dldF91OF9jdHJsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIGludCAqZGF0YSk7CitpbnQgcHdjX3NldF91OF9jdHJsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHU4IGRhdGEpOworaW50IHB3Y19nZXRfczhfY3RybChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCBpbnQgKmRhdGEpOworI2RlZmluZSBwd2Nfc2V0X3M4X2N0cmwgcHdjX3NldF91OF9jdHJsCitpbnQgcHdjX2dldF91MTZfY3RybChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCBpbnQgKmRhdCk7CitpbnQgcHdjX3NldF91MTZfY3RybChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLCB1MTYgZGF0YSk7CitpbnQgcHdjX2J1dHRvbl9jdHJsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1MTYgdmFsdWUpOworaW50IHB3Y19pbml0X2NvbnRyb2xzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKIAogLyogUG93ZXIgZG93biBvciB1cCB0aGUgY2FtZXJhOyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBtb2RlbHMgKi8KLWV4dGVybiBpbnQgcHdjX2NhbWVyYV9wb3dlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHBvd2VyKTsKK2V4dGVybiB2b2lkIHB3Y19jYW1lcmFfcG93ZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwb3dlcik7CiAKIC8qIFByaXZhdGUgaW9jdGwoKXM7IHNlZSBwd2MtaW9jdGwuaCAqLwogZXh0ZXJuIGxvbmcgcHdjX2lvY3RsKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwpAQCAtMzQzLDEyICszODIsNiBAQAogCiAvKiogcHdjLXVuY29tcHJlc3MuYyAqLwogLyogRXhwYW5kIGZyYW1lIHRvIGltYWdlLCBwb3NzaWJseSBpbmNsdWRpbmcgZGVjb21wcmVzc2lvbi4gVXNlcyByZWFkX2ZyYW1lIGFuZCBmaWxsX2ltYWdlICovCi1leHRlcm4gaW50IHB3Y19kZWNvbXByZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQoraW50IHB3Y19kZWNvbXByZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmJ1Zik7CiAKICNlbmRpZgotLyogdmltOiBzZXQgY2lubz0gZm9ybWF0b3B0aW9ucz1jcm9xbCBjaW5kZW50IHNoaWZ0d2lkdGg9OCB0YWJzdG9wPTg6ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IGI0MmJmYTUuLmQwN2RmMjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtNDAsNyArMzksNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KIAotI2RlZmluZSBQWEFfQ0FNX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCA1KQorI2RlZmluZSBQWEFfQ0FNX1ZFUlNJT04gIjAuMC42IgogI2RlZmluZSBQWEFfQ0FNX0RSVl9OQU1FICJweGEyN3gtY2FtZXJhIgogCiAvKiBDYW1lcmEgSW50ZXJmYWNlICovCkBAIC0yNDcsNyArMjQ2LDcgQEAKIAlpZiAoYnl0ZXNfcGVyX2xpbmUgPCAwKQogCQlyZXR1cm4gYnl0ZXNfcGVyX2xpbmU7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgImNvdW50PSVkLCBzaXplPSVkXG4iLCAqY291bnQsICpzaXplKTsKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiY291bnQ9JWQsIHNpemU9JWRcbiIsICpjb3VudCwgKnNpemUpOwogCiAJKnNpemUgPSBieXRlc19wZXJfbGluZSAqIGljZC0+dXNlcl9oZWlnaHQ7CiAKQEAgLTI2MiwxMyArMjYxLDEzIEBACiBzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSA9IHZpZGVvYnVmX3RvX2RtYSgmYnVmLT52Yik7CiAJaW50IGk7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKIAkJJmJ1Zi0+dmIsIGJ1Zi0+dmIuYmFkZHIsIGJ1Zi0+dmIuYnNpemUpOwogCiAJLyoKQEAgLTQyOSw3ICs0MjgsNyBAQAogCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGNkZXYtPnNvY19ob3N0LnY0bDJfZGV2LmRldjsKIAlzdHJ1Y3QgcHhhX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgcHhhX2J1ZmZlciwgdmIpOwpAQCAtNjM2LDExICs2MzUsMTEgQEAKIAkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCBweGFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkIGFjdGl2ZT0lcFxuIiwKKwlkZXZfZGJnKGljZC0+cGFyZW50LCAiJXMgKHZiPTB4JXApIDB4JTA4bHggJWQgYWN0aXZlPSVwXG4iLAogCQlfX2Z1bmNfXywgdmIsIHZiLT5iYWRkciwgdmItPmJzaXplLCBwY2Rldi0+YWN0aXZlKTsKIAogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKQEAgLTY1OCw3ICs2NTcsNyBAQAogCXN0cnVjdCBweGFfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBweGFfYnVmZmVyLCB2Yik7CiAjaWZkZWYgREVCVUcKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OwogCiAJZGV2X2RiZyhkZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CkBAIC04NDMsNyArODQyLDcgQEAKIHN0YXRpYyB2b2lkIHB4YV9jYW1lcmFfaW5pdF92aWRlb2J1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAKIAkvKgpAQCAtOTcyLDcgKzk3MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9hZGRfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCWlmIChwY2Rldi0+aWNkKQpAQCAtOTgyLDcgKzk4MSw3IEBACiAKIAlwY2Rldi0+aWNkID0gaWNkOwogCi0JZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LCAiUFhBIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCWRldl9pbmZvKGljZC0+cGFyZW50LCAiUFhBIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAogCQkgaWNkLT5kZXZudW0pOwogCiAJcmV0dXJuIDA7CkBAIC05OTEsMTIgKzk5MCwxMiBAQAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCUJVR19PTihpY2QgIT0gcGNkZXYtPmljZCk7CiAKLQlkZXZfaW5mbyhpY2QtPmRldi5wYXJlbnQsICJQWEEgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwlkZXZfaW5mbyhpY2QtPnBhcmVudCwgIlBYQSBDYW1lcmEgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLAogCQkgaWNkLT5kZXZudW0pOwogCiAJLyogZGlzYWJsZSBjYXB0dXJlLCBkaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTEwNTcsNyArMTA1Niw3IEBACiBzdGF0aWMgdm9pZCBweGFfY2FtZXJhX3NldHVwX2NpY3Ioc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCBfX3UzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCXVuc2lnbmVkIGxvbmcgZHcsIGJwcDsKQEAgLTExNTIsNyArMTE1MSw3IEBACiAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzLCBjYW1lcmFfZmxhZ3MsIGNvbW1vbl9mbGFnczsKIAlpbnQgcmV0OwpAQCAtMTIxMCw3ICsxMjA5LDcgQEAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV90cnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgICB1bnNpZ25lZCBjaGFyIGJ1c3dpZHRoKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOwogCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKHBjZGV2LCBidXN3aWR0aCwgJmJ1c19mbGFncyk7CkBAIC0xMjQ3LDcgKzEyNDYsNyBAQAogCQkJCSAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CiAJaW50IGZvcm1hdHMgPSAwLCByZXQ7CiAJc3RydWN0IHB4YV9jYW0gKmNhbTsKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKQEAgLTEzMzUsOSArMTMzNCw5IEBACiAJCQkgICAgICAgc3RydWN0IHY0bDJfY3JvcCAqYSkKIHsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGRldik7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPmRldi5wYXJlbnQ7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfc2Vuc2Ugc2Vuc2UgPSB7CiAJCS5tYXN0ZXJfY2xvY2sgPSBwY2Rldi0+bWNsaywKQEAgLTEzNzksNyArMTM3OCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCiAJCWlmIChweGFfY2FtZXJhX2NoZWNrX2ZyYW1lKG1mLndpZHRoLCBtZi5oZWlnaHQpKSB7Ci0JCQlkZXZfd2FybihpY2QtPmRldi5wYXJlbnQsCisJCQlkZXZfd2FybihpY2QtPnBhcmVudCwKIAkJCQkgIkluY29uc2lzdGVudCBzdGF0ZS4gVXNlIFNfRk1UIHRvIHJlcGFpclxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTQwNiw5ICsxNDA1LDkgQEAKIHN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChkZXYpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOwogCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0gewpAQCAtMTQ4NSw3ICsxNDg0LDcgQEAKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0OTksMTYgKzE0OTgsMTEgQEAKIAkJCSAgICAgICZwaXgtPmhlaWdodCwgMzIsIDIwNDgsIDAsCiAJCQkgICAgICBwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1lVVjQyMlAgPyA0IDogMCk7CiAKLQlwaXgtPmJ5dGVzcGVybGluZSA9IHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKHBpeC0+d2lkdGgsCi0JCQkJCQkgICAgeGxhdGUtPmhvc3RfZm10KTsKLQlpZiAocGl4LT5ieXRlc3BlcmxpbmUgPCAwKQotCQlyZXR1cm4gcGl4LT5ieXRlc3BlcmxpbmU7Ci0JcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqIHBpeC0+Ynl0ZXNwZXJsaW5lOwotCiAJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLwogCW1mLndpZHRoCT0gcGl4LT53aWR0aDsKIAltZi5oZWlnaHQJPSBwaXgtPmhlaWdodDsKLQltZi5maWVsZAk9IHBpeC0+ZmllbGQ7CisJLyogT25seSBwcm9ncmVzc2l2ZSB2aWRlbyBzdXBwb3J0ZWQgc28gZmFyICovCisJbWYuZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CiAJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKIAltZi5jb2RlCQk9IHhsYXRlLT5jb2RlOwogCkBAIC0xNTI3LDcgKzE1MjEsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBUT0RPOiBzdXBwb3J0IGludGVybGFjZWQgYXQgbGVhc3QgaW4gcGFzcy10aHJvdWdoIG1vZGUgKi8KLQkJZGV2X2VycihpY2QtPmRldi5wYXJlbnQsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwKKwkJZGV2X2VycihpY2QtPnBhcmVudCwgIkZpZWxkIHR5cGUgJWQgdW5zdXBwb3J0ZWQuXG4iLAogCQkJbWYuZmllbGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNTc4LDE1ICsxNTcyLDE0IEBACiB7CiAJLyogY2FwLT5uYW1lIGlzIHNldCBieSB0aGUgZmlyZW5kbHkgY2FsbGVyOi0+ICovCiAJc3RybGNweShjYXAtPmNhcmQsIHB4YV9jYW1fZHJpdmVyX2Rlc2NyaXB0aW9uLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT52ZXJzaW9uID0gUFhBX0NBTV9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zdXNwZW5kKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGRldik7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlpbnQgaSA9IDAsIHJldCA9IDA7CiAKQEAgLTE1OTYsMTUgKzE1ODksMTkgQEAKIAlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1IzKTsKIAlwY2Rldi0+c2F2ZV9jaWNyW2krK10gPSBfX3Jhd19yZWFkbChwY2Rldi0+YmFzZSArIENJQ1I0KTsKIAotCWlmICgocGNkZXYtPmljZCkgJiYgKHBjZGV2LT5pY2QtPm9wcy0+c3VzcGVuZCkpCi0JCXJldCA9IHBjZGV2LT5pY2QtPm9wcy0+c3VzcGVuZChwY2Rldi0+aWNkLCBzdGF0ZSk7CisJaWYgKHBjZGV2LT5pY2QpIHsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KHBjZGV2LT5pY2QpOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAwKTsKKwkJaWYgKHJldCA9PSAtRU5PSU9DVExDTUQpCisJCQlyZXQgPSAwOworCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2KTsKIAlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCBpID0gMCwgcmV0ID0gMDsKIApAQCAtMTYxOCw4ICsxNjE1LDEyIEBACiAJX19yYXdfd3JpdGVsKHBjZGV2LT5zYXZlX2NpY3JbaSsrXSwgcGNkZXYtPmJhc2UgKyBDSUNSMyk7CiAJX19yYXdfd3JpdGVsKHBjZGV2LT5zYXZlX2NpY3JbaSsrXSwgcGNkZXYtPmJhc2UgKyBDSUNSNCk7CiAKLQlpZiAoKHBjZGV2LT5pY2QpICYmIChwY2Rldi0+aWNkLT5vcHMtPnJlc3VtZSkpCi0JCXJldCA9IHBjZGV2LT5pY2QtPm9wcy0+cmVzdW1lKHBjZGV2LT5pY2QpOworCWlmIChwY2Rldi0+aWNkKSB7CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihwY2Rldi0+aWNkKTsKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMSk7CisJCWlmIChyZXQgPT0gLUVOT0lPQ1RMQ01EKQorCQkJcmV0ID0gMDsKKwl9CiAKIAkvKiBSZXN0YXJ0IGZyYW1lIGNhcHR1cmUgaWYgYWN0aXZlIGJ1ZmZlciBleGlzdHMgKi8KIAlpZiAoIXJldCAmJiBwY2Rldi0+YWN0aXZlKQpAQCAtMTYzMiw4ICsxNjMzLDYgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmFkZAkJPSBweGFfY2FtZXJhX2FkZF9kZXZpY2UsCiAJLnJlbW92ZQkJPSBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCi0JLnN1c3BlbmQJPSBweGFfY2FtZXJhX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKIAkuc2V0X2Nyb3AJPSBweGFfY2FtZXJhX3NldF9jcm9wLAogCS5nZXRfZm9ybWF0cwk9IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMsCiAJLnB1dF9mb3JtYXRzCT0gcHhhX2NhbWVyYV9wdXRfZm9ybWF0cywKQEAgLTE4MTgsOSArMTgxNywxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhX2NhbWVyYV9wbSA9IHsKKwkuc3VzcGVuZAk9IHB4YV9jYW1lcmFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9jYW1lcmFfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhX2NhbWVyYV9kcml2ZXIgPSB7CiAJLmRyaXZlciAJPSB7CiAJCS5uYW1lCT0gUFhBX0NBTV9EUlZfTkFNRSwKKwkJLnBtCT0gJnB4YV9jYW1lcmFfcG0sCiAJfSwKIAkucHJvYmUJCT0gcHhhX2NhbWVyYV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YV9jYW1lcmFfcmVtb3ZlKSwKQEAgLTE4NDMsNCArMTg0OCw1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlBYQTI3eCBTb0MgQ2FtZXJhIEhvc3QgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJHdWVubmFkaSBMaWFraG92ZXRza2kgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFBYQV9DQU1fVkVSU0lPTik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUFhBX0NBTV9EUlZfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCmluZGV4IDU3ZTExYjYuLjg0N2NjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCkBAIC0xMzY0LDEwICsxMzY0LDkgQEAKIAlpbnQgZGF0YTEsIGRhdGEyOwogCWludCByZXQ7CiAKLQkvKiBUaGlzIGNvdWxkIGJlIGEgQlVHX09OKCkgb3IgYSBXQVJOX09OKCksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5ICovCi0JaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKLQkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCi0JCXJldHVybiAtRU5PREVWOworCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuICovCisJQlVHX09OKCFpY2QtPnBhcmVudCB8fAorCSAgICAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpLT5uciAhPSBpY2QtPmlmYWNlKTsKIAogCS8qIFJlYWQgb3V0IHRoZSBjaGlwIHZlcnNpb24gcmVnaXN0ZXIgKi8KIAlkYXRhMSA9IHJlZ19yZWFkKGNsaWVudCwgUko1NE4xX0RFVl9DT0RFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwppbmRleCA1YjlkY2U4Li44MDNjOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCkBAIC0xNiwxNSArMTYsMTAgQEAKICAqIEV4YW1wbGUgbWF4aW11bSBiYW5kd2lkdGggdXRpbGl6YXRpb246CiAgKgogICogLWZ1bGwgc2l6ZSwgY29sb3IgbW9kZSBZVVlWIG9yIFlVVjQyMlA6IDIgY2hhbm5lbHMgYXQgb25jZQotICoKICAqIC1mdWxsIG9yIGhhbGYgc2l6ZSBHcmV5IHNjYWxlOiBhbGwgNCBjaGFubmVscyBhdCBvbmNlCi0gKgogICogLWhhbGYgc2l6ZSwgY29sb3IgbW9kZSBZVVlWIG9yIFlVVjQyMlA6IGFsbCA0IGNoYW5uZWxzIGF0IG9uY2UKLSAqCiAgKiAtZnVsbCBzaXplLCBjb2xvciBtb2RlIFlVWVYgb3IgWVVWNDIyUCAxLzIgZnJhbWUgcmF0ZTogYWxsIDQgY2hhbm5lbHMKICAqICBhdCBvbmNlLgotICogIChUT0RPOiBJbmNvcnBvcmF0ZSB2aWRlb2RldjIgZnJhbWUgcmF0ZShGUikgZW51bWVyYXRpb24sCi0gKiAgd2hpY2ggaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Nyw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC01NiwxMiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAotI2RlZmluZSBTMjI1NV9NQUpPUl9WRVJTSU9OCTEKLSNkZWZpbmUgUzIyNTVfTUlOT1JfVkVSU0lPTgkyMQotI2RlZmluZSBTMjI1NV9SRUxFQVNFCQkwCi0jZGVmaW5lIFMyMjU1X1ZFUlNJT04JCUtFUk5FTF9WRVJTSU9OKFMyMjU1X01BSk9SX1ZFUlNJT04sIFwKLQkJCQkJICAgICAgIFMyMjU1X01JTk9SX1ZFUlNJT04sIFwKLQkJCQkJICAgICAgIFMyMjU1X1JFTEVBU0UpCisjZGVmaW5lIFMyMjU1X1ZFUlNJT04JCSIxLjIyLjEiCiAjZGVmaW5lIEZJUk1XQVJFX0ZJTEVfTkFNRSAiZjIyNTV1c2IuYmluIgogCiAvKiBkZWZhdWx0IEpQRUcgcXVhbGl0eSAqLwpAQCAtMTI2LDcgKzExNSw3IEBACiAjZGVmaW5lIE1BU0tfQ09MT1IgICAgICAgMHgwMDAwMDBmZgogI2RlZmluZSBNQVNLX0pQR19RVUFMSVRZIDB4MDAwMGZmMDAKICNkZWZpbmUgTUFTS19JTlBVVF9UWVBFICAweDAwMGYwMDAwCi0vKiBmcmFtZSBkZWNpbWF0aW9uLiBOb3QgaW1wbGVtZW50ZWQgYnkgVjRMIHlldChleHBlcmltZW50YWwgaW4gVjRMKSAqLworLyogZnJhbWUgZGVjaW1hdGlvbi4gKi8KICNkZWZpbmUgRkRFQ18xCQkxCS8qIGNhcHR1cmUgZXZlcnkgZnJhbWUuIGRlZmF1bHQgKi8KICNkZWZpbmUgRkRFQ18yCQkyCS8qIGNhcHR1cmUgZXZlcnkgMm5kIGZyYW1lICovCiAjZGVmaW5lIEZERUNfMwkJMwkvKiBjYXB0dXJlIGV2ZXJ5IDNyZCBmcmFtZSAqLwpAQCAtMzEyLDkgKzMwMSw5IEBACiB9OwogCiAvKiBjdXJyZW50IGN5cHJlc3MgRUVQUk9NIGZpcm13YXJlIHZlcnNpb24gKi8KLSNkZWZpbmUgUzIyNTVfQ1VSX1VTQl9GV1ZFUgkoKDMgPDwgOCkgfCAxMSkKKyNkZWZpbmUgUzIyNTVfQ1VSX1VTQl9GV1ZFUgkoKDMgPDwgOCkgfCAxMikKIC8qIGN1cnJlbnQgRFNQIEZXIHZlcnNpb24gKi8KLSNkZWZpbmUgUzIyNTVfQ1VSX0RTUF9GV1ZFUiAgICAgMTAxMDIKKyNkZWZpbmUgUzIyNTVfQ1VSX0RTUF9GV1ZFUiAgICAgMTAxMDQKIC8qIE5lZWQgRFNQIHZlcnNpb24gNSsgZm9yIHZpZGVvIHN0YXR1cyBmZWF0dXJlICovCiAjZGVmaW5lIFMyMjU1X01JTl9EU1BfU1RBVFVTICAgICAgNQogI2RlZmluZSBTMjI1NV9NSU5fRFNQX0NPTE9SRklMVEVSIDgKQEAgLTUwMiw3ICs0OTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzMjI1NV9yZXNldF9kc3Bwb3dlcihzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpCiB7Ci0JczIyNTVfdmVuZG9yX3JlcShkZXYsIDB4NDAsIDB4MGIwYiwgMHgwYjAxLCBOVUxMLCAwLCAxKTsKKwlzMjI1NV92ZW5kb3JfcmVxKGRldiwgMHg0MCwgMHgwMDAwLCAweDAwMDEsIE5VTEwsIDAsIDEpOwogCW1zbGVlcCgxMCk7CiAJczIyNTVfdmVuZG9yX3JlcShkZXYsIDB4NTAsIDB4MDAwMCwgMHgwMDAwLCBOVUxMLCAwLCAxKTsKIAltc2xlZXAoNjAwKTsKQEAgLTg1Niw3ICs4NDUsNiBAQAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJzMjI1NSIsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCAiczIyNTUiLCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7Ci0JY2FwLT52ZXJzaW9uID0gUzIyNTVfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTg0LDkgKzE5NzIsOCBAQAogCQkJICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZjaGFubmVsLT52ZGV2KSk7CiAKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU2Vuc29yYXkgMjI1NSBWNEwgZHJpdmVyIFJldmlzaW9uOiAlZC4lZFxuIiwKLQkgICAgICAgUzIyNTVfTUFKT1JfVkVSU0lPTiwKLQkgICAgICAgUzIyNTVfTUlOT1JfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2Vuc29yYXkgMjI1NSBWNEwgZHJpdmVyIFJldmlzaW9uOiAlc1xuIiwKKwkgICAgICAgUzIyNTVfVkVSU0lPTik7CiAJLyogaWYgbm8gY2hhbm5lbHMgcmVnaXN0ZXJlZCwgcmV0dXJuIGVycm9yIGFuZCBwcm9iZSB3aWxsIGZhaWwqLwogCWlmIChhdG9taWNfcmVhZCgmZGV2LT5udW1fY2hhbm5lbHMpID09IDApIHsKIAkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CkBAIC0yMzAyLDE1ICsyMjg5LDEyIEBACiAJLyogcXVlcnkgdGhlIGZpcm13YXJlICovCiAJZndfdmVyID0gczIyNTVfZ2V0X2Z4MmZ3KGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIyMjU1IHVzYiBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAorCXByaW50ayhLRVJOX0lORk8gInMyMjU1OiB1c2IgZmlybXdhcmUgdmVyc2lvbiAlZC4lZFxuIiwKIAkgICAgICAgKGZ3X3ZlciA+PiA4KSAmIDB4ZmYsCiAJICAgICAgIGZ3X3ZlciAmIDB4ZmYpOwogCiAJaWYgKGZ3X3ZlciA8IFMyMjU1X0NVUl9VU0JfRldWRVIpCi0JCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LAotCQkJInVzYiBmaXJtd2FyZSBub3QgdXAgdG8gZGF0ZSAlZC4lZFxuIiwKLQkJCShmd192ZXIgPj4gOCkgJiAweGZmLAotCQkJZndfdmVyICYgMHhmZik7CisJCXByaW50ayhLRVJOX0lORk8gInMyMjU1OiBuZXdlciBVU0IgZmlybXdhcmUgYXZhaWxhYmxlXG4iKTsKIAogCWZvciAoaiA9IDA7IGogPCBNQVhfQ0hBTk5FTFM7IGorKykgewogCQlzdHJ1Y3QgczIyNTVfY2hhbm5lbCAqY2hhbm5lbCA9ICZkZXYtPmNoYW5uZWxbal07CkBAIC0yNzIxLDMgKzI3MDUsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTZW5zb3JheSAyMjU1IFZpZGVvIGZvciBMaW51eCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRlYW4gQW5kZXJzb24gKFNlbnNvcmF5IENvbXBhbnkgSW5jLikiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFMyMjU1X1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jYXB0dXJlLmMKaW5kZXggODFiNGE4Mi4uMGQ3MzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY2FwdHVyZS5jCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgpAQCAtNDUxLDcgKzQ1MCw2IEBACiAJc3RybmNweShjYXAtPmRyaXZlciwgZmltYy0+cGRldi0+bmFtZSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSAtIDEpOwogCXN0cm5jcHkoY2FwLT5jYXJkLCBmaW1jLT5wZGV2LT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSAtIDEpOwogCWNhcC0+YnVzX2luZm9bMF0gPSAwOwotCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDEsIDAsIDApOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRV9NUExBTkU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jCmluZGV4IGJkZjE5YWQuLmFhNTUwNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYwpAQCAtMTIsNyArMTIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KQEAgLTc3NCw3ICs3NzMsNiBAQAogCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGZpbWMtPnBkZXYtPm5hbWUsIHNpemVvZihjYXAtPmRyaXZlcikgLSAxKTsKIAlzdHJuY3B5KGNhcC0+Y2FyZCwgZmltYy0+cGRldi0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkgLSAxKTsKIAljYXAtPmJ1c19pbmZvWzBdID0gMDsKLQljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigxLCAwLCAwKTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1NUUkVBTUlORyB8CiAJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9WSURFT19PVVRQVVQgfAogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORSB8IFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9NUExBTkU7CkBAIC0xOTM3LDMgKzE5MzUsNCBAQAogTU9EVUxFX0FVVEhPUigiU3lsd2VzdGVyIE5hd3JvY2tpIDxzLm5hd3JvY2tpQHNhbXN1bmcuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTNVAgRklNQyBjYW1lcmEgaG9zdCBpbnRlcmZhY2UvdmlkZW8gcG9zdHByb2Nlc3NvciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAuMSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjYzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitvYmotJChDT05GSUdfVklERU9fU0FNU1VOR19TNVBfTUZDKSA6PSBzNXAtbWZjLm8KK3M1cC1tZmMteSArPSBzNXBfbWZjLm8gczVwX21mY19pbnRyLm8gczVwX21mY19vcHIubworczVwLW1mYy15ICs9IHM1cF9tZmNfZGVjLm8gczVwX21mY19lbmMubworczVwLW1mYy15ICs9IHM1cF9tZmNfY3RybC5vIHM1cF9tZmNfY21kLm8KK3M1cC1tZmMteSArPSBzNXBfbWZjX3BtLm8gczVwX21mY19zaG0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3JlZ3MtbWZjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvcmVncy1tZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTNhOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3JlZ3MtbWZjLmgKQEAgLTAsMCArMSw0MTMgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9uIGZpbGUgZm9yIFNhbXN1bmcgTUZDIFY1LjEgSW50ZXJmYWNlIChGSU1WKSBkcml2ZXIKKyAqCisgKiBLYW1pbCBEZWJza2ksIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9SRUdTX0ZJTVZfSAorI2RlZmluZSBfUkVHU19GSU1WX0gKKworI2RlZmluZSBTNVBfRklNVl9SRUdfU0laRQkoUzVQX0ZJTVZfRU5EX0FERFIgLSBTNVBfRklNVl9TVEFSVF9BRERSKQorI2RlZmluZSBTNVBfRklNVl9SRUdfQ09VTlQJKChTNVBfRklNVl9FTkRfQUREUiAtIFM1UF9GSU1WX1NUQVJUX0FERFIpIC8gNCkKKworLyogTnVtYmVyIG9mIGJpdHMgdGhhdCB0aGUgYnVmZmVyIGFkZHJlc3Mgc2hvdWxkIGJlIHNoaWZ0ZWQgZm9yIHBhcnRpY3VsYXIKKyAqIE1GQyBidWZmZXJzLiAgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfU1RBUlRfQUREUgkJMHgwMDAwCisjZGVmaW5lIFM1UF9GSU1WX0VORF9BRERSCQkweGUwMDgKKworI2RlZmluZSBTNVBfRklNVl9TV19SRVNFVAkJMHgwMDAwCisjZGVmaW5lIFM1UF9GSU1WX1JJU0NfSE9TVF9JTlQJCTB4MDAwOAorCisvKiBDb21tYW5kIGZyb20gSE9TVCB0byBSSVNDICovCisjZGVmaW5lIFM1UF9GSU1WX0hPU1QyUklTQ19DTUQJCTB4MDAzMAorI2RlZmluZSBTNVBfRklNVl9IT1NUMlJJU0NfQVJHMQkJMHgwMDM0CisjZGVmaW5lIFM1UF9GSU1WX0hPU1QyUklTQ19BUkcyCQkweDAwMzgKKyNkZWZpbmUgUzVQX0ZJTVZfSE9TVDJSSVNDX0FSRzMJCTB4MDAzYworI2RlZmluZSBTNVBfRklNVl9IT1NUMlJJU0NfQVJHNAkJMHgwMDQwCisKKy8qIENvbW1hbmQgZnJvbSBSSVNDIHRvIEhPU1QgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfUklTQzJIT1NUX0NNRAkJMHgwMDQ0CisjZGVmaW5lIFM1UF9GSU1WX1JJU0MySE9TVF9DTURfTUFTSwkweDFGRkZGCisjZGVmaW5lIFM1UF9GSU1WX1JJU0MySE9TVF9BUkcxCQkweDAwNDgKKyNkZWZpbmUgUzVQX0ZJTVZfUklTQzJIT1NUX0FSRzIJCTB4MDA0YworI2RlZmluZSBTNVBfRklNVl9SSVNDMkhPU1RfQVJHMwkJMHgwMDUwCisjZGVmaW5lIFM1UF9GSU1WX1JJU0MySE9TVF9BUkc0CQkweDAwNTQKKworI2RlZmluZSBTNVBfRklNVl9GV19WRVJTSU9OCQkweDAwNTgKKyNkZWZpbmUgUzVQX0ZJTVZfU1lTX01FTV9TWgkJMHgwMDVjCisjZGVmaW5lIFM1UF9GSU1WX0ZXX1NUQVRVUwkJMHgwMDgwCisKKy8qIE1lbW9yeSBjb250cm9sbGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFM1UF9GSU1WX01DX0RSQU1CQVNFX0FEUl9BCTB4MDUwOAorI2RlZmluZSBTNVBfRklNVl9NQ19EUkFNQkFTRV9BRFJfQgkweDA1MGMKKyNkZWZpbmUgUzVQX0ZJTVZfTUNfU1RBVFVTCQkweDA1MTAKKworLyogQ29tbW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EJCTB4MDYwMAorI2RlZmluZSBTNVBfRklNVl9DT01NT05fQkFTRV9CCQkweDA3MDAKKworLyogRGVjb2RlciAqLworI2RlZmluZSBTNVBfRklNVl9ERUNfQ0hST01BX0FEUgkJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19MVU1BX0FEUgkJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0IpCisKKy8qIEguMjY0IGRlY29kaW5nICovCisjZGVmaW5lIFM1UF9GSU1WX0gyNjRfVkVSVF9OQl9NVl9BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDhjKQorCQkJCQkvKiB2ZXJ0aWNhbCBuZWlnaGJvciBtb3Rpb24gdmVjdG9yICovCisjZGVmaW5lIFM1UF9GSU1WX0gyNjRfTkJfSVBfQURSCQkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSArIDB4OTApCisJCQkJCS8qIG5laWdoYm9yIHBpeGVscyBmb3IgaW50cmEgcHJlZCAqLworI2RlZmluZSBTNVBfRklNVl9IMjY0X01WX0FEUgkJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0IgKyAweDgwKQorCQkJCQkvKiBIMjY0IG1vdGlvbiB2ZWN0b3IgKi8KKworLyogTVBFRzQgZGVjb2RpbmcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfTVBFRzRfTkJfRENBQ19BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDhjKQorCQkJCQkvKiBuZWlnaGJvciBBQy9EQyBjb2VmZi4gKi8KKyNkZWZpbmUgUzVQX0ZJTVZfTVBFRzRfVVBfTkJfTVZfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHg5MCkKKwkJCQkJLyogdXBwZXIgbmVpZ2hib3IgbW90aW9uIHZlY3RvciAqLworI2RlZmluZSBTNVBfRklNVl9NUEVHNF9TQV9NVl9BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDk0KQorCQkJCQkvKiBzdWJzZXEuIGFuY2hvciBtb3Rpb24gdmVjdG9yICovCisjZGVmaW5lIFM1UF9GSU1WX01QRUc0X09UX0xJTkVfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHg5OCkKKwkJCQkJLyogb3ZlcmxhcCB0cmFuc2Zvcm0gbGluZSAqLworI2RlZmluZSBTNVBfRklNVl9NUEVHNF9TUF9BRFIJCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHhhOCkKKwkJCQkJLyogc3ludGF4IHBhcnNlciAqLworCisvKiBILjI2MyBkZWNvZGluZyAqLworI2RlZmluZSBTNVBfRklNVl9IMjYzX05CX0RDQUNfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHg4YykKKyNkZWZpbmUgUzVQX0ZJTVZfSDI2M19VUF9OQl9NVl9BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDkwKQorI2RlZmluZSBTNVBfRklNVl9IMjYzX1NBX01WX0FEUgkJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDk0KQorI2RlZmluZSBTNVBfRklNVl9IMjYzX09UX0xJTkVfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHg5OCkKKworLyogVkMtMSBkZWNvZGluZyAqLworI2RlZmluZSBTNVBfRklNVl9WQzFfTkJfRENBQ19BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDhjKQorI2RlZmluZSBTNVBfRklNVl9WQzFfVVBfTkJfTVZfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHg5MCkKKyNkZWZpbmUgUzVQX0ZJTVZfVkMxX1NBX01WX0FEUgkJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDk0KQorI2RlZmluZSBTNVBfRklNVl9WQzFfT1RfTElORV9BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDk4KQorI2RlZmluZSBTNVBfRklNVl9WQzFfQklUUExBTkUzX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSArIDB4OWMpCisJCQkJCS8qIGJpdHBsYW5lMyAqLworI2RlZmluZSBTNVBfRklNVl9WQzFfQklUUExBTkUyX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSArIDB4YTApCisJCQkJCS8qIGJpdHBsYW5lMiAqLworI2RlZmluZSBTNVBfRklNVl9WQzFfQklUUExBTkUxX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSArIDB4YTQpCisJCQkJCS8qIGJpdHBsYW5lMSAqLworCisvKiBFbmNvZGVyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SRUYwX0xVTUFfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHgxYykKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRjFfTFVNQV9BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDIwKQorCQkJCQkvKiByZWNvbnN0cnVjdGVkIGx1bWEgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRjBfQ0hST01BX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQikKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRjFfQ0hST01BX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQiArIDB4MDQpCisJCQkJCS8qIHJlY29uc3RydWN0ZWQgY2hyb21hICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SRUYyX0xVTUFfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9CICsgMHgxMCkKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRjJfQ0hST01BX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQiArIDB4MDgpCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SRUYzX0xVTUFfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9CICsgMHgxNCkKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRjNfQ0hST01BX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQiArIDB4MGMpCisKKy8qIEguMjY0IGVuY29kaW5nICovCisjZGVmaW5lIFM1UF9GSU1WX0gyNjRfVVBfTVZfQURSCQkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSkKKwkJCQkJLyogdXBwZXIgbW90aW9uIHZlY3RvciAqLworI2RlZmluZSBTNVBfRklNVl9IMjY0X05CT1JfSU5GT19BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDA0KQorCQkJCQkvKiBlbnRyb3B5IGVuZ2luZSdzIG5laWdoYm9yIGluZm8uICovCisjZGVmaW5lIFM1UF9GSU1WX0gyNjRfVVBfSU5UUkFfTURfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHgwOCkKKwkJCQkJLyogdXBwZXIgaW50cmEgTUQgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfSDI2NF9DT1pFUk9fRkxBR19BRFIJKFM1UF9GSU1WX0NPTU1PTl9CQVNFX0EgKyAweDEwKQorCQkJCQkvKiBkaXJlY3QgY296ZXJvIGZsYWcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfSDI2NF9VUF9JTlRSQV9QUkVEX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQiArIDB4NDApCisJCQkJCS8qIHVwcGVyIGludHJhIFBSRUQgKi8KKworLyogSC4yNjMgZW5jb2RpbmcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfSDI2M19VUF9NVl9BRFIJCShTNVBfRklNVl9DT01NT05fQkFTRV9BKQorCQkJCQkvKiB1cHBlciBtb3Rpb24gdmVjdG9yICovCisjZGVmaW5lIFM1UF9GSU1WX0gyNjNfQUNEQ19DT0VGX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSArIDB4MDQpCisJCQkJCS8qIHVwcGVyIFEgY29lZmYuICovCisKKy8qIE1QRUc0IGVuY29kaW5nICovCisjZGVmaW5lIFM1UF9GSU1WX01QRUc0X1VQX01WX0FEUgkoUzVQX0ZJTVZfQ09NTU9OX0JBU0VfQSkKKwkJCQkJLyogdXBwZXIgbW90aW9uIHZlY3RvciAqLworI2RlZmluZSBTNVBfRklNVl9NUEVHNF9BQ0RDX0NPRUZfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHgwNCkKKwkJCQkJLyogdXBwZXIgUSBjb2VmZi4gKi8KKyNkZWZpbmUgUzVQX0ZJTVZfTVBFRzRfQ09aRVJPX0ZMQUdfQURSCShTNVBfRklNVl9DT01NT05fQkFTRV9BICsgMHgxMCkKKwkJCQkJLyogZGlyZWN0IGNvemVybyBmbGFnICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JFRl9CX0xVTUFfQURSICAgICAweDA2MmMgLyogcmVmIEIgTHVtYSBhZGRyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SRUZfQl9DSFJPTUFfQURSICAgMHgwNjMwIC8qIHJlZiBCIENocm9tYSBhZGRyICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0NVUl9MVU1BX0FEUgkweDA3MTggLyogY3VycmVudCBMdW1hIGFkZHIgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0NVUl9DSFJPTUFfQURSCTB4MDcxQyAvKiBjdXJyZW50IENocm9tYSBhZGRyICovCisKKy8qIENvZGVjIGNvbW1vbiByZWdpc3RlciAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfSFNJWkVfUFgJCTB4MDgxOCAvKiBmcmFtZSB3aWR0aCBhdCBlbmNvZGVyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19WU0laRV9QWAkJMHgwODFjIC8qIGZyYW1lIGhlaWdodCBhdCBlbmNvZGVyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19QUk9GSUxFCQkweDA4MzAgLyogcHJvZmlsZSByZWdpc3RlciAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfUFJPRklMRV9IMjY0X01BSU4JCQkwCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19QUk9GSUxFX0gyNjRfSElHSAkJCTEKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1BST0ZJTEVfSDI2NF9CQVNFTElORQkJMgorI2RlZmluZSBTNVBfRklNVl9FTkNfUFJPRklMRV9NUEVHNF9TSU1QTEUJCTAKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1BST0ZJTEVfTVBFRzRfQURWQU5DRURfU0lNUExFCTEKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1BJQ19TVFJVQ1QJCTB4MDgzYyAvKiBwaWN0dXJlIGZpZWxkL2ZyYW1lIGZsYWcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0xGX0NUUkwJCTB4MDg0OCAvKiBsb29wIGZpbHRlciBjb250cm9sICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19BTFBIQV9PRkYJCTB4MDg0YyAvKiBsb29wIGZpbHRlciBhbHBoYSBvZmZzZXQgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0JFVEFfT0ZGCQkweDA4NTAgLyogbG9vcCBmaWx0ZXIgYmV0YSBvZmZzZXQgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfTVJfQlVTSUZfQ1RSTAkJMHgwODU0IC8qIGhpZGRlbiwgYnVzIGludGVyZmFjZSBjdHJsICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19QWExfQ0FDSEVfQ1RSTAkweDBhMDAgLyogcGl4ZWwgY2FjaGUgY29udHJvbCAqLworCisvKiBDaGFubmVsICYgc3RyZWFtIGludGVyZmFjZSByZWdpc3RlciAqLworI2RlZmluZSBTNVBfRklNVl9TSV9SVE5fQ0hJRAkJMHgyMDAwIC8qIFJldHVybiBDSCBpbnN0IElEIHJlZ2lzdGVyICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMF9JTlNUX0lECQkweDIwNDAgLyogY29kZWMgaW5zdGFuY2UgSUQgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfU0lfQ0gxX0lOU1RfSUQJCTB4MjA4MCAvKiBjb2RlYyBpbnN0YW5jZSBJRCAqLworLyogRGVjb2RlciAqLworI2RlZmluZSBTNVBfRklNVl9TSV9WUkVTT0wJCTB4MjAwNCAvKiB2ZXJ0aWNhbCByZXMgb2YgZGVjb2RlciAqLworI2RlZmluZSBTNVBfRklNVl9TSV9IUkVTT0wJCTB4MjAwOCAvKiBob3Jpem9udGFsIHJlcyBvZiBkZWNvZGVyICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0JVRl9OVU1CRVIJCTB4MjAwYyAvKiBudW1iZXIgb2YgZnJhbWVzIGluIHRoZQorCQkJCQkJCQlkZWNvZGVkIHBpYyAqLworI2RlZmluZSBTNVBfRklNVl9TSV9ESVNQTEFZX1lfQURSCTB4MjAxMCAvKiBsdW1hIGFkZHIgb2YgZGlzcGxheWVkIHBpYyAqLworI2RlZmluZSBTNVBfRklNVl9TSV9ESVNQTEFZX0NfQURSCTB4MjAxNCAvKiBjaHJvbWEgYWRkcm9mIGRpc3BsYXllZCBwaWMgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfU0lfQ09OU1VNRURfQllURVMJMHgyMDE4IC8qIENvbnN1bWVkIG51bWJlciBvZiBieXRlcyB0bworCQkJCQkJCWRlY29kZSBhIGZyYW1lICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0RJU1BMQVlfU1RBVFVTCTB4MjAxYyAvKiBzdGF0dXMgb2YgZGVjb2RlZCBwaWN0dXJlICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfU0lfQ0gwX1NCX1NUX0FEUgkweDIwNDQgLyogc3RhcnQgYWRkciBvZiBzdHJlYW0gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMF9TQl9GUk1fU0laRQkweDIwNDggLyogc2l6ZSBvZiBzdHJlYW0gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMF9ERVNDX0FEUgkweDIwNGMgLyogYWRkciBvZiBkZXNjcmlwdG9yIGJ1ZiAqLworI2RlZmluZSBTNVBfRklNVl9TSV9DSDBfQ1BCX1NJWkUJMHgyMDU4IC8qIG1heCBzaXplIG9mIGNvZGVkIHBpYy4gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMF9ERVNDX1NJWkUJMHgyMDVjIC8qIG1heCBzaXplIG9mIGRlc2NyaXB0b3IgYnVmICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfU0lfQ0gxX1NCX1NUX0FEUgkweDIwODQgLyogc3RhcnQgYWRkciBvZiBzdHJlYW0gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMV9TQl9GUk1fU0laRQkweDIwODggLyogc2l6ZSBvZiBzdHJlYW0gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMV9ERVNDX0FEUgkweDIwOGMgLyogYWRkciBvZiBkZXNjcmlwdG9yIGJ1ZiAqLworI2RlZmluZSBTNVBfRklNVl9TSV9DSDFfQ1BCX1NJWkUJMHgyMDk4IC8qIG1heCBzaXplIG9mIGNvZGVkIHBpYy4gYnVmICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMV9ERVNDX1NJWkUJMHgyMDljIC8qIG1heCBzaXplIG9mIGRlc2NyaXB0b3IgYnVmICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfQ1JDX0xVTUEwCQkweDIwMzAgLyogbHVtYSBjcmMgZGF0YSBwZXIgZnJhbWUKKwkJCQkJCQkJKHRvcCBmaWVsZCkgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfQ1JDX0NIUk9NQTAJCTB4MjAzNCAvKiBjaHJvbWEgY3JjIGRhdGEgcGVyIGZyYW1lCisJCQkJCQkJCSh0b3AgZmllbGQpICovCisjZGVmaW5lIFM1UF9GSU1WX0NSQ19MVU1BMQkJMHgyMDM4IC8qIGx1bWEgY3JjIGRhdGEgcGVyIGJvdHRvbQorCQkJCQkJCQlmaWVsZCAqLworI2RlZmluZSBTNVBfRklNVl9DUkNfQ0hST01BMQkJMHgyMDNjIC8qIGNocm9tYSBjcmMgZGF0YSBwZXIgYm90dG9tCisJCQkJCQkJCWZpZWxkICovCisKKy8qIERpc3BsYXkgc3RhdHVzICovCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVEFUVVNfREVDT0RJTkdfT05MWQkJMAorI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0RFQ09ESU5HX0RJU1BMQVkJCTEKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19ESVNQTEFZX09OTFkJCTIKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19ERUNPRElOR19FTVBUWQkJMworI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0RFQ09ESU5HX1NUQVRVU19NQVNLCTcKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19QUk9HUkVTU0lWRQkJCSgwPDwzKQorI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0lOVEVSTEFDRQkJCSgxPDwzKQorI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0lOVEVSTEFDRV9NQVNLCQkoMTw8MykKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19DUkNfTlVNQkVSX1RXTwkJKDA8PDQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVEFUVVNfQ1JDX05VTUJFUl9GT1VSCQkoMTw8NCkKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19DUkNfTlVNQkVSX01BU0sJCSgxPDw0KQorI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0NSQ19HRU5FUkFURUQJCSgxPDw1KQorI2RlZmluZSBTNVBfRklNVl9ERUNfU1RBVFVTX0NSQ19OT1RfR0VORVJBVEVECQkoMDw8NSkKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19DUkNfTUFTSwkJCSgxPDw1KQorCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVEFUVVNfUkVTT0xVVElPTl9NQVNLCQkoMzw8NCkKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1NUQVRVU19SRVNPTFVUSU9OX0lOQwkJKDE8PDQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVEFUVVNfUkVTT0xVVElPTl9ERUMJCSgyPDw0KQorCisvKiBEZWNvZGUgZnJhbWUgYWRkcmVzcyAqLworI2RlZmluZSBTNVBfRklNVl9ERUNPREVfWV9BRFIJCQkweDIwMjQKKyNkZWZpbmUgUzVQX0ZJTVZfREVDT0RFX0NfQURSCQkJMHgyMDI4CisKKy8qIERlY29kZWQgZnJhbWUgdHBlICovCisjZGVmaW5lIFM1UF9GSU1WX0RFQ09ERV9GUkFNRV9UWVBFCQkweDIwMjAKKyNkZWZpbmUgUzVQX0ZJTVZfREVDT0RFX0ZSQU1FX01BU0sJCTcKKworI2RlZmluZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfU0tJUFBFRAkJMAorI2RlZmluZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfSV9GUkFNRQkJMQorI2RlZmluZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfUF9GUkFNRQkJMgorI2RlZmluZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfQl9GUkFNRQkJMworI2RlZmluZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfT1RIRVJfRlJBTUUJNAorCisvKiBTaXplcyBvZiBidWZmZXJzIHJlcXVpcmVkIGZvciBkZWNvZGluZyAqLworI2RlZmluZSBTNVBfRklNVl9ERUNfTkJfSVBfU0laRQkJCSgzMiAqIDEwMjQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19WRVJUX05CX01WX1NJWkUJCSgxNiAqIDEwMjQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkUJCSgxNiAqIDEwMjQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19VUE5CX01WX1NJWkUJCSg2OCAqIDEwMjQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVUJfQU5DSE9SX01WX1NJWkUJCSgxMzYgKiAxMDI0KQorI2RlZmluZSBTNVBfRklNVl9ERUNfT1ZFUkxBUF9UUkFOU0ZPUk1fU0laRSAgICAgKDMyICogMTAyNCkKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX1ZDMV9CSVRQTEFORV9TSVpFCQkoMiAqIDEwMjQpCisjZGVmaW5lIFM1UF9GSU1WX0RFQ19TVFhfUEFSU0VSX1NJWkUJCSg2OCAqIDEwMjQpCisKKyNkZWZpbmUgUzVQX0ZJTVZfREVDX0JVRl9BTElHTgkJCSg4ICogMTAyNCkKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0JVRl9BTElHTgkJCSg4ICogMTAyNCkKKyNkZWZpbmUgUzVQX0ZJTVZfTlYxMk1fSEFMSUdOCQkJMTYKKyNkZWZpbmUgUzVQX0ZJTVZfTlYxMk1fTFZBTElHTgkJCTE2CisjZGVmaW5lIFM1UF9GSU1WX05WMTJNX0NWQUxJR04JCQk4CisjZGVmaW5lIFM1UF9GSU1WX05WMTJNVF9IQUxJR04JCQkxMjgKKyNkZWZpbmUgUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTgkJCTMyCisjZGVmaW5lIFM1UF9GSU1WX05WMTJNX1NBTElHTgkJCTIwNDgKKyNkZWZpbmUgUzVQX0ZJTVZfTlYxMk1UX1NBTElHTgkJCTgxOTIKKworLyogU2l6ZXMgb2YgYnVmZmVycyByZXF1aXJlZCBmb3IgZW5jb2RpbmcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1VQTVZfU0laRQkJMHgxMDAwMAorI2RlZmluZSBTNVBfRklNVl9FTkNfQ09MRkxHX1NJWkUJMHgxMDAwMAorI2RlZmluZSBTNVBfRklNVl9FTkNfSU5UUkFNRF9TSVpFCTB4MTAwMDAKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0lOVFJBUFJFRF9TSVpFCTB4NDAwMAorI2RlZmluZSBTNVBfRklNVl9FTkNfTkJPUklORk9fU0laRQkweDEwMDAwCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19BQ0RDQ09FRl9TSVpFCTB4MTAwMDAKKworLyogRW5jb2RlciAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfU1RSTV9TSVpFCTB4MjAwNCAvKiBzdHJlYW0gc2l6ZSAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfUElDX0NOVAkJMHgyMDA4IC8qIHBpY3R1cmUgY291bnQgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX1dSSVRFX1BUUgkweDIwMGMgLyogd3JpdGUgcG9pbnRlciAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfU0xJQ0VfVFlQRQkweDIwMTAgLyogc2xpY2UgdHlwZShJL1AvQi9JRFIpICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9TTElDRV9UWVBFX05PTl9DT0RFRAkwCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9TTElDRV9UWVBFX0kJCTEKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX1NMSUNFX1RZUEVfUAkJMgorI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfU0xJQ0VfVFlQRV9CCQkzCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9TTElDRV9UWVBFX1NLSVBQRUQJNAorI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfU0xJQ0VfVFlQRV9PVEhFUlMJNQorI2RlZmluZSBTNVBfRklNVl9FTkNPREVEX1lfQUREUiAgICAgICAgIDB4MjAxNCAvKiB0aGUgYWRkciBvZiB0aGUgZW5jb2RlZAorCQkJCQkJCQlsdW1hIHBpYyAqLworI2RlZmluZSBTNVBfRklNVl9FTkNPREVEX0NfQUREUiAgICAgICAgIDB4MjAxOCAvKiB0aGUgYWRkciBvZiB0aGUgZW5jb2RlZAorCQkJCQkJCQljaHJvbWEgcGljICovCisKKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX0NIMF9TQl9BRFIJMHgyMDQ0IC8qIGFkZHIgb2Ygc3RyZWFtIGJ1ZiAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfQ0gwX1NCX1NJWkUJMHgyMDRjIC8qIHNpemUgb2Ygc3RyZWFtIGJ1ZiAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfU0lfQ0gwX0NVUl9ZX0FEUgkweDIwNTAgLyogY3VycmVudCBMdW1hIGFkZHIgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX0NIMF9DVVJfQ19BRFIJMHgyMDU0IC8qIGN1cnJlbnQgQ2hyb21hIGFkZHIgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX0NIMF9GUkFNRV9JTlMJMHgyMDU4IC8qIGZyYW1lIGluc2VydGlvbiAqLworCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9DSDFfU0JfQURSCTB4MjA4NCAvKiBhZGRyIG9mIHN0cmVhbSBidWYgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX0NIMV9TQl9TSVpFCTB4MjA4YyAvKiBzaXplIG9mIHN0cmVhbSBidWYgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1NJX0NIMV9DVVJfWV9BRFIJMHgyMDkwIC8qIGN1cnJlbnQgTHVtYSBhZGRyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9DSDFfQ1VSX0NfQURSCTB4MjA5NCAvKiBjdXJyZW50IENocm9tYSBhZGRyICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19TSV9DSDFfRlJBTUVfSU5TCTB4MjA5OCAvKiBmcmFtZSBpbnNlcnRpb24gKi8KKworI2RlZmluZSBTNVBfRklNVl9FTkNfUElDX1RZUEVfQ1RSTAkweGM1MDQgLyogcGljIHR5cGUgbGV2ZWwgY29udHJvbCAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfQl9SRUNPTl9XUklURV9PTgkweGM1MDggLyogQiBmcmFtZSByZWNvbiB3cml0ZSBjdHJsICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19NU0xJQ0VfQ1RSTAkweGM1MGMgLyogbXVsdGkgc2xpY2UgY29udHJvbCAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfTVNMSUNFX01CCQkweGM1MTAgLyogTUIgbnVtYmVyIGluIHRoZSBvbmUgc2xpY2UgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX01TTElDRV9CSVQJCTB4YzUxNCAvKiBiaXQgY291bnQgZm9yIG9uZSBzbGljZSAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfQ0lSX0NUUkwJCTB4YzUxOCAvKiBudW1iZXIgb2YgaW50cmEgcmVmcmVzaCBNQiAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfTUFQX0ZPUl9DVVIJMHhjNTFjIC8qIGxpbmVhciBvciB0aWxlZCBtb2RlICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19QQURESU5HX0NUUkwJMHhjNTIwIC8qIHBhZGRpbmcgY29udHJvbCAqLworCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SQ19DT05GSUcJCTB4YzVhMCAvKiBSQyBjb25maWcgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JDX0JJVF9SQVRFCTB4YzVhOCAvKiBiaXQgcmF0ZSAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfUkNfUUJPVU5ECQkweGM1YWMgLyogbWF4L21pbiBRUCAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfUkNfUlBBUkEJCTB4YzViMCAvKiByYXRlIGNvbnRyb2wgcmVhY3Rpb24gY29lZmYgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX1JDX01CX0NUUkwJCTB4YzViNCAvKiBNQiBhZGFwdGl2ZSBzY2FsaW5nICovCisKKy8qIEVuY29kZXIgZm9yIEgyNjQgb25seSAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfSDI2NF9FTlRST1BZX01PREUJMHhkMDA0IC8qIENBVkxDIG9yIENBQkFDICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19IMjY0X0FMUEhBX09GRgkweGQwMDggLyogbG9vcCBmaWx0ZXIgYWxwaGEgb2Zmc2V0ICovCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19IMjY0X0JFVEFfT0ZGCTB4ZDAwYyAvKiBsb29wIGZpbHRlciBiZXRhIG9mZnNldCAqLworI2RlZmluZSBTNVBfRklNVl9FTkNfSDI2NF9OVU1fT0ZfUkVGCTB4ZDAxMCAvKiBudW1iZXIgb2YgcmVmZXJlbmNlIGZvciBQL0IgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX0gyNjRfVFJBTlNfRkxBRwkweGQwMzQgLyogOHg4IHRyYW5zZm9ybSBmbGFnIGluIFBQUyAmCisJCQkJCQkJCWhpZ2ggcHJvZmlsZSAqLworCisjZGVmaW5lIFM1UF9GSU1WX0VOQ19SQ19GUkFNRV9SQVRFCTB4ZDBkMCAvKiBmcmFtZSByYXRlICovCisKKy8qIEVuY29kZXIgZm9yIE1QRUc0IG9ubHkgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfRU5DX01QRUc0X1FVQVJUX1BYTAkweGUwMDggLyogcXBlbCBpbnRlcnBvbGF0aW9uIGN0cmwgKi8KKworLyogQWRkaXRpb25hbCAqLworI2RlZmluZSBTNVBfRklNVl9TSV9DSDBfRFBCX0NPTkZfQ1RSTCAgIDB4MjA2OCAvKiBEUEIgQ29uZmlnIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfU0xJQ0VfSU5UX01BU0sJCTEKKyNkZWZpbmUgUzVQX0ZJTVZfU0xJQ0VfSU5UX1NISUZUCTMxCisjZGVmaW5lIFM1UF9GSU1WX0RERUxBWV9FTkFfU0hJRlQJMzAKKyNkZWZpbmUgUzVQX0ZJTVZfRERFTEFZX1ZBTF9NQVNLCTB4ZmYKKyNkZWZpbmUgUzVQX0ZJTVZfRERFTEFZX1ZBTF9TSElGVAkxNgorI2RlZmluZSBTNVBfRklNVl9EUEJfQ09VTlRfTUFTSwkJMHhmZmZmCisjZGVmaW5lIFM1UF9GSU1WX0RQQl9GTFVTSF9NQVNLCQkxCisjZGVmaW5lIFM1UF9GSU1WX0RQQl9GTFVTSF9TSElGVAkxNAorCisKKyNkZWZpbmUgUzVQX0ZJTVZfU0lfQ0gwX1JFTEVBU0VfQlVGICAgICAweDIwNjAgLyogRFBCIHJlbGVhc2UgYnVmZmVyIHJlZ2lzdGVyICovCisjZGVmaW5lIFM1UF9GSU1WX1NJX0NIMF9IT1NUX1dSX0FEUgkweDIwNjQgLyogYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCisKKy8qIENvZGVjIG51bWJlcnMgICovCisjZGVmaW5lIFM1UF9GSU1WX0NPREVDX05PTkUJCS0xCisKKyNkZWZpbmUgUzVQX0ZJTVZfQ09ERUNfSDI2NF9ERUMJCTAKKyNkZWZpbmUgUzVQX0ZJTVZfQ09ERUNfVkMxX0RFQwkJMQorI2RlZmluZSBTNVBfRklNVl9DT0RFQ19NUEVHNF9ERUMJMgorI2RlZmluZSBTNVBfRklNVl9DT0RFQ19NUEVHMl9ERUMJMworI2RlZmluZSBTNVBfRklNVl9DT0RFQ19IMjYzX0RFQwkJNAorI2RlZmluZSBTNVBfRklNVl9DT0RFQ19WQzFSQ1ZfREVDCTUKKworI2RlZmluZSBTNVBfRklNVl9DT0RFQ19IMjY0X0VOQwkJMTYKKyNkZWZpbmUgUzVQX0ZJTVZfQ09ERUNfTVBFRzRfRU5DCTE3CisjZGVmaW5lIFM1UF9GSU1WX0NPREVDX0gyNjNfRU5DCQkxOAorCisvKiBDaGFubmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzVQX0ZJTVZfQ0hfU0VRX0hFQURFUgkJMQorI2RlZmluZSBTNVBfRklNVl9DSF9GUkFNRV9TVEFSVAkJMgorI2RlZmluZSBTNVBfRklNVl9DSF9MQVNUX0ZSQU1FCQkzCisjZGVmaW5lIFM1UF9GSU1WX0NIX0lOSVRfQlVGUwkJNAorI2RlZmluZSBTNVBfRklNVl9DSF9GUkFNRV9TVEFSVF9SRUFMTE9DCTUKKyNkZWZpbmUgUzVQX0ZJTVZfQ0hfTUFTSwkJNworI2RlZmluZSBTNVBfRklNVl9DSF9TSElGVAkJMTYKKworCisvKiBIb3N0IHRvIFJJU0MgY29tbWFuZCAqLworI2RlZmluZSBTNVBfRklNVl9IMlJfQ01EX0VNUFRZCQkwCisjZGVmaW5lIFM1UF9GSU1WX0gyUl9DTURfT1BFTl9JTlNUQU5DRQkxCisjZGVmaW5lIFM1UF9GSU1WX0gyUl9DTURfQ0xPU0VfSU5TVEFOQ0UJMgorI2RlZmluZSBTNVBfRklNVl9IMlJfQ01EX1NZU19JTklUCTMKKyNkZWZpbmUgUzVQX0ZJTVZfSDJSX0NNRF9GTFVTSAkJNAorI2RlZmluZSBTNVBfRklNVl9IMlJfQ01EX1NMRUVQCQk1CisjZGVmaW5lIFM1UF9GSU1WX0gyUl9DTURfV0FLRVVQCQk2CisKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9FTVBUWQkJCTAKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9PUEVOX0lOU1RBTkNFX1JFVAkxCisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfQ0xPU0VfSU5TVEFOQ0VfUkVUCTIKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9SU1ZfUkVUCQkzCisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfU0VRX0RPTkVfUkVUCQk0CisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfRlJBTUVfRE9ORV9SRVQJCTUKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9TTElDRV9ET05FX1JFVAkJNgorI2RlZmluZSBTNVBfRklNVl9SMkhfQ01EX0VOQ19DT01QTEVURV9SRVQJNworI2RlZmluZSBTNVBfRklNVl9SMkhfQ01EX1NZU19JTklUX1JFVAkJOAorI2RlZmluZSBTNVBfRklNVl9SMkhfQ01EX0ZXX1NUQVRVU19SRVQJCTkKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9TTEVFUF9SRVQJCTEwCisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfV0FLRVVQX1JFVAkJMTEKKyNkZWZpbmUgUzVQX0ZJTVZfUjJIX0NNRF9GTFVTSF9SRVQJCTEyCisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfSU5JVF9CVUZGRVJTX1JFVAkxNQorI2RlZmluZSBTNVBfRklNVl9SMkhfQ01EX0VERlVfSU5JVF9SRVQJCTE2CisjZGVmaW5lIFM1UF9GSU1WX1IySF9DTURfRVJSX1JFVAkJMzIKKworLyogRXJyb3IgaGFuZGxpbmcgZGVmaW5lcyAqLworI2RlZmluZSBTNVBfRklNVl9FUlJfV0FSTklOR1NfU1RBUlQJCTE0NQorI2RlZmluZSBTNVBfRklNVl9FUlJfREVDX01BU0sJCQkweEZGRkYKKyNkZWZpbmUgUzVQX0ZJTVZfRVJSX0RFQ19TSElGVAkJCTAKKyNkZWZpbmUgUzVQX0ZJTVZfRVJSX0RTUExfTUFTSwkJCTB4RkZGRjAwMDAKKyNkZWZpbmUgUzVQX0ZJTVZfRVJSX0RTUExfU0hJRlQJCQkxNgorCisvKiBTaGFyZWQgbWVtb3J5IHJlZ2lzdGVycycgb2Zmc2V0cyAqLworCisvKiBBbiBvZmZzZXQgb2YgdGhlIHN0YXJ0IHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gd2hlbgorICogdGhlIHN0YXJ0IHBvc2l0aW9uIGlzIG5vdCBhbGlnbmVkICovCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9DUk9QX0lORk9fSAkJMHgwMDIwCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9DUk9QX0xFRlRfTUFTSwkJMHhGRkZGCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9DUk9QX0xFRlRfU0hJRlQJCTAKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX0NST1BfUklHSFRfTUFTSwkJMHhGRkZGMDAwMAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfQ1JPUF9SSUdIVF9TSElGVAkxNgorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfQ1JPUF9JTkZPX1YJCTB4MDAyNAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfQ1JPUF9UT1BfTUFTSwkJMHhGRkZGCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9DUk9QX1RPUF9TSElGVAkJMAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfQ1JPUF9CT1RUT01fTUFTSwkweEZGRkYwMDAwCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9DUk9QX0JPVFRPTV9TSElGVAkxNgorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfU0VUX0ZSQU1FX1RBRwkJMHgwMDA0CisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9HRVRfRlJBTUVfVEFHX1RPUAkweDAwMDgKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX0dFVF9GUkFNRV9UQUdfQk9UCTB4MDAwQworI2RlZmluZSBTNVBfRklNVl9TSEFSRURfU1RBUlRfQllURV9OVU0JCTB4MDAxOAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfUkNfVk9QX1RJTUlORwkJMHgwMDMwCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9MVU1BX0RQQl9TSVpFCQkweDAwNjQKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX0NIUk9NQV9EUEJfU0laRQkJMHgwMDY4CisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9NVl9TSVpFCQkJMHgwMDZDCisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9QSUNfVElNRV9UT1AJCTB4MDAxMAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfUElDX1RJTUVfQk9UVE9NCQkweDAwMTQKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX0VYVF9FTkNfQ09OVFJPTAkJMHgwMDI4CisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9QX0JfRlJBTUVfUVAJCTB4MDA3MAorI2RlZmluZSBTNVBfRklNVl9TSEFSRURfQVNQRUNUX1JBVElPX0lEQwkweDAwNzQKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX0VYVEVOREVEX1NBUgkJMHgwMDc4CisjZGVmaW5lIFM1UF9GSU1WX1NIQVJFRF9IMjY0X0lfUEVSSU9ECQkweDAwOUMKKyNkZWZpbmUgUzVQX0ZJTVZfU0hBUkVEX1JDX0NPTlRST0xfQ09ORklHCTB4MDBBMAorCisjZW5kaWYgLyogX1JFR1NfRklNVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM3ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmMuYwpAQCAtMCwwICsxLDEyNzQgQEAKKy8qCisgKiBTYW1zdW5nIFM1UCBNdWx0aSBGb3JtYXQgQ29kZWMgdiA1LjEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEthbWlsIERlYnNraSwgPGsuZGVic2tpQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4KKyNpbmNsdWRlICJyZWdzLW1mYy5oIgorI2luY2x1ZGUgInM1cF9tZmNfY3RybC5oIgorI2luY2x1ZGUgInM1cF9tZmNfZGVidWcuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2RlYy5oIgorI2luY2x1ZGUgInM1cF9tZmNfZW5jLmgiCisjaW5jbHVkZSAiczVwX21mY19pbnRyLmgiCisjaW5jbHVkZSAiczVwX21mY19vcHIuaCIKKyNpbmNsdWRlICJzNXBfbWZjX3BtLmgiCisjaW5jbHVkZSAiczVwX21mY19zaG0uaCIKKworI2RlZmluZSBTNVBfTUZDX05BTUUJCSJzNXAtbWZjIgorI2RlZmluZSBTNVBfTUZDX0RFQ19OQU1FCSJzNXAtbWZjLWRlYyIKKyNkZWZpbmUgUzVQX01GQ19FTkNfTkFNRQkiczVwLW1mYy1lbmMiCisKK2ludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgLSBoaWdoZXIgdmFsdWUgcHJvZHVjZXMgbW9yZSB2ZXJib3NlIG1lc3NhZ2VzIik7CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGludGVycnVwdCBwcm9jZXNzaW5nICovCisvKiBSZW1vdmUgZnJvbSBodyBleGVjdXRpb24gcm91bmQgcm9iaW4gKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3dvcmtfYml0KHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwlzcGluX2xvY2soJmRldi0+Y29uZGxvY2spOworCWNsZWFyX2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJc3Bpbl91bmxvY2soJmRldi0+Y29uZGxvY2spOworfQorCisvKiBXYWtlIHVwIGNvbnRleHQgd2FpdF9xdWV1ZSAqLworc3RhdGljIHZvaWQgd2FrZV91cF9jdHgoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsIHVuc2lnbmVkIGludCByZWFzb24sCisJCQl1bnNpZ25lZCBpbnQgZXJyKQoreworCWN0eC0+aW50X2NvbmQgPSAxOworCWN0eC0+aW50X3R5cGUgPSByZWFzb247CisJY3R4LT5pbnRfZXJyID0gZXJyOworCXdha2VfdXAoJmN0eC0+cXVldWUpOworfQorCisvKiBXYWtlIHVwIGRldmljZSB3YWl0X3F1ZXVlICovCitzdGF0aWMgdm9pZCB3YWtlX3VwX2RldihzdHJ1Y3QgczVwX21mY19kZXYgKmRldiwgdW5zaWduZWQgaW50IHJlYXNvbiwKKwkJCXVuc2lnbmVkIGludCBlcnIpCit7CisJZGV2LT5pbnRfY29uZCA9IDE7CisJZGV2LT5pbnRfdHlwZSA9IHJlYXNvbjsKKwlkZXYtPmludF9lcnIgPSBlcnI7CisJd2FrZV91cCgmZGV2LT5xdWV1ZSk7Cit9CisKK3ZvaWQgczVwX21mY193YXRjaGRvZyh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IChzdHJ1Y3QgczVwX21mY19kZXYgKilhcmc7CisKKwlpZiAodGVzdF9iaXQoMCwgJmRldi0+aHdfbG9jaykpCisJCWF0b21pY19pbmMoJmRldi0+d2F0Y2hkb2dfY250KTsKKwlpZiAoYXRvbWljX3JlYWQoJmRldi0+d2F0Y2hkb2dfY250KSA+PSBNRkNfV0FUQ0hET0dfQ05UKSB7CisJCS8qIFRoaXMgbWVhbnMgdGhhdCBodyBpcyBidXN5IGFuZCBubyBpbnRlcnJ1cHRzIHdlcmUKKwkJICogZ2VuZXJhdGVkIGJ5IGh3IGZvciB0aGUgTnRoIHRpbWUgb2YgcnVubmluZyB0aGlzCisJCSAqIHdhdGNoZG9nIHRpbWVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSBzZXJpb3VzIGh3CisJCSAqIGVycm9yLiBOb3cgaXQgaXMgdGltZSB0byBraWxsIGFsbCBpbnN0YW5jZXMgYW5kCisJCSAqIHJlc2V0IHRoZSBNRkMuICovCisJCW1mY19lcnIoIlRpbWUgb3V0IGR1cmluZyB3YWl0aW5nIGZvciBIV1xuIik7CisJCXF1ZXVlX3dvcmsoZGV2LT53YXRjaGRvZ193b3JrcXVldWUsICZkZXYtPndhdGNoZG9nX3dvcmspOworCX0KKwlkZXYtPndhdGNoZG9nX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCQkJbXNlY3NfdG9famlmZmllcyhNRkNfV0FUQ0hET0dfSU5URVJWQUwpOworCWFkZF90aW1lcigmZGV2LT53YXRjaGRvZ190aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfd2F0Y2hkb2dfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldjsKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtdXRleF9sb2NrZWQ7CisJaW50IGksIHJldDsKKworCWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgczVwX21mY19kZXYsIHdhdGNoZG9nX3dvcmspOworCisJbWZjX2VycigiRHJpdmVyIHRpbWVvdXQgZXJyb3IgaGFuZGxpbmdcbiIpOworCS8qIExvY2sgdGhlIG11dGV4IHRoYXQgcHJvdGVjdHMgb3BlbiBhbmQgcmVsZWFzZS4KKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBhcyB0aGV5IG1heSBsb2FkIGFuZCB1bmxvYWQgZmlybXdhcmUuICovCisJbXV0ZXhfbG9ja2VkID0gbXV0ZXhfdHJ5bG9jaygmZGV2LT5tZmNfbXV0ZXgpOworCWlmICghbXV0ZXhfbG9ja2VkKQorCQltZmNfZXJyKCJFcnJvcjogc29tZSBpbnN0YW5jZSBtYXkgYmUgY2xvc2luZy9vcGVuaW5nXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisKKwlzNXBfbWZjX2Nsb2NrX29mZigpOworCisJZm9yIChpID0gMDsgaSA8IE1GQ19OVU1fQ09OVEVYVFM7IGkrKykgeworCQljdHggPSBkZXYtPmN0eFtpXTsKKwkJaWYgKCFjdHgpCisJCQljb250aW51ZTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRVJST1I7CisJCXM1cF9tZmNfY2xlYW51cF9xdWV1ZSgmY3R4LT5kc3RfcXVldWUsICZjdHgtPnZxX2RzdCk7CisJCXM1cF9tZmNfY2xlYW51cF9xdWV1ZSgmY3R4LT5zcmNfcXVldWUsICZjdHgtPnZxX3NyYyk7CisJCWNsZWFyX3dvcmtfYml0KGN0eCk7CisJCXdha2VfdXBfY3R4KGN0eCwgUzVQX0ZJTVZfUjJIX0NNRF9FUlJfUkVULCAwKTsKKwl9CisJY2xlYXJfYml0KDAsICZkZXYtPmh3X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCS8qIERvdWJsZSBjaGVjayBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgaW5zdGFuY2UgcnVubmluZy4KKwkgKiBJZiBubyBpbnN0YW5jZSBpcyBpbiBtZW1vcnkgdGhhbiBubyBmaXJtd2FyZSBzaG91bGQgYmUgcHJlc2VudCAqLworCWlmIChkZXYtPm51bV9pbnN0ID4gMCkgeworCQlyZXQgPSBzNXBfbWZjX3JlbG9hZF9maXJtd2FyZShkZXYpOworCQlpZiAocmV0KSB7CisJCQltZmNfZXJyKCJGYWlsZWQgdG8gcmVsb2FkIEZXXG4iKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJcmV0ID0gczVwX21mY19pbml0X2h3KGRldik7CisJCWlmIChyZXQpCisJCQltZmNfZXJyKCJGYWlsZWQgdG8gcmVpbml0IEZXXG4iKTsKKwl9Cit1bmxvY2s6CisJaWYgKG11dGV4X2xvY2tlZCkKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1mY19tdXRleCk7Cit9CisKK3N0YXRpYyBlbnVtIHM1cF9tZmNfbm9kZV90eXBlIHM1cF9tZmNfZ2V0X25vZGVfdHlwZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKworCWlmICghdmRldikgeworCQltZmNfZXJyKCJmYWlsZWQgdG8gZ2V0IHZpZGVvX2RldmljZSIpOworCQlyZXR1cm4gTUZDTk9ERV9JTlZBTElEOworCX0KKwlpZiAodmRldi0+aW5kZXggPT0gMCkKKwkJcmV0dXJuIE1GQ05PREVfREVDT0RFUjsKKwllbHNlIGlmICh2ZGV2LT5pbmRleCA9PSAxKQorCQlyZXR1cm4gTUZDTk9ERV9FTkNPREVSOworCXJldHVybiBNRkNOT0RFX0lOVkFMSUQ7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfY2xlYXJfaW50X2ZsYWdzKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX1JJU0NfSE9TVF9JTlQpOworCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX1JJU0MySE9TVF9DTUQpOworCW1mY193cml0ZShkZXYsIDB4ZmZmZiwgUzVQX0ZJTVZfU0lfUlROX0NISUQpOworfQorCitzdGF0aWMgdm9pZCBzNXBfbWZjX2hhbmRsZV9mcmFtZV9hbGxfZXh0cmFjdGVkKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqZHN0X2J1ZjsKKworCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0ZJTklTSEVEOworCWN0eC0+c2VxdWVuY2UrKzsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmN0eC0+ZHN0X3F1ZXVlKSkgeworCQlkc3RfYnVmID0gbGlzdF9lbnRyeShjdHgtPmRzdF9xdWV1ZS5uZXh0LAorCQkJCSAgICAgc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwkJbWZjX2RlYnVnKDIsICJDbGVhbmluZyB1cCBidWZmZXI6ICVkXG4iLAorCQkJCQkgIGRzdF9idWYtPmItPnY0bDJfYnVmLmluZGV4KTsKKwkJdmIyX3NldF9wbGFuZV9wYXlsb2FkKGRzdF9idWYtPmIsIDAsIDApOworCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoZHN0X2J1Zi0+YiwgMSwgMCk7CisJCWxpc3RfZGVsKCZkc3RfYnVmLT5saXN0KTsKKwkJY3R4LT5kc3RfcXVldWVfY250LS07CisJCWRzdF9idWYtPmItPnY0bDJfYnVmLnNlcXVlbmNlID0gKGN0eC0+c2VxdWVuY2UrKyk7CisKKwkJaWYgKHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBQSUNfVElNRV9UT1ApID09CisJCQlzNXBfbWZjX3JlYWRfc2htKGN0eCwgUElDX1RJTUVfQk9UKSkKKwkJCWRzdF9idWYtPmItPnY0bDJfYnVmLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQllbHNlCisJCQlkc3RfYnVmLT5iLT52NGwyX2J1Zi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworCQljdHgtPmRlY19kc3RfZmxhZyAmPSB+KDEgPDwgZHN0X2J1Zi0+Yi0+djRsMl9idWYuaW5kZXgpOworCQl2YjJfYnVmZmVyX2RvbmUoZHN0X2J1Zi0+YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfaGFuZGxlX2ZyYW1lX2NvcHlfdGltZShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBzNXBfbWZjX2J1ZiAgKmRzdF9idWYsICpzcmNfYnVmOworCXNpemVfdCBkZWNfeV9hZGRyID0gczVwX21mY19nZXRfZGVjX3lfYWRyKCk7CisJdW5zaWduZWQgaW50IGZyYW1lX3R5cGUgPSBzNXBfbWZjX2dldF9mcmFtZV90eXBlKCk7CisKKwkvKiBDb3B5IHRpbWVzdGFtcCAvIHRpbWVjb2RlIGZyb20gZGVjb2RlZCBzcmMgdG8gZHN0IGFuZCBzZXQKKwkgICBhcHByb3ByYWl0ZSBmbGFncyAqLworCXNyY19idWYgPSBsaXN0X2VudHJ5KGN0eC0+c3JjX3F1ZXVlLm5leHQsIHN0cnVjdCBzNXBfbWZjX2J1ZiwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkc3RfYnVmLCAmY3R4LT5kc3RfcXVldWUsIGxpc3QpIHsKKwkJaWYgKHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKGRzdF9idWYtPmIsIDApID09IGRlY195X2FkZHIpIHsKKwkJCW1lbWNweSgmZHN0X2J1Zi0+Yi0+djRsMl9idWYudGltZWNvZGUsCisJCQkJJnNyY19idWYtPmItPnY0bDJfYnVmLnRpbWVjb2RlLAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl90aW1lY29kZSkpOworCQkJbWVtY3B5KCZkc3RfYnVmLT5iLT52NGwyX2J1Zi50aW1lc3RhbXAsCisJCQkJJnNyY19idWYtPmItPnY0bDJfYnVmLnRpbWVzdGFtcCwKKwkJCQlzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKKwkJCXN3aXRjaCAoZnJhbWVfdHlwZSkgeworCQkJY2FzZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfSV9GUkFNRToKKwkJCQlkc3RfYnVmLT5iLT52NGwyX2J1Zi5mbGFncyB8PQorCQkJCQkJVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUzVQX0ZJTVZfREVDT0RFX0ZSQU1FX1BfRlJBTUU6CisJCQkJZHN0X2J1Zi0+Yi0+djRsMl9idWYuZmxhZ3MgfD0KKwkJCQkJCVY0TDJfQlVGX0ZMQUdfUEZSQU1FOworCQkJCWJyZWFrOworCQkJY2FzZSBTNVBfRklNVl9ERUNPREVfRlJBTUVfQl9GUkFNRToKKwkJCQlkc3RfYnVmLT5iLT52NGwyX2J1Zi5mbGFncyB8PQorCQkJCQkJVjRMMl9CVUZfRkxBR19CRlJBTUU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgczVwX21mY19oYW5kbGVfZnJhbWVfbmV3KHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LCB1bnNpZ25lZCBpbnQgZXJyKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfYnVmICAqZHN0X2J1ZjsKKwlzaXplX3QgZHNwbF95X2FkZHIgPSBzNXBfbWZjX2dldF9kc3BsX3lfYWRyKCk7CisJdW5zaWduZWQgaW50IGZyYW1lX3R5cGUgPSBzNXBfbWZjX2dldF9mcmFtZV90eXBlKCk7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJLyogSWYgZnJhbWUgaXMgc2FtZSBhcyBwcmV2aW91cyB0aGVuIHNraXAgYW5kIGRvIG5vdCBkZXF1ZXVlICovCisJaWYgKGZyYW1lX3R5cGUgPT0gUzVQX0ZJTVZfREVDT0RFX0ZSQU1FX1NLSVBQRUQpIHsKKwkJaWYgKCFjdHgtPmFmdGVyX3BhY2tlZF9wYikKKwkJCWN0eC0+c2VxdWVuY2UrKzsKKwkJY3R4LT5hZnRlcl9wYWNrZWRfcGIgPSAwOworCQlyZXR1cm47CisJfQorCWN0eC0+c2VxdWVuY2UrKzsKKwkvKiBUaGUgTUZDIHJldHVybnMgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLCBub3cgd2UgaGF2ZSB0bworCSAqIGNoZWNrIHdoaWNoIHZpZGVvYnVmIGRvZXMgaXQgY29ycmVzcG9uZCB0byAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHN0X2J1ZiwgJmN0eC0+ZHN0X3F1ZXVlLCBsaXN0KSB7CisJCS8qIENoZWNrIGlmIHRoaXMgaXMgdGhlIGJ1ZmZlciB3ZSdyZSBsb29raW5nIGZvciAqLworCQlpZiAodmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIoZHN0X2J1Zi0+YiwgMCkgPT0gZHNwbF95X2FkZHIpIHsKKwkJCWxpc3RfZGVsKCZkc3RfYnVmLT5saXN0KTsKKwkJCWN0eC0+ZHN0X3F1ZXVlX2NudC0tOworCQkJZHN0X2J1Zi0+Yi0+djRsMl9idWYuc2VxdWVuY2UgPSBjdHgtPnNlcXVlbmNlOworCQkJaWYgKHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBQSUNfVElNRV9UT1ApID09CisJCQkJczVwX21mY19yZWFkX3NobShjdHgsIFBJQ19USU1FX0JPVCkpCisJCQkJZHN0X2J1Zi0+Yi0+djRsMl9idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQllbHNlCisJCQkJZHN0X2J1Zi0+Yi0+djRsMl9idWYuZmllbGQgPQorCQkJCQkJCVY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJCXZiMl9zZXRfcGxhbmVfcGF5bG9hZChkc3RfYnVmLT5iLCAwLCBjdHgtPmx1bWFfc2l6ZSk7CisJCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoZHN0X2J1Zi0+YiwgMSwgY3R4LT5jaHJvbWFfc2l6ZSk7CisJCQljbGVhcl9iaXQoZHN0X2J1Zi0+Yi0+djRsMl9idWYuaW5kZXgsCisJCQkJCQkJJmN0eC0+ZGVjX2RzdF9mbGFnKTsKKworCQkJdmIyX2J1ZmZlcl9kb25lKGRzdF9idWYtPmIsCisJCQkJZXJyID8gVkIyX0JVRl9TVEFURV9FUlJPUiA6IFZCMl9CVUZfU1RBVEVfRE9ORSk7CisKKwkJCWluZGV4ID0gZHN0X2J1Zi0+Yi0+djRsMl9idWYuaW5kZXg7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyogSGFuZGxlIGZyYW1lIGRlY29kaW5nIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgczVwX21mY19oYW5kbGVfZnJhbWUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsCisJCQkJCXVuc2lnbmVkIGludCByZWFzb24sIHVuc2lnbmVkIGludCBlcnIpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBpbnQgZHN0X2ZyYW1lX3N0YXR1czsKKwlzdHJ1Y3QgczVwX21mY19idWYgKnNyY19idWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcmVzX2NoYW5nZTsKKworCXVuc2lnbmVkIGludCBpbmRleDsKKworCWRzdF9mcmFtZV9zdGF0dXMgPSBzNXBfbWZjX2dldF9kc3BsX3N0YXR1cygpCisJCQkJJiBTNVBfRklNVl9ERUNfU1RBVFVTX0RFQ09ESU5HX1NUQVRVU19NQVNLOworCXJlc19jaGFuZ2UgPSBzNXBfbWZjX2dldF9kc3BsX3N0YXR1cygpCisJCQkJJiBTNVBfRklNVl9ERUNfU1RBVFVTX1JFU09MVVRJT05fTUFTSzsKKwltZmNfZGVidWcoMiwgIkZyYW1lIFN0YXR1czogJXhcbiIsIGRzdF9mcmFtZV9zdGF0dXMpOworCWlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfUkVTX0NIQU5HRV9JTklUKQorCQljdHgtPnN0YXRlID0gTUZDSU5TVF9SRVNfQ0hBTkdFX0ZMVVNIOworCWlmIChyZXNfY2hhbmdlKSB7CisJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX1JFU19DSEFOR0VfSU5JVDsKKwkJczVwX21mY19jbGVhcl9pbnRfZmxhZ3MoZGV2KTsKKwkJd2FrZV91cF9jdHgoY3R4LCByZWFzb24sIGVycik7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkKKwkJCUJVRygpOworCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY3R4LT5kcGJfZmx1c2hfZmxhZykKKwkJY3R4LT5kcGJfZmx1c2hfZmxhZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJLyogQWxsIGZyYW1lcyByZW1haW5pbmcgaW4gdGhlIGJ1ZmZlciBoYXZlIGJlZW4gZXh0cmFjdGVkICAqLworCWlmIChkc3RfZnJhbWVfc3RhdHVzID09IFM1UF9GSU1WX0RFQ19TVEFUVVNfREVDT0RJTkdfRU1QVFkpIHsKKwkJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9SRVNfQ0hBTkdFX0ZMVVNIKSB7CisJCQlzNXBfbWZjX2hhbmRsZV9mcmFtZV9hbGxfZXh0cmFjdGVkKGN0eCk7CisJCQljdHgtPnN0YXRlID0gTUZDSU5TVF9SRVNfQ0hBTkdFX0VORDsKKwkJCWdvdG8gbGVhdmVfaGFuZGxlX2ZyYW1lOworCQl9IGVsc2UgeworCQkJczVwX21mY19oYW5kbGVfZnJhbWVfYWxsX2V4dHJhY3RlZChjdHgpOworCQl9CisJfQorCisJaWYgKGRzdF9mcmFtZV9zdGF0dXMgPT0gUzVQX0ZJTVZfREVDX1NUQVRVU19ERUNPRElOR19ESVNQTEFZIHx8CisJCWRzdF9mcmFtZV9zdGF0dXMgPT0gUzVQX0ZJTVZfREVDX1NUQVRVU19ERUNPRElOR19PTkxZKQorCQlzNXBfbWZjX2hhbmRsZV9mcmFtZV9jb3B5X3RpbWUoY3R4KTsKKworCS8qIEEgZnJhbWUgaGFzIGJlZW4gZGVjb2RlZCBhbmQgaXMgaW4gdGhlIGJ1ZmZlciAgKi8KKwlpZiAoZHN0X2ZyYW1lX3N0YXR1cyA9PSBTNVBfRklNVl9ERUNfU1RBVFVTX0RJU1BMQVlfT05MWSB8fAorCSAgICBkc3RfZnJhbWVfc3RhdHVzID09IFM1UF9GSU1WX0RFQ19TVEFUVVNfREVDT0RJTkdfRElTUExBWSkgeworCQlzNXBfbWZjX2hhbmRsZV9mcmFtZV9uZXcoY3R4LCBlcnIpOworCX0gZWxzZSB7CisJCW1mY19kZWJ1ZygyLCAiTm8gZnJhbWUgZGVjb2RlXG4iKTsKKwl9CisJLyogTWFyayBzb3VyY2UgYnVmZmVyIGFzIGNvbXBsZXRlICovCisJaWYgKGRzdF9mcmFtZV9zdGF0dXMgIT0gUzVQX0ZJTVZfREVDX1NUQVRVU19ESVNQTEFZX09OTFkKKwkJJiYgIWxpc3RfZW1wdHkoJmN0eC0+c3JjX3F1ZXVlKSkgeworCQlzcmNfYnVmID0gbGlzdF9lbnRyeShjdHgtPnNyY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgczVwX21mY19idWYsCisJCQkJCQkJCWxpc3QpOworCQljdHgtPmNvbnN1bWVkX3N0cmVhbSArPSBzNXBfbWZjX2dldF9jb25zdW1lZF9zdHJlYW0oKTsKKwkJaWYgKGN0eC0+Y29kZWNfbW9kZSAhPSBTNVBfRklNVl9DT0RFQ19IMjY0X0RFQyAmJgorCQkJczVwX21mY19nZXRfZnJhbWVfdHlwZSgpID09IFM1UF9GSU1WX0RFQ09ERV9GUkFNRV9QX0ZSQU1FCisJCQkJCSYmIGN0eC0+Y29uc3VtZWRfc3RyZWFtICsgU1RVRkZfQllURSA8CisJCQkJCXNyY19idWYtPmItPnY0bDJfcGxhbmVzWzBdLmJ5dGVzdXNlZCkgeworCQkJLyogUnVuIE1GQyBhZ2FpbiBvbiB0aGUgc2FtZSBidWZmZXIgKi8KKwkJCW1mY19kZWJ1ZygyLCAiUnVubmluZyBhZ2FpbiB0aGUgc2FtZSBidWZmZXJcbiIpOworCQkJY3R4LT5hZnRlcl9wYWNrZWRfcGIgPSAxOworCQl9IGVsc2UgeworCQkJaW5kZXggPSBzcmNfYnVmLT5iLT52NGwyX2J1Zi5pbmRleDsKKwkJCW1mY19kZWJ1ZygyLCAiTUZDIG5lZWRzIG5leHQgYnVmZmVyXG4iKTsKKwkJCWN0eC0+Y29uc3VtZWRfc3RyZWFtID0gMDsKKwkJCWxpc3RfZGVsKCZzcmNfYnVmLT5saXN0KTsKKwkJCWN0eC0+c3JjX3F1ZXVlX2NudC0tOworCQkJaWYgKHM1cF9tZmNfZXJyX2RlYyhlcnIpID4gMCkKKwkJCQl2YjJfYnVmZmVyX2RvbmUoc3JjX2J1Zi0+YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJCQllbHNlCisJCQkJdmIyX2J1ZmZlcl9kb25lKHNyY19idWYtPmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CisJCX0KKwl9CitsZWF2ZV9oYW5kbGVfZnJhbWU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJaWYgKChjdHgtPnNyY19xdWV1ZV9jbnQgPT0gMCAmJiBjdHgtPnN0YXRlICE9IE1GQ0lOU1RfRklOSVNISU5HKQorCQkJCSAgICB8fCBjdHgtPmRzdF9xdWV1ZV9jbnQgPCBjdHgtPmRwYl9jb3VudCkKKwkJY2xlYXJfd29ya19iaXQoY3R4KTsKKwlzNXBfbWZjX2NsZWFyX2ludF9mbGFncyhkZXYpOworCXdha2VfdXBfY3R4KGN0eCwgcmVhc29uLCBlcnIpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkKKwkJQlVHKCk7CisJczVwX21mY19jbG9ja19vZmYoKTsKKwlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKK30KKworLyogRXJyb3IgaGFuZGxpbmcgZm9yIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgczVwX21mY19oYW5kbGVfZXJyb3Ioc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsCisJCQkJIHVuc2lnbmVkIGludCByZWFzb24sIHVuc2lnbmVkIGludCBlcnIpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIElmIG5vIGNvbnRleHQgaXMgYXZhaWxhYmxlIHRoZW4gYWxsIG5lY2Vzc2FyeQorCSAqIHByb2Nlc3NpbmcgaGFzIGJlZW4gZG9uZS4gKi8KKwlpZiAoY3R4ID09IDApCisJCXJldHVybjsKKworCWRldiA9IGN0eC0+ZGV2OworCW1mY19lcnIoIkludGVycnVwdCBFcnJvcjogJTA4eFxuIiwgZXJyKTsKKwlzNXBfbWZjX2NsZWFyX2ludF9mbGFncyhkZXYpOworCXdha2VfdXBfZGV2KGRldiwgcmVhc29uLCBlcnIpOworCisJLyogRXJyb3IgcmVjb3ZlcnkgaXMgZGVwZW5kZW50IG9uIHRoZSBzdGF0ZSBvZiBjb250ZXh0ICovCisJc3dpdGNoIChjdHgtPnN0YXRlKSB7CisJY2FzZSBNRkNJTlNUX0lOSVQ6CisJCS8qIFRoaXMgZXJyb3IgaGFkIHRvIGhhcHBlbiB3aGlsZSBhY3F1aXJlaW5nIGluc3RhbmNlICovCisJY2FzZSBNRkNJTlNUX0dPVF9JTlNUOgorCQkvKiBUaGlzIGVycm9yIGhhZCB0byBoYXBwZW4gd2hpbGUgcGFyc2luZyB0aGUgaGVhZGVyICovCisJY2FzZSBNRkNJTlNUX0hFQURfUEFSU0VEOgorCQkvKiBUaGlzIGVycm9yIGhhZCB0byBoYXBwZW4gd2hpbGUgc2V0dGluZyBkc3QgYnVmZmVycyAqLworCWNhc2UgTUZDSU5TVF9SRVRVUk5fSU5TVDoKKwkJLyogVGhpcyBlcnJvciBoYWQgdG8gaGFwcGVuIHdoaWxlIHJlbGVhc2luZyBpbnN0YW5jZSAqLworCQljbGVhcl93b3JrX2JpdChjdHgpOworCQl3YWtlX3VwX2N0eChjdHgsIHJlYXNvbiwgZXJyKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmZGV2LT5od19sb2NrKSA9PSAwKQorCQkJQlVHKCk7CisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0VSUk9SOworCQlicmVhazsKKwljYXNlIE1GQ0lOU1RfRklOSVNISU5HOgorCWNhc2UgTUZDSU5TVF9GSU5JU0hFRDoKKwljYXNlIE1GQ0lOU1RfUlVOTklORzoKKwkJLyogSXQgaXMgaGlnbHkgcHJvYmFibGUgdGhhdCBhbiBlcnJvciBvY2N1cmVkCisJCSAqIHdoaWxlIGRlY29kaW5nIGEgZnJhbWUgKi8KKwkJY2xlYXJfd29ya19iaXQoY3R4KTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRVJST1I7CisJCS8qIE1hcmsgYWxsIGRzdCBidWZmZXJzIGFzIGhhdmluZyBhbiBlcnJvciAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJCXM1cF9tZmNfY2xlYW51cF9xdWV1ZSgmY3R4LT5kc3RfcXVldWUsICZjdHgtPnZxX2RzdCk7CisJCS8qIE1hcmsgYWxsIHNyYyBidWZmZXJzIGFzIGhhdmluZyBhbiBlcnJvciAqLworCQlzNXBfbWZjX2NsZWFudXBfcXVldWUoJmN0eC0+c3JjX3F1ZXVlLCAmY3R4LT52cV9zcmMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmZGV2LT5od19sb2NrKSA9PSAwKQorCQkJQlVHKCk7CisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1mY19lcnIoIkVuY291bnRlcmVkIGFuIGVycm9yIGludGVycnVwdCB3aGljaCBoYWQgbm90IGJlZW4gaGFuZGxlZFxuIik7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKKy8qIEhlYWRlciBwYXJzaW5nIGludGVycnVwdCBoYW5kbGluZyAqLworc3RhdGljIHZvaWQgczVwX21mY19oYW5kbGVfc2VxX2RvbmUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsCisJCQkJIHVuc2lnbmVkIGludCByZWFzb24sIHVuc2lnbmVkIGludCBlcnIpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXY7CisJdW5zaWduZWQgaW50IGd1YXJkX3dpZHRoLCBndWFyZF9oZWlnaHQ7CisKKwlpZiAoY3R4ID09IDApCisJCXJldHVybjsKKwlkZXYgPSBjdHgtPmRldjsKKwlpZiAoY3R4LT5jX29wcy0+cG9zdF9zZXFfc3RhcnQpIHsKKwkJaWYgKGN0eC0+Y19vcHMtPnBvc3Rfc2VxX3N0YXJ0KGN0eCkpCisJCQltZmNfZXJyKCJwb3N0X3NlcV9zdGFydCgpIGZhaWxlZFxuIik7CisJfSBlbHNlIHsKKwkJY3R4LT5pbWdfd2lkdGggPSBzNXBfbWZjX2dldF9pbWdfd2lkdGgoKTsKKwkJY3R4LT5pbWdfaGVpZ2h0ID0gczVwX21mY19nZXRfaW1nX2hlaWdodCgpOworCisJCWN0eC0+YnVmX3dpZHRoID0gQUxJR04oY3R4LT5pbWdfd2lkdGgsCisJCQkJCQlTNVBfRklNVl9OVjEyTVRfSEFMSUdOKTsKKwkJY3R4LT5idWZfaGVpZ2h0ID0gQUxJR04oY3R4LT5pbWdfaGVpZ2h0LAorCQkJCQkJUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTik7CisJCW1mY19kZWJ1ZygyLCAiU0VRIERvbmU6IE1vdmllIGRpbWVuc2lvbnMgJWR4JWQsICIKKwkJCSJidWZmZXIgZGltZW5zaW9uczogJWR4JWRcbiIsIGN0eC0+aW1nX3dpZHRoLAorCQkJCWN0eC0+aW1nX2hlaWdodCwgY3R4LT5idWZfd2lkdGgsCisJCQkJCQljdHgtPmJ1Zl9oZWlnaHQpOworCQlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfREVDKSB7CisJCQljdHgtPmx1bWFfc2l6ZSA9IEFMSUdOKGN0eC0+YnVmX3dpZHRoICoKKwkJCQljdHgtPmJ1Zl9oZWlnaHQsIFM1UF9GSU1WX0RFQ19CVUZfQUxJR04pOworCQkJY3R4LT5jaHJvbWFfc2l6ZSA9IEFMSUdOKGN0eC0+YnVmX3dpZHRoICoKKwkJCQkJIEFMSUdOKChjdHgtPmltZ19oZWlnaHQgPj4gMSksCisJCQkJCSAgICAgICBTNVBfRklNVl9OVjEyTVRfVkFMSUdOKSwKKwkJCQkJICAgICAgIFM1UF9GSU1WX0RFQ19CVUZfQUxJR04pOworCQkJY3R4LT5tdl9zaXplID0gQUxJR04oY3R4LT5idWZfd2lkdGggKgorCQkJCQlBTElHTigoY3R4LT5idWZfaGVpZ2h0ID4+IDIpLAorCQkJCQlTNVBfRklNVl9OVjEyTVRfVkFMSUdOKSwKKwkJCQkJUzVQX0ZJTVZfREVDX0JVRl9BTElHTik7CisJCX0gZWxzZSB7CisJCQlndWFyZF93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoICsgMjQsCisJCQkJCVM1UF9GSU1WX05WMTJNVF9IQUxJR04pOworCQkJZ3VhcmRfaGVpZ2h0ID0gQUxJR04oY3R4LT5pbWdfaGVpZ2h0ICsgMTYsCisJCQkJCQlTNVBfRklNVl9OVjEyTVRfVkFMSUdOKTsKKwkJCWN0eC0+bHVtYV9zaXplID0gQUxJR04oZ3VhcmRfd2lkdGggKgorCQkJCWd1YXJkX2hlaWdodCwgUzVQX0ZJTVZfREVDX0JVRl9BTElHTik7CisJCQlndWFyZF93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoICsgMTYsCisJCQkJCQlTNVBfRklNVl9OVjEyTVRfSEFMSUdOKTsKKwkJCWd1YXJkX2hlaWdodCA9IEFMSUdOKChjdHgtPmltZ19oZWlnaHQgPj4gMSkgKyA0LAorCQkJCQkJUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTik7CisJCQljdHgtPmNocm9tYV9zaXplID0gQUxJR04oZ3VhcmRfd2lkdGggKgorCQkJCWd1YXJkX2hlaWdodCwgUzVQX0ZJTVZfREVDX0JVRl9BTElHTik7CisJCQljdHgtPm12X3NpemUgPSAwOworCQl9CisJCWN0eC0+ZHBiX2NvdW50ID0gczVwX21mY19nZXRfZHBiX2NvdW50KCk7CisJCWlmIChjdHgtPmltZ193aWR0aCA9PSAwIHx8IGN0eC0+aW1nX3dpZHRoID09IDApCisJCQljdHgtPnN0YXRlID0gTUZDSU5TVF9FUlJPUjsKKwkJZWxzZQorCQkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfSEVBRF9QQVJTRUQ7CisJfQorCXM1cF9tZmNfY2xlYXJfaW50X2ZsYWdzKGRldik7CisJY2xlYXJfd29ya19iaXQoY3R4KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZkZXYtPmh3X2xvY2spID09IDApCisJCUJVRygpOworCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJczVwX21mY190cnlfcnVuKGRldik7CisJd2FrZV91cF9jdHgoY3R4LCByZWFzb24sIGVycik7Cit9CisKKy8qIEhlYWRlciBwYXJzaW5nIGludGVycnVwdCBoYW5kbGluZyAqLworc3RhdGljIHZvaWQgczVwX21mY19oYW5kbGVfaW5pdF9idWZmZXJzKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LAorCQkJCSB1bnNpZ25lZCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgZXJyKQoreworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqc3JjX2J1ZjsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGN0eCA9PSAwKQorCQlyZXR1cm47CisJZGV2ID0gY3R4LT5kZXY7CisJczVwX21mY19jbGVhcl9pbnRfZmxhZ3MoZGV2KTsKKwljdHgtPmludF90eXBlID0gcmVhc29uOworCWN0eC0+aW50X2VyciA9IGVycjsKKwljdHgtPmludF9jb25kID0gMTsKKwlzcGluX2xvY2soJmRldi0+Y29uZGxvY2spOworCWNsZWFyX2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJc3Bpbl91bmxvY2soJmRldi0+Y29uZGxvY2spOworCWlmIChlcnIgPT0gMCkgeworCQljdHgtPnN0YXRlID0gTUZDSU5TVF9SVU5OSU5HOworCQlpZiAoIWN0eC0+ZHBiX2ZsdXNoX2ZsYWcpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY3R4LT5zcmNfcXVldWUpKSB7CisJCQkJc3JjX2J1ZiA9IGxpc3RfZW50cnkoY3R4LT5zcmNfcXVldWUubmV4dCwKKwkJCQkJICAgICBzdHJ1Y3QgczVwX21mY19idWYsIGxpc3QpOworCQkJCWxpc3RfZGVsKCZzcmNfYnVmLT5saXN0KTsKKwkJCQljdHgtPnNyY19xdWV1ZV9jbnQtLTsKKwkJCQl2YjJfYnVmZmVyX2RvbmUoc3JjX2J1Zi0+YiwKKwkJCQkJCVZCMl9CVUZfU1RBVEVfRE9ORSk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCWN0eC0+ZHBiX2ZsdXNoX2ZsYWcgPSAwOworCQl9CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkKKwkJCUJVRygpOworCisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisKKwkJd2FrZV91cCgmY3R4LT5xdWV1ZSk7CisJCXM1cF9tZmNfdHJ5X3J1bihkZXYpOworCX0gZWxzZSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkKKwkJCUJVRygpOworCisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisKKwkJd2FrZV91cCgmY3R4LT5xdWV1ZSk7CisJfQorfQorCisvKiBJbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLworc3RhdGljIGlycXJldHVybl90IHM1cF9tZmNfaXJxKGludCBpcnEsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBwcml2OworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4OworCXVuc2lnbmVkIGludCByZWFzb247CisJdW5zaWduZWQgaW50IGVycjsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCS8qIFJlc2V0IHRoZSB0aW1lb3V0IHdhdGNoZG9nICovCisJYXRvbWljX3NldCgmZGV2LT53YXRjaGRvZ19jbnQsIDApOworCWN0eCA9IGRldi0+Y3R4W2Rldi0+Y3Vycl9jdHhdOworCS8qIEdldCB0aGUgcmVhc29uIG9mIGludGVycnVwdCBhbmQgdGhlIGVycm9yIGNvZGUgKi8KKwlyZWFzb24gPSBzNXBfbWZjX2dldF9pbnRfcmVhc29uKCk7CisJZXJyID0gczVwX21mY19nZXRfaW50X2VycigpOworCW1mY19kZWJ1ZygxLCAiSW50IHJlYXNvbjogJWQgKGVycjogJTA4eClcbiIsIHJlYXNvbiwgZXJyKTsKKwlzd2l0Y2ggKHJlYXNvbikgeworCWNhc2UgUzVQX0ZJTVZfUjJIX0NNRF9FUlJfUkVUOgorCQkvKiBBbiBlcnJvciBoYXMgb2NjdXJlZCAqLworCQlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX1JVTk5JTkcgJiYKKwkJCXM1cF9tZmNfZXJyX2RlYyhlcnIpID49IFM1UF9GSU1WX0VSUl9XQVJOSU5HU19TVEFSVCkKKwkJCXM1cF9tZmNfaGFuZGxlX2ZyYW1lKGN0eCwgcmVhc29uLCBlcnIpOworCQllbHNlCisJCQlzNXBfbWZjX2hhbmRsZV9lcnJvcihjdHgsIHJlYXNvbiwgZXJyKTsKKwkJY2xlYXJfYml0KDAsICZkZXYtPmVudGVyX3N1c3BlbmQpOworCQlicmVhazsKKworCWNhc2UgUzVQX0ZJTVZfUjJIX0NNRF9TTElDRV9ET05FX1JFVDoKKwljYXNlIFM1UF9GSU1WX1IySF9DTURfRlJBTUVfRE9ORV9SRVQ6CisJCWlmIChjdHgtPmNfb3BzLT5wb3N0X2ZyYW1lX3N0YXJ0KSB7CisJCQlpZiAoY3R4LT5jX29wcy0+cG9zdF9mcmFtZV9zdGFydChjdHgpKQorCQkJCW1mY19lcnIoInBvc3RfZnJhbWVfc3RhcnQoKSBmYWlsZWRcbiIpOworCQkJczVwX21mY19jbGVhcl9pbnRfZmxhZ3MoZGV2KTsKKwkJCXdha2VfdXBfY3R4KGN0eCwgcmVhc29uLCBlcnIpOworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmZGV2LT5od19sb2NrKSA9PSAwKQorCQkJCUJVRygpOworCQkJczVwX21mY19jbG9ja19vZmYoKTsKKwkJCXM1cF9tZmNfdHJ5X3J1bihkZXYpOworCQl9IGVsc2UgeworCQkJczVwX21mY19oYW5kbGVfZnJhbWUoY3R4LCByZWFzb24sIGVycik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFM1UF9GSU1WX1IySF9DTURfU0VRX0RPTkVfUkVUOgorCQlzNXBfbWZjX2hhbmRsZV9zZXFfZG9uZShjdHgsIHJlYXNvbiwgZXJyKTsKKwkJYnJlYWs7CisKKwljYXNlIFM1UF9GSU1WX1IySF9DTURfT1BFTl9JTlNUQU5DRV9SRVQ6CisJCWN0eC0+aW5zdF9ubyA9IHM1cF9tZmNfZ2V0X2luc3Rfbm8oKTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfR09UX0lOU1Q7CisJCWNsZWFyX3dvcmtfYml0KGN0eCk7CisJCXdha2VfdXAoJmN0eC0+cXVldWUpOworCQlnb3RvIGlycV9jbGVhbnVwX2h3OworCisJY2FzZSBTNVBfRklNVl9SMkhfQ01EX0NMT1NFX0lOU1RBTkNFX1JFVDoKKwkJY2xlYXJfd29ya19iaXQoY3R4KTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRlJFRTsKKwkJd2FrZV91cCgmY3R4LT5xdWV1ZSk7CisJCWdvdG8gaXJxX2NsZWFudXBfaHc7CisKKwljYXNlIFM1UF9GSU1WX1IySF9DTURfU1lTX0lOSVRfUkVUOgorCWNhc2UgUzVQX0ZJTVZfUjJIX0NNRF9GV19TVEFUVVNfUkVUOgorCWNhc2UgUzVQX0ZJTVZfUjJIX0NNRF9TTEVFUF9SRVQ6CisJY2FzZSBTNVBfRklNVl9SMkhfQ01EX1dBS0VVUF9SRVQ6CisJCWlmIChjdHgpCisJCQljbGVhcl93b3JrX2JpdChjdHgpOworCQlzNXBfbWZjX2NsZWFyX2ludF9mbGFncyhkZXYpOworCQl3YWtlX3VwX2RldihkZXYsIHJlYXNvbiwgZXJyKTsKKwkJY2xlYXJfYml0KDAsICZkZXYtPmh3X2xvY2spOworCQljbGVhcl9iaXQoMCwgJmRldi0+ZW50ZXJfc3VzcGVuZCk7CisJCWJyZWFrOworCisJY2FzZSBTNVBfRklNVl9SMkhfQ01EX0lOSVRfQlVGRkVSU19SRVQ6CisJCXM1cF9tZmNfaGFuZGxlX2luaXRfYnVmZmVycyhjdHgsIHJlYXNvbiwgZXJyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWZjX2RlYnVnKDIsICJVbmtub3duIGludCByZWFzb25cbiIpOworCQlzNXBfbWZjX2NsZWFyX2ludF9mbGFncyhkZXYpOworCX0KKwltZmNfZGVidWdfbGVhdmUoKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CitpcnFfY2xlYW51cF9odzoKKwlzNXBfbWZjX2NsZWFyX2ludF9mbGFncyhkZXYpOworCWN0eC0+aW50X3R5cGUgPSByZWFzb247CisJY3R4LT5pbnRfZXJyID0gZXJyOworCWN0eC0+aW50X2NvbmQgPSAxOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkKKwkJbWZjX2VycigiRmFpbGVkIHRvIHVubG9jayBod1xuIik7CisKKwlzNXBfbWZjX2Nsb2NrX29mZigpOworCisJczVwX21mY190cnlfcnVuKGRldik7CisJbWZjX2RlYnVnKDIsICJFeGl0IHZpYSBpcnFfY2xlYW51cF9od1xuIik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBPcGVuIGFuIE1GQyBub2RlICovCitzdGF0aWMgaW50IHM1cF9tZmNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBOVUxMOworCXN0cnVjdCB2YjJfcXVldWUgKnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCWRldi0+bnVtX2luc3QrKzsJLyogSXQgaXMgZ3VhcmRlZCBieSBtZmNfbXV0ZXggaW4gdmZkICovCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjb250ZXh0ICovCisJY3R4ID0ga3phbGxvYyhzaXplb2YgKmN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpIHsKKwkJbWZjX2VycigiTm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hbGxvYzsKKwl9CisJdjRsMl9maF9pbml0KCZjdHgtPmZoLCB2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSAmY3R4LT5maDsKKwl2NGwyX2ZoX2FkZCgmY3R4LT5maCk7CisJY3R4LT5kZXYgPSBkZXY7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+c3JjX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5kc3RfcXVldWUpOworCWN0eC0+c3JjX3F1ZXVlX2NudCA9IDA7CisJY3R4LT5kc3RfcXVldWVfY250ID0gMDsKKwkvKiBHZXQgY29udGV4dCBudW1iZXIgKi8KKwljdHgtPm51bSA9IDA7CisJd2hpbGUgKGRldi0+Y3R4W2N0eC0+bnVtXSkgeworCQljdHgtPm51bSsrOworCQlpZiAoY3R4LT5udW0gPj0gTUZDX05VTV9DT05URVhUUykgeworCQkJbWZjX2VycigiVG9vIG1hbnkgb3BlbiBjb250ZXh0c1xuIik7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9ub19jdHg7CisJCX0KKwl9CisJLyogTWFyayBjb250ZXh0IGFzIGlkbGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCWNsZWFyX2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCWRldi0+Y3R4W2N0eC0+bnVtXSA9IGN0eDsKKwlpZiAoczVwX21mY19nZXRfbm9kZV90eXBlKGZpbGUpID09IE1GQ05PREVfREVDT0RFUikgeworCQljdHgtPnR5cGUgPSBNRkNJTlNUX0RFQ09ERVI7CisJCWN0eC0+Y19vcHMgPSBnZXRfZGVjX2NvZGVjX29wcygpOworCQkvKiBTZXR1cCBjdHJsIGhhbmRsZXIgKi8KKwkJcmV0ID0gczVwX21mY19kZWNfY3RybHNfc2V0dXAoY3R4KTsKKwkJaWYgKHJldCkgeworCQkJbWZjX2VycigiRmFpbGVkIHRvIHNldHVwIG1mYyBjb250cm9sc1xuIik7CisJCQlnb3RvIGVycl9jdHJsc19zZXR1cDsKKwkJfQorCX0gZWxzZSBpZiAoczVwX21mY19nZXRfbm9kZV90eXBlKGZpbGUpID09IE1GQ05PREVfRU5DT0RFUikgeworCQljdHgtPnR5cGUgPSBNRkNJTlNUX0VOQ09ERVI7CisJCWN0eC0+Y19vcHMgPSBnZXRfZW5jX2NvZGVjX29wcygpOworCQkvKiBvbmx5IGZvciBlbmNvZGVyICovCisJCUlOSVRfTElTVF9IRUFEKCZjdHgtPnJlZl9xdWV1ZSk7CisJCWN0eC0+cmVmX3F1ZXVlX2NudCA9IDA7CisJCS8qIFNldHVwIGN0cmwgaGFuZGxlciAqLworCQlyZXQgPSBzNXBfbWZjX2VuY19jdHJsc19zZXR1cChjdHgpOworCQlpZiAocmV0KSB7CisJCQltZmNfZXJyKCJGYWlsZWQgdG8gc2V0dXAgbWZjIGNvbnRyb2xzXG4iKTsKKwkJCWdvdG8gZXJyX2N0cmxzX3NldHVwOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfYmFkX25vZGU7CisJfQorCWN0eC0+ZmguY3RybF9oYW5kbGVyID0gJmN0eC0+Y3RybF9oYW5kbGVyOworCWN0eC0+aW5zdF9ubyA9IC0xOworCS8qIExvYWQgZmlybXdhcmUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW5zdGFuY2UgKi8KKwlpZiAoZGV2LT5udW1faW5zdCA9PSAxKSB7CisJCWRldi0+d2F0Y2hkb2dfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCQkJCQltc2Vjc190b19qaWZmaWVzKE1GQ19XQVRDSERPR19JTlRFUlZBTCk7CisJCWFkZF90aW1lcigmZGV2LT53YXRjaGRvZ190aW1lcik7CisJCXJldCA9IHM1cF9tZmNfcG93ZXJfb24oKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1mY19lcnIoInBvd2VyIG9uIGZhaWxlZFxuIik7CisJCQlnb3RvIGVycl9wd3JfZW5hYmxlOworCQl9CisJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJcmV0ID0gczVwX21mY19hbGxvY19hbmRfbG9hZF9maXJtd2FyZShkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfYWxsb2NfZnc7CisJCS8qIEluaXQgdGhlIEZXICovCisJCXJldCA9IHM1cF9tZmNfaW5pdF9odyhkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfaW5pdF9odzsKKwkJczVwX21mY19jbG9ja19vZmYoKTsKKwl9CisJLyogSW5pdCB2aWRlb2J1ZjIgcXVldWUgZm9yIENBUFRVUkUgKi8KKwlxID0gJmN0eC0+dnFfZHN0OworCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOworCXEtPmRydl9wcml2ID0gJmN0eC0+Zmg7CisJaWYgKHM1cF9tZmNfZ2V0X25vZGVfdHlwZShmaWxlKSA9PSBNRkNOT0RFX0RFQ09ERVIpIHsKKwkJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUDsKKwkJcS0+b3BzID0gZ2V0X2RlY19xdWV1ZV9vcHMoKTsKKwl9IGVsc2UgaWYgKHM1cF9tZmNfZ2V0X25vZGVfdHlwZShmaWxlKSA9PSBNRkNOT0RFX0VOQ09ERVIpIHsKKwkJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9VU0VSUFRSOworCQlxLT5vcHMgPSBnZXRfZW5jX3F1ZXVlX29wcygpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX3F1ZXVlX2luaXQ7CisJfQorCXEtPm1lbV9vcHMgPSAoc3RydWN0IHZiMl9tZW1fb3BzICopJnZiMl9kbWFfY29udGlnX21lbW9wczsKKwlyZXQgPSB2YjJfcXVldWVfaW5pdChxKTsKKwlpZiAocmV0KSB7CisJCW1mY19lcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZShjYXB0dXJlKVxuIik7CisJCWdvdG8gZXJyX3F1ZXVlX2luaXQ7CisJfQorCS8qIEluaXQgdmlkZW9idWYyIHF1ZXVlIGZvciBPVVRQVVQgKi8KKwlxID0gJmN0eC0+dnFfc3JjOworCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkU7CisJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUDsKKwlxLT5kcnZfcHJpdiA9ICZjdHgtPmZoOworCWlmIChzNXBfbWZjX2dldF9ub2RlX3R5cGUoZmlsZSkgPT0gTUZDTk9ERV9ERUNPREVSKSB7CisJCXEtPmlvX21vZGVzID0gVkIyX01NQVA7CisJCXEtPm9wcyA9IGdldF9kZWNfcXVldWVfb3BzKCk7CisJfSBlbHNlIGlmIChzNXBfbWZjX2dldF9ub2RlX3R5cGUoZmlsZSkgPT0gTUZDTk9ERV9FTkNPREVSKSB7CisJCXEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUjsKKwkJcS0+b3BzID0gZ2V0X2VuY19xdWV1ZV9vcHMoKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9xdWV1ZV9pbml0OworCX0KKwlxLT5tZW1fb3BzID0gKHN0cnVjdCB2YjJfbWVtX29wcyAqKSZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CisJcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7CisJaWYgKHJldCkgeworCQltZmNfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB2aWRlb2J1ZjIgcXVldWUob3V0cHV0KVxuIik7CisJCWdvdG8gZXJyX3F1ZXVlX2luaXQ7CisJfQorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+cXVldWUpOworCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiByZXQ7CisJLyogRGVpbml0IHdoZW4gZmFpbHVyZSBvY2N1cmVkICovCitlcnJfcXVldWVfaW5pdDoKK2Vycl9pbml0X2h3OgorCXM1cF9tZmNfcmVsZWFzZV9maXJtd2FyZShkZXYpOworZXJyX2FsbG9jX2Z3OgorCWRldi0+Y3R4W2N0eC0+bnVtXSA9IDA7CisJZGVsX3RpbWVyX3N5bmMoJmRldi0+d2F0Y2hkb2dfdGltZXIpOworCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CitlcnJfcHdyX2VuYWJsZToKKwlpZiAoZGV2LT5udW1faW5zdCA9PSAxKSB7CisJCWlmIChzNXBfbWZjX3Bvd2VyX29mZigpIDwgMCkKKwkJCW1mY19lcnIoInBvd2VyIG9mZiBmYWlsZWRcbiIpOworCQlzNXBfbWZjX3JlbGVhc2VfZmlybXdhcmUoZGV2KTsKKwl9CitlcnJfY3RybHNfc2V0dXA6CisJczVwX21mY19kZWNfY3RybHNfZGVsZXRlKGN0eCk7CitlcnJfYmFkX25vZGU6CitlcnJfbm9fY3R4OgorCXY0bDJfZmhfZGVsKCZjdHgtPmZoKTsKKwl2NGwyX2ZoX2V4aXQoJmN0eC0+ZmgpOworCWtmcmVlKGN0eCk7CitlcnJfYWxsb2M6CisJZGV2LT5udW1faW5zdC0tOworCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlbGVhc2UgTUZDIGNvbnRleHQgKi8KK3N0YXRpYyBpbnQgczVwX21mY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KGZpbGUtPnByaXZhdGVfZGF0YSk7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbWZjX2RlYnVnX2VudGVyKCk7CisJczVwX21mY19jbG9ja19vbigpOworCXZiMl9xdWV1ZV9yZWxlYXNlKCZjdHgtPnZxX3NyYyk7CisJdmIyX3F1ZXVlX3JlbGVhc2UoJmN0eC0+dnFfZHN0KTsKKwkvKiBNYXJrIGNvbnRleHQgYXMgaWRsZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvbmRsb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KGN0eC0+bnVtLCAmZGV2LT5jdHhfd29ya19iaXRzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvbmRsb2NrLCBmbGFncyk7CisJLyogSWYgaW5zdGFuY2Ugd2FzIGluaXRpYWxpc2VkIHRoZW4KKwkgKiByZXR1cm4gaW5zdGFuY2UgYW5kIGZyZWUgcmVvc3VyY2VzICovCisJaWYgKGN0eC0+aW5zdF9ubyAhPSBNRkNfTk9fSU5TVEFOQ0VfU0VUKSB7CisJCW1mY19kZWJ1ZygyLCAiSGFzIHRvIGZyZWUgaW5zdGFuY2VcbiIpOworCQljdHgtPnN0YXRlID0gTUZDSU5TVF9SRVRVUk5fSU5TVDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJc2V0X2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKGN0eCk7CisJCXM1cF9tZmNfdHJ5X3J1bihkZXYpOworCQkvKiBXYWl0IHVudGlsIGluc3RhbmNlIGlzIHJldHVybmVkIG9yIHRpbWVvdXQgb2NjdXJlZCAqLworCQlpZiAoczVwX21mY193YWl0X2Zvcl9kb25lX2N0eAorCQkgICAgKGN0eCwgUzVQX0ZJTVZfUjJIX0NNRF9DTE9TRV9JTlNUQU5DRV9SRVQsIDApKSB7CisJCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQkJbWZjX2VycigiRXJyIHJldHVybmluZyBpbnN0YW5jZVxuIik7CisJCX0KKwkJbWZjX2RlYnVnKDIsICJBZnRlciBmcmVlIGluc3RhbmNlXG4iKTsKKwkJLyogRnJlZSByZXNvdXJjZXMgKi8KKwkJczVwX21mY19yZWxlYXNlX2NvZGVjX2J1ZmZlcnMoY3R4KTsKKwkJczVwX21mY19yZWxlYXNlX2luc3RhbmNlX2J1ZmZlcihjdHgpOworCQlpZiAoY3R4LT50eXBlID09IE1GQ0lOU1RfREVDT0RFUikKKwkJCXM1cF9tZmNfcmVsZWFzZV9kZWNfZGVzY19idWZmZXIoY3R4KTsKKworCQljdHgtPmluc3Rfbm8gPSBNRkNfTk9fSU5TVEFOQ0VfU0VUOworCX0KKwkvKiBoYXJkd2FyZSBsb2NraW5nIHNjaGVtZSAqLworCWlmIChkZXYtPmN1cnJfY3R4ID09IGN0eC0+bnVtKQorCQljbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jayk7CisJZGV2LT5udW1faW5zdC0tOworCWlmIChkZXYtPm51bV9pbnN0ID09IDApIHsKKwkJbWZjX2RlYnVnKDIsICJMYXN0IGluc3RhbmNlIC0gcmVsZWFzZSBmaXJtd2FyZVxuIik7CisJCS8qIHJlc2V0IDwtPiBGL1cgcmVsZWFzZSAqLworCQlzNXBfbWZjX3Jlc2V0KGRldik7CisJCXM1cF9tZmNfcmVsZWFzZV9maXJtd2FyZShkZXYpOworCQlkZWxfdGltZXJfc3luYygmZGV2LT53YXRjaGRvZ190aW1lcik7CisJCWlmIChzNXBfbWZjX3Bvd2VyX29mZigpIDwgMCkKKwkJCW1mY19lcnIoIlBvd2VyIG9mZiBmYWlsZWRcbiIpOworCX0KKwltZmNfZGVidWcoMiwgIlNodXR0aW5nIGRvd24gY2xvY2tcbiIpOworCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJZGV2LT5jdHhbY3R4LT5udW1dID0gMDsKKwlzNXBfbWZjX2RlY19jdHJsc19kZWxldGUoY3R4KTsKKwl2NGwyX2ZoX2RlbCgmY3R4LT5maCk7CisJdjRsMl9maF9leGl0KCZjdHgtPmZoKTsKKwlrZnJlZShjdHgpOworCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiAwOworfQorCisvKiBQb2xsICovCitzdGF0aWMgdW5zaWduZWQgaW50IHM1cF9tZmNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KGZpbGUtPnByaXZhdGVfZGF0YSk7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgdmIyX3F1ZXVlICpzcmNfcSwgKmRzdF9xOworCXN0cnVjdCB2YjJfYnVmZmVyICpzcmNfdmIgPSBOVUxMLCAqZHN0X3ZiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcmNfcSA9ICZjdHgtPnZxX3NyYzsKKwlkc3RfcSA9ICZjdHgtPnZxX2RzdDsKKwkvKgorCSAqIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgYnVmZmVyIHF1ZXVlZCBvbiBlYWNoIHF1ZXVlZF9saXN0LCB3aGljaAorCSAqIG1lYW5zIGVpdGhlciBpbiBkcml2ZXIgYWxyZWFkeSBvciB3YWl0aW5nIGZvciBkcml2ZXIgdG8gY2xhaW0gaXQKKwkgKiBhbmQgc3RhcnQgcHJvY2Vzc2luZy4KKwkgKi8KKwlpZiAoKCFzcmNfcS0+c3RyZWFtaW5nIHx8IGxpc3RfZW1wdHkoJnNyY19xLT5xdWV1ZWRfbGlzdCkpCisJCSYmICghZHN0X3EtPnN0cmVhbWluZyB8fCBsaXN0X2VtcHR5KCZkc3RfcS0+cXVldWVkX2xpc3QpKSkgeworCQlyYyA9IFBPTExFUlI7CisJCWdvdG8gZW5kOworCX0KKwltdXRleF91bmxvY2soJmRldi0+bWZjX211dGV4KTsKKwlwb2xsX3dhaXQoZmlsZSwgJnNyY19xLT5kb25lX3dxLCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJmRzdF9xLT5kb25lX3dxLCB3YWl0KTsKKwltdXRleF9sb2NrKCZkZXYtPm1mY19tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNyY19xLT5kb25lX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnNyY19xLT5kb25lX2xpc3QpKQorCQlzcmNfdmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzcmNfcS0+ZG9uZV9saXN0LCBzdHJ1Y3QgdmIyX2J1ZmZlciwKKwkJCQkJCQkJZG9uZV9lbnRyeSk7CisJaWYgKHNyY192YiAmJiAoc3JjX3ZiLT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0RPTkUKKwkJCQl8fCBzcmNfdmItPnN0YXRlID09IFZCMl9CVUZfU1RBVEVfRVJST1IpKQorCQlyYyB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcmNfcS0+ZG9uZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRzdF9xLT5kb25lX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRzdF9xLT5kb25lX2xpc3QpKQorCQlkc3RfdmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkc3RfcS0+ZG9uZV9saXN0LCBzdHJ1Y3QgdmIyX2J1ZmZlciwKKwkJCQkJCQkJZG9uZV9lbnRyeSk7CisJaWYgKGRzdF92YiAmJiAoZHN0X3ZiLT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0RPTkUKKwkJCQl8fCBkc3RfdmItPnN0YXRlID09IFZCMl9CVUZfU1RBVEVfRVJST1IpKQorCQlyYyB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzdF9xLT5kb25lX2xvY2ssIGZsYWdzKTsKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qIE1tYXAgKi8KK3N0YXRpYyBpbnQgczVwX21mY19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChmaWxlLT5wcml2YXRlX2RhdGEpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCWludCByZXQ7CisJaWYgKG9mZnNldCA8IERTVF9RVUVVRV9PRkZfQkFTRSkgeworCQltZmNfZGVidWcoMiwgIm1tYXBpbmcgc291cmNlXG4iKTsKKwkJcmV0ID0gdmIyX21tYXAoJmN0eC0+dnFfc3JjLCB2bWEpOworCX0gZWxzZSB7CQkvKiBjYXB0dXJlICovCisJCW1mY19kZWJ1ZygyLCAibW1hcGluZyBkZXN0aW5hdGlvblxuIik7CisJCXZtYS0+dm1fcGdvZmYgLT0gKERTVF9RVUVVRV9PRkZfQkFTRSA+PiBQQUdFX1NISUZUKTsKKwkJcmV0ID0gdmIyX21tYXAoJmN0eC0+dnFfZHN0LCB2bWEpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiB2NGwyIG9wcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzNXBfbWZjX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzNXBfbWZjX29wZW4sCisJLnJlbGVhc2UgPSBzNXBfbWZjX3JlbGVhc2UsCisJLnBvbGwgPSBzNXBfbWZjX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLAorCS5tbWFwID0gczVwX21mY19tbWFwLAorfTsKKworc3RhdGljIGludCBtYXRjaF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFkZXZfbmFtZShkZXYpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShkZXYpLCAoY2hhciAqKWRhdGEpOworfQorCisKKy8qIE1GQyBwcm9iZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBfX2RldmluaXQgczVwX21mY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcHJfZGVidWcoIiVzKytcbiIsIF9fZnVuY19fKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZiAqZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgTUZDIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZkZXYtPmlycWxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmNvbmRsb2NrKTsKKwlkZXYtPnBsYXRfZGV2ID0gcGRldjsKKwlpZiAoIWRldi0+cGxhdF9kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YSBzcGVjaWZpZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9kZXY7CisJfQorCisJcmV0ID0gczVwX21mY19pbml0X3BtKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZmMgY2xvY2sgc291cmNlXG4iKTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX3JlczsKKwl9CisKKwlkZXYtPm1mY19tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgIHBkZXYtPm5hbWUpOworCWlmIChkZXYtPm1mY19tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb25cbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9tZW1fcmVnOworCX0KKwlkZXYtPnJlZ3NfYmFzZSA9IGlvcmVtYXAoZGV2LT5tZmNfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShkZXYtPm1mY19tZW0pKTsKKwlpZiAoZGV2LT5yZWdzX2Jhc2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBhZGRyZXNzIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnEgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9nZXRfcmVzOworCX0KKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHM1cF9tZmNfaXJxLCBJUlFGX0RJU0FCTEVELCBwZGV2LT5uYW1lLAorCQkJCQkJCQkJZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbnN0YWxsIGlycSAoJWQpXG4iLCByZXQpOworCQlnb3RvIGVycl9yZXFfaXJxOworCX0KKworCWRldi0+bWVtX2Rldl9sID0gZGV2aWNlX2ZpbmRfY2hpbGQoJmRldi0+cGxhdF9kZXYtPmRldiwgInM1cC1tZmMtbCIsCisJCQkJCSAgIG1hdGNoX2NoaWxkKTsKKwlpZiAoIWRldi0+bWVtX2Rldl9sKSB7CisJCW1mY19lcnIoIk1lbSBjaGlsZCAoTCkgZGV2aWNlIGdldCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9maW5kX2NoaWxkOworCX0KKwlkZXYtPm1lbV9kZXZfciA9IGRldmljZV9maW5kX2NoaWxkKCZkZXYtPnBsYXRfZGV2LT5kZXYsICJzNXAtbWZjLXIiLAorCQkJCQkgICBtYXRjaF9jaGlsZCk7CisJaWYgKCFkZXYtPm1lbV9kZXZfcikgeworCQltZmNfZXJyKCJNZW0gY2hpbGQgKFIpIGRldmljZSBnZXQgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZmluZF9jaGlsZDsKKwl9CisKKwlkZXYtPmFsbG9jX2N0eFswXSA9IHZiMl9kbWFfY29udGlnX2luaXRfY3R4KGRldi0+bWVtX2Rldl9sKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZGV2LT5hbGxvY19jdHhbMF0pKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2LT5hbGxvY19jdHhbMF0pOworCQlnb3RvIGVycl9tZW1faW5pdF9jdHhfMDsKKwl9CisJZGV2LT5hbGxvY19jdHhbMV0gPSB2YjJfZG1hX2NvbnRpZ19pbml0X2N0eChkZXYtPm1lbV9kZXZfcik7CisJaWYgKElTX0VSUl9PUl9OVUxMKGRldi0+YWxsb2NfY3R4WzFdKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+YWxsb2NfY3R4WzFdKTsKKwkJZ290byBlcnJfbWVtX2luaXRfY3R4XzE7CisJfQorCisJbXV0ZXhfaW5pdCgmZGV2LT5tZmNfbXV0ZXgpOworCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3Y0bDJfZGV2X3JlZzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnF1ZXVlKTsKKworCS8qIGRlY29kZXIgKi8KKwl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXZmZCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kZWNfYWxsb2M7CisJfQorCXZmZC0+Zm9wcwk9ICZzNXBfbWZjX2ZvcHMsCisJdmZkLT5pb2N0bF9vcHMJPSBnZXRfZGVjX3Y0bDJfaW9jdGxfb3BzKCk7CisJdmZkLT5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJdmZkLT5sb2NrCT0gJmRldi0+bWZjX211dGV4OworCXZmZC0+djRsMl9kZXYJPSAmZGV2LT52NGwyX2RldjsKKwlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMiLCBTNVBfTUZDX0RFQ19OQU1FKTsKKwlkZXYtPnZmZF9kZWMJPSB2ZmQ7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgMCk7CisJaWYgKHJldCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOworCQlnb3RvIGVycl9kZWNfcmVnOworCX0KKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsCisJCSAgImRlY29kZXIgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsIHZmZC0+bnVtKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CisKKwkvKiBlbmNvZGVyICovCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2ZmQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZW5jX2FsbG9jOworCX0KKwl2ZmQtPmZvcHMJPSAmczVwX21mY19mb3BzLAorCXZmZC0+aW9jdGxfb3BzCT0gZ2V0X2VuY192NGwyX2lvY3RsX29wcygpOworCXZmZC0+cmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCXZmZC0+bG9jawk9ICZkZXYtPm1mY19tdXRleDsKKwl2ZmQtPnY0bDJfZGV2CT0gJmRldi0+djRsMl9kZXY7CisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzIiwgUzVQX01GQ19FTkNfTkFNRSk7CisJZGV2LT52ZmRfZW5jCT0gdmZkOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIDApOworCWlmIChyZXQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKKwkJZ290byBlcnJfZW5jX3JlZzsKKwl9CisJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LAorCQkgICJlbmNvZGVyIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLCB2ZmQtPm51bSk7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlkZXYtPmh3X2xvY2sgPSAwOworCWRldi0+d2F0Y2hkb2dfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoUzVQX01GQ19OQU1FKTsKKwlJTklUX1dPUksoJmRldi0+d2F0Y2hkb2dfd29yaywgczVwX21mY193YXRjaGRvZ193b3JrZXIpOworCWF0b21pY19zZXQoJmRldi0+d2F0Y2hkb2dfY250LCAwKTsKKwlpbml0X3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyKTsKKwlkZXYtPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJZGV2LT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9IHM1cF9tZmNfd2F0Y2hkb2c7CisKKwlwcl9kZWJ1ZygiJXMtLVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworCisvKiBEZWluaXQgTUZDIGlmIHByb2JlIGhhZCBmYWlsZWQgKi8KK2Vycl9lbmNfcmVnOgorCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmZkX2VuYyk7CitlcnJfZW5jX2FsbG9jOgorCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkX2RlYyk7CitlcnJfZGVjX3JlZzoKKwl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZmZF9kZWMpOworZXJyX2RlY19hbGxvYzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKK2Vycl92NGwyX2Rldl9yZWc6CisJdmIyX2RtYV9jb250aWdfY2xlYW51cF9jdHgoZGV2LT5hbGxvY19jdHhbMV0pOworZXJyX21lbV9pbml0X2N0eF8xOgorCXZiMl9kbWFfY29udGlnX2NsZWFudXBfY3R4KGRldi0+YWxsb2NfY3R4WzBdKTsKK2Vycl9tZW1faW5pdF9jdHhfMDoKK2Vycl9maW5kX2NoaWxkOgorCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworZXJyX3JlcV9pcnE6CitlcnJfZ2V0X3JlczoKKwlpb3VubWFwKGRldi0+cmVnc19iYXNlKTsKKwlkZXYtPnJlZ3NfYmFzZSA9IE5VTEw7CitlcnJfaW9yZW1hcDoKKwlyZWxlYXNlX3Jlc291cmNlKGRldi0+bWZjX21lbSk7CisJa2ZyZWUoZGV2LT5tZmNfbWVtKTsKK2Vycl9tZW1fcmVnOgorZXJyX3JlczoKKwlzNXBfbWZjX2ZpbmFsX3BtKGRldik7CitlcnJfY2xrOgorZXJyX2RldjoKKwlrZnJlZShkZXYpOworCXByX2RlYnVnKCIlcy0tIHdpdGggZXJyb3JcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gcmV0OworCit9CisKKy8qIFJlbW92ZSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzNXBfbWZjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJSZW1vdmluZyAlc1xuIiwgcGRldi0+bmFtZSk7CisKKwlkZWxfdGltZXJfc3luYygmZGV2LT53YXRjaGRvZ190aW1lcik7CisJZmx1c2hfd29ya3F1ZXVlKGRldi0+d2F0Y2hkb2dfd29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndhdGNoZG9nX3dvcmtxdWV1ZSk7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZmZF9lbmMpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkX2RlYyk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJdmIyX2RtYV9jb250aWdfY2xlYW51cF9jdHgoZGV2LT5hbGxvY19jdHhbMF0pOworCXZiMl9kbWFfY29udGlnX2NsZWFudXBfY3R4KGRldi0+YWxsb2NfY3R4WzFdKTsKKworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlvdW5tYXAoZGV2LT5yZWdzX2Jhc2UpOworCWlmIChkZXYtPm1mY19tZW0pIHsKKwkJcmVsZWFzZV9yZXNvdXJjZShkZXYtPm1mY19tZW0pOworCQlrZnJlZShkZXYtPm1mY19tZW0pOworCQlkZXYtPm1mY19tZW0gPSBOVUxMOworCX0KKwlzNXBfbWZjX2ZpbmFsX3BtKGRldik7CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgaW50IHM1cF9tZmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqbV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKG1fZGV2LT5udW1faW5zdCA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gczVwX21mY19zbGVlcChtX2Rldik7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm1fZGV2LT5lbnRlcl9zdXNwZW5kKSAhPSAwKSB7CisJCW1mY19lcnIoIkVycm9yOiBnb2luZyB0byBzdXNwZW5kIGZvciBhIHNlY29uZCB0aW1lXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogQ2hlY2sgaWYgd2UncmUgcHJvY2Vzc2luZyB0aGVuIHdhaXQgaWYgaXQgbmVjZXNzYXJ5LiAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KDAsICZtX2Rldi0+aHdfbG9jaykgIT0gMCkgeworCQkvKiBUcnkgYW5kIGxvY2sgdGhlIEhXICovCisJCS8qIFdhaXQgb24gdGhlIGludGVycnVwdCB3YWl0cXVldWUgKi8KKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobV9kZXYtPnF1ZXVlLAorCQkJbV9kZXYtPmludF9jb25kIHx8IG1fZGV2LT5jdHhbbV9kZXYtPmN1cnJfY3R4XS0+aW50X2NvbmQsCisJCQltc2Vjc190b19qaWZmaWVzKE1GQ19JTlRfVElNRU9VVCkpOworCisJCWlmIChyZXQgPT0gMCkgeworCQkJbWZjX2VycigiV2FpdGluZyBmb3IgaGFyZHdhcmUgdG8gZmluaXNoIHRpbWVkIG91dFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfbWZjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqbV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChtX2Rldi0+bnVtX2luc3QgPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHM1cF9tZmNfd2FrZXVwKG1fZGV2KTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBpbnQgczVwX21mY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKm1fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlhdG9taWNfc2V0KCZtX2Rldi0+cG0ucG93ZXIsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKm1fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHByZV9wb3dlcjsKKworCWlmICghbV9kZXYtPmFsbG9jX2N0eCkKKwkJcmV0dXJuIDA7CisJcHJlX3Bvd2VyID0gYXRvbWljX3JlYWQoJm1fZGV2LT5wbS5wb3dlcik7CisJYXRvbWljX3NldCgmbV9kZXYtPnBtLnBvd2VyLCAxKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiBQb3dlciBtYW5hZ2VtZW50ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgczVwX21mY19wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoczVwX21mY19zdXNwZW5kLCBzNXBfbWZjX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoczVwX21mY19ydW50aW1lX3N1c3BlbmQsIHM1cF9tZmNfcnVudGltZV9yZXN1bWUsCisJCQkgICBOVUxMKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczVwX21mY19wZHJ2ID0geworCS5wcm9iZQk9IHM1cF9tZmNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHM1cF9tZmNfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9IFM1UF9NRkNfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZzNXBfbWZjX3BtX29wcworCX0sCit9OworCitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KKwkJCSJTNVAgTUZDIFY0TDIgRHJpdmVyLCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzXG4iOworCitzdGF0aWMgaW50IF9faW5pdCBzNXBfbWZjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJfaW5mbygiJXMiLCBiYW5uZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczVwX21mY19wZHJ2KTsKKwlpZiAocmV0KQorCQlwcl9lcnIoIlBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLlxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHM1cF9tZmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzNXBfbWZjX3BkcnYpOworfQorCittb2R1bGVfaW5pdChzNXBfbWZjX2luaXQpOworbW9kdWxlX2V4aXQoczVwX21mY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2FtaWwgRGVic2tpIDxrLmRlYnNraUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTNVAgTXVsdGkgRm9ybWF0IENvZGVjIFY0TDIgZHJpdmVyIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2NtZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2NjVlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2NtZC5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogbGludXgvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY21kLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInJlZ3MtbWZjLmgiCisjaW5jbHVkZSAiczVwX21mY19jbWQuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2NvbW1vbi5oIgorI2luY2x1ZGUgInM1cF9tZmNfZGVidWcuaCIKKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBjb21tYW5kIHRvIHRoZSBNRkMgKi8KK3N0YXRpYyBpbnQgczVwX21mY19jbWRfaG9zdDJyaXNjKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2LCBpbnQgY21kLAorCQkJCQkJc3RydWN0IHM1cF9tZmNfY21kX2FyZ3MgKmFyZ3MpCit7CisJaW50IGN1cl9jbWQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1GQ19CV19USU1FT1VUKTsKKwkvKiB3YWl0IHVudGlsIGhvc3QgdG8gcmlzYyBjb21tYW5kIHJlZ2lzdGVyIGJlY29tZXMgJ0gyUl9DTURfRU1QVFknICovCisJZG8geworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJbWZjX2VycigiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBoYXJkd2FyZVxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQljdXJfY21kID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9IT1NUMlJJU0NfQ01EKTsKKwl9IHdoaWxlIChjdXJfY21kICE9IFM1UF9GSU1WX0gyUl9DTURfRU1QVFkpOworCW1mY193cml0ZShkZXYsIGFyZ3MtPmFyZ1swXSwgUzVQX0ZJTVZfSE9TVDJSSVNDX0FSRzEpOworCW1mY193cml0ZShkZXYsIGFyZ3MtPmFyZ1sxXSwgUzVQX0ZJTVZfSE9TVDJSSVNDX0FSRzIpOworCW1mY193cml0ZShkZXYsIGFyZ3MtPmFyZ1syXSwgUzVQX0ZJTVZfSE9TVDJSSVNDX0FSRzMpOworCW1mY193cml0ZShkZXYsIGFyZ3MtPmFyZ1szXSwgUzVQX0ZJTVZfSE9TVDJSSVNDX0FSRzQpOworCS8qIElzc3VlIHRoZSBjb21tYW5kICovCisJbWZjX3dyaXRlKGRldiwgY21kLCBTNVBfRklNVl9IT1NUMlJJU0NfQ01EKTsKKwlyZXR1cm4gMDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgTUZDICovCitpbnQgczVwX21mY19zeXNfaW5pdF9jbWQoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpCit7CisJc3RydWN0IHM1cF9tZmNfY21kX2FyZ3MgaDJyX2FyZ3M7CisKKwltZW1zZXQoJmgycl9hcmdzLCAwLCBzaXplb2Yoc3RydWN0IHM1cF9tZmNfY21kX2FyZ3MpKTsKKwloMnJfYXJncy5hcmdbMF0gPSBkZXYtPmZ3X3NpemU7CisJcmV0dXJuIHM1cF9tZmNfY21kX2hvc3QycmlzYyhkZXYsIFM1UF9GSU1WX0gyUl9DTURfU1lTX0lOSVQsICZoMnJfYXJncyk7Cit9CisKKy8qIFN1c3BlbmQgdGhlIE1GQyBoYXJkd2FyZSAqLworaW50IHM1cF9tZmNfc2xlZXBfY21kKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCXN0cnVjdCBzNXBfbWZjX2NtZF9hcmdzIGgycl9hcmdzOworCisJbWVtc2V0KCZoMnJfYXJncywgMCwgc2l6ZW9mKHN0cnVjdCBzNXBfbWZjX2NtZF9hcmdzKSk7CisJcmV0dXJuIHM1cF9tZmNfY21kX2hvc3QycmlzYyhkZXYsIFM1UF9GSU1WX0gyUl9DTURfU0xFRVAsICZoMnJfYXJncyk7Cit9CisKKy8qIFdha2UgdXAgdGhlIE1GQyBoYXJkd2FyZSAqLworaW50IHM1cF9tZmNfd2FrZXVwX2NtZChzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgczVwX21mY19jbWRfYXJncyBoMnJfYXJnczsKKworCW1lbXNldCgmaDJyX2FyZ3MsIDAsIHNpemVvZihzdHJ1Y3QgczVwX21mY19jbWRfYXJncykpOworCXJldHVybiBzNXBfbWZjX2NtZF9ob3N0MnJpc2MoZGV2LCBTNVBfRklNVl9IMlJfQ01EX1dBS0VVUCwgJmgycl9hcmdzKTsKK30KKworCitpbnQgczVwX21mY19vcGVuX2luc3RfY21kKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfY21kX2FyZ3MgaDJyX2FyZ3M7CisJaW50IHJldDsKKworCS8qIFByZXBhcmluZyBkZWNvZGluZyAtIGdldHRpbmcgaW5zdGFuY2UgbnVtYmVyICovCisJbWZjX2RlYnVnKDIsICJHZXR0aW5nIGluc3RhbmNlIG51bWJlciAoY29kZWM6ICVkKVxuIiwgY3R4LT5jb2RlY19tb2RlKTsKKwlkZXYtPmN1cnJfY3R4ID0gY3R4LT5udW07CisJbWVtc2V0KCZoMnJfYXJncywgMCwgc2l6ZW9mKHN0cnVjdCBzNXBfbWZjX2NtZF9hcmdzKSk7CisJaDJyX2FyZ3MuYXJnWzBdID0gY3R4LT5jb2RlY19tb2RlOworCWgycl9hcmdzLmFyZ1sxXSA9IDA7IC8qIG5vIGNyYyAmIG5vIHBpeGVsY2FjaGUgKi8KKwloMnJfYXJncy5hcmdbMl0gPSBjdHgtPmN0eF9vZnM7CisJaDJyX2FyZ3MuYXJnWzNdID0gY3R4LT5jdHhfc2l6ZTsKKwlyZXQgPSBzNXBfbWZjX2NtZF9ob3N0MnJpc2MoZGV2LCBTNVBfRklNVl9IMlJfQ01EX09QRU5fSU5TVEFOQ0UsCisJCQkJCQkJCSZoMnJfYXJncyk7CisJaWYgKHJldCkgeworCQltZmNfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlXG4iKTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRVJST1I7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzNXBfbWZjX2Nsb3NlX2luc3RfY21kKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfY21kX2FyZ3MgaDJyX2FyZ3M7CisJaW50IHJldDsKKworCWlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfRlJFRSkgeworCQltZmNfZXJyKCJJbnN0YW5jZSBhbHJlYWR5IHJldHVybmVkXG4iKTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRVJST1I7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDbG9zaW5nIGRlY29kaW5nIGluc3RhbmNlICAqLworCW1mY19kZWJ1ZygyLCAiUmV0dXJuaW5nIGluc3RhbmNlIG51bWJlciAlZFxuIiwgY3R4LT5pbnN0X25vKTsKKwlkZXYtPmN1cnJfY3R4ID0gY3R4LT5udW07CisJbWVtc2V0KCZoMnJfYXJncywgMCwgc2l6ZW9mKHN0cnVjdCBzNXBfbWZjX2NtZF9hcmdzKSk7CisJaDJyX2FyZ3MuYXJnWzBdID0gY3R4LT5pbnN0X25vOworCXJldCA9IHM1cF9tZmNfY21kX2hvc3QycmlzYyhkZXYsIFM1UF9GSU1WX0gyUl9DTURfQ0xPU0VfSU5TVEFOQ0UsCisJCQkJCQkJCSZoMnJfYXJncyk7CisJaWYgKHJldCkgeworCQltZmNfZXJyKCJGYWlsZWQgdG8gcmV0dXJuIGFuIGluc3RhbmNlXG4iKTsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRVJST1I7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY21kLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2VlYmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY21kLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2NtZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgUzVQX01GQ19DTURfSF8KKyNkZWZpbmUgUzVQX01GQ19DTURfSF8KKworI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisKKyNkZWZpbmUgTUFYX0gyUl9BUkcJNAorCitzdHJ1Y3QgczVwX21mY19jbWRfYXJncyB7CisJdW5zaWduZWQgaW50CWFyZ1tNQVhfSDJSX0FSR107Cit9OworCitpbnQgczVwX21mY19zeXNfaW5pdF9jbWQoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpOworaW50IHM1cF9tZmNfc2xlZXBfY21kKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KTsKK2ludCBzNXBfbWZjX3dha2V1cF9jbWQoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpOworaW50IHM1cF9tZmNfb3Blbl9pbnN0X2NtZChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7CitpbnQgczVwX21mY19jbG9zZV9pbnN0X2NtZChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7CisKKyNlbmRpZiAvKiBTNVBfTUZDX0NNRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE0NmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY29tbW9uLmgKQEAgLTAsMCArMSw1NzIgQEAKKy8qCisgKiBTYW1zdW5nIFM1UCBNdWx0aSBGb3JtYXQgQ29kZWMgdiA1LjAKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgZW51bXMgYW5kIHN0cnVjdHMgdXNlZCBieSB0aGUgY29kZWMKKyAqIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEthbWlsIERlYnNraSwgPGsuZGVic2tpQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKyAqLworCisjaWZuZGVmIFM1UF9NRkNfQ09NTU9OX0hfCisjZGVmaW5lIFM1UF9NRkNfQ09NTU9OX0hfCisKKyNpbmNsdWRlICJyZWdzLW1mYy5oIgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItY29yZS5oPgorCisvKiBEZWZpbml0aW9ucyByZWxhdGVkIHRvIE1GQyBtZW1vcnkgKi8KKworLyogT2Zmc2V0IGJhc2UgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gQ0FQVFVSRSBhbmQgT1VUUFVUCisqICB3aGlsZSBtbWFwaW5nICovCisjZGVmaW5lIERTVF9RVUVVRV9PRkZfQkFTRSAgICAgIChUQVNLX1NJWkUgLyAyKQorCisvKiBPZmZzZXQgdXNlZCBieSB0aGUgaGFyZHdhcmUgdG8gc3RvcmUgYWRkcmVzc2VzICovCisjZGVmaW5lIE1GQ19PRkZTRVRfU0hJRlQJMTEKKworI2RlZmluZSBGSVJNV0FSRV9BTElHTgkJMHgyMDAwMAkJLyogMTI4S0IgKi8KKyNkZWZpbmUgTUZDX0gyNjRfQ1RYX0JVRl9TSVpFCTB4OTYwMDAJCS8qIDYwMEtCIHBlciBIMjY0IGluc3RhbmNlICovCisjZGVmaW5lIE1GQ19DVFhfQlVGX1NJWkUJMHgyODAwCQkvKiAxMEtCIHBlciBpbnN0YW5jZSAqLworI2RlZmluZSBERVNDX0JVRl9TSVpFCQkweDIwMDAwCQkvKiAxMjhLQiBmb3IgREVTQyBidWZmZXIgKi8KKyNkZWZpbmUgU0hBUkVEX0JVRl9TSVpFCQkweDIwMDAJCS8qIDhLQiBmb3Igc2hhcmVkIGJ1ZmZlciAqLworCisjZGVmaW5lIERFRl9DUEJfU0laRQkJMHg0MDAwMAkJLyogNTEyS0IgKi8KKworI2RlZmluZSBNRkNfQkFOSzFfQUxMT0NfQ1RYCTAKKyNkZWZpbmUgTUZDX0JBTksyX0FMTE9DX0NUWAkxCisKKyNkZWZpbmUgTUZDX0JBTksxX0FMSUdOX09SREVSCTEzCisjZGVmaW5lIE1GQ19CQU5LMl9BTElHTl9PUkRFUgkxMworI2RlZmluZSBNRkNfQkFTRV9BTElHTl9PUkRFUgkxNworCisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHM1cF9tZmNfbWVtX2Nvb2tpZSh2b2lkICphLCB2b2lkICpiKQoreworCS8qIFNhbWUgZnVuY3Rpb25hbGl0eSBhcyB0aGUgdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIgKi8KKwlkbWFfYWRkcl90ICpwYWRkciA9IHZiMl9kbWFfY29udGlnX21lbW9wcy5jb29raWUoYik7CisKKwlyZXR1cm4gKnBhZGRyOworfQorCisvKiBNRkMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUZDX01BWF9FWFRSQV9EUEIgICAgICAgNQorI2RlZmluZSBNRkNfTUFYX0JVRkZFUlMJCTMyCisjZGVmaW5lIE1GQ19OVU1fQ09OVEVYVFMJNAorLyogSW50ZXJydXB0IHRpbWVvdXQgKi8KKyNkZWZpbmUgTUZDX0lOVF9USU1FT1VUCQkyMDAwCisvKiBCdXN5IHdhaXQgdGltZW91dCAqLworI2RlZmluZSBNRkNfQldfVElNRU9VVAkJNTAwCisvKiBXYXRjaGRvZyBpbnRlcnZhbCAqLworI2RlZmluZSBNRkNfV0FUQ0hET0dfSU5URVJWQUwgICAxMDAwCisvKiBBZnRlciBob3cgbWFueSBleGVjdXRpb25zIHdhdGNoZG9nIHNob3VsZCBhc3N1bWUgbG9jayB1cCAqLworI2RlZmluZSBNRkNfV0FUQ0hET0dfQ05UICAgICAgICAxMAorI2RlZmluZSBNRkNfTk9fSU5TVEFOQ0VfU0VUCS0xCisjZGVmaW5lIE1GQ19FTkNfQ0FQX1BMQU5FX0NPVU5UCTEKKyNkZWZpbmUgTUZDX0VOQ19PVVRfUExBTkVfQ09VTlQJMgorI2RlZmluZSBTVFVGRl9CWVRFCQk0CisjZGVmaW5lIE1GQ19NQVhfQ1RSTFMJCTY0CisKKyNkZWZpbmUgbWZjX3JlYWQoZGV2LCBvZmZzZXQpCQlyZWFkbChkZXYtPnJlZ3NfYmFzZSArIChvZmZzZXQpKQorI2RlZmluZSBtZmNfd3JpdGUoZGV2LCBkYXRhLCBvZmZzZXQpCXdyaXRlbCgoZGF0YSksIGRldi0+cmVnc19iYXNlICsgXAorCQkJCQkJCQkob2Zmc2V0KSkKKworLyoqCisgKiBlbnVtIHM1cF9tZmNfZm10X3R5cGUgLSB0eXBlIG9mIHRoZSBwaXhlbGZvcm1hdAorICovCitlbnVtIHM1cF9tZmNfZm10X3R5cGUgeworCU1GQ19GTVRfREVDLAorCU1GQ19GTVRfRU5DLAorCU1GQ19GTVRfUkFXLAorfTsKKworLyoqCisgKiBlbnVtIHM1cF9tZmNfbm9kZV90eXBlIC0gVGhlIHR5cGUgb2YgYW4gTUZDIGRldmljZSBub2RlLgorICovCitlbnVtIHM1cF9tZmNfbm9kZV90eXBlIHsKKwlNRkNOT0RFX0lOVkFMSUQgPSAtMSwKKwlNRkNOT0RFX0RFQ09ERVIgPSAwLAorCU1GQ05PREVfRU5DT0RFUiA9IDEsCit9OworCisvKioKKyAqIGVudW0gczVwX21mY19pbnN0X3R5cGUgLSBUaGUgdHlwZSBvZiBhbiBNRkMgaW5zdGFuY2UuCisgKi8KK2VudW0gczVwX21mY19pbnN0X3R5cGUgeworCU1GQ0lOU1RfSU5WQUxJRCwKKwlNRkNJTlNUX0RFQ09ERVIsCisJTUZDSU5TVF9FTkNPREVSLAorfTsKKworLyoqCisgKiBlbnVtIHM1cF9tZmNfaW5zdF9zdGF0ZSAtIFRoZSBzdGF0ZSBvZiBhbiBNRkMgaW5zdGFuY2UuCisgKi8KK2VudW0gczVwX21mY19pbnN0X3N0YXRlIHsKKwlNRkNJTlNUX0ZSRUUgPSAwLAorCU1GQ0lOU1RfSU5JVCA9IDEwMCwKKwlNRkNJTlNUX0dPVF9JTlNULAorCU1GQ0lOU1RfSEVBRF9QQVJTRUQsCisJTUZDSU5TVF9CVUZTX1NFVCwKKwlNRkNJTlNUX1JVTk5JTkcsCisJTUZDSU5TVF9GSU5JU0hJTkcsCisJTUZDSU5TVF9GSU5JU0hFRCwKKwlNRkNJTlNUX1JFVFVSTl9JTlNULAorCU1GQ0lOU1RfRVJST1IsCisJTUZDSU5TVF9BQk9SVCwKKwlNRkNJTlNUX1JFU19DSEFOR0VfSU5JVCwKKwlNRkNJTlNUX1JFU19DSEFOR0VfRkxVU0gsCisJTUZDSU5TVF9SRVNfQ0hBTkdFX0VORCwKK307CisKKy8qKgorICogZW51bSBzNXBfbWZjX3F1ZXVlX3N0YXRlIC0gVGhlIHN0YXRlIG9mIGJ1ZmZlciBxdWV1ZS4KKyAqLworZW51bSBzNXBfbWZjX3F1ZXVlX3N0YXRlIHsKKwlRVUVVRV9GUkVFLAorCVFVRVVFX0JVRlNfUkVRVUVTVEVELAorCVFVRVVFX0JVRlNfUVVFUklFRCwKKwlRVUVVRV9CVUZTX01NQVBFRCwKK307CisKKy8qKgorICogZW51bSBzNXBfbWZjX2RlY29kZV9hcmcgLSB0eXBlIG9mIGZyYW1lIGRlY29kaW5nCisgKi8KK2VudW0gczVwX21mY19kZWNvZGVfYXJnIHsKKwlNRkNfREVDX0ZSQU1FLAorCU1GQ19ERUNfTEFTVF9GUkFNRSwKKwlNRkNfREVDX1JFU19DSEFOR0UsCit9OworCitzdHJ1Y3QgczVwX21mY19jdHg7CisKKy8qKgorICogc3RydWN0IHM1cF9tZmNfYnVmIC0gTUZDIGJ1ZmZlcgorICovCitzdHJ1Y3QgczVwX21mY19idWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdmIyX2J1ZmZlciAqYjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzaXplX3QgbHVtYTsKKwkJCXNpemVfdCBjaHJvbWE7CisJCX0gcmF3OworCQlzaXplX3Qgc3RyZWFtOworCX0gY29va2llOworCWludCB1c2VkOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczVwX21mY19wbSAtIHBvd2VyIG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHM1cF9tZmNfcG0geworCXN0cnVjdCBjbGsJKmNsb2NrOworCXN0cnVjdCBjbGsJKmNsb2NrX2dhdGU7CisJYXRvbWljX3QJcG93ZXI7CisJc3RydWN0IGRldmljZQkqZGV2aWNlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczVwX21mY19kZXYgLSBUaGUgc3RydWN0IGNvbnRhaW5pbmcgZHJpdmVyIGludGVybmFsIHBhcmFtZXRlcnMuCisgKgorICogQHY0bDJfZGV2OgkJdjRsMl9kZXZpY2UKKyAqIEB2ZmRfZGVjOgkJdmlkZW8gZGV2aWNlIGZvciBkZWNvZGluZworICogQHZmZF9lbmM6CQl2aWRlbyBkZXZpY2UgZm9yIGVuY29kaW5nCisgKiBAcGxhdF9kZXY6CQlwbGF0Zm9ybSBkZXZpY2UKKyAqIEBtZW1fZGV2X2w6CQljaGlsZCBkZXZpY2Ugb2YgdGhlIGxlZnQgbWVtb3J5IGJhbmsgKDApCisgKiBAbWVtX2Rldl9yOgkJY2hpbGQgZGV2aWNlIG9mIHRoZSByaWdodCBtZW1vcnkgYmFuayAoMSkKKyAqIEByZWdzX2Jhc2U6CQliYXNlIGFkZHJlc3Mgb2YgdGhlIE1GQyBodyByZWdpc3RlcnMKKyAqIEBpcnE6CQlpcnEgcmVzb3VyY2UKKyAqIEBtZmNfbWVtOgkJTUZDIHJlZ2lzdGVycyBtZW1vcnkgcmVzb3VyY2UKKyAqIEBkZWNfY3RybF9oYW5kbGVyOgljb250cm9sIGZyYW1ld29yayBoYW5kbGVyIGZvciBkZWNvZGluZworICogQGVuY19jdHJsX2hhbmRsZXI6CWNvbnRyb2wgZnJhbWV3b3JrIGhhbmRsZXIgZm9yIGVuY29kaW5nCisgKiBAcG06CQkJcG93ZXIgbWFuYWdlbWVudCBjb250cm9sCisgKiBAbnVtX2luc3Q6CQljb3V0ZXIgb2YgYWN0aXZlIE1GQyBpbnN0YW5jZXMKKyAqIEBpcnFsb2NrOgkJbG9jayBmb3Igb3BlcmF0aW9ucyBvbiB2aWRlb2J1ZjIgcXVldWVzCisgKiBAY29uZGxvY2s6CQlsb2NrIGZvciBjaGFuZ2luZy9jaGVja2luZyBpZiBhIGNvbnRleHQgaXMgcmVhZHkgdG8gYmUKKyAqCQkJcHJvY2Vzc2VkCisgKiBAbWZjX211dGV4OgkJbG9jayBmb3IgdmlkZW9fZGV2aWNlCisgKiBAaW50X2NvbmQ6CQl2YXJpYWJsZSB1c2VkIGJ5IHRoZSB3YWl0cXVldWUKKyAqIEBpbnRfdHlwZToJCXR5cGUgb2YgbGFzdCBpbnRlcnJ1cHQKKyAqIEBpbnRfZXJyOgkJZXJyb3IgbnVtYmVyIGZvciBsYXN0IGludGVycnVwdAorICogQHF1ZXVlOgkJd2FpdHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9mIGRldmljZSBjb21tYW5kcworICogQGZ3X3NpemU6CQlzaXplIG9mIGZpcm13YXJlCisgKiBAYmFuazE6CQlhZGRyZXNzIG9mIHRoZSBiZWdnaW5pbmcgb2YgYmFuayAxIG1lbW9yeQorICogQGJhbmsyOgkJYWRkcmVzcyBvZiB0aGUgYmVnZ2luaW5nIG9mIGJhbmsgMiBtZW1vcnkKKyAqIEBod19sb2NrOgkJdXNlZCBmb3IgaGFyZHdhcmUgbG9ja2luZworICogQGN0eDoJCWFycmF5IG9mIGRyaXZlciBjb250ZXh0cworICogQGN1cnJfY3R4OgkJbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBjb250ZXh0CisgKiBAY3R4X3dvcmtfYml0czoJdXNlZCB0byBtYXJrIHdoaWNoIGNvbnRleHRzIGFyZSB3YWl0aW5nIGZvciBoYXJkd2FyZQorICogQHdhdGNoZG9nX2NudDoJY291bnRlciBmb3IgdGhlIHdhdGNoZG9nCisgKiBAd2F0Y2hkb2dfd29ya3F1ZXVlOgl3b3JrcXVldWUgZm9yIHRoZSB3YXRjaGRvZworICogQHdhdGNoZG9nX3dvcms6CXdvcmtlciBmb3IgdGhlIHdhdGNoZG9nCisgKiBAYWxsb2NfY3R4OgkJdmlkZW9idWYyIGFsbG9jYXRvciBjb250ZXh0cyBmb3IgdHdvIG1lbW9yeSBiYW5rcworICogQGVudGVyX3N1c3BlbmQ6CWZsYWcgc2V0IHdoZW4gZW50ZXJpbmcgc3VzcGVuZAorICoKKyAqLworc3RydWN0IHM1cF9tZmNfZGV2IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZQkqdmZkX2RlYzsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2ZmRfZW5jOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBsYXRfZGV2OworCXN0cnVjdCBkZXZpY2UJCSptZW1fZGV2X2w7CisJc3RydWN0IGRldmljZQkJKm1lbV9kZXZfcjsKKwl2b2lkIF9faW9tZW0JCSpyZWdzX2Jhc2U7CisJaW50CQkJaXJxOworCXN0cnVjdCByZXNvdXJjZQkJKm1mY19tZW07CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGRlY19jdHJsX2hhbmRsZXI7CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGVuY19jdHJsX2hhbmRsZXI7CisJc3RydWN0IHM1cF9tZmNfcG0JcG07CisJaW50IG51bV9pbnN0OworCXNwaW5sb2NrX3QgaXJxbG9jazsJLyogbG9jayB3aGVuIG9wZXJhdGluZyBvbiB2aWRlb2J1ZjIgcXVldWVzICovCisJc3BpbmxvY2tfdCBjb25kbG9jazsJLyogbG9jayB3aGVuIGNoYW5naW5nL2NoZWNraW5nIGlmIGEgY29udGV4dCBpcworCQkJCQlyZWFkeSB0byBiZSBwcm9jZXNzZWQgKi8KKwlzdHJ1Y3QgbXV0ZXggbWZjX211dGV4OyAvKiB2aWRlb19kZXZpY2UgbG9jayAqLworCWludCBpbnRfY29uZDsKKwlpbnQgaW50X3R5cGU7CisJdW5zaWduZWQgaW50IGludF9lcnI7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJc2l6ZV90IGZ3X3NpemU7CisJc2l6ZV90IGJhbmsxOworCXNpemVfdCBiYW5rMjsKKwl1bnNpZ25lZCBsb25nIGh3X2xvY2s7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHhbTUZDX05VTV9DT05URVhUU107CisJaW50IGN1cnJfY3R4OworCXVuc2lnbmVkIGxvbmcgY3R4X3dvcmtfYml0czsKKwlhdG9taWNfdCB3YXRjaGRvZ19jbnQ7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndhdGNoZG9nX3dvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfd29yazsKKwl2b2lkICphbGxvY19jdHhbMl07CisJdW5zaWduZWQgbG9uZyBlbnRlcl9zdXNwZW5kOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczVwX21mY19oMjY0X2VuY19wYXJhbXMgLSBlbmNvZGluZyBwYXJhbWV0ZXJzIGZvciBoMjY0CisgKi8KK3N0cnVjdCBzNXBfbWZjX2gyNjRfZW5jX3BhcmFtcyB7CisJZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9wcm9maWxlIHByb2ZpbGU7CisJZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sb29wX2ZpbHRlcl9tb2RlIGxvb3BfZmlsdGVyX21vZGU7CisJczggbG9vcF9maWx0ZXJfYWxwaGE7CisJczggbG9vcF9maWx0ZXJfYmV0YTsKKwllbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2VudHJvcHlfbW9kZSBlbnRyb3B5X21vZGU7CisJdTggbWF4X3JlZl9waWM7CisJdTggbnVtX3JlZl9waWNfNHA7CisJaW50IF84eDhfdHJhbnNmb3JtOworCWludCByY19tYjsKKwlpbnQgcmNfbWJfZGFyazsKKwlpbnQgcmNfbWJfc21vb3RoOworCWludCByY19tYl9zdGF0aWM7CisJaW50IHJjX21iX2FjdGl2aXR5OworCWludCB2dWlfc2FyOworCXU4IHZ1aV9zYXJfaWRjOworCXUxNiB2dWlfZXh0X3Nhcl93aWR0aDsKKwl1MTYgdnVpX2V4dF9zYXJfaGVpZ2h0OworCWludCBvcGVuX2dvcDsKKwl1MTYgb3Blbl9nb3Bfc2l6ZTsKKwl1OCByY19mcmFtZV9xcDsKKwl1OCByY19taW5fcXA7CisJdTggcmNfbWF4X3FwOworCXU4IHJjX3BfZnJhbWVfcXA7CisJdTggcmNfYl9mcmFtZV9xcDsKKwllbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIGxldmVsX3Y0bDI7CisJaW50IGxldmVsOworCXUxNiBjcGJfc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IHM1cF9tZmNfbXBlZzRfZW5jX3BhcmFtcyAtIGVuY29kaW5nIHBhcmFtZXRlcnMgZm9yIGgyNjMgYW5kIG1wZWc0CisgKi8KK3N0cnVjdCBzNXBfbWZjX21wZWc0X2VuY19wYXJhbXMgeworCS8qIE1QRUc0IE9ubHkgKi8KKwllbnVtIHY0bDJfbXBlZ192aWRlb19tcGVnNF9wcm9maWxlIHByb2ZpbGU7CisJaW50IHF1YXJ0ZXJfcGl4ZWw7CisJLyogQ29tbW9uIGZvciBNUEVHNCwgSDI2MyAqLworCXUxNiB2b3BfdGltZV9yZXM7CisJdTE2IHZvcF9mcm1fZGVsdGE7CisJdTggcmNfZnJhbWVfcXA7CisJdTggcmNfbWluX3FwOworCXU4IHJjX21heF9xcDsKKwl1OCByY19wX2ZyYW1lX3FwOworCXU4IHJjX2JfZnJhbWVfcXA7CisJZW51bSB2NGwyX21wZWdfdmlkZW9fbXBlZzRfbGV2ZWwgbGV2ZWxfdjRsMjsKKwlpbnQgbGV2ZWw7Cit9OworCisvKioKKyAqIHN0cnVjdCBzNXBfbWZjX2VuY19wYXJhbXMgLSBnZW5lcmFsIGVuY29kaW5nIHBhcmFtZXRlcnMKKyAqLworc3RydWN0IHM1cF9tZmNfZW5jX3BhcmFtcyB7CisJdTE2IHdpZHRoOworCXUxNiBoZWlnaHQ7CisKKwl1MTYgZ29wX3NpemU7CisJZW51bSB2NGwyX21wZWdfdmlkZW9fbXVsdGlfc2xpY2VfbW9kZSBzbGljZV9tb2RlOworCXUxNiBzbGljZV9tYjsKKwl1MzIgc2xpY2VfYml0OworCXUxNiBpbnRyYV9yZWZyZXNoX21iOworCWludCBwYWQ7CisJdTggcGFkX2x1bWE7CisJdTggcGFkX2NiOworCXU4IHBhZF9jcjsKKwlpbnQgcmNfZnJhbWU7CisJdTMyIHJjX2JpdHJhdGU7CisJdTE2IHJjX3JlYWN0aW9uX2NvZWZmOworCXUxNiB2YnZfc2l6ZTsKKworCWVudW0gdjRsMl9tcGVnX3ZpZGVvX2hlYWRlcl9tb2RlIHNlcV9oZHJfbW9kZTsKKwllbnVtIHY0bDJfbXBlZ19tZmM1MV92aWRlb19mcmFtZV9za2lwX21vZGUgZnJhbWVfc2tpcF9tb2RlOworCWludCBmaXhlZF90YXJnZXRfYml0OworCisJdTggbnVtX2JfZnJhbWU7CisJdTMyIHJjX2ZyYW1lcmF0ZV9udW07CisJdTMyIHJjX2ZyYW1lcmF0ZV9kZW5vbTsKKwlpbnQgaW50ZXJsYWNlOworCisJdW5pb24geworCQlzdHJ1Y3QgczVwX21mY19oMjY0X2VuY19wYXJhbXMgaDI2NDsKKwkJc3RydWN0IHM1cF9tZmNfbXBlZzRfZW5jX3BhcmFtcyBtcGVnNDsKKwl9IGNvZGVjOworCit9OworCisvKioKKyAqIHN0cnVjdCBzNXBfbWZjX2NvZGVjX29wcyAtIGNvZGVjIG9wcywgdXNlZCBieSBlbmNvZGluZworICovCitzdHJ1Y3QgczVwX21mY19jb2RlY19vcHMgeworCS8qIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovCisJaW50ICgqcHJlX3NlcV9zdGFydCkgKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKKwlpbnQgKCpwb3N0X3NlcV9zdGFydCkgKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKKwkvKiBleGVjdXRpb24gcm91dGluZXMgKi8KKwlpbnQgKCpwcmVfZnJhbWVfc3RhcnQpIChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7CisJaW50ICgqcG9zdF9mcmFtZV9zdGFydCkgKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKK307CisKKyNkZWZpbmUgY2FsbF9jb3AoYywgb3AsIGFyZ3MuLi4pCQkJCVwKKwkoKChjKS0+Y19vcHMtPm9wKSA/CQkJCQlcCisJCSgoYyktPmNfb3BzLT5vcChhcmdzKSkgOiAwKQorCisvKioKKyAqIHN0cnVjdCBzNXBfbWZjX2N0eCAtIFRoaXMgc3RydWN0IGNvbnRhaW5zIHRoZSBpbnN0YW5jZSBjb250ZXh0CisgKgorICogQGRldjoJCXBvaW50ZXIgdG8gdGhlIHM1cF9tZmNfZGV2IG9mIHRoZSBkZXZpY2UKKyAqIEBmaDoJCQlzdHJ1Y3QgdjRsMl9maAorICogQG51bToJCW51bWJlciBvZiB0aGUgY29udGV4dCB0aGF0IHRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcworICogQGludF9jb25kOgkJdmFyaWFibGUgdXNlZCBieSB0aGUgd2FpdHF1ZXVlCisgKiBAaW50X3R5cGU6CQl0eXBlIG9mIHRoZSBsYXN0IGludGVycnVwdAorICogQGludF9lcnI6CQllcnJvciBudW1iZXIgcmVjZWl2ZWQgZnJvbSBNRkMgaHcgaW4gdGhlIGludGVycnVwdAorICogQHF1ZXVlOgkJd2FpdHF1ZXVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgdGhpcyBjb250ZXh0IHRvCisgKgkJCWZpbmlzaAorICogQHNyY19mbXQ6CQlzb3VyY2UgcGl4ZWxmb3JtYXQgaW5mb3JtYXRpb24KKyAqIEBkc3RfZm10OgkJZGVzdGluYXRpb24gcGl4ZWxmb3JtYXQgaW5mb3JtYXRpb24KKyAqIEB2cV9zcmM6CQl2YjIgcXVldWUgZm9yIHNvdXJjZSBidWZmZXJzCisgKiBAdnFfZHN0OgkJdmIyIHF1ZXVlIGZvciBkZXN0aW5hdGlvbiBidWZmZXJzCisgKiBAc3JjX3F1ZXVlOgkJZHJpdmVyIGludGVybmFsIHF1ZXVlIGZvciBzb3VyY2UgYnVmZmVycworICogQGRzdF9xdWV1ZToJCWRyaXZlciBpbnRlcm5hbCBxdWV1ZSBmb3IgZGVzdGluYXRpb24gYnVmZmVycworICogQHNyY19xdWV1ZV9jbnQ6CW51bWJlciBvZiBidWZmZXJzIHF1ZXVlZCBvbiB0aGUgc291cmNlIGludGVybmFsIHF1ZXVlCisgKiBAZHN0X3F1ZXVlX2NudDoJbnVtYmVyIG9mIGJ1ZmZlcnMgcXVldWVkIG9uIHRoZSBkZXN0IGludGVybmFsIHF1ZXVlCisgKiBAdHlwZToJCXR5cGUgb2YgdGhlIGluc3RhbmNlIC0gZGVjb2RlciBvciBlbmNvZGVyCisgKiBAc3RhdGU6CQlzdGF0ZSBvZiB0aGUgY29udGV4dAorICogQGluc3Rfbm86CQludW1iZXIgb2YgaHcgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0CisgKiBAaW1nX3dpZHRoOgkJd2lkdGggb2YgdGhlIGltYWdlIHRoYXQgaXMgZGVjb2RlZCBvciBlbmNvZGVkCisgKiBAaW1nX2hlaWdodDoJCWhlaWdodCBvZiB0aGUgaW1hZ2UgdGhhdCBpcyBkZWNvZGVkIG9yIGVuY29kZWQKKyAqIEBidWZfd2lkdGg6CQl3aWR0aCBvZiB0aGUgYnVmZmVyIGZvciBwcm9jZXNzZWQgaW1hZ2UKKyAqIEBidWZfaGVpZ2h0OgkJaGVpZ2h0IG9mIHRoZSBidWZmZXIgZm9yIHByb2Nlc3NlZCBpbWFnZQorICogQGx1bWFfc2l6ZToJCXNpemUgb2YgYSBsdW1hIHBsYW5lCisgKiBAY2hyb21hX3NpemU6CXNpemUgb2YgYSBjaHJvbWEgcGxhbmUKKyAqIEBtdl9zaXplOgkJc2l6ZSBvZiBhIG1vdGlvbiB2ZWN0b3JzIGJ1ZmZlcgorICogQGNvbnN1bWVkX3N0cmVhbToJbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgc28gZmFyIGZyb20gdGhlCisgKgkJCWRlY29kaW5nIGJ1ZmZlcgorICogQGRwYl9mbHVzaF9mbGFnOglmbGFnIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIERQQiBidWZmZXJzIGFyZSBiZWluZworICoJCQlmbHVzaGVkCisgKiBAYmFuazFfYnVmOgkJaGFuZGxlIHRvIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyeSBidWZmZXJzIGZyb20KKyAqCQkJbWVtb3J5IGJhbmsgMQorICogQGJhbmsxX3BoeXM6CQlhZGRyZXNzIG9mIHRoZSB0ZW1wb3JhcnkgYnVmZmVycyBmcm9tIG1lbW9yeSBiYW5rIDEKKyAqIEBiYW5rMV9zaXplOgkJc2l6ZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJ5IGJ1ZmZlcnMgZnJvbQorICoJCQltZW1vcnkgYmFuayAxCisgKiBAYmFuazJfYnVmOgkJaGFuZGxlIHRvIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyeSBidWZmZXJzIGZyb20KKyAqCQkJbWVtb3J5IGJhbmsgMgorICogQGJhbmsyX3BoeXM6CQlhZGRyZXNzIG9mIHRoZSB0ZW1wb3JhcnkgYnVmZmVycyBmcm9tIG1lbW9yeSBiYW5rIDIKKyAqIEBiYW5rMl9zaXplOgkJc2l6ZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJ5IGJ1ZmZlcnMgZnJvbQorICoJCQltZW1vcnkgYmFuayAyCisgKiBAY2FwdHVyZV9zdGF0ZToJc3RhdGUgb2YgdGhlIGNhcHR1cmUgYnVmZmVycyBxdWV1ZQorICogQG91dHB1dF9zdGF0ZToJc3RhdGUgb2YgdGhlIG91dHB1dCBidWZmZXJzIHF1ZXVlCisgKiBAc3JjX2J1ZnM6CQlpbmZvcm1hdGlvbiBvbiBhbGxvY2F0ZWQgc291cmNlIGJ1ZmZlcnMKKyAqIEBkc3RfYnVmczoJCWluZm9ybWF0aW9uIG9uIGFsbG9jYXRlZCBkZXN0aW5hdGlvbiBidWZmZXJzCisgKiBAc2VxdWVuY2U6CQljb3VudGVyIGZvciB0aGUgc2VxdWVuY2UgbnVtYmVyIGZvciB2NGwyCisgKiBAZGVjX2RzdF9mbGFnOglmbGFncyBmb3IgYnVmZmVycyBxdWV1ZWQgaW4gdGhlIGhhcmR3YXJlCisgKiBAZGVjX3NyY19idWZfc2l6ZToJc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBzb3VyY2UgYnVmZmVycyBpbiBkZWNvZGluZworICogQGNvZGVjX21vZGU6CQludW1iZXIgb2YgY29kZWMgbW9kZSB1c2VkIGJ5IE1GQyBodworICogQHNsaWNlX2ludGVyZmFjZToJc2xpY2UgaW50ZXJmYWNlIGZsYWcKKyAqIEBsb29wX2ZpbHRlcl9tcGVnNDoJbG9vcCBmaWx0ZXIgZm9yIE1QRUc0IGZsYWcKKyAqIEBkaXNwbGF5X2RlbGF5Ogl2YWx1ZSBvZiB0aGUgZGlzcGxheSBkZWxheSBmb3IgSDI2NAorICogQGRpc3BsYXlfZGVsYXlfZW5hYmxlOglkaXNwbGF5IGRlbGF5IGZvciBIMjY0IGVuYWJsZSBmbGFnCisgKiBAYWZ0ZXJfcGFja2VkX3BiOglmbGFnIHVzZWQgdG8gdHJhY2sgYnVmZmVyIHdoZW4gc3RyZWFtIGlzIGluCisgKgkJCVBhY2tlZCBQQiBmb3JtYXQKKyAqIEBkcGJfY291bnQ6CQljb3VudCBvZiB0aGUgRFBCIGJ1ZmZlcnMgcmVxdWlyZWQgYnkgTUZDIGh3CisgKiBAdG90YWxfZHBiX2NvdW50Ogljb3VudCBvZiBEUEIgYnVmZmVycyB3aXRoIGFkZGl0aW9uYWwgYnVmZmVycworICoJCQlyZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisgKiBAY3R4X2J1ZjoJCWhhbmRsZSB0byB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQKKyAqIEBjdHhfcGh5czoJCWFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0CisgKiBAY3R4X3NpemU6CQlzaXplIG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dAorICogQGRlc2NfYnVmOgkJZGVzY3JpcHRpb24gYnVmZmVyIGZvciBkZWNvZGluZyBoYW5kbGUKKyAqIEBkZXNjX3BoeXM6CQlkZXNjcmlwdGlvbiBidWZmZXIgZm9yIGRlY29kaW5nIGFkZHJlc3MKKyAqIEBzaG1fYWxsb2M6CQloYW5kbGUgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IGJ1ZmZlcgorICogQHNobToJCXZpcnR1YWwgYWRkcmVzcyBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgYnVmZmVyCisgKiBAc2htX29mczoJCWFkZHJlc3Mgb2Zmc2V0IGZvciBzaGFyZWQgbWVtb3J5CisgKiBAZW5jX3BhcmFtczoJCWVuY29kaW5nIHBhcmFtZXRlcnMgZm9yIE1GQworICogQGVuY19kc3RfYnVmX3NpemU6CXNpemUgb2YgdGhlIGJ1ZmZlcnMgZm9yIGVuY29kZXIgb3V0cHV0CisgKiBAZnJhbWVfdHlwZToJCXVzZWQgdG8gZm9yY2UgdGhlIHR5cGUgb2YgdGhlIG5leHQgZW5jb2RlZCBmcmFtZQorICogQHJlZl9xdWV1ZToJCWxpc3Qgb2YgdGhlIHJlZmVyZW5jZSBidWZmZXJzIGZvciBlbmNvZGluZworICogQHJlZl9xdWV1ZV9jbnQ6CW51bWJlciBvZiB0aGUgYnVmZmVycyBpbiB0aGUgcmVmZXJlbmNlIGxpc3QKKyAqIEBjX29wczoJCW9wcyBmb3IgZW5jb2RpbmcKKyAqIEBjdHJsczoJCWFycmF5IG9mIGNvbnRyb2xzLCB1c2VkIHdoZW4gYWRkaW5nIGNvbnRyb2xzIHRvIHRoZQorICoJCQl2NGwyIGNvbnRyb2wgZnJhbWV3b3JrCisgKiBAY3RybF9oYW5kbGVyOgloYW5kbGVyIGZvciB2NGwyIGZyYW1ld29yaworICovCitzdHJ1Y3QgczVwX21mY19jdHggeworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2OworCXN0cnVjdCB2NGwyX2ZoIGZoOworCisJaW50IG51bTsKKworCWludCBpbnRfY29uZDsKKwlpbnQgaW50X3R5cGU7CisJdW5zaWduZWQgaW50IGludF9lcnI7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisKKwlzdHJ1Y3QgczVwX21mY19mbXQgKnNyY19mbXQ7CisJc3RydWN0IHM1cF9tZmNfZm10ICpkc3RfZm10OworCisJc3RydWN0IHZiMl9xdWV1ZSB2cV9zcmM7CisJc3RydWN0IHZiMl9xdWV1ZSB2cV9kc3Q7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNyY19xdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRzdF9xdWV1ZTsKKworCXVuc2lnbmVkIGludCBzcmNfcXVldWVfY250OworCXVuc2lnbmVkIGludCBkc3RfcXVldWVfY250OworCisJZW51bSBzNXBfbWZjX2luc3RfdHlwZSB0eXBlOworCWVudW0gczVwX21mY19pbnN0X3N0YXRlIHN0YXRlOworCWludCBpbnN0X25vOworCisJLyogSW1hZ2UgcGFyYW1ldGVycyAqLworCWludCBpbWdfd2lkdGg7CisJaW50IGltZ19oZWlnaHQ7CisJaW50IGJ1Zl93aWR0aDsKKwlpbnQgYnVmX2hlaWdodDsKKworCWludCBsdW1hX3NpemU7CisJaW50IGNocm9tYV9zaXplOworCWludCBtdl9zaXplOworCisJdW5zaWduZWQgbG9uZyBjb25zdW1lZF9zdHJlYW07CisKKwl1bnNpZ25lZCBpbnQgZHBiX2ZsdXNoX2ZsYWc7CisKKwkvKiBCdWZmZXJzICovCisJdm9pZCAqYmFuazFfYnVmOworCXNpemVfdCBiYW5rMV9waHlzOworCXNpemVfdCBiYW5rMV9zaXplOworCisJdm9pZCAqYmFuazJfYnVmOworCXNpemVfdCBiYW5rMl9waHlzOworCXNpemVfdCBiYW5rMl9zaXplOworCisJZW51bSBzNXBfbWZjX3F1ZXVlX3N0YXRlIGNhcHR1cmVfc3RhdGU7CisJZW51bSBzNXBfbWZjX3F1ZXVlX3N0YXRlIG91dHB1dF9zdGF0ZTsKKworCXN0cnVjdCBzNXBfbWZjX2J1ZiBzcmNfYnVmc1tNRkNfTUFYX0JVRkZFUlNdOworCWludCBzcmNfYnVmc19jbnQ7CisJc3RydWN0IHM1cF9tZmNfYnVmIGRzdF9idWZzW01GQ19NQVhfQlVGRkVSU107CisJaW50IGRzdF9idWZzX2NudDsKKworCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKwl1bnNpZ25lZCBsb25nIGRlY19kc3RfZmxhZzsKKwlzaXplX3QgZGVjX3NyY19idWZfc2l6ZTsKKworCS8qIENvbnRyb2wgdmFsdWVzICovCisJaW50IGNvZGVjX21vZGU7CisJaW50IHNsaWNlX2ludGVyZmFjZTsKKwlpbnQgbG9vcF9maWx0ZXJfbXBlZzQ7CisJaW50IGRpc3BsYXlfZGVsYXk7CisJaW50IGRpc3BsYXlfZGVsYXlfZW5hYmxlOworCWludCBhZnRlcl9wYWNrZWRfcGI7CisKKwlpbnQgZHBiX2NvdW50OworCWludCB0b3RhbF9kcGJfY291bnQ7CisKKwkvKiBCdWZmZXJzICovCisJdm9pZCAqY3R4X2J1ZjsKKwlzaXplX3QgY3R4X3BoeXM7CisJc2l6ZV90IGN0eF9vZnM7CisJc2l6ZV90IGN0eF9zaXplOworCisJdm9pZCAqZGVzY19idWY7CisJc2l6ZV90IGRlc2NfcGh5czsKKworCisJdm9pZCAqc2htX2FsbG9jOworCXZvaWQgKnNobTsKKwlzaXplX3Qgc2htX29mczsKKworCXN0cnVjdCBzNXBfbWZjX2VuY19wYXJhbXMgZW5jX3BhcmFtczsKKworCXNpemVfdCBlbmNfZHN0X2J1Zl9zaXplOworCisJZW51bSB2NGwyX21wZWdfbWZjNTFfdmlkZW9fZm9yY2VfZnJhbWVfdHlwZSBmb3JjZV9mcmFtZV90eXBlOworCisJc3RydWN0IGxpc3RfaGVhZCByZWZfcXVldWU7CisJdW5zaWduZWQgaW50IHJlZl9xdWV1ZV9jbnQ7CisKKwlzdHJ1Y3QgczVwX21mY19jb2RlY19vcHMgKmNfb3BzOworCisJc3RydWN0IHY0bDJfY3RybCAqY3RybHNbTUZDX01BWF9DVFJMU107CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKK307CisKKy8qCisgKiBzdHJ1Y3QgczVwX21mY19mbXQgLQlzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBwaXhlbGZvcm1hdHMKKyAqCQkJdXNlZCBieSB0aGUgTUZDCisgKi8KK3N0cnVjdCBzNXBfbWZjX2ZtdCB7CisJY2hhciAqbmFtZTsKKwl1MzIgZm91cmNjOworCXUzMiBjb2RlY19tb2RlOworCWVudW0gczVwX21mY19mbXRfdHlwZSB0eXBlOworCXUzMiBudW1fcGxhbmVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbWZjX2NvbnRyb2wgLQlzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBNRkMgY29udHJvbHMKKyAqCQkJaXQgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjb250cm9sIGZyYW1ld29yay4KKyAqLworc3RydWN0IG1mY19jb250cm9sIHsKKwlfX3UzMgkJCWlkOworCWVudW0gdjRsMl9jdHJsX3R5cGUJdHlwZTsKKwlfX3U4CQkJbmFtZVszMl07ICAvKiBXaGF0ZXZlciAqLworCV9fczMyCQkJbWluaW11bTsgICAvKiBOb3RlIHNpZ25lZG5lc3MgKi8KKwlfX3MzMgkJCW1heGltdW07CisJX19zMzIJCQlzdGVwOworCV9fdTMyCQkJbWVudV9za2lwX21hc2s7CisJX19zMzIJCQlkZWZhdWx0X3ZhbHVlOworCV9fdTMyCQkJZmxhZ3M7CisJX191MzIJCQlyZXNlcnZlZFsyXTsKKwlfX3U4CQkJaXNfdm9sYXRpbGU7Cit9OworCisKKyNkZWZpbmUgZmhfdG9fY3R4KF9fZmgpIGNvbnRhaW5lcl9vZihfX2ZoLCBzdHJ1Y3QgczVwX21mY19jdHgsIGZoKQorI2RlZmluZSBjdHJsX3RvX2N0eChfX2N0cmwpIFwKKwljb250YWluZXJfb2YoKF9fY3RybCktPmhhbmRsZXIsIHN0cnVjdCBzNXBfbWZjX2N0eCwgY3RybF9oYW5kbGVyKQorCisjZW5kaWYgLyogUzVQX01GQ19DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjRkYTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY3RybC5jCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogbGludXgvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY3RybC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSAicmVncy1tZmMuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2NtZC5oIgorI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisjaW5jbHVkZSAiczVwX21mY19kZWJ1Zy5oIgorI2luY2x1ZGUgInM1cF9tZmNfaW50ci5oIgorI2luY2x1ZGUgInM1cF9tZmNfcG0uaCIKKworc3RhdGljIHZvaWQgKnM1cF9tZmNfYml0cHJvY19idWY7CitzdGF0aWMgc2l6ZV90IHM1cF9tZmNfYml0cHJvY19waHlzOworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnM1cF9tZmNfYml0cHJvY192aXJ0OworCisvKiBBbGxvY2F0ZSBhbmQgbG9hZCBmaXJtd2FyZSAqLworaW50IHM1cF9tZmNfYWxsb2NfYW5kX2xvYWRfZmlybXdhcmUoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpCit7CisJc3RydWN0IGZpcm13YXJlICpmd19ibG9iOworCXNpemVfdCBiYW5rMl9iYXNlX3BoeXM7CisJdm9pZCAqYl9iYXNlOworCWludCBlcnI7CisKKwkvKiBGaXJtYXJlIGhhcyB0byBiZSBwcmVzZW50IGFzIGEgc2VwYXJhdGUgZmlsZSBvciBjb21waWxlZAorCSAqIGludG8ga2VybmVsLiAqLworCW1mY19kZWJ1Z19lbnRlcigpOworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKikmZndfYmxvYiwKKwkJCQkgICAgICJzNXBjMTEwLW1mYy5mdyIsIGRldi0+djRsMl9kZXYuZGV2KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJbWZjX2VycigiRmlybXdhcmUgaXMgbm90IHByZXNlbnQgaW4gdGhlIC9saWIvZmlybXdhcmUgZGlyZWN0b3J5IG5vciBjb21waWxlZCBpbiBrZXJuZWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5md19zaXplID0gQUxJR04oZndfYmxvYi0+c2l6ZSwgRklSTVdBUkVfQUxJR04pOworCWlmIChzNXBfbWZjX2JpdHByb2NfYnVmKSB7CisJCW1mY19lcnIoIkF0dGVtcHRpbmcgdG8gYWxsb2NhdGUgZmlybXdhcmUgd2hlbiBpdCBzZWVtcyB0aGF0IGl0IGlzIGFscmVhZHkgbG9hZGVkXG4iKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19ibG9iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXM1cF9tZmNfYml0cHJvY19idWYgPSB2YjJfZG1hX2NvbnRpZ19tZW1vcHMuYWxsb2MoCisJCWRldi0+YWxsb2NfY3R4W01GQ19CQU5LMV9BTExPQ19DVFhdLCBkZXYtPmZ3X3NpemUpOworCWlmIChJU19FUlIoczVwX21mY19iaXRwcm9jX2J1ZikpIHsKKwkJczVwX21mY19iaXRwcm9jX2J1ZiA9IDA7CisJCW1mY19lcnIoIkFsbG9jYXRpbmcgYml0cHJvY2Vzc29yIGJ1ZmZlciBmYWlsZWRcbiIpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2Jsb2IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJczVwX21mY19iaXRwcm9jX3BoeXMgPSBzNXBfbWZjX21lbV9jb29raWUoCisJCWRldi0+YWxsb2NfY3R4W01GQ19CQU5LMV9BTExPQ19DVFhdLCBzNXBfbWZjX2JpdHByb2NfYnVmKTsKKwlpZiAoczVwX21mY19iaXRwcm9jX3BoeXMgJiAoKDEgPDwgTUZDX0JBU0VfQUxJR05fT1JERVIpIC0gMSkpIHsKKwkJbWZjX2VycigiVGhlIGJhc2UgbWVtb3J5IGZvciBiYW5rIDEgaXMgbm90IGFsaWduZWQgdG8gMTI4S0JcbiIpOworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KHM1cF9tZmNfYml0cHJvY19idWYpOworCQlzNXBfbWZjX2JpdHByb2NfcGh5cyA9IDA7CisJCXM1cF9tZmNfYml0cHJvY19idWYgPSAwOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2Jsb2IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJczVwX21mY19iaXRwcm9jX3ZpcnQgPSB2YjJfZG1hX2NvbnRpZ19tZW1vcHMudmFkZHIoczVwX21mY19iaXRwcm9jX2J1Zik7CisJaWYgKCFzNXBfbWZjX2JpdHByb2NfdmlydCkgeworCQltZmNfZXJyKCJCaXRwcm9jZXNzb3IgbWVtb3J5IHJlbWFwIGZhaWxlZFxuIik7CisJCXZiMl9kbWFfY29udGlnX21lbW9wcy5wdXQoczVwX21mY19iaXRwcm9jX2J1Zik7CisJCXM1cF9tZmNfYml0cHJvY19waHlzID0gMDsKKwkJczVwX21mY19iaXRwcm9jX2J1ZiA9IDA7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfYmxvYik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmJhbmsxID0gczVwX21mY19iaXRwcm9jX3BoeXM7CisJYl9iYXNlID0gdmIyX2RtYV9jb250aWdfbWVtb3BzLmFsbG9jKAorCQlkZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzJfQUxMT0NfQ1RYXSwgMSA8PCBNRkNfQkFOSzJfQUxJR05fT1JERVIpOworCWlmIChJU19FUlIoYl9iYXNlKSkgeworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KHM1cF9tZmNfYml0cHJvY19idWYpOworCQlzNXBfbWZjX2JpdHByb2NfcGh5cyA9IDA7CisJCXM1cF9tZmNfYml0cHJvY19idWYgPSAwOworCQltZmNfZXJyKCJBbGxvY2F0aW5nIGJhbmsyIGJhc2UgZmFpbGVkXG4iKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2Jsb2IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYmFuazJfYmFzZV9waHlzID0gczVwX21mY19tZW1fY29va2llKAorCQlkZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzJfQUxMT0NfQ1RYXSwgYl9iYXNlKTsKKwl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KGJfYmFzZSk7CisJaWYgKGJhbmsyX2Jhc2VfcGh5cyAmICgoMSA8PCBNRkNfQkFTRV9BTElHTl9PUkRFUikgLSAxKSkgeworCQltZmNfZXJyKCJUaGUgYmFzZSBtZW1vcnkgZm9yIGJhbmsgMiBpcyBub3QgYWxpZ25lZCB0byAxMjhLQlxuIik7CisJCXZiMl9kbWFfY29udGlnX21lbW9wcy5wdXQoczVwX21mY19iaXRwcm9jX2J1Zik7CisJCXM1cF9tZmNfYml0cHJvY19waHlzID0gMDsKKwkJczVwX21mY19iaXRwcm9jX2J1ZiA9IDA7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfYmxvYik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmJhbmsyID0gYmFuazJfYmFzZV9waHlzOworCW1lbWNweShzNXBfbWZjX2JpdHByb2NfdmlydCwgZndfYmxvYi0+ZGF0YSwgZndfYmxvYi0+c2l6ZSk7CisJd21iKCk7CisJcmVsZWFzZV9maXJtd2FyZShmd19ibG9iKTsKKwltZmNfZGVidWdfbGVhdmUoKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVsb2FkIGZpcm13YXJlIHRvIE1GQyAqLworaW50IHM1cF9tZmNfcmVsb2FkX2Zpcm13YXJlKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCXN0cnVjdCBmaXJtd2FyZSAqZndfYmxvYjsKKwlpbnQgZXJyOworCisJLyogRmlybWFyZSBoYXMgdG8gYmUgcHJlc2VudCBhcyBhIHNlcGFyYXRlIGZpbGUgb3IgY29tcGlsZWQKKwkgKiBpbnRvIGtlcm5lbC4gKi8KKwltZmNfZGVidWdfZW50ZXIoKTsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKChjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKiopJmZ3X2Jsb2IsCisJCQkJICAgICAiczVwYzExMC1tZmMuZnciLCBkZXYtPnY0bDJfZGV2LmRldik7CisJaWYgKGVyciAhPSAwKSB7CisJCW1mY19lcnIoIkZpcm13YXJlIGlzIG5vdCBwcmVzZW50IGluIHRoZSAvbGliL2Zpcm13YXJlIGRpcmVjdG9yeSBub3IgY29tcGlsZWQgaW4ga2VybmVsXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChmd19ibG9iLT5zaXplID4gZGV2LT5md19zaXplKSB7CisJCW1mY19lcnIoIk1GQyBmaXJtd2FyZSBpcyB0b28gYmlnIHRvIGJlIGxvYWRlZFxuIik7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfYmxvYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoczVwX21mY19iaXRwcm9jX2J1ZiA9PSAwIHx8IHM1cF9tZmNfYml0cHJvY19waHlzID09IDApIHsKKwkJbWZjX2VycigiTUZDIGZpcm13YXJlIGlzIG5vdCBhbGxvY2F0ZWQgb3Igd2FzIG5vdCBtYXBwZWQgY29ycmVjdGx5XG4iKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19ibG9iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1lbWNweShzNXBfbWZjX2JpdHByb2NfdmlydCwgZndfYmxvYi0+ZGF0YSwgZndfYmxvYi0+c2l6ZSk7CisJd21iKCk7CisJcmVsZWFzZV9maXJtd2FyZShmd19ibG9iKTsKKwltZmNfZGVidWdfbGVhdmUoKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVsZWFzZSBmaXJtd2FyZSBtZW1vcnkgKi8KK2ludCBzNXBfbWZjX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpCit7CisJLyogQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbmUgaGFzIHRvIG1ha2Ugc3VyZQorCSAqIHRoYXQgTUZDIGlzIG5vIGxvbmdlciBwcm9jZXNzaW5nICovCisJaWYgKCFzNXBfbWZjX2JpdHByb2NfYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KHM1cF9tZmNfYml0cHJvY19idWYpOworCXM1cF9tZmNfYml0cHJvY192aXJ0ID0gIDA7CisJczVwX21mY19iaXRwcm9jX3BoeXMgPSAwOworCXM1cF9tZmNfYml0cHJvY19idWYgPSAwOworCXJldHVybiAwOworfQorCisvKiBSZXNldCB0aGUgZGV2aWNlICovCitpbnQgczVwX21mY19yZXNldChzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgbWNfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCS8qIFN0b3AgcHJvY2VkdXJlICovCisJLyogIHJlc2V0IFJJU0MgKi8KKwltZmNfd3JpdGUoZGV2LCAweDNmNiwgUzVQX0ZJTVZfU1dfUkVTRVQpOworCS8qICBBbGwgcmVzZXQgZXhjZXB0IGZvciBNQyAqLworCW1mY193cml0ZShkZXYsIDB4M2UyLCBTNVBfRklNVl9TV19SRVNFVCk7CisJbWRlbGF5KDEwKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhNRkNfQldfVElNRU9VVCk7CisJLyogQ2hlY2sgTUMgc3RhdHVzICovCisJZG8geworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJbWZjX2VycigiVGltZW91dCB3aGlsZSByZXNldHRpbmcgTUZDXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJbWNfc3RhdHVzID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9NQ19TVEFUVVMpOworCisJfSB3aGlsZSAobWNfc3RhdHVzICYgMHgzKTsKKworCW1mY193cml0ZShkZXYsIDB4MCwgUzVQX0ZJTVZfU1dfUkVTRVQpOworCW1mY193cml0ZShkZXYsIDB4M2ZlLCBTNVBfRklNVl9TV19SRVNFVCk7CisJbWZjX2RlYnVnX2xlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXBfbWZjX2luaXRfbWVtY3RybChzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwltZmNfd3JpdGUoZGV2LCBkZXYtPmJhbmsxLCBTNVBfRklNVl9NQ19EUkFNQkFTRV9BRFJfQSk7CisJbWZjX3dyaXRlKGRldiwgZGV2LT5iYW5rMiwgUzVQX0ZJTVZfTUNfRFJBTUJBU0VfQURSX0IpOworCW1mY19kZWJ1ZygyLCAiQmFuazE6ICUwOHgsIEJhbmsyOiAlMDh4XG4iLCBkZXYtPmJhbmsxLCBkZXYtPmJhbmsyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHM1cF9tZmNfY2xlYXJfY21kcyhzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwltZmNfd3JpdGUoZGV2LCAweGZmZmZmZmZmLCBTNVBfRklNVl9TSV9DSDBfSU5TVF9JRCk7CisJbWZjX3dyaXRlKGRldiwgMHhmZmZmZmZmZiwgUzVQX0ZJTVZfU0lfQ0gxX0lOU1RfSUQpOworCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX1JJU0MySE9TVF9DTUQpOworCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX0hPU1QyUklTQ19DTUQpOworfQorCisvKiBJbml0aWFsaXplIGhhcmR3YXJlICovCitpbnQgczVwX21mY19pbml0X2h3KHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCB2ZXI7CisJaW50IHJldDsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCWlmICghczVwX21mY19iaXRwcm9jX2J1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiAwLiBNRkMgcmVzZXQgKi8KKwltZmNfZGVidWcoMiwgIk1GQyByZXNldC4uXG4iKTsKKwlzNXBfbWZjX2Nsb2NrX29uKCk7CisJcmV0ID0gczVwX21mY19yZXNldChkZXYpOworCWlmIChyZXQpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIHJlc2V0IE1GQyAtIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltZmNfZGVidWcoMiwgIkRvbmUgTUZDIHJlc2V0Li5cbiIpOworCS8qIDEuIFNldCBEUkFNIGJhc2UgQWRkciAqLworCXM1cF9tZmNfaW5pdF9tZW1jdHJsKGRldik7CisJLyogMi4gSW5pdGlhbGl6ZSByZWdpc3RlcnMgb2YgY2hhbm5lbCBJL0YgKi8KKwlzNXBfbWZjX2NsZWFyX2NtZHMoZGV2KTsKKwkvKiAzLiBSZWxlYXNlIHJlc2V0IHNpZ25hbCB0byB0aGUgUklTQyAqLworCXM1cF9tZmNfY2xlYW5fZGV2X2ludF9mbGFncyhkZXYpOworCW1mY193cml0ZShkZXYsIDB4M2ZmLCBTNVBfRklNVl9TV19SRVNFVCk7CisJbWZjX2RlYnVnKDIsICJXaWxsIG5vdyB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGZpcm13YXJlIHRyYW5zZmVyXG4iKTsKKwlpZiAoczVwX21mY193YWl0X2Zvcl9kb25lX2RldihkZXYsIFM1UF9GSU1WX1IySF9DTURfRldfU1RBVFVTX1JFVCkpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQlzNXBfbWZjX3Jlc2V0KGRldik7CisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJCXJldHVybiAtRUlPOworCX0KKwlzNXBfbWZjX2NsZWFuX2Rldl9pbnRfZmxhZ3MoZGV2KTsKKwkvKiA0LiBJbml0aWFsaXplIGZpcm13YXJlICovCisJcmV0ID0gczVwX21mY19zeXNfaW5pdF9jbWQoZGV2KTsKKwlpZiAocmV0KSB7CisJCW1mY19lcnIoIkZhaWxlZCB0byBzZW5kIGNvbW1hbmQgdG8gTUZDIC0gdGltZW91dFxuIik7CisJCXM1cF9tZmNfcmVzZXQoZGV2KTsKKwkJczVwX21mY19jbG9ja19vZmYoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWZjX2RlYnVnKDIsICJPaywgbm93IHdpbGwgd3JpdGUgYSBjb21tYW5kIHRvIGluaXQgdGhlIHN5c3RlbVxuIik7CisJaWYgKHM1cF9tZmNfd2FpdF9mb3JfZG9uZV9kZXYoZGV2LCBTNVBfRklNVl9SMkhfQ01EX1NZU19JTklUX1JFVCkpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQlzNXBfbWZjX3Jlc2V0KGRldik7CisJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmludF9jb25kID0gMDsKKwlpZiAoZGV2LT5pbnRfZXJyICE9IDAgfHwgZGV2LT5pbnRfdHlwZSAhPQorCQkJCQlTNVBfRklNVl9SMkhfQ01EX1NZU19JTklUX1JFVCkgeworCQkvKiBGYWlsdXJlLiAqLworCQltZmNfZXJyKCJGYWlsZWQgdG8gaW5pdCBmaXJtd2FyZSAtIGVycm9yOiAlZCBpbnQ6ICVkXG4iLAorCQkJCQkJZGV2LT5pbnRfZXJyLCBkZXYtPmludF90eXBlKTsKKwkJczVwX21mY19yZXNldChkZXYpOworCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdmVyID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9GV19WRVJTSU9OKTsKKwltZmNfZGVidWcoMiwgIk1GQyBGL1cgdmVyc2lvbiA6ICUwMnh5eSwgJTAyeG1tLCAlMDJ4ZGRcbiIsCisJCSh2ZXIgPj4gMTYpICYgMHhGRiwgKHZlciA+PiA4KSAmIDB4RkYsIHZlciAmIDB4RkYpOworCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJbWZjX2RlYnVnX2xlYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKKworaW50IHM1cF9tZmNfc2xlZXAoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpCit7CisJaW50IHJldDsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCXM1cF9tZmNfY2xvY2tfb24oKTsKKwlzNXBfbWZjX2NsZWFuX2Rldl9pbnRfZmxhZ3MoZGV2KTsKKwlyZXQgPSBzNXBfbWZjX3NsZWVwX2NtZChkZXYpOworCWlmIChyZXQpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIHNlbmQgY29tbWFuZCB0byBNRkMgLSB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKHM1cF9tZmNfd2FpdF9mb3JfZG9uZV9kZXYoZGV2LCBTNVBfRklNVl9SMkhfQ01EX1NMRUVQX1JFVCkpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIHNsZWVwXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJZGV2LT5pbnRfY29uZCA9IDA7CisJaWYgKGRldi0+aW50X2VyciAhPSAwIHx8IGRldi0+aW50X3R5cGUgIT0KKwkJCQkJCVM1UF9GSU1WX1IySF9DTURfU0xFRVBfUkVUKSB7CisJCS8qIEZhaWx1cmUuICovCisJCW1mY19lcnIoIkZhaWxlZCB0byBzbGVlcCAtIGVycm9yOiAlZCBpbnQ6ICVkXG4iLCBkZXYtPmludF9lcnIsCisJCQkJCQkJCWRldi0+aW50X3R5cGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbWZjX2RlYnVnX2xlYXZlKCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHM1cF9tZmNfd2FrZXVwKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCWludCByZXQ7CisKKwltZmNfZGVidWdfZW50ZXIoKTsKKwkvKiAwLiBNRkMgcmVzZXQgKi8KKwltZmNfZGVidWcoMiwgIk1GQyByZXNldC4uXG4iKTsKKwlzNXBfbWZjX2Nsb2NrX29uKCk7CisJcmV0ID0gczVwX21mY19yZXNldChkZXYpOworCWlmIChyZXQpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIHJlc2V0IE1GQyAtIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwltZmNfZGVidWcoMiwgIkRvbmUgTUZDIHJlc2V0Li5cbiIpOworCS8qIDEuIFNldCBEUkFNIGJhc2UgQWRkciAqLworCXM1cF9tZmNfaW5pdF9tZW1jdHJsKGRldik7CisJLyogMi4gSW5pdGlhbGl6ZSByZWdpc3RlcnMgb2YgY2hhbm5lbCBJL0YgKi8KKwlzNXBfbWZjX2NsZWFyX2NtZHMoZGV2KTsKKwlzNXBfbWZjX2NsZWFuX2Rldl9pbnRfZmxhZ3MoZGV2KTsKKwkvKiAzLiBJbml0aWFsaXplIGZpcm13YXJlICovCisJcmV0ID0gczVwX21mY193YWtldXBfY21kKGRldik7CisJaWYgKHJldCkgeworCQltZmNfZXJyKCJGYWlsZWQgdG8gc2VuZCBjb21tYW5kIHRvIE1GQyAtIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiA0LiBSZWxlYXNlIHJlc2V0IHNpZ25hbCB0byB0aGUgUklTQyAqLworCW1mY193cml0ZShkZXYsIDB4M2ZmLCBTNVBfRklNVl9TV19SRVNFVCk7CisJbWZjX2RlYnVnKDIsICJPaywgbm93IHdpbGwgd3JpdGUgYSBjb21tYW5kIHRvIHdha2V1cCB0aGUgc3lzdGVtXG4iKTsKKwlpZiAoczVwX21mY193YWl0X2Zvcl9kb25lX2RldihkZXYsIFM1UF9GSU1WX1IySF9DTURfV0FLRVVQX1JFVCkpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJczVwX21mY19jbG9ja19vZmYoKTsKKwlkZXYtPmludF9jb25kID0gMDsKKwlpZiAoZGV2LT5pbnRfZXJyICE9IDAgfHwgZGV2LT5pbnRfdHlwZSAhPQorCQkJCQkJUzVQX0ZJTVZfUjJIX0NNRF9XQUtFVVBfUkVUKSB7CisJCS8qIEZhaWx1cmUuICovCisJCW1mY19lcnIoIkZhaWxlZCB0byB3YWtldXAgLSBlcnJvcjogJWQgaW50OiAlZFxuIiwgZGV2LT5pbnRfZXJyLAorCQkJCQkJCQlkZXYtPmludF90eXBlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19jdHJsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19jdHJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkYzIzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2N0cmwuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogbGludXgvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfY3RybC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgUzVQX01GQ19DVFJMX0gKKyNkZWZpbmUgUzVQX01GQ19DVFJMX0gKKworI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisKK2ludCBzNXBfbWZjX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpOworaW50IHM1cF9tZmNfYWxsb2NfYW5kX2xvYWRfZmlybXdhcmUoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpOworaW50IHM1cF9tZmNfcmVsb2FkX2Zpcm13YXJlKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KTsKKworaW50IHM1cF9tZmNfaW5pdF9odyhzdHJ1Y3QgczVwX21mY19kZXYgKmRldik7CisKK2ludCBzNXBfbWZjX3NsZWVwKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KTsKK2ludCBzNXBfbWZjX3dha2V1cChzdHJ1Y3QgczVwX21mY19kZXYgKmRldik7CisKK2ludCBzNXBfbWZjX3Jlc2V0KHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KTsKKworI2VuZGlmIC8qIFM1UF9NRkNfQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19kZWJ1Zy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2I4NjE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZGVidWcuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogZHJpdmVycy9tZWRpYS92aWRlby9zYW1zdW5nL21mYzUvczVwX21mY19kZWJ1Zy5oCisgKgorICogSGVhZGVyIGZpbGUgZm9yIFNhbXN1bmcgTUZDIChNdWx0aSBGdW5jdGlvbiBDb2RlYyAtIEZJTVYpIGRyaXZlcgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlYnVnIG1hY3JvcworICoKKyAqIEthbWlsIERlYnNraSwgQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIGh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFM1UF9NRkNfREVCVUdfSF8KKyNkZWZpbmUgUzVQX01GQ19ERUJVR19IXworCisjZGVmaW5lIERFQlVHCisKKyNpZmRlZiBERUJVRworZXh0ZXJuIGludCBkZWJ1ZzsKKworI2RlZmluZSBtZmNfZGVidWcobGV2ZWwsIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoZGVidWcgPj0gbGV2ZWwpCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczolZDogIiBmbXQsCVwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgbWZjX2RlYnVnKGxldmVsLCBmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBtZmNfZGVidWdfZW50ZXIoKSBtZmNfZGVidWcoNSwgImVudGVyIikKKyNkZWZpbmUgbWZjX2RlYnVnX2xlYXZlKCkgbWZjX2RlYnVnKDUsICJsZWF2ZSIpCisKKyNkZWZpbmUgbWZjX2VycihmbXQsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkOiAiIGZtdCwJCVwKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbWZjX2luZm8oZm10LCBhcmdzLi4uKQkJCQlcCisJZG8gewkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JWQ6ICIgZm10LAkJXAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpOwlcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIFM1UF9NRkNfREVCVUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2RlYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjNTA1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2RlYy5jCkBAIC0wLDAgKzEsMTAzNiBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2RlYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqIEthbWlsIERlYnNraSwgPGsuZGVic2tpQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItY29yZS5oPgorI2luY2x1ZGUgInJlZ3MtbWZjLmgiCisjaW5jbHVkZSAiczVwX21mY19jb21tb24uaCIKKyNpbmNsdWRlICJzNXBfbWZjX2RlYnVnLmgiCisjaW5jbHVkZSAiczVwX21mY19kZWMuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2ludHIuaCIKKyNpbmNsdWRlICJzNXBfbWZjX29wci5oIgorI2luY2x1ZGUgInM1cF9tZmNfcG0uaCIKKyNpbmNsdWRlICJzNXBfbWZjX3NobS5oIgorCitzdGF0aWMgc3RydWN0IHM1cF9tZmNfZm10IGZvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICI0OjI6MCAyIFBsYW5lcyA2NHgzMiBUaWxlcyIsCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX05WMTJNVCwKKwkJLmNvZGVjX21vZGUJPSBTNVBfRklNVl9DT0RFQ19OT05FLAorCQkudHlwZQkJPSBNRkNfRk1UX1JBVywKKwkJLm51bV9wbGFuZXMJPSAyLAorCSB9LAorCXsKKwkJLm5hbWUgPSAiNDoyOjAgMiBQbGFuZXMiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTJNLAorCQkuY29kZWNfbW9kZSA9IFM1UF9GSU1WX0NPREVDX05PTkUsCisJCS50eXBlID0gTUZDX0ZNVF9SQVcsCisJCS5udW1fcGxhbmVzID0gMiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiSDI2NCBFbmNvZGVkIFN0cmVhbSIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfSDI2NCwKKwkJLmNvZGVjX21vZGUgPSBTNVBfRklNVl9DT0RFQ19IMjY0X0RFQywKKwkJLnR5cGUgPSBNRkNfRk1UX0RFQywKKwkJLm51bV9wbGFuZXMgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJIMjYzIEVuY29kZWQgU3RyZWFtIiwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9IMjYzLAorCQkuY29kZWNfbW9kZSA9IFM1UF9GSU1WX0NPREVDX0gyNjNfREVDLAorCQkudHlwZSA9IE1GQ19GTVRfREVDLAorCQkubnVtX3BsYW5lcyA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIk1QRUcxIEVuY29kZWQgU3RyZWFtIiwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9NUEVHMSwKKwkJLmNvZGVjX21vZGUgPSBTNVBfRklNVl9DT0RFQ19NUEVHMl9ERUMsCisJCS50eXBlID0gTUZDX0ZNVF9ERUMsCisJCS5udW1fcGxhbmVzID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTVBFRzIgRW5jb2RlZCBTdHJlYW0iLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX01QRUcyLAorCQkuY29kZWNfbW9kZSA9IFM1UF9GSU1WX0NPREVDX01QRUcyX0RFQywKKwkJLnR5cGUgPSBNRkNfRk1UX0RFQywKKwkJLm51bV9wbGFuZXMgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJNUEVHNCBFbmNvZGVkIFN0cmVhbSIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzQsCisJCS5jb2RlY19tb2RlID0gUzVQX0ZJTVZfQ09ERUNfTVBFRzRfREVDLAorCQkudHlwZSA9IE1GQ19GTVRfREVDLAorCQkubnVtX3BsYW5lcyA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIlh2aUQgRW5jb2RlZCBTdHJlYW0iLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1hWSUQsCisJCS5jb2RlY19tb2RlID0gUzVQX0ZJTVZfQ09ERUNfTVBFRzRfREVDLAorCQkudHlwZSA9IE1GQ19GTVRfREVDLAorCQkubnVtX3BsYW5lcyA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIlZDMSBFbmNvZGVkIFN0cmVhbSIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0csCisJCS5jb2RlY19tb2RlID0gUzVQX0ZJTVZfQ09ERUNfVkMxX0RFQywKKwkJLnR5cGUgPSBNRkNfRk1UX0RFQywKKwkJLm51bV9wbGFuZXMgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJWQzEgUkNWIEVuY29kZWQgU3RyZWFtIiwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfTCwKKwkJLmNvZGVjX21vZGUgPSBTNVBfRklNVl9DT0RFQ19WQzFSQ1ZfREVDLAorCQkudHlwZSA9IE1GQ19GTVRfREVDLAorCQkubnVtX3BsYW5lcyA9IDEsCisJfSwKK307CisKKyNkZWZpbmUgTlVNX0ZPUk1BVFMgQVJSQVlfU0laRShmb3JtYXRzKQorCisvKiBGaW5kIHNlbGVjdGVkIGZvcm1hdCBkZXNjcmlwdGlvbiAqLworc3RhdGljIHN0cnVjdCBzNXBfbWZjX2ZtdCAqZmluZF9mb3JtYXQoc3RydWN0IHY0bDJfZm9ybWF0ICpmLCB1bnNpZ25lZCBpbnQgdCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCWlmIChmb3JtYXRzW2ldLmZvdXJjYyA9PSBmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0ICYmCisJCSAgICBmb3JtYXRzW2ldLnR5cGUgPT0gdCkKKwkJCXJldHVybiAmZm9ybWF0c1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NvbnRyb2wgY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fREVDT0RFUl9IMjY0X0RJU1BMQVlfREVMQVksCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiSDI2NCBEaXNwbGF5IERlbGF5IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDE2MzgzLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWV9FTkFCTEUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgPSAiSDI2NCBEaXNwbGF5IERlbGF5IEVuYWJsZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX01QRUc0X0RFQkxPQ0tfRklMVEVSLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lID0gIk1wZWc0IExvb3AgRmlsdGVyIEVuYWJsZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX1NMSUNFX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSA9ICJTbGljZSBJbnRlcmZhY2UgRW5hYmxlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfQ0FQVFVSRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJNaW5pbXVtIG51bWJlciBvZiBjYXAgYnVmcyIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS5pc192b2xhdGlsZSA9IDEsCisJfSwKK307CisKKyNkZWZpbmUgTlVNX0NUUkxTIEFSUkFZX1NJWkUoY29udHJvbHMpCisKKy8qIENoZWNrIHdoZXRoZXIgYSBjb250ZXh0IHNob3VsZCBiZSBydW4gb24gaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgczVwX21mY19jdHhfcmVhZHkoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJLyogQ29udGV4dCBpcyB0byBwYXJzZSBoZWFkZXIgKi8KKwlpZiAoY3R4LT5zcmNfcXVldWVfY250ID49IDEgJiYgY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX0dPVF9JTlNUKQorCQlyZXR1cm4gMTsKKwkvKiBDb250ZXh0IGlzIHRvIGRlY29kZSBhIGZyYW1lICovCisJaWYgKGN0eC0+c3JjX3F1ZXVlX2NudCA+PSAxICYmCisJICAgIGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9SVU5OSU5HICYmCisJICAgIGN0eC0+ZHN0X3F1ZXVlX2NudCA+PSBjdHgtPmRwYl9jb3VudCkKKwkJcmV0dXJuIDE7CisJLyogQ29udGV4dCBpcyB0byByZXR1cm4gbGFzdCBmcmFtZSAqLworCWlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfRklOSVNISU5HICYmCisJICAgIGN0eC0+ZHN0X3F1ZXVlX2NudCA+PSBjdHgtPmRwYl9jb3VudCkKKwkJcmV0dXJuIDE7CisJLyogQ29udGV4dCBpcyB0byBzZXQgYnVmZmVycyAqLworCWlmIChjdHgtPnNyY19xdWV1ZV9jbnQgPj0gMSAmJgorCSAgICBjdHgtPnN0YXRlID09IE1GQ0lOU1RfSEVBRF9QQVJTRUQgJiYKKwkgICAgY3R4LT5jYXB0dXJlX3N0YXRlID09IFFVRVVFX0JVRlNfTU1BUEVEKQorCQlyZXR1cm4gMTsKKwkvKiBSZXNvbHV0aW9uIGNoYW5nZSAqLworCWlmICgoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX1JFU19DSEFOR0VfSU5JVCB8fAorCQljdHgtPnN0YXRlID09IE1GQ0lOU1RfUkVTX0NIQU5HRV9GTFVTSCkgJiYKKwkJY3R4LT5kc3RfcXVldWVfY250ID49IGN0eC0+ZHBiX2NvdW50KQorCQlyZXR1cm4gMTsKKwlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX1JFU19DSEFOR0VfRU5EICYmCisJCWN0eC0+c3JjX3F1ZXVlX2NudCA+PSAxKQorCQlyZXR1cm4gMTsKKwltZmNfZGVidWcoMiwgImN0eCBpcyBub3QgcmVhZHlcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHM1cF9tZmNfY29kZWNfb3BzIGRlY29kZXJfY29kZWNfb3BzID0geworCS5wcmVfc2VxX3N0YXJ0CQk9IE5VTEwsCisJLnBvc3Rfc2VxX3N0YXJ0CQk9IE5VTEwsCisJLnByZV9mcmFtZV9zdGFydAk9IE5VTEwsCisJLnBvc3RfZnJhbWVfc3RhcnQJPSBOVUxMLAorfTsKKworLyogUXVlcnkgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGRldi0+cGxhdF9kZXYtPm5hbWUsIHNpemVvZihjYXAtPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGNhcC0+Y2FyZCwgZGV2LT5wbGF0X2Rldi0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkgLSAxKTsKKwljYXAtPmJ1c19pbmZvWzBdID0gMDsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigxLCAwLCAwKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9WSURFT19PVVRQVVQKKwkJCQkJCSAgICB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKKwlyZXR1cm4gMDsKK30KKworLyogRW51bWVyYXRlIGZvcm1hdCAqLworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXQoc3RydWN0IHY0bDJfZm10ZGVzYyAqZiwgYm9vbCBtcGxhbmUsIGJvb2wgb3V0KQoreworCXN0cnVjdCBzNXBfbWZjX2ZtdCAqZm10OworCWludCBpLCBqID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHMpOyArK2kpIHsKKwkJaWYgKG1wbGFuZSAmJiBmb3JtYXRzW2ldLm51bV9wbGFuZXMgPT0gMSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmICghbXBsYW5lICYmIGZvcm1hdHNbaV0ubnVtX3BsYW5lcyA+IDEpCisJCQljb250aW51ZTsKKwkJaWYgKG91dCAmJiBmb3JtYXRzW2ldLnR5cGUgIT0gTUZDX0ZNVF9ERUMpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoIW91dCAmJiBmb3JtYXRzW2ldLnR5cGUgIT0gTUZDX0ZNVF9SQVcpCisJCQljb250aW51ZTsKKworCQlpZiAoaiA9PSBmLT5pbmRleCkKKwkJCWJyZWFrOworCQkrK2o7CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoZm9ybWF0cykpCisJCXJldHVybiAtRUlOVkFMOworCWZtdCA9ICZmb3JtYXRzW2ldOworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZtdC0+bmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcGlydiwKKwkJCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXJldHVybiB2aWRpb2NfZW51bV9mbXQoZiwgZmFsc2UsIGZhbHNlKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBpcnYsCisJCQkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlyZXR1cm4gdmlkaW9jX2VudW1fZm10KGYsIHRydWUsIGZhbHNlKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJvdiwKKwkJCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXJldHVybiB2aWRpb2NfZW51bV9mbXQoZiwgZmFsc2UsIHRydWUpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJvdiwKKwkJCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXJldHVybiB2aWRpb2NfZW51bV9mbXQoZiwgdHJ1ZSwgdHJ1ZSk7Cit9CisKKy8qIEdldCBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcDsKKworCW1mY19kZWJ1Z19lbnRlcigpOworCXBpeF9tcCA9ICZmLT5mbXQucGl4X21wOworCWlmIChmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgJiYKKwkgICAgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9HT1RfSU5TVCB8fCBjdHgtPnN0YXRlID09CisJCQkJCQlNRkNJTlNUX1JFU19DSEFOR0VfRU5EKSkgeworCQkvKiBJZiB0aGUgTUZDIGlzIHBhcnNpbmcgdGhlIGhlYWRlciwKKwkJICogc28gd2FpdCB1bnRpbCBpdCBpcyBmaW5pc2hlZCAqLworCQlzNXBfbWZjX2NsZWFuX2N0eF9pbnRfZmxhZ3MoY3R4KTsKKwkJczVwX21mY193YWl0X2Zvcl9kb25lX2N0eChjdHgsIFM1UF9GSU1WX1IySF9DTURfU0VRX0RPTkVfUkVULAorCQkJCQkJCQkJMCk7CisJfQorCWlmIChmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgJiYKKwkgICAgY3R4LT5zdGF0ZSA+PSBNRkNJTlNUX0hFQURfUEFSU0VEICYmCisJICAgIGN0eC0+c3RhdGUgPCBNRkNJTlNUX0FCT1JUKSB7CisJCS8qIFRoaXMgaXMgcnVuIG9uIENBUFRVUkUgKGRlY29kZSBvdXRwdXQpICovCisJCS8qIFdpZHRoIGFuZCBoZWlnaHQgYXJlIHNldCB0byB0aGUgZGltZW5zaW9ucworCQkgICBvZiB0aGUgbW92aWUsIHRoZSBidWZmZXIgaXMgYmlnZ2VyIGFuZAorCQkgICBmdXJ0aGVyIHByb2Nlc3Npbmcgc3RhZ2VzIHNob3VsZCBjcm9wIHRvIHRoaXMKKwkJICAgcmVjdGFuZ2xlLiAqLworCQlwaXhfbXAtPndpZHRoID0gY3R4LT5idWZfd2lkdGg7CisJCXBpeF9tcC0+aGVpZ2h0ID0gY3R4LT5idWZfaGVpZ2h0OworCQlwaXhfbXAtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlwaXhfbXAtPm51bV9wbGFuZXMgPSAyOworCQkvKiBTZXQgcGl4ZWxmb3JtYXQgdG8gdGhlIGZvcm1hdCBpbiB3aGljaCBNRkMKKwkJICAgb3V0cHV0cyB0aGUgZGVjb2RlZCBmcmFtZSAqLworCQlwaXhfbXAtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX05WMTJNVDsKKwkJcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5idWZfd2lkdGg7CisJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGN0eC0+bHVtYV9zaXplOworCQlwaXhfbXAtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsKKwkJcGl4X21wLT5wbGFuZV9mbXRbMV0uc2l6ZWltYWdlID0gY3R4LT5jaHJvbWFfc2l6ZTsKKwl9IGVsc2UgaWYgKGYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCS8qIFRoaXMgaXMgcnVuIG9uIE9VVFBVVAorCQkgICBUaGUgYnVmZmVyIGNvbnRhaW5zIGNvbXByZXNzZWQgaW1hZ2UKKwkJICAgc28gd2lkdGggYW5kIGhlaWdodCBoYXZlIG5vIG1lYW5pbmcgKi8KKwkJcGl4X21wLT53aWR0aCA9IDA7CisJCXBpeF9tcC0+aGVpZ2h0ID0gMDsKKwkJcGl4X21wLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5kZWNfc3JjX2J1Zl9zaXplOworCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPSBjdHgtPmRlY19zcmNfYnVmX3NpemU7CisJCXBpeF9tcC0+cGl4ZWxmb3JtYXQgPSBjdHgtPnNyY19mbXQtPmZvdXJjYzsKKwkJcGl4X21wLT5udW1fcGxhbmVzID0gY3R4LT5zcmNfZm10LT5udW1fcGxhbmVzOworCX0gZWxzZSB7CisJCW1mY19lcnIoIkZvcm1hdCBjb3VsZCBub3QgYmUgcmVhZFxuIik7CisJCW1mY19kZWJ1ZygyLCAiJXMtLSB3aXRoIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltZmNfZGVidWdfbGVhdmUoKTsKKwlyZXR1cm4gMDsKK30KKworLyogVHJ5IGZvcm1hdCAqLworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzNXBfbWZjX2ZtdCAqZm10OworCisJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCW1mY19lcnIoIlRoaXMgbm9kZSBzdXBwb3J0cyBkZWNvZGluZyBvbmx5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZtdCA9IGZpbmRfZm9ybWF0KGYsIE1GQ19GTVRfREVDKTsKKwlpZiAoIWZtdCkgeworCQltZmNfZXJyKCJVbnN1cHBvcnRlZCBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGZtdC0+dHlwZSAhPSBNRkNfRk1UX0RFQykgeworCQltZmNfZXJyKCJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBmb3JtYXQgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCWludCByZXQgPSAwOworCXN0cnVjdCBzNXBfbWZjX2ZtdCAqZm10OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXA7CisKKwltZmNfZGVidWdfZW50ZXIoKTsKKwlyZXQgPSB2aWRpb2NfdHJ5X2ZtdChmaWxlLCBwcml2LCBmKTsKKwlwaXhfbXAgPSAmZi0+Zm10LnBpeF9tcDsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChjdHgtPnZxX3NyYy5zdHJlYW1pbmcgfHwgY3R4LT52cV9kc3Quc3RyZWFtaW5nKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwlmbXQgPSBmaW5kX2Zvcm1hdChmLCBNRkNfRk1UX0RFQyk7CisJaWYgKCFmbXQgfHwgZm10LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX05PTkUpIHsKKwkJbWZjX2VycigiVW5rbm93biBjb2RlY1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZm10LT50eXBlICE9IE1GQ19GTVRfREVDKSB7CisJCW1mY19lcnIoIldyb25nIGZvcm1hdCBzZWxlY3RlZCwgeW91IHNob3VsZCBjaG9vc2UgIgorCQkJCQkiZm9ybWF0IGZvciBkZWNvZGluZ1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwljdHgtPnNyY19mbXQgPSBmbXQ7CisJY3R4LT5jb2RlY19tb2RlID0gZm10LT5jb2RlY19tb2RlOworCW1mY19kZWJ1ZygyLCAiVGhlIGNvZGVjIG51bWJlciBpczogJWRcbiIsIGN0eC0+Y29kZWNfbW9kZSk7CisJcGl4X21wLT5oZWlnaHQgPSAwOworCXBpeF9tcC0+d2lkdGggPSAwOworCWlmIChwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UpCisJCWN0eC0+ZGVjX3NyY19idWZfc2l6ZSA9IHBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZTsKKwllbHNlCisJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGN0eC0+ZGVjX3NyY19idWZfc2l6ZSA9CisJCQkJCQkJCURFRl9DUEJfU0laRTsKKwlwaXhfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSAwOworCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0lOSVQ7CitvdXQ6CisJbWZjX2RlYnVnX2xlYXZlKCk7CisJcmV0dXJuIHJldDsKK30KKworLyogUmVxZXVzdCBidWZmZXJzICovCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQkgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXFidWZzKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChwcml2KTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHJlcWJ1ZnMtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCW1mY19lcnIoIk9ubHkgVjRMMl9NRU1PUllfTUFQIGlzIHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmVxYnVmcy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJLyogQ2FuIG9ubHkgcmVxdWVzdCBidWZmZXJzIGFmdGVyIGFuIGluc3RhbmNlIGhhcyBiZWVuIG9wZW5lZC4qLworCQlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX0lOSVQpIHsKKwkJCWN0eC0+c3JjX2J1ZnNfY250ID0gMDsKKwkJCWlmIChyZXFidWZzLT5jb3VudCA9PSAwKSB7CisJCQkJbWZjX2RlYnVnKDIsICJGcmVlaW5nIGJ1ZmZlcnNcbiIpOworCQkJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJCQlyZXQgPSB2YjJfcmVxYnVmcygmY3R4LT52cV9zcmMsIHJlcWJ1ZnMpOworCQkJCXM1cF9tZmNfY2xvY2tfb2ZmKCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCS8qIERlY29kaW5nICovCisJCQlpZiAoY3R4LT5vdXRwdXRfc3RhdGUgIT0gUVVFVUVfRlJFRSkgeworCQkJCW1mY19lcnIoIkJ1ZnMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJCXJldCA9IHZiMl9yZXFidWZzKCZjdHgtPnZxX3NyYywgcmVxYnVmcyk7CisJCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQkJaWYgKHJldCkgeworCQkJCW1mY19lcnIoInZiMl9yZXFidWZzIG9uIG91dHB1dCBmYWlsZWRcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQltZmNfZGVidWcoMiwgInZiMl9yZXFidWZzOiAlZFxuIiwgcmV0KTsKKwkJCWN0eC0+b3V0cHV0X3N0YXRlID0gUVVFVUVfQlVGU19SRVFVRVNURUQ7CisJCX0KKwl9IGVsc2UgaWYgKHJlcWJ1ZnMtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQljdHgtPmRzdF9idWZzX2NudCA9IDA7CisJCWlmIChyZXFidWZzLT5jb3VudCA9PSAwKSB7CisJCQltZmNfZGVidWcoMiwgIkZyZWVpbmcgYnVmZmVyc1xuIik7CisJCQlzNXBfbWZjX2Nsb2NrX29uKCk7CisJCQlyZXQgPSB2YjJfcmVxYnVmcygmY3R4LT52cV9kc3QsIHJlcWJ1ZnMpOworCQkJczVwX21mY19jbG9ja19vZmYoKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKGN0eC0+Y2FwdHVyZV9zdGF0ZSAhPSBRVUVVRV9GUkVFKSB7CisJCQltZmNfZXJyKCJCdWZzIGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9CVUZTX1JFUVVFU1RFRDsKKwkJczVwX21mY19jbG9ja19vbigpOworCQlyZXQgPSB2YjJfcmVxYnVmcygmY3R4LT52cV9kc3QsIHJlcWJ1ZnMpOworCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQlpZiAocmV0KSB7CisJCQltZmNfZXJyKCJ2YjJfcmVxYnVmcyBvbiBjYXB0dXJlIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChyZXFidWZzLT5jb3VudCA8IGN0eC0+ZHBiX2NvdW50KSB7CisJCQltZmNfZXJyKCJOb3QgZW5vdWdoIGJ1ZmZlcnMgYWxsb2NhdGVkXG4iKTsKKwkJCXJlcWJ1ZnMtPmNvdW50ID0gMDsKKwkJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJCXJldCA9IHZiMl9yZXFidWZzKCZjdHgtPnZxX2RzdCwgcmVxYnVmcyk7CisJCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY3R4LT50b3RhbF9kcGJfY291bnQgPSByZXFidWZzLT5jb3VudDsKKwkJcmV0ID0gczVwX21mY19hbGxvY19jb2RlY19idWZmZXJzKGN0eCk7CisJCWlmIChyZXQpIHsKKwkJCW1mY19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkZWNvZGluZyBidWZmZXJzXG4iKTsKKwkJCXJlcWJ1ZnMtPmNvdW50ID0gMDsKKwkJCXM1cF9tZmNfY2xvY2tfb24oKTsKKwkJCXJldCA9IHZiMl9yZXFidWZzKCZjdHgtPnZxX2RzdCwgcmVxYnVmcyk7CisJCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKGN0eC0+ZHN0X2J1ZnNfY250ID09IGN0eC0+dG90YWxfZHBiX2NvdW50KSB7CisJCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9CVUZTX01NQVBFRDsKKwkJfSBlbHNlIHsKKwkJCW1mY19lcnIoIk5vdCBhbGwgYnVmZmVycyBwYXNzZWQgdG8gYnVmX2luaXRcbiIpOworCQkJcmVxYnVmcy0+Y291bnQgPSAwOworCQkJczVwX21mY19jbG9ja19vbigpOworCQkJcmV0ID0gdmIyX3JlcWJ1ZnMoJmN0eC0+dnFfZHN0LCByZXFidWZzKTsKKwkJCXM1cF9tZmNfcmVsZWFzZV9jb2RlY19idWZmZXJzKGN0eCk7CisJCQlzNXBfbWZjX2Nsb2NrX29mZigpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKHM1cF9tZmNfY3R4X3JlYWR5KGN0eCkpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvbmRsb2NrLCBmbGFncyk7CisJCQlzZXRfYml0KGN0eC0+bnVtLCAmZGV2LT5jdHhfd29ya19iaXRzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJfQorCQlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKKwkJczVwX21mY193YWl0X2Zvcl9kb25lX2N0eChjdHgsCisJCQkJCSBTNVBfRklNVl9SMkhfQ01EX0lOSVRfQlVGRkVSU19SRVQsIDApOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBRdWVyeSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCW1mY19lcnIoIk9ubHkgbW1hcGVkIGJ1ZmZlcnMgY2FuIGJlIHVzZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbWZjX2RlYnVnKDIsICJTdGF0ZTogJWQsIGJ1Zi0+dHlwZTogJWRcbiIsIGN0eC0+c3RhdGUsIGJ1Zi0+dHlwZSk7CisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9JTklUICYmCisJCQlidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCXJldCA9IHZiMl9xdWVyeWJ1ZigmY3R4LT52cV9zcmMsIGJ1Zik7CisJfSBlbHNlIGlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfUlVOTklORyAmJgorCQkJYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKKwkJcmV0ID0gdmIyX3F1ZXJ5YnVmKCZjdHgtPnZxX2RzdCwgYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi0+bGVuZ3RoOyBpKyspCisJCQlidWYtPm0ucGxhbmVzW2ldLm0ubWVtX29mZnNldCArPSBEU1RfUVVFVUVfT0ZGX0JBU0U7CisJfSBlbHNlIHsKKwkJbWZjX2VycigidmlkaW9jX3F1ZXJ5YnVmIGNhbGxlZCBpbiBhbiBpbmFwcHJvcHJpYXRlIHN0YXRlXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJbWZjX2RlYnVnX2xlYXZlKCk7CisJcmV0dXJuIHJldDsKK30KKworLyogUXVldWUgYSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9FUlJPUikgeworCQltZmNfZXJyKCJDYWxsIG9uIFFCVUYgYWZ0ZXIgdW5yZWNvdmVyYWJsZSBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkKKwkJcmV0dXJuIHZiMl9xYnVmKCZjdHgtPnZxX3NyYywgYnVmKTsKKwllbHNlIGlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkKKwkJcmV0dXJuIHZiMl9xYnVmKCZjdHgtPnZxX2RzdCwgYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogRGVxdWV1ZSBhIGJ1ZmZlciAqLworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9FUlJPUikgeworCQltZmNfZXJyKCJDYWxsIG9uIERRQlVGIGFmdGVyIHVucmVjb3ZlcmFibGUgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCisJCXJldHVybiB2YjJfZHFidWYoJmN0eC0+dnFfc3JjLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwllbHNlIGlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkKKwkJcmV0dXJuIHZiMl9kcWJ1ZigmY3R4LT52cV9kc3QsIGJ1ZiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBTdHJlYW0gb24gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJbWZjX2RlYnVnX2VudGVyKCk7CisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisKKwkJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9JTklUKSB7CisJCQljdHgtPmRzdF9idWZzX2NudCA9IDA7CisJCQljdHgtPnNyY19idWZzX2NudCA9IDA7CisJCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9GUkVFOworCQkJY3R4LT5vdXRwdXRfc3RhdGUgPSBRVUVVRV9GUkVFOworCQkJczVwX21mY19hbGxvY19pbnN0YW5jZV9idWZmZXIoY3R4KTsKKwkJCXM1cF9tZmNfYWxsb2NfZGVjX3RlbXBfYnVmZmVycyhjdHgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJCXNldF9iaXQoY3R4LT5udW0sICZkZXYtPmN0eF93b3JrX2JpdHMpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCQkJczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKGN0eCk7CisJCQlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKKworCQkJaWYgKHM1cF9tZmNfd2FpdF9mb3JfZG9uZV9jdHgoY3R4LAorCQkJCVM1UF9GSU1WX1IySF9DTURfT1BFTl9JTlNUQU5DRV9SRVQsIDApKSB7CisJCQkJLyogRXJyb3Igb3IgdGltZW91dCAqLworCQkJCW1mY19lcnIoIkVycm9yIGdldHRpbmcgaW5zdGFuY2UgZnJvbSBoYXJkd2FyZVxuIik7CisJCQkJczVwX21mY19yZWxlYXNlX2luc3RhbmNlX2J1ZmZlcihjdHgpOworCQkJCXM1cF9tZmNfcmVsZWFzZV9kZWNfZGVzY19idWZmZXIoY3R4KTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCW1mY19kZWJ1ZygyLCAiR290IGluc3RhbmNlIG51bWJlcjogJWRcbiIsIGN0eC0+aW5zdF9ubyk7CisJCX0KKwkJcmV0ID0gdmIyX3N0cmVhbW9uKCZjdHgtPnZxX3NyYywgdHlwZSk7CisJCX0KKwllbHNlIGlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpCisJCXJldCA9IHZiMl9zdHJlYW1vbigmY3R4LT52cV9kc3QsIHR5cGUpOworCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFN0cmVhbSBvZmYsIHdoaWNoIGVxdWFscyB0byBhIHBhdXNlICovCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCisJCXJldHVybiB2YjJfc3RyZWFtb2ZmKCZjdHgtPnZxX3NyYywgdHlwZSk7CisJZWxzZSBpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKQorCQlyZXR1cm4gdmIyX3N0cmVhbW9mZigmY3R4LT52cV9kc3QsIHR5cGUpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBTZXQgY29udHJvbHMgLSB2NGwyIGNvbnRyb2wgZnJhbWV3b3JrICovCitzdGF0aWMgaW50IHM1cF9tZmNfZGVjX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gY3RybF90b19jdHgoY3RybCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZOgorCQljdHgtPmxvb3BfZmlsdGVyX21wZWc0ID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fREVDT0RFUl9IMjY0X0RJU1BMQVlfREVMQVlfRU5BQkxFOgorCQljdHgtPmRpc3BsYXlfZGVsYXlfZW5hYmxlID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9NUEVHNF9ERUJMT0NLX0ZJTFRFUjoKKwkJY3R4LT5kaXNwbGF5X2RlbGF5ID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9TTElDRV9JTlRFUkZBQ0U6CisJCWN0eC0+c2xpY2VfaW50ZXJmYWNlID0gY3RybC0+dmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZmNfZXJyKCJJbnZhbGlkIGNvbnRyb2wgMHglMDh4XG4iLCBjdHJsLT5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfbWZjX2RlY19nX3ZfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gY3RybF90b19jdHgoY3RybCk7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9DQVBUVVJFOgorCQlpZiAoY3R4LT5zdGF0ZSA+PSBNRkNJTlNUX0hFQURfUEFSU0VEICYmCisJCSAgICBjdHgtPnN0YXRlIDwgTUZDSU5TVF9BQk9SVCkgeworCQkJY3RybC0+dmFsID0gY3R4LT5kcGJfY291bnQ7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChjdHgtPnN0YXRlICE9IE1GQ0lOU1RfSU5JVCkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJEZWNvZGluZyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogU2hvdWxkIHdhaXQgZm9yIHRoZSBoZWFkZXIgdG8gYmUgcGFyc2VkICovCisJCXM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhjdHgpOworCQlzNXBfbWZjX3dhaXRfZm9yX2RvbmVfY3R4KGN0eCwKKwkJCQlTNVBfRklNVl9SMkhfQ01EX1NFUV9ET05FX1JFVCwgMCk7CisJCWlmIChjdHgtPnN0YXRlID49IE1GQ0lOU1RfSEVBRF9QQVJTRUQgJiYKKwkJICAgIGN0eC0+c3RhdGUgPCBNRkNJTlNUX0FCT1JUKSB7CisJCQljdHJsLT52YWwgPSBjdHgtPmRwYl9jb3VudDsKKwkJfSBlbHNlIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiRGVjb2Rpbmcgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgczVwX21mY19kZWNfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IHM1cF9tZmNfZGVjX3NfY3RybCwKKwkuZ192b2xhdGlsZV9jdHJsID0gczVwX21mY19kZWNfZ192X2N0cmwsCit9OworCisvKiBHZXQgY3JvcHBpbmcgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3IpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJdTMyIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTsKKworCWlmIChjdHgtPnN0YXRlICE9IE1GQ0lOU1RfSEVBRF9QQVJTRUQgJiYKKwljdHgtPnN0YXRlICE9IE1GQ0lOU1RfUlVOTklORyAmJiBjdHgtPnN0YXRlICE9IE1GQ0lOU1RfRklOSVNISU5HCisJCQkJCSYmIGN0eC0+c3RhdGUgIT0gTUZDSU5TVF9GSU5JU0hFRCkgeworCQkJbWZjX2VycigiQ2Fubm9udCBzZXQgY3JvcFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCWlmIChjdHgtPnNyY19mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfSDI2NCkgeworCQlsZWZ0ID0gczVwX21mY19yZWFkX3NobShjdHgsIENST1BfSU5GT19IKTsKKwkJcmlnaHQgPSBsZWZ0ID4+IFM1UF9GSU1WX1NIQVJFRF9DUk9QX1JJR0hUX1NISUZUOworCQlsZWZ0ID0gbGVmdCAmIFM1UF9GSU1WX1NIQVJFRF9DUk9QX0xFRlRfTUFTSzsKKwkJdG9wID0gczVwX21mY19yZWFkX3NobShjdHgsIENST1BfSU5GT19WKTsKKwkJYm90dG9tID0gdG9wID4+IFM1UF9GSU1WX1NIQVJFRF9DUk9QX0JPVFRPTV9TSElGVDsKKwkJdG9wID0gdG9wICYgUzVQX0ZJTVZfU0hBUkVEX0NST1BfVE9QX01BU0s7CisJCWNyLT5jLmxlZnQgPSBsZWZ0OworCQljci0+Yy50b3AgPSB0b3A7CisJCWNyLT5jLndpZHRoID0gY3R4LT5pbWdfd2lkdGggLSBsZWZ0IC0gcmlnaHQ7CisJCWNyLT5jLmhlaWdodCA9IGN0eC0+aW1nX2hlaWdodCAtIHRvcCAtIGJvdHRvbTsKKwkJbWZjX2RlYnVnKDIsICJDcm9wcGluZyBpbmZvIFtoMjY0XTogbD0lZCB0PSVkICIKKwkJCSJ3PSVkIGg9JWQgKHI9JWQgYj0lZCBmdz0lZCBmaD0lZFxuIiwgbGVmdCwgdG9wLAorCQkJY3ItPmMud2lkdGgsIGNyLT5jLmhlaWdodCwgcmlnaHQsIGJvdHRvbSwKKwkJCWN0eC0+YnVmX3dpZHRoLCBjdHgtPmJ1Zl9oZWlnaHQpOworCX0gZWxzZSB7CisJCWNyLT5jLmxlZnQgPSAwOworCQljci0+Yy50b3AgPSAwOworCQljci0+Yy53aWR0aCA9IGN0eC0+aW1nX3dpZHRoOworCQljci0+Yy5oZWlnaHQgPSBjdHgtPmltZ19oZWlnaHQ7CisJCW1mY19kZWJ1ZygyLCAiQ3JvcHBpbmcgaW5mbzogdz0lZCBoPSVkIGZ3PSVkICIKKwkJCSJmaD0lZFxuIiwgY3ItPmMud2lkdGgsCWNyLT5jLmhlaWdodCwgY3R4LT5idWZfd2lkdGgsCisJCQkJCQkJY3R4LT5idWZfaGVpZ2h0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHY0bDJfaW9jdGxfb3BzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHM1cF9tZmNfZGVjX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0ID0gdmlkaW9jX2VudW1fZm10X3ZpZF9vdXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZSA9IHZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZSwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXBfbXBsYW5lID0gdmlkaW9jX2dfZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX291dF9tcGxhbmUgPSB2aWRpb2NfZ19mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXBfbXBsYW5lID0gdmlkaW9jX3RyeV9mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lID0gdmlkaW9jX3RyeV9mbXQsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwX21wbGFuZSA9IHZpZGlvY19zX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXRfbXBsYW5lID0gdmlkaW9jX3NfZm10LAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2dfY3JvcCA9IHZpZGlvY19nX2Nyb3AsCit9OworCitzdGF0aWMgaW50IHM1cF9tZmNfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqYnVmX2NvdW50LAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqcGxhbmVfY291bnQsIHVuc2lnbmVkIGxvbmcgcHNpemVbXSwKKwkJCSAgICAgICB2b2lkICphbGxvY2F0b3JzW10pCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgodnEtPmRydl9wcml2KTsKKworCS8qIFZpZGVvIG91dHB1dCBmb3IgZGVjb2RpbmcgKHNvdXJjZSkKKwkgKiB0aGlzIGNhbiBiZSBzZXQgYWZ0ZXIgZ2V0dGluZyBhbiBpbnN0YW5jZSAqLworCWlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfSU5JVCAmJgorCSAgICB2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJLyogQSBzaW5nbGUgcGxhbmUgaXMgcmVxdWlyZWQgZm9yIGlucHV0ICovCisJCSpwbGFuZV9jb3VudCA9IDE7CisJCWlmICgqYnVmX2NvdW50IDwgMSkKKwkJCSpidWZfY291bnQgPSAxOworCQlpZiAoKmJ1Zl9jb3VudCA+IE1GQ19NQVhfQlVGRkVSUykKKwkJCSpidWZfY291bnQgPSBNRkNfTUFYX0JVRkZFUlM7CisJLyogVmlkZW8gY2FwdHVyZSBmb3IgZGVjb2RpbmcgKGRlc3RpbmF0aW9uKQorCSAqIHRoaXMgY2FuIGJlIHNldCBhZnRlciB0aGUgaGVhZGVyIHdhcyBwYXJzZWQgKi8KKwl9IGVsc2UgaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9IRUFEX1BBUlNFRCAmJgorCQkgICB2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCS8qIE91dHB1dCBwbGFuZSBjb3VudCBpcyAyIC0gb25lIGZvciBZIGFuZCBvbmUgZm9yIENiQ3IgKi8KKwkJKnBsYW5lX2NvdW50ID0gMjsKKwkJLyogU2V0dXAgYnVmZmVyIGNvdW50ICovCisJCWlmICgqYnVmX2NvdW50IDwgY3R4LT5kcGJfY291bnQpCisJCQkqYnVmX2NvdW50ID0gY3R4LT5kcGJfY291bnQ7CisJCWlmICgqYnVmX2NvdW50ID4gY3R4LT5kcGJfY291bnQgKyBNRkNfTUFYX0VYVFJBX0RQQikKKwkJCSpidWZfY291bnQgPSBjdHgtPmRwYl9jb3VudCArIE1GQ19NQVhfRVhUUkFfRFBCOworCQlpZiAoKmJ1Zl9jb3VudCA+IE1GQ19NQVhfQlVGRkVSUykKKwkJCSpidWZfY291bnQgPSBNRkNfTUFYX0JVRkZFUlM7CisJfSBlbHNlIHsKKwkJbWZjX2VycigiU3RhdGUgc2VlbXMgaW52YWxpZC4gU3RhdGUgPSAlZCwgdnEtPnR5cGUgPSAlZFxuIiwKKwkJCQkJCQljdHgtPnN0YXRlLCB2cS0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltZmNfZGVidWcoMiwgIkJ1ZmZlciBjb3VudD0lZCwgcGxhbmUgY291bnQ9JWRcbiIsCisJCQkJCQkqYnVmX2NvdW50LCAqcGxhbmVfY291bnQpOworCWlmIChjdHgtPnN0YXRlID09IE1GQ0lOU1RfSEVBRF9QQVJTRUQgJiYKKwkgICAgdnEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlwc2l6ZVswXSA9IGN0eC0+bHVtYV9zaXplOworCQlwc2l6ZVsxXSA9IGN0eC0+Y2hyb21hX3NpemU7CisJCWFsbG9jYXRvcnNbMF0gPSBjdHgtPmRldi0+YWxsb2NfY3R4W01GQ19CQU5LMl9BTExPQ19DVFhdOworCQlhbGxvY2F0b3JzWzFdID0gY3R4LT5kZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzFfQUxMT0NfQ1RYXTsKKwl9IGVsc2UgaWYgKHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSAmJgorCQkgICBjdHgtPnN0YXRlID09IE1GQ0lOU1RfSU5JVCkgeworCQlwc2l6ZVswXSA9IGN0eC0+ZGVjX3NyY19idWZfc2l6ZTsKKwkJYWxsb2NhdG9yc1swXSA9IGN0eC0+ZGV2LT5hbGxvY19jdHhbTUZDX0JBTksxX0FMTE9DX0NUWF07CisJfSBlbHNlIHsKKwkJbWZjX2VycigiVGhpcyB2aWRlbyBub2RlIGlzIGRlZGljYXRlZCB0byBkZWNvZGluZy4gRGVjb2Rpbmcgbm90IGluaXRhbGlzZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfdW5sb2NrKHN0cnVjdCB2YjJfcXVldWUgKnEpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltdXRleF91bmxvY2soJmRldi0+bWZjX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgczVwX21mY19sb2NrKHN0cnVjdCB2YjJfcXVldWUgKnEpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPm1mY19tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19idWZfaW5pdChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZiMl9xdWV1ZSAqdnEgPSB2Yi0+dmIyX3F1ZXVlOworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHZxLT5kcnZfcHJpdik7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodnEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlpZiAoY3R4LT5jYXB0dXJlX3N0YXRlID09IFFVRVVFX0JVRlNfTU1BUEVEKQorCQkJcmV0dXJuIDA7CisJCWZvciAoaSA9IDA7IGkgPD0gY3R4LT5zcmNfZm10LT5udW1fcGxhbmVzIDsgaSsrKSB7CisJCQlpZiAoSVNfRVJSX09SX05VTEwoRVJSX1BUUigKKwkJCQkJdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIodmIsIGkpKSkpIHsKKwkJCQltZmNfZXJyKCJQbGFuZSBtZW0gbm90IGFsbG9jYXRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IGN0eC0+bHVtYV9zaXplIHx8CisJCQl2YjJfcGxhbmVfc2l6ZSh2YiwgMSkgPCBjdHgtPmNocm9tYV9zaXplKSB7CisJCQltZmNfZXJyKCJQbGFuZSBidWZmZXIgKENBUFRVUkUpIGlzIHRvbyBzbWFsbFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpID0gdmItPnY0bDJfYnVmLmluZGV4OworCQljdHgtPmRzdF9idWZzW2ldLmIgPSB2YjsKKwkJY3R4LT5kc3RfYnVmc1tpXS5jb29raWUucmF3Lmx1bWEgPQorCQkJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcih2YiwgMCk7CisJCWN0eC0+ZHN0X2J1ZnNbaV0uY29va2llLnJhdy5jaHJvbWEgPQorCQkJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcih2YiwgMSk7CisJCWN0eC0+ZHN0X2J1ZnNfY250Kys7CisJfSBlbHNlIGlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJaWYgKElTX0VSUl9PUl9OVUxMKEVSUl9QVFIoCisJCQkJCXZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKHZiLCAwKSkpKSB7CisJCQltZmNfZXJyKCJQbGFuZSBtZW1vcnkgbm90IGFsbG9jYXRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgY3R4LT5kZWNfc3JjX2J1Zl9zaXplKSB7CisJCQltZmNfZXJyKCJQbGFuZSBidWZmZXIgKE9VVFBVVCkgaXMgdG9vIHNtYWxsXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaSA9IHZiLT52NGwyX2J1Zi5pbmRleDsKKwkJY3R4LT5zcmNfYnVmc1tpXS5iID0gdmI7CisJCWN0eC0+c3JjX2J1ZnNbaV0uY29va2llLnN0cmVhbSA9CisJCQkJCXZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKHZiLCAwKTsKKwkJY3R4LT5zcmNfYnVmc19jbnQrKzsKKwl9IGVsc2UgeworCQltZmNfZXJyKCJzNXBfbWZjX2J1Zl9pbml0OiB1bmtub3duIHF1ZXVlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChxLT5kcnZfcHJpdik7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJmN0eC0+Y3RybF9oYW5kbGVyKTsKKwlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX0ZJTklTSElORyB8fAorCQljdHgtPnN0YXRlID09IE1GQ0lOU1RfRklOSVNIRUQpCisJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX1JVTk5JTkc7CisJLyogSWYgY29udGV4dCBpcyByZWFkeSB0aGVuIGRldiA9IHdvcmstPmRhdGE7c2NoZWR1bGUgaXQgdG8gcnVuICovCisJaWYgKHM1cF9tZmNfY3R4X3JlYWR5KGN0eCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJc2V0X2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwl9CisJczVwX21mY190cnlfcnVuKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJaW50IGFib3J0ZWQgPSAwOworCisJaWYgKChjdHgtPnN0YXRlID09IE1GQ0lOU1RfRklOSVNISU5HIHx8CisJCWN0eC0+c3RhdGUgPT0gIE1GQ0lOU1RfUlVOTklORykgJiYKKwkJZGV2LT5jdXJyX2N0eCA9PSBjdHgtPm51bSAmJiBkZXYtPmh3X2xvY2spIHsKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfQUJPUlQ7CisJCXM1cF9tZmNfd2FpdF9mb3JfZG9uZV9jdHgoY3R4LAorCQkJCQlTNVBfRklNVl9SMkhfQ01EX0ZSQU1FX0RPTkVfUkVULCAwKTsKKwkJYWJvcnRlZCA9IDE7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlpZiAocS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCXM1cF9tZmNfY2xlYW51cF9xdWV1ZSgmY3R4LT5kc3RfcXVldWUsICZjdHgtPnZxX2RzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjdHgtPmRzdF9xdWV1ZSk7CisJCWN0eC0+ZHN0X3F1ZXVlX2NudCA9IDA7CisJCWN0eC0+ZHBiX2ZsdXNoX2ZsYWcgPSAxOworCQljdHgtPmRlY19kc3RfZmxhZyA9IDA7CisJfQorCWlmIChxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgeworCQlzNXBfbWZjX2NsZWFudXBfcXVldWUoJmN0eC0+c3JjX3F1ZXVlLCAmY3R4LT52cV9zcmMpOworCQlJTklUX0xJU1RfSEVBRCgmY3R4LT5zcmNfcXVldWUpOworCQljdHgtPnNyY19xdWV1ZV9jbnQgPSAwOworCX0KKwlpZiAoYWJvcnRlZCkKKwkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfUlVOTklORzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBzNXBfbWZjX2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZiMl9xdWV1ZSAqdnEgPSB2Yi0+dmIyX3F1ZXVlOworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHZxLT5kcnZfcHJpdik7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqbWZjX2J1ZjsKKworCWlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJbWZjX2J1ZiA9ICZjdHgtPnNyY19idWZzW3ZiLT52NGwyX2J1Zi5pbmRleF07CisJCW1mY19idWYtPnVzZWQgPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJm1mY19idWYtPmxpc3QsICZjdHgtPnNyY19xdWV1ZSk7CisJCWN0eC0+c3JjX3F1ZXVlX2NudCsrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKKwkJbWZjX2J1ZiA9ICZjdHgtPmRzdF9idWZzW3ZiLT52NGwyX2J1Zi5pbmRleF07CisJCW1mY19idWYtPnVzZWQgPSAwOworCQkvKiBNYXJrIGRlc3RpbmF0aW9uIGFzIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IE1GQyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJCXNldF9iaXQodmItPnY0bDJfYnVmLmluZGV4LCAmY3R4LT5kZWNfZHN0X2ZsYWcpOworCQlsaXN0X2FkZF90YWlsKCZtZmNfYnVmLT5saXN0LCAmY3R4LT5kc3RfcXVldWUpOworCQljdHgtPmRzdF9xdWV1ZV9jbnQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJbWZjX2VycigiVW5zdXBwb3J0ZWQgYnVmZmVyIHR5cGUgKCVkKVxuIiwgdnEtPnR5cGUpOworCX0KKwlpZiAoczVwX21mY19jdHhfcmVhZHkoY3R4KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCQlzZXRfYml0KGN0eC0+bnVtLCAmZGV2LT5jdHhfd29ya19iaXRzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCX0KKwlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCB2YjJfb3BzIHM1cF9tZmNfZGVjX3FvcHMgPSB7CisJLnF1ZXVlX3NldHVwCQk9IHM1cF9tZmNfcXVldWVfc2V0dXAsCisJLndhaXRfcHJlcGFyZQkJPSBzNXBfbWZjX3VubG9jaywKKwkud2FpdF9maW5pc2gJCT0gczVwX21mY19sb2NrLAorCS5idWZfaW5pdAkJPSBzNXBfbWZjX2J1Zl9pbml0LAorCS5zdGFydF9zdHJlYW1pbmcJPSBzNXBfbWZjX3N0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gczVwX21mY19zdG9wX3N0cmVhbWluZywKKwkuYnVmX3F1ZXVlCQk9IHM1cF9tZmNfYnVmX3F1ZXVlLAorfTsKKworc3RydWN0IHM1cF9tZmNfY29kZWNfb3BzICpnZXRfZGVjX2NvZGVjX29wcyh2b2lkKQoreworCXJldHVybiAmZGVjb2Rlcl9jb2RlY19vcHM7Cit9CisKK3N0cnVjdCB2YjJfb3BzICpnZXRfZGVjX3F1ZXVlX29wcyh2b2lkKQoreworCXJldHVybiAmczVwX21mY19kZWNfcW9wczsKK30KKworY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpnZXRfZGVjX3Y0bDJfaW9jdGxfb3BzKHZvaWQpCit7CisJcmV0dXJuICZzNXBfbWZjX2RlY19pb2N0bF9vcHM7Cit9CisKKyNkZWZpbmUgSVNfTUZDNTFfUFJJVih4KSAoKFY0TDJfQ1RSTF9JRDJDTEFTUyh4KSA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgXAorCQkJCQkJJiYgVjRMMl9DVFJMX0RSSVZFUl9QUklWKHgpKQorCitpbnQgczVwX21mY19kZWNfY3RybHNfc2V0dXAoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHY0bDJfY3RybF9jb25maWcgY2ZnOworCWludCBpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmY3R4LT5jdHJsX2hhbmRsZXIsIE5VTV9DVFJMUyk7CisJaWYgKGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yKSB7CisJCW1mY19lcnIoInY0bDJfY3RybF9oYW5kbGVyX2luaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSTFM7IGkrKykgeworCQlpZiAoSVNfTUZDNTFfUFJJVihjb250cm9sc1tpXS5pZCkpIHsKKwkJCWNmZy5vcHMgPSAmczVwX21mY19kZWNfY3RybF9vcHM7CisJCQljZmcuaWQgPSBjb250cm9sc1tpXS5pZDsKKwkJCWNmZy5taW4gPSBjb250cm9sc1tpXS5taW5pbXVtOworCQkJY2ZnLm1heCA9IGNvbnRyb2xzW2ldLm1heGltdW07CisJCQljZmcuZGVmID0gY29udHJvbHNbaV0uZGVmYXVsdF92YWx1ZTsKKwkJCWNmZy5uYW1lID0gY29udHJvbHNbaV0ubmFtZTsKKwkJCWNmZy50eXBlID0gY29udHJvbHNbaV0udHlwZTsKKworCQkJY2ZnLnN0ZXAgPSBjb250cm9sc1tpXS5zdGVwOworCQkJY2ZnLm1lbnVfc2tpcF9tYXNrID0gMDsKKworCQkJY3R4LT5jdHJsc1tpXSA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKCZjdHgtPmN0cmxfaGFuZGxlciwKKwkJCQkJJmNmZywgTlVMTCk7CisJCX0gZWxzZSB7CisJCQljdHgtPmN0cmxzW2ldID0gdjRsMl9jdHJsX25ld19zdGQoJmN0eC0+Y3RybF9oYW5kbGVyLAorCQkJCQkmczVwX21mY19kZWNfY3RybF9vcHMsCisJCQkJCWNvbnRyb2xzW2ldLmlkLCBjb250cm9sc1tpXS5taW5pbXVtLAorCQkJCQljb250cm9sc1tpXS5tYXhpbXVtLCBjb250cm9sc1tpXS5zdGVwLAorCQkJCQljb250cm9sc1tpXS5kZWZhdWx0X3ZhbHVlKTsKKwkJfQorCQlpZiAoY3R4LT5jdHJsX2hhbmRsZXIuZXJyb3IpIHsKKwkJCW1mY19lcnIoIkFkZGluZyBjb250cm9sICglZCkgZmFpbGVkXG4iLCBpKTsKKwkJCXJldHVybiBjdHgtPmN0cmxfaGFuZGxlci5lcnJvcjsKKwkJfQorCQlpZiAoY29udHJvbHNbaV0uaXNfdm9sYXRpbGUgJiYgY3R4LT5jdHJsc1tpXSkKKwkJCWN0eC0+Y3RybHNbaV0tPmlzX3ZvbGF0aWxlID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgczVwX21mY19kZWNfY3RybHNfZGVsZXRlKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCWludCBpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY3R4LT5jdHJsX2hhbmRsZXIpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSTFM7IGkrKykKKwkJY3R4LT5jdHJsc1tpXSA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2RlYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI4YjIxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2RlYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19kZWMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIFM1UF9NRkNfREVDX0hfCisjZGVmaW5lIFM1UF9NRkNfREVDX0hfCisKK3N0cnVjdCBzNXBfbWZjX2NvZGVjX29wcyAqZ2V0X2RlY19jb2RlY19vcHModm9pZCk7CitzdHJ1Y3QgdmIyX29wcyAqZ2V0X2RlY19xdWV1ZV9vcHModm9pZCk7Citjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgKmdldF9kZWNfdjRsMl9pb2N0bF9vcHModm9pZCk7CitzdHJ1Y3QgczVwX21mY19mbXQgKmdldF9kZWNfZGVmX2ZtdChib29sIHNyYyk7CitpbnQgczVwX21mY19kZWNfY3RybHNfc2V0dXAoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOwordm9pZCBzNXBfbWZjX2RlY19jdHJsc19kZWxldGUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOworCisjZW5kaWYgLyogUzVQX01GQ19ERUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2VuYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMDk0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2VuYy5jCkBAIC0wLDAgKzEsMTgyOSBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2VuYy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEplb25ndGFlIFBhcmsJPGp0cC5wYXJrQHNhbXN1bmcuY29tPgorICogS2FtaWwgRGVic2tpCQk8ay5kZWJza2lAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4KKyNpbmNsdWRlICJyZWdzLW1mYy5oIgorI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisjaW5jbHVkZSAiczVwX21mY19kZWJ1Zy5oIgorI2luY2x1ZGUgInM1cF9tZmNfZW5jLmgiCisjaW5jbHVkZSAiczVwX21mY19pbnRyLmgiCisjaW5jbHVkZSAiczVwX21mY19vcHIuaCIKKworc3RhdGljIHN0cnVjdCBzNXBfbWZjX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZSA9ICI0OjI6MCAyIFBsYW5lcyA2NHgzMiBUaWxlcyIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYxMk1ULAorCQkuY29kZWNfbW9kZSA9IFM1UF9GSU1WX0NPREVDX05PTkUsCisJCS50eXBlID0gTUZDX0ZNVF9SQVcsCisJCS5udW1fcGxhbmVzID0gMiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiNDoyOjAgMiBQbGFuZXMiLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTJNLAorCQkuY29kZWNfbW9kZSA9IFM1UF9GSU1WX0NPREVDX05PTkUsCisJCS50eXBlID0gTUZDX0ZNVF9SQVcsCisJCS5udW1fcGxhbmVzID0gMiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiSDI2NCBFbmNvZGVkIFN0cmVhbSIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfSDI2NCwKKwkJLmNvZGVjX21vZGUgPSBTNVBfRklNVl9DT0RFQ19IMjY0X0VOQywKKwkJLnR5cGUgPSBNRkNfRk1UX0VOQywKKwkJLm51bV9wbGFuZXMgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJNUEVHNCBFbmNvZGVkIFN0cmVhbSIsCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzQsCisJCS5jb2RlY19tb2RlID0gUzVQX0ZJTVZfQ09ERUNfTVBFRzRfRU5DLAorCQkudHlwZSA9IE1GQ19GTVRfRU5DLAorCQkubnVtX3BsYW5lcyA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIkgyNjQgRW5jb2RlZCBTdHJlYW0iLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0gyNjMsCisJCS5jb2RlY19tb2RlID0gUzVQX0ZJTVZfQ09ERUNfSDI2M19FTkMsCisJCS50eXBlID0gTUZDX0ZNVF9FTkMsCisJCS5udW1fcGxhbmVzID0gMSwKKwl9LAorfTsKKworI2RlZmluZSBOVU1fRk9STUFUUyBBUlJBWV9TSVpFKGZvcm1hdHMpCitzdGF0aWMgc3RydWN0IHM1cF9tZmNfZm10ICpmaW5kX2Zvcm1hdChzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsIHVuc2lnbmVkIGludCB0KQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKKwkJaWYgKGZvcm1hdHNbaV0uZm91cmNjID09IGYtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQgJiYKKwkJICAgIGZvcm1hdHNbaV0udHlwZSA9PSB0KQorCQkJcmV0dXJuICZmb3JtYXRzW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBtZmNfY29udHJvbCBjb250cm9sc1tdID0geworCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gKDEgPDwgMTYpIC0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRSwKKwkJLm1heGltdW0gPSBWNEwyX01QRUdfVklERU9fTVVMVElfU0lDRV9NT0RFX01BWF9CWVRFUywKKwkJLmRlZmF1bHRfdmFsdWUgPSBWNEwyX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTU9ERV9TSU5HTEUsCisJCS5tZW51X3NraXBfbWFzayA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX01CLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAoMSA8PCAxNikgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1pbmltdW0gPSAxOTAwLAorCQkubWF4aW11bSA9ICgxIDw8IDMwKSAtIDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxOTAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0NZQ0xJQ19JTlRSQV9SRUZSRVNIX01CLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAoMSA8PCAxNikgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lID0gIlBhZGRpbmcgQ29udHJvbCBFbmFibGUiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUEFERElOR19ZVVYsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiUGFkZGluZyBDb2xvciBZVVYgVmFsdWUiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gKDEgPDwgMjUpIC0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAoMSA8PCAzMCkgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19SRUFDVElPTl9DT0VGRiwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJSYXRlIENvbnRyb2wgUmVhY3Rpb24gQ29lZmYuIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9ICgxIDw8IDE2KSAtIDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm5hbWUgPSAiRm9yY2UgZnJhbWUgdHlwZSIsCisJCS5taW5pbXVtID0gVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfRElTQUJMRUQsCisJCS5tYXhpbXVtID0gVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfTk9UX0NPREVELAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0RJU0FCTEVELAorCQkubWVudV9za2lwX21hc2sgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZCVl9TSVpFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAoMSA8PCAxNikgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0NQQl9TSVpFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAoMSA8PCAxNikgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IRUFERVJfTU9ERSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9TRVBBUkFURSwKKwkJLm1heGltdW0gPSBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfSk9JTkVEX1dJVEhfMVNUX0ZSQU1FLAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9TRVBBUkFURSwKKwkJLm1lbnVfc2tpcF9tYXNrID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm5hbWUgPSAiRnJhbWUgU2tpcCBFbmFibGUiLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfRElTQUJMRUQsCisJCS5tYXhpbXVtID0gVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9CVUZfTElNSVQsCisJCS5tZW51X3NraXBfbWFzayA9IDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9ESVNBQkxFRCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklULAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lID0gIkZpeGVkIFRhcmdldCBCaXQgRW5hYmxlIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLm1lbnVfc2tpcF9tYXNrID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUywKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5taW5pbXVtID0gVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9CQVNFTElORSwKKwkJLm1heGltdW0gPSBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX01VTFRJVklFV19ISUdILAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQkFTRUxJTkUsCisJCS5tZW51X3NraXBfbWFzayA9IH4oCisJCQkJKDEgPDwgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9CQVNFTElORSkgfAorCQkJCSgxIDw8IFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTUFJTikgfAorCQkJCSgxIDw8IFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSCkKKwkJCQkpLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUwsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm1pbmltdW0gPSBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzAsCisJCS5tYXhpbXVtID0gVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wLAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMCwKKwkJLm1lbnVfc2tpcF9tYXNrID0gfigKKwkJCQkoMSA8PCBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzEpIHwKKwkJCQkoMSA8PCBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF80XzIpIHwKKwkJCQkoMSA8PCBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzApIHwKKwkJCQkoMSA8PCBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzEpCisJCQkJKSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9MRVZFTCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wLAorCQkubWF4aW11bSA9IFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF81LAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wLAorCQkubWVudV9za2lwX21hc2sgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREVfRU5BQkxFRCwKKwkJLm1heGltdW0gPSBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZLAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREVfRU5BQkxFRCwKKwkJLm1lbnVfc2tpcF9tYXNrID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0FMUEhBLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gLTYsCisJCS5tYXhpbXVtID0gNiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9CRVRBLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gLTYsCisJCS5tYXhpbXVtID0gNiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKKwkJLm1pbmltdW0gPSBWNEwyX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREVfQ0FWTEMsCisJCS5tYXhpbXVtID0gVjRMMl9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFX0NBQkFDLAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQywKKwkJLm1lbnVfc2tpcF9tYXNrID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X05VTV9SRUZfUElDX0ZPUl9QLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIlRoZSBOdW1iZXIgb2YgUmVmLiBQaWMgZm9yIFAiLAorCQkubWluaW11bSA9IDEsCisJCS5tYXhpbXVtID0gMiwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEUsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSV9GUkFNRV9RUCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gNTEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUlOX1FQLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA1MSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9NQVhfUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDUxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BfRlJBTUVfUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDUxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0JfRlJBTUVfUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDUxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjYzX0lfRlJBTUVfUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiSDI2MyBJLUZyYW1lIFFQIHZhbHVlIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDMxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01JTl9RUCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJIMjYzIE1pbmltdW0gUVAgdmFsdWUiLAorCQkubWluaW11bSA9IDEsCisJCS5tYXhpbXVtID0gMzEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfTUFYX1FQLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkgyNjMgTWF4aW11bSBRUCB2YWx1ZSIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19QX0ZSQU1FX1FQLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkgyNjMgUCBmcmFtZSBRUCB2YWx1ZSIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19CX0ZSQU1FX1FQLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIkgyNjMgQiBmcmFtZSBRUCB2YWx1ZSIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJNUEVHNCBJLUZyYW1lIFFQIHZhbHVlIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDMxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NSU5fUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiTVBFRzQgTWluaW11bSBRUCB2YWx1ZSIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUFYX1FQLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lID0gIk1QRUc0IE1heGltdW0gUVAgdmFsdWUiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gNTEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BfRlJBTUVfUVAsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgPSAiTVBFRzQgUCBmcmFtZSBRUCB2YWx1ZSIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAzMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfQl9GUkFNRV9RUCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSA9ICJNUEVHNCBCIGZyYW1lIFFQIHZhbHVlIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDMxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX0RBUkssCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgPSAiSDI2NCBEYXJrIFJlZyBBZGFwdGl2ZSBSQyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NNT09USCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSA9ICJIMjY0IFNtb290aCBSZWcgQWRhcHRpdmUgUkMiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TVEFUSUMsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgPSAiSDI2NCBTdGF0aWMgUmVnIEFkYXB0aXZlIFJDIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfQUNUSVZJVFksCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgPSAiSDI2NCBBY3Rpdml0eSBSZWcgQWRhcHRpdmUgUkMiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRSwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQywKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubWluaW11bSA9IFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDX1VOU1BFQ0lGSUVELAorCQkubWF4aW11bSA9IFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDX0VYVEVOREVELAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCS5tZW51X3NraXBfbWFzayA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9XSURUSCwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gKDEgPDwgMTYpIC0gMSwKKwkJLnN0ZXAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCA9IFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9IRUlHSFQsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9ICgxIDw8IDE2KSAtIDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9ELAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAoMSA8PCAxNikgLSAxLAorCQkuc3RlcCA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkID0gVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFLAorCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5taW5pbXVtID0gVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfU0lNUExFLAorCQkubWF4aW11bSA9IFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX1NJTVBMRSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkubWVudV9za2lwX21hc2sgPSAwLAorCX0sCisJeworCQkuaWQgPSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1FQRUwsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDEsCisJCS5zdGVwID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCit9OworCisjZGVmaW5lIE5VTV9DVFJMUyBBUlJBWV9TSVpFKGNvbnRyb2xzKQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAqbWZjNTFfZ2V0X21lbnUodTMyIGlkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWZjNTFfdmlkZW9fZnJhbWVfc2tpcFtdID0geworCQkiRGlzYWJsZWQiLAorCQkiTGV2ZWwgTGltaXQiLAorCQkiVkJWL0NQQiBMaW1pdCIsCisJCU5VTEwsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1mYzUxX3ZpZGVvX2ZvcmNlX2ZyYW1lW10gPSB7CisJCSJEaXNhYmxlZCIsCisJCSJJIEZyYW1lIiwKKwkJIk5vdCBDb2RlZCIsCisJCU5VTEwsCisJfTsKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERToKKwkJcmV0dXJuIG1mYzUxX3ZpZGVvX2ZyYW1lX3NraXA7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEU6CisJCXJldHVybiBtZmM1MV92aWRlb19mb3JjZV9mcmFtZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19jdHhfcmVhZHkoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJbWZjX2RlYnVnKDIsICJzcmM9JWQsIGRzdD0lZCwgc3RhdGU9JWRcbiIsCisJCSAgY3R4LT5zcmNfcXVldWVfY250LCBjdHgtPmRzdF9xdWV1ZV9jbnQsIGN0eC0+c3RhdGUpOworCS8qIGNvbnRleHQgaXMgcmVhZHkgdG8gbWFrZSBoZWFkZXIgKi8KKwlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX0dPVF9JTlNUICYmIGN0eC0+ZHN0X3F1ZXVlX2NudCA+PSAxKQorCQlyZXR1cm4gMTsKKwkvKiBjb250ZXh0IGlzIHJlYWR5IHRvIGVuY29kZSBhIGZyYW1lICovCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9SVU5OSU5HICYmCisJCWN0eC0+c3JjX3F1ZXVlX2NudCA+PSAxICYmIGN0eC0+ZHN0X3F1ZXVlX2NudCA+PSAxKQorCQlyZXR1cm4gMTsKKwkvKiBjb250ZXh0IGlzIHJlYWR5IHRvIGVuY29kZSByZW1haW4gZnJhbWVzICovCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9GSU5JU0hJTkcgJiYKKwkJY3R4LT5zcmNfcXVldWVfY250ID49IDEgJiYgY3R4LT5kc3RfcXVldWVfY250ID49IDEpCisJCXJldHVybiAxOworCW1mY19kZWJ1ZygyLCAiY3R4IGlzIG5vdCByZWFkeVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfcmVmX3F1ZXVlKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqbWJfZW50cnk7CisJdW5zaWduZWQgbG9uZyBtYl95X2FkZHIsIG1iX2NfYWRkcjsKKworCS8qIG1vdmUgYnVmZmVycyBpbiByZWYgcXVldWUgdG8gc3JjIHF1ZXVlICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjdHgtPnJlZl9xdWV1ZSkpIHsKKwkJbWJfZW50cnkgPSBsaXN0X2VudHJ5KCgmY3R4LT5yZWZfcXVldWUpLT5uZXh0LAorCQkJCQkJc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwkJbWJfeV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIobWJfZW50cnktPmIsIDApOworCQltYl9jX2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihtYl9lbnRyeS0+YiwgMSk7CisJCWxpc3RfZGVsKCZtYl9lbnRyeS0+bGlzdCk7CisJCWN0eC0+cmVmX3F1ZXVlX2NudC0tOworCQlsaXN0X2FkZF90YWlsKCZtYl9lbnRyeS0+bGlzdCwgJmN0eC0+c3JjX3F1ZXVlKTsKKwkJY3R4LT5zcmNfcXVldWVfY250Kys7CisJfQorCW1mY19kZWJ1ZygyLCAiZW5jIHNyYyBjb3VudDogJWQsIGVuYyByZWYgY291bnQ6ICVkXG4iLAorCQkgIGN0eC0+c3JjX3F1ZXVlX2NudCwgY3R4LT5yZWZfcXVldWVfY250KTsKKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5yZWZfcXVldWUpOworCWN0eC0+cmVmX3F1ZXVlX2NudCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgZW5jX3ByZV9zZXFfc3RhcnQoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgczVwX21mY19idWYgKmRzdF9tYjsKKwl1bnNpZ25lZCBsb25nIGRzdF9hZGRyOworCXVuc2lnbmVkIGludCBkc3Rfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCWRzdF9tYiA9IGxpc3RfZW50cnkoY3R4LT5kc3RfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwlkc3RfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKGRzdF9tYi0+YiwgMCk7CisJZHN0X3NpemUgPSB2YjJfcGxhbmVfc2l6ZShkc3RfbWItPmIsIDApOworCXM1cF9tZmNfc2V0X2VuY19zdHJlYW1fYnVmZmVyKGN0eCwgZHN0X2FkZHIsIGRzdF9zaXplKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmNfcG9zdF9zZXFfc3RhcnQoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgczVwX21mY19lbmNfcGFyYW1zICpwID0gJmN0eC0+ZW5jX3BhcmFtczsKKwlzdHJ1Y3QgczVwX21mY19idWYgKmRzdF9tYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHAtPnNlcV9oZHJfbW9kZSA9PSBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfU0VQQVJBVEUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCQlkc3RfbWIgPSBsaXN0X2VudHJ5KGN0eC0+ZHN0X3F1ZXVlLm5leHQsCisJCQkJc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmRzdF9tYi0+bGlzdCk7CisJCWN0eC0+ZHN0X3F1ZXVlX2NudC0tOworCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoZHN0X21iLT5iLCAwLAorCQkJCQkJczVwX21mY19nZXRfZW5jX3N0cm1fc2l6ZSgpKTsKKwkJdmIyX2J1ZmZlcl9kb25lKGRzdF9tYi0+YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJfQorCWN0eC0+c3RhdGUgPSBNRkNJTlNUX1JVTk5JTkc7CisJaWYgKHM1cF9tZmNfY3R4X3JlYWR5KGN0eCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJc2V0X2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwl9CisJczVwX21mY190cnlfcnVuKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5jX3ByZV9mcmFtZV9zdGFydChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqZHN0X21iOworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqc3JjX21iOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzcmNfeV9hZGRyLCBzcmNfY19hZGRyLCBkc3RfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZHN0X3NpemU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJc3JjX21iID0gbGlzdF9lbnRyeShjdHgtPnNyY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgczVwX21mY19idWYsIGxpc3QpOworCXNyY195X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihzcmNfbWItPmIsIDApOworCXNyY19jX2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihzcmNfbWItPmIsIDEpOworCXM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXIoY3R4LCBzcmNfeV9hZGRyLCBzcmNfY19hZGRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlkc3RfbWIgPSBsaXN0X2VudHJ5KGN0eC0+ZHN0X3F1ZXVlLm5leHQsIHN0cnVjdCBzNXBfbWZjX2J1ZiwgbGlzdCk7CisJZHN0X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihkc3RfbWItPmIsIDApOworCWRzdF9zaXplID0gdmIyX3BsYW5lX3NpemUoZHN0X21iLT5iLCAwKTsKKwlzNXBfbWZjX3NldF9lbmNfc3RyZWFtX2J1ZmZlcihjdHgsIGRzdF9hZGRyLCBkc3Rfc2l6ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmNfcG9zdF9mcmFtZV9zdGFydChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqbWJfZW50cnk7CisJdW5zaWduZWQgbG9uZyBlbmNfeV9hZGRyLCBlbmNfY19hZGRyOworCXVuc2lnbmVkIGxvbmcgbWJfeV9hZGRyLCBtYl9jX2FkZHI7CisJaW50IHNsaWNlX3R5cGU7CisJdW5zaWduZWQgaW50IHN0cm1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2xpY2VfdHlwZSA9IHM1cF9tZmNfZ2V0X2VuY19zbGljZV90eXBlKCk7CisJc3RybV9zaXplID0gczVwX21mY19nZXRfZW5jX3N0cm1fc2l6ZSgpOworCW1mY19kZWJ1ZygyLCAiRW5jb2RlZCBzbGljZSB0eXBlOiAlZCIsIHNsaWNlX3R5cGUpOworCW1mY19kZWJ1ZygyLCAiRW5jb2RlZCBzdHJlYW0gc2l6ZTogJWQiLCBzdHJtX3NpemUpOworCW1mY19kZWJ1ZygyLCAiRGlzcGxheSBvcmRlcjogJWQiLAorCQkgIG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1NJX1BJQ19DTlQpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJaWYgKHNsaWNlX3R5cGUgPj0gMCkgeworCQlzNXBfbWZjX2dldF9lbmNfZnJhbWVfYnVmZmVyKGN0eCwgJmVuY195X2FkZHIsICZlbmNfY19hZGRyKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtYl9lbnRyeSwgJmN0eC0+c3JjX3F1ZXVlLCBsaXN0KSB7CisJCQltYl95X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihtYl9lbnRyeS0+YiwgMCk7CisJCQltYl9jX2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihtYl9lbnRyeS0+YiwgMSk7CisJCQlpZiAoKGVuY195X2FkZHIgPT0gbWJfeV9hZGRyKSAmJgorCQkJCQkJKGVuY19jX2FkZHIgPT0gbWJfY19hZGRyKSkgeworCQkJCWxpc3RfZGVsKCZtYl9lbnRyeS0+bGlzdCk7CisJCQkJY3R4LT5zcmNfcXVldWVfY250LS07CisJCQkJdmIyX2J1ZmZlcl9kb25lKG1iX2VudHJ5LT5iLAorCQkJCQkJCVZCMl9CVUZfU1RBVEVfRE9ORSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtYl9lbnRyeSwgJmN0eC0+cmVmX3F1ZXVlLCBsaXN0KSB7CisJCQltYl95X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihtYl9lbnRyeS0+YiwgMCk7CisJCQltYl9jX2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihtYl9lbnRyeS0+YiwgMSk7CisJCQlpZiAoKGVuY195X2FkZHIgPT0gbWJfeV9hZGRyKSAmJgorCQkJCQkJKGVuY19jX2FkZHIgPT0gbWJfY19hZGRyKSkgeworCQkJCWxpc3RfZGVsKCZtYl9lbnRyeS0+bGlzdCk7CisJCQkJY3R4LT5yZWZfcXVldWVfY250LS07CisJCQkJdmIyX2J1ZmZlcl9kb25lKG1iX2VudHJ5LT5iLAorCQkJCQkJCVZCMl9CVUZfU1RBVEVfRE9ORSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKChjdHgtPnNyY19xdWV1ZV9jbnQgPiAwKSAmJiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX1JVTk5JTkcpKSB7CisJCW1iX2VudHJ5ID0gbGlzdF9lbnRyeShjdHgtPnNyY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgczVwX21mY19idWYsCisJCQkJCQkJCQlsaXN0KTsKKwkJaWYgKG1iX2VudHJ5LT51c2VkKSB7CisJCQlsaXN0X2RlbCgmbWJfZW50cnktPmxpc3QpOworCQkJY3R4LT5zcmNfcXVldWVfY250LS07CisJCQlsaXN0X2FkZF90YWlsKCZtYl9lbnRyeS0+bGlzdCwgJmN0eC0+cmVmX3F1ZXVlKTsKKwkJCWN0eC0+cmVmX3F1ZXVlX2NudCsrOworCQl9CisJCW1mY19kZWJ1ZygyLCAiZW5jIHNyYyBjb3VudDogJWQsIGVuYyByZWYgY291bnQ6ICVkXG4iLAorCQkJICBjdHgtPnNyY19xdWV1ZV9jbnQsIGN0eC0+cmVmX3F1ZXVlX2NudCk7CisJfQorCWlmIChzdHJtX3NpemUgPiAwKSB7CisJCS8qIGF0IGxlYXN0IG9uZSBtb3JlIGRlc3QuIGJ1ZmZlcnMgZXhpc3QgYWx3YXlzICAqLworCQltYl9lbnRyeSA9IGxpc3RfZW50cnkoY3R4LT5kc3RfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLAorCQkJCQkJCQkJbGlzdCk7CisJCWxpc3RfZGVsKCZtYl9lbnRyeS0+bGlzdCk7CisJCWN0eC0+ZHN0X3F1ZXVlX2NudC0tOworCQlzd2l0Y2ggKHNsaWNlX3R5cGUpIHsKKwkJY2FzZSBTNVBfRklNVl9FTkNfU0lfU0xJQ0VfVFlQRV9JOgorCQkJbWJfZW50cnktPmItPnY0bDJfYnVmLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJCQlicmVhazsKKwkJY2FzZSBTNVBfRklNVl9FTkNfU0lfU0xJQ0VfVFlQRV9QOgorCQkJbWJfZW50cnktPmItPnY0bDJfYnVmLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUEZSQU1FOworCQkJYnJlYWs7CisJCWNhc2UgUzVQX0ZJTVZfRU5DX1NJX1NMSUNFX1RZUEVfQjoKKwkJCW1iX2VudHJ5LT5iLT52NGwyX2J1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0JGUkFNRTsKKwkJCWJyZWFrOworCQl9CisJCXZiMl9zZXRfcGxhbmVfcGF5bG9hZChtYl9lbnRyeS0+YiwgMCwgc3RybV9zaXplKTsKKwkJdmIyX2J1ZmZlcl9kb25lKG1iX2VudHJ5LT5iLCBWQjJfQlVGX1NUQVRFX0RPTkUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlpZiAoKGN0eC0+c3JjX3F1ZXVlX2NudCA9PSAwKSB8fCAoY3R4LT5kc3RfcXVldWVfY250ID09IDApKSB7CisJCXNwaW5fbG9jaygmZGV2LT5jb25kbG9jayk7CisJCWNsZWFyX2JpdChjdHgtPm51bSwgJmRldi0+Y3R4X3dvcmtfYml0cyk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmNvbmRsb2NrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczVwX21mY19jb2RlY19vcHMgZW5jb2Rlcl9jb2RlY19vcHMgPSB7CisJLnByZV9zZXFfc3RhcnQJCT0gZW5jX3ByZV9zZXFfc3RhcnQsCisJLnBvc3Rfc2VxX3N0YXJ0CQk9IGVuY19wb3N0X3NlcV9zdGFydCwKKwkucHJlX2ZyYW1lX3N0YXJ0CT0gZW5jX3ByZV9mcmFtZV9zdGFydCwKKwkucG9zdF9mcmFtZV9zdGFydAk9IGVuY19wb3N0X2ZyYW1lX3N0YXJ0LAorfTsKKworLyogUXVlcnkgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGRldi0+cGxhdF9kZXYtPm5hbWUsIHNpemVvZihjYXAtPmRyaXZlcikgLSAxKTsKKwlzdHJuY3B5KGNhcC0+Y2FyZCwgZGV2LT5wbGF0X2Rldi0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkgLSAxKTsKKwljYXAtPmJ1c19pbmZvWzBdID0gMDsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigxLCAwLCAwKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUKKwkJCSAgfCBWNEwyX0NBUF9WSURFT19PVVRQVVQKKwkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10KHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYsIGJvb2wgbXBsYW5lLCBib29sIG91dCkKK3sKKwlzdHJ1Y3QgczVwX21mY19mbXQgKmZtdDsKKwlpbnQgaSwgaiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgKytpKSB7CisJCWlmIChtcGxhbmUgJiYgZm9ybWF0c1tpXS5udW1fcGxhbmVzID09IDEpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoIW1wbGFuZSAmJiBmb3JtYXRzW2ldLm51bV9wbGFuZXMgPiAxKQorCQkJY29udGludWU7CisJCWlmIChvdXQgJiYgZm9ybWF0c1tpXS50eXBlICE9IE1GQ19GTVRfUkFXKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKCFvdXQgJiYgZm9ybWF0c1tpXS50eXBlICE9IE1GQ19GTVRfRU5DKQorCQkJY29udGludWU7CisJCWlmIChqID09IGYtPmluZGV4KSB7CisJCQlmbXQgPSAmZm9ybWF0c1tpXTsKKwkJCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZtdC0+bmFtZSwKKwkJCQlzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwkJCWYtPnBpeGVsZm9ybWF0ID0gZm10LT5mb3VyY2M7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkrK2o7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwaXJ2LAorCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJcmV0dXJuIHZpZGlvY19lbnVtX2ZtdChmLCBmYWxzZSwgZmFsc2UpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwX21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcGlydiwKKwkJCQkJICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXJldHVybiB2aWRpb2NfZW51bV9mbXQoZiwgdHJ1ZSwgZmFsc2UpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcm92LAorCQkJCSAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJcmV0dXJuIHZpZGlvY19lbnVtX2ZtdChmLCBmYWxzZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9vdXRfbXBsYW5lKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcm92LAorCQkJCQkgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJcmV0dXJuIHZpZGlvY19lbnVtX2ZtdChmLCB0cnVlLCB0cnVlKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChwcml2KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X2ZtdF9tcCA9ICZmLT5mbXQucGl4X21wOworCisJbWZjX2RlYnVnKDIsICJmLT50eXBlID0gJWQgY3R4LT5zdGF0ZSA9ICVkXG4iLCBmLT50eXBlLCBjdHgtPnN0YXRlKTsKKwlpZiAoZi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCS8qIFRoaXMgaXMgcnVuIG9uIG91dHB1dCAoZW5jb2RlciBkZXN0KSAqLworCQlwaXhfZm10X21wLT53aWR0aCA9IDA7CisJCXBpeF9mbXRfbXAtPmhlaWdodCA9IDA7CisJCXBpeF9mbXRfbXAtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlwaXhfZm10X21wLT5waXhlbGZvcm1hdCA9IGN0eC0+ZHN0X2ZtdC0+Zm91cmNjOworCQlwaXhfZm10X21wLT5udW1fcGxhbmVzID0gY3R4LT5kc3RfZm10LT5udW1fcGxhbmVzOworCisJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmVuY19kc3RfYnVmX3NpemU7CisJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPSBjdHgtPmVuY19kc3RfYnVmX3NpemU7CisJfSBlbHNlIGlmIChmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgeworCQkvKiBUaGlzIGlzIHJ1biBvbiBjYXB0dXJlIChlbmNvZGVyIHNyYykgKi8KKwkJcGl4X2ZtdF9tcC0+d2lkdGggPSBjdHgtPmltZ193aWR0aDsKKwkJcGl4X2ZtdF9tcC0+aGVpZ2h0ID0gY3R4LT5pbWdfaGVpZ2h0OworCisJCXBpeF9mbXRfbXAtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlwaXhfZm10X21wLT5waXhlbGZvcm1hdCA9IGN0eC0+c3JjX2ZtdC0+Zm91cmNjOworCQlwaXhfZm10X21wLT5udW1fcGxhbmVzID0gY3R4LT5zcmNfZm10LT5udW1fcGxhbmVzOworCisJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsKKwkJcGl4X2ZtdF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGN0eC0+bHVtYV9zaXplOworCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMV0uYnl0ZXNwZXJsaW5lID0gY3R4LT5idWZfd2lkdGg7CisJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsxXS5zaXplaW1hZ2UgPSBjdHgtPmNocm9tYV9zaXplOworCX0gZWxzZSB7CisJCW1mY19lcnIoImludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgczVwX21mY19mbXQgKmZtdDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X2ZtdF9tcCA9ICZmLT5mbXQucGl4X21wOworCisJaWYgKGYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlmbXQgPSBmaW5kX2Zvcm1hdChmLCBNRkNfRk1UX0VOQyk7CisJCWlmICghZm10KSB7CisJCQltZmNfZXJyKCJmYWlsZWQgdG8gdHJ5IG91dHB1dCBmb3JtYXRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocGl4X2ZtdF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9PSAwKSB7CisJCQltZmNfZXJyKCJtdXN0IGJlIHNldCBlbmNvZGluZyBvdXRwdXQgc2l6ZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPQorCQkJcGl4X2ZtdF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZTsKKwl9IGVsc2UgaWYgKGYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCWZtdCA9IGZpbmRfZm9ybWF0KGYsIE1GQ19GTVRfUkFXKTsKKwkJaWYgKCFmbXQpIHsKKwkJCW1mY19lcnIoImZhaWxlZCB0byB0cnkgb3V0cHV0IGZvcm1hdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChmbXQtPm51bV9wbGFuZXMgIT0gcGl4X2ZtdF9tcC0+bnVtX3BsYW5lcykgeworCQkJbWZjX2VycigiZmFpbGVkIHRvIHRyeSBvdXRwdXQgZm9ybWF0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJbWZjX2VycigiaW52YWxpZCBidWYgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJc3RydWN0IHM1cF9tZmNfZm10ICpmbXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9mbXRfbXAgPSAmZi0+Zm10LnBpeF9tcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJcmV0ID0gdmlkaW9jX3RyeV9mbXQoZmlsZSwgcHJpdiwgZik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoY3R4LT52cV9zcmMuc3RyZWFtaW5nIHx8IGN0eC0+dnFfZHN0LnN0cmVhbWluZykgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlmbXQgPSBmaW5kX2Zvcm1hdChmLCBNRkNfRk1UX0VOQyk7CisJCWlmICghZm10KSB7CisJCQltZmNfZXJyKCJmYWlsZWQgdG8gc2V0IGNhcHR1cmUgZm9ybWF0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0lOSVQ7CisJCWN0eC0+ZHN0X2ZtdCA9IGZtdDsKKwkJY3R4LT5jb2RlY19tb2RlID0gY3R4LT5kc3RfZm10LT5jb2RlY19tb2RlOworCQljdHgtPmVuY19kc3RfYnVmX3NpemUgPQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlOworCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gMDsKKwkJY3R4LT5kc3RfYnVmc19jbnQgPSAwOworCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9GUkVFOworCQlzNXBfbWZjX2FsbG9jX2luc3RhbmNlX2J1ZmZlcihjdHgpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCQlzZXRfYml0KGN0eC0+bnVtLCAmZGV2LT5jdHhfd29ya19iaXRzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCQlzNXBfbWZjX2NsZWFuX2N0eF9pbnRfZmxhZ3MoY3R4KTsKKwkJczVwX21mY190cnlfcnVuKGRldik7CisJCWlmIChzNXBfbWZjX3dhaXRfZm9yX2RvbmVfY3R4KGN0eCwgXAorCQkJCVM1UF9GSU1WX1IySF9DTURfT1BFTl9JTlNUQU5DRV9SRVQsIDEpKSB7CisJCQkJLyogRXJyb3Igb3IgdGltZW91dCAqLworCQkJbWZjX2VycigiRXJyb3IgZ2V0dGluZyBpbnN0YW5jZSBmcm9tIGhhcmR3YXJlXG4iKTsKKwkJCXM1cF9tZmNfcmVsZWFzZV9pbnN0YW5jZV9idWZmZXIoY3R4KTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQltZmNfZGVidWcoMiwgIkdvdCBpbnN0YW5jZSBudW1iZXI6ICVkXG4iLCBjdHgtPmluc3Rfbm8pOworCX0gZWxzZSBpZiAoZi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJZm10ID0gZmluZF9mb3JtYXQoZiwgTUZDX0ZNVF9SQVcpOworCQlpZiAoIWZtdCkgeworCQkJbWZjX2VycigiZmFpbGVkIHRvIHNldCBvdXRwdXQgZm9ybWF0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChmbXQtPm51bV9wbGFuZXMgIT0gcGl4X2ZtdF9tcC0+bnVtX3BsYW5lcykgeworCQkJbWZjX2VycigiZmFpbGVkIHRvIHNldCBvdXRwdXQgZm9ybWF0XG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQljdHgtPnNyY19mbXQgPSBmbXQ7CisJCWN0eC0+aW1nX3dpZHRoID0gcGl4X2ZtdF9tcC0+d2lkdGg7CisJCWN0eC0+aW1nX2hlaWdodCA9IHBpeF9mbXRfbXAtPmhlaWdodDsKKwkJbWZjX2RlYnVnKDIsICJjb2RlYyBudW1iZXI6ICVkXG4iLCBjdHgtPnNyY19mbXQtPmNvZGVjX21vZGUpOworCQltZmNfZGVidWcoMiwgImZtdCAtIHc6ICVkLCBoOiAlZCwgY3R4IC0gdzogJWQsIGg6ICVkXG4iLAorCQkJcGl4X2ZtdF9tcC0+d2lkdGgsIHBpeF9mbXRfbXAtPmhlaWdodCwKKwkJCWN0eC0+aW1nX3dpZHRoLCBjdHgtPmltZ19oZWlnaHQpOworCQlpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX05WMTJNKSB7CisJCQljdHgtPmJ1Zl93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLAorCQkJCQkJCVM1UF9GSU1WX05WMTJNX0hBTElHTik7CisJCQljdHgtPmx1bWFfc2l6ZSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLAorCQkJCVM1UF9GSU1WX05WMTJNX0hBTElHTikgKiBBTElHTihjdHgtPmltZ19oZWlnaHQsCisJCQkJUzVQX0ZJTVZfTlYxMk1fTFZBTElHTik7CisJCQljdHgtPmNocm9tYV9zaXplID0gQUxJR04oY3R4LT5pbWdfd2lkdGgsCisJCQkJUzVQX0ZJTVZfTlYxMk1fSEFMSUdOKSAqIEFMSUdOKChjdHgtPmltZ19oZWlnaHQKKwkJCQk+PiAxKSwgUzVQX0ZJTVZfTlYxMk1fQ1ZBTElHTik7CisKKwkJCWN0eC0+bHVtYV9zaXplID0gQUxJR04oY3R4LT5sdW1hX3NpemUsCisJCQkJCQkJUzVQX0ZJTVZfTlYxMk1fU0FMSUdOKTsKKwkJCWN0eC0+Y2hyb21hX3NpemUgPSBBTElHTihjdHgtPmNocm9tYV9zaXplLAorCQkJCQkJCVM1UF9GSU1WX05WMTJNX1NBTElHTik7CisKKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPSBjdHgtPmx1bWFfc2l6ZTsKKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsKKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsxXS5zaXplaW1hZ2UgPSBjdHgtPmNocm9tYV9zaXplOworCQkJcGl4X2ZtdF9tcC0+cGxhbmVfZm10WzFdLmJ5dGVzcGVybGluZSA9IGN0eC0+YnVmX3dpZHRoOworCisJCX0gZWxzZSBpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX05WMTJNVCkgeworCQkJY3R4LT5idWZfd2lkdGggPSBBTElHTihjdHgtPmltZ193aWR0aCwKKwkJCQkJCQlTNVBfRklNVl9OVjEyTVRfSEFMSUdOKTsKKwkJCWN0eC0+bHVtYV9zaXplID0gQUxJR04oY3R4LT5pbWdfd2lkdGgsCisJCQkJUzVQX0ZJTVZfTlYxMk1UX0hBTElHTikJKiBBTElHTihjdHgtPmltZ19oZWlnaHQsCisJCQkJUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTik7CisJCQljdHgtPmNocm9tYV9zaXplID0gQUxJR04oY3R4LT5pbWdfd2lkdGgsCisJCQkJUzVQX0ZJTVZfTlYxMk1UX0hBTElHTikgKiBBTElHTigoY3R4LT5pbWdfaGVpZ2h0CisJCQkJPj4gMSksIFM1UF9GSU1WX05WMTJNVF9WQUxJR04pOworCQkJY3R4LT5sdW1hX3NpemUgPSBBTElHTihjdHgtPmx1bWFfc2l6ZSwKKwkJCQkJCQlTNVBfRklNVl9OVjEyTVRfU0FMSUdOKTsKKwkJCWN0eC0+Y2hyb21hX3NpemUgPSBBTElHTihjdHgtPmNocm9tYV9zaXplLAorCQkJCQkJCVM1UF9GSU1WX05WMTJNVF9TQUxJR04pOworCisJCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlID0gY3R4LT5sdW1hX3NpemU7CisJCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5idWZfd2lkdGg7CisJCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMV0uc2l6ZWltYWdlID0gY3R4LT5jaHJvbWFfc2l6ZTsKKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsKKwkJfQorCQljdHgtPnNyY19idWZzX2NudCA9IDA7CisJCWN0eC0+b3V0cHV0X3N0YXRlID0gUVVFVUVfRlJFRTsKKwl9IGVsc2UgeworCQltZmNfZXJyKCJpbnZhbGlkIGJ1ZiB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorb3V0OgorCW1mY19kZWJ1Z19sZWF2ZSgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcWJ1ZnMpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisJaW50IHJldCA9IDA7CisKKwkvKiBpZiBtZW1vcnkgaXMgbm90IG1tcCBvciB1c2VycHRyIHJldHVybiBlcnJvciAqLworCWlmICgocmVxYnVmcy0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApICYmCisJCShyZXFidWZzLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChyZXFidWZzLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKKwkJaWYgKGN0eC0+Y2FwdHVyZV9zdGF0ZSAhPSBRVUVVRV9GUkVFKSB7CisJCQltZmNfZXJyKCJpbnZhbGlkIGNhcHR1cmUgc3RhdGU6ICVkXG4iLAorCQkJCQkJCWN0eC0+Y2FwdHVyZV9zdGF0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZXQgPSB2YjJfcmVxYnVmcygmY3R4LT52cV9kc3QsIHJlcWJ1ZnMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCW1mY19lcnIoImVycm9yIGluIHZiMl9yZXFidWZzKCkgZm9yIEUoRClcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9CVUZTX1JFUVVFU1RFRDsKKwkJcmV0ID0gczVwX21mY19hbGxvY19jb2RlY19idWZmZXJzKGN0eCk7CisJCWlmIChyZXQpIHsKKwkJCW1mY19lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBlbmNvZGluZyBidWZmZXJzXG4iKTsKKwkJCXJlcWJ1ZnMtPmNvdW50ID0gMDsKKwkJCXJldCA9IHZiMl9yZXFidWZzKCZjdHgtPnZxX2RzdCwgcmVxYnVmcyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZSBpZiAocmVxYnVmcy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJaWYgKGN0eC0+b3V0cHV0X3N0YXRlICE9IFFVRVVFX0ZSRUUpIHsKKwkJCW1mY19lcnIoImludmFsaWQgb3V0cHV0IHN0YXRlOiAlZFxuIiwKKwkJCQkJCQljdHgtPm91dHB1dF9zdGF0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZXQgPSB2YjJfcmVxYnVmcygmY3R4LT52cV9zcmMsIHJlcWJ1ZnMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCW1mY19lcnIoImVycm9yIGluIHZiMl9yZXFidWZzKCkgZm9yIEUoUylcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQljdHgtPm91dHB1dF9zdGF0ZSA9IFFVRVVFX0JVRlNfUkVRVUVTVEVEOworCX0gZWxzZSB7CisJCW1mY19lcnIoImludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChwcml2KTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGlmIG1lbW9yeSBpcyBub3QgbW1wIG9yIHVzZXJwdHIgcmV0dXJuIGVycm9yICovCisJaWYgKChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSAmJgorCQkoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlpZiAoY3R4LT5zdGF0ZSAhPSBNRkNJTlNUX0dPVF9JTlNUKSB7CisJCQltZmNfZXJyKCJpbnZhbGlkIGNvbnRleHQgc3RhdGU6ICVkXG4iLCBjdHgtPnN0YXRlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldCA9IHZiMl9xdWVyeWJ1ZigmY3R4LT52cV9kc3QsIGJ1Zik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJbWZjX2VycigiZXJyb3IgaW4gdmIyX3F1ZXJ5YnVmKCkgZm9yIEUoRClcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlidWYtPm0ucGxhbmVzWzBdLm0ubWVtX29mZnNldCArPSBEU1RfUVVFVUVfT0ZGX0JBU0U7CisJfSBlbHNlIGlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCXJldCA9IHZiMl9xdWVyeWJ1ZigmY3R4LT52cV9zcmMsIGJ1Zik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJbWZjX2VycigiZXJyb3IgaW4gdmIyX3F1ZXJ5YnVmKCkgZm9yIEUoUylcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCW1mY19lcnIoImludmFsaWQgYnVmIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogUXVldWUgYSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9FUlJPUikgeworCQltZmNfZXJyKCJDYWxsIG9uIFFCVUYgYWZ0ZXIgdW5yZWNvdmVyYWJsZSBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkKKwkJcmV0dXJuIHZiMl9xYnVmKCZjdHgtPnZxX3NyYywgYnVmKTsKKwllbHNlIGlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkKKwkJcmV0dXJuIHZiMl9xYnVmKCZjdHgtPnZxX2RzdCwgYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogRGVxdWV1ZSBhIGJ1ZmZlciAqLworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCisJaWYgKGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9FUlJPUikgeworCQltZmNfZXJyKCJDYWxsIG9uIERRQlVGIGFmdGVyIHVucmVjb3ZlcmFibGUgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCisJCXJldHVybiB2YjJfZHFidWYoJmN0eC0+dnFfc3JjLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwllbHNlIGlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkKKwkJcmV0dXJuIHZiMl9kcWJ1ZigmY3R4LT52cV9kc3QsIGJ1ZiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBTdHJlYW0gb24gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocHJpdik7CisKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCisJCXJldHVybiB2YjJfc3RyZWFtb24oJmN0eC0+dnFfc3JjLCB0eXBlKTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpCisJCXJldHVybiB2YjJfc3RyZWFtb24oJmN0eC0+dnFfZHN0LCB0eXBlKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogU3RyZWFtIG9mZiwgd2hpY2ggZXF1YWxzIHRvIGEgcGF1c2UgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChwcml2KTsKKworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkKKwkJcmV0dXJuIHZiMl9zdHJlYW1vZmYoJmN0eC0+dnFfc3JjLCB0eXBlKTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpCisJCXJldHVybiB2YjJfc3RyZWFtb2ZmKCZjdHgtPnZxX2RzdCwgdHlwZSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGgyNjRfbGV2ZWwoZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sZXZlbCBsdmwpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCB0W1Y0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMCArIDFdID0geworCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzAgICAqLyAxMCwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMUIgICAgKi8gOSwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8xICAgKi8gMTEsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMiAgICovIDEyLAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzMgICAqLyAxMywKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8wICAgKi8gMjAsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMSAgICovIDIxLAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzIgICAqLyAyMiwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18wICAgKi8gMzAsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMSAgICovIDMxLAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzIgICAqLyAzMiwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wICAgKi8gNDAsCisJfTsKKwlyZXR1cm4gdFtsdmxdOworfQorCitzdGF0aWMgaW5saW5lIGludCBtcGVnNF9sZXZlbChlbnVtIHY0bDJfbXBlZ192aWRlb19tcGVnNF9sZXZlbCBsdmwpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCB0W1Y0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF81ICsgMV0gPSB7CisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wICAgICovIDAsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wQiAgICovIDksCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8xICAgICovIDEsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8yICAgICovIDIsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8zICAgICovIDMsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8zQiAgICovIDcsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF80ICAgICovIDQsCisJCS8qIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF81ICAgICovIDUsCisJfTsKKwlyZXR1cm4gdFtsdmxdOworfQorCitzdGF0aWMgaW5saW5lIGludCB2dWlfc2FyX2lkYyhlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Z1aV9zYXJfaWRjIHNhcikKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHRbVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfRVhURU5ERUQgKyAxXSA9IHsKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfVU5TUEVDSUZJRUQgICAgICovIDAsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzF4MSAgICAgICAgICAgICAqLyAxLAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMngxMSAgICAgICAgICAgKi8gMiwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTB4MTEgICAgICAgICAgICovIDMsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2eDExICAgICAgICAgICAqLyA0LAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180MHgzMyAgICAgICAgICAgKi8gNSwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMjR4MTEgICAgICAgICAgICovIDYsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzIweDExICAgICAgICAgICAqLyA3LAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18zMngxMSAgICAgICAgICAgKi8gOCwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfODB4MzMgICAgICAgICAgICovIDksCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE4eDExICAgICAgICAgICAqLyAxMCwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTV4MTEgICAgICAgICAgICovIDExLAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ182NHgzMyAgICAgICAgICAgKi8gMTIsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2MHg5OSAgICAgICAgICAqLyAxMywKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNHgzICAgICAgICAgICAgICovIDE0LAorCQkvKiBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18zeDIgICAgICAgICAgICAgKi8gMTUsCisJCS8qIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzJ4MSAgICAgICAgICAgICAqLyAxNiwKKwkJLyogVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfRVhURU5ERUQgICAgICAgICovIDI1NSwKKwl9OworCXJldHVybiB0W3Nhcl07Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19lbmNfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBjdHJsX3RvX2N0eChjdHJsKTsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBzNXBfbWZjX2VuY19wYXJhbXMgKnAgPSAmY3R4LT5lbmNfcGFyYW1zOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcC0+Z29wX3NpemUgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFOgorCQlwLT5zbGljZV9tb2RlID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX01COgorCQlwLT5zbGljZV9tYiA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01BWF9CWVRFUzoKKwkJcC0+c2xpY2VfYml0ID0gY3RybC0+dmFsICogODsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0NZQ0xJQ19JTlRSQV9SRUZSRVNIX01COgorCQlwLT5pbnRyYV9yZWZyZXNoX21iID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUEFERElORzoKKwkJcC0+cGFkID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUEFERElOR19ZVVY6CisJCXAtPnBhZF9sdW1hID0gKGN0cmwtPnZhbCA+PiAxNikgJiAweGZmOworCQlwLT5wYWRfY2IgPSAoY3RybC0+dmFsID4+IDgpICYgMHhmZjsKKwkJcC0+cGFkX2NyID0gKGN0cmwtPnZhbCA+PiAwKSAmIDB4ZmY7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9SQ19FTkFCTEU6CisJCXAtPnJjX2ZyYW1lID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcC0+cmNfYml0cmF0ZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1JDX1JFQUNUSU9OX0NPRUZGOgorCQlwLT5yY19yZWFjdGlvbl9jb2VmZiA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEU6CisJCWN0eC0+Zm9yY2VfZnJhbWVfdHlwZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZCVl9TSVpFOgorCQlwLT52YnZfc2l6ZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQ1BCX1NJWkU6CisJCXAtPmNvZGVjLmgyNjQuY3BiX3NpemUgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IRUFERVJfTU9ERToKKwkJcC0+c2VxX2hkcl9tb2RlID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFOgorCQlwLT5mcmFtZV9za2lwX21vZGUgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklUOgorCQlwLT5maXhlZF90YXJnZXRfYml0ID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6CisJCXAtPm51bV9iX2ZyYW1lID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFOgorCQlzd2l0Y2ggKGN0cmwtPnZhbCkgeworCQljYXNlIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTUFJTjoKKwkJCXAtPmNvZGVjLmgyNjQucHJvZmlsZSA9CisJCQkJCVM1UF9GSU1WX0VOQ19QUk9GSUxFX0gyNjRfTUFJTjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSDoKKwkJCXAtPmNvZGVjLmgyNjQucHJvZmlsZSA9CisJCQkJCVM1UF9GSU1WX0VOQ19QUk9GSUxFX0gyNjRfSElHSDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQkFTRUxJTkU6CisJCQlwLT5jb2RlYy5oMjY0LnByb2ZpbGUgPQorCQkJCVM1UF9GSU1WX0VOQ19QUk9GSUxFX0gyNjRfQkFTRUxJTkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUw6CisJCXAtPmNvZGVjLmgyNjQubGV2ZWxfdjRsMiA9IGN0cmwtPnZhbDsKKwkJcC0+Y29kZWMuaDI2NC5sZXZlbCA9IGgyNjRfbGV2ZWwoY3RybC0+dmFsKTsKKwkJaWYgKHAtPmNvZGVjLmgyNjQubGV2ZWwgPCAwKSB7CisJCQltZmNfZXJyKCJMZXZlbCBudW1iZXIgaXMgd3JvbmdcbiIpOworCQkJcmV0ID0gcC0+Y29kZWMuaDI2NC5sZXZlbDsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTEVWRUw6CisJCXAtPmNvZGVjLm1wZWc0LmxldmVsX3Y0bDIgPSBjdHJsLT52YWw7CisJCXAtPmNvZGVjLm1wZWc0LmxldmVsID0gbXBlZzRfbGV2ZWwoY3RybC0+dmFsKTsKKwkJaWYgKHAtPmNvZGVjLm1wZWc0LmxldmVsIDwgMCkgeworCQkJbWZjX2VycigiTGV2ZWwgbnVtYmVyIGlzIHdyb25nXG4iKTsKKwkJCXJldCA9IHAtPmNvZGVjLm1wZWc0LmxldmVsOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREU6CisJCXAtPmNvZGVjLmgyNjQubG9vcF9maWx0ZXJfbW9kZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQUxQSEE6CisJCXAtPmNvZGVjLmgyNjQubG9vcF9maWx0ZXJfYWxwaGEgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0JFVEE6CisJCXAtPmNvZGVjLmgyNjQubG9vcF9maWx0ZXJfYmV0YSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFOgorCQlwLT5jb2RlYy5oMjY0LmVudHJvcHlfbW9kZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfTlVNX1JFRl9QSUNfRk9SX1A6CisJCXAtPmNvZGVjLmgyNjQubnVtX3JlZl9waWNfNHAgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0XzhYOF9UUkFOU0ZPUk06CisJCXAtPmNvZGVjLmgyNjQuXzh4OF90cmFuc2Zvcm0gPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEU6CisJCXAtPmNvZGVjLmgyNjQucmNfbWIgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfRlJBTUVfUVA6CisJCXAtPmNvZGVjLmgyNjQucmNfZnJhbWVfcXAgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01JTl9RUDoKKwkJcC0+Y29kZWMuaDI2NC5yY19taW5fcXAgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01BWF9RUDoKKwkJcC0+Y29kZWMuaDI2NC5yY19tYXhfcXAgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BfRlJBTUVfUVA6CisJCXAtPmNvZGVjLmgyNjQucmNfcF9mcmFtZV9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQl9GUkFNRV9RUDoKKwkJcC0+Y29kZWMuaDI2NC5yY19iX2ZyYW1lX3FwID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUDoKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19JX0ZSQU1FX1FQOgorCQlwLT5jb2RlYy5tcGVnNC5yY19mcmFtZV9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01JTl9RUDoKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NSU5fUVA6CisJCXAtPmNvZGVjLm1wZWc0LnJjX21pbl9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01BWF9RUDoKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NQVhfUVA6CisJCXAtPmNvZGVjLm1wZWc0LnJjX21heF9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BfRlJBTUVfUVA6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfUF9GUkFNRV9RUDoKKwkJcC0+Y29kZWMubXBlZzQucmNfcF9mcmFtZV9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0JfRlJBTUVfUVA6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfQl9GUkFNRV9RUDoKKwkJcC0+Y29kZWMubXBlZzQucmNfYl9mcmFtZV9xcCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfREFSSzoKKwkJcC0+Y29kZWMuaDI2NC5yY19tYl9kYXJrID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TTU9PVEg6CisJCXAtPmNvZGVjLmgyNjQucmNfbWJfc21vb3RoID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TVEFUSUM6CisJCXAtPmNvZGVjLmgyNjQucmNfbWJfc3RhdGljID0gY3RybC0+dmFsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19BQ1RJVklUWToKKwkJcC0+Y29kZWMuaDI2NC5yY19tYl9hY3Rpdml0eSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9FTkFCTEU6CisJCXAtPmNvZGVjLmgyNjQudnVpX3NhciA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JREM6CisJCXAtPmNvZGVjLmgyNjQudnVpX3Nhcl9pZGMgPSB2dWlfc2FyX2lkYyhjdHJsLT52YWwpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9XSURUSDoKKwkJcC0+Y29kZWMuaDI2NC52dWlfZXh0X3Nhcl93aWR0aCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfSEVJR0hUOgorCQlwLT5jb2RlYy5oMjY0LnZ1aV9leHRfc2FyX2hlaWdodCA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgorCQlwLT5jb2RlYy5oMjY0Lm9wZW5fZ29wID0gIWN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSV9QRVJJT0Q6CisJCXAtPmNvZGVjLmgyNjQub3Blbl9nb3Bfc2l6ZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEU6CisJCXN3aXRjaCAoY3RybC0+dmFsKSB7CisJCWNhc2UgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfU0lNUExFOgorCQkJcC0+Y29kZWMubXBlZzQucHJvZmlsZSA9CisJCQkJUzVQX0ZJTVZfRU5DX1BST0ZJTEVfTVBFRzRfU0lNUExFOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQURWQU5DRURfU0lNUExFOgorCQkJcC0+Y29kZWMubXBlZzQucHJvZmlsZSA9CisJCQlTNVBfRklNVl9FTkNfUFJPRklMRV9NUEVHNF9BRFZBTkNFRF9TSU1QTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1FQRUw6CisJCXAtPmNvZGVjLm1wZWc0LnF1YXJ0ZXJfcGl4ZWwgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiSW52YWxpZCBjb250cm9sLCBpZD0lZCwgdmFsPSVkXG4iLAorCQkJCQkJCWN0cmwtPmlkLCBjdHJsLT52YWwpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgczVwX21mY19lbmNfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IHM1cF9tZmNfZW5jX3NfY3RybCwKK307CisKK2ludCB2aWRpb2Nfc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHByaXYpOworCisJaWYgKGEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCWN0eC0+ZW5jX3BhcmFtcy5yY19mcmFtZXJhdGVfbnVtID0KKwkJCQkJYS0+cGFybS5vdXRwdXQudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yOworCQljdHgtPmVuY19wYXJhbXMucmNfZnJhbWVyYXRlX2Rlbm9tID0KKwkJCQkJYS0+cGFybS5vdXRwdXQudGltZXBlcmZyYW1lLm51bWVyYXRvcjsKKwl9IGVsc2UgeworCQltZmNfZXJyKCJTZXR0aW5nIEZQUyBpcyBvbmx5IHBvc3NpYmxlIGZvciB0aGUgb3V0cHV0IHF1ZXVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChwcml2KTsKKworCWlmIChhLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSB7CisJCWEtPnBhcm0ub3V0cHV0LnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9CisJCQkJCWN0eC0+ZW5jX3BhcmFtcy5yY19mcmFtZXJhdGVfbnVtOworCQlhLT5wYXJtLm91dHB1dC50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0KKwkJCQkJY3R4LT5lbmNfcGFyYW1zLnJjX2ZyYW1lcmF0ZV9kZW5vbTsKKwl9IGVsc2UgeworCQltZmNfZXJyKCJTZXR0aW5nIEZQUyBpcyBvbmx5IHBvc3NpYmxlIGZvciB0aGUgb3V0cHV0IHF1ZXVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHM1cF9tZmNfZW5jX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0ID0gdmlkaW9jX2VudW1fZm10X3ZpZF9vdXQsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZSA9IHZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZSwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXBfbXBsYW5lID0gdmlkaW9jX2dfZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX291dF9tcGxhbmUgPSB2aWRpb2NfZ19mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXBfbXBsYW5lID0gdmlkaW9jX3RyeV9mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lID0gdmlkaW9jX3RyeV9mbXQsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwX21wbGFuZSA9IHZpZGlvY19zX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXRfbXBsYW5lID0gdmlkaW9jX3NfZm10LAorCS52aWRpb2NfcmVxYnVmcyA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX3NfcGFybSA9IHZpZGlvY19zX3Bhcm0sCisJLnZpZGlvY19nX3Bhcm0gPSB2aWRpb2NfZ19wYXJtLAorfTsKKworc3RhdGljIGludCBjaGVja192Yl93aXRoX2ZtdChzdHJ1Y3QgczVwX21mY19mbXQgKmZtdCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCWludCBpOworCisJaWYgKCFmbXQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmbXQtPm51bV9wbGFuZXMgIT0gdmItPm51bV9wbGFuZXMpIHsKKwkJbWZjX2VycigiaW52YWxpZCBwbGFuZSBudW1iZXIgZm9yIHRoZSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGZtdC0+bnVtX3BsYW5lczsgaSsrKSB7CisJCWlmICghdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIodmIsIGkpKSB7CisJCQltZmNfZXJyKCJmYWlsZWQgdG8gZ2V0IHBsYW5lIGNvb2tpZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQltZmNfZGVidWcoMiwgImluZGV4OiAlZCwgcGxhbmVbJWRdIGNvb2tpZTogMHglMDh6eCIsCisJCQkJdmItPnY0bDJfYnVmLmluZGV4LCBpLAorCQkJCXZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKHZiLCBpKSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKmJ1Zl9jb3VudCwgdW5zaWduZWQgaW50ICpwbGFuZV9jb3VudCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHNpemVbXSwgdm9pZCAqYWxsb2NhdG9yc1tdKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHZxLT5kcnZfcHJpdik7CisKKwlpZiAoY3R4LT5zdGF0ZSAhPSBNRkNJTlNUX0dPVF9JTlNUKSB7CisJCW1mY19lcnIoImluYXZsaWQgc3RhdGU6ICVkXG4iLCBjdHgtPnN0YXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCWlmIChjdHgtPmRzdF9mbXQpCisJCQkqcGxhbmVfY291bnQgPSBjdHgtPmRzdF9mbXQtPm51bV9wbGFuZXM7CisJCWVsc2UKKwkJCSpwbGFuZV9jb3VudCA9IE1GQ19FTkNfQ0FQX1BMQU5FX0NPVU5UOworCQlpZiAoKmJ1Zl9jb3VudCA8IDEpCisJCQkqYnVmX2NvdW50ID0gMTsKKwkJaWYgKCpidWZfY291bnQgPiBNRkNfTUFYX0JVRkZFUlMpCisJCQkqYnVmX2NvdW50ID0gTUZDX01BWF9CVUZGRVJTOworCQlwc2l6ZVswXSA9IGN0eC0+ZW5jX2RzdF9idWZfc2l6ZTsKKwkJYWxsb2NhdG9yc1swXSA9IGN0eC0+ZGV2LT5hbGxvY19jdHhbTUZDX0JBTksxX0FMTE9DX0NUWF07CisJfSBlbHNlIGlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJaWYgKGN0eC0+c3JjX2ZtdCkKKwkJCSpwbGFuZV9jb3VudCA9IGN0eC0+c3JjX2ZtdC0+bnVtX3BsYW5lczsKKwkJZWxzZQorCQkJKnBsYW5lX2NvdW50ID0gTUZDX0VOQ19PVVRfUExBTkVfQ09VTlQ7CisKKwkJaWYgKCpidWZfY291bnQgPCAxKQorCQkJKmJ1Zl9jb3VudCA9IDE7CisJCWlmICgqYnVmX2NvdW50ID4gTUZDX01BWF9CVUZGRVJTKQorCQkJKmJ1Zl9jb3VudCA9IE1GQ19NQVhfQlVGRkVSUzsKKwkJcHNpemVbMF0gPSBjdHgtPmx1bWFfc2l6ZTsKKwkJcHNpemVbMV0gPSBjdHgtPmNocm9tYV9zaXplOworCQlhbGxvY2F0b3JzWzBdID0gY3R4LT5kZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzJfQUxMT0NfQ1RYXTsKKwkJYWxsb2NhdG9yc1sxXSA9IGN0eC0+ZGV2LT5hbGxvY19jdHhbTUZDX0JBTksyX0FMTE9DX0NUWF07CisJfSBlbHNlIHsKKwkJbWZjX2VycigiaW5hdmxpZCBxdWV1ZSB0eXBlOiAlZFxuIiwgdnEtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfdW5sb2NrKHN0cnVjdCB2YjJfcXVldWUgKnEpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltdXRleF91bmxvY2soJmRldi0+bWZjX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgczVwX21mY19sb2NrKHN0cnVjdCB2YjJfcXVldWUgKnEpCit7CisJc3RydWN0IHM1cF9tZmNfY3R4ICpjdHggPSBmaF90b19jdHgocS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPm1mY19tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19idWZfaW5pdChzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZiMl9xdWV1ZSAqdnEgPSB2Yi0+dmIyX3F1ZXVlOworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHZxLT5kcnZfcHJpdik7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCXJldCA9IGNoZWNrX3ZiX3dpdGhfZm10KGN0eC0+ZHN0X2ZtdCwgdmIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWkgPSB2Yi0+djRsMl9idWYuaW5kZXg7CisJCWN0eC0+ZHN0X2J1ZnNbaV0uYiA9IHZiOworCQljdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5zdHJlYW0gPQorCQkJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcih2YiwgMCk7CisJCWN0eC0+ZHN0X2J1ZnNfY250Kys7CisJfSBlbHNlIGlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsKKwkJcmV0ID0gY2hlY2tfdmJfd2l0aF9mbXQoY3R4LT5zcmNfZm10LCB2Yik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaSA9IHZiLT52NGwyX2J1Zi5pbmRleDsKKwkJY3R4LT5zcmNfYnVmc1tpXS5iID0gdmI7CisJCWN0eC0+c3JjX2J1ZnNbaV0uY29va2llLnJhdy5sdW1hID0KKwkJCQkJdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIodmIsIDApOworCQljdHgtPnNyY19idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21hID0KKwkJCQkJdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIodmIsIDEpOworCQljdHgtPnNyY19idWZzX2NudCsrOworCX0gZWxzZSB7CisJCW1mY19lcnIoImluYXZsaWQgcXVldWUgdHlwZTogJWRcbiIsIHZxLT50eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfYnVmX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCB2YjJfcXVldWUgKnZxID0gdmItPnZiMl9xdWV1ZTsKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eCh2cS0+ZHJ2X3ByaXYpOworCWludCByZXQ7CisKKwlpZiAodnEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSkgeworCQlyZXQgPSBjaGVja192Yl93aXRoX2ZtdChjdHgtPmRzdF9mbXQsIHZiKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQltZmNfZGVidWcoMiwgInBsYW5lIHNpemU6ICVsZCwgZHN0IHNpemU6ICVkXG4iLAorCQkJdmIyX3BsYW5lX3NpemUodmIsIDApLCBjdHgtPmVuY19kc3RfYnVmX3NpemUpOworCQlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgY3R4LT5lbmNfZHN0X2J1Zl9zaXplKSB7CisJCQltZmNfZXJyKCJwbGFuZSBzaXplIGlzIHRvbyBzbWFsbCBmb3IgY2FwdHVyZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAodnEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSB7CisJCXJldCA9IGNoZWNrX3ZiX3dpdGhfZm10KGN0eC0+c3JjX2ZtdCwgdmIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCW1mY19kZWJ1ZygyLCAicGxhbmUgc2l6ZTogJWxkLCBsdW1hIHNpemU6ICVkXG4iLAorCQkJdmIyX3BsYW5lX3NpemUodmIsIDApLCBjdHgtPmx1bWFfc2l6ZSk7CisJCW1mY19kZWJ1ZygyLCAicGxhbmUgc2l6ZTogJWxkLCBjaHJvbWEgc2l6ZTogJWRcbiIsCisJCQl2YjJfcGxhbmVfc2l6ZSh2YiwgMSksIGN0eC0+Y2hyb21hX3NpemUpOworCQlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgY3R4LT5sdW1hX3NpemUgfHwKKwkJICAgIHZiMl9wbGFuZV9zaXplKHZiLCAxKSA8IGN0eC0+Y2hyb21hX3NpemUpIHsKKwkJCW1mY19lcnIoInBsYW5lIHNpemUgaXMgdG9vIHNtYWxsIGZvciBvdXRwdXRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQltZmNfZXJyKCJpbmF2bGlkIHF1ZXVlIHR5cGU6ICVkXG4iLCB2cS0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfbWZjX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQoreworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHEtPmRydl9wcml2KTsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmY3R4LT5jdHJsX2hhbmRsZXIpOworCS8qIElmIGNvbnRleHQgaXMgcmVhZHkgdGhlbiBkZXYgPSB3b3JrLT5kYXRhO3NjaGVkdWxlIGl0IHRvIHJ1biAqLworCWlmIChzNXBfbWZjX2N0eF9yZWFkeShjdHgpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvbmRsb2NrLCBmbGFncyk7CisJCXNldF9iaXQoY3R4LT5udW0sICZkZXYtPmN0eF93b3JrX2JpdHMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvbmRsb2NrLCBmbGFncyk7CisJfQorCXM1cF9tZmNfdHJ5X3J1bihkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHEtPmRydl9wcml2KTsKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJaWYgKChjdHgtPnN0YXRlID09IE1GQ0lOU1RfRklOSVNISU5HIHx8CisJCWN0eC0+c3RhdGUgPT0gTUZDSU5TVF9SVU5OSU5HKSAmJgorCQlkZXYtPmN1cnJfY3R4ID09IGN0eC0+bnVtICYmIGRldi0+aHdfbG9jaykgeworCQljdHgtPnN0YXRlID0gTUZDSU5TVF9BQk9SVDsKKwkJczVwX21mY193YWl0X2Zvcl9kb25lX2N0eChjdHgsIFM1UF9GSU1WX1IySF9DTURfRlJBTUVfRE9ORV9SRVQsCisJCQkJCSAgMCk7CisJfQorCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0ZJTklTSEVEOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlpZiAocS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7CisJCXM1cF9tZmNfY2xlYW51cF9xdWV1ZSgmY3R4LT5kc3RfcXVldWUsICZjdHgtPnZxX2RzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjdHgtPmRzdF9xdWV1ZSk7CisJCWN0eC0+ZHN0X3F1ZXVlX2NudCA9IDA7CisJfQorCWlmIChxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgeworCQljbGVhbnVwX3JlZl9xdWV1ZShjdHgpOworCQlzNXBfbWZjX2NsZWFudXBfcXVldWUoJmN0eC0+c3JjX3F1ZXVlLCAmY3R4LT52cV9zcmMpOworCQlJTklUX0xJU1RfSEVBRCgmY3R4LT5zcmNfcXVldWUpOworCQljdHgtPnNyY19xdWV1ZV9jbnQgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczVwX21mY19idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCB2YjJfcXVldWUgKnZxID0gdmItPnZiMl9xdWV1ZTsKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eCh2cS0+ZHJ2X3ByaXYpOworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgczVwX21mY19idWYgKm1mY19idWY7CisKKwlpZiAoY3R4LT5zdGF0ZSA9PSBNRkNJTlNUX0VSUk9SKSB7CisJCXZiMl9idWZmZXJfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJCWNsZWFudXBfcmVmX3F1ZXVlKGN0eCk7CisJCXJldHVybjsKKwl9CisJaWYgKHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKKwkJbWZjX2J1ZiA9ICZjdHgtPmRzdF9idWZzW3ZiLT52NGwyX2J1Zi5pbmRleF07CisJCW1mY19idWYtPnVzZWQgPSAwOworCQkvKiBNYXJrIGRlc3RpbmF0aW9uIGFzIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IE1GQyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJm1mY19idWYtPmxpc3QsICZjdHgtPmRzdF9xdWV1ZSk7CisJCWN0eC0+ZHN0X3F1ZXVlX2NudCsrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgeworCQltZmNfYnVmID0gJmN0eC0+c3JjX2J1ZnNbdmItPnY0bDJfYnVmLmluZGV4XTsKKwkJbWZjX2J1Zi0+dXNlZCA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJaWYgKHZiLT52NGwyX3BsYW5lc1swXS5ieXRlc3VzZWQgPT0gMCkgeworCQkJbWZjX2RlYnVnKDEsICJjaGFuZ2Ugc3RhdGUgdG8gRklOSVNISU5HXG4iKTsKKwkJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0ZJTklTSElORzsKKwkJCXZiMl9idWZmZXJfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKKwkJCWNsZWFudXBfcmVmX3F1ZXVlKGN0eCk7CisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZtZmNfYnVmLT5saXN0LCAmY3R4LT5zcmNfcXVldWUpOworCQkJY3R4LT5zcmNfcXVldWVfY250Kys7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJbWZjX2VycigidW5zdXBwb3J0ZWQgYnVmZmVyIHR5cGUgKCVkKVxuIiwgdnEtPnR5cGUpOworCX0KKwlpZiAoczVwX21mY19jdHhfcmVhZHkoY3R4KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCQlzZXRfYml0KGN0eC0+bnVtLCAmZGV2LT5jdHhfd29ya19iaXRzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCX0KKwlzNXBfbWZjX3RyeV9ydW4oZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCB2YjJfb3BzIHM1cF9tZmNfZW5jX3FvcHMgPSB7CisJLnF1ZXVlX3NldHVwCQk9IHM1cF9tZmNfcXVldWVfc2V0dXAsCisJLndhaXRfcHJlcGFyZQkJPSBzNXBfbWZjX3VubG9jaywKKwkud2FpdF9maW5pc2gJCT0gczVwX21mY19sb2NrLAorCS5idWZfaW5pdAkJPSBzNXBfbWZjX2J1Zl9pbml0LAorCS5idWZfcHJlcGFyZQkJPSBzNXBfbWZjX2J1Zl9wcmVwYXJlLAorCS5zdGFydF9zdHJlYW1pbmcJPSBzNXBfbWZjX3N0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gczVwX21mY19zdG9wX3N0cmVhbWluZywKKwkuYnVmX3F1ZXVlCQk9IHM1cF9tZmNfYnVmX3F1ZXVlLAorfTsKKworc3RydWN0IHM1cF9tZmNfY29kZWNfb3BzICpnZXRfZW5jX2NvZGVjX29wcyh2b2lkKQoreworCXJldHVybiAmZW5jb2Rlcl9jb2RlY19vcHM7Cit9CisKK3N0cnVjdCB2YjJfb3BzICpnZXRfZW5jX3F1ZXVlX29wcyh2b2lkKQoreworCXJldHVybiAmczVwX21mY19lbmNfcW9wczsKK30KKworY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpnZXRfZW5jX3Y0bDJfaW9jdGxfb3BzKHZvaWQpCit7CisJcmV0dXJuICZzNXBfbWZjX2VuY19pb2N0bF9vcHM7Cit9CisKKyNkZWZpbmUgSVNfTUZDNTFfUFJJVih4KSAoKFY0TDJfQ1RSTF9JRDJDTEFTUyh4KSA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgXAorCQkJCQkJJiYgVjRMMl9DVFJMX0RSSVZFUl9QUklWKHgpKQorCitpbnQgczVwX21mY19lbmNfY3RybHNfc2V0dXAoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHY0bDJfY3RybF9jb25maWcgY2ZnOworCWludCBpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmY3R4LT5jdHJsX2hhbmRsZXIsIE5VTV9DVFJMUyk7CisJaWYgKGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yKSB7CisJCW1mY19lcnIoInY0bDJfY3RybF9oYW5kbGVyX2luaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUkxTOyBpKyspIHsKKwkJaWYgKElTX01GQzUxX1BSSVYoY29udHJvbHNbaV0uaWQpKSB7CisJCQljZmcub3BzID0gJnM1cF9tZmNfZW5jX2N0cmxfb3BzOworCQkJY2ZnLmlkID0gY29udHJvbHNbaV0uaWQ7CisJCQljZmcubWluID0gY29udHJvbHNbaV0ubWluaW11bTsKKwkJCWNmZy5tYXggPSBjb250cm9sc1tpXS5tYXhpbXVtOworCQkJY2ZnLmRlZiA9IGNvbnRyb2xzW2ldLmRlZmF1bHRfdmFsdWU7CisJCQljZmcubmFtZSA9IGNvbnRyb2xzW2ldLm5hbWU7CisJCQljZmcudHlwZSA9IGNvbnRyb2xzW2ldLnR5cGU7CisJCQljZmcuZmxhZ3MgPSAwOworCisJCQlpZiAoY2ZnLnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkgeworCQkJCWNmZy5zdGVwID0gMDsKKwkJCQljZmcubWVudV9za2lwX21hc2sgPSBjZmcubWVudV9za2lwX21hc2s7CisJCQkJY2ZnLnFtZW51ID0gbWZjNTFfZ2V0X21lbnUoY2ZnLmlkKTsKKwkJCX0gZWxzZSB7CisJCQkJY2ZnLnN0ZXAgPSBjb250cm9sc1tpXS5zdGVwOworCQkJCWNmZy5tZW51X3NraXBfbWFzayA9IDA7CisJCQl9CisJCQljdHgtPmN0cmxzW2ldID0gdjRsMl9jdHJsX25ld19jdXN0b20oJmN0eC0+Y3RybF9oYW5kbGVyLAorCQkJCQkmY2ZnLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjb250cm9sc1tpXS50eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpIHsKKwkJCQljdHgtPmN0cmxzW2ldID0gdjRsMl9jdHJsX25ld19zdGRfbWVudSgKKwkJCQkJJmN0eC0+Y3RybF9oYW5kbGVyLAorCQkJCQkmczVwX21mY19lbmNfY3RybF9vcHMsIGNvbnRyb2xzW2ldLmlkLAorCQkJCQljb250cm9sc1tpXS5tYXhpbXVtLCAwLAorCQkJCQljb250cm9sc1tpXS5kZWZhdWx0X3ZhbHVlKTsKKwkJCX0gZWxzZSB7CisJCQkJY3R4LT5jdHJsc1tpXSA9IHY0bDJfY3RybF9uZXdfc3RkKAorCQkJCQkmY3R4LT5jdHJsX2hhbmRsZXIsCisJCQkJCSZzNXBfbWZjX2VuY19jdHJsX29wcywgY29udHJvbHNbaV0uaWQsCisJCQkJCWNvbnRyb2xzW2ldLm1pbmltdW0sCisJCQkJCWNvbnRyb2xzW2ldLm1heGltdW0sIGNvbnRyb2xzW2ldLnN0ZXAsCisJCQkJCWNvbnRyb2xzW2ldLmRlZmF1bHRfdmFsdWUpOworCQkJfQorCQl9CisJCWlmIChjdHgtPmN0cmxfaGFuZGxlci5lcnJvcikgeworCQkJbWZjX2VycigiQWRkaW5nIGNvbnRyb2wgKCVkKSBmYWlsZWRcbiIsIGkpOworCQkJcmV0dXJuIGN0eC0+Y3RybF9oYW5kbGVyLmVycm9yOworCQl9CisJCWlmIChjb250cm9sc1tpXS5pc192b2xhdGlsZSAmJiBjdHgtPmN0cmxzW2ldKQorCQkJY3R4LT5jdHJsc1tpXS0+aXNfdm9sYXRpbGUgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzNXBfbWZjX2VuY19jdHJsc19kZWxldGUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJaW50IGk7CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZjdHgtPmN0cmxfaGFuZGxlcik7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DVFJMUzsgaSsrKQorCQljdHgtPmN0cmxzW2ldID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2VuYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfZW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1YmRkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2VuYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19lbmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIFM1UF9NRkNfRU5DX0hfCisjZGVmaW5lIFM1UF9NRkNfRU5DX0hfCisKK3N0cnVjdCBzNXBfbWZjX2NvZGVjX29wcyAqZ2V0X2VuY19jb2RlY19vcHModm9pZCk7CitzdHJ1Y3QgdmIyX29wcyAqZ2V0X2VuY19xdWV1ZV9vcHModm9pZCk7Citjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgKmdldF9lbmNfdjRsMl9pb2N0bF9vcHModm9pZCk7CitzdHJ1Y3QgczVwX21mY19mbXQgKmdldF9lbmNfZGVmX2ZtdChib29sIHNyYyk7CitpbnQgczVwX21mY19lbmNfY3RybHNfc2V0dXAoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOwordm9pZCBzNXBfbWZjX2VuY19jdHJsc19kZWxldGUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOworCisjZW5kaWYgLyogUzVQX01GQ19FTkNfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19pbnRyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyZjhiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2ludHIuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogZHJpdmVycy9tZWRpYS92aWRlby9zYW1zdW5nL21mYzUvczVwX21mY19pbnRyLmMKKyAqCisgKiBDIGZpbGUgZm9yIFNhbXN1bmcgTUZDIChNdWx0aSBGdW5jdGlvbiBDb2RlYyAtIEZJTVYpIGRyaXZlcgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB1c2VkIHRvIHdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbi4KKyAqCisgKiBLYW1pbCBEZWJza2ksIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJyZWdzLW1mYy5oIgorI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisjaW5jbHVkZSAiczVwX21mY19kZWJ1Zy5oIgorI2luY2x1ZGUgInM1cF9tZmNfaW50ci5oIgorCitpbnQgczVwX21mY193YWl0X2Zvcl9kb25lX2RldihzdHJ1Y3QgczVwX21mY19kZXYgKmRldiwgaW50IGNvbW1hbmQpCit7CisJaW50IHJldDsKKworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+cXVldWUsCisJCShkZXYtPmludF9jb25kICYmIChkZXYtPmludF90eXBlID09IGNvbW1hbmQKKwkJfHwgZGV2LT5pbnRfdHlwZSA9PSBTNVBfRklNVl9SMkhfQ01EX0VSUl9SRVQpKSwKKwkJbXNlY3NfdG9famlmZmllcyhNRkNfSU5UX1RJTUVPVVQpKTsKKwlpZiAocmV0ID09IDApIHsKKwkJbWZjX2VycigiSW50ZXJydXB0IChkZXYtPmludF90eXBlOiVkLCBjb21tYW5kOiVkKSB0aW1lZCBvdXRcbiIsCisJCQkJCQkJZGV2LT5pbnRfdHlwZSwgY29tbWFuZCk7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgeworCQltZmNfZXJyKCJJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbFxuIik7CisJCXJldHVybiAxOworCX0KKwltZmNfZGVidWcoMSwgIkZpbmlzaGVkIHdhaXRpbmcgKGRldi0+aW50X3R5cGU6JWQsIGNvbW1hbmQ6ICVkKVxuIiwKKwkJCQkJCQlkZXYtPmludF90eXBlLCBjb21tYW5kKTsKKwlpZiAoZGV2LT5pbnRfdHlwZSA9PSBTNVBfRklNVl9SMkhfQ01EX0VSUl9SRVQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCit2b2lkIHM1cF9tZmNfY2xlYW5fZGV2X2ludF9mbGFncyhzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwlkZXYtPmludF9jb25kID0gMDsKKwlkZXYtPmludF90eXBlID0gMDsKKwlkZXYtPmludF9lcnIgPSAwOworfQorCitpbnQgczVwX21mY193YWl0X2Zvcl9kb25lX2N0eChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJCQkgICAgaW50IGNvbW1hbmQsIGludCBpbnRlcnJ1cHQpCit7CisJaW50IHJldDsKKworCWlmIChpbnRlcnJ1cHQpIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY3R4LT5xdWV1ZSwKKwkJCQkoY3R4LT5pbnRfY29uZCAmJiAoY3R4LT5pbnRfdHlwZSA9PSBjb21tYW5kCisJCQl8fCBjdHgtPmludF90eXBlID09IFM1UF9GSU1WX1IySF9DTURfRVJSX1JFVCkpLAorCQkJCQltc2Vjc190b19qaWZmaWVzKE1GQ19JTlRfVElNRU9VVCkpOworCX0gZWxzZSB7CisJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChjdHgtPnF1ZXVlLAorCQkJCShjdHgtPmludF9jb25kICYmIChjdHgtPmludF90eXBlID09IGNvbW1hbmQKKwkJCXx8IGN0eC0+aW50X3R5cGUgPT0gUzVQX0ZJTVZfUjJIX0NNRF9FUlJfUkVUKSksCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoTUZDX0lOVF9USU1FT1VUKSk7CisJfQorCWlmIChyZXQgPT0gMCkgeworCQltZmNfZXJyKCJJbnRlcnJ1cHQgKGN0eC0+aW50X3R5cGU6JWQsIGNvbW1hbmQ6JWQpIHRpbWVkIG91dFxuIiwKKwkJCQkJCQljdHgtPmludF90eXBlLCBjb21tYW5kKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCW1mY19lcnIoIkludGVycnVwdGVkIGJ5IGEgc2lnbmFsXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCW1mY19kZWJ1ZygxLCAiRmluaXNoZWQgd2FpdGluZyAoY3R4LT5pbnRfdHlwZTolZCwgY29tbWFuZDogJWQpXG4iLAorCQkJCQkJCWN0eC0+aW50X3R5cGUsIGNvbW1hbmQpOworCWlmIChjdHgtPmludF90eXBlID09IFM1UF9GSU1WX1IySF9DTURfRVJSX1JFVCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCWN0eC0+aW50X2NvbmQgPSAwOworCWN0eC0+aW50X3R5cGUgPSAwOworCWN0eC0+aW50X2VyciA9IDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2ludHIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX2ludHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjJkNzczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfaW50ci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBkcml2ZXJzL21lZGlhL3ZpZGVvL3NhbXN1bmcvbWZjNS9zNXBfbWZjX2ludHIuaAorICoKKyAqIEhlYWRlciBmaWxlIGZvciBTYW1zdW5nIE1GQyAoTXVsdGkgRnVuY3Rpb24gQ29kZWMgLSBGSU1WKSBkcml2ZXIKKyAqIEl0IGNvbnRhaW5zIHdhaXRpbmcgZnVuY3Rpb25zIGRlY2xhcmF0aW9ucy4KKyAqCisgKiBLYW1pbCBEZWJza2ksIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBTNVBfTUZDX0lOVFJfSF8KKyNkZWZpbmUgUzVQX01GQ19JTlRSX0hfCisKKyNpbmNsdWRlICJzNXBfbWZjX2NvbW1vbi5oIgorCitpbnQgczVwX21mY193YWl0X2Zvcl9kb25lX2N0eChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJCSAgICAgIGludCBjb21tYW5kLCBpbnQgaW50ZXJydXB0KTsKK2ludCBzNXBfbWZjX3dhaXRfZm9yX2RvbmVfZGV2KHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2LCBpbnQgY29tbWFuZCk7Cit2b2lkIHM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7Cit2b2lkIHM1cF9tZmNfY2xlYW5fZGV2X2ludF9mbGFncyhzdHJ1Y3QgczVwX21mY19kZXYgKmRldik7CisKKyNlbmRpZiAvKiBTNVBfTUZDX0lOVFJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX29wci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfb3ByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyMzkxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX29wci5jCkBAIC0wLDAgKzEsMTM5NyBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvdmlkZW8vc2Ftc3VuZy9tZmM1L3M1cF9tZmNfb3ByLmMKKyAqCisgKiBTYW1zdW5nIE1GQyAoTXVsdGkgRnVuY3Rpb24gQ29kZWMgLSBGSU1WKSBkcml2ZXIKKyAqIFRoaXMgZmlsZSBjb250YWlucyBodyByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqCisgKiBLYW1pbCBEZWJza2ksIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgInJlZ3MtbWZjLmgiCisjaW5jbHVkZSAiczVwX21mY19jbWQuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2NvbW1vbi5oIgorI2luY2x1ZGUgInM1cF9tZmNfY3RybC5oIgorI2luY2x1ZGUgInM1cF9tZmNfZGVidWcuaCIKKyNpbmNsdWRlICJzNXBfbWZjX2ludHIuaCIKKyNpbmNsdWRlICJzNXBfbWZjX29wci5oIgorI2luY2x1ZGUgInM1cF9tZmNfcG0uaCIKKyNpbmNsdWRlICJzNXBfbWZjX3NobS5oIgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIE9GRlNFVEEoeCkJCSgoKHgpIC0gZGV2LT5iYW5rMSkgPj4gTUZDX09GRlNFVF9TSElGVCkKKyNkZWZpbmUgT0ZGU0VUQih4KQkJKCgoeCkgLSBkZXYtPmJhbmsyKSA+PiBNRkNfT0ZGU0VUX1NISUZUKQorCisvKiBBbGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVycyBmb3IgZGVjb2RpbmcgKi8KK2ludCBzNXBfbWZjX2FsbG9jX2RlY190ZW1wX2J1ZmZlcnMoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJdm9pZCAqZGVzY192aXJ0OworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwljdHgtPmRlc2NfYnVmID0gdmIyX2RtYV9jb250aWdfbWVtb3BzLmFsbG9jKAorCQkJZGV2LT5hbGxvY19jdHhbTUZDX0JBTksxX0FMTE9DX0NUWF0sIERFU0NfQlVGX1NJWkUpOworCWlmIChJU19FUlJfVkFMVUUoKGludCljdHgtPmRlc2NfYnVmKSkgeworCQljdHgtPmRlc2NfYnVmID0gMDsKKwkJbWZjX2VycigiQWxsb2NhdGluZyBERVNDIGJ1ZmZlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY3R4LT5kZXNjX3BoeXMgPSBzNXBfbWZjX21lbV9jb29raWUoCisJCQlkZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzFfQUxMT0NfQ1RYXSwgY3R4LT5kZXNjX2J1Zik7CisJQlVHX09OKGN0eC0+ZGVzY19waHlzICYgKCgxIDw8IE1GQ19CQU5LMV9BTElHTl9PUkRFUikgLSAxKSk7CisJZGVzY192aXJ0ID0gdmIyX2RtYV9jb250aWdfbWVtb3BzLnZhZGRyKGN0eC0+ZGVzY19idWYpOworCWlmIChkZXNjX3ZpcnQgPT0gTlVMTCkgeworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KGN0eC0+ZGVzY19idWYpOworCQljdHgtPmRlc2NfcGh5cyA9IDA7CisJCWN0eC0+ZGVzY19idWYgPSAwOworCQltZmNfZXJyKCJSZW1hcHBpbmcgREVTQyBidWZmZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZXNjX3ZpcnQsIDAsIERFU0NfQlVGX1NJWkUpOworCXdtYigpOworCXJldHVybiAwOworfQorCisvKiBSZWxlYXNlIHRlbXBvcmFyeSBidWZmZXJzIGZvciBkZWNvZGluZyAqLwordm9pZCBzNXBfbWZjX3JlbGVhc2VfZGVjX2Rlc2NfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCWlmIChjdHgtPmRlc2NfcGh5cykgeworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KGN0eC0+ZGVzY19idWYpOworCQljdHgtPmRlc2NfcGh5cyA9IDA7CisJCWN0eC0+ZGVzY19idWYgPSAwOworCX0KK30KKworLyogQWxsb2NhdGUgY29kZWMgYnVmZmVycyAqLworaW50IHM1cF9tZmNfYWxsb2NfY29kZWNfYnVmZmVycyhzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXVuc2lnbmVkIGludCBlbmNfcmVmX3lfc2l6ZSA9IDA7CisJdW5zaWduZWQgaW50IGVuY19yZWZfY19zaXplID0gMDsKKwl1bnNpZ25lZCBpbnQgZ3VhcmRfd2lkdGgsIGd1YXJkX2hlaWdodDsKKworCWlmIChjdHgtPnR5cGUgPT0gTUZDSU5TVF9ERUNPREVSKSB7CisJCW1mY19kZWJ1ZygyLCAiTHVtYSBzaXplOiVkIENocm9tYSBzaXplOiVkIE1WIHNpemU6JWRcbiIsCisJCQkgIGN0eC0+bHVtYV9zaXplLCBjdHgtPmNocm9tYV9zaXplLCBjdHgtPm12X3NpemUpOworCQltZmNfZGVidWcoMiwgIlRvdGFscyBidWZzOiAlZFxuIiwgY3R4LT50b3RhbF9kcGJfY291bnQpOworCX0gZWxzZSBpZiAoY3R4LT50eXBlID09IE1GQ0lOU1RfRU5DT0RFUikgeworCQllbmNfcmVmX3lfc2l6ZSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLCBTNVBfRklNVl9OVjEyTVRfSEFMSUdOKQorCQkJKiBBTElHTihjdHgtPmltZ19oZWlnaHQsIFM1UF9GSU1WX05WMTJNVF9WQUxJR04pOworCQllbmNfcmVmX3lfc2l6ZSA9IEFMSUdOKGVuY19yZWZfeV9zaXplLCBTNVBfRklNVl9OVjEyTVRfU0FMSUdOKTsKKworCQlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfRU5DKSB7CisJCQllbmNfcmVmX2Nfc2l6ZSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLAorCQkJCQkJUzVQX0ZJTVZfTlYxMk1UX0hBTElHTikKKwkJCQkJCSogQUxJR04oY3R4LT5pbWdfaGVpZ2h0ID4+IDEsCisJCQkJCQlTNVBfRklNVl9OVjEyTVRfVkFMSUdOKTsKKwkJCWVuY19yZWZfY19zaXplID0gQUxJR04oZW5jX3JlZl9jX3NpemUsCisJCQkJCQkJUzVQX0ZJTVZfTlYxMk1UX1NBTElHTik7CisJCX0gZWxzZSB7CisJCQlndWFyZF93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoICsgMTYsCisJCQkJCQkJUzVQX0ZJTVZfTlYxMk1UX0hBTElHTik7CisJCQlndWFyZF9oZWlnaHQgPSBBTElHTigoY3R4LT5pbWdfaGVpZ2h0ID4+IDEpICsgNCwKKwkJCQkJCQlTNVBfRklNVl9OVjEyTVRfVkFMSUdOKTsKKwkJCWVuY19yZWZfY19zaXplID0gQUxJR04oZ3VhcmRfd2lkdGggKiBndWFyZF9oZWlnaHQsCisJCQkJCSAgICAgICBTNVBfRklNVl9OVjEyTVRfU0FMSUdOKTsKKwkJfQorCQltZmNfZGVidWcoMiwgInJlY29uIGx1bWEgc2l6ZTogJWQgY2hyb21hIHNpemU6ICVkXG4iLAorCQkJICBlbmNfcmVmX3lfc2l6ZSwgZW5jX3JlZl9jX3NpemUpOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDb2RlY3MgaGF2ZSBkaWZmZXJlbnQgbWVtb3J5IHJlcXVpcmVtZW50cyAqLworCXN3aXRjaCAoY3R4LT5jb2RlY19tb2RlKSB7CisJY2FzZSBTNVBfRklNVl9DT0RFQ19IMjY0X0RFQzoKKwkJY3R4LT5iYW5rMV9zaXplID0KKwkJICAgIEFMSUdOKFM1UF9GSU1WX0RFQ19OQl9JUF9TSVpFICsKKwkJCQkJUzVQX0ZJTVZfREVDX1ZFUlRfTkJfTVZfU0laRSwKKwkJCQkJUzVQX0ZJTVZfREVDX0JVRl9BTElHTik7CisJCWN0eC0+YmFuazJfc2l6ZSA9IGN0eC0+dG90YWxfZHBiX2NvdW50ICogY3R4LT5tdl9zaXplOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1WX0NPREVDX01QRUc0X0RFQzoKKwkJY3R4LT5iYW5rMV9zaXplID0KKwkJICAgIEFMSUdOKFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkUgKworCQkJCSAgICAgUzVQX0ZJTVZfREVDX1VQTkJfTVZfU0laRSArCisJCQkJICAgICBTNVBfRklNVl9ERUNfU1VCX0FOQ0hPUl9NVl9TSVpFICsKKwkJCQkgICAgIFM1UF9GSU1WX0RFQ19TVFhfUEFSU0VSX1NJWkUgKworCQkJCSAgICAgUzVQX0ZJTVZfREVDX09WRVJMQVBfVFJBTlNGT1JNX1NJWkUsCisJCQkJICAgICBTNVBfRklNVl9ERUNfQlVGX0FMSUdOKTsKKwkJY3R4LT5iYW5rMl9zaXplID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNVl9DT0RFQ19WQzFSQ1ZfREVDOgorCWNhc2UgUzVQX0ZJTVZfQ09ERUNfVkMxX0RFQzoKKwkJY3R4LT5iYW5rMV9zaXplID0KKwkJICAgIEFMSUdOKFM1UF9GSU1WX0RFQ19PVkVSTEFQX1RSQU5TRk9STV9TSVpFICsKKwkJCSAgICAgUzVQX0ZJTVZfREVDX1VQTkJfTVZfU0laRSArCisJCQkgICAgIFM1UF9GSU1WX0RFQ19TVUJfQU5DSE9SX01WX1NJWkUgKworCQkJICAgICBTNVBfRklNVl9ERUNfTkJfRENBQ19TSVpFICsKKwkJCSAgICAgMyAqIFM1UF9GSU1WX0RFQ19WQzFfQklUUExBTkVfU0laRSwKKwkJCSAgICAgUzVQX0ZJTVZfREVDX0JVRl9BTElHTik7CisJCWN0eC0+YmFuazJfc2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTVZfQ09ERUNfTVBFRzJfREVDOgorCQljdHgtPmJhbmsxX3NpemUgPSAwOworCQljdHgtPmJhbmsyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1WX0NPREVDX0gyNjNfREVDOgorCQljdHgtPmJhbmsxX3NpemUgPQorCQkgICAgQUxJR04oUzVQX0ZJTVZfREVDX09WRVJMQVBfVFJBTlNGT1JNX1NJWkUgKworCQkJICAgICBTNVBfRklNVl9ERUNfVVBOQl9NVl9TSVpFICsKKwkJCSAgICAgUzVQX0ZJTVZfREVDX1NVQl9BTkNIT1JfTVZfU0laRSArCisJCQkgICAgIFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkUsCisJCQkgICAgIFM1UF9GSU1WX0RFQ19CVUZfQUxJR04pOworCQljdHgtPmJhbmsyX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1WX0NPREVDX0gyNjRfRU5DOgorCQljdHgtPmJhbmsxX3NpemUgPSAoZW5jX3JlZl95X3NpemUgKiAyKSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX1VQTVZfU0laRSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX0NPTEZMR19TSVpFICsKKwkJCQkgICBTNVBfRklNVl9FTkNfSU5UUkFNRF9TSVpFICsKKwkJCQkgICBTNVBfRklNVl9FTkNfTkJPUklORk9fU0laRTsKKwkJY3R4LT5iYW5rMl9zaXplID0gKGVuY19yZWZfeV9zaXplICogMikgKworCQkJCSAgIChlbmNfcmVmX2Nfc2l6ZSAqIDQpICsKKwkJCQkgICBTNVBfRklNVl9FTkNfSU5UUkFQUkVEX1NJWkU7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTVZfQ09ERUNfTVBFRzRfRU5DOgorCQljdHgtPmJhbmsxX3NpemUgPSAoZW5jX3JlZl95X3NpemUgKiAyKSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX1VQTVZfU0laRSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX0NPTEZMR19TSVpFICsKKwkJCQkgICBTNVBfRklNVl9FTkNfQUNEQ0NPRUZfU0laRTsKKwkJY3R4LT5iYW5rMl9zaXplID0gKGVuY19yZWZfeV9zaXplICogMikgKworCQkJCSAgIChlbmNfcmVmX2Nfc2l6ZSAqIDQpOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1WX0NPREVDX0gyNjNfRU5DOgorCQljdHgtPmJhbmsxX3NpemUgPSAoZW5jX3JlZl95X3NpemUgKiAyKSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX1VQTVZfU0laRSArCisJCQkJICAgUzVQX0ZJTVZfRU5DX0FDRENDT0VGX1NJWkU7CisJCWN0eC0+YmFuazJfc2l6ZSA9IChlbmNfcmVmX3lfc2l6ZSAqIDIpICsKKwkJCQkgICAoZW5jX3JlZl9jX3NpemUgKiA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCS8qIEFsbG9jYXRlIG9ubHkgaWYgbWVtb3J5IGZyb20gYmFuayAxIGlzIG5lY2Vzc2FyeSAqLworCWlmIChjdHgtPmJhbmsxX3NpemUgPiAwKSB7CisJCWN0eC0+YmFuazFfYnVmID0gdmIyX2RtYV9jb250aWdfbWVtb3BzLmFsbG9jKAorCQlkZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzFfQUxMT0NfQ1RYXSwgY3R4LT5iYW5rMV9zaXplKTsKKwkJaWYgKElTX0VSUihjdHgtPmJhbmsxX2J1ZikpIHsKKwkJCWN0eC0+YmFuazFfYnVmID0gMDsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJCdWYgYWxsb2MgZm9yIGRlY29kaW5nIGZhaWxlZCAocG9ydCBBKVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljdHgtPmJhbmsxX3BoeXMgPSBzNXBfbWZjX21lbV9jb29raWUoCisJCWRldi0+YWxsb2NfY3R4W01GQ19CQU5LMV9BTExPQ19DVFhdLCBjdHgtPmJhbmsxX2J1Zik7CisJCUJVR19PTihjdHgtPmJhbmsxX3BoeXMgJiAoKDEgPDwgTUZDX0JBTksxX0FMSUdOX09SREVSKSAtIDEpKTsKKwl9CisJLyogQWxsb2NhdGUgb25seSBpZiBtZW1vcnkgZnJvbSBiYW5rIDIgaXMgbmVjZXNzYXJ5ICovCisJaWYgKGN0eC0+YmFuazJfc2l6ZSA+IDApIHsKKwkJY3R4LT5iYW5rMl9idWYgPSB2YjJfZG1hX2NvbnRpZ19tZW1vcHMuYWxsb2MoCisJCWRldi0+YWxsb2NfY3R4W01GQ19CQU5LMl9BTExPQ19DVFhdLCBjdHgtPmJhbmsyX3NpemUpOworCQlpZiAoSVNfRVJSKGN0eC0+YmFuazJfYnVmKSkgeworCQkJY3R4LT5iYW5rMl9idWYgPSAwOworCQkJbWZjX2VycigiQnVmIGFsbG9jIGZvciBkZWNvZGluZyBmYWlsZWQgKHBvcnQgQilcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY3R4LT5iYW5rMl9waHlzID0gczVwX21mY19tZW1fY29va2llKAorCQlkZXYtPmFsbG9jX2N0eFtNRkNfQkFOSzJfQUxMT0NfQ1RYXSwgY3R4LT5iYW5rMl9idWYpOworCQlCVUdfT04oY3R4LT5iYW5rMl9waHlzICYgKCgxIDw8IE1GQ19CQU5LMl9BTElHTl9PUkRFUikgLSAxKSk7CisJfQorCXJldHVybiAwOworfQorCisvKiBSZWxlYXNlIGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciBjb2RlYyAqLwordm9pZCBzNXBfbWZjX3JlbGVhc2VfY29kZWNfYnVmZmVycyhzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlpZiAoY3R4LT5iYW5rMV9idWYpIHsKKwkJdmIyX2RtYV9jb250aWdfbWVtb3BzLnB1dChjdHgtPmJhbmsxX2J1Zik7CisJCWN0eC0+YmFuazFfYnVmID0gMDsKKwkJY3R4LT5iYW5rMV9waHlzID0gMDsKKwkJY3R4LT5iYW5rMV9zaXplID0gMDsKKwl9CisJaWYgKGN0eC0+YmFuazJfYnVmKSB7CisJCXZiMl9kbWFfY29udGlnX21lbW9wcy5wdXQoY3R4LT5iYW5rMl9idWYpOworCQljdHgtPmJhbmsyX2J1ZiA9IDA7CisJCWN0eC0+YmFuazJfcGh5cyA9IDA7CisJCWN0eC0+YmFuazJfc2l6ZSA9IDA7CisJfQorfQorCisvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGluc3RhbmNlIGRhdGEgYnVmZmVyICovCitpbnQgczVwX21mY19hbGxvY19pbnN0YW5jZV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJdm9pZCAqY29udGV4dF92aXJ0OworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfREVDIHx8CisJCWN0eC0+Y29kZWNfbW9kZSA9PSBTNVBfRklNVl9DT0RFQ19IMjY0X0VOQykKKwkJY3R4LT5jdHhfc2l6ZSA9IE1GQ19IMjY0X0NUWF9CVUZfU0laRTsKKwllbHNlCisJCWN0eC0+Y3R4X3NpemUgPSBNRkNfQ1RYX0JVRl9TSVpFOworCWN0eC0+Y3R4X2J1ZiA9IHZiMl9kbWFfY29udGlnX21lbW9wcy5hbGxvYygKKwkJZGV2LT5hbGxvY19jdHhbTUZDX0JBTksxX0FMTE9DX0NUWF0sIGN0eC0+Y3R4X3NpemUpOworCWlmIChJU19FUlIoY3R4LT5jdHhfYnVmKSkgeworCQltZmNfZXJyKCJBbGxvY2F0aW5nIGNvbnRleHQgYnVmZmVyIGZhaWxlZFxuIik7CisJCWN0eC0+Y3R4X3BoeXMgPSAwOworCQljdHgtPmN0eF9idWYgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY3R4LT5jdHhfcGh5cyA9IHM1cF9tZmNfbWVtX2Nvb2tpZSgKKwkJZGV2LT5hbGxvY19jdHhbTUZDX0JBTksxX0FMTE9DX0NUWF0sIGN0eC0+Y3R4X2J1Zik7CisJQlVHX09OKGN0eC0+Y3R4X3BoeXMgJiAoKDEgPDwgTUZDX0JBTksxX0FMSUdOX09SREVSKSAtIDEpKTsKKwljdHgtPmN0eF9vZnMgPSBPRkZTRVRBKGN0eC0+Y3R4X3BoeXMpOworCWNvbnRleHRfdmlydCA9IHZiMl9kbWFfY29udGlnX21lbW9wcy52YWRkcihjdHgtPmN0eF9idWYpOworCWlmIChjb250ZXh0X3ZpcnQgPT0gTlVMTCkgeworCQltZmNfZXJyKCJSZW1hcHBpbmcgaW5zdGFuY2UgYnVmZmVyIGZhaWxlZFxuIik7CisJCXZiMl9kbWFfY29udGlnX21lbW9wcy5wdXQoY3R4LT5jdHhfYnVmKTsKKwkJY3R4LT5jdHhfcGh5cyA9IDA7CisJCWN0eC0+Y3R4X2J1ZiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBaZXJvIGNvbnRlbnQgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkgKi8KKwltZW1zZXQoY29udGV4dF92aXJ0LCAwLCBjdHgtPmN0eF9zaXplKTsKKwl3bWIoKTsKKwlpZiAoczVwX21mY19pbml0X3NobShjdHgpIDwgMCkgeworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KGN0eC0+Y3R4X2J1Zik7CisJCWN0eC0+Y3R4X3BoeXMgPSAwOworCQljdHgtPmN0eF9idWYgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgaW5zdGFuY2UgYnVmZmVyICovCit2b2lkIHM1cF9tZmNfcmVsZWFzZV9pbnN0YW5jZV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJaWYgKGN0eC0+Y3R4X2J1ZikgeworCQl2YjJfZG1hX2NvbnRpZ19tZW1vcHMucHV0KGN0eC0+Y3R4X2J1Zik7CisJCWN0eC0+Y3R4X3BoeXMgPSAwOworCQljdHgtPmN0eF9idWYgPSAwOworCX0KKwlpZiAoY3R4LT5zaG1fYWxsb2MpIHsKKwkJdmIyX2RtYV9jb250aWdfbWVtb3BzLnB1dChjdHgtPnNobV9hbGxvYyk7CisJCWN0eC0+c2htX2FsbG9jID0gMDsKKwkJY3R4LT5zaG0gPSAwOworCX0KK30KKworLyogU2V0IHJlZ2lzdGVycyBmb3IgZGVjb2RpbmcgdGVtcG9yYXJ5IGJ1ZmZlcnMgKi8KK3ZvaWQgczVwX21mY19zZXRfZGVjX2Rlc2NfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGN0eC0+ZGVzY19waHlzKSwgUzVQX0ZJTVZfU0lfQ0gwX0RFU0NfQURSKTsKKwltZmNfd3JpdGUoZGV2LCBERVNDX0JVRl9TSVpFLCBTNVBfRklNVl9TSV9DSDBfREVTQ19TSVpFKTsKK30KKworLyogU2V0IHJlZ2lzdGVycyBmb3Igc2hhcmVkIGJ1ZmZlciAqLwordm9pZCBzNXBfbWZjX3NldF9zaGFyZWRfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJbWZjX3dyaXRlKGRldiwgY3R4LT5zaG1fb2ZzLCBTNVBfRklNVl9TSV9DSDBfSE9TVF9XUl9BRFIpOworfQorCisvKiBTZXQgcmVnaXN0ZXJzIGZvciBkZWNvZGluZyBzdHJlYW0gYnVmZmVyICovCitpbnQgczVwX21mY19zZXRfZGVjX3N0cmVhbV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsIGludCBidWZfYWRkciwKKwkJICB1bnNpZ25lZCBpbnQgc3RhcnRfbnVtX2J5dGUsIHVuc2lnbmVkIGludCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkciksIFM1UF9GSU1WX1NJX0NIMF9TQl9TVF9BRFIpOworCW1mY193cml0ZShkZXYsIGN0eC0+ZGVjX3NyY19idWZfc2l6ZSwgUzVQX0ZJTVZfU0lfQ0gwX0NQQl9TSVpFKTsKKwltZmNfd3JpdGUoZGV2LCBidWZfc2l6ZSwgUzVQX0ZJTVZfU0lfQ0gwX1NCX0ZSTV9TSVpFKTsKKwlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHN0YXJ0X251bV9ieXRlLCBTVEFSVF9CWVRFX05VTSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBkZWNvZGluZyBmcmFtZSBidWZmZXIgKi8KK2ludCBzNXBfbWZjX3NldF9kZWNfZnJhbWVfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplLCBpOworCXVuc2lnbmVkIGludCBmcmFtZV9zaXplX2NoLCBmcmFtZV9zaXplX212OworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJdW5zaWduZWQgaW50IGRwYjsKKwlzaXplX3QgYnVmX2FkZHIxLCBidWZfYWRkcjI7CisJaW50IGJ1Zl9zaXplMSwgYnVmX3NpemUyOworCisJYnVmX2FkZHIxID0gY3R4LT5iYW5rMV9waHlzOworCWJ1Zl9zaXplMSA9IGN0eC0+YmFuazFfc2l6ZTsKKwlidWZfYWRkcjIgPSBjdHgtPmJhbmsyX3BoeXM7CisJYnVmX3NpemUyID0gY3R4LT5iYW5rMl9zaXplOworCWRwYiA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfU0lfQ0gwX0RQQl9DT05GX0NUUkwpICYKKwkJCQkJCX5TNVBfRklNVl9EUEJfQ09VTlRfTUFTSzsKKwltZmNfd3JpdGUoZGV2LCBjdHgtPnRvdGFsX2RwYl9jb3VudCB8IGRwYiwKKwkJCQkJCVM1UF9GSU1WX1NJX0NIMF9EUEJfQ09ORl9DVFJMKTsKKwlzNXBfbWZjX3NldF9zaGFyZWRfYnVmZmVyKGN0eCk7CisJc3dpdGNoIChjdHgtPmNvZGVjX21vZGUpIHsKKwljYXNlIFM1UF9GSU1WX0NPREVDX0gyNjRfREVDOgorCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksCisJCQkJCQlTNVBfRklNVl9IMjY0X1ZFUlRfTkJfTVZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19WRVJUX05CX01WX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfVkVSVF9OQl9NVl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX0gyNjRfTkJfSVBfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19OQl9JUF9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfREVDX05CX0lQX1NJWkU7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTVZfQ09ERUNfTVBFRzRfREVDOgorCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX01QRUc0X05CX0RDQUNfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfTkJfRENBQ19TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX01QRUc0X1VQX05CX01WX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9ERUNfVVBOQl9NVl9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfREVDX1VQTkJfTVZfU0laRTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLCBTNVBfRklNVl9NUEVHNF9TQV9NVl9BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfREVDX1NVQl9BTkNIT1JfTVZfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19TVUJfQU5DSE9SX01WX1NJWkU7CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfTVBFRzRfU1BfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19TVFhfUEFSU0VSX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfU1RYX1BBUlNFUl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX01QRUc0X09UX0xJTkVfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19PVkVSTEFQX1RSQU5TRk9STV9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfREVDX09WRVJMQVBfVFJBTlNGT1JNX1NJWkU7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTVZfQ09ERUNfSDI2M19ERUM6CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfSDI2M19PVF9MSU5FX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9ERUNfT1ZFUkxBUF9UUkFOU0ZPUk1fU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19PVkVSTEFQX1RSQU5TRk9STV9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX0gyNjNfVVBfTkJfTVZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19VUE5CX01WX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfVVBOQl9NVl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX0gyNjNfU0FfTVZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19TVUJfQU5DSE9SX01WX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfU1VCX0FOQ0hPUl9NVl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX0gyNjNfTkJfRENBQ19BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfREVDX05CX0RDQUNfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkU7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTVZfQ09ERUNfVkMxX0RFQzoKKwljYXNlIFM1UF9GSU1WX0NPREVDX1ZDMVJDVl9ERUM6CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfVkMxX05CX0RDQUNfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19OQl9EQ0FDX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfTkJfRENBQ19TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX1ZDMV9PVF9MSU5FX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9ERUNfT1ZFUkxBUF9UUkFOU0ZPUk1fU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19PVkVSTEFQX1RSQU5TRk9STV9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX1ZDMV9VUF9OQl9NVl9BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfREVDX1VQTkJfTVZfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19VUE5CX01WX1NJWkU7CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfVkMxX1NBX01WX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9ERUNfU1VCX0FOQ0hPUl9NVl9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfREVDX1NVQl9BTkNIT1JfTVZfU0laRTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLCBTNVBfRklNVl9WQzFfQklUUExBTkUzX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9ERUNfVkMxX0JJVFBMQU5FX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9ERUNfVkMxX0JJVFBMQU5FX1NJWkU7CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfVkMxX0JJVFBMQU5FMl9BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfREVDX1ZDMV9CSVRQTEFORV9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfREVDX1ZDMV9CSVRQTEFORV9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX1ZDMV9CSVRQTEFORTFfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0RFQ19WQzFfQklUUExBTkVfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0RFQ19WQzFfQklUUExBTkVfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNVl9DT0RFQ19NUEVHMl9ERUM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1mY19lcnIoIlVua25vd24gY29kZWMgZm9yIGRlY29kaW5nICgleClcbiIsCisJCQljdHgtPmNvZGVjX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWZyYW1lX3NpemUgPSBjdHgtPmx1bWFfc2l6ZTsKKwlmcmFtZV9zaXplX2NoID0gY3R4LT5jaHJvbWFfc2l6ZTsKKwlmcmFtZV9zaXplX212ID0gY3R4LT5tdl9zaXplOworCW1mY19kZWJ1ZygyLCAiRnJtIHNpemU6ICVkIGNoOiAlZCBtdjogJWRcbiIsIGZyYW1lX3NpemUsIGZyYW1lX3NpemVfY2gsCisJCQkJCQkJCWZyYW1lX3NpemVfbXYpOworCWZvciAoaSA9IDA7IGkgPCBjdHgtPnRvdGFsX2RwYl9jb3VudDsgaSsrKSB7CisJCS8qIEJhbmsyICovCisJCW1mY19kZWJ1ZygyLCAiTHVtYSAlZDogJXhcbiIsIGksCisJCQkJCWN0eC0+ZHN0X2J1ZnNbaV0uY29va2llLnJhdy5sdW1hKTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQihjdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcubHVtYSksCisJCQkJCQlTNVBfRklNVl9ERUNfTFVNQV9BRFIgKyBpICogNCk7CisJCW1mY19kZWJ1ZygyLCAiXHRDaHJvbWEgJWQ6ICV4XG4iLCBpLAorCQkJCQljdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21hKTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShjdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21hKSwKKwkJCQkJICAgICAgIFM1UF9GSU1WX0RFQ19DSFJPTUFfQURSICsgaSAqIDQpOworCQlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfREVDKSB7CisJCQltZmNfZGVidWcoMiwgIlx0QnVmMjogJXgsIHNpemU6ICVkXG4iLAorCQkJCQkJCWJ1Zl9hZGRyMiwgYnVmX3NpemUyKTsKKwkJCW1mY193cml0ZShkZXYsIE9GRlNFVEIoYnVmX2FkZHIyKSwKKwkJCQkJCVM1UF9GSU1WX0gyNjRfTVZfQURSICsgaSAqIDQpOworCQkJYnVmX2FkZHIyICs9IGZyYW1lX3NpemVfbXY7CisJCQlidWZfc2l6ZTIgLT0gZnJhbWVfc2l6ZV9tdjsKKwkJfQorCX0KKwltZmNfZGVidWcoMiwgIkJ1ZjE6ICV1LCBidWZfc2l6ZTE6ICVkXG4iLCBidWZfYWRkcjEsIGJ1Zl9zaXplMSk7CisJbWZjX2RlYnVnKDIsICJCdWYgMS8yIHNpemUgYWZ0ZXI6ICVkLyVkIChmcmFtZXMgJWQpXG4iLAorCQkJYnVmX3NpemUxLCAgYnVmX3NpemUyLCBjdHgtPnRvdGFsX2RwYl9jb3VudCk7CisJaWYgKGJ1Zl9zaXplMSA8IDAgfHwgYnVmX3NpemUyIDwgMCkgeworCQltZmNfZGVidWcoMiwgIk5vdCBlbm91Z2ggbWVtb3J5IGhhcyBiZWVuIGFsbG9jYXRlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzNXBfbWZjX3dyaXRlX3NobShjdHgsIGZyYW1lX3NpemUsIEFMTE9DX0xVTUFfRFBCX1NJWkUpOworCXM1cF9tZmNfd3JpdGVfc2htKGN0eCwgZnJhbWVfc2l6ZV9jaCwgQUxMT0NfQ0hST01BX0RQQl9TSVpFKTsKKwlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfREVDKQorCQlzNXBfbWZjX3dyaXRlX3NobShjdHgsIGZyYW1lX3NpemVfbXYsIEFMTE9DX01WX1NJWkUpOworCW1mY193cml0ZShkZXYsICgoUzVQX0ZJTVZfQ0hfSU5JVF9CVUZTICYgUzVQX0ZJTVZfQ0hfTUFTSykKKwkJCQkJPDwgUzVQX0ZJTVZfQ0hfU0hJRlQpIHwgKGN0eC0+aW5zdF9ubyksCisJCQkJCQlTNVBfRklNVl9TSV9DSDBfSU5TVF9JRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCByZWdpc3RlcnMgZm9yIGVuY29kaW5nIHN0cmVhbSBidWZmZXIgKi8KK2ludCBzNXBfbWZjX3NldF9lbmNfc3RyZWFtX2J1ZmZlcihzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShhZGRyKSwgUzVQX0ZJTVZfRU5DX1NJX0NIMF9TQl9BRFIpOworCW1mY193cml0ZShkZXYsIHNpemUsIFM1UF9GSU1WX0VOQ19TSV9DSDBfU0JfU0laRSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgczVwX21mY19zZXRfZW5jX2ZyYW1lX2J1ZmZlcihzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJdW5zaWduZWQgbG9uZyB5X2FkZHIsIHVuc2lnbmVkIGxvbmcgY19hZGRyKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKHlfYWRkciksIFM1UF9GSU1WX0VOQ19TSV9DSDBfQ1VSX1lfQURSKTsKKwltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKGNfYWRkciksIFM1UF9GSU1WX0VOQ19TSV9DSDBfQ1VSX0NfQURSKTsKK30KKwordm9pZCBzNXBfbWZjX2dldF9lbmNfZnJhbWVfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LAorCQl1bnNpZ25lZCBsb25nICp5X2FkZHIsIHVuc2lnbmVkIGxvbmcgKmNfYWRkcikKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJKnlfYWRkciA9IGRldi0+YmFuazIgKyAobWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNPREVEX1lfQUREUikKKwkJCQkJCQk8PCBNRkNfT0ZGU0VUX1NISUZUKTsKKwkqY19hZGRyID0gZGV2LT5iYW5rMiArIChtZmNfcmVhZChkZXYsIFM1UF9GSU1WX0VOQ09ERURfQ19BRERSKQorCQkJCQkJCTw8IE1GQ19PRkZTRVRfU0hJRlQpOworfQorCisvKiBTZXQgZW5jb2RpbmcgcmVmICYgY29kZWMgYnVmZmVyICovCitpbnQgczVwX21mY19zZXRfZW5jX3JlZl9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzaXplX3QgYnVmX2FkZHIxLCBidWZfYWRkcjI7CisJc2l6ZV90IGJ1Zl9zaXplMSwgYnVmX3NpemUyOworCXVuc2lnbmVkIGludCBlbmNfcmVmX3lfc2l6ZSwgZW5jX3JlZl9jX3NpemU7CisJdW5zaWduZWQgaW50IGd1YXJkX3dpZHRoLCBndWFyZF9oZWlnaHQ7CisJaW50IGk7CisKKwlidWZfYWRkcjEgPSBjdHgtPmJhbmsxX3BoeXM7CisJYnVmX3NpemUxID0gY3R4LT5iYW5rMV9zaXplOworCWJ1Zl9hZGRyMiA9IGN0eC0+YmFuazJfcGh5czsKKwlidWZfc2l6ZTIgPSBjdHgtPmJhbmsyX3NpemU7CisJZW5jX3JlZl95X3NpemUgPSBBTElHTihjdHgtPmltZ193aWR0aCwgUzVQX0ZJTVZfTlYxMk1UX0hBTElHTikKKwkJKiBBTElHTihjdHgtPmltZ19oZWlnaHQsIFM1UF9GSU1WX05WMTJNVF9WQUxJR04pOworCWVuY19yZWZfeV9zaXplID0gQUxJR04oZW5jX3JlZl95X3NpemUsIFM1UF9GSU1WX05WMTJNVF9TQUxJR04pOworCWlmIChjdHgtPmNvZGVjX21vZGUgPT0gUzVQX0ZJTVZfQ09ERUNfSDI2NF9FTkMpIHsKKwkJZW5jX3JlZl9jX3NpemUgPSBBTElHTihjdHgtPmltZ193aWR0aCwgUzVQX0ZJTVZfTlYxMk1UX0hBTElHTikKKwkJCSogQUxJR04oKGN0eC0+aW1nX2hlaWdodCA+PiAxKSwgUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTik7CisJCWVuY19yZWZfY19zaXplID0gQUxJR04oZW5jX3JlZl9jX3NpemUsIFM1UF9GSU1WX05WMTJNVF9TQUxJR04pOworCX0gZWxzZSB7CisJCWd1YXJkX3dpZHRoID0gQUxJR04oY3R4LT5pbWdfd2lkdGggKyAxNiwKKwkJCQkJCVM1UF9GSU1WX05WMTJNVF9IQUxJR04pOworCQlndWFyZF9oZWlnaHQgPSBBTElHTigoY3R4LT5pbWdfaGVpZ2h0ID4+IDEpICsgNCwKKwkJCQkJCVM1UF9GSU1WX05WMTJNVF9WQUxJR04pOworCQllbmNfcmVmX2Nfc2l6ZSA9IEFMSUdOKGd1YXJkX3dpZHRoICogZ3VhcmRfaGVpZ2h0LAorCQkJCSAgICAgICBTNVBfRklNVl9OVjEyTVRfU0FMSUdOKTsKKwl9CisJbWZjX2RlYnVnKDIsICJidWZfc2l6ZTE6ICVkLCBidWZfc2l6ZTI6ICVkXG4iLCBidWZfc2l6ZTEsIGJ1Zl9zaXplMik7CisJc3dpdGNoIChjdHgtPmNvZGVjX21vZGUpIHsKKwljYXNlIFM1UF9GSU1WX0NPREVDX0gyNjRfRU5DOgorCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksCisJCQkJUzVQX0ZJTVZfRU5DX1JFRjBfTFVNQV9BRFIgKyAoNCAqIGkpKTsKKwkJCWJ1Zl9hZGRyMSArPSBlbmNfcmVmX3lfc2l6ZTsKKwkJCWJ1Zl9zaXplMSAtPSBlbmNfcmVmX3lfc2l6ZTsKKworCQkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQihidWZfYWRkcjIpLAorCQkJCVM1UF9GSU1WX0VOQ19SRUYyX0xVTUFfQURSICsgKDQgKiBpKSk7CisJCQlidWZfYWRkcjIgKz0gZW5jX3JlZl95X3NpemU7CisJCQlidWZfc2l6ZTIgLT0gZW5jX3JlZl95X3NpemU7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQihidWZfYWRkcjIpLAorCQkJCVM1UF9GSU1WX0VOQ19SRUYwX0NIUk9NQV9BRFIgKyAoNCAqIGkpKTsKKwkJCWJ1Zl9hZGRyMiArPSBlbmNfcmVmX2Nfc2l6ZTsKKwkJCWJ1Zl9zaXplMiAtPSBlbmNfcmVmX2Nfc2l6ZTsKKwkJfQorCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksIFM1UF9GSU1WX0gyNjRfVVBfTVZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0VOQ19VUE1WX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9FTkNfVVBNVl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksCisJCQkJCVM1UF9GSU1WX0gyNjRfQ09aRVJPX0ZMQUdfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0VOQ19DT0xGTEdfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0VOQ19DT0xGTEdfU0laRTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLAorCQkJCQlTNVBfRklNVl9IMjY0X1VQX0lOVFJBX01EX0FEUik7CisJCWJ1Zl9hZGRyMSArPSBTNVBfRklNVl9FTkNfSU5UUkFNRF9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfRU5DX0lOVFJBTURfU0laRTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQihidWZfYWRkcjIpLAorCQkJCQlTNVBfRklNVl9IMjY0X1VQX0lOVFJBX1BSRURfQURSKTsKKwkJYnVmX2FkZHIyICs9IFM1UF9GSU1WX0VOQ19JTlRSQVBSRURfU0laRTsKKwkJYnVmX3NpemUyIC09IFM1UF9GSU1WX0VOQ19JTlRSQVBSRURfU0laRTsKKwkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLAorCQkJCQlTNVBfRklNVl9IMjY0X05CT1JfSU5GT19BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfRU5DX05CT1JJTkZPX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9FTkNfTkJPUklORk9fU0laRTsKKwkJbWZjX2RlYnVnKDIsICJidWZfc2l6ZTE6ICVkLCBidWZfc2l6ZTI6ICVkXG4iLAorCQkJYnVmX3NpemUxLCBidWZfc2l6ZTIpOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1WX0NPREVDX01QRUc0X0VOQzoKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLAorCQkJCVM1UF9GSU1WX0VOQ19SRUYwX0xVTUFfQURSICsgKDQgKiBpKSk7CisJCQlidWZfYWRkcjEgKz0gZW5jX3JlZl95X3NpemU7CisJCQlidWZfc2l6ZTEgLT0gZW5jX3JlZl95X3NpemU7CisJCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKGJ1Zl9hZGRyMiksCisJCQkJUzVQX0ZJTVZfRU5DX1JFRjJfTFVNQV9BRFIgKyAoNCAqIGkpKTsKKwkJCWJ1Zl9hZGRyMiArPSBlbmNfcmVmX3lfc2l6ZTsKKwkJCWJ1Zl9zaXplMiAtPSBlbmNfcmVmX3lfc2l6ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKGJ1Zl9hZGRyMiksCisJCQkJUzVQX0ZJTVZfRU5DX1JFRjBfQ0hST01BX0FEUiArICg0ICogaSkpOworCQkJYnVmX2FkZHIyICs9IGVuY19yZWZfY19zaXplOworCQkJYnVmX3NpemUyIC09IGVuY19yZWZfY19zaXplOworCQl9CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfTVBFRzRfVVBfTVZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0VOQ19VUE1WX1NJWkU7CisJCWJ1Zl9zaXplMSAtPSBTNVBfRklNVl9FTkNfVVBNVl9TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksCisJCQkJCQlTNVBfRklNVl9NUEVHNF9DT1pFUk9fRkxBR19BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfRU5DX0NPTEZMR19TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfRU5DX0NPTEZMR19TSVpFOworCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRBKGJ1Zl9hZGRyMSksCisJCQkJCQlTNVBfRklNVl9NUEVHNF9BQ0RDX0NPRUZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0VOQ19BQ0RDQ09FRl9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfRU5DX0FDRENDT0VGX1NJWkU7CisJCW1mY19kZWJ1ZygyLCAiYnVmX3NpemUxOiAlZCwgYnVmX3NpemUyOiAlZFxuIiwKKwkJCWJ1Zl9zaXplMSwgYnVmX3NpemUyKTsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNVl9DT0RFQ19IMjYzX0VOQzoKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJbWZjX3dyaXRlKGRldiwgT0ZGU0VUQShidWZfYWRkcjEpLAorCQkJCVM1UF9GSU1WX0VOQ19SRUYwX0xVTUFfQURSICsgKDQgKiBpKSk7CisJCQlidWZfYWRkcjEgKz0gZW5jX3JlZl95X3NpemU7CisJCQlidWZfc2l6ZTEgLT0gZW5jX3JlZl95X3NpemU7CisJCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKGJ1Zl9hZGRyMiksCisJCQkJUzVQX0ZJTVZfRU5DX1JFRjJfTFVNQV9BRFIgKyAoNCAqIGkpKTsKKwkJCWJ1Zl9hZGRyMiArPSBlbmNfcmVmX3lfc2l6ZTsKKwkJCWJ1Zl9zaXplMiAtPSBlbmNfcmVmX3lfc2l6ZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQltZmNfd3JpdGUoZGV2LCBPRkZTRVRCKGJ1Zl9hZGRyMiksCisJCQkJUzVQX0ZJTVZfRU5DX1JFRjBfQ0hST01BX0FEUiArICg0ICogaSkpOworCQkJYnVmX2FkZHIyICs9IGVuY19yZWZfY19zaXplOworCQkJYnVmX3NpemUyIC09IGVuY19yZWZfY19zaXplOworCQl9CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfSDI2M19VUF9NVl9BRFIpOworCQlidWZfYWRkcjEgKz0gUzVQX0ZJTVZfRU5DX1VQTVZfU0laRTsKKwkJYnVmX3NpemUxIC09IFM1UF9GSU1WX0VOQ19VUE1WX1NJWkU7CisJCW1mY193cml0ZShkZXYsIE9GRlNFVEEoYnVmX2FkZHIxKSwgUzVQX0ZJTVZfSDI2M19BQ0RDX0NPRUZfQURSKTsKKwkJYnVmX2FkZHIxICs9IFM1UF9GSU1WX0VOQ19BQ0RDQ09FRl9TSVpFOworCQlidWZfc2l6ZTEgLT0gUzVQX0ZJTVZfRU5DX0FDRENDT0VGX1NJWkU7CisJCW1mY19kZWJ1ZygyLCAiYnVmX3NpemUxOiAlZCwgYnVmX3NpemUyOiAlZFxuIiwKKwkJCWJ1Zl9zaXplMSwgYnVmX3NpemUyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWZjX2VycigiVW5rbm93biBjb2RlYyBzZXQgZm9yIGVuY29kaW5nOiAlZFxuIiwKKwkJCWN0eC0+Y29kZWNfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfbWZjX3NldF9lbmNfcGFyYW1zKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfZW5jX3BhcmFtcyAqcCA9ICZjdHgtPmVuY19wYXJhbXM7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgc2htOworCisJLyogd2lkdGggKi8KKwltZmNfd3JpdGUoZGV2LCBjdHgtPmltZ193aWR0aCwgUzVQX0ZJTVZfRU5DX0hTSVpFX1BYKTsKKwkvKiBoZWlnaHQgKi8KKwltZmNfd3JpdGUoZGV2LCBjdHgtPmltZ19oZWlnaHQsIFM1UF9GSU1WX0VOQ19WU0laRV9QWCk7CisJLyogcGljdHlwZSA6IGVuYWJsZSwgSURSIHBlcmlvZCAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1BJQ19UWVBFX0NUUkwpOworCXJlZyB8PSAoMSA8PCAxOCk7CisJcmVnICY9IH4oMHhGRkZGKTsKKwlyZWcgfD0gcC0+Z29wX3NpemU7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUElDX1RZUEVfQ1RSTCk7CisJbWZjX3dyaXRlKGRldiwgMCwgUzVQX0ZJTVZfRU5DX0JfUkVDT05fV1JJVEVfT04pOworCS8qIG11bHRpLXNsaWNlIGNvbnRyb2wgKi8KKwkvKiBtdWx0aS1zbGljZSBNQiBudW1iZXIgb3IgYml0IHNpemUgKi8KKwltZmNfd3JpdGUoZGV2LCBwLT5zbGljZV9tb2RlLCBTNVBfRklNVl9FTkNfTVNMSUNFX0NUUkwpOworCWlmIChwLT5zbGljZV9tb2RlID09IFY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX01CKSB7CisJCW1mY193cml0ZShkZXYsIHAtPnNsaWNlX21iLCBTNVBfRklNVl9FTkNfTVNMSUNFX01CKTsKKwl9IGVsc2UgaWYgKHAtPnNsaWNlX21vZGUgPT0gVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NJQ0VfTU9ERV9NQVhfQllURVMpIHsKKwkJbWZjX3dyaXRlKGRldiwgcC0+c2xpY2VfYml0LCBTNVBfRklNVl9FTkNfTVNMSUNFX0JJVCk7CisJfSBlbHNlIHsKKwkJbWZjX3dyaXRlKGRldiwgMCwgUzVQX0ZJTVZfRU5DX01TTElDRV9NQik7CisJCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX0VOQ19NU0xJQ0VfQklUKTsKKwl9CisJLyogY3ljbGljIGludHJhIHJlZnJlc2ggKi8KKwltZmNfd3JpdGUoZGV2LCBwLT5pbnRyYV9yZWZyZXNoX21iLCBTNVBfRklNVl9FTkNfQ0lSX0NUUkwpOworCS8qIG1lbW9yeSBzdHJ1Y3R1cmUgY3VyLiBmcmFtZSAqLworCWlmIChjdHgtPnNyY19mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYxMk0pCisJCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX0VOQ19NQVBfRk9SX0NVUik7CisJZWxzZSBpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX05WMTJNVCkKKwkJbWZjX3dyaXRlKGRldiwgMywgUzVQX0ZJTVZfRU5DX01BUF9GT1JfQ1VSKTsKKwkvKiBwYWRkaW5nIGNvbnRyb2wgJiB2YWx1ZSAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1BBRERJTkdfQ1RSTCk7CisJaWYgKHAtPnBhZCkgeworCQkvKiogZW5hYmxlICovCisJCXJlZyB8PSAoMSA8PCAzMSk7CisJCS8qKiBjciB2YWx1ZSAqLworCQlyZWcgJj0gfigweEZGIDw8IDE2KTsKKwkJcmVnIHw9IChwLT5wYWRfY3IgPDwgMTYpOworCQkvKiogY2IgdmFsdWUgKi8KKwkJcmVnICY9IH4oMHhGRiA8PCA4KTsKKwkJcmVnIHw9IChwLT5wYWRfY2IgPDwgOCk7CisJCS8qKiB5IHZhbHVlICovCisJCXJlZyAmPSB+KDB4RkYpOworCQlyZWcgfD0gKHAtPnBhZF9sdW1hKTsKKwl9IGVsc2UgeworCQkvKiogZGlzYWJsZSAmIGFsbCB2YWx1ZSBjbGVhciAqLworCQlyZWcgPSAwOworCX0KKwltZmNfd3JpdGUoZGV2LCByZWcsIFM1UF9GSU1WX0VOQ19QQURESU5HX0NUUkwpOworCS8qIHJhdGUgY29udHJvbCBjb25maWcuICovCisJcmVnID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNfUkNfQ09ORklHKTsKKwkvKiogZnJhbWUtbGV2ZWwgcmF0ZSBjb250cm9sICovCisJcmVnICY9IH4oMHgxIDw8IDkpOworCXJlZyB8PSAocC0+cmNfZnJhbWUgPDwgOSk7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUkNfQ09ORklHKTsKKwkvKiBiaXQgcmF0ZSAqLworCWlmIChwLT5yY19mcmFtZSkKKwkJbWZjX3dyaXRlKGRldiwgcC0+cmNfYml0cmF0ZSwKKwkJCVM1UF9GSU1WX0VOQ19SQ19CSVRfUkFURSk7CisJZWxzZQorCQltZmNfd3JpdGUoZGV2LCAwLCBTNVBfRklNVl9FTkNfUkNfQklUX1JBVEUpOworCS8qIHJlYWN0aW9uIGNvZWZmaWNpZW50ICovCisJaWYgKHAtPnJjX2ZyYW1lKQorCQltZmNfd3JpdGUoZGV2LCBwLT5yY19yZWFjdGlvbl9jb2VmZiwgUzVQX0ZJTVZfRU5DX1JDX1JQQVJBKTsKKwlzaG0gPSBzNXBfbWZjX3JlYWRfc2htKGN0eCwgRVhUX0VOQ19DT05UUk9MKTsKKwkvKiBzZXEgaGVhZGVyIGN0cmwgKi8KKwlzaG0gJj0gfigweDEgPDwgMyk7CisJc2htIHw9IChwLT5zZXFfaGRyX21vZGUgPDwgMyk7CisJLyogZnJhbWUgc2tpcCBtb2RlICovCisJc2htICY9IH4oMHgzIDw8IDEpOworCXNobSB8PSAocC0+ZnJhbWVfc2tpcF9tb2RlIDw8IDEpOworCXM1cF9tZmNfd3JpdGVfc2htKGN0eCwgc2htLCBFWFRfRU5DX0NPTlRST0wpOworCS8qIGZpeGVkIHRhcmdldCBiaXQgKi8KKwlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHAtPmZpeGVkX3RhcmdldF9iaXQsIFJDX0NPTlRST0xfQ09ORklHKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBfbWZjX3NldF9lbmNfcGFyYW1zX2gyNjQoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwlzdHJ1Y3QgczVwX21mY19lbmNfcGFyYW1zICpwID0gJmN0eC0+ZW5jX3BhcmFtczsKKwlzdHJ1Y3QgczVwX21mY19oMjY0X2VuY19wYXJhbXMgKnBfMjY0ID0gJnAtPmNvZGVjLmgyNjQ7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgc2htOworCisJczVwX21mY19zZXRfZW5jX3BhcmFtcyhjdHgpOworCS8qIHBpY3R5cGUgOiBudW1iZXIgb2YgQiAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1BJQ19UWVBFX0NUUkwpOworCS8qIG51bV9iX2ZyYW1lIC0gMCB+IDIgKi8KKwlyZWcgJj0gfigweDMgPDwgMTYpOworCXJlZyB8PSAocC0+bnVtX2JfZnJhbWUgPDwgMTYpOworCW1mY193cml0ZShkZXYsIHJlZywgUzVQX0ZJTVZfRU5DX1BJQ19UWVBFX0NUUkwpOworCS8qIHByb2ZpbGUgJiBsZXZlbCAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1BST0ZJTEUpOworCS8qIGxldmVsICovCisJcmVnICY9IH4oMHhGRiA8PCA4KTsKKwlyZWcgfD0gKHBfMjY0LT5sZXZlbCA8PCA4KTsKKwkvKiBwcm9maWxlIC0gMCB+IDIgKi8KKwlyZWcgJj0gfigweDNGKTsKKwlyZWcgfD0gcF8yNjQtPnByb2ZpbGU7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUFJPRklMRSk7CisJLyogaW50ZXJsYWNlICAqLworCW1mY193cml0ZShkZXYsIHAtPmludGVybGFjZSwgUzVQX0ZJTVZfRU5DX1BJQ19TVFJVQ1QpOworCS8qIGhlaWdodCAqLworCWlmIChwLT5pbnRlcmxhY2UpCisJCW1mY193cml0ZShkZXYsIGN0eC0+aW1nX2hlaWdodCA+PiAxLCBTNVBfRklNVl9FTkNfVlNJWkVfUFgpOworCS8qIGxvb3BmaWx0ZXIgY3RybCAqLworCW1mY193cml0ZShkZXYsIHBfMjY0LT5sb29wX2ZpbHRlcl9tb2RlLCBTNVBfRklNVl9FTkNfTEZfQ1RSTCk7CisJLyogbG9vcGZpbHRlciBhbHBoYSBvZmZzZXQgKi8KKwlpZiAocF8yNjQtPmxvb3BfZmlsdGVyX2FscGhhIDwgMCkgeworCQlyZWcgPSAweDEwOworCQlyZWcgfD0gKDB4RkYgLSBwXzI2NC0+bG9vcF9maWx0ZXJfYWxwaGEpICsgMTsKKwl9IGVsc2UgeworCQlyZWcgPSAweDAwOworCQlyZWcgfD0gKHBfMjY0LT5sb29wX2ZpbHRlcl9hbHBoYSAmIDB4Rik7CisJfQorCW1mY193cml0ZShkZXYsIHJlZywgUzVQX0ZJTVZfRU5DX0FMUEhBX09GRik7CisJLyogbG9vcGZpbHRlciBiZXRhIG9mZnNldCAqLworCWlmIChwXzI2NC0+bG9vcF9maWx0ZXJfYmV0YSA8IDApIHsKKwkJcmVnID0gMHgxMDsKKwkJcmVnIHw9ICgweEZGIC0gcF8yNjQtPmxvb3BfZmlsdGVyX2JldGEpICsgMTsKKwl9IGVsc2UgeworCQlyZWcgPSAweDAwOworCQlyZWcgfD0gKHBfMjY0LT5sb29wX2ZpbHRlcl9iZXRhICYgMHhGKTsKKwl9CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfQkVUQV9PRkYpOworCS8qIGVudHJvcHkgY29kaW5nIG1vZGUgKi8KKwlpZiAocF8yNjQtPmVudHJvcHlfbW9kZSA9PSBWNEwyX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREVfQ0FCQUMpCisJCW1mY193cml0ZShkZXYsIDEsIFM1UF9GSU1WX0VOQ19IMjY0X0VOVFJPUFlfTU9ERSk7CisJZWxzZQorCQltZmNfd3JpdGUoZGV2LCAwLCBTNVBfRklNVl9FTkNfSDI2NF9FTlRST1BZX01PREUpOworCS8qIG51bWJlciBvZiByZWYuIHBpY3R1cmUgKi8KKwlyZWcgPSBtZmNfcmVhZChkZXYsIFM1UF9GSU1WX0VOQ19IMjY0X05VTV9PRl9SRUYpOworCS8qIG51bSBvZiByZWYuIHBpY3R1cmVzIG9mIFAgKi8KKwlyZWcgJj0gfigweDMgPDwgNSk7CisJcmVnIHw9IChwXzI2NC0+bnVtX3JlZl9waWNfNHAgPDwgNSk7CisJLyogbWF4IG51bWJlciBvZiByZWYuIHBpY3R1cmVzICovCisJcmVnICY9IH4oMHgxRik7CisJcmVnIHw9IHBfMjY0LT5tYXhfcmVmX3BpYzsKKwltZmNfd3JpdGUoZGV2LCByZWcsIFM1UF9GSU1WX0VOQ19IMjY0X05VTV9PRl9SRUYpOworCS8qIDh4OCB0cmFuc2Zvcm0gZW5hYmxlICovCisJbWZjX3dyaXRlKGRldiwgcF8yNjQtPl84eDhfdHJhbnNmb3JtLCBTNVBfRklNVl9FTkNfSDI2NF9UUkFOU19GTEFHKTsKKwkvKiByYXRlIGNvbnRyb2wgY29uZmlnLiAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1JDX0NPTkZJRyk7CisJLyogbWFjcm9ibG9jayBsZXZlbCByYXRlIGNvbnRyb2wgKi8KKwlyZWcgJj0gfigweDEgPDwgOCk7CisJcmVnIHw9IChwXzI2NC0+cmNfbWIgPDwgOCk7CisJLyogZnJhbWUgUVAgKi8KKwlyZWcgJj0gfigweDNGKTsKKwlyZWcgfD0gcF8yNjQtPnJjX2ZyYW1lX3FwOworCW1mY193cml0ZShkZXYsIHJlZywgUzVQX0ZJTVZfRU5DX1JDX0NPTkZJRyk7CisJLyogZnJhbWUgcmF0ZSAqLworCWlmIChwLT5yY19mcmFtZSAmJiBwLT5yY19mcmFtZXJhdGVfZGVub20pCisJCW1mY193cml0ZShkZXYsIHAtPnJjX2ZyYW1lcmF0ZV9udW0gKiAxMDAwCisJCQkvIHAtPnJjX2ZyYW1lcmF0ZV9kZW5vbSwgUzVQX0ZJTVZfRU5DX1JDX0ZSQU1FX1JBVEUpOworCWVsc2UKKwkJbWZjX3dyaXRlKGRldiwgMCwgUzVQX0ZJTVZfRU5DX1JDX0ZSQU1FX1JBVEUpOworCS8qIG1heCAmIG1pbiB2YWx1ZSBvZiBRUCAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1JDX1FCT1VORCk7CisJLyogbWF4IFFQICovCisJcmVnICY9IH4oMHgzRiA8PCA4KTsKKwlyZWcgfD0gKHBfMjY0LT5yY19tYXhfcXAgPDwgOCk7CisJLyogbWluIFFQICovCisJcmVnICY9IH4oMHgzRik7CisJcmVnIHw9IHBfMjY0LT5yY19taW5fcXA7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUkNfUUJPVU5EKTsKKwkvKiBtYWNyb2Jsb2NrIGFkYXB0aXZlIHNjYWxpbmcgZmVhdHVyZXMgKi8KKwlpZiAocF8yNjQtPnJjX21iKSB7CisJCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1JDX01CX0NUUkwpOworCQkvKiBkYXJrIHJlZ2lvbiAqLworCQlyZWcgJj0gfigweDEgPDwgMyk7CisJCXJlZyB8PSAocF8yNjQtPnJjX21iX2RhcmsgPDwgMyk7CisJCS8qIHNtb290aCByZWdpb24gKi8KKwkJcmVnICY9IH4oMHgxIDw8IDIpOworCQlyZWcgfD0gKHBfMjY0LT5yY19tYl9zbW9vdGggPDwgMik7CisJCS8qIHN0YXRpYyByZWdpb24gKi8KKwkJcmVnICY9IH4oMHgxIDw8IDEpOworCQlyZWcgfD0gKHBfMjY0LT5yY19tYl9zdGF0aWMgPDwgMSk7CisJCS8qIGhpZ2ggYWN0aXZpdHkgcmVnaW9uICovCisJCXJlZyAmPSB+KDB4MSk7CisJCXJlZyB8PSBwXzI2NC0+cmNfbWJfYWN0aXZpdHk7CisJCW1mY193cml0ZShkZXYsIHJlZywgUzVQX0ZJTVZfRU5DX1JDX01CX0NUUkwpOworCX0KKwlpZiAoIXAtPnJjX2ZyYW1lICYmCisJICAgICFwXzI2NC0+cmNfbWIpIHsKKwkJc2htID0gczVwX21mY19yZWFkX3NobShjdHgsIFBfQl9GUkFNRV9RUCk7CisJCXNobSAmPSB+KDB4RkZGKTsKKwkJc2htIHw9ICgocF8yNjQtPnJjX2JfZnJhbWVfcXAgJiAweDNGKSA8PCA2KTsKKwkJc2htIHw9IChwXzI2NC0+cmNfcF9mcmFtZV9xcCAmIDB4M0YpOworCQlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHNobSwgUF9CX0ZSQU1FX1FQKTsKKwl9CisJLyogZXh0ZW5kZWQgZW5jb2RlciBjdHJsICovCisJc2htID0gczVwX21mY19yZWFkX3NobShjdHgsIEVYVF9FTkNfQ09OVFJPTCk7CisJLyogQVIgVlVJIGNvbnRyb2wgKi8KKwlzaG0gJj0gfigweDEgPDwgMTUpOworCXNobSB8PSAocF8yNjQtPnZ1aV9zYXIgPDwgMSk7CisJczVwX21mY193cml0ZV9zaG0oY3R4LCBzaG0sIEVYVF9FTkNfQ09OVFJPTCk7CisJaWYgKHBfMjY0LT52dWlfc2FyKSB7CisJCS8qIGFzcGVjdCByYXRpb24gSURDICovCisJCXNobSA9IHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBTQU1QTEVfQVNQRUNUX1JBVElPX0lEQyk7CisJCXNobSAmPSB+KDB4RkYpOworCQlzaG0gfD0gcF8yNjQtPnZ1aV9zYXJfaWRjOworCQlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHNobSwgU0FNUExFX0FTUEVDVF9SQVRJT19JREMpOworCQlpZiAocF8yNjQtPnZ1aV9zYXJfaWRjID09IDB4RkYpIHsKKwkJCS8qIHNhbXBsZSAgQVIgaW5mbyAqLworCQkJc2htID0gczVwX21mY19yZWFkX3NobShjdHgsIEVYVEVOREVEX1NBUik7CisJCQlzaG0gJj0gfigweEZGRkZGRkZGKTsKKwkJCXNobSB8PSBwXzI2NC0+dnVpX2V4dF9zYXJfd2lkdGggPDwgMTY7CisJCQlzaG0gfD0gcF8yNjQtPnZ1aV9leHRfc2FyX2hlaWdodDsKKwkJCXM1cF9tZmNfd3JpdGVfc2htKGN0eCwgc2htLCBFWFRFTkRFRF9TQVIpOworCQl9CisJfQorCS8qIGludHJhIHBpY3R1cmUgcGVyaW9kIGZvciBILjI2NCAqLworCXNobSA9IHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBIMjY0X0lfUEVSSU9EKTsKKwkvKiBjb250cm9sICovCisJc2htICY9IH4oMHgxIDw8IDE2KTsKKwlzaG0gfD0gKHBfMjY0LT5vcGVuX2dvcCA8PCAxNik7CisJLyogdmFsdWUgKi8KKwlpZiAocF8yNjQtPm9wZW5fZ29wKSB7CisJCXNobSAmPSB+KDB4RkZGRik7CisJCXNobSB8PSBwXzI2NC0+b3Blbl9nb3Bfc2l6ZTsKKwl9CisJczVwX21mY193cml0ZV9zaG0oY3R4LCBzaG0sIEgyNjRfSV9QRVJJT0QpOworCS8qIGV4dGVuZGVkIGVuY29kZXIgY3RybCAqLworCXNobSA9IHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBFWFRfRU5DX0NPTlRST0wpOworCS8qIHZidiBidWZmZXIgc2l6ZSAqLworCWlmIChwLT5mcmFtZV9za2lwX21vZGUgPT0KKwkJCVY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfQlVGX0xJTUlUKSB7CisJCXNobSAmPSB+KDB4RkZGRiA8PCAxNik7CisJCXNobSB8PSAocF8yNjQtPmNwYl9zaXplIDw8IDE2KTsKKwl9CisJczVwX21mY193cml0ZV9zaG0oY3R4LCBzaG0sIEVYVF9FTkNfQ09OVFJPTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19zZXRfZW5jX3BhcmFtc19tcGVnNChzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXN0cnVjdCBzNXBfbWZjX2VuY19wYXJhbXMgKnAgPSAmY3R4LT5lbmNfcGFyYW1zOworCXN0cnVjdCBzNXBfbWZjX21wZWc0X2VuY19wYXJhbXMgKnBfbXBlZzQgPSAmcC0+Y29kZWMubXBlZzQ7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgc2htOworCXVuc2lnbmVkIGludCBmcmFtZXJhdGU7CisKKwlzNXBfbWZjX3NldF9lbmNfcGFyYW1zKGN0eCk7CisJLyogcGljdHlwZSA6IG51bWJlciBvZiBCICovCisJcmVnID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNfUElDX1RZUEVfQ1RSTCk7CisJLyogbnVtX2JfZnJhbWUgLSAwIH4gMiAqLworCXJlZyAmPSB+KDB4MyA8PCAxNik7CisJcmVnIHw9IChwLT5udW1fYl9mcmFtZSA8PCAxNik7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUElDX1RZUEVfQ1RSTCk7CisJLyogcHJvZmlsZSAmIGxldmVsICovCisJcmVnID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNfUFJPRklMRSk7CisJLyogbGV2ZWwgKi8KKwlyZWcgJj0gfigweEZGIDw8IDgpOworCXJlZyB8PSAocF9tcGVnNC0+bGV2ZWwgPDwgOCk7CisJLyogcHJvZmlsZSAtIDAgfiAyICovCisJcmVnICY9IH4oMHgzRik7CisJcmVnIHw9IHBfbXBlZzQtPnByb2ZpbGU7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUFJPRklMRSk7CisJLyogcXVhcnRlcl9waXhlbCAqLworCW1mY193cml0ZShkZXYsIHBfbXBlZzQtPnF1YXJ0ZXJfcGl4ZWwsIFM1UF9GSU1WX0VOQ19NUEVHNF9RVUFSVF9QWEwpOworCS8qIHFwICovCisJaWYgKCFwLT5yY19mcmFtZSkgeworCQlzaG0gPSBzNXBfbWZjX3JlYWRfc2htKGN0eCwgUF9CX0ZSQU1FX1FQKTsKKwkJc2htICY9IH4oMHhGRkYpOworCQlzaG0gfD0gKChwX21wZWc0LT5yY19iX2ZyYW1lX3FwICYgMHgzRikgPDwgNik7CisJCXNobSB8PSAocF9tcGVnNC0+cmNfcF9mcmFtZV9xcCAmIDB4M0YpOworCQlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHNobSwgUF9CX0ZSQU1FX1FQKTsKKwl9CisJLyogZnJhbWUgcmF0ZSAqLworCWlmIChwLT5yY19mcmFtZSkgeworCQlpZiAocC0+cmNfZnJhbWVyYXRlX2Rlbm9tID4gMCkgeworCQkJZnJhbWVyYXRlID0gcC0+cmNfZnJhbWVyYXRlX251bSAqIDEwMDAgLworCQkJCQkJcC0+cmNfZnJhbWVyYXRlX2Rlbm9tOworCQkJbWZjX3dyaXRlKGRldiwgZnJhbWVyYXRlLAorCQkJCVM1UF9GSU1WX0VOQ19SQ19GUkFNRV9SQVRFKTsKKwkJCXNobSA9IHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBSQ19WT1BfVElNSU5HKTsKKwkJCXNobSAmPSB+KDB4RkZGRkZGRkYpOworCQkJc2htIHw9ICgxIDw8IDMxKTsKKwkJCXNobSB8PSAoKHAtPnJjX2ZyYW1lcmF0ZV9udW0gJiAweDdGRkYpIDw8IDE2KTsKKwkJCXNobSB8PSAocC0+cmNfZnJhbWVyYXRlX2Rlbm9tICYgMHhGRkZGKTsKKwkJCXM1cF9tZmNfd3JpdGVfc2htKGN0eCwgc2htLCBSQ19WT1BfVElNSU5HKTsKKwkJfQorCX0gZWxzZSB7CisJCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX0VOQ19SQ19GUkFNRV9SQVRFKTsKKwl9CisJLyogcmF0ZSBjb250cm9sIGNvbmZpZy4gKi8KKwlyZWcgPSBtZmNfcmVhZChkZXYsIFM1UF9GSU1WX0VOQ19SQ19DT05GSUcpOworCS8qIGZyYW1lIFFQICovCisJcmVnICY9IH4oMHgzRik7CisJcmVnIHw9IHBfbXBlZzQtPnJjX2ZyYW1lX3FwOworCW1mY193cml0ZShkZXYsIHJlZywgUzVQX0ZJTVZfRU5DX1JDX0NPTkZJRyk7CisJLyogbWF4ICYgbWluIHZhbHVlIG9mIFFQICovCisJcmVnID0gbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNfUkNfUUJPVU5EKTsKKwkvKiBtYXggUVAgKi8KKwlyZWcgJj0gfigweDNGIDw8IDgpOworCXJlZyB8PSAocF9tcGVnNC0+cmNfbWF4X3FwIDw8IDgpOworCS8qIG1pbiBRUCAqLworCXJlZyAmPSB+KDB4M0YpOworCXJlZyB8PSBwX21wZWc0LT5yY19taW5fcXA7CisJbWZjX3dyaXRlKGRldiwgcmVnLCBTNVBfRklNVl9FTkNfUkNfUUJPVU5EKTsKKwkvKiBleHRlbmRlZCBlbmNvZGVyIGN0cmwgKi8KKwlzaG0gPSBzNXBfbWZjX3JlYWRfc2htKGN0eCwgRVhUX0VOQ19DT05UUk9MKTsKKwkvKiB2YnYgYnVmZmVyIHNpemUgKi8KKwlpZiAocC0+ZnJhbWVfc2tpcF9tb2RlID09CisJCQlWNEwyX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFX0JVRl9MSU1JVCkgeworCQlzaG0gJj0gfigweEZGRkYgPDwgMTYpOworCQlzaG0gfD0gKHAtPnZidl9zaXplIDw8IDE2KTsKKwl9CisJczVwX21mY193cml0ZV9zaG0oY3R4LCBzaG0sIEVYVF9FTkNfQ09OVFJPTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19zZXRfZW5jX3BhcmFtc19oMjYzKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfZW5jX3BhcmFtcyAqcCA9ICZjdHgtPmVuY19wYXJhbXM7CisJc3RydWN0IHM1cF9tZmNfbXBlZzRfZW5jX3BhcmFtcyAqcF9oMjYzID0gJnAtPmNvZGVjLm1wZWc0OworCXVuc2lnbmVkIGludCByZWc7CisJdW5zaWduZWQgaW50IHNobTsKKworCXM1cF9tZmNfc2V0X2VuY19wYXJhbXMoY3R4KTsKKwkvKiBxcCAqLworCWlmICghcC0+cmNfZnJhbWUpIHsKKwkJc2htID0gczVwX21mY19yZWFkX3NobShjdHgsIFBfQl9GUkFNRV9RUCk7CisJCXNobSAmPSB+KDB4RkZGKTsKKwkJc2htIHw9IChwX2gyNjMtPnJjX3BfZnJhbWVfcXAgJiAweDNGKTsKKwkJczVwX21mY193cml0ZV9zaG0oY3R4LCBzaG0sIFBfQl9GUkFNRV9RUCk7CisJfQorCS8qIGZyYW1lIHJhdGUgKi8KKwlpZiAocC0+cmNfZnJhbWUgJiYgcC0+cmNfZnJhbWVyYXRlX2Rlbm9tKQorCQltZmNfd3JpdGUoZGV2LCBwLT5yY19mcmFtZXJhdGVfbnVtICogMTAwMAorCQkJLyBwLT5yY19mcmFtZXJhdGVfZGVub20sIFM1UF9GSU1WX0VOQ19SQ19GUkFNRV9SQVRFKTsKKwllbHNlCisJCW1mY193cml0ZShkZXYsIDAsIFM1UF9GSU1WX0VOQ19SQ19GUkFNRV9SQVRFKTsKKwkvKiByYXRlIGNvbnRyb2wgY29uZmlnLiAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1JDX0NPTkZJRyk7CisJLyogZnJhbWUgUVAgKi8KKwlyZWcgJj0gfigweDNGKTsKKwlyZWcgfD0gcF9oMjYzLT5yY19mcmFtZV9xcDsKKwltZmNfd3JpdGUoZGV2LCByZWcsIFM1UF9GSU1WX0VOQ19SQ19DT05GSUcpOworCS8qIG1heCAmIG1pbiB2YWx1ZSBvZiBRUCAqLworCXJlZyA9IG1mY19yZWFkKGRldiwgUzVQX0ZJTVZfRU5DX1JDX1FCT1VORCk7CisJLyogbWF4IFFQICovCisJcmVnICY9IH4oMHgzRiA8PCA4KTsKKwlyZWcgfD0gKHBfaDI2My0+cmNfbWF4X3FwIDw8IDgpOworCS8qIG1pbiBRUCAqLworCXJlZyAmPSB+KDB4M0YpOworCXJlZyB8PSBwX2gyNjMtPnJjX21pbl9xcDsKKwltZmNfd3JpdGUoZGV2LCByZWcsIFM1UF9GSU1WX0VOQ19SQ19RQk9VTkQpOworCS8qIGV4dGVuZGVkIGVuY29kZXIgY3RybCAqLworCXNobSA9IHM1cF9tZmNfcmVhZF9zaG0oY3R4LCBFWFRfRU5DX0NPTlRST0wpOworCS8qIHZidiBidWZmZXIgc2l6ZSAqLworCWlmIChwLT5mcmFtZV9za2lwX21vZGUgPT0KKwkJCVY0TDJfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREVfQlVGX0xJTUlUKSB7CisJCXNobSAmPSB+KDB4RkZGRiA8PCAxNik7CisJCXNobSB8PSAocC0+dmJ2X3NpemUgPDwgMTYpOworCX0KKwlzNXBfbWZjX3dyaXRlX3NobShjdHgsIHNobSwgRVhUX0VOQ19DT05UUk9MKTsKKwlyZXR1cm4gMDsKK30KKworLyogSW5pdGlhbGl6ZSBkZWNvZGluZyAqLworaW50IHM1cF9tZmNfaW5pdF9kZWNvZGUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKworCXM1cF9tZmNfc2V0X3NoYXJlZF9idWZmZXIoY3R4KTsKKwkvKiBTZXR1cCBsb29wIGZpbHRlciwgZm9yIGRlY29kaW5nIHRoaXMgaXMgb25seSB2YWxpZCBmb3IgTVBFRzQgKi8KKwlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX01QRUc0X0RFQykKKwkJbWZjX3dyaXRlKGRldiwgY3R4LT5sb29wX2ZpbHRlcl9tcGVnNCwgUzVQX0ZJTVZfRU5DX0xGX0NUUkwpOworCWVsc2UKKwkJbWZjX3dyaXRlKGRldiwgMCwgUzVQX0ZJTVZfRU5DX0xGX0NUUkwpOworCW1mY193cml0ZShkZXYsICgoY3R4LT5zbGljZV9pbnRlcmZhY2UgJiBTNVBfRklNVl9TTElDRV9JTlRfTUFTSykgPDwKKwkJUzVQX0ZJTVZfU0xJQ0VfSU5UX1NISUZUKSB8IChjdHgtPmRpc3BsYXlfZGVsYXlfZW5hYmxlIDw8CisJCVM1UF9GSU1WX0RERUxBWV9FTkFfU0hJRlQpIHwgKChjdHgtPmRpc3BsYXlfZGVsYXkgJgorCQlTNVBfRklNVl9EREVMQVlfVkFMX01BU0spIDw8IFM1UF9GSU1WX0RERUxBWV9WQUxfU0hJRlQpLAorCQlTNVBfRklNVl9TSV9DSDBfRFBCX0NPTkZfQ1RSTCk7CisJbWZjX3dyaXRlKGRldiwKKwkoKFM1UF9GSU1WX0NIX1NFUV9IRUFERVIgJiBTNVBfRklNVl9DSF9NQVNLKSA8PCBTNVBfRklNVl9DSF9TSElGVCkKKwkJCQl8IChjdHgtPmluc3Rfbm8pLCBTNVBfRklNVl9TSV9DSDBfSU5TVF9JRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfc2V0X2ZsdXNoKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LCBpbnQgZmx1c2gpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBpbnQgZHBiOworCisJaWYgKGZsdXNoKQorCQlkcGIgPSBtZmNfcmVhZChkZXYsIFM1UF9GSU1WX1NJX0NIMF9EUEJfQ09ORl9DVFJMKSB8ICgKKwkJCVM1UF9GSU1WX0RQQl9GTFVTSF9NQVNLIDw8IFM1UF9GSU1WX0RQQl9GTFVTSF9TSElGVCk7CisJZWxzZQorCQlkcGIgPSBtZmNfcmVhZChkZXYsIFM1UF9GSU1WX1NJX0NIMF9EUEJfQ09ORl9DVFJMKSAmCisJCQl+KFM1UF9GSU1WX0RQQl9GTFVTSF9NQVNLIDw8IFM1UF9GSU1WX0RQQl9GTFVTSF9TSElGVCk7CisJbWZjX3dyaXRlKGRldiwgZHBiLCBTNVBfRklNVl9TSV9DSDBfRFBCX0NPTkZfQ1RSTCk7Cit9CisKKy8qIERlY29kZSBhIHNpbmdsZSBmcmFtZSAqLworaW50IHM1cF9tZmNfZGVjb2RlX29uZV9mcmFtZShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJCQkJZW51bSBzNXBfbWZjX2RlY29kZV9hcmcgbGFzdF9mcmFtZSkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJbWZjX3dyaXRlKGRldiwgY3R4LT5kZWNfZHN0X2ZsYWcsIFM1UF9GSU1WX1NJX0NIMF9SRUxFQVNFX0JVRik7CisJczVwX21mY19zZXRfc2hhcmVkX2J1ZmZlcihjdHgpOworCXM1cF9tZmNfc2V0X2ZsdXNoKGN0eCwgY3R4LT5kcGJfZmx1c2hfZmxhZyk7CisJLyogSXNzdWUgZGlmZmVyZW50IGNvbW1hbmRzIHRvIGluc3RhbmNlIGJhc2luZyBvbiB3aGV0aGVyIGl0CisJICogaXMgdGhlIGxhc3QgZnJhbWUgb3Igbm90LiAqLworCXN3aXRjaCAobGFzdF9mcmFtZSkgeworCWNhc2UgTUZDX0RFQ19GUkFNRToKKwkJbWZjX3dyaXRlKGRldiwgKChTNVBfRklNVl9DSF9GUkFNRV9TVEFSVCAmIFM1UF9GSU1WX0NIX01BU0spIDw8CisJCVM1UF9GSU1WX0NIX1NISUZUKSB8IChjdHgtPmluc3Rfbm8pLCBTNVBfRklNVl9TSV9DSDBfSU5TVF9JRCk7CisJCWJyZWFrOworCWNhc2UgTUZDX0RFQ19MQVNUX0ZSQU1FOgorCQltZmNfd3JpdGUoZGV2LCAoKFM1UF9GSU1WX0NIX0xBU1RfRlJBTUUgJiBTNVBfRklNVl9DSF9NQVNLKSA8PAorCQlTNVBfRklNVl9DSF9TSElGVCkgfCAoY3R4LT5pbnN0X25vKSwgUzVQX0ZJTVZfU0lfQ0gwX0lOU1RfSUQpOworCQlicmVhazsKKwljYXNlIE1GQ19ERUNfUkVTX0NIQU5HRToKKwkJbWZjX3dyaXRlKGRldiwgKChTNVBfRklNVl9DSF9GUkFNRV9TVEFSVF9SRUFMTE9DICYKKwkJUzVQX0ZJTVZfQ0hfTUFTSykgPDwgUzVQX0ZJTVZfQ0hfU0hJRlQpIHwgKGN0eC0+aW5zdF9ubyksCisJCVM1UF9GSU1WX1NJX0NIMF9JTlNUX0lEKTsKKwkJYnJlYWs7CisJfQorCW1mY19kZWJ1ZygyLCAiRGVjb2RpbmcgYSB1c3VhbCBmcmFtZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzNXBfbWZjX2luaXRfZW5jb2RlKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisKKwlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjRfRU5DKQorCQlzNXBfbWZjX3NldF9lbmNfcGFyYW1zX2gyNjQoY3R4KTsKKwllbHNlIGlmIChjdHgtPmNvZGVjX21vZGUgPT0gUzVQX0ZJTVZfQ09ERUNfTVBFRzRfRU5DKQorCQlzNXBfbWZjX3NldF9lbmNfcGFyYW1zX21wZWc0KGN0eCk7CisJZWxzZSBpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9GSU1WX0NPREVDX0gyNjNfRU5DKQorCQlzNXBfbWZjX3NldF9lbmNfcGFyYW1zX2gyNjMoY3R4KTsKKwllbHNlIHsKKwkJbWZjX2VycigiVW5rbm93biBjb2RlYyBmb3IgZW5jb2RpbmcgKCV4KVxuIiwKKwkJCWN0eC0+Y29kZWNfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzNXBfbWZjX3NldF9zaGFyZWRfYnVmZmVyKGN0eCk7CisJbWZjX3dyaXRlKGRldiwgKChTNVBfRklNVl9DSF9TRVFfSEVBREVSIDw8IDE2KSAmIDB4NzAwMDApIHwKKwkJKGN0eC0+aW5zdF9ubyksIFM1UF9GSU1WX1NJX0NIMF9JTlNUX0lEKTsKKwlyZXR1cm4gMDsKK30KKworLyogRW5jb2RlIGEgc2luZ2xlIGZyYW1lICovCitpbnQgczVwX21mY19lbmNvZGVfb25lX2ZyYW1lKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJLyogbWVtb3J5IHN0cnVjdHVyZSBjdXIuIGZyYW1lICovCisJaWYgKGN0eC0+c3JjX2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9OVjEyTSkKKwkJbWZjX3dyaXRlKGRldiwgMCwgUzVQX0ZJTVZfRU5DX01BUF9GT1JfQ1VSKTsKKwllbHNlIGlmIChjdHgtPnNyY19mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYxMk1UKQorCQltZmNfd3JpdGUoZGV2LCAzLCBTNVBfRklNVl9FTkNfTUFQX0ZPUl9DVVIpOworCXM1cF9tZmNfc2V0X3NoYXJlZF9idWZmZXIoY3R4KTsKKwltZmNfd3JpdGUoZGV2LCAoUzVQX0ZJTVZfQ0hfRlJBTUVfU1RBUlQgPDwgMTYgJiAweDcwMDAwKSB8CisJCShjdHgtPmluc3Rfbm8pLCBTNVBfRklNVl9TSV9DSDBfSU5TVF9JRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwX21mY19nZXRfbmV3X2N0eChzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuZXdfY3R4OworCWludCBjbnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb25kbG9jaywgZmxhZ3MpOworCW5ld19jdHggPSAoZGV2LT5jdXJyX2N0eCArIDEpICUgTUZDX05VTV9DT05URVhUUzsKKwljbnQgPSAwOworCXdoaWxlICghdGVzdF9iaXQobmV3X2N0eCwgJmRldi0+Y3R4X3dvcmtfYml0cykpIHsKKwkJbmV3X2N0eCA9IChuZXdfY3R4ICsgMSkgJSBNRkNfTlVNX0NPTlRFWFRTOworCQlpZiAoKytjbnQgPiBNRkNfTlVNX0NPTlRFWFRTKSB7CisJCQkvKiBObyBjb250ZXh0cyB0byBydW4gKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29uZGxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gbmV3X2N0eDsKK30KKworc3RhdGljIHZvaWQgczVwX21mY19ydW5fcmVzX2NoYW5nZShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCisJczVwX21mY19zZXRfZGVjX3N0cmVhbV9idWZmZXIoY3R4LCAwLCAwLCAwKTsKKwlkZXYtPmN1cnJfY3R4ID0gY3R4LT5udW07CisJczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKGN0eCk7CisJczVwX21mY19kZWNvZGVfb25lX2ZyYW1lKGN0eCwgTUZDX0RFQ19SRVNfQ0hBTkdFKTsKK30KKworc3RhdGljIGludCBzNXBfbWZjX3J1bl9kZWNfZnJhbWUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsIGludCBsYXN0X2ZyYW1lKQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IHM1cF9tZmNfYnVmICp0ZW1wX3ZiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCS8qIEZyYW1lcyBhcmUgYmVpbmcgZGVjb2RlZCAqLworCWlmIChsaXN0X2VtcHR5KCZjdHgtPnNyY19xdWV1ZSkpIHsKKwkJbWZjX2RlYnVnKDIsICJObyBzcmMgYnVmZmVyc1xuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJLyogR2V0IHRoZSBuZXh0IHNvdXJjZSBidWZmZXIgKi8KKwl0ZW1wX3ZiID0gbGlzdF9lbnRyeShjdHgtPnNyY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgczVwX21mY19idWYsIGxpc3QpOworCXRlbXBfdmItPnVzZWQgPSAxOworCXM1cF9tZmNfc2V0X2RlY19zdHJlYW1fYnVmZmVyKGN0eCwKKwkJdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIodGVtcF92Yi0+YiwgMCksIGN0eC0+Y29uc3VtZWRfc3RyZWFtLAorCQkJCQl0ZW1wX3ZiLT5iLT52NGwyX3BsYW5lc1swXS5ieXRlc3VzZWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCWluZGV4ID0gdGVtcF92Yi0+Yi0+djRsMl9idWYuaW5kZXg7CisJZGV2LT5jdXJyX2N0eCA9IGN0eC0+bnVtOworCXM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhjdHgpOworCWlmICh0ZW1wX3ZiLT5iLT52NGwyX3BsYW5lc1swXS5ieXRlc3VzZWQgPT0gMCkgeworCQlsYXN0X2ZyYW1lID0gTUZDX0RFQ19MQVNUX0ZSQU1FOworCQltZmNfZGVidWcoMiwgIlNldHRpbmcgY3R4LT5zdGF0ZSB0byBGSU5JU0hJTkdcbiIpOworCQljdHgtPnN0YXRlID0gTUZDSU5TVF9GSU5JU0hJTkc7CisJfQorCXM1cF9tZmNfZGVjb2RlX29uZV9mcmFtZShjdHgsIGxhc3RfZnJhbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfcnVuX2VuY19mcmFtZShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHM1cF9tZmNfYnVmICpkc3RfbWI7CisJc3RydWN0IHM1cF9tZmNfYnVmICpzcmNfbWI7CisJdW5zaWduZWQgbG9uZyBzcmNfeV9hZGRyLCBzcmNfY19hZGRyLCBkc3RfYWRkcjsKKwl1bnNpZ25lZCBpbnQgZHN0X3NpemU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmN0eC0+c3JjX3F1ZXVlKSkgeworCQltZmNfZGVidWcoMiwgIm5vIHNyYyBidWZmZXJzXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlpZiAobGlzdF9lbXB0eSgmY3R4LT5kc3RfcXVldWUpKSB7CisJCW1mY19kZWJ1ZygyLCAibm8gZHN0IGJ1ZmZlcnNcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXNyY19tYiA9IGxpc3RfZW50cnkoY3R4LT5zcmNfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwlzcmNfbWItPnVzZWQgPSAxOworCXNyY195X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihzcmNfbWItPmIsIDApOworCXNyY19jX2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcihzcmNfbWItPmIsIDEpOworCXM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXIoY3R4LCBzcmNfeV9hZGRyLCBzcmNfY19hZGRyKTsKKwlkc3RfbWIgPSBsaXN0X2VudHJ5KGN0eC0+ZHN0X3F1ZXVlLm5leHQsIHN0cnVjdCBzNXBfbWZjX2J1ZiwgbGlzdCk7CisJZHN0X21iLT51c2VkID0gMTsKKwlkc3RfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKGRzdF9tYi0+YiwgMCk7CisJZHN0X3NpemUgPSB2YjJfcGxhbmVfc2l6ZShkc3RfbWItPmIsIDApOworCXM1cF9tZmNfc2V0X2VuY19zdHJlYW1fYnVmZmVyKGN0eCwgZHN0X2FkZHIsIGRzdF9zaXplKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlkZXYtPmN1cnJfY3R4ID0gY3R4LT5udW07CisJczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKGN0eCk7CisJczVwX21mY19lbmNvZGVfb25lX2ZyYW1lKGN0eCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfcnVuX2luaXRfZGVjKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgczVwX21mY19idWYgKnRlbXBfdmI7CisKKwkvKiBJbml0aWFsaXppbmcgZGVjb2RpbmcgLSBwYXJzaW5nIGhlYWRlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwltZmNfZGVidWcoMiwgIlByZXBhcmluZyB0byBpbml0IGRlY29kaW5nXG4iKTsKKwl0ZW1wX3ZiID0gbGlzdF9lbnRyeShjdHgtPnNyY19xdWV1ZS5uZXh0LCBzdHJ1Y3QgczVwX21mY19idWYsIGxpc3QpOworCXM1cF9tZmNfc2V0X2RlY19kZXNjX2J1ZmZlcihjdHgpOworCW1mY19kZWJ1ZygyLCAiSGVhZGVyIHNpemU6ICVkXG4iLCB0ZW1wX3ZiLT5iLT52NGwyX3BsYW5lc1swXS5ieXRlc3VzZWQpOworCXM1cF9tZmNfc2V0X2RlY19zdHJlYW1fYnVmZmVyKGN0eCwKKwkJCQl2YjJfZG1hX2NvbnRpZ19wbGFuZV9wYWRkcih0ZW1wX3ZiLT5iLCAwKSwKKwkJCQkwLCB0ZW1wX3ZiLT5iLT52NGwyX3BsYW5lc1swXS5ieXRlc3VzZWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCWRldi0+Y3Vycl9jdHggPSBjdHgtPm51bTsKKwlzNXBfbWZjX2NsZWFuX2N0eF9pbnRfZmxhZ3MoY3R4KTsKKwlzNXBfbWZjX2luaXRfZGVjb2RlKGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9tZmNfcnVuX2luaXRfZW5jKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgczVwX21mY19idWYgKmRzdF9tYjsKKwl1bnNpZ25lZCBsb25nIGRzdF9hZGRyOworCXVuc2lnbmVkIGludCBkc3Rfc2l6ZTsKKworCXM1cF9tZmNfc2V0X2VuY19yZWZfYnVmZmVyKGN0eCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOworCWRzdF9tYiA9IGxpc3RfZW50cnkoY3R4LT5kc3RfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsKKwlkc3RfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKGRzdF9tYi0+YiwgMCk7CisJZHN0X3NpemUgPSB2YjJfcGxhbmVfc2l6ZShkc3RfbWItPmIsIDApOworCXM1cF9tZmNfc2V0X2VuY19zdHJlYW1fYnVmZmVyKGN0eCwgZHN0X2FkZHIsIGRzdF9zaXplKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwlkZXYtPmN1cnJfY3R4ID0gY3R4LT5udW07CisJczVwX21mY19jbGVhbl9jdHhfaW50X2ZsYWdzKGN0eCk7CisJczVwX21mY19pbml0X2VuY29kZShjdHgpOworfQorCitzdGF0aWMgaW50IHM1cF9tZmNfcnVuX2luaXRfZGVjX2J1ZmZlcnMoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpCit7CisJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqdGVtcF92YjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBIZWFkZXIgd2FzIHBhcnNlZCBub3cgc3RhcnRpbmcgcHJvY2Vzc2luZworCSAqIEZpcnN0IHNldCB0aGUgb3V0cHV0IGZyYW1lIGJ1ZmZlcnMKKwkgKi8KKwlpZiAoY3R4LT5jYXB0dXJlX3N0YXRlICE9IFFVRVVFX0JVRlNfTU1BUEVEKSB7CisJCW1mY19lcnIoIkl0IHNlZW1zIHRoYXQgbm90IGFsbCBkZXN0aW9uYXRpb24gYnVmZmVycyB3ZXJlICIKKwkJCSJtbWFwZWRcbk1GQyByZXF1aXJlcyB0aGF0IGFsbCBkZXN0aW5hdGlvbiBhcmUgbW1hcGVkICIKKwkJCSJiZWZvcmUgc3RhcnRpbmcgcHJvY2Vzc2luZ1xuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmN0eC0+c3JjX3F1ZXVlKSkgeworCQltZmNfZXJyKCJIZWFkZXIgaGFzIGJlZW4gZGVhbGxvY2F0ZWQgaW4gdGhlIG1pZGRsZSBvZiIKKwkJCSIgaW5pdGlhbGl6YXRpb25cbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmlycWxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXRlbXBfdmIgPSBsaXN0X2VudHJ5KGN0eC0+c3JjX3F1ZXVlLm5leHQsIHN0cnVjdCBzNXBfbWZjX2J1ZiwgbGlzdCk7CisJbWZjX2RlYnVnKDIsICJIZWFkZXIgc2l6ZTogJWRcbiIsIHRlbXBfdmItPmItPnY0bDJfcGxhbmVzWzBdLmJ5dGVzdXNlZCk7CisJczVwX21mY19zZXRfZGVjX3N0cmVhbV9idWZmZXIoY3R4LAorCQkJCXZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKHRlbXBfdmItPmIsIDApLAorCQkJCTAsIHRlbXBfdmItPmItPnY0bDJfcGxhbmVzWzBdLmJ5dGVzdXNlZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7CisJZGV2LT5jdXJyX2N0eCA9IGN0eC0+bnVtOworCXM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhjdHgpOworCXJldCA9IHM1cF9tZmNfc2V0X2RlY19mcmFtZV9idWZmZXIoY3R4KTsKKwlpZiAocmV0KSB7CisJCW1mY19lcnIoIkZhaWxlZCB0byBhbGxvYyBmcmFtZSBtZW1cbiIpOworCQljdHgtPnN0YXRlID0gTUZDSU5TVF9FUlJPUjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogVHJ5IHJ1bm5pbmcgYW4gb3BlcmF0aW9uIG9uIGhhcmR3YXJlICovCit2b2lkIHM1cF9tZmNfdHJ5X3J1bihzdHJ1Y3QgczVwX21mY19kZXYgKmRldikKK3sKKwlzdHJ1Y3QgczVwX21mY19jdHggKmN0eDsKKwlpbnQgbmV3X2N0eDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCWlmICh0ZXN0X2JpdCgwLCAmZGV2LT5lbnRlcl9zdXNwZW5kKSkgeworCQltZmNfZGVidWcoMSwgIkVudGVyaW5nIHN1c3BlbmQgc28gZG8gbm90IHNjaGVkdWxlIGFueSBqb2JzXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBDaGVjayB3aGV0aGVyIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmRldi0+aHdfbG9jaykgIT0gMCkgeworCQkvKiBUaGlzIGlzIHBlcmZlY3RseSBvaywgdGhlIHNjaGVkdWxlZCBjdHggc2hvdWxkIHdhaXQgKi8KKwkJbWZjX2RlYnVnKDEsICJDb3VsZG4ndCBsb2NrIEhXXG4iKTsKKwkJcmV0dXJuOworCX0KKwkvKiBDaG9vc2UgdGhlIGNvbnRleHQgdG8gcnVuICovCisJbmV3X2N0eCA9IHM1cF9tZmNfZ2V0X25ld19jdHgoZGV2KTsKKwlpZiAobmV3X2N0eCA8IDApIHsKKwkJLyogTm8gY29udGV4dHMgdG8gcnVuICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJmRldi0+aHdfbG9jaykgPT0gMCkgeworCQkJbWZjX2VycigiRmFpbGVkIHRvIHVubG9jayBoYXJkd2FyZVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJbWZjX2RlYnVnKDEsICJObyBjdHggaXMgc2NoZWR1bGVkIHRvIGJlIHJ1blxuIik7CisJCXJldHVybjsKKwl9CisJY3R4ID0gZGV2LT5jdHhbbmV3X2N0eF07CisJLyogR290IGNvbnRleHQgdG8gcnVuIGluIGN0eCAqLworCS8qCisJICogTGFzdCBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQgdG8gTUZDLgorCSAqIE5vdyBvYnRhaW5pbmcgZnJhbWVzIGZyb20gTUZDIGJ1ZmZlcgorCSAqLworCXM1cF9tZmNfY2xvY2tfb24oKTsKKwlpZiAoY3R4LT50eXBlID09IE1GQ0lOU1RfREVDT0RFUikgeworCQlzNXBfbWZjX3NldF9kZWNfZGVzY19idWZmZXIoY3R4KTsKKwkJc3dpdGNoIChjdHgtPnN0YXRlKSB7CisJCWNhc2UgTUZDSU5TVF9GSU5JU0hJTkc6CisJCQlzNXBfbWZjX3J1bl9kZWNfZnJhbWUoY3R4LCBNRkNfREVDX0xBU1RfRlJBTUUpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9SVU5OSU5HOgorCQkJcmV0ID0gczVwX21mY19ydW5fZGVjX2ZyYW1lKGN0eCwgTUZDX0RFQ19GUkFNRSk7CisJCQlicmVhazsKKwkJY2FzZSBNRkNJTlNUX0lOSVQ6CisJCQlzNXBfbWZjX2NsZWFuX2N0eF9pbnRfZmxhZ3MoY3R4KTsKKwkJCXJldCA9IHM1cF9tZmNfb3Blbl9pbnN0X2NtZChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9SRVRVUk5fSU5TVDoKKwkJCXM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhjdHgpOworCQkJcmV0ID0gczVwX21mY19jbG9zZV9pbnN0X2NtZChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9HT1RfSU5TVDoKKwkJCXM1cF9tZmNfcnVuX2luaXRfZGVjKGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBNRkNJTlNUX0hFQURfUEFSU0VEOgorCQkJcmV0ID0gczVwX21mY19ydW5faW5pdF9kZWNfYnVmZmVycyhjdHgpOworCQkJbWZjX2RlYnVnKDEsICJoZWFkIHBhcnNlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBNRkNJTlNUX1JFU19DSEFOR0VfSU5JVDoKKwkJCXM1cF9tZmNfcnVuX3Jlc19jaGFuZ2UoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIE1GQ0lOU1RfUkVTX0NIQU5HRV9GTFVTSDoKKwkJCXM1cF9tZmNfcnVuX2RlY19mcmFtZShjdHgsIE1GQ19ERUNfRlJBTUUpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9SRVNfQ0hBTkdFX0VORDoKKwkJCW1mY19kZWJ1ZygyLCAiRmluaXNoZWQgcmVtYWluaW5nIGZyYW1lcyBhZnRlciByZXNvbHV0aW9uIGNoYW5nZVxuIik7CisJCQljdHgtPmNhcHR1cmVfc3RhdGUgPSBRVUVVRV9GUkVFOworCQkJbWZjX2RlYnVnKDIsICJXaWxsIHJlLWluaXQgdGhlIGNvZGVjXG4iKTsKKwkJCXM1cF9tZmNfcnVuX2luaXRfZGVjKGN0eCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FQUdBSU47CisJCX0KKwl9IGVsc2UgaWYgKGN0eC0+dHlwZSA9PSBNRkNJTlNUX0VOQ09ERVIpIHsKKwkJc3dpdGNoIChjdHgtPnN0YXRlKSB7CisJCWNhc2UgTUZDSU5TVF9GSU5JU0hJTkc6CisJCWNhc2UgTUZDSU5TVF9SVU5OSU5HOgorCQkJcmV0ID0gczVwX21mY19ydW5fZW5jX2ZyYW1lKGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBNRkNJTlNUX0lOSVQ6CisJCQlzNXBfbWZjX2NsZWFuX2N0eF9pbnRfZmxhZ3MoY3R4KTsKKwkJCXJldCA9IHM1cF9tZmNfb3Blbl9pbnN0X2NtZChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9SRVRVUk5fSU5TVDoKKwkJCXM1cF9tZmNfY2xlYW5fY3R4X2ludF9mbGFncyhjdHgpOworCQkJcmV0ID0gczVwX21mY19jbG9zZV9pbnN0X2NtZChjdHgpOworCQkJYnJlYWs7CisJCWNhc2UgTUZDSU5TVF9HT1RfSU5TVDoKKwkJCXM1cF9tZmNfcnVuX2luaXRfZW5jKGN0eCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FQUdBSU47CisJCX0KKwl9IGVsc2UgeworCQltZmNfZXJyKCJJbnZhbGlkIGNvbnRleHQgdHlwZTogJWRcbiIsIGN0eC0+dHlwZSk7CisJCXJldCA9IC1FQUdBSU47CisJfQorCisJaWYgKHJldCkgeworCQkvKiBGcmVlIGhhcmR3YXJlIGxvY2sgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmZGV2LT5od19sb2NrKSA9PSAwKQorCQkJbWZjX2VycigiRmFpbGVkIHRvIHVubG9jayBoYXJkd2FyZVxuIik7CisKKwkJLyogVGhpcyBpcyBpbiBkZWVkIGltcG9yYW50LCBhcyBubyBvcGVyYXRpb24gaGFzIGJlZW4KKwkJICogc2NoZWR1bGVkLCByZWR1Y2UgdGhlIGNsb2NrIGNvdW50IGFzIG5vIG9uZSB3aWxsCisJCSAqIGV2ZXIgZG8gdGhpcywgYmVjYXVzZSBubyBpbnRlcnJ1cHQgcmVsYXRlZCB0byB0aGlzIHRyeV9ydW4KKwkJICogd2lsbCBldmVyIGNvbWUgZnJvbSBoYXJkd2FyZS4gKi8KKwkJczVwX21mY19jbG9ja19vZmYoKTsKKwl9Cit9CisKKwordm9pZCBzNXBfbWZjX2NsZWFudXBfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqbGgsIHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBzNXBfbWZjX2J1ZiAqYjsKKwlpbnQgaTsKKworCXdoaWxlICghbGlzdF9lbXB0eShsaCkpIHsKKwkJYiA9IGxpc3RfZW50cnkobGgtPm5leHQsIHN0cnVjdCBzNXBfbWZjX2J1ZiwgbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBiLT5iLT5udW1fcGxhbmVzOyBpKyspCisJCQl2YjJfc2V0X3BsYW5lX3BheWxvYWQoYi0+YiwgaSwgMCk7CisJCXZiMl9idWZmZXJfZG9uZShiLT5iLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwkJbGlzdF9kZWwoJmItPmxpc3QpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfb3ByLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19vcHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjgzODM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfb3ByLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvdmlkZW8vc2Ftc3VuZy9tZmM1L3M1cF9tZmNfb3ByLmgKKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgU2Ftc3VuZyBNRkMgKE11bHRpIEZ1bmN0aW9uIENvZGVjIC0gRklNVikgZHJpdmVyCisgKiBDb250YWlucyBkZWNsYXJhdGlvbnMgb2YgaHcgcmVsYXRlZCBmdW5jdGlvbnMuCisgKgorICogS2FtaWwgRGVic2tpLCBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgUzVQX01GQ19PUFJfSF8KKyNkZWZpbmUgUzVQX01GQ19PUFJfSF8KKworI2luY2x1ZGUgInM1cF9tZmNfY29tbW9uLmgiCisKK2ludCBzNXBfbWZjX2luaXRfZGVjb2RlKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKK2ludCBzNXBfbWZjX2luaXRfZW5jb2RlKHN0cnVjdCBzNXBfbWZjX2N0eCAqbWZjX2N0eCk7CisKKy8qIERlY29kaW5nIGZ1bmN0aW9ucyAqLworaW50IHM1cF9tZmNfc2V0X2RlY19mcmFtZV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOworaW50IHM1cF9tZmNfc2V0X2RlY19zdHJlYW1fYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LCBpbnQgYnVmX2FkZHIsCisJCQkJCQkgIHVuc2lnbmVkIGludCBzdGFydF9udW1fYnl0ZSwKKwkJCQkJCSAgdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKKworLyogRW5jb2RpbmcgZnVuY3Rpb25zICovCit2b2lkIHM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsCisJCXVuc2lnbmVkIGxvbmcgeV9hZGRyLCB1bnNpZ25lZCBsb25nIGNfYWRkcik7CitpbnQgczVwX21mY19zZXRfZW5jX3N0cmVhbV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpOwordm9pZCBzNXBfbWZjX2dldF9lbmNfZnJhbWVfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LAorCQl1bnNpZ25lZCBsb25nICp5X2FkZHIsIHVuc2lnbmVkIGxvbmcgKmNfYWRkcik7CitpbnQgczVwX21mY19zZXRfZW5jX3JlZl9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICptZmNfY3R4KTsKKworaW50IHM1cF9tZmNfZGVjb2RlX29uZV9mcmFtZShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwKKwkJCQkJZW51bSBzNXBfbWZjX2RlY29kZV9hcmcgbGFzdF9mcmFtZSk7CitpbnQgczVwX21mY19lbmNvZGVfb25lX2ZyYW1lKHN0cnVjdCBzNXBfbWZjX2N0eCAqbWZjX2N0eCk7CisKKy8qIE1lbW9yeSBhbGxvY2F0aW9uICovCitpbnQgczVwX21mY19hbGxvY19kZWNfdGVtcF9idWZmZXJzKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKK3ZvaWQgczVwX21mY19zZXRfZGVjX2Rlc2NfYnVmZmVyKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KTsKK3ZvaWQgczVwX21mY19yZWxlYXNlX2RlY19kZXNjX2J1ZmZlcihzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7CisKK2ludCBzNXBfbWZjX2FsbG9jX2NvZGVjX2J1ZmZlcnMoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOwordm9pZCBzNXBfbWZjX3JlbGVhc2VfY29kZWNfYnVmZmVycyhzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7CisKK2ludCBzNXBfbWZjX2FsbG9jX2luc3RhbmNlX2J1ZmZlcihzdHJ1Y3QgczVwX21mY19jdHggKmN0eCk7Cit2b2lkIHM1cF9tZmNfcmVsZWFzZV9pbnN0YW5jZV9idWZmZXIoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOworCit2b2lkIHM1cF9tZmNfdHJ5X3J1bihzdHJ1Y3QgczVwX21mY19kZXYgKmRldik7Cit2b2lkIHM1cF9tZmNfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaCwgc3RydWN0IHZiMl9xdWV1ZSAqdnEpOworCisjZGVmaW5lIHM1cF9tZmNfZ2V0X2RzcGxfeV9hZHIoKQkocmVhZGwoZGV2LT5yZWdzX2Jhc2UgKyBcCisJCQkJCVM1UF9GSU1WX1NJX0RJU1BMQVlfWV9BRFIpIDw8IFwKKwkJCQkJTUZDX09GRlNFVF9TSElGVCkKKyNkZWZpbmUgczVwX21mY19nZXRfZGVjX3lfYWRyKCkJCShyZWFkbChkZXYtPnJlZ3NfYmFzZSArIFwKKwkJCQkJUzVQX0ZJTVZfU0lfRElTUExBWV9ZX0FEUikgPDwgXAorCQkJCQlNRkNfT0ZGU0VUX1NISUZUKQorI2RlZmluZSBzNXBfbWZjX2dldF9kc3BsX3N0YXR1cygpCXJlYWRsKGRldi0+cmVnc19iYXNlICsgXAorCQkJCQkJUzVQX0ZJTVZfU0lfRElTUExBWV9TVEFUVVMpCisjZGVmaW5lIHM1cF9tZmNfZ2V0X2ZyYW1lX3R5cGUoKQkocmVhZGwoZGV2LT5yZWdzX2Jhc2UgKyBcCisJCQkJCQlTNVBfRklNVl9ERUNPREVfRlJBTUVfVFlQRSkgXAorCQkJCQkmIFM1UF9GSU1WX0RFQ09ERV9GUkFNRV9NQVNLKQorI2RlZmluZSBzNXBfbWZjX2dldF9jb25zdW1lZF9zdHJlYW0oKQlyZWFkbChkZXYtPnJlZ3NfYmFzZSArIFwKKwkJCQkJCVM1UF9GSU1WX1NJX0NPTlNVTUVEX0JZVEVTKQorI2RlZmluZSBzNXBfbWZjX2dldF9pbnRfcmVhc29uKCkJKHJlYWRsKGRldi0+cmVnc19iYXNlICsgXAorCQkJCQlTNVBfRklNVl9SSVNDMkhPU1RfQ01EKSAmIFwKKwkJCQkJUzVQX0ZJTVZfUklTQzJIT1NUX0NNRF9NQVNLKQorI2RlZmluZSBzNXBfbWZjX2dldF9pbnRfZXJyKCkJCXJlYWRsKGRldi0+cmVnc19iYXNlICsgXAorCQkJCQkJUzVQX0ZJTVZfUklTQzJIT1NUX0FSRzIpCisjZGVmaW5lIHM1cF9tZmNfZXJyX2RlYyh4KQkJKCgoeCkgJiBTNVBfRklNVl9FUlJfREVDX01BU0spID4+IFwKKwkJCQkJCQlTNVBfRklNVl9FUlJfREVDX1NISUZUKQorI2RlZmluZSBzNXBfbWZjX2Vycl9kc3BsKHgpCQkoKCh4KSAmIFM1UF9GSU1WX0VSUl9EU1BMX01BU0spID4+IFwKKwkJCQkJCQlTNVBfRklNVl9FUlJfRFNQTF9TSElGVCkKKyNkZWZpbmUgczVwX21mY19nZXRfaW1nX3dpZHRoKCkJCXJlYWRsKGRldi0+cmVnc19iYXNlICsgXAorCQkJCQkJUzVQX0ZJTVZfU0lfSFJFU09MKQorI2RlZmluZSBzNXBfbWZjX2dldF9pbWdfaGVpZ2h0KCkJcmVhZGwoZGV2LT5yZWdzX2Jhc2UgKyBcCisJCQkJCQlTNVBfRklNVl9TSV9WUkVTT0wpCisjZGVmaW5lIHM1cF9tZmNfZ2V0X2RwYl9jb3VudCgpCQlyZWFkbChkZXYtPnJlZ3NfYmFzZSArIFwKKwkJCQkJCVM1UF9GSU1WX1NJX0JVRl9OVU1CRVIpCisjZGVmaW5lIHM1cF9tZmNfZ2V0X2luc3Rfbm8oKQkJcmVhZGwoZGV2LT5yZWdzX2Jhc2UgKyBcCisJCQkJCQlTNVBfRklNVl9SSVNDMkhPU1RfQVJHMSkKKyNkZWZpbmUgczVwX21mY19nZXRfZW5jX3N0cm1fc2l6ZSgpCXJlYWRsKGRldi0+cmVnc19iYXNlICsgXAorCQkJCQkJUzVQX0ZJTVZfRU5DX1NJX1NUUk1fU0laRSkKKyNkZWZpbmUgczVwX21mY19nZXRfZW5jX3NsaWNlX3R5cGUoKQlyZWFkbChkZXYtPnJlZ3NfYmFzZSArIFwKKwkJCQkJCVM1UF9GSU1WX0VOQ19TSV9TTElDRV9UWVBFKQorCisjZW5kaWYgLyogUzVQX01GQ19PUFJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX3BtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTMwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19wbS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogbGludXgvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfcG0uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjZW5kaWYKKyNpbmNsdWRlICJzNXBfbWZjX2NvbW1vbi5oIgorI2luY2x1ZGUgInM1cF9tZmNfZGVidWcuaCIKKyNpbmNsdWRlICJzNXBfbWZjX3BtLmgiCisKKyNkZWZpbmUgTUZDX0NMS05BTUUJCSJzY2xrX21mYyIKKyNkZWZpbmUgTUZDX0dBVEVfQ0xLX05BTUUJIm1mYyIKKworI2RlZmluZSBDTEtfREVCVUcKKworc3RhdGljIHN0cnVjdCBzNXBfbWZjX3BtICpwbTsKK3N0YXRpYyBzdHJ1Y3QgczVwX21mY19kZXYgKnBfZGV2OworCisjaWZkZWYgQ0xLX0RFQlVHCithdG9taWNfdCBjbGtfcmVmOworI2VuZGlmCisKK2ludCBzNXBfbWZjX2luaXRfcG0oc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlwbSA9ICZkZXYtPnBtOworCXBfZGV2ID0gZGV2OworCXBtLT5jbG9ja19nYXRlID0gY2xrX2dldCgmZGV2LT5wbGF0X2Rldi0+ZGV2LCBNRkNfR0FURV9DTEtfTkFNRSk7CisJaWYgKElTX0VSUihwbS0+Y2xvY2tfZ2F0ZSkpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIGdldCBjbG9jay1nYXRpbmcgY29udHJvbFxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2dfaXBfY2xrOworCX0KKwlwbS0+Y2xvY2sgPSBjbGtfZ2V0KCZkZXYtPnBsYXRfZGV2LT5kZXYsIE1GQ19DTEtOQU1FKTsKKwlpZiAoSVNfRVJSKHBtLT5jbG9jaykpIHsKKwkJbWZjX2VycigiRmFpbGVkIHRvIGdldCBNRkMgY2xvY2tcbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9nX2lwX2Nsa18yOworCX0KKwlhdG9taWNfc2V0KCZwbS0+cG93ZXIsIDApOworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJcG0tPmRldmljZSA9ICZkZXYtPnBsYXRfZGV2LT5kZXY7CisJcG1fcnVudGltZV9lbmFibGUocG0tPmRldmljZSk7CisjZW5kaWYKKyNpZmRlZiBDTEtfREVCVUcKKwlhdG9taWNfc2V0KCZjbGtfcmVmLCAwKTsKKyNlbmRpZgorCXJldHVybiAwOworZXJyX2dfaXBfY2xrXzI6CisJY2xrX3B1dChwbS0+Y2xvY2tfZ2F0ZSk7CitlcnJfZ19pcF9jbGs6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzNXBfbWZjX2ZpbmFsX3BtKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQoreworCWNsa19wdXQocG0tPmNsb2NrX2dhdGUpOworCWNsa19wdXQocG0tPmNsb2NrKTsKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCXBtX3J1bnRpbWVfZGlzYWJsZShwbS0+ZGV2aWNlKTsKKyNlbmRpZgorfQorCitpbnQgczVwX21mY19jbG9ja19vbih2b2lkKQoreworCWludCByZXQ7CisjaWZkZWYgQ0xLX0RFQlVHCisJYXRvbWljX2luYygmY2xrX3JlZik7CisJbWZjX2RlYnVnKDMsICIrICVkIiwgYXRvbWljX3JlYWQoJmNsa19yZWYpKTsKKyNlbmRpZgorCXJldCA9IGNsa19lbmFibGUocG0tPmNsb2NrX2dhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgczVwX21mY19jbG9ja19vZmYodm9pZCkKK3sKKyNpZmRlZiBDTEtfREVCVUcKKwlhdG9taWNfZGVjKCZjbGtfcmVmKTsKKwltZmNfZGVidWcoMywgIi0gJWQiLCBhdG9taWNfcmVhZCgmY2xrX3JlZikpOworI2VuZGlmCisJY2xrX2Rpc2FibGUocG0tPmNsb2NrX2dhdGUpOworfQorCitpbnQgczVwX21mY19wb3dlcl9vbih2b2lkKQoreworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJcmV0dXJuIHBtX3J1bnRpbWVfZ2V0X3N5bmMocG0tPmRldmljZSk7CisjZWxzZQorCWF0b21pY19zZXQoJnBtLT5wb3dlciwgMSk7CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworaW50IHM1cF9tZmNfcG93ZXJfb2ZmKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwlyZXR1cm4gcG1fcnVudGltZV9wdXRfc3luYyhwbS0+ZGV2aWNlKTsKKyNlbHNlCisJYXRvbWljX3NldCgmcG0tPnBvd2VyLCAwKTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX3BtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDc5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19wbS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19wbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgUzVQX01GQ19QTV9IXworI2RlZmluZSBTNVBfTUZDX1BNX0hfCisKK2ludCBzNXBfbWZjX2luaXRfcG0oc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpOwordm9pZCBzNXBfbWZjX2ZpbmFsX3BtKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KTsKKworaW50IHM1cF9tZmNfY2xvY2tfb24odm9pZCk7Cit2b2lkIHM1cF9tZmNfY2xvY2tfb2ZmKHZvaWQpOworaW50IHM1cF9tZmNfcG93ZXJfb24odm9pZCk7CitpbnQgczVwX21mY19wb3dlcl9vZmYodm9pZCk7CisKKyNlbmRpZiAvKiBTNVBfTUZDX1BNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19zaG0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX3NobS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmRiYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfc2htLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX3NobS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9FWFlOT1M0CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAiczVwX21mY19jb21tb24uaCIKKyNpbmNsdWRlICJzNXBfbWZjX2RlYnVnLmgiCisKK2ludCBzNXBfbWZjX2luaXRfc2htKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQoreworCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7CisJdm9pZCAqc2htX2FsbG9jX2N0eCA9IGRldi0+YWxsb2NfY3R4W01GQ19CQU5LMV9BTExPQ19DVFhdOworCisJY3R4LT5zaG1fYWxsb2MgPSB2YjJfZG1hX2NvbnRpZ19tZW1vcHMuYWxsb2Moc2htX2FsbG9jX2N0eCwKKwkJCQkJCQlTSEFSRURfQlVGX1NJWkUpOworCWlmIChJU19FUlIoY3R4LT5zaG1fYWxsb2MpKSB7CisJCW1mY19lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5zaG1fYWxsb2MpOworCX0KKwkvKiBzaG1fb2ZzIG9ubHkga2VlcHMgdGhlIG9mZnNldCBmcm9tIGJhc2UgKHBvcnQgYSkgKi8KKwljdHgtPnNobV9vZnMgPSBzNXBfbWZjX21lbV9jb29raWUoc2htX2FsbG9jX2N0eCwgY3R4LT5zaG1fYWxsb2MpCisJCQkJCQkJCS0gZGV2LT5iYW5rMTsKKwlCVUdfT04oY3R4LT5zaG1fb2ZzICYgKCgxIDw8IE1GQ19CQU5LMV9BTElHTl9PUkRFUikgLSAxKSk7CisJY3R4LT5zaG0gPSB2YjJfZG1hX2NvbnRpZ19tZW1vcHMudmFkZHIoY3R4LT5zaG1fYWxsb2MpOworCWlmICghY3R4LT5zaG0pIHsKKwkJdmIyX2RtYV9jb250aWdfbWVtb3BzLnB1dChjdHgtPnNobV9hbGxvYyk7CisJCWN0eC0+c2htX29mcyA9IDA7CisJCWN0eC0+c2htX2FsbG9jID0gTlVMTDsKKwkJbWZjX2VycigiZmFpbGVkIHRvIHZpcnQgYWRkciBvZiBzaGFyZWQgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCgodm9pZCAqKWN0eC0+c2htLCAwLCBTSEFSRURfQlVGX1NJWkUpOworCXdtYigpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19zaG0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLW1mYy9zNXBfbWZjX3NobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NGVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1tZmMvczVwX21mY19zaG0uaApAQCAtMCwwICsxLDkxIEBACisvKgorICogbGludXgvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtbWZjL3M1cF9tZmNfc2htLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBTNVBfTUZDX1NITV9IXworI2RlZmluZSBTNVBfTUZDX1NITV9IXworCitlbnVtIE1GQ19TSE1fT0ZTCit7CisJRVhURU5FREVEX0RFQ09ERV9TVEFUVVMJPSAweDAwLAkvKiBEICovCisJU0VUX0ZSQU1FX1RBRwkJPSAweDA0LCAvKiBEICovCisJR0VUX0ZSQU1FX1RBR19UT1AJPSAweDA4LCAvKiBEICovCisJR0VUX0ZSQU1FX1RBR19CT1QJPSAweDBDLCAvKiBEICovCisJUElDX1RJTUVfVE9QCQk9IDB4MTAsIC8qIEQgKi8KKwlQSUNfVElNRV9CT1QJCT0gMHgxNCwgLyogRCAqLworCVNUQVJUX0JZVEVfTlVNCQk9IDB4MTgsIC8qIEQgKi8KKworCUNST1BfSU5GT19ICQk9IDB4MjAsIC8qIEQgKi8KKwlDUk9QX0lORk9fVgkJPSAweDI0LCAvKiBEICovCisJRVhUX0VOQ19DT05UUk9MCQk9IDB4MjgsCS8qIEUgKi8KKwlFTkNfUEFSQU1fQ0hBTkdFCT0gMHgyQywJLyogRSAqLworCVJDX1ZPUF9USU1JTkcJCT0gMHgzMCwJLyogRSwgTVBFRzQgKi8KKwlIRUNfUEVSSU9ECQk9IDB4MzQsCS8qIEUsIE1QRUc0ICovCisJTUVUQURBVEFfRU5BQkxFCQk9IDB4MzgsIC8qIEMgKi8KKwlNRVRBREFUQV9TVEFUVVMJCT0gMHgzQywgLyogQyAqLworCU1FVEFEQVRBX0RJU1BMQVlfSU5ERVgJPSAweDQwLAkvKiBDICovCisJRVhUX01FVEFEQVRBX1NUQVJUX0FERFIJPSAweDQ0LCAvKiBDICovCisJUFVUX0VYVFJBREFUQQkJPSAweDQ4LCAvKiBDICovCisJRVhUUkFEQVRBX0FERFIJCT0gMHg0QywgLyogQyAqLworCisJQUxMT0NfTFVNQV9EUEJfU0laRQk9IDB4NjQsCS8qIEQgKi8KKwlBTExPQ19DSFJPTUFfRFBCX1NJWkUJPSAweDY4LAkvKiBEICovCisJQUxMT0NfTVZfU0laRQkJPSAweDZDLAkvKiBEICovCisJUF9CX0ZSQU1FX1FQCQk9IDB4NzAsCS8qIEUgKi8KKwlTQU1QTEVfQVNQRUNUX1JBVElPX0lEQwk9IDB4NzQsIC8qIEUsIEguMjY0LCBkZXBlbmQgb24KKwkJCQlBU1BFQ1RfUkFUSU9fVlVJX0VOQUJMRSBpbiBFWFRfRU5DX0NPTlRST0wgKi8KKwlFWFRFTkRFRF9TQVIJCT0gMHg3OCwgLyogRSwgSC4yNjQsIGRlcG5lZCBvbgorCQkJCUFTUEVDVF9SQVRJT19WVUlfRU5BQkxFIGluIEVYVF9FTkNfQ09OVFJPTCAqLworCURJU1BfUElDX1BST0ZJTEUJPSAweDdDLCAvKiBEICovCisJRkxVU0hfQ01EX1RZUEUJCT0gMHg4MCwgLyogQyAqLworCUZMVVNIX0NNRF9JTkJVRjEJPSAweDg0LCAvKiBDICovCisJRkxVU0hfQ01EX0lOQlVGMgk9IDB4ODgsIC8qIEMgKi8KKwlGTFVTSF9DTURfT1VUQlVGCT0gMHg4QywgLyogRSAqLworCU5FV19SQ19CSVRfUkFURQkJPSAweDkwLCAvKiBFLCBmb3JtYXQgYXMgUkNfQklUX1JBVEUoMHhDNUE4KQorCQkJZGVwZW5kIG9uIFJDX0JJVF9SQVRFX0NIQU5HRSBpbiBFTkNfUEFSQU1fQ0hBTkdFICovCisJTkVXX1JDX0ZSQU1FX1JBVEUJPSAweDk0LCAvKiBFLCBmb3JtYXQgYXMgUkNfRlJBTUVfUkFURSgweEQwRDApCisJCQlkZXBlbmQgb24gUkNfRlJBTUVfUkFURV9DSEFOR0UgaW4gRU5DX1BBUkFNX0NIQU5HRSAqLworCU5FV19JX1BFUklPRAkJPSAweDk4LCAvKiBFLCBmb3JtYXQgYXMgSV9GUk1fQ1RSTCgweEM1MDQpCisJCQlkZXBlbmQgb24gSV9QRVJJT0RfQ0hBTkdFIGluIEVOQ19QQVJBTV9DSEFOR0UgKi8KKwlIMjY0X0lfUEVSSU9ECQk9IDB4OUMsIC8qIEUsIEguMjY0LCBvcGVuIEdPUCAqLworCVJDX0NPTlRST0xfQ09ORklHCT0gMHhBMCwgLyogRSAqLworCUJBVENIX0lOUFVUX0FERFIJPSAweEE0LCAvKiBFICovCisJQkFUQ0hfT1VUUFVUX0FERFIJPSAweEE4LCAvKiBFICovCisJQkFUQ0hfT1VUUFVUX1NJWkUJPSAweEFDLCAvKiBFICovCisJTUlOX0xVTUFfRFBCX1NJWkUJPSAweEIwLCAvKiBEICovCisJREVWSUNFX0ZPUk1BVF9JRAk9IDB4QjQsIC8qIEMgKi8KKwlIMjY0X1BPQ19UWVBFCQk9IDB4QjgsIC8qIEQgKi8KKwlNSU5fQ0hST01BX0RQQl9TSVpFCT0gMHhCQywgLyogRCAqLworCURJU1BfUElDX0ZSQU1FX1RZUEUJPSAweEMwLCAvKiBEICovCisJRlJFRV9MVU1BX0RQQgkJPSAweEM0LCAvKiBELCBWQzEgTVBFRzQgKi8KKwlBU1BFQ1RfUkFUSU9fSU5GTwk9IDB4QzgsIC8qIEQsIE1QRUc0ICovCisJRVhURU5ERURfUEFSCQk9IDB4Q0MsIC8qIEQsIE1QRUc0ICovCisJREJHX0hJU1RPUllfSU5QVVQwCT0gMHhEMCwgLyogQyAqLworCURCR19ISVNUT1JZX0lOUFVUMQk9IDB4RDQsCS8qIEMgKi8KKwlEQkdfSElTVE9SWV9PVVRQVVQJPSAweEQ4LAkvKiBDICovCisJSElFUkFSQ0hJQ0FMX1BfUVAJPSAweEUwLCAvKiBFLCBILjI2NCAqLworfTsKKworaW50IHM1cF9tZmNfaW5pdF9zaG0oc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpOworCisjZGVmaW5lIHM1cF9tZmNfd3JpdGVfc2htKGN0eCwgeCwgb2ZzKQkJXAorCWRvIHsJCQkJCVwKKwkJd3JpdGVsKHgsIChjdHgtPnNobSArIG9mcykpOwlcCisJCXdtYigpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB1MzIgczVwX21mY19yZWFkX3NobShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwgdW5zaWduZWQgaW50IG9mcykKK3sKKwlybWIoKTsKKwlyZXR1cm4gcmVhZGwoY3R4LT5zaG0gKyBvZnMpOworfQorCisjZW5kaWYgLyogUzVQX01GQ19TSE1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMzdkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9LY29uZmlnCkBAIC0wLDAgKzEsNzYgQEAKKyMgZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvS2NvbmZpZworIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorIwlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIyBUb21hc3ogU3RhbmlzbGF3c2tpIDx0LnN0YW5pc2xhd3NAc2Ftc3VuZy5jb20+CisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTAorCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfVFYKKwlib29sICJTYW1zdW5nIFRWIGRyaXZlciBmb3IgUzVQIHBsYXRmb3JtIChleHBlcmltZW50YWwpIgorCWRlcGVuZHMgb24gUExBVF9TNVAKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNlbGVjdGluZyB0aGUgVFYgb3V0cHV0IGRldmljZXMgZm9yCisJICBTYW1zdW5nIFM1UCBwbGF0Zm9ybS4KKworaWYgVklERU9fU0FNU1VOR19TNVBfVFYKKworY29uZmlnIFZJREVPX1NBTVNVTkdfUzVQX0hETUkKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBIRE1JIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIFZJREVPX1NBTVNVTkdfUzVQX1RWCisJc2VsZWN0IFZJREVPX1NBTVNVTkdfUzVQX0hETUlQSFkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBIRE1JIG91dHB1dAorCSAgaW50ZXJmYWNlIGluIFM1UCBTYW1zdW5nIFNvQy4gVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQKKwkgIGFzIG1vZHVsZS4gSXQgaXMgYW4gYXV4aWxpYXJ5IGRyaXZlciwgdGhhdCBleHBvc2VzIGEgVjRMMgorCSAgc3ViZGV2IGZvciB1c2UgYnkgb3RoZXIgZHJpdmVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMKKwkgIGhkbWlwaHkgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LgorCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfSERNSV9ERUJVRworCWJvb2wgIkVuYWJsZSBkZWJ1ZyBmb3IgSERNSSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19TQU1TVU5HX1M1UF9IRE1JCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlcyBkZWJ1Z2dpbmcgZm9yIEhETUkgZHJpdmVyLgorCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfSERNSVBIWQorCXRyaXN0YXRlICJTYW1zdW5nIEhETUlQSFkgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19TQU1TVU5HX1M1UF9UVgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHBoeXNpY2FsIEhETUkKKwkgIGludGVyZmFjZSBpbiBTNVAgU2Ftc3VuZyBTb0MuIFRoZSBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkCisJICBhcyBtb2R1bGUuIEl0IGlzIGFuIEkyQyBkcml2ZXIsIHRoYXQgZXhwb3NlcyBhIFY0TDIKKwkgIHN1YmRldiBmb3IgdXNlIGJ5IG90aGVyIGRyaXZlcnMuCisKK2NvbmZpZyBWSURFT19TQU1TVU5HX1M1UF9TRE8KKwl0cmlzdGF0ZSAiU2Ftc3VuZyBBbmFsb2cgVFYgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIFZJREVPX1NBTVNVTkdfUzVQX1RWCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgYW5hbG9nIFRWIG91dHB1dAorCSAgaW50ZXJmYWNlIGluIFM1UCBTYW1zdW5nIFNvQy4gVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQKKwkgIGFzIG1vZHVsZS4gSXQgaXMgYW4gYXV4aWxpYXJ5IGRyaXZlciwgdGhhdCBleHBvc2VzIGEgVjRMMgorCSAgc3ViZGV2IGZvciB1c2UgYnkgb3RoZXIgZHJpdmVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMKKwkgIGhkbWlwaHkgZHJpdmVyIHRvIHdvcmsgY29ycmVjdGx5LgorCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfTUlYRVIKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBNaXhlciBhbmQgVmlkZW8gUHJvY2Vzc29yIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBWSURFT19WNEwyCisJZGVwZW5kcyBvbiBWSURFT19TQU1TVU5HX1M1UF9UVgorCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIE1peGVyIGluIFNhbXN1bmcgUzVQIFNvQ3MuCisJICBUaGlzIGRldmljZSBwcm9kdWNlIGltYWdlIGRhdGEgdG8gb25lIG9mIG91dHB1dCBpbnRlcmZhY2VzLgorCitjb25maWcgVklERU9fU0FNU1VOR19TNVBfTUlYRVJfREVCVUcKKwlib29sICJFbmFibGUgZGVidWcgZm9yIE1peGVyIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1NBTVNVTkdfUzVQX01JWEVSCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlcyBkZWJ1Z2dpbmcgZm9yIE1peGVyIGRyaXZlci4KKworZW5kaWYgIyBWSURFT19TQU1TVU5HX1M1UF9UVgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBkcml2ZXJzL21lZGlhL3ZpZGVvL3NhbXN1bmcvdHZvdXQvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyMgVG9tYXN6IFN0YW5pc2xhd3NraSA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciBHUEwKKworb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0hETUlQSFkpICs9IHM1cC1oZG1pcGh5Lm8KK3M1cC1oZG1pcGh5LXkgKz0gaGRtaXBoeV9kcnYubworb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0hETUkpICs9IHM1cC1oZG1pLm8KK3M1cC1oZG1pLXkgKz0gaGRtaV9kcnYubworb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX1NETykgKz0gczVwLXNkby5vCitzNXAtc2RvLXkgKz0gc2RvX2Rydi5vCitvYmotJChDT05GSUdfVklERU9fU0FNU1VOR19TNVBfTUlYRVIpICs9IHM1cC1taXhlci5vCitzNXAtbWl4ZXIteSArPSBtaXhlcl9kcnYubyBtaXhlcl92aWRlby5vIG1peGVyX3JlZy5vIG1peGVyX2dycF9sYXllci5vIG1peGVyX3ZwX2xheWVyLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvaGRtaV9kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L2hkbWlfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkNjY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L2hkbWlfZHJ2LmMKQEAgLTAsMCArMSwxMDQyIEBACisvKgorICogU2Ftc3VuZyBIRE1JIGludGVyZmFjZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRvbWFzeiBTdGFuaXNsYXdza2ksIDx0LnN0YW5pc2xhd3NAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGlhdGlvbi4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwKKyAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKyAqLworCisjaWZkZWYgQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0hETUlfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSAicmVncy1oZG1pLmgiCisKK01PRFVMRV9BVVRIT1IoIlRvbWFzeiBTdGFuaXNsYXdza2ksIDx0LnN0YW5pc2xhd3NAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgSERNSSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBkZWZhdWx0IHByZXNldCBjb25maWd1cmVkIG9uIHByb2JlICovCisjZGVmaW5lIEhETUlfREVGQVVMVF9QUkVTRVQgVjRMMl9EVl8xMDgwUDYwCisKK3N0cnVjdCBoZG1pX3Jlc291cmNlcyB7CisJc3RydWN0IGNsayAqaGRtaTsKKwlzdHJ1Y3QgY2xrICpzY2xrX2hkbWk7CisJc3RydWN0IGNsayAqc2Nsa19waXhlbDsKKwlzdHJ1Y3QgY2xrICpzY2xrX2hkbWlwaHk7CisJc3RydWN0IGNsayAqaGRtaXBoeTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSAqcmVndWxfYnVsazsKKwlpbnQgcmVndWxfY291bnQ7Cit9OworCitzdHJ1Y3QgaGRtaV9kZXZpY2UgeworCS8qKiBiYXNlIGFkZHJlc3Mgb2YgSERNSSByZWdpc3RlcnMgKi8KKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJLyoqIEhETUkgaW50ZXJydXB0ICovCisJdW5zaWduZWQgaW50IGlycTsKKwkvKiogcG9pbnRlciB0byBkZXZpY2UgcGFyZW50ICovCisJc3RydWN0IGRldmljZSAqZGV2OworCS8qKiBzdWJkZXYgZ2VuZXJhdGVkIGJ5IEhETUkgZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCS8qKiBWNEwyIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJLyoqIHN1YmRldiBvZiBIRE1JUEhZIGludGVyZmFjZSAqLworCXN0cnVjdCB2NGwyX3N1YmRldiAqcGh5X3NkOworCS8qKiBjb25maWd1cmF0aW9uIG9mIGN1cnJlbnQgZ3JhcGhpYyBtb2RlICovCisJY29uc3Qgc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgKmN1cl9jb25mOworCS8qKiBjdXJyZW50IHByZXNldCAqLworCXUzMiBjdXJfcHJlc2V0OworCS8qKiBvdGhlciByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgaGRtaV9yZXNvdXJjZXMgcmVzOworfTsKKworc3RydWN0IGhkbWlfZHJpdmVyX2RhdGEgeworCWludCBoZG1pcGh5X2J1czsKK307CisKK3N0cnVjdCBoZG1pX3RnX3JlZ3MgeworCXU4IGNtZDsKKwl1OCBoX2Zzel9sOworCXU4IGhfZnN6X2g7CisJdTggaGFjdF9zdF9sOworCXU4IGhhY3Rfc3RfaDsKKwl1OCBoYWN0X3N6X2w7CisJdTggaGFjdF9zel9oOworCXU4IHZfZnN6X2w7CisJdTggdl9mc3pfaDsKKwl1OCB2c3luY19sOworCXU4IHZzeW5jX2g7CisJdTggdnN5bmMyX2w7CisJdTggdnN5bmMyX2g7CisJdTggdmFjdF9zdF9sOworCXU4IHZhY3Rfc3RfaDsKKwl1OCB2YWN0X3N6X2w7CisJdTggdmFjdF9zel9oOworCXU4IGZpZWxkX2NoZ19sOworCXU4IGZpZWxkX2NoZ19oOworCXU4IHZhY3Rfc3QyX2w7CisJdTggdmFjdF9zdDJfaDsKKwl1OCB2c3luY190b3BfaGRtaV9sOworCXU4IHZzeW5jX3RvcF9oZG1pX2g7CisJdTggdnN5bmNfYm90X2hkbWlfbDsKKwl1OCB2c3luY19ib3RfaGRtaV9oOworCXU4IGZpZWxkX3RvcF9oZG1pX2w7CisJdTggZmllbGRfdG9wX2hkbWlfaDsKKwl1OCBmaWVsZF9ib3RfaGRtaV9sOworCXU4IGZpZWxkX2JvdF9oZG1pX2g7Cit9OworCitzdHJ1Y3QgaGRtaV9jb3JlX3JlZ3MgeworCXU4IGhfYmxhbmtbMl07CisJdTggdl9ibGFua1szXTsKKwl1OCBoX3ZfbGluZVszXTsKKwl1OCB2c3luY19wb2xbMV07CisJdTggaW50X3Byb19tb2RlWzFdOworCXU4IHZfYmxhbmtfZlszXTsKKwl1OCBoX3N5bmNfZ2VuWzNdOworCXU4IHZfc3luY19nZW4xWzNdOworCXU4IHZfc3luY19nZW4yWzNdOworCXU4IHZfc3luY19nZW4zWzNdOworfTsKKworc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgeworCXN0cnVjdCBoZG1pX2NvcmVfcmVncyBjb3JlOworCXN0cnVjdCBoZG1pX3RnX3JlZ3MgdGc7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKK307CisKKy8qIEkyQyBtb2R1bGUgYW5kIGlkIGZvciBIRE1JUEhZICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGhkbWlwaHlfaW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygiaGRtaXBoeSIsIDB4MzgpLAorfTsKKworc3RhdGljIHN0cnVjdCBoZG1pX2RyaXZlcl9kYXRhIGhkbWlfZHJpdmVyX2RhdGFbXSA9IHsKKwl7IC5oZG1pcGh5X2J1cyA9IDMgfSwKKwl7IC5oZG1pcGh5X2J1cyA9IDggfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGhkbWlfZHJpdmVyX3R5cGVzW10gPSB7CisJeworCQkubmFtZQkJPSAiczVwdjIxMC1oZG1pIiwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJmhkbWlfZHJpdmVyX2RhdGFbMF0sCisJfSwgeworCQkubmFtZQkJPSAiZXh5bm9zNC1oZG1pIiwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJmhkbWlfZHJpdmVyX2RhdGFbMV0sCisJfSwgeworCQkvKiBlbmQgbm9kZSAqLworCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGhkbWlfc2Rfb3BzOworCitzdGF0aWMgc3RydWN0IGhkbWlfZGV2aWNlICpzZF90b19oZG1pX2RldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBoZG1pX2RldmljZSwgc2QpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGhkbWlfd3JpdGUoc3RydWN0IGhkbWlfZGV2aWNlICpoZGV2LCB1MzIgcmVnX2lkLCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBoZGV2LT5yZWdzICsgcmVnX2lkKTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBoZG1pX3dyaXRlX21hc2soc3RydWN0IGhkbWlfZGV2aWNlICpoZGV2LCB1MzIgcmVnX2lkLCB1MzIgdmFsdWUsIHUzMiBtYXNrKQoreworCXUzMiBvbGQgPSByZWFkbChoZGV2LT5yZWdzICsgcmVnX2lkKTsKKwl2YWx1ZSA9ICh2YWx1ZSAmIG1hc2spIHwgKG9sZCAmIH5tYXNrKTsKKwl3cml0ZWwodmFsdWUsIGhkZXYtPnJlZ3MgKyByZWdfaWQpOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGhkbWlfd3JpdGViKHN0cnVjdCBoZG1pX2RldmljZSAqaGRldiwgdTMyIHJlZ19pZCwgdTggdmFsdWUpCit7CisJd3JpdGViKHZhbHVlLCBoZGV2LT5yZWdzICsgcmVnX2lkKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaGRtaV9yZWFkKHN0cnVjdCBoZG1pX2RldmljZSAqaGRldiwgdTMyIHJlZ19pZCkKK3sKKwlyZXR1cm4gcmVhZGwoaGRldi0+cmVncyArIHJlZ19pZCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoZG1pX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9kYXRhKQoreworCXN0cnVjdCBoZG1pX2RldmljZSAqaGRldiA9IGRldl9kYXRhOworCXUzMiBpbnRjX2ZsYWc7CisKKwkodm9pZClpcnE7CisJaW50Y19mbGFnID0gaGRtaV9yZWFkKGhkZXYsIEhETUlfSU5UQ19GTEFHKTsKKwkvKiBjbGVhcmluZyBmbGFncyBmb3IgSFBEIHBsdWcvdW5wbHVnICovCisJaWYgKGludGNfZmxhZyAmIEhETUlfSU5UQ19GTEFHX0hQRF9VTlBMVUcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidW5wbHVnZ2VkXG4iKTsKKwkJaGRtaV93cml0ZV9tYXNrKGhkZXYsIEhETUlfSU5UQ19GTEFHLCB+MCwKKwkJCUhETUlfSU5UQ19GTEFHX0hQRF9VTlBMVUcpOworCX0KKwlpZiAoaW50Y19mbGFnICYgSERNSV9JTlRDX0ZMQUdfSFBEX1BMVUcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGx1Z2dlZFxuIik7CisJCWhkbWlfd3JpdGVfbWFzayhoZGV2LCBIRE1JX0lOVENfRkxBRywgfjAsCisJCQlIRE1JX0lOVENfRkxBR19IUERfUExVRyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBoZG1pX3JlZ19pbml0KHN0cnVjdCBoZG1pX2RldmljZSAqaGRldikKK3sKKwkvKiBlbmFibGUgSFBEIGludGVycnVwdHMgKi8KKwloZG1pX3dyaXRlX21hc2soaGRldiwgSERNSV9JTlRDX0NPTiwgfjAsIEhETUlfSU5UQ19FTl9HTE9CQUwgfAorCQlIRE1JX0lOVENfRU5fSFBEX1BMVUcgfCBIRE1JX0lOVENfRU5fSFBEX1VOUExVRyk7CisJLyogY2hvb3NlIEhETUkgbW9kZSAqLworCWhkbWlfd3JpdGVfbWFzayhoZGV2LCBIRE1JX01PREVfU0VMLAorCQlIRE1JX01PREVfSERNSV9FTiwgSERNSV9NT0RFX01BU0spOworCS8qIGRpc2FibGUgYmx1ZXNjcmVlbiAqLworCWhkbWlfd3JpdGVfbWFzayhoZGV2LCBIRE1JX0NPTl8wLCAwLCBIRE1JX0JMVUVfU0NSX0VOKTsKKwkvKiBjaG9vc2UgYmx1ZXNjcmVlbiAoZmVjYWwpIGNvbG9yICovCisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9CTFVFX1NDUkVFTl8wLCAweDEyKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX0JMVUVfU0NSRUVOXzEsIDB4MzQpOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfQkxVRV9TQ1JFRU5fMiwgMHg1Nik7CisJLyogZW5hYmxlIEFWSSBwYWNrZXQgZXZlcnkgdnN5bmMsIGZpeGVzIHB1cnBsZSBsaW5lIHByb2JsZW0gKi8KKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX0FWSV9DT04sIDB4MDIpOworCS8qIGZvcmNlIFlVVjQ0NCwgbG9vayB0byBDRUEtODYxLUQsIHRhYmxlIDcgZm9yIG1vcmUgZGV0YWlsICovCisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9BVklfQllURSgwKSwgMiA8PCA1KTsKKwloZG1pX3dyaXRlX21hc2soaGRldiwgSERNSV9DT05fMSwgMiwgMyA8PCA1KTsKK30KKworc3RhdGljIHZvaWQgaGRtaV90aW1pbmdfYXBwbHkoc3RydWN0IGhkbWlfZGV2aWNlICpoZGV2LAorCWNvbnN0IHN0cnVjdCBoZG1pX3ByZXNldF9jb25mICpjb25mKQoreworCWNvbnN0IHN0cnVjdCBoZG1pX2NvcmVfcmVncyAqY29yZSA9ICZjb25mLT5jb3JlOworCWNvbnN0IHN0cnVjdCBoZG1pX3RnX3JlZ3MgKnRnID0gJmNvbmYtPnRnOworCisJLyogc2V0dGluZyBjb3JlIHJlZ2lzdGVycyAqLworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfSF9CTEFOS18wLCBjb3JlLT5oX2JsYW5rWzBdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX0hfQkxBTktfMSwgY29yZS0+aF9ibGFua1sxXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WX0JMQU5LXzAsIGNvcmUtPnZfYmxhbmtbMF0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVl9CTEFOS18xLCBjb3JlLT52X2JsYW5rWzFdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1ZfQkxBTktfMiwgY29yZS0+dl9ibGFua1syXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9IX1ZfTElORV8wLCBjb3JlLT5oX3ZfbGluZVswXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9IX1ZfTElORV8xLCBjb3JlLT5oX3ZfbGluZVsxXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9IX1ZfTElORV8yLCBjb3JlLT5oX3ZfbGluZVsyXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WU1lOQ19QT0wsIGNvcmUtPnZzeW5jX3BvbFswXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9JTlRfUFJPX01PREUsIGNvcmUtPmludF9wcm9fbW9kZVswXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WX0JMQU5LX0ZfMCwgY29yZS0+dl9ibGFua19mWzBdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1ZfQkxBTktfRl8xLCBjb3JlLT52X2JsYW5rX2ZbMV0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVl9CTEFOS19GXzIsIGNvcmUtPnZfYmxhbmtfZlsyXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9IX1NZTkNfR0VOXzAsIGNvcmUtPmhfc3luY19nZW5bMF0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfSF9TWU5DX0dFTl8xLCBjb3JlLT5oX3N5bmNfZ2VuWzFdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX0hfU1lOQ19HRU5fMiwgY29yZS0+aF9zeW5jX2dlblsyXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WX1NZTkNfR0VOXzFfMCwgY29yZS0+dl9zeW5jX2dlbjFbMF0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVl9TWU5DX0dFTl8xXzEsIGNvcmUtPnZfc3luY19nZW4xWzFdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1ZfU1lOQ19HRU5fMV8yLCBjb3JlLT52X3N5bmNfZ2VuMVsyXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WX1NZTkNfR0VOXzJfMCwgY29yZS0+dl9zeW5jX2dlbjJbMF0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVl9TWU5DX0dFTl8yXzEsIGNvcmUtPnZfc3luY19nZW4yWzFdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1ZfU1lOQ19HRU5fMl8yLCBjb3JlLT52X3N5bmNfZ2VuMlsyXSk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9WX1NZTkNfR0VOXzNfMCwgY29yZS0+dl9zeW5jX2dlbjNbMF0pOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVl9TWU5DX0dFTl8zXzEsIGNvcmUtPnZfc3luY19nZW4zWzFdKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1ZfU1lOQ19HRU5fM18yLCBjb3JlLT52X3N5bmNfZ2VuM1syXSk7CisJLyogVGltaW5nIGdlbmVyYXRvciByZWdpc3RlcnMgKi8KKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX0hfRlNaX0wsIHRnLT5oX2Zzel9sKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX0hfRlNaX0gsIHRnLT5oX2Zzel9oKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX0hBQ1RfU1RfTCwgdGctPmhhY3Rfc3RfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19IQUNUX1NUX0gsIHRnLT5oYWN0X3N0X2gpOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVEdfSEFDVF9TWl9MLCB0Zy0+aGFjdF9zel9sKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX0hBQ1RfU1pfSCwgdGctPmhhY3Rfc3pfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WX0ZTWl9MLCB0Zy0+dl9mc3pfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WX0ZTWl9ILCB0Zy0+dl9mc3pfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19MLCB0Zy0+dnN5bmNfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19ILCB0Zy0+dnN5bmNfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQzJfTCwgdGctPnZzeW5jMl9sKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX1ZTWU5DMl9ILCB0Zy0+dnN5bmMyX2gpOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVEdfVkFDVF9TVF9MLCB0Zy0+dmFjdF9zdF9sKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX1ZBQ1RfU1RfSCwgdGctPnZhY3Rfc3RfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WQUNUX1NaX0wsIHRnLT52YWN0X3N6X2wpOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVEdfVkFDVF9TWl9ILCB0Zy0+dmFjdF9zel9oKTsKKwloZG1pX3dyaXRlYihoZGV2LCBIRE1JX1RHX0ZJRUxEX0NIR19MLCB0Zy0+ZmllbGRfY2hnX2wpOworCWhkbWlfd3JpdGViKGhkZXYsIEhETUlfVEdfRklFTERfQ0hHX0gsIHRnLT5maWVsZF9jaGdfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WQUNUX1NUMl9MLCB0Zy0+dmFjdF9zdDJfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WQUNUX1NUMl9ILCB0Zy0+dmFjdF9zdDJfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19UT1BfSERNSV9MLCB0Zy0+dnN5bmNfdG9wX2hkbWlfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19UT1BfSERNSV9ILCB0Zy0+dnN5bmNfdG9wX2hkbWlfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19CT1RfSERNSV9MLCB0Zy0+dnN5bmNfYm90X2hkbWlfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19WU1lOQ19CT1RfSERNSV9ILCB0Zy0+dnN5bmNfYm90X2hkbWlfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19GSUVMRF9UT1BfSERNSV9MLCB0Zy0+ZmllbGRfdG9wX2hkbWlfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19GSUVMRF9UT1BfSERNSV9ILCB0Zy0+ZmllbGRfdG9wX2hkbWlfaCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19GSUVMRF9CT1RfSERNSV9MLCB0Zy0+ZmllbGRfYm90X2hkbWlfbCk7CisJaGRtaV93cml0ZWIoaGRldiwgSERNSV9UR19GSUVMRF9CT1RfSERNSV9ILCB0Zy0+ZmllbGRfYm90X2hkbWlfaCk7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9jb25mX2FwcGx5KHN0cnVjdCBoZG1pX2RldmljZSAqaGRtaV9kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaGRtaV9kZXYtPmRldjsKKwljb25zdCBzdHJ1Y3QgaGRtaV9wcmVzZXRfY29uZiAqY29uZiA9IGhkbWlfZGV2LT5jdXJfY29uZjsKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgcHJlc2V0OworCWludCByZXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiByZXNldCBoZG1pcGh5ICovCisJaGRtaV93cml0ZV9tYXNrKGhkbWlfZGV2LCBIRE1JX1BIWV9SU1RPVVQsIH4wLCBIRE1JX1BIWV9TV19SU1RPVVQpOworCW1kZWxheSgxMCk7CisJaGRtaV93cml0ZV9tYXNrKGhkbWlfZGV2LCBIRE1JX1BIWV9SU1RPVVQsICAwLCBIRE1JX1BIWV9TV19SU1RPVVQpOworCW1kZWxheSgxMCk7CisKKwkvKiBjb25maWd1cmUgcHJlc2V0cyAqLworCXByZXNldC5wcmVzZXQgPSBoZG1pX2Rldi0+Y3VyX3ByZXNldDsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGhkbWlfZGV2LT5waHlfc2QsIHZpZGVvLCBzX2R2X3ByZXNldCwgJnByZXNldCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgcHJlc2V0ICgldSlcbiIsIHByZXNldC5wcmVzZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHJlc2V0dGluZyBIRE1JIGNvcmUgKi8KKwloZG1pX3dyaXRlX21hc2soaGRtaV9kZXYsIEhETUlfQ09SRV9SU1RPVVQsICAwLCBIRE1JX0NPUkVfU1dfUlNUT1VUKTsKKwltZGVsYXkoMTApOworCWhkbWlfd3JpdGVfbWFzayhoZG1pX2RldiwgSERNSV9DT1JFX1JTVE9VVCwgfjAsIEhETUlfQ09SRV9TV19SU1RPVVQpOworCW1kZWxheSgxMCk7CisKKwloZG1pX3JlZ19pbml0KGhkbWlfZGV2KTsKKworCS8qIHNldHRpbmcgY29yZSByZWdpc3RlcnMgKi8KKwloZG1pX3RpbWluZ19hcHBseShoZG1pX2RldiwgY29uZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9kdW1wcmVncyhzdHJ1Y3QgaGRtaV9kZXZpY2UgKmhkZXYsIGNoYXIgKnByZWZpeCkKK3sKKyNkZWZpbmUgRFVNUFJFRyhyZWdfaWQpIFwKKwlkZXZfZGJnKGhkZXYtPmRldiwgIiVzOiIgI3JlZ19pZCAiID0gJTA4eFxuIiwgcHJlZml4LCBcCisJCXJlYWRsKGhkZXYtPnJlZ3MgKyByZWdfaWQpKQorCisJZGV2X2RiZyhoZGV2LT5kZXYsICIlczogLS0tLSBDT05UUk9MIFJFR0lTVEVSUyAtLS0tXG4iLCBwcmVmaXgpOworCURVTVBSRUcoSERNSV9JTlRDX0ZMQUcpOworCURVTVBSRUcoSERNSV9JTlRDX0NPTik7CisJRFVNUFJFRyhIRE1JX0hQRF9TVEFUVVMpOworCURVTVBSRUcoSERNSV9QSFlfUlNUT1VUKTsKKwlEVU1QUkVHKEhETUlfUEhZX1ZQTEwpOworCURVTVBSRUcoSERNSV9QSFlfQ01VKTsKKwlEVU1QUkVHKEhETUlfQ09SRV9SU1RPVVQpOworCisJZGV2X2RiZyhoZGV2LT5kZXYsICIlczogLS0tLSBDT1JFIFJFR0lTVEVSUyAtLS0tXG4iLCBwcmVmaXgpOworCURVTVBSRUcoSERNSV9DT05fMCk7CisJRFVNUFJFRyhIRE1JX0NPTl8xKTsKKwlEVU1QUkVHKEhETUlfQ09OXzIpOworCURVTVBSRUcoSERNSV9TWVNfU1RBVFVTKTsKKwlEVU1QUkVHKEhETUlfUEhZX1NUQVRVUyk7CisJRFVNUFJFRyhIRE1JX1NUQVRVU19FTik7CisJRFVNUFJFRyhIRE1JX0hQRCk7CisJRFVNUFJFRyhIRE1JX01PREVfU0VMKTsKKwlEVU1QUkVHKEhETUlfSFBEX0dFTik7CisJRFVNUFJFRyhIRE1JX0RDX0NPTlRST0wpOworCURVTVBSRUcoSERNSV9WSURFT19QQVRURVJOX0dFTik7CisKKwlkZXZfZGJnKGhkZXYtPmRldiwgIiVzOiAtLS0tIENPUkUgU1lOQyBSRUdJU1RFUlMgLS0tLVxuIiwgcHJlZml4KTsKKwlEVU1QUkVHKEhETUlfSF9CTEFOS18wKTsKKwlEVU1QUkVHKEhETUlfSF9CTEFOS18xKTsKKwlEVU1QUkVHKEhETUlfVl9CTEFOS18wKTsKKwlEVU1QUkVHKEhETUlfVl9CTEFOS18xKTsKKwlEVU1QUkVHKEhETUlfVl9CTEFOS18yKTsKKwlEVU1QUkVHKEhETUlfSF9WX0xJTkVfMCk7CisJRFVNUFJFRyhIRE1JX0hfVl9MSU5FXzEpOworCURVTVBSRUcoSERNSV9IX1ZfTElORV8yKTsKKwlEVU1QUkVHKEhETUlfVlNZTkNfUE9MKTsKKwlEVU1QUkVHKEhETUlfSU5UX1BST19NT0RFKTsKKwlEVU1QUkVHKEhETUlfVl9CTEFOS19GXzApOworCURVTVBSRUcoSERNSV9WX0JMQU5LX0ZfMSk7CisJRFVNUFJFRyhIRE1JX1ZfQkxBTktfRl8yKTsKKwlEVU1QUkVHKEhETUlfSF9TWU5DX0dFTl8wKTsKKwlEVU1QUkVHKEhETUlfSF9TWU5DX0dFTl8xKTsKKwlEVU1QUkVHKEhETUlfSF9TWU5DX0dFTl8yKTsKKwlEVU1QUkVHKEhETUlfVl9TWU5DX0dFTl8xXzApOworCURVTVBSRUcoSERNSV9WX1NZTkNfR0VOXzFfMSk7CisJRFVNUFJFRyhIRE1JX1ZfU1lOQ19HRU5fMV8yKTsKKwlEVU1QUkVHKEhETUlfVl9TWU5DX0dFTl8yXzApOworCURVTVBSRUcoSERNSV9WX1NZTkNfR0VOXzJfMSk7CisJRFVNUFJFRyhIRE1JX1ZfU1lOQ19HRU5fMl8yKTsKKwlEVU1QUkVHKEhETUlfVl9TWU5DX0dFTl8zXzApOworCURVTVBSRUcoSERNSV9WX1NZTkNfR0VOXzNfMSk7CisJRFVNUFJFRyhIRE1JX1ZfU1lOQ19HRU5fM18yKTsKKworCWRldl9kYmcoaGRldi0+ZGV2LCAiJXM6IC0tLS0gVEcgUkVHSVNURVJTIC0tLS1cbiIsIHByZWZpeCk7CisJRFVNUFJFRyhIRE1JX1RHX0NNRCk7CisJRFVNUFJFRyhIRE1JX1RHX0hfRlNaX0wpOworCURVTVBSRUcoSERNSV9UR19IX0ZTWl9IKTsKKwlEVU1QUkVHKEhETUlfVEdfSEFDVF9TVF9MKTsKKwlEVU1QUkVHKEhETUlfVEdfSEFDVF9TVF9IKTsKKwlEVU1QUkVHKEhETUlfVEdfSEFDVF9TWl9MKTsKKwlEVU1QUkVHKEhETUlfVEdfSEFDVF9TWl9IKTsKKwlEVU1QUkVHKEhETUlfVEdfVl9GU1pfTCk7CisJRFVNUFJFRyhIRE1JX1RHX1ZfRlNaX0gpOworCURVTVBSRUcoSERNSV9UR19WU1lOQ19MKTsKKwlEVU1QUkVHKEhETUlfVEdfVlNZTkNfSCk7CisJRFVNUFJFRyhIRE1JX1RHX1ZTWU5DMl9MKTsKKwlEVU1QUkVHKEhETUlfVEdfVlNZTkMyX0gpOworCURVTVBSRUcoSERNSV9UR19WQUNUX1NUX0wpOworCURVTVBSRUcoSERNSV9UR19WQUNUX1NUX0gpOworCURVTVBSRUcoSERNSV9UR19WQUNUX1NaX0wpOworCURVTVBSRUcoSERNSV9UR19WQUNUX1NaX0gpOworCURVTVBSRUcoSERNSV9UR19GSUVMRF9DSEdfTCk7CisJRFVNUFJFRyhIRE1JX1RHX0ZJRUxEX0NIR19IKTsKKwlEVU1QUkVHKEhETUlfVEdfVkFDVF9TVDJfTCk7CisJRFVNUFJFRyhIRE1JX1RHX1ZBQ1RfU1QyX0gpOworCURVTVBSRUcoSERNSV9UR19WU1lOQ19UT1BfSERNSV9MKTsKKwlEVU1QUkVHKEhETUlfVEdfVlNZTkNfVE9QX0hETUlfSCk7CisJRFVNUFJFRyhIRE1JX1RHX1ZTWU5DX0JPVF9IRE1JX0wpOworCURVTVBSRUcoSERNSV9UR19WU1lOQ19CT1RfSERNSV9IKTsKKwlEVU1QUkVHKEhETUlfVEdfRklFTERfVE9QX0hETUlfTCk7CisJRFVNUFJFRyhIRE1JX1RHX0ZJRUxEX1RPUF9IRE1JX0gpOworCURVTVBSRUcoSERNSV9UR19GSUVMRF9CT1RfSERNSV9MKTsKKwlEVU1QUkVHKEhETUlfVEdfRklFTERfQk9UX0hETUlfSCk7CisjdW5kZWYgRFVNUFJFRworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgaGRtaV9jb25mXzQ4MHAgPSB7CisJLmNvcmUgPSB7CisJCS5oX2JsYW5rID0gezB4OGEsIDB4MDB9LAorCQkudl9ibGFuayA9IHsweDBkLCAweDZhLCAweDAxfSwKKwkJLmhfdl9saW5lID0gezB4MGQsIDB4YTIsIDB4MzV9LAorCQkudnN5bmNfcG9sID0gezB4MDF9LAorCQkuaW50X3Byb19tb2RlID0gezB4MDB9LAorCQkudl9ibGFua19mID0gezB4MDAsIDB4MDAsIDB4MDB9LAorCQkuaF9zeW5jX2dlbiA9IHsweDBlLCAweDMwLCAweDExfSwKKwkJLnZfc3luY19nZW4xID0gezB4MGYsIDB4OTAsIDB4MDB9LAorCQkvKiBvdGhlciBkb24ndCBjYXJlICovCisJfSwKKwkudGcgPSB7CisJCTB4MDAsIC8qIGNtZCAqLworCQkweDVhLCAweDAzLCAvKiBoX2ZzeiAqLworCQkweDhhLCAweDAwLCAweGQwLCAweDAyLCAvKiBoYWN0ICovCisJCTB4MGQsIDB4MDIsIC8qIHZfZnN6ICovCisJCTB4MDEsIDB4MDAsIDB4MzMsIDB4MDIsIC8qIHZzeW5jICovCisJCTB4MmQsIDB4MDAsIDB4ZTAsIDB4MDEsIC8qIHZhY3QgKi8KKwkJMHgzMywgMHgwMiwgLyogZmllbGRfY2hnICovCisJCTB4NDksIDB4MDIsIC8qIHZhY3Rfc3QyICovCisJCTB4MDEsIDB4MDAsIDB4MzMsIDB4MDIsIC8qIHZzeW5jIHRvcC9ib3QgKi8KKwkJMHgwMSwgMHgwMCwgMHgzMywgMHgwMiwgLyogZmllbGQgdG9wL2JvdCAqLworCX0sCisJLm1idXNfZm10ID0geworCQkud2lkdGggPSA3MjAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9GSVhFRCwgLyogbWVhbnMgUkdCODg4ICovCisJCS5maWVsZCA9IFY0TDJfRklFTERfTk9ORSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX3ByZXNldF9jb25mIGhkbWlfY29uZl83MjBwNjAgPSB7CisJLmNvcmUgPSB7CisJCS5oX2JsYW5rID0gezB4NzIsIDB4MDF9LAorCQkudl9ibGFuayA9IHsweGVlLCAweGYyLCAweDAwfSwKKwkJLmhfdl9saW5lID0gezB4ZWUsIDB4MjIsIDB4Njd9LAorCQkudnN5bmNfcG9sID0gezB4MDB9LAorCQkuaW50X3Byb19tb2RlID0gezB4MDB9LAorCQkudl9ibGFua19mID0gezB4MDAsIDB4MDAsIDB4MDB9LCAvKiBkb24ndCBjYXJlICovCisJCS5oX3N5bmNfZ2VuID0gezB4NmMsIDB4NTAsIDB4MDJ9LAorCQkudl9zeW5jX2dlbjEgPSB7MHgwYSwgMHg1MCwgMHgwMH0sCisJCS8qIG90aGVyIGRvbid0IGNhcmUgKi8KKwl9LAorCS50ZyA9IHsKKwkJMHgwMCwgLyogY21kICovCisJCTB4NzIsIDB4MDYsIC8qIGhfZnN6ICovCisJCTB4NzIsIDB4MDEsIDB4MDAsIDB4MDUsIC8qIGhhY3QgKi8KKwkJMHhlZSwgMHgwMiwgLyogdl9mc3ogKi8KKwkJMHgwMSwgMHgwMCwgMHgzMywgMHgwMiwgLyogdnN5bmMgKi8KKwkJMHgxZSwgMHgwMCwgMHhkMCwgMHgwMiwgLyogdmFjdCAqLworCQkweDMzLCAweDAyLCAvKiBmaWVsZF9jaGcgKi8KKwkJMHg0OSwgMHgwMiwgLyogdmFjdF9zdDIgKi8KKwkJMHgwMSwgMHgwMCwgMHgzMywgMHgwMiwgLyogdnN5bmMgdG9wL2JvdCAqLworCQkweDAxLCAweDAwLCAweDMzLCAweDAyLCAvKiBmaWVsZCB0b3AvYm90ICovCisJfSwKKwkubWJ1c19mbXQgPSB7CisJCS53aWR0aCA9IDEyODAsCisJCS5oZWlnaHQgPSA3MjAsCisJCS5jb2RlID0gVjRMMl9NQlVTX0ZNVF9GSVhFRCwgLyogbWVhbnMgUkdCODg4ICovCisJCS5maWVsZCA9IFY0TDJfRklFTERfTk9ORSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX3ByZXNldF9jb25mIGhkbWlfY29uZl8xMDgwcDUwID0geworCS5jb3JlID0geworCQkuaF9ibGFuayA9IHsweGQwLCAweDAyfSwKKwkJLnZfYmxhbmsgPSB7MHg2NSwgMHg2YywgMHgwMX0sCisJCS5oX3ZfbGluZSA9IHsweDY1LCAweDA0LCAweGE1fSwKKwkJLnZzeW5jX3BvbCA9IHsweDAwfSwKKwkJLmludF9wcm9fbW9kZSA9IHsweDAwfSwKKwkJLnZfYmxhbmtfZiA9IHsweDAwLCAweDAwLCAweDAwfSwgLyogZG9uJ3QgY2FyZSAqLworCQkuaF9zeW5jX2dlbiA9IHsweDBlLCAweGVhLCAweDA4fSwKKwkJLnZfc3luY19nZW4xID0gezB4MDksIDB4NDAsIDB4MDB9LAorCQkvKiBvdGhlciBkb24ndCBjYXJlICovCisJfSwKKwkudGcgPSB7CisJCTB4MDAsIC8qIGNtZCAqLworCQkweDk4LCAweDA4LCAvKiBoX2ZzeiAqLworCQkweDE4LCAweDAxLCAweDgwLCAweDA3LCAvKiBoYWN0ICovCisJCTB4NjUsIDB4MDQsIC8qIHZfZnN6ICovCisJCTB4MDEsIDB4MDAsIDB4MzMsIDB4MDIsIC8qIHZzeW5jICovCisJCTB4MmQsIDB4MDAsIDB4MzgsIDB4MDQsIC8qIHZhY3QgKi8KKwkJMHgzMywgMHgwMiwgLyogZmllbGRfY2hnICovCisJCTB4NDksIDB4MDIsIC8qIHZhY3Rfc3QyICovCisJCTB4MDEsIDB4MDAsIDB4MzMsIDB4MDIsIC8qIHZzeW5jIHRvcC9ib3QgKi8KKwkJMHgwMSwgMHgwMCwgMHgzMywgMHgwMiwgLyogZmllbGQgdG9wL2JvdCAqLworCX0sCisJLm1idXNfZm10ID0geworCQkud2lkdGggPSAxOTIwLAorCQkuaGVpZ2h0ID0gMTA4MCwKKwkJLmNvZGUgPSBWNEwyX01CVVNfRk1UX0ZJWEVELCAvKiBtZWFucyBSR0I4ODggKi8KKwkJLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgaGRtaV9jb25mXzEwODBwNjAgPSB7CisJLmNvcmUgPSB7CisJCS5oX2JsYW5rID0gezB4MTgsIDB4MDF9LAorCQkudl9ibGFuayA9IHsweDY1LCAweDZjLCAweDAxfSwKKwkJLmhfdl9saW5lID0gezB4NjUsIDB4ODQsIDB4ODl9LAorCQkudnN5bmNfcG9sID0gezB4MDB9LAorCQkuaW50X3Byb19tb2RlID0gezB4MDB9LAorCQkudl9ibGFua19mID0gezB4MDAsIDB4MDAsIDB4MDB9LCAvKiBkb24ndCBjYXJlICovCisJCS5oX3N5bmNfZ2VuID0gezB4NTYsIDB4MDgsIDB4MDJ9LAorCQkudl9zeW5jX2dlbjEgPSB7MHgwOSwgMHg0MCwgMHgwMH0sCisJCS8qIG90aGVyIGRvbid0IGNhcmUgKi8KKwl9LAorCS50ZyA9IHsKKwkJMHgwMCwgLyogY21kICovCisJCTB4OTgsIDB4MDgsIC8qIGhfZnN6ICovCisJCTB4MTgsIDB4MDEsIDB4ODAsIDB4MDcsIC8qIGhhY3QgKi8KKwkJMHg2NSwgMHgwNCwgLyogdl9mc3ogKi8KKwkJMHgwMSwgMHgwMCwgMHgzMywgMHgwMiwgLyogdnN5bmMgKi8KKwkJMHgyZCwgMHgwMCwgMHgzOCwgMHgwNCwgLyogdmFjdCAqLworCQkweDMzLCAweDAyLCAvKiBmaWVsZF9jaGcgKi8KKwkJMHg0OCwgMHgwMiwgLyogdmFjdF9zdDIgKi8KKwkJMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgLyogdnN5bmMgdG9wL2JvdCAqLworCQkweDAxLCAweDAwLCAweDMzLCAweDAyLCAvKiBmaWVsZCB0b3AvYm90ICovCisJfSwKKwkubWJ1c19mbXQgPSB7CisJCS53aWR0aCA9IDE5MjAsCisJCS5oZWlnaHQgPSAxMDgwLAorCQkuY29kZSA9IFY0TDJfTUJVU19GTVRfRklYRUQsIC8qIG1lYW5zIFJHQjg4OCAqLworCQkuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkUsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXUzMiBwcmVzZXQ7CisJY29uc3Qgc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgKmNvbmY7Cit9IGhkbWlfY29uZltdID0geworCXsgVjRMMl9EVl80ODBQNTlfOTQsICZoZG1pX2NvbmZfNDgwcCB9LAorCXsgVjRMMl9EVl83MjBQNTlfOTQsICZoZG1pX2NvbmZfNzIwcDYwIH0sCisJeyBWNEwyX0RWXzEwODBQNTAsICZoZG1pX2NvbmZfMTA4MHA1MCB9LAorCXsgVjRMMl9EVl8xMDgwUDMwLCAmaGRtaV9jb25mXzEwODBwNjAgfSwKKwl7IFY0TDJfRFZfMTA4MFA2MCwgJmhkbWlfY29uZl8xMDgwcDYwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfcHJlc2V0X2NvbmYgKmhkbWlfcHJlc2V0MmNvbmYodTMyIHByZXNldCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfY29uZik7ICsraSkKKwkJaWYgKGhkbWlfY29uZltpXS5wcmVzZXQgPT0gcHJlc2V0KQorCQkJcmV0dXJuICBoZG1pX2NvbmZbaV0uY29uZjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBoZG1pX3N0cmVhbW9uKHN0cnVjdCBoZG1pX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoZGV2LT5kZXY7CisJc3RydWN0IGhkbWlfcmVzb3VyY2VzICpyZXMgPSAmaGRldi0+cmVzOworCWludCByZXQsIHRyaWVzOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChoZGV2LT5waHlfc2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHdhaXRpbmcgZm9yIEhETUlQSFkncyBQTEwgdG8gZ2V0IHRvIHN0ZWFkeSBzdGF0ZSAqLworCWZvciAodHJpZXMgPSAxMDA7IHRyaWVzOyAtLXRyaWVzKSB7CisJCXUzMiB2YWwgPSBoZG1pX3JlYWQoaGRldiwgSERNSV9QSFlfU1RBVFVTKTsKKwkJaWYgKHZhbCAmIEhETUlfUEhZX1NUQVRVU19SRUFEWSkKKwkJCWJyZWFrOworCQltZGVsYXkoMSk7CisJfQorCS8qIHN0ZWFkeSBzdGF0ZSBub3QgYWNoaWV2ZWQgKi8KKwlpZiAodHJpZXMgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgImhkbWlwaHkncyBwbGwgY291bGQgbm90IHJlYWNoIHN0ZWFkeSBzdGF0ZS5cbiIpOworCQl2NGwyX3N1YmRldl9jYWxsKGhkZXYtPnBoeV9zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJaGRtaV9kdW1wcmVncyhoZGV2LCAic19zdHJlYW0iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogaGRtaXBoeSBjbG9jayBpcyB1c2VkIGZvciBIRE1JIGluIHN0cmVhbWluZyBtb2RlICovCisJY2xrX2Rpc2FibGUocmVzLT5zY2xrX2hkbWkpOworCWNsa19zZXRfcGFyZW50KHJlcy0+c2Nsa19oZG1pLCByZXMtPnNjbGtfaGRtaXBoeSk7CisJY2xrX2VuYWJsZShyZXMtPnNjbGtfaGRtaSk7CisKKwkvKiBlbmFibGUgSERNSSBhbmQgdGltaW5nIGdlbmVyYXRvciAqLworCWhkbWlfd3JpdGVfbWFzayhoZGV2LCBIRE1JX0NPTl8wLCB+MCwgSERNSV9FTik7CisJaGRtaV93cml0ZV9tYXNrKGhkZXYsIEhETUlfVEdfQ01ELCB+MCwgSERNSV9UR19FTik7CisJaGRtaV9kdW1wcmVncyhoZGV2LCAic3RyZWFtb24iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZG1pX3N0cmVhbW9mZihzdHJ1Y3QgaGRtaV9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaGRldi0+ZGV2OworCXN0cnVjdCBoZG1pX3Jlc291cmNlcyAqcmVzID0gJmhkZXYtPnJlczsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWhkbWlfd3JpdGVfbWFzayhoZGV2LCBIRE1JX0NPTl8wLCAwLCBIRE1JX0VOKTsKKwloZG1pX3dyaXRlX21hc2soaGRldiwgSERNSV9UR19DTUQsIDAsIEhETUlfVEdfRU4pOworCisJLyogcGl4ZWwodnBsbCkgY2xvY2sgaXMgdXNlZCBmb3IgSERNSSBpbiBjb25maWcgbW9kZSAqLworCWNsa19kaXNhYmxlKHJlcy0+c2Nsa19oZG1pKTsKKwljbGtfc2V0X3BhcmVudChyZXMtPnNjbGtfaGRtaSwgcmVzLT5zY2xrX3BpeGVsKTsKKwljbGtfZW5hYmxlKHJlcy0+c2Nsa19oZG1pKTsKKworCXY0bDJfc3ViZGV2X2NhbGwoaGRldi0+cGh5X3NkLCB2aWRlbywgc19zdHJlYW0sIDApOworCisJaGRtaV9kdW1wcmVncyhoZGV2LCAic3RyZWFtb2ZmIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBoZG1pX2RldmljZSAqaGRldiA9IHNkX3RvX2hkbWlfZGV2KHNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CisJaWYgKGVuYWJsZSkKKwkJcmV0dXJuIGhkbWlfc3RyZWFtb24oaGRldik7CisJcmV0dXJuIGhkbWlfc3RyZWFtb2ZmKGhkZXYpOworfQorCitzdGF0aWMgdm9pZCBoZG1pX3Jlc291cmNlX3Bvd2Vyb24oc3RydWN0IGhkbWlfcmVzb3VyY2VzICpyZXMpCit7CisJLyogdHVybiBIRE1JIHBvd2VyIG9uICovCisJcmVndWxhdG9yX2J1bGtfZW5hYmxlKHJlcy0+cmVndWxfY291bnQsIHJlcy0+cmVndWxfYnVsayk7CisJLyogcG93ZXItb24gaGRtaSBwaHlzaWNhbCBpbnRlcmZhY2UgKi8KKwljbGtfZW5hYmxlKHJlcy0+aGRtaXBoeSk7CisJLyogdXNlIFZQUCBhcyBwYXJlbnQgY2xvY2s7IEhETUlQSFkgaXMgbm90IHdvcmtpbmcgeWV0ICovCisJY2xrX3NldF9wYXJlbnQocmVzLT5zY2xrX2hkbWksIHJlcy0+c2Nsa19waXhlbCk7CisJLyogdHVybiBjbG9ja3Mgb24gKi8KKwljbGtfZW5hYmxlKHJlcy0+c2Nsa19oZG1pKTsKK30KKworc3RhdGljIHZvaWQgaGRtaV9yZXNvdXJjZV9wb3dlcm9mZihzdHJ1Y3QgaGRtaV9yZXNvdXJjZXMgKnJlcykKK3sKKwkvKiB0dXJuIGNsb2NrcyBvZmYgKi8KKwljbGtfZGlzYWJsZShyZXMtPnNjbGtfaGRtaSk7CisJLyogcG93ZXItb2ZmIGhkbWlwaHkgKi8KKwljbGtfZGlzYWJsZShyZXMtPmhkbWlwaHkpOworCS8qIHR1cm4gSERNSSBwb3dlciBvZmYgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHJlcy0+cmVndWxfY291bnQsIHJlcy0+cmVndWxfYnVsayk7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9zX3Bvd2VyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBvbikKK3sKKwlzdHJ1Y3QgaGRtaV9kZXZpY2UgKmhkZXYgPSBzZF90b19oZG1pX2RldihzZCk7CisJaW50IHJldDsKKworCWlmIChvbikKKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhoZGV2LT5kZXYpOworCWVsc2UKKwkJcmV0ID0gcG1fcnVudGltZV9wdXRfc3luYyhoZGV2LT5kZXYpOworCS8qIG9ubHkgdmFsdWVzIDwgMCBpbmRpY2F0ZSBlcnJvcnMgKi8KKwlyZXR1cm4gSVNfRVJSX1ZBTFVFKHJldCkgPyByZXQgOiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfc19kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCkKK3sKKwlzdHJ1Y3QgaGRtaV9kZXZpY2UgKmhkZXYgPSBzZF90b19oZG1pX2RldihzZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaGRldi0+ZGV2OworCWNvbnN0IHN0cnVjdCBoZG1pX3ByZXNldF9jb25mICpjb25mOworCisJY29uZiA9IGhkbWlfcHJlc2V0MmNvbmYocHJlc2V0LT5wcmVzZXQpOworCWlmIChjb25mID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJwcmVzZXQgKCV1KSBub3Qgc3VwcG9ydGVkXG4iLCBwcmVzZXQtPnByZXNldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwloZGV2LT5jdXJfY29uZiA9IGNvbmY7CisJaGRldi0+Y3VyX3ByZXNldCA9IHByZXNldC0+cHJlc2V0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfZ19kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCkKK3sKKwltZW1zZXQocHJlc2V0LCAwLCBzaXplb2YoKnByZXNldCkpOworCXByZXNldC0+cHJlc2V0ID0gc2RfdG9faGRtaV9kZXYoc2QpLT5jdXJfcHJlc2V0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfZ19tYnVzX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQoreworCXN0cnVjdCBoZG1pX2RldmljZSAqaGRldiA9IHNkX3RvX2hkbWlfZGV2KHNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKCFoZGV2LT5jdXJfY29uZikKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmZtdCA9IGhkZXYtPmN1cl9jb25mLT5tYnVzX2ZtdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZG1pX2VudW1fZHZfcHJlc2V0cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCXN0cnVjdCB2NGwyX2R2X2VudW1fcHJlc2V0ICpwcmVzZXQpCit7CisJaWYgKHByZXNldC0+aW5kZXggPj0gQVJSQVlfU0laRShoZG1pX2NvbmYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8oaGRtaV9jb25mW3ByZXNldC0+aW5kZXhdLnByZXNldCwgcHJlc2V0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBoZG1pX3NkX2NvcmVfb3BzID0geworCS5zX3Bvd2VyID0gaGRtaV9zX3Bvd2VyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgaGRtaV9zZF92aWRlb19vcHMgPSB7CisJLnNfZHZfcHJlc2V0ID0gaGRtaV9zX2R2X3ByZXNldCwKKwkuZ19kdl9wcmVzZXQgPSBoZG1pX2dfZHZfcHJlc2V0LAorCS5lbnVtX2R2X3ByZXNldHMgPSBoZG1pX2VudW1fZHZfcHJlc2V0cywKKwkuZ19tYnVzX2ZtdCA9IGhkbWlfZ19tYnVzX2ZtdCwKKwkuc19zdHJlYW0gPSBoZG1pX3Nfc3RyZWFtLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgaGRtaV9zZF9vcHMgPSB7CisJLmNvcmUgPSAmaGRtaV9zZF9jb3JlX29wcywKKwkudmlkZW8gPSAmaGRtaV9zZF92aWRlb19vcHMsCit9OworCitzdGF0aWMgaW50IGhkbWlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhkbWlfZGV2aWNlICpoZGV2ID0gc2RfdG9faGRtaV9kZXYoc2QpOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCWhkbWlfcmVzb3VyY2VfcG93ZXJvZmYoJmhkZXYtPnJlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZG1pX2RldmljZSAqaGRldiA9IHNkX3RvX2hkbWlfZGV2KHNkKTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWhkbWlfcmVzb3VyY2VfcG93ZXJvbigmaGRldi0+cmVzKTsKKworCXJldCA9IGhkbWlfY29uZl9hcHBseShoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlkZXZfZGJnKGRldiwgInBvd2Vyb24gc3VjY2VlZFxuIik7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwloZG1pX3Jlc291cmNlX3Bvd2Vyb2ZmKCZoZGV2LT5yZXMpOworCWRldl9lcnIoZGV2LCAicG93ZXJvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGhkbWlfcG1fb3BzID0geworCS5ydW50aW1lX3N1c3BlbmQgPSBoZG1pX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUJID0gaGRtaV9ydW50aW1lX3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIGhkbWlfcmVzb3VyY2VzX2NsZWFudXAoc3RydWN0IGhkbWlfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCBoZG1pX3Jlc291cmNlcyAqcmVzID0gJmhkZXYtPnJlczsKKworCWRldl9kYmcoaGRldi0+ZGV2LCAiSERNSSByZXNvdXJjZSBjbGVhbnVwXG4iKTsKKwkvKiBwdXQgY2xvY2tzLCBwb3dlciAqLworCWlmIChyZXMtPnJlZ3VsX2NvdW50KQorCQlyZWd1bGF0b3JfYnVsa19mcmVlKHJlcy0+cmVndWxfY291bnQsIHJlcy0+cmVndWxfYnVsayk7CisJLyoga2ZyZWUgaXMgTlVMTC1zYWZlICovCisJa2ZyZWUocmVzLT5yZWd1bF9idWxrKTsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHJlcy0+aGRtaXBoeSkpCisJCWNsa19wdXQocmVzLT5oZG1pcGh5KTsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHJlcy0+c2Nsa19oZG1pcGh5KSkKKwkJY2xrX3B1dChyZXMtPnNjbGtfaGRtaXBoeSk7CisJaWYgKCFJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfcGl4ZWwpKQorCQljbGtfcHV0KHJlcy0+c2Nsa19waXhlbCk7CisJaWYgKCFJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfaGRtaSkpCisJCWNsa19wdXQocmVzLT5zY2xrX2hkbWkpOworCWlmICghSVNfRVJSX09SX05VTEwocmVzLT5oZG1pKSkKKwkJY2xrX3B1dChyZXMtPmhkbWkpOworCW1lbXNldChyZXMsIDAsIHNpemVvZiAqcmVzKTsKK30KKworc3RhdGljIGludCBoZG1pX3Jlc291cmNlc19pbml0KHN0cnVjdCBoZG1pX2RldmljZSAqaGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoZGV2LT5kZXY7CisJc3RydWN0IGhkbWlfcmVzb3VyY2VzICpyZXMgPSAmaGRldi0+cmVzOworCXN0YXRpYyBjaGFyICpzdXBwbHlbXSA9IHsKKwkJImhkbWktZW4iLAorCQkidmRkIiwKKwkJInZkZF9vc2MiLAorCQkidmRkX3BsbCIsCisJfTsKKwlpbnQgaSwgcmV0OworCisJZGV2X2RiZyhkZXYsICJIRE1JIHJlc291cmNlIGluaXRcbiIpOworCisJbWVtc2V0KHJlcywgMCwgc2l6ZW9mICpyZXMpOworCS8qIGdldCBjbG9ja3MsIHBvd2VyICovCisKKwlyZXMtPmhkbWkgPSBjbGtfZ2V0KGRldiwgImhkbWkiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwocmVzLT5oZG1pKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2xvY2sgJ2hkbWknXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXMtPnNjbGtfaGRtaSA9IGNsa19nZXQoZGV2LCAic2Nsa19oZG1pIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHJlcy0+c2Nsa19oZG1pKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2xvY2sgJ3NjbGtfaGRtaSdcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCXJlcy0+c2Nsa19waXhlbCA9IGNsa19nZXQoZGV2LCAic2Nsa19waXhlbCIpOworCWlmIChJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfcGl4ZWwpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnc2Nsa19waXhlbCdcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCXJlcy0+c2Nsa19oZG1pcGh5ID0gY2xrX2dldChkZXYsICJzY2xrX2hkbWlwaHkiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwocmVzLT5zY2xrX2hkbWlwaHkpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnc2Nsa19oZG1pcGh5J1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJcmVzLT5oZG1pcGh5ID0gY2xrX2dldChkZXYsICJoZG1pcGh5Iik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHJlcy0+aGRtaXBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrICdoZG1pcGh5J1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJcmVzLT5yZWd1bF9idWxrID0ga3phbGxvYyhBUlJBWV9TSVpFKHN1cHBseSkgKgorCQlzaXplb2YgcmVzLT5yZWd1bF9idWxrWzBdLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcy0+cmVndWxfYnVsaykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IGZvciByZWd1bGF0b3JzXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwbHkpOyArK2kpIHsKKwkJcmVzLT5yZWd1bF9idWxrW2ldLnN1cHBseSA9IHN1cHBseVtpXTsKKwkJcmVzLT5yZWd1bF9idWxrW2ldLmNvbnN1bWVyID0gTlVMTDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKHN1cHBseSksIHJlcy0+cmVndWxfYnVsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJcmVzLT5yZWd1bF9jb3VudCA9IEFSUkFZX1NJWkUoc3VwcGx5KTsKKworCXJldHVybiAwOworZmFpbDoKKwlkZXZfZXJyKGRldiwgIkhETUkgcmVzb3VyY2UgaW5pdCAtIGZhaWxlZFxuIik7CisJaGRtaV9yZXNvdXJjZXNfY2xlYW51cChoZGV2KTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGkyY19hZGFwdGVyICpwaHlfYWRhcHRlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXN0cnVjdCBoZG1pX2RldmljZSAqaGRtaV9kZXYgPSBOVUxMOworCXN0cnVjdCBoZG1pX2RyaXZlcl9kYXRhICpkcnZfZGF0YTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhkZXYsICJwcm9iZSBzdGFydFxuIik7CisKKwloZG1pX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpoZG1pX2RldiksIEdGUF9LRVJORUwpOworCWlmICghaGRtaV9kZXYpIHsKKwkJZGV2X2VycihkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWhkbWlfZGV2LT5kZXYgPSBkZXY7CisKKwlyZXQgPSBoZG1pX3Jlc291cmNlc19pbml0KGhkbWlfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfaGRldjsKKworCS8qIG1hcHBpbmcgSERNSSByZWdpc3RlcnMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImdldCBtZW1vcnkgcmVzb3VyY2UgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX2luaXQ7CisJfQorCisJaGRtaV9kZXYtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKGhkbWlfZGV2LT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJyZWdpc3RlciBtYXBwaW5nIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9oZGV2OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IGludGVycnVwdCByZXNvdXJjZSBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVnczsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBoZG1pX2lycV9oYW5kbGVyLCAwLCAiaGRtaSIsIGhkbWlfZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAicmVxdWVzdCBpbnRlcnJ1cHQgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbF9yZWdzOworCX0KKwloZG1pX2Rldi0+aXJxID0gcmVzLT5zdGFydDsKKworCS8qIHNldHRpbmcgdjRsMiBuYW1lIHRvIHByZXZlbnQgV0FSTl9PTiBpbiB2NGwyX2RldmljZV9yZWdpc3RlciAqLworCXN0cmxjcHkoaGRtaV9kZXYtPnY0bDJfZGV2Lm5hbWUsIGRldl9uYW1lKGRldiksCisJCXNpemVvZihoZG1pX2Rldi0+djRsMl9kZXYubmFtZSkpOworCS8qIHBhc3NpbmcgTlVMTCBvd25lciBwcmV2ZW50cyBkcml2ZXIgZnJvbSBlcmFzaW5nIGRydmRhdGEgKi8KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmaGRtaV9kZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHY0bDIgZGV2aWNlLlxuIik7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJZHJ2X2RhdGEgPSAoc3RydWN0IGhkbWlfZHJpdmVyX2RhdGEgKikKKwkJcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CisJcGh5X2FkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoZHJ2X2RhdGEtPmhkbWlwaHlfYnVzKTsKKwlpZiAocGh5X2FkYXB0ZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImFkYXB0ZXIgcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF92ZGV2OworCX0KKworCWhkbWlfZGV2LT5waHlfc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZoZG1pX2Rldi0+djRsMl9kZXYsCisJCXBoeV9hZGFwdGVyLCAmaGRtaXBoeV9pbmZvLCBOVUxMKTsKKwkvKiBvbiBmYWlsdXJlIG9yIG5vdCBhZGFwdGVyIGlzIG5vIGxvbmdlciB1c2VmdWwgKi8KKwlpMmNfcHV0X2FkYXB0ZXIocGh5X2FkYXB0ZXIpOworCWlmIChoZG1pX2Rldi0+cGh5X3NkID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIHN1YmRldiBmb3IgaGRtaXBoeVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF92ZGV2OworCX0KKworCWNsa19lbmFibGUoaGRtaV9kZXYtPnJlcy5oZG1pKTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwlzZCA9ICZoZG1pX2Rldi0+c2Q7CisJdjRsMl9zdWJkZXZfaW5pdChzZCwgJmhkbWlfc2Rfb3BzKTsKKwlzZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXN0cmxjcHkoc2QtPm5hbWUsICJzNXAtaGRtaSIsIHNpemVvZiBzZC0+bmFtZSk7CisJaGRtaV9kZXYtPmN1cl9wcmVzZXQgPSBIRE1JX0RFRkFVTFRfUFJFU0VUOworCS8qIEZJWE1FOiBtaXNzaW5nIGZhaWwgcHJlc2V0IGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwloZG1pX2Rldi0+Y3VyX2NvbmYgPSBoZG1pX3ByZXNldDJjb25mKGhkbWlfZGV2LT5jdXJfcHJlc2V0KTsKKworCS8qIHN0b3Jpbmcgc3ViZGV2IGZvciBjYWxsIHRoYXQgaGF2ZSBvbmx5IGFjY2VzcyB0byBzdHJ1Y3QgZGV2aWNlICovCisJZGV2X3NldF9kcnZkYXRhKGRldiwgc2QpOworCisJZGV2X2luZm8oZGV2LCAicHJvYmUgc3VjZXNzZnVsXG4iKTsKKworCXJldHVybiAwOworCitmYWlsX3ZkZXY6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaGRtaV9kZXYtPnY0bDJfZGV2KTsKKworZmFpbF9pcnE6CisJZnJlZV9pcnEoaGRtaV9kZXYtPmlycSwgaGRtaV9kZXYpOworCitmYWlsX3JlZ3M6CisJaW91bm1hcChoZG1pX2Rldi0+cmVncyk7CisKK2ZhaWxfaW5pdDoKKwloZG1pX3Jlc291cmNlc19jbGVhbnVwKGhkbWlfZGV2KTsKKworZmFpbF9oZGV2OgorCWtmcmVlKGhkbWlfZGV2KTsKKworZmFpbDoKKwlkZXZfZXJyKGRldiwgInByb2JlIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRtaV9kZXZpY2UgKmhkbWlfZGV2ID0gc2RfdG9faGRtaV9kZXYoc2QpOworCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJY2xrX2Rpc2FibGUoaGRtaV9kZXYtPnJlcy5oZG1pKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZoZG1pX2Rldi0+djRsMl9kZXYpOworCWRpc2FibGVfaXJxKGhkbWlfZGV2LT5pcnEpOworCWZyZWVfaXJxKGhkbWlfZGV2LT5pcnEsIGhkbWlfZGV2KTsKKwlpb3VubWFwKGhkbWlfZGV2LT5yZWdzKTsKKwloZG1pX3Jlc291cmNlc19jbGVhbnVwKGhkbWlfZGV2KTsKKwlrZnJlZShoZG1pX2Rldik7CisJZGV2X2luZm8oZGV2LCAicmVtb3ZlIHN1Y2Vzc2Z1bFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRtaV9kcml2ZXIgX19yZWZkYXRhID0geworCS5wcm9iZSA9IGhkbWlfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGhkbWlfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBoZG1pX2RyaXZlcl90eXBlcywKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzNXAtaGRtaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmaGRtaV9wbV9vcHMsCisJfQorfTsKKworLyogRCBSIEkgViBFIFIgICBJIE4gSSBUIEkgQSBMIEkgWiBBIFQgSSBPIE4gKi8KKworc3RhdGljIGludCBfX2luaXQgaGRtaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkJIlNhbXN1bmcgSERNSSBvdXRwdXQgZHJpdmVyLCAiCisJCSIoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuXG4iOworCXByaW50ayhiYW5uZXIpOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoZG1pX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJIRE1JIHBsYXRmb3JtIGRyaXZlciByZWdpc3RlciBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGhkbWlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZG1pX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRtaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoaGRtaV9leGl0KTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9oZG1pcGh5X2Rydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvaGRtaXBoeV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkzZjRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvaGRtaXBoeV9kcnYuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIFNhbXN1bmcgSERNSSBQaHlzaWNhbCBpbnRlcmZhY2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogVG9tYXN6IFN0YW5pc2xhd3NraSA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KKworTU9EVUxFX0FVVEhPUigiVG9tYXN6IFN0YW5pc2xhd3NraSA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIEhETUkgUGh5c2ljYWwgaW50ZXJmYWNlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3QgaGRtaXBoeV9jb25mIHsKKwl1MzIgcHJlc2V0OworCWNvbnN0IHU4ICpkYXRhOworfTsKKworc3RhdGljIGNvbnN0IHU4IGhkbWlwaHlfY29uZjI3WzMyXSA9IHsKKwkweDAxLCAweDA1LCAweDAwLCAweEQ4LCAweDEwLCAweDFDLCAweDMwLCAweDQwLAorCTB4NkIsIDB4MTAsIDB4MDIsIDB4NTEsIDB4RGYsIDB4RjIsIDB4NTQsIDB4ODcsCisJMHg4NCwgMHgwMCwgMHgzMCwgMHgzOCwgMHgwMCwgMHgwOCwgMHgxMCwgMHhFMCwKKwkweDIyLCAweDQwLCAweGUzLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGhkbWlwaHlfY29uZjc0XzE3NVszMl0gPSB7CisJMHgwMSwgMHgwNSwgMHgwMCwgMHhEOCwgMHgxMCwgMHg5QywgMHhlZiwgMHg1QiwKKwkweDZELCAweDEwLCAweDAxLCAweDUxLCAweGVmLCAweEYzLCAweDU0LCAweGI5LAorCTB4ODQsIDB4MDAsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDgsIDB4MTAsIDB4RTAsCisJMHgyMiwgMHg0MCwgMHhhNSwgMHgyNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3N0YXRpYyBjb25zdCB1OCBoZG1pcGh5X2NvbmY3NF8yNVszMl0gPSB7CisJMHgwMSwgMHgwNSwgMHgwMCwgMHhkOCwgMHgxMCwgMHg5YywgMHhmOCwgMHg0MCwKKwkweDZhLCAweDEwLCAweDAxLCAweDUxLCAweGZmLCAweGYxLCAweDU0LCAweGJhLAorCTB4ODQsIDB4MDAsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ZTAsCisJMHgyMiwgMHg0MCwgMHhhNCwgMHgyNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3N0YXRpYyBjb25zdCB1OCBoZG1pcGh5X2NvbmYxNDhfNVszMl0gPSB7CisJMHgwMSwgMHgwNSwgMHgwMCwgMHhEOCwgMHgxMCwgMHg5QywgMHhmOCwgMHg0MCwKKwkweDZBLCAweDE4LCAweDAwLCAweDUxLCAweGZmLCAweEYxLCAweDU0LCAweGJhLAorCTB4ODQsIDB4MDAsIDB4MTAsIDB4MzgsIDB4MDAsIDB4MDgsIDB4MTAsIDB4RTAsCisJMHgyMiwgMHg0MCwgMHhhNCwgMHgyNiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRtaXBoeV9jb25mIGhkbWlwaHlfY29uZltdID0geworCXsgVjRMMl9EVl80ODBQNTlfOTQsIGhkbWlwaHlfY29uZjI3IH0sCisJeyBWNEwyX0RWXzEwODBQMzAsIGhkbWlwaHlfY29uZjc0XzE3NSB9LAorCXsgVjRMMl9EVl83MjBQNTlfOTQsIGhkbWlwaHlfY29uZjc0XzE3NSB9LAorCXsgVjRMMl9EVl83MjBQNjAsIGhkbWlwaHlfY29uZjc0XzI1IH0sCisJeyBWNEwyX0RWXzEwODBQNTAsIGhkbWlwaHlfY29uZjE0OF81IH0sCisJeyBWNEwyX0RWXzEwODBQNjAsIGhkbWlwaHlfY29uZjE0OF81IH0sCit9OworCitjb25zdCB1OCAqaGRtaXBoeV9wcmVzZXQyY29uZih1MzIgcHJlc2V0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlwaHlfY29uZik7ICsraSkKKwkJaWYgKGhkbWlwaHlfY29uZltpXS5wcmVzZXQgPT0gcHJlc2V0KQorCQkJcmV0dXJuIGhkbWlwaHlfY29uZltpXS5kYXRhOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGhkbWlwaHlfc19wb3dlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pCit7CisJLyogdG8gYmUgaW1wbGVtZW50ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZG1pcGh5X3NfZHZfcHJlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpCit7CisJY29uc3QgdTggKmRhdGE7CisJdTggYnVmZmVyWzMyXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisKKwlkZXZfaW5mbyhkZXYsICJzX2R2X3ByZXNldChwcmVzZXQgPSAlZClcbiIsIHByZXNldC0+cHJlc2V0KTsKKwlkYXRhID0gaGRtaXBoeV9wcmVzZXQyY29uZihwcmVzZXQtPnByZXNldCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoZGV2LCAiZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzdG9yaW5nIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRldmljZSAqLworCW1lbWNweShidWZmZXIsIGRhdGEsIDMyKTsKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDMyKTsKKwlpZiAocmV0ICE9IDMyKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBIRE1JUEhZIHZpYSBJMkNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZG1pcGh5X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwl1OCBidWZmZXJbMl07CisJaW50IHJldDsKKworCWRldl9pbmZvKGRldiwgInNfc3RyZWFtKCVkKVxuIiwgZW5hYmxlKTsKKwkvKiBnb2luZyB0by9mcm9tIGNvbmZpZ3VyYXRpb24gZnJvbS90byBvcGVyYXRpb24gbW9kZSAqLworCWJ1ZmZlclswXSA9IDB4MWY7CisJYnVmZmVyWzFdID0gZW5hYmxlID8gMHg4MCA6IDB4MDA7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKGRldiwgInN0cmVhbSAoJWQpIGZhaWxlZFxuIiwgZW5hYmxlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGhkbWlwaHlfY29yZV9vcHMgPSB7CisJLnNfcG93ZXIgPSAgaGRtaXBoeV9zX3Bvd2VyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgaGRtaXBoeV92aWRlb19vcHMgPSB7CisJLnNfZHZfcHJlc2V0ID0gaGRtaXBoeV9zX2R2X3ByZXNldCwKKwkuc19zdHJlYW0gPSAgaGRtaXBoeV9zX3N0cmVhbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGhkbWlwaHlfb3BzID0geworCS5jb3JlID0gJmhkbWlwaHlfY29yZV9vcHMsCisJLnZpZGVvID0gJmhkbWlwaHlfdmlkZW9fb3BzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgaGRtaXBoeV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnNkLCBjbGllbnQsICZoZG1pcGh5X29wcyk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAicHJvYmUgc3VjY2Vzc2Z1bFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGhkbWlwaHlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAicmVtb3ZlIHN1Y2Nlc3NmdWxcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaGRtaXBoeV9pZFtdID0geworCXsgImhkbWlwaHkiLCAwIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBoZG1pcGh5X2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGhkbWlwaHlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInM1cC1oZG1pcGh5IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gaGRtaXBoeV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGhkbWlwaHlfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBoZG1pcGh5X2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGRtaXBoeV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZoZG1pcGh5X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChoZG1pcGh5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaGRtaXBoeV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmhkbWlwaHlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGhkbWlwaHlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI0MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXIuaApAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIFNhbXN1bmcgVFYgTWl4ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBUb21hc3ogU3RhbmlzbGF3c2tpLCA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRpYXRpb24uIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisgKi8KKworI2lmbmRlZiBTQU1TVU5HX01JWEVSX0gKKyNkZWZpbmUgU0FNU1VOR19NSVhFUl9ICisKKyNpZmRlZiBDT05GSUdfVklERU9fU0FNU1VOR19TNVBfTUlYRVJfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItY29yZS5oPgorCisjaW5jbHVkZSAicmVncy1taXhlci5oIgorCisvKiogbWF4aW11bSBudW1iZXIgb2Ygb3V0cHV0IGludGVyZmFjZXMgKi8KKyNkZWZpbmUgTVhSX01BWF9PVVRQVVRTIDIKKy8qKiBtYXhpbXVtIG51bWJlciBvZiBpbnB1dCBpbnRlcmZhY2VzIChsYXllcnMpICovCisjZGVmaW5lIE1YUl9NQVhfTEFZRVJTIDMKKyNkZWZpbmUgTVhSX0RSSVZFUl9OQU1FICJzNXAtbWl4ZXIiCisvKiogbWF4aW1hbCBudW1iZXIgb2YgcGxhbmVzIGZvciBldmVyeSBsYXllciAqLworI2RlZmluZSBNWFJfTUFYX1BMQU5FUwkyCisKKyNkZWZpbmUgTVhSX0VOQUJMRSAxCisjZGVmaW5lIE1YUl9ESVNBQkxFIDAKKworLyoqIGRlc2NyaXB0aW9uIG9mIGEgbWFjcm9ibG9jayBmb3IgcGFja2VkIGZvcm1hdHMgKi8KK3N0cnVjdCBteHJfYmxvY2sgeworCS8qKiB2ZXJ0aWNhbCBudW1iZXIgb2YgcGl4ZWxzIGluIG1hY3JvYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJLyoqIGhvcml6b250YWwgbnVtYmVyIG9mIHBpeGVscyBpbiBtYWNyb2Jsb2NrICovCisJdW5zaWduZWQgaW50IGhlaWdodDsKKwkvKiogc2l6ZSBvZiBibG9jayBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBzaXplOworfTsKKworLyoqIGRlc2NyaXB0aW9uIG9mIHN1cHBvcnRlZCBmb3JtYXQgKi8KK3N0cnVjdCBteHJfZm9ybWF0IHsKKwkvKiogZm9ybWF0IG5hbWUvbW5lbW9uaWMgKi8KKwljb25zdCBjaGFyICpuYW1lOworCS8qKiBmb3VyY2MgaWRlbnRpZmllciAqLworCXUzMiBmb3VyY2M7CisJLyoqIGNvbG9yc3BhY2UgaWRlbnRpZmllciAqLworCWVudW0gdjRsMl9jb2xvcnNwYWNlIGNvbG9yc3BhY2U7CisJLyoqIG51bWJlciBvZiBwbGFuZXMgaW4gaW1hZ2UgZGF0YSAqLworCWludCBudW1fcGxhbmVzOworCS8qKiBkZXNjcmlwdGlvbiBvZiBibG9jayBmb3IgZWFjaCBwbGFuZSAqLworCXN0cnVjdCBteHJfYmxvY2sgcGxhbmVbTVhSX01BWF9QTEFORVNdOworCS8qKiBudW1iZXIgb2Ygc3ViZnJhbWVzIGluIGltYWdlIGRhdGEgKi8KKwlpbnQgbnVtX3N1YmZyYW1lczsKKwkvKiogc3BlY2lmaWVzIHRvIHdoaWNoIHN1YmZyYW1lIGJlbG9uZyBnaXZlbiBwbGFuZSAqLworCWludCBwbGFuZTJzdWJmcmFtZVtNWFJfTUFYX1BMQU5FU107CisJLyoqIGludGVybmFsIGNvZGUsIGRyaXZlciBkZXBlbmRhbnQgKi8KKwl1bnNpZ25lZCBsb25nIGNvb2tpZTsKK307CisKKy8qKiBkZXNjcmlwdGlvbiBvZiBjcm9wIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlICovCitzdHJ1Y3QgbXhyX2Nyb3AgeworCS8qKiB3aWR0aCBvZiBsYXllciBpbiBwaXhlbHMgKi8KKwl1bnNpZ25lZCBpbnQgZnVsbF93aWR0aDsKKwkvKiogaGVpZ2h0IG9mIGxheWVyIGluIHBpeGVscyAqLworCXVuc2lnbmVkIGludCBmdWxsX2hlaWdodDsKKwkvKiogaG9yaXpvbnRhbCBvZmZzZXQgb2YgZmlyc3QgcGl4ZWwgdG8gYmUgZGlzcGxheWVkICovCisJdW5zaWduZWQgaW50IHhfb2Zmc2V0OworCS8qKiB2ZXJ0aWNhbCBvZmZzZXQgb2YgZmlyc3QgcGl4ZWwgdG8gYmUgZGlzcGxheWVkICovCisJdW5zaWduZWQgaW50IHlfb2Zmc2V0OworCS8qKiB3aWR0aCBvZiBkaXNwbGF5ZWQgZGF0YSBpbiBwaXhlbHMgKi8KKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJLyoqIGhlaWdodCBvZiBkaXNwbGF5ZWQgZGF0YSBpbiBwaXhlbHMgKi8KKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCS8qKiBpbmRpY2F0ZSB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQgaW4gYnVmZmVyICovCisJdW5zaWduZWQgaW50IGZpZWxkOworfTsKKworLyoqIGRlc2NyaXB0aW9uIG9mIHRyYW5zZm9ybWF0aW9uIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIGltYWdlICovCitzdHJ1Y3QgbXhyX2dlb21ldHJ5IHsKKwkvKiogY3JvcHBpbmcgZm9yIHNvdXJjZSBpbWFnZSAqLworCXN0cnVjdCBteHJfY3JvcCBzcmM7CisJLyoqIGNyb3BwaW5nIGZvciBkZXN0aW5hdGlvbiBpbWFnZSAqLworCXN0cnVjdCBteHJfY3JvcCBkc3Q7CisJLyoqIGxheWVyLWRlcGVuZGFudCBkZXNjcmlwdGlvbiBvZiBob3Jpem9udGFsIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQgeF9yYXRpbzsKKwkvKiogbGF5ZXItZGVwZW5kYW50IGRlc2NyaXB0aW9uIG9mIHZlcnRpY2FsIHNjYWxpbmcgKi8KKwl1bnNpZ25lZCBpbnQgeV9yYXRpbzsKK307CisKKy8qKiBpbnN0YW5jZSBvZiBhIGJ1ZmZlciAqLworc3RydWN0IG14cl9idWZmZXIgeworCS8qKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZiMl9idWZmZXIJdmI7CisJLyoqIG5vZGUgZm9yIGxheWVyJ3MgbGlzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Cit9OworCisKKy8qKiBpbnRlcm5hbCBzdGF0ZXMgb2YgbGF5ZXIgKi8KK2VudW0gbXhyX2xheWVyX3N0YXRlIHsKKwkvKiogbGF5ZXJzIGlzIG5vdCBzaG93biAqLworCU1YUl9MQVlFUl9JRExFID0gMCwKKwkvKiogc3RhdGUgYmV0d2VlbiBTVFJFQU1PTiBhbmQgaGFyZHdhcmUgc3RhcnQgKi8KKwlNWFJfTEFZRVJfU1RSRUFNSU5HX1NUQVJULAorCS8qKiBsYXllciBpcyBzaG93biAqLworCU1YUl9MQVlFUl9TVFJFQU1JTkcsCisJLyoqIHN0YXRlIGJlZm9yZSBTVFJFQU1PRkYgaXMgZmluaXNoZWQgKi8KKwlNWFJfTEFZRVJfU1RSRUFNSU5HX0ZJTklTSCwKK307CisKKy8qKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG14cl9kZXZpY2U7CitzdHJ1Y3QgbXhyX2xheWVyOworCisvKiogY2FsbGJhY2sgZm9yIGxheWVycyBvcGVyYXRpb24gKi8KK3N0cnVjdCBteHJfbGF5ZXJfb3BzIHsKKwkvKiBUT0RPOiB0cnkgdG8gcG9ydCBpdCB0byBzdWJkZXYgQVBJICovCisJLyoqIGhhbmRsZXIgZm9yIHJlc291cmNlIHJlbGVhc2UgZnVuY3Rpb24gKi8KKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IG14cl9sYXllciAqKTsKKwkvKiogc2V0dGluZyBidWZmZXIgdG8gSFcgKi8KKwl2b2lkICgqYnVmZmVyX3NldCkoc3RydWN0IG14cl9sYXllciAqLCBzdHJ1Y3QgbXhyX2J1ZmZlciAqKTsKKwkvKiogc2V0dGluZyBmb3JtYXQgYW5kIGdlb21ldHJ5IGluIEhXICovCisJdm9pZCAoKmZvcm1hdF9zZXQpKHN0cnVjdCBteHJfbGF5ZXIgKik7CisJLyoqIHN0cmVhbWluZyBzdG9wL3N0YXJ0ICovCisJdm9pZCAoKnN0cmVhbV9zZXQpKHN0cnVjdCBteHJfbGF5ZXIgKiwgaW50KTsKKwkvKiogYWRqdXN0aW5nIGdlb21ldHJ5ICovCisJdm9pZCAoKmZpeF9nZW9tZXRyeSkoc3RydWN0IG14cl9sYXllciAqKTsKK307CisKKy8qKiBsYXllciBpbnN0YW5jZSwgYSBzaW5nbGUgd2luZG93IGFuZCBjb250ZW50IGRpc3BsYXllZCBvbiBvdXRwdXQgKi8KK3N0cnVjdCBteHJfbGF5ZXIgeworCS8qKiBwYXJlbnQgbWl4ZXIgZGV2aWNlICovCisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXY7CisJLyoqIGxheWVyIGluZGV4ICh1bmlxdWUgaWRlbnRpZmllcikgKi8KKwlpbnQgaWR4OworCS8qKiBjYWxsYmFja3MgZm9yIGxheWVyIG1ldGhvZHMgKi8KKwlzdHJ1Y3QgbXhyX2xheWVyX29wcyBvcHM7CisJLyoqIGZvcm1hdCBhcnJheSAqLworCWNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICoqZm10X2FycmF5OworCS8qKiBzaXplIG9mIGZvcm1hdCBhcnJheSAqLworCXVuc2lnbmVkIGxvbmcgZm10X2FycmF5X3NpemU7CisKKwkvKiogbG9jayBmb3IgcHJvdGVjdGlvbiBvZiBsaXN0IGFuZCBzdGF0ZSBmaWVsZHMgKi8KKwlzcGlubG9ja190IGVucV9zbG9jazsKKwkvKiogbGlzdCBmb3IgZW5xdWV1ZWQgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZW5xX2xpc3Q7CisJLyoqIGJ1ZmZlciBjdXJyZW50bHkgb3duZWQgYnkgaGFyZHdhcmUgaW4gdGVtcG9yYXJ5IHJlZ2lzdGVycyAqLworCXN0cnVjdCBteHJfYnVmZmVyICp1cGRhdGVfYnVmOworCS8qKiBidWZmZXIgY3VycmVudGx5IG93bmVkIGJ5IGhhcmR3YXJlIGluIHNoYWRvdyByZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgbXhyX2J1ZmZlciAqc2hhZG93X2J1ZjsKKwkvKiogc3RhdGUgb2YgbGF5ZXIgSURMRS9TVFJFQU1JTkcgKi8KKwllbnVtIG14cl9sYXllcl9zdGF0ZSBzdGF0ZTsKKworCS8qKiBtdXRleCBmb3IgcHJvdGVjdGlvbiBvZiBmaWVsZHMgYmVsb3cgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJLyoqIGhhbmRsZXIgZm9yIHZpZGVvIG5vZGUgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZmZDsKKwkvKiogcXVldWUgZm9yIG91dHB1dCBidWZmZXJzICovCisJc3RydWN0IHZiMl9xdWV1ZSB2Yl9xdWV1ZTsKKwkvKiogY3VycmVudCBpbWFnZSBmb3JtYXQgKi8KKwljb25zdCBzdHJ1Y3QgbXhyX2Zvcm1hdCAqZm10OworCS8qKiBjdXJyZW50IGdlb21ldHJ5IG9mIGltYWdlICovCisJc3RydWN0IG14cl9nZW9tZXRyeSBnZW87Cit9OworCisvKiogZGVzY3JpcHRpb24gb2YgbWl4ZXJzIG91dHB1dCBpbnRlcmZhY2UgKi8KK3N0cnVjdCBteHJfb3V0cHV0IHsKKwkvKiogbmFtZSBvZiBvdXRwdXQgKi8KKwljaGFyIG5hbWVbMzJdOworCS8qKiBvdXRwdXQgc3ViZGV2ICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwkvKiogY29va2llIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24gb2YgcmVnaXN0ZXJzICovCisJaW50IGNvb2tpZTsKK307CisKKy8qKiBzcGVjaWZ5IHNvdXJjZSBvZiBvdXRwdXQgc3ViZGV2cyAqLworc3RydWN0IG14cl9vdXRwdXRfY29uZiB7CisJLyoqIG5hbWUgb2Ygb3V0cHV0IChjb25uZWN0b3IpICovCisJY2hhciAqb3V0cHV0X25hbWU7CisJLyoqIG5hbWUgb2YgbW9kdWxlIHRoYXQgZ2VuZXJhdGVzIG91dHB1dCBzdWJkZXYgKi8KKwljaGFyICptb2R1bGVfbmFtZTsKKwkvKiogY29va2llIG5lZWQgZm9yIG1peGVyIEhXICovCisJaW50IGNvb2tpZTsKK307CisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgcmVndWxhdG9yOworCisvKiogYXV4aWxpYXJ5IHJlc291cmNlcyB1c2VkIG15IG1peGVyICovCitzdHJ1Y3QgbXhyX3Jlc291cmNlcyB7CisJLyoqIGludGVycnVwdCBpbmRleCAqLworCWludCBpcnE7CisJLyoqIHBvaW50ZXIgdG8gTWl4ZXIgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtICpteHJfcmVnczsKKwkvKiogcG9pbnRlciB0byBWaWRlbyBQcm9jZXNzb3IgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtICp2cF9yZWdzOworCS8qKiBvdGhlciByZXNvdXJjZXMsIHNob3VsZCB1c2VkIHVuZGVyIG14cl9kZXZpY2UubXV0ZXggKi8KKwlzdHJ1Y3QgY2xrICptaXhlcjsKKwlzdHJ1Y3QgY2xrICp2cDsKKwlzdHJ1Y3QgY2xrICpzY2xrX21peGVyOworCXN0cnVjdCBjbGsgKnNjbGtfaGRtaTsKKwlzdHJ1Y3QgY2xrICpzY2xrX2RhYzsKK307CisKKy8qIGV2ZW50IGZsYWdzIHVzZWQgICovCitlbnVtIG14cl9kZXZpZGVfZmxhZ3MgeworCU1YUl9FVkVOVF9WU1lOQyA9IDAsCit9OworCisvKiogZHJpdmVycyBpbnN0YW5jZSAqLworc3RydWN0IG14cl9kZXZpY2UgeworCS8qKiBtYXN0ZXIgZGV2aWNlICovCisJc3RydWN0IGRldmljZSAqZGV2OworCS8qKiBzdGF0ZSBvZiBlYWNoIGxheWVyICovCisJc3RydWN0IG14cl9sYXllciAqbGF5ZXJbTVhSX01BWF9MQVlFUlNdOworCS8qKiBzdGF0ZSBvZiBlYWNoIG91dHB1dCAqLworCXN0cnVjdCBteHJfb3V0cHV0ICpvdXRwdXRbTVhSX01BWF9PVVRQVVRTXTsKKwkvKiogbnVtYmVyIG9mIHJlZ2lzdGVyZWQgb3V0cHV0cyAqLworCWludCBvdXRwdXRfY250OworCisJLyogdmlkZW8gcmVzb3VyY2VzICovCisKKwkvKiogVjRMMiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJLyoqIGNvbnRleHQgb2YgYWxsb2NhdG9yICovCisJdm9pZCAqYWxsb2NfY3R4OworCS8qKiBldmVudCB3YWl0IHF1ZXVlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgZXZlbnRfcXVldWU7CisJLyoqIHN0YXRlIGZsYWdzICovCisJdW5zaWduZWQgbG9uZyBldmVudF9mbGFnczsKKworCS8qKiBzcGlubG9jayBmb3IgcHJvdGVjdGlvbiBvZiByZWdpc3RlcnMgKi8KKwlzcGlubG9ja190IHJlZ19zbG9jazsKKworCS8qKiBtdXRleCBmb3IgcHJvdGVjdGlvbiBvZiBmaWVsZHMgYmVsb3cgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJLyoqIG51bWJlciBvZiBlbnRpdGllcyBkZXBuZGFudCBvbiBvdXRwdXQgY29uZmlndXJhdGlvbiAqLworCWludCBuX291dHB1dDsKKwkvKiogbnVtYmVyIG9mIHVzZXJzIHRoYXQgZG8gc3RyZWFtaW5nICovCisJaW50IG5fc3RyZWFtZXI7CisJLyoqIGluZGV4IG9mIGN1cnJlbnQgb3V0cHV0ICovCisJaW50IGN1cnJlbnRfb3V0cHV0OworCS8qKiBhdXhpbGlhcnkgcmVzb3VyY2VzIHVzZWQgbXkgbWl4ZXIgKi8KKwlzdHJ1Y3QgbXhyX3Jlc291cmNlcyByZXM7Cit9OworCisvKiogdHJhbnNmb3JtIGRldmljZSBzdHJ1Y3R1cmUgaW50byBtaXhlciBkZXZpY2UgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG14cl9kZXZpY2UgKnRvX21kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBjb250YWluZXJfb2YodmRldiwgc3RydWN0IG14cl9kZXZpY2UsIHY0bDJfZGV2KTsKK30KKworLyoqIGdldCBjdXJyZW50IG91dHB1dCBkYXRhLCBzaG91bGQgYmUgY2FsbGVkIHVuZGVyIG1kZXYncyBtdXRleCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXhyX291dHB1dCAqdG9fb3V0cHV0KHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCXJldHVybiBtZGV2LT5vdXRwdXRbbWRldi0+Y3VycmVudF9vdXRwdXRdOworfQorCisvKiogZ2V0IGN1cnJlbnQgb3V0cHV0IHN1YmRldiwgc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBtZGV2J3MgbXV0ZXggKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJfc3ViZGV2ICp0b19vdXRzZChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbXhyX291dHB1dCAqb3V0ID0gdG9fb3V0cHV0KG1kZXYpOworCXJldHVybiBvdXQgPyBvdXQtPnNkIDogTlVMTDsKK30KKworLyoqIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIG1peGVyIHBsYXRmb3JtIGRhdGEgKi8KK3N0cnVjdCBteHJfcGxhdGZvcm1fZGF0YTsKKworLyoqIGFjcXVpcmluZyBjb21tb24gdmlkZW8gcmVzb3VyY2VzICovCitpbnQgX19kZXZpbml0IG14cl9hY3F1aXJlX3ZpZGVvKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCXN0cnVjdCBteHJfb3V0cHV0X2NvbmYgKm91dHB1dF9jb250LCBpbnQgb3V0cHV0X2NvdW50KTsKKworLyoqIHJlbGVhc2luZyBjb21tb24gdmlkZW8gcmVzb3VyY2VzICovCit2b2lkIF9fZGV2ZXhpdCBteHJfcmVsZWFzZV92aWRlbyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CisKK3N0cnVjdCBteHJfbGF5ZXIgKm14cl9ncmFwaF9sYXllcl9jcmVhdGUoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBpZHgpOworc3RydWN0IG14cl9sYXllciAqbXhyX3ZwX2xheWVyX2NyZWF0ZShzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGlkeCk7CitzdHJ1Y3QgbXhyX2xheWVyICpteHJfYmFzZV9sYXllcl9jcmVhdGUoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsCisJaW50IGlkeCwgY2hhciAqbmFtZSwgc3RydWN0IG14cl9sYXllcl9vcHMgKm9wcyk7CisKK3ZvaWQgbXhyX2Jhc2VfbGF5ZXJfcmVsZWFzZShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcik7Cit2b2lkIG14cl9sYXllcl9yZWxlYXNlKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKTsKKworaW50IG14cl9iYXNlX2xheWVyX3JlZ2lzdGVyKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKTsKK3ZvaWQgbXhyX2Jhc2VfbGF5ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbXhyX2xheWVyICpsYXllcik7CisKK3Vuc2lnbmVkIGxvbmcgbXhyX2dldF9wbGFuZV9zaXplKGNvbnN0IHN0cnVjdCBteHJfYmxvY2sgKmJsaywKKwl1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpOworCisvKiogYWRkcyBuZXcgY29uc3VtZXIgZm9yIG1peGVyJ3MgcG93ZXIgKi8KK2ludCBfX211c3RfY2hlY2sgbXhyX3Bvd2VyX2dldChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CisvKiogcmVtb3ZlcyBjb25zdW1lciBmb3IgbWl4ZXIncyBwb3dlciAqLwordm9pZCBteHJfcG93ZXJfcHV0KHN0cnVjdCBteHJfZGV2aWNlICptZGV2KTsKKy8qKiBhZGQgbmV3IGNsaWVudCBmb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gKi8KK3ZvaWQgbXhyX291dHB1dF9nZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpOworLyoqIHJlbW92ZXMgbmV3IGNsaWVudCBmb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gKi8KK3ZvaWQgbXhyX291dHB1dF9wdXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpOworLyoqIGFkZCBuZXcgY2xpZW50IGZvciBzdHJlYW1pbmcgKi8KK3ZvaWQgbXhyX3N0cmVhbWVyX2dldChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CisvKiogcmVtb3ZlcyBuZXcgY2xpZW50IGZvciBzdHJlYW1pbmcgKi8KK3ZvaWQgbXhyX3N0cmVhbWVyX3B1dChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CisvKiogcmV0dXJucyBmb3JtYXQgb2YgZGF0YSBkZWxpdmFyZWQgdG8gY3VycmVudCBvdXRwdXQgKi8KK3ZvaWQgbXhyX2dldF9tYnVzX2ZtdChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCk7CisKKy8qIERlYnVnICovCisKKyNkZWZpbmUgbXhyX2VycihtZGV2LCBmbXQsIC4uLikgIGRldl9lcnIobWRldi0+ZGV2LCBmbXQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIG14cl93YXJuKG1kZXYsIGZtdCwgLi4uKSBkZXZfd2FybihtZGV2LT5kZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgbXhyX2luZm8obWRldiwgZm10LCAuLi4pIGRldl9pbmZvKG1kZXYtPmRldiwgZm10LCAjI19fVkFfQVJHU19fKQorCisjaWZkZWYgQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX01JWEVSX0RFQlVHCisJI2RlZmluZSBteHJfZGJnKG1kZXYsIGZtdCwgLi4uKSAgZGV2X2RiZyhtZGV2LT5kZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisJI2RlZmluZSBteHJfZGJnKG1kZXYsIGZtdCwgLi4uKSAgZG8geyAodm9pZCkgbWRldjsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBhY2Nlc3NpbmcgTWl4ZXIncyBhbmQgVmlkZW8gUHJvY2Vzc29yJ3MgcmVnaXN0ZXJzICovCisKK3ZvaWQgbXhyX3ZzeW5jX3NldF91cGRhdGUoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBlbik7Cit2b2lkIG14cl9yZWdfcmVzZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpOworaXJxcmV0dXJuX3QgbXhyX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9kYXRhKTsKK3ZvaWQgbXhyX3JlZ19zX291dHB1dChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGNvb2tpZSk7Cit2b2lkIG14cl9yZWdfc3RyZWFtb24oc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpOwordm9pZCBteHJfcmVnX3N0cmVhbW9mZihzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CitpbnQgbXhyX3JlZ193YWl0NHZzeW5jKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KTsKK3ZvaWQgbXhyX3JlZ19zZXRfbWJ1c19mbXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KTsKK3ZvaWQgbXhyX3JlZ19ncmFwaF9sYXllcl9zdHJlYW0oc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBpZHgsIGludCBlbik7Cit2b2lkIG14cl9yZWdfZ3JhcGhfYnVmZmVyKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCBpbnQgaWR4LCBkbWFfYWRkcl90IGFkZHIpOwordm9pZCBteHJfcmVnX2dyYXBoX2Zvcm1hdChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGlkeCwKKwljb25zdCBzdHJ1Y3QgbXhyX2Zvcm1hdCAqZm10LCBjb25zdCBzdHJ1Y3QgbXhyX2dlb21ldHJ5ICpnZW8pOworCit2b2lkIG14cl9yZWdfdnBfbGF5ZXJfc3RyZWFtKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCBpbnQgZW4pOwordm9pZCBteHJfcmVnX3ZwX2J1ZmZlcihzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlkbWFfYWRkcl90IGx1bWFfYWRkclsyXSwgZG1hX2FkZHJfdCBjaHJvbWFfYWRkclsyXSk7Cit2b2lkIG14cl9yZWdfdnBfZm9ybWF0KHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCWNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmbXQsIGNvbnN0IHN0cnVjdCBteHJfZ2VvbWV0cnkgKmdlbyk7Cit2b2lkIG14cl9yZWdfZHVtcChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldik7CisKKyNlbmRpZiAvKiBTQU1TVU5HX01JWEVSX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXJfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDY0MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXJfZHJ2LmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBTYW1zdW5nIFRWIE1peGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogVG9tYXN6IFN0YW5pc2xhd3NraSwgPHQuc3RhbmlzbGF3c0BzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kaWF0aW9uLiBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLAorICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorICovCisKKyNpbmNsdWRlICJtaXhlci5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCitNT0RVTEVfQVVUSE9SKCJUb21hc3ogU3RhbmlzbGF3c2tpLCA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIE1JWEVSIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIC0tLS0tLS0tLSBEUklWRVIgUEFSQU1FVEVSUyAtLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgbXhyX291dHB1dF9jb25mIG14cl9vdXRwdXRfY29uZltdID0geworCXsKKwkJLm91dHB1dF9uYW1lID0gIlM1UCBIRE1JIGNvbm5lY3RvciIsCisJCS5tb2R1bGVfbmFtZSA9ICJzNXAtaGRtaSIsCisJCS5jb29raWUgPSAxLAorCX0sCisJeworCQkub3V0cHV0X25hbWUgPSAiUzVQIFNETyBjb25uZWN0b3IiLAorCQkubW9kdWxlX25hbWUgPSAiczVwLXNkbyIsCisJCS5jb29raWUgPSAwLAorCX0sCit9OworCit2b2lkIG14cl9nZXRfbWJ1c19mbXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mbXQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCXNkID0gdG9fb3V0c2QobWRldik7CisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfbWJ1c19mbXQsIG1idXNfZm10KTsKKwlXQVJOKHJldCwgImZhaWxlZCB0byBnZXQgbWJ1c19mbXQgZm9yIG91dHB1dCAlc1xuIiwgc2QtPm5hbWUpOworCW11dGV4X3VubG9jaygmbWRldi0+bXV0ZXgpOworfQorCit2b2lkIG14cl9zdHJlYW1lcl9nZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCSsrbWRldi0+bl9zdHJlYW1lcjsKKwlteHJfZGJnKG1kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBtZGV2LT5uX3N0cmVhbWVyKTsKKwlpZiAobWRldi0+bl9zdHJlYW1lciA9PSAxKSB7CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19vdXRzZChtZGV2KTsKKwkJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKKwkJc3RydWN0IG14cl9yZXNvdXJjZXMgKnJlcyA9ICZtZGV2LT5yZXM7CisJCWludCByZXQ7CisKKwkJaWYgKHRvX291dHB1dChtZGV2KS0+Y29va2llID09IDApCisJCQljbGtfc2V0X3BhcmVudChyZXMtPnNjbGtfbWl4ZXIsIHJlcy0+c2Nsa19kYWMpOworCQllbHNlCisJCQljbGtfc2V0X3BhcmVudChyZXMtPnNjbGtfbWl4ZXIsIHJlcy0+c2Nsa19oZG1pKTsKKwkJbXhyX3JlZ19zX291dHB1dChtZGV2LCB0b19vdXRwdXQobWRldiktPmNvb2tpZSk7CisKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfbWJ1c19mbXQsICZtYnVzX2ZtdCk7CisJCVdBUk4ocmV0LCAiZmFpbGVkIHRvIGdldCBtYnVzX2ZtdCBmb3Igb3V0cHV0ICVzXG4iLCBzZC0+bmFtZSk7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJCVdBUk4ocmV0LCAic3RhcnRpbmcgc3RyZWFtIGZhaWxlZCBmb3Igb3V0cHV0ICVzXG4iLCBzZC0+bmFtZSk7CisKKwkJbXhyX3JlZ19zZXRfbWJ1c19mbXQobWRldiwgJm1idXNfZm10KTsKKwkJbXhyX3JlZ19zdHJlYW1vbihtZGV2KTsKKwkJcmV0ID0gbXhyX3JlZ193YWl0NHZzeW5jKG1kZXYpOworCQlXQVJOKHJldCwgImZhaWxlZCB0byBnZXQgdnN5bmMgKCVkKSBmcm9tIG91dHB1dFxuIiwgcmV0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisJbXhyX3JlZ19kdW1wKG1kZXYpOworCS8qIEZJWE1FOiB3aGF0IHRvIGRvIHdoZW4gc3RyZWFtaW5nIGZhaWxzPyAqLworfQorCit2b2lkIG14cl9zdHJlYW1lcl9wdXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCS0tbWRldi0+bl9zdHJlYW1lcjsKKwlteHJfZGJnKG1kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBtZGV2LT5uX3N0cmVhbWVyKTsKKwlpZiAobWRldi0+bl9zdHJlYW1lciA9PSAwKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19vdXRzZChtZGV2KTsKKworCQlteHJfcmVnX3N0cmVhbW9mZihtZGV2KTsKKwkJLyogdnN5bmMgYXBwbGllcyBNaXhlciBzZXR1cCAqLworCQlyZXQgPSBteHJfcmVnX3dhaXQ0dnN5bmMobWRldik7CisJCVdBUk4ocmV0LCAiZmFpbGVkIHRvIGdldCB2c3luYyAoJWQpIGZyb20gb3V0cHV0XG4iLCByZXQpOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDApOworCQlXQVJOKHJldCwgInN0b3BwaW5nIHN0cmVhbSBmYWlsZWQgZm9yIG91dHB1dCAlc1xuIiwgc2QtPm5hbWUpOworCX0KKwlXQVJOKG1kZXYtPm5fc3RyZWFtZXIgPCAwLCAibmVnYXRpdmUgbnVtYmVyIG9mIHN0cmVhbWVycyAoJWQpXG4iLAorCQltZGV2LT5uX3N0cmVhbWVyKTsKKwltdXRleF91bmxvY2soJm1kZXYtPm11dGV4KTsKKwlteHJfcmVnX2R1bXAobWRldik7Cit9CisKK3ZvaWQgbXhyX291dHB1dF9nZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCSsrbWRldi0+bl9vdXRwdXQ7CisJbXhyX2RiZyhtZGV2LCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgbWRldi0+bl9vdXRwdXQpOworCS8qIHR1cm4gb24gYXV4aWxpYXJ5IGRyaXZlciAqLworCWlmIChtZGV2LT5uX291dHB1dCA9PSAxKQorCQl2NGwyX3N1YmRldl9jYWxsKHRvX291dHNkKG1kZXYpLCBjb3JlLCBzX3Bvd2VyLCAxKTsKKwltdXRleF91bmxvY2soJm1kZXYtPm11dGV4KTsKK30KKwordm9pZCBteHJfb3V0cHV0X3B1dChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwltdXRleF9sb2NrKCZtZGV2LT5tdXRleCk7CisJLS1tZGV2LT5uX291dHB1dDsKKwlteHJfZGJnKG1kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBtZGV2LT5uX291dHB1dCk7CisJLyogdHVybiBvbiBhdXhpbGlhcnkgZHJpdmVyICovCisJaWYgKG1kZXYtPm5fb3V0cHV0ID09IDApCisJCXY0bDJfc3ViZGV2X2NhbGwodG9fb3V0c2QobWRldiksIGNvcmUsIHNfcG93ZXIsIDApOworCVdBUk4obWRldi0+bl9vdXRwdXQgPCAwLCAibmVnYXRpdmUgbnVtYmVyIG9mIG91dHB1dCB1c2VycyAoJWQpXG4iLAorCQltZGV2LT5uX291dHB1dCk7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7Cit9CisKK2ludCBteHJfcG93ZXJfZ2V0KHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCWludCByZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKG1kZXYtPmRldik7CisKKwkvKiByZXR1cm5pbmcgMSBtZWFucyB0aGF0IHBvd2VyIGlzIGFscmVhZHkgZW5hYmxlZCwKKwkgKiBzbyB6ZXJvIHN1Y2Nlc3MgYmUgcmV0dXJuZWQgKi8KKwlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXhyX3Bvd2VyX3B1dChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG1kZXYtPmRldik7Cit9CisKKy8qIC0tLS0tLS0tLSBSRVNPVVJDRSBNQU5BR0VNRU5UIC0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHJfYWNxdWlyZV9wbGF0X3Jlc291cmNlcyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAibXhyIik7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCW14cl9lcnIobWRldiwgImdldCBtZW1vcnkgcmVzb3VyY2UgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsOworCX0KKworCW1kZXYtPnJlcy5teHJfcmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAobWRldi0+cmVzLm14cl9yZWdzID09IE5VTEwpIHsKKwkJbXhyX2VycihtZGV2LCAicmVnaXN0ZXIgbWFwcGluZyBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWw7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInZwIik7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCW14cl9lcnIobWRldiwgImdldCBtZW1vcnkgcmVzb3VyY2UgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX214cl9yZWdzOworCX0KKworCW1kZXYtPnJlcy52cF9yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChtZGV2LT5yZXMudnBfcmVncyA9PSBOVUxMKSB7CisJCW14cl9lcnIobWRldiwgInJlZ2lzdGVyIG1hcHBpbmcgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX214cl9yZWdzOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJpcnEiKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJbXhyX2VycihtZGV2LCAiZ2V0IGludGVycnVwdCByZXNvdXJjZSBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfdnBfcmVnczsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBteHJfaXJxX2hhbmRsZXIsIDAsICJzNXAtbWl4ZXIiLCBtZGV2KTsKKwlpZiAocmV0KSB7CisJCW14cl9lcnIobWRldiwgInJlcXVlc3QgaW50ZXJydXB0IGZhaWxlZC5cbiIpOworCQlnb3RvIGZhaWxfdnBfcmVnczsKKwl9CisJbWRldi0+cmVzLmlycSA9IHJlcy0+c3RhcnQ7CisKKwlyZXR1cm4gMDsKKworZmFpbF92cF9yZWdzOgorCWlvdW5tYXAobWRldi0+cmVzLnZwX3JlZ3MpOworCitmYWlsX214cl9yZWdzOgorCWlvdW5tYXAobWRldi0+cmVzLm14cl9yZWdzKTsKKworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBteHJfcmVsZWFzZV9wbGF0X3Jlc291cmNlcyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwlmcmVlX2lycShtZGV2LT5yZXMuaXJxLCBtZGV2KTsKKwlpb3VubWFwKG1kZXYtPnJlcy52cF9yZWdzKTsKKwlpb3VubWFwKG1kZXYtPnJlcy5teHJfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9yZWxlYXNlX2Nsb2NrcyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgbXhyX3Jlc291cmNlcyAqcmVzID0gJm1kZXYtPnJlczsKKworCWlmICghSVNfRVJSX09SX05VTEwocmVzLT5zY2xrX2RhYykpCisJCWNsa19wdXQocmVzLT5zY2xrX2RhYyk7CisJaWYgKCFJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfaGRtaSkpCisJCWNsa19wdXQocmVzLT5zY2xrX2hkbWkpOworCWlmICghSVNfRVJSX09SX05VTEwocmVzLT5zY2xrX21peGVyKSkKKwkJY2xrX3B1dChyZXMtPnNjbGtfbWl4ZXIpOworCWlmICghSVNfRVJSX09SX05VTEwocmVzLT52cCkpCisJCWNsa19wdXQocmVzLT52cCk7CisJaWYgKCFJU19FUlJfT1JfTlVMTChyZXMtPm1peGVyKSkKKwkJY2xrX3B1dChyZXMtPm1peGVyKTsKK30KKworc3RhdGljIGludCBteHJfYWNxdWlyZV9jbG9ja3Moc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJc3RydWN0IG14cl9yZXNvdXJjZXMgKnJlcyA9ICZtZGV2LT5yZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbWRldi0+ZGV2OworCisJcmVzLT5taXhlciA9IGNsa19nZXQoZGV2LCAibWl4ZXIiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwocmVzLT5taXhlcikpIHsKKwkJbXhyX2VycihtZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnbWl4ZXInXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXMtPnZwID0gY2xrX2dldChkZXYsICJ2cCIpOworCWlmIChJU19FUlJfT1JfTlVMTChyZXMtPnZwKSkgeworCQlteHJfZXJyKG1kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrICd2cCdcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCXJlcy0+c2Nsa19taXhlciA9IGNsa19nZXQoZGV2LCAic2Nsa19taXhlciIpOworCWlmIChJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfbWl4ZXIpKSB7CisJCW14cl9lcnIobWRldiwgImZhaWxlZCB0byBnZXQgY2xvY2sgJ3NjbGtfbWl4ZXInXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXMtPnNjbGtfaGRtaSA9IGNsa19nZXQoZGV2LCAic2Nsa19oZG1pIik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHJlcy0+c2Nsa19oZG1pKSkgeworCQlteHJfZXJyKG1kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrICdzY2xrX2hkbWknXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXMtPnNjbGtfZGFjID0gY2xrX2dldChkZXYsICJzY2xrX2RhYyIpOworCWlmIChJU19FUlJfT1JfTlVMTChyZXMtPnNjbGtfZGFjKSkgeworCQlteHJfZXJyKG1kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrICdzY2xrX2RhYydcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dXJuIDA7CitmYWlsOgorCW14cl9yZWxlYXNlX2Nsb2NrcyhtZGV2KTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXhyX2FjcXVpcmVfcmVzb3VyY2VzKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlyZXQgPSBteHJfYWNxdWlyZV9wbGF0X3Jlc291cmNlcyhtZGV2LCBwZGV2KTsKKworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IG14cl9hY3F1aXJlX2Nsb2NrcyhtZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcGxhdDsKKworCW14cl9pbmZvKG1kZXYsICJyZXNvdXJjZXMgYWNxdWlyZWRcbiIpOworCXJldHVybiAwOworCitmYWlsX3BsYXQ6CisJbXhyX3JlbGVhc2VfcGxhdF9yZXNvdXJjZXMobWRldik7CitmYWlsOgorCW14cl9lcnIobWRldiwgInJlc291cmNlcyBhY3F1aXJlIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXhyX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCW14cl9yZWxlYXNlX2Nsb2NrcyhtZGV2KTsKKwlteHJfcmVsZWFzZV9wbGF0X3Jlc291cmNlcyhtZGV2KTsKKwltZW1zZXQoJm1kZXYtPnJlcywgMCwgc2l6ZW9mIG1kZXYtPnJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9yZWxlYXNlX2xheWVycyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1kZXYtPmxheWVyKTsgKytpKQorCQlpZiAobWRldi0+bGF5ZXJbaV0pCisJCQlteHJfbGF5ZXJfcmVsZWFzZShtZGV2LT5sYXllcltpXSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14cl9hY3F1aXJlX2xheWVycyhzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlzdHJ1Y3QgbXhyX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCW1kZXYtPmxheWVyWzBdID0gbXhyX2dyYXBoX2xheWVyX2NyZWF0ZShtZGV2LCAwKTsKKwltZGV2LT5sYXllclsxXSA9IG14cl9ncmFwaF9sYXllcl9jcmVhdGUobWRldiwgMSk7CisJbWRldi0+bGF5ZXJbMl0gPSBteHJfdnBfbGF5ZXJfY3JlYXRlKG1kZXYsIDApOworCisJaWYgKCFtZGV2LT5sYXllclswXSB8fCAhbWRldi0+bGF5ZXJbMV0gfHwgIW1kZXYtPmxheWVyWzJdKSB7CisJCW14cl9lcnIobWRldiwgImZhaWxlZCB0byBhY3F1aXJlIGxheWVyc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlteHJfcmVsZWFzZV9sYXllcnMobWRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qIC0tLS0tLS0tLS0gUE9XRVIgTUFOQUdFTUVOVCAtLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IG14cl9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSB0b19tZGV2KGRldik7CisJc3RydWN0IG14cl9yZXNvdXJjZXMgKnJlcyA9ICZtZGV2LT5yZXM7CisKKwlteHJfZGJnKG1kZXYsICJyZXN1bWUgLSBzdGFydFxuIik7CisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCS8qIHR1cm4gY2xvY2tzIG9uICovCisJY2xrX2VuYWJsZShyZXMtPm1peGVyKTsKKwljbGtfZW5hYmxlKHJlcy0+dnApOworCWNsa19lbmFibGUocmVzLT5zY2xrX21peGVyKTsKKwkvKiBhcHBseSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKwlteHJfcmVnX3Jlc2V0KG1kZXYpOworCW14cl9kYmcobWRldiwgInJlc3VtZSAtIGZpbmlzaGVkXG4iKTsKKworCW11dGV4X3VubG9jaygmbWRldi0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14cl9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gdG9fbWRldihkZXYpOworCXN0cnVjdCBteHJfcmVzb3VyY2VzICpyZXMgPSAmbWRldi0+cmVzOworCW14cl9kYmcobWRldiwgInN1c3BlbmQgLSBzdGFydFxuIik7CisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCS8qIHR1cm4gY2xvY2tzIG9mZiAqLworCWNsa19kaXNhYmxlKHJlcy0+c2Nsa19taXhlcik7CisJY2xrX2Rpc2FibGUocmVzLT52cCk7CisJY2xrX2Rpc2FibGUocmVzLT5taXhlcik7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisJbXhyX2RiZyhtZGV2LCAic3VzcGVuZCAtIGZpbmlzaGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG14cl9wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IG14cl9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lCSA9IG14cl9ydW50aW1lX3Jlc3VtZSwKK307CisKKy8qIC0tLS0tLS0tLSBEUklWRVIgSU5JVElBTElaQVRJT04gLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteHJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBteHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXY7CisJaW50IHJldDsKKworCS8qIG1kZXYgZG9lcyBub3QgZXhpc3QgeWV0IHNvIG5vIG14cl9kYmcgaXMgdXNlZCAqLworCWRldl9pbmZvKGRldiwgInByb2JlIHN0YXJ0XG4iKTsKKworCW1kZXYgPSBremFsbG9jKHNpemVvZiAqbWRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZGV2KSB7CisJCW14cl9lcnIobWRldiwgIm5vdCBlbm91Z2ggbWVtb3J5LlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBzZXR1cCBwb2ludGVyIHRvIG1hc3RlciBkZXZpY2UgKi8KKwltZGV2LT5kZXYgPSBkZXY7CisKKwltdXRleF9pbml0KCZtZGV2LT5tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJm1kZXYtPnJlZ19zbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWRldi0+ZXZlbnRfcXVldWUpOworCisJLyogYWNxdWlyZSByZXNvdXJjZXM6IHJlZ3MsIGlycXMsIGNsb2NrcywgcmVndWxhdG9ycyAqLworCXJldCA9IG14cl9hY3F1aXJlX3Jlc291cmNlcyhtZGV2LCBwZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfbWVtOworCisJLyogY29uZmlndXJlIHJlc291cmNlcyBmb3IgdmlkZW8gb3V0cHV0ICovCisJcmV0ID0gbXhyX2FjcXVpcmVfdmlkZW8obWRldiwgbXhyX291dHB1dF9jb25mLAorCQlBUlJBWV9TSVpFKG14cl9vdXRwdXRfY29uZikpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9yZXNvdXJjZXM7CisKKwkvKiBjb25maWd1cmUgbGF5ZXJzICovCisJcmV0ID0gbXhyX2FjcXVpcmVfbGF5ZXJzKG1kZXYsIHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfdmlkZW87CisKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJbXhyX2luZm8obWRldiwgInByb2JlIHN1Y2Nlc3NmdWxcbiIpOworCXJldHVybiAwOworCitmYWlsX3ZpZGVvOgorCW14cl9yZWxlYXNlX3ZpZGVvKG1kZXYpOworCitmYWlsX3Jlc291cmNlczoKKwlteHJfcmVsZWFzZV9yZXNvdXJjZXMobWRldik7CisKK2ZhaWxfbWVtOgorCWtmcmVlKG1kZXYpOworCitmYWlsOgorCWRldl9pbmZvKGRldiwgInByb2JlIGZhaWxlZFxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSB0b19tZGV2KGRldik7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKworCW14cl9yZWxlYXNlX2xheWVycyhtZGV2KTsKKwlteHJfcmVsZWFzZV92aWRlbyhtZGV2KTsKKwlteHJfcmVsZWFzZV9yZXNvdXJjZXMobWRldik7CisKKwlrZnJlZShtZGV2KTsKKworCWRldl9pbmZvKGRldiwgInJlbW92ZSBzdWNlc3NmdWxcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteHJfZHJpdmVyIF9fcmVmZGF0YSA9IHsKKwkucHJvYmUgPSBteHJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG14cl9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gTVhSX0RSSVZFUl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gJm14cl9wbV9vcHMsCisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhyX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmV0OworCXN0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8KKwkJIlNhbXN1bmcgVFYgTWl4ZXIgZHJpdmVyLCAiCisJCSIoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuXG4iOworCXByaW50ayhiYW5uZXIpOworCisJLyogTG9hZGluZyBhdXhpbGlhcnkgbW9kdWxlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG14cl9vdXRwdXRfY29uZik7ICsraSkKKwkJcmVxdWVzdF9tb2R1bGUobXhyX291dHB1dF9jb25mW2ldLm1vZHVsZV9uYW1lKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXhyX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVnaXN0cmF0aW9uIG9mIE1JWEVSIGRyaXZlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQobXhyX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXhyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhyX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChteHJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl9ncnBfbGF5ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L21peGVyX2dycF9sYXllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjBiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl9ncnBfbGF5ZXIuYwpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIFNhbXN1bmcgVFYgTWl4ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBUb21hc3ogU3RhbmlzbGF3c2tpLCA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRpYXRpb24uIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisgKi8KKworI2luY2x1ZGUgIm1peGVyLmgiCisKKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPgorCisvKiBGT1JNQVQgREVGSU5JVElPTlMgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0IG14cl9mYl9mbXRfcmdiNTY1ID0geworCS5uYW1lID0gIlJHQjU2NSIsCisJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCisJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkubnVtX3BsYW5lcyA9IDEsCisJLnBsYW5lID0geworCQl7IC53aWR0aCA9IDEsIC5oZWlnaHQgPSAxLCAuc2l6ZSA9IDIgfSwKKwl9LAorCS5udW1fc3ViZnJhbWVzID0gMSwKKwkuY29va2llID0gNCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhyX2Zvcm1hdCBteHJfZmJfZm10X2FyZ2IxNTU1ID0geworCS5uYW1lID0gIkFSR0IxNTU1IiwKKwkubnVtX3BsYW5lcyA9IDEsCisJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsCisJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkucGxhbmUgPSB7CisJCXsgLndpZHRoID0gMSwgLmhlaWdodCA9IDEsIC5zaXplID0gMiB9LAorCX0sCisJLm51bV9zdWJmcmFtZXMgPSAxLAorCS5jb29raWUgPSA1LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0IG14cl9mYl9mbXRfYXJnYjQ0NDQgPSB7CisJLm5hbWUgPSAiQVJHQjQ0NDQiLAorCS5udW1fcGxhbmVzID0gMSwKKwkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjQ0NCwKKwkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCS5wbGFuZSA9IHsKKwkJeyAud2lkdGggPSAxLCAuaGVpZ2h0ID0gMSwgLnNpemUgPSAyIH0sCisJfSwKKwkubnVtX3N1YmZyYW1lcyA9IDEsCisJLmNvb2tpZSA9IDYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgbXhyX2ZiX2ZtdF9hcmdiODg4OCA9IHsKKwkubmFtZSA9ICJBUkdCODg4OCIsCisJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IzMiwKKwkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCS5udW1fcGxhbmVzID0gMSwKKwkucGxhbmUgPSB7CisJCXsgLndpZHRoID0gMSwgLmhlaWdodCA9IDEsIC5zaXplID0gNCB9LAorCX0sCisJLm51bV9zdWJmcmFtZXMgPSAxLAorCS5jb29raWUgPSA3LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpteHJfZ3JhcGhfZm9ybWF0W10gPSB7CisJJm14cl9mYl9mbXRfcmdiNTY1LAorCSZteHJfZmJfZm10X2FyZ2IxNTU1LAorCSZteHJfZmJfZm10X2FyZ2I0NDQ0LAorCSZteHJfZmJfZm10X2FyZ2I4ODg4LAorfTsKKworLyogQVVYSUxJQVJZIENBTExCQUNLUyAqLworCitzdGF0aWMgdm9pZCBteHJfZ3JhcGhfbGF5ZXJfcmVsZWFzZShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlteHJfYmFzZV9sYXllcl91bnJlZ2lzdGVyKGxheWVyKTsKKwlteHJfYmFzZV9sYXllcl9yZWxlYXNlKGxheWVyKTsKK30KKworc3RhdGljIHZvaWQgbXhyX2dyYXBoX2J1ZmZlcl9zZXQoc3RydWN0IG14cl9sYXllciAqbGF5ZXIsCisJc3RydWN0IG14cl9idWZmZXIgKmJ1ZikKK3sKKwlkbWFfYWRkcl90IGFkZHIgPSAwOworCisJaWYgKGJ1ZikKKwkJYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKCZidWYtPnZiLCAwKTsKKwlteHJfcmVnX2dyYXBoX2J1ZmZlcihsYXllci0+bWRldiwgbGF5ZXItPmlkeCwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9ncmFwaF9zdHJlYW1fc2V0KHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyLCBpbnQgZW4pCit7CisJbXhyX3JlZ19ncmFwaF9sYXllcl9zdHJlYW0obGF5ZXItPm1kZXYsIGxheWVyLT5pZHgsIGVuKTsKK30KKworc3RhdGljIHZvaWQgbXhyX2dyYXBoX2Zvcm1hdF9zZXQoc3RydWN0IG14cl9sYXllciAqbGF5ZXIpCit7CisJbXhyX3JlZ19ncmFwaF9mb3JtYXQobGF5ZXItPm1kZXYsIGxheWVyLT5pZHgsCisJCWxheWVyLT5mbXQsICZsYXllci0+Z2VvKTsKK30KKworc3RhdGljIHZvaWQgbXhyX2dyYXBoX2ZpeF9nZW9tZXRyeShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgbXhyX2dlb21ldHJ5ICpnZW8gPSAmbGF5ZXItPmdlbzsKKworCS8qIGxpbWl0IHRvIGJvdW5kYXJ5IHNpemUgKi8KKwlnZW8tPnNyYy5mdWxsX3dpZHRoID0gY2xhbXBfdmFsKGdlby0+c3JjLmZ1bGxfd2lkdGgsIDEsIDMyNzY3KTsKKwlnZW8tPnNyYy5mdWxsX2hlaWdodCA9IGNsYW1wX3ZhbChnZW8tPnNyYy5mdWxsX2hlaWdodCwgMSwgMjA0Nyk7CisJZ2VvLT5zcmMud2lkdGggPSBjbGFtcF92YWwoZ2VvLT5zcmMud2lkdGgsIDEsIGdlby0+c3JjLmZ1bGxfd2lkdGgpOworCWdlby0+c3JjLndpZHRoID0gbWluKGdlby0+c3JjLndpZHRoLCAyMDQ3VSk7CisJLyogbm90IHBvc3NpYmxlIHRvIGNyb3Agb2YgWSBheGlzICovCisJZ2VvLT5zcmMueV9vZmZzZXQgPSBtaW4oZ2VvLT5zcmMueV9vZmZzZXQsIGdlby0+c3JjLmZ1bGxfaGVpZ2h0IC0gMSk7CisJZ2VvLT5zcmMuaGVpZ2h0ID0gZ2VvLT5zcmMuZnVsbF9oZWlnaHQgLSBnZW8tPnNyYy55X29mZnNldDsKKwkvKiBsaW1pdHRpbmcgb2Zmc2V0ICovCisJZ2VvLT5zcmMueF9vZmZzZXQgPSBtaW4oZ2VvLT5zcmMueF9vZmZzZXQsCisJCWdlby0+c3JjLmZ1bGxfd2lkdGggLSBnZW8tPnNyYy53aWR0aCk7CisKKwkvKiBzZXR0aW5nIHBvc2l0aW9uIGluIG91dHB1dCAqLworCWdlby0+ZHN0LndpZHRoID0gbWluKGdlby0+ZHN0LndpZHRoLCBnZW8tPmRzdC5mdWxsX3dpZHRoKTsKKwlnZW8tPmRzdC5oZWlnaHQgPSBtaW4oZ2VvLT5kc3QuaGVpZ2h0LCBnZW8tPmRzdC5mdWxsX2hlaWdodCk7CisKKwkvKiBNaXhlciBzdXBwb3J0cyBvbmx5IDF4IGFuZCAyeCBzY2FsaW5nICovCisJaWYgKGdlby0+ZHN0LndpZHRoID49IDIgKiBnZW8tPnNyYy53aWR0aCkgeworCQlnZW8tPnhfcmF0aW8gPSAxOworCQlnZW8tPmRzdC53aWR0aCA9IDIgKiBnZW8tPnNyYy53aWR0aDsKKwl9IGVsc2UgeworCQlnZW8tPnhfcmF0aW8gPSAwOworCQlnZW8tPmRzdC53aWR0aCA9IGdlby0+c3JjLndpZHRoOworCX0KKworCWlmIChnZW8tPmRzdC5oZWlnaHQgPj0gMiAqIGdlby0+c3JjLmhlaWdodCkgeworCQlnZW8tPnlfcmF0aW8gPSAxOworCQlnZW8tPmRzdC5oZWlnaHQgPSAyICogZ2VvLT5zcmMuaGVpZ2h0OworCX0gZWxzZSB7CisJCWdlby0+eV9yYXRpbyA9IDA7CisJCWdlby0+ZHN0LmhlaWdodCA9IGdlby0+c3JjLmhlaWdodDsKKwl9CisKKwlnZW8tPmRzdC54X29mZnNldCA9IG1pbihnZW8tPmRzdC54X29mZnNldCwKKwkJZ2VvLT5kc3QuZnVsbF93aWR0aCAtIGdlby0+ZHN0LndpZHRoKTsKKwlnZW8tPmRzdC55X29mZnNldCA9IG1pbihnZW8tPmRzdC55X29mZnNldCwKKwkJZ2VvLT5kc3QuZnVsbF9oZWlnaHQgLSBnZW8tPmRzdC5oZWlnaHQpOworfQorCisvKiBQVUJMSUMgQVBJICovCisKK3N0cnVjdCBteHJfbGF5ZXIgKm14cl9ncmFwaF9sYXllcl9jcmVhdGUoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBpZHgpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXI7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXhyX2xheWVyX29wcyBvcHMgPSB7CisJCS5yZWxlYXNlID0gbXhyX2dyYXBoX2xheWVyX3JlbGVhc2UsCisJCS5idWZmZXJfc2V0ID0gbXhyX2dyYXBoX2J1ZmZlcl9zZXQsCisJCS5zdHJlYW1fc2V0ID0gbXhyX2dyYXBoX3N0cmVhbV9zZXQsCisJCS5mb3JtYXRfc2V0ID0gbXhyX2dyYXBoX2Zvcm1hdF9zZXQsCisJCS5maXhfZ2VvbWV0cnkgPSBteHJfZ3JhcGhfZml4X2dlb21ldHJ5LAorCX07CisJY2hhciBuYW1lWzMyXTsKKworCXNwcmludGYobmFtZSwgImdyYXBoJWQiLCBpZHgpOworCisJbGF5ZXIgPSBteHJfYmFzZV9sYXllcl9jcmVhdGUobWRldiwgaWR4LCBuYW1lLCAmb3BzKTsKKwlpZiAobGF5ZXIgPT0gTlVMTCkgeworCQlteHJfZXJyKG1kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBsYXllciglZCkgYmFzZVxuIiwgaWR4KTsKKwkJZ290byBmYWlsOworCX0KKworCWxheWVyLT5mbXRfYXJyYXkgPSBteHJfZ3JhcGhfZm9ybWF0OworCWxheWVyLT5mbXRfYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUobXhyX2dyYXBoX2Zvcm1hdCk7CisKKwlyZXQgPSBteHJfYmFzZV9sYXllcl9yZWdpc3RlcihsYXllcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2xheWVyOworCisJcmV0dXJuIGxheWVyOworCitmYWlsX2xheWVyOgorCW14cl9iYXNlX2xheWVyX3JlbGVhc2UobGF5ZXIpOworCitmYWlsOgorCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl9yZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L21peGVyX3JlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZGFjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl9yZWcuYwpAQCAtMCwwICsxLDU0MSBAQAorLyoKKyAqIFNhbXN1bmcgVFYgTWl4ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCisgKiBUb21hc3ogU3RhbmlzbGF3c2tpLCA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRpYXRpb24uIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisgKi8KKworI2luY2x1ZGUgIm1peGVyLmgiCisjaW5jbHVkZSAicmVncy1taXhlci5oIgorI2luY2x1ZGUgInJlZ3MtdnAuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8qIFJlZ2lzdGVyIGFjY2VzcyBzdWJyb3V0aW5lcyAqLworCitzdGF0aWMgaW5saW5lIHUzMiB2cF9yZWFkKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCB1MzIgcmVnX2lkKQoreworCXJldHVybiByZWFkbChtZGV2LT5yZXMudnBfcmVncyArIHJlZ19pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cF93cml0ZShzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgdTMyIHJlZ19pZCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBtZGV2LT5yZXMudnBfcmVncyArIHJlZ19pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cF93cml0ZV9tYXNrKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCB1MzIgcmVnX2lkLAorCXUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiBvbGQgPSB2cF9yZWFkKG1kZXYsIHJlZ19pZCk7CisKKwl2YWwgPSAodmFsICYgbWFzaykgfCAob2xkICYgfm1hc2spOworCXdyaXRlbCh2YWwsIG1kZXYtPnJlcy52cF9yZWdzICsgcmVnX2lkKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgbXhyX3JlYWQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIHUzMiByZWdfaWQpCit7CisJcmV0dXJuIHJlYWRsKG1kZXYtPnJlcy5teHJfcmVncyArIHJlZ19pZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteHJfd3JpdGUoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIHUzMiByZWdfaWQsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgbWRldi0+cmVzLm14cl9yZWdzICsgcmVnX2lkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG14cl93cml0ZV9tYXNrKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCB1MzIgcmVnX2lkLAorCXUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiBvbGQgPSBteHJfcmVhZChtZGV2LCByZWdfaWQpOworCisJdmFsID0gKHZhbCAmIG1hc2spIHwgKG9sZCAmIH5tYXNrKTsKKwl3cml0ZWwodmFsLCBtZGV2LT5yZXMubXhyX3JlZ3MgKyByZWdfaWQpOworfQorCit2b2lkIG14cl92c3luY19zZXRfdXBkYXRlKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCBpbnQgZW4pCit7CisJLyogYmxvY2sgdXBkYXRlIG9uIHZzeW5jICovCisJbXhyX3dyaXRlX21hc2sobWRldiwgTVhSX1NUQVRVUywgZW4gPyBNWFJfU1RBVFVTX1NZTkNfRU5BQkxFIDogMCwKKwkJTVhSX1NUQVRVU19TWU5DX0VOQUJMRSk7CisJdnBfd3JpdGUobWRldiwgVlBfU0hBRE9XX1VQREFURSwgZW4gPyBWUF9TSEFET1dfVVBEQVRFX0VOQUJMRSA6IDApOworfQorCitzdGF0aWMgdm9pZCBfX214cl9yZWdfdnBfcmVzZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJaW50IHRyaWVzID0gMTAwOworCisJdnBfd3JpdGUobWRldiwgVlBfU1JFU0VULCBWUF9TUkVTRVRfUFJPQ0VTU0lORyk7CisJZm9yICh0cmllcyA9IDEwMDsgdHJpZXM7IC0tdHJpZXMpIHsKKwkJLyogd2FpdGluZyB1bnRpbCBWUF9TUkVTRVRfUFJPQ0VTU0lORyBpcyAwICovCisJCWlmICh+dnBfcmVhZChtZGV2LCBWUF9TUkVTRVQpICYgVlBfU1JFU0VUX1BST0NFU1NJTkcpCisJCQlicmVhazsKKwkJbWRlbGF5KDEwKTsKKwl9CisJV0FSTih0cmllcyA9PSAwLCAiZmFpbGVkIHRvIHJlc2V0IFZpZGVvIFByb2Nlc3NvclxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9yZWdfdnBfZGVmYXVsdF9maWx0ZXIoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpOworCit2b2lkIG14cl9yZWdfcmVzZXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOyAvKiB2YWx1ZSBzdG9yZWQgdG8gcmVnaXN0ZXIgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZGV2LT5yZWdfc2xvY2ssIGZsYWdzKTsKKwlteHJfdnN5bmNfc2V0X3VwZGF0ZShtZGV2LCBNWFJfRElTQUJMRSk7CisKKwkvKiBzZXQgb3V0cHV0IGluIFJHQjg4OCBtb2RlICovCisJbXhyX3dyaXRlKG1kZXYsIE1YUl9DRkcsIE1YUl9DRkdfT1VUX1lVVjQ0NCk7CisKKwkvKiAxNiBiZWF0IGJ1cnN0IGluIERNQSAqLworCW14cl93cml0ZV9tYXNrKG1kZXYsIE1YUl9TVEFUVVMsIE1YUl9TVEFUVVNfMTZfQlVSU1QsCisJCU1YUl9TVEFUVVNfQlVSU1RfTUFTSyk7CisKKwkvKiBzZXR0aW5nIGRlZmF1bHQgbGF5ZXIgcHJpb3JpdHk6IGxheWVyMSA+IHZpZGVvID4gbGF5ZXIwCisJICogYmVjYXVzZSB0eXBpY2FsIHVzYWdlIHNjZW5hcmlvIHdvdWxkIGJlCisJICogbGF5ZXIwIC0gZnJhbWVidWZmZXIKKwkgKiB2aWRlbyAtIHZpZGVvIG92ZXJsYXkKKwkgKiBsYXllcjEgLSBPU0QKKwkgKi8KKwl2YWwgID0gTVhSX0xBWUVSX0NGR19HUlAwX1ZBTCgxKTsKKwl2YWwgfD0gTVhSX0xBWUVSX0NGR19WUF9WQUwoMik7CisJdmFsIHw9IE1YUl9MQVlFUl9DRkdfR1JQMV9WQUwoMyk7CisJbXhyX3dyaXRlKG1kZXYsIE1YUl9MQVlFUl9DRkcsIHZhbCk7CisKKwkvKiB1c2UgZGFyayBncmF5IGJhY2tncm91bmQgY29sb3IgKi8KKwlteHJfd3JpdGUobWRldiwgTVhSX0JHX0NPTE9SMCwgMHg4MDgwODApOworCW14cl93cml0ZShtZGV2LCBNWFJfQkdfQ09MT1IxLCAweDgwODA4MCk7CisJbXhyX3dyaXRlKG1kZXYsIE1YUl9CR19DT0xPUjIsIDB4ODA4MDgwKTsKKworCS8qIHNldHRpbmcgZ3JhcGhpY2FsIGxheWVycyAqLworCisJdmFsICA9IE1YUl9HUlBfQ0ZHX0NPTE9SX0tFWV9ESVNBQkxFOyAvKiBubyBibGFuayBrZXkgKi8KKwl2YWwgfD0gTVhSX0dSUF9DRkdfQkxFTkRfUFJFX01VTDsgLyogcHJlbXVsIG1vZGUgKi8KKwl2YWwgfD0gTVhSX0dSUF9DRkdfQUxQSEFfVkFMKDB4ZmYpOyAvKiBub24tdHJhbnNwYXJlbnQgYWxwaGEgKi8KKworCS8qIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZm9yIGJvdGggbGF5ZXJzICovCisJbXhyX3dyaXRlKG1kZXYsIE1YUl9HUkFQSElDX0NGRygwKSwgdmFsKTsKKwlteHJfd3JpdGUobWRldiwgTVhSX0dSQVBISUNfQ0ZHKDEpLCB2YWwpOworCisJLyogY29uZmlndXJhdGlvbiBvZiBWaWRlbyBQcm9jZXNzb3IgUmVnaXN0ZXJzICovCisJX19teHJfcmVnX3ZwX3Jlc2V0KG1kZXYpOworCW14cl9yZWdfdnBfZGVmYXVsdF9maWx0ZXIobWRldik7CisKKwkvKiBlbmFibGUgYWxsIGludGVycnVwdHMgKi8KKwlteHJfd3JpdGVfbWFzayhtZGV2LCBNWFJfSU5UX0VOLCB+MCwgTVhSX0lOVF9FTl9BTEwpOworCisJbXhyX3ZzeW5jX3NldF91cGRhdGUobWRldiwgTVhSX0VOQUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgbXhyX3JlZ19ncmFwaF9mb3JtYXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBpZHgsCisJY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgKmZtdCwgY29uc3Qgc3RydWN0IG14cl9nZW9tZXRyeSAqZ2VvKQoreworCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZGV2LT5yZWdfc2xvY2ssIGZsYWdzKTsKKwlteHJfdnN5bmNfc2V0X3VwZGF0ZShtZGV2LCBNWFJfRElTQUJMRSk7CisKKwkvKiBzZXR1cCBmb3JtYXQgKi8KKwlteHJfd3JpdGVfbWFzayhtZGV2LCBNWFJfR1JBUEhJQ19DRkcoaWR4KSwKKwkJTVhSX0dSUF9DRkdfRk9STUFUX1ZBTChmbXQtPmNvb2tpZSksIE1YUl9HUlBfQ0ZHX0ZPUk1BVF9NQVNLKTsKKworCS8qIHNldHVwIGdlb21ldHJ5ICovCisJbXhyX3dyaXRlKG1kZXYsIE1YUl9HUkFQSElDX1NQQU4oaWR4KSwgZ2VvLT5zcmMuZnVsbF93aWR0aCk7CisJdmFsICA9IE1YUl9HUlBfV0hfV0lEVEgoZ2VvLT5zcmMud2lkdGgpOworCXZhbCB8PSBNWFJfR1JQX1dIX0hFSUdIVChnZW8tPnNyYy5oZWlnaHQpOworCXZhbCB8PSBNWFJfR1JQX1dIX0hfU0NBTEUoZ2VvLT54X3JhdGlvKTsKKwl2YWwgfD0gTVhSX0dSUF9XSF9WX1NDQUxFKGdlby0+eV9yYXRpbyk7CisJbXhyX3dyaXRlKG1kZXYsIE1YUl9HUkFQSElDX1dIKGlkeCksIHZhbCk7CisKKwkvKiBzZXR1cCBvZmZzZXRzIGluIHNvdXJjZSBpbWFnZSAqLworCXZhbCAgPSBNWFJfR1JQX1NYWV9TWChnZW8tPnNyYy54X29mZnNldCk7CisJdmFsIHw9IE1YUl9HUlBfU1hZX1NZKGdlby0+c3JjLnlfb2Zmc2V0KTsKKwlteHJfd3JpdGUobWRldiwgTVhSX0dSQVBISUNfU1hZKGlkeCksIHZhbCk7CisKKwkvKiBzZXR1cCBvZmZzZXRzIGluIGRpc3BsYXkgaW1hZ2UgKi8KKwl2YWwgID0gTVhSX0dSUF9EWFlfRFgoZ2VvLT5kc3QueF9vZmZzZXQpOworCXZhbCB8PSBNWFJfR1JQX0RYWV9EWShnZW8tPmRzdC55X29mZnNldCk7CisJbXhyX3dyaXRlKG1kZXYsIE1YUl9HUkFQSElDX0RYWShpZHgpLCB2YWwpOworCisJbXhyX3ZzeW5jX3NldF91cGRhdGUobWRldiwgTVhSX0VOQUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgbXhyX3JlZ192cF9mb3JtYXQoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsCisJY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgKmZtdCwgY29uc3Qgc3RydWN0IG14cl9nZW9tZXRyeSAqZ2VvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7CisJbXhyX3ZzeW5jX3NldF91cGRhdGUobWRldiwgTVhSX0RJU0FCTEUpOworCisJdnBfd3JpdGVfbWFzayhtZGV2LCBWUF9NT0RFLCBmbXQtPmNvb2tpZSwgVlBfTU9ERV9GTVRfTUFTSyk7CisKKwkvKiBzZXR0aW5nIHNpemUgb2YgaW5wdXQgaW1hZ2UgKi8KKwl2cF93cml0ZShtZGV2LCBWUF9JTUdfU0laRV9ZLCBWUF9JTUdfSFNJWkUoZ2VvLT5zcmMuZnVsbF93aWR0aCkgfAorCQlWUF9JTUdfVlNJWkUoZ2VvLT5zcmMuZnVsbF9oZWlnaHQpKTsKKwkvKiBjaHJvbWEgaGVpZ2h0IGhhcyB0byByZWR1Y2VkIGJ5IDIgdG8gYXZvaWQgY2hyb21hIGRpc3RvcmlvbnMgKi8KKwl2cF93cml0ZShtZGV2LCBWUF9JTUdfU0laRV9DLCBWUF9JTUdfSFNJWkUoZ2VvLT5zcmMuZnVsbF93aWR0aCkgfAorCQlWUF9JTUdfVlNJWkUoZ2VvLT5zcmMuZnVsbF9oZWlnaHQgLyAyKSk7CisKKwl2cF93cml0ZShtZGV2LCBWUF9TUkNfV0lEVEgsIGdlby0+c3JjLndpZHRoKTsKKwl2cF93cml0ZShtZGV2LCBWUF9TUkNfSEVJR0hULCBnZW8tPnNyYy5oZWlnaHQpOworCXZwX3dyaXRlKG1kZXYsIFZQX1NSQ19IX1BPU0lUSU9OLAorCQlWUF9TUkNfSF9QT1NJVElPTl9WQUwoZ2VvLT5zcmMueF9vZmZzZXQpKTsKKwl2cF93cml0ZShtZGV2LCBWUF9TUkNfVl9QT1NJVElPTiwgZ2VvLT5zcmMueV9vZmZzZXQpOworCisJdnBfd3JpdGUobWRldiwgVlBfRFNUX1dJRFRILCBnZW8tPmRzdC53aWR0aCk7CisJdnBfd3JpdGUobWRldiwgVlBfRFNUX0hfUE9TSVRJT04sIGdlby0+ZHN0Lnhfb2Zmc2V0KTsKKwlpZiAoZ2VvLT5kc3QuZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKSB7CisJCXZwX3dyaXRlKG1kZXYsIFZQX0RTVF9IRUlHSFQsIGdlby0+ZHN0LmhlaWdodCAvIDIpOworCQl2cF93cml0ZShtZGV2LCBWUF9EU1RfVl9QT1NJVElPTiwgZ2VvLT5kc3QueV9vZmZzZXQgLyAyKTsKKwl9IGVsc2UgeworCQl2cF93cml0ZShtZGV2LCBWUF9EU1RfSEVJR0hULCBnZW8tPmRzdC5oZWlnaHQpOworCQl2cF93cml0ZShtZGV2LCBWUF9EU1RfVl9QT1NJVElPTiwgZ2VvLT5kc3QueV9vZmZzZXQpOworCX0KKworCXZwX3dyaXRlKG1kZXYsIFZQX0hfUkFUSU8sIGdlby0+eF9yYXRpbyk7CisJdnBfd3JpdGUobWRldiwgVlBfVl9SQVRJTywgZ2VvLT55X3JhdGlvKTsKKworCXZwX3dyaXRlKG1kZXYsIFZQX0VORElBTl9NT0RFLCBWUF9FTkRJQU5fTU9ERV9MSVRUTEUpOworCisJbXhyX3ZzeW5jX3NldF91cGRhdGUobWRldiwgTVhSX0VOQUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7CisKK30KKwordm9pZCBteHJfcmVnX2dyYXBoX2J1ZmZlcihzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGlkeCwgZG1hX2FkZHJfdCBhZGRyKQoreworCXUzMiB2YWwgPSBhZGRyID8gfjAgOiAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7CisJbXhyX3ZzeW5jX3NldF91cGRhdGUobWRldiwgTVhSX0RJU0FCTEUpOworCisJaWYgKGlkeCA9PSAwKQorCQlteHJfd3JpdGVfbWFzayhtZGV2LCBNWFJfQ0ZHLCB2YWwsIE1YUl9DRkdfR1JQMF9FTkFCTEUpOworCWVsc2UKKwkJbXhyX3dyaXRlX21hc2sobWRldiwgTVhSX0NGRywgdmFsLCBNWFJfQ0ZHX0dSUDFfRU5BQkxFKTsKKwlteHJfd3JpdGUobWRldiwgTVhSX0dSQVBISUNfQkFTRShpZHgpLCBhZGRyKTsKKworCW14cl92c3luY19zZXRfdXBkYXRlKG1kZXYsIE1YUl9FTkFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworfQorCit2b2lkIG14cl9yZWdfdnBfYnVmZmVyKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCWRtYV9hZGRyX3QgbHVtYV9hZGRyWzJdLCBkbWFfYWRkcl90IGNocm9tYV9hZGRyWzJdKQoreworCXUzMiB2YWwgPSBsdW1hX2FkZHJbMF0gPyB+MCA6IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZGV2LT5yZWdfc2xvY2ssIGZsYWdzKTsKKwlteHJfdnN5bmNfc2V0X3VwZGF0ZShtZGV2LCBNWFJfRElTQUJMRSk7CisKKwlteHJfd3JpdGVfbWFzayhtZGV2LCBNWFJfQ0ZHLCB2YWwsIE1YUl9DRkdfVlBfRU5BQkxFKTsKKwl2cF93cml0ZV9tYXNrKG1kZXYsIFZQX0VOQUJMRSwgdmFsLCBWUF9FTkFCTEVfT04pOworCS8qIFRPRE86IGZpeCB0aWxlZCBtb2RlICovCisJdnBfd3JpdGUobWRldiwgVlBfVE9QX1lfUFRSLCBsdW1hX2FkZHJbMF0pOworCXZwX3dyaXRlKG1kZXYsIFZQX1RPUF9DX1BUUiwgY2hyb21hX2FkZHJbMF0pOworCXZwX3dyaXRlKG1kZXYsIFZQX0JPVF9ZX1BUUiwgbHVtYV9hZGRyWzFdKTsKKwl2cF93cml0ZShtZGV2LCBWUF9CT1RfQ19QVFIsIGNocm9tYV9hZGRyWzFdKTsKKworCW14cl92c3luY19zZXRfdXBkYXRlKG1kZXYsIE1YUl9FTkFCTEUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBteHJfaXJxX2xheWVyX2hhbmRsZShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmxheWVyLT5lbnFfbGlzdDsKKwlzdHJ1Y3QgbXhyX2J1ZmZlciAqZG9uZTsKKworCS8qIHNraXAgbm9uLWV4aXN0aW5nIGxheWVyICovCisJaWYgKGxheWVyID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmbGF5ZXItPmVucV9zbG9jayk7CisJaWYgKGxheWVyLT5zdGF0ZSA9PSBNWFJfTEFZRVJfSURMRSkKKwkJZ290byBkb25lOworCisJZG9uZSA9IGxheWVyLT5zaGFkb3dfYnVmOworCWxheWVyLT5zaGFkb3dfYnVmID0gbGF5ZXItPnVwZGF0ZV9idWY7CisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkgeworCQlpZiAobGF5ZXItPnN0YXRlICE9IE1YUl9MQVlFUl9TVFJFQU1JTkcpCisJCQlsYXllci0+dXBkYXRlX2J1ZiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IG14cl9idWZmZXIgKm5leHQ7CisJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBteHJfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoJm5leHQtPmxpc3QpOworCQlsYXllci0+dXBkYXRlX2J1ZiA9IG5leHQ7CisJfQorCisJbGF5ZXItPm9wcy5idWZmZXJfc2V0KGxheWVyLCBsYXllci0+dXBkYXRlX2J1Zik7CisKKwlpZiAoZG9uZSAmJiBkb25lICE9IGxheWVyLT5zaGFkb3dfYnVmKQorCQl2YjJfYnVmZmVyX2RvbmUoJmRvbmUtPnZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOworCitkb25lOgorCXNwaW5fdW5sb2NrKCZsYXllci0+ZW5xX3Nsb2NrKTsKK30KKworaXJxcmV0dXJuX3QgbXhyX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9kYXRhKQoreworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gZGV2X2RhdGE7CisJdTMyIGksIHZhbDsKKworCXNwaW5fbG9jaygmbWRldi0+cmVnX3Nsb2NrKTsKKwl2YWwgPSBteHJfcmVhZChtZGV2LCBNWFJfSU5UX1NUQVRVUyk7CisKKwkvKiB3YWtlIHVwIHByb2Nlc3Mgd2FpdGluZyBmb3IgVlNZTkMgKi8KKwlpZiAodmFsICYgTVhSX0lOVF9TVEFUVVNfVlNZTkMpIHsKKwkJc2V0X2JpdChNWFJfRVZFTlRfVlNZTkMsICZtZGV2LT5ldmVudF9mbGFncyk7CisJCXdha2VfdXAoJm1kZXYtPmV2ZW50X3F1ZXVlKTsKKwl9CisKKwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisJaWYgKH52YWwgJiBNWFJfSU5UX0VOX1ZTWU5DKSB7CisJCS8qIHZzeW5jIGludGVycnVwdCB1c2UgZGlmZmVyZW50IGJpdCBmb3IgcmVhZCBhbmQgY2xlYXIgKi8KKwkJdmFsICY9IH5NWFJfSU5UX0VOX1ZTWU5DOworCQl2YWwgfD0gTVhSX0lOVF9DTEVBUl9WU1lOQzsKKwl9CisJbXhyX3dyaXRlKG1kZXYsIE1YUl9JTlRfU1RBVFVTLCB2YWwpOworCisJc3Bpbl91bmxvY2soJm1kZXYtPnJlZ19zbG9jayk7CisJLyogbGVhdmUgb24gbm9uLXZzeW5jIGV2ZW50ICovCisJaWYgKH52YWwgJiBNWFJfSU5UX0NMRUFSX1ZTWU5DKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJZm9yIChpID0gMDsgaSA8IE1YUl9NQVhfTEFZRVJTOyArK2kpCisJCW14cl9pcnFfbGF5ZXJfaGFuZGxlKG1kZXYtPmxheWVyW2ldKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgbXhyX3JlZ19zX291dHB1dChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGNvb2tpZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gY29va2llID09IDAgPyBNWFJfQ0ZHX0RTVF9TRE8gOiBNWFJfQ0ZHX0RTVF9IRE1JOworCW14cl93cml0ZV9tYXNrKG1kZXYsIE1YUl9DRkcsIHZhbCwgTVhSX0NGR19EU1RfTUFTSyk7Cit9CisKK3ZvaWQgbXhyX3JlZ19zdHJlYW1vbihzdHJ1Y3QgbXhyX2RldmljZSAqbWRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworCS8qIHNpbmdsZSB3cml0ZSAtPiBubyBuZWVkIHRvIGJsb2NrIHZzeW5jIHVwZGF0ZSAqLworCisJLyogc3RhcnQgTUlYRVIgKi8KKwlteHJfd3JpdGVfbWFzayhtZGV2LCBNWFJfU1RBVFVTLCB+MCwgTVhSX1NUQVRVU19SRUdfUlVOKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworfQorCit2b2lkIG14cl9yZWdfc3RyZWFtb2ZmKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWRldi0+cmVnX3Nsb2NrLCBmbGFncyk7CisJLyogc2luZ2xlIHdyaXRlIC0+IG5vIG5lZWQgdG8gYmxvY2sgdnN5bmMgdXBkYXRlICovCisKKwkvKiBzdG9wIE1JWEVSICovCisJbXhyX3dyaXRlX21hc2sobWRldiwgTVhSX1NUQVRVUywgMCwgTVhSX1NUQVRVU19SRUdfUlVOKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworfQorCitpbnQgbXhyX3JlZ193YWl0NHZzeW5jKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCWludCByZXQ7CisKKwljbGVhcl9iaXQoTVhSX0VWRU5UX1ZTWU5DLCAmbWRldi0+ZXZlbnRfZmxhZ3MpOworCS8qIFRPRE86IGNvbnNpZGVyIGFkZGluZyBpbnRlcnJ1cHRpYmxlICovCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KG1kZXYtPmV2ZW50X3F1ZXVlLAorCQl0ZXN0X2JpdChNWFJfRVZFTlRfVlNZTkMsICZtZGV2LT5ldmVudF9mbGFncyksCisJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gMDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlteHJfd2FybihtZGV2LCAibm8gdnN5bmMgZGV0ZWN0ZWQgLSB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gLUVUSU1FOworfQorCit2b2lkIG14cl9yZWdfc2V0X21idXNfZm10KHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZtdCkKK3sKKwl1MzIgdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kZXYtPnJlZ19zbG9jaywgZmxhZ3MpOworCW14cl92c3luY19zZXRfdXBkYXRlKG1kZXYsIE1YUl9ESVNBQkxFKTsKKworCS8qIGNob29zaW5nIGJldHdlZW4gaW50ZXJsYWNlIGFuZCBwcm9ncmVzc2l2ZSBtb2RlICovCisJaWYgKGZtdC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEKQorCQl2YWwgfD0gTVhSX0NGR19TQ0FOX0lOVEVSTEFDRTsKKwllbHNlCisJCXZhbCB8PSBNWFJfQ0ZHX1NDQU5fUFJPR1JBU1NJVkU7CisKKwkvKiBjaG9vc2luZyBiZXR3ZWVuIHBvcnBlciBIRCBhbmQgU0QgbW9kZSAqLworCWlmIChmbXQtPmhlaWdodCA9PSA0ODApCisJCXZhbCB8PSBNWFJfQ0ZHX1NDQU5fTlRTQyB8IE1YUl9DRkdfU0NBTl9TRDsKKwllbHNlIGlmIChmbXQtPmhlaWdodCA9PSA1NzYpCisJCXZhbCB8PSBNWFJfQ0ZHX1NDQU5fUEFMIHwgTVhSX0NGR19TQ0FOX1NEOworCWVsc2UgaWYgKGZtdC0+aGVpZ2h0ID09IDcyMCkKKwkJdmFsIHw9IE1YUl9DRkdfU0NBTl9IRF83MjAgfCBNWFJfQ0ZHX1NDQU5fSEQ7CisJZWxzZSBpZiAoZm10LT5oZWlnaHQgPT0gMTA4MCkKKwkJdmFsIHw9IE1YUl9DRkdfU0NBTl9IRF8xMDgwIHwgTVhSX0NGR19TQ0FOX0hEOworCWVsc2UKKwkJV0FSTigxLCAidW5yZWNvZ25pemVkIG1idXMgaGVpZ2h0ICV1IVxuIiwgZm10LT5oZWlnaHQpOworCisJbXhyX3dyaXRlX21hc2sobWRldiwgTVhSX0NGRywgdmFsLCBNWFJfQ0ZHX1NDQU5fTUFTSyk7CisKKwl2YWwgPSAoZm10LT5maWVsZCA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpID8gfjAgOiAwOworCXZwX3dyaXRlX21hc2sobWRldiwgVlBfTU9ERSwgdmFsLAorCQlWUF9NT0RFX0xJTkVfU0tJUCB8IFZQX01PREVfRklFTERfSURfQVVUT19UT0dHTElORyk7CisKKwlteHJfdnN5bmNfc2V0X3VwZGF0ZShtZGV2LCBNWFJfRU5BQkxFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZGV2LT5yZWdfc2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBteHJfcmVnX2dyYXBoX2xheWVyX3N0cmVhbShzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwgaW50IGlkeCwgaW50IGVuKQoreworCS8qIG5vIGV4dHJhIGFjdGlvbnMgbmVlZCB0byBiZSBkb25lICovCit9CisKK3ZvaWQgbXhyX3JlZ192cF9sYXllcl9zdHJlYW0oc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIGludCBlbikKK3sKKwkvKiBubyBleHRyYSBhY3Rpb25zIG5lZWQgdG8gYmUgZG9uZSAqLworfQorCitzdGF0aWMgY29uc3QgdTggZmlsdGVyX3lfaG9yaXpfdGFwOFtdID0geworCTAsCS0xLAktMSwJLTEsCS0xLAktMSwJLTEsCS0xLAorCS0xLAktMSwJLTEsCS0xLAktMSwJMCwJMCwJMCwKKwkwLAkyLAk0LAk1LAk2LAk2LAk2LAk2LAorCTYsCTUsCTUsCTQsCTMsCTIsCTEsCTEsCisJMCwJLTYsCS0xMiwJLTE2LAktMTgsCS0yMCwJLTIxLAktMjAsCisJLTIwLAktMTgsCS0xNiwJLTEzLAktMTAsCS04LAktNSwJLTIsCisJMTI3LAkxMjYsCTEyNSwJMTIxLAkxMTQsCTEwNywJOTksCTg5LAorCTc5LAk2OCwJNTcsCTQ2LAkzNSwJMjUsCTE2LAk4LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGZpbHRlcl95X3ZlcnRfdGFwNFtdID0geworCTAsCS0zLAktNiwJLTgsCS04LAktOCwJLTgsCS03LAorCS02LAktNSwJLTQsCS0zLAktMiwJLTEsCS0xLAkwLAorCTEyNywJMTI2LAkxMjQsCTExOCwJMTExLAkxMDIsCTkyLAk4MSwKKwk3MCwJNTksCTQ4LAkzNywJMjcsCTE5LAkxMSwJNSwKKwkwLAk1LAkxMSwJMTksCTI3LAkzNywJNDgsCTU5LAorCTcwLAk4MSwJOTIsCTEwMiwJMTExLAkxMTgsCTEyNCwJMTI2LAorCTAsCTAsCS0xLAktMSwJLTIsCS0zLAktNCwJLTUsCisJLTYsCS03LAktOCwJLTgsCS04LAktOCwJLTYsCS0zLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGZpbHRlcl9jcl9ob3Jpel90YXA0W10gPSB7CisJMCwJLTMsCS02LAktOCwJLTgsCS04LAktOCwJLTcsCisJLTYsCS01LAktNCwJLTMsCS0yLAktMSwJLTEsCTAsCisJMTI3LAkxMjYsCTEyNCwJMTE4LAkxMTEsCTEwMiwJOTIsCTgxLAorCTcwLAk1OSwJNDgsCTM3LAkyNywJMTksCTExLAk1LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14cl9yZWdfdnBfZmlsdGVyX3NldChzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlpbnQgcmVnX2lkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJLyogYXNzdXJlIDQtYnl0ZSBhbGlnbiAqLworCUJVR19PTihzaXplICYgMyk7CisJZm9yICg7IHNpemU7IHNpemUgLT0gNCwgcmVnX2lkICs9IDQsIGRhdGEgKz0gNCkgeworCQl1MzIgdmFsID0gKGRhdGFbMF0gPDwgMjQpIHwgIChkYXRhWzFdIDw8IDE2KSB8CisJCQkoZGF0YVsyXSA8PCA4KSB8IGRhdGFbM107CisJCXZwX3dyaXRlKG1kZXYsIHJlZ19pZCwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG14cl9yZWdfdnBfZGVmYXVsdF9maWx0ZXIoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisJbXhyX3JlZ192cF9maWx0ZXJfc2V0KG1kZXYsIFZQX1BPTFk4X1kwX0xMLAorCQlmaWx0ZXJfeV9ob3Jpel90YXA4LCBzaXplb2YgZmlsdGVyX3lfaG9yaXpfdGFwOCk7CisJbXhyX3JlZ192cF9maWx0ZXJfc2V0KG1kZXYsIFZQX1BPTFk0X1kwX0xMLAorCQlmaWx0ZXJfeV92ZXJ0X3RhcDQsIHNpemVvZiBmaWx0ZXJfeV92ZXJ0X3RhcDQpOworCW14cl9yZWdfdnBfZmlsdGVyX3NldChtZGV2LCBWUF9QT0xZNF9DMF9MTCwKKwkJZmlsdGVyX2NyX2hvcml6X3RhcDQsIHNpemVvZiBmaWx0ZXJfY3JfaG9yaXpfdGFwNCk7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9yZWdfbXhyX2R1bXAoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYpCit7CisjZGVmaW5lIERVTVBSRUcocmVnX2lkKSBcCitkbyB7IFwKKwlteHJfZGJnKG1kZXYsICNyZWdfaWQgIiA9ICUwOHhcbiIsIFwKKwkJKHUzMilyZWFkbChtZGV2LT5yZXMubXhyX3JlZ3MgKyByZWdfaWQpKTsgXAorfSB3aGlsZSAoMCkKKworCURVTVBSRUcoTVhSX1NUQVRVUyk7CisJRFVNUFJFRyhNWFJfQ0ZHKTsKKwlEVU1QUkVHKE1YUl9JTlRfRU4pOworCURVTVBSRUcoTVhSX0lOVF9TVEFUVVMpOworCisJRFVNUFJFRyhNWFJfTEFZRVJfQ0ZHKTsKKwlEVU1QUkVHKE1YUl9WSURFT19DRkcpOworCisJRFVNUFJFRyhNWFJfR1JBUEhJQzBfQ0ZHKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMF9CQVNFKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMF9TUEFOKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMF9XSCk7CisJRFVNUFJFRyhNWFJfR1JBUEhJQzBfU1hZKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMF9EWFkpOworCisJRFVNUFJFRyhNWFJfR1JBUEhJQzFfQ0ZHKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMV9CQVNFKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMV9TUEFOKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMV9XSCk7CisJRFVNUFJFRyhNWFJfR1JBUEhJQzFfU1hZKTsKKwlEVU1QUkVHKE1YUl9HUkFQSElDMV9EWFkpOworI3VuZGVmIERVTVBSRUcKK30KKworc3RhdGljIHZvaWQgbXhyX3JlZ192cF9kdW1wKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworI2RlZmluZSBEVU1QUkVHKHJlZ19pZCkgXAorZG8geyBcCisJbXhyX2RiZyhtZGV2LCAjcmVnX2lkICIgPSAlMDh4XG4iLCBcCisJCSh1MzIpIHJlYWRsKG1kZXYtPnJlcy52cF9yZWdzICsgcmVnX2lkKSk7IFwKK30gd2hpbGUgKDApCisKKworCURVTVBSRUcoVlBfRU5BQkxFKTsKKwlEVU1QUkVHKFZQX1NSRVNFVCk7CisJRFVNUFJFRyhWUF9TSEFET1dfVVBEQVRFKTsKKwlEVU1QUkVHKFZQX0ZJRUxEX0lEKTsKKwlEVU1QUkVHKFZQX01PREUpOworCURVTVBSRUcoVlBfSU1HX1NJWkVfWSk7CisJRFVNUFJFRyhWUF9JTUdfU0laRV9DKTsKKwlEVU1QUkVHKFZQX1BFUl9SQVRFX0NUUkwpOworCURVTVBSRUcoVlBfVE9QX1lfUFRSKTsKKwlEVU1QUkVHKFZQX0JPVF9ZX1BUUik7CisJRFVNUFJFRyhWUF9UT1BfQ19QVFIpOworCURVTVBSRUcoVlBfQk9UX0NfUFRSKTsKKwlEVU1QUkVHKFZQX0VORElBTl9NT0RFKTsKKwlEVU1QUkVHKFZQX1NSQ19IX1BPU0lUSU9OKTsKKwlEVU1QUkVHKFZQX1NSQ19WX1BPU0lUSU9OKTsKKwlEVU1QUkVHKFZQX1NSQ19XSURUSCk7CisJRFVNUFJFRyhWUF9TUkNfSEVJR0hUKTsKKwlEVU1QUkVHKFZQX0RTVF9IX1BPU0lUSU9OKTsKKwlEVU1QUkVHKFZQX0RTVF9WX1BPU0lUSU9OKTsKKwlEVU1QUkVHKFZQX0RTVF9XSURUSCk7CisJRFVNUFJFRyhWUF9EU1RfSEVJR0hUKTsKKwlEVU1QUkVHKFZQX0hfUkFUSU8pOworCURVTVBSRUcoVlBfVl9SQVRJTyk7CisKKyN1bmRlZiBEVU1QUkVHCit9CisKK3ZvaWQgbXhyX3JlZ19kdW1wKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCW14cl9yZWdfbXhyX2R1bXAobWRldik7CisJbXhyX3JlZ192cF9kdW1wKG1kZXYpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9taXhlcl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXJfdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FjMjJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXJfdmlkZW8uYwpAQCAtMCwwICsxLDEwMDYgQEAKKy8qCisgKiBTYW1zdW5nIFRWIE1peGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogVG9tYXN6IFN0YW5pc2xhd3NraSwgPHQuc3RhbmlzbGF3c0BzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisgKi8KKworI2luY2x1ZGUgIm1peGVyLmgiCisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPgorCitzdGF0aWMgaW50IGZpbmRfcmVnX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKipzZCA9IHA7CisKKwkqc2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwkvKiBub24temVybyB2YWx1ZSBzdG9wcyBpdGVyYXRpb24gKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldiAqZmluZF9hbmRfcmVnaXN0ZXJfc3ViZGV2KAorCXN0cnVjdCBteHJfZGV2aWNlICptZGV2LCBjaGFyICptb2R1bGVfbmFtZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBOVUxMOworCWludCByZXQ7CisKKwkvKiBUT0RPOiBhZGQgd2FpdGluZyB1bnRpbCBwcm9iZSBpcyBmaW5pc2hlZCAqLworCWRydiA9IGRyaXZlcl9maW5kKG1vZHVsZV9uYW1lLCAmcGxhdGZvcm1fYnVzX3R5cGUpOworCWlmICghZHJ2KSB7CisJCW14cl93YXJuKG1kZXYsICJtb2R1bGUgJXMgaXMgbWlzc2luZ1xuIiwgbW9kdWxlX25hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogZHJpdmVyIHJlZmNudCBpcyBpbmNyZWFzZWQsIGl0IGlzIHNhZmUgdG8gaXRlcmF0ZSBvdmVyIGRldmljZXMgKi8KKwlyZXQgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKGRydiwgTlVMTCwgJnNkLCBmaW5kX3JlZ19jYWxsYmFjayk7CisJLyogcmV0ID09IDAgbWVhbnMgdGhhdCBmaW5kX3JlZ19jYWxsYmFjayB3YXMgbmV2ZXIgZXhlY3V0ZWQgKi8KKwlpZiAoc2QgPT0gTlVMTCkgeworCQlteHJfd2FybihtZGV2LCAibW9kdWxlICVzIHByb3ZpZGVzIG5vIHN1YmRldiFcbiIsIG1vZHVsZV9uYW1lKTsKKwkJZ290byBkb25lOworCX0KKwkvKiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYgZGV0ZWN0cyBpZiBzZCBpcyBOVUxMICovCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZtZGV2LT52NGwyX2Rldiwgc2QpOworCWlmIChyZXQpIHsKKwkJbXhyX3dhcm4obWRldiwgImZhaWxlZCB0byByZWdpc3RlciBzdWJkZXYgJXNcbiIsIHNkLT5uYW1lKTsKKwkJc2QgPSBOVUxMOworCX0KKworZG9uZToKKwlwdXRfZHJpdmVyKGRydik7CisJcmV0dXJuIHNkOworfQorCitpbnQgX19kZXZpbml0IG14cl9hY3F1aXJlX3ZpZGVvKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LAorCXN0cnVjdCBteHJfb3V0cHV0X2NvbmYgKm91dHB1dF9jb25mLCBpbnQgb3V0cHV0X2NvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IG1kZXYtPmRldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJm1kZXYtPnY0bDJfZGV2OworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCBkZXZfbmFtZShtZGV2LT5kZXYpLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwkvKiBwcmVwYXJlIGNvbnRleHQgZm9yIFY0TDIgZGV2aWNlICovCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoZGV2LCB2NGwyX2Rldik7CisJaWYgKHJldCkgeworCQlteHJfZXJyKG1kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UuXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCW1kZXYtPmFsbG9jX2N0eCA9IHZiMl9kbWFfY29udGlnX2luaXRfY3R4KG1kZXYtPmRldik7CisJaWYgKElTX0VSUl9PUl9OVUxMKG1kZXYtPmFsbG9jX2N0eCkpIHsKKwkJbXhyX2VycihtZGV2LCAiY291bGQgbm90IGFjcXVpcmUgdmIyIGFsbG9jYXRvclxuIik7CisJCWdvdG8gZmFpbF92NGwyX2RldjsKKwl9CisKKwkvKiByZWdpc3RlcmluZyBvdXRwdXRzICovCisJbWRldi0+b3V0cHV0X2NudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG91dHB1dF9jb3VudDsgKytpKSB7CisJCXN0cnVjdCBteHJfb3V0cHV0X2NvbmYgKmNvbmYgPSAmb3V0cHV0X2NvbmZbaV07CisJCXN0cnVjdCBteHJfb3V0cHV0ICpvdXQ7CisKKwkJc2QgPSBmaW5kX2FuZF9yZWdpc3Rlcl9zdWJkZXYobWRldiwgY29uZi0+bW9kdWxlX25hbWUpOworCQkvKiB0cnlpbmcgdG8gcmVnaXN0ZXIgbmV4dCBvdXRwdXQgKi8KKwkJaWYgKHNkID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJb3V0ID0ga3phbGxvYyhzaXplb2YgKm91dCwgR0ZQX0tFUk5FTCk7CisJCWlmIChvdXQgPT0gTlVMTCkgeworCQkJbXhyX2VycihtZGV2LCAibm8gbWVtb3J5IGZvciAnJXMnXG4iLAorCQkJCWNvbmYtPm91dHB1dF9uYW1lKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQkvKiByZWdpc3RlcmVkIHN1YmRldnMgYXJlIHJlbW92ZWQgaW4gZmFpbF92NGwyX2RldiAqLworCQkJZ290byBmYWlsX291dHB1dDsKKwkJfQorCQlzdHJsY3B5KG91dC0+bmFtZSwgY29uZi0+b3V0cHV0X25hbWUsIHNpemVvZihvdXQtPm5hbWUpKTsKKwkJb3V0LT5zZCA9IHNkOworCQlvdXQtPmNvb2tpZSA9IGNvbmYtPmNvb2tpZTsKKwkJbWRldi0+b3V0cHV0W21kZXYtPm91dHB1dF9jbnQrK10gPSBvdXQ7CisJCW14cl9pbmZvKG1kZXYsICJhZGRlZCBvdXRwdXQgJyVzJyBmcm9tIG1vZHVsZSAnJXMnXG4iLAorCQkJY29uZi0+b3V0cHV0X25hbWUsIGNvbmYtPm1vZHVsZV9uYW1lKTsKKwkJLyogY2hlY2tpbmcgaWYgbWF4aW1hbCBudW1iZXIgb2Ygb3V0cHV0cyBpcyByZWFjaGVkICovCisJCWlmIChtZGV2LT5vdXRwdXRfY250ID49IE1YUl9NQVhfT1VUUFVUUykKKwkJCWJyZWFrOworCX0KKworCWlmIChtZGV2LT5vdXRwdXRfY250ID09IDApIHsKKwkJbXhyX2VycihtZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGFueSBvdXRwdXRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQkvKiBza2lwcGluZyBmYWlsX291dHB1dCBiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnJlZSAqLworCQlnb3RvIGZhaWxfdmIyX2FsbG9jYXRvcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbF9vdXRwdXQ6CisJLyoga2ZyZWUgaXMgTlVMTC1zYWZlICovCisJZm9yIChpID0gMDsgaSA8IG1kZXYtPm91dHB1dF9jbnQ7ICsraSkKKwkJa2ZyZWUobWRldi0+b3V0cHV0W2ldKTsKKwltZW1zZXQobWRldi0+b3V0cHV0LCAwLCBzaXplb2YgbWRldi0+b3V0cHV0KTsKKworZmFpbF92YjJfYWxsb2NhdG9yOgorCS8qIGZyZWVpbmcgYWxsb2NhdG9yIGNvbnRleHQgKi8KKwl2YjJfZG1hX2NvbnRpZ19jbGVhbnVwX2N0eChtZGV2LT5hbGxvY19jdHgpOworCitmYWlsX3Y0bDJfZGV2OgorCS8qIE5PVEU6IGF1dG9tYXRpY2FsbHkgdW5yZWdpc3RlciBhbGwgc3ViZGV2cyAqLworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19kZXZleGl0IG14cl9yZWxlYXNlX3ZpZGVvKHN0cnVjdCBteHJfZGV2aWNlICptZGV2KQoreworCWludCBpOworCisJLyoga2ZyZWUgaXMgTlVMTC1zYWZlICovCisJZm9yIChpID0gMDsgaSA8IG1kZXYtPm91dHB1dF9jbnQ7ICsraSkKKwkJa2ZyZWUobWRldi0+b3V0cHV0W2ldKTsKKworCXZiMl9kbWFfY29udGlnX2NsZWFudXBfY3R4KG1kZXYtPmFsbG9jX2N0eCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmbWRldi0+djRsMl9kZXYpOworfQorCitzdGF0aWMgaW50IG14cl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJc3RybGNweShjYXAtPmRyaXZlciwgTVhSX0RSSVZFUl9OQU1FLCBzaXplb2YgY2FwLT5kcml2ZXIpOworCXN0cmxjcHkoY2FwLT5jYXJkLCBsYXllci0+dmZkLm5hbWUsIHNpemVvZiBjYXAtPmNhcmQpOworCXNwcmludGYoY2FwLT5idXNfaW5mbywgIiVkIiwgbGF5ZXItPmlkeCk7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMSwgMCk7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQlWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEdlb21ldHJ5IGhhbmRsaW5nICovCitzdGF0aWMgdm9pZCBteHJfbGF5ZXJfZ2VvX2ZpeChzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWJ1c19mbXQ7CisKKwkvKiBUT0RPOiBhZGQgc29tZSBkaXJ0eSBmbGFnIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFkanVzdG1lbnRzICovCisJbXhyX2dldF9tYnVzX2ZtdChtZGV2LCAmbWJ1c19mbXQpOworCWxheWVyLT5nZW8uZHN0LmZ1bGxfd2lkdGggPSBtYnVzX2ZtdC53aWR0aDsKKwlsYXllci0+Z2VvLmRzdC5mdWxsX2hlaWdodCA9IG1idXNfZm10LmhlaWdodDsKKwlsYXllci0+Z2VvLmRzdC5maWVsZCA9IG1idXNfZm10LmZpZWxkOworCWxheWVyLT5vcHMuZml4X2dlb21ldHJ5KGxheWVyKTsKK30KKworc3RhdGljIHZvaWQgbXhyX2xheWVyX2RlZmF1bHRfZ2VvKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKQoreworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKKworCW1lbXNldCgmbGF5ZXItPmdlbywgMCwgc2l6ZW9mIGxheWVyLT5nZW8pOworCisJbXhyX2dldF9tYnVzX2ZtdChtZGV2LCAmbWJ1c19mbXQpOworCisJbGF5ZXItPmdlby5kc3QuZnVsbF93aWR0aCA9IG1idXNfZm10LndpZHRoOworCWxheWVyLT5nZW8uZHN0LmZ1bGxfaGVpZ2h0ID0gbWJ1c19mbXQuaGVpZ2h0OworCWxheWVyLT5nZW8uZHN0LndpZHRoID0gbGF5ZXItPmdlby5kc3QuZnVsbF93aWR0aDsKKwlsYXllci0+Z2VvLmRzdC5oZWlnaHQgPSBsYXllci0+Z2VvLmRzdC5mdWxsX2hlaWdodDsKKwlsYXllci0+Z2VvLmRzdC5maWVsZCA9IG1idXNfZm10LmZpZWxkOworCisJbGF5ZXItPmdlby5zcmMuZnVsbF93aWR0aCA9IG1idXNfZm10LndpZHRoOworCWxheWVyLT5nZW8uc3JjLmZ1bGxfaGVpZ2h0ID0gbWJ1c19mbXQuaGVpZ2h0OworCWxheWVyLT5nZW8uc3JjLndpZHRoID0gbGF5ZXItPmdlby5zcmMuZnVsbF93aWR0aDsKKwlsYXllci0+Z2VvLnNyYy5oZWlnaHQgPSBsYXllci0+Z2VvLnNyYy5mdWxsX2hlaWdodDsKKworCWxheWVyLT5vcHMuZml4X2dlb21ldHJ5KGxheWVyKTsKK30KKworc3RhdGljIHZvaWQgbXhyX2dlb21ldHJ5X2R1bXAoc3RydWN0IG14cl9kZXZpY2UgKm1kZXYsIHN0cnVjdCBteHJfZ2VvbWV0cnkgKmdlbykKK3sKKwlteHJfZGJnKG1kZXYsICJzcmMuZnVsbF9zaXplID0gKCV1LCAldSlcbiIsCisJCWdlby0+c3JjLmZ1bGxfd2lkdGgsIGdlby0+c3JjLmZ1bGxfaGVpZ2h0KTsKKwlteHJfZGJnKG1kZXYsICJzcmMuc2l6ZSA9ICgldSwgJXUpXG4iLAorCQlnZW8tPnNyYy53aWR0aCwgZ2VvLT5zcmMuaGVpZ2h0KTsKKwlteHJfZGJnKG1kZXYsICJzcmMub2Zmc2V0ID0gKCV1LCAldSlcbiIsCisJCWdlby0+c3JjLnhfb2Zmc2V0LCBnZW8tPnNyYy55X29mZnNldCk7CisJbXhyX2RiZyhtZGV2LCAiZHN0LmZ1bGxfc2l6ZSA9ICgldSwgJXUpXG4iLAorCQlnZW8tPmRzdC5mdWxsX3dpZHRoLCBnZW8tPmRzdC5mdWxsX2hlaWdodCk7CisJbXhyX2RiZyhtZGV2LCAiZHN0LnNpemUgPSAoJXUsICV1KVxuIiwKKwkJZ2VvLT5kc3Qud2lkdGgsIGdlby0+ZHN0LmhlaWdodCk7CisJbXhyX2RiZyhtZGV2LCAiZHN0Lm9mZnNldCA9ICgldSwgJXUpXG4iLAorCQlnZW8tPmRzdC54X29mZnNldCwgZ2VvLT5kc3QueV9vZmZzZXQpOworCW14cl9kYmcobWRldiwgInJhdGlvID0gKCV1LCAldSlcbiIsCisJCWdlby0+eF9yYXRpbywgZ2VvLT55X3JhdGlvKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2ZvdXJjYygKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciwgdW5zaWduZWQgbG9uZyBmb3VyY2MpOworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9pbmRleCgKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciwgdW5zaWduZWQgbG9uZyBpbmRleCk7CisKK3N0YXRpYyBpbnQgbXhyX2VudW1fZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCWNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmbXQ7CisKKwlteHJfZGJnKG1kZXYsICIlc1xuIiwgX19mdW5jX18pOworCWZtdCA9IGZpbmRfZm9ybWF0X2J5X2luZGV4KGxheWVyLCBmLT5pbmRleCk7CisJaWYgKGZtdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZtdC0+bmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14cl9zX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmbXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeDsKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCXN0cnVjdCBteHJfZ2VvbWV0cnkgKmdlbyA9ICZsYXllci0+Z2VvOworCisJbXhyX2RiZyhtZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlwaXggPSAmZi0+Zm10LnBpeF9tcDsKKwlmbXQgPSBmaW5kX2Zvcm1hdF9ieV9mb3VyY2MobGF5ZXIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmIChmbXQgPT0gTlVMTCkgeworCQlteHJfd2FybihtZGV2LCAibm90IHJlY29nbml6ZWQgZm91cmNjOiAlMDh4XG4iLAorCQkJcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlsYXllci0+Zm10ID0gZm10OworCWdlby0+c3JjLmZ1bGxfd2lkdGggPSBwaXgtPndpZHRoOworCWdlby0+c3JjLndpZHRoID0gcGl4LT53aWR0aDsKKwlnZW8tPnNyYy5mdWxsX2hlaWdodCA9IHBpeC0+aGVpZ2h0OworCWdlby0+c3JjLmhlaWdodCA9IHBpeC0+aGVpZ2h0OworCS8qIGFzc3VyZSBjb25zaXN0ZW5jeSBvZiBnZW9tZXRyeSAqLworCW14cl9sYXllcl9nZW9fZml4KGxheWVyKTsKKwlteHJfZGJnKG1kZXYsICJ3aWR0aD0ldSBoZWlnaHQ9JXUgc3Bhbj0ldVxuIiwKKwkJZ2VvLT5zcmMud2lkdGgsIGdlby0+c3JjLmhlaWdodCwgZ2VvLT5zcmMuZnVsbF93aWR0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkaXZ1cCh1bnNpZ25lZCBpbnQgZGl2aWRlbnQsIHVuc2lnbmVkIGludCBkaXZpc29yKQoreworCXJldHVybiAoZGl2aWRlbnQgKyBkaXZpc29yIC0gMSkgLyBkaXZpc29yOworfQorCit1bnNpZ25lZCBsb25nIG14cl9nZXRfcGxhbmVfc2l6ZShjb25zdCBzdHJ1Y3QgbXhyX2Jsb2NrICpibGssCisJdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworCXVuc2lnbmVkIGludCBibF93aWR0aCA9IGRpdnVwKHdpZHRoLCBibGstPndpZHRoKTsKKwl1bnNpZ25lZCBpbnQgYmxfaGVpZ2h0ID0gZGl2dXAoaGVpZ2h0LCBibGstPmhlaWdodCk7CisKKwlyZXR1cm4gYmxfd2lkdGggKiBibF9oZWlnaHQgKiBibGstPnNpemU7Cit9CisKK3N0YXRpYyB2b2lkIG14cl9tcGxhbmVfZmlsbChzdHJ1Y3QgdjRsMl9wbGFuZV9waXhfZm9ybWF0ICpwbGFuZXMsCisJY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgKmZtdCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCWludCBpOworCisJbWVtc2V0KHBsYW5lcywgMCwgc2l6ZW9mKCpwbGFuZXMpICogZm10LT5udW1fc3ViZnJhbWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZm10LT5udW1fcGxhbmVzOyArK2kpIHsKKwkJc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCAqcGxhbmUgPSBwbGFuZXMKKwkJCSsgZm10LT5wbGFuZTJzdWJmcmFtZVtpXTsKKwkJY29uc3Qgc3RydWN0IG14cl9ibG9jayAqYmxrID0gJmZtdC0+cGxhbmVbaV07CisJCXUzMiBibF93aWR0aCA9IGRpdnVwKHdpZHRoLCBibGstPndpZHRoKTsKKwkJdTMyIGJsX2hlaWdodCA9IGRpdnVwKGhlaWdodCwgYmxrLT5oZWlnaHQpOworCQl1MzIgc2l6ZWltYWdlID0gYmxfd2lkdGggKiBibF9oZWlnaHQgKiBibGstPnNpemU7CisJCXUxNiBieXRlc3BlcmxpbmUgPSBibF93aWR0aCAqIGJsay0+c2l6ZSAvIGJsay0+aGVpZ2h0OworCisJCXBsYW5lLT5zaXplaW1hZ2UgKz0gc2l6ZWltYWdlOworCQlwbGFuZS0+Ynl0ZXNwZXJsaW5lID0gbWF4KHBsYW5lLT5ieXRlc3BlcmxpbmUsIGJ5dGVzcGVybGluZSk7CisJfQorfQorCitzdGF0aWMgaW50IG14cl9nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4ID0gJmYtPmZtdC5waXhfbXA7CisKKwlteHJfZGJnKGxheWVyLT5tZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlwaXgtPndpZHRoID0gbGF5ZXItPmdlby5zcmMuZnVsbF93aWR0aDsKKwlwaXgtPmhlaWdodCA9IGxheWVyLT5nZW8uc3JjLmZ1bGxfaGVpZ2h0OworCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJcGl4LT5waXhlbGZvcm1hdCA9IGxheWVyLT5mbXQtPmZvdXJjYzsKKwlwaXgtPmNvbG9yc3BhY2UgPSBsYXllci0+Zm10LT5jb2xvcnNwYWNlOworCW14cl9tcGxhbmVfZmlsbChwaXgtPnBsYW5lX2ZtdCwgbGF5ZXItPmZtdCwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG14cl9jcm9wICpjaG9vc2VfY3JvcF9ieV90eXBlKHN0cnVjdCBteHJfZ2VvbWV0cnkgKmdlbywKKwllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgorCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FOgorCQlyZXR1cm4gJmdlby0+ZHN0OworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCQlyZXR1cm4gJmdlby0+c3JjOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIGludCBteHJfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqYSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9jcm9wICpjcm9wOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWNyb3AgPSBjaG9vc2VfY3JvcF9ieV90eXBlKCZsYXllci0+Z2VvLCBhLT50eXBlKTsKKwlpZiAoY3JvcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlteHJfbGF5ZXJfZ2VvX2ZpeChsYXllcik7CisJYS0+Yy5sZWZ0ID0gY3JvcC0+eF9vZmZzZXQ7CisJYS0+Yy50b3AgPSBjcm9wLT55X29mZnNldDsKKwlhLT5jLndpZHRoID0gY3JvcC0+d2lkdGg7CisJYS0+Yy5oZWlnaHQgPSBjcm9wLT5oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhyX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBteHJfY3JvcCAqY3JvcDsKKworCW14cl9kYmcobGF5ZXItPm1kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwljcm9wID0gY2hvb3NlX2Nyb3BfYnlfdHlwZSgmbGF5ZXItPmdlbywgYS0+dHlwZSk7CisJaWYgKGNyb3AgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY3JvcC0+eF9vZmZzZXQgPSBhLT5jLmxlZnQ7CisJY3JvcC0+eV9vZmZzZXQgPSBhLT5jLnRvcDsKKwljcm9wLT53aWR0aCA9IGEtPmMud2lkdGg7CisJY3JvcC0+aGVpZ2h0ID0gYS0+Yy5oZWlnaHQ7CisJbXhyX2xheWVyX2dlb19maXgobGF5ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14cl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqYSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9jcm9wICpjcm9wOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWNyb3AgPSBjaG9vc2VfY3JvcF9ieV90eXBlKCZsYXllci0+Z2VvLCBhLT50eXBlKTsKKwlpZiAoY3JvcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlteHJfbGF5ZXJfZ2VvX2ZpeChsYXllcik7CisJYS0+Ym91bmRzLmxlZnQgPSAwOworCWEtPmJvdW5kcy50b3AgPSAwOworCWEtPmJvdW5kcy53aWR0aCA9IGNyb3AtPmZ1bGxfd2lkdGg7CisJYS0+Ym91bmRzLnRvcCA9IGNyb3AtPmZ1bGxfaGVpZ2h0OworCWEtPmRlZnJlY3QgPSBhLT5ib3VuZHM7CisJLyogc2V0dGluZyBwaXhlbCBhc3BlY3QgdG8gMS8xICovCisJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKKwlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhyX2VudW1fZHZfcHJlc2V0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgKnByZXNldCkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSBsYXllci0+bWRldjsKKwlpbnQgcmV0OworCisJLyogbG9jayBwcm90ZWN0cyBmcm9tIGNoYW5naW5nIHNkX291dCAqLworCW11dGV4X2xvY2soJm1kZXYtPm11dGV4KTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHRvX291dHNkKG1kZXYpLCB2aWRlbywgZW51bV9kdl9wcmVzZXRzLCBwcmVzZXQpOworCW11dGV4X3VubG9jaygmbWRldi0+bXV0ZXgpOworCisJcmV0dXJuIHJldCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IG14cl9zX2R2X3ByZXNldChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpwcmVzZXQpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJaW50IHJldDsKKworCS8qIGxvY2sgcHJvdGVjdHMgZnJvbSBjaGFuZ2luZyBzZF9vdXQgKi8KKwltdXRleF9sb2NrKCZtZGV2LT5tdXRleCk7CisKKwkvKiBwcmVzZXQgY2hhbmdlIGNhbm5vdCBiZSBkb25lIHdoaWxlIHRoZXJlIGlzIGFuIGVudGl0eQorCSAqIGRlcGVuZGFudCBvbiBvdXRwdXQgY29uZmlndXJhdGlvbgorCSAqLworCWlmIChtZGV2LT5uX291dHB1dCA+IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbCh0b19vdXRzZChtZGV2KSwgdmlkZW8sIHNfZHZfcHJlc2V0LCBwcmVzZXQpOworCisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisKKwkvKiBhbnkgZmFpbHVyZSBzaG91bGQgcmV0dXJuIEVJTlZBTCBhY2NvcmRpbmcgdG8gVjRMMiBkb2MgKi8KKwlyZXR1cm4gcmV0ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXhyX2dfZHZfcHJlc2V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSBsYXllci0+bWRldjsKKwlpbnQgcmV0OworCisJLyogbG9jayBwcm90ZWN0cyBmcm9tIGNoYW5naW5nIHNkX291dCAqLworCW11dGV4X2xvY2soJm1kZXYtPm11dGV4KTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHRvX291dHNkKG1kZXYpLCB2aWRlbywgZ19kdl9wcmVzZXQsIHByZXNldCk7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gcmV0ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXhyX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJaW50IHJldDsKKworCS8qIGxvY2sgcHJvdGVjdHMgZnJvbSBjaGFuZ2luZyBzZF9vdXQgKi8KKwltdXRleF9sb2NrKCZtZGV2LT5tdXRleCk7CisKKwkvKiBzdGFuZGFyZCBjaGFuZ2UgY2Fubm90IGJlIGRvbmUgd2hpbGUgdGhlcmUgaXMgYW4gZW50aXR5CisJICogZGVwZW5kYW50IG9uIG91dHB1dCBjb25maWd1cmF0aW9uCisJICovCisJaWYgKG1kZXYtPm5fb3V0cHV0ID4gMCkgeworCQltdXRleF91bmxvY2soJm1kZXYtPm11dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHRvX291dHNkKG1kZXYpLCB2aWRlbywgc19zdGRfb3V0cHV0LCAqbm9ybSk7CisKKwltdXRleF91bmxvY2soJm1kZXYtPm11dGV4KTsKKworCXJldHVybiByZXQgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBteHJfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSBsYXllci0+bWRldjsKKwlpbnQgcmV0OworCisJLyogbG9jayBwcm90ZWN0cyBmcm9tIGNoYW5naW5nIHNkX291dCAqLworCW11dGV4X2xvY2soJm1kZXYtPm11dGV4KTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHRvX291dHNkKG1kZXYpLCB2aWRlbywgZ19zdGRfb3V0cHV0LCBub3JtKTsKKwltdXRleF91bmxvY2soJm1kZXYtPm11dGV4KTsKKworCXJldHVybiByZXQgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBteHJfZW51bV9vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9vdXRwdXQgKmEpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJc3RydWN0IG14cl9vdXRwdXQgKm91dDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJaWYgKGEtPmluZGV4ID49IG1kZXYtPm91dHB1dF9jbnQpCisJCXJldHVybiAtRUlOVkFMOworCW91dCA9IG1kZXYtPm91dHB1dFthLT5pbmRleF07CisJQlVHX09OKG91dCA9PSBOVUxMKTsKKwlzZCA9IG91dC0+c2Q7CisJc3RybGNweShhLT5uYW1lLCBvdXQtPm5hbWUsIHNpemVvZihhLT5uYW1lKSk7CisKKwkvKiB0cnkgdG8gb2J0YWluIHN1cHBvcnRlZCB0diBub3JtcyAqLworCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3R2bm9ybXNfb3V0cHV0LCAmYS0+c3RkKTsKKwlhLT5jYXBhYmlsaXRpZXMgPSAwOworCWlmIChzZC0+b3BzLT52aWRlbyAmJiBzZC0+b3BzLT52aWRlby0+c19kdl9wcmVzZXQpCisJCWEtPmNhcGFiaWxpdGllcyB8PSBWNEwyX09VVF9DQVBfUFJFU0VUUzsKKwlpZiAoc2QtPm9wcy0+dmlkZW8gJiYgc2QtPm9wcy0+dmlkZW8tPnNfc3RkX291dHB1dCkKKwkJYS0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfT1VUX0NBUF9TVEQ7CisJYS0+dHlwZSA9IFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXhyX3Nfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG14cl9kZXZpY2UgKm1kZXYgPSBsYXllci0+bWRldjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpID49IG1kZXYtPm91dHB1dF9jbnQgfHwgbWRldi0+b3V0cHV0W2ldID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCWlmIChtZGV2LT5uX291dHB1dCA+IDApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCW1kZXYtPmN1cnJlbnRfb3V0cHV0ID0gaTsKKwl2ZmQtPnR2bm9ybXMgPSAwOworCXY0bDJfc3ViZGV2X2NhbGwodG9fb3V0c2QobWRldiksIHZpZGVvLCBnX3R2bm9ybXNfb3V0cHV0LAorCQkmdmZkLT50dm5vcm1zKTsKKwlteHJfZGJnKG1kZXYsICJ0dm5vcm1zID0gJTA4bGx4XG4iLCB2ZmQtPnR2bm9ybXMpOworCitkb25lOgorCW11dGV4X3VubG9jaygmbWRldi0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXhyX2dfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICpwKQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCisJbXV0ZXhfbG9jaygmbWRldi0+bXV0ZXgpOworCSpwID0gbWRldi0+Y3VycmVudF9vdXRwdXQ7CisJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteHJfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiB2YjJfcmVxYnVmcygmbGF5ZXItPnZiX3F1ZXVlLCBwKTsKK30KKworc3RhdGljIGludCBteHJfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlteHJfZGJnKGxheWVyLT5tZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIHZiMl9xdWVyeWJ1ZigmbGF5ZXItPnZiX3F1ZXVlLCBwKTsKK30KKworc3RhdGljIGludCBteHJfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCW14cl9kYmcobGF5ZXItPm1kZXYsICIlczolZCglZClcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgcC0+aW5kZXgpOworCXJldHVybiB2YjJfcWJ1ZigmbGF5ZXItPnZiX3F1ZXVlLCBwKTsKK30KKworc3RhdGljIGludCBteHJfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlteHJfZGJnKGxheWVyLT5tZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIHZiMl9kcWJ1ZigmbGF5ZXItPnZiX3F1ZXVlLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgbXhyX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlteHJfZGJnKGxheWVyLT5tZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIHZiMl9zdHJlYW1vbigmbGF5ZXItPnZiX3F1ZXVlLCBpKTsKK30KKworc3RhdGljIGludCBteHJfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlteHJfZGJnKGxheWVyLT5tZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIHZiMl9zdHJlYW1vZmYoJmxheWVyLT52Yl9xdWV1ZSwgaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbXhyX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwID0gbXhyX3F1ZXJ5Y2FwLAorCS8qIGZvcm1hdCBoYW5kbGluZyAqLworCS52aWRpb2NfZW51bV9mbXRfdmlkX291dCA9IG14cl9lbnVtX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXRfbXBsYW5lID0gbXhyX3NfZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX291dF9tcGxhbmUgPSBteHJfZ19mbXQsCisJLyogYnVmZmVyIGNvbnRyb2wgKi8KKwkudmlkaW9jX3JlcWJ1ZnMgPSBteHJfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmID0gbXhyX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiA9IG14cl9xYnVmLAorCS52aWRpb2NfZHFidWYgPSBteHJfZHFidWYsCisJLyogU3RyZWFtaW5nIGNvbnRyb2wgKi8KKwkudmlkaW9jX3N0cmVhbW9uID0gbXhyX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmID0gbXhyX3N0cmVhbW9mZiwKKwkvKiBQcmVzZXQgZnVuY3Rpb25zICovCisJLnZpZGlvY19lbnVtX2R2X3ByZXNldHMgPSBteHJfZW51bV9kdl9wcmVzZXRzLAorCS52aWRpb2Nfc19kdl9wcmVzZXQgPSBteHJfc19kdl9wcmVzZXQsCisJLnZpZGlvY19nX2R2X3ByZXNldCA9IG14cl9nX2R2X3ByZXNldCwKKwkvKiBhbmFsb2cgVFYgc3RhbmRhcmQgZnVuY3Rpb25zICovCisJLnZpZGlvY19zX3N0ZCA9IG14cl9zX3N0ZCwKKwkudmlkaW9jX2dfc3RkID0gbXhyX2dfc3RkLAorCS8qIE91dHB1dCBoYW5kbGluZyAqLworCS52aWRpb2NfZW51bV9vdXRwdXQgPSBteHJfZW51bV9vdXRwdXQsCisJLnZpZGlvY19zX291dHB1dCA9IG14cl9zX291dHB1dCwKKwkudmlkaW9jX2dfb3V0cHV0ID0gbXhyX2dfb3V0cHV0LAorCS8qIENyb3AgaW9jdGxzICovCisJLnZpZGlvY19nX2Nyb3AgPSBteHJfZ19jcm9wLAorCS52aWRpb2Nfc19jcm9wID0gbXhyX3NfY3JvcCwKKwkudmlkaW9jX2Nyb3BjYXAgPSBteHJfY3JvcGNhcCwKK307CisKK3N0YXRpYyBpbnQgbXhyX3ZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJaW50IHJldCA9IDA7CisKKwlteHJfZGJnKG1kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkvKiBhc3N1cmUgZGV2aWNlIHByb2JlIGlzIGZpbmlzaGVkICovCisJd2FpdF9mb3JfZGV2aWNlX3Byb2JlKCk7CisJLyogY3JlYXRpbmcgY29udGV4dCBmb3IgZmlsZSBkZXNjcmlwdG9yICovCisJcmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOworCWlmIChyZXQpIHsKKwkJbXhyX2VycihtZGV2LCAidjRsMl9maF9vcGVuIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogbGVhdmluZyBpZiBsYXllciBpcyBhbHJlYWR5IGluaXRpYWxpemVkICovCisJaWYgKCF2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSkpCisJCXJldHVybiAwOworCisJLyogRklYTUU6IHNob3VsZCBwb3dlciBiZSBlbmFibGVkIG9uIG9wZW4/ICovCisJcmV0ID0gbXhyX3Bvd2VyX2dldChtZGV2KTsKKwlpZiAocmV0KSB7CisJCW14cl9lcnIobWRldiwgInBvd2VyIG9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9maF9vcGVuOworCX0KKworCXJldCA9IHZiMl9xdWV1ZV9pbml0KCZsYXllci0+dmJfcXVldWUpOworCWlmIChyZXQgIT0gMCkgeworCQlteHJfZXJyKG1kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB2YjIgcXVldWVcbiIpOworCQlnb3RvIGZhaWxfcG93ZXI7CisJfQorCS8qIHNldCBkZWZhdWx0IGZvcm1hdCwgZmlyc3Qgb24gdGhlIGxpc3QgKi8KKwlsYXllci0+Zm10ID0gbGF5ZXItPmZtdF9hcnJheVswXTsKKwkvKiBzZXR1cCBkZWZhdWx0IGdlb21ldHJ5ICovCisJbXhyX2xheWVyX2RlZmF1bHRfZ2VvKGxheWVyKTsKKworCXJldHVybiAwOworCitmYWlsX3Bvd2VyOgorCW14cl9wb3dlcl9wdXQobWRldik7CisKK2ZhaWxfZmhfb3BlbjoKKwl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitteHJfdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCW14cl9kYmcobGF5ZXItPm1kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiB2YjJfcG9sbCgmbGF5ZXItPnZiX3F1ZXVlLCBmaWxlLCB3YWl0KTsKK30KKworc3RhdGljIGludCBteHJfdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIHZiMl9tbWFwKCZsYXllci0+dmJfcXVldWUsIHZtYSk7Cit9CisKK3N0YXRpYyBpbnQgbXhyX3ZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWlmICh2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSkpIHsKKwkJdmIyX3F1ZXVlX3JlbGVhc2UoJmxheWVyLT52Yl9xdWV1ZSk7CisJCW14cl9wb3dlcl9wdXQobGF5ZXItPm1kZXYpOworCX0KKwl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbXhyX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBteHJfdmlkZW9fb3BlbiwKKwkucG9sbCA9IG14cl92aWRlb19wb2xsLAorCS5tbWFwID0gbXhyX3ZpZGVvX21tYXAsCisJLnJlbGVhc2UgPSBteHJfdmlkZW9fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgaW50IHF1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKm5idWZmZXJzLAorCXVuc2lnbmVkIGludCAqbnBsYW5lcywgdW5zaWduZWQgbG9uZyBzaXplc1tdLAorCXZvaWQgKmFsbG9jX2N0eHNbXSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCWNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmbXQgPSBsYXllci0+Zm10OworCWludCBpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCBwbGFuZXNbM107CisKKwlteHJfZGJnKG1kZXYsICIlc1xuIiwgX19mdW5jX18pOworCS8qIGNoZWNraW5nIGlmIGZvcm1hdCB3YXMgY29uZmlndXJlZCAqLworCWlmIChmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXhyX2RiZyhtZGV2LCAiZm10ID0gJXNcbiIsIGZtdC0+bmFtZSk7CisJbXhyX21wbGFuZV9maWxsKHBsYW5lcywgZm10LCBsYXllci0+Z2VvLnNyYy5mdWxsX3dpZHRoLAorCQlsYXllci0+Z2VvLnNyYy5mdWxsX2hlaWdodCk7CisKKwkqbnBsYW5lcyA9IGZtdC0+bnVtX3N1YmZyYW1lczsKKwlmb3IgKGkgPSAwOyBpIDwgZm10LT5udW1fc3ViZnJhbWVzOyArK2kpIHsKKwkJYWxsb2NfY3R4c1tpXSA9IGxheWVyLT5tZGV2LT5hbGxvY19jdHg7CisJCXNpemVzW2ldID0gUEFHRV9BTElHTihwbGFuZXNbaV0uc2l6ZWltYWdlKTsKKwkJbXhyX2RiZyhtZGV2LCAic2l6ZVslZF0gPSAlMDhseFxuIiwgaSwgc2l6ZXNbaV0pOworCX0KKworCWlmICgqbmJ1ZmZlcnMgPT0gMCkKKwkJKm5idWZmZXJzID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBidWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBteHJfYnVmZmVyICpidWZmZXIgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBteHJfYnVmZmVyLCB2Yik7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbXVzdF9zdGFydCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCWlmIChsYXllci0+c3RhdGUgPT0gTVhSX0xBWUVSX1NUUkVBTUlOR19TVEFSVCkgeworCQlsYXllci0+c3RhdGUgPSBNWFJfTEFZRVJfU1RSRUFNSU5HOworCQltdXN0X3N0YXJ0ID0gMTsKKwl9CisJbGlzdF9hZGRfdGFpbCgmYnVmZmVyLT5saXN0LCAmbGF5ZXItPmVucV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXllci0+ZW5xX3Nsb2NrLCBmbGFncyk7CisJaWYgKG11c3Rfc3RhcnQpIHsKKwkJbGF5ZXItPm9wcy5zdHJlYW1fc2V0KGxheWVyLCBNWFJfRU5BQkxFKTsKKwkJbXhyX3N0cmVhbWVyX2dldChtZGV2KTsKKwl9CisKKwlteHJfZGJnKG1kZXYsICJxdWV1aW5nIGJ1ZmZlclxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfbG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCisJbXhyX2RiZyhsYXllci0+bWRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJbXV0ZXhfbG9jaygmbGF5ZXItPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd2FpdF91bmxvY2soc3RydWN0IHZiMl9xdWV1ZSAqdnEpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKworCW14cl9kYmcobGF5ZXItPm1kZXYsICIlc1xuIiwgX19mdW5jX18pOworCW11dGV4X3VubG9jaygmbGF5ZXItPm11dGV4KTsKK30KKworc3RhdGljIGludCBzdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpCit7CisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlteHJfZGJnKG1kZXYsICIlc1xuIiwgX19mdW5jX18pOworCS8qIGJsb2NrIGFueSBjaGFuZ2VzIGluIG91dHB1dCBjb25maWd1cmF0aW9uICovCisJbXhyX291dHB1dF9nZXQobWRldik7CisKKwkvKiB1cGRhdGUgbGF5ZXJzIGdlb21ldHJ5ICovCisJbXhyX2xheWVyX2dlb19maXgobGF5ZXIpOworCW14cl9nZW9tZXRyeV9kdW1wKG1kZXYsICZsYXllci0+Z2VvKTsKKworCWxheWVyLT5vcHMuZm9ybWF0X3NldChsYXllcik7CisJLyogZW5hYmxpbmcgbGF5ZXIgaW4gaGFyZHdhcmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCWxheWVyLT5zdGF0ZSA9IE1YUl9MQVlFUl9TVFJFQU1JTkdfU1RBUlQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14cl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IChzdHJ1Y3QgbXhyX2xheWVyICopIGFyZzsKKwlzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiA9IGxheWVyLT5tZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlteHJfZXJyKG1kZXYsICJ3YXRjaGRvZyBmaXJlZCBmb3IgbGF5ZXIgJXNcbiIsIGxheWVyLT52ZmQubmFtZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCisJaWYgKGxheWVyLT51cGRhdGVfYnVmID09IGxheWVyLT5zaGFkb3dfYnVmKQorCQlsYXllci0+dXBkYXRlX2J1ZiA9IE5VTEw7CisJaWYgKGxheWVyLT51cGRhdGVfYnVmKSB7CisJCXZiMl9idWZmZXJfZG9uZSgmbGF5ZXItPnVwZGF0ZV9idWYtPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwkJbGF5ZXItPnVwZGF0ZV9idWYgPSBOVUxMOworCX0KKwlpZiAobGF5ZXItPnNoYWRvd19idWYpIHsKKwkJdmIyX2J1ZmZlcl9kb25lKCZsYXllci0+c2hhZG93X2J1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRVJST1IpOworCQlsYXllci0+c2hhZG93X2J1ZiA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxheWVyLT5lbnFfc2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBzdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsKKwlzdHJ1Y3QgbXhyX2J1ZmZlciAqYnVmLCAqYnVmX3RtcDsKKworCW14cl9kYmcobWRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCisJLyogcmVzZXQgbGlzdCAqLworCWxheWVyLT5zdGF0ZSA9IE1YUl9MQVlFUl9TVFJFQU1JTkdfRklOSVNIOworCisJLyogc2V0IGFsbCBidWZmZXIgdG8gYmUgZG9uZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYsIGJ1Zl90bXAsICZsYXllci0+ZW5xX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGF5ZXItPmVucV9zbG9jaywgZmxhZ3MpOworCisJLyogZ2l2ZSAxIHNlY29uZHMgdG8gY29tcGxldGUgdG8gY29tcGxldGUgbGFzdCBidWZmZXJzICovCisJc2V0dXBfdGltZXJfb25fc3RhY2soJndhdGNoZG9nLCBteHJfd2F0Y2hkb2csCisJCSh1bnNpZ25lZCBsb25nKWxheWVyKTsKKwltb2RfdGltZXIoJndhdGNoZG9nLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisKKwkvKiB3YWl0IHVudGlsIGFsbCBidWZmZXJzIGFyZSBnb2VzIHRvIGRvbmUgc3RhdGUgKi8KKwl2YjJfd2FpdF9mb3JfYWxsX2J1ZmZlcnModnEpOworCisJLyogc3RvcCB0aW1lciBpZiBhbGwgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgKi8KKwlkZWxfdGltZXJfc3luYygmd2F0Y2hkb2cpOworCWRlc3Ryb3lfdGltZXJfb25fc3RhY2soJndhdGNoZG9nKTsKKworCS8qIHN0b3BwaW5nIGhhcmR3YXJlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxheWVyLT5lbnFfc2xvY2ssIGZsYWdzKTsKKwlsYXllci0+c3RhdGUgPSBNWFJfTEFZRVJfSURMRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXllci0+ZW5xX3Nsb2NrLCBmbGFncyk7CisKKwkvKiBkaXNhYmxpbmcgbGF5ZXIgaW4gaGFyZHdhcmUgKi8KKwlsYXllci0+b3BzLnN0cmVhbV9zZXQobGF5ZXIsIE1YUl9ESVNBQkxFKTsKKwkvKiByZW1vdmUgb25lIHN0cmVhbWVyICovCisJbXhyX3N0cmVhbWVyX3B1dChtZGV2KTsKKwkvKiBhbGxvdyBjaGFuZ2VzIGluIG91dHB1dCBjb25maWd1cmF0aW9uICovCisJbXhyX291dHB1dF9wdXQobWRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmIyX29wcyBteHJfdmlkZW9fcW9wcyA9IHsKKwkucXVldWVfc2V0dXAgPSBxdWV1ZV9zZXR1cCwKKwkuYnVmX3F1ZXVlID0gYnVmX3F1ZXVlLAorCS53YWl0X3ByZXBhcmUgPSB3YWl0X3VubG9jaywKKwkud2FpdF9maW5pc2ggPSB3YWl0X2xvY2ssCisJLnN0YXJ0X3N0cmVhbWluZyA9IHN0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcgPSBzdG9wX3N0cmVhbWluZywKK307CisKKy8qIEZJWE1FOiB0cnkgdG8gcHV0IHRoaXMgZnVuY3Rpb25zIHRvIG14cl9iYXNlX2xheWVyX2NyZWF0ZSAqLworaW50IG14cl9iYXNlX2xheWVyX3JlZ2lzdGVyKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKQoreworCXN0cnVjdCBteHJfZGV2aWNlICptZGV2ID0gbGF5ZXItPm1kZXY7CisJaW50IHJldDsKKworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmbGF5ZXItPnZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChyZXQpCisJCW14cl9lcnIobWRldiwgImZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOworCWVsc2UKKwkJbXhyX2luZm8obWRldiwgInJlZ2lzdGVyZWQgbGF5ZXIgJXMgYXMgL2Rldi92aWRlbyVkXG4iLAorCQkJbGF5ZXItPnZmZC5uYW1lLCBsYXllci0+dmZkLm51bSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBteHJfYmFzZV9sYXllcl91bnJlZ2lzdGVyKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKQoreworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZsYXllci0+dmZkKTsKK30KKwordm9pZCBteHJfbGF5ZXJfcmVsZWFzZShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlpZiAobGF5ZXItPm9wcy5yZWxlYXNlKQorCQlsYXllci0+b3BzLnJlbGVhc2UobGF5ZXIpOworfQorCit2b2lkIG14cl9iYXNlX2xheWVyX3JlbGVhc2Uoc3RydWN0IG14cl9sYXllciAqbGF5ZXIpCit7CisJa2ZyZWUobGF5ZXIpOworfQorCitzdGF0aWMgdm9pZCBteHJfdmZkX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPICJ2aWRlbyBkZXZpY2UgcmVsZWFzZVxuIik7Cit9CisKK3N0cnVjdCBteHJfbGF5ZXIgKm14cl9iYXNlX2xheWVyX2NyZWF0ZShzdHJ1Y3QgbXhyX2RldmljZSAqbWRldiwKKwlpbnQgaWR4LCBjaGFyICpuYW1lLCBzdHJ1Y3QgbXhyX2xheWVyX29wcyAqb3BzKQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyOworCisJbGF5ZXIgPSBremFsbG9jKHNpemVvZiAqbGF5ZXIsIEdGUF9LRVJORUwpOworCWlmIChsYXllciA9PSBOVUxMKSB7CisJCW14cl9lcnIobWRldiwgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBsYXllci5cbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJbGF5ZXItPm1kZXYgPSBtZGV2OworCWxheWVyLT5pZHggPSBpZHg7CisJbGF5ZXItPm9wcyA9ICpvcHM7CisKKwlzcGluX2xvY2tfaW5pdCgmbGF5ZXItPmVucV9zbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmxheWVyLT5lbnFfbGlzdCk7CisJbXV0ZXhfaW5pdCgmbGF5ZXItPm11dGV4KTsKKworCWxheWVyLT52ZmQgPSAoc3RydWN0IHZpZGVvX2RldmljZSkgeworCQkubWlub3IgPSAtMSwKKwkJLnJlbGVhc2UgPSBteHJfdmZkX3JlbGVhc2UsCisJCS5mb3BzID0gJm14cl9mb3BzLAorCQkuaW9jdGxfb3BzID0gJm14cl9pb2N0bF9vcHMsCisJfTsKKwlzdHJsY3B5KGxheWVyLT52ZmQubmFtZSwgbmFtZSwgc2l6ZW9mKGxheWVyLT52ZmQubmFtZSkpOworCS8qIGxldCBmcmFtZXdvcmsgY29udHJvbCBQUklPUklUWSAqLworCXNldF9iaXQoVjRMMl9GTF9VU0VfRkhfUFJJTywgJmxheWVyLT52ZmQuZmxhZ3MpOworCisJdmlkZW9fc2V0X2RydmRhdGEoJmxheWVyLT52ZmQsIGxheWVyKTsKKwlsYXllci0+dmZkLmxvY2sgPSAmbGF5ZXItPm11dGV4OworCWxheWVyLT52ZmQudjRsMl9kZXYgPSAmbWRldi0+djRsMl9kZXY7CisKKwlsYXllci0+dmJfcXVldWUgPSAoc3RydWN0IHZiMl9xdWV1ZSkgeworCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSwKKwkJLmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUiwKKwkJLmRydl9wcml2ID0gbGF5ZXIsCisJCS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IG14cl9idWZmZXIpLAorCQkub3BzID0gJm14cl92aWRlb19xb3BzLAorCQkubWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHMsCisJfTsKKworCXJldHVybiBsYXllcjsKKworZmFpbDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9mb3VyY2MoCisJc3RydWN0IG14cl9sYXllciAqbGF5ZXIsIHVuc2lnbmVkIGxvbmcgZm91cmNjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxheWVyLT5mbXRfYXJyYXlfc2l6ZTsgKytpKQorCQlpZiAobGF5ZXItPmZtdF9hcnJheVtpXS0+Zm91cmNjID09IGZvdXJjYykKKwkJCXJldHVybiBsYXllci0+Zm10X2FycmF5W2ldOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2luZGV4KAorCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyLCB1bnNpZ25lZCBsb25nIGluZGV4KQoreworCWlmIChpbmRleCA+PSBsYXllci0+Zm10X2FycmF5X3NpemUpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsYXllci0+Zm10X2FycmF5W2luZGV4XTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvbWl4ZXJfdnBfbGF5ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L21peGVyX3ZwX2xheWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1MGVkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L21peGVyX3ZwX2xheWVyLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBTYW1zdW5nIFRWIE1peGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogVG9tYXN6IFN0YW5pc2xhd3NraSwgPHQuc3RhbmlzbGF3c0BzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kaWF0aW9uLiBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLAorICogb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbgorICovCisKKyNpbmNsdWRlICJtaXhlci5oIgorCisjaW5jbHVkZSAicmVncy12cC5oIgorCisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4KKworLyogRk9STUFUIERFRklOSVRJT05TICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgbXhyX2ZtdF9udjEyID0geworCS5uYW1lID0gIk5WMTIiLAorCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYxMiwKKwkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCS5udW1fcGxhbmVzID0gMiwKKwkucGxhbmUgPSB7CisJCXsgLndpZHRoID0gMSwgLmhlaWdodCA9IDEsIC5zaXplID0gMSB9LAorCQl7IC53aWR0aCA9IDIsIC5oZWlnaHQgPSAyLCAuc2l6ZSA9IDIgfSwKKwl9LAorCS5udW1fc3ViZnJhbWVzID0gMSwKKwkuY29va2llID0gVlBfTU9ERV9OVjEyIHwgVlBfTU9ERV9NRU1fTElORUFSLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBteHJfZm9ybWF0IG14cl9mbXRfbnYyMSA9IHsKKwkubmFtZSA9ICJOVjIxIiwKKwkuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMjEsCisJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkubnVtX3BsYW5lcyA9IDIsCisJLnBsYW5lID0geworCQl7IC53aWR0aCA9IDEsIC5oZWlnaHQgPSAxLCAuc2l6ZSA9IDEgfSwKKwkJeyAud2lkdGggPSAyLCAuaGVpZ2h0ID0gMiwgLnNpemUgPSAyIH0sCisJfSwKKwkubnVtX3N1YmZyYW1lcyA9IDEsCisJLmNvb2tpZSA9IFZQX01PREVfTlYyMSB8IFZQX01PREVfTUVNX0xJTkVBUiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhyX2Zvcm1hdCBteHJfZm10X252MTJtID0geworCS5uYW1lID0gIk5WMTIgKG1wbGFuZSkiLAorCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYxMk0sCisJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkubnVtX3BsYW5lcyA9IDIsCisJLnBsYW5lID0geworCQl7IC53aWR0aCA9IDEsIC5oZWlnaHQgPSAxLCAuc2l6ZSA9IDEgfSwKKwkJeyAud2lkdGggPSAyLCAuaGVpZ2h0ID0gMiwgLnNpemUgPSAyIH0sCisJfSwKKwkubnVtX3N1YmZyYW1lcyA9IDIsCisJLnBsYW5lMnN1YmZyYW1lID0gezAsIDF9LAorCS5jb29raWUgPSBWUF9NT0RFX05WMTIgfCBWUF9NT0RFX01FTV9MSU5FQVIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG14cl9mb3JtYXQgbXhyX2ZtdF9udjEybXQgPSB7CisJLm5hbWUgPSAiTlYxMiB0aWxlZCAobXBsYW5lKSIsCisJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9OVjEyTVQsCisJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkubnVtX3BsYW5lcyA9IDIsCisJLnBsYW5lID0geworCQl7IC53aWR0aCA9IDEyOCwgLmhlaWdodCA9IDMyLCAuc2l6ZSA9IDQwOTYgfSwKKwkJeyAud2lkdGggPSAxMjgsIC5oZWlnaHQgPSAzMiwgLnNpemUgPSAyMDQ4IH0sCisJfSwKKwkubnVtX3N1YmZyYW1lcyA9IDIsCisJLnBsYW5lMnN1YmZyYW1lID0gezAsIDF9LAorCS5jb29raWUgPSBWUF9NT0RFX05WMTIgfCBWUF9NT0RFX01FTV9USUxFRCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXhyX2Zvcm1hdCAqbXhyX3ZpZGVvX2Zvcm1hdFtdID0geworCSZteHJfZm10X252MTIsCisJJm14cl9mbXRfbnYyMSwKKwkmbXhyX2ZtdF9udjEybSwKKwkmbXhyX2ZtdF9udjEybXQsCit9OworCisvKiBBVVhJTElBUlkgQ0FMTEJBQ0tTICovCisKK3N0YXRpYyB2b2lkIG14cl92cF9sYXllcl9yZWxlYXNlKHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyKQoreworCW14cl9iYXNlX2xheWVyX3VucmVnaXN0ZXIobGF5ZXIpOworCW14cl9iYXNlX2xheWVyX3JlbGVhc2UobGF5ZXIpOworfQorCitzdGF0aWMgdm9pZCBteHJfdnBfYnVmZmVyX3NldChzdHJ1Y3QgbXhyX2xheWVyICpsYXllciwKKwlzdHJ1Y3QgbXhyX2J1ZmZlciAqYnVmKQoreworCWRtYV9hZGRyX3QgbHVtYV9hZGRyWzJdID0gezAsIDB9OworCWRtYV9hZGRyX3QgY2hyb21hX2FkZHJbMl0gPSB7MCwgMH07CisKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJbXhyX3JlZ192cF9idWZmZXIobGF5ZXItPm1kZXYsIGx1bWFfYWRkciwgY2hyb21hX2FkZHIpOworCQlyZXR1cm47CisJfQorCWx1bWFfYWRkclswXSA9IHZiMl9kbWFfY29udGlnX3BsYW5lX3BhZGRyKCZidWYtPnZiLCAwKTsKKwlpZiAobGF5ZXItPmZtdC0+bnVtX3N1YmZyYW1lcyA9PSAyKSB7CisJCWNocm9tYV9hZGRyWzBdID0gdmIyX2RtYV9jb250aWdfcGxhbmVfcGFkZHIoJmJ1Zi0+dmIsIDEpOworCX0gZWxzZSB7CisJCS8qIEZJWE1FOiBteHJfZ2V0X3BsYW5lX3NpemUgY29tcHV0ZSBpbnRlZ2VyIGRpdmlzaW9uLAorCQkgKiB3aGljaCBpcyBzbG93IGFuZCBzaG91bGQgbm90IGJlIHBlcmZvcm1lZCBpbiBpbnRlcnJ1cHQgKi8KKwkJY2hyb21hX2FkZHJbMF0gPSBsdW1hX2FkZHJbMF0gKyBteHJfZ2V0X3BsYW5lX3NpemUoCisJCQkmbGF5ZXItPmZtdC0+cGxhbmVbMF0sIGxheWVyLT5nZW8uc3JjLmZ1bGxfd2lkdGgsCisJCQlsYXllci0+Z2VvLnNyYy5mdWxsX2hlaWdodCk7CisJfQorCWlmIChsYXllci0+Zm10LT5jb29raWUgJiBWUF9NT0RFX01FTV9USUxFRCkgeworCQlsdW1hX2FkZHJbMV0gPSBsdW1hX2FkZHJbMF0gKyAweDQwOworCQljaHJvbWFfYWRkclsxXSA9IGNocm9tYV9hZGRyWzBdICsgMHg0MDsKKwl9IGVsc2UgeworCQlsdW1hX2FkZHJbMV0gPSBsdW1hX2FkZHJbMF0gKyBsYXllci0+Z2VvLnNyYy5mdWxsX3dpZHRoOworCQljaHJvbWFfYWRkclsxXSA9IGNocm9tYV9hZGRyWzBdOworCX0KKwlteHJfcmVnX3ZwX2J1ZmZlcihsYXllci0+bWRldiwgbHVtYV9hZGRyLCBjaHJvbWFfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIG14cl92cF9zdHJlYW1fc2V0KHN0cnVjdCBteHJfbGF5ZXIgKmxheWVyLCBpbnQgZW4pCit7CisJbXhyX3JlZ192cF9sYXllcl9zdHJlYW0obGF5ZXItPm1kZXYsIGVuKTsKK30KKworc3RhdGljIHZvaWQgbXhyX3ZwX2Zvcm1hdF9zZXQoc3RydWN0IG14cl9sYXllciAqbGF5ZXIpCit7CisJbXhyX3JlZ192cF9mb3JtYXQobGF5ZXItPm1kZXYsIGxheWVyLT5mbXQsICZsYXllci0+Z2VvKTsKK30KKworc3RhdGljIHZvaWQgbXhyX3ZwX2ZpeF9nZW9tZXRyeShzdHJ1Y3QgbXhyX2xheWVyICpsYXllcikKK3sKKwlzdHJ1Y3QgbXhyX2dlb21ldHJ5ICpnZW8gPSAmbGF5ZXItPmdlbzsKKworCS8qIGFsaWduIGhvcml6b250YWwgc2l6ZSB0byA4IHBpeGVscyAqLworCWdlby0+c3JjLmZ1bGxfd2lkdGggPSBBTElHTihnZW8tPnNyYy5mdWxsX3dpZHRoLCA4KTsKKwkvKiBsaW1pdCB0byBib3VuZGFyeSBzaXplICovCisJZ2VvLT5zcmMuZnVsbF93aWR0aCA9IGNsYW1wX3ZhbChnZW8tPnNyYy5mdWxsX3dpZHRoLCA4LCA4MTkyKTsKKwlnZW8tPnNyYy5mdWxsX2hlaWdodCA9IGNsYW1wX3ZhbChnZW8tPnNyYy5mdWxsX2hlaWdodCwgMSwgODE5Mik7CisJZ2VvLT5zcmMud2lkdGggPSBjbGFtcF92YWwoZ2VvLT5zcmMud2lkdGgsIDMyLCBnZW8tPnNyYy5mdWxsX3dpZHRoKTsKKwlnZW8tPnNyYy53aWR0aCA9IG1pbihnZW8tPnNyYy53aWR0aCwgMjA0N1UpOworCWdlby0+c3JjLmhlaWdodCA9IGNsYW1wX3ZhbChnZW8tPnNyYy5oZWlnaHQsIDQsIGdlby0+c3JjLmZ1bGxfaGVpZ2h0KTsKKwlnZW8tPnNyYy5oZWlnaHQgPSBtaW4oZ2VvLT5zcmMuaGVpZ2h0LCAyMDQ3VSk7CisKKwkvKiBzZXR0aW5nIHNpemUgb2Ygb3V0cHV0IHdpbmRvdyAqLworCWdlby0+ZHN0LndpZHRoID0gY2xhbXBfdmFsKGdlby0+ZHN0LndpZHRoLCA4LCBnZW8tPmRzdC5mdWxsX3dpZHRoKTsKKwlnZW8tPmRzdC5oZWlnaHQgPSBjbGFtcF92YWwoZ2VvLT5kc3QuaGVpZ2h0LCAxLCBnZW8tPmRzdC5mdWxsX2hlaWdodCk7CisKKwkvKiBlbnN1cmUgdGhhdCBzY2FsaW5nIGlzIGluIHJhbmdlIDEvNHggdG8gMTZ4ICovCisJaWYgKGdlby0+c3JjLndpZHRoID49IDQgKiBnZW8tPmRzdC53aWR0aCkKKwkJZ2VvLT5zcmMud2lkdGggPSA0ICogZ2VvLT5kc3Qud2lkdGg7CisJaWYgKGdlby0+ZHN0LndpZHRoID49IDE2ICogZ2VvLT5zcmMud2lkdGgpCisJCWdlby0+ZHN0LndpZHRoID0gMTYgKiBnZW8tPnNyYy53aWR0aDsKKwlpZiAoZ2VvLT5zcmMuaGVpZ2h0ID49IDQgKiBnZW8tPmRzdC5oZWlnaHQpCisJCWdlby0+c3JjLmhlaWdodCA9IDQgKiBnZW8tPmRzdC5oZWlnaHQ7CisJaWYgKGdlby0+ZHN0LmhlaWdodCA+PSAxNiAqIGdlby0+c3JjLmhlaWdodCkKKwkJZ2VvLT5kc3QuaGVpZ2h0ID0gMTYgKiBnZW8tPnNyYy5oZWlnaHQ7CisKKwkvKiBzZXR0aW5nIHNjYWxpbmcgcmF0aW8gKi8KKwlnZW8tPnhfcmF0aW8gPSAoZ2VvLT5zcmMud2lkdGggPDwgMTYpIC8gZ2VvLT5kc3Qud2lkdGg7CisJZ2VvLT55X3JhdGlvID0gKGdlby0+c3JjLmhlaWdodCA8PCAxNikgLyBnZW8tPmRzdC5oZWlnaHQ7CisKKwkvKiBhZGp1c3Qgb2Zmc2V0cyAqLworCWdlby0+c3JjLnhfb2Zmc2V0ID0gbWluKGdlby0+c3JjLnhfb2Zmc2V0LAorCQlnZW8tPnNyYy5mdWxsX3dpZHRoIC0gZ2VvLT5zcmMud2lkdGgpOworCWdlby0+c3JjLnlfb2Zmc2V0ID0gbWluKGdlby0+c3JjLnlfb2Zmc2V0LAorCQlnZW8tPnNyYy5mdWxsX2hlaWdodCAtIGdlby0+c3JjLmhlaWdodCk7CisJZ2VvLT5kc3QueF9vZmZzZXQgPSBtaW4oZ2VvLT5kc3QueF9vZmZzZXQsCisJCWdlby0+ZHN0LmZ1bGxfd2lkdGggLSBnZW8tPmRzdC53aWR0aCk7CisJZ2VvLT5kc3QueV9vZmZzZXQgPSBtaW4oZ2VvLT5kc3QueV9vZmZzZXQsCisJCWdlby0+ZHN0LmZ1bGxfaGVpZ2h0IC0gZ2VvLT5kc3QuaGVpZ2h0KTsKK30KKworLyogUFVCTElDIEFQSSAqLworCitzdHJ1Y3QgbXhyX2xheWVyICpteHJfdnBfbGF5ZXJfY3JlYXRlKHN0cnVjdCBteHJfZGV2aWNlICptZGV2LCBpbnQgaWR4KQoreworCXN0cnVjdCBteHJfbGF5ZXIgKmxheWVyOworCWludCByZXQ7CisJc3RydWN0IG14cl9sYXllcl9vcHMgb3BzID0geworCQkucmVsZWFzZSA9IG14cl92cF9sYXllcl9yZWxlYXNlLAorCQkuYnVmZmVyX3NldCA9IG14cl92cF9idWZmZXJfc2V0LAorCQkuc3RyZWFtX3NldCA9IG14cl92cF9zdHJlYW1fc2V0LAorCQkuZm9ybWF0X3NldCA9IG14cl92cF9mb3JtYXRfc2V0LAorCQkuZml4X2dlb21ldHJ5ID0gbXhyX3ZwX2ZpeF9nZW9tZXRyeSwKKwl9OworCWNoYXIgbmFtZVszMl07CisKKwlzcHJpbnRmKG5hbWUsICJ2aWRlbyVkIiwgaWR4KTsKKworCWxheWVyID0gbXhyX2Jhc2VfbGF5ZXJfY3JlYXRlKG1kZXYsIGlkeCwgbmFtZSwgJm9wcyk7CisJaWYgKGxheWVyID09IE5VTEwpIHsKKwkJbXhyX2VycihtZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgbGF5ZXIoJWQpIGJhc2VcbiIsIGlkeCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlsYXllci0+Zm10X2FycmF5ID0gbXhyX3ZpZGVvX2Zvcm1hdDsKKwlsYXllci0+Zm10X2FycmF5X3NpemUgPSBBUlJBWV9TSVpFKG14cl92aWRlb19mb3JtYXQpOworCisJcmV0ID0gbXhyX2Jhc2VfbGF5ZXJfcmVnaXN0ZXIobGF5ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9sYXllcjsKKworCXJldHVybiBsYXllcjsKKworZmFpbF9sYXllcjoKKwlteHJfYmFzZV9sYXllcl9yZWxlYXNlKGxheWVyKTsKKworZmFpbDoKKwlyZXR1cm4gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1oZG1pLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9yZWdzLWhkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzkzYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1oZG1pLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy1oZG1pLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBIRE1JIHJlZ2lzdGVyIGhlYWRlciBmaWxlIGZvciBTYW1zdW5nIFRWT1VUIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIFNBTVNVTkdfUkVHU19IRE1JX0gKKyNkZWZpbmUgU0FNU1VOR19SRUdTX0hETUlfSAorCisvKgorICogUmVnaXN0ZXIgcGFydAorKi8KKworI2RlZmluZSBIRE1JX0NUUkxfQkFTRSh4KQkJKCh4KSArIDB4MDAwMDAwMDApCisjZGVmaW5lIEhETUlfQ09SRV9CQVNFKHgpCQkoKHgpICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgSERNSV9UR19CQVNFKHgpCQkJKCh4KSArIDB4MDAwNTAwMDApCisKKy8qIENvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhETUlfSU5UQ19DT04JCQlIRE1JX0NUUkxfQkFTRSgweDAwMDApCisjZGVmaW5lIEhETUlfSU5UQ19GTEFHCQkJSERNSV9DVFJMX0JBU0UoMHgwMDA0KQorI2RlZmluZSBIRE1JX0hQRF9TVEFUVVMJCQlIRE1JX0NUUkxfQkFTRSgweDAwMEMpCisjZGVmaW5lIEhETUlfUEhZX1JTVE9VVAkJCUhETUlfQ1RSTF9CQVNFKDB4MDAxNCkKKyNkZWZpbmUgSERNSV9QSFlfVlBMTAkJCUhETUlfQ1RSTF9CQVNFKDB4MDAxOCkKKyNkZWZpbmUgSERNSV9QSFlfQ01VCQkJSERNSV9DVFJMX0JBU0UoMHgwMDFDKQorI2RlZmluZSBIRE1JX0NPUkVfUlNUT1VUCQlIRE1JX0NUUkxfQkFTRSgweDAwMjApCisKKy8qIENvcmUgcmVnaXN0ZXJzICovCisjZGVmaW5lIEhETUlfQ09OXzAJCQlIRE1JX0NPUkVfQkFTRSgweDAwMDApCisjZGVmaW5lIEhETUlfQ09OXzEJCQlIRE1JX0NPUkVfQkFTRSgweDAwMDQpCisjZGVmaW5lIEhETUlfQ09OXzIJCQlIRE1JX0NPUkVfQkFTRSgweDAwMDgpCisjZGVmaW5lIEhETUlfU1lTX1NUQVRVUwkJCUhETUlfQ09SRV9CQVNFKDB4MDAxMCkKKyNkZWZpbmUgSERNSV9QSFlfU1RBVFVTCQkJSERNSV9DT1JFX0JBU0UoMHgwMDE0KQorI2RlZmluZSBIRE1JX1NUQVRVU19FTgkJCUhETUlfQ09SRV9CQVNFKDB4MDAyMCkKKyNkZWZpbmUgSERNSV9IUEQJCQlIRE1JX0NPUkVfQkFTRSgweDAwMzApCisjZGVmaW5lIEhETUlfTU9ERV9TRUwJCQlIRE1JX0NPUkVfQkFTRSgweDAwNDApCisjZGVmaW5lIEhETUlfQkxVRV9TQ1JFRU5fMAkJSERNSV9DT1JFX0JBU0UoMHgwMDUwKQorI2RlZmluZSBIRE1JX0JMVUVfU0NSRUVOXzEJCUhETUlfQ09SRV9CQVNFKDB4MDA1NCkKKyNkZWZpbmUgSERNSV9CTFVFX1NDUkVFTl8yCQlIRE1JX0NPUkVfQkFTRSgweDAwNTgpCisjZGVmaW5lIEhETUlfSF9CTEFOS18wCQkJSERNSV9DT1JFX0JBU0UoMHgwMEEwKQorI2RlZmluZSBIRE1JX0hfQkxBTktfMQkJCUhETUlfQ09SRV9CQVNFKDB4MDBBNCkKKyNkZWZpbmUgSERNSV9WX0JMQU5LXzAJCQlIRE1JX0NPUkVfQkFTRSgweDAwQjApCisjZGVmaW5lIEhETUlfVl9CTEFOS18xCQkJSERNSV9DT1JFX0JBU0UoMHgwMEI0KQorI2RlZmluZSBIRE1JX1ZfQkxBTktfMgkJCUhETUlfQ09SRV9CQVNFKDB4MDBCOCkKKyNkZWZpbmUgSERNSV9IX1ZfTElORV8wCQkJSERNSV9DT1JFX0JBU0UoMHgwMEMwKQorI2RlZmluZSBIRE1JX0hfVl9MSU5FXzEJCQlIRE1JX0NPUkVfQkFTRSgweDAwQzQpCisjZGVmaW5lIEhETUlfSF9WX0xJTkVfMgkJCUhETUlfQ09SRV9CQVNFKDB4MDBDOCkKKyNkZWZpbmUgSERNSV9WU1lOQ19QT0wJCQlIRE1JX0NPUkVfQkFTRSgweDAwRTQpCisjZGVmaW5lIEhETUlfSU5UX1BST19NT0RFCQlIRE1JX0NPUkVfQkFTRSgweDAwRTgpCisjZGVmaW5lIEhETUlfVl9CTEFOS19GXzAJCUhETUlfQ09SRV9CQVNFKDB4MDExMCkKKyNkZWZpbmUgSERNSV9WX0JMQU5LX0ZfMQkJSERNSV9DT1JFX0JBU0UoMHgwMTE0KQorI2RlZmluZSBIRE1JX1ZfQkxBTktfRl8yCQlIRE1JX0NPUkVfQkFTRSgweDAxMTgpCisjZGVmaW5lIEhETUlfSF9TWU5DX0dFTl8wCQlIRE1JX0NPUkVfQkFTRSgweDAxMjApCisjZGVmaW5lIEhETUlfSF9TWU5DX0dFTl8xCQlIRE1JX0NPUkVfQkFTRSgweDAxMjQpCisjZGVmaW5lIEhETUlfSF9TWU5DX0dFTl8yCQlIRE1JX0NPUkVfQkFTRSgweDAxMjgpCisjZGVmaW5lIEhETUlfVl9TWU5DX0dFTl8xXzAJCUhETUlfQ09SRV9CQVNFKDB4MDEzMCkKKyNkZWZpbmUgSERNSV9WX1NZTkNfR0VOXzFfMQkJSERNSV9DT1JFX0JBU0UoMHgwMTM0KQorI2RlZmluZSBIRE1JX1ZfU1lOQ19HRU5fMV8yCQlIRE1JX0NPUkVfQkFTRSgweDAxMzgpCisjZGVmaW5lIEhETUlfVl9TWU5DX0dFTl8yXzAJCUhETUlfQ09SRV9CQVNFKDB4MDE0MCkKKyNkZWZpbmUgSERNSV9WX1NZTkNfR0VOXzJfMQkJSERNSV9DT1JFX0JBU0UoMHgwMTQ0KQorI2RlZmluZSBIRE1JX1ZfU1lOQ19HRU5fMl8yCQlIRE1JX0NPUkVfQkFTRSgweDAxNDgpCisjZGVmaW5lIEhETUlfVl9TWU5DX0dFTl8zXzAJCUhETUlfQ09SRV9CQVNFKDB4MDE1MCkKKyNkZWZpbmUgSERNSV9WX1NZTkNfR0VOXzNfMQkJSERNSV9DT1JFX0JBU0UoMHgwMTU0KQorI2RlZmluZSBIRE1JX1ZfU1lOQ19HRU5fM18yCQlIRE1JX0NPUkVfQkFTRSgweDAxNTgpCisjZGVmaW5lIEhETUlfQVZJX0NPTgkJCUhETUlfQ09SRV9CQVNFKDB4MDMwMCkKKyNkZWZpbmUgSERNSV9BVklfQllURShuKQkJSERNSV9DT1JFX0JBU0UoMHgwMzIwICsgNCAqIChuKSkKKyNkZWZpbmUJSERNSV9EQ19DT05UUk9MCQkJSERNSV9DT1JFX0JBU0UoMHgwNUMwKQorI2RlZmluZSBIRE1JX1ZJREVPX1BBVFRFUk5fR0VOCQlIRE1JX0NPUkVfQkFTRSgweDA1QzQpCisjZGVmaW5lIEhETUlfSFBEX0dFTgkJCUhETUlfQ09SRV9CQVNFKDB4MDVDOCkKKworLyogVGltaW5nIGdlbmVyYXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSERNSV9UR19DTUQJCQlIRE1JX1RHX0JBU0UoMHgwMDAwKQorI2RlZmluZSBIRE1JX1RHX0hfRlNaX0wJCQlIRE1JX1RHX0JBU0UoMHgwMDE4KQorI2RlZmluZSBIRE1JX1RHX0hfRlNaX0gJCQlIRE1JX1RHX0JBU0UoMHgwMDFDKQorI2RlZmluZSBIRE1JX1RHX0hBQ1RfU1RfTAkJSERNSV9UR19CQVNFKDB4MDAyMCkKKyNkZWZpbmUgSERNSV9UR19IQUNUX1NUX0gJCUhETUlfVEdfQkFTRSgweDAwMjQpCisjZGVmaW5lIEhETUlfVEdfSEFDVF9TWl9MCQlIRE1JX1RHX0JBU0UoMHgwMDI4KQorI2RlZmluZSBIRE1JX1RHX0hBQ1RfU1pfSAkJSERNSV9UR19CQVNFKDB4MDAyQykKKyNkZWZpbmUgSERNSV9UR19WX0ZTWl9MCQkJSERNSV9UR19CQVNFKDB4MDAzMCkKKyNkZWZpbmUgSERNSV9UR19WX0ZTWl9ICQkJSERNSV9UR19CQVNFKDB4MDAzNCkKKyNkZWZpbmUgSERNSV9UR19WU1lOQ19MCQkJSERNSV9UR19CQVNFKDB4MDAzOCkKKyNkZWZpbmUgSERNSV9UR19WU1lOQ19ICQkJSERNSV9UR19CQVNFKDB4MDAzQykKKyNkZWZpbmUgSERNSV9UR19WU1lOQzJfTAkJSERNSV9UR19CQVNFKDB4MDA0MCkKKyNkZWZpbmUgSERNSV9UR19WU1lOQzJfSAkJSERNSV9UR19CQVNFKDB4MDA0NCkKKyNkZWZpbmUgSERNSV9UR19WQUNUX1NUX0wJCUhETUlfVEdfQkFTRSgweDAwNDgpCisjZGVmaW5lIEhETUlfVEdfVkFDVF9TVF9ICQlIRE1JX1RHX0JBU0UoMHgwMDRDKQorI2RlZmluZSBIRE1JX1RHX1ZBQ1RfU1pfTAkJSERNSV9UR19CQVNFKDB4MDA1MCkKKyNkZWZpbmUgSERNSV9UR19WQUNUX1NaX0gJCUhETUlfVEdfQkFTRSgweDAwNTQpCisjZGVmaW5lIEhETUlfVEdfRklFTERfQ0hHX0wJCUhETUlfVEdfQkFTRSgweDAwNTgpCisjZGVmaW5lIEhETUlfVEdfRklFTERfQ0hHX0gJCUhETUlfVEdfQkFTRSgweDAwNUMpCisjZGVmaW5lIEhETUlfVEdfVkFDVF9TVDJfTAkJSERNSV9UR19CQVNFKDB4MDA2MCkKKyNkZWZpbmUgSERNSV9UR19WQUNUX1NUMl9ICQlIRE1JX1RHX0JBU0UoMHgwMDY0KQorI2RlZmluZSBIRE1JX1RHX1ZTWU5DX1RPUF9IRE1JX0wJSERNSV9UR19CQVNFKDB4MDA3OCkKKyNkZWZpbmUgSERNSV9UR19WU1lOQ19UT1BfSERNSV9ICUhETUlfVEdfQkFTRSgweDAwN0MpCisjZGVmaW5lIEhETUlfVEdfVlNZTkNfQk9UX0hETUlfTAlIRE1JX1RHX0JBU0UoMHgwMDgwKQorI2RlZmluZSBIRE1JX1RHX1ZTWU5DX0JPVF9IRE1JX0gJSERNSV9UR19CQVNFKDB4MDA4NCkKKyNkZWZpbmUgSERNSV9UR19GSUVMRF9UT1BfSERNSV9MCUhETUlfVEdfQkFTRSgweDAwODgpCisjZGVmaW5lIEhETUlfVEdfRklFTERfVE9QX0hETUlfSAlIRE1JX1RHX0JBU0UoMHgwMDhDKQorI2RlZmluZSBIRE1JX1RHX0ZJRUxEX0JPVF9IRE1JX0wJSERNSV9UR19CQVNFKDB4MDA5MCkKKyNkZWZpbmUgSERNSV9UR19GSUVMRF9CT1RfSERNSV9ICUhETUlfVEdfQkFTRSgweDAwOTQpCisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbiBwYXJ0CisgKi8KKworLyogSERNSV9JTlRDX0NPTiAqLworI2RlZmluZSBIRE1JX0lOVENfRU5fR0xPQkFMCQkoMSA8PCA2KQorI2RlZmluZSBIRE1JX0lOVENfRU5fSFBEX1BMVUcJCSgxIDw8IDMpCisjZGVmaW5lIEhETUlfSU5UQ19FTl9IUERfVU5QTFVHCQkoMSA8PCAyKQorCisvKiBIRE1JX0lOVENfRkxBRyAqLworI2RlZmluZSBIRE1JX0lOVENfRkxBR19IUERfUExVRwkJKDEgPDwgMykKKyNkZWZpbmUgSERNSV9JTlRDX0ZMQUdfSFBEX1VOUExVRwkoMSA8PCAyKQorCisvKiBIRE1JX1BIWV9SU1RPVVQgKi8KKyNkZWZpbmUgSERNSV9QSFlfU1dfUlNUT1VUCQkoMSA8PCAwKQorCisvKiBIRE1JX0NPUkVfUlNUT1VUICovCisjZGVmaW5lIEhETUlfQ09SRV9TV19SU1RPVVQJCSgxIDw8IDApCisKKy8qIEhETUlfQ09OXzAgKi8KKyNkZWZpbmUgSERNSV9CTFVFX1NDUl9FTgkJKDEgPDwgNSkKKyNkZWZpbmUgSERNSV9FTgkJCQkoMSA8PCAwKQorCisvKiBIRE1JX1BIWV9TVEFUVVMgKi8KKyNkZWZpbmUgSERNSV9QSFlfU1RBVFVTX1JFQURZCQkoMSA8PCAwKQorCisvKiBIRE1JX01PREVfU0VMICovCisjZGVmaW5lIEhETUlfTU9ERV9IRE1JX0VOCQkoMSA8PCAxKQorI2RlZmluZSBIRE1JX01PREVfRFZJX0VOCQkoMSA8PCAwKQorI2RlZmluZSBIRE1JX01PREVfTUFTSwkJCSgzIDw8IDApCisKKy8qIEhETUlfVEdfQ01EICovCisjZGVmaW5lIEhETUlfVEdfRU4JCQkoMSA8PCAwKQorCisjZW5kaWYgLyogU0FNU1VOR19SRUdTX0hETUlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1taXhlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1taXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODQ0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9yZWdzLW1peGVyLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBNaXhlciByZWdpc3RlciBoZWFkZXIgZmlsZSBmb3IgU2Ftc3VuZyBNaXhlciBkcml2ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKyNpZm5kZWYgU0FNU1VOR19SRUdTX01JWEVSX0gKKyNkZWZpbmUgU0FNU1VOR19SRUdTX01JWEVSX0gKKworLyoKKyAqIFJlZ2lzdGVyIHBhcnQKKyAqLworI2RlZmluZSBNWFJfU1RBVFVTCQkJMHgwMDAwCisjZGVmaW5lIE1YUl9DRkcJCQkJMHgwMDA0CisjZGVmaW5lIE1YUl9JTlRfRU4JCQkweDAwMDgKKyNkZWZpbmUgTVhSX0lOVF9TVEFUVVMJCQkweDAwMEMKKyNkZWZpbmUgTVhSX0xBWUVSX0NGRwkJCTB4MDAxMAorI2RlZmluZSBNWFJfVklERU9fQ0ZHCQkJMHgwMDE0CisjZGVmaW5lIE1YUl9HUkFQSElDMF9DRkcJCTB4MDAyMAorI2RlZmluZSBNWFJfR1JBUEhJQzBfQkFTRQkJMHgwMDI0CisjZGVmaW5lIE1YUl9HUkFQSElDMF9TUEFOCQkweDAwMjgKKyNkZWZpbmUgTVhSX0dSQVBISUMwX1NYWQkJMHgwMDJDCisjZGVmaW5lIE1YUl9HUkFQSElDMF9XSAkJCTB4MDAzMAorI2RlZmluZSBNWFJfR1JBUEhJQzBfRFhZCQkweDAwMzQKKyNkZWZpbmUgTVhSX0dSQVBISUMwX0JMQU5LCQkweDAwMzgKKyNkZWZpbmUgTVhSX0dSQVBISUMxX0NGRwkJMHgwMDQwCisjZGVmaW5lIE1YUl9HUkFQSElDMV9CQVNFCQkweDAwNDQKKyNkZWZpbmUgTVhSX0dSQVBISUMxX1NQQU4JCTB4MDA0OAorI2RlZmluZSBNWFJfR1JBUEhJQzFfU1hZCQkweDAwNEMKKyNkZWZpbmUgTVhSX0dSQVBISUMxX1dICQkJMHgwMDUwCisjZGVmaW5lIE1YUl9HUkFQSElDMV9EWFkJCTB4MDA1NAorI2RlZmluZSBNWFJfR1JBUEhJQzFfQkxBTksJCTB4MDA1OAorI2RlZmluZSBNWFJfQkdfQ0ZHCQkJMHgwMDYwCisjZGVmaW5lIE1YUl9CR19DT0xPUjAJCQkweDAwNjQKKyNkZWZpbmUgTVhSX0JHX0NPTE9SMQkJCTB4MDA2OAorI2RlZmluZSBNWFJfQkdfQ09MT1IyCQkJMHgwMDZDCisKKy8qIGZvciBwYXJhbWV0cml6ZWQgYWNjZXNzIHRvIGxheWVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBNWFJfR1JBUEhJQ19DRkcoaSkJCSgweDAwMjAgKyAoaSkgKiAweDIwKQorI2RlZmluZSBNWFJfR1JBUEhJQ19CQVNFKGkpCQkoMHgwMDI0ICsgKGkpICogMHgyMCkKKyNkZWZpbmUgTVhSX0dSQVBISUNfU1BBTihpKQkJKDB4MDAyOCArIChpKSAqIDB4MjApCisjZGVmaW5lIE1YUl9HUkFQSElDX1NYWShpKQkJKDB4MDAyQyArIChpKSAqIDB4MjApCisjZGVmaW5lIE1YUl9HUkFQSElDX1dIKGkpCQkoMHgwMDMwICsgKGkpICogMHgyMCkKKyNkZWZpbmUgTVhSX0dSQVBISUNfRFhZKGkpCQkoMHgwMDM0ICsgKGkpICogMHgyMCkKKworLyoKKyAqIEJpdCBkZWZpbml0aW9uIHBhcnQKKyAqLworCisvKiBnZW5lcmF0ZXMgbWFzayBmb3IgcmFuZ2Ugb2YgYml0cyAqLworI2RlZmluZSBNWFJfTUFTSyhoaWdoX2JpdCwgbG93X2JpdCkgXAorCSgoKDIgPDwgKChoaWdoX2JpdCkgLSAobG93X2JpdCkpKSAtIDEpIDw8IChsb3dfYml0KSkKKworI2RlZmluZSBNWFJfTUFTS19WQUwodmFsLCBoaWdoX2JpdCwgbG93X2JpdCkgXAorCSgoKHZhbCkgPDwgKGxvd19iaXQpKSAmIE1YUl9NQVNLKGhpZ2hfYml0LCBsb3dfYml0KSkKKworLyogYml0cyBmb3IgTVhSX1NUQVRVUyAqLworI2RlZmluZSBNWFJfU1RBVFVTXzE2X0JVUlNUCQkoMSA8PCA3KQorI2RlZmluZSBNWFJfU1RBVFVTX0JVUlNUX01BU0sJCSgxIDw8IDcpCisjZGVmaW5lIE1YUl9TVEFUVVNfU1lOQ19FTkFCTEUJCSgxIDw8IDIpCisjZGVmaW5lIE1YUl9TVEFUVVNfUkVHX1JVTgkJKDEgPDwgMCkKKworLyogYml0cyBmb3IgTVhSX0NGRyAqLworI2RlZmluZSBNWFJfQ0ZHX09VVF9ZVVY0NDQJCSgwIDw8IDgpCisjZGVmaW5lIE1YUl9DRkdfT1VUX1JHQjg4OAkJKDEgPDwgOCkKKyNkZWZpbmUgTVhSX0NGR19EU1RfU0RPCQkJKDAgPDwgNykKKyNkZWZpbmUgTVhSX0NGR19EU1RfSERNSQkJKDEgPDwgNykKKyNkZWZpbmUgTVhSX0NGR19EU1RfTUFTSwkJKDEgPDwgNykKKyNkZWZpbmUgTVhSX0NGR19TQ0FOX0hEXzcyMAkJKDAgPDwgNikKKyNkZWZpbmUgTVhSX0NGR19TQ0FOX0hEXzEwODAJCSgxIDw8IDYpCisjZGVmaW5lIE1YUl9DRkdfR1JQMV9FTkFCTEUJCSgxIDw8IDUpCisjZGVmaW5lIE1YUl9DRkdfR1JQMF9FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIE1YUl9DRkdfVlBfRU5BQkxFCQkoMSA8PCAzKQorI2RlZmluZSBNWFJfQ0ZHX1NDQU5fSU5URVJMQUNFCQkoMCA8PCAyKQorI2RlZmluZSBNWFJfQ0ZHX1NDQU5fUFJPR1JBU1NJVkUJKDEgPDwgMikKKyNkZWZpbmUgTVhSX0NGR19TQ0FOX05UU0MJCSgwIDw8IDEpCisjZGVmaW5lIE1YUl9DRkdfU0NBTl9QQUwJCSgxIDw8IDEpCisjZGVmaW5lIE1YUl9DRkdfU0NBTl9TRAkJCSgwIDw8IDApCisjZGVmaW5lIE1YUl9DRkdfU0NBTl9IRAkJCSgxIDw8IDApCisjZGVmaW5lIE1YUl9DRkdfU0NBTl9NQVNLCQkweDQ3CisKKy8qIGJpdHMgZm9yIE1YUl9HUkFQSElDbl9DRkcgKi8KKyNkZWZpbmUgTVhSX0dSUF9DRkdfQ09MT1JfS0VZX0RJU0FCTEUJKDEgPDwgMjEpCisjZGVmaW5lIE1YUl9HUlBfQ0ZHX0JMRU5EX1BSRV9NVUwJKDEgPDwgMjApCisjZGVmaW5lIE1YUl9HUlBfQ0ZHX0ZPUk1BVF9WQUwoeCkJTVhSX01BU0tfVkFMKHgsIDExLCA4KQorI2RlZmluZSBNWFJfR1JQX0NGR19GT1JNQVRfTUFTSwkJTVhSX0dSUF9DRkdfRk9STUFUX1ZBTCh+MCkKKyNkZWZpbmUgTVhSX0dSUF9DRkdfQUxQSEFfVkFMKHgpCU1YUl9NQVNLX1ZBTCh4LCA3LCAwKQorCisvKiBiaXRzIGZvciBNWFJfR1JBUEhJQ25fV0ggKi8KKyNkZWZpbmUgTVhSX0dSUF9XSF9IX1NDQUxFKHgpCQlNWFJfTUFTS19WQUwoeCwgMjgsIDI4KQorI2RlZmluZSBNWFJfR1JQX1dIX1ZfU0NBTEUoeCkJCU1YUl9NQVNLX1ZBTCh4LCAxMiwgMTIpCisjZGVmaW5lIE1YUl9HUlBfV0hfV0lEVEgoeCkJCU1YUl9NQVNLX1ZBTCh4LCAyNiwgMTYpCisjZGVmaW5lIE1YUl9HUlBfV0hfSEVJR0hUKHgpCQlNWFJfTUFTS19WQUwoeCwgMTAsIDApCisKKy8qIGJpdHMgZm9yIE1YUl9HUkFQSElDbl9TWFkgKi8KKyNkZWZpbmUgTVhSX0dSUF9TWFlfU1goeCkJCU1YUl9NQVNLX1ZBTCh4LCAyNiwgMTYpCisjZGVmaW5lIE1YUl9HUlBfU1hZX1NZKHgpCQlNWFJfTUFTS19WQUwoeCwgMTAsIDApCisKKy8qIGJpdHMgZm9yIE1YUl9HUkFQSElDbl9EWFkgKi8KKyNkZWZpbmUgTVhSX0dSUF9EWFlfRFgoeCkJCU1YUl9NQVNLX1ZBTCh4LCAyNiwgMTYpCisjZGVmaW5lIE1YUl9HUlBfRFhZX0RZKHgpCQlNWFJfTUFTS19WQUwoeCwgMTAsIDApCisKKy8qIGJpdHMgZm9yIE1YUl9JTlRfRU4gKi8KKyNkZWZpbmUgTVhSX0lOVF9FTl9WU1lOQwkJKDEgPDwgMTEpCisjZGVmaW5lIE1YUl9JTlRfRU5fQUxMCQkJKDB4MGYgPDwgOCkKKworLyogYml0IGZvciBNWFJfSU5UX1NUQVRVUyAqLworI2RlZmluZSBNWFJfSU5UX0NMRUFSX1ZTWU5DCQkoMSA8PCAxMSkKKyNkZWZpbmUgTVhSX0lOVF9TVEFUVVNfVlNZTkMJCSgxIDw8IDApCisKKy8qIGJpdCBmb3IgTVhSX0xBWUVSX0NGRyAqLworI2RlZmluZSBNWFJfTEFZRVJfQ0ZHX0dSUDFfVkFMKHgpCU1YUl9NQVNLX1ZBTCh4LCAxMSwgOCkKKyNkZWZpbmUgTVhSX0xBWUVSX0NGR19HUlAwX1ZBTCh4KQlNWFJfTUFTS19WQUwoeCwgNywgNCkKKyNkZWZpbmUgTVhSX0xBWUVSX0NGR19WUF9WQUwoeCkJCU1YUl9NQVNLX1ZBTCh4LCAzLCAwKQorCisjZW5kaWYgLyogU0FNU1VOR19SRUdTX01JWEVSX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1zZG8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L3JlZ3Mtc2RvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3YzJiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L3JlZ3Mtc2RvLmgKQEAgLTAsMCArMSw2MyBAQAorLyogZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy1zZG8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTRE8gcmVnaXN0ZXIgZGVzY3JpcHRpb24gZmlsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBTQU1TVU5HX1JFR1NfU0RPX0gKKyNkZWZpbmUgU0FNU1VOR19SRUdTX1NET19ICisKKy8qCisgKiBSZWdpc3RlciBwYXJ0CisgKi8KKworI2RlZmluZSBTRE9fQ0xLQ09OCQkJMHgwMDAwCisjZGVmaW5lIFNET19DT05GSUcJCQkweDAwMDgKKyNkZWZpbmUgU0RPX1ZCSQkJCQkweDAwMTQKKyNkZWZpbmUgU0RPX0RBQwkJCQkweDAwM0MKKyNkZWZpbmUgU0RPX0NDQ09OCQkJMHgwMTgwCisjZGVmaW5lIFNET19JUlEJCQkJMHgwMjgwCisjZGVmaW5lIFNET19JUlFNQVNLCQkJMHgwMjg0CisjZGVmaW5lIFNET19WRVJTSU9OCQkJMHgwM0Q4CisKKy8qCisgKiBCaXQgZGVmaW5pdGlvbiBwYXJ0CisgKi8KKworLyogU0RPIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKFNET19DTEtDT04pICovCisjZGVmaW5lIFNET19UVk9VVF9TV19SRVNFVAkJKDEgPDwgNCkKKyNkZWZpbmUgU0RPX1RWT1VUX0NMT0NLX1JFQURZCQkoMSA8PCAxKQorI2RlZmluZSBTRE9fVFZPVVRfQ0xPQ0tfT04JCSgxIDw8IDApCisKKy8qIFNETyBWaWRlbyBTdGFuZGFyZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChTRE9fQ09ORklHKSAqLworI2RlZmluZSBTRE9fUFJPR1JFU1NJVkUJCQkoMSA8PCA0KQorI2RlZmluZSBTRE9fTlRTQ19NCQkJMAorI2RlZmluZSBTRE9fUEFMX00JCQkxCisjZGVmaW5lIFNET19QQUxfQkdISUQJCQkyCisjZGVmaW5lIFNET19QQUxfTgkJCTMKKyNkZWZpbmUgU0RPX1BBTF9OQwkJCTQKKyNkZWZpbmUgU0RPX05UU0NfNDQzCQkJOAorI2RlZmluZSBTRE9fUEFMXzYwCQkJOQorI2RlZmluZSBTRE9fU1RBTkRBUkRfTUFTSwkJMHhmCisKKy8qIFNETyBWQkkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoU0RPX1ZCSSkgKi8KKyNkZWZpbmUgU0RPX0NWQlNfV1NTX0lOUwkJKDEgPDwgMTQpCisjZGVmaW5lIFNET19DVkJTX0NMT1NFRF9DQVBUSU9OX01BU0sJKDMgPDwgMTIpCisKKy8qIFNETyBEQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoU0RPX0RBQykgKi8KKyNkZWZpbmUgU0RPX1BPV0VSX09OX0RBQwkJKDEgPDwgMCkKKworLyogU0RPIENvbG9yIENvbXBlbnNhdGlvbiBPbi9PZmYgQ29udHJvbCAoU0RPX0NDQ09OKSAqLworI2RlZmluZSBTRE9fQ09NUEVOU0FUSU9OX0JIU19BREpfT0ZGCSgxIDw8IDQpCisjZGVmaW5lIFNET19DT01QRU5TQVRJT05fQ1ZCU19DT01QX09GRgkoMSA8PCAwKQorCisvKiBTRE8gSW50ZXJydXB0IFJlcXVlc3QgUmVnaXN0ZXIgKFNET19JUlEpICovCisjZGVmaW5lIFNET19WU1lOQ19JUlFfUEVORAkJKDEgPDwgMCkKKworI2VuZGlmIC8qIFNBTVNVTkdfUkVHU19TRE9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy12cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvcmVncy12cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjM5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC10di9yZWdzLXZwLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBWaWRlbyBwcm9jZXNzb3IgcmVnaXN0ZXIgaGVhZGVyIGZpbGUgZm9yIFNhbXN1bmcgTWl4ZXIgZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIFNBTVNVTkdfUkVHU19WUF9ICisjZGVmaW5lIFNBTVNVTkdfUkVHU19WUF9ICisKKy8qCisgKiBSZWdpc3RlciBwYXJ0CisgKi8KKworI2RlZmluZSBWUF9FTkFCTEUJCQkweDAwMDAKKyNkZWZpbmUgVlBfU1JFU0VUCQkJMHgwMDA0CisjZGVmaW5lIFZQX1NIQURPV19VUERBVEUJCTB4MDAwOAorI2RlZmluZSBWUF9GSUVMRF9JRAkJCTB4MDAwQworI2RlZmluZSBWUF9NT0RFCQkJCTB4MDAxMAorI2RlZmluZSBWUF9JTUdfU0laRV9ZCQkJMHgwMDE0CisjZGVmaW5lIFZQX0lNR19TSVpFX0MJCQkweDAwMTgKKyNkZWZpbmUgVlBfUEVSX1JBVEVfQ1RSTAkJMHgwMDFDCisjZGVmaW5lIFZQX1RPUF9ZX1BUUgkJCTB4MDAyOAorI2RlZmluZSBWUF9CT1RfWV9QVFIJCQkweDAwMkMKKyNkZWZpbmUgVlBfVE9QX0NfUFRSCQkJMHgwMDMwCisjZGVmaW5lIFZQX0JPVF9DX1BUUgkJCTB4MDAzNAorI2RlZmluZSBWUF9FTkRJQU5fTU9ERQkJCTB4MDNDQworI2RlZmluZSBWUF9TUkNfSF9QT1NJVElPTgkJMHgwMDQ0CisjZGVmaW5lIFZQX1NSQ19WX1BPU0lUSU9OCQkweDAwNDgKKyNkZWZpbmUgVlBfU1JDX1dJRFRICQkJMHgwMDRDCisjZGVmaW5lIFZQX1NSQ19IRUlHSFQJCQkweDAwNTAKKyNkZWZpbmUgVlBfRFNUX0hfUE9TSVRJT04JCTB4MDA1NAorI2RlZmluZSBWUF9EU1RfVl9QT1NJVElPTgkJMHgwMDU4CisjZGVmaW5lIFZQX0RTVF9XSURUSAkJCTB4MDA1QworI2RlZmluZSBWUF9EU1RfSEVJR0hUCQkJMHgwMDYwCisjZGVmaW5lIFZQX0hfUkFUSU8JCQkweDAwNjQKKyNkZWZpbmUgVlBfVl9SQVRJTwkJCTB4MDA2OAorI2RlZmluZSBWUF9QT0xZOF9ZMF9MTAkJCTB4MDA2QworI2RlZmluZSBWUF9QT0xZNF9ZMF9MTAkJCTB4MDBFQworI2RlZmluZSBWUF9QT0xZNF9DMF9MTAkJCTB4MDEyQworCisvKgorICogQml0IGRlZmluaXRpb24gcGFydAorICovCisKKy8qIGdlbmVyYXRlcyBtYXNrIGZvciByYW5nZSBvZiBiaXRzICovCisKKyNkZWZpbmUgVlBfTUFTSyhoaWdoX2JpdCwgbG93X2JpdCkgXAorCSgoKDIgPDwgKChoaWdoX2JpdCkgLSAobG93X2JpdCkpKSAtIDEpIDw8IChsb3dfYml0KSkKKworI2RlZmluZSBWUF9NQVNLX1ZBTCh2YWwsIGhpZ2hfYml0LCBsb3dfYml0KSBcCisJKCgodmFsKSA8PCAobG93X2JpdCkpICYgVlBfTUFTSyhoaWdoX2JpdCwgbG93X2JpdCkpCisKKyAvKiBWUF9FTkFCTEUgKi8KKyNkZWZpbmUgVlBfRU5BQkxFX09OCQkJKDEgPDwgMCkKKworLyogVlBfU1JFU0VUICovCisjZGVmaW5lIFZQX1NSRVNFVF9QUk9DRVNTSU5HCQkoMSA8PCAwKQorCisvKiBWUF9TSEFET1dfVVBEQVRFICovCisjZGVmaW5lIFZQX1NIQURPV19VUERBVEVfRU5BQkxFCQkoMSA8PCAwKQorCisvKiBWUF9NT0RFICovCisjZGVmaW5lIFZQX01PREVfTlYxMgkJCSgwIDw8IDYpCisjZGVmaW5lIFZQX01PREVfTlYyMQkJCSgxIDw8IDYpCisjZGVmaW5lIFZQX01PREVfTElORV9TS0lQCQkoMSA8PCA1KQorI2RlZmluZSBWUF9NT0RFX01FTV9MSU5FQVIJCSgwIDw8IDQpCisjZGVmaW5lIFZQX01PREVfTUVNX1RJTEVECQkoMSA8PCA0KQorI2RlZmluZSBWUF9NT0RFX0ZNVF9NQVNLCQkoNSA8PCA0KQorI2RlZmluZSBWUF9NT0RFX0ZJRUxEX0lEX0FVVE9fVE9HR0xJTkcJKDEgPDwgMikKKyNkZWZpbmUgVlBfTU9ERV8yRF9JUEMJCQkoMSA8PCAxKQorCisvKiBWUF9JTUdfU0laRV9ZICovCisvKiBWUF9JTUdfU0laRV9DICovCisjZGVmaW5lIFZQX0lNR19IU0laRSh4KQkJCVZQX01BU0tfVkFMKHgsIDI5LCAxNikKKyNkZWZpbmUgVlBfSU1HX1ZTSVpFKHgpCQkJVlBfTUFTS19WQUwoeCwgMTMsIDApCisKKy8qIFZQX1NSQ19IX1BPU0lUSU9OICovCisjZGVmaW5lIFZQX1NSQ19IX1BPU0lUSU9OX1ZBTCh4KQlWUF9NQVNLX1ZBTCh4LCAxNCwgNCkKKworLyogVlBfRU5ESUFOX01PREUgKi8KKyNkZWZpbmUgVlBfRU5ESUFOX01PREVfTElUVExFCQkoMSA8PCAwKQorCisjZW5kaWYgLyogU0FNU1VOR19SRUdTX1ZQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L3Nkb19kcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLXR2L3Nkb19kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRkZDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtdHYvc2RvX2Rydi5jCkBAIC0wLDAgKzEsNDc5IEBACisvKgorICogU2Ftc3VuZyBTdGFuZGFyZCBEZWZpbml0aW9uIE91dHB1dCAoU0RPKSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRvbWFzeiBTdGFuaXNsYXdza2ksIDx0LnN0YW5pc2xhd3NAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGlhdGlvbi4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwKKyAqIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorCisjaW5jbHVkZSAicmVncy1zZG8uaCIKKworTU9EVUxFX0FVVEhPUigiVG9tYXN6IFN0YW5pc2xhd3NraSwgPHQuc3RhbmlzbGF3c0BzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTdGFuZGFyZCBEZWZpbml0aW9uIE91dHB1dCAoU0RPKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIFNET19ERUZBVUxUX1NURAlWNEwyX1NURF9QQUwKKworc3RydWN0IHNkb19mb3JtYXQgeworCXY0bDJfc3RkX2lkIGlkOworCS8qIGFsbCBtb2RlcyBhcmUgNzIwIHBpeGVscyB3aWRlICovCisJdW5zaWduZWQgaW50IGhlaWdodDsKKwl1bnNpZ25lZCBpbnQgY29va2llOworfTsKKworc3RydWN0IHNkb19kZXZpY2UgeworCS8qKiBwb2ludGVyIHRvIGRldmljZSBwYXJlbnQgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJLyoqIGJhc2UgYWRkcmVzcyBvZiBTRE8gcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtICpyZWdzOworCS8qKiBTRE8gaW50ZXJydXB0ICovCisJdW5zaWduZWQgaW50IGlycTsKKwkvKiogREFDIHNvdXJjZSBjbG9jayAqLworCXN0cnVjdCBjbGsgKnNjbGtfZGFjOworCS8qKiBEQUMgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpkYWM7CisJLyoqIERBQyBwaHlzaWNhbCBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgY2xrICpkYWNwaHk7CisJLyoqIGNsb2NrIGZvciBjb250cm9sIG9mIFZQTEwgKi8KKwlzdHJ1Y3QgY2xrICpmb3V0X3ZwbGw7CisJLyoqIHJlZ3VsYXRvciBmb3IgU0RPIElQIHBvd2VyICovCisJc3RydWN0IHJlZ3VsYXRvciAqdmRhYzsKKwkvKiogcmVndWxhdG9yIGZvciBTRE8gcGx1ZyBkZXRlY3Rpb24gKi8KKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGV0OworCS8qKiBzdWJkZXYgdXNlZCBhcyBkZXZpY2UgaW50ZXJmYWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCS8qKiBjdXJyZW50IGZvcm1hdCAqLworCWNvbnN0IHN0cnVjdCBzZG9fZm9ybWF0ICpmbXQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZG9fZGV2aWNlICpzZF90b19zZGV2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNkb19kZXZpY2UsIHNkKTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBzZG9fd3JpdGVfbWFzayhzdHJ1Y3Qgc2RvX2RldmljZSAqc2RldiwgdTMyIHJlZ19pZCwgdTMyIHZhbHVlLCB1MzIgbWFzaykKK3sKKwl1MzIgb2xkID0gcmVhZGwoc2Rldi0+cmVncyArIHJlZ19pZCk7CisJdmFsdWUgPSAodmFsdWUgJiBtYXNrKSB8IChvbGQgJiB+bWFzayk7CisJd3JpdGVsKHZhbHVlLCBzZGV2LT5yZWdzICsgcmVnX2lkKTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBzZG9fd3JpdGUoc3RydWN0IHNkb19kZXZpY2UgKnNkZXYsIHUzMiByZWdfaWQsIHUzMiB2YWx1ZSkKK3sKKwl3cml0ZWwodmFsdWUsIHNkZXYtPnJlZ3MgKyByZWdfaWQpOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgc2RvX3JlYWQoc3RydWN0IHNkb19kZXZpY2UgKnNkZXYsIHUzMiByZWdfaWQpCit7CisJcmV0dXJuIHJlYWRsKHNkZXYtPnJlZ3MgKyByZWdfaWQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2RvX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9kYXRhKQoreworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gZGV2X2RhdGE7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwlzZG9fd3JpdGVfbWFzayhzZGV2LCBTRE9fSVJRLCB+MCwgU0RPX1ZTWU5DX0lSUV9QRU5EKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkb19yZWdfZGVidWcoc3RydWN0IHNkb19kZXZpY2UgKnNkZXYpCit7CisjZGVmaW5lIERCR1JFRyhyZWdfaWQpIFwKKwlkZXZfaW5mbyhzZGV2LT5kZXYsICNyZWdfaWQgIiA9ICUwOHhcbiIsIFwKKwkJc2RvX3JlYWQoc2RldiwgcmVnX2lkKSkKKworCURCR1JFRyhTRE9fQ0xLQ09OKTsKKwlEQkdSRUcoU0RPX0NPTkZJRyk7CisJREJHUkVHKFNET19WQkkpOworCURCR1JFRyhTRE9fREFDKTsKKwlEQkdSRUcoU0RPX0lSUSk7CisJREJHUkVHKFNET19JUlFNQVNLKTsKKwlEQkdSRUcoU0RPX1ZFUlNJT04pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkb19mb3JtYXQgc2RvX2Zvcm1hdFtdID0geworCXsgVjRMMl9TVERfUEFMX04sCS5oZWlnaHQgPSA1NzYsIC5jb29raWUgPSBTRE9fUEFMX04gfSwKKwl7IFY0TDJfU1REX1BBTF9OYywJLmhlaWdodCA9IDU3NiwgLmNvb2tpZSA9IFNET19QQUxfTkMgfSwKKwl7IFY0TDJfU1REX1BBTF9NLAkuaGVpZ2h0ID0gNDgwLCAuY29va2llID0gU0RPX1BBTF9NIH0sCisJeyBWNEwyX1NURF9QQUxfNjAsCS5oZWlnaHQgPSA0ODAsIC5jb29raWUgPSBTRE9fUEFMXzYwIH0sCisJeyBWNEwyX1NURF9OVFNDXzQ0MywJLmhlaWdodCA9IDQ4MCwgLmNvb2tpZSA9IFNET19OVFNDXzQ0MyB9LAorCXsgVjRMMl9TVERfUEFMLAkJLmhlaWdodCA9IDU3NiwgLmNvb2tpZSA9IFNET19QQUxfQkdISUQgfSwKKwl7IFY0TDJfU1REX05UU0NfTSwJLmhlaWdodCA9IDQ4MCwgLmNvb2tpZSA9IFNET19OVFNDX00gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RvX2Zvcm1hdCAqc2RvX2ZpbmRfZm9ybWF0KHY0bDJfc3RkX2lkIGlkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkb19mb3JtYXQpOyArK2kpCisJCWlmIChzZG9fZm9ybWF0W2ldLmlkICYgaWQpCisJCQlyZXR1cm4gJnNkb19mb3JtYXRbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc2RvX2dfdHZub3Jtc19vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwkqc3RkID0gVjRMMl9TVERfTlRTQ19NIHwgVjRMMl9TVERfUEFMX00gfCBWNEwyX1NURF9QQUwgfAorCQlWNEwyX1NURF9QQUxfTiB8IFY0TDJfU1REX1BBTF9OYyB8CisJCVY0TDJfU1REX05UU0NfNDQzIHwgVjRMMl9TVERfUEFMXzYwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkb19zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gc2RfdG9fc2RldihzZCk7CisJY29uc3Qgc3RydWN0IHNkb19mb3JtYXQgKmZtdDsKKwlmbXQgPSBzZG9fZmluZF9mb3JtYXQoc3RkKTsKKwlpZiAoZm10ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXNkZXYtPmZtdCA9IGZtdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZG9fZ19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJKnN0ZCA9IHNkX3RvX3NkZXYoc2QpLT5mbXQtPmlkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkb19nX21idXNfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQoreworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gc2RfdG9fc2RldihzZCk7CisKKwlpZiAoIXNkZXYtPmZtdCkKKwkJcmV0dXJuIC1FTlhJTzsKKwkvKiBhbGwgbW9kZXMgYXJlIDcyMCBwaXhlbHMgd2lkZSAqLworCWZtdC0+d2lkdGggPSA3MjA7CisJZm10LT5oZWlnaHQgPSBzZGV2LT5mbXQtPmhlaWdodDsKKwlmbXQtPmNvZGUgPSBWNEwyX01CVVNfRk1UX0ZJWEVEOworCWZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RvX3NfcG93ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQoreworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gc2RfdG9fc2RldihzZCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlkZXZfaW5mbyhkZXYsICJzZG9fc19wb3dlciglZClcbiIsIG9uKTsKKworCWlmIChvbikKKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCWVsc2UKKwkJcmV0ID0gcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOworCisJLyogb25seSB2YWx1ZXMgPCAwIGluZGljYXRlIGVycm9ycyAqLworCXJldHVybiBJU19FUlJfVkFMVUUocmV0KSA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2RvX3N0cmVhbW9uKHN0cnVjdCBzZG9fZGV2aWNlICpzZGV2KQoreworCS8qIHNldCBwcm9wZXIgY2xvY2sgZm9yIFRpbWluZyBHZW5lcmF0b3IgKi8KKwljbGtfc2V0X3JhdGUoc2Rldi0+Zm91dF92cGxsLCA1NDAwMDAwMCk7CisJZGV2X2luZm8oc2Rldi0+ZGV2LCAiZm91dF92cGxsLnJhdGUgPSAlbHVcbiIsCisJY2xrX2dldF9yYXRlKHNkZXYtPmZvdXRfdnBsbCkpOworCS8qIGVuYWJsZSBjbG9jayBpbiBTRE8gKi8KKwlzZG9fd3JpdGVfbWFzayhzZGV2LCBTRE9fQ0xLQ09OLCB+MCwgU0RPX1RWT1VUX0NMT0NLX09OKTsKKwljbGtfZW5hYmxlKHNkZXYtPmRhY3BoeSk7CisJLyogZW5hYmxlIERBQyAqLworCXNkb193cml0ZV9tYXNrKHNkZXYsIFNET19EQUMsIH4wLCBTRE9fUE9XRVJfT05fREFDKTsKKwlzZG9fcmVnX2RlYnVnKHNkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkb19zdHJlYW1vZmYoc3RydWN0IHNkb19kZXZpY2UgKnNkZXYpCit7CisJaW50IHRyaWVzOworCisJc2RvX3dyaXRlX21hc2soc2RldiwgU0RPX0RBQywgMCwgU0RPX1BPV0VSX09OX0RBQyk7CisJY2xrX2Rpc2FibGUoc2Rldi0+ZGFjcGh5KTsKKwlzZG9fd3JpdGVfbWFzayhzZGV2LCBTRE9fQ0xLQ09OLCAwLCBTRE9fVFZPVVRfQ0xPQ0tfT04pOworCWZvciAodHJpZXMgPSAxMDA7IHRyaWVzOyAtLXRyaWVzKSB7CisJCWlmIChzZG9fcmVhZChzZGV2LCBTRE9fQ0xLQ09OKSAmIFNET19UVk9VVF9DTE9DS19SRUFEWSkKKwkJCWJyZWFrOworCQltZGVsYXkoMSk7CisJfQorCWlmICh0cmllcyA9PSAwKQorCQlkZXZfZXJyKHNkZXYtPmRldiwgImZhaWxlZCB0byBzdG9wIHN0cmVhbWluZ1xuIik7CisJcmV0dXJuIHRyaWVzID8gMCA6IC1FSU87Cit9CisKK3N0YXRpYyBpbnQgc2RvX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBvbikKK3sKKwlzdHJ1Y3Qgc2RvX2RldmljZSAqc2RldiA9IHNkX3RvX3NkZXYoc2QpOworCXJldHVybiBvbiA/IHNkb19zdHJlYW1vbihzZGV2KSA6IHNkb19zdHJlYW1vZmYoc2Rldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2RvX3NkX2NvcmVfb3BzID0geworCS5zX3Bvd2VyID0gc2RvX3NfcG93ZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzZG9fc2RfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBzZG9fc19zdGRfb3V0cHV0LAorCS5nX3N0ZF9vdXRwdXQgPSBzZG9fZ19zdGRfb3V0cHV0LAorCS5nX3R2bm9ybXNfb3V0cHV0ID0gc2RvX2dfdHZub3Jtc19vdXRwdXQsCisJLmdfbWJ1c19mbXQgPSBzZG9fZ19tYnVzX2ZtdCwKKwkuc19zdHJlYW0gPSBzZG9fc19zdHJlYW0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzZG9fc2Rfb3BzID0geworCS5jb3JlID0gJnNkb19zZF9jb3JlX29wcywKKwkudmlkZW8gPSAmc2RvX3NkX3ZpZGVvX29wcywKK307CisKK3N0YXRpYyBpbnQgc2RvX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gc2RfdG9fc2RldihzZCk7CisKKwlkZXZfaW5mbyhkZXYsICJzdXNwZW5kXG4iKTsKKwlyZWd1bGF0b3JfZGlzYWJsZShzZGV2LT52ZGV0KTsKKwlyZWd1bGF0b3JfZGlzYWJsZShzZGV2LT52ZGFjKTsKKwljbGtfZGlzYWJsZShzZGV2LT5zY2xrX2RhYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RvX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNkb19kZXZpY2UgKnNkZXYgPSBzZF90b19zZGV2KHNkKTsKKworCWRldl9pbmZvKGRldiwgInJlc3VtZVxuIik7CisJY2xrX2VuYWJsZShzZGV2LT5zY2xrX2RhYyk7CisJcmVndWxhdG9yX2VuYWJsZShzZGV2LT52ZGFjKTsKKwlyZWd1bGF0b3JfZW5hYmxlKHNkZXYtPnZkZXQpOworCisJLyogc29mdHdhcmUgcmVzZXQgKi8KKwlzZG9fd3JpdGVfbWFzayhzZGV2LCBTRE9fQ0xLQ09OLCB+MCwgU0RPX1RWT1VUX1NXX1JFU0VUKTsKKwltZGVsYXkoMTApOworCXNkb193cml0ZV9tYXNrKHNkZXYsIFNET19DTEtDT04sIDAsIFNET19UVk9VVF9TV19SRVNFVCk7CisKKwkvKiBzZXR0aW5nIFRWIG1vZGUgKi8KKwlzZG9fd3JpdGVfbWFzayhzZGV2LCBTRE9fQ09ORklHLCBzZGV2LT5mbXQtPmNvb2tpZSwgU0RPX1NUQU5EQVJEX01BU0spOworCS8qIFhYWDogZm9yY2luZyBpbnRlcmxhY2VkIG1vZGUgdXNpbmcgdW5kb2N1bWVudGVkIGJpdCAqLworCXNkb193cml0ZV9tYXNrKHNkZXYsIFNET19DT05GSUcsIDAsIFNET19QUk9HUkVTU0lWRSk7CisJLyogdHVybiBhbGwgVkJJIG9mZiAqLworCXNkb193cml0ZV9tYXNrKHNkZXYsIFNET19WQkksIDAsIFNET19DVkJTX1dTU19JTlMgfAorCQlTRE9fQ1ZCU19DTE9TRURfQ0FQVElPTl9NQVNLKTsKKwkvKiB0dXJuIGFsbCBwb3N0IHByb2Nlc3Npbmcgb2ZmICovCisJc2RvX3dyaXRlX21hc2soc2RldiwgU0RPX0NDQ09OLCB+MCwgU0RPX0NPTVBFTlNBVElPTl9CSFNfQURKX09GRiB8CisJCVNET19DT01QRU5TQVRJT05fQ1ZCU19DT01QX09GRik7CisJc2RvX3JlZ19kZWJ1ZyhzZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNkb19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IHNkb19ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lCSA9IHNkb19ydW50aW1lX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHNkb19kZXZpY2UgKnNkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGNsayAqc2Nsa192cGxsOworCisJZGV2X2luZm8oZGV2LCAicHJvYmUgc3RhcnRcbiIpOworCXNkZXYgPSBremFsbG9jKHNpemVvZiAqc2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoZGV2LCAibm90IGVub3VnaCBtZW1vcnkuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlzZGV2LT5kZXYgPSBkZXY7CisKKwkvKiBtYXBwaW5nIHJlZ2lzdGVycyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZ2V0IG1lbW9yeSByZXNvdXJjZSBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfc2RldjsKKwl9CisKKwlzZGV2LT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChzZGV2LT5yZWdzID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJyZWdpc3RlciBtYXBwaW5nIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9zZGV2OworCX0KKworCS8qIGFjcXVpcmluZyBpbnRlcnJ1cHQgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImdldCBpbnRlcnJ1cHQgcmVzb3VyY2UgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX3JlZ3M7CisJfQorCXJldCA9IHJlcXVlc3RfaXJxKHJlcy0+c3RhcnQsIHNkb19pcnFfaGFuZGxlciwgMCwgInM1cC1zZG8iLCBzZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAicmVxdWVzdCBpbnRlcnJ1cHQgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbF9yZWdzOworCX0KKwlzZGV2LT5pcnEgPSByZXMtPnN0YXJ0OworCisJLyogYWNxdWlyZSBjbG9ja3MgKi8KKwlzZGV2LT5zY2xrX2RhYyA9IGNsa19nZXQoZGV2LCAic2Nsa19kYWMiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoc2Rldi0+c2Nsa19kYWMpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnc2Nsa19kYWMnXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfaXJxOworCX0KKwlzZGV2LT5kYWMgPSBjbGtfZ2V0KGRldiwgImRhYyIpOworCWlmIChJU19FUlJfT1JfTlVMTChzZGV2LT5kYWMpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnZGFjJ1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX3NjbGtfZGFjOworCX0KKwlzZGV2LT5kYWNwaHkgPSBjbGtfZ2V0KGRldiwgImRhY3BoeSIpOworCWlmIChJU19FUlJfT1JfTlVMTChzZGV2LT5kYWNwaHkpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnZGFjcGh5J1xuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmYWlsX2RhYzsKKwl9CisJc2Nsa192cGxsID0gY2xrX2dldChkZXYsICJzY2xrX3ZwbGwiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoc2Nsa192cGxsKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2xvY2sgJ3NjbGtfdnBsbCdcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9kYWNwaHk7CisJfQorCWNsa19zZXRfcGFyZW50KHNkZXYtPnNjbGtfZGFjLCBzY2xrX3ZwbGwpOworCWNsa19wdXQoc2Nsa192cGxsKTsKKwlzZGV2LT5mb3V0X3ZwbGwgPSBjbGtfZ2V0KGRldiwgImZvdXRfdnBsbCIpOworCWlmIChJU19FUlJfT1JfTlVMTChzZGV2LT5mb3V0X3ZwbGwpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayAnZm91dF92cGxsJ1xuIik7CisJCWdvdG8gZmFpbF9kYWNwaHk7CisJfQorCWRldl9pbmZvKGRldiwgImZvdXRfdnBsbC5yYXRlID0gJWx1XG4iLCBjbGtfZ2V0X3JhdGUoc2Nsa192cGxsKSk7CisKKwkvKiBhY3F1aXJlIHJlZ3VsYXRvciAqLworCXNkZXYtPnZkYWMgPSByZWd1bGF0b3JfZ2V0KGRldiwgInZkZDMzYV9kYWMiKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoc2Rldi0+dmRhYykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvciAndmRhYydcbiIpOworCQlnb3RvIGZhaWxfZm91dF92cGxsOworCX0KKwlzZGV2LT52ZGV0ID0gcmVndWxhdG9yX2dldChkZXYsICJ2ZGV0Iik7CisJaWYgKElTX0VSUl9PUl9OVUxMKHNkZXYtPnZkZXQpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3IgJ3ZkZXQnXG4iKTsKKwkJZ290byBmYWlsX3ZkYWM7CisJfQorCisJLyogZW5hYmxlIGdhdGUgZm9yIGRhYyBjbG9jaywgYmVjYXVzZSBtaXhlciB1c2VzIGl0ICovCisJY2xrX2VuYWJsZShzZGV2LT5kYWMpOworCisJLyogY29uZmlndXJlIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJLyogY29uZmlndXJhdGlvbiBvZiBpbnRlcmZhY2Ugc3ViZGV2aWNlICovCisJdjRsMl9zdWJkZXZfaW5pdCgmc2Rldi0+c2QsICZzZG9fc2Rfb3BzKTsKKwlzZGV2LT5zZC5vd25lciA9IFRISVNfTU9EVUxFOworCXN0cmxjcHkoc2Rldi0+c2QubmFtZSwgInM1cC1zZG8iLCBzaXplb2Ygc2Rldi0+c2QubmFtZSk7CisKKwkvKiBzZXQgZGVmYXVsdCBmb3JtYXQgKi8KKwlzZGV2LT5mbXQgPSBzZG9fZmluZF9mb3JtYXQoU0RPX0RFRkFVTFRfU1REKTsKKwlCVUdfT04oc2Rldi0+Zm10ID09IE5VTEwpOworCisJLyoga2VlcGluZyBzdWJkZXYgaW4gZGV2aWNlJ3MgcHJpdmF0ZSBmb3IgdXNlIGJ5IG90aGVyIGRyaXZlcnMgKi8KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCAmc2Rldi0+c2QpOworCisJZGV2X2luZm8oZGV2LCAicHJvYmUgc3VjY2VlZGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZmFpbF92ZGFjOgorCXJlZ3VsYXRvcl9wdXQoc2Rldi0+dmRhYyk7CitmYWlsX2ZvdXRfdnBsbDoKKwljbGtfcHV0KHNkZXYtPmZvdXRfdnBsbCk7CitmYWlsX2RhY3BoeToKKwljbGtfcHV0KHNkZXYtPmRhY3BoeSk7CitmYWlsX2RhYzoKKwljbGtfcHV0KHNkZXYtPmRhYyk7CitmYWlsX3NjbGtfZGFjOgorCWNsa19wdXQoc2Rldi0+c2Nsa19kYWMpOworZmFpbF9pcnE6CisJZnJlZV9pcnEoc2Rldi0+aXJxLCBzZGV2KTsKK2ZhaWxfcmVnczoKKwlpb3VubWFwKHNkZXYtPnJlZ3MpOworZmFpbF9zZGV2OgorCWtmcmVlKHNkZXYpOworZmFpbDoKKwlkZXZfaW5mbyhkZXYsICJwcm9iZSBmYWlsZWRcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNkb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBzZG9fZGV2aWNlICpzZGV2ID0gc2RfdG9fc2RldihzZCk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJY2xrX2Rpc2FibGUoc2Rldi0+ZGFjKTsKKwlyZWd1bGF0b3JfcHV0KHNkZXYtPnZkZXQpOworCXJlZ3VsYXRvcl9wdXQoc2Rldi0+dmRhYyk7CisJY2xrX3B1dChzZGV2LT5mb3V0X3ZwbGwpOworCWNsa19wdXQoc2Rldi0+ZGFjcGh5KTsKKwljbGtfcHV0KHNkZXYtPmRhYyk7CisJY2xrX3B1dChzZGV2LT5zY2xrX2RhYyk7CisJZnJlZV9pcnEoc2Rldi0+aXJxLCBzZGV2KTsKKwlpb3VubWFwKHNkZXYtPnJlZ3MpOworCWtmcmVlKHNkZXYpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92ZSBzdWNjZXNzZnVsXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RvX2RyaXZlciBfX3JlZmRhdGEgPSB7CisJLnByb2JlID0gc2RvX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzZG9fcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzNXAtc2RvIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZzZG9fcG1fb3BzLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkJIlNhbXN1bmcgU3RhbmRhcmQgRGVmaW5pdGlvbiBPdXRwdXQgKFNETykgZHJpdmVyLCAiCisJCSIoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuXG4iOworCXByaW50ayhiYW5uZXIpOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZG9fZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIlNETyBwbGF0Zm9ybSBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChzZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZG9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZG9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNkb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggMGRiOTA5Mi4uZjJhZTQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTc1Nyw4ICs3NTcsOCBAQAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0NIUk9NQV9BR0M6CiAJCS8qIGNocm9tYSBnYWluIGNsdXN0ZXIgKi8KLQkJaWYgKHN0YXRlLT5hZ2MtPmN1ci52YWwpCi0JCQlzdGF0ZS0+Z2Fpbi0+Y3VyLnZhbCA9CisJCWlmIChzdGF0ZS0+YWdjLT52YWwpCisJCQlzdGF0ZS0+Z2Fpbi0+dmFsID0KIAkJCQlzYWE3MTF4X3JlYWQoc2QsIFJfMEZfQ0hST01BX0dBSU5fQ05UTCkgJiAweDdmOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCBlMjA2MmIyLi4wZjlmYjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTQ5NTEsOCArNDk1MSw5IEBACiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSAweDYxLAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS5pbnB1dHMgPSB7ewogCQkJLm5hbWUgICA9IG5hbWVfdHYsCiAJCQkudm11eCAgID0gMywKQEAgLTY5OTIsNiArNjk5MywxMSBAQAogCQkJbXNsZWVwKDEwKTsKIAkJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAxOCwgMSk7CiAJCWJyZWFrOworCQljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1Q3NTA6CisJCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjAsIDApOworCQkJbXNsZWVwKDEwKTsKKwkJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMCwgMSk7CisJCWJyZWFrOwogCQl9CiAJcmV0dXJuIDA7CiAJfQpAQCAtNzQ1MSw2ICs3NDU3LDExIEBACiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDBlMDUwMDAwLCAweDBjMDUwMDAwKTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MGUwNTAwMDAsIDB4MGMwNTAwMDApOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX1Q3NTA6CisJCS8qIGVuYWJsZSB0aGUgYW5hbG9nIHR1bmVyICovCisJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggZjliZTczNy4uY2E2NWNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMzksNiArMzksOCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIHNhYTcxMzAvMzQgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFNBQTcxMzRfVkVSU0lPTik7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEzMzIsMTQgKzEzMzQsOCBAQAogc3RhdGljIGludCBfX2luaXQgc2FhNzEzNF9pbml0KHZvaWQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnNhYTcxMzRfZGV2bGlzdCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAic2FhNzEzMC8zNDogdjRsMiBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCi0JICAgICAgIChTQUE3MTM0X1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweGZmLAotCSAgICAgICAoU0FBNzEzNF9WRVJTSU9OX0NPREUgPj4gIDgpICYgMHhmZiwKLQkgICAgICAgU0FBNzEzNF9WRVJTSU9OX0NPREUgJiAweGZmKTsKLSNpZmRlZiBTTkFQU0hPVAotCXByaW50ayhLRVJOX0lORk8gInNhYTcxMzAvMzQ6IHNuYXBzaG90IGRhdGUgJTA0ZC0lMDJkLSUwMmRcbiIsCi0JICAgICAgIFNOQVBTSE9ULzEwMDAwLCAoU05BUFNIT1QvMTAwKSUxMDAsIFNOQVBTSE9UJTEwMCk7Ci0jZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJzYWE3MTMwLzM0OiB2NGwyIGRyaXZlciB2ZXJzaW9uICVzIGxvYWRlZFxuIiwKKwkgICAgICAgU0FBNzEzNF9WRVJTSU9OKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2FhNzEzNF9wY2lfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCA5OTZhMjA2Li4xZTRlZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImxnczhneHguaCIKIAogI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJxdDEwMTAuaCIKIAogI2luY2x1ZGUgInpsMTAwMzYuaCIKICNpbmNsdWRlICJ6bDEwMDM5LmgiCkBAIC05MzksNiArOTQwLDE4IEBACiAJLmRpc2FibGVfaTJjX2dhdGVfY3RybCA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIHZpZGVvbWF0ZV90NzUwX3psMTAzNTNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgICAgICAgPSAweDBmLAorCS5ub190dW5lciAgICAgICAgICAgICAgPSAxLAorCS5wYXJhbGxlbF90cyAgICAgICAgICAgPSAxLAorCS5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBxdDEwMTBfY29uZmlnIHZpZGVvbWF0ZV90NzUwX3F0MTAxMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MgorfTsKKworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIHRkYTEwMDg2IGJhc2VkIERWQi1TIGNhcmRzLCBoZWxwZXIgZnVuY3Rpb25zCiAgKi8KQEAgLTE2NTAsNiArMTY2MywxOCBAQAogCQkJCQlfX2Z1bmNfXyk7CiAKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UNzUwOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJCQkmdmlkZW9tYXRlX3Q3NTBfemwxMDM1M19jb25maWcsCisJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLAorCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmRldi0+aTJjX2FkYXAsCisJCQkJCSZ2aWRlb21hdGVfdDc1MF9xdDEwMTBfY29uZmlnKSA9PSBOVUxMKQorCQkJCXdwcmludGsoImVycm9yIGF0dGFjaGluZyBRVDEwMTBcbiIpOworCQl9CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9aT0xJRF9IWUJSSURfUENJOgogCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAogCQkJCQkgICAgICAgJnpvbGlkX3RkYTEwMDQ4X2NvbmZpZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwppbmRleCAxODI5NGRiLi5kZGUzNjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCkBAIC0xNzIsNyArMTcyLDYgQEAKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwKIAkJc2l6ZW9mKGNhcC0+Y2FyZCkpOwogCXNwcmludGYoY2FwLT5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7Ci0JY2FwLT52ZXJzaW9uID0gU0FBNzEzNF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPQogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IDc3NmJhMmQuLjljZjc5MTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTE4MTAsNyArMTgxMCw2IEBACiAJc3RybGNweShjYXAtPmNhcmQsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsCiAJCXNpemVvZihjYXAtPmNhcmQpKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBjaSkpOwotCWNhcC0+dmVyc2lvbiA9IFNBQTcxMzRfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0KIAkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKQEAgLTIzMDcsNyArMjMwNiw2IEBACiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAic2FhNzEzNCIpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKLQljYXAtPnZlcnNpb24gPSBTQUE3MTM0X1ZFUlNJT05fQ09ERTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggMjhlYjEwMy4uYmM4ZDZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0xOSw4ICsxOSw3IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNkZWZpbmUgU0FBNzEzNF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMiwgMTYpCisjZGVmaW5lIFNBQTcxMzRfVkVSU0lPTiAiMCwgMiwgMTciCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWVuY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LWVuY29kZXIuYwppbmRleCA0MDAzNjQ1Li4yZmQzOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtZW5jb2Rlci5jCkBAIC0xMjQ2LDcgKzEyNDYsNiBAQAogCXN0cnVjdCBzYWE3MTY0X2VuY29kZXJfZmggKmZoID0KIAkJKHN0cnVjdCBzYWE3MTY0X2VuY29kZXJfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxNjRfcG9ydCAqcG9ydCA9IGZoLT5wb3J0OwotCXN0cnVjdCBzYWE3MTY0X3VzZXJfYnVmZmVyICp1YnVmOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCXBvcnQtPmxhc3RfcG9sbF9tc2Vjc19kaWZmID0gcG9ydC0+bGFzdF9wb2xsX21zZWNzOwpAQCAtMTI3OCwxMCArMTI3Nyw3IEBACiAJfQogCiAJLyogUHVsbCB0aGUgZmlyc3QgYnVmZmVyIGZyb20gdGhlIHVzZWQgbGlzdCAqLwotCXVidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwb3J0LT5saXN0X2J1Zl91c2VkLmxpc3QsCi0JCXN0cnVjdCBzYWE3MTY0X3VzZXJfYnVmZmVyLCBsaXN0KTsKLQotCWlmICh1YnVmKQorCWlmICghbGlzdF9lbXB0eSgmcG9ydC0+bGlzdF9idWZfdXNlZC5saXN0KSkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCiAJcmV0dXJuIG1hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXZiaS5jCmluZGV4IGJjMWZjZWQuLmUyZTAzNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LXZiaS5jCkBAIC0xMTkyLDcgKzExOTIsNiBAQAogewogCXN0cnVjdCBzYWE3MTY0X3ZiaV9maCAqZmggPSAoc3RydWN0IHNhYTcxNjRfdmJpX2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTY0X3BvcnQgKnBvcnQgPSBmaC0+cG9ydDsKLQlzdHJ1Y3Qgc2FhNzE2NF91c2VyX2J1ZmZlciAqdWJ1ZjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKIAlwb3J0LT5sYXN0X3BvbGxfbXNlY3NfZGlmZiA9IHBvcnQtPmxhc3RfcG9sbF9tc2VjczsKQEAgLTEyMjQsMTAgKzEyMjMsNyBAQAogCX0KIAogCS8qIFB1bGwgdGhlIGZpcnN0IGJ1ZmZlciBmcm9tIHRoZSB1c2VkIGxpc3QgKi8KLQl1YnVmID0gbGlzdF9maXJzdF9lbnRyeSgmcG9ydC0+bGlzdF9idWZfdXNlZC5saXN0LAotCQlzdHJ1Y3Qgc2FhNzE2NF91c2VyX2J1ZmZlciwgbGlzdCk7Ci0KLQlpZiAodWJ1ZikKKwlpZiAoIWxpc3RfZW1wdHkoJnBvcnQtPmxpc3RfYnVmX3VzZWQubGlzdCkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCXJldHVybiBtYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE2NC9zYWE3MTY0LmgKaW5kZXggMTY3NDVkMi4uNjY3OGJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC5oCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggM2FlNWM5Yy4uZTU0MDg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NzaTIuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVkaWFidXMuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfbWVkaWFidXMuaD4KQEAgLTk2LDYgKzk2LDcgQEAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCBpY2k7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY3NpMl9wZGV2OwogCiAJdW5zaWduZWQgaW50IGlycTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0yMDUsNyArMjA2LDcgQEAKIAogCiAJaWYgKDIgIT0gc3VjY2VzcykgewotCQlkZXZfd2FybigmaWNkLT5kZXYsICJzb2Z0IHJlc2V0IHRpbWUgb3V0XG4iKTsKKwkJZGV2X3dhcm4oaWNkLT5wZGV2LCAic29mdCByZXNldCB0aW1lIG91dFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjIwLDcgKzIyMSw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHNpemVzW10sIHZvaWQgKmFsbG9jX2N0eHNbXSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNvbnRhaW5lcl9vZih2cSwgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLCB2YjJfdmlkcSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCWludCBieXRlc19wZXJfbGluZSA9IHNvY19tYnVzX2J5dGVzX3Blcl9saW5lKGljZC0+dXNlcl93aWR0aCwKIAkJCQkJCWljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10KTsKQEAgLTI0Miw3ICsyNDMsNyBAQAogCQkJKmNvdW50ID0gcGNkZXYtPnZpZGVvX2xpbWl0IC8gUEFHRV9BTElHTihzaXplc1swXSk7CiAJfQogCi0JZGV2X2RiZyhpY2QtPmRldi5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lbHVcbiIsICpjb3VudCwgc2l6ZXNbMF0pOworCWRldl9kYmcoaWNkLT5wYXJlbnQsICJjb3VudD0lZCwgc2l6ZT0lbHVcbiIsICpjb3VudCwgc2l6ZXNbMF0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTEsNyArMzUyLDcgQEAKIAogCWJ1ZiA9IHRvX2NldV92Yih2Yik7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCVwICVsdVxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCVwICVsdVxuIiwgX19mdW5jX18sCiAJCXZiLCB2YjJfcGxhbmVfdmFkZHIodmIsIDApLCB2YjJfZ2V0X3BsYW5lX3BheWxvYWQodmIsIDApKTsKIAogCS8qIEFkZGVkIGxpc3QgaGVhZCBpbml0aWFsaXphdGlvbiBvbiBhbGxvYyAqLwpAQCAtMzcxLDcgKzM3Miw3IEBACiAJc2l6ZSA9IGljZC0+dXNlcl9oZWlnaHQgKiBieXRlc19wZXJfbGluZTsKIAogCWlmICh2YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBzaXplKSB7Ci0JCWRldl9lcnIoaWNkLT5kZXYucGFyZW50LCAiQnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwKKwkJZGV2X2VycihpY2QtPnBhcmVudCwgIkJ1ZmZlciB0b28gc21hbGwgKCVsdSA8ICVsdSlcbiIsCiAJCQl2YjJfcGxhbmVfc2l6ZSh2YiwgMCksIHNpemUpOwogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQpAQCAtMzg0LDExICszODUsMTEgQEAKIHN0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfdmlkZW9idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY29udGFpbmVyX29mKHZiLT52YjJfcXVldWUsIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSwgdmIyX3ZpZHEpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIgKmJ1ZiA9IHRvX2NldV92Yih2Yik7CiAKLQlkZXZfZGJnKGljZC0+ZGV2LnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCVwICVsdVxuIiwgX19mdW5jX18sCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIiVzICh2Yj0weCVwKSAweCVwICVsdVxuIiwgX19mdW5jX18sCiAJCXZiLCB2YjJfcGxhbmVfdmFkZHIodmIsIDApLCB2YjJfZ2V0X3BsYW5lX3BheWxvYWQodmIsIDApKTsKIAogCXNwaW5fbG9ja19pcnEoJnBjZGV2LT5sb2NrKTsKQEAgLTQwOSw3ICs0MTAsNyBAQAogc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9yZWxlYXNlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNvbnRhaW5lcl9vZih2Yi0+dmIyX3F1ZXVlLCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UsIHZiMl92aWRxKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2J1ZmZlciAqYnVmID0gdG9fY2V1X3ZiKHZiKTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCkBAIC00MjEsOCArNDIyLDEyIEBACiAJCXBjZGV2LT5hY3RpdmUgPSBOVUxMOwogCX0KIAotCS8qIERvZXNuJ3QgaHVydCBhbHNvIGlmIHRoZSBsaXN0IGlzIGVtcHR5ICovCi0JbGlzdF9kZWxfaW5pdCgmYnVmLT5xdWV1ZSk7CisJLyoKKwkgKiBEb2Vzbid0IGh1cnQgYWxzbyBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgYnV0IGl0IGh1cnRzLCBpZiBxdWV1aW5nIHRoZQorCSAqIGJ1ZmZlciBmYWlsZWQsIGFuZCAuYnVmX2luaXQoKSBoYXNuJ3QgYmVlbiBjYWxsZWQKKwkgKi8KKwlpZiAoYnVmLT5xdWV1ZS5uZXh0KQorCQlsaXN0X2RlbF9pbml0KCZidWYtPnF1ZXVlKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcGNkZXYtPmxvY2spOwogfQpAQCAtNDM3LDcgKzQ0Miw3IEBACiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UsIHZiMl92aWRxKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJc3RydWN0IGxpc3RfaGVhZCAqYnVmX2hlYWQsICp0bXA7CiAKQEAgLTQ5OSwyNSArNTA0LDQ4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2ICpmaW5kX2NzaTIoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJaWYgKCFwY2Rldi0+Y3NpMl9wZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJnBjZGV2LT5pY2kudjRsMl9kZXYpCisJCWlmICgmcGNkZXYtPmNzaTJfcGRldi0+ZGV2ID09IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpKQorCQkJcmV0dXJuIHNkOworCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9hZGRfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmNzaTJfc2Q7CiAJaW50IHJldDsKIAogCWlmIChwY2Rldi0+aWNkKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LAorCWRldl9pbmZvKGljZC0+cGFyZW50LAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKIAogCXJldCA9IHNoX21vYmlsZV9jZXVfc29mdF9yZXNldChwY2Rldik7Ci0JaWYgKCFyZXQpCisKKwljc2kyX3NkID0gZmluZF9jc2kyKHBjZGV2KTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3NpMl9zZCwgY29yZSwgc19wb3dlciwgMSk7CisJaWYgKHJldCAhPSAtRU5PREVWICYmIHJldCAhPSAtRU5PSU9DVExDTUQgJiYgcmV0IDwgMCkgeworCQlwbV9ydW50aW1lX3B1dF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKKwl9IGVsc2UgewogCQlwY2Rldi0+aWNkID0gaWNkOworCQlyZXQgPSAwOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC01MjUsMTEgKzU1MywxMyBAQAogLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NldV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmNzaTJfc2QgPSBmaW5kX2NzaTIocGNkZXYpOwogCiAJQlVHX09OKGljZCAhPSBwY2Rldi0+aWNkKTsKIAorCXY0bDJfc3ViZGV2X2NhbGwoY3NpMl9zZCwgY29yZSwgc19wb3dlciwgMCk7CiAJLyogZGlzYWJsZSBjYXB0dXJlLCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAljZXVfd3JpdGUocGNkZXYsIENFSUVSLCAwKTsKIAlzaF9tb2JpbGVfY2V1X3NvZnRfcmVzZXQocGNkZXYpOwpAQCAtNTQ1LDcgKzU3NSw3IEBACiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKIAotCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwKKwlkZXZfaW5mbyhpY2QtPnBhcmVudCwKIAkJICJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKQEAgLTU4NSwxNCArNjE1LDE0IEBACiAvKiByZWN0IGlzIGd1YXJhbnRlZWQgdG8gbm90IGV4Y2VlZCB0aGUgc2NhbGVkIGNhbWVyYSByZWN0YW5nbGUgKi8KIHN0YXRpYyB2b2lkIHNoX21vYmlsZV9jZXVfc2V0X3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJdW5zaWduZWQgaW50IGhlaWdodCwgd2lkdGgsIGNkd2RyX3dpZHRoLCBpbl93aWR0aCwgaW5faGVpZ2h0OwogCXVuc2lnbmVkIGludCBsZWZ0X29mZnNldCwgdG9wX29mZnNldDsKIAl1MzIgY2Ftb3I7CiAKLQlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwgIkNyb3AgJXV4JXVAJXU6JXVcbiIsCisJZGV2X2dlbyhpY2QtPnBhcmVudCwgIkNyb3AgJXV4JXVAJXU6JXVcbiIsCiAJCWljZC0+dXNlcl93aWR0aCwgaWNkLT51c2VyX2hlaWdodCwgY2FtLT5jZXVfbGVmdCwgY2FtLT5jZXVfdG9wKTsKIAogCWxlZnRfb2Zmc2V0CT0gY2FtLT5jZXVfbGVmdDsKQEAgLTY0MSw3ICs2NzEsNyBAQAogCX0KIAogCS8qIENTSTIgc3BlY2lhbCBjb25maWd1cmF0aW9uICovCi0JaWYgKHBjZGV2LT5wZGF0YS0+Y3NpMl9kZXYpIHsKKwlpZiAocGNkZXYtPnBkYXRhLT5jc2kyKSB7CiAJCWluX3dpZHRoID0gKChpbl93aWR0aCAtIDIpICogMik7CiAJCWxlZnRfb2Zmc2V0ICo9IDI7CiAJfQpAQCAtNjQ5LDcgKzY3OSw3IEBACiAJLyogU2V0IENBTU9SLCBDQVBXUiwgQ0ZTWlIsIHRha2UgY2FyZSBvZiBDRFdEUiAqLwogCWNhbW9yID0gbGVmdF9vZmZzZXQgfCAodG9wX29mZnNldCA8PCAxNik7CiAKLQlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwKKwlkZXZfZ2VvKGljZC0+cGFyZW50LAogCQkiQ0FNT1IgMHgleCwgQ0FQV1IgMHgleCwgQ0ZTWlIgMHgleCwgQ0RXRFIgMHgleFxuIiwgY2Ftb3IsCiAJCShpbl9oZWlnaHQgPDwgMTYpIHwgaW5fd2lkdGgsIChoZWlnaHQgPDwgMTYpIHwgd2lkdGgsCiAJCWNkd2RyX3dpZHRoKTsKQEAgLTY5Nyw3ICs3MjcsNyBAQAogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICAgICAgIF9fdTMyIHBpeGZtdCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzLCB2YWx1ZTsKQEAgLTc4Myw3ICs4MTMsNyBAQAogCXZhbHVlIHw9IHBjZGV2LT5pc18xNmJpdCA/IDEgPDwgMTIgOiAwOwogCiAJLyogQ1NJMiBtb2RlICovCi0JaWYgKHBjZGV2LT5wZGF0YS0+Y3NpMl9kZXYpCisJaWYgKHBjZGV2LT5wZGF0YS0+Y3NpMikKIAkJdmFsdWUgfD0gMyA8PCAxMjsKIAogCWNldV93cml0ZShwY2RldiwgQ0FNQ1IsIHZhbHVlKTsKQEAgLTgwNiw3ICs4MzYsNyBAQAogCXNoX21vYmlsZV9jZXVfc2V0X3JlY3QoaWNkKTsKIAltZGVsYXkoMSk7CiAKLQlkZXZfZ2VvKGljZC0+ZGV2LnBhcmVudCwgIkNGTENSIDB4JXhcbiIsIHBjZGV2LT5jZmxjcik7CisJZGV2X2dlbyhpY2QtPnBhcmVudCwgIkNGTENSIDB4JXhcbiIsIHBjZGV2LT5jZmxjcik7CiAJY2V1X3dyaXRlKHBjZGV2LCBDRkxDUiwgcGNkZXYtPmNmbGNyKTsKIAogCS8qCkBAIC04MjksNyArODU5LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENET0NSLCB2YWx1ZSk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDRldDUiwgMCk7IC8qIGtlZXAgImRhdGFmZXRjaCBmaXJld2FsbCIgZGlzYWJsZWQgKi8KIAotCWRldl9kYmcoaWNkLT5kZXYucGFyZW50LCAiU19GTVQgc3VjY2Vzc2Z1bCBmb3IgJWMlYyVjJWMgJXV4JXVcbiIsCisJZGV2X2RiZyhpY2QtPnBhcmVudCwgIlNfRk1UIHN1Y2Nlc3NmdWwgZm9yICVjJWMlYyVjICV1eCV1XG4iLAogCQlwaXhmbXQgJiAweGZmLCAocGl4Zm10ID4+IDgpICYgMHhmZiwKIAkJKHBpeGZtdCA+PiAxNikgJiAweGZmLCAocGl4Zm10ID4+IDI0KSAmIDB4ZmYsCiAJCWljZC0+dXNlcl93aWR0aCwgaWNkLT51c2VyX2hlaWdodCk7CkBAIC04NDMsNyArODczLDcgQEAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV90cnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGJ1c3dpZHRoKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOwogCkBAIC05MDEsNyArOTMxLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OwogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChkZXYpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CiAJaW50IHJldCwgaywgbjsKQEAgLTkyMSw3ICs5NTEsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIXBjZGV2LT5wZGF0YS0+Y3NpMl9kZXYpIHsKKwlpZiAoIXBjZGV2LT5wZGF0YS0+Y3NpMikgewogCQlyZXQgPSBzaF9tb2JpbGVfY2V1X3RyeV9idXNfcGFyYW0oaWNkLCBmbXQtPmJpdHNfcGVyX3NhbXBsZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIDA7CkBAIC0xMjQ0LDcgKzEyNzQsNyBAQAogewogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OwogCXVuc2lnbmVkIGludCB3aWR0aCA9IG1mLT53aWR0aCwgaGVpZ2h0ID0gbWYtPmhlaWdodCwgdG1wX3csIHRtcF9oOwogCXVuc2lnbmVkIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CkBAIC0xMzEzLDcgKzEzNDMsNyBAQAogCQkJYm9vbCBjZXVfY2FuX3NjYWxlKQogewogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2NhbSAqY2FtID0gaWNkLT5ob3N0X3ByaXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+cGFyZW50OwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWZfdG1wID0gKm1mOwogCXVuc2lnbmVkIGludCBzY2FsZV9oLCBzY2FsZV92OwogCWludCByZXQ7CkBAIC0xMzYzLDEzICsxMzkzLDEzIEBACiAJCQkJICBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewogCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QgPSAmYS0+YzsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXN0cnVjdCB2NGwyX2Nyb3AgY2FtX2Nyb3A7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfY2FtICpjYW0gPSBpY2QtPmhvc3RfcHJpdjsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpjYW1fcmVjdCA9ICZjYW1fY3JvcC5jOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCXVuc2lnbmVkIGludCBzY2FsZV9jYW1faCwgc2NhbGVfY2FtX3YsIHNjYWxlX2NldV9oLCBzY2FsZV9jZXVfdiwKIAkJb3V0X3dpZHRoLCBvdXRfaGVpZ2h0OwpAQCAtMTUxMSw3ICsxNTQxLDcgQEAKIAkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4LCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptZikKIHsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZC0+ZGV2LnBhcmVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2QtPnBhcmVudDsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpjYW1fc3VicmVjdCA9ICZjYW0tPnN1YnJlY3Q7CiAJdW5zaWduZWQgaW50IHNjYWxlX3YsIHNjYWxlX2g7CiAKQEAgLTE1NTUsMTIgKzE1ODUsMTIgQEAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5wYXJlbnQ7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGRldik7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9jYW0gKmNhbSA9IGljZC0+aG9zdF9wcml2OwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgbWY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gaWNkLT5kZXYucGFyZW50OwogCV9fdTMyIHBpeGZtdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKIAkvKiBLZWVwIENvbXBpbGVyIEhhcHB5ICovCkBAIC0xNjg0LDEyICsxNzE0LDEyIEBACiAJaW50IHdpZHRoLCBoZWlnaHQ7CiAJaW50IHJldDsKIAotCWRldl9nZW8oaWNkLT5kZXYucGFyZW50LCAiVFJZX0ZNVChwaXg9MHgleCwgJXV4JXUpXG4iLAorCWRldl9nZW8oaWNkLT5wYXJlbnQsICJUUllfRk1UKHBpeD0weCV4LCAldXgldSlcbiIsCiAJCSBwaXhmbXQsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAogCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOwogCWlmICgheGxhdGUpIHsKLQkJZGV2X3dhcm4oaWNkLT5kZXYucGFyZW50LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE3MDEsMTEgKzE3MzEsNiBAQAogCXdpZHRoID0gcGl4LT53aWR0aDsKIAloZWlnaHQgPSBwaXgtPmhlaWdodDsKIAotCXBpeC0+Ynl0ZXNwZXJsaW5lID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUod2lkdGgsIHhsYXRlLT5ob3N0X2ZtdCk7Ci0JaWYgKChpbnQpcGl4LT5ieXRlc3BlcmxpbmUgPCAwKQotCQlyZXR1cm4gcGl4LT5ieXRlc3BlcmxpbmU7Ci0JcGl4LT5zaXplaW1hZ2UgPSBoZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKLQogCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KIAltZi53aWR0aAk9IHBpeC0+d2lkdGg7CiAJbWYuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7CkBAIC0xNzQxLDcgKzE3NjYsNyBAQAogCQkJCQkJCSB0cnlfbWJ1c19mbXQsICZtZik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCS8qIFNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4uLi4gKi8KLQkJCQlkZXZfZXJyKGljZC0+ZGV2LnBhcmVudCwKKwkJCQlkZXZfZXJyKGljZC0+cGFyZW50LAogCQkJCQkiRklYTUU6IGNsaWVudCB0cnlfZm10KCkgPSAlZFxuIiwgcmV0KTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQpAQCAtMTc1Myw3ICsxNzc4LDcgQEAKIAkJCXBpeC0+aGVpZ2h0ID0gaGVpZ2h0OwogCX0KIAotCWRldl9nZW8oaWNkLT5kZXYucGFyZW50LCAiJXMoKTogcmV0dXJuICVkLCBmbXQgMHgleCwgJXV4JXVcbiIsCisJZGV2X2dlbyhpY2QtPnBhcmVudCwgIiVzKCk6IHJldHVybiAlZCwgZm10IDB4JXgsICV1eCV1XG4iLAogCQlfX2Z1bmNfXywgcmV0LCBwaXgtPnBpeGVsZm9ybWF0LCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTc2Myw3ICsxNzg4LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAl1MzIgb3V0X3dpZHRoID0gaWNkLT51c2VyX3dpZHRoLCBvdXRfaGVpZ2h0ID0gaWNkLT51c2VyX2hlaWdodDsKIAlpbnQgcmV0OwpAQCAtMTc3NSwxMyArMTgwMCwxMyBAQAogCS8qIFN0b3AgdGhlIGNsaWVudCAqLwogCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJaWYgKHJldCA8IDApCi0JCWRldl93YXJuKGljZC0+ZGV2LnBhcmVudCwKKwkJZGV2X3dhcm4oaWNkLT5wYXJlbnQsCiAJCQkgIkNsaWVudCBmYWlsZWQgdG8gc3RvcCB0aGUgc3RyZWFtOiAlZFxuIiwgcmV0KTsKIAllbHNlCiAJCS8qIERvIHRoZSBjcm9wLCBpZiBpdCBmYWlscywgdGhlcmUncyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvICovCiAJCXNoX21vYmlsZV9jZXVfc2V0X2Nyb3AoaWNkLCBhKTsKIAotCWRldl9nZW8oaWNkLT5kZXYucGFyZW50LCAiT3V0cHV0IGFmdGVyIGNyb3A6ICV1eCV1XG4iLCBpY2QtPnVzZXJfd2lkdGgsIGljZC0+dXNlcl9oZWlnaHQpOworCWRldl9nZW8oaWNkLT5wYXJlbnQsICJPdXRwdXQgYWZ0ZXIgY3JvcDogJXV4JXVcbiIsIGljZC0+dXNlcl93aWR0aCwgaWNkLT51c2VyX2hlaWdodCk7CiAKIAlpZiAoaWNkLT51c2VyX3dpZHRoICE9IG91dF93aWR0aCB8fCBpY2QtPnVzZXJfaGVpZ2h0ICE9IG91dF9oZWlnaHQpIHsKIAkJc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7CkBAIC0xODI3LDcgKzE4NTIsNiBAQAogCQkJCSAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCXN0cmxjcHkoY2FwLT5jYXJkLCAiU3VwZXJIX01vYmlsZV9DRVUiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0JY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgNSk7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCXJldHVybiAwOwogfQpAQCAtMTg0OCw3ICsxODcyLDcgQEAKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9nZXRfY3RybChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OwogCXUzMiB2YWw7CiAKQEAgLTE4NjQsNyArMTg4OCw3IEBACiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2N0cmwoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKQEAgLTE5NTAsNyArMTk3NCw3IEBACiAJCS5jb21wbGV0aW9uID0gQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNLKHdhaXQuY29tcGxldGlvbiksCiAJCS5ub3RpZmllci5ub3RpZmllcl9jYWxsID0gYnVzX25vdGlmeSwKIAl9OwotCXN0cnVjdCBkZXZpY2UgKmNzaTI7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfY29tcGFuaW9uICpjc2kyOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtMjAyMywyNiArMjA0Nyw2MSBAQAogCXBjZGV2LT5pY2kuZHJ2X25hbWUgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKIAlwY2Rldi0+aWNpLm9wcyA9ICZzaF9tb2JpbGVfY2V1X2hvc3Rfb3BzOwogCisJcGNkZXYtPmFsbG9jX2N0eCA9IHZiMl9kbWFfY29udGlnX2luaXRfY3R4KCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIocGNkZXYtPmFsbG9jX2N0eCkpIHsKKwkJZXJyID0gUFRSX0VSUihwY2Rldi0+YWxsb2NfY3R4KTsKKwkJZ290byBleGl0X2ZyZWVfY2xrOworCX0KKworCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcigmcGNkZXYtPmljaSk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWVfY3R4OworCiAJLyogQ1NJMiBpbnRlcmZhY2luZyAqLwotCWNzaTIgPSBwY2Rldi0+cGRhdGEtPmNzaTJfZGV2OworCWNzaTIgPSBwY2Rldi0+cGRhdGEtPmNzaTI7CiAJaWYgKGNzaTIpIHsKLQkJd2FpdC5kZXYgPSBjc2kyOworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjc2kyX3BkZXYgPQorCQkJcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzaC1tb2JpbGUtY3NpMiIsIGNzaTItPmlkKTsKKwkJc3RydWN0IHNoX2NzaTJfcGRhdGEgKmNzaTJfcGRhdGEgPSBjc2kyLT5wbGF0Zm9ybV9kYXRhOworCisJCWlmICghY3NpMl9wZGV2KSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0X2hvc3RfdW5yZWdpc3RlcjsKKwkJfQorCisJCXBjZGV2LT5jc2kyX3BkZXYJCT0gY3NpMl9wZGV2OworCisJCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShjc2kyX3BkZXYsIGNzaTJfcGRhdGEsIHNpemVvZigqY3NpMl9wZGF0YSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXhpdF9wZGV2X3B1dDsKKworCQljc2kyX3BkYXRhCQkJPSBjc2kyX3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCQljc2kyX3BkYXRhLT52NGwyX2RldgkJPSAmcGNkZXYtPmljaS52NGwyX2RldjsKKworCQljc2kyX3BkZXYtPnJlc291cmNlCQk9IGNzaTItPnJlc291cmNlOworCQljc2kyX3BkZXYtPm51bV9yZXNvdXJjZXMJPSBjc2kyLT5udW1fcmVzb3VyY2VzOworCisJCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQoY3NpMl9wZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGV4aXRfcGRldl9wdXQ7CisKKwkJd2FpdC5kZXYgPSAmY3NpMl9wZGV2LT5kZXY7CiAKIAkJZXJyID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJndhaXQubm90aWZpZXIpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXhpdF9mcmVlX2NsazsKKwkJCWdvdG8gZXhpdF9wZGV2X3VucmVnaXN0ZXI7CiAKIAkJLyoKIAkJICogRnJvbSB0aGlzIHBvaW50IHRoZSBkcml2ZXIgbW9kdWxlIHdpbGwgbm90IHVubG9hZCwgdW50aWwKIAkJICogd2UgY29tcGxldGUgdGhlIGNvbXBsZXRpb24uCiAJCSAqLwogCi0JCWlmICghY3NpMi0+ZHJpdmVyKSB7CisJCWlmICghY3NpMl9wZGV2LT5kZXYuZHJpdmVyKSB7CiAJCQljb21wbGV0ZSgmd2FpdC5jb21wbGV0aW9uKTsKIAkJCS8qIEVpdGhlciB0b28gbGF0ZSwgb3IgcHJvYmluZyBmYWlsZWQgKi8KIAkJCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZwbGF0Zm9ybV9idXNfdHlwZSwgJndhaXQubm90aWZpZXIpOwogCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBleGl0X2ZyZWVfY2xrOworCQkJZ290byBleGl0X3BkZXZfdW5yZWdpc3RlcjsKIAkJfQogCiAJCS8qCkBAIC0yMDUxLDM0ICsyMTEwLDI4IEBACiAJCSAqIHRoZSAib3duZXIiIGlzIHNhZmUhCiAJCSAqLwogCi0JCWVyciA9IHRyeV9tb2R1bGVfZ2V0KGNzaTItPmRyaXZlci0+b3duZXIpOworCQllcnIgPSB0cnlfbW9kdWxlX2dldChjc2kyX3BkZXYtPmRldi5kcml2ZXItPm93bmVyKTsKIAogCQkvKiBMZXQgbm90aWZpZXIgY29tcGxldGUsIGlmIGl0IGhhcyBiZWVuIGxvY2tlZCAqLwogCQljb21wbGV0ZSgmd2FpdC5jb21wbGV0aW9uKTsKIAkJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmd2FpdC5ub3RpZmllcik7CiAJCWlmICghZXJyKSB7CiAJCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBleGl0X2ZyZWVfY2xrOworCQkJZ290byBleGl0X3BkZXZfdW5yZWdpc3RlcjsKIAkJfQogCX0KIAotCXBjZGV2LT5hbGxvY19jdHggPSB2YjJfZG1hX2NvbnRpZ19pbml0X2N0eCgmcGRldi0+ZGV2KTsKLQlpZiAoSVNfRVJSKHBjZGV2LT5hbGxvY19jdHgpKSB7Ci0JCWVyciA9IFBUUl9FUlIocGNkZXYtPmFsbG9jX2N0eCk7Ci0JCWdvdG8gZXhpdF9tb2R1bGVfcHV0OwotCX0KLQotCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3RlcigmcGNkZXYtPmljaSk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X2ZyZWVfY3R4OwotCiAJcmV0dXJuIDA7CiAKK2V4aXRfcGRldl91bnJlZ2lzdGVyOgorCXBsYXRmb3JtX2RldmljZV9kZWwocGNkZXYtPmNzaTJfcGRldik7CitleGl0X3BkZXZfcHV0OgorCXBjZGV2LT5jc2kyX3BkZXYtPnJlc291cmNlID0gTlVMTDsKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBjZGV2LT5jc2kyX3BkZXYpOworZXhpdF9ob3N0X3VucmVnaXN0ZXI6CisJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoJnBjZGV2LT5pY2kpOwogZXhpdF9mcmVlX2N0eDoKIAl2YjJfZG1hX2NvbnRpZ19jbGVhbnVwX2N0eChwY2Rldi0+YWxsb2NfY3R4KTsKLWV4aXRfbW9kdWxlX3B1dDoKLQlpZiAoY3NpMiAmJiBjc2kyLT5kcml2ZXIpCi0JCW1vZHVsZV9wdXQoY3NpMi0+ZHJpdmVyLT5vd25lcik7CiBleGl0X2ZyZWVfY2xrOgogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAlmcmVlX2lycShwY2Rldi0+aXJxLCBwY2Rldik7CkBAIC0yMDk4LDcgKzIxNTEsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKnNvY19ob3N0ID0gdG9fc29jX2NhbWVyYV9ob3N0KCZwZGV2LT5kZXYpOwogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYgPSBjb250YWluZXJfb2Yoc29jX2hvc3QsCiAJCQkJCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiwgaWNpKTsKLQlzdHJ1Y3QgZGV2aWNlICpjc2kyID0gcGNkZXYtPnBkYXRhLT5jc2kyX2RldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjc2kyX3BkZXYgPSBwY2Rldi0+Y3NpMl9wZGV2OwogCiAJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoc29jX2hvc3QpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKQEAgLTIxMDcsOCArMjE2MCwxMyBAQAogCQlkbWFfcmVsZWFzZV9kZWNsYXJlZF9tZW1vcnkoJnBkZXYtPmRldik7CiAJaW91bm1hcChwY2Rldi0+YmFzZSk7CiAJdmIyX2RtYV9jb250aWdfY2xlYW51cF9jdHgocGNkZXYtPmFsbG9jX2N0eCk7Ci0JaWYgKGNzaTIgJiYgY3NpMi0+ZHJpdmVyKQotCQltb2R1bGVfcHV0KGNzaTItPmRyaXZlci0+b3duZXIpOworCWlmIChjc2kyX3BkZXYgJiYgY3NpMl9wZGV2LT5kZXYuZHJpdmVyKSB7CisJCXN0cnVjdCBtb2R1bGUgKmNzaTJfZHJ2ID0gY3NpMl9wZGV2LT5kZXYuZHJpdmVyLT5vd25lcjsKKwkJcGxhdGZvcm1fZGV2aWNlX2RlbChjc2kyX3BkZXYpOworCQljc2kyX3BkZXYtPnJlc291cmNlID0gTlVMTDsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChjc2kyX3BkZXYpOworCQltb2R1bGVfcHV0KGNzaTJfZHJ2KTsKKwl9CiAJa2ZyZWUocGNkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0yMTU4LDQgKzIyMTYsNSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjYiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06c2hfbW9iaWxlX2NldSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jCmluZGV4IDk4Yjg3NDguLjI4OTNhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NzaTIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKKyNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NzaTIuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTMzLDcgKzM0LDYgQEAKIHN0cnVjdCBzaF9jc2kyIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYJCXN1YmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwotCXN0cnVjdCBub3RpZmllcl9ibG9jawkJbm90aWZpZXI7CiAJdW5zaWduZWQgaW50CQkJaXJxOwogCXZvaWQgX19pb21lbQkJCSpiYXNlOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OwpAQCAtMTMyLDEzICsxMzIsNiBAQAogCS50cnlfbWJ1c19mbXQJPSBzaF9jc2kyX3RyeV9mbXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNoX2NzaTJfc3ViZGV2X2NvcmVfb3BzOwotCi1zdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzaF9jc2kyX3N1YmRldl9vcHMgPSB7Ci0JLmNvcmUJPSAmc2hfY3NpMl9zdWJkZXZfY29yZV9vcHMsCi0JLnZpZGVvCT0gJnNoX2NzaTJfc3ViZGV2X3ZpZGVvX29wcywKLX07Ci0KIHN0YXRpYyB2b2lkIHNoX2NzaTJfaHdpbml0KHN0cnVjdCBzaF9jc2kyICpwcml2KQogewogCXN0cnVjdCBzaF9jc2kyX3BkYXRhICpwZGF0YSA9IHByaXYtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtMTg2LDY1ICsxNzksODQgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgc2hfY3NpMl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNoX2NzaTJfY2xpZW50X2Nvbm5lY3Qoc3RydWN0IHNoX2NzaTIgKnByaXYpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHRvX3NvY19jYW1lcmFfZGV2KGRldik7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7Ci0Jc3RydWN0IHNoX2NzaTIgKnByaXYgPQotCQljb250YWluZXJfb2YobmIsIHN0cnVjdCBzaF9jc2kyLCBub3RpZmllcik7CiAJc3RydWN0IHNoX2NzaTJfcGRhdGEgKnBkYXRhID0gcHJpdi0+cGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaW50IHJldCwgaTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCAqY3NpMl9zZCA9ICZwcml2LT5zdWJkZXY7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldik7CisJaW50IGk7CisKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsIGNzaTJfc2QtPnY0bDJfZGV2KQorCQlpZiAoc2QtPmdycF9pZCkgeworCQkJaWNkID0gKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKXNkLT5ncnBfaWQ7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFpY2QpCisJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fY2xpZW50czsgaSsrKQogCQlpZiAoJnBkYXRhLT5jbGllbnRzW2ldLnBkZXYtPmRldiA9PSBpY2QtPnBkZXYpCiAJCQlicmVhazsKIAotCWRldl9kYmcoZGV2LCAiJXMoJXApOiBhY3Rpb24gPSAlbHUsIGZvdW5kICMlZFxuIiwgX19mdW5jX18sIGRldiwgYWN0aW9uLCBpKTsKKwlkZXZfZGJnKGRldiwgIiVzKCVwKTogZm91bmQgIyVkXG4iLCBfX2Z1bmNfXywgZGV2LCBpKTsKIAogCWlmIChpID09IHBkYXRhLT5udW1fY2xpZW50cykKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUjoKLQkJc25wcmludGYocHJpdi0+c3ViZGV2Lm5hbWUsIFY0TDJfU1VCREVWX05BTUVfU0laRSwgIiVzJXMiLAotCQkJIGRldl9uYW1lKHY0bDJfZGV2LT5kZXYpLCAiLm1pcGktY3NpIik7Ci0JCXByaXYtPnN1YmRldi5ncnBfaWQgPSAobG9uZylpY2Q7Ci0JCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldih2NGwyX2RldiwgJnByaXYtPnN1YmRldik7Ci0JCWRldl9kYmcoZGV2LCAiJXMoJXApOiByZXQocmVnaXN0ZXJfc3ViZGV2KSA9ICVkXG4iLCBfX2Z1bmNfXywgcHJpdiwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcHJpdi0+Y2xpZW50ID0gcGRhdGEtPmNsaWVudHMgKyBpOwogCi0JCXByaXYtPmNsaWVudCA9IHBkYXRhLT5jbGllbnRzICsgaTsKKwlwcml2LT5zZXRfYnVzX3BhcmFtCQk9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtOworCXByaXYtPnF1ZXJ5X2J1c19wYXJhbQkJPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtOworCWljZC0+b3BzLT5zZXRfYnVzX3BhcmFtCQk9IHNoX2NzaTJfc2V0X2J1c19wYXJhbTsKKwlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gc2hfY3NpMl9xdWVyeV9idXNfcGFyYW07CiAKLQkJcHJpdi0+c2V0X2J1c19wYXJhbQkJPSBpY2QtPm9wcy0+c2V0X2J1c19wYXJhbTsKLQkJcHJpdi0+cXVlcnlfYnVzX3BhcmFtCQk9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW07Ci0JCWljZC0+b3BzLT5zZXRfYnVzX3BhcmFtCQk9IHNoX2NzaTJfc2V0X2J1c19wYXJhbTsKLQkJaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbQk9IHNoX2NzaTJfcXVlcnlfYnVzX3BhcmFtOworCWNzaTJfc2QtPmdycF9pZCA9IChsb25nKWljZDsKIAotCQlwbV9ydW50aW1lX2dldF9zeW5jKHY0bDJfZ2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldikpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKIAotCQlzaF9jc2kyX2h3aW5pdChwcml2KTsKLQkJYnJlYWs7Ci0JY2FzZSBCVVNfTk9USUZZX1VOQklORF9EUklWRVI6Ci0JCXByaXYtPmNsaWVudCA9IE5VTEw7CisJc2hfY3NpMl9od2luaXQocHJpdik7CiAKLQkJLyogRHJpdmVyIGlzIGFib3V0IHRvIGJlIHVuYm91bmQgKi8KLQkJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gcHJpdi0+c2V0X2J1c19wYXJhbTsKLQkJaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbQk9IHByaXYtPnF1ZXJ5X2J1c19wYXJhbTsKLQkJcHJpdi0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOwotCQlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gTlVMTDsKLQotCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldigmcHJpdi0+c3ViZGV2KTsKLQotCQlwbV9ydW50aW1lX3B1dCh2NGwyX2dldF9zdWJkZXZkYXRhKCZwcml2LT5zdWJkZXYpKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9PSzsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2hfY3NpMl9jbGllbnRfZGlzY29ubmVjdChzdHJ1Y3Qgc2hfY3NpMiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKilwcml2LT5zdWJkZXYuZ3JwX2lkOworCisJcHJpdi0+Y2xpZW50ID0gTlVMTDsKKwlwcml2LT5zdWJkZXYuZ3JwX2lkID0gMDsKKworCS8qIERyaXZlciBpcyBhYm91dCB0byBiZSB1bmJvdW5kICovCisJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gcHJpdi0+c2V0X2J1c19wYXJhbTsKKwlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gcHJpdi0+cXVlcnlfYnVzX3BhcmFtOworCXByaXYtPnNldF9idXNfcGFyYW0JCT0gTlVMTDsKKwlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gTlVMTDsKKworCXBtX3J1bnRpbWVfcHV0KHY0bDJfZ2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldikpOworfQorCitzdGF0aWMgaW50IHNoX2NzaTJfc19wb3dlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pCit7CisJc3RydWN0IHNoX2NzaTIgKnByaXYgPSBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzaF9jc2kyLCBzdWJkZXYpOworCisJaWYgKG9uKQorCQlyZXR1cm4gc2hfY3NpMl9jbGllbnRfY29ubmVjdChwcml2KTsKKworCXNoX2NzaTJfY2xpZW50X2Rpc2Nvbm5lY3QocHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2hfY3NpMl9zdWJkZXZfY29yZV9vcHMgPSB7CisJLnNfcG93ZXIJPSBzaF9jc2kyX3NfcG93ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzaF9jc2kyX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJPSAmc2hfY3NpMl9zdWJkZXZfY29yZV9vcHMsCisJLnZpZGVvCT0gJnNoX2NzaTJfc3ViZGV2X3ZpZGVvX29wcywKK307CisKIHN0YXRpYyBfX2RldmluaXQgaW50IHNoX2NzaTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTI3NCwxNCArMjg2LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwcml2LT5pcnEgPSBpcnE7Ci0JcHJpdi0+bm90aWZpZXIubm90aWZpZXJfY2FsbCA9IHNoX2NzaTJfbm90aWZ5OwotCi0JLyogV2UgTVVTVCBhdHRhY2ggYWZ0ZXIgdGhlIE1JUEkgc2Vuc29yICovCi0JcmV0ID0gYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZzb2NfY2FtZXJhX2J1c190eXBlLCAmcHJpdi0+bm90aWZpZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNTSTIgY2Fubm90IHJlZ2lzdGVyIG5vdGlmaWVyXG4iKTsKLQkJZ290byBlcm5vdGlmeTsKLQl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNTSTIgcmVnaXN0ZXIgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CkBAIC0yOTcsMTEgKzMwMSwxNyBAQAogCX0KIAogCXByaXYtPnBkZXYgPSBwZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCiAJdjRsMl9zdWJkZXZfaW5pdCgmcHJpdi0+c3ViZGV2LCAmc2hfY3NpMl9zdWJkZXZfb3BzKTsKIAl2NGwyX3NldF9zdWJkZXZkYXRhKCZwcml2LT5zdWJkZXYsICZwZGV2LT5kZXYpOwogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJc25wcmludGYocHJpdi0+c3ViZGV2Lm5hbWUsIFY0TDJfU1VCREVWX05BTUVfU0laRSwgIiVzLm1pcGktY3NpIiwKKwkJIGRldl9uYW1lKHBkYXRhLT52NGwyX2Rldi0+ZGV2KSk7CisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHBkYXRhLT52NGwyX2RldiwgJnByaXYtPnN1YmRldik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXMoJXApOiByZXQocmVnaXN0ZXJfc3ViZGV2KSA9ICVkXG4iLCBfX2Z1bmNfXywgcHJpdiwgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlc2RyZWc7CiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIApAQCAtMzA5LDExICszMTksMTEgQEAKIAogCXJldHVybiAwOwogCitlc2RyZWc6CisJaW91bm1hcChwcml2LT5iYXNlKTsKIGVyZW1hcDoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGVyZXFyZWc6Ci0JYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJnNvY19jYW1lcmFfYnVzX3R5cGUsICZwcml2LT5ub3RpZmllcik7Ci1lcm5vdGlmeToKIAlrZnJlZShwcml2KTsKIAogCXJldHVybiByZXQ7CkBAIC0zMjQsNyArMzM0LDcgQEAKIAlzdHJ1Y3Qgc2hfY3NpMiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAotCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZzb2NfY2FtZXJhX2J1c190eXBlLCAmcHJpdi0+bm90aWZpZXIpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZwcml2LT5zdWJkZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAlpb3VubWFwKHByaXYtPmJhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwpAQCAtMzM1LDggKzM0NSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIF9fcmVmZGF0YSBzaF9jc2kyX3BkcnYgPSB7Ci0JLnJlbW92ZSAgPSBfX2RldmV4aXRfcChzaF9jc2kyX3JlbW92ZSksCi0JLmRyaXZlciAgPSB7CisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHNoX2NzaTJfcmVtb3ZlKSwKKwkucHJvYmUJPSBzaF9jc2kyX3Byb2JlLAorCS5kcml2ZXIJPSB7CiAJCS5uYW1lCT0gInNoLW1vYmlsZS1jc2kyIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTM0NCw3ICszNTUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9jc2kyX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzaF9jc2kyX3BkcnYsIHNoX2NzaTJfcHJvYmUpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNoX2NzaTJfcGRydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaF9jc2kyX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfdm91LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX3ZvdS5jCmluZGV4IDA3Y2YwYzYuLjZhNzI5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfdm91LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF92b3UuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaW5jbHVkZSA8bWVkaWEvc2hfdm91Lmg+CkBAIC0zOTMsNyArMzkyLDYgQEAKIAlkZXZfZGJnKHZvdV9maWxlLT52YnEuZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJc3RybGNweShjYXAtPmNhcmQsICJTdXBlckggVk9VIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDEsIDApOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCXJldHVybiAwOwogfQpAQCAtMTQ5MCw0ICsxNDg4LDUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIFZPVSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oIjAuMS4wIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNoLXZvdSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyLmgKaW5kZXggY2JmYzQ0NC4uMjJlYTIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMi5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZuZGVmIF9TTjlDMTAyX0hfCiAjZGVmaW5lIF9TTjlDMTAyX0hfCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwppbmRleCAwZTA3YzQ5Li4xNmNiMDdjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtNDcsOCArNDgsNyBAQAogI2RlZmluZSBTTjlDMTAyX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDQtMjAwNyBMdWNhIFJpc29saWEiCiAjZGVmaW5lIFNOOUMxMDJfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCi0jZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuNDdwcmU0OSIKLSNkZWZpbmUgU045QzEwMl9NT0RVTEVfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigxLCAxLCA0NykKKyNkZWZpbmUgU045QzEwMl9NT0RVTEVfVkVSU0lPTiAgIjE6MS40OCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMTU4LDcgKzIxNTgsNyBAQAogewogCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgY2FwID0gewogCQkuZHJpdmVyID0gInNuOWMxMDIiLAotCQkudmVyc2lvbiA9IFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSwKKwkJLnZlcnNpb24gPSBMSU5VWF9WRVJTSU9OX0NPREUsCiAJCS5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwKIAkJCQlWNEwyX0NBUF9TVFJFQU1JTkcsCiAJfTsKQEAgLTMxODcsMTYgKzMxODcsOCBAQAogCWNhc2UgVklESU9DX1NfQVVESU86CiAJCXJldHVybiBzbjljMTAyX3ZpZGlvY19zX2F1ZGlvKGNhbSwgYXJnKTsKIAotCWNhc2UgVklESU9DX0dfU1REOgotCWNhc2UgVklESU9DX1NfU1REOgotCWNhc2UgVklESU9DX1FVRVJZU1REOgotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JY2FzZSBWSURJT0NfUVVFUllNRU5VOgotCWNhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6Ci0JCXJldHVybiAtRUlOVkFMOwotCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRU5PVFRZOwogCiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA0ZTRkNDEyLi41YmRmZTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtNjAsMTQgKzYwLDE0IEBACiAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShpY2wtPm51bV9yZWd1bGF0b3JzLAogCQkJCQkgICAgaWNsLT5yZWd1bGF0b3JzKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ2Fubm90IGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKKwkJCWRldl9lcnIoaWNkLT5wZGV2LCAiQ2Fubm90IGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlpZiAoaWNsLT5wb3dlcikKIAkJCXJldCA9IGljbC0+cG93ZXIoaWNkLT5wZGV2LCBwb3dlcl9vbik7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJCWRldl9lcnIoaWNkLT5wZGV2LAogCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOwogCiAJCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKGljbC0+bnVtX3JlZ3VsYXRvcnMsCkBAIC03OSw3ICs3OSw3IEBACiAJCWlmIChpY2wtPnBvd2VyKQogCQkJcmV0ID0gaWNsLT5wb3dlcihpY2QtPnBkZXYsIDApOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmaWNkLT5kZXYsCisJCQlkZXZfZXJyKGljZC0+cGRldiwKIAkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9mZiB0aGUgY2FtZXJhLlxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC04Nyw3ICs4Nyw3IEBACiAJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoaWNsLT5udW1fcmVndWxhdG9ycywKIAkJCQkJICAgICBpY2wtPnJlZ3VsYXRvcnMpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmaWNkLT5kZXYsICJDYW5ub3QgZGlzYWJsZSByZWd1bGF0b3JzXG4iKTsKKwkJCWRldl9lcnIoaWNkLT5wZGV2LCAiQ2Fubm90IGRpc2FibGUgcmVndWxhdG9yc1xuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMTQ3LDExICsxNDcsMTEgQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiVFJZX0ZNVCglYyVjJWMlYywgJXV4JXUpXG4iLAorCWRldl9kYmcoaWNkLT5wZGV2LCAiVFJZX0ZNVCglYyVjJWMlYywgJXV4JXUpXG4iLAogCQlwaXhmbXRzdHIocGl4LT5waXhlbGZvcm1hdCksIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAogCXBpeC0+Ynl0ZXNwZXJsaW5lID0gMDsKQEAgLTE5OSwyMiArMTk5LDE1IEBACiBzdGF0aWMgaW50IHNvY19jYW1lcmFfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKIHsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0ID0gMDsKLQogCWlmIChpbnAtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGljZC0+b3BzLT5lbnVtX2lucHV0KQotCQlyZXQgPSBpY2QtPm9wcy0+ZW51bV9pbnB1dChpY2QsIGlucCk7Ci0JZWxzZSB7Ci0JCS8qIGRlZmF1bHQgaXMgY2FtZXJhICovCi0JCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JCWlucC0+c3RkICA9IFY0TDJfU1REX1VOS05PV047Ci0JCXN0cmNweShpbnAtPm5hbWUsICJDYW1lcmEiKTsKLQl9CisJLyogZGVmYXVsdCBpcyBjYW1lcmEgKi8KKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCWlucC0+c3RkICA9IFY0TDJfU1REX1VOS05PV047CisJc3RyY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKQEAgLTI0NCw3ICsyMzcsNyBAQAogCQkJCQkgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlyZXR1cm4gaWNpLT5vcHMtPmVudW1fZnNpemVzKGljZCwgZnNpemUpOwogfQpAQCAtMjU0LDcgKzI0Nyw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTI4MSw3ICsyNzQsNyBAQAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTI5NSw3ICsyODgsNyBAQAogCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtMzEyLDcgKzMwNSw3IEBACiAJCQkgICAgc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtMzI5LDcgKzMyMiw3IEBACiBzdGF0aWMgaW50IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAl1bnNpZ25lZCBpbnQgaSwgZm10cyA9IDAsIHJhd19mbXRzID0gMDsKIAlpbnQgcmV0OwogCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlOwpAQCAtMzYzLDcgKzM1Niw3IEBACiAJaWYgKCFpY2QtPnVzZXJfZm9ybWF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIkZvdW5kICVkIHN1cHBvcnRlZCBmb3JtYXRzLlxuIiwgZm10cyk7CisJZGV2X2RiZyhpY2QtPnBkZXYsICJGb3VuZCAlZCBzdXBwb3J0ZWQgZm9ybWF0cy5cbiIsIGZtdHMpOwogCiAJLyogU2Vjb25kIHBhc3MgLSBhY3R1YWxseSBmaWxsIGRhdGEgZm9ybWF0cyAqLwogCWZtdHMgPSAwOwpAQCAtMzk1LDcgKzM4OCw3IEBACiAvKiBBbHdheXMgZW50ZXJlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KIHN0YXRpYyB2b2lkIHNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAogCWlmIChpY2ktPm9wcy0+cHV0X2Zvcm1hdHMpCiAJCWljaS0+b3BzLT5wdXRfZm9ybWF0cyhpY2QpOwpAQCAtNDA5LDExICs0MDIsMTEgQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiU19GTVQoJWMlYyVjJWMsICV1eCV1KVxuIiwKKwlkZXZfZGJnKGljZC0+cGRldiwgIlNfRk1UKCVjJWMlYyVjLCAldXgldSlcbiIsCiAJCXBpeGZtdHN0cihwaXgtPnBpeGVsZm9ybWF0KSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCiAJLyogV2UgYWx3YXlzIGNhbGwgdHJ5X2ZtdCgpIGJlZm9yZSBzZXRfZm10KCkgb3Igc2V0X2Nyb3AoKSAqLwpAQCAtNDI2LDcgKzQxOSw3IEBACiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmICghaWNkLT5jdXJyZW50X2ZtdCB8fAogCQkgICBpY2QtPmN1cnJlbnRfZm10LT5ob3N0X2ZtdC0+Zm91cmNjICE9IHBpeC0+cGl4ZWxmb3JtYXQpIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoaWNkLT5wZGV2LAogCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ0MCw3ICs0MzMsNyBAQAogCWlmIChpY2ktPm9wcy0+aW5pdF92aWRlb2J1ZikKIAkJaWNkLT52Yl92aWRxLmZpZWxkID0gcGl4LT5maWVsZDsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAorCWRldl9kYmcoaWNkLT5wZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAogCQlpY2QtPnVzZXJfd2lkdGgsIGljZC0+dXNlcl9oZWlnaHQpOwogCiAJLyogc2V0IHBoeXNpY2FsIGJ1cyBwYXJhbWV0ZXJzICovCkBAIC00NTAsOSArNDQzLDcgQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gY29udGFpbmVyX29mKHZkZXYtPnBhcmVudCwKLQkJCQkJCSAgICAgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLAotCQkJCQkJICAgICBkZXYpOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZGV2X2dldF9kcnZkYXRhKHZkZXYtPnBhcmVudCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpOwogCWludCByZXQ7CkBAIC00NjEsMTAgKzQ1MiwxMCBAQAogCQkvKiBObyBkZXZpY2UgZHJpdmVyIGF0dGFjaGVkICovCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoaWNpLT5vcHMtPm93bmVyKSkgewotCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGxvY2sgY2FwdHVyZSBidXMgZHJpdmVyLlxuIik7CisJCWRldl9lcnIoaWNkLT5wZGV2LCAiQ291bGRuJ3QgbG9jayBjYXB0dXJlIGJ1cyBkcml2ZXIuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OTUsNyArNDg2LDcgQEAKIAogCQlyZXQgPSBpY2ktPm9wcy0+YWRkKGljZCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGFjdGl2YXRlIHRoZSBjYW1lcmE6ICVkXG4iLCByZXQpOworCQkJZGV2X2VycihpY2QtPnBkZXYsICJDb3VsZG4ndCBhY3RpdmF0ZSB0aGUgY2FtZXJhOiAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gZWljaWFkZDsKIAkJfQogCkBAIC01MjQsNyArNTE1LDcgQEAKIAl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBpY2Q7Ci0JZGV2X2RiZygmaWNkLT5kZXYsICJjYW1lcmEgZGV2aWNlIG9wZW5cbiIpOworCWRldl9kYmcoaWNkLT5wZGV2LCAiY2FtZXJhIGRldmljZSBvcGVuXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC01NDksNyArNTQwLDcgQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCiAJaWNkLT51c2VfY291bnQtLTsKIAlpZiAoIWljZC0+dXNlX2NvdW50KSB7CkBAIC01NzAsNyArNTYxLDcgQEAKIAogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKIAotCWRldl9kYmcoJmljZC0+ZGV2LCAiY2FtZXJhIGRldmljZSBjbG9zZVxuIik7CisJZGV2X2RiZyhpY2QtPnBkZXYsICJjYW1lcmEgZGV2aWNlIGNsb3NlXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTgxLDcgKzU3Miw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQlkZXZfZXJyKCZpY2QtPmRldiwgImNhbWVyYSBkZXZpY2UgcmVhZCBub3QgaW1wbGVtZW50ZWRcbiIpOworCWRldl9lcnIoaWNkLT5wZGV2LCAiY2FtZXJhIGRldmljZSByZWFkIG5vdCBpbXBsZW1lbnRlZFxuIik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTg5LDEwICs1ODAsMTAgQEAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCWludCBlcnI7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIm1tYXAgY2FsbGVkLCB2bWE9MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpdm1hKTsKKwlkZXZfZGJnKGljZC0+cGRldiwgIm1tYXAgY2FsbGVkLCB2bWE9MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpdm1hKTsKIAogCWlmIChpY2QtPnN0cmVhbWVyICE9IGZpbGUpCiAJCXJldHVybiAtRUJVU1k7CkBAIC02MDIsNyArNTkzLDcgQEAKIAllbHNlCiAJCWVyciA9IHZiMl9tbWFwKCZpY2QtPnZiMl92aWRxLCB2bWEpOwogCi0JZGV2X2RiZygmaWNkLT5kZXYsICJ2bWEgc3RhcnQ9MHglMDhseCwgc2l6ZT0lbGQsIHJldD0lZFxuIiwKKwlkZXZfZGJnKGljZC0+cGRldiwgInZtYSBzdGFydD0weCUwOGx4LCBzaXplPSVsZCwgcmV0PSVkXG4iLAogCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAogCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX2VuZCAtICh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCiAJCWVycik7CkBAIC02MTMsMTMgKzYwNCwxMyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzb2NfY2FtZXJhX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlpZiAoaWNkLT5zdHJlYW1lciAhPSBmaWxlKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGljaS0+b3BzLT5pbml0X3ZpZGVvYnVmICYmIGxpc3RfZW1wdHkoJmljZC0+dmJfdmlkcS5zdHJlYW0pKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiVHJ5aW5nIHRvIHBvbGwgd2l0aCBubyBxdWV1ZWQgYnVmZmVycyFcbiIpOworCQlkZXZfZXJyKGljZC0+cGRldiwgIlRyeWluZyB0byBwb2xsIHdpdGggbm8gcXVldWVkIGJ1ZmZlcnMhXG4iKTsKIAkJcmV0dXJuIFBPTExFUlI7CiAJfQogCkBAIC02NTksMTUgKzY1MCwxNSBAQAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCWRldl93YXJuKCZpY2QtPmRldiwgIldyb25nIGJ1Zi10eXBlICVkXG4iLCBmLT50eXBlKTsKKwkJZGV2X3dhcm4oaWNkLT5wZGV2LCAiV3JvbmcgYnVmLXR5cGUgJWRcbiIsIGYtPnR5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoaWNkLT5zdHJlYW1lciAmJiBpY2QtPnN0cmVhbWVyICE9IGZpbGUpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoaXNfc3RyZWFtaW5nKHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpLCBpY2QpKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiU19GTVQgZGVuaWVkOiBxdWV1ZSBpbml0aWFsaXNlZFxuIik7CisJaWYgKGlzX3N0cmVhbWluZyh0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpLCBpY2QpKSB7CisJCWRldl9lcnIoaWNkLT5wZGV2LCAiU19GTVQgZGVuaWVkOiBxdWV1ZSBpbml0aWFsaXNlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03MTYsNyArNzA3LDcgQEAKIAlwaXgtPmZpZWxkCQk9IGljZC0+ZmllbGQ7CiAJcGl4LT5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmhvc3RfZm10LT5mb3VyY2M7CiAJcGl4LT5jb2xvcnNwYWNlCQk9IGljZC0+Y29sb3JzcGFjZTsKLQlkZXZfZGJnKCZpY2QtPmRldiwgImN1cnJlbnRfZm10LT5mb3VyY2M6IDB4JTA4eFxuIiwKKwlkZXZfZGJnKGljZC0+cGRldiwgImN1cnJlbnRfZm10LT5mb3VyY2M6IDB4JTA4eFxuIiwKIAkJaWNkLT5jdXJyZW50X2ZtdC0+aG9zdF9mbXQtPmZvdXJjYyk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MjUsNyArNzE2LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCkBAIC03MzcsNyArNzI4LDcgQEAKIAkJCSAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWludCByZXQ7CiAKQEAgLTc2Niw3ICs3NTcsNyBAQAogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtNzk0LDcgKzc4NSw3IEBACiAJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCWludCBpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CkBAIC04MjUsNyArODE2LDcgQEAKIAkJCSAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBzb2NfY2FtZXJhX3RvX3N1YmRldihpY2QpOwogCWludCByZXQ7CiAKQEAgLTg0NCw3ICs4MzUsNyBAQAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJaW50IHJldDsKIApAQCAtODYzLDcgKzg1NCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICphKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAKIAlyZXR1cm4gaWNpLT5vcHMtPmNyb3BjYXAoaWNkLCBhKTsKIH0KQEAgLTg3Miw3ICs4NjMsNyBAQAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jcm9wICphKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJaW50IHJldDsKIAogCXJldCA9IGljaS0+b3BzLT5nZXRfY3JvcChpY2QsIGEpOwpAQCAtODg5LDcgKzg4MCw3IEBACiAJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0ID0gJmEtPmM7CiAJc3RydWN0IHY0bDJfY3JvcCBjdXJyZW50X2Nyb3A7CiAJaW50IHJldDsKQEAgLTg5Nyw3ICs4ODgsNyBAQAogCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkZXZfZGJnKCZpY2QtPmRldiwgIlNfQ1JPUCgldXgldUAldToldSlcbiIsCisJZGV2X2RiZyhpY2QtPnBkZXYsICJTX0NST1AoJXV4JXVAJXU6JXUpXG4iLAogCQlyZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOwogCiAJLyogSWYgZ2V0X2Nyb3AgZmFpbHMsIHdlJ2xsIGxldCBob3N0IGFuZCAvIG9yIGNsaWVudCBkcml2ZXJzIGRlY2lkZSAqLwpAQCAtOTA1LDcgKzg5Niw3IEBACiAKIAkvKiBQcm9oaWJpdCB3aW5kb3cgc2l6ZSBjaGFuZ2Ugd2l0aCBpbml0aWFsaXNlZCBidWZmZXJzICovCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsCisJCWRldl9lcnIoaWNkLT5wZGV2LAogCQkJIlNfQ1JPUCBkZW5pZWQ6IGdldHRpbmcgY3VycmVudCBjcm9wIGZhaWxlZFxuIik7CiAJfSBlbHNlIGlmICgoYS0+Yy53aWR0aCA9PSBjdXJyZW50X2Nyb3AuYy53aWR0aCAmJgogCQkgICAgYS0+Yy5oZWlnaHQgPT0gY3VycmVudF9jcm9wLmMuaGVpZ2h0KSB8fApAQCAtOTE1LDcgKzkwNiw3IEBACiAJfSBlbHNlIGlmIChpY2ktPm9wcy0+c2V0X2xpdmVjcm9wKSB7CiAJCXJldCA9IGljaS0+b3BzLT5zZXRfbGl2ZWNyb3AoaWNkLCBhKTsKIAl9IGVsc2UgewotCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJZGV2X2VycihpY2QtPnBkZXYsCiAJCQkiU19DUk9QIGRlbmllZDogcXVldWUgaW5pdGlhbGlzZWQgYW5kIHNpemVzIGRpZmZlclxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAl9CkBAIC05MjcsNyArOTE4LDcgQEAKIAkJCSAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwogCiAJaWYgKGljaS0+b3BzLT5nZXRfcGFybSkKIAkJcmV0dXJuIGljaS0+b3BzLT5nZXRfcGFybShpY2QsIGEpOwpAQCAtOTM5LDcgKzkzMCw3IEBACiAJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAogCWlmIChpY2ktPm9wcy0+c2V0X3Bhcm0pCiAJCXJldHVybiBpY2ktPm9wcy0+c2V0X3Bhcm0oaWNkLCBhKTsKQEAgLTk3Niw2ICs5NjcsOCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CisKIC8qIFNvIGZhciB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBmYWlsICovCiBzdGF0aWMgdm9pZCBzY2FuX2FkZF9ob3N0KHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSkKIHsKQEAgLTk4NiwxNSArOTc5LDkgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljZCwgJmRldmljZXMsIGxpc3QpIHsKIAkJaWYgKGljZC0+aWZhY2UgPT0gaWNpLT5ucikgewogCQkJaW50IHJldDsKLQkJCWljZC0+ZGV2LnBhcmVudCA9IGljaS0+djRsMl9kZXYuZGV2OwotCQkJZGV2X3NldF9uYW1lKCZpY2QtPmRldiwgIiV1LSV1IiwgaWNkLT5pZmFjZSwKLQkJCQkgICAgIGljZC0+ZGV2bnVtKTsKLQkJCXJldCA9IGRldmljZV9yZWdpc3RlcigmaWNkLT5kZXYpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOwotCQkJCWRldl9lcnIoJmljZC0+ZGV2LAotCQkJCQkiQ2Fubm90IHJlZ2lzdGVyIGRldmljZTogJWRcbiIsIHJldCk7Ci0JCQl9CisKKwkJCWljZC0+cGFyZW50ID0gaWNpLT52NGwyX2Rldi5kZXY7CisJCQlyZXQgPSBzb2NfY2FtZXJhX3Byb2JlKGljZCk7CiAJCX0KIAl9CiAKQEAgLTEwMDYsMTIgKzk5MywxMiBAQAogCQkJICAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OwogCiAJaWYgKCFhZGFwKSB7Ci0JCWRldl9lcnIoJmljZC0+ZGV2LCAiQ2Fubm90IGdldCBJMkMgYWRhcHRlciAjJWQuIE5vIGRyaXZlcj9cbiIsCisJCWRldl9lcnIoaWNkLT5wZGV2LCAiQ2Fubm90IGdldCBJMkMgYWRhcHRlciAjJWQuIE5vIGRyaXZlcj9cbiIsCiAJCQlpY2wtPmkyY19hZGFwdGVyX2lkKTsKIAkJZ290byBlaTJjZ2E7CiAJfQpAQCAtMTAyNiw3ICsxMDEzLDcgQEAKIAljbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHN1YmRldik7CiAKIAkvKiBVc2UgdG9faTJjX2NsaWVudChkZXYpIHRvIHJlY292ZXIgdGhlIGkyYyBjbGllbnQgKi8KLQlkZXZfc2V0X2RydmRhdGEoJmljZC0+ZGV2LCAmY2xpZW50LT5kZXYpOworCWljZC0+Y29udHJvbCA9ICZjbGllbnQtPmRldjsKIAogCXJldHVybiAwOwogZWkyY25kOgpAQCAtMTA0MCw3ICsxMDI3LDggQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0KIAkJdG9faTJjX2NsaWVudCh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gY2xpZW50LT5hZGFwdGVyOwotCWRldl9zZXRfZHJ2ZGF0YSgmaWNkLT5kZXYsIE5VTEwpOworCisJaWNkLT5jb250cm9sID0gTlVMTDsKIAl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CiAJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwpAQCAtMTA1MywxNyArMTA0MSwxNiBAQAogc3RhdGljIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKIHN0YXRpYyBpbnQgdmlkZW9fZGV2X2NyZWF0ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCk7CiAvKiBDYWxsZWQgZHVyaW5nIGhvc3QtZHJpdmVyIHByb2JlICovCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzb2NfY2FtZXJhX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoZGV2LT5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gdG9fc29jX2NhbWVyYV9saW5rKGljZCk7CiAJc3RydWN0IGRldmljZSAqY29udHJvbCA9IE5VTEw7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1mOwogCWludCByZXQ7CiAKLQlkZXZfaW5mbyhkZXYsICJQcm9iaW5nICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKKwlkZXZfaW5mbyhpY2QtPnBkZXYsICJQcm9iaW5nICVzXG4iLCBkZXZfbmFtZShpY2QtPnBkZXYpKTsKIAogCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChpY2QtPnBkZXYsIGljbC0+bnVtX3JlZ3VsYXRvcnMsCiAJCQkJIGljbC0+cmVndWxhdG9ycyk7CkBAIC0xMDk5LDcgKzEwODYsNyBAQAogCQlpZiAoaWNsLT5tb2R1bGVfbmFtZSkKIAkJCXJldCA9IHJlcXVlc3RfbW9kdWxlKGljbC0+bW9kdWxlX25hbWUpOwogCi0JCXJldCA9IGljbC0+YWRkX2RldmljZShpY2wsICZpY2QtPmRldik7CisJCXJldCA9IGljbC0+YWRkX2RldmljZShpY2QpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZWFkZGRldjsKIApAQCAtMTExMCw3ICsxMDk3LDcgQEAKIAkJY29udHJvbCA9IHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpOwogCQlpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wtPmRyaXZlciB8fCAhZGV2X2dldF9kcnZkYXRhKGNvbnRyb2wpIHx8CiAJCSAgICAhdHJ5X21vZHVsZV9nZXQoY29udHJvbC0+ZHJpdmVyLT5vd25lcikpIHsKLQkJCWljbC0+ZGVsX2RldmljZShpY2wpOworCQkJaWNsLT5kZWxfZGV2aWNlKGljZCk7CiAJCQlnb3RvIGVub2RydjsKIAkJfQogCX0KQEAgLTExMjUsOCArMTExMiw2IEBACiAKIAlpY2QtPmZpZWxkID0gVjRMMl9GSUVMRF9BTlk7CiAKLQlpY2QtPnZkZXYtPmxvY2sgPSAmaWNkLT52aWRlb19sb2NrOwotCiAJLyoKIAkgKiAuLi5fdmlkZW9fc3RhcnQoKSB3aWxsIGNyZWF0ZSBhIGRldmljZSBub2RlLCB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKQogCSAqIGl0c2VsZiBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBjb25jdXJyZW50IG9wZW4oKSBjYWxscywgYnV0IHdlIGFsc28gaGF2ZQpAQCAtMTE0NiwxMSArMTEzMSw2IEBACiAJCWljZC0+ZmllbGQJCT0gbWYuZmllbGQ7CiAJfQogCi0JLyogRG8gd2UgaGF2ZSB0byBzeXNmc19yZW1vdmVfbGluaygpIGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpPyAqLwotCWlmIChzeXNmc19jcmVhdGVfbGluaygmaWNkLT5kZXYua29iaiwgJnRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpLT5rb2JqLAotCQkJICAgICAgImNvbnRyb2wiKSkKLQkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiRmFpbGVkIGNyZWF0aW5nIHRoZSBjb250cm9sIHN5bWxpbmtcbiIpOwotCiAJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogCiAJc29jX2NhbWVyYV9wb3dlcl9zZXQoaWNkLCBpY2wsIDApOwpAQCAtMTE2Niw3ICsxMTQ2LDcgQEAKIAlpZiAoaWNsLT5ib2FyZF9pbmZvKSB7CiAJCXNvY19jYW1lcmFfZnJlZV9pMmMoaWNkKTsKIAl9IGVsc2UgewotCQlpY2wtPmRlbF9kZXZpY2UoaWNsKTsKKwkJaWNsLT5kZWxfZGV2aWNlKGljZCk7CiAJCW1vZHVsZV9wdXQoY29udHJvbC0+ZHJpdmVyLT5vd25lcik7CiAJfQogZW5vZHJ2OgpAQCAtMTE4NiwxMyArMTE2NiwxMiBAQAogICogVGhpcyBpcyBjYWxsZWQgb24gZGV2aWNlX3VucmVnaXN0ZXIsIHdoaWNoIG9ubHkgbWVhbnMgd2UgaGF2ZSB0byBkaXNjb25uZWN0CiAgKiBmcm9tIHRoZSBob3N0LCBidXQgbm90IHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZGV2aWNlIGxpc3QKICAqLwotc3RhdGljIGludCBzb2NfY2FtZXJhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNvY19jYW1lcmFfcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaWNkLT52ZGV2OwogCi0JQlVHX09OKCFkZXYtPnBhcmVudCk7CisJQlVHX09OKCFpY2QtPnBhcmVudCk7CiAKIAlpZiAodmRldikgewogCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2ZGV2KTsKQEAgLTEyMDIsMTAgKzExODEsOSBAQAogCWlmIChpY2wtPmJvYXJkX2luZm8pIHsKIAkJc29jX2NhbWVyYV9mcmVlX2kyYyhpY2QpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSB0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSA/Ci0JCQl0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKS0+ZHJpdmVyIDogTlVMTDsKKwkJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpLT5kcml2ZXI7CiAJCWlmIChkcnYpIHsKLQkJCWljbC0+ZGVsX2RldmljZShpY2wpOworCQkJaWNsLT5kZWxfZGV2aWNlKGljZCk7CiAJCQltb2R1bGVfcHV0KGRydi0+b3duZXIpOwogCQl9CiAJfQpAQCAtMTIxNiw0OSArMTE5NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29jX2NhbWVyYV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYoZGV2KTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChpY2ktPm9wcy0+c3VzcGVuZCkKLQkJcmV0ID0gaWNpLT5vcHMtPnN1c3BlbmQoaWNkLCBzdGF0ZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNvY19jYW1lcmFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHRvX3NvY19jYW1lcmFfZGV2KGRldik7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoaWNpLT5vcHMtPnJlc3VtZSkKLQkJcmV0ID0gaWNpLT5vcHMtPnJlc3VtZShpY2QpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IGJ1c190eXBlIHNvY19jYW1lcmFfYnVzX3R5cGUgPSB7Ci0JLm5hbWUJCT0gInNvYy1jYW1lcmEiLAotCS5wcm9iZQkJPSBzb2NfY2FtZXJhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NhbWVyYV9yZW1vdmUsCi0JLnN1c3BlbmQJPSBzb2NfY2FtZXJhX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzb2NfY2FtZXJhX3Jlc3VtZSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzb2NfY2FtZXJhX2J1c190eXBlKTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGljX2RydiA9IHsKLQkubmFtZQk9ICJjYW1lcmEiLAotCS5idXMJPSAmc29jX2NhbWVyYV9idXNfdHlwZSwKLQkub3duZXIJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyB2b2lkIGR1bW15X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotfQotCiBzdGF0aWMgaW50IGRlZmF1bHRfY3JvcGNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmEpCiB7CkBAIC0xMzE3LDEzICsxMjUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc29jX2NhbWVyYV9kZXZpY2VfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnBkYXRhKQotewotCWRldi0+cGxhdGZvcm1fZGF0YQk9IHBkYXRhOwotCWRldi0+YnVzCQk9ICZzb2NfY2FtZXJhX2J1c190eXBlOwotCWRldi0+cmVsZWFzZQkJPSBkdW1teV9yZWxlYXNlOwotfQotCiBpbnQgc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSkKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppeDsKQEAgLTEzODksMjQgKzEzMTcsOSBAQAogCW11dGV4X2xvY2soJmxpc3RfbG9jayk7CiAKIAlsaXN0X2RlbCgmaWNpLT5saXN0KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNkLCAmZGV2aWNlcywgbGlzdCkgewotCQlpZiAoaWNkLT5pZmFjZSA9PSBpY2ktPm5yKSB7Ci0JCQl2b2lkICpwZGF0YSA9IGljZC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JCQkvKiBUaGUgYnVzLT5yZW1vdmUgd2lsbCBiZSBjYWxsZWQgKi8KLQkJCWRldmljZV91bnJlZ2lzdGVyKCZpY2QtPmRldik7Ci0JCQkvKgotCQkJICogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCi0JCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkuCi0JCQkgKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQotCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQsIiBzaW5jZSAyLjYuMzIKLQkJCSAqIHRoaXMgaXMgYWxzbyBuZWVkZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUKLQkJCSAqIGRldmljZSBwcml2YXRlIGRhdGEuCi0JCQkgKi8KLQkJCW1lbXNldCgmaWNkLT5kZXYsIDAsIHNpemVvZihpY2QtPmRldikpOwotCQkJc29jX2NhbWVyYV9kZXZpY2VfaW5pdCgmaWNkLT5kZXYsIHBkYXRhKTsKLQkJfQotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljZCwgJmRldmljZXMsIGxpc3QpCisJCWlmIChpY2QtPmlmYWNlID09IGljaS0+bnIgJiYgdG9fc29jX2NhbWVyYV9jb250cm9sKGljZCkpCisJCQlzb2NfY2FtZXJhX3JlbW92ZShpY2QpOwogCiAJbXV0ZXhfdW5sb2NrKCZsaXN0X2xvY2spOwogCkBAIC0xNDQ4LDExICsxMzYxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKLXsKLQlsaXN0X2RlbCgmaWNkLT5saXN0KTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzb2NfY2FtZXJhX2lvY3RsX29wcyA9IHsKIAkudmlkaW9jX3F1ZXJ5Y2FwCSA9IHNvY19jYW1lcmFfcXVlcnljYXAsCiAJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgID0gc29jX2NhbWVyYV9nX2ZtdF92aWRfY2FwLApAQCAtMTQ4Nyw3ICsxMzk1LDcgQEAKIAogc3RhdGljIGludCB2aWRlb19kZXZfY3JlYXRlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCiAJaWYgKCF2ZGV2KQpAQCAtMTQ5NSwxMiArMTQwMywxMyBAQAogCiAJc3RybGNweSh2ZGV2LT5uYW1lLCBpY2ktPmRydl9uYW1lLCBzaXplb2YodmRldi0+bmFtZSkpOwogCi0JdmRldi0+cGFyZW50CQk9ICZpY2QtPmRldjsKKwl2ZGV2LT5wYXJlbnQJCT0gaWNkLT5wZGV2OwogCXZkZXYtPmN1cnJlbnRfbm9ybQk9IFY0TDJfU1REX1VOS05PV047CiAJdmRldi0+Zm9wcwkJPSAmc29jX2NhbWVyYV9mb3BzOwogCXZkZXYtPmlvY3RsX29wcwkJPSAmc29jX2NhbWVyYV9pb2N0bF9vcHM7CiAJdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZGV2LT50dm5vcm1zCQk9IFY0TDJfU1REX1VOS05PV047CisJdmRldi0+bG9jawkJPSAmaWNkLT52aWRlb19sb2NrOwogCiAJaWNkLT52ZGV2ID0gdmRldjsKIApAQCAtMTUxNSw3ICsxNDI0LDcgQEAKIAljb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBpY2QtPnZkZXYtPmRldi50eXBlOwogCWludCByZXQ7CiAKLQlpZiAoIWljZC0+ZGV2LnBhcmVudCkKKwlpZiAoIWljZC0+cGFyZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghaWNkLT5vcHMgfHwKQEAgLTE1MjUsNyArMTQzNCw3IEBACiAKIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoaWNkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmaWNkLT5kZXYsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2VycihpY2QtPnBkZXYsICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE1NDksNiArMTQ1OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWNkLT5pZmFjZSA9IGljbC0+YnVzX2lkOworCWljZC0+bGluayA9IGljbDsKIAlpY2QtPnBkZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGljZCk7CiAKQEAgLTE1NTYsOCArMTQ2Niw2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXNjZGV2cmVnOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfaW5pdCgmaWNkLT5kZXYsIGljbCk7Ci0KIAlpY2QtPnVzZXJfd2lkdGgJCT0gREVGQVVMVF9XSURUSDsKIAlpY2QtPnVzZXJfaGVpZ2h0CT0gREVGQVVMVF9IRUlHSFQ7CiAKQEAgLTE1ODEsNyArMTQ4OSw3IEBACiAJaWYgKCFpY2QpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcihpY2QpOworCWxpc3RfZGVsKCZpY2QtPmxpc3QpOwogCiAJa2ZyZWUoaWNkKTsKIApAQCAtMTU5OCwzMSArMTUwNiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzb2NfY2FtZXJhX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gYnVzX3JlZ2lzdGVyKCZzb2NfY2FtZXJhX2J1c190eXBlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmaWNfZHJ2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVkcnZyOwotCi0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzb2NfY2FtZXJhX3BkcnYsIHNvY19jYW1lcmFfcGRydl9wcm9iZSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcGRyOwotCi0JcmV0dXJuIDA7Ci0KLWVwZHI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmljX2Rydik7Ci1lZHJ2cjoKLQlidXNfdW5yZWdpc3Rlcigmc29jX2NhbWVyYV9idXNfdHlwZSk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzb2NfY2FtZXJhX3BkcnYsIHNvY19jYW1lcmFfcGRydl9wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzb2NfY2FtZXJhX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29jX2NhbWVyYV9wZHJ2KTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaWNfZHJ2KTsKLQlidXNfdW5yZWdpc3Rlcigmc29jX2NhbWVyYV9idXNfdHlwZSk7CiB9CiAKIG1vZHVsZV9pbml0KHNvY19jYW1lcmFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IGJmNDA2ZTguLjgwNjljZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlpZiAoIXApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFwLT5kZXYpIHsKKwlpZiAoIXAtPmljZCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiUGxhdGZvcm0gaGFzIG5vdCBzZXQgc29jX2NhbWVyYV9kZXZpY2UgcG9pbnRlciFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1NiwxNiArMTU2LDE2IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWljZCA9IHRvX3NvY19jYW1lcmFfZGV2KHAtPmRldik7CisJaWNkID0gcC0+aWNkOwogCiAJLyogc29jLWNhbWVyYSBjb252ZW50aW9uOiBjb250cm9sJ3MgZHJ2ZGF0YSBwb2ludHMgdG8gdGhlIHN1YmRldiAqLwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZwcml2LT5zdWJkZXYpOwogCS8qIFNldCB0aGUgY29udHJvbCBkZXZpY2UgcmVmZXJlbmNlICovCi0JZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgJnBkZXYtPmRldik7CisJaWNkLT5jb250cm9sID0gJnBkZXYtPmRldjsKIAogCWljZC0+b3BzID0gJnNvY19jYW1lcmFfcGxhdGZvcm1fb3BzOwogCi0JaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAogCXY0bDJfc3ViZGV2X2luaXQoJnByaXYtPnN1YmRldiwgJnBsYXRmb3JtX3N1YmRldl9vcHMpOwogCXY0bDJfc2V0X3N1YmRldmRhdGEoJnByaXYtPnN1YmRldiwgcCk7CkBAIC0xODgsNyArMTg4LDcgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9wcml2ICpwcml2ID0gZ2V0X3ByaXYocGRldik7CiAJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdG9fc29jX2NhbWVyYV9kZXYocC0+ZGV2KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHAtPmljZDsKIAogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZwcml2LT5zdWJkZXYpOwogCWljZC0+b3BzID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3IwMzBwYzMwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NyMDMwcGMzMC5jCmluZGV4IGM5MDE3MjEuLjhhZmIwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3IwMzBwYzMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zcjAzMHBjMzAuYwpAQCAtNzI2LDggKzcyNiwxMCBAQAogCWNvbnN0IHN0cnVjdCBzcjAzMHBjMzBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBpbmZvLT5wZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKFdBUk4ocGRhdGEgPT0gTlVMTCwgIk5vIHBsYXRmb3JtIGRhdGEhXG4iKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJV0FSTigxLCAiTm8gcGxhdGZvcm0gZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKgogCSAqIFB1dCBzZW5zb3IgaW50byBwb3dlciBzbGVlcCBtb2RlIGJlZm9yZSBzd2l0Y2hpbmcgb2ZmCkBAIC03NDYsNiArNzQ4LDcgQEAKIAlpZiAob24pIHsKIAkJcmV0ID0gc3IwMzBwYzMwX2Jhc2VfY29uZmlnKHNkKTsKIAl9IGVsc2UgeworCQlyZXQgPSAwOwogCQlpbmZvLT5jdXJyX3dpbiA9IE5VTEw7CiAJCWluZm8tPmN1cnJfZm10ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jCmluZGV4IDM5NDFmOTUuLmJkMjE4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jCkBAIC00OSwxMCArNDksMTEgQEAKIHN0YXRpYyBpbnQgbG91ZG5lc3M7IC8qIGRpc2FibGUgbG91ZG5lc3MgYnkgZGVmYXVsdCAqLwogc3RhdGljIGludCBkZWJ1ZzsJIC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU2V0IGRlYnVnZ2luZyBsZXZlbCBmcm9tIDAgdG8gMy4gRGVmYXVsdCBpcyBvZmYoMCkuIik7CiBtb2R1bGVfcGFyYW0obG91ZG5lc3MsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heHZvbCwiU2V0IG1heGltaXVtIHZvbHVtZSB0byArMjBkYiAoMCksIGRlZmF1bHQgaXMgMGRiKDEpIik7CitNT0RVTEVfUEFSTV9ERVNDKGxvdWRuZXNzLCAiVHVybiBsb3VkbmVzcyBvbigxKSBlbHNlIG9mZigwKS4gRGVmYXVsdCBpcyBvZmYoMCkuIik7CiBtb2R1bGVfcGFyYW0obWF4dm9sLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKLQorTU9EVUxFX1BBUk1fREVTQyhtYXh2b2wsICJTZXQgbWF4aW1pdW0gdm9sdW1lIHRvICsyMGRCKDApIGVsc2UgKzBkQigxKS4gRGVmYXVsdCBpcyArMjBkQigwKS4iKTsKIAogCiAvKiBTdHJ1Y3R1cmUgb2YgYWRkcmVzcyBhbmQgc3ViYWRkcmVzc2VzIGZvciB0aGUgdGRhNzQzMiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90aW1ibG9naXcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGltYmxvZ2l3LmMKaW5kZXggZmM2MTFlYi4uODRjZDFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90aW1ibG9naXcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RpbWJsb2dpdy5jCkBAIC0yMCw3ICsyMCw2IEBACiAgKiBUaW1iZXJkYWxlIEZQR0EgTG9naVdpbiBWaWRlbyBJbgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWNvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWNvbW1vbi5oCmluZGV4IDQ2MDY2YmQuLjU2NTY0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtY29tbW9uLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIFBEX0NPTU1PTl9ICiAjZGVmaW5lIFBEX0NPTU1PTl9ICiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMKaW5kZXggOTljODFhOS4uMTI5ZjEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtbWFpbi5jCkBAIC01MzEsMyArNTMxLDQgQEAKIE1PRFVMRV9BVVRIT1IoIlRlbGVnZW50IFN5c3RlbXMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRm9yIHRsZzIzMDAtYmFzZWQgVVNCIGRldmljZSAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjAuMiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYwppbmRleCBmYWU4NGMyLi40ZmFkMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYwpAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgpAQCAtMTQ5LDcgKzE0OCw2IEBACiAJc3RybGNweSh2LT5kcml2ZXIsICJ0ZWxlLXJhZGlvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlRlbGVnZW50IFBvc2VpZG9uIiwgc2l6ZW9mKHYtPmNhcmQpKTsKIAl1c2JfbWFrZV9wYXRoKHAtPnVkZXYsIHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKLQl2LT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSk7CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggYTAzOTQ1YS4uMTFjYzk4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ0ZGE5ODg3LmgiCiAjaW5jbHVkZSAieGM1MDAwLmgiCiAjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJ4YzQwMDAuaCIKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0zOTEsNiArMzkyLDIzIEBACiAJCXR1bmVfbm93ID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgVFVORVJfWEM0MDAwOgorCXsKKwkJc3RydWN0IHhjNDAwMF9jb25maWcgeGM0MDAwX2NmZyA9IHsKKwkJCS5pMmNfYWRkcmVzcwkgID0gdC0+aTJjLT5hZGRyLAorCQkJLyogRklYTUU6IHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgd2lsbCBiZSBzZXQgKi8KKwkJCS8qIG9ubHkgd2hlbiB0aGUgZGlnaXRhbCBkdmJfYXR0YWNoKCkgb2NjdXJzICovCisJCQkuZGVmYXVsdF9wbQkgID0gMCwKKwkJCS5kdmJfYW1wbGl0dWRlCSAgPSAwLAorCQkJLnNldF9zbW9vdGhlZGN2YnMgPSAwLAorCQkJLmlmX2toegkJICA9IDAKKwkJfTsKKwkJaWYgKCFkdmJfYXR0YWNoKHhjNDAwMF9hdHRhY2gsCisJCQkJJnQtPmZlLCB0LT5pMmMtPmFkYXB0ZXIsICZ4YzQwMDBfY2ZnKSkKKwkJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKKwkJdHVuZV9ub3cgPSAwOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsICZ0LT5mZSwKIAkJCQl0LT5pMmMtPmFkYXB0ZXIsIHQtPmkyYy0+YWRkciwgdC0+dHlwZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwppbmRleCAwMzQ3YmJlLi43NDI0ODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKQEAgLTU1MiwxNiArNTUyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR3OTkxMF9lbnVtX2lucHV0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQotewotCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKLQlpbnAtPnN0ZCAgPSBWNEwyX1NURF9VTktOT1dOOwotCXN0cmNweShpbnAtPm5hbWUsICJWaWRlbyIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdHc5OTEwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICppZCkKIHsKQEAgLTg0NiwxMyArODM2LDkgQEAKIAlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSB0b190dzk5MTAoY2xpZW50KTsKIAlzMzIgaWQ7CiAKLQkvKgotCSAqIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCi0JICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KLQkgKi8KLQlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAotCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4gKi8KKwlCVUdfT04oIWljZC0+cGFyZW50IHx8CisJICAgICAgIHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpOwogCiAJLyoKIAkgKiB0dzk5MTAgb25seSB1c2UgOCBvciAxNiBiaXQgYnVzIHdpZHRoCkBAIC04OTEsNyArODc3LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgdHc5OTEwX29wcyA9IHsKIAkuc2V0X2J1c19wYXJhbQkJPSB0dzk5MTBfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gdHc5OTEwX3F1ZXJ5X2J1c19wYXJhbSwKLQkuZW51bV9pbnB1dAkJPSB0dzk5MTBfZW51bV9pbnB1dCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdHc5OTEwX3N1YmRldl9jb3JlX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggZWE4ZWE4YS4uNWE3NGY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTc3LDE1ICs3Niw3IEBACiAjZGVmaW5lIERSSVZFUl9BTElBUyAiVVNCVmlzaW9uIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCVmlzaW9uIFVTQiBWaWRlbyBEZXZpY2UgRHJpdmVyIGZvciBMaW51eCIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKLSNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01BSk9SIDAKLSNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX01JTk9SIDkKLSNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMTAKLSNkZWZpbmUgVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTl9NQUpPUixcCi1VU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUlOT1IsXAotVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCi0jZGVmaW5lIFVTQlZJU0lPTl9WRVJTSU9OX1NUUklORyBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUFKT1IpIFwKLSIuIiBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fTUlOT1IpIFwKLSIuIiBfX3N0cmluZ2lmeShVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKKyNkZWZpbmUgVVNCVklTSU9OX1ZFUlNJT05fU1RSSU5HICIwLjkuMTEiCiAKICNkZWZpbmUJRU5BQkxFX0hFWERVTVAJMAkvKiBFbmFibGUgaWYgeW91IG5lZWQgaXQgKi8KIApAQCAtNTE2LDcgKzUwNyw2IEBACiAJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPmRldl9tb2RlbF0ubW9kZWxfc3RyaW5nLAogCQlzaXplb2YodmMtPmNhcmQpKTsKIAl1c2JfbWFrZV9wYXRoKHVzYnZpc2lvbi0+ZGV2LCB2Yy0+YnVzX2luZm8sIHNpemVvZih2Yy0+YnVzX2luZm8pKTsKLQl2Yy0+dmVyc2lvbiA9IFVTQlZJU0lPTl9EUklWRVJfVkVSU0lPTjsKIAl2Yy0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX0FVRElPIHwKIAkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IDJjODk1NGUuLjEwYzIzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMTY2NCw4ICsxNjY0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogU2VhcmNoIGZvciB0aGUgbWF0Y2hpbmcgKEdVSUQvQ1MpIGNvbnRyb2wgaW4gdGhlIGdpdmVuIGRldmljZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmZGV2LT5lbnRpdGllcywgbGlzdCkgeworCS8qIFNlYXJjaCBmb3IgdGhlIG1hdGNoaW5nIChHVUlEL0NTKSBjb250cm9sIG9uIHRoZSBjdXJyZW50IGNoYWluICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRpdHksICZjaGFpbi0+ZW50aXRpZXMsIGNoYWluKSB7CiAJCXVuc2lnbmVkIGludCBpOwogCiAJCWlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSAhPSBVVkNfVkNfRVhURU5TSU9OX1VOSVQgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCBiNmVhZTQ4Li5kMjlmOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtMTg1Nyw3ICsxODU4LDcgQEAKIAkJCXNpemVvZihkZXYtPm1kZXYuc2VyaWFsKSk7CiAJc3RyY3B5KGRldi0+bWRldi5idXNfaW5mbywgdWRldi0+ZGV2cGF0aCk7CiAJZGV2LT5tZGV2Lmh3X3JldmlzaW9uID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOwotCWRldi0+bWRldi5kcml2ZXJfdmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKKwlkZXYtPm1kZXYuZHJpdmVyX3ZlcnNpb24gPSBMSU5VWF9WRVJTSU9OX0NPREU7CiAJaWYgKG1lZGlhX2RldmljZV9yZWdpc3RlcigmZGV2LT5tZGV2KSA8IDApCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTIxMzAsNiArMjEzMSwxNSBAQAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8gCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVgKIAkJCQl8IFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVCB9LAorCS8qIEZveGxpbmsgKCJIUCBXZWJjYW0iIG9uIEhQIE1pbmkgNTEwMykgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDA1YzgsCisJICAuaWRQcm9kdWN0CQk9IDB4MDQwMywKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19GSVhfQkFORFdJRFRIIH0sCiAJLyogR2VuZXN5cyBMb2dpYyBVU0IgMi4wIFBDIENhbWVyYSAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggZGRlNjUzMy4uZWE3MWQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC04Myw3ICs4Myw3IEBACiAJZGVmYXVsdDoKIAkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiVW5zdXBwb3J0ZWQgVjRMMiBjb250cm9sIHR5cGUgIgogCQkJICAiJXUuXG4iLCB4bWFwLT52NGwyX3R5cGUpOwotCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSAtRU5PVFRZOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC01NzEsNyArNTcxLDcgQEAKIAkJc3RybGNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIHNpemVvZiBjYXAtPmNhcmQpOwogCQl1c2JfbWFrZV9wYXRoKHN0cmVhbS0+ZGV2LT51ZGV2LAogCQkJICAgICAgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKLQkJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOworCQljYXAtPnZlcnNpb24gPSBMSU5VWF9WRVJTSU9OX0NPREU7CiAJCWlmIChzdHJlYW0tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCiAJCQkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCAyMDEwN2ZkLi5kZjMyYTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTE4Myw4ICsxODMsNyBAQAogICogRHJpdmVyIHNwZWNpZmljIGNvbnN0YW50cy4KICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigxLCAxLCAwKQotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInYxLjEuMCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIxLjEuMSIKIAogLyogTnVtYmVyIG9mIGlzb2Nocm9ub3VzIFVSQnMuICovCiAjZGVmaW5lIFVWQ19VUkJTCQk1CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggMDZiOWY5Zi4uNWM2MTAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMTA1LDYgKzEwNSw5IEBACiAJCSAgICBtZW51X2l0ZW1zW2N0cmwtPnZhbHVlXVswXSA9PSAnXDAnKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChxY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLICYmCisJCQkoY3RybC0+dmFsdWUgJiB+cWN0cmwtPm1heGltdW0pKQorCQlyZXR1cm4gLUVSQU5HRTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2NoZWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKaW5kZXggN2MyNjk0Ny4uNjE5NzliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTY2Miw2ICs2NjIsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IHY0bDJfZXZlbnQzMiB7CisJX191MzIJCQkJdHlwZTsKKwl1bmlvbiB7CisJCV9fdTgJCQlkYXRhWzY0XTsKKwl9IHU7CisJX191MzIJCQkJcGVuZGluZzsKKwlfX3UzMgkJCQlzZXF1ZW5jZTsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjCQl0aW1lc3RhbXA7CisJX191MzIJCQkJaWQ7CisJX191MzIJCQkJcmVzZXJ2ZWRbOF07Cit9OworCitzdGF0aWMgaW50IHB1dF92NGwyX2V2ZW50MzIoc3RydWN0IHY0bDJfZXZlbnQgKmtwLCBzdHJ1Y3QgdjRsMl9ldmVudDMyIF9fdXNlciAqdXApCit7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2V2ZW50MzIpKSB8fAorCQlwdXRfdXNlcihrcC0+dHlwZSwgJnVwLT50eXBlKSB8fAorCQljb3B5X3RvX3VzZXIoJnVwLT51LCAma3AtPnUsIHNpemVvZihrcC0+dSkpIHx8CisJCXB1dF91c2VyKGtwLT5wZW5kaW5nLCAmdXAtPnBlbmRpbmcpIHx8CisJCXB1dF91c2VyKGtwLT5zZXF1ZW5jZSwgJnVwLT5zZXF1ZW5jZSkgfHwKKwkJcHV0X2NvbXBhdF90aW1lc3BlYygma3AtPnRpbWVzdGFtcCwgJnVwLT50aW1lc3RhbXApIHx8CisJCXB1dF91c2VyKGtwLT5pZCwgJnVwLT5pZCkgfHwKKwkJY29weV90b191c2VyKHVwLT5yZXNlcnZlZCwga3AtPnJlc2VydmVkLCA4ICogc2l6ZW9mKF9fdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZSBWSURJT0NfR19GTVQzMgkJX0lPV1IoJ1YnLCAgNCwgc3RydWN0IHY0bDJfZm9ybWF0MzIpCiAjZGVmaW5lIFZJRElPQ19TX0ZNVDMyCQlfSU9XUignVicsICA1LCBzdHJ1Y3QgdjRsMl9mb3JtYXQzMikKICNkZWZpbmUgVklESU9DX1FVRVJZQlVGMzIJX0lPV1IoJ1YnLCAgOSwgc3RydWN0IHY0bDJfYnVmZmVyMzIpCkBAIC02NzUsNiArNzAxLDcgQEAKICNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTMzIgICAgX0lPV1IoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIpCiAjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUzMyICAgIF9JT1dSKCdWJywgNzIsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sczMyKQogI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUzMyICBfSU9XUignVicsIDczLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMzMikKKyNkZWZpbmUJVklESU9DX0RRRVZFTlQzMglfSU9SICgnVicsIDg5LCBzdHJ1Y3QgdjRsMl9ldmVudDMyKQogCiAjZGVmaW5lIFZJRElPQ19PVkVSTEFZMzIJX0lPVyAoJ1YnLCAxNCwgczMyKQogI2RlZmluZSBWSURJT0NfU1RSRUFNT04zMglfSU9XICgnVicsIDE4LCBzMzIpCkBAIC02OTMsNiArNzIwLDcgQEAKIAkJc3RydWN0IHY0bDJfaW5wdXQgdjJpOwogCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCB2MnM7CiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB2MmVjczsKKwkJc3RydWN0IHY0bDJfZXZlbnQgdjJldjsKIAkJdW5zaWduZWQgbG9uZyB2eDsKIAkJaW50IHZpOwogCX0ga2FyZzsKQEAgLTcxNSw2ICs3NDMsNyBAQAogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTMzI6IGNtZCA9IFZJRElPQ19HX0VYVF9DVFJMUzsgYnJlYWs7CiAJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFMzMjogY21kID0gVklESU9DX1NfRVhUX0NUUkxTOyBicmVhazsKIAljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTMzI6IGNtZCA9IFZJRElPQ19UUllfRVhUX0NUUkxTOyBicmVhazsKKwljYXNlIFZJRElPQ19EUUVWRU5UMzI6IGNtZCA9IFZJRElPQ19EUUVWRU5UOyBicmVhazsKIAljYXNlIFZJRElPQ19PVkVSTEFZMzI6IGNtZCA9IFZJRElPQ19PVkVSTEFZOyBicmVhazsKIAljYXNlIFZJRElPQ19TVFJFQU1PTjMyOiBjbWQgPSBWSURJT0NfU1RSRUFNT047IGJyZWFrOwogCWNhc2UgVklESU9DX1NUUkVBTU9GRjMyOiBjbWQgPSBWSURJT0NfU1RSRUFNT0ZGOyBicmVhazsKQEAgLTc3OCw2ICs4MDcsOSBAQAogCQllcnIgPSBnZXRfdjRsMl9leHRfY29udHJvbHMzMigma2FyZy52MmVjcywgdXApOwogCQljb21wYXRpYmxlX2FyZyA9IDA7CiAJCWJyZWFrOworCWNhc2UgVklESU9DX0RRRVZFTlQ6CisJCWNvbXBhdGlibGVfYXJnID0gMDsKKwkJYnJlYWs7CiAJfQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC04MTgsNiArODUwLDEwIEBACiAJCWVyciA9IHB1dF92NGwyX2ZyYW1lYnVmZmVyMzIoJmthcmcudjJmYiwgdXApOwogCQlicmVhazsKIAorCWNhc2UgVklESU9DX0RRRVZFTlQ6CisJCWVyciA9IHB1dF92NGwyX2V2ZW50MzIoJmthcmcudjJldiwgdXApOworCQlicmVhazsKKwogCWNhc2UgVklESU9DX0dfRk1UOgogCWNhc2UgVklESU9DX1NfRk1UOgogCWNhc2UgVklESU9DX1RSWV9GTVQ6CkBAIC05MjAsNiArOTU2LDcgQEAKIAljYXNlIFZJRElPQ19TX0RWX1RJTUlOR1M6CiAJY2FzZSBWSURJT0NfR19EVl9USU1JTkdTOgogCWNhc2UgVklESU9DX0RRRVZFTlQ6CisJY2FzZSBWSURJT0NfRFFFVkVOVDMyOgogCWNhc2UgVklESU9DX1NVQlNDUklCRV9FVkVOVDoKIAljYXNlIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVDoKIAkJcmV0ID0gZG9fdmlkZW9faW9jdGwoZmlsZSwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWN0cmxzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYwppbmRleCAyNDEyZjA4Li4wNmI2MDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYwpAQCAtMjMsMTcgKzIzLDM5IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgogCisjZGVmaW5lIGhhc19vcChtYXN0ZXIsIG9wKSBcCisJKG1hc3Rlci0+b3BzICYmIG1hc3Rlci0+b3BzLT5vcCkKKyNkZWZpbmUgY2FsbF9vcChtYXN0ZXIsIG9wKSBcCisJKGhhc19vcChtYXN0ZXIsIG9wKSA/IG1hc3Rlci0+b3BzLT5vcChtYXN0ZXIpIDogMCkKKwogLyogSW50ZXJuYWwgdGVtcG9yYXJ5IGhlbHBlciBzdHJ1Y3QsIG9uZSBmb3IgZWFjaCB2NGwyX2V4dF9jb250cm9sICovCi1zdHJ1Y3QgY3RybF9oZWxwZXIgeworc3RydWN0IHY0bDJfY3RybF9oZWxwZXIgeworCS8qIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2wgcmVmZXJlbmNlIG9mIHRoZSBtYXN0ZXIgY29udHJvbCAqLworCXN0cnVjdCB2NGwyX2N0cmxfcmVmICptcmVmOwogCS8qIFRoZSBjb250cm9sIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHY0bDJfZXh0X2NvbnRyb2wgSUQgZmllbGQuICovCiAJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKLQkvKiBVc2VkIGludGVybmFsbHkgdG8gbWFyayB3aGV0aGVyIHRoaXMgY29udHJvbCB3YXMgYWxyZWFkeQotCSAgIHByb2Nlc3NlZC4gKi8KLQlib29sIGhhbmRsZWQ7CisJLyogdjRsMl9leHRfY29udHJvbCBpbmRleCBvZiB0aGUgbmV4dCBjb250cm9sIGJlbG9uZ2luZyB0byB0aGUKKwkgICBzYW1lIGNsdXN0ZXIsIG9yIDAgaWYgdGhlcmUgaXNuJ3QgYW55LiAqLworCXUzMiBuZXh0OwogfTsKIAorLyogU21hbGwgaGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgYXV0b2NsdXN0ZXIgaXMgc2V0IHRvIG1hbnVhbAorICAgbW9kZS4gSW4gdGhhdCBjYXNlIHRoZSBpc192b2xhdGlsZSBmbGFnIHNob3VsZCBiZSBpZ25vcmVkLiAqLworc3RhdGljIGJvb2wgaXNfY3VyX21hbnVhbChjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXIpCit7CisJcmV0dXJuIG1hc3Rlci0+aXNfYXV0byAmJiBtYXN0ZXItPmN1ci52YWwgPT0gbWFzdGVyLT5tYW51YWxfbW9kZV92YWx1ZTsKK30KKworLyogU2FtZSBhcyBhYm92ZSwgYnV0IHRoaXMgY2hlY2tzIHRoZSBhZ2FpbnN0IHRoZSBuZXcgdmFsdWUgaW5zdGVhZCBvZiB0aGUKKyAgIGN1cnJlbnQgdmFsdWUuICovCitzdGF0aWMgYm9vbCBpc19uZXdfbWFudWFsKGNvbnN0IHN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlcikKK3sKKwlyZXR1cm4gbWFzdGVyLT5pc19hdXRvICYmIG1hc3Rlci0+dmFsID09IG1hc3Rlci0+bWFudWFsX21vZGVfdmFsdWU7Cit9CisKIC8qIFJldHVybnMgTlVMTCBvciBhIGNoYXJhY3RlciBwb2ludGVyIGFycmF5IGNvbnRhaW5pbmcgdGhlIG1lbnUgZm9yCiAgICB0aGUgZ2l2ZW4gY29udHJvbCBJRC4gVGhlIHBvaW50ZXIgYXJyYXkgZW5kcyB3aXRoIGEgTlVMTCBwb2ludGVyLgogICAgQW4gZW1wdHkgc3RyaW5nIHNpZ25pZmllcyBhIG1lbnUgZW50cnkgdGhhdCBpcyBpbnZhbGlkLiBUaGlzIGFsbG93cwpAQCAtMTgxLDcgKzIwMyw3IEBACiAJfTsKIAlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfc3RyZWFtX3ZiaV9mbXRbXSA9IHsKIAkJIk5vIFZCSSIsCi0JCSJQcml2YXRlIHBhY2tldCwgSVZUViBmb3JtYXQiLAorCQkiUHJpdmF0ZSBQYWNrZXQsIElWVFYgRm9ybWF0IiwKIAkJTlVMTAogCX07CiAJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYW1lcmFfcG93ZXJfbGluZV9mcmVxdWVuY3lbXSA9IHsKQEAgLTIwNCwxOCArMjI2LDEzMCBAQAogCQkiTmVnYXRpdmUiLAogCQkiRW1ib3NzIiwKIAkJIlNrZXRjaCIsCi0JCSJTa3kgYmx1ZSIsCi0JCSJHcmFzcyBncmVlbiIsCi0JCSJTa2luIHdoaXRlbiIsCisJCSJTa3kgQmx1ZSIsCisJCSJHcmFzcyBHcmVlbiIsCisJCSJTa2luIFdoaXRlbiIsCiAJCSJWaXZpZCIsCiAJCU5VTEwKIAl9OwogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHVuZV9wcmVlbXBoYXNpc1tdID0gewotCQkiTm8gcHJlZW1waGFzaXMiLAorCQkiTm8gUHJlZW1waGFzaXMiLAogCQkiNTAgdXNlY29uZHMiLAogCQkiNzUgdXNlY29uZHMiLAogCQlOVUxMLAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZWFkZXJfbW9kZVtdID0geworCQkiU2VwYXJhdGUgQnVmZmVyIiwKKwkJIkpvaW5lZCBXaXRoIDFzdCBGcmFtZSIsCisJCU5VTEwsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG11bHRpX3NsaWNlW10gPSB7CisJCSJTaW5nbGUiLAorCQkiTWF4IE1hY3JvYmxvY2tzIiwKKwkJIk1heCBCeXRlcyIsCisJCU5VTEwsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVudHJvcHlfbW9kZVtdID0geworCQkiQ0FWTEMiLAorCQkiQ0FCQUMiLAorCQlOVUxMLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtcGVnX2gyNjRfbGV2ZWxbXSA9IHsKKwkJIjEiLAorCQkiMWIiLAorCQkiMS4xIiwKKwkJIjEuMiIsCisJCSIxLjMiLAorCQkiMiIsCisJCSIyLjEiLAorCQkiMi4yIiwKKwkJIjMiLAorCQkiMy4xIiwKKwkJIjMuMiIsCisJCSI0IiwKKwkJIjQuMSIsCisJCSI0LjIiLAorCQkiNSIsCisJCSI1LjEiLAorCQlOVUxMLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoMjY0X2xvb3BfZmlsdGVyW10gPSB7CisJCSJFbmFibGVkIiwKKwkJIkRpc2FibGVkIiwKKwkJIkRpc2FibGVkIGF0IFNsaWNlIEJvdW5kYXJ5IiwKKwkJTlVMTCwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaDI2NF9wcm9maWxlW10gPSB7CisJCSJCYXNlbGluZSIsCisJCSJDb25zdHJhaW5lZCBCYXNlbGluZSIsCisJCSJNYWluIiwKKwkJIkV4dGVuZGVkIiwKKwkJIkhpZ2giLAorCQkiSGlnaCAxMCIsCisJCSJIaWdoIDQyMiIsCisJCSJIaWdoIDQ0NCBQcmVkaWN0aXZlIiwKKwkJIkhpZ2ggMTAgSW50cmEiLAorCQkiSGlnaCA0MjIgSW50cmEiLAorCQkiSGlnaCA0NDQgSW50cmEiLAorCQkiQ0FWTEMgNDQ0IEludHJhIiwKKwkJIlNjYWxhYmxlIEJhc2VsaW5lIiwKKwkJIlNjYWxhYmxlIEhpZ2giLAorCQkiU2NhbGFibGUgSGlnaCBJbnRyYSIsCisJCSJNdWx0aXZpZXcgSGlnaCIsCisJCU5VTEwsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZ1aV9zYXJfaWRjW10gPSB7CisJCSJVbnNwZWNpZmllZCIsCisJCSIxOjEiLAorCQkiMTI6MTEiLAorCQkiMTA6MTEiLAorCQkiMTY6MTEiLAorCQkiNDA6MzMiLAorCQkiMjQ6MTEiLAorCQkiMjA6MTEiLAorCQkiMzI6MTEiLAorCQkiODA6MzMiLAorCQkiMTg6MTEiLAorCQkiMTU6MTEiLAorCQkiNjQ6MzMiLAorCQkiMTYwOjk5IiwKKwkJIjQ6MyIsCisJCSIzOjIiLAorCQkiMjoxIiwKKwkJIkV4dGVuZGVkIFNBUiIsCisJCU5VTEwsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1wZWdfbXBlZzRfbGV2ZWxbXSA9IHsKKwkJIjAiLAorCQkiMGIiLAorCQkiMSIsCisJCSIyIiwKKwkJIjMiLAorCQkiM2IiLAorCQkiNCIsCisJCSI1IiwKKwkJTlVMTCwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbXBlZzRfcHJvZmlsZVtdID0geworCQkiU2ltcGxlIiwKKwkJIkFkY2FudmVkIFNpbXBsZSIsCisJCSJDb3JlIiwKKwkJIlNpbXBsZSBTY2FsYWJsZSIsCisJCSJBZHZhbmNlZCBDb2RpbmcgRWZmaWNlbmN5IiwKKwkJTlVMTCwKKwl9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFzaF9sZWRfbW9kZVtdID0geworCQkiT2ZmIiwKKwkJIkZsYXNoIiwKKwkJIlRvcmNoIiwKKwkJTlVMTCwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmxhc2hfc3Ryb2JlX3NvdXJjZVtdID0geworCQkiU29mdHdhcmUiLAorCQkiRXh0ZXJuYWwiLAorCQlOVUxMLAorCX07CiAKIAlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CkBAIC0yNTYsNiArMzkwLDI4IEBACiAJCXJldHVybiBjb2xvcmZ4OwogCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKIAkJcmV0dXJuIHR1bmVfcHJlZW1waGFzaXM7CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9MRURfTU9ERToKKwkJcmV0dXJuIGZsYXNoX2xlZF9tb2RlOworCWNhc2UgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NPVVJDRToKKwkJcmV0dXJuIGZsYXNoX3N0cm9iZV9zb3VyY2U7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0hFQURFUl9NT0RFOgorCQlyZXR1cm4gaGVhZGVyX21vZGU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREU6CisJCXJldHVybiBtdWx0aV9zbGljZTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREU6CisJCXJldHVybiBlbnRyb3B5X21vZGU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUw6CisJCXJldHVybiBtcGVnX2gyNjRfbGV2ZWw7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERToKKwkJcmV0dXJuIGgyNjRfbG9vcF9maWx0ZXI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRToKKwkJcmV0dXJuIGgyNjRfcHJvZmlsZTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQzoKKwkJcmV0dXJuIHZ1aV9zYXJfaWRjOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9MRVZFTDoKKwkJcmV0dXJuIG1wZWdfbXBlZzRfbGV2ZWw7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEU6CisJCXJldHVybiBtcGVnNF9wcm9maWxlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTMwNyw2ICs0NjMsOCBAQAogCWNhc2UgVjRMMl9DSURfQ0hST01BX0dBSU46CQlyZXR1cm4gIkNocm9tYSBHYWluIjsKIAljYXNlIFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18xOgkJcmV0dXJuICJJbGx1bWluYXRvciAxIjsKIAljYXNlIFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18yOgkJcmV0dXJuICJJbGx1bWluYXRvciAyIjsKKwljYXNlIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9DQVBUVVJFOglyZXR1cm4gIk1pbmltdW0gTnVtYmVyIG9mIENhcHR1cmUgQnVmZmVycyI7CisJY2FzZSBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfT1VUUFVUOglyZXR1cm4gIk1pbmltdW0gTnVtYmVyIG9mIE91dHB1dCBCdWZmZXJzIjsKIAogCS8qIE1QRUcgY29udHJvbHMgKi8KIAkvKiBLZWVwIHRoZSBvcmRlciBvZiB0aGUgJ2Nhc2UncyB0aGUgc2FtZSBhcyBpbiB2aWRlb2RldjIuaCEgKi8KQEAgLTM0Myw2ICs1MDEsNDggQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjogcmV0dXJuICJWaWRlbyBUZW1wb3JhbCBEZWNpbWF0aW9uIjsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToJCXJldHVybiAiVmlkZW8gTXV0ZSI7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWOglyZXR1cm4gIlZpZGVvIE11dGUgWVVWIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9TTElDRV9JTlRFUkZBQ0U6CXJldHVybiAiRGVjb2RlciBTbGljZSBJbnRlcmZhY2UiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX01QRUc0X0RFQkxPQ0tfRklMVEVSOglyZXR1cm4gIk1QRUc0IExvb3AgRmlsdGVyIEVuYWJsZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0NZQ0xJQ19JTlRSQV9SRUZSRVNIX01COglyZXR1cm4gIlRoZSBOdW1iZXIgb2YgSW50cmEgUmVmcmVzaCBNQnMiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9SQ19FTkFCTEU6CQlyZXR1cm4gIkZyYW1lIExldmVsIFJhdGUgQ29udHJvbCBFbmFibGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NQl9SQ19FTkFCTEU6CQkJcmV0dXJuICJIMjY0IE1CIExldmVsIFJhdGUgQ29udHJvbCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0hFQURFUl9NT0RFOgkJCXJldHVybiAiU2VxdWVuY2UgSGVhZGVyIE1vZGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NQVhfUkVGX1BJQzoJCQlyZXR1cm4gIlRoZSBNYXggTnVtYmVyIG9mIFJlZmVyZW5jZSBQaWN0dXJlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19JX0ZSQU1FX1FQOgkJcmV0dXJuICJIMjYzIEktRnJhbWUgUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX1BfRlJBTUVfUVA6CQlyZXR1cm4gIkgyNjMgUCBmcmFtZSBRUCBWYWx1ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfQl9GUkFNRV9RUDoJCXJldHVybiAiSDI2MyBCIGZyYW1lIFFQIFZhbHVlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NSU5fUVA6CQkJcmV0dXJuICJIMjYzIE1pbmltdW0gUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01BWF9RUDoJCQlyZXR1cm4gIkgyNjMgTWF4aW11bSBRUCBWYWx1ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSV9GUkFNRV9RUDoJCXJldHVybiAiSDI2NCBJLUZyYW1lIFFQIFZhbHVlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QX0ZSQU1FX1FQOgkJcmV0dXJuICJIMjY0IFAgZnJhbWUgUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0JfRlJBTUVfUVA6CQlyZXR1cm4gIkgyNjQgQiBmcmFtZSBRUCBWYWx1ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUFYX1FQOgkJCXJldHVybiAiSDI2NCBNYXhpbXVtIFFQIFZhbHVlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9NSU5fUVA6CQkJcmV0dXJuICJIMjY0IE1pbmltdW0gUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0XzhYOF9UUkFOU0ZPUk06CQlyZXR1cm4gIkgyNjQgOHg4IFRyYW5zZm9ybSBFbmFibGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0NQQl9TSVpFOgkJCXJldHVybiAiSDI2NCBDUEIgQnVmZmVyIFNpemUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERToJCXJldHVybiAiSDI2NCBFbnRvcnB5IE1vZGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9EOgkJCXJldHVybiAiSDI2NCBJIFBlcmlvZCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUw6CQkJcmV0dXJuICJIMjY0IExldmVsIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9BTFBIQToJcmV0dXJuICJIMjY0IExvb3AgRmlsdGVyIEFscGhhIE9mZnNldCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQkVUQToJCXJldHVybiAiSDI2NCBMb29wIEZpbHRlciBCZXRhIE9mZnNldCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERToJCXJldHVybiAiSDI2NCBMb29wIEZpbHRlciBNb2RlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFOgkJCXJldHVybiAiSDI2NCBQcm9maWxlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9IRUlHSFQ6CXJldHVybiAiVmVydGljYWwgU2l6ZSBvZiBTQVIiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9FWFRfU0FSX1dJRFRIOglyZXR1cm4gIkhvcml6b250YWwgU2l6ZSBvZiBTQVIiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfRU5BQkxFOgkJcmV0dXJuICJBc3BlY3QgUmF0aW8gVlVJIEVuYWJsZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JREM6CQlyZXR1cm4gIlZVSSBBc3BlY3QgUmF0aW8gSURDIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUDoJCXJldHVybiAiTVBFRzQgSS1GcmFtZSBRUCBWYWx1ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BfRlJBTUVfUVA6CQlyZXR1cm4gIk1QRUc0IFAgZnJhbWUgUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9CX0ZSQU1FX1FQOgkJcmV0dXJuICJNUEVHNCBCIGZyYW1lIFFQIFZhbHVlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUlOX1FQOgkJCXJldHVybiAiTVBFRzQgTWluaW11bSBRUCBWYWx1ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01BWF9RUDoJCQlyZXR1cm4gIk1QRUc0IE1heGltdW0gUVAgVmFsdWUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9MRVZFTDoJCQlyZXR1cm4gIk1QRUc0IExldmVsIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUFJPRklMRToJCQlyZXR1cm4gIk1QRUc0IFByb2ZpbGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9RUEVMOgkJCXJldHVybiAiUXVhcnRlciBQaXhlbCBTZWFyY2ggRW5hYmxlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX0JZVEVTOgkJcmV0dXJuICJUaGUgTWF4aW11bSBCeXRlcyBQZXIgU2xpY2UiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfTUI6CQlyZXR1cm4gIlRoZSBOdW1iZXIgb2YgTUIgaW4gYSBTbGljZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREU6CQlyZXR1cm4gIlRoZSBTbGljZSBQYXJ0aXRpb25pbmcgTWV0aG9kIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVkJWX1NJWkU6CQkJcmV0dXJuICJWQlYgQnVmZmVyIFNpemUiOwogCiAJLyogQ0FNRVJBIGNvbnRyb2xzICovCiAJLyogS2VlcCB0aGUgb3JkZXIgb2YgdGhlICdjYXNlJ3MgdGhlIHNhbWUgYXMgaW4gdmlkZW9kZXYyLmghICovCkBAIC0zODksNiArNTg5LDIxIEBACiAJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgkJcmV0dXJuICJUdW5lIFBvd2VyIExldmVsIjsKIAljYXNlIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I6CXJldHVybiAiVHVuZSBBbnRlbm5hIENhcGFjaXRvciI7CiAKKwkvKiBGbGFzaCBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfRkxBU0hfQ0xBU1M6CQlyZXR1cm4gIkZsYXNoIGNvbnRyb2xzIjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFOgkJcmV0dXJuICJMRUQgbW9kZSI7CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFOglyZXR1cm4gIlN0cm9iZSBzb3VyY2UiOworCWNhc2UgVjRMMl9DSURfRkxBU0hfU1RST0JFOgkJcmV0dXJuICJTdHJvYmUiOworCWNhc2UgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUT1A6CXJldHVybiAiU3RvcCBzdHJvYmUiOworCWNhc2UgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUQVRVUzoJcmV0dXJuICJTdHJvYmUgc3RhdHVzIjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQ6CQlyZXR1cm4gIlN0cm9iZSB0aW1lb3V0IjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX0lOVEVOU0lUWToJCXJldHVybiAiSW50ZW5zaXR5LCBmbGFzaCBtb2RlIjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1RPUkNIX0lOVEVOU0lUWToJcmV0dXJuICJJbnRlbnNpdHksIHRvcmNoIG1vZGUiOworCWNhc2UgVjRMMl9DSURfRkxBU0hfSU5ESUNBVE9SX0lOVEVOU0lUWTogcmV0dXJuICJJbnRlbnNpdHksIGluZGljYXRvciI7CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9GQVVMVDoJCXJldHVybiAiRmF1bHRzIjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX0NIQVJHRToJCXJldHVybiAiQ2hhcmdlIjsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1JFQURZOgkJcmV0dXJuICJSZWFkeSB0byBzdHJvYmUiOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNDIzLDEyICs2MzgsMjQgQEAKIAljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDoKIAljYXNlIFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18xOgogCWNhc2UgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzI6CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RBVFVTOgorCWNhc2UgVjRMMl9DSURfRkxBU0hfQ0hBUkdFOgorCWNhc2UgVjRMMl9DSURfRkxBU0hfUkVBRFk6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ09ERVJfTVBFRzRfREVCTE9DS19GSUxURVI6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ09ERVJfU0xJQ0VfSU5URVJGQUNFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9SQ19FTkFCTEU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01CX1JDX0VOQUJMRToKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfRU5BQkxFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9RUEVMOgogCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CiAJCSptaW4gPSAwOwogCQkqbWF4ID0gKnN0ZXAgPSAxOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1BBTl9SRVNFVDoKIAljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkU6CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RPUDoKIAkJKnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CVVRUT047CiAJCSpmbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOwogCQkqbWluID0gKm1heCA9ICpzdGVwID0gKmRlZiA9IDA7CkBAIC00NTIsNiArNjc5LDE3IEBACiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCWNhc2UgVjRMMl9DSURfQ09MT1JGWDoKIAljYXNlIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM6CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9MRURfTU9ERToKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TT1VSQ0U6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0hFQURFUl9NT0RFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERToKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MRVZFTDoKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1BST0ZJTEU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JREM6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFOgogCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BTX05BTUU6CkBAIC00NjIsNiArNzAwLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0NBTUVSQV9DTEFTUzoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ0xBU1M6CiAJY2FzZSBWNEwyX0NJRF9GTV9UWF9DTEFTUzoKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX0NMQVNTOgogCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1M7CiAJCS8qIFlvdSBjYW4gbmVpdGhlciByZWFkIG5vdCB3cml0ZSB0aGVzZSAqLwogCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIHwgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKQEAgLTQ3NCw2ICs3MTMsMTQgQEAKIAkJLyogTWF4IGlzIGNhbGN1bGF0ZWQgYXMgUkdCODg4IHRoYXQgaXMgMl4yNCAqLwogCQkqbWF4ID0gMHhGRkZGRkY7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRkxBU0hfRkFVTFQ6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfQklUTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfQ0FQVFVSRToKKwljYXNlIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9PVVRQVVQ6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJKmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJKnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTUxOSw2ICs3NjYsMTAgQEAKIAljYXNlIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkU6CiAJCSpmbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVEFUVVM6CisJY2FzZSBWNEwyX0NJRF9GTEFTSF9SRUFEWToKKwkJKmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKwkJYnJlYWs7CiAJfQogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfZmlsbCk7CkBAIC01MzcsNiArNzg4LDQyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBmaWxsX2V2ZW50KHN0cnVjdCB2NGwyX2V2ZW50ICpldiwgc3RydWN0IHY0bDJfY3RybCAqY3RybCwgdTMyIGNoYW5nZXMpCit7CisJbWVtc2V0KGV2LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGV2LT5yZXNlcnZlZCkpOworCWV2LT50eXBlID0gVjRMMl9FVkVOVF9DVFJMOworCWV2LT5pZCA9IGN0cmwtPmlkOworCWV2LT51LmN0cmwuY2hhbmdlcyA9IGNoYW5nZXM7CisJZXYtPnUuY3RybC50eXBlID0gY3RybC0+dHlwZTsKKwlldi0+dS5jdHJsLmZsYWdzID0gY3RybC0+ZmxhZ3M7CisJaWYgKGN0cmwtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfU1RSSU5HKQorCQlldi0+dS5jdHJsLnZhbHVlNjQgPSAwOworCWVsc2UKKwkJZXYtPnUuY3RybC52YWx1ZTY0ID0gY3RybC0+Y3VyLnZhbDY0OworCWV2LT51LmN0cmwubWluaW11bSA9IGN0cmwtPm1pbmltdW07CisJZXYtPnUuY3RybC5tYXhpbXVtID0gY3RybC0+bWF4aW11bTsKKwlpZiAoY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKQorCQlldi0+dS5jdHJsLnN0ZXAgPSAxOworCWVsc2UKKwkJZXYtPnUuY3RybC5zdGVwID0gY3RybC0+c3RlcDsKKwlldi0+dS5jdHJsLmRlZmF1bHRfdmFsdWUgPSBjdHJsLT5kZWZhdWx0X3ZhbHVlOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2V2ZW50KHN0cnVjdCB2NGwyX2ZoICpmaCwgc3RydWN0IHY0bDJfY3RybCAqY3RybCwgdTMyIGNoYW5nZXMpCit7CisJc3RydWN0IHY0bDJfZXZlbnQgZXY7CisJc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCAqc2V2OworCisJaWYgKGxpc3RfZW1wdHkoJmN0cmwtPmV2X3N1YnMpKQorCQlyZXR1cm47CisJZmlsbF9ldmVudCgmZXYsIGN0cmwsIGNoYW5nZXMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXYsICZjdHJsLT5ldl9zdWJzLCBub2RlKQorCQlpZiAoc2V2LT5maCAmJiAoc2V2LT5maCAhPSBmaCB8fAorCQkJCShzZXYtPmZsYWdzICYgVjRMMl9FVkVOVF9TVUJfRkxfQUxMT1dfRkVFREJBQ0spKSkKKwkJCXY0bDJfZXZlbnRfcXVldWVfZmgoc2V2LT5maCwgJmV2KTsKK30KKwogLyogSGVscGVyIGZ1bmN0aW9uOiBjb3B5IHRoZSBjdXJyZW50IGNvbnRyb2wgdmFsdWUgYmFjayB0byB0aGUgY2FsbGVyICovCiBzdGF0aWMgaW50IGN1cl90b191c2VyKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjLAogCQkgICAgICAgc3RydWN0IHY0bDJfY3RybCAqY3RybCkKQEAgLTYyNCwyMiArOTExLDQ1IEBACiB9CiAKIC8qIENvcHkgdGhlIG5ldyB2YWx1ZSB0byB0aGUgY3VycmVudCB2YWx1ZS4gKi8KLXN0YXRpYyB2b2lkIG5ld190b19jdXIoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3N0YXRpYyB2b2lkIG5ld190b19jdXIoc3RydWN0IHY0bDJfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLAorCQkJCQkJYm9vbCB1cGRhdGVfaW5hY3RpdmUpCiB7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisKIAlpZiAoY3RybCA9PSBOVUxMKQogCQlyZXR1cm47CiAJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CVVRUT046CisJCWNoYW5nZWQgPSB0cnVlOworCQlicmVhazsKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX1NUUklORzoKIAkJLyogc3RyaW5ncyBhcmUgYWx3YXlzIDAtdGVybWluYXRlZCAqLworCQljaGFuZ2VkID0gc3RyY21wKGN0cmwtPnN0cmluZywgY3RybC0+Y3VyLnN0cmluZyk7CiAJCXN0cmNweShjdHJsLT5jdXIuc3RyaW5nLCBjdHJsLT5zdHJpbmcpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJY2hhbmdlZCA9IGN0cmwtPnZhbDY0ICE9IGN0cmwtPmN1ci52YWw2NDsKIAkJY3RybC0+Y3VyLnZhbDY0ID0gY3RybC0+dmFsNjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCWNoYW5nZWQgPSBjdHJsLT52YWwgIT0gY3RybC0+Y3VyLnZhbDsKIAkJY3RybC0+Y3VyLnZhbCA9IGN0cmwtPnZhbDsKIAkJYnJlYWs7CiAJfQorCWlmICh1cGRhdGVfaW5hY3RpdmUpIHsKKwkJY3RybC0+ZmxhZ3MgJj0gflY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQlpZiAoIWlzX2N1cl9tYW51YWwoY3RybC0+Y2x1c3RlclswXSkpCisJCQljdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKKwl9CisJaWYgKGNoYW5nZWQgfHwgdXBkYXRlX2luYWN0aXZlKSB7CisJCS8qIElmIGEgY29udHJvbCB3YXMgY2hhbmdlZCB0aGF0IHdhcyBub3Qgb25lIG9mIHRoZSBjb250cm9scworCQkgICBtb2RpZmllZCBieSB0aGUgYXBwbGljYXRpb24sIHRoZW4gc2VuZCB0aGUgZXZlbnQgdG8gYWxsLiAqLworCQlpZiAoIWN0cmwtPmlzX25ldykKKwkJCWZoID0gTlVMTDsKKwkJc2VuZF9ldmVudChmaCwgY3RybCwKKwkJCShjaGFuZ2VkID8gVjRMMl9FVkVOVF9DVFJMX0NIX1ZBTFVFIDogMCkgfAorCQkJKHVwZGF0ZV9pbmFjdGl2ZSA/IFY0TDJfRVZFTlRfQ1RSTF9DSF9GTEFHUyA6IDApKTsKKwl9CiB9CiAKIC8qIENvcHkgdGhlIGN1cnJlbnQgdmFsdWUgdG8gdGhlIG5ldyB2YWx1ZSAqLwpAQCAtNjkyLDEzICsxMDAyLDExIEBACiAJcmV0dXJuIGRpZmY7CiB9CiAKLS8qIFZhbGlkYXRlIGEgbmV3IGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgdmFsaWRhdGVfbmV3KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCisvKiBWYWxpZGF0ZSBpbnRlZ2VyLXR5cGUgY29udHJvbCAqLworc3RhdGljIGludCB2YWxpZGF0ZV9uZXdfaW50KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHMzMiAqcHZhbCkKIHsKLQlzMzIgdmFsID0gY3RybC0+dmFsOwotCWNoYXIgKnMgPSBjdHJsLT5zdHJpbmc7CisJczMyIHZhbCA9ICpwdmFsOwogCXUzMiBvZmZzZXQ7Ci0Jc2l6ZV90IGxlbjsKIAogCXN3aXRjaCAoY3RybC0+dHlwZSkgewogCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKQEAgLTcxMSwxMSArMTAxOSwxMSBAQAogCQlvZmZzZXQgPSB2YWwgLSBjdHJsLT5taW5pbXVtOwogCQlvZmZzZXQgPSBjdHJsLT5zdGVwICogKG9mZnNldCAvIGN0cmwtPnN0ZXApOwogCQl2YWwgPSBjdHJsLT5taW5pbXVtICsgb2Zmc2V0OwotCQljdHJsLT52YWwgPSB2YWw7CisJCSpwdmFsID0gdmFsOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKLQkJY3RybC0+dmFsID0gISFjdHJsLT52YWw7CisJCSpwdmFsID0gISF2YWw7CiAJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgpAQCAtNzI2LDExICsxMDM0LDM1IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIDA7CiAKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0s6CisJCSpwdmFsICY9IGN0cmwtPm1heGltdW07CisJCXJldHVybiAwOworCiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9CVVRUT046CiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTOgotCQljdHJsLT52YWw2NCA9IDA7CisJCSpwdmFsID0gMDsKIAkJcmV0dXJuIDA7CiAKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qIFZhbGlkYXRlIGEgbmV3IGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmV3KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjKQoreworCWNoYXIgKnMgPSBjLT5zdHJpbmc7CisJc2l6ZV90IGxlbjsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfQklUTUFTSzoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1M6CisJCXJldHVybiB2YWxpZGF0ZV9uZXdfaW50KGN0cmwsICZjLT52YWx1ZSk7CisKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKIAkJcmV0dXJuIDA7CiAKQEAgLTc4MCw2ICsxMTEyLDcgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqcmVmLCAqbmV4dF9yZWY7CiAJc3RydWN0IHY0bDJfY3RybCAqY3RybCwgKm5leHRfY3RybDsKKwlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXYsICpuZXh0X3NldjsKIAogCWlmIChoZGwgPT0gTlVMTCB8fCBoZGwtPmJ1Y2tldHMgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtNzkzLDYgKzExMjYsOCBAQAogCS8qIEZyZWUgYWxsIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBoYW5kbGVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0cmwsIG5leHRfY3RybCwgJmhkbC0+Y3RybHMsIG5vZGUpIHsKIAkJbGlzdF9kZWwoJmN0cmwtPm5vZGUpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V2LCBuZXh0X3NldiwgJmN0cmwtPmV2X3N1YnMsIG5vZGUpCisJCQlsaXN0X2RlbCgmc2V2LT5ub2RlKTsKIAkJa2ZyZWUoY3RybCk7CiAJfQogCWtmcmVlKGhkbC0+YnVja2V0cyk7CkBAIC05NjIsMTMgKzEyOTcsMTcgQEAKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KIAlpZiAoaWQgPT0gMCB8fCBuYW1lID09IE5VTEwgfHwgaWQgPj0gVjRMMl9DSURfUFJJVkFURV9CQVNFIHx8Ci0JICAgIG1heCA8IG1pbiB8fAogCSAgICAodHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSICYmIHN0ZXAgPT0gMCkgfHwKKwkgICAgKHR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQklUTUFTSyAmJiBtYXggPT0gMCkgfHwKIAkgICAgKHR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSAmJiBxbWVudSA9PSBOVUxMKSB8fAogCSAgICAodHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9TVFJJTkcgJiYgbWF4ID09IDApKSB7CiAJCWhhbmRsZXJfc2V0X2VycihoZGwsIC1FUkFOR0UpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJaWYgKHR5cGUgIT0gVjRMMl9DVFJMX1RZUEVfQklUTUFTSyAmJiBtYXggPCBtaW4pIHsKKwkJaGFuZGxlcl9zZXRfZXJyKGhkbCwgLUVSQU5HRSk7CisJCXJldHVybiBOVUxMOworCX0KIAlpZiAoKHR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiB8fAogCSAgICAgdHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VIHx8CiAJICAgICB0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4pICYmCkBAIC05NzYsNiArMTMxNSwxMCBAQAogCQloYW5kbGVyX3NldF9lcnIoaGRsLCAtRVJBTkdFKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCWlmICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0sgJiYgKChkZWYgJiB+bWF4KSB8fCBtaW4gfHwgc3RlcCkpIHsKKwkJaGFuZGxlcl9zZXRfZXJyKGhkbCwgLUVSQU5HRSk7CisJCXJldHVybiBOVUxMOworCX0KIAogCWlmICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTikKIAkJZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKQEAgLTk5MSw2ICsxMzM0LDcgQEAKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmY3RybC0+bm9kZSk7CisJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPmV2X3N1YnMpOwogCWN0cmwtPmhhbmRsZXIgPSBoZGw7CiAJY3RybC0+b3BzID0gb3BzOwogCWN0cmwtPmlkID0gaWQ7CkBAIC0xMTMyLDYgKzE0NzYsOSBAQAogCQkvKiBTa2lwIGhhbmRsZXItcHJpdmF0ZSBjb250cm9scy4gKi8KIAkJaWYgKGN0cmwtPmlzX3ByaXZhdGUpCiAJCQljb250aW51ZTsKKwkJLyogQW5kIGNvbnRyb2wgY2xhc3NlcyAqLworCQlpZiAoY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTKQorCQkJY29udGludWU7CiAJCXJldCA9IGhhbmRsZXJfbmV3X3JlZihoZGwsIGN0cmwpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC0xMTQ3LDcgKzE0OTQsNyBAQAogCWludCBpOwogCiAJLyogVGhlIGZpcnN0IGNvbnRyb2wgaXMgdGhlIG1hc3RlciBjb250cm9sIGFuZCBpdCBtdXN0IG5vdCBiZSBOVUxMICovCi0JQlVHX09OKGNvbnRyb2xzWzBdID09IE5VTEwpOworCUJVR19PTihuY29udHJvbHMgPT0gMCB8fCBjb250cm9sc1swXSA9PSBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuY29udHJvbHM7IGkrKykgewogCQlpZiAoY29udHJvbHNbaV0pIHsKQEAgLTExNTgsMTggKzE1MDUsNDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2NsdXN0ZXIpOwogCit2b2lkIHY0bDJfY3RybF9hdXRvX2NsdXN0ZXIodW5zaWduZWQgbmNvbnRyb2xzLCBzdHJ1Y3QgdjRsMl9jdHJsICoqY29udHJvbHMsCisJCQkgICAgdTggbWFudWFsX3ZhbCwgYm9vbCBzZXRfdm9sYXRpbGUpCit7CisJc3RydWN0IHY0bDJfY3RybCAqbWFzdGVyID0gY29udHJvbHNbMF07CisJdTMyIGZsYWc7CisJaW50IGk7CisKKwl2NGwyX2N0cmxfY2x1c3RlcihuY29udHJvbHMsIGNvbnRyb2xzKTsKKwlXQVJOX09OKG5jb250cm9scyA8PSAxKTsKKwlXQVJOX09OKG1hbnVhbF92YWwgPCBtYXN0ZXItPm1pbmltdW0gfHwgbWFudWFsX3ZhbCA+IG1hc3Rlci0+bWF4aW11bSk7CisJbWFzdGVyLT5pc19hdXRvID0gdHJ1ZTsKKwltYXN0ZXItPm1hbnVhbF9tb2RlX3ZhbHVlID0gbWFudWFsX3ZhbDsKKwltYXN0ZXItPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1VQREFURTsKKwlmbGFnID0gaXNfY3VyX21hbnVhbChtYXN0ZXIpID8gMCA6IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCisJZm9yIChpID0gMTsgaSA8IG5jb250cm9sczsgaSsrKQorCQlpZiAoY29udHJvbHNbaV0pIHsKKwkJCWNvbnRyb2xzW2ldLT5pc192b2xhdGlsZSA9IHNldF92b2xhdGlsZTsKKwkJCWNvbnRyb2xzW2ldLT5mbGFncyB8PSBmbGFnOworCQl9Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9hdXRvX2NsdXN0ZXIpOworCiAvKiBBY3RpdmF0ZS9kZWFjdGl2YXRlIGEgY29udHJvbC4gKi8KIHZvaWQgdjRsMl9jdHJsX2FjdGl2YXRlKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIGJvb2wgYWN0aXZlKQogeworCS8qIGludmVydCBzaW5jZSB0aGUgYWN0dWFsIGZsYWcgaXMgY2FsbGVkICdpbmFjdGl2ZScgKi8KKwlib29sIGluYWN0aXZlID0gIWFjdGl2ZTsKKwlib29sIG9sZDsKKwogCWlmIChjdHJsID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICghYWN0aXZlKQorCWlmIChpbmFjdGl2ZSkKIAkJLyogc2V0IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFICovCi0JCXNldF9iaXQoNCwgJmN0cmwtPmZsYWdzKTsKKwkJb2xkID0gdGVzdF9hbmRfc2V0X2JpdCg0LCAmY3RybC0+ZmxhZ3MpOwogCWVsc2UKIAkJLyogY2xlYXIgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgKi8KLQkJY2xlYXJfYml0KDQsICZjdHJsLT5mbGFncyk7CisJCW9sZCA9IHRlc3RfYW5kX2NsZWFyX2JpdCg0LCAmY3RybC0+ZmxhZ3MpOworCWlmIChvbGQgIT0gaW5hY3RpdmUpCisJCXNlbmRfZXZlbnQoTlVMTCwgY3RybCwgVjRMMl9FVkVOVF9DVFJMX0NIX0ZMQUdTKTsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2FjdGl2YXRlKTsKIApAQCAtMTE4MSwxNSArMTU1NywyMSBAQAogICAgdGhlc2UgY29udHJvbHMuICovCiB2b2lkIHY0bDJfY3RybF9ncmFiKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIGJvb2wgZ3JhYmJlZCkKIHsKKwlib29sIG9sZDsKKwogCWlmIChjdHJsID09IE5VTEwpCiAJCXJldHVybjsKIAorCXY0bDJfY3RybF9sb2NrKGN0cmwpOwogCWlmIChncmFiYmVkKQogCQkvKiBzZXQgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCAqLwotCQlzZXRfYml0KDEsICZjdHJsLT5mbGFncyk7CisJCW9sZCA9IHRlc3RfYW5kX3NldF9iaXQoMSwgJmN0cmwtPmZsYWdzKTsKIAllbHNlCiAJCS8qIGNsZWFyIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgKi8KLQkJY2xlYXJfYml0KDEsICZjdHJsLT5mbGFncyk7CisJCW9sZCA9IHRlc3RfYW5kX2NsZWFyX2JpdCgxLCAmY3RybC0+ZmxhZ3MpOworCWlmIChvbGQgIT0gZ3JhYmJlZCkKKwkJc2VuZF9ldmVudChOVUxMLCBjdHJsLCBWNEwyX0VWRU5UX0NUUkxfQ0hfRkxBR1MpOworCXY0bDJfY3RybF91bmxvY2soY3RybCk7CiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9ncmFiKTsKIApAQCAtMTIxNyw2ICsxNTk5LDkgQEAKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CiAJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgY3RybC0+cW1lbnVbY3RybC0+Y3VyLnZhbF0pOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0s6CisJCXByaW50ayhLRVJOX0NPTlQgIjB4JTA4eCIsIGN0cmwtPmN1ci52YWwpOworCQlicmVhazsKIAljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKIAkJcHJpbnRrKEtFUk5fQ09OVCAiJWxsZCIsIGN0cmwtPmN1ci52YWw2NCk7CiAJCWJyZWFrOwpAQCAtMTI3NywyNiArMTY2MiwyMSBAQAogCQlpbnQgaTsKIAogCQkvKiBTa2lwIGlmIHRoaXMgY29udHJvbCB3YXMgYWxyZWFkeSBoYW5kbGVkIGJ5IGEgY2x1c3Rlci4gKi8KLQkJaWYgKGN0cmwtPmRvbmUpCisJCS8qIFNraXAgYnV0dG9uIGNvbnRyb2xzIGFuZCByZWFkLW9ubHkgY29udHJvbHMuICovCisJCWlmIChjdHJsLT5kb25lIHx8IGN0cmwtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OIHx8CisJCSAgICAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFkpKQogCQkJY29udGludWU7CiAKIAkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bmNvbnRyb2xzOyBpKyspIHsKIAkJCWlmIChtYXN0ZXItPmNsdXN0ZXJbaV0pIHsKIAkJCQljdXJfdG9fbmV3KG1hc3Rlci0+Y2x1c3RlcltpXSk7CiAJCQkJbWFzdGVyLT5jbHVzdGVyW2ldLT5pc19uZXcgPSAxOworCQkJCW1hc3Rlci0+Y2x1c3RlcltpXS0+ZG9uZSA9IHRydWU7CiAJCQl9CiAJCX0KLQotCQkvKiBTa2lwIGJ1dHRvbiBjb250cm9scyBhbmQgcmVhZC1vbmx5IGNvbnRyb2xzLiAqLwotCQlpZiAoY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9CVVRUT04gfHwKLQkJICAgIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSkpCi0JCQljb250aW51ZTsKLQkJcmV0ID0gbWFzdGVyLT5vcHMtPnNfY3RybChtYXN0ZXIpOworCQlyZXQgPSBjYWxsX29wKG1hc3Rlciwgc19jdHJsKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5uY29udHJvbHM7IGkrKykKLQkJCWlmIChtYXN0ZXItPmNsdXN0ZXJbaV0pCi0JCQkJbWFzdGVyLT5jbHVzdGVyW2ldLT5kb25lID0gdHJ1ZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZoZGwtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC0xNDQ3LDE4ICsxODI3LDE5IEBACiAgICBGaW5kIHRoZSBjb250cm9scyBpbiB0aGUgY29udHJvbCBhcnJheSBhbmQgZG8gc29tZSBiYXNpYyBjaGVja3MuICovCiBzdGF0aWMgaW50IHByZXBhcmVfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzLAotCQkJICAgICBzdHJ1Y3QgY3RybF9oZWxwZXIgKmhlbHBlcnMsCi0JCQkgICAgIGJvb2wgdHJ5KQorCQkJICAgICBzdHJ1Y3QgdjRsMl9jdHJsX2hlbHBlciAqaGVscGVycykKIHsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hlbHBlciAqaDsKKwlib29sIGhhdmVfY2x1c3RlcnMgPSBmYWxzZTsKIAl1MzIgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBjcy0+Y291bnQ7IGkrKykgeworCWZvciAoaSA9IDAsIGggPSBoZWxwZXJzOyBpIDwgY3MtPmNvdW50OyBpKyssIGgrKykgewogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqYyA9ICZjcy0+Y29udHJvbHNbaV07CisJCXN0cnVjdCB2NGwyX2N0cmxfcmVmICpyZWY7CiAJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7CiAJCXUzMiBpZCA9IGMtPmlkICYgVjRMMl9DVFJMX0lEX01BU0s7CiAKLQkJaWYgKHRyeSkKLQkJCWNzLT5lcnJvcl9pZHggPSBpOworCQljcy0+ZXJyb3JfaWR4ID0gaTsKIAogCQlpZiAoY3MtPmN0cmxfY2xhc3MgJiYgVjRMMl9DVFJMX0lEMkNMQVNTKGlkKSAhPSBjcy0+Y3RybF9jbGFzcykKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQ2Nyw1NSArMTg0OCw2MSBAQAogCQkgICBleHRlbmRlZCBjb250cm9scyAqLwogCQlpZiAoaWQgPj0gVjRMMl9DSURfUFJJVkFURV9CQVNFKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWN0cmwgPSB2NGwyX2N0cmxfZmluZChoZGwsIGlkKTsKLQkJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmVmID0gZmluZF9yZWZfbG9jayhoZGwsIGlkKTsKKwkJaWYgKHJlZiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWN0cmwgPSByZWYtPmN0cmw7CiAJCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaGVscGVyc1tpXS5jdHJsID0gY3RybDsKLQkJaGVscGVyc1tpXS5oYW5kbGVkID0gZmFsc2U7CisJCWlmIChjdHJsLT5jbHVzdGVyWzBdLT5uY29udHJvbHMgPiAxKQorCQkJaGF2ZV9jbHVzdGVycyA9IHRydWU7CisJCWlmIChjdHJsLT5jbHVzdGVyWzBdICE9IGN0cmwpCisJCQlyZWYgPSBmaW5kX3JlZl9sb2NrKGhkbCwgY3RybC0+Y2x1c3RlclswXS0+aWQpOworCQkvKiBTdG9yZSB0aGUgcmVmIHRvIHRoZSBtYXN0ZXIgY29udHJvbCBvZiB0aGUgY2x1c3RlciAqLworCQloLT5tcmVmID0gcmVmOworCQloLT5jdHJsID0gY3RybDsKKwkJLyogSW5pdGlhbGx5IHNldCBuZXh0IHRvIDAsIG1lYW5pbmcgdGhhdCB0aGVyZSBpcyBubyBvdGhlcgorCQkgICBjb250cm9sIGluIHRoaXMgaGVscGVyIGFycmF5IGJlbG9uZ2luZyB0byB0aGUgc2FtZQorCQkgICBjbHVzdGVyICovCisJCWgtPm5leHQgPSAwOwogCX0KKworCS8qIFdlIGFyZSBkb25lIGlmIHRoZXJlIHdlcmUgbm8gY29udHJvbHMgdGhhdCBiZWxvbmcgdG8gYSBtdWx0aS0KKwkgICBjb250cm9sIGNsdXN0ZXIuICovCisJaWYgKCFoYXZlX2NsdXN0ZXJzKQorCQlyZXR1cm4gMDsKKworCS8qIFRoZSBjb2RlIGJlbG93IGZpZ3VyZXMgb3V0IGluIE8obikgdGltZSB3aGljaCBjb250cm9scyBpbiB0aGUgbGlzdAorCSAgIGJlbG9uZyB0byB0aGUgc2FtZSBjbHVzdGVyLiAqLworCisJLyogVGhpcyBoYXMgdG8gYmUgZG9uZSB3aXRoIHRoZSBoYW5kbGVyIGxvY2sgdGFrZW4uICovCisJbXV0ZXhfbG9jaygmaGRsLT5sb2NrKTsKKworCS8qIEZpcnN0IHplcm8gdGhlIGhlbHBlciBmaWVsZCBpbiB0aGUgbWFzdGVyIGNvbnRyb2wgcmVmZXJlbmNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBjcy0+Y291bnQ7IGkrKykKKwkJaGVscGVyc1tpXS5tcmVmLT5oZWxwZXIgPSAwOworCWZvciAoaSA9IDAsIGggPSBoZWxwZXJzOyBpIDwgY3MtPmNvdW50OyBpKyssIGgrKykgeworCQlzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqbXJlZiA9IGgtPm1yZWY7CisKKwkJLyogSWYgdGhlIG1yZWYtPmhlbHBlciBpcyBzZXQsIHRoZW4gaXQgcG9pbnRzIHRvIGFuIGVhcmxpZXIKKwkJICAgaGVscGVyIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBjbHVzdGVyLiAqLworCQlpZiAobXJlZi0+aGVscGVyKSB7CisJCQkvKiBTZXQgdGhlIG5leHQgZmllbGQgb2YgbXJlZi0+aGVscGVyIHRvIHRoZSBjdXJyZW50CisJCQkgICBpbmRleDogdGhpcyBtZWFucyB0aGF0IHRoYXQgZWFybGllciBoZWxwZXIgbm93CisJCQkgICBwb2ludHMgdG8gdGhlIG5leHQgaGVscGVyIGluIHRoZSBzYW1lIGNsdXN0ZXIuICovCisJCQltcmVmLT5oZWxwZXItPm5leHQgPSBpOworCQkJLyogbXJlZiBzaG91bGQgYmUgc2V0IG9ubHkgZm9yIHRoZSBmaXJzdCBoZWxwZXIgaW4gdGhlCisJCQkgICBjbHVzdGVyLCBjbGVhciB0aGUgb3RoZXJzLiAqLworCQkJaC0+bXJlZiA9IE5VTEw7CisJCX0KKwkJLyogUG9pbnQgdGhlIG1yZWYgaGVscGVyIHRvIHRoZSBjdXJyZW50IGhlbHBlciBzdHJ1Y3QuICovCisJCW1yZWYtPmhlbHBlciA9IGg7CisJfQorCW11dGV4X3VubG9jaygmaGRsLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotdHlwZWRlZiBpbnQgKCpjbHVzdGVyX2Z1bmMpKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjLAotCQkJICAgIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOwotCi0vKiBXYWxrIG92ZXIgYWxsIGNvbnRyb2xzIGluIHY0bDJfZXh0X2NvbnRyb2xzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBjbHVzdGVyCi0gICBhbmQgY2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uICovCi1zdGF0aWMgaW50IGNsdXN0ZXJfd2Fsayh1bnNpZ25lZCBmcm9tLAotCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKLQkJCXN0cnVjdCBjdHJsX2hlbHBlciAqaGVscGVycywKLQkJCWNsdXN0ZXJfZnVuYyBmKQotewotCXN0cnVjdCB2NGwyX2N0cmwgKipjbHVzdGVyID0gaGVscGVyc1tmcm9tXS5jdHJsLT5jbHVzdGVyOwotCWludCByZXQgPSAwOwotCWludCBpOwotCi0JLyogRmluZCBhbnkgY29udHJvbHMgZnJvbSB0aGUgc2FtZSBjbHVzdGVyIGFuZCBjYWxsIHRoZSBmdW5jdGlvbiAqLwotCWZvciAoaSA9IGZyb207ICFyZXQgJiYgaSA8IGNzLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBoZWxwZXJzW2ldLmN0cmw7Ci0KLQkJaWYgKCFoZWxwZXJzW2ldLmhhbmRsZWQgJiYgY3RybC0+Y2x1c3RlciA9PSBjbHVzdGVyKQotCQkJcmV0ID0gZigmY3MtPmNvbnRyb2xzW2ldLCBjdHJsKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgY2x1c3Rlcl9kb25lKHVuc2lnbmVkIGZyb20sCi0JCQkgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKLQkJCSBzdHJ1Y3QgY3RybF9oZWxwZXIgKmhlbHBlcnMpCi17Ci0Jc3RydWN0IHY0bDJfY3RybCAqKmNsdXN0ZXIgPSBoZWxwZXJzW2Zyb21dLmN0cmwtPmNsdXN0ZXI7Ci0JaW50IGk7Ci0KLQkvKiBGaW5kIGFueSBjb250cm9scyBmcm9tIHRoZSBzYW1lIGNsdXN0ZXIgYW5kIG1hcmsgdGhlbSBhcyBoYW5kbGVkICovCi0JZm9yIChpID0gZnJvbTsgaSA8IGNzLT5jb3VudDsgaSsrKQotCQlpZiAoaGVscGVyc1tpXS5jdHJsLT5jbHVzdGVyID09IGNsdXN0ZXIpCi0JCQloZWxwZXJzW2ldLmhhbmRsZWQgPSB0cnVlOwotfQotCiAvKiBIYW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSBjcy0+Y291bnQgPT0gMC4gSXQgY2hlY2tzIHdoZXRoZXIgdGhlCiAgICBzcGVjaWZpZWQgY29udHJvbCBjbGFzcyBleGlzdHMuIElmIHRoYXQgY2xhc3MgSUQgaXMgMCwgdGhlbiBpdCBjaGVja3MKICAgIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb250cm9scyBhdCBhbGwuICovCkBAIC0xNTMxLDEwICsxOTE4LDEwIEBACiAvKiBHZXQgZXh0ZW5kZWQgY29udHJvbHMuIEFsbG9jYXRlcyB0aGUgaGVscGVycyBhcnJheSBpZiBuZWVkZWQuICovCiBpbnQgdjRsMl9nX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcykKIHsKLQlzdHJ1Y3QgY3RybF9oZWxwZXIgaGVscGVyWzRdOwotCXN0cnVjdCBjdHJsX2hlbHBlciAqaGVscGVycyA9IGhlbHBlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hlbHBlciBoZWxwZXJbNF07CisJc3RydWN0IHY0bDJfY3RybF9oZWxwZXIgKmhlbHBlcnMgPSBoZWxwZXI7CiAJaW50IHJldDsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAogCWNzLT5lcnJvcl9pZHggPSBjcy0+Y291bnQ7CiAJY3MtPmN0cmxfY2xhc3MgPSBWNEwyX0NUUkxfSUQyQ0xBU1MoY3MtPmN0cmxfY2xhc3MpOwpAQCAtMTU1MSwzMCArMTkzOCw0NiBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0ID0gcHJlcGFyZV9leHRfY3RybHMoaGRsLCBjcywgaGVscGVycywgZmFsc2UpOworCXJldCA9IHByZXBhcmVfZXh0X2N0cmxzKGhkbCwgY3MsIGhlbHBlcnMpOworCWNzLT5lcnJvcl9pZHggPSBjcy0+Y291bnQ7CiAKIAlmb3IgKGkgPSAwOyAhcmV0ICYmIGkgPCBjcy0+Y291bnQ7IGkrKykKIAkJaWYgKGhlbHBlcnNbaV0uY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZKQogCQkJcmV0ID0gLUVBQ0NFUzsKIAogCWZvciAoaSA9IDA7ICFyZXQgJiYgaSA8IGNzLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBoZWxwZXJzW2ldLmN0cmw7Ci0JCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciA9IGN0cmwtPmNsdXN0ZXJbMF07CisJCWludCAoKmN0cmxfdG9fdXNlcikoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmMsCisJCQkJICAgIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpID0gY3VyX3RvX3VzZXI7CisJCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlcjsKIAotCQlpZiAoaGVscGVyc1tpXS5oYW5kbGVkKQorCQlpZiAoaGVscGVyc1tpXS5tcmVmID09IE5VTEwpCiAJCQljb250aW51ZTsKIAorCQltYXN0ZXIgPSBoZWxwZXJzW2ldLm1yZWYtPmN0cmw7CiAJCWNzLT5lcnJvcl9pZHggPSBpOwogCiAJCXY0bDJfY3RybF9sb2NrKG1hc3Rlcik7Ci0JCS8qIGdfdm9sYXRpbGVfY3RybCB3aWxsIHVwZGF0ZSB0aGUgY3VycmVudCBjb250cm9sIHZhbHVlcyAqLwotCQlpZiAoY3RybC0+aXNfdm9sYXRpbGUgJiYgbWFzdGVyLT5vcHMtPmdfdm9sYXRpbGVfY3RybCkKLQkJCXJldCA9IG1hc3Rlci0+b3BzLT5nX3ZvbGF0aWxlX2N0cmwobWFzdGVyKTsKLQkJLyogSWYgT0ssIHRoZW4gY29weSB0aGUgY3VycmVudCBjb250cm9sIHZhbHVlcyB0byB0aGUgY2FsbGVyICovCi0JCWlmICghcmV0KQotCQkJcmV0ID0gY2x1c3Rlcl93YWxrKGksIGNzLCBoZWxwZXJzLCBjdXJfdG9fdXNlcik7CisKKwkJLyogZ192b2xhdGlsZV9jdHJsIHdpbGwgdXBkYXRlIHRoZSBuZXcgY29udHJvbCB2YWx1ZXMgKi8KKwkJaWYgKGhhc19vcChtYXN0ZXIsIGdfdm9sYXRpbGVfY3RybCkgJiYgIWlzX2N1cl9tYW51YWwobWFzdGVyKSkgeworCQkJZm9yIChqID0gMDsgaiA8IG1hc3Rlci0+bmNvbnRyb2xzOyBqKyspCisJCQkJY3VyX3RvX25ldyhtYXN0ZXItPmNsdXN0ZXJbal0pOworCQkJcmV0ID0gY2FsbF9vcChtYXN0ZXIsIGdfdm9sYXRpbGVfY3RybCk7CisJCQljdHJsX3RvX3VzZXIgPSBuZXdfdG9fdXNlcjsKKwkJfQorCQkvKiBJZiBPSywgdGhlbiBjb3B5IHRoZSBjdXJyZW50IChmb3Igbm9uLXZvbGF0aWxlIGNvbnRyb2xzKQorCQkgICBvciB0aGUgbmV3IChmb3Igdm9sYXRpbGUgY29udHJvbHMpIGNvbnRyb2wgdmFsdWVzIHRvIHRoZQorCQkgICBjYWxsZXIgKi8KKwkJaWYgKCFyZXQpIHsKKwkJCXUzMiBpZHggPSBpOworCisJCQlkbyB7CisJCQkJcmV0ID0gY3RybF90b191c2VyKGNzLT5jb250cm9scyArIGlkeCwKKwkJCQkJCSAgIGhlbHBlcnNbaWR4XS5jdHJsKTsKKwkJCQlpZHggPSBoZWxwZXJzW2lkeF0ubmV4dDsKKwkJCX0gd2hpbGUgKCFyZXQgJiYgaWR4KTsKKwkJfQogCQl2NGwyX2N0cmxfdW5sb2NrKG1hc3Rlcik7Ci0JCWNsdXN0ZXJfZG9uZShpLCBjcywgaGVscGVycyk7CiAJfQogCiAJaWYgKGNzLT5jb3VudCA+IEFSUkFZX1NJWkUoaGVscGVyKSkKQEAgLTE1OTQsMTUgKzE5OTcsMjEgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXIgPSBjdHJsLT5jbHVzdGVyWzBdOwogCWludCByZXQgPSAwOworCWludCBpOwogCiAJaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAl2NGwyX2N0cmxfbG9jayhtYXN0ZXIpOwogCS8qIGdfdm9sYXRpbGVfY3RybCB3aWxsIHVwZGF0ZSB0aGUgY3VycmVudCBjb250cm9sIHZhbHVlcyAqLwotCWlmIChjdHJsLT5pc192b2xhdGlsZSAmJiBtYXN0ZXItPm9wcy0+Z192b2xhdGlsZV9jdHJsKQotCQlyZXQgPSBtYXN0ZXItPm9wcy0+Z192b2xhdGlsZV9jdHJsKG1hc3Rlcik7Ci0JKnZhbCA9IGN0cmwtPmN1ci52YWw7CisJaWYgKGN0cmwtPmlzX3ZvbGF0aWxlICYmICFpc19jdXJfbWFudWFsKG1hc3RlcikpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bmNvbnRyb2xzOyBpKyspCisJCQljdXJfdG9fbmV3KG1hc3Rlci0+Y2x1c3RlcltpXSk7CisJCXJldCA9IGNhbGxfb3AobWFzdGVyLCBnX3ZvbGF0aWxlX2N0cmwpOworCQkqdmFsID0gY3RybC0+dmFsOworCX0gZWxzZSB7CisJCSp2YWwgPSBjdHJsLT5jdXIudmFsOworCX0KIAl2NGwyX2N0cmxfdW5sb2NrKG1hc3Rlcik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MzgsNzIgKzIwNDcsNjEgQEAKIC8qIENvcmUgZnVuY3Rpb24gdGhhdCBjYWxscyB0cnkvc19jdHJsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIG5ldyB2YWx1ZSBpcwogICAgY29waWVkIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGEgc2V0LgogICAgTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHJsLT5oYW5kbGVyLT5sb2NrIGhlbGQuICovCi1zdGF0aWMgaW50IHRyeV9vcl9zZXRfY29udHJvbF9jbHVzdGVyKHN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciwgYm9vbCBzZXQpCitzdGF0aWMgaW50IHRyeV9vcl9zZXRfY2x1c3RlcihzdHJ1Y3QgdjRsMl9maCAqZmgsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXIsIGJvb2wgc2V0KQogewotCWJvb2wgdHJ5ID0gIXNldDsKLQlpbnQgcmV0ID0gMDsKKwlib29sIHVwZGF0ZV9mbGFnOworCWludCByZXQ7CiAJaW50IGk7CiAKIAkvKiBHbyB0aHJvdWdoIHRoZSBjbHVzdGVyIGFuZCBlaXRoZXIgdmFsaWRhdGUgdGhlIG5ldyB2YWx1ZSBvcgogCSAgIChpZiBubyBuZXcgdmFsdWUgd2FzIHNldCksIGNvcHkgdGhlIGN1cnJlbnQgdmFsdWUgdG8gdGhlIG5ldwogCSAgIHZhbHVlLCBlbnN1cmluZyBhIGNvbnNpc3RlbnQgdmlldyBmb3IgdGhlIGNvbnRyb2wgb3BzIHdoZW4KIAkgICBjYWxsZWQuICovCi0JZm9yIChpID0gMDsgIXJldCAmJiBpIDwgbWFzdGVyLT5uY29udHJvbHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKSB7CiAJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBtYXN0ZXItPmNsdXN0ZXJbaV07CiAKIAkJaWYgKGN0cmwgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChjdHJsLT5pc19uZXcpIHsKLQkJCS8qIERvdWJsZSBjaGVjayB0aGlzOiBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZQotCQkJICAgbGFzdCBjaGVjayBpbiB0cnlfb3Jfc2V0X2V4dF9jdHJscygpLiAqLwotCQkJaWYgKHNldCAmJiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19HUkFCQkVEKSkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCi0JCQkvKiBWYWxpZGF0ZSBpZiByZXF1aXJlZCAqLwotCQkJaWYgKCFzZXQpCi0JCQkJcmV0ID0gdmFsaWRhdGVfbmV3KGN0cmwpOworCQlpZiAoIWN0cmwtPmlzX25ldykgeworCQkJY3VyX3RvX25ldyhjdHJsKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIE5vIG5ldyB2YWx1ZSB3YXMgc2V0LCBzbyBjb3B5IHRoZSBjdXJyZW50IGFuZCBmb3JjZQotCQkgICBhIGNhbGwgdG8gdHJ5X2N0cmwgbGF0ZXIsIHNpbmNlIHRoZSB2YWx1ZXMgZm9yIHRoZSBjbHVzdGVyCi0JCSAgIG1heSBub3cgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZW5kIHJlc3VsdCBtaWdodCBiZSBpbnZhbGlkLiAqLwotCQl0cnkgPSB0cnVlOwotCQljdXJfdG9fbmV3KGN0cmwpOworCQkvKiBDaGVjayBhZ2FpbjogaXQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUKKwkJICAgcHJldmlvdXMgY2hlY2sgaW4gdHJ5X29yX3NldF9leHRfY3RybHMoKS4gKi8KKwkJaWYgKHNldCAmJiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19HUkFCQkVEKSkKKwkJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JLyogRm9yIGxhcmdlciBjbHVzdGVycyB5b3UgaGF2ZSB0byBjYWxsIHRyeV9jdHJsIGFnYWluIHRvCi0JICAgdmVyaWZ5IHRoYXQgdGhlIGNvbnRyb2xzIGFyZSBzdGlsbCB2YWxpZCBhZnRlciB0aGUKLQkgICAnY3VyX3RvX25ldycgYWJvdmUuICovCi0JaWYgKCFyZXQgJiYgbWFzdGVyLT5vcHMtPnRyeV9jdHJsICYmIHRyeSkKLQkJcmV0ID0gbWFzdGVyLT5vcHMtPnRyeV9jdHJsKG1hc3Rlcik7CisJcmV0ID0gY2FsbF9vcChtYXN0ZXIsIHRyeV9jdHJsKTsKIAogCS8qIERvbid0IHNldCBpZiB0aGVyZSBpcyBubyBjaGFuZ2UgKi8KLQlpZiAoIXJldCAmJiBzZXQgJiYgY2x1c3Rlcl9jaGFuZ2VkKG1hc3RlcikpIHsKLQkJcmV0ID0gbWFzdGVyLT5vcHMtPnNfY3RybChtYXN0ZXIpOwotCQkvKiBJZiBPSywgdGhlbiBtYWtlIHRoZSBuZXcgdmFsdWVzIHBlcm1hbmVudC4gKi8KLQkJaWYgKCFyZXQpCi0JCQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5uY29udHJvbHM7IGkrKykKLQkJCQluZXdfdG9fY3VyKG1hc3Rlci0+Y2x1c3RlcltpXSk7Ci0JfQotCXJldHVybiByZXQ7CisJaWYgKHJldCB8fCAhc2V0IHx8ICFjbHVzdGVyX2NoYW5nZWQobWFzdGVyKSkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjYWxsX29wKG1hc3Rlciwgc19jdHJsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSWYgT0ssIHRoZW4gbWFrZSB0aGUgbmV3IHZhbHVlcyBwZXJtYW5lbnQuICovCisJdXBkYXRlX2ZsYWcgPSBpc19jdXJfbWFudWFsKG1hc3RlcikgIT0gaXNfbmV3X21hbnVhbChtYXN0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKQorCQluZXdfdG9fY3VyKGZoLCBtYXN0ZXItPmNsdXN0ZXJbaV0sIHVwZGF0ZV9mbGFnICYmIGkgPiAwKTsKKwlyZXR1cm4gMDsKIH0KIAotLyogVHJ5IG9yIHNldCBjb250cm9scy4gKi8KLXN0YXRpYyBpbnQgdHJ5X29yX3NldF9leHRfY3RybHMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCi0JCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKLQkJCQlzdHJ1Y3QgY3RybF9oZWxwZXIgKmhlbHBlcnMsCi0JCQkJYm9vbCBzZXQpCisvKiBWYWxpZGF0ZSBjb250cm9scy4gKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfY3RybHMoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKKwkJCSAgc3RydWN0IHY0bDJfY3RybF9oZWxwZXIgKmhlbHBlcnMsIGJvb2wgc2V0KQogewotCXVuc2lnbmVkIGksIGo7CisJdW5zaWduZWQgaTsKIAlpbnQgcmV0ID0gMDsKIAogCWNzLT5lcnJvcl9pZHggPSBjcy0+Y291bnQ7CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBoZWxwZXJzW2ldLmN0cmw7CiAKLQkJaWYgKCFzZXQpCi0JCQljcy0+ZXJyb3JfaWR4ID0gaTsKKwkJY3MtPmVycm9yX2lkeCA9IGk7CiAKIAkJaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZKQogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC0xNzE1LDUwICsyMTEzLDIyIEBACiAJCSAgIGJlc3QtZWZmb3J0IHRvIGF2b2lkIHRoYXQuICovCiAJCWlmIChzZXQgJiYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCkpCiAJCQlyZXR1cm4gLUVCVVNZOworCQlyZXQgPSB2YWxpZGF0ZV9uZXcoY3RybCwgJmNzLT5jb250cm9sc1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCX0KLQotCWZvciAoaSA9IDA7ICFyZXQgJiYgaSA8IGNzLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBoZWxwZXJzW2ldLmN0cmw7Ci0JCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciA9IGN0cmwtPmNsdXN0ZXJbMF07Ci0KLQkJY3MtPmVycm9yX2lkeCA9IGk7Ci0KLQkJaWYgKGhlbHBlcnNbaV0uaGFuZGxlZCkKLQkJCWNvbnRpbnVlOwotCi0JCXY0bDJfY3RybF9sb2NrKGN0cmwpOwotCi0JCS8qIFJlc2V0IHRoZSAnaXNfbmV3JyBmbGFncyBvZiB0aGUgY2x1c3RlciAqLwotCQlmb3IgKGogPSAwOyBqIDwgbWFzdGVyLT5uY29udHJvbHM7IGorKykKLQkJCWlmIChtYXN0ZXItPmNsdXN0ZXJbal0pCi0JCQkJbWFzdGVyLT5jbHVzdGVyW2pdLT5pc19uZXcgPSAwOwotCi0JCS8qIENvcHkgdGhlIG5ldyBjYWxsZXItc3VwcGxpZWQgY29udHJvbCB2YWx1ZXMuCi0JCSAgIHVzZXJfdG9fbmV3KCkgc2V0cyAnaXNfbmV3JyB0byAxLiAqLwotCQlyZXQgPSBjbHVzdGVyX3dhbGsoaSwgY3MsIGhlbHBlcnMsIHVzZXJfdG9fbmV3KTsKLQotCQlpZiAoIXJldCkKLQkJCXJldCA9IHRyeV9vcl9zZXRfY29udHJvbF9jbHVzdGVyKG1hc3Rlciwgc2V0KTsKLQotCQkvKiBDb3B5IHRoZSBuZXcgdmFsdWVzIGJhY2sgdG8gdXNlcnNwYWNlLiAqLwotCQlpZiAoIXJldCkKLQkJCXJldCA9IGNsdXN0ZXJfd2FsayhpLCBjcywgaGVscGVycywgbmV3X3RvX3VzZXIpOwotCi0JCXY0bDJfY3RybF91bmxvY2soY3RybCk7Ci0JCWNsdXN0ZXJfZG9uZShpLCBjcywgaGVscGVycyk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFRyeSBvciB0cnktYW5kLXNldCBjb250cm9scyAqLwotc3RhdGljIGludCB0cnlfc2V0X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKK3N0YXRpYyBpbnQgdHJ5X3NldF9leHRfY3RybHMoc3RydWN0IHY0bDJfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKIAkJCSAgICAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKIAkJCSAgICAgYm9vbCBzZXQpCiB7Ci0Jc3RydWN0IGN0cmxfaGVscGVyIGhlbHBlcls0XTsKLQlzdHJ1Y3QgY3RybF9oZWxwZXIgKmhlbHBlcnMgPSBoZWxwZXI7CisJc3RydWN0IHY0bDJfY3RybF9oZWxwZXIgaGVscGVyWzRdOworCXN0cnVjdCB2NGwyX2N0cmxfaGVscGVyICpoZWxwZXJzID0gaGVscGVyOworCXVuc2lnbmVkIGksIGo7CiAJaW50IHJldDsKLQlpbnQgaTsKIAogCWNzLT5lcnJvcl9pZHggPSBjcy0+Y291bnQ7CiAJY3MtPmN0cmxfY2xhc3MgPSBWNEwyX0NUUkxfSUQyQ0xBU1MoY3MtPmN0cmxfY2xhc3MpOwpAQCAtMTc3NCwyNSArMjE0NCw0OSBAQAogCQlpZiAoIWhlbHBlcnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmV0ID0gcHJlcGFyZV9leHRfY3RybHMoaGRsLCBjcywgaGVscGVycywgIXNldCk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlOwotCi0JLyogRmlyc3QgJ3RyeScgYWxsIGNvbnRyb2xzIGFuZCBhYm9ydCBvbiBlcnJvciAqLwotCXJldCA9IHRyeV9vcl9zZXRfZXh0X2N0cmxzKGhkbCwgY3MsIGhlbHBlcnMsIGZhbHNlKTsKLQkvKiBJZiB0aGlzIGlzIGEgJ3NldCcgb3BlcmF0aW9uIGFuZCB0aGUgaW5pdGlhbCAndHJ5JyBmYWlsZWQsCi0JICAgdGhlbiBzZXQgZXJyb3JfaWR4IHRvIGNvdW50IHRvIHRlbGwgdGhlIGFwcGxpY2F0aW9uIHRoYXQgbm8KLQkgICBjb250cm9scyBjaGFuZ2VkIHZhbHVlIHlldC4gKi8KLQlpZiAoc2V0KQorCXJldCA9IHByZXBhcmVfZXh0X2N0cmxzKGhkbCwgY3MsIGhlbHBlcnMpOworCWlmICghcmV0KQorCQlyZXQgPSB2YWxpZGF0ZV9jdHJscyhjcywgaGVscGVycywgc2V0KTsKKwlpZiAocmV0ICYmIHNldCkKIAkJY3MtPmVycm9yX2lkeCA9IGNzLT5jb3VudDsKLQlpZiAoIXJldCAmJiBzZXQpIHsKLQkJLyogUmVzZXQgJ2hhbmRsZWQnIHN0YXRlICovCi0JCWZvciAoaSA9IDA7IGkgPCBjcy0+Y291bnQ7IGkrKykKLQkJCWhlbHBlcnNbaV0uaGFuZGxlZCA9IGZhbHNlOwotCQlyZXQgPSB0cnlfb3Jfc2V0X2V4dF9jdHJscyhoZGwsIGNzLCBoZWxwZXJzLCB0cnVlKTsKKwlmb3IgKGkgPSAwOyAhcmV0ICYmIGkgPCBjcy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXI7CisJCXUzMiBpZHggPSBpOworCisJCWlmIChoZWxwZXJzW2ldLm1yZWYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWNzLT5lcnJvcl9pZHggPSBpOworCQltYXN0ZXIgPSBoZWxwZXJzW2ldLm1yZWYtPmN0cmw7CisJCXY0bDJfY3RybF9sb2NrKG1hc3Rlcik7CisKKwkJLyogUmVzZXQgdGhlICdpc19uZXcnIGZsYWdzIG9mIHRoZSBjbHVzdGVyICovCisJCWZvciAoaiA9IDA7IGogPCBtYXN0ZXItPm5jb250cm9sczsgaisrKQorCQkJaWYgKG1hc3Rlci0+Y2x1c3RlcltqXSkKKwkJCQltYXN0ZXItPmNsdXN0ZXJbal0tPmlzX25ldyA9IDA7CisKKwkJLyogQ29weSB0aGUgbmV3IGNhbGxlci1zdXBwbGllZCBjb250cm9sIHZhbHVlcy4KKwkJICAgdXNlcl90b19uZXcoKSBzZXRzICdpc19uZXcnIHRvIDEuICovCisJCWRvIHsKKwkJCXJldCA9IHVzZXJfdG9fbmV3KGNzLT5jb250cm9scyArIGlkeCwgaGVscGVyc1tpZHhdLmN0cmwpOworCQkJaWR4ID0gaGVscGVyc1tpZHhdLm5leHQ7CisJCX0gd2hpbGUgKCFyZXQgJiYgaWR4KTsKKworCQlpZiAoIXJldCkKKwkJCXJldCA9IHRyeV9vcl9zZXRfY2x1c3RlcihmaCwgbWFzdGVyLCBzZXQpOworCisJCS8qIENvcHkgdGhlIG5ldyB2YWx1ZXMgYmFjayB0byB1c2Vyc3BhY2UuICovCisJCWlmICghcmV0KSB7CisJCQlpZHggPSBpOworCQkJZG8geworCQkJCXJldCA9IG5ld190b191c2VyKGNzLT5jb250cm9scyArIGlkeCwKKwkJCQkJCWhlbHBlcnNbaWR4XS5jdHJsKTsKKwkJCQlpZHggPSBoZWxwZXJzW2lkeF0ubmV4dDsKKwkJCX0gd2hpbGUgKCFyZXQgJiYgaWR4KTsKKwkJfQorCQl2NGwyX2N0cmxfdW5sb2NrKG1hc3Rlcik7CiAJfQogCi1mcmVlOgogCWlmIChjcy0+Y291bnQgPiBBUlJBWV9TSVpFKGhlbHBlcikpCiAJCWtmcmVlKGhlbHBlcnMpOwogCXJldHVybiByZXQ7CkBAIC0xODAwLDM3ICsyMTk0LDM5IEBACiAKIGludCB2NGwyX3RyeV9leHRfY3RybHMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3MpCiB7Ci0JcmV0dXJuIHRyeV9zZXRfZXh0X2N0cmxzKGhkbCwgY3MsIGZhbHNlKTsKKwlyZXR1cm4gdHJ5X3NldF9leHRfY3RybHMoTlVMTCwgaGRsLCBjcywgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX3RyeV9leHRfY3RybHMpOwogCi1pbnQgdjRsMl9zX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcykKK2ludCB2NGwyX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2ZoICpmaCwgc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3MpCiB7Ci0JcmV0dXJuIHRyeV9zZXRfZXh0X2N0cmxzKGhkbCwgY3MsIHRydWUpOworCXJldHVybiB0cnlfc2V0X2V4dF9jdHJscyhmaCwgaGRsLCBjcywgdHJ1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfc19leHRfY3RybHMpOwogCiBpbnQgdjRsMl9zdWJkZXZfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKQogewotCXJldHVybiB0cnlfc2V0X2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBjcywgZmFsc2UpOworCXJldHVybiB0cnlfc2V0X2V4dF9jdHJscyhOVUxMLCBzZC0+Y3RybF9oYW5kbGVyLCBjcywgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzKTsKIAogaW50IHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3MpCiB7Ci0JcmV0dXJuIHRyeV9zZXRfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGNzLCB0cnVlKTsKKwlyZXR1cm4gdHJ5X3NldF9leHRfY3RybHMoTlVMTCwgc2QtPmN0cmxfaGFuZGxlciwgY3MsIHRydWUpOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX3N1YmRldl9zX2V4dF9jdHJscyk7CiAKIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgVklESU9DX1NfQ1RSTCBjb21wYXRpYmlsaXR5ICovCi1zdGF0aWMgaW50IHNldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHMzMiAqdmFsKQorc3RhdGljIGludCBzZXRfY3RybChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHMzMiAqdmFsKQogewogCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciA9IGN0cmwtPmNsdXN0ZXJbMF07CiAJaW50IHJldDsKIAlpbnQgaTsKIAotCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSkKLQkJcmV0dXJuIC1FQUNDRVM7CisJcmV0ID0gdmFsaWRhdGVfbmV3X2ludChjdHJsLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAl2NGwyX2N0cmxfbG9jayhjdHJsKTsKIApAQCAtMTg0MSwyOCArMjIzNywzMCBAQAogCiAJY3RybC0+dmFsID0gKnZhbDsKIAljdHJsLT5pc19uZXcgPSAxOwotCXJldCA9IHRyeV9vcl9zZXRfY29udHJvbF9jbHVzdGVyKG1hc3RlciwgZmFsc2UpOwotCWlmICghcmV0KQotCQlyZXQgPSB0cnlfb3Jfc2V0X2NvbnRyb2xfY2x1c3RlcihtYXN0ZXIsIHRydWUpOworCXJldCA9IHRyeV9vcl9zZXRfY2x1c3RlcihmaCwgbWFzdGVyLCB0cnVlKTsKIAkqdmFsID0gY3RybC0+Y3VyLnZhbDsKIAl2NGwyX2N0cmxfdW5sb2NrKGN0cmwpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCB2NGwyX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfY29udHJvbCAqY29udHJvbCkKK2ludCB2NGwyX3NfY3RybChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjb250cm9sKQogewogCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSB2NGwyX2N0cmxfZmluZChoZGwsIGNvbnRyb2wtPmlkKTsKIAogCWlmIChjdHJsID09IE5VTEwgfHwgIXR5cGVfaXNfaW50KGN0cmwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBzZXRfY3RybChjdHJsLCAmY29udHJvbC0+dmFsdWUpOworCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlyZXR1cm4gc2V0X2N0cmwoZmgsIGN0cmwsICZjb250cm9sLT52YWx1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfc19jdHJsKTsKIAogaW50IHY0bDJfc3ViZGV2X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjb250cm9sKQogewotCXJldHVybiB2NGwyX3NfY3RybChzZC0+Y3RybF9oYW5kbGVyLCBjb250cm9sKTsKKwlyZXR1cm4gdjRsMl9zX2N0cmwoTlVMTCwgc2QtPmN0cmxfaGFuZGxlciwgY29udHJvbCk7CiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfc3ViZGV2X3NfY3RybCk7CiAKQEAgLTE4NzAsNiArMjI2OCwzNCBAQAogewogCS8qIEl0J3MgYSBkcml2ZXIgYnVnIGlmIHRoaXMgaGFwcGVucy4gKi8KIAlXQVJOX09OKCF0eXBlX2lzX2ludChjdHJsKSk7Ci0JcmV0dXJuIHNldF9jdHJsKGN0cmwsICZ2YWwpOworCXJldHVybiBzZXRfY3RybChOVUxMLCBjdHJsLCAmdmFsKTsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3NfY3RybCk7CisKK3ZvaWQgdjRsMl9jdHJsX2FkZF9ldmVudChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLAorCQkJCXN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgKnNldikKK3sKKwl2NGwyX2N0cmxfbG9jayhjdHJsKTsKKwlsaXN0X2FkZF90YWlsKCZzZXYtPm5vZGUsICZjdHJsLT5ldl9zdWJzKTsKKwlpZiAoY3RybC0+dHlwZSAhPSBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTICYmCisJICAgIChzZXYtPmZsYWdzICYgVjRMMl9FVkVOVF9TVUJfRkxfU0VORF9JTklUSUFMKSkgeworCQlzdHJ1Y3QgdjRsMl9ldmVudCBldjsKKwkJdTMyIGNoYW5nZXMgPSBWNEwyX0VWRU5UX0NUUkxfQ0hfRkxBR1M7CisKKwkJaWYgKCEoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZKSkKKwkJCWNoYW5nZXMgfD0gVjRMMl9FVkVOVF9DVFJMX0NIX1ZBTFVFOworCQlmaWxsX2V2ZW50KCZldiwgY3RybCwgY2hhbmdlcyk7CisJCXY0bDJfZXZlbnRfcXVldWVfZmgoc2V2LT5maCwgJmV2KTsKKwl9CisJdjRsMl9jdHJsX3VubG9jayhjdHJsKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2FkZF9ldmVudCk7CisKK3ZvaWQgdjRsMl9jdHJsX2RlbF9ldmVudChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLAorCQkJCXN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgKnNldikKK3sKKwl2NGwyX2N0cmxfbG9jayhjdHJsKTsKKwlsaXN0X2RlbCgmc2V2LT5ub2RlKTsKKwl2NGwyX2N0cmxfdW5sb2NrKGN0cmwpOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfZGVsX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwppbmRleCA0YWFlNTAxLi5jNzI4NTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAkJdmRldi0+djRsMl9kZXYgPSB2NGwyX2RldjsKIAkJdmRldi0+Zm9wcyA9ICZ2NGwyX3N1YmRldl9mb3BzOwogCQl2ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJCXZkZXYtPmN0cmxfaGFuZGxlciA9IHNkLT5jdHJsX2hhbmRsZXI7CiAJCWVyciA9IF9fdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX1NVQkRFViwgLTEsIDEsCiAJCQkJCSAgICAgIHNkLT5vd25lcik7CiAJCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWV2ZW50LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZXZlbnQuYwppbmRleCA2OWZkMzQzLi41M2IxOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZXZlbnQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZXZlbnQuYwpAQCAtMjUsMTAwICsyNSwzOSBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1maC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotaW50IHY0bDJfZXZlbnRfaW5pdChzdHJ1Y3QgdjRsMl9maCAqZmgpCitzdGF0aWMgdW5zaWduZWQgc2V2X3Bvcyhjb25zdCBzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXYsIHVuc2lnbmVkIGlkeCkKIHsKLQlmaC0+ZXZlbnRzID0ga3phbGxvYyhzaXplb2YoKmZoLT5ldmVudHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZmgtPmV2ZW50cyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZoLT5ldmVudHMtPndhaXQpOwotCi0JSU5JVF9MSVNUX0hFQUQoJmZoLT5ldmVudHMtPmZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZmaC0+ZXZlbnRzLT5hdmFpbGFibGUpOwotCUlOSVRfTElTVF9IRUFEKCZmaC0+ZXZlbnRzLT5zdWJzY3JpYmVkKTsKLQotCWZoLT5ldmVudHMtPnNlcXVlbmNlID0gLTE7Ci0KLQlyZXR1cm4gMDsKKwlpZHggKz0gc2V2LT5maXJzdDsKKwlyZXR1cm4gaWR4ID49IHNldi0+ZWxlbXMgPyBpZHggLSBzZXYtPmVsZW1zIDogaWR4OwogfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9pbml0KTsKLQotaW50IHY0bDJfZXZlbnRfYWxsb2Moc3RydWN0IHY0bDJfZmggKmZoLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlzdHJ1Y3QgdjRsMl9ldmVudHMgKmV2ZW50cyA9IGZoLT5ldmVudHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghZXZlbnRzKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXdoaWxlIChldmVudHMtPm5hbGxvY2F0ZWQgPCBuKSB7Ci0JCXN0cnVjdCB2NGwyX2tldmVudCAqa2V2OwotCi0JCWtldiA9IGt6YWxsb2Moc2l6ZW9mKCprZXYpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGtldiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZoLT52ZGV2LT5maF9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfYWRkX3RhaWwoJmtldi0+bGlzdCwgJmV2ZW50cy0+ZnJlZSk7Ci0JCWV2ZW50cy0+bmFsbG9jYXRlZCsrOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9hbGxvYyk7Ci0KLSNkZWZpbmUgbGlzdF9rZnJlZShsaXN0LCB0eXBlLCBtZW1iZXIpCQkJCVwKLQl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsJCQkJXAotCQl0eXBlICpoaTsJCQkJCVwKLQkJaGkgPSBsaXN0X2ZpcnN0X2VudHJ5KGxpc3QsIHR5cGUsIG1lbWJlcik7CVwKLQkJbGlzdF9kZWwoJmhpLT5tZW1iZXIpOwkJCQlcCi0JCWtmcmVlKGhpKTsJCQkJCVwKLQl9Ci0KLXZvaWQgdjRsMl9ldmVudF9mcmVlKHN0cnVjdCB2NGwyX2ZoICpmaCkKLXsKLQlzdHJ1Y3QgdjRsMl9ldmVudHMgKmV2ZW50cyA9IGZoLT5ldmVudHM7Ci0KLQlpZiAoIWV2ZW50cykKLQkJcmV0dXJuOwotCi0JbGlzdF9rZnJlZSgmZXZlbnRzLT5mcmVlLCBzdHJ1Y3QgdjRsMl9rZXZlbnQsIGxpc3QpOwotCWxpc3Rfa2ZyZWUoJmV2ZW50cy0+YXZhaWxhYmxlLCBzdHJ1Y3QgdjRsMl9rZXZlbnQsIGxpc3QpOwotCWxpc3Rfa2ZyZWUoJmV2ZW50cy0+c3Vic2NyaWJlZCwgc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCwgbGlzdCk7Ci0KLQlrZnJlZShldmVudHMpOwotCWZoLT5ldmVudHMgPSBOVUxMOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9mcmVlKTsKIAogc3RhdGljIGludCBfX3Y0bDJfZXZlbnRfZGVxdWV1ZShzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2NGwyX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgdjRsMl9ldmVudHMgKmV2ZW50cyA9IGZoLT5ldmVudHM7CiAJc3RydWN0IHY0bDJfa2V2ZW50ICprZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGxpc3RfZW1wdHkoJmV2ZW50cy0+YXZhaWxhYmxlKSkgeworCWlmIChsaXN0X2VtcHR5KCZmaC0+YXZhaWxhYmxlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlXQVJOX09OKGV2ZW50cy0+bmF2YWlsYWJsZSA9PSAwKTsKKwlXQVJOX09OKGZoLT5uYXZhaWxhYmxlID09IDApOwogCi0Ja2V2ID0gbGlzdF9maXJzdF9lbnRyeSgmZXZlbnRzLT5hdmFpbGFibGUsIHN0cnVjdCB2NGwyX2tldmVudCwgbGlzdCk7Ci0JbGlzdF9tb3ZlKCZrZXYtPmxpc3QsICZldmVudHMtPmZyZWUpOwotCWV2ZW50cy0+bmF2YWlsYWJsZS0tOworCWtldiA9IGxpc3RfZmlyc3RfZW50cnkoJmZoLT5hdmFpbGFibGUsIHN0cnVjdCB2NGwyX2tldmVudCwgbGlzdCk7CisJbGlzdF9kZWwoJmtldi0+bGlzdCk7CisJZmgtPm5hdmFpbGFibGUtLTsKIAotCWtldi0+ZXZlbnQucGVuZGluZyA9IGV2ZW50cy0+bmF2YWlsYWJsZTsKKwlrZXYtPmV2ZW50LnBlbmRpbmcgPSBmaC0+bmF2YWlsYWJsZTsKIAkqZXZlbnQgPSBrZXYtPmV2ZW50OworCWtldi0+c2V2LT5maXJzdCA9IHNldl9wb3Moa2V2LT5zZXYsIDEpOworCWtldi0+c2V2LT5pbl91c2UtLTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZoLT52ZGV2LT5maF9sb2NrLCBmbGFncyk7CiAKQEAgLTEyOCw3ICs2Nyw2IEBACiBpbnQgdjRsMl9ldmVudF9kZXF1ZXVlKHN0cnVjdCB2NGwyX2ZoICpmaCwgc3RydWN0IHY0bDJfZXZlbnQgKmV2ZW50LAogCQkgICAgICAgaW50IG5vbmJsb2NraW5nKQogewotCXN0cnVjdCB2NGwyX2V2ZW50cyAqZXZlbnRzID0gZmgtPmV2ZW50czsKIAlpbnQgcmV0OwogCiAJaWYgKG5vbmJsb2NraW5nKQpAQCAtMTM5LDggKzc3LDggQEAKIAkJbXV0ZXhfdW5sb2NrKGZoLT52ZGV2LT5sb2NrKTsKIAogCWRvIHsKLQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGV2ZW50cy0+d2FpdCwKLQkJCQkJICAgICAgIGV2ZW50cy0+bmF2YWlsYWJsZSAhPSAwKTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZoLT53YWl0LAorCQkJCQkgICAgICAgZmgtPm5hdmFpbGFibGUgIT0gMCk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAKQEAgLTE1NCwyMyArOTIsNzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZXZlbnRfZGVxdWV1ZSk7CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgZmgtPmV2ZW50LT5sb2NrISAqLworLyogQ2FsbGVyIG11c3QgaG9sZCBmaC0+dmRldi0+ZmhfbG9jayEgKi8KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICp2NGwyX2V2ZW50X3N1YnNjcmliZWQoCi0Jc3RydWN0IHY0bDJfZmggKmZoLCB1MzIgdHlwZSkKKwkJc3RydWN0IHY0bDJfZmggKmZoLCB1MzIgdHlwZSwgdTMyIGlkKQogewotCXN0cnVjdCB2NGwyX2V2ZW50cyAqZXZlbnRzID0gZmgtPmV2ZW50czsKIAlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXY7CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmZoLT52ZGV2LT5maF9sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2V2LCAmZXZlbnRzLT5zdWJzY3JpYmVkLCBsaXN0KSB7Ci0JCWlmIChzZXYtPnR5cGUgPT0gdHlwZSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNldiwgJmZoLT5zdWJzY3JpYmVkLCBsaXN0KQorCQlpZiAoc2V2LT50eXBlID09IHR5cGUgJiYgc2V2LT5pZCA9PSBpZCkKIAkJCXJldHVybiBzZXY7Ci0JfQogCiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIF9fdjRsMl9ldmVudF9xdWV1ZV9maChzdHJ1Y3QgdjRsMl9maCAqZmgsIGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpldiwKKwkJY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXY7CisJc3RydWN0IHY0bDJfa2V2ZW50ICprZXY7CisJYm9vbCBjb3B5X3BheWxvYWQgPSB0cnVlOworCisJLyogQXJlIHdlIHN1YnNjcmliZWQ/ICovCisJc2V2ID0gdjRsMl9ldmVudF9zdWJzY3JpYmVkKGZoLCBldi0+dHlwZSwgZXYtPmlkKTsKKwlpZiAoc2V2ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEluY3JlYXNlIGV2ZW50IHNlcXVlbmNlIG51bWJlciBvbiBmaC4gKi8KKwlmaC0+c2VxdWVuY2UrKzsKKworCS8qIERvIHdlIGhhdmUgYW55IGZyZWUgZXZlbnRzPyAqLworCWlmIChzZXYtPmluX3VzZSA9PSBzZXYtPmVsZW1zKSB7CisJCS8qIG5vLCByZW1vdmUgdGhlIG9sZGVzdCBvbmUgKi8KKwkJa2V2ID0gc2V2LT5ldmVudHMgKyBzZXZfcG9zKHNldiwgMCk7CisJCWxpc3RfZGVsKCZrZXYtPmxpc3QpOworCQlzZXYtPmluX3VzZS0tOworCQlzZXYtPmZpcnN0ID0gc2V2X3BvcyhzZXYsIDEpOworCQlmaC0+bmF2YWlsYWJsZS0tOworCQlpZiAoc2V2LT5lbGVtcyA9PSAxKSB7CisJCQlpZiAoc2V2LT5yZXBsYWNlKSB7CisJCQkJc2V2LT5yZXBsYWNlKCZrZXYtPmV2ZW50LCBldik7CisJCQkJY29weV9wYXlsb2FkID0gZmFsc2U7CisJCQl9CisJCX0gZWxzZSBpZiAoc2V2LT5tZXJnZSkgeworCQkJc3RydWN0IHY0bDJfa2V2ZW50ICpzZWNvbmRfb2xkZXN0ID0KKwkJCQlzZXYtPmV2ZW50cyArIHNldl9wb3Moc2V2LCAwKTsKKwkJCXNldi0+bWVyZ2UoJmtldi0+ZXZlbnQsICZzZWNvbmRfb2xkZXN0LT5ldmVudCk7CisJCX0KKwl9CisKKwkvKiBUYWtlIG9uZSBhbmQgZmlsbCBpdC4gKi8KKwlrZXYgPSBzZXYtPmV2ZW50cyArIHNldl9wb3Moc2V2LCBzZXYtPmluX3VzZSk7CisJa2V2LT5ldmVudC50eXBlID0gZXYtPnR5cGU7CisJaWYgKGNvcHlfcGF5bG9hZCkKKwkJa2V2LT5ldmVudC51ID0gZXYtPnU7CisJa2V2LT5ldmVudC5pZCA9IGV2LT5pZDsKKwlrZXYtPmV2ZW50LnRpbWVzdGFtcCA9ICp0czsKKwlrZXYtPmV2ZW50LnNlcXVlbmNlID0gZmgtPnNlcXVlbmNlOworCXNldi0+aW5fdXNlKys7CisJbGlzdF9hZGRfdGFpbCgma2V2LT5saXN0LCAmZmgtPmF2YWlsYWJsZSk7CisKKwlmaC0+bmF2YWlsYWJsZSsrOworCisJd2FrZV91cF9hbGwoJmZoLT53YWl0KTsKK30KKwogdm9pZCB2NGwyX2V2ZW50X3F1ZXVlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpldikKIHsKIAlzdHJ1Y3QgdjRsMl9maCAqZmg7CkBAIC0xODEsODEgKzE2OCw5NSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmgsICZ2ZGV2LT5maF9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCB2NGwyX2V2ZW50cyAqZXZlbnRzID0gZmgtPmV2ZW50czsKLQkJc3RydWN0IHY0bDJfa2V2ZW50ICprZXY7Ci0KLQkJLyogQXJlIHdlIHN1YnNjcmliZWQ/ICovCi0JCWlmICghdjRsMl9ldmVudF9zdWJzY3JpYmVkKGZoLCBldi0+dHlwZSkpCi0JCQljb250aW51ZTsKLQotCQkvKiBJbmNyZWFzZSBldmVudCBzZXF1ZW5jZSBudW1iZXIgb24gZmguICovCi0JCWV2ZW50cy0+c2VxdWVuY2UrKzsKLQotCQkvKiBEbyB3ZSBoYXZlIGFueSBmcmVlIGV2ZW50cz8gKi8KLQkJaWYgKGxpc3RfZW1wdHkoJmV2ZW50cy0+ZnJlZSkpCi0JCQljb250aW51ZTsKLQotCQkvKiBUYWtlIG9uZSBhbmQgZmlsbCBpdC4gKi8KLQkJa2V2ID0gbGlzdF9maXJzdF9lbnRyeSgmZXZlbnRzLT5mcmVlLCBzdHJ1Y3QgdjRsMl9rZXZlbnQsIGxpc3QpOwotCQlrZXYtPmV2ZW50LnR5cGUgPSBldi0+dHlwZTsKLQkJa2V2LT5ldmVudC51ID0gZXYtPnU7Ci0JCWtldi0+ZXZlbnQudGltZXN0YW1wID0gdGltZXN0YW1wOwotCQlrZXYtPmV2ZW50LnNlcXVlbmNlID0gZXZlbnRzLT5zZXF1ZW5jZTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmtldi0+bGlzdCwgJmV2ZW50cy0+YXZhaWxhYmxlKTsKLQotCQlldmVudHMtPm5hdmFpbGFibGUrKzsKLQotCQl3YWtlX3VwX2FsbCgmZXZlbnRzLT53YWl0KTsKLQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmaCwgJnZkZXYtPmZoX2xpc3QsIGxpc3QpCisJCV9fdjRsMl9ldmVudF9xdWV1ZV9maChmaCwgZXYsICZ0aW1lc3RhbXApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+ZmhfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9xdWV1ZSk7CiAKK3ZvaWQgdjRsMl9ldmVudF9xdWV1ZV9maChzdHJ1Y3QgdjRsMl9maCAqZmgsIGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0aW1lc3BlYyB0aW1lc3RhbXA7CisKKwlrdGltZV9nZXRfdHMoJnRpbWVzdGFtcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmgtPnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKKwlfX3Y0bDJfZXZlbnRfcXVldWVfZmgoZmgsIGV2LCAmdGltZXN0YW1wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9xdWV1ZV9maCk7CisKIGludCB2NGwyX2V2ZW50X3BlbmRpbmcoc3RydWN0IHY0bDJfZmggKmZoKQogewotCXJldHVybiBmaC0+ZXZlbnRzLT5uYXZhaWxhYmxlOworCXJldHVybiBmaC0+bmF2YWlsYWJsZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZXZlbnRfcGVuZGluZyk7CiAKLWludCB2NGwyX2V2ZW50X3N1YnNjcmliZShzdHJ1Y3QgdjRsMl9maCAqZmgsCi0JCQkgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uICpzdWIpCitzdGF0aWMgdm9pZCBjdHJsc19yZXBsYWNlKHN0cnVjdCB2NGwyX2V2ZW50ICpvbGQsIGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpuZXcpCiB7Ci0Jc3RydWN0IHY0bDJfZXZlbnRzICpldmVudHMgPSBmaC0+ZXZlbnRzOwotCXN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgKnNldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBvbGRfY2hhbmdlcyA9IG9sZC0+dS5jdHJsLmNoYW5nZXM7CiAKLQlpZiAoZmgtPmV2ZW50cyA9PSBOVUxMKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiAtRU5PTUVNOworCW9sZC0+dS5jdHJsID0gbmV3LT51LmN0cmw7CisJb2xkLT51LmN0cmwuY2hhbmdlcyB8PSBvbGRfY2hhbmdlczsKK30KKworc3RhdGljIHZvaWQgY3RybHNfbWVyZ2UoY29uc3Qgc3RydWN0IHY0bDJfZXZlbnQgKm9sZCwgc3RydWN0IHY0bDJfZXZlbnQgKm5ldykKK3sKKwluZXctPnUuY3RybC5jaGFuZ2VzIHw9IG9sZC0+dS5jdHJsLmNoYW5nZXM7Cit9CisKK2ludCB2NGwyX2V2ZW50X3N1YnNjcmliZShzdHJ1Y3QgdjRsMl9maCAqZmgsCisJCQkgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uICpzdWIsIHVuc2lnbmVkIGVsZW1zKQoreworCXN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgKnNldiwgKmZvdW5kX2V2OworCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaTsKKworCWlmIChlbGVtcyA8IDEpCisJCWVsZW1zID0gMTsKKwlpZiAoc3ViLT50eXBlID09IFY0TDJfRVZFTlRfQ1RSTCkgeworCQljdHJsID0gdjRsMl9jdHJsX2ZpbmQoZmgtPmN0cmxfaGFuZGxlciwgc3ViLT5pZCk7CisJCWlmIChjdHJsID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzZXYgPSBrbWFsbG9jKHNpemVvZigqc2V2KSwgR0ZQX0tFUk5FTCk7CisJc2V2ID0ga3phbGxvYyhzaXplb2YoKnNldikgKyBzaXplb2Yoc3RydWN0IHY0bDJfa2V2ZW50KSAqIGVsZW1zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNldikKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmgtPnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKLQotCWlmICh2NGwyX2V2ZW50X3N1YnNjcmliZWQoZmgsIHN1Yi0+dHlwZSkgPT0gTlVMTCkgewotCQlJTklUX0xJU1RfSEVBRCgmc2V2LT5saXN0KTsKLQkJc2V2LT50eXBlID0gc3ViLT50eXBlOwotCi0JCWxpc3RfYWRkKCZzZXYtPmxpc3QsICZldmVudHMtPnN1YnNjcmliZWQpOwotCQlzZXYgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBlbGVtczsgaSsrKQorCQlzZXYtPmV2ZW50c1tpXS5zZXYgPSBzZXY7CisJc2V2LT50eXBlID0gc3ViLT50eXBlOworCXNldi0+aWQgPSBzdWItPmlkOworCXNldi0+ZmxhZ3MgPSBzdWItPmZsYWdzOworCXNldi0+ZmggPSBmaDsKKwlzZXYtPmVsZW1zID0gZWxlbXM7CisJaWYgKGN0cmwpIHsKKwkJc2V2LT5yZXBsYWNlID0gY3RybHNfcmVwbGFjZTsKKwkJc2V2LT5tZXJnZSA9IGN0cmxzX21lcmdlOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOworCWZvdW5kX2V2ID0gdjRsMl9ldmVudF9zdWJzY3JpYmVkKGZoLCBzdWItPnR5cGUsIHN1Yi0+aWQpOworCWlmICghZm91bmRfZXYpCisJCWxpc3RfYWRkKCZzZXYtPmxpc3QsICZmaC0+c3Vic2NyaWJlZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmgtPnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKIAotCWtmcmVlKHNldik7CisJLyogdjRsMl9jdHJsX2FkZF9ldmVudCB1c2VzIGEgbXV0ZXgsIHNvIGRvIHRoaXMgb3V0c2lkZSB0aGUgc3BpbiBsb2NrICovCisJaWYgKGZvdW5kX2V2KQorCQlrZnJlZShzZXYpOworCWVsc2UgaWYgKGN0cmwpCisJCXY0bDJfY3RybF9hZGRfZXZlbnQoY3RybCwgc2V2KTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9ldmVudF9zdWJzY3JpYmUpOwogCi1zdGF0aWMgdm9pZCB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlX2FsbChzdHJ1Y3QgdjRsMl9maCAqZmgpCit2b2lkIHY0bDJfZXZlbnRfdW5zdWJzY3JpYmVfYWxsKHN0cnVjdCB2NGwyX2ZoICpmaCkKIHsKLQlzdHJ1Y3QgdjRsMl9ldmVudHMgKmV2ZW50cyA9IGZoLT5ldmVudHM7CisJc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uIHN1YjsKIAlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjYzLDE1ICsyNjQsMTggQEAKIAkJc2V2ID0gTlVMTDsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmgtPnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZldmVudHMtPnN1YnNjcmliZWQpKSB7Ci0JCQlzZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZldmVudHMtPnN1YnNjcmliZWQsCi0JCQkJICAgICAgIHN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQsIGxpc3QpOwotCQkJbGlzdF9kZWwoJnNldi0+bGlzdCk7CisJCWlmICghbGlzdF9lbXB0eSgmZmgtPnN1YnNjcmliZWQpKSB7CisJCQlzZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZmaC0+c3Vic2NyaWJlZCwKKwkJCQkJc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCwgbGlzdCk7CisJCQlzdWIudHlwZSA9IHNldi0+dHlwZTsKKwkJCXN1Yi5pZCA9IHNldi0+aWQ7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmgtPnZkZXYtPmZoX2xvY2ssIGZsYWdzKTsKLQkJa2ZyZWUoc2V2KTsKKwkJaWYgKHNldikKKwkJCXY0bDJfZXZlbnRfdW5zdWJzY3JpYmUoZmgsICZzdWIpOwogCX0gd2hpbGUgKHNldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlX2FsbCk7CiAKIGludCB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlKHN0cnVjdCB2NGwyX2ZoICpmaCwKIAkJCSAgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQpAQCAtMjg2LDExICsyOTAsMTkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOwogCi0Jc2V2ID0gdjRsMl9ldmVudF9zdWJzY3JpYmVkKGZoLCBzdWItPnR5cGUpOwotCWlmIChzZXYgIT0gTlVMTCkKKwlzZXYgPSB2NGwyX2V2ZW50X3N1YnNjcmliZWQoZmgsIHN1Yi0+dHlwZSwgc3ViLT5pZCk7CisJaWYgKHNldiAhPSBOVUxMKSB7CiAJCWxpc3RfZGVsKCZzZXYtPmxpc3QpOworCQlzZXYtPmZoID0gTlVMTDsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaC0+dmRldi0+ZmhfbG9jaywgZmxhZ3MpOworCWlmIChzZXYgJiYgc2V2LT50eXBlID09IFY0TDJfRVZFTlRfQ1RSTCkgeworCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsID0gdjRsMl9jdHJsX2ZpbmQoZmgtPmN0cmxfaGFuZGxlciwgc2V2LT5pZCk7CisKKwkJaWYgKGN0cmwpCisJCQl2NGwyX2N0cmxfZGVsX2V2ZW50KGN0cmwsIHNldik7CisJfQogCiAJa2ZyZWUoc2V2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWZoLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZmguYwppbmRleCA3MTdmNzFlLi4xMjI4MjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZmguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZmguYwpAQCAtMjksMjMgKzI5LDE4IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotaW50IHY0bDJfZmhfaW5pdChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit2b2lkIHY0bDJfZmhfaW5pdChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCiB7CiAJZmgtPnZkZXYgPSB2ZGV2OworCS8qIEluaGVyaXQgZnJvbSB2aWRlb19kZXZpY2UuIE1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkcml2ZXIuICovCisJZmgtPmN0cmxfaGFuZGxlciA9IHZkZXYtPmN0cmxfaGFuZGxlcjsKIAlJTklUX0xJU1RfSEVBRCgmZmgtPmxpc3QpOwogCXNldF9iaXQoVjRMMl9GTF9VU0VTX1Y0TDJfRkgsICZmaC0+dmRldi0+ZmxhZ3MpOwogCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKLQotCS8qCi0JICogZmgtPmV2ZW50cyBvbmx5IG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGlmIHRoZSBkcml2ZXIKLQkgKiBzdXBwb3J0cyB0aGUgVklESU9DX1NVQlNDUklCRV9FVkVOVCBpb2N0bC4KLQkgKi8KLQlpZiAodmRldi0+aW9jdGxfb3BzICYmIHZkZXYtPmlvY3RsX29wcy0+dmlkaW9jX3N1YnNjcmliZV9ldmVudCkKLQkJcmV0dXJuIHY0bDJfZXZlbnRfaW5pdChmaCk7Ci0KLQlmaC0+ZXZlbnRzID0gTlVMTDsKLQotCXJldHVybiAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZoLT53YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmZmgtPmF2YWlsYWJsZSk7CisJSU5JVF9MSVNUX0hFQUQoJmZoLT5zdWJzY3JpYmVkKTsKKwlmaC0+c2VxdWVuY2UgPSAtMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZmhfaW5pdCk7CiAKQEAgLTkxLDEwICs4Niw4IEBACiB7CiAJaWYgKGZoLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQorCXY0bDJfZXZlbnRfdW5zdWJzY3JpYmVfYWxsKGZoKTsKIAlmaC0+dmRldiA9IE5VTEw7Ci0KLQl2NGwyX2V2ZW50X2ZyZWUoZmgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9maF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwppbmRleCA2OWU4YzZmLi4wMDJjZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCkBAIC01NDIsMTIgKzU0MywxMiBAQAogCXN0cnVjdCB2NGwyX2ZoICp2ZmggPSBOVUxMOwogCXN0cnVjdCB2NGwyX2Zvcm1hdCBmX2NvcHk7CiAJaW50IHVzZV9maF9wcmlvID0gMDsKLQlsb25nIHJldCA9IC1FSU5WQUw7CisJbG9uZyByZXQgPSAtRU5PVFRZOwogCiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvZGV2OiBcIiVzXCIgaGFzIG5vIGlvY3RsX29wcy5cbiIsCiAJCQkJdmZkLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKCh2ZmQtPmRlYnVnICYgVjRMMl9ERUJVR19JT0NUTCkgJiYKQEAgLTYwNSw2ICs2MDYsNyBAQAogCQlpZiAoIW9wcy0+dmlkaW9jX3F1ZXJ5Y2FwKQogCQkJYnJlYWs7CiAKKwkJY2FwLT52ZXJzaW9uID0gTElOVVhfVkVSU0lPTl9DT0RFOwogCQlyZXQgPSBvcHMtPnZpZGlvY19xdWVyeWNhcChmaWxlLCBmaCwgY2FwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiZHJpdmVyPSVzLCBjYXJkPSVzLCBidXM9JXMsICIKQEAgLTE0MTgsNyArMTQyMCw5IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnAgPSBhcmc7CiAKLQkJaWYgKHZmZC0+Y3RybF9oYW5kbGVyKQorCQlpZiAodmZoICYmIHZmaC0+Y3RybF9oYW5kbGVyKQorCQkJcmV0ID0gdjRsMl9xdWVyeWN0cmwodmZoLT5jdHJsX2hhbmRsZXIsIHApOworCQllbHNlIGlmICh2ZmQtPmN0cmxfaGFuZGxlcikKIAkJCXJldCA9IHY0bDJfcXVlcnljdHJsKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKIAkJZWxzZSBpZiAob3BzLT52aWRpb2NfcXVlcnljdHJsKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBwKTsKQEAgLTE0MzgsNyArMTQ0Miw5IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpwID0gYXJnOwogCi0JCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJaWYgKHZmaCAmJiB2ZmgtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfZ19jdHJsKHZmaC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAodmZkLT5jdHJsX2hhbmRsZXIpCiAJCQlyZXQgPSB2NGwyX2dfY3RybCh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CiAJCWVsc2UgaWYgKG9wcy0+dmlkaW9jX2dfY3RybCkKIAkJCXJldCA9IG9wcy0+dmlkaW9jX2dfY3RybChmaWxlLCBmaCwgcCk7CkBAIC0xNDcwLDE0ICsxNDc2LDE4IEBACiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyBjdHJsczsKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgY3RybDsKIAotCQlpZiAoIXZmZC0+Y3RybF9oYW5kbGVyICYmCisJCWlmICghKHZmaCAmJiB2ZmgtPmN0cmxfaGFuZGxlcikgJiYgIXZmZC0+Y3RybF9oYW5kbGVyICYmCiAJCQkhb3BzLT52aWRpb2Nfc19jdHJsICYmICFvcHMtPnZpZGlvY19zX2V4dF9jdHJscykKIAkJCWJyZWFrOwogCiAJCWRiZ2FyZyhjbWQsICJpZD0weCV4LCB2YWx1ZT0lZFxuIiwgcC0+aWQsIHAtPnZhbHVlKTsKIAorCQlpZiAodmZoICYmIHZmaC0+Y3RybF9oYW5kbGVyKSB7CisJCQlyZXQgPSB2NGwyX3NfY3RybCh2ZmgsIHZmaC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJCWJyZWFrOworCQl9CiAJCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikgewotCQkJcmV0ID0gdjRsMl9zX2N0cmwodmZkLT5jdHJsX2hhbmRsZXIsIHApOworCQkJcmV0ID0gdjRsMl9zX2N0cmwoTlVMTCwgdmZkLT5jdHJsX2hhbmRsZXIsIHApOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKG9wcy0+dmlkaW9jX3NfY3RybCkgewpAQCAtMTUwMSw3ICsxNTExLDkgQEAKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpwID0gYXJnOwogCiAJCXAtPmVycm9yX2lkeCA9IHAtPmNvdW50OwotCQlpZiAodmZkLT5jdHJsX2hhbmRsZXIpCisJCWlmICh2ZmggJiYgdmZoLT5jdHJsX2hhbmRsZXIpCisJCQlyZXQgPSB2NGwyX2dfZXh0X2N0cmxzKHZmaC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAodmZkLT5jdHJsX2hhbmRsZXIpCiAJCQlyZXQgPSB2NGwyX2dfZXh0X2N0cmxzKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKIAkJZWxzZSBpZiAob3BzLT52aWRpb2NfZ19leHRfY3RybHMgJiYgY2hlY2tfZXh0X2N0cmxzKHAsIDApKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19leHRfY3RybHMoZmlsZSwgZmgsIHApOwpAQCAtMTUxNSwxMSArMTUyNywxNCBAQAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKnAgPSBhcmc7CiAKIAkJcC0+ZXJyb3JfaWR4ID0gcC0+Y291bnQ7Ci0JCWlmICghdmZkLT5jdHJsX2hhbmRsZXIgJiYgIW9wcy0+dmlkaW9jX3NfZXh0X2N0cmxzKQorCQlpZiAoISh2ZmggJiYgdmZoLT5jdHJsX2hhbmRsZXIpICYmICF2ZmQtPmN0cmxfaGFuZGxlciAmJgorCQkJCSFvcHMtPnZpZGlvY19zX2V4dF9jdHJscykKIAkJCWJyZWFrOwogCQl2NGxfcHJpbnRfZXh0X2N0cmxzKGNtZCwgdmZkLCBwLCAxKTsKLQkJaWYgKHZmZC0+Y3RybF9oYW5kbGVyKQotCQkJcmV0ID0gdjRsMl9zX2V4dF9jdHJscyh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CisJCWlmICh2ZmggJiYgdmZoLT5jdHJsX2hhbmRsZXIpCisJCQlyZXQgPSB2NGwyX3NfZXh0X2N0cmxzKHZmaCwgdmZoLT5jdHJsX2hhbmRsZXIsIHApOworCQllbHNlIGlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfc19leHRfY3RybHMoTlVMTCwgdmZkLT5jdHJsX2hhbmRsZXIsIHApOwogCQllbHNlIGlmIChjaGVja19leHRfY3RybHMocCwgMCkpCiAJCQlyZXQgPSBvcHMtPnZpZGlvY19zX2V4dF9jdHJscyhmaWxlLCBmaCwgcCk7CiAJCWJyZWFrOwpAQCAtMTUyOSwxMCArMTU0NCwxMyBAQAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKnAgPSBhcmc7CiAKIAkJcC0+ZXJyb3JfaWR4ID0gcC0+Y291bnQ7Ci0JCWlmICghdmZkLT5jdHJsX2hhbmRsZXIgJiYgIW9wcy0+dmlkaW9jX3RyeV9leHRfY3RybHMpCisJCWlmICghKHZmaCAmJiB2ZmgtPmN0cmxfaGFuZGxlcikgJiYgIXZmZC0+Y3RybF9oYW5kbGVyICYmCisJCQkJIW9wcy0+dmlkaW9jX3RyeV9leHRfY3RybHMpCiAJCQlicmVhazsKIAkJdjRsX3ByaW50X2V4dF9jdHJscyhjbWQsIHZmZCwgcCwgMSk7Ci0JCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJaWYgKHZmaCAmJiB2ZmgtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfdHJ5X2V4dF9jdHJscyh2ZmgtPmN0cmxfaGFuZGxlciwgcCk7CisJCWVsc2UgaWYgKHZmZC0+Y3RybF9oYW5kbGVyKQogCQkJcmV0ID0gdjRsMl90cnlfZXh0X2N0cmxzKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKIAkJZWxzZSBpZiAoY2hlY2tfZXh0X2N0cmxzKHAsIDApKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfdHJ5X2V4dF9jdHJscyhmaWxlLCBmaCwgcCk7CkBAIC0xNTQyLDcgKzE1NjAsOSBAQAogCXsKIAkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpwID0gYXJnOwogCi0JCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJaWYgKHZmaCAmJiB2ZmgtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfcXVlcnltZW51KHZmaC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAodmZkLT5jdHJsX2hhbmRsZXIpCiAJCQlyZXQgPSB2NGwyX3F1ZXJ5bWVudSh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CiAJCWVsc2UgaWYgKG9wcy0+dmlkaW9jX3F1ZXJ5bWVudSkKIAkJCXJldCA9IG9wcy0+dmlkaW9jX3F1ZXJ5bWVudShmaWxlLCBmaCwgcCk7CkBAIC0yMjc2LDcgKzIyOTYsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJKnVzZXJfcHRyID0gKHZvaWQgX191c2VyICopYnVmLT5tLnBsYW5lczsKLQkJCSprZXJuZWxfcHRyID0gKHZvaWQgKiopJmJ1Zi0+bS5wbGFuZXM7CisJCQkqa2VybmVsX3B0ciA9ICh2b2lkICopJmJ1Zi0+bS5wbGFuZXM7CiAJCQkqYXJyYXlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9wbGFuZSkgKiBidWYtPmxlbmd0aDsKIAkJCXJldCA9IDE7CiAJCX0KQEAgLTIyOTAsNyArMjMxMCw3IEBACiAKIAkJaWYgKGN0cmxzLT5jb3VudCAhPSAwKSB7CiAJCQkqdXNlcl9wdHIgPSAodm9pZCBfX3VzZXIgKiljdHJscy0+Y29udHJvbHM7Ci0JCQkqa2VybmVsX3B0ciA9ICh2b2lkICoqKSZjdHJscy0+Y29udHJvbHM7CisJCQkqa2VybmVsX3B0ciA9ICh2b2lkICopJmN0cmxzLT5jb250cm9sczsKIAkJCSphcnJheV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sKQogCQkJCSAgICAqIGN0cmxzLT5jb3VudDsKIAkJCXJldCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKaW5kZXggODEyNzI5ZS4uYjc5NjdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYwpAQCAtNzUsMjAgKzc1LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSB2NGwyX2ZoX2luaXQoJnN1YmRldl9maC0+dmZoLCB2ZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWlmIChzZC0+ZmxhZ3MgJiBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTKSB7Ci0JCXJldCA9IHY0bDJfZXZlbnRfaW5pdCgmc3ViZGV2X2ZoLT52ZmgpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0KLQkJcmV0ID0gdjRsMl9ldmVudF9hbGxvYygmc3ViZGV2X2ZoLT52ZmgsIHNkLT5uZXZlbnRzKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCX0KLQorCXY0bDJfZmhfaW5pdCgmc3ViZGV2X2ZoLT52ZmgsIHZkZXYpOwogCXY0bDJfZmhfYWRkKCZzdWJkZXZfZmgtPnZmaCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJnN1YmRldl9maC0+dmZoOwogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCkBAIC0xNTUsMjUgKzE0MiwyNSBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiB2NGwyX3F1ZXJ5Y3RybChzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9xdWVyeWN0cmwodmZoLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiB2NGwyX3F1ZXJ5bWVudShzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9xdWVyeW1lbnUodmZoLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiB2NGwyX2dfY3RybChzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2N0cmwodmZoLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiB2NGwyX3NfY3RybChzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9zX2N0cmwodmZoLCB2ZmgtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCQlyZXR1cm4gdjRsMl9nX2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2V4dF9jdHJscyh2ZmgtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgotCQlyZXR1cm4gdjRsMl9zX2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl9zX2V4dF9jdHJscyh2ZmgsIHZmaC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKLQkJcmV0dXJuIHY0bDJfdHJ5X2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOworCQlyZXR1cm4gdjRsMl90cnlfZXh0X2N0cmxzKHZmaC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfRFFFVkVOVDoKIAkJaWYgKCEoc2QtPmZsYWdzICYgVjRMMl9TVUJERVZfRkxfSEFTX0VWRU5UUykpCkBAIC0yOTcsNyArMjg0LDcgQEAKIAlpZiAoIShzZC0+ZmxhZ3MgJiBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTKSkKIAkJcmV0dXJuIFBPTExFUlI7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmZoLT5ldmVudHMtPndhaXQsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmZmgtPndhaXQsIHdhaXQpOwogCiAJaWYgKHY0bDJfZXZlbnRfcGVuZGluZyhmaCkpCiAJCXJldHVybiBQT0xMUFJJOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWEtY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpYS1jYW1lcmEuYwppbmRleCA4NWQzMDQ4Li5iYjdmMTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpYS1jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpYS1jYW1lcmEuYwpAQCAtMTMzMiw2ICsxMzMyLDggQEAKIAlzdHJ1Y3QgcGNpX2J1cyAqcGJ1cyA9IHBjaV9maW5kX2J1cygwLCAwKTsKIAl1OCBjYnl0ZTsKIAorCWlmICghcGJ1cykKKwkJcmV0dXJuIGZhbHNlOwogCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwYnVzLCBWSUFDQU1fU0VSSUFMX0RFVkZOLAogCQkJVklBQ0FNX1NFUklBTF9DUkVHLCAmY2J5dGUpOwogCWlmICgoY2J5dGUgJiBWSUFDQU1fU0VSSUFMX0JJVCkgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCmluZGV4IGRkYjhmNGIuLmYzMDBkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwpAQCAtMTA4LDggKzEwOCw5IEBACiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2VzWzBdKSkKIAkJLyogRE1BIHRvIGhpZ2htZW0gcGFnZXMgbWlnaHQgbm90IHdvcmsgKi8KIAkJZ290byBoaWdobWVtOwotCXNnX3NldF9wYWdlKCZzZ2xpc3RbMF0sIHBhZ2VzWzBdLCBQQUdFX1NJWkUgLSBvZmZzZXQsIG9mZnNldCk7Ci0Jc2l6ZSAtPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisJc2dfc2V0X3BhZ2UoJnNnbGlzdFswXSwgcGFnZXNbMF0sCisJCQltaW5fdChzaXplX3QsIFBBR0VfU0laRSAtIG9mZnNldCwgc2l6ZSksIG9mZnNldCk7CisJc2l6ZSAtPSBtaW5fdChzaXplX3QsIFBBR0VfU0laRSAtIG9mZnNldCwgc2l6ZSk7CiAJZm9yIChpID0gMTsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJaWYgKE5VTEwgPT0gcGFnZXNbaV0pCiAJCQlnb3RvIG5vcGFnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLXNnLmMKaW5kZXggMTBhMjBkOS4uMDY1ZjQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLXNnLmMKQEAgLTQ4LDEyICs0OCwxMCBAQAogCWJ1Zi0+c2dfZGVzYy5zaXplID0gc2l6ZTsKIAlidWYtPnNnX2Rlc2MubnVtX3BhZ2VzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCi0JYnVmLT5zZ19kZXNjLnNnbGlzdCA9IHZtYWxsb2MoYnVmLT5zZ19kZXNjLm51bV9wYWdlcyAqCisJYnVmLT5zZ19kZXNjLnNnbGlzdCA9IHZ6YWxsb2MoYnVmLT5zZ19kZXNjLm51bV9wYWdlcyAqCiAJCQkJICAgICAgc2l6ZW9mKCpidWYtPnNnX2Rlc2Muc2dsaXN0KSk7CiAJaWYgKCFidWYtPnNnX2Rlc2Muc2dsaXN0KQogCQlnb3RvIGZhaWxfc2dsaXN0X2FsbG9jOwotCW1lbXNldChidWYtPnNnX2Rlc2Muc2dsaXN0LCAwLCBidWYtPnNnX2Rlc2MubnVtX3BhZ2VzICoKLQkgICAgICAgc2l6ZW9mKCpidWYtPnNnX2Rlc2Muc2dsaXN0KSk7CiAJc2dfaW5pdF90YWJsZShidWYtPnNnX2Rlc2Muc2dsaXN0LCBidWYtPnNnX2Rlc2MubnVtX3BhZ2VzKTsKIAogCWJ1Zi0+cGFnZXMgPSBremFsbG9jKGJ1Zi0+c2dfZGVzYy5udW1fcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCkBAIC0xMzYsMTMgKzEzNCwxMSBAQAogCWxhc3QgID0gKCh2YWRkciArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykgPj4gUEFHRV9TSElGVDsKIAlidWYtPnNnX2Rlc2MubnVtX3BhZ2VzID0gbGFzdCAtIGZpcnN0ICsgMTsKIAotCWJ1Zi0+c2dfZGVzYy5zZ2xpc3QgPSB2bWFsbG9jKAorCWJ1Zi0+c2dfZGVzYy5zZ2xpc3QgPSB2emFsbG9jKAogCQlidWYtPnNnX2Rlc2MubnVtX3BhZ2VzICogc2l6ZW9mKCpidWYtPnNnX2Rlc2Muc2dsaXN0KSk7CiAJaWYgKCFidWYtPnNnX2Rlc2Muc2dsaXN0KQogCQlnb3RvIHVzZXJwdHJfZmFpbF9zZ2xpc3RfYWxsb2M7CiAKLQltZW1zZXQoYnVmLT5zZ19kZXNjLnNnbGlzdCwgMCwKLQkJYnVmLT5zZ19kZXNjLm51bV9wYWdlcyAqIHNpemVvZigqYnVmLT5zZ19kZXNjLnNnbGlzdCkpOwogCXNnX2luaXRfdGFibGUoYnVmLT5zZ19kZXNjLnNnbGlzdCwgYnVmLT5zZ19kZXNjLm51bV9wYWdlcyk7CiAKIAlidWYtPnBhZ2VzID0ga3phbGxvYyhidWYtPnNnX2Rlc2MubnVtX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItbWVtb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1tZW1vcHMuYwppbmRleCBiMDNjM2FlLi41NjllZWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1tZW1vcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1tZW1vcHMuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKIAl2bWEtPnZtX29wcy0+b3Blbih2bWEpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtYXBwZWQgcGFkZHIgMHglMDhseCBhdCAweCUwOGx4LCBzaXplICVsZFxuIiwKKwlwcl9kZWJ1ZygiJXM6IG1hcHBlZCBwYWRkciAweCUwOGx4IGF0IDB4JTA4bHgsIHNpemUgJWxkXG4iLAogCQkJX19mdW5jX18sIHBhZGRyLCB2bWEtPnZtX3N0YXJ0LCBzaXplKTsKIAogCXJldHVybiAwOwpAQCAtMTk0LDcgKzE5NCw3IEBACiB7CiAJc3RydWN0IHZiMl92bWFyZWFfaGFuZGxlciAqaCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcCwgcmVmY291bnQ6ICVkLCB2bWE6ICUwOGx4LSUwOGx4XG4iLAorCXByX2RlYnVnKCIlczogJXAsIHJlZmNvdW50OiAlZCwgdm1hOiAlMDhseC0lMDhseFxuIiwKIAkgICAgICAgX19mdW5jX18sIGgsIGF0b21pY19yZWFkKGgtPnJlZmNvdW50KSwgdm1hLT52bV9zdGFydCwKIAkgICAgICAgdm1hLT52bV9lbmQpOwogCkBAIC0yMTIsNyArMjEyLDcgQEAKIHsKIAlzdHJ1Y3QgdmIyX3ZtYXJlYV9oYW5kbGVyICpoID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwLCByZWZjb3VudDogJWQsIHZtYTogJTA4bHgtJTA4bHhcbiIsCisJcHJfZGVidWcoIiVzOiAlcCwgcmVmY291bnQ6ICVkLCB2bWE6ICUwOGx4LSUwOGx4XG4iLAogCSAgICAgICBfX2Z1bmNfXywgaCwgYXRvbWljX3JlYWQoaC0+cmVmY291bnQpLCB2bWEtPnZtX3N0YXJ0LAogCSAgICAgICB2bWEtPnZtX2VuZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggZDYzZTlkOS4uNTJhMGEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpAQCAtNjEsOCArNjAsNyBAQAogLy8gI2RlZmluZSBWSU5PX0RFQlVHCiAvLyAjZGVmaW5lIFZJTk9fREVCVUdfSU5UCiAKLSNkZWZpbmUgVklOT19NT0RVTEVfVkVSU0lPTiAiMC4wLjYiCi0jZGVmaW5lIFZJTk9fVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDYpCisjZGVmaW5lIFZJTk9fTU9EVUxFX1ZFUlNJT04gIjAuMC43IgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNHSSBWSU5PIFZpZGVvNExpbnV4MiBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKFZJTk9fTU9EVUxFX1ZFUlNJT04pOwpAQCAtMjkzNCw3ICsyOTMyLDYgQEAKIAlzdHJjcHkoY2FwLT5kcml2ZXIsIHZpbm9fZHJpdmVyX25hbWUpOwogCXN0cmNweShjYXAtPmNhcmQsIHZpbm9fZHJpdmVyX2Rlc2NyaXB0aW9uKTsKIAlzdHJjcHkoY2FwLT5idXNfaW5mbywgdmlub19idXNfbmFtZSk7Ci0JY2FwLT52ZXJzaW9uID0gVklOT19WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPQogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfU1RSRUFNSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCAyMjM4YTYxLi5hODQ4YmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZvbnQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CkBAIC0zMiw2ICszMSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWZoLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKICNkZWZpbmUgVklWSV9NT0RVTEVfTkFNRSAidml2aSIKQEAgLTQ0LDE1ICs0NCwxMiBAQAogI2RlZmluZSBNQVhfV0lEVEggMTkyMAogI2RlZmluZSBNQVhfSEVJR0hUIDEyMDAKIAotI2RlZmluZSBWSVZJX01BSk9SX1ZFUlNJT04gMAotI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gOAotI2RlZmluZSBWSVZJX1JFTEVBU0UgMAotI2RlZmluZSBWSVZJX1ZFUlNJT04gXAotCUtFUk5FTF9WRVJTSU9OKFZJVklfTUFKT1JfVkVSU0lPTiwgVklWSV9NSU5PUl9WRVJTSU9OLCBWSVZJX1JFTEVBU0UpCisjZGVmaW5lIFZJVklfVkVSU0lPTiAiMC44LjEiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvIENhcHR1cmUgQm9hcmQiKTsKIE1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiwgVGVkIFdhbHRoZXIgYW5kIEpvaG4gU29rb2wiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZJVklfVkVSU0lPTik7CiAKIHN0YXRpYyB1bnNpZ25lZCB2aWRlb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHZpZGVvX25yLCB1aW50LCAwNjQ0KTsKQEAgLTE2Nyw2ICsxNjQsMTEgQEAKIAlzdHJ1Y3QgdjRsMl9jdHJsCSAgICpjb250cmFzdDsKIAlzdHJ1Y3QgdjRsMl9jdHJsCSAgICpzYXR1cmF0aW9uOwogCXN0cnVjdCB2NGwyX2N0cmwJICAgKmh1ZTsKKwlzdHJ1Y3QgeworCQkvKiBhdXRvZ2Fpbi9nYWluIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybAkgICAqYXV0b2dhaW47CisJCXN0cnVjdCB2NGwyX2N0cmwJICAgKmdhaW47CisJfTsKIAlzdHJ1Y3QgdjRsMl9jdHJsCSAgICp2b2x1bWU7CiAJc3RydWN0IHY0bDJfY3RybAkgICAqYnV0dG9uOwogCXN0cnVjdCB2NGwyX2N0cmwJICAgKmJvb2xlYW47CkBAIC0xNzQsNiArMTc2LDcgQEAKIAlzdHJ1Y3QgdjRsMl9jdHJsCSAgICppbnQ2NDsKIAlzdHJ1Y3QgdjRsMl9jdHJsCSAgICptZW51OwogCXN0cnVjdCB2NGwyX2N0cmwJICAgKnN0cmluZzsKKwlzdHJ1Y3QgdjRsMl9jdHJsCSAgICpiaXRtYXNrOwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CiAJc3RydWN0IG11dGV4CQkgICBtdXRleDsKQEAgLTQ1Nyw2ICs0NjAsNyBAQAogCXVuc2lnbmVkIG1zOwogCWNoYXIgc3RyWzEwMF07CiAJaW50IGgsIGxpbmUgPSAxOworCXMzMiBnYWluOwogCiAJaWYgKCF2YnVmKQogCQlyZXR1cm47CkBAIC00NzksNiArNDgzLDcgQEAKIAkJCWRldi0+d2lkdGgsIGRldi0+aGVpZ2h0LCBkZXYtPmlucHV0KTsKIAlnZW5fdGV4dChkZXYsIHZidWYsIGxpbmUrKyAqIDE2LCAxNiwgc3RyKTsKIAorCWdhaW4gPSB2NGwyX2N0cmxfZ19jdHJsKGRldi0+Z2Fpbik7CiAJbXV0ZXhfbG9jaygmZGV2LT5jdHJsX2hhbmRsZXIubG9jayk7CiAJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiBicmlnaHRuZXNzICUzZCwgY29udHJhc3QgJTNkLCBzYXR1cmF0aW9uICUzZCwgaHVlICVkICIsCiAJCQlkZXYtPmJyaWdodG5lc3MtPmN1ci52YWwsCkBAIC00ODYsMTEgKzQ5MSwxMyBAQAogCQkJZGV2LT5zYXR1cmF0aW9uLT5jdXIudmFsLAogCQkJZGV2LT5odWUtPmN1ci52YWwpOwogCWdlbl90ZXh0KGRldiwgdmJ1ZiwgbGluZSsrICogMTYsIDE2LCBzdHIpOwotCXNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgdm9sdW1lICUzZCAiLCBkZXYtPnZvbHVtZS0+Y3VyLnZhbCk7CisJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiBhdXRvZ2FpbiAlZCwgZ2FpbiAlM2QsIHZvbHVtZSAlM2QgIiwKKwkJCWRldi0+YXV0b2dhaW4tPmN1ci52YWwsIGdhaW4sIGRldi0+dm9sdW1lLT5jdXIudmFsKTsKIAlnZW5fdGV4dChkZXYsIHZidWYsIGxpbmUrKyAqIDE2LCAxNiwgc3RyKTsKLQlzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiIGludDMyICVkLCBpbnQ2NCAlbGxkICIsCisJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiBpbnQzMiAlZCwgaW50NjQgJWxsZCwgYml0bWFzayAlMDh4ICIsCiAJCQlkZXYtPmludDMyLT5jdXIudmFsLAotCQkJZGV2LT5pbnQ2NC0+Y3VyLnZhbDY0KTsKKwkJCWRldi0+aW50NjQtPmN1ci52YWw2NCwKKwkJCWRldi0+Yml0bWFzay0+Y3VyLnZhbCk7CiAJZ2VuX3RleHQoZGV2LCB2YnVmLCBsaW5lKysgKiAxNiwgMTYsIHN0cik7CiAJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiBib29sZWFuICVkLCBtZW51ICVzLCBzdHJpbmcgXCIlc1wiICIsCiAJCQlkZXYtPmJvb2xlYW4tPmN1ci52YWwsCkBAIC01MjQsMTEgKzUzMSwxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CiAJCWRwcmludGsoZGV2LCAxLCAiTm8gYWN0aXZlIHF1ZXVlIHRvIHNlcnZlXG4iKTsKLQkJZ290byB1bmxvY2s7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOwogCX0KIAogCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3Qgdml2aV9idWZmZXIsIGxpc3QpOwogCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIAogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi52NGwyX2J1Zi50aW1lc3RhbXApOwogCkBAIC01MzgsOCArNTQ3LDYgQEAKIAogCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKIAlkcHJpbnRrKGRldiwgMiwgIlslcC8lZF0gZG9uZVxuIiwgYnVmLCBidWYtPnZiLnY0bDJfYnVmLmluZGV4KTsKLXVubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiB9CiAKICNkZWZpbmUgZnJhbWVzX3RvX21zKGZyYW1lcykJCQkJCVwKQEAgLTgxMiw3ICs4MTksNiBAQAogCXN0cmNweShjYXAtPmRyaXZlciwgInZpdmkiKTsKIAlzdHJjcHkoY2FwLT5jYXJkLCAidml2aSIpOwogCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwotCWNhcC0+dmVyc2lvbiA9IFZJVklfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkcgfCBcCiAJCQkgICAgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwpAQCAtOTc1LDE0ICs5ODEsMzcgQEAKIAlpZiAoaSA+PSBOVU1fSU5QVVRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChpID09IGRldi0+aW5wdXQpCisJCXJldHVybiAwOworCiAJZGV2LT5pbnB1dCA9IGk7CiAJcHJlY2FsY3VsYXRlX2JhcnMoZGV2KTsKIAlwcmVjYWxjdWxhdGVfbGluZShkZXYpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJfZmggKmZoLAorCQkJCXN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKQoreworCXN3aXRjaCAoc3ViLT50eXBlKSB7CisJY2FzZSBWNEwyX0VWRU5UX0NUUkw6CisJCXJldHVybiB2NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCAwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIC8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQgdml2aV9nX3ZvbGF0aWxlX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3Qgdml2aV9kZXYsIGN0cmxfaGFuZGxlcik7CisKKwlpZiAoY3RybCA9PSBkZXYtPmF1dG9nYWluKQorCQlkZXYtPmdhaW4tPnZhbCA9IGppZmZpZXMgJiAweGZmOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZpdmlfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCiB7CiAJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHZpdmlfZGV2LCBjdHJsX2hhbmRsZXIpOwpAQCAtMTAxMCwxMCArMTAzOSwxNyBAQAogdml2aV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCiB7CiAJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2NGwyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmRldi0+dmJfdmlkcTsKKwl1bnNpZ25lZCBpbnQgcmVzOwogCiAJZHByaW50ayhkZXYsIDEsICIlc1xuIiwgX19mdW5jX18pOwotCXJldHVybiB2YjJfcG9sbChxLCBmaWxlLCB3YWl0KTsKKwlyZXMgPSB2YjJfcG9sbChxLCBmaWxlLCB3YWl0KTsKKwlpZiAodjRsMl9ldmVudF9wZW5kaW5nKGZoKSkKKwkJcmVzIHw9IFBPTExQUkk7CisJZWxzZQorCQlwb2xsX3dhaXQoZmlsZSwgJmZoLT53YWl0LCB3YWl0KTsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50IHZpdmlfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMDQ1LDYgKzEwODEsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgdml2aV9jdHJsX29wcyA9IHsKKwkuZ192b2xhdGlsZV9jdHJsID0gdml2aV9nX3ZvbGF0aWxlX2N0cmwsCiAJLnNfY3RybCA9IHZpdmlfc19jdHJsLAogfTsKIApAQCAtMTExNyw5ICsxMTU0LDIwIEBACiAJLnN0ZXAgPSAxLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIHZpdmlfY3RybF9iaXRtYXNrID0geworCS5vcHMgPSAmdml2aV9jdHJsX29wcywKKwkuaWQgPSBWSVZJX0NJRF9DVVNUT01fQkFTRSArIDYsCisJLm5hbWUgPSAiQml0bWFzayIsCisJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLLAorCS5kZWYgPSAweDgwMDAyMDAwLAorCS5taW4gPSAwLAorCS5tYXggPSAweDgwNDAyMDEwLAorCS5zdGVwID0gMCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdml2aV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB2NGwyX2ZoX29wZW4sCisJLm9wZW4gICAgICAgICAgID0gdjRsMl9maF9vcGVuLAogCS5yZWxlYXNlICAgICAgICA9IHZpdmlfY2xvc2UsCiAJLnJlYWQgICAgICAgICAgID0gdml2aV9yZWFkLAogCS5wb2xsCQk9IHZpdmlfcG9sbCwKQEAgLTExNDMsNiArMTE5MSw4IEBACiAJLnZpZGlvY19zX2lucHV0ICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCiAJLnZpZGlvY19zdHJlYW1vbiAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQgPSB2aWRpb2Nfc3Vic2NyaWJlX2V2ZW50LAorCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLAogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugdml2aV90ZW1wbGF0ZSA9IHsKQEAgLTEyMTMsMTYgKzEyNjMsMjIgQEAKIAkJCVY0TDJfQ0lEX1NBVFVSQVRJT04sIDAsIDI1NSwgMSwgMTI3KTsKIAlkZXYtPmh1ZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnZpdmlfY3RybF9vcHMsCiAJCQlWNEwyX0NJRF9IVUUsIC0xMjgsIDEyNywgMSwgMCk7CisJZGV2LT5hdXRvZ2FpbiA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnZpdmlfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9BVVRPR0FJTiwgMCwgMSwgMSwgMSk7CisJZGV2LT5nYWluID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmdml2aV9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0dBSU4sIDAsIDI1NSwgMSwgMTAwKTsKIAlkZXYtPmJ1dHRvbiA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKGhkbCwgJnZpdmlfY3RybF9idXR0b24sIE5VTEwpOwogCWRldi0+aW50MzIgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZ2aXZpX2N0cmxfaW50MzIsIE5VTEwpOwogCWRldi0+aW50NjQgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZ2aXZpX2N0cmxfaW50NjQsIE5VTEwpOwogCWRldi0+Ym9vbGVhbiA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKGhkbCwgJnZpdmlfY3RybF9ib29sZWFuLCBOVUxMKTsKIAlkZXYtPm1lbnUgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZ2aXZpX2N0cmxfbWVudSwgTlVMTCk7CiAJZGV2LT5zdHJpbmcgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZ2aXZpX2N0cmxfc3RyaW5nLCBOVUxMKTsKKwlkZXYtPmJpdG1hc2sgPSB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZ2aXZpX2N0cmxfYml0bWFzaywgTlVMTCk7CiAJaWYgKGhkbC0+ZXJyb3IpIHsKIAkJcmV0ID0gaGRsLT5lcnJvcjsKIAkJZ290byB1bnJlZ19kZXY7CiAJfQorCXY0bDJfY3RybF9hdXRvX2NsdXN0ZXIoMiwgJmRldi0+YXV0b2dhaW4sIDAsIHRydWUpOwogCWRldi0+djRsMl9kZXYuY3RybF9oYW5kbGVyID0gaGRsOwogCiAJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLwpAQCAtMTMyNSw5ICsxMzgxLDggQEAKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gIgotCQkJIkNhcHR1cmUgQm9hcmQgdmVyICV1LiV1LiV1IHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iLAotCQkJKFZJVklfVkVSU0lPTiA+PiAxNikgJiAweEZGLCAoVklWSV9WRVJTSU9OID4+IDgpICYgMHhGRiwKLQkJCVZJVklfVkVSU0lPTiAmIDB4RkYpOworCQkJIkNhcHR1cmUgQm9hcmQgdmVyICVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iLAorCQkJVklWSV9WRVJTSU9OKTsKIAogCS8qIG5fZGV2cyB3aWxsIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRldmljZXMgKi8KIAluX2RldnMgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCmluZGV4IGZhMzU2MzkuLjQ1M2RiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC0xMjcsNyArMTI2LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkpha29iIEtlbWkgPGpha29iLmtlbWlAcG9zdC51dGZvcnMuc2U+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgdzk5NjZjZiBXZWJDYW0gZHJpdmVyICgwLjMyKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfVkVSU0lPTigiMC4zMy4xIik7CiAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBjb25zdCBjaGFyICpwYXJkZXZbXSA9IHtbMCAuLi4gVzk5NjZfTUFYQ0FNU10gPSAiIn07CkBAIC01NjgsNyArNTY3LDYgQEAKIAlzdHJsY3B5KHZjYXAtPmRyaXZlciwgY2FtLT52NGwyX2Rldi5uYW1lLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBXOTk2Nl9EUklWRVJOQU1FLCBzaXplb2YodmNhcC0+Y2FyZCkpOwogCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sICJwYXJwb3J0Iiwgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSk7Ci0JdmNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDMzLCAwKTsKIAl2Y2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCmluZGV4IGYzZjY0MDAuLmQ3MTY2YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKQEAgLTQxLDEwICs0MSw2IEBACiB9OwogCiAKLSNkZWZpbmUgTUFKT1JfVkVSU0lPTiAwCQkvKiBkcml2ZXIgbWFqb3IgdmVyc2lvbiAqLwotI2RlZmluZSBNSU5PUl9WRVJTSU9OIDEwCS8qIGRyaXZlciBtaW5vciB2ZXJzaW9uICovCi0jZGVmaW5lIFJFTEVBU0VfVkVSU0lPTiAwCS8qIHJlbGVhc2UgdmVyc2lvbiAqLwotCiAjZGVmaW5lIFpPUkFOX05BTUUgICAgIlpPUkFOIgkvKiBuYW1lIG9mIHRoZSBkZXZpY2UgKi8KIAogI2RlZmluZSBaUl9ERVZOQU1FKHpyKSAoKHpyKS0+bmFtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKaW5kZXggNzliMDRhYy4uYzM2MDJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTEyMyw5ICsxMjMsMTIgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgenIzNjA2N19kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC01KSIpOwogCisjZGVmaW5lIFpPUkFOX1ZFUlNJT04gIjAuMTAuMSIKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJab3Jhbi0zNjA1Ny8zNjA2NyBKUEVHIGNvZGVjIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU2VyZ3VlaSBNaXJpZG9ub3YiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFpPUkFOX1ZFUlNJT04pOwogCiAjZGVmaW5lIFpSX0RFVklDRShzdWJ2ZW4sIHN1YmRldiwgZGF0YSkJeyBcCiAJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWk9SQU4sIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MDU3LCBcCkBAIC0xNDU5LDggKzE0NjIsOCBAQAogewogCWludCByZXM7CiAKLQlwcmludGsoS0VSTl9JTkZPICJab3JhbiBNSlBFRyBib2FyZCBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkgICAgICAgTUFKT1JfVkVSU0lPTiwgTUlOT1JfVkVSU0lPTiwgUkVMRUFTRV9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPICJab3JhbiBNSlBFRyBib2FyZCBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKKwkgICAgICAgWk9SQU5fVkVSU0lPTik7CiAKIAkvKiBjaGVjayB0aGUgcGFyYW1ldGVycyB3ZSBoYXZlIGJlZW4gZ2l2ZW4sIGFkanVzdCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAodjRsX25idWZzIDwgMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDI3NzFkODEuLmQ0ZDA1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtNDQsNyArNDQsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTE1MzgsOCArMTUzNyw2IEBACiAJc3RybmNweShjYXAtPmRyaXZlciwgInpvcmFuIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKS0xKTsKIAlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAogCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKLQljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAotCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJICAgIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCmluZGV4IDdkZmIwMWUuLmM0OTI4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCkBAIC0yOSw3ICsyOSw2IEBACiAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtNDIsOCArNDEsNyBAQAogCiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjczIgotI2RlZmluZSBaUjM2NFhYX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCA3LCAzKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC43LjQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFudG9pbmUgSmFjcXVldCwgaHR0cDovL3JveWFsZS56ZXJlem8uY29tLyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlpvcmFuIDM2NHh4IgogCkBAIC03NDQsNyArNzQyLDYgQEAKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgY2FtLT51ZGV2LT5wcm9kdWN0LCBzaXplb2YoY2FwLT5jYXJkKSk7CiAJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmY2FtLT51ZGV2LT5kZXYpLAogCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOwotCWNhcC0+dmVyc2lvbiA9IFpSMzY0WFhfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICAgVjRMMl9DQVBfUkVBRFdSSVRFIHwKIAkJCSAgICBWNEwyX0NBUF9TVFJFQU1JTkc7CkBAIC0xNzIxLDMgKzE3MTgsNCBAQAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggYTFkNGVlNi4uY2U2MWE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtODI3LDcgKzgyNyw3IEBACiAJCQkJICogRElEX1NPRlRfRVJST1IgaXMgc2V0LgogCQkJCSAqLwogCQkJCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkgewotCQkJCQlpZiAocFNjc2lSZXEtPkNEQlswXSA9PSBSRUFEXzYgIHx8CisJCQkJCWlmICgocFNjc2lSZXEtPkNEQlswXSA9PSBSRUFEXzYgICYmICgocFNjc2lSZXEtPkNEQlsxXSAmIDB4MDIpID09IDApKSB8fAogCQkJCQkgICAgcFNjc2lSZXEtPkNEQlswXSA9PSBSRUFEXzEwIHx8CiAJCQkJCSAgICBwU2NzaVJlcS0+Q0RCWzBdID09IFJFQURfMTIgfHwKIAkJCQkJICAgIHBTY3NpUmVxLT5DREJbMF0gPT0gUkVBRF8xNiB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggMzdiODNlYi4uMjE1NzRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC0xNzEsNiArMTcxLDM3IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCB0cHM2NTg2eC4KIAorY29uZmlnIE1GRF9UUFM2NTkxMAorCWJvb2wgIlRQUzY1OTEwIFBvd2VyIE1hbmFnZW1lbnQgY2hpcCIKKwlkZXBlbmRzIG9uIEkyQz15ICYmIEdQSU9MSUIKKwlzZWxlY3QgTUZEX0NPUkUKKwlzZWxlY3QgR1BJT19UUFM2NTkxMAorCWhlbHAKKwkgIGlmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVFBTNjU5MTAgc2VyaWVzIG9mCisJICBQb3dlciBNYW5hZ2VtZW50IGNoaXBzLgorCitjb25maWcgTUZEX1RQUzY1OTEyCisJYm9vbAorCWRlcGVuZHMgb24gR1BJT0xJQgorCitjb25maWcgTUZEX1RQUzY1OTEyX0kyQworCWJvb2wgIlRQUzk1NjEyIFBvd2VyIE1hbmFnZW1lbnQgY2hpcCB3aXRoIEkyQyIKKwlzZWxlY3QgTUZEX0NPUkUKKwlzZWxlY3QgTUZEX1RQUzY1OTEyCisJZGVwZW5kcyBvbiBJMkM9eSAmJiBHUElPTElCCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUUFM2NTkxMiBzZXJpZXMgb2YKKwkgIFBNIGNoaXBzIHdpdGggSTJDIGludGVyZmFjZS4KKworY29uZmlnIE1GRF9UUFM2NTkxMl9TUEkKKwlib29sICJUUFM2NTkxMiBQb3dlciBNYW5hZ2VtZW50IGNoaXAgd2l0aCBTUEkiCisJc2VsZWN0IE1GRF9DT1JFCisJc2VsZWN0IE1GRF9UUFM2NTkxMgorCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBHUElPTElCCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUUFM2NTkxMiBzZXJpZXMgb2YKKwkgIFBNIGNoaXBzIHdpdGggU1BJIGludGVyZmFjZS4KKwogY29uZmlnIE1FTkVMQVVTCiAJYm9vbCAiVGV4YXMgSW5zdHJ1bWVudHMgVFdMOTIzMzAvTWVuZWxhdXMgUE0gY2hpcCIKIAlkZXBlbmRzIG9uIEkyQz15ICYmIEFSQ0hfT01BUDIKQEAgLTY2Miw4ICs2OTMsOSBAQAogCSAgQ0FOIGFuZCBHUElPIGNvbnRyb2xsZXJzLgogCiBjb25maWcgTUZEX0paNDc0MF9BREMKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgdGhlIEpaNDc0MCBTb0MgQURDIGNvcmUiCisJYm9vbCAiU3VwcG9ydCBmb3IgdGhlIEpaNDc0MCBTb0MgQURDIGNvcmUiCiAJc2VsZWN0IE1GRF9DT1JFCisJc2VsZWN0IEdFTkVSSUNfSVJRX0NISVAKIAlkZXBlbmRzIG9uIE1BQ0hfSlo0NzQwCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBREMgdW5pdCBpbiB0aGUgSlo0NzQwIFNvQy4KQEAgLTcyNSwxOCArNzU3LDE5IEBACiAJICBUaGlzIGlzIHJlcXVpcmVkIHRvIHVzZSBjZXJ0YWluIG90aGVyIFBNIDh4eHggZmVhdHVyZXMsIHN1Y2ggYXMgR1BJTwogCSAgYW5kIE1QUC4KIAotY29uZmlnIE1GRF9UUFM2NTkxMAotCWJvb2wgIlRQUzY1OTEwIFBvd2VyIE1hbmFnZW1lbnQgY2hpcCIKLQlkZXBlbmRzIG9uIEkyQz15ICYmIEdQSU9MSUIKLQlzZWxlY3QgTUZEX0NPUkUKLQlzZWxlY3QgR1BJT19UUFM2NTkxMAotCWhlbHAKLQkgIGlmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVFBTNjU5MTAgc2VyaWVzIG9mCi0JICBQb3dlciBNYW5hZ2VtZW50IGNoaXBzLgotCiBjb25maWcgVFBTNjU5MTFfQ09NUEFSQVRPUgogCXRyaXN0YXRlCiAKK2NvbmZpZyBNRkRfQUFUMjg3MF9DT1JFCisJYm9vbCAiU3VwcG9ydCBmb3IgdGhlIEFuYWxvZ2ljVGVjaCBBQVQyODcwIgorCXNlbGVjdCBNRkRfQ09SRQorCWRlcGVuZHMgb24gSTJDPXkgJiYgR1BJT0xJQgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQUFUMjg3MC4KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSwKKwkgIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZQorCSAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGV2aWNlLgorCiBlbmRpZiAjIE1GRF9TVVBQT1JUCiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggMjJhMjgwZi4uYzU4MDIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAKIAogb2JqLSQoQ09ORklHX01GRF9XTTg0MDApCSs9IHdtODQwMC1jb3JlLm8KIHdtODMxeC1vYmpzCQkJOj0gd204MzF4LWNvcmUubyB3bTgzMXgtaXJxLm8gd204MzF4LW90cC5vCit3bTgzMXgtb2JqcwkJCSs9IHdtODMxeC1hdXhhZGMubwogb2JqLSQoQ09ORklHX01GRF9XTTgzMVgpCSs9IHdtODMxeC5vCiBvYmotJChDT05GSUdfTUZEX1dNODMxWF9JMkMpCSs9IHdtODMxeC1pMmMubwogb2JqLSQoQ09ORklHX01GRF9XTTgzMVhfU1BJKQkrPSB3bTgzMXgtc3BpLm8KQEAgLTM1LDYgKzM2LDExIEBACiBvYmotJChDT05GSUdfVFBTNjEwNVgpCQkrPSB0cHM2MTA1eC5vCiBvYmotJChDT05GSUdfVFBTNjUwMTApCQkrPSB0cHM2NTAxMC5vCiBvYmotJChDT05GSUdfVFBTNjUwN1gpCQkrPSB0cHM2NTA3eC5vCitvYmotJChDT05GSUdfTUZEX1RQUzY1OTEwKQkrPSB0cHM2NTkxMC5vIHRwczY1OTEwLWlycS5vCit0cHM2NTkxMi1vYmpzICAgICAgICAgICAgICAgICAgIDo9IHRwczY1OTEyLWNvcmUubyB0cHM2NTkxMi1pcnEubworb2JqLSQoQ09ORklHX01GRF9UUFM2NTkxMikJKz0gdHBzNjU5MTIubworb2JqLSQoQ09ORklHX01GRF9UUFM2NTkxMl9JMkMpCSs9IHRwczY1OTEyLWkyYy5vCitvYmotJChDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSkgICs9IHRwczY1OTEyLXNwaS5vCiBvYmotJChDT05GSUdfTUVORUxBVVMpCQkrPSBtZW5lbGF1cy5vCiAKIG9iai0kKENPTkZJR19UV0w0MDMwX0NPUkUpCSs9IHR3bC1jb3JlLm8gdHdsNDAzMC1pcnEubyB0d2w2MDMwLWlycS5vCkBAIC05NCw1ICsxMDAsNSBAQAogb2JqLSQoQ09ORklHX01GRF9PTUFQX1VTQl9IT1NUKQkrPSBvbWFwLXVzYi1ob3N0Lm8KIG9iai0kKENPTkZJR19NRkRfUE04OTIxX0NPUkUpIAkrPSBwbTg5MjEtY29yZS5vCiBvYmotJChDT05GSUdfTUZEX1BNOFhYWF9JUlEpIAkrPSBwbTh4eHgtaXJxLm8KLW9iai0kKENPTkZJR19NRkRfVFBTNjU5MTApCSs9IHRwczY1OTEwLm8gdHBzNjU5MTAtaXJxLm8KIG9iai0kKENPTkZJR19UUFM2NTkxMV9DT01QQVJBVE9SKQkrPSB0cHM2NTkxMS1jb21wYXJhdG9yLm8KK29iai0kKENPTkZJR19NRkRfQUFUMjg3MF9DT1JFKQkrPSBhYXQyODcwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWF0Mjg3MC1jb3JlLmMgYi9kcml2ZXJzL21mZC9hYXQyODcwLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVkYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvYWF0Mjg3MC1jb3JlLmMKQEAgLTAsMCArMSw1MzUgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL21mZC9hYXQyODcwLWNvcmUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBKaW4gUGFyayA8amlueW91bmdwQG52aWRpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWF0Mjg3MC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgYWF0Mjg3MF9yZWdpc3RlciBhYXQyODcwX3JlZ3NbQUFUMjg3MF9SRUdfTlVNXSA9IHsKKwkvKiByZWFkYWJsZSwgd3JpdGVhYmxlLCB2YWx1ZSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDAwIEFBVDI4NzBfQkxfQ0hfRU4gKi8KKwl7IDAsIDEsIDB4MTYgfSwJLyogMHgwMSBBQVQyODcwX0JMTSAqLworCXsgMCwgMSwgMHgxNiB9LAkvKiAweDAyIEFBVDI4NzBfQkxTICovCisJeyAwLCAxLCAweDU2IH0sCS8qIDB4MDMgQUFUMjg3MF9CTDEgKi8KKwl7IDAsIDEsIDB4NTYgfSwJLyogMHgwNCBBQVQyODcwX0JMMiAqLworCXsgMCwgMSwgMHg1NiB9LAkvKiAweDA1IEFBVDI4NzBfQkwzICovCisJeyAwLCAxLCAweDU2IH0sCS8qIDB4MDYgQUFUMjg3MF9CTDQgKi8KKwl7IDAsIDEsIDB4NTYgfSwJLyogMHgwNyBBQVQyODcwX0JMNSAqLworCXsgMCwgMSwgMHg1NiB9LAkvKiAweDA4IEFBVDI4NzBfQkw2ICovCisJeyAwLCAxLCAweDU2IH0sCS8qIDB4MDkgQUFUMjg3MF9CTDcgKi8KKwl7IDAsIDEsIDB4NTYgfSwJLyogMHgwQSBBQVQyODcwX0JMOCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDBCIEFBVDI4NzBfRkxSICovCisJeyAwLCAxLCAweDAzIH0sCS8qIDB4MEMgQUFUMjg3MF9GTSAqLworCXsgMCwgMSwgMHgwMyB9LAkvKiAweDBEIEFBVDI4NzBfRlMgKi8KKwl7IDAsIDEsIDB4MTAgfSwJLyogMHgwRSBBQVQyODcwX0FMU19DRkcwICovCisJeyAwLCAxLCAweDA2IH0sCS8qIDB4MEYgQUFUMjg3MF9BTFNfQ0ZHMSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDEwIEFBVDI4NzBfQUxTX0NGRzIgKi8KKwl7IDEsIDAsIDB4MDAgfSwJLyogMHgxMSBBQVQyODcwX0FNQiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDEyIEFBVDI4NzBfQUxTMCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDEzIEFBVDI4NzBfQUxTMSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE0IEFBVDI4NzBfQUxTMiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE1IEFBVDI4NzBfQUxTMyAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE2IEFBVDI4NzBfQUxTNCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE3IEFBVDI4NzBfQUxTNSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE4IEFBVDI4NzBfQUxTNiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDE5IEFBVDI4NzBfQUxTNyAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFBIEFBVDI4NzBfQUxTOCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFCIEFBVDI4NzBfQUxTOSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFDIEFBVDI4NzBfQUxTQSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFEIEFBVDI4NzBfQUxTQiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFFIEFBVDI4NzBfQUxTQyAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDFGIEFBVDI4NzBfQUxTRCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDIwIEFBVDI4NzBfQUxTRSAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDIxIEFBVDI4NzBfQUxTRiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDIyIEFBVDI4NzBfU1VCX1NFVCAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDIzIEFBVDI4NzBfU1VCX0NUUkwgKi8KKwl7IDAsIDEsIDB4MDAgfSwJLyogMHgyNCBBQVQyODcwX0xET19BQiAqLworCXsgMCwgMSwgMHgwMCB9LAkvKiAweDI1IEFBVDI4NzBfTERPX0NEICovCisJeyAwLCAxLCAweDAwIH0sCS8qIDB4MjYgQUFUMjg3MF9MRE9fRU4gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYWF0Mjg3MF9kZXZzW10gPSB7CisJeworCQkubmFtZSA9ICJhYXQyODcwLWJhY2tsaWdodCIsCisJCS5pZCA9IEFBVDI4NzBfSURfQkwsCisJCS5wZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhYXQyODcwX2JsX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJhYXQyODcwLXJlZ3VsYXRvciIsCisJCS5pZCA9IEFBVDI4NzBfSURfTERPQSwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJhYXQyODcwLXJlZ3VsYXRvciIsCisJCS5pZCA9IEFBVDI4NzBfSURfTERPQiwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJhYXQyODcwLXJlZ3VsYXRvciIsCisJCS5pZCA9IEFBVDI4NzBfSURfTERPQywKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJhYXQyODcwLXJlZ3VsYXRvciIsCisJCS5pZCA9IEFBVDI4NzBfSURfTERPRCwKKwkJLnBkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fYWF0Mjg3MF9yZWFkKHN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAsIHU4IGFkZHIsIHU4ICp2YWwpCit7CisJaW50IHJldDsKKworCWlmIChhZGRyID49IEFBVDI4NzBfUkVHX05VTSkgeworCQlkZXZfZXJyKGFhdDI4NzAtPmRldiwgIkludmFsaWQgYWRkcmVzcywgMHglMDJ4XG4iLCBhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFhYXQyODcwLT5yZWdfY2FjaGVbYWRkcl0ucmVhZGFibGUpIHsKKwkJKnZhbCA9IGFhdDI4NzAtPnJlZ19jYWNoZVthZGRyXS52YWx1ZTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGFhdDI4NzAtPmNsaWVudCwgJmFkZHIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoYWF0Mjg3MC0+Y2xpZW50LCB2YWwsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKK291dDoKKwlkZXZfZGJnKGFhdDI4NzAtPmRldiwgInJlYWQ6IGFkZHI9MHglMDJ4LCB2YWw9MHglMDJ4XG4iLCBhZGRyLCAqdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2FhdDI4NzBfd3JpdGUoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCwgdTggYWRkciwgdTggdmFsKQoreworCXU4IG1zZ1syXTsKKwlpbnQgcmV0OworCisJaWYgKGFkZHIgPj0gQUFUMjg3MF9SRUdfTlVNKSB7CisJCWRldl9lcnIoYWF0Mjg3MC0+ZGV2LCAiSW52YWxpZCBhZGRyZXNzLCAweCUwMnhcbiIsIGFkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWFhdDI4NzAtPnJlZ19jYWNoZVthZGRyXS53cml0ZWFibGUpIHsKKwkJZGV2X2VycihhYXQyODcwLT5kZXYsICJBZGRyZXNzIDB4JTAyeCBpcyBub3Qgd3JpdGVhYmxlXG4iLAorCQkJYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1zZ1swXSA9IGFkZHI7CisJbXNnWzFdID0gdmFsOworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChhYXQyODcwLT5jbGllbnQsIG1zZywgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTzsKKworCWFhdDI4NzAtPnJlZ19jYWNoZVthZGRyXS52YWx1ZSA9IHZhbDsKKworCWRldl9kYmcoYWF0Mjg3MC0+ZGV2LCAid3JpdGU6IGFkZHI9MHglMDJ4LCB2YWw9MHglMDJ4XG4iLCBhZGRyLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfcmVhZChzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwLCB1OCBhZGRyLCB1OCAqdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhYXQyODcwLT5pb19sb2NrKTsKKwlyZXQgPSBfX2FhdDI4NzBfcmVhZChhYXQyODcwLCBhZGRyLCB2YWwpOworCW11dGV4X3VubG9jaygmYWF0Mjg3MC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfd3JpdGUoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCwgdTggYWRkciwgdTggdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhYXQyODcwLT5pb19sb2NrKTsKKwlyZXQgPSBfX2FhdDI4NzBfd3JpdGUoYWF0Mjg3MCwgYWRkciwgdmFsKTsKKwltdXRleF91bmxvY2soJmFhdDI4NzAtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhYXQyODcwX3VwZGF0ZShzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwLCB1OCBhZGRyLCB1OCBtYXNrLAorCQkJICB1OCB2YWwpCit7CisJaW50IGNoYW5nZTsKKwl1OCBvbGRfdmFsLCBuZXdfdmFsOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhYXQyODcwLT5pb19sb2NrKTsKKworCXJldCA9IF9fYWF0Mjg3MF9yZWFkKGFhdDI4NzAsIGFkZHIsICZvbGRfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CisKKwluZXdfdmFsID0gKG9sZF92YWwgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJY2hhbmdlID0gb2xkX3ZhbCAhPSBuZXdfdmFsOworCWlmIChjaGFuZ2UpCisJCXJldCA9IF9fYWF0Mjg3MF93cml0ZShhYXQyODcwLCBhZGRyLCBuZXdfdmFsKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmFhdDI4NzAtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFhdDI4NzBfZW5hYmxlKHN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzApCit7CisJaWYgKGFhdDI4NzAtPmVuX3BpbiA+PSAwKQorCQlncGlvX3NldF92YWx1ZShhYXQyODcwLT5lbl9waW4sIDEpOworCisJYWF0Mjg3MC0+aXNfZW5hYmxlID0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFhdDI4NzBfZGlzYWJsZShzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwKQoreworCWlmIChhYXQyODcwLT5lbl9waW4gPj0gMCkKKwkJZ3Bpb19zZXRfdmFsdWUoYWF0Mjg3MC0+ZW5fcGluLCAwKTsKKworCWFhdDI4NzAtPmlzX2VuYWJsZSA9IDA7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBzc2l6ZV90IGFhdDI4NzBfZHVtcF9yZWcoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCwgY2hhciAqYnVmKQoreworCXU4IGFkZHIsIHZhbDsKKwlzc2l6ZV90IGNvdW50ID0gMDsKKwlpbnQgcmV0OworCisJY291bnQgKz0gc3ByaW50ZihidWYsICJhYXQyODcwIHJlZ2lzdGVyc1xuIik7CisJZm9yIChhZGRyID0gMDsgYWRkciA8IEFBVDI4NzBfUkVHX05VTTsgYWRkcisrKSB7CisJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIweCUwMng6ICIsIGFkZHIpOworCQlpZiAoY291bnQgPj0gUEFHRV9TSVpFIC0gMSkKKwkJCWJyZWFrOworCisJCXJldCA9IGFhdDI4NzAtPnJlYWQoYWF0Mjg3MCwgYWRkciwgJnZhbCk7CisJCWlmIChyZXQgPT0gMCkKKwkJCWNvdW50ICs9IHNucHJpbnRmKGJ1ZiArIGNvdW50LCBQQUdFX1NJWkUgLSBjb3VudCwKKwkJCQkJICAiMHglMDJ4IiwgdmFsKTsKKwkJZWxzZQorCQkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAtIGNvdW50LAorCQkJCQkgICI8cmVhZCBmYWlsOiAlZD4iLCByZXQpOworCisJCWlmIChjb3VudCA+PSBQQUdFX1NJWkUgLSAxKQorCQkJYnJlYWs7CisKKwkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAtIGNvdW50LCAiXG4iKTsKKwkJaWYgKGNvdW50ID49IFBBR0VfU0laRSAtIDEpCisJCQlicmVhazsKKwl9CisKKwkvKiBUcnVuY2F0ZSBjb3VudDsgbWluKCkgd291bGQgY2F1c2UgYSB3YXJuaW5nICovCisJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKKwkJY291bnQgPSBQQUdFX1NJWkUgLSAxOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfcmVnX29wZW5fZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFhdDI4NzBfcmVnX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisJc3NpemVfdCByZXQ7CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gYWF0Mjg3MF9kdW1wX3JlZyhhYXQyODcwLCBidWYpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYWF0Mjg3MF9yZWdfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszMl07CisJaW50IGJ1Zl9zaXplOworCWNoYXIgKnN0YXJ0ID0gYnVmOworCXVuc2lnbmVkIGxvbmcgYWRkciwgdmFsOworCWludCByZXQ7CisKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgKHNpemVvZihidWYpLTEpKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKSB7CisJCWRldl9lcnIoYWF0Mjg3MC0+ZGV2LCAiRmFpbGVkIHRvIGNvcHkgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJ1ZltidWZfc2l6ZV0gPSAwOworCisJd2hpbGUgKCpzdGFydCA9PSAnICcpCisJCXN0YXJ0Kys7CisKKwlhZGRyID0gc2ltcGxlX3N0cnRvdWwoc3RhcnQsICZzdGFydCwgMTYpOworCWlmIChhZGRyID49IEFBVDI4NzBfUkVHX05VTSkgeworCQlkZXZfZXJyKGFhdDI4NzAtPmRldiwgIkludmFsaWQgYWRkcmVzcywgMHglbHhcbiIsIGFkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoKnN0YXJ0ID09ICcgJykKKwkJc3RhcnQrKzsKKworCWlmIChzdHJpY3Rfc3RydG91bChzdGFydCwgMTYsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGFhdDI4NzAtPndyaXRlKGFhdDI4NzAsICh1OClhZGRyLCAodTgpdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGJ1Zl9zaXplOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhYXQyODcwX3JlZ19mb3BzID0geworCS5vcGVuID0gYWF0Mjg3MF9yZWdfb3Blbl9maWxlLAorCS5yZWFkID0gYWF0Mjg3MF9yZWdfcmVhZF9maWxlLAorCS53cml0ZSA9IGFhdDI4NzBfcmVnX3dyaXRlX2ZpbGUsCit9OworCitzdGF0aWMgdm9pZCBhYXQyODcwX2luaXRfZGVidWdmcyhzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwKQoreworCWFhdDI4NzAtPmRlbnRyeV9yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJhYXQyODcwIiwgTlVMTCk7CisJaWYgKCFhYXQyODcwLT5kZW50cnlfcm9vdCkgeworCQlkZXZfd2FybihhYXQyODcwLT5kZXYsCisJCQkgIkZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyByb290IGRpcmVjdG9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlhYXQyODcwLT5kZW50cnlfcmVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVncyIsIDA2NDQsCisJCQkJCQkgIGFhdDI4NzAtPmRlbnRyeV9yb290LAorCQkJCQkJICBhYXQyODcwLCAmYWF0Mjg3MF9yZWdfZm9wcyk7CisJaWYgKCFhYXQyODcwLT5kZW50cnlfcmVnKQorCQlkZXZfd2FybihhYXQyODcwLT5kZXYsCisJCQkgIkZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyByZWdpc3RlciBmaWxlXG4iKTsKK30KKworc3RhdGljIHZvaWQgYWF0Mjg3MF91bmluaXRfZGVidWdmcyhzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwKQoreworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhYXQyODcwLT5kZW50cnlfcm9vdCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGFhdDI4NzBfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhYXQyODcwX3VuaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzApCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhYXQyODcwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwOworCWludCBpLCBqOworCWludCByZXQgPSAwOworCisJYWF0Mjg3MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhYXQyODcwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFhdDI4NzApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWF0Mjg3MFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFhdDI4NzAtPmRldiA9ICZjbGllbnQtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoYWF0Mjg3MC0+ZGV2LCBhYXQyODcwKTsKKworCWFhdDI4NzAtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBhYXQyODcwKTsKKworCWFhdDI4NzAtPnJlZ19jYWNoZSA9IGFhdDI4NzBfcmVnczsKKworCWlmIChwZGF0YS0+ZW5fcGluIDwgMCkKKwkJYWF0Mjg3MC0+ZW5fcGluID0gLTE7CisJZWxzZQorCQlhYXQyODcwLT5lbl9waW4gPSBwZGF0YS0+ZW5fcGluOworCisJYWF0Mjg3MC0+aW5pdCA9IHBkYXRhLT5pbml0OworCWFhdDI4NzAtPnVuaW5pdCA9IHBkYXRhLT51bmluaXQ7CisJYWF0Mjg3MC0+cmVhZCA9IGFhdDI4NzBfcmVhZDsKKwlhYXQyODcwLT53cml0ZSA9IGFhdDI4NzBfd3JpdGU7CisJYWF0Mjg3MC0+dXBkYXRlID0gYWF0Mjg3MF91cGRhdGU7CisKKwltdXRleF9pbml0KCZhYXQyODcwLT5pb19sb2NrKTsKKworCWlmIChhYXQyODcwLT5pbml0KQorCQlhYXQyODcwLT5pbml0KGFhdDI4NzApOworCisJaWYgKGFhdDI4NzAtPmVuX3BpbiA+PSAwKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChhYXQyODcwLT5lbl9waW4sICJhYXQyODcwLWVuIik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyAlZFxuIiwgYWF0Mjg3MC0+ZW5fcGluKTsKKwkJCWdvdG8gb3V0X2tmcmVlOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChhYXQyODcwLT5lbl9waW4sIDEpOworCX0KKworCWFhdDI4NzBfZW5hYmxlKGFhdDI4NzApOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3ViZGV2czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFhdDI4NzBfZGV2cyk7IGorKykgeworCQkJaWYgKChwZGF0YS0+c3ViZGV2c1tpXS5pZCA9PSBhYXQyODcwX2RldnNbal0uaWQpICYmCisJCQkJCSFzdHJjbXAocGRhdGEtPnN1YmRldnNbaV0ubmFtZSwKKwkJCQkJCWFhdDI4NzBfZGV2c1tqXS5uYW1lKSkgeworCQkJCWFhdDI4NzBfZGV2c1tqXS5wbGF0Zm9ybV9kYXRhID0KKwkJCQkJcGRhdGEtPnN1YmRldnNbaV0ucGxhdGZvcm1fZGF0YTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhhYXQyODcwLT5kZXYsIDAsIGFhdDI4NzBfZGV2cywKKwkJCSAgICAgIEFSUkFZX1NJWkUoYWF0Mjg3MF9kZXZzKSwgTlVMTCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoYWF0Mjg3MC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBzdWJkZXY6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKworCWFhdDI4NzBfaW5pdF9kZWJ1Z2ZzKGFhdDI4NzApOworCisJcmV0dXJuIDA7CisKK291dF9kaXNhYmxlOgorCWFhdDI4NzBfZGlzYWJsZShhYXQyODcwKTsKKwlpZiAoYWF0Mjg3MC0+ZW5fcGluID49IDApCisJCWdwaW9fZnJlZShhYXQyODcwLT5lbl9waW4pOworb3V0X2tmcmVlOgorCWtmcmVlKGFhdDI4NzApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJYWF0Mjg3MF91bmluaXRfZGVidWdmcyhhYXQyODcwKTsKKworCW1mZF9yZW1vdmVfZGV2aWNlcyhhYXQyODcwLT5kZXYpOworCWFhdDI4NzBfZGlzYWJsZShhYXQyODcwKTsKKwlpZiAoYWF0Mjg3MC0+ZW5fcGluID49IDApCisJCWdwaW9fZnJlZShhYXQyODcwLT5lbl9waW4pOworCWlmIChhYXQyODcwLT51bmluaXQpCisJCWFhdDI4NzAtPnVuaW5pdChhYXQyODcwKTsKKwlrZnJlZShhYXQyODcwKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFhdDI4NzBfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFhdDI4NzBfZGlzYWJsZShhYXQyODcwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYWF0Mjg3MF9yZWdpc3RlciAqcmVnID0gTlVMTDsKKwlpbnQgaTsKKworCWFhdDI4NzBfZW5hYmxlKGFhdDI4NzApOworCisJLyogcmVzdG9yZSByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQUFUMjg3MF9SRUdfTlVNOyBpKyspIHsKKwkJcmVnID0gJmFhdDI4NzAtPnJlZ19jYWNoZVtpXTsKKwkJaWYgKHJlZy0+d3JpdGVhYmxlKQorCQkJYWF0Mjg3MC0+d3JpdGUoYWF0Mjg3MCwgaSwgcmVnLT52YWx1ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhYXQyODcwX2kyY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWF0Mjg3MF9pMmNfcmVzdW1lCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFhdDI4NzBfaTJjX2lkX3RhYmxlW10gPSB7CisJeyAiYWF0Mjg3MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWF0Mjg3MF9pMmNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWF0Mjg3MF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImFhdDI4NzAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhYXQyODcwX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGFhdDI4NzBfaTJjX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGFhdDI4NzBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhYXQyODcwX2kyY19yZXN1bWUsCisJLmlkX3RhYmxlCT0gYWF0Mjg3MF9pMmNfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhYXQyODcwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFhdDI4NzBfaTJjX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwoYWF0Mjg3MF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFhdDI4NzBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhYXQyODcwX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWF0Mjg3MF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3JlIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2dpY1RlY2ggQUFUMjg3MCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmluIFBhcmsgPGppbnlvdW5ncEBudmlkaWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYWIzNTUwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL2FiMzU1MC1jb3JlLmMKaW5kZXggM2Q3ZGNlNi4uNTZiYTE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzNTUwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9hYjM1NTAtY29yZS5jCkBAIC04NzksMjAgKzg3OSwxMyBAQAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBhYjM1NTAgKmFiID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKikoZmlsZS0+cHJpdmF0ZV9kYXRhKSktPnByaXZhdGU7Ci0JY2hhciBidWZbMzJdOwotCWludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYmFuazsKIAlpbnQgZXJyOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZikgLSAxKSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2J1Zl9zaXplXSA9IDA7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ1c2VyX2JhbmspOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX2JhbmspOwogCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKHVzZXJfYmFuayA+PSBBQjM1NTBfTlVNX0JBTktTKSB7CiAJCWRldl9lcnIoJmFiLT5pMmNfY2xpZW50WzBdLT5kZXYsCkBAIC05MDIsNyArODk1LDcgQEAKIAogCWFiLT5kZWJ1Z19iYW5rID0gdXNlcl9iYW5rOwogCi0JcmV0dXJuIGJ1Zl9zaXplOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGludCBhYjM1NTBfYWRkcmVzc19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCkBAIC05MjMsMjcgKzkxNiwyMSBAQAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBhYjM1NTAgKmFiID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKikoZmlsZS0+cHJpdmF0ZV9kYXRhKSktPnByaXZhdGU7Ci0JY2hhciBidWZbMzJdOwotCWludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYWRkcmVzczsKIAlpbnQgZXJyOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZikgLSAxKSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2J1Zl9zaXplXSA9IDA7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ1c2VyX2FkZHJlc3MpOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX2FkZHJlc3MpOwogCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOworCiAJaWYgKHVzZXJfYWRkcmVzcyA+IDB4ZmYpIHsKIAkJZGV2X2VycigmYWItPmkyY19jbGllbnRbMF0tPmRldiwKIAkJCSJkZWJ1Z2ZzIGVycm9yIGlucHV0ID4gMHhmZlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlhYi0+ZGVidWdfYWRkcmVzcyA9IHVzZXJfYWRkcmVzczsKLQlyZXR1cm4gYnVmX3NpemU7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGFiMzU1MF92YWxfcHJpbnQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQpAQCAtOTcxLDIxICs5NTgsMTUgQEAKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgYWIzNTUwICphYiA9ICgoc3RydWN0IHNlcV9maWxlICopKGZpbGUtPnByaXZhdGVfZGF0YSkpLT5wcml2YXRlOwotCWNoYXIgYnVmWzMyXTsKLQlpbnQgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyB1c2VyX3ZhbDsKIAlpbnQgZXJyOwogCXU4IHJlZ3ZhbHVlOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOwotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWJ1ZltidWZfc2l6ZV0gPSAwOwotCi0JZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdXNlcl92YWwpOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX3ZhbCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CisKIAlpZiAodXNlcl92YWwgPiAweGZmKSB7CiAJCWRldl9lcnIoJmFiLT5pMmNfY2xpZW50WzBdLT5kZXYsCiAJCQkiZGVidWdmcyBlcnJvciBpbnB1dCA+IDB4ZmZcbiIpOwpAQCAtMTAwMiw3ICs5ODMsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGJ1Zl9zaXplOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWIzNTUwX2JhbmtfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiODUwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC9hYjg1MDAtY29yZS5jCmluZGV4IGZjMGMxYWYuLjM4NzcwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FiODUwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvYWI4NTAwLWNvcmUuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFiODUwMF9ncGlvX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIGFiODUwMF9ncGlvX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUJPSAiR1BJT19JTlQ2IiwKIAkJLnN0YXJ0CT0gQUI4NTAwX0lOVF9HUElPNlIsCkBAIC0zNzIsNyArMzcyLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFiODUwMF9ncGFkY19yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSBhYjg1MDBfZ3BhZGNfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQk9ICJIV19DT05WX0VORCIsCiAJCS5zdGFydAk9IEFCODUwMF9JTlRfR1BfSFdfQURDX0NPTlZfRU5ELApAQCAtMzg3LDcgKzM4Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWI4NTAwX3J0Y19yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSBhYjg1MDBfcnRjX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUJPSAiNjBTIiwKIAkJLnN0YXJ0CT0gQUI4NTAwX0lOVF9SVENfNjBTLApAQCAtNDAyLDcgKzQwMiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWI4NTAwX3Bvd2Vyb25rZXlfZGJfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIF9fZGV2aW5pdGRhdGEgYWI4NTAwX3Bvd2Vyb25rZXlfZGJfcmVzb3VyY2VzW10gPSB7CiAJewogCQkubmFtZQk9ICJPTktFWV9EQkYiLAogCQkuc3RhcnQJPSBBQjg1MDBfSU5UX1BPTl9LRVkxREJfRiwKQEAgLTQxNywyMCArNDE3LDQ3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWI4NTAwX2JtX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIGFiODUwMF9hdl9hY2NfZGV0ZWN0X3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUgPSAiTUFJTl9FWFRfQ0hfTk9UX09LIiwKLQkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9NQUlOX0VYVF9DSF9OT1RfT0ssCi0JCS5lbmQgPSBBQjg1MDBfSU5UX01BSU5fRVhUX0NIX05PVF9PSywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJICAgICAgIC5uYW1lID0gIkFDQ19ERVRFQ1RfMURCX0YiLAorCSAgICAgICAuc3RhcnQgPSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMURCX0YsCisJICAgICAgIC5lbmQgPSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMURCX0YsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiAJewotCQkubmFtZSA9ICJCQVRUX09WViIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfQkFUVF9PVlYsCi0JCS5lbmQgPSBBQjg1MDBfSU5UX0JBVFRfT1ZWLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkgICAgICAgLm5hbWUgPSAiQUNDX0RFVEVDVF8xREJfUiIsCisJICAgICAgIC5zdGFydCA9IEFCODUwMF9JTlRfQUNDX0RFVEVDVF8xREJfUiwKKwkgICAgICAgLmVuZCA9IEFCODUwMF9JTlRfQUNDX0RFVEVDVF8xREJfUiwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAl7CisJICAgICAgIC5uYW1lID0gIkFDQ19ERVRFQ1RfMjFEQl9GIiwKKwkgICAgICAgLnN0YXJ0ID0gQUI4NTAwX0lOVF9BQ0NfREVURUNUXzIxREJfRiwKKwkgICAgICAgLmVuZCA9IEFCODUwMF9JTlRfQUNDX0RFVEVDVF8yMURCX0YsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCSAgICAgICAubmFtZSA9ICJBQ0NfREVURUNUXzIxREJfUiIsCisJICAgICAgIC5zdGFydCA9IEFCODUwMF9JTlRfQUNDX0RFVEVDVF8yMURCX1IsCisJICAgICAgIC5lbmQgPSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMjFEQl9SLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkgICAgICAgLm5hbWUgPSAiQUNDX0RFVEVDVF8yMkRCX0YiLAorCSAgICAgICAuc3RhcnQgPSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMjJEQl9GLAorCSAgICAgICAuZW5kID0gQUI4NTAwX0lOVF9BQ0NfREVURUNUXzIyREJfRiwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJICAgICAgIC5uYW1lID0gIkFDQ19ERVRFQ1RfMjJEQl9SIiwKKwkgICAgICAgLnN0YXJ0ID0gQUI4NTAwX0lOVF9BQ0NfREVURUNUXzIyREJfUiwKKwkgICAgICAgLmVuZCA9IEFCODUwMF9JTlRfQUNDX0RFVEVDVF8yMkRCX1IsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIF9fZGV2aW5pdGRhdGEgYWI4NTAwX2NoYXJnZXJfcmVzb3VyY2VzW10gPSB7CisJewogCQkubmFtZSA9ICJNQUlOX0NIX1VOUExVR19ERVQiLAogCQkuc3RhcnQgPSBBQjg1MDBfSU5UX01BSU5fQ0hfVU5QTFVHX0RFVCwKIAkJLmVuZCA9IEFCODUwMF9JTlRfTUFJTl9DSF9VTlBMVUdfREVULApAQCAtNDQzLDI3ICs0NzAsMjcgQEAKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIlZCVVNfREVUX0YiLAotCQkuc3RhcnQgPSBBQjg1MDBfSU5UX1ZCVVNfREVUX0YsCi0JCS5lbmQgPSBBQjg1MDBfSU5UX1ZCVVNfREVUX0YsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewogCQkubmFtZSA9ICJWQlVTX0RFVF9SIiwKIAkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9WQlVTX0RFVF9SLAogCQkuZW5kID0gQUI4NTAwX0lOVF9WQlVTX0RFVF9SLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogCXsKLQkJLm5hbWUgPSAiQkFUX0NUUkxfSU5EQiIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfQkFUX0NUUkxfSU5EQiwKLQkJLmVuZCA9IEFCODUwMF9JTlRfQkFUX0NUUkxfSU5EQiwKKwkJLm5hbWUgPSAiVkJVU19ERVRfRiIsCisJCS5zdGFydCA9IEFCODUwMF9JTlRfVkJVU19ERVRfRiwKKwkJLmVuZCA9IEFCODUwMF9JTlRfVkJVU19ERVRfRiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIkNIX1dEX0VYUCIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfQ0hfV0RfRVhQLAotCQkuZW5kID0gQUI4NTAwX0lOVF9DSF9XRF9FWFAsCisJCS5uYW1lID0gIlVTQl9MSU5LX1NUQVRVUyIsCisJCS5zdGFydCA9IEFCODUwMF9JTlRfVVNCX0xJTktfU1RBVFVTLAorCQkuZW5kID0gQUI4NTAwX0lOVF9VU0JfTElOS19TVEFUVVMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkubmFtZSA9ICJVU0JfQ0hBUkdFX0RFVF9ET05FIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9VU0JfQ0hHX0RFVF9ET05FLAorCQkuZW5kID0gQUI4NTAwX0lOVF9VU0JfQ0hHX0RFVF9ET05FLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogCXsKQEAgLTQ3MywyMSArNTAwLDYwIEBACiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiAJewotCQkubmFtZSA9ICJOQ09OVl9BQ0NVIiwKLQkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9DQ05fQ09OVl9BQ0MsCi0JCS5lbmQgPSBBQjg1MDBfSU5UX0NDTl9DT05WX0FDQywKKwkJLm5hbWUgPSAiVVNCX0NIX1RIX1BST1RfUiIsCisJCS5zdGFydCA9IEFCODUwMF9JTlRfVVNCX0NIX1RIX1BST1RfUiwKKwkJLmVuZCA9IEFCODUwMF9JTlRfVVNCX0NIX1RIX1BST1RfUiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIkxPV19CQVRfRiIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfTE9XX0JBVF9GLAotCQkuZW5kID0gQUI4NTAwX0lOVF9MT1dfQkFUX0YsCisJCS5uYW1lID0gIlVTQl9DSF9USF9QUk9UX0YiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX1VTQl9DSF9USF9QUk9UX0YsCisJCS5lbmQgPSBBQjg1MDBfSU5UX1VTQl9DSF9USF9QUk9UX0YsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiAJewotCQkubmFtZSA9ICJMT1dfQkFUX1IiLAotCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0xPV19CQVRfUiwKLQkJLmVuZCA9IEFCODUwMF9JTlRfTE9XX0JBVF9SLAorCQkubmFtZSA9ICJNQUlOX0VYVF9DSF9OT1RfT0siLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX01BSU5fRVhUX0NIX05PVF9PSywKKwkJLmVuZCA9IEFCODUwMF9JTlRfTUFJTl9FWFRfQ0hfTk9UX09LLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTUFJTl9DSF9USF9QUk9UX1IiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX01BSU5fQ0hfVEhfUFJPVF9SLAorCQkuZW5kID0gQUI4NTAwX0lOVF9NQUlOX0NIX1RIX1BST1RfUiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lID0gIk1BSU5fQ0hfVEhfUFJPVF9GIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9NQUlOX0NIX1RIX1BST1RfRiwKKwkJLmVuZCA9IEFCODUwMF9JTlRfTUFJTl9DSF9USF9QUk9UX0YsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkubmFtZSA9ICJVU0JfQ0hBUkdFUl9OT1RfT0tSIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9VU0JfQ0hBUkdFUl9OT1RfT0ssCisJCS5lbmQgPSBBQjg1MDBfSU5UX1VTQl9DSEFSR0VSX05PVF9PSywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lID0gIlVTQl9DSEFSR0VSX05PVF9PS0YiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX1VTQl9DSEFSR0VSX05PVF9PS0YsCisJCS5lbmQgPSBBQjg1MDBfSU5UX1VTQl9DSEFSR0VSX05PVF9PS0YsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkubmFtZSA9ICJDSF9XRF9FWFAiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0NIX1dEX0VYUCwKKwkJLmVuZCA9IEFCODUwMF9JTlRfQ0hfV0RfRVhQLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIGFiODUwMF9idGVtcF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIkJBVF9DVFJMX0lOREIiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0JBVF9DVFJMX0lOREIsCisJCS5lbmQgPSBBQjg1MDBfSU5UX0JBVF9DVFJMX0lOREIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiAJewpAQCAtNTAzLDM4ICs1NjksNTUgQEAKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIlVTQl9DSEFSR0VSX05PVF9PS1IiLAotCQkuc3RhcnQgPSBBQjg1MDBfSU5UX1VTQl9DSEFSR0VSX05PVF9PSywKLQkJLmVuZCA9IEFCODUwMF9JTlRfVVNCX0NIQVJHRVJfTk9UX09LLAorCQkubmFtZSA9ICJCVEVNUF9MT1dfTUVESVVNIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9CVEVNUF9MT1dfTUVESVVNLAorCQkuZW5kID0gQUI4NTAwX0lOVF9CVEVNUF9MT1dfTUVESVVNLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogCXsKLQkJLm5hbWUgPSAiVVNCX0NIQVJHRV9ERVRfRE9ORSIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfVVNCX0NIR19ERVRfRE9ORSwKLQkJLmVuZCA9IEFCODUwMF9JTlRfVVNCX0NIR19ERVRfRE9ORSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlVTQl9DSF9USF9QUk9UX1IiLAotCQkuc3RhcnQgPSBBQjg1MDBfSU5UX1VTQl9DSF9USF9QUk9UX1IsCi0JCS5lbmQgPSBBQjg1MDBfSU5UX1VTQl9DSF9USF9QUk9UX1IsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JewotCQkubmFtZSA9ICJNQUlOX0NIX1RIX1BST1RfUiIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfTUFJTl9DSF9USF9QUk9UX1IsCi0JCS5lbmQgPSBBQjg1MDBfSU5UX01BSU5fQ0hfVEhfUFJPVF9SLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiVVNCX0NIQVJHRVJfTk9UX09LRiIsCi0JCS5zdGFydCA9IEFCODUwMF9JTlRfVVNCX0NIQVJHRVJfTk9UX09LRiwKLQkJLmVuZCA9IEFCODUwMF9JTlRfVVNCX0NIQVJHRVJfTk9UX09LRiwKKwkJLm5hbWUgPSAiQlRFTVBfTUVESVVNX0hJR0giLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0JURU1QX01FRElVTV9ISUdILAorCQkuZW5kID0gQUI4NTAwX0lOVF9CVEVNUF9NRURJVU1fSElHSCwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWI4NTAwX2RlYnVnX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIGFiODUwMF9mZ19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIk5DT05WX0FDQ1UiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0NDTl9DT05WX0FDQywKKwkJLmVuZCA9IEFCODUwMF9JTlRfQ0NOX0NPTlZfQUNDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQkFUVF9PVlYiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0JBVFRfT1ZWLAorCQkuZW5kID0gQUI4NTAwX0lOVF9CQVRUX09WViwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lID0gIkxPV19CQVRfRiIsCisJCS5zdGFydCA9IEFCODUwMF9JTlRfTE9XX0JBVF9GLAorCQkuZW5kID0gQUI4NTAwX0lOVF9MT1dfQkFUX0YsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkubmFtZSA9ICJMT1dfQkFUX1IiLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0xPV19CQVRfUiwKKwkJLmVuZCA9IEFCODUwMF9JTlRfTE9XX0JBVF9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQ0NfSU5UX0NBTElCIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9DQ19JTlRfQ0FMSUIsCisJCS5lbmQgPSBBQjg1MDBfSU5UX0NDX0lOVF9DQUxJQiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSBhYjg1MDBfY2hhcmdhbGdfcmVzb3VyY2VzW10gPSB7fTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBfX2RldmluaXRkYXRhIGFiODUwMF9kZWJ1Z19yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5uYW1lCT0gIklSUV9GSVJTVCIsCiAJCS5zdGFydAk9IEFCODUwMF9JTlRfTUFJTl9FWFRfQ0hfTk9UX09LLApAQCAtNTQ5LDcgKzYzMiw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWI4NTAwX3VzYl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSBhYjg1MDBfdXNiX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUgPSAiSURfV0FLRVVQX1IiLAogCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0lEX1dBS0VVUF9SLApAQCAtNTgwLDkgKzY2MywyMSBAQAogCQkuZW5kID0gQUI4NTAwX0lOVF9VU0JfTElOS19TVEFUVVMsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCisJeworCQkubmFtZSA9ICJVU0JfQURQX1BST0JFX1BMVUciLAorCQkuc3RhcnQgPSBBQjg1MDBfSU5UX0FEUF9QUk9CRV9QTFVHLAorCQkuZW5kID0gQUI4NTAwX0lOVF9BRFBfUFJPQkVfUExVRywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5uYW1lID0gIlVTQl9BRFBfUFJPQkVfVU5QTFVHIiwKKwkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9BRFBfUFJPQkVfVU5QTFVHLAorCQkuZW5kID0gQUI4NTAwX0lOVF9BRFBfUFJPQkVfVU5QTFVHLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYjg1MDBfdGVtcF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSBhYjg1MDBfdGVtcF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5uYW1lICA9ICJBQjg1MDBfVEVNUF9XQVJNIiwKIAkJLnN0YXJ0ID0gQUI4NTAwX0lOVF9URU1QX1dBUk0sCkBAIC01OTEsNyArNjg2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBhYjg1MDBfZGV2c1tdID0geworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBfX2RldmluaXRkYXRhIGFiODUwMF9kZXZzW10gPSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJewogCQkubmFtZSA9ICJhYjg1MDAtZGVidWciLApAQCAtNjIxLDExICs3MTYsMzMgQEAKIAkJLnJlc291cmNlcyA9IGFiODUwMF9ydGNfcmVzb3VyY2VzLAogCX0sCiAJewotCQkubmFtZSA9ICJhYjg1MDAtYm0iLAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYWI4NTAwX2JtX3Jlc291cmNlcyksCi0JCS5yZXNvdXJjZXMgPSBhYjg1MDBfYm1fcmVzb3VyY2VzLAorCQkubmFtZSA9ICJhYjg1MDAtY2hhcmdlciIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShhYjg1MDBfY2hhcmdlcl9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gYWI4NTAwX2NoYXJnZXJfcmVzb3VyY2VzLAogCX0sCi0JeyAubmFtZSA9ICJhYjg1MDAtY29kZWMiLCB9LAorCXsKKwkJLm5hbWUgPSAiYWI4NTAwLWJ0ZW1wIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGFiODUwMF9idGVtcF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gYWI4NTAwX2J0ZW1wX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWI4NTAwLWZnIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGFiODUwMF9mZ19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gYWI4NTAwX2ZnX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWI4NTAwLWNoYXJnYWxnIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGFiODUwMF9jaGFyZ2FsZ19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gYWI4NTAwX2NoYXJnYWxnX3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWI4NTAwLWFjYy1kZXQiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYWI4NTAwX2F2X2FjY19kZXRlY3RfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IGFiODUwMF9hdl9hY2NfZGV0ZWN0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiYWI4NTAwLWNvZGVjIiwKKwl9LAogCXsKIAkJLm5hbWUgPSAiYWI4NTAwLXVzYiIsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShhYjg1MDBfdXNiX3Jlc291cmNlcyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjg1MDAtZGVidWdmcy5jIGIvZHJpdmVycy9tZmQvYWI4NTAwLWRlYnVnZnMuYwppbmRleCA2NDc0OGU0Li42NGJkZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjg1MDAtZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbWZkL2FiODUwMC1kZWJ1Z2ZzLmMKQEAgLTQxOSwyMCArNDE5LDEzIEBACiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKikoZmlsZS0+cHJpdmF0ZV9kYXRhKSktPnByaXZhdGU7Ci0JY2hhciBidWZbMzJdOwotCWludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYmFuazsKIAlpbnQgZXJyOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZikgLSAxKSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2J1Zl9zaXplXSA9IDA7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ1c2VyX2JhbmspOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX2JhbmspOwogCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKHVzZXJfYmFuayA+PSBBQjg1MDBfTlVNX0JBTktTKSB7CiAJCWRldl9lcnIoZGV2LCAiZGVidWdmcyBlcnJvciBpbnB1dCA+IG51bWJlciBvZiBiYW5rc1xuIik7CkBAIC00NDEsNyArNDM0LDcgQEAKIAogCWRlYnVnX2JhbmsgPSB1c2VyX2Jhbms7CiAKLQlyZXR1cm4gYnVmX3NpemU7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGFiODUwMF9hZGRyZXNzX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKQEAgLTQ1OSwyNiArNDUyLDIwIEBACiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gKChzdHJ1Y3Qgc2VxX2ZpbGUgKikoZmlsZS0+cHJpdmF0ZV9kYXRhKSktPnByaXZhdGU7Ci0JY2hhciBidWZbMzJdOwotCWludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVzZXJfYWRkcmVzczsKIAlpbnQgZXJyOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZikgLSAxKSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JYnVmW2J1Zl9zaXplXSA9IDA7Ci0KLQllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ1c2VyX2FkZHJlc3MpOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX2FkZHJlc3MpOwogCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOworCiAJaWYgKHVzZXJfYWRkcmVzcyA+IDB4ZmYpIHsKIAkJZGV2X2VycihkZXYsICJkZWJ1Z2ZzIGVycm9yIGlucHV0ID4gMHhmZlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkZWJ1Z19hZGRyZXNzID0gdXNlcl9hZGRyZXNzOwotCXJldHVybiBidWZfc2l6ZTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYWI4NTAwX3ZhbF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCkBAIC01MDksMjAgKzQ5NiwxNCBAQAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICgoc3RydWN0IHNlcV9maWxlICopKGZpbGUtPnByaXZhdGVfZGF0YSkpLT5wcml2YXRlOwotCWNoYXIgYnVmWzMyXTsKLQlpbnQgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyB1c2VyX3ZhbDsKIAlpbnQgZXJyOwogCiAJLyogR2V0IHVzZXJzcGFjZSBzdHJpbmcgYW5kIGFzc3VyZSB0ZXJtaW5hdGlvbiAqLwotCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOwotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWJ1ZltidWZfc2l6ZV0gPSAwOwotCi0JZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdXNlcl92YWwpOworCWVyciA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZ1c2VyX3ZhbCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CisKIAlpZiAodXNlcl92YWwgPiAweGZmKSB7CiAJCWRldl9lcnIoZGV2LCAiZGVidWdmcyBlcnJvciBpbnB1dCA+IDB4ZmZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUzNCw3ICs1MTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXR1cm4gYnVmX3NpemU7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhYjg1MDBfYmFua19mb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvano0NzQwLWFkYy5jIGIvZHJpdmVycy9tZmQvano0NzQwLWFkYy5jCmluZGV4IGEwYmQwY2YuLjIxMTMxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2p6NDc0MC1hZGMuYworKysgYi9kcml2ZXJzL21mZC9qejQ3NDAtYWRjLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAlpbnQgaXJxOwotCWludCBpcnFfYmFzZTsKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CiAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJYXRvbWljX3QgY2xrX3JlZjsKQEAgLTY0LDYzICs2NCwxNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfYWRjX2lycV9zZXRfbWFza2VkKHN0cnVjdCBqejQ3NDBfYWRjICphZGMsIGludCBpcnEsCi0JYm9vbCBtYXNrZWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1aW50OF90IHZhbDsKLQotCWlycSAtPSBhZGMtPmlycV9iYXNlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYy0+bG9jaywgZmxhZ3MpOwotCi0JdmFsID0gcmVhZGIoYWRjLT5iYXNlICsgSlpfUkVHX0FEQ19DVFJMKTsKLQlpZiAobWFza2VkKQotCQl2YWwgfD0gQklUKGlycSk7Ci0JZWxzZQotCQl2YWwgJj0gfkJJVChpcnEpOwotCXdyaXRlYih2YWwsIGFkYy0+YmFzZSArIEpaX1JFR19BRENfQ1RSTCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGMtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgano0NzQwX2FkY19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGp6NDc0MF9hZGMgKmFkYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOwotCWp6NDc0MF9hZGNfaXJxX3NldF9tYXNrZWQoYWRjLCBkYXRhLT5pcnEsIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCBqejQ3NDBfYWRjX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQotewotCXN0cnVjdCBqejQ3NDBfYWRjICphZGMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKLQlqejQ3NDBfYWRjX2lycV9zZXRfbWFza2VkKGFkYywgZGF0YS0+aXJxLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGp6NDc0MF9hZGNfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IGp6NDc0MF9hZGMgKmFkYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOwotCXVuc2lnbmVkIGludCBpcnEgPSBkYXRhLT5pcnEgLSBhZGMtPmlycV9iYXNlOwotCXdyaXRlYihCSVQoaXJxKSwgYWRjLT5iYXNlICsgSlpfUkVHX0FEQ19TVEFUVVMpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGp6NDc0MF9hZGNfaXJxX2NoaXAgPSB7Ci0JLm5hbWUgPSAiano0NzQwLWFkYyIsCi0JLmlycV9tYXNrID0gano0NzQwX2FkY19pcnFfbWFzaywKLQkuaXJxX3VubWFzayA9IGp6NDc0MF9hZGNfaXJxX3VubWFzaywKLQkuaXJxX2FjayA9IGp6NDc0MF9hZGNfaXJxX2FjaywKLX07Ci0KIHN0YXRpYyB2b2lkIGp6NDc0MF9hZGNfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3Qgano0NzQwX2FkYyAqYWRjID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOwogCXVpbnQ4X3Qgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwogCi0Jc3RhdHVzID0gcmVhZGIoYWRjLT5iYXNlICsgSlpfUkVHX0FEQ19TVEFUVVMpOworCXN0YXR1cyA9IHJlYWRiKGdjLT5yZWdfYmFzZSArIEpaX1JFR19BRENfU1RBVFVTKTsKIAogCWZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKIAkJaWYgKHN0YXR1cyAmIEJJVChpKSkKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShhZGMtPmlycV9iYXNlICsgaSk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoZ2MtPmlycV9iYXNlICsgaSk7CiAJfQogfQogCkBAIC0yNDksMTAgKzIwMywxMiBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBqejQ3NDBfYWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CisJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0OwogCXN0cnVjdCBqejQ3NDBfYWRjICphZGM7CiAJc3RydWN0IHJlc291cmNlICptZW1fYmFzZTsKLQlpbnQgaXJxOworCWludCByZXQ7CisJaW50IGlycV9iYXNlOwogCiAJYWRjID0ga21hbGxvYyhzaXplb2YoKmFkYyksIEdGUF9LRVJORUwpOwogCWlmICghYWRjKSB7CkBAIC0yNjcsOSArMjIzLDkgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlhZGMtPmlycV9iYXNlID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAoYWRjLT5pcnFfYmFzZSA8IDApIHsKLQkJcmV0ID0gYWRjLT5pcnFfYmFzZTsKKwlpcnFfYmFzZSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKGlycV9iYXNlIDwgMCkgeworCQlyZXQgPSBpcnFfYmFzZTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpcnEgYmFzZTogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQpAQCAtMzA5LDIwICsyNjUsMjggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFkYyk7CiAKLQlmb3IgKGlycSA9IGFkYy0+aXJxX2Jhc2U7IGlycSA8IGFkYy0+aXJxX2Jhc2UgKyA1OyArK2lycSkgewotCQlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGFkYyk7Ci0JCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZqejQ3NDBfYWRjX2lycV9jaGlwLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7Ci0JfQorCWdjID0gaXJxX2FsbG9jX2dlbmVyaWNfY2hpcCgiSU5UQyIsIDEsIGlycV9iYXNlLCBhZGMtPmJhc2UsCisJCWhhbmRsZV9sZXZlbF9pcnEpOwogCi0JaXJxX3NldF9oYW5kbGVyX2RhdGEoYWRjLT5pcnEsIGFkYyk7CisJY3QgPSBnYy0+Y2hpcF90eXBlczsKKwljdC0+cmVncy5tYXNrID0gSlpfUkVHX0FEQ19DVFJMOworCWN0LT5yZWdzLmFjayA9IEpaX1JFR19BRENfU1RBVFVTOworCWN0LT5jaGlwLmlycV9tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKKwljdC0+Y2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKKwljdC0+Y2hpcC5pcnFfYWNrID0gaXJxX2djX2FjazsKKworCWlycV9zZXR1cF9nZW5lcmljX2NoaXAoZ2MsIElSUV9NU0soNSksIDAsIDAsIElSUV9OT1BST0JFIHwgSVJRX0xFVkVMKTsKKworCWFkYy0+Z2MgPSBnYzsKKworCWlycV9zZXRfaGFuZGxlcl9kYXRhKGFkYy0+aXJxLCBnYyk7CiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoYWRjLT5pcnEsIGp6NDc0MF9hZGNfaXJxX2RlbXV4KTsKIAogCXdyaXRlYigweDAwLCBhZGMtPmJhc2UgKyBKWl9SRUdfQURDX0VOQUJMRSk7CiAJd3JpdGViKDB4ZmYsIGFkYy0+YmFzZSArIEpaX1JFR19BRENfQ1RSTCk7CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXMoJnBkZXYtPmRldiwgMCwgano0NzQwX2FkY19jZWxscywKLQkJQVJSQVlfU0laRShqejQ3NDBfYWRjX2NlbGxzKSwgbWVtX2Jhc2UsIGFkYy0+aXJxX2Jhc2UpOworCQlBUlJBWV9TSVpFKGp6NDc0MF9hZGNfY2VsbHMpLCBtZW1fYmFzZSwgaXJxX2Jhc2UpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9jbGtfcHV0OwogCkBAIC0zNDcsNiArMzExLDggQEAKIAogCW1mZF9yZW1vdmVfZGV2aWNlcygmcGRldi0+ZGV2KTsKIAorCWlycV9yZW1vdmVfZ2VuZXJpY19jaGlwKGFkYy0+Z2MsIElSUV9NU0soNSksIElSUV9OT1BST0JFIHwgSVJRX0xFVkVMLCAwKTsKKwlrZnJlZShhZGMtPmdjKTsKIAlpcnFfc2V0X2hhbmRsZXJfZGF0YShhZGMtPmlycSwgTlVMTCk7CiAJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoYWRjLT5pcnEsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9scGNfc2NoLmMgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKaW5kZXggZWEzZjUyYy4uZWExMTY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jCisrKyBiL2RyaXZlcnMvbWZkL2xwY19zY2guYwpAQCAtMzcsNiArMzcsOSBAQAogI2RlZmluZSBHUElPQkFTRQkweDQ0CiAjZGVmaW5lIEdQSU9fSU9fU0laRQk2NAogCisjZGVmaW5lIFdEVEJBU0UJCTB4ODQKKyNkZWZpbmUgV0RUX0lPX1NJWkUJNjQKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19zY2hfcmVzb3VyY2UgPSB7CiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCiB9OwpAQCAtNTksNiArNjIsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfc2NoX3Jlc291cmNlID0geworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0dW5uZWxjcmVla19jZWxsc1tdID0geworCXsKKwkJLm5hbWUgPSAidHVubmVsY3JlZWtfd2R0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSAxLAorCQkucmVzb3VyY2VzID0gJndkdF9zY2hfcmVzb3VyY2UsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBscGNfc2NoX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NDSF9MUEMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVRDX0xQQykgfSwKQEAgLTcyLDYgKzg3LDcgQEAKIAl1bnNpZ25lZCBpbnQgYmFzZV9hZGRyX2NmZzsKIAl1bnNpZ25lZCBzaG9ydCBiYXNlX2FkZHI7CiAJaW50IGk7CisJaW50IHJldDsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFNNQkFTRSwgJmJhc2VfYWRkcl9jZmcpOwogCWlmICghKGJhc2VfYWRkcl9jZmcgJiAoMSA8PCAzMSkpKSB7CkBAIC0xMDQsOCArMTIwLDM5IEBACiAJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGxwY19zY2hfY2VsbHMpOyBpKyspCiAJCWxwY19zY2hfY2VsbHNbaV0uaWQgPSBpZC0+ZGV2aWNlOwogCi0JcmV0dXJuIG1mZF9hZGRfZGV2aWNlcygmZGV2LT5kZXYsIDAsCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwKIAkJCWxwY19zY2hfY2VsbHMsIEFSUkFZX1NJWkUobHBjX3NjaF9jZWxscyksIE5VTEwsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2RldjsKKworCWlmIChpZC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVRDX0xQQykgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBXRFRCQVNFLCAmYmFzZV9hZGRyX2NmZyk7CisJCWlmICghKGJhc2VfYWRkcl9jZmcgJiAoMSA8PCAzMSkpKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRlY29kZSBvZiB0aGUgV0RUIEkvTyByYW5nZSBkaXNhYmxlZFxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBvdXRfZGV2OworCQl9CisJCWJhc2VfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCliYXNlX2FkZHJfY2ZnOworCQlpZiAoYmFzZV9hZGRyID09IDApIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiSS9PIHNwYWNlIGZvciBXRFQgdW5pbml0aWFsaXplZFxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBvdXRfZGV2OworCQl9CisKKwkJd2R0X3NjaF9yZXNvdXJjZS5zdGFydCA9IGJhc2VfYWRkcjsKKwkJd2R0X3NjaF9yZXNvdXJjZS5lbmQgPSBiYXNlX2FkZHIgKyBXRFRfSU9fU0laRSAtIDE7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHVubmVsY3JlZWtfY2VsbHMpOyBpKyspCisJCQl0dW5uZWxjcmVla19jZWxsc1tpXS5pZCA9IGlkLT5kZXZpY2U7CisKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgMCwgdHVubmVsY3JlZWtfY2VsbHMsCisJCQlBUlJBWV9TSVpFKHR1bm5lbGNyZWVrX2NlbGxzKSwgTlVMTCwgMCk7CisJfQorCisJcmV0dXJuIHJldDsKK291dF9kZXY6CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZkZXYtPmRldik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGxwY19zY2hfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXg4OTk3LWlycS5jIGIvZHJpdmVycy9tZmQvbWF4ODk5Ny1pcnEuYwppbmRleCA2MzhiZjdlLi4wOTI3NGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tYXg4OTk3LWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL21heDg5OTctaXJxLmMKQEAgLTU4LDggKzU4LDYgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0KLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogc3RydWN0IG1heDg5OTdfaXJxX2RhdGEgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWF4ODk5OC5jIGIvZHJpdmVycy9tZmQvbWF4ODk5OC5jCmluZGV4IDllYzc1NzAuLmRlNDA5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21heDg5OTguYworKysgYi9kcml2ZXJzL21mZC9tYXg4OTk4LmMKQEAgLTM5LDYgKzM5LDggQEAKIAkJLm5hbWUgPSAibWF4ODk5OC1wbWljIiwKIAl9LCB7CiAJCS5uYW1lID0gIm1heDg5OTgtcnRjIiwKKwl9LCB7CisJCS5uYW1lID0gIm1heDg5OTgtYmF0dGVyeSIsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYyBiL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYwppbmRleCAxNzE3MTQ0Li4yOTYwMWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMKKysrIGIvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jCkBAIC05OTgsOSArOTk4LDkgQEAKIAogCWlmIChpc19vbWFwX3VzYmhzX3JldjIob21hcCkpIHsKIAkJaWYgKGlzX2VoY2lfdGxsX21vZGUocGRhdGEtPnBvcnRfbW9kZVswXSkpCi0JCQljbGtfZW5hYmxlKG9tYXAtPnVzYnRsbF9wMV9mY2spOworCQkJY2xrX2Rpc2FibGUob21hcC0+dXNidGxsX3AxX2Zjayk7CiAJCWlmIChpc19laGNpX3RsbF9tb2RlKHBkYXRhLT5wb3J0X21vZGVbMV0pKQotCQkJY2xrX2VuYWJsZShvbWFwLT51c2J0bGxfcDJfZmNrKTsKKwkJCWNsa19kaXNhYmxlKG9tYXAtPnVzYnRsbF9wMl9mY2spOwogCQljbGtfZGlzYWJsZShvbWFwLT51dG1pX3AyX2Zjayk7CiAJCWNsa19kaXNhYmxlKG9tYXAtPnV0bWlfcDFfZmNrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9zdG1wZS5jIGIvZHJpdmVycy9tZmQvc3RtcGUuYwppbmRleCA3YWI3NzQ2Li4yOTYzNjg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc3RtcGUuYworKysgYi9kcml2ZXJzL21mZC9zdG1wZS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHN0bXBlX2Jsb2NrX3dyaXRlKTsKIAogLyoqCi0gKiBzdG1wZV9zZXRfYWx0ZnVuYzogc2V0IHRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gZm9yIFNUTVBFIHBpbnMKKyAqIHN0bXBlX3NldF9hbHRmdW5jKCktIHNldCB0aGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIGZvciBTVE1QRSBwaW5zCiAgKiBAc3RtcGU6CURldmljZSB0byBjb25maWd1cmUKICAqIEBwaW5zOglCaXRtYXNrIG9mIHBpbnMgdG8gYWZmZWN0CiAgKiBAYmxvY2s6CWJsb2NrIHRvIGVuYWJsZSBhbHRlcm5hdGUgZnVuY3Rpb25zIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc3RtcGUuaCBiL2RyaXZlcnMvbWZkL3N0bXBlLmgKaW5kZXggMGRiZGM0ZS4uZTRlZTM4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3N0bXBlLmgKKysrIGIvZHJpdmVycy9tZmQvc3RtcGUuaApAQCAtNDIsNiArNDIsNyBAQAogICogQGlkX21hc2s6CWJpdHMgdmFsaWQgaW4gQ0hJUElEIHJlZ2lzdGVyIGZvciBjb21wYXJpc29uIHdpdGggaWRfdmFsCiAgKiBAbnVtX2dwaW9zOgludW1iZXIgb2YgR1BJT1MKICAqIEBhZl9iaXRzOgludW1iZXIgb2YgYml0cyB1c2VkIHRvIHNwZWNpZnkgdGhlIGFsdGVybmF0ZSBmdW5jdGlvbgorICogQHJlZ3M6IHZhcmlhbnQgc3BlY2lmaWMgcmVnaXN0ZXJzLgogICogQGJsb2NrczoJbGlzdCBvZiBibG9ja3MgcHJlc2VudCBvbiB0aGlzIGRldmljZQogICogQG51bV9ibG9ja3M6CW51bWJlciBvZiBibG9ja3MgcHJlc2VudCBvbiB0aGlzIGRldmljZQogICogQG51bV9pcnFzOgludW1iZXIgb2YgaW50ZXJuYWwgSVJRcyBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYwppbmRleCA2OTI3MmU0Li42OTY4NzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKKysrIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5jCkBAIC0yODcsMTIgKzI4Nyw4IEBACiBzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCiAJdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhID0gewogCS5pMmNfYWRhcHRlciA9IDAsCi0JLnR1bmVyID0gewotCQkuaW5mbyA9ICZ0aW1iZXJkYWxlX3RlZjY4NjhfaTJjX2JvYXJkX2luZm8KLQl9LAotCS5kc3AgPSB7Ci0JCS5pbmZvID0gJnRpbWJlcmRhbGVfc2FhNzcwNl9pMmNfYm9hcmRfaW5mbwotCX0KKwkudHVuZXIgPSAmdGltYmVyZGFsZV90ZWY2ODY4X2kyY19ib2FyZF9pbmZvLAorCS5kc3AgPSAmdGltYmVyZGFsZV9zYWE3NzA2X2kyY19ib2FyZF9pbmZvCiB9OwogCiBzdGF0aWMgY29uc3QgX19kZXZpbml0Y29uc3Qgc3RydWN0IHJlc291cmNlIHRpbWJlcmRhbGVfdmlkZW9fcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90cHM2NTkxMC5jIGIvZHJpdmVycy9tZmQvdHBzNjU5MTAuYwppbmRleCAyMjI5ZTY2Li42ZjViOGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90cHM2NTkxMC5jCisrKyBiL2RyaXZlcnMvbWZkL3RwczY1OTEwLmMKQEAgLTE0NywxMiArMTQ3LDExIEBACiAJaWYgKGluaXRfZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfZGF0YS0+aXJxID0gcG1pY19wbGF0X2RhdGEtPmlycTsKLQlpbml0X2RhdGEtPmlycV9iYXNlID0gcG1pY19wbGF0X2RhdGEtPmlycTsKLQogCXRwczY1OTEwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRwczY1OTEwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRwczY1OTEwID09IE5VTEwpCisJaWYgKHRwczY1OTEwID09IE5VTEwpIHsKKwkJa2ZyZWUoaW5pdF9kYXRhKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgdHBzNjU5MTApOwogCXRwczY1OTEwLT5kZXYgPSAmaTJjLT5kZXY7CkBAIC0xNjgsMTcgKzE2NywyMiBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAorCWluaXRfZGF0YS0+aXJxID0gcG1pY19wbGF0X2RhdGEtPmlycTsKKwlpbml0X2RhdGEtPmlycV9iYXNlID0gcG1pY19wbGF0X2RhdGEtPmlycTsKKwogCXRwczY1OTEwX2dwaW9faW5pdCh0cHM2NTkxMCwgcG1pY19wbGF0X2RhdGEtPmdwaW9fYmFzZSk7CiAKIAlyZXQgPSB0cHM2NTkxMF9pcnFfaW5pdCh0cHM2NTkxMCwgaW5pdF9kYXRhLT5pcnEsIGluaXRfZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCisJa2ZyZWUoaW5pdF9kYXRhKTsKIAlyZXR1cm4gcmV0OwogCiBlcnI6CiAJbWZkX3JlbW92ZV9kZXZpY2VzKHRwczY1OTEwLT5kZXYpOwogCWtmcmVlKHRwczY1OTEwKTsKKwlrZnJlZShpbml0X2RhdGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4Nyw2ICsxOTEsNyBAQAogCXN0cnVjdCB0cHM2NTkxMCAqdHBzNjU5MTAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKIAogCW1mZF9yZW1vdmVfZGV2aWNlcyh0cHM2NTkxMC0+ZGV2KTsKKwl0cHM2NTkxMF9pcnFfZXhpdCh0cHM2NTkxMCk7CiAJa2ZyZWUodHBzNjU5MTApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90cHM2NTkxMS1jb21wYXJhdG9yLmMgYi9kcml2ZXJzL21mZC90cHM2NTkxMS1jb21wYXJhdG9yLmMKaW5kZXggMjgzYWM2Ny4uZTdmZjc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHBzNjU5MTEtY29tcGFyYXRvci5jCisrKyBiL2RyaXZlcnMvbWZkL3RwczY1OTExLWNvbXBhcmF0b3IuYwpAQCAtMTU3LDYgKzE1Nyw4IEBACiAJc3RydWN0IHRwczY1OTEwICp0cHM2NTkxMDsKIAogCXRwczY1OTEwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcDJfdGhyZXNob2xkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbXAxX3RocmVzaG9sZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1OTEyLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3RwczY1OTEyLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTViYzAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU5MTItY29yZS5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogdHBzNjU5MTItY29yZS5jICAtLSAgVEkgVFBTNjU5MTJ4CisgKgorICogQ29weXJpZ2h0IDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyZ2FyaXRhIE9sYXlhIENhYnJlcmEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3bTgzNTAgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjU5MTIuaD4KKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0cHM2NTkxMnNbXSA9IHsKKwl7CisJCS5uYW1lID0gInRwczY1OTEyLXBtaWMiLAorCX0sCit9OworCitpbnQgdHBzNjU5MTJfc2V0X2JpdHMoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnLCB1OCBtYXNrKQoreworCXU4IGRhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnRwczY1OTEyLT5pb19tdXRleCk7CisKKwllcnIgPSB0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgcmVnLCAxLCAmZGF0YSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHRwczY1OTEyLT5kZXYsICJSZWFkIGZyb20gcmVnIDB4JXggZmFpbGVkXG4iLCByZWcpOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhIHw9IG1hc2s7CisJZXJyID0gdHBzNjU5MTItPndyaXRlKHRwczY1OTEyLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHRwczY1OTEyLT5kZXYsICJXcml0ZSB0byByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnRwczY1OTEyLT5pb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwczY1OTEyX3NldF9iaXRzKTsKKworaW50IHRwczY1OTEyX2NsZWFyX2JpdHMoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnLCB1OCBtYXNrKQoreworCXU4IGRhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnRwczY1OTEyLT5pb19tdXRleCk7CisJZXJyID0gdHBzNjU5MTItPnJlYWQodHBzNjU5MTIsIHJlZywgMSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycih0cHM2NTkxMi0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKwllcnIgPSB0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIHJlZywgMSwgJmRhdGEpOworCWlmIChlcnIpCisJCWRldl9lcnIodHBzNjU5MTItPmRldiwgIldyaXRlIHRvIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmdHBzNjU5MTItPmlvX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBzNjU5MTJfY2xlYXJfYml0cyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHRwczY1OTEyX3JlYWQoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnKQoreworCXU4IHZhbDsKKwlpbnQgZXJyOworCisJZXJyID0gdHBzNjU5MTItPnJlYWQodHBzNjU5MTIsIHJlZywgMSwgJnZhbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cHM2NTkxMl93cml0ZShzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlyZXR1cm4gdHBzNjU5MTItPndyaXRlKHRwczY1OTEyLCByZWcsIDEsICZ2YWwpOworfQorCitpbnQgdHBzNjU5MTJfcmVnX3JlYWQoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnKQoreworCWludCBkYXRhOworCisJbXV0ZXhfbG9jaygmdHBzNjU5MTItPmlvX211dGV4KTsKKworCWRhdGEgPSB0cHM2NTkxMl9yZWFkKHRwczY1OTEyLCByZWcpOworCWlmIChkYXRhIDwgMCkKKwkJZGV2X2Vycih0cHM2NTkxMi0+ZGV2LCAiUmVhZCBmcm9tIHJlZyAweCV4IGZhaWxlZFxuIiwgcmVnKTsKKworCW11dGV4X3VubG9jaygmdHBzNjU5MTItPmlvX211dGV4KTsKKwlyZXR1cm4gZGF0YTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwczY1OTEyX3JlZ19yZWFkKTsKKworaW50IHRwczY1OTEyX3JlZ193cml0ZShzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdHBzNjU5MTItPmlvX211dGV4KTsKKworCWVyciA9IHRwczY1OTEyX3dyaXRlKHRwczY1OTEyLCByZWcsIHZhbCk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIodHBzNjU5MTItPmRldiwgIldyaXRlIGZvciByZWcgMHgleCBmYWlsZWRcbiIsIHJlZyk7CisKKwltdXRleF91bmxvY2soJnRwczY1OTEyLT5pb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwczY1OTEyX3JlZ193cml0ZSk7CisKK2ludCB0cHM2NTkxMl9kZXZpY2VfaW5pdChzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyKQoreworCXN0cnVjdCB0cHM2NTkxMl9ib2FyZCAqcG1pY19wbGF0X2RhdGEgPSB0cHM2NTkxMi0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0cHM2NTkxMl9wbGF0Zm9ybV9kYXRhICppbml0X2RhdGE7CisJaW50IHJldCwgZGNkY19hdnMsIHZhbHVlOworCisJaW5pdF9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRwczY1OTEyX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5pdF9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9kYXRhLT5pcnEgPSBwbWljX3BsYXRfZGF0YS0+aXJxOworCWluaXRfZGF0YS0+aXJxX2Jhc2UgPSBwbWljX3BsYXRfZGF0YS0+aXJxOworCisJbXV0ZXhfaW5pdCgmdHBzNjU5MTItPmlvX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEodHBzNjU5MTItPmRldiwgdHBzNjU5MTIpOworCisJZGNkY19hdnMgPSAocG1pY19wbGF0X2RhdGEtPmlzX2RjZGMxX2F2cyA8PCAwIHwKKwkJCXBtaWNfcGxhdF9kYXRhLT5pc19kY2RjMl9hdnMgIDw8IDEgfAorCQkJCXBtaWNfcGxhdF9kYXRhLT5pc19kY2RjM19hdnMgPDwgMiB8CisJCQkJCXBtaWNfcGxhdF9kYXRhLT5pc19kY2RjNF9hdnMgPDwgMyk7CisJaWYgKGRjZGNfYXZzKSB7CisJCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JMkNfU1BJX0NGRywgMSwgJnZhbHVlKTsKKwkJZGNkY19hdnMgfD0gdmFsdWU7CisJCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSTJDX1NQSV9DRkcsIDEsICZkY2RjX2F2cyk7CisJfQorCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHRwczY1OTEyLT5kZXYsIC0xLAorCQkJICAgICAgdHBzNjU5MTJzLCBBUlJBWV9TSVpFKHRwczY1OTEycyksCisJCQkgICAgICBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSB0cHM2NTkxMl9pcnFfaW5pdCh0cHM2NTkxMiwgaW5pdF9kYXRhLT5pcnEsIGluaXRfZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0dXJuIHJldDsKKworZXJyOgorCWtmcmVlKGluaXRfZGF0YSk7CisJbWZkX3JlbW92ZV9kZXZpY2VzKHRwczY1OTEyLT5kZXYpOworCWtmcmVlKHRwczY1OTEyKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHRwczY1OTEyX2RldmljZV9leGl0KHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIpCit7CisJbWZkX3JlbW92ZV9kZXZpY2VzKHRwczY1OTEyLT5kZXYpOworCWtmcmVlKHRwczY1OTEyKTsKK30KKworTU9EVUxFX0FVVEhPUigiTWFyZ2FyaXRhIE9sYXlhCTxtYWdpQHNsaW1sb2dpYy5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFBTNjU5MTJ4IGNoaXAgZmFtaWx5IG11bHRpLWZ1bmN0aW9uIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBzNjU5MTItaTJjLmMgYi9kcml2ZXJzL21mZC90cHM2NTkxMi1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQxZjJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU5MTItaTJjLmMKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiB0cHM2NTkxMi1pMmMuYyAgLS0gIEkyQyBhY2Nlc3MgZm9yIFRJIFRQUzY1OTEyeCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyZ2FyaXRhIE9sYXlhIENhYnJlcmEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3bTgzNTAgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdHBzNjU5MTIuaD4KKworc3RhdGljIGludCB0cHM2NTkxMl9pMmNfcmVhZChzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsCisJCQkJICBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRwczY1OTEyLT5jb250cm9sX2RhdGE7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwlpbnQgcmV0OworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBpMmMtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAxOworCXhmZXJbMF0uYnVmID0gJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSBieXRlczsKKwl4ZmVyWzFdLmJ1ZiA9IGRlc3Q7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ID09IDIpCisJCXJldCA9IDA7CisJZWxzZSBpZiAocmV0ID49IDApCisJCXJldCA9IC1FSU87CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9pMmNfd3JpdGUoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnLAorCQkJCSAgIGludCBieXRlcywgdm9pZCAqc3JjKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0cHM2NTkxMi0+Y29udHJvbF9kYXRhOworCS8qIHdlIGFkZCAxIGJ5dGUgZm9yIGRldmljZSByZWdpc3RlciAqLworCXU4IG1zZ1tUUFM2NTkxWF9NQVhfUkVHSVNURVIgKyAxXTsKKwlpbnQgcmV0OworCisJaWYgKGJ5dGVzID4gVFBTNjU5MVhfTUFYX1JFR0lTVEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZ1swXSA9IHJlZzsKKwltZW1jcHkoJm1zZ1sxXSwgc3JjLCBieXRlcyk7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaTJjLCBtc2csIGJ5dGVzICsgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAhPSBieXRlcyArIDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTI7CisKKwl0cHM2NTkxMiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0cHM2NTkxMiksIEdGUF9LRVJORUwpOworCWlmICh0cHM2NTkxMiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHRwczY1OTEyKTsKKwl0cHM2NTkxMi0+ZGV2ID0gJmkyYy0+ZGV2OworCXRwczY1OTEyLT5jb250cm9sX2RhdGEgPSBpMmM7CisJdHBzNjU5MTItPnJlYWQgPSB0cHM2NTkxMl9pMmNfcmVhZDsKKwl0cHM2NTkxMi0+d3JpdGUgPSB0cHM2NTkxMl9pMmNfd3JpdGU7CisKKwlyZXR1cm4gdHBzNjU5MTJfZGV2aWNlX2luaXQodHBzNjU5MTIpOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl0cHM2NTkxMl9kZXZpY2VfZXhpdCh0cHM2NTkxMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRwczY1OTEyX2kyY19pZFtdID0geworCXsidHBzNjU5MTIiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRwczY1OTEyX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cHM2NTkxMl9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gInRwczY1OTEyIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB0cHM2NTkxMl9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IHRwczY1OTEyX2kyY19yZW1vdmUsCisJLmlkX3RhYmxlID0gdHBzNjU5MTJfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHBzNjU5MTJfaTJjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJnRwczY1OTEyX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgVFBTNjU5MTIgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorLyogaW5pdCBlYXJseSBzbyBjb25zdW1lciBkZXZpY2VzIGNhbiBjb21wbGV0ZSBzeXN0ZW0gYm9vdCAqLworc3Vic3lzX2luaXRjYWxsKHRwczY1OTEyX2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHRwczY1OTEyX2kyY19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnRwczY1OTEyX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHBzNjU5MTJfaTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJnYXJpdGEgT2xheWEJPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUUFM2NTkxeCBjaGlwIGZhbWlseSBtdWx0aS1mdW5jdGlvbiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1OTEyLWlycS5jIGIvZHJpdmVycy9tZmQvdHBzNjU5MTItaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2MGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RwczY1OTEyLWlycS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogdHBzNjU5MTItaXJxLmMgIC0tICBUSSBUUFM2NTkxeAorICoKKyAqIENvcHlyaWdodCAyMDExIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqCisgKiBBdXRob3I6IE1hcmdhcml0YSBPbGF5YSA8bWFnaUBzbGltbG9naWMuY28udWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gd204MzUwIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90cHM2NTkxMi5oPgorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fdHBzNjU5MTJfaXJxKHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIsCisJCQkJCQkJaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxIC0gdHBzNjU5MTItPmlycV9iYXNlOworfQorCisvKgorICogVGhpcyBpcyBhIHRocmVhZGVkIElSUSBoYW5kbGVyIHNvIGNhbiBhY2Nlc3MgSTJDL1NQSS4gIFNpbmNlIHRoZQorICogSVJRIGhhbmRsZXIgZXhwbGljaXRseSBjbGVhcnMgdGhlIElSUSBpdCBoYW5kbGVzIHRoZSBJUlEgbGluZQorICogd2lsbCBiZSByZWFzc2VydGVkIGFuZCB0aGUgcGh5c2ljYWwgSVJRIHdpbGwgYmUgaGFuZGxlZCBhZ2FpbiBpZgorICogYW5vdGhlciBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hpbGUgd2UgcnVuIC0gaW4gdGhlIG5vcm1hbCBjb3Vyc2UKKyAqIG9mIGV2ZW50cyB0aGlzIGlzIGEgcmFyZSBvY2N1cnJlbmNlIHNvIHdlIHNhdmUgSTJDL1NQSSByZWFkcy4gV2UncmUKKyAqIGFsc28gYXNzdW1pbmcgdGhhdCBpdCdzIHJhcmUgdG8gZ2V0IGxvdHMgb2YgaW50ZXJydXB0cyBmaXJpbmcKKyAqIHNpbXVsdGFuZW91c2x5IHNvIHRyeSB0byBtaW5pbWlzZSBJL08uCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB0cHM2NTkxMl9pcnEoaW50IGlycSwgdm9pZCAqaXJxX2RhdGEpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IGlycV9kYXRhOworCXUzMiBpcnFfc3RzOworCXUzMiBpcnFfbWFzazsKKwl1OCByZWc7CisJaW50IGk7CisKKworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTLCAxLCAmcmVnKTsKKwlpcnFfc3RzID0gcmVnOworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTMiwgMSwgJnJlZyk7CisJaXJxX3N0cyB8PSByZWcgPDwgODsKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUzMsIDEsICZyZWcpOworCWlycV9zdHMgfD0gcmVnIDw8IDE2OworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTNCwgMSwgJnJlZyk7CisJaXJxX3N0cyB8PSByZWcgPDwgMjQ7CisKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX01TSywgMSwgJnJlZyk7CisJaXJxX21hc2sgPSByZWc7CisJdHBzNjU5MTItPnJlYWQodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9NU0syLCAxLCAmcmVnKTsKKwlpcnFfbWFzayB8PSByZWcgPDwgODsKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX01TSzMsIDEsICZyZWcpOworCWlycV9tYXNrIHw9IHJlZyA8PCAxNjsKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX01TSzQsIDEsICZyZWcpOworCWlycV9tYXNrIHw9IHJlZyA8PCAyNDsKKworCWlycV9zdHMgJj0gfmlycV9tYXNrOworCWlmICghaXJxX3N0cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChpID0gMDsgaSA8IHRwczY1OTEyLT5pcnFfbnVtOyBpKyspIHsKKwkJaWYgKCEoaXJxX3N0cyAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCisJCWhhbmRsZV9uZXN0ZWRfaXJxKHRwczY1OTEyLT5pcnFfYmFzZSArIGkpOworCX0KKworCS8qIFdyaXRlIHRoZSBTVFMgcmVnaXN0ZXIgYmFjayB0byBjbGVhciBJUlFzIHdlIGhhbmRsZWQgKi8KKwlyZWcgPSBpcnFfc3RzICYgMHhGRjsKKwlpcnFfc3RzID4+PSA4OworCWlmIChyZWcpCisJCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUywgMSwgJnJlZyk7CisJcmVnID0gaXJxX3N0cyAmIDB4RkY7CisJaXJxX3N0cyA+Pj0gODsKKwlpZiAocmVnKQorCQl0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9TVFMyLCAxLCAmcmVnKTsKKwlyZWcgPSBpcnFfc3RzICYgMHhGRjsKKwlpcnFfc3RzID4+PSA4OworCWlmIChyZWcpCisJCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUzMsIDEsICZyZWcpOworCXJlZyA9IGlycV9zdHMgJiAweEZGOworCWlmIChyZWcpCisJCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUzQsIDEsICZyZWcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB0cHM2NTkxMl9pcnFfbG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCisJbXV0ZXhfbG9jaygmdHBzNjU5MTItPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdHBzNjU5MTJfaXJxX3N5bmNfdW5sb2NrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJdTMyIHJlZ19tYXNrOworCXU4IHJlZzsKKworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfTVNLLCAxLCAmcmVnKTsKKwlyZWdfbWFzayA9IHJlZzsKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX01TSzIsIDEsICZyZWcpOworCXJlZ19tYXNrIHw9IHJlZyA8PCA4OworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfTVNLMywgMSwgJnJlZyk7CisJcmVnX21hc2sgfD0gcmVnIDw8IDE2OworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfTVNLNCwgMSwgJnJlZyk7CisJcmVnX21hc2sgfD0gcmVnIDw8IDI0OworCisJaWYgKHRwczY1OTEyLT5pcnFfbWFzayAhPSByZWdfbWFzaykgeworCQlyZWcgPSB0cHM2NTkxMi0+aXJxX21hc2sgJiAweEZGOworCQl0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9NU0ssIDEsICZyZWcpOworCQlyZWcgPSB0cHM2NTkxMi0+aXJxX21hc2sgPj4gOCAmIDB4RkY7CisJCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX01TSzIsIDEsICZyZWcpOworCQlyZWcgPSB0cHM2NTkxMi0+aXJxX21hc2sgPj4gMTYgJiAweEZGOworCQl0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9NU0szLCAxLCAmcmVnKTsKKwkJcmVnID0gdHBzNjU5MTItPmlycV9tYXNrID4+IDI0ICYgMHhGRjsKKwkJdHBzNjU5MTItPndyaXRlKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfTVNLNCwgMSwgJnJlZyk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ0cHM2NTkxMi0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCB0cHM2NTkxMl9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisKKwl0cHM2NTkxMi0+aXJxX21hc2sgJj0gfigxIDw8IGlycV90b190cHM2NTkxMl9pcnEodHBzNjU5MTIsIGRhdGEtPmlycSkpOworfQorCitzdGF0aWMgdm9pZCB0cHM2NTkxMl9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCisJdHBzNjU5MTItPmlycV9tYXNrIHw9ICgxIDw8IGlycV90b190cHM2NTkxMl9pcnEodHBzNjU5MTIsIGRhdGEtPmlycSkpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRwczY1OTEyX2lycV9jaGlwID0geworCS5uYW1lID0gInRwczY1OTEyIiwKKwkuaXJxX2J1c19sb2NrID0gdHBzNjU5MTJfaXJxX2xvY2ssCisJLmlycV9idXNfc3luY191bmxvY2sgPSB0cHM2NTkxMl9pcnFfc3luY191bmxvY2ssCisJLmlycV9kaXNhYmxlID0gdHBzNjU5MTJfaXJxX2Rpc2FibGUsCisJLmlycV9lbmFibGUgPSB0cHM2NTkxMl9pcnFfZW5hYmxlLAorfTsKKworaW50IHRwczY1OTEyX2lycV9pbml0KHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIsIGludCBpcnEsCisJCQkgICAgc3RydWN0IHRwczY1OTEyX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCByZXQsIGN1cl9pcnE7CisJaW50IGZsYWdzID0gSVJRRl9PTkVTSE9UOworCXU4IHJlZzsKKworCWlmICghaXJxKSB7CisJCWRldl93YXJuKHRwczY1OTEyLT5kZXYsICJObyBpbnRlcnJ1cHQgc3VwcG9ydCwgbm8gY29yZSBJUlFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+aXJxX2Jhc2UpIHsKKwkJZGV2X3dhcm4odHBzNjU5MTItPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0LCBubyBJUlEgYmFzZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIENsZWFyIHVuYXR0ZW5kZWQgaW50ZXJydXB0cyAqLworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTLCAxLCAmcmVnKTsKKwl0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9TVFMsIDEsICZyZWcpOworCXRwczY1OTEyLT5yZWFkKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTMiwgMSwgJnJlZyk7CisJdHBzNjU5MTItPndyaXRlKHRwczY1OTEyLCBUUFM2NTkxMl9JTlRfU1RTMiwgMSwgJnJlZyk7CisJdHBzNjU5MTItPnJlYWQodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9TVFMzLCAxLCAmcmVnKTsKKwl0cHM2NTkxMi0+d3JpdGUodHBzNjU5MTIsIFRQUzY1OTEyX0lOVF9TVFMzLCAxLCAmcmVnKTsKKwl0cHM2NTkxMi0+cmVhZCh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUzQsIDEsICZyZWcpOworCXRwczY1OTEyLT53cml0ZSh0cHM2NTkxMiwgVFBTNjU5MTJfSU5UX1NUUzQsIDEsICZyZWcpOworCisJLyogTWFzayB0b3AgbGV2ZWwgaW50ZXJydXB0cyAqLworCXRwczY1OTEyLT5pcnFfbWFzayA9IDB4RkZGRkZGRkY7CisKKwltdXRleF9pbml0KCZ0cHM2NTkxMi0+aXJxX2xvY2spOworCXRwczY1OTEyLT5jaGlwX2lycSA9IGlycTsKKwl0cHM2NTkxMi0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisKKwl0cHM2NTkxMi0+aXJxX251bSA9IFRQUzY1OTEyX05VTV9JUlE7CisKKwkvKiBSZWdpc3RlciB3aXRoIGdlbmlycSAqLworCWZvciAoY3VyX2lycSA9IHRwczY1OTEyLT5pcnFfYmFzZTsKKwkgICAgIGN1cl9pcnEgPCB0cHM2NTkxMi0+aXJxX251bSArIHRwczY1OTEyLT5pcnFfYmFzZTsKKwkgICAgIGN1cl9pcnErKykgeworCQlpcnFfc2V0X2NoaXBfZGF0YShjdXJfaXJxLCB0cHM2NTkxMik7CisJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihjdXJfaXJxLCAmdHBzNjU5MTJfaXJxX2NoaXAsCisJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQlpcnFfc2V0X25lc3RlZF90aHJlYWQoY3VyX2lycSwgMSk7CisJCS8qIEFSTSBuZWVkcyB1cyB0byBleHBsaWNpdGx5IGZsYWcgdGhlIElSUSBhcyB2YWxpZAorCQkgKiBhbmQgd2lsbCBzZXQgdGhlbSBub3Byb2JlIHdoZW4gd2UgZG8gc28uICovCisjaWZkZWYgQ09ORklHX0FSTQorCQlzZXRfaXJxX2ZsYWdzKGN1cl9pcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkJaXJxX3NldF9ub3Byb2JlKGN1cl9pcnEpOworI2VuZGlmCisJfQorCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCB0cHM2NTkxMl9pcnEsIGZsYWdzLAorCQkJCSAgICJ0cHM2NTkxMiIsIHRwczY1OTEyKTsKKworCWlycV9zZXRfaXJxX3R5cGUoaXJxLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycih0cHM2NTkxMi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB0cHM2NTkxMl9pcnFfZXhpdChzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyKQoreworCWZyZWVfaXJxKHRwczY1OTEyLT5jaGlwX2lycSwgdHBzNjU5MTIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBzNjU5MTItc3BpLmMgYi9kcml2ZXJzL21mZC90cHM2NTkxMi1zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDcxZTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU5MTItc3BpLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiB0cHM2NTkxMi1zcGkuYyAgLS0gIFNQSSBhY2Nlc3MgZm9yIFRJIFRQUzY1OTEyeCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyZ2FyaXRhIE9sYXlhIENhYnJlcmEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3bTgzNTAgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3RwczY1OTEyLmg+CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfc3BpX3dyaXRlKHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIsIHU4IGFkZHIsCisJCQkJCQkJaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRwczY1OTEyLT5jb250cm9sX2RhdGE7CisJdTggKmRhdGEgPSAodTggKikgc3JjOworCWludCByZXQ7CisJLyogYml0IDIzIGlzIHRoZSByZWFkL3dyaXRlIGJpdCAqLworCXVuc2lnbmVkIGxvbmcgc3BpX2RhdGEgPSAxIDw8IDIzIHwgYWRkciA8PCAxNSB8ICpkYXRhOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcjsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOworCXUzMiB0eF9idWYsIHJ4X2J1ZjsKKworCXR4X2J1ZiA9IHNwaV9kYXRhOworCXJ4X2J1ZiA9IDA7CisKKwl4ZmVyLnR4X2J1Zgk9ICZ0eF9idWY7CisJeGZlci5yeF9idWYJPSBOVUxMOworCXhmZXIubGVuCT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCXhmZXIuYml0c19wZXJfd29yZCA9IDI0OworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwlyZXQgPSBzcGlfc3luYyhzcGksICZtc2cpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfc3BpX3JlYWQoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggYWRkciwKKwkJCQkJCQlpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRwczY1OTEyLT5jb250cm9sX2RhdGE7CisJLyogYml0IDIzIGlzIHRoZSByZWFkL3dyaXRlIGJpdCAqLworCXVuc2lnbmVkIGxvbmcgc3BpX2RhdGEgPSAwIDw8IDIzIHwgYWRkciA8PCAxNTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlpbnQgcmV0OworCXU4ICpkYXRhID0gKHU4ICopIGRlc3Q7CisJdTMyIHR4X2J1ZiwgcnhfYnVmOworCisJdHhfYnVmID0gc3BpX2RhdGE7CisJcnhfYnVmID0gMDsKKworCXhmZXIudHhfYnVmCT0gJnR4X2J1ZjsKKwl4ZmVyLnJ4X2J1Zgk9ICZyeF9idWY7CisJeGZlci5sZW4JPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJeGZlci5iaXRzX3Blcl93b3JkID0gMjQ7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyLCAmbXNnKTsKKworCWlmIChzcGkgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBzcGlfc3luYyhzcGksICZtc2cpOworCWlmIChyZXQgPT0gMCkKKwkJKmRhdGEgPSAodTgpIChyeF9idWYgJiAweEZGKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0cHM2NTkxMl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyOworCisJdHBzNjU5MTIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHBzNjU5MTIpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHBzNjU5MTIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHM2NTkxMi0+ZGV2ID0gJnNwaS0+ZGV2OworCXRwczY1OTEyLT5jb250cm9sX2RhdGEgPSBzcGk7CisJdHBzNjU5MTItPnJlYWQgPSB0cHM2NTkxMl9zcGlfcmVhZDsKKwl0cHM2NTkxMi0+d3JpdGUgPSB0cHM2NTkxMl9zcGlfd3JpdGU7CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCB0cHM2NTkxMik7CisKKwlyZXR1cm4gdHBzNjU5MTJfZGV2aWNlX2luaXQodHBzNjU5MTIpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0cHM2NTkxMl9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCisJdHBzNjU5MTJfZGV2aWNlX2V4aXQodHBzNjU5MTIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB0cHM2NTkxMl9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwczY1OTEyIiwKKwkJLmJ1cyA9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gdHBzNjU5MTJfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cHM2NTkxMl9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRwczY1OTEyX3NwaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnRwczY1OTEyX3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgVFBTNjU5MTIgU1BJIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gMDsKK30KKy8qIGluaXQgZWFybHkgc28gY29uc3VtZXIgZGV2aWNlcyBjYW4gY29tcGxldGUgc3lzdGVtIGJvb3QgKi8KK3N1YnN5c19pbml0Y2FsbCh0cHM2NTkxMl9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0cHM2NTkxMl9zcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmdHBzNjU5MTJfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0cHM2NTkxMl9zcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmdhcml0YSBPbGF5YQk8bWFnaUBzbGltbG9naWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNQSSBzdXBwb3J0IGZvciBUUFM2NTkxMiBjaGlwIGZhbWlseSBtZmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCmluZGV4IGEyZWRkYzcwLi4wMWVjZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKQEAgLTEyODMsNiArMTI4Myw4IEBACiAJeyAidHBzNjU5NTAiLCAwIH0sCQkvKiBjYXRhbG9nIHZlcnNpb24gb2YgdHdsNTAzMCAqLwogCXsgInRwczY1OTMwIiwgVFBTX1NVQlNFVCB9LAkvKiBmZXdlciBMRE9zIGFuZCBEQUNzOyBubyBjaGFyZ2VyICovCiAJeyAidHBzNjU5MjAiLCBUUFNfU1VCU0VUIH0sCS8qIGZld2VyIExET3M7IG5vIGNvZGVjIG9yIGNoYXJnZXIgKi8KKwl7ICJ0cHM2NTkyMSIsIFRQU19TVUJTRVQgfSwJLyogZmV3ZXIgTERPczsgbm8gY29kZWMsIG5vIExFRAorCQkJCQkgICBhbmQgdmlicmF0b3IuIENoYXJnZXIgaW4gVVNCIG1vZHVsZSovCiAJeyAidHdsNjAzMCIsIFRXTDYwMzBfQ0xBU1MgfSwJLyogIlBob2VuaXggcG93ZXIgY2hpcCIgKi8KIAl7ICJ0d2w2MDI1IiwgVFdMNjAzMF9DTEFTUyB8IFRXTDYwMjVfU1VCQ0xBU1MgfSwgLyogIlBob2VuaXggbGl0ZSIgKi8KIAl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLW1hZGMuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtbWFkYy5jCmluZGV4IDM5NDFkZGMuLmI1ZDU5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtbWFkYy5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtbWFkYy5jCkBAIC01MzAsMTMgKzUzMCwxMyBAQAogCWlmIChyZXQpIHsKIAkJZGV2X2Vycih0d2w0MDMwX21hZGMtPmRldiwKIAkJCSJ1bmFibGUgdG8gd3JpdGUgc2VsIHJlZ2lzdGVyIDB4JVhcbiIsIG1ldGhvZC0+c2VsICsgMSk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX01BREMsIGNoX2xzYiwgbWV0aG9kLT5zZWwpOwogCWlmIChyZXQpIHsKIAkJZGV2X2Vycih0d2w0MDMwX21hZGMtPmRldiwKIAkJCSJ1bmFibGUgdG8gd3JpdGUgc2VsIHJlZ2lzdGVyIDB4JVhcbiIsIG1ldGhvZC0+c2VsICsgMSk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAkvKiBTZWxlY3QgYXZlcmFnaW5nIGZvciBhbGwgY2hhbm5lbHMgaWYgZG9fYXZnIGlzIHNldCAqLwogCWlmIChyZXEtPmRvX2F2ZykgewpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCQlkZXZfZXJyKHR3bDQwMzBfbWFkYy0+ZGV2LAogCQkJCSJ1bmFibGUgdG8gd3JpdGUgYXZnIHJlZ2lzdGVyIDB4JVhcbiIsCiAJCQkJbWV0aG9kLT5hdmcgKyAxKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCQlyZXQgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX01BREMsCiAJCQkJICAgICAgIGNoX2xzYiwgbWV0aG9kLT5hdmcpOwpAQCAtNTU0LDcgKzU1NCw3IEBACiAJCQlkZXZfZXJyKHR3bDQwMzBfbWFkYy0+ZGV2LAogCQkJCSJ1bmFibGUgdG8gd3JpdGUgc2VsIHJlZyAweCVYXG4iLAogCQkJCW1ldGhvZC0+c2VsICsgMSk7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAJaWYgKHJlcS0+dHlwZSA9PSBUV0w0MDMwX01BRENfSVJRX09ORVNIT1QgJiYgcmVxLT5mdW5jX2NiICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDYwMzAtcHdtLmMgYi9kcml2ZXJzL21mZC90d2w2MDMwLXB3bS5jCmluZGV4IDVkMjViZGMuLmU4ZmVlMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDYwMzAtcHdtLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNjAzMC1wd20uYwpAQCAtMTYxLDMgKzE2MSw1IEBACiAJa2ZyZWUocHdtKTsKIH0KIEVYUE9SVF9TWU1CT0wocHdtX2ZyZWUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtYXV4YWRjLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtYXV4YWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMTA5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1hdXhhZGMuYwpAQCAtMCwwICsxLDI5OSBAQAorLyoKKyAqIHdtODMxeC1hdXhhZGMuYyAgLS0gIEFVWEFEQyBmb3IgV29sZnNvbiBXTTgzMXggUE1JQ3MKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9hdXhhZGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L290cC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmg+CisKK3N0cnVjdCB3bTgzMXhfYXV4YWRjX3JlcSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWVudW0gd204MzF4X2F1eGFkYyBpbnB1dDsKKwlpbnQgdmFsOworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9hdXhhZGNfcmVhZF9pcnEoc3RydWN0IHdtODMxeCAqd204MzF4LAorCQkJCSAgZW51bSB3bTgzMXhfYXV4YWRjIGlucHV0KQoreworCXN0cnVjdCB3bTgzMXhfYXV4YWRjX3JlcSAqcmVxOworCWludCByZXQ7CisJYm9vbCBlbmEgPSBmYWxzZTsKKworCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbml0X2NvbXBsZXRpb24oJnJlcS0+ZG9uZSk7CisJcmVxLT5pbnB1dCA9IGlucHV0OworCXJlcS0+dmFsID0gLUVUSU1FRE9VVDsKKworCW11dGV4X2xvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJLyogRW5xdWV1ZSB0aGUgcmVxdWVzdCAqLworCWxpc3RfYWRkKCZyZXEtPmxpc3QsICZ3bTgzMXgtPmF1eGFkY19wZW5kaW5nKTsKKworCWVuYSA9ICF3bTgzMXgtPmF1eGFkY19hY3RpdmU7CisKKwlpZiAoZW5hKSB7CisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfQ09OVFJPTCwKKwkJCQkgICAgICBXTTgzMVhfQVVYX0VOQSwgV004MzFYX0FVWF9FTkEpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIEFVWEFEQzogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogRW5hYmxlIHRoZSBjb252ZXJzaW9uIGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcgKi8KKwlpZiAoISh3bTgzMXgtPmF1eGFkY19hY3RpdmUgJiAoMSA8PCBpbnB1dCkpKSB7CisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfU09VUkNFLAorCQkJCSAgICAgIDEgPDwgaW5wdXQsIDEgPDwgaW5wdXQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIod204MzF4LT5kZXYsCisJCQkJIkZhaWxlZCB0byBzZXQgQVVYQURDIHNvdXJjZTogJWRcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXdtODMxeC0+YXV4YWRjX2FjdGl2ZSB8PSAxIDw8IGlucHV0OworCX0KKworCS8qIFdlIGNvbnZlcnQgYXQgdGhlIGZhc3Rlc3QgcmF0ZSBwb3NzaWJsZSAqLworCWlmIChlbmEpIHsKKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MLAorCQkJCSAgICAgIFdNODMxWF9BVVhfQ1ZUX0VOQSB8CisJCQkJICAgICAgV004MzFYX0FVWF9SQVRFX01BU0ssCisJCQkJICAgICAgV004MzFYX0FVWF9DVlRfRU5BIHwKKwkJCQkgICAgICBXTTgzMVhfQVVYX1JBVEVfTUFTSyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBzdGFydCBBVVhBREM6ICVkXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmd204MzF4LT5hdXhhZGNfbG9jayk7CisKKwkvKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnJlcS0+ZG9uZSwgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKworCW11dGV4X2xvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJcmV0ID0gcmVxLT52YWw7CisKK291dDoKKwltdXRleF91bmxvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJa2ZyZWUocmVxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfYXV4YWRjX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBpcnFfZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2F1eGFkY19yZXEgKnJlcTsKKwlpbnQgcmV0LCBpbnB1dCwgdmFsOworCisJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19EQVRBKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWFkIEFVWEFEQyBkYXRhOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlucHV0ID0gKChyZXQgJiBXTTgzMVhfQVVYX0RBVEFfU1JDX01BU0spCisJCSA+PiBXTTgzMVhfQVVYX0RBVEFfU1JDX1NISUZUKSAtIDE7CisKKwlpZiAoaW5wdXQgPT0gMTQpCisJCWlucHV0ID0gV004MzFYX0FVWF9DQUw7CisKKwl2YWwgPSByZXQgJiBXTTgzMVhfQVVYX0RBVEFfTUFTSzsKKworCW11dGV4X2xvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJLyogRGlzYWJsZSB0aGlzIGNvbnZlcnNpb24sIHdlJ3JlIGFib3V0IHRvIGNvbXBsZXRlIGFsbCB1c2VycyAqLworCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfU09VUkNFLAorCQkJMSA8PCBpbnB1dCwgMCk7CisJd204MzF4LT5hdXhhZGNfYWN0aXZlICY9IH4oMSA8PCBpbnB1dCk7CisKKwkvKiBUdXJuIG9mZiB0aGUgZW50aXJlIGNvbnZlcnRvciBpZiBpZGxlICovCisJaWYgKCF3bTgzMXgtPmF1eGFkY19hY3RpdmUpCisJCXdtODMxeF9yZWdfd3JpdGUod204MzF4LCBXTTgzMVhfQVVYQURDX0NPTlRST0wsIDApOworCisJLyogV2FrZSB1cCBhbnkgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGlzIHJlcXVlc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJndtODMxeC0+YXV4YWRjX3BlbmRpbmcsIGxpc3QpIHsKKwkJaWYgKHJlcS0+aW5wdXQgPT0gaW5wdXQpIHsKKwkJCXJlcS0+dmFsID0gdmFsOworCQkJY29tcGxldGUoJnJlcS0+ZG9uZSk7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHdtODMxeF9hdXhhZGNfcmVhZF9wb2xsZWQoc3RydWN0IHdtODMxeCAqd204MzF4LAorCQkJCSAgICAgZW51bSB3bTgzMXhfYXV4YWRjIGlucHV0KQoreworCWludCByZXQsIHNyYywgdGltZW91dDsKKworCW11dGV4X2xvY2soJndtODMxeC0+YXV4YWRjX2xvY2spOworCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MLAorCQkJICAgICAgV004MzFYX0FVWF9FTkEsIFdNODMxWF9BVVhfRU5BKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBBVVhBREM6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXZSBmb3JjZSBhIHNpbmdsZSBzb3VyY2UgYXQgcHJlc2VudCAqLworCXNyYyA9IGlucHV0OworCXJldCA9IHdtODMxeF9yZWdfd3JpdGUod204MzF4LCBXTTgzMVhfQVVYQURDX1NPVVJDRSwKKwkJCSAgICAgICAxIDw8IHNyYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBzZXQgQVVYQURDIHNvdXJjZTogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfQ09OVFJPTCwKKwkJCSAgICAgIFdNODMxWF9BVVhfQ1ZUX0VOQSwgV004MzFYX0FVWF9DVlRfRU5BKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IEFVWEFEQzogJWRcbiIsIHJldCk7CisJCWdvdG8gZGlzYWJsZTsKKwl9CisKKwkvKiBJZiB3ZSdyZSBub3QgdXNpbmcgaW50ZXJydXB0cyB0aGVuIHBvbGwgdGhlCisJICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCXRpbWVvdXQgPSA1OworCXdoaWxlICh0aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKworCQlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LAorCQkJCSAgICAgIFdNODMxWF9JTlRFUlJVUFRfU1RBVFVTXzEpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2Vycih3bTgzMXgtPmRldiwKKwkJCQkiSVNSIDEgcmVhZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJZ290byBkaXNhYmxlOworCQl9CisKKwkJLyogRGlkIGl0IGNvbXBsZXRlPyAqLworCQlpZiAocmV0ICYgV004MzFYX0FVWEFEQ19EQVRBX0VJTlQpIHsKKwkJCXdtODMxeF9yZWdfd3JpdGUod204MzF4LAorCQkJCQkgV004MzFYX0lOVEVSUlVQVF9TVEFUVVNfMSwKKwkJCQkJIFdNODMxWF9BVVhBRENfREFUQV9FSU5UKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJZGV2X2Vycih3bTgzMXgtPmRldiwKKwkJCQkiQVVYQURDIGNvbnZlcnNpb24gdGltZW91dFxuIik7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGRpc2FibGU7CisJCX0KKwl9CisKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBXTTgzMVhfQVVYQURDX0RBVEEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204MzF4LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlYWQgQVVYQURDIGRhdGE6ICVkXG4iLCByZXQpOworCQlnb3RvIGRpc2FibGU7CisJfQorCisJc3JjID0gKChyZXQgJiBXTTgzMVhfQVVYX0RBVEFfU1JDX01BU0spCisJICAgICAgID4+IFdNODMxWF9BVVhfREFUQV9TUkNfU0hJRlQpIC0gMTsKKworCWlmIChzcmMgPT0gMTQpCisJCXNyYyA9IFdNODMxWF9BVVhfQ0FMOworCisJaWYgKHNyYyAhPSBpbnB1dCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRGF0YSBmcm9tIHNvdXJjZSAlZCBub3QgJWRcbiIsCisJCQlzcmMsIGlucHV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXQgJj0gV004MzFYX0FVWF9EQVRBX01BU0s7CisJfQorCitkaXNhYmxlOgorCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfQ09OVFJPTCwgV004MzFYX0FVWF9FTkEsIDApOworb3V0OgorCW11dGV4X3VubG9jaygmd204MzF4LT5hdXhhZGNfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB3bTgzMXhfYXV4YWRjX3JlYWQ6IFJlYWQgYSB2YWx1ZSBmcm9tIHRoZSBXTTgzMXggQVVYQURDCisgKgorICogQHdtODMxeDogRGV2aWNlIHRvIHJlYWQgZnJvbS4KKyAqIEBpbnB1dDogQVVYQURDIGlucHV0IHRvIHJlYWQuCisgKi8KK2ludCB3bTgzMXhfYXV4YWRjX3JlYWQoc3RydWN0IHdtODMxeCAqd204MzF4LCBlbnVtIHdtODMxeF9hdXhhZGMgaW5wdXQpCit7CisJcmV0dXJuIHdtODMxeC0+YXV4YWRjX3JlYWQod204MzF4LCBpbnB1dCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfYXV4YWRjX3JlYWQpOworCisvKioKKyAqIHdtODMxeF9hdXhhZGNfcmVhZF91djogUmVhZCBhIHZvbHRhZ2UgZnJvbSB0aGUgV004MzF4IEFVWEFEQworICoKKyAqIEB3bTgzMXg6IERldmljZSB0byByZWFkIGZyb20uCisgKiBAaW5wdXQ6IEFVWEFEQyBpbnB1dCB0byByZWFkLgorICovCitpbnQgd204MzF4X2F1eGFkY19yZWFkX3V2KHN0cnVjdCB3bTgzMXggKndtODMxeCwgZW51bSB3bTgzMXhfYXV4YWRjIGlucHV0KQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzMXhfYXV4YWRjX3JlYWQod204MzF4LCBpbnB1dCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgKj0gMTQ2NTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzMXhfYXV4YWRjX3JlYWRfdXYpOworCit2b2lkIHdtODMxeF9hdXhhZGNfaW5pdChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgpCit7CisJaW50IHJldDsKKworCW11dGV4X2luaXQoJndtODMxeC0+YXV4YWRjX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZ3bTgzMXgtPmF1eGFkY19wZW5kaW5nKTsKKworCWlmICh3bTgzMXgtPmlycSAmJiB3bTgzMXgtPmlycV9iYXNlKSB7CisJCXdtODMxeC0+YXV4YWRjX3JlYWQgPSB3bTgzMXhfYXV4YWRjX3JlYWRfaXJxOworCisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeC0+aXJxX2Jhc2UgKworCQkJCQkgICBXTTgzMVhfSVJRX0FVWEFEQ19EQVRBLAorCQkJCQkgICBOVUxMLCB3bTgzMXhfYXV4YWRjX2lycSwgMCwKKwkJCQkJICAgImF1eGFkYyIsIHdtODMxeCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiQVVYQURDIElSUSByZXF1ZXN0IGZhaWxlZDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCXdtODMxeC0+YXV4YWRjX3JlYWQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKCF3bTgzMXgtPmF1eGFkY19yZWFkKQorCQl3bTgzMXgtPmF1eGFkY19yZWFkID0gd204MzF4X2F1eGFkY19yZWFkX3BvbGxlZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jCmluZGV4IDI2NWY3NWYuLjI4MmU3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJCWdvdG8gb3V0OwogCiAJciAmPSB+bWFzazsKLQlyIHw9IHZhbDsKKwlyIHw9IHZhbCAmIG1hc2s7CiAKIAlyZXQgPSB3bTgzMXhfd3JpdGUod204MzF4LCByZWcsIDIsICZyKTsKIApAQCAtMzA2LDE0NiArMzA2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdtODMxeF9zZXRfYml0cyk7CiAKLS8qKgotICogd204MzF4X2F1eGFkY19yZWFkOiBSZWFkIGEgdmFsdWUgZnJvbSB0aGUgV004MzF4IEFVWEFEQwotICoKLSAqIEB3bTgzMXg6IERldmljZSB0byByZWFkIGZyb20uCi0gKiBAaW5wdXQ6IEFVWEFEQyBpbnB1dCB0byByZWFkLgotICovCi1pbnQgd204MzF4X2F1eGFkY19yZWFkKHN0cnVjdCB3bTgzMXggKndtODMxeCwgZW51bSB3bTgzMXhfYXV4YWRjIGlucHV0KQotewotCWludCByZXQsIHNyYywgaXJxX21hc2tlZCwgdGltZW91dDsKLQotCS8qIEFyZSB3ZSB1c2luZyB0aGUgaW50ZXJydXB0PyAqLwotCWlycV9tYXNrZWQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xX01BU0spOwotCWlycV9tYXNrZWQgJj0gV004MzFYX0FVWEFEQ19EQVRBX0VJTlQ7Ci0KLQltdXRleF9sb2NrKCZ3bTgzMXgtPmF1eGFkY19sb2NrKTsKLQotCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfQ09OVFJPTCwKLQkJCSAgICAgIFdNODMxWF9BVVhfRU5BLCBXTTgzMVhfQVVYX0VOQSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgQVVYQURDOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogV2UgZm9yY2UgYSBzaW5nbGUgc291cmNlIGF0IHByZXNlbnQgKi8KLQlzcmMgPSBpbnB1dDsKLQlyZXQgPSB3bTgzMXhfcmVnX3dyaXRlKHdtODMxeCwgV004MzFYX0FVWEFEQ19TT1VSQ0UsCi0JCQkgICAgICAgMSA8PCBzcmMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gc2V0IEFVWEFEQyBzb3VyY2U6ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBDbGVhciBhbnkgbm90aWZpY2F0aW9uIGZyb20gYSB2ZXJ5IGxhdGUgYXJyaXZpbmcgaW50ZXJydXB0ICovCi0JdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJndtODMxeC0+YXV4YWRjX2RvbmUpOwotCi0JcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MLAotCQkJICAgICAgV004MzFYX0FVWF9DVlRfRU5BLCBXTTgzMVhfQVVYX0NWVF9FTkEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gc3RhcnQgQVVYQURDOiAlZFxuIiwgcmV0KTsKLQkJZ290byBkaXNhYmxlOwotCX0KLQotCWlmIChpcnFfbWFza2VkKSB7Ci0JCS8qIElmIHdlJ3JlIG5vdCB1c2luZyBpbnRlcnJ1cHRzIHRoZW4gcG9sbCB0aGUKLQkJICogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotCQl0aW1lb3V0ID0gNTsKLQkJd2hpbGUgKHRpbWVvdXQpIHsKLQkJCW1zbGVlcCgxKTsKLQotCQkJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwKLQkJCQkJICAgICAgV004MzFYX0lOVEVSUlVQVF9TVEFUVVNfMSk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCWRldl9lcnIod204MzF4LT5kZXYsCi0JCQkJCSJJU1IgMSByZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCQkJZ290byBkaXNhYmxlOwotCQkJfQotCi0JCQkvKiBEaWQgaXQgY29tcGxldGU/ICovCi0JCQlpZiAocmV0ICYgV004MzFYX0FVWEFEQ19EQVRBX0VJTlQpIHsKLQkJCQl3bTgzMXhfcmVnX3dyaXRlKHdtODMxeCwKLQkJCQkJCSBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xLAotCQkJCQkJIFdNODMxWF9BVVhBRENfREFUQV9FSU5UKTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2X2Vycih3bTgzMXgtPmRldiwKLQkJCQkJIkFVWEFEQyBjb252ZXJzaW9uIHRpbWVvdXRcbiIpOwotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIGRpc2FibGU7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJZiB3ZSBhcmUgdXNpbmcgaW50ZXJydXB0cyB0aGVuIHdhaXQgZm9yIHRoZQotCQkgKiBpbnRlcnJ1cHQgdG8gY29tcGxldGUuICBVc2UgYW4gZXh0cmVtZWx5IGxvbmcKLQkJICogdGltZW91dCB0byBoYW5kbGUgc2l0dWF0aW9ucyB3aXRoIGhlYXZ5IGxvYWQgd2hlcmUKLQkJICogdGhlIG5vdGlmaWNhdGlvbiBvZiB0aGUgaW50ZXJydXB0IG1heSBiZSBkZWxheWVkIGJ5Ci0JCSAqIHRocmVhZGVkIElSUSBoYW5kbGluZy4gKi8KLQkJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndtODMxeC0+YXV4YWRjX2RvbmUsCi0JCQkJCQkgbXNlY3NfdG9famlmZmllcyg1MDApKSkgewotCQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBBVVhBRENcbiIpOwotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBkaXNhYmxlOwotCQl9Ci0JfQotCi0JcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19EQVRBKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQVVYQURDIGRhdGE6ICVkXG4iLCByZXQpOwotCX0gZWxzZSB7Ci0JCXNyYyA9ICgocmV0ICYgV004MzFYX0FVWF9EQVRBX1NSQ19NQVNLKQotCQkgICAgICAgPj4gV004MzFYX0FVWF9EQVRBX1NSQ19TSElGVCkgLSAxOwotCi0JCWlmIChzcmMgPT0gMTQpCi0JCQlzcmMgPSBXTTgzMVhfQVVYX0NBTDsKLQotCQlpZiAoc3JjICE9IGlucHV0KSB7Ci0JCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRGF0YSBmcm9tIHNvdXJjZSAlZCBub3QgJWRcbiIsCi0JCQkJc3JjLCBpbnB1dCk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQl9IGVsc2UgewotCQkJcmV0ICY9IFdNODMxWF9BVVhfREFUQV9NQVNLOwotCQl9Ci0JfQotCi1kaXNhYmxlOgotCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9BVVhBRENfQ09OVFJPTCwgV004MzFYX0FVWF9FTkEsIDApOwotb3V0OgotCW11dGV4X3VubG9jaygmd204MzF4LT5hdXhhZGNfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODMxeF9hdXhhZGNfcmVhZCk7Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfYXV4YWRjX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKLXsKLQlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBpcnFfZGF0YTsKLQotCWNvbXBsZXRlKCZ3bTgzMXgtPmF1eGFkY19kb25lKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoqCi0gKiB3bTgzMXhfYXV4YWRjX3JlYWRfdXY6IFJlYWQgYSB2b2x0YWdlIGZyb20gdGhlIFdNODMxeCBBVVhBREMKLSAqCi0gKiBAd204MzF4OiBEZXZpY2UgdG8gcmVhZCBmcm9tLgotICogQGlucHV0OiBBVVhBREMgaW5wdXQgdG8gcmVhZC4KLSAqLwotaW50IHdtODMxeF9hdXhhZGNfcmVhZF91dihzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGVudW0gd204MzF4X2F1eGFkYyBpbnB1dCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd204MzF4X2F1eGFkY19yZWFkKHdtODMxeCwgaW5wdXQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ICo9IDE0NjU7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwod204MzF4X2F1eGFkY19yZWFkX3V2KTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3bTgzMXhfZGNkYzFfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSBXTTgzMVhfREMxX0NPTlRST0xfMSwKQEAgLTg3Miw2ICs3MzIsOSBAQAogCQkucmVzb3VyY2VzID0gd204MzF4X2RjZGM0X3Jlc291cmNlcywKIAl9LAogCXsKKwkJLm5hbWUgPSAid204MzF4LWNsayIsCisJfSwKKwl7CiAJCS5uYW1lID0gIndtODMxeC1lcGUiLAogCQkuaWQgPSAxLAogCX0sCkBAIC05NzYsMTEgKzgzOSw2IEBACiAJCS5yZXNvdXJjZXMgPSB3bTgzMXhfcG93ZXJfcmVzb3VyY2VzLAogCX0sCiAJewotCQkubmFtZSA9ICJ3bTgzMXgtcnRjIiwKLQkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9ydGNfcmVzb3VyY2VzKSwKLQkJLnJlc291cmNlcyA9IHdtODMxeF9ydGNfcmVzb3VyY2VzLAotCX0sCi0JewogCQkubmFtZSA9ICJ3bTgzMXgtc3RhdHVzIiwKIAkJLmlkID0gMSwKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9zdGF0dXMxX3Jlc291cmNlcyksCkBAIC0xMDI4LDYgKzg4Niw5IEBACiAJCS5yZXNvdXJjZXMgPSB3bTgzMXhfZGNkYzRfcmVzb3VyY2VzLAogCX0sCiAJeworCQkubmFtZSA9ICJ3bTgzMXgtY2xrIiwKKwl9LAorCXsKIAkJLm5hbWUgPSAid204MzF4LWVwZSIsCiAJCS5pZCA9IDEsCiAJfSwKQEAgLTExMDgsMTEgKzk2OSw2IEBACiAJCS5yZXNvdXJjZXMgPSB3bTgzMXhfcG93ZXJfcmVzb3VyY2VzLAogCX0sCiAJewotCQkubmFtZSA9ICJ3bTgzMXgtcnRjIiwKLQkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9ydGNfcmVzb3VyY2VzKSwKLQkJLnJlc291cmNlcyA9IHdtODMxeF9ydGNfcmVzb3VyY2VzLAotCX0sCi0JewogCQkubmFtZSA9ICJ3bTgzMXgtc3RhdHVzIiwKIAkJLmlkID0gMSwKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9zdGF0dXMxX3Jlc291cmNlcyksCkBAIC0xMTI1LDExICs5ODEsNiBAQAogCQkucmVzb3VyY2VzID0gd204MzF4X3N0YXR1czJfcmVzb3VyY2VzLAogCX0sCiAJewotCQkubmFtZSA9ICJ3bTgzMXgtdG91Y2giLAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3RvdWNoX3Jlc291cmNlcyksCi0JCS5yZXNvdXJjZXMgPSB3bTgzMXhfdG91Y2hfcmVzb3VyY2VzLAotCX0sCi0JewogCQkubmFtZSA9ICJ3bTgzMXgtd2F0Y2hkb2ciLAogCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3dkdF9yZXNvdXJjZXMpLAogCQkucmVzb3VyY2VzID0gd204MzF4X3dkdF9yZXNvdXJjZXMsCkBAIC0xMTY1LDYgKzEwMTYsOSBAQAogCQkucmVzb3VyY2VzID0gd204MzF4X2RjZGM0X3Jlc291cmNlcywKIAl9LAogCXsKKwkJLm5hbWUgPSAid204MzF4LWNsayIsCisJfSwKKwl7CiAJCS5uYW1lID0gIndtODMxeC1lcGUiLAogCQkuaWQgPSAxLAogCX0sCkBAIC0xMjY5LDExICsxMTIzLDYgQEAKIAkJLnJlc291cmNlcyA9IHdtODMxeF9wb3dlcl9yZXNvdXJjZXMsCiAJfSwKIAl7Ci0JCS5uYW1lID0gIndtODMxeC1ydGMiLAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3J0Y19yZXNvdXJjZXMpLAotCQkucmVzb3VyY2VzID0gd204MzF4X3J0Y19yZXNvdXJjZXMsCi0JfSwKLQl7CiAJCS5uYW1lID0gIndtODMxeC1zdGF0dXMiLAogCQkuaWQgPSAxLAogCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3N0YXR1czFfcmVzb3VyY2VzKSwKQEAgLTEyODYsMTEgKzExMzUsNiBAQAogCQkucmVzb3VyY2VzID0gd204MzF4X3N0YXR1czJfcmVzb3VyY2VzLAogCX0sCiAJewotCQkubmFtZSA9ICJ3bTgzMXgtdG91Y2giLAotCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3RvdWNoX3Jlc291cmNlcyksCi0JCS5yZXNvdXJjZXMgPSB3bTgzMXhfdG91Y2hfcmVzb3VyY2VzLAotCX0sCi0JewogCQkubmFtZSA9ICJ3bTgzMXgtd2F0Y2hkb2ciLAogCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X3dkdF9yZXNvdXJjZXMpLAogCQkucmVzb3VyY2VzID0gd204MzF4X3dkdF9yZXNvdXJjZXMsCkBAIC0xMzI2LDYgKzExNzAsOSBAQAogCQkucmVzb3VyY2VzID0gd204MzIwX2RjZGM0X2J1Y2tfcmVzb3VyY2VzLAogCX0sCiAJeworCQkubmFtZSA9ICJ3bTgzMXgtY2xrIiwKKwl9LAorCXsKIAkJLm5hbWUgPSAid204MzF4LWdwaW8iLAogCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUod204MzF4X2dwaW9fcmVzb3VyY2VzKSwKIAkJLnJlc291cmNlcyA9IHdtODMxeF9ncGlvX3Jlc291cmNlcywKQEAgLTE0MDUsMTEgKzEyNTIsNiBAQAogCQkucmVzb3VyY2VzID0gd204MzF4X29uX3Jlc291cmNlcywKIAl9LAogCXsKLQkJLm5hbWUgPSAid204MzF4LXJ0YyIsCi0JCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfcnRjX3Jlc291cmNlcyksCi0JCS5yZXNvdXJjZXMgPSB3bTgzMXhfcnRjX3Jlc291cmNlcywKLQl9LAotCXsKIAkJLm5hbWUgPSAid204MzF4LXN0YXR1cyIsCiAJCS5pZCA9IDEsCiAJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfc3RhdHVzMV9yZXNvdXJjZXMpLApAQCAtMTQyOCw2ICsxMjcwLDIyIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgdG91Y2hfZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAid204MzF4LXRvdWNoIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdtODMxeF90b3VjaF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gd204MzF4X3RvdWNoX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBydGNfZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAid204MzF4LXJ0YyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh3bTgzMXhfcnRjX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB3bTgzMXhfcnRjX3Jlc291cmNlcywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBiYWNrbGlnaHRfZGV2c1tdID0gewogCXsKIAkJLm5hbWUgPSAid204MzF4LWJhY2tsaWdodCIsCkBAIC0xNDQwLDE0ICsxMjk4LDEyIEBACiBpbnQgd204MzF4X2RldmljZV9pbml0KHN0cnVjdCB3bTgzMXggKndtODMxeCwgdW5zaWduZWQgbG9uZyBpZCwgaW50IGlycSkKIHsKIAlzdHJ1Y3Qgd204MzF4X3BkYXRhICpwZGF0YSA9IHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWludCByZXY7CisJaW50IHJldiwgd204MzF4X251bTsKIAllbnVtIHdtODMxeF9wYXJlbnQgcGFyZW50OwogCWludCByZXQsIGk7CiAKIAltdXRleF9pbml0KCZ3bTgzMXgtPmlvX2xvY2spOwogCW11dGV4X2luaXQoJndtODMxeC0+a2V5X2xvY2spOwotCW11dGV4X2luaXQoJndtODMxeC0+YXV4YWRjX2xvY2spOwotCWluaXRfY29tcGxldGlvbigmd204MzF4LT5hdXhhZGNfZG9uZSk7CiAJZGV2X3NldF9kcnZkYXRhKHdtODMxeC0+ZGV2LCB3bTgzMXgpOwogCiAJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX1BBUkVOVF9JRCk7CkBAIC0xNTkyLDQ1ICsxNDQ4LDUxIEBACiAJCX0KIAl9CiAKKwkvKiBNdWx0aXBseSBieSAxMCBhcyB3ZSBoYXZlIG1hbnkgc3ViZGV2aWNlcyBvZiB0aGUgc2FtZSB0eXBlICovCisJaWYgKHBkYXRhICYmIHBkYXRhLT53bTgzMXhfbnVtKQorCQl3bTgzMXhfbnVtID0gcGRhdGEtPndtODMxeF9udW0gKiAxMDsKKwllbHNlCisJCXdtODMxeF9udW0gPSAtMTsKKwogCXJldCA9IHdtODMxeF9pcnFfaW5pdCh3bTgzMXgsIGlycSk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGVycjsKIAotCWlmICh3bTgzMXgtPmlycV9iYXNlKSB7Ci0JCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeC0+aXJxX2Jhc2UgKwotCQkJCQkgICBXTTgzMVhfSVJRX0FVWEFEQ19EQVRBLAotCQkJCQkgICBOVUxMLCB3bTgzMXhfYXV4YWRjX2lycSwgMCwKLQkJCQkJICAgImF1eGFkYyIsIHdtODMxeCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkFVWEFEQyBJUlEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLAotCQkJCXJldCk7Ci0JfQorCXdtODMxeF9hdXhhZGNfaW5pdCh3bTgzMXgpOwogCiAJLyogVGhlIGNvcmUgZGV2aWNlIGlzIHVwLCBpbnN0YW50aWF0ZSB0aGUgc3ViZGV2aWNlcy4gKi8KIAlzd2l0Y2ggKHBhcmVudCkgewogCWNhc2UgV004MzEwOgotCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIC0xLAorCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIHdtODMxeF9udW0sCiAJCQkJICAgICAgd204MzEwX2RldnMsIEFSUkFZX1NJWkUod204MzEwX2RldnMpLAogCQkJCSAgICAgIE5VTEwsIHdtODMxeC0+aXJxX2Jhc2UpOwogCQlicmVhazsKIAogCWNhc2UgV004MzExOgotCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIC0xLAorCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIHdtODMxeF9udW0sCiAJCQkJICAgICAgd204MzExX2RldnMsIEFSUkFZX1NJWkUod204MzExX2RldnMpLAogCQkJCSAgICAgIE5VTEwsIHdtODMxeC0+aXJxX2Jhc2UpOworCQlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+ZGlzYWJsZV90b3VjaCkKKwkJCW1mZF9hZGRfZGV2aWNlcyh3bTgzMXgtPmRldiwgd204MzF4X251bSwKKwkJCQkJdG91Y2hfZGV2cywgQVJSQVlfU0laRSh0b3VjaF9kZXZzKSwKKwkJCQkJTlVMTCwgd204MzF4LT5pcnFfYmFzZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTgzMTI6Ci0JCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh3bTgzMXgtPmRldiwgLTEsCisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh3bTgzMXgtPmRldiwgd204MzF4X251bSwKIAkJCQkgICAgICB3bTgzMTJfZGV2cywgQVJSQVlfU0laRSh3bTgzMTJfZGV2cyksCiAJCQkJICAgICAgTlVMTCwgd204MzF4LT5pcnFfYmFzZSk7CisJCWlmICghcGRhdGEgfHwgIXBkYXRhLT5kaXNhYmxlX3RvdWNoKQorCQkJbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCB3bTgzMXhfbnVtLAorCQkJCQl0b3VjaF9kZXZzLCBBUlJBWV9TSVpFKHRvdWNoX2RldnMpLAorCQkJCQlOVUxMLCB3bTgzMXgtPmlycV9iYXNlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODMyMDoKIAljYXNlIFdNODMyMToKIAljYXNlIFdNODMyNToKIAljYXNlIFdNODMyNjoKLQkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCAtMSwKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCB3bTgzMXhfbnVtLAogCQkJCSAgICAgIHdtODMyMF9kZXZzLCBBUlJBWV9TSVpFKHdtODMyMF9kZXZzKSwKIAkJCQkgICAgICBOVUxMLCB3bTgzMXgtPmlycV9iYXNlKTsKIAkJYnJlYWs7CkBAIC0xNjQ1LDkgKzE1MDcsMzAgQEAKIAkJZ290byBlcnJfaXJxOwogCX0KIAorCS8qIFRoZSBSVEMgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgMzIuNzY4a0h6IGNyeXN0YWwgaXMKKwkgKiBlbmFibGVkOyB0aGlzIGNhbid0IGJlIGNvbnRyb2xsZWQgYnkgc29mdHdhcmUgYXQgcnVudGltZS4KKwkgKi8KKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBXTTgzMVhfQ0xPQ0tfQ09OVFJPTF8yKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2sgc3RhdHVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWlmIChyZXQgJiBXTTgzMVhfWFRBTF9FTkEpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCB3bTgzMXhfbnVtLAorCQkJCSAgICAgIHJ0Y19kZXZzLCBBUlJBWV9TSVpFKHJ0Y19kZXZzKSwKKwkJCQkgICAgICBOVUxMLCB3bTgzMXgtPmlycV9iYXNlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBSVEM6ICVkXG4iLCByZXQpOworCQkJZ290byBlcnJfaXJxOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2luZm8od204MzF4LT5kZXYsICIzMi43NjhrSHogY2xvY2sgZGlzYWJsZWQsIG5vIFJUQ1xuIik7CisJfQorCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5iYWNrbGlnaHQpIHsKIAkJLyogVHJlYXQgZXJyb3JzIGFzIG5vbi1jcml0aWNhbCAqLwotCQlyZXQgPSBtZmRfYWRkX2RldmljZXMod204MzF4LT5kZXYsIC0xLCBiYWNrbGlnaHRfZGV2cywKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHdtODMxeC0+ZGV2LCB3bTgzMXhfbnVtLCBiYWNrbGlnaHRfZGV2cywKIAkJCQkgICAgICBBUlJBWV9TSVpFKGJhY2tsaWdodF9kZXZzKSwgTlVMTCwKIAkJCQkgICAgICB3bTgzMXgtPmlycV9iYXNlKTsKIAkJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKaW5kZXggNDJiOTI4ZS4uYWRhMTgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwpAQCAtMzQ4LDYgKzM0OCwxNSBAQAogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOwogCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204MzF4LT5ncGlvX3VwZGF0ZSk7IGkrKykgeworCQlpZiAod204MzF4LT5ncGlvX3VwZGF0ZVtpXSkgeworCQkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0dQSU8xX0NPTlRST0wgKyBpLAorCQkJCQlXTTgzMVhfR1BOX0lOVF9NT0RFIHwgV004MzFYX0dQTl9QT0wsCisJCQkJCXdtODMxeC0+Z3Bpb191cGRhdGVbaV0pOworCQkJd204MzF4LT5ncGlvX3VwZGF0ZVtpXSA9IDA7CisJCX0KKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzMXgtPmlycV9tYXNrc19jdXIpOyBpKyspIHsKIAkJLyogSWYgdGhlcmUncyBiZWVuIGEgY2hhbmdlIGluIHRoZSBtYXNrIHdyaXRlIGl0IGJhY2sKIAkJICogdG8gdGhlIGhhcmR3YXJlLiAqLwpAQCAtMzg3LDcgKzM5Niw3IEBACiBzdGF0aWMgaW50IHdtODMxeF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKLQlpbnQgdmFsLCBpcnE7CisJaW50IGlycTsKIAogCWlycSA9IGRhdGEtPmlycSAtIHdtODMxeC0+aXJxX2Jhc2U7CiAKQEAgLTM5OSwyMiArNDA4LDMwIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBSZWJhc2UgdGhlIElSUSBpbnRvIHRoZSBHUElPIHJhbmdlIHNvIHdlJ3ZlIGdvdCBhIHNlbnNpYmxlIGFycmF5CisJICogaW5kZXguCisJICovCisJaXJxIC09IFdNODMxWF9JUlFfR1BJT18xOworCisJLyogV2Ugc2V0IHRoZSBoaWdoIGJpdCB0byBmbGFnIHRoYXQgd2UgbmVlZCBhbiB1cGRhdGU7IGRvbid0CisJICogZG8gdGhlIHVwZGF0ZSBoZXJlIGFzIHdlIGNhbiBiZSBjYWxsZWQgd2l0aCB0aGUgYnVzIGxvY2sKKwkgKiBoZWxkLgorCSAqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgotCQl2YWwgPSBXTTgzMVhfR1BOX0lOVF9NT0RFOworCQl3bTgzMXgtPmdwaW9fdXBkYXRlW2lycV0gPSAweDEwMDAwIHwgV004MzFYX0dQTl9JTlRfTU9ERTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKLQkJdmFsID0gV004MzFYX0dQTl9QT0w7CisJCXdtODMxeC0+Z3Bpb191cGRhdGVbaXJxXSA9IDB4MTAwMDAgfCBXTTgzMVhfR1BOX1BPTDsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Ci0JCXZhbCA9IDA7CisJCXdtODMxeC0+Z3Bpb191cGRhdGVbaXJxXSA9IDB4MTAwMDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfR1BJTzFfQ09OVFJPTCArIGlycSwKLQkJCSAgICAgICBXTTgzMVhfR1BOX0lOVF9NT0RFIHwgV004MzFYX0dQTl9QT0wsIHZhbCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgd204MzF4X2lycV9jaGlwID0gewpAQCAtNDMyLDcgKzQ0OSw3IEBACiB7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcHJpbWFyeTsKKwlpbnQgcHJpbWFyeSwgc3RhdHVzX2FkZHI7CiAJaW50IHN0YXR1c19yZWdzW1dNODMxWF9OVU1fSVJRX1JFR1NdID0geyAwIH07CiAJaW50IHJlYWRbV004MzFYX05VTV9JUlFfUkVHU10gPSB7IDAgfTsKIAlpbnQgKnN0YXR1czsKQEAgLTQ2Nyw4ICs0ODQsOSBAQAogCQkvKiBIb3BlZnVsbHkgdGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIHJlZ2lzdGVyIHRvIHJlYWQKIAkJICogZWFjaCB0aW1lIG90aGVyd2lzZSB3ZSBvdWdodCB0byBkbyBhIGJsb2NrIHJlYWQuICovCiAJCWlmICghcmVhZFtvZmZzZXRdKSB7Ci0JCQkqc3RhdHVzID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwKLQkJCQkgICAgIGlycV9kYXRhX3RvX3N0YXR1c19yZWcoJndtODMxeF9pcnFzW2ldKSk7CisJCQlzdGF0dXNfYWRkciA9IGlycV9kYXRhX3RvX3N0YXR1c19yZWcoJndtODMxeF9pcnFzW2ldKTsKKworCQkJKnN0YXR1cyA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIHN0YXR1c19hZGRyKTsKIAkJCWlmICgqc3RhdHVzIDwgMCkgewogCQkJCWRldl9lcnIod204MzF4LT5kZXYsCiAJCQkJCSJGYWlsZWQgdG8gcmVhZCBJUlEgc3RhdHVzOiAlZFxuIiwKQEAgLTQ3NywyNiArNDk1LDIxIEBACiAJCQl9CiAKIAkJCXJlYWRbb2Zmc2V0XSA9IDE7CisKKwkJCS8qIElnbm9yZSBhbnkgYml0cyB0aGF0IHdlIGRvbid0IHRoaW5rIGFyZSBtYXNrZWQgKi8KKwkJCSpzdGF0dXMgJj0gfndtODMxeC0+aXJxX21hc2tzX2N1cltvZmZzZXRdOworCisJCQkvKiBBY2tub3dsZWRnZSBub3cgc28gd2UgZG9uJ3QgbWlzcworCQkJICogbm90aWZpY2F0aW9ucyB3aGlsZSB3ZSBoYW5kbGUuCisJCQkgKi8KKwkJCXdtODMxeF9yZWdfd3JpdGUod204MzF4LCBzdGF0dXNfYWRkciwgKnN0YXR1cyk7CiAJCX0KIAotCQkvKiBSZXBvcnQgaXQgaWYgaXQgaXNuJ3QgbWFza2VkLCBvciBmb3JnZXQgdGhlIHN0YXR1cy4gKi8KLQkJaWYgKCgqc3RhdHVzICYgfndtODMxeC0+aXJxX21hc2tzX2N1cltvZmZzZXRdKQotCQkgICAgJiB3bTgzMXhfaXJxc1tpXS5tYXNrKQorCQlpZiAoKnN0YXR1cyAmIHdtODMxeF9pcnFzW2ldLm1hc2spCiAJCQloYW5kbGVfbmVzdGVkX2lycSh3bTgzMXgtPmlycV9iYXNlICsgaSk7Ci0JCWVsc2UKLQkJCSpzdGF0dXMgJj0gfndtODMxeF9pcnFzW2ldLm1hc2s7CiAJfQogCiBvdXQ6Ci0JLyogVG91Y2hzY3JlZW4gaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgaW4gdGhlIGRyaXZlciAqLwotCXN0YXR1c19yZWdzWzBdICY9IH4oV004MzFYX1RDSERBVEFfRUlOVCB8IFdNODMxWF9UQ0hQRF9FSU5UKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXR1c19yZWdzKTsgaSsrKSB7Ci0JCWlmIChzdGF0dXNfcmVnc1tpXSkKLQkJCXdtODMxeF9yZWdfd3JpdGUod204MzF4LCBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xICsgaSwKLQkJCQkJIHN0YXR1c19yZWdzW2ldKTsKLQl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTUxNSwxMyArNTI4LDIyIEBACiAJCQkJIDB4ZmZmZik7CiAJfQogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmlycV9iYXNlKSB7Ci0JCWRldl9lcnIod204MzF4LT5kZXYsCi0JCQkiTm8gaW50ZXJydXB0IGJhc2Ugc3BlY2lmaWVkLCBubyBpbnRlcnJ1cHRzXG4iKTsKKwkvKiBUcnkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgSVJRcyBpZiBubyBiYXNlIGlzIHNwZWNpZmllZCAqLworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5pcnFfYmFzZSkKKwkJd204MzF4LT5pcnFfYmFzZSA9IC0xOworCWVsc2UKKwkJd204MzF4LT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKKworCXdtODMxeC0+aXJxX2Jhc2UgPSBpcnFfYWxsb2NfZGVzY3Mod204MzF4LT5pcnFfYmFzZSwgMCwKKwkJCQkJICAgV004MzFYX05VTV9JUlFTLCAwKTsKKwlpZiAod204MzF4LT5pcnFfYmFzZSA8IDApIHsKKwkJZGV2X3dhcm4od204MzF4LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgSVJRczogJWRcbiIsCisJCQkgd204MzF4LT5pcnFfYmFzZSk7CisJCXdtODMxeC0+aXJxX2Jhc2UgPSAwOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAocGRhdGEtPmlycV9jbW9zKQorCWlmIChwZGF0YSAmJiBwZGF0YS0+aXJxX2Ntb3MpCiAJCWkgPSAwOwogCWVsc2UKIAkJaSA9IFdNODMxWF9JUlFfT0Q7CkBAIC01NDEsNyArNTYzLDYgQEAKIAl9CiAKIAl3bTgzMXgtPmlycSA9IGlycTsKLQl3bTgzMXgtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwogCiAJLyogUmVnaXN0ZXIgdGhlbSB3aXRoIGdlbmlycSAqLwogCWZvciAoY3VyX2lycSA9IHdtODMxeC0+aXJxX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtaXJxLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtaXJxLmMKaW5kZXggZWQ0YjIyYS4uOGExZmFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1pcnEuYwpAQCAtNDczLDE3ICs0NzMsMTMgQEAKIHsKIAlpbnQgcmV0LCBjdXJfaXJxLCBpOwogCWludCBmbGFncyA9IElSUUZfT05FU0hPVDsKKwlpbnQgaXJxX2Jhc2UgPSAtMTsKIAogCWlmICghaXJxKSB7CiAJCWRldl93YXJuKHdtODM1MC0+ZGV2LCAiTm8gaW50ZXJydXB0IHN1cHBvcnQsIG5vIGNvcmUgSVJRXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmlycV9iYXNlKSB7Ci0JCWRldl93YXJuKHdtODM1MC0+ZGV2LCAiTm8gaW50ZXJydXB0IHN1cHBvcnQsIG5vIElSUSBiYXNlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJLyogTWFzayB0b3AgbGV2ZWwgaW50ZXJydXB0cyAqLwogCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSywgMHhGRkZGKTsKIApAQCAtNTAyLDcgKzQ5OCwxNyBAQAogCXdtODM1MC0+Y2hpcF9pcnEgPSBpcnE7CiAJd204MzUwLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAotCWlmIChwZGF0YS0+aXJxX2hpZ2gpIHsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmlycV9iYXNlID4gMCkKKwkJaXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisKKwl3bTgzNTAtPmlycV9iYXNlID0gaXJxX2FsbG9jX2Rlc2NzKGlycV9iYXNlLCAwLCBBUlJBWV9TSVpFKHdtODM1MF9pcnFzKSwgMCk7CisJaWYgKHdtODM1MC0+aXJxX2Jhc2UgPCAwKSB7CisJCWRldl93YXJuKHdtODM1MC0+ZGV2LCAiQWxsb2NhdGluZyBpcnFzIGZhaWxlZCB3aXRoICVkXG4iLAorCQkJd204MzUwLT5pcnFfYmFzZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+aXJxX2hpZ2gpIHsKIAkJZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0hJR0g7CiAKIAkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jIGIvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYwppbmRleCBlMTk4ZDQwLi45NjQ3OWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKQEAgLTMxNiw3ICszMTYsNyBAQAogc3RhdGljIGludCB3bTg5OTRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAkvKiBXZSBtYXkgaGF2ZSBsaWVkIHRvIHRoZSBQTSBjb3JlIGFib3V0IHN1c3BlbmRpbmcgKi8KIAlpZiAoIXdtODk5NC0+c3VzcGVuZGVkKQpAQCAtMzI5LDEwICszMjksMTYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSB3bTg5OTRfd3JpdGUod204OTk0LCBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18xX01BU0ssCi0JCQkgICBXTTg5OTRfTlVNX0lSUV9SRUdTICogMiwgJndtODk5NC0+aXJxX21hc2tzX2N1cik7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc3RvcmUgaW50ZXJydXB0IG1hc2tzOiAlZFxuIiwgcmV0KTsKKwkvKiBXcml0ZSByZWdpc3RlciBhdCBhIHRpbWUgYXMgd2UgdXNlIHRoZSBjYWNoZSBvbiB0aGUgQ1BVIHNvIHN0b3JlCisJICogaXQgaW4gbmF0aXZlIGVuZGlhbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPmlycV9tYXNrc19jdXIpOyBpKyspIHsKKwkJcmV0ID0gd204OTk0X3JlZ193cml0ZSh3bTg5OTQsIFdNODk5NF9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTSworCQkJCSAgICAgICArIGksIHdtODk5NC0+aXJxX21hc2tzX2N1cltpXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVzdG9yZSBpbnRlcnJ1cHQgbWFza3M6ICVkXG4iLAorCQkJCXJldCk7CisJfQogCiAJcmV0ID0gd204OTk0X3dyaXRlKHdtODk5NCwgV004OTk0X0xET18xLCBXTTg5OTRfTlVNX0xET19SRUdTICogMiwKIAkJCSAgICZ3bTg5OTQtPmxkb19yZWdzKTsKQEAgLTQwMyw3ICs0MDksNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyOwogCX0KIAogCXdtODk5NC0+c3VwcGxpZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSkgKgpAQCAtNDI1LDcgKzQzMSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCQkKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQod204OTk0LT5kZXYsIHdtODk5NC0+bnVtX3N1cHBsaWVzLApAQCAtNDc2LDEzICs0ODIsMTggQEAKIAkJZ290byBlcnJfZW5hYmxlOwogCX0KIAotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQkJaWYgKHdtODk5NC0+dHlwZSA9PSBXTTg5OTQpCisJc3dpdGNoICh3bTg5OTQtPnR5cGUpIHsKKwljYXNlIFdNODk5NDoKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CiAJCQlkZXZfd2Fybih3bTg5OTQtPmRldiwKIAkJCQkgInJldmlzaW9uICVjIG5vdCBmdWxseSBzdXBwb3J0ZWRcbiIsCiAJCQkJICdBJyArIHJldCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk0LWlycS5jIGIvZHJpdmVycy9tZmQvd204OTk0LWlycS5jCmluZGV4IDcxYzZlOGYuLmQ2ODJmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODk5NC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTg5OTQtaXJxLmMKQEAgLTIzMSwxMiArMjMxLDYgQEAKIAkJc3RhdHVzW2ldICY9IH53bTg5OTQtPmlycV9tYXNrc19jdXJbaV07CiAJfQogCi0JLyogUmVwb3J0ICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0X2lycXMpOyBpKyspIHsKLQkJaWYgKHN0YXR1c1t3bTg5OTRfaXJxc1tpXS5yZWcgLSAxXSAmIHdtODk5NF9pcnFzW2ldLm1hc2spCi0JCQloYW5kbGVfbmVzdGVkX2lycSh3bTg5OTQtPmlycV9iYXNlICsgaSk7Ci0JfQotCiAJLyogQWNrIGFueSB1bm1hc2tlZCBJUlFzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdHVzKTsgaSsrKSB7CiAJCWlmIChzdGF0dXNbaV0pCkBAIC0yNDQsNiArMjM4LDEyIEBACiAJCQkJCSBzdGF0dXNbaV0pOwogCX0KIAorCS8qIFJlcG9ydCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NF9pcnFzKTsgaSsrKSB7CisJCWlmIChzdGF0dXNbd204OTk0X2lycXNbaV0ucmVnIC0gMV0gJiB3bTg5OTRfaXJxc1tpXS5tYXNrKQorCQkJaGFuZGxlX25lc3RlZF9pcnEod204OTk0LT5pcnFfYmFzZSArIGkpOworCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCAwYTRkODZjLi4yZDY0MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMTQ2LDYgKzE0Niw3IEBACiAKIGNvbmZpZyBJTlRFTF9NSURfUFRJCiAJdHJpc3RhdGUgIlBhcmFsbGVsIFRyYWNlIEludGVyZmFjZSBmb3IgTUlQSSBQMTE0OS43IGNKVEFHIHN0YW5kYXJkIgorCWRlcGVuZHMgb24gUENJCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhlIFBUSSAoUGFyYWxsZWwgVHJhY2UgSW50ZXJmYWNlKSBkcml2ZXIgZGlyZWN0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2FiODUwMC1wd20uYyBiL2RyaXZlcnMvbWlzYy9hYjg1MDAtcHdtLmMKaW5kZXggNTRlM2QwNS4uMzU5MDMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2FiODUwMC1wd20uYworKysgYi9kcml2ZXJzL21pc2MvYWI4NTAwLXB3bS5jCkBAIC0xNjQsNSArMTY0LDUgQEAKIG1vZHVsZV9leGl0KGFiODUwMF9wd21fZXhpdCk7CiBNT0RVTEVfQVVUSE9SKCJBcnVuIE1VUlRIWSA8YXJ1bi5tdXJ0aHlAc3Rlcmljc3Nvbi5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFCODUwMCBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIERyaXZlciIpOwotTU9EVUxFX0FMSUFTKCJBQjg1MDAgUFdNIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphYjg1MDAtcHdtIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jIGIvZHJpdmVycy9taXNjL2NiNzEwL2NvcmUuYwppbmRleCBlZmVjNDEzLi42OGNkMDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY2I3MTAvY29yZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jYjcxMC9jb3JlLmMKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNiNzEwX3BjaV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdW5zaWduZWQgaW50IGRldmZuID0gUENJX0RFVkZOKFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgMCk7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYwID0gcGNpX2dldF9zbG90KHBkZXYtPmJ1cywgZGV2Zm4pOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2MDsKIAl1MzIgdmFsOwogCiAJY2I3MTBfcGNpX3VwZGF0ZV9jb25maWdfcmVnKHBkZXYsIDB4NDgsCkBAIC00Myw2ICs0Myw3IEBACiAJaWYgKHZhbCAmIDB4ODAwMDAwMDApCiAJCXJldHVybiAwOwogCisJcGRldjAgPSBwY2lfZ2V0X3Nsb3QocGRldi0+YnVzLCBkZXZmbik7CiAJaWYgKCFwZGV2MCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9mc2E5NDgwLmMgYi9kcml2ZXJzL21pc2MvZnNhOTQ4MC5jCmluZGV4IDUzMjVhN2UuLjI3ZGMwZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9mc2E5NDgwLmMKKysrIGIvZHJpdmVycy9taXNjL2ZzYTk0ODAuYwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAKIGZhaWwyOgogCWlmIChjbGllbnQtPmlycSkKLQkJZnJlZV9pcnEoY2xpZW50LT5pcnEsIE5VTEwpOworCQlmcmVlX2lycShjbGllbnQtPmlycSwgdXNic3cpOwogZmFpbDE6CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAJa2ZyZWUodXNic3cpOwpAQCAtNDY2LDcgKzQ2Niw3IEBACiB7CiAJc3RydWN0IGZzYTk0ODBfdXNic3cgKnVzYnN3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaWYgKGNsaWVudC0+aXJxKQotCQlmcmVlX2lycShjbGllbnQtPmlycSwgTlVMTCk7CisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCB1c2Jzdyk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZmc2E5NDgwX2dyb3VwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9wdGkuYyBiL2RyaXZlcnMvbWlzYy9wdGkuYwppbmRleCA4NjUzYmQwLi4wYjU2ZTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvcHRpLmMKKysrIGIvZHJpdmVycy9taXNjL3B0aS5jCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHRpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2RlZmluZSBEUklWRVJOQU1FCQkicHRpIgogI2RlZmluZSBQQ0lOQU1FCQkJInBjaVBUSSIKQEAgLTE2Myw2ICsxNjUsMTEgQEAKIHN0YXRpYyB2b2lkIHB0aV9jb250cm9sX2ZyYW1lX2J1aWx0X2FuZF9zZW50KHN0cnVjdCBwdGlfbWFzdGVyY2hhbm5lbCAqbWMsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqdGhyZWFkX25hbWUpCiB7CisJLyoKKwkgKiBTaW5jZSB3ZSBhY2Nlc3MgdGhlIGNvbW0gbWVtYmVyIGluIGN1cnJlbnQncyB0YXNrX3N0cnVjdCwgd2Ugb25seQorCSAqIG5lZWQgdG8gYmUgYXMgbGFyZ2UgYXMgd2hhdCAnY29tbScgaW4gdGhhdCBzdHJ1Y3R1cmUgaXMuCisJICovCisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogCXN0cnVjdCBwdGlfbWFzdGVyY2hhbm5lbCBtY2NvbnRyb2wgPSB7Lm1hc3RlciA9IENPTlRST0xfSUQsCiAJCQkJCSAgICAgIC5jaGFubmVsID0gMH07CiAJY29uc3QgY2hhciAqdGhyZWFkX25hbWVfcDsKQEAgLTE3MCwxMyArMTc3LDYgQEAKIAl1OCBjb250cm9sX2ZyYW1lW0NPTlRST0xfRlJBTUVfTEVOXTsKIAogCWlmICghdGhyZWFkX25hbWUpIHsKLQkJLyoKLQkJICogU2luY2Ugd2UgYWNjZXNzIHRoZSBjb21tIG1lbWJlciBpbiBjdXJyZW50J3MgdGFza19zdHJ1Y3QsCi0JCSAqIHdlIG9ubHkgbmVlZCB0byBiZSBhcyBsYXJnZSBhcyB3aGF0ICdjb21tJyBpbiB0aGF0Ci0JCSAqIHN0cnVjdHVyZSBpcy4KLQkJICovCi0JCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKLQogCQlpZiAoIWluX2ludGVycnVwdCgpKQogCQkJZ2V0X3Rhc2tfY29tbShjb21tLCBjdXJyZW50KTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMKaW5kZXggNTRjOTFmZi4uYmExNjhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYworKysgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jCkBAIC0zMzgsNiArMzM4LDEyIEBACiAJCQkvKiBVbmtub3cgcGFja2V0PyAqLwogCQlkZWZhdWx0OgogCQkJdHlwZSA9ICpwdHI7CisJCQlpZiAoc3RfZ2RhdGEtPmxpc3RbdHlwZV0gPT0gTlVMTCkgeworCQkJCXByX2VycigiY2hpcC9pbnRlcmZhY2UgbWlzYmVoYXZpb3IgZHJvcHBpbmciCisJCQkJCSIgZnJhbWUgc3RhcnRpbmcgd2l0aCAweCUwMngiLCB0eXBlKTsKKwkJCQlnb3RvIGRvbmU7CisKKwkJCX0KIAkJCXN0X2dkYXRhLT5yeF9za2IgPSBhbGxvY19za2IoCiAJCQkJCXN0X2dkYXRhLT5saXN0W3R5cGVdLT5tYXhfZnJhbWVfc2l6ZSwKIAkJCQkJR0ZQX0FUT01JQyk7CkBAIC0zNTQsNiArMzYwLDcgQEAKIAkJcHRyKys7CiAJCWNvdW50LS07CiAJfQorZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCXByX2RlYnVnKCJkb25lICVzIiwgX19mdW5jX18pOwogCXJldHVybjsKQEAgLTcxNyw5ICs3MjQsMTAgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSBTVF9CVDsgaSA8IFNUX01BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChzdF9nZGF0YS0+bGlzdFtpXSAhPSBOVUxMKQorCQlpZiAoc3RfZ2RhdGEtPmlzX3JlZ2lzdGVyZWRbaV0gPT0gdHJ1ZSkKIAkJCXByX2VycigiJWQgbm90IHVuLXJlZ2lzdGVyZWQiLCBpKTsKIAkJc3RfZ2RhdGEtPmxpc3RbaV0gPSBOVUxMOworCQlzdF9nZGF0YS0+aXNfcmVnaXN0ZXJlZFtpXSA9IGZhbHNlOwogCX0KIAlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMKaW5kZXggMzhmZDJmMC4uM2EzNTgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2tpbS5jCisrKyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9raW0uYwpAQCAtNjgsNiArNjgsNyBAQAogCWlmICh1bmxpa2VseShza2ItPmRhdGFbNV0gIT0gMCkpIHsKIAkJcHJfZXJyKCJubyBwcm9wZXIgcmVzcG9uc2UgZHVyaW5nIGZ3IGRvd25sb2FkIik7CiAJCXByX2VycigiZGF0YTYgJXgiLCBza2ItPmRhdGFbNV0pOworCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwkJLyoga2VlcCB3YWl0aW5nIGZvciB0aGUgcHJvcGVyIHJlc3BvbnNlICovCiAJfQogCS8qIGJlY29zIG9mIGFsbCB0aGUgc2NyaXB0IGJlaW5nIGRvd25sb2FkZWQgKi8KQEAgLTIxMCw2ICsyMTEsNyBAQAogCQlwcl9lcnIoIiB3YWl0aW5nIGZvciB2ZXIgaW5mby0gdGltZWQgb3V0ICIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CisJSU5JVF9DT01QTEVUSU9OKGtpbV9nZGF0YS0+a2ltX3JjdmQpOwogCiAJdmVyc2lvbiA9CiAJCU1BS0VXT1JEKGtpbV9nZGF0YS0+cmVzcF9idWZmZXJbMTNdLApAQCAtMjk4LDYgKzMwMCw3IEBACiAKIAkJc3dpdGNoICgoKHN0cnVjdCBidHNfYWN0aW9uICopcHRyKS0+dHlwZSkgewogCQljYXNlIEFDVElPTl9TRU5EX0NPTU1BTkQ6CS8qIGFjdGlvbiBzZW5kICovCisJCQlwcl9kZWJ1ZygiUyIpOwogCQkJYWN0aW9uX3B0ciA9ICYoKChzdHJ1Y3QgYnRzX2FjdGlvbiAqKXB0ciktPmRhdGFbMF0pOwogCQkJaWYgKHVubGlrZWx5CiAJCQkgICAgKCgoc3RydWN0IGhjaV9jb21tYW5kICopYWN0aW9uX3B0ciktPm9wY29kZSA9PQpAQCAtMzM1LDYgKzMzOCwxMCBAQAogCQkJCXJlbGVhc2VfZmlybXdhcmUoa2ltX2dkYXRhLT5md19lbnRyeSk7CiAJCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCQl9CisJCQkvKiByZWluaXQgY29tcGxldGlvbiBiZWZvcmUgc2VuZGluZyBmb3IgdGhlCisJCQkgKiByZWxldmFudCB3YWl0CisJCQkgKi8KKwkJCUlOSVRfQ09NUExFVElPTihraW1fZ2RhdGEtPmtpbV9yY3ZkKTsKIAogCQkJLyoKIAkJCSAqIEZyZWUgc3BhY2UgZm91bmQgaW4gdWFydCBidWZmZXIsIGNhbGwgc3RfaW50X3dyaXRlCkBAIC0zNjEsNiArMzY4LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFDVElPTl9XQUlUX0VWRU5UOiAgLyogd2FpdCAqLworCQkJcHJfZGVidWcoIlciKTsKIAkJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0CiAJCQkJCSgma2ltX2dkYXRhLT5raW1fcmN2ZCwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoQ01EX1JFU1BfVElNRSkpKSB7CkBAIC00MzQsMTEgKzQ0MiwxNyBAQAogewogCWxvbmcgZXJyID0gMDsKIAlsb25nIHJldHJ5ID0gUE9SX1JFVFJZX0NPVU5UOworCXN0cnVjdCB0aV9zdF9wbGF0X2RhdGEJKnBkYXRhOwogCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGEgPSAoc3RydWN0IGtpbV9kYXRhX3MgKilraW1fZGF0YTsKIAogCXByX2luZm8oIiAlcyIsIF9fZnVuY19fKTsKKwlwZGF0YSA9IGtpbV9nZGF0YS0+a2ltX3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJZG8geworCQkvKiBwbGF0Zm9ybSBzcGVjaWZpYyBlbmFibGluZyBjb2RlIGhlcmUgKi8KKwkJaWYgKHBkYXRhLT5jaGlwX2VuYWJsZSkKKwkJCXBkYXRhLT5jaGlwX2VuYWJsZShraW1fZ2RhdGEpOworCiAJCS8qIENvbmZpZ3VyZSBCVCBuU2h1dGRvd24gdG8gSElHSCBzdGF0ZSAqLwogCQlncGlvX3NldF92YWx1ZShraW1fZ2RhdGEtPm5zaHV0ZG93biwgR1BJT19MT1cpOwogCQltZGVsYXkoNSk7CS8qIEZJWE1FOiBhIHByb3BlciB0b2dnbGUgKi8KQEAgLTQ2MCw2ICs0NzQsMTIgQEAKIAkJCXByX2luZm8oImxkaXNjX2luc3RhbGwgPSAwIik7CiAJCQlzeXNmc19ub3RpZnkoJmtpbV9nZGF0YS0+a2ltX3BkZXYtPmRldi5rb2JqLAogCQkJCQlOVUxMLCAiaW5zdGFsbCIpOworCQkJLyogdGhlIGZvbGxvd2luZyB3YWl0IGlzIG5ldmVyIGdvaW5nIHRvIGJlIGNvbXBsZXRlZCwKKwkJCSAqIHNpbmNlIHRoZSBsZGlzYyB3YXMgbmV2ZXIgaW5zdGFsbGVkLCBoZW5jZSBzZXJ2aW5nCisJCQkgKiBhcyBhIG1kZWxheSBvZiBMRElTQ19USU1FIG1zZWNzICovCisJCQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQKKwkJCQkoJmtpbV9nZGF0YS0+bGRpc2NfaW5zdGFsbGVkLAorCQkJCSBtc2Vjc190b19qaWZmaWVzKExESVNDX1RJTUUpKTsKIAkJCWVyciA9IC1FVElNRURPVVQ7CiAJCQljb250aW51ZTsKIAkJfSBlbHNlIHsKQEAgLTQ3Miw2ICs0OTIsMTMgQEAKIAkJCQlwcl9pbmZvKCJsZGlzY19pbnN0YWxsID0gMCIpOwogCQkJCXN5c2ZzX25vdGlmeSgma2ltX2dkYXRhLT5raW1fcGRldi0+ZGV2LmtvYmosCiAJCQkJCQlOVUxMLCAiaW5zdGFsbCIpOworCQkJCS8qIHRoaXMgd2FpdCBtaWdodCBiZSBjb21wbGV0ZWQsIHRob3VnaCBpbiB0aGUKKwkJCQkgKiB0dHlfY2xvc2UoKSBzaW5jZSB0aGUgbGRpc2MgaXMgYWxyZWFkeQorCQkJCSAqIGluc3RhbGxlZCAqLworCQkJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dAorCQkJCQkoJmtpbV9nZGF0YS0+bGRpc2NfaW5zdGFsbGVkLAorCQkJCQkgbXNlY3NfdG9famlmZmllcyhMRElTQ19USU1FKSk7CisJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSB7CS8qIG9uIHN1Y2Nlc3MgZG9uJ3QgcmV0cnkgKi8KIAkJCQlicmVhazsKQEAgLTQ4OSw2ICs1MTYsOCBAQAogewogCWxvbmcgZXJyID0gMDsKIAlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhID0gKHN0cnVjdCBraW1fZGF0YV9zICopa2ltX2RhdGE7CisJc3RydWN0IHRpX3N0X3BsYXRfZGF0YQkqcGRhdGEgPQorCQlraW1fZ2RhdGEtPmtpbV9wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCUlOSVRfQ09NUExFVElPTihraW1fZ2RhdGEtPmxkaXNjX2luc3RhbGxlZCk7CiAKQEAgLTUxNSw2ICs1NDQsMTAgQEAKIAlncGlvX3NldF92YWx1ZShraW1fZ2RhdGEtPm5zaHV0ZG93biwgR1BJT19ISUdIKTsKIAltZGVsYXkoMSk7CiAJZ3Bpb19zZXRfdmFsdWUoa2ltX2dkYXRhLT5uc2h1dGRvd24sIEdQSU9fTE9XKTsKKworCS8qIHBsYXRmb3JtIHNwZWNpZmljIGRpc2FibGUgKi8KKwlpZiAocGRhdGEtPmNoaXBfZGlzYWJsZSkKKwkJcGRhdGEtPmNoaXBfZGlzYWJsZShraW1fZ2RhdGEpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9sbC5jIGIvZHJpdmVycy9taXNjL3RpLXN0L3N0X2xsLmMKaW5kZXggM2YyNDk1MS4uMWZmNDYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2xsLmMKKysrIGIvZHJpdmVycy9taXNjL3RpLXN0L3N0X2xsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgIihzdGxsKSA6IiBmbXQKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90aV93aWxpbmtfc3QuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNyw2ICszOCw5IEBACiAKIHN0YXRpYyB2b2lkIGxsX2RldmljZV93YW50X3RvX3NsZWVwKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2RhdGEpCiB7CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9kYXRhOworCXN0cnVjdCB0aV9zdF9wbGF0X2RhdGEJKnBkYXRhOworCiAJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChzdF9kYXRhLT5sbF9zdGF0ZSAhPSBTVF9MTF9BV0FLRSkKQEAgLTQ2LDEwICs1MCwxOSBAQAogCXNlbmRfbGxfY21kKHN0X2RhdGEsIExMX1NMRUVQX0FDSyk7CiAJLyogdXBkYXRlIHN0YXRlICovCiAJc3RfZGF0YS0+bGxfc3RhdGUgPSBTVF9MTF9BU0xFRVA7CisKKwkvKiBjb21tdW5pY2F0ZSB0byBwbGF0Zm9ybSBhYm91dCBjaGlwIGFzbGVlcCAqLworCWtpbV9kYXRhID0gc3RfZGF0YS0+a2ltX2RhdGE7CisJcGRhdGEgPSBraW1fZGF0YS0+a2ltX3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YS0+Y2hpcF9hc2xlZXApCisJCXBkYXRhLT5jaGlwX2FzbGVlcChOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgbGxfZGV2aWNlX3dhbnRfdG9fd2FrZXVwKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2RhdGEpCiB7CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9kYXRhOworCXN0cnVjdCB0aV9zdF9wbGF0X2RhdGEJKnBkYXRhOworCiAJLyogZGlmZiBhY3Rpb25zIGluIGRpZmYgc3RhdGVzICovCiAJc3dpdGNoIChzdF9kYXRhLT5sbF9zdGF0ZSkgewogCWNhc2UgU1RfTExfQVNMRUVQOgpAQCAtNzAsNiArODMsMTIgQEAKIAl9CiAJLyogdXBkYXRlIHN0YXRlICovCiAJc3RfZGF0YS0+bGxfc3RhdGUgPSBTVF9MTF9BV0FLRTsKKworCS8qIGNvbW11bmljYXRlIHRvIHBsYXRmb3JtIGFib3V0IGNoaXAgd2FrZXVwICovCisJa2ltX2RhdGEgPSBzdF9kYXRhLT5raW1fZGF0YTsKKwlwZGF0YSA9IGtpbV9kYXRhLT5raW1fcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhLT5jaGlwX2FzbGVlcCkKKwkJcGRhdGEtPmNoaXBfYXdha2UoTlVMTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCmluZGV4IDAwNmE1ZTkuLjJiZjIyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogc3RhdGljIGludCBtbWNfdGVzdF9idXN5KHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQogewogCXJldHVybiAhKGNtZC0+cmVzcFswXSAmIFIxX1JFQURZX0ZPUl9EQVRBKSB8fAotCQkoUjFfQ1VSUkVOVF9TVEFURShjbWQtPnJlc3BbMF0pID09IDcpOworCQkoUjFfQ1VSUkVOVF9TVEFURShjbWQtPnJlc3BbMF0pID09IFIxX1NUQVRFX1BSRyk7CiB9CiAKIC8qCkBAIC0yOTAwLDcgKzI5MDAsNyBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgdm9pZCBtbWNfdGVzdF9mcmVlX2ZpbGVfdGVzdChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCitzdGF0aWMgdm9pZCBtbWNfdGVzdF9mcmVlX2RiZ2ZzX2ZpbGUoc3RydWN0IG1tY19jYXJkICpjYXJkKQogewogCXN0cnVjdCBtbWNfdGVzdF9kYmdmc19maWxlICpkZiwgKmRmczsKIApAQCAtMjkxNywzNCArMjkxNywyMSBAQAogCW11dGV4X3VubG9jaygmbW1jX3Rlc3RfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgbW1jX3Rlc3RfcmVnaXN0ZXJfZmlsZV90ZXN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3N0YXRpYyBpbnQgX19tbWNfdGVzdF9yZWdpc3Rlcl9kYmdmc19maWxlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKKwljb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpmaWxlID0gTlVMTDsKIAlzdHJ1Y3QgbW1jX3Rlc3RfZGJnZnNfZmlsZSAqZGY7Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZtbWNfdGVzdF9sb2NrKTsKIAogCWlmIChjYXJkLT5kZWJ1Z2ZzX3Jvb3QpCi0JCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0ZXN0IiwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQljYXJkLT5kZWJ1Z2ZzX3Jvb3QsIGNhcmQsICZtbWNfdGVzdF9mb3BzX3Rlc3QpOworCQlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBtb2RlLCBjYXJkLT5kZWJ1Z2ZzX3Jvb3QsCisJCQljYXJkLCBmb3BzKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmaWxlKSkgewogCQlkZXZfZXJyKCZjYXJkLT5kZXYsCi0JCQkiQ2FuJ3QgY3JlYXRlIHRlc3QuIFBlcmhhcHMgZGVidWdmcyBpcyBkaXNhYmxlZC5cbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoY2FyZC0+ZGVidWdmc19yb290KQotCQlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgidGVzdGxpc3QiLCBTX0lSVUdPLAotCQkJY2FyZC0+ZGVidWdmc19yb290LCBjYXJkLCAmbW1jX3Rlc3RfZm9wc190ZXN0bGlzdCk7Ci0KLQlpZiAoSVNfRVJSX09SX05VTEwoZmlsZSkpIHsKLQkJZGV2X2VycigmY2FyZC0+ZGV2LAotCQkJIkNhbid0IGNyZWF0ZSB0ZXN0bGlzdC4gUGVyaGFwcyBkZWJ1Z2ZzIGlzIGRpc2FibGVkLlxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyOworCQkJIkNhbid0IGNyZWF0ZSAlcy4gUGVyaGFwcyBkZWJ1Z2ZzIGlzIGRpc2FibGVkLlxuIiwKKwkJCW5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNfdGVzdF9kYmdmc19maWxlKSwgR0ZQX0tFUk5FTCk7CkBAIC0yOTUyLDE0ICsyOTM5LDMxIEBACiAJCWRlYnVnZnNfcmVtb3ZlKGZpbGUpOwogCQlkZXZfZXJyKCZjYXJkLT5kZXYsCiAJCQkiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcm5hbCB1c2FnZS5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZGYtPmNhcmQgPSBjYXJkOwogCWRmLT5maWxlID0gZmlsZTsKIAogCWxpc3RfYWRkKCZkZi0+bGluaywgJm1tY190ZXN0X2ZpbGVfdGVzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW1jX3Rlc3RfcmVnaXN0ZXJfZGJnZnNfZmlsZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJm1tY190ZXN0X2xvY2spOworCisJcmV0ID0gX19tbWNfdGVzdF9yZWdpc3Rlcl9kYmdmc19maWxlKGNhcmQsICJ0ZXN0IiwgU19JV1VTUiB8IFNfSVJVR08sCisJCSZtbWNfdGVzdF9mb3BzX3Rlc3QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gX19tbWNfdGVzdF9yZWdpc3Rlcl9kYmdmc19maWxlKGNhcmQsICJ0ZXN0bGlzdCIsIFNfSVJVR08sCisJCSZtbWNfdGVzdF9mb3BzX3Rlc3RsaXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAogZXJyOgogCW11dGV4X3VubG9jaygmbW1jX3Rlc3RfbG9jayk7CkBAIC0yOTc0LDcgKzI5NzgsNyBAQAogCWlmICghbW1jX2NhcmRfbW1jKGNhcmQpICYmICFtbWNfY2FyZF9zZChjYXJkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBtbWNfdGVzdF9yZWdpc3Rlcl9maWxlX3Rlc3QoY2FyZCk7CisJcmV0ID0gbW1jX3Rlc3RfcmVnaXN0ZXJfZGJnZnNfZmlsZShjYXJkKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yOTg2LDcgKzI5OTAsNyBAQAogc3RhdGljIHZvaWQgbW1jX3Rlc3RfcmVtb3ZlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAltbWNfdGVzdF9mcmVlX3Jlc3VsdChjYXJkKTsKLQltbWNfdGVzdF9mcmVlX2ZpbGVfdGVzdChjYXJkKTsKKwltbWNfdGVzdF9mcmVlX2RiZ2ZzX2ZpbGUoY2FyZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbW1jX2RyaXZlciBtbWNfZHJpdmVyID0gewpAQCAtMzAwNiw3ICszMDEwLDcgQEAKIHsKIAkvKiBDbGVhciBzdGFsbGVkIGRhdGEgaWYgY2FyZCBpcyBzdGlsbCBwbHVnZ2VkICovCiAJbW1jX3Rlc3RfZnJlZV9yZXN1bHQoTlVMTCk7Ci0JbW1jX3Rlc3RfZnJlZV9maWxlX3Rlc3QoTlVMTCk7CisJbW1jX3Rlc3RfZnJlZV9kYmdmc19maWxlKE5VTEwpOwogCiAJbW1jX3VucmVnaXN0ZXJfZHJpdmVyKCZtbWNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggODliZGVhZS4uYjI3Yjk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQlpZiAobXJxLT5kb25lKQogCQkJbXJxLT5kb25lKG1ycSk7CiAKLQkJbW1jX2hvc3RfY2xrX2dhdGUoaG9zdCk7CisJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCX0KIH0KIApAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQltcnEtPnN0b3AtPm1ycSA9IG1ycTsKIAkJfQogCX0KLQltbWNfaG9zdF9jbGtfdW5nYXRlKGhvc3QpOworCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOwogCWxlZF90cmlnZ2VyX2V2ZW50KGhvc3QtPmxlZCwgTEVEX0ZVTEwpOwogCWhvc3QtPm9wcy0+cmVxdWVzdChob3N0LCBtcnEpOwogfQpAQCAtNzI4LDE1ICs3MjgsMTcgQEAKICAqLwogdm9pZCBtbWNfc2V0X2NoaXBfc2VsZWN0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IG1vZGUpCiB7CisJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CiAJaG9zdC0+aW9zLmNoaXBfc2VsZWN0ID0gbW9kZTsKIAltbWNfc2V0X2lvcyhob3N0KTsKKwltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIH0KIAogLyoKICAqIFNldHMgdGhlIGhvc3QgY2xvY2sgdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgZnJlcXVlbmN5IHRoYXQKICAqIGlzIGJlbG93ICJoeiIuCiAgKi8KLXZvaWQgbW1jX3NldF9jbG9jayhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBoeikKK3N0YXRpYyB2b2lkIF9fbW1jX3NldF9jbG9jayhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBoeikKIHsKIAlXQVJOX09OKGh6IDwgaG9zdC0+Zl9taW4pOwogCkBAIC03NDcsNiArNzQ5LDEzIEBACiAJbW1jX3NldF9pb3MoaG9zdCk7CiB9CiAKK3ZvaWQgbW1jX3NldF9jbG9jayhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBoeikKK3sKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKKwlfX21tY19zZXRfY2xvY2soaG9zdCwgaHopOworCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOworfQorCiAjaWZkZWYgQ09ORklHX01NQ19DTEtHQVRFCiAvKgogICogVGhpcyBnYXRlcyB0aGUgY2xvY2sgYnkgc2V0dGluZyBpdCB0byAwIEh6LgpAQCAtNzc5LDcgKzc4OCw3IEBACiAJaWYgKGhvc3QtPmNsa19vbGQpIHsKIAkJQlVHX09OKGhvc3QtPmlvcy5jbG9jayk7CiAJCS8qIFRoaXMgY2FsbCB3aWxsIGFsc28gc2V0IGhvc3QtPmNsa19nYXRlZCB0byBmYWxzZSAqLwotCQltbWNfc2V0X2Nsb2NrKGhvc3QsIGhvc3QtPmNsa19vbGQpOworCQlfX21tY19zZXRfY2xvY2soaG9zdCwgaG9zdC0+Y2xrX29sZCk7CiAJfQogfQogCkBAIC04MDcsOCArODE2LDEwIEBACiAgKi8KIHZvaWQgbW1jX3NldF9idXNfbW9kZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBtb2RlKQogeworCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOwogCWhvc3QtPmlvcy5idXNfbW9kZSA9IG1vZGU7CiAJbW1jX3NldF9pb3MoaG9zdCk7CisJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiB9CiAKIC8qCkBAIC04MTYsOCArODI3LDEwIEBACiAgKi8KIHZvaWQgbW1jX3NldF9idXNfd2lkdGgoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgd2lkdGgpCiB7CisJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CiAJaG9zdC0+aW9zLmJ1c193aWR0aCA9IHdpZHRoOwogCW1tY19zZXRfaW9zKGhvc3QpOworCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogfQogCiAvKioKQEAgLTEwMTUsOCArMTAyOCwxMCBAQAogCiAJCW9jciAmPSAzIDw8IGJpdDsKIAorCQltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKIAkJaG9zdC0+aW9zLnZkZCA9IGJpdDsKIAkJbW1jX3NldF9pb3MoaG9zdCk7CisJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogCX0gZWxzZSB7CiAJCXByX3dhcm5pbmcoIiVzOiBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBjYXJkJ3Mgdm9sdGFnZXNcbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QpKTsKQEAgLTEwNjMsOCArMTA3OCwxMCBAQAogICovCiB2b2lkIG1tY19zZXRfdGltaW5nKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHRpbWluZykKIHsKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKIAlob3N0LT5pb3MudGltaW5nID0gdGltaW5nOwogCW1tY19zZXRfaW9zKGhvc3QpOworCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogfQogCiAvKgpAQCAtMTA3Miw4ICsxMDg5LDEwIEBACiAgKi8KIHZvaWQgbW1jX3NldF9kcml2ZXJfdHlwZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBkcnZfdHlwZSkKIHsKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKIAlob3N0LT5pb3MuZHJ2X3R5cGUgPSBkcnZfdHlwZTsKIAltbWNfc2V0X2lvcyhob3N0KTsKKwltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIH0KIAogLyoKQEAgLTEwOTEsNiArMTExMCw4IEBACiB7CiAJaW50IGJpdDsKIAorCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOworCiAJLyogSWYgb2NyIGlzIHNldCwgd2UgdXNlIGl0ICovCiAJaWYgKGhvc3QtPm9jcikKIAkJYml0ID0gZmZzKGhvc3QtPm9jcikgLSAxOwpAQCAtMTEyNiwxMCArMTE0NywxNCBAQAogCSAqIHRpbWUgcmVxdWlyZWQgdG8gcmVhY2ggYSBzdGFibGUgdm9sdGFnZS4KIAkgKi8KIAltbWNfZGVsYXkoMTApOworCisJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1tY19wb3dlcl9vZmYoc3RydWN0IG1tY19ob3N0ICpob3N0KQogeworCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOworCiAJaG9zdC0+aW9zLmNsb2NrID0gMDsKIAlob3N0LT5pb3MudmRkID0gMDsKIApAQCAtMTE0Nyw2ICsxMTcyLDggQEAKIAlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwogCWhvc3QtPmlvcy50aW1pbmcgPSBNTUNfVElNSU5HX0xFR0FDWTsKIAltbWNfc2V0X2lvcyhob3N0KTsKKworCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwogfQogCiAvKgpAQCAtMTUwMiw3ICsxNTI5LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSB3aGlsZSAoIShjbWQucmVzcFswXSAmIFIxX1JFQURZX0ZPUl9EQVRBKSB8fAotCQkgUjFfQ1VSUkVOVF9TVEFURShjbWQucmVzcFswXSkgPT0gNyk7CisJCSBSMV9DVVJSRU5UX1NUQVRFKGNtZC5yZXNwWzBdKSA9PSBSMV9TVEFURV9QUkcpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCmluZGV4IGIyOWQzZTguLjc5M2QwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCkBAIC0xMTksMTQgKzExOSwxNCBAQAogfQogCiAvKioKLSAqCW1tY19ob3N0X2Nsa191bmdhdGUgLSB1bmdhdGUgaGFyZHdhcmUgTUNJIGNsb2NrcworICoJbW1jX2hvc3RfY2xrX2hvbGQgLSB1bmdhdGUgaGFyZHdhcmUgTUNJIGNsb2NrcwogICoJQGhvc3Q6IGhvc3QgdG8gdW5nYXRlLgogICoKICAqCU1ha2VzIHN1cmUgdGhlIGhvc3QgaW9zLmNsb2NrIGlzIHJlc3RvcmVkIHRvIGEgbm9uLXplcm8gdmFsdWUKICAqCXBhc3QgdGhpcyBjYWxsLglJbmNyZWFzZSBjbG9jayByZWZlcmVuY2UgY291bnQgYW5kIHVuZ2F0ZSBjbG9jawogICoJaWYgd2UncmUgdGhlIGZpcnN0IHVzZXIuCiAgKi8KLXZvaWQgbW1jX2hvc3RfY2xrX3VuZ2F0ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit2b2lkIG1tY19ob3N0X2Nsa19ob2xkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNjQsMTQgKzE2NCwxNCBAQAogfQogCiAvKioKLSAqCW1tY19ob3N0X2Nsa19nYXRlIC0gZ2F0ZSBvZmYgaGFyZHdhcmUgTUNJIGNsb2NrcworICoJbW1jX2hvc3RfY2xrX3JlbGVhc2UgLSBnYXRlIG9mZiBoYXJkd2FyZSBNQ0kgY2xvY2tzCiAgKglAaG9zdDogaG9zdCB0byBnYXRlLgogICoKICAqCUNhbGxzIHRoZSBob3N0IGRyaXZlciB3aXRoIGlvcy5jbG9jayBzZXQgdG8gemVybyBhcyBvZnRlbiBhcyBwb3NzaWJsZQogICoJaW4gb3JkZXIgdG8gZ2F0ZSBvZmYgaGFyZHdhcmUgTUNJIGNsb2Nrcy4gRGVjcmVhc2UgY2xvY2sgcmVmZXJlbmNlCiAgKgljb3VudCBhbmQgc2NoZWR1bGUgZGlzYWJsaW5nIG9mIGNsb2NrLgogICovCi12b2lkIG1tY19ob3N0X2Nsa19nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3ZvaWQgbW1jX2hvc3RfY2xrX3JlbGVhc2Uoc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE3OSw3ICsxNzksNyBAQAogCWhvc3QtPmNsa19yZXF1ZXN0cy0tOwogCWlmIChtbWNfaG9zdF9tYXlfZ2F0ZV9jYXJkKGhvc3QtPmNhcmQpICYmCiAJICAgICFob3N0LT5jbGtfcmVxdWVzdHMpCi0JCXNjaGVkdWxlX3dvcmsoJmhvc3QtPmNsa19nYXRlX3dvcmspOworCQlxdWV1ZV93b3JrKHN5c3RlbV9ucnRfd3EsICZob3N0LT5jbGtfZ2F0ZV93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5jbGtfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlpZiAoY2FuY2VsX3dvcmtfc3luYygmaG9zdC0+Y2xrX2dhdGVfd29yaykpCiAJCW1tY19ob3N0X2Nsa19nYXRlX2RlbGF5ZWQoaG9zdCk7CiAJaWYgKGhvc3QtPmNsa19nYXRlZCkKLQkJbW1jX2hvc3RfY2xrX3VuZ2F0ZShob3N0KTsKKwkJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CiAJLyogVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHVzZXIgbm93ICovCiAJV0FSTl9PTihob3N0LT5jbGtfcmVxdWVzdHMgPiAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5oIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKaW5kZXggZGUxOTlmOS4uZmI4YTVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKKysrIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmgKQEAgLTE2LDE2ICsxNiwxNiBAQAogdm9pZCBtbWNfdW5yZWdpc3Rlcl9ob3N0X2NsYXNzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX01NQ19DTEtHQVRFCi12b2lkIG1tY19ob3N0X2Nsa191bmdhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKLXZvaWQgbW1jX2hvc3RfY2xrX2dhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK3ZvaWQgbW1jX2hvc3RfY2xrX2hvbGQoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK3ZvaWQgbW1jX2hvc3RfY2xrX3JlbGVhc2Uoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIHVuc2lnbmVkIGludCBtbWNfaG9zdF9jbGtfcmF0ZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG1tY19ob3N0X2Nsa191bmdhdGUoc3RydWN0IG1tY19ob3N0ICpob3N0KQorc3RhdGljIGlubGluZSB2b2lkIG1tY19ob3N0X2Nsa19ob2xkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1tY19ob3N0X2Nsa19nYXRlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfaG9zdF9jbGtfcmVsZWFzZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IGFhN2QxZDcuLjU3MDBiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJfQogCiAJY2FyZC0+ZXh0X2NzZC5yZXYgPSBleHRfY3NkW0VYVF9DU0RfUkVWXTsKLQlpZiAoY2FyZC0+ZXh0X2NzZC5yZXYgPiA1KSB7CisJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID4gNikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgRVhUX0NTRCByZXZpc2lvbiAlZFxuIiwKIAkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgY2FyZC0+ZXh0X2NzZC5yZXYpOwogCQllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwppbmRleCA4NDVjZTdjLi43NzBjM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tY19vcHMuYwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCQlicmVhazsKIAkJaWYgKG1tY19ob3N0X2lzX3NwaShjYXJkLT5ob3N0KSkKIAkJCWJyZWFrOwotCX0gd2hpbGUgKFIxX0NVUlJFTlRfU1RBVEUoc3RhdHVzKSA9PSA3KTsKKwl9IHdoaWxlIChSMV9DVVJSRU5UX1NUQVRFKHN0YXR1cykgPT0gUjFfU1RBVEVfUFJHKTsKIAogCWlmIChtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkpIHsKIAkJaWYgKHN0YXR1cyAmIFIxX1NQSV9JTExFR0FMX0NPTU1BTkQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkLmMKaW5kZXggNjMzOTc1Zi4uMDM3MGUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwpAQCAtNDY5LDU2ICs0NjksNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9zZXRfYnVzX3NwZWVkX21vZGUoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1OCAqc3RhdHVzKQorc3RhdGljIHZvaWQgc2RfdXBkYXRlX2J1c19zcGVlZF9tb2RlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKLQl1bnNpZ25lZCBpbnQgYnVzX3NwZWVkID0gMCwgdGltaW5nID0gMDsKLQlpbnQgZXJyOwotCiAJLyoKIAkgKiBJZiB0aGUgaG9zdCBkb2Vzbid0IHN1cHBvcnQgYW55IG9mIHRoZSBVSFMtSSBtb2RlcywgZmFsbGJhY2sgb24KIAkgKiBkZWZhdWx0IHNwZWVkLgogCSAqLwogCWlmICghKGNhcmQtPmhvc3QtPmNhcHMgJiAoTU1DX0NBUF9VSFNfU0RSMTIgfCBNTUNfQ0FQX1VIU19TRFIyNSB8Ci0JICAgIE1NQ19DQVBfVUhTX1NEUjUwIHwgTU1DX0NBUF9VSFNfU0RSMTA0IHwgTU1DX0NBUF9VSFNfRERSNTApKSkKLQkJcmV0dXJuIDA7CisJICAgIE1NQ19DQVBfVUhTX1NEUjUwIHwgTU1DX0NBUF9VSFNfU0RSMTA0IHwgTU1DX0NBUF9VSFNfRERSNTApKSkgeworCQljYXJkLT5zZF9idXNfc3BlZWQgPSAwOworCQlyZXR1cm47CisJfQogCiAJaWYgKChjYXJkLT5ob3N0LT5jYXBzICYgTU1DX0NBUF9VSFNfU0RSMTA0KSAmJgogCSAgICAoY2FyZC0+c3dfY2Fwcy5zZDNfYnVzX21vZGUgJiBTRF9NT0RFX1VIU19TRFIxMDQpKSB7Ci0JCQlidXNfc3BlZWQgPSBVSFNfU0RSMTA0X0JVU19TUEVFRDsKLQkJCXRpbWluZyA9IE1NQ19USU1JTkdfVUhTX1NEUjEwNDsKLQkJCWNhcmQtPnN3X2NhcHMudWhzX21heF9kdHIgPSBVSFNfU0RSMTA0X01BWF9EVFI7CisJCQljYXJkLT5zZF9idXNfc3BlZWQgPSBVSFNfU0RSMTA0X0JVU19TUEVFRDsKIAl9IGVsc2UgaWYgKChjYXJkLT5ob3N0LT5jYXBzICYgTU1DX0NBUF9VSFNfRERSNTApICYmCiAJCSAgIChjYXJkLT5zd19jYXBzLnNkM19idXNfbW9kZSAmIFNEX01PREVfVUhTX0REUjUwKSkgewotCQkJYnVzX3NwZWVkID0gVUhTX0REUjUwX0JVU19TUEVFRDsKLQkJCXRpbWluZyA9IE1NQ19USU1JTkdfVUhTX0REUjUwOwotCQkJY2FyZC0+c3dfY2Fwcy51aHNfbWF4X2R0ciA9IFVIU19ERFI1MF9NQVhfRFRSOworCQkJY2FyZC0+c2RfYnVzX3NwZWVkID0gVUhTX0REUjUwX0JVU19TUEVFRDsKIAl9IGVsc2UgaWYgKChjYXJkLT5ob3N0LT5jYXBzICYgKE1NQ19DQVBfVUhTX1NEUjEwNCB8CiAJCSAgICBNTUNfQ0FQX1VIU19TRFI1MCkpICYmIChjYXJkLT5zd19jYXBzLnNkM19idXNfbW9kZSAmCiAJCSAgICBTRF9NT0RFX1VIU19TRFI1MCkpIHsKLQkJCWJ1c19zcGVlZCA9IFVIU19TRFI1MF9CVVNfU1BFRUQ7Ci0JCQl0aW1pbmcgPSBNTUNfVElNSU5HX1VIU19TRFI1MDsKLQkJCWNhcmQtPnN3X2NhcHMudWhzX21heF9kdHIgPSBVSFNfU0RSNTBfTUFYX0RUUjsKKwkJCWNhcmQtPnNkX2J1c19zcGVlZCA9IFVIU19TRFI1MF9CVVNfU1BFRUQ7CiAJfSBlbHNlIGlmICgoY2FyZC0+aG9zdC0+Y2FwcyAmIChNTUNfQ0FQX1VIU19TRFIxMDQgfAogCQkgICAgTU1DX0NBUF9VSFNfU0RSNTAgfCBNTUNfQ0FQX1VIU19TRFIyNSkpICYmCiAJCSAgIChjYXJkLT5zd19jYXBzLnNkM19idXNfbW9kZSAmIFNEX01PREVfVUhTX1NEUjI1KSkgewotCQkJYnVzX3NwZWVkID0gVUhTX1NEUjI1X0JVU19TUEVFRDsKLQkJCXRpbWluZyA9IE1NQ19USU1JTkdfVUhTX1NEUjI1OwotCQkJY2FyZC0+c3dfY2Fwcy51aHNfbWF4X2R0ciA9IFVIU19TRFIyNV9NQVhfRFRSOworCQkJY2FyZC0+c2RfYnVzX3NwZWVkID0gVUhTX1NEUjI1X0JVU19TUEVFRDsKIAl9IGVsc2UgaWYgKChjYXJkLT5ob3N0LT5jYXBzICYgKE1NQ19DQVBfVUhTX1NEUjEwNCB8CiAJCSAgICBNTUNfQ0FQX1VIU19TRFI1MCB8IE1NQ19DQVBfVUhTX1NEUjI1IHwKIAkJICAgIE1NQ19DQVBfVUhTX1NEUjEyKSkgJiYgKGNhcmQtPnN3X2NhcHMuc2QzX2J1c19tb2RlICYKIAkJICAgIFNEX01PREVfVUhTX1NEUjEyKSkgewotCQkJYnVzX3NwZWVkID0gVUhTX1NEUjEyX0JVU19TUEVFRDsKLQkJCXRpbWluZyA9IE1NQ19USU1JTkdfVUhTX1NEUjEyOwotCQkJY2FyZC0+c3dfY2Fwcy51aHNfbWF4X2R0ciA9IFVIU19TRFIxMl9NQVhfRFRSOworCQkJY2FyZC0+c2RfYnVzX3NwZWVkID0gVUhTX1NEUjEyX0JVU19TUEVFRDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0X2J1c19zcGVlZF9tb2RlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTggKnN0YXR1cykKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB0aW1pbmcgPSAwOworCisJc3dpdGNoIChjYXJkLT5zZF9idXNfc3BlZWQpIHsKKwljYXNlIFVIU19TRFIxMDRfQlVTX1NQRUVEOgorCQl0aW1pbmcgPSBNTUNfVElNSU5HX1VIU19TRFIxMDQ7CisJCWNhcmQtPnN3X2NhcHMudWhzX21heF9kdHIgPSBVSFNfU0RSMTA0X01BWF9EVFI7CisJCWJyZWFrOworCWNhc2UgVUhTX0REUjUwX0JVU19TUEVFRDoKKwkJdGltaW5nID0gTU1DX1RJTUlOR19VSFNfRERSNTA7CisJCWNhcmQtPnN3X2NhcHMudWhzX21heF9kdHIgPSBVSFNfRERSNTBfTUFYX0RUUjsKKwkJYnJlYWs7CisJY2FzZSBVSFNfU0RSNTBfQlVTX1NQRUVEOgorCQl0aW1pbmcgPSBNTUNfVElNSU5HX1VIU19TRFI1MDsKKwkJY2FyZC0+c3dfY2Fwcy51aHNfbWF4X2R0ciA9IFVIU19TRFI1MF9NQVhfRFRSOworCQlicmVhazsKKwljYXNlIFVIU19TRFIyNV9CVVNfU1BFRUQ6CisJCXRpbWluZyA9IE1NQ19USU1JTkdfVUhTX1NEUjI1OworCQljYXJkLT5zd19jYXBzLnVoc19tYXhfZHRyID0gVUhTX1NEUjI1X01BWF9EVFI7CisJCWJyZWFrOworCWNhc2UgVUhTX1NEUjEyX0JVU19TUEVFRDoKKwkJdGltaW5nID0gTU1DX1RJTUlOR19VSFNfU0RSMTI7CisJCWNhcmQtPnN3X2NhcHMudWhzX21heF9kdHIgPSBVSFNfU0RSMTJfTUFYX0RUUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CiAJfQogCi0JY2FyZC0+c2RfYnVzX3NwZWVkID0gYnVzX3NwZWVkOwotCWVyciA9IG1tY19zZF9zd2l0Y2goY2FyZCwgMSwgMCwgYnVzX3NwZWVkLCBzdGF0dXMpOworCWVyciA9IG1tY19zZF9zd2l0Y2goY2FyZCwgMSwgMCwgY2FyZC0+c2RfYnVzX3NwZWVkLCBzdGF0dXMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoKHN0YXR1c1sxNl0gJiAweEYpICE9IGJ1c19zcGVlZCkKKwlpZiAoKHN0YXR1c1sxNl0gJiAweEYpICE9IGNhcmQtPnNkX2J1c19zcGVlZCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFByb2JsZW0gc2V0dGluZyBidXMgc3BlZWQgbW9kZSFcbiIsCiAJCQltbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCkpOwogCWVsc2UgewpAQCAtNjE4LDE4ICs2MzcsMjQgQEAKIAkJbW1jX3NldF9idXNfd2lkdGgoY2FyZC0+aG9zdCwgTU1DX0JVU19XSURUSF80KTsKIAl9CiAKKwkvKgorCSAqIFNlbGVjdCB0aGUgYnVzIHNwZWVkIG1vZGUgZGVwZW5kaW5nIG9uIGhvc3QKKwkgKiBhbmQgY2FyZCBjYXBhYmlsaXR5LgorCSAqLworCXNkX3VwZGF0ZV9idXNfc3BlZWRfbW9kZShjYXJkKTsKKwogCS8qIFNldCB0aGUgZHJpdmVyIHN0cmVuZ3RoIGZvciB0aGUgY2FyZCAqLwogCWVyciA9IHNkX3NlbGVjdF9kcml2ZXJfdHlwZShjYXJkLCBzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JLyogU2V0IGJ1cyBzcGVlZCBtb2RlIG9mIHRoZSBjYXJkICovCi0JZXJyID0gc2Rfc2V0X2J1c19zcGVlZF9tb2RlKGNhcmQsIHN0YXR1cyk7CisJLyogU2V0IGN1cnJlbnQgbGltaXQgZm9yIHRoZSBjYXJkICovCisJZXJyID0gc2Rfc2V0X2N1cnJlbnRfbGltaXQoY2FyZCwgc3RhdHVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCS8qIFNldCBjdXJyZW50IGxpbWl0IGZvciB0aGUgY2FyZCAqLwotCWVyciA9IHNkX3NldF9jdXJyZW50X2xpbWl0KGNhcmQsIHN0YXR1cyk7CisJLyogU2V0IGJ1cyBzcGVlZCBtb2RlIG9mIHRoZSBjYXJkICovCisJZXJyID0gc2Rfc2V0X2J1c19zcGVlZF9tb2RlKGNhcmQsIHN0YXR1cyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCmluZGV4IDc3ZjBiNmIuLmZmMGY3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYwpAQCAtNjIsNyArNjIsNyBAQAogCiAJdTMyCQlkZXMxOwkvKiBCdWZmZXIgc2l6ZXMgKi8KICNkZWZpbmUgSURNQUNfU0VUX0JVRkZFUjFfU0laRShkLCBzKSBcCi0JKChkKS0+ZGVzMSA9ICgoZCktPmRlczEgJiAweDAzZmZjMDAwKSB8ICgocykgJiAweDNmZmYpKQorCSgoZCktPmRlczEgPSAoKGQpLT5kZXMxICYgMHgwM2ZmZTAwMCkgfCAoKHMpICYgMHgxZmZmKSkKIAogCXUzMgkJZGVzMjsJLyogYnVmZmVyIDEgcGh5c2ljYWwgYWRkcmVzcyAqLwogCkBAIC02OTksNyArNjk5LDcgQEAKIAl9CiAKIAkvKiBERFIgbW9kZSBzZXQgKi8KLQlpZiAoaW9zLT5kZHIpIHsKKwlpZiAoaW9zLT50aW1pbmcgPT0gTU1DX1RJTUlOR19VSFNfRERSNTApIHsKIAkJcmVncyA9IG1jaV9yZWFkbChzbG90LT5ob3N0LCBVSFNfUkVHKTsKIAkJcmVncyB8PSAoMHgxIDw8IHNsb3QtPmlkKSA8PCAxNjsKIAkJbWNpX3dyaXRlbChzbG90LT5ob3N0LCBVSFNfUkVHLCByZWdzKTsKQEAgLTE2NDYsNyArMTY0Niw3IEBACiAJCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJaWYgKGhvc3QtPnBkYXRhLT5xdWlya3MgJiBEV19NQ0lfUVVJUktfSElHSFNQRUVEKQotCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRF9ISUdIU1BFRUQ7CisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKIAogI2lmZGVmIENPTkZJR19NTUNfRFdfSURNQUMKIAltbWMtPm1heF9zZWdzID0gaG9zdC0+cmluZ19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKaW5kZXggOWViZmI0Yi4uNGRjMDAyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KQEAgLTI3LDYgKzI4LDcgQEAKICNpbmNsdWRlICJzZGhjaS1wbHRmbS5oIgogI2luY2x1ZGUgInNkaGNpLWVzZGhjLmgiCiAKKyNkZWZpbmUJU0RIQ0lfQ1RSTF9EM0NECQkJMHgwOAogLyogVkVORE9SIFNQRUMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgU0RIQ0lfVkVORE9SX1NQRUMJCTB4QzAKICNkZWZpbmUgIFNESENJX1ZFTkRPUl9TUEVDX1NESU9fUVVJUksJMHgwMDAwMDAwMgpAQCAtMTQxLDEzICsxNDMsMzIgQEAKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CiAJc3RydWN0IHBsdGZtX2lteF9kYXRhICppbXhfZGF0YSA9IHBsdGZtX2hvc3QtPnByaXY7CiAJc3RydWN0IGVzZGhjX3BsYXRmb3JtX2RhdGEgKmJvYXJkZGF0YSA9ICZpbXhfZGF0YS0+Ym9hcmRkYXRhOworCXUzMiBkYXRhOwogCi0JaWYgKHVubGlrZWx5KChyZWcgPT0gU0RIQ0lfSU5UX0VOQUJMRSB8fCByZWcgPT0gU0RIQ0lfU0lHTkFMX0VOQUJMRSkKLQkJCSYmIChib2FyZGRhdGEtPmNkX3R5cGUgPT0gRVNESENfQ0RfR1BJTykpKQotCQkvKgotCQkgKiB0aGVzZSBpbnRlcnJ1cHRzIHdvbid0IHdvcmsgd2l0aCBhIGN1c3RvbSBjYXJkX2RldGVjdCBncGlvCi0JCSAqLwotCQl2YWwgJj0gfihTREhDSV9JTlRfQ0FSRF9SRU1PVkUgfCBTREhDSV9JTlRfQ0FSRF9JTlNFUlQpOworCWlmICh1bmxpa2VseShyZWcgPT0gU0RIQ0lfSU5UX0VOQUJMRSB8fCByZWcgPT0gU0RIQ0lfU0lHTkFMX0VOQUJMRSkpIHsKKwkJaWYgKGJvYXJkZGF0YS0+Y2RfdHlwZSA9PSBFU0RIQ19DRF9HUElPKQorCQkJLyoKKwkJCSAqIFRoZXNlIGludGVycnVwdHMgd29uJ3Qgd29yayB3aXRoIGEgY3VzdG9tCisJCQkgKiBjYXJkX2RldGVjdCBncGlvIChvbmx5IGFwcGxpZWQgdG8gbXgyNS8zNSkKKwkJCSAqLworCQkJdmFsICY9IH4oU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFIHwgU0RIQ0lfSU5UX0NBUkRfSU5TRVJUKTsKKworCQlpZiAodmFsICYgU0RIQ0lfSU5UX0NBUkRfSU5UKSB7CisJCQkvKgorCQkJICogQ2xlYXIgYW5kIHRoZW4gc2V0IEQzQ0QgYml0IHRvIGF2b2lkIG1pc3NpbmcgdGhlCisJCQkgKiBjYXJkIGludGVycnVwdC4gIFRoaXMgaXMgYSBlU0RIQyBjb250cm9sbGVyIHByb2JsZW0KKwkJCSAqIHNvIHdlIG5lZWQgdG8gYXBwbHkgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kOiBjbGVhcgorCQkJICogYW5kIHNldCBEM0NEIGJpdCB3aWxsIG1ha2UgZVNESEMgcmUtc2FtcGxlIHRoZSBjYXJkCisJCQkgKiBpbnRlcnJ1cHQuIEluIGNhc2UgYSBjYXJkIGludGVycnVwdCB3YXMgbG9zdCwKKwkJCSAqIHJlLXNhbXBsZSBpdCBieSB0aGUgZm9sbG93aW5nIHN0ZXBzLgorCQkJICovCisJCQlkYXRhID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwkJCWRhdGEgJj0gflNESENJX0NUUkxfRDNDRDsKKwkJCXdyaXRlbChkYXRhLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCQkJZGF0YSB8PSBTREhDSV9DVFJMX0QzQ0Q7CisJCQl3cml0ZWwoZGF0YSwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwkJfQorCX0KIAogCWlmICh1bmxpa2VseSgoaW14X2RhdGEtPmZsYWdzICYgRVNESENfRkxBR19NVUxUSUJMS19OT19JTlQpCiAJCQkJJiYgKHJlZyA9PSBTREhDSV9JTlRfU1RBVFVTKQpAQCAtMjE3LDggKzIzOCwxMCBAQAogCQkgKi8KIAkJcmV0dXJuOwogCWNhc2UgU0RIQ0lfSE9TVF9DT05UUk9MOgotCQkvKiBGU0wgbWVzc2VkIHVwIGhlcmUsIHNvIHdlIGNhbiBqdXN0IGtlZXAgdGhvc2UgdHdvICovCi0JCW5ld192YWwgPSB2YWwgJiAoU0RIQ0lfQ1RSTF9MRUQgfCBTREhDSV9DVFJMXzRCSVRCVVMpOworCQkvKiBGU0wgbWVzc2VkIHVwIGhlcmUsIHNvIHdlIGNhbiBqdXN0IGtlZXAgdGhvc2UgdGhyZWUgKi8KKwkJbmV3X3ZhbCA9IHZhbCAmIChTREhDSV9DVFJMX0xFRCB8IFwKKwkJCQlTREhDSV9DVFJMXzRCSVRCVVMgfCBcCisJCQkJU0RIQ0lfQ1RSTF9EM0NEKTsKIAkJLyogZW5zdXJlIHRoZSBlbmRpYW5lc3MgKi8KIAkJbmV3X3ZhbCB8PSBFU0RIQ19IT1NUX0NPTlRST0xfTEU7CiAJCS8qIERNQSBtb2RlIGJpdHMgYXJlIHNoaWZ0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwppbmRleCA0MTk4ZGJiLi5mYzdlNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCkBAIC0xOTUsNyArMTk1LDggQEAKIAljbGtfZW5hYmxlKGNsayk7CiAKIAlob3N0LT5xdWlya3MgPSBTREhDSV9RVUlSS19CUk9LRU5fVElNRU9VVF9WQUwKLQkJfCBTREhDSV9RVUlSS19OT19FTkRBVFRSX0lOX05PUERFU0M7CisJCXwgU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDCisJCXwgU0RIQ0lfUVVJUktfMzJCSVRfQURNQV9TSVpFOwogCiAJLyogZW5hYmxlIDEvOFYgRERSIGNhcGFibGUgKi8KIAlob3N0LT5tbWMtPmNhcHMgfD0gTU1DX0NBUF8xXzhWX0REUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCmluZGV4IDQ2MGZmYWYuLmZlODg2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KIApAQCAtMzAxLDYgKzMwMiw4IEBACiAJCWN0cmwgJj0gflNESENJX0NUUkxfOEJJVEJVUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF80QklUQlVTOworCQljdHJsICY9IH5TREhDSV9DVFJMXzhCSVRCVVM7CiAJCWJyZWFrOwogCX0KIApAQCAtNTAyLDYgKzUwNSw5IEBACiAJLyogVGhpcyBob3N0IHN1cHBvcnRzIHRoZSBBdXRvIENNRDEyICovCiAJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX01VTFRJQkxPQ0tfUkVBRF9BQ01EMTI7CiAKKwkvKiBTYW1zdW5nIFNvQ3MgbmVlZCBCUk9LRU5fQURNQV9aRVJPTEVOX0RFU0MgKi8KKwlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfQlJPS0VOX0FETUFfWkVST0xFTl9ERVNDOworCiAJaWYgKHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9OT05FIHx8CiAJICAgIHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9QRVJNQU5FTlQpCiAJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT047CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggYzMxYTMzNC4uMGUwMmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtNjI4LDEyICs2MjgsMTEgQEAKIAkvKiB0aW1lb3V0IGluIHVzICovCiAJaWYgKCFkYXRhKQogCQl0YXJnZXRfdGltZW91dCA9IGNtZC0+Y21kX3RpbWVvdXRfbXMgKiAxMDAwOwotCWVsc2UKLQkJdGFyZ2V0X3RpbWVvdXQgPSBkYXRhLT50aW1lb3V0X25zIC8gMTAwMCArCi0JCQlkYXRhLT50aW1lb3V0X2Nsa3MgLyBob3N0LT5jbG9jazsKLQotCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSykKLQkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5jbG9jayAvIDEwMDA7CisJZWxzZSB7CisJCXRhcmdldF90aW1lb3V0ID0gZGF0YS0+dGltZW91dF9ucyAvIDEwMDA7CisJCWlmIChob3N0LT5jbG9jaykKKwkJCXRhcmdldF90aW1lb3V0ICs9IGRhdGEtPnRpbWVvdXRfY2xrcyAvIGhvc3QtPmNsb2NrOworCX0KIAogCS8qCiAJICogRmlndXJlIG91dCBuZWVkZWQgY3ljbGVzLgpAQCAtNjQ1LDcgKzY0NCw2IEBACiAJICogICAgID0+CiAJICogICAgICgxKSAvICgyKSA+IDJeNgogCSAqLwotCUJVR19PTighaG9zdC0+dGltZW91dF9jbGspOwogCWNvdW50ID0gMDsKIAljdXJyZW50X3RpbWVvdXQgPSAoMSA8PCAxMykgKiAxMDAwIC8gaG9zdC0+dGltZW91dF9jbGs7CiAJd2hpbGUgKGN1cnJlbnRfdGltZW91dCA8IHRhcmdldF90aW1lb3V0KSB7CkBAIC0xODY3LDkgKzE4NjUsNiBAQAogCiAJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CiAKLQlpZiAoaG9zdC0+dmVyc2lvbiA+PSBTREhDSV9TUEVDXzMwMCkKLQkJZGVsX3RpbWVyKCZob3N0LT50dW5pbmdfdGltZXIpOwotCiAJbXJxID0gaG9zdC0+bXJxOwogCiAJLyoKQEAgLTI0NjEsMjIgKzI0NTYsNiBAQAogCQlob3N0LT5tYXhfY2xrID0gaG9zdC0+b3BzLT5nZXRfbWF4X2Nsb2NrKGhvc3QpOwogCX0KIAotCWhvc3QtPnRpbWVvdXRfY2xrID0KLQkJKGNhcHNbMF0gJiBTREhDSV9USU1FT1VUX0NMS19NQVNLKSA+PiBTREhDSV9USU1FT1VUX0NMS19TSElGVDsKLQlpZiAoaG9zdC0+dGltZW91dF9jbGsgPT0gMCkgewotCQlpZiAoaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jaykgewotCQkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKGhvc3QpOwotCQl9IGVsc2UgaWYgKCEoaG9zdC0+cXVpcmtzICYKLQkJCQlTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSykpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgotCQkJICAgICAgICJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQlpZiAoY2Fwc1swXSAmIFNESENJX1RJTUVPVVRfQ0xLX1VOSVQpCi0JCWhvc3QtPnRpbWVvdXRfY2xrICo9IDEwMDA7Ci0KIAkvKgogCSAqIEluIGNhc2Ugb2YgSG9zdCBDb250cm9sbGVyIHYzLjAwLCBmaW5kIG91dCB3aGV0aGVyIGNsb2NrCiAJICogbXVsdGlwbGllciBpcyBzdXBwb3J0ZWQuCkBAIC0yNTA5LDEwICsyNDg4LDI2IEBACiAJfSBlbHNlCiAJCW1tYy0+Zl9taW4gPSBob3N0LT5tYXhfY2xrIC8gU0RIQ0lfTUFYX0RJVl9TUEVDXzIwMDsKIAorCWhvc3QtPnRpbWVvdXRfY2xrID0KKwkJKGNhcHNbMF0gJiBTREhDSV9USU1FT1VUX0NMS19NQVNLKSA+PiBTREhDSV9USU1FT1VUX0NMS19TSElGVDsKKwlpZiAoaG9zdC0+dGltZW91dF9jbGsgPT0gMCkgeworCQlpZiAoaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jaykgeworCQkJaG9zdC0+dGltZW91dF9jbGsgPSBob3N0LT5vcHMtPmdldF90aW1lb3V0X2Nsb2NrKGhvc3QpOworCQl9IGVsc2UgaWYgKCEoaG9zdC0+cXVpcmtzICYKKwkJCQlTREhDSV9RVUlSS19EQVRBX1RJTUVPVVRfVVNFU19TRENMSykpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgorCQkJICAgICAgICJmcmVxdWVuY3kuXG4iLCBtbWNfaG9zdG5hbWUobW1jKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwlpZiAoY2Fwc1swXSAmIFNESENJX1RJTUVPVVRfQ0xLX1VOSVQpCisJCWhvc3QtPnRpbWVvdXRfY2xrICo9IDEwMDA7CisKIAlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfREFUQV9USU1FT1VUX1VTRVNfU0RDTEspCi0JCW1tYy0+bWF4X2Rpc2NhcmRfdG8gPSAoMSA8PCAyNykgLyAobW1jLT5mX21heCAvIDEwMDApOwotCWVsc2UKLQkJbW1jLT5tYXhfZGlzY2FyZF90byA9ICgxIDw8IDI3KSAvIGhvc3QtPnRpbWVvdXRfY2xrOworCQlob3N0LT50aW1lb3V0X2NsayA9IG1tYy0+Zl9tYXggLyAxMDAwOworCisJbW1jLT5tYXhfZGlzY2FyZF90byA9ICgxIDw8IDI3KSAvIGhvc3QtPnRpbWVvdXRfY2xrOwogCiAJbW1jLT5jYXBzIHw9IE1NQ19DQVBfU0RJT19JUlEgfCBNTUNfQ0FQX0VSQVNFIHwgTU1DX0NBUF9DTUQyMzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jCmluZGV4IDc3NGY2NDMuLjBjNGE2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2hfbW9iaWxlX3NkaGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NoX21vYmlsZV9zZGhpLmMKQEAgLTEyMCwxMSArMTIwLDExIEBACiAJbW1jX2RhdGEtPmhjbGsgPSBjbGtfZ2V0X3JhdGUocHJpdi0+Y2xrKTsKIAltbWNfZGF0YS0+c2V0X3B3ciA9IHNoX21vYmlsZV9zZGhpX3NldF9wd3I7CiAJbW1jX2RhdGEtPmdldF9jZCA9IHNoX21vYmlsZV9zZGhpX2dldF9jZDsKLQlpZiAobW1jX2RhdGEtPmZsYWdzICYgVE1JT19NTUNfSEFTX0lETEVfV0FJVCkKLQkJbW1jX2RhdGEtPndyaXRlMTZfaG9vayA9IHNoX21vYmlsZV9zZGhpX3dyaXRlMTZfaG9vazsKIAltbWNfZGF0YS0+Y2FwYWJpbGl0aWVzID0gTU1DX0NBUF9NTUNfSElHSFNQRUVEOwogCWlmIChwKSB7CiAJCW1tY19kYXRhLT5mbGFncyA9IHAtPnRtaW9fZmxhZ3M7CisJCWlmIChtbWNfZGF0YS0+ZmxhZ3MgJiBUTUlPX01NQ19IQVNfSURMRV9XQUlUKQorCQkJbW1jX2RhdGEtPndyaXRlMTZfaG9vayA9IHNoX21vYmlsZV9zZGhpX3dyaXRlMTZfaG9vazsKIAkJbW1jX2RhdGEtPm9jcl9tYXNrID0gcC0+dG1pb19vY3JfbWFzazsKIAkJbW1jX2RhdGEtPmNhcGFiaWxpdGllcyB8PSBwLT50bWlvX2NhcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCA4ZDE4NWRlLi40NGE5NjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC0yNyw3ICsyNyw2IEBACiBzdGF0aWMgaW50IHRtaW9fbW1jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJY29uc3Qgc3RydWN0IG1mZF9jZWxsICpjZWxsID0gbWZkX2dldF9jZWxsKGRldik7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CiAKIAlyZXQgPSB0bWlvX21tY19ob3N0X3N1c3BlbmQoJmRldi0+ZGV2KTsKQEAgLTQyLDcgKzQxLDYgQEAKIHN0YXRpYyBpbnQgdG1pb19tbWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBtZmRfZ2V0X2NlbGwoZGV2KTsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBUZWxsIHRoZSBNRkQgY29yZSB3ZSBhcmUgcmVhZHkgdG8gYmUgZW5hYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmggYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaAppbmRleCA2NWI1Yjc2Li42NGZiYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuaAorKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaApAQCAtMTgxLDcgKzE4MSw3IEBACiAKICNkZWZpbmUgdWJpX2RiZ19tc2coZm10LCAuLi4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWlmICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJcHJfZGVidWcoZm10ICJcbiIsICMjX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgZm10ICJcbiIsICMjX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZGJnX21zZyhmbXQsIC4uLikgIHViaV9kYmdfbXNnKGZtdCwgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwppbmRleCA1MmZlMjFlLi4zYjE0MTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCkBAIC0zMDgsOCArMzA4LDExIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgbG5rc3RhdCwgY2FycmllcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNoaXBfbG9jaywgZmxhZ3MpOwogCWxua3N0YXQgPSByZWFkX2lyZWcoZGV2LT5iYXNlX2FkZHIsIElTQUxFRDApICYgSVNBTEVEMF9MTktTVDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jaGlwX2xvY2ssIGZsYWdzKTsKIAljYXJyaWVyID0gbmV0aWZfY2Fycmllcl9vayhkZXYpOwogCiAJaWYgKGxua3N0YXQgJiYgIWNhcnJpZXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggNWIwZGJhNi4uMzdlNTc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTYzLDggKzYzLDkgQEAKIAlmcC0+ZGlzYWJsZV90cGEgPSAoKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgPT0gMCk7CiAKICNpZmRlZiBCQ01fQ05JQwotCS8qIFdlIGRvbid0IHdhbnQgVFBBIG9uIEZDb0UsIEZXRCBhbmQgT09PIEwyIHJpbmdzICovCi0JYm54MnhfZmNvZShicCwgZGlzYWJsZV90cGEpID0gMTsKKwkvKiBXZSBkb24ndCB3YW50IFRQQSBvbiBhbiBGQ29FIEwyIHJpbmcgKi8KKwlpZiAoSVNfRkNPRV9GUChmcCkpCisJCWZwLT5kaXNhYmxlX3RwYSA9IDE7CiAjZW5kaWYKIH0KIApAQCAtMTQwNCwxMCArMTQwNSw5IEBACiB1MTYgYm54Mnhfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKICNpZmRlZiBCQ01fQ05JQwotCWlmIChOT19GQ09FKGJwKSkKLQkJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKLQllbHNlIHsKKwlpZiAoIU5PX0ZDT0UoYnApKSB7CiAJCXN0cnVjdCBldGhoZHIgKmhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwogCQl1MTYgZXRoZXJfdHlwZSA9IG50b2hzKGhkci0+aF9wcm90byk7CiAKQEAgLTE0MjQsOCArMTQyNCw3IEBACiAJCQlyZXR1cm4gYm54MnhfZmNvZV90eChicCwgdHhxX2luZGV4KTsKIAl9CiAjZW5kaWYKLQkvKiBTZWxlY3QgYSBub25lLUZDb0UgcXVldWU6ICBpZiBGQ29FIGlzIGVuYWJsZWQsIGV4Y2x1ZGUgRkNvRSBMMiByaW5nCi0JICovCisJLyogc2VsZWN0IGEgbm9uLUZDb0UgcXVldWUgKi8KIAlyZXR1cm4gX19za2JfdHhfaGFzaChkZXYsIHNrYiwgQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApKTsKIH0KIApAQCAtMTQ0OCw2ICsxNDQ3LDI4IEBACiAJYnAtPm51bV9xdWV1ZXMgKz0gTk9OX0VUSF9DT05URVhUX1VTRTsKIH0KIAorLyoqCisgKiBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzIC0gY29uZmlndXJlIG5ldGRldi0+cmVhbF9udW1fW3R4LHJ4XV9xdWV1ZXMKKyAqCisgKiBAYnA6CQlEcml2ZXIgaGFuZGxlCisgKgorICogV2UgY3VycmVudGx5IHN1cHBvcnQgZm9yIGF0IG1vc3QgMTYgVHggcXVldWVzIGZvciBlYWNoIENvUyB0aHVzIHdlIHdpbGwKKyAqIGFsbG9jYXRlIGEgbXVsdGlwbGUgb2YgMTYgZm9yIEVUSCBMMiByaW5ncyBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQorICogYnAtPm1heF9jb3MuCisgKgorICogSWYgdGhlcmUgaXMgYW4gRkNvRSBMMiBxdWV1ZSB0aGUgYXBwcm9wcmlhdGUgVHggcXVldWUgd2lsbCBoYXZlIHRoZSBuZXh0CisgKiBpbmRleCBhZnRlciBhbGwgRVRIIEwyIGluZGljZXMuCisgKgorICogSWYgdGhlIGFjdHVhbCBudW1iZXIgb2YgVHggcXVldWVzIChmb3IgZWFjaCBDb1MpIGlzIGxlc3MgdGhhbiAxNiB0aGVuIHRoZXJlCisgKiB3aWxsIGJlIHRoZSBob2xlcyBhdCB0aGUgZW5kIG9mIGVhY2ggZ3JvdXAgb2YgMTYgRVRoIEwyIGluZGljZXMgKDAuLjE1LAorICogMTYuLjMxLC4uLikgd2l0aCBpbmRpY2llcyB0aGF0IGFyZSBub3QgY291cGxlZCB3aXRoIGFueSByZWFsIFR4IHF1ZXVlLgorICoKKyAqIFRoZSBwcm9wZXIgY29uZmlndXJhdGlvbiBvZiBza2ItPnF1ZXVlX21hcHBpbmcgaXMgaGFuZGxlZCBieQorICogYm54Mnhfc2VsZWN0X3F1ZXVlKCkgYW5kIF9fc2tiX3R4X2hhc2goKS4KKyAqCisgKiBibngyeF9zZXR1cF90YygpIHRha2VzIGNhcmUgb2YgdGhlIHByb3BlciBUQyBtYXBwaW5ncyBzbyB0aGF0IF9fc2tiX3R4X2hhc2goKQorICogd2lsbCByZXR1cm4gYSBwcm9wZXIgVHggaW5kZXggaWYgVEMgaXMgZW5hYmxlZCAobmV0ZGV2LT5udW1fdGMgPiAwKS4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgYm54Mnhfc2V0X3JlYWxfbnVtX3F1ZXVlcyhzdHJ1Y3QgYm54MnggKmJwKQogewogCWludCByYywgdHgsIHJ4OwpAQCAtMTk4OSwxNCArMjAxMCwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKgorCSAqIEl0J3MgaW1wb3J0YW50IHRvIHNldCB0aGUgYnAtPnN0YXRlIHRvIHRoZSB2YWx1ZSBkaWZmZXJlbnQgZnJvbQorCSAqIEJOWDJYX1NUQVRFX09QRU4gYW5kIG9ubHkgdGhlbiBzdG9wIHRoZSBUeC4gT3RoZXJ3aXNlIGJueDJ4X3R4X2ludCgpCisJICogbWF5IHJlc3RhcnQgdGhlIFR4IGZyb20gdGhlIE5BUEkgY29udGV4dCAoc2VlIGJueDJ4X3R4X2ludCgpKS4KKwkgKi8KKwlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7CisJc21wX21iKCk7CisKIAkvKiBTdG9wIFR4ICovCiAJYm54MnhfdHhfZGlzYWJsZShicCk7CiAKICNpZmRlZiBCQ01fQ05JQwogCWJueDJ4X2NuaWNfbm90aWZ5KGJwLCBDTklDX0NUTF9TVE9QX0NNRCk7CiAjZW5kaWYKLQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7Ci0Jc21wX21iKCk7CiAKIAlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuYwppbmRleCBhNGVhMzVmLi5hMWUwMDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuYwpAQCAtOTIwLDcgKzkyMCw3IEBACiAKIHZvaWQgYm54MnhfZGNieF9zZXRfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgYm9vbCBkY2Jfb24sIHUzMiBkY2J4X2VuYWJsZWQpCiB7Ci0JaWYgKCFDSElQX0lTX0UxeChicCkpIHsKKwlpZiAoIUNISVBfSVNfRTF4KGJwKSAmJiAhQ0hJUF9JU19FMyhicCkpIHsKIAkJYnAtPmRjYl9zdGF0ZSA9IGRjYl9vbjsKIAkJYnAtPmRjYnhfZW5hYmxlZCA9IGRjYnhfZW5hYmxlZDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAppbmRleCAwNjcyN2YzLi5kYzI0ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9oc2kuaApAQCAtMTIwNCw2ICsxMjA0LDggQEAKIAogCSNkZWZpbmUgTElOS19TVEFUVVNfUEZDX0VOQUJMRUQJCQkJMHgyMDAwMDAwMAogCisJI2RlZmluZSBMSU5LX1NUQVRVU19QSFlTSUNBTF9MSU5LX0ZMQUcJCQkweDQwMDAwMDAwCisKIAl1MzIgcG9ydF9zdHg7CiAKIAl1MzIgc3RhdF9uaWdfdGltZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKaW5kZXggYmNkOGYwMC4uZDQ1YjE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwpAQCAtMTU0Niw2ICsxNTQ2LDEyIEBACiAJCQkgICAgICAgdmFycy0+bGluZV9zcGVlZCk7CiAJCWJyZWFrOwogCX0KKwlpZiAoISh2YXJzLT5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfVFgpKQorCQl2YWwgfD0gVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfSUdOT1JFX1RYX1BBVVNFOworCisJaWYgKCEodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSkKKwkJdmFsIHw9IFVNQUNfQ09NTUFORF9DT05GSUdfUkVHX1BBVVNFX0lHTk9SRTsKKwogCVJFR19XUihicCwgdW1hY19iYXNlICsgVU1BQ19SRUdfQ09NTUFORF9DT05GSUcsIHZhbCk7CiAJdWRlbGF5KDUwKTsKIApAQCAtMTY2MSwxMCArMTY2NywyMCBAQAogewogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTMyIHhtYWNfYmFzZSA9IChwb3J0KSA/IEdSQ0JBU0VfWE1BQzEgOiBHUkNCQVNFX1hNQUMwOworCXUzMiBwZmNfY3RybCwgeG1hY19iYXNlID0gKHBvcnQpID8gR1JDQkFTRV9YTUFDMSA6IEdSQ0JBU0VfWE1BQzA7CiAKIAlpZiAoUkVHX1JEKGJwLCBNSVNDX1JFR19SRVNFVF9SRUdfMikgJgogCSAgICBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9YTUFDKSB7CisJCS8qCisJCSAqIFNlbmQgYW4gaW5kaWNhdGlvbiB0byBjaGFuZ2UgdGhlIHN0YXRlIGluIHRoZSBOSUcgYmFjayB0byBYT04KKwkJICogQ2xlYXJpbmcgdGhpcyBiaXQgZW5hYmxlcyB0aGUgbmV4dCBzZXQgb2YgdGhpcyBiaXQgdG8gZ2V0CisJCSAqIHJpc2luZyBlZGdlCisJCSAqLworCQlwZmNfY3RybCA9IFJFR19SRChicCwgeG1hY19iYXNlICsgWE1BQ19SRUdfUEZDX0NUUkxfSEkpOworCQlSRUdfV1IoYnAsIHhtYWNfYmFzZSArIFhNQUNfUkVHX1BGQ19DVFJMX0hJLAorCQkgICAgICAgKHBmY19jdHJsICYgfigxPDwxKSkpOworCQlSRUdfV1IoYnAsIHhtYWNfYmFzZSArIFhNQUNfUkVHX1BGQ19DVFJMX0hJLAorCQkgICAgICAgKHBmY19jdHJsIHwgKDE8PDEpKSk7CiAJCURQKE5FVElGX01TR19MSU5LLCAiRGlzYWJsZSBYTUFDIG9uIHBvcnQgJXhcbiIsIHBvcnQpOwogCQlSRUdfV1IoYnAsIHhtYWNfYmFzZSArIFhNQUNfUkVHX0NUUkwsIDApOwogCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMCk7CkBAIC0xNzI5LDYgKzE3NDUsMTAgQEAKIAogCURQKE5FVElGX01TR19MSU5LLCAiZW5hYmxpbmcgRU1BQ1xuIik7CiAKKwkvKiBEaXNhYmxlIEJNQUMgKi8KKwlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLAorCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBvcnQpKTsKKwogCS8qIGVuYWJsZSBlbWFjIGFuZCBub3QgYm1hYyAqLwogCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVCArIHBvcnQqNCwgMSk7CiAKQEAgLTI1ODMsMTIgKzI2MDMsNiBAQAogCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfTExGQ19NU0dfRkxEUywKIAkJICAgIHdiX2RhdGEsIDIpOwogCi0JaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9UWF9FUlJPUl9DSEVDS19GTEFHKSB7Ci0JCVJFR19SRF9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfUlhfTFNTX1NUQVRVUywKLQkJCSAgICB3Yl9kYXRhLCAyKTsKLQkJaWYgKHdiX2RhdGFbMF0gPiAwKQotCQkJcmV0dXJuIC1FU1JDSDsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NTQsMTYgKzI2NjgsNiBAQAogCXVkZWxheSgzMCk7CiAJYm54MnhfdXBkYXRlX3BmY19ibWFjMihwYXJhbXMsIHZhcnMsIGlzX2xiKTsKIAotCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfVFhfRVJST1JfQ0hFQ0tfRkxBRykgewotCQlSRUdfUkRfRE1BRShicCwgYm1hY19hZGRyICsgQklHTUFDMl9SRUdJU1RFUl9SWF9MU1NfU1RBVCwKLQkJCSAgICB3Yl9kYXRhLCAyKTsKLQkJaWYgKHdiX2RhdGFbMF0gPiAwKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIkdvdCBiYWQgTFNTIHN0YXR1cyAweCV4XG4iLAotCQkJCSAgICAgICB3Yl9kYXRhWzBdKTsKLQkJCXJldHVybiAtRVNSQ0g7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk0OSw3ICsyOTUzLDkgQEAKIAl1MzIgdmFsOwogCXUxNiBpOwogCWludCByYyA9IDA7Ci0KKwlpZiAocGh5LT5mbGFncyAmIEZMQUdTX01EQ19NRElPX1dBX0IwKQorCQlibngyeF9iaXRzX2VuKGJwLCBwaHktPm1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19TVEFUVVMsCisJCQkgICAgICBFTUFDX01ESU9fU1RBVFVTXzEwTUIpOwogCS8qIGFkZHJlc3MgKi8KIAl2YWwgPSAoKHBoeS0+YWRkciA8PCAyMSkgfCAoZGV2YWQgPDwgMTYpIHwgcmVnIHwKIAkgICAgICAgRU1BQ19NRElPX0NPTU1fQ09NTUFORF9BRERSRVNTIHwKQEAgLTMwMDMsNiArMzAwOSw5IEBACiAJCX0KIAl9CiAKKwlpZiAocGh5LT5mbGFncyAmIEZMQUdTX01EQ19NRElPX1dBX0IwKQorCQlibngyeF9iaXRzX2RpcyhicCwgcGh5LT5tZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fU1RBVFVTLAorCQkJICAgICAgIEVNQUNfTURJT19TVEFUVVNfMTBNQik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMDEyLDYgKzMwMjEsOSBAQAogCXUzMiB0bXA7CiAJdTggaTsKIAlpbnQgcmMgPSAwOworCWlmIChwaHktPmZsYWdzICYgRkxBR1NfTURDX01ESU9fV0FfQjApCisJCWJueDJ4X2JpdHNfZW4oYnAsIHBoeS0+bWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX1NUQVRVUywKKwkJCSAgICAgIEVNQUNfTURJT19TVEFUVVNfMTBNQik7CiAKIAkvKiBhZGRyZXNzICovCiAKQEAgLTMwNjUsNyArMzA3Nyw5IEBACiAJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwgZGV2YWQsIDB4ZiwgJnRlbXBfdmFsKTsKIAkJfQogCX0KLQorCWlmIChwaHktPmZsYWdzICYgRkxBR1NfTURDX01ESU9fV0FfQjApCisJCWJueDJ4X2JpdHNfZGlzKGJwLCBwaHktPm1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19TVEFUVVMsCisJCQkgICAgICAgRU1BQ19NRElPX1NUQVRVU18xME1CKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQzNTMsNiArNDM2Nyw5IEBACiAKIAl2YXJzLT5saW5rX3VwID0gKHZhcnMtPmxpbmtfc3RhdHVzICYgTElOS19TVEFUVVNfTElOS19VUCk7CiAJdmFycy0+cGh5X2ZsYWdzID0gUEhZX1hHWFNfRkxBRzsKKwlpZiAodmFycy0+bGlua19zdGF0dXMgJiBMSU5LX1NUQVRVU19QSFlTSUNBTF9MSU5LX0ZMQUcpCisJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfUEhZU0lDQUxfTElOS19GTEFHOworCiAJaWYgKHZhcnMtPmxpbmtfdXApIHsKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJwaHkgbGluayB1cFxuIik7CiAKQEAgLTQ0NDQsNiArNDQ2MSw4IEBACiAKIAkJLyogaW5kaWNhdGUgbm8gbWFjIGFjdGl2ZSAqLwogCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisJCWlmICh2YXJzLT5saW5rX3N0YXR1cyAmIExJTktfU1RBVFVTX1BIWVNJQ0FMX0xJTktfRkxBRykKKwkJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfSEFMRl9PUEVOX0NPTk5fRkxBRzsKIAl9CiAKIAkvKiBTeW5jIG1lZGlhIHR5cGUgKi8KQEAgLTU5MDMsMjAgKzU5MjIsMzAgQEAKIAkJCQl0bXAgPSBFTUFDX1JEKGJwLCBFTUFDX1JFR19FTUFDX0xFRCk7CiAJCQkJRU1BQ19XUihicCwgRU1BQ19SRUdfRU1BQ19MRUQsCiAJCQkJCSh0bXAgfCBFTUFDX0xFRF9PVkVSUklERSkpOwotCQkJCXJldHVybiByYzsKKwkJCQkvKgorCQkJCSAqIHJldHVybiBoZXJlIHdpdGhvdXQgZW5hYmxpbmcgdHJhZmZpYworCQkJCSAqIExFRCBibGluayBhbmRzZXR0aW5nIHJhdGUgaW4gT04gbW9kZS4KKwkJCQkgKiBJbiBvcGVyIG1vZGUsIGVuYWJsaW5nIExFRCBibGluaworCQkJCSAqIGFuZCBzZXR0aW5nIHJhdGUgaXMgbmVlZGVkLgorCQkJCSAqLworCQkJCWlmIChtb2RlID09IExFRF9NT0RFX09OKQorCQkJCQlyZXR1cm4gcmM7CiAJCQl9Ci0JCX0gZWxzZSBpZiAoU0lOR0xFX01FRElBX0RJUkVDVChwYXJhbXMpICYmCi0JCQkgICAoQ0hJUF9JU19FMXgoYnApIHx8Ci0JCQkgICAgQ0hJUF9JU19FMihicCkpKSB7CisJCX0gZWxzZSBpZiAoU0lOR0xFX01FRElBX0RJUkVDVChwYXJhbXMpKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyBhIHdvcmstYXJvdW5kIGZvciBIVyBpc3N1ZSBmb3VuZCB3aGVuIGxpbmsKIAkJCSAqIGlzIHVwIGluIENMNzMKIAkJCSAqLwotCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9NT0RFX1AwICsgcG9ydCo0LCAwKTsKIAkJCVJFR19XUihicCwgTklHX1JFR19MRURfMTBHX1AwICsgcG9ydCo0LCAxKTsKLQkJfSBlbHNlIHsKKwkJCWlmIChDSElQX0lTX0UxeChicCkgfHwKKwkJCSAgICBDSElQX0lTX0UyKGJwKSB8fAorCQkJICAgIChtb2RlID09IExFRF9NT0RFX09OKSkKKwkJCQlSRUdfV1IoYnAsIE5JR19SRUdfTEVEX01PREVfUDAgKyBwb3J0KjQsIDApOworCQkJZWxzZQorCQkJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwKKwkJCQkgICAgICAgaHdfbGVkX21vZGUpOworCQl9IGVsc2UKIAkJCVJFR19XUihicCwgTklHX1JFR19MRURfTU9ERV9QMCArIHBvcnQqNCwgaHdfbGVkX21vZGUpOwotCQl9CiAKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAgKyBwb3J0KjQsIDApOwogCQkvKiBTZXQgYmxpbmtpbmcgcmF0ZSB0byB+MTUuOUh6ICovCkBAIC02MTYwLDYgKzYxODksNyBAQAogCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCiAJdmFycy0+bGlua19zdGF0dXMgJj0gfihMSU5LX1NUQVRVU19TUEVFRF9BTkRfRFVQTEVYX01BU0sgfAogCQkJICAgICAgIExJTktfU1RBVFVTX0xJTktfVVAgfAorCQkJICAgICAgIExJTktfU1RBVFVTX1BIWVNJQ0FMX0xJTktfRkxBRyB8CiAJCQkgICAgICAgTElOS19TVEFUVVNfQVVUT19ORUdPVElBVEVfQ09NUExFVEUgfAogCQkJICAgICAgIExJTktfU1RBVFVTX1JYX0ZMT1dfQ09OVFJPTF9GTEFHX01BU0sgfAogCQkJICAgICAgIExJTktfU1RBVFVTX1RYX0ZMT1dfQ09OVFJPTF9GTEFHX01BU0sgfApAQCAtNjE5Nyw3ICs2MjI3LDggQEAKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwogCWludCByYyA9IDA7CiAKLQl2YXJzLT5saW5rX3N0YXR1cyB8PSBMSU5LX1NUQVRVU19MSU5LX1VQOworCXZhcnMtPmxpbmtfc3RhdHVzIHw9IChMSU5LX1NUQVRVU19MSU5LX1VQIHwKKwkJCSAgICAgIExJTktfU1RBVFVTX1BIWVNJQ0FMX0xJTktfRkxBRyk7CiAJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9QSFlTSUNBTF9MSU5LX0ZMQUc7CiAKIAlpZiAodmFycy0+Zmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQpAQCAtNzk5OCw2ICs4MDI5LDkgQEAKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwgTURJT19XQ19ERVZBRCwKIAkJCU1ESU9fV0NfUkVHX1VDX0lORk9fQjFfRklSTVdBUkVfTU9ERSwgJnZhbCk7CiAKKwkvKiBSZXN0YXJ0IG1pY3JvY29kZSB0byByZS1yZWFkIHRoZSBuZXcgbW9kZSAqLworCWJueDJ4X3dhcnBjb3JlX3Jlc2V0X2xhbmUoYnAsIHBoeSwgMSk7CisJYm54Mnhfd2FycGNvcmVfcmVzZXRfbGFuZShicCwgcGh5LCAwKTsKIAogfQogCkBAIC04MTE2LDcgKzgxNTAsNiBAQAogCQkJCSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KIAkJCQkJICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCiAJCQkJCSAgY29uZmlnKSk7Ci0KIAkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBncGlvX251bSwKIAkJCQkgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VULAogCQkJCSAgIGdwaW9fcG9ydCk7CkBAIC04MTI1LDggKzgxNTgsOSBAQAogCQkgKiBEaXNhYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZQogCQkgKi8KIAkJcGh5LT5tZWRpYV90eXBlID0gRVRIX1BIWV9OT1RfUFJFU0VOVDsKLQkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KLQkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQlpZiAoKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJICAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUikgfHwKKwkJICAgIENISVBfSVNfRTMoYnApKQogCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihwYXJhbXMsIHBoeSwgMCk7CiAJfQogfQpAQCAtODIyOCw5ICs4MjYyLDYgQEAKIAl1MTYgY250LCB2YWwsIHRtcDE7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAKLQkvKiBTUEYrIFBIWTogU2V0IGZsYWcgdG8gY2hlY2sgZm9yIFR4IGVycm9yICovCi0JdmFycy0+cGh5X2ZsYWdzID0gUEhZX1RYX0VSUk9SX0NIRUNLX0ZMQUc7Ci0KIAlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAogCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwgcGFyYW1zLT5wb3J0KTsKIAkvKiBIVyByZXNldCAqLwpAQCAtODQxNCw5ICs4NDQ1LDYgQEAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAlEUChORVRJRl9NU0dfTElOSywgIkluaXRpYWxpemluZyBCQ004NzI2XG4iKTsKIAotCS8qIFNQRisgUEhZOiBTZXQgZmxhZyB0byBjaGVjayBmb3IgVHggZXJyb3IgKi8KLQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfVFhfRVJST1JfQ0hFQ0tfRkxBRzsKLQogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19DVFJMLCAxPDwxNSk7CiAJYm54Mnhfd2FpdF9yZXNldF9jb21wbGV0ZShicCwgcGh5LCBwYXJhbXMpOwogCkBAIC04NTg1LDkgKzg2MTMsNiBAQAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCS8qIEVuYWJsZSBQTUQgbGluaywgTU9EX0FCU19GTFQsIGFuZCAxRyBsaW5rIGFsYXJtICovCiAKLQkvKiBTUEYrIFBIWTogU2V0IGZsYWcgdG8gY2hlY2sgZm9yIFR4IGVycm9yICovCi0JdmFycy0+cGh5X2ZsYWdzID0gUEhZX1RYX0VSUk9SX0NIRUNLX0ZMQUc7Ci0KIAlibngyeF93YWl0X3Jlc2V0X2NvbXBsZXRlKGJwLCBwaHksIHBhcmFtcyk7CiAJcnhfYWxhcm1fY3RybF92YWwgPSAoMTw8MikgfCAoMTw8NSkgOwogCS8qIFNob3VsZCBiZSAweDYgdG8gZW5hYmxlIFhTIG9uIFR4IHNpZGUuICovCkBAIC05MjQzLDcgKzkyNjgsMTMgQEAKIAlpZiAocGh5LT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQlhdXRvbmVnX3ZhbCB8PSAoMTw8OCk7CiAKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCisJLyoKKwkgKiBBbHdheXMgd3JpdGUgdGhpcyBpZiB0aGlzIGlzIG5vdCA4NDgzMy4KKwkgKiBGb3IgODQ4MzMsIHdyaXRlIGl0IG9ubHkgd2hlbiBpdCdzIGEgZm9yY2VkIHNwZWVkLgorCSAqLworCWlmICgocGh5LT50eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODMzKSB8fAorCQkoKGF1dG9uZWdfdmFsICYgKDE8PDEyKSkgPT0gMCkpCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCSBNRElPX0FOX0RFVkFELAogCQkJIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLCBhdXRvbmVnX3ZhbCk7CiAKQEAgLTkyNTcsMTMgKzkyODgsMTIgQEAKIAkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKIAkJCQkgTURJT19BTl9ERVZBRCwgTURJT19BTl9SRUdfQ1RSTCwKIAkJCQkgMHgzMjAwKTsKLQl9IGVsc2UgaWYgKHBoeS0+cmVxX2xpbmVfc3BlZWQgIT0gU1BFRURfMTAgJiYKLQkJICAgcGh5LT5yZXFfbGluZV9zcGVlZCAhPSBTUEVFRF8xMDApIHsKKwl9IGVsc2UKIAkJYm54MnhfY2w0NV93cml0ZShicCwgcGh5LAogCQkJCSBNRElPX0FOX0RFVkFELAogCQkJCSBNRElPX0FOX1JFR184NDgxXzEwR0JBU0VfVF9BTl9DVFJMLAogCQkJCSAxKTsKLQl9CisKIAkvKiBTYXZlIHNwaXJvbSB2ZXJzaW9uICovCiAJYm54Mnhfc2F2ZV84NDh4eF9zcGlyb21fdmVyc2lvbihwaHksIHBhcmFtcyk7CiAKQEAgLTk3NTYsMTEgKzk3ODYsOSBAQAogCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKIAkJCQlNRElPX0NUTF9ERVZBRCwKIAkJCQkweDQwMGYsICZ2YWwxNik7Ci0JCS8qIFB1dCB0byBsb3cgcG93ZXIgbW9kZSBvbiBuZXdlciBGVyAqLwotCQlpZiAoKHZhbDE2ICYgMHgzMDNmKSA+IDB4MTAwOSkKLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKLQkJCQkJTURJT19QTUFfREVWQUQsCi0JCQkJCU1ESU9fUE1BX1JFR19DVFJMLCAweDgwMCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCQlNRElPX1BNQV9ERVZBRCwKKwkJCQlNRElPX1BNQV9SRUdfQ1RSTCwgMHg4MDApOwogCX0KIH0KIApAQCAtMTAxOTEsOCArMTAyMTksMTUgQEAKIAl1MzIgY2ZnX3BpbjsKIAl1OCBwb3J0OwogCi0JLyogVGhpcyB3b3JrcyB3aXRoIEUzIG9ubHksIG5vIG5lZWQgdG8gY2hlY2sgdGhlIGNoaXAKLQkgICBiZWZvcmUgZGV0ZXJtaW5pbmcgdGhlIHBvcnQuICovCisJLyoKKwkgKiBJbiBjYXNlIG9mIG5vIEVQSU8gcm91dGVkIHRvIHJlc2V0IHRoZSBHUEhZLCBwdXQgaXQKKwkgKiBpbiBsb3cgcG93ZXIgbW9kZS4KKwkgKi8KKwlibngyeF9jbDIyX3dyaXRlKGJwLCBwaHksIE1ESU9fUE1BX1JFR19DVFJMLCAweDgwMCk7CisJLyoKKwkgKiBUaGlzIHdvcmtzIHdpdGggRTMgb25seSwgbm8gbmVlZCB0byBjaGVjayB0aGUgY2hpcAorCSAqIGJlZm9yZSBkZXRlcm1pbmluZyB0aGUgcG9ydC4KKwkgKi8KIAlwb3J0ID0gcGFyYW1zLT5wb3J0OwogCWNmZ19waW4gPSAoUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKwogCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKQEAgLTEwNjAzLDcgKzEwNjM4LDggQEAKIAkudHlwZQkJPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1QsCiAJLmFkZHIJCT0gMHhmZiwKIAkuZGVmX21kX2RldmFkCT0gMCwKLQkuZmxhZ3MJCT0gRkxBR1NfSFdfTE9DS19SRVFVSVJFRCwKKwkuZmxhZ3MJCT0gKEZMQUdTX0hXX0xPQ0tfUkVRVUlSRUQgfAorCQkJICAgRkxBR1NfVFhfRVJST1JfQ0hFQ0spLAogCS5yeF9wcmVlbXBoYXNpcwk9IHsweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmZ9LAogCS50eF9wcmVlbXBoYXNpcwk9IHsweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmZ9LAogCS5tZGlvX2N0cmwJPSAwLApAQCAtMTA3MjksNyArMTA3NjUsOCBAQAogCS50eXBlCQk9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDYsCiAJLmFkZHIJCT0gMHhmZiwKIAkuZGVmX21kX2RldmFkCT0gMCwKLQkuZmxhZ3MJCT0gRkxBR1NfSU5JVF9YR1hTX0ZJUlNULAorCS5mbGFncwkJPSAoRkxBR1NfSU5JVF9YR1hTX0ZJUlNUIHwKKwkJCSAgIEZMQUdTX1RYX0VSUk9SX0NIRUNLKSwKIAkucnhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkudHhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkubWRpb19jdHJsCT0gMCwKQEAgLTEwNzYwLDcgKzEwNzk3LDggQEAKIAkuYWRkcgkJPSAweGZmLAogCS5kZWZfbWRfZGV2YWQJPSAwLAogCS5mbGFncwkJPSAoRkxBR1NfSFdfTE9DS19SRVFVSVJFRCB8Ci0JCQkgICBGTEFHU19JTklUX1hHWFNfRklSU1QpLAorCQkJICAgRkxBR1NfSU5JVF9YR1hTX0ZJUlNUIHwKKwkJCSAgIEZMQUdTX1RYX0VSUk9SX0NIRUNLKSwKIAkucnhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkudHhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkubWRpb19jdHJsCT0gMCwKQEAgLTEwNzkxLDcgKzEwODI5LDggQEAKIAkudHlwZQkJPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAogCS5hZGRyCQk9IDB4ZmYsCiAJLmRlZl9tZF9kZXZhZAk9IDAsCi0JLmZsYWdzCQk9IEZMQUdTX0ZBTl9GQUlMVVJFX0RFVF9SRVEsCisJLmZsYWdzCQk9IChGTEFHU19GQU5fRkFJTFVSRV9ERVRfUkVRIHwKKwkJCSAgIEZMQUdTX1RYX0VSUk9SX0NIRUNLKSwKIAkucnhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkudHhfcHJlZW1waGFzaXMJPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmfSwKIAkubWRpb19jdHJsCT0gMCwKQEAgLTExMTEyLDYgKzExMTUxLDggQEAKIAkJICovCiAJCWlmIChDSElQX1JFVihicCkgPT0gQ0hJUF9SRVZfQXgpCiAJCQlwaHktPmZsYWdzIHw9IEZMQUdTX01EQ19NRElPX1dBOworCQllbHNlCisJCQlwaHktPmZsYWdzIHw9IEZMQUdTX01EQ19NRElPX1dBX0IwOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoc3dpdGNoX2NmZykgewogCQljYXNlIFNXSVRDSF9DRkdfMUc6CkBAIC0xMTUwMCwxMyArMTE1NDEsMTIgQEAKIAkgKiBTZXQgV0MgdG8gbG9vcGJhY2sgbW9kZSBzaW5jZSBsaW5rIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgY2xvY2sKIAkgKiB0byB0aGUgWE1BQyBpbiAyMEcgbW9kZQogCSAqLwotCWlmICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzIwMDAwKSB7Ci0JCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgJnBhcmFtcy0+cGh5WzBdKTsKLQkJYm54Mnhfd2FycGNvcmVfcmVzZXRfbGFuZShicCwgJnBhcmFtcy0+cGh5WzBdLCAwKTsKLQkJcGFyYW1zLT5waHlbSU5UX1BIWV0uY29uZmlnX2xvb3BiYWNrKAorCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgJnBhcmFtcy0+cGh5WzBdKTsKKwlibngyeF93YXJwY29yZV9yZXNldF9sYW5lKGJwLCAmcGFyYW1zLT5waHlbMF0sIDApOworCXBhcmFtcy0+cGh5W0lOVF9QSFldLmNvbmZpZ19sb29wYmFjaygKIAkJCSZwYXJhbXMtPnBoeVtJTlRfUEhZXSwKIAkJCXBhcmFtcyk7Ci0JfQorCiAJYm54MnhfeG1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAxKTsKIAlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcGFyYW1zLT5wb3J0KjQsIDApOwogfQpAQCAtMTE2ODQsMTIgKzExNzI0LDE2IEBACiAJYm54Mnhfc2V0X2xlZChwYXJhbXMsIHZhcnMsIExFRF9NT0RFX09GRiwgMCk7CiAKIAlpZiAocmVzZXRfZXh0X3BoeSkgeworCQlibngyeF9zZXRfbWRpb19jbGsoYnAsIHBhcmFtcy0+Y2hpcF9pZCwgcG9ydCk7CiAJCWZvciAocGh5X2luZGV4ID0gRVhUX1BIWTE7IHBoeV9pbmRleCA8IHBhcmFtcy0+bnVtX3BoeXM7CiAJCSAgICAgIHBoeV9pbmRleCsrKSB7Ci0JCQlpZiAocGFyYW1zLT5waHlbcGh5X2luZGV4XS5saW5rX3Jlc2V0KQorCQkJaWYgKHBhcmFtcy0+cGh5W3BoeV9pbmRleF0ubGlua19yZXNldCkgeworCQkJCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywKKwkJCQkJCSAgJnBhcmFtcy0+cGh5W3BoeV9pbmRleF0pOwogCQkJCXBhcmFtcy0+cGh5W3BoeV9pbmRleF0ubGlua19yZXNldCgKIAkJCQkJJnBhcmFtcy0+cGh5W3BoeV9pbmRleF0sCiAJCQkJCXBhcmFtcyk7CisJCQl9CiAJCQlpZiAocGFyYW1zLT5waHlbcGh5X2luZGV4XS5mbGFncyAmCiAJCQkgICAgRkxBR1NfUkVBUk1fTEFUQ0hfU0lHTkFMKQogCQkJCWNsZWFyX2xhdGNoX2luZCA9IDE7CkBAIC0xMjE3OCwxMCArMTIyMjIsNiBAQAogCXU4IGxlZF9tb2RlOwogCXUzMiBoYWxmX29wZW5fY29ubiA9ICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfSEFMRl9PUEVOX0NPTk5fRkxBRykgPiAwOwogCi0JLypEUChORVRJRl9NU0dfTElOSywgIkNIRUNLIExJTks6ICV4IGhhbGZfb3BlbjoleC0+IGxzczoleFxuIiwKLQkJICAgICAgIHZhcnMtPmxpbmtfdXAsCi0JCSAgICAgICBoYWxmX29wZW5fY29ubiwgbHNzX3N0YXR1cyk7Ki8KLQogCWlmICgobHNzX3N0YXR1cyBeIGhhbGZfb3Blbl9jb25uKSA9PSAwKQogCQlyZXR1cm47CiAKQEAgLTEyMTk0LDYgKzEyMjM0LDcgQEAKIAkgKiBiLiBVcGRhdGUgbGlua192YXJzLT5saW5rX3VwCiAJICovCiAJaWYgKGxzc19zdGF0dXMpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJSZW1vdGUgRmF1bHQgZGV0ZWN0ZWQgISEhXG4iKTsKIAkJdmFycy0+bGlua19zdGF0dXMgJj0gfkxJTktfU1RBVFVTX0xJTktfVVA7CiAJCXZhcnMtPmxpbmtfdXAgPSAwOwogCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX0hBTEZfT1BFTl9DT05OX0ZMQUc7CkBAIC0xMjIwMyw2ICsxMjI0NCw3IEBACiAJCSAqLwogCQlsZWRfbW9kZSA9IExFRF9NT0RFX09GRjsKIAl9IGVsc2UgeworCQlEUChORVRJRl9NU0dfTElOSywgIlJlbW90ZSBGYXVsdCBjbGVhcmVkXG4iKTsKIAkJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfTElOS19VUDsKIAkJdmFycy0+bGlua191cCA9IDE7CiAJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX0hBTEZfT1BFTl9DT05OX0ZMQUc7CkBAIC0xMjIxOSw2ICsxMjI2MSwxNSBAQAogCWJueDJ4X25vdGlmeV9saW5rX2NoYW5nZWQoYnApOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERlc2NyaXB0aW9uOgorKglUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgaGFsZiBvcGVuZWQgY29ubmVjdGlvbiBjaGFuZ2UgaW5kaWNhdGlvbi4KKyoJV2hlbiBzdWNoIGNoYW5nZSBvY2N1cnMsIGl0IGNhbGxzIHRoZSBibngyeF9hbmFseXplX2xpbmtfZXJyb3IKKyoJdG8gY2hlY2sgaWYgUmVtb3RlIEZhdWx0IGlzIHNldCBvciBjbGVhcmVkLiBSZWNlcHRpb24gb2YgcmVtb3RlIGZhdWx0CisqCXN0YXR1cyBtZXNzYWdlIGluIHRoZSBNQUMgaW5kaWNhdGVzIHRoYXQgdGhlIHBlZXIncyBNQUMgaGFzIGRldGVjdGVkCisqCWEgZmF1bHQsIGZvciBleGFtcGxlLCBkdWUgdG8gYnJlYWsgaW4gdGhlIFRYIHNpZGUgb2YgZmliZXIuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBibngyeF9jaGVja19oYWxmX29wZW5fY29ubihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCQkgICAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKIHsKQEAgLTEyMjI5LDkgKzEyMjgwLDI4IEBACiAJaWYgKCh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfUEhZU0lDQUxfTElOS19GTEFHKSA9PSAwKQogCQlyZXR1cm47CiAKLQlpZiAoIUNISVBfSVNfRTMoYnApICYmCisJaWYgKENISVBfSVNfRTMoYnApICYmCiAJICAgIChSRUdfUkQoYnAsIE1JU0NfUkVHX1JFU0VUX1JFR18yKSAmCi0JCSAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfQk1BQzAgPDwgcGFyYW1zLT5wb3J0KSkpIHsKKwkgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfWE1BQykpKSB7CisJCS8qIENoZWNrIEUzIFhNQUMgKi8KKwkJLyoKKwkJICogTm90ZSB0aGF0IGxpbmsgc3BlZWQgY2Fubm90IGJlIHF1ZXJpZWQgaGVyZSwgc2luY2UgaXQgbWF5IGJlCisJCSAqIHplcm8gd2hpbGUgbGluayBpcyBkb3duLiBJbiBjYXNlIFVNQUMgaXMgYWN0aXZlLCBMU1Mgd2lsbAorCQkgKiBzaW1wbHkgbm90IGJlIHNldAorCQkgKi8KKwkJbWFjX2Jhc2UgPSAocGFyYW1zLT5wb3J0KSA/IEdSQ0JBU0VfWE1BQzEgOiBHUkNCQVNFX1hNQUMwOworCisJCS8qIENsZWFyIHN0aWNrIGJpdHMgKFJlcXVpcmVzIHJpc2luZyBlZGdlKSAqLworCQlSRUdfV1IoYnAsIG1hY19iYXNlICsgWE1BQ19SRUdfQ0xFQVJfUlhfTFNTX1NUQVRVUywgMCk7CisJCVJFR19XUihicCwgbWFjX2Jhc2UgKyBYTUFDX1JFR19DTEVBUl9SWF9MU1NfU1RBVFVTLAorCQkgICAgICAgWE1BQ19DTEVBUl9SWF9MU1NfU1RBVFVTX1JFR19DTEVBUl9MT0NBTF9GQVVMVF9TVEFUVVMgfAorCQkgICAgICAgWE1BQ19DTEVBUl9SWF9MU1NfU1RBVFVTX1JFR19DTEVBUl9SRU1PVEVfRkFVTFRfU1RBVFVTKTsKKwkJaWYgKFJFR19SRChicCwgbWFjX2Jhc2UgKyBYTUFDX1JFR19SWF9MU1NfU1RBVFVTKSkKKwkJCWxzc19zdGF0dXMgPSAxOworCisJCWJueDJ4X2FuYWx5emVfbGlua19lcnJvcihwYXJhbXMsIHZhcnMsIGxzc19zdGF0dXMpOworCX0gZWxzZSBpZiAoUkVHX1JEKGJwLCBNSVNDX1JFR19SRVNFVF9SRUdfMikgJgorCQkgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0JNQUMwIDw8IHBhcmFtcy0+cG9ydCkpIHsKIAkJLyogQ2hlY2sgRTFYIC8gRTIgQk1BQyAqLwogCQl1MzIgbHNzX3N0YXR1c19yZWc7CiAJCXUzMiB3Yl9kYXRhWzJdOwpAQCAtMTIyNTMsMTQgKzEyMzIzLDIwIEBACiB2b2lkIGJueDJ4X3BlcmlvZF9mdW5jKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiBwaHlfaWR4OwogCWlmICghcGFyYW1zKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiSW5pbml0bGlhemVkIHBhcmFtcyAhXG4iKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmluaXRpYWxpemVkIHBhcmFtcyAhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQkvKiBEUChORVRJRl9NU0dfTElOSywgIlBlcmlvZGljIGNhbGxlZCB2YXJzLT5waHlfZmxhZ3MgMHgleCBzcGVlZCAweCV4Ci0JIFJFU0VUX1JFR18yIDB4JXhcbiIsIHZhcnMtPnBoeV9mbGFncywgdmFycy0+bGluZV9zcGVlZCwKLQkgIFJFR19SRChicCwgTUlTQ19SRUdfUkVTRVRfUkVHXzIpKTsgKi8KLQlibngyeF9jaGVja19oYWxmX29wZW5fY29ubihwYXJhbXMsIHZhcnMpOworCisJZm9yIChwaHlfaWR4ID0gSU5UX1BIWTsgcGh5X2lkeCA8IE1BWF9QSFlTOyBwaHlfaWR4KyspIHsKKwkJaWYgKHBhcmFtcy0+cGh5W3BoeV9pZHhdLmZsYWdzICYgRkxBR1NfVFhfRVJST1JfQ0hFQ0spIHsKKwkJCWJueDJ4X3NldF9hZXJfbW1kKHBhcmFtcywgJnBhcmFtcy0+cGh5W3BoeV9pZHhdKTsKKwkJCWJueDJ4X2NoZWNrX2hhbGZfb3Blbl9jb25uKHBhcmFtcywgdmFycyk7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmIChDSElQX0lTX0UzKGJwKSkKIAkJYm54MnhfY2hlY2tfb3Zlcl9jdXJyKHBhcmFtcywgdmFycyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmgKaW5kZXggNmE3NzA4ZC4uYzEyZGI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuaApAQCAtMTQ1LDYgKzE0NSw4IEBACiAjZGVmaW5lIEZMQUdTX1NGUF9OT1RfQVBQUk9WRUQJCSgxPDw3KQogI2RlZmluZSBGTEFHU19NRENfTURJT19XQQkJKDE8PDgpCiAjZGVmaW5lIEZMQUdTX0RVTU1ZX1JFQUQJCSgxPDw5KQorI2RlZmluZSBGTEFHU19NRENfTURJT19XQV9CMAkJKDE8PDEwKQorI2RlZmluZSBGTEFHU19UWF9FUlJPUl9DSEVDSwkJKDE8PDEyKQogCiAJLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgcnggc2lkZSAqLwogCXUxNiByeF9wcmVlbXBoYXNpc1s0XTsKQEAgLTI3Niw3ICsyNzgsNiBAQAogI2RlZmluZSBQSFlfUEhZU0lDQUxfTElOS19GTEFHCQkoMTw8MikKICNkZWZpbmUgUEhZX0hBTEZfT1BFTl9DT05OX0ZMQUcJCSgxPDwzKQogI2RlZmluZSBQSFlfT1ZFUl9DVVJSRU5UX0ZMQUcJCSgxPDw0KQotI2RlZmluZSBQSFlfVFhfRVJST1JfQ0hFQ0tfRkxBRwkJKDE8PDUpCiAKIAl1OCBtYWNfdHlwZTsKICNkZWZpbmUgTUFDX1RZUEVfTk9ORQkJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCmluZGV4IDE1MDcwOTEuLmY3NDU4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKQEAgLTU3OTgsNiArNTc5OCwxMiBAQAogCiAJRFAoQk5YMlhfTVNHX01DUCwgInN0YXJ0aW5nIGNvbW1vbiBpbml0ICBmdW5jICVkXG4iLCBCUF9BQlNfRlVOQyhicCkpOwogCisJLyoKKwkgKiB0YWtlIHRoZSBVTkRJIGxvY2sgdG8gcHJvdGVjdCB1bmRpX3VubG9hZCBmbG93IGZyb20gYWNjZXNzaW5nCisJICogcmVnaXN0ZXJzIHdoaWxlIHdlJ3JlIHJlc2V0dGluZyB0aGUgY2hpcAorCSAqLworCWJueDJ4X2FjcXVpcmVfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9VTkRJKTsKKwogCWJueDJ4X3Jlc2V0X2NvbW1vbihicCk7CiAJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMV9TRVQsIDB4ZmZmZmZmZmYpOwogCkBAIC01ODA4LDYgKzU4MTQsOCBAQAogCX0KIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX1NFVCwgdmFsKTsKIAorCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9VTkRJKTsKKwogCWJueDJ4X2luaXRfYmxvY2soYnAsIEJMT0NLX01JU0MsIFBIQVNFX0NPTU1PTik7CiAKIAlpZiAoIUNISVBfSVNfRTF4KGJwKSkgewpAQCAtMTAyNTEsMTAgKzEwMjU5LDE3IEBACiAJLyogY2xlYW4gaW5kaXJlY3QgYWRkcmVzc2VzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19BRERSRVNTLAogCQkJICAgICAgIFBDSUNGR19WRU5ET1JfSURfT0ZGU0VUKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzg4X0YwICsgQlBfUE9SVChicCkqMTYsIDApOwotCVJFR19XUihicCwgUFhQMl9SRUdfUEdMX0FERFJfOENfRjAgKyBCUF9QT1JUKGJwKSoxNiwgMCk7Ci0JUkVHX1dSKGJwLCBQWFAyX1JFR19QR0xfQUREUl85MF9GMCArIEJQX1BPUlQoYnApKjE2LCAwKTsKLQlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YwICsgQlBfUE9SVChicCkqMTYsIDApOworCS8qIENsZWFuIHRoZSBmb2xsb3dpbmcgaW5kaXJlY3QgYWRkcmVzc2VzIGZvciBhbGwgZnVuY3Rpb25zIHNpbmNlIGl0CisJICogaXMgbm90IHVzZWQgYnkgdGhlIGRyaXZlci4KKwkgKi8KKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzg4X0YwLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzhDX0YwLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzkwX0YwLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YwLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzg4X0YxLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzhDX0YxLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzkwX0YxLCAwKTsKKwlSRUdfV1IoYnAsIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YxLCAwKTsKIAogCS8qCiAJICogRW5hYmxlIGludGVybmFsIHRhcmdldC1yZWFkIChpbiBjYXNlIHdlIGFyZSBwcm9iZWQgYWZ0ZXIgUEYgRkxSKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKaW5kZXggMDI0NjFmZS4uNDAyNjZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfcmVnLmgKQEAgLTMwMDcsMTEgKzMwMDcsMjcgQEAKIC8qIFtSIDZdIERlYnVnIG9ubHk6IE51bWJlciBvZiB1c2VkIGVudHJpZXMgaW4gdGhlIGRhdGEgRklGTyAqLwogI2RlZmluZSBQWFAyX1JFR19IU1RfREFUQV9GSUZPX1NUQVRVUwkJCQkgMHgxMjA0N2MKIC8qIFtSIDddIERlYnVnIG9ubHk6IE51bWJlciBvZiB1c2VkIGVudHJpZXMgaW4gdGhlIGhlYWRlciBGSUZPICovCi0jZGVmaW5lIFBYUDJfUkVHX0hTVF9IRUFERVJfRklGT19TVEFUVVMgCQkJIDB4MTIwNDc4Ci0jZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzg4X0YwIAkJCQkgMHgxMjA1MzQKLSNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfOENfRjAgCQkJCSAweDEyMDUzOAotI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl85MF9GMCAJCQkJIDB4MTIwNTNjCi0jZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YwIAkJCQkgMHgxMjA1NDAKKyNkZWZpbmUgUFhQMl9SRUdfSFNUX0hFQURFUl9GSUZPX1NUQVRVUwkJCQkgMHgxMjA0NzgKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfODhfRjAJCQkJCSAweDEyMDUzNAorLyogW1IgMzJdIEdSQyBhZGRyZXNzIGZvciBjb25maWd1cmF0aW9uIGFjY2VzcyB0byBQQ0lFIGNvbmZpZyBhZGRyZXNzIDB4ODguCisgKiBhbnkgd3JpdGUgdG8gdGhpcyBQQ0lFIGFkZHJlc3Mgd2lsbCBjYXVzZSBhIEdSQyB3cml0ZSBhY2Nlc3MgdG8gdGhlCisgKiBhZGRyZXNzIHRoYXQncyBpbiB0IHRoaXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfODhfRjEJCQkJCSAweDEyMDU0NAorI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl84Q19GMAkJCQkJIDB4MTIwNTM4CisvKiBbUiAzMl0gR1JDIGFkZHJlc3MgZm9yIGNvbmZpZ3VyYXRpb24gYWNjZXNzIHRvIFBDSUUgY29uZmlnIGFkZHJlc3MgMHg4Yy4KKyAqIGFueSB3cml0ZSB0byB0aGlzIFBDSUUgYWRkcmVzcyB3aWxsIGNhdXNlIGEgR1JDIHdyaXRlIGFjY2VzcyB0byB0aGUKKyAqIGFkZHJlc3MgdGhhdCdzIGluIHQgdGhpcyByZWdpc3RlciAqLworI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl84Q19GMQkJCQkJIDB4MTIwNTQ4CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzkwX0YwCQkJCQkgMHgxMjA1M2MKKy8qIFtSIDMyXSBHUkMgYWRkcmVzcyBmb3IgY29uZmlndXJhdGlvbiBhY2Nlc3MgdG8gUENJRSBjb25maWcgYWRkcmVzcyAweDkwLgorICogYW55IHdyaXRlIHRvIHRoaXMgUENJRSBhZGRyZXNzIHdpbGwgY2F1c2UgYSBHUkMgd3JpdGUgYWNjZXNzIHRvIHRoZQorICogYWRkcmVzcyB0aGF0J3MgaW4gdCB0aGlzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzkwX0YxCQkJCQkgMHgxMjA1NGMKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfOTRfRjAJCQkJCSAweDEyMDU0MAorLyogW1IgMzJdIEdSQyBhZGRyZXNzIGZvciBjb25maWd1cmF0aW9uIGFjY2VzcyB0byBQQ0lFIGNvbmZpZyBhZGRyZXNzIDB4OTQuCisgKiBhbnkgd3JpdGUgdG8gdGhpcyBQQ0lFIGFkZHJlc3Mgd2lsbCBjYXVzZSBhIEdSQyB3cml0ZSBhY2Nlc3MgdG8gdGhlCisgKiBhZGRyZXNzIHRoYXQncyBpbiB0IHRoaXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0FERFJfOTRfRjEJCQkJCSAweDEyMDU1MAogI2RlZmluZSBQWFAyX1JFR19QR0xfQ09OVFJPTDAJCQkJCSAweDEyMDQ5MAogI2RlZmluZSBQWFAyX1JFR19QR0xfQ09OVFJPTDEJCQkJCSAweDEyMDUxNAogI2RlZmluZSBQWFAyX1JFR19QR0xfREVCVUcJCQkJCSAweDEyMDUyMApAQCAtNDc3MSw5ICs0Nzg3LDExIEBACiAgICBUaGUgZmllbGRzIGFyZTogWzQ6MF0gLSB0YWlsIHBvaW50ZXI7IDEwOjVdIC0gTGluayBMaXN0IHNpemU7IDE1OjExXSAtCiAgICBoZWFkZXIgcG9pbnRlci4gKi8KICNkZWZpbmUgVUNNX1JFR19YWF9UQUJMRQkJCQkJIDB4ZTAzMDAKKyNkZWZpbmUgVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfSUdOT1JFX1RYX1BBVVNFCQkJICgweDE8PDI4KQogI2RlZmluZSBVTUFDX0NPTU1BTkRfQ09ORklHX1JFR19MT09QX0VOQQkJCSAoMHgxPDwxNSkKICNkZWZpbmUgVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfTk9fTEdUSF9DSEVDSwkJCSAoMHgxPDwyNCkKICNkZWZpbmUgVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfUEFEX0VOCQkJCSAoMHgxPDw1KQorI2RlZmluZSBVTUFDX0NPTU1BTkRfQ09ORklHX1JFR19QQVVTRV9JR05PUkUJCQkgKDB4MTw8OCkKICNkZWZpbmUgVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfUFJPTUlTX0VOCQkJICgweDE8PDQpCiAjZGVmaW5lIFVNQUNfQ09NTUFORF9DT05GSUdfUkVHX1JYX0VOQQkJCQkgKDB4MTw8MSkKICNkZWZpbmUgVU1BQ19DT01NQU5EX0NPTkZJR19SRUdfU1dfUkVTRVQJCQkgKDB4MTw8MTMpCkBAIC01NjIyLDggKzU2NDAsOSBAQAogI2RlZmluZSBFTUFDX01ESU9fQ09NTV9TVEFSVF9CVVNZCQkJCSAoMUw8PDI5KQogI2RlZmluZSBFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwJCQkJICgxTDw8NCkKICNkZWZpbmUgRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1CQkJCSAoMUw8PDMxKQotI2RlZmluZSBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQJCQkJICgweDNmTDw8MTYpCisjZGVmaW5lIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVAkJCQkgKDB4M2ZmTDw8MTYpCiAjZGVmaW5lIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVAkJCSAxNgorI2RlZmluZSBFTUFDX01ESU9fU1RBVFVTXzEwTUIJCQkJCSAoMUw8PDEpCiAjZGVmaW5lIEVNQUNfTU9ERV8yNUdfTU9ERQkJCQkJICgxTDw8NSkKICNkZWZpbmUgRU1BQ19NT0RFX0hBTEZfRFVQTEVYCQkJCQkgKDFMPDwxKQogI2RlZmluZSBFTUFDX01PREVfUE9SVF9HTUlJCQkJCQkgKDJMPDwyKQpAQCAtNTYzNCw2ICs1NjUzLDcgQEAKICNkZWZpbmUgRU1BQ19SRUdfRU1BQ19NQUNfTUFUQ0ggCQkJCSAweDEwCiAjZGVmaW5lIEVNQUNfUkVHX0VNQUNfTURJT19DT01NIAkJCQkgMHhhYwogI2RlZmluZSBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSAJCQkJIDB4YjQKKyNkZWZpbmUgRU1BQ19SRUdfRU1BQ19NRElPX1NUQVRVUwkJCQkgMHhiMAogI2RlZmluZSBFTUFDX1JFR19FTUFDX01PREUJCQkJCSAweDAKICNkZWZpbmUgRU1BQ19SRUdfRU1BQ19SWF9NT0RFCQkJCQkgMHhjOAogI2RlZmluZSBFTUFDX1JFR19FTUFDX1JYX01UVV9TSVpFCQkJCSAweDljCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCAzOGE4M2FjLi40M2YyZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM0MTksOSArMzQxOSwyNyBAQAogc3RhdGljIGludCBib25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOworCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CisJaW50IGk7CiAKIAlib25kLT5raWxsX3RpbWVycyA9IDA7CiAKKwkvKiByZXNldCBzbGF2ZS0+YmFja3VwIGFuZCBzbGF2ZS0+aW5hY3RpdmUgKi8KKwlyZWFkX2xvY2soJmJvbmQtPmxvY2spOworCWlmIChib25kLT5zbGF2ZV9jbnQgPiAwKSB7CisJCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKKwkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQkJaWYgKChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQKQorCQkJCSYmIChzbGF2ZSAhPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKKwkJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSk7CisJCQl9IGVsc2UgeworCQkJCWJvbmRfc2V0X3NsYXZlX2FjdGl2ZV9mbGFncyhzbGF2ZSk7CisJCQl9CisJCX0KKwkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CisJfQorCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCUlOSVRfREVMQVlFRF9XT1JLKCZib25kLT5tY2FzdF93b3JrLCBib25kX3Jlc2VuZF9pZ21wX2pvaW5fcmVxdWVzdHNfZGVsYXllZCk7CiAKIAlpZiAoYm9uZF9pc19sYihib25kKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvcGx4X3BjaS5jCmluZGV4IDIzMTM4NWIuLmM3ZjNkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3BseF9wY2kuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9wbHhfcGNpLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogCXN0cnVjdCBzamExMDAwX3ByaXYgKnByaXY7CiAJaW50IGkgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IGNhcmQtPmNoYW5uZWxzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgUExYX1BDSV9NQVhfQ0hBTjsgaSsrKSB7CiAJCWRldiA9IGNhcmQtPm5ldF9kZXZbaV07CiAJCWlmICghZGV2KQogCQkJY29udGludWU7CkBAIC01MzYsNyArNTM2LDYgQEAKIAkJCWlmIChlcnIpIHsKIAkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJSZWdpc3RlcmluZyBkZXZpY2UgZmFpbGVkICIKIAkJCQkJIihlcnI9JWQpXG4iLCBlcnIpOwotCQkJCWZyZWVfc2phMTAwMGRldihkZXYpOwogCQkJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOwogCQkJfQogCkBAIC01NDksNiArNTQ4LDcgQEAKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNoYW5uZWwgIyVkIG5vdCBkZXRlY3RlZFxuIiwKIAkJCQlpICsgMSk7CiAJCQlmcmVlX3NqYTEwMDBkZXYoZGV2KTsKKwkJCWNhcmQtPm5ldF9kZXZbaV0gPSBOVUxMOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2xjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCmluZGV4IGY1MjNmMWMuLjRiNzBiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCW1lbWNweShza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpKSwKIAkgICAgICAgJmNmLCBzaXplb2Yoc3RydWN0IGNhbl9mcmFtZSkpOwotCW5ldGlmX3J4KHNrYik7CisJbmV0aWZfcnhfbmkoc2tiKTsKIAogCXNsLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlzbC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBjZi5jYW5fZGxjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKaW5kZXggZjdiYmRlOS4uYTgxMjQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCkBAIC01MDMsOSArNTAzLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5tYnhfbG9jaywgZmxhZ3MpOwogCiAJLyogUHJlcGFyZSBtYWlsYm94IGZvciB0cmFuc21pc3Npb24gKi8KKwlkYXRhID0gY2YtPmNhbl9kbGMgfCAoZ2V0X3R4X2hlYWRfcHJpbyhwcml2KSA8PCA4KTsKIAlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykgLyogUmVtb3RlIHRyYW5zbWlzc2lvbiByZXF1ZXN0ICovCiAJCWRhdGEgfD0gSEVDQ19DQU5NQ0ZfUlRSOwotCWRhdGEgfD0gZ2V0X3R4X2hlYWRfcHJpbyhwcml2KSA8PCA4OwogCWhlY2Nfd3JpdGVfbWJ4KHByaXYsIG1ieG5vLCBIRUNDX0NBTk1DRiwgZGF0YSk7CiAKIAlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgLyogRXh0ZW5kZWQgZnJhbWUgZm9ybWF0ICovCkBAIC05MjMsNiArOTIzLDcgQEAKIAlwcml2LT5jYW4uZG9fZ2V0X3N0YXRlID0gdGlfaGVjY19nZXRfc3RhdGU7CiAJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CiAKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bWJ4X2xvY2spOwogCW5kZXYtPmlycSA9IGlycS0+c3RhcnQ7CiAJbmRldi0+ZmxhZ3MgfD0gSUZGX0VDSE87CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggNjQ2Yzg2Yi4uZmRiN2ExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtMjQ1MiwxNCArMjQ1MiwxMyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CiAJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJpbmc7CisJaW50IHJpbmcgPSAoaXJxID09IGNwLT5wY2lfaXJxX0lOVEMpID8gMiA6IDM7CiAJdTMyIHN0YXR1cyA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1BMVVNfSU5UUk5fU1RBVFVTKHJpbmcpKTsKIAogCS8qIGNoZWNrIGZvciBzaGFyZWQgaXJxICovCiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlyaW5nID0gKGlycSA9PSBjcC0+cGNpX2lycV9JTlRDKSA/IDIgOiAzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkVfQUxUKSB7IC8qIGhhbmRsZSByeCBzZXBhcmF0ZWx5ICovCiAjaWZkZWYgVVNFX05BUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCBjNWYwZjA0Li41NTQ4ZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC04MzgsNiArODM4LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJZXczMihJTUMsIDB4RkZGRkZGRkYpOworCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJbXNsZWVwKDEwKTsKIAogCS8qIFRlc3QgZWFjaCBpbnRlcnJ1cHQgKi8KQEAgLTg1Niw2ICs4NTcsNyBAQAogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQkJZXczMihJTUMsIG1hc2spOwogCQkJZXczMihJQ1MsIG1hc2spOworCQkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTg3Myw2ICs4NzUsNyBAQAogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CiAJCWV3MzIoSU1TLCBtYXNrKTsKIAkJZXczMihJQ1MsIG1hc2spOworCQlFMTAwMF9XUklURV9GTFVTSCgpOwogCQltc2xlZXAoMTApOwogCiAJCWlmICghKGFkYXB0ZXItPnRlc3RfaWNyICYgbWFzaykpIHsKQEAgLTg5MCw2ICs4OTMsNyBAQAogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQkJZXczMihJTUMsIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlldzMyKElDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IpIHsKQEAgLTkwMSw2ICs5MDUsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlldzMyKElNQywgMHhGRkZGRkZGRik7CisJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAltc2xlZXAoMTApOwogCiAJLyogVW5ob29rIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KQEAgLTEzOTQsNiArMTM5OSw3IEBACiAJCQlpZiAodW5saWtlbHkoKytrID09IHR4ZHItPmNvdW50KSkgayA9IDA7CiAJCX0KIAkJZXczMihURFQsIGspOworCQlFMTAwMF9XUklURV9GTFVTSCgpOwogCQltc2xlZXAoMjAwKTsKIAkJdGltZSA9IGppZmZpZXM7IC8qIHNldCB0aGUgc3RhcnQgdGltZSBmb3IgdGhlIHJlY2VpdmUgKi8KIAkJZ29vZF9jbnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggMTY5ODYyMi4uODU0NWM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC00NDYsNiArNDQ2LDcgQEAKIAkvKiBNdXN0IHJlc2V0IHRoZSBQSFkgYmVmb3JlIHJlc2V0dGluZyB0aGUgTUFDICovCiAJaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDEpIHx8IChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpKSB7CiAJCWV3MzIoQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1BIWV9SU1QpKTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAkJbXNsZWVwKDUpOwogCX0KIApAQCAtMzc1Miw2ICszNzUzLDcgQEAKIAkJLyogQ2xlYXIgU0sgYW5kIENTICovCiAJCWVlY2QgJj0gfihFMTAwMF9FRUNEX0NTIHwgRTEwMDBfRUVDRF9TSyk7CiAJCWV3MzIoRUVDRCwgZWVjZCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAJCXVkZWxheSgxKTsKIAl9CiAKQEAgLTM4MjQsNiArMzgyNiw3IEBACiAJCWVlY2QgJj0gfkUxMDAwX0VFQ0RfU0s7CS8qIExvd2VyIFNDSyAqLwogCiAJCWV3MzIoRUVDRCwgZWVjZCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CiAKIAkJdWRlbGF5KGh3LT5lZXByb20uZGVsYXlfdXNlYyk7CiAJfSBlbHNlIGlmIChody0+ZWVwcm9tLnR5cGUgPT0gZTEwMDBfZWVwcm9tX21pY3Jvd2lyZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwppbmRleCA0ODBmMjU5Li41MzZiM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwpAQCAtMjA4NSw3ICsyMDg1LDggQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKIAkuZmxhZ3MyCQkJICA9IEZMQUcyX0NIRUNLX1BIWV9IQU5HCi0JCQkJICB8IEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMsCisJCQkJICB8IEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMKKwkJCQkgIHwgRkxBRzJfTk9fRElTQUJMRV9SWCwKIAkucGJhCQkJPSAzMiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSBERUZBVUxUX0pVTUJPLAogCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLApAQCAtMjEwNCw3ICsyMTA1LDggQEAKIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUwogCQkJCSAgfCBGTEFHX0hBU19DVFJMRVhUX09OX0xPQUQsCi0JLmZsYWdzMgkJCT0gRkxBRzJfRElTQUJMRV9BU1BNX0wwUywKKwkuZmxhZ3MyCQkJPSBGTEFHMl9ESVNBQkxFX0FTUE1fTDBTCisJCQkJICB8IEZMQUcyX05PX0RJU0FCTEVfUlgsCiAJLnBiYQkJCT0gMzIsCiAJLm1heF9od19mcmFtZV9zaXplCT0gREVGQVVMVF9KVU1CTywKIAkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggNjM4ZDE3NS4uODUzM2FkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTE1NSw2ICsxNTUsOSBAQAogI2RlZmluZSBIVl9NX1NUQVRVU19TUEVFRF8xMDAwICAgICAgICAgICAgMHgwMjAwCiAjZGVmaW5lIEhWX01fU1RBVFVTX0xJTktfVVAgICAgICAgICAgICAgICAweDAwNDAKIAorI2RlZmluZSBFMTAwMF9JQ0hfRldTTV9QQ0lNMlBDSQkJMHgwMTAwMDAwMCAvKiBNRSBQQ0ltLXRvLVBDSSBhY3RpdmUgKi8KKyNkZWZpbmUgRTEwMDBfSUNIX0ZXU01fUENJTTJQQ0lfQ09VTlQJMjAwMAorCiAvKiBUaW1lIHRvIHdhaXQgYmVmb3JlIHB1dHRpbmcgdGhlIGRldmljZSBpbnRvIEQzIGlmIHRoZXJlJ3Mgbm8gbGluayAoaW4gbXMpLiAqLwogI2RlZmluZSBMSU5LX1RJTUVPVVQJCTEwMAogCkBAIC00NTMsNiArNDU2LDggQEAKICNkZWZpbmUgRkxBRzJfRElTQUJMRV9BU1BNX0wwUyAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIEZMQUcyX0RJU0FCTEVfQUlNICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBGTEFHMl9DSEVDS19QSFlfSEFORyAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgRkxBRzJfTk9fRElTQUJMRV9SWCAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBGTEFHMl9QQ0lNMlBDSV9BUkJJVEVSX1dBICAgICAgICAgKDEgPDwgMTEpCiAKICNkZWZpbmUgRTEwMDBfUlhfREVTQ19QUyhSLCBpKQkgICAgXAogCSgmKCgodW5pb24gZTEwMDBfcnhfZGVzY19wYWNrZXRfc3BsaXQgKikoKFIpLmRlc2MpKVtpXSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKaW5kZXggYzBlY2IyZC4uZTRmNDIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwpAQCAtMTMxMyw2ICsxMzEzLDcgQEAKIAlrbXJuY3RybHN0YSA9ICgob2Zmc2V0IDw8IEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVF9TSElGVCkgJgogCSAgICAgICAgICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVCkgfCBFMTAwMF9LTVJOQ1RSTFNUQV9SRU47CiAJZXczMihLTVJOQ1RSTFNUQSwga21ybmN0cmxzdGEpOworCWUxZV9mbHVzaCgpOwogCiAJdWRlbGF5KDIpOwogCkBAIC0xMzQ3LDYgKzEzNDgsNyBAQAogCWttcm5jdHJsc3RhID0gKChvZmZzZXQgPDwgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX1NISUZUKSAmCiAJICAgICAgICAgICAgICAgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUKSB8IGRhdGE7CiAJZXczMihLTVJOQ1RSTFNUQSwga21ybmN0cmxzdGEpOworCWUxZV9mbHVzaCgpOwogCiAJdWRlbGF5KDIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBjYjFhMzYyLi42YTA1MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTI4LDggKzI4LDggQEAKIAogLyogZXRodG9vbCBzdXBwb3J0IGZvciBlMTAwMCAqLwogCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTk2NCw2ICs5NjQsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlldzMyKElNQywgMHhGRkZGRkZGRik7CisJZTFlX2ZsdXNoKCk7CiAJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCkBAIC05OTYsNiArOTk3LDcgQEAKIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJCWV3MzIoSU1DLCBtYXNrKTsKIAkJCWV3MzIoSUNTLCBtYXNrKTsKKwkJCWUxZV9mbHVzaCgpOwogCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTEwMTQsNiArMTAxNiw3IEBACiAJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJZXczMihJTVMsIG1hc2spOwogCQlldzMyKElDUywgbWFzayk7CisJCWUxZV9mbHVzaCgpOwogCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCQlpZiAoIShhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spKSB7CkBAIC0xMDMyLDYgKzEwMzUsNyBAQAogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQkJZXczMihJTUMsIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlldzMyKElDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCWUxZV9mbHVzaCgpOwogCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewpAQCAtMTA0Myw2ICsxMDQ3LDcgQEAKIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJZXczMihJTUMsIDB4RkZGRkZGRkYpOworCWUxZV9mbHVzaCgpOwogCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJLyogVW5ob29rIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KQEAgLTEyMDEsNyArMTIwNiw4IEBACiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CiAKIAlyY3RsID0gZXIzMihSQ1RMKTsKLQlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfTk9fRElTQUJMRV9SWCkpCisJCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKIAlldzMyKFJEQkFMLCAoKHU2NCkgcnhfcmluZy0+ZG1hICYgMHhGRkZGRkZGRikpOwogCWV3MzIoUkRCQUgsICgodTY0KSByeF9yaW5nLT5kbWEgPj4gMzIpKTsKIAlldzMyKFJETEVOLCByeF9yaW5nLT5zaXplKTsKQEAgLTEyNzYsNiArMTI4Miw3IEBACiAJCQkgICAgIEUxMDAwX0NUUkxfRkQpOwkgLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwgKi8KIAogCQlldzMyKENUUkwsIGN0cmxfcmVnKTsKKwkJZTFlX2ZsdXNoKCk7CiAJCXVkZWxheSg1MDApOwogCiAJCXJldHVybiAwOwpAQCAtMTQxOCw2ICsxNDI1LDcgQEAKIAkgKi8KICNkZWZpbmUgRTEwMDBfU0VSREVTX0xCX09OIDB4NDEwCiAJZXczMihTQ1RMLCBFMTAwMF9TRVJERVNfTEJfT04pOworCWUxZV9mbHVzaCgpOwogCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJcmV0dXJuIDA7CkBAIC0xNTEzLDYgKzE1MjEsNyBAQAogCQkgICAgaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAjZGVmaW5lIEUxMDAwX1NFUkRFU19MQl9PRkYgMHg0MDAKIAkJCWV3MzIoU0NUTCwgRTEwMDBfU0VSREVTX0xCX09GRik7CisJCQllMWVfZmx1c2goKTsKIAkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE1OTIsNiArMTYwMSw3IEBACiAJCQkJayA9IDA7CiAJCX0KIAkJZXczMihURFQsIGspOworCQllMWVfZmx1c2goKTsKIAkJbXNsZWVwKDIwMCk7CiAJCXRpbWUgPSBqaWZmaWVzOyAvKiBzZXQgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZSByZWNlaXZlICovCiAJCWdvb2RfY250ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCmluZGV4IGMxNzUyMTIuLjU0YWRkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwpAQCAtMTM3LDggKzEzNyw5IEBACiAjZGVmaW5lIEhWX1BNX0NUUkwJCVBIWV9SRUcoNzcwLCAxNykKIAogLyogUEhZIExvdyBQb3dlciBJZGxlIENvbnRyb2wgKi8KLSNkZWZpbmUgSTgyNTc5X0xQSV9DVFJMCQkJUEhZX1JFRyg3NzIsIDIwKQotI2RlZmluZSBJODI1NzlfTFBJX0NUUkxfRU5BQkxFX01BU0sJMHg2MDAwCisjZGVmaW5lIEk4MjU3OV9MUElfQ1RSTAkJCQlQSFlfUkVHKDc3MiwgMjApCisjZGVmaW5lIEk4MjU3OV9MUElfQ1RSTF9FTkFCTEVfTUFTSwkJMHg2MDAwCisjZGVmaW5lIEk4MjU3OV9MUElfQ1RSTF9GT1JDRV9QTExfTE9DS19DT1VOVAkweDgwCiAKIC8qIEVNSSBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSTgyNTc5X0VNSV9BRERSICAgICAgICAgMHgxMApAQCAtMTYzLDYgKzE2NCwxMSBAQAogI2RlZmluZSBIVl9LTVJOX01PREVfQ1RSTCAgICAgIFBIWV9SRUcoNzY5LCAxNikKICNkZWZpbmUgSFZfS01STl9NRElPX1NMT1cgICAgICAweDA0MDAKIAorLyogS01STiBGSUZPIENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBIVl9LTVJOX0ZJRk9fQ1RSTFNUQSAgICAgICAgICAgICAgICAgIFBIWV9SRUcoNzcwLCAxNikKKyNkZWZpbmUgSFZfS01STl9GSUZPX0NUUkxTVEFfUFJFQU1CTEVfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgSFZfS01STl9GSUZPX0NUUkxTVEFfUFJFQU1CTEVfU0hJRlQgICAxMgorCiAvKiBJQ0ggR2JFIEZsYXNoIEhhcmR3YXJlIFNlcXVlbmNpbmcgRmxhc2ggU3RhdHVzIFJlZ2lzdGVyIGJpdCBicmVha2Rvd24gKi8KIC8qIE9mZnNldCAwNGggSFNGU1RTICovCiB1bmlvbiBpY2g4X2h3c19mbGFzaF9zdGF0dXMgewpAQCAtMjgzLDYgKzI4OSw3IEBACiAJY3RybCB8PSBFMTAwMF9DVFJMX0xBTlBIWVBDX09WRVJSSURFOwogCWN0cmwgJj0gfkUxMDAwX0NUUkxfTEFOUEhZUENfVkFMVUU7CiAJZXczMihDVFJMLCBjdHJsKTsKKwllMWVfZmx1c2goKTsKIAl1ZGVsYXkoMTApOwogCWN0cmwgJj0gfkUxMDAwX0NUUkxfTEFOUEhZUENfT1ZFUlJJREU7CiAJZXczMihDVFJMLCBjdHJsKTsKQEAgLTY1Niw2ICs2NjMsNyBAQAogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJczMyIHJldF92YWw7CiAJYm9vbCBsaW5rOworCXUxNiBwaHlfcmVnOwogCiAJLyoKIAkgKiBXZSBvbmx5IHdhbnQgdG8gZ28gb3V0IHRvIHRoZSBQSFkgcmVnaXN0ZXJzIHRvIHNlZSBpZiBBdXRvLU5lZwpAQCAtNjg4LDE2ICs2OTYsMzUgQEAKIAogCW1hYy0+Z2V0X2xpbmtfc3RhdHVzID0gZmFsc2U7CiAKLQlpZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV84MjU3OCkgewotCQlyZXRfdmFsID0gZTEwMDBfbGlua19zdGFsbF93b3JrYXJvdW5kX2h2KGh3KTsKLQkJaWYgKHJldF92YWwpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX3BjaDJsYW4pIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfcGNoMmxhbjoKIAkJcmV0X3ZhbCA9IGUxMDAwX2sxX3dvcmthcm91bmRfbHYoaHcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OworCQkvKiBmYWxsLXRocnUgKi8KKwljYXNlIGUxMDAwX3BjaGxhbjoKKwkJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfODI1NzgpIHsKKwkJCXJldF92YWwgPSBlMTAwMF9saW5rX3N0YWxsX3dvcmthcm91bmRfaHYoaHcpOworCQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBXb3JrYXJvdW5kIGZvciBQQ0h4IHBhcnRzIGluIGhhbGYtZHVwbGV4OgorCQkgKiBTZXQgdGhlIG51bWJlciBvZiBwcmVhbWJsZXMgcmVtb3ZlZCBmcm9tIHRoZSBwYWNrZXQKKwkJICogd2hlbiBpdCBpcyBwYXNzZWQgZnJvbSB0aGUgUEhZIHRvIHRoZSBNQUMgdG8gcHJldmVudAorCQkgKiB0aGUgTUFDIGZyb20gbWlzaW50ZXJwcmV0aW5nIHRoZSBwYWNrZXQgdHlwZS4KKwkJICovCisJCWUxZV9ycGh5KGh3LCBIVl9LTVJOX0ZJRk9fQ1RSTFNUQSwgJnBoeV9yZWcpOworCQlwaHlfcmVnICY9IH5IVl9LTVJOX0ZJRk9fQ1RSTFNUQV9QUkVBTUJMRV9NQVNLOworCisJCWlmICgoZXIzMihTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZEKSAhPSBFMTAwMF9TVEFUVVNfRkQpCisJCQlwaHlfcmVnIHw9ICgxIDw8IEhWX0tNUk5fRklGT19DVFJMU1RBX1BSRUFNQkxFX1NISUZUKTsKKworCQllMWVfd3BoeShodywgSFZfS01STl9GSUZPX0NUUkxTVEEsIHBoeV9yZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAkvKgpAQCAtNzg3LDYgKzgxNCwxMSBAQAogCSAgICAoYWRhcHRlci0+aHcucGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lncF8zKSkKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gRkxBR19MU0NfR0lHX1NQRUVEX0RST1A7CiAKKwkvKiBFbmFibGUgd29ya2Fyb3VuZCBmb3IgODI1Nzkgdy8gTUUgZW5hYmxlZCAqLworCWlmICgoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikgJiYKKwkgICAgKGVyMzIoRldTTSkgJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkpCisJCWFkYXB0ZXItPmZsYWdzMiB8PSBGTEFHMl9QQ0lNMlBDSV9BUkJJVEVSX1dBOworCiAJLyogRGlzYWJsZSBFRUUgYnkgZGVmYXVsdCB1bnRpbCBJRUVFODAyLjNheiBzcGVjIGlzIGZpbmFsaXplZCAqLwogCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9IQVNfRUVFKQogCQlhZGFwdGVyLT5ody5kZXZfc3BlYy5pY2g4bGFuLmVlZV9kaXNhYmxlID0gdHJ1ZTsKQEAgLTEyMzAsOSArMTI2MiwxMSBAQAogCWV3MzIoQ1RSTCwgcmVnKTsKIAogCWV3MzIoQ1RSTF9FWFQsIGN0cmxfZXh0IHwgRTEwMDBfQ1RSTF9FWFRfU1BEX0JZUFMpOworCWUxZV9mbHVzaCgpOwogCXVkZWxheSgyMCk7CiAJZXczMihDVFJMLCBjdHJsX3JlZyk7CiAJZXczMihDVFJMX0VYVCwgY3RybF9leHQpOworCWUxZV9mbHVzaCgpOwogCXVkZWxheSgyMCk7CiAKIG91dDoKQEAgLTEzNTIsNyArMTM4Niw3IEBACiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAogCQkvKiBQcmVhbWJsZSB0dW5pbmcgZm9yIFNTQyAqLwotCQlyZXRfdmFsID0gZTFlX3dwaHkoaHcsIFBIWV9SRUcoNzcwLCAxNiksIDB4QTIwNCk7CisJCXJldF92YWwgPSBlMWVfd3BoeShodywgSFZfS01STl9GSUZPX0NUUkxTVEEsIDB4QTIwNCk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CiAJfQpAQCAtMTY0Miw2ICsxNjc2LDcgQEAKIAlzMzIgcmV0X3ZhbCA9IDA7CiAJdTE2IHN0YXR1c19yZWcgPSAwOwogCXUzMiBtYWNfcmVnOworCXUxNiBwaHlfcmVnOwogCiAJaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF9wY2gybGFuKQogCQlnb3RvIG91dDsKQEAgLTE2NTYsMTIgKzE2OTEsMTkgQEAKIAkJbWFjX3JlZyA9IGVyMzIoRkVYVE5WTTQpOwogCQltYWNfcmVnICY9IH5FMTAwMF9GRVhUTlZNNF9CRUFDT05fRFVSQVRJT05fTUFTSzsKIAotCQlpZiAoc3RhdHVzX3JlZyAmIEhWX01fU1RBVFVTX1NQRUVEXzEwMDApCi0JCQltYWNfcmVnIHw9IEUxMDAwX0ZFWFROVk00X0JFQUNPTl9EVVJBVElPTl84VVNFQzsKLQkJZWxzZQotCQkJbWFjX3JlZyB8PSBFMTAwMF9GRVhUTlZNNF9CRUFDT05fRFVSQVRJT05fMTZVU0VDOworCQlyZXRfdmFsID0gZTFlX3JwaHkoaHcsIEk4MjU3OV9MUElfQ1RSTCwgJnBoeV9yZWcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OwogCisJCWlmIChzdGF0dXNfcmVnICYgSFZfTV9TVEFUVVNfU1BFRURfMTAwMCkgeworCQkJbWFjX3JlZyB8PSBFMTAwMF9GRVhUTlZNNF9CRUFDT05fRFVSQVRJT05fOFVTRUM7CisJCQlwaHlfcmVnICY9IH5JODI1NzlfTFBJX0NUUkxfRk9SQ0VfUExMX0xPQ0tfQ09VTlQ7CisJCX0gZWxzZSB7CisJCQltYWNfcmVnIHw9IEUxMDAwX0ZFWFROVk00X0JFQUNPTl9EVVJBVElPTl8xNlVTRUM7CisJCQlwaHlfcmVnIHw9IEk4MjU3OV9MUElfQ1RSTF9GT1JDRV9QTExfTE9DS19DT1VOVDsKKwkJfQogCQlldzMyKEZFWFROVk00LCBtYWNfcmVnKTsKKwkJcmV0X3ZhbCA9IGUxZV93cGh5KGh3LCBJODI1NzlfTFBJX0NUUkwsIHBoeV9yZWcpOwogCX0KIAogb3V0OgpAQCAtMjEzNCw4ICsyMTc2LDcgQEAKIAogCXJldF92YWwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKSB7Ci0JCWlmICgoZGV2X3NwZWMtPnNoYWRvd19yYW0pICYmCi0JCSAgICAoZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLm1vZGlmaWVkKSkgeworCQlpZiAoZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLm1vZGlmaWVkKSB7CiAJCQlkYXRhW2ldID0gZGV2X3NwZWMtPnNoYWRvd19yYW1bb2Zmc2V0K2ldLnZhbHVlOwogCQl9IGVsc2UgewogCQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfZmxhc2hfd29yZF9pY2g4bGFuKGh3LApAQCAtMzA5MCw2ICszMTMxLDcgQEAKIAlyZXRfdmFsID0gZTEwMDBfYWNxdWlyZV9zd2ZsYWdfaWNoOGxhbihodyk7CiAJZV9kYmcoIklzc3VpbmcgYSBnbG9iYWwgcmVzZXQgdG8gaWNoOGxhblxuIik7CiAJZXczMihDVFJMLCAoY3RybCB8IEUxMDAwX0NUUkxfUlNUKSk7CisJLyogY2Fubm90IGlzc3VlIGEgZmx1c2ggaGVyZSBiZWNhdXNlIGl0IGhhbmdzIHRoZSBoYXJkd2FyZSAqLwogCW1zbGVlcCgyMCk7CiAKIAlpZiAoIXJldF92YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggNjU1ODBiNDAuLjA4OTNhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKQEAgLTE5MCw3ICsxOTAsOCBAQAogCS8qIENoZWNrIGZvciBMT00gKHZzLiBOSUMpIG9yIG9uZSBvZiB0d28gdmFsaWQgbWV6emFuaW5lIGNhcmRzICovCiAJaWYgKCEoKG52bV9kYXRhICYgTlZNX0NPTVBBVF9MT00pIHx8CiAJICAgICAgKGh3LT5hZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEXzgyNTcxRUJfU0VSREVTX0RVQUwpIHx8Ci0JICAgICAgKGh3LT5hZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEXzgyNTcxRUJfU0VSREVTX1FVQUQpKSkKKwkgICAgICAoaHctPmFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVNfUVVBRCkgfHwKKwkgICAgICAoaHctPmFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVMpKSkKIAkJZ290byBvdXQ7CiAKIAlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLApAQCAtMjAwLDEwICsyMDEsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0ID09IDB4RkZGRikgeworCWlmICgobnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQgPT0gMHhGRkZGKSB8fAorCSAgICAobnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQgPT0gMHgwMDAwKSkKIAkJLyogVGhlcmUgaXMgbm8gQWx0ZXJuYXRlIE1BQyBBZGRyZXNzICovCiAJCWdvdG8gb3V0OwotCX0KIAogCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQogCQludm1fYWx0X21hY19hZGRyX29mZnNldCArPSBFMTAwMF9BTFRfTUFDX0FERFJFU1NfT0ZGU0VUX0xBTjE7CkBAIC0xOTg2LDYgKzE5ODcsNyBAQAogCQkvKiBDbGVhciBTSyBhbmQgQ1MgKi8KIAkJZWVjZCAmPSB+KEUxMDAwX0VFQ0RfQ1MgfCBFMTAwMF9FRUNEX1NLKTsKIAkJZXczMihFRUNELCBlZWNkKTsKKwkJZTFlX2ZsdXNoKCk7CiAJCXVkZWxheSgxKTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDQzNTNhZDUuLjIxOThlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTMxLDEyICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTYsNyArNTYsNyBAQAogCiAjZGVmaW5lIERSVl9FWFRSQVZFUlNJT04gIi1rIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIxLjMuMTYiIERSVl9FWFRSQVZFUlNJT04KKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuNC40IiBEUlZfRVhUUkFWRVJTSU9OCiBjaGFyIGUxMDAwZV9kcml2ZXJfbmFtZVtdID0gImUxMDAwZSI7CiBjb25zdCBjaGFyIGUxMDAwZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKQEAgLTUxOSw2ICs1MTksNjMgQEAKIH0KIAogLyoqCisgKiBlMTAwMGVfdXBkYXRlX3RhaWxfd2EgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGUxMDAwZV91cGRhdGVfW3J0XWR0X3dhKCkKKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiBAdGFpbDogYWRkcmVzcyBvZiB0YWlsIGRlc2NyaXB0b3IgcmVnaXN0ZXIKKyAqIEBpOiB2YWx1ZSB0byB3cml0ZSB0byB0YWlsIGRlc2NyaXB0b3IgcmVnaXN0ZXIKKyAqCisgKiBXaGVuIHVwZGF0aW5nIHRoZSB0YWlsIHJlZ2lzdGVyLCB0aGUgTUUgY291bGQgYmUgYWNjZXNzaW5nIEhvc3QgQ1NSCisgKiByZWdpc3RlcnMgYXQgdGhlIHNhbWUgdGltZS4gIE5vcm1hbGx5LCB0aGlzIGlzIGhhbmRsZWQgaW4gaC93IGJ5IGFuCisgKiBhcmJpdGVyIGJ1dCBvbiBzb21lIHBhcnRzIHRoZXJlIGlzIGEgYnVnIHRoYXQgYWNrbm93bGVkZ2VzIEhvc3QgYWNjZXNzZXMKKyAqIGxhdGVyIHRoYW4gaXQgc2hvdWxkIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiB0aGUgZGVzY3JpcHRvciByZWdpc3RlciB0bworICogaGF2ZSBhbiBpbmNvcnJlY3QgdmFsdWUuICBXb3JrYXJvdW5kIHRoaXMgYnkgY2hlY2tpbmcgdGhlIEZXU00gcmVnaXN0ZXIKKyAqIHdoaWNoIGhhcyBiaXQgMjQgc2V0IHdoaWxlIE1FIGlzIGFjY2Vzc2luZyBIb3N0IENTUiByZWdpc3RlcnMsIHdhaXQKKyAqIGlmIGl0IGlzIHNldCBhbmQgdHJ5IGFnYWluIGEgbnVtYmVyIG9mIHRpbWVzLgorICoqLworc3RhdGljIGlubGluZSBzMzIgZTEwMDBlX3VwZGF0ZV90YWlsX3dhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4IF9faW9tZW0gKiB0YWlsLAorCQkJCQl1bnNpZ25lZCBpbnQgaSkKK3sKKwl1bnNpZ25lZCBpbnQgaiA9IDA7CisKKwl3aGlsZSAoKGorKyA8IEUxMDAwX0lDSF9GV1NNX1BDSU0yUENJX0NPVU5UKSAmJgorCSAgICAgICAoZXIzMihGV1NNKSAmIEUxMDAwX0lDSF9GV1NNX1BDSU0yUENJKSkKKwkJdWRlbGF5KDUwKTsKKworCXdyaXRlbChpLCB0YWlsKTsKKworCWlmICgoaiA9PSBFMTAwMF9JQ0hfRldTTV9QQ0lNMlBDSV9DT1VOVCkgJiYgKGkgIT0gcmVhZGwodGFpbCkpKQorCQlyZXR1cm4gRTEwMDBfRVJSX1NXRldfU1lOQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlMTAwMGVfdXBkYXRlX3JkdF93YShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGkpCit7CisJdTggX19pb21lbSAqdGFpbCA9IChhZGFwdGVyLT5ody5od19hZGRyICsgYWRhcHRlci0+cnhfcmluZy0+dGFpbCk7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlMTAwMGVfdXBkYXRlX3RhaWxfd2EoaHcsIHRhaWwsIGkpKSB7CisJCXUzMiByY3RsID0gZXIzMihSQ1RMKTsKKwkJZXczMihSQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOworCQllX2VycigiTUUgZmlybXdhcmUgY2F1c2VkIGludmFsaWQgUkRUIC0gcmVzZXR0aW5nXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJfQorfQorCitzdGF0aWMgdm9pZCBlMTAwMGVfdXBkYXRlX3RkdF93YShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGkpCit7CisJdTggX19pb21lbSAqdGFpbCA9IChhZGFwdGVyLT5ody5od19hZGRyICsgYWRhcHRlci0+dHhfcmluZy0+dGFpbCk7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChlMTAwMGVfdXBkYXRlX3RhaWxfd2EoaHcsIHRhaWwsIGkpKSB7CisJCXUzMiB0Y3RsID0gZXIzMihUQ1RMKTsKKwkJZXczMihUQ1RMLCB0Y3RsICYgfkUxMDAwX1RDVExfRU4pOworCQllX2VycigiTUUgZmlybXdhcmUgY2F1c2VkIGludmFsaWQgVERUIC0gcmVzZXR0aW5nXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJfQorfQorCisvKioKICAqIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBsZWdhY3kgJiBleHRlbmRlZAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTU3Myw3ICs2MzAsMTAgQEAKIAkJCSAqIHN1Y2ggYXMgSUEtNjQpLgogCQkJICovCiAJCQl3bWIoKTsKLQkJCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfUENJTTJQQ0lfQVJCSVRFUl9XQSkKKwkJCQllMTAwMGVfdXBkYXRlX3JkdF93YShhZGFwdGVyLCBpKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOwogCQl9CiAJCWkrKzsKIAkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCkBAIC02NzMsNyArNzMzLDExIEBACiAJCQkgKiBzdWNoIGFzIElBLTY0KS4KIAkJCSAqLwogCQkJd21iKCk7Ci0JCQl3cml0ZWwoaSA8PCAxLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfUENJTTJQQ0lfQVJCSVRFUl9XQSkKKwkJCQllMTAwMGVfdXBkYXRlX3JkdF93YShhZGFwdGVyLCBpIDw8IDEpOworCQkJZWxzZQorCQkJCXdyaXRlbChpIDw8IDEsCisJCQkJICAgICAgIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT50YWlsKTsKIAkJfQogCiAJCWkrKzsKQEAgLTc1Niw3ICs4MjAsMTAgQEAKIAkJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKIAkJICogc3VjaCBhcyBJQS02NCkuICovCiAJCXdtYigpOwotCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOworCQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfUENJTTJQQ0lfQVJCSVRFUl9XQSkKKwkJCWUxMDAwZV91cGRhdGVfcmR0X3dhKGFkYXB0ZXIsIGkpOworCQllbHNlCisJCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnRhaWwpOwogCX0KIH0KIApAQCAtMjkxNSw3ICsyOTgyLDggQEAKIAogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlyY3RsID0gZXIzMihSQ1RMKTsKLQlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfTk9fRElTQUJMRV9SWCkpCisJCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKIAllMWVfZmx1c2goKTsKIAl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIApAQCAtMzM5NCw3ICszNDYyLDggQEAKIAogCS8qIGRpc2FibGUgcmVjZWl2ZXMgaW4gdGhlIGhhcmR3YXJlICovCiAJcmN0bCA9IGVyMzIoUkNUTCk7Ci0JZXczMihSQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOworCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX05PX0RJU0FCTEVfUlgpKQorCQlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CiAJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCiAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CkBAIC0zNDAzLDYgKzM0NzIsNyBAQAogCXRjdGwgPSBlcjMyKFRDVEwpOwogCXRjdGwgJj0gfkUxMDAwX1RDVExfRU47CiAJZXczMihUQ1RMLCB0Y3RsKTsKKwogCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCiAJZTFlX2ZsdXNoKCk7CiAJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CkBAIC00Njg2LDcgKzQ3NTYsMTIgQEAKIAl3bWIoKTsKIAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKLQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworCisJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX1BDSU0yUENJX0FSQklURVJfV0EpCisJCWUxMDAwZV91cGRhdGVfdGR0X3dhKGFkYXB0ZXIsIGkpOworCWVsc2UKKwkJd3JpdGVsKGksIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKKwogCS8qCiAJICogd2UgbmVlZCB0aGlzIGlmIG1vcmUgdGhhbiBvbmUgcHJvY2Vzc29yIGNhbiB3cml0ZSB0byBvdXIgdGFpbAogCSAqIGF0IGEgdGltZSwgaXQgc3luY2hyb25pemVzIElPIG9uIElBNjQvQWx0aXggc3lzdGVtcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCmluZGV4IDJhNmVlMTMuLjg2NjY0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKQEAgLTUzNyw2ICs1MzcsNyBAQAogCWttcm5jdHJsc3RhID0gKChvZmZzZXQgPDwgRTEwMDBfS01STkNUUkxTVEFfT0ZGU0VUX1NISUZUKSAmCiAJCSAgICAgICBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVQpIHwgRTEwMDBfS01STkNUUkxTVEFfUkVOOwogCWV3MzIoS01STkNUUkxTVEEsIGttcm5jdHJsc3RhKTsKKwllMWVfZmx1c2goKTsKIAogCXVkZWxheSgyKTsKIApAQCAtNjA5LDYgKzYxMCw3IEBACiAJa21ybmN0cmxzdGEgPSAoKG9mZnNldCA8PCBFMTAwMF9LTVJOQ1RSTFNUQV9PRkZTRVRfU0hJRlQpICYKIAkJICAgICAgIEUxMDAwX0tNUk5DVFJMU1RBX09GRlNFVCkgfCBkYXRhOwogCWV3MzIoS01STkNUUkxTVEEsIGttcm5jdHJsc3RhKTsKKwllMWVfZmx1c2goKTsKIAogCXVkZWxheSgyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBlNTVkZjMwLi42ZDVmYmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNTYxNSw3ICs1NjE1LDggQEAKIAkJZ290byBvdXRfZXJyb3I7CiAJfQogCi0JbnZfdmxhbl9tb2RlKGRldiwgZGV2LT5mZWF0dXJlcyk7CisJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfVkxBTikKKwkJbnZfdmxhbl9tb2RlKGRldiwgZGV2LT5mZWF0dXJlcyk7CiAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMjY1OWRhYS4uMzFkNWM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjcxMCw4ICsyNzEwLDEzIEBACiAJLyogVGVsbCB0aGUgc2tiIHdoYXQga2luZCBvZiBwYWNrZXQgdGhpcyBpcyAqLwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKLQkvKiBTZXQgdmxhbiB0YWcgKi8KLQlpZiAoZmNiLT5mbGFncyAmIFJYRkNCX1ZMTikKKwkvKgorCSAqIFRoZXJlJ3MgbmVlZCB0byBjaGVjayBmb3IgTkVUSUZfRl9IV19WTEFOX1JYIGhlcmUuCisJICogRXZlbiBpZiB2bGFuIHJ4IGFjY2VsIGlzIGRpc2FibGVkLCBvbiBzb21lIGNoaXBzCisJICogUlhGQ0JfVkxOIGlzIHBzZXVkbyByYW5kb21seSBzZXQuCisJICovCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlggJiYKKwkgICAgZmNiLT5mbGFncyAmIFJYRkNCX1ZMTikKIAkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGZjYi0+dmxjdGwpOwogCiAJLyogU2VuZCB0aGUgcGFja2V0IHVwIHRoZSBzdGFjayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA2ZTM1MDY5Li4yNWE4YzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtNjg2LDEwICs2ODYsMjEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGFzdF9ydWxlX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHg7CiAJdW5zaWduZWQgaW50IGNtcF9ycWZwcjsKLQl1bnNpZ25lZCBpbnQgbG9jYWxfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOwotCXVuc2lnbmVkIGludCBsb2NhbF9ycWZjcltNQVhfRklMRVJfSURYICsgMV07CisJdW5zaWduZWQgaW50ICpsb2NhbF9ycWZwcjsKKwl1bnNpZ25lZCBpbnQgKmxvY2FsX3JxZmNyOwogCWludCBpID0gMHgwLCBrID0gMHgwOwogCWludCBqID0gTUFYX0ZJTEVSX0lEWCwgbCA9IDB4MDsKKwlpbnQgcmV0ID0gMTsKKworCWxvY2FsX3JxZnByID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIChNQVhfRklMRVJfSURYICsgMSksCisJCUdGUF9LRVJORUwpOworCWxvY2FsX3JxZmNyID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqIChNQVhfRklMRVJfSURYICsgMSksCisJCUdGUF9LRVJORUwpOworCWlmICghbG9jYWxfcnFmcHIgfHwgIWxvY2FsX3JxZmNyKSB7CisJCXByX2VycigiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldCA9IDA7CisJCWdvdG8gZXJyOworCX0KIAogCXN3aXRjaCAoY2xhc3MpIHsKIAljYXNlIFRDUF9WNF9GTE9XOgpAQCAtNzA2LDcgKzcxNyw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiUmlnaHQgbm93IHRoaXMgY2xhc3MgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAwOworCQlyZXQgPSAwOworCQlnb3RvIGVycjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTEVSX0lEWCArIDE7IGkrKykgewpAQCAtNzIxLDcgKzczMyw4IEBACiAKIAlpZiAoaSA9PSBNQVhfRklMRVJfSURYICsgMSkgewogCQlwcl9lcnIoIk5vIHBhcnNlIHJ1bGUgZm91bmQsIGNhbid0IGNyZWF0ZSBoYXNoIHJ1bGVzXG4iKTsKLQkJcmV0dXJuIDA7CisJCXJldCA9IDA7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qIElmIGEgbWF0Y2ggd2FzIGZvdW5kLCB0aGVuIGl0IGJlZ2lucyB0aGUgc3RhcnRpbmcgb2YgYSBjbHVzdGVyIHJ1bGUKQEAgLTc2NSw3ICs3NzgsMTAgQEAKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KIAotCXJldHVybiAxOworZXJyOgorCWtmcmVlKGxvY2FsX3JxZmNyKTsKKwlrZnJlZShsb2NhbF9ycWZwcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZmFyX3NldF9oYXNoX29wdHMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfcHRwLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3B0cC5jCmluZGV4IDFjOTc4NjEuLmY2N2I4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfcHRwLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9wdHAuYwpAQCAtMTkzLDE0ICsxOTMsOSBAQAogLyogQ2FsbGVyIG11c3QgaG9sZCBldHNlY3RzLT5sb2NrLiAqLwogc3RhdGljIHZvaWQgc2V0X2ZpcGVycyhzdHJ1Y3QgZXRzZWN0cyAqZXRzZWN0cykKIHsKLQl1MzIgdG1yX2N0cmwgPSBnZmFyX3JlYWQoJmV0c2VjdHMtPnJlZ3MtPnRtcl9jdHJsKTsKLQotCWdmYXJfd3JpdGUoJmV0c2VjdHMtPnJlZ3MtPnRtcl9jdHJsLCAgIHRtcl9jdHJsICYgKH5URSkpOwotCWdmYXJfd3JpdGUoJmV0c2VjdHMtPnJlZ3MtPnRtcl9wcnNjLCAgIGV0c2VjdHMtPnRtcl9wcnNjKTsKKwlzZXRfYWxhcm0oZXRzZWN0cyk7CiAJZ2Zhcl93cml0ZSgmZXRzZWN0cy0+cmVncy0+dG1yX2ZpcGVyMSwgZXRzZWN0cy0+dG1yX2ZpcGVyMSk7CiAJZ2Zhcl93cml0ZSgmZXRzZWN0cy0+cmVncy0+dG1yX2ZpcGVyMiwgZXRzZWN0cy0+dG1yX2ZpcGVyMik7Ci0Jc2V0X2FsYXJtKGV0c2VjdHMpOwotCWdmYXJfd3JpdGUoJmV0c2VjdHMtPnJlZ3MtPnRtcl9jdHJsLCAgIHRtcl9jdHJsfFRFKTsKIH0KIAogLyoKQEAgLTUxMSw3ICs1MDYsNyBAQAogCWdmYXJfd3JpdGUoJmV0c2VjdHMtPnJlZ3MtPnRtcl9maXBlcjEsIGV0c2VjdHMtPnRtcl9maXBlcjEpOwogCWdmYXJfd3JpdGUoJmV0c2VjdHMtPnJlZ3MtPnRtcl9maXBlcjIsIGV0c2VjdHMtPnRtcl9maXBlcjIpOwogCXNldF9hbGFybShldHNlY3RzKTsKLQlnZmFyX3dyaXRlKCZldHNlY3RzLT5yZWdzLT50bXJfY3RybCwgICB0bXJfY3RybHxGU3xSVFBFfFRFKTsKKwlnZmFyX3dyaXRlKCZldHNlY3RzLT5yZWdzLT50bXJfY3RybCwgICB0bXJfY3RybHxGU3xSVFBFfFRFfEZSRCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZldHNlY3RzLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCBiYTk5YWYwLi4zZTY2NzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIH0KIAogLyogcmVjeWNsZSB0aGUgY3VycmVudCBidWZmZXIgb24gdGhlIHJ4IHF1ZXVlICovCi1zdGF0aWMgdm9pZCBpYm12ZXRoX3J4cV9yZWN5Y2xlX2J1ZmZlcihzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBpYm12ZXRoX3J4cV9yZWN5Y2xlX2J1ZmZlcihzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBxX2luZGV4ID0gYWRhcHRlci0+cnhfcXVldWUuaW5kZXg7CiAJdTY0IGNvcnJlbGF0b3IgPSBhZGFwdGVyLT5yeF9xdWV1ZS5xdWV1ZV9hZGRyW3FfaW5kZXhdLmNvcnJlbGF0b3I7CkBAIC00MDMsNiArNDAzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSBjb3JyZWxhdG9yICYgMHhmZmZmZmZmZlVMOwogCXVuaW9uIGlibXZldGhfYnVmX2Rlc2MgZGVzYzsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CisJaW50IHJldCA9IDE7CiAKIAlCVUdfT04ocG9vbCA+PSBJQk1WRVRIX05VTV9CVUZGX1BPT0xTKTsKIAlCVUdfT04oaW5kZXggPj0gYWRhcHRlci0+cnhfYnVmZl9wb29sW3Bvb2xdLnNpemUpOwpAQCAtNDEwLDcgKzQxMSw3IEBACiAJaWYgKCFhZGFwdGVyLT5yeF9idWZmX3Bvb2xbcG9vbF0uYWN0aXZlKSB7CiAJCWlibXZldGhfcnhxX2hhcnZlc3RfYnVmZmVyKGFkYXB0ZXIpOwogCQlpYm12ZXRoX2ZyZWVfYnVmZmVyX3Bvb2woYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2J1ZmZfcG9vbFtwb29sXSk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJZGVzYy5maWVsZHMuZmxhZ3NfbGVuID0gSUJNVkVUSF9CVUZfVkFMSUQgfApAQCAtNDIzLDEyICs0MjQsMTYgQEAKIAkJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsICJoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIgZmFpbGVkICIKIAkJCSAgICJkdXJpbmcgcmVjeWNsZSByYz0lbGQiLCBscGFyX3JjKTsKIAkJaWJtdmV0aF9yZW1vdmVfYnVmZmVyX2Zyb21fcG9vbChhZGFwdGVyLCBhZGFwdGVyLT5yeF9xdWV1ZS5xdWV1ZV9hZGRyW2FkYXB0ZXItPnJ4X3F1ZXVlLmluZGV4XS5jb3JyZWxhdG9yKTsKKwkJcmV0ID0gMDsKIAl9CiAKIAlpZiAoKythZGFwdGVyLT5yeF9xdWV1ZS5pbmRleCA9PSBhZGFwdGVyLT5yeF9xdWV1ZS5udW1fc2xvdHMpIHsKIAkJYWRhcHRlci0+cnhfcXVldWUuaW5kZXggPSAwOwogCQlhZGFwdGVyLT5yeF9xdWV1ZS50b2dnbGUgPSAhYWRhcHRlci0+cnhfcXVldWUudG9nZ2xlOwogCX0KKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlibXZldGhfcnhxX2hhcnZlc3RfYnVmZmVyKHN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xMDg0LDggKzEwODksOSBAQAogCQkJCWlmIChyeF9mbHVzaCkKIAkJCQkJaWJtdmV0aF9mbHVzaF9idWZmZXIoc2tiLT5kYXRhLAogCQkJCQkJbGVuZ3RoICsgb2Zmc2V0KTsKKwkJCQlpZiAoIWlibXZldGhfcnhxX3JlY3ljbGVfYnVmZmVyKGFkYXB0ZXIpKQorCQkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCQlza2IgPSBuZXdfc2tiOwotCQkJCWlibXZldGhfcnhxX3JlY3ljbGVfYnVmZmVyKGFkYXB0ZXIpOwogCQkJfSBlbHNlIHsKIAkJCQlpYm12ZXRoX3J4cV9oYXJ2ZXN0X2J1ZmZlcihhZGFwdGVyKTsKIAkJCQlza2JfcmVzZXJ2ZShza2IsIG9mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKaW5kZXggN2RjZDY1Yy4uNDA0MDcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYwpAQCAtMjg1LDYgKzI4NSw3IEBACiAJCS8qIENsZWFyIFNLIGFuZCBDUyAqLwogCQllZWNkICY9IH4oRTEwMDBfRUVDRF9DUyB8IEUxMDAwX0VFQ0RfU0spOwogCQl3cjMyKEUxMDAwX0VFQ0QsIGVlY2QpOworCQl3cmZsKCk7CiAJCXVkZWxheSgxKTsKIAkJdGltZW91dCA9IE5WTV9NQVhfUkVUUllfU1BJOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IGZmMjQ0Y2UuLjQxNGIwMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0xMjI1LDYgKzEyMjUsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAl3cjMyKEUxMDAwX0lNQywgfjApOworCXdyZmwoKTsKIAltc2xlZXAoMTApOwogCiAJLyogRGVmaW5lIGFsbCB3cml0YWJsZSBiaXRzIGZvciBJQ1MgKi8KQEAgLTEyNjgsNiArMTI2OSw3IEBACiAKIAkJCXdyMzIoRTEwMDBfSU1DLCBtYXNrKTsKIAkJCXdyMzIoRTEwMDBfSUNTLCBtYXNrKTsKKwkJCXdyZmwoKTsKIAkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTEyODksNiArMTI5MSw3IEBACiAKIAkJd3IzMihFMTAwMF9JTVMsIG1hc2spOwogCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CisJCXdyZmwoKTsKIAkJbXNsZWVwKDEwKTsKIAogCQlpZiAoIShhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spKSB7CkBAIC0xMzEwLDYgKzEzMTMsNyBAQAogCiAJCQl3cjMyKEUxMDAwX0lNQywgfm1hc2spOwogCQkJd3IzMihFMTAwMF9JQ1MsIH5tYXNrKTsKKwkJCXdyZmwoKTsKIAkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTEzMjEsNiArMTMyNSw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCXdyMzIoRTEwMDBfSU1DLCB+MCk7CisJd3JmbCgpOwogCW1zbGVlcCgxMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBkYzU5OTA1Li40MGQ0YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMTA1Miw2ICsxMDUyLDcgQEAKIAkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CiAJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOwogCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCXdyZmwoKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJJT1YgRGlzYWJsZWRcbiIpOwogCX0KQEAgLTIwMjIsNyArMjAyMyw3IEBACiAKIAlpZiAoaHctPmJ1cy5mdW5jID09IDApCiAJCWh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwgJmVlcHJvbV9kYXRhKTsKLQllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1ODApCisJZWxzZSBpZiAoaHctPm1hYy50eXBlID49IGUxMDAwXzgyNTgwKQogCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EgKwogCQkgICAgICAgICAgICAgICAgIE5WTV84MjU4MF9MQU5fRlVOQ19PRkZTRVQoaHctPmJ1cy5mdW5jKSwgMSwKIAkJICAgICAgICAgICAgICAgICAmZWVwcm9tX2RhdGEpOwpAQCAtMjE5OCw2ICsyMTk5LDcgQEAKIAkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CiAJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOwogCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCXdyZmwoKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJT1YgRGlzYWJsZWRcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggMTMzMGM4ZS4uNDBlZDA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTEyMjYsNiArMTIyNiw3IEBACiAJLyogZGlzYWJsZSB0cmFuc21pdHMgKi8KIAl0eGRjdGwgPSBlcjMyKFRYRENUTCgwKSk7CiAJZXczMihUWERDVEwoMCksIHR4ZGN0bCAmIH5FMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTsKKwllMWVfZmx1c2goKTsKIAltc2xlZXAoMTApOwogCiAJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLwpAQCAtMTMwNiw2ICsxMzA3LDcgQEAKIAkvKiBkaXNhYmxlIHJlY2VpdmVzICovCiAJcnhkY3RsID0gZXIzMihSWERDVEwoMCkpOwogCWV3MzIoUlhEQ1RMKDApLCByeGRjdGwgJiB+RTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7CisJZTFlX2ZsdXNoKCk7CiAJbXNsZWVwKDEwKTsKIAogCXJkbGVuID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaF9pcmRhLmMgYi9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYwppbmRleCA0NDg4YmQ1Li44MjY2MDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYwpAQCAtMjIsNiArMjIsOCBAQAogICogIC0gRE1BIHRyYW5zZmVyIHN1cHBvcnQKICAqICAtIEZJRk8gbW9kZSBzdXBwb3J0CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfc2lyLmMKaW5kZXggNTJhN2M4Ni4uZWQ3ZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NoX3Npci5jCkBAIC0xMiw2ICsxMiw4IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC01MTEsNyArNTEzLDcgQEAKIAogc3RhdGljIGludCBzaF9zaXJfcmVhZF9kYXRhKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKIHsKLQl1MTYgdmFsOworCXUxNiB2YWwgPSAwOwogCWludCB0aW1lb3V0ID0gMTAyNDsKIAogCXdoaWxlICh0aW1lb3V0LS0pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggOTU0ZjZlOTMuLjhiMWMzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0yNDA1LDggKzI0MDUsNiBAQAogICogYWRkcmVzc2VzIG1ha2luZyBhIHN1YnN5c3RlbSBkZXZpY2UgdGFibGUgbmVjZXNzYXJ5LgogICovCiAjaWZkZWYgQ09ORklHX1BDSQotI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2Ci0jZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5CiBzdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2luaXRkYXRhID0gewogCS8qCiAJICogU3Vic3lzdGVtcyBuZWVkaW5nIGVudHJpZXM6CkBAIC0yNDE2LDcgKzI0MTQsNyBAQAogCSAqLwogCXsKIAkJLyogR3Vlc3NlZCBlbnRyeSAqLwotCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCiAJCS5kZXZpY2UgPSAweDI0Y2MsCiAJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCiAJCS5zdWJkZXZpY2UgPSAweDA4YmMsCkBAIC0yNDI5LDcgKzI0MjcsNyBAQAogCQkubmFtZSA9ICJIUCBueDUwMDAgZmFtaWx5IiwKIAl9LAogCXsKLQkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9JTlRFTCwgLyogSW50ZWwgODI4MDFEQk0gTFBDIGJyaWRnZSAqLworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwgLyogSW50ZWwgODI4MDFEQk0gTFBDIGJyaWRnZSAqLwogCQkuZGV2aWNlID0gMHgyNGNjLAogCQkuc3VidmVuZG9yID0gMHgxMDNjLAogCQkuc3ViZGV2aWNlID0gMHgwODhjLApAQCAtMjQ0Myw3ICsyNDQxLDcgQEAKIAkJLm5hbWUgPSAiSFAgbmM4MDAwIGZhbWlseSIsCiAJfSwKIAl7Ci0JCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KIAkJLmRldmljZSA9IDB4MjRjYywKIAkJLnN1YnZlbmRvciA9IDB4MTAzYywKIAkJLnN1YmRldmljZSA9IDB4MDg5MCwKQEAgLTI0NTYsNyArMjQ1NCw3IEBACiAJCS5uYW1lID0gIkhQIG5jNjAwMCBmYW1pbHkiLAogCX0sCiAJewotCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCiAJCS5kZXZpY2UgPSAweDI0Y2MsCiAJCS5zdWJ2ZW5kb3IgPSAweDBlMTEsCiAJCS5zdWJkZXZpY2UgPSAweDA4NjAsCkBAIC0yNDcxLDcgKzI0NjksNyBAQAogCX0sCiAJewogCQkvKiBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlICovCi0JCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkuZGV2aWNlID0gMHgyNGMwLAogCQkuc3VidmVuZG9yID0gMHgxMTc5LAogCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KQEAgLTI0ODQsNyArMjQ4Miw3IEBACiAJCS5uYW1lID0gIlRvc2hpYmEgbGFwdG9wIHdpdGggSW50ZWwgODI4MDFEQi9EQkwgTFBDIGJyaWRnZSIsCiAJfSwKIAl7Ci0JCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxQ0FNIElTQSBicmlkZ2UgKi8KKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsIC8qIEludGVsIDgyODAxQ0FNIElTQSBicmlkZ2UgKi8KIAkJLmRldmljZSA9IDB4MjQ4YywKIAkJLnN1YnZlbmRvciA9IDB4MTE3OSwKIAkJLnN1YmRldmljZSA9IDB4ZmZmZiwgLyogMHhmZmZmIGlzICJhbnkiICovCkBAIC0yNDk4LDcgKzI0OTYsNyBAQAogCX0sCiAJewogCQkvKiA4MjgwMURCTSAoSUNINC1NKSBMUEMgSW50ZXJmYWNlIEJyaWRnZSAqLwotCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLAorCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJLmRldmljZSA9IDB4MjRjYywKIAkJLnN1YnZlbmRvciA9IDB4MTE3OSwKIAkJLnN1YmRldmljZSA9IDB4ZmZmZiwgLyogMHhmZmZmIGlzICJhbnkiICovCkBAIC0yNTEyLDcgKzI1MTAsNyBAQAogCX0sCiAJewogCQkvKiBBTGkgTTE1MzMvTTE1MzUgUENJIHRvIElTQSBCcmlkZ2UgW0FsYWRkaW4gSVYvVi9WK10gKi8KLQkJLnZlbmRvciA9IFBDSUlEX1ZFTkRPUl9BTEksCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0FMLAogCQkuZGV2aWNlID0gMHgxNTMzLAogCQkuc3VidmVuZG9yID0gMHgxMTc5LAogCQkuc3ViZGV2aWNlID0gMHhmZmZmLCAvKiAweGZmZmYgaXMgImFueSIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9lZS5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKaW5kZXggYzk4MmFiOS4uMzhiMzYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2VlLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAkgKi8KIAkqZWVjZF9yZWcgPSAqZWVjZF9yZWcgfCBJWEdCX0VFQ0RfU0s7CiAJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsICplZWNkX3JlZyk7CisJSVhHQl9XUklURV9GTFVTSChodyk7CiAJdWRlbGF5KDUwKTsKIH0KIApAQCAtNzUsNiArNzYsNyBAQAogCSAqLwogCSplZWNkX3JlZyA9ICplZWNkX3JlZyAmIH5JWEdCX0VFQ0RfU0s7CiAJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsICplZWNkX3JlZyk7CisJSVhHQl9XUklURV9GTFVTSChodyk7CiAJdWRlbGF5KDUwKTsKIH0KIApAQCAtMTEyLDYgKzExNCw3IEBACiAJCQllZWNkX3JlZyB8PSBJWEdCX0VFQ0RfREk7CiAKIAkJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2RfcmVnKTsKKwkJSVhHQl9XUklURV9GTFVTSChodyk7CiAKIAkJdWRlbGF5KDUwKTsKIApAQCAtMjA2LDIxICsyMDksMjUgQEAKIAkvKiAgRGVzZWxlY3QgRUVQUk9NICAqLwogCWVlY2RfcmVnICY9IH4oSVhHQl9FRUNEX0NTIHwgSVhHQl9FRUNEX1NLKTsKIAlJWEdCX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZF9yZWcpOworCUlYR0JfV1JJVEVfRkxVU0goaHcpOwogCXVkZWxheSg1MCk7CiAKIAkvKiAgQ2xvY2sgaGlnaCAgKi8KIAllZWNkX3JlZyB8PSBJWEdCX0VFQ0RfU0s7CiAJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2RfcmVnKTsKKwlJWEdCX1dSSVRFX0ZMVVNIKGh3KTsKIAl1ZGVsYXkoNTApOwogCiAJLyogIFNlbGVjdCBFRVBST00gICovCiAJZWVjZF9yZWcgfD0gSVhHQl9FRUNEX0NTOwogCUlYR0JfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkX3JlZyk7CisJSVhHQl9XUklURV9GTFVTSChodyk7CiAJdWRlbGF5KDUwKTsKIAogCS8qICBDbG9jayBsb3cgICovCiAJZWVjZF9yZWcgJj0gfklYR0JfRUVDRF9TSzsKIAlJWEdCX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZF9yZWcpOworCUlYR0JfV1JJVEVfRkxVU0goaHcpOwogCXVkZWxheSg1MCk7CiB9CiAKQEAgLTIzOSwxMSArMjQ2LDEzIEBACiAJLyogIFJpc2luZyBlZGdlIG9mIGNsb2NrICAqLwogCWVlY2RfcmVnIHw9IElYR0JfRUVDRF9TSzsKIAlJWEdCX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZF9yZWcpOworCUlYR0JfV1JJVEVfRkxVU0goaHcpOwogCXVkZWxheSg1MCk7CiAKIAkvKiAgRmFsbGluZyBlZGdlIG9mIGNsb2NrICAqLwogCWVlY2RfcmVnICY9IH5JWEdCX0VFQ0RfU0s7CiAJSVhHQl9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2RfcmVnKTsKKwlJWEdCX1dSSVRFX0ZMVVNIKGh3KTsKIAl1ZGVsYXkoNTApOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5jCmluZGV4IDZjYjJlNDIuLjNkNjFhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ody5jCkBAIC0xNDksNiArMTQ5LDcgQEAKIAkgKi8KIAlJWEdCX1dSSVRFX1JFRyhodywgUkNUTCwgSVhHQl9SRUFEX1JFRyhodywgUkNUTCkgJiB+SVhHQl9SQ1RMX1JYRU4pOwogCUlYR0JfV1JJVEVfUkVHKGh3LCBUQ1RMLCBJWEdCX1JFQURfUkVHKGh3LCBUQ1RMKSAmIH5JWEdCX1RDVExfVFhFTik7CisJSVhHQl9XUklURV9GTFVTSChodyk7CiAJbXNsZWVwKElYR0JfREVMQVlfQkVGT1JFX1JFU0VUKTsKIAogCS8qIElzc3VlIGEgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIHdpbGwgcmVzZXQgdGhlIGNoaXAncwpAQCAtMTIyMCw2ICsxMjIxLDcgQEAKIAljdHJsICY9IH5JWEdCX0NUUkwwX1NEUDI7CiAJY3RybCB8PSBJWEdCX0NUUkwwX1NEUDM7CiAJSVhHQl9XUklURV9SRUcoaHcsIENUUkwwLCBjdHJsKTsKKwlJWEdCX1dSSVRFX0ZMVVNIKGh3KTsKIAogCS8qIFNlckRlcyBuZWVkcyBleHRyYSBkZWxheSAqLwogCW1zbGVlcChJWEdCX1NVTl9QSFlfUkVTRVRfREVMQVkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKaW5kZXggM2IzZGQ0ZC4uMzRmMzBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0yMTMsNiArMjEzLDcgQEAKIAlzd2l0Y2ggKGh3LT5waHkudHlwZSkgewogCWNhc2UgaXhnYmVfcGh5X3RuOgogCQlwaHktPm9wcy5jaGVja19saW5rID0gJml4Z2JlX2NoZWNrX3BoeV9saW5rX3RueDsKKwkJcGh5LT5vcHMuc2V0dXBfbGluayA9ICZpeGdiZV9zZXR1cF9waHlfbGlua190bng7CiAJCXBoeS0+b3BzLmdldF9maXJtd2FyZV92ZXJzaW9uID0KIAkJICAgICAgICAgICAgICZpeGdiZV9nZXRfcGh5X2Zpcm13YXJlX3ZlcnNpb25fdG54OwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggNzc3MDUxZi4uZmMxMzc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTI2MzIsNiArMjYzMiw3IEBACiAJCWF1dG9jX3JlZyB8PSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUOwogCQlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfRkxVOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOworCQlJWEdCRV9XUklURV9GTFVTSChodyk7CiAJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IGRjNjQ5NTUuLjgyZDQyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEzNzgsNiArMTM3OCw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOworCUlYR0JFX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CiAJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCkBAIC0xMzk4LDYgKzEzOTksNyBAQAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CisJCQlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKQEAgLTE0MTUsNiArMTQxNyw3IEBACiAJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgbWFzayk7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsIG1hc2spOworCQlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCQlpZiAoIShhZGFwdGVyLT50ZXN0X2ljciAmbWFzaykpIHsKQEAgLTE0MzUsNiArMTQzOCw3IEBACiAJCQkgICAgICAgICAgICAgICAgfm1hc2sgJiAweDAwMDA3RkZGKTsKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsCiAJCQkgICAgICAgICAgICAgICAgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCUlYR0JFX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7CiAJCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCQkJaWYgKGFkYXB0ZXItPnRlc3RfaWNyKSB7CkBAIC0xNDQ2LDYgKzE0NTAsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCAweEZGRkZGRkZGKTsKKwlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJLyogVW5ob29rIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCAxYmU2MTc1Li4yMjc5MDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC0xODQsNiArMTg0LDcgQEAKIAl2bWRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRfQ1RMKTsKIAl2bWRjdGwgJj0gfklYR0JFX1ZUX0NUTF9QT09MX01BU0s7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVF9DVEwsIHZtZGN0bCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwogCiAJLyogdGFrZSBhIGJyZWF0aGVyIHRoZW4gY2xlYW4gdXAgZHJpdmVyIGRhdGEgKi8KIAltc2xlZXAoMTAwKTsKQEAgLTEwMDUsNyArMTAwNiw3IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGV2ZW50ID0gKih1bnNpZ25lZCBsb25nICopZGF0YTsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkpCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9DQVBBQkxFKSkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0xNDU4LDggKzE0NTksMTAgQEAKIAkJaWYgKGl4Z2JlX3J4X2lzX2Zjb2UoYWRhcHRlciwgcnhfZGVzYykpIHsKIAkJCWRkcF9ieXRlcyA9IGl4Z2JlX2Zjb2VfZGRwKGFkYXB0ZXIsIHJ4X2Rlc2MsIHNrYiwKIAkJCQkJCSAgIHN0YXRlcnIpOwotCQkJaWYgKCFkZHBfYnl0ZXMpCisJCQlpZiAoIWRkcF9ieXRlcykgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJZ290byBuZXh0X2Rlc2M7CisJCQl9CiAJCX0KICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiAJCWl4Z2JlX3JlY2VpdmVfc2tiKHFfdmVjdG9yLCBza2IsIHN0YXRlcnIsIHJ4X3JpbmcsIHJ4X2Rlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwppbmRleCA3MzVmNjg2Li5mN2NhMzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwpAQCAtMTU4NSw2ICsxNTg1LDcgQEAKIAkqaTJjY3RsIHw9IElYR0JFX0kyQ19DTEtfT1VUOwogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIAogCS8qIFNDTCByaXNlIHRpbWUgKDEwMDBucykgKi8KIAl1ZGVsYXkoSVhHQkVfSTJDX1RfUklTRSk7CkBAIC0xNjA1LDYgKzE2MDYsNyBAQAogCSppMmNjdGwgJj0gfklYR0JFX0kyQ19DTEtfT1VUOwogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIAogCS8qIFNDTCBmYWxsIHRpbWUgKDMwMG5zKSAqLwogCXVkZWxheShJWEdCRV9JMkNfVF9GQUxMKTsKQEAgLTE2MjgsNiArMTYzMCw3IEBACiAJCSppMmNjdGwgJj0gfklYR0JFX0kyQ19EQVRBX09VVDsKIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSTJDQ1RMLCAqaTJjY3RsKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CiAKIAkvKiBEYXRhIHJpc2UvZmFsbCAoMTAwMG5zLzMwMG5zKSBhbmQgc2V0LXVwIHRpbWUgKDI1MG5zKSAqLwogCXVkZWxheShJWEdCRV9JMkNfVF9SSVNFICsgSVhHQkVfSTJDX1RfRkFMTCArIElYR0JFX0kyQ19UX1NVX0RBVEEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCmluZGV4IGJlYzMwZWQuLjI2OTZjNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCWN0cmxfZXh0ID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkxfRVhUKTsKIAljdHJsX2V4dCB8PSBJWEdCRV9DVFJMX0VYVF9QRlJTVEQ7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCwgY3RybF9leHQpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIAogCW1zbGVlcCg1MCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCAwZmNkYzI1Li5kYzRlMzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0zMjIsNiArMzIyLDkgQEAKIAkJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKQogCQkJYnAtPnR4X3JpbmdbaV0uY3RybCA9IE1BQ0JfQklUKFRYX1VTRUQpOwogCisJCS8qIEFkZCB3cmFwIGJpdCAqLworCQlicC0+dHhfcmluZ1tUWF9SSU5HX1NJWkUgLSAxXS5jdHJsIHw9IE1BQ0JfQklUKFRYX1dSQVApOworCiAJCS8qIGZyZWUgdHJhbnNtaXQgYnVmZmVyIGluIHVwcGVyIGxheWVyKi8KIAkJZm9yICh0YWlsID0gYnAtPnR4X3RhaWw7IHRhaWwgIT0gaGVhZDsgdGFpbCA9IE5FWFRfVFgodGFpbCkpIHsKIAkJCXN0cnVjdCByaW5nX2luZm8gKnJwID0gJmJwLT50eF9za2JbdGFpbF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcG9ydC5jCmluZGV4IDVlNzEwOTEuLjVhZGE1YjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3BvcnQuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3BvcnQuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJbWVtc2V0KGNvbnRleHQsIDAsIHNpemVvZiAqY29udGV4dCk7CiAKIAljb250ZXh0LT5iYXNlX3FwbiA9IGNwdV90b19iZTMyKGJhc2VfcXBuKTsKLQljb250ZXh0LT5uX21hYyA9IDB4NzsKKwljb250ZXh0LT5uX21hYyA9IDB4MjsKIAljb250ZXh0LT5wcm9taXNjID0gY3B1X3RvX2JlMzIocHJvbWlzYyA8PCBTRVRfUE9SVF9QUk9NSVNDX1NISUZUIHwKIAkJCQkgICAgICAgYmFzZV9xcG4pOwogCWNvbnRleHQtPm1jYXN0ID0gY3B1X3RvX2JlMzIobV9wcm9taXNjIDw8IFNFVF9QT1JUX01DX1BST01JU0NfU0hJRlQgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCBjOTRiMzQyLi5mMGVlMzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTExNyw2ICsxMTE3LDggQEAKIAlpbmZvLT5wb3J0ID0gcG9ydDsKIAltbHg0X2luaXRfbWFjX3RhYmxlKGRldiwgJmluZm8tPm1hY190YWJsZSk7CiAJbWx4NF9pbml0X3ZsYW5fdGFibGUoZGV2LCAmaW5mby0+dmxhbl90YWJsZSk7CisJaW5mby0+YmFzZV9xcG4gPSBkZXYtPmNhcHMucmVzZXJ2ZWRfcXBzX2Jhc2VbTUxYNF9RUF9SRUdJT05fRVRIX0FERFJdICsKKwkJCShwb3J0IC0gMSkgKiAoMSA8PCBsb2dfbnVtX21hYyk7CiAKIAlzcHJpbnRmKGluZm8tPmRldl9uYW1lLCAibWx4NF9wb3J0JWQiLCBwb3J0KTsKIAlpbmZvLT5wb3J0X2F0dHIuYXR0ci5uYW1lID0gaW5mby0+ZGV2X25hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCmluZGV4IDFmOTVhZmQuLjYwOWUwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCkBAIC0yNTgsOSArMjU4LDEyIEBACiAJaWYgKHZhbGlkYXRlX2luZGV4KGRldiwgdGFibGUsIGluZGV4KSkKIAkJZ290byBvdXQ7CiAKLQl0YWJsZS0+ZW50cmllc1tpbmRleF0gPSAwOwotCW1seDRfc2V0X3BvcnRfbWFjX3RhYmxlKGRldiwgcG9ydCwgdGFibGUtPmVudHJpZXMpOwotCS0tdGFibGUtPnRvdGFsOworCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBhZGRyZXNzIGhhcyByZWZlcmVuY2UgY291bnQgKi8KKwlpZiAoISgtLXRhYmxlLT5yZWZzW2luZGV4XSkpIHsKKwkJdGFibGUtPmVudHJpZXNbaW5kZXhdID0gMDsKKwkJbWx4NF9zZXRfcG9ydF9tYWNfdGFibGUoZGV2LCBwb3J0LCB0YWJsZS0+ZW50cmllcyk7CisJCS0tdGFibGUtPnRvdGFsOworCX0KIG91dDoKIAltdXRleF91bmxvY2soJnRhYmxlLT5tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaXUuYyBiL2RyaXZlcnMvbmV0L25pdS5jCmluZGV4IGNkNmMyMzEuLmVkNDc1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC05MjAxLDcgKzkyMDEsNyBAQAogCiAJZmlyc3RfY2hhbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHBvcnQ7IGkrKykKLQkJZmlyc3RfY2hhbiArPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwkJZmlyc3RfY2hhbiArPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtpXTsKIAludW1fY2hhbiA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOwogCiAJZm9yIChpID0gZmlyc3RfY2hhbjsgaSA8IChmaXJzdF9jaGFuICsgbnVtX2NoYW4pOyBpKyspIHsKQEAgLTkyMTcsNyArOTIxNyw3IEBACiAKIAlmaXJzdF9jaGFuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydDsgaSsrKQotCQlmaXJzdF9jaGFuICs9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W3BvcnRdOworCQlmaXJzdF9jaGFuICs9IHBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W2ldOwogCW51bV9jaGFuID0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbcG9ydF07CiAJZm9yIChpID0gZmlyc3RfY2hhbjsgaSA8IChmaXJzdF9jaGFuICsgbnVtX2NoYW4pOyBpKyspIHsKIAkJZXJyID0gbml1X2xkZ19hc3NpZ25fbGRuKG5wLCBwYXJlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDFjZDkzOTQuLmNmZmJjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC04MDksNyArODA5LDcgQEAKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgY2hhciAqbmFtZTsKLSAgICBpbnQgaSwgaiwgcmV2OworICAgIGludCBpLCByZXYsIGogPSAwOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgdV9sb25nIG1pcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDhiMzA5MGQuLjgwYjZmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTgyLDcgKzgyLDcgQEAKIC8qCiAgKiBWTEIgSS9PIGFkZHJlc3NlcwogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHBjbmV0MzJfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNuZXQzMl9wb3J0bGlzdFtdID0KICAgICB7IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAwIH07CiAKIHN0YXRpYyBpbnQgcGNuZXQzMl9kZWJ1ZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMgYi9kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jCmluZGV4IDJjZDhkYzUuLmNiNmUwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYwpAQCAtMzQsOCArMzQsNyBAQAogI2RlZmluZSBQQUdFU0VMCQkweDEzCiAjZGVmaW5lIExBWUVSNAkJMHgwMgogI2RlZmluZSBMQVlFUjIJCTB4MDEKLSNkZWZpbmUgTUFYX1JYVFMJNAotI2RlZmluZSBNQVhfVFhUUwk0CisjZGVmaW5lIE1BWF9SWFRTCTY0CiAjZGVmaW5lIE5fRVhUX1RTCTEKICNkZWZpbmUgUFNGX1BUUFZFUgkyCiAjZGVmaW5lIFBTRl9FVk5UCTB4NDAwMApAQCAtMjE4LDcgKzIxNyw3IEBACiAJcnh0cy0+c2VxaWQgPSBwLT5zZXFpZDsKIAlyeHRzLT5tc2d0eXBlID0gKHAtPm1zZ3R5cGUgPj4gMTIpICYgMHhmOwogCXJ4dHMtPmhhc2ggPSBwLT5tc2d0eXBlICYgMHgwZmZmOwotCXJ4dHMtPnRtbyA9IGppZmZpZXMgKyBIWjsKKwlyeHRzLT50bW8gPSBqaWZmaWVzICsgMjsKIH0KIAogc3RhdGljIHU2NCBwaHkydHh0cyhzdHJ1Y3QgcGh5X3R4dHMgKnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYyBiL2RyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jCmluZGV4IDA2MjBiYTkuLjA0YmI4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jCkBAIC0yNSw4ICsyNSw5IEBACiAvKiBEUDgzODY1IHBoeSBpZGVudGlmaWVyIHZhbHVlcyAqLwogI2RlZmluZSBEUDgzODY1X1BIWV9JRAkweDIwMDA1YzdhCiAKLSNkZWZpbmUgRFA4Mzg2NV9JTlRfTUFTS19SRUcgMHgxNQotI2RlZmluZSBEUDgzODY1X0lOVF9NQVNLX1NUQVRVUyAweDE0CisjZGVmaW5lIERQODM4NjVfSU5UX1NUQVRVUwkweDE0CisjZGVmaW5lIERQODM4NjVfSU5UX01BU0sJMHgxNQorI2RlZmluZSBEUDgzODY1X0lOVF9DTEVBUgkweDE3CiAKICNkZWZpbmUgRFA4Mzg2NV9JTlRfUkVNT1RFX0ZBVUxUIDB4MDAwOAogI2RlZmluZSBEUDgzODY1X0lOVF9BTkVfQ09NUExFVEVEIDB4MDAxMApAQCAtNjgsMjEgKzY5LDI1IEBACiAJaW50IGVycjsKIAogCWlmIChwaHlkZXYtPmludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKQotCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBEUDgzODY1X0lOVF9NQVNLX1JFRywKKwkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgRFA4Mzg2NV9JTlRfTUFTSywKIAkJCQlEUDgzODY1X0lOVF9NQVNLX0RFRkFVTFQpOwogCWVsc2UKLQkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgRFA4Mzg2NV9JTlRfTUFTS19SRUcsIDApOworCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBEUDgzODY1X0lOVF9NQVNLLCAwKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbnNfYWNrX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWludCByZXQgPSBwaHlfcmVhZChwaHlkZXYsIERQODM4NjVfSU5UX01BU0tfU1RBVFVTKTsKKwlpbnQgcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBEUDgzODY1X0lOVF9TVEFUVVMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIDA7CisJLyogQ2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgYml0IGJ5IHdyaXRpbmcgYSDigJwx4oCdCisJICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIElOVF9DTEVBUiAoMjowIGFyZSByZXNlcnZlZCkgKi8KKwlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBEUDgzODY1X0lOVF9DTEVBUiwgcmV0ICYgfjB4Nyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBuc19naWdhX3NwZWVkX2ZhbGxiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBtb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggN2Q5YzY1MC4uMDIzMzliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0yMzksNiArMjM5LDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxNjgpLCAwLCAwLCBSVExfQ0ZHXzEgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAkweDgxNjkpLCAwLCAwLCBSVExfQ0ZHXzAgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywJMHg0MzAwKSwgMCwgMCwgUlRMX0NGR18wIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssCTB4NDMwMiksIDAsIDAsIFJUTF9DRkdfMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FULAkJMHhjMTA3KSwgMCwgMCwgUlRMX0NGR18wIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTZlYywJCQkweDAxMTYpLCAwLCAwLCBSVExfQ0ZHXzAgfSwKIAl7IFBDSV9WRU5ET1JfSURfTElOS1NZUywJCTB4MTAzMiwKQEAgLTEwOTEsNiArMTA5MiwyMSBAQAogCXJ0bF9lcmlfd3JpdGUoaW9hZGRyLCBhZGRyLCBtYXNrLCAodmFsICYgfm0pIHwgcCwgdHlwZSk7CiB9CiAKK3N0cnVjdCBleGdtYWNfcmVnIHsKKwl1MTYgYWRkcjsKKwl1MTYgbWFzazsKKwl1MzIgdmFsOworfTsKKworc3RhdGljIHZvaWQgcnRsX3dyaXRlX2V4Z21hY19iYXRjaCh2b2lkIF9faW9tZW0gKmlvYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZXhnbWFjX3JlZyAqciwgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuLS0gPiAwKSB7CisJCXJ0bF9lcmlfd3JpdGUoaW9hZGRyLCByLT5hZGRyLCByLT5tYXNrLCByLT52YWwsIEVSSUFSX0VYR01BQyk7CisJCXIrKzsKKwl9Cit9CisKIHN0YXRpYyB1OCBydGw4MTY4ZF9lZnVzZV9yZWFkKHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnX2FkZHIpCiB7CiAJdTggdmFsdWUgPSAweGZmOwpAQCAtMzExNiw2ICszMTMyLDE4IEBACiAJUlRMX1czMihNQUMwLCBsb3cpOwogCVJUTF9SMzIoTUFDMCk7CiAKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQpIHsKKwkJY29uc3Qgc3RydWN0IGV4Z21hY19yZWcgZVtdID0geworCQkJeyAuYWRkciA9IDB4ZTAsIEVSSUFSX01BU0tfMTExMSwgLnZhbCA9IGxvdyB9LAorCQkJeyAuYWRkciA9IDB4ZTQsIEVSSUFSX01BU0tfMTExMSwgLnZhbCA9IGhpZ2ggfSwKKwkJCXsgLmFkZHIgPSAweGYwLCBFUklBUl9NQVNLXzExMTEsIC52YWwgPSBsb3cgPDwgMTYgfSwKKwkJCXsgLmFkZHIgPSAweGY0LCBFUklBUl9NQVNLXzExMTEsIC52YWwgPSBoaWdoIDw8IDE2IHwKKwkJCQkJCQkJbG93ICA+PiAxNiB9LAorCQl9OworCisJCXJ0bF93cml0ZV9leGdtYWNfYmF0Y2goaW9hZGRyLCBlLCBBUlJBWV9TSVpFKGUpKTsKKwl9CisKIAlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCA4NmFjMzhjLi4zYmIxMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtODAsMTMgKzgwLDEzIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmlvX2RldiAqKnJpb25ldF9hY3RpdmU7CiAKLSNkZWZpbmUgaXNfcmlvbmV0X2NhcGFibGUocGVmLCBzcmNfb3BzLCBkc3Rfb3BzKQkJXAotCQkJKChwZWYgJiBSSU9fUEVGX0lOQl9NQk9YKSAmJgkJXAotCQkJIChwZWYgJiBSSU9fUEVGX0lOQl9ET09SQkVMTCkgJiYJXAorI2RlZmluZSBpc19yaW9uZXRfY2FwYWJsZShzcmNfb3BzLCBkc3Rfb3BzKQkJCVwKKwkJCSgoc3JjX29wcyAmIFJJT19TUkNfT1BTX0RBVEFfTVNHKSAmJglcCisJCQkgKGRzdF9vcHMgJiBSSU9fRFNUX09QU19EQVRBX01TRykgJiYJXAogCQkJIChzcmNfb3BzICYgUklPX1NSQ19PUFNfRE9PUkJFTEwpICYmCVwKIAkJCSAoZHN0X29wcyAmIFJJT19EU1RfT1BTX0RPT1JCRUxMKSkKICNkZWZpbmUgZGV2X3Jpb25ldF9jYXBhYmxlKGRldikgXAotCWlzX3Jpb25ldF9jYXBhYmxlKGRldi0+cGVmLCBkZXYtPnNyY19vcHMsIGRldi0+ZHN0X29wcykKKwlpc19yaW9uZXRfY2FwYWJsZShkZXYtPnNyY19vcHMsIGRldi0+ZHN0X29wcykKIAogI2RlZmluZSBSSU9ORVRfTUFDX01BVENIKHgpCSgqKHUzMiAqKXggPT0gMHgwMDAxMDAwMSkKICNkZWZpbmUgUklPTkVUX0dFVF9ERVNUSUQoeCkJKCoodTE2ICopKHggKyA0KSkKQEAgLTI4Miw3ICsyODIsNiBAQAogewogCWludCBpLCByYyA9IDA7CiAJc3RydWN0IHJpb25ldF9wZWVyICpwZWVyLCAqdG1wOwotCXUzMiBwd2Rjc3I7CiAJc3RydWN0IHJpb25ldF9wcml2YXRlICpybmV0ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAlpZiAobmV0aWZfbXNnX2lmdXAocm5ldCkpCkBAIC0zMzIsMTMgKzMzMSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIElmIGRldmljZSBoYXMgaW5pdGlhbGl6ZWQgaW5ib3VuZCBkb29yYmVsbHMsCi0JCSAqIHNlbmQgYSBqb2luIG1lc3NhZ2UKLQkJICovCi0JCXJpb19yZWFkX2NvbmZpZ18zMihwZWVyLT5yZGV2LCBSSU9fV1JJVEVfUE9SVF9DU1IsICZwd2Rjc3IpOwotCQlpZiAocHdkY3NyICYgUklPX0RPT1JCRUxMX0FWQUlMKQotCQkJcmlvX3NlbmRfZG9vcmJlbGwocGVlci0+cmRldiwgUklPTkVUX0RPT1JCRUxMX0pPSU4pOworCQkvKiBTZW5kIGEgam9pbiBtZXNzYWdlICovCisJCXJpb19zZW5kX2Rvb3JiZWxsKHBlZXItPnJkZXYsIFJJT05FVF9ET09SQkVMTF9KT0lOKTsKIAl9CiAKICAgICAgIG91dDoKQEAgLTQ5Miw3ICs0ODYsNyBAQAogc3RhdGljIGludCByaW9uZXRfcHJvYmUoc3RydWN0IHJpb19kZXYgKnJkZXYsIGNvbnN0IHN0cnVjdCByaW9fZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmMgPSAtRU5PREVWOwotCXUzMiBscGVmLCBsc3JjX29wcywgbGRzdF9vcHM7CisJdTMyIGxzcmNfb3BzLCBsZHN0X29wczsKIAlzdHJ1Y3QgcmlvbmV0X3BlZXIgKnBlZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOwogCkBAIC01MTUsMTIgKzUwOSwxMSBAQAogCSAqIG9uIGxhdGVyIHByb2JlcwogCSAqLwogCWlmICghcmlvbmV0X2NoZWNrKSB7Ci0JCXJpb19sb2NhbF9yZWFkX2NvbmZpZ18zMihyZGV2LT5uZXQtPmhwb3J0LCBSSU9fUEVGX0NBUiwgJmxwZWYpOwogCQlyaW9fbG9jYWxfcmVhZF9jb25maWdfMzIocmRldi0+bmV0LT5ocG9ydCwgUklPX1NSQ19PUFNfQ0FSLAogCQkJCQkgJmxzcmNfb3BzKTsKIAkJcmlvX2xvY2FsX3JlYWRfY29uZmlnXzMyKHJkZXYtPm5ldC0+aHBvcnQsIFJJT19EU1RfT1BTX0NBUiwKIAkJCQkJICZsZHN0X29wcyk7Ci0JCWlmICghaXNfcmlvbmV0X2NhcGFibGUobHBlZiwgbHNyY19vcHMsIGxkc3Rfb3BzKSkgeworCQlpZiAoIWlzX3Jpb25ldF9jYXBhYmxlKGxzcmNfb3BzLCBsZHN0X29wcykpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogbG9jYWwgZGV2aWNlIGlzIG5vdCBuZXR3b3JrIGNhcGFibGVcbiIsCiAJCQkgICAgICAgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCBhZDM1YzIxLi4xYzE2NjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMjEsNiArMjEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0zMCw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzMTkwLmMgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwppbmRleCA4YWQ3YmZiLi4zYzBmMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXMxOTAuYworKysgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwpAQCAtMTgyNSw2ICsxODI1LDE2IEBACiAJCWdlbmVyaWNfbWlpX2lvY3RsKCZ0cC0+bWlpX2lmLCBpZl9taWkoaWZyKSwgY21kLCBOVUxMKTsKIH0KIAorc3RhdGljIGludCBzaXMxOTBfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgICpkZXYsIHZvaWQgKnApCit7CisJaW50IHJjOworCisJcmMgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKKwlpZiAoIXJjKQorCQlzaXMxOTBfaW5pdF9yeGZpbHRlcihkZXYpOworCXJldHVybiByYzsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzaXMxOTBfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gc2lzMTkwX29wZW4sCiAJLm5kb19zdG9wCQk9IHNpczE5MF9jbG9zZSwKQEAgLTE4MzMsNyArMTg0Myw3IEBACiAJLm5kb190eF90aW1lb3V0CQk9IHNpczE5MF90eF90aW1lb3V0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2lzMTkwX3NldF9yeF9tb2RlLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzaXMxOTBfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgkgPSBzaXMxOTBfbmV0cG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCBmMTFiM2YzLi40YzYxNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAltZW1jcHkoc2tiX3B1dChza2IsIGNvdW50KSwgc2wtPnJidWZmLCBjb3VudCk7CiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwotCW5ldGlmX3J4KHNrYik7CisJbmV0aWZfcnhfbmkoc2tiKTsKIAlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBiZTc0NWFlLi5hZGUzNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtNDYsMTQgKzQ2LDE1IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKICNpZmRlZiBDT05GSUdfU1BBUkMKICNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwppbmRleCBmZDYyMmE2Li5mMDZmYjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKQEAgLTUzLDcgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvdXNibmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2NkYy5oPgogCi0jZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIwMS1KdW5lLTIwMTEiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIwNC1BdWctMjAxMSIKIAogLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOCQkweDEwCkBAIC0xNjMsMzUgKzE2Myw4IEBACiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAotc3RhdGljIGludAotY2RjX25jbV9kb19yZXF1ZXN0KHN0cnVjdCBjZGNfbmNtX2N0eCAqY3R4LCBzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gKnJlcSwKLQkJICAgdm9pZCAqZGF0YSwgdTE2IGZsYWdzLCB1MTYgKmFjdGxlbiwgdTE2IHRpbWVvdXQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHVzYl9jb250cm9sX21zZyhjdHgtPnVkZXYsIChyZXEtPmJtUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSA/Ci0JCQkJdXNiX3JjdmN0cmxwaXBlKGN0eC0+dWRldiwgMCkgOgotCQkJCXVzYl9zbmRjdHJscGlwZShjdHgtPnVkZXYsIDApLAotCQkJCXJlcS0+Yk5vdGlmaWNhdGlvblR5cGUsIHJlcS0+Ym1SZXF1ZXN0VHlwZSwKLQkJCQlyZXEtPndWYWx1ZSwKLQkJCQlyZXEtPndJbmRleCwgZGF0YSwKLQkJCQlyZXEtPndMZW5ndGgsIHRpbWVvdXQpOwotCi0JaWYgKGVyciA8IDApIHsKLQkJaWYgKGFjdGxlbikKLQkJCSphY3RsZW4gPSAwOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChhY3RsZW4pCi0JCSphY3RsZW4gPSBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IGNkY19uY21fc2V0dXAoc3RydWN0IGNkY19uY21fY3R4ICpjdHgpCiB7Ci0Jc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uIHJlcTsKIAl1MzIgdmFsOwogCXU4IGZsYWdzOwogCXU4IGlmYWNlX25vOwpAQCAtMjAwLDE0ICsxNzMsMTQgQEAKIAogCWlmYWNlX25vID0gY3R4LT5jb250cm9sLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfR0VUX05UQl9QQVJBTUVURVJTOwotCXJlcS53VmFsdWUgPSAwOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoY3R4LT5uY21fcGFybSkpOwotCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJmN0eC0+bmNtX3Bhcm0sIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpIHsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coY3R4LT51ZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCVVTQl9DRENfR0VUX05UQl9QQVJBTUVURVJTLAorCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTgorCQkJCSB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJMCwgaWZhY2Vfbm8sICZjdHgtPm5jbV9wYXJtLAorCQkJCXNpemVvZihjdHgtPm5jbV9wYXJtKSwgMTAwMDApOworCWlmIChlcnIgPCAwKSB7CiAJCXByX2RlYnVnKCJmYWlsZWQgR0VUX05UQl9QQVJBTUVURVJTXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMjUzLDMxICsyMjYsNDMgQEAKIAogCS8qIGluZm9ybSBkZXZpY2UgYWJvdXQgTlRCIGlucHV0IHNpemUgY2hhbmdlcyAqLwogCWlmIChjdHgtPnJ4X21heCAhPSBsZTMyX3RvX2NwdShjdHgtPm5jbV9wYXJtLmR3TnRiSW5NYXhTaXplKSkgewotCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAotCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX05UQl9JTlBVVF9TSVpFOwotCQlyZXEud1ZhbHVlID0gMDsKLQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKIAogCQlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX05UQl9JTlBVVF9TSVpFKSB7Ci0JCQlzdHJ1Y3QgdXNiX2NkY19uY21fbmRwX2lucHV0X3NpemUgbmRwX2luX3N6OworCQkJc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplICpuZHBfaW5fc3o7CiAKLQkJCXJlcS53TGVuZ3RoID0gODsKLQkJCW5kcF9pbl9zei5kd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKGN0eC0+cnhfbWF4KTsKLQkJCW5kcF9pbl9zei53TnRiSW5NYXhEYXRhZ3JhbXMgPQotCQkJCQljcHVfdG9fbGUxNihDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKTsKLQkJCW5kcF9pbl9zei53UmVzZXJ2ZWQgPSAwOwotCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm5kcF9pbl9zeiwgMCwgTlVMTCwKLQkJCQkJCQkJCTEwMDApOworCQkJbmRwX2luX3N6ID0ga3phbGxvYyhzaXplb2YoKm5kcF9pbl9zeiksIEdGUF9LRVJORUwpOworCQkJaWYgKCFuZHBfaW5fc3opIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gc2l6ZV9lcnI7CisJCQl9CisKKwkJCWVyciA9IHVzYl9jb250cm9sX21zZyhjdHgtPnVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCQlVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRSwKKwkJCQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVAorCQkJCQkgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCQkwLCBpZmFjZV9ubywgbmRwX2luX3N6LCA4LCAxMDAwKTsKKwkJCWtmcmVlKG5kcF9pbl9zeik7CiAJCX0gZWxzZSB7Ci0JCQlfX2xlMzIgZHdOdGJJbk1heFNpemUgPSBjcHVfdG9fbGUzMihjdHgtPnJ4X21heCk7CisJCQlfX2xlMzIgKmR3TnRiSW5NYXhTaXplOworCQkJZHdOdGJJbk1heFNpemUgPSBremFsbG9jKHNpemVvZigqZHdOdGJJbk1heFNpemUpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghZHdOdGJJbk1heFNpemUpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gc2l6ZV9lcnI7CisJCQl9CisJCQkqZHdOdGJJbk1heFNpemUgPSBjcHVfdG9fbGUzMihjdHgtPnJ4X21heCk7CiAKLQkJCXJlcS53TGVuZ3RoID0gNDsKLQkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZkd050YkluTWF4U2l6ZSwgMCwKLQkJCQkJCQkJTlVMTCwgMTAwMCk7CisJCQllcnIgPSB1c2JfY29udHJvbF9tc2coY3R4LT51ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUoY3R4LT51ZGV2LCAwKSwKKwkJCQkJVVNCX0NEQ19TRVRfTlRCX0lOUFVUX1NJWkUsCisJCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQKKwkJCQkJIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkJMCwgaWZhY2Vfbm8sIGR3TnRiSW5NYXhTaXplLCA0LCAxMDAwKTsKKwkJCWtmcmVlKGR3TnRiSW5NYXhTaXplKTsKIAkJfQotCi0JCWlmIChlcnIpCitzaXplX2VycjoKKwkJaWYgKGVyciA8IDApCiAJCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgSW5wdXQgU2l6ZSBmYWlsZWRcbiIpOwogCX0KIApAQCAtMzMyLDI5ICszMTcsMjQgQEAKIAogCS8qIHNldCBDUkMgTW9kZSAqLwogCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfQ1JDX01PREUpIHsKLQkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKLQkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOwotCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9DUkNfTU9ERTsKLQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2KFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQpOwotCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOwotCQlyZXEud0xlbmd0aCA9IDA7Ci0KLQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7Ci0JCWlmIChlcnIpCisJCWVyciA9IHVzYl9jb250cm9sX21zZyhjdHgtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCVVTQl9DRENfU0VUX0NSQ19NT0RFLAorCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQKKwkJCQkgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCVVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQsCisJCQkJaWZhY2Vfbm8sIE5VTEwsIDAsIDEwMDApOworCQlpZiAoZXJyIDwgMCkKIAkJCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOwogCX0KIAogCS8qIHNldCBOVEIgZm9ybWF0LCBpZiBib3RoIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLwogCWlmIChudGJfZm10X3N1cHBvcnRlZCAmIFVTQl9DRENfTkNNX05USDMyX1NJR04pIHsKLQkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKLQkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOwotCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOwotCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKLQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQkJcmVxLndMZW5ndGggPSAwOwotCi0JCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOwotCQlpZiAoZXJyKQorCQllcnIgPSB1c2JfY29udHJvbF9tc2coY3R4LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoY3R4LT51ZGV2LCAwKSwKKwkJCQlVU0JfQ0RDX1NFVF9OVEJfRk9STUFULCBVU0JfVFlQRV9DTEFTUworCQkJCSB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQlVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQsCisJCQkJaWZhY2Vfbm8sIE5VTEwsIDAsIDEwMDApOworCQlpZiAoZXJyIDwgMCkKIAkJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0IGZhaWxlZFxuIik7CiAJfQogCkBAIC0zNjIsMjMgKzM0MiwyOSBAQAogCiAJLyogc2V0IE1heCBEYXRhZ3JhbSBTaXplIChNVFUpICovCiAJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9NQVhfREFUQUdSQU1fU0laRSkgewotCQlfX2xlMTYgbWF4X2RhdGFncmFtX3NpemU7CisJCV9fbGUxNiAqbWF4X2RhdGFncmFtX3NpemU7CiAJCXUxNiBldGhfbWF4X3N6ID0gbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOwogCi0JCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwKLQkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOwotCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX0dFVF9NQVhfREFUQUdSQU1fU0laRTsKLQkJcmVxLndWYWx1ZSA9IDA7Ci0JCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CisJCW1heF9kYXRhZ3JhbV9zaXplID0ga3phbGxvYyhzaXplb2YoKm1heF9kYXRhZ3JhbV9zaXplKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYXhfZGF0YWdyYW1fc2l6ZSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gbWF4X2RncmFtX2VycjsKKwkJfQogCi0JCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwgMCwgTlVMTCwKLQkJCQkJCQkJCTEwMDApOwotCQlpZiAoZXJyKSB7CisJCWVyciA9IHVzYl9jb250cm9sX21zZyhjdHgtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCVVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFLAorCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTgorCQkJCSB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJMCwgaWZhY2Vfbm8sIG1heF9kYXRhZ3JhbV9zaXplLAorCQkJCTIsIDEwMDApOworCQlpZiAoZXJyIDwgMCkgewogCQkJcHJfZGVidWcoIkdFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWQsIHVzZSBzaXplPSV1XG4iLAogCQkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSk7CisJCQlrZnJlZShtYXhfZGF0YWdyYW1fc2l6ZSk7CiAJCX0gZWxzZSB7Ci0JCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9CisJCQkJbGUxNl90b19jcHUoKm1heF9kYXRhZ3JhbV9zaXplKTsKIAkJCS8qIENoZWNrIEV0aCBkZXNjcmlwdG9yIHZhbHVlICovCiAJCQlpZiAoZXRoX21heF9zeiA8IENEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpIHsKIAkJCQlpZiAoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA+IGV0aF9tYXhfc3opCkBAIC0zOTUsMTcgKzM4MSwxNyBAQAogCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwogCiAJCQkvKiBpZiB2YWx1ZSBjaGFuZ2VkLCB1cGRhdGUgZGV2aWNlICovCi0JCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAotCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9NQVhfREFUQUdSQU1fU0laRTsKLQkJCXJlcS53VmFsdWUgPSAwOwotCQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQkJCXJlcS53TGVuZ3RoID0gMjsKLQkJCW1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSk7Ci0KLQkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwKLQkJCQkJCQkJMCwgTlVMTCwgMTAwMCk7Ci0JCQlpZiAoZXJyKQorCQkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGN0eC0+dWRldiwKKwkJCQkJCXVzYl9zbmRjdHJscGlwZShjdHgtPnVkZXYsIDApLAorCQkJCQkJVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkUsCisJCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUCisJCQkJCQkgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCQkJMCwKKwkJCQkJCWlmYWNlX25vLCBtYXhfZGF0YWdyYW1fc2l6ZSwKKwkJCQkJCTIsIDEwMDApOworCQkJa2ZyZWUobWF4X2RhdGFncmFtX3NpemUpOworbWF4X2RncmFtX2VycjoKKwkJCWlmIChlcnIgPCAwKQogCQkJCXByX2RlYnVnKCJTRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkXG4iKTsKIAkJfQogCkBAIC02NzEsNyArNjU3LDcgQEAKIAl1MzIgcmVtOwogCXUzMiBvZmZzZXQ7CiAJdTMyIGxhc3Rfb2Zmc2V0OwotCXUxNiBuID0gMDsKKwl1MTYgbiA9IDAsIGluZGV4OwogCXU4IHJlYWR5MnNlbmQgPSAwOwogCiAJLyogaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiLCBpdCBnZXRzIHByaW9yaXR5ICovCkBAIC04NTksOCArODQ1LDggQEAKIAkJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CiAJY3R4LT50eF9uY20ubnRoMTYud1NlcXVlbmNlID0gY3B1X3RvX2xlMTYoY3R4LT50eF9zZXEpOwogCWN0eC0+dHhfbmNtLm50aDE2LndCbG9ja0xlbmd0aCA9IGNwdV90b19sZTE2KGxhc3Rfb2Zmc2V0KTsKLQljdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKLQkJCQkJCQljdHgtPnR4X25kcF9tb2R1bHVzKTsKKwlpbmRleCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMTYpLCBjdHgtPnR4X25kcF9tb2R1bHVzKTsKKwljdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CiAKIAltZW1jcHkoc2tiX291dC0+ZGF0YSwgJihjdHgtPnR4X25jbS5udGgxNiksIHNpemVvZihjdHgtPnR4X25jbS5udGgxNikpOwogCWN0eC0+dHhfc2VxKys7CkBAIC04NzMsMTIgKzg1OSwxMSBAQAogCWN0eC0+dHhfbmNtLm5kcDE2LndMZW5ndGggPSBjcHVfdG9fbGUxNihyZW0pOwogCWN0eC0+dHhfbmNtLm5kcDE2LndOZXh0TmRwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndOZHBJbmRleCwKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgaW5kZXgsCiAJCQkJCQkmKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNikpOwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndOZHBJbmRleCArCi0JCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNiksCisJbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGluZGV4ICsgc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJJihjdHgtPnR4X25jbS5kcGUxNiksCiAJCQkJCShjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgogCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX2RwZTE2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwppbmRleCAwNDFmYjdkLi5lZjNiMjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKQEAgLTk3Nyw3ICs5NzcsNiBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJaWYgKGRldikgewogCQlzZXRfYml0KFJUTDgxNTBfVU5QTFVHLCAmZGV2LT5mbGFncyk7Ci0JCXRhc2tsZXRfZGlzYWJsZSgmZGV2LT50bCk7CiAJCXRhc2tsZXRfa2lsbCgmZGV2LT50bCk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0+bmV0ZGV2KTsKIAkJdW5saW5rX2FsbF91cmJzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGRlYjFlY2EuLjdjNTMzNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC01MTUsMTAgKzUxNSw2IEBACiAJbWFjX3NldF9jYW1fbWFzayhyZWdzLCB2cHRyLT5tQ0FNbWFzayk7CiAKIAkvKiBFbmFibGUgVkNBTXMgKi8KLQotCWlmICh0ZXN0X2JpdCgwLCB2cHRyLT5hY3RpdmVfdmxhbnMpKQotCQlXT1JEX1JFR19CSVRTX09OKE1DRkdfUlRHT1BULCAmcmVncy0+TUNGRyk7Ci0KIAlmb3JfZWFjaF9zZXRfYml0KHZpZCwgdnB0ci0+YWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKSB7CiAJCW1hY19zZXRfdmxhbl9jYW0ocmVncywgaSwgKHU4ICopICZ2aWQpOwogCQl2cHRyLT52Q0FNbWFza1tpIC8gOF0gfD0gMHgxIDw8IChpICUgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKaW5kZXggMWNiYWNiMy4uMDk1OTU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwpAQCAtMTkyOSwxNCArMTkyOSwxNyBAQAogdm14bmV0M192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MzIgKnZmVGFibGUgPSBhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQucnhGaWx0ZXJDb25mLnZmVGFibGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKLQlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKLQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOworCWlmICghKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpIHsKKwkJdTMyICp2ZlRhYmxlID0gYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnJ4RmlsdGVyQ29uZi52ZlRhYmxlOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCVZNWE5FVDNfU0VUX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAlzZXRfYml0KHZpZCwgYWRhcHRlci0+YWN0aXZlX3ZsYW5zKTsKIH0KQEAgLTE5NDYsMTQgKzE5NDksMTcgQEAKIHZteG5ldDNfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQogewogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUzMiAqdmZUYWJsZSA9IGFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmYudmZUYWJsZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JVk1YTkVUM19DTEVBUl9WRlRBQkxFX0VOVFJZKHZmVGFibGUsIHZpZCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7Ci0JVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCi0JCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX1ZMQU5fRklMVEVSUyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKKwlpZiAoIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CisJCXUzMiAqdmZUYWJsZSA9IGFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5yeEZpbHRlckNvbmYudmZUYWJsZTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlWTVhORVQzX0NMRUFSX1ZGVEFCTEVfRU5UUlkodmZUYWJsZSwgdmlkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CisJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAorCQkJCSAgICAgICBWTVhORVQzX0NNRF9VUERBVEVfVkxBTl9GSUxURVJTKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAljbGVhcl9iaXQodmlkLCBhZGFwdGVyLT5hY3RpdmVfdmxhbnMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKaW5kZXggZjU0ZGZmNC4uYzMxMTlhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCkBAIC0xNzM1LDYgKzE3MzUsOCBAQAogCiAJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGFoLT5kZXYsIGJmLT5za2JhZGRyKSkgewogCQlBVEg1S19FUlIoYWgsICJiZWFjb24gRE1BIG1hcHBpbmcgZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYmYtPnNrYiA9IE5VTEw7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTgxOSw4ICsxODIxLDYgQEAKIAlhdGg1a190eGJ1Zl9mcmVlX3NrYihhaCwgYXZmLT5iYnVmKTsKIAlhdmYtPmJidWYtPnNrYiA9IHNrYjsKIAlyZXQgPSBhdGg1a19iZWFjb25fc2V0dXAoYWgsIGF2Zi0+YmJ1Zik7Ci0JaWYgKHJldCkKLQkJYXZmLT5iYnVmLT5za2IgPSBOVUxMOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xODQwLDYgKzE4NDAsNyBAQAogCXN0cnVjdCBhdGg1a192aWYgKmF2ZjsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnI7CiAKIAlBVEg1S19EQkdfVU5MSU1JVChhaCwgQVRINUtfREVCVUdfQkVBQ09OLCAiaW4gYmVhY29uX3NlbmRcbiIpOwogCkBAIC0xODg4LDExICsxODg5LDYgQEAKIAogCWF2ZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKIAliZiA9IGF2Zi0+YmJ1ZjsKLQlpZiAodW5saWtlbHkoYmYtPnNrYiA9PSBOVUxMIHx8IGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgIGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpIHsKLQkJQVRINUtfV0FSTihhaCwgImJmPSVwIGJmX3NrYj0lcFxuIiwgYmYsIGJmID8gYmYtPnNrYiA6IE5VTEwpOwotCQlyZXR1cm47Ci0JfQogCiAJLyoKIAkgKiBTdG9wIGFueSBjdXJyZW50IGRtYSBhbmQgcHV0IHRoZSBuZXcgZnJhbWUgb24gdGhlIHF1ZXVlLgpAQCAtMTkwNiw4ICsxOTAyLDE3IEBACiAKIAkvKiByZWZyZXNoIHRoZSBiZWFjb24gZm9yIEFQIG9yIE1FU0ggbW9kZSAqLwogCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgIGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJYXRoNWtfYmVhY29uX3VwZGF0ZShhaC0+aHcsIHZpZik7CisJICAgIGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQllcnIgPSBhdGg1a19iZWFjb25fdXBkYXRlKGFoLT5odywgdmlmKTsKKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoYmYtPnNrYiA9PSBOVUxMIHx8IGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCQkgICAgIGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpIHsKKwkJQVRINUtfV0FSTihhaCwgImJmPSVwIGJmX3NrYj0lcFxuIiwgYmYsIGJmLT5za2IpOworCQlyZXR1cm47CisJfQogCiAJdHJhY2VfYXRoNWtfdHgoYWgsIGJmLT5za2IsICZhaC0+dHhxc1thaC0+YmhhbHFdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCmluZGV4IDlmZjdjMzAuLjQ0ZDlkOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKQEAgLTMwOSwxMSArMzA5LDcgQEAKIAl1OCBpOwogCXUzMiB2YWw7CiAKLQlpZiAoYWgtPmlzX3BjaWV4cHJlc3MgIT0gdHJ1ZSkKLQkJcmV0dXJuOwotCi0JLyogRG8gbm90IHRvdWNoIFNlckRlcyByZWdpc3RlcnMgKi8KLQlpZiAoYWgtPmNvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MgIT0gdHJ1ZSB8fCBhaC0+YXNwbV9lbmFibGVkICE9IHRydWUpCiAJCXJldHVybjsKIAogCS8qIE5vdGhpbmcgdG8gZG8gb24gcmVzdG9yZSBmb3IgMTFOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwppbmRleCBkMTA5YzI1Li4xYjk0MDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKQEAgLTY5LDcgKzY5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MzAwX2VlcHJvbSBhcjkzMDBfZGVmYXVsdCA9IHsKIAkuZWVwcm9tVmVyc2lvbiA9IDIsCiAJLnRlbXBsYXRlVmVyc2lvbiA9IDIsCi0JLm1hY0FkZHIgPSB7MSwgMiwgMywgNCwgNSwgNn0sCisJLm1hY0FkZHIgPSB7MCwgMiwgMywgNCwgNSwgNn0sCiAJLmN1c3REYXRhID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJCSAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0sCiAJLmJhc2VFZXBIZWFkZXIgPSB7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIAkJIHsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDEpIH0gfSwKIAotCQkgeyB7IENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCgwLCAwKSwgQ1RMKDAsIDApIH0gfSwKKwkJIHsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIAkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIAkJIHsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIApAQCAtODg0LDcgKzg4NCw3IEBACiAJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCiAJCSB7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSB9IH0sCiAKLQkJIHsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoMCwgMCksIENUTCgwLCAwKSB9IH0sCisJCSB7IHsgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCiAJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCiAJCSB7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCiAKQEAgLTIwNDAsNyArMjA0MCw3IEBACiAJCXsgeyBDVEwoNjAsIDApLCBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIAkJeyB7IENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCksIENUTCg2MCwgMSkgfSB9LAogCi0JCXsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoMCwgMCksIENUTCgwLCAwKSB9IH0sCisJCXsgeyBDVEwoNjAsIDEpLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApLCBDVEwoNjAsIDApIH0gfSwKIAkJeyB7IENUTCg2MCwgMCksIENUTCg2MCwgMSksIENUTCg2MCwgMCksIENUTCg2MCwgMCkgfSB9LAogCQl7IHsgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAxKSwgQ1RMKDYwLCAwKSwgQ1RMKDYwLCAwKSB9IH0sCiAKQEAgLTM3MzQsNyArMzczNCw3IEBACiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlyZWdfcG11X3NldCA9ICg1IDw8IDEpIHwgKDcgPDwgNCkgfAotCQkJCQkgICAgICAoMSA8PCA4KSB8ICgyIDw8IDE0KSB8CisJCQkJCSAgICAgICgyIDw8IDgpIHwgKDIgPDwgMTQpIHwKIAkJCQkJICAgICAgKDYgPDwgMTcpIHwgKDEgPDwgMjApIHwKIAkJCQkJICAgICAgKDMgPDwgMjQpIHwgKDEgPDwgMjgpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCmluZGV4IDhlZmRlYzIuLmFkMmJiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKQEAgLTUxOSwxMSArNTE5LDcgQEAKIAkJCQkJIGludCByZXN0b3JlLAogCQkJCQkgaW50IHBvd2VyX29mZikKIHsKLQlpZiAoYWgtPmlzX3BjaWV4cHJlc3MgIT0gdHJ1ZSkKLQkJcmV0dXJuOwotCi0JLyogRG8gbm90IHRvdWNoIFNlckRlcyByZWdpc3RlcnMgKi8KLQlpZiAoYWgtPmNvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MgIT0gdHJ1ZSB8fCBhaC0+YXNwbV9lbmFibGVkICE9IHRydWUpCiAJCXJldHVybjsKIAogCS8qIE5vdGhpbmcgdG8gZG8gb24gcmVzdG9yZSBmb3IgMTFOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaAppbmRleCA2ZGUzZjBiLi41YzU5MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKQEAgLTg1MCw3ICs4NTAsNyBAQAogI2RlZmluZSBBUl9QSFlfVFBDXzExX0IxICAgICAgICAgKEFSX1NNMV9CQVNFICsgMHgyMjApCiAjZGVmaW5lIEFSX1BIWV9QREFEQ19UQUJfMSAgICAgICAoQVJfU00xX0JBU0UgKyAweDI0MCkKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSAgIChBUl9TTTFfQkFTRSArIDB4NDhjKQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl9CMShfaSkgICAgKEFSX1NNX0JBU0UgKyAweDQ1MCArICgoX2kpIDw8IDIpKQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl9CMShfaSkgICAgKEFSX1NNMV9CQVNFICsgMHg0NTAgKyAoKF9pKSA8PCAyKSkKIAogLyoKICAqIENoYW5uZWwgMiBSZWdpc3RlciBNYXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggODAwNmNlMC4uOGRjZWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTMxOCw2ICszMTgsMTQgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FzcG1faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKworCWlmIChjb21tb24tPmJ1c19vcHMtPmFzcG1faW5pdCkKKwkJY29tbW9uLT5idXNfb3BzLT5hc3BtX2luaXQoY29tbW9uKTsKK30KKwogLyogVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGZhbWlsaWVzIGluY2x1ZGluZyBsZWdhY3kgKi8KIHN0YXRpYyBib29sIGF0aDlrX2h3X2NoaXBfdGVzdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKQEAgLTM3OCw3ICszODYsNiBAQAogCWFoLT5jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOwogCWFoLT5jb25maWcuYWNrXzZtYiA9IDB4MDsKIAlhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKLQlhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7CiAJYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7CiAJYWgtPmNvbmZpZy5wY2llX3dhZW4gPSAwOwogCWFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnID0gMTsKQEAgLTU5OCw3ICs2MDUsNyBAQAogCiAKIAlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCi0JCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCwgMCk7CisJCWF0aDlrX2h3X2FzcG1faW5pdChhaCk7CiAJZWxzZQogCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggNmFjZDBmOS4uYzc5ODg5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTIxOSw3ICsyMTksNiBAQAogCWludCBhZGRpdGlvbmFsX3N3YmFfYmFja29mZjsKIAlpbnQgYWNrXzZtYjsKIAl1MzIgY3dtX2lnbm9yZV9leHRjY2E7Ci0JdTggcGNpZV9wb3dlcnNhdmVfZW5hYmxlOwogCWJvb2wgcGNpZVNlckRlc1dyaXRlOwogCXU4IHBjaWVfY2xvY2tfcmVxOwogCXUzMiBwY2llX3dhZW47CkBAIC02NzMsNiArNjcyLDcgQEAKIAogCWJvb2wgc3dfbWdtdF9jcnlwdG87CiAJYm9vbCBpc19wY2lleHByZXNzOworCWJvb2wgYXNwbV9lbmFibGVkOwogCWJvb2wgaXNfbW9uaXRvcmluZzsKIAlib29sIG5lZWRfYW5fdG9wMl9maXh1cDsKIAl1MTYgdHhfdHJpZ19sZXZlbDsKQEAgLTg3NCw2ICs4NzQsNyBAQAogCWJvb2wgKCplZXByb21fcmVhZCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKIAl2b2lkICgqYnRfY29leF9wcmVwKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKIAl2b2lkICgqZXh0bl9zeW5jaF9lbikoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CisJdm9pZCAoKmFzcG1faW5pdCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbik7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg5a19od19jb21tb24oc3RydWN0IGF0aF9odyAqYWgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCBhYzUxMDcxLi5hYTBmZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTY3MCw4ICs2NzAsMTAgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2luaXRfdHhwb3dlcl9saW1pdHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmN1cmNoYW47CiAKKwlhaC0+dHhjaGFpbm1hc2sgPSBjb21tb24tPnR4X2NoYWlubWFzazsKIAlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF8yR0haKQogCQlhdGg5a19pbml0X2JhbmRfdHhwb3dlcihzYywgSUVFRTgwMjExX0JBTkRfMkdIWik7CiAJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfNUdIWikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDkwOThhYWEuLjY1MzA2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjI4Myw3ICsyMjgzLDExIEBACiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWFoLT5jb3ZlcmFnZV9jbGFzcyA9IGNvdmVyYWdlX2NsYXNzOworCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyhhaCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwppbmRleCAzYmFkMGIyLi5iZTRlYTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KICNpbmNsdWRlIDxsaW51eC9hdGg5a19wbGF0Zm9ybS5oPgogI2luY2x1ZGUgImF0aDlrLmgiCiAKQEAgLTExNSwxMiArMTE2LDM4IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHNjLT5zY19haC0+Y2Fwcy5wY2llX2xjcl9vZmZzZXQsIGxua2N0bCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF9wY2lfYXNwbV9pbml0KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHNjLT5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwYXJlbnQ7CisJaW50IHBvczsKKwl1OCBhc3BtOworCisJaWYgKCFwY2lfaXNfcGNpZShwZGV2KSkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gcGRldi0+YnVzLT5zZWxmOworCWlmIChXQVJOX09OKCFwYXJlbnQpKQorCQlyZXR1cm47CisKKwlwb3MgPSBwY2lfcGNpZV9jYXAocGFyZW50KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJlbnQsIHBvcyArICBQQ0lfRVhQX0xOS0NUTCwgJmFzcG0pOworCWlmIChhc3BtICYgKFBDSUVfTElOS19TVEFURV9MMFMgfCBQQ0lFX0xJTktfU1RBVEVfTDEpKSB7CisJCWFoLT5hc3BtX2VuYWJsZWQgPSB0cnVlOworCQkvKiBJbml0aWFsaXplIFBDSWUgUE0gYW5kIFNFUkRFUyByZWdpc3RlcnMuICovCisJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCwgMCk7CisJfQorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkuYXRoX2J1c190eXBlID0gQVRIX1BDSSwKIAkucmVhZF9jYWNoZXNpemUgPSBhdGhfcGNpX3JlYWRfY2FjaGVzaXplLAogCS5lZXByb21fcmVhZCA9IGF0aF9wY2lfZWVwcm9tX3JlYWQsCiAJLmJ0X2NvZXhfcHJlcCA9IGF0aF9wY2lfYnRfY29leF9wcmVwLAogCS5leHRuX3N5bmNoX2VuID0gYXRoX3BjaV9leHRuX3N5bmNoX2VuYWJsZSwKKwkuYXNwbV9pbml0ID0gYXRoX3BjaV9hc3BtX2luaXQsCiB9OwogCiBzdGF0aWMgaW50IGF0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCmluZGV4IDAxMjI5MzAuLjA0NzRlNjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKQEAgLTEwNjYsOCArMTA2NiwxMCBAQAogCSAqIHRoZSBoaWdoIHRocm91Z3B1dCBzcGVlZCBpbiA4MDIuMTFuIG5ldHdvcmtzLgogCSAqLwogCi0JaWYgKCFpc19tYWluX3ZpZihhciwgdmlmKSkKKwlpZiAoIWlzX21haW5fdmlmKGFyLCB2aWYpKSB7CisJCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CiAJCWdvdG8gZXJyX3NvZnR3OworCX0KIAogCS8qCiAJICogV2hpbGUgdGhlIGhhcmR3YXJlIHN1cHBvcnRzICpjYXRjaC1hbGwqIGtleSwgZm9yIG9mZmxvYWRpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwppbmRleCA4M2NiYTIyLi40ODFlNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCkBAIC03OTUsOSArNzk1LDIzIEBACiAJdTMyIHRtcDsKIAl1MTYgbW1pb19iYXNlOwogCi0JdG1wID0gYjQzX3JlYWQzMihkZXYsIFNTQl9UTVNISUdIKTsKLQlpZiAodG1wICYgU1NCX1RNU0hJR0hfRE1BNjQpCi0JCXJldHVybiBETUFfQklUX01BU0soNjQpOworCXN3aXRjaCAoZGV2LT5kZXYtPmJ1c190eXBlKSB7CisjaWZkZWYgQ09ORklHX0I0M19CQ01BCisJY2FzZSBCNDNfQlVTX0JDTUE6CisJCXRtcCA9IGJjbWFfYXJlYWQzMihkZXYtPmRldi0+YmRldiwgQkNNQV9JT1NUKTsKKwkJaWYgKHRtcCAmIEJDTUFfSU9TVF9ETUE2NCkKKwkJCXJldHVybiBETUFfQklUX01BU0soNjQpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CNDNfU1NCCisJY2FzZSBCNDNfQlVTX1NTQjoKKwkJdG1wID0gc3NiX3JlYWQzMihkZXYtPmRldi0+c2RldiwgU1NCX1RNU0hJR0gpOworCQlpZiAodG1wICYgU1NCX1RNU0hJR0hfRE1BNjQpCisJCQlyZXR1cm4gRE1BX0JJVF9NQVNLKDY0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisKIAltbWlvX2Jhc2UgPSBiNDNfZG1hY29udHJvbGxlcl9iYXNlKDAsIDApOwogCWI0M193cml0ZTMyKGRldiwgbW1pb19iYXNlICsgQjQzX0RNQTMyX1RYQ1RMLCBCNDNfRE1BMzJfVFhBRERSRVhUX01BU0spOwogCXRtcCA9IGI0M19yZWFkMzIoZGV2LCBtbWlvX2Jhc2UgKyBCNDNfRE1BMzJfVFhDVEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IGMwNTJhMGQuLjU0NDFhZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTY0OCw2ICs2NDgsOCBAQAogCQkJCQkgMHg3NGM1ZTQwZCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfUFJPRF9JRDEoMHgwMTU2LCAweDAwMDIsICJJbnRlcnNpbCIsCiAJCQkJCSAweDRiODAxYTE3KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9QUk9EX0lEMygweDAxNTYsIDB4MDAwMiwgIlZlcnNpb24gMDEuMDIiLAorCQkJCQkgMHg0Yjc0YmFhMCksCiAJUENNQ0lBX01GQ19ERVZJQ0VfUFJPRF9JRDEyKDAsICJTYW5EaXNrIiwgIkNvbm5lY3RQbHVzIiwKIAkJCQkgICAgMHg3YTk1NGJkOSwgMHg3NGJlMDBjNiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC0zOTQ1LmMKaW5kZXggZGFiNjdhMS4uNzNmZTNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtMzk0NS5jCkBAIC0xNzQ2LDcgKzE3NDYsMTEgQEAKIAkJfQogCiAJCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7Ci0KKwkJLyoKKwkJICogV2UgZG8gbm90IGNvbW1pdCB0eCBwb3dlciBzZXR0aW5ncyB3aGlsZSBjaGFubmVsIGNoYW5naW5nLAorCQkgKiBkbyBpdCBub3cgaWYgdHggcG93ZXIgY2hhbmdlZC4KKwkJICovCisJCWl3bF9sZWdhY3lfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIGZhbHNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuYwppbmRleCBiZDRiMDAwLi5lY2RjNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMKQEAgLTEyMzUsNyArMTIzNSwxMiBAQAogCiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwogCQlpd2xfbGVnYWN5X3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdiwgY3R4KTsKLQkJZ290byBzZXRfdHhfcG93ZXI7CisJCS8qCisJCSAqIFdlIGRvIG5vdCBjb21taXQgdHggcG93ZXIgc2V0dGluZ3Mgd2hpbGUgY2hhbm5lbCBjaGFuZ2luZywKKwkJICogZG8gaXQgbm93IGlmIHR4IHBvd2VyIGNoYW5nZWQuCisJCSAqLworCQlpd2xfbGVnYWN5X3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl9uZXh0LCBmYWxzZSk7CisJCXJldHVybiAwOwogCX0KIAogCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBhbmQgdGhlIG5ldyBjb25maWcgcmVxdWlyZXMKQEAgLTEzMTUsNyArMTMyMCw2IEBACiAKIAlpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CiAKLXNldF90eF9wb3dlcjoKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwogCXJldCA9IGl3bF9sZWdhY3lfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIHRydWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDNlZWIxMmUuLmM5NWNlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTM2NSw2ICszNjUsNyBAQAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfTE9OR19XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCisJLm5vX2lkbGVfc3VwcG9ydCA9IHRydWUsCiB9Owogc3RhdGljIHN0cnVjdCBpd2xfaHRfcGFyYW1zIGl3bDUwMDBfaHRfcGFyYW1zID0gewogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IDNlNmJiNzMuLjAyODE3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogICogQHRlbXBlcmF0dXJlX2tlbHZpbjogdGVtcGVyYXR1cmUgcmVwb3J0IGJ5IHVDb2RlIGluIGtlbHZpbgogICogQG1heF9ldmVudF9sb2dfc2l6ZTogc2l6ZSBvZiBldmVudCBsb2cgYnVmZmVyIHNpemUgZm9yIHVjb2RlIGV2ZW50IGxvZ2dpbmcKICAqIEBzaGFkb3dfcmVnX2VuYWJsZTogSFcgc2hhZGhvdyByZWdpc3RlciBiaXQKKyAqIEBub19pZGxlX3N1cHBvcnQ6IGRvIG5vdCBzdXBwb3J0IGlkbGUgbW9kZQogICovCiBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIHsKIAlpbnQgZWVwcm9tX3NpemU7CkBAIC0xNTYsNiArMTU3LDcgQEAKIAlib29sIHRlbXBlcmF0dXJlX2tlbHZpbjsKIAl1MzIgbWF4X2V2ZW50X2xvZ19zaXplOwogCWNvbnN0IGJvb2wgc2hhZG93X3JlZ19lbmFibGU7CisJY29uc3QgYm9vbCBub19pZGxlX3N1cHBvcnQ7CiB9OwogLyoKICAqIEBhZHZhbmNlZF9idF9jb2V4aXN0OiBzdXBwb3J0IGFkdmFuY2VkIGJ0IGNvZXhpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcGNpLmMKaW5kZXggZmI3ZTQzNi4uMmZkYmZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcGNpLmMKQEAgLTEzNCw2ICsxMzQsNyBAQAogc3RhdGljIHZvaWQgaXdsX3BjaV9zZXRfZHJ2X2RhdGEoc3RydWN0IGl3bF9idXMgKmJ1cywgdm9pZCAqZHJ2X2RhdGEpCiB7CiAJYnVzLT5kcnZfZGF0YSA9IGRydl9kYXRhOworCXBjaV9zZXRfZHJ2ZGF0YShJV0xfQlVTX0dFVF9QQ0lfREVWKGJ1cyksIGRydl9kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgaXdsX3BjaV9nZXRfaHdfaWQoc3RydWN0IGl3bF9idXMgKmJ1cywgY2hhciBidWZbXSwKQEAgLTQ1NCw4ICs0NTUsNiBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBidXMpOwotCiAJYnVzLT5kZXYgPSAmcGRldi0+ZGV2OwogCWJ1cy0+aXJxID0gcGRldi0+aXJxOwogCWJ1cy0+b3BzID0gJnBjaV9vcHM7CkBAIC00NzksMjYgKzQ3OCwyMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9wY2lfZG93bihzdHJ1Y3QgaXdsX2J1cyAqYnVzKQotewotCXN0cnVjdCBpd2xfcGNpX2J1cyAqcGNpX2J1cyA9IChzdHJ1Y3QgaXdsX3BjaV9idXMgKikgYnVzLT5idXNfc3BlY2lmaWM7Ci0KLQlwY2lfZGlzYWJsZV9tc2kocGNpX2J1cy0+cGNpX2Rldik7Ci0JcGNpX2lvdW5tYXAocGNpX2J1cy0+cGNpX2RldiwgcGNpX2J1cy0+aHdfYmFzZSk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfYnVzLT5wY2lfZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2J1cy0+cGNpX2Rldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBjaV9idXMtPnBjaV9kZXYsIE5VTEwpOwotCi0Ja2ZyZWUoYnVzKTsKLX0KLQogc3RhdGljIHZvaWQgX19kZXZleGl0IGl3bF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpd2xfYnVzICpidXMgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpd2xfYnVzICpidXMgPSBwcml2LT5idXM7CisJc3RydWN0IGl3bF9wY2lfYnVzICpwY2lfYnVzID0gSVdMX0JVU19HRVRfUENJX0JVUyhidXMpOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gSVdMX0JVU19HRVRfUENJX0RFVihidXMpOwogCi0JaXdsX3JlbW92ZShidXMtPmRydl9kYXRhKTsKKwlpd2xfcmVtb3ZlKHByaXYpOwogCi0JaXdsX3BjaV9kb3duKGJ1cyk7CisJcGNpX2Rpc2FibGVfbXNpKHBjaV9kZXYpOworCXBjaV9pb3VubWFwKHBjaV9kZXYsIHBjaV9idXMtPmh3X2Jhc2UpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKKworCWtmcmVlKGJ1cyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTUwNiwyMCArNTAxLDIwIEBACiBzdGF0aWMgaW50IGl3bF9wY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7Ci0Jc3RydWN0IGl3bF9idXMgKmJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBCZWZvcmUgeW91IHB1dCBjb2RlIGhlcmUsIHRoaW5rIGFib3V0IFdvV0xBTi4gWW91IGNhbm5vdCBjaGVjayBoZXJlCiAJICogd2hldGhlciBXb1dMQU4gaXMgZW5hYmxlZCBvciBub3QsIGFuZCB5b3VyIGNvZGUgd2lsbCBydW4gZXZlbiBpZgogCSAqIFdvV0xBTiBpcyBlbmFibGVkIC0gZG9uJ3Qga2lsbCB0aGUgTklDLCBzb21lb25lIG1heSBuZWVkIGl0IGluIFN4LgogCSAqLwogCi0JcmV0dXJuIGl3bF9zdXNwZW5kKGJ1cy0+ZHJ2X2RhdGEpOworCXJldHVybiBpd2xfc3VzcGVuZChwcml2KTsKIH0KIAogc3RhdGljIGludCBpd2xfcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldmljZSk7Ci0Jc3RydWN0IGl3bF9idXMgKmJ1cyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBCZWZvcmUgeW91IHB1dCBjb2RlIGhlcmUsIHRoaW5rIGFib3V0IFdvV0xBTi4gWW91IGNhbm5vdCBjaGVjayBoZXJlCiAJICogd2hldGhlciBXb1dMQU4gaXMgZW5hYmxlZCBvciBub3QsIGFuZCB5b3VyIGNvZGUgd2lsbCBydW4gZXZlbiBpZgpAQCAtNTMyLDcgKzUyNyw3IEBACiAJICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DRkdfUkVUUllfVElNRU9VVCwgMHgwMCk7CiAKLQlyZXR1cm4gaXdsX3Jlc3VtZShidXMtPmRydl9kYXRhKTsKKwlyZXR1cm4gaXdsX3Jlc3VtZShwcml2KTsKIH0KIAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGl3bF9kZXZfcG1fb3BzLCBpd2xfcGNpX3N1c3BlbmQsIGl3bF9wY2lfcmVzdW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IDNlYzYxOWMuLmNkNjRkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMzQ5LDcgKzM0OSw4IEBACiAKIAlpZiAocHJpdi0+d293bGFuKQogCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCBjbWQsIElXTF9QT1dFUl9JTkRFWF81LCBkdGltcGVyKTsKLQllbHNlIGlmIChwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCisJZWxzZSBpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm5vX2lkbGVfc3VwcG9ydCAmJgorCQkgcHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKQogCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCBjbWQsIElXTF9QT1dFUl9JTkRFWF81LCAyMCk7CiAJZWxzZSBpZiAoaXdsX3R0X2lzX2xvd19wb3dlcl9zdGF0ZShwcml2KSkgewogCQkvKiBpbiB0aGVybWFsIHRocm90dGxpbmcgbG93IHBvd2VyIHN0YXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCmluZGV4IDNmN2ZjNGEuLmQ3ZGJjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCkBAIC0yMzksNyArMjM5LDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIG9yaW5vY29fY3NfaWRzW10gPSB7CiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA3NzcpLCAvKiAzQ29tIEFpckNvbm5lY3QgUENJIDc3N0EgKi8KLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNTYsIDB4MDAwMiksIC8qIEx1Y2VudCBPcmlub2NvIGFuZCBvbGQgSW50ZXJzaWwgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNmIsIDB4MDAwMSksIC8qIEVyaWNzc29uIFdMQU4gQ2FyZCBDMTEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxZWIsIDB4MDgwYSksIC8qIE5vcnRlbCBOZXR3b3JrcyBlTW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIEFkYXB0ZXIgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNjEsIDB4MDAwMiksIC8qIEFpcldheSA4MDIuMTEgQWRhcHRlciAoUENNQ0lBKSAqLwpAQCAtMjcyLDYgKzI3MSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBST1hJTSIsICJMQU4gUENJIENBUkQgSEFSTU9OWSA4MDIxMUIiLCAweGM2NTM2YTVlLCAweDlmNDk0ZTI2KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU0FNU1VORyIsICIxMU1icHMgV0xBTiBDYXJkIiwgMHg0M2Q3NGNiNCwgMHg1NzliZDkxYiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlN5bWJvbCBUZWNobm9sb2dpZXMiLCAiTEE0MTExIFNwZWN0cnVtMjQgV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDNmMDJiNGQ2LCAweDM2NjNjYjBlKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9QUk9EX0lEMygweDAxNTYsIDB4MDAwMiwgIlZlcnNpb24gMDEuMDEiLCAweGQyN2RlYjFhKSwgLyogTHVjZW50IE9yaW5vY28gKi8KICNpZmRlZiBDT05GSUdfSEVSTUVTX1BSSVNNCiAJLyogT25seSBlbnRyaWVzIHRoYXQgY2VydGFpbmx5IGlkZW50aWZ5IFByaXNtIGNoaXBzZXQgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMGIsIDB4NzEwMCksIC8qIFNvbmljV0FMTCBMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQgKi8KQEAgLTMyMSw2ICszMjEsOSBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MTAwUCIsIDB4NjMwZDUyYjIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MTAxUC0xMCIsIDB4ZGQ5N2EyNmIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIklTTDM3MzAwUCIsIDB4YzkwNDlhMzkpLAorCisJLyogVGhpcyBtYXkgYmUgQWdlcmUgb3IgSW50ZXJzaWwgRmlybXdhcmUgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNTYsIDB4MDAwMiksCiAjZW5kaWYKIAlQQ01DSUFfREVWSUNFX05VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCmluZGV4IDg0YWI3ZDEuLmVmNjdmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKQEAgLTcwMyw4ICs3MDMsNyBAQAogCS8qCiAJICogQWRkIHNwYWNlIGZvciB0aGUgVFhXSSBpbiBmcm9udCBvZiB0aGUgc2tiLgogCSAqLwotCXNrYl9wdXNoKGVudHJ5LT5za2IsIFRYV0lfREVTQ19TSVpFKTsKLQltZW1zZXQoZW50cnktPnNrYiwgMCwgVFhXSV9ERVNDX1NJWkUpOworCW1lbXNldChza2JfcHVzaChlbnRyeS0+c2tiLCBUWFdJX0RFU0NfU0laRSksIDAsIFRYV0lfREVTQ19TSVpFKTsKIAogCS8qCiAJICogUmVnaXN0ZXIgZGVzY3JpcHRvciBkZXRhaWxzIGluIHNrYiBmcmFtZSBkZXNjcmlwdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCmluZGV4IDUwNzU1OTMuLmRiZjUwMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKQEAgLTQ2NCw2ICs0NjQsMTUgQEAKIAlpbnQgd2NpZCwgYWNrLCBwaWQ7CiAJaW50IHR4X3djaWQsIHR4X2FjaywgdHhfcGlkOwogCisJaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSB8fAorCSAgICAhdGVzdF9iaXQoRU5UUllfREFUQV9TVEFUVVNfUEVORElORywgJmVudHJ5LT5mbGFncykpIHsKKwkJV0FSTklORyhlbnRyeS0+cXVldWUtPnJ0MngwMGRldiwKKwkJCSJEYXRhIHBlbmRpbmcgZm9yIGVudHJ5ICV1IGluIHF1ZXVlICV1XG4iLAorCQkJZW50cnktPmVudHJ5X2lkeCwgZW50cnktPnF1ZXVlLT5xaWQpOworCQljb25kX3Jlc2NoZWQoKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCXdjaWQJPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19XQ0lEKTsKIAlhY2sJPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19UWF9BQ0tfUkVRVUlSRUQpOwogCXBpZAk9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFRYX1NUQV9GSUZPX1BJRF9UWVBFKTsKQEAgLTUyOSwxMiArNTM4LDExIEBACiAJCQllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FKTsKIAkJCWlmIChydDI4MDB1c2JfdHhkb25lX2VudHJ5X2NoZWNrKGVudHJ5LCByZWcpKQogCQkJCWJyZWFrOworCQkJZW50cnkgPSBOVUxMOwogCQl9CiAKLQkJaWYgKCFlbnRyeSB8fCBydDJ4MDBxdWV1ZV9lbXB0eShxdWV1ZSkpCi0JCQlicmVhazsKLQotCQlydDI4MDBfdHhkb25lX2VudHJ5KGVudHJ5LCByZWcpOworCQlpZiAoZW50cnkpCisJCQlydDI4MDBfdHhkb25lX2VudHJ5KGVudHJ5LCByZWcpOwogCX0KIH0KIApAQCAtNTU4LDggKzU2NiwxMCBAQAogCQl3aGlsZSAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewogCQkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSk7CiAKLQkJCWlmICh0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJCQlpZiAodGVzdF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpIHx8CisJCQkgICAgIXRlc3RfYml0KEVOVFJZX0RBVEFfU1RBVFVTX1BFTkRJTkcsICZlbnRyeS0+ZmxhZ3MpKQogCQkJCWJyZWFrOworCiAJCQlpZiAodGVzdF9iaXQoRU5UUllfREFUQV9JT19GQUlMRUQsICZlbnRyeS0+ZmxhZ3MpKQogCQkJCXJ0MngwMGxpYl90eGRvbmVfbm9pbmZvKGVudHJ5LCBUWERPTkVfRkFJTFVSRSk7CiAJCQllbHNlIGlmIChydDJ4MDBxdWV1ZV9zdGF0dXNfdGltZW91dChlbnRyeSkpCkBAIC05MjEsNiArOTMxLDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTYpIH0sCiAJLyogRHJheXRlayAqLwogCXsgVVNCX0RFVklDRSgweDA3ZmEsIDB4NzcxMikgfSwKKwkvKiBEVklDTyAqLworCXsgVVNCX0RFVklDRSgweDBmZTksIDB4YjMwNykgfSwKIAkvKiBFZGltYXggKi8KIAl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTEpIH0sCiAJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzE3KSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCmluZGV4IDE1Y2RjN2UuLjRjZGYyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKQEAgLTM1NSw3ICszNTUsOCBAQAogCXJldHVybiBDSVBIRVJfTk9ORTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKaW5kZXggOGVmYWIzOS4uNGNjZjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJICogZHVlIHRvIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBpbiBtYWM4MDIxMS4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCWdvdG8gZXhpdF9mYWlsOworCQlnb3RvIGV4aXRfZnJlZV9za2I7CiAKIAkvKgogCSAqIFVzZSB0aGUgQVRJTSBxdWV1ZSBpZiBhcHByb3ByaWF0ZSBhbmQgcHJlc2VudC4KQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlFUlJPUihydDJ4MDBkZXYsCiAJCSAgICAgICJBdHRlbXB0IHRvIHNlbmQgcGFja2V0IG92ZXIgaW52YWxpZCBxdWV1ZSAlZC5cbiIKIAkJICAgICAgIlBsZWFzZSBmaWxlIGJ1ZyByZXBvcnQgdG8gJXMuXG4iLCBxaWQsIERSVl9QUk9KRUNUKTsKLQkJZ290byBleGl0X2ZhaWw7CisJCWdvdG8gZXhpdF9mcmVlX3NrYjsKIAl9CiAKIAkvKgpAQCAtMTU5LDYgKzE1OSw3IEBACiAKICBleGl0X2ZhaWw6CiAJcnQyeDAwcXVldWVfcGF1c2VfcXVldWUocXVldWUpOworIGV4aXRfZnJlZV9za2I6CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY190eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKaW5kZXggYjZiNDU0Mi4uMWUzMTA1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwpAQCAtMjYyLDIzICsyNjIsMjAgQEAKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBxdWV1ZV9lbnRyeSAqKXVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykpCiAJCXJldHVybjsKLQotCWlmIChydDJ4MDBkZXYtPm9wcy0+bGliLT50eF9kbWFfZG9uZSkKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+dHhfZG1hX2RvbmUoZW50cnkpOwotCi0JLyoKLQkgKiBSZXBvcnQgdGhlIGZyYW1lIGFzIERNQSBkb25lCi0JICovCi0JcnQyeDAwbGliX2RtYWRvbmUoZW50cnkpOwotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgZnJhbWUgd2FzIGNvcnJlY3RseSB1cGxvYWRlZAogCSAqLwogCWlmICh1cmItPnN0YXR1cykKIAkJc2V0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncyk7CisJLyoKKwkgKiBSZXBvcnQgdGhlIGZyYW1lIGFzIERNQSBkb25lCisJICovCisJcnQyeDAwbGliX2RtYWRvbmUoZW50cnkpOwogCisJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPnR4X2RtYV9kb25lKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT50eF9kbWFfZG9uZShlbnRyeSk7CiAJLyoKIAkgKiBTY2hlZHVsZSB0aGUgZGVsYXllZCB3b3JrIGZvciByZWFkaW5nIHRoZSBUWCBzdGF0dXMKIAkgKiBmcm9tIHRoZSBkZXZpY2UuCkBAIC04NzQsMTggKzg3MSw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pbnRmKTsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IHJ0MngwMGxpYl9zdXNwZW5kKHJ0MngwMGRldiwgc3RhdGUpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQkvKgotCSAqIERlY3JlYXNlIHVzYmRldiByZWZjb3VudC4KLQkgKi8KLQl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KHVzYl9pbnRmKSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnQyeDAwbGliX3N1c3BlbmQocnQyeDAwZGV2LCBzdGF0ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2Jfc3VzcGVuZCk7CiAKQEAgLTg5NCw4ICs4ODEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gdXNiX2dldF9pbnRmZGF0YSh1c2JfaW50Zik7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwogCi0JdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldih1c2JfaW50ZikpOwotCiAJcmV0dXJuIHJ0MngwMGxpYl9yZXN1bWUocnQyeDAwZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9yZXN1bWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggNmE5MzkzOS4uMGJhZWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0yNDIwLDYgKzI0MjAsNyBAQAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDgpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGQ5KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBlNikgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZjQpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTE2KSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExOSkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCmluZGV4IDVlZmQ1NzguLjU2ZjEyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwpAQCAtMTY5NiwxNSArMTY5NiwxNyBAQAogCXBjaXByaXYtPm5kaXNfYWRhcHRlci5kZXZudW1iZXIgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CiAJcGNpcHJpdi0+bmRpc19hZGFwdGVyLmZ1bmNudW1iZXIgPSBQQ0lfRlVOQyhwZGV2LT5kZXZmbik7CiAKLQkvKmZpbmQgYnJpZGdlIGluZm8gKi8KLQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcmlkID0gYnJpZGdlX3BkZXYtPnZlbmRvcjsKLQlmb3IgKHRtcCA9IDA7IHRtcCA8IFBDSV9CUklER0VfVkVORE9SX01BWDsgdG1wKyspIHsKLQkJaWYgKGJyaWRnZV9wZGV2LT52ZW5kb3IgPT0gcGNpYnJpZGdlX3ZlbmRvcnNbdG1wXSkgewotCQkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV92ZW5kb3IgPSB0bXA7Ci0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywKLQkJCQkgKCJQY2kgQnJpZGdlIFZlbmRvciBpcyBmb3VuZCBpbmRleDogJWRcbiIsCi0JCQkJICB0bXApKTsKLQkJCWJyZWFrOworCWlmIChicmlkZ2VfcGRldikgeworCQkvKmZpbmQgYnJpZGdlIGluZm8gaWYgYXZhaWxhYmxlICovCisJCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfdmVuZG9yaWQgPSBicmlkZ2VfcGRldi0+dmVuZG9yOworCQlmb3IgKHRtcCA9IDA7IHRtcCA8IFBDSV9CUklER0VfVkVORE9SX01BWDsgdG1wKyspIHsKKwkJCWlmIChicmlkZ2VfcGRldi0+dmVuZG9yID09IHBjaWJyaWRnZV92ZW5kb3JzW3RtcF0pIHsKKwkJCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9IHRtcDsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywKKwkJCQkJICgiUGNpIEJyaWRnZSBWZW5kb3IgaXMgZm91bmQgaW5kZXg6IgorCQkJCQkgIiAlZFxuIiwgdG1wKSk7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3N3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jCmluZGV4IDk0MmY3YTMuLmVmNjNjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3N3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3Uvc3cuYwpAQCAtMjgxLDYgKzI4MSw4IEBACiAJe1JUTF9VU0JfREVWSUNFKFVTQl9WRU5ERVJfSURfUkVBTFRFSywgMHg4MTdkLCBydGw5MmN1X2hhbF9jZmcpfSwKIAkvKiA4MTg4Q0UtVkFVIFVTQiBtaW5DYXJkIChiL2cgbW9kZSBvbmx5KSAqLwogCXtSVExfVVNCX0RFVklDRShVU0JfVkVOREVSX0lEX1JFQUxURUssIDB4ODE3ZSwgcnRsOTJjdV9oYWxfY2ZnKX0sCisJLyogODE4OFJVIGluIEFsZmEgQVdVUzAzNk5IUiAqLworCXtSVExfVVNCX0RFVklDRShVU0JfVkVOREVSX0lEX1JFQUxURUssIDB4ODE3ZiwgcnRsOTJjdV9oYWxfY2ZnKX0sCiAJLyogODE4OCBDb21ibyBmb3IgQkM0ICovCiAJe1JUTF9VU0JfREVWSUNFKFVTQl9WRU5ERVJfSURfUkVBTFRFSywgMHg4NzU0LCBydGw5MmN1X2hhbF9jZmcpfSwKIApAQCAtMzAzLDIwICszMDUsMjMgQEAKIAl7UlRMX1VTQl9ERVZJQ0UoMHgwZWIwLCAweDkwNzEsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKk5PIEJyYW5kIC0gRXRvcCovCiAJLyogSFAgLSBMaXRlLU9uICw4MTg4Q1VTIFNsaW0gQ29tYm8gKi8KIAl7UlRMX1VTQl9ERVZJQ0UoMHgxMDNjLCAweDE2MjksIHJ0bDkyY3VfaGFsX2NmZyl9LAorCXtSVExfVVNCX0RFVklDRSgweDEzZDMsIDB4MzM1NywgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qIEF6dXJlV2F2ZSAqLwogCXtSVExfVVNCX0RFVklDRSgweDIwMDEsIDB4MzMwOCwgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qRC1MaW5rIC0gQWxwaGEqLwogCXtSVExfVVNCX0RFVklDRSgweDIwMTksIDB4YWIyYSwgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qUGxhbmV4IC0gQWJvY29tKi8KIAl7UlRMX1VTQl9ERVZJQ0UoMHgyMDE5LCAweGVkMTcsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKlBDSSAtIEVkaW1heCovCiAJe1JUTF9VU0JfREVWSUNFKDB4MjBmNCwgMHg2NDhiLCBydGw5MmN1X2hhbF9jZmcpfSwgLypUUkVORG5ldCAtIENhbWVvKi8KIAl7UlRMX1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc4MTEsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKkVkaW1heCAtIEVkaW1heCovCi0Je1JUTF9VU0JfREVWSUNFKDB4MzM1OCwgMHgxM2QzLCBydGw5MmN1X2hhbF9jZmcpfSwgLypBendhdmUgODE4OENFLVZBVSovCisJe1JUTF9VU0JfREVWSUNFKDB4MTNkMywgMHgzMzU4LCBydGw5MmN1X2hhbF9jZmcpfSwgLypBendhdmUgODE4OENFLVZBVSovCiAJLyogUnVzc2lhbiBjdXN0b21lciAtQXp3YXZlICg4MTg4Q0UtVkFVICBiL2cgbW9kZSBvbmx5KSAqLwotCXtSVExfVVNCX0RFVklDRSgweDMzNTksIDB4MTNkMywgcnRsOTJjdV9oYWxfY2ZnKX0sCisJe1JUTF9VU0JfREVWSUNFKDB4MTNkMywgMHgzMzU5LCBydGw5MmN1X2hhbF9jZmcpfSwKKwl7UlRMX1VTQl9ERVZJQ0UoMHg0ODU1LCAweDAwOTAsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKiBGZWl4dW4gKi8KKwl7UlRMX1VTQl9ERVZJQ0UoMHg0ODU1LCAweDAwOTEsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKiBOZXR3ZWVOLUZlaXh1biAqLworCXtSVExfVVNCX0RFVklDRSgweDk4NDYsIDB4OTA0MSwgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qIE5ldGdlYXIgQ2FtZW8gKi8KIAogCS8qKioqKiogODE5MkNVICoqKioqKioqLwogCXtSVExfVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxZiwgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qWnl4ZWwgLUFib2NvbSovCiAJe1JUTF9VU0JfREVWSUNFKDB4MDdhYSwgMHgwMDU2LCBydGw5MmN1X2hhbF9jZmcpfSwgLypBVEtLLUdlbXRlayovCiAJe1JUTF9VU0JfREVWSUNFKDB4MDdiOCwgMHg4MTc4LCBydGw5MmN1X2hhbF9jZmcpfSwgLypGdW5haSAtQWJvY29tKi8KLQl7UlRMX1VTQl9ERVZJQ0UoMHgwN2I4LCAweDgxNzgsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKkFib2NvbSAtQWJvY29tKi8KIAl7UlRMX1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDcsIHJ0bDkyY3VfaGFsX2NmZyl9LCAvKkQtTGluay1DYW1lbyovCiAJe1JUTF9VU0JfREVWSUNFKDB4MjAwMSwgMHgzMzA5LCBydGw5MmN1X2hhbF9jZmcpfSwgLypELUxpbmstQWxwaGEqLwogCXtSVExfVVNCX0RFVklDRSgweDIwMDEsIDB4MzMwYSwgcnRsOTJjdV9oYWxfY2ZnKX0sIC8qRC1MaW5rLUFscGhhKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9hY3guYwppbmRleCBlZjgzNzBlLi5hZDg3YTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvYWN4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2FjeC5jCkBAIC0xNDAsOCArMTQwLDYgQEAKIAlhdXRoLT5zbGVlcF9hdXRoID0gc2xlZXBfYXV0aDsKIAogCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xFRVBfQVVUSCwgYXV0aCwgc2l6ZW9mKCphdXRoKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CiAKIG91dDoKIAlrZnJlZShhdXRoKTsKQEAgLTY4MSwxMCArNjc5LDggQEAKIAogCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKIAkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KIAogb3V0OgogCWtmcmVlKGRldGVjdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmMKaW5kZXggODFmMTY0Yi4uZDE0ZDY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjUxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKIAkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAidHggJXMgY21kIGNoYW5uZWwgJWQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCmluZGV4IDdlMzNmMWYuLjM0ZjZhYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMKQEAgLTc3LDggKzc3LDYgQEAKIAlhdXRoLT5zbGVlcF9hdXRoID0gc2xlZXBfYXV0aDsKIAogCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xFRVBfQVVUSCwgYXV0aCwgc2l6ZW9mKCphdXRoKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CiAKIG91dDoKIAlrZnJlZShhdXRoKTsKQEAgLTYyNCwxMCArNjIyLDggQEAKIAogCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKIAkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KIAogb3V0OgogCWtmcmVlKGRldGVjdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYwppbmRleCBlNThjMjJkLi5iNzBhZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKQEAgLTQyODMsNiArNDI4Myw3IEBACiAJd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKIAkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8IEJJVChOTDgwMjExX0lGVFlQRV9BUCk7CiAJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXdsLT5ody0+d2lwaHktPm1heF9zY2hlZF9zY2FuX3NzaWRzID0gMTsKIAkvKgogCSAqIE1heGltdW0gbGVuZ3RoIG9mIGVsZW1lbnRzIGluIHNjYW5uaW5nIHByb2JlIHJlcXVlc3QgdGVtcGxhdGVzCiAJICogc2hvdWxkIGJlIHRoZSBtYXhpbXVtIGxlbmd0aCBwb3NzaWJsZSBmb3IgYSB0ZW1wbGF0ZSwgd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKaW5kZXggNWNmMThjMi4uZmIxZmQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIAkvKiBJZiBlbmFibGVkLCB0ZWxsIHJ1bnRpbWUgUE0gbm90IHRvIHBvd2VyIG9mZiB0aGUgY2FyZCAqLwogCWlmIChwbV9ydW50aW1lX2VuYWJsZWQoJmZ1bmMtPmRldikpIHsKIAkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmZnVuYy0+ZGV2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgewogCQkvKiBSdW50aW1lIFBNIGlzIGRpc2FibGVkOiBwb3dlciB1cCB0aGUgY2FyZCBtYW51YWxseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYwppbmRleCA1ZDVlMWVmLi40YWU4ZWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdGVzdG1vZGUuYwpAQCAtMzYsNyArMzYsNiBAQAogCVdMMTI3MV9UTV9DTURfVEVTVCwKIAlXTDEyNzFfVE1fQ01EX0lOVEVSUk9HQVRFLAogCVdMMTI3MV9UTV9DTURfQ09ORklHVVJFLAotCVdMMTI3MV9UTV9DTURfTlZTX1BVU0gsCiAJV0wxMjcxX1RNX0NNRF9TRVRfUExUX01PREUsCiAJV0wxMjcxX1RNX0NNRF9SRUNPVkVSLAogCkBAIC0xMzksMTIgKzEzOCwxNSBAQAogCiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX3dhcm5pbmcoInRlc3Rtb2RlIGNtZCBpbnRlcnJvZ2F0ZSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJa2ZyZWUoY21kKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlza2IgPSBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2Iod2wtPmh3LT53aXBoeSwgc2l6ZW9mKCpjbWQpKTsKLQlpZiAoIXNrYikKKwlpZiAoIXNrYikgeworCQlrZnJlZShjbWQpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlOTEFfUFVUKHNrYiwgV0wxMjcxX1RNX0FUVFJfREFUQSwgc2l6ZW9mKCpjbWQpLCBjbWQpOwogCkBAIC0xODcsNDggKzE4OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9udnNfcHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IG5sYXR0ciAqdGJbXSkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgbGVuOwotCXZvaWQgKmJ1ZjsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIGNtZCBudnMgcHVzaCIpOwotCi0JaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7Ci0JbGVuID0gbmxhX2xlbih0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0Ja2ZyZWUod2wtPm52cyk7Ci0KLQlpZiAoKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSAmJgotCSAgICAobGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjh4X252c19maWxlKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd2wtPm52cyA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT5udnMpIHsKLQkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHdsLT5udnMsIGJ1ZiwgbGVuKTsKLQl3bC0+bnZzX2xlbiA9IGxlbjsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIHB1c2hlZCBudnMiKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCiB7CiAJdTMyIHZhbDsKQEAgLTI4NSw4ICsyNDUsNiBAQAogCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgdGIpOwogCWNhc2UgV0wxMjcxX1RNX0NNRF9DT05GSUdVUkU6CiAJCXJldHVybiB3bDEyNzFfdG1fY21kX2NvbmZpZ3VyZSh3bCwgdGIpOwotCWNhc2UgV0wxMjcxX1RNX0NNRF9OVlNfUFVTSDoKLQkJcmV0dXJuIHdsMTI3MV90bV9jbWRfbnZzX3B1c2god2wsIHRiKTsKIAljYXNlIFdMMTI3MV9UTV9DTURfU0VUX1BMVF9NT0RFOgogCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUod2wsIHRiKTsKIAljYXNlIFdMMTI3MV9UTV9DTURfUkVDT1ZFUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYWRkcmVzcy5jIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKaW5kZXggZGExZjRiOS4uNzJjMzNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9hZGRyZXNzLmMKKysrIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKQEAgLTYxMCw2ICs2MTAsNiBAQAogCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpbmRleCwgJnJlcykpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGlvcmVtYXAocmVzLnN0YXJ0LCAxICsgcmVzLmVuZCAtIHJlcy5zdGFydCk7CisJcmV0dXJuIGlvcmVtYXAocmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyZXMpKTsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfaW9tYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCAwMmVkMzY3Li4zZmYyMmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtNjEwLDggKzYxMCw5IEBACiAgKgogICogVGhlIG91dF92YWx1ZSBpcyBtb2RpZmllZCBvbmx5IGlmIGEgdmFsaWQgdTMyIHZhbHVlIGNhbiBiZSBkZWNvZGVkLgogICovCi1pbnQgb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY2hhciAqcHJvcG5hbWUsCi0JCQkgICAgICAgdTMyICpvdXRfdmFsdWVzLCBzaXplX3Qgc3opCitpbnQgb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSwgdTMyICpvdXRfdmFsdWVzLAorCQkJICAgICAgIHNpemVfdCBzeikKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgTlVMTCk7CiAJY29uc3QgX19iZTMyICp2YWw7CkBAIC02NDUsNyArNjQ2LDcgQEAKICAqCiAgKiBUaGUgb3V0X3N0cmluZyBwb2ludGVyIGlzIG1vZGlmaWVkIG9ubHkgaWYgYSB2YWxpZCBzdHJpbmcgY2FuIGJlIGRlY29kZWQuCiAgKi8KLWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjaGFyICpwcm9wbmFtZSwKK2ludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCQljb25zdCBjaGFyICoqb3V0X3N0cmluZykKIHsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBwcm9wbmFtZSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2dwaW8uYyBiL2RyaXZlcnMvb2YvZ3Bpby5jCmluZGV4IDMwMDc2NjIuLmVmMDEwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZ3Bpby5jCisrKyBiL2RyaXZlcnMvb2YvZ3Bpby5jCkBAIC0xMjcsOCArMTI3LDggQEAKICAqIGdwaW8gY2hpcHMuIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgb25seSBvbmUgc2FuaXR5IGNoZWNrOiB3aGV0aGVyIGdwaW8KICAqIGlzIGxlc3MgdGhhbiBuZ3Bpb3MgKHRoYXQgaXMgc3BlY2lmaWVkIGluIHRoZSBncGlvX2NoaXApLgogICovCi1zdGF0aWMgaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCWNvbnN0IHZvaWQgKmdwaW9fc3BlYywgdTMyICpmbGFncykKK2ludCBvZl9ncGlvX3NpbXBsZV94bGF0ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSBjb25zdCB2b2lkICpncGlvX3NwZWMsIHUzMiAqZmxhZ3MpCiB7CiAJY29uc3QgX19iZTMyICpncGlvID0gZ3Bpb19zcGVjOwogCWNvbnN0IHUzMiBuID0gYmUzMl90b19jcHVwKGdwaW8pOwpAQCAtMTUyLDYgKzE1Miw3IEBACiAKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wob2ZfZ3Bpb19zaW1wbGVfeGxhdGUpOwogCiAvKioKICAqIG9mX21tX2dwaW9jaGlwX2FkZCAtIEFkZCBtZW1vcnkgbWFwcGVkIEdQSU8gY2hpcCAoYmFuaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpX3BjaWhwLmMKaW5kZXggOGYzZmFmMy4uMDk1ZjI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpX3BjaWhwLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpX3BjaWhwLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChhY3BpX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUpOwogCi1zdGF0aWMgaW50IGlzX2VqZWN0YWJsZShhY3BpX2hhbmRsZSBoYW5kbGUpCitzdGF0aWMgaW50IHBjaWhwX2lzX2VqZWN0YWJsZShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaGFuZGxlIHRtcDsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoYnJpZGdlX2hhbmRsZSAhPSBwYXJlbnRfaGFuZGxlKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gaXNfZWplY3RhYmxlKGhhbmRsZSk7CisJcmV0dXJuIHBjaWhwX2lzX2VqZWN0YWJsZShoYW5kbGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9wY2lfY2hlY2tfZWplY3RhYmxlKTsKIApAQCAtNDUwLDcgKzQ1MCw3IEBACiBjaGVja19ob3RwbHVnKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQogewogCWludCAqZm91bmQgPSAoaW50ICopY29udGV4dDsKLQlpZiAoaXNfZWplY3RhYmxlKGhhbmRsZSkpIHsKKwlpZiAocGNpaHBfaXNfZWplY3RhYmxlKGhhbmRsZSkpIHsKIAkJKmZvdW5kID0gMTsKIAkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGE3MGZhODkuLjIyMDI4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtMTEwLDcgKzExMCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBhY3BpX2RvY2tfb3BzIGFjcGlwaHBfZG9ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZG9ja19vcHMgYWNwaXBocF9kb2NrX29wcyA9IHsKIAkuaGFuZGxlciA9IGhhbmRsZV9ob3RwbHVnX2V2ZW50X2Z1bmMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKaW5kZXggNDk1MmMzYi4uZjFjZTk5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYwpAQCAtODQwLDggKzg0MCw5IEBACiAJLyogTmVlZCB0byByZWFkIFZJRCBlYXJseSBiL2MgaXQncyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgQ1BRIGFuZCBJTlRDCiAJICogZGlzY292ZXJ5CiAJICovCi0JcmMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfVkVORE9SX0lELCAmdmVuZG9yX2lkKTsKLQlpZiAocmMgfHwgKCh2ZW5kb3JfaWQgIT0gUENJX1ZFTkRPUl9JRF9DT01QQVEpICYmICh2ZW5kb3JfaWQgIT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkpKSB7CisJdmVuZG9yX2lkID0gcGRldi0+dmVuZG9yOworCWlmICgodmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfQ09NUEFRKSAmJgorCSAgICAodmVuZG9yX2lkICE9IFBDSV9WRU5ET1JfSURfSU5URUwpKSB7CiAJCWVycihtc2dfSFBDX25vbl9jb21wYXFfb3JfaW50ZWwpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOwpAQCAtODY4LDExICs4NjksNyBAQAogCS8qIFRPRE86IFRoaXMgY29kZSBjYW4gYmUgbWFkZSB0byBzdXBwb3J0IG5vbi1Db21wYXEgb3IgSW50ZWwKIAkgKiBzdWJzeXN0ZW0gSURzCiAJICovCi0JcmMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwgJnN1YnN5c3RlbV92aWQpOwotCWlmIChyYykgewotCQllcnIoIiVzIDogcGNpX3JlYWRfY29uZmlnX3dvcmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOwotCX0KKwlzdWJzeXN0ZW1fdmlkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKIAlkYmcoIlN1YnN5c3RlbSBWZW5kb3IgSUQ6ICV4XG4iLCBzdWJzeXN0ZW1fdmlkKTsKIAlpZiAoKHN1YnN5c3RlbV92aWQgIT0gUENJX1ZFTkRPUl9JRF9DT01QQVEpICYmIChzdWJzeXN0ZW1fdmlkICE9IFBDSV9WRU5ET1JfSURfSU5URUwpKSB7CiAJCWVycihtc2dfSFBDX25vbl9jb21wYXFfb3JfaW50ZWwpOwpAQCAtODg3LDExICs4ODQsNyBAQAogCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKIAl9CiAKLQlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVUJTWVNURU1fSUQsICZzdWJzeXN0ZW1fZGV2aWNlaWQpOwotCWlmIChyYykgewotCQllcnIoIiVzIDogcGNpX3JlYWRfY29uZmlnX3dvcmQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfY3RybDsKLQl9CisJc3Vic3lzdGVtX2RldmljZWlkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAogCWluZm8oIkhvdCBQbHVnIFN1YnN5c3RlbSBEZXZpY2UgSUQ6ICV4XG4iLCBzdWJzeXN0ZW1fZGV2aWNlaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggMDg1ZGJiNS4uMWU5YzlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMjEzLDYgKzIxMyw5IEBACiAJCWdvdG8gZXJyX2V4aXQ7CiAJfQogCisJLyogV2FpdCBmb3IgMSBzZWNvbmQgYWZ0ZXIgY2hlY2tpbmcgbGluayB0cmFpbmluZyBzdGF0dXMgKi8KKwltc2xlZXAoMTAwMCk7CisKIAkvKiBDaGVjayBmb3IgYSBwb3dlciBmYXVsdCAqLwogCWlmIChjdHJsLT5wb3dlcl9mYXVsdF9kZXRlY3RlZCB8fCBwY2llaHBfcXVlcnlfcG93ZXJfZmF1bHQocF9zbG90KSkgewogCQljdHJsX2VycihjdHJsLCAiUG93ZXIgZmF1bHQgb24gc2xvdCAlc1xuIiwgc2xvdF9uYW1lKHBfc2xvdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCA1MGEyM2RhLi45NmRjNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtMjc1LDE2ICsyNzUsOSBAQAogICAgICAgICAgKiBob3QtcGx1ZyBjYXBhYmxlIGRvd25zdHJlYW0gcG9ydC4gQnV0IG9sZCBjb250cm9sbGVyIG1pZ2h0CiAgICAgICAgICAqIG5vdCBpbXBsZW1lbnQgaXQuIEluIHRoaXMgY2FzZSwgd2Ugd2FpdCBmb3IgMTAwMCBtcy4KICAgICAgICAgICovCi0gICAgICAgIGlmIChjdHJsLT5saW5rX2FjdGl2ZV9yZXBvcnRpbmcpewotICAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yIERhdGEgTGluayBMYXllciBMaW5rIEFjdGl2ZSBiaXQgdG8gYmUgc2V0ICovCisgICAgICAgIGlmIChjdHJsLT5saW5rX2FjdGl2ZV9yZXBvcnRpbmcpCiAgICAgICAgICAgICAgICAgcGNpZV93YWl0X2xpbmtfYWN0aXZlKGN0cmwpOwotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogV2UgbXVzdCB3YWl0IGZvciAxMDAgbXMgYWZ0ZXIgdGhlIERhdGEgTGluayBMYXllcgotICAgICAgICAgICAgICAgICAqIExpbmsgQWN0aXZlIGJpdCByZWFkcyAxYiBiZWZvcmUgaW5pdGlhdGluZyBhCi0gICAgICAgICAgICAgICAgICogY29uZmlndXJhdGlvbiBhY2Nlc3MgdG8gdGhlIGhvdCBhZGRlZCBkZXZpY2UuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMDApOwogCiAJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFBDSV9FWFBfTE5LU1RBLCAmbG5rX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3Nsb3QuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2xvdC5jCmluZGV4IDc0OWZkZjAuLjNmZmQ5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2xvdC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2xvdC5jCkBAIC0xNTgsNDcgKzE1OCw2IEBACiAJICovCiB9CiAKLS8qIFByb2dyYW0gUENJRSBNYXhQYXlsb2FkIHNldHRpbmcgb24gZGV2aWNlOiBlbnN1cmUgcGFyZW50IG1heHBheWxvYWQgPD0gZGV2aWNlICovCi1zdGF0aWMgaW50IHBjaV9zZXRfcGF5bG9hZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotICAgICAgIGludCBwb3MsIHBwb3M7Ci0gICAgICAgdTE2IHBjdGwsIHBzejsKLSAgICAgICB1MTYgZGN0bCwgZHN6LCBkY2FwLCBkbWF4OwotICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwYXJlbnQ7Ci0KLSAgICAgICBwYXJlbnQgPSBkZXYtPmJ1cy0+c2VsZjsKLSAgICAgICBwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwotICAgICAgIGlmICghcG9zKQotICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAvKiBSZWFkIERldmljZSBNYXhQYXlsb2FkIGNhcGFiaWxpdHkgYW5kIHNldHRpbmcgKi8KLSAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWQ1RMLCAmZGN0bCk7Ci0gICAgICAgcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNBUCwgJmRjYXApOwotICAgICAgIGRzeiA9IChkY3RsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNTsKLSAgICAgICBkbWF4ID0gKGRjYXAgJiBQQ0lfRVhQX0RFVkNBUF9QQVlMT0FEKTsKLQotICAgICAgIC8qIFJlYWQgUGFyZW50IE1heFBheWxvYWQgc2V0dGluZyAqLwotICAgICAgIHBwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBhcmVudCwgUENJX0NBUF9JRF9FWFApOwotICAgICAgIGlmICghcHBvcykKLSAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHBhcmVudCwgcHBvcyArIFBDSV9FWFBfREVWQ1RMLCAmcGN0bCk7Ci0gICAgICAgcHN6ID0gKHBjdGwgJiAgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNTsKLQotICAgICAgIC8qIElmIHBhcmVudCBwYXlsb2FkID4gZGV2aWNlIG1heCBwYXlsb2FkIC0+IGVycm9yCi0gICAgICAgICogSWYgcGFyZW50IHBheWxvYWQgPiBkZXZpY2UgcGF5bG9hZCAtPiBzZXQgc3BlZWQKLSAgICAgICAgKiBJZiBwYXJlbnQgcGF5bG9hZCA8PSBkZXZpY2UgcGF5bG9hZCAtPiBkbyBub3RoaW5nCi0gICAgICAgICovCi0gICAgICAgaWYgKHBzeiA+IGRtYXgpCi0gICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgZWxzZSBpZiAocHN6ID4gZHN6KSB7Ci0gICAgICAgICAgICAgICBkZXZfaW5mbygmZGV2LT5kZXYsICJTZXR0aW5nIE1heFBheWxvYWQgdG8gJWRcbiIsIDEyOCA8PCBwc3opOwotICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDVEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRjdGwgJiB+UENJX0VYUF9ERVZDVExfUEFZTE9BRCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwc3ogPDwgNSkpOwotICAgICAgIH0KLSAgICAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBwY2lfY29uZmlndXJlX3Nsb3Qoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqY2RldjsKQEAgLTIxMCw5ICsxNjksOSBAQAogCQkJKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpKSkKIAkJcmV0dXJuOwogCi0gICAgICAgcmV0ID0gcGNpX3NldF9wYXlsb2FkKGRldik7Ci0gICAgICAgaWYgKHJldCkKLSAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgZGV2aWNlIG1heCBwYXlsb2FkXG4iKTsKKwlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnNlbGYpCisJCXBjaWVfYnVzX2NvbmZpZ3VyZV9zZXR0aW5ncyhkZXYtPmJ1cywKKwkJCQkJICAgIGRldi0+YnVzLT5zZWxmLT5wY2llX21wc3MpOwogCiAJbWVtc2V0KCZocHAsIDAsIHNpemVvZihocHApKTsKIAlyZXQgPSBwY2lfZ2V0X2hwX3BhcmFtcyhkZXYsICZocHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvb2YuYyBiL2RyaXZlcnMvcGNpL29mLmMKaW5kZXggYzk0ZDM3ZS4uZjA5Mjk5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvb2YuYworKysgYi9kcml2ZXJzL3BjaS9vZi5jCkBAIC01NSw3ICs1NSw3IEBACiAJICovCiAJaWYgKGJ1cy0+YnJpZGdlLT5vZl9ub2RlKQogCQlyZXR1cm4gb2Zfbm9kZV9nZXQoYnVzLT5icmlkZ2UtPm9mX25vZGUpOwotCWlmIChidXMtPmJyaWRnZS0+cGFyZW50LT5vZl9ub2RlKQorCWlmIChidXMtPmJyaWRnZS0+cGFyZW50ICYmIGJ1cy0+YnJpZGdlLT5wYXJlbnQtPm9mX25vZGUpCiAJCXJldHVybiBvZl9ub2RlX2dldChidXMtPmJyaWRnZS0+cGFyZW50LT5vZl9ub2RlKTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNjkyNjcxYi4uNGU4NGZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTc3LDYgKzc3LDggQEAKIHVuc2lnbmVkIGxvbmcgcGNpX2hvdHBsdWdfaW9fc2l6ZSAgPSBERUZBVUxUX0hPVFBMVUdfSU9fU0laRTsKIHVuc2lnbmVkIGxvbmcgcGNpX2hvdHBsdWdfbWVtX3NpemUgPSBERUZBVUxUX0hPVFBMVUdfTUVNX1NJWkU7CiAKK2VudW0gcGNpZV9idXNfY29uZmlnX3R5cGVzIHBjaWVfYnVzX2NvbmZpZyA9IFBDSUVfQlVTX1NBRkU7CisKIC8qCiAgKiBUaGUgZGVmYXVsdCBDTFMgaXMgdXNlZCBpZiBhcmNoIGRpZG4ndCBzZXQgQ0xTIGV4cGxpY2l0bHkgYW5kIG5vdAogICogYWxsIHBjaSBkZXZpY2VzIGFncmVlIG9uIHRoZSBzYW1lIHZhbHVlLiAgQXJjaCBjYW4gb3ZlcnJpZGUgZWl0aGVyCkBAIC0xOTA1LDcgKzE5MDcsNyBAQAogewogCWludCBwb3M7CiAJdTMyIGNhcDsKLQl1MTYgY3RybDsKKwl1MTYgZmxhZ3MsIGN0cmw7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZTsKIAogCWlmICghcGNpX2lzX3BjaWUoZGV2KSB8fCBkZXYtPmRldmZuKQpAQCAtMTkyMyw2ICsxOTI1LDExIEBACiAJaWYgKCFwb3MpCiAJCXJldHVybjsKIAorCS8qIEFSSSBpcyBhIFBDSWUgdjIgZmVhdHVyZSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9GTEFHUywgJmZsYWdzKTsKKwlpZiAoKGZsYWdzICYgUENJX0VYUF9GTEFHU19WRVJTKSA8IDIpCisJCXJldHVybjsKKwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChicmlkZ2UsIHBvcyArIFBDSV9FWFBfREVWQ0FQMiwgJmNhcCk7CiAJaWYgKCEoY2FwICYgUENJX0VYUF9ERVZDQVAyX0FSSSkpCiAJCXJldHVybjsKQEAgLTMxODYsNyArMzE5Myw3IEBACiAgKiBAcnE6IG1heGltdW0gbWVtb3J5IHJlYWQgY291bnQgaW4gYnl0ZXMKICAqICAgIHZhbGlkIHZhbHVlcyBhcmUgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NgogICoKLSAqIElmIHBvc3NpYmxlIHNldHMgbWF4aW11bSByZWFkIGJ5dGUgY291bnQKKyAqIElmIHBvc3NpYmxlIHNldHMgbWF4aW11bSBtZW1vcnkgcmVhZCByZXF1ZXN0IGluIGJ5dGVzCiAgKi8KIGludCBwY2llX3NldF9yZWFkcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJxKQogewpAQCAtMzIwOSw3ICszMjE2LDcgQEAKIAlpZiAoKGN0bCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgIT0gdikgewogCQljdGwgJj0gflBDSV9FWFBfREVWQ1RMX1JFQURSUTsKIAkJY3RsIHw9IHY7Ci0JCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgY3RsKTsKKwkJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgY2FwICsgUENJX0VYUF9ERVZDVEwsIGN0bCk7CiAJfQogCiBvdXQ6CkBAIC0zMjE4LDYgKzMyMjUsNjcgQEAKIEVYUE9SVF9TWU1CT0wocGNpZV9zZXRfcmVhZHJxKTsKIAogLyoqCisgKiBwY2llX2dldF9tcHMgLSBnZXQgUENJIEV4cHJlc3MgbWF4aW11bSBwYXlsb2FkIHNpemUKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKKyAqCisgKiBSZXR1cm5zIG1heGltdW0gcGF5bG9hZCBzaXplIGluIGJ5dGVzCisgKiAgICBvciBhcHByb3ByaWF0ZSBlcnJvciB2YWx1ZS4KKyAqLworaW50IHBjaWVfZ2V0X21wcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCByZXQsIGNhcDsKKwl1MTYgY3RsOworCisJY2FwID0gcGNpX3BjaWVfY2FwKGRldik7CisJaWYgKCFjYXApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmN0bCk7CisJaWYgKCFyZXQpCisJCXJldCA9IDEyOCA8PCAoKGN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3NldF9tcHMgLSBzZXQgUENJIEV4cHJlc3MgbWF4aW11bSBwYXlsb2FkIHNpemUKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnkKKyAqIEBtcHM6IG1heGltdW0gcGF5bG9hZCBzaXplIGluIGJ5dGVzCisgKiAgICB2YWxpZCB2YWx1ZXMgYXJlIDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYKKyAqCisgKiBJZiBwb3NzaWJsZSBzZXRzIG1heGltdW0gcGF5bG9hZCBzaXplCisgKi8KK2ludCBwY2llX3NldF9tcHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1wcykKK3sKKwlpbnQgY2FwLCBlcnIgPSAtRUlOVkFMOworCXUxNiBjdGwsIHY7CisKKwlpZiAobXBzIDwgMTI4IHx8IG1wcyA+IDQwOTYgfHwgIWlzX3Bvd2VyX29mXzIobXBzKSkKKwkJZ290byBvdXQ7CisKKwl2ID0gZmZzKG1wcykgLSA4OworCWlmICh2ID4gZGV2LT5wY2llX21wc3MpIAorCQlnb3RvIG91dDsKKwl2IDw8PSA1OworCisJY2FwID0gcGNpX3BjaWVfY2FwKGRldik7CisJaWYgKCFjYXApCisJCWdvdG8gb3V0OworCisJZXJyID0gcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBjYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmN0bCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAoKGN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpICE9IHYpIHsKKwkJY3RsICY9IH5QQ0lfRVhQX0RFVkNUTF9QQVlMT0FEOworCQljdGwgfD0gdjsKKwkJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgY2FwICsgUENJX0VYUF9ERVZDVEwsIGN0bCk7CisJfQorb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgogICogcGNpX3NlbGVjdF9iYXJzIC0gTWFrZSBCQVIgbWFzayBmcm9tIHRoZSB0eXBlIG9mIHJlc291cmNlCiAgKiBAZGV2OiB0aGUgUENJIGRldmljZSBmb3Igd2hpY2ggQkFSIG1hc2sgaXMgbWFkZQogICogQGZsYWdzOiByZXNvdXJjZSB0eXBlIG1hc2sgdG8gYmUgc2VsZWN0ZWQKQEAgLTM1MDAsNiArMzU2OCwxMCBAQAogCQkJCXBjaV9ob3RwbHVnX2lvX3NpemUgPSBtZW1wYXJzZShzdHIgKyA5LCAmc3RyKTsKIAkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiaHBtZW1zaXplPSIsIDEwKSkgewogCQkJCXBjaV9ob3RwbHVnX21lbV9zaXplID0gbWVtcGFyc2Uoc3RyICsgMTAsICZzdHIpOworCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJwY2llX2J1c19zYWZlIiwgMTMpKSB7CisJCQkJcGNpZV9idXNfY29uZmlnID0gUENJRV9CVVNfU0FGRTsKKwkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAicGNpZV9idXNfcGVyZiIsIDEzKSkgeworCQkJCXBjaWVfYnVzX2NvbmZpZyA9IFBDSUVfQlVTX1BFUkZPUk1BTkNFOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVW5rbm93biBvcHRpb24gYCVzJ1xuIiwKIAkJCQkJCXN0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGM4Y2VlNzYuLmI3NDA4NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0yODMsNiArMjgzLDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9jYXJkYnVzX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcmVzb3VyY2UgKik7CisKIHN0YXRpYyBpbmxpbmUgcmVzb3VyY2Vfc2l6ZV90IHBjaV9yZXNvdXJjZV9hbGlnbm1lbnQoc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewpAQCAtMjkyLDYgKzI5NCw4IEBACiAJaWYgKHJlc25vID49IFBDSV9JT1ZfUkVTT1VSQ0VTICYmIHJlc25vIDw9IFBDSV9JT1ZfUkVTT1VSQ0VfRU5EKQogCQlyZXR1cm4gcGNpX3NyaW92X3Jlc291cmNlX2FsaWdubWVudChkZXYsIHJlc25vKTsKICNlbmRpZgorCWlmIChkZXYtPmNsYXNzID4+IDggID09IFBDSV9DTEFTU19CUklER0VfQ0FSREJVUykKKwkJcmV0dXJuIHBjaV9jYXJkYnVzX3Jlc291cmNlX2FsaWdubWVudChyZXMpOwogCXJldHVybiByZXNvdXJjZV9hbGlnbm1lbnQocmVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKaW5kZXggNDM0MjFmYi4uOTY3NGU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSAiYWVyZHJ2LmgiCiAKIHN0YXRpYyBpbnQgZm9yY2Vsb2FkOwpAQCAtNDQ1LDggKzQ0Niw3IEBACiAJcmV0dXJuIGRydjsKIH0KIAotc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcmVzZXRfbGluayhzdHJ1Y3QgcGNpZV9kZXZpY2UgKmFlcmRldiwKLQkJc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHJlc2V0X2xpbmsoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqdWRldjsKIAlwY2lfZXJzX3Jlc3VsdF90IHN0YXR1czsKQEAgLTQ4Niw3ICs0ODYsNiBAQAogCiAvKioKICAqIGRvX3JlY292ZXJ5IC0gaGFuZGxlIG5vbmZhdGFsL2ZhdGFsIGVycm9yIHJlY292ZXJ5IHByb2Nlc3MKLSAqIEBhZXJkZXY6IHBvaW50ZXIgdG8gYSBwY2llX2RldmljZSBkYXRhIHN0cnVjdHVyZSBvZiByb290IHBvcnQKICAqIEBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IGRhdGEgc3RydWN0dXJlIG9mIGFnZW50IGRldGVjdGluZyBhbiBlcnJvcgogICogQHNldmVyaXR5OiBlcnJvciBzZXZlcml0eSB0eXBlCiAgKgpAQCAtNDk0LDggKzQ5Myw3IEBACiAgKiBlcnJvciBkZXRlY3RlZCBtZXNzYWdlIHRvIGFsbCBkb3duc3RyZWFtIGRyaXZlcnMgd2l0aGluIGEgaGllcmFyY2h5IGluCiAgKiBxdWVzdGlvbiBhbmQgcmV0dXJuIHRoZSByZXR1cm5lZCBjb2RlLgogICovCi1zdGF0aWMgdm9pZCBkb19yZWNvdmVyeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmFlcmRldiwgc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJaW50IHNldmVyaXR5KQorc3RhdGljIHZvaWQgZG9fcmVjb3Zlcnkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHNldmVyaXR5KQogewogCXBjaV9lcnNfcmVzdWx0X3Qgc3RhdHVzLCByZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiAJZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZTsKQEAgLTUxMSw3ICs1MDksNyBAQAogCQkJcmVwb3J0X2Vycm9yX2RldGVjdGVkKTsKIAogCWlmIChzZXZlcml0eSA9PSBBRVJfRkFUQUwpIHsKLQkJcmVzdWx0ID0gcmVzZXRfbGluayhhZXJkZXYsIGRldik7CisJCXJlc3VsdCA9IHJlc2V0X2xpbmsoZGV2KTsKIAkJaWYgKHJlc3VsdCAhPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQpCiAJCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC01NzYsOSArNTc0LDczIEBACiAJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9DT1JfU1RBVFVTLAogCQkJCQlpbmZvLT5zdGF0dXMpOwogCX0gZWxzZQotCQlkb19yZWNvdmVyeShhZXJkZXYsIGRldiwgaW5mby0+c2V2ZXJpdHkpOworCQlkb19yZWNvdmVyeShkZXYsIGluZm8tPnNldmVyaXR5KTsKIH0KIAorI2lmZGVmIENPTkZJR19BQ1BJX0FQRUlfUENJRUFFUgorc3RhdGljIHZvaWQgYWVyX3JlY292ZXJfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKyNkZWZpbmUgQUVSX1JFQ09WRVJfUklOR19PUkRFUgkJNAorI2RlZmluZSBBRVJfUkVDT1ZFUl9SSU5HX1NJWkUJCSgxIDw8IEFFUl9SRUNPVkVSX1JJTkdfT1JERVIpCisKK3N0cnVjdCBhZXJfcmVjb3Zlcl9lbnRyeQoreworCXU4CWJ1czsKKwl1OAlkZXZmbjsKKwl1MTYJZG9tYWluOworCWludAlzZXZlcml0eTsKK307CisKK3N0YXRpYyBERUZJTkVfS0ZJRk8oYWVyX3JlY292ZXJfcmluZywgc3RydWN0IGFlcl9yZWNvdmVyX2VudHJ5LAorCQkgICAgQUVSX1JFQ09WRVJfUklOR19TSVpFKTsKKy8qCisgKiBNdXR1YWwgZXhjbHVzaW9uIGZvciB3cml0ZXJzIG9mIGFlcl9yZWNvdmVyX3JpbmcsIHJlYWRlciBzaWRlIGRvbid0CisgKiBuZWVkIGxvY2ssIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgcmVhZGVyIGFuZCBsb2NrIGlzIG5vdCBuZWVkZWQKKyAqIGJldHdlZW4gcmVhZGVyIGFuZCB3cml0ZXIuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWVyX3JlY292ZXJfcmluZ19sb2NrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksoYWVyX3JlY292ZXJfd29yaywgYWVyX3JlY292ZXJfd29ya19mdW5jKTsKKwordm9pZCBhZXJfcmVjb3Zlcl9xdWV1ZShpbnQgZG9tYWluLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCSAgICAgICBpbnQgc2V2ZXJpdHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWVyX3JlY292ZXJfZW50cnkgZW50cnkgPSB7CisJCS5idXMJCT0gYnVzLAorCQkuZGV2Zm4JCT0gZGV2Zm4sCisJCS5kb21haW4JCT0gZG9tYWluLAorCQkuc2V2ZXJpdHkJPSBzZXZlcml0eSwKKwl9OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFlcl9yZWNvdmVyX3JpbmdfbG9jaywgZmxhZ3MpOworCWlmIChrZmlmb19wdXQoJmFlcl9yZWNvdmVyX3JpbmcsICZlbnRyeSkpCisJCXNjaGVkdWxlX3dvcmsoJmFlcl9yZWNvdmVyX3dvcmspOworCWVsc2UKKwkJcHJfZXJyKCJBRVIgcmVjb3ZlcjogQnVmZmVyIG92ZXJmbG93IHdoZW4gcmVjb3ZlcmluZyBBRVIgZm9yICUwNHg6JTAyeDolMDJ4OiV4XG4iLAorCQkgICAgICAgZG9tYWluLCBidXMsIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZXJfcmVjb3Zlcl9yaW5nX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFlcl9yZWNvdmVyX3F1ZXVlKTsKKworc3RhdGljIHZvaWQgYWVyX3JlY292ZXJfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWVyX3JlY292ZXJfZW50cnkgZW50cnk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwl3aGlsZSAoa2ZpZm9fZ2V0KCZhZXJfcmVjb3Zlcl9yaW5nLCAmZW50cnkpKSB7CisJCXBkZXYgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoZW50cnkuZG9tYWluLCBlbnRyeS5idXMsCisJCQkJCQkgICBlbnRyeS5kZXZmbik7CisJCWlmICghcGRldikgeworCQkJcHJfZXJyKCJBRVIgcmVjb3ZlcjogQ2FuIG5vdCBmaW5kIHBjaV9kZXYgZm9yICUwNHg6JTAyeDolMDJ4OiV4XG4iLAorCQkJICAgICAgIGVudHJ5LmRvbWFpbiwgZW50cnkuYnVzLAorCQkJICAgICAgIFBDSV9TTE9UKGVudHJ5LmRldmZuKSwgUENJX0ZVTkMoZW50cnkuZGV2Zm4pKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRvX3JlY292ZXJ5KHBkZXYsIGVudHJ5LnNldmVyaXR5KTsKKwl9Cit9CisjZW5kaWYKKwogLyoqCiAgKiBnZXRfZGV2aWNlX2Vycm9yX2luZm8gLSByZWFkIGVycm9yIHN0YXR1cyBmcm9tIGRldiBhbmQgc3RvcmUgaXQgdG8gaW5mbwogICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIGV4cGVjdGVkIHRvIGhhdmUgYSBlcnJvciByZWNvcmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2VycnByaW50LmMKaW5kZXggYjA3YTQyZS4uM2VhNTE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2VycnByaW50LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2VycnByaW50LmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0FDUElfQVBFSV9QQ0lFQUVSCi1zdGF0aWMgaW50IGNwZXJfc2V2ZXJpdHlfdG9fYWVyKGludCBjcGVyX3NldmVyaXR5KQoraW50IGNwZXJfc2V2ZXJpdHlfdG9fYWVyKGludCBjcGVyX3NldmVyaXR5KQogewogCXN3aXRjaCAoY3Blcl9zZXZlcml0eSkgewogCWNhc2UgQ1BFUl9TRVZfUkVDT1ZFUkFCTEU6CkBAIC0yMTUsNiArMjE1LDcgQEAKIAkJcmV0dXJuIEFFUl9DT1JSRUNUQUJMRTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcGVyX3NldmVyaXR5X3RvX2Flcik7CiAKIHZvaWQgY3Blcl9wcmludF9hZXIoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY3Blcl9zZXZlcml0eSwKIAkJICAgIHN0cnVjdCBhZXJfY2FwYWJpbGl0eV9yZWdzICphZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCA5YWI0OTJmLi5mM2Y5NGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTY4LDIxICs2OCw2IEBACiB9CiBwb3N0Y29yZV9pbml0Y2FsbChwY2lidXNfY2xhc3NfaW5pdCk7CiAKLS8qCi0gKiBUcmFuc2xhdGUgdGhlIGxvdyBiaXRzIG9mIHRoZSBQQ0kgYmFzZQotICogdG8gdGhlIHJlc291cmNlIHR5cGUKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGNpX2NhbGNfcmVzb3VyY2VfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQotewotCWlmIChmbGFncyAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCi0JCXJldHVybiBJT1JFU09VUkNFX0lPOwotCi0JaWYgKGZsYWdzICYgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpCi0JCXJldHVybiBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0KLQlyZXR1cm4gSU9SRVNPVVJDRV9NRU07Ci19Ci0KIHN0YXRpYyB1NjQgcGNpX3NpemUodTY0IGJhc2UsIHU2NCBtYXhiYXNlLCB1NjQgbWFzaykKIHsKIAl1NjQgc2l6ZSA9IG1hc2sgJiBtYXhiYXNlOwkvKiBGaW5kIHRoZSBzaWduaWZpY2FudCBiaXRzICovCkBAIC0xMDEsMTggKzg2LDM5IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZW51bSBwY2lfYmFyX3R5cGUgZGVjb2RlX2JhcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIGJhcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZWNvZGVfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBiYXIpCiB7CisJdTMyIG1lbV90eXBlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoKGJhciAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKLQkJcmVzLT5mbGFncyA9IGJhciAmIH5QQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JCXJldHVybiBwY2lfYmFyX2lvOworCQlmbGFncyA9IGJhciAmIH5QQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CisJCWZsYWdzIHw9IElPUkVTT1VSQ0VfSU87CisJCXJldHVybiBmbGFnczsKIAl9CiAKLQlyZXMtPmZsYWdzID0gYmFyICYgflBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CisJZmxhZ3MgPSBiYXIgJiB+UENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwlmbGFncyB8PSBJT1JFU09VUkNFX01FTTsKKwlpZiAoZmxhZ3MgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSCkKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAotCWlmIChyZXMtPmZsYWdzICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKLQkJcmV0dXJuIHBjaV9iYXJfbWVtNjQ7Ci0JcmV0dXJuIHBjaV9iYXJfbWVtMzI7CisJbWVtX3R5cGUgPSBiYXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0s7CisJc3dpdGNoIChtZW1fdHlwZSkgeworCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOgorCQlkZXZfaW5mbygmZGV2LT5kZXYsICIxTSBtZW0gQkFSIHRyZWF0ZWQgYXMgMzItYml0IEJBUlxuIik7CisJCWJyZWFrOworCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU1fNjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAibWVtIHVua25vd24gdHlwZSAleCB0cmVhdGVkIGFzIDMyLWJpdCBCQVJcbiIsCisJCQkgbWVtX3R5cGUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGZsYWdzOwogfQogCiAvKioKQEAgLTE2NSw5ICsxNzEsOSBAQAogCQlsID0gMDsKIAogCWlmICh0eXBlID09IHBjaV9iYXJfdW5rbm93bikgewotCQl0eXBlID0gZGVjb2RlX2JhcihyZXMsIGwpOwotCQlyZXMtPmZsYWdzIHw9IHBjaV9jYWxjX3Jlc291cmNlX2ZsYWdzKGwpIHwgSU9SRVNPVVJDRV9TSVpFQUxJR047Ci0JCWlmICh0eXBlID09IHBjaV9iYXJfaW8pIHsKKwkJcmVzLT5mbGFncyA9IGRlY29kZV9iYXIoZGV2LCBsKTsKKwkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1NJWkVBTElHTjsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCQlsICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKIAkJCW1hc2sgPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0sgJiAodTMyKSBJT19TUEFDRV9MSU1JVDsKIAkJfSBlbHNlIHsKQEAgLTE4MCw3ICsxODYsNyBAQAogCQltYXNrID0gKHUzMilQQ0lfUk9NX0FERFJFU1NfTUFTSzsKIAl9CiAKLQlpZiAodHlwZSA9PSBwY2lfYmFyX21lbTY0KSB7CisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkgewogCQl1NjQgbDY0ID0gbDsKIAkJdTY0IHN6NjQgPSBzejsKIAkJdTY0IG1hc2s2NCA9IG1hc2sgfCAodTY0KX4wIDw8IDMyOwpAQCAtMjA0LDcgKzIxMCw2IEBACiAJCQlnb3RvIGZhaWw7CiAJCX0KIAotCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNXzY0OwogCQlpZiAoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpIDwgOCkgJiYgbCkgewogCQkJLyogQWRkcmVzcyBhYm92ZSAzMi1iaXQgYm91bmRhcnk7IGRpc2FibGUgdGhlIEJBUiAqLwogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgMCk7CkBAIC0yMzAsNyArMjM1LDcgQEAKIAl9CiAKICBvdXQ6Ci0JcmV0dXJuICh0eXBlID09IHBjaV9iYXJfbWVtNjQpID8gMSA6IDA7CisJcmV0dXJuIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpID8gMSA6IDA7CiAgZmFpbDoKIAlyZXMtPmZsYWdzID0gMDsKIAlnb3RvIG91dDsKQEAgLTI4NCwxMCArMjg5LDYgQEAKIAkJaWYgKCFyZXMtPmVuZCkKIAkJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZjsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0gZWxzZSB7Ci0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAotCQkJICIgIGJyaWRnZSB3aW5kb3cgW2lvICAlIzA2bHgtJSMwNmx4XSAoZGlzYWJsZWQpXG4iLAotCQkJCSBiYXNlLCBsaW1pdCk7CiAJfQogfQogCkBAIC0zMDgsMTAgKzMwOSw2IEBACiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0gZWxzZSB7Ci0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAotCQkJIiAgYnJpZGdlIHdpbmRvdyBbbWVtICUjMDEwbHgtJSMwMTBseF0gKGRpc2FibGVkKVxuIiwKLQkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CiAJfQogfQogCkBAIC0zNTksMTAgKzM1Niw2IEBACiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICIgIGJyaWRnZSB3aW5kb3cgJXBSXG4iLCByZXMpOwotCX0gZWxzZSB7Ci0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAotCQkgICAgICIgIGJyaWRnZSB3aW5kb3cgW21lbSAlIzAxMGx4LSUjMDEwbHggcHJlZl0gKGRpc2FibGVkKVxuIiwKLQkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CiAJfQogfQogCkBAIC03MjUsMTIgKzcxOCwxNCBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfU1RBVFVTLCAweGZmZmYpOwogCiAJCS8qIFByZXZlbnQgYXNzaWduaW5nIGEgYnVzIG51bWJlciB0aGF0IGFscmVhZHkgZXhpc3RzLgotCQkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGJyaWRnZSBpcyBob3QtcGx1Z2dlZCAqLwotCQlpZiAocGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIoYnVzKSwgbWF4KzEpKQotCQkJZ290byBvdXQ7Ci0JCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGJ1cywgZGV2LCArK21heCk7Ci0JCWlmICghY2hpbGQpCi0JCQlnb3RvIG91dDsKKwkJICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBicmlkZ2UgaXMgaG90LXBsdWdnZWQsIHNvIGluCisJCSAqIHRoaXMgY2FzZSB3ZSBvbmx5IHJlLXNjYW4gdGhpcyBidXMuICovCisJCWNoaWxkID0gcGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIoYnVzKSwgbWF4KzEpOworCQlpZiAoIWNoaWxkKSB7CisJCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhidXMsIGRldiwgKyttYXgpOworCQkJaWYgKCFjaGlsZCkKKwkJCQlnb3RvIG91dDsKKwkJfQogCQlidXNlcyA9IChidXNlcyAmIDB4ZmYwMDAwMDApCiAJCSAgICAgIHwgKCh1bnNpZ25lZCBpbnQpKGNoaWxkLT5wcmltYXJ5KSAgICAgPDwgIDApCiAJCSAgICAgIHwgKCh1bnNpZ25lZCBpbnQpKGNoaWxkLT5zZWNvbmRhcnkpICAgPDwgIDgpCkBAIC04NjEsNiArODU2LDggQEAKIAlwZGV2LT5wY2llX2NhcCA9IHBvczsKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0ZMQUdTLCAmcmVnMTYpOwogCXBkZXYtPnBjaWVfdHlwZSA9IChyZWcxNiAmIFBDSV9FWFBfRkxBR1NfVFlQRSkgPj4gNDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNBUCwgJnJlZzE2KTsKKwlwZGV2LT5wY2llX21wc3MgPSByZWcxNiAmIFBDSV9FWFBfREVWQ0FQX1BBWUxPQUQ7CiB9CiAKIHZvaWQgc2V0X3BjaWVfaG90cGx1Z19icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0xMzMxLDYgKzEzMjgsMTUxIEBACiAJcmV0dXJuIG5yOwogfQogCitzdGF0aWMgaW50IHBjaWVfZmluZF9zbXBzcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCXU4ICpzbXBzcyA9IGRhdGE7CisKKwlpZiAoIXBjaV9pc19wY2llKGRldikpCisJCXJldHVybiAwOworCisJLyogRm9yIFBDSUUgaG90cGx1ZyBlbmFibGVkIHNsb3RzIG5vdCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYQorCSAqIFBDSS1FIHJvb3QgcG9ydCwgdGhlcmUgY2FuIGJlIHByb2JsZW1zIHdoZW4gaG90cGx1Z2dpbmcKKwkgKiBkZXZpY2VzLiAgVGhpcyBpcyBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGhvdHBsdWdnaW5nIGEKKwkgKiBkZXZpY2UgaW50byB0aGUgZmFicmljIHdpdGggYSBzbWFsbGVyIE1QUyB0aGF0IHRoZSBkZXZpY2VzCisJICogY3VycmVudGx5IHJ1bm5pbmcgaGF2ZSBjb25maWd1cmVkLiAgTW9kaWZ5aW5nIHRoZSBNUFMgb24gdGhlCisJICogcnVubmluZyBkZXZpY2VzIGNvdWxkIGNhdXNlIGEgZmF0YWwgYnVzIGVycm9yIGR1ZSB0byBhbgorCSAqIGluY29taW5nIGZyYW1lIGJlaW5nIGxhcmdlciB0aGFuIHRoZSBuZXdseSBjb25maWd1cmVkIE1QUy4KKwkgKiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGUgTVBTIGZvciB0aGUgZW50aXJlIGZhYnJpYyBtdXN0IGJlCisJICogc2V0IHRvIHRoZSBtaW5pbXVtIHNpemUuICBBbnkgZGV2aWNlcyBob3RwbHVnZ2VkIGludG8gdGhpcworCSAqIGZhYnJpYyB3aWxsIGhhdmUgdGhlIG1pbmltdW0gTVBTIHNldC4gIElmIHRoZSBQQ0kgaG90cGx1ZworCSAqIHNsb3QgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSByb290IHBvcnQgYW5kIHRoZXJlIGFyZSBub3QKKwkgKiBvdGhlciBkZXZpY2VzIG9uIHRoZSBmYWJyaWMgKHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBtb3N0CisJICogY29tbW9uIGNhc2UpLCB0aGVuIHRoaXMgaXMgbm90IGFuIGlzc3VlIGFuZCBNUFMgZGlzY292ZXJ5CisJICogd2lsbCBvY2N1ciBhcyBub3JtYWwuCisJICovCisJaWYgKGRldi0+aXNfaG90cGx1Z19icmlkZ2UgJiYgKCFsaXN0X2lzX3Npbmd1bGFyKCZkZXYtPmJ1cy0+ZGV2aWNlcykgfHwKKwkgICAgIChkZXYtPmJ1cy0+c2VsZiAmJgorCSAgICAgIGRldi0+YnVzLT5zZWxmLT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCkpKQorCQkqc21wc3MgPSAwOworCisJaWYgKCpzbXBzcyA+IGRldi0+cGNpZV9tcHNzKQorCQkqc21wc3MgPSBkZXYtPnBjaWVfbXBzczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2llX3dyaXRlX21wcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbXBzKQoreworCWludCByYywgZGV2X21wc3M7CisKKwlkZXZfbXBzcyA9IDEyOCA8PCBkZXYtPnBjaWVfbXBzczsKKworCWlmIChwY2llX2J1c19jb25maWcgPT0gUENJRV9CVVNfUEVSRk9STUFOQ0UpIHsKKwkJaWYgKGRldi0+YnVzLT5zZWxmKSB7CisJCQlkZXZfZGJnKCZkZXYtPmJ1cy0+ZGV2LCAiQnVzIE1QU1MgJWRcbiIsCisJCQkJMTI4IDw8IGRldi0+YnVzLT5zZWxmLT5wY2llX21wc3MpOworCisJCQkvKiBGb3IgIk1QUyBGb3JjZSBNYXgiLCB0aGUgYXNzdW1wdGlvbiBpcyBtYWRlIHRoYXQKKwkJCSAqIGRvd25zdHJlYW0gY29tbXVuaWNhdGlvbiB3aWxsIG5ldmVyIGJlIGxhcmdlciB0aGFuCisJCQkgKiB0aGUgTVJSUy4gIFNvLCB0aGUgTVBTIG9ubHkgbmVlZHMgdG8gYmUgY29uZmlndXJlZAorCQkJICogZm9yIHRoZSB1cHN0cmVhbSBjb21tdW5pY2F0aW9uLiAgVGhpcyBiZWluZyB0aGUgY2FzZSwKKwkJCSAqIHdhbGsgZnJvbSB0aGUgdG9wIGRvd24gYW5kIHNldCB0aGUgTVBTIG9mIHRoZSBjaGlsZAorCQkJICogdG8gdGhhdCBvZiB0aGUgcGFyZW50IGJ1cy4KKwkJCSAqLworCQkJbXBzID0gMTI4IDw8IGRldi0+YnVzLT5zZWxmLT5wY2llX21wc3M7CisJCQlpZiAobXBzID4gZGV2X21wc3MpCisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTVBTIGNvbmZpZ3VyZWQgaGlnaGVyIHRoYW4iCisJCQkJCSAiIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICBJZiIKKwkJCQkJICIgYSBidXMgaXNzdWUgb2NjdXJzLCB0cnkgcnVubmluZyB3aXRoIgorCQkJCQkgIiBwY2k9cGNpZV9idXNfc2FmZS5cbiIpOworCQl9CisKKwkJZGV2LT5wY2llX21wc3MgPSBmZnMobXBzKSAtIDg7CisJfQorCisJcmMgPSBwY2llX3NldF9tcHMoZGV2LCBtcHMpOworCWlmIChyYykKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgYXR0ZW1wdGluZyB0byBzZXQgdGhlIE1QU1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIHBjaWVfd3JpdGVfbXJycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbXBzKQoreworCWludCByYywgbXJycywgZGV2X21wc3M7CisKKwkvKiBJbiB0aGUgInNhZmUiIGNhc2UsIGRvIG5vdCBjb25maWd1cmUgdGhlIE1SUlMuICBUaGVyZSBhcHBlYXIgdG8gYmUKKwkgKiBpc3N1ZXMgd2l0aCBzZXR0aW5nIE1SUlMgdG8gMCBvbiBhIG51bWJlciBvZiBkZXZpY2VzLgorCSAqLworCisJaWYgKHBjaWVfYnVzX2NvbmZpZyAhPSBQQ0lFX0JVU19QRVJGT1JNQU5DRSkKKwkJcmV0dXJuOworCisJZGV2X21wc3MgPSAxMjggPDwgZGV2LT5wY2llX21wc3M7CisKKwkvKiBGb3IgTWF4IHBlcmZvcm1hbmNlLCB0aGUgTVJSUyBtdXN0IGJlIHNldCB0byB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQKKwkgKiB2YWx1ZS4gIEhvd2V2ZXIsIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkIGxhcmdlciB0aGFuIHRoZSBNUFMgdGhlCisJICogZGV2aWNlIG9yIHRoZSBidXMgY2FuIHN1cHBvcnQuICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbGFyZ2VzdCBNUlJTCisJICogYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2UgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgZGV2aWNlIE1QU1MuCisJICovCisJbXJycyA9IG1pbihtcHMsIGRldl9tcHNzKTsKKworCS8qIE1SUlMgaXMgYSBSL1cgcmVnaXN0ZXIuICBJbnZhbGlkIHZhbHVlcyBjYW4gYmUgd3JpdHRlbiwgYnV0IGEKKwkgKiBzdWJzZXF1ZW50IHJlYWQgd2lsbCB2ZXJpZnkgaWYgdGhlIHZhbHVlIGlzIGFjY2VwdGFibGUgb3Igbm90LgorCSAqIElmIHRoZSBNUlJTIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBhY2NlcHRhYmxlIChlLmcuLCB0b28gbGFyZ2UpLAorCSAqIHNocmluayB0aGUgdmFsdWUgdW50aWwgaXQgaXMgYWNjZXB0YWJsZSB0byB0aGUgSFcuCisgCSAqLworCXdoaWxlIChtcnJzICE9IHBjaWVfZ2V0X3JlYWRycShkZXYpICYmIG1ycnMgPj0gMTI4KSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwgIkF0dGVtcHRpbmcgdG8gbW9kaWZ5IHRoZSBQQ0ktRSBNUlJTIHZhbHVlIgorCQkJICIgdG8gJWQuICBJZiBhbnkgaXNzdWVzIGFyZSBlbmNvdW50ZXJlZCwgcGxlYXNlIHRyeSAiCisJCQkgInJ1bm5pbmcgd2l0aCBwY2k9cGNpZV9idXNfc2FmZVxuIiwgbXJycyk7CisJCXJjID0gcGNpZV9zZXRfcmVhZHJxKGRldiwgbXJycyk7CisJCWlmIChyYykKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSJGYWlsZWQgYXR0ZW1wdGluZyB0byBzZXQgdGhlIE1SUlNcbiIpOworCisJCW1ycnMgLz0gMjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNpZV9idXNfY29uZmlndXJlX3NldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCWludCBtcHMgPSAxMjggPDwgKih1OCAqKWRhdGE7CisKKwlpZiAoIXBjaV9pc19wY2llKGRldikpCisJCXJldHVybiAwOworCisJZGV2X2RiZygmZGV2LT5kZXYsICJEZXYgTVBTICVkIE1QU1MgJWQgTVJSUyAlZFxuIiwKKwkJIHBjaWVfZ2V0X21wcyhkZXYpLCAxMjg8PGRldi0+cGNpZV9tcHNzLCBwY2llX2dldF9yZWFkcnEoZGV2KSk7CisKKwlwY2llX3dyaXRlX21wcyhkZXYsIG1wcyk7CisJcGNpZV93cml0ZV9tcnJzKGRldiwgbXBzKTsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiRGV2IE1QUyAlZCBNUFNTICVkIE1SUlMgJWRcbiIsCisJCSBwY2llX2dldF9tcHMoZGV2KSwgMTI4PDxkZXYtPnBjaWVfbXBzcywgcGNpZV9nZXRfcmVhZHJxKGRldikpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHBjaWVfYnVzX2NvbmZpZ3VyZV9tcHMgcmVxdWlyZXMgdGhhdCBwY2lfd2Fsa19idXMgd29yayBpbiBhIHRvcC1kb3duLAorICogcGFyZW50cyB0aGVuIGNoaWxkcmVuIGZhc2hpb24uICBJZiB0aGlzIGNoYW5nZXMsIHRoZW4gdGhpcyBjb2RlIHdpbGwgbm90CisgKiB3b3JrIGFzIGRlc2lnbmVkLgorICovCit2b2lkIHBjaWVfYnVzX2NvbmZpZ3VyZV9zZXR0aW5ncyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1OCBtcHNzKQoreworCXU4IHNtcHNzID0gbXBzczsKKworCWlmICghcGNpX2lzX3BjaWUoYnVzLT5zZWxmKSkKKwkJcmV0dXJuOworCisJaWYgKHBjaWVfYnVzX2NvbmZpZyA9PSBQQ0lFX0JVU19TQUZFKSB7CisJCXBjaWVfZmluZF9zbXBzcyhidXMtPnNlbGYsICZzbXBzcyk7CisJCXBjaV93YWxrX2J1cyhidXMsIHBjaWVfZmluZF9zbXBzcywgJnNtcHNzKTsKKwl9CisKKwlwY2llX2J1c19jb25maWd1cmVfc2V0KGJ1cy0+c2VsZiwgJnNtcHNzKTsKKwlwY2lfd2Fsa19idXMoYnVzLCBwY2llX2J1c19jb25maWd1cmVfc2V0LCAmc21wc3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpZV9idXNfY29uZmlndXJlX3NldHRpbmdzKTsKKwogdW5zaWduZWQgaW50IF9fZGV2aW5pdCBwY2lfc2Nhbl9jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAl1bnNpZ25lZCBpbnQgZGV2Zm4sIHBhc3MsIG1heCA9IGJ1cy0+c2Vjb25kYXJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCA5OTk1ODQyLi43ODRkYTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMzQsNiArMzQsNyBAQAogCXJlc291cmNlX3NpemVfdCBzdGFydDsKIAlyZXNvdXJjZV9zaXplX3QgZW5kOwogCXJlc291cmNlX3NpemVfdCBhZGRfc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCkBAIC02NSw3ICs2Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFkZF90b19saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQsCiAJCSBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJIHJlc291cmNlX3NpemVfdCBhZGRfc2l6ZSkKKwkJIHJlc291cmNlX3NpemVfdCBhZGRfc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IG1pbl9hbGlnbikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpsaXN0ID0gaGVhZDsKIAlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpsbiA9IGxpc3QtPm5leHQ7CkBAIC04NCwxMyArODUsMTYgQEAKIAl0bXAtPmVuZCA9IHJlcy0+ZW5kOwogCXRtcC0+ZmxhZ3MgPSByZXMtPmZsYWdzOwogCXRtcC0+YWRkX3NpemUgPSBhZGRfc2l6ZTsKKwl0bXAtPm1pbl9hbGlnbiA9IG1pbl9hbGlnbjsKIAlsaXN0LT5uZXh0ID0gdG1wOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfdG9fZmFpbGVkX2xpc3Qoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqaGVhZCwKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKLQlhZGRfdG9fbGlzdChoZWFkLCBkZXYsIHJlcywgMCk7CisJYWRkX3RvX2xpc3QoaGVhZCwgZGV2LCByZXMsCisJCQkwIC8qIGRvbnQgY2FyZSAqLywKKwkJCTAgLyogZG9udCBjYXJlICovKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTEyMSwxOCArMTI1LDE4IEBACiB9CiAKIC8qKgotICogYWRqdXN0X3Jlc291cmNlc19zb3J0ZWQoKSAtIHNhdGlzZnkgYW55IGFkZGl0aW9uYWwgcmVzb3VyY2UgcmVxdWVzdHMKKyAqIHJlYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoKSAtIHNhdGlzZnkgYW55IGFkZGl0aW9uYWwgcmVzb3VyY2UgcmVxdWVzdHMKICAqCi0gKiBAYWRkX2hlYWQgOiBoZWFkIG9mIHRoZSBsaXN0IHRyYWNraW5nIHJlcXVlc3RzIHJlcXVpcmluZyBhZGRpdGlvbmFsCisgKiBAcmVhbGxvY19oZWFkIDogaGVhZCBvZiB0aGUgbGlzdCB0cmFja2luZyByZXF1ZXN0cyByZXF1aXJpbmcgYWRkaXRpb25hbAogICogICAgICAgICAgICAgcmVzb3VyY2VzCiAgKiBAaGVhZCAgICAgOiBoZWFkIG9mIHRoZSBsaXN0IHRyYWNraW5nIHJlcXVlc3RzIHdpdGggYWxsb2NhdGVkCiAgKiAgICAgICAgICAgICByZXNvdXJjZXMKICAqCi0gKiBXYWxrIHRocm91Z2ggZWFjaCBlbGVtZW50IG9mIHRoZSBhZGRfaGVhZCBhbmQgdHJ5IHRvIHByb2N1cmUKKyAqIFdhbGsgdGhyb3VnaCBlYWNoIGVsZW1lbnQgb2YgdGhlIHJlYWxsb2NfaGVhZCBhbmQgdHJ5IHRvIHByb2N1cmUKICAqIGFkZGl0aW9uYWwgcmVzb3VyY2VzIGZvciB0aGUgZWxlbWVudCwgcHJvdmlkZWQgdGhlIGVsZW1lbnQKICAqIGlzIGluIHRoZSBoZWFkIGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkIGFkanVzdF9yZXNvdXJjZXNfc29ydGVkKHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmFkZF9oZWFkLAorc3RhdGljIHZvaWQgcmVhc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpyZWFsbG9jX2hlYWQsCiAJCXN0cnVjdCByZXNvdXJjZV9saXN0ICpoZWFkKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMTQxLDggKzE0NSw4IEBACiAJcmVzb3VyY2Vfc2l6ZV90IGFkZF9zaXplOwogCWludCBpZHg7CiAKLQlwcmV2ID0gYWRkX2hlYWQ7Ci0JZm9yIChsaXN0ID0gYWRkX2hlYWQtPm5leHQ7IGxpc3Q7KSB7CisJcHJldiA9IHJlYWxsb2NfaGVhZDsKKwlmb3IgKGxpc3QgPSByZWFsbG9jX2hlYWQtPm5leHQ7IGxpc3Q7KSB7CiAJCXJlcyA9IGxpc3QtPnJlczsKIAkJLyogc2tpcCByZXNvdXJjZSB0aGF0IGhhcyBiZWVuIHJlc2V0ICovCiAJCWlmICghcmVzLT5mbGFncykKQEAgLTE1OSwxMyArMTYzLDE3IEBACiAKIAkJaWR4ID0gcmVzIC0gJmxpc3QtPmRldi0+cmVzb3VyY2VbMF07CiAJCWFkZF9zaXplPWxpc3QtPmFkZF9zaXplOwotCQlpZiAoIXJlc291cmNlX3NpemUocmVzKSAmJiBhZGRfc2l6ZSkgewotCQkJIHJlcy0+ZW5kID0gcmVzLT5zdGFydCArIGFkZF9zaXplIC0gMTsKLQkJCSBpZihwY2lfYXNzaWduX3Jlc291cmNlKGxpc3QtPmRldiwgaWR4KSkKKwkJaWYgKCFyZXNvdXJjZV9zaXplKHJlcykpIHsKKwkJCXJlcy0+c3RhcnQgPSBsaXN0LT5zdGFydDsKKwkJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIGFkZF9zaXplIC0gMTsKKwkJCWlmKHBjaV9hc3NpZ25fcmVzb3VyY2UobGlzdC0+ZGV2LCBpZHgpKQogCQkJCXJlc2V0X3Jlc291cmNlKHJlcyk7Ci0JCX0gZWxzZSBpZiAoYWRkX3NpemUpIHsKLQkJCWFkanVzdF9yZXNvdXJjZShyZXMsIHJlcy0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShyZXMpICsgYWRkX3NpemUpOworCQl9IGVsc2UgeworCQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduID0gbGlzdC0+bWluX2FsaWduOworCQkJcmVzLT5mbGFncyB8PSBsaXN0LT5mbGFncyAmIChJT1JFU09VUkNFX1NUQVJUQUxJR058SU9SRVNPVVJDRV9TSVpFQUxJR04pOworCQkJaWYgKHBjaV9yZWFzc2lnbl9yZXNvdXJjZShsaXN0LT5kZXYsIGlkeCwgYWRkX3NpemUsIGFsaWduKSkKKwkJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZsaXN0LT5kZXYtPmRldiwgImZhaWxlZCB0byBhZGQgb3B0aW9uYWwgcmVzb3VyY2VzIHJlcz0lcFJcbiIsCisJCQkJCQkJcmVzKTsKIAkJfQogb3V0OgogCQl0bXAgPSBsaXN0OwpAQCAtMjEwLDE2ICsyMTgsMTYgQEAKIH0KIAogc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKLQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCisJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKnJlYWxsb2NfaGVhZCwKIAkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQogewogCS8qIFNhdGlzZnkgdGhlIG11c3QtaGF2ZSByZXNvdXJjZSByZXF1ZXN0cyAqLwogCWFzc2lnbl9yZXF1ZXN0ZWRfcmVzb3VyY2VzX3NvcnRlZChoZWFkLCBmYWlsX2hlYWQpOwogCi0JLyogVHJ5IHRvIHNhdGlzZnkgYW55IGFkZGl0aW9uYWwgbmljZS10by1oYXZlIHJlc291cmNlCisJLyogVHJ5IHRvIHNhdGlzZnkgYW55IGFkZGl0aW9uYWwgb3B0aW9uYWwgcmVzb3VyY2UKIAkJcmVxdWVzdHMgKi8KLQlpZiAoYWRkX2hlYWQpCi0JCWFkanVzdF9yZXNvdXJjZXNfc29ydGVkKGFkZF9oZWFkLCBoZWFkKTsKKwlpZiAocmVhbGxvY19oZWFkKQorCQlyZWFzc2lnbl9yZXNvdXJjZXNfc29ydGVkKHJlYWxsb2NfaGVhZCwgaGVhZCk7CiAJZnJlZV9saXN0KHJlc291cmNlX2xpc3QsIGhlYWQpOwogfQogCkBAIC0yMzUsNyArMjQzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAotCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpyZWFsbG9jX2hlYWQsCiAJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKQEAgLTI0NSw3ICsyNTMsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKIAkJX19kZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CiAKLQlfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKCZoZWFkLCBhZGRfaGVhZCwgZmFpbF9oZWFkKTsKKwlfX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKCZoZWFkLCByZWFsbG9jX2hlYWQsIGZhaWxfaGVhZCk7CiB9CiAKIHZvaWQgcGNpX3NldHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKQEAgLTMzNiw3ICszNDQsNiBAQAogCQkvKiBDbGVhciB1cHBlciAxNiBiaXRzIG9mIEkvTyBiYXNlL2xpbWl0LiAqLwogCQlpb191cHBlcjE2ID0gMDsKIAkJbCA9IDB4MDBmMDsKLQkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFtpbyAgZGlzYWJsZWRdXG4iKTsKIAl9CiAJLyogVGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgSS9PIHJhbmdlIGJlZm9yZSB1cGRhdGluZyBQQ0lfSU9fQkFTRS4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX0lPX0JBU0VfVVBQRVIxNiwgMHgwMDAwZmZmZik7CkBAIC0zNjIsNyArMzY5LDYgQEAKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKIAl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKLQkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gZGlzYWJsZWRdXG4iKTsKIAl9CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9NRU1PUllfQkFTRSwgbCk7CiB9CkBAIC0zOTMsNyArMzk5LDYgQEAKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKIAl9IGVsc2UgewogCQlsID0gMHgwMDAwZmZmMDsKLQkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93IFttZW0gcHJlZiBkaXNhYmxlZF1cbiIpOwogCX0KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfTUVNT1JZX0JBU0UsIGwpOwogCkBAIC01NDMsMTMgKzU0OCwyNyBAQAogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IGdldF9yZXNfYWRkX3NpemUoc3RydWN0IHJlc291cmNlX2xpc3RfeCAqcmVhbGxvY19oZWFkLAorCQkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpsaXN0OworCisJLyogY2hlY2sgaWYgaXQgaXMgaW4gcmVhbGxvY19oZWFkIGxpc3QgKi8KKwlmb3IgKGxpc3QgPSByZWFsbG9jX2hlYWQtPm5leHQ7IGxpc3QgJiYgbGlzdC0+cmVzICE9IHJlczsKKwkJCWxpc3QgPSBsaXN0LT5uZXh0KTsKKwlpZiAobGlzdCkKKwkJcmV0dXJuIGxpc3QtPmFkZF9zaXplOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcGJ1c19zaXplX2lvKCkgLSBzaXplIHRoZSBpbyB3aW5kb3cgb2YgYSBnaXZlbiBidXMKICAqCiAgKiBAYnVzIDogdGhlIGJ1cwogICogQG1pbl9zaXplIDogdGhlIG1pbmltdW0gaW8gd2luZG93IHRoYXQgbXVzdCB0byBiZSBhbGxvY2F0ZWQKICAqIEBhZGRfc2l6ZSA6IGFkZGl0aW9uYWwgb3B0aW9uYWwgaW8gd2luZG93Ci0gKiBAYWRkX2hlYWQgOiB0cmFjayB0aGUgYWRkaXRpb25hbCBpbyB3aW5kb3cgb24gdGhpcyBsaXN0CisgKiBAcmVhbGxvY19oZWFkIDogdHJhY2sgdGhlIGFkZGl0aW9uYWwgaW8gd2luZG93IG9uIHRoaXMgbGlzdAogICoKICAqIFNpemluZyB0aGUgSU8gd2luZG93cyBvZiB0aGUgUENJLVBDSSBicmlkZ2UgaXMgdHJpdmlhbCwKICAqIHNpbmNlIHRoZXNlIHdpbmRvd3MgaGF2ZSA0SyBncmFudWxhcml0eSBhbmQgdGhlIElPIHJhbmdlcwpAQCAtNTU3LDExICs1NzYsMTIgQEAKICAqIFdlIG11c3QgYmUgY2FyZWZ1bCB3aXRoIHRoZSBJU0EgYWxpYXNpbmcgdGhvdWdoLgogICovCiBzdGF0aWMgdm9pZCBwYnVzX3NpemVfaW8oc3RydWN0IHBjaV9idXMgKmJ1cywgcmVzb3VyY2Vfc2l6ZV90IG1pbl9zaXplLAotCQlyZXNvdXJjZV9zaXplX3QgYWRkX3NpemUsIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmFkZF9oZWFkKQorCQlyZXNvdXJjZV9zaXplX3QgYWRkX3NpemUsIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKnJlYWxsb2NfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqYl9yZXMgPSBmaW5kX2ZyZWVfYnVzX3Jlc291cmNlKGJ1cywgSU9SRVNPVVJDRV9JTyk7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gMCwgc2l6ZTAgPSAwLCBzaXplMSA9IDA7CisJcmVzb3VyY2Vfc2l6ZV90IGNoaWxkcmVuX2FkZF9zaXplID0gMDsKIAogCWlmICghYl9yZXMpCiAgCQlyZXR1cm47CkBAIC01ODIsMTEgKzYwMiwxNiBAQAogCQkJCXNpemUgKz0gcl9zaXplOwogCQkJZWxzZQogCQkJCXNpemUxICs9IHJfc2l6ZTsKKworCQkJaWYgKHJlYWxsb2NfaGVhZCkKKwkJCQljaGlsZHJlbl9hZGRfc2l6ZSArPSBnZXRfcmVzX2FkZF9zaXplKHJlYWxsb2NfaGVhZCwgcik7CiAJCX0KIAl9CiAJc2l6ZTAgPSBjYWxjdWxhdGVfaW9zaXplKHNpemUsIG1pbl9zaXplLCBzaXplMSwKIAkJCXJlc291cmNlX3NpemUoYl9yZXMpLCA0MDk2KTsKLQlzaXplMSA9ICghYWRkX2hlYWQgfHwgKGFkZF9oZWFkICYmICFhZGRfc2l6ZSkpID8gc2l6ZTAgOgorCWlmIChjaGlsZHJlbl9hZGRfc2l6ZSA+IGFkZF9zaXplKQorCQlhZGRfc2l6ZSA9IGNoaWxkcmVuX2FkZF9zaXplOworCXNpemUxID0gKCFyZWFsbG9jX2hlYWQgfHwgKHJlYWxsb2NfaGVhZCAmJiAhYWRkX3NpemUpKSA/IHNpemUwIDoKIAkJY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgc2l6ZTEsCiAJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7CiAJaWYgKCFzaXplMCAmJiAhc2l6ZTEpIHsKQEAgLTYwMSw4ICs2MjYsOCBAQAogCWJfcmVzLT5zdGFydCA9IDQwOTY7CiAJYl9yZXMtPmVuZCA9IGJfcmVzLT5zdGFydCArIHNpemUwIC0gMTsKIAliX3Jlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9TVEFSVEFMSUdOOwotCWlmIChzaXplMSA+IHNpemUwICYmIGFkZF9oZWFkKQotCQlhZGRfdG9fbGlzdChhZGRfaGVhZCwgYnVzLT5zZWxmLCBiX3Jlcywgc2l6ZTEtc2l6ZTApOworCWlmIChzaXplMSA+IHNpemUwICYmIHJlYWxsb2NfaGVhZCkKKwkJYWRkX3RvX2xpc3QocmVhbGxvY19oZWFkLCBidXMtPnNlbGYsIGJfcmVzLCBzaXplMS1zaXplMCwgNDA5Nik7CiB9CiAKIC8qKgpAQCAtNjExLDcgKzYzNiw3IEBACiAgKiBAYnVzIDogdGhlIGJ1cwogICogQG1pbl9zaXplIDogdGhlIG1pbmltdW0gbWVtb3J5IHdpbmRvdyB0aGF0IG11c3QgdG8gYmUgYWxsb2NhdGVkCiAgKiBAYWRkX3NpemUgOiBhZGRpdGlvbmFsIG9wdGlvbmFsIG1lbW9yeSB3aW5kb3cKLSAqIEBhZGRfaGVhZCA6IHRyYWNrIHRoZSBhZGRpdGlvbmFsIG1lbW9yeSB3aW5kb3cgb24gdGhpcyBsaXN0CisgKiBAcmVhbGxvY19oZWFkIDogdHJhY2sgdGhlIGFkZGl0aW9uYWwgbWVtb3J5IHdpbmRvdyBvbiB0aGlzIGxpc3QKICAqCiAgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGJ1cyBhbmQgbWluaW1hbCBhbGlnbm1lbnQgd2hpY2gKICAqIGd1YXJhbnRlZXMgdGhhdCBhbGwgY2hpbGQgcmVzb3VyY2VzIGZpdCBpbiB0aGlzIHNpemUuCkBAIC02MTksNyArNjQ0LDcgQEAKIHN0YXRpYyBpbnQgcGJ1c19zaXplX21lbShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIG1hc2ssCiAJCQkgdW5zaWduZWQgbG9uZyB0eXBlLCByZXNvdXJjZV9zaXplX3QgbWluX3NpemUsCiAJCQlyZXNvdXJjZV9zaXplX3QgYWRkX3NpemUsCi0JCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICphZGRfaGVhZCkKKwkJCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKnJlYWxsb2NfaGVhZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXJlc291cmNlX3NpemVfdCBtaW5fYWxpZ24sIGFsaWduLCBzaXplLCBzaXplMCwgc2l6ZTE7CkBAIC02MjcsNiArNjUyLDcgQEAKIAlpbnQgb3JkZXIsIG1heF9vcmRlcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmJfcmVzID0gZmluZF9mcmVlX2J1c19yZXNvdXJjZShidXMsIHR5cGUpOwogCXVuc2lnbmVkIGludCBtZW02NF9tYXNrID0gMDsKKwlyZXNvdXJjZV9zaXplX3QgY2hpbGRyZW5fYWRkX3NpemUgPSAwOwogCiAJaWYgKCFiX3JlcykKIAkJcmV0dXJuIDA7CkBAIC02NDgsNiArNjc0LDE2IEBACiAJCQlpZiAoci0+cGFyZW50IHx8IChyLT5mbGFncyAmIG1hc2spICE9IHR5cGUpCiAJCQkJY29udGludWU7CiAJCQlyX3NpemUgPSByZXNvdXJjZV9zaXplKHIpOworI2lmZGVmIENPTkZJR19QQ0lfSU9WCisJCQkvKiBwdXQgU1JJT1YgcmVxdWVzdGVkIHJlcyB0byB0aGUgb3B0aW9uYWwgbGlzdCAqLworCQkJaWYgKHJlYWxsb2NfaGVhZCAmJiBpID49IFBDSV9JT1ZfUkVTT1VSQ0VTICYmCisJCQkJCWkgPD0gUENJX0lPVl9SRVNPVVJDRV9FTkQpIHsKKwkJCQlyLT5lbmQgPSByLT5zdGFydCAtIDE7CisJCQkJYWRkX3RvX2xpc3QocmVhbGxvY19oZWFkLCBkZXYsIHIsIHJfc2l6ZSwgMC8qIGRvbnQnIGNhcmUgKi8pOworCQkJCWNoaWxkcmVuX2FkZF9zaXplICs9IHJfc2l6ZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgogCQkJLyogRm9yIGJyaWRnZXMgc2l6ZSAhPSBhbGlnbm1lbnQgKi8KIAkJCWFsaWduID0gcGNpX3Jlc291cmNlX2FsaWdubWVudChkZXYsIHIpOwogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKQEAgLTY2OCw2ICs3MDQsOSBAQAogCQkJaWYgKG9yZGVyID4gbWF4X29yZGVyKQogCQkJCW1heF9vcmRlciA9IG9yZGVyOwogCQkJbWVtNjRfbWFzayAmPSByLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNXzY0OworCisJCQlpZiAocmVhbGxvY19oZWFkKQorCQkJCWNoaWxkcmVuX2FkZF9zaXplICs9IGdldF9yZXNfYWRkX3NpemUocmVhbGxvY19oZWFkLCByKTsKIAkJfQogCX0KIAlhbGlnbiA9IDA7CkBAIC02ODQsNyArNzIzLDkgQEAKIAkJYWxpZ24gKz0gYWxpZ25zW29yZGVyXTsKIAl9CiAJc2l6ZTAgPSBjYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSwgMCwgcmVzb3VyY2Vfc2l6ZShiX3JlcyksIG1pbl9hbGlnbik7Ci0Jc2l6ZTEgPSAoIWFkZF9oZWFkIHx8IChhZGRfaGVhZCAmJiAhYWRkX3NpemUpKSA/IHNpemUwIDoKKwlpZiAoY2hpbGRyZW5fYWRkX3NpemUgPiBhZGRfc2l6ZSkKKwkJYWRkX3NpemUgPSBjaGlsZHJlbl9hZGRfc2l6ZTsKKwlzaXplMSA9ICghcmVhbGxvY19oZWFkIHx8IChyZWFsbG9jX2hlYWQgJiYgIWFkZF9zaXplKSkgPyBzaXplMCA6CiAJCWNhbGN1bGF0ZV9tZW1zaXplKHNpemUsIG1pbl9zaXplK2FkZF9zaXplLCAwLAogCQkJCXJlc291cmNlX3NpemUoYl9yZXMpLCBtaW5fYWxpZ24pOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CkBAIC02OTgsMTIgKzczOSwyMiBAQAogCWJfcmVzLT5zdGFydCA9IG1pbl9hbGlnbjsKIAliX3Jlcy0+ZW5kID0gc2l6ZTAgKyBtaW5fYWxpZ24gLSAxOwogCWJfcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX1NUQVJUQUxJR04gfCBtZW02NF9tYXNrOwotCWlmIChzaXplMSA+IHNpemUwICYmIGFkZF9oZWFkKQotCQlhZGRfdG9fbGlzdChhZGRfaGVhZCwgYnVzLT5zZWxmLCBiX3Jlcywgc2l6ZTEtc2l6ZTApOworCWlmIChzaXplMSA+IHNpemUwICYmIHJlYWxsb2NfaGVhZCkKKwkJYWRkX3RvX2xpc3QocmVhbGxvY19oZWFkLCBidXMtPnNlbGYsIGJfcmVzLCBzaXplMS1zaXplMCwgbWluX2FsaWduKTsKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgcGNpX2J1c19zaXplX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3Vuc2lnbmVkIGxvbmcgcGNpX2NhcmRidXNfcmVzb3VyY2VfYWxpZ25tZW50KHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJcmV0dXJuIHBjaV9jYXJkYnVzX2lvX3NpemU7CisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKKwkJcmV0dXJuIHBjaV9jYXJkYnVzX21lbV9zaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2lfYnVzX3NpemVfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqcmVhbGxvY19oZWFkKQogewogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CiAJc3RydWN0IHJlc291cmNlICpiX3JlcyA9ICZicmlkZ2UtPnJlc291cmNlW1BDSV9CUklER0VfUkVTT1VSQ0VTXTsKQEAgLTcxNCwxMiArNzY1LDE0IEBACiAJICogYSBmaXhlZCBhbW91bnQgb2YgYnVzIHNwYWNlIGZvciBDYXJkQnVzIGJyaWRnZXMuCiAJICovCiAJYl9yZXNbMF0uc3RhcnQgPSAwOwotCWJfcmVzWzBdLmVuZCA9IHBjaV9jYXJkYnVzX2lvX3NpemUgLSAxOwogCWJfcmVzWzBdLmZsYWdzIHw9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX1NJWkVBTElHTjsKKwlpZiAocmVhbGxvY19oZWFkKQorCQlhZGRfdG9fbGlzdChyZWFsbG9jX2hlYWQsIGJyaWRnZSwgYl9yZXMsIHBjaV9jYXJkYnVzX2lvX3NpemUsIDAgLyogZG9udCBjYXJlICovKTsKIAogCWJfcmVzWzFdLnN0YXJ0ID0gMDsKLQliX3Jlc1sxXS5lbmQgPSBwY2lfY2FyZGJ1c19pb19zaXplIC0gMTsKIAliX3Jlc1sxXS5mbGFncyB8PSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9TSVpFQUxJR047CisJaWYgKHJlYWxsb2NfaGVhZCkKKwkJYWRkX3RvX2xpc3QocmVhbGxvY19oZWFkLCBicmlkZ2UsIGJfcmVzKzEsIHBjaV9jYXJkYnVzX2lvX3NpemUsIDAgLyogZG9udCBjYXJlICovKTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciBwcmVmZXRjaGFibGUgbWVtb3J5IGlzIHN1cHBvcnRlZApAQCAtNzM5LDIxICs3OTIsMzEgQEAKIAkgKi8KIAlpZiAoY3RybCAmIFBDSV9DQl9CUklER0VfQ1RMX1BSRUZFVENIX01FTTApIHsKIAkJYl9yZXNbMl0uc3RhcnQgPSAwOwotCQliX3Jlc1syXS5lbmQgPSBwY2lfY2FyZGJ1c19tZW1fc2l6ZSAtIDE7CiAJCWJfcmVzWzJdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSCB8IElPUkVTT1VSQ0VfU0laRUFMSUdOOworCQlpZiAocmVhbGxvY19oZWFkKQorCQkJYWRkX3RvX2xpc3QocmVhbGxvY19oZWFkLCBicmlkZ2UsIGJfcmVzKzIsIHBjaV9jYXJkYnVzX21lbV9zaXplLCAwIC8qIGRvbnQgY2FyZSAqLyk7CiAKIAkJYl9yZXNbM10uc3RhcnQgPSAwOwotCQliX3Jlc1szXS5lbmQgPSBwY2lfY2FyZGJ1c19tZW1fc2l6ZSAtIDE7CiAJCWJfcmVzWzNdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9TSVpFQUxJR047CisJCWlmIChyZWFsbG9jX2hlYWQpCisJCQlhZGRfdG9fbGlzdChyZWFsbG9jX2hlYWQsIGJyaWRnZSwgYl9yZXMrMywgcGNpX2NhcmRidXNfbWVtX3NpemUsIDAgLyogZG9udCBjYXJlICovKTsKIAl9IGVsc2UgewogCQliX3Jlc1szXS5zdGFydCA9IDA7Ci0JCWJfcmVzWzNdLmVuZCA9IHBjaV9jYXJkYnVzX21lbV9zaXplICogMiAtIDE7CiAJCWJfcmVzWzNdLmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9TSVpFQUxJR047CisJCWlmIChyZWFsbG9jX2hlYWQpCisJCQlhZGRfdG9fbGlzdChyZWFsbG9jX2hlYWQsIGJyaWRnZSwgYl9yZXMrMywgcGNpX2NhcmRidXNfbWVtX3NpemUgKiAyLCAwIC8qIGRvbnQgY2FyZSAqLyk7CiAJfQorCisJLyogc2V0IHRoZSBzaXplIG9mIHRoZSByZXNvdXJjZSB0byB6ZXJvLCBzbyB0aGF0IHRoZSByZXNvdXJjZSBkb2VzIG5vdAorCSAqIGdldCBhc3NpZ25lZCBkdXJpbmcgcmVxdWlyZWQtcmVzb3VyY2UgYWxsb2NhdGlvbiBjeWNsZSBidXQgZ2V0cyBhc3NpZ25lZAorCSAqIGR1cmluZyB0aGUgb3B0aW9uYWwtcmVzb3VyY2UgYWxsb2NhdGlvbiBjeWNsZS4KKyAJICovCisJYl9yZXNbMF0uc3RhcnQgPSBiX3Jlc1sxXS5zdGFydCA9IGJfcmVzWzJdLnN0YXJ0ID0gYl9yZXNbM10uc3RhcnQgPSAxOworCWJfcmVzWzBdLmVuZCA9IGJfcmVzWzFdLmVuZCA9IGJfcmVzWzJdLmVuZCA9IGJfcmVzWzNdLmVuZCA9IDA7CiB9CiAKIHZvaWQgX19yZWYgX19wY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAotCQkJc3RydWN0IHJlc291cmNlX2xpc3RfeCAqYWRkX2hlYWQpCisJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpyZWFsbG9jX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHByZWZtYXNrOwpAQCAtNzY2LDEyICs4MjksMTIgQEAKIAogCQlzd2l0Y2ggKGRldi0+Y2xhc3MgPj4gOCkgewogCQljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKLQkJCXBjaV9idXNfc2l6ZV9jYXJkYnVzKGIpOworCQkJcGNpX2J1c19zaXplX2NhcmRidXMoYiwgcmVhbGxvY19oZWFkKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9QQ0k6CiAJCWRlZmF1bHQ6Ci0JCQlfX3BjaV9idXNfc2l6ZV9icmlkZ2VzKGIsIGFkZF9oZWFkKTsKKwkJCV9fcGNpX2J1c19zaXplX2JyaWRnZXMoYiwgcmVhbGxvY19oZWFkKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzk1LDcgKzg1OCw3IEBACiAJCSAqIEZvbGxvdyB0aHJ1CiAJCSAqLwogCWRlZmF1bHQ6Ci0JCXBidXNfc2l6ZV9pbyhidXMsIDAsIGFkZGl0aW9uYWxfaW9fc2l6ZSwgYWRkX2hlYWQpOworCQlwYnVzX3NpemVfaW8oYnVzLCAwLCBhZGRpdGlvbmFsX2lvX3NpemUsIHJlYWxsb2NfaGVhZCk7CiAJCS8qIElmIHRoZSBicmlkZ2Ugc3VwcG9ydHMgcHJlZmV0Y2hhYmxlIHJhbmdlLCBzaXplIGl0CiAJCSAgIHNlcGFyYXRlbHkuIElmIGl0IGRvZXNuJ3QsIG9yIGl0cyBwcmVmZXRjaGFibGUgd2luZG93CiAJCSAgIGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGJ5IGFyY2ggY29kZSwgdHJ5CkBAIC04MDMsMTEgKzg2NiwxMSBAQAogCQkgICByZXNvdXJjZXMuICovCiAJCW1hc2sgPSBJT1JFU09VUkNFX01FTTsKIAkJcHJlZm1hc2sgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0JCWlmIChwYnVzX3NpemVfbWVtKGJ1cywgcHJlZm1hc2ssIHByZWZtYXNrLCAwLCBhZGRpdGlvbmFsX21lbV9zaXplLCBhZGRfaGVhZCkpCisJCWlmIChwYnVzX3NpemVfbWVtKGJ1cywgcHJlZm1hc2ssIHByZWZtYXNrLCAwLCBhZGRpdGlvbmFsX21lbV9zaXplLCByZWFsbG9jX2hlYWQpKQogCQkJbWFzayA9IHByZWZtYXNrOyAvKiBTdWNjZXNzLCBzaXplIG5vbi1wcmVmZXRjaCBvbmx5LiAqLwogCQllbHNlCiAJCQlhZGRpdGlvbmFsX21lbV9zaXplICs9IGFkZGl0aW9uYWxfbWVtX3NpemU7Ci0JCXBidXNfc2l6ZV9tZW0oYnVzLCBtYXNrLCBJT1JFU09VUkNFX01FTSwgMCwgYWRkaXRpb25hbF9tZW1fc2l6ZSwgYWRkX2hlYWQpOworCQlwYnVzX3NpemVfbWVtKGJ1cywgbWFzaywgSU9SRVNPVVJDRV9NRU0sIDAsIGFkZGl0aW9uYWxfbWVtX3NpemUsIHJlYWxsb2NfaGVhZCk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTgxOSwyMCArODgyLDIwIEBACiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfc2l6ZV9icmlkZ2VzKTsKIAogc3RhdGljIHZvaWQgX19yZWYgX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkJIHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmFkZF9oZWFkLAorCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqcmVhbGxvY19oZWFkLAogCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQogewogCXN0cnVjdCBwY2lfYnVzICpiOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGJ1cywgYWRkX2hlYWQsIGZhaWxfaGVhZCk7CisJcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChidXMsIHJlYWxsb2NfaGVhZCwgZmFpbF9oZWFkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQliID0gZGV2LT5zdWJvcmRpbmF0ZTsKIAkJaWYgKCFiKQogCQkJY29udGludWU7CiAKLQkJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYiwgYWRkX2hlYWQsIGZhaWxfaGVhZCk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIsIHJlYWxsb2NfaGVhZCwgZmFpbF9oZWFkKTsKIAogCQlzd2l0Y2ggKGRldi0+Y2xhc3MgPj4gOCkgewogCQljYXNlIFBDSV9DTEFTU19CUklER0VfUENJOgpAQCAtMTA0Miw3ICsxMTA1LDcgQEAKIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwotCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggYWRkX2xpc3Q7IC8qIGxpc3Qgb2YgcmVzb3VyY2VzIHRoYXQKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94IHJlYWxsb2NfbGlzdDsgLyogbGlzdCBvZiByZXNvdXJjZXMgdGhhdAogCQkJCQl3YW50IGFkZGl0aW9uYWwgcmVzb3VyY2VzICovCiAJaW50IHRyaWVkX3RpbWVzID0gMDsKIAllbnVtIHJlbGVhc2VfdHlwZSByZWxfdHlwZSA9IGxlYWZfb25seTsKQEAgLTEwNTUsNyArMTExOCw3IEBACiAKIAogCWhlYWQubmV4dCA9IE5VTEw7Ci0JYWRkX2xpc3QubmV4dCA9IE5VTEw7CisJcmVhbGxvY19saXN0Lm5leHQgPSBOVUxMOwogCiAJcGNpX3RyeV9udW0gPSBtYXhfZGVwdGggKyAxOwogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IG1heCBidXMgZGVwdGg6ICVkIHBjaV90cnlfbnVtOiAlZFxuIiwKQEAgLTEwNjUsMTIgKzExMjgsMTIgQEAKIAkvKiBEZXB0aCBmaXJzdCwgY2FsY3VsYXRlIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIGFsbAogCSAgIHN1Ym9yZGluYXRlIGJ1c2VzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpCi0JCV9fcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzLCAmYWRkX2xpc3QpOworCQlfX3BjaV9idXNfc2l6ZV9icmlkZ2VzKGJ1cywgJnJlYWxsb2NfbGlzdCk7CiAKIAkvKiBEZXB0aCBsYXN0LCBhbGxvY2F0ZSByZXNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgaGFyZHdhcmUuICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwY2lfcm9vdF9idXNlcywgbm9kZSkKLQkJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzLCAmYWRkX2xpc3QsICZoZWFkKTsKLQlCVUdfT04oYWRkX2xpc3QubmV4dCk7CisJCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgJnJlYWxsb2NfbGlzdCwgJmhlYWQpOworCUJVR19PTihyZWFsbG9jX2xpc3QubmV4dCk7CiAJdHJpZWRfdGltZXMrKzsKIAogCS8qIGFueSBkZXZpY2UgY29tcGxhaW4/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1pcnEuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jCmluZGV4IGVlYzk3MzguLmViMjE5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jCkBAIC0yMSw3ICsyMSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIHBkZXZfZml4dXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJICAgICAgIHU4ICgqc3dpenpsZSkoc3RydWN0IHBjaV9kZXYgKiwgdTggKiksCi0JICAgICAgIGludCAoKm1hcF9pcnEpKHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCkpCisJICAgICAgIGludCAoKm1hcF9pcnEpKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCkpCiB7CiAJdTggcGluLCBzbG90OwogCWludCBpcnEgPSAwOwpAQCAtNTYsNyArNTYsNyBAQAogCiB2b2lkIF9faW5pdAogcGNpX2ZpeHVwX2lycXModTggKCpzd2l6emxlKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCAqKSwKLQkgICAgICAgaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSkKKwkgICAgICAgaW50ICgqbWFwX2lycSkoY29uc3Qgc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAlmb3JfZWFjaF9wY2lfZGV2KGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKaW5kZXggYmMwZTZlZS4uNTFhOTA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKQEAgLTc0LDggKzc0LDcgQEAKIAkJCXJlc25vLCBuZXcsIGNoZWNrKTsKIAl9CiAKLQlpZiAoKG5ldyAmIChQQ0lfQkFTRV9BRERSRVNTX1NQQUNFfFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSykpID09Ci0JICAgIChQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWXxQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KSkgeworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fNjQpIHsKIAkJbmV3ID0gcmVnaW9uLnN0YXJ0ID4+IDE2ID4+IDE2OwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnICsgNCwgbmV3KTsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnICsgNCwgJmNoZWNrKTsKQEAgLTEyOSwxNiArMTI4LDE2IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1BDSV9RVUlSS1MgKi8KIAorCisKIHN0YXRpYyBpbnQgX19wY2lfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJIGludCByZXNubykKKwkJaW50IHJlc25vLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwotCXJlc291cmNlX3NpemVfdCBzaXplLCBtaW4sIGFsaWduOworCXJlc291cmNlX3NpemVfdCBtaW47CiAJaW50IHJldDsKIAotCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJbWluID0gKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/IFBDSUJJT1NfTUlOX0lPIDogUENJQklPU19NSU5fTUVNOwotCWFsaWduID0gcGNpX3Jlc291cmNlX2FsaWdubWVudChkZXYsIHJlcyk7CiAKIAkvKiBGaXJzdCwgdHJ5IGV4YWN0IHByZWZldGNoaW5nIG1hdGNoLi4gKi8KIAlyZXQgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKGJ1cywgcmVzLCBzaXplLCBhbGlnbiwgbWluLApAQCAtMTU1LDczICsxNTQsNTEgQEAKIAkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShidXMsIHJlcywgc2l6ZSwgYWxpZ24sIG1pbiwgMCwKIAkJCQkJICAgICBwY2liaW9zX2FsaWduX3Jlc291cmNlLCBkZXYpOwogCX0KLQotCWlmIChyZXQgPCAwICYmIGRldi0+ZndfYWRkcltyZXNub10pIHsKLQkJc3RydWN0IHJlc291cmNlICpyb290LCAqY29uZmxpY3Q7Ci0JCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOwotCi0JCS8qCi0JCSAqIElmIHdlIGZhaWxlZCB0byBhc3NpZ24gYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgYWRkcmVzcwotCQkgKiB3aGVyZSBmaXJtd2FyZSBsZWZ0IGl0LiAgVGhhdCBhdCBsZWFzdCBoYXMgYSBjaGFuY2Ugb2YKLQkJICogd29ya2luZywgd2hpY2ggaXMgYmV0dGVyIHRoYW4ganVzdCBsZWF2aW5nIGl0IGRpc2FibGVkLgotCQkgKi8KLQotCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKLQkJZWxzZQotCQkJcm9vdCA9ICZpb21lbV9yZXNvdXJjZTsKLQotCQlzdGFydCA9IHJlcy0+c3RhcnQ7Ci0JCWVuZCA9IHJlcy0+ZW5kOwotCQlyZXMtPnN0YXJ0ID0gZGV2LT5md19hZGRyW3Jlc25vXTsKLQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgc2l6ZSAtIDE7Ci0JCWRldl9pbmZvKCZkZXYtPmRldiwgIkJBUiAlZDogdHJ5aW5nIGZpcm13YXJlIGFzc2lnbm1lbnQgJXBSXG4iLAotCQkJIHJlc25vLCByZXMpOwotCQljb25mbGljdCA9IHJlcXVlc3RfcmVzb3VyY2VfY29uZmxpY3Qocm9vdCwgcmVzKTsKLQkJaWYgKGNvbmZsaWN0KSB7Ci0JCQlkZXZfaW5mbygmZGV2LT5kZXYsCi0JCQkJICJCQVIgJWQ6ICVwUiBjb25mbGljdHMgd2l0aCAlcyAlcFJcbiIsIHJlc25vLAotCQkJCSByZXMsIGNvbmZsaWN0LT5uYW1lLCBjb25mbGljdCk7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCQlyZXMtPmVuZCA9IGVuZDsKLQkJfSBlbHNlCi0JCQlyZXQgPSAwOwotCX0KLQotCWlmICghcmV0KSB7Ci0JCXJlcy0+ZmxhZ3MgJj0gfklPUkVTT1VSQ0VfU1RBUlRBTElHTjsKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQkFSICVkOiBhc3NpZ25lZCAlcFJcbiIsIHJlc25vLCByZXMpOwotCQlpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykKLQkJCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXNubyk7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQorc3RhdGljIGludCBwY2lfcmV2ZXJ0X2Z3X2FkZHJlc3Moc3RydWN0IHJlc291cmNlICpyZXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsIAorCQlpbnQgcmVzbm8sIHJlc291cmNlX3NpemVfdCBzaXplKQoreworCXN0cnVjdCByZXNvdXJjZSAqcm9vdCwgKmNvbmZsaWN0OworCXJlc291cmNlX3NpemVfdCBzdGFydCwgZW5kOworCWludCByZXQgPSAwOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKKwllbHNlCisJCXJvb3QgPSAmaW9tZW1fcmVzb3VyY2U7CisKKwlzdGFydCA9IHJlcy0+c3RhcnQ7CisJZW5kID0gcmVzLT5lbmQ7CisJcmVzLT5zdGFydCA9IGRldi0+ZndfYWRkcltyZXNub107CisJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgc2l6ZSAtIDE7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiQkFSICVkOiB0cnlpbmcgZmlybXdhcmUgYXNzaWdubWVudCAlcFJcbiIsCisJCSByZXNubywgcmVzKTsKKwljb25mbGljdCA9IHJlcXVlc3RfcmVzb3VyY2VfY29uZmxpY3Qocm9vdCwgcmVzKTsKKwlpZiAoY29uZmxpY3QpIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJCQVIgJWQ6ICVwUiBjb25mbGljdHMgd2l0aCAlcyAlcFJcbiIsIHJlc25vLAorCQkJIHJlcywgY29uZmxpY3QtPm5hbWUsIGNvbmZsaWN0KTsKKwkJcmVzLT5zdGFydCA9IHN0YXJ0OworCQlyZXMtPmVuZCA9IGVuZDsKKwkJcmV0ID0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sIGludCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluX2FsaWduKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwotCXJlc291cmNlX3NpemVfdCBhbGlnbjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCWludCByZXQ7CiAJY2hhciAqdHlwZTsKIAotCWFsaWduID0gcGNpX3Jlc291cmNlX2FsaWdubWVudChkZXYsIHJlcyk7Ci0JaWYgKCFhbGlnbikgewotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFzc2lnbiAlcFIgIgotCQkJICIoYm9ndXMgYWxpZ25tZW50KVxuIiwgcmVzbm8sIHJlcyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWJ1cyA9IGRldi0+YnVzOwotCXdoaWxlICgocmV0ID0gX19wY2lfYXNzaWduX3Jlc291cmNlKGJ1cywgZGV2LCByZXNubykpKSB7Ci0JCWlmIChidXMtPnBhcmVudCAmJiBidXMtPnNlbGYtPnRyYW5zcGFyZW50KQotCQkJYnVzID0gYnVzLT5wYXJlbnQ7Ci0JCWVsc2UKLQkJCWJ1cyA9IE5VTEw7Ci0JCWlmIChidXMpCi0JCQljb250aW51ZTsKLQkJYnJlYWs7CisJd2hpbGUgKChyZXQgPSBfX3BjaV9hc3NpZ25fcmVzb3VyY2UoYnVzLCBkZXYsIHJlc25vLCBzaXplLCBtaW5fYWxpZ24pKSkgeworCQlpZiAoIWJ1cy0+cGFyZW50IHx8ICFidXMtPnNlbGYtPnRyYW5zcGFyZW50KQorCQkJYnJlYWs7CisJCWJ1cyA9IGJ1cy0+cGFyZW50OwogCX0KIAogCWlmIChyZXQpIHsKQEAgLTI0Miw2ICsyMTksNjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgcGNpX3JlYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgcmVzb3VyY2Vfc2l6ZV90IGFkZHNpemUsCisJCQlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOworCXJlc291cmNlX3NpemVfdCBuZXdfc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKCFyZXMtPnBhcmVudCkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IHJlYXNzaWduIGFuIHVuYXNzaWduZWQgcmVzb3VjZSAlcFIgIgorCQkJICJcbiIsIHJlc25vLCByZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZXdfc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKSArIGFkZHNpemUgKyBtaW5fYWxpZ247CisJcmV0ID0gX3BjaV9hc3NpZ25fcmVzb3VyY2UoZGV2LCByZXNubywgbmV3X3NpemUsIG1pbl9hbGlnbik7CisJaWYgKCFyZXQpIHsKKwkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9TVEFSVEFMSUdOOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCQVIgJWQ6IGFzc2lnbmVkICVwUlxuIiwgcmVzbm8sIHJlcyk7CisJCWlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKQorCQkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIHJlc25vKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOworCXJlc291cmNlX3NpemVfdCBhbGlnbiwgc2l6ZTsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCWludCByZXQ7CisKKwlhbGlnbiA9IHBjaV9yZXNvdXJjZV9hbGlnbm1lbnQoZGV2LCByZXMpOworCWlmICghYWxpZ24pIHsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhc3NpZ24gJXBSICIKKwkJCSAiKGJvZ3VzIGFsaWdubWVudClcbiIsIHJlc25vLCByZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidXMgPSBkZXYtPmJ1czsKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCXJldCA9IF9wY2lfYXNzaWduX3Jlc291cmNlKGRldiwgcmVzbm8sIHNpemUsIGFsaWduKTsKKworCS8qCisJICogSWYgd2UgZmFpbGVkIHRvIGFzc2lnbiBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBhZGRyZXNzCisJICogd2hlcmUgZmlybXdhcmUgbGVmdCBpdC4gIFRoYXQgYXQgbGVhc3QgaGFzIGEgY2hhbmNlIG9mCisJICogd29ya2luZywgd2hpY2ggaXMgYmV0dGVyIHRoYW4ganVzdCBsZWF2aW5nIGl0IGRpc2FibGVkLgorCSAqLworCWlmIChyZXQgPCAwICYmIGRldi0+ZndfYWRkcltyZXNub10pCisJCXJldCA9IHBjaV9yZXZlcnRfZndfYWRkcmVzcyhyZXMsIGRldiwgcmVzbm8sIHNpemUpOworCisJaWYgKCFyZXQpIHsKKwkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9TVEFSVEFMSUdOOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCQVIgJWQ6IGFzc2lnbmVkICVwUlxuIiwgcmVzbm8sIHJlcyk7CisJCWlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKQorCQkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIHJlc25vKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworCiAvKiBTb3J0IHJlc291cmNlcyBieSBhbGlnbm1lbnQgKi8KIHZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKaW5kZXggNGMzZTk0Yy4uZjU2ZDdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKQEAgLTEwMywyMiArMTAzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJhbGxvb24zX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgYmFsbG9vbjNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgYmFsbG9vbjNfcGNtY2lhX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5od19pbml0CQk9IGJhbGxvb24zX3BjbWNpYV9od19pbml0LAogCS5od19zaHV0ZG93bgkJPSBiYWxsb29uM19wY21jaWFfaHdfc2h1dGRvd24sCiAJLnNvY2tldF9zdGF0ZQkJPSBiYWxsb29uM19wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gYmFsbG9vbjNfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0JLnNvY2tldF9pbml0CQk9IGJhbGxvb24zX3BjbWNpYV9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gYmFsbG9vbjNfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogCS5maXJzdAkJCT0gMCwKIAkubnIJCQk9IDEsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKaW5kZXggMDU5MTNkMC4uNjNmNGQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCkBAIC0xMDIsMjMgKzEwMiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjbXgyNTVfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCi1zdGF0aWMgdm9pZCBjbXgyNTVfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCBjbXgyNTVfcGNtY2lhX29wcyBfX2luaXRkYXRhID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmh3X2luaXQJCT0gY214MjU1X3BjbWNpYV9od19pbml0LAogCS5od19zaHV0ZG93bgkJPSBjbXgyNTVfcGNtY2lhX3NodXRkb3duLAogCS5zb2NrZXRfc3RhdGUJCT0gY214MjU1X3BjbWNpYV9zb2NrZXRfc3RhdGUsCiAJLmNvbmZpZ3VyZV9zb2NrZXQJPSBjbXgyNTVfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0JLnNvY2tldF9pbml0CQk9IGNteDI1NV9wY21jaWFfc29ja2V0X2luaXQsCi0JLnNvY2tldF9zdXNwZW5kCQk9IGNteDI1NV9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiAJLm5yCQkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKaW5kZXggNTY2MjY0Ni4uNmVlNDJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCkBAIC04MiwyMyArODIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY214MjcwX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgY214MjcwX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgY214MjcwX3BjbWNpYV9vcHMgX19pbml0ZGF0YSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5od19pbml0CQk9IGNteDI3MF9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gY214MjcwX3BjbWNpYV9zaHV0ZG93biwKIAkuc29ja2V0X3N0YXRlCQk9IGNteDI3MF9wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gY214MjcwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCS5zb2NrZXRfaW5pdAkJPSBjbXgyNzBfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBjbXgyNzBfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogCS5ucgkJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jCmluZGV4IDQ0M2NiN2YuLmM2ZGVjNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwpAQCAtMTE2LDE0ICsxMTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjb2xpYnJpX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgY29saWJyaV9wY21jaWFfc29ja2V0X3N1c3BlbmQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCi17Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCBjb2xpYnJpX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIApAQCAtMTM1LDkgKzEyNyw2IEBACiAKIAkuc29ja2V0X3N0YXRlCQk9IGNvbGlicmlfcGNtY2lhX3NvY2tldF9zdGF0ZSwKIAkuY29uZmlndXJlX3NvY2tldAk9IGNvbGlicmlfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0KLQkuc29ja2V0X2luaXQJCT0gY29saWJyaV9wY21jaWFfc29ja2V0X2luaXQsCi0JLnNvY2tldF9zdXNwZW5kCQk9IGNvbGlicmlfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfcGNtY2lhX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwppbmRleCA5MjAxNmZlLi5hZGVkNzA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwpAQCAtMTI4LDIyICsxMjgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtc3RfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCi1zdGF0aWMgdm9pZCBtc3RfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgbXN0X3BjbWNpYV9vcHMgX19pbml0ZGF0YSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5od19pbml0CQk9IG1zdF9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gbXN0X3BjbWNpYV9od19zaHV0ZG93biwKIAkuc29ja2V0X3N0YXRlCQk9IG1zdF9wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gbXN0X3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCS5zb2NrZXRfaW5pdAkJPSBtc3RfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBtc3RfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogCS5ucgkJCT0gMiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYwppbmRleCA2OWY3MzY3Li5kNTg5YWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbWxkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jCkBAIC02NSwxNCArNjUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwYWxtbGRfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbWxkX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIApAQCAtODQsOSArNzYsNiBAQAogCiAJLnNvY2tldF9zdGF0ZQkJPSBwYWxtbGRfcGNtY2lhX3NvY2tldF9zdGF0ZSwKIAkuY29uZmlndXJlX3NvY2tldAk9IHBhbG1sZF9wY21jaWFfY29uZmlndXJlX3NvY2tldCwKLQotCS5zb2NrZXRfaW5pdAkJPSBwYWxtbGRfcGNtY2lhX3NvY2tldF9pbml0LAotCS5zb2NrZXRfc3VzcGVuZAkJPSBwYWxtbGRfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhbG1sZF9wY21jaWFfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCmluZGV4IGQwYWQ2YTcuLjljNmEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXRjLmMKQEAgLTExNywxNCArMTE3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQotewotfQotCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbXRjX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIApAQCAtMTM2LDkgKzEyOCw2IEBACiAKIAkuc29ja2V0X3N0YXRlCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlLAogCS5jb25maWd1cmVfc29ja2V0CT0gcGFsbXRjX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCi0JLnNvY2tldF9pbml0CQk9IHBhbG10Y19wY21jaWFfc29ja2V0X2luaXQsCi0JLnNvY2tldF9zdXNwZW5kCQk9IHBhbG10Y19wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFsbXRjX3BjbWNpYV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXR4LmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbXR4LmMKaW5kZXggMWEyNTgwNC4uODA2NDVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10eC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdHguYwpAQCAtNjcsMTQgKzY3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHBhbG10eF9wY21jaWFfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAKQEAgLTg2LDkgKzc4LDYgQEAKIAogCS5zb2NrZXRfc3RhdGUJCT0gcGFsbXR4X3BjbWNpYV9zb2NrZXRfc3RhdGUsCiAJLmNvbmZpZ3VyZV9zb2NrZXQJPSBwYWxtdHhfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCi0KLQkuc29ja2V0X2luaXQJCT0gcGFsbXR4X3BjbWNpYV9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gcGFsbXR4X3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwYWxtdHhfcGNtY2lhX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zdGFyZ2F0ZTIuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9zdGFyZ2F0ZTIuYwppbmRleCBkMDg4MDJmLi45Mzk2MjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfc3RhcmdhdGUyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3N0YXJnYXRlMi5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKLSNkZWZpbmUgU0cyX1MwX0JVRkZfQ1RMCQkxMjAKICNkZWZpbmUgU0cyX1MwX1BPV0VSX0NUTAkxMDgKICNkZWZpbmUgU0cyX1MwX0dQSU9fUkVTRVQJODIKICNkZWZpbmUgU0cyX1MwX0dQSU9fREVURUNUCTUzCkBAIC0zOCw2ICszNywxMSBAQAogCXsgMCwgSVJRX0dQSU8oU0cyX1MwX0dQSU9fREVURUNUKSwgIlBDTUNJQTAgQ0QiIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IGdwaW8gc2cyX3BjbWNpYV9ncGlvc1tdID0geworCXsgU0cyX1MwX0dQSU9fUkVTRVQsIEdQSU9GX09VVF9JTklUX0hJR0gsICJQQ01DSUEgUmVzZXQiIH0sCisJeyBTRzJfUzBfUE9XRVJfQ1RMLCBHUElPRl9PVVRfSU5JVF9ISUdILCAiUENNQ0lBIFBvd2VyIEN0cmwiIH0sCit9OworCiBzdGF0aWMgaW50IHNnMl9wY21jaWFfaHdfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlza3QtPnNvY2tldC5wY2lfaXJxID0gSVJRX0dQSU8oU0cyX1MwX0dQSU9fUkVBRFkpOwpAQCAtMTIyLDM3ICsxMjYsMjMgQEAKIAlpZiAoIXNnMl9wY21jaWFfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChTRzJfUzBfQlVGRl9DVEwsICJTRzIgQ0YgYnVmZiBjdGwiKTsKKwlyZXQgPSBncGlvX3JlcXVlc3RfYXJyYXkoc2cyX3BjbWNpYV9ncGlvcywgQVJSQVlfU0laRShzZzJfcGNtY2lhX2dwaW9zKSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9wdXRfcGxhdGZvcm1fZGV2aWNlOwotCXJldCA9IGdwaW9fcmVxdWVzdChTRzJfUzBfUE9XRVJfQ1RMLCAiU0cyIENGIHBvd2VyIGN0bCIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfZnJlZV9ncGlvX2J1ZmZfY3RsOwotCXJldCA9IGdwaW9fcmVxdWVzdChTRzJfUzBfR1BJT19SRVNFVCwgIlNHMiBDRiByZXNldCIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfZnJlZV9ncGlvX3Bvd2VyX2N0bDsKLQkvKiBTZXQgZ3BpbyBkaXJlY3Rpb25zICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNHMl9TMF9CVUZGX0NUTCwgMCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNHMl9TMF9QT1dFUl9DVEwsIDEpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChTRzJfUzBfR1BJT19SRVNFVCwgMSk7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEoc2cyX3BjbWNpYV9kZXZpY2UsCiAJCQkJICAgICAgICZzZzJfcGNtY2lhX29wcywKIAkJCQkgICAgICAgc2l6ZW9mKHNnMl9wY21jaWFfb3BzKSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9mcmVlX2dwaW9fcmVzZXQ7CisJCWdvdG8gZXJyb3JfZnJlZV9ncGlvczsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc2cyX3BjbWNpYV9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyb3JfZnJlZV9ncGlvX3Jlc2V0OworCQlnb3RvIGVycm9yX2ZyZWVfZ3Bpb3M7CiAKIAlyZXR1cm4gMDsKLWVycm9yX2ZyZWVfZ3Bpb19yZXNldDoKLQlncGlvX2ZyZWUoU0cyX1MwX0dQSU9fUkVTRVQpOwotZXJyb3JfZnJlZV9ncGlvX3Bvd2VyX2N0bDoKLQlncGlvX2ZyZWUoU0cyX1MwX1BPV0VSX0NUTCk7Ci1lcnJvcl9mcmVlX2dwaW9fYnVmZl9jdGw6Ci0JZ3Bpb19mcmVlKFNHMl9TMF9CVUZGX0NUTCk7CitlcnJvcl9mcmVlX2dwaW9zOgorCWdwaW9fZnJlZV9hcnJheShzZzJfcGNtY2lhX2dwaW9zLCBBUlJBWV9TSVpFKHNnMl9wY21jaWFfZ3Bpb3MpKTsKIGVycm9yX3B1dF9wbGF0Zm9ybV9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChzZzJfcGNtY2lhX2RldmljZSk7CiAKQEAgLTE2Miw5ICsxNTIsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNnMl9wY21jaWFfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNnMl9wY21jaWFfZGV2aWNlKTsKLQlncGlvX2ZyZWUoU0cyX1MwX0JVRkZfQ1RMKTsKLQlncGlvX2ZyZWUoU0cyX1MwX1BPV0VSX0NUTCk7Ci0JZ3Bpb19mcmVlKFNHMl9TMF9HUElPX1JFU0VUKTsKKwlncGlvX2ZyZWVfYXJyYXkoc2cyX3BjbWNpYV9ncGlvcywgQVJSQVlfU0laRShzZzJfcGNtY2lhX2dwaW9zKSk7CiB9CiAKIGZzX2luaXRjYWxsKHNnMl9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdmlwZXIuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jCmluZGV4IGE1MWYyMDcuLjEwNjRiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jCkBAIC0xMzYsMjIgKzEzNiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB2aXBlcl9wY21jaWFfc29ja2V0X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHZpcGVyX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHZpcGVyX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyICAgICAgICAgIAk9IFRISVNfTU9EVUxFLAogCS5od19pbml0ICAgICAgICAJPSB2aXBlcl9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gdmlwZXJfcGNtY2lhX2h3X3NodXRkb3duLAogCS5zb2NrZXRfc3RhdGUJCT0gdmlwZXJfcGNtY2lhX3NvY2tldF9zdGF0ZSwKIAkuY29uZmlndXJlX3NvY2tldAk9IHZpcGVyX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCS5zb2NrZXRfaW5pdAkJPSB2aXBlcl9wY21jaWFfc29ja2V0X2luaXQsCi0JLnNvY2tldF9zdXNwZW5kCQk9IHZpcGVyX3BjbWNpYV9zb2NrZXRfc3VzcGVuZCwKIAkubnIgICAgICAgICAJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCA3NjhmOTU3Li5hMGE5YzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC0xODYsOCArMTg2LDggQEAKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCA9IHRvX3NvY19wY21jaWFfc29ja2V0KHNvY2spOwogCiAJZGVidWcoc2t0LCAyLCAiaW5pdGlhbGl6aW5nIHNvY2tldFxuIik7Ci0KLQlza3QtPm9wcy0+c29ja2V0X2luaXQoc2t0KTsKKwlpZiAoc2t0LT5vcHMtPnNvY2tldF9pbml0KQorCQlza3QtPm9wcy0+c29ja2V0X2luaXQoc2t0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA3LDcgKzIwNyw4IEBACiAKIAlkZWJ1Zyhza3QsIDIsICJzdXNwZW5kaW5nIHNvY2tldFxuIik7CiAKLQlza3QtPm9wcy0+c29ja2V0X3N1c3BlbmQoc2t0KTsKKwlpZiAoc2t0LT5vcHMtPnNvY2tldF9zdXNwZW5kKQorCQlza3QtPm9wcy0+c29ja2V0X3N1c3BlbmQoc2t0KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggNDVlMDE5MS4uMWU4OGQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC03NjksNCArNzY5LDEyIEBACiAJICBlbmFibGUvZGlzYWJsZSB0aGUgQ2FtZXJhLCBXaUZpLCBCVCBldGMuIGRldmljZXMuIElmIGluIGRvdWJ0LCBzYXkgWQogCSAgaGVyZTsgaXQgd2lsbCBvbmx5IGxvYWQgb24gc3VwcG9ydGVkIHBsYXRmb3Jtcy4KIAorY29uZmlnIFNBTVNVTkdfUTEwCisJdHJpc3RhdGUgIlNhbXN1bmcgUTEwIEV4dHJhcyIKKwlkZXBlbmRzIG9uIFNFUklPX0k4MDQyCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBiYWNrbGlnaHQgY29udHJvbCBvbiBTYW1zdW5nIFExMAorCSAgYW5kIHJlbGF0ZWQgbGFwdG9wcywgaW5jbHVkaW5nIERlbGwgTGF0aXR1ZGUgWDIwMC4KKwogZW5kaWYgIyBYODZfUExBVEZPUk1fREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQppbmRleCBhZmMxZjgzLi4yOTNhMzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9NYWtlZmlsZQpAQCAtNDQsMyArNDQsNCBAQAogb2JqLSQoQ09ORklHX01YTV9XTUkpCQkrPSBteG0td21pLm8KIG9iai0kKENPTkZJR19JTlRFTF9NSURfUE9XRVJfQlVUVE9OKQkrPSBpbnRlbF9taWRfcG93ZXJidG4ubwogb2JqLSQoQ09ORklHX0lOVEVMX09BS1RSQUlMKQkrPSBpbnRlbF9vYWt0cmFpbC5vCitvYmotJChDT05GSUdfU0FNU1VOR19RMTApCSs9IHNhbXN1bmctcTEwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCmluZGV4IGUxYzQ5MzguLmFmMmJiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwpAQCAtOTksNiArOTksNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlfZW50cnkgYWNlcl93bWlfa2V5bWFwW10gPSB7CiAJe0tFX0tFWSwgMHgwMSwge0tFWV9XTEFOfSB9LCAgICAgLyogV2lGaSAqLwogCXtLRV9LRVksIDB4MDMsIHtLRVlfV0xBTn0gfSwgICAgIC8qIFdpRmkgKi8KKwl7S0VfS0VZLCAweDA0LCB7S0VZX1dMQU59IH0sICAgICAvKiBXaUZpICovCiAJe0tFX0tFWSwgMHgxMiwge0tFWV9CTFVFVE9PVEh9IH0sCS8qIEJUICovCiAJe0tFX0tFWSwgMHgyMSwge0tFWV9QUk9HMX0gfSwgICAgLyogQmFja3VwICovCiAJe0tFX0tFWSwgMHgyMiwge0tFWV9QUk9HMn0gfSwgICAgLyogQXJjYWRlICovCkBAIC0zMDQsNiArMzA1LDEwIEBACiAJLndpcmVsZXNzID0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcXVpcmtfZW50cnkgcXVpcmtfbGVub3ZvX2lkZWFwYWRfczIwNSA9IHsKKwkud2lyZWxlc3MgPSAzLAorfTsKKwogLyogVGhlIEFzcGlyZSBPbmUgaGFzIGEgZHVtbXkgQUNQSS1XTUkgaW50ZXJmYWNlIC0gZGlzYWJsZSBpdCAqLwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgYWNlcl9ibGFja2xpc3RbXSA9IHsKIAl7CkBAIC00NTAsNiArNDU1LDE1IEBACiAJCX0sCiAJCS5kcml2ZXJfZGF0YSA9ICZxdWlya19tZWRpb25fbWRfOTgzMDAsCiAJfSwKKwl7CisJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTGVub3ZvIElkZWFwYWQgUzIwNSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTEVOT1ZPIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIjEwMzgyTEciKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0gJnF1aXJrX2xlbm92b19pZGVhcGFkX3MyMDUsCisJfSwKIAl7fQogfTsKIApAQCAtNTQyLDYgKzU1NiwxMiBAQAogCQkJCXJldHVybiBBRV9FUlJPUjsKIAkJCSp2YWx1ZSA9IHJlc3VsdCAmIDB4MTsKIAkJCXJldHVybiBBRV9PSzsKKwkJY2FzZSAzOgorCQkJZXJyID0gZWNfcmVhZCgweDc4LCAmcmVzdWx0KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIEFFX0VSUk9SOworCQkJKnZhbHVlID0gcmVzdWx0ICYgMHgxOworCQkJcmV0dXJuIEFFX09LOwogCQlkZWZhdWx0OgogCQkJZXJyID0gZWNfcmVhZCgweEEsICZyZXN1bHQpOwogCQkJaWYgKGVycikKQEAgLTEyNjYsOCArMTI4NiwxMyBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCXN0YXR1cyA9IGdldF91MzIoJnN0YXRlLCBBQ0VSX0NBUF9XSVJFTEVTUyk7Ci0JaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlyZmtpbGxfc2V0X3N3X3N0YXRlKHdpcmVsZXNzX3Jma2lsbCwgIXN0YXRlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJaWYgKHF1aXJrcy0+d2lyZWxlc3MgPT0gMykgeworCQkJcmZraWxsX3NldF9od19zdGF0ZSh3aXJlbGVzc19yZmtpbGwsICFzdGF0ZSk7CisJCX0gZWxzZSB7CisJCQlyZmtpbGxfc2V0X3N3X3N0YXRlKHdpcmVsZXNzX3Jma2lsbCwgIXN0YXRlKTsKKwkJfQorCX0KIAogCWlmIChoYXNfY2FwKEFDRVJfQ0FQX0JMVUVUT09USCkpIHsKIAkJc3RhdHVzID0gZ2V0X3UzMigmc3RhdGUsIEFDRVJfQ0FQX0JMVUVUT09USCk7CkBAIC0xNDAwLDYgKzE0MjUsOSBAQAogewogCXUzMiByZXN1bHQ7IFwKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlwcl9pbmZvKCJUaGlzIHRocmVlZyBzeXNmcyB3aWxsIGJlIHJlbW92ZWQgaW4gMjAxMiIKKwkJIiAtIHVzZWQgYnk6ICVzXG4iLCBjdXJyZW50LT5jb21tKTsKIAlpZiAod21pX2hhc19ndWlkKFdNSURfR1VJRDMpKQogCQlzdGF0dXMgPSB3bWlkM19nZXRfZGV2aWNlX3N0YXR1cygmcmVzdWx0LAogCQkJCUFDRVJfV01JRDNfR0RTX1RIUkVFRyk7CkBAIC0xNDE1LDggKzE0NDMsMTAgQEAKIHsKIAl1MzIgdG1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gc2V0X3UzMih0bXAsIEFDRVJfQ0FQX1RIUkVFRyk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXJldHVybiAtRUlOVkFMOworCXByX2luZm8oIlRoaXMgdGhyZWVnIHN5c2ZzIHdpbGwgYmUgcmVtb3ZlZCBpbiAyMDEyIgorCQkiIC0gdXNlZCBieTogJXNcbiIsIGN1cnJlbnQtPmNvbW0pOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCkBAIC0xNDI1LDYgKzE0NTUsOCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljaGFyICpidWYpCiB7CisJcHJfaW5mbygiVGhpcyBpbnRlcmZhY2Ugc3lzZnMgd2lsbCBiZSByZW1vdmVkIGluIDIwMTIiCisJCSIgLSB1c2VkIGJ5OiAlc1xuIiwgY3VycmVudC0+Y29tbSk7CiAJc3dpdGNoIChpbnRlcmZhY2UtPnR5cGUpIHsKIAljYXNlIEFDRVJfQU1XMDoKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiQU1XMFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKaW5kZXggZmNhMzQ4OS4uNzYwYzZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlcmhkZi5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXJoZGYuYwpAQCAtMTgyLDYgKzE4Miw3IEBACiAJeyJBY2VyIiwgIkFzcGlyZSAxODEwVCIsICAidjEuMzMwOCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAogCXsiQWNlciIsICJBc3BpcmUgMTgxMFRaIiwgInYxLjMzMTAiLCAweDU1LCAweDU4LCB7MHg5ZSwgMHgwMH0gfSwKIAl7IkFjZXIiLCAiQXNwaXJlIDE4MTBUIiwgICJ2MS4zMzEwIiwgMHg1NSwgMHg1OCwgezB4OWUsIDB4MDB9IH0sCisJeyJBY2VyIiwgIkFzcGlyZSAxODEwVFoiLCAidjEuMzMxNCIsIDB4NTUsIDB4NTgsIHsweDllLCAweDAwfSB9LAogCS8qIEFjZXIgNTMxICovCiAJeyJBY2VyIiwgIkFPNTMxaCIsICJ2MC4zMjAxIiwgMHg1NSwgMHg1OCwgezB4MjAsIDB4MDB9IH0sCiAJLyogR2F0ZXdheSAqLwpAQCAtNzAzLDE1ICs3MDQsMTUgQEAKIE1PRFVMRV9BVVRIT1IoIlBldGVyIEZldWVyZXIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXNwaXJlIE9uZSB0ZW1wZXJhdHVyZSBhbmQgZmFuIGRyaXZlciIpOwogTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5BT0EqOiIpOwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5Bc3BpcmUgMTQxMCo6Iik7Ci1NT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFzcGlyZSAxODEwKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KkFjZXIqOnBuQXNwaXJlKjE0MTAqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqQWNlcio6cG5Bc3BpcmUqMTgxMCo6Iik7CiBNT0RVTEVfQUxJQVMoImRtaToqOipBY2VyKjpwbkFPNTMxKjoiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuQU9BKjoiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6KkdhdGV3YXkqOnBuTFQzMSo6Iik7Ci1NT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkIEJlbGwqOnBuQU9BKjoiKTsKLU1PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5ET0EqOiIpOwotTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCBCZWxsKjpwbkRPVE1VKjoiKTsKLU1PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQgQmVsbCo6cG5ET1RNQSo6Iik7CitNT0RVTEVfQUxJQVMoImRtaToqOipQYWNrYXJkKkJlbGwqOnBuQU9BKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQqQmVsbCo6cG5ET0EqOiIpOworTU9EVUxFX0FMSUFTKCJkbWk6KjoqUGFja2FyZCpCZWxsKjpwbkRPVE1VKjoiKTsKK01PRFVMRV9BTElBUygiZG1pOio6KlBhY2thcmQqQmVsbCo6cG5ET1RNQSo6Iik7CiAKIG1vZHVsZV9pbml0KGFjZXJoZGZfaW5pdCk7CiBtb2R1bGVfZXhpdChhY2VyaGRmX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggZDY1ZGY5Mi4uZmE2ZDdlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC03MCwxMSArNzAsMTAgQEAKICAqIFdBUEYgZGVmaW5lcyB0aGUgYmVoYXZpb3Igb2YgdGhlIEZuK0Z4IHdsYW4ga2V5CiAgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIHZhbHVlcyBpcyB5ZXQgdG8gYmUgZm91bmQsIGJ1dAogICogbW9zdCBvZiB0aGUgdGltZToKLSAqIDB4MCB3aWxsIGRvIG5vdGhpbmcKLSAqIDB4MSB3aWxsIGFsbG93IHRvIGNvbnRyb2wgdGhlIGRldmljZSB3aXRoIEZuK0Z4IGtleS4KLSAqIDB4NCB3aWxsIHNlbmQgYW4gQUNQSSBldmVudCAoMHg4OCkgd2hpbGUgcHJlc3NpbmcgdGhlIEZuK0Z4IGtleQotICogMHg1IGxpa2UgMHgxIG9yIDB4NAotICogU28sIGlmIHNvbWV0aGluZyBkb2Vzbid0IHdvcmsgYXMgeW91IHdhbnQsIGp1c3QgdHJ5IG90aGVyIHZhbHVlcyA9KQorICogQml0IHwgQmx1ZXRvb3RoIHwgV0xBTgorICogIDAgIHwgSGFyZHdhcmUgIHwgSGFyZHdhcmUKKyAqICAxICB8IEhhcmR3YXJlICB8IFNvZnR3YXJlCisgKiAgNCAgfCBTb2Z0d2FyZSAgfCBTb2Z0d2FyZQogICovCiBzdGF0aWMgdWludCB3YXBmID0gMTsKIG1vZHVsZV9wYXJhbSh3YXBmLCB1aW50LCAwNDQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbmItd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLW5iLXdtaS5jCmluZGV4IDA1ODBkOTkuLmIwODU5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbmItd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1uYi13bWkuYwpAQCAtMzgsNiArMzgsMjQgQEAKIAogTU9EVUxFX0FMSUFTKCJ3bWk6IkFTVVNfTkJfV01JX0VWRU5UX0dVSUQpOwogCisvKgorICogV0FQRiBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgRm4rRnggd2xhbiBrZXkKKyAqIFRoZSBzaWduaWZpY2FuY2Ugb2YgdmFsdWVzIGlzIHlldCB0byBiZSBmb3VuZCwgYnV0CisgKiBtb3N0IG9mIHRoZSB0aW1lOgorICogQml0IHwgQmx1ZXRvb3RoIHwgV0xBTgorICogIDAgIHwgSGFyZHdhcmUgIHwgSGFyZHdhcmUKKyAqICAxICB8IEhhcmR3YXJlICB8IFNvZnR3YXJlCisgKiAgNCAgfCBTb2Z0d2FyZSAgfCBTb2Z0d2FyZQorICovCitzdGF0aWMgdWludCB3YXBmOworbW9kdWxlX3BhcmFtKHdhcGYsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh3YXBmLCAiV0FQRiB2YWx1ZSIpOworCitzdGF0aWMgdm9pZCBhc3VzX25iX3dtaV9xdWlya3Moc3RydWN0IGFzdXNfd21pX2RyaXZlciAqZHJpdmVyKQoreworCWRyaXZlci0+d2FwZiA9IHdhcGY7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5X2VudHJ5IGFzdXNfbmJfd21pX2tleW1hcFtdID0gewogCXsgS0VfS0VZLCAweDMwLCB7IEtFWV9WT0xVTUVVUCB9IH0sCiAJeyBLRV9LRVksIDB4MzEsIHsgS0VZX1ZPTFVNRURPV04gfSB9LApAQCAtNTMsMTYgKzcxLDE2IEBACiAJeyBLRV9LRVksIDB4NTEsIHsgS0VZX1dXVyB9IH0sCiAJeyBLRV9LRVksIDB4NTUsIHsgS0VZX0NBTEMgfSB9LAogCXsgS0VfS0VZLCAweDVDLCB7IEtFWV9GMTUgfSB9LCAgLyogUG93ZXIgR2VhciBrZXkgKi8KLQl7IEtFX0tFWSwgMHg1RCwgeyBLRVlfV0xBTiB9IH0sCi0JeyBLRV9LRVksIDB4NUUsIHsgS0VZX1dMQU4gfSB9LAotCXsgS0VfS0VZLCAweDVGLCB7IEtFWV9XTEFOIH0gfSwKKwl7IEtFX0tFWSwgMHg1RCwgeyBLRVlfV0xBTiB9IH0sIC8qIFdpcmVsZXNzIGNvbnNvbGUgVG9nZ2xlICovCisJeyBLRV9LRVksIDB4NUUsIHsgS0VZX1dMQU4gfSB9LCAvKiBXaXJlbGVzcyBjb25zb2xlIEVuYWJsZSAqLworCXsgS0VfS0VZLCAweDVGLCB7IEtFWV9XTEFOIH0gfSwgLyogV2lyZWxlc3MgY29uc29sZSBEaXNhYmxlICovCiAJeyBLRV9LRVksIDB4NjAsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCiAJeyBLRV9LRVksIDB4NjEsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCiAJeyBLRV9LRVksIDB4NjIsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCiAJeyBLRV9LRVksIDB4NjMsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCiAJeyBLRV9LRVksIDB4NkIsIHsgS0VZX1RPVUNIUEFEX1RPR0dMRSB9IH0sCi0JeyBLRV9LRVksIDB4N0UsIHsgS0VZX0JMVUVUT09USCB9IH0sCiAJeyBLRV9LRVksIDB4N0QsIHsgS0VZX0JMVUVUT09USCB9IH0sCisJeyBLRV9LRVksIDB4N0UsIHsgS0VZX0JMVUVUT09USCB9IH0sCiAJeyBLRV9LRVksIDB4ODIsIHsgS0VZX0NBTUVSQSB9IH0sCiAJeyBLRV9LRVksIDB4ODgsIHsgS0VZX1JGS0lMTCAgfSB9LAogCXsgS0VfS0VZLCAweDhBLCB7IEtFWV9QUk9HMSB9IH0sCkBAIC04MSw2ICs5OSw3IEBACiAJLmtleW1hcCA9IGFzdXNfbmJfd21pX2tleW1hcCwKIAkuaW5wdXRfbmFtZSA9ICJBc3VzIFdNSSBob3RrZXlzIiwKIAkuaW5wdXRfcGh5cyA9IEFTVVNfTkJfV01JX0ZJTEUgIi9pbnB1dDAiLAorCS5xdWlya3MgPSBhc3VzX25iX3dtaV9xdWlya3MsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5jCmluZGV4IDY1YjY2YWEuLjk1Y2JhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RoZXJtYWwuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIApAQCAtNjYsNiArNjcsOCBAQAogI2RlZmluZSBOT1RJRllfQlJOVVBfTUFYCQkweDFmCiAjZGVmaW5lIE5PVElGWV9CUk5ET1dOX01JTgkJMHgyMAogI2RlZmluZSBOT1RJRllfQlJORE9XTl9NQVgJCTB4MmUKKyNkZWZpbmUgTk9USUZZX0tCRF9CUlRVUAkJMHhjNAorI2RlZmluZSBOT1RJRllfS0JEX0JSVERXTgkJMHhjNQogCiAvKiBXTUkgTWV0aG9kcyAqLwogI2RlZmluZSBBU1VTX1dNSV9NRVRIT0RJRF9TUEVDCSAgICAgICAgMHg0MzQ1NTA1MyAvKiBCSU9TIFNQRUNpZmljYXRpb24gKi8KQEAgLTkzLDYgKzk2LDcgQEAKIC8qIFdpcmVsZXNzICovCiAjZGVmaW5lIEFTVVNfV01JX0RFVklEX0hXX1NXSVRDSAkweDAwMDEwMDAxCiAjZGVmaW5lIEFTVVNfV01JX0RFVklEX1dJUkVMRVNTX0xFRAkweDAwMDEwMDAyCisjZGVmaW5lIEFTVVNfV01JX0RFVklEX0NXQVAJCTB4MDAwMTAwMDMKICNkZWZpbmUgQVNVU19XTUlfREVWSURfV0xBTgkJMHgwMDAxMDAxMQogI2RlZmluZSBBU1VTX1dNSV9ERVZJRF9CTFVFVE9PVEgJMHgwMDAxMDAxMwogI2RlZmluZSBBU1VTX1dNSV9ERVZJRF9HUFMJCTB4MDAwMTAwMTUKQEAgLTEwMiw2ICsxMDYsMTIgQEAKIAogLyogTGVkcyAqLwogLyogMHgwMDAyMDBYWCBhbmQgMHgwMDA0MDBYWCAqLworI2RlZmluZSBBU1VTX1dNSV9ERVZJRF9MRUQxCQkweDAwMDIwMDExCisjZGVmaW5lIEFTVVNfV01JX0RFVklEX0xFRDIJCTB4MDAwMjAwMTIKKyNkZWZpbmUgQVNVU19XTUlfREVWSURfTEVEMwkJMHgwMDAyMDAxMworI2RlZmluZSBBU1VTX1dNSV9ERVZJRF9MRUQ0CQkweDAwMDIwMDE0CisjZGVmaW5lIEFTVVNfV01JX0RFVklEX0xFRDUJCTB4MDAwMjAwMTUKKyNkZWZpbmUgQVNVU19XTUlfREVWSURfTEVENgkJMHgwMDAyMDAxNgogCiAvKiBCYWNrbGlnaHQgYW5kIEJyaWdodG5lc3MgKi8KICNkZWZpbmUgQVNVU19XTUlfREVWSURfQkFDS0xJR0hUCTB4MDAwNTAwMTEKQEAgLTE3NCwxMyArMTg0LDE4IEBACiAKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2IHRwZF9sZWQ7CiAJaW50IHRwZF9sZWRfd2s7CisJc3RydWN0IGxlZF9jbGFzc2RldiBrYmRfbGVkOworCWludCBrYmRfbGVkX3drOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRfd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0cGRfbGVkX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGtiZF9sZWRfd29yazsKIAogCXN0cnVjdCBhc3VzX3Jma2lsbCB3bGFuOwogCXN0cnVjdCBhc3VzX3Jma2lsbCBibHVldG9vdGg7CiAJc3RydWN0IGFzdXNfcmZraWxsIHdpbWF4OwogCXN0cnVjdCBhc3VzX3Jma2lsbCB3d2FuM2c7CisJc3RydWN0IGFzdXNfcmZraWxsIGdwczsKKwlzdHJ1Y3QgYXN1c19yZmtpbGwgdXdiOwogCiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBtdXRleCBob3RwbHVnX2xvY2s7CkBAIC0yMDUsNiArMjIwLDcgQEAKIAlhc3VzLT5pbnB1dGRldi0+cGh5cyA9IGFzdXMtPmRyaXZlci0+aW5wdXRfcGh5czsKIAlhc3VzLT5pbnB1dGRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwogCWFzdXMtPmlucHV0ZGV2LT5kZXYucGFyZW50ID0gJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2OworCXNldF9iaXQoRVZfUkVQLCBhc3VzLT5pbnB1dGRldi0+ZXZiaXQpOwogCiAJZXJyID0gc3BhcnNlX2tleW1hcF9zZXR1cChhc3VzLT5pbnB1dGRldiwgYXN1cy0+ZHJpdmVyLT5rZXltYXAsIE5VTEwpOwogCWlmIChlcnIpCkBAIC0zNTksMzAgKzM3NSw4MCBAQAogCXJldHVybiByZWFkX3RwZF9sZWRfc3RhdGUoYXN1cyk7CiB9CiAKLXN0YXRpYyBpbnQgYXN1c193bWlfbGVkX2luaXQoc3RydWN0IGFzdXNfd21pICphc3VzKQorc3RhdGljIHZvaWQga2JkX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBydjsKKwlpbnQgY3RybF9wYXJhbSA9IDA7CisJc3RydWN0IGFzdXNfd21pICphc3VzOwogCi0JaWYgKHJlYWRfdHBkX2xlZF9zdGF0ZShhc3VzKSA8IDApCi0JCXJldHVybiAwOworCWFzdXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzdXNfd21pLCBrYmRfbGVkX3dvcmspOwogCi0JYXN1cy0+bGVkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJsZWRfd29ya3F1ZXVlIik7Ci0JaWYgKCFhc3VzLT5sZWRfd29ya3F1ZXVlKQotCQlyZXR1cm4gLUVOT01FTTsKLQlJTklUX1dPUksoJmFzdXMtPnRwZF9sZWRfd29yaywgdHBkX2xlZF91cGRhdGUpOworCS8qCisJICogYml0cyAwLTI6IGxldmVsCisJICogYml0IDc6IGxpZ2h0IG9uL29mZgorCSAqLworCWlmIChhc3VzLT5rYmRfbGVkX3drID4gMCkKKwkJY3RybF9wYXJhbSA9IDB4ODAgfCAoYXN1cy0+a2JkX2xlZF93ayAmIDB4N0YpOwogCi0JYXN1cy0+dHBkX2xlZC5uYW1lID0gImFzdXM6OnRvdWNocGFkIjsKLQlhc3VzLT50cGRfbGVkLmJyaWdodG5lc3Nfc2V0ID0gdHBkX2xlZF9zZXQ7Ci0JYXN1cy0+dHBkX2xlZC5icmlnaHRuZXNzX2dldCA9IHRwZF9sZWRfZ2V0OwotCWFzdXMtPnRwZF9sZWQubWF4X2JyaWdodG5lc3MgPSAxOworCWFzdXNfd21pX3NldF9kZXZzdGF0ZShBU1VTX1dNSV9ERVZJRF9LQkRfQkFDS0xJR0hULCBjdHJsX3BhcmFtLCBOVUxMKTsKK30KIAotCXJ2ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZhc3VzLT5wbGF0Zm9ybV9kZXZpY2UtPmRldiwgJmFzdXMtPnRwZF9sZWQpOwotCWlmIChydikgewotCQlkZXN0cm95X3dvcmtxdWV1ZShhc3VzLT5sZWRfd29ya3F1ZXVlKTsKLQkJcmV0dXJuIHJ2Oworc3RhdGljIGludCBrYmRfbGVkX3JlYWQoc3RydWN0IGFzdXNfd21pICphc3VzLCBpbnQgKmxldmVsLCBpbnQgKmVudikKK3sKKwlpbnQgcmV0dmFsOworCisJLyoKKwkgKiBiaXRzIDAtMjogbGV2ZWwKKwkgKiBiaXQgNzogbGlnaHQgb24vb2ZmCisJICogYml0IDgtMTA6IGVudmlyb25tZW50ICgwOiBkYXJrLCAxOiBub3JtYWwsIDI6IGxpZ2h0KQorCSAqIGJpdCAxNzogc3RhdHVzIHVua25vd24KKwkgKi8KKwlyZXR2YWwgPSBhc3VzX3dtaV9nZXRfZGV2c3RhdGVfYml0cyhhc3VzLCBBU1VTX1dNSV9ERVZJRF9LQkRfQkFDS0xJR0hULAorCQkJCQkgICAgMHhGRkZGKTsKKworCS8qIFVua25vd24gc3RhdHVzIGlzIGNvbnNpZGVyZWQgYXMgb2ZmICovCisJaWYgKHJldHZhbCA9PSAweDgwMDApCisJCXJldHZhbCA9IDA7CisKKwlpZiAocmV0dmFsID49IDApIHsKKwkJaWYgKGxldmVsKQorCQkJKmxldmVsID0gcmV0dmFsICYgMHg4MCA/IHJldHZhbCAmIDB4N0YgOiAwOworCQlpZiAoZW52KQorCQkJKmVudiA9IChyZXR2YWwgPj4gOCkgJiAweDdGOworCQlyZXR2YWwgPSAwOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGtiZF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXN1c193bWkgKmFzdXM7CisKKwlhc3VzID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYXN1c193bWksIGtiZF9sZWQpOworCisJaWYgKHZhbHVlID4gYXN1cy0+a2JkX2xlZC5tYXhfYnJpZ2h0bmVzcykKKwkJdmFsdWUgPSBhc3VzLT5rYmRfbGVkLm1heF9icmlnaHRuZXNzOworCWVsc2UgaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCisJYXN1cy0+a2JkX2xlZF93ayA9IHZhbHVlOworCXF1ZXVlX3dvcmsoYXN1cy0+bGVkX3dvcmtxdWV1ZSwgJmFzdXMtPmtiZF9sZWRfd29yayk7Cit9CisKK3N0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIGtiZF9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQoreworCXN0cnVjdCBhc3VzX3dtaSAqYXN1czsKKwlpbnQgcmV0dmFsLCB2YWx1ZTsKKworCWFzdXMgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhc3VzX3dtaSwga2JkX2xlZCk7CisKKwlyZXR2YWwgPSBrYmRfbGVkX3JlYWQoYXN1cywgJnZhbHVlLCBOVUxMKTsKKworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgdm9pZCBhc3VzX3dtaV9sZWRfZXhpdChzdHJ1Y3QgYXN1c193bWkgKmFzdXMpCkBAIC0zOTMsNiArNDU5LDQ4IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGFzdXMtPmxlZF93b3JrcXVldWUpOwogfQogCitzdGF0aWMgaW50IGFzdXNfd21pX2xlZF9pbml0KHN0cnVjdCBhc3VzX3dtaSAqYXN1cykKK3sKKwlpbnQgcnYgPSAwOworCisJYXN1cy0+bGVkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJsZWRfd29ya3F1ZXVlIik7CisJaWYgKCFhc3VzLT5sZWRfd29ya3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyZWFkX3RwZF9sZWRfc3RhdGUoYXN1cykgPj0gMCkgeworCQlJTklUX1dPUksoJmFzdXMtPnRwZF9sZWRfd29yaywgdHBkX2xlZF91cGRhdGUpOworCisJCWFzdXMtPnRwZF9sZWQubmFtZSA9ICJhc3VzOjp0b3VjaHBhZCI7CisJCWFzdXMtPnRwZF9sZWQuYnJpZ2h0bmVzc19zZXQgPSB0cGRfbGVkX3NldDsKKwkJYXN1cy0+dHBkX2xlZC5icmlnaHRuZXNzX2dldCA9IHRwZF9sZWRfZ2V0OworCQlhc3VzLT50cGRfbGVkLm1heF9icmlnaHRuZXNzID0gMTsKKworCQlydiA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsCisJCQkJCSAgICZhc3VzLT50cGRfbGVkKTsKKwkJaWYgKHJ2KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoa2JkX2xlZF9yZWFkKGFzdXMsIE5VTEwsIE5VTEwpID49IDApIHsKKwkJSU5JVF9XT1JLKCZhc3VzLT5rYmRfbGVkX3dvcmssIGtiZF9sZWRfdXBkYXRlKTsKKworCQlhc3VzLT5rYmRfbGVkLm5hbWUgPSAiYXN1czo6a2JkX2JhY2tsaWdodCI7CisJCWFzdXMtPmtiZF9sZWQuYnJpZ2h0bmVzc19zZXQgPSBrYmRfbGVkX3NldDsKKwkJYXN1cy0+a2JkX2xlZC5icmlnaHRuZXNzX2dldCA9IGtiZF9sZWRfZ2V0OworCQlhc3VzLT5rYmRfbGVkLm1heF9icmlnaHRuZXNzID0gMzsKKworCQlydiA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXYsCisJCQkJCSAgICZhc3VzLT5rYmRfbGVkKTsKKwl9CisKK2Vycm9yOgorCWlmIChydikKKwkJYXN1c193bWlfbGVkX2V4aXQoYXN1cyk7CisKKwlyZXR1cm4gcnY7Cit9CisKKwogLyoKICAqIFBDSSBob3RwbHVnIChmb3Igd2xhbiByZmtpbGwpCiAgKi8KQEAgLTcyOSw2ICs4MzcsMTYgQEAKIAkJcmZraWxsX2Rlc3Ryb3koYXN1cy0+d3dhbjNnLnJma2lsbCk7CiAJCWFzdXMtPnd3YW4zZy5yZmtpbGwgPSBOVUxMOwogCX0KKwlpZiAoYXN1cy0+Z3BzLnJma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3Rlcihhc3VzLT5ncHMucmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koYXN1cy0+Z3BzLnJma2lsbCk7CisJCWFzdXMtPmdwcy5yZmtpbGwgPSBOVUxMOworCX0KKwlpZiAoYXN1cy0+dXdiLnJma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3Rlcihhc3VzLT51d2IucmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koYXN1cy0+dXdiLnJma2lsbCk7CisJCWFzdXMtPnV3Yi5yZmtpbGwgPSBOVUxMOworCX0KIH0KIAogc3RhdGljIGludCBhc3VzX3dtaV9yZmtpbGxfaW5pdChzdHJ1Y3QgYXN1c193bWkgKmFzdXMpCkBAIC03NjMsNiArODgxLDE4IEBACiAJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVOT0RFVikKIAkJZ290byBleGl0OwogCisJcmVzdWx0ID0gYXN1c19uZXdfcmZraWxsKGFzdXMsICZhc3VzLT5ncHMsICJhc3VzLWdwcyIsCisJCQkJIFJGS0lMTF9UWVBFX0dQUywgQVNVU19XTUlfREVWSURfR1BTKTsKKworCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCisJCWdvdG8gZXhpdDsKKworCXJlc3VsdCA9IGFzdXNfbmV3X3Jma2lsbChhc3VzLCAmYXN1cy0+dXdiLCAiYXN1cy11d2IiLAorCQkJCSBSRktJTExfVFlQRV9VV0IsIEFTVVNfV01JX0RFVklEX1VXQik7CisKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRU5PREVWKQorCQlnb3RvIGV4aXQ7CisKIAlpZiAoIWFzdXMtPmRyaXZlci0+aG90cGx1Z193aXJlbGVzcykKIAkJZ290byBleGl0OwogCkBAIC03OTcsOCArOTI3LDggQEAKICAqIEh3bW9uIGRldmljZQogICovCiBzdGF0aWMgc3NpemVfdCBhc3VzX2h3bW9uX3B3bTEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGFzdXNfd21pICphc3VzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdTMyIHZhbHVlOwpAQCAtODA5LDcgKzkzOSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQl2YWx1ZSB8PSAweEZGOworCXZhbHVlICY9IDB4RkY7CiAKIAlpZiAodmFsdWUgPT0gMSkgLyogTG93IFNwZWVkICovCiAJCXZhbHVlID0gODU7CkBAIC04MjUsNyArOTU1LDI2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHVlKTsKIH0KIAorc3RhdGljIHNzaXplX3QgYXN1c19od21vbl90ZW1wMShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBhc3VzX3dtaSAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiB2YWx1ZTsKKwlpbnQgZXJyOworCisJZXJyID0gYXN1c193bWlfZ2V0X2RldnN0YXRlKGFzdXMsIEFTVVNfV01JX0RFVklEX1RIRVJNQUxfQ1RSTCwgJnZhbHVlKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJdmFsdWUgPSBLRUxWSU5fVE9fQ0VMU0lVUygodmFsdWUgJiAweEZGRkYpKSAqIDEwMDA7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsdWUpOworfQorCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVJVR08sIGFzdXNfaHdtb25fcHdtMSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBhc3VzX2h3bW9uX3RlbXAxLCBOVUxMLCAwKTsKIAogc3RhdGljIHNzaXplX3QKIHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04MzYsMTIgKzk4NSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHdtb25fYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX25hbWUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9OwogCiBzdGF0aWMgbW9kZV90IGFzdXNfaHdtb25fc3lzZnNfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgaW50IGlkeCkKKwkJCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaWR4KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+cGFyZW50KTsKQEAgLTg1Miw2ICsxMDAyLDggQEAKIAogCWlmIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyKQogCQlkZXZfaWQgPSBBU1VTX1dNSV9ERVZJRF9GQU5fQ1RSTDsKKwllbHNlIGlmIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0cikKKwkJZGV2X2lkID0gQVNVU19XTUlfREVWSURfVEhFUk1BTF9DVFJMOwogCiAJaWYgKGRldl9pZCAhPSAtMSkgewogCQlpbnQgZXJyID0gYXN1c193bWlfZ2V0X2RldnN0YXRlKGFzdXMsIGRldl9pZCwgJnZhbHVlKTsKQEAgLTg2OSw5ICsxMDIxLDEzIEBACiAJCSAqIC0gcmV2ZXJ2ZWQgYml0cyBhcmUgbm9uLXplcm8KIAkJICogLSBzZnVuIGFuZCBwcmVzZW5jZSBiaXQgYXJlIG5vdCBzZXQKIAkJICovCi0JCWlmICh2YWx1ZSAhPSBBU1VTX1dNSV9VTlNVUFBPUlRFRF9NRVRIT0QgfHwgdmFsdWUgJiAweEZGRjgwMDAwCisJCWlmICh2YWx1ZSA9PSBBU1VTX1dNSV9VTlNVUFBPUlRFRF9NRVRIT0QgfHwgdmFsdWUgJiAweEZGRjgwMDAwCiAJCSAgICB8fCAoIWFzdXMtPnNmdW4gJiYgISh2YWx1ZSAmIEFTVVNfV01JX0RTVFNfUFJFU0VOQ0VfQklUKSkpCiAJCQlvayA9IGZhbHNlOworCX0gZWxzZSBpZiAoZGV2X2lkID09IEFTVVNfV01JX0RFVklEX1RIRVJNQUxfQ1RSTCkgeworCQkvKiBJZiB2YWx1ZSBpcyB6ZXJvLCBzb21ldGhpbmcgaXMgY2xlYXJseSB3cm9uZyAqLworCQlpZiAodmFsdWUgPT0gMCkKKwkJCW9rID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIG9rID8gYXR0ci0+bW9kZSA6IDA7CkBAIC05MDQsNiArMTA2MCw3IEBACiAJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGFzdXMgaHdtb24gZGV2aWNlXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoaHdtb24pOwogCX0KKwlkZXZfc2V0X2RydmRhdGEoaHdtb24sIGFzdXMpOwogCWFzdXMtPmh3bW9uX2RldmljZSA9IGh3bW9uOwogCXJlc3VsdCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaHdtb24tPmtvYmosICZod21vbl9hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChyZXN1bHQpCkBAIC0xMDYwLDYgKzEyMTcsOCBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlpbnQgY29kZTsKIAlpbnQgb3JpZ19jb2RlOworCXVuc2lnbmVkIGludCBrZXlfdmFsdWUgPSAxOworCWJvb2wgYXV0b3JlbGVhc2UgPSAxOwogCiAJc3RhdHVzID0gd21pX2dldF9ldmVudF9kYXRhKHZhbHVlLCAmcmVzcG9uc2UpOwogCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKQEAgLTEwNzUsNiArMTIzNCwxMyBAQAogCWNvZGUgPSBvYmotPmludGVnZXIudmFsdWU7CiAJb3JpZ19jb2RlID0gY29kZTsKIAorCWlmIChhc3VzLT5kcml2ZXItPmtleV9maWx0ZXIpIHsKKwkJYXN1cy0+ZHJpdmVyLT5rZXlfZmlsdGVyKGFzdXMtPmRyaXZlciwgJmNvZGUsICZrZXlfdmFsdWUsCisJCQkJCSAmYXV0b3JlbGVhc2UpOworCQlpZiAoY29kZSA9PSBBU1VTX1dNSV9LRVlfSUdOT1JFKQorCQkJZ290byBleGl0OworCX0KKwogCWlmIChjb2RlID49IE5PVElGWV9CUk5VUF9NSU4gJiYgY29kZSA8PSBOT1RJRllfQlJOVVBfTUFYKQogCQljb2RlID0gTk9USUZZX0JSTlVQX01JTjsKIAllbHNlIGlmIChjb2RlID49IE5PVElGWV9CUk5ET1dOX01JTiAmJgpAQCAtMTA4NCw3ICsxMjUwLDggQEAKIAlpZiAoY29kZSA9PSBOT1RJRllfQlJOVVBfTUlOIHx8IGNvZGUgPT0gTk9USUZZX0JSTkRPV05fTUlOKSB7CiAJCWlmICghYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKQogCQkJYXN1c193bWlfYmFja2xpZ2h0X25vdGlmeShhc3VzLCBvcmlnX2NvZGUpOwotCX0gZWxzZSBpZiAoIXNwYXJzZV9rZXltYXBfcmVwb3J0X2V2ZW50KGFzdXMtPmlucHV0ZGV2LCBjb2RlLCAxLCB0cnVlKSkKKwl9IGVsc2UgaWYgKCFzcGFyc2Vfa2V5bWFwX3JlcG9ydF9ldmVudChhc3VzLT5pbnB1dGRldiwgY29kZSwKKwkJCQkJICAgICAgIGtleV92YWx1ZSwgYXV0b3JlbGVhc2UpKQogCQlwcl9pbmZvKCJVbmtub3duIGtleSAleCBwcmVzc2VkXG4iLCBjb2RlKTsKIAogZXhpdDoKQEAgLTExNjQsMTQgKzEzMzEsMTggQEAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2NwdWZ2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlpbnQgdmFsdWU7CisJaW50IHZhbHVlLCBydjsKIAogCWlmICghY291bnQgfHwgc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbHVlKSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYXN1c193bWlfZXZhbHVhdGVfbWV0aG9kKEFTVVNfV01JX01FVEhPRElEX0NGVlMsIHZhbHVlLCAwLCBOVUxMKTsKKwlydiA9IGFzdXNfd21pX2V2YWx1YXRlX21ldGhvZChBU1VTX1dNSV9NRVRIT0RJRF9DRlZTLCB2YWx1ZSwgMCwgTlVMTCk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1ZnYsIFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9jcHVmdik7CkBAIC0xMjM0LDcgKzE0MDUsNyBAQAogCiAJLyogV2UgZG9uJ3Qga25vdyB5ZXQgd2hhdCB0byBkbyB3aXRoIHRoaXMgdmVyc2lvbi4uLiAqLwogCWlmICghYXN1c193bWlfZXZhbHVhdGVfbWV0aG9kKEFTVVNfV01JX01FVEhPRElEX1NQRUMsIDAsIDB4OSwgJnJ2KSkgewotCQlwcl9pbmZvKCJCSU9TIFdNSSB2ZXJzaW9uOiAlZC4lZCIsIHJ2ID4+IDgsIHJ2ICYgMHhGRik7CisJCXByX2luZm8oIkJJT1MgV01JIHZlcnNpb246ICVkLiVkIiwgcnYgPj4gMTYsIHJ2ICYgMHhGRik7CiAJCWFzdXMtPnNwZWMgPSBydjsKIAl9CiAKQEAgLTEyNjYsNiArMTQzNywxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBDV0FQIGFsbG93IHRvIGRlZmluZSB0aGUgYmVoYXZpb3Igb2YgdGhlIEZuK0YyIGtleSwKKwkgKiB0aGlzIG1ldGhvZCBkb2Vzbid0IHNlZW1zIHRvIGJlIHByZXNlbnQgb24gRWVlIFBDcyAqLworCWlmIChhc3VzLT5kcml2ZXItPndhcGYgPj0gMCkKKwkJYXN1c193bWlfc2V0X2RldnN0YXRlKEFTVVNfV01JX0RFVklEX0NXQVAsCisJCQkJICAgICAgYXN1cy0+ZHJpdmVyLT53YXBmLCBOVUxMKTsKKwogCXJldHVybiBhc3VzX3dtaV9zeXNmc19pbml0KGFzdXMtPnBsYXRmb3JtX2RldmljZSk7CiB9CiAKQEAgLTE1NjgsNiArMTc0NSwxNCBAQAogCQlibCA9ICFhc3VzX3dtaV9nZXRfZGV2c3RhdGVfc2ltcGxlKGFzdXMsIEFTVVNfV01JX0RFVklEX1dXQU4zRyk7CiAJCXJma2lsbF9zZXRfc3dfc3RhdGUoYXN1cy0+d3dhbjNnLnJma2lsbCwgYmwpOwogCX0KKwlpZiAoYXN1cy0+Z3BzLnJma2lsbCkgeworCQlibCA9ICFhc3VzX3dtaV9nZXRfZGV2c3RhdGVfc2ltcGxlKGFzdXMsIEFTVVNfV01JX0RFVklEX0dQUyk7CisJCXJma2lsbF9zZXRfc3dfc3RhdGUoYXN1cy0+Z3BzLnJma2lsbCwgYmwpOworCX0KKwlpZiAoYXN1cy0+dXdiLnJma2lsbCkgeworCQlibCA9ICFhc3VzX3dtaV9nZXRfZGV2c3RhdGVfc2ltcGxlKGFzdXMsIEFTVVNfV01JX0RFVklEX1VXQik7CisJCXJma2lsbF9zZXRfc3dfc3RhdGUoYXN1cy0+dXdiLnJma2lsbCwgYmwpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTYwNCw3ICsxNzg5LDcgQEAKIAogc3RhdGljIGJvb2wgdXNlZDsKIAotaW50IGFzdXNfd21pX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgYXN1c193bWlfZHJpdmVyICpkcml2ZXIpCitpbnQgX19pbml0X29yX21vZHVsZSBhc3VzX3dtaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGFzdXNfd21pX2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBsYXRmb3JtX2RyaXZlcjsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5oIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy13bWkuaAppbmRleCBjMDQ0NTIyLi44MTQ3YzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLXdtaS5oCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtd21pLmgKQEAgLTI5LDEyICsyOSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKKyNkZWZpbmUgQVNVU19XTUlfS0VZX0lHTk9SRSAoLTEpCisKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3Qga2V5X2VudHJ5Owogc3RydWN0IGFzdXNfd21pOwogCiBzdHJ1Y3QgYXN1c193bWlfZHJpdmVyIHsKIAlib29sCQkJaG90cGx1Z193aXJlbGVzczsKKwlpbnQJCQl3YXBmOwogCiAJY29uc3QgY2hhcgkJKm5hbWU7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwpAQCAtNDQsNiArNDcsMTAgQEAKIAljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5CSprZXltYXA7CiAJY29uc3QgY2hhcgkJKmlucHV0X25hbWU7CiAJY29uc3QgY2hhcgkJKmlucHV0X3BoeXM7CisJLyogUmV0dXJucyBuZXcgY29kZSwgdmFsdWUsIGFuZCBhdXRvcmVsZWFzZSB2YWx1ZXMgaW4gYXJndW1lbnRzLgorCSAqIFJldHVybiBBU1VTX1dNSV9LRVlfSUdOT1JFIGluIGNvZGUgaWYgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQuICovCisJdm9pZCAoKmtleV9maWx0ZXIpIChzdHJ1Y3QgYXN1c193bWlfZHJpdmVyICpkcml2ZXIsIGludCAqY29kZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnZhbHVlLCBib29sICphdXRvcmVsZWFzZSk7CiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CiAJdm9pZCAoKnF1aXJrcykgKHN0cnVjdCBhc3VzX3dtaV9kcml2ZXIgKmRyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCBlMzlhYjFkLi5mMzFmYTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTYxMiw3ICs2MTIsNiBAQAogCWlmICghYnVmZmVycGFnZSkKIAkJZ290byBmYWlsX2J1ZmZlcjsKIAlidWZmZXIgPSBwYWdlX2FkZHJlc3MoYnVmZmVycGFnZSk7Ci0JbXV0ZXhfaW5pdCgmYnVmZmVyX211dGV4KTsKIAogCXJldCA9IGRlbGxfc2V0dXBfcmZraWxsKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCmluZGV4IGNlNzkwODIuLmZhOWEyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwpAQCAtNTQsNiArNTQsOCBAQAogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5X2VudHJ5IGRlbGxfd21pX2xlZ2FjeV9rZXltYXBbXSBfX2luaXRjb25zdCA9IHsKKwl7IEtFX0lHTk9SRSwgMHgwMDNhLCB7IEtFWV9DQVBTTE9DSyB9IH0sCisKIAl7IEtFX0tFWSwgMHhlMDQ1LCB7IEtFWV9QUk9HMSB9IH0sCiAJeyBLRV9LRVksIDB4ZTAwOSwgeyBLRVlfRUpFQ1RDRCB9IH0sCiAKQEAgLTg1LDYgKzg3LDExIEBACiAJeyBLRV9JR05PUkUsIDB4ZTAxMywgeyBLRVlfUkVTRVJWRUQgfSB9LAogCiAJeyBLRV9JR05PUkUsIDB4ZTAyMCwgeyBLRVlfTVVURSB9IH0sCisKKwkvKiBTaG9ydGN1dCBhbmQgYXVkaW8gcGFuZWwga2V5cyAqLworCXsgS0VfSUdOT1JFLCAweGUwMjUsIHsgS0VZX1JFU0VSVkVEIH0gfSwKKwl7IEtFX0lHTk9SRSwgMHhlMDI2LCB7IEtFWV9SRVNFUlZFRCB9IH0sCisKIAl7IEtFX0lHTk9SRSwgMHhlMDJlLCB7IEtFWV9WT0xVTUVET1dOIH0gfSwKIAl7IEtFX0lHTk9SRSwgMHhlMDMwLCB7IEtFWV9WT0xVTUVVUCB9IH0sCiAJeyBLRV9JR05PUkUsIDB4ZTAzMywgeyBLRVlfS0JESUxMVU1VUCB9IH0sCkBAIC05Miw2ICs5OSw5IEBACiAJeyBLRV9JR05PUkUsIDB4ZTAzYSwgeyBLRVlfQ0FQU0xPQ0sgfSB9LAogCXsgS0VfSUdOT1JFLCAweGUwNDUsIHsgS0VZX05VTUxPQ0sgfSB9LAogCXsgS0VfSUdOT1JFLCAweGUwNDYsIHsgS0VZX1NDUk9MTExPQ0sgfSB9LAorCXsgS0VfSUdOT1JFLCAweGUwZjcsIHsgS0VZX01VVEUgfSB9LAorCXsgS0VfSUdOT1JFLCAweGUwZjgsIHsgS0VZX1ZPTFVNRURPV04gfSB9LAorCXsgS0VfSUdOT1JFLCAweGUwZjksIHsgS0VZX1ZPTFVNRVVQIH0gfSwKIAl7IEtFX0VORCwgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCmluZGV4IDRhYTg2N2EuLjlmNmU2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLXdtaS5jCkBAIC01Niw2ICs1NiwxMSBAQAogCQkgIklmIHlvdXIgbGFwdG9wIG5lZWRzIHRoYXQsIHBsZWFzZSByZXBvcnQgdG8gIgogCQkgImFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldC4iKTsKIAorLyogVmFsdWVzIGZvciBUMTAxTVQgIkhvbWUiIGtleSAqLworI2RlZmluZSBIT01FX1BSRVNTCTB4ZTQKKyNkZWZpbmUgSE9NRV9IT0xECTB4ZWEKKyNkZWZpbmUgSE9NRV9SRUxFQVNFCTB4ZTUKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlfZW50cnkgZWVlcGNfd21pX2tleW1hcFtdID0gewogCS8qIFNsZWVwIGFscmVhZHkgaGFuZGxlZCB2aWEgZ2VuZXJpYyBBQ1BJIGNvZGUgKi8KIAl7IEtFX0tFWSwgMHgzMCwgeyBLRVlfVk9MVU1FVVAgfSB9LApAQCAtNzEsNiArNzYsNyBAQAogCXsgS0VfS0VZLCAweGNjLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAogCXsgS0VfS0VZLCAweGUwLCB7IEtFWV9QUk9HMSB9IH0sIC8qIFRhc2sgTWFuYWdlciAqLwogCXsgS0VfS0VZLCAweGUxLCB7IEtFWV9GMTQgfSB9LCAvKiBDaGFuZ2UgUmVzb2x1dGlvbiAqLworCXsgS0VfS0VZLCBIT01FX1BSRVNTLCB7IEtFWV9DT05GSUcgfSB9LCAvKiBIb21lL0V4cHJlc3MgZ2F0ZSBrZXkgKi8KIAl7IEtFX0tFWSwgMHhlOCwgeyBLRVlfU0NSRUVOTE9DSyB9IH0sCiAJeyBLRV9LRVksIDB4ZTksIHsgS0VZX0JSSUdIVE5FU1NfWkVSTyB9IH0sCiAJeyBLRV9LRVksIDB4ZWIsIHsgS0VZX0NBTUVSQV9aT09NT1VUIH0gfSwKQEAgLTgxLDYgKzg3LDI1IEBACiAJeyBLRV9FTkQsIDB9LAogfTsKIAorc3RhdGljIHZvaWQgZWVlcGNfd21pX2tleV9maWx0ZXIoc3RydWN0IGFzdXNfd21pX2RyaXZlciAqYXN1c193bWksIGludCAqY29kZSwKKwkJCQkgdW5zaWduZWQgaW50ICp2YWx1ZSwgYm9vbCAqYXV0b3JlbGVhc2UpCit7CisJc3dpdGNoICgqY29kZSkgeworCWNhc2UgSE9NRV9QUkVTUzoKKwkJKnZhbHVlID0gMTsKKwkJKmF1dG9yZWxlYXNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIT01FX0hPTEQ6CisJCSpjb2RlID0gQVNVU19XTUlfS0VZX0lHTk9SRTsKKwkJYnJlYWs7CisJY2FzZSBIT01FX1JFTEVBU0U6CisJCSpjb2RlID0gSE9NRV9QUkVTUzsKKwkJKnZhbHVlID0gMDsKKwkJKmF1dG9yZWxlYXNlID0gMDsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgYWNwaV9zdGF0dXMgZWVlcGNfd21pX3BhcnNlX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsZXZlbCwKIAkJCQkJCSB2b2lkICpjb250ZXh0LCB2b2lkICoqcmV0dmFsKQogewpAQCAtMTQxLDYgKzE2Niw3IEBACiBzdGF0aWMgdm9pZCBlZWVwY193bWlfcXVpcmtzKHN0cnVjdCBhc3VzX3dtaV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmhvdHBsdWdfd2lyZWxlc3MgPSBob3RwbHVnX3dpcmVsZXNzOworCWRyaXZlci0+d2FwZiA9IC0xOwogCWVlZXBjX2RtaV9jaGVjayhkcml2ZXIpOwogfQogCkBAIC0xNTEsNiArMTc3LDcgQEAKIAkua2V5bWFwID0gZWVlcGNfd21pX2tleW1hcCwKIAkuaW5wdXRfbmFtZSA9ICJFZWUgUEMgV01JIGhvdGtleXMiLAogCS5pbnB1dF9waHlzID0gRUVFUENfV01JX0ZJTEUgIi9pbnB1dDAiLAorCS5rZXlfZmlsdGVyID0gZWVlcGNfd21pX2tleV9maWx0ZXIsCiAJLnByb2JlID0gZWVlcGNfd21pX3Byb2JlLAogCS5xdWlya3MgPSBlZWVwY193bWlfcXVpcmtzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2lkZWFwYWQtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pZGVhcGFkLWxhcHRvcC5jCmluZGV4IGJmZGRhMzMuLjBjNTk1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2lkZWFwYWQtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaWRlYXBhZC1sYXB0b3AuYwpAQCAtMzIsMTMgKzMyLDIyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9zcGFyc2Uta2V5bWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KIAogI2RlZmluZSBJREVBUEFEX1JGS0lMTF9ERVZfTlVNCSgzKQogCisjZGVmaW5lIENGR19CVF9CSVQJKDE2KQorI2RlZmluZSBDRkdfM0dfQklUCSgxNykKKyNkZWZpbmUgQ0ZHX1dJRklfQklUCSgxOCkKKyNkZWZpbmUgQ0ZHX0NBTUVSQV9CSVQJKDE5KQorCiBzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlIHsKIAlzdHJ1Y3QgcmZraWxsICpyZmtbSURFQVBBRF9SRktJTExfREVWX05VTV07CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2OworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGlnaHRkZXY7CisJdW5zaWduZWQgbG9uZyBjZmc7CiB9OwogCiBzdGF0aWMgYWNwaV9oYW5kbGUgaWRlYXBhZF9oYW5kbGU7CkBAIC0xNTUsNyArMTY0LDcgQEAKIH0KIAogLyoKLSAqIGNhbWVyYSBwb3dlcgorICogc3lzZnMKICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19pZGVhcGFkX2NhbShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0xODYsNiArMTk1LDQ0IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjYW1lcmFfcG93ZXIsIDA2NDQsIHNob3dfaWRlYXBhZF9jYW0sIHN0b3JlX2lkZWFwYWRfY2FtKTsKIAorc3RhdGljIHNzaXplX3Qgc2hvd19pZGVhcGFkX2NmZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JS44bFhcbiIsIHByaXYtPmNmZyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjZmcsIDA0NDQsIHNob3dfaWRlYXBhZF9jZmcsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaWRlYXBhZF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2NhbWVyYV9wb3dlci5hdHRyLAorCSZkZXZfYXR0cl9jZmcuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgbW9kZV90IGlkZWFwYWRfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWJvb2wgc3VwcG9ydGVkOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2NhbWVyYV9wb3dlci5hdHRyKQorCQlzdXBwb3J0ZWQgPSB0ZXN0X2JpdChDRkdfQ0FNRVJBX0JJVCwgJihwcml2LT5jZmcpKTsKKwllbHNlCisJCXN1cHBvcnRlZCA9IHRydWU7CisKKwlyZXR1cm4gc3VwcG9ydGVkID8gYXR0ci0+bW9kZSA6IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlkZWFwYWRfYXR0cmlidXRlX2dyb3VwID0geworCS5pc192aXNpYmxlID0gaWRlYXBhZF9pc192aXNpYmxlLAorCS5hdHRycyA9IGlkZWFwYWRfYXR0cmlidXRlcworfTsKKwogLyoKICAqIFJma2lsbAogICovCkBAIC0xOTcsOSArMjQ0LDkgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBpZGVhcGFkX3Jma19kYXRhIGlkZWFwYWRfcmZrX2RhdGFbXSA9IHsKLQl7ICJpZGVhcGFkX3dsYW4iLAkxOCwgMHgxNSwgUkZLSUxMX1RZUEVfV0xBTiB9LAotCXsgImlkZWFwYWRfYmx1ZXRvb3RoIiwJMTYsIDB4MTcsIFJGS0lMTF9UWVBFX0JMVUVUT09USCB9LAotCXsgImlkZWFwYWRfM2ciLAkJMTcsIDB4MjAsIFJGS0lMTF9UWVBFX1dXQU4gfSwKKwl7ICJpZGVhcGFkX3dsYW4iLCAgICAgIENGR19XSUZJX0JJVCwgMHgxNSwgUkZLSUxMX1RZUEVfV0xBTiB9LAorCXsgImlkZWFwYWRfYmx1ZXRvb3RoIiwgQ0ZHX0JUX0JJVCwgICAweDE3LCBSRktJTExfVFlQRV9CTFVFVE9PVEggfSwKKwl7ICJpZGVhcGFkXzNnIiwgICAgICAgIENGR18zR19CSVQsICAgMHgyMCwgUkZLSUxMX1RZUEVfV1dBTiB9LAogfTsKIAogc3RhdGljIGludCBpZGVhcGFkX3Jma19zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQpAQCAtMjY1LDggKzMxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpZGVhcGFkX3VucmVnaXN0ZXJfcmZraWxsKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldmljZSwKLQkJCQkJCWludCBkZXYpCitzdGF0aWMgdm9pZCBpZGVhcGFkX3VucmVnaXN0ZXJfcmZraWxsKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldmljZSwgaW50IGRldikKIHsKIAlzdHJ1Y3QgaWRlYXBhZF9wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZhZGV2aWNlLT5kZXYpOwogCkBAIC0yODAsMTUgKzMyNiw2IEBACiAvKgogICogUGxhdGZvcm0gZGV2aWNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppZGVhcGFkX2F0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfY2FtZXJhX3Bvd2VyLmF0dHIsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaWRlYXBhZF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gaWRlYXBhZF9hdHRyaWJ1dGVzCi19OwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpZGVhcGFkX3BsYXRmb3JtX2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgcmVzdWx0OwpAQCAtMzY5LDcgKzQwNiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgaWRlYXBhZF9pbnB1dF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgdm9pZCBpZGVhcGFkX2lucHV0X2V4aXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKIHsKIAlzcGFyc2Vfa2V5bWFwX2ZyZWUocHJpdi0+aW5wdXRkZXYpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmlucHV0ZGV2KTsKQEAgLTM4Myw2ICs0MjAsOTggQEAKIH0KIAogLyoKKyAqIGJhY2tsaWdodAorICovCitzdGF0aWMgaW50IGlkZWFwYWRfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGlnaHRkZXYpCit7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwlpZiAocmVhZF9lY19kYXRhKGlkZWFwYWRfaGFuZGxlLCAweDEyLCAmbm93KSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIG5vdzsKK30KKworc3RhdGljIGludCBpZGVhcGFkX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGlnaHRkZXYpCit7CisJaWYgKHdyaXRlX2VjX2NtZChpZGVhcGFkX2hhbmRsZSwgMHgxMywgYmxpZ2h0ZGV2LT5wcm9wcy5icmlnaHRuZXNzKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHdyaXRlX2VjX2NtZChpZGVhcGFkX2hhbmRsZSwgMHgzMywKKwkJCSBibGlnaHRkZXYtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1BPV0VSRE9XTiA/IDAgOiAxKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGlkZWFwYWRfYmFja2xpZ2h0X29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBpZGVhcGFkX2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cyA9IGlkZWFwYWRfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCit9OworCitzdGF0aWMgaW50IGlkZWFwYWRfYmFja2xpZ2h0X2luaXQoc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxpZ2h0ZGV2OworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwl1bnNpZ25lZCBsb25nIG1heCwgbm93LCBwb3dlcjsKKworCWlmIChyZWFkX2VjX2RhdGEoaWRlYXBhZF9oYW5kbGUsIDB4MTEsICZtYXgpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAocmVhZF9lY19kYXRhKGlkZWFwYWRfaGFuZGxlLCAweDEyLCAmbm93KSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHJlYWRfZWNfZGF0YShpZGVhcGFkX2hhbmRsZSwgMHgxOCwgJnBvd2VyKSkKKwkJcmV0dXJuIC1FSU87CisKKwltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBtYXg7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKKwlibGlnaHRkZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJpZGVhcGFkIiwKKwkJCQkJICAgICAgJnByaXYtPnBsYXRmb3JtX2RldmljZS0+ZGV2LAorCQkJCQkgICAgICBwcml2LAorCQkJCQkgICAgICAmaWRlYXBhZF9iYWNrbGlnaHRfb3BzLAorCQkJCQkgICAgICAmcHJvcHMpOworCWlmIChJU19FUlIoYmxpZ2h0ZGV2KSkgeworCQlwcl9lcnIoIkNvdWxkIG5vdCByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmxpZ2h0ZGV2KTsKKwl9CisKKwlwcml2LT5ibGlnaHRkZXYgPSBibGlnaHRkZXY7CisJYmxpZ2h0ZGV2LT5wcm9wcy5icmlnaHRuZXNzID0gbm93OworCWJsaWdodGRldi0+cHJvcHMucG93ZXIgPSBwb3dlciA/IEZCX0JMQU5LX1VOQkxBTksgOiBGQl9CTEFOS19QT1dFUkRPV047CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmxpZ2h0ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZGVhcGFkX2JhY2tsaWdodF9leGl0KHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPmJsaWdodGRldikKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHByaXYtPmJsaWdodGRldik7CisJcHJpdi0+YmxpZ2h0ZGV2ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaWRlYXBhZF9iYWNrbGlnaHRfbm90aWZ5X3Bvd2VyKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBwb3dlcjsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxpZ2h0ZGV2ID0gcHJpdi0+YmxpZ2h0ZGV2OworCisJaWYgKHJlYWRfZWNfZGF0YShpZGVhcGFkX2hhbmRsZSwgMHgxOCwgJnBvd2VyKSkKKwkJcmV0dXJuOworCWJsaWdodGRldi0+cHJvcHMucG93ZXIgPSBwb3dlciA/IEZCX0JMQU5LX1VOQkxBTksgOiBGQl9CTEFOS19QT1dFUkRPV047Cit9CisKK3N0YXRpYyB2b2lkIGlkZWFwYWRfYmFja2xpZ2h0X25vdGlmeV9icmlnaHRuZXNzKHN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwkvKiBpZiB3ZSBjb250cm9sIGJyaWdodG5lc3MgdmlhIGFjcGkgdmlkZW8gZHJpdmVyICovCisJaWYgKHByaXYtPmJsaWdodGRldiA9PSBOVUxMKSB7CisJCXJlYWRfZWNfZGF0YShpZGVhcGFkX2hhbmRsZSwgMHgxMiwgJm5vdyk7CisJCXJldHVybjsKKwl9CisKKwliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKHByaXYtPmJsaWdodGRldiwgQkFDS0xJR0hUX1VQREFURV9IT1RLRVkpOworfQorCisvKgogICogbW9kdWxlIGluaXQvZXhpdAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGlkZWFwYWRfZGV2aWNlX2lkc1tdID0gewpAQCAtMzkzLDEwICs1MjIsMTEgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgaWRlYXBhZF9hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXZpY2UpCiB7Ci0JaW50IHJldCwgaSwgY2ZnOworCWludCByZXQsIGk7CisJdW5zaWduZWQgbG9uZyBjZmc7CiAJc3RydWN0IGlkZWFwYWRfcHJpdmF0ZSAqcHJpdjsKIAotCWlmIChyZWFkX21ldGhvZF9pbnQoYWRldmljZS0+aGFuZGxlLCAiX0NGRyIsICZjZmcpKQorCWlmIChyZWFkX21ldGhvZF9pbnQoYWRldmljZS0+aGFuZGxlLCAiX0NGRyIsIChpbnQgKikmY2ZnKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKQEAgLTQwNCw2ICs1MzQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlkZXZfc2V0X2RydmRhdGEoJmFkZXZpY2UtPmRldiwgcHJpdik7CiAJaWRlYXBhZF9oYW5kbGUgPSBhZGV2aWNlLT5oYW5kbGU7CisJcHJpdi0+Y2ZnID0gY2ZnOwogCiAJcmV0ID0gaWRlYXBhZF9wbGF0Zm9ybV9pbml0KHByaXYpOwogCWlmIChyZXQpCkBAIC00MTQsMTUgKzU0NSwyNSBAQAogCQlnb3RvIGlucHV0X2ZhaWxlZDsKIAogCWZvciAoaSA9IDA7IGkgPCBJREVBUEFEX1JGS0lMTF9ERVZfTlVNOyBpKyspIHsKLQkJaWYgKHRlc3RfYml0KGlkZWFwYWRfcmZrX2RhdGFbaV0uY2ZnYml0LCAodW5zaWduZWQgbG9uZyAqKSZjZmcpKQorCQlpZiAodGVzdF9iaXQoaWRlYXBhZF9yZmtfZGF0YVtpXS5jZmdiaXQsICZjZmcpKQogCQkJaWRlYXBhZF9yZWdpc3Rlcl9yZmtpbGwoYWRldmljZSwgaSk7CiAJCWVsc2UKIAkJCXByaXYtPnJma1tpXSA9IE5VTEw7CiAJfQogCWlkZWFwYWRfc3luY19yZmtfc3RhdGUoYWRldmljZSk7CiAKKwlpZiAoIWFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgeworCQlyZXQgPSBpZGVhcGFkX2JhY2tsaWdodF9pbml0KHByaXYpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQorCQkJZ290byBiYWNrbGlnaHRfZmFpbGVkOworCX0KKwogCXJldHVybiAwOwogCitiYWNrbGlnaHRfZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCBJREVBUEFEX1JGS0lMTF9ERVZfTlVNOyBpKyspCisJCWlkZWFwYWRfdW5yZWdpc3Rlcl9yZmtpbGwoYWRldmljZSwgaSk7CisJaWRlYXBhZF9pbnB1dF9leGl0KHByaXYpOwogaW5wdXRfZmFpbGVkOgogCWlkZWFwYWRfcGxhdGZvcm1fZXhpdChwcml2KTsKIHBsYXRmb3JtX2ZhaWxlZDoKQEAgLTQzNSw2ICs1NzYsNyBAQAogCXN0cnVjdCBpZGVhcGFkX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFkZXZpY2UtPmRldik7CiAJaW50IGk7CiAKKwlpZGVhcGFkX2JhY2tsaWdodF9leGl0KHByaXYpOwogCWZvciAoaSA9IDA7IGkgPCBJREVBUEFEX1JGS0lMTF9ERVZfTlVNOyBpKyspCiAJCWlkZWFwYWRfdW5yZWdpc3Rlcl9yZmtpbGwoYWRldmljZSwgaSk7CiAJaWRlYXBhZF9pbnB1dF9leGl0KHByaXYpOwpAQCAtNDU5LDEyICs2MDEsMTkgQEAKIAl2cGMxID0gKHZwYzIgPDwgOCkgfCB2cGMxOwogCWZvciAodnBjX2JpdCA9IDA7IHZwY19iaXQgPCAxNjsgdnBjX2JpdCsrKSB7CiAJCWlmICh0ZXN0X2JpdCh2cGNfYml0LCAmdnBjMSkpIHsKLQkJCWlmICh2cGNfYml0ID09IDkpCisJCQlzd2l0Y2ggKHZwY19iaXQpIHsKKwkJCWNhc2UgOToKIAkJCQlpZGVhcGFkX3N5bmNfcmZrX3N0YXRlKGFkZXZpY2UpOwotCQkJZWxzZSBpZiAodnBjX2JpdCA9PSA0KQotCQkJCXJlYWRfZWNfZGF0YShoYW5kbGUsIDB4MTIsICZ2cGMyKTsKLQkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlpZGVhcGFkX2JhY2tsaWdodF9ub3RpZnlfYnJpZ2h0bmVzcyhwcml2KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlpZGVhcGFkX2JhY2tsaWdodF9ub3RpZnlfcG93ZXIocHJpdik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgogCQkJCWlkZWFwYWRfaW5wdXRfcmVwb3J0KHByaXYsIHZwY19iaXQpOworCQkJfQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfaXBzLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuYwppbmRleCA1ZmZlN2MzLi44MDlhM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9pcHMuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAKIAl0aG1fd3JpdGV3KFRITV9NUENQQywgKG5ld190ZHBfbGltaXQgKiAxMCkgLyA4KTsKIAotCXR1cmJvX292ZXJyaWRlIHw9IFRVUkJPX1REQ19PVlJfRU4gfCBUVVJCT19URENfT1ZSX0VOOworCXR1cmJvX292ZXJyaWRlIHw9IFRVUkJPX1REQ19PVlJfRU4gfCBUVVJCT19URFBfT1ZSX0VOOwogCXdybXNybChUVVJCT19QT1dFUl9DVVJSRU5UX0xJTUlULCB0dXJib19vdmVycmlkZSk7CiAKIAl0dXJib19vdmVycmlkZSAmPSB+VFVSQk9fVERQX01BU0s7CkBAIC00MzgsNyArNDM4LDcgQEAKIAogCXRobV93cml0ZXcoVEhNX01QQ1BDLCAobmV3X2xpbWl0ICogMTApIC8gOCk7CiAKLQl0dXJib19vdmVycmlkZSB8PSBUVVJCT19URENfT1ZSX0VOIHwgVFVSQk9fVERDX09WUl9FTjsKKwl0dXJib19vdmVycmlkZSB8PSBUVVJCT19URENfT1ZSX0VOIHwgVFVSQk9fVERQX09WUl9FTjsKIAl3cm1zcmwoVFVSQk9fUE9XRVJfQ1VSUkVOVF9MSU1JVCwgdHVyYm9fb3ZlcnJpZGUpOwogCiAJdHVyYm9fb3ZlcnJpZGUgJj0gflRVUkJPX1REUF9NQVNLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWVubG93LmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwppbmRleCA4MDlhZGVhLi5hYmRkYzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYwpAQCAtNDc3LDYgKzQ3Nyw4IEBACiAJCXJldHVybiBBRV9FUlJPUjsKIAl9CiAKKwlyZXR1cm4gQUVfT0s7CisKICBhdXgxX25vdF9mb3VuZDoKIAlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkKIAkJcmV0dXJuIEFFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWlkX3RoZXJtYWwuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21pZF90aGVybWFsLmMKaW5kZXggM2E1NzgzMi4uY2NkN2IxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWlkX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9taWRfdGhlcm1hbC5jCkBAIC00OTMsMjAgKzQ5MywzMCBAQAogCiAJLyogUmVnaXN0ZXIgZWFjaCBzZW5zb3Igd2l0aCB0aGUgZ2VuZXJpYyB0aGVybWFsIGZyYW1ld29yayovCiAJZm9yIChpID0gMDsgaSA8IE1TSUNfVEhFUk1BTF9TRU5TT1JTOyBpKyspIHsKKwkJc3RydWN0IHRoZXJtYWxfZGV2aWNlX2luZm8gKnRkX2luZm8gPSBpbml0aWFsaXplX3NlbnNvcihpKTsKKworCQlpZiAoIXRkX2luZm8pIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQogCQlwaW5mby0+dHpkW2ldID0gdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlcihuYW1lW2ldLAotCQkJCTAsIGluaXRpYWxpemVfc2Vuc29yKGkpLCAmdHpkX29wcywgMCwgMCwgMCwgMCk7Ci0JCWlmIChJU19FUlIocGluZm8tPnR6ZFtpXSkpCi0JCQlnb3RvIHJlZ19mYWlsOworCQkJCTAsIHRkX2luZm8sICZ0emRfb3BzLCAwLCAwLCAwLCAwKTsKKwkJaWYgKElTX0VSUihwaW5mby0+dHpkW2ldKSkgeworCQkJa2ZyZWUodGRfaW5mbyk7CisJCQlyZXQgPSBQVFJfRVJSKHBpbmZvLT50emRbaV0pOworCQkJZ290byBlcnI7CisJCX0KIAl9CiAKIAlwaW5mby0+cGRldiA9IHBkZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGluZm8pOwogCXJldHVybiAwOwogCi1yZWdfZmFpbDoKLQlyZXQgPSBQVFJfRVJSKHBpbmZvLT50emRbaV0pOwotCXdoaWxlICgtLWkgPj0gMCkKK2VycjoKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJa2ZyZWUocGluZm8tPnR6ZFtpXS0+ZGV2ZGF0YSk7CiAJCXRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihwaW5mby0+dHpkW2ldKTsKKwl9CiAJY29uZmlndXJlX2FkYygwKTsKIAlrZnJlZShwaW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTUyNCw4ICs1MzQsMTAgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhdGZvcm1faW5mbyAqcGluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWZvciAoaSA9IDA7IGkgPCBNU0lDX1RIRVJNQUxfU0VOU09SUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBNU0lDX1RIRVJNQUxfU0VOU09SUzsgaSsrKSB7CisJCWtmcmVlKHBpbmZvLT50emRbaV0tPmRldmRhdGEpOwogCQl0aGVybWFsX3pvbmVfZGV2aWNlX3VucmVnaXN0ZXIocGluZm8tPnR6ZFtpXSk7CisJfQogCiAJa2ZyZWUocGluZm8pOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcmFyX3JlZ2lzdGVyLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9yYXJfcmVnaXN0ZXIuYwppbmRleCBiZGU0N2U5Li5jOGE2YWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9yYXJfcmVnaXN0ZXIuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9yYXJfcmVnaXN0ZXIuYwpAQCAtNjM3LDE1ICs2MzcsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJhcl9wY2lfaWRfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocmFyX3BjaV9pZF90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4NDExMCkgfSwKIAl7IDAgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJhcl9wY2lfaWRfdGJsKTsKIAotY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm15X2lkX3RhYmxlID0gcmFyX3BjaV9pZF90Ymw7Ci0KIC8qIGZpZWxkIGZvciByZWdpc3RlcmluZyBkcml2ZXIgdG8gUENJIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJhcl9wY2lfZHJpdmVyID0gewogCS5uYW1lID0gInJhcl9yZWdpc3Rlcl9kcml2ZXIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCmluZGV4IDk0MGFjY2IuLmM4NjY2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogCWludGVsX3NjdV9kZXZpY2VzX2Rlc3Ryb3koKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfaWRzKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MGUpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MmEpfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCmluZGV4IDNmZjYyOWQuLmYyMDQ2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKQEAgLTUzOCw2ICs1MzgsMTUgQEAKIAkJfSwKIAkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCiAJfSwKKwl7CisJCS5pZGVudCA9ICJNU0kgVTI3MCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAorCQkJCSJNaWNyby1TdGFyIEludGVybmF0aW9uYWwgQ28uLCBMdGQuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlUyNzAgc2VyaWVzIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCiAJeyB9CiB9OwogCkBAIC05OTYsMyArMTAwNSw0IEBACiBNT0RVTEVfQUxJQVMoImRtaToqOnN2bk1JQ1JPLVNUQVJJTlRFUk5BVElPTkFMKjpwbk1TLU4wNTE6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5NSUNSTy1TVEFSSU5URVJOQVRJT05BTCo6cG5NUy1OMDE0OioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6c3ZuTWljcm8tU3RhckludGVybmF0aW9uYWwqOnBuQ1I2MjA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5NaWNyby1TdGFySW50ZXJuYXRpb25hbCo6cG5VMjcwc2VyaWVzOioiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwppbmRleCBjODMyZTMzLi42ZjQwYmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLXdtaS5jCkBAIC0yNzIsNiArMjcyLDcgQEAKIGVycl9mcmVlX2JhY2tsaWdodDoKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmFja2xpZ2h0KTsKIGVycl9mcmVlX2lucHV0OgorCXNwYXJzZV9rZXltYXBfZnJlZShtc2lfd21pX2lucHV0X2Rldik7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UobXNpX3dtaV9pbnB1dF9kZXYpOwogZXJyX3VuaW5zdGFsbF9ub3RpZmllcjoKIAl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKE1TSVdNSV9FVkVOVF9HVUlEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLWxhcHRvcC5jCmluZGV4IGQzNDcxMTYuLjM1OTE2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NhbXN1bmctbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1sYXB0b3AuYwpAQCAtNTIxLDYgKzUyMSwxNiBAQAogCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCiAJfSwKIAl7CisJCS5pZGVudCA9ICJONTEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCisJCQkJCSJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJONTEwIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJONTEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYiwKKwl9LAorCXsKIAkJLmlkZW50ID0gIlgxMjUiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKQEAgLTYwMSw2ICs2MTEsMTYgQEAKIAkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiLAogCX0sCiAJeworCQkuaWRlbnQgPSAiTjE1MC9OMjEwL04yMjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xNTAvTjIxMC9OMjIwIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJOMTUwL04yMTAvTjIyMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2IsCisJfSwKKwl7CiAJCS5pZGVudCA9ICJOMTUwL04yMTAvTjIyMC9OMjMwIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zYW1zdW5nLXExMC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1xMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU0YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc2Ftc3VuZy1xMTAuYwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIFNhbXN1bmcgUTEwIGFuZCByZWxhdGVkIGxhcHRvcHM6IGNvbnRyb2xzIHRoZSBiYWNrbGlnaHQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDExIEZyZWRlcmljayB2YW4gZGVyIFd5Y2sgPGZ2YW5kZXJ3eWNrQGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2k4MDQyLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisKKyNkZWZpbmUgU0FNU1VOR1ExMF9CTF9NQVhfSU5URU5TSVRZICAgICAgMjU1CisjZGVmaW5lIFNBTVNVTkdRMTBfQkxfREVGQVVMVF9JTlRFTlNJVFkgIDE4NQorCisjZGVmaW5lIFNBTVNVTkdRMTBfQkxfODA0Ml9DTUQgICAgICAgICAgIDB4YmUKKyNkZWZpbmUgU0FNU1VOR1ExMF9CTF84MDQyX0RBVEEgICAgICAgICAgeyAweDg5LCAweDkxIH0KKworc3RhdGljIGludCBzYW1zdW5ncTEwX2JsX2JyaWdodG5lc3M7CisKK3N0YXRpYyBib29sIGZvcmNlOworbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2UsCisJCSJEaXNhYmxlIHRoZSBETUkgY2hlY2sgYW5kIGZvcmNlIHRoZSBkcml2ZXIgdG8gYmUgbG9hZGVkIik7CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ3ExMF9ibF9zZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKworCWludCBicmlnaHRuZXNzID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisJdW5zaWduZWQgY2hhciBjWzNdID0gU0FNU1VOR1ExMF9CTF84MDQyX0RBVEE7CisKKwljWzJdID0gKHVuc2lnbmVkIGNoYXIpYnJpZ2h0bmVzczsKKwlpODA0Ml9sb2NrX2NoaXAoKTsKKwlpODA0Ml9jb21tYW5kKGMsICgweDMwIDw8IDgpIHwgU0FNU1VOR1ExMF9CTF84MDQyX0NNRCk7CisJaTgwNDJfdW5sb2NrX2NoaXAoKTsKKwlzYW1zdW5ncTEwX2JsX2JyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ3ExMF9ibF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlyZXR1cm4gc2Ftc3VuZ3ExMF9ibF9icmlnaHRuZXNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgc2Ftc3VuZ3ExMF9ibF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gc2Ftc3VuZ3ExMF9ibF9nZXRfaW50ZW5zaXR5LAorCS51cGRhdGVfc3RhdHVzCT0gc2Ftc3VuZ3ExMF9ibF9zZXRfaW50ZW5zaXR5LAorfTsKKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBzYW1zdW5ncTEwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdxMTBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc2Ftc3VuZ3ExMF9ibF9zZXRfaW50ZW5zaXR5KGJkKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHNhbXN1bmdxMTBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHNhbXN1bmdxMTBfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHNhbXN1bmdxMTBfcG1fb3BzLAorCQkJICBzYW1zdW5ncTEwX3N1c3BlbmQsIHNhbXN1bmdxMTBfcmVzdW1lKTsKKworc3RhdGljIGludCBfX2RldmluaXQgc2Ftc3VuZ3ExMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKworCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMpKTsKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1BMQVRGT1JNOworCXByb3BzLm1heF9icmlnaHRuZXNzID0gU0FNU1VOR1ExMF9CTF9NQVhfSU5URU5TSVRZOworCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3Rlcigic2Ftc3VuZyIsICZwZGV2LT5kZXYsIE5VTEwsCisJCQkJICAgICAgICZzYW1zdW5ncTEwX2JsX29wcywgJnByb3BzKTsKKwlpZiAoSVNfRVJSKGJkKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYmQpOworCisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBTQU1TVU5HUTEwX0JMX0RFRkFVTFRfSU5URU5TSVRZOworCXNhbXN1bmdxMTBfYmxfc2V0X2ludGVuc2l0eShiZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2Ftc3VuZ3ExMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBTQU1TVU5HUTEwX0JMX0RFRkFVTFRfSU5URU5TSVRZOworCXNhbXN1bmdxMTBfYmxfc2V0X2ludGVuc2l0eShiZCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhbXN1bmdxMTBfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IEtCVUlMRF9NT0ROQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnNhbXN1bmdxMTBfcG1fb3BzLAorCX0sCisJLnByb2JlCQk9IHNhbXN1bmdxMTBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYW1zdW5ncTEwX3JlbW92ZSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2Ftc3VuZ3ExMF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGRtaV9jaGVja19jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBmb3VuZCBtb2RlbCAnJXMnXG4iLCBpZC0+aWRlbnQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBzYW1zdW5ncTEwX2RtaV90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIlNhbXN1bmcgUTEwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTYW1zdW5nIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlNRMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NhbGxiYWNrLAorCX0sCisJeworCQkuaWRlbnQgPSAiU2Ftc3VuZyBRMjAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRWxlY3Ryb25pY3MiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU0VOUyBRMjAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NhbGxiYWNrLAorCX0sCisJeworCQkuaWRlbnQgPSAiU2Ftc3VuZyBRMjUiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRWxlY3Ryb25pY3MiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTlEyNSIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2FsbGJhY2ssCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIExhdGl0dWRlIFgyMDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiWDIwMCIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBkbWlfY2hlY2tfY2FsbGJhY2ssCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIHNhbXN1bmdxMTBfZG1pX3RhYmxlKTsKKworc3RhdGljIGludCBfX2luaXQgc2Ftc3VuZ3ExMF9pbml0KHZvaWQpCit7CisJaWYgKCFmb3JjZSAmJiAhZG1pX2NoZWNrX3N5c3RlbShzYW1zdW5ncTEwX2RtaV90YWJsZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc2Ftc3VuZ3ExMF9kZXZpY2UgPSBwbGF0Zm9ybV9jcmVhdGVfYnVuZGxlKCZzYW1zdW5ncTEwX2RyaXZlciwKKwkJCQkJCSAgIHNhbXN1bmdxMTBfcHJvYmUsCisJCQkJCQkgICBOVUxMLCAwLCBOVUxMLCAwKTsKKworCWlmIChJU19FUlIoc2Ftc3VuZ3ExMF9kZXZpY2UpKQorCQlyZXR1cm4gUFRSX0VSUihzYW1zdW5ncTEwX2RldmljZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNhbXN1bmdxMTBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNhbXN1bmdxMTBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2Ftc3VuZ3ExMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYW1zdW5ncTEwX2luaXQpOworbW9kdWxlX2V4aXQoc2Ftc3VuZ3ExMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRnJlZGVyaWNrIHZhbiBkZXIgV3ljayA8ZnZhbmRlcnd5Y2tAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFExMCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCAyNmM1YjExLi43YmQ4MjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC0zMTg2LDggKzMxODYsMTcgQEAKIAkJS0VZX1ZFTkRPUiwJLyogMHgxNzogVGhpbmtwYWQvQWNjZXNzSUJNL0xlbm92byAqLwogCiAJCS8qIChhc3NpZ25tZW50cyB1bmtub3duLCBwbGVhc2UgcmVwb3J0IGlmIGZvdW5kKSAqLworCQlLRVlfVU5LTk9XTiwgS0VZX1VOS05PV04sCisKKwkJLyoKKwkJICogVGhlIG1pYyBtdXRlIGJ1dHRvbiBvbmx5IHNlbmRzIDB4MWEuICBJdCBkb2VzIG5vdAorCQkgKiBhdXRvbWF0aWNhbGx5IG11dGUgdGhlIG1pYyBvciBjaGFuZ2UgdGhlIG11dGUgbGlnaHQuCisJCSAqLworCQlLRVlfTUlDTVVURSwJLyogMHgxYTogTWljIG11dGUgKHNpbmNlID80MDAgb3Igc28pICovCisKKwkJLyogKGFzc2lnbm1lbnRzIHVua25vd24sIHBsZWFzZSByZXBvcnQgaWYgZm91bmQpICovCiAJCUtFWV9VTktOT1dOLCBLRVlfVU5LTk9XTiwgS0VZX1VOS05PV04sIEtFWV9VTktOT1dOLAotCQlLRVlfVU5LTk9XTiwgS0VZX1VOS05PV04sIEtFWV9VTktOT1dOLCBLRVlfVU5LTk9XTiwKKwkJS0VZX1VOS05PV04sCiAJCX0sCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9LY29uZmlnIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCmluZGV4IGU1N2I1MGIuLjU3ZGUwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKQEAgLTIzNSw0ICsyMzUsMTggQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGdwaW8tY2hhcmdlci4KIAorY29uZmlnIENIQVJHRVJfTUFYODk5NworCXRyaXN0YXRlICJNYXhpbSBNQVg4OTk3L01BWDg5NjYgUE1JQyBiYXR0ZXJ5IGNoYXJnZXIgZHJpdmVyIgorCWRlcGVuZHMgb24gTUZEX01BWDg5OTcgJiYgUkVHVUxBVE9SX01BWDg5OTcKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGJhdHRlcnkgY2hhcmdlciBjb250cm9sIHN5c2ZzIGFuZAorCSAgcGxhdGZvcm0gZGF0YSBvZiBNQVg4OTk3L0xQMzk3NCBQTUlDcy4KKworY29uZmlnIENIQVJHRVJfTUFYODk5OAorCXRyaXN0YXRlICJNYXhpbSBNQVg4OTk4L0xQMzk3NCBQTUlDIGJhdHRlcnkgY2hhcmdlciBkcml2ZXIiCisJZGVwZW5kcyBvbiBNRkRfTUFYODk5OCAmJiBSRUdVTEFUT1JfTUFYODk5OAorCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBjaGFyZ2VyIGNvbnRyb2wgc3lzZnMgYW5kCisJICBwbGF0Zm9ybSBkYXRhIG9mIE1BWDg5OTgvTFAzOTc0IFBNSUNzLgorCiBlbmRpZiAjIFBPV0VSX1NVUFBMWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKaW5kZXggMDA5YTkwZi4uYjRhZjEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCkBAIC0zNiwzICszNiw1IEBACiBvYmotJChDT05GSUdfQ0hBUkdFUl9NQVg4OTAzKQkrPSBtYXg4OTAzX2NoYXJnZXIubwogb2JqLSQoQ09ORklHX0NIQVJHRVJfVFdMNDAzMCkJKz0gdHdsNDAzMF9jaGFyZ2VyLm8KIG9iai0kKENPTkZJR19DSEFSR0VSX0dQSU8pCSs9IGdwaW8tY2hhcmdlci5vCitvYmotJChDT05GSUdfQ0hBUkdFUl9NQVg4OTk3KQkrPSBtYXg4OTk3X2NoYXJnZXIubworb2JqLSQoQ09ORklHX0NIQVJHRVJfTUFYODk5OCkJKz0gbWF4ODk5OF9jaGFyZ2VyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYXBtX3Bvd2VyLmMgYi9kcml2ZXJzL3Bvd2VyL2FwbV9wb3dlci5jCmluZGV4IGRjNjI4Y2IuLjhhNjEyZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvYXBtX3Bvd2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci9hcG1fcG93ZXIuYwpAQCAtMTQsMTEgKzE0LDExIEBACiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogCiAKLSNkZWZpbmUgUFNZX1BST1AocHN5LCBwcm9wLCB2YWwpIHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgXAotCQkJIFBPV0VSX1NVUFBMWV9QUk9QXyMjcHJvcCwgdmFsKQorI2RlZmluZSBQU1lfUFJPUChwc3ksIHByb3AsIHZhbCkgKHBzeS0+Z2V0X3Byb3BlcnR5KHBzeSwgXAorCQkJIFBPV0VSX1NVUFBMWV9QUk9QXyMjcHJvcCwgdmFsKSkKIAotI2RlZmluZSBfTVBTWV9QUk9QKHByb3AsIHZhbCkgbWFpbl9iYXR0ZXJ5LT5nZXRfcHJvcGVydHkobWFpbl9iYXR0ZXJ5LCBcCi0JCQkJCQkJIHByb3AsIHZhbCkKKyNkZWZpbmUgX01QU1lfUFJPUChwcm9wLCB2YWwpIChtYWluX2JhdHRlcnktPmdldF9wcm9wZXJ0eShtYWluX2JhdHRlcnksIFwKKwkJCQkJCQkgcHJvcCwgdmFsKSkKIAogI2RlZmluZSBNUFNZX1BST1AocHJvcCwgdmFsKSBfTVBTWV9QUk9QKFBPV0VSX1NVUFBMWV9QUk9QXyMjcHJvcCwgdmFsKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2JxMjB6NzUuYyBiL2RyaXZlcnMvcG93ZXIvYnEyMHo3NS5jCmluZGV4IDUwNjU4NWUuLjljNWU1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvYnEyMHo3NS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYnEyMHo3NS5jCkBAIC0xNTIsNiArMTUyLDEwIEBACiAJYm9vbAkJCQlncGlvX2RldGVjdDsKIAlib29sCQkJCWVuYWJsZV9kZXRlY3Rpb247CiAJaW50CQkJCWlycTsKKwlpbnQJCQkJbGFzdF9zdGF0ZTsKKwlpbnQJCQkJcG9sbF90aW1lOworCXN0cnVjdCBkZWxheWVkX3dvcmsJCXdvcms7CisJaW50CQkJCWlnbm9yZV9jaGFuZ2VzOwogfTsKIAogc3RhdGljIGludCBicTIwejc1X3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGFkZHJlc3MpCkBAIC0yNzksNiArMjgzLDcgQEAKIAlpbnQgcmVnX29mZnNldCwgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAogCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCiB7CisJc3RydWN0IGJxMjB6NzVfaW5mbyAqYnEyMHo3NV9kZXZpY2UgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzMzIgcmV0OwogCiAJcmV0ID0gYnEyMHo3NV9yZWFkX3dvcmRfZGF0YShjbGllbnQsCkBAIC0yOTMsMTUgKzI5OCwyNCBAQAogCWlmIChyZXQgPj0gYnEyMHo3NV9kYXRhW3JlZ19vZmZzZXRdLm1pbl92YWx1ZSAmJgogCSAgICByZXQgPD0gYnEyMHo3NV9kYXRhW3JlZ19vZmZzZXRdLm1heF92YWx1ZSkgewogCQl2YWwtPmludHZhbCA9IHJldDsKLQkJaWYgKHBzcCA9PSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMpIHsKLQkJCWlmIChyZXQgJiBCQVRURVJZX0ZVTExfQ0hBUkdFRCkKLQkJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKLQkJCWVsc2UgaWYgKHJldCAmIEJBVFRFUllfRlVMTF9ESVNDSEFSR0VEKQotCQkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19OT1RfQ0hBUkdJTkc7Ci0JCQllbHNlIGlmIChyZXQgJiBCQVRURVJZX0RJU0NIQVJHSU5HKQotCQkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKLQkJCWVsc2UKLQkJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7CisJCWlmIChwc3AgIT0gUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHJldCAmIEJBVFRFUllfRlVMTF9DSEFSR0VEKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7CisJCWVsc2UgaWYgKHJldCAmIEJBVFRFUllfRlVMTF9ESVNDSEFSR0VEKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORzsKKwkJZWxzZSBpZiAocmV0ICYgQkFUVEVSWV9ESVNDSEFSR0lORykKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCisJCWlmIChicTIwejc1X2RldmljZS0+cG9sbF90aW1lID09IDApCisJCQlicTIwejc1X2RldmljZS0+bGFzdF9zdGF0ZSA9IHZhbC0+aW50dmFsOworCQllbHNlIGlmIChicTIwejc1X2RldmljZS0+bGFzdF9zdGF0ZSAhPSB2YWwtPmludHZhbCkgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZicTIwejc1X2RldmljZS0+d29yayk7CisJCQlwb3dlcl9zdXBwbHlfY2hhbmdlZCgmYnEyMHo3NV9kZXZpY2UtPnBvd2VyX3N1cHBseSk7CisJCQlicTIwejc1X2RldmljZS0+cG9sbF90aW1lID0gMDsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChwc3AgPT0gUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTKQpAQCAtNTQ1LDYgKzU1OSw2MCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIHZvaWQgYnEyMHo3NV9leHRlcm5hbF9wb3dlcl9jaGFuZ2VkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKK3sKKwlzdHJ1Y3QgYnEyMHo3NV9pbmZvICpicTIwejc1X2RldmljZTsKKworCWJxMjB6NzVfZGV2aWNlID0gY29udGFpbmVyX29mKHBzeSwgc3RydWN0IGJxMjB6NzVfaW5mbywgcG93ZXJfc3VwcGx5KTsKKworCWlmIChicTIwejc1X2RldmljZS0+aWdub3JlX2NoYW5nZXMgPiAwKSB7CisJCWJxMjB6NzVfZGV2aWNlLT5pZ25vcmVfY2hhbmdlcy0tOworCQlyZXR1cm47CisJfQorCisJLyogY2FuY2VsIG91dHN0YW5kaW5nIHdvcmsgKi8KKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmJxMjB6NzVfZGV2aWNlLT53b3JrKTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYnEyMHo3NV9kZXZpY2UtPndvcmssIEhaKTsKKwlicTIwejc1X2RldmljZS0+cG9sbF90aW1lID0gYnEyMHo3NV9kZXZpY2UtPnBkYXRhLT5wb2xsX3JldHJ5X2NvdW50OworfQorCitzdGF0aWMgdm9pZCBicTIwejc1X2RlbGF5ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGJxMjB6NzVfaW5mbyAqYnEyMHo3NV9kZXZpY2U7CisJczMyIHJldDsKKworCWJxMjB6NzVfZGV2aWNlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBicTIwejc1X2luZm8sIHdvcmsud29yayk7CisKKwlyZXQgPSBicTIwejc1X3JlYWRfd29yZF9kYXRhKGJxMjB6NzVfZGV2aWNlLT5jbGllbnQsCisJCQkJICAgICBicTIwejc1X2RhdGFbUkVHX1NUQVRVU10uYWRkcik7CisJLyogaWYgdGhlIHJlYWQgZmFpbGVkLCBnaXZlIHVwIG9uIHRoaXMgd29yayAqLworCWlmIChyZXQgPCAwKSB7CisJCWJxMjB6NzVfZGV2aWNlLT5wb2xsX3RpbWUgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHJldCAmIEJBVFRFUllfRlVMTF9DSEFSR0VEKQorCQlyZXQgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7CisJZWxzZSBpZiAocmV0ICYgQkFUVEVSWV9GVUxMX0RJU0NIQVJHRUQpCisJCXJldCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCWVsc2UgaWYgKHJldCAmIEJBVFRFUllfRElTQ0hBUkdJTkcpCisJCXJldCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7CisJZWxzZQorCQlyZXQgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCisJaWYgKGJxMjB6NzVfZGV2aWNlLT5sYXN0X3N0YXRlICE9IHJldCkgeworCQlicTIwejc1X2RldmljZS0+cG9sbF90aW1lID0gMDsKKwkJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmJxMjB6NzVfZGV2aWNlLT5wb3dlcl9zdXBwbHkpOworCQlyZXR1cm47CisJfQorCWlmIChicTIwejc1X2RldmljZS0+cG9sbF90aW1lID4gMCkgeworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJxMjB6NzVfZGV2aWNlLT53b3JrLCBIWik7CisJCWJxMjB6NzVfZGV2aWNlLT5wb2xsX3RpbWUtLTsKKwkJcmV0dXJuOworCX0KK30KKwogc3RhdGljIGludCBfX2RldmluaXQgYnEyMHo3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTU2Niw2ICs2MzQsMTMgQEAKIAlicTIwejc1X2RldmljZS0+cG93ZXJfc3VwcGx5Lm51bV9wcm9wZXJ0aWVzID0KIAkJQVJSQVlfU0laRShicTIwejc1X3Byb3BlcnRpZXMpOwogCWJxMjB6NzVfZGV2aWNlLT5wb3dlcl9zdXBwbHkuZ2V0X3Byb3BlcnR5ID0gYnEyMHo3NV9nZXRfcHJvcGVydHk7CisJLyogaWdub3JlIGZpcnN0IG5vdGlmaWNhdGlvbiBvZiBleHRlcm5hbCBjaGFuZ2UsIGl0IGlzIGdlbmVyYXRlZAorCSAqIGZyb20gdGhlIHBvd2VyX3N1cHBseV9yZWdpc3RlciBjYWxsIGJhY2sKKwkgKi8KKwlicTIwejc1X2RldmljZS0+aWdub3JlX2NoYW5nZXMgPSAxOworCWJxMjB6NzVfZGV2aWNlLT5sYXN0X3N0YXRlID0gUE9XRVJfU1VQUExZX1NUQVRVU19VTktOT1dOOworCWJxMjB6NzVfZGV2aWNlLT5wb3dlcl9zdXBwbHkuZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZCA9CisJCWJxMjB6NzVfZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZDsKIAogCWlmIChwZGF0YSkgewogCQlicTIwejc1X2RldmljZS0+Z3Bpb19kZXRlY3QgPQpAQCAtNjI1LDYgKzcwMCwxMCBAQAogCWRldl9pbmZvKCZjbGllbnQtPmRldiwKIAkJIiVzOiBiYXR0ZXJ5IGdhcyBnYXVnZSBkZXZpY2UgcmVnaXN0ZXJlZFxuIiwgY2xpZW50LT5uYW1lKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZicTIwejc1X2RldmljZS0+d29yaywgYnEyMHo3NV9kZWxheWVkX3dvcmspOworCisJYnEyMHo3NV9kZXZpY2UtPmVuYWJsZV9kZXRlY3Rpb24gPSB0cnVlOworCiAJcmV0dXJuIDA7CiAKIGV4aXRfcHN1cHBseToKQEAgLTY0OCw2ICs3MjcsOSBAQAogCQlncGlvX2ZyZWUoYnEyMHo3NV9kZXZpY2UtPnBkYXRhLT5iYXR0ZXJ5X2RldGVjdCk7CiAKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmYnEyMHo3NV9kZXZpY2UtPnBvd2VyX3N1cHBseSk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmJxMjB6NzVfZGV2aWNlLT53b3JrKTsKKwogCWtmcmVlKGJxMjB6NzVfZGV2aWNlKTsKIAlicTIwejc1X2RldmljZSA9IE5VTEw7CiAKQEAgLTY2MSw2ICs3NDMsOSBAQAogCXN0cnVjdCBicTIwejc1X2luZm8gKmJxMjB6NzVfZGV2aWNlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJczMyIHJldDsKIAorCWlmIChicTIwejc1X2RldmljZS0+cG9sbF90aW1lID4gMCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZicTIwejc1X2RldmljZS0+d29yayk7CisKIAkvKiB3cml0ZSB0byBtYW51ZmFjdHVyZXIgYWNjZXNzIHdpdGggc2xlZXAgY29tbWFuZCAqLwogCXJldCA9IGJxMjB6NzVfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwKIAkJYnEyMHo3NV9kYXRhW1JFR19NQU5VRkFDVFVSRVJfREFUQV0uYWRkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZ3Bpby1jaGFyZ2VyLmMgYi9kcml2ZXJzL3Bvd2VyL2dwaW8tY2hhcmdlci5jCmluZGV4IDcxOGYyYzUuLmE2NGI4ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvZ3Bpby1jaGFyZ2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci9ncGlvLWNoYXJnZXIuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCXJldCA9IHJlcXVlc3RfYW55X2NvbnRleHRfaXJxKGlycSwgZ3Bpb19jaGFyZ2VyX2lycSwKIAkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIGNoYXJnZXIpOwotCQlpZiAocmV0KQorCQlpZiAocmV0IDwgMCkKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnE6ICVkXG4iLCByZXQpOwogCQllbHNlCiAJCQlncGlvX2NoYXJnZXItPmlycSA9IGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvbWF4MTcwNDJfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9tYXgxNzA0Ml9iYXR0ZXJ5LmMKaW5kZXggYzVjODgwNS4uOThiZmFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9tYXgxNzA0Ml9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9tYXgxNzA0Ml9iYXR0ZXJ5LmMKQEAgLTI5LDc0ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXIvbWF4MTcwNDJfYmF0dGVyeS5oPgogCi1lbnVtIG1heDE3MDQyX3JlZ2lzdGVyIHsKLQlNQVgxNzA0Ml9TVEFUVVMJCT0gMHgwMCwKLQlNQVgxNzA0Ml9WQUxSVF9UaAk9IDB4MDEsCi0JTUFYMTcwNDJfVEFMUlRfVGgJPSAweDAyLAotCU1BWDE3MDQyX1NBTFJUX1RoCT0gMHgwMywKLQlNQVgxNzA0Ml9BdFJhdGUJCT0gMHgwNCwKLQlNQVgxNzA0Ml9SZXBDYXAJCT0gMHgwNSwKLQlNQVgxNzA0Ml9SZXBTT0MJCT0gMHgwNiwKLQlNQVgxNzA0Ml9BZ2UJCT0gMHgwNywKLQlNQVgxNzA0Ml9URU1QCQk9IDB4MDgsCi0JTUFYMTcwNDJfVkNFTEwJCT0gMHgwOSwKLQlNQVgxNzA0Ml9DdXJyZW50CT0gMHgwQSwKLQlNQVgxNzA0Ml9BdmdDdXJyZW50CT0gMHgwQiwKLQlNQVgxNzA0Ml9RcmVzaWR1YWwJPSAweDBDLAotCU1BWDE3MDQyX1NPQwkJPSAweDBELAotCU1BWDE3MDQyX0F2U09DCQk9IDB4MEUsCi0JTUFYMTcwNDJfUmVtQ2FwCQk9IDB4MEYsCi0JTUFYMTc0MDJfRnVsbENBUAk9IDB4MTAsCi0JTUFYMTcwNDJfVFRFCQk9IDB4MTEsCi0JTUFYMTcwNDJfVl9lbXB0eQk9IDB4MTIsCi0KLQlNQVgxNzA0Ml9SU0xPVwkJPSAweDE0LAotCi0JTUFYMTcwNDJfQXZnVEEJCT0gMHgxNiwKLQlNQVgxNzA0Ml9DeWNsZXMJCT0gMHgxNywKLQlNQVgxNzA0Ml9EZXNpZ25DYXAJPSAweDE4LAotCU1BWDE3MDQyX0F2Z1ZDRUxMCT0gMHgxOSwKLQlNQVgxNzA0Ml9NaW5NYXhUZW1wCT0gMHgxQSwKLQlNQVgxNzA0Ml9NaW5NYXhWb2x0CT0gMHgxQiwKLQlNQVgxNzA0Ml9NaW5NYXhDdXJyCT0gMHgxQywKLQlNQVgxNzA0Ml9DT05GSUcJCT0gMHgxRCwKLQlNQVgxNzA0Ml9JQ0hHVGVybQk9IDB4MUUsCi0JTUFYMTcwNDJfQXZDYXAJCT0gMHgxRiwKLQlNQVgxNzA0Ml9NYW5OYW1lCT0gMHgyMCwKLQlNQVgxNzA0Ml9EZXZOYW1lCT0gMHgyMSwKLQlNQVgxNzA0Ml9EZXZDaGVtCT0gMHgyMiwKLQotCU1BWDE3MDQyX1RlbXBOb20JPSAweDI0LAotCU1BWDE3MDQyX1RlbXBDb2xkCT0gMHgyNSwKLQlNQVgxNzA0Ml9UZW1wSG90CT0gMHgyNiwKLQlNQVgxNzA0Ml9BSU4JCT0gMHgyNywKLQlNQVgxNzA0Ml9MZWFybkNGRwk9IDB4MjgsCi0JTUFYMTcwNDJfU0hGVENGRwk9IDB4MjksCi0JTUFYMTcwNDJfUmVsYXhDRkcJPSAweDJBLAotCU1BWDE3MDQyX01pc2NDRkcJPSAweDJCLAotCU1BWDE3MDQyX1RHQUlOCQk9IDB4MkMsCi0JTUF4MTcwNDJfVE9GRgkJPSAweDJELAotCU1BWDE3MDQyX0NHQUlOCQk9IDB4MkUsCi0JTUFYMTcwNDJfQ09GRgkJPSAweDJGLAotCi0JTUFYMTcwNDJfUV9lbXB0eQk9IDB4MzMsCi0JTUFYMTcwNDJfVF9lbXB0eQk9IDB4MzQsCi0KLQlNQVgxNzA0Ml9SQ09NUDAJCT0gMHgzOCwKLQlNQVgxNzA0Ml9UZW1wQ28JCT0gMHgzOSwKLQlNQVgxNzA0Ml9SeAkJPSAweDNBLAotCU1BWDE3MDQyX1RfZW1wdHkwCT0gMHgzQiwKLQlNQVgxNzA0Ml9UYXNrUGVyaW9kCT0gMHgzQywKLQlNQVgxNzA0Ml9GU1RBVAkJPSAweDNELAotCi0JTUFYMTcwNDJfU0hETlRJTUVSCT0gMHgzRiwKLQotCU1BWDE3MDQyX1ZGUmVtQ2FwCT0gMHg0QSwKLQotCU1BWDE3MDQyX1FICQk9IDB4NEQsCi0JTUFYMTcwNDJfUUwJCT0gMHg0RSwKLX07Ci0KIHN0cnVjdCBtYXgxNzA0Ml9jaGlwIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsKQEAgLTEyMywxMCArNTUsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBtYXgxNzA0Ml9zZXRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIHN0cnVjdCBtYXgxNzA0Ml9yZWdfZGF0YSAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltYXgxNzA0Ml93cml0ZV9yZWcoY2xpZW50LCBkYXRhW2ldLmFkZHIsIGRhdGFbaV0uZGF0YSk7Cit9CisKIHN0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBtYXgxNzA0Ml9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DWUNMRV9DT1VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR04sCiAJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCiAJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9BVkcsCiAJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsCisJUE9XRVJfU1VQUExZX1BST1BfVEVNUCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX0FWRywKIH07CiAKIHN0YXRpYyBpbnQgbWF4MTcwNDJfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKQEAgLTEzNyw2ICs4NiwzMCBAQAogCQkJCXN0cnVjdCBtYXgxNzA0Ml9jaGlwLCBiYXR0ZXJ5KTsKIAogCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQlNQVgxNzA0Ml9TVEFUVVMpOworCQlpZiAodmFsLT5pbnR2YWwgJiBNQVgxNzA0Ml9TVEFUVVNfQmF0dEFic2VudCkKKwkJCXZhbC0+aW50dmFsID0gMDsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSAxOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NZQ0xFX0NPVU5UOgorCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQlNQVgxNzA0Ml9DeWNsZXMpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUFYOgorCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQlNQVgxNzA0Ml9NaW5NYXhWb2x0KTsKKwkJdmFsLT5pbnR2YWwgPj49IDg7CisJCXZhbC0+aW50dmFsICo9IDIwMDAwOyAvKiBVbml0cyBvZiBMU0IgPSAyMG1WICovCisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOOgorCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQlNQVgxNzA0Ml9WX2VtcHR5KTsKKwkJdmFsLT5pbnR2YWwgPj49IDc7CisJCXZhbC0+aW50dmFsICo9IDEwMDAwOyAvKiBVbml0cyBvZiBMU0IgPSAxMG1WICovCisJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CiAJCXZhbC0+aW50dmFsID0gbWF4MTcwNDJfcmVhZF9yZWcoY2hpcC0+Y2xpZW50LAogCQkJCU1BWDE3MDQyX1ZDRUxMKSAqIDgzOyAvKiAxMDAwIC8gMTIgPSA4MyAqLwpAQCAtMTQ5LDYgKzEyMiw1NyBAQAogCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKIAkJCQlNQVgxNzA0Ml9TT0MpIC8gMjU2OwogCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMOgorCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQlNQVgxNzA0Ml9SZXBTT0MpOworCQlpZiAoKHZhbC0+aW50dmFsIC8gMjU2KSA+PSBNQVgxNzA0Ml9CQVRURVJZX0ZVTEwpCisJCQl2YWwtPmludHZhbCA9IDE7CisJCWVsc2UgaWYgKHZhbC0+aW50dmFsID49IDApCisJCQl2YWwtPmludHZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUDoKKwkJdmFsLT5pbnR2YWwgPSBtYXgxNzA0Ml9yZWFkX3JlZyhjaGlwLT5jbGllbnQsCisJCQkJTUFYMTcwNDJfVEVNUCk7CisJCS8qIFRoZSB2YWx1ZSBpcyBzaWduZWQuICovCisJCWlmICh2YWwtPmludHZhbCAmIDB4ODAwMCkgeworCQkJdmFsLT5pbnR2YWwgPSAoMHg3ZmZmICYgfnZhbC0+aW50dmFsKSArIDE7CisJCQl2YWwtPmludHZhbCAqPSAtMTsKKwkJfQorCQkvKiBUaGUgdmFsdWUgaXMgY29udmVydGVkIGludG8gZGVjaS1jZW50aWdyYWRlIHNjYWxlICovCisJCS8qIFVuaXRzIG9mIExTQiA9IDEgLyAyNTYgZGVncmVlIENlbHNpdXMgKi8KKwkJdmFsLT5pbnR2YWwgPSB2YWwtPmludHZhbCAqIDEwIC8gMjU2OworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQlpZiAoY2hpcC0+cGRhdGEtPmVuYWJsZV9jdXJyZW50X3NlbnNlKSB7CisJCQl2YWwtPmludHZhbCA9IG1heDE3MDQyX3JlYWRfcmVnKGNoaXAtPmNsaWVudCwKKwkJCQkJTUFYMTcwNDJfQ3VycmVudCk7CisJCQlpZiAodmFsLT5pbnR2YWwgJiAweDgwMDApIHsKKwkJCQkvKiBOZWdhdGl2ZSAqLworCQkJCXZhbC0+aW50dmFsID0gfnZhbC0+aW50dmFsICYgMHg3ZmZmOworCQkJCXZhbC0+aW50dmFsKys7CisJCQkJdmFsLT5pbnR2YWwgKj0gLTE7CisJCQl9CisJCQl2YWwtPmludHZhbCA+Pj0gNDsKKwkJCXZhbC0+aW50dmFsICo9IDEwMDAwMDAgKiAyNSAvIGNoaXAtPnBkYXRhLT5yX3NuczsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9BVkc6CisJCWlmIChjaGlwLT5wZGF0YS0+ZW5hYmxlX2N1cnJlbnRfc2Vuc2UpIHsKKwkJCXZhbC0+aW50dmFsID0gbWF4MTcwNDJfcmVhZF9yZWcoY2hpcC0+Y2xpZW50LAorCQkJCQlNQVgxNzA0Ml9BdmdDdXJyZW50KTsKKwkJCWlmICh2YWwtPmludHZhbCAmIDB4ODAwMCkgeworCQkJCS8qIE5lZ2F0aXZlICovCisJCQkJdmFsLT5pbnR2YWwgPSB+dmFsLT5pbnR2YWwgJiAweDdmZmY7CisJCQkJdmFsLT5pbnR2YWwrKzsKKwkJCQl2YWwtPmludHZhbCAqPSAtMTsKKwkJCX0KKwkJCXZhbC0+aW50dmFsICo9IDE1NjI1MDAgLyBjaGlwLT5wZGF0YS0+cl9zbnM7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xODAsMTggKzIwNCwzMCBAQAogCWNoaXAtPmJhdHRlcnkucHJvcGVydGllcwk9IG1heDE3MDQyX2JhdHRlcnlfcHJvcHM7CiAJY2hpcC0+YmF0dGVyeS5udW1fcHJvcGVydGllcwk9IEFSUkFZX1NJWkUobWF4MTcwNDJfYmF0dGVyeV9wcm9wcyk7CiAKKwkvKiBXaGVuIGN1cnJlbnQgaXMgbm90IG1lYXN1cmVkLAorCSAqIENVUlJFTlRfTk9XIGFuZCBDVVJSRU5UX0FWRyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpbnZpc2libGUuICovCisJaWYgKCFjaGlwLT5wZGF0YS0+ZW5hYmxlX2N1cnJlbnRfc2Vuc2UpCisJCWNoaXAtPmJhdHRlcnkubnVtX3Byb3BlcnRpZXMgLT0gMjsKKwogCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmY2xpZW50LT5kZXYsICZjaGlwLT5iYXR0ZXJ5KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkOiBwb3dlciBzdXBwbHkgcmVnaXN0ZXJcbiIpOwotCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAkJa2ZyZWUoY2hpcCk7CiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogSW5pdGlhbGl6ZSByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIHZhbHVlcyBmcm9tIHRoZSBwbGF0Zm9ybSBkYXRhICovCisJaWYgKGNoaXAtPnBkYXRhLT5pbml0X2RhdGEpCisJCW1heDE3MDQyX3NldF9yZWcoY2xpZW50LCBjaGlwLT5wZGF0YS0+aW5pdF9kYXRhLAorCQkJCSBjaGlwLT5wZGF0YS0+bnVtX2luaXRfZGF0YSk7CisKIAlpZiAoIWNoaXAtPnBkYXRhLT5lbmFibGVfY3VycmVudF9zZW5zZSkgewogCQltYXgxNzA0Ml93cml0ZV9yZWcoY2xpZW50LCBNQVgxNzA0Ml9DR0FJTiwgMHgwMDAwKTsKIAkJbWF4MTcwNDJfd3JpdGVfcmVnKGNsaWVudCwgTUFYMTcwNDJfTWlzY0NGRywgMHgwMDAzKTsKIAkJbWF4MTcwNDJfd3JpdGVfcmVnKGNsaWVudCwgTUFYMTcwNDJfTGVhcm5DRkcsIDB4MDAwNyk7CisJfSBlbHNlIHsKKwkJaWYgKGNoaXAtPnBkYXRhLT5yX3NucyA9PSAwKQorCQkJY2hpcC0+cGRhdGEtPnJfc25zID0gTUFYMTcwNDJfREVGQVVMVF9TTlNfUkVTSVNUT1I7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMDIsNyArMjM4LDYgQEAKIAlzdHJ1Y3QgbWF4MTcwNDJfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmNoaXAtPmJhdHRlcnkpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9tYXg4OTAzX2NoYXJnZXIuYyBiL2RyaXZlcnMvcG93ZXIvbWF4ODkwM19jaGFyZ2VyLmMKaW5kZXggMzNmZjBlMy4uYTliMDIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9tYXg4OTAzX2NoYXJnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL21heDg5MDNfY2hhcmdlci5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG93ZXIvbWF4ODkwM19jaGFyZ2VyLmg+CiAKIHN0cnVjdCBtYXg4OTAzX2RhdGEgewotCXN0cnVjdCBtYXg4OTAzX3BkYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbWF4ODkwM19wZGF0YSBwZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHBvd2VyX3N1cHBseSBwc3k7CiAJYm9vbCBmYXVsdDsKQEAgLTUyLDggKzUyLDggQEAKIAlzd2l0Y2ggKHBzcCkgewogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgogCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKLQkJaWYgKGRhdGEtPnBkYXRhLT5jaGcpIHsKLQkJCWlmIChncGlvX2dldF92YWx1ZShkYXRhLT5wZGF0YS0+Y2hnKSA9PSAwKQorCQlpZiAoZGF0YS0+cGRhdGEuY2hnKSB7CisJCQlpZiAoZ3Bpb19nZXRfdmFsdWUoZGF0YS0+cGRhdGEuY2hnKSA9PSAwKQogCQkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lORzsKIAkJCWVsc2UgaWYgKGRhdGEtPnVzYl9pbiB8fCBkYXRhLT50YV9pbikKIAkJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGlycXJldHVybl90IG1heDg5MDNfZGNpbihpbnQgaXJxLCB2b2lkICpfZGF0YSkKIHsKIAlzdHJ1Y3QgbWF4ODkwM19kYXRhICpkYXRhID0gX2RhdGE7Ci0Jc3RydWN0IG1heDg5MDNfcGRhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJc3RydWN0IG1heDg5MDNfcGRhdGEgKnBkYXRhID0gJmRhdGEtPnBkYXRhOwogCWJvb2wgdGFfaW47CiAJZW51bSBwb3dlcl9zdXBwbHlfdHlwZSBvbGRfdHlwZTsKIApAQCAtMTIxLDcgKzEyMSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbWF4ODkwM191c2JpbihpbnQgaXJxLCB2b2lkICpfZGF0YSkKIHsKIAlzdHJ1Y3QgbWF4ODkwM19kYXRhICpkYXRhID0gX2RhdGE7Ci0Jc3RydWN0IG1heDg5MDNfcGRhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJc3RydWN0IG1heDg5MDNfcGRhdGEgKnBkYXRhID0gJmRhdGEtPnBkYXRhOwogCWJvb2wgdXNiX2luOwogCWVudW0gcG93ZXJfc3VwcGx5X3R5cGUgb2xkX3R5cGU7CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogc3RhdGljIGlycXJldHVybl90IG1heDg5MDNfZmF1bHQoaW50IGlycSwgdm9pZCAqX2RhdGEpCiB7CiAJc3RydWN0IG1heDg5MDNfZGF0YSAqZGF0YSA9IF9kYXRhOwotCXN0cnVjdCBtYXg4OTAzX3BkYXRhICpwZGF0YSA9IGRhdGEtPnBkYXRhOworCXN0cnVjdCBtYXg4OTAzX3BkYXRhICpwZGF0YSA9ICZkYXRhLT5wZGF0YTsKIAlib29sIGZhdWx0OwogCiAJZmF1bHQgPSBncGlvX2dldF92YWx1ZShwZGF0YS0+Zmx0KSA/IGZhbHNlIDogdHJ1ZTsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQlkZXZfZXJyKGRldiwgIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRhdGEtPnBkYXRhID0gcGRhdGE7CisJbWVtY3B5KCZkYXRhLT5wZGF0YSwgcGRhdGEsIHNpemVvZihzdHJ1Y3QgbWF4ODkwM19wZGF0YSkpOwogCWRhdGEtPmRldiA9IGRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIApAQCAtMzQ5LDcgKzM0OSw3IEBACiAJc3RydWN0IG1heDg5MDNfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKGRhdGEpIHsKLQkJc3RydWN0IG1heDg5MDNfcGRhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJCXN0cnVjdCBtYXg4OTAzX3BkYXRhICpwZGF0YSA9ICZkYXRhLT5wZGF0YTsKIAogCQlpZiAocGRhdGEtPmZsdCkKIAkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5mbHQpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvbWF4ODk5N19jaGFyZ2VyLmMgYi9kcml2ZXJzL3Bvd2VyL21heDg5OTdfY2hhcmdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzUwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL21heDg5OTdfY2hhcmdlci5jCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogbWF4ODk5N19jaGFyZ2VyLmMgLSBQb3dlciBzdXBwbHkgY29uc3VtZXIgZHJpdmVyIGZvciB0aGUgTWF4aW0gODk5Ny84OTY2CisgKgorICogIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiAgTXl1bmdKb28gSGFtIDxteXVuZ2pvby5oYW1Ac2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21heDg5OTcuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODk5Ny1wcml2YXRlLmg+CisKK3N0cnVjdCBjaGFyZ2VyX2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWF4ODk5N19kZXYgKmlvZGV2OworCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0dGVyeTsKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBtYXg4OTk3X2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsIC8qICJGVUxMIiBvciAiTk9UIEZVTEwiIG9ubHkuICovCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwgLyogdGhlIHByZXNlbmNlIG9mIGJhdHRlcnkgKi8KKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsIC8qIGNoYXJnZXIgaXMgYWN0aXZlIG9yIG5vdCAqLworfTsKKworLyogTm90ZSB0aGF0IHRoZSBjaGFyZ2VyIGNvbnRyb2wgaXMgZG9uZSBieSBhIGN1cnJlbnQgcmVndWxhdG9yICJDSEFSR0VSIiAqLworc3RhdGljIGludCBtYXg4OTk3X2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBjaGFyZ2VyX2RhdGEgKmNoYXJnZXIgPSBjb250YWluZXJfb2YocHN5LAorCQkJc3RydWN0IGNoYXJnZXJfZGF0YSwgYmF0dGVyeSk7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNoYXJnZXItPmlvZGV2LT5pMmM7CisJaW50IHJldDsKKwl1OCByZWc7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgorCQl2YWwtPmludHZhbCA9IDA7CisJCXJldCA9IG1heDg5OTdfcmVhZF9yZWcoaTJjLCBNQVg4OTk3X1JFR19TVEFUVVM0LCAmcmVnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlmICgocmVnICYgKDEgPDwgMCkpID09IDB4MSkKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19GVUxMOworCisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoKKwkJdmFsLT5pbnR2YWwgPSAwOworCQlyZXQgPSBtYXg4OTk3X3JlYWRfcmVnKGkyYywgTUFYODk5N19SRUdfU1RBVFVTNCwgJnJlZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlpZiAoKHJlZyAmICgxIDw8IDIpKSA9PSAweDApCisJCQl2YWwtPmludHZhbCA9IDE7CisKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXZhbC0+aW50dmFsID0gMDsKKwkJcmV0ID0gbWF4ODk5N19yZWFkX3JlZyhpMmMsIE1BWDg5OTdfUkVHX1NUQVRVUzQsICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJLyogRENJTk9LICovCisJCWlmIChyZWcgJiAoMSA8PCAxKSkKKwkJCXZhbC0+aW50dmFsID0gMTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgbWF4ODk5N19iYXR0ZXJ5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGNoYXJnZXJfZGF0YSAqY2hhcmdlcjsKKwlzdHJ1Y3QgbWF4ODk5N19kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBtYXg4OTk3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShpb2Rldi0+ZGV2KTsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBkYXRhLT5lb2NfbUEpIHsKKwkJdTggdmFsID0gKHBkYXRhLT5lb2NfbUEgLSA1MCkgLyAxMDsKKwkJaWYgKHZhbCA8IDApCisJCQl2YWwgPSAwOworCQlpZiAodmFsID4gMHhmKQorCQkJdmFsID0gMHhmOworCisJCXJldCA9IG1heDg5OTdfdXBkYXRlX3JlZyhpb2Rldi0+aTJjLAorCQkJCU1BWDg5OTdfUkVHX01CQ0NUUkw1LCB2YWwsIDB4Zik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgdXNlIGkyYyBidXMuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHBkYXRhLT50aW1lb3V0KSB7CisJY2FzZSA1OgorCQlyZXQgPSBtYXg4OTk3X3VwZGF0ZV9yZWcoaW9kZXYtPmkyYywgTUFYODk5N19SRUdfTUJDQ1RSTDEsCisJCQkJMHgyIDw8IDQsIDB4NyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlyZXQgPSBtYXg4OTk3X3VwZGF0ZV9yZWcoaW9kZXYtPmkyYywgTUFYODk5N19SRUdfTUJDQ1RSTDEsCisJCQkJMHgzIDw8IDQsIDB4NyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlyZXQgPSBtYXg4OTk3X3VwZGF0ZV9yZWcoaW9kZXYtPmkyYywgTUFYODk5N19SRUdfTUJDQ1RSTDEsCisJCQkJMHg0IDw8IDQsIDB4NyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlyZXQgPSBtYXg4OTk3X3VwZGF0ZV9yZWcoaW9kZXYtPmkyYywgTUFYODk5N19SRUdfTUJDQ1RSTDEsCisJCQkJMHg3IDw8IDQsIDB4NyA8PCA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5jb3JyZWN0IHRpbWVvdXQgdmFsdWUgKCVkKVxuIiwKKwkJCQlwZGF0YS0+dGltZW91dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgdXNlIGkyYyBidXMuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljaGFyZ2VyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoYXJnZXJfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChjaGFyZ2VyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGFyZ2VyKTsKKworCWNoYXJnZXItPmJhdHRlcnkubmFtZSA9ICJtYXg4OTk3X3BtaWMiOworCWNoYXJnZXItPmJhdHRlcnkudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlk7CisJY2hhcmdlci0+YmF0dGVyeS5nZXRfcHJvcGVydHkgPSBtYXg4OTk3X2JhdHRlcnlfZ2V0X3Byb3BlcnR5OworCWNoYXJnZXItPmJhdHRlcnkucHJvcGVydGllcyA9IG1heDg5OTdfYmF0dGVyeV9wcm9wczsKKwljaGFyZ2VyLT5iYXR0ZXJ5Lm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShtYXg4OTk3X2JhdHRlcnlfcHJvcHMpOworCisJY2hhcmdlci0+ZGV2ID0gJnBkZXYtPmRldjsKKwljaGFyZ2VyLT5pb2RldiA9IGlvZGV2OworCisJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjaGFyZ2VyLT5iYXR0ZXJ5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZDogcG93ZXIgc3VwcGx5IHJlZ2lzdGVyXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJa2ZyZWUoY2hhcmdlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWF4ODk5N19iYXR0ZXJ5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjaGFyZ2VyX2RhdGEgKmNoYXJnZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZjaGFyZ2VyLT5iYXR0ZXJ5KTsKKwlrZnJlZShjaGFyZ2VyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbWF4ODk5N19iYXR0ZXJ5X2lkW10gPSB7CisJeyAibWF4ODk5Ny1iYXR0ZXJ5IiwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4ODk5N19iYXR0ZXJ5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtYXg4OTk3LWJhdHRlcnkiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1heDg5OTdfYmF0dGVyeV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWF4ODk5N19iYXR0ZXJ5X3JlbW92ZSksCisJLmlkX3RhYmxlID0gbWF4ODk5N19iYXR0ZXJ5X2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODk5N19iYXR0ZXJ5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXg4OTk3X2JhdHRlcnlfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtYXg4OTk3X2JhdHRlcnlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg4OTk3X2JhdHRlcnlfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg4OTk3X2JhdHRlcnlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDg5OTdfYmF0dGVyeV9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVhJTSA4OTk3Lzg5NjYgYmF0dGVyeSBjb250cm9sIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTXl1bmdKb28gSGFtIDxteXVuZ2pvby5oYW1Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL21heDg5OThfY2hhcmdlci5jIGIvZHJpdmVycy9wb3dlci9tYXg4OTk4X2NoYXJnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjhlZmFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9tYXg4OTk4X2NoYXJnZXIuYwpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIG1heDg5OThfY2hhcmdlci5jIC0gUG93ZXIgc3VwcGx5IGNvbnN1bWVyIGRyaXZlciBmb3IgdGhlIE1heGltIDg5OTgvTFAzOTc0CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBNeXVuZ0pvbyBIYW0gPG15dW5nam9vLmhhbUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODk5OC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTk4LXByaXZhdGUuaD4KKworc3RydWN0IG1heDg5OThfYmF0dGVyeV9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG1heDg5OThfZGV2ICppb2RldjsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGJhdHRlcnk7Cit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgbWF4ODk5OF9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwgLyogdGhlIHByZXNlbmNlIG9mIGJhdHRlcnkgKi8KKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsIC8qIGNoYXJnZXIgaXMgYWN0aXZlIG9yIG5vdCAqLworfTsKKworLyogTm90ZSB0aGF0IHRoZSBjaGFyZ2VyIGNvbnRyb2wgaXMgZG9uZSBieSBhIGN1cnJlbnQgcmVndWxhdG9yICJDSEFSR0VSIiAqLworc3RhdGljIGludCBtYXg4OTk4X2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBtYXg4OTk4X2JhdHRlcnlfZGF0YSAqbWF4ODk5OCA9IGNvbnRhaW5lcl9vZihwc3ksCisJCQlzdHJ1Y3QgbWF4ODk5OF9iYXR0ZXJ5X2RhdGEsIGJhdHRlcnkpOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBtYXg4OTk4LT5pb2Rldi0+aTJjOworCWludCByZXQ7CisJdTggcmVnOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXJldCA9IG1heDg5OThfcmVhZF9yZWcoaTJjLCBNQVg4OTk4X1JFR19TVEFUVVMyLCAmcmVnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWlmIChyZWcgJiAoMSA8PCA0KSkKKwkJCXZhbC0+aW50dmFsID0gMDsKKwkJZWxzZQorCQkJdmFsLT5pbnR2YWwgPSAxOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJcmV0ID0gbWF4ODk5OF9yZWFkX3JlZyhpMmMsIE1BWDg5OThfUkVHX1NUQVRVUzIsICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJlZyAmICgxIDw8IDMpKQorCQkJdmFsLT5pbnR2YWwgPSAwOworCQllbHNlCisJCQl2YWwtPmludHZhbCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBtYXg4OTk4X2JhdHRlcnlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4ODk5OF9kZXYgKmlvZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBtYXg4OTk4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShpb2Rldi0+ZGV2KTsKKwlzdHJ1Y3QgbWF4ODk5OF9iYXR0ZXJ5X2RhdGEgKm1heDg5OTg7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycihwZGV2LT5kZXYucGFyZW50LCAiTm8gcGxhdGZvcm0gaW5pdCBkYXRhIHN1cHBsaWVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWF4ODk5OCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg4OTk4X2JhdHRlcnlfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghbWF4ODk5OCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltYXg4OTk4LT5kZXYgPSAmcGRldi0+ZGV2OworCW1heDg5OTgtPmlvZGV2ID0gaW9kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWF4ODk5OCk7CisJaTJjID0gbWF4ODk5OC0+aW9kZXYtPmkyYzsKKworCS8qIFNldHVwICJFbmQgb2YgQ2hhcmdlIiAqLworCS8qIElmIEVPQyB2YWx1ZSBlcXVhbHMgMCwKKwkgKiByZW1haW4gdmFsdWUgc2V0IGZyb20gYm9vdGxvYWRlciBvciBkZWZhdWx0IHZhbHVlICovCisJaWYgKHBkYXRhLT5lb2MgPj0gMTAgJiYgcGRhdGEtPmVvYyA8PSA0NSkgeworCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMSwKKwkJCQkocGRhdGEtPmVvYyAvIDUgLSAyKSA8PCA1LCAweDcgPDwgNSk7CisJfSBlbHNlIGlmIChwZGF0YS0+ZW9jID09IDApIHsKKwkJZGV2X2RiZyhtYXg4OTk4LT5kZXYsCisJCQkiRU9DIHZhbHVlIG5vdCBzZXQ6IGxlYXZlIGl0IHVuY2hhbmdlZC5cbiIpOworCX0gZWxzZSB7CisJCWRldl9lcnIobWF4ODk5OC0+ZGV2LCAiSW52YWxpZCBFT0MgdmFsdWVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXR1cCBDaGFyZ2UgUmVzdGFydCBMZXZlbCAqLworCXN3aXRjaCAocGRhdGEtPnJlc3RhcnQpIHsKKwljYXNlIDEwMDoKKwkJbWF4ODk5OF91cGRhdGVfcmVnKGkyYywgTUFYODk5OF9SRUdfQ0hHUjEsIDB4MSA8PCAzLCAweDMgPDwgMyk7CisJCWJyZWFrOworCWNhc2UgMTUwOgorCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMSwgMHgwIDw8IDMsIDB4MyA8PCAzKTsKKwkJYnJlYWs7CisJY2FzZSAyMDA6CisJCW1heDg5OThfdXBkYXRlX3JlZyhpMmMsIE1BWDg5OThfUkVHX0NIR1IxLCAweDIgPDwgMywgMHgzIDw8IDMpOworCQlicmVhazsKKwljYXNlIC0xOgorCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMSwgMHgzIDw8IDMsIDB4MyA8PCAzKTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlkZXZfZGJnKG1heDg5OTgtPmRldiwKKwkJCSJSZXN0YXJ0IExldmVsIG5vdCBzZXQ6IGxlYXZlIGl0IHVuY2hhbmdlZC5cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKG1heDg5OTgtPmRldiwgIkludmFsaWQgUmVzdGFydCBMZXZlbFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFNldHVwIENoYXJnZSBGdWxsIFRpbWVvdXQgKi8KKwlzd2l0Y2ggKHBkYXRhLT50aW1lb3V0KSB7CisJY2FzZSA1OgorCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMiwgMHgwIDw8IDQsIDB4MyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMiwgMHgxIDw8IDQsIDB4MyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQltYXg4OTk4X3VwZGF0ZV9yZWcoaTJjLCBNQVg4OTk4X1JFR19DSEdSMiwgMHgyIDw8IDQsIDB4MyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSAtMToKKwkJbWF4ODk5OF91cGRhdGVfcmVnKGkyYywgTUFYODk5OF9SRUdfQ0hHUjIsIDB4MyA8PCA0LCAweDMgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZGV2X2RiZyhtYXg4OTk4LT5kZXYsCisJCQkiRnVsbCBUaW1lb3V0IG5vdCBzZXQ6IGxlYXZlIGl0IHVuY2hhbmdlZC5cbiIpOworCWRlZmF1bHQ6CisJCWRldl9lcnIobWF4ODk5OC0+ZGV2LCAiSW52YWxpZCBGdWxsIFRpbWVvdXQgdmFsdWVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltYXg4OTk4LT5iYXR0ZXJ5Lm5hbWUgPSAibWF4ODk5OF9wbWljIjsKKwltYXg4OTk4LT5iYXR0ZXJ5LnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCW1heDg5OTgtPmJhdHRlcnkuZ2V0X3Byb3BlcnR5ID0gbWF4ODk5OF9iYXR0ZXJ5X2dldF9wcm9wZXJ0eTsKKwltYXg4OTk4LT5iYXR0ZXJ5LnByb3BlcnRpZXMgPSBtYXg4OTk4X2JhdHRlcnlfcHJvcHM7CisJbWF4ODk5OC0+YmF0dGVyeS5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUobWF4ODk5OF9iYXR0ZXJ5X3Byb3BzKTsKKworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcihtYXg4OTk4LT5kZXYsICZtYXg4OTk4LT5iYXR0ZXJ5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobWF4ODk5OC0+ZGV2LCAiZmFpbGVkOiBwb3dlciBzdXBwbHkgcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlrZnJlZShtYXg4OTk4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg4OTk4X2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDg5OThfYmF0dGVyeV9kYXRhICptYXg4OTk4ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmbWF4ODk5OC0+YmF0dGVyeSk7CisJa2ZyZWUobWF4ODk5OCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbWF4ODk5OF9iYXR0ZXJ5X2lkW10gPSB7CisJeyAibWF4ODk5OC1iYXR0ZXJ5IiwgVFlQRV9NQVg4OTk4IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXg4OTk4X2JhdHRlcnlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1heDg5OTgtYmF0dGVyeSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gbWF4ODk5OF9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg4OTk4X2JhdHRlcnlfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBtYXg4OTk4X2JhdHRlcnlfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg4OTk4X2JhdHRlcnlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1heDg5OThfYmF0dGVyeV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQobWF4ODk5OF9iYXR0ZXJ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODk5OF9iYXR0ZXJ5X2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWF4ODk5OF9iYXR0ZXJ5X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4OTk4X2JhdHRlcnlfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTUFYSU0gODk5OCBiYXR0ZXJ5IGNvbnRyb2wgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNeXVuZ0pvbyBIYW0gPG15dW5nam9vLmhhbUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWF4ODk5OC1iYXR0ZXJ5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3MzY19hZGNfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9zM2NfYWRjX2JhdHRlcnkuYwppbmRleCBkMzZjMjg5Li5kMzJkMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3MzY19hZGNfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvczNjX2FkY19iYXR0ZXJ5LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zM2NfYWRjX2JhdHRlcnkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPHBsYXQvYWRjLmg+CiAKQEAgLTI2Niw3ICsyNjcsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgczNjX2FkY19iYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHMzY19hZGNfYmF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzY19hZGNfY2xpZW50CSpjbGllbnQ7CiAJc3RydWN0IHMzY19hZGNfYmF0X3BkYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci90d2w0MDMwX2NoYXJnZXIuYyBiL2RyaXZlcnMvcG93ZXIvdHdsNDAzMF9jaGFyZ2VyLmMKaW5kZXggOTJjMTZlMS4uNTRiOTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci90d2w0MDMwX2NoYXJnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL3R3bDQwMzBfY2hhcmdlci5jCkBAIC02Miw3ICs2Miw3IEBACiAjZGVmaW5lIFRXTDQwMzBfTVNUQVRFQ19DT01QTEVURTQJMHgwZQogCiBzdGF0aWMgYm9vbCBhbGxvd191c2I7Ci1tb2R1bGVfcGFyYW0oYWxsb3dfdXNiLCBib29sLCAxKTsKK21vZHVsZV9wYXJhbShhbGxvd191c2IsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhbGxvd191c2IsICJBbGxvdyBVU0IgY2hhcmdlIGRyYXdpbmcgZGVmYXVsdCBjdXJyZW50Iik7CiAKIHN0cnVjdCB0d2w0MDMwX2JjaSB7CkBAIC00MjUsNyArNDI1LDcgQEAKIHsKIAlzdHJ1Y3QgdHdsNDAzMF9iY2kgKmJjaTsKIAlpbnQgcmV0OwotCWludCByZWc7CisJdTMyIHJlZzsKIAogCWJjaSA9IGt6YWxsb2Moc2l6ZW9mKCpiY2kpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYmNpID09IE5VTEwpCkBAIC00ODYsNyArNDg2LDcgQEAKIAl9CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBub3cuICovCi0JcmVnID0gfihUV0w0MDMwX0lDSEdMT1cgfCBUV0w0MDMwX0lDSEdFT0MgfCBUV0w0MDMwX1RCQVRPUjIgfAorCXJlZyA9IH4odTMyKShUV0w0MDMwX0lDSEdMT1cgfCBUV0w0MDMwX0lDSEdFT0MgfCBUV0w0MDMwX1RCQVRPUjIgfAogCQlUV0w0MDMwX1RCQVRPUjEgfCBUV0w0MDMwX0JBVFNUUyk7CiAJcmV0ID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTLCByZWcsCiAJCQkgICAgICAgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFBKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogCQlnb3RvIGZhaWxfdW5tYXNrX2ludGVycnVwdHM7CiAJfQogCi0JcmVnID0gfihUV0w0MDMwX1ZCQVRPViB8IFRXTDQwMzBfVkJVU09WIHwgVFdMNDAzMF9BQ0NIR09WKTsKKwlyZWcgPSB+KHUzMikoVFdMNDAzMF9WQkFUT1YgfCBUV0w0MDMwX1ZCVVNPViB8IFRXTDQwMzBfQUNDSEdPVik7CiAJcmV0ID0gdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTLCByZWcsCiAJCQkgICAgICAgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJBKTsKIAlpZiAocmV0IDwgMCkKQEAgLTU3Miw3ICs1NzIsNyBAQAogfQogbW9kdWxlX2V4aXQodHdsNDAzMF9iY2lfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkdyYcW+eWRhcyBJZ25vdGFzIik7CitNT0RVTEVfQVVUSE9SKCJHcmHFvnZ5ZGFzIElnbm90YXMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVFdMNDAzMCBCYXR0ZXJ5IENoYXJnZXIgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX2JjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTgzMXhfYmFja3VwLmMgYi9kcml2ZXJzL3Bvd2VyL3dtODMxeF9iYWNrdXAuYwppbmRleCAwZmQxMzBkLi5lNjQ4Y2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3dtODMxeF9iYWNrdXAuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtODMxeF9iYWNrdXAuYwpAQCAtMjIsNiArMjIsNyBAQAogc3RydWN0IHdtODMxeF9iYWNrdXAgewogCXN0cnVjdCB3bTgzMXggKndtODMxeDsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGJhY2t1cDsKKwljaGFyIG5hbWVbMjBdOwogfTsKIAogc3RhdGljIGludCB3bTgzMXhfYmFja3VwX3JlYWRfdm9sdGFnZShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsCkBAIC0xNjMsNiArMTY0LDcgQEAKIHN0YXRpYyBfX2RldmluaXQgaW50IHdtODMxeF9iYWNrdXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqd204MzF4X3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHdtODMxeF9iYWNrdXAgKmRldmRhdGE7CiAJc3RydWN0IHBvd2VyX3N1cHBseSAqYmFja3VwOwogCWludCByZXQ7CkBAIC0xODIsNyArMTg0LDE0IEBACiAJICovCiAJd204MzF4X2NvbmZpZ19iYWNrdXAod204MzF4KTsKIAotCWJhY2t1cC0+bmFtZSA9ICJ3bTgzMXgtYmFja3VwIjsKKwlpZiAod204MzF4X3BkYXRhICYmIHdtODMxeF9wZGF0YS0+d204MzF4X251bSkKKwkJc25wcmludGYoZGV2ZGF0YS0+bmFtZSwgc2l6ZW9mKGRldmRhdGEtPm5hbWUpLAorCQkJICJ3bTgzMXgtYmFja3VwLiVkIiwgd204MzF4X3BkYXRhLT53bTgzMXhfbnVtKTsKKwllbHNlCisJCXNucHJpbnRmKGRldmRhdGEtPm5hbWUsIHNpemVvZihkZXZkYXRhLT5uYW1lKSwKKwkJCSAid204MzF4LWJhY2t1cCIpOworCisJYmFja3VwLT5uYW1lID0gZGV2ZGF0YS0+bmFtZTsKIAliYWNrdXAtPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOwogCWJhY2t1cC0+cHJvcGVydGllcyA9IHdtODMxeF9iYWNrdXBfcHJvcHM7CiAJYmFja3VwLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUod204MzF4X2JhY2t1cF9wcm9wcyk7CkBAIC0yMDMsNiArMjEyLDcgQEAKIAlzdHJ1Y3Qgd204MzF4X2JhY2t1cCAqZGV2ZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmRldmRhdGEtPmJhY2t1cCk7CisJa2ZyZWUoZGV2ZGF0YS0+YmFja3VwLm5hbWUpOwogCWtmcmVlKGRldmRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3dtODMxeF9wb3dlci5jIGIvZHJpdmVycy9wb3dlci93bTgzMXhfcG93ZXIuYwppbmRleCBkZGY4Y2Y1Li42Y2MyY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3dtODMxeF9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvd204MzF4X3Bvd2VyLmMKQEAgLTI0LDYgKzI0LDkgQEAKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IHdhbGw7CiAJc3RydWN0IHBvd2VyX3N1cHBseSB1c2I7CiAJc3RydWN0IHBvd2VyX3N1cHBseSBiYXR0ZXJ5OworCWNoYXIgd2FsbF9uYW1lWzIwXTsKKwljaGFyIHVzYl9uYW1lWzIwXTsKKwljaGFyIGJhdHRlcnlfbmFtZVsyMF07CiB9OwogCiBzdGF0aWMgaW50IHdtODMxeF9wb3dlcl9jaGVja19vbmxpbmUoc3RydWN0IHdtODMxeCAqd204MzF4LCBpbnQgc3VwcGx5LApAQCAtNDg2LDYgKzQ4OSw3IEBACiBzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqd204MzF4X3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHdtODMxeF9wb3dlciAqcG93ZXI7CiAJc3RydWN0IHBvd2VyX3N1cHBseSAqdXNiOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmJhdHRlcnk7CkBAIC01MDMsMTIgKzUwNywyOCBAQAogCWJhdHRlcnkgPSAmcG93ZXItPmJhdHRlcnk7CiAJd2FsbCA9ICZwb3dlci0+d2FsbDsKIAorCWlmICh3bTgzMXhfcGRhdGEgJiYgd204MzF4X3BkYXRhLT53bTgzMXhfbnVtKSB7CisJCXNucHJpbnRmKHBvd2VyLT53YWxsX25hbWUsIHNpemVvZihwb3dlci0+d2FsbF9uYW1lKSwKKwkJCSAid204MzF4LXdhbGwuJWQiLCB3bTgzMXhfcGRhdGEtPndtODMxeF9udW0pOworCQlzbnByaW50Zihwb3dlci0+YmF0dGVyeV9uYW1lLCBzaXplb2YocG93ZXItPndhbGxfbmFtZSksCisJCQkgIndtODMxeC1iYXR0ZXJ5LiVkIiwgd204MzF4X3BkYXRhLT53bTgzMXhfbnVtKTsKKwkJc25wcmludGYocG93ZXItPnVzYl9uYW1lLCBzaXplb2YocG93ZXItPndhbGxfbmFtZSksCisJCQkgIndtODMxeC11c2IuJWQiLCB3bTgzMXhfcGRhdGEtPndtODMxeF9udW0pOworCX0gZWxzZSB7CisJCXNucHJpbnRmKHBvd2VyLT53YWxsX25hbWUsIHNpemVvZihwb3dlci0+d2FsbF9uYW1lKSwKKwkJCSAid204MzF4LXdhbGwiKTsKKwkJc25wcmludGYocG93ZXItPmJhdHRlcnlfbmFtZSwgc2l6ZW9mKHBvd2VyLT53YWxsX25hbWUpLAorCQkJICJ3bTgzMXgtYmF0dGVyeSIpOworCQlzbnByaW50Zihwb3dlci0+dXNiX25hbWUsIHNpemVvZihwb3dlci0+d2FsbF9uYW1lKSwKKwkJCSAid204MzF4LXVzYiIpOworCX0KKwogCS8qIFdlIGlnbm9yZSBjb25maWd1cmF0aW9uIGZhaWx1cmVzIHNpbmNlIHdlIGNhbiBzdGlsbCByZWFkIGJhY2sKIAkgKiB0aGUgc3RhdHVzIHdpdGhvdXQgZW5hYmxpbmcgdGhlIGNoYXJnZXIuCiAJICovCiAJd204MzF4X2NvbmZpZ19iYXR0ZXJ5KHdtODMxeCk7CiAKLQl3YWxsLT5uYW1lID0gIndtODMxeC13YWxsIjsKKwl3YWxsLT5uYW1lID0gcG93ZXItPndhbGxfbmFtZTsKIAl3YWxsLT50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfTUFJTlM7CiAJd2FsbC0+cHJvcGVydGllcyA9IHdtODMxeF93YWxsX3Byb3BzOwogCXdhbGwtPm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRSh3bTgzMXhfd2FsbF9wcm9wcyk7CkBAIC01MTcsNyArNTM3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9rbWFsbG9jOwogCi0JYmF0dGVyeS0+bmFtZSA9ICJ3bTgzMXgtYmF0dGVyeSI7CisJYmF0dGVyeS0+bmFtZSA9IHBvd2VyLT5iYXR0ZXJ5X25hbWU7CiAJYmF0dGVyeS0+cHJvcGVydGllcyA9IHdtODMxeF9iYXRfcHJvcHM7CiAJYmF0dGVyeS0+bnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHdtODMxeF9iYXRfcHJvcHMpOwogCWJhdHRlcnktPmdldF9wcm9wZXJ0eSA9IHdtODMxeF9iYXRfZ2V0X3Byb3A7CkBAIC01MjYsNyArNTQ2LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl93YWxsOwogCi0JdXNiLT5uYW1lID0gIndtODMxeC11c2IiLAorCXVzYi0+bmFtZSA9IHBvd2VyLT51c2JfbmFtZSwKIAl1c2ItPnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9VU0I7CiAJdXNiLT5wcm9wZXJ0aWVzID0gd204MzF4X3VzYl9wcm9wczsKIAl1c2ItPm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRSh3bTgzMXhfdXNiX3Byb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc2Nhbi5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMKaW5kZXggZWU4OTM1OC4uZWJlNzdkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMKQEAgLTUwNSw4ICs1MDUsNyBAQAogCXJkZXYtPmRldi5kbWFfbWFzayA9ICZyZGV2LT5kbWFfbWFzazsKIAlyZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCi0JaWYgKChyZGV2LT5wZWYgJiBSSU9fUEVGX0lOQl9ET09SQkVMTCkgJiYKLQkgICAgKHJkZXYtPmRzdF9vcHMgJiBSSU9fRFNUX09QU19ET09SQkVMTCkpCisJaWYgKHJkZXYtPmRzdF9vcHMgJiBSSU9fRFNUX09QU19ET09SQkVMTCkKIAkJcmlvX2luaXRfZGJlbGxfcmVzKCZyZGV2LT5yaW9yZXNbUklPX0RPT1JCRUxMX1JFU09VUkNFXSwKIAkJCQkgICAwLCAweGZmZmYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCAxMThlYjIxLi5jN2ZkMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTI0OSw2ICsyNDksMTIgQEAKIAkgIHRocmVlIHN0ZXAtZG93biBjb252ZXJ0ZXJzIGFuZCB0d28gZ2VuZXJhbC1wdXJwb3NlIExETyB2b2x0YWdlIHJlZ3VsYXRvcnMuCiAJICBJdCBzdXBwb3J0cyBUSSdzIHNvZnR3YXJlIGJhc2VkIENsYXNzLTIgU21hcnRSZWZsZXggaW1wbGVtZW50YXRpb24uCiAKK2NvbmZpZyBSRUdVTEFUT1JfVFBTNjU5MTIKKwl0cmlzdGF0ZSAiVEkgVFBTNjU5MTIgUG93ZXIgcmVndWxhdG9yIgorCWRlcGVuZHMgb24gKE1GRF9UUFM2NTkxMl9JMkMgfHwgTUZEX1RQUzY1OTEyX1NQSSkKKwloZWxwCisJICAgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRQUzY1OTEyIHZvbHRhZ2UgcmVndWxhdG9yIGNoaXAuCisKIGNvbmZpZyBSRUdVTEFUT1JfODhQTTg2MDcKIAlib29sICJNYXJ2ZWxsIDg4UE04NjA3IFBvd2VyIHJlZ3VsYXRvcnMiCiAJZGVwZW5kcyBvbiBNRkRfODhQTTg2MFg9eQpAQCAtMzA0LDUgKzMxMCwxMiBAQAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRQUzY1OTEwIHZvbHRhZ2UgcmVndWxhdG9yIGNoaXBzLgogCitjb25maWcgUkVHVUxBVE9SX0FBVDI4NzAKKwl0cmlzdGF0ZSAiQW5hbG9naWNUZWNoIEFBVDI4NzAgUmVndWxhdG9ycyIKKwlkZXBlbmRzIG9uIE1GRF9BQVQyODcwX0NPUkUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIEFuYWxvZ2ljVGVjaCBBQVQyODcwIHNheSBZIHRvIGVuYWJsZSB0aGUKKwkgIHJlZ3VsYXRvciBkcml2ZXIuCisKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggMzkzMmQyZS4uMDQwZDVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTM4LDEwICszOCwxMiBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMykgKz0gdHBzNjUwMjMtcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1gpICs9IHRwczY1MDd4LXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MjRYKSArPSB0cHM2NTI0eC1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UUFM2NTkxMikgKz0gdHBzNjU5MTItcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfODhQTTg2MDcpICs9IDg4cG04NjA3Lm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfSVNMNjI3MUEpICs9IGlzbDYyNzFhLXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX0FCODUwMCkJKz0gYWI4NTAwLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfREI4NTAwX1BSQ01VKSArPSBkYjg1MDAtcHJjbXUubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9UUFM2NTkxMCkgKz0gdHBzNjU5MTAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfQUFUMjg3MCkgKz0gYWF0Mjg3MC1yZWd1bGF0b3IubwogCiBjY2ZsYWdzLSQoQ09ORklHX1JFR1VMQVRPUl9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYWF0Mjg3MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FhdDI4NzAtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0MTA0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FhdDI4NzAtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3JlZ3VsYXRvci9hYXQyODcwLXJlZ3VsYXRvci5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IEppbiBQYXJrIDxqaW55b3VuZ3BAbnZpZGlhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWF0Mjg3MC5oPgorCitzdHJ1Y3QgYWF0Mjg3MF9yZWd1bGF0b3IgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CisKKwljb25zdCBpbnQgKnZvbHRhZ2VzOyAvKiB1ViAqLworCisJaW50IG1pbl91VjsKKwlpbnQgbWF4X3VWOworCisJdTggZW5hYmxlX2FkZHI7CisJdTggZW5hYmxlX3NoaWZ0OworCXU4IGVuYWJsZV9tYXNrOworCisJdTggdm9sdGFnZV9hZGRyOworCXU4IHZvbHRhZ2Vfc2hpZnQ7CisJdTggdm9sdGFnZV9tYXNrOworfTsKKworc3RhdGljIGludCBhYXQyODcwX2xkb19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCBhYXQyODcwX3JlZ3VsYXRvciAqcmkgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIHJpLT52b2x0YWdlc1tzZWxlY3Rvcl07Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9sZG9fc2V0X3ZvbHRhZ2Vfc2VsKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgYWF0Mjg3MF9yZWd1bGF0b3IgKnJpID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwID0gZGV2X2dldF9kcnZkYXRhKHJpLT5wZGV2LT5kZXYucGFyZW50KTsKKworCXJldHVybiBhYXQyODcwLT51cGRhdGUoYWF0Mjg3MCwgcmktPnZvbHRhZ2VfYWRkciwgcmktPnZvbHRhZ2VfbWFzaywKKwkJCShzZWxlY3RvciA8PCByaS0+dm9sdGFnZV9zaGlmdCkgJiByaS0+dm9sdGFnZV9tYXNrKTsKK30KKworc3RhdGljIGludCBhYXQyODcwX2xkb19nZXRfdm9sdGFnZV9zZWwoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGFhdDI4NzBfcmVndWxhdG9yICpyaSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCA9IGRldl9nZXRfZHJ2ZGF0YShyaS0+cGRldi0+ZGV2LnBhcmVudCk7CisJdTggdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBhYXQyODcwLT5yZWFkKGFhdDI4NzAsIHJpLT52b2x0YWdlX2FkZHIsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gKHZhbCAmIHJpLT52b2x0YWdlX21hc2spID4+IHJpLT52b2x0YWdlX3NoaWZ0OworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgYWF0Mjg3MF9yZWd1bGF0b3IgKnJpID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwID0gZGV2X2dldF9kcnZkYXRhKHJpLT5wZGV2LT5kZXYucGFyZW50KTsKKworCXJldHVybiBhYXQyODcwLT51cGRhdGUoYWF0Mjg3MCwgcmktPmVuYWJsZV9hZGRyLCByaS0+ZW5hYmxlX21hc2ssCisJCQkgICAgICAgcmktPmVuYWJsZV9tYXNrKTsKK30KKworc3RhdGljIGludCBhYXQyODcwX2xkb19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBhYXQyODcwX3JlZ3VsYXRvciAqcmkgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAgPSBkZXZfZ2V0X2RydmRhdGEocmktPnBkZXYtPmRldi5wYXJlbnQpOworCisJcmV0dXJuIGFhdDI4NzAtPnVwZGF0ZShhYXQyODcwLCByaS0+ZW5hYmxlX2FkZHIsIHJpLT5lbmFibGVfbWFzaywgMCk7Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9sZG9faXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgYWF0Mjg3MF9yZWd1bGF0b3IgKnJpID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwID0gZGV2X2dldF9kcnZkYXRhKHJpLT5wZGV2LT5kZXYucGFyZW50KTsKKwl1OCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IGFhdDI4NzAtPnJlYWQoYWF0Mjg3MCwgcmktPmVuYWJsZV9hZGRyLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHZhbCAmIHJpLT5lbmFibGVfbWFzayA/IDEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgYWF0Mjg3MF9sZG9fb3BzID0geworCS5saXN0X3ZvbHRhZ2UgPSBhYXQyODcwX2xkb19saXN0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlX3NlbCA9IGFhdDI4NzBfbGRvX3NldF92b2x0YWdlX3NlbCwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gYWF0Mjg3MF9sZG9fZ2V0X3ZvbHRhZ2Vfc2VsLAorCS5lbmFibGUgPSBhYXQyODcwX2xkb19lbmFibGUsCisJLmRpc2FibGUgPSBhYXQyODcwX2xkb19kaXNhYmxlLAorCS5pc19lbmFibGVkID0gYWF0Mjg3MF9sZG9faXNfZW5hYmxlZCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgYWF0Mjg3MF9sZG9fdm9sdGFnZXNbXSA9IHsKKwkxMjAwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxNjAwMDAwLAorCTE4MDAwMDAsIDIwMDAwMDAsIDIyMDAwMDAsIDI1MDAwMDAsCisJMjYwMDAwMCwgMjcwMDAwMCwgMjgwMDAwMCwgMjkwMDAwMCwKKwkzMDAwMDAwLCAzMTAwMDAwLCAzMjAwMDAwLCAzMzAwMDAwLAorfTsKKworI2RlZmluZSBBQVQyODcwX0xETyhpZHMpCQkJCVwKKwl7CQkJCQkJXAorCQkuZGVzYyA9IHsJCQkJXAorCQkJLm5hbWUgPSAjaWRzLAkJCVwKKwkJCS5pZCA9IEFBVDI4NzBfSURfIyNpZHMsCQlcCisJCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUoYWF0Mjg3MF9sZG9fdm9sdGFnZXMpLAlcCisJCQkub3BzID0gJmFhdDI4NzBfbGRvX29wcywJXAorCQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJXAorCQkJLm93bmVyID0gVEhJU19NT0RVTEUsCQlcCisJCX0sCQkJCQlcCisJCS52b2x0YWdlcyA9IGFhdDI4NzBfbGRvX3ZvbHRhZ2VzLAlcCisJCS5taW5fdVYgPSAxMjAwMDAwLAkJCVwKKwkJLm1heF91ViA9IDMzMDAwMDAsCQkJXAorCX0KKworc3RhdGljIHN0cnVjdCBhYXQyODcwX3JlZ3VsYXRvciBhYXQyODcwX3JlZ3VsYXRvcnNbXSA9IHsKKwlBQVQyODcwX0xETyhMRE9BKSwKKwlBQVQyODcwX0xETyhMRE9CKSwKKwlBQVQyODcwX0xETyhMRE9DKSwKKwlBQVQyODcwX0xETyhMRE9EKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWF0Mjg3MF9yZWd1bGF0b3IgKmFhdDI4NzBfZ2V0X3JlZ3VsYXRvcihpbnQgaWQpCit7CisJc3RydWN0IGFhdDI4NzBfcmVndWxhdG9yICpyaSA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYXQyODcwX3JlZ3VsYXRvcnMpOyBpKyspIHsKKwkJcmkgPSAmYWF0Mjg3MF9yZWd1bGF0b3JzW2ldOworCQlpZiAocmktPmRlc2MuaWQgPT0gaWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJpKQorCQlyZXR1cm4gTlVMTDsKKworCXJpLT5lbmFibGVfYWRkciA9IEFBVDI4NzBfTERPX0VOOworCXJpLT5lbmFibGVfc2hpZnQgPSBpZCAtIEFBVDI4NzBfSURfTERPQTsKKwlyaS0+ZW5hYmxlX21hc2sgPSAweDEgPDwgcmktPmVuYWJsZV9zaGlmdDsKKworCXJpLT52b2x0YWdlX2FkZHIgPSAoaWQgLSBBQVQyODcwX0lEX0xET0EpIC8gMiA/CisJCQkgICBBQVQyODcwX0xET19DRCA6IEFBVDI4NzBfTERPX0FCOworCXJpLT52b2x0YWdlX3NoaWZ0ID0gKGlkIC0gQUFUMjg3MF9JRF9MRE9BKSAlIDIgPyAwIDogNDsKKwlyaS0+dm9sdGFnZV9tYXNrID0gMHhGIDw8IHJpLT52b2x0YWdlX3NoaWZ0OworCisJcmV0dXJuIHJpOworfQorCitzdGF0aWMgaW50IGFhdDI4NzBfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFhdDI4NzBfcmVndWxhdG9yICpyaTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKworCXJpID0gYWF0Mjg3MF9nZXRfcmVndWxhdG9yKHBkZXYtPmlkKTsKKwlpZiAoIXJpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgZGV2aWNlIElELCAlZFxuIiwgcGRldi0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmktPnBkZXYgPSBwZGV2OworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmktPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgcmkpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCXJpLT5kZXNjLm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWF0Mjg3MF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhYXQyODcwX3JlZ3VsYXRvcl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiYWF0Mjg3MC1yZWd1bGF0b3IiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IGFhdDI4NzBfcmVndWxhdG9yX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChhYXQyODcwX3JlZ3VsYXRvcl9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWF0Mjg3MF9yZWd1bGF0b3JfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFhdDI4NzBfcmVndWxhdG9yX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwoYWF0Mjg3MF9yZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhYXQyODcwX3JlZ3VsYXRvcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFhdDI4NzBfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhYXQyODcwX3JlZ3VsYXRvcl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2dpY1RlY2ggQUFUMjg3MCBSZWd1bGF0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkppbiBQYXJrIDxqaW55b3VuZ3BAbnZpZGlhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwppbmRleCBkM2UzODc5Li5kOGU2YTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpAQCAtMzMsNiArMzQsOCBAQAogCiAjaW5jbHVkZSAiZHVtbXkuaCIKIAorI2RlZmluZSByZGV2X2NyaXQocmRldiwgZm10LCAuLi4pCQkJCQlcCisJcHJfY3JpdCgiJXM6ICIgZm10LCByZGV2X2dldF9uYW1lKHJkZXYpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSByZGV2X2VycihyZGV2LCBmbXQsIC4uLikJCQkJCVwKIAlwcl9lcnIoIiVzOiAiIGZtdCwgcmRldl9nZXRfbmFtZShyZGV2KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcmRldl93YXJuKHJkZXYsIGZtdCwgLi4uKQkJCQkJXApAQCAtNzgsMTEgKzgxLDEzIEBACiAJY2hhciAqc3VwcGx5X25hbWU7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGRlbnRyeSAqZGVidWdmczsKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfcmVndWxhdG9yX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwotc3RhdGljIGludCBfcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqc3VwcGx5X3JkZXZfcHRyKTsKK3N0YXRpYyBpbnQgX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKIHN0YXRpYyBpbnQgX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldik7CiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfZ2V0X2N1cnJlbnRfbGltaXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwogc3RhdGljIHVuc2lnbmVkIGludCBfcmVndWxhdG9yX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKQEAgLTkwLDYgKzk1LDkgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpOwogc3RhdGljIGludCBfcmVndWxhdG9yX2RvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgICAgaW50IG1pbl91ViwgaW50IG1heF91Vik7CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqY3JlYXRlX3JlZ3VsYXRvcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgY29uc3QgY2hhciAqc3VwcGx5X25hbWUpOwogCiBzdGF0aWMgY29uc3QgY2hhciAqcmRldl9nZXRfbmFtZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKQEAgLTE0Myw4ICsxNTEsMTEgQEAKIAlpZiAoKm1pbl91ViA8IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYpCiAJCSptaW5fdVYgPSByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWOwogCi0JaWYgKCptaW5fdVYgPiAqbWF4X3VWKQorCWlmICgqbWluX3VWID4gKm1heF91VikgeworCQlyZGV2X2VycihyZGV2LCAidW5zdXBwb3J0YWJsZSB2b2x0YWdlIHJhbmdlOiAlZC0lZHVWXG4iLAorCQkJICptaW5fdVYsICptYXhfdVYpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5Nyw4ICsyMDgsMTEgQEAKIAlpZiAoKm1pbl91QSA8IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdUEpCiAJCSptaW5fdUEgPSByZGV2LT5jb25zdHJhaW50cy0+bWluX3VBOwogCi0JaWYgKCptaW5fdUEgPiAqbWF4X3VBKQorCWlmICgqbWluX3VBID4gKm1heF91QSkgeworCQlyZGV2X2VycihyZGV2LCAidW5zdXBwb3J0YWJsZSBjdXJyZW50IHJhbmdlOiAlZC0lZHVBXG4iLAorCQkJICptaW5fdUEsICptYXhfdUEpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMyw2ICsyMjcsNyBAQAogCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJcmRldl9lcnIocmRldiwgImludmFsaWQgbW9kZSAleCBzcGVjaWZpZWRcbiIsICptb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03NzksNyArNzk0LDYgQEAKIAkJaWYgKHJldCA8IDApIHsKIAkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gYXBwbHkgJWR1ViBjb25zdHJhaW50XG4iLAogCQkJCSByZGV2LT5jb25zdHJhaW50cy0+bWluX3VWKTsKLQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC04ODIsNyArODk2LDYgQEAKIAkJcmV0ID0gc3VzcGVuZF9wcmVwYXJlKHJkZXYsIHJkZXYtPmNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gc2V0IHN1c3BlbmQgc3RhdGVcbiIpOwotCQkJcmRldi0+Y29uc3RyYWludHMgPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC05MDksMTMgKzkyMiwxNSBAQAogCQlyZXQgPSBvcHMtPmVuYWJsZShyZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gZW5hYmxlXG4iKTsKLQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJcHJpbnRfY29uc3RyYWludHMocmRldik7CisJcmV0dXJuIDA7CiBvdXQ6CisJa2ZyZWUocmRldi0+Y29uc3RyYWludHMpOworCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MjksMjEgKzk0NCwyMCBAQAogICogY29yZSBpZiBpdCdzIGNoaWxkIGlzIGVuYWJsZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2V0X3N1cHBseShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqc3VwcGx5X3JkZXYpCisJCSAgICAgIHN0cnVjdCByZWd1bGF0b3JfZGV2ICpzdXBwbHlfcmRldikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gc3lzZnNfY3JlYXRlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCAmc3VwcGx5X3JkZXYtPmRldi5rb2JqLAotCQkJCSJzdXBwbHkiKTsKLQlpZiAoZXJyKSB7Ci0JCXJkZXZfZXJyKHJkZXYsICJjb3VsZCBub3QgYWRkIGRldmljZSBsaW5rICVzIGVyciAlZFxuIiwKLQkJCSBzdXBwbHlfcmRldi0+ZGV2LmtvYmoubmFtZSwgZXJyKTsKLQkJICAgICAgIGdvdG8gb3V0OworCXJkZXZfaW5mbyhyZGV2LCAic3VwcGxpZWQgYnkgJXNcbiIsIHJkZXZfZ2V0X25hbWUoc3VwcGx5X3JkZXYpKTsKKworCXJkZXYtPnN1cHBseSA9IGNyZWF0ZV9yZWd1bGF0b3Ioc3VwcGx5X3JkZXYsICZyZGV2LT5kZXYsICJTVVBQTFkiKTsKKwlpZiAoSVNfRVJSKHJkZXYtPnN1cHBseSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZGV2LT5zdXBwbHkpOworCQlyZGV2LT5zdXBwbHkgPSBOVUxMOworCQlyZXR1cm4gZXJyOwogCX0KLQlyZGV2LT5zdXBwbHkgPSBzdXBwbHlfcmRldjsKLQlsaXN0X2FkZCgmcmRldi0+c2xpc3QsICZzdXBwbHlfcmRldi0+c3VwcGx5X2xpc3QpOwotb3V0OgotCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMDMyLDcgKzEwNDYsNyBAQAogCX0KIH0KIAotI2RlZmluZSBSRUdfU1RSX1NJWkUJMzIKKyNkZWZpbmUgUkVHX1NUUl9TSVpFCTY0CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpjcmVhdGVfcmVndWxhdG9yKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTEwNTIsOCArMTA2Niw5IEBACiAKIAlpZiAoZGV2KSB7CiAJCS8qIGNyZWF0ZSBhICdyZXF1ZXN0ZWRfbWljcm9hbXBzX25hbWUnIHN5c2ZzIGVudHJ5ICovCi0JCXNpemUgPSBzY25wcmludGYoYnVmLCBSRUdfU1RSX1NJWkUsICJtaWNyb2FtcHNfcmVxdWVzdGVkXyVzIiwKLQkJCXN1cHBseV9uYW1lKTsKKwkJc2l6ZSA9IHNjbnByaW50ZihidWYsIFJFR19TVFJfU0laRSwKKwkJCQkgIm1pY3JvYW1wc19yZXF1ZXN0ZWRfJXMtJXMiLAorCQkJCSBkZXZfbmFtZShkZXYpLCBzdXBwbHlfbmFtZSk7CiAJCWlmIChzaXplID49IFJFR19TVFJfU0laRSkKIAkJCWdvdG8gb3ZlcmZsb3dfZXJyOwogCkBAIC0xMDg4LDcgKzExMDMsMjggQEAKIAkJCQkgIGRldi0+a29iai5uYW1lLCBlcnIpOwogCQkJZ290byBsaW5rX25hbWVfZXJyOwogCQl9CisJfSBlbHNlIHsKKwkJcmVndWxhdG9yLT5zdXBwbHlfbmFtZSA9IGtzdHJkdXAoc3VwcGx5X25hbWUsIEdGUF9LRVJORUwpOworCQlpZiAocmVndWxhdG9yLT5zdXBwbHlfbmFtZSA9PSBOVUxMKQorCQkJZ290byBhdHRyX2VycjsKIAl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlyZWd1bGF0b3ItPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocmVndWxhdG9yLT5zdXBwbHlfbmFtZSwKKwkJCQkJCXJkZXYtPmRlYnVnZnMpOworCWlmIChJU19FUlJfT1JfTlVMTChyZWd1bGF0b3ItPmRlYnVnZnMpKSB7CisJCXJkZXZfd2FybihyZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisJCXJlZ3VsYXRvci0+ZGVidWdmcyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZGVidWdmc19jcmVhdGVfdTMyKCJ1QV9sb2FkIiwgMDQ0NCwgcmVndWxhdG9yLT5kZWJ1Z2ZzLAorCQkJCSAgICZyZWd1bGF0b3ItPnVBX2xvYWQpOworCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm1pbl91ViIsIDA0NDQsIHJlZ3VsYXRvci0+ZGVidWdmcywKKwkJCQkgICAmcmVndWxhdG9yLT5taW5fdVYpOworCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm1heF91ViIsIDA0NDQsIHJlZ3VsYXRvci0+ZGVidWdmcywKKwkJCQkgICAmcmVndWxhdG9yLT5tYXhfdVYpOworCX0KKyNlbmRpZgorCiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJlZ3VsYXRvcjsKIGxpbmtfbmFtZV9lcnI6CkBAIC0xMjY3LDEzICsxMzAzLDE3IEBACiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocmVndWxhdG9yLT5kZWJ1Z2ZzKTsKKyNlbmRpZgorCiAJLyogcmVtb3ZlIGFueSBzeXNmcyBlbnRyaWVzICovCiAJaWYgKHJlZ3VsYXRvci0+ZGV2KSB7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgcmVndWxhdG9yLT5zdXBwbHlfbmFtZSk7Ci0JCWtmcmVlKHJlZ3VsYXRvci0+c3VwcGx5X25hbWUpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUocmVndWxhdG9yLT5kZXYsICZyZWd1bGF0b3ItPmRldl9hdHRyKTsKIAkJa2ZyZWUocmVndWxhdG9yLT5kZXZfYXR0ci5hdHRyLm5hbWUpOwogCX0KKwlrZnJlZShyZWd1bGF0b3ItPnN1cHBseV9uYW1lKTsKIAlsaXN0X2RlbCgmcmVndWxhdG9yLT5saXN0KTsKIAlrZnJlZShyZWd1bGF0b3IpOwogCkBAIC0xMzAxLDE5ICsxMzQxLDYgQEAKIHsKIAlpbnQgcmV0LCBkZWxheTsKIAotCWlmIChyZGV2LT51c2VfY291bnQgPT0gMCkgewotCQkvKiBkbyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgc3VwcGx5IHJlZ3VsYXRvciBmaXJzdCAqLwotCQlpZiAocmRldi0+c3VwcGx5KSB7Ci0JCQltdXRleF9sb2NrKCZyZGV2LT5zdXBwbHktPm11dGV4KTsKLQkJCXJldCA9IF9yZWd1bGF0b3JfZW5hYmxlKHJkZXYtPnN1cHBseSk7Ci0JCQltdXRleF91bmxvY2soJnJkZXYtPnN1cHBseS0+bXV0ZXgpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlyZGV2X2VycihyZGV2LCAiZmFpbGVkIHRvIGVuYWJsZTogJWRcbiIsIHJldCk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCX0KLQogCS8qIGNoZWNrIHZvbHRhZ2UgYW5kIHJlcXVlc3RlZCBsb2FkIGJlZm9yZSBlbmFibGluZyAqLwogCWlmIChyZGV2LT5jb25zdHJhaW50cyAmJgogCSAgICAocmRldi0+Y29uc3RyYWludHMtPnZhbGlkX29wc19tYXNrICYgUkVHVUxBVE9SX0NIQU5HRV9EUk1TKSkKQEAgLTEzODgsMTkgKzE0MTUsMjcgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHJlZ3VsYXRvci0+cmRldjsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChyZGV2LT5zdXBwbHkpIHsKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShyZGV2LT5zdXBwbHkpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKIAlyZXQgPSBfcmVndWxhdG9yX2VuYWJsZShyZGV2KTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmVndWxhdG9yX2Rpc2FibGUocmRldi0+c3VwcGx5KTsKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZW5hYmxlKTsKIAogLyogbG9ja3MgaGVsZCBieSByZWd1bGF0b3JfZGlzYWJsZSgpICovCi1zdGF0aWMgaW50IF9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKLQkJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKipzdXBwbHlfcmRldl9wdHIpCitzdGF0aWMgaW50IF9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlpbnQgcmV0ID0gMDsKLQkqc3VwcGx5X3JkZXZfcHRyID0gTlVMTDsKIAogCWlmIChXQVJOKHJkZXYtPnVzZV9jb3VudCA8PSAwLAogCQkgInVuYmFsYW5jZWQgZGlzYWJsZXMgZm9yICVzXG4iLCByZGV2X2dldF9uYW1lKHJkZXYpKSkKQEAgLTE0MjcsOSArMTQ2Miw2IEBACiAJCQkJCSAgICAgTlVMTCk7CiAJCX0KIAotCQkvKiBkZWNyZWFzZSBvdXIgc3VwcGxpZXMgcmVmIGNvdW50IGFuZCBkaXNhYmxlIGlmIHJlcXVpcmVkICovCi0JCSpzdXBwbHlfcmRldl9wdHIgPSByZGV2LT5zdXBwbHk7Ci0KIAkJcmRldi0+dXNlX2NvdW50ID0gMDsKIAl9IGVsc2UgaWYgKHJkZXYtPnVzZV9jb3VudCA+IDEpIHsKIApAQCAtMTQ0MCw2ICsxNDcyLDcgQEAKIAogCQlyZGV2LT51c2VfY291bnQtLTsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDU4LDI5ICsxNDkxLDIxIEBACiBpbnQgcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcmVndWxhdG9yLT5yZGV2OwotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpzdXBwbHlfcmRldiA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0JcmV0ID0gX3JlZ3VsYXRvcl9kaXNhYmxlKHJkZXYsICZzdXBwbHlfcmRldik7CisJcmV0ID0gX3JlZ3VsYXRvcl9kaXNhYmxlKHJkZXYpOwogCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCi0JLyogZGVjcmVhc2Ugb3VyIHN1cHBsaWVzIHJlZiBjb3VudCBhbmQgZGlzYWJsZSBpZiByZXF1aXJlZCAqLwotCXdoaWxlIChzdXBwbHlfcmRldiAhPSBOVUxMKSB7Ci0JCXJkZXYgPSBzdXBwbHlfcmRldjsKLQotCQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0JCV9yZWd1bGF0b3JfZGlzYWJsZShyZGV2LCAmc3VwcGx5X3JkZXYpOwotCQltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKLQl9CisJaWYgKHJldCA9PSAwICYmIHJkZXYtPnN1cHBseSkKKwkJcmVndWxhdG9yX2Rpc2FibGUocmRldi0+c3VwcGx5KTsKIAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZGlzYWJsZSk7CiAKIC8qIGxvY2tzIGhlbGQgYnkgcmVndWxhdG9yX2ZvcmNlX2Rpc2FibGUoKSAqLwotc3RhdGljIGludCBfcmVndWxhdG9yX2ZvcmNlX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqc3VwcGx5X3JkZXZfcHRyKQorc3RhdGljIGludCBfcmVndWxhdG9yX2ZvcmNlX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE0OTcsMTAgKzE1MjIsNiBAQAogCQkJUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUsIE5VTEwpOwogCX0KIAotCS8qIGRlY3JlYXNlIG91ciBzdXBwbGllcyByZWYgY291bnQgYW5kIGRpc2FibGUgaWYgcmVxdWlyZWQgKi8KLQkqc3VwcGx5X3JkZXZfcHRyID0gcmRldi0+c3VwcGx5OwotCi0JcmRldi0+dXNlX2NvdW50ID0gMDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTE2LDE2ICsxNTM3LDE2IEBACiBpbnQgcmVndWxhdG9yX2ZvcmNlX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcmVndWxhdG9yLT5yZGV2OwotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpzdXBwbHlfcmRldiA9IE5VTEw7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKIAlyZWd1bGF0b3ItPnVBX2xvYWQgPSAwOwotCXJldCA9IF9yZWd1bGF0b3JfZm9yY2VfZGlzYWJsZShyZGV2LCAmc3VwcGx5X3JkZXYpOworCXJldCA9IF9yZWd1bGF0b3JfZm9yY2VfZGlzYWJsZShyZWd1bGF0b3ItPnJkZXYpOwogCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogCi0JaWYgKHN1cHBseV9yZGV2KQotCQlyZWd1bGF0b3JfZGlzYWJsZShnZXRfZGV2aWNlX3JlZ3VsYXRvcihyZGV2X2dldF9kZXYoc3VwcGx5X3JkZXYpKSk7CisJaWYgKHJkZXYtPnN1cHBseSkKKwkJd2hpbGUgKHJkZXYtPm9wZW5fY291bnQtLSkKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKHJkZXYtPnN1cHBseSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjEzNiw3ICsyMTU3LDcgQEAKIAkvKiBnZXQgaW5wdXQgdm9sdGFnZSAqLwogCWlucHV0X3VWID0gMDsKIAlpZiAocmRldi0+c3VwcGx5KQotCQlpbnB1dF91ViA9IF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldi0+c3VwcGx5KTsKKwkJaW5wdXRfdVYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocmRldi0+c3VwcGx5KTsKIAlpZiAoaW5wdXRfdVYgPD0gMCkKIAkJaW5wdXRfdVYgPSByZGV2LT5jb25zdHJhaW50cy0+aW5wdXRfdVY7CiAJaWYgKGlucHV0X3VWIDw9IDApIHsKQEAgLTIyMDYsMTcgKzIyMjcsOCBAQAogc3RhdGljIHZvaWQgX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCiAJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpfcmRldjsKLQogCS8qIGNhbGwgcmRldiBjaGFpbiBmaXJzdCAqLwogCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnJkZXYtPm5vdGlmaWVyLCBldmVudCwgTlVMTCk7Ci0KLQkvKiBub3cgbm90aWZ5IHJlZ3VsYXRvciB3ZSBzdXBwbHkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9yZGV2LCAmcmRldi0+c3VwcGx5X2xpc3QsIHNsaXN0KSB7Ci0JCW11dGV4X2xvY2soJl9yZGV2LT5tdXRleCk7Ci0JCV9ub3RpZmllcl9jYWxsX2NoYWluKF9yZGV2LCBldmVudCwgZGF0YSk7Ci0JCW11dGV4X3VubG9jaygmX3JkZXYtPm11dGV4KTsKLQl9CiB9CiAKIC8qKgpAQCAtMjI2NCw2ICsyMjc2LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfYnVsa19nZXQpOwogCitzdGF0aWMgdm9pZCByZWd1bGF0b3JfYnVsa19lbmFibGVfYXN5bmModm9pZCAqZGF0YSwgYXN5bmNfY29va2llX3QgY29va2llKQoreworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpidWxrID0gZGF0YTsKKworCWJ1bGstPnJldCA9IHJlZ3VsYXRvcl9lbmFibGUoYnVsay0+Y29uc3VtZXIpOworfQorCiAvKioKICAqIHJlZ3VsYXRvcl9idWxrX2VuYWJsZSAtIGVuYWJsZSBtdWx0aXBsZSByZWd1bGF0b3IgY29uc3VtZXJzCiAgKgpAQCAtMjI3OSwyMSArMjI5OCwzMyBAQAogaW50IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShpbnQgbnVtX2NvbnN1bWVycywKIAkJCSAgc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKmNvbnN1bWVycykKIHsKKwlMSVNUX0hFQUQoYXN5bmNfZG9tYWluKTsKIAlpbnQgaTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCisJZm9yIChpID0gMDsgaSA8IG51bV9jb25zdW1lcnM7IGkrKykKKwkJYXN5bmNfc2NoZWR1bGVfZG9tYWluKHJlZ3VsYXRvcl9idWxrX2VuYWJsZV9hc3luYywKKwkJCQkgICAgICAmY29uc3VtZXJzW2ldLCAmYXN5bmNfZG9tYWluKTsKKworCWFzeW5jX3N5bmNocm9uaXplX2Z1bGxfZG9tYWluKCZhc3luY19kb21haW4pOworCisJLyogSWYgYW55IGNvbnN1bWVyIGZhaWxlZCB3ZSBuZWVkIHRvIHVud2luZCBhbnkgdGhhdCBzdWNjZWVkZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbnN1bWVyczsgaSsrKSB7Ci0JCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoY29uc3VtZXJzW2ldLmNvbnN1bWVyKTsKLQkJaWYgKHJldCAhPSAwKQorCQlpZiAoY29uc3VtZXJzW2ldLnJldCAhPSAwKSB7CisJCQlyZXQgPSBjb25zdW1lcnNbaV0ucmV0OwogCQkJZ290byBlcnI7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKIAogZXJyOgotCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSAlczogJWRcbiIsIGNvbnN1bWVyc1tpXS5zdXBwbHksIHJldCk7Ci0JZm9yICgtLWk7IGkgPj0gMDsgLS1pKQotCQlyZWd1bGF0b3JfZGlzYWJsZShjb25zdW1lcnNbaV0uY29uc3VtZXIpOworCWZvciAoaSA9IDA7IGkgPCBudW1fY29uc3VtZXJzOyBpKyspCisJCWlmIChjb25zdW1lcnNbaV0ucmV0ID09IDApCisJCQlyZWd1bGF0b3JfZGlzYWJsZShjb25zdW1lcnNbaV0uY29uc3VtZXIpOworCQllbHNlCisJCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFibGUgJXM6ICVkXG4iLAorCQkJICAgICAgIGNvbnN1bWVyc1tpXS5zdXBwbHksIGNvbnN1bWVyc1tpXS5yZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI1ODksOSArMjYyMCw3IEBACiAJcmRldi0+b3duZXIgPSByZWd1bGF0b3JfZGVzYy0+b3duZXI7CiAJcmRldi0+ZGVzYyA9IHJlZ3VsYXRvcl9kZXNjOwogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5jb25zdW1lcl9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcmRldi0+c3VwcGx5X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcmRldi0+c2xpc3QpOwogCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmcmRldi0+bm90aWZpZXIpOwogCiAJLyogcHJlZm9ybSBhbnkgcmVndWxhdG9yIHNwZWNpZmljIGluaXQgKi8KQEAgLTI2NzIsNiArMjcwMSw3IEBACiAJdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHJkZXYpOwogCiBzY3J1YjoKKwlrZnJlZShyZGV2LT5jb25zdHJhaW50cyk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnJkZXYtPmRldik7CiAJLyogZGV2aWNlIGNvcmUgZnJlZXMgcmRldiAqLwogCXJkZXYgPSBFUlJfUFRSKHJldCk7CkBAIC0yNzAzLDcgKzI3MzMsNyBAQAogCXVuc2V0X3JlZ3VsYXRvcl9zdXBwbGllcyhyZGV2KTsKIAlsaXN0X2RlbCgmcmRldi0+bGlzdCk7CiAJaWYgKHJkZXYtPnN1cHBseSkKLQkJc3lzZnNfcmVtb3ZlX2xpbmsoJnJkZXYtPmRldi5rb2JqLCAic3VwcGx5Iik7CisJCXJlZ3VsYXRvcl9wdXQocmRldi0+c3VwcGx5KTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmcmRldi0+ZGV2KTsKIAlrZnJlZShyZGV2LT5jb25zdHJhaW50cyk7CiAJbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYwppbmRleCBjNzQxMGJkLi5mNmVmNjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kdW1teS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKQEAgLTM2LDYgKzM2LDI5IEBACiAJLm9wcyA9ICZkdW1teV9vcHMsCiB9OwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkdW1teV9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJZHVtbXlfcmVndWxhdG9yX3JkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmR1bW15X2Rlc2MsIE5VTEwsCisJCQkJCQkgICZkdW1teV9pbml0ZGF0YSwgTlVMTCk7CisJaWYgKElTX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR1bW15X3JlZ3VsYXRvcl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGR1bW15X3JlZ3VsYXRvcl9wcm9iZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gInJlZy1kdW1teSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmR1bW15X3BkZXY7CiAKIHZvaWQgX19pbml0IHJlZ3VsYXRvcl9kdW1teV9pbml0KHZvaWQpCkBAIC01NSwxMiArNzgsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JZHVtbXlfcmVndWxhdG9yX3JkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmR1bW15X2Rlc2MsIE5VTEwsCi0JCQkJCQkgICZkdW1teV9pbml0ZGF0YSwgTlVMTCk7Ci0JaWYgKElTX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldikpIHsKLQkJcmV0ID0gUFRSX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldik7Ci0JCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkdW1teV9yZWd1bGF0b3JfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZHVtbXkgcmVndWxhdG9yIGRyaXZlcjogJWRcbiIsIHJldCk7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR1bW15X3BkZXYpOwotCQlyZXR1cm47CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjU5MTAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTkxMC1yZWd1bGF0b3IuYwppbmRleCA1NWRkNGU2Li42NmQyZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTkxMC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTkxMC1yZWd1bGF0b3IuYwpAQCAtNDksNyArNDksNiBAQAogI2RlZmluZSBUUFM2NTkxMV9SRUdfTERPNwkJMTEKICNkZWZpbmUgVFBTNjU5MTFfUkVHX0xETzgJCTEyCiAKLSNkZWZpbmUgVFBTNjU5MTBfTlVNX1JFR1VMQVRPUgkJMTMKICNkZWZpbmUgVFBTNjU5MTBfU1VQUExZX1NUQVRFX0VOQUJMRUQJMHgxCiAKIC8qIHN1cHBvcnRlZCBWSU8gdm9sdGFnZXMgaW4gbWlsaXZvbHRzICovCkBAIC0yNjQsMTEgKzI2MywxMiBAQAogfTsKIAogc3RydWN0IHRwczY1OTEwX3JlZyB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2NbVFBTNjU5MTBfTlVNX1JFR1VMQVRPUl07CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOwogCXN0cnVjdCB0cHM2NTkxMCAqbWZkOwotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2W1RQUzY1OTEwX05VTV9SRUdVTEFUT1JdOwotCXN0cnVjdCB0cHNfaW5mbyAqaW5mb1tUUFM2NTkxMF9OVU1fUkVHVUxBVE9SXTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXY7CisJc3RydWN0IHRwc19pbmZvICoqaW5mbzsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJaW50IG51bV9yZWd1bGF0b3JzOwogCWludCBtb2RlOwogCWludCAgKCpnZXRfY3RybF9yZWcpKGludCk7CiB9OwpAQCAtNzU5LDggKzc1OSwxMyBAQAogCQltdWx0ID0gKHNlbGVjdG9yIC8gVkREMV8yX05VTV9WT0xUUykgKyAxOwogCQl2b2x0ID0gVkREMV8yX01JTl9WT0xUICsKIAkJCQkoc2VsZWN0b3IgJSBWREQxXzJfTlVNX1ZPTFRTKSAqIFZERDFfMl9PRkZTRVQ7CisJCWJyZWFrOwogCWNhc2UgVFBTNjU5MTFfUkVHX1ZERENUUkw6CiAJCXZvbHQgPSBWRERDVFJMX01JTl9WT0xUICsgKHNlbGVjdG9yICogVkREQ1RSTF9PRkZTRVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuICB2b2x0ICogMTAwICogbXVsdDsKQEAgLTg5NywxNiArOTAyLDQyIEBACiAJc3dpdGNoKHRwczY1OTEwX2NoaXBfaWQodHBzNjU5MTApKSB7CiAJY2FzZSBUUFM2NTkxMDoKIAkJcG1pYy0+Z2V0X2N0cmxfcmVnID0gJnRwczY1OTEwX2dldF9jdHJsX3JlZ2lzdGVyOworCQlwbWljLT5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUodHBzNjU5MTBfcmVncyk7CiAJCWluZm8gPSB0cHM2NTkxMF9yZWdzOworCQlicmVhazsKIAljYXNlIFRQUzY1OTExOgogCQlwbWljLT5nZXRfY3RybF9yZWcgPSAmdHBzNjU5MTFfZ2V0X2N0cmxfcmVnaXN0ZXI7CisJCXBtaWMtPm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRSh0cHM2NTkxMV9yZWdzKTsKIAkJaW5mbyA9IHRwczY1OTExX3JlZ3M7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiSW52YWxpZCB0cHMgY2hpcCB2ZXJzaW9uXG4iKTsKKwkJa2ZyZWUocG1pYyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUUFM2NTkxMF9OVU1fUkVHVUxBVE9SOyBpKyssIGluZm8rKywgcmVnX2RhdGErKykgeworCXBtaWMtPmRlc2MgPSBrY2FsbG9jKHBtaWMtPm51bV9yZWd1bGF0b3JzLAorCQkJc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfZGVzYyksIEdGUF9LRVJORUwpOworCWlmICghcG1pYy0+ZGVzYykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX3BtaWM7CisJfQorCisJcG1pYy0+aW5mbyA9IGtjYWxsb2MocG1pYy0+bnVtX3JlZ3VsYXRvcnMsCisJCQlzaXplb2Yoc3RydWN0IHRwc19pbmZvICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtaWMtPmluZm8pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9kZXNjOworCX0KKworCXBtaWMtPnJkZXYgPSBrY2FsbG9jKHBtaWMtPm51bV9yZWd1bGF0b3JzLAorCQkJc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfZGV2ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtaWMtPnJkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9pbmZvOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwbWljLT5udW1fcmVndWxhdG9yczsgaSsrLCBpbmZvKyssIHJlZ19kYXRhKyspIHsKIAkJLyogUmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgKi8KIAkJcG1pYy0+aW5mb1tpXSA9IGluZm87CiAKQEAgLTkzOCw3ICs5NjksNyBAQAogCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgcmVndWxhdG9yXG4iLAogCQkJCXBkZXYtPm5hbWUpOwogCQkJZXJyID0gUFRSX0VSUihyZGV2KTsKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfdW5yZWdpc3Rlcl9yZWd1bGF0b3I7CiAJCX0KIAogCQkvKiBTYXZlIHJlZ3VsYXRvciBmb3IgY2xlYW51cCAqLwpAQCAtOTQ2LDIzICs5NzcsMzEgQEAKIAl9CiAJcmV0dXJuIDA7CiAKLWVycjoKK2Vycl91bnJlZ2lzdGVyX3JlZ3VsYXRvcjoKIAl3aGlsZSAoLS1pID49IDApCiAJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHBtaWMtPnJkZXZbaV0pOwotCisJa2ZyZWUocG1pYy0+cmRldik7CitlcnJfZnJlZV9pbmZvOgorCWtmcmVlKHBtaWMtPmluZm8pOworZXJyX2ZyZWVfZGVzYzoKKwlrZnJlZShwbWljLT5kZXNjKTsKK2Vycl9mcmVlX3BtaWM6CiAJa2ZyZWUocG1pYyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgdHBzNjU5MTBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHRwczY1OTEwX3JlZyAqdHBzNjU5MTBfcmVnID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRwczY1OTEwX3JlZyAqcG1pYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IFRQUzY1OTEwX05VTV9SRUdVTEFUT1I7IGkrKykKLQkJcmVndWxhdG9yX3VucmVnaXN0ZXIodHBzNjU5MTBfcmVnLT5yZGV2W2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcG1pYy0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXIocG1pYy0+cmRldltpXSk7CiAKLQlrZnJlZSh0cHM2NTkxMF9yZWcpOworCWtmcmVlKHBtaWMtPnJkZXYpOworCWtmcmVlKHBtaWMtPmluZm8pOworCWtmcmVlKHBtaWMtPmRlc2MpOworCWtmcmVlKHBtaWMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTkxMi1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1OTEyLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTMxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90cHM2NTkxMi1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDgwMCBAQAorLyoKKyAqIHRwczY1OTEyLmMgIC0tICBUSSB0cHM2NTkxMgorICoKKyAqIENvcHlyaWdodCAyMDExIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqCisgKiBBdXRob3I6IE1hcmdhcml0YSBPbGF5YSBDYWJyZXJhIDxtYWdpQHNsaW1sb2dpYy5jby51az4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3bTgzNTAgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3RwczY1OTEyLmg+CisKKy8qIERDREMncyAqLworI2RlZmluZSBUUFM2NTkxMl9SRUdfRENEQzEJMAorI2RlZmluZSBUUFM2NTkxMl9SRUdfRENEQzIJMQorI2RlZmluZSBUUFM2NTkxMl9SRUdfRENEQzMJMgorI2RlZmluZSBUUFM2NTkxMl9SRUdfRENEQzQJMworCisvKiBMRE9zICovCisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE8xCTQKKyNkZWZpbmUgVFBTNjU5MTJfUkVHX0xETzIJNQorI2RlZmluZSBUUFM2NTkxMl9SRUdfTERPMwk2CisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE80CTcKKyNkZWZpbmUgVFBTNjU5MTJfUkVHX0xETzUJOAorI2RlZmluZSBUUFM2NTkxMl9SRUdfTERPNgk5CisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE83CTEwCisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE84CTExCisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE85CTEyCisjZGVmaW5lIFRQUzY1OTEyX1JFR19MRE8xMAkxMworCisjZGVmaW5lIFRQUzY1OTEyX01BWF9SRUdfSUQJVFBTNjU5MTJfUkVHX0xET18xMAorCisvKiBOdW1iZXIgb2Ygc3RlcC1kb3duIGNvbnZlcnRlcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIFRQUzY1OTEyX05VTV9EQ0RDCTQKKworLyogTnVtYmVyIG9mIExETyB2b2x0YWdlIHJlZ3VsYXRvcnMgIGF2YWlsYWJsZSAqLworI2RlZmluZSBUUFM2NTkxMl9OVU1fTERPCTEwCisKKy8qIE51bWJlciBvZiB0b3RhbCByZWd1bGF0b3JzIGF2YWlsYWJsZSAqLworI2RlZmluZSBUUFM2NTkxMl9OVU1fUkVHVUxBVE9SCQkoVFBTNjU5MTJfTlVNX0RDREMgKyBUUFM2NTkxMl9OVU1fTERPKQorCisjZGVmaW5lIFRQUzY1OTEyX1JFR19FTkFCTEVECTB4ODAKKyNkZWZpbmUgT1BfU0VMUkVHX01BU0sJCTB4NDAKKyNkZWZpbmUgT1BfU0VMUkVHX1NISUZUCQk2CisKK3N0cnVjdCB0cHNfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHBzX2luZm8gdHBzNjU5MTJfcmVnc1tdID0geworCXsKKwkJLm5hbWUgPSAiRENEQzEiLAorCX0sCisJeworCQkubmFtZSA9ICJEQ0RDMiIsCisJfSwKKwl7CisJCS5uYW1lID0gIkRDREMzIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzQiLAorCX0sCisJeworCQkubmFtZSA9ICJMRE8xIiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzMiLAorCX0sCisJeworCQkubmFtZSA9ICJMRE80IiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPNSIsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzYiLAorCX0sCisJeworCQkubmFtZSA9ICJMRE83IiwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPOCIsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzkiLAorCX0sCisJeworCQkubmFtZSA9ICJMRE8xMCIsCisJfSwKK307CisKK3N0cnVjdCB0cHM2NTkxMl9yZWcgeworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjW1RQUzY1OTEyX05VTV9SRUdVTEFUT1JdOworCXN0cnVjdCB0cHM2NTkxMiAqbWZkOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2W1RQUzY1OTEyX05VTV9SRUdVTEFUT1JdOworCXN0cnVjdCB0cHNfaW5mbyAqaW5mb1tUUFM2NTkxMl9OVU1fUkVHVUxBVE9SXTsKKwkvKiBmb3IgcmVhZC93cml0ZSBhY2Nlc3MgKi8KKwlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKKwlpbnQgbW9kZTsKKwlpbnQgKCpnZXRfY3RybF9yZWcpKGludCk7CisJaW50IGRjZGMxX3JhbmdlOworCWludCBkY2RjMl9yYW5nZTsKKwlpbnQgZGNkYzNfcmFuZ2U7CisJaW50IGRjZGM0X3JhbmdlOworCWludCBwd21fbW9kZV9yZWc7CisJaW50IGVjb19yZWc7Cit9OworCitzdGF0aWMgaW50IHRwczY1OTEyX2dldF9yYW5nZShzdHJ1Y3QgdHBzNjU5MTJfcmVnICpwbWljLCBpbnQgaWQpCit7CisJc3RydWN0IHRwczY1OTEyICptZmQgPSBwbWljLT5tZmQ7CisKKwlpZiAoaWQgPiBUUFM2NTkxMl9SRUdfRENEQzQpCisJCXJldHVybiAwOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMxOgorCQlwbWljLT5kY2RjMV9yYW5nZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwKKwkJCQkJCQlUUFM2NTkxMl9EQ0RDMV9MSU1JVCk7CisJCWlmIChwbWljLT5kY2RjMV9yYW5nZSA8IDApCisJCQlyZXR1cm4gcG1pYy0+ZGNkYzFfcmFuZ2U7CisJCXBtaWMtPmRjZGMxX3JhbmdlID0gKHBtaWMtPmRjZGMxX3JhbmdlICYKKwkJCURDRENfTElNSVRfUkFOR0VfTUFTSykgPj4gRENEQ19MSU1JVF9SQU5HRV9TSElGVDsKKwkJcmV0dXJuIHBtaWMtPmRjZGMxX3JhbmdlOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMyOgorCQlwbWljLT5kY2RjMl9yYW5nZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwKKwkJCQkJCQlUUFM2NTkxMl9EQ0RDMl9MSU1JVCk7CisJCWlmIChwbWljLT5kY2RjMl9yYW5nZSA8IDApCisJCQlyZXR1cm4gcG1pYy0+ZGNkYzJfcmFuZ2U7CisJCXBtaWMtPmRjZGMyX3JhbmdlID0gKHBtaWMtPmRjZGMyX3JhbmdlICYKKwkJCURDRENfTElNSVRfUkFOR0VfTUFTSykgPj4gRENEQ19MSU1JVF9SQU5HRV9TSElGVDsKKwkJcmV0dXJuIHBtaWMtPmRjZGMyX3JhbmdlOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMzOgorCQlwbWljLT5kY2RjM19yYW5nZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwKKwkJCQkJCQlUUFM2NTkxMl9EQ0RDM19MSU1JVCk7CisJCWlmIChwbWljLT5kY2RjM19yYW5nZSA8IDApCisJCQlyZXR1cm4gcG1pYy0+ZGNkYzNfcmFuZ2U7CisJCXBtaWMtPmRjZGMzX3JhbmdlID0gKHBtaWMtPmRjZGMzX3JhbmdlICYKKwkJCURDRENfTElNSVRfUkFOR0VfTUFTSykgPj4gRENEQ19MSU1JVF9SQU5HRV9TSElGVDsKKwkJcmV0dXJuIHBtaWMtPmRjZGMzX3JhbmdlOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREM0OgorCQlwbWljLT5kY2RjNF9yYW5nZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwKKwkJCQkJCQlUUFM2NTkxMl9EQ0RDNF9MSU1JVCk7CisJCWlmIChwbWljLT5kY2RjNF9yYW5nZSA8IDApCisJCQlyZXR1cm4gcG1pYy0+ZGNkYzRfcmFuZ2U7CisJCXBtaWMtPmRjZGM0X3JhbmdlID0gKHBtaWMtPmRjZGM0X3JhbmdlICYKKwkJCURDRENfTElNSVRfUkFOR0VfTUFTSykgPj4gRENEQ19MSU1JVF9SQU5HRV9TSElGVDsKKwkJcmV0dXJuIHBtaWMtPmRjZGM0X3JhbmdlOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHBzNjU5MTJfdnNlbF90b191dl9yYW5nZTAodTggdnNlbCkKK3sKKwl1bnNpZ25lZCBsb25nIHV2OworCisJdXYgPSAoKHZzZWwgKiAxMjUwMCkgKyA1MDAwMDApOworCXJldHVybiB1djsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHBzNjU5MTJfdnNlbF90b191dl9yYW5nZTEodTggdnNlbCkKK3sKKwl1bnNpZ25lZCBsb25nIHV2OworCisJIHV2ID0gKCh2c2VsICogMTI1MDApICsgNzAwMDAwKTsKKwlyZXR1cm4gdXY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRwczY1OTEyX3ZzZWxfdG9fdXZfcmFuZ2UyKHU4IHZzZWwpCit7CisJdW5zaWduZWQgbG9uZyB1djsKKworCXV2ID0gKCh2c2VsICogMjUwMDApICsgNTAwMDAwKTsKKwlyZXR1cm4gdXY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRwczY1OTEyX3ZzZWxfdG9fdXZfcmFuZ2UzKHU4IHZzZWwpCit7CisJdW5zaWduZWQgbG9uZyB1djsKKworCWlmICh2c2VsID09IDB4M2YpCisJCXV2ID0gMzgwMDAwMDsKKwllbHNlCisJCXV2ID0gKCh2c2VsICogNTAwMDApICsgNTAwMDAwKTsKKworCXJldHVybiB1djsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHBzNjU5MTJfdnNlbF90b191dl9sZG8odTggdnNlbCkKK3sKKwl1bnNpZ25lZCBsb25nIHV2ID0gMDsKKworCWlmICh2c2VsIDw9IDMyKQorCQl1diA9ICgodnNlbCAqIDI1MDAwKSArIDgwMDAwMCk7CisJZWxzZSBpZiAodnNlbCA+IDMyICYmIHZzZWwgPD0gNjApCisJCXV2ID0gKCgodnNlbCAtIDMyKSAqIDUwMDAwKSArIDE2MDAwMDApOworCWVsc2UgaWYgKHZzZWwgPiA2MCkKKwkJdXYgPSAoKCh2c2VsIC0gNjApICogMTAwMDAwKSArIDMwMDAwMDApOworCisJcmV0dXJuIHV2OworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2dldF9jdHJsX3JlZ2lzdGVyKGludCBpZCkKK3sKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzE6CisJCXJldHVybiBUUFM2NTkxMl9EQ0RDMV9BVlM7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzI6CisJCXJldHVybiBUUFM2NTkxMl9EQ0RDMl9BVlM7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzM6CisJCXJldHVybiBUUFM2NTkxMl9EQ0RDM19BVlM7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzQ6CisJCXJldHVybiBUUFM2NTkxMl9EQ0RDNF9BVlM7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPMToKKwkJcmV0dXJuIFRQUzY1OTEyX0xETzFfQVZTOworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzI6CisJCXJldHVybiBUUFM2NTkxMl9MRE8yX0FWUzsKKwljYXNlIFRQUzY1OTEyX1JFR19MRE8zOgorCQlyZXR1cm4gVFBTNjU5MTJfTERPM19BVlM7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPNDoKKwkJcmV0dXJuIFRQUzY1OTEyX0xETzRfQVZTOworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzU6CisJCXJldHVybiBUUFM2NTkxMl9MRE81OworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzY6CisJCXJldHVybiBUUFM2NTkxMl9MRE82OworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzc6CisJCXJldHVybiBUUFM2NTkxMl9MRE83OworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzg6CisJCXJldHVybiBUUFM2NTkxMl9MRE84OworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzk6CisJCXJldHVybiBUUFM2NTkxMl9MRE85OworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzEwOgorCQlyZXR1cm4gVFBTNjU5MTJfTERPMTA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2dldF9kY2RjX3NlbF9yZWdpc3RlcihzdHJ1Y3QgdHBzNjU5MTJfcmVnICpwbWljLCBpbnQgaWQpCit7CisJc3RydWN0IHRwczY1OTEyICptZmQgPSBwbWljLT5tZmQ7CisJaW50IG9wdnNlbCA9IDAsIHNyID0gMDsKKwl1OCByZWcgPSAwOworCisJaWYgKGlkIDwgVFBTNjU5MTJfUkVHX0RDREMxIHx8IGlkID4gVFBTNjU5MTJfUkVHX0RDREM0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFRQUzY1OTEyX1JFR19EQ0RDMToKKwkJb3B2c2VsID0gdHBzNjU5MTJfcmVnX3JlYWQobWZkLCBUUFM2NTkxMl9EQ0RDMV9PUCk7CisJCXNyID0gKChvcHZzZWwgJiBPUF9TRUxSRUdfTUFTSykgPj4gT1BfU0VMUkVHX1NISUZUKTsKKwkJaWYgKHNyKQorCQkJcmVnID0gVFBTNjU5MTJfRENEQzFfQVZTOworCQllbHNlCisJCQlyZWcgPSBUUFM2NTkxMl9EQ0RDMV9PUDsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzI6CisJCW9wdnNlbCA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgVFBTNjU5MTJfRENEQzJfT1ApOworCQlzciA9IChvcHZzZWwgJiBPUF9TRUxSRUdfTUFTSykgPj4gT1BfU0VMUkVHX1NISUZUOworCQlpZiAoc3IpCisJCQlyZWcgPSBUUFM2NTkxMl9EQ0RDMl9BVlM7CisJCWVsc2UKKwkJCXJlZyA9IFRQUzY1OTEyX0RDREMyX09QOworCQlicmVhazsKKwljYXNlIFRQUzY1OTEyX1JFR19EQ0RDMzoKKwkJb3B2c2VsID0gdHBzNjU5MTJfcmVnX3JlYWQobWZkLCBUUFM2NTkxMl9EQ0RDM19PUCk7CisJCXNyID0gKG9wdnNlbCAmIE9QX1NFTFJFR19NQVNLKSA+PiBPUF9TRUxSRUdfU0hJRlQ7CisJCWlmIChzcikKKwkJCXJlZyA9IFRQUzY1OTEyX0RDREMzX0FWUzsKKwkJZWxzZQorCQkJcmVnID0gVFBTNjU5MTJfRENEQzNfT1A7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREM0OgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREM0X09QKTsKKwkJc3IgPSAob3B2c2VsICYgT1BfU0VMUkVHX01BU0spID4+IE9QX1NFTFJFR19TSElGVDsKKwkJaWYgKHNyKQorCQkJcmVnID0gVFBTNjU5MTJfRENEQzRfQVZTOworCQllbHNlCisJCQlyZWcgPSBUUFM2NTkxMl9EQ0RDNF9PUDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZWc7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfZ2V0X2xkb19zZWxfcmVnaXN0ZXIoc3RydWN0IHRwczY1OTEyX3JlZyAqcG1pYywgaW50IGlkKQoreworCXN0cnVjdCB0cHM2NTkxMiAqbWZkID0gcG1pYy0+bWZkOworCWludCBvcHZzZWwgPSAwLCBzciA9IDA7CisJdTggcmVnID0gMDsKKworCWlmIChpZCA8IFRQUzY1OTEyX1JFR19MRE8xIHx8IGlkID4gVFBTNjU5MTJfUkVHX0xETzEwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFRQUzY1OTEyX1JFR19MRE8xOgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0xETzFfT1ApOworCQlzciA9IChvcHZzZWwgJiBPUF9TRUxSRUdfTUFTSykgPj4gT1BfU0VMUkVHX1NISUZUOworCQlpZiAoc3IpCisJCQlyZWcgPSBUUFM2NTkxMl9MRE8xX0FWUzsKKwkJZWxzZQorCQkJcmVnID0gVFBTNjU5MTJfTERPMV9PUDsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPMjoKKwkJb3B2c2VsID0gdHBzNjU5MTJfcmVnX3JlYWQobWZkLCBUUFM2NTkxMl9MRE8yX09QKTsKKwkJc3IgPSAob3B2c2VsICYgT1BfU0VMUkVHX01BU0spID4+IE9QX1NFTFJFR19TSElGVDsKKwkJaWYgKHNyKQorCQkJcmVnID0gVFBTNjU5MTJfTERPMl9BVlM7CisJCWVsc2UKKwkJCXJlZyA9IFRQUzY1OTEyX0xETzJfT1A7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0xETzM6CisJCW9wdnNlbCA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgVFBTNjU5MTJfTERPM19PUCk7CisJCXNyID0gKG9wdnNlbCAmIE9QX1NFTFJFR19NQVNLKSA+PiBPUF9TRUxSRUdfU0hJRlQ7CisJCWlmIChzcikKKwkJCXJlZyA9IFRQUzY1OTEyX0xETzNfQVZTOworCQllbHNlCisJCQlyZWcgPSBUUFM2NTkxMl9MRE8zX09QOworCQlicmVhazsKKwljYXNlIFRQUzY1OTEyX1JFR19MRE80OgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0xETzRfT1ApOworCQlzciA9IChvcHZzZWwgJiBPUF9TRUxSRUdfTUFTSykgPj4gT1BfU0VMUkVHX1NISUZUOworCQlpZiAoc3IpCisJCQlyZWcgPSBUUFM2NTkxMl9MRE80X0FWUzsKKwkJZWxzZQorCQkJcmVnID0gVFBTNjU5MTJfTERPNF9PUDsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPNToKKwkJcmVnID0gVFBTNjU5MTJfTERPNTsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPNjoKKwkJcmVnID0gVFBTNjU5MTJfTERPNjsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPNzoKKwkJcmVnID0gVFBTNjU5MTJfTERPNzsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPODoKKwkJcmVnID0gVFBTNjU5MTJfTERPODsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPOToKKwkJcmVnID0gVFBTNjU5MTJfTERPOTsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfTERPMTA6CisJCXJlZyA9IFRQUzY1OTEyX0xETzEwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2dldF9tb2RlX3JlZ2l0ZXJzKHN0cnVjdCB0cHM2NTkxMl9yZWcgKnBtaWMsIGludCBpZCkKK3sKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzE6CisJCXBtaWMtPnB3bV9tb2RlX3JlZyA9IFRQUzY1OTEyX0RDREMxX0NUUkw7CisJCXBtaWMtPmVjb19yZWcgPSBUUFM2NTkxMl9EQ0RDMV9BVlM7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMyOgorCQlwbWljLT5wd21fbW9kZV9yZWcgPSBUUFM2NTkxMl9EQ0RDMl9DVFJMOworCQlwbWljLT5lY29fcmVnID0gVFBTNjU5MTJfRENEQzJfQVZTOworCQlicmVhazsKKwljYXNlIFRQUzY1OTEyX1JFR19EQ0RDMzoKKwkJcG1pYy0+cHdtX21vZGVfcmVnID0gVFBTNjU5MTJfRENEQzNfQ1RSTDsKKwkJcG1pYy0+ZWNvX3JlZyA9IFRQUzY1OTEyX0RDREMzX0FWUzsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzQ6CisJCXBtaWMtPnB3bV9tb2RlX3JlZyA9IFRQUzY1OTEyX0RDREM0X0NUUkw7CisJCXBtaWMtPmVjb19yZWcgPSBUUFM2NTkxMl9EQ0RDNF9BVlM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX3JlZ19pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwczY1OTEyX3JlZyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHBzNjU5MTIgKm1mZCA9IHBtaWMtPm1mZDsKKwlpbnQgcmVnLCB2YWx1ZSwgaWQgPSByZGV2X2dldF9pZChkZXYpOworCisJaWYgKGlkIDwgVFBTNjU5MTJfUkVHX0RDREMxIHx8IGlkID4gVFBTNjU5MTJfUkVHX0xETzEwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyA9IHBtaWMtPmdldF9jdHJsX3JlZyhpZCk7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwl2YWx1ZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgcmVnKTsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwlyZXR1cm4gdmFsdWUgJiBUUFM2NTkxMl9SRUdfRU5BQkxFRDsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9yZWdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwczY1OTEyX3JlZyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHBzNjU5MTIgKm1mZCA9IHBtaWMtPm1mZDsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChkZXYpOworCWludCByZWc7CisKKwlpZiAoaWQgPCBUUFM2NTkxMl9SRUdfRENEQzEgfHwgaWQgPiBUUFM2NTkxMl9SRUdfTERPMTApCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnID0gcG1pYy0+Z2V0X2N0cmxfcmVnKGlkKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCXJldHVybiB0cHM2NTkxMl9zZXRfYml0cyhtZmQsIHJlZywgVFBTNjU5MTJfUkVHX0VOQUJMRUQpOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX3JlZ19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwczY1OTEyX3JlZyAqcG1pYyA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHBzNjU5MTIgKm1mZCA9IHBtaWMtPm1mZDsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChkZXYpLCByZWc7CisKKwlyZWcgPSBwbWljLT5nZXRfY3RybF9yZWcoaWQpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJcmV0dXJuIHRwczY1OTEyX2NsZWFyX2JpdHMobWZkLCByZWcsIFRQUzY1OTEyX1JFR19FTkFCTEVEKTsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9zZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgdHBzNjU5MTJfcmVnICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0cHM2NTkxMiAqbWZkID0gcG1pYy0+bWZkOworCWludCBwd21fbW9kZSwgZWNvLCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwl0cHM2NTkxMl9nZXRfbW9kZV9yZWdpdGVycyhwbWljLCBpZCk7CisKKwlwd21fbW9kZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgcG1pYy0+cHdtX21vZGVfcmVnKTsKKwllY28gPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIHBtaWMtPmVjb19yZWcpOworCisJcHdtX21vZGUgJj0gRENEQ0NUUkxfRENEQ19NT0RFX01BU0s7CisJZWNvICY9IERDRENfQVZTX0VDT19NQVNLOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9GQVNUOgorCQkvKiBWZXJpZnkgaWYgbW9kZSBhbHJlZHkgc2V0ICovCisJCWlmIChwd21fbW9kZSAmJiAhZWNvKQorCQkJYnJlYWs7CisJCXRwczY1OTEyX3NldF9iaXRzKG1mZCwgcG1pYy0+cHdtX21vZGVfcmVnLCBEQ0RDQ1RSTF9EQ0RDX01PREVfTUFTSyk7CisJCXRwczY1OTEyX2NsZWFyX2JpdHMobWZkLCBwbWljLT5lY29fcmVnLCBEQ0RDX0FWU19FQ09fTUFTSyk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCWNhc2UgUkVHVUxBVE9SX01PREVfSURMRToKKwkJaWYgKCFwd21fbW9kZSAmJiAhZWNvKQorCQkJYnJlYWs7CisJCXRwczY1OTEyX2NsZWFyX2JpdHMobWZkLCBwbWljLT5wd21fbW9kZV9yZWcsIERDRENDVFJMX0RDRENfTU9ERV9NQVNLKTsKKwkJdHBzNjU5MTJfY2xlYXJfYml0cyhtZmQsIHBtaWMtPmVjb19yZWcsIERDRENfQVZTX0VDT19NQVNLKTsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgorCQlpZiAoIXB3bV9tb2RlICYmIGVjbykKKwkJCWJyZWFrOworCQl0cHM2NTkxMl9jbGVhcl9iaXRzKG1mZCwgcG1pYy0+cHdtX21vZGVfcmVnLCBEQ0RDQ1RSTF9EQ0RDX01PREVfTUFTSyk7CisJCXRwczY1OTEyX3NldF9iaXRzKG1mZCwgcG1pYy0+ZWNvX3JlZywgRENEQ19BVlNfRUNPX01BU0spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0cHM2NTkxMl9nZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHM2NTkxMl9yZWcgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRwczY1OTEyICptZmQgPSBwbWljLT5tZmQ7CisJaW50IHB3bV9tb2RlLCBlY28sIG1vZGUgPSAwLCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwl0cHM2NTkxMl9nZXRfbW9kZV9yZWdpdGVycyhwbWljLCBpZCk7CisKKwlwd21fbW9kZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgcG1pYy0+cHdtX21vZGVfcmVnKTsKKwllY28gPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIHBtaWMtPmVjb19yZWcpOworCisJcHdtX21vZGUgJj0gRENEQ0NUUkxfRENEQ19NT0RFX01BU0s7CisJZWNvICY9IERDRENfQVZTX0VDT19NQVNLOworCisJaWYgKHB3bV9tb2RlICYmICFlY28pCisJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9GQVNUOworCWVsc2UgaWYgKCFwd21fbW9kZSAmJiAhZWNvKQorCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOworCWVsc2UgaWYgKCFwd21fbW9kZSAmJiBlY28pCisJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOworCisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjU5MTJfZ2V0X3ZvbHRhZ2VfZGNkYyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB0cHM2NTkxMl9yZWcgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRwczY1OTEyICptZmQgPSBwbWljLT5tZmQ7CisJaW50IGlkID0gcmRldl9nZXRfaWQoZGV2KSwgdm9sdGFnZSA9IDAsIHJhbmdlOworCWludCBvcHZzZWwgPSAwLCBhdnNlbCA9IDAsIHNyLCB2c2VsOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMxOgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMxX09QKTsKKwkJYXZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMxX0FWUyk7CisJCXJhbmdlID0gcG1pYy0+ZGNkYzFfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMyOgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMyX09QKTsKKwkJYXZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMyX0FWUyk7CisJCXJhbmdlID0gcG1pYy0+ZGNkYzJfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMzOgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMzX09QKTsKKwkJYXZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREMzX0FWUyk7CisJCXJhbmdlID0gcG1pYy0+ZGNkYzNfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREM0OgorCQlvcHZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREM0X09QKTsKKwkJYXZzZWwgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIFRQUzY1OTEyX0RDREM0X0FWUyk7CisJCXJhbmdlID0gcG1pYy0+ZGNkYzRfcmFuZ2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNyID0gKG9wdnNlbCAmIE9QX1NFTFJFR19NQVNLKSA+PiBPUF9TRUxSRUdfU0hJRlQ7CisJaWYgKHNyKQorCQl2c2VsID0gYXZzZWw7CisJZWxzZQorCQl2c2VsID0gb3B2c2VsOworCXZzZWwgJj0gMHgzRjsKKworCXN3aXRjaCAocmFuZ2UpIHsKKwljYXNlIDA6CisJCS8qIDAuNSAtIDEuMjg3NVYgaW4gMTIuNW1WIHN0ZXBzICovCisJCXZvbHRhZ2UgPSB0cHM2NTkxMl92c2VsX3RvX3V2X3JhbmdlMCh2c2VsKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiAwLjcgLSAxLjQ4NzVWIGluIDEyLjVtViBzdGVwcyAqLworCQl2b2x0YWdlID0gdHBzNjU5MTJfdnNlbF90b191dl9yYW5nZTEodnNlbCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogMC41IC0gMi4wNzVWIGluIDI1bVYgc3RlcHMgKi8KKwkJdm9sdGFnZSA9IHRwczY1OTEyX3ZzZWxfdG9fdXZfcmFuZ2UyKHZzZWwpOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIDAuNSAtIDMuOFYgaW4gNTBtViBzdGVwcyAqLworCQl2b2x0YWdlID0gdHBzNjU5MTJfdnNlbF90b191dl9yYW5nZTModnNlbCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdm9sdGFnZTsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9zZXRfdm9sdGFnZV9kY2RjKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCQl1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgdHBzNjU5MTJfcmVnICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0cHM2NTkxMiAqbWZkID0gcG1pYy0+bWZkOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7CisJaW50IHZhbHVlOworCXU4IHJlZzsKKworCXJlZyA9IHRwczY1OTEyX2dldF9kY2RjX3NlbF9yZWdpc3RlcihwbWljLCBpZCk7CisJdmFsdWUgPSB0cHM2NTkxMl9yZWdfcmVhZChtZmQsIHJlZyk7CisJdmFsdWUgJj0gMHhDMDsKKwlyZXR1cm4gdHBzNjU5MTJfcmVnX3dyaXRlKG1mZCwgcmVnLCBzZWxlY3RvciB8IHZhbHVlKTsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9nZXRfdm9sdGFnZV9sZG8oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdHBzNjU5MTJfcmVnICpwbWljID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0cHM2NTkxMiAqbWZkID0gcG1pYy0+bWZkOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKGRldik7CisJaW50IHZzZWwgPSAwOworCXU4IHJlZzsKKworCXJlZyA9IHRwczY1OTEyX2dldF9sZG9fc2VsX3JlZ2lzdGVyKHBtaWMsIGlkKTsKKwl2c2VsID0gdHBzNjU5MTJfcmVnX3JlYWQobWZkLCByZWcpOworCXZzZWwgJj0gMHgzRjsKKworCXJldHVybiB0cHM2NTkxMl92c2VsX3RvX3V2X2xkbyh2c2VsKTsKK30KKworc3RhdGljIGludCB0cHM2NTkxMl9zZXRfdm9sdGFnZV9sZG8oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCB0cHM2NTkxMl9yZWcgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRwczY1OTEyICptZmQgPSBwbWljLT5tZmQ7CisJaW50IGlkID0gcmRldl9nZXRfaWQoZGV2KSwgcmVnLCB2YWx1ZTsKKworCXJlZyA9IHRwczY1OTEyX2dldF9sZG9fc2VsX3JlZ2lzdGVyKHBtaWMsIGlkKTsKKwl2YWx1ZSA9IHRwczY1OTEyX3JlZ19yZWFkKG1mZCwgcmVnKTsKKwl2YWx1ZSAmPSAweEMwOworCXJldHVybiB0cHM2NTkxMl9yZWdfd3JpdGUobWZkLCByZWcsIHNlbGVjdG9yIHwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2xpc3Rfdm9sdGFnZV9kY2RjKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCB0cHM2NTkxMl9yZWcgKnBtaWMgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJhbmdlLCB2b2x0YWdlID0gMCwgaWQgPSByZGV2X2dldF9pZChkZXYpOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREMxOgorCQlyYW5nZSA9IHBtaWMtPmRjZGMxX3JhbmdlOworCQlicmVhazsKKwljYXNlIFRQUzY1OTEyX1JFR19EQ0RDMjoKKwkJcmFuZ2UgPSBwbWljLT5kY2RjMl9yYW5nZTsKKwkJYnJlYWs7CisJY2FzZSBUUFM2NTkxMl9SRUdfRENEQzM6CisJCXJhbmdlID0gcG1pYy0+ZGNkYzNfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgVFBTNjU5MTJfUkVHX0RDREM0OgorCQlyYW5nZSA9IHBtaWMtPmRjZGM0X3JhbmdlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHJhbmdlKSB7CisJY2FzZSAwOgorCQkvKiAwLjUgLSAxLjI4NzVWIGluIDEyLjVtViBzdGVwcyAqLworCQl2b2x0YWdlID0gdHBzNjU5MTJfdnNlbF90b191dl9yYW5nZTAoc2VsZWN0b3IpOworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIDAuNyAtIDEuNDg3NVYgaW4gMTIuNW1WIHN0ZXBzICovCisJCXZvbHRhZ2UgPSB0cHM2NTkxMl92c2VsX3RvX3V2X3JhbmdlMShzZWxlY3Rvcik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogMC41IC0gMi4wNzVWIGluIDI1bVYgc3RlcHMgKi8KKwkJdm9sdGFnZSA9IHRwczY1OTEyX3ZzZWxfdG9fdXZfcmFuZ2UyKHNlbGVjdG9yKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiAwLjUgLSAzLjhWIGluIDUwbVYgc3RlcHMgKi8KKwkJdm9sdGFnZSA9IHRwczY1OTEyX3ZzZWxfdG9fdXZfcmFuZ2UzKHNlbGVjdG9yKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiB2b2x0YWdlOworfQorCitzdGF0aWMgaW50IHRwczY1OTEyX2xpc3Rfdm9sdGFnZV9sZG8oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaW50IGxkbyA9IHJkZXZfZ2V0X2lkKGRldik7CisKKwlpZiAobGRvIDwgVFBTNjU5MTJfUkVHX0xETzEgfHwgbGRvID4gVFBTNjU5MTJfUkVHX0xETzEwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0cHM2NTkxMl92c2VsX3RvX3V2X2xkbyhzZWxlY3Rvcik7Cit9CisKKy8qIE9wZXJhdGlvbnMgcGVybWl0dGVkIG9uIERDREN4ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgdHBzNjU5MTJfb3BzX2RjZGMgPSB7CisJLmlzX2VuYWJsZWQgPSB0cHM2NTkxMl9yZWdfaXNfZW5hYmxlZCwKKwkuZW5hYmxlID0gdHBzNjU5MTJfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHRwczY1OTEyX3JlZ19kaXNhYmxlLAorCS5zZXRfbW9kZSA9IHRwczY1OTEyX3NldF9tb2RlLAorCS5nZXRfbW9kZSA9IHRwczY1OTEyX2dldF9tb2RlLAorCS5nZXRfdm9sdGFnZSA9IHRwczY1OTEyX2dldF92b2x0YWdlX2RjZGMsCisJLnNldF92b2x0YWdlX3NlbCA9IHRwczY1OTEyX3NldF92b2x0YWdlX2RjZGMsCisJLmxpc3Rfdm9sdGFnZSA9IHRwczY1OTEyX2xpc3Rfdm9sdGFnZV9kY2RjLAorfTsKKworLyogT3BlcmF0aW9ucyBwZXJtaXR0ZWQgb24gTERPeCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHRwczY1OTEyX29wc19sZG8gPSB7CisJLmlzX2VuYWJsZWQgPSB0cHM2NTkxMl9yZWdfaXNfZW5hYmxlZCwKKwkuZW5hYmxlID0gdHBzNjU5MTJfcmVnX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHRwczY1OTEyX3JlZ19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHRwczY1OTEyX2dldF92b2x0YWdlX2xkbywKKwkuc2V0X3ZvbHRhZ2Vfc2VsID0gdHBzNjU5MTJfc2V0X3ZvbHRhZ2VfbGRvLAorCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTkxMl9saXN0X3ZvbHRhZ2VfbGRvLAorfTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgdHBzNjU5MTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB0cHNfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJc3RydWN0IHRwczY1OTEyX3JlZyAqcG1pYzsKKwlzdHJ1Y3QgdHBzNjU5MTJfYm9hcmQgKnBtaWNfcGxhdF9kYXRhOworCWludCBpLCBlcnI7CisKKwlwbWljX3BsYXRfZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEodHBzNjU5MTItPmRldik7CisJaWYgKCFwbWljX3BsYXRfZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWdfZGF0YSA9IHBtaWNfcGxhdF9kYXRhLT50cHM2NTkxMl9wbWljX2luaXRfZGF0YTsKKworCXBtaWMgPSBremFsbG9jKHNpemVvZigqcG1pYyksIEdGUF9LRVJORUwpOworCWlmICghcG1pYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZwbWljLT5pb19sb2NrKTsKKwlwbWljLT5tZmQgPSB0cHM2NTkxMjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwbWljKTsKKworCXBtaWMtPmdldF9jdHJsX3JlZyA9ICZ0cHM2NTkxMl9nZXRfY3RybF9yZWdpc3RlcjsKKwlpbmZvID0gdHBzNjU5MTJfcmVnczsKKworCWZvciAoaSA9IDA7IGkgPCBUUFM2NTkxMl9OVU1fUkVHVUxBVE9SOyBpKyssIGluZm8rKywgcmVnX2RhdGErKykgeworCQlpbnQgcmFuZ2UgPSAwOworCQkvKiBSZWdpc3RlciB0aGUgcmVndWxhdG9ycyAqLworCQlwbWljLT5pbmZvW2ldID0gaW5mbzsKKworCQlwbWljLT5kZXNjW2ldLm5hbWUgPSBpbmZvLT5uYW1lOworCQlwbWljLT5kZXNjW2ldLmlkID0gaTsKKwkJcG1pYy0+ZGVzY1tpXS5uX3ZvbHRhZ2VzID0gNjQ7CisJCXBtaWMtPmRlc2NbaV0ub3BzID0gKGkgPiBUUFM2NTkxMl9SRUdfRENEQzQgPworCQkJJnRwczY1OTEyX29wc19sZG8gOiAmdHBzNjU5MTJfb3BzX2RjZGMpOworCQlwbWljLT5kZXNjW2ldLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRTsKKwkJcG1pYy0+ZGVzY1tpXS5vd25lciA9IFRISVNfTU9EVUxFOworCQlyYW5nZSA9IHRwczY1OTEyX2dldF9yYW5nZShwbWljLCBpKTsKKwkJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcG1pYy0+ZGVzY1tpXSwKKwkJCQkJdHBzNjU5MTItPmRldiwgcmVnX2RhdGEsIHBtaWMpOworCQlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCQlkZXZfZXJyKHRwczY1OTEyLT5kZXYsCisJCQkJImZhaWxlZCB0byByZWdpc3RlciAlcyByZWd1bGF0b3JcbiIsCisJCQkJcGRldi0+bmFtZSk7CisJCQllcnIgPSBQVFJfRVJSKHJkZXYpOworCQkJZ290byBlcnI7CisJCX0KKworCQkvKiBTYXZlIHJlZ3VsYXRvciBmb3IgY2xlYW51cCAqLworCQlwbWljLT5yZGV2W2ldID0gcmRldjsKKwl9CisJcmV0dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHBtaWMtPnJkZXZbaV0pOworCisJa2ZyZWUocG1pYyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdHBzNjU5MTJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRwczY1OTEyX3JlZyAqdHBzNjU5MTJfcmVnID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFBTNjU5MTJfTlVNX1JFR1VMQVRPUjsgaSsrKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHM2NTkxMl9yZWctPnJkZXZbaV0pOworCisJa2ZyZWUodHBzNjU5MTJfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHBzNjU5MTJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwczY1OTEyLXBtaWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHRwczY1OTEyX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0cHM2NTkxMl9yZW1vdmUpLAorfTsKKworLyoqCisgKiB0cHM2NTkxMl9pbml0CisgKgorICogTW9kdWxlIGluaXQgZnVuY3Rpb24KKyAqLworc3RhdGljIGludCBfX2luaXQgdHBzNjU5MTJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRwczY1OTEyX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHBzNjU5MTJfaW5pdCk7CisKKy8qKgorICogdHBzNjU5MTJfY2xlYW51cAorICoKKyAqIE1vZHVsZSBleGl0IGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB0cHM2NTkxMl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRwczY1OTEyX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0cHM2NTkxMl9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiTWFyZ2FyaXRhIE9sYXlhIENhYnJlcmEgPG1hZ2lAc2xpbWxvZ2ljLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUUFM2NTkxMiB2b2x0YWdlIHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHBzNjU5MTItcG1pYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCmluZGV4IDg3ZmUwZjcuLmVlODc0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKQEAgLTgzNSw4ICs4MzUsOCBAQAogCQkJcmVtYXBfY29uZikgXAogCQlUV0xfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtLCB0dXJub25fZGVsYXksIFwKIAkJCXJlbWFwX2NvbmYsIFRXTDQwMzAsIHR3bDQwMzBmaXhlZF9vcHMpCi0jZGVmaW5lIFRXTDYwMzBfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgbnVtLCB0dXJub25fZGVsYXkpIFwKLQkJVFdMX0ZJWEVEX0xETyhsYWJlbCwgb2Zmc2V0LCBtVm9sdHMsIG51bSwgdHVybm9uX2RlbGF5LCBcCisjZGVmaW5lIFRXTDYwMzBfRklYRURfTERPKGxhYmVsLCBvZmZzZXQsIG1Wb2x0cywgdHVybm9uX2RlbGF5KSBcCisJCVRXTF9GSVhFRF9MRE8obGFiZWwsIG9mZnNldCwgbVZvbHRzLCAweDAsIHR1cm5vbl9kZWxheSwgXAogCQkJMHgwLCBUV0w2MDMwLCB0d2w2MDMwZml4ZWRfb3BzKQogCiAjZGVmaW5lIFRXTDQwMzBfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbnVtLCB0dXJub25fZGVsYXksIHJlbWFwX2NvbmYpIHsgXApAQCAtODU2LDI0ICs4NTYsMjIgQEAKIAkJfSwgXAogCX0KIAotI2RlZmluZSBUV0w2MDMwX0FESlVTVEFCTEVfTERPKGxhYmVsLCBvZmZzZXQsIG1pbl9tVm9sdHMsIG1heF9tVm9sdHMsIG51bSkgeyBcCisjZGVmaW5lIFRXTDYwMzBfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbWluX21Wb2x0cywgbWF4X21Wb2x0cykgeyBcCiAJLmJhc2UgPSBvZmZzZXQsIFwKLQkuaWQgPSBudW0sIFwKIAkubWluX21WID0gbWluX21Wb2x0cywgXAogCS5tYXhfbVYgPSBtYXhfbVZvbHRzLCBcCiAJLmRlc2MgPSB7IFwKIAkJLm5hbWUgPSAjbGFiZWwsIFwKIAkJLmlkID0gVFdMNjAzMF9SRUdfIyNsYWJlbCwgXAotCQkubl92b2x0YWdlcyA9IChtYXhfbVZvbHRzIC0gbWluX21Wb2x0cykvMTAwLCBcCisJCS5uX3ZvbHRhZ2VzID0gKG1heF9tVm9sdHMgLSBtaW5fbVZvbHRzKS8xMDAgKyAxLCBcCiAJCS5vcHMgPSAmdHdsNjAzMGxkb19vcHMsIFwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgXAogCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAogCQl9LCBcCiAJfQogCi0jZGVmaW5lIFRXTDYwMjVfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbWluX21Wb2x0cywgbWF4X21Wb2x0cywgbnVtKSB7IFwKKyNkZWZpbmUgVFdMNjAyNV9BREpVU1RBQkxFX0xETyhsYWJlbCwgb2Zmc2V0LCBtaW5fbVZvbHRzLCBtYXhfbVZvbHRzKSB7IFwKIAkuYmFzZSA9IG9mZnNldCwgXAotCS5pZCA9IG51bSwgXAogCS5taW5fbVYgPSBtaW5fbVZvbHRzLCBcCiAJLm1heF9tViA9IG1heF9tVm9sdHMsIFwKIAkuZGVzYyA9IHsgXApAQCAtOTAzLDkgKzkwMSw4IEBACiAJCX0sIFwKIAl9CiAKLSNkZWZpbmUgVFdMNjAzMF9GSVhFRF9SRVNPVVJDRShsYWJlbCwgb2Zmc2V0LCBudW0sIHR1cm5vbl9kZWxheSkgeyBcCisjZGVmaW5lIFRXTDYwMzBfRklYRURfUkVTT1VSQ0UobGFiZWwsIG9mZnNldCwgdHVybm9uX2RlbGF5KSB7IFwKIAkuYmFzZSA9IG9mZnNldCwgXAotCS5pZCA9IG51bSwgXAogCS5kZWxheSA9IHR1cm5vbl9kZWxheSwgXAogCS5kZXNjID0geyBcCiAJCS5uYW1lID0gI2xhYmVsLCBcCkBAIC05MTYsOSArOTEzLDggQEAKIAkJfSwgXAogCX0KIAotI2RlZmluZSBUV0w2MDI1X0FESlVTVEFCTEVfU01QUyhsYWJlbCwgb2Zmc2V0LCBudW0pIHsgXAorI2RlZmluZSBUV0w2MDI1X0FESlVTVEFCTEVfU01QUyhsYWJlbCwgb2Zmc2V0KSB7IFwKIAkuYmFzZSA9IG9mZnNldCwgXAotCS5pZCA9IG51bSwgXAogCS5taW5fbVYgPSA2MDAsIFwKIAkubWF4X21WID0gMjEwMCwgXAogCS5kZXNjID0geyBcCkBAIC05NjEsMzIgKzk1NywzMiBAQAogCS8qIDYwMzAgUkVHIHdpdGggYmFzZSBhcyBQTUMgU2xhdmUgTWlzYyA6IDB4MDAzMCAqLwogCS8qIFR1cm5vbi1kZWxheSBhbmQgcmVtYXAgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIDYwMzAgYXJlIG5vdAogCSAgIHZlcmlmaWVkIHNpbmNlIHRoZSBzcGVjaWZpY2F0aW9uIGlzIG5vdCBwdWJsaWMgKi8KLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgxXzYwMzAsIDB4NTQsIDEwMDAsIDMzMDAsIDEpLAotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDJfNjAzMCwgMHg1OCwgMTAwMCwgMzMwMCwgMiksCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYM182MDMwLCAweDVjLCAxMDAwLCAzMzAwLCAzKSwKLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZNTUMsIDB4NjgsIDEwMDAsIDMzMDAsIDQpLAotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVlBQLCAweDZjLCAxMDAwLCAzMzAwLCA1KSwKLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZVU0lNLCAweDc0LCAxMDAwLCAzMzAwLCA3KSwKLQlUV0w2MDMwX0ZJWEVEX0xETyhWQU5BLCAweDUwLCAyMTAwLCAxNSwgMCksCi0JVFdMNjAzMF9GSVhFRF9MRE8oVkNYSU8sIDB4NjAsIDE4MDAsIDE2LCAwKSwKLQlUV0w2MDMwX0ZJWEVEX0xETyhWREFDLCAweDY0LCAxODAwLCAxNywgMCksCi0JVFdMNjAzMF9GSVhFRF9MRE8oVlVTQiwgMHg3MCwgMzMwMCwgMTgsIDApLAotCVRXTDYwMzBfRklYRURfUkVTT1VSQ0UoQ0xLMzJLRywgMHg4QywgNDgsIDApLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDFfNjAzMCwgMHg1NCwgMTAwMCwgMzMwMCksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYMl82MDMwLCAweDU4LCAxMDAwLCAzMzAwKSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgzXzYwMzAsIDB4NWMsIDEwMDAsIDMzMDApLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVk1NQywgMHg2OCwgMTAwMCwgMzMwMCksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWUFAsIDB4NmMsIDEwMDAsIDMzMDApLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVlVTSU0sIDB4NzQsIDEwMDAsIDMzMDApLAorCVRXTDYwMzBfRklYRURfTERPKFZBTkEsIDB4NTAsIDIxMDAsIDApLAorCVRXTDYwMzBfRklYRURfTERPKFZDWElPLCAweDYwLCAxODAwLCAwKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWREFDLCAweDY0LCAxODAwLCAwKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWVVNCLCAweDcwLCAzMzAwLCAwKSwKKwlUV0w2MDMwX0ZJWEVEX1JFU09VUkNFKENMSzMyS0csIDB4OEMsIDApLAogCiAJLyogNjAyNSBhcmUgcmVuYW1lZCBjb21wYXJlZCB0byA2MDMwIHZlcnNpb25zICovCi0JVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE8yLCAweDU0LCAxMDAwLCAzMzAwLCAxKSwKLQlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExETzQsIDB4NTgsIDEwMDAsIDMzMDAsIDIpLAotCVRXTDYwMjVfQURKVVNUQUJMRV9MRE8oTERPMywgMHg1YywgMTAwMCwgMzMwMCwgMyksCi0JVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE81LCAweDY4LCAxMDAwLCAzMzAwLCA0KSwKLQlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExETzEsIDB4NmMsIDEwMDAsIDMzMDAsIDUpLAotCVRXTDYwMjVfQURKVVNUQUJMRV9MRE8oTERPNywgMHg3NCwgMTAwMCwgMzMwMCwgNyksCi0JVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE82LCAweDYwLCAxMDAwLCAzMzAwLCAxNiksCi0JVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE9MTiwgMHg2NCwgMTAwMCwgMzMwMCwgMTcpLAotCVRXTDYwMjVfQURKVVNUQUJMRV9MRE8oTERPVVNCLCAweDcwLCAxMDAwLCAzMzAwLCAxOCksCisJVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE8yLCAweDU0LCAxMDAwLCAzMzAwKSwKKwlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExETzQsIDB4NTgsIDEwMDAsIDMzMDApLAorCVRXTDYwMjVfQURKVVNUQUJMRV9MRE8oTERPMywgMHg1YywgMTAwMCwgMzMwMCksCisJVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE81LCAweDY4LCAxMDAwLCAzMzAwKSwKKwlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExETzEsIDB4NmMsIDEwMDAsIDMzMDApLAorCVRXTDYwMjVfQURKVVNUQUJMRV9MRE8oTERPNywgMHg3NCwgMTAwMCwgMzMwMCksCisJVFdMNjAyNV9BREpVU1RBQkxFX0xETyhMRE82LCAweDYwLCAxMDAwLCAzMzAwKSwKKwlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExET0xOLCAweDY0LCAxMDAwLCAzMzAwKSwKKwlUV0w2MDI1X0FESlVTVEFCTEVfTERPKExET1VTQiwgMHg3MCwgMTAwMCwgMzMwMCksCiAKLQlUV0w2MDI1X0FESlVTVEFCTEVfU01QUyhTTVBTMywgMHgzNCwgMSksCi0JVFdMNjAyNV9BREpVU1RBQkxFX1NNUFMoU01QUzQsIDB4MTAsIDIpLAotCVRXTDYwMjVfQURKVVNUQUJMRV9TTVBTKFZJTywgMHgxNiwgMyksCisJVFdMNjAyNV9BREpVU1RBQkxFX1NNUFMoU01QUzMsIDB4MzQpLAorCVRXTDYwMjVfQURKVVNUQUJMRV9TTVBTKFNNUFM0LCAweDEwKSwKKwlUV0w2MDI1X0FESlVTVEFCTEVfU01QUyhWSU8sIDB4MTYpLAogfTsKIAogc3RhdGljIHU4IHR3bF9nZXRfc21wc19vZmZzZXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCmluZGV4IGEwOTgyZTguLmJkMzUzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYwpAQCAtMjY3LDIzICsyNjcsNiBAQAogCXJldHVybiB2c2VsOwogfQogCi1zdGF0aWMgaW50IHdtODMxeF9idWNrdl9zZWxlY3RfbWF4X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCi0JCQkJCSAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCi17Ci0JdTE2IHZzZWw7Ci0KLQlpZiAobWF4X3VWIDwgNjAwMDAwIHx8IG1heF91ViA+IDE4MDAwMDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdnNlbCA9ICgobWF4X3VWIC0gNjAwMDAwKSAvIDEyNTAwKSArIDg7Ci0KLQlpZiAod204MzF4X2J1Y2t2X2xpc3Rfdm9sdGFnZShyZGV2LCB2c2VsKSA8IG1pbl91ViB8fAotCSAgICB3bTgzMXhfYnVja3ZfbGlzdF92b2x0YWdlKHJkZXYsIHZzZWwpIDwgbWF4X3VWKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiB2c2VsOwotfQotCiBzdGF0aWMgaW50IHdtODMxeF9idWNrdl9zZXRfZHZzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgc3RhdGUpCiB7CiAJc3RydWN0IHdtODMxeF9kY2RjICpkY2RjID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKQEAgLTMzOCwyOCArMzIxLDIzIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiBTZXQgdGhlIGhpZ2ggdm9sdGFnZSBhcyB0aGUgRFZTIHZvbHRhZ2UuICBUaGlzIGlzIG9wdGltaXNlZAotCSAqIGZvciBDUFVmcmVxIHVzYWdlLCBtb3N0IHByb2Nlc3NvcnMgd2lsbCBrZWVwIHRoZSBtYXhpbXVtCi0JICogdm9sdGFnZSBjb25zdGFudCBhbmQgbG93ZXIgdGhlIG1pbmltdW0gd2l0aCB0aGUgZnJlcXVlbmN5LiAqLwotCXZzZWwgPSB3bTgzMXhfYnVja3Zfc2VsZWN0X21heF92b2x0YWdlKHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKLQlpZiAodnNlbCA8IDApIHsKLQkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIC0gYXQgd29yc3QgdGhlIHNhbWUgdnNlbAotCQkgKiBzaG91bGQgYmUgY2hvc2VuICovCi0JCVdBUk5fT04odnNlbCA8IDApOwotCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIHRoaXMgVlNFTCBpcyBoaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmUgd2UndmUgc2VlbiB0aGVuCisJICogcmVtZW1iZXIgaXQgYXMgdGhlIERWUyBWU0VMLiAgVGhpcyBpcyBvcHRpbWlzZWQgZm9yIENQVWZyZXEKKwkgKiB1c2FnZSB3aGVyZSB3ZSB3YW50IHRvIGdldCB0byB0aGUgaGlnaGVzdCB2b2x0YWdlIHZlcnkKKwkgKiBxdWlja2x5LgorCSAqLworCWlmICh2c2VsID4gZGNkYy0+ZHZzX3ZzZWwpIHsKKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZHZzX3JlZywKKwkJCQkgICAgICBXTTgzMVhfREMxX0RWU19WU0VMX01BU0ssCisJCQkJICAgICAgZGNkYy0+ZHZzX3ZzZWwpOworCQlpZiAocmV0ID09IDApCisJCQlkY2RjLT5kdnNfdnNlbCA9IHZzZWw7CisJCWVsc2UKKwkJCWRldl93YXJuKHdtODMxeC0+ZGV2LAorCQkJCSAiRmFpbGVkIHRvIHNldCBEQ0RDIERWUyBWU0VMOiAlZFxuIiwgcmV0KTsKIAl9CiAKLQkvKiBEb24ndCBib3RoZXIgaWYgaXQncyB0aGUgc2FtZSBWU0VMIHdlJ3JlIGFscmVhZHkgdXNpbmcgKi8KLQlpZiAodnNlbCA9PSBkY2RjLT5vbl92c2VsKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGR2c19yZWcsIFdNODMxWF9EQzFfRFZTX1ZTRUxfTUFTSywgdnNlbCk7Ci0JaWYgKHJldCA9PSAwKQotCQlkY2RjLT5kdnNfdnNlbCA9IHZzZWw7Ci0JZWxzZQotCQlkZXZfd2Fybih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBzZXQgRENEQyBEVlMgVlNFTDogJWRcbiIsCi0JCQkgcmV0KTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NTYsMjcgKzQzNCw2IEBACiAJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmR2c19ncGlvKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKHBkYXRhLT5kdnNfY29udHJvbF9zcmMpIHsKLQljYXNlIDE6Ci0JCWN0cmwgPSAyIDw8IFdNODMxWF9EQzFfRFZTX1NSQ19TSElGVDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQljdHJsID0gMyA8PCBXTTgzMVhfREMxX0RWU19TUkNfU0hJRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIod204MzF4LT5kZXYsICJJbnZhbGlkIERWUyBjb250cm9sIHNvdXJjZSAlZCBmb3IgJXNcbiIsCi0JCQlwZGF0YS0+ZHZzX2NvbnRyb2xfc3JjLCBkY2RjLT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRjZGMtPmJhc2UgKyBXTTgzMVhfRENEQ19EVlNfQ09OVFJPTCwKLQkJCSAgICAgIFdNODMxWF9EQzFfRFZTX1NSQ19NQVNLLCBjdHJsKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHNldCAlcyBEVlMgc291cmNlOiAlZFxuIiwKLQkJCWRjZGMtPm5hbWUsIHJldCk7Ci0JCXJldHVybjsKLQl9Ci0KIAlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmR2c19ncGlvLCAiRENEQyBEVlMiKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIGdldCAlcyBEVlMgR1BJTzogJWRcbiIsCkBAIC00OTgsMTcgKzQ1NSw1NyBAQAogCX0KIAogCWRjZGMtPmR2c19ncGlvID0gcGRhdGEtPmR2c19ncGlvOworCisJc3dpdGNoIChwZGF0YS0+ZHZzX2NvbnRyb2xfc3JjKSB7CisJY2FzZSAxOgorCQljdHJsID0gMiA8PCBXTTgzMVhfREMxX0RWU19TUkNfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3RybCA9IDMgPDwgV004MzFYX0RDMV9EVlNfU1JDX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiSW52YWxpZCBEVlMgY29udHJvbCBzb3VyY2UgJWQgZm9yICVzXG4iLAorCQkJcGRhdGEtPmR2c19jb250cm9sX3NyYywgZGNkYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiBEVlNfVlNFTCBpcyBzZXQgdG8gdGhlIG1pbmltdW0gdmFsdWUgdGhlbiByYWlzZSBpdCB0byBPTl9WU0VMCisJICogdG8gbWFrZSBib290c3RyYXBwaW5nIGEgYml0IHNtb290aGVyLgorCSAqLworCWlmICghZGNkYy0+ZHZzX3ZzZWwpIHsKKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwKKwkJCQkgICAgICBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfRFZTX0NPTlRST0wsCisJCQkJICAgICAgV004MzFYX0RDMV9EVlNfVlNFTF9NQVNLLCBkY2RjLT5vbl92c2VsKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGNkYy0+ZHZzX3ZzZWwgPSBkY2RjLT5vbl92c2VsOworCQllbHNlCisJCQlkZXZfd2Fybih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBzZXQgRFZTX1ZTRUw6ICVkXG4iLAorCQkJCSByZXQpOworCX0KKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRjZGMtPmJhc2UgKyBXTTgzMVhfRENEQ19EVlNfQ09OVFJPTCwKKwkJCSAgICAgIFdNODMxWF9EQzFfRFZTX1NSQ19NQVNLLCBjdHJsKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiRmFpbGVkIHRvIHNldCAlcyBEVlMgc291cmNlOiAlZFxuIiwKKwkJCWRjZGMtPm5hbWUsIHJldCk7CisJfQogfQogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTgzMXhfYnVja3ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHdtODMxeF9wZGF0YSAqcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgaWQgPSBwZGV2LT5pZCAlIEFSUkFZX1NJWkUocGRhdGEtPmRjZGMpOworCWludCBpZDsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldCwgaXJxOwogCisJaWYgKHBkYXRhICYmIHBkYXRhLT53bTgzMXhfbnVtKQorCQlpZCA9IChwZGF0YS0+d204MzF4X251bSAqIDEwKSArIDE7CisJZWxzZQorCQlpZCA9IDA7CisJaWQgPSBwZGV2LT5pZCAtIGlkOworCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUHJvYmluZyBEQ0RDJWRcbiIsIGlkICsgMSk7CiAKIAlpZiAocGRhdGEgPT0gTlVMTCB8fCBwZGF0YS0+ZGNkY1tpZF0gPT0gTlVMTCkKQEAgLTU0NSw3ICs1NDIsNyBAQAogCX0KIAlkY2RjLT5vbl92c2VsID0gcmV0ICYgV004MzFYX0RDMV9PTl9WU0VMX01BU0s7CiAKLQlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfT05fQ09ORklHKTsKKwlyZXQgPSB3bTgzMXhfcmVnX3JlYWQod204MzF4LCBkY2RjLT5iYXNlICsgV004MzFYX0RDRENfRFZTX0NPTlRST0wpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIod204MzF4LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBEVlMgVlNFTDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwpAQCAtNzA5LDExICs3MDYsMTcgQEAKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHdtODMxeF9wZGF0YSAqcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgaWQgPSBwZGV2LT5pZCAlIEFSUkFZX1NJWkUocGRhdGEtPmRjZGMpOworCWludCBpZDsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldCwgaXJxOwogCisJaWYgKHBkYXRhICYmIHBkYXRhLT53bTgzMXhfbnVtKQorCQlpZCA9IChwZGF0YS0+d204MzF4X251bSAqIDEwKSArIDE7CisJZWxzZQorCQlpZCA9IDA7CisJaWQgPSBwZGV2LT5pZCAtIGlkOworCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUHJvYmluZyBEQ0RDJWRcbiIsIGlkICsgMSk7CiAKIAlpZiAocGRhdGEgPT0gTlVMTCB8fCBwZGF0YS0+ZGNkY1tpZF0gPT0gTlVMTCkKQEAgLTEwNDYsMyArMTA0OSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODMxeC1idWNrdiIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtYnVja3AiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204MzF4LWVwZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCmluZGV4IDIyMjBjZjhkLi42NzA5NzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCkBAIC0zMTAsMTEgKzMxMCwxNyBAQAogewogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgd204MzF4X3BkYXRhICpwZGF0YSA9IHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWludCBpZCA9IHBkZXYtPmlkICUgQVJSQVlfU0laRShwZGF0YS0+bGRvKTsKKwlpbnQgaWQ7CiAJc3RydWN0IHdtODMxeF9sZG8gKmxkbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0LCBpcnE7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPndtODMxeF9udW0pCisJCWlkID0gKHBkYXRhLT53bTgzMXhfbnVtICogMTApICsgMTsKKwllbHNlCisJCWlkID0gMDsKKwlpZCA9IHBkZXYtPmlkIC0gaWQ7CisKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJQcm9iaW5nIExETyVkXG4iLCBpZCArIDEpOwogCiAJaWYgKHBkYXRhID09IE5VTEwgfHwgcGRhdGEtPmxkb1tpZF0gPT0gTlVMTCkKQEAgLTU3NCwxMSArNTgwLDE3IEBACiB7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCB3bTgzMXhfcGRhdGEgKnBkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaW50IGlkID0gcGRldi0+aWQgJSBBUlJBWV9TSVpFKHBkYXRhLT5sZG8pOworCWludCBpZDsKIAlzdHJ1Y3Qgd204MzF4X2xkbyAqbGRvOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQsIGlycTsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+d204MzF4X251bSkKKwkJaWQgPSAocGRhdGEtPndtODMxeF9udW0gKiAxMCkgKyAxOworCWVsc2UKKwkJaWQgPSAwOworCWlkID0gcGRldi0+aWQgLSBpZDsKKwogCWRldl9kYmcoJnBkZXYtPmRldiwgIlByb2JpbmcgTERPJWRcbiIsIGlkICsgMSk7CiAKIAlpZiAocGRhdGEgPT0gTlVMTCB8fCBwZGF0YS0+bGRvW2lkXSA9PSBOVUxMKQpAQCAtNzY0LDExICs3NzYsMTggQEAKIHsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHdtODMxeF9wZGF0YSAqcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgaWQgPSBwZGV2LT5pZCAlIEFSUkFZX1NJWkUocGRhdGEtPmxkbyk7CisJaW50IGlkOwogCXN0cnVjdCB3bTgzMXhfbGRvICpsZG87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+d204MzF4X251bSkKKwkJaWQgPSAocGRhdGEtPndtODMxeF9udW0gKiAxMCkgKyAxOworCWVsc2UKKwkJaWQgPSAwOworCWlkID0gcGRldi0+aWQgLSBpZDsKKworCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiUHJvYmluZyBMRE8lZFxuIiwgaWQgKyAxKTsKIAogCWlmIChwZGF0YSA9PSBOVUxMIHx8IHBkYXRhLT5sZG9baWRdID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKaW5kZXggMzViMjk1OC4uMWE2YTY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204OTk0LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYwpAQCAtNDMsNyArNDMsNyBAQAogCWlmICghbGRvLT5lbmFibGUpCiAJCXJldHVybiAwOwogCi0JZ3Bpb19zZXRfdmFsdWUobGRvLT5lbmFibGUsIDEpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGxkby0+ZW5hYmxlLCAxKTsKIAlsZG8tPmlzX2VuYWJsZWQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CkBAIC01Nyw3ICs1Nyw3IEBACiAJaWYgKCFsZG8tPmVuYWJsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlncGlvX3NldF92YWx1ZShsZG8tPmVuYWJsZSwgMCk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobGRvLT5lbmFibGUsIDApOwogCWxkby0+aXNfZW5hYmxlZCA9IGZhbHNlOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDMxOTVkYmQuLjQ0ZTkxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC02MzksNyArNjM5LDcgQEAKIHN0YXRpYyBpbnQgcnRjX3VwZGF0ZV9ocnRpbWVyKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIGludCBlbmFibGVkKQogewogCS8qCi0JICogV2UgdW5jb25kaXRpb25hbGx5IGNhbmNlbCB0aGUgdGltZXIgaGVyZSwgYmVjYXVzZSBvdGhlcndpc2UKKwkgKiBXZSBhbHdheXMgY2FuY2VsIHRoZSB0aW1lciBoZXJlIGZpcnN0LCBiZWNhdXNlIG90aGVyd2lzZQogCSAqIHdlIGNvdWxkIHJ1biBpbnRvIEJVR19PTih0aW1lci0+c3RhdGUgIT0gSFJUSU1FUl9TVEFURV9DQUxMQkFDSyk7CiAJICogd2hlbiB3ZSBtYW5hZ2UgdG8gc3RhcnQgdGhlIHRpbWVyIGJlZm9yZSB0aGUgY2FsbGJhY2sKIAkgKiByZXR1cm5zIEhSVElNRVJfUkVTVEFSVC4KQEAgLTcwOCw3ICs3MDgsNyBAQAogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoZnJlcSA8PSAwIHx8IGZyZXEgPiA1MDAwKQorCWlmIChmcmVxIDw9IDAgfHwgZnJlcSA+IFJUQ19NQVhfRlJFUSkKIAkJcmV0dXJuIC1FSU5WQUw7CiByZXRyeToKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKaW5kZXggMzM1NTUxZC4uMTRhNDJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwpAQCAtMzYsNiArMzYsNyBAQAogICovCiBzdHJ1Y3QgZXA5M3h4X3J0YyB7CiAJdm9pZCBfX2lvbWVtCSptbWlvX2Jhc2U7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIH07CiAKIHN0YXRpYyBpbnQgZXA5M3h4X3J0Y19nZXRfc3djb21wKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgKnByZWxvYWQsCkBAIC0xMzAsNyArMTMxLDYgQEAKIHsKIAlzdHJ1Y3QgZXA5M3h4X3J0YyAqZXA5M3h4X3J0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCWludCBlcnI7CiAKIAllcDkzeHhfcnRjID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZXA5M3h4X3J0YyksIEdGUF9LRVJORUwpOwpAQCAtMTUxLDEyICsxNTEsMTIgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZXA5M3h4X3J0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVwOTN4eF9ydGMpOwogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLAorCWVwOTN4eF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCQkmcGRldi0+ZGV2LCAmZXA5M3h4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHJ0YykpIHsKLQkJZXJyID0gUFRSX0VSUihydGMpOworCWlmIChJU19FUlIoZXA5M3h4X3J0Yy0+cnRjKSkgeworCQllcnIgPSBQVFJfRVJSKGVwOTN4eF9ydGMtPnJ0Yyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihlcDkzeHhfcnRjLT5ydGMpOwogZXhpdDoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CkBAIC0xNzYsMTEgKzE3NiwxMSBAQAogCiBzdGF0aWMgaW50IF9fZXhpdCBlcDkzeHhfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3J0YyAqZXA5M3h4X3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9ydGNfc3lzZnNfZmlsZXMpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihlcDkzeHhfcnRjLT5ydGMpOwogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWlteGRpLmMgYi9kcml2ZXJzL3J0Yy9ydGMtaW14ZGkuYwppbmRleCAyZGQzYzAxLi5kOTNhOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtaW14ZGkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtaW14ZGkuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qIERyeUljZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxpYi5jIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCmluZGV4IDA3NWYxNzAuLmM0Y2YwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKQEAgLTg1LDYgKzg1LDggQEAKIAl0aW1lIC09IHRtLT50bV9ob3VyICogMzYwMDsKIAl0bS0+dG1fbWluID0gdGltZSAvIDYwOwogCXRtLT50bV9zZWMgPSB0aW1lIC0gdG0tPnRtX21pbiAqIDYwOworCisJdG0tPnRtX2lzZHN0ID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wocnRjX3RpbWVfdG9fdG0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBiY2FlOGRkLi43Nzg5MDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCQlwcl9pbmZvKCIlczogYWxyZWFkeSBydW5uaW5nXG4iLCBwZGV2LT5uYW1lKTsKIAogCS8qIGZvcmNlIHRvIDI0IGhvdXIgbW9kZSAqLwotCW5ld19jdHJsID0gcmVnICYgfihPTUFQX1JUQ19DVFJMX1NQTElUfE9NQVBfUlRDX0NUUkxfQVVUT19DT01QKTsKKwluZXdfY3RybCA9IHJlZyAmIChPTUFQX1JUQ19DVFJMX1NQTElUfE9NQVBfUlRDX0NUUkxfQVVUT19DT01QKTsKIAluZXdfY3RybCB8PSBPTUFQX1JUQ19DVFJMX1NUT1A7CiAKIAkvKiBCT0FSRC1TUEVDSUZJQyBDVVNUT01JWkFUSU9OIENBTiBHTyBIRVJFOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCmluZGV4IDkzMjlkYmIuLjc2MzlhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTUxLDYgKzUxLDI3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soczNjX3J0Y19waWVfbG9jayk7CiAKK3N0YXRpYyB2b2lkIHMzY19ydGNfYWxhcm1fY2xrX2VuYWJsZShib29sIGVuYWJsZSkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHMzY19ydGNfYWxhcm1fY2xrX2xvY2spOworCXN0YXRpYyBib29sIGFsYXJtX2Nsa19lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnMzY19ydGNfYWxhcm1fY2xrX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWFsYXJtX2Nsa19lbmFibGVkKSB7CisJCQljbGtfZW5hYmxlKHJ0Y19jbGspOworCQkJYWxhcm1fY2xrX2VuYWJsZWQgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFsYXJtX2Nsa19lbmFibGVkKSB7CisJCQljbGtfZGlzYWJsZShydGNfY2xrKTsKKwkJCWFsYXJtX2Nsa19lbmFibGVkID0gZmFsc2U7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmczNjX3J0Y19hbGFybV9jbGtfbG9jaywgaXJxX2ZsYWdzKTsKK30KKwogLyogSVJRIEhhbmRsZXJzICovCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzM2NfcnRjX2FsYXJtaXJxKGludCBpcnEsIHZvaWQgKmlkKQpAQCAtNjQsNiArODUsOSBAQAogCQl3cml0ZWIoUzNDMjQxMF9JTlRQX0FMTSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9JTlRQKTsKIAogCWNsa19kaXNhYmxlKHJ0Y19jbGspOworCisJczNjX3J0Y19hbGFybV9jbGtfZW5hYmxlKGZhbHNlKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtOTcsNiArMTIxLDggQEAKIAl3cml0ZWIodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CiAJY2xrX2Rpc2FibGUocnRjX2Nsayk7CiAKKwlzM2NfcnRjX2FsYXJtX2Nsa19lbmFibGUoZW5hYmxlZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUyLDEwICsxNzgsNiBAQAogCQlnb3RvIHJldHJ5X2dldF90aW1lOwogCX0KIAotCXByX2RlYnVnKCJyZWFkIHRpbWUgJTA0ZC4lMDJkLiUwMmQgJTAyZDolMDJkOiUwMmRcbiIsCi0JCSAxOTAwICsgcnRjX3RtLT50bV95ZWFyLCBydGNfdG0tPnRtX21vbiwgcnRjX3RtLT50bV9tZGF5LAotCQkgcnRjX3RtLT50bV9ob3VyLCBydGNfdG0tPnRtX21pbiwgcnRjX3RtLT50bV9zZWMpOwotCiAJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKIAlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOwogCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKQEAgLTE2NCw2ICsxODYsMTEgQEAKIAlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAlydGNfdG0tPnRtX3llYXIgKz0gMTAwOworCisJcHJfZGVidWcoInJlYWQgdGltZSAlMDRkLiUwMmQuJTAyZCAlMDJkOiUwMmQ6JTAyZFxuIiwKKwkJIDE5MDAgKyBydGNfdG0tPnRtX3llYXIsIHJ0Y190bS0+dG1fbW9uLCBydGNfdG0tPnRtX21kYXksCisJCSBydGNfdG0tPnRtX2hvdXIsIHJ0Y190bS0+dG1fbWluLCBydGNfdG0tPnRtX3NlYyk7CisKIAlydGNfdG0tPnRtX21vbiAtPSAxOwogCiAJY2xrX2Rpc2FibGUocnRjX2Nsayk7CkBAIC0yNjksMTAgKzI5Niw5IEBACiAJY2xrX2VuYWJsZShydGNfY2xrKTsKIAlwcl9kZWJ1ZygiczNjX3J0Y19zZXRhbGFybTogJWQsICUwNGQuJTAyZC4lMDJkICUwMmQ6JTAyZDolMDJkXG4iLAogCQkgYWxybS0+ZW5hYmxlZCwKLQkJIDE5MDAgKyB0bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXksCisJCSAxOTAwICsgdG0tPnRtX3llYXIsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKIAkJIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKIAotCiAJYWxybV9lbiA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX1JUQ0FMTSkgJiBTM0MyNDEwX1JUQ0FMTV9BTE1FTjsKIAl3cml0ZWIoMHgwMCwgYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIApAQCAtMzE5LDQ5ICszNDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzY19ydGNfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHMzY19ydGNfYWxhcm1ubywgczNjX3J0Y19hbGFybWlycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCwgICJzM2MyNDEwLXJ0YyBhbGFybSIsIHJ0Y19kZXYpOwotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIklSUSVkIGVycm9yICVkXG4iLCBzM2NfcnRjX2FsYXJtbm8sIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gcmVxdWVzdF9pcnEoczNjX3J0Y190aWNrbm8sIHMzY19ydGNfdGlja2lycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCwgICJzM2MyNDEwLXJ0YyB0aWNrIiwgcnRjX2Rldik7Ci0KLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiSVJRJWQgZXJyb3IgJWRcbiIsIHMzY19ydGNfdGlja25vLCByZXQpOwotCQlnb3RvIHRpY2tfZXJyOwotCX0KLQotCXJldHVybiByZXQ7Ci0KLSB0aWNrX2VycjoKLQlmcmVlX2lycShzM2NfcnRjX2FsYXJtbm8sIHJ0Y19kZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiBkbyBub3QgY2xlYXIgQUlFIGhlcmUsIGl0IG1heSBiZSBuZWVkZWQgZm9yIHdha2UgKi8KLQotCWZyZWVfaXJxKHMzY19ydGNfYWxhcm1ubywgcnRjX2Rldik7Ci0JZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Y19kZXYpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgczNjX3J0Y29wcyA9IHsKLQkub3BlbgkJPSBzM2NfcnRjX29wZW4sCi0JLnJlbGVhc2UJPSBzM2NfcnRjX3JlbGVhc2UsCiAJLnJlYWRfdGltZQk9IHMzY19ydGNfZ2V0dGltZSwKIAkuc2V0X3RpbWUJPSBzM2NfcnRjX3NldHRpbWUsCiAJLnJlYWRfYWxhcm0JPSBzM2NfcnRjX2dldGFsYXJtLApAQCAtNDI1LDYgKzQwOSw5IEBACiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKKwlmcmVlX2lycShzM2NfcnRjX2FsYXJtbm8sIHJ0Yyk7CisJZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Yyk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCkBAIC01NDgsMTAgKzUzNSwzMiBAQAogCiAJczNjX3J0Y19zZXRmcmVxKCZwZGV2LT5kZXYsIDEpOwogCisJcmV0ID0gcmVxdWVzdF9pcnEoczNjX3J0Y19hbGFybW5vLCBzM2NfcnRjX2FsYXJtaXJxLAorCQkJICBJUlFGX0RJU0FCTEVELCAgInMzYzI0MTAtcnRjIGFsYXJtIiwgcnRjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSVkIGVycm9yICVkXG4iLCBzM2NfcnRjX2FsYXJtbm8sIHJldCk7CisJCWdvdG8gZXJyX2FsYXJtX2lycTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShzM2NfcnRjX3RpY2tubywgczNjX3J0Y190aWNraXJxLAorCQkJICBJUlFGX0RJU0FCTEVELCAgInMzYzI0MTAtcnRjIHRpY2siLCBydGMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRJWQgZXJyb3IgJWRcbiIsIHMzY19ydGNfdGlja25vLCByZXQpOworCQlmcmVlX2lycShzM2NfcnRjX2FsYXJtbm8sIHJ0Yyk7CisJCWdvdG8gZXJyX3RpY2tfaXJxOworCX0KKwogCWNsa19kaXNhYmxlKHJ0Y19jbGspOwogCiAJcmV0dXJuIDA7CiAKKyBlcnJfdGlja19pcnE6CisJZnJlZV9pcnEoczNjX3J0Y19hbGFybW5vLCBydGMpOworCisgZXJyX2FsYXJtX2lycToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwogIGVycl9ub3J0YzoKIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAljbGtfZGlzYWJsZShydGNfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10d2wuYyBiL2RyaXZlcnMvcnRjL3J0Yy10d2wuYwppbmRleCA5YTgxZjc3Li4yMDY4N2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHdsLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR3bC5jCkBAIC0zNjIsMTQgKzM2Miw2IEBACiAJaW50IHJlczsKIAl1OCByZF9yZWc7CiAKLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCS8qIFdPUktBUk9VTkQgZm9yIGxvY2tkZXAgZm9yY2luZyBJUlFGX0RJU0FCTEVEIG9uIHVzLCB3aGljaAotCSAqIHdlIGRvbid0IHdhbnQgYW5kIGNhbid0IHRvbGVyYXRlLiAgQWx0aG91Z2ggaXQgbWlnaHQgYmUKLQkgKiBmcmllbmRsaWVyIG5vdCB0byBib3Jyb3cgdGhpcyB0aHJlYWQgY29udGV4dC4uLgotCSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLSNlbmRpZgotCiAJcmVzID0gdHdsX3J0Y19yZWFkX3U4KCZyZF9yZWcsIFJFR19SVENfU1RBVFVTX1JFRyk7CiAJaWYgKHJlcykKIAkJZ290byBvdXQ7CkBAIC00MjgsMjQgKzQyMCwxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQgdHdsX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IC1FSU5WQUw7CiAJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJdTggcmRfcmVnOwogCiAJaWYgKGlycSA8PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKLQkJCQkgICZwZGV2LT5kZXYsICZ0d2xfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjKSkgewotCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIFJUQyBkZXZpY2UsIGVyciAlbGRcbiIsCi0JCQlQVFJfRVJSKHJ0YykpOwotCQlnb3RvIG91dDA7Ci0KLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOworCQlnb3RvIG91dDE7CiAKIAlyZXQgPSB0d2xfcnRjX3JlYWRfdTgoJnJkX3JlZywgUkVHX1JUQ19TVEFUVVNfUkVHKTsKIAlpZiAocmV0IDwgMCkKQEAgLTQ2MiwxNCArNDQyLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQxOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB0d2xfcnRjX2ludGVycnVwdCwKLQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCWRldl9uYW1lKCZydGMtPmRldiksIHJ0Yyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIGlzIG5vdCBmcmVlLlxuIik7Ci0JCWdvdG8gb3V0MTsKLQl9Ci0KIAlpZiAodHdsX2NsYXNzX2lzXzYwMzAoKSkgewogCQl0d2w2MDMwX2ludGVycnVwdF91bm1hc2soVFdMNjAzMF9SVENfSU5UX01BU0ssCiAJCQlSRUdfSU5UX01TS19MSU5FX0EpOwpAQCAtNDgwLDI4ICs0NTIsNDQgQEAKIAkvKiBDaGVjayBSVEMgbW9kdWxlIHN0YXR1cywgRW5hYmxlIGlmIGl0IGlzIG9mZiAqLwogCXJldCA9IHR3bF9ydGNfcmVhZF91OCgmcmRfcmVnLCBSRUdfUlRDX0NUUkxfUkVHKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQyOworCQlnb3RvIG91dDE7CiAKIAlpZiAoIShyZF9yZWcgJiBCSVRfUlRDX0NUUkxfUkVHX1NUT1BfUlRDX00pKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJFbmFibGluZyBUV0wtUlRDLlxuIik7CiAJCXJkX3JlZyA9IEJJVF9SVENfQ1RSTF9SRUdfU1RPUF9SVENfTTsKIAkJcmV0ID0gdHdsX3J0Y193cml0ZV91OChyZF9yZWcsIFJFR19SVENfQ1RSTF9SRUcpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0MjsKKwkJCWdvdG8gb3V0MTsKIAl9CiAKIAkvKiBpbml0IGNhY2hlZCBJUlEgZW5hYmxlIGJpdHMgKi8KIAlyZXQgPSB0d2xfcnRjX3JlYWRfdTgoJnJ0Y19pcnFfYml0cywgUkVHX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQxOwogCi0JcmV0dXJuIHJldDsKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsCisJCQkJICAmcGRldi0+ZGV2LCAmdHdsX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciBSVEMgZGV2aWNlLCBlcnIgJWxkXG4iLAorCQkJUFRSX0VSUihydGMpKTsKKwkJZ290byBvdXQxOworCX0KKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwgTlVMTCwgdHdsX3J0Y19pbnRlcnJ1cHQsCisJCQkJICAgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCQkgICBkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBpcyBub3QgZnJlZS5cbiIpOworCQlnb3RvIG91dDI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKKwlyZXR1cm4gMDsKIAogb3V0MjoKLQlmcmVlX2lycShpcnEsIHJ0Yyk7Ci1vdXQxOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwotb3V0MDoKK291dDE6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggNDMyNDQ0YS4uYTFkM2RkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgpAQCAtODg4LDExICs4ODksMTEgQEAKIHsKIAljaGFyICpidWZmZXI7CiAKLQlidWZmZXIgPSBrbWFsbG9jKHVzZXJfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJYnVmZmVyID0gdm1hbGxvYyh1c2VyX2xlbiArIDEpOwogCWlmIChidWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNlcl9idWYsIHVzZXJfbGVuKSAhPSAwKSB7Ci0JCWtmcmVlKGJ1ZmZlcik7CisJCXZmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KIAkvKiBnb3QgdGhlIHN0cmluZywgbm93IHN0cmlwIGxpbmVmZWVkLiAqLwpAQCAtOTMwLDcgKzkzMSw3IEBACiAJCWRhc2RfcHJvZmlsZV9vZmYocHJvZik7CiAJfSBlbHNlCiAJCXJjID0gLUVJTlZBTDsKLQlrZnJlZShidWZmZXIpOworCXZmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDQyLDcgKzEwNDMsNyBAQAogCQlkYXNkX2dsb2JhbF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09GRjsKIAl9IGVsc2UKIAkJcmMgPSAtRUlOVkFMOwotCWtmcmVlKGJ1ZmZlcik7CisJdmZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCAzMGZiOTc5Li42ZTgzNWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xNDYxLDYgKzE0NjEsMTUgQEAKIAkJCQkiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWMgZmFpbGVkLCByYz0lZCIsIHJjKTsKIAkJZ290byBvdXRfZXJyMzsKIAl9CisKKwlpZiAoKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfVVNFUkFXKSAmJgorCSAgICAhKHByaXZhdGUtPnJkY19kYXRhLmZhY2lsaXRpZXMuUlRfaW5fTFIpKSB7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHN0b3JhZ2Ugc2VydmVyIGRvZXMgbm90ICIKKwkJCSJzdXBwb3J0IHJhdy10cmFjayBhY2Nlc3NcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2VycjM7CisJfQorCiAJLyogZmluZCB0aGUgdmFsaWQgY3lsaW5kZXIgc2l6ZSAqLwogCWlmIChwcml2YXRlLT5yZGNfZGF0YS5ub19jeWwgPT0gTFZfQ09NUEFUX0NZTCAmJgogCSAgICBwcml2YXRlLT5yZGNfZGF0YS5sb25nX25vX2N5bCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGViNGUwMzQuLmYxYTIwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtMjQ5LDYgKzI0OSw3IEBACiBzdGF0aWMgaW50IGRhc2RfaW9jdGxfcmVhZF9wcm9maWxlKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7CiAJc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QgKmRhdGE7CisJaW50IHJjID0gMDsKIAogCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKQEAgLTI3OSwxMSArMjgwLDE0IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZibG9jay0+cHJvZmlsZS5sb2NrKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19iaCgmYmxvY2stPnByb2ZpbGUubG9jayk7Ci0JCXJldHVybiAtRUlPOworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoY29weV90b191c2VyKGFyZ3AsIGRhdGEsIHNpemVvZigqZGF0YSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKKwkJcmMgPSAtRUZBVUxUOworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiByYzsKIH0KICNlbHNlCiBzdGF0aWMgaW50IGRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggNmMzYzUzNi4uZTEyOTg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMzEyLDE0ICszMTIsMTQgQEAKIAkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIHJlc2V0XG4iKTsKIAl9IGVsc2UKIAkJZ290byBvdXRfcGFyc2VfZXJyb3I7Ci0Ja2ZyZWUoYnVmZmVyKTsKKwl2ZnJlZShidWZmZXIpOwogCXJldHVybiB1c2VyX2xlbjsKIG91dF9wYXJzZV9lcnJvcjoKIAlyYyA9IC1FSU5WQUw7CiAJcHJfd2FybmluZygiJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciAvcHJvYy9kYXNkL3N0YXRpc3RpY3NcbiIsCiAJCXN0cik7CiBvdXRfZXJyb3I6Ci0Ja2ZyZWUoYnVmZmVyKTsKKwl2ZnJlZShidWZmZXIpOwogCXJldHVybiByYzsKICNlbHNlCiAJcHJfd2FybmluZygiL3Byb2MvZGFzZC9zdGF0aXN0aWNzOiBpcyBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwppbmRleCA3YWQzMGU3Li41ZjlmOTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCkBAIC04MiwxMiArODIsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlIHsKIAkJbGVuID0gKmNvdW50OwotCQlyYyA9IGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJ1ZltzaXplb2YoYnVmKSAtIDFdID0gJ1wwJzsKLQkJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworCQlyYyA9IGtzdHJ0b3VsX2Zyb21fdXNlcihidWZmZXIsIGxlbiwgMCwgJnZhbCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKIAkJaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNhbGxob21lX2VuYWJsZWQgPSB2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYwppbmRleCBiZTU1ZmIyLi44MzdlMDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKQEAgLTM4Myw4ICszODMsMTAgQEAKIAlzd2l0Y2ggKHNjY2ItPmhlYWRlci5yZXNwb25zZV9jb2RlKSB7CiAJY2FzZSAweDAwMjA6CiAJCXNldF9iaXQoaWQsIHNjbHBfc3RvcmFnZV9pZHMpOwotCQlmb3IgKGkgPSAwOyBpIDwgc2NjYi0+YXNzaWduZWQ7IGkrKykKLQkJCXNjbHBfdW5hc3NpZ25fc3RvcmFnZShzY2NiLT5lbnRyaWVzW2ldID4+IDE2KTsKKwkJZm9yIChpID0gMDsgaSA8IHNjY2ItPmFzc2lnbmVkOyBpKyspIHsKKwkJCWlmIChzY2NiLT5lbnRyaWVzW2ldKQorCQkJCXNjbHBfdW5hc3NpZ25fc3RvcmFnZShzY2NiLT5lbnRyaWVzW2ldID4+IDE2KTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDdiYzY0M2YuLmU1Yzk2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSAiY2hzYy5oIgogCiAjZGVmaW5lIFFESU9fQlVTWV9CSVRfUEFUSUVOQ0UJCSgxMDAgPDwgMTIpCS8qIDEwMCBtaWNyb3NlY29uZHMgKi8KKyNkZWZpbmUgUURJT19CVVNZX0JJVF9SRVRSWV9ERUxBWQkxMAkJLyogMTAgbWlsbGlzZWNvbmRzICovCisjZGVmaW5lIFFESU9fQlVTWV9CSVRfUkVUUklFUwkJMTAwMAkJLyogPSAxMHMgcmV0cnkgdGltZSAqLwogI2RlZmluZSBRRElPX0lOUFVUX1RIUkVTSE9MRAkJKDUwMCA8PCAxMikJLyogNTAwIG1pY3Jvc2Vjb25kcyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwppbmRleCBmOGIwM2E2Li4wZTYxNWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYwpAQCAtMTg4LDE5ICsxODgsMTMgQEAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IHFkaW9fcSAqcTsKIAl1bnNpZ25lZCBsb25nIHZhbDsKLQljaGFyIGJ1Zls4XTsKIAlpbnQgcmV0LCBpOwogCiAJaWYgKCFpcnFfcHRyKQogCQlyZXR1cm4gMDsKLQlpZiAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCWJ1Zltjb3VudF0gPSAwOwogCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7Ci0JaWYgKHJldCA8IDApCisJcmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNvdW50LCAxMCwgJnZhbCk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXN3aXRjaCAodmFsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBlNTgxNjljLi4yODhjOTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2NoaWQgPSAqKCh1MzIgKikgJnEtPmlycV9wdHItPnNjaGlkKTsKIAl1bnNpZ25lZCBpbnQgZmMgPSBRRElPX1NJR0FfV1JJVEU7CiAJdTY0IHN0YXJ0X3RpbWUgPSAwOwotCWludCBjYzsKKwlpbnQgcmV0cmllcyA9IDAsIGNjOwogCiAJaWYgKGlzX3FlYnNtKHEpKSB7CiAJCXNjaGlkID0gcS0+aXJxX3B0ci0+c2NoX3Rva2VuOwpAQCAtMzI1LDYgKzMyNSw3IEBACiAJLyogaGlwZXJzb2NrZXQgYnVzeSBjb25kaXRpb24gKi8KIAlpZiAodW5saWtlbHkoKmJ1c3lfYml0KSkgewogCQlXQVJOX09OKHF1ZXVlX3R5cGUocSkgIT0gUURJT19JUURJT19RRk1UIHx8IGNjICE9IDIpOworCQlyZXRyaWVzKys7CiAKIAkJaWYgKCFzdGFydF90aW1lKSB7CiAJCQlzdGFydF90aW1lID0gZ2V0X2Nsb2NrKCk7CkBAIC0zMzMsNiArMzM0LDExIEBACiAJCWlmICgoZ2V0X2Nsb2NrKCkgLSBzdGFydF90aW1lKSA8IFFESU9fQlVTWV9CSVRfUEFUSUVOQ0UpCiAJCQlnb3RvIGFnYWluOwogCX0KKwlpZiAocmV0cmllcykgeworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOLCBxLT5pcnFfcHRyLAorCQkJICAgICAgIiU0eCBjYzIgQkIxOiUxZCIsIFNDSF9OTyhxKSwgcS0+bnIpOworCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOLCBxLT5pcnFfcHRyLCAiY291bnQ6JXUiLCByZXRyaWVzKTsKKwl9CiAJcmV0dXJuIGNjOwogfQogCkBAIC03MjgsMTMgKzczNCwxNCBAQAogCiBzdGF0aWMgaW50IHFkaW9fa2lja19vdXRib3VuZF9xKHN0cnVjdCBxZGlvX3EgKnEpCiB7CisJaW50IHJldHJpZXMgPSAwLCBjYzsKIAl1bnNpZ25lZCBpbnQgYnVzeV9iaXQ7Ci0JaW50IGNjOwogCiAJaWYgKCFuZWVkX3NpZ2Ffb3V0KHEpKQogCQlyZXR1cm4gMDsKIAogCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXc6JTFkIiwgcS0+bnIpOworcmV0cnk6CiAJcXBlcmZfaW5jKHEsIHNpZ2Ffd3JpdGUpOwogCiAJY2MgPSBxZGlvX3NpZ2Ffb3V0cHV0KHEsICZidXN5X2JpdCk7CkBAIC03NDMsNyArNzUwLDExIEBACiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJaWYgKGJ1c3lfYml0KSB7Ci0JCQlEQkZfRVJST1IoIiU0eCBjYzIgUkVQOiUxZCIsIFNDSF9OTyhxKSwgcS0+bnIpOworCQkJd2hpbGUgKCsrcmV0cmllcyA8IFFESU9fQlVTWV9CSVRfUkVUUklFUykgeworCQkJCW1kZWxheShRRElPX0JVU1lfQklUX1JFVFJZX0RFTEFZKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQkJREJGX0VSUk9SKCIlNHggY2MyIEJCQzolMWQiLCBTQ0hfTk8ocSksIHEtPm5yKTsKIAkJCWNjIHw9IFFESU9fRVJST1JfU0lHQV9CVVNZOwogCQl9IGVsc2UKIAkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsIHEtPm5yKTsKQEAgLTc1Myw2ICs3NjQsMTAgQEAKIAkJREJGX0VSUk9SKCIlNHggU0lHQS1XOiUxZCIsIFNDSF9OTyhxKSwgY2MpOwogCQlicmVhazsKIAl9CisJaWYgKHJldHJpZXMpIHsKKwkJREJGX0VSUk9SKCIlNHggY2MyIEJCMjolMWQiLCBTQ0hfTk8ocSksIHEtPm5yKTsKKwkJREJGX0VSUk9SKCJjb3VudDoldSIsIHJldHJpZXMpOworCX0KIAlyZXR1cm4gY2M7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYS5oCmluZGV4IDNiMGFmMTEuLmE3OTZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmEuaApAQCAtMjcsNiArMjcsNyBAQAogc3RydWN0IGJmYV9zOwogCiB0eXBlZGVmIHZvaWQgKCpiZmFfaXNyX2Z1bmNfdCkgKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jYl9jYmZuX3N0YXR1c190KSAodm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwogCiAvKgogICogSW50ZXJydXB0IG1lc3NhZ2UgaGFuZGxlcnMKQEAgLTEyMSw2ICsxMjIsNyBAQAogI2RlZmluZSBiZmFfY2JfcXVldWUoX19iZmEsIF9faGNiX3FlLCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJXAogCQkoX19oY2JfcWUpLT5jYmZuICA9IChfX2NiZm4pOyAgICAgIFwKIAkJKF9faGNiX3FlKS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorCQkoX19oY2JfcWUpLT5wcmVfcm12ID0gQkZBX0ZBTFNFOwkJXAogCQlsaXN0X2FkZF90YWlsKCYoX19oY2JfcWUpLT5xZSwgJihfX2JmYSktPmNvbXBfcSk7ICAgICAgXAogCX0gd2hpbGUgKDApCiAKQEAgLTEzNSw2ICsxMzcsMTEgQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBiZmFfY2JfcXVldWVfc3RhdHVzKF9fYmZhLCBfX2hjYl9xZSwgX19zdGF0dXMpIGRvIHsJCVwKKwkJKF9faGNiX3FlKS0+Zndfc3RhdHVzID0gKF9fc3RhdHVzKTsJCQlcCisJCWxpc3RfYWRkX3RhaWwoJihfX2hjYl9xZSktPnFlLCAmKF9fYmZhKS0+Y29tcF9xKTsJXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBiZmFfY2JfcXVldWVfZG9uZShfX2hjYl9xZSkgZG8gewlcCiAJCShfX2hjYl9xZSktPm9uY2UgPSBCRkFfRkFMU0U7CVwKIAl9IHdoaWxlICgwKQpAQCAtMTc3LDcgKzE4NCw3IEBACiBzdHJ1Y3QgYmZhX2h3aWZfcyB7CiAJdm9pZCAoKmh3X3JlZ2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhKTsKIAl2b2lkICgqaHdfcmVxcV9hY2spKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcmVxcSk7Ci0Jdm9pZCAoKmh3X3JzcHFfYWNrKShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOworCXZvaWQgKCpod19yc3BxX2Fjaykoc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxLCB1MzIgY2kpOwogCXZvaWQgKCpod19tc2l4X2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOwogCXZvaWQgKCpod19tc2l4X2N0cmxfaW5zdGFsbCkoc3RydWN0IGJmYV9zICpiZmEpOwogCXZvaWQgKCpod19tc2l4X3F1ZXVlX2luc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKQEAgLTI2OCwxMCArMjc1LDggQEAKIAkoKF9fYmZhKS0+aW9jZmMuaHdpZi5od19tc2l4X3F1ZXVlX2luc3RhbGwoX19iZmEpKQogI2RlZmluZSBiZmFfbXNpeF91bmluc3RhbGwoX19iZmEpCQkJCQlcCiAJKChfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF91bmluc3RhbGwoX19iZmEpKQotI2RlZmluZSBiZmFfaXNyX3JzcHFfYWNrKF9fYmZhLCBfX3F1ZXVlKSBkbyB7CQkJCVwKLQlpZiAoKF9fYmZhKS0+aW9jZmMuaHdpZi5od19yc3BxX2FjaykJCQkJXAotCQkoX19iZmEpLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrKF9fYmZhLCBfX3F1ZXVlKTsJXAotfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhX2lzcl9yc3BxX2FjayhfX2JmYSwgX19xdWV1ZSwgX19jaSkJCQkJXAorCSgoX19iZmEpLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrKF9fYmZhLCBfX3F1ZXVlLCBfX2NpKSkKICNkZWZpbmUgYmZhX2lzcl9yZXFxX2FjayhfX2JmYSwgX19xdWV1ZSkgZG8gewkJCQlcCiAJaWYgKChfX2JmYSktPmlvY2ZjLmh3aWYuaHdfcmVxcV9hY2spCQkJCVwKIAkJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19yZXFxX2FjayhfX2JmYSwgX19xdWV1ZSk7CVwKQEAgLTMxMSw3ICszMTYsNyBAQAogdm9pZCBiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKIAogdm9pZCBiZmFfaHdjYl9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKLXZvaWQgYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKK3ZvaWQgYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxLCB1MzIgY2kpOwogdm9pZCBiZmFfaHdjYl9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcyk7CiB2b2lkIGJmYV9od2NiX21zaXhfY3RybF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKIHZvaWQgYmZhX2h3Y2JfbXNpeF9xdWV1ZV9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKQEAgLTMyNCw3ICszMjksOCBAQAogdm9pZCBiZmFfaHdjdF9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKIHZvaWQgYmZhX2h3Y3QyX3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaHdjdF9yZXFxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwotdm9pZCBiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwordm9pZCBiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEsIHUzMiBjaSk7Cit2b2lkIGJmYV9od2N0Ml9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEsIHUzMiBjaSk7CiB2b2lkIGJmYV9od2N0X21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKIHZvaWQgYmZhX2h3Y3RfbXNpeF9jdHJsX2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwogdm9pZCBiZmFfaHdjdF9tc2l4X3F1ZXVlX2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwpAQCAtMzc2LDYgKzM4MiwyMiBAQAogI2RlZmluZSBiZmFfZ2V0X2Z3X2Nsb2NrX3JlcyhfX2JmYSkJCVwKIAkoKF9fYmZhKS0+aW9jZmMuY2ZncnNwLT5md2NmZy5md190aWNrX3JlcykKIAorLyoKKyAqIGx1biBtYXNrIG1hY3JvcyByZXR1cm4gTlVMTCB3aGVuIG1pbiBjZmcgaXMgZW5hYmxlZCBhbmQgdGhlcmUgaXMKKyAqIG5vIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGx1bm1hc2suCisgKi8KKyNkZWZpbmUgYmZhX2dldF9sdW5fbWFzayhfX2JmYSkJCQkJCVwKKwkoKCYoX19iZmEpLT5tb2R1bGVzLmRjb25mX21vZCktPm1pbl9jZmcpID8gTlVMTCA6CVwKKwkgKCYoQkZBX0RDT05GX01PRChfX2JmYSktPmRjb25mLT5sdW5fbWFzaykpCisKKyNkZWZpbmUgYmZhX2dldF9sdW5fbWFza19saXN0KF9iZmEpCQkJCVwKKwkoKCYoX2JmYSktPm1vZHVsZXMuZGNvbmZfbW9kKS0+bWluX2NmZykgPyBOVUxMIDoJXAorCSAoYmZhX2dldF9sdW5fbWFzayhfYmZhKS0+bHVuX2xpc3QpCisKKyNkZWZpbmUgYmZhX2dldF9sdW5fbWFza19zdGF0dXMoX2JmYSkJCQkJXAorCSgoKCYoX2JmYSktPm1vZHVsZXMuZGNvbmZfbW9kKS0+bWluX2NmZykJCVwKKwkgPyBCRkFfTFVOTUFTS19NSU5DRkcgOiAoKGJmYV9nZXRfbHVuX21hc2soX2JmYSkpLT5zdGF0dXMpKQorCiB2b2lkIGJmYV9nZXRfcGNpaWRzKHN0cnVjdCBiZmFfcGNpaWRfcyAqKnBjaWlkcywgaW50ICpucGNpaWRzKTsKIHZvaWQgYmZhX2NmZ19nZXRfZGVmYXVsdChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpOwogdm9pZCBiZmFfY2ZnX2dldF9taW4oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKTsKQEAgLTQwNiw3ICs0MjgsMjIgQEAKIAogdm9pZCBiZmFfaW9jZmNfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKIHZvaWQgYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfY2JfZGNvbmZfbW9kaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX3N0YXR1c190IHN0YXR1cyk7CiAjZGVmaW5lIGJmYV90aW1lcl9zdGFydChfYmZhLCBfdGltZXIsIF90aW1lcmNiLCBfYXJnLCBfdGltZW91dCkJCVwKIAliZmFfdGltZXJfYmVnaW4oJihfYmZhKS0+dGltZXJfbW9kLCBfdGltZXIsIF90aW1lcmNiLCBfYXJnLCBfdGltZW91dCkKIAorc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyB7CisJc3RydWN0IGJmYV9jYl9xZV9zCWhjYl9xZTsKKwl2b2lkCQkJKmRhdGE7ICAvKiBEcml2ZXIgYnVmZmVyICovCit9OworCisvKiBDb21tb24gbWFjcm9zIHRvIG9wZXJhdGUgb24gcGVuZGluZyBzdGF0cy9hdHRyIGFwaXMgKi8KKyNkZWZpbmUgYmZhX3BlbmRpbmdfcV9pbml0KF9fcWUsIF9fY2JmbiwgX19jYmFyZywgX19kYXRhKSBkbyB7CVwKKwliZmFfcV9xZV9pbml0KCYoKF9fcWUpLT5oY2JfcWUucWUpKTsJCQlcCisJKF9fcWUpLT5oY2JfcWUuY2JmbiA9IChfX2NiZm4pOwkJCQlcCisJKF9fcWUpLT5oY2JfcWUuY2JhcmcgPSAoX19jYmFyZyk7CQkJXAorCShfX3FlKS0+aGNiX3FlLnByZV9ybXYgPSBCRkFfVFJVRTsJCQlcCisJKF9fcWUpLT5kYXRhID0gKF9fZGF0YSk7CQkJCVwKK30gd2hpbGUgKDApCisKICNlbmRpZiAvKiBfX0JGQV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYwppbmRleCBjMzhlNTg5Li40YmQ1NDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCkBAIC0zMyw2ICszMyw3IEBACiAJJmhhbF9tb2RfdWYsCiAJJmhhbF9tb2RfcnBvcnQsCiAJJmhhbF9tb2RfZmNwLAorCSZoYWxfbW9kX2Rjb25mLAogCU5VTEwKIH07CiAKQEAgLTIzNyw4ICsyMzgsNiBAQAogCXUzMglwaSwgY2k7CiAJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHE7CiAKLQliZmFfaXNyX3JzcHFfYWNrKGJmYSwgcWlkKTsKLQogCWNpID0gYmZhX3JzcHFfY2koYmZhLCBxaWQpOwogCXBpID0gYmZhX3JzcHFfcGkoYmZhLCBxaWQpOwogCkBAIC0yNTEsMTEgKzI1MCw5IEBACiAJfQogCiAJLyoKLQkgKiB1cGRhdGUgQ0kKKwkgKiBhY2tub3dsZWRnZSBSTUUgY29tcGxldGlvbnMgYW5kIHVwZGF0ZSBDSQogCSAqLwotCWJmYV9yc3BxX2NpKGJmYSwgcWlkKSA9IHBpOwotCXdyaXRlbChwaSwgYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jaVtxaWRdKTsKLQltbWlvd2IoKTsKKwliZmFfaXNyX3JzcHFfYWNrKGJmYSwgcWlkLCBjaSk7CiAKIAkvKgogCSAqIFJlc3VtZSBhbnkgcGVuZGluZyByZXF1ZXN0cyBpbiB0aGUgY29ycmVzcG9uZGluZyByZXFxLgpAQCAtMzI1LDIzICszMjIsMTkgQEAKIAlpbnQgcXVldWU7CiAKIAlpbnRyID0gcmVhZGwoYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cyk7Ci0JaWYgKCFpbnRyKQotCQlyZXR1cm4gQkZBX0ZBTFNFOwogCiAJcWludHIgPSBpbnRyICYgKF9fSEZOX0lOVF9STUVfTUFTSyB8IF9fSEZOX0lOVF9DUEVfTUFTSyk7CiAJaWYgKHFpbnRyKQogCQl3cml0ZWwocWludHIsIGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMpOwogCiAJLyoKLQkgKiBSTUUgY29tcGxldGlvbiBxdWV1ZSBpbnRlcnJ1cHQKKwkgKiBVbmNvbmRpdGlvbmFsIFJNRSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdAogCSAqLwotCXFpbnRyID0gaW50ciAmIF9fSEZOX0lOVF9STUVfTUFTSzsKLQlpZiAocWludHIgJiYgYmZhLT5xdWV1ZV9wcm9jZXNzKSB7CisJaWYgKGJmYS0+cXVldWVfcHJvY2VzcykgewogCQlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBCRklfSU9DX01BWF9DUVM7IHF1ZXVlKyspCiAJCQliZmFfaXNyX3JzcHEoYmZhLCBxdWV1ZSk7CiAJfQogCi0JaW50ciAmPSB+cWludHI7CiAJaWYgKCFpbnRyKQogCQlyZXR1cm4gQkZBX1RSVUU7CiAKQEAgLTQzMiw3ICs0MjUsOCBAQAogCQkJCSAgIF9fSEZOX0lOVF9NQk9YX0xQVTFfQ1QyKTsKIAkJaW50ciAgICAmPSBfX0hGTl9JTlRfRVJSX01BU0tfQ1QyOwogCX0gZWxzZSB7Ci0JCWhhbHRfaXNyID0gaW50ciAmIF9fSEZOX0lOVF9MTF9IQUxUOworCQloYWx0X2lzciA9IGJmYV9hc2ljX2lkX2N0KGJmYS0+aW9jLnBjaWRldi5kZXZpY2VfaWQpID8KKwkJCQkJICAoaW50ciAmIF9fSEZOX0lOVF9MTF9IQUxUKSA6IDA7CiAJCXBzc19pc3IgID0gaW50ciAmIF9fSEZOX0lOVF9FUlJfUFNTOwogCQlscHVfaXNyICA9IGludHIgJiAoX19IRk5fSU5UX01CT1hfTFBVMCB8IF9fSEZOX0lOVF9NQk9YX0xQVTEpOwogCQlpbnRyICAgICY9IF9fSEZOX0lOVF9FUlJfTUFTSzsKQEAgLTU3OCw3ICs1NzIsNyBAQAogCX0gZWxzZSB7CiAJCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQgPSBiZmFfaHdjYl9yZWdpbml0OwogCQlpb2NmYy0+aHdpZi5od19yZXFxX2FjayA9IE5VTEw7Ci0JCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gTlVMTDsKKwkJaW9jZmMtPmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2FjazsKIAkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbml0ID0gYmZhX2h3Y2JfbXNpeF9pbml0OwogCQlpb2NmYy0+aHdpZi5od19tc2l4X2N0cmxfaW5zdGFsbCA9IGJmYV9od2NiX21zaXhfY3RybF9pbnN0YWxsOwogCQlpb2NmYy0+aHdpZi5od19tc2l4X3F1ZXVlX2luc3RhbGwgPSBiZmFfaHdjYl9tc2l4X3F1ZXVlX2luc3RhbGw7CkBAIC01OTUsNyArNTg5LDcgQEAKIAlpZiAoYmZhX2FzaWNfaWRfY3QyKGJmYV9pb2NfZGV2aWQoJmJmYS0+aW9jKSkpIHsKIAkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2N0Ml9yZWdpbml0OwogCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBOVUxMOwotCQlpb2NmYy0+aHdpZi5od19yc3BxX2FjayA9IE5VTEw7CisJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y3QyX3JzcHFfYWNrOwogCX0KIAogCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQoYmZhKTsKQEAgLTY4NSw3ICs2NzksNyBAQAogCiAJYmZhLT5xdWV1ZV9wcm9jZXNzID0gQkZBX1RSVUU7CiAJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKQotCQliZmFfaXNyX3JzcHFfYWNrKGJmYSwgaSk7CisJCWJmYV9pc3JfcnNwcV9hY2soYmZhLCBpLCBiZmFfcnNwcV9jaShiZmEsIGkpKTsKIAogCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCiAJCWhhbF9tb2RzW2ldLT5zdGFydChiZmEpOwpAQCAtNzA5LDcgKzcwMyw3IEBACiAJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOwogCiAJaWYgKGNvbXBsZXRlKSB7Ci0JCWlmIChiZmEtPmlvY2ZjLmNmZ2RvbmUpCisJCWlmIChiZmEtPmlvY2ZjLmNmZ2RvbmUgJiYgQkZBX0RDT05GX01PRChiZmEpLT5mbGFzaGRvbmUpCiAJCQliZmFfY2JfaW5pdChiZmEtPmJmYWQsIEJGQV9TVEFUVVNfT0spOwogCQllbHNlCiAJCQliZmFfY2JfaW5pdChiZmEtPmJmYWQsIEJGQV9TVEFUVVNfRkFJTEVEKTsKQEAgLTgyMiw5ICs4MTYsMTEgQEAKIAkgKi8KIAliZmFfZmNwb3J0X2luaXQoYmZhKTsKIAotCWlmIChpb2NmYy0+YWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkKLQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7Ci0JZWxzZSB7CisJaWYgKGlvY2ZjLT5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKSB7CisJCWlmIChCRkFfRENPTkZfTU9EKGJmYSktPmZsYXNoZG9uZSA9PSBCRkFfVFJVRSkKKwkJCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+aW5pdF9oY2JfcWUsCisJCQkJYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7CisJfSBlbHNlIHsKIAkJaWYgKGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfRU5BQkxFKQogCQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuZW5faGNiX3FlLAogCQkJCQliZmFfaW9jZmNfZW5hYmxlX2NiLCBiZmEpOwpAQCAtMTA0NSw2ICsxMDQxLDcgQEAKIAl9CiAKIAliZmFfaW9jZmNfc2VuZF9jZmcoYmZhKTsKKwliZmFfZGNvbmZfbW9kaW5pdChiZmEpOwogfQogCiAvKgpAQCAtMTIwNyw3ICsxMjA0LDkgQEAKIAliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfU1RPUDsKIAogCWJmYS0+cXVldWVfcHJvY2VzcyA9IEJGQV9GQUxTRTsKLQliZmFfaW9jX2Rpc2FibGUoJmJmYS0+aW9jKTsKKwliZmFfZGNvbmZfbW9kZXhpdChiZmEpOworCWlmIChCRkFfRENPTkZfTU9EKGJmYSktPmZsYXNoZG9uZSA9PSBCRkFfVFJVRSkKKwkJYmZhX2lvY19kaXNhYmxlKCZiZmEtPmlvYyk7CiB9CiAKIHZvaWQKQEAgLTE1NDAsMTAgKzE1MzksMTcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQkqcWU7CiAJc3RydWN0IGxpc3RfaGVhZAkJKnFlbjsKIAlzdHJ1Y3QgYmZhX2NiX3FlX3MJKmhjYl9xZTsKKwliZmFfY2JfY2Jmbl9zdGF0dXNfdAljYmZuOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sIGNvbXBfcSkgewogCQloY2JfcWUgPSAoc3RydWN0IGJmYV9jYl9xZV9zICopIHFlOwotCQloY2JfcWUtPmNiZm4oaGNiX3FlLT5jYmFyZywgQkZBX1RSVUUpOworCQlpZiAoaGNiX3FlLT5wcmVfcm12KSB7CisJCQkvKiBxZSBpcyBpbnZhbGlkIGFmdGVyIHJldHVybiwgZGVxdWV1ZSBiZWZvcmUgY2JmbigpICovCisJCQlsaXN0X2RlbChxZSk7CisJCQljYmZuID0gKGJmYV9jYl9jYmZuX3N0YXR1c190KShoY2JfcWUtPmNiZm4pOworCQkJY2JmbihoY2JfcWUtPmNiYXJnLCBoY2JfcWUtPmZ3X3N0YXR1cyk7CisJCX0gZWxzZQorCQkJaGNiX3FlLT5jYmZuKGhjYl9xZS0+Y2JhcmcsIEJGQV9UUlVFKTsKIAl9CiB9CiAKQEAgLTE1NTYsMTAgKzE1NjIsMjAgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoY29tcF9xKSkgewogCQliZmFfcV9kZXEoY29tcF9xLCAmcWUpOwogCQloY2JfcWUgPSAoc3RydWN0IGJmYV9jYl9xZV9zICopIHFlOworCQlXQVJOX09OKGhjYl9xZS0+cHJlX3Jtdik7CiAJCWhjYl9xZS0+Y2JmbihoY2JfcWUtPmNiYXJnLCBCRkFfRkFMU0UpOwogCX0KIH0KIAordm9pZAorYmZhX2lvY2ZjX2NiX2Rjb25mX21vZGluaXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJaWYgKGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkgeworCQlpZiAoYmZhLT5pb2NmYy5jZmdkb25lID09IEJGQV9UUlVFKQorCQkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuaW5pdF9oY2JfcWUsCisJCQkJYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7CisJfQorfQogCiAvKgogICogUmV0dXJuIHRoZSBsaXN0IG9mIFBDSSB2ZW5kb3IvZGV2aWNlIGlkIGxpc3RzIHN1cHBvcnRlZCBieSB0aGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzLmgKaW5kZXggZWQ4ZDMxYi4uN2IzZDIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnMuaApAQCAtMTQ0LDYgKzE0NCw3IEBACiAJQkZBX1NUQVRVU19JTlZMRF9ERlNaCT0gMjQsCS8qICBJbnZhbGlkIE1heCBkYXRhIGZpZWxkIHNpemUgKi8KIAlCRkFfU1RBVFVTX0NNRF9OT1RTVVBQICA9IDI2LCAgIC8qICBDb21tYW5kL0FQSSBub3Qgc3VwcG9ydGVkICovCiAJQkZBX1NUQVRVU19GQUJSSUNfUkpUCT0gMjksCS8qICBSZWplY3QgZnJvbSBhdHRhY2hlZCBmYWJyaWMgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fVldXTiA9IDMwLAkvKiAgVlBPUlQgUFdXTiBub3QgZm91bmQgKi8KIAlCRkFfU1RBVFVTX1BPUlRfT0ZGTElORSA9IDM0LAkvKiAgUG9ydCBpcyBub3Qgb25saW5lICovCiAJQkZBX1NUQVRVU19WUE9SVF9XV05fQlAJPSA0NiwJLyogIFdXTiBpcyBzYW1lIGFzIGJhc2UgcG9ydCdzIFdXTiAqLwogCUJGQV9TVEFUVVNfUE9SVF9OT1RfRElTQUJMRUQgPSA0NywgLyogUG9ydCBub3QgZGlzYWJsZWQgZGlzYWJsZSBwb3J0ICovCkBAIC0xNjQsNiArMTY1LDggQEAKIAlCRkFfU1RBVFVTX0lOVkFMSURfTUFDICA9IDEzNCwgLyogIEludmFsaWQgTUFDIGFkZHJlc3MgKi8KIAlCRkFfU1RBVFVTX1BCQwkJPSAxNTQsIC8qICBPcGVyYXRpb24gbm90IGFsbG93ZWQgZm9yIHByZS1ib290CiAJCQkJCSogIGNvbmZpZ3VyYXRpb24gKi8KKwlCRkFfU1RBVFVTX0JBRF9GV0NGRyA9IDE1NiwJLyogQmFkIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfVkVORE9SID0gMTU4LCAvKiBJbnZhbGlkIHN3aXRjaCB2ZW5kb3IgKi8KIAlCRkFfU1RBVFVTX1NGUF9OT1RfUkVBRFkgPSAxNTksCS8qIFNGUCBpbmZvIGlzIG5vdCByZWFkeS4gUmV0cnkgKi8KIAlCRkFfU1RBVFVTX1RSVU5LX0VOQUJMRUQgPSAxNjQsIC8qIFRydW5rIGlzIGFscmVhZHkgZW5hYmxlZCBvbgogCQkJCQkgKiB0aGlzIGFkYXB0ZXIgKi8KQEAgLTE3MiwxMSArMTc1LDE1IEBACiAJQkZBX1NUQVRVU19JT1BST0ZJTEVfT0ZGID0gMTc1LCAvKiBJTyBwcm9maWxlIE9GRiAqLwogCUJGQV9TVEFUVVNfUEhZX05PVF9QUkVTRU5UID0gMTgzLCAvKiBQSFkgbW9kdWxlIG5vdCBwcmVzZW50ICovCiAJQkZBX1NUQVRVU19GRUFUVVJFX05PVF9TVVBQT1JURUQgPSAxOTIsCS8qIEZlYXR1cmUgbm90IHN1cHBvcnRlZCAqLworCUJGQV9TVEFUVVNfRU5UUllfRVhJU1RTID0gMTkzLAkvKiBFbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCUJGQV9TVEFUVVNfRU5UUllfTk9UX0VYSVNUUyA9IDE5NCwgLyogRW50cnkgZG9lcyBub3QgZXhpc3QgKi8KKwlCRkFfU1RBVFVTX05PX0NIQU5HRSA9IDE5NSwJLyogRmVhdHVyZSBhbHJlYWR5IGluIHRoYXQgc3RhdGUgKi8KIAlCRkFfU1RBVFVTX0ZBQV9FTkFCTEVEID0gMTk3LAkvKiBGQUEgaXMgYWxyZWFkeSBlbmFibGVkICovCiAJQkZBX1NUQVRVU19GQUFfRElTQUJMRUQgPSAxOTgsCS8qIEZBQSBpcyBhbHJlYWR5IGRpc2FibGVkICovCiAJQkZBX1NUQVRVU19GQUFfQUNRVUlSRUQgPSAxOTksCS8qIEZBQSBpcyBhbHJlYWR5IGFjcXVpcmVkICovCiAJQkZBX1NUQVRVU19GQUFfQUNRX0FERFIgPSAyMDAsCS8qIEFjcXVpcmluZyBhZGRyICovCiAJQkZBX1NUQVRVU19FUlJPUl9UUlVOS19FTkFCTEVEID0gMjAzLAkvKiBUcnVuayBlbmFibGVkIG9uIGFkYXB0ZXIgKi8KKwlCRkFfU1RBVFVTX01BWF9FTlRSWV9SRUFDSEVEID0gMjEyLAkvKiBNQVggZW50cnkgcmVhY2hlZCAqLwogCUJGQV9TVEFUVVNfTUFYX1ZBTAkJLyogVW5rbm93biBlcnJvciBjb2RlICovCiB9OwogI2RlZmluZSBiZmFfc3RhdHVzX3QgZW51bSBiZmFfc3RhdHVzCkBAIC0zNTksNiArMzY2LDEzOSBAQAogfTsKIAogLyoKKyAqCQkJQUVOIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqLworZW51bSBiZmFfYWVuX2NhdGVnb3J5IHsKKwlCRkFfQUVOX0NBVF9BREFQVEVSCT0gMSwKKwlCRkFfQUVOX0NBVF9QT1JUCT0gMiwKKwlCRkFfQUVOX0NBVF9MUE9SVAk9IDMsCisJQkZBX0FFTl9DQVRfUlBPUlQJPSA0LAorCUJGQV9BRU5fQ0FUX0lUTklNCT0gNSwKKwlCRkFfQUVOX0NBVF9BVURJVAk9IDgsCisJQkZBX0FFTl9DQVRfSU9DCQk9IDksCit9OworCisvKiBCRkEgYWRhcHRlciBsZXZlbCBldmVudHMgKi8KK2VudW0gYmZhX2FkYXB0ZXJfYWVuX2V2ZW50IHsKKwlCRkFfQURBUFRFUl9BRU5fQURECT0gMSwJLyogTmV3IEFkYXB0ZXIgZm91bmQgZXZlbnQgKi8KKwlCRkFfQURBUFRFUl9BRU5fUkVNT1ZFCT0gMiwJLyogQWRhcHRlciByZW1vdmVkIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX2FkYXB0ZXJfYWVuX2RhdGFfcyB7CisJY2hhcglzZXJpYWxfbnVtW0JGQV9BREFQVEVSX1NFUklBTF9OVU1fTEVOXTsKKwl1MzIJbnBvcnRzOyAvKiBOdW1iZXIgb2YgTlBvcnRzICovCisJd3duX3QJcHd3bjsgICAvKiBXV04gb2Ygb25lIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCit9OworCisvKiBCRkEgcGh5c2ljYWwgcG9ydCBMZXZlbCBldmVudHMgKi8KK2VudW0gYmZhX3BvcnRfYWVuX2V2ZW50IHsKKwlCRkFfUE9SVF9BRU5fT05MSU5FCT0gMSwgICAgLyogUGh5c2ljYWwgUG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fT0ZGTElORQk9IDIsICAgIC8qIFBoeXNpY2FsIFBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9STElSCT0gMywgICAgLyogUkxJUiBldmVudCwgbm90IHN1cHBvcnRlZCAqLworCUJGQV9QT1JUX0FFTl9TRlBfSU5TRVJUCT0gNCwgICAgLyogU0ZQIGluc2VydGVkIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9SRU1PVkUJPSA1LCAgICAvKiBTRlAgcmVtb3ZlZCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NCT0gNiwgICAgLyogU0ZQIFBPTSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9FTkFCTEUJPSA3LCAgICAvKiBQaHlzaWNhbCBQb3J0IGVuYWJsZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9ESVNBQkxFCT0gOCwgICAgLyogUGh5c2ljYWwgUG9ydCBkaXNhYmxlIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0FVVEhfT04JPSA5LCAgICAvKiBQaHlzaWNhbCBQb3J0IGF1dGggc3VjY2VzcyBldmVudCAqLworCUJGQV9QT1JUX0FFTl9BVVRIX09GRgk9IDEwLCAgIC8qIFBoeXNpY2FsIFBvcnQgYXV0aCBmYWlsIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QJPSAxMSwgICAvKiBQaHlzaWNhbCBQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fUU9TX05FRwk9IDEyLCAgIC8qIEJhc2UgUG9ydCBRT1MgbmVnb3RpYXRpb24gZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFCT0gMTMsIC8qIEZhYnJpYyBOYW1lL1dXTiBjaGFuZ2UgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUgk9IDE0LCAvKiBTRlAgcmVhZCBlcnJvciBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfVU5TVVBQT1JUCT0gMTUsIC8qIFVuc3VwcG9ydGVkIFNGUCBldmVudCAqLworfTsKKworZW51bSBiZmFfcG9ydF9hZW5fc2ZwX3BvbSB7CisJQkZBX1BPUlRfQUVOX1NGUF9QT01fR1JFRU4gPSAxLCAvKiBOb3JtYWwgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9BTUJFUiA9IDIsIC8qIFdhcm5pbmcgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1BPTV9SRUQgICA9IDMsIC8qIENyaXRpY2FsICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fTUFYICAgPSBCRkFfUE9SVF9BRU5fU0ZQX1BPTV9SRUQKK307CisKK3N0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zIHsKKwl3d25fdAkJcHd3bjsJCS8qIFdXTiBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90CQlmd3duOwkJLyogV1dOIG9mIHRoZSBmYWJyaWMgcG9ydCAqLworCXUzMgkJcGh5X3BvcnRfbnVtOwkvKiBGb3IgU0ZQIHJlbGF0ZWQgZXZlbnRzICovCisJdTE2CQlpb2NfdHlwZTsKKwl1MTYJCWxldmVsOwkJLyogT25seSB0cmFuc2l0aW9ucyB3aWxsIGJlIGluZm9ybWVkICovCisJbWFjX3QJCW1hYzsJCS8qIE1BQyBhZGRyZXNzIG9mIHRoZSBldGhlcm5ldCBwb3J0ICovCisJdTE2CQlyc3ZkOworfTsKKworLyogQkZBIEFFTiBsb2dpY2FsIHBvcnQgZXZlbnRzICovCitlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgeworCUJGQV9MUE9SVF9BRU5fTkVXCT0gMSwJCS8qIExQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURQk9IDIsCQkvKiBMUG9ydCBkZWxldGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PTkxJTkUJPSAzLAkJLyogTFBvcnQgb25saW5lIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9PRkZMSU5FCT0gNCwJCS8qIExQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QgPSA1LAkJLyogTFBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1BST1AJPSA2LAkJLyogVlBvcnQgY3JlYXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fREVMRVRFX1BST1AgPSA3LAkJLyogVlBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEID0gOCwJCS8qIFZQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURV9TVEFOREFSRCA9IDksCS8qIFZQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTiA9IDEwLAkvKiBWUG9ydCB3aXRoIGR1cGxpY2F0ZSBXV04gKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWCA9IDExLAkvKiBNYXggTlBJViBpbiBmYWJyaWMvZnBvcnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTiA9IDEyLAkvKiBVbmtub3duIE5QSVYgRXJyb3IgY29kZSAqLworfTsKKworc3RydWN0IGJmYV9scG9ydF9hZW5fZGF0YV9zIHsKKwl1MTYJdmZfaWQ7CS8qIHZmX2lkIG9mIHRoaXMgbG9naWNhbCBwb3J0ICovCisJdTE2CXJvbGVzOwkvKiBMb2dpY2FsIHBvcnQgbW9kZSxJTS9UTS9JUCBldGMgKi8KKwl1MzIJcnN2ZDsKKwl3d25fdAlwcHd3bjsJLyogV1dOIG9mIGl0cyBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QJbHB3d247CS8qIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworfTsKKworLyogQkZBIElUTklNIGV2ZW50cyAqLworZW51bSBiZmFfaXRuaW1fYWVuX2V2ZW50IHsKKwlCRkFfSVROSU1fQUVOX09OTElORQkgPSAxLAkvKiBUYXJnZXQgb25saW5lICovCisJQkZBX0lUTklNX0FFTl9PRkZMSU5FCSA9IDIsCS8qIFRhcmdldCBvZmZsaW5lICovCisJQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUID0gMywJLyogVGFyZ2V0IGRpc2Nvbm5lY3RlZCAqLworfTsKKworc3RydWN0IGJmYV9pdG5pbV9hZW5fZGF0YV9zIHsKKwl1MTYJCXZmX2lkOwkJLyogdmZfaWQgb2YgdGhlIElUIG5leHVzICovCisJdTE2CQlyc3ZkWzNdOworCXd3bl90CQlwcHd3bjsJCS8qIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90CQlscHd3bjsJCS8qIFdXTiBvZiBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdAkJcnB3d247CQkvKiBXV04gb2YgcmVtb3RlKHRhcmdldCkgcG9ydCAqLworfTsKKworLyogQkZBIGF1ZGl0IGV2ZW50cyAqLworZW51bSBiZmFfYXVkaXRfYWVuX2V2ZW50IHsKKwlCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFCT0gMSwKKwlCRkFfQVVESVRfQUVOX0FVVEhfRElTQUJMRQk9IDIsCisJQkZBX0FVRElUX0FFTl9GTEFTSF9FUkFTRQk9IDMsCisJQkZBX0FVRElUX0FFTl9GTEFTSF9VUERBVEUJPSA0LAorfTsKKworc3RydWN0IGJmYV9hdWRpdF9hZW5fZGF0YV9zIHsKKwl3d25fdAlwd3duOworCWludAlwYXJ0aXRpb25faW5zdDsKKwlpbnQJcGFydGl0aW9uX3R5cGU7Cit9OworCisvKiBCRkEgSU9DIGxldmVsIGV2ZW50cyAqLworZW51bSBiZmFfaW9jX2Flbl9ldmVudCB7CisJQkZBX0lPQ19BRU5fSEJHT09EICA9IDEsCS8qIEhlYXJ0IEJlYXQgcmVzdG9yZSBldmVudAkqLworCUJGQV9JT0NfQUVOX0hCRkFJTCAgPSAyLAkvKiBIZWFydCBCZWF0IGZhaWx1cmUgZXZlbnQJKi8KKwlCRkFfSU9DX0FFTl9FTkFCTEUgID0gMywJLyogSU9DIGVuYWJsZWQgZXZlbnQJCSovCisJQkZBX0lPQ19BRU5fRElTQUJMRSA9IDQsCS8qIElPQyBkaXNhYmxlZCBldmVudAkJKi8KKwlCRkFfSU9DX0FFTl9GV01JU01BVENIICA9IDUsCS8qIElPQyBmaXJtd2FyZSBtaXNtYXRjaAkqLworCUJGQV9JT0NfQUVOX0ZXQ0ZHX0VSUk9SID0gNiwJLyogSU9DIGZpcm13YXJlIGNvbmZpZyBlcnJvcgkqLworCUJGQV9JT0NfQUVOX0lOVkFMSURfVkVORE9SID0gNywKKwlCRkFfSU9DX0FFTl9JTlZBTElEX05XV04gPSA4LAkvKiBaZXJvIE5XV04JCQkqLworCUJGQV9JT0NfQUVOX0lOVkFMSURfUFdXTiA9IDkJLyogWmVybyBQV1dOCQkJKi8KK307CisKK3N0cnVjdCBiZmFfaW9jX2Flbl9kYXRhX3MgeworCXd3bl90CXB3d247CisJdTE2CWlvY190eXBlOworCW1hY190CW1hYzsKK307CisKKy8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1mZyBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0KICAqLwogCkBAIC01MjAsNiArNjYwLDIwIEBACiAvKgogICogQk9PVCBib290IGNvbmZpZ3VyYXRvbgogICovCitzdHJ1Y3QgYmZhX2Jvb3RfY2ZnX3MgeworCXU4CQl2ZXJzaW9uOworCXU4CQlyc3ZkMTsKKwl1MTYJCWNoa3N1bTsKKwl1OAkJZW5hYmxlOwkJLyogZW5hYmxlL2Rpc2FibGUgU0FOIGJvb3QgKi8KKwl1OAkJc3BlZWQ7ICAgICAgICAgIC8qIGJvb3Qgc3BlZWQgc2V0dGluZ3MgKi8KKwl1OAkJdG9wb2xvZ3k7ICAgICAgIC8qIGJvb3QgdG9wb2xvZ3kgc2V0dGluZyAqLworCXU4CQlib290b3B0OyAgICAgICAgLyogYmZhX2Jvb3RfYm9vdG9wdF90ICovCisJdTMyCQluYmx1bnM7ICAgICAgICAgLyogbnVtYmVyIG9mIGJvb3QgbHVucyAqLworCXUzMgkJcnN2ZDI7CisJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuW0JGQV9CT09UX0JPT1RMVU5fTUFYXTsKKwlzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIGJsdW5fZGlzY1tCRkFfQk9PVF9CT09UTFVOX01BWF07Cit9OworCiBzdHJ1Y3QgYmZhX2Jvb3RfcGJjX3MgewogCXU4ICAgICAgICAgICAgICBlbmFibGU7ICAgICAgICAgLyogIGVuYWJsZS9kaXNhYmxlIFNBTiBib290ICovCiAJdTggICAgICAgICAgICAgIHNwZWVkOyAgICAgICAgICAvKiAgYm9vdCBzcGVlZCBzZXR0aW5ncyAqLwpAQCAtNTI5LDYgKzY4MywxNSBAQAogCXN0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgcGJsdW5bQkZBX1BSRUJPT1RfQk9PVExVTl9NQVhdOwogfTsKIAorc3RydWN0IGJmYV9ldGhib290X2NmZ19zIHsKKwl1OAkJdmVyc2lvbjsKKwl1OAkJcnN2ZDE7CisJdTE2CQljaGtzdW07CisJdTgJCWVuYWJsZTsJLyogZW5hYmxlL2Rpc2FibGUgRXRoL1BYRSBib290ICovCisJdTgJCXJzdmQyOworCXUxNgkJdmxhbjsKK307CisKIC8qCiAgKiBBU0lDIGJsb2NrIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCBzdHJ1Y3R1cmVzCiAgKi8KQEAgLTU4Nyw2ICs3NTAsMTQgQEAKICAqLwogI2RlZmluZSBTRlBfRElBR01PTl9TSVpFCTEwIC8qIG51bSBieXRlcyBvZiBkaWFnIG1vbml0b3IgZGF0YSAqLwogCisvKiBTRlAgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBldmVudCAqLworI2RlZmluZSBCRkFfU0ZQX1NDTl9SRU1PVkVECTAKKyNkZWZpbmUgQkZBX1NGUF9TQ05fSU5TRVJURUQJMQorI2RlZmluZSBCRkFfU0ZQX1NDTl9QT00JCTIKKyNkZWZpbmUgQkZBX1NGUF9TQ05fRkFJTEVECTMKKyNkZWZpbmUgQkZBX1NGUF9TQ05fVU5TVVBQT1JUCTQKKyNkZWZpbmUgQkZBX1NGUF9TQ05fVkFMSUQJNQorCiBlbnVtIGJmYV9kZWZzX3NmcF9tZWRpYV9lIHsKIAlCRkFfU0ZQX01FRElBX1VOS05PV04JPSAweDAwLAogCUJGQV9TRlBfTUVESUFfQ1UJPSAweDAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2RlZnNfc3ZjLmgKaW5kZXggMGI5NzUyNS4uODYzYzZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZGVmc19zdmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9kZWZzX3N2Yy5oCkBAIC0yNjgsNiArMjY4LDcgQEAKICAgICB1MzIgICAgZXJyb3JfcmVzZXRzOyAgICAgICAvKiAgZXJyb3IgcmVzZXRzIGluaXRpYXRlZCBieSB1cHNtICAgICAgKi8KICAgICB1MzIgICAgc3luY19sb3N0OyAgICAgICAgICAvKiAgU3luYyBsb3NzIGNvdW50ICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1MzIgICAgc2lnX2xvc3Q7ICAgICAgICAgICAvKiAgU2lnbmFsIGxvc3MgY291bnQgICAgICAgICAgICAgICAgICAgKi8KKwl1MzIJYXNuOGdfYXR0ZW1wdHM7CS8qIFNOU00gSFdTTSBhdCA4R2JwcyBhdHRlbXB0cyAqLwogfTsKIAogc3RydWN0IGJmYV9md19wb3J0X3BoeXNtX3N0YXRzX3MgewpAQCAtNDY4LDYgKzQ2OSw3IEBACiAgKiBRb1Mgc3RhdGVzCiAgKi8KIGVudW0gYmZhX3Fvc19zdGF0ZSB7CisJQkZBX1FPU19ESVNBQkxFRCA9IDAsCQkvKiBRb1MgaXMgZGlzYWJsZWQgKi8KIAlCRkFfUU9TX09OTElORSA9IDEsCQkvKiAgUW9TIGlzIG9ubGluZSAqLwogCUJGQV9RT1NfT0ZGTElORSA9IDIsCQkvKiAgUW9TIGlzIG9mZmxpbmUgKi8KIH07CkBAIC02NzAsNiArNjcyLDEyIEBACiAJdTMyCXRtX2lvY2Rvd25zOwkJLyogIFRNIGNsZWFuZWQtdXAgZHVlIHRvIElPQyBkb3duICAgKi8KIAl1MzIJdG1fY2xlYW51cHM7CQkvKiAgVE0gY2xlYW51cCByZXF1ZXN0cwkqLwogCXUzMgl0bV9jbGVhbnVwX2NvbXBzOwkvKiAgVE0gY2xlYW51cCBjb21wbGV0aW9ucwkqLworCXUzMglsbV9sdW5fYWNyb3NzX3NnOwkvKiAgTE0gbHVuIGlzIGFjcm9zcyBzZyBkYXRhIGJ1ZiAqLworCXUzMglsbV9sdW5fbm90X3N1cDsJCS8qICBMTSBsdW4gbm90IHN1cHBvcnRlZCAqLworCXUzMglsbV9ycGxfZGF0YV9jaGFuZ2VkOwkvKiAgTE0gcmVwb3J0LWx1biBkYXRhIGNoYW5nZWQgKi8KKwl1MzIJbG1fd2lyZV9yZXNpZHVlX2NoYW5nZWQ7IC8qIExNIHJlcG9ydC1sdW4gcnNwIHJlc2lkdWUgY2hhbmdlZCAqLworCXUzMglsbV9zbWFsbF9idWZfYWRkcmVzaWR1ZTsgLyogTE0gYnVmIHNtYWxsZXIgdGhhbiByZXBvcnRlZCBjbnQgKi8KKwl1MzIJbG1fbHVuX25vdF9yZHk7CQkvKiBMTSBsdW4gbm90IHJlYWR5ICovCiB9OwogCiAvKiBNb2RpZnkgY2hhciogcG9ydF9zdHRbXSBpbiBiZmFsX3BvcnQuYyBpZiBhIG5ldyBzdGF0ZSB3YXMgYWRkZWQgKi8KQEAgLTc4NSw4ICs3OTMsNTEgQEAKIAlDRUVfSVNDU0lfUFJJX1BGQ19PRkYJCQk9IDQyLAogCUNFRV9JU0NTSV9QUklfT1ZFUkxBUF9GQ09FX1BSSQkJPSA0MwogfTsKKworI2RlZmluZSBNQVhfTFVOX01BU0tfQ0ZHIDE2CisKKy8qCisgKiBJbml0aWFsbHkgZmxhc2ggY29udGVudCBtYXkgYmUgZmZmLiBPbiBtYWtpbmcgTFVOIG1hc2sgZW5hYmxlIGFuZCBkaXNhYmxlCisgKiBzdGF0ZSBjaG5hZ2UuICB3aGVuIHJlcG9ydCBsdW4gY29tbWFuZCBpcyBiZWluZyBwcm9jZXNzZWQgaXQgZ29lcyBmcm9tCisgKiBCRkFfTFVOX01BU0tfQUNUSVZFIHRvIEJGQV9MVU5fTUFTS19GRVRDSCBhbmQgY29tZXMgYmFjayB0bworICogQkZBX0xVTl9NQVNLX0FDVElWRS4KKyAqLworZW51bSBiZmFfaW9pbV9sdW5fbWFza19zdGF0ZV9zIHsKKwlCRkFfSU9JTV9MVU5fTUFTS19JTkFDVElWRSA9IDAsCisJQkZBX0lPSU1fTFVOX01BU0tfQUNUSVZFID0gMSwKKwlCRkFfSU9JTV9MVU5fTUFTS19GRVRDSEVEID0gMiwKK307CisKK2VudW0gYmZhX2x1bm1hc2tfc3RhdGVfcyB7CisJQkZBX0xVTk1BU0tfRElTQUJMRUQgPSAweDAwLAorCUJGQV9MVU5NQVNLX0VOQUJMRUQgPSAweDAxLAorCUJGQV9MVU5NQVNLX01JTkNGRyA9IDB4MDIsCisJQkZBX0xVTk1BU0tfVU5JTklUSUFMSVpFRCA9IDB4ZmYsCit9OworCiAjcHJhZ21hIHBhY2soMSkKIC8qCisgKiBMVU4gbWFzayBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBiZmFfbHVuX21hc2tfcyB7CisJd3duX3QJCWxwX3d3bjsKKwl3d25fdAkJcnBfd3duOworCXN0cnVjdCBzY3NpX2x1bglsdW47CisJdTgJCXVhOworCXU4CQlyc3ZkWzNdOworCXUxNgkJcnBfdGFnOworCXU4CQlscF90YWc7CisJdTgJCXN0YXRlOworfTsKKworI2RlZmluZSBNQVhfTFVOX01BU0tfQ0ZHIDE2CitzdHJ1Y3QgYmZhX2x1bm1hc2tfY2ZnX3MgeworCXUzMglzdGF0dXM7CisJdTMyCXJzdmQ7CisJc3RydWN0IGJmYV9sdW5fbWFza19zCWx1bl9saXN0W01BWF9MVU5fTUFTS19DRkddOworfTsKKworLyoKICAqICAgICAgUGh5c2ljYWwgcG9ydCBjb25maWd1cmF0aW9uCiAgKi8KIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyB7CkBAIC0xMjI4LDQgKzEyNzksNTIgQEAKIAogI3ByYWdtYSBwYWNrKCkKIAorLyoKKyAqCQkJQUVOIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBCRkFEX05MX1ZFTkRPUl9JRCAoKCh1NjQpMHgwMSA8PCBTQ1NJX05MX1ZJRF9UWVBFX1NISUZUKSBcCisJCQkgICB8IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUpCisKKy8qIEJGQSByZW1vdGUgcG9ydCBldmVudHMgKi8KK2VudW0gYmZhX3Jwb3J0X2Flbl9ldmVudCB7CisJQkZBX1JQT1JUX0FFTl9PTkxJTkUgICAgID0gMSwgICAvKiBSUG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX09GRkxJTkUgICAgPSAyLCAgIC8qIFJQb3J0IG9mZmxpbmUgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QgPSAzLCAgIC8qIFJQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX1FPU19QUklPICAgPSA0LCAgIC8qIFFPUyBwcmlvcml0eSBjaGFuZ2UgZXZlbnQgKi8KKwlCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQgPSA1LCAgIC8qIFFPUyBmbG93IElkIGNoYW5nZSBldmVudCAqLworfTsKKworc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIHsKKwl1MTYgICAgICAgICAgICAgdmZfaWQ7ICAvKiB2Zl9pZCBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXUxNiAgICAgICAgICAgICByc3ZkWzNdOworCXd3bl90ICAgICAgICAgICBwcHd3bjsgIC8qIFdXTiBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBscHd3bjsgIC8qIFdXTiBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXd3bl90ICAgICAgICAgICBycHd3bjsgIC8qIFdXTiBvZiB0aGlzIHJlbW90ZSBwb3J0ICovCisJdW5pb24geworCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zOworCX0gcHJpdjsKK307CisKK3VuaW9uIGJmYV9hZW5fZGF0YV91IHsKKwlzdHJ1Y3QgYmZhX2FkYXB0ZXJfYWVuX2RhdGFfcwlhZGFwdGVyOworCXN0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zCXBvcnQ7CisJc3RydWN0IGJmYV9scG9ydF9hZW5fZGF0YV9zCWxwb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcwlycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX2Flbl9kYXRhX3MJaXRuaW07CisJc3RydWN0IGJmYV9hdWRpdF9hZW5fZGF0YV9zCWF1ZGl0OworCXN0cnVjdCBiZmFfaW9jX2Flbl9kYXRhX3MJaW9jOworfTsKKworI2RlZmluZSBCRkFfQUVOX01BWF9FTlRSWQk1MTIKKworc3RydWN0IGJmYV9hZW5fZW50cnlfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsKKwllbnVtIGJmYV9hZW5fY2F0ZWdvcnkgICBhZW5fY2F0ZWdvcnk7CisJdTMyICAgICAgICAgICAgICAgICAgICAgYWVuX3R5cGU7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgICAgYWVuX2RhdGE7CisJc3RydWN0IHRpbWV2YWwgICAgICAgICAgYWVuX3R2OworCXUzMiAgICAgICAgICAgICAgICAgICAgIHNlcV9udW07CisJdTMyICAgICAgICAgICAgICAgICAgICAgYmZhZF9udW07Cit9OworCiAjZW5kaWYgLyogX19CRkFfREVGU19TVkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmMuaAppbmRleCA4ZDBiODhmLi41MGI2YTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjLmgKQEAgLTU2LDYgKzU2LDE2MSBAQAogCiAjZGVmaW5lIFNDU0lfTUFYX0FMTE9DX0xFTiAgICAgIDB4RkYgICAgLyogbWF4aW11bSBhbGxvY2FyaW9uIGxlbmd0aCAqLwogCisjZGVmaW5lIFNDU0lfU0VOU0VfQ1VSX0VSUgkweDcwCisjZGVmaW5lIFNDU0lfU0VOU0VfREVGX0VSUgkweDcxCisKKy8qCisgKiBTQ1NJIGFkZGl0aW9uYWwgc2Vuc2UgY29kZXMKKyAqLworI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1JFQURZCQkweDA0CisjZGVmaW5lIFNDU0lfQVNDX0xVTl9OT1RfU1VQUE9SVEVECTB4MjUKKyNkZWZpbmUgU0NTSV9BU0NfVE9DQwkJCTB4M0YKKworLyoKKyAqIFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcnMKKyAqLworI2RlZmluZSBTQ1NJX0FTQ1FfTUFOX0lOVFJfUkVRCQkweDAzCS8qIG1hbnVhbCBpbnRlcnZlbnRpb24gcmVxICovCisjZGVmaW5lIFNDU0lfQVNDUV9STF9EQVRBX0NIQU5HRUQJMHgwRQkvKiByZXBvcnQgbHVucyBkYXRhIGNoYW5nZWQgKi8KKworLyoKKyAqIE1ldGhvZHMgb2YgcmVwb3J0aW5nIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9ucworICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX1VOSVRfQVRUTgkJMHgyCS8qIGdlbmVyYXRlIHVuaXQgYXR0ZW50aW9uICovCisKK3N0cnVjdCBzY3NpX3JlcG9ydF9sdW5zX2RhdGFfcyB7CisJdTMyCQlsdW5fbGlzdF9sZW5ndGg7CS8qIGxlbmd0aCBvZiBMVU4gbGlzdCBsZW5ndGggKi8KKwl1MzIJCXJlc2VydmVkOworCXN0cnVjdCBzY3NpX2x1bglsdW5bMV07CQkJLyogZmlyc3QgTFVOIGluIGx1biBsaXN0ICovCit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3ZlbmRvcl9zIHsKKwl1OAl2ZW5kb3JfaWRbOF07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zIHsKKwl1OAlwcm9kdWN0X2lkWzE2XTsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfcHJvZHJldl9zIHsKKwl1OAlwcm9kdWN0X3Jldls0XTsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfZGF0YV9zIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAkJcGVyaXBoZXJhbF9xdWFsOjM7CS8qIHBlcmlwaGVyYWwgcXVhbGlmaWVyICovCisJdTgJCWRldmljZV90eXBlOjU7CQkvKiBwZXJpcGhlcmFsIGRldmljZSB0eXBlICovCisJdTgJCXJtYjoxOwkJCS8qIHJlbW92YWJsZSBtZWRpdW0gYml0ICovCisJdTgJCWRldmljZV90eXBlX21vZDo3OwkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCXU4CQl2ZXJzaW9uOworCXU4CQlhZW5jOjE7CQkvKiBhc3luYyBldnQgbm90aWZpY2F0aW9uIGNhcGFiaWxpdHkgKi8KKwl1OAkJdHJtX2lvcDoxOwkvKiB0ZXJtaW5hdGUgSS9PIHByb2Nlc3MgKi8KKwl1OAkJbm9ybV9hY2E6MTsJLyogbm9ybWFsIEFDQSBzdXBwb3J0ZWQgKi8KKwl1OAkJaGlfc3VwcG9ydDoxOwkvKiBTQ1NJLTM6IHN1cHBvcnRzIFJFUE9SVCBMVU5TICovCisJdTgJCXJzcF9kYXRhX2Zvcm1hdDo0OworCXU4CQlhZGRpdGlvbmFsX2xlbjsKKwl1OAkJc2NjczoxOworCXU4CQlyZXNlcnZlZDE6NzsKKwl1OAkJcmVzZXJ2ZWQyOjE7CisJdTgJCWVuY19zZXJ2OjE7CS8qIGVuY2xvc3VyZSBzZXJ2aWNlIGNvbXBvbmVudCAqLworCXU4CQlyZXNlcnZlZDM6MTsKKwl1OAkJbXVsdGlfcG9ydDoxOwkvKiBtdWx0aS1wb3J0IGRldmljZSAqLworCXU4CQltX2NobmdyOjE7CS8qIGRldmljZSBpbiBtZWRpdW0gdHJhbnNwb3J0IGVsZW1lbnQgKi8KKwl1OAkJYWNrX3JlcV9xOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJYWRkcjE2OjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisJdTgJCXdfYnVzMzI6MTsKKwl1OAkJd19idXMxNjoxOworCXU4CQlzeW5jaHJvbm91czoxOworCXU4CQlsaW5rZWRfY29tbWFuZHM6MTsKKwl1OAkJdHJhbnNfZGlzOjE7CisJdTgJCWNtZF9xdWV1ZToxOwkvKiBjb21tYW5kIHF1ZXVlaW5nIHN1cHBvcnRlZCAqLworCXU4CQlzb2Z0X3Jlc2V0OjE7CS8qIHNvZnQgcmVzZXQgYWx0ZXJuYXRpdmUgKFZTKSAqLworI2Vsc2UKKwl1OAkJZGV2aWNlX3R5cGU6NTsJLyogcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSAqLworCXU4CQlwZXJpcGhlcmFsX3F1YWw6MzsgLyogcGVyaXBoZXJhbCBxdWFsaWZpZXIgKi8KKwl1OAkJZGV2aWNlX3R5cGVfbW9kOjc7IC8qIGRldmljZSB0eXBlIG1vZGlmaWVyICovCisJdTgJCXJtYjoxOwkJLyogcmVtb3ZhYmxlIG1lZGl1bSBiaXQgKi8KKwl1OAkJdmVyc2lvbjsKKwl1OAkJcnNwX2RhdGFfZm9ybWF0OjQ7CisJdTgJCWhpX3N1cHBvcnQ6MTsJLyogU0NTSS0zOiBzdXBwb3J0cyBSRVBPUlQgTFVOUyAqLworCXU4CQlub3JtX2FjYToxOwkvKiBub3JtYWwgQUNBIHN1cHBvcnRlZCAqLworCXU4CQl0ZXJtaW5hdGVfaW9wOjE7LyogdGVybWluYXRlIEkvTyBwcm9jZXNzICovCisJdTgJCWFlbmM6MTsJCS8qIGFzeW5jIGV2dCBub3RpZmljYXRpb24gY2FwYWJpbGl0eSAqLworCXU4CQlhZGRpdGlvbmFsX2xlbjsKKwl1OAkJcmVzZXJ2ZWQxOjc7CisJdTgJCXNjY3M6MTsKKwl1OAkJYWRkcjE2OjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJYWNrX3JlcV9xOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OAkJbV9jaG5ncjoxOwkvKiBkZXZpY2UgaW4gbWVkaXVtIHRyYW5zcG9ydCBlbGVtZW50ICovCisJdTgJCW11bHRpX3BvcnQ6MTsJLyogbXVsdGktcG9ydCBkZXZpY2UgKi8KKwl1OAkJcmVzZXJ2ZWQzOjE7CS8qIFRCRCAtIFZlbmRvciBTcGVjaWZpYyAqLworCXU4CQllbmNfc2VydjoxOwkvKiBlbmNsb3N1cmUgc2VydmljZSBjb21wb25lbnQgKi8KKwl1OAkJcmVzZXJ2ZWQyOjE7CisJdTgJCXNvZnRfc2VzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisJdTgJCWNtZF9xdWV1ZToxOwkvKiBjb21tYW5kIHF1ZXVlaW5nIHN1cHBvcnRlZCAqLworCXU4CQl0cmFuc19kaXM6MTsKKwl1OAkJbGlua2VkX2NvbW1hbmRzOjE7CisJdTgJCXN5bmNocm9ub3VzOjE7CisJdTgJCXdfYnVzMTY6MTsKKwl1OAkJd19idXMzMjoxOworCXU4CQlyZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbmRpZgorCXN0cnVjdCBzY3NpX2lucXVpcnlfdmVuZG9yX3MJdmVuZG9yX2lkOworCXN0cnVjdCBzY3NpX2lucXVpcnlfcHJvZGlkX3MJcHJvZHVjdF9pZDsKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RyZXZfcwlwcm9kdWN0X3JldjsKKwl1OAkJdmVuZG9yX3NwZWNpZmljWzIwXTsKKwl1OAkJcmVzZXJ2ZWQ0WzQwXTsKK307CisKKy8qCisgKglTQ1NJIHNlbnNlIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX3MgeworI2lmZGVmIF9fQklHX0VORElBTgorCXU4CQl2YWxpZDoxOworCXU4CQlyc3BfY29kZTo3OworI2Vsc2UKKwl1OAkJcnNwX2NvZGU6NzsKKwl1OAkJdmFsaWQ6MTsKKyNlbmRpZgorCXU4CQlzZWdfbnVtOworI2lmZGVmIF9fQklHX0VORElBTgorCXU4CQlmaWxlX21hcms6MTsKKwl1OAkJZW9tOjE7CQkvKiBlbmQgb2YgbWVkaWEgKi8KKwl1OAkJaWxpOjE7CQkvKiBpbmNvcnJlY3QgbGVuZ3RoIGluZGljYXRvciAqLworCXU4CQlyZXNlcnZlZDoxOworCXU4CQlzZW5zZV9rZXk6NDsKKyNlbHNlCisJdTgJCXNlbnNlX2tleTo0OworCXU4CQlyZXNlcnZlZDoxOworCXU4CQlpbGk6MTsJCS8qIGluY29ycmVjdCBsZW5ndGggaW5kaWNhdG9yICovCisJdTgJCWVvbToxOwkJLyogZW5kIG9mIG1lZGlhICovCisJdTgJCWZpbGVfbWFyazoxOworI2VuZGlmCisJdTgJCWluZm9ybWF0aW9uWzRdOwkvKiBkZXZpY2UtdHlwZSBvciBjbWQgc3BlY2lmaWMgaW5mbyAqLworCXU4CQlhZGRfc2Vuc2VfbGVuZ3RoOyAvKiBhZGRpdGlvbmFsIHNlbnNlIGxlbmd0aCAqLworCXU4CQljb21tYW5kX2luZm9bNF07LyogY29tbWFuZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXU4CQlhc2M7CQkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1OAkJYXNjcTsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KKwl1OAkJZnJ1X2NvZGU7CS8qIGZpZWxkIHJlcGxhY2VhYmxlIHVuaXQgY29kZSAqLworI2lmZGVmIF9fQklHX0VORElBTgorCXU4CQlza3N2OjE7CQkvKiBzZW5zZSBrZXkgc3BlY2lmaWMgdmFsaWQgKi8KKwl1OAkJY19kOjE7CQkvKiBjb21tYW5kL2RhdGEgYml0ICovCisJdTgJCXJlczE6MjsKKwl1OAkJYnB2OjE7CQkvKiBiaXQgcG9pbnRlciB2YWxpZCAqLworCXU4CQlicG9pbnRlcjozOwkvKiBiaXQgcG9pbnRlciAqLworI2Vsc2UKKwl1OAkJYnBvaW50ZXI6MzsJLyogYml0IHBvaW50ZXIgKi8KKwl1OAkJYnB2OjE7CQkvKiBiaXQgcG9pbnRlciB2YWxpZCAqLworCXU4CQlyZXMxOjI7CisJdTgJCWNfZDoxOwkJLyogY29tbWFuZC9kYXRhIGJpdCAqLworCXU4CQlza3N2OjE7CQkvKiBzZW5zZSBrZXkgc3BlY2lmaWMgdmFsaWQgKi8KKyNlbmRpZgorCXU4CQlmcG9pbnRlclsyXTsJLyogZmllbGQgcG9pbnRlciAqLworfTsKKwogLyoKICAqIEZpYnJlIENoYW5uZWwgSGVhZGVyIFN0cnVjdHVyZSAoRkNIUykgZGVmaW5pdGlvbgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uYwppbmRleCBhNGU3OTUxLi5lMDdiZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMKQEAgLTI0LDYgKzI0LDkgQEAKICAqICBCRkEgSVROSU0gUmVsYXRlZCBkZWZpbml0aW9ucwogICovCiBzdGF0aWMgdm9pZCBiZmFfaXRuaW1fdXBkYXRlX2RlbF9pdG5fc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaW9pbV9sbV9wcm9jX3JwbF9kYXRhKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9pb2ltX2xtX3Byb2NfaW5xX2RhdGEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQgYmZhX2lvaW1fbG1faW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7CiAKICNkZWZpbmUgQkZBX0lUTklNX0ZST01fVEFHKF9mY3BpbSwgX3RhZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkoKChfZmNwaW0pLT5pdG5pbV9hcnIgKyAoKF90YWcpICYgKChfZmNwaW0pLT5udW1faXRuaW1zIC0gMSkpKSkKQEAgLTU3LDYgKzYwLDE0IEBACiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBiZmFfaW9pbV9ycF93d24oX19pb2ltKQkJCQkJCVwKKwkoKChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopCQkJCQlcCisJIChfX2lvaW0pLT5pdG5pbS0+cnBvcnQtPnJwb3J0X2RydiktPnB3d24pCisKKyNkZWZpbmUgYmZhX2lvaW1fbHBfd3duKF9faW9pbSkJCQkJCQlcCisJKChCRkFfTFBTX0ZST01fVEFHKEJGQV9MUFNfTU9EKChfX2lvaW0pLT5iZmEpLAkJCVwKKwkoX19pb2ltKS0+aXRuaW0tPnJwb3J0LT5ycG9ydF9pbmZvLmxwX3RhZykpLT5wd3duKQkJXAorCiAjZGVmaW5lIGJmYV9pdG5pbV9zbGVyX2NiKF9faXRuaW0pIGRvIHsJCQkJCVwKIAlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKIAkJYmZhX2NiX2l0bmltX3NsZXIoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCkBAIC02Niw2ICs3NywxOCBAQAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKK2VudW0gYmZhX2lvaW1fbG1fc3RhdHVzIHsKKwlCRkFfSU9JTV9MTV9QUkVTRU5UID0gMSwKKwlCRkFfSU9JTV9MTV9MVU5fTk9UX1NVUCA9IDIsCisJQkZBX0lPSU1fTE1fUlBMX0RBVEFfQ0hBTkdFRCA9IDMsCisJQkZBX0lPSU1fTE1fTFVOX05PVF9SRFkgPSA0LAorfTsKKworZW51bSBiZmFfaW9pbV9sbV91YV9zdGF0dXMgeworCUJGQV9JT0lNX0xNX1VBX1JFU0VUID0gMCwKKwlCRkFfSU9JTV9MTV9VQV9TRVQgPSAxLAorfTsKKwogLyoKICAqICBpdG5pbSBzdGF0ZSBtYWNoaW5lIGV2ZW50CiAgKi8KQEAgLTEyMiw2ICsxNDUsOSBAQAogCUJGQV9JT0lNX1NNX1RNRE9ORQk9IDE2LAkvKiAgSU8gY2xlYW51cCBmcm9tIHRza2ltICovCiAJQkZBX0lPSU1fU01fSFdGQUlMCT0gMTcsCS8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgKi8KIAlCRkFfSU9JTV9TTV9JT1RPVgk9IDE4LAkvKiAgSVROIG9mZmxpbmUgVE9WICovCisJQkZBX0lPSU1fU01fTE1fTFVOX05PVF9TVVAgPSAxOSwvKiAgbHVubWFzayBsdW4gbm90IHN1cHBvcnRlZCAqLworCUJGQV9JT0lNX1NNX0xNX1JQTF9EQyA9IDIwLAkvKiAgbHVubWFzayByZXBvcnQtbHVuIGRhdGEgY2hhbmdlZCAqLworCUJGQV9JT0lNX1NNX0xNX0xVTl9OT1RfUkRZID0gMjEsLyogIGx1bm1hc2sgbHVuIG5vdCByZWFkeSAqLwogfTsKIAogCkBAIC0yMTksNiArMjQ1LDkgQEAKIHN0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKIHN0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fcGF0aHRvdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CiBzdGF0aWMgYmZhX2Jvb2xlYW5fdCAgICBiZmFfaW9pbV9pc19hYm9ydGFibGUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9sbV9sdW5fbm90X3N1cCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2xtX3JwbF9kYyh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2xtX2x1bl9ub3RfcmR5KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKIAogLyoKICAqIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgQkZBIElPIHN0YXRlIG1hY2hpbmUKQEAgLTQxNiw2ICs0NDUsMTIgQEAKIAliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIG91dHB1dF9yZXFzKTsKIAliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIHJkX3Rocm91Z2hwdXQpOwogCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgd3JfdGhyb3VnaHB1dCk7CisJYmZhX2ZjcGltX2FkZF9pb3N0YXRzKGxzdGF0cywgcnN0YXRzLCBsbV9sdW5fYWNyb3NzX3NnKTsKKwliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGxtX2x1bl9ub3Rfc3VwKTsKKwliZmFfZmNwaW1fYWRkX2lvc3RhdHMobHN0YXRzLCByc3RhdHMsIGxtX3JwbF9kYXRhX2NoYW5nZWQpOworCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgbG1fd2lyZV9yZXNpZHVlX2NoYW5nZWQpOworCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgbG1fc21hbGxfYnVmX2FkZHJlc2lkdWUpOworCWJmYV9mY3BpbV9hZGRfaW9zdGF0cyhsc3RhdHMsIHJzdGF0cywgbG1fbHVuX25vdF9yZHkpOwogfQogCiBiZmFfc3RhdHVzX3QKQEAgLTQzNyw2ICs0NzIsNTkgQEAKIAlyZXR1cm4gQkZBX1NUQVRVU19PSzsKIH0KIAordm9pZAorYmZhX2lvaW1fcHJvZmlsZV9jb21wKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fbGF0ZW5jeV9zICppb19sYXQgPQorCQkJJihpb2ltLT5pdG5pbS0+aW9wcm9maWxlLmlvX2xhdGVuY3kpOworCXUzMiB2YWwsIGlkeDsKKworCXZhbCA9ICh1MzIpKGppZmZpZXMgLSBpb2ltLT5zdGFydF90aW1lKTsKKwlpZHggPSBiZmFfaW9pbV9nZXRfaW5kZXgoc2NzaV9idWZmbGVuKChzdHJ1Y3Qgc2NzaV9jbW5kICopaW9pbS0+ZGlvKSk7CisJYmZhX2l0bmltX2lvcHJvZmlsZV91cGRhdGUoaW9pbS0+aXRuaW0sIGlkeCk7CisKKwlpb19sYXQtPmNvdW50W2lkeF0rKzsKKwlpb19sYXQtPm1pbltpZHhdID0gKGlvX2xhdC0+bWluW2lkeF0gPCB2YWwpID8gaW9fbGF0LT5taW5baWR4XSA6IHZhbDsKKwlpb19sYXQtPm1heFtpZHhdID0gKGlvX2xhdC0+bWF4W2lkeF0gPiB2YWwpID8gaW9fbGF0LT5tYXhbaWR4XSA6IHZhbDsKKwlpb19sYXQtPmF2Z1tpZHhdICs9IHZhbDsKK30KKwordm9pZAorYmZhX2lvaW1fcHJvZmlsZV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlpb2ltLT5zdGFydF90aW1lID0gamlmZmllczsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fcHJvZmlsZV9vbihzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHRpbWUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKwlzdHJ1Y3QgYmZhX2ZjcGltX3MgKmZjcGltID0gQkZBX0ZDUElNKGJmYSk7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwkvKiBhY2N1bXVsYXRlIElPIHN0YXRzIGZyb20gaXRuaW0gKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZjcGltLT5pdG5pbV9xKSB7CisJCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBxZTsKKwkJYmZhX2l0bmltX2NsZWFyX3N0YXRzKGl0bmltKTsKKwl9CisJZmNwaW0tPmlvX3Byb2ZpbGUgPSBCRkFfVFJVRTsKKwlmY3BpbS0+aW9fcHJvZmlsZV9zdGFydF90aW1lID0gdGltZTsKKwlmY3BpbS0+cHJvZmlsZV9jb21wID0gYmZhX2lvaW1fcHJvZmlsZV9jb21wOworCWZjcGltLT5wcm9maWxlX3N0YXJ0ID0gYmZhX2lvaW1fcHJvZmlsZV9zdGFydDsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fcHJvZmlsZV9vZmYoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9zICpmY3BpbSA9IEJGQV9GQ1BJTShiZmEpOworCWZjcGltLT5pb19wcm9maWxlID0gQkZBX0ZBTFNFOworCWZjcGltLT5pb19wcm9maWxlX3N0YXJ0X3RpbWUgPSAwOworCWZjcGltLT5wcm9maWxlX2NvbXAgPSBOVUxMOworCWZjcGltLT5wcm9maWxlX3N0YXJ0ID0gTlVMTDsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwogdTE2CiBiZmFfZmNwaW1fcWRlcHRoX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKQEAgLTE0MDEsNiArMTQ4OSwyNiBAQAogCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpKTsKIH0KIAorI2RlZmluZSBiZmFfaW9fbGF0X2Nsb2NrX3Jlc19kaXYJSFoKKyNkZWZpbmUgYmZhX2lvX2xhdF9jbG9ja19yZXNfbXVsCTEwMDAKK2JmYV9zdGF0dXNfdAorYmZhX2l0bmltX2dldF9pb3Byb2ZpbGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1faW9wcm9maWxlX3MgKmlvcHJvZmlsZSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX3MgKmZjcGltID0gQkZBX0ZDUElNKGl0bmltLT5iZmEpOworCWlmICghZmNwaW0tPmlvX3Byb2ZpbGUpCisJCXJldHVybiBCRkFfU1RBVFVTX0lPUFJPRklMRV9PRkY7CisKKwlpdG5pbS0+aW9wcm9maWxlLmluZGV4ID0gQkZBX0lPQlVDS0VUX01BWDsKKwlpdG5pbS0+aW9wcm9maWxlLmlvX3Byb2ZpbGVfc3RhcnRfdGltZSA9CisJCQkJYmZhX2lvX3Byb2ZpbGVfc3RhcnRfdGltZShpdG5pbS0+YmZhKTsKKwlpdG5pbS0+aW9wcm9maWxlLmNsb2NrX3Jlc19tdWwgPSBiZmFfaW9fbGF0X2Nsb2NrX3Jlc19tdWw7CisJaXRuaW0tPmlvcHJvZmlsZS5jbG9ja19yZXNfZGl2ID0gYmZhX2lvX2xhdF9jbG9ja19yZXNfZGl2OworCSppb3Byb2ZpbGUgPSBpdG5pbS0+aW9wcm9maWxlOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKIHZvaWQKIGJmYV9pdG5pbV9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQogewpAQCAtMTQ2OSw3ICsxNTc3LDI4IEBACiAJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKIAkJV0FSTl9PTighYmZhX3FfaXNfb25fcSgmaW9pbS0+aXRuaW0tPnBlbmRpbmdfcSwgaW9pbSkpOwogCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAotCQkJCV9fYmZhX2NiX2lvaW1fYWJvcnQsIGlvaW0pOworCQkJX19iZmFfY2JfaW9pbV9hYm9ydCwgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9MTV9MVU5fTk9UX1NVUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfaW9pbV9tb3ZlX3RvX2NvbXBfcShpb2ltKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCV9fYmZhX2NiX2lvaW1fbG1fbHVuX25vdF9zdXAsIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fTE1fUlBMX0RDOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9pb2ltX21vdmVfdG9fY29tcF9xKGlvaW0pOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAorCQkJCV9fYmZhX2NiX2lvaW1fbG1fcnBsX2RjLCBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0xNX0xVTl9OT1RfUkRZOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9pb2ltX21vdmVfdG9fY29tcF9xKGlvaW0pOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAorCQkJX19iZmFfY2JfaW9pbV9sbV9sdW5fbm90X3JkeSwgaW9pbSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTIwMDksNiArMjEzOCwyNjQgQEAKIAl9CiB9CiAKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGJmYV9mY3BpbV9zdGFydCBhZnRlciB0aGUgYmZhX2luaXQoKSB3aXRoIGZsYXNoIHJlYWQKKyAqIGlzIGNvbXBsZXRlIGJ5IGRyaXZlci4gbm93IGludmFsaWRhdGUgdGhlIHN0YWxlIGNvbnRlbnQgb2YgbHVuIG1hc2sKKyAqIGxpa2UgdW5pdCBhdHRlbnRpb24sIHJwIHRhZyBhbmQgbHAgdGFnLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fbG1faW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2x1bl9tYXNrX3MgKmx1bm1fbGlzdDsKKwlpbnQJaTsKKworCWlmIChiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpID09IEJGQV9MVU5NQVNLX01JTkNGRykKKwkJcmV0dXJuOworCisJbHVubV9saXN0ID0gYmZhX2dldF9sdW5fbWFza19saXN0KGJmYSk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MVU5fTUFTS19DRkc7IGkrKykgeworCQlsdW5tX2xpc3RbaV0udWEgPSBCRkFfSU9JTV9MTV9VQV9SRVNFVDsKKwkJbHVubV9saXN0W2ldLmxwX3RhZyA9IEJGQV9MUF9UQUdfSU5WQUxJRDsKKwkJbHVubV9saXN0W2ldLnJwX3RhZyA9IEJGQV9SUE9SVF9UQUdfSU5WQUxJRDsKKwl9Cit9CisKKy8qCisgKiBWYWxpZGF0ZSBMVU4gZm9yIExVTiBtYXNraW5nCisgKi8KK3N0YXRpYyBlbnVtIGJmYV9pb2ltX2xtX3N0YXR1cworYmZhX2lvaW1fbG1fY2hlY2soc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJc3RydWN0IGJmYV9ycG9ydF9zICpycCwgc3RydWN0IHNjc2lfbHVuIGx1bikKK3sKKwl1OCBpOworCXN0cnVjdCBiZmFfbHVuX21hc2tfcyAqbHVuX2xpc3QgPSBiZmFfZ2V0X2x1bl9tYXNrX2xpc3QoaW9pbS0+YmZhKTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilpb2ltLT5kaW87CisJc3RydWN0IHNjc2lfY2RiX3MgKmNkYiA9IChzdHJ1Y3Qgc2NzaV9jZGJfcyAqKWNtbmQtPmNtbmQ7CisKKwlpZiAoKGNkYi0+c2NzaV9jZGJbMF0gPT0gUkVQT1JUX0xVTlMpICYmCisJICAgIChzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmx1bikgPT0gMCkpIHsKKwkJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfcnBsX2RhdGE7CisJCXJldHVybiBCRkFfSU9JTV9MTV9QUkVTRU5UOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFVOX01BU0tfQ0ZHOyBpKyspIHsKKworCQlpZiAobHVuX2xpc3RbaV0uc3RhdGUgIT0gQkZBX0lPSU1fTFVOX01BU0tfQUNUSVZFKQorCQkJY29udGludWU7CisKKwkJaWYgKChzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmx1bl9saXN0W2ldLmx1bikgPT0KKwkJICAgIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikmbHVuKSkKKwkJICAgICYmIChycC0+cnBvcnRfdGFnID09IGx1bl9saXN0W2ldLnJwX3RhZykKKwkJICAgICYmICgodTgpaW9pbS0+aXRuaW0tPnJwb3J0LT5ycG9ydF9pbmZvLmxwX3RhZyA9PQorCQkJCQkJbHVuX2xpc3RbaV0ubHBfdGFnKSkgeworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIGx1bl9saXN0W2ldLnJwX3RhZyk7CisJCQliZmFfdHJjKGlvaW0tPmJmYSwgbHVuX2xpc3RbaV0ubHBfdGFnKTsKKwkJCWJmYV90cmMoaW9pbS0+YmZhLCBzY3NpbHVuX3RvX2ludCgKKwkJCQkoc3RydWN0IHNjc2lfbHVuICopJmx1bl9saXN0W2ldLmx1bikpOworCisJCQlpZiAoKGx1bl9saXN0W2ldLnVhID09IEJGQV9JT0lNX0xNX1VBX1NFVCkgJiYKKwkJCSAgICAoKGNkYi0+c2NzaV9jZGJbMF0gIT0gSU5RVUlSWSkgfHwKKwkJCSAgICAoY2RiLT5zY3NpX2NkYlswXSAhPSBSRVBPUlRfTFVOUykpKSB7CisJCQkJbHVuX2xpc3RbaV0udWEgPSBCRkFfSU9JTV9MTV9VQV9SRVNFVDsKKwkJCQlyZXR1cm4gQkZBX0lPSU1fTE1fUlBMX0RBVEFfQ0hBTkdFRDsKKwkJCX0KKworCQkJaWYgKGNkYi0+c2NzaV9jZGJbMF0gPT0gUkVQT1JUX0xVTlMpCisJCQkJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfcnBsX2RhdGE7CisKKwkJCXJldHVybiBCRkFfSU9JTV9MTV9QUkVTRU5UOworCQl9CisJfQorCisJaWYgKChjZGItPnNjc2lfY2RiWzBdID09IElOUVVJUlkpICYmCisJICAgIChzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmx1bikgPT0gMCkpIHsKKwkJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfaW5xX2RhdGE7CisJCXJldHVybiBCRkFfSU9JTV9MTV9QUkVTRU5UOworCX0KKworCWlmIChjZGItPnNjc2lfY2RiWzBdID09IFRFU1RfVU5JVF9SRUFEWSkKKwkJcmV0dXJuIEJGQV9JT0lNX0xNX0xVTl9OT1RfUkRZOworCisJcmV0dXJuIEJGQV9JT0lNX0xNX0xVTl9OT1RfU1VQOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fbG1fcHJvY19yc3BfZGF0YV9kdW1teShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9sbV9mZXRjaF9sdW4oc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIHU4ICpybF9kYXRhLCBpbnQgb2Zmc2V0LAorCQlpbnQgYnVmX2x1bl9jbnQpCit7CisJc3RydWN0IGJmYV9sdW5fbWFza19zICpsdW5fbGlzdCA9IGJmYV9nZXRfbHVuX21hc2tfbGlzdChpb2ltLT5iZmEpOworCXN0cnVjdCBzY3NpX2x1biAqbHVuX2RhdGEgPSAoc3RydWN0IHNjc2lfbHVuICopKHJsX2RhdGEgKyBvZmZzZXQpOworCXN0cnVjdCBzY3NpX2x1biBsdW47CisJaW50IGksIGo7CisKKwliZmFfdHJjKGlvaW0tPmJmYSwgYnVmX2x1bl9jbnQpOworCWZvciAoaiA9IDA7IGogPCBidWZfbHVuX2NudDsgaisrKSB7CisJCWx1biA9ICooKHN0cnVjdCBzY3NpX2x1biAqKShsdW5fZGF0YSArIGopKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9MVU5fTUFTS19DRkc7IGkrKykgeworCQkJaWYgKGx1bl9saXN0W2ldLnN0YXRlICE9IEJGQV9JT0lNX0xVTl9NQVNLX0FDVElWRSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgobHVuX2xpc3RbaV0ucnBfd3duID09IGJmYV9pb2ltX3JwX3d3bihpb2ltKSkgJiYKKwkJCSAgICAobHVuX2xpc3RbaV0ubHBfd3duID09IGJmYV9pb2ltX2xwX3d3bihpb2ltKSkgJiYKKwkJCSAgICAoc2NzaWx1bl90b19pbnQoKHN0cnVjdCBzY3NpX2x1biAqKSZsdW5fbGlzdFtpXS5sdW4pCisJCQkJPT0gc2NzaWx1bl90b19pbnQoKHN0cnVjdCBzY3NpX2x1biAqKSZsdW4pKSkgeworCQkJCWx1bl9saXN0W2ldLnN0YXRlID0gQkZBX0lPSU1fTFVOX01BU0tfRkVUQ0hFRDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSAvKiBuZXh0IGx1biBpbiBtYXNrIERCICovCisJfSAvKiBuZXh0IGx1biBpbiBidWYgKi8KK30KKworc3RhdGljIGludAorYmZhX2lvaW1fbG1fdXBkYXRlX2x1bl9zZyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgdTMyICpwZ2RsZW4sCisJCXN0cnVjdCBzY3NpX3JlcG9ydF9sdW5zX2RhdGFfcyAqcmwpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaW9pbS0+ZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY3NpX3NnbGlzdChjbW5kKTsKKwlzdHJ1Y3QgYmZhX2x1bl9tYXNrX3MgKmx1bl9saXN0ID0gYmZhX2dldF9sdW5fbWFza19saXN0KGlvaW0tPmJmYSk7CisJc3RydWN0IHNjc2lfbHVuICpwcmV2X3JsX2RhdGEgPSBOVUxMLCAqYmFzZV9ybF9kYXRhOworCWludCBpLCBqLCBzZ2VpZCwgbHVuX2ZldGNoZWRfY250ID0gMCwgcHJldl9zZ19sZW4gPSAwLCBiYXNlX2NvdW50OworCWludCBsdW5fYWNyb3NzX3NnX2J5dGVzLCBieXRlc19mcm9tX25leHRfYnVmOworCXU2NAlsYXN0X2x1biwgdGVtcF9sYXN0X2x1bjsKKworCS8qIGZldGNoIGx1bnMgZnJvbSB0aGUgZmlyc3Qgc2cgZWxlbWVudCAqLworCWJmYV9pb2ltX2xtX2ZldGNoX2x1bihpb2ltLCAodTggKikocmwtPmx1biksIDAsCisJCQkoc2dfZG1hX2xlbihzZykgLyBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSkgLSAxKTsKKworCS8qIGZldGNoIGx1bnMgZnJvbSBtdWx0aXBsZSBzZyBlbGVtZW50cyAqLworCXNjc2lfZm9yX2VhY2hfc2coY21uZCwgc2csIHNjc2lfc2dfY291bnQoY21uZCksIHNnZWlkKSB7CisJCWlmIChzZ2VpZCA9PSAwKSB7CisJCQlwcmV2X3NnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJcHJldl9ybF9kYXRhID0gKHN0cnVjdCBzY3NpX2x1biAqKQorCQkJCQlwaHlzX3RvX3ZpcnQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogaWYgdGhlIGJ1ZiBpcyBoYXZpbmcgbW9yZSBkYXRhICovCisJCWx1bl9hY3Jvc3Nfc2dfYnl0ZXMgPSBwcmV2X3NnX2xlbiAlIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pOworCQlpZiAobHVuX2Fjcm9zc19zZ19ieXRlcykgeworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIGx1bl9hY3Jvc3Nfc2dfYnl0ZXMpOworCQkJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBsbV9sdW5fYWNyb3NzX3NnKTsKKwkJCWJ5dGVzX2Zyb21fbmV4dF9idWYgPSBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSAtCisJCQkJCSAgICAgIGx1bl9hY3Jvc3Nfc2dfYnl0ZXM7CisKKwkJCS8qIGZyb20gbmV4dCBidWYgdGFrZSBoaWdoZXIgYnl0ZXMgKi8KKwkJCXRlbXBfbGFzdF9sdW4gPSAqKCh1NjQgKikKKwkJCQkJICBwaHlzX3RvX3ZpcnQoc2dfZG1hX2FkZHJlc3Moc2cpKSk7CisJCQlsYXN0X2x1biB8PSB0ZW1wX2xhc3RfbHVuID4+CisJCQkJICAgIChsdW5fYWNyb3NzX3NnX2J5dGVzICogQklUU19QRVJfQllURSk7CisKKwkJCS8qIGZyb20gcHJldiBidWYgdGFrZSBoaWdoZXIgYnl0ZXMgKi8KKwkJCXRlbXBfbGFzdF9sdW4gPSAqKCh1NjQgKikocHJldl9ybF9kYXRhICsKKwkJCQkJICAocHJldl9zZ19sZW4gLSBsdW5fYWNyb3NzX3NnX2J5dGVzKSkpOworCQkJdGVtcF9sYXN0X2x1biA+Pj0gYnl0ZXNfZnJvbV9uZXh0X2J1ZiAqIEJJVFNfUEVSX0JZVEU7CisJCQlsYXN0X2x1biA9IGxhc3RfbHVuIHwgKHRlbXBfbGFzdF9sdW4gPDwKKwkJCQkgICAoYnl0ZXNfZnJvbV9uZXh0X2J1ZiAqIEJJVFNfUEVSX0JZVEUpKTsKKworCQkJYmZhX2lvaW1fbG1fZmV0Y2hfbHVuKGlvaW0sICh1OCAqKSZsYXN0X2x1biwgMCwgMSk7CisJCX0gZWxzZQorCQkJYnl0ZXNfZnJvbV9uZXh0X2J1ZiA9IDA7CisKKwkJKnBnZGxlbiArPSBzZ19kbWFfbGVuKHNnKTsKKwkJcHJldl9zZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJcHJldl9ybF9kYXRhID0gKHN0cnVjdCBzY3NpX2x1biAqKQorCQkJCXBoeXNfdG9fdmlydChzZ19kbWFfYWRkcmVzcyhzZykpOworCQliZmFfaW9pbV9sbV9mZXRjaF9sdW4oaW9pbSwgKHU4ICopcHJldl9ybF9kYXRhLAorCQkJCWJ5dGVzX2Zyb21fbmV4dF9idWYsCisJCQkJc2dfZG1hX2xlbihzZykgLyBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSk7CisJfQorCisJLyogdXBkYXRlIHRoZSByZXBvcnQgbHVucyBkYXRhIC0gYmFzZWQgb24gZmV0Y2hlZCBsdW5zICovCisJc2cgPSBzY3NpX3NnbGlzdChjbW5kKTsKKwliYXNlX3JsX2RhdGEgPSAoc3RydWN0IHNjc2lfbHVuICopcmwtPmx1bjsKKwliYXNlX2NvdW50ID0gKHNnX2RtYV9sZW4oc2cpIC8gc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bikpIC0gMTsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IE1BWF9MVU5fTUFTS19DRkc7IGkrKykgeworCQlpZiAobHVuX2xpc3RbaV0uc3RhdGUgPT0gQkZBX0lPSU1fTFVOX01BU0tfRkVUQ0hFRCkgeworCQkJYmFzZV9ybF9kYXRhW2pdID0gbHVuX2xpc3RbaV0ubHVuOworCQkJbHVuX2xpc3RbaV0uc3RhdGUgPSBCRkFfSU9JTV9MVU5fTUFTS19BQ1RJVkU7CisJCQlqKys7CisJCQlsdW5fZmV0Y2hlZF9jbnQrKzsKKwkJfQorCisJCWlmIChqID4gYmFzZV9jb3VudCkgeworCQkJaiA9IDA7CisJCQlzZyA9IHNnX25leHQoc2cpOworCQkJYmFzZV9ybF9kYXRhID0gKHN0cnVjdCBzY3NpX2x1biAqKQorCQkJCQlwaHlzX3RvX3ZpcnQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCWJhc2VfY291bnQgPSBzZ19kbWFfbGVuKHNnKSAvIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pOworCQl9CisJfQorCisJYmZhX3RyYyhpb2ltLT5iZmEsIGx1bl9mZXRjaGVkX2NudCk7CisJcmV0dXJuIGx1bl9mZXRjaGVkX2NudDsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX2xtX3Byb2NfaW5xX2RhdGEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IHNjc2lfaW5xdWlyeV9kYXRhX3MgKmlucTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3QoKHN0cnVjdCBzY3NpX2NtbmQgKilpb2ltLT5kaW8pOworCisJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfcnNwX2RhdGFfZHVtbXk7CisJaW5xID0gKHN0cnVjdCBzY3NpX2lucXVpcnlfZGF0YV9zICopcGh5c190b192aXJ0KHNnX2RtYV9hZGRyZXNzKHNnKSk7CisKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW5xLT5kZXZpY2VfdHlwZSk7CisJaW5xLT5wZXJpcGhlcmFsX3F1YWwgPSBTQ1NJX0lOUV9QUV9OT1RfQ09OOworCXJldHVybiAwOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fbG1fcHJvY19ycGxfZGF0YShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilpb2ltLT5kaW87CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHNjc2lfc2dsaXN0KGNtbmQpOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqbTsKKwlzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19kYXRhX3MgKnJsID0gTlVMTDsKKwlpbnQgbHVuX2NvdW50ID0gMCwgbHVuX2ZldGNoZWRfY250ID0gMDsKKwl1MzIgcmVzaWR1ZSwgcGdkbGVuID0gMDsKKworCWlvaW0tPnByb2NfcnNwX2RhdGEgPSBiZmFfaW9pbV9sbV9wcm9jX3JzcF9kYXRhX2R1bW15OworCWlmIChiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhpb2ltLT5iZmEpICE9IEJGQV9MVU5NQVNLX0VOQUJMRUQpCisJCXJldHVybiBCRkFfVFJVRTsKKworCW0gPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopICZpb2ltLT5pb3NwLT5jb21wX3JzcG1zZzsKKwlpZiAobS0+c2NzaV9zdGF0dXMgPT0gU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwlwZ2RsZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgcGdkbGVuKTsKKwlybCA9IChzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19kYXRhX3MgKilwaHlzX3RvX3ZpcnQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwlsdW5fY291bnQgPSBjcHVfdG9fYmUzMihybC0+bHVuX2xpc3RfbGVuZ3RoKSAvIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pOworCWx1bl9mZXRjaGVkX2NudCA9IGJmYV9pb2ltX2xtX3VwZGF0ZV9sdW5fc2coaW9pbSwgJnBnZGxlbiwgcmwpOworCisJaWYgKGx1bl9jb3VudCA9PSBsdW5fZmV0Y2hlZF9jbnQpCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV90cmMoaW9pbS0+YmZhLCBsdW5fY291bnQpOworCWJmYV90cmMoaW9pbS0+YmZhLCBsdW5fZmV0Y2hlZF9jbnQpOworCWJmYV90cmMoaW9pbS0+YmZhLCBiZTMyX3RvX2NwdShybC0+bHVuX2xpc3RfbGVuZ3RoKSk7CisKKwlpZiAoYmUzMl90b19jcHUocmwtPmx1bl9saXN0X2xlbmd0aCkgPD0gcGdkbGVuKQorCQlybC0+bHVuX2xpc3RfbGVuZ3RoID0gYmUzMl90b19jcHUobHVuX2ZldGNoZWRfY250KSAqCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bik7CisJZWxzZQorCQliZmFfc3RhdHMoaW9pbS0+aXRuaW0sIGxtX3NtYWxsX2J1Zl9hZGRyZXNpZHVlKTsKKworCWJmYV90cmMoaW9pbS0+YmZhLCBiZTMyX3RvX2NwdShybC0+bHVuX2xpc3RfbGVuZ3RoKSk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGJlMzJfdG9fY3B1KG0tPnJlc2lkdWUpKTsKKworCXJlc2lkdWUgPSBiZTMyX3RvX2NwdShtLT5yZXNpZHVlKTsKKwlyZXNpZHVlICs9IChsdW5fY291bnQgLSBsdW5fZmV0Y2hlZF9jbnQpICogc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bik7CisJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBsbV93aXJlX3Jlc2lkdWVfY2hhbmdlZCk7CisJbS0+cmVzaWR1ZSA9IGJlMzJfdG9fY3B1KHJlc2lkdWUpOworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5uc2dlcyk7CisJcmV0dXJuIEJGQV9GQUxTRTsKK30KIAogc3RhdGljIHZvaWQKIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQpAQCAtMjA2OCw2ICsyNDU1LDI5OSBAQAogfQogCiBzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9sbV9sdW5fbm90X3N1cCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCWludCBzbnNfbGVuID0gMHhEOworCXUzMiByZXNpZHVlID0gc2NzaV9idWZmbGVuKChzdHJ1Y3Qgc2NzaV9jbW5kICopaW9pbS0+ZGlvKTsKKwlzdHJ1Y3Qgc2NzaV9zZW5zZV9zICpzbnNpbmZvOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJc25zaW5mbyA9IChzdHJ1Y3Qgc2NzaV9zZW5zZV9zICopQkZBX1NOU0lORk9fRlJPTV9UQUcoCisJCQkJCWlvaW0tPmZjcGltLT5mY3AsIGlvaW0tPmlvdGFnKTsKKwlzbnNpbmZvLT5yc3BfY29kZSA9IFNDU0lfU0VOU0VfQ1VSX0VSUjsKKwlzbnNpbmZvLT5hZGRfc2Vuc2VfbGVuZ3RoID0gMHhhOworCXNuc2luZm8tPmFzYyA9IFNDU0lfQVNDX0xVTl9OT1RfU1VQUE9SVEVEOworCXNuc2luZm8tPnNlbnNlX2tleSA9IElMTEVHQUxfUkVRVUVTVDsKKwliZmFfdHJjKGlvaW0tPmJmYSwgcmVzaWR1ZSk7CisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX09LLAorCQkJU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OLCBzbnNfbGVuLAorCQkJKHU4ICopc25zaW5mbywgcmVzaWR1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2xtX3JwbF9kYyh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCWludCBzbnNfbGVuID0gMHhEOworCXUzMiByZXNpZHVlID0gc2NzaV9idWZmbGVuKChzdHJ1Y3Qgc2NzaV9jbW5kICopaW9pbS0+ZGlvKTsKKwlzdHJ1Y3Qgc2NzaV9zZW5zZV9zICpzbnNpbmZvOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJc25zaW5mbyA9IChzdHJ1Y3Qgc2NzaV9zZW5zZV9zICopQkZBX1NOU0lORk9fRlJPTV9UQUcoaW9pbS0+ZmNwaW0tPmZjcCwKKwkJCQkJCSAgICAgICBpb2ltLT5pb3RhZyk7CisJc25zaW5mby0+cnNwX2NvZGUgPSBTQ1NJX1NFTlNFX0NVUl9FUlI7CisJc25zaW5mby0+c2Vuc2Vfa2V5ID0gU0NTSV9NUF9JRUNfVU5JVF9BVFROOworCXNuc2luZm8tPmFzYyA9IFNDU0lfQVNDX1RPQ0M7CisJc25zaW5mby0+YWRkX3NlbnNlX2xlbmd0aCA9IDB4NjsKKwlzbnNpbmZvLT5hc2NxID0gU0NTSV9BU0NRX1JMX0RBVEFfQ0hBTkdFRDsKKwliZmFfdHJjKGlvaW0tPmJmYSwgcmVzaWR1ZSk7CisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX09LLAorCQkJU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OLCBzbnNfbGVuLAorCQkJKHU4ICopc25zaW5mbywgcmVzaWR1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2xtX2x1bl9ub3RfcmR5KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisJaW50IHNuc19sZW4gPSAweEQ7CisJdTMyIHJlc2lkdWUgPSBzY3NpX2J1ZmZsZW4oKHN0cnVjdCBzY3NpX2NtbmQgKilpb2ltLT5kaW8pOworCXN0cnVjdCBzY3NpX3NlbnNlX3MgKnNuc2luZm87CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwlzbnNpbmZvID0gKHN0cnVjdCBzY3NpX3NlbnNlX3MgKilCRkFfU05TSU5GT19GUk9NX1RBRygKKwkJCQkJaW9pbS0+ZmNwaW0tPmZjcCwgaW9pbS0+aW90YWcpOworCXNuc2luZm8tPnJzcF9jb2RlID0gU0NTSV9TRU5TRV9DVVJfRVJSOworCXNuc2luZm8tPmFkZF9zZW5zZV9sZW5ndGggPSAweGE7CisJc25zaW5mby0+c2Vuc2Vfa2V5ID0gTk9UX1JFQURZOworCXNuc2luZm8tPmFzYyA9IFNDU0lfQVNDX0xVTl9OT1RfUkVBRFk7CisJc25zaW5mby0+YXNjcSA9IFNDU0lfQVNDUV9NQU5fSU5UUl9SRVE7CisJYmZhX3RyYyhpb2ltLT5iZmEsIHJlc2lkdWUpOworCWJmYV9jYl9pb2ltX2RvbmUoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8sIEJGSV9JT0lNX1NUU19PSywKKwkJCVNDU0lfU1RBVFVTX0NIRUNLX0NPTkRJVElPTiwgc25zX2xlbiwKKwkJCSh1OCAqKXNuc2luZm8sIHJlc2lkdWUpOworfQorCit2b2lkCitiZmFfZmNwaW1fbHVubWFza19ycF91cGRhdGUoc3RydWN0IGJmYV9zICpiZmEsIHd3bl90IGxwX3d3biwgd3duX3QgcnBfd3duLAorCQkJdTE2IHJwX3RhZywgdTggbHBfdGFnKQoreworCXN0cnVjdCBiZmFfbHVuX21hc2tfcyAqbHVuX2xpc3Q7CisJdTgJaTsKKworCWlmIChiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpID09IEJGQV9MVU5NQVNLX01JTkNGRykKKwkJcmV0dXJuOworCisJbHVuX2xpc3QgPSBiZmFfZ2V0X2x1bl9tYXNrX2xpc3QoYmZhKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xVTl9NQVNLX0NGRzsgaSsrKSB7CisJCWlmIChsdW5fbGlzdFtpXS5zdGF0ZSA9PSBCRkFfSU9JTV9MVU5fTUFTS19BQ1RJVkUpIHsKKwkJCWlmICgobHVuX2xpc3RbaV0ubHBfd3duID09IGxwX3d3bikgJiYKKwkJCSAgICAobHVuX2xpc3RbaV0ucnBfd3duID09IHJwX3d3bikpIHsKKwkJCQlsdW5fbGlzdFtpXS5ycF90YWcgPSBycF90YWc7CisJCQkJbHVuX2xpc3RbaV0ubHBfdGFnID0gbHBfdGFnOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogc2V0IFVBIGZvciBhbGwgYWN0aXZlIGx1bnMgaW4gTE0gREIKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX2xtX3NldF91YShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2x1bl9tYXNrX3MJKmx1bm1fbGlzdDsKKwlpbnQJaTsKKworCWx1bm1fbGlzdCA9IGJmYV9nZXRfbHVuX21hc2tfbGlzdChiZmEpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFVOX01BU0tfQ0ZHOyBpKyspIHsKKwkJaWYgKGx1bm1fbGlzdFtpXS5zdGF0ZSAhPSBCRkFfSU9JTV9MVU5fTUFTS19BQ1RJVkUpCisJCQljb250aW51ZTsKKwkJbHVubV9saXN0W2ldLnVhID0gQkZBX0lPSU1fTE1fVUFfU0VUOworCX0KK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fbHVubWFza191cGRhdGUoc3RydWN0IGJmYV9zICpiZmEsIHUzMiB1cGRhdGUpCit7CisJc3RydWN0IGJmYV9sdW5tYXNrX2NmZ19zCSpsdW5fbWFzazsKKworCWJmYV90cmMoYmZhLCBiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpKTsKKwlpZiAoYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSA9PSBCRkFfTFVOTUFTS19NSU5DRkcpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWlmIChiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpID09IHVwZGF0ZSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfTk9fQ0hBTkdFOworCisJbHVuX21hc2sgPSBiZmFfZ2V0X2x1bl9tYXNrKGJmYSk7CisJbHVuX21hc2stPnN0YXR1cyA9IHVwZGF0ZTsKKworCWlmIChiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpID09IEJGQV9MVU5NQVNLX0VOQUJMRUQpCisJCWJmYV9pb2ltX2xtX3NldF91YShiZmEpOworCisJcmV0dXJuICBiZmFfZGNvbmZfdXBkYXRlKGJmYSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2ZjcGltX2x1bm1hc2tfY2xlYXIoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50IGk7CisJc3RydWN0IGJmYV9sdW5fbWFza19zCSpsdW5tX2xpc3Q7CisKKwliZmFfdHJjKGJmYSwgYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSk7CisJaWYgKGJmYV9nZXRfbHVuX21hc2tfc3RhdHVzKGJmYSkgPT0gQkZBX0xVTk1BU0tfTUlOQ0ZHKQorCQlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwlsdW5tX2xpc3QgPSBiZmFfZ2V0X2x1bl9tYXNrX2xpc3QoYmZhKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xVTl9NQVNLX0NGRzsgaSsrKSB7CisJCWlmIChsdW5tX2xpc3RbaV0uc3RhdGUgPT0gQkZBX0lPSU1fTFVOX01BU0tfQUNUSVZFKSB7CisJCQlpZiAobHVubV9saXN0W2ldLnJwX3RhZyAhPSBCRkFfUlBPUlRfVEFHX0lOVkFMSUQpCisJCQkJYmZhX3Jwb3J0X3Vuc2V0X2x1bm1hc2soYmZhLAorCQkJCSAgQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbHVubV9saXN0W2ldLnJwX3RhZykpOworCQl9CisJfQorCisJbWVtc2V0KGx1bm1fbGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbHVuX21hc2tfcykgKiBNQVhfTFVOX01BU0tfQ0ZHKTsKKwlyZXR1cm4gYmZhX2Rjb25mX3VwZGF0ZShiZmEpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3BpbV9sdW5tYXNrX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpidWYpCit7CisJc3RydWN0IGJmYV9sdW5tYXNrX2NmZ19zICpsdW5fbWFzazsKKworCWJmYV90cmMoYmZhLCBiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpKTsKKwlpZiAoYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSA9PSBCRkFfTFVOTUFTS19NSU5DRkcpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWx1bl9tYXNrID0gYmZhX2dldF9sdW5fbWFzayhiZmEpOworCW1lbWNweShidWYsIGx1bl9tYXNrLCBzaXplb2Yoc3RydWN0IGJmYV9sdW5tYXNrX2NmZ19zKSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2ZjcGltX2x1bm1hc2tfYWRkKHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgdmZfaWQsIHd3bl90ICpwd3duLAorCQkgICAgICB3d25fdCBycHd3biwgc3RydWN0IHNjc2lfbHVuIGx1bikKK3sKKwlzdHJ1Y3QgYmZhX2x1bl9tYXNrX3MgKmx1bm1fbGlzdDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwID0gTlVMTDsKKwlpbnQgaSwgZnJlZV9pbmRleCA9IE1BWF9MVU5fTUFTS19DRkcgKyAxOworCXN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQgPSBOVUxMOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwX2ZjczsKKworCWJmYV90cmMoYmZhLCBiZmFfZ2V0X2x1bl9tYXNrX3N0YXR1cyhiZmEpKTsKKwlpZiAoYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSA9PSBCRkFfTFVOTUFTS19NSU5DRkcpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCXBvcnQgPSBiZmFfZmNzX2xvb2t1cF9wb3J0KCYoKHN0cnVjdCBiZmFkX3MgKiliZmEtPmJmYWQpLT5iZmFfZmNzLAorCQkJCSAgIHZmX2lkLCAqcHd3bik7CisJaWYgKHBvcnQpIHsKKwkJKnB3d24gPSBwb3J0LT5wb3J0X2NmZy5wd3duOworCQlycF9mY3MgPSBiZmFfZmNzX2xwb3J0X2dldF9ycG9ydF9ieV9wd3duKHBvcnQsIHJwd3duKTsKKwkJcnAgPSBycF9mY3MtPmJmYV9ycG9ydDsKKwl9CisKKwlsdW5tX2xpc3QgPSBiZmFfZ2V0X2x1bl9tYXNrX2xpc3QoYmZhKTsKKwkvKiBpZiBlbnRyeSBleGlzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xVTl9NQVNLX0NGRzsgaSsrKSB7CisJCWlmIChsdW5tX2xpc3RbaV0uc3RhdGUgIT0gQkZBX0lPSU1fTFVOX01BU0tfQUNUSVZFKQorCQkJZnJlZV9pbmRleCA9IGk7CisJCWlmICgobHVubV9saXN0W2ldLmxwX3d3biA9PSAqcHd3bikgJiYKKwkJICAgIChsdW5tX2xpc3RbaV0ucnBfd3duID09IHJwd3duKSAmJgorCQkgICAgKHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikmbHVubV9saXN0W2ldLmx1bikgPT0KKwkJICAgICBzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmx1bikpKQorCQkJcmV0dXJuICBCRkFfU1RBVFVTX0VOVFJZX0VYSVNUUzsKKwl9CisKKwlpZiAoZnJlZV9pbmRleCA+IE1BWF9MVU5fTUFTS19DRkcpCisJCXJldHVybiBCRkFfU1RBVFVTX01BWF9FTlRSWV9SRUFDSEVEOworCisJaWYgKHJwKSB7CisJCWx1bm1fbGlzdFtmcmVlX2luZGV4XS5scF90YWcgPSBiZmFfbHBzX2dldF90YWdfZnJvbV9waWQoYmZhLAorCQkJCQkJICAgcnAtPnJwb3J0X2luZm8ubG9jYWxfcGlkKTsKKwkJbHVubV9saXN0W2ZyZWVfaW5kZXhdLnJwX3RhZyA9IHJwLT5ycG9ydF90YWc7CisJfSBlbHNlIHsKKwkJbHVubV9saXN0W2ZyZWVfaW5kZXhdLmxwX3RhZyA9IEJGQV9MUF9UQUdfSU5WQUxJRDsKKwkJbHVubV9saXN0W2ZyZWVfaW5kZXhdLnJwX3RhZyA9IEJGQV9SUE9SVF9UQUdfSU5WQUxJRDsKKwl9CisKKwlsdW5tX2xpc3RbZnJlZV9pbmRleF0ubHBfd3duID0gKnB3d247CisJbHVubV9saXN0W2ZyZWVfaW5kZXhdLnJwX3d3biA9IHJwd3duOworCWx1bm1fbGlzdFtmcmVlX2luZGV4XS5sdW4gPSBsdW47CisJbHVubV9saXN0W2ZyZWVfaW5kZXhdLnN0YXRlID0gQkZBX0lPSU1fTFVOX01BU0tfQUNUSVZFOworCisJLyogc2V0IGZvciBhbGwgbHVucyBpbiB0aGlzIHJwICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9MVU5fTUFTS19DRkc7IGkrKykgeworCQlpZiAoKGx1bm1fbGlzdFtpXS5scF93d24gPT0gKnB3d24pICYmCisJCSAgICAobHVubV9saXN0W2ldLnJwX3d3biA9PSBycHd3bikpCisJCQlsdW5tX2xpc3RbaV0udWEgPSBCRkFfSU9JTV9MTV9VQV9TRVQ7CisJfQorCisJcmV0dXJuIGJmYV9kY29uZl91cGRhdGUoYmZhKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fbHVubWFza19kZWxldGUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB2Zl9pZCwgd3duX3QgKnB3d24sCisJCQkgd3duX3QgcnB3d24sIHN0cnVjdCBzY3NpX2x1biBsdW4pCit7CisJc3RydWN0IGJmYV9sdW5fbWFza19zCSpsdW5tX2xpc3Q7CisJc3RydWN0IGJmYV9ycG9ydF9zCSpycCA9IE5VTEw7CisJc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqcG9ydCA9IE5VTEw7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBfZmNzOworCWludAlpOworCisJLyogaW4gbWluIGNmZyBsdW5tX2xpc3QgY291bGQgYmUgTlVMTCBidXQgIG5vIGNvbW1hbmRzIHNob3VsZCBydW4uICovCisJaWYgKGJmYV9nZXRfbHVuX21hc2tfc3RhdHVzKGJmYSkgPT0gQkZBX0xVTk1BU0tfTUlOQ0ZHKQorCQlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwliZmFfdHJjKGJmYSwgYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSk7CisJYmZhX3RyYyhiZmEsICpwd3duKTsKKwliZmFfdHJjKGJmYSwgcnB3d24pOworCWJmYV90cmMoYmZhLCBzY3NpbHVuX3RvX2ludCgoc3RydWN0IHNjc2lfbHVuICopJmx1bikpOworCisJaWYgKCpwd3duID09IDApIHsKKwkJcG9ydCA9IGJmYV9mY3NfbG9va3VwX3BvcnQoCisJCQkJJigoc3RydWN0IGJmYWRfcyAqKWJmYS0+YmZhZCktPmJmYV9mY3MsCisJCQkJdmZfaWQsICpwd3duKTsKKwkJaWYgKHBvcnQpIHsKKwkJCSpwd3duID0gcG9ydC0+cG9ydF9jZmcucHd3bjsKKwkJCXJwX2ZjcyA9IGJmYV9mY3NfbHBvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwgcnB3d24pOworCQkJcnAgPSBycF9mY3MtPmJmYV9ycG9ydDsKKwkJfQorCX0KKworCWx1bm1fbGlzdCA9IGJmYV9nZXRfbHVuX21hc2tfbGlzdChiZmEpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFVOX01BU0tfQ0ZHOyBpKyspIHsKKwkJaWYgKChsdW5tX2xpc3RbaV0ubHBfd3duID09ICpwd3duKSAmJgorCQkgICAgKGx1bm1fbGlzdFtpXS5ycF93d24gPT0gcnB3d24pICYmCisJCSAgICAoc2NzaWx1bl90b19pbnQoKHN0cnVjdCBzY3NpX2x1biAqKSZsdW5tX2xpc3RbaV0ubHVuKSA9PQorCQkgICAgIHNjc2lsdW5fdG9faW50KChzdHJ1Y3Qgc2NzaV9sdW4gKikmbHVuKSkpIHsKKwkJCWx1bm1fbGlzdFtpXS5scF93d24gPSAwOworCQkJbHVubV9saXN0W2ldLnJwX3d3biA9IDA7CisJCQlpbnRfdG9fc2NzaWx1bigwLCAmbHVubV9saXN0W2ldLmx1bik7CisJCQlsdW5tX2xpc3RbaV0uc3RhdGUgPSBCRkFfSU9JTV9MVU5fTUFTS19JTkFDVElWRTsKKwkJCWlmIChsdW5tX2xpc3RbaV0ucnBfdGFnICE9IEJGQV9SUE9SVF9UQUdfSU5WQUxJRCkgeworCQkJCWx1bm1fbGlzdFtpXS5ycF90YWcgPSBCRkFfUlBPUlRfVEFHX0lOVkFMSUQ7CisJCQkJbHVubV9saXN0W2ldLmxwX3RhZyA9IEJGQV9MUF9UQUdfSU5WQUxJRDsKKwkJCX0KKwkJCXJldHVybiBiZmFfZGNvbmZfdXBkYXRlKGJmYSk7CisJCX0KKwl9CisKKwkvKiBzZXQgZm9yIGFsbCBsdW5zIGluIHRoaXMgcnAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xVTl9NQVNLX0NGRzsgaSsrKSB7CisJCWlmICgobHVubV9saXN0W2ldLmxwX3d3biA9PSAqcHd3bikgJiYKKwkJICAgIChsdW5tX2xpc3RbaV0ucnBfd3duID09IHJwd3duKSkKKwkJCWx1bm1fbGlzdFtpXS51YSA9IEJGQV9JT0lNX0xNX1VBX1NFVDsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19FTlRSWV9OT1RfRVhJU1RTOworfQorCitzdGF0aWMgdm9pZAogX19iZmFfY2JfaW9pbV9mYWlsZWQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCiB7CiAJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKQEAgLTIwNzcsNiArMjc1Nyw3IEBACiAJCXJldHVybjsKIAl9CiAKKwlpb2ltLT5wcm9jX3JzcF9kYXRhID0gYmZhX2lvaW1fbG1fcHJvY19yc3BfZGF0YV9kdW1teTsKIAliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBCRklfSU9JTV9TVFNfQUJPUlRFRCwKIAkJCSAgMCwgMCwgTlVMTCwgMCk7CiB9CkBAIC0yMDkyLDYgKzI3NzMsNyBAQAogCQlyZXR1cm47CiAJfQogCisJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfcnNwX2RhdGFfZHVtbXk7CiAJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX1BBVEhUT1YsCiAJCQkgIDAsIDAsIE5VTEwsIDApOwogfQpAQCAtMjEwNiw2ICsyNzg4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorCWlvaW0tPnByb2NfcnNwX2RhdGEgPSBiZmFfaW9pbV9sbV9wcm9jX3JzcF9kYXRhX2R1bW15OwogCWJmYV9jYl9pb2ltX2Fib3J0KGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvKTsKIH0KIApAQCAtMjQ0OSw2ICszMTMyLDcgQEAKIAkJaW9pbS0+YmZhICAgICA9IGZjcGltLT5iZmE7CiAJCWlvaW0tPmZjcGltICAgPSBmY3BpbTsKIAkJaW9pbS0+aW9zcCAgICA9IGlvc3A7CisJCWlvaW0tPnByb2NfcnNwX2RhdGEgPSBiZmFfaW9pbV9sbV9wcm9jX3JzcF9kYXRhX2R1bW15OwogCQlJTklUX0xJU1RfSEVBRCgmaW9pbS0+c2dwZ19xKTsKIAkJYmZhX3JlcXFfd2luaXQoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCwKIAkJCQkgICBiZmFfaW9pbV9xcmVzdW1lLCBpb2ltKTsKQEAgLTI0ODYsNiArMzE3MCw3IEBACiAJCQlldnQgPSBCRkFfSU9JTV9TTV9ET05FOwogCQllbHNlCiAJCQlldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCQlpb2ltLT5wcm9jX3JzcF9kYXRhKGlvaW0pOwogCQlicmVhazsKIAogCWNhc2UgQkZJX0lPSU1fU1RTX1RJTUVET1VUOgpAQCAtMjUyMSw2ICszMjA2LDcgQEAKIAkJaWYgKHJzcC0+YWJvcnRfdGFnICE9IGlvaW0tPmFib3J0X3RhZykgewogCQkJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+YWJvcnRfdGFnKTsKIAkJCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5hYm9ydF90YWcpOworCQkJaW9pbS0+cHJvY19yc3BfZGF0YSA9IGJmYV9pb2ltX2xtX3Byb2NfcnNwX2RhdGFfZHVtbXk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjUzOSw2ICszMjI1LDcgQEAKIAkJV0FSTl9PTigxKTsKIAl9CiAKKwlpb2ltLT5wcm9jX3JzcF9kYXRhID0gYmZhX2lvaW1fbG1fcHJvY19yc3BfZGF0YV9kdW1teTsKIAliZmFfc21fc2VuZF9ldmVudChpb2ltLCBldnQpOwogfQogCkBAIC0yNTU2LDcgKzMyNDMsMTYgQEAKIAlXQVJOX09OKEJGQV9JT0lNX1RBR18yX0lEKGlvaW0tPmlvdGFnKSAhPSBpb3RhZyk7CiAKIAliZmFfaW9pbV9jYl9wcm9maWxlX2NvbXAoZmNwaW0sIGlvaW0pOwotCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NPTVBfR09PRCk7CisKKwlpZiAoYmZhX2dldF9sdW5fbWFza19zdGF0dXMoYmZhKSAhPSBCRkFfTFVOTUFTS19FTkFCTEVEKSAgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DT01QX0dPT0QpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvaW0tPnByb2NfcnNwX2RhdGEoaW9pbSkgPT0gQkZBX1RSVUUpCisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NPTVBfR09PRCk7CisJZWxzZQorCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DT01QKTsKIH0KIAogLyoKQEAgLTI2NjgsNiArMzM2NCwzNSBAQAogdm9pZAogYmZhX2lvaW1fc3RhcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCiB7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopaW9pbS0+ZGlvOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwllbnVtIGJmYV9pb2ltX2xtX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHNjc2lfbHVuIHNjc2lsdW47CisKKwlpZiAoYmZhX2dldF9sdW5fbWFza19zdGF0dXMoaW9pbS0+YmZhKSA9PSBCRkFfTFVOTUFTS19FTkFCTEVEKSB7CisJCWxwcyA9IEJGQV9JT0lNX1RPX0xQUyhpb2ltKTsKKwkJaW50X3RvX3Njc2lsdW4oY21uZC0+ZGV2aWNlLT5sdW4sICZzY3NpbHVuKTsKKwkJc3RhdHVzID0gYmZhX2lvaW1fbG1fY2hlY2soaW9pbSwgbHBzLAorCQkJCWlvaW0tPml0bmltLT5ycG9ydCwgc2NzaWx1bik7CisJCWlmIChzdGF0dXMgPT0gQkZBX0lPSU1fTE1fTFVOX05PVF9SRFkpIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0xNX0xVTl9OT1RfUkRZKTsKKwkJCWJmYV9zdGF0cyhpb2ltLT5pdG5pbSwgbG1fbHVuX25vdF9yZHkpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSBCRkFfSU9JTV9MTV9MVU5fTk9UX1NVUCkgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fTE1fTFVOX05PVF9TVVApOworCQkJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBsbV9sdW5fbm90X3N1cCk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc3RhdHVzID09IEJGQV9JT0lNX0xNX1JQTF9EQVRBX0NIQU5HRUQpIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0xNX1JQTF9EQyk7CisJCQliZmFfc3RhdHMoaW9pbS0+aXRuaW0sIGxtX3JwbF9kYXRhX2NoYW5nZWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJYmZhX2lvaW1fY2JfcHJvZmlsZV9zdGFydChpb2ltLT5mY3BpbSwgaW9pbSk7CiAKIAkvKgpAQCAtMzQxMSw2ICs0MTM2LDEzIEBACiBzdGF0aWMgdm9pZAogYmZhX2ZjcF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKIHsKKwlzdHJ1Y3QgYmZhX2ZjcF9tb2RfcyAqZmNwID0gQkZBX0ZDUF9NT0QoYmZhKTsKKworCS8qCisJICogYmZhX2luaXQoKSB3aXRoIGZsYXNoIHJlYWQgaXMgY29tcGxldGUuIG5vdyBpbnZhbGlkYXRlIHRoZSBzdGFsZQorCSAqIGNvbnRlbnQgb2YgbHVuIG1hc2sgbGlrZSB1bml0IGF0dGVudGlvbiwgcnAgdGFnIGFuZCBscCB0YWcuCisJICovCisJYmZhX2lvaW1fbG1faW5pdChmY3AtPmJmYSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW0uaAppbmRleCA1N2I2OTVhLi4xMDgwYmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmgKQEAgLTc5LDE0ICs3OSwyMiBAQAogCWlmIChuID49ICgxVUwpPDwyMikKIAkJcmV0dXJuIEJGQV9JT0JVQ0tFVF9NQVggLSAxOwogCW4gPj49IDg7Ci0JaWYgKG4gPj0gKDFVTCk8PDE2KQotCQluID4+PSAxNjsgcG9zICs9IDE2OwotCWlmIChuID49IDEgPDwgOCkKLQkJbiA+Pj0gODsgcG9zICs9IDg7Ci0JaWYgKG4gPj0gMSA8PCA0KQotCQluID4+PSA0OyBwb3MgKz0gNDsKLQlpZiAobiA+PSAxIDw8IDIpCi0JCW4gPj49IDI7IHBvcyArPSAyOworCWlmIChuID49ICgxVUwpPDwxNikgeworCQluID4+PSAxNjsKKwkJcG9zICs9IDE2OworCX0KKwlpZiAobiA+PSAxIDw8IDgpIHsKKwkJbiA+Pj0gODsKKwkJcG9zICs9IDg7CisJfQorCWlmIChuID49IDEgPDwgNCkgeworCQluID4+PSA0OworCQlwb3MgKz0gNDsKKwl9CisJaWYgKG4gPj0gMSA8PCAyKSB7CisJCW4gPj49IDI7CisJCXBvcyArPSAyOworCX0KIAlpZiAobiA+PSAxIDw8IDEpCiAJCXBvcyArPSAxOwogCkBAIC0xMDIsNiArMTEwLDcgQEAKIHN0cnVjdCBiZmFkX3Rza2ltX3M7CiAKIHR5cGVkZWYgdm9pZCAgICAoKmJmYV9mY3BpbV9wcm9maWxlX3QpIChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit0eXBlZGVmIGJmYV9ib29sZWFuX3QgKCpiZmFfaW9pbV9sbV9wcm9jX3JzcF9kYXRhX3QpIChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CiAKIHN0cnVjdCBiZmFfZmNwaW1fcyB7CiAJc3RydWN0IGJmYV9zCQkqYmZhOwpAQCAtMTE1LDcgKzEyNCw3IEBACiAJdTMyCQkJcGF0aF90b3Y7CiAJdTE2CQkJcV9kZXB0aDsKIAl1OAkJCXJlcXE7CQkvKiAgUmVxdWVzdCBxdWV1ZSB0byBiZSB1c2VkICovCi0JdTgJCQlyc3ZkOworCXU4CQkJbHVuX21hc2tpbmdfcGVuZGluZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWl0bmltX3E7CS8qICBxdWV1ZSBvZiBhY3RpdmUgaXRuaW0gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWlvaW1fcmVzZnJlZV9xOyAvKiAgSU9zIHdhaXRpbmcgZm9yIGYvdyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaW9pbV9jb21wX3E7CS8qICBJTyBnbG9iYWwgY29tcCBRCSovCkBAIC0xNzAsNyArMTc5LDkgQEAKIAliZmFfY2JfY2Jmbl90CQlpb19jYmZuOwkvKiAgSU8gY29tcGxldGlvbiBoYW5kbGVyICovCiAJc3RydWN0IGJmYV9pb2ltX3NwX3MJKmlvc3A7CQkvKiAgc2xvdy1wYXRoIElPIGhhbmRsaW5nICovCiAJdTgJCQlyZXFxOwkJLyogIFJlcXVlc3QgcXVldWUgZm9yIEkvTyAqLworCXU4CQkJbW9kZTsJCS8qICBJTyBpcyBwYXNzdGhyb3VnaCBvciBub3QgKi8KIAl1NjQJCQlzdGFydF90aW1lOwkvKiAgSU8ncyBQcm9maWxlIHN0YXJ0IHZhbCAqLworCWJmYV9pb2ltX2xtX3Byb2NfcnNwX2RhdGFfdCBwcm9jX3JzcF9kYXRhOyAvKiBSU1AgZGF0YSBhZGp1c3QgKi8KIH07CiAKIHN0cnVjdCBiZmFfaW9pbV9zcF9zIHsKQEAgLTI1MCw2ICsyNjEsMTAgQEAKIAkoX19pb2ltKS0+aW90YWcgfD0gayA8PCBCRkFfSU9JTV9SRVRSWV9UQUdfT0ZGU0VUOwkJXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBCRkFfSU9JTV9UT19MUFMoX19pb2ltKQkJXAorCUJGQV9MUFNfRlJPTV9UQUcoQkZBX0xQU19NT0QoX19pb2ltLT5iZmEpLAlcCisJCV9faW9pbS0+aXRuaW0tPnJwb3J0LT5ycG9ydF9pbmZvLmxwX3RhZykKKwogc3RhdGljIGlubGluZSBiZmFfYm9vbGVhbl90CiBiZmFfaW9pbV9tYXhyZXRyeV9yZWFjaGVkKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQogewpAQCAtMjk3LDYgKzMxMiw4IEBACiAJCQlzdHJ1Y3QgYmZhX2l0bmltX2lvc3RhdHNfcyAqc3RhdHMsIHU4IGxwX3RhZyk7CiB2b2lkIGJmYV9mY3BpbV9hZGRfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MgKmZjcGltX3N0YXRzLAogCQkJc3RydWN0IGJmYV9pdG5pbV9pb3N0YXRzX3MgKml0bmltX3N0YXRzKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNwaW1fcHJvZmlsZV9vbihzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHRpbWUpOworYmZhX3N0YXR1c190IGJmYV9mY3BpbV9wcm9maWxlX29mZihzdHJ1Y3QgYmZhX3MgKmJmYSk7CiAKICNkZWZpbmUgYmZhX2ZjcGltX2lvcmVkaXJlY3RfZW5hYmxlZChfX2JmYSkJCQkJXAogCSgoKHN0cnVjdCBiZmFfZmNwaW1fcyAqKShCRkFfRkNQSU0oX19iZmEpKSktPmlvcmVkaXJlY3QpCkBAIC0zOTcsNCArNDE0LDE0IEBACiB2b2lkIGJmYV9jYl90c2tpbV9kb25lKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2ssCiAJCQllbnVtIGJmaV90c2tpbV9zdGF0dXMgdHNrX3N0YXR1cyk7CiAKK3ZvaWQJYmZhX2ZjcGltX2x1bm1hc2tfcnBfdXBkYXRlKHN0cnVjdCBiZmFfcyAqYmZhLCB3d25fdCBscF93d24sCisJCQl3d25fdCBycF93d24sIHUxNiBycF90YWcsIHU4IGxwX3RhZyk7CitiZmFfc3RhdHVzX3QJYmZhX2ZjcGltX2x1bm1hc2tfdXBkYXRlKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgb25fb2ZmKTsKK2JmYV9zdGF0dXNfdAliZmFfZmNwaW1fbHVubWFza19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYnVmKTsKK2JmYV9zdGF0dXNfdAliZmFfZmNwaW1fbHVubWFza19kZWxldGUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB2Zl9pZCwKKwkJCQl3d25fdCAqcHd3biwgd3duX3QgcnB3d24sIHN0cnVjdCBzY3NpX2x1biBsdW4pOworYmZhX3N0YXR1c190CWJmYV9mY3BpbV9sdW5tYXNrX2FkZChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHZmX2lkLAorCQkJCXd3bl90ICpwd3duLCB3d25fdCBycHd3biwgc3RydWN0IHNjc2lfbHVuIGx1bik7CitiZmFfc3RhdHVzX3QJYmZhX2ZjcGltX2x1bm1hc2tfY2xlYXIoc3RydWN0IGJmYV9zICpiZmEpOworCiAjZW5kaWYgLyogX19CRkFfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3MuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCmluZGV4IGE5YjIyYmMuLmVhYWM1N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgogI2luY2x1ZGUgImJmYV9mY3MuaCIKICNpbmNsdWRlICJiZmFfZmNidWlsZC5oIgogCkBAIC0xMzI3LDYgKzEzMjgsMjkgQEAKIAliZmFfdHJjKGZhYnJpYy0+ZmNzLCBzdGF0dXMpOwogfQogCisKKy8qCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsCisJCQllbnVtIGJmYV9wb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilwb3J0LT5mYWJyaWMtPmZjcy0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zICAqYWVuX2VudHJ5OworCisJYmZhZF9nZXRfYWVuX2VudHJ5KGJmYWQsIGFlbl9lbnRyeSk7CisJaWYgKCFhZW5fZW50cnkpCisJCXJldHVybjsKKworCWFlbl9lbnRyeS0+YWVuX2RhdGEucG9ydC5wd3duID0gYmZhX2Zjc19scG9ydF9nZXRfcHd3bihwb3J0KTsKKwlhZW5fZW50cnktPmFlbl9kYXRhLnBvcnQuZnd3biA9IGJmYV9mY3NfbHBvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpOworCisJLyogU2VuZCB0aGUgQUVOIG5vdGlmaWNhdGlvbiAqLworCWJmYWRfaW1fcG9zdF92ZW5kb3JfZXZlbnQoYWVuX2VudHJ5LCBiZmFkLCArK3BvcnQtPmZjcy0+ZmNzX2Flbl9zZXEsCisJCQkJICBCRkFfQUVOX0NBVF9QT1JULCBldmVudCk7Cit9CisKIC8qCiAgKgogICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKQEAgLTEzNTgsNiArMTM4Miw4IEBACiAJCUJGQV9MT0coS0VSTl9XQVJOSU5HLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJIkJhc2UgcG9ydCBXV04gPSAlcyBGYWJyaWMgV1dOID0gJXNcbiIsCiAJCQlwd3duX3B0ciwgZnd3bl9wdHIpOworCQliZmFfZmNzX2ZhYnJpY19hZW5fcG9zdCgmZmFicmljLT5icG9ydCwKKwkJCQlCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKaW5kZXggYTVmMWZhZi4uZTc1ZTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmgKQEAgLTY3NSw2ICs2NzUsNyBAQAogCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zIGZhYnJpYzsgLyogIGJhc2UgZmFicmljIHN0YXRlIG1hY2hpbmUgKi8KIAlzdHJ1Y3QgYmZhX2Zjc19zdGF0c19zCXN0YXRzOwkvKiAgRkNTIHN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgYmZhX3djX3MJCXdjOwkvKiAgd2FpdGluZyBjb3VudGVyICovCisJaW50CQkJZmNzX2Flbl9zZXE7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYwppbmRleCAyOWI0MTA4Li45MjcyODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfZmNwaW0uYwpAQCAtMzcsNiArMzcsOCBAQAogCQkJIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKIAkJCSAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCiAJCQkgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2Flbl9ldmVudCBldmVudCk7CiAKIC8qCiAgKiAgZmNzX2l0bmltX3NtIEZDUyBpdG5pbSBzdGF0ZSBtYWNoaW5lIGV2ZW50cwpAQCAtMjY5LDYgKzI3MSw3IEBACiAJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkiVGFyZ2V0IChXV04gPSAlcykgaXMgb25saW5lIGZvciBpbml0aWF0b3IgKFdXTiA9ICVzKVxuIiwKIAkJcnB3d25fYnVmLCBscHd3bl9idWYpOworCQliZmFfZmNzX2l0bmltX2Flbl9wb3N0KGl0bmltLCBCRkFfSVROSU1fQUVOX09OTElORSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CkBAIC0zMDUsMTQgKzMwOCwxNyBAQAogCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKIAkJd3duMnN0cihscHd3bl9idWYsIGJmYV9mY3NfbHBvcnRfZ2V0X3B3d24oaXRuaW0tPnJwb3J0LT5wb3J0KSk7CiAJCXd3bjJzdHIocnB3d25fYnVmLCBpdG5pbS0+cnBvcnQtPnB3d24pOwotCQlpZiAoYmZhX2Zjc19scG9ydF9pc19vbmxpbmUoaXRuaW0tPnJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkKKwkJaWYgKGJmYV9mY3NfbHBvcnRfaXNfb25saW5lKGl0bmltLT5ycG9ydC0+cG9ydCkgPT0gQkZBX1RSVUUpIHsKIAkJCUJGQV9MT0coS0VSTl9FUlIsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkiVGFyZ2V0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yICIKIAkJCSJpbml0aWF0b3IgKFdXTiA9ICVzKVxuIiwgcnB3d25fYnVmLCBscHd3bl9idWYpOwotCQllbHNlCisJCQliZmFfZmNzX2l0bmltX2Flbl9wb3N0KGl0bmltLCBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QpOworCQl9IGVsc2UgewogCQkJQkZBX0xPRyhLRVJOX0lORk8sIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkiVGFyZ2V0IChXV04gPSAlcykgb2ZmbGluZWQgYnkgaW5pdGlhdG9yIChXV04gPSAlcylcbiIsCiAJCQlycHd3bl9idWYsIGxwd3duX2J1Zik7CisJCQliZmFfZmNzX2l0bmltX2Flbl9wb3N0KGl0bmltLCBCRkFfSVROSU1fQUVOX09GRkxJTkUpOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKQEAgLTM4Miw2ICszODgsMzMgQEAKIH0KIAogc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopaXRuaW0tPmZjcy0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zCSphZW5fZW50cnk7CisKKwkvKiBEb24ndCBwb3N0IGV2ZW50cyBmb3Igd2VsbCBrbm93biBhZGRyZXNzZXMgKi8KKwlpZiAoQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQlyZXR1cm47CisKKwliZmFkX2dldF9hZW5fZW50cnkoYmZhZCwgYWVuX2VudHJ5KTsKKwlpZiAoIWFlbl9lbnRyeSkKKwkJcmV0dXJuOworCisJYWVuX2VudHJ5LT5hZW5fZGF0YS5pdG5pbS52Zl9pZCA9IHJwb3J0LT5wb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9lbnRyeS0+YWVuX2RhdGEuaXRuaW0ucHB3d24gPSBiZmFfZmNzX2xwb3J0X2dldF9wd3duKAorCQkJCQliZmFfZmNzX2dldF9iYXNlX3BvcnQoaXRuaW0tPmZjcykpOworCWFlbl9lbnRyeS0+YWVuX2RhdGEuaXRuaW0ubHB3d24gPSBiZmFfZmNzX2xwb3J0X2dldF9wd3duKHJwb3J0LT5wb3J0KTsKKwlhZW5fZW50cnktPmFlbl9kYXRhLml0bmltLnJwd3duID0gcnBvcnQtPnB3d247CisKKwkvKiBTZW5kIHRoZSBBRU4gbm90aWZpY2F0aW9uICovCisJYmZhZF9pbV9wb3N0X3ZlbmRvcl9ldmVudChhZW5fZW50cnksIGJmYWQsICsrcnBvcnQtPmZjcy0+ZmNzX2Flbl9zZXEsCisJCQkJICBCRkFfQUVOX0NBVF9JVE5JTSwgZXZlbnQpOworfQorCitzdGF0aWMgdm9pZAogYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkodm9pZCAqaXRuaW1fY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCiB7CiAJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSBpdG5pbV9jYmFyZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKaW5kZXggZjgyNTFhOS4uZDRmOTUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX2xwb3J0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlICJiZmFkX2ltLmgiCiAjaW5jbHVkZSAiYmZhX2Zjcy5oIgogI2luY2x1ZGUgImJmYV9mY2J1aWxkLmgiCiAjaW5jbHVkZSAiYmZhX2ZjLmgiCkBAIC0zMDAsNiArMzAxLDMxIEBACiAgKi8KIAogLyoKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19scG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSAoc3RydWN0IGJmYWRfcyAqKXBvcnQtPmZhYnJpYy0+ZmNzLT5iZmFkOworCXN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgICphZW5fZW50cnk7CisKKwliZmFkX2dldF9hZW5fZW50cnkoYmZhZCwgYWVuX2VudHJ5KTsKKwlpZiAoIWFlbl9lbnRyeSkKKwkJcmV0dXJuOworCisJYWVuX2VudHJ5LT5hZW5fZGF0YS5scG9ydC52Zl9pZCA9IHBvcnQtPmZhYnJpYy0+dmZfaWQ7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5scG9ydC5yb2xlcyA9IHBvcnQtPnBvcnRfY2ZnLnJvbGVzOworCWFlbl9lbnRyeS0+YWVuX2RhdGEubHBvcnQucHB3d24gPSBiZmFfZmNzX2xwb3J0X2dldF9wd3duKAorCQkJCQliZmFfZmNzX2dldF9iYXNlX3BvcnQocG9ydC0+ZmNzKSk7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5scG9ydC5scHd3biA9IGJmYV9mY3NfbHBvcnRfZ2V0X3B3d24ocG9ydCk7CisKKwkvKiBTZW5kIHRoZSBBRU4gbm90aWZpY2F0aW9uICovCisJYmZhZF9pbV9wb3N0X3ZlbmRvcl9ldmVudChhZW5fZW50cnksIGJmYWQsICsrcG9ydC0+ZmNzLT5mY3NfYWVuX3NlcSwKKwkJCQkgIEJGQV9BRU5fQ0FUX0xQT1JULCBldmVudCk7Cit9CisKKy8qCiAgKiBTZW5kIGEgTFMgcmVqZWN0CiAgKi8KIHN0YXRpYyB2b2lkCkBAIC01OTMsNiArNjE5LDcgQEAKIAlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJIkxvZ2ljYWwgcG9ydCBvbmxpbmU6IFdXTiA9ICVzIFJvbGUgPSAlc1xuIiwKIAkJbHB3d25fYnVmLCAiSW5pdGlhdG9yIik7CisJYmZhX2Zjc19scG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX09OTElORSk7CiAKIAliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfUE9SVF9PTkxJTkU7CiB9CkBAIC02MTEsMTQgKzYzOCwxNyBAQAogCiAJd3duMnN0cihscHd3bl9idWYsIGJmYV9mY3NfbHBvcnRfZ2V0X3B3d24ocG9ydCkpOwogCWlmIChiZmFfc21fY21wX3N0YXRlKHBvcnQtPmZhYnJpYywKLQkJCWJmYV9mY3NfZmFicmljX3NtX29ubGluZSkgPT0gQkZBX1RSVUUpCisJCQliZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpID09IEJGQV9UUlVFKSB7CiAJCUJGQV9MT0coS0VSTl9FUlIsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCSJMb2dpY2FsIHBvcnQgbG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5OiBXV04gPSAlcyBSb2xlID0gJXNcbiIsCiAJCWxwd3duX2J1ZiwgIkluaXRpYXRvciIpOwotCWVsc2UKKwkJYmZhX2Zjc19scG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1QpOworCX0gZWxzZSB7CiAJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkiTG9naWNhbCBwb3J0IHRha2VuIG9mZmxpbmU6IFdXTiA9ICVzIFJvbGUgPSAlc1xuIiwKIAkJbHB3d25fYnVmLCAiSW5pdGlhdG9yIik7CisJCWJmYV9mY3NfbHBvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9PRkZMSU5FKTsKKwl9CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKIAkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKSBxZTsKQEAgLTY3Niw2ICs3MDYsNyBAQAogCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkiTG9naWNhbCBwb3J0IGRlbGV0ZWQ6IFdXTiA9ICVzIFJvbGUgPSAlc1xuIiwKIAkJbHB3d25fYnVmLCAiSW5pdGlhdG9yIik7CisJYmZhX2Zjc19scG9ydF9hZW5fcG9zdChwb3J0LCBCRkFfTFBPUlRfQUVOX0RFTEVURSk7CiAKIAkvKiBCYXNlIHBvcnQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBPUyBkcml2ZXIgKi8KIAlpZiAocG9ydC0+dnBvcnQpIHsKQEAgLTk3Myw2ICsxMDA0LDcgQEAKIAlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJIk5ldyBsb2dpY2FsIHBvcnQgY3JlYXRlZDogV1dOID0gJXMgUm9sZSA9ICVzXG4iLAogCQlscHd3bl9idWYsICJJbml0aWF0b3IiKTsKKwliZmFfZmNzX2xwb3J0X2Flbl9wb3N0KGxwb3J0LCBCRkFfTFBPUlRfQUVOX05FVyk7CiAKIAliZmFfc21fc2V0X3N0YXRlKGxwb3J0LCBiZmFfZmNzX2xwb3J0X3NtX3VuaW5pdCk7CiAJYmZhX3NtX3NlbmRfZXZlbnQobHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUpOwpAQCAtNTU1OSw2ICs1NTkxLDMxIEBACiAgKiAgZmNzX3Zwb3J0X3ByaXZhdGUgRkNTIHZpcnR1YWwgcG9ydCBwcml2YXRlIGZ1bmN0aW9ucwogICovCiAvKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopcG9ydC0+ZmFicmljLT5mY3MtPmJmYWQ7CisJc3RydWN0IGJmYV9hZW5fZW50cnlfcyAgKmFlbl9lbnRyeTsKKworCWJmYWRfZ2V0X2Flbl9lbnRyeShiZmFkLCBhZW5fZW50cnkpOworCWlmICghYWVuX2VudHJ5KQorCQlyZXR1cm47CisKKwlhZW5fZW50cnktPmFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZW50cnktPmFlbl9kYXRhLmxwb3J0LnJvbGVzID0gcG9ydC0+cG9ydF9jZmcucm9sZXM7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5scG9ydC5wcHd3biA9IGJmYV9mY3NfbHBvcnRfZ2V0X3B3d24oCisJCQkJCWJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlhZW5fZW50cnktPmFlbl9kYXRhLmxwb3J0Lmxwd3duID0gYmZhX2Zjc19scG9ydF9nZXRfcHd3bihwb3J0KTsKKworCS8qIFNlbmQgdGhlIEFFTiBub3RpZmljYXRpb24gKi8KKwliZmFkX2ltX3Bvc3RfdmVuZG9yX2V2ZW50KGFlbl9lbnRyeSwgYmZhZCwgKytwb3J0LT5mY3MtPmZjc19hZW5fc2VxLAorCQkJCSAgQkZBX0FFTl9DQVRfTFBPUlQsIGV2ZW50KTsKK30KKworLyoKICAqIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCB0byBzZW5kIGEgRkRJU0MgY29tbWFuZC4KICAqLwogc3RhdGljIHZvaWQKQEAgLTU1ODUsOCArNTY0MiwxMSBAQAogCWNhc2UgRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEOiAvKiBieSBDaXNjbyAqLwogCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQogCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKLQkJZWxzZQorCQllbHNlIHsKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV04pOwogCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV04pOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBGQ19MU19SSlRfRVhQX0lOU1VGRl9SRVM6CkBAIC01NTk2LDExICs1NjU2LDE3IEBACiAJCSAqLwogCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPCBCRkFfRkNTX1ZQT1JUX01BWF9SRVRSSUVTKQogCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SKTsKLQkJZWxzZQorCQllbHNlIHsKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJQkZBX0xQT1JUX0FFTl9OUElWX0ZBQlJJQ19NQVgpOwogCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRCk7CisJCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgorCQlpZiAodnBvcnQtPmZkaXNjX3JldHJpZXMgPT0gMCkKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV04pOwogCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKaW5kZXggMmM1MTQ0NS4uNTI2MjhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3Jwb3J0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlICJiZmFkX2ltLmgiCiAjaW5jbHVkZSAiYmZhX2Zjcy5oIgogI2luY2x1ZGUgImJmYV9mY2J1aWxkLmgiCiAKQEAgLTIwNDEsNiArMjA0MiwzNSBAQAogfQogCiBzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gYmZhX3Jwb3J0X2Flbl9ldmVudCBldmVudCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyAqZGF0YSkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopcG9ydC0+ZmNzLT5iZmFkOworCXN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgICphZW5fZW50cnk7CisKKwliZmFkX2dldF9hZW5fZW50cnkoYmZhZCwgYWVuX2VudHJ5KTsKKwlpZiAoIWFlbl9lbnRyeSkKKwkJcmV0dXJuOworCisJaWYgKGV2ZW50ID09IEJGQV9SUE9SVF9BRU5fUU9TX1BSSU8pCisJCWFlbl9lbnRyeS0+YWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKwllbHNlIGlmIChldmVudCA9PSBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQpCisJCWFlbl9lbnRyeS0+YWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKworCWFlbl9lbnRyeS0+YWVuX2RhdGEucnBvcnQudmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZW50cnktPmFlbl9kYXRhLnJwb3J0LnBwd3duID0gYmZhX2Zjc19scG9ydF9nZXRfcHd3bigKKwkJCQkJYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHJwb3J0LT5mY3MpKTsKKwlhZW5fZW50cnktPmFlbl9kYXRhLnJwb3J0Lmxwd3duID0gYmZhX2Zjc19scG9ydF9nZXRfcHd3bihycG9ydC0+cG9ydCk7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5ycG9ydC5ycHd3biA9IHJwb3J0LT5wd3duOworCisJLyogU2VuZCB0aGUgQUVOIG5vdGlmaWNhdGlvbiAqLworCWJmYWRfaW1fcG9zdF92ZW5kb3JfZXZlbnQoYWVuX2VudHJ5LCBiZmFkLCArK3Jwb3J0LT5mY3MtPmZjc19hZW5fc2VxLAorCQkJCSAgQkZBX0FFTl9DQVRfUlBPUlQsIGV2ZW50KTsKK30KKworc3RhdGljIHZvaWQKIGJmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKIHsKIAlzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CkBAIC0yMDYzLDEwICsyMDkzLDEyIEBACiAKIAl3d24yc3RyKGxwd3duX2J1ZiwgYmZhX2Zjc19scG9ydF9nZXRfcHd3bihwb3J0KSk7CiAJd3duMnN0cihycHd3bl9idWYsIHJwb3J0LT5wd3duKTsKLQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkKKwlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkgewogCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJIlJlbW90ZSBwb3J0IChXV04gPSAlcykgb25saW5lIGZvciBsb2dpY2FsIHBvcnQgKFdXTiA9ICVzKVxuIiwKIAkJcnB3d25fYnVmLCBscHd3bl9idWYpOworCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX09OTElORSwgTlVMTCk7CisJfQogfQogCiBzdGF0aWMgdm9pZApAQCAtMjA4MywxNiArMjExNSwyMSBAQAogCXd3bjJzdHIobHB3d25fYnVmLCBiZmFfZmNzX2xwb3J0X2dldF9wd3duKHBvcnQpKTsKIAl3d24yc3RyKHJwd3duX2J1ZiwgcnBvcnQtPnB3d24pOwogCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSB7Ci0JCWlmIChiZmFfZmNzX2xwb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkgPT0gQkZBX1RSVUUpCisJCWlmIChiZmFfZmNzX2xwb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkgPT0gQkZBX1RSVUUpIHsKIAkJCUJGQV9MT0coS0VSTl9FUlIsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkJIlJlbW90ZSBwb3J0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yICIKIAkJCQkibG9naWNhbCBwb3J0IChXV04gPSAlcylcbiIsCiAJCQkJcnB3d25fYnVmLCBscHd3bl9idWYpOwotCQllbHNlCisJCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LAorCQkJCUJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVCwgTlVMTCk7CisJCX0gZWxzZSB7CiAJCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCQkiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBvZmZsaW5lZCBieSAiCiAJCQkJImxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpXG4iLAogCQkJCXJwd3duX2J1ZiwgbHB3d25fYnVmKTsKKwkJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsCisJCQkJQkZBX1JQT1JUX0FFTl9PRkZMSU5FLCBOVUxMKTsKKwkJfQogCX0KIAogCWlmIChiZmFfZmNzX2xwb3J0X2lzX2luaXRpYXRvcihwb3J0KSkgewpAQCAtMjM2Niw4ICsyNDAzLDExIEBACiAJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpCiB7CiAJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgYWVuX2RhdGE7CiAKIAliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwlhZW5fZGF0YS5wcml2LnFvcyA9IG5ld19xb3NfYXR0cjsKKwliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQsICZhZW5fZGF0YSk7CiB9CiAKIC8qCkBAIC0yMzkwLDggKzI0MzAsMTEgQEAKIAkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cikKIHsKIAlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopIGNiYXJnOworCXN0cnVjdCBiZmFfcnBvcnRfYWVuX2RhdGFfcyBhZW5fZGF0YTsKIAogCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWFlbl9kYXRhLnByaXYucW9zID0gbmV3X3Fvc19hdHRyOworCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fUU9TX1BSSU8sICZhZW5fZGF0YSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY2IuYwppbmRleCBlN2ZmZDgyLi5lYTI0ZDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMKQEAgLTQyLDExICs0MiwzNiBAQAogCQkJYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cyk7CiB9CiAKKy8qCisgKiBBY3Rpb25zIHRvIHJlc3BvbmQgUk1FIEludGVycnVwdCBmb3IgQ3Jvc3Nib3cgQVNJQzoKKyAqIC0gV3JpdGUgMSB0byBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICAgSU5UWCAtIGRvbmUgaW4gYmZhX2ludHgoKQorICogICAgICAgICAgICAgIE1TSVggLSBkb25lIGluIGJmYV9od2NiX3JzcHFfYWNrX21zaXgoKQorICogLSBVcGRhdGUgQ0kgKG9ubHkgaWYgbmV3IENJKQorICovCiBzdGF0aWMgdm9pZAotYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCitiZmFfaHdjYl9yc3BxX2Fja19tc2l4KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSwgdTMyIGNpKQogewogCXdyaXRlbChfX0hGTl9JTlRfUk1FX1EwIDw8IFJNRV9RX05VTShiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyksIHJzcHEpLAotCQkJYmZhLT5pb2NmYy5iZmFfcmVncy5pbnRyX3N0YXR1cyk7CisJCWJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMpOworCisJaWYgKGJmYV9yc3BxX2NpKGJmYSwgcnNwcSkgPT0gY2kpCisJCXJldHVybjsKKworCWJmYV9yc3BxX2NpKGJmYSwgcnNwcSkgPSBjaTsKKwl3cml0ZWwoY2ksIGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY2lbcnNwcV0pOworCW1taW93YigpOworfQorCit2b2lkCitiZmFfaHdjYl9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEsIHUzMiBjaSkKK3sKKwlpZiAoYmZhX3JzcHFfY2koYmZhLCByc3BxKSA9PSBjaSkKKwkJcmV0dXJuOworCisJYmZhX3JzcHFfY2koYmZhLCByc3BxKSA9IGNpOworCXdyaXRlbChjaSwgYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jaVtyc3BxXSk7CisJbW1pb3diKCk7CiB9CiAKIHZvaWQKQEAgLTE0OSw4ICsxNzQsMTMgQEAKIHZvaWQKIGJmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KQogewotCWJmYS0+aW9jZmMuaHdpZi5od19yZXFxX2FjayA9IGJmYV9od2NiX3JlcXFfYWNrX21zaXg7Ci0JYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeDsKKwlpZiAobXNpeCkgeworCQliZmEtPmlvY2ZjLmh3aWYuaHdfcmVxcV9hY2sgPSBiZmFfaHdjYl9yZXFxX2Fja19tc2l4OworCQliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2Fja19tc2l4OworCX0gZWxzZSB7CisJCWJmYS0+aW9jZmMuaHdpZi5od19yZXFxX2FjayA9IE5VTEw7CisJCWJmYS0+aW9jZmMuaHdpZi5od19yc3BxX2FjayA9IGJmYV9od2NiX3JzcHFfYWNrOworCX0KIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2N0LmMKaW5kZXggOTg5YmJjZS4uNjM3NTI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jCkBAIC02NCwxMyArNjQsMzYgQEAKIAl3cml0ZWwocjMyLCBiZmEtPmlvY2ZjLmJmYV9yZWdzLmNwZV9xX2N0cmxbcmVxcV0pOwogfQogCisvKgorICogQWN0aW9ucyB0byByZXNwb25kIFJNRSBJbnRlcnJ1cHQgZm9yIENhdGFwdWx0IEFTSUM6CisgKiAtIFdyaXRlIDEgdG8gSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAoSU5UeCBvbmx5IC0gZG9uZSBpbiBiZmFfaW50eCgpKQorICogLSBBY2tub3dsZWRnZSBieSB3cml0aW5nIHRvIFJNRSBRdWV1ZSBDb250cm9sIHJlZ2lzdGVyCisgKiAtIFVwZGF0ZSBDSQorICovCiB2b2lkCi1iZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCitiZmFfaHdjdF9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEsIHUzMiBjaSkKIHsKIAl1MzIJcjMyOwogCiAJcjMyID0gcmVhZGwoYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jdHJsW3JzcHFdKTsKIAl3cml0ZWwocjMyLCBiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2N0cmxbcnNwcV0pOworCisJYmZhX3JzcHFfY2koYmZhLCByc3BxKSA9IGNpOworCXdyaXRlbChjaSwgYmZhLT5pb2NmYy5iZmFfcmVncy5ybWVfcV9jaVtyc3BxXSk7CisJbW1pb3diKCk7Cit9CisKKy8qCisgKiBBY3Rpb25zIHRvIHJlc3BvbmQgUk1FIEludGVycnVwdCBmb3IgQ2F0YXB1bHQyIEFTSUM6CisgKiAtIFdyaXRlIDEgdG8gSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlciAoSU5UeCBvbmx5IC0gZG9uZSBpbiBiZmFfaW50eCgpKQorICogLSBVcGRhdGUgQ0kKKyAqLwordm9pZAorYmZhX2h3Y3QyX3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSwgdTMyIGNpKQoreworCWJmYV9yc3BxX2NpKGJmYSwgcnNwcSkgPSBjaTsKKwl3cml0ZWwoY2ksIGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY2lbcnNwcV0pOworCW1taW93YigpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCmluZGV4IGQ2YzJiZjMuLjFhYzVhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgogI2luY2x1ZGUgImJmYV9pb2MuaCIKICNpbmNsdWRlICJiZmlfcmVnLmgiCiAjaW5jbHVkZSAiYmZhX2RlZnMuaCIKQEAgLTQ1OCw2ICs0NTksNyBAQAogCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfT0spOwogCWJmYV9pb2NfZXZlbnRfbm90aWZ5KGlvYywgQkZBX0lPQ19FX0VOQUJMRUQpOwogCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLCAiSU9DIGVuYWJsZWRcbiIpOworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTAyLDYgKzUwNCw3IEBACiAJc3RydWN0IGJmYWRfcyAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopaW9jLT5iZmEtPmJmYWQ7CiAJYmZhX2ZzbV9zZW5kX2V2ZW50KCZpb2MtPmlvY3BmLCBJT0NQRl9FX0RJU0FCTEUpOwogCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLCAiSU9DIGRpc2FibGVkXG4iKTsKKwliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fRElTQUJMRSk7CiB9CiAKIC8qCkBAIC0xOTY2LDYgKzE5NjksNyBAQAogCiAJQkZBX0xPRyhLRVJOX0NSSVQsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCSJIZWFydCBCZWF0IG9mIElPQyBoYXMgZmFpbGVkXG4iKTsKKwliZmFfaW9jX2Flbl9wb3N0KGlvYywgQkZBX0lPQ19BRU5fSEJGQUlMKTsKIAogfQogCkBAIC0xOTgwLDYgKzE5ODQsNyBAQAogCUJGQV9MT0coS0VSTl9XQVJOSU5HLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkiUnVubmluZyBmaXJtd2FyZSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSAiCiAJCSJ3aXRoIHRoZSBkcml2ZXIgdmVyc2lvblxuIik7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gpOwogfQogCiBiZmFfc3RhdHVzX3QKQEAgLTI2NzksNiArMjY4NCw0MyBAQAogfQogCiAvKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3ZvaWQKK2JmYV9pb2NfYWVuX3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSAoc3RydWN0IGJmYWRfcyAqKWlvYy0+YmZhLT5iZmFkOworCXN0cnVjdCBiZmFfYWVuX2VudHJ5X3MJKmFlbl9lbnRyeTsKKwllbnVtIGJmYV9pb2NfdHlwZV9lIGlvY190eXBlOworCisJYmZhZF9nZXRfYWVuX2VudHJ5KGJmYWQsIGFlbl9lbnRyeSk7CisJaWYgKCFhZW5fZW50cnkpCisJCXJldHVybjsKKworCWlvY190eXBlID0gYmZhX2lvY19nZXRfdHlwZShpb2MpOworCXN3aXRjaCAoaW9jX3R5cGUpIHsKKwljYXNlIEJGQV9JT0NfVFlQRV9GQzoKKwkJYWVuX2VudHJ5LT5hZW5fZGF0YS5pb2MucHd3biA9IGlvYy0+YXR0ci0+cHd3bjsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfRkNvRToKKwkJYWVuX2VudHJ5LT5hZW5fZGF0YS5pb2MucHd3biA9IGlvYy0+YXR0ci0+cHd3bjsKKwkJYWVuX2VudHJ5LT5hZW5fZGF0YS5pb2MubWFjID0gYmZhX2lvY19nZXRfbWFjKGlvYyk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19UWVBFX0xMOgorCQlhZW5fZW50cnktPmFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTihpb2NfdHlwZSAhPSBCRkFfSU9DX1RZUEVfRkMpOworCQlicmVhazsKKwl9CisKKwkvKiBTZW5kIHRoZSBBRU4gbm90aWZpY2F0aW9uICovCisJYWVuX2VudHJ5LT5hZW5fZGF0YS5pb2MuaW9jX3R5cGUgPSBpb2NfdHlwZTsKKwliZmFkX2ltX3Bvc3RfdmVuZG9yX2V2ZW50KGFlbl9lbnRyeSwgYmZhZCwgKytpb2MtPmlvY19hZW5fc2VxLAorCQkJCSAgQkZBX0FFTl9DQVRfSU9DLCBldmVudCk7Cit9CisKKy8qCiAgKiBSZXRyaWV2ZSBzYXZlZCBmaXJtd2FyZSB0cmFjZSBmcm9tIGEgcHJpb3IgSU9DIGZhaWx1cmUuCiAgKi8KIGJmYV9zdGF0dXNfdApAQCAtMjg3OSw2ICsyOTIxLDEwIEBACiB7CiAJaWYgKGJmYV9pb2NfZ2V0X3R5cGUoaW9jKSA9PSBCRkFfSU9DX1RZUEVfTEwpCiAJCXJldHVybjsKKwlpZiAoaW9jLT5hdHRyLT5ud3duID09IDApCisJCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9JTlZBTElEX05XV04pOworCWlmIChpb2MtPmF0dHItPnB3d24gPT0gMCkKKwkJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0lOVkFMSURfUFdXTik7CiB9CiAKIC8qCkBAIC0zNDQzLDYgKzM0ODksNTQgQEAKIH0KIAogLyoKKyAqIFNGUCdzIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24gcG9zdCB0byBBRU4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9zZnBfc2NuX2Flbl9wb3N0KHN0cnVjdCBiZmFfc2ZwX3MgKnNmcCwgc3RydWN0IGJmaV9zZnBfc2NuX3MgKnJzcCkKK3sKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilzZnAtPmlvYy0+YmZhLT5iZmFkOworCXN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgICphZW5fZW50cnk7CisJZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgYWVuX2V2dCA9IDA7CisKKwliZmFfdHJjKHNmcCwgKCgodTY0KXJzcC0+cG9tbHZsKSA8PCAxNikgfCAoKCh1NjQpcnNwLT5zZnBpZCkgPDwgOCkgfAorCQkgICAgICAoKHU2NClyc3AtPmV2ZW50KSk7CisKKwliZmFkX2dldF9hZW5fZW50cnkoYmZhZCwgYWVuX2VudHJ5KTsKKwlpZiAoIWFlbl9lbnRyeSkKKwkJcmV0dXJuOworCisJYWVuX2VudHJ5LT5hZW5fZGF0YS5wb3J0LmlvY190eXBlID0gYmZhX2lvY19nZXRfdHlwZShzZnAtPmlvYyk7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5wb3J0LnB3d24gPSBzZnAtPmlvYy0+YXR0ci0+cHd3bjsKKwlhZW5fZW50cnktPmFlbl9kYXRhLnBvcnQubWFjID0gYmZhX2lvY19nZXRfbWFjKHNmcC0+aW9jKTsKKworCXN3aXRjaCAocnNwLT5ldmVudCkgeworCWNhc2UgQkZBX1NGUF9TQ05fSU5TRVJURUQ6CisJCWFlbl9ldnQgPSBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfU0ZQX1NDTl9SRU1PVkVEOgorCQlhZW5fZXZ0ID0gQkZBX1BPUlRfQUVOX1NGUF9SRU1PVkU7CisJCWJyZWFrOworCWNhc2UgQkZBX1NGUF9TQ05fRkFJTEVEOgorCQlhZW5fZXZ0ID0gQkZBX1BPUlRfQUVOX1NGUF9BQ0NFU1NfRVJST1I7CisJCWJyZWFrOworCWNhc2UgQkZBX1NGUF9TQ05fVU5TVVBQT1JUOgorCQlhZW5fZXZ0ID0gQkZBX1BPUlRfQUVOX1NGUF9VTlNVUFBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1NGUF9TQ05fUE9NOgorCQlhZW5fZXZ0ID0gQkZBX1BPUlRfQUVOX1NGUF9QT007CisJCWFlbl9lbnRyeS0+YWVuX2RhdGEucG9ydC5sZXZlbCA9IHJzcC0+cG9tbHZsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfdHJjKHNmcCwgcnNwLT5ldmVudCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJLyogU2VuZCB0aGUgQUVOIG5vdGlmaWNhdGlvbiAqLworCWJmYWRfaW1fcG9zdF92ZW5kb3JfZXZlbnQoYWVuX2VudHJ5LCBiZmFkLCArK3NmcC0+aW9jLT5pb2NfYWVuX3NlcSwKKwkJCQkgIEJGQV9BRU5fQ0FUX1BPUlQsIGFlbl9ldnQpOworfQorCisvKgogICoJU0ZQIGdldCBkYXRhIHNlbmQKICAqLwogc3RhdGljIHZvaWQKQEAgLTM0ODIsNiArMzU3Niw1MCBAQAogfQogCiAvKgorICoJU0ZQIHNjbiBoYW5kbGVyCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfc2ZwX3NjbihzdHJ1Y3QgYmZhX3NmcF9zICpzZnAsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbXNnKQoreworCXN0cnVjdCBiZmlfc2ZwX3Njbl9zICpyc3AgPSAoc3RydWN0IGJmaV9zZnBfc2NuX3MgKikgbXNnOworCisJc3dpdGNoIChyc3AtPmV2ZW50KSB7CisJY2FzZSBCRkFfU0ZQX1NDTl9JTlNFUlRFRDoKKwkJc2ZwLT5zdGF0ZSA9IEJGQV9TRlBfU1RBVEVfSU5TRVJURUQ7CisJCXNmcC0+ZGF0YV92YWxpZCA9IDA7CisJCWJmYV9zZnBfc2NuX2Flbl9wb3N0KHNmcCwgcnNwKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfU0ZQX1NDTl9SRU1PVkVEOgorCQlzZnAtPnN0YXRlID0gQkZBX1NGUF9TVEFURV9SRU1PVkVEOworCQlzZnAtPmRhdGFfdmFsaWQgPSAwOworCQliZmFfc2ZwX3Njbl9hZW5fcG9zdChzZnAsIHJzcCk7CisJCSBicmVhazsKKwljYXNlIEJGQV9TRlBfU0NOX0ZBSUxFRDoKKwkJc2ZwLT5zdGF0ZSA9IEJGQV9TRlBfU1RBVEVfRkFJTEVEOworCQlzZnAtPmRhdGFfdmFsaWQgPSAwOworCQliZmFfc2ZwX3Njbl9hZW5fcG9zdChzZnAsIHJzcCk7CisJCWJyZWFrOworCWNhc2UgQkZBX1NGUF9TQ05fVU5TVVBQT1JUOgorCQlzZnAtPnN0YXRlID0gQkZBX1NGUF9TVEFURV9VTlNVUFBPUlQ7CisJCWJmYV9zZnBfc2NuX2Flbl9wb3N0KHNmcCwgcnNwKTsKKwkJaWYgKCFzZnAtPmxvY2spCisJCQliZmFfc2ZwX2dldGRhdGEoc2ZwLCBCRklfU0ZQX01FTV9BTEwpOworCQlicmVhazsKKwljYXNlIEJGQV9TRlBfU0NOX1BPTToKKwkJYmZhX3NmcF9zY25fYWVuX3Bvc3Qoc2ZwLCByc3ApOworCQlicmVhazsKKwljYXNlIEJGQV9TRlBfU0NOX1ZBTElEOgorCQlzZnAtPnN0YXRlID0gQkZBX1NGUF9TVEFURV9WQUxJRDsKKwkJaWYgKCFzZnAtPmxvY2spCisJCQliZmFfc2ZwX2dldGRhdGEoc2ZwLCBCRklfU0ZQX01FTV9BTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfdHJjKHNmcCwgcnNwLT5ldmVudCk7CisJCVdBUk5fT04oMSk7CisJfQorfQorCisvKgogICogU0ZQIHNob3cgY29tcGxldGUKICAqLwogc3RhdGljIHZvaWQKQEAgLTM2NDUsNyArMzc4Myw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCRklfU0ZQX0kySF9TQ046Ci0JCWJmYV90cmMoc2ZwLCBtc2ctPm1oLm1zZ19pZCk7CisJCWJmYV9zZnBfc2NuKHNmcCwgbXNnKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMzgzOCw2ICszOTc2LDI2IEBACiAJQkZBX1JPVU5EVVAoMHgwMTAwMDAgKyBzaXplb2Yoc3RydWN0IGJmYV9tZmdfYmxvY2tfcyksIEJGQV9GTEFTSF9TRUdfU1opCiAKIHN0YXRpYyB2b2lkCitiZmFfZmxhc2hfYWVuX2F1ZGl0X3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmYV9hdWRpdF9hZW5fZXZlbnQgZXZlbnQsCisJCQlpbnQgaW5zdCwgaW50IHR5cGUpCit7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IChzdHJ1Y3QgYmZhZF9zICopaW9jLT5iZmEtPmJmYWQ7CisJc3RydWN0IGJmYV9hZW5fZW50cnlfcyAgKmFlbl9lbnRyeTsKKworCWJmYWRfZ2V0X2Flbl9lbnRyeShiZmFkLCBhZW5fZW50cnkpOworCWlmICghYWVuX2VudHJ5KQorCQlyZXR1cm47CisKKwlhZW5fZW50cnktPmFlbl9kYXRhLmF1ZGl0LnB3d24gPSBpb2MtPmF0dHItPnB3d247CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5hdWRpdC5wYXJ0aXRpb25faW5zdCA9IGluc3Q7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5hdWRpdC5wYXJ0aXRpb25fdHlwZSA9IHR5cGU7CisKKwkvKiBTZW5kIHRoZSBBRU4gbm90aWZpY2F0aW9uICovCisJYmZhZF9pbV9wb3N0X3ZlbmRvcl9ldmVudChhZW5fZW50cnksIGJmYWQsICsraW9jLT5pb2NfYWVuX3NlcSwKKwkJCQkgIEJGQV9BRU5fQ0FUX0FVRElULCBldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkCiBiZmFfZmxhc2hfY2Ioc3RydWN0IGJmYV9mbGFzaF9zICpmbGFzaCkKIHsKIAlmbGFzaC0+b3BfYnVzeSA9IDA7CkBAIC0zOTc4LDYgKzQxMzYsNyBAQAogCQlzdHJ1Y3QgYmZpX2ZsYXNoX2VyYXNlX3JzcF9zICplcmFzZTsKIAkJc3RydWN0IGJmaV9mbGFzaF93cml0ZV9yc3BfcyAqd3JpdGU7CiAJCXN0cnVjdCBiZmlfZmxhc2hfcmVhZF9yc3BfcyAqcmVhZDsKKwkJc3RydWN0IGJmaV9mbGFzaF9ldmVudF9zICpldmVudDsKIAkJc3RydWN0IGJmaV9tYm1zZ19zICAgKm1zZzsKIAl9IG07CiAKQEAgLTQwNjEsOCArNDIyMCwxOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgQkZJX0ZMQVNIX0kySF9CT09UX1ZFUl9SU1A6CisJCWJyZWFrOwogCWNhc2UgQkZJX0ZMQVNIX0kySF9FVkVOVDoKLQkJYmZhX3RyYyhmbGFzaCwgbXNnLT5taC5tc2dfaWQpOworCQlzdGF0dXMgPSBiZTMyX3RvX2NwdShtLmV2ZW50LT5zdGF0dXMpOworCQliZmFfdHJjKGZsYXNoLCBzdGF0dXMpOworCQlpZiAoc3RhdHVzID09IEJGQV9TVEFUVVNfQkFEX0ZXQ0ZHKQorCQkJYmZhX2lvY19hZW5fcG9zdChmbGFzaC0+aW9jLCBCRkFfSU9DX0FFTl9GV0NGR19FUlJPUik7CisJCWVsc2UgaWYgKHN0YXR1cyA9PSBCRkFfU1RBVFVTX0lOVkFMSURfVkVORE9SKSB7CisJCQl1MzIgcGFyYW07CisJCQlwYXJhbSA9IGJlMzJfdG9fY3B1KG0uZXZlbnQtPnBhcmFtKTsKKwkJCWJmYV90cmMoZmxhc2gsIHBhcmFtKTsKKwkJCWJmYV9pb2NfYWVuX3Bvc3QoZmxhc2gtPmlvYywKKwkJCQlCRkFfSU9DX0FFTl9JTlZBTElEX1ZFTkRPUik7CisJCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDIwNCw2ICs0Mzc0LDggQEAKIAlmbGFzaC0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKIAogCWJmYV9mbGFzaF9lcmFzZV9zZW5kKGZsYXNoKTsKKwliZmFfZmxhc2hfYWVuX2F1ZGl0X3Bvc3QoZmxhc2gtPmlvYywgQkZBX0FVRElUX0FFTl9GTEFTSF9FUkFTRSwKKwkJCQlpbnN0YW5jZSwgdHlwZSk7CiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CiAKQEAgLTU0MTYsMyArNTU4OCwzOTYgQEAKIAkJV0FSTl9PTigxKTsKIAl9CiB9CisKKy8qCisgKglEQ09ORiBtb2R1bGUgc3BlY2lmaWMKKyAqLworCitCRkFfTU9EVUxFKGRjb25mKTsKKworLyoKKyAqIERDT05GIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gYmZhX2Rjb25mX2V2ZW50IHsKKwlCRkFfRENPTkZfU01fSU5JVAkJPSAxLAkvKiBkY29uZiBJbml0ICovCisJQkZBX0RDT05GX1NNX0ZMQVNIX0NPTVAJCT0gMiwJLyogcmVhZC93cml0ZSB0byBmbGFzaCAqLworCUJGQV9EQ09ORl9TTV9XUgkJCT0gMywJLyogYmluZGluZyBjaGFuZ2UsIG1hcCAqLworCUJGQV9EQ09ORl9TTV9USU1FT1VUCQk9IDQsCS8qIFN0YXJ0IHRpbWVyICovCisJQkZBX0RDT05GX1NNX0VYSVQJCT0gNSwJLyogZXhpdCBkY29uZiBtb2R1bGUgKi8KKwlCRkFfRENPTkZfU01fSU9DRElTQUJMRQkJPSA2LAkvKiBJT0MgZGlzYWJsZSBldmVudCAqLworfTsKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBEQ09ORiBzdGF0ZSBtYWNoaW5lICovCitzdGF0aWMgdm9pZCBiZmFfZGNvbmZfc21fdW5pbml0KHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLAorCQkJCWVudW0gYmZhX2Rjb25mX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9kY29uZl9zbV9mbGFzaF9yZWFkKHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLAorCQkJCWVudW0gYmZhX2Rjb25mX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9kY29uZl9zbV9yZWFkeShzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZiwKKwkJCQllbnVtIGJmYV9kY29uZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZGNvbmZfc21fZGlydHkoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYsCisJCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Rjb25mX3NtX3N5bmMoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYsCisJCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Rjb25mX3NtX2ZpbmFsX3N5bmMoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYsCisJCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Rjb25mX3NtX2lvY2Rvd25fZGlydHkoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYsCisJCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgdm9pZCBiZmFfZGNvbmZfY2Jmbih2b2lkICpkY29uZiwgYmZhX3N0YXR1c190IHN0YXR1cyk7CitzdGF0aWMgdm9pZCBiZmFfZGNvbmZfdGltZXIodm9pZCAqY2JhcmcpOworc3RhdGljIGJmYV9zdGF0dXNfdCBiZmFfZGNvbmZfZmxhc2hfd3JpdGUoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYpOworc3RhdGljIHZvaWQgYmZhX2Rjb25mX2luaXRfY2Iodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworLyoKKyAqIEJlZ2luaW5nIHN0YXRlIG9mIGRjb25mIG1vZHVsZS4gV2FpdGluZyBmb3IgYW4gZXZlbnQgdG8gc3RhcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZGNvbmZfc21fdW5pbml0KHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLCBlbnVtIGJmYV9kY29uZl9ldmVudCBldmVudCkKK3sKKwliZmFfc3RhdHVzX3QgYmZhX3N0YXR1czsKKwliZmFfdHJjKGRjb25mLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9EQ09ORl9TTV9JTklUOgorCQlpZiAoZGNvbmYtPm1pbl9jZmcpIHsKKwkJCWJmYV90cmMoZGNvbmYtPmJmYSwgZGNvbmYtPm1pbl9jZmcpOworCQkJcmV0dXJuOworCQl9CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9mbGFzaF9yZWFkKTsKKwkJZGNvbmYtPmZsYXNoZG9uZSA9IEJGQV9GQUxTRTsKKwkJYmZhX3RyYyhkY29uZi0+YmZhLCBkY29uZi0+Zmxhc2hkb25lKTsKKwkJYmZhX3N0YXR1cyA9IGJmYV9mbGFzaF9yZWFkX3BhcnQoQkZBX0ZMQVNIKGRjb25mLT5iZmEpLAorCQkJCQlCRkFfRkxBU0hfUEFSVF9EUlYsIGRjb25mLT5pbnN0YW5jZSwKKwkJCQkJZGNvbmYtPmRjb25mLAorCQkJCQlzaXplb2Yoc3RydWN0IGJmYV9kY29uZl9zKSwgMCwKKwkJCQkJYmZhX2Rjb25mX2luaXRfY2IsIGRjb25mLT5iZmEpOworCQlpZiAoYmZhX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCQliZmFfZGNvbmZfaW5pdF9jYihkY29uZi0+YmZhLCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCQliZmFfc21fc2V0X3N0YXRlKGRjb25mLCBiZmFfZGNvbmZfc21fdW5pbml0KTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIEJGQV9EQ09ORl9TTV9FWElUOgorCQlkY29uZi0+Zmxhc2hkb25lID0gQkZBX1RSVUU7CisJY2FzZSBCRkFfRENPTkZfU01fSU9DRElTQUJMRToKKwljYXNlIEJGQV9EQ09ORl9TTV9XUjoKKwljYXNlIEJGQV9EQ09ORl9TTV9GTEFTSF9DT01QOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZGNvbmYtPmJmYSwgZXZlbnQpOworCX0KK30KKworLyoKKyAqIFJlYWQgZmxhc2ggZm9yIGRjb25mIGVudHJpZXMgYW5kIG1ha2UgYSBjYWxsIGJhY2sgdG8gdGhlIGRyaXZlciBvbmNlIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZGNvbmZfc21fZmxhc2hfcmVhZChzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZiwKKwkJCWVudW0gYmZhX2Rjb25mX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZGNvbmYtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0RDT05GX1NNX0ZMQVNIX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9yZWFkeSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9yZWFkeSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX0VYSVQ6CisJCWRjb25mLT5mbGFzaGRvbmUgPSBCRkFfVFJVRTsKKwkJYmZhX3RyYyhkY29uZi0+YmZhLCBkY29uZi0+Zmxhc2hkb25lKTsKKwljYXNlIEJGQV9EQ09ORl9TTV9JT0NESVNBQkxFOgorCQliZmFfc21fc2V0X3N0YXRlKGRjb25mLCBiZmFfZGNvbmZfc21fdW5pbml0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGRjb25mLT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBEQ09ORiBNb2R1bGUgaXMgaW4gcmVhZHkgc3RhdGUuIEhhcyBjb21wbGV0ZWQgdGhlIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Rjb25mX3NtX3JlYWR5KHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLCBlbnVtIGJmYV9kY29uZl9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGRjb25mLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9EQ09ORl9TTV9XUjoKKwkJYmZhX3RpbWVyX3N0YXJ0KGRjb25mLT5iZmEsICZkY29uZi0+dGltZXIsCisJCQliZmFfZGNvbmZfdGltZXIsIGRjb25mLCBCRkFfRENPTkZfVVBEQVRFX1RPVik7CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9kaXJ0eSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX0VYSVQ6CisJCWRjb25mLT5mbGFzaGRvbmUgPSBCRkFfVFJVRTsKKwkJYmZhX3RyYyhkY29uZi0+YmZhLCBkY29uZi0+Zmxhc2hkb25lKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShkY29uZiwgYmZhX2Rjb25mX3NtX3VuaW5pdCk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX0lOSVQ6CisJY2FzZSBCRkFfRENPTkZfU01fSU9DRElTQUJMRToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGRjb25mLT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBlbnRyaWVzIGFyZSBkaXJ0eSwgd3JpdGUgYmFjayB0byB0aGUgZmxhc2guCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9zbV9kaXJ0eShzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZiwgZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhkY29uZi0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRENPTkZfU01fVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShkY29uZiwgYmZhX2Rjb25mX3NtX3N5bmMpOworCQliZmFfZGNvbmZfZmxhc2hfd3JpdGUoZGNvbmYpOworCQlicmVhazsKKwljYXNlIEJGQV9EQ09ORl9TTV9XUjoKKwkJYmZhX3RpbWVyX3N0b3AoJmRjb25mLT50aW1lcik7CisJCWJmYV90aW1lcl9zdGFydChkY29uZi0+YmZhLCAmZGNvbmYtPnRpbWVyLAorCQkJYmZhX2Rjb25mX3RpbWVyLCBkY29uZiwgQkZBX0RDT05GX1VQREFURV9UT1YpOworCQlicmVhazsKKwljYXNlIEJGQV9EQ09ORl9TTV9FWElUOgorCQliZmFfdGltZXJfc3RvcCgmZGNvbmYtPnRpbWVyKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGRjb25mLT5iZmEsICZkY29uZi0+dGltZXIsCisJCQliZmFfZGNvbmZfdGltZXIsIGRjb25mLCBCRkFfRENPTkZfVVBEQVRFX1RPVik7CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9maW5hbF9zeW5jKTsKKwkJYmZhX2Rjb25mX2ZsYXNoX3dyaXRlKGRjb25mKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfRENPTkZfU01fRkxBU0hfQ09NUDoKKwkJYnJlYWs7CisJY2FzZSBCRkFfRENPTkZfU01fSU9DRElTQUJMRToKKwkJYmZhX3RpbWVyX3N0b3AoJmRjb25mLT50aW1lcik7CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9pb2Nkb3duX2RpcnR5KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGRjb25mLT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBTeW5jIHRoZSBkY29uZiBlbnRyaWVzIHRvIHRoZSBmbGFzaC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9zbV9maW5hbF9zeW5jKHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLAorCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhkY29uZi0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRENPTkZfU01fSU9DRElTQUJMRToKKwljYXNlIEJGQV9EQ09ORl9TTV9GTEFTSF9DT01QOgorCQliZmFfdGltZXJfc3RvcCgmZGNvbmYtPnRpbWVyKTsKKwljYXNlIEJGQV9EQ09ORl9TTV9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKGRjb25mLCBiZmFfZGNvbmZfc21fdW5pbml0KTsKKwkJZGNvbmYtPmZsYXNoZG9uZSA9IEJGQV9UUlVFOworCQliZmFfdHJjKGRjb25mLT5iZmEsIGRjb25mLT5mbGFzaGRvbmUpOworCQliZmFfaW9jX2Rpc2FibGUoJmRjb25mLT5iZmEtPmlvYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChkY29uZi0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Rjb25mX3NtX3N5bmMoc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYsIGVudW0gYmZhX2Rjb25mX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZGNvbmYtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0RDT05GX1NNX0ZMQVNIX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9yZWFkeSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX1dSOgorCQliZmFfdGltZXJfc3RhcnQoZGNvbmYtPmJmYSwgJmRjb25mLT50aW1lciwKKwkJCWJmYV9kY29uZl90aW1lciwgZGNvbmYsIEJGQV9EQ09ORl9VUERBVEVfVE9WKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShkY29uZiwgYmZhX2Rjb25mX3NtX2RpcnR5KTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfRENPTkZfU01fRVhJVDoKKwkJYmZhX3RpbWVyX3N0YXJ0KGRjb25mLT5iZmEsICZkY29uZi0+dGltZXIsCisJCQliZmFfZGNvbmZfdGltZXIsIGRjb25mLCBCRkFfRENPTkZfVVBEQVRFX1RPVik7CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9maW5hbF9zeW5jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfRENPTkZfU01fSU9DRElTQUJMRToKKwkJYmZhX3NtX3NldF9zdGF0ZShkY29uZiwgYmZhX2Rjb25mX3NtX2lvY2Rvd25fZGlydHkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZGNvbmYtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9zbV9pb2Nkb3duX2RpcnR5KHN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mLAorCQkJZW51bSBiZmFfZGNvbmZfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhkY29uZi0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRENPTkZfU01fSU5JVDoKKwkJYmZhX3RpbWVyX3N0YXJ0KGRjb25mLT5iZmEsICZkY29uZi0+dGltZXIsCisJCQliZmFfZGNvbmZfdGltZXIsIGRjb25mLCBCRkFfRENPTkZfVVBEQVRFX1RPVik7CisJCWJmYV9zbV9zZXRfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9kaXJ0eSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX0VYSVQ6CisJCWRjb25mLT5mbGFzaGRvbmUgPSBCRkFfVFJVRTsKKwkJYmZhX3NtX3NldF9zdGF0ZShkY29uZiwgYmZhX2Rjb25mX3NtX3VuaW5pdCk7CisJCWJyZWFrOworCWNhc2UgQkZBX0RDT05GX1NNX0lPQ0RJU0FCTEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChkY29uZi0+YmZhLCBldmVudCk7CisJfQorfQorCisvKgorICogQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRFJWX0NGRyBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZGNvbmZfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAorCQkgIHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfbWVtX2t2YV9zICpkY29uZl9rdmEgPSBCRkFfTUVNX0RDT05GX0tWQShiZmEpOworCisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCWJmYV9tZW1fa3ZhX3NldHVwKG1lbWluZm8sIGRjb25mX2t2YSwKKwkJCQlzaXplb2Yoc3RydWN0IGJmYV9kY29uZl9oZHJfcykpOworCWVsc2UKKwkJYmZhX21lbV9rdmFfc2V0dXAobWVtaW5mbywgZGNvbmZfa3ZhLAorCQkJCXNpemVvZihzdHJ1Y3QgYmZhX2Rjb25mX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mID0gQkZBX0RDT05GX01PRChiZmEpOworCisJZGNvbmYtPmJmYWQgPSBiZmFkOworCWRjb25mLT5iZmEgPSBiZmE7CisJZGNvbmYtPmluc3RhbmNlID0gYmZhLT5pb2MucG9ydF9pZDsKKwliZmFfdHJjKGJmYSwgZGNvbmYtPmluc3RhbmNlKTsKKworCWRjb25mLT5kY29uZiA9IChzdHJ1Y3QgYmZhX2Rjb25mX3MgKikgYmZhX21lbV9rdmFfY3VycChkY29uZik7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpIHsKKwkJYmZhX21lbV9rdmFfY3VycChkY29uZikgKz0gc2l6ZW9mKHN0cnVjdCBiZmFfZGNvbmZfaGRyX3MpOworCQlkY29uZi0+bWluX2NmZyA9IEJGQV9UUlVFOworCQkvKgorCQkgKiBTZXQgdGhlIGZsYXNoZG9uZSBmbGFnIHRvIFRSVUUgZXhwbGljaXRseSBhcyBubyBmbGFzaAorCQkgKiB3cml0ZSB3aWxsIGhhcHBlbiBpbiBtaW5fY2ZnIG1vZGUuCisJCSAqLworCQlkY29uZi0+Zmxhc2hkb25lID0gQkZBX1RSVUU7CisJfSBlbHNlIHsKKwkJZGNvbmYtPm1pbl9jZmcgPSBCRkFfRkFMU0U7CisJCWJmYV9tZW1fa3ZhX2N1cnAoZGNvbmYpICs9IHNpemVvZihzdHJ1Y3QgYmZhX2Rjb25mX3MpOworCX0KKworCWJmYV9kY29uZl9yZWFkX2RhdGFfdmFsaWQoYmZhKSA9IEJGQV9GQUxTRTsKKwliZmFfc21fc2V0X3N0YXRlKGRjb25mLCBiZmFfZGNvbmZfc21fdW5pbml0KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9pbml0X2NiKHZvaWQgKmFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9IGFyZzsKKwlzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZiA9IEJGQV9EQ09ORl9NT0QoYmZhKTsKKworCWRjb25mLT5mbGFzaGRvbmUgPSBCRkFfVFJVRTsKKwliZmFfdHJjKGJmYSwgZGNvbmYtPmZsYXNoZG9uZSk7CisJYmZhX2lvY2ZjX2NiX2Rjb25mX21vZGluaXQoYmZhLCBzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfZGNvbmZfcmVhZF9kYXRhX3ZhbGlkKGJmYSkgPSBCRkFfVFJVRTsKKwkJaWYgKGRjb25mLT5kY29uZi0+aGRyLnNpZ25hdHVyZSAhPSBCRklfRENPTkZfU0lHTkFUVVJFKQorCQkJZGNvbmYtPmRjb25mLT5oZHIuc2lnbmF0dXJlID0gQkZJX0RDT05GX1NJR05BVFVSRTsKKwkJaWYgKGRjb25mLT5kY29uZi0+aGRyLnZlcnNpb24gIT0gQkZJX0RDT05GX1ZFUlNJT04pCisJCQlkY29uZi0+ZGNvbmYtPmhkci52ZXJzaW9uID0gQkZJX0RDT05GX1ZFUlNJT047CisJfQorCWJmYV9zbV9zZW5kX2V2ZW50KGRjb25mLCBCRkFfRENPTkZfU01fRkxBU0hfQ09NUCk7Cit9CisKK3ZvaWQKK2JmYV9kY29uZl9tb2Rpbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mID0gQkZBX0RDT05GX01PRChiZmEpOworCWJmYV9zbV9zZW5kX2V2ZW50KGRjb25mLCBCRkFfRENPTkZfU01fSU5JVCk7Cit9CitzdGF0aWMgdm9pZAorYmZhX2Rjb25mX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2Rjb25mX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGJmYV9kY29uZl90aW1lcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZiA9IGNiYXJnOworCWJmYV9zbV9zZW5kX2V2ZW50KGRjb25mLCBCRkFfRENPTkZfU01fVElNRU9VVCk7Cit9CitzdGF0aWMgdm9pZAorYmZhX2Rjb25mX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYgPSBCRkFfRENPTkZfTU9EKGJmYSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZGNvbmYsIEJGQV9EQ09ORl9TTV9JT0NESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9kY29uZl9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYV9kY29uZl9mbGFzaF93cml0ZShzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zICpkY29uZikKK3sKKwliZmFfc3RhdHVzX3QgYmZhX3N0YXR1czsKKwliZmFfdHJjKGRjb25mLT5iZmEsIDApOworCisJYmZhX3N0YXR1cyA9IGJmYV9mbGFzaF91cGRhdGVfcGFydChCRkFfRkxBU0goZGNvbmYtPmJmYSksCisJCQkJQkZBX0ZMQVNIX1BBUlRfRFJWLCBkY29uZi0+aW5zdGFuY2UsCisJCQkJZGNvbmYtPmRjb25mLCAgc2l6ZW9mKHN0cnVjdCBiZmFfZGNvbmZfcyksIDAsCisJCQkJYmZhX2Rjb25mX2NiZm4sIGRjb25mKTsKKwlpZiAoYmZhX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKQorCQlXQVJOX09OKGJmYV9zdGF0dXMpOworCWJmYV90cmMoZGNvbmYtPmJmYSwgYmZhX3N0YXR1cyk7CisKKwlyZXR1cm4gYmZhX3N0YXR1czsKK30KKworYmZhX3N0YXR1c190CitiZmFfZGNvbmZfdXBkYXRlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mID0gQkZBX0RDT05GX01PRChiZmEpOworCWJmYV90cmMoZGNvbmYtPmJmYSwgMCk7CisJaWYgKGJmYV9zbV9jbXBfc3RhdGUoZGNvbmYsIGJmYV9kY29uZl9zbV9pb2Nkb3duX2RpcnR5KSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRkFJTEVEOworCisJaWYgKGRjb25mLT5taW5fY2ZnKSB7CisJCWJmYV90cmMoZGNvbmYtPmJmYSwgZGNvbmYtPm1pbl9jZmcpOworCQlyZXR1cm4gQkZBX1NUQVRVU19GQUlMRUQ7CisJfQorCisJYmZhX3NtX3NlbmRfZXZlbnQoZGNvbmYsIEJGQV9EQ09ORl9TTV9XUik7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZGNvbmZfY2Jmbih2b2lkICphcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJc3RydWN0IGJmYV9kY29uZl9tb2RfcyAqZGNvbmYgPSBhcmc7CisJV0FSTl9PTihzdGF0dXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGRjb25mLCBCRkFfRENPTkZfU01fRkxBU0hfQ09NUCk7Cit9CisKK3ZvaWQKK2JmYV9kY29uZl9tb2RleGl0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZGNvbmZfbW9kX3MgKmRjb25mID0gQkZBX0RDT05GX01PRChiZmEpOworCUJGQV9EQ09ORl9NT0QoYmZhKS0+Zmxhc2hkb25lID0gQkZBX0ZBTFNFOworCWJmYV90cmMoYmZhLCBCRkFfRENPTkZfTU9EKGJmYSktPmZsYXNoZG9uZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZGNvbmYsIEJGQV9EQ09ORl9TTV9FWElUKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKaW5kZXggYzVlY2QyZS4uNTQ2ZDQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKQEAgLTMyNyw2ICszMjcsNyBAQAogCWVudW0gYmZhX21vZGVfcwkJcG9ydF9tb2RlOwogCXU4CQkJYWRfY2FwX2JtOwkvKiBhZGFwdGVyIGNhcCBiaXQgbWFzayAqLwogCXU4CQkJcG9ydF9tb2RlX2NmZzsJLyogY29uZmlnIHBvcnQgbW9kZSAqLworCWludAkJCWlvY19hZW5fc2VxOwogfTsKIAogc3RydWN0IGJmYV9pb2NfaHdpZl9zIHsKQEAgLTM2Niw2ICszNjcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcWU7CiAJYmZhX2NiX2NiZm5fdAljYmZuOwogCWJmYV9ib29sZWFuX3QJb25jZTsKKwliZmFfYm9vbGVhbl90CXByZV9ybXY7CS8qIHNldCBmb3Igc3RhY2sgYmFzZWQgcWUocykgKi8KKwliZmFfc3RhdHVzX3QJZndfc3RhdHVzOwkvKiB0byBhY2Nlc3MgZncgc3RhdHVzIGluIGNvbXAgcHJvYyAqLwogCXZvaWQJCSpjYmFyZzsKIH07CiAKQEAgLTY1OCw3ICs2NjEsNiBAQAogCXN0cnVjdCBiZmFfaW9jX25vdGlmeV9zCWlvY19ub3RpZnk7IC8qIGlvYyBldmVudCBub3RpZnkgKi8KIAlzdHJ1Y3QgYmZhX21lbV9kbWFfcwlwaHlfZG1hOwogfTsKLQogI2RlZmluZSBCRkFfUEhZKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMucGh5KQogI2RlZmluZSBCRkFfTUVNX1BIWV9ETUEoX19iZmEpCSgmKEJGQV9QSFkoX19iZmEpLT5waHlfZG1hKSkKIApAQCAtNjg0LDYgKzY4Niw0OSBAQAogdm9pZCBiZmFfcGh5X2ludHIodm9pZCAqcGh5YXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm1zZyk7CiAKIC8qCisgKiBEcml2ZXIgQ29uZmlnKCBkY29uZikgc3BlY2lmaWMKKyAqLworI2RlZmluZSBCRklfRENPTkZfU0lHTkFUVVJFCTB4YWJjZGFiY2QKKyNkZWZpbmUgQkZJX0RDT05GX1ZFUlNJT04JMQorCisjcHJhZ21hIHBhY2soMSkKK3N0cnVjdCBiZmFfZGNvbmZfaGRyX3MgeworCXUzMglzaWduYXR1cmU7CisJdTMyCXZlcnNpb247Cit9OworCitzdHJ1Y3QgYmZhX2Rjb25mX3MgeworCXN0cnVjdCBiZmFfZGNvbmZfaGRyX3MJCWhkcjsKKwlzdHJ1Y3QgYmZhX2x1bm1hc2tfY2ZnX3MJbHVuX21hc2s7Cit9OworI3ByYWdtYSBwYWNrKCkKKworc3RydWN0IGJmYV9kY29uZl9tb2RfcyB7CisJYmZhX3NtX3QJCXNtOworCXU4CQkJaW5zdGFuY2U7CisJYmZhX2Jvb2xlYW5fdAkJZmxhc2hkb25lOworCWJmYV9ib29sZWFuX3QJCXJlYWRfZGF0YV92YWxpZDsKKwliZmFfYm9vbGVhbl90CQltaW5fY2ZnOworCXN0cnVjdCBiZmFfdGltZXJfcwl0aW1lcjsKKwlzdHJ1Y3QgYmZhX3MJCSpiZmE7CisJdm9pZAkJCSpiZmFkOworCXZvaWQJCQkqdHJjbW9kOworCXN0cnVjdCBiZmFfZGNvbmZfcwkqZGNvbmY7CisJc3RydWN0IGJmYV9tZW1fa3ZhX3MJa3ZhX3NlZzsKK307CisKKyNkZWZpbmUgQkZBX0RDT05GX01PRChfX2JmYSkJXAorCSgmKF9fYmZhKS0+bW9kdWxlcy5kY29uZl9tb2QpCisjZGVmaW5lIEJGQV9NRU1fRENPTkZfS1ZBKF9fYmZhKQkoJihCRkFfRENPTkZfTU9EKF9fYmZhKS0+a3ZhX3NlZykpCisjZGVmaW5lIGJmYV9kY29uZl9yZWFkX2RhdGFfdmFsaWQoX19iZmEpCVwKKwkoQkZBX0RDT05GX01PRChfX2JmYSktPnJlYWRfZGF0YV92YWxpZCkKKyNkZWZpbmUgQkZBX0RDT05GX1VQREFURV9UT1YJNTAwMAkvKiBtZW10ZXN0IHRpbWVvdXQgaW4gbXNlYyAqLworCit2b2lkCWJmYV9kY29uZl9tb2Rpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQJYmZhX2Rjb25mX21vZGV4aXQoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190CWJmYV9kY29uZl91cGRhdGUoc3RydWN0IGJmYV9zICpiZmEpOworCisvKgogICoJSU9DIHNwZWNmaWMgbWFjcm9zCiAgKi8KICNkZWZpbmUgYmZhX2lvY19wY2lmbihfX2lvYykJCSgoX19pb2MpLT5wY2lkZXYucGNpX2Z1bmMpCkBAIC04MDMsNiArODQ4LDcgQEAKIAkJCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcik7CiBiZmFfYm9vbGVhbl90IGJmYV9pb2NfZnd2ZXJfY21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKIAkJCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcik7Cit2b2lkIGJmYV9pb2NfYWVuX3Bvc3Qoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IGV2ZW50KTsKIGJmYV9zdGF0dXNfdCBiZmFfaW9jX2Z3X3N0YXRzX2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnN0YXRzKTsKIGJmYV9zdGF0dXNfdCBiZmFfaW9jX2Z3X3N0YXRzX2NsZWFyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXMuaAppbmRleCAxYzZlZmQ0Li4yZDM2ZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlcy5oCkBAIC00NCw2ICs0NCw3IEBACiAJc3RydWN0IGJmYV9mbGFzaF9zCWZsYXNoOwkJLyogIGZsYXNoIG1vZHVsZSAqLwogCXN0cnVjdCBiZmFfZGlhZ19zCWRpYWdfbW9kOwkvKiAgZGlhZ25vc3RpY3MgbW9kdWxlCSovCiAJc3RydWN0IGJmYV9waHlfcwlwaHk7CQkvKiAgcGh5IG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX2Rjb25mX21vZF9zCWRjb25mX21vZDsJLyogIERDT05GIGNvbW1vbiBtb2R1bGUJKi8KIH07CiAKIC8qCkBAIC0xMTksNiArMTIwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJlcXFfd2FpdHFbQkZJX0lPQ19NQVhfQ1FTXTsKIAliZmFfYm9vbGVhbl90CQlmY3M7CQkvKiAgRkNTIGlzIGF0dGFjaGVkIHRvIEJGQSAqLwogCXN0cnVjdCBiZmFfbXNpeF9zCW1zaXg7CisJaW50CQkJYmZhX2Flbl9zZXE7CiB9OwogCiBleHRlcm4gYmZhX2Jvb2xlYW5fdCBiZmFfYXV0b19yZWNvdmVyOwpAQCAtMTMwLDUgKzEzMiw2IEBACiBleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3VmOwogZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9ycG9ydDsKIGV4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmNwOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9kY29uZjsKIAogI2VuZGlmIC8qIF9fQkZBX01PRFVMRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCmluZGV4IDIxY2FhZWYuLmFhOGEwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgogI2luY2x1ZGUgImJmYV9wbG9nLmgiCiAjaW5jbHVkZSAiYmZhX2NzLmgiCiAjaW5jbHVkZSAiYmZhX21vZHVsZXMuaCIKQEAgLTIwMDcsNiArMjAwOCwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQKK2JmYV9mY3BvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0LCBlbnVtIGJmYV9wb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilmY3BvcnQtPmJmYS0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zICAqYWVuX2VudHJ5OworCisJYmZhZF9nZXRfYWVuX2VudHJ5KGJmYWQsIGFlbl9lbnRyeSk7CisJaWYgKCFhZW5fZW50cnkpCisJCXJldHVybjsKKworCWFlbl9lbnRyeS0+YWVuX2RhdGEucG9ydC5pb2NfdHlwZSA9IGJmYV9nZXRfdHlwZShmY3BvcnQtPmJmYSk7CisJYWVuX2VudHJ5LT5hZW5fZGF0YS5wb3J0LnB3d24gPSBmY3BvcnQtPnB3d247CisKKwkvKiBTZW5kIHRoZSBBRU4gbm90aWZpY2F0aW9uICovCisJYmZhZF9pbV9wb3N0X3ZlbmRvcl9ldmVudChhZW5fZW50cnksIGJmYWQsICsrZmNwb3J0LT5iZmEtPmJmYV9hZW5fc2VxLAorCQkJCSAgQkZBX0FFTl9DQVRfUE9SVCwgZXZlbnQpOworfQorCiAvKgogICogRkMgUE9SVCBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucwogICovCkBAIC0yMDk1LDYgKzIxMTQsNyBAQAogCQl3d24yc3RyKHB3d25fYnVmLCBmY3BvcnQtPnB3d24pOwogCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCSJCYXNlIHBvcnQgZGlzYWJsZWQ6IFdXTiA9ICVzXG4iLCBwd3duX2J1Zik7CisJCWJmYV9mY3BvcnRfYWVuX3Bvc3QoZmNwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNQT1JUX1NNX0xJTktVUDoKQEAgLTIxNTUsNiArMjE3NSw3IEBACiAJCXd3bjJzdHIocHd3bl9idWYsIGZjcG9ydC0+cHd3bik7CiAJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJIkJhc2UgcG9ydCBkaXNhYmxlZDogV1dOID0gJXNcbiIsIHB3d25fYnVmKTsKKwkJYmZhX2ZjcG9ydF9hZW5fcG9zdChmY3BvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1BPUlRfU01fU1RPUDoKQEAgLTIyMDgsNiArMjIyOSwxMiBAQAogCQl3d24yc3RyKHB3d25fYnVmLCBmY3BvcnQtPnB3d24pOwogCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCSJCYXNlIHBvcnQgb25saW5lOiBXV04gPSAlc1xuIiwgcHd3bl9idWYpOworCQliZmFfZmNwb3J0X2Flbl9wb3N0KGZjcG9ydCwgQkZBX1BPUlRfQUVOX09OTElORSk7CisKKwkJLyogSWYgUW9TIGlzIGVuYWJsZWQgYW5kIGl0IGlzIG5vdCBvbmxpbmUsIHNlbmQgQUVOICovCisJCWlmIChmY3BvcnQtPmNmZy5xb3NfZW5hYmxlZCAmJgorCQkgICAgZmNwb3J0LT5xb3NfYXR0ci5zdGF0ZSAhPSBCRkFfUU9TX09OTElORSkKKwkJCWJmYV9mY3BvcnRfYWVuX3Bvc3QoZmNwb3J0LCBCRkFfUE9SVF9BRU5fUU9TX05FRyk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNQT1JUX1NNX0xJTktET1dOOgpAQCAtMjIzNCw2ICsyMjYxLDcgQEAKIAkJd3duMnN0cihwd3duX2J1ZiwgZmNwb3J0LT5wd3duKTsKIAkJQkZBX0xPRyhLRVJOX0lORk8sIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkiQmFzZSBwb3J0IGRpc2FibGVkOiBXV04gPSAlc1xuIiwgcHd3bl9idWYpOworCQliZmFfZmNwb3J0X2Flbl9wb3N0KGZjcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0FCTEUpOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDUE9SVF9TTV9TVE9QOgpAQCAtMjI3OSw4ICsyMzA3LDEwIEBACiAJCXd3bjJzdHIocHd3bl9idWYsIGZjcG9ydC0+cHd3bik7CiAJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJIkJhc2UgcG9ydCBvZmZsaW5lOiBXV04gPSAlc1xuIiwgcHd3bl9idWYpOworCQliZmFfZmNwb3J0X2Flbl9wb3N0KGZjcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOwogCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCSJCYXNlIHBvcnQgZGlzYWJsZWQ6IFdXTiA9ICVzXG4iLCBwd3duX2J1Zik7CisJCWJmYV9mY3BvcnRfYWVuX3Bvc3QoZmNwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNQT1JUX1NNX0xJTktET1dOOgpAQCAtMjI5MCwyNiArMjMyMCwzMiBAQAogCQliZmFfcGxvZ19zdHIoZmNwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAogCQkJCUJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UsIDAsICJQb3J0IExpbmtkb3duIik7CiAJCXd3bjJzdHIocHd3bl9idWYsIGZjcG9ydC0+cHd3bik7Ci0JCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChmY3BvcnQtPmJmYSkpCisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChmY3BvcnQtPmJmYSkpIHsKIAkJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJCSJCYXNlIHBvcnQgb2ZmbGluZTogV1dOID0gJXNcbiIsIHB3d25fYnVmKTsKLQkJZWxzZQorCQkJYmZhX2ZjcG9ydF9hZW5fcG9zdChmY3BvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJfSBlbHNlIHsKIAkJCUJGQV9MT0coS0VSTl9FUlIsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkJIkJhc2UgcG9ydCAoV1dOID0gJXMpICIKIAkJCQkibG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5XG4iLCBwd3duX2J1Zik7CisJCQliZmFfZmNwb3J0X2Flbl9wb3N0KGZjcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QpOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNQT1JUX1NNX1NUT1A6CiAJCWJmYV9zbV9zZXRfc3RhdGUoZmNwb3J0LCBiZmFfZmNwb3J0X3NtX3N0b3BwZWQpOwogCQliZmFfZmNwb3J0X3Jlc2V0X2xpbmtpbmZvKGZjcG9ydCk7CiAJCXd3bjJzdHIocHd3bl9idWYsIGZjcG9ydC0+cHd3bik7Ci0JCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChmY3BvcnQtPmJmYSkpCisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChmY3BvcnQtPmJmYSkpIHsKIAkJCUJGQV9MT0coS0VSTl9JTkZPLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJCSJCYXNlIHBvcnQgb2ZmbGluZTogV1dOID0gJXNcbiIsIHB3d25fYnVmKTsKLQkJZWxzZQorCQkJYmZhX2ZjcG9ydF9hZW5fcG9zdChmY3BvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJfSBlbHNlIHsKIAkJCUJGQV9MT0coS0VSTl9FUlIsIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkJIkJhc2UgcG9ydCAoV1dOID0gJXMpICIKIAkJCQkibG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5XG4iLCBwd3duX2J1Zik7CisJCQliZmFfZmNwb3J0X2Flbl9wb3N0KGZjcG9ydCwgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QpOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBCRkFfRkNQT1JUX1NNX0hXRkFJTDoKQEAgLTIzMTcsMTMgKzIzNTMsMTYgQEAKIAkJYmZhX2ZjcG9ydF9yZXNldF9saW5raW5mbyhmY3BvcnQpOwogCQliZmFfZmNwb3J0X3NjbihmY3BvcnQsIEJGQV9QT1JUX0xJTktET1dOLCBCRkFfRkFMU0UpOwogCQl3d24yc3RyKHB3d25fYnVmLCBmY3BvcnQtPnB3d24pOwotCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQoZmNwb3J0LT5iZmEpKQorCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQoZmNwb3J0LT5iZmEpKSB7CiAJCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCQkiQmFzZSBwb3J0IG9mZmxpbmU6IFdXTiA9ICVzXG4iLCBwd3duX2J1Zik7Ci0JCWVsc2UKKwkJCWJmYV9mY3BvcnRfYWVuX3Bvc3QoZmNwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CiAJCQlCRkFfTE9HKEtFUk5fRVJSLCBiZmFkLCBiZmFfbG9nX2xldmVsLAogCQkJCSJCYXNlIHBvcnQgKFdXTiA9ICVzKSAiCiAJCQkJImxvc3QgZmFicmljIGNvbm5lY3Rpdml0eVxuIiwgcHd3bl9idWYpOworCQkJYmZhX2ZjcG9ydF9hZW5fcG9zdChmY3BvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yNDU0LDYgKzI0OTMsNyBAQAogCQl3d24yc3RyKHB3d25fYnVmLCBmY3BvcnQtPnB3d24pOwogCQlCRkFfTE9HKEtFUk5fSU5GTywgYmZhZCwgYmZhX2xvZ19sZXZlbCwKIAkJCSJCYXNlIHBvcnQgZW5hYmxlZDogV1dOID0gJXNcbiIsIHB3d25fYnVmKTsKKwkJYmZhX2ZjcG9ydF9hZW5fcG9zdChmY3BvcnQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpOwogCQlicmVhazsKIAogCWNhc2UgQkZBX0ZDUE9SVF9TTV9TVE9QOgpAQCAtMjUwOCw2ICsyNTQ4LDcgQEAKIAkJd3duMnN0cihwd3duX2J1ZiwgZmNwb3J0LT5wd3duKTsKIAkJQkZBX0xPRyhLRVJOX0lORk8sIGJmYWQsIGJmYV9sb2dfbGV2ZWwsCiAJCQkiQmFzZSBwb3J0IGVuYWJsZWQ6IFdXTiA9ICVzXG4iLCBwd3duX2J1Zik7CisJCWJmYV9mY3BvcnRfYWVuX3Bvc3QoZmNwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGQV9GQ1BPUlRfU01fRElTQUJMRToKQEAgLTI4NzQsNiArMjkxNSw5IEBACiAKIAlwb3J0X2NmZy0+dHJsX2RlZl9zcGVlZCA9IEJGQV9QT1JUX1NQRUVEXzFHQlBTOwogCisJSU5JVF9MSVNUX0hFQUQoJmZjcG9ydC0+c3RhdHNfcGVuZGluZ19xKTsKKwlJTklUX0xJU1RfSEVBRCgmZmNwb3J0LT5zdGF0c2Nscl9wZW5kaW5nX3EpOworCiAJYmZhX3JlcXFfd2luaXQoJmZjcG9ydC0+cmVxcV93YWl0LCBiZmFfZmNwb3J0X3FyZXN1bWUsIGZjcG9ydCk7CiB9CiAKQEAgLTMxMDIsMzAgKzMxNDYsMzggQEAKIHN0YXRpYyB2b2lkCiBfX2JmYV9jYl9mY3BvcnRfc3RhdHNfZ2V0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQogewotCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IGNiYXJnOworCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IChzdHJ1Y3QgYmZhX2ZjcG9ydF9zICopY2Jhcmc7CisJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyAqY2I7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisJdW5pb24gYmZhX2ZjcG9ydF9zdGF0c191ICpyZXQ7CiAKIAlpZiAoY29tcGxldGUpIHsKLQkJaWYgKGZjcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spIHsKLQkJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJaWYgKGZjcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spCisJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAotCQkJLyogU3dhcCBGQyBRb1Mgb3IgRkNvRSBzdGF0cyAqLwotCQkJaWYgKGJmYV9pb2NfZ2V0X2ZjbW9kZSgmZmNwb3J0LT5iZmEtPmlvYykpIHsKLQkJCQliZmFfZmNwb3J0X3Fvc19zdGF0c19zd2FwKAotCQkJCQkmZmNwb3J0LT5zdGF0c19yZXQtPmZjcW9zLAotCQkJCQkmZmNwb3J0LT5zdGF0cy0+ZmNxb3MpOwotCQkJfSBlbHNlIHsKLQkJCQliZmFfZmNwb3J0X2Zjb2Vfc3RhdHNfc3dhcCgKLQkJCQkJJmZjcG9ydC0+c3RhdHNfcmV0LT5mY29lLAotCQkJCQkmZmNwb3J0LT5zdGF0cy0+ZmNvZSk7Ci0KLQkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQkJCQlmY3BvcnQtPnN0YXRzX3JldC0+ZmNvZS5zZWNzX3Jlc2V0ID0KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZmY3BvcnQtPnN0YXRzX3BlbmRpbmdfcSkgeworCQkJYmZhX3FfZGVxKCZmY3BvcnQtPnN0YXRzX3BlbmRpbmdfcSwgJnFlKTsKKwkJCWNiID0gKHN0cnVjdCBiZmFfY2JfcGVuZGluZ19xX3MgKilxZTsKKwkJCWlmIChmY3BvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCQkJcmV0ID0gKHVuaW9uIGJmYV9mY3BvcnRfc3RhdHNfdSAqKWNiLT5kYXRhOworCQkJCS8qIFN3YXAgRkMgUW9TIG9yIEZDb0Ugc3RhdHMgKi8KKwkJCQlpZiAoYmZhX2lvY19nZXRfZmNtb2RlKCZmY3BvcnQtPmJmYS0+aW9jKSkKKwkJCQkJYmZhX2ZjcG9ydF9xb3Nfc3RhdHNfc3dhcCgmcmV0LT5mY3FvcywKKwkJCQkJCQkmZmNwb3J0LT5zdGF0cy0+ZmNxb3MpOworCQkJCWVsc2UgeworCQkJCQliZmFfZmNwb3J0X2Zjb2Vfc3RhdHNfc3dhcCgmcmV0LT5mY29lLAorCQkJCQkJCSZmY3BvcnQtPnN0YXRzLT5mY29lKTsKKwkJCQkJcmV0LT5mY29lLnNlY3NfcmVzZXQgPQogCQkJCQl0di50dl9zZWMgLSBmY3BvcnQtPnN0YXRzX3Jlc2V0X3RpbWU7CisJCQkJfQogCQkJfQorCQkJYmZhX2NiX3F1ZXVlX3N0YXR1cyhmY3BvcnQtPmJmYSwgJmNiLT5oY2JfcWUsCisJCQkJCWZjcG9ydC0+c3RhdHNfc3RhdHVzKTsKIAkJfQotCQlmY3BvcnQtPnN0YXRzX2NiZm4oZmNwb3J0LT5zdGF0c19jYmFyZywgZmNwb3J0LT5zdGF0c19zdGF0dXMpOworCQlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CiAJfSBlbHNlIHsKLQkJZmNwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlJTklUX0xJU1RfSEVBRCgmZmNwb3J0LT5zdGF0c19wZW5kaW5nX3EpOwogCQlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CiAJfQogfQpAQCAtMzE0Myw4ICszMTk1LDcgQEAKIAl9CiAKIAlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOwotCWJmYV9jYl9xdWV1ZShmY3BvcnQtPmJmYSwgJmZjcG9ydC0+aGNiX3FlLCBfX2JmYV9jYl9mY3BvcnRfc3RhdHNfZ2V0LAotCQlmY3BvcnQpOworCV9fYmZhX2NiX2ZjcG9ydF9zdGF0c19nZXQoZmNwb3J0LCBCRkFfVFJVRSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMTc0LDcgKzMyMjUsOSBAQAogc3RhdGljIHZvaWQKIF9fYmZhX2NiX2ZjcG9ydF9zdGF0c19jbHIodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCiB7Ci0Jc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gY2Jhcmc7CisJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gKHN0cnVjdCBiZmFfZmNwb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyAqY2I7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CiAKIAlpZiAoY29tcGxldGUpIHsKIAkJc3RydWN0IHRpbWV2YWwgdHY7CkBAIC0zMTg0LDEwICszMjM3LDE1IEBACiAJCSAqLwogCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAkJZmNwb3J0LT5zdGF0c19yZXNldF90aW1lID0gdHYudHZfc2VjOwotCi0JCWZjcG9ydC0+c3RhdHNfY2JmbihmY3BvcnQtPnN0YXRzX2NiYXJnLCBmY3BvcnQtPnN0YXRzX3N0YXR1cyk7CisJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwb3J0LT5zdGF0c2Nscl9wZW5kaW5nX3EpIHsKKwkJCWJmYV9xX2RlcSgmZmNwb3J0LT5zdGF0c2Nscl9wZW5kaW5nX3EsICZxZSk7CisJCQljYiA9IChzdHJ1Y3QgYmZhX2NiX3BlbmRpbmdfcV9zICopcWU7CisJCQliZmFfY2JfcXVldWVfc3RhdHVzKGZjcG9ydC0+YmZhLCAmY2ItPmhjYl9xZSwKKwkJCQkJCWZjcG9ydC0+c3RhdHNfc3RhdHVzKTsKKwkJfQorCQlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CiAJfSBlbHNlIHsKLQkJZmNwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlJTklUX0xJU1RfSEVBRCgmZmNwb3J0LT5zdGF0c2Nscl9wZW5kaW5nX3EpOwogCQlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CiAJfQogfQpAQCAtMzIwNSw4ICszMjYzLDcgQEAKIAl9CiAKIAlmY3BvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOwotCWJmYV9jYl9xdWV1ZShmY3BvcnQtPmJmYSwgJmZjcG9ydC0+aGNiX3FlLAotCQkJX19iZmFfY2JfZmNwb3J0X3N0YXRzX2NsciwgZmNwb3J0KTsKKwlfX2JmYV9jYl9mY3BvcnRfc3RhdHNfY2xyKGZjcG9ydCwgQkZBX1RSVUUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzQwMiw2ICszNDU5LDExIEBACiAJCQkJZmNwb3J0LT51c2VfZmxhc2hfY2ZnID0gQkZBX0ZBTFNFOwogCQkJfQogCisJCQlpZiAoZmNwb3J0LT5jZmcucW9zX2VuYWJsZWQpCisJCQkJZmNwb3J0LT5xb3NfYXR0ci5zdGF0ZSA9IEJGQV9RT1NfT0ZGTElORTsKKwkJCWVsc2UKKwkJCQlmY3BvcnQtPnFvc19hdHRyLnN0YXRlID0gQkZBX1FPU19ESVNBQkxFRDsKKwogCQkJYmZhX3NtX3NlbmRfZXZlbnQoZmNwb3J0LCBCRkFfRkNQT1JUX1NNX0ZXUlNQKTsKIAkJfQogCQlicmVhazsKQEAgLTM0MjYsMjggKzM0ODgsMjYgQEAKIAkJLyoKIAkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCiAJCSAqLwotCQlpZiAoZmNwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSB8fAotCQkgICAgZmNwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCWlmIChsaXN0X2VtcHR5KCZmY3BvcnQtPnN0YXRzX3BlbmRpbmdfcSkgfHwKKwkJICAgIChmY3BvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikpCiAJCQlicmVhazsKIAogCQliZmFfdGltZXJfc3RvcCgmZmNwb3J0LT50aW1lcik7CiAJCWZjcG9ydC0+c3RhdHNfc3RhdHVzID0gaTJobXNnLnBzdGF0c2dldF9yc3AtPnN0YXR1czsKLQkJYmZhX2NiX3F1ZXVlKGZjcG9ydC0+YmZhLCAmZmNwb3J0LT5oY2JfcWUsCi0JCQkJX19iZmFfY2JfZmNwb3J0X3N0YXRzX2dldCwgZmNwb3J0KTsKKwkJX19iZmFfY2JfZmNwb3J0X3N0YXRzX2dldChmY3BvcnQsIEJGQV9UUlVFKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGSV9GQ1BPUlRfSTJIX1NUQVRTX0NMRUFSX1JTUDoKIAkJLyoKIAkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCiAJCSAqLwotCQlpZiAoZmNwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSB8fAotCQkgICAgZmNwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCWlmIChsaXN0X2VtcHR5KCZmY3BvcnQtPnN0YXRzY2xyX3BlbmRpbmdfcSkgfHwKKwkJICAgIChmY3BvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikpCiAJCQlicmVhazsKIAogCQliZmFfdGltZXJfc3RvcCgmZmNwb3J0LT50aW1lcik7CiAJCWZjcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKLQkJYmZhX2NiX3F1ZXVlKGZjcG9ydC0+YmZhLCAmZmNwb3J0LT5oY2JfcWUsCi0JCQkJX19iZmFfY2JfZmNwb3J0X3N0YXRzX2NsciwgZmNwb3J0KTsKKwkJX19iZmFfY2JfZmNwb3J0X3N0YXRzX2NscihmY3BvcnQsIEJGQV9UUlVFKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJGSV9GQ1BPUlRfSTJIX0VOQUJMRV9BRU46CkBAIC0zNzc5LDI1ICszODM5LDI1IEBACiAgKiBGZXRjaCBwb3J0IHN0YXRpc3RpY3MgKEZDUW9TIG9yIEZDb0UpLgogICovCiBiZmFfc3RhdHVzX3QKLWJmYV9mY3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3UgKnN0YXRzLAotCWJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCitiZmFfZmNwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyAqY2IpCiB7CiAJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoYmZhKTsKIAotCWlmIChmY3BvcnQtPnN0YXRzX2J1c3kpIHsKLQkJYmZhX3RyYyhiZmEsIGZjcG9ydC0+c3RhdHNfYnVzeSk7CisJaWYgKGJmYV9pb2NfaXNfZGlzYWJsZWQoJmJmYS0+aW9jKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0RJU0FCTEVEOworCisJaWYgKCFsaXN0X2VtcHR5KCZmY3BvcnQtPnN0YXRzY2xyX3BlbmRpbmdfcSkpCiAJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7Ci0JfQogCi0JZmNwb3J0LT5zdGF0c19idXN5ICA9IEJGQV9UUlVFOwotCWZjcG9ydC0+c3RhdHNfcmV0ICAgPSBzdGF0czsKLQlmY3BvcnQtPnN0YXRzX2NiZm4gID0gY2JmbjsKLQlmY3BvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisJaWYgKGxpc3RfZW1wdHkoJmZjcG9ydC0+c3RhdHNfcGVuZGluZ19xKSkgeworCQlsaXN0X2FkZF90YWlsKCZjYi0+aGNiX3FlLnFlLCAmZmNwb3J0LT5zdGF0c19wZW5kaW5nX3EpOworCQliZmFfZmNwb3J0X3NlbmRfc3RhdHNfZ2V0KGZjcG9ydCk7CisJCWJmYV90aW1lcl9zdGFydChiZmEsICZmY3BvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3BvcnRfc3RhdHNfZ2V0X3RpbWVvdXQsCisJCQkJZmNwb3J0LCBCRkFfRkNQT1JUX1NUQVRTX1RPVik7CisJfSBlbHNlCisJCWxpc3RfYWRkX3RhaWwoJmNiLT5oY2JfcWUucWUsICZmY3BvcnQtPnN0YXRzX3BlbmRpbmdfcSk7CiAKLQliZmFfZmNwb3J0X3NlbmRfc3RhdHNfZ2V0KGZjcG9ydCk7Ci0KLQliZmFfdGltZXJfc3RhcnQoYmZhLCAmZmNwb3J0LT50aW1lciwgYmZhX2ZjcG9ydF9zdGF0c19nZXRfdGltZW91dCwKLQkJCWZjcG9ydCwgQkZBX0ZDUE9SVF9TVEFUU19UT1YpOwogCXJldHVybiBCRkFfU1RBVFVTX09LOwogfQogCkBAIC0zODA1LDI3ICszODY1LDI1IEBACiAgKiBSZXNldCBwb3J0IHN0YXRpc3RpY3MgKEZDUW9TIG9yIEZDb0UpLgogICovCiBiZmFfc3RhdHVzX3QKLWJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCitiZmFfZmNwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2NiX3BlbmRpbmdfcV9zICpjYikKIHsKIAlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRChiZmEpOwogCi0JaWYgKGZjcG9ydC0+c3RhdHNfYnVzeSkgewotCQliZmFfdHJjKGJmYSwgZmNwb3J0LT5zdGF0c19idXN5KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmZjcG9ydC0+c3RhdHNfcGVuZGluZ19xKSkKIAkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKLQl9CiAKLQlmY3BvcnQtPnN0YXRzX2J1c3kgID0gQkZBX1RSVUU7Ci0JZmNwb3J0LT5zdGF0c19jYmZuICA9IGNiZm47Ci0JZmNwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCWlmIChsaXN0X2VtcHR5KCZmY3BvcnQtPnN0YXRzY2xyX3BlbmRpbmdfcSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmY2ItPmhjYl9xZS5xZSwgJmZjcG9ydC0+c3RhdHNjbHJfcGVuZGluZ19xKTsKKwkJYmZhX2ZjcG9ydF9zZW5kX3N0YXRzX2NsZWFyKGZjcG9ydCk7CisJCWJmYV90aW1lcl9zdGFydChiZmEsICZmY3BvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQsCisJCQkJZmNwb3J0LCBCRkFfRkNQT1JUX1NUQVRTX1RPVik7CisJfSBlbHNlCisJCWxpc3RfYWRkX3RhaWwoJmNiLT5oY2JfcWUucWUsICZmY3BvcnQtPnN0YXRzY2xyX3BlbmRpbmdfcSk7CiAKLQliZmFfZmNwb3J0X3NlbmRfc3RhdHNfY2xlYXIoZmNwb3J0KTsKLQotCWJmYV90aW1lcl9zdGFydChiZmEsICZmY3BvcnQtPnRpbWVyLCBiZmFfZmNwb3J0X3N0YXRzX2Nscl90aW1lb3V0LAotCQkJZmNwb3J0LCBCRkFfRkNQT1JUX1NUQVRTX1RPVik7CiAJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CiB9CiAKLQogLyoKICAqIEZldGNoIHBvcnQgYXR0cmlidXRlcy4KICAqLwpAQCAtNDYxOSw2ICs0Njc3LDcgQEAKIAkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cuY3JlYXRlX3JzcC0+YmZhX2hhbmRsZSk7CiAJCXJwLT5md19oYW5kbGUgPSBtc2cuY3JlYXRlX3JzcC0+ZndfaGFuZGxlOwogCQlycC0+cW9zX2F0dHIgPSBtc2cuY3JlYXRlX3JzcC0+cW9zX2F0dHI7CisJCWJmYV9ycG9ydF9zZXRfbHVubWFzayhiZmEsIHJwKTsKIAkJV0FSTl9PTihtc2cuY3JlYXRlX3JzcC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spOwogCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKIAkJYnJlYWs7CkBAIC00NjI2LDYgKzQ2ODUsNyBAQAogCWNhc2UgQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQOgogCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5kZWxldGVfcnNwLT5iZmFfaGFuZGxlKTsKIAkJV0FSTl9PTihtc2cuZGVsZXRlX3JzcC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spOworCQliZmFfcnBvcnRfdW5zZXRfbHVubWFzayhiZmEsIHJwKTsKIAkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9GV1JTUCk7CiAJCWJyZWFrOwogCkBAIC00NzA2LDYgKzQ3NjYsMzcgQEAKIAliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX1NFVF9TUEVFRCk7CiB9CiAKKy8qIFNldCBScG9ydCBMVU4gTWFzayAqLwordm9pZAorYmZhX3Jwb3J0X3NldF9sdW5tYXNrKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSpscHNfbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwl3d25fdAlscF93d24sIHJwX3d3bjsKKwl1OCBscF90YWcgPSAodTgpcnAtPnJwb3J0X2luZm8ubHBfdGFnOworCisJcnBfd3duID0gKChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcnAtPnJwb3J0X2RydiktPnB3d247CisJbHBfd3duID0gKEJGQV9MUFNfRlJPTV9UQUcobHBzX21vZCwgcnAtPnJwb3J0X2luZm8ubHBfdGFnKSktPnB3d247CisKKwlCRkFfTFBTX0ZST01fVEFHKGxwc19tb2QsIHJwLT5ycG9ydF9pbmZvLmxwX3RhZyktPmx1bl9tYXNrID0KKwkJCQkJcnAtPmx1bl9tYXNrID0gQkZBX1RSVUU7CisJYmZhX2ZjcGltX2x1bm1hc2tfcnBfdXBkYXRlKGJmYSwgbHBfd3duLCBycF93d24sIHJwLT5ycG9ydF90YWcsIGxwX3RhZyk7Cit9CisKKy8qIFVuc2V0IFJwb3J0IExVTiBtYXNrICovCit2b2lkCitiZmFfcnBvcnRfdW5zZXRfbHVubWFzayhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbHBzX21vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJd3duX3QJbHBfd3duLCBycF93d247CisKKwlycF93d24gPSAoKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilycC0+cnBvcnRfZHJ2KS0+cHd3bjsKKwlscF93d24gPSAoQkZBX0xQU19GUk9NX1RBRyhscHNfbW9kLCBycC0+cnBvcnRfaW5mby5scF90YWcpKS0+cHd3bjsKKworCUJGQV9MUFNfRlJPTV9UQUcobHBzX21vZCwgcnAtPnJwb3J0X2luZm8ubHBfdGFnKS0+bHVuX21hc2sgPQorCQkJCXJwLT5sdW5fbWFzayA9IEJGQV9GQUxTRTsKKwliZmFfZmNwaW1fbHVubWFza19ycF91cGRhdGUoYmZhLCBscF93d24sIHJwX3d3biwKKwkJCUJGQV9SUE9SVF9UQUdfSU5WQUxJRCwgQkZBX0xQX1RBR19JTlZBTElEKTsKK30KIAogLyoKICAqIFNHUEcgcmVsYXRlZCBmdW5jdGlvbnMKQEAgLTU1MTcsMTEgKzU2MDgsMjkgQEAKIAkJcmV0dXJuIEJGQV9TVEFUVVNfUE9SVF9OT1RfRElTQUJMRUQ7CiAJfQogCi0JLyogQ2hlY2sgaWYgdGhlIHNwZWVkIGlzIHN1cHBvcnRlZCAqLwotCWJmYV9mY3BvcnRfZ2V0X2F0dHIoYmZhLCAmYXR0cik7Ci0JYmZhX3RyYyhmY2RpYWcsIGF0dHIuc3BlZWRfc3VwcG9ydGVkKTsKLQlpZiAoc3BlZWQgPiBhdHRyLnNwZWVkX3N1cHBvcnRlZCkKLQkJcmV0dXJuIEJGQV9TVEFUVVNfVU5TVVBQX1NQRUVEOworCS8qCisJICogQ2hlY2sgaWYgaW5wdXQgc3BlZWQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0IG1vZGUKKwkgKi8KKwlpZiAoYmZhX2lvY19nZXRfdHlwZSgmYmZhLT5pb2MpID09IEJGQV9JT0NfVFlQRV9GQykgeworCQlpZiAoIShzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF8xR0JQUyB8fAorCQkgICAgICBzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF8yR0JQUyB8fAorCQkgICAgICBzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF80R0JQUyB8fAorCQkgICAgICBzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF84R0JQUyB8fAorCQkgICAgICBzcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF8xNkdCUFMgfHwKKwkJICAgICAgc3BlZWQgPT0gQkZBX1BPUlRfU1BFRURfQVVUTykpIHsKKwkJCWJmYV90cmMoZmNkaWFnLCBzcGVlZCk7CisJCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJCX0KKwkJYmZhX2ZjcG9ydF9nZXRfYXR0cihiZmEsICZhdHRyKTsKKwkJYmZhX3RyYyhmY2RpYWcsIGF0dHIuc3BlZWRfc3VwcG9ydGVkKTsKKwkJaWYgKHNwZWVkID4gYXR0ci5zcGVlZF9zdXBwb3J0ZWQpCisJCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJfSBlbHNlIHsKKwkJaWYgKHNwZWVkICE9IEJGQV9QT1JUX1NQRUVEXzEwR0JQUykgeworCQkJYmZhX3RyYyhmY2RpYWcsIHNwZWVkKTsKKwkJCXJldHVybiBCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRDsKKwkJfQorCX0KIAogCS8qIEZvciBNZXp6IGNhcmQsIHBvcnQgc3BlZWQgZW50ZXJlZCBuZWVkcyB0byBiZSBjaGVja2VkICovCiAJaWYgKGJmYV9tZmdfaXNfbWV6eihiZmEtPmlvYy5hdHRyLT5jYXJkX3R5cGUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zdmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5oCmluZGV4IGZiZTUxM2EuLjk1YWRiODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3N2Yy5oCkBAIC0yOTcsNiArMjk3LDcgQEAKIAl2b2lkCQkqcnBvcnRfZHJ2OwkvKiAgZmNzL2RyaXZlciBycG9ydCBvYmplY3QJICAgICovCiAJdTE2CWZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkgICAgKi8KIAl1MTYJcnBvcnRfdGFnOwkvKiAgQkZBIHJwb3J0IHRhZwkJICAgICovCisJdTgJbHVuX21hc2s7CS8qICBMVU4gbWFzayBmbGFnCQkgICAgKi8KIAlzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyBycG9ydF9pbmZvOyAvKiAgcnBvcnQgaW5mbyBmcm9tIGZjcy9kcml2ZXIgKi8KIAlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zIHJlcXFfd2FpdDsgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAgICAgKi8KIAlzdHJ1Y3QgYmZhX2NiX3FlX3MgaGNiX3FlOwkvKiAgQkZBIGNhbGxiYWNrIHFlbGVtCQkgICAgKi8KQEAgLTQwNCw2ICs0MDUsNyBAQAogCXU4CQliYl9zY247CQkvKiAgbG9jYWwgQkJfU0NOCQkqLwogCXU4CQlsc3JqdF9yc247CS8qICBMU1JKVCByZWFzb24JCSovCiAJdTgJCWxzcmp0X2V4cGw7CS8qICBMU1JKVCBleHBsYW5hdGlvbgkJKi8KKwl1OAkJbHVuX21hc2s7CS8qICBMVU4gbWFzayBmbGFnCQkqLwogCXd3bl90CQlwd3duOwkJLyogIHBvcnQgd3duIG9mIGxwb3J0CQkqLwogCXd3bl90CQlud3duOwkJLyogIG5vZGUgd3duIG9mIGxwb3J0CQkqLwogCXd3bl90CQlwcl9wd3duOwkvKiAgcG9ydCB3d24gb2YgbHBvcnQgcGVlcgkqLwpAQCAtNDQxLDcgKzQ0Myw2IEBACiAgKi8KIAogI2RlZmluZSBCRkFfRkNQT1JUKF9iZmEpCSgmKChfYmZhKS0+bW9kdWxlcy5wb3J0KSkKLXR5cGVkZWYgdm9pZCAoKmJmYV9jYl9wb3J0X3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CiAKIC8qCiAgKiBMaW5rIG5vdGlmaWNhdGlvbiBkYXRhIHN0cnVjdHVyZQpAQCAtNDk1LDEzICs0OTYsMTEgQEAKIAl1OAkJCSpzdGF0c19rdmE7CiAJdTY0CQlzdGF0c19wYTsKIAl1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3UgKnN0YXRzOwotCXVuaW9uIGJmYV9mY3BvcnRfc3RhdHNfdSAqc3RhdHNfcmV0OyAvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCiAJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7IC8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KLQliZmFfYm9vbGVhbl90CQlzdGF0c19idXN5OyAvKiAgb3V0c3RhbmRpbmcgc3RhdHMvc3RhdHNjbHIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXN0YXRzX3BlbmRpbmdfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN0YXRzY2xyX3BlbmRpbmdfcTsKIAliZmFfYm9vbGVhbl90CQlzdGF0c19xZnVsbDsKIAl1MzIJCXN0YXRzX3Jlc2V0X3RpbWU7IC8qICBzdGF0cyByZXNldCB0aW1lIHN0YW1wICovCi0JYmZhX2NiX3BvcnRfdAkJc3RhdHNfY2JmbjsgLyogIGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbiAqLwotCXZvaWQJCQkqc3RhdHNfY2Jhcmc7IC8qICohPCB1c2VyIGNhbGxiYWNrIGFyZyAqLwogCWJmYV9ib29sZWFuX3QJCWRpYWdfYnVzeTsgLyogIGRpYWcgYnVzeSBzdGF0dXMgKi8KIAliZmFfYm9vbGVhbl90CQliZWFjb247IC8qICBwb3J0IGJlYWNvbiBzdGF0dXMgKi8KIAliZmFfYm9vbGVhbl90CQlsaW5rX2UyZV9iZWFjb247IC8qICBsaW5rIGJlYWNvbiBzdGF0dXMgKi8KQEAgLTU1MiwxMCArNTUxLDkgQEAKIAkJCWJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKTsKIGJmYV9ib29sZWFuX3QJYmZhX2ZjcG9ydF9pc19saW5rdXAoc3RydWN0IGJmYV9zICpiZmEpOwogYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAotCQkJCSAgdW5pb24gYmZhX2ZjcG9ydF9zdGF0c191ICpzdGF0cywKLQkJCQkgIGJmYV9jYl9wb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwotYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wb3J0X3QgY2JmbiwKLQkJCQkgICAgdm9pZCAqY2JhcmcpOworCQkJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyAqY2IpOworYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2NiX3BlbmRpbmdfcV9zICpjYik7CiBiZmFfYm9vbGVhbl90IGJmYV9mY3BvcnRfaXNfcW9zX2VuYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpOwogYmZhX2Jvb2xlYW5fdCBiZmFfZmNwb3J0X2lzX3RydW5rX2VuYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpOwogYmZhX3N0YXR1c190IGJmYV9mY3BvcnRfaXNfcGJjZGlzYWJsZWQoc3RydWN0IGJmYV9zICpiZmEpOwpAQCAtNTc4LDYgKzU3NiwxOSBAQAogCQkJICAgICAgIHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHIpOwogCiAvKgorICoJUnBvcnQgTFVOIG1hc2tpbmcgcmVsYXRlZAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9UQUdfSU5WQUxJRAkweGZmZmYKKyNkZWZpbmUgQkZBX0xQX1RBR19JTlZBTElECTB4ZmYKK3ZvaWQJYmZhX3Jwb3J0X3NldF9sdW5tYXNrKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3ZvaWQJYmZhX3Jwb3J0X3Vuc2V0X2x1bm1hc2soc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApOworYmZhX2Jvb2xlYW5fdAliZmFfcnBvcnRfbHVubWFza19hY3RpdmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7Cit3d25fdAliZmFfcnBvcnRfZ2V0X3B3d24oc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApOworc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnRfZ2V0X2J5X3d3bihzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHZmX2lkLAorCQkJCQkgd3duX3QgKmxwd3duLCB3d25fdCBycHd3bik7Cit2b2lkICpiZmFfY2JfZ2V0X3JwX2J5X3d3bih2b2lkICphcmcsIHUxNiB2Zl9pZCwgd3duX3QgKmxwd3duLCB3d25fdCBycHd3bik7CisKKy8qCiAgKiBiZmEgZmN4cCBBUEkgZnVuY3Rpb25zCiAgKi8KIHN0cnVjdCBiZmFfZmN4cF9zICpiZmFfZmN4cF9hbGxvYyh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfcyAqYmZhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwppbmRleCBiZWIzMGE3Li42NmZiNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAKIGJmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQogewogCXN0cnVjdCBiZmFkX3MJKmJmYWQ7Ci0JaW50CQllcnJvciA9IC1FTk9ERVYsIHJldHZhbDsKKwlpbnQJCWVycm9yID0gLUVOT0RFViwgcmV0dmFsLCBpOwogCiAJLyogRm9yIHNpbmdsZSBwb3J0IGNhcmRzIC0gb25seSBjbGFpbSBmdW5jdGlvbiAwICovCiAJaWYgKChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCkgJiYKQEAgLTEzNzIsNiArMTM3MiwxMiBAQAogCWJmYV90cmNfaW5pdChiZmFkLT50cmNtb2QpOwogCWJmYV90cmMoYmZhZCwgYmZhZF9pbnN0KTsKIAorCS8qIEFFTiBJTklUICovCisJSU5JVF9MSVNUX0hFQUQoJmJmYWQtPmZyZWVfYWVuX3EpOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5hY3RpdmVfYWVuX3EpOworCWZvciAoaSA9IDA7IGkgPCBCRkFfQUVOX01BWF9FTlRSWTsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZiZmFkLT5hZW5fbGlzdFtpXS5xZSwgJmJmYWQtPmZyZWVfYWVuX3EpOworCiAJaWYgKCEoYmZhZF9sb2FkX2Z3aW1nKHBkZXYpKSkgewogCQlrZnJlZShiZmFkLT50cmNtb2QpOwogCQlnb3RvIG91dF9hbGxvY190cmFjZV9mYWlsdXJlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2JzZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2JzZy5jCmluZGV4IDg5Zjg2M2UuLjA2ZmMwMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9ic2cuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYnNnLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJaWYgKGJmYWQtPmRpc2FibGVfYWN0aXZlKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gRUJVU1k7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJYmZhZC0+ZGlzYWJsZV9hY3RpdmUgPSBCRkFfVFJVRTsKQEAgLTkwLDYgKzkwLDcgQEAKIAliZmFfZ2V0X2FkYXB0ZXJfc2VyaWFsX251bSgmYmZhZC0+YmZhLCBpb2NtZC0+c2VyaWFsbnVtKTsKIAlpb2NtZC0+ZmFjdG9yeW53d24gPSBwYXR0ci5mYWN0b3J5bnd3bjsKIAlpb2NtZC0+ZmFjdG9yeXB3d24gPSBwYXR0ci5mYWN0b3J5cHd3bjsKKwlpb2NtZC0+YmZhZF9udW0gPSBiZmFkLT5pbnN0X25vOwogCWltX3BvcnQgPSBiZmFkLT5wcG9ydC5pbV9wb3J0OwogCWlvY21kLT5ob3N0ID0gaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm87CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CkBAIC0xNzgsNiArMTc5LDM4IEBACiB9CiAKIGludAorYmZhZF9pb2NtZF9pb2NfcmVzZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kLCB1bnNpZ25lZCBpbnQgdl9jbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZ2VuX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2dlbl9zICopY21kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAodl9jbWQgPT0gSU9DTURfSU9DX1JFU0VUX1NUQVRTKSB7CisJCWJmYV9pb2NfY2xlYXJfc3RhdHMoJmJmYWQtPmJmYSk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0gZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfSU9DX1JFU0VUX0ZXU1RBVFMpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpb2NtZC0+c3RhdHVzID0gYmZhX2lvY19md19zdGF0c19jbGVhcigmYmZhZC0+YmZhLmlvYyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfaW9jX3NldF9uYW1lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCwgdW5zaWduZWQgaW50IHZfY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2lvY19uYW1lX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2lvY19uYW1lX3MgKikgY21kOworCisJaWYgKHZfY21kID09IElPQ01EX0lPQ19TRVRfQURBUFRFUl9OQU1FKQorCQlzdHJjcHkoYmZhZC0+YWRhcHRlcl9uYW1lLCBpb2NtZC0+bmFtZSk7CisJZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfSU9DX1NFVF9QT1JUX05BTUUpCisJCXN0cmNweShiZmFkLT5wb3J0X25hbWUsIGlvY21kLT5uYW1lKTsKKworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCXJldHVybiAwOworfQorCitpbnQKIGJmYWRfaW9jbWRfaW9jZmNfZ2V0X2F0dHIoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQogewogCXN0cnVjdCBiZmFfYnNnX2lvY2ZjX2F0dHJfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfaW9jZmNfYXR0cl9zICopY21kOwpAQCAtMzA2LDYgKzMzOSw4MSBAQAogCXJldHVybiAwOwogfQogCitpbnQKK2JmYWRfaW9jbWRfcG9ydF9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZ2VuX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2dlbl9zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gYmZhX3BvcnRfY2xlYXJfc3RhdHMoJmJmYWQtPmJmYS5tb2R1bGVzLnBvcnQsCisJCQkJCWJmYWRfaGNiX2NvbXAsICZmY29tcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKGlvY21kLT5zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGJmYWQsIGlvY21kLT5zdGF0dXMpOworCQlyZXR1cm4gMDsKKwl9CisJd2FpdF9mb3JfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJaW9jbWQtPnN0YXR1cyA9IGZjb21wLnN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3NldF9wb3J0X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICppb2NtZCwgdW5zaWduZWQgaW50IHZfY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3BvcnRfY2ZnX3MgKmNtZCA9IChzdHJ1Y3QgYmZhX2JzZ19wb3J0X2NmZ19zICopaW9jbWQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAodl9jbWQgPT0gSU9DTURfUE9SVF9DRkdfVE9QTykKKwkJY21kLT5zdGF0dXMgPSBiZmFfZmNwb3J0X2NmZ190b3BvbG9neSgmYmZhZC0+YmZhLCBjbWQtPnBhcmFtKTsKKwllbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9QT1JUX0NGR19TUEVFRCkKKwkJY21kLT5zdGF0dXMgPSBiZmFfZmNwb3J0X2NmZ19zcGVlZCgmYmZhZC0+YmZhLCBjbWQtPnBhcmFtKTsKKwllbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9QT1JUX0NGR19BTFBBKQorCQljbWQtPnN0YXR1cyA9IGJmYV9mY3BvcnRfY2ZnX2hhcmRhbHBhKCZiZmFkLT5iZmEsIGNtZC0+cGFyYW0pOworCWVsc2UgaWYgKHZfY21kID09IElPQ01EX1BPUlRfQ0xSX0FMUEEpCisJCWNtZC0+c3RhdHVzID0gYmZhX2ZjcG9ydF9jbHJfaGFyZGFscGEoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3BvcnRfY2ZnX21heGZyc2l6ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfcG9ydF9jZmdfbWF4ZnJzaXplX3MgKmlvY21kID0KKwkJCQkoc3RydWN0IGJmYV9ic2dfcG9ydF9jZmdfbWF4ZnJzaXplX3MgKiljbWQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gYmZhX2ZjcG9ydF9jZmdfbWF4ZnJzaXplKCZiZmFkLT5iZmEsIGlvY21kLT5tYXhmcnNpemUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9wb3J0X2NmZ19iYnNjKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCwgdW5zaWduZWQgaW50IHZfY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2dlbl9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19nZW5fcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRCgmYmZhZC0+YmZhKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmIChiZmFfaW9jX2dldF90eXBlKCZiZmFkLT5iZmEuaW9jKSA9PSBCRkFfSU9DX1RZUEVfRkMpIHsKKwkJaWYgKHZfY21kID09IElPQ01EX1BPUlRfQkJTQ19FTkFCTEUpCisJCQlmY3BvcnQtPmNmZy5iYl9zY25fc3RhdGUgPSBCRkFfVFJVRTsKKwkJZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfUE9SVF9CQlNDX0RJU0FCTEUpCisJCQlmY3BvcnQtPmNmZy5iYl9zY25fc3RhdGUgPSBCRkFfRkFMU0U7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIGJmYWRfaW9jbWRfbHBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQogewpAQCAtMzU0LDYgKzQ2Miw0MCBAQAogfQogCiBpbnQKK2JmYWRfaW9jbWRfbHBvcnRfcmVzZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKmZjc19wb3J0OworCXN0cnVjdCBiZmFfYnNnX3Jlc2V0X3N0YXRzX3MgKmlvY21kID0KKwkJCShzdHJ1Y3QgYmZhX2JzZ19yZXNldF9zdGF0c19zICopY21kOworCXN0cnVjdCBiZmFfZmNwaW1fcyAqZmNwaW0gPSBCRkFfRkNQSU0oJmJmYWQtPmJmYSk7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWZjc19wb3J0ID0gYmZhX2Zjc19sb29rdXBfcG9ydCgmYmZhZC0+YmZhX2ZjcywKKwkJCQlpb2NtZC0+dmZfaWQsIGlvY21kLT52cHd3bik7CisJaWYgKGZjc19wb3J0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fTFdXTjsKKwkJZ290byBvdXQ7CisJfQorCisJYmZhX2Zjc19scG9ydF9jbGVhcl9zdGF0cyhmY3NfcG9ydCk7CisJLyogY2xlYXIgSU8gc3RhdHMgZnJvbSBhbGwgYWN0aXZlIGl0bmltcyAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKKwkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOworCQlpZiAoaXRuaW0tPnJwb3J0LT5ycG9ydF9pbmZvLmxwX3RhZyAhPSBmY3NfcG9ydC0+bHBfdGFnKQorCQkJY29udGludWU7CisJCWJmYV9pdG5pbV9jbGVhcl9zdGF0cyhpdG5pbSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKIGJmYWRfaW9jbWRfbHBvcnRfZ2V0X2lvc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQogewogCXN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKmZjc19wb3J0OwpAQCAtMzg5LDcgKzUzMSw3IEBACiAJdm9pZAkqaW9jbWRfYnVmcHRyOwogCiAJaWYgKGlvY21kLT5ucnBvcnRzID09IDApCi0JCXJldHVybiBFSU5WQUw7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGJmYWRfY2hrX2lvY21kX3N6KHBheWxvYWRfbGVuLAogCQkJc2l6ZW9mKHN0cnVjdCBiZmFfYnNnX2xwb3J0X2dldF9ycG9ydHNfcyksCkBAIC01MzksNiArNjgxLDE1MiBAQAogCXJldHVybiAwOwogfQogCitpbnQKK2JmYWRfaW9jbWRfcnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19ycG9ydF9yZXNldF9zdGF0c19zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX3Jwb3J0X3Jlc2V0X3N0YXRzX3MgKiljbWQ7CisJc3RydWN0IGJmYV9mY3NfbHBvcnRfcyAqZmNzX3BvcnQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqZmNzX3Jwb3J0OworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmY3NfcG9ydCA9IGJmYV9mY3NfbG9va3VwX3BvcnQoJmJmYWQtPmJmYV9mY3MsCisJCQkJaW9jbWQtPnZmX2lkLCBpb2NtZC0+cHd3bik7CisJaWYgKGZjc19wb3J0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fTFdXTjsKKwkJZ290byBvdXQ7CisJfQorCisJZmNzX3Jwb3J0ID0gYmZhX2Zjc19ycG9ydF9sb29rdXAoZmNzX3BvcnQsIGlvY21kLT5ycHd3bik7CisJaWYgKGZjc19ycG9ydCA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19VTktOT1dOX1JXV047CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgoY2hhciAqKSZmY3NfcnBvcnQtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zKSk7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2dldF9oYWxycG9ydChmY3NfcnBvcnQpOworCW1lbXNldCgmcnBvcnQtPnN0YXRzLCAwLCBzaXplb2YocnBvcnQtPnN0YXRzKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9ycG9ydF9zZXRfc3BlZWQoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3Jwb3J0X3NldF9zcGVlZF9zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX3Jwb3J0X3NldF9zcGVlZF9zICopY21kOworCXN0cnVjdCBiZmFfZmNzX2xwb3J0X3MgKmZjc19wb3J0OworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmZjc19ycG9ydDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWZjc19wb3J0ID0gYmZhX2Zjc19sb29rdXBfcG9ydCgmYmZhZC0+YmZhX2ZjcywKKwkJCQlpb2NtZC0+dmZfaWQsIGlvY21kLT5wd3duKTsKKwlpZiAoZmNzX3BvcnQgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfVU5LTk9XTl9MV1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlmY3NfcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2xvb2t1cChmY3NfcG9ydCwgaW9jbWQtPnJwd3duKTsKKwlpZiAoZmNzX3Jwb3J0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fUldXTjsKKwkJZ290byBvdXQ7CisJfQorCisJZmNzX3Jwb3J0LT5ycGYuYXNzaWduZWRfc3BlZWQgID0gaW9jbWQtPnNwZWVkOworCS8qIFNldCB0aGlzIHNwZWVkIGluIGYvdyBvbmx5IGlmIHRoZSBSUFNDIHNwZWVkIGlzIG5vdCBhdmFpbGFibGUgKi8KKwlpZiAoZmNzX3Jwb3J0LT5ycGYucnBzY19zcGVlZCA9PSBCRkFfUE9SVF9TUEVFRF9VTktOT1dOKQorCQliZmFfcnBvcnRfc3BlZWQoZmNzX3Jwb3J0LT5iZmFfcnBvcnQsIGlvY21kLT5zcGVlZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF92cG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqZmNzX3Zwb3J0OworCXN0cnVjdCBiZmFfYnNnX3Zwb3J0X2F0dHJfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfdnBvcnRfYXR0cl9zICopY21kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZmNzX3Zwb3J0ID0gYmZhX2Zjc192cG9ydF9sb29rdXAoJmJmYWQtPmJmYV9mY3MsCisJCQkJaW9jbWQtPnZmX2lkLCBpb2NtZC0+dnB3d24pOworCWlmIChmY3NfdnBvcnQgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfVU5LTk9XTl9WV1dOOworCQlnb3RvIG91dDsKKwl9CisKKwliZmFfZmNzX3Zwb3J0X2dldF9hdHRyKGZjc192cG9ydCwgJmlvY21kLT52cG9ydF9hdHRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKK291dDoKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3Zwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqZmNzX3Zwb3J0OworCXN0cnVjdCBiZmFfYnNnX3Zwb3J0X3N0YXRzX3MgKmlvY21kID0KKwkJCQkoc3RydWN0IGJmYV9ic2dfdnBvcnRfc3RhdHNfcyAqKWNtZDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWZjc192cG9ydCA9IGJmYV9mY3NfdnBvcnRfbG9va3VwKCZiZmFkLT5iZmFfZmNzLAorCQkJCWlvY21kLT52Zl9pZCwgaW9jbWQtPnZwd3duKTsKKwlpZiAoZmNzX3Zwb3J0ID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fVldXTjsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KCh2b2lkICopJmlvY21kLT52cG9ydF9zdGF0cywgKHZvaWQgKikmZmNzX3Zwb3J0LT52cG9ydF9zdGF0cywKKwkJc2l6ZW9mKHN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcykpOworCW1lbWNweSgodm9pZCAqKSZpb2NtZC0+dnBvcnRfc3RhdHMucG9ydF9zdGF0cywKKwkgICAgICAgKHZvaWQgKikmZmNzX3Zwb3J0LT5scG9ydC5zdGF0cywKKwkJc2l6ZW9mKHN0cnVjdCBiZmFfbHBvcnRfc3RhdHNfcykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfdnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICpmY3NfdnBvcnQ7CisJc3RydWN0IGJmYV9ic2dfcmVzZXRfc3RhdHNfcyAqaW9jbWQgPQorCQkJCShzdHJ1Y3QgYmZhX2JzZ19yZXNldF9zdGF0c19zICopY21kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZmNzX3Zwb3J0ID0gYmZhX2Zjc192cG9ydF9sb29rdXAoJmJmYWQtPmJmYV9mY3MsCisJCQkJaW9jbWQtPnZmX2lkLCBpb2NtZC0+dnB3d24pOworCWlmIChmY3NfdnBvcnQgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfVU5LTk9XTl9WV1dOOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoJmZjc192cG9ydC0+dnBvcnRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Zwb3J0X3N0YXRzX3MpKTsKKwltZW1zZXQoJmZjc192cG9ydC0+bHBvcnQuc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2xwb3J0X3N0YXRzX3MpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKK291dDoKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogYmZhZF9pb2NtZF9mYWJyaWNfZ2V0X2xwb3J0cyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQsCiAJCQl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW4pCkBAIC01ODIsNiArODcwLDY2IEBACiB9CiAKIGludAorYmZhZF9pb2NtZF9yYXRlbGltKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZ2VuX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2dlbl9zICopcGNtZDsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRCgmYmZhZC0+YmZhKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKGNtZCA9PSBJT0NNRF9SQVRFTElNX0VOQUJMRSkKKwkJZmNwb3J0LT5jZmcucmF0ZWxpbWl0ID0gQkZBX1RSVUU7CisJZWxzZSBpZiAoY21kID09IElPQ01EX1JBVEVMSU1fRElTQUJMRSkKKwkJZmNwb3J0LT5jZmcucmF0ZWxpbWl0ID0gQkZBX0ZBTFNFOworCisJaWYgKGZjcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPT0gQkZBX1BPUlRfU1BFRURfVU5LTk9XTikKKwkJZmNwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9IEJGQV9QT1JUX1NQRUVEXzFHQlBTOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYWRfcyAqYmZhZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ190cmxfc3BlZWRfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfdHJsX3NwZWVkX3MgKilwY21kOworCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IEJGQV9GQ1BPUlRfTU9EKCZiZmFkLT5iZmEpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkvKiBBdXRvIGFuZCBzcGVlZHMgZ3JlYXRlciB0aGFuIHRoZSBzdXBwb3J0ZWQgc3BlZWQsIGFyZSBpbnZhbGlkICovCisJaWYgKChpb2NtZC0+c3BlZWQgPT0gQkZBX1BPUlRfU1BFRURfQVVUTykgfHwKKwkgICAgKGlvY21kLT5zcGVlZCA+IGZjcG9ydC0+c3BlZWRfc3VwKSkgeworCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmY3BvcnQtPmNmZy50cmxfZGVmX3NwZWVkID0gaW9jbWQtPnNwZWVkOworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9jZmdfZmNwaW0oc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2ZjcGltX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2ZjcGltX3MgKiljbWQ7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNwaW1fcGF0aF90b3Zfc2V0KCZiZmFkLT5iZmEsIGlvY21kLT5wYXJhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJcmV0dXJuIDA7Cit9CisKK2ludAogYmZhZF9pb2NtZF9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQogewogCXN0cnVjdCBiZmFfYnNnX2ZjcGltX21vZHN0YXRzX3MgKmlvY21kID0KQEAgLTYwNCw2ICs5NTIsMjggQEAKIH0KIAogaW50CitiZmFkX2lvY21kX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZmNwaW1fbW9kc3RhdHNjbHJfcyAqaW9jbWQgPQorCQkJCShzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9tb2RzdGF0c2Nscl9zICopY21kOworCXN0cnVjdCBiZmFfZmNwaW1fcyAqZmNwaW0gPSBCRkFfRkNQSU0oJmJmYWQtPmJmYSk7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKKwkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOworCQliZmFfaXRuaW1fY2xlYXJfc3RhdHMoaXRuaW0pOworCX0KKwltZW1zZXQoJmZjcGltLT5kZWxfaXRuX3N0YXRzLCAwLAorCQlzaXplb2Yoc3RydWN0IGJmYV9mY3BpbV9kZWxfaXRuX3N0YXRzX3MpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwlyZXR1cm4gMDsKK30KKworaW50CiBiZmFkX2lvY21kX2ZjcGltX2dldF9kZWxfaXRuX3N0YXRzKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKIHsKIAlzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9kZWxfaXRuX3N0YXRzX3MgKmlvY21kID0KQEAgLTY3MCw2ICsxMDQwLDM1IEBACiB9CiAKIHN0YXRpYyBpbnQKK2JmYWRfaW9jbWRfaXRuaW1fcmVzZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3Jwb3J0X3Jlc2V0X3N0YXRzX3MgKmlvY21kID0KKwkJCShzdHJ1Y3QgYmZhX2JzZ19ycG9ydF9yZXNldF9zdGF0c19zICopY21kOworCXN0cnVjdCBiZmFfZmNzX2xwb3J0X3MJKmZjc19wb3J0OworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MJKml0bmltOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZmNzX3BvcnQgPSBiZmFfZmNzX2xvb2t1cF9wb3J0KCZiZmFkLT5iZmFfZmNzLAorCQkJCWlvY21kLT52Zl9pZCwgaW9jbWQtPnB3d24pOworCWlmICghZmNzX3BvcnQpCisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fTFdXTjsKKwllbHNlIHsKKwkJaXRuaW0gPSBiZmFfZmNzX2l0bmltX2xvb2t1cChmY3NfcG9ydCwgaW9jbWQtPnJwd3duKTsKKwkJaWYgKGl0bmltID09IE5VTEwpCisJCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19VTktOT1dOX1JXV047CisJCWVsc2UgeworCQkJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCQliZmFfZmNzX2l0bmltX3N0YXRzX2NsZWFyKGZjc19wb3J0LCBpb2NtZC0+cnB3d24pOworCQkJYmZhX2l0bmltX2NsZWFyX3N0YXRzKGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bihpdG5pbSkpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGJmYWRfaW9jbWRfaXRuaW1fZ2V0X2l0bnN0YXRzKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKIHsKIAlzdHJ1Y3QgYmZhX2JzZ19pdG5pbV9pdG5zdGF0c19zICppb2NtZCA9CkBAIC0xNTExLDExICsxOTEwLDU0NSBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIEJGQV9ERUJVR19GV19DT1JFX0NIVU5LX1NaCTB4NDAwMFUgLyogMTZLIGNodW5rcyBmb3IgRlcgZHVtcCAqLworaW50CitiZmFkX2lvY21kX2RlYnVnX2Z3X2NvcmUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kLAorCQkJdW5zaWduZWQgaW50IHBheWxvYWRfbGVuKQoreworCXN0cnVjdCBiZmFfYnNnX2RlYnVnX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2RlYnVnX3MgKiljbWQ7CisJdm9pZAkqaW9jbWRfYnVmcHRyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoYmZhZF9jaGtfaW9jbWRfc3oocGF5bG9hZF9sZW4sIHNpemVvZihzdHJ1Y3QgYmZhX2JzZ19kZWJ1Z19zKSwKKwkJCUJGQV9ERUJVR19GV19DT1JFX0NIVU5LX1NaKSAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1ZFUlNJT05fRkFJTDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGlvY21kLT5idWZzeiA8IEJGQV9ERUJVR19GV19DT1JFX0NIVU5LX1NaIHx8CisJCQkhSVNfQUxJR05FRChpb2NtZC0+YnVmc3osIHNpemVvZih1MTYpKSB8fAorCQkJIUlTX0FMSUdORUQoaW9jbWQtPm9mZnNldCwgc2l6ZW9mKHUzMikpKSB7CisJCWJmYV90cmMoYmZhZCwgQkZBX0RFQlVHX0ZXX0NPUkVfQ0hVTktfU1opOworCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlvY21kX2J1ZnB0ciA9IChjaGFyICopaW9jbWQgKyBzaXplb2Yoc3RydWN0IGJmYV9ic2dfZGVidWdfcyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBiZmFfaW9jX2RlYnVnX2Z3Y29yZSgmYmZhZC0+YmZhLmlvYywgaW9jbWRfYnVmcHRyLAorCQkJCSh1MzIgKikmaW9jbWQtPm9mZnNldCwgJmlvY21kLT5idWZzeik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9kZWJ1Z19jdGwoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kLCB1bnNpZ25lZCBpbnQgdl9jbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZ2VuX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2dlbl9zICopY21kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAodl9jbWQgPT0gSU9DTURfREVCVUdfRldfU1RBVEVfQ0xSKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhZC0+YmZhLmlvYy5kYmdfZndzYXZlX29uY2UgPSBCRkFfVFJVRTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9ERUJVR19QT1JUTE9HX0NMUikKKwkJYmZhZC0+cGxvZ19idWYuaGVhZCA9IGJmYWQtPnBsb2dfYnVmLnRhaWwgPSAwOworCWVsc2UgaWYgKHZfY21kID09IElPQ01EX0RFQlVHX1NUQVJUX0RUUkMpCisJCWJmYV90cmNfaW5pdChiZmFkLT50cmNtb2QpOworCWVsc2UgaWYgKHZfY21kID09IElPQ01EX0RFQlVHX1NUT1BfRFRSQykKKwkJYmZhX3RyY19zdG9wKGJmYWQtPnRyY21vZCk7CisKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3Bvcmdsb2dfY3RsKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19wb3J0bG9nY3RsX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX3BvcnRsb2djdGxfcyAqKWNtZDsKKworCWlmIChpb2NtZC0+Y3RsID09IEJGQV9UUlVFKQorCQliZmFkLT5wbG9nX2J1Zi5wbG9nX2VuYWJsZWQgPSAxOworCWVsc2UKKwkJYmZhZC0+cGxvZ19idWYucGxvZ19lbmFibGVkID0gMDsKKworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfZmNwaW1fY2ZnX3Byb2ZpbGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kLCB1bnNpZ25lZCBpbnQgdl9jbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZmNwaW1fcHJvZmlsZV9zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX2ZjcGltX3Byb2ZpbGVfcyAqKWNtZDsKKwlzdHJ1Y3QgdGltZXZhbCAgdHY7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAodl9jbWQgPT0gSU9DTURfRkNQSU1fUFJPRklMRV9PTikKKwkJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BpbV9wcm9maWxlX29uKCZiZmFkLT5iZmEsIHR2LnR2X3NlYyk7CisJZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfRkNQSU1fUFJPRklMRV9PRkYpCisJCWlvY21kLT5zdGF0dXMgPSBiZmFfZmNwaW1fcHJvZmlsZV9vZmYoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYmZhZF9pb2NtZF9pdG5pbV9nZXRfaW9wcm9maWxlKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19pdG5pbV9pb3Byb2ZpbGVfcyAqaW9jbWQgPQorCQkJCShzdHJ1Y3QgYmZhX2JzZ19pdG5pbV9pb3Byb2ZpbGVfcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2Zjc19scG9ydF9zICpmY3NfcG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZmNzX3BvcnQgPSBiZmFfZmNzX2xvb2t1cF9wb3J0KCZiZmFkLT5iZmFfZmNzLAorCQkJCWlvY21kLT52Zl9pZCwgaW9jbWQtPmxwd3duKTsKKwlpZiAoIWZjc19wb3J0KQorCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19VTktOT1dOX0xXV047CisJZWxzZSB7CisJCWl0bmltID0gYmZhX2Zjc19pdG5pbV9sb29rdXAoZmNzX3BvcnQsIGlvY21kLT5ycHd3bik7CisJCWlmIChpdG5pbSA9PSBOVUxMKQorCQkJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfVU5LTk9XTl9SV1dOOworCQllbHNlCisJCQlpb2NtZC0+c3RhdHVzID0gYmZhX2l0bmltX2dldF9pb3Byb2ZpbGUoCisJCQkJCQliZmFfZmNzX2l0bmltX2dldF9oYWxpdG4oaXRuaW0pLAorCQkJCQkJJmlvY21kLT5pb3Byb2ZpbGUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX2ZjcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2ZjcG9ydF9zdGF0c19zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX2ZjcG9ydF9zdGF0c19zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyBjYl9xZTsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJYmZhX3BlbmRpbmdfcV9pbml0KCZjYl9xZSwgKGJmYV9jYl9jYmZuX3QpYmZhZF9oY2JfY29tcCwKKwkJCSAgICZmY29tcCwgJmlvY21kLT5zdGF0cyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBiZmFfZmNwb3J0X2dldF9zdGF0cygmYmZhZC0+YmZhLCAmY2JfcWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmIChpb2NtZC0+c3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhiZmFkLCBpb2NtZC0+c3RhdHVzKTsKKwkJZ290byBvdXQ7CisJfQorCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCWlvY21kLT5zdGF0dXMgPSBmY29tcC5zdGF0dXM7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9mY3BvcnRfcmVzZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2dlbl9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19nZW5fcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCBmY29tcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXN0cnVjdCBiZmFfY2JfcGVuZGluZ19xX3MgY2JfcWU7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCWJmYV9wZW5kaW5nX3FfaW5pdCgmY2JfcWUsIChiZmFfY2JfY2Jmbl90KWJmYWRfaGNiX2NvbXAsICZmY29tcCwgTlVMTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoJmJmYWQtPmJmYSwgJmNiX3FlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jbWQtPnN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMoYmZhZCwgaW9jbWQtPnN0YXR1cyk7CisJCWdvdG8gb3V0OworCX0KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlpb2NtZC0+c3RhdHVzID0gZmNvbXAuc3RhdHVzOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfYm9vdF9jZmcoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2Jvb3RfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfYm9vdF9zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gYmZhX2ZsYXNoX3VwZGF0ZV9wYXJ0KEJGQV9GTEFTSCgmYmZhZC0+YmZhKSwKKwkJCUJGQV9GTEFTSF9QQVJUX0JPT1QsIFBDSV9GVU5DKGJmYWQtPnBjaWRldi0+ZGV2Zm4pLAorCQkJJmlvY21kLT5jZmcsIHNpemVvZihzdHJ1Y3QgYmZhX2Jvb3RfY2ZnX3MpLCAwLAorCQkJYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jbWQtPnN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIG91dDsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlpb2NtZC0+c3RhdHVzID0gZmNvbXAuc3RhdHVzOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfYm9vdF9xdWVyeShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfYm9vdF9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19ib290X3MgKiljbWQ7CisJc3RydWN0IGJmYWRfaGFsX2NvbXAgZmNvbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBiZmFfZmxhc2hfcmVhZF9wYXJ0KEJGQV9GTEFTSCgmYmZhZC0+YmZhKSwKKwkJCUJGQV9GTEFTSF9QQVJUX0JPT1QsIFBDSV9GVU5DKGJmYWQtPnBjaWRldi0+ZGV2Zm4pLAorCQkJJmlvY21kLT5jZmcsIHNpemVvZihzdHJ1Y3QgYmZhX2Jvb3RfY2ZnX3MpLCAwLAorCQkJYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jbWQtPnN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIG91dDsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlpb2NtZC0+c3RhdHVzID0gZmNvbXAuc3RhdHVzOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfcHJlYm9vdF9xdWVyeShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfcHJlYm9vdF9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19wcmVib290X3MgKiljbWQ7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqY2ZncnNwID0gYmZhZC0+YmZhLmlvY2ZjLmNmZ3JzcDsKKwlzdHJ1Y3QgYmZhX2Jvb3RfcGJjX3MgKnBiY2ZnID0gJmlvY21kLT5jZmc7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlwYmNmZy0+ZW5hYmxlID0gY2ZncnNwLT5wYmNfY2ZnLmJvb3RfZW5hYmxlZDsKKwlwYmNmZy0+bmJsdW5zID0gY2ZncnNwLT5wYmNfY2ZnLm5ibHVuczsKKwlwYmNmZy0+c3BlZWQgPSBjZmdyc3AtPnBiY19jZmcucG9ydF9zcGVlZDsKKwltZW1jcHkocGJjZmctPnBibHVuLCBjZmdyc3AtPnBiY19jZmcuYmx1biwgc2l6ZW9mKHBiY2ZnLT5wYmx1bikpOworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9ldGhib290X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZXRoYm9vdF9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19ldGhib290X3MgKiljbWQ7CisJc3RydWN0IGJmYWRfaGFsX2NvbXAgZmNvbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5zdGF0dXMgPSBiZmFfZmxhc2hfdXBkYXRlX3BhcnQoQkZBX0ZMQVNIKCZiZmFkLT5iZmEpLAorCQkJCUJGQV9GTEFTSF9QQVJUX1BYRUNGRywKKwkJCQliZmFkLT5iZmEuaW9jLnBvcnRfaWQsICZpb2NtZC0+Y2ZnLAorCQkJCXNpemVvZihzdHJ1Y3QgYmZhX2V0aGJvb3RfY2ZnX3MpLCAwLAorCQkJCWJmYWRfaGNiX2NvbXAsICZmY29tcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKGlvY21kLT5zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBvdXQ7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJaW9jbWQtPnN0YXR1cyA9IGZjb21wLnN0YXR1czsKK291dDoKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX2V0aGJvb3RfcXVlcnkoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2V0aGJvb3RfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfZXRoYm9vdF9zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gYmZhX2ZsYXNoX3JlYWRfcGFydChCRkFfRkxBU0goJmJmYWQtPmJmYSksCisJCQkJQkZBX0ZMQVNIX1BBUlRfUFhFQ0ZHLAorCQkJCWJmYWQtPmJmYS5pb2MucG9ydF9pZCwgJmlvY21kLT5jZmcsCisJCQkJc2l6ZW9mKHN0cnVjdCBiZmFfZXRoYm9vdF9jZmdfcyksIDAsCisJCQkJYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jbWQtPnN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIG91dDsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlpb2NtZC0+c3RhdHVzID0gZmNvbXAuc3RhdHVzOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfY2ZnX3RydW5rKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCwgdW5zaWduZWQgaW50IHZfY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2dlbl9zICppb2NtZCA9IChzdHJ1Y3QgYmZhX2JzZ19nZW5fcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRCgmYmZhZC0+YmZhKTsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF90cnVua19zICp0cnVuayA9ICZmY3BvcnQtPnRydW5rOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAodl9jbWQgPT0gSU9DTURfVFJVTktfRU5BQkxFKSB7CisJCXRydW5rLT5hdHRyLnN0YXRlID0gQkZBX1RSVU5LX09GRkxJTkU7CisJCWJmYV9mY3BvcnRfZGlzYWJsZSgmYmZhZC0+YmZhKTsKKwkJZmNwb3J0LT5jZmcudHJ1bmtlZCA9IEJGQV9UUlVFOworCX0gZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfVFJVTktfRElTQUJMRSkgeworCQl0cnVuay0+YXR0ci5zdGF0ZSA9IEJGQV9UUlVOS19ESVNBQkxFRDsKKwkJYmZhX2ZjcG9ydF9kaXNhYmxlKCZiZmFkLT5iZmEpOworCQlmY3BvcnQtPmNmZy50cnVua2VkID0gQkZBX0ZBTFNFOworCX0KKworCWlmICghYmZhX2ZjcG9ydF9pc19kaXNhYmxlZCgmYmZhZC0+YmZhKSkKKwkJYmZhX2ZjcG9ydF9lbmFibGUoJmJmYWQtPmJmYSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfdHJ1bmtfZ2V0X2F0dHIoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3RydW5rX2F0dHJfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfdHJ1bmtfYXR0cl9zICopY21kOworCXN0cnVjdCBiZmFfZmNwb3J0X3MgKmZjcG9ydCA9IEJGQV9GQ1BPUlRfTU9EKCZiZmFkLT5iZmEpOworCXN0cnVjdCBiZmFfZmNwb3J0X3RydW5rX3MgKnRydW5rID0gJmZjcG9ydC0+dHJ1bms7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwltZW1jcHkoKHZvaWQgKikmaW9jbWQtPmF0dHIsICh2b2lkICopJnRydW5rLT5hdHRyLAorCQlzaXplb2Yoc3RydWN0IGJmYV90cnVua19hdHRyX3MpKTsKKwlpb2NtZC0+YXR0ci5wb3J0X2lkID0gYmZhX2xwc19nZXRfYmFzZV9waWQoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3FvcyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQsIHVuc2lnbmVkIGludCB2X2NtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19nZW5fcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfZ2VuX3MgKiljbWQ7CisJc3RydWN0IGJmYV9mY3BvcnRfcyAqZmNwb3J0ID0gQkZBX0ZDUE9SVF9NT0QoJmJmYWQtPmJmYSk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoYmZhX2lvY19nZXRfdHlwZSgmYmZhZC0+YmZhLmlvYykgPT0gQkZBX0lPQ19UWVBFX0ZDKSB7CisJCWlmICh2X2NtZCA9PSBJT0NNRF9RT1NfRU5BQkxFKQorCQkJZmNwb3J0LT5jZmcucW9zX2VuYWJsZWQgPSBCRkFfVFJVRTsKKwkJZWxzZSBpZiAodl9jbWQgPT0gSU9DTURfUU9TX0RJU0FCTEUpCisJCQlmY3BvcnQtPmNmZy5xb3NfZW5hYmxlZCA9IEJGQV9GQUxTRTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfcW9zX2F0dHJfcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfcW9zX2F0dHJfcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRCgmYmZhZC0+YmZhKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlvY21kLT5hdHRyLnN0YXRlID0gZmNwb3J0LT5xb3NfYXR0ci5zdGF0ZTsKKwlpb2NtZC0+YXR0ci50b3RhbF9iYl9jciA9IGJlMzJfdG9fY3B1KGZjcG9ydC0+cW9zX2F0dHIudG90YWxfYmJfY3IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9xb3NfZ2V0X3ZjX2F0dHIoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3Fvc192Y19hdHRyX3MgKmlvY21kID0KKwkJCQkoc3RydWN0IGJmYV9ic2dfcW9zX3ZjX2F0dHJfcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2ZjcG9ydF9zICpmY3BvcnQgPSBCRkFfRkNQT1JUX01PRCgmYmZhZC0+YmZhKTsKKwlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgKmJmYV92Y19hdHRyID0gJmZjcG9ydC0+cW9zX3ZjX2F0dHI7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1MzIJaSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPmF0dHIudG90YWxfdmNfY291bnQgPSBiZTE2X3RvX2NwdShiZmFfdmNfYXR0ci0+dG90YWxfdmNfY291bnQpOworCWlvY21kLT5hdHRyLnNoYXJlZF9jcmVkaXQgID0gYmUxNl90b19jcHUoYmZhX3ZjX2F0dHItPnNoYXJlZF9jcmVkaXQpOworCWlvY21kLT5hdHRyLmVscF9vcG1vZGVfZmxhZ3MgID0KKwkJCQliZTMyX3RvX2NwdShiZmFfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyk7CisKKwkvKiBJbmRpdmlkdWFsIFZDIGluZm8gKi8KKwl3aGlsZSAoaSA8IGlvY21kLT5hdHRyLnRvdGFsX3ZjX2NvdW50KSB7CisJCWlvY21kLT5hdHRyLnZjX2luZm9baV0udmNfY3JlZGl0ID0KKwkJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS52Y19jcmVkaXQ7CisJCWlvY21kLT5hdHRyLnZjX2luZm9baV0uYm9ycm93X2NyZWRpdCA9CisJCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0uYm9ycm93X2NyZWRpdDsKKwkJaW9jbWQtPmF0dHIudmNfaW5mb1tpXS5wcmlvcml0eSA9CisJCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHk7CisJCWkrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3Fvc19nZXRfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX2ZjcG9ydF9zdGF0c19zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX2ZjcG9ydF9zdGF0c19zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyBjYl9xZTsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJYmZhX3BlbmRpbmdfcV9pbml0KCZjYl9xZSwgKGJmYV9jYl9jYmZuX3QpYmZhZF9oY2JfY29tcCwKKwkJCSAgICZmY29tcCwgJmlvY21kLT5zdGF0cyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJV0FSTl9PTighYmZhX2lvY19nZXRfZmNtb2RlKCZiZmFkLT5iZmEuaW9jKSk7CisJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BvcnRfZ2V0X3N0YXRzKCZiZmFkLT5iZmEsICZjYl9xZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKGlvY21kLT5zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGJmYWQsIGlvY21kLT5zdGF0dXMpOworCQlnb3RvIG91dDsKKwl9CisJd2FpdF9mb3JfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJaW9jbWQtPnN0YXR1cyA9IGZjb21wLnN0YXR1czsKK291dDoKKwlyZXR1cm4gMDsKK30KKworaW50CitiZmFkX2lvY21kX3Fvc19yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCB2b2lkICpjbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZ2VuX3MgKmlvY21kID0gKHN0cnVjdCBiZmFfYnNnX2dlbl9zICopY21kOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJc3RydWN0IGJmYV9jYl9wZW5kaW5nX3FfcyBjYl9xZTsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJYmZhX3BlbmRpbmdfcV9pbml0KCZjYl9xZSwgKGJmYV9jYl9jYmZuX3QpYmZhZF9oY2JfY29tcCwKKwkJCSAgICZmY29tcCwgTlVMTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJV0FSTl9PTighYmZhX2lvY19nZXRfZmNtb2RlKCZiZmFkLT5iZmEuaW9jKSk7CisJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BvcnRfY2xlYXJfc3RhdHMoJmJmYWQtPmJmYSwgJmNiX3FlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jbWQtPnN0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMoYmZhZCwgaW9jbWQtPnN0YXR1cyk7CisJCWdvdG8gb3V0OworCX0KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlpb2NtZC0+c3RhdHVzID0gZmNvbXAuc3RhdHVzOworb3V0OgorCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfdmZfZ2V0X3N0YXRzKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ192Zl9zdGF0c19zICppb2NtZCA9CisJCQkoc3RydWN0IGJmYV9ic2dfdmZfc3RhdHNfcyAqKWNtZDsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcwkqZmNzX3ZmOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJZmNzX3ZmID0gYmZhX2Zjc192Zl9sb29rdXAoJmJmYWQtPmJmYV9mY3MsIGlvY21kLT52Zl9pZCk7CisJaWYgKGZjc192ZiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpb2NtZC0+c3RhdHVzID0gQkZBX1NUQVRVU19VTktOT1dOX1ZGSUQ7CisJCWdvdG8gb3V0OworCX0KKwltZW1jcHkoKHZvaWQgKikmaW9jbWQtPnN0YXRzLCAodm9pZCAqKSZmY3NfdmYtPnN0YXRzLAorCQlzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF92Zl9jbHJfc3RhdHMoc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kKQoreworCXN0cnVjdCBiZmFfYnNnX3ZmX3Jlc2V0X3N0YXRzX3MgKmlvY21kID0KKwkJCShzdHJ1Y3QgYmZhX2JzZ192Zl9yZXNldF9zdGF0c19zICopY21kOworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zCSpmY3NfdmY7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmY3NfdmYgPSBiZmFfZmNzX3ZmX2xvb2t1cCgmYmZhZC0+YmZhX2ZjcywgaW9jbWQtPnZmX2lkKTsKKwlpZiAoZmNzX3ZmID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWlvY21kLT5zdGF0dXMgPSBCRkFfU1RBVFVTX1VOS05PV05fVkZJRDsKKwkJZ290byBvdXQ7CisJfQorCW1lbXNldCgodm9pZCAqKSZmY3NfdmYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW9jbWQtPnN0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9sdW5tYXNrKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKnBjbWQsIHVuc2lnbmVkIGludCB2X2NtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19nZW5fcyAqaW9jbWQgPSAoc3RydWN0IGJmYV9ic2dfZ2VuX3MgKilwY21kOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKHZfY21kID09IElPQ01EX0ZDUElNX0xVTk1BU0tfRU5BQkxFKQorCQlpb2NtZC0+c3RhdHVzID0gYmZhX2ZjcGltX2x1bm1hc2tfdXBkYXRlKCZiZmFkLT5iZmEsIEJGQV9UUlVFKTsKKwllbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9GQ1BJTV9MVU5NQVNLX0RJU0FCTEUpCisJCWlvY21kLT5zdGF0dXMgPSBiZmFfZmNwaW1fbHVubWFza191cGRhdGUoJmJmYWQtPmJmYSwgQkZBX0ZBTFNFKTsKKwllbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9GQ1BJTV9MVU5NQVNLX0NMRUFSKQorCQlpb2NtZC0+c3RhdHVzID0gYmZhX2ZjcGltX2x1bm1hc2tfY2xlYXIoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYmZhZF9pb2NtZF9mY3BpbV9sdW5tYXNrX3F1ZXJ5KHN0cnVjdCBiZmFkX3MgKmJmYWQsIHZvaWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9sdW5tYXNrX3F1ZXJ5X3MgKmlvY21kID0KKwkJCShzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9sdW5tYXNrX3F1ZXJ5X3MgKiljbWQ7CisJc3RydWN0IGJmYV9sdW5tYXNrX2NmZ19zICpsdW5fbWFzayA9ICZpb2NtZC0+bHVuX21hc2s7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpb2NtZC0+c3RhdHVzID0gYmZhX2ZjcGltX2x1bm1hc2tfcXVlcnkoJmJmYWQtPmJmYSwgbHVuX21hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitpbnQKK2JmYWRfaW9jbWRfZmNwaW1fY2ZnX2x1bm1hc2soc3RydWN0IGJmYWRfcyAqYmZhZCwgdm9pZCAqY21kLCB1bnNpZ25lZCBpbnQgdl9jbWQpCit7CisJc3RydWN0IGJmYV9ic2dfZmNwaW1fbHVubWFza19zICppb2NtZCA9CisJCQkJKHN0cnVjdCBiZmFfYnNnX2ZjcGltX2x1bm1hc2tfcyAqKWNtZDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmICh2X2NtZCA9PSBJT0NNRF9GQ1BJTV9MVU5NQVNLX0FERCkKKwkJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BpbV9sdW5tYXNrX2FkZCgmYmZhZC0+YmZhLCBpb2NtZC0+dmZfaWQsCisJCQkJCSZpb2NtZC0+cHd3biwgaW9jbWQtPnJwd3duLCBpb2NtZC0+bHVuKTsKKwllbHNlIGlmICh2X2NtZCA9PSBJT0NNRF9GQ1BJTV9MVU5NQVNLX0RFTEVURSkKKwkJaW9jbWQtPnN0YXR1cyA9IGJmYV9mY3BpbV9sdW5tYXNrX2RlbGV0ZSgmYmZhZC0+YmZhLAorCQkJCQlpb2NtZC0+dmZfaWQsICZpb2NtZC0+cHd3biwKKwkJCQkJaW9jbWQtPnJwd3duLCBpb2NtZC0+bHVuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogYmZhZF9pb2NtZF9oYW5kbGVyKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmlvY21kLAogCQl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW4pCiB7Ci0JaW50IHJjID0gRUlOVkFMOworCWludCByYyA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSU9DTURfSU9DX0VOQUJMRToKQEAgLTE1MzYsNiArMjQ2OSwxNCBAQAogCWNhc2UgSU9DTURfSU9DX0dFVF9GV1NUQVRTOgogCQlyYyA9IGJmYWRfaW9jbWRfaW9jX2dldF9md3N0YXRzKGJmYWQsIGlvY21kLCBwYXlsb2FkX2xlbik7CiAJCWJyZWFrOworCWNhc2UgSU9DTURfSU9DX1JFU0VUX1NUQVRTOgorCWNhc2UgSU9DTURfSU9DX1JFU0VUX0ZXU1RBVFM6CisJCXJjID0gYmZhZF9pb2NtZF9pb2NfcmVzZXRfc3RhdHMoYmZhZCwgaW9jbWQsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfSU9DX1NFVF9BREFQVEVSX05BTUU6CisJY2FzZSBJT0NNRF9JT0NfU0VUX1BPUlRfTkFNRToKKwkJcmMgPSBiZmFkX2lvY21kX2lvY19zZXRfbmFtZShiZmFkLCBpb2NtZCwgY21kKTsKKwkJYnJlYWs7CiAJY2FzZSBJT0NNRF9JT0NGQ19HRVRfQVRUUjoKIAkJcmMgPSBiZmFkX2lvY21kX2lvY2ZjX2dldF9hdHRyKGJmYWQsIGlvY21kKTsKIAkJYnJlYWs7CkBAIC0xNTU0LDEyICsyNDk1LDMxIEBACiAJY2FzZSBJT0NNRF9QT1JUX0dFVF9TVEFUUzoKIAkJcmMgPSBiZmFkX2lvY21kX3BvcnRfZ2V0X3N0YXRzKGJmYWQsIGlvY21kLCBwYXlsb2FkX2xlbik7CiAJCWJyZWFrOworCWNhc2UgSU9DTURfUE9SVF9SRVNFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX3BvcnRfcmVzZXRfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1BPUlRfQ0ZHX1RPUE86CisJY2FzZSBJT0NNRF9QT1JUX0NGR19TUEVFRDoKKwljYXNlIElPQ01EX1BPUlRfQ0ZHX0FMUEE6CisJY2FzZSBJT0NNRF9QT1JUX0NMUl9BTFBBOgorCQlyYyA9IGJmYWRfaW9jbWRfc2V0X3BvcnRfY2ZnKGJmYWQsIGlvY21kLCBjbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1BPUlRfQ0ZHX01BWEZSU1o6CisJCXJjID0gYmZhZF9pb2NtZF9wb3J0X2NmZ19tYXhmcnNpemUoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1BPUlRfQkJTQ19FTkFCTEU6CisJY2FzZSBJT0NNRF9QT1JUX0JCU0NfRElTQUJMRToKKwkJcmMgPSBiZmFkX2lvY21kX3BvcnRfY2ZnX2Jic2MoYmZhZCwgaW9jbWQsIGNtZCk7CisJCWJyZWFrOwogCWNhc2UgSU9DTURfTFBPUlRfR0VUX0FUVFI6CiAJCXJjID0gYmZhZF9pb2NtZF9scG9ydF9nZXRfYXR0cihiZmFkLCBpb2NtZCk7CiAJCWJyZWFrOwogCWNhc2UgSU9DTURfTFBPUlRfR0VUX1NUQVRTOgogCQlyYyA9IGJmYWRfaW9jbWRfbHBvcnRfZ2V0X3N0YXRzKGJmYWQsIGlvY21kKTsKIAkJYnJlYWs7CisJY2FzZSBJT0NNRF9MUE9SVF9SRVNFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX2xwb3J0X3Jlc2V0X3N0YXRzKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CiAJY2FzZSBJT0NNRF9MUE9SVF9HRVRfSU9TVEFUUzoKIAkJcmMgPSBiZmFkX2lvY21kX2xwb3J0X2dldF9pb3N0YXRzKGJmYWQsIGlvY21kKTsKIAkJYnJlYWs7CkBAIC0xNTc1LDEyICsyNTM1LDQwIEBACiAJY2FzZSBJT0NNRF9SUE9SVF9HRVRfU1RBVFM6CiAJCXJjID0gYmZhZF9pb2NtZF9ycG9ydF9nZXRfc3RhdHMoYmZhZCwgaW9jbWQpOwogCQlicmVhazsKKwljYXNlIElPQ01EX1JQT1JUX1JFU0VUX1NUQVRTOgorCQlyYyA9IGJmYWRfaW9jbWRfcnBvcnRfY2xyX3N0YXRzKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9SUE9SVF9TRVRfU1BFRUQ6CisJCXJjID0gYmZhZF9pb2NtZF9ycG9ydF9zZXRfc3BlZWQoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1ZQT1JUX0dFVF9BVFRSOgorCQlyYyA9IGJmYWRfaW9jbWRfdnBvcnRfZ2V0X2F0dHIoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1ZQT1JUX0dFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX3Zwb3J0X2dldF9zdGF0cyhiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfVlBPUlRfUkVTRVRfU1RBVFM6CisJCXJjID0gYmZhZF9pb2NtZF92cG9ydF9jbHJfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKIAljYXNlIElPQ01EX0ZBQlJJQ19HRVRfTFBPUlRTOgogCQlyYyA9IGJmYWRfaW9jbWRfZmFicmljX2dldF9scG9ydHMoYmZhZCwgaW9jbWQsIHBheWxvYWRfbGVuKTsKIAkJYnJlYWs7CisJY2FzZSBJT0NNRF9SQVRFTElNX0VOQUJMRToKKwljYXNlIElPQ01EX1JBVEVMSU1fRElTQUJMRToKKwkJcmMgPSBiZmFkX2lvY21kX3JhdGVsaW0oYmZhZCwgY21kLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfUkFURUxJTV9ERUZfU1BFRUQ6CisJCXJjID0gYmZhZF9pb2NtZF9yYXRlbGltX3NwZWVkKGJmYWQsIGNtZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX0ZDUElNX0ZBSUxPVkVSOgorCQlyYyA9IGJmYWRfaW9jbWRfY2ZnX2ZjcGltKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CiAJY2FzZSBJT0NNRF9GQ1BJTV9NT0RTVEFUUzoKIAkJcmMgPSBiZmFkX2lvY21kX2ZjcGltX2dldF9tb2RzdGF0cyhiZmFkLCBpb2NtZCk7CiAJCWJyZWFrOworCWNhc2UgSU9DTURfRkNQSU1fTU9EU1RBVFNDTFI6CisJCXJjID0gYmZhZF9pb2NtZF9mY3BpbV9jbHJfbW9kc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKIAljYXNlIElPQ01EX0ZDUElNX0RFTF9JVE5fU1RBVFM6CiAJCXJjID0gYmZhZF9pb2NtZF9mY3BpbV9nZXRfZGVsX2l0bl9zdGF0cyhiZmFkLCBpb2NtZCk7CiAJCWJyZWFrOwpAQCAtMTU5MCw2ICsyNTc4LDkgQEAKIAljYXNlIElPQ01EX0lUTklNX0dFVF9JT1NUQVRTOgogCQlyYyA9IGJmYWRfaW9jbWRfaXRuaW1fZ2V0X2lvc3RhdHMoYmZhZCwgaW9jbWQpOwogCQlicmVhazsKKwljYXNlIElPQ01EX0lUTklNX1JFU0VUX1NUQVRTOgorCQlyYyA9IGJmYWRfaW9jbWRfaXRuaW1fcmVzZXRfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKIAljYXNlIElPQ01EX0lUTklNX0dFVF9JVE5TVEFUUzoKIAkJcmMgPSBiZmFkX2lvY21kX2l0bmltX2dldF9pdG5zdGF0cyhiZmFkLCBpb2NtZCk7CiAJCWJyZWFrOwpAQCAtMTcwMiwxMSArMjY5Myw5MiBAQAogCWNhc2UgSU9DTURfREVCVUdfUE9SVExPRzoKIAkJcmMgPSBiZmFkX2lvY21kX3Bvcmdsb2dfZ2V0KGJmYWQsIGlvY21kKTsKIAkJYnJlYWs7CisJY2FzZSBJT0NNRF9ERUJVR19GV19DT1JFOgorCQlyYyA9IGJmYWRfaW9jbWRfZGVidWdfZndfY29yZShiZmFkLCBpb2NtZCwgcGF5bG9hZF9sZW4pOworCQlicmVhazsKKwljYXNlIElPQ01EX0RFQlVHX0ZXX1NUQVRFX0NMUjoKKwljYXNlIElPQ01EX0RFQlVHX1BPUlRMT0dfQ0xSOgorCWNhc2UgSU9DTURfREVCVUdfU1RBUlRfRFRSQzoKKwljYXNlIElPQ01EX0RFQlVHX1NUT1BfRFRSQzoKKwkJcmMgPSBiZmFkX2lvY21kX2RlYnVnX2N0bChiZmFkLCBpb2NtZCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9ERUJVR19QT1JUTE9HX0NUTDoKKwkJcmMgPSBiZmFkX2lvY21kX3Bvcmdsb2dfY3RsKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9GQ1BJTV9QUk9GSUxFX09OOgorCWNhc2UgSU9DTURfRkNQSU1fUFJPRklMRV9PRkY6CisJCXJjID0gYmZhZF9pb2NtZF9mY3BpbV9jZmdfcHJvZmlsZShiZmFkLCBpb2NtZCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9JVE5JTV9HRVRfSU9QUk9GSUxFOgorCQlyYyA9IGJmYWRfaW9jbWRfaXRuaW1fZ2V0X2lvcHJvZmlsZShiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfRkNQT1JUX0dFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX2ZjcG9ydF9nZXRfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX0ZDUE9SVF9SRVNFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX2ZjcG9ydF9yZXNldF9zdGF0cyhiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfQk9PVF9DRkc6CisJCXJjID0gYmZhZF9pb2NtZF9ib290X2NmZyhiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfQk9PVF9RVUVSWToKKwkJcmMgPSBiZmFkX2lvY21kX2Jvb3RfcXVlcnkoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1BSRUJPT1RfUVVFUlk6CisJCXJjID0gYmZhZF9pb2NtZF9wcmVib290X3F1ZXJ5KGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9FVEhCT09UX0NGRzoKKwkJcmMgPSBiZmFkX2lvY21kX2V0aGJvb3RfY2ZnKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9FVEhCT09UX1FVRVJZOgorCQlyYyA9IGJmYWRfaW9jbWRfZXRoYm9vdF9xdWVyeShiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfVFJVTktfRU5BQkxFOgorCWNhc2UgSU9DTURfVFJVTktfRElTQUJMRToKKwkJcmMgPSBiZmFkX2lvY21kX2NmZ190cnVuayhiZmFkLCBpb2NtZCwgY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9UUlVOS19HRVRfQVRUUjoKKwkJcmMgPSBiZmFkX2lvY21kX3RydW5rX2dldF9hdHRyKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9RT1NfRU5BQkxFOgorCWNhc2UgSU9DTURfUU9TX0RJU0FCTEU6CisJCXJjID0gYmZhZF9pb2NtZF9xb3MoYmZhZCwgaW9jbWQsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfUU9TX0dFVF9BVFRSOgorCQlyYyA9IGJmYWRfaW9jbWRfcW9zX2dldF9hdHRyKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9RT1NfR0VUX1ZDX0FUVFI6CisJCXJjID0gYmZhZF9pb2NtZF9xb3NfZ2V0X3ZjX2F0dHIoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1FPU19HRVRfU1RBVFM6CisJCXJjID0gYmZhZF9pb2NtZF9xb3NfZ2V0X3N0YXRzKGJmYWQsIGlvY21kKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NNRF9RT1NfUkVTRVRfU1RBVFM6CisJCXJjID0gYmZhZF9pb2NtZF9xb3NfcmVzZXRfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX1ZGX0dFVF9TVEFUUzoKKwkJcmMgPSBiZmFkX2lvY21kX3ZmX2dldF9zdGF0cyhiZmFkLCBpb2NtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfVkZfUkVTRVRfU1RBVFM6CisJCXJjID0gYmZhZF9pb2NtZF92Zl9jbHJfc3RhdHMoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX0ZDUElNX0xVTk1BU0tfRU5BQkxFOgorCWNhc2UgSU9DTURfRkNQSU1fTFVOTUFTS19ESVNBQkxFOgorCWNhc2UgSU9DTURfRkNQSU1fTFVOTUFTS19DTEVBUjoKKwkJcmMgPSBiZmFkX2lvY21kX2x1bm1hc2soYmZhZCwgaW9jbWQsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgSU9DTURfRkNQSU1fTFVOTUFTS19RVUVSWToKKwkJcmMgPSBiZmFkX2lvY21kX2ZjcGltX2x1bm1hc2tfcXVlcnkoYmZhZCwgaW9jbWQpOworCQlicmVhazsKKwljYXNlIElPQ01EX0ZDUElNX0xVTk1BU0tfQUREOgorCWNhc2UgSU9DTURfRkNQSU1fTFVOTUFTS19ERUxFVEU6CisJCXJjID0gYmZhZF9pb2NtZF9mY3BpbV9jZmdfbHVubWFzayhiZmFkLCBpb2NtZCwgY21kKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSBFSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCXJldHVybiAtcmM7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYnNnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYnNnLmgKaW5kZXggOTliMGU4YS4uZTg1OWFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2JzZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9ic2cuaApAQCAtMzAsMjQgKzMwLDQ4IEBACiAJSU9DTURfSU9DX0dFVF9JTkZPLAogCUlPQ01EX0lPQ19HRVRfU1RBVFMsCiAJSU9DTURfSU9DX0dFVF9GV1NUQVRTLAorCUlPQ01EX0lPQ19SRVNFVF9TVEFUUywKKwlJT0NNRF9JT0NfUkVTRVRfRldTVEFUUywKKwlJT0NNRF9JT0NfU0VUX0FEQVBURVJfTkFNRSwKKwlJT0NNRF9JT0NfU0VUX1BPUlRfTkFNRSwKIAlJT0NNRF9JT0NGQ19HRVRfQVRUUiwKIAlJT0NNRF9JT0NGQ19TRVRfSU5UUiwKIAlJT0NNRF9QT1JUX0VOQUJMRSwKIAlJT0NNRF9QT1JUX0RJU0FCTEUsCiAJSU9DTURfUE9SVF9HRVRfQVRUUiwKIAlJT0NNRF9QT1JUX0dFVF9TVEFUUywKKwlJT0NNRF9QT1JUX1JFU0VUX1NUQVRTLAorCUlPQ01EX1BPUlRfQ0ZHX1RPUE8sCisJSU9DTURfUE9SVF9DRkdfU1BFRUQsCisJSU9DTURfUE9SVF9DRkdfQUxQQSwKKwlJT0NNRF9QT1JUX0NGR19NQVhGUlNaLAorCUlPQ01EX1BPUlRfQ0xSX0FMUEEsCisJSU9DTURfUE9SVF9CQlNDX0VOQUJMRSwKKwlJT0NNRF9QT1JUX0JCU0NfRElTQUJMRSwKIAlJT0NNRF9MUE9SVF9HRVRfQVRUUiwKIAlJT0NNRF9MUE9SVF9HRVRfUlBPUlRTLAogCUlPQ01EX0xQT1JUX0dFVF9TVEFUUywKKwlJT0NNRF9MUE9SVF9SRVNFVF9TVEFUUywKIAlJT0NNRF9MUE9SVF9HRVRfSU9TVEFUUywKIAlJT0NNRF9SUE9SVF9HRVRfQVRUUiwKIAlJT0NNRF9SUE9SVF9HRVRfQUREUiwKIAlJT0NNRF9SUE9SVF9HRVRfU1RBVFMsCisJSU9DTURfUlBPUlRfUkVTRVRfU1RBVFMsCisJSU9DTURfUlBPUlRfU0VUX1NQRUVELAorCUlPQ01EX1ZQT1JUX0dFVF9BVFRSLAorCUlPQ01EX1ZQT1JUX0dFVF9TVEFUUywKKwlJT0NNRF9WUE9SVF9SRVNFVF9TVEFUUywKIAlJT0NNRF9GQUJSSUNfR0VUX0xQT1JUUywKKwlJT0NNRF9SQVRFTElNX0VOQUJMRSwKKwlJT0NNRF9SQVRFTElNX0RJU0FCTEUsCisJSU9DTURfUkFURUxJTV9ERUZfU1BFRUQsCisJSU9DTURfRkNQSU1fRkFJTE9WRVIsCiAJSU9DTURfRkNQSU1fTU9EU1RBVFMsCisJSU9DTURfRkNQSU1fTU9EU1RBVFNDTFIsCiAJSU9DTURfRkNQSU1fREVMX0lUTl9TVEFUUywKIAlJT0NNRF9JVE5JTV9HRVRfQVRUUiwKIAlJT0NNRF9JVE5JTV9HRVRfSU9TVEFUUywKKwlJT0NNRF9JVE5JTV9SRVNFVF9TVEFUUywKIAlJT0NNRF9JVE5JTV9HRVRfSVROU1RBVFMsCiAJSU9DTURfSU9DX1BDSUZOX0NGRywKIAlJT0NNRF9GQ1BPUlRfRU5BQkxFLApAQCAtODYsNiArMTEwLDM5IEBACiAJSU9DTURfUEhZX1JFQURfRlcsCiAJSU9DTURfVkhCQV9RVUVSWSwKIAlJT0NNRF9ERUJVR19QT1JUTE9HLAorCUlPQ01EX0RFQlVHX0ZXX0NPUkUsCisJSU9DTURfREVCVUdfRldfU1RBVEVfQ0xSLAorCUlPQ01EX0RFQlVHX1BPUlRMT0dfQ0xSLAorCUlPQ01EX0RFQlVHX1NUQVJUX0RUUkMsCisJSU9DTURfREVCVUdfU1RPUF9EVFJDLAorCUlPQ01EX0RFQlVHX1BPUlRMT0dfQ1RMLAorCUlPQ01EX0ZDUElNX1BST0ZJTEVfT04sCisJSU9DTURfRkNQSU1fUFJPRklMRV9PRkYsCisJSU9DTURfSVROSU1fR0VUX0lPUFJPRklMRSwKKwlJT0NNRF9GQ1BPUlRfR0VUX1NUQVRTLAorCUlPQ01EX0ZDUE9SVF9SRVNFVF9TVEFUUywKKwlJT0NNRF9CT09UX0NGRywKKwlJT0NNRF9CT09UX1FVRVJZLAorCUlPQ01EX1BSRUJPT1RfUVVFUlksCisJSU9DTURfRVRIQk9PVF9DRkcsCisJSU9DTURfRVRIQk9PVF9RVUVSWSwKKwlJT0NNRF9UUlVOS19FTkFCTEUsCisJSU9DTURfVFJVTktfRElTQUJMRSwKKwlJT0NNRF9UUlVOS19HRVRfQVRUUiwKKwlJT0NNRF9RT1NfRU5BQkxFLAorCUlPQ01EX1FPU19ESVNBQkxFLAorCUlPQ01EX1FPU19HRVRfQVRUUiwKKwlJT0NNRF9RT1NfR0VUX1ZDX0FUVFIsCisJSU9DTURfUU9TX0dFVF9TVEFUUywKKwlJT0NNRF9RT1NfUkVTRVRfU1RBVFMsCisJSU9DTURfVkZfR0VUX1NUQVRTLAorCUlPQ01EX1ZGX1JFU0VUX1NUQVRTLAorCUlPQ01EX0ZDUElNX0xVTk1BU0tfRU5BQkxFLAorCUlPQ01EX0ZDUElNX0xVTk1BU0tfRElTQUJMRSwKKwlJT0NNRF9GQ1BJTV9MVU5NQVNLX0NMRUFSLAorCUlPQ01EX0ZDUElNX0xVTk1BU0tfUVVFUlksCisJSU9DTURfRkNQSU1fTFVOTUFTS19BREQsCisJSU9DTURfRkNQSU1fTFVOTUFTS19ERUxFVEUsCiB9OwogCiBzdHJ1Y3QgYmZhX2JzZ19nZW5fcyB7CkBAIC05NCw2ICsxNTEsNDMgQEAKIAl1MTYJCXJzdmQ7CiB9OwogCitzdHJ1Y3QgYmZhX2JzZ19wb3J0bG9nY3RsX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXJzdmQ7CisJYmZhX2Jvb2xlYW5fdAljdGw7CisJaW50CQlpbnN0X25vOworfTsKKworc3RydWN0IGJmYV9ic2dfZmNwaW1fcHJvZmlsZV9zIHsKKwliZmFfc3RhdHVzX3QgICAgc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQlyc3ZkOworfTsKKworc3RydWN0IGJmYV9ic2dfaXRuaW1faW9wcm9maWxlX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXZmX2lkOworCXd3bl90CQlscHd3bjsKKwl3d25fdAkJcnB3d247CisJc3RydWN0IGJmYV9pdG5pbV9pb3Byb2ZpbGVfcyBpb3Byb2ZpbGU7Cit9OworCitzdHJ1Y3QgYmZhX2JzZ19mY3BvcnRfc3RhdHNfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcnN2ZDsKKwl1bmlvbiBiZmFfZmNwb3J0X3N0YXRzX3Ugc3RhdHM7Cit9OworCitzdHJ1Y3QgYmZhX2JzZ19pb2NfbmFtZV9zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQlyc3ZkOworCWNoYXIJCW5hbWVbQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOXTsKK307CisKIHN0cnVjdCBiZmFfYnNnX2lvY19pbmZvX3MgewogCWJmYV9zdGF0dXNfdAlzdGF0dXM7CiAJdTE2CQliZmFkX251bTsKQEAgLTE2NCw2ICsyNTgsMjAgQEAKIAlzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zCWF0dHI7CiB9OwogCitzdHJ1Y3QgYmZhX2JzZ19wb3J0X2NmZ19zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQlyc3ZkOworCXUzMgkJcGFyYW07CisJdTMyCQlyc3ZkMTsKK307CisKK3N0cnVjdCBiZmFfYnNnX3BvcnRfY2ZnX21heGZyc2l6ZV9zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQltYXhmcnNpemU7Cit9OworCiBzdHJ1Y3QgYmZhX2JzZ19wb3J0X3N0YXRzX3MgewogCWJmYV9zdGF0dXNfdAlzdGF0dXM7CiAJdTE2CQliZmFkX251bTsKQEAgLTIzNyw2ICszNDUsNDcgQEAKIAl1MzIJCWx1bjsKIH07CiAKK3N0cnVjdCBiZmFfYnNnX3Jwb3J0X3Jlc2V0X3N0YXRzX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXZmX2lkOworCXd3bl90CQlwd3duOworCXd3bl90CQlycHd3bjsKK307CisKK3N0cnVjdCBiZmFfYnNnX3Jwb3J0X3NldF9zcGVlZF9zIHsKKwliZmFfc3RhdHVzX3QJCXN0YXR1czsKKwl1MTYJCQliZmFkX251bTsKKwl1MTYJCQl2Zl9pZDsKKwllbnVtIGJmYV9wb3J0X3NwZWVkCXNwZWVkOworCXUzMgkJCXJzdmQ7CisJd3duX3QJCQlwd3duOworCXd3bl90CQkJcnB3d247Cit9OworCitzdHJ1Y3QgYmZhX2JzZ192cG9ydF9hdHRyX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXZmX2lkOworCXd3bl90CQl2cHd3bjsKKwlzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyB2cG9ydF9hdHRyOworfTsKKworc3RydWN0IGJmYV9ic2dfdnBvcnRfc3RhdHNfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJdmZfaWQ7CisJd3duX3QJCXZwd3duOworCXN0cnVjdCBiZmFfdnBvcnRfc3RhdHNfcyB2cG9ydF9zdGF0czsKK307CisKK3N0cnVjdCBiZmFfYnNnX3Jlc2V0X3N0YXRzX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXZmX2lkOworCXd3bl90CQl2cHd3bjsKK307CisKIHN0cnVjdCBiZmFfYnNnX2ZhYnJpY19nZXRfbHBvcnRzX3MgewogCWJmYV9zdGF0dXNfdAlzdGF0dXM7CiAJdTE2CQliZmFkX251bTsKQEAgLTI0Niw2ICszOTUsMTkgQEAKIAl1MzIJCXJzdmQ7CiB9OwogCitzdHJ1Y3QgYmZhX2JzZ190cmxfc3BlZWRfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcnN2ZDsKKwllbnVtIGJmYV9wb3J0X3NwZWVkIHNwZWVkOworfTsKKworc3RydWN0IGJmYV9ic2dfZmNwaW1fcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcGFyYW07Cit9OworCiBzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9tb2RzdGF0c19zIHsKIAliZmFfc3RhdHVzX3QJc3RhdHVzOwogCXUxNgkJYmZhZF9udW07CkBAIC0yNTgsNiArNDIwLDExIEBACiAJc3RydWN0IGJmYV9mY3BpbV9kZWxfaXRuX3N0YXRzX3MgbW9kc3RhdHM7CiB9OwogCitzdHJ1Y3QgYmZhX2JzZ19mY3BpbV9tb2RzdGF0c2Nscl9zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07Cit9OworCiBzdHJ1Y3QgYmZhX2JzZ19pdG5pbV9hdHRyX3MgewogCWJmYV9zdGF0dXNfdAlzdGF0dXM7CiAJdTE2CQliZmFkX251bTsKQEAgLTQ4NSw2ICs2NTIsNzYgQEAKIAlzdHJ1Y3QgYmZhX3ZoYmFfYXR0cl9zCWF0dHI7CiB9OwogCitzdHJ1Y3QgYmZhX2JzZ19ib290X3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXJzdmQ7CisJc3RydWN0IGJmYV9ib290X2NmZ19zCWNmZzsKK307CisKK3N0cnVjdCBiZmFfYnNnX3ByZWJvb3RfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgYmZhX2Jvb3RfcGJjX3MJY2ZnOworfTsKKworc3RydWN0IGJmYV9ic2dfZXRoYm9vdF9zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQlyc3ZkOworCXN0cnVjdCAgYmZhX2V0aGJvb3RfY2ZnX3MgIGNmZzsKK307CisKK3N0cnVjdCBiZmFfYnNnX3RydW5rX2F0dHJfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgYmZhX3RydW5rX2F0dHJfcyBhdHRyOworfTsKKworc3RydWN0IGJmYV9ic2dfcW9zX2F0dHJfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MJYXR0cjsKK307CisKK3N0cnVjdCBiZmFfYnNnX3Fvc192Y19hdHRyX3MgeworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CisJdTE2CQliZmFkX251bTsKKwl1MTYJCXJzdmQ7CisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIGF0dHI7Cit9OworCitzdHJ1Y3QgYmZhX2JzZ192Zl9zdGF0c19zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQl2Zl9pZDsKKwlzdHJ1Y3QgYmZhX3ZmX3N0YXRzX3MJc3RhdHM7Cit9OworCitzdHJ1Y3QgYmZhX2JzZ192Zl9yZXNldF9zdGF0c19zIHsKKwliZmFfc3RhdHVzX3QJc3RhdHVzOworCXUxNgkJYmZhZF9udW07CisJdTE2CQl2Zl9pZDsKK307CisKK3N0cnVjdCBiZmFfYnNnX2ZjcGltX2x1bm1hc2tfcXVlcnlfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXN0cnVjdCBiZmFfbHVubWFza19jZmdfcyBsdW5fbWFzazsKK307CisKK3N0cnVjdCBiZmFfYnNnX2ZjcGltX2x1bm1hc2tfcyB7CisJYmZhX3N0YXR1c190CXN0YXR1czsKKwl1MTYJCWJmYWRfbnVtOworCXUxNgkJdmZfaWQ7CisJd3duX3QJCXB3d247CisJd3duX3QJCXJwd3duOworCXN0cnVjdCBzY3NpX2x1bglsdW47Cit9OworCiBzdHJ1Y3QgYmZhX2JzZ19mY3B0X3MgewogCWJmYV9zdGF0dXNfdCAgICBzdGF0dXM7CiAJdTE2CQl2Zl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaAppbmRleCA0ODY2MWEyLi5iZGE5OTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oCkBAIC01Niw3ICs1Niw3IEBACiAjaWZkZWYgQkZBX0RSSVZFUl9WRVJTSU9OCiAjZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgQkZBX0RSSVZFUl9WRVJTSU9OCiAjZWxzZQotI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgICIzLjAuMi4xIgorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgICIzLjAuMi4yIgogI2VuZGlmCiAKICNkZWZpbmUgQkZBRF9QUk9UT19OQU1FIEZDUElfTkFNRQpAQCAtMjI0LDYgKzIyNCwxMCBAQAogCWNoYXIgKnJlZ2RhdGE7CiAJdTMyIHJlZ2xlbjsKIAlzdHJ1Y3QgZGVudHJ5ICpiZmFkX2RlbnRyeV9maWxlc1s1XTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfYWVuX3E7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfYWVuX3E7CisJc3RydWN0IGJmYV9hZW5fZW50cnlfcwlhZW5fbGlzdFtCRkFfQUVOX01BWF9FTlRSWV07CisJc3BpbmxvY2tfdAkJYmZhZF9hZW5fc3BpbmxvY2s7CiB9OwogCiAvKiBCRkFEIHN0YXRlIG1hY2hpbmUgZXZlbnRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCmluZGV4IGYyYmY4MTIuLjAxMzEyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCkBAIC02NTYsNiArNjU2LDMxIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIGJmYWRfYWVuX2ltX25vdGlmeV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9zICppbSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmZhZF9pbV9zLCBhZW5faW1fbm90aWZ5X3dvcmspOworCXN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgKmFlbl9lbnRyeTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gaW0tPmJmYWQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBiZmFkLT5wcG9ydC5pbV9wb3J0LT5zaG9zdDsKKwl2b2lkICpldmVudF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmJmYWQtPmFjdGl2ZV9hZW5fcSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfYWVuX3NwaW5sb2NrLCBmbGFncyk7CisJCWJmYV9xX2RlcSgmYmZhZC0+YWN0aXZlX2Flbl9xLCAmYWVuX2VudHJ5KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9hZW5fc3BpbmxvY2ssIGZsYWdzKTsKKwkJZXZlbnRfZGF0YSA9IChjaGFyICopYWVuX2VudHJ5ICsgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpOworCQlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LCBmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCQkJc2l6ZW9mKHN0cnVjdCBiZmFfYWVuX2VudHJ5X3MpIC0KKwkJCQlzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCisJCQkJKGNoYXIgKilldmVudF9kYXRhLCBCRkFEX05MX1ZFTkRPUl9JRCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2Flbl9zcGlubG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZhZW5fZW50cnktPnFlLCAmYmZhZC0+ZnJlZV9hZW5fcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfYWVuX3NwaW5sb2NrLCBmbGFncyk7CisJfQorfQorCiBiZmFfc3RhdHVzX3QKIGJmYWRfaW1fcHJvYmUoc3RydWN0IGJmYWRfcyAqYmZhZCkKIHsKQEAgLTY3Niw2ICs3MDEsNyBAQAogCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOwogCX0KIAorCUlOSVRfV09SSygmaW0tPmFlbl9pbV9ub3RpZnlfd29yaywgYmZhZF9hZW5faW1fbm90aWZ5X2hhbmRsZXIpOwogZXh0OgogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKaW5kZXggNGZlMzRkNS4uMDA0YjZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTExNSw4ICsxMTUsMzAgQEAKIAlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRydl93b3JrcTsKIAljaGFyICAgICAgICAgICAgZHJ2X3dvcmtxX25hbWVbS09CSl9OQU1FX0xFTl07CisJc3RydWN0IHdvcmtfc3RydWN0CWFlbl9pbV9ub3RpZnlfd29yazsKIH07CiAKKyNkZWZpbmUgYmZhZF9nZXRfYWVuX2VudHJ5KF9kcnYsIF9lbnRyeSkgZG8gewkJCQlcCisJdW5zaWduZWQgbG9uZwlfZmxhZ3M7CQkJCQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKCYoX2RydiktPmJmYWRfYWVuX3NwaW5sb2NrLCBfZmxhZ3MpOwkJXAorCWJmYV9xX2RlcSgmKF9kcnYpLT5mcmVlX2Flbl9xLCAmKF9lbnRyeSkpOwkJCVwKKwlpZiAoX2VudHJ5KQkJCQkJCQlcCisJCWxpc3RfYWRkX3RhaWwoJihfZW50cnkpLT5xZSwgJihfZHJ2KS0+YWN0aXZlX2Flbl9xKTsJXAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihfZHJ2KS0+YmZhZF9hZW5fc3BpbmxvY2ssIF9mbGFncyk7CVwKK30gd2hpbGUgKDApCisKKy8qIHBvc3QgZmNfaG9zdCB2ZW5kb3IgZXZlbnQgKi8KKyNkZWZpbmUgYmZhZF9pbV9wb3N0X3ZlbmRvcl9ldmVudChfZW50cnksIF9kcnYsIF9jbnQsIF9jYXQsIF9ldnQpIGRvIHsJICAgICAgXAorCWRvX2dldHRpbWVvZmRheSgmKF9lbnRyeSktPmFlbl90dik7CQkJCSAgICAgIFwKKwkoX2VudHJ5KS0+YmZhZF9udW0gPSAoX2RydiktPmluc3Rfbm87CQkJCSAgICAgIFwKKwkoX2VudHJ5KS0+c2VxX251bSA9IChfY250KTsJCQkJCSAgICAgIFwKKwkoX2VudHJ5KS0+YWVuX2NhdGVnb3J5ID0gKF9jYXQpOwkJCQkgICAgICBcCisJKF9lbnRyeSktPmFlbl90eXBlID0gKF9ldnQpOwkJCQkJICAgICAgXAorCWlmICgoX2RydiktPmJmYWRfZmxhZ3MgJiBCRkFEX0ZDNF9QUk9CRV9ET05FKQkJCSAgICAgIFwKKwkJcXVldWVfd29yaygoX2RydiktPmltLT5kcnZfd29ya3EsCQkJICAgICAgXAorCQkJICAgJihfZHJ2KS0+aW0tPmFlbl9pbV9ub3RpZnlfd29yayk7CQkgICAgICBcCit9IHdoaWxlICgwKQorCiBzdHJ1Y3QgU2NzaV9Ib3N0ICpiZmFkX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsCiAJCQkJc3RydWN0IGJmYWRfcyAqKTsKIGJmYV9zdGF0dXNfdCBiZmFkX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmaS5oCmluZGV4IDFlMjU4ZDUuLmIyYmEwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvYmZpLmgKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmkuaApAQCAtNzg0LDYgKzc4NCwxNyBAQAogfTsKIAogLyoKKyAqCVNGUCBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKi8KK3N0cnVjdCBiZmlfc2ZwX3Njbl9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaHI7CS8qIGhvc3QgbXNnIGhlYWRlciAgICAgICAgKi8KKwl1OAlldmVudDsKKwl1OAlzZnBpZDsKKwl1OAlwb21sdmw7CS8qIHBvbSBsZXZlbDogbm9ybWFsL3dhcm5pbmcvYWxhcm0gKi8KKwl1OAlpc19lbGI7CS8qIGUtbG9vcGJhY2sgKi8KK307CisKKy8qCiAgKglTRlAgc3RhdGUKICAqLwogZW51bSBiZmFfc2ZwX3N0YXRfZSB7CkBAIC05MjYsNiArOTM3LDE1IEBACiB9OwogCiAvKgorICogRmxhc2ggZXZlbnQgbm90aWZpY2F0aW9uCisgKi8KK3N0cnVjdCBiZmlfZmxhc2hfZXZlbnRfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CS8qIENvbW1vbiBtc2cgaGVhZGVyICovCisJYmZhX3N0YXR1c190CQlzdGF0dXM7CisJdTMyCQkJcGFyYW07Cit9OworCisvKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQlESUFHCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmggYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oCmluZGV4IGQ5MjQyMzYuLjQyMjI4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX0JOWDJGQ19IXwogLyogYm54MmZjLmg6IEJyb2FkY29tIE5ldFh0cmVtZSBJSSBMaW51eCBGQ29FIG9mZmxvYWQgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlICJibngyZmNfY29uc3RhbnRzLmgiCiAKICNkZWZpbmUgQk5YMkZDX05BTUUJCSJibngyZmMiCi0jZGVmaW5lIEJOWDJGQ19WRVJTSU9OCQkiMS4wLjMiCisjZGVmaW5lIEJOWDJGQ19WRVJTSU9OCQkiMS4wLjQiCiAKICNkZWZpbmUgUEZYCQkJImJueDJmYzogIgogCkBAIC0xNDEsNiArMTQxLDEwIEBACiAKICNkZWZpbmUgQk5YMkZDX1JOSURfSEJBCQkJMHg3CiAKKyNkZWZpbmUgU1JSX1JFVFJZX0NPVU5UCQkJNQorI2RlZmluZSBSRUNfUkVUUllfQ09VTlQJCQkxCisjZGVmaW5lIEJOWDJGQ19OVU1fRVJSX0JJVFMJCTYzCisKIC8qIGJueDJmYyBkcml2ZXIgdXNlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBmY29lX3BlcmNwdV9zICovCiBleHRlcm4gc3RydWN0IGZjb2VfcGVyY3B1X3MgYm54MmZjX2dsb2JhbDsKIApAQCAtMTUzLDE4ICsxNTcsMTMgQEAKIH07CiAKIHN0cnVjdCBibngyZmNfaGJhIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBjbmljX2RldiAqY25pYzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OwogCXVuc2lnbmVkIGxvbmcgcmVnX3dpdGhfY25pYzsKIAkJI2RlZmluZSBCTlgyRkNfQ05JQ19SRUdJU1RFUkVEICAgICAgICAgICAxCi0Jc3RydWN0IHBhY2tldF90eXBlIGZjb2VfcGFja2V0X3R5cGU7Ci0Jc3RydWN0IHBhY2tldF90eXBlIGZpcF9wYWNrZXRfdHlwZTsKIAlzdHJ1Y3QgYm54MmZjX2NtZF9tZ3IgKmNtZF9tZ3I7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnRpbWVyX3dvcmtfcXVldWU7Ci0Jc3RydWN0IGtyZWYga3JlZjsKIAlzcGlubG9ja190IGhiYV9sb2NrOwogCXN0cnVjdCBtdXRleCBoYmFfbXV0ZXg7CiAJdW5zaWduZWQgbG9uZyBhZGFwdGVyX3N0YXRlOwpAQCAtMTcyLDE1ICsxNzEsOSBAQAogCQkjZGVmaW5lIEFEQVBURVJfU1RBVEVfR09JTkdfRE9XTgkxCiAJCSNkZWZpbmUgQURBUFRFUl9TVEFURV9MSU5LX0RPV04JCTIKIAkJI2RlZmluZSBBREFQVEVSX1NUQVRFX1JFQURZCQkzCi0JdTMyIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgaW5pdF9kb25lOwotCQkjZGVmaW5lIEJOWDJGQ19GV19JTklUX0RPTkUJCTAKLQkJI2RlZmluZSBCTlgyRkNfQ1RMUl9JTklUX0RPTkUJCTEKLQkJI2RlZmluZSBCTlgyRkNfQ1JFQVRFX0RPTkUJCTIKLQlzdHJ1Y3QgZmNvZV9jdGxyIGN0bHI7Ci0Jc3RydWN0IGxpc3RfaGVhZCB2cG9ydHM7Ci0JdTggdmxhbl9lbmFibGVkOwotCWludCB2bGFuX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCSNkZWZpbmUgQk5YMkZDX0ZMQUdfRldfSU5JVF9ET05FCTAKKwkJI2RlZmluZSBCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEwJMQogCXUzMiBuZXh0X2Nvbm5faWQ7CiAJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKip0YXNrX2N0eDsKIAlkbWFfYWRkcl90ICp0YXNrX2N0eF9kbWE7CkBAIC0xOTksMzggKzE5Miw0MSBAQAogCWNoYXIgKmR1bW15X2J1ZmZlcjsKIAlkbWFfYWRkcl90IGR1bW15X2J1Zl9kbWE7CiAKKwkvKiBBY3RpdmUgbGlzdCBvZiBvZmZsb2FkZWQgc2Vzc2lvbnMgKi8KKwlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICoqdGd0X29mbGRfbGlzdDsKKworCS8qIHN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgZmNvZV9zdGF0aXN0aWNzX3BhcmFtcyAqc3RhdHNfYnVmZmVyOwogCWRtYV9hZGRyX3Qgc3RhdHNfYnVmX2RtYTsKLQotCS8qCi0JICogUENJIHJlbGF0ZWQgaW5mby4KLQkgKi8KLQl1MTYgcGNpX2RpZDsKLQl1MTYgcGNpX3ZpZDsKLQl1MTYgcGNpX3NkaWQ7Ci0JdTE2IHBjaV9zdmlkOwotCXUxNiBwY2lfZnVuYzsKLQl1MTYgcGNpX2Rldm5vOwotCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpsMl90aHJlYWQ7Ci0KLQkvKiBsaW5rZG93biBoYW5kbGluZyAqLwotCXdhaXRfcXVldWVfaGVhZF90IHNodXRkb3duX3dhaXQ7Ci0JaW50IHdhaXRfZm9yX2xpbmtfZG93bjsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzdGF0X3JlcV9kb25lOwogCiAJLypkZXN0cm95IGhhbmRsaW5nICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZGVzdHJveV90aW1lcjsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZXN0cm95X3dhaXQ7CiAKLQkvKiBBY3RpdmUgbGlzdCBvZiBvZmZsb2FkZWQgc2Vzc2lvbnMgKi8KLQlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3Rfb2ZsZF9saXN0W0JOWDJGQ19OVU1fTUFYX1NFU1NdOworCS8qIGxpbmtkb3duIGhhbmRsaW5nICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2h1dGRvd25fd2FpdDsKKwlpbnQgd2FpdF9mb3JfbGlua19kb3duOwogCWludCBudW1fb2ZsZF9zZXNzOwotCi0JLyogc3RhdGlzdGljcyAqLwotCXN0cnVjdCBjb21wbGV0aW9uIHN0YXRfcmVxX2RvbmU7CisJc3RydWN0IGxpc3RfaGVhZCB2cG9ydHM7CiB9OwogCi0jZGVmaW5lIGJueDJmY19mcm9tX2N0bHIoZmlwKSBjb250YWluZXJfb2YoZmlwLCBzdHJ1Y3QgYm54MmZjX2hiYSwgY3RscikKK3N0cnVjdCBibngyZmNfaW50ZXJmYWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgbG9uZyBpZl9mbGFnczsKKwkJI2RlZmluZSBCTlgyRkNfQ1RMUl9JTklUX0RPTkUJCTAKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHBhY2tldF90eXBlIGZjb2VfcGFja2V0X3R5cGU7CisJc3RydWN0IHBhY2tldF90eXBlIGZpcF9wYWNrZXRfdHlwZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdGltZXJfd29ya19xdWV1ZTsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBmY29lX2N0bHIgY3RscjsKKwl1OCB2bGFuX2VuYWJsZWQ7CisJaW50IHZsYW5faWQ7Cit9OworCisjZGVmaW5lIGJueDJmY19mcm9tX2N0bHIoZmlwKSBjb250YWluZXJfb2YoZmlwLCBzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSwgY3RscikKIAogc3RydWN0IGJueDJmY19scG9ydCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjUyLDkgKzI0OCwxMSBAQAogCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAl2b2lkIF9faW9tZW0gKmN0eF9iYXNlOwogI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUJCTB4NDAKKwl1MzIgaW9fdGltZW91dDsKIAl1MzIgZmNvZV9jb25uX2lkOwogCXUzMiBjb250ZXh0X2lkOwogCXUzMiBzaWQ7CisJaW50IGRldl90eXBlOwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICNkZWZpbmUgQk5YMkZDX0ZMQUdfU0VTU0lPTl9SRUFEWQkweDEKQEAgLTI2MiwxMCArMjYwLDkgQEAKICNkZWZpbmUgQk5YMkZDX0ZMQUdfRElTQUJMRUQJCTB4MwogI2RlZmluZSBCTlgyRkNfRkxBR19ERVNUUk9ZRUQJCTB4NAogI2RlZmluZSBCTlgyRkNfRkxBR19PRkxEX1JFUV9DTVBMCTB4NQotI2RlZmluZSBCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEwJMHg2Ci0jZGVmaW5lIEJOWDJGQ19GTEFHX0NUWF9BTExPQ19GQUlMVVJFCTB4NwotI2RlZmluZSBCTlgyRkNfRkxBR19VUExEX1JFUV9DT01QTAkweDgKLSNkZWZpbmUgQk5YMkZDX0ZMQUdfRVhQTF9MT0dPCQkweDkKKyNkZWZpbmUgQk5YMkZDX0ZMQUdfQ1RYX0FMTE9DX0ZBSUxVUkUJMHg2CisjZGVmaW5lIEJOWDJGQ19GTEFHX1VQTERfUkVRX0NPTVBMCTB4NworI2RlZmluZSBCTlgyRkNfRkxBR19FWFBMX0xPR08JCTB4OAogCiAJdTggc3JjX2FkZHJbRVRIX0FMRU5dOwogCXUzMiBtYXhfc3FlczsKQEAgLTMyNywxMiArMzI0LDkgQEAKIAlzcGlubG9ja190IGNxX2xvY2s7CiAJYXRvbWljX3QgbnVtX2FjdGl2ZV9pb3M7CiAJdTMyIGZsdXNoX2luX3Byb2c7Ci0JdW5zaWduZWQgbG9uZyB3b3JrX3RpbWVfc2xpY2U7CiAJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3Rhc2tfbGlzdDsKIAlzdHJ1Y3QgYm54MmZjX2NtZCAqcGVuZGluZ19xdWV1ZVtCTlgyRkNfU1FfV1FFU19NQVgrMV07Ci0JYXRvbWljX3QgcGk7Ci0JYXRvbWljX3QgY2k7CiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfY21kX3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgZWxzX3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgaW9fcmV0aXJlX3F1ZXVlOwpAQCAtMzY3LDYgKzM2MSw4IEBACiAJc3RydWN0IGJueDJmY19jbWQgKmFib3J0ZWRfaW9fcmVxOwogCXN0cnVjdCBibngyZmNfY21kICppb19yZXE7CiAJdTE2IGwyX294aWQ7CisJdTMyIG9mZnNldDsKKwllbnVtIGZjX3JjdGwgcl9jdGw7CiB9OwogCiAvKiBibngyZmMgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KQEAgLTM4MCw2ICszNzYsNyBAQAogI2RlZmluZSBCTlgyRkNfQUJUUwkJCTMKICNkZWZpbmUgQk5YMkZDX0VMUwkJCTQKICNkZWZpbmUgQk5YMkZDX0NMRUFOVVAJCQk1CisjZGVmaW5lIEJOWDJGQ19TRVFfQ0xFQU5VUAkJNgogCXU4IGlvX3JlcV9mbGFnczsKIAlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwpAQCAtMzkzLDYgKzM5MCw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gdG1fZG9uZTsKIAlpbnQgd2FpdF9mb3JfY29tcDsKIAl1MTYgeGlkOworCXN0cnVjdCBmY29lX2Vycl9yZXBvcnRfZW50cnkgZXJyX2VudHJ5OwogCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICp0YXNrOwogCXN0cnVjdCBpb19iZHQgKmJkX3RibDsKIAlzdHJ1Y3QgZmNwX3JzcCAqcnNwOwpAQCAtNDA5LDYgKzQwNywxMiBAQAogI2RlZmluZSBCTlgyRkNfRkxBR19JT19DT01QTAkJMHg5CiAjZGVmaW5lIEJOWDJGQ19GTEFHX0VMU19ET05FCQkweGEKICNkZWZpbmUgQk5YMkZDX0ZMQUdfRUxTX1RJTUVPVVQJCTB4YgorI2RlZmluZSBCTlgyRkNfRkxBR19DTURfTE9TVAkJMHhjCisjZGVmaW5lIEJOWDJGQ19GTEFHX1NSUl9TRU5UCQkweGQKKwl1OCByZWNfcmV0cnk7CisJdTggc3JyX3JldHJ5OworCXUzMiBzcnJfb2Zmc2V0OworCXU4IHNycl9yY3RsOwogCXUzMiBmY3BfcmVzaWQ7CiAJdTMyIGZjcF9yc3BfbGVuOwogCXUzMiBmY3Bfc25zX2xlbjsKQEAgLTQzOSw2ICs0NDMsNyBAQAogCiAKIAorc3RydWN0IGJueDJmY19jbWQgKmJueDJmY19jbWRfYWxsb2Moc3RydWN0IGJueDJmY19ycG9ydCAqdGd0KTsKIHN0cnVjdCBibngyZmNfY21kICpibngyZmNfZWxzdG1fYWxsb2Moc3RydWN0IGJueDJmY19ycG9ydCAqdGd0LCBpbnQgdHlwZSk7CiB2b2lkIGJueDJmY19jbWRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKTsKIGludCBibngyZmNfcXVldWVjb21tYW5kKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIHN0cnVjdCBzY3NpX2NtbmQgKnNjX2NtZCk7CkBAIC00NzYsNiArNDgxLDEwIEBACiB2b2lkIGJueDJmY19pbml0X2NsZWFudXBfdGFzayhzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxLAogCQkJICAgICAgc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKnRhc2ssCiAJCQkgICAgICB1MTYgb3JpZ194aWQpOwordm9pZCBibngyZmNfaW5pdF9zZXFfY2xlYW51cF90YXNrKHN0cnVjdCBibngyZmNfY21kICpzZXFfY2xudXBfcmVxLAorCQkJCSAgc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKnRhc2ssCisJCQkJICBzdHJ1Y3QgYm54MmZjX2NtZCAqb3JpZ19pb19yZXEsCisJCQkJICB1MzIgb2Zmc2V0KTsKIHZvaWQgYm54MmZjX2luaXRfbXBfdGFzayhzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxLAogCQkJIHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICp0YXNrKTsKIHZvaWQgYm54MmZjX2luaXRfdGFzayhzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxLApAQCAtNTI1LDUgKzUzNCwxMyBAQAogCQkJCSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgICB1MzIgZnJhbWVfbGVuLCB1MTYgbDJfb3hpZCk7CiBpbnQgYm54MmZjX3NlbmRfc3RhdF9yZXEoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7CitpbnQgYm54MmZjX3Bvc3RfaW9fcmVxKHN0cnVjdCBibngyZmNfcnBvcnQgKnRndCwgc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSk7CitpbnQgYm54MmZjX3NlbmRfcmVjKHN0cnVjdCBibngyZmNfY21kICpvcmlnX2lvX3JlcSk7CitpbnQgYm54MmZjX3NlbmRfc3JyKHN0cnVjdCBibngyZmNfY21kICpvcmlnX2lvX3JlcSwgdTMyIG9mZnNldCwgdTggcl9jdGwpOwordm9pZCBibngyZmNfcHJvY2Vzc19zZXFfY2xlYW51cF9jb21wbChzdHJ1Y3QgYm54MmZjX2NtZCAqc2VxX2NsbnVwX3JlcSwKKwkJCQkgICAgICBzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzaywKKwkJCQkgICAgICB1OCByeF9zdGF0ZSk7CitpbnQgYm54MmZjX2luaXRpYXRlX3NlcV9jbGVhbnVwKHN0cnVjdCBibngyZmNfY21kICpvcmlnX2lvX3JlcSwgdTMyIG9mZnNldCwKKwkJCQllbnVtIGZjX3JjdGwgcl9jdGwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19kZWJ1Zy5oCmluZGV4IDdmNmFmZjYuLjM0MTZkOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2RlYnVnLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZGVidWcuaApAQCAtMjEsMjEgKzIxLDIxIEBACiAKICNkZWZpbmUgQk5YMkZDX0VMU19EQkcoZm10LCBhcmcuLi4pCQkJCQlcCiAJQk5YMkZDX0NIS19MT0dHSU5HKExPR19FTFMsCQkJCQlcCi0JCQkgICBwcmludGsoS0VSTl9BTEVSVCBQRlggZm10LCAjI2FyZykpCisJCQkgICBwcmludGsoS0VSTl9JTkZPIFBGWCBmbXQsICMjYXJnKSkKIAogI2RlZmluZSBCTlgyRkNfTUlTQ19EQkcoZm10LCBhcmcuLi4pCQkJCQlcCiAJQk5YMkZDX0NIS19MT0dHSU5HKExPR19NSVNDLAkJCQkJXAotCQkJICAgcHJpbnRrKEtFUk5fQUxFUlQgUEZYIGZtdCwgIyNhcmcpKQorCQkJICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggZm10LCAjI2FyZykpCiAKICNkZWZpbmUgQk5YMkZDX0lPX0RCRyhpb19yZXEsIGZtdCwgYXJnLi4uKQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoIWlvX3JlcSB8fCAhaW9fcmVxLT5wb3J0IHx8ICFpb19yZXEtPnBvcnQtPmxwb3J0IHx8CVwKIAkJICAgICFpb19yZXEtPnBvcnQtPmxwb3J0LT5ob3N0KQkJCQlcCiAJCQlCTlgyRkNfQ0hLX0xPR0dJTkcoTE9HX0lPLAkJCVwKLQkJCSAgIHByaW50ayhLRVJOX0FMRVJUIFBGWCAiTlVMTCAiIGZtdCwgIyNhcmcpKTsJXAorCQkJICAgcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5VTEwgIiBmbXQsICMjYXJnKSk7CVwKIAkJZWxzZQkJCQkJCQlcCiAJCQlCTlgyRkNfQ0hLX0xPR0dJTkcoTE9HX0lPLAkJCVwKLQkJCSAgIHNob3N0X3ByaW50ayhLRVJOX0FMRVJULAkJCVwKKwkJCSAgIHNob3N0X3ByaW50ayhLRVJOX0lORk8sCQkJXAogCQkJCSAgIChpb19yZXEpLT5wb3J0LT5scG9ydC0+aG9zdCwJCVwKIAkJCQkgICBQRlggInhpZDoweCV4ICIgZm10LAkJCVwKIAkJCQkgICAoaW9fcmVxKS0+eGlkLCAjI2FyZykpOwkJXApAQCAtNDYsMTAgKzQ2LDEwIEBACiAJCWlmICghdGd0IHx8ICF0Z3QtPnBvcnQgfHwgIXRndC0+cG9ydC0+bHBvcnQgfHwJCVwKIAkJICAgICF0Z3QtPnBvcnQtPmxwb3J0LT5ob3N0IHx8ICF0Z3QtPnJwb3J0KQkJXAogCQkJQk5YMkZDX0NIS19MT0dHSU5HKExPR19UR1QsCQkJXAotCQkJICAgcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJOVUxMICIgZm10LCAjI2FyZykpOwlcCisJCQkgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiTlVMTCAiIGZtdCwgIyNhcmcpKTsJXAogCQllbHNlCQkJCQkJCVwKIAkJCUJOWDJGQ19DSEtfTE9HR0lORyhMT0dfVEdULAkJCVwKLQkJCSAgIHNob3N0X3ByaW50ayhLRVJOX0FMRVJULAkJCVwKKwkJCSAgIHNob3N0X3ByaW50ayhLRVJOX0lORk8sCQkJXAogCQkJCSAgICh0Z3QpLT5wb3J0LT5scG9ydC0+aG9zdCwJCVwKIAkJCQkgICBQRlggInBvcnQ6JXggIiBmbXQsCQkJXAogCQkJCSAgICh0Z3QpLT5ycG9ydC0+cG9ydF9pZCwgIyNhcmcpKTsJXApAQCAtNjAsMTAgKzYwLDEwIEBACiAJZG8gewkJCQkJCQkJXAogCQlpZiAoIWxwb3J0IHx8ICFscG9ydC0+aG9zdCkJCQkJXAogCQkJQk5YMkZDX0NIS19MT0dHSU5HKExPR19IQkEsCQkJXAotCQkJICAgcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJOVUxMICIgZm10LCAjI2FyZykpOwlcCisJCQkgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiTlVMTCAiIGZtdCwgIyNhcmcpKTsJXAogCQllbHNlCQkJCQkJCVwKIAkJCUJOWDJGQ19DSEtfTE9HR0lORyhMT0dfSEJBLAkJCVwKLQkJCSAgIHNob3N0X3ByaW50ayhLRVJOX0FMRVJULCBscG9ydC0+aG9zdCwJXAorCQkJICAgc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgbHBvcnQtPmhvc3QsCVwKIAkJCQkgICBQRlggZm10LCAjI2FyZykpOwkJCVwKIAl9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCmluZGV4IDdlODkxNDMuLmQ2NmRjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Vscy5jCkBAIC0zLDcgKzMsNyBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIGhlbHBlciByb3V0aW5lcyB0aGF0IGhhbmRsZSBFTFMgcmVxdWVzdHMKICAqIGFuZCByZXNwb25zZXMuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjUzLDEzICsyNTMsNDE3IEBACiAJcmV0dXJuIHJjOwogfQogCit2b2lkIGJueDJmY19zcnJfY29tcGwoc3RydWN0IGJueDJmY19lbHNfY2JfYXJnICpjYl9hcmcpCit7CisJc3RydWN0IGJueDJmY19tcF9yZXEgKm1wX3JlcTsKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmY19oZHIsICpmaDsKKwlzdHJ1Y3QgYm54MmZjX2NtZCAqc3JyX3JlcTsKKwlzdHJ1Y3QgYm54MmZjX2NtZCAqb3JpZ19pb19yZXE7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJdm9pZCAqcmVzcF9idWY7CisJdTMyIHJlc3BfbGVuLCBoZHJfbGVuOworCXU4IG9wY29kZTsKKwlpbnQgcmMgPSAwOworCisJb3JpZ19pb19yZXEgPSBjYl9hcmctPmFib3J0ZWRfaW9fcmVxOworCXNycl9yZXEgPSBjYl9hcmctPmlvX3JlcTsKKwlpZiAodGVzdF9iaXQoQk5YMkZDX0ZMQUdfSU9fQ09NUEwsICZvcmlnX2lvX3JlcS0+cmVxX2ZsYWdzKSkgeworCQlCTlgyRkNfSU9fREJHKHNycl9yZXEsICJzcnJfY29tcGw6IHhpZCAtIDB4JXggY29tcGxldGVkIiwKKwkJCW9yaWdfaW9fcmVxLT54aWQpOworCQlnb3RvIHNycl9jb21wbF9kb25lOworCX0KKwlpZiAodGVzdF9iaXQoQk5YMkZDX0ZMQUdfSVNTVUVfQUJUUywgJm9yaWdfaW9fcmVxLT5yZXFfZmxhZ3MpKSB7CisJCUJOWDJGQ19JT19EQkcoc3JyX3JlcSwgInJlYyBhYnRzIGluIHByb2cgIgorCQkgICAgICAgIm9yaWdfaW8gLSAweCV4XG4iLAorCQkJb3JpZ19pb19yZXEtPnhpZCk7CisJCWdvdG8gc3JyX2NvbXBsX2RvbmU7CisJfQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQk5YMkZDX0ZMQUdfRUxTX1RJTUVPVVQsICZzcnJfcmVxLT5yZXFfZmxhZ3MpKSB7CisJCS8qIFNSUiB0aW1lZG91dCAqLworCQlCTlgyRkNfSU9fREJHKHNycl9yZXEsICJzcnIgdGltZWQgb3V0LCBhYm9ydCAiCisJCSAgICAgICAib3JpZ19pbyAtIDB4JXhcbiIsCisJCQlvcmlnX2lvX3JlcS0+eGlkKTsKKwkJcmMgPSBibngyZmNfaW5pdGlhdGVfYWJ0cyhzcnJfcmVxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpIHsKKwkJCUJOWDJGQ19JT19EQkcoc3JyX3JlcSwgInNycl9jb21wbDogaW5pdGlhdGVfYWJ0cyAiCisJCQkJImZhaWxlZC4gaXNzdWUgY2xlYW51cFxuIik7CisJCQlibngyZmNfaW5pdGlhdGVfY2xlYW51cChzcnJfcmVxKTsKKwkJfQorCQlvcmlnX2lvX3JlcS0+c3JyX3JldHJ5Kys7CisJCWlmIChvcmlnX2lvX3JlcS0+c3JyX3JldHJ5IDw9IFNSUl9SRVRSWV9DT1VOVCkgeworCQkJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0ID0gb3JpZ19pb19yZXEtPnRndDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKwkJCXJjID0gYm54MmZjX3NlbmRfc3JyKG9yaWdfaW9fcmVxLAorCQkJCQkgICAgIG9yaWdfaW9fcmVxLT5zcnJfb2Zmc2V0LAorCQkJCQkgICAgIG9yaWdfaW9fcmVxLT5zcnJfcmN0bCk7CisJCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCQkJaWYgKCFyYykKKwkJCQlnb3RvIHNycl9jb21wbF9kb25lOworCQl9CisKKwkJcmMgPSBibngyZmNfaW5pdGlhdGVfYWJ0cyhvcmlnX2lvX3JlcSk7CisJCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCQlCTlgyRkNfSU9fREJHKHNycl9yZXEsICJzcnJfY29tcGw6IGluaXRpYXRlX2FidHMgIgorCQkJCSJmYWlsZWQgeGlkID0gMHgleC4gaXNzdWUgY2xlYW51cFxuIiwKKwkJCQlvcmlnX2lvX3JlcS0+eGlkKTsKKwkJCWJueDJmY19pbml0aWF0ZV9jbGVhbnVwKG9yaWdfaW9fcmVxKTsKKwkJfQorCQlnb3RvIHNycl9jb21wbF9kb25lOworCX0KKwltcF9yZXEgPSAmKHNycl9yZXEtPm1wX3JlcSk7CisJZmNfaGRyID0gJihtcF9yZXEtPnJlc3BfZmNfaGRyKTsKKwlyZXNwX2xlbiA9IG1wX3JlcS0+cmVzcF9sZW47CisJcmVzcF9idWYgPSBtcF9yZXEtPnJlc3BfYnVmOworCisJaGRyX2xlbiA9IHNpemVvZigqZmNfaGRyKTsKKwlidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAic3JyIGJ1ZjogbWVtIGFsbG9jIGZhaWx1cmVcbiIpOworCQlnb3RvIHNycl9jb21wbF9kb25lOworCX0KKwltZW1jcHkoYnVmLCBmY19oZHIsIGhkcl9sZW4pOworCW1lbWNweShidWYgKyBoZHJfbGVuLCByZXNwX2J1ZiwgcmVzcF9sZW4pOworCisJZnAgPSBmY19mcmFtZV9hbGxvYyhOVUxMLCByZXNwX2xlbik7CisJaWYgKCFmcCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmY19mcmFtZV9hbGxvYyBmYWlsdXJlXG4iKTsKKwkJZ290byBmcmVlX2J1ZjsKKwl9CisKKwlmaCA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopIGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCS8qIENvcHkgRkMgRnJhbWUgaGVhZGVyIGFuZCBwYXlsb2FkIGludG8gdGhlIGZyYW1lICovCisJbWVtY3B5KGZoLCBidWYsIGhkcl9sZW4gKyByZXNwX2xlbik7CisKKwlvcGNvZGUgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgRUxTX0xTX0FDQzoKKwkJQk5YMkZDX0lPX0RCRyhzcnJfcmVxLCAiU1JSIHN1Y2Nlc3NcbiIpOworCQlicmVhazsKKwljYXNlIEVMU19MU19SSlQ6CisJCUJOWDJGQ19JT19EQkcoc3JyX3JlcSwgIlNSUiByZWplY3RlZFxuIik7CisJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMob3JpZ19pb19yZXEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykgeworCQkJQk5YMkZDX0lPX0RCRyhzcnJfcmVxLCAic3JyX2NvbXBsOiBpbml0aWF0ZV9hYnRzICIKKwkJCQkiZmFpbGVkIHhpZCA9IDB4JXguIGlzc3VlIGNsZWFudXBcbiIsCisJCQkJb3JpZ19pb19yZXEtPnhpZCk7CisJCQlibngyZmNfaW5pdGlhdGVfY2xlYW51cChvcmlnX2lvX3JlcSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQk5YMkZDX0lPX0RCRyhzcnJfcmVxLCAic3JyIGNvbXBsIC0gaW52YWxpZCBvcGNvZGUgPSAlZFxuIiwKKwkJCW9wY29kZSk7CisJCWJyZWFrOworCX0KKwlmY19mcmFtZV9mcmVlKGZwKTsKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitzcnJfY29tcGxfZG9uZToKKwlrcmVmX3B1dCgmb3JpZ19pb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOworfQorCit2b2lkIGJueDJmY19yZWNfY29tcGwoc3RydWN0IGJueDJmY19lbHNfY2JfYXJnICpjYl9hcmcpCit7CisJc3RydWN0IGJueDJmY19jbWQgKm9yaWdfaW9fcmVxLCAqbmV3X2lvX3JlcTsKKwlzdHJ1Y3QgYm54MmZjX2NtZCAqcmVjX3JlcTsKKwlzdHJ1Y3QgYm54MmZjX21wX3JlcSAqbXBfcmVxOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZjX2hkciwgKmZoOworCXN0cnVjdCBmY19lbHNfbHNfcmp0ICpyanQ7CisJc3RydWN0IGZjX2Vsc19yZWNfYWNjICphY2M7CisJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0OworCXN0cnVjdCBmY29lX2Vycl9yZXBvcnRfZW50cnkgKmVycl9lbnRyeTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY19jbWQ7CisJZW51bSBmY19yY3RsIHJfY3RsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl2b2lkICpyZXNwX2J1ZjsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCXU4IG9wY29kZTsKKwl1MzIgb2Zmc2V0OworCXUzMiBlX3N0YXQ7CisJdTMyIHJlc3BfbGVuLCBoZHJfbGVuOworCWludCByYyA9IDA7CisJYm9vbCBzZW5kX3NlcV9jbG5wID0gZmFsc2U7CisJYm9vbCBhYm9ydF9pbyA9IGZhbHNlOworCisJQk5YMkZDX01JU0NfREJHKCJFbnRlcmVkIHJlY19jb21wbCBjYWxsYmFja1xuIik7CisJcmVjX3JlcSA9IGNiX2FyZy0+aW9fcmVxOworCW9yaWdfaW9fcmVxID0gY2JfYXJnLT5hYm9ydGVkX2lvX3JlcTsKKwlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJyZWNfY29tcGw6IG9yaWcgeGlkID0gMHgleCIsIG9yaWdfaW9fcmVxLT54aWQpOworCXRndCA9IG9yaWdfaW9fcmVxLT50Z3Q7CisKKwlpZiAodGVzdF9iaXQoQk5YMkZDX0ZMQUdfSU9fQ09NUEwsICZvcmlnX2lvX3JlcS0+cmVxX2ZsYWdzKSkgeworCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJjb21wbGV0ZWQiCisJCSAgICAgICAib3JpZ19pbyAtIDB4JXhcbiIsCisJCQlvcmlnX2lvX3JlcS0+eGlkKTsKKwkJZ290byByZWNfY29tcGxfZG9uZTsKKwl9CisJaWYgKHRlc3RfYml0KEJOWDJGQ19GTEFHX0lTU1VFX0FCVFMsICZvcmlnX2lvX3JlcS0+cmVxX2ZsYWdzKSkgeworCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJhYnRzIGluIHByb2cgIgorCQkgICAgICAgIm9yaWdfaW8gLSAweCV4XG4iLAorCQkJb3JpZ19pb19yZXEtPnhpZCk7CisJCWdvdG8gcmVjX2NvbXBsX2RvbmU7CisJfQorCS8qIEhhbmRsZSBSRUMgdGltZW91dCBjYXNlICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyRkNfRkxBR19FTFNfVElNRU9VVCwgJnJlY19yZXEtPnJlcV9mbGFncykpIHsKKwkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAidGltZWQgb3V0LCBhYm9ydCAiCisJCSAgICAgICAib3JpZ19pbyAtIDB4JXhcbiIsCisJCQlvcmlnX2lvX3JlcS0+eGlkKTsKKwkJLyogZWxzIHJlcSBpcyB0aW1lZCBvdXQuIHNlbmQgYWJ0cyBmb3IgZWxzICovCisJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMocmVjX3JlcSk7CisJCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJyZWNfY29tcGw6IGluaXRpYXRlX2FidHMgIgorCQkJCSJmYWlsZWQuIGlzc3VlIGNsZWFudXBcbiIpOworCQkJYm54MmZjX2luaXRpYXRlX2NsZWFudXAocmVjX3JlcSk7CisJCX0KKwkJb3JpZ19pb19yZXEtPnJlY19yZXRyeSsrOworCQkvKiBSRUMgdGltZWRvdXQuIHNlbmQgQUJUUyB0byB0aGUgb3JpZyBJTyByZXEgKi8KKwkJaWYgKG9yaWdfaW9fcmVxLT5yZWNfcmV0cnkgPD0gUkVDX1JFVFJZX0NPVU5UKSB7CisJCQlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CisJCQlyYyA9IGJueDJmY19zZW5kX3JlYyhvcmlnX2lvX3JlcSk7CisJCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCQkJaWYgKCFyYykKKwkJCQlnb3RvIHJlY19jb21wbF9kb25lOworCQl9CisJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMob3JpZ19pb19yZXEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykgeworCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAicmVjX2NvbXBsOiBpbml0aWF0ZV9hYnRzICIKKwkJCQkiZmFpbGVkIHhpZCA9IDB4JXguIGlzc3VlIGNsZWFudXBcbiIsCisJCQkJb3JpZ19pb19yZXEtPnhpZCk7CisJCQlibngyZmNfaW5pdGlhdGVfY2xlYW51cChvcmlnX2lvX3JlcSk7CisJCX0KKwkJZ290byByZWNfY29tcGxfZG9uZTsKKwl9CisJbXBfcmVxID0gJihyZWNfcmVxLT5tcF9yZXEpOworCWZjX2hkciA9ICYobXBfcmVxLT5yZXNwX2ZjX2hkcik7CisJcmVzcF9sZW4gPSBtcF9yZXEtPnJlc3BfbGVuOworCWFjYyA9IHJlc3BfYnVmID0gbXBfcmVxLT5yZXNwX2J1ZjsKKworCWhkcl9sZW4gPSBzaXplb2YoKmZjX2hkcik7CisKKwlidWYgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmVjIGJ1ZjogbWVtIGFsbG9jIGZhaWx1cmVcbiIpOworCQlnb3RvIHJlY19jb21wbF9kb25lOworCX0KKwltZW1jcHkoYnVmLCBmY19oZHIsIGhkcl9sZW4pOworCW1lbWNweShidWYgKyBoZHJfbGVuLCByZXNwX2J1ZiwgcmVzcF9sZW4pOworCisJZnAgPSBmY19mcmFtZV9hbGxvYyhOVUxMLCByZXNwX2xlbik7CisJaWYgKCFmcCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmY19mcmFtZV9hbGxvYyBmYWlsdXJlXG4iKTsKKwkJZ290byBmcmVlX2J1ZjsKKwl9CisKKwlmaCA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopIGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCS8qIENvcHkgRkMgRnJhbWUgaGVhZGVyIGFuZCBwYXlsb2FkIGludG8gdGhlIGZyYW1lICovCisJbWVtY3B5KGZoLCBidWYsIGhkcl9sZW4gKyByZXNwX2xlbik7CisKKwlvcGNvZGUgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKKwlpZiAob3Bjb2RlID09IEVMU19MU19SSlQpIHsKKwkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAib3Bjb2RlIGlzIFJKVFxuIik7CisJCXJqdCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnJqdCkpOworCQlpZiAoKHJqdC0+ZXJfcmVhc29uID09IEVMU19SSlRfTE9HSUMgfHwKKwkJICAgIHJqdC0+ZXJfcmVhc29uID09IEVMU19SSlRfVU5BQikgJiYKKwkJICAgIHJqdC0+ZXJfZXhwbGFuID09IEVMU19FWFBMX09YSURfUlhJRCkgeworCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAiaGFuZGxlIENNRCBMT1NUIGNhc2VcbiIpOworCQkJbmV3X2lvX3JlcSA9IGJueDJmY19jbWRfYWxsb2ModGd0KTsKKwkJCWlmICghbmV3X2lvX3JlcSkKKwkJCQlnb3RvIGFib3J0X2lvOworCQkJbmV3X2lvX3JlcS0+c2NfY21kID0gb3JpZ19pb19yZXEtPnNjX2NtZDsKKwkJCS8qIGNsZWFudXAgb3JpZ19pb19yZXEgdGhhdCBpcyB3aXRoIHRoZSBGVyAqLworCQkJc2V0X2JpdChCTlgyRkNfRkxBR19DTURfTE9TVCwKKwkJCQkmb3JpZ19pb19yZXEtPnJlcV9mbGFncyk7CisJCQlibngyZmNfaW5pdGlhdGVfY2xlYW51cChvcmlnX2lvX3JlcSk7CisJCQkvKiBQb3N0IGEgbmV3IElPIHJlcSB3aXRoIHRoZSBzYW1lIHNjX2NtZCAqLworCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAiUG9zdCBJTyByZXF1ZXN0IGFnYWluXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKwkJCXJjID0gYm54MmZjX3Bvc3RfaW9fcmVxKHRndCwgbmV3X2lvX3JlcSk7CisJCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCQkJaWYgKCFyYykKKwkJCQlnb3RvIGZyZWVfZnJhbWU7CisJCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJSRUM6IGlvIHBvc3QgZXJyXG4iKTsKKwkJfQorYWJvcnRfaW86CisJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMob3JpZ19pb19yZXEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykgeworCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAicmVjX2NvbXBsOiBpbml0aWF0ZV9hYnRzICIKKwkJCQkiZmFpbGVkLiBpc3N1ZSBjbGVhbnVwXG4iKTsKKwkJCWJueDJmY19pbml0aWF0ZV9jbGVhbnVwKG9yaWdfaW9fcmVxKTsKKwkJfQorCX0gZWxzZSBpZiAob3Bjb2RlID09IEVMU19MU19BQ0MpIHsKKwkJLyogUkVWSVNJVDogQ2hlY2sgaWYgdGhlIGV4Y2hhbmdlIGlzIGFscmVhZHkgYWJvcnRlZCAqLworCQlvZmZzZXQgPSBudG9obChhY2MtPnJlY2FfZmM0dmFsdWUpOworCQllX3N0YXQgPSBudG9obChhY2MtPnJlY2FfZV9zdGF0KTsKKwkJaWYgKGVfc3RhdCAmIEVTQl9TVF9TRVFfSU5JVCkgIHsKKwkJCUJOWDJGQ19JT19EQkcocmVjX3JlcSwgInRhcmdldCBoYXMgdGhlIHNlcSBpbml0XG4iKTsKKwkJCWdvdG8gZnJlZV9mcmFtZTsKKwkJfQorCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJlX3N0YXQgPSAweCV4LCBvZmZzZXQgPSAweCV4XG4iLAorCQkJZV9zdGF0LCBvZmZzZXQpOworCQkvKiBTZXEgaW5pdGlhdGl2ZSBpcyB3aXRoIHVzICovCisJCWVycl9lbnRyeSA9IChzdHJ1Y3QgZmNvZV9lcnJfcmVwb3J0X2VudHJ5ICopCisJCQkgICAgICZvcmlnX2lvX3JlcS0+ZXJyX2VudHJ5OworCQlzY19jbWQgPSBvcmlnX2lvX3JlcS0+c2NfY21kOworCQlpZiAoc2NfY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCQkvKiBTQ1NJIFdSSVRFIGNvbW1hbmQgKi8KKwkJCWlmIChvZmZzZXQgPT0gb3JpZ19pb19yZXEtPmRhdGFfeGZlcl9sZW4pIHsKKwkJCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJXUklURSAtIHJlc3AgbG9zdFxuIik7CisJCQkJLyogRkNQX1JTUCBsb3N0ICovCisJCQkJcl9jdGwgPSBGQ19SQ1RMX0REX0NNRF9TVEFUVVM7CisJCQkJb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSAgeworCQkJCS8qIHN0YXJ0IHRyYW5zbWl0dGluZyBmcm9tIG9mZnNldCAqLworCQkJCUJOWDJGQ19JT19EQkcocmVjX3JlcSwgIlhGRVJfUkRZL0RBVEEgbG9zdFxuIik7CisJCQkJc2VuZF9zZXFfY2xucCA9IHRydWU7CisJCQkJcl9jdGwgPSBGQ19SQ1RMX0REX0RBVEFfREVTQzsKKwkJCQlpZiAoYm54MmZjX2luaXRpYXRlX3NlcV9jbGVhbnVwKG9yaWdfaW9fcmVxLAorCQkJCQkJCQlvZmZzZXQsIHJfY3RsKSkKKwkJCQkJYWJvcnRfaW8gPSB0cnVlOworCQkJCS8qIFhGRVJfUkRZICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBTQ1NJIFJFQUQgY29tbWFuZCAqLworCQkJaWYgKGVycl9lbnRyeS0+ZGF0YS5yeF9idWZfb2ZmID09CisJCQkJCW9yaWdfaW9fcmVxLT5kYXRhX3hmZXJfbGVuKSB7CisJCQkJLyogRkNQX1JTUCBsb3N0ICovCisJCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAiUkVBRCAtIHJlc3AgbG9zdFxuIik7CisJCQkJcl9jdGwgPSBGQ19SQ1RMX0REX0NNRF9TVEFUVVM7CisJCQkJb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSAgeworCQkJCS8qIHJlcXVlc3QgcmV0cmFuc21pc3Npb24gZnJvbSB0aGlzIG9mZnNldCAqLworCQkJCXNlbmRfc2VxX2NsbnAgPSB0cnVlOworCQkJCW9mZnNldCA9IGVycl9lbnRyeS0+ZGF0YS5yeF9idWZfb2ZmOworCQkJCUJOWDJGQ19JT19EQkcocmVjX3JlcSwgIlJEIERBVEEgbG9zdFxuIik7CisJCQkJLyogRkNQX0RBVEEgbG9zdCAqLworCQkJCXJfY3RsID0gRkNfUkNUTF9ERF9TT0xfREFUQTsKKwkJCQlpZiAoYm54MmZjX2luaXRpYXRlX3NlcV9jbGVhbnVwKG9yaWdfaW9fcmVxLAorCQkJCQkJCQlvZmZzZXQsIHJfY3RsKSkKKwkJCQkJYWJvcnRfaW8gPSB0cnVlOworCQkJfQorCQl9CisJCWlmIChhYm9ydF9pbykgeworCQkJcmMgPSBibngyZmNfaW5pdGlhdGVfYWJ0cyhvcmlnX2lvX3JlcSk7CisJCQlpZiAocmMgIT0gU1VDQ0VTUykgeworCQkJCUJOWDJGQ19JT19EQkcocmVjX3JlcSwgInJlY19jb21wbDppbml0aWF0ZV9hYnRzIgorCQkJCQkgICAgICAiIGZhaWxlZC4gaXNzdWUgY2xlYW51cFxuIik7CisJCQkJYm54MmZjX2luaXRpYXRlX2NsZWFudXAob3JpZ19pb19yZXEpOworCQkJfQorCQl9IGVsc2UgaWYgKCFzZW5kX3NlcV9jbG5wKSB7CisJCQlCTlgyRkNfSU9fREJHKHJlY19yZXEsICJTZW5kIFNSUiAtIEZDUF9SU1BcbiIpOworCQkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCQkJcmMgPSBibngyZmNfc2VuZF9zcnIob3JpZ19pb19yZXEsIG9mZnNldCwgcl9jdGwpOworCQkJc3Bpbl9sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKworCQkJaWYgKHJjKSB7CisJCQkJQk5YMkZDX0lPX0RCRyhyZWNfcmVxLCAiVW5hYmxlIHRvIHNlbmQgU1JSIgorCQkJCQkiIElPIHdpbGwgYWJvcnRcbiIpOworCQkJfQorCQl9CisJfQorZnJlZV9mcmFtZToKKwlmY19mcmFtZV9mcmVlKGZwKTsKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CityZWNfY29tcGxfZG9uZToKKwlrcmVmX3B1dCgmb3JpZ19pb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOworCWtmcmVlKGNiX2FyZyk7Cit9CisKK2ludCBibngyZmNfc2VuZF9yZWMoc3RydWN0IGJueDJmY19jbWQgKm9yaWdfaW9fcmVxKQoreworCXN0cnVjdCBmY19lbHNfcmVjIHJlYzsKKwlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QgPSBvcmlnX2lvX3JlcS0+dGd0OworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSB0Z3QtPnJkYXRhLT5sb2NhbF9wb3J0OworCXN0cnVjdCBibngyZmNfZWxzX2NiX2FyZyAqY2JfYXJnID0gTlVMTDsKKwl1MzIgc2lkID0gdGd0LT5zaWQ7CisJdTMyIHJfYV90b3YgPSBscG9ydC0+cl9hX3RvdjsKKwlpbnQgcmM7CisKKwlCTlgyRkNfSU9fREJHKG9yaWdfaW9fcmVxLCAiU2VuZGluZyBSRUNcbiIpOworCW1lbXNldCgmcmVjLCAwLCBzaXplb2YocmVjKSk7CisKKwljYl9hcmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYm54MmZjX2Vsc19jYl9hcmcpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNiX2FyZykgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gYWxsb2NhdGUgY2JfYXJnIGZvciBSRUNcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gcmVjX2VycjsKKwl9CisJa3JlZl9nZXQoJm9yaWdfaW9fcmVxLT5yZWZjb3VudCk7CisKKwljYl9hcmctPmFib3J0ZWRfaW9fcmVxID0gb3JpZ19pb19yZXE7CisKKwlyZWMucmVjX2NtZCA9IEVMU19SRUM7CisJaHRvbjI0KHJlYy5yZWNfc19pZCwgc2lkKTsKKwlyZWMucmVjX294X2lkID0gaHRvbnMob3JpZ19pb19yZXEtPnhpZCk7CisJcmVjLnJlY19yeF9pZCA9IGh0b25zKG9yaWdfaW9fcmVxLT50YXNrLT5yeHdyX3R4cmQudmFyX2N0eC5yeF9pZCk7CisKKwlyYyA9IGJueDJmY19pbml0aWF0ZV9lbHModGd0LCBFTFNfUkVDLCAmcmVjLCBzaXplb2YocmVjKSwKKwkJCQkgYm54MmZjX3JlY19jb21wbCwgY2JfYXJnLAorCQkJCSByX2FfdG92KTsKK3JlY19lcnI6CisJaWYgKHJjKSB7CisJCUJOWDJGQ19JT19EQkcob3JpZ19pb19yZXEsICJSRUMgZmFpbGVkIC0gcmVsZWFzZVxuIik7CisJCXNwaW5fbG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CisJCWtyZWZfcHV0KCZvcmlnX2lvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKwkJa2ZyZWUoY2JfYXJnKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitpbnQgYm54MmZjX3NlbmRfc3JyKHN0cnVjdCBibngyZmNfY21kICpvcmlnX2lvX3JlcSwgdTMyIG9mZnNldCwgdTggcl9jdGwpCit7CisJc3RydWN0IGZjcF9zcnIgc3JyOworCXN0cnVjdCBibngyZmNfcnBvcnQgKnRndCA9IG9yaWdfaW9fcmVxLT50Z3Q7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHRndC0+cmRhdGEtPmxvY2FsX3BvcnQ7CisJc3RydWN0IGJueDJmY19lbHNfY2JfYXJnICpjYl9hcmcgPSBOVUxMOworCXUzMiByX2FfdG92ID0gbHBvcnQtPnJfYV90b3Y7CisJaW50IHJjOworCisJQk5YMkZDX0lPX0RCRyhvcmlnX2lvX3JlcSwgIlNlbmRpbmcgU1JSXG4iKTsKKwltZW1zZXQoJnNyciwgMCwgc2l6ZW9mKHNycikpOworCisJY2JfYXJnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJueDJmY19lbHNfY2JfYXJnKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjYl9hcmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNiX2FyZyBmb3IgU1JSXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNycl9lcnI7CisJfQorCWtyZWZfZ2V0KCZvcmlnX2lvX3JlcS0+cmVmY291bnQpOworCisJY2JfYXJnLT5hYm9ydGVkX2lvX3JlcSA9IG9yaWdfaW9fcmVxOworCisJc3JyLnNycl9vcCA9IEVMU19TUlI7CisJc3JyLnNycl9veF9pZCA9IGh0b25zKG9yaWdfaW9fcmVxLT54aWQpOworCXNyci5zcnJfcnhfaWQgPSBodG9ucyhvcmlnX2lvX3JlcS0+dGFzay0+cnh3cl90eHJkLnZhcl9jdHgucnhfaWQpOworCXNyci5zcnJfcmVsX29mZiA9IGh0b25sKG9mZnNldCk7CisJc3JyLnNycl9yX2N0bCA9IHJfY3RsOworCW9yaWdfaW9fcmVxLT5zcnJfb2Zmc2V0ID0gb2Zmc2V0OworCW9yaWdfaW9fcmVxLT5zcnJfcmN0bCA9IHJfY3RsOworCisJcmMgPSBibngyZmNfaW5pdGlhdGVfZWxzKHRndCwgRUxTX1NSUiwgJnNyciwgc2l6ZW9mKHNyciksCisJCQkJIGJueDJmY19zcnJfY29tcGwsIGNiX2FyZywKKwkJCQkgcl9hX3Rvdik7CitzcnJfZXJyOgorCWlmIChyYykgeworCQlCTlgyRkNfSU9fREJHKG9yaWdfaW9fcmVxLCAiU1JSIGZhaWxlZCAtIHJlbGVhc2VcbiIpOworCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCQlrcmVmX3B1dCgmb3JpZ19pb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOworCQlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CisJCWtmcmVlKGNiX2FyZyk7CisJfSBlbHNlCisJCXNldF9iaXQoQk5YMkZDX0ZMQUdfU1JSX1NFTlQsICZvcmlnX2lvX3JlcS0+cmVxX2ZsYWdzKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCBibngyZmNfaW5pdGlhdGVfZWxzKHN0cnVjdCBibngyZmNfcnBvcnQgKnRndCwgdW5zaWduZWQgaW50IG9wLAogCQkJdm9pZCAqZGF0YSwgdTMyIGRhdGFfbGVuLAogCQkJdm9pZCAoKmNiX2Z1bmMpKHN0cnVjdCBibngyZmNfZWxzX2NiX2FyZyAqY2JfYXJnKSwKIAkJCXN0cnVjdCBibngyZmNfZWxzX2NiX2FyZyAqY2JfYXJnLCB1MzIgdGltZXJfbXNlYykKIHsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gdGd0LT5wb3J0OwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0Z3QtPnJwb3J0OwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBwb3J0LT5scG9ydDsKIAlzdHJ1Y3QgYm54MmZjX2NtZCAqZWxzX3JlcTsKQEAgLTI3NCwxMiArNjc4LDEyIEBACiAKIAlyYyA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJlbHMgMHgleDogcnBvcnQgbm90IHJlYWR5XG4iLCBvcCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImVscyAweCV4OiBycG9ydCBub3QgcmVhZHlcbiIsIG9wKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGVsc19lcnI7CiAJfQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkgfHwgIShscG9ydC0+bGlua191cCkpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJlbHMgMHgleDogbGluayBpcyBub3QgcmVhZHlcbiIsIG9wKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZWxzIDB4JXg6IGxpbmsgaXMgbm90IHJlYWR5XG4iLCBvcCk7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBlbHNfZXJyOwogCX0KQEAgLTMwNSw3ICs3MDksNyBAQAogCW1wX3JlcSA9IChzdHJ1Y3QgYm54MmZjX21wX3JlcSAqKSYoZWxzX3JlcS0+bXBfcmVxKTsKIAlyYyA9IGJueDJmY19pbml0X21wX3JlcShlbHNfcmVxKTsKIAlpZiAocmMgPT0gRkFJTEVEKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiRUxTIE1QIHJlcXVlc3QgaW5pdCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJFTFMgTVAgcmVxdWVzdCBpbml0IGZhaWxlZFxuIik7CiAJCXNwaW5fbG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CiAJCWtyZWZfcHV0KCZlbHNfcmVxLT5yZWZjb3VudCwgYm54MmZjX2NtZF9yZWxlYXNlKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwpAQCAtMzI0LDcgKzcyOCw3IEBACiAJaWYgKChvcCA+PSBFTFNfTFNfUkpUKSAmJiAob3AgPD0gRUxTX0FVVEhfRUxTKSkgewogCQltZW1jcHkobXBfcmVxLT5yZXFfYnVmLCBkYXRhLCBkYXRhX2xlbik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJJbnZhbGlkIEVMUyBvcCAweCV4XG4iLCBvcCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkludmFsaWQgRUxTIG9wIDB4JXhcbiIsIG9wKTsKIAkJZWxzX3JlcS0+Y2JfZnVuYyA9IE5VTEw7CiAJCWVsc19yZXEtPmNiX2FyZyA9IE5VTEw7CiAJCXNwaW5fbG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CkBAIC0zNDIsOSArNzQ2LDE0IEBACiAJZGlkID0gdGd0LT5ycG9ydC0+cG9ydF9pZDsKIAlzaWQgPSB0Z3QtPnNpZDsKIAotCV9fZmNfZmlsbF9mY19oZHIoZmNfaGRyLCBGQ19SQ1RMX0VMU19SRVEsIGRpZCwgc2lkLAotCQkJICAgRkNfVFlQRV9FTFMsIEZDX0ZDX0ZJUlNUX1NFUSB8IEZDX0ZDX0VORF9TRVEgfAotCQkJICAgRkNfRkNfU0VRX0lOSVQsIDApOworCWlmIChvcCA9PSBFTFNfU1JSKQorCQlfX2ZjX2ZpbGxfZmNfaGRyKGZjX2hkciwgRkNfUkNUTF9FTFM0X1JFUSwgZGlkLCBzaWQsCisJCQkJICAgRkNfVFlQRV9GQ1AsIEZDX0ZDX0ZJUlNUX1NFUSB8CisJCQkJICAgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklULCAwKTsKKwllbHNlCisJCV9fZmNfZmlsbF9mY19oZHIoZmNfaGRyLCBGQ19SQ1RMX0VMU19SRVEsIGRpZCwgc2lkLAorCQkJCSAgIEZDX1RZUEVfRUxTLCBGQ19GQ19GSVJTVF9TRVEgfAorCQkJCSAgIEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCwgMCk7CiAKIAkvKiBPYnRhaW4gZXhjaGFuZ2UgaWQgKi8KIAl4aWQgPSBlbHNfcmVxLT54aWQ7CkBAIC0zNTIsNyArNzYxLDggQEAKIAlpbmRleCA9IHhpZCAlIEJOWDJGQ19UQVNLU19QRVJfUEFHRTsKIAogCS8qIEluaXRpYWxpemUgdGFzayBjb250ZXh0IGZvciB0aGlzIElPIHJlcXVlc3QgKi8KLQl0YXNrX3BhZ2UgPSAoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKikgaGJhLT50YXNrX2N0eFt0YXNrX2lkeF07CisJdGFza19wYWdlID0gKHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICopCisJCQlpbnRlcmZhY2UtPmhiYS0+dGFza19jdHhbdGFza19pZHhdOwogCXRhc2sgPSAmKHRhc2tfcGFnZVtpbmRleF0pOwogCWJueDJmY19pbml0X21wX3Rhc2soZWxzX3JlcSwgdGFzayk7CiAKQEAgLTQ5Niw4ICs5MDYsOCBAQAogCQkJCSAgICAgIHZvaWQgKmFyZywgdTMyIHRpbWVvdXQpCiB7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OwotCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9ICZoYmEtPmN0bHI7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGZjb2VfY3RsciAqZmlwID0gJmludGVyZmFjZS0+Y3RscjsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCiAJc3dpdGNoIChvcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCmluZGV4IGE5N2FmZjMuLjdjYjJjZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKQEAgLTMsNyArMyw3IEBACiAgKiBjbmljIG1vZHVsZXMgdG8gY3JlYXRlIEZDb0UgaW5zdGFuY2VzLCBzZW5kL3JlY2VpdmUgbm9uLW9mZmxvYWRlZAogICogRklQL0ZDb0UgcGFja2V0cywgbGlzdGVuIHRvIGxpbmsgZXZlbnRzIGV0Yy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNSwxMyArMTUsMTQgQEAKICNpbmNsdWRlICJibngyZmMuaCIKIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgYWRhcHRlcl9saXN0Oworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgaWZfbGlzdDsKIHN0YXRpYyB1MzIgYWRhcHRlcl9jb3VudDsKIHN0YXRpYyBERUZJTkVfTVVURVgoYm54MmZjX2Rldl9sb2NrKTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBibngyZmNfcGVyY3B1X3MsIGJueDJmY19wZXJjcHUpOwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJmYyIKICNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCUJOWDJGQ19WRVJTSU9OCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuIDEwLCAyMDExIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1biAyMywgMjAxMSIKIAogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CkBAIC02MSw3ICs2Miw3IEBACiAKIHN0YXRpYyB2b2lkIGJueDJmY19yZWN2X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgdm9pZCBibngyZmNfc3RhcnRfZGlzYyhzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKTsKK3N0YXRpYyB2b2lkIGJueDJmY19zdGFydF9kaXNjKHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogc3RhdGljIGludCBibngyZmNfc2hvc3RfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGJueDJmY19uZXRfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHApOwogc3RhdGljIGludCBibngyZmNfbHBvcnRfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpOwpAQCAtNzAsMTggKzcxLDIwIEBACiBzdGF0aWMgdm9pZCBibngyZmNfdW5iaW5kX2FkYXB0ZXJfZGV2aWNlcyhzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKTsKIHN0YXRpYyBpbnQgYm54MmZjX2JpbmRfcGNpZGV2KHN0cnVjdCBibngyZmNfaGJhICpoYmEpOwogc3RhdGljIHZvaWQgYm54MmZjX3VuYmluZF9wY2lkZXYoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7Ci1zdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpibngyZmNfaWZfY3JlYXRlKHN0cnVjdCBibngyZmNfaGJhICpoYmEsCitzdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpibngyZmNfaWZfY3JlYXRlKHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBucGl2KTsKIHN0YXRpYyB2b2lkIGJueDJmY19kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIHN0cnVjdCBibngyZmNfaGJhICpibngyZmNfaGJhX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c19kZXYpOworc3RhdGljIHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICpibngyZmNfaW50ZXJmYWNlX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZQorCQkJCQkJCSpwaHlzX2Rldik7CiBzdGF0aWMgc3RydWN0IGJueDJmY19oYmEgKmJueDJmY19maW5kX2hiYV9mb3JfY25pYyhzdHJ1Y3QgY25pY19kZXYgKmNuaWMpOwogCiBzdGF0aWMgaW50IGJueDJmY19md19pbml0KHN0cnVjdCBibngyZmNfaGJhICpoYmEpOwogc3RhdGljIHZvaWQgYm54MmZjX2Z3X2Rlc3Ryb3koc3RydWN0IGJueDJmY19oYmEgKmhiYSk7CiAKIHN0YXRpYyB2b2lkIGJueDJmY19wb3J0X3NodXRkb3duKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpOwotc3RhdGljIHZvaWQgYm54MmZjX3N0b3Aoc3RydWN0IGJueDJmY19oYmEgKmhiYSk7CitzdGF0aWMgdm9pZCBibngyZmNfc3RvcChzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIHN0YXRpYyBpbnQgX19pbml0IGJueDJmY19tb2RfaW5pdCh2b2lkKTsKIHN0YXRpYyB2b2lkIF9fZXhpdCBibngyZmNfbW9kX2V4aXQodm9pZCk7CiAKQEAgLTE0Miw3ICsxNDUsOCBAQAogc3RhdGljIHZvaWQgYm54MmZjX2NsZWFudXAoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCXN0cnVjdCBibngyZmNfcnBvcnQgKnRndDsKIAlpbnQgaTsKIApAQCAtMjE5LDcgKzIyMyw4IEBACiAJc3RydWN0IGZjb2VfY3JjX2VvZgkqY3A7CiAJc3RydWN0IHNrX2J1ZmYJCSpza2I7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlcgkqZmg7Ci0Jc3RydWN0IGJueDJmY19oYmEJKmhiYTsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZQkqaW50ZXJmYWNlOworCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CiAJc3RydWN0IGZjb2VfcG9ydAkqcG9ydDsKIAlzdHJ1Y3QgZmNvZV9oZHIJCSpocDsKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0CSp0Z3Q7CkBAIC0yMzAsNyArMjM1LDggQEAKIAlpbnQJCQl3bGVuLCByYyA9IDA7CiAKIAlwb3J0ID0gKHN0cnVjdCBmY29lX3BvcnQgKilscG9ydF9wcml2KGxwb3J0KTsKLQloYmEgPSBwb3J0LT5wcml2OworCWludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAKIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCkBAIC0yNDIsMTIgKzI0OCwxMiBAQAogCX0KIAogCWlmICh1bmxpa2VseShmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9FTFNfUkVRKSkgewotCQlpZiAoIWhiYS0+Y3Rsci5zZWxfZmNmKSB7CisJCWlmICghaW50ZXJmYWNlLT5jdGxyLnNlbF9mY2YpIHsKIAkJCUJOWDJGQ19IQkFfREJHKGxwb3J0LCAiRkNGIG5vdCBzZWxlY3RlZCB5ZXQhXG4iKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGZjb2VfY3Rscl9lbHNfc2VuZCgmaGJhLT5jdGxyLCBscG9ydCwgc2tiKSkKKwkJaWYgKGZjb2VfY3Rscl9lbHNfc2VuZCgmaW50ZXJmYWNlLT5jdGxyLCBscG9ydCwgc2tiKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMzE2LDE5ICszMjIsMTkgQEAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2ItPm1hY19sZW4gPSBlbGVuOwogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9GQ09FKTsKLQlza2ItPmRldiA9IGhiYS0+bmV0ZGV2OworCXNrYi0+ZGV2ID0gaW50ZXJmYWNlLT5uZXRkZXY7CiAKIAkvKiBmaWxsIHVwIG1hYyBhbmQgZmNvZSBoZWFkZXJzICovCiAJZWggPSBldGhfaGRyKHNrYik7CiAJZWgtPmhfcHJvdG8gPSBodG9ucyhFVEhfUF9GQ09FKTsKLQlpZiAoaGJhLT5jdGxyLm1hcF9kZXN0KQorCWlmIChpbnRlcmZhY2UtPmN0bHIubWFwX2Rlc3QpCiAJCWZjX2Zjb2Vfc2V0X21hYyhlaC0+aF9kZXN0LCBmaC0+ZmhfZF9pZCk7CiAJZWxzZQogCQkvKiBpbnNlcnQgR1cgYWRkcmVzcyAqLwotCQltZW1jcHkoZWgtPmhfZGVzdCwgaGJhLT5jdGxyLmRlc3RfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoZWgtPmhfZGVzdCwgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkciwgRVRIX0FMRU4pOwogCi0JaWYgKHVubGlrZWx5KGhiYS0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSkKLQkJbWVtY3B5KGVoLT5oX3NvdXJjZSwgaGJhLT5jdGxyLmN0bF9zcmNfYWRkciwgRVRIX0FMRU4pOworCWlmICh1bmxpa2VseShpbnRlcmZhY2UtPmN0bHIuZmxvZ2lfb3hpZCAhPSBGQ19YSURfVU5LTk9XTikpCisJCW1lbWNweShlaC0+aF9zb3VyY2UsIGludGVyZmFjZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIEVUSF9BTEVOKTsKIAllbHNlCiAJCW1lbWNweShlaC0+aF9zb3VyY2UsIHBvcnQtPmRhdGFfc3JjX2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtMzc3LDIyICszODMsMjMgQEAKIAkJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKm9sZGRldikKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwotCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNvZV9yY3ZfaW5mbyAqZnI7CiAJc3RydWN0IGZjb2VfcGVyY3B1X3MgKmJnOwogCXVuc2lnbmVkIHNob3J0IG94aWQ7CiAKLQloYmEgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBibngyZmNfaGJhLCBmY29lX3BhY2tldF90eXBlKTsKLQlscG9ydCA9IGhiYS0+Y3Rsci5scDsKKwlpbnRlcmZhY2UgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBibngyZmNfaW50ZXJmYWNlLAorCQkJCSBmY29lX3BhY2tldF90eXBlKTsKKwlscG9ydCA9IGludGVyZmFjZS0+Y3Rsci5scDsKIAogCWlmICh1bmxpa2VseShscG9ydCA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImJueDJmY19yY3Y6IGxwb3J0IGlzIE5VTExcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJibngyZmNfcmN2OiBscG9ydCBpcyBOVUxMXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJaWYgKHVubGlrZWx5KGV0aF9oZHIoc2tiKS0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9GQ09FKSkpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJibngyZmNfcmN2OiBXcm9uZyBGQyB0eXBlIGZyYW1lXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX3JjdjogV3JvbmcgRkMgdHlwZSBmcmFtZVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtNDExLDcgKzQxOCw2IEBACiAKIAlmciA9IGZjb2VfZGV2X2Zyb21fc2tiKHNrYik7CiAJZnItPmZyX2RldiA9IGxwb3J0OwotCWZyLT5wdHlwZSA9IHB0eXBlOwogCiAJYmcgPSAmYm54MmZjX2dsb2JhbDsKIAlzcGluX2xvY2tfYmgoJmJnLT5mY29lX3J4X2xpc3QubG9jayk7CkBAIC00NjksNyArNDc1LDcgQEAKIAlmciA9IGZjb2VfZGV2X2Zyb21fc2tiKHNrYik7CiAJbHBvcnQgPSBmci0+ZnJfZGV2OwogCWlmICh1bmxpa2VseShscG9ydCA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggIkludmFsaWQgbHBvcnQgc3RydWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW52YWxpZCBscG9ydCBzdHJ1Y3RcbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5NCw3ICs2MDAsOCBAQAogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmJueDJmY19zdGF0czsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gc2hvc3RfcHJpdihzaG9zdCk7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAlzdHJ1Y3QgZmNvZV9zdGF0aXN0aWNzX3BhcmFtcyAqZndfc3RhdHM7CiAJaW50IHJjID0gMDsKIApAQCAtNjMxLDcgKzYzOCw3IEBACiBzdGF0aWMgaW50IGJueDJmY19zaG9zdF9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwb3J0LT5ob3N0OwogCWludCByYyA9IDA7CiAKQEAgLTY1NCw3ICs2NjEsNyBAQAogCQlmY19ob3N0X21heF9ucGl2X3Zwb3J0cyhscG9ydC0+aG9zdCkgPSBVU0hSVF9NQVg7CiAJc3ByaW50ZihmY19ob3N0X3N5bWJvbGljX25hbWUobHBvcnQtPmhvc3QpLCAiJXMgdiVzIG92ZXIgJXMiLAogCQlCTlgyRkNfTkFNRSwgQk5YMkZDX1ZFUlNJT04sCi0JCWhiYS0+bmV0ZGV2LT5uYW1lKTsKKwkJaW50ZXJmYWNlLT5uZXRkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjIsOCArNjY5LDggQEAKIHN0YXRpYyB2b2lkIGJueDJmY19saW5rX3NwZWVkX3VwZGF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGJhLT5uZXRkZXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGludGVyZmFjZS0+bmV0ZGV2OwogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCiAJaWYgKCFkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MobmV0ZGV2LCAmZWNtZCkpIHsKQEAgLTY5MSw3ICs2OTgsOCBAQAogc3RhdGljIGludCBibngyZmNfbGlua19vayhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhiYS0+cGh5c19kZXY7CiAJaW50IHJjID0gMDsKIApAQCAtNzEzLDcgKzcyMSw3IEBACiAgKi8KIHZvaWQgYm54MmZjX2dldF9saW5rX3N0YXRlKHN0cnVjdCBibngyZmNfaGJhICpoYmEpCiB7Ci0JaWYgKHRlc3RfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZoYmEtPm5ldGRldi0+c3RhdGUpKQorCWlmICh0ZXN0X2JpdChfX0xJTktfU1RBVEVfTk9DQVJSSUVSLCAmaGJhLT5waHlzX2Rldi0+c3RhdGUpKQogCQlzZXRfYml0KEFEQVBURVJfU1RBVEVfTElOS19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKIAllbHNlCiAJCWNsZWFyX2JpdChBREFQVEVSX1NUQVRFX0xJTktfRE9XTiwgJmhiYS0+YWRhcHRlcl9zdGF0ZSk7CkBAIC03MjIsMTEgKzczMCwxMyBAQAogc3RhdGljIGludCBibngyZmNfbmV0X2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXU2NCB3d25uLCB3d3BuOwogCiAJcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCWhiYSA9IHBvcnQtPnByaXY7CisJaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwloYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAogCS8qIHJlcXVpcmUgc3VwcG9ydCBmb3IgZ2V0X3BhdXNlcGFyYW0gZXRodG9vbCBvcC4gKi8KIAlpZiAoIWhiYS0+cGh5c19kZXYtPmV0aHRvb2xfb3BzIHx8CkBAIC03NDMsMTEgKzc1MywxMSBAQAogCWJueDJmY19saW5rX3NwZWVkX3VwZGF0ZShscG9ydCk7CiAKIAlpZiAoIWxwb3J0LT52cG9ydCkgewotCQl3d25uID0gZmNvZV93d25fZnJvbV9tYWMoaGJhLT5jdGxyLmN0bF9zcmNfYWRkciwgMSwgMCk7CisJCXd3bm4gPSBmY29lX3d3bl9mcm9tX21hYyhpbnRlcmZhY2UtPmN0bHIuY3RsX3NyY19hZGRyLCAxLCAwKTsKIAkJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJXV05OID0gMHglbGx4XG4iLCB3d25uKTsKIAkJZmNfc2V0X3d3bm4obHBvcnQsIHd3bm4pOwogCi0JCXd3cG4gPSBmY29lX3d3bl9mcm9tX21hYyhoYmEtPmN0bHIuY3RsX3NyY19hZGRyLCAyLCAwKTsKKwkJd3dwbiA9IGZjb2Vfd3duX2Zyb21fbWFjKGludGVyZmFjZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIDIsIDApOwogCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgIldXUE4gPSAweCVsbHhcbiIsIHd3cG4pOwogCQlmY19zZXRfd3dwbihscG9ydCwgd3dwbik7CiAJfQpAQCAtNzU5LDkgKzc2OSw5IEBACiB7CiAJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IChzdHJ1Y3QgYm54MmZjX2hiYSAqKWRhdGE7CiAKLQlCTlgyRkNfSEJBX0RCRyhoYmEtPmN0bHIubHAsICJFUlJPUjpibngyZmNfZGVzdHJveV90aW1lciAtICIKKwlCTlgyRkNfTUlTQ19EQkcoIkVSUk9SOmJueDJmY19kZXN0cm95X3RpbWVyIC0gIgogCQkgICAiRGVzdHJveSBjb21wbCBub3QgcmVjZWl2ZWQhIVxuIik7Ci0JaGJhLT5mbGFncyB8PSBCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEw7CisJc2V0X2JpdChCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEwsICZoYmEtPmZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhiYS0+ZGVzdHJveV93YWl0KTsKIH0KIApAQCAtNzc5LDU0ICs3ODksMzUgQEAKIAkJCQkgICAgIHUxNiB2bGFuX2lkKQogewogCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSAoc3RydWN0IGJueDJmY19oYmEgKiljb250ZXh0OwotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBoYmEtPmN0bHIubHA7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAlzdHJ1Y3QgZmNfbHBvcnQgKnZwb3J0OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJaW50IHdhaXRfZm9yX3VwbG9hZCA9IDA7CiAJdTMyIGxpbmtfcG9zc2libGUgPSAxOwogCiAJLyogSWdub3JlIHZsYW5zIGZvciBub3cgKi8KIAlpZiAodmxhbl9pZCAhPSAwKQogCQlyZXR1cm47CiAKLQlpZiAoIXRlc3RfYml0KEJOWDJGQ19DUkVBVEVfRE9ORSwgJmhiYS0+aW5pdF9kb25lKSkgewotCQlCTlgyRkNfTUlTQ19EQkcoImRyaXZlciBub3QgcmVhZHkuIGV2ZW50PSVzICVsZFxuIiwKLQkJCSAgIGhiYS0+bmV0ZGV2LT5uYW1lLCBldmVudCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEFTU1VNUFRJT046Ci0JICogaW5kaWNhdGVfbmV0ZXZlbnQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGNuaWMgdW5sZXNzIGJueDJmYwotCSAqIGRvZXMgcmVnaXN0ZXJfZGV2aWNlCi0JICovCi0JQlVHX09OKCFscG9ydCk7Ci0KLQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgImVudGVyIG5ldGV2ZW50IGhhbmRsZXIgLSBldmVudD0lcyAlbGRcbiIsCi0JCQkJaGJhLT5uZXRkZXYtPm5hbWUsIGV2ZW50KTsKLQogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9VUDoKLQkJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJQb3J0IHVwLCBhZGFwdGVyX3N0YXRlID0gJWxkXG4iLAotCQkJaGJhLT5hZGFwdGVyX3N0YXRlKTsKIAkJaWYgKCF0ZXN0X2JpdChBREFQVEVSX1NUQVRFX1VQLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiaW5kaWNhdGVfbmV0ZXZlbnQ6ICJcCi0JCQkJCSJhZGFwdGVyIGlzIG5vdCBVUCEhXG4iKTsKKwkJCQkJImhiYSBpcyBub3QgVVAhIVxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfRE9XTjoKLQkJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJQb3J0IGRvd25cbiIpOwogCQljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKIAkJY2xlYXJfYml0KEFEQVBURVJfU1RBVEVfVVAsICZoYmEtPmFkYXB0ZXJfc3RhdGUpOwogCQlsaW5rX3Bvc3NpYmxlID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9HT0lOR19ET1dOOgotCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgIlBvcnQgZ29pbmcgZG93blxuIik7CiAJCXNldF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKIAkJbGlua19wb3NzaWJsZSA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfQ0hBTkdFOgotCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgIk5FVERFVl9DSEFOR0VcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04MzQsMTUgKzgyNSwyMiBAQAogCQlyZXR1cm47CiAJfQogCi0JYm54MmZjX2xpbmtfc3BlZWRfdXBkYXRlKGxwb3J0KTsKKwltdXRleF9sb2NrKCZibngyZmNfZGV2X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJmYWNlLCAmaWZfbGlzdCwgbGlzdCkgewogCi0JaWYgKGxpbmtfcG9zc2libGUgJiYgIWJueDJmY19saW5rX29rKGxwb3J0KSkgewotCQlwcmludGsoS0VSTl9FUlIgImluZGljYXRlX25ldGV2ZW50OiBjYWxsIGN0bHJfbGlua191cFxuIik7Ci0JCWZjb2VfY3Rscl9saW5rX3VwKCZoYmEtPmN0bHIpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaW5kaWNhdGVfbmV0ZXZlbnQ6IGNhbGwgY3Rscl9saW5rX2Rvd25cbiIpOwotCQlpZiAoZmNvZV9jdGxyX2xpbmtfZG93bigmaGJhLT5jdGxyKSkgewotCQkJY2xlYXJfYml0KEFEQVBURVJfU1RBVEVfUkVBRFksICZoYmEtPmFkYXB0ZXJfc3RhdGUpOworCQlpZiAoaW50ZXJmYWNlLT5oYmEgIT0gaGJhKQorCQkJY29udGludWU7CisKKwkJbHBvcnQgPSBpbnRlcmZhY2UtPmN0bHIubHA7CisJCUJOWDJGQ19IQkFfREJHKGxwb3J0LCAibmV0ZXZlbnQgaGFuZGxlciAtIGV2ZW50PSVzICVsZFxuIiwKKwkJCQlpbnRlcmZhY2UtPm5ldGRldi0+bmFtZSwgZXZlbnQpOworCisJCWJueDJmY19saW5rX3NwZWVkX3VwZGF0ZShscG9ydCk7CisKKwkJaWYgKGxpbmtfcG9zc2libGUgJiYgIWJueDJmY19saW5rX29rKGxwb3J0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpbmRpY2F0ZV9uZXRldmVudDogY3Rscl9saW5rX3VwXG4iKTsKKwkJCWZjb2VfY3Rscl9saW5rX3VwKCZpbnRlcmZhY2UtPmN0bHIpOworCQl9IGVsc2UgaWYgKGZjb2VfY3Rscl9saW5rX2Rvd24oJmludGVyZmFjZS0+Y3RscikpIHsKIAkJCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwb3J0LCAmbHBvcnQtPnZwb3J0cywgbGlzdCkKIAkJCQlmY19ob3N0X3BvcnRfdHlwZSh2cG9ydC0+aG9zdCkgPQpAQCAtODUzLDI1ICs4NTEsMjcgQEAKIAkJCQkgICAgZ2V0X2NwdSgpKS0+TGlua0ZhaWx1cmVDb3VudCsrOwogCQkJcHV0X2NwdSgpOwogCQkJZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGxwb3J0KTsKLQotCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaGJhLT5zaHV0ZG93bl93YWl0KTsKLQkJCUJOWDJGQ19IQkFfREJHKGxwb3J0LCAiaW5kaWNhdGVfbmV0ZXZlbnQgIgotCQkJCQkgICAgICJudW1fb2ZsZF9zZXNzID0gJWRcbiIsCi0JCQkJICAgaGJhLT5udW1fb2ZsZF9zZXNzKTsKLQkJCWhiYS0+d2FpdF9mb3JfbGlua19kb3duID0gMTsKLQkJCUJOWDJGQ19IQkFfREJHKGxwb3J0LCAid2FpdGluZyBmb3IgdXBsb2FkcyB0byAiCi0JCQkJCSAgICAgImNvbXBsIHByb2MgPSAlc1xuIiwKLQkJCQkgICBjdXJyZW50LT5jb21tKTsKLQkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShoYmEtPnNodXRkb3duX3dhaXQsCi0JCQkJCQkgKGhiYS0+bnVtX29mbGRfc2VzcyA9PSAwKSk7Ci0JCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgIndha2V1cCAtIG51bV9vZmxkX3Nlc3MgPSAlZFxuIiwKLQkJCQloYmEtPm51bV9vZmxkX3Nlc3MpOwotCQkJaGJhLT53YWl0X2Zvcl9saW5rX2Rvd24gPSAwOwotCi0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwkJCXdhaXRfZm9yX3VwbG9hZCA9IDE7CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZibngyZmNfZGV2X2xvY2spOworCisJaWYgKHdhaXRfZm9yX3VwbG9hZCkgeworCQljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9SRUFEWSwgJmhiYS0+YWRhcHRlcl9zdGF0ZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhiYS0+c2h1dGRvd25fd2FpdCk7CisJCUJOWDJGQ19NSVNDX0RCRygiaW5kaWNhdGVfbmV0ZXZlbnQgIgorCQkJCSJudW1fb2ZsZF9zZXNzID0gJWRcbiIsCisJCQkJaGJhLT5udW1fb2ZsZF9zZXNzKTsKKwkJaGJhLT53YWl0X2Zvcl9saW5rX2Rvd24gPSAxOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaGJhLT5zaHV0ZG93bl93YWl0LAorCQkJCQkgKGhiYS0+bnVtX29mbGRfc2VzcyA9PSAwKSk7CisJCUJOWDJGQ19NSVNDX0RCRygid2FrZXVwIC0gbnVtX29mbGRfc2VzcyA9ICVkXG4iLAorCQkJCWhiYS0+bnVtX29mbGRfc2Vzcyk7CisJCWhiYS0+d2FpdF9mb3JfbGlua19kb3duID0gMDsKKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCX0KIH0KIAogc3RhdGljIGludCBibngyZmNfbGliZmNfY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCkBAIC04ODksMjMgKzg4OSwxMiBAQAogCiBzdGF0aWMgaW50IGJueDJmY19lbV9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7Ci0KIAlpZiAoIWZjX2V4Y2hfbWdyX2FsbG9jKGxwb3J0LCBGQ19DTEFTU18zLCBGQ09FX01JTl9YSUQsCiAJCQkJRkNPRV9NQVhfWElELCBOVUxMKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJlbV9jb25maWc6ZmNfZXhjaF9tZ3JfYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGJhLT5jbWRfbWdyID0gYm54MmZjX2NtZF9tZ3JfYWxsb2MoaGJhLCBCTlgyRkNfTUlOX1hJRCwKLQkJCQkJICAgIEJOWDJGQ19NQVhfWElEKTsKLQotCWlmICghaGJhLT5jbWRfbWdyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVtX2NvbmZpZzpibngyZmNfY21kX21ncl9hbGxvYyBmYWlsZWRcbiIpOwotCQlmY19leGNoX21ncl9mcmVlKGxwb3J0KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC05MTgsMTEgKzkwNyw4IEBACiAJbHBvcnQtPmVfZF90b3YgPSAyICogMTAwMDsKIAlscG9ydC0+cl9hX3RvdiA9IDEwICogMTAwMDsKIAotCS8qIFJFVklTSVQ6IGVuYWJsZSB3aGVuIHN1cHBvcnRpbmcgdGFwZSBkZXZpY2VzCiAJbHBvcnQtPnNlcnZpY2VfcGFyYW1zID0gKEZDUF9TUFBGX0lOSVRfRkNOIHwgRkNQX1NQUEZfUkRfWFJEWV9ESVMgfAogCQkJCUZDUF9TUFBGX1JFVFJZIHwgRkNQX1NQUEZfQ09ORl9DT01QTCk7Ci0JKi8KLQlscG9ydC0+c2VydmljZV9wYXJhbXMgPSAoRkNQX1NQUEZfSU5JVF9GQ04gfCBGQ1BfU1BQRl9SRF9YUkRZX0RJUyk7CiAJbHBvcnQtPmRvZXNfbnBpdiA9IDE7CiAKIAltZW1zZXQoJmxwb3J0LT5ybmlkX2dlbiwgMCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfcm5pZF9nZW4pKTsKQEAgLTk1Miw5ICs5MzgsMTAgQEAKIAkJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsCiAJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYTsKLQloYmEgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBibngyZmNfaGJhLCBmaXBfcGFja2V0X3R5cGUpOwotCWZjb2VfY3Rscl9yZWN2KCZoYmEtPmN0bHIsIHNrYik7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnRlcmZhY2UgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBibngyZmNfaW50ZXJmYWNlLAorCQkJCSBmaXBfcGFja2V0X3R5cGUpOworCWZjb2VfY3Rscl9yZWN2KCZpbnRlcmZhY2UtPmN0bHIsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDUsMTcgKzk5MiwxNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdnBvcnRfdG9fc2hvc3QodnBvcnQpOwogCXN0cnVjdCBmY19scG9ydCAqbl9wb3J0ID0gc2hvc3RfcHJpdihzaG9zdCk7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobl9wb3J0KTsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGJhLT5uZXRkZXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGludGVyZmFjZS0+bmV0ZGV2OwogCXN0cnVjdCBmY19scG9ydCAqdm5fcG9ydDsKIAotCWlmICghdGVzdF9iaXQoQk5YMkZDX0ZXX0lOSVRfRE9ORSwgJmhiYS0+aW5pdF9kb25lKSkgeworCWlmICghdGVzdF9iaXQoQk5YMkZDX0ZMQUdfRldfSU5JVF9ET05FLCAmaW50ZXJmYWNlLT5oYmEtPmZsYWdzKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJ2biBwb3J0cyBjYW5ub3QgYmUgY3JlYXRlZCBvbiIKLQkJCSJ0aGlzIGhiYVxuIik7CisJCQkidGhpcyBpbnRlcmZhY2VcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJbXV0ZXhfbG9jaygmYm54MmZjX2Rldl9sb2NrKTsKLQl2bl9wb3J0ID0gYm54MmZjX2lmX2NyZWF0ZShoYmEsICZ2cG9ydC0+ZGV2LCAxKTsKKwl2bl9wb3J0ID0gYm54MmZjX2lmX2NyZWF0ZShpbnRlcmZhY2UsICZ2cG9ydC0+ZGV2LCAxKTsKIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAKIAlpZiAoSVNfRVJSKHZuX3BvcnQpKSB7CkBAIC0xMDY1LDEwICsxMDUyLDEwIEBACiB9CiAKIAotc3RhdGljIGludCBibngyZmNfbmV0ZGV2X3NldHVwKHN0cnVjdCBibngyZmNfaGJhICpoYmEpCitzdGF0aWMgaW50IGJueDJmY19uZXRkZXZfc2V0dXAoc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGJhLT5uZXRkZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNkZXYgPSBoYmEtPnBoeXNfZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBpbnRlcmZhY2UtPm5ldGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c2RldiA9IGludGVyZmFjZS0+aGJhLT5waHlzX2RldjsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwogCWludCBzZWxfc2FuX21hYyA9IDA7CiAKQEAgLTEwODMsNyArMTA3MCw4IEBACiAKIAkJaWYgKChoYS0+dHlwZSA9PSBORVRERVZfSFdfQUREUl9UX1NBTikgJiYKIAkJICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGhhLT5hZGRyKSkpIHsKLQkJCW1lbWNweShoYmEtPmN0bHIuY3RsX3NyY19hZGRyLCBoYS0+YWRkciwgRVRIX0FMRU4pOworCQkJbWVtY3B5KGludGVyZmFjZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIGhhLT5hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKIAkJCXNlbF9zYW5fbWFjID0gMTsKIAkJCUJOWDJGQ19NSVNDX0RCRygiRm91bmQgU0FOIE1BQ1xuIik7CiAJCX0KQEAgLTEwOTMsMTUgKzEwODEsMTUgQEAKIAlpZiAoIXNlbF9zYW5fbWFjKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWhiYS0+ZmlwX3BhY2tldF90eXBlLmZ1bmMgPSBibngyZmNfZmlwX3JlY3Y7Ci0JaGJhLT5maXBfcGFja2V0X3R5cGUudHlwZSA9IGh0b25zKEVUSF9QX0ZJUCk7Ci0JaGJhLT5maXBfcGFja2V0X3R5cGUuZGV2ID0gbmV0ZGV2OwotCWRldl9hZGRfcGFjaygmaGJhLT5maXBfcGFja2V0X3R5cGUpOworCWludGVyZmFjZS0+ZmlwX3BhY2tldF90eXBlLmZ1bmMgPSBibngyZmNfZmlwX3JlY3Y7CisJaW50ZXJmYWNlLT5maXBfcGFja2V0X3R5cGUudHlwZSA9IGh0b25zKEVUSF9QX0ZJUCk7CisJaW50ZXJmYWNlLT5maXBfcGFja2V0X3R5cGUuZGV2ID0gbmV0ZGV2OworCWRldl9hZGRfcGFjaygmaW50ZXJmYWNlLT5maXBfcGFja2V0X3R5cGUpOwogCi0JaGJhLT5mY29lX3BhY2tldF90eXBlLmZ1bmMgPSBibngyZmNfcmN2OwotCWhiYS0+ZmNvZV9wYWNrZXRfdHlwZS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9GQ09FKTsKLQloYmEtPmZjb2VfcGFja2V0X3R5cGUuZGV2ID0gbmV0ZGV2OwotCWRldl9hZGRfcGFjaygmaGJhLT5mY29lX3BhY2tldF90eXBlKTsKKwlpbnRlcmZhY2UtPmZjb2VfcGFja2V0X3R5cGUuZnVuYyA9IGJueDJmY19yY3Y7CisJaW50ZXJmYWNlLT5mY29lX3BhY2tldF90eXBlLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ZDT0UpOworCWludGVyZmFjZS0+ZmNvZV9wYWNrZXRfdHlwZS5kZXYgPSBuZXRkZXY7CisJZGV2X2FkZF9wYWNrKCZpbnRlcmZhY2UtPmZjb2VfcGFja2V0X3R5cGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTM3LDUzICsxMTI1LDU0IEBACiAKIHN0YXRpYyB2b2lkIGJueDJmY19pbnRlcmZhY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c19kZXY7CiAKLQloYmEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGJueDJmY19oYmEsIGtyZWYpOworCWludGVyZmFjZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSwga3JlZik7CiAJQk5YMkZDX01JU0NfREJHKCJJbnRlcmZhY2UgaXMgYmVpbmcgcmVsZWFzZWRcbiIpOwogCi0JbmV0ZGV2ID0gaGJhLT5uZXRkZXY7Ci0JcGh5c19kZXYgPSBoYmEtPnBoeXNfZGV2OworCW5ldGRldiA9IGludGVyZmFjZS0+bmV0ZGV2OwogCiAJLyogdGVhci1kb3duIEZJUCBjb250cm9sbGVyICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyRkNfQ1RMUl9JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpCi0JCWZjb2VfY3Rscl9kZXN0cm95KCZoYmEtPmN0bHIpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQk5YMkZDX0NUTFJfSU5JVF9ET05FLCAmaW50ZXJmYWNlLT5pZl9mbGFncykpCisJCWZjb2VfY3Rscl9kZXN0cm95KCZpbnRlcmZhY2UtPmN0bHIpOwogCisJa2ZyZWUoaW50ZXJmYWNlKTsKKworCWRldl9wdXQobmV0ZGV2KTsKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJueDJmY19pbnRlcmZhY2VfZ2V0KHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJa3JlZl9nZXQoJmludGVyZmFjZS0+a3JlZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyZmNfaW50ZXJmYWNlX3B1dChzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWtyZWZfcHV0KCZpbnRlcmZhY2UtPmtyZWYsIGJueDJmY19pbnRlcmZhY2VfcmVsZWFzZSk7Cit9CitzdGF0aWMgdm9pZCBibngyZmNfaGJhX2Rlc3Ryb3koc3RydWN0IGJueDJmY19oYmEgKmhiYSkKK3sKIAkvKiBGcmVlIHRoZSBjb21tYW5kIG1hbmFnZXIgKi8KIAlpZiAoaGJhLT5jbWRfbWdyKSB7CiAJCWJueDJmY19jbWRfbWdyX2ZyZWUoaGJhLT5jbWRfbWdyKTsKIAkJaGJhLT5jbWRfbWdyID0gTlVMTDsKIAl9Ci0JZGV2X3B1dChuZXRkZXYpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYm54MmZjX2ludGVyZmFjZV9nZXQoc3RydWN0IGJueDJmY19oYmEgKmhiYSkKLXsKLQlrcmVmX2dldCgmaGJhLT5rcmVmKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJmY19pbnRlcmZhY2VfcHV0KHN0cnVjdCBibngyZmNfaGJhICpoYmEpCi17Ci0Ja3JlZl9wdXQoJmhiYS0+a3JlZiwgYm54MmZjX2ludGVyZmFjZV9yZWxlYXNlKTsKLX0KLXN0YXRpYyB2b2lkIGJueDJmY19pbnRlcmZhY2VfZGVzdHJveShzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKQoteworCWtmcmVlKGhiYS0+dGd0X29mbGRfbGlzdCk7CiAJYm54MmZjX3VuYmluZF9wY2lkZXYoaGJhKTsKIAlrZnJlZShoYmEpOwogfQogCiAvKioKLSAqIGJueDJmY19pbnRlcmZhY2VfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IGZjb2UgaW5zdGFuY2UKKyAqIGJueDJmY19oYmFfY3JlYXRlIC0gY3JlYXRlIGEgbmV3IGJueDJmYyBoYmEKICAqCiAgKiBAY25pYzoJcG9pbnRlciB0byBjbmljIGRldmljZQogICoKLSAqIENyZWF0ZXMgYSBuZXcgRkNvRSBpbnN0YW5jZSBvbiB0aGUgZ2l2ZW4gZGV2aWNlIHdoaWNoIGluY2x1ZGUgYWxsb2NhdGluZwotICoJaGJhIHN0cnVjdHVyZSwgc2NzaV9ob3N0IGFuZCBscG9ydCBzdHJ1Y3R1cmVzLgorICogQ3JlYXRlcyBhIG5ldyBGQ29FIGhiYSBvbiB0aGUgZ2l2ZW4gZGV2aWNlLgorICoKICAqLwotc3RhdGljIHN0cnVjdCBibngyZmNfaGJhICpibngyZmNfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1Y3QgY25pY19kZXYgKmNuaWMpCitzdGF0aWMgc3RydWN0IGJueDJmY19oYmEgKmJueDJmY19oYmFfY3JlYXRlKHN0cnVjdCBjbmljX2RldiAqY25pYykKIHsKIAlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOwogCWludCByYzsKQEAgLTExOTgsNjUgKzExODcsODMgQEAKIAogCWhiYS0+Y25pYyA9IGNuaWM7CiAJcmMgPSBibngyZmNfYmluZF9wY2lkZXYoaGJhKTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNyZWF0ZV9hZGFwdGVyOiAgYmluZCBlcnJvclxuIik7CiAJCWdvdG8gYmluZF9lcnI7CisJfQogCWhiYS0+cGh5c19kZXYgPSBjbmljLT5uZXRkZXY7Ci0JLyogd2lsbCBnZXQgb3ZlcndyaXR0ZW4gYWZ0ZXIgd2UgZG8gdmxhbiBkaXNjb3ZlcnkgKi8KLQloYmEtPm5ldGRldiA9IGhiYS0+cGh5c19kZXY7CisJaGJhLT5uZXh0X2Nvbm5faWQgPSAwOworCisJaGJhLT50Z3Rfb2ZsZF9saXN0ID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGJueDJmY19ycG9ydCAqKSAqIEJOWDJGQ19OVU1fTUFYX1NFU1MsCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWhiYS0+dGd0X29mbGRfbGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gYWxsb2NhdGUgdGd0IG9mZmxvYWQgbGlzdFxuIik7CisJCWdvdG8gdGd0b2ZsZF9lcnI7CisJfQorCisJaGJhLT5udW1fb2ZsZF9zZXNzID0gMDsKKworCWhiYS0+Y21kX21nciA9IGJueDJmY19jbWRfbWdyX2FsbG9jKGhiYSwgQk5YMkZDX01JTl9YSUQsCisJCQkJCQlCTlgyRkNfTUFYX1hJRCk7CisJaWYgKCFoYmEtPmNtZF9tZ3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZW1fY29uZmlnOmJueDJmY19jbWRfbWdyX2FsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gY21ncl9lcnI7CisJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaGJhLT5zaHV0ZG93bl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoYmEtPmRlc3Ryb3lfd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhiYS0+dnBvcnRzKTsKIAogCXJldHVybiBoYmE7CisKK2NtZ3JfZXJyOgorCWtmcmVlKGhiYS0+dGd0X29mbGRfbGlzdCk7Cit0Z3RvZmxkX2VycjoKKwlibngyZmNfdW5iaW5kX3BjaWRldihoYmEpOwogYmluZF9lcnI6Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY3JlYXRlX2ludGVyZmFjZTogYmluZCBlcnJvclxuIik7CiAJa2ZyZWUoaGJhKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBibngyZmNfaW50ZXJmYWNlX3NldHVwKHN0cnVjdCBibngyZmNfaGJhICpoYmEsCi0JCQkJICBlbnVtIGZpcF9zdGF0ZSBmaXBfbW9kZSkKK3N0cnVjdCBibngyZmNfaW50ZXJmYWNlICpibngyZmNfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgZW51bSBmaXBfc3RhdGUgZmlwX21vZGUpCiB7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBoYmEtPm5ldGRldjsKLQlzdHJ1Y3QgZmNvZV9jdGxyICpmaXAgPSAmaGJhLT5jdGxyOwogCisJaW50ZXJmYWNlID0ga3phbGxvYyhzaXplb2YoKmludGVyZmFjZSksIEdGUF9LRVJORUwpOworCWlmICghaW50ZXJmYWNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnRlcmZhY2Ugc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCWRldl9ob2xkKG5ldGRldik7Ci0Ja3JlZl9pbml0KCZoYmEtPmtyZWYpOwotCi0JaGJhLT5mbGFncyA9IDA7CisJa3JlZl9pbml0KCZpbnRlcmZhY2UtPmtyZWYpOworCWludGVyZmFjZS0+aGJhID0gaGJhOworCWludGVyZmFjZS0+bmV0ZGV2ID0gbmV0ZGV2OwogCiAJLyogSW5pdGlhbGl6ZSBGSVAgKi8KLQltZW1zZXQoZmlwLCAwLCBzaXplb2YoKmZpcCkpOwotCWZjb2VfY3Rscl9pbml0KGZpcCwgZmlwX21vZGUpOwotCWhiYS0+Y3Rsci5zZW5kID0gYm54MmZjX2ZpcF9zZW5kOwotCWhiYS0+Y3Rsci51cGRhdGVfbWFjID0gYm54MmZjX3VwZGF0ZV9zcmNfbWFjOwotCWhiYS0+Y3Rsci5nZXRfc3JjX2FkZHIgPSBibngyZmNfZ2V0X3NyY19tYWM7Ci0Jc2V0X2JpdChCTlgyRkNfQ1RMUl9JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSk7CisJZmNvZV9jdGxyX2luaXQoJmludGVyZmFjZS0+Y3RsciwgZmlwX21vZGUpOworCWludGVyZmFjZS0+Y3Rsci5zZW5kID0gYm54MmZjX2ZpcF9zZW5kOworCWludGVyZmFjZS0+Y3Rsci51cGRhdGVfbWFjID0gYm54MmZjX3VwZGF0ZV9zcmNfbWFjOworCWludGVyZmFjZS0+Y3Rsci5nZXRfc3JjX2FkZHIgPSBibngyZmNfZ2V0X3NyY19tYWM7CisJc2V0X2JpdChCTlgyRkNfQ1RMUl9JTklUX0RPTkUsICZpbnRlcmZhY2UtPmlmX2ZsYWdzKTsKIAotCUlOSVRfTElTVF9IRUFEKCZoYmEtPnZwb3J0cyk7Ci0JcmMgPSBibngyZmNfbmV0ZGV2X3NldHVwKGhiYSk7Ci0JaWYgKHJjKQotCQlnb3RvIHNldHVwX2VycjsKKwlyYyA9IGJueDJmY19uZXRkZXZfc2V0dXAoaW50ZXJmYWNlKTsKKwlpZiAoIXJjKQorCQlyZXR1cm4gaW50ZXJmYWNlOwogCi0JaGJhLT5uZXh0X2Nvbm5faWQgPSAwOwotCi0JbWVtc2V0KGhiYS0+dGd0X29mbGRfbGlzdCwgMCwgc2l6ZW9mKGhiYS0+dGd0X29mbGRfbGlzdCkpOwotCWhiYS0+bnVtX29mbGRfc2VzcyA9IDA7Ci0KLQlyZXR1cm4gMDsKLQotc2V0dXBfZXJyOgotCWZjb2VfY3Rscl9kZXN0cm95KCZoYmEtPmN0bHIpOworCWZjb2VfY3Rscl9kZXN0cm95KCZpbnRlcmZhY2UtPmN0bHIpOwogCWRldl9wdXQobmV0ZGV2KTsKLQlibngyZmNfaW50ZXJmYWNlX3B1dChoYmEpOwotCXJldHVybiByYzsKKwlrZnJlZShpbnRlcmZhY2UpOworCXJldHVybiBOVUxMOwogfQogCiAvKioKICAqIGJueDJmY19pZl9jcmVhdGUgLSBDcmVhdGUgRkNvRSBpbnN0YW5jZSBvbiBhIGdpdmVuIGludGVyZmFjZQogICoKLSAqIEBoYmE6CUZDb0UgaW50ZXJmYWNlIHRvIGNyZWF0ZSBhIGxvY2FsIHBvcnQgb24KKyAqIEBpbnRlcmZhY2U6CUZDb0UgaW50ZXJmYWNlIHRvIGNyZWF0ZSBhIGxvY2FsIHBvcnQgb24KICAqIEBwYXJlbnQ6CURldmljZSBwb2ludGVyIHRvIGJlIHRoZSBwYXJlbnQgaW4gc3lzZnMgZm9yIHRoZSBTQ1NJIGhvc3QKICAqIEBucGl2OglJbmRpY2F0ZXMgaWYgdGhlIHBvcnQgaXMgdnBvcnQgb3Igbm90CiAgKgpAQCAtMTI2NCw3ICsxMjcxLDcgQEAKICAqCiAgKiBSZXR1cm5zOglBbGxvY2F0ZWQgZmNfbHBvcnQgb3IgYW4gZXJyb3IgcG9pbnRlcgogICovCi1zdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpibngyZmNfaWZfY3JlYXRlKHN0cnVjdCBibngyZmNfaGJhICpoYmEsCitzdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpibngyZmNfaWZfY3JlYXRlKHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBucGl2KQogewogCXN0cnVjdCBmY19scG9ydAkJKmxwb3J0LCAqbl9wb3J0OwpAQCAtMTI3MiwxMSArMTI3OSwxMiBAQAogCXN0cnVjdCBTY3NpX0hvc3QJKnNob3N0OwogCXN0cnVjdCBmY192cG9ydAkJKnZwb3J0ID0gZGV2X3RvX3Zwb3J0KHBhcmVudCk7CiAJc3RydWN0IGJueDJmY19scG9ydAkqYmxwb3J0OworCXN0cnVjdCBibngyZmNfaGJhCSpoYmE7CiAJaW50CQkJcmMgPSAwOwogCiAJYmxwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJueDJmY19scG9ydCksIEdGUF9LRVJORUwpOwogCWlmICghYmxwb3J0KSB7Ci0JCUJOWDJGQ19IQkFfREJHKGhiYS0+Y3Rsci5scCwgIlVuYWJsZSB0byBhbGxvYyBibngyZmNfbHBvcnRcbiIpOworCQlCTlgyRkNfSEJBX0RCRyhpbnRlcmZhY2UtPmN0bHIubHAsICJVbmFibGUgdG8gYWxsb2MgYmxwb3J0XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xMjkzLDcgKzEzMDEsNyBAQAogCXNob3N0ID0gbHBvcnQtPmhvc3Q7CiAJcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwogCXBvcnQtPmxwb3J0ID0gbHBvcnQ7Ci0JcG9ydC0+cHJpdiA9IGhiYTsKKwlwb3J0LT5wcml2ID0gaW50ZXJmYWNlOwogCUlOSVRfV09SSygmcG9ydC0+ZGVzdHJveV93b3JrLCBibngyZmNfZGVzdHJveV93b3JrKTsKIAogCS8qIENvbmZpZ3VyZSBmY29lX3BvcnQgKi8KQEAgLTEzMTcsNyArMTMyNSw3IEBACiAJcmMgPSBibngyZmNfc2hvc3RfY29uZmlnKGxwb3J0LCBwYXJlbnQpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG50IGNvbmZpZ3VyZSBzaG9zdCBmb3IgJXNcbiIsCi0JCQloYmEtPm5ldGRldi0+bmFtZSk7CisJCQlpbnRlcmZhY2UtPm5ldGRldi0+bmFtZSk7CiAJCWdvdG8gbHBfY29uZmlnX2VycjsKIAl9CiAKQEAgLTEzNDMsOCArMTM1MSw5IEBACiAJCWdvdG8gc2hvc3RfZXJyOwogCX0KIAotCWJueDJmY19pbnRlcmZhY2VfZ2V0KGhiYSk7CisJYm54MmZjX2ludGVyZmFjZV9nZXQoaW50ZXJmYWNlKTsKIAorCWhiYSA9IGludGVyZmFjZS0+aGJhOwogCXNwaW5fbG9ja19iaCgmaGJhLT5oYmFfbG9jayk7CiAJYmxwb3J0LT5scG9ydCA9IGxwb3J0OwogCWxpc3RfYWRkX3RhaWwoJmJscG9ydC0+bGlzdCwgJmhiYS0+dnBvcnRzKTsKQEAgLTEzNjEsMjEgKzEzNzAsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgYm54MmZjX25ldGRldl9jbGVhbnVwKHN0cnVjdCBibngyZmNfaGJhICpoYmEpCitzdGF0aWMgdm9pZCBibngyZmNfbmV0ZGV2X2NsZWFudXAoc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAkvKiBEb250IGxpc3RlbiBmb3IgRXRoZXJuZXQgcGFja2V0cyBhbnltb3JlICovCi0JX19kZXZfcmVtb3ZlX3BhY2soJmhiYS0+ZmNvZV9wYWNrZXRfdHlwZSk7Ci0JX19kZXZfcmVtb3ZlX3BhY2soJmhiYS0+ZmlwX3BhY2tldF90eXBlKTsKKwlfX2Rldl9yZW1vdmVfcGFjaygmaW50ZXJmYWNlLT5mY29lX3BhY2tldF90eXBlKTsKKwlfX2Rldl9yZW1vdmVfcGFjaygmaW50ZXJmYWNlLT5maXBfcGFja2V0X3R5cGUpOwogCXN5bmNocm9uaXplX25ldCgpOwogfQogCi1zdGF0aWMgdm9pZCBibngyZmNfaWZfZGVzdHJveShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQorc3RhdGljIHZvaWQgYm54MmZjX2lmX2Rlc3Ryb3koc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGJueDJmY19oYmEgKmhiYSkKIHsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CiAJc3RydWN0IGJueDJmY19scG9ydCAqYmxwb3J0LCAqdG1wOwogCi0JQk5YMkZDX0hCQV9EQkcoaGJhLT5jdGxyLmxwLCAiRU5URVJFRCBibngyZmNfaWZfZGVzdHJveVxuIik7CiAJLyogU3RvcCB0aGUgdHJhbnNtaXQgcmV0cnkgdGltZXIgKi8KIAlkZWxfdGltZXJfc3luYygmcG9ydC0+dGltZXIpOwogCkBAIC0xNDA5LDggKzE0MTYsNiBAQAogCiAJLyogUmVsZWFzZSBTY3NpX0hvc3QgKi8KIAlzY3NpX2hvc3RfcHV0KGxwb3J0LT5ob3N0KTsKLQotCWJueDJmY19pbnRlcmZhY2VfcHV0KGhiYSk7CiB9CiAKIC8qKgpAQCAtMTQyNSw0NiArMTQzMCwzMSBAQAogICovCiBzdGF0aWMgaW50IGJueDJmY19kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBOVUxMOworCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAlpbnQgcmMgPSAwOwogCiAJcnRubF9sb2NrKCk7Ci0KIAltdXRleF9sb2NrKCZibngyZmNfZGV2X2xvY2spOwotCS8qIG9idGFpbiBwaHlzaWNhbCBuZXRkZXYgKi8KLQlpZiAobmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQotCQlwaHlzX2RldiA9IHZsYW5fZGV2X3JlYWxfZGV2KG5ldGRldik7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk5vdCBhIHZsYW4gZGV2aWNlXG4iKTsKKworCWludGVyZmFjZSA9IGJueDJmY19pbnRlcmZhY2VfbG9va3VwKG5ldGRldik7CisJaWYgKCFpbnRlcmZhY2UgfHwgIWludGVyZmFjZS0+Y3Rsci5scCkgewogCQlyYyA9IC1FTk9ERVY7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImJueDJmY19kZXN0cm95OiBpbnRlcmZhY2Ugb3IgbHBvcnQgbm90IGZvdW5kXG4iKTsKIAkJZ290byBuZXRkZXZfZXJyOwogCX0KIAotCWhiYSA9IGJueDJmY19oYmFfbG9va3VwKHBoeXNfZGV2KTsKLQlpZiAoIWhiYSB8fCAhaGJhLT5jdGxyLmxwKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2Rlc3Ryb3k6IGhiYSBvciBscG9ydCBub3QgZm91bmRcbiIpOwotCQlnb3RvIG5ldGRldl9lcnI7Ci0JfQorCWhiYSA9IGludGVyZmFjZS0+aGJhOwogCi0JaWYgKCF0ZXN0X2JpdChCTlgyRkNfQ1JFQVRFX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2Rlc3Ryb3k6IENyZWF0ZSBub3QgY2FsbGVkXG4iKTsKLQkJZ290byBuZXRkZXZfZXJyOwotCX0KKwlibngyZmNfbmV0ZGV2X2NsZWFudXAoaW50ZXJmYWNlKTsKKwlscG9ydCA9IGludGVyZmFjZS0+Y3Rsci5scDsKKwlibngyZmNfc3RvcChpbnRlcmZhY2UpOworCWxpc3RfZGVsKCZpbnRlcmZhY2UtPmxpc3QpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGludGVyZmFjZS0+dGltZXJfd29ya19xdWV1ZSk7CisJYm54MmZjX2ludGVyZmFjZV9wdXQoaW50ZXJmYWNlKTsKKwlibngyZmNfaWZfZGVzdHJveShscG9ydCwgaGJhKTsKIAotCWJueDJmY19uZXRkZXZfY2xlYW51cChoYmEpOwotCi0JYm54MmZjX3N0b3AoaGJhKTsKLQotCWJueDJmY19pZl9kZXN0cm95KGhiYS0+Y3Rsci5scCk7Ci0KLQlkZXN0cm95X3dvcmtxdWV1ZShoYmEtPnRpbWVyX3dvcmtfcXVldWUpOwotCi0JaWYgKHRlc3RfYml0KEJOWDJGQ19GV19JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpCi0JCWJueDJmY19md19kZXN0cm95KGhiYSk7Ci0KLQljbGVhcl9iaXQoQk5YMkZDX0NSRUFURV9ET05FLCAmaGJhLT5pbml0X2RvbmUpOwogbmV0ZGV2X2VycjoKIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAJcnRubF91bmxvY2soKTsKQEAgLTE0NzUsMTYgKzE0NjUsMjAgQEAKIHsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOwogCiAJcG9ydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNvZV9wb3J0LCBkZXN0cm95X3dvcmspOwogCWxwb3J0ID0gcG9ydC0+bHBvcnQ7CisJaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwloYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAogCUJOWDJGQ19IQkFfREJHKGxwb3J0LCAiRW50ZXJlZCBibngyZmNfZGVzdHJveV93b3JrXG4iKTsKIAogCWJueDJmY19wb3J0X3NodXRkb3duKGxwb3J0KTsKIAlydG5sX2xvY2soKTsKIAltdXRleF9sb2NrKCZibngyZmNfZGV2X2xvY2spOwotCWJueDJmY19pZl9kZXN0cm95KGxwb3J0KTsKKwlibngyZmNfaWZfZGVzdHJveShscG9ydCwgaGJhKTsKIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAJcnRubF91bmxvY2soKTsKIH0KQEAgLTE1NTYsMjggKzE1NTAsMjcgQEAKIHN0YXRpYyB2b2lkIGJueDJmY191bHBfc3RhcnQodm9pZCAqaGFuZGxlKQogewogCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBoYW5kbGU7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGhiYS0+Y3Rsci5scDsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAKLQlCTlgyRkNfTUlTQ19EQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAltdXRleF9sb2NrKCZibngyZmNfZGV2X2xvY2spOwogCi0JaWYgKHRlc3RfYml0KEJOWDJGQ19GV19JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpCi0JCWdvdG8gc3RhcnRfZGlzYzsKLQotCWlmICh0ZXN0X2JpdChCTlgyRkNfQ1JFQVRFX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpCisJaWYgKCF0ZXN0X2JpdChCTlgyRkNfRkxBR19GV19JTklUX0RPTkUsICZoYmEtPmZsYWdzKSkKIAkJYm54MmZjX2Z3X2luaXQoaGJhKTsKIAotc3RhcnRfZGlzYzoKLQltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7Ci0KIAlCTlgyRkNfTUlTQ19EQkcoImJueDJmYyBzdGFydGVkLlxuIik7CiAKLQkvKiBLaWNrIG9mZiBGYWJyaWMgZGlzY292ZXJ5Ki8KLQlpZiAodGVzdF9iaXQoQk5YMkZDX0NSRUFURV9ET05FLCAmaGJhLT5pbml0X2RvbmUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInVscF9pbml0OiBzdGFydCBkaXNjb3ZlcnlcbiIpOwotCQlscG9ydC0+dHQuZnJhbWVfc2VuZCA9IGJueDJmY194bWl0OwotCQlibngyZmNfc3RhcnRfZGlzYyhoYmEpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJmYWNlLCAmaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoaW50ZXJmYWNlLT5oYmEgPT0gaGJhKSB7CisJCQlscG9ydCA9IGludGVyZmFjZS0+Y3Rsci5scDsKKwkJCS8qIEtpY2sgb2ZmIEZhYnJpYyBkaXNjb3ZlcnkqLworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidWxwX2luaXQ6IHN0YXJ0IGRpc2NvdmVyeVxuIik7CisJCQlscG9ydC0+dHQuZnJhbWVfc2VuZCA9IGJueDJmY194bWl0OworCQkJYm54MmZjX3N0YXJ0X2Rpc2MoaW50ZXJmYWNlKTsKKwkJfQogCX0KKworCW11dGV4X3VubG9jaygmYm54MmZjX2Rldl9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MmZjX3BvcnRfc2h1dGRvd24oc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKQEAgLTE1ODcsMzcgKzE1ODAsMjUgQEAKIAlmY19scG9ydF9kZXN0cm95KGxwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgYm54MmZjX3N0b3Aoc3RydWN0IGJueDJmY19oYmEgKmhiYSkKK3N0YXRpYyB2b2lkIGJueDJmY19zdG9wKHN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAlzdHJ1Y3QgZmNfbHBvcnQgKnZwb3J0OwogCi0JQk5YMkZDX01JU0NfREJHKCJFTlRFUkVEICVzIC0gaW5pdF9kb25lID0gJWxkXG4iLCBfX2Z1bmNfXywKLQkJICAgaGJhLT5pbml0X2RvbmUpOwotCWlmICh0ZXN0X2JpdChCTlgyRkNfRldfSU5JVF9ET05FLCAmaGJhLT5pbml0X2RvbmUpICYmCi0JICAgIHRlc3RfYml0KEJOWDJGQ19DUkVBVEVfRE9ORSwgJmhiYS0+aW5pdF9kb25lKSkgewotCQlscG9ydCA9IGhiYS0+Y3Rsci5scDsKLQkJYm54MmZjX3BvcnRfc2h1dGRvd24obHBvcnQpOwotCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgImJueDJmY19zdG9wOiB3YWl0aW5nIGZvciAlZCAiCi0JCQkJIm9mZmxvYWRlZCBzZXNzaW9uc1xuIiwKLQkJCQloYmEtPm51bV9vZmxkX3Nlc3MpOwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaGJhLT5zaHV0ZG93bl93YWl0LAotCQkJCQkgKGhiYS0+bnVtX29mbGRfc2VzcyA9PSAwKSk7Ci0JCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodnBvcnQsICZscG9ydC0+dnBvcnRzLCBsaXN0KQotCQkJZmNfaG9zdF9wb3J0X3R5cGUodnBvcnQtPmhvc3QpID0gRkNfUE9SVFRZUEVfVU5LTk9XTjsKLQkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCQlmY19ob3N0X3BvcnRfdHlwZShscG9ydC0+aG9zdCkgPSBGQ19QT1JUVFlQRV9VTktOT1dOOwotCQlmY29lX2N0bHJfbGlua19kb3duKCZoYmEtPmN0bHIpOwotCQlmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUobHBvcnQpOworCWlmICghdGVzdF9iaXQoQk5YMkZDX0ZMQUdfRldfSU5JVF9ET05FLCAmaW50ZXJmYWNlLT5oYmEtPmZsYWdzKSkKKwkJcmV0dXJuOwogCi0JCW11dGV4X2xvY2soJmhiYS0+aGJhX211dGV4KTsKLQkJY2xlYXJfYml0KEFEQVBURVJfU1RBVEVfVVAsICZoYmEtPmFkYXB0ZXJfc3RhdGUpOwotCQljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKKwlscG9ydCA9IGludGVyZmFjZS0+Y3Rsci5scDsKKwlibngyZmNfcG9ydF9zaHV0ZG93bihscG9ydCk7CiAKLQkJY2xlYXJfYml0KEFEQVBURVJfU1RBVEVfUkVBRFksICZoYmEtPmFkYXB0ZXJfc3RhdGUpOwotCQltdXRleF91bmxvY2soJmhiYS0+aGJhX211dGV4KTsKLQl9CisJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZwb3J0LCAmbHBvcnQtPnZwb3J0cywgbGlzdCkKKwkJZmNfaG9zdF9wb3J0X3R5cGUodnBvcnQtPmhvc3QpID0KKwkJCQkJRkNfUE9SVFRZUEVfVU5LTk9XTjsKKwltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7CisJZmNfaG9zdF9wb3J0X3R5cGUobHBvcnQtPmhvc3QpID0gRkNfUE9SVFRZUEVfVU5LTk9XTjsKKwlmY29lX2N0bHJfbGlua19kb3duKCZpbnRlcmZhY2UtPmN0bHIpOworCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgYm54MmZjX2Z3X2luaXQoc3RydWN0IGJueDJmY19oYmEgKmhiYSkKQEAgLTE2NTYsOCArMTYzNyw3IEBACiAJfQogCiAKLQkvKiBNYXJrIEhCQSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBGVyBJTklUIGlzIGRvbmUgKi8KLQlzZXRfYml0KEJOWDJGQ19GV19JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSk7CisJc2V0X2JpdChCTlgyRkNfRkxBR19GV19JTklUX0RPTkUsICZoYmEtPmZsYWdzKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VuYmluZDoKQEAgLTE2NjgsNyArMTY0OCw3IEBACiAKIHN0YXRpYyB2b2lkIGJueDJmY19md19kZXN0cm95KHN0cnVjdCBibngyZmNfaGJhICpoYmEpCiB7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyRkNfRldfSU5JVF9ET05FLCAmaGJhLT5pbml0X2RvbmUpKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyRkNfRkxBR19GV19JTklUX0RPTkUsICZoYmEtPmZsYWdzKSkgewogCQlpZiAoYm54MmZjX3NlbmRfZndfZmNvZV9kZXN0cm95X21zZyhoYmEpID09IDApIHsKIAkJCWluaXRfdGltZXIoJmhiYS0+ZGVzdHJveV90aW1lcik7CiAJCQloYmEtPmRlc3Ryb3lfdGltZXIuZXhwaXJlcyA9IEJOWDJGQ19GV19USU1FT1VUICsKQEAgLTE2NzcsOCArMTY1Nyw4IEBACiAJCQloYmEtPmRlc3Ryb3lfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhiYTsKIAkJCWFkZF90aW1lcigmaGJhLT5kZXN0cm95X3RpbWVyKTsKIAkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShoYmEtPmRlc3Ryb3lfd2FpdCwKLQkJCQkJCSAoaGJhLT5mbGFncyAmCi0JCQkJCQkgIEJOWDJGQ19GTEFHX0RFU1RST1lfQ01QTCkpOworCQkJCQl0ZXN0X2JpdChCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEwsCisJCQkJCQkgJmhiYS0+ZmxhZ3MpKTsKIAkJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CkBAIC0xNjk5LDQwICsxNjc5LDU3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGJueDJmY191bHBfc3RvcCh2b2lkICpoYW5kbGUpCiB7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IChzdHJ1Y3QgYm54MmZjX2hiYSAqKWhhbmRsZTsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaGFuZGxlOworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAKIAlwcmludGsoS0VSTl9FUlIgIlVMUF9TVE9QXG4iKTsKIAogCW11dGV4X2xvY2soJmJueDJmY19kZXZfbG9jayk7Ci0JYm54MmZjX3N0b3AoaGJhKTsKKwlpZiAoIXRlc3RfYml0KEJOWDJGQ19GTEFHX0ZXX0lOSVRfRE9ORSwgJmhiYS0+ZmxhZ3MpKQorCQlnb3RvIGV4aXQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcmZhY2UsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmIChpbnRlcmZhY2UtPmhiYSA9PSBoYmEpCisJCQlibngyZmNfc3RvcChpbnRlcmZhY2UpOworCX0KKwlCVUdfT04oaGJhLT5udW1fb2ZsZF9zZXNzICE9IDApOworCisJbXV0ZXhfbG9jaygmaGJhLT5oYmFfbXV0ZXgpOworCWNsZWFyX2JpdChBREFQVEVSX1NUQVRFX1VQLCAmaGJhLT5hZGFwdGVyX3N0YXRlKTsKKwljbGVhcl9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLAorCQkgICZoYmEtPmFkYXB0ZXJfc3RhdGUpOworCisJY2xlYXJfYml0KEFEQVBURVJfU1RBVEVfUkVBRFksICZoYmEtPmFkYXB0ZXJfc3RhdGUpOworCW11dGV4X3VubG9jaygmaGJhLT5oYmFfbXV0ZXgpOworCiAJYm54MmZjX2Z3X2Rlc3Ryb3koaGJhKTsKK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZibngyZmNfZGV2X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBibngyZmNfc3RhcnRfZGlzYyhzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhKQorc3RhdGljIHZvaWQgYm54MmZjX3N0YXJ0X2Rpc2Moc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCWludCB3YWl0X2NudCA9IDA7CiAKIAlCTlgyRkNfTUlTQ19EQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAkvKiBLaWNrIG9mZiBGSVAvRkxPR0kgKi8KLQlpZiAoIXRlc3RfYml0KEJOWDJGQ19GV19JTklUX0RPTkUsICZoYmEtPmluaXRfZG9uZSkpIHsKKwlpZiAoIXRlc3RfYml0KEJOWDJGQ19GTEFHX0ZXX0lOSVRfRE9ORSwgJmludGVyZmFjZS0+aGJhLT5mbGFncykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW5pdCBub3QgZG9uZSB5ZXRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbHBvcnQgPSBoYmEtPmN0bHIubHA7CisJbHBvcnQgPSBpbnRlcmZhY2UtPmN0bHIubHA7CiAJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJjYWxsaW5nIGZjX2ZhYnJpY19sb2dpblxuIik7CiAKIAlpZiAoIWJueDJmY19saW5rX29rKGxwb3J0KSkgewogCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgImN0bHJfbGlua191cFxuIik7Ci0JCWZjb2VfY3Rscl9saW5rX3VwKCZoYmEtPmN0bHIpOworCQlmY29lX2N0bHJfbGlua191cCgmaW50ZXJmYWNlLT5jdGxyKTsKIAkJZmNfaG9zdF9wb3J0X3R5cGUobHBvcnQtPmhvc3QpID0gRkNfUE9SVFRZUEVfTlBPUlQ7Ci0JCXNldF9iaXQoQURBUFRFUl9TVEFURV9SRUFEWSwgJmhiYS0+YWRhcHRlcl9zdGF0ZSk7CisJCXNldF9iaXQoQURBUFRFUl9TVEFURV9SRUFEWSwgJmludGVyZmFjZS0+aGJhLT5hZGFwdGVyX3N0YXRlKTsKIAl9CiAKIAkvKiB3YWl0IGZvciB0aGUgRkNGIHRvIGJlIHNlbGVjdGVkIGJlZm9yZSBpc3N1aW5nIEZMT0dJICovCi0Jd2hpbGUgKCFoYmEtPmN0bHIuc2VsX2ZjZikgeworCXdoaWxlICghaW50ZXJmYWNlLT5jdGxyLnNlbF9mY2YpIHsKIAkJbXNsZWVwKDI1MCk7CiAJCS8qIGdpdmUgdXAgYWZ0ZXIgMyBzZWNzICovCiAJCWlmICgrK3dhaXRfY250ID4gMTIpCkBAIC0xNzU4LDE1ICsxNzU1LDE1IEBACiAKIAlCTlgyRkNfTUlTQ19EQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAkvKiBibngyZmMgd29ya3Mgb25seSB3aGVuIGJueDJ4IGlzIGxvYWRlZCAqLwotCWlmICghdGVzdF9iaXQoQ05JQ19GX0JOWDJYX0NMQVNTLCAmZGV2LT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KENOSUNfRl9CTlgyWF9DTEFTUywgJmRldi0+ZmxhZ3MpIHx8CisJICAgIChkZXYtPm1heF9mY29lX2Nvbm4gPT0gMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjIEZDb0Ugbm90IHN1cHBvcnRlZCBvbiAlcywiCi0JCQkJICAgICIgZmxhZ3M6ICVseFxuIiwKLQkJCWRldi0+bmV0ZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKKwkJCQkgICAgIiBmbGFnczogJWx4IGZjb2VfY29ubjogJWRcbiIsCisJCQlkZXYtPm5ldGRldi0+bmFtZSwgZGV2LT5mbGFncywgZGV2LT5tYXhfZmNvZV9jb25uKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIENvbmZpZ3VyZSBGQ29FIGludGVyZmFjZSAqLwotCWhiYSA9IGJueDJmY19pbnRlcmZhY2VfY3JlYXRlKGRldik7CisJaGJhID0gYm54MmZjX2hiYV9jcmVhdGUoZGV2KTsKIAlpZiAoIWhiYSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJoYmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwpAQCAtMTc3NCw3ICsxNzcxLDcgQEAKIAogCS8qIEFkZCBIQkEgdG8gdGhlIGFkYXB0ZXIgbGlzdCAqLwogCW11dGV4X2xvY2soJmJueDJmY19kZXZfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmaGJhLT5saW5rLCAmYWRhcHRlcl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZoYmEtPmxpc3QsICZhZGFwdGVyX2xpc3QpOwogCWFkYXB0ZXJfY291bnQrKzsKIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAKQEAgLTE3ODIsNyArMTc3OSw3IEBACiAJcmMgPSBkZXYtPnJlZ2lzdGVyX2RldmljZShkZXYsIENOSUNfVUxQX0ZDT0UsCiAJCQkJCQkodm9pZCAqKSBoYmEpOwogCWlmIChyYykKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJyZWdpc3Rlcl9kZXZpY2UgZmFpbGVkLCByYyA9ICVkXG4iLCByYyk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInJlZ2lzdGVyX2RldmljZSBmYWlsZWQsIHJjID0gJWRcbiIsIHJjKTsKIAllbHNlCiAJCXNldF9iaXQoQk5YMkZDX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7CiB9CkBAIC0xNzkwLDUyICsxNzg3LDIxIEBACiAKIHN0YXRpYyBpbnQgYm54MmZjX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpwaHlzX2RldjsKLQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGRydmluZm87CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlpbnQgcmMgPSAwOwogCiAJcnRubF9sb2NrKCk7Ci0KIAltdXRleF9sb2NrKCZibngyZmNfZGV2X2xvY2spOwogCi0JLyogb2J0YWluIHBoeXNpY2FsIG5ldGRldiAqLwotCWlmIChuZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCi0JCXBoeXNfZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYobmV0ZGV2KTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm90IGEgdmxhbiBkZXZpY2VcbiIpOworCWludGVyZmFjZSA9IGJueDJmY19pbnRlcmZhY2VfbG9va3VwKG5ldGRldik7CisJaWYgKCFpbnRlcmZhY2UgfHwgIWludGVyZmFjZS0+Y3Rsci5scCkgewogCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gbm9kZXY7Ci0JfQotCi0JLyogdmVyaWZ5IGlmIHRoZSBwaHlzaWNhbCBkZXZpY2UgaXMgYSBuZXR4dHJlbWUyIGRldmljZSAqLwotCWlmIChwaHlzX2Rldi0+ZXRodG9vbF9vcHMgJiYgcGh5c19kZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHJ2aW5mbykgewotCQltZW1zZXQoJmRydmluZm8sIDAsIHNpemVvZihkcnZpbmZvKSk7Ci0JCXBoeXNfZGV2LT5ldGh0b29sX29wcy0+Z2V0X2RydmluZm8ocGh5c19kZXYsICZkcnZpbmZvKTsKLQkJaWYgKHN0cmNtcChkcnZpbmZvLmRyaXZlciwgImJueDJ4IikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vdCBhIG5ldHh0cmVtZTIgZGV2aWNlXG4iKTsKLQkJCXJjID0gLUVOT0RFVjsKLQkJCWdvdG8gbm9kZXY7Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2Rpc2FibGU6IGludGVyZmFjZSBvciBscG9ydCBub3QgZm91bmRcbiIpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBvYnRhaW4gZHJ2X2luZm9cbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gbm9kZXY7CisJCWZjb2VfY3Rscl9saW5rX2Rvd24oJmludGVyZmFjZS0+Y3Rscik7CisJCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShpbnRlcmZhY2UtPmN0bHIubHApOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiBQRlggInBoeXNfZGV2IGlzIG5ldHh0cmVtZTIgZGV2aWNlXG4iKTsKLQotCS8qIG9idGFpbiBoYmEgYW5kIGluaXRpYWxpemUgcmVzdCBvZiB0aGUgc3RydWN0dXJlICovCi0JaGJhID0gYm54MmZjX2hiYV9sb29rdXAocGh5c19kZXYpOwotCWlmICghaGJhIHx8ICFoYmEtPmN0bHIubHApIHsKLQkJcmMgPSAtRU5PREVWOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJibngyZmNfZGlzYWJsZTogaGJhIG9yIGxwb3J0IG5vdCBmb3VuZFxuIik7Ci0JfSBlbHNlIHsKLQkJZmNvZV9jdGxyX2xpbmtfZG93bigmaGJhLT5jdGxyKTsKLQkJZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGhiYS0+Y3Rsci5scCk7Ci0JfQotCi1ub2RldjoKIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gcmM7CkBAIC0xODQ0LDQ4ICsxODEwLDE5IEBACiAKIHN0YXRpYyBpbnQgYm54MmZjX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXN0cnVjdCBibngyZmNfaGJhICpoYmE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OwotCXN0cnVjdCBldGh0b29sX2RydmluZm8gZHJ2aW5mbzsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCWludCByYyA9IDA7CiAKIAlydG5sX2xvY2soKTsKLQotCUJOWDJGQ19NSVNDX0RCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCW11dGV4X2xvY2soJmJueDJmY19kZXZfbG9jayk7CiAKLQkvKiBvYnRhaW4gcGh5c2ljYWwgbmV0ZGV2ICovCi0JaWYgKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKLQkJcGh5c19kZXYgPSB2bGFuX2Rldl9yZWFsX2RldihuZXRkZXYpOwotCWVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJOb3QgYSB2bGFuIGRldmljZVxuIik7CisJaW50ZXJmYWNlID0gYm54MmZjX2ludGVyZmFjZV9sb29rdXAobmV0ZGV2KTsKKwlpZiAoIWludGVyZmFjZSB8fCAhaW50ZXJmYWNlLT5jdGxyLmxwKSB7CiAJCXJjID0gLUVOT0RFVjsKLQkJZ290byBub2RldjsKLQl9Ci0JLyogdmVyaWZ5IGlmIHRoZSBwaHlzaWNhbCBkZXZpY2UgaXMgYSBuZXR4dHJlbWUyIGRldmljZSAqLwotCWlmIChwaHlzX2Rldi0+ZXRodG9vbF9vcHMgJiYgcGh5c19kZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHJ2aW5mbykgewotCQltZW1zZXQoJmRydmluZm8sIDAsIHNpemVvZihkcnZpbmZvKSk7Ci0JCXBoeXNfZGV2LT5ldGh0b29sX29wcy0+Z2V0X2RydmluZm8ocGh5c19kZXYsICZkcnZpbmZvKTsKLQkJaWYgKHN0cmNtcChkcnZpbmZvLmRyaXZlciwgImJueDJ4IikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vdCBhIG5ldHh0cmVtZTIgZGV2aWNlXG4iKTsKLQkJCXJjID0gLUVOT0RFVjsKLQkJCWdvdG8gbm9kZXY7Ci0JCX0KLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gb2J0YWluIGRydl9pbmZvXG4iKTsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG5vZGV2OwotCX0KKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2VuYWJsZTogaW50ZXJmYWNlIG9yIGxwb3J0IG5vdCBmb3VuZFxuIik7CisJfSBlbHNlIGlmICghYm54MmZjX2xpbmtfb2soaW50ZXJmYWNlLT5jdGxyLmxwKSkKKwkJZmNvZV9jdGxyX2xpbmtfdXAoJmludGVyZmFjZS0+Y3Rscik7CiAKLQkvKiBvYnRhaW4gaGJhIGFuZCBpbml0aWFsaXplIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSAqLwotCWhiYSA9IGJueDJmY19oYmFfbG9va3VwKHBoeXNfZGV2KTsKLQlpZiAoIWhiYSB8fCAhaGJhLT5jdGxyLmxwKSB7Ci0JCXJjID0gLUVOT0RFVjsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjX2VuYWJsZTogaGJhIG9yIGxwb3J0IG5vdCBmb3VuZFxuIik7Ci0JfSBlbHNlIGlmICghYm54MmZjX2xpbmtfb2soaGJhLT5jdGxyLmxwKSkKLQkJZmNvZV9jdGxyX2xpbmtfdXAoJmhiYS0+Y3Rscik7Ci0KLW5vZGV2OgogCW11dGV4X3VubG9jaygmYm54MmZjX2Rldl9sb2NrKTsKIAlydG5sX3VubG9jaygpOwogCXJldHVybiByYzsKQEAgLTE5MDMsNiArMTg0MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYm54MmZjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIGZpcF9zdGF0ZSBmaXBfbW9kZSkKIHsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CkBAIC0xOTM4LDcgKzE4NzYsNyBAQAogCWlmIChwaHlzX2Rldi0+ZXRodG9vbF9vcHMgJiYgcGh5c19kZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHJ2aW5mbykgewogCQltZW1zZXQoJmRydmluZm8sIDAsIHNpemVvZihkcnZpbmZvKSk7CiAJCXBoeXNfZGV2LT5ldGh0b29sX29wcy0+Z2V0X2RydmluZm8ocGh5c19kZXYsICZkcnZpbmZvKTsKLQkJaWYgKHN0cmNtcChkcnZpbmZvLmRyaXZlciwgImJueDJ4IikpIHsKKwkJaWYgKHN0cm5jbXAoZHJ2aW5mby5kcml2ZXIsICJibngyeCIsIHN0cmxlbigiYm54MngiKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vdCBhIG5ldHh0cmVtZTIgZGV2aWNlXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gbmV0ZGV2X2VycjsKQEAgLTE5NDksNyArMTg4Nyw3IEBACiAJCWdvdG8gbmV0ZGV2X2VycjsKIAl9CiAKLQkvKiBvYnRhaW4gaGJhIGFuZCBpbml0aWFsaXplIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSAqLworCS8qIG9idGFpbiBpbnRlcmZhY2UgYW5kIGluaXRpYWxpemUgcmVzdCBvZiB0aGUgc3RydWN0dXJlICovCiAJaGJhID0gYm54MmZjX2hiYV9sb29rdXAocGh5c19kZXYpOwogCWlmICghaGJhKSB7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTE5NTcsNjcgKzE4OTUsNjEgQEAKIAkJZ290byBuZXRkZXZfZXJyOwogCX0KIAotCWlmICghdGVzdF9iaXQoQk5YMkZDX0ZXX0lOSVRfRE9ORSwgJmhiYS0+aW5pdF9kb25lKSkgewotCQlyYyA9IGJueDJmY19md19pbml0KGhiYSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gbmV0ZGV2X2VycjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoQk5YMkZDX0NSRUFURV9ET05FLCAmaGJhLT5pbml0X2RvbmUpKSB7CisJaWYgKGJueDJmY19pbnRlcmZhY2VfbG9va3VwKG5ldGRldikpIHsKIAkJcmMgPSAtRUVYSVNUOwogCQlnb3RvIG5ldGRldl9lcnI7CiAJfQogCi0JLyogdXBkYXRlIG5ldGRldiB3aXRoIHZsYW4gbmV0ZGV2ICovCi0JaGJhLT5uZXRkZXYgPSBuZXRkZXY7Ci0JaGJhLT52bGFuX2lkID0gdmxhbl9pZDsKLQloYmEtPnZsYW5fZW5hYmxlZCA9IDE7Ci0KLQlyYyA9IGJueDJmY19pbnRlcmZhY2Vfc2V0dXAoaGJhLCBmaXBfbW9kZSk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImJueDJmY19pbnRlcmZhY2Vfc2V0dXAgZmFpbGVkXG4iKTsKKwlpbnRlcmZhY2UgPSBibngyZmNfaW50ZXJmYWNlX2NyZWF0ZShoYmEsIG5ldGRldiwgZmlwX21vZGUpOworCWlmICghaW50ZXJmYWNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImJueDJmY19pbnRlcmZhY2VfY3JlYXRlIGZhaWxlZFxuIik7CiAJCWdvdG8gaWZwdXRfZXJyOwogCX0KIAotCWhiYS0+dGltZXJfd29ya19xdWV1ZSA9CisJaW50ZXJmYWNlLT52bGFuX2lkID0gdmxhbl9pZDsKKwlpbnRlcmZhY2UtPnZsYW5fZW5hYmxlZCA9IDE7CisKKwlpbnRlcmZhY2UtPnRpbWVyX3dvcmtfcXVldWUgPQogCQkJY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImJueDJmY190aW1lcl93cSIpOwotCWlmICghaGJhLT50aW1lcl93b3JrX3F1ZXVlKSB7CisJaWYgKCFpbnRlcmZhY2UtPnRpbWVyX3dvcmtfcXVldWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidWxwX2luaXQgY291bGQgbm90IGNyZWF0ZSB0aW1lcl93cVxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBpZnB1dF9lcnI7CiAJfQogCi0JbHBvcnQgPSBibngyZmNfaWZfY3JlYXRlKGhiYSwgJmhiYS0+cGNpZGV2LT5kZXYsIDApOworCWxwb3J0ID0gYm54MmZjX2lmX2NyZWF0ZShpbnRlcmZhY2UsICZpbnRlcmZhY2UtPmhiYS0+cGNpZGV2LT5kZXYsIDApOwogCWlmICghbHBvcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIGNyZWF0ZSBpbnRlcmZhY2UgKCVzKVxuIiwKIAkJCW5ldGRldi0+bmFtZSk7Ci0JCWJueDJmY19uZXRkZXZfY2xlYW51cChoYmEpOworCQlibngyZmNfbmV0ZGV2X2NsZWFudXAoaW50ZXJmYWNlKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGlmX2NyZWF0ZV9lcnI7CiAJfQogCisJLyogQWRkIGludGVyZmFjZSB0byBpZl9saXN0ICovCisJbGlzdF9hZGRfdGFpbCgmaW50ZXJmYWNlLT5saXN0LCAmaWZfbGlzdCk7CisKIAlscG9ydC0+Ym9vdF90aW1lID0gamlmZmllczsKIAogCS8qIE1ha2UgdGhpcyBtYXN0ZXIgTl9wb3J0ICovCi0JaGJhLT5jdGxyLmxwID0gbHBvcnQ7CisJaW50ZXJmYWNlLT5jdGxyLmxwID0gbHBvcnQ7CiAKLQlzZXRfYml0KEJOWDJGQ19DUkVBVEVfRE9ORSwgJmhiYS0+aW5pdF9kb25lKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJjcmVhdGU6IFNUQVJUIERJU0NcbiIpOwotCWJueDJmY19zdGFydF9kaXNjKGhiYSk7CisJQk5YMkZDX0hCQV9EQkcobHBvcnQsICJjcmVhdGU6IFNUQVJUIERJU0NcbiIpOworCWJueDJmY19zdGFydF9kaXNjKGludGVyZmFjZSk7CiAJLyoKIAkgKiBSZWxlYXNlIGZyb20ga3JlZl9pbml0IGluIGJueDJmY19pbnRlcmZhY2Vfc2V0dXAsIG9uIHN1Y2Nlc3MKIAkgKiBscG9ydCBzaG91bGQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0YWtlbiBpbiBibngyZmNfaWZfY3JlYXRlCiAJICovCi0JYm54MmZjX2ludGVyZmFjZV9wdXQoaGJhKTsKKwlibngyZmNfaW50ZXJmYWNlX3B1dChpbnRlcmZhY2UpOwogCS8qIHB1dCBuZXRkZXYgdGhhdCB3YXMgaGVsZCB3aGlsZSBjYWxsaW5nIGRldl9nZXRfYnlfbmFtZSAqLwogCW11dGV4X3VubG9jaygmYm54MmZjX2Rldl9sb2NrKTsKIAlydG5sX3VubG9jaygpOwogCXJldHVybiAwOwogCiBpZl9jcmVhdGVfZXJyOgotCWRlc3Ryb3lfd29ya3F1ZXVlKGhiYS0+dGltZXJfd29ya19xdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoaW50ZXJmYWNlLT50aW1lcl93b3JrX3F1ZXVlKTsKIGlmcHV0X2VycjoKLQlibngyZmNfaW50ZXJmYWNlX3B1dChoYmEpOworCWJueDJmY19pbnRlcmZhY2VfcHV0KGludGVyZmFjZSk7CiBuZXRkZXZfZXJyOgogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogbW9kX2VycjoKQEAgLTIwMjcsNyArMTk1OSw3IEBACiB9CiAKIC8qKgotICogYm54MmZjX2ZpbmRfaGJhX2Zvcl9jbmljIC0gbWFwcyBjbmljIGluc3RhbmNlIHRvIGJueDJmYyBhZGFwdGVyIGluc3RhbmNlCisgKiBibngyZmNfZmluZF9oYmFfZm9yX2NuaWMgLSBtYXBzIGNuaWMgaW5zdGFuY2UgdG8gYm54MmZjIGhiYSBpbnN0YW5jZQogICoKICAqIEBjbmljOglQb2ludGVyIHRvIGNuaWMgZGV2aWNlIGluc3RhbmNlCiAgKgpAQCAtMjA0NywxOSArMTk3OSwzMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGJueDJmY19oYmEgKmJueDJmY19oYmFfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpwaHlzX2RldikKK3N0YXRpYyBzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqYm54MmZjX2ludGVyZmFjZV9sb29rdXAoc3RydWN0IG5ldF9kZXZpY2UKKwkJCQkJCQkqbmV0ZGV2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCisJLyogQ2FsbGVkIHdpdGggYm54MmZjX2Rldl9sb2NrIGhlbGQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGVyZmFjZSwgJmlmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGludGVyZmFjZS0+bmV0ZGV2ID09IG5ldGRldikKKwkJCXJldHVybiBpbnRlcmZhY2U7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGJueDJmY19oYmEgKmJueDJmY19oYmFfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlCisJCQkJCQkgICAgICAqcGh5c19kZXYpCit7CiAJc3RydWN0IGJueDJmY19oYmEgKmhiYTsKIAogCS8qIENhbGxlZCB3aXRoIGJueDJmY19kZXZfbG9jayBoZWxkICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHRlbXAsICZhZGFwdGVyX2xpc3QpIHsKLQkJaGJhID0gKHN0cnVjdCBibngyZmNfaGJhICopbGlzdDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhiYSwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgewogCQlpZiAoaGJhLT5waHlzX2RldiA9PSBwaHlzX2RldikKIAkJCXJldHVybiBoYmE7CiAJfQotCXByaW50ayhLRVJOX0VSUiBQRlggImhiYV9sb29rdXA6IGhiYSBOVUxMXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgUEZYICJhZGFwdGVyX2xvb2t1cDogaGJhIE5VTExcbiIpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yMDcxLDYgKzIwMTQsOCBAQAogc3RhdGljIHZvaWQgYm54MmZjX3VscF9leGl0KHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSwgKnRtcDsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCiAJQk5YMkZDX01JU0NfREJHKCJFbnRlcmVkIGJueDJmY191bHBfZXhpdFxuIik7CiAKQEAgLTIwODksMTMgKzIwMzQsMjAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxpc3RfZGVsX2luaXQoJmhiYS0+bGluayk7CisJbGlzdF9kZWxfaW5pdCgmaGJhLT5saXN0KTsKIAlhZGFwdGVyX2NvdW50LS07CiAKLQlpZiAodGVzdF9iaXQoQk5YMkZDX0NSRUFURV9ET05FLCAmaGJhLT5pbml0X2RvbmUpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVyZmFjZSwgdG1wLCAmaWZfbGlzdCwgbGlzdCkgewogCQkvKiBkZXN0cm95IG5vdCBjYWxsZWQgeWV0LCBtb3ZlIHRvIHF1aWVzY2VkIGxpc3QgKi8KLQkJYm54MmZjX25ldGRldl9jbGVhbnVwKGhiYSk7Ci0JCWJueDJmY19pZl9kZXN0cm95KGhiYS0+Y3Rsci5scCk7CisJCWlmIChpbnRlcmZhY2UtPmhiYSA9PSBoYmEpIHsKKwkJCWJueDJmY19uZXRkZXZfY2xlYW51cChpbnRlcmZhY2UpOworCQkJYm54MmZjX3N0b3AoaW50ZXJmYWNlKTsKKworCQkJbGlzdF9kZWwoJmludGVyZmFjZS0+bGlzdCk7CisJCQlscG9ydCA9IGludGVyZmFjZS0+Y3Rsci5scDsKKwkJCWJueDJmY19pbnRlcmZhY2VfcHV0KGludGVyZmFjZSk7CisJCQlibngyZmNfaWZfZGVzdHJveShscG9ydCwgaGJhKTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJmJueDJmY19kZXZfbG9jayk7CiAKQEAgLTIxMDMsNyArMjA1NSw3IEBACiAJLyogdW5yZWdpc3RlciBjbmljIGRldmljZSAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQk5YMkZDX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYykpCiAJCWhiYS0+Y25pYy0+dW5yZWdpc3Rlcl9kZXZpY2UoaGJhLT5jbmljLCBDTklDX1VMUF9GQ09FKTsKLQlibngyZmNfaW50ZXJmYWNlX2Rlc3Ryb3koaGJhKTsKKwlibngyZmNfaGJhX2Rlc3Ryb3koaGJhKTsKIH0KIAogLyoqCkBAIC0yMjU5LDYgKzIyMTEsNyBAQAogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpZl9saXN0KTsKIAltdXRleF9pbml0KCZibngyZmNfZGV2X2xvY2spOwogCWFkYXB0ZXJfY291bnQgPSAwOwogCkBAIC0yMzM2LDE2ICsyMjg5LDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZibngyZmNfZGV2X2xvY2spOwogCiAJLyogVW5yZWdpc3RlciB3aXRoIGNuaWMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGJhLCBuZXh0LCAmdG9fYmVfZGVsZXRlZCwgbGluaykgewotCQlsaXN0X2RlbF9pbml0KCZoYmEtPmxpbmspOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNT0RfRVhJVDpkZXN0cm95IGhiYSA9IDB4JXAsIGtyZWYgPSAlZFxuIiwKLQkJCWhiYSwgYXRvbWljX3JlYWQoJmhiYS0+a3JlZi5yZWZjb3VudCkpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoYmEsIG5leHQsICZ0b19iZV9kZWxldGVkLCBsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmhiYS0+bGlzdCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk1PRF9FWElUOmRlc3Ryb3kgaGJhID0gMHglcFxuIiwKKwkJICAgICAgIGhiYSk7CiAJCWJueDJmY191bHBfc3RvcChoYmEpOwogCQkvKiB1bnJlZ2lzdGVyIGNuaWMgZGV2aWNlICovCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQk5YMkZDX0NOSUNfUkVHSVNURVJFRCwKIAkJCQkgICAgICAgJmhiYS0+cmVnX3dpdGhfY25pYykpCi0JCQloYmEtPmNuaWMtPnVucmVnaXN0ZXJfZGV2aWNlKGhiYS0+Y25pYywgQ05JQ19VTFBfRkNPRSk7Ci0JCWJueDJmY19pbnRlcmZhY2VfZGVzdHJveShoYmEpOworCQkJaGJhLT5jbmljLT51bnJlZ2lzdGVyX2RldmljZShoYmEtPmNuaWMsCisJCQkJCQkJIENOSUNfVUxQX0ZDT0UpOworCQlibngyZmNfaGJhX2Rlc3Ryb3koaGJhKTsKIAl9CiAJY25pY191bnJlZ2lzdGVyX2RyaXZlcihDTklDX1VMUF9GQ09FKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYwppbmRleCAwOWJkZDliLi43MmNmYjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19od2kuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB0aGF0IGxvdyBsZXZlbCBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdAogICogd2l0aCA1NzcxMiBGQ29FIGZpcm13YXJlLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDcgKzIzLDcgQEAKIAkJCQkJCXN0cnVjdCBmY29lX2tjcWUgKm9mbGRfa2NxZSk7CiBzdGF0aWMgdm9pZCBibngyZmNfaW5pdF9mYWlsdXJlKHN0cnVjdCBibngyZmNfaGJhICpoYmEsIHUzMiBlcnJfY29kZSk7CiBzdGF0aWMgdm9pZCBibngyZmNfcHJvY2Vzc19jb25uX2Rlc3Ryb3lfY21wbChzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhLAotCQkJCQlzdHJ1Y3QgZmNvZV9rY3FlICpjb25uX2Rlc3Ryb3kpOworCQkJCQlzdHJ1Y3QgZmNvZV9rY3FlICpkZXN0cm95X2tjcWUpOwogCiBpbnQgYm54MmZjX3NlbmRfc3RhdF9yZXEoc3RydWN0IGJueDJmY19oYmEgKmhiYSkKIHsKQEAgLTY3LDcgKzY3LDcgQEAKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFoYmEtPmNuaWMpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJoYmEtPmNuaWMgTlVMTCBkdXJpbmcgZmNvZSBmdyBpbml0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaGJhLT5jbmljIE5VTEwgZHVyaW5nIGZjb2UgZncgaW5pdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTAzLDYgKzEwMyw3IEBACiAJZmNvZV9pbml0Mi5oc2lfbWFqb3JfdmVyc2lvbiA9IEZDT0VfSFNJX01BSk9SX1ZFUlNJT047CiAJZmNvZV9pbml0Mi5oc2lfbWlub3JfdmVyc2lvbiA9IEZDT0VfSFNJX01JTk9SX1ZFUlNJT047CiAKKwogCWZjb2VfaW5pdDIuaGFzaF90YmxfcGJsX2FkZHJfbG8gPSAodTMyKSBoYmEtPmhhc2hfdGJsX3BibF9kbWE7CiAJZmNvZV9pbml0Mi5oYXNoX3RibF9wYmxfYWRkcl9oaSA9ICh1MzIpCiAJCQkJCSAgICgodTY0KSBoYmEtPmhhc2hfdGJsX3BibF9kbWEgPj4gMzIpOwpAQCAtMTY1LDcgKzE2Niw4IEBACiAJCQkJCXN0cnVjdCBibngyZmNfcnBvcnQgKnRndCkKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcG9ydC0+bHBvcnQ7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCXN0cnVjdCBrd3FlICprd3FlX2Fycls0XTsKIAlzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fb2ZmbG9hZDEgb2ZsZF9yZXExOwogCXN0cnVjdCBmY29lX2t3cWVfY29ubl9vZmZsb2FkMiBvZmxkX3JlcTI7CkBAIC0yMjcsNyArMjI5LDcgQEAKIAlvZmxkX3JlcTMuaGRyLmZsYWdzID0KIAkJKEZDT0VfS1dRRV9MQVlFUl9DT0RFIDw8IEZDT0VfS1dRRV9IRUFERVJfTEFZRVJfQ09ERV9TSElGVCk7CiAKLQlvZmxkX3JlcTMudmxhbl90YWcgPSBoYmEtPnZsYW5faWQgPDwKKwlvZmxkX3JlcTMudmxhbl90YWcgPSBpbnRlcmZhY2UtPnZsYW5faWQgPDwKIAkJCQlGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19WTEFOX0lEX1NISUZUOwogCW9mbGRfcmVxMy52bGFuX3RhZyB8PSAzIDw8IEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX1BSSU9SSVRZX1NISUZUOwogCkBAIC0yNzcsOCArMjc5LDIwIEBACiAJb2ZsZF9yZXEzLmZsYWdzIHw9ICgoKHJkYXRhLT5zcF9mZWF0dXJlcyAmIEZDX1NQX0ZUX1NFUUMpID8gMSA6IDApIDw8CiAJCQkgICAgIEZDT0VfS1dRRV9DT05OX09GRkxPQUQzX0JfQ09OVF9JTkNSX1NFUV9DTlRfU0hJRlQpOwogCisJLyoKKwkgKiBJbmZvIGZyb20gUFJMSSByZXNwb25zZSwgdGhpcyBpbmZvIGlzIHVzZWQgZm9yIHNlcXVlbmNlIGxldmVsIGVycm9yCisJICogcmVjb3Zlcnkgc3VwcG9ydAorCSAqLworCWlmICh0Z3QtPmRldl90eXBlID09IFRZUEVfVEFQRSkgeworCQlvZmxkX3JlcTMuZmxhZ3MgfD0gMSA8PAorCQkJCSAgICBGQ09FX0tXUUVfQ09OTl9PRkZMT0FEM19CX0NPTkZfUkVRX1NISUZUOworCQlvZmxkX3JlcTMuZmxhZ3MgfD0gKCgocmRhdGEtPmZsYWdzICYgRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRCkKKwkJCQkgICAgPyAxIDogMCkgPDwKKwkJCQkgICAgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9SRUNfVkFMSURfU0hJRlQpOworCX0KKwogCS8qIHZsYW4gZmxhZyAqLwotCW9mbGRfcmVxMy5mbGFncyB8PSAoaGJhLT52bGFuX2VuYWJsZWQgPDwKKwlvZmxkX3JlcTMuZmxhZ3MgfD0gKGludGVyZmFjZS0+dmxhbl9lbmFibGVkIDw8CiAJCQkgICAgRkNPRV9LV1FFX0NPTk5fT0ZGTE9BRDNfQl9WTEFOX0ZMQUdfU0hJRlQpOwogCiAJLyogQzJfVkFMSUQgYW5kIEFDSyBmbGFncyBhcmUgbm90IHNldCBhcyB0aGV5IGFyZSBub3Qgc3VwcHBvcnRlZCAqLwpAQCAtMzAwLDEyICszMTQsMTMgQEAKIAlvZmxkX3JlcTQuc3JjX21hY19hZGRyX21pZFsxXSA9ICBwb3J0LT5kYXRhX3NyY19hZGRyWzJdOwogCW9mbGRfcmVxNC5zcmNfbWFjX2FkZHJfaGlbMF0gPSAgcG9ydC0+ZGF0YV9zcmNfYWRkclsxXTsKIAlvZmxkX3JlcTQuc3JjX21hY19hZGRyX2hpWzFdID0gIHBvcnQtPmRhdGFfc3JjX2FkZHJbMF07Ci0Jb2ZsZF9yZXE0LmRzdF9tYWNfYWRkcl9sb1swXSA9ICBoYmEtPmN0bHIuZGVzdF9hZGRyWzVdOy8qIGZjZiBtYWMgKi8KLQlvZmxkX3JlcTQuZHN0X21hY19hZGRyX2xvWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbNF07Ci0Jb2ZsZF9yZXE0LmRzdF9tYWNfYWRkcl9taWRbMF0gPSAgaGJhLT5jdGxyLmRlc3RfYWRkclszXTsKLQlvZmxkX3JlcTQuZHN0X21hY19hZGRyX21pZFsxXSA9ICBoYmEtPmN0bHIuZGVzdF9hZGRyWzJdOwotCW9mbGRfcmVxNC5kc3RfbWFjX2FkZHJfaGlbMF0gPSAgaGJhLT5jdGxyLmRlc3RfYWRkclsxXTsKLQlvZmxkX3JlcTQuZHN0X21hY19hZGRyX2hpWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMF07CisJb2ZsZF9yZXE0LmRzdF9tYWNfYWRkcl9sb1swXSA9ICBpbnRlcmZhY2UtPmN0bHIuZGVzdF9hZGRyWzVdOworCQkJCQkJCS8qIGZjZiBtYWMgKi8KKwlvZmxkX3JlcTQuZHN0X21hY19hZGRyX2xvWzFdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbNF07CisJb2ZsZF9yZXE0LmRzdF9tYWNfYWRkcl9taWRbMF0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclszXTsKKwlvZmxkX3JlcTQuZHN0X21hY19hZGRyX21pZFsxXSA9ICBpbnRlcmZhY2UtPmN0bHIuZGVzdF9hZGRyWzJdOworCW9mbGRfcmVxNC5kc3RfbWFjX2FkZHJfaGlbMF0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclsxXTsKKwlvZmxkX3JlcTQuZHN0X21hY19hZGRyX2hpWzFdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbMF07CiAKIAlvZmxkX3JlcTQubGNxX2FkZHJfbG8gPSAodTMyKSB0Z3QtPmxjcV9kbWE7CiAJb2ZsZF9yZXE0LmxjcV9hZGRyX2hpID0gKHUzMikoKHU2NCkgdGd0LT5sY3FfZG1hID4+IDMyKTsKQEAgLTMzNSw3ICszNTAsOCBAQAogCQkJCQlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QpCiB7CiAJc3RydWN0IGt3cWUgKmt3cWVfYXJyWzJdOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAlzdHJ1Y3QgZmNvZV9rd3FlX2Nvbm5fZW5hYmxlX2Rpc2FibGUgZW5ibF9yZXE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHBvcnQtPmxwb3J0OwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSB0Z3QtPnJwb3J0OwpAQCAtMzU4LDEyICszNzQsMTIgQEAKIAllbmJsX3JlcS5zcmNfbWFjX2FkZHJfaGlbMV0gPSAgcG9ydC0+ZGF0YV9zcmNfYWRkclswXTsKIAltZW1jcHkodGd0LT5zcmNfYWRkciwgcG9ydC0+ZGF0YV9zcmNfYWRkciwgRVRIX0FMRU4pOwogCi0JZW5ibF9yZXEuZHN0X21hY19hZGRyX2xvWzBdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbNV07LyogZmNmIG1hYyAqLwotCWVuYmxfcmVxLmRzdF9tYWNfYWRkcl9sb1sxXSA9ICBoYmEtPmN0bHIuZGVzdF9hZGRyWzRdOwotCWVuYmxfcmVxLmRzdF9tYWNfYWRkcl9taWRbMF0gPSAgaGJhLT5jdGxyLmRlc3RfYWRkclszXTsKLQllbmJsX3JlcS5kc3RfbWFjX2FkZHJfbWlkWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMl07Ci0JZW5ibF9yZXEuZHN0X21hY19hZGRyX2hpWzBdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMV07Ci0JZW5ibF9yZXEuZHN0X21hY19hZGRyX2hpWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMF07CisJZW5ibF9yZXEuZHN0X21hY19hZGRyX2xvWzBdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbNV07CisJZW5ibF9yZXEuZHN0X21hY19hZGRyX2xvWzFdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbNF07CisJZW5ibF9yZXEuZHN0X21hY19hZGRyX21pZFswXSA9ICBpbnRlcmZhY2UtPmN0bHIuZGVzdF9hZGRyWzNdOworCWVuYmxfcmVxLmRzdF9tYWNfYWRkcl9taWRbMV0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclsyXTsKKwllbmJsX3JlcS5kc3RfbWFjX2FkZHJfaGlbMF0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclsxXTsKKwllbmJsX3JlcS5kc3RfbWFjX2FkZHJfaGlbMV0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclswXTsKIAogCXBvcnRfaWQgPSBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpOwogCWlmIChwb3J0X2lkICE9IHRndC0+c2lkKSB7CkBAIC0zNzksMTAgKzM5NSwxMCBAQAogCWVuYmxfcmVxLmRfaWRbMF0gPSAocG9ydF9pZCAmIDB4MDAwMDAwRkYpOwogCWVuYmxfcmVxLmRfaWRbMV0gPSAocG9ydF9pZCAmIDB4MDAwMEZGMDApID4+IDg7CiAJZW5ibF9yZXEuZF9pZFsyXSA9IChwb3J0X2lkICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0JZW5ibF9yZXEudmxhbl90YWcgPSBoYmEtPnZsYW5faWQgPDwKKwllbmJsX3JlcS52bGFuX3RhZyA9IGludGVyZmFjZS0+dmxhbl9pZCA8PAogCQkJCUZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX1ZMQU5fSURfU0hJRlQ7CiAJZW5ibF9yZXEudmxhbl90YWcgfD0gMyA8PCBGQ09FX0tXUUVfQ09OTl9FTkFCTEVfRElTQUJMRV9QUklPUklUWV9TSElGVDsKLQllbmJsX3JlcS52bGFuX2ZsYWcgPSBoYmEtPnZsYW5fZW5hYmxlZDsKKwllbmJsX3JlcS52bGFuX2ZsYWcgPSBpbnRlcmZhY2UtPnZsYW5fZW5hYmxlZDsKIAllbmJsX3JlcS5jb250ZXh0X2lkID0gdGd0LT5jb250ZXh0X2lkOwogCWVuYmxfcmVxLmNvbm5faWQgPSB0Z3QtPmZjb2VfY29ubl9pZDsKIApAQCAtNDAyLDcgKzQxOCw4IEBACiBpbnQgYm54MmZjX3NlbmRfc2Vzc2lvbl9kaXNhYmxlX3JlcShzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0LAogCQkJCSAgICBzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QpCiB7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCXN0cnVjdCBmY29lX2t3cWVfY29ubl9lbmFibGVfZGlzYWJsZSBkaXNhYmxlX3JlcTsKIAlzdHJ1Y3Qga3dxZSAqa3dxZV9hcnJbMl07CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHRndC0+cnBvcnQ7CkBAIC00MjMsMTIgKzQ0MCwxMiBAQAogCWRpc2FibGVfcmVxLnNyY19tYWNfYWRkcl9oaVswXSA9ICB0Z3QtPnNyY19hZGRyWzFdOwogCWRpc2FibGVfcmVxLnNyY19tYWNfYWRkcl9oaVsxXSA9ICB0Z3QtPnNyY19hZGRyWzBdOwogCi0JZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX2xvWzBdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbNV07LyogZmNmIG1hYyAqLwotCWRpc2FibGVfcmVxLmRzdF9tYWNfYWRkcl9sb1sxXSA9ICBoYmEtPmN0bHIuZGVzdF9hZGRyWzRdOwotCWRpc2FibGVfcmVxLmRzdF9tYWNfYWRkcl9taWRbMF0gPSAgaGJhLT5jdGxyLmRlc3RfYWRkclszXTsKLQlkaXNhYmxlX3JlcS5kc3RfbWFjX2FkZHJfbWlkWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMl07Ci0JZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX2hpWzBdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMV07Ci0JZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX2hpWzFdID0gIGhiYS0+Y3Rsci5kZXN0X2FkZHJbMF07CisJZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX2xvWzBdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbNV07CisJZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX2xvWzFdID0gIGludGVyZmFjZS0+Y3Rsci5kZXN0X2FkZHJbNF07CisJZGlzYWJsZV9yZXEuZHN0X21hY19hZGRyX21pZFswXSA9ICBpbnRlcmZhY2UtPmN0bHIuZGVzdF9hZGRyWzNdOworCWRpc2FibGVfcmVxLmRzdF9tYWNfYWRkcl9taWRbMV0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclsyXTsKKwlkaXNhYmxlX3JlcS5kc3RfbWFjX2FkZHJfaGlbMF0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclsxXTsKKwlkaXNhYmxlX3JlcS5kc3RfbWFjX2FkZHJfaGlbMV0gPSAgaW50ZXJmYWNlLT5jdGxyLmRlc3RfYWRkclswXTsKIAogCXBvcnRfaWQgPSB0Z3QtPnNpZDsKIAlkaXNhYmxlX3JlcS5zX2lkWzBdID0gKHBvcnRfaWQgJiAweDAwMDAwMEZGKTsKQEAgLTQ0MiwxMSArNDU5LDExIEBACiAJZGlzYWJsZV9yZXEuZF9pZFsyXSA9IChwb3J0X2lkICYgMHgwMEZGMDAwMCkgPj4gMTY7CiAJZGlzYWJsZV9yZXEuY29udGV4dF9pZCA9IHRndC0+Y29udGV4dF9pZDsKIAlkaXNhYmxlX3JlcS5jb25uX2lkID0gdGd0LT5mY29lX2Nvbm5faWQ7Ci0JZGlzYWJsZV9yZXEudmxhbl90YWcgPSBoYmEtPnZsYW5faWQgPDwKKwlkaXNhYmxlX3JlcS52bGFuX3RhZyA9IGludGVyZmFjZS0+dmxhbl9pZCA8PAogCQkJCUZDT0VfS1dRRV9DT05OX0VOQUJMRV9ESVNBQkxFX1ZMQU5fSURfU0hJRlQ7CiAJZGlzYWJsZV9yZXEudmxhbl90YWcgfD0KIAkJCTMgPDwgRkNPRV9LV1FFX0NPTk5fRU5BQkxFX0RJU0FCTEVfUFJJT1JJVFlfU0hJRlQ7Ci0JZGlzYWJsZV9yZXEudmxhbl9mbGFnID0gaGJhLT52bGFuX2VuYWJsZWQ7CisJZGlzYWJsZV9yZXEudmxhbl9mbGFnID0gaW50ZXJmYWNlLT52bGFuX2VuYWJsZWQ7CiAKIAlrd3FlX2FyclswXSA9IChzdHJ1Y3Qga3dxZSAqKSAmZGlzYWJsZV9yZXE7CiAKQEAgLTUyNSw3ICs1NDIsNyBAQAogewogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSB0Z3QtPnBvcnQ7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHBvcnQtPmxwb3J0OwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OwogCXN0cnVjdCBibngyZmNfdW5zb2xfZWxzICp1bnNvbF9lbHM7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKQEAgLTU4Niw3ICs2MDMsNyBAQAogCQlmcl9lb2YoZnApID0gRkNfRU9GX1Q7CiAJCWZyX2NyYyhmcCkgPSBjcHVfdG9fbGUzMih+Y3JjKTsKIAkJdW5zb2xfZWxzLT5scG9ydCA9IGxwb3J0OwotCQl1bnNvbF9lbHMtPmhiYSA9IGhiYTsKKwkJdW5zb2xfZWxzLT5oYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAkJdW5zb2xfZWxzLT5mcCA9IGZwOwogCQlJTklUX1dPUksoJnVuc29sX2Vscy0+dW5zb2xfZWxzX3dvcmssIGJueDJmY191bnNvbF9lbHNfd29yayk7CiAJCXF1ZXVlX3dvcmsoYm54MmZjX3dxLCAmdW5zb2xfZWxzLT51bnNvbF9lbHNfd29yayk7CkBAIC02MDgsOSArNjI1LDEyIEBACiAJdTMyIGZyYW1lX2xlbiwgbGVuOwogCXN0cnVjdCBibngyZmNfY21kICppb19yZXEgPSBOVUxMOwogCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICp0YXNrLCAqdGFza19wYWdlOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSB0Z3QtPnBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRndC0+cG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJaW50IHRhc2tfaWR4LCBpbmRleDsKIAlpbnQgcmMgPSAwOworCXU2NCBlcnJfd2Fybl9iaXRfbWFwOworCXU4IGVycl93YXJuID0gMHhmZjsKIAogCiAJQk5YMkZDX1RHVF9EQkcodGd0LCAiRW50ZXJlZCBVTlNPTCBDT01QTEVUSU9OIHdxZSA9IDB4JXhcbiIsIHdxZSk7CkBAIC02NzMsMzkgKzY5Myw0MyBAQAogCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJidWZfb2Zmc2V0cyAtIHR4ID0gMHgleCwgcnggPSAweCV4XG4iLAogCQkJZXJyX2VudHJ5LT5kYXRhLnR4X2J1Zl9vZmYsIGVycl9lbnRyeS0+ZGF0YS5yeF9idWZfb2ZmKTsKIAotCQlibngyZmNfcmV0dXJuX3JxZSh0Z3QsIDEpOwogCiAJCWlmICh4aWQgPiBCTlgyRkNfTUFYX1hJRCkgewogCQkJQk5YMkZDX1RHVF9EQkcodGd0LCAieGlkKDB4JXgpIG91dCBvZiBGVyByYW5nZVxuIiwKIAkJCQkgICB4aWQpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwotCQkJYnJlYWs7CisJCQlnb3RvIHJldF9lcnJfcnFlOwogCQl9CiAKIAkJdGFza19pZHggPSB4aWQgLyBCTlgyRkNfVEFTS1NfUEVSX1BBR0U7CiAJCWluZGV4ID0geGlkICUgQk5YMkZDX1RBU0tTX1BFUl9QQUdFOwogCQl0YXNrX3BhZ2UgPSAoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKikKLQkJCQkJCWhiYS0+dGFza19jdHhbdGFza19pZHhdOworCQkJCQloYmEtPnRhc2tfY3R4W3Rhc2tfaWR4XTsKIAkJdGFzayA9ICYodGFza19wYWdlW2luZGV4XSk7CiAKIAkJaW9fcmVxID0gKHN0cnVjdCBibngyZmNfY21kICopaGJhLT5jbWRfbWdyLT5jbWRzW3hpZF07Ci0JCWlmICghaW9fcmVxKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAoIWlvX3JlcSkKKwkJCWdvdG8gcmV0X2Vycl9ycWU7CiAKIAkJaWYgKGlvX3JlcS0+Y21kX3R5cGUgIT0gQk5YMkZDX1NDU0lfQ01EKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJfd2FybjogTm90IGEgU0NTSSBjbWRcbiIpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwotCQkJYnJlYWs7CisJCQlnb3RvIHJldF9lcnJfcnFlOwogCQl9CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyRkNfRkxBR19JT19DTEVBTlVQLAogCQkJCSAgICAgICAmaW9fcmVxLT5yZXFfZmxhZ3MpKSB7CiAJCQlCTlgyRkNfSU9fREJHKGlvX3JlcSwgInVuc29sX2VycjogY2xlYW51cCBpbiAiCiAJCQkJCSAgICAicHJvZ3Jlc3MuLiBpZ25vcmUgdW5zb2wgZXJyXG4iKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKLQkJCWJyZWFrOworCQkJZ290byByZXRfZXJyX3JxZTsKKwkJfQorCisJCWVycl93YXJuX2JpdF9tYXAgPSAodTY0KQorCQkJKCh1NjQpZXJyX2VudHJ5LT5kYXRhLmVycl93YXJuX2JpdG1hcF9oaSA8PCAzMikgfAorCQkJKHU2NCllcnJfZW50cnktPmRhdGEuZXJyX3dhcm5fYml0bWFwX2xvOworCQlmb3IgKGkgPSAwOyBpIDwgQk5YMkZDX05VTV9FUlJfQklUUzsgaSsrKSB7CisJCQlpZiAoZXJyX3dhcm5fYml0X21hcCAmICh1NjQpKCh1NjQpMSA8PCBpKSkgeworCQkJCWVycl93YXJuID0gaTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC03MTUsMjYgKzczOSw2MSBAQAogCQkgKiBsb2dnaW5nIG91dCB0aGUgdGFyZ2V0LCB3aGVuIHRoZSBBQlRTIGV2ZW50dWFsbHkKIAkJICogdGltZXMgb3V0LgogCQkgKi8KLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJOWDJGQ19GTEFHX0lTU1VFX0FCVFMsCi0JCQkJICAgICAgJmlvX3JlcS0+cmVxX2ZsYWdzKSkgewotCQkJLyoKLQkJCSAqIENhbmNlbCB0aGUgdGltZW91dF93b3JrLCBhcyB3ZSByZWNlaXZlZCBJTwotCQkJICogY29tcGxldGlvbiB3aXRoIEZXIGVycm9yLgotCQkJICovCi0JCQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmaW9fcmVxLT50aW1lb3V0X3dvcmspKQotCQkJCWtyZWZfcHV0KCZpb19yZXEtPnJlZmNvdW50LAotCQkJCQkgYm54MmZjX2NtZF9yZWxlYXNlKTsgLyogdGltZXIgaG9sZCAqLwotCi0JCQlyYyA9IGJueDJmY19pbml0aWF0ZV9hYnRzKGlvX3JlcSk7Ci0JCQlpZiAocmMgIT0gU1VDQ0VTUykgewotCQkJCUJOWDJGQ19JT19EQkcoaW9fcmVxLCAiZXJyX3dhcm46IGluaXRpYXRlX2FidHMgIgotCQkJCQkiZmFpbGVkLiBpc3N1ZSBjbGVhbnVwXG4iKTsKLQkJCQlyYyA9IGJueDJmY19pbml0aWF0ZV9jbGVhbnVwKGlvX3JlcSk7Ci0JCQkJQlVHX09OKHJjKTsKLQkJCX0KLQkJfSBlbHNlCisJCWlmICh0ZXN0X2JpdChCTlgyRkNfRkxBR19JU1NVRV9BQlRTLCAmaW9fcmVxLT5yZXFfZmxhZ3MpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJfd2FybjogaW9fcmVxICgweCV4KSBhbHJlYWR5ICIKIAkJCQkJICAgICJpbiBBQlRTIHByb2Nlc3NpbmdcbiIsIHhpZCk7CisJCQlnb3RvIHJldF9lcnJfcnFlOworCQl9CisJCUJOWDJGQ19UR1RfREJHKHRndCwgImVyciA9IDB4JXhcbiIsIGVycl93YXJuKTsKKwkJaWYgKHRndC0+ZGV2X3R5cGUgIT0gVFlQRV9UQVBFKQorCQkJZ290byBza2lwX3JlYzsKKwkJc3dpdGNoIChlcnJfd2FybikgeworCQljYXNlIEZDT0VfRVJST1JfQ09ERV9SRUNfVE9WX1RJTUVSX0VYUElSQVRJT046CisJCWNhc2UgRkNPRV9FUlJPUl9DT0RFX0RBVEFfT09PX1JPOgorCQljYXNlIEZDT0VfRVJST1JfQ09ERV9DT01NT05fSU5DT1JSRUNUX1NFUV9DTlQ6CisJCWNhc2UgRkNPRV9FUlJPUl9DT0RFX0RBVEFfU09GSTNfU0VRX0FDVElWRV9TRVQ6CisJCWNhc2UgRkNPRV9FUlJPUl9DT0RFX0ZDUF9SU1BfT1BFTkVEX1NFUToKKwkJY2FzZSBGQ09FX0VSUk9SX0NPREVfREFUQV9TT0ZOX1NFUV9BQ1RJVkVfUkVTRVQ6CisJCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJSRUMgVE9WIHBvcHBlZCBmb3IgeGlkIC0gMHgleFxuIiwKKwkJCQkgICB4aWQpOworCQkJbWVtc2V0KCZpb19yZXEtPmVycl9lbnRyeSwgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGZjb2VfZXJyX3JlcG9ydF9lbnRyeSkpOworCQkJbWVtY3B5KCZpb19yZXEtPmVycl9lbnRyeSwgZXJyX2VudHJ5LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmNvZV9lcnJfcmVwb3J0X2VudHJ5KSk7CisJCQlpZiAoIXRlc3RfYml0KEJOWDJGQ19GTEFHX1NSUl9TRU5ULAorCQkJCSAgICAgICZpb19yZXEtPnJlcV9mbGFncykpIHsKKwkJCQlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CisJCQkJcmMgPSBibngyZmNfc2VuZF9yZWMoaW9fcmVxKTsKKwkJCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOworCisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIHNraXBfcmVjOworCQkJfSBlbHNlCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU1JSIGluIHByb2dyZXNzXG4iKTsKKwkJCWdvdG8gcmV0X2Vycl9ycWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKK3NraXBfcmVjOgorCQlzZXRfYml0KEJOWDJGQ19GTEFHX0lTU1VFX0FCVFMsICZpb19yZXEtPnJlcV9mbGFncyk7CisJCS8qCisJCSAqIENhbmNlbCB0aGUgdGltZW91dF93b3JrLCBhcyB3ZSByZWNlaXZlZCBJTworCQkgKiBjb21wbGV0aW9uIHdpdGggRlcgZXJyb3IuCisJCSAqLworCQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmaW9fcmVxLT50aW1lb3V0X3dvcmspKQorCQkJa3JlZl9wdXQoJmlvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7CisKKwkJcmMgPSBibngyZmNfaW5pdGlhdGVfYWJ0cyhpb19yZXEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyX3dhcm46IGluaXRpYXRlX2FidHMgIgorCQkJCSJmYWlsZWQgeGlkID0gMHgleC4gaXNzdWUgY2xlYW51cFxuIiwKKwkJCQlpb19yZXEtPnhpZCk7CisJCQlibngyZmNfaW5pdGlhdGVfY2xlYW51cChpb19yZXEpOworCQl9CityZXRfZXJyX3JxZToKKwkJYm54MmZjX3JldHVybl9ycWUodGd0LCAxKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQlicmVhazsKIApAQCAtNzU1LDYgKzgxNCw0NyBAQAogCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJidWZfb2Zmc2V0cyAtIHR4ID0gMHgleCwgcnggPSAweCV4IiwKIAkJCWVycl9lbnRyeS0+ZGF0YS50eF9idWZfb2ZmLCBlcnJfZW50cnktPmRhdGEucnhfYnVmX29mZik7CiAKKwkJaWYgKHhpZCA+IEJOWDJGQ19NQVhfWElEKSB7CisJCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJ4aWQoMHgleCkgb3V0IG9mIEZXIHJhbmdlXG4iLCB4aWQpOworCQkJZ290byByZXRfd2Fybl9ycWU7CisJCX0KKworCQllcnJfd2Fybl9iaXRfbWFwID0gKHU2NCkKKwkJCSgodTY0KWVycl9lbnRyeS0+ZGF0YS5lcnJfd2Fybl9iaXRtYXBfaGkgPDwgMzIpIHwKKwkJCSh1NjQpZXJyX2VudHJ5LT5kYXRhLmVycl93YXJuX2JpdG1hcF9sbzsKKwkJZm9yIChpID0gMDsgaSA8IEJOWDJGQ19OVU1fRVJSX0JJVFM7IGkrKykgeworCQkJaWYgKGVycl93YXJuX2JpdF9tYXAgJiAodTY0KSAoMSA8PCBpKSkgeworCQkJCWVycl93YXJuID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJ3YXJuID0gMHgleFxuIiwgZXJyX3dhcm4pOworCisJCXRhc2tfaWR4ID0geGlkIC8gQk5YMkZDX1RBU0tTX1BFUl9QQUdFOworCQlpbmRleCA9IHhpZCAlIEJOWDJGQ19UQVNLU19QRVJfUEFHRTsKKwkJdGFza19wYWdlID0gKHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICopCisJCQkgICAgIGludGVyZmFjZS0+aGJhLT50YXNrX2N0eFt0YXNrX2lkeF07CisJCXRhc2sgPSAmKHRhc2tfcGFnZVtpbmRleF0pOworCQlpb19yZXEgPSAoc3RydWN0IGJueDJmY19jbWQgKiloYmEtPmNtZF9tZ3ItPmNtZHNbeGlkXTsKKwkJaWYgKCFpb19yZXEpCisJCQlnb3RvIHJldF93YXJuX3JxZTsKKworCQlpZiAoaW9fcmVxLT5jbWRfdHlwZSAhPSBCTlgyRkNfU0NTSV9DTUQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImVycl93YXJuOiBOb3QgYSBTQ1NJIGNtZFxuIik7CisJCQlnb3RvIHJldF93YXJuX3JxZTsKKwkJfQorCisJCW1lbXNldCgmaW9fcmVxLT5lcnJfZW50cnksIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGZjb2VfZXJyX3JlcG9ydF9lbnRyeSkpOworCQltZW1jcHkoJmlvX3JlcS0+ZXJyX2VudHJ5LCBlcnJfZW50cnksCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGZjb2VfZXJyX3JlcG9ydF9lbnRyeSkpOworCisJCWlmIChlcnJfd2FybiA9PSBGQ09FX0VSUk9SX0NPREVfUkVDX1RPVl9USU1FUl9FWFBJUkFUSU9OKQorCQkJLyogUkVDX1RPViBpcyBub3QgYSB3YXJuaW5nIGNvZGUgKi8KKwkJCUJVR19PTigxKTsKKwkJZWxzZQorCQkJQk5YMkZDX1RHVF9EQkcodGd0LCAiVW5zb2xpY2l0ZWQgd2FybmluZ1xuIik7CityZXRfd2Fybl9ycWU6CiAJCWJueDJmY19yZXR1cm5fcnFlKHRndCwgMSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKIAkJYnJlYWs7CkBAIC03NzAsNyArODcwLDggQEAKIAlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzazsKIAlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFza19wYWdlOwogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSB0Z3QtPnBvcnQ7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCXN0cnVjdCBibngyZmNfY21kICppb19yZXE7CiAJaW50IHRhc2tfaWR4LCBpbmRleDsKIAl1MTYgeGlkOwpAQCAtNzgxLDcgKzg4Miw3IEBACiAJc3Bpbl9sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKIAl4aWQgPSB3cWUgJiBGQ09FX1BFTkRfV1FfQ1FFX1RBU0tfSUQ7CiAJaWYgKHhpZCA+PSBCTlgyRkNfTUFYX1RBU0tTKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiRVJST1I6eGlkIG91dCBvZiByYW5nZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVSUk9SOnhpZCBvdXQgb2YgcmFuZ2VcbiIpOwogCQlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC04NjEsNiArOTYyLDEzIEBACiAJCWtyZWZfcHV0KCZpb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOwogCQlicmVhazsKIAorCWNhc2UgQk5YMkZDX1NFUV9DTEVBTlVQOgorCQlCTlgyRkNfSU9fREJHKGlvX3JlcSwgImNxX2NvbXBsKDB4JXgpIC0gc2VxIGNsZWFudXAgcmVzcFxuIiwKKwkJCSAgICAgIGlvX3JlcS0+eGlkKTsKKwkJYm54MmZjX3Byb2Nlc3Nfc2VxX2NsZWFudXBfY29tcGwoaW9fcmVxLCB0YXNrLCByeF9zdGF0ZSk7CisJCWtyZWZfcHV0KCZpb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkludmFsaWQgY21kX3R5cGUgJWRcbiIsIGNtZF90eXBlKTsKIAkJYnJlYWs7CkBAIC05NjIsOCArMTA3MCwxMCBAQAogCQkJCTEgLSB0Z3QtPmNxX2N1cnJfdG9nZ2xlX2JpdDsKIAkJfQogCX0KLQlibngyZmNfYXJtX2NxKHRndCk7Ci0JYXRvbWljX2FkZChudW1fZnJlZV9zcWVzLCAmdGd0LT5mcmVlX3NxZXMpOworCWlmIChudW1fZnJlZV9zcWVzKSB7CisJCWJueDJmY19hcm1fY3EodGd0KTsKKwkJYXRvbWljX2FkZChudW1fZnJlZV9zcWVzLCAmdGd0LT5mcmVlX3NxZXMpOworCX0KIAlzcGluX3VubG9ja19iaCgmdGd0LT5jcV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTk4Myw3ICsxMDkzLDcgQEAKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QgPSBoYmEtPnRndF9vZmxkX2xpc3RbY29ubl9pZF07CiAKIAlpZiAoIXRndCkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImNvbm5faWQgMHgleCBub3QgdmFsaWRcbiIsIGNvbm5faWQpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjb25uX2lkIDB4JXggbm90IHZhbGlkXG4iLCBjb25uX2lkKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTAwNCw2ICsxMTE0LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0CQkqdGd0OwogCXN0cnVjdCBmY29lX3BvcnQJCSpwb3J0OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlCQkqaW50ZXJmYWNlOwogCXUzMgkJCQljb25uX2lkOwogCXUzMgkJCQljb250ZXh0X2lkOwogCWludAkJCQlyYzsKQEAgLTEwMTgsOCArMTEyOSw5IEBACiAJQk5YMkZDX1RHVF9EQkcodGd0LCAiRW50ZXJlZCBvZmxkIGNvbXBsIC0gY29udGV4dF9pZCA9IDB4JXhcbiIsCiAJCW9mbGRfa2NxZS0+ZmNvZV9jb25uX2NvbnRleHRfaWQpOwogCXBvcnQgPSB0Z3QtPnBvcnQ7Ci0JaWYgKGhiYSAhPSB0Z3QtPnBvcnQtPnByaXYpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJFUlJPUjpvZmxkX2NtcGw6IEhCQSBtaXMtbWF0Y2hcbiIpOworCWludGVyZmFjZSA9IHRndC0+cG9ydC0+cHJpdjsKKwlpZiAoaGJhICE9IGludGVyZmFjZS0+aGJhKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVSUk9SOm9mbGRfY21wbDogSEJBIG1pcy1tYXRjaFxuIik7CiAJCWdvdG8gb2ZsZF9jbXBsX2VycjsKIAl9CiAJLyoKQEAgLTEwNDAsNyArMTE1Miw3IEBACiAJCS8qIG5vdyBlbmFibGUgdGhlIHNlc3Npb24gKi8KIAkJcmMgPSBibngyZmNfc2VuZF9zZXNzaW9uX2VuYWJsZV9yZXEocG9ydCwgdGd0KTsKIAkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImVuYWJsZSBzZXNzaW9uIGZhaWxlZFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJlbmFibGUgc2Vzc2lvbiBmYWlsZWRcbiIpOwogCQkJZ290byBvZmxkX2NtcGxfZXJyOwogCQl9CiAJfQpAQCAtMTA2Myw2ICsxMTc1LDcgQEAKIAkJCQkJCXN0cnVjdCBmY29lX2tjcWUgKm9mbGRfa2NxZSkKIHsKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0CQkqdGd0OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlCQkqaW50ZXJmYWNlOwogCXUzMgkJCQljb25uX2lkOwogCXUzMgkJCQljb250ZXh0X2lkOwogCkBAIC0xMDcwLDcgKzExODMsNyBAQAogCWNvbm5faWQgPSBvZmxkX2tjcWUtPmZjb2VfY29ubl9pZDsKIAl0Z3QgPSBoYmEtPnRndF9vZmxkX2xpc3RbY29ubl9pZF07CiAJaWYgKCF0Z3QpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJFUlJPUjplbmJsX2NtcGw6IE5vIHBlbmRpbmcgb2ZsZCByZXFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJFUlJPUjplbmJsX2NtcGw6IE5vIHBlbmRpbmcgb2ZsZCByZXFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDgyLDE2ICsxMTk1LDE3IEBACiAJICogYW5kIGVuYWJsZQogCSAqLwogCWlmICh0Z3QtPmNvbnRleHRfaWQgIT0gY29udGV4dF9pZCkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImNvbnRleHQgaWQgbWlzLW1hdGNoXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY29udGV4dCBpZCBtaXMtbWF0Y2hcbiIpOwogCQlyZXR1cm47CiAJfQotCWlmIChoYmEgIT0gdGd0LT5wb3J0LT5wcml2KSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiYm54MmZjLWVuYmxfY21wbDogSEJBIG1pcy1tYXRjaFxuIik7CisJaW50ZXJmYWNlID0gdGd0LT5wb3J0LT5wcml2OworCWlmIChoYmEgIT0gaW50ZXJmYWNlLT5oYmEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiYm54MmZjLWVuYmxfY21wbDogSEJBIG1pcy1tYXRjaFxuIik7CiAJCWdvdG8gZW5ibF9jbXBsX2VycjsKIAl9Ci0JaWYgKG9mbGRfa2NxZS0+Y29tcGxldGlvbl9zdGF0dXMpIHsKKwlpZiAob2ZsZF9rY3FlLT5jb21wbGV0aW9uX3N0YXR1cykKIAkJZ290byBlbmJsX2NtcGxfZXJyOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCS8qIGVuYWJsZSBzdWNjZXNzZnVsIC0gcnBvcnQgcmVhZHkgZm9yIGlzc3VpbmcgSU9zICovCiAJCXNldF9iaXQoQk5YMkZDX0ZMQUdfT0ZGTE9BREVELCAmdGd0LT5mbGFncyk7CiAJCXNldF9iaXQoQk5YMkZDX0ZMQUdfT0ZMRF9SRVFfQ01QTCwgJnRndC0+ZmxhZ3MpOwpAQCAtMTExNCwxNCArMTIyOCwxNCBAQAogCWNvbm5faWQgPSBkaXNhYmxlX2tjcWUtPmZjb2VfY29ubl9pZDsKIAl0Z3QgPSBoYmEtPnRndF9vZmxkX2xpc3RbY29ubl9pZF07CiAJaWYgKCF0Z3QpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJFUlJPUjogZGlzYWJsZV9jbXBsOiBObyBkaXNhYmxlIHJlcVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkVSUk9SOiBkaXNhYmxlX2NtcGw6IE5vIGRpc2FibGUgcmVxXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCUJOWDJGQ19UR1RfREJHKHRndCwgUEZYICJkaXNhYmxlX2NtcGw6IGNvbm5faWQgJWRcbiIsIGNvbm5faWQpOwogCiAJaWYgKGRpc2FibGVfa2NxZS0+Y29tcGxldGlvbl9zdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJFUlJPUjogRGlzYWJsZSBmYWlsZWQgd2l0aCBjbXBsIHN0YXR1cyAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRGlzYWJsZSBmYWlsZWQgd2l0aCBjbXBsIHN0YXR1cyAlZFxuIiwKIAkJCWRpc2FibGVfa2NxZS0+Y29tcGxldGlvbl9zdGF0dXMpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKQEAgLTExNDMsMTQgKzEyNTcsMTQgQEAKIAljb25uX2lkID0gZGVzdHJveV9rY3FlLT5mY29lX2Nvbm5faWQ7CiAJdGd0ID0gaGJhLT50Z3Rfb2ZsZF9saXN0W2Nvbm5faWRdOwogCWlmICghdGd0KSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZGVzdHJveV9jbXBsOiBObyBkZXN0cm95IHJlcVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImRlc3Ryb3lfY21wbDogTm8gZGVzdHJveSByZXFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJQk5YMkZDX1RHVF9EQkcodGd0LCAiZGVzdHJveV9jbXBsOiBjb25uX2lkICVkXG4iLCBjb25uX2lkKTsKIAogCWlmIChkZXN0cm95X2tjcWUtPmNvbXBsZXRpb25fc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiRGVzdHJveSBjb25uIGZhaWxlZCwgY21wbCBzdGF0dXMgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIkRlc3Ryb3kgY29ubiBmYWlsZWQsIGNtcGwgc3RhdHVzICVkXG4iLAogCQkJZGVzdHJveV9rY3FlLT5jb21wbGV0aW9uX3N0YXR1cyk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpAQCAtMTE4Miw2ICsxMjk2LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBGQ09FX0tDUUVfQ09NUExFVElPTl9TVEFUVVNfV1JPTkdfSFNJX1ZFUlNJT046CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImluaXQgZmFpbHVyZSBkdWUgdG8gSFNJIG1pc21hdGNoXG4iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5rbm93biBFcnJvciBjb2RlICVkXG4iLCBlcnJfY29kZSk7CiAJfQpAQCAtMTI0MCw3ICsxMzU1LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiREVTVFJPWSBzdWNjZXNzXG4iKTsKIAkJCX0KLQkJCWhiYS0+ZmxhZ3MgfD0gQk5YMkZDX0ZMQUdfREVTVFJPWV9DTVBMOworCQkJc2V0X2JpdChCTlgyRkNfRkxBR19ERVNUUk9ZX0NNUEwsICZoYmEtPmZsYWdzKTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGJhLT5kZXN0cm95X3dhaXQpOwogCQkJYnJlYWs7CiAKQEAgLTEyNjIsNyArMTM3Nyw3IEBACiAJCWNhc2UgRkNPRV9LQ1FFX09QQ09ERV9GQ09FX0VSUk9SOgogCQkJLyogZmFsbCB0aHJ1ICovCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInVua25vd24gb3Bjb2RlIDB4JXhcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmtub3duIG9wY29kZSAweCV4XG4iLAogCQkJCQkJCQlrY3FlLT5vcF9jb2RlKTsKIAkJfQogCX0KQEAgLTEzMDUsNyArMTQyMCw4IEBACiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IHRndC0+cG9ydDsKIAl1MzIgcmVnX29mZjsKIAlyZXNvdXJjZV9zaXplX3QgcmVnX2Jhc2U7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCiAJcmVnX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaGJhLT5wY2lkZXYsCiAJCQkJCUJOWDJYX0RPT1JCRUxMX1BDSV9CQVIpOwpAQCAtMTM0NCw2ICsxNDYwLDk2IEBACiAJdGd0LT5jb25uX2RiLT5ycV9wcm9kID0gdGd0LT5ycV9wcm9kX2lkeDsKIH0KIAordm9pZCBibngyZmNfaW5pdF9zZXFfY2xlYW51cF90YXNrKHN0cnVjdCBibngyZmNfY21kICpzZXFfY2xucF9yZXEsCisJCQkJICBzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzaywKKwkJCQkgIHN0cnVjdCBibngyZmNfY21kICpvcmlnX2lvX3JlcSwKKwkJCQkgIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NfY21kID0gb3JpZ19pb19yZXEtPnNjX2NtZDsKKwlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QgPSBzZXFfY2xucF9yZXEtPnRndDsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdGd0LT5wb3J0LT5wcml2OworCXN0cnVjdCBmY29lX2JkX2N0eCAqYmQgPSBvcmlnX2lvX3JlcS0+YmRfdGJsLT5iZF90Ymw7CisJc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKm9yaWdfdGFzazsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFza19wYWdlOworCXN0cnVjdCBmY29lX2V4dF9tdWxfc2dlc19jdHggKnNnbDsKKwl1OCB0YXNrX3R5cGUgPSBGQ09FX1RBU0tfVFlQRV9TRVFVRU5DRV9DTEVBTlVQOworCXU4IG9yaWdfdGFza190eXBlOworCXUxNiBvcmlnX3hpZCA9IG9yaWdfaW9fcmVxLT54aWQ7CisJdTMyIGNvbnRleHRfaWQgPSB0Z3QtPmNvbnRleHRfaWQ7CisJdTY0IHBoeXNfYWRkciA9ICh1NjQpb3JpZ19pb19yZXEtPmJkX3RibC0+YmRfdGJsX2RtYTsKKwl1MzIgb3JpZ19vZmZzZXQgPSBvZmZzZXQ7CisJaW50IGJkX2NvdW50OworCWludCBvcmlnX3Rhc2tfaWR4LCBpbmRleDsKKwlpbnQgaTsKKworCW1lbXNldCh0YXNrLCAwLCBzaXplb2Yoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkpKTsKKworCWlmIChzY19jbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCW9yaWdfdGFza190eXBlID0gRkNPRV9UQVNLX1RZUEVfV1JJVEU7CisJZWxzZQorCQlvcmlnX3Rhc2tfdHlwZSA9IEZDT0VfVEFTS19UWVBFX1JFQUQ7CisKKwkvKiBUeCBmbGFncyAqLworCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHgudHhfZmxhZ3MgPQorCQkJCUZDT0VfVEFTS19UWF9TVEFURV9TRVFVRU5DRV9DTEVBTlVQIDw8CisJCQkJRkNPRV9UQ0VfVFhfV1JfUlhfUkRfQ09OU1RfVFhfU1RBVEVfU0hJRlQ7CisJLyogaW5pdCBmbGFncyAqLworCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyA9IHRhc2tfdHlwZSA8PAorCQkJCUZDT0VfVENFX1RYX1dSX1JYX1JEX0NPTlNUX1RBU0tfVFlQRV9TSElGVDsKKwl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgfD0gRkNPRV9UQVNLX0NMQVNTX1RZUEVfMyA8PAorCQkJCUZDT0VfVENFX1RYX1dSX1JYX1JEX0NPTlNUX0NMQVNTX1RZUEVfU0hJRlQ7CisJdGFzay0+cnh3cl90eHJkLmNvbnN0X2N0eC5pbml0X2ZsYWdzID0gY29udGV4dF9pZCA8PAorCQkJCUZDT0VfVENFX1JYX1dSX1RYX1JEX0NPTlNUX0NJRF9TSElGVDsKKwl0YXNrLT5yeHdyX3R4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgPSBjb250ZXh0X2lkIDw8CisJCQkJRkNPRV9UQ0VfUlhfV1JfVFhfUkRfQ09OU1RfQ0lEX1NISUZUOworCisJdGFzay0+dHh3cl9yeHJkLnVuaW9uX2N0eC5jbGVhbnVwLmN0eC5jbGVhbmVkX3Rhc2tfaWQgPSBvcmlnX3hpZDsKKworCXRhc2stPnR4d3JfcnhyZC51bmlvbl9jdHguY2xlYW51cC5jdHgucm9sbGVkX3R4X3NlcV9jbnQgPSAwOworCXRhc2stPnR4d3JfcnhyZC51bmlvbl9jdHguY2xlYW51cC5jdHgucm9sbGVkX3R4X2RhdGFfb2Zmc2V0ID0gb2Zmc2V0OworCisJYmRfY291bnQgPSBvcmlnX2lvX3JlcS0+YmRfdGJsLT5iZF92YWxpZDsKKworCS8qIG9idGFpbiB0aGUgYXBwcm9wcmlhdGUgYmQgZW50cnkgZnJvbSByZWxhdGl2ZSBvZmZzZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmRfY291bnQ7IGkrKykgeworCQlpZiAob2Zmc2V0IDwgYmRbaV0uYnVmX2xlbikKKwkJCWJyZWFrOworCQlvZmZzZXQgLT0gYmRbaV0uYnVmX2xlbjsKKwl9CisJcGh5c19hZGRyICs9IChpICogc2l6ZW9mKHN0cnVjdCBmY29lX2JkX2N0eCkpOworCisJaWYgKG9yaWdfdGFza190eXBlID09IEZDT0VfVEFTS19UWVBFX1dSSVRFKSB7CisJCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LnNnbC5tdWxfc2dsLmN1cl9zZ2VfYWRkci5sbyA9CisJCQkJKHUzMilwaHlzX2FkZHI7CisJCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LnNnbC5tdWxfc2dsLmN1cl9zZ2VfYWRkci5oaSA9CisJCQkJKHUzMikoKHU2NClwaHlzX2FkZHIgPj4gMzIpOworCQl0YXNrLT50eHdyX29ubHkuc2dsX2N0eC5zZ2wubXVsX3NnbC5zZ2xfc2l6ZSA9CisJCQkJYmRfY291bnQ7CisJCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LnNnbC5tdWxfc2dsLmN1cl9zZ2Vfb2ZmID0KKwkJCQlvZmZzZXQ7IC8qIGFkanVzdGVkIG9mZnNldCAqLworCQl0YXNrLT50eHdyX29ubHkuc2dsX2N0eC5zZ2wubXVsX3NnbC5jdXJfc2dlX2lkeCA9IGk7CisJfSBlbHNlIHsKKwkJb3JpZ190YXNrX2lkeCA9IG9yaWdfeGlkIC8gQk5YMkZDX1RBU0tTX1BFUl9QQUdFOworCQlpbmRleCA9IG9yaWdfeGlkICUgQk5YMkZDX1RBU0tTX1BFUl9QQUdFOworCisJCXRhc2tfcGFnZSA9IChzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqKQorCQkJICAgICBpbnRlcmZhY2UtPmhiYS0+dGFza19jdHhbb3JpZ190YXNrX2lkeF07CisJCW9yaWdfdGFzayA9ICYodGFza19wYWdlW2luZGV4XSk7CisKKwkJLyogTXVsdGlwbGUgU0dFcyB3ZXJlIHVzZWQgZm9yIHRoaXMgSU8gKi8KKwkJc2dsID0gJnRhc2stPnJ4d3Jfb25seS51bmlvbl9jdHgucmVhZF9pbmZvLnNnbF9jdHguc2dsOworCQlzZ2wtPm11bF9zZ2wuY3VyX3NnZV9hZGRyLmxvID0gKHUzMilwaHlzX2FkZHI7CisJCXNnbC0+bXVsX3NnbC5jdXJfc2dlX2FkZHIuaGkgPSAodTMyKSgodTY0KXBoeXNfYWRkciA+PiAzMik7CisJCXNnbC0+bXVsX3NnbC5zZ2xfc2l6ZSA9IGJkX2NvdW50OworCQlzZ2wtPm11bF9zZ2wuY3VyX3NnZV9vZmYgPSBvZmZzZXQ7IC8qYWRqdXN0ZWQgb2Zmc2V0ICovCisJCXNnbC0+bXVsX3NnbC5jdXJfc2dlX2lkeCA9IGk7CisKKwkJbWVtc2V0KCZ0YXNrLT5yeHdyX29ubHkucnhfc2VxX2N0eCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmNvZV9yeF9zZXFfY3R4KSk7CisJCXRhc2stPnJ4d3Jfb25seS5yeF9zZXFfY3R4Lmxvd19leHBfcm8gPSBvcmlnX29mZnNldDsKKwkJdGFzay0+cnh3cl9vbmx5LnJ4X3NlcV9jdHguaGlnaF9leHBfcm8gPSBvcmlnX29mZnNldDsKKwl9Cit9CiB2b2lkIGJueDJmY19pbml0X2NsZWFudXBfdGFzayhzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxLAogCQkJICAgICAgc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKnRhc2ssCiAJCQkgICAgICB1MTYgb3JpZ194aWQpCkBAIC0xMzYwLDcgKzE1NjYsMTIgQEAKIAkJCQlGQ09FX1RDRV9UWF9XUl9SWF9SRF9DT05TVF9UQVNLX1RZUEVfU0hJRlQ7CiAJdGFzay0+dHh3cl9yeHJkLmNvbnN0X2N0eC5pbml0X2ZsYWdzIHw9IEZDT0VfVEFTS19DTEFTU19UWVBFXzMgPDwKIAkJCQlGQ09FX1RDRV9UWF9XUl9SWF9SRF9DT05TVF9DTEFTU19UWVBFX1NISUZUOwotCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PQorCWlmICh0Z3QtPmRldl90eXBlID09IFRZUEVfVEFQRSkKKwkJdGFzay0+dHh3cl9yeHJkLmNvbnN0X2N0eC5pbml0X2ZsYWdzIHw9CisJCQkJRkNPRV9UQVNLX0RFVl9UWVBFX1RBUEUgPDwKKwkJCQlGQ09FX1RDRV9UWF9XUl9SWF9SRF9DT05TVF9ERVZfVFlQRV9TSElGVDsKKwllbHNlCisJCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PQogCQkJCUZDT0VfVEFTS19ERVZfVFlQRV9ESVNLIDw8CiAJCQkJRkNPRV9UQ0VfVFhfV1JfUlhfUkRfQ09OU1RfREVWX1RZUEVfU0hJRlQ7CiAJdGFzay0+dHh3cl9yeHJkLnVuaW9uX2N0eC5jbGVhbnVwLmN0eC5jbGVhbmVkX3Rhc2tfaWQgPSBvcmlnX3hpZDsKQEAgLTE0MjAsNyArMTYzMSwxMiBAQAogCS8qIGluaXQgZmxhZ3MgKi8KIAl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgPSB0YXNrX3R5cGUgPDwKIAkJCQlGQ09FX1RDRV9UWF9XUl9SWF9SRF9DT05TVF9UQVNLX1RZUEVfU0hJRlQ7Ci0JdGFzay0+dHh3cl9yeHJkLmNvbnN0X2N0eC5pbml0X2ZsYWdzIHw9CisJaWYgKHRndC0+ZGV2X3R5cGUgPT0gVFlQRV9UQVBFKQorCQl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgfD0KKwkJCQlGQ09FX1RBU0tfREVWX1RZUEVfVEFQRSA8PAorCQkJCUZDT0VfVENFX1RYX1dSX1JYX1JEX0NPTlNUX0RFVl9UWVBFX1NISUZUOworCWVsc2UKKwkJdGFzay0+dHh3cl9yeHJkLmNvbnN0X2N0eC5pbml0X2ZsYWdzIHw9CiAJCQkJRkNPRV9UQVNLX0RFVl9UWVBFX0RJU0sgPDwKIAkJCQlGQ09FX1RDRV9UWF9XUl9SWF9SRF9DT05TVF9ERVZfVFlQRV9TSElGVDsKIAl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgfD0gRkNPRV9UQVNLX0NMQVNTX1RZUEVfMyA8PApAQCAtMTQ3Nyw2ICsxNjkzLDcgQEAKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QgPSBpb19yZXEtPnRndDsKIAlzdHJ1Y3QgZmNvZV9jYWNoZWRfc2dlX2N0eCAqY2FjaGVkX3NnZTsKIAlzdHJ1Y3QgZmNvZV9leHRfbXVsX3NnZXNfY3R4ICpzZ2w7CisJaW50IGRldl90eXBlID0gdGd0LT5kZXZfdHlwZTsKIAl1NjQgKmZjcF9jbW5kOwogCXU2NCB0bXBfZmNwX2NtbmRbNF07CiAJdTMyIGNvbnRleHRfaWQ7CkBAIC0xNDk0LDIwICsxNzExLDQwIEBACiAJCXRhc2tfdHlwZSA9IEZDT0VfVEFTS19UWVBFX1JFQUQ7CiAKIAkvKiBUeCBvbmx5ICovCisJYmRfY291bnQgPSBiZF90YmwtPmJkX3ZhbGlkOwogCWlmICh0YXNrX3R5cGUgPT0gRkNPRV9UQVNLX1RZUEVfV1JJVEUpIHsKLQkJdGFzay0+dHh3cl9vbmx5LnNnbF9jdHguc2dsLm11bF9zZ2wuY3VyX3NnZV9hZGRyLmxvID0KLQkJCQkodTMyKWJkX3RibC0+YmRfdGJsX2RtYTsKLQkJdGFzay0+dHh3cl9vbmx5LnNnbF9jdHguc2dsLm11bF9zZ2wuY3VyX3NnZV9hZGRyLmhpID0KLQkJCQkodTMyKSgodTY0KWJkX3RibC0+YmRfdGJsX2RtYSA+PiAzMik7Ci0JCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LnNnbC5tdWxfc2dsLnNnbF9zaXplID0KLQkJCQliZF90YmwtPmJkX3ZhbGlkOworCQlpZiAoKGRldl90eXBlID09IFRZUEVfRElTSykgJiYgKGJkX2NvdW50ID09IDEpKSB7CisJCQlzdHJ1Y3QgZmNvZV9iZF9jdHggKmZjb2VfYmRfdGJsID0gYmRfdGJsLT5iZF90Ymw7CisKKwkJCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LmNhY2hlZF9zZ2UuY3VyX2J1Zl9hZGRyLmxvID0KKwkJCQkJZmNvZV9iZF90YmwtPmJ1Zl9hZGRyX2xvOworCQkJdGFzay0+dHh3cl9vbmx5LnNnbF9jdHguY2FjaGVkX3NnZS5jdXJfYnVmX2FkZHIuaGkgPQorCQkJCQlmY29lX2JkX3RibC0+YnVmX2FkZHJfaGk7CisJCQl0YXNrLT50eHdyX29ubHkuc2dsX2N0eC5jYWNoZWRfc2dlLmN1cl9idWZfcmVtID0KKwkJCQkJZmNvZV9iZF90YmwtPmJ1Zl9sZW47CisKKwkJCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PSAxIDw8CisJCQkJRkNPRV9UQ0VfVFhfV1JfUlhfUkRfQ09OU1RfQ0FDSEVEX1NHRV9TSElGVDsKKwkJfSBlbHNlIHsKKwkJCXRhc2stPnR4d3Jfb25seS5zZ2xfY3R4LnNnbC5tdWxfc2dsLmN1cl9zZ2VfYWRkci5sbyA9CisJCQkJCSh1MzIpYmRfdGJsLT5iZF90YmxfZG1hOworCQkJdGFzay0+dHh3cl9vbmx5LnNnbF9jdHguc2dsLm11bF9zZ2wuY3VyX3NnZV9hZGRyLmhpID0KKwkJCQkJKHUzMikoKHU2NCliZF90YmwtPmJkX3RibF9kbWEgPj4gMzIpOworCQkJdGFzay0+dHh3cl9vbmx5LnNnbF9jdHguc2dsLm11bF9zZ2wuc2dsX3NpemUgPQorCQkJCQliZF90YmwtPmJkX3ZhbGlkOworCQl9CiAJfQogCiAJLypUeCBXcml0ZSBSeCBSZWFkICovCiAJLyogSW5pdCBzdGF0ZSB0byBOT1JNQUwgKi8KLQl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgPSB0YXNrX3R5cGUgPDwKKwl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgfD0gdGFza190eXBlIDw8CiAJCQkJRkNPRV9UQ0VfVFhfV1JfUlhfUkRfQ09OU1RfVEFTS19UWVBFX1NISUZUOwotCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PQorCWlmIChkZXZfdHlwZSA9PSBUWVBFX1RBUEUpCisJCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PQorCQkJCUZDT0VfVEFTS19ERVZfVFlQRV9UQVBFIDw8CisJCQkJRkNPRV9UQ0VfVFhfV1JfUlhfUkRfQ09OU1RfREVWX1RZUEVfU0hJRlQ7CisJZWxzZQorCQl0YXNrLT50eHdyX3J4cmQuY29uc3RfY3R4LmluaXRfZmxhZ3MgfD0KIAkJCQlGQ09FX1RBU0tfREVWX1RZUEVfRElTSyA8PAogCQkJCUZDT0VfVENFX1RYX1dSX1JYX1JEX0NPTlNUX0RFVl9UWVBFX1NISUZUOwogCXRhc2stPnR4d3JfcnhyZC5jb25zdF9jdHguaW5pdF9mbGFncyB8PSBGQ09FX1RBU0tfQ0xBU1NfVFlQRV8zIDw8CkBAIC0xNTUwLDcgKzE3ODcsOCBAQAogCWNhY2hlZF9zZ2UgPSAmdGFzay0+cnh3cl9vbmx5LnVuaW9uX2N0eC5yZWFkX2luZm8uc2dsX2N0eC5jYWNoZWRfc2dlOwogCXNnbCA9ICZ0YXNrLT5yeHdyX29ubHkudW5pb25fY3R4LnJlYWRfaW5mby5zZ2xfY3R4LnNnbDsKIAliZF9jb3VudCA9IGJkX3RibC0+YmRfdmFsaWQ7Ci0JaWYgKHRhc2tfdHlwZSA9PSBGQ09FX1RBU0tfVFlQRV9SRUFEKSB7CisJaWYgKHRhc2tfdHlwZSA9PSBGQ09FX1RBU0tfVFlQRV9SRUFEICYmCisJICAgIGRldl90eXBlID09IFRZUEVfRElTSykgewogCQlpZiAoYmRfY291bnQgPT0gMSkgewogCiAJCQlzdHJ1Y3QgZmNvZV9iZF9jdHggKmZjb2VfYmRfdGJsID0gYmRfdGJsLT5iZF90Ymw7CkBAIC0xNTgyLDYgKzE4MjAsMTEgQEAKIAkJCQkJKHUzMikoKHU2NCliZF90YmwtPmJkX3RibF9kbWEgPj4gMzIpOwogCQkJc2dsLT5tdWxfc2dsLnNnbF9zaXplID0gYmRfY291bnQ7CiAJCX0KKwl9IGVsc2UgeworCQlzZ2wtPm11bF9zZ2wuY3VyX3NnZV9hZGRyLmxvID0gKHUzMiliZF90YmwtPmJkX3RibF9kbWE7CisJCXNnbC0+bXVsX3NnbC5jdXJfc2dlX2FkZHIuaGkgPQorCQkJCSh1MzIpKCh1NjQpYmRfdGJsLT5iZF90YmxfZG1hID4+IDMyKTsKKwkJc2dsLT5tdWxfc2dsLnNnbF9zaXplID0gYmRfY291bnQ7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYwppbmRleCA0NWViYTZkLi42Y2MzNzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKQEAgLTEsNyArMSw3IEBACiAvKiBibngyZmNfaW8uYzogQnJvYWRjb20gTmV0WHRyZW1lIElJIExpbnV4IEZDb0Ugb2ZmbG9hZCBkcml2ZXIuCiAgKiBJTyBtYW5hZ2VyIGFuZCBTQ1NJIElPIHByb2Nlc3NpbmcuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTgsOCArMTgsNiBAQAogCQkJICAgaW50IGJkX2luZGV4KTsKIHN0YXRpYyBpbnQgYm54MmZjX21hcF9zZyhzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxKTsKIHN0YXRpYyB2b2lkIGJueDJmY19idWlsZF9iZF9saXN0X2Zyb21fc2coc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSk7Ci1zdGF0aWMgaW50IGJueDJmY19wb3N0X2lvX3JlcShzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QsCi0JCQkgICAgICAgc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSk7CiBzdGF0aWMgdm9pZCBibngyZmNfdW5tYXBfc2dfbGlzdChzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxKTsKIHN0YXRpYyB2b2lkIGJueDJmY19mcmVlX21wX3Jlc2Moc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSk7CiBzdGF0aWMgdm9pZCBibngyZmNfcGFyc2VfZmNwX3JzcChzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxLApAQCAtMjksMTAgKzI3LDExIEBACiB2b2lkIGJueDJmY19jbWRfdGltZXJfc2V0KHN0cnVjdCBibngyZmNfY21kICppb19yZXEsCiAJCQkgIHVuc2lnbmVkIGludCB0aW1lcl9tc2VjKQogewotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBpb19yZXEtPnBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IGlvX3JlcS0+cG9ydC0+cHJpdjsKIAotCWlmIChxdWV1ZV9kZWxheWVkX3dvcmsoaGJhLT50aW1lcl93b3JrX3F1ZXVlLCAmaW9fcmVxLT50aW1lb3V0X3dvcmssCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKHRpbWVyX21zZWMpKSkKKwlpZiAocXVldWVfZGVsYXllZF93b3JrKGludGVyZmFjZS0+dGltZXJfd29ya19xdWV1ZSwKKwkJCSAgICAgICAmaW9fcmVxLT50aW1lb3V0X3dvcmssCisJCQkgICAgICAgbXNlY3NfdG9famlmZmllcyh0aW1lcl9tc2VjKSkpCiAJCWtyZWZfZ2V0KCZpb19yZXEtPnJlZmNvdW50KTsKIH0KIApAQCAtMjE3LDYgKzIxNiwxMSBAQAogCQlyZXR1cm47CiAKIAlCTlgyRkNfSU9fREJHKGlvX3JlcSwgInNjc2lfZG9uZS4gZXJyX2NvZGUgPSAweCV4XG4iLCBlcnJfY29kZSk7CisJaWYgKHRlc3RfYml0KEJOWDJGQ19GTEFHX0NNRF9MT1NULCAmaW9fcmVxLT5yZXFfZmxhZ3MpKSB7CisJCS8qIERvIG5vdCBjYWxsIHNjc2kgZG9uZSBmb3IgdGhpcyBJTyAqLworCQlyZXR1cm47CisJfQorCiAJYm54MmZjX3VubWFwX3NnX2xpc3QoaW9fcmVxKTsKIAlpb19yZXEtPnNjX2NtZCA9IE5VTEw7CiAJaWYgKCFzY19jbWQpIHsKQEAgLTQxOSw4ICs0MjMsOCBAQAogc3RydWN0IGJueDJmY19jbWQgKmJueDJmY19lbHN0bV9hbGxvYyhzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QsIGludCB0eXBlKQogewogCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSB0Z3QtPnBvcnQ7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7Ci0Jc3RydWN0IGJueDJmY19jbWRfbWdyICpjbWRfbWdyID0gaGJhLT5jbWRfbWdyOworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfY21kX21nciAqY21kX21nciA9IGludGVyZmFjZS0+aGJhLT5jbWRfbWdyOwogCXN0cnVjdCBibngyZmNfY21kICppb19yZXE7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdHA7CiAJc3RydWN0IGlvX2JkdCAqYmRfdGJsOwpAQCAtNDg1LDExICs0ODksMTIgQEAKIAlrcmVmX2luaXQoJmlvX3JlcS0+cmVmY291bnQpOwogCXJldHVybiBpb19yZXE7CiB9Ci1zdGF0aWMgc3RydWN0IGJueDJmY19jbWQgKmJueDJmY19jbWRfYWxsb2Moc3RydWN0IGJueDJmY19ycG9ydCAqdGd0KQorCitzdHJ1Y3QgYm54MmZjX2NtZCAqYm54MmZjX2NtZF9hbGxvYyhzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QpCiB7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IHRndC0+cG9ydDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKLQlzdHJ1Y3QgYm54MmZjX2NtZF9tZ3IgKmNtZF9tZ3IgPSBoYmEtPmNtZF9tZ3I7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19jbWRfbWdyICpjbWRfbWdyID0gaW50ZXJmYWNlLT5oYmEtPmNtZF9tZ3I7CiAJc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0cDsKIAlzdHJ1Y3QgaW9fYmR0ICpiZF90Ymw7CkBAIC01NzAsNyArNTc1LDggQEAKIHN0YXRpYyB2b2lkIGJueDJmY19mcmVlX21wX3Jlc2Moc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSkKIHsKIAlzdHJ1Y3QgYm54MmZjX21wX3JlcSAqbXBfcmVxID0gJihpb19yZXEtPm1wX3JlcSk7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGlvX3JlcS0+cG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW9fcmVxLT5wb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IGZjb2VfYmRfY3R4KTsKIAogCS8qIGNsZWFyIHRtIGZsYWdzICovCkBAIC02MDYsNyArNjEyLDggQEAKIAlzdHJ1Y3QgYm54MmZjX21wX3JlcSAqbXBfcmVxOwogCXN0cnVjdCBmY29lX2JkX2N0eCAqbXBfcmVxX2JkOwogCXN0cnVjdCBmY29lX2JkX2N0eCAqbXBfcmVzcF9iZDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW9fcmVxLT5wb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpb19yZXEtPnBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCWRtYV9hZGRyX3QgYWRkcjsKIAlzaXplX3Qgc3o7CiAKQEAgLTY4Miw3ICs2ODksNyBAQAogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNjX2NtZC0+ZGV2aWNlKSk7CiAJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJwID0gcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhOworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0OwogCXN0cnVjdCBibngyZmNfY21kICppb19yZXE7CiAJc3RydWN0IGJueDJmY19tcF9yZXEgKnRtX3JlcTsKQEAgLTY5OSwxMCArNzA2LDEwIEBACiAKIAlscG9ydCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCWhiYSA9IHBvcnQtPnByaXY7CisJaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKIAogCWlmIChycG9ydCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZGV2aWNlX3Jlc2V0OiBycG9ydCBpcyBOVUxMXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZGV2aWNlX3Jlc2V0OiBycG9ydCBpcyBOVUxMXG4iKTsKIAkJcmMgPSBGQUlMRUQ7CiAJCWdvdG8gdG1mX2VycjsKIAl9CkBAIC03NDUsNyArNzUyLDkgQEAKIAlyYyA9IGJueDJmY19pbml0X21wX3JlcShpb19yZXEpOwogCWlmIChyYyA9PSBGQUlMRUQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGFzayBtZ210IE1QIHJlcXVlc3QgaW5pdCBmYWlsZWRcbiIpOworCQlzcGluX2xvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQlrcmVmX3B1dCgmaW9fcmVxLT5yZWZjb3VudCwgYm54MmZjX2NtZF9yZWxlYXNlKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwogCQlnb3RvIHRtZl9lcnI7CiAJfQogCkBAIC03NzQsNyArNzgzLDggQEAKIAlpbmRleCA9IHhpZCAlIEJOWDJGQ19UQVNLU19QRVJfUEFHRTsKIAogCS8qIEluaXRpYWxpemUgdGFzayBjb250ZXh0IGZvciB0aGlzIElPIHJlcXVlc3QgKi8KLQl0YXNrX3BhZ2UgPSAoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKikgaGJhLT50YXNrX2N0eFt0YXNrX2lkeF07CisJdGFza19wYWdlID0gKHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICopCisJCQlpbnRlcmZhY2UtPmhiYS0+dGFza19jdHhbdGFza19pZHhdOwogCXRhc2sgPSAmKHRhc2tfcGFnZVtpbmRleF0pOwogCWJueDJmY19pbml0X21wX3Rhc2soaW9fcmVxLCB0YXNrKTsKIApAQCAtODA2LDEwICs4MTYsMTAgQEAKIAlzcGluX3VubG9ja19iaCgmdGd0LT50Z3RfbG9jayk7CiAKIAlpZiAoIXJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRhc2sgbWdtdCBjb21tYW5kIGZhaWxlZC4uLlxuIik7CisJCUJOWDJGQ19UR1RfREJHKHRndCwgInRhc2sgbWdtdCBjb21tYW5kIGZhaWxlZC4uLlxuIik7CiAJCXJjID0gRkFJTEVEOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRhc2sgbWdtdCBjb21tYW5kIHN1Y2Nlc3MuLi5cbiIpOworCQlCTlgyRkNfVEdUX0RCRyh0Z3QsICJ0YXNrIG1nbXQgY29tbWFuZCBzdWNjZXNzLi4uXG4iKTsKIAkJcmMgPSBTVUNDRVNTOwogCX0KIHRtZl9lcnI6CkBAIC04MjIsNyArODMyLDcgQEAKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QgPSBpb19yZXEtPnRndDsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gdGd0LT5ycG9ydDsKIAlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSB0Z3QtPnJkYXRhOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXN0cnVjdCBibngyZmNfY21kICphYnRzX2lvX3JlcTsKIAlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzazsKQEAgLTgzOSw3ICs4NDksNyBAQAogCUJOWDJGQ19JT19EQkcoaW9fcmVxLCAiRW50ZXJlZCBibngyZmNfaW5pdGlhdGVfYWJ0c1xuIik7CiAKIAlwb3J0ID0gaW9fcmVxLT5wb3J0OwotCWhiYSA9IHBvcnQtPnByaXY7CisJaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKIAlscG9ydCA9IHBvcnQtPmxwb3J0OwogCiAJaWYgKCF0ZXN0X2JpdChCTlgyRkNfRkxBR19TRVNTSU9OX1JFQURZLCAmdGd0LT5mbGFncykpIHsKQEAgLTg0OSw3ICs4NTksNyBAQAogCX0KIAogCWlmIChycG9ydCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiaW5pdGlhdGVfYWJ0czogcnBvcnQgaXMgTlVMTFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImluaXRpYXRlX2FidHM6IHJwb3J0IGlzIE5VTExcbiIpOwogCQlyYyA9IEZBSUxFRDsKIAkJZ290byBhYnRzX2VycjsKIAl9CkBAIC04OTYsNyArOTA2LDggQEAKIAlpbmRleCA9IHhpZCAlIEJOWDJGQ19UQVNLU19QRVJfUEFHRTsKIAogCS8qIEluaXRpYWxpemUgdGFzayBjb250ZXh0IGZvciB0aGlzIElPIHJlcXVlc3QgKi8KLQl0YXNrX3BhZ2UgPSAoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKikgaGJhLT50YXNrX2N0eFt0YXNrX2lkeF07CisJdGFza19wYWdlID0gKHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICopCisJCQlpbnRlcmZhY2UtPmhiYS0+dGFza19jdHhbdGFza19pZHhdOwogCXRhc2sgPSAmKHRhc2tfcGFnZVtpbmRleF0pOwogCWJueDJmY19pbml0X21wX3Rhc2soYWJ0c19pb19yZXEsIHRhc2spOwogCkBAIC05MjQsMTEgKzkzNSw4MSBAQAogCXJldHVybiByYzsKIH0KIAoraW50IGJueDJmY19pbml0aWF0ZV9zZXFfY2xlYW51cChzdHJ1Y3QgYm54MmZjX2NtZCAqb3JpZ19pb19yZXEsIHUzMiBvZmZzZXQsCisJCQkJZW51bSBmY19yY3RsIHJfY3RsKQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0ID0gb3JpZ19pb19yZXEtPnRndDsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7CisJc3RydWN0IGJueDJmY19jbWQgKnNlcV9jbG5wX3JlcTsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzazsKKwlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFza19wYWdlOworCXN0cnVjdCBibngyZmNfZWxzX2NiX2FyZyAqY2JfYXJnID0gTlVMTDsKKwlpbnQgdGFza19pZHgsIGluZGV4OworCXUxNiB4aWQ7CisJaW50IHJjID0gMDsKKworCUJOWDJGQ19JT19EQkcob3JpZ19pb19yZXEsICJibngyZmNfaW5pdGlhdGVfc2VxX2NsZWFudXAgeGlkID0gMHgleFxuIiwKKwkJICAgb3JpZ19pb19yZXEtPnhpZCk7CisJa3JlZl9nZXQoJm9yaWdfaW9fcmVxLT5yZWZjb3VudCk7CisKKwlwb3J0ID0gb3JpZ19pb19yZXEtPnBvcnQ7CisJaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlscG9ydCA9IHBvcnQtPmxwb3J0OworCisJY2JfYXJnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJueDJmY19lbHNfY2JfYXJnKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjYl9hcmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIGFsbG9jIGNiX2FyZyBmb3Igc2VxIGNsbnVwXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfZXJyOworCX0KKworCXNlcV9jbG5wX3JlcSA9IGJueDJmY19lbHN0bV9hbGxvYyh0Z3QsIEJOWDJGQ19TRVFfQ0xFQU5VUCk7CisJaWYgKCFzZXFfY2xucF9yZXEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2xlYW51cDogY291bGRudCBhbGxvY2F0ZSBjbWRcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWtmcmVlKGNiX2FyZyk7CisJCWdvdG8gY2xlYW51cF9lcnI7CisJfQorCS8qIEluaXRpYWxpemUgcmVzdCBvZiBpb19yZXEgZmllbGRzICovCisJc2VxX2NsbnBfcmVxLT5zY19jbWQgPSBOVUxMOworCXNlcV9jbG5wX3JlcS0+cG9ydCA9IHBvcnQ7CisJc2VxX2NsbnBfcmVxLT50Z3QgPSB0Z3Q7CisJc2VxX2NsbnBfcmVxLT5kYXRhX3hmZXJfbGVuID0gMDsgLyogTm8gZGF0YSB0cmFuc2ZlciBmb3IgY2xlYW51cCAqLworCisJeGlkID0gc2VxX2NsbnBfcmVxLT54aWQ7CisKKwl0YXNrX2lkeCA9IHhpZC9CTlgyRkNfVEFTS1NfUEVSX1BBR0U7CisJaW5kZXggPSB4aWQgJSBCTlgyRkNfVEFTS1NfUEVSX1BBR0U7CisKKwkvKiBJbml0aWFsaXplIHRhc2sgY29udGV4dCBmb3IgdGhpcyBJTyByZXF1ZXN0ICovCisJdGFza19wYWdlID0gKHN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICopCisJCSAgICAgaW50ZXJmYWNlLT5oYmEtPnRhc2tfY3R4W3Rhc2tfaWR4XTsKKwl0YXNrID0gJih0YXNrX3BhZ2VbaW5kZXhdKTsKKwljYl9hcmctPmFib3J0ZWRfaW9fcmVxID0gb3JpZ19pb19yZXE7CisJY2JfYXJnLT5pb19yZXEgPSBzZXFfY2xucF9yZXE7CisJY2JfYXJnLT5yX2N0bCA9IHJfY3RsOworCWNiX2FyZy0+b2Zmc2V0ID0gb2Zmc2V0OworCXNlcV9jbG5wX3JlcS0+Y2JfYXJnID0gY2JfYXJnOworCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FsbCBpbml0X3NlcV9jbGVhbnVwX3Rhc2tcbiIpOworCWJueDJmY19pbml0X3NlcV9jbGVhbnVwX3Rhc2soc2VxX2NsbnBfcmVxLCB0YXNrLCBvcmlnX2lvX3JlcSwgb2Zmc2V0KTsKKworCS8qIE9idGFpbiBmcmVlIFNRIGVudHJ5ICovCisJYm54MmZjX2FkZF8yX3NxKHRndCwgeGlkKTsKKworCS8qIFJpbmcgZG9vcmJlbGwgKi8KKwlibngyZmNfcmluZ19kb29yYmVsbCh0Z3QpOworY2xlYW51cF9lcnI6CisJcmV0dXJuIHJjOworfQorCiBpbnQgYm54MmZjX2luaXRpYXRlX2NsZWFudXAoc3RydWN0IGJueDJmY19jbWQgKmlvX3JlcSkKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCXN0cnVjdCBibngyZmNfcnBvcnQgKnRndCA9IGlvX3JlcS0+dGd0OwotCXN0cnVjdCBibngyZmNfaGJhICpoYmE7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXN0cnVjdCBibngyZmNfY21kICpjbGVhbnVwX2lvX3JlcTsKIAlzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzazsKQEAgLTk0MSw3ICsxMDIyLDcgQEAKIAlCTlgyRkNfSU9fREJHKGlvX3JlcSwgIkVudGVyZWQgYm54MmZjX2luaXRpYXRlX2NsZWFudXBcbiIpOwogCiAJcG9ydCA9IGlvX3JlcS0+cG9ydDsKLQloYmEgPSBwb3J0LT5wcml2OworCWludGVyZmFjZSA9IHBvcnQtPnByaXY7CiAJbHBvcnQgPSBwb3J0LT5scG9ydDsKIAogCWNsZWFudXBfaW9fcmVxID0gYm54MmZjX2Vsc3RtX2FsbG9jKHRndCwgQk5YMkZDX0NMRUFOVVApOwpAQCAtOTYzLDcgKzEwNDQsOCBAQAogCWluZGV4ID0geGlkICUgQk5YMkZDX1RBU0tTX1BFUl9QQUdFOwogCiAJLyogSW5pdGlhbGl6ZSB0YXNrIGNvbnRleHQgZm9yIHRoaXMgSU8gcmVxdWVzdCAqLwotCXRhc2tfcGFnZSA9IChzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqKSBoYmEtPnRhc2tfY3R4W3Rhc2tfaWR4XTsKKwl0YXNrX3BhZ2UgPSAoc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKikKKwkJCWludGVyZmFjZS0+aGJhLT50YXNrX2N0eFt0YXNrX2lkeF07CiAJdGFzayA9ICYodGFza19wYWdlW2luZGV4XSk7CiAJb3JpZ194aWQgPSBpb19yZXEtPnhpZDsKIApAQCAtMTAzMSw3ICsxMTEzLDcgQEAKIAogCWxwb3J0ID0gc2hvc3RfcHJpdihzY19jbWQtPmRldmljZS0+aG9zdCk7CiAJaWYgKChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUkVBRFkpIHx8ICEobHBvcnQtPmxpbmtfdXApKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZWhfYWJvcnQ6IGxpbmsgbm90IHJlYWR5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZWhfYWJvcnQ6IGxpbmsgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMTA2Miw3ICsxMTQ0LDcgQEAKIAkgKiBpb19yZXEgaXMgbm8gbG9uZ2VyIGluIHRoZSBhY3RpdmVfcS4KIAkgKi8KIAlpZiAodGd0LT5mbHVzaF9pbl9wcm9nKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiZWhfYWJvcnQ6IGlvX3JlcSAoeGlkID0gMHgleCkgIgorCQlwcmludGsoS0VSTl9FUlIgUEZYICJlaF9hYm9ydDogaW9fcmVxICh4aWQgPSAweCV4KSAiCiAJCQkiZmx1c2ggaW4gcHJvZ3Jlc3NcbiIsIGlvX3JlcS0+eGlkKTsKIAkJa3JlZl9wdXQoJmlvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKQEAgLTEwNzAsNyArMTE1Miw3IEBACiAJfQogCiAJaWYgKGlvX3JlcS0+b25fYWN0aXZlX3F1ZXVlID09IDApIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJlaF9hYm9ydDogaW9fcmVxICh4aWQgPSAweCV4KSAiCisJCXByaW50ayhLRVJOX0VSUiBQRlggImVoX2Fib3J0OiBpb19yZXEgKHhpZCA9IDB4JXgpICIKIAkJCQkibm90IG9uIGFjdGl2ZV9xXG4iLCBpb19yZXEtPnhpZCk7CiAJCS8qCiAJCSAqIFRoaXMgY29uZGl0aW9uIGNhbiBoYXBwZW4gb25seSBkdWUgdG8gdGhlIEZXIGJ1ZywKQEAgLTExMDgsNyArMTE5MCw3IEBACiAJCXNldF9iaXQoQk5YMkZDX0ZMQUdfRUhfQUJPUlQsICZpb19yZXEtPnJlcV9mbGFncyk7CiAJCXJjID0gYm54MmZjX2luaXRpYXRlX2FidHMoaW9fcmVxKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImVoX2Fib3J0OiBpb19yZXEgKHhpZCA9IDB4JXgpICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZWhfYWJvcnQ6IGlvX3JlcSAoeGlkID0gMHgleCkgIgogCQkJCSJhbHJlYWR5IGluIGFidHMgcHJvY2Vzc2luZ1xuIiwgaW9fcmVxLT54aWQpOwogCQlrcmVmX3B1dCgmaW9fcmVxLT5yZWZjb3VudCwgYm54MmZjX2NtZF9yZWxlYXNlKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnRndC0+dGd0X2xvY2spOwpAQCAtMTE0OSw2ICsxMjMxLDQyIEBACiAJcmV0dXJuIHJjOwogfQogCit2b2lkIGJueDJmY19wcm9jZXNzX3NlcV9jbGVhbnVwX2NvbXBsKHN0cnVjdCBibngyZmNfY21kICpzZXFfY2xucF9yZXEsCisJCQkJICAgICAgc3RydWN0IGZjb2VfdGFza19jdHhfZW50cnkgKnRhc2ssCisJCQkJICAgICAgdTggcnhfc3RhdGUpCit7CisJc3RydWN0IGJueDJmY19lbHNfY2JfYXJnICpjYl9hcmcgPSBzZXFfY2xucF9yZXEtPmNiX2FyZzsKKwlzdHJ1Y3QgYm54MmZjX2NtZCAqb3JpZ19pb19yZXEgPSBjYl9hcmctPmFib3J0ZWRfaW9fcmVxOworCXUzMiBvZmZzZXQgPSBjYl9hcmctPm9mZnNldDsKKwllbnVtIGZjX3JjdGwgcl9jdGwgPSBjYl9hcmctPnJfY3RsOworCWludCByYyA9IDA7CisJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0ID0gb3JpZ19pb19yZXEtPnRndDsKKworCUJOWDJGQ19JT19EQkcob3JpZ19pb19yZXEsICJFbnRlcmVkIHByb2Nlc3NfY2xlYW51cF9jb21wbCB4aWQgPSAweCV4IgorCQkJICAgICAgImNtZF90eXBlID0gJWRcbiIsCisJCSAgIHNlcV9jbG5wX3JlcS0+eGlkLCBzZXFfY2xucF9yZXEtPmNtZF90eXBlKTsKKworCWlmIChyeF9zdGF0ZSA9PSBGQ09FX1RBU0tfUlhfU1RBVEVfSUdOT1JFRF9TRVFVRU5DRV9DTEVBTlVQKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInNlcSBjbGVhbnVwIGlnbm9yZWQgLSB4aWQgPSAweCV4XG4iLAorCQkJc2VxX2NsbnBfcmVxLT54aWQpOworCQlnb3RvIGZyZWVfY2JfYXJnOworCX0KKwlrcmVmX2dldCgmb3JpZ19pb19yZXEtPnJlZmNvdW50KTsKKworCXNwaW5fdW5sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKwlyYyA9IGJueDJmY19zZW5kX3NycihvcmlnX2lvX3JlcSwgb2Zmc2V0LCByX2N0bCk7CisJc3Bpbl9sb2NrX2JoKCZ0Z3QtPnRndF9sb2NrKTsKKworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2xudXBfY29tcGw6IFVuYWJsZSB0byBzZW5kIFNSUiIKKwkJCSIgSU8gd2lsbCBhYm9ydFxuIik7CisJc2VxX2NsbnBfcmVxLT5jYl9hcmcgPSBOVUxMOworCWtyZWZfcHV0KCZvcmlnX2lvX3JlcS0+cmVmY291bnQsIGJueDJmY19jbWRfcmVsZWFzZSk7CitmcmVlX2NiX2FyZzoKKwlrZnJlZShjYl9hcmcpOworCXJldHVybjsKK30KKwogdm9pZCBibngyZmNfcHJvY2Vzc19jbGVhbnVwX2NvbXBsKHN0cnVjdCBibngyZmNfY21kICppb19yZXEsCiAJCQkJICBzdHJ1Y3QgZmNvZV90YXNrX2N0eF9lbnRyeSAqdGFzaywKIAkJCQkgIHU4IG51bV9ycSkKQEAgLTEzNzgsNyArMTQ5Niw3IEBACiAJCQlmY19oZHItPmZoX3JfY3RsKTsKIAl9CiAJaWYgKCFzY19jbWQtPlNDcC5wdHIpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJ0bV9jb21wbDogU0NwLnB0ciBpcyBOVUxMXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidG1fY29tcGw6IFNDcC5wdHIgaXMgTlVMTFxuIik7CiAJCXJldHVybjsKIAl9CiAJc3dpdGNoIChpb19yZXEtPmZjcF9zdGF0dXMpIHsKQEAgLTE0MTAsNyArMTUyOCw3IEBACiAJCWlvX3JlcS0+b25fdG1mX3F1ZXVlID0gMDsKIAl9IGVsc2UgewogCi0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiQ29tbWFuZCBub3Qgb24gYWN0aXZlX2NtZF9xdWV1ZSFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb21tYW5kIG5vdCBvbiBhY3RpdmVfY21kX3F1ZXVlIVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE1OTcsNyArMTcxNSw3IEBACiAKIAkJaWYgKHJxX2J1ZmZfbGVuID4gbnVtX3JxICogQk5YMkZDX1JRX0JVRl9TWikgewogCQkJLyogSW52YWxpZCBzZW5zZSBzZW5zZSBsZW5ndGguICovCi0JCQlwcmludGsoS0VSTl9BTEVSVCBQRlggImludmFsaWQgc25zIGxlbmd0aCAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggImludmFsaWQgc25zIGxlbmd0aCAlZFxuIiwKIAkJCQlycV9idWZmX2xlbik7CiAJCQkvKiByZXNldCBycV9idWZmX2xlbiAqLwogCQkJcnFfYnVmZl9sZW4gPSAgbnVtX3JxICogQk5YMkZDX1JRX0JVRl9TWjsKQEAgLTE3ODAsNyArMTg5OCw3IEBACiAJCQlzY3NpX3NldF9yZXNpZChzY19jbWQsIGlvX3JlcS0+ZmNwX3Jlc2lkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJzY3NpX2NtZF9jb21wbDogZmNwX3N0YXR1cyA9ICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJzY3NpX2NtZF9jb21wbDogZmNwX3N0YXR1cyA9ICVkXG4iLAogCQkJaW9fcmVxLT5mY3Bfc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTc4OSwxNCArMTkwNywxNSBAQAogCWtyZWZfcHV0KCZpb19yZXEtPnJlZmNvdW50LCBibngyZmNfY21kX3JlbGVhc2UpOwogfQogCi1zdGF0aWMgaW50IGJueDJmY19wb3N0X2lvX3JlcShzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QsCitpbnQgYm54MmZjX3Bvc3RfaW9fcmVxKHN0cnVjdCBibngyZmNfcnBvcnQgKnRndCwKIAkJCSAgICAgICBzdHJ1Y3QgYm54MmZjX2NtZCAqaW9fcmVxKQogewogCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICp0YXNrOwogCXN0cnVjdCBmY29lX3Rhc2tfY3R4X2VudHJ5ICp0YXNrX3BhZ2U7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NfY21kID0gaW9fcmVxLT5zY19jbWQ7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IHRndC0+cG9ydDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHBvcnQtPmxwb3J0OwogCXN0cnVjdCBmY29lX2Rldl9zdGF0cyAqc3RhdHM7CiAJaW50IHRhc2tfaWR4LCBpbmRleDsKQEAgLTE4NTQsNyArMTk3Myw4IEBACiAJfQogCiAJLyogVGltZSBJTyByZXEgKi8KLQlibngyZmNfY21kX3RpbWVyX3NldChpb19yZXEsIEJOWDJGQ19JT19USU1FT1VUKTsKKwlpZiAodGd0LT5pb190aW1lb3V0KQorCQlibngyZmNfY21kX3RpbWVyX3NldChpb19yZXEsIEJOWDJGQ19JT19USU1FT1VUKTsKIAkvKiBPYnRhaW4gZnJlZSBTUSBlbnRyeSAqLwogCWJueDJmY19hZGRfMl9zcSh0Z3QsIHhpZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX3RndC5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfdGd0LmMKaW5kZXggM2U4OTJiZC4uZDUzMTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfdGd0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfdGd0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBIYW5kbGVzIG9wZXJhdGlvbnMgc3VjaCBhcyBzZXNzaW9uIG9mZmxvYWQvdXBsb2FkIGV0YywgYW5kIG1hbmFnZXMKICAqIHNlc3Npb24gcmVzb3VyY2VzIHN1Y2ggYXMgY29ubmVjdGlvbiBpZCBhbmQgcXAgcmVzb3VyY2VzLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY1LDcgKzY1LDggQEAKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHJkYXRhLT5ycG9ydDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJaW50IHJ2YWw7CiAJaW50IGkgPSAwOwogCkBAIC0yMzcsNyArMjM4LDggQEAKIHN0YXRpYyB2b2lkIGJueDJmY191cGxvYWRfc2Vzc2lvbihzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0LAogCQkJCQlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3QpCiB7Ci0Jc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19pbnRlcmZhY2UgKmludGVyZmFjZSA9IHBvcnQtPnByaXY7CisJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IGludGVyZmFjZS0+aGJhOwogCiAJQk5YMkZDX1RHVF9EQkcodGd0LCAidXBsb2FkX3Nlc3Npb246IGFjdGl2ZV9pb3MgPSAlZFxuIiwKIAkJdGd0LT5udW1fYWN0aXZlX2lvcy5jb3VudGVyKTsKQEAgLTMxNiw3ICszMTgsOCBAQAogewogCiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHJkYXRhLT5ycG9ydDsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJc3RydWN0IGI1Nzd4eF9kb29yYmVsbF9zZXRfcHJvZCAqc3FfZGIgPSAmdGd0LT5zcV9kYjsKIAlzdHJ1Y3QgYjU3N3h4X2Zjb2VfcnhfZG9vcmJlbGwgKnJ4X2RiID0gJnRndC0+cnhfZGI7CiAKQEAgLTM1MCw2ICszNTMsMTQgQEAKIAl0Z3QtPnJxX2NvbnNfaWR4ID0gMDsKIAlhdG9taWNfc2V0KCZ0Z3QtPm51bV9hY3RpdmVfaW9zLCAwKTsKIAorCWlmIChyZGF0YS0+ZmxhZ3MgJiBGQ19SUF9GTEFHU19SRVRSWSkgeworCQl0Z3QtPmRldl90eXBlID0gVFlQRV9UQVBFOworCQl0Z3QtPmlvX3RpbWVvdXQgPSAwOyAvKiB1c2UgZGVmYXVsdCBVTFAgdGltZW91dCAqLworCX0gZWxzZSB7CisJCXRndC0+ZGV2X3R5cGUgPSBUWVBFX0RJU0s7CisJCXRndC0+aW9fdGltZW91dCA9IEJOWDJGQ19JT19USU1FT1VUOworCX0KKwogCS8qIGluaXRpYWxpemUgc3EgZG9vcmJlbGwgKi8KIAlzcV9kYi0+aGVhZGVyLmhlYWRlciA9IEI1NzdYWF9ET09SQkVMTF9IRFJfREJfVFlQRTsKIAlzcV9kYi0+aGVhZGVyLmhlYWRlciB8PSBCNTc3WFhfRkNPRV9DT05ORUNUSU9OX1RZUEUgPDwKQEAgLTM5Miw3ICs0MDMsOCBAQAogCQkJCWVudW0gZmNfcnBvcnRfZXZlbnQgZXZlbnQpCiB7CiAJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBwb3J0LT5wcml2OworCXN0cnVjdCBibngyZmNfaGJhICpoYmEgPSBpbnRlcmZhY2UtPmhiYTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gcmRhdGEtPnJwb3J0OwogCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycDsKIAlzdHJ1Y3QgYm54MmZjX3Jwb3J0ICp0Z3Q7CkBAIC00MDMsNyArNDE1LDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBSUE9SVF9FVl9SRUFEWToKIAkJaWYgKCFycG9ydCkgewotCQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJycG9ydCBpcyBOVUxMOiBFUlJPUiFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicnBvcnQgaXMgTlVMTDogRVJST1IhXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQxNSw3ICs0MjcsNyBAQAogCQkJICogV2Ugc2hvdWxkIG5vdCBjb21lIGhlcmUsIGFzIGxwb3J0IHdpbGwKIAkJCSAqIHRha2UgY2FyZSBvZiBmYWJyaWMgbG9naW4KIAkJCSAqLwotCQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICIleCAtIHJwb3J0X2V2ZW50X2hhbmRsZXIgRVJST1JcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIleCAtIHJwb3J0X2V2ZW50X2hhbmRsZXIgRVJST1JcbiIsCiAJCQkJcmRhdGEtPmlkcy5wb3J0X2lkKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00ODMsNyArNDk1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmICghcnBvcnQpIHsKLQkJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiJXggLSBycG9ydCBub3QgY3JlYXRlZCBZZXQhIVxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICIleCAtIHJwb3J0IG5vdCBjcmVhdGVkIFlldCEhXG4iLAogCQkJCXBvcnRfaWQpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUzNyw3ICs1NDksOCBAQAogc3RydWN0IGJueDJmY19ycG9ydCAqYm54MmZjX3RndF9sb29rdXAoc3RydWN0IGZjb2VfcG9ydCAqcG9ydCwKIAkJCQkJICAgICB1MzIgcG9ydF9pZCkKIHsKLQlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gcG9ydC0+cHJpdjsKKwlzdHJ1Y3QgYm54MmZjX2hiYSAqaGJhID0gaW50ZXJmYWNlLT5oYmE7CiAJc3RydWN0IGJueDJmY19ycG9ydCAqdGd0OwogCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAlpbnQgaTsKQEAgLTU1Miw3ICs1NjUsNyBAQAogCQkJCQkJIm9idGFpbmVkXG4iKTsKIAkJCQkJcmV0dXJuIHRndDsKIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJycG9ydCAweCV4ICIKKwkJCQkJQk5YMkZDX1RHVF9EQkcodGd0LCAicnBvcnQgMHgleCAiCiAJCQkJCQkiaXMgaW4gREVMRVRFRCBzdGF0ZVxuIiwKIAkJCQkJCXJkYXRhLT5pZHMucG9ydF9pZCk7CiAJCQkJCXJldHVybiBOVUxMOwpAQCAtNjMzLDcgKzY0Niw3IEBACiAJdGd0LT5zcSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwgdGd0LT5zcV9tZW1fc2l6ZSwKIAkJCQkgICAgICZ0Z3QtPnNxX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0Z3QtPnNxKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIFNRIG1lbW9yeSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIFNRIG1lbW9yeSAlZFxuIiwKIAkJCXRndC0+c3FfbWVtX3NpemUpOwogCQlnb3RvIG1lbV9hbGxvY19mYWlsdXJlOwogCX0KQEAgLTY0Niw3ICs2NTksNyBAQAogCXRndC0+Y3EgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhiYS0+cGNpZGV2LT5kZXYsIHRndC0+Y3FfbWVtX3NpemUsCiAJCQkJICAgICAmdGd0LT5jcV9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghdGd0LT5jcSkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBDUSBtZW1vcnkgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBDUSBtZW1vcnkgJWRcbiIsCiAJCQl0Z3QtPmNxX21lbV9zaXplKTsKIAkJZ290byBtZW1fYWxsb2NfZmFpbHVyZTsKIAl9CkBAIC02NTksNyArNjcyLDcgQEAKIAl0Z3QtPnJxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYmEtPnBjaWRldi0+ZGV2LCB0Z3QtPnJxX21lbV9zaXplLAogCQkJCQkmdGd0LT5ycV9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghdGd0LT5ycSkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBSUSBtZW1vcnkgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBSUSBtZW1vcnkgJWRcbiIsCiAJCQl0Z3QtPnJxX21lbV9zaXplKTsKIAkJZ290byBtZW1fYWxsb2NfZmFpbHVyZTsKIAl9CkBAIC02NzEsNyArNjg0LDcgQEAKIAl0Z3QtPnJxX3BibCA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwgdGd0LT5ycV9wYmxfc2l6ZSwKIAkJCQkJICZ0Z3QtPnJxX3BibF9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghdGd0LT5ycV9wYmwpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJ1bmFibGUgdG8gYWxsb2NhdGUgUlEgUEJMICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gYWxsb2NhdGUgUlEgUEJMICVkXG4iLAogCQkJdGd0LT5ycV9wYmxfc2l6ZSk7CiAJCWdvdG8gbWVtX2FsbG9jX2ZhaWx1cmU7CiAJfQpAQCAtNjk3LDcgKzcxMCw3IEBACiAJdGd0LT54ZmVycSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGJhLT5wY2lkZXYtPmRldiwgdGd0LT54ZmVycV9tZW1fc2l6ZSwKIAkJCQkJJnRndC0+eGZlcnFfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRndC0+eGZlcnEpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJ1bmFibGUgdG8gYWxsb2NhdGUgWEZFUlEgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBYRkVSUSAlZFxuIiwKIAkJCXRndC0+eGZlcnFfbWVtX3NpemUpOwogCQlnb3RvIG1lbV9hbGxvY19mYWlsdXJlOwogCX0KQEAgLTcxMSw3ICs3MjQsNyBAQAogCXRndC0+Y29uZnEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhiYS0+cGNpZGV2LT5kZXYsIHRndC0+Y29uZnFfbWVtX3NpemUsCiAJCQkJCSZ0Z3QtPmNvbmZxX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0Z3QtPmNvbmZxKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIENPTkZRICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gYWxsb2NhdGUgQ09ORlEgJWRcbiIsCiAJCQl0Z3QtPmNvbmZxX21lbV9zaXplKTsKIAkJZ290byBtZW1fYWxsb2NfZmFpbHVyZTsKIAl9CkBAIC03MjYsNyArNzM5LDcgQEAKIAkJCQkJICAgIHRndC0+Y29uZnFfcGJsX3NpemUsCiAJCQkJCSAgICAmdGd0LT5jb25mcV9wYmxfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRndC0+Y29uZnFfcGJsKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIENPTkZRIFBCTCAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIENPTkZRIFBCTCAlZFxuIiwKIAkJCXRndC0+Y29uZnFfcGJsX3NpemUpOwogCQlnb3RvIG1lbV9hbGxvY19mYWlsdXJlOwogCX0KQEAgLTc1MSw3ICs3NjQsNyBAQAogCQkJCQkgIHRndC0+Y29ubl9kYl9tZW1fc2l6ZSwKIAkJCQkJICAmdGd0LT5jb25uX2RiX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0Z3QtPmNvbm5fZGIpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJ1bmFibGUgdG8gYWxsb2NhdGUgY29ubl9kYiAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGFsbG9jYXRlIGNvbm5fZGIgJWRcbiIsCiAJCQkJCQl0Z3QtPmNvbm5fZGJfbWVtX3NpemUpOwogCQlnb3RvIG1lbV9hbGxvY19mYWlsdXJlOwogCX0KQEAgLTc2Nyw3ICs3ODAsNyBAQAogCQkJCSAgICAgICZ0Z3QtPmxjcV9kbWEsIEdGUF9LRVJORUwpOwogCiAJaWYgKCF0Z3QtPmxjcSkgewotCQlwcmludGsoS0VSTl9BTEVSVCBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBsY3EgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggInVuYWJsZSB0byBhbGxvY2F0ZSBsY3EgJWRcbiIsCiAJCSAgICAgICB0Z3QtPmxjcV9tZW1fc2l6ZSk7CiAJCWdvdG8gbWVtX2FsbG9jX2ZhaWx1cmU7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCmluZGV4IDlhZTgwY2QuLmRiYTcyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKQEAgLTU2Myw3ICs1NjMsNyBAQAogCW5vcG91dF93cWUtPml0dCA9ICgodTE2KXRhc2stPml0dCB8CiAJCQkgICAoSVNDU0lfVEFTS19UWVBFX01QQVRIIDw8CiAJCQkgICAgSVNDU0lfVE1GX1JFUVVFU1RfVFlQRV9TSElGVCkpOwotCW5vcG91dF93cWUtPnR0dCA9IG5vcG91dF9oZHItPnR0dDsKKwlub3BvdXRfd3FlLT50dHQgPSBiZTMyX3RvX2NwdShub3BvdXRfaGRyLT50dHQpOwogCW5vcG91dF93cWUtPmZsYWdzID0gMDsKIAlpZiAoIXVuc29sKQogCQlub3BvdXRfd3FlLT5mbGFncyA9IElTQ1NJX05PUF9PVVRfUkVRVUVTVF9MT0NBTF9DT01QTEVUSU9OOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDJlN2MxMzYuLjI3YzlkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTEyOCwyNSArMTI4LDcgQEAKIAl1OAlyZXNlcnZlZFsyXTsKIH07CiAKLXN0cnVjdCByZGFjX2NvbnRyb2xsZXIgewotCXU4CQkJc3Vic3lzX2lkW1NVQlNZU19JRF9MRU5dOwotCXU4CQkJc2xvdF9pZFtTTE9UX0lEX0xFTl07Ci0JaW50CQkJdXNlX21zMTA7Ci0Jc3RydWN0IGtyZWYJCWtyZWY7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOyAvKiBsaXN0IG9mIGFsbCBjb250cm9sbGVycyAqLwotCXVuaW9uCQkJewotCQlzdHJ1Y3QgcmRhY19wZ19sZWdhY3kgbGVnYWN5OwotCQlzdHJ1Y3QgcmRhY19wZ19leHBhbmRlZCBleHBhbmRlZDsKLQl9IG1vZGVfc2VsZWN0OwotCXU4CWluZGV4OwotCXU4CWFycmF5X25hbWVbQVJSQVlfTEFCRUxfTEVOXTsKLQlzcGlubG9ja190CQltc19sb2NrOwotCWludAkJCW1zX3F1ZXVlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbXNfd29yazsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UJKm1zX3NkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZAltc19oZWFkOwotfTsKLQorI2RlZmluZSBVTklRVUVfSURfTEVOIDE2CiBzdHJ1Y3QgYzhfaW5xdWlyeSB7CiAJdTgJcGVyaXBoZXJhbF9pbmZvOwogCXU4CXBhZ2VfY29kZTsgLyogMHhDOCAqLwpAQCAtMTU5LDEyICsxNDEsMzEgQEAKIAl1OAl2b2xfdXNlcl9sYWJlbF9sZW47CiAJdTgJdm9sX3VzZXJfbGFiZWxbNjBdOwogCXU4CWFycmF5X3VuaXFfaWRfbGVuOwotCXU4CWFycmF5X3VuaXF1ZV9pZFsxNl07CisJdTgJYXJyYXlfdW5pcXVlX2lkW1VOSVFVRV9JRF9MRU5dOwogCXU4CWFycmF5X3VzZXJfbGFiZWxfbGVuOwogCXU4CWFycmF5X3VzZXJfbGFiZWxbNjBdOwogCXU4CWx1bls4XTsKIH07CiAKK3N0cnVjdCByZGFjX2NvbnRyb2xsZXIgeworCXU4CQkJYXJyYXlfaWRbVU5JUVVFX0lEX0xFTl07CisJaW50CQkJdXNlX21zMTA7CisJc3RydWN0IGtyZWYJCWtyZWY7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOyAvKiBsaXN0IG9mIGFsbCBjb250cm9sbGVycyAqLworCXVuaW9uCQkJeworCQlzdHJ1Y3QgcmRhY19wZ19sZWdhY3kgbGVnYWN5OworCQlzdHJ1Y3QgcmRhY19wZ19leHBhbmRlZCBleHBhbmRlZDsKKwl9IG1vZGVfc2VsZWN0OworCXU4CWluZGV4OworCXU4CWFycmF5X25hbWVbQVJSQVlfTEFCRUxfTEVOXTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0OworCXNwaW5sb2NrX3QJCW1zX2xvY2s7CisJaW50CQkJbXNfcXVldWVkOworCXN0cnVjdCB3b3JrX3N0cnVjdAltc193b3JrOworCXN0cnVjdCBzY3NpX2RldmljZQkqbXNfc2RldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1zX2hlYWQ7Cit9OworCiBzdHJ1Y3QgYzJfaW5xdWlyeSB7CiAJdTgJcGVyaXBoZXJhbF9pbmZvOwogCXU4CXBhZ2VfY29kZTsJLyogMHhDMiAqLwpAQCAtMzY5LDE2ICszNzAsMTcgQEAKIAlrZnJlZShjdGxyKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZGFjX2NvbnRyb2xsZXIgKmdldF9jb250cm9sbGVyKHU4ICpzdWJzeXNfaWQsIHU4ICpzbG90X2lkLAotCQkJCQkJY2hhciAqYXJyYXlfbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgcmRhY19jb250cm9sbGVyICpnZXRfY29udHJvbGxlcihpbnQgaW5kZXgsIGNoYXIgKmFycmF5X25hbWUsCisJCQl1OCAqYXJyYXlfaWQsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3QgcmRhY19jb250cm9sbGVyICpjdGxyLCAqdG1wOwogCiAJc3Bpbl9sb2NrKCZsaXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjdGxyX2xpc3QsIG5vZGUpIHsKLQkJaWYgKChtZW1jbXAodG1wLT5zdWJzeXNfaWQsIHN1YnN5c19pZCwgU1VCU1lTX0lEX0xFTikgPT0gMCkgJiYKLQkJCSAgKG1lbWNtcCh0bXAtPnNsb3RfaWQsIHNsb3RfaWQsIFNMT1RfSURfTEVOKSA9PSAwKSkgeworCQlpZiAoKG1lbWNtcCh0bXAtPmFycmF5X2lkLCBhcnJheV9pZCwgVU5JUVVFX0lEX0xFTikgPT0gMCkgJiYKKwkJCSAgKHRtcC0+aW5kZXggPT0gaW5kZXgpICYmCisJCQkgICh0bXAtPmhvc3QgPT0gc2Rldi0+aG9zdCkpIHsKIAkJCWtyZWZfZ2V0KCZ0bXAtPmtyZWYpOwogCQkJc3Bpbl91bmxvY2soJmxpc3RfbG9jayk7CiAJCQlyZXR1cm4gdG1wOwpAQCAtMzg5LDE2ICszOTEsMTEgQEAKIAkJZ290byBkb25lOwogCiAJLyogaW5pdGlhbGl6ZSBmaWVsZHMgb2YgY29udHJvbGxlciAqLwotCW1lbWNweShjdGxyLT5zdWJzeXNfaWQsIHN1YnN5c19pZCwgU1VCU1lTX0lEX0xFTik7Ci0JbWVtY3B5KGN0bHItPnNsb3RfaWQsIHNsb3RfaWQsIFNMT1RfSURfTEVOKTsKKwltZW1jcHkoY3Rsci0+YXJyYXlfaWQsIGFycmF5X2lkLCBVTklRVUVfSURfTEVOKTsKKwljdGxyLT5pbmRleCA9IGluZGV4OworCWN0bHItPmhvc3QgPSBzZGV2LT5ob3N0OwogCW1lbWNweShjdGxyLT5hcnJheV9uYW1lLCBhcnJheV9uYW1lLCBBUlJBWV9MQUJFTF9MRU4pOwogCi0JLyogdXBkYXRlIHRoZSBjb250cm9sbGVyIGluZGV4ICovCi0JaWYgKHNsb3RfaWRbMV0gPT0gMHgzMSkKLQkJY3Rsci0+aW5kZXggPSAwOwotCWVsc2UKLQkJY3Rsci0+aW5kZXggPSAxOwotCiAJa3JlZl9pbml0KCZjdGxyLT5rcmVmKTsKIAljdGxyLT51c2VfbXMxMCA9IC0xOwogCWN0bHItPm1zX3F1ZXVlZCA9IDA7CkBAIC00NDQsNyArNDQxLDcgQEAKIH0KIAogc3RhdGljIGludCBnZXRfbHVuX2luZm8oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoLAotCQkJY2hhciAqYXJyYXlfbmFtZSkKKwkJCWNoYXIgKmFycmF5X25hbWUsIHU4ICphcnJheV9pZCkKIHsKIAlpbnQgZXJyLCBpOwogCXN0cnVjdCBjOF9pbnF1aXJ5ICppbnFwOwpAQCAtNDYzLDYgKzQ2MCw4IEBACiAJCQkqKGFycmF5X25hbWUraSkgPSBpbnFwLT5hcnJheV91c2VyX2xhYmVsWygyKmkpKzFdOwogCiAJCSooYXJyYXlfbmFtZStBUlJBWV9MQUJFTF9MRU4tMSkgPSAnXDAnOworCQltZW1zZXQoYXJyYXlfaWQsIDAsIFVOSVFVRV9JRF9MRU4pOworCQltZW1jcHkoYXJyYXlfaWQsIGlucXAtPmFycmF5X3VuaXF1ZV9pZCwgaW5xcC0+YXJyYXlfdW5pcV9pZF9sZW4pOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtNTA0LDE2ICs1MDMsMjAgQEAKIH0KIAogc3RhdGljIGludCBpbml0aWFsaXplX2NvbnRyb2xsZXIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoLCBjaGFyICphcnJheV9uYW1lKQorCQlzdHJ1Y3QgcmRhY19kaF9kYXRhICpoLCBjaGFyICphcnJheV9uYW1lLCB1OCAqYXJyYXlfaWQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpbmRleDsKIAlzdHJ1Y3QgYzRfaW5xdWlyeSAqaW5xcDsKIAogCWVyciA9IHN1Ym1pdF9pbnF1aXJ5KHNkZXYsIDB4QzQsIHNpemVvZihzdHJ1Y3QgYzRfaW5xdWlyeSksIGgpOwogCWlmIChlcnIgPT0gU0NTSV9ESF9PSykgewogCQlpbnFwID0gJmgtPmlucS5jNDsKLQkJaC0+Y3RsciA9IGdldF9jb250cm9sbGVyKGlucXAtPnN1YnN5c19pZCwgaW5xcC0+c2xvdF9pZCwKLQkJCQkJYXJyYXlfbmFtZSk7CisJCS8qIGdldCB0aGUgY29udHJvbGxlciBpbmRleCAqLworCQlpZiAoaW5xcC0+c2xvdF9pZFsxXSA9PSAweDMxKQorCQkJaW5kZXggPSAwOworCQllbHNlCisJCQlpbmRleCA9IDE7CisJCWgtPmN0bHIgPSBnZXRfY29udHJvbGxlcihpbmRleCwgYXJyYXlfbmFtZSwgYXJyYXlfaWQsIHNkZXYpOwogCQlpZiAoIWgtPmN0bHIpCiAJCQllcnIgPSBTQ1NJX0RIX1JFU19URU1QX1VOQVZBSUw7CiAJfQpAQCAtODM1LDYgKzgzOCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWNoYXIgYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOworCWNoYXIgYXJyYXlfaWRbVU5JUVVFX0lEX0xFTl07CiAKIAlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZigqc2NzaV9kaF9kYXRhKQogCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwpAQCAtODQ5LDExICs4NTMsMTEgQEAKIAloLT5sdW4gPSBVTklOSVRJQUxJWkVEX0xVTjsKIAloLT5zdGF0ZSA9IFJEQUNfU1RBVEVfQUNUSVZFOwogCi0JZXJyID0gZ2V0X2x1bl9pbmZvKHNkZXYsIGgsIGFycmF5X25hbWUpOworCWVyciA9IGdldF9sdW5faW5mbyhzZGV2LCBoLCBhcnJheV9uYW1lLCBhcnJheV9pZCk7CiAJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQogCQlnb3RvIGZhaWxlZDsKIAotCWVyciA9IGluaXRpYWxpemVfY29udHJvbGxlcihzZGV2LCBoLCBhcnJheV9uYW1lKTsKKwllcnIgPSBpbml0aWFsaXplX2NvbnRyb2xsZXIoc2RldiwgaCwgYXJyYXlfbmFtZSwgYXJyYXlfaWQpOwogCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKIAkJZ290byBmYWlsZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwppbmRleCAyMDRmYThkLi41ZDBlOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCkBAIC00MzIsNiArNDMyLDggQEAKIAl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHM7CiAKKwlydG5sX2xvY2soKTsKKwogCS8qCiAJICogRG9uJ3QgbGlzdGVuIGZvciBFdGhlcm5ldCBwYWNrZXRzIGFueW1vcmUuCiAJICogc3luY2hyb25pemVfbmV0KCkgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaGFuZGxlcnMgYXJlIG5vdCBydW5uaW5nCkBAIC00NjEsNiArNDYzLDggQEAKIAkJCQkJIiBzcGVjaWZpYyBmZWF0dXJlIGZvciBMTEQuXG4iKTsKIAl9CiAKKwlydG5sX3VubG9jaygpOworCiAJLyogUmVsZWFzZSB0aGUgc2VsZi1yZWZlcmVuY2UgdGFrZW4gZHVyaW5nIGZjb2VfaW50ZXJmYWNlX2NyZWF0ZSgpICovCiAJZmNvZV9pbnRlcmZhY2VfcHV0KGZjb2UpOwogfQpAQCAtNDg3LDYgKzQ5MSwxOSBAQAogfQogCiAvKioKKyAqIGZjb2VfcG9ydF9zZW5kKCkgLSBTZW5kIGFuIEV0aGVybmV0LWVuY2Fwc3VsYXRlZCBGSVAvRkNvRSBmcmFtZQorICogQHBvcnQ6IFRoZSBGQ29FIHBvcnQKKyAqIEBza2I6IFRoZSBGSVAvRkNvRSBwYWNrZXQgdG8gYmUgc2VudAorICovCitzdGF0aWMgdm9pZCBmY29lX3BvcnRfc2VuZChzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbikKKwkJZmNvZV9jaGVja193YWl0X3F1ZXVlKHBvcnQtPmxwb3J0LCBza2IpOworCWVsc2UgaWYgKGZjb2Vfc3RhcnRfaW8oc2tiKSkKKwkJZmNvZV9jaGVja193YWl0X3F1ZXVlKHBvcnQtPmxwb3J0LCBza2IpOworfQorCisvKioKICAqIGZjb2VfZmlwX3NlbmQoKSAtIFNlbmQgYW4gRXRoZXJuZXQtZW5jYXBzdWxhdGVkIEZJUCBmcmFtZQogICogQGZpcDogVGhlIEZDb0UgY29udHJvbGxlcgogICogQHNrYjogVGhlIEZJUCBwYWNrZXQgdG8gYmUgc2VudApAQCAtNDk0LDcgKzUxMSw3IEBACiBzdGF0aWMgdm9pZCBmY29lX2ZpcF9zZW5kKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlza2ItPmRldiA9IGZjb2VfZnJvbV9jdGxyKGZpcCktPm5ldGRldjsKLQlkZXZfcXVldWVfeG1pdChza2IpOworCWZjb2VfcG9ydF9zZW5kKGxwb3J0X3ByaXYoZmlwLT5scCksIHNrYik7CiB9CiAKIC8qKgpAQCAtMTI1NywzMCArMTI3NCwyMCBAQAogLyoqCiAgKiBmY29lX3NlbGVjdF9jcHUoKSAtIFNlbGVjdHMgQ1BVIHRvIGhhbmRsZSBwb3N0LXByb2Nlc3Npbmcgb2YgaW5jb21pbmcKICAqCQkJY29tbWFuZC4KLSAqIEBjdXJyX2NwdTogICBDUFUgd2hpY2ggcmVjZWl2ZWQgcmVxdWVzdAogICoKLSAqIFRoaXMgcm91dGluZSBzZWxlY3RzIG5leHQgQ1BVIGJhc2VkIG9uIGNwdW1hc2suCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyBuZXh0IENQVSBiYXNlZCBvbiBjcHVtYXNrIHRvIGRpc3RyaWJ1dGUKKyAqIGluY29taW5nIHJlcXVlc3RzIGluIHJvdW5kIHJvYmluLgogICoKLSAqIFJldHVybnM6IGludCAoQ1BVIG51bWJlcikuIENhbGxlciB0byB2ZXJpZnkgaWYgcmV0dXJuZWQgQ1BVIGlzIG9ubGluZSBvciBub3QuCisgKiBSZXR1cm5zOiBpbnQgQ1BVIG51bWJlcgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZjb2Vfc2VsZWN0X2NwdSh1bnNpZ25lZCBpbnQgY3Vycl9jcHUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmY29lX3NlbGVjdF9jcHUodm9pZCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgaW50IHNlbGVjdGVkX2NwdTsKIAotCWlmIChudW1fb25saW5lX2NwdXMoKSA9PSAxKQotCQlyZXR1cm4gY3Vycl9jcHU7Ci0JLyoKLQkgKiBEb2luZyBmb2xsb3dpbmcgY2hlY2ssIHRvIHNraXAgImN1cnJfY3B1IChzbXBfcHJvY2Vzc29yX2lkKSIKLQkgKiBmcm9tIHNlbGVjdGlvbiBvZiBDUFUgaXMgaW50ZW50aW9uYWwuIFRoaXMgaXMgdG8gYXZvaWQgc2FtZSBDUFUKLQkgKiBkb2luZyBwb3N0LXByb2Nlc3Npbmcgb2YgY29tbWFuZC4gImN1cnJfY3B1IiB0byBqdXN0IHJlY2VpdmUKLQkgKiBpbmNvbWluZyByZXF1ZXN0IGluIGNhc2Ugd2hlcmUgcnhfaWQgaXMgVU5LTk9XTiBhbmQgYWxsIG90aGVyCi0JICogQ1BVIHRvIGFjdHVhbGx5IHByb2Nlc3MgdGhlIGNvbW1hbmQocykKLQkgKi8KLQlkbyB7Ci0JCXNlbGVjdGVkX2NwdSA9IGNwdW1hc2tfbmV4dChzZWxlY3RlZF9jcHUsIGNwdV9vbmxpbmVfbWFzayk7Ci0JCWlmIChzZWxlY3RlZF9jcHUgPj0gbnJfY3B1X2lkcykKLQkJCXNlbGVjdGVkX2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKLQl9IHdoaWxlIChzZWxlY3RlZF9jcHUgPT0gY3Vycl9jcHUpOworCXNlbGVjdGVkX2NwdSA9IGNwdW1hc2tfbmV4dChzZWxlY3RlZF9jcHUsIGNwdV9vbmxpbmVfbWFzayk7CisJaWYgKHNlbGVjdGVkX2NwdSA+PSBucl9jcHVfaWRzKQorCQlzZWxlY3RlZF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7CisKIAlyZXR1cm4gc2VsZWN0ZWRfY3B1OwogfQogCkBAIC0xMzUwLDMwICsxMzU3LDI2IEBACiAKIAlmciA9IGZjb2VfZGV2X2Zyb21fc2tiKHNrYik7CiAJZnItPmZyX2RldiA9IGxwb3J0OwotCWZyLT5wdHlwZSA9IHB0eXBlOwogCiAJLyoKIAkgKiBJbiBjYXNlIHRoZSBpbmNvbWluZyBmcmFtZSdzIGV4Y2hhbmdlIGlzIG9yaWdpbmF0ZWQgZnJvbQogCSAqIHRoZSBpbml0aWF0b3IsIHRoZW4gcmVjZWl2ZWQgZnJhbWUncyBleGNoYW5nZSBpZCBpcyBBTkRlZAogCSAqIHdpdGggZmNfY3B1X21hc2sgYml0cyB0byBnZXQgdGhlIHNhbWUgY3B1IG9uIHdoaWNoIGV4Y2hhbmdlCi0JICogd2FzIG9yaWdpbmF0ZWQsIG90aGVyd2lzZSBqdXN0IHVzZSB0aGUgY3VycmVudCBjcHUuCisJICogd2FzIG9yaWdpbmF0ZWQsIG90aGVyd2lzZSBzZWxlY3QgY3B1IHVzaW5nIHJ4IGV4Y2hhbmdlIGlkCisJICogb3IgZmNvZV9zZWxlY3RfY3B1KCkuCiAJICovCiAJaWYgKG50b2gyNChmaC0+ZmhfZl9jdGwpICYgRkNfRkNfRVhfQ1RYKQogCQljcHUgPSBudG9ocyhmaC0+Zmhfb3hfaWQpICYgZmNfY3B1X21hc2s7CiAJZWxzZSB7Ci0JCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCQlpZiAoKGZoLT5maF90eXBlID09IEZDX1RZUEVfRkNQKSAmJgotCQkgICAgKG50b2hzKGZoLT5maF9yeF9pZCkgPT0gRkNfWElEX1VOS05PV04pKSB7Ci0JCQlkbyB7Ci0JCQkJY3B1ID0gZmNvZV9zZWxlY3RfY3B1KGNwdSk7Ci0JCQl9IHdoaWxlICghY3B1X29ubGluZShjcHUpKTsKLQkJfSBlbHNlICBpZiAoKGZoLT5maF90eXBlID09IEZDX1RZUEVfRkNQKSAmJgotCQkJICAgIChudG9ocyhmaC0+ZmhfcnhfaWQpICE9IEZDX1hJRF9VTktOT1dOKSkgeworCQlpZiAobnRvaHMoZmgtPmZoX3J4X2lkKSA9PSBGQ19YSURfVU5LTk9XTikKKwkJCWNwdSA9IGZjb2Vfc2VsZWN0X2NwdSgpOworCQllbHNlCiAJCQljcHUgPSBudG9ocyhmaC0+ZmhfcnhfaWQpICYgZmNfY3B1X21hc2s7Ci0JCX0gZWxzZQotCQkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCX0KKworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKKwkJZ290byBlcnI7CisKIAlmcHMgPSAmcGVyX2NwdShmY29lX3BlcmNwdSwgY3B1KTsKIAlzcGluX2xvY2tfYmgoJmZwcy0+ZmNvZV9yeF9saXN0LmxvY2spOwogCWlmICh1bmxpa2VseSghZnBzLT50aHJlYWQpKSB7CkBAIC0xNTcyLDExICsxNTc1LDcgQEAKIAogCS8qIHNlbmQgZG93biB0byBsbGQgKi8KIAlmcl9kZXYoZnApID0gbHBvcnQ7Ci0JaWYgKHBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKQotCQlmY29lX2NoZWNrX3dhaXRfcXVldWUobHBvcnQsIHNrYik7Ci0JZWxzZSBpZiAoZmNvZV9zdGFydF9pbyhza2IpKQotCQlmY29lX2NoZWNrX3dhaXRfcXVldWUobHBvcnQsIHNrYik7Ci0KKwlmY29lX3BvcnRfc2VuZChwb3J0LCBza2IpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTU2LDExICsxOTU1LDggQEAKIAlmY29lX2lmX2Rlc3Ryb3kocG9ydC0+bHBvcnQpOwogCiAJLyogRG8gbm90IHRlYXIgZG93biB0aGUgZmNvZSBpbnRlcmZhY2UgZm9yIE5QSVYgcG9ydCAqLwotCWlmICghbnBpdikgewotCQlydG5sX2xvY2soKTsKKwlpZiAoIW5waXYpCiAJCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JfQogCiAJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiB9CkBAIC0yMDE0LDggKzIwMTAsOSBAQAogCQlwcmludGsoS0VSTl9FUlIgImZjb2U6IEZhaWxlZCB0byBjcmVhdGUgaW50ZXJmYWNlICglcylcbiIsCiAJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQlyYyA9IC1FSU87CisJCXJ0bmxfdW5sb2NrKCk7CiAJCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7Ci0JCWdvdG8gb3V0X25vZGV2OworCQlnb3RvIG91dF9ub3J0bmw7CiAJfQogCiAJLyogTWFrZSB0aGlzIHRoZSAibWFzdGVyIiBOX1BvcnQgKi8KQEAgLTIwMzIsNiArMjAyOSw3IEBACiAKIG91dF9ub2RldjoKIAlydG5sX3VubG9jaygpOworb3V0X25vcnRubDoKIAltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5jIGIvZHJpdmVycy9zY3NpL2hwc2EuYwppbmRleCBjNmY5OWIxLi5iMjAwYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKQEAgLTY3Niw2ICs2NzYsMTYgQEAKIAlCVUdfT04oZW50cnkgPCAwIHx8IGVudHJ5ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKTsKIAlyZW1vdmVkWypucmVtb3ZlZF0gPSBoLT5kZXZbZW50cnldOwogCSgqbnJlbW92ZWQpKys7CisKKwkvKgorCSAqIE5ldyBwaHlzaWNhbCBkZXZpY2VzIHdvbid0IGhhdmUgdGFyZ2V0L2x1biBhc3NpZ25lZCB5ZXQKKwkgKiBzbyB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSB2YWx1ZXMgaW4gdGhlIHNsb3Qgd2UgYXJlIHJlcGxhY2luZy4KKwkgKi8KKwlpZiAobmV3X2VudHJ5LT50YXJnZXQgPT0gLTEpIHsKKwkJbmV3X2VudHJ5LT50YXJnZXQgPSBoLT5kZXZbZW50cnldLT50YXJnZXQ7CisJCW5ld19lbnRyeS0+bHVuID0gaC0+ZGV2W2VudHJ5XS0+bHVuOworCX0KKwogCWgtPmRldltlbnRyeV0gPSBuZXdfZW50cnk7CiAJYWRkZWRbKm5hZGRlZF0gPSBuZXdfZW50cnk7CiAJKCpuYWRkZWQpKys7CkBAIC0xMjE5LDggKzEyMjksOCBAQAogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgcmVwb3J0cyBhYm9ydCBmYWlsZWRcbiIsIGNwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6Ci0JCWNtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgYWJvcnRlZCBkbyB0byBhbiB1bnNvbGljaXRlZCAiCisJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7IC8qIHJldHJ5IHRoZSBjb21tYW5kICovCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBhYm9ydGVkIGR1ZSB0byBhbiB1bnNvbGljaXRlZCAiCiAJCQkiYWJvcnRcbiIsIGNwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVElNRU9VVDoKQEAgLTE1NDgsMTAgKzE1NTgsMTcgQEAKIH0KIAogc3RhdGljIGludCBocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10sIHN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlKQorCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10sIHN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlLAorCXVuc2lnbmVkIGNoYXIgKmlzX09CRFJfZGV2aWNlKQogewotI2RlZmluZSBPQkRSX1RBUEVfSU5RX1NJWkUgNDkKKworI2RlZmluZSBPQkRSX1NJR19PRkZTRVQgNDMKKyNkZWZpbmUgT0JEUl9UQVBFX1NJRyAiJERSLTEwIgorI2RlZmluZSBPQkRSX1NJR19MRU4gKHNpemVvZihPQkRSX1RBUEVfU0lHKSAtIDEpCisjZGVmaW5lIE9CRFJfVEFQRV9JTlFfU0laRSAoT0JEUl9TSUdfT0ZGU0VUICsgT0JEUl9TSUdfTEVOKQorCiAJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmY7CisJdW5zaWduZWQgY2hhciAqb2Jkcl9zaWc7CiAKIAlpbnFfYnVmZiA9IGt6YWxsb2MoT0JEUl9UQVBFX0lOUV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlucV9idWZmKQpAQCAtMTU4Myw2ICsxNjAwLDE2IEBACiAJZWxzZQogCQl0aGlzX2RldmljZS0+cmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKIAorCWlmIChpc19PQkRSX2RldmljZSkgeworCQkvKiBTZWUgaWYgdGhpcyBpcyBhIE9uZS1CdXR0b24tRGlzYXN0ZXItUmVjb3ZlcnkgZGV2aWNlCisJCSAqIGJ5IGxvb2tpbmcgZm9yICIkRFItMTAiIGF0IG9mZnNldCA0MyBpbiBpbnF1aXJ5IGRhdGEuCisJCSAqLworCQlvYmRyX3NpZyA9ICZpbnFfYnVmZltPQkRSX1NJR19PRkZTRVRdOworCQkqaXNfT0JEUl9kZXZpY2UgPSAodGhpc19kZXZpY2UtPmRldnR5cGUgPT0gVFlQRV9ST00gJiYKKwkJCQkJc3RybmNtcChvYmRyX3NpZywgT0JEUl9UQVBFX1NJRywKKwkJCQkJCU9CRFJfU0lHX0xFTikgPT0gMCk7CisJfQorCiAJa2ZyZWUoaW5xX2J1ZmYpOwogCXJldHVybiAwOwogCkBAIC0xNzE2LDcgKzE3NDMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaHBzYV91cGRhdGVfZGV2aWNlX2luZm8oaCwgc2NzaTNhZGRyLCB0aGlzX2RldmljZSkpCisJaWYgKGhwc2FfdXBkYXRlX2RldmljZV9pbmZvKGgsIHNjc2kzYWRkciwgdGhpc19kZXZpY2UsIE5VTEwpKQogCQlyZXR1cm4gMDsKIAkoKm5tc2EyeHh4X2VuY2xvc3VyZXMpKys7CiAJaHBzYV9zZXRfYnVzX3RhcmdldF9sdW4odGhpc19kZXZpY2UsIGJ1cywgdGFyZ2V0LCAwKTsKQEAgLTE4MDgsNyArMTgzNSw2IEBACiAJICovCiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCA9IE5VTEw7CiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2Rldl9saXN0ID0gTlVMTDsKLQl1bnNpZ25lZCBjaGFyICppbnFfYnVmZiA9IE5VTEw7CiAJdTMyIG5waHlzaWNhbHMgPSAwOwogCXUzMiBubG9naWNhbHMgPSAwOwogCXUzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CkBAIC0xODI0LDExICsxODUwLDkgQEAKIAkJR0ZQX0tFUk5FTCk7CiAJcGh5c2Rldl9saXN0ID0ga3phbGxvYyhyZXBvcnRsdW5zaXplLCBHRlBfS0VSTkVMKTsKIAlsb2dkZXZfbGlzdCA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CiAJdG1wZGV2aWNlID0ga3phbGxvYyhzaXplb2YoKnRtcGRldmljZSksIEdGUF9LRVJORUwpOwogCi0JaWYgKCFjdXJyZW50c2QgfHwgIXBoeXNkZXZfbGlzdCB8fCAhbG9nZGV2X2xpc3QgfHwKLQkJIWlucV9idWZmIHx8ICF0bXBkZXZpY2UpIHsKKwlpZiAoIWN1cnJlbnRzZCB8fCAhcGh5c2Rldl9saXN0IHx8ICFsb2dkZXZfbGlzdCB8fCAhdG1wZGV2aWNlKSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODYzLDcgKzE4ODcsNyBAQAogCS8qIGFkanVzdCBvdXIgdGFibGUgb2YgZGV2aWNlcyAqLwogCW5tc2EyeHh4X2VuY2xvc3VyZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzICsgMTsgaSsrKSB7Ci0JCXU4ICpsdW5hZGRyYnl0ZXM7CisJCXU4ICpsdW5hZGRyYnl0ZXMsIGlzX09CRFIgPSAwOwogCiAJCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tICovCiAJCWx1bmFkZHJieXRlcyA9IGZpZ3VyZV9sdW5hZGRyYnl0ZXMoaCwgcmFpZF9jdGxyX3Bvc2l0aW9uLApAQCAtMTg3NCw3ICsxODk4LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEdldCBkZXZpY2UgdHlwZSwgdmVuZG9yLCBtb2RlbCwgZGV2aWNlIGlkICovCi0JCWlmIChocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbyhoLCBsdW5hZGRyYnl0ZXMsIHRtcGRldmljZSkpCisJCWlmIChocHNhX3VwZGF0ZV9kZXZpY2VfaW5mbyhoLCBsdW5hZGRyYnl0ZXMsIHRtcGRldmljZSwKKwkJCQkJCQkmaXNfT0JEUikpCiAJCQljb250aW51ZTsgLyogc2tpcCBpdCBpZiB3ZSBjYW4ndCB0YWxrIHRvIGl0LiAqLwogCQlmaWd1cmVfYnVzX3RhcmdldF9sdW4oaCwgbHVuYWRkcmJ5dGVzLCAmYnVzLCAmdGFyZ2V0LCAmbHVuLAogCQkJdG1wZGV2aWNlKTsKQEAgLTE4OTgsNyArMTkyMyw3IEBACiAJCWhwc2Ffc2V0X2J1c190YXJnZXRfbHVuKHRoaXNfZGV2aWNlLCBidXMsIHRhcmdldCwgbHVuKTsKIAogCQlzd2l0Y2ggKHRoaXNfZGV2aWNlLT5kZXZ0eXBlKSB7Ci0JCWNhc2UgVFlQRV9ST006IHsKKwkJY2FzZSBUWVBFX1JPTToKIAkJCS8qIFdlIGRvbid0ICpyZWFsbHkqIHN1cHBvcnQgYWN0dWFsIENELVJPTSBkZXZpY2VzLAogCQkJICoganVzdCAiT25lIEJ1dHRvbiBEaXNhc3RlciBSZWNvdmVyeSIgdGFwZSBkcml2ZQogCQkJICogd2hpY2ggdGVtcG9yYXJpbHkgcHJldGVuZHMgdG8gYmUgYSBDRC1ST00gZHJpdmUuCkBAIC0xOTA2LDE1ICsxOTMxLDggQEAKIAkJCSAqIGRldmljZSBieSBjaGVja2luZyBmb3IgIiREUi0xMCIgaW4gYnl0ZXMgNDMtNDggb2YKIAkJCSAqIHRoZSBpbnF1aXJ5IGRhdGEuCiAJCQkgKi8KLQkJCQljaGFyIG9iZHJfc2lnWzddOwotI2RlZmluZSBPQkRSX1RBUEVfU0lHICIkRFItMTAiCi0JCQkJc3RybmNweShvYmRyX3NpZywgJmlucV9idWZmWzQzXSwgNik7Ci0JCQkJb2Jkcl9zaWdbNl0gPSAnXDAnOwotCQkJCWlmIChzdHJuY21wKG9iZHJfc2lnLCBPQkRSX1RBUEVfU0lHLCA2KSAhPSAwKQotCQkJCQkvKiBOb3QgT0JEUiBkZXZpY2UsIGlnbm9yZSBpdC4gKi8KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQluY3VycmVudCsrOworCQkJaWYgKGlzX09CRFIpCisJCQkJbmN1cnJlbnQrKzsKIAkJCWJyZWFrOwogCQljYXNlIFRZUEVfRElTSzoKIAkJCWlmIChpIDwgbnBoeXNpY2FscykKQEAgLTE5NDcsNyArMTk2NSw2IEBACiAJZm9yIChpID0gMDsgaSA8IG5kZXZfYWxsb2NhdGVkOyBpKyspCiAJCWtmcmVlKGN1cnJlbnRzZFtpXSk7CiAJa2ZyZWUoY3VycmVudHNkKTsKLQlrZnJlZShpbnFfYnVmZik7CiAJa2ZyZWUocGh5c2Rldl9saXN0KTsKIAlrZnJlZShsb2dkZXZfbGlzdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCA2ZDhkY2Q0Li43ZjUzY2VhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5oCkBAIC0yMTQsNyArMjE0LDcgQEAKIAlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJTZW5kaW5nICV4LCB0YWcgPSAleFxuIiwgYy0+YnVzYWRkciwKIAkJYy0+SGVhZGVyLlRhZy5sb3dlcik7CiAJd3JpdGVsKGMtPmJ1c2FkZHIsIGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOwotCSh2b2lkKSByZWFkbChoLT52YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKKwkodm9pZCkgcmVhZGwoaC0+dmFkZHIgKyBTQTVfU0NSQVRDSFBBRF9PRkZTRVQpOwogCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nKys7CiAJaWYgKGgtPmNvbW1hbmRzX291dHN0YW5kaW5nID4gaC0+bWF4X291dHN0YW5kaW5nKQogCQloLT5tYXhfb3V0c3RhbmRpbmcgPSBoLT5jb21tYW5kc19vdXRzdGFuZGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCA4ODgwODZjLi44ZDYzNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC04Nzc4LDE0ICs4Nzc4LDE0IEBACiAJaWYgKHJjICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2F2ZSBQQ0kgY29uZmlnIHNwYWNlXG4iKTsKIAkJcmMgPSAtRUlPOwotCQlnb3RvIGNsZWFudXBfbm9tZW07CisJCWdvdG8gb3V0X21zaV9kaXNhYmxlOwogCX0KIAogCWlmICgocmMgPSBpcHJfc2F2ZV9wY2l4X2NtZF9yZWcoaW9hX2NmZykpKQotCQlnb3RvIGNsZWFudXBfbm9tZW07CisJCWdvdG8gb3V0X21zaV9kaXNhYmxlOwogCiAJaWYgKChyYyA9IGlwcl9zZXRfcGNpeF9jbWRfcmVnKGlvYV9jZmcpKSkKLQkJZ290byBjbGVhbnVwX25vbWVtOworCQlnb3RvIG91dF9tc2lfZGlzYWJsZTsKIAogCWlmIChpb2FfY2ZnLT5zaXM2NCkKIAkJaW9hX2NmZy0+Y2ZnX3RhYmxlX3NpemUgPSAoc2l6ZW9mKHN0cnVjdCBpcHJfY29uZmlnX3RhYmxlX2hkcjY0KQpAQCAtODgwMCw3ICs4ODAwLDcgQEAKIAlpZiAocmMgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJDb3VsZG4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBkZXZpY2UgZHJpdmVyIVxuIik7Ci0JCWdvdG8gY2xlYW51cF9ub21lbTsKKwkJZ290byBvdXRfbXNpX2Rpc2FibGU7CiAJfQogCiAJLyoKQEAgLTg4NDUsMTAgKzg4NDUsMTAgQEAKIAogY2xlYW51cF9ub2xvZzoKIAlpcHJfZnJlZV9tZW0oaW9hX2NmZyk7Ci1jbGVhbnVwX25vbWVtOgotCWlvdW5tYXAoaXByX3JlZ3MpOwogb3V0X21zaV9kaXNhYmxlOgogCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKK2NsZWFudXBfbm9tZW06CisJaW91bm1hcChpcHJfcmVncyk7CiBvdXRfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBvdXRfc2NzaV9ob3N0X3B1dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL2hvc3QuYyBiL2RyaXZlcnMvc2NzaS9pc2NpL2hvc3QuYwppbmRleCAyNjA3MmYxLi42OTgxYjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvaG9zdC5jCkBAIC01MzEsNiArNTMxLDkgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NVX0NPTVBMRVRJT05fVFlQRV9FVkVOVDoKKwkJCXNjaV9jb250cm9sbGVyX2V2ZW50X2NvbXBsZXRpb24oaWhvc3QsIGVudCk7CisJCQlicmVhazsKKwogCQljYXNlIFNDVV9DT01QTEVUSU9OX1RZUEVfTk9USUZZOiB7CiAJCQlldmVudF9jeWNsZSBePSAoKGV2ZW50X2dldCsxKSAmIFNDVV9NQVhfRVZFTlRTKSA8PAogCQkJCSAgICAgICAoU01VX0NPTVBMRVRJT05fUVVFVUVfR0VUX0VWRU5UX0NZQ0xFX0JJVF9TSElGVCAtIFNDVV9NQVhfRVZFTlRTX1NISUZUKTsKQEAgLTEwOTEsNiArMTA5NCw3IEBACiAJc3RydWN0IGlzY2lfcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3QgaXNjaV9yZXF1ZXN0ICpuZXh0X3JlcXVlc3Q7CiAJc3RydWN0IHNhc190YXNrICAgICAqdGFzazsKKwl1MTYgYWN0aXZlOwogCiAJSU5JVF9MSVNUX0hFQUQoJmNvbXBsZXRlZF9yZXF1ZXN0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZlcnJvcmVkX3JlcXVlc3RfbGlzdCk7CkBAIC0xMTgxLDYgKzExODUsMTMgQEAKIAkJfQogCX0KIAorCS8qIHRoZSBjb2FsZXNlbmNlIHRpbWVvdXQgZG91YmxlcyBhdCBlYWNoIGVuY29kaW5nIHN0ZXAsIHNvCisJICogdXBkYXRlIGl0IGJhc2VkIG9uIHRoZSBpbG9nMiB2YWx1ZSBvZiB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMKKwkgKi8KKwlhY3RpdmUgPSBpc2NpX3RjaV9hY3RpdmUoaWhvc3QpOworCXdyaXRlbChTTVVfSUNDX0dFTl9WQUwoTlVNQkVSLCBhY3RpdmUpIHwKKwkgICAgICAgU01VX0lDQ19HRU5fVkFMKFRJTUVSLCBJU0NJX0NPQUxFU0NFX0JBU0UgKyBpbG9nMihhY3RpdmUpKSwKKwkgICAgICAgJmlob3N0LT5zbXVfcmVnaXN0ZXJzLT5pbnRlcnJ1cHRfY29hbGVzY2VfY29udHJvbCk7CiB9CiAKIC8qKgpAQCAtMTQ3MSw3ICsxNDgyLDcgQEAKIAlzdHJ1Y3QgaXNjaV9ob3N0ICppaG9zdCA9IGNvbnRhaW5lcl9vZihzbSwgdHlwZW9mKCppaG9zdCksIHNtKTsKIAogCS8qIHNldCB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgY29hbGVzY2VuY2UgbnVtYmVyIGFuZCB0aW1lb3V0IHZhbHVlLiAqLwotCXNjaV9jb250cm9sbGVyX3NldF9pbnRlcnJ1cHRfY29hbGVzY2VuY2UoaWhvc3QsIDB4MTAsIDI1MCk7CisJc2NpX2NvbnRyb2xsZXJfc2V0X2ludGVycnVwdF9jb2FsZXNjZW5jZShpaG9zdCwgMCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9jb250cm9sbGVyX3JlYWR5X3N0YXRlX2V4aXQoc3RydWN0IHNjaV9iYXNlX3N0YXRlX21hY2hpbmUgKnNtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY2kvaG9zdC5oIGIvZHJpdmVycy9zY3NpL2lzY2kvaG9zdC5oCmluZGV4IDA2MjEwMWEuLjlmMzM4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NpL2hvc3QuaAorKysgYi9kcml2ZXJzL3Njc2kvaXNjaS9ob3N0LmgKQEAgLTM2OSw2ICszNjksOSBAQAogI2RlZmluZSBJU0NJX1RBR19TRVEodGFnKSAoKCh0YWcpID4+IDEyKSAmIChTQ0lfTUFYX1NFUS0xKSkKICNkZWZpbmUgSVNDSV9UQUdfVENJKHRhZykgKCh0YWcpICYgKFNDSV9NQVhfSU9fUkVRVUVTVFMtMSkpCiAKKy8qIGludGVycnVwdCBjb2FsZXNjaW5nIGJhc2VsaW5lOiA5ID09IDMgdG8gNXVzIGludGVycnVwdCBkZWxheSBwZXIgY29tbWFuZCAqLworI2RlZmluZSBJU0NJX0NPQUxFU0NFX0JBU0UgOQorCiAvKiBleHBhbmRlciBhdHRhY2hlZCBzYXRhIGRldmljZXMgcmVxdWlyZSAzIHJuYyBzbG90cyAqLwogc3RhdGljIGlubGluZSBpbnQgc2NpX3JlbW90ZV9kZXZpY2Vfbm9kZV9jb3VudChzdHJ1Y3QgaXNjaV9yZW1vdGVfZGV2aWNlICppZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY2kvaW5pdC5jIGIvZHJpdmVycy9zY3NpL2lzY2kvaW5pdC5jCmluZGV4IDYxZTBkMDkuLjI5YWEzNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NpL2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjaS9pbml0LmMKQEAgLTU5LDEwICs1OSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiaXNjaS5oIgogI2luY2x1ZGUgInRhc2suaCIKICNpbmNsdWRlICJwcm9iZV9yb21zLmgiCiAKKyNkZWZpbmUgTUFKIDEKKyNkZWZpbmUgTUlOIDAKKyNkZWZpbmUgQlVJTEQgMAorI2RlZmluZSBEUlZfVkVSU0lPTiBfX3N0cmluZ2lmeShNQUopICIuIiBfX3N0cmluZ2lmeShNSU4pICIuIiBcCisJX19zdHJpbmdpZnkoQlVJTEQpCisKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKwogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqaXNjaV90cmFuc3BvcnRfdGVtcGxhdGU7CiAKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpc2NpX2lkX3RhYmxlKSA9IHsKQEAgLTExMyw2ICsxMjIsMjIgQEAKIG1vZHVsZV9wYXJhbShtYXhfY29uY3Vycl9zcGludXAsIGJ5dGUsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfY29uY3Vycl9zcGludXAsICJNYXggY29uY3VycmVudCBkZXZpY2Ugc3BpbnVwIik7CiAKK3N0YXRpYyBzc2l6ZV90IGlzY2lfc2hvd19pZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjb250YWluZXJfb2YoZGV2LCB0eXBlb2YoKnNob3N0KSwgc2hvc3RfZGV2KTsKKwlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gU0hPU1RfVE9fU0FTX0hBKHNob3N0KTsKKwlzdHJ1Y3QgaXNjaV9ob3N0ICppaG9zdCA9IGNvbnRhaW5lcl9vZihzYXNfaGEsIHR5cGVvZigqaWhvc3QpLCBzYXNfaGEpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGlob3N0LT5pZCk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihpc2NpX2lkLCBTX0lSVUdPLCBpc2NpX3Nob3dfaWQsIE5VTEwpOworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqaXNjaV9ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2lzY2lfaWQsCisJTlVMTAorfTsKKwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgaXNjaV9zaHQgPSB7CiAKIAkubW9kdWxlCQkJCT0gVEhJU19NT0RVTEUsCkBAIC0xMzgsNiArMTYzLDcgQEAKIAkuc2xhdmVfYWxsb2MJCQk9IHNhc19zbGF2ZV9hbGxvYywKIAkudGFyZ2V0X2Rlc3Ryb3kJCQk9IHNhc190YXJnZXRfZGVzdHJveSwKIAkuaW9jdGwJCQkJPSBzYXNfaW9jdGwsCisJLnNob3N0X2F0dHJzCQkJPSBpc2NpX2hvc3RfYXR0cnMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhc19kb21haW5fZnVuY3Rpb25fdGVtcGxhdGUgaXNjaV90cmFuc3BvcnRfb3BzICA9IHsKQEAgLTIzMiwxNyArMjU4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgaXNjaV9zaG93X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNvbnRhaW5lcl9vZihkZXYsIHR5cGVvZigqc2hvc3QpLCBzaG9zdF9kZXYpOwotCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBTSE9TVF9UT19TQVNfSEEoc2hvc3QpOwotCXN0cnVjdCBpc2NpX2hvc3QgKmlob3N0ID0gY29udGFpbmVyX29mKHNhc19oYSwgdHlwZW9mKCppaG9zdCksIHNhc19oYSk7Ci0KLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaWhvc3QtPmlkKTsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGlzY2lfaWQsIFNfSVJVR08sIGlzY2lfc2hvd19pZCwgTlVMTCk7Ci0KIHN0YXRpYyB2b2lkIGlzY2lfdW5yZWdpc3RlcihzdHJ1Y3QgaXNjaV9ob3N0ICppc2NpX2hvc3QpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CkBAIC0yNTEsNyArMjY2LDYgQEAKIAkJcmV0dXJuOwogCiAJc2hvc3QgPSBpc2NpX2hvc3QtPnNob3N0OwotCWRldmljZV9yZW1vdmVfZmlsZSgmc2hvc3QtPnNob3N0X2RldiwgJmRldl9hdHRyX2lzY2lfaWQpOwogCiAJc2FzX3VucmVnaXN0ZXJfaGEoJmlzY2lfaG9zdC0+c2FzX2hhKTsKIApAQCAtNDE1LDE0ICs0MjksOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3Nob3N0X3JlbW92ZTsKIAotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2hvc3QtPnNob3N0X2RldiwgJmRldl9hdHRyX2lzY2lfaWQpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3VucmVnaXN0ZXJfaGE7Ci0KIAlyZXR1cm4gaXNjaV9ob3N0OwogCi0gZXJyX3VucmVnaXN0ZXJfaGE6Ci0Jc2FzX3VucmVnaXN0ZXJfaGEoJihpc2NpX2hvc3QtPnNhc19oYSkpOwogIGVycl9zaG9zdF9yZW1vdmU6CiAJc2NzaV9yZW1vdmVfaG9zdChzaG9zdCk7CiAgZXJyX3Nob3N0OgpAQCAtNTQwLDcgKzU0OCw4IEBACiB7CiAJaW50IGVycjsKIAotCXByX2luZm8oIiVzOiBJbnRlbChSKSBDNjAwIFNBUyBDb250cm9sbGVyIERyaXZlclxuIiwgRFJWX05BTUUpOworCXByX2luZm8oIiVzOiBJbnRlbChSKSBDNjAwIFNBUyBDb250cm9sbGVyIERyaXZlciAtIHZlcnNpb24gJXNcbiIsCisJCURSVl9OQU1FLCBEUlZfVkVSU0lPTik7CiAKIAlpc2NpX3RyYW5zcG9ydF90ZW1wbGF0ZSA9IHNhc19kb21haW5fYXR0YWNoX3RyYW5zcG9ydCgmaXNjaV90cmFuc3BvcnRfb3BzKTsKIAlpZiAoIWlzY2lfdHJhbnNwb3J0X3RlbXBsYXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY2kvcGh5LmMgYi9kcml2ZXJzL3Njc2kvaXNjaS9waHkuYwppbmRleCA3OTMxM2E3Li40MzBmYzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS9waHkuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjaS9waHkuYwpAQCAtMTA0LDYgKzEwNCw3IEBACiAJdTMyIHBhcml0eV9jb3VudCA9IDA7CiAJdTMyIGxsY3RsLCBsaW5rX3JhdGU7CiAJdTMyIGNsa3NtX3ZhbHVlID0gMDsKKwl1MzIgc3BfdGltZW91dHMgPSAwOwogCiAJaXBoeS0+bGlua19sYXllcl9yZWdpc3RlcnMgPSByZWc7CiAKQEAgLTIxMSw2ICsyMTIsMTggQEAKIAlsbGN0bCB8PSBTQ1VfU0FTX0xMQ1RMX0dFTl9WQUwoTUFYX0xJTktfUkFURSwgbGlua19yYXRlKTsKIAl3cml0ZWwobGxjdGwsICZpcGh5LT5saW5rX2xheWVyX3JlZ2lzdGVycy0+bGlua19sYXllcl9jb250cm9sKTsKIAorCXNwX3RpbWVvdXRzID0gcmVhZGwoJmlwaHktPmxpbmtfbGF5ZXJfcmVnaXN0ZXJzLT5zYXNfcGh5X3RpbWVvdXRzKTsKKworCS8qIENsZWFyIHRoZSBkZWZhdWx0IDB4MzYgKDU0dXMpIFJBVEVfQ0hBTkdFIHRpbWVvdXQgdmFsdWUuICovCisJc3BfdGltZW91dHMgJj0gflNDVV9TQVNfUEhZVE9WX0dFTl9WQUwoUkFURV9DSEFOR0UsIDB4RkYpOworCisJLyogU2V0IFJBVEVfQ0hBTkdFIHRpbWVvdXQgdmFsdWUgdG8gMHgzQiAoNTl1cykuICBUaGlzIGVuc3VyZXMgU0NVIGNhbgorCSAqIGxvY2sgd2l0aCAzR2IgZHJpdmUgd2hlbiBTQ1UgbWF4IHJhdGUgaXMgc2V0IHRvIDEuNUdiLgorCSAqLworCXNwX3RpbWVvdXRzIHw9IFNDVV9TQVNfUEhZVE9WX0dFTl9WQUwoUkFURV9DSEFOR0UsIDB4M0IpOworCisJd3JpdGVsKHNwX3RpbWVvdXRzLCAmaXBoeS0+bGlua19sYXllcl9yZWdpc3RlcnMtPnNhc19waHlfdGltZW91dHMpOworCiAJaWYgKGlzX2EyKGlob3N0LT5wZGV2KSkgewogCQkvKiBQcm9ncmFtIHRoZSBtYXggQVJCIHRpbWUgZm9yIHRoZSBQSFkgdG8gNzAwdXMgc28gd2UgaW50ZXItb3BlcmF0ZSB3aXRoCiAJCSAqIHRoZSBQTUMgZXhwYW5kZXIgd2hpY2ggc2h1dHMgZG93biBQSFlzIGlmIHRoZSBleHBhbmRlciBQSFkgZ2VuZXJhdGVzIHRvbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY2kvcmVnaXN0ZXJzLmggYi9kcml2ZXJzL3Njc2kvaXNjaS9yZWdpc3RlcnMuaAppbmRleCA5YjI2NmM3Li4wMGFmYzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS9yZWdpc3RlcnMuaAorKysgYi9kcml2ZXJzL3Njc2kvaXNjaS9yZWdpc3RlcnMuaApAQCAtMTI5OSw2ICsxMjk5LDE4IEBACiAjZGVmaW5lIFNDVV9BRkVfWENWUkNSX09GRlNFVCAgICAgICAweDAwREMKICNkZWZpbmUgU0NVX0FGRV9MVVRDUl9PRkZTRVQgICAgICAgIDB4MDBFMAogCisjZGVmaW5lIFNDVV9TQVNfUEhZX1RJTUVSX1RJTUVPVVRfVkFMVUVTX0FMSUdOX0RFVEVDVElPTl9TSElGVCAgICAgICAgICAoMFVMKQorI2RlZmluZSBTQ1VfU0FTX1BIWV9USU1FUl9USU1FT1VUX1ZBTFVFU19BTElHTl9ERVRFQ1RJT05fTUFTSyAgICAgICAgICAgKDB4MDAwMDAwRkZVTCkKKyNkZWZpbmUgU0NVX1NBU19QSFlfVElNRVJfVElNRU9VVF9WQUxVRVNfSE9UX1BMVUdfU0hJRlQgICAgICAgICAgICAgICAgICg4VUwpCisjZGVmaW5lIFNDVV9TQVNfUEhZX1RJTUVSX1RJTUVPVVRfVkFMVUVTX0hPVF9QTFVHX01BU0sgICAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMFVMKQorI2RlZmluZSBTQ1VfU0FTX1BIWV9USU1FUl9USU1FT1VUX1ZBTFVFU19DT01TQVNfREVURUNUSU9OX1NISUZUICAgICAgICAgKDE2VUwpCisjZGVmaW5lIFNDVV9TQVNfUEhZX1RJTUVSX1RJTUVPVVRfVkFMVUVTX0NPTVNBU19ERVRFQ1RJT05fTUFTSyAgICAgICAgICAoMHgwMEZGMDAwMFVMKQorI2RlZmluZSBTQ1VfU0FTX1BIWV9USU1FUl9USU1FT1VUX1ZBTFVFU19SQVRFX0NIQU5HRV9TSElGVCAgICAgICAgICAgICAgKDI0VUwpCisjZGVmaW5lIFNDVV9TQVNfUEhZX1RJTUVSX1RJTUVPVVRfVkFMVUVTX1JBVEVfQ0hBTkdFX01BU0sgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFVMKQorCisjZGVmaW5lIFNDVV9TQVNfUEhZVE9WX0dFTl9WQUwobmFtZSwgdmFsdWUpIFwKKwlTQ1VfR0VOX1ZBTFVFKFNDVV9TQVNfUEhZX1RJTUVSX1RJTUVPVVRfVkFMVUVTXyMjbmFtZSwgdmFsdWUpCisKICNkZWZpbmUgU0NVX1NBU19MSU5LX0xBWUVSX0NPTlRST0xfTUFYX0xJTktfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICgwKQogI2RlZmluZSBTQ1VfU0FTX0xJTktfTEFZRVJfQ09OVFJPTF9NQVhfTElOS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDMpCiAjZGVmaW5lIFNDVV9TQVNfTElOS19MQVlFUl9DT05UUk9MX01BWF9MSU5LX1JBVEVfR0VOMSAgICAgICAgICAgICAgICAgICAoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL3JlcXVlc3QuYyBiL2RyaXZlcnMvc2NzaS9pc2NpL3JlcXVlc3QuYwppbmRleCBhNDZlMDdhLi5iNWQzYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS9yZXF1ZXN0LmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvcmVxdWVzdC5jCkBAIC03MzIsMTIgKzczMiwyMCBAQAogCQlzY2lfY2hhbmdlX3N0YXRlKCZpcmVxLT5zbSwgU0NJX1JFUV9BQk9SVElORyk7CiAJCXJldHVybiBTQ0lfU1VDQ0VTUzsKIAljYXNlIFNDSV9SRVFfVEFTS19XQUlUX1RDX1JFU1A6CisJCS8qIFRoZSB0YXNrIGZyYW1lIHdhcyBhbHJlYWR5IGNvbmZpcm1lZCB0byBoYXZlIGJlZW4KKwkJICogc2VudCBieSB0aGUgU0NVIEhXLiAgU2luY2UgdGhlIHN0YXRlIG1hY2hpbmUgaXMKKwkJICogbm93IG9ubHkgd2FpdGluZyBmb3IgdGhlIHRhc2sgcmVzcG9uc2UgaXRzZWxmLAorCQkgKiBhYm9ydCB0aGUgcmVxdWVzdCBhbmQgY29tcGxldGUgaXQgaW1tZWRpYXRlbHkKKwkJICogYW5kIGRvbid0IHdhaXQgZm9yIHRoZSB0YXNrIHJlc3BvbnNlLgorCQkgKi8KIAkJc2NpX2NoYW5nZV9zdGF0ZSgmaXJlcS0+c20sIFNDSV9SRVFfQUJPUlRJTkcpOwogCQlzY2lfY2hhbmdlX3N0YXRlKCZpcmVxLT5zbSwgU0NJX1JFUV9DT01QTEVURUQpOwogCQlyZXR1cm4gU0NJX1NVQ0NFU1M7CiAJY2FzZSBTQ0lfUkVRX0FCT1JUSU5HOgotCQlzY2lfY2hhbmdlX3N0YXRlKCZpcmVxLT5zbSwgU0NJX1JFUV9DT01QTEVURUQpOwotCQlyZXR1cm4gU0NJX1NVQ0NFU1M7CisJCS8qIElmIGEgcmVxdWVzdCBoYXMgYSB0ZXJtaW5hdGlvbiByZXF1ZXN0ZWQgdHdpY2UsIHJldHVybgorCQkgKiBhIGZhaWx1cmUgaW5kaWNhdGlvbiwgc2luY2UgSFcgY29uZmlybWF0aW9uIG9mIHRoZSBmaXJzdAorCQkgKiBhYm9ydCBpcyBzdGlsbCBvdXRzdGFuZGluZy4KKwkJICovCiAJY2FzZSBTQ0lfUkVRX0NPTVBMRVRFRDoKIAlkZWZhdWx0OgogCQlkZXZfd2FybigmaXJlcS0+b3duaW5nX2NvbnRyb2xsZXItPnBkZXYtPmRldiwKQEAgLTIzOTksMjIgKzI0MDcsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlzY2lfcmVxdWVzdF9wcm9jZXNzX3N0cF9yZXNwb25zZShzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssCi0JCQkJCSAgICAgIHZvaWQgKnJlc3BvbnNlX2J1ZmZlcikKK3N0YXRpYyB2b2lkIGlzY2lfcHJvY2Vzc19zdHBfcmVzcG9uc2Uoc3RydWN0IHNhc190YXNrICp0YXNrLCBzdHJ1Y3QgZGV2X3RvX2hvc3RfZmlzICpmaXMpCiB7Ci0Jc3RydWN0IGRldl90b19ob3N0X2ZpcyAqZDJoX3JlZ19maXMgPSByZXNwb25zZV9idWZmZXI7CiAJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHMgPSAmdGFzay0+dGFza19zdGF0dXM7CiAJc3RydWN0IGF0YV90YXNrX3Jlc3AgKnJlc3AgPSAodm9pZCAqKSZ0cy0+YnVmWzBdOwogCi0JcmVzcC0+ZnJhbWVfbGVuID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikocmVzcG9uc2VfYnVmZmVyICsgNikpOwotCW1lbWNweSgmcmVzcC0+ZW5kaW5nX2Zpc1swXSwgcmVzcG9uc2VfYnVmZmVyICsgMTYsIDI0KTsKKwlyZXNwLT5mcmFtZV9sZW4gPSBzaXplb2YoKmZpcyk7CisJbWVtY3B5KHJlc3AtPmVuZGluZ19maXMsIGZpcywgc2l6ZW9mKCpmaXMpKTsKIAl0cy0+YnVmX3ZhbGlkX3NpemUgPSBzaXplb2YoKnJlc3ApOwogCi0JLyoqCi0JICogSWYgdGhlIGRldmljZSBmYXVsdCBiaXQgaXMgc2V0IGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHRoZW4KKwkvKiBJZiB0aGUgZGV2aWNlIGZhdWx0IGJpdCBpcyBzZXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciwgdGhlbgogCSAqIHNldCB0aGUgc2Vuc2UgZGF0YSBhbmQgcmV0dXJuLgogCSAqLwotCWlmIChkMmhfcmVnX2Zpcy0+c3RhdHVzICYgQVRBX0RGKQorCWlmIChmaXMtPnN0YXR1cyAmIEFUQV9ERikKIAkJdHMtPnN0YXQgPSBTQVNfUFJPVE9fUkVTUE9OU0U7CiAJZWxzZQogCQl0cy0+c3RhdCA9IFNBTV9TVEFUX0dPT0Q7CkBAIC0yNDI4LDcgKzI0MzMsNiBAQAogewogCXN0cnVjdCBzYXNfdGFzayAqdGFzayA9IGlzY2lfcmVxdWVzdF9hY2Nlc3NfdGFzayhyZXF1ZXN0KTsKIAlzdHJ1Y3Qgc3NwX3Jlc3BvbnNlX2l1ICpyZXNwX2l1OwotCXZvaWQgKnJlc3BfYnVmOwogCXVuc2lnbmVkIGxvbmcgdGFza19mbGFnczsKIAlzdHJ1Y3QgaXNjaV9yZW1vdGVfZGV2aWNlICppZGV2ID0gaXNjaV9sb29rdXBfZGV2aWNlKHRhc2stPmRldik7CiAJZW51bSBzZXJ2aWNlX3Jlc3BvbnNlIHJlc3BvbnNlICAgICAgID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7CkBAIC0yNTY1LDkgKzI1NjksNyBAQAogCQkJCXRhc2spOwogCiAJCQlpZiAoc2FzX3Byb3RvY29sX2F0YSh0YXNrLT50YXNrX3Byb3RvKSkgewotCQkJCXJlc3BfYnVmID0gJnJlcXVlc3QtPnN0cC5yc3A7Ci0JCQkJaXNjaV9yZXF1ZXN0X3Byb2Nlc3Nfc3RwX3Jlc3BvbnNlKHRhc2ssCi0JCQkJCQkJCSAgcmVzcF9idWYpOworCQkJCWlzY2lfcHJvY2Vzc19zdHBfcmVzcG9uc2UodGFzaywgJnJlcXVlc3QtPnN0cC5yc3ApOwogCQkJfSBlbHNlIGlmIChTQVNfUFJPVE9DT0xfU1NQID09IHRhc2stPnRhc2tfcHJvdG8pIHsKIAogCQkJCS8qIGNyYWNrIHRoZSBpdSByZXNwb25zZSBidWZmZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjaS91bnNvbGljaXRlZF9mcmFtZV9jb250cm9sLmMgYi9kcml2ZXJzL3Njc2kvaXNjaS91bnNvbGljaXRlZF9mcmFtZV9jb250cm9sLmMKaW5kZXggZTllMWUyYS4uMTZmODhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY2kvdW5zb2xpY2l0ZWRfZnJhbWVfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NpL3Vuc29saWNpdGVkX2ZyYW1lX2NvbnRyb2wuYwpAQCAtNzIsNyArNzIsNyBAQAogCSAqLwogCWJ1Zl9sZW4gPSBTQ1VfTUFYX1VOU09MSUNJVEVEX0ZSQU1FUyAqIFNDVV9VTlNPTElDSVRFRF9GUkFNRV9CVUZGRVJfU0laRTsKIAloZWFkZXJfbGVuID0gU0NVX01BWF9VTlNPTElDSVRFRF9GUkFNRVMgKiBzaXplb2Yoc3RydWN0IHNjdV91bnNvbGljaXRlZF9mcmFtZV9oZWFkZXIpOwotCXNpemUgPSBidWZfbGVuICsgaGVhZGVyX2xlbiArIFNDVV9NQVhfVU5TT0xJQ0lURURfRlJBTUVTICogc2l6ZW9mKGRtYV9hZGRyX3QpOworCXNpemUgPSBidWZfbGVuICsgaGVhZGVyX2xlbiArIFNDVV9NQVhfVU5TT0xJQ0lURURfRlJBTUVTICogc2l6ZW9mKHVmX2NvbnRyb2wtPmFkZHJlc3NfdGFibGUuYXJyYXlbMF0pOwogCiAJLyoKIAkgKiBUaGUgVW5zb2xpY2l0ZWQgRnJhbWUgYnVmZmVycyBhcmUgc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgVUYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NpL3Vuc29saWNpdGVkX2ZyYW1lX2NvbnRyb2wuaCBiL2RyaXZlcnMvc2NzaS9pc2NpL3Vuc29saWNpdGVkX2ZyYW1lX2NvbnRyb2wuaAppbmRleCAzMWNiOTUwLi43NWQ4OTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjaS91bnNvbGljaXRlZF9mcmFtZV9jb250cm9sLmgKKysrIGIvZHJpdmVycy9zY3NpL2lzY2kvdW5zb2xpY2l0ZWRfZnJhbWVfY29udHJvbC5oCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkgKiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBVRiBhZGRyZXNzIHRhYmxlLgogCSAqIDY0LWJpdCBwb2ludGVycyBhcmUgcmVxdWlyZWQgYnkgdGhlIGhhcmR3YXJlLgogCSAqLwotCWRtYV9hZGRyX3QgKmFycmF5OworCXU2NCAqYXJyYXk7CiAKIAkvKioKIAkgKiBUaGlzIGZpZWxkIHNwZWNpZmllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBsb2NhdGlvbiBmb3IgdGhlIFVGCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwppbmRleCBmNWEwNjY1Li5kMjYxZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKQEAgLTQ5NCw2ICs0OTQsOSBAQAogCSAqLwogCWVycm9yID0gbHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKTsKIAorCWlmIChmaC0+ZmhfdHlwZSA9PSBGQ19UWVBFX0JMUykKKwkJcmV0dXJuIGVycm9yOworCiAJLyoKIAkgKiBVcGRhdGUgdGhlIGV4Y2hhbmdlIGFuZCBzZXF1ZW5jZSBmbGFncywKIAkgKiBhc3N1bWluZyBhbGwgZnJhbWVzIGZvciB0aGUgc2VxdWVuY2UgaGF2ZSBiZWVuIHNlbnQuCkBAIC01NzUsNDIgKzU3OCwzNSBAQAogfQogCiAvKioKLSAqIGZjX3NlcV9leGNoX2Fib3J0KCkgLSBBYm9ydCBhbiBleGNoYW5nZSBhbmQgc2VxdWVuY2UKLSAqIEByZXFfc3A6CVRoZSBzZXF1ZW5jZSB0byBiZSBhYm9ydGVkCisgKiBmY19leGNoX2Fib3J0X2xvY2tlZCgpIC0gQWJvcnQgYW4gZXhjaGFuZ2UKKyAqIEBlcDoJVGhlIGV4Y2hhbmdlIHRvIGJlIGFib3J0ZWQKICAqIEB0aW1lcl9tc2VjOiBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgYWJvcnRpbmcKICAqCi0gKiBHZW5lcmFsbHkgY2FsbGVkIGJlY2F1c2Ugb2YgYSB0aW1lb3V0IG9yIGFuIGFib3J0IGZyb20gdGhlIHVwcGVyIGxheWVyLgorICogTG9ja2luZyBub3RlczogIENhbGxlZCB3aXRoIGV4Y2ggbG9jayBoZWxkCisgKgorICogUmV0dXJuIHZhbHVlOiAwIG9uIHN1Y2Nlc3MgZWxzZSBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgZmNfc2VxX2V4Y2hfYWJvcnQoY29uc3Qgc3RydWN0IGZjX3NlcSAqcmVxX3NwLAotCQkJICAgICB1bnNpZ25lZCBpbnQgdGltZXJfbXNlYykKK3N0YXRpYyBpbnQgZmNfZXhjaF9hYm9ydF9sb2NrZWQoc3RydWN0IGZjX2V4Y2ggKmVwLAorCQkJCXVuc2lnbmVkIGludCB0aW1lcl9tc2VjKQogewogCXN0cnVjdCBmY19zZXEgKnNwOwotCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCWludCBlcnJvcjsKIAotCWVwID0gZmNfc2VxX2V4Y2gocmVxX3NwKTsKLQotCXNwaW5fbG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmIChlcC0+ZXNiX3N0YXQgJiAoRVNCX1NUX0NPTVBMRVRFIHwgRVNCX1NUX0FCTk9STUFMKSB8fAotCSAgICBlcC0+c3RhdGUgJiAoRkNfRVhfRE9ORSB8IEZDX0VYX1JTVF9DTEVBTlVQKSkgewotCQlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOworCSAgICBlcC0+c3RhdGUgJiAoRkNfRVhfRE9ORSB8IEZDX0VYX1JTVF9DTEVBTlVQKSkKIAkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKIAkvKgogCSAqIFNlbmQgdGhlIGFib3J0IG9uIGEgbmV3IHNlcXVlbmNlIGlmIHBvc3NpYmxlLgogCSAqLwogCXNwID0gZmNfc2VxX3N0YXJ0X25leHRfbG9ja2VkKCZlcC0+c2VxKTsKLQlpZiAoIXNwKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CisJaWYgKCFzcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJZXAtPmVzYl9zdGF0IHw9IEVTQl9TVF9TRVFfSU5JVCB8IEVTQl9TVF9BQk5PUk1BTDsKIAlpZiAodGltZXJfbXNlYykKIAkJZmNfZXhjaF90aW1lcl9zZXRfbG9ja2VkKGVwLCB0aW1lcl9tc2VjKTsKLQlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCiAJLyoKIAkgKiBJZiBub3QgbG9nZ2VkIGludG8gdGhlIGZhYnJpYywgZG9uJ3Qgc2VuZCBBQlRTIGJ1dCBsZWF2ZQpAQCAtNjMzLDYgKzYyOSwyOCBAQAogfQogCiAvKioKKyAqIGZjX3NlcV9leGNoX2Fib3J0KCkgLSBBYm9ydCBhbiBleGNoYW5nZSBhbmQgc2VxdWVuY2UKKyAqIEByZXFfc3A6CVRoZSBzZXF1ZW5jZSB0byBiZSBhYm9ydGVkCisgKiBAdGltZXJfbXNlYzogVGhlIHBlcmlvZCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGFib3J0aW5nCisgKgorICogR2VuZXJhbGx5IGNhbGxlZCBiZWNhdXNlIG9mIGEgdGltZW91dCBvciBhbiBhYm9ydCBmcm9tIHRoZSB1cHBlciBsYXllci4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IDAgb24gc3VjY2VzcyBlbHNlIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBmY19zZXFfZXhjaF9hYm9ydChjb25zdCBzdHJ1Y3QgZmNfc2VxICpyZXFfc3AsCisJCQkgICAgIHVuc2lnbmVkIGludCB0aW1lcl9tc2VjKQoreworCXN0cnVjdCBmY19leGNoICplcDsKKwlpbnQgZXJyb3I7CisKKwllcCA9IGZjX3NlcV9leGNoKHJlcV9zcCk7CisJc3Bpbl9sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CisJZXJyb3IgPSBmY19leGNoX2Fib3J0X2xvY2tlZChlcCwgdGltZXJfbXNlYyk7CisJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgogICogZmNfZXhjaF90aW1lb3V0KCkgLSBIYW5kbGUgZXhjaGFuZ2UgdGltZXIgZXhwaXJhdGlvbgogICogQHdvcms6IFRoZSB3b3JrX3N0cnVjdCBpZGVudGlmeWluZyB0aGUgZXhjaGFuZ2UgdGhhdCB0aW1lZCBvdXQKICAqLwpAQCAtODAyLDEwICs4MjAsOCBAQAogCQlwb29sID0gcGVyX2NwdV9wdHIobXAtPnBvb2wsIHhpZCAmIGZjX2NwdV9tYXNrKTsKIAkJc3Bpbl9sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAkJZXAgPSBmY19leGNoX3B0cl9nZXQocG9vbCwgKHhpZCAtIG1wLT5taW5feGlkKSA+PiBmY19jcHVfb3JkZXIpOwotCQlpZiAoZXApIHsKKwkJaWYgKGVwICYmIGVwLT54aWQgPT0geGlkKQogCQkJZmNfZXhjaF9ob2xkKGVwKTsKLQkJCVdBUk5fT04oZXAtPnhpZCAhPSB4aWQpOwotCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAl9CiAJcmV0dXJuIGVwOwpAQCAtMTcxNyw2ICsxNzMzLDcgQEAKIAlpbnQgcmMgPSAxOwogCiAJc3Bpbl9sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CisJZmNfZXhjaF9hYm9ydF9sb2NrZWQoZXAsIDApOwogCWVwLT5zdGF0ZSB8PSBGQ19FWF9SU1RfQ0xFQU5VUDsKIAlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmZXAtPnRpbWVvdXRfd29yaykpCiAJCWF0b21pY19kZWMoJmVwLT5leF9yZWZjbnQpOwkvKiBkcm9wIGhvbGQgZm9yIHRpbWVyICovCkBAIC0xOTY0LDYgKzE5ODEsNyBAQAogCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfc2VxICpzcCA9IE5VTEw7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CisJc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCA9IE5VTEw7CiAJaW50IHJjID0gMTsKIAogCWVwID0gZmNfZXhjaF9hbGxvYyhscG9ydCwgZnApOwpAQCAtMTk4Niw4ICsyMDA0LDEwIEBACiAJZmNfZXhjaF9zZXR1cF9oZHIoZXAsIGZwLCBlcC0+Zl9jdGwpOwogCXNwLT5jbnQrKzsKIAotCWlmIChlcC0+eGlkIDw9IGxwb3J0LT5scm9feGlkICYmIGZoLT5maF9yX2N0bCA9PSBGQ19SQ1RMX0REX1VOU09MX0NNRCkKKwlpZiAoZXAtPnhpZCA8PSBscG9ydC0+bHJvX3hpZCAmJiBmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9ERF9VTlNPTF9DTUQpIHsKKwkJZnNwID0gZnJfZnNwKGZwKTsKIAkJZmNfZmNwX2RkcF9zZXR1cChmcl9mc3AoZnApLCBlcC0+eGlkKTsKKwl9CiAKIAlpZiAodW5saWtlbHkobHBvcnQtPnR0LmZyYW1lX3NlbmQobHBvcnQsIGZwKSkpCiAJCWdvdG8gZXJyOwpAQCAtMjAwMSw3ICsyMDIxLDggQEAKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCXJldHVybiBzcDsKIGVycjoKLQlmY19mY3BfZGRwX2RvbmUoZnJfZnNwKGZwKSk7CisJaWYgKGZzcCkKKwkJZmNfZmNwX2RkcF9kb25lKGZzcCk7CiAJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmICghcmMpCkBAIC0yNDY1LDggKzI0ODYsMTEgQEAKIAogCWZjX2V4Y2hfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImZjX2V4Y2hfd29ya3F1ZXVlIik7CiAJaWYgKCFmY19leGNoX3dvcmtxdWV1ZSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gZXJyOwogCXJldHVybiAwOworZXJyOgorCWttZW1fY2FjaGVfZGVzdHJveShmY19lbV9jYWNoZXApOworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwppbmRleCA5Y2QyMTQ5Li40YzQxZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAkJCXN0YXRzID0gcGVyX2NwdV9wdHIobHBvcnQtPmRldl9zdGF0cywgZ2V0X2NwdSgpKTsKIAkJCXN0YXRzLT5FcnJvckZyYW1lcysrOwogCQkJLyogcGVyIGNwdSBjb3VudCwgbm90IHRvdGFsIGNvdW50LCBidXQgT0sgZm9yIGxpbWl0ICovCi0JCQlpZiAoc3RhdHMtPkludmFsaWRDUkNDb3VudCsrIDwgNSkKKwkJCWlmIChzdGF0cy0+SW52YWxpZENSQ0NvdW50KysgPCBGQ19NQVhfRVJST1JfQ05UKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImxpYmZjOiBDUkMgZXJyb3Igb24gZGF0YSAiCiAJCQkJICAgICAgICJmcmFtZSBmb3IgcG9ydCAoJTYuNngpXG4iLAogCQkJCSAgICAgICBscG9ydC0+cG9ydF9pZCk7CkBAIC02OTAsNyArNjkwLDcgQEAKIH0KIAogLyoqCi0gKiBmY19mY3BfYWJ0c19yZXNwKCkgLSBTZW5kIGFuIEFCVFMgcmVzcG9uc2UKKyAqIGZjX2ZjcF9hYnRzX3Jlc3AoKSAtIFJlY2VpdmUgYW4gQUJUUyByZXNwb25zZQogICogQGZzcDogVGhlIEZDUCBwYWNrZXQgdGhhdCBpcyBiZWluZyBhYm9ydGVkCiAgKiBAZnA6CSBUaGUgcmVzcG9uc2UgZnJhbWUKICAqLwpAQCAtNzMwLDcgKzczMCw3IEBACiB9CiAKIC8qKgotICogZmNfZmNwX3JlY3YoKSAtIFJldmVpdmUgYW4gRkNQIGZyYW1lCisgKiBmY19mY3BfcmVjdigpIC0gUmVjZWl2ZSBhbiBGQ1AgZnJhbWUKICAqIEBzZXE6IFRoZSBzZXF1ZW5jZSB0aGUgZnJhbWUgaXMgb24KICAqIEBmcDoJIFRoZSByZWNlaXZlZCBmcmFtZQogICogQGFyZzogVGhlIHJlbGF0ZWQgRkNQIHBhY2tldApAQCAtMTA4NCw2ICsxMDg0LDcgQEAKIAlyYyA9IGxwb3J0LT50dC5mY3BfY21kX3NlbmQobHBvcnQsIGZzcCwgZmNfZmNwX3JlY3YpOwogCWlmICh1bmxpa2VseShyYykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNpLT5zY3NpX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJZnNwLT5jbWQtPlNDcC5wdHIgPSBOVUxMOwogCQlsaXN0X2RlbCgmZnNwLT5saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ktPnNjc2lfcXVldWVfbG9jaywgZmxhZ3MpOwogCX0KQEAgLTE2NDUsMTIgKzE2NDYsMTAgQEAKIAlzdHJ1Y3QgZmNfc2VxICpzZXE7CiAJc3RydWN0IGZjcF9zcnIgKnNycjsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXU4IGNkYl9vcDsKIAl1bnNpZ25lZCBpbnQgcmVjX3RvdjsKIAogCXJwb3J0ID0gZnNwLT5ycG9ydDsKIAlycHJpdiA9IHJwb3J0LT5kZF9kYXRhOwotCWNkYl9vcCA9IGZzcC0+Y2RiX2NtZC5mY19jZGJbMF07CiAKIAlpZiAoIShycHJpdi0+ZmxhZ3MgJiBGQ19SUF9GTEFHU19SRVRSWSkgfHwKIAkgICAgcnByaXYtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1JFQURZKQpAQCAtMjAyMCw2ICsyMDE5LDExIEBACiAJc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAqc2k7CiAJaW50IHJjID0gRkFJTEVEOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJ2YWw7CisKKwlydmFsID0gZmNfYmxvY2tfc2NzaV9laChzY19jbWQpOworCWlmIChydmFsKQorCQlyZXR1cm4gcnZhbDsKIAogCWxwb3J0ID0gc2hvc3RfcHJpdihzY19jbWQtPmRldmljZS0+aG9zdCk7CiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SRUFEWSkKQEAgLTIwNjksOSArMjA3Myw5IEBACiAJaW50IHJjID0gRkFJTEVEOwogCWludCBydmFsOwogCi0JcnZhbCA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKKwlydmFsID0gZmNfYmxvY2tfc2NzaV9laChzY19jbWQpOwogCWlmIChydmFsKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIHJ2YWw7CiAKIAlscG9ydCA9IHNob3N0X3ByaXYoc2NfY21kLT5kZXZpY2UtPmhvc3QpOwogCkBAIC0yMTE3LDYgKzIxMjEsOCBAQAogCiAJRkNfU0NTSV9EQkcobHBvcnQsICJSZXNldHRpbmcgaG9zdFxuIik7CiAKKwlmY19ibG9ja19zY3NpX2VoKHNjX2NtZCk7CisKIAlscG9ydC0+dHQubHBvcnRfcmVzZXQobHBvcnQpOwogCXdhaXRfdG1vID0gamlmZmllcyArIEZDX0hPU1RfUkVTRVRfVElNRU9VVDsKIAl3aGlsZSAoIWZjX2ZjcF9scG9ydF9xdWV1ZV9yZWFkeShscG9ydCkgJiYgdGltZV9iZWZvcmUoamlmZmllcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggZTAwOGIxNi4uNjI4ZjM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTg4LDYgKzg4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKQEAgLTEwMjksOCArMTAzMCwxNiBAQAogCQkJICAgRkNIX0VWVF9MSVBSRVNFVCwgMCk7CiAJZmNfdnBvcnRzX2xpbmtjaGFuZ2UobHBvcnQpOwogCWZjX2xwb3J0X3Jlc2V0X2xvY2tlZChscG9ydCk7Ci0JaWYgKGxwb3J0LT5saW5rX3VwKQorCWlmIChscG9ydC0+bGlua191cCkgeworCQkvKgorCQkgKiBXYWl0IHVwdG8gcmVzb3VyY2UgYWxsb2NhdGlvbiB0aW1lIG91dCBiZWZvcmUKKwkJICogZG9pbmcgcmUtbG9naW4gc2luY2UgaW5jb21wbGV0ZSBGSVAgZXhjaGFuZ2VkCisJCSAqIGZyb20gbGFzdCBzZXNzaW9uIG1heSBjb2xsaWRlIHdpdGggZXhjaGFuZ2VzCisJCSAqIGluIG5ldyBzZXNzaW9uLgorCQkgKi8KKwkJbXNsZWVwKGxwb3J0LT5yX2FfdG92KTsKIAkJZmNfbHBvcnRfZW50ZXJfZmxvZ2kobHBvcnQpOworCX0KIH0KIAogLyoqCkBAIC0xMzUyLDcgKzEzNjEsNiBAQAogCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAljYXNlIExQT1JUX1NUX1JFQURZOgotCQlXQVJOX09OKDEpOwogCQlicmVhazsKIAljYXNlIExQT1JUX1NUX1JFU0VUOgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCmluZGV4IDg3NGUyOWQuLmY4NDA4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYwpAQCAtODQ5LDYgKzg0OSw5IEBACiAKIAlyZXMgPSBzYXNfZGlzY292ZXJfZXhwYW5kZXIoY2hpbGQpOwogCWlmIChyZXMpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGFyZW50LT5wb3J0LT5kZXZfbGlzdF9sb2NrKTsKKwkJbGlzdF9kZWwoJmNoaWxkLT5kZXZfbGlzdF9ub2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwYXJlbnQtPnBvcnQtPmRldl9saXN0X2xvY2spOwogCQlrZnJlZShjaGlsZCk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCA4ZWMyYzg2Li5jMDg4YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCkBAIC0yMCw2ICsyMCwxMSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmICFkZWZpbmVkKENPTkZJR19TQ1NJX0xQRkNfREVCVUdfRlMpCisjZGVmaW5lIENPTkZJR19TQ1NJX0xQRkNfREVCVUdfRlMKKyNlbmRpZgorCiBzdHJ1Y3QgbHBmY19zbGkyX3NsaW07CiAKICNkZWZpbmUgTFBGQ19QQ0lfREVWX0xQCQkweDEKQEAgLTQ2NSw5ICs0NzAsMTAgQEAKIHN0cnVjdCB1bnNvbF9yY3ZfY3RfY3R4IHsKIAl1aW50MzJfdCBjdHh0X2lkOwogCXVpbnQzMl90IFNJRDsKLQl1aW50MzJfdCBveGlkOwogCXVpbnQzMl90IGZsYWdzOwogI2RlZmluZSBVTlNPTF9WQUxJRAkweDAwMDAwMDAxCisJdWludDE2X3Qgb3hpZDsKKwl1aW50MTZfdCByeGlkOwogfTsKIAogI2RlZmluZSBMUEZDX1VTRVJfTElOS19TUEVFRF9BVVRPCTAJLyogYXV0byBzZWxlY3QgKGRlZmF1bHQpKi8KQEAgLTY3NCw2ICs2ODAsOSBAQAogCXVpbnQzMl90IGNmZ19lbmFibGVfcnJxOwogCXVpbnQzMl90IGNmZ190b3BvbG9neTsKIAl1aW50MzJfdCBjZmdfbGlua19zcGVlZDsKKyNkZWZpbmUgTFBGQ19GQ0ZfRk9WIDEJCS8qIEZhc3QgZmNmIGZhaWxvdmVyICovCisjZGVmaW5lIExQRkNfRkNGX1BSSU9SSVRZIDIJLyogUHJpb3JpdHkgZmNmIGZhaWxvdmVyICovCisJdWludDMyX3QgY2ZnX2ZjZl9mYWlsb3Zlcl9wb2xpY3k7CiAJdWludDMyX3QgY2ZnX2NyX2RlbGF5OwogCXVpbnQzMl90IGNmZ19jcl9jb3VudDsKIAl1aW50MzJfdCBjZmdfbXVsdGlfcmluZ19zdXBwb3J0OwpAQCAtODQ1LDkgKzg1NCwxMyBAQAogCS8qIGlEaWFnIGRlYnVnZnMgc3ViLWRpcmVjdG9yeSAqLwogCXN0cnVjdCBkZW50cnkgKmlkaWFnX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeSAqaWRpYWdfcGNpX2NmZzsKKwlzdHJ1Y3QgZGVudHJ5ICppZGlhZ19iYXJfYWNjOwogCXN0cnVjdCBkZW50cnkgKmlkaWFnX3F1ZV9pbmZvOwogCXN0cnVjdCBkZW50cnkgKmlkaWFnX3F1ZV9hY2M7CiAJc3RydWN0IGRlbnRyeSAqaWRpYWdfZHJiX2FjYzsKKwlzdHJ1Y3QgZGVudHJ5ICppZGlhZ19jdGxfYWNjOworCXN0cnVjdCBkZW50cnkgKmlkaWFnX21ieF9hY2M7CisJc3RydWN0IGRlbnRyeSAqaWRpYWdfZXh0X2FjYzsKICNlbmRpZgogCiAJLyogVXNlZCBmb3IgZGVmZXJyZWQgZnJlZWluZyBvZiBFTFMgZGF0YSBidWZmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDEzNWE1M2IuLjI1NDJmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC03NTUsNiArNzU1LDQ3IEBACiB9CiAKIC8qKgorICogbHBmY19zbGk0X3BkZXZfc3RhdHVzX3JlZ193YWl0IC0gV2FpdCBmb3IgcGRldiBzdGF0dXMgcmVnaXN0ZXIgZm9yIHJlYWR5bmVzcworICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBTTEk0IGludGVyZmFjZSB0eXBlLTIgZGV2aWNlIHRvIHdhaXQgb24gdGhlIHNsaXBvcnQgc3RhdHVzIHJlZ2lzdGVyIGZvcgorICogdGhlIHJlYWR5bmVzcyBhZnRlciBwZXJmb3JtaW5nIGEgZmlybXdhcmUgcmVzZXQuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gZm9yIHN1Y2Nlc3MKKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfc2xpNF9wZGV2X3N0YXR1c19yZWdfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfcmVnaXN0ZXIgcG9ydHN0YXRfcmVnOworCWludCBpOworCisKKwlscGZjX3JlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuU1RBVFVTcmVnYWRkciwKKwkJICAgJnBvcnRzdGF0X3JlZy53b3JkMCk7CisKKwkvKiB3YWl0IGZvciB0aGUgU0xJIHBvcnQgZmlybXdhcmUgcmVhZHkgYWZ0ZXIgZmlybXdhcmUgcmVzZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTFBGQ19GV19SRVNFVF9NQVhJTVVNX1dBSVRfMTBNU19DTlQ7IGkrKykgeworCQltc2xlZXAoMTApOworCQlscGZjX3JlYWRsKHBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuU1RBVFVTcmVnYWRkciwKKwkJCSAgICZwb3J0c3RhdF9yZWcud29yZDApOworCQlpZiAoIWJmX2dldChscGZjX3NsaXBvcnRfc3RhdHVzX2VyciwgJnBvcnRzdGF0X3JlZykpCisJCQljb250aW51ZTsKKwkJaWYgKCFiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19ybiwgJnBvcnRzdGF0X3JlZykpCisJCQljb250aW51ZTsKKwkJaWYgKCFiZl9nZXQobHBmY19zbGlwb3J0X3N0YXR1c19yZHksICZwb3J0c3RhdF9yZWcpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKworCWlmIChpIDwgTFBGQ19GV19SRVNFVF9NQVhJTVVNX1dBSVRfMTBNU19DTlQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKy8qKgogICogbHBmY19zbGk0X3BkZXZfcmVnX3JlcXVlc3QgLSBSZXF1ZXN0IHBoeXNpY2FsIGRldiB0byBwZXJmb3JtIGEgcmVnaXN0ZXIgYWNjCiAgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KICAqCkBAIC03NjksNiArODEwLDcgQEAKIGxwZmNfc2xpNF9wZGV2X3JlZ19yZXF1ZXN0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3Qgb3Bjb2RlKQogewogCXN0cnVjdCBjb21wbGV0aW9uIG9ubGluZV9jb21wbDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBoYmEtPnBjaWRldjsKIAl1aW50MzJfdCByZWdfdmFsOwogCWludCBzdGF0dXMgPSAwOwogCWludCByYzsKQEAgLTc4MSw2ICs4MjMsMTQgQEAKIAkgICAgIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8yKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWlmICghcGRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogRGlzYWJsZSBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbnMgaWYgZW5hYmxlZCAqLworCWlmIChwaGJhLT5jZmdfc3Jpb3ZfbnJfdmlydGZuKSB7CisJCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOworCQlwaGJhLT5jZmdfc3Jpb3ZfbnJfdmlydGZuID0gMDsKKwl9CiAJc3RhdHVzID0gbHBmY19kb19vZmZsaW5lKHBoYmEsIExQRkNfRVZUX09GRkxJTkUpOwogCiAJaWYgKHN0YXR1cyAhPSAwKQpAQCAtODA1LDcgKzg1NSwxMCBAQAogCXJlYWRsKHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfQ1RMX1BERVZfQ1RMX09GRlNFVCk7CiAKIAkvKiBkZWxheSBkcml2ZXIgYWN0aW9uIGZvbGxvd2luZyBJRl9UWVBFXzIgcmVzZXQgKi8KLQltc2xlZXAoMTAwKTsKKwlyYyA9IGxwZmNfc2xpNF9wZGV2X3N0YXR1c19yZWdfd2FpdChwaGJhKTsKKworCWlmIChyYykKKwkJcmV0dXJuIC1FSU87CiAKIAlpbml0X2NvbXBsZXRpb24oJm9ubGluZV9jb21wbCk7CiAJcmMgPSBscGZjX3dvcmtxX3Bvc3RfZXZlbnQocGhiYSwgJnN0YXR1cywgJm9ubGluZV9jb21wbCwKQEAgLTg5NSw2ICs5NDgsMTAgQEAKIAogCWlmICghcGhiYS0+Y2ZnX2VuYWJsZV9oYmFfcmVzZXQpCiAJCXJldHVybiAtRUFDQ0VTOworCisJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAorCQkiMzA1MCBscGZjX2JvYXJkX21vZGUgc2V0IHRvICVzXG4iLCBidWYpOworCiAJaW5pdF9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOwogCiAJaWYoc3RybmNtcChidWYsICJvbmxpbmUiLCBzaXplb2YoIm9ubGluZSIpIC0gMSkgPT0gMCkgewpAQCAtMTI5MCw2ICsxMzQ3LDEwIEBACiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKIAkJdmFsID0gMDsKIAorCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJIjMwNTEgbHBmY19wb2xsIGNoYW5nZWQgZnJvbSAlZCB0byAlZFxuIiwKKwkJcGhiYS0+Y2ZnX3BvbGwsIHZhbCk7CisKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCW9sZF92YWwgPSBwaGJhLT5jZmdfcG9sbDsKQEAgLTE0MTQsODAgKzE0NzUsMTAgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBoYmEtPnBjaWRldjsKLQl1bmlvbiAgbHBmY19zbGk0X2NmZ19zaGRyICpzaGRyOwotCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7Ci0JTFBGQ19NQk9YUV90ICptYm94cTsKLQlzdHJ1Y3QgbHBmY19tYnhfZ2V0X3Byb2ZfY2ZnICpnZXRfcHJvZl9jZmc7Ci0Jc3RydWN0IGxwZmNfcnNyY19kZXNjX3BjaWUgKmRlc2M7Ci0JdWludDMyX3QgbWF4X25yX3ZpcnRmbjsKLQl1aW50MzJfdCBkZXNjX2NvdW50OwotCWludCBsZW5ndGgsIHJjLCBpOworCXVpbnQxNl90IG1heF9ucl92aXJ0Zm47CiAKLQlpZiAoKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSB8fAotCSAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfaWZfdHlwZSwgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSAhPQotCSAgICAgTFBGQ19TTElfSU5URl9JRl9UWVBFXzIpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKCFwZGV2LT5pc19waHlzZm4pCi0JCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCAwKTsKLQotCW1ib3hxID0gKExQRkNfTUJPWFFfdCAqKW1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtYm94cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZpcnRmbiBzdXBwb3J0IGJ5IHBoeXNmbiAqLwotCWxlbmd0aCA9IChzaXplb2Yoc3RydWN0IGxwZmNfbWJ4X2dldF9wcm9mX2NmZykgLQotCQkgIHNpemVvZihzdHJ1Y3QgbHBmY19zbGk0X2NmZ19taGRyKSk7Ci0JbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94cSwgTFBGQ19NQk9YX1NVQlNZU1RFTV9DT01NT04sCi0JCQkgTFBGQ19NQk9YX09QQ09ERV9HRVRfUFJPRklMRV9DT05GSUcsCi0JCQkgbGVuZ3RoLCBMUEZDX1NMSTRfTUJYX0VNQkVEKTsKLQlzaGRyID0gKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkciAqKQotCQkmbWJveHEtPnUubXFlLnVuLnNsaTRfY29uZmlnLmhlYWRlci5jZmdfc2hkcjsKLQliZl9zZXQobHBmY19tYm94X2hkcl9wZl9udW0sICZzaGRyLT5yZXF1ZXN0LAotCSAgICAgICBwaGJhLT5zbGk0X2hiYS5pb3YucGZfbnVtYmVyICsgMSk7Ci0KLQlnZXRfcHJvZl9jZmcgPSAmbWJveHEtPnUubXFlLnVuLmdldF9wcm9mX2NmZzsKLQliZl9zZXQobHBmY19tYnhfZ2V0X3Byb2ZfY2ZnX3Byb2ZfdHAsICZnZXRfcHJvZl9jZmctPnUucmVxdWVzdCwKLQkgICAgICAgTFBGQ19DRkdfVFlQRV9DVVJSRU5UX0FDVElWRSk7Ci0KLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94cSwKLQkJCQlscGZjX21ib3hfdG1vX3ZhbChwaGJhLCBNQlhfU0xJNF9DT05GSUcpKTsKLQotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkgewotCQkvKiBjaGVjayByZXR1cm4gc3RhdHVzICovCi0JCXNoZHJfc3RhdHVzID0gYmZfZ2V0KGxwZmNfbWJveF9oZHJfc3RhdHVzLCAmc2hkci0+cmVzcG9uc2UpOwotCQlzaGRyX2FkZF9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9hZGRfc3RhdHVzLAotCQkJCQkgJnNoZHItPnJlc3BvbnNlKTsKLQkJaWYgKHNoZHJfc3RhdHVzIHx8IHNoZHJfYWRkX3N0YXR1cyB8fCByYykKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCi0JfSBlbHNlCi0JCWdvdG8gZXJyb3Jfb3V0OwotCi0JZGVzY19jb3VudCA9IGdldF9wcm9mX2NmZy0+dS5yZXNwb25zZS5wcm9mX2NmZy5yc3JjX2Rlc2NfY291bnQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTFBGQ19SU1JDX0RFU0NfTUFYX05VTTsgaSsrKSB7Ci0JCWRlc2MgPSAoc3RydWN0IGxwZmNfcnNyY19kZXNjX3BjaWUgKikKLQkJCSZnZXRfcHJvZl9jZmctPnUucmVzcG9uc2UucHJvZl9jZmcuZGVzY1tpXTsKLQkJaWYgKExQRkNfUlNSQ19ERVNDX1RZUEVfUENJRSA9PQotCQkgICAgYmZfZ2V0KGxwZmNfcnNyY19kZXNjX3BjaWVfdHlwZSwgZGVzYykpIHsKLQkJCW1heF9ucl92aXJ0Zm4gPSBiZl9nZXQobHBmY19yc3JjX2Rlc2NfcGNpZV9ucl92aXJ0Zm4sCi0JCQkJCSAgICAgICBkZXNjKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGkgPCBMUEZDX1JTUkNfREVTQ19NQVhfTlVNKSB7Ci0JCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBtYXhfbnJfdmlydGZuKTsKLQl9Ci0KLWVycm9yX291dDoKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JcmV0dXJuIC1FSU87CisJbWF4X25yX3ZpcnRmbiA9IGxwZmNfc2xpX3NyaW92X25yX3ZpcnRmbl9nZXQocGhiYSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIG1heF9ucl92aXJ0Zm4pOwogfQogCiAvKioKQEAgLTE2MDUsNiArMTU5Niw5IEBACiBscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULCBcCisJCQkiMzA1MiBscGZjXyIgI2F0dHIgIiBjaGFuZ2VkIGZyb20gJWQgdG8gJWRcbiIsIFwKKwkJCXBoYmEtPmNmZ18jI2F0dHIsIHZhbCk7IFwKIAkJcGhiYS0+Y2ZnXyMjYXR0ciA9IHZhbDtcCiAJCXJldHVybiAwO1wKIAl9XApAQCAtMTc2Miw2ICsxNzU2LDkgQEAKIGxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwgXAorCQkJIjMwNTMgbHBmY18iICNhdHRyICIgY2hhbmdlZCBmcm9tICVkIHRvICVkXG4iLCBcCisJCQl2cG9ydC0+Y2ZnXyMjYXR0ciwgdmFsKTsgXAogCQl2cG9ydC0+Y2ZnXyMjYXR0ciA9IHZhbDtcCiAJCXJldHVybiAwO1wKIAl9XApAQCAtMjE5Niw2ICsyMTkzLDkgQEAKIGxwZmNfcGFyYW1faW5pdChlbmFibGVfbnBpdiwgMSwgMCwgMSk7CiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY19lbmFibGVfbnBpdiwgU19JUlVHTywgbHBmY19lbmFibGVfbnBpdl9zaG93LCBOVUxMKTsKIAorTFBGQ19BVFRSX1IoZmNmX2ZhaWxvdmVyX3BvbGljeSwgMSwgMSwgMiwKKwkiRkNGIEZhc3QgZmFpbG92ZXI9MSBQcmlvcml0eSBmYWlsb3Zlcj0yIik7CisKIGludCBscGZjX2VuYWJsZV9ycnE7CiBtb2R1bGVfcGFyYW0obHBmY19lbmFibGVfcnJxLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhscGZjX2VuYWJsZV9ycnEsICJFbmFibGUgUlJRIGZ1bmN0aW9uYWxpdHkiKTsKQEAgLTI2NzgsNiArMjY3OCw5IEBACiAJCWlmIChub2xpcCkKIAkJCXJldHVybiBzdHJsZW4oYnVmKTsKIAorCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMzA1NCBscGZjX3RvcG9sb2d5IGNoYW5nZWQgZnJvbSAlZCB0byAlZFxuIiwKKwkJCXByZXZfdmFsLCB2YWwpOwogCQllcnIgPSBscGZjX2lzc3VlX2xpcChscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpKTsKIAkJaWYgKGVycikgewogCQkJcGhiYS0+Y2ZnX3RvcG9sb2d5ID0gcHJldl92YWw7CkBAIC0zMTAxLDYgKzMxMDQsMTAgQEAKIAlpZiAoc3NjYW5mKHZhbF9idWYsICIlaSIsICZ2YWwpICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAorCQkiMzA1NSBscGZjX2xpbmtfc3BlZWQgY2hhbmdlZCBmcm9tICVkIHRvICVkICVzXG4iLAorCQlwaGJhLT5jZmdfbGlua19zcGVlZCwgdmFsLCBub2xpcCA/ICIobm9saXApIiA6ICIobGlwKSIpOworCiAJaWYgKCgodmFsID09IExQRkNfVVNFUl9MSU5LX1NQRUVEXzFHKSAmJiAhKHBoYmEtPmxtdCAmIExNVF8xR2IpKSB8fAogCSAgICAoKHZhbCA9PSBMUEZDX1VTRVJfTElOS19TUEVFRF8yRykgJiYgIShwaGJhLT5sbXQgJiBMTVRfMkdiKSkgfHwKIAkgICAgKCh2YWwgPT0gTFBGQ19VU0VSX0xJTktfU1BFRURfNEcpICYmICEocGhiYS0+bG10ICYgTE1UXzRHYikpIHx8CkBAIC0zNjc4LDcgKzM2ODUsOSBAQAogIwktIERlZmF1bHQgd2lsbCByZXN1bHQgaW4gcmVnaXN0ZXJpbmcgY2FwYWJpbGl0aWVzIGZvciBhbGwgcHJvZmlsZXMuCiAjCiAqLwotdW5zaWduZWQgaW50IGxwZmNfcHJvdF9tYXNrID0gU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT047Cit1bnNpZ25lZCBpbnQgbHBmY19wcm90X21hc2sgPSBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTiB8CisJCQkgICAgICBTSE9TVF9ESVhfVFlQRTBfUFJPVEVDVElPTiB8CisJCQkgICAgICBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTjsKIAogbW9kdWxlX3BhcmFtKGxwZmNfcHJvdF9tYXNrLCB1aW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MobHBmY19wcm90X21hc2ssICJob3N0IHByb3RlY3Rpb24gbWFzayIpOwpAQCAtMzc2OSw2ICszNzc4LDcgQEAKIAkmZGV2X2F0dHJfbHBmY19mZG1pX29uLAogCSZkZXZfYXR0cl9scGZjX21heF9sdW5zLAogCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9ucGl2LAorCSZkZXZfYXR0cl9scGZjX2ZjZl9mYWlsb3Zlcl9wb2xpY3ksCiAJJmRldl9hdHRyX2xwZmNfZW5hYmxlX3JycSwKIAkmZGV2X2F0dHJfbnBvcnRfZXZ0X2NudCwKIAkmZGV2X2F0dHJfYm9hcmRfbW9kZSwKQEAgLTQ5ODksNiArNDk5OSw3IEBACiAJbHBmY19saW5rX3NwZWVkX2luaXQocGhiYSwgbHBmY19saW5rX3NwZWVkKTsKIAlscGZjX3BvbGxfdG1vX2luaXQocGhiYSwgbHBmY19wb2xsX3Rtbyk7CiAJbHBmY19lbmFibGVfbnBpdl9pbml0KHBoYmEsIGxwZmNfZW5hYmxlX25waXYpOworCWxwZmNfZmNmX2ZhaWxvdmVyX3BvbGljeV9pbml0KHBoYmEsIGxwZmNfZmNmX2ZhaWxvdmVyX3BvbGljeSk7CiAJbHBmY19lbmFibGVfcnJxX2luaXQocGhiYSwgbHBmY19lbmFibGVfcnJxKTsKIAlscGZjX3VzZV9tc2lfaW5pdChwaGJhLCBscGZjX3VzZV9tc2kpOwogCWxwZmNfZmNwX2ltYXhfaW5pdChwaGJhLCBscGZjX2ZjcF9pbWF4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCmluZGV4IDdmYjBiYTQuLjY3NjBjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImxwZmMuaCIKICNpbmNsdWRlICJscGZjX2xvZ21zZy5oIgogI2luY2x1ZGUgImxwZmNfY3J0bi5oIgorI2luY2x1ZGUgImxwZmNfZGVidWdmcy5oIgogI2luY2x1ZGUgImxwZmNfdnBvcnQuaCIKICNpbmNsdWRlICJscGZjX3ZlcnNpb24uaCIKIApAQCAtOTYwLDggKzk2MSwxMCBAQAogCQkJCQkJICAgIGV2dF9kYXQtPmltbWVkX2RhdF0ub3hpZCwKIAkJCQkJCXBoYmEtPmN0X2N0eFsKIAkJCQkJCSAgICBldnRfZGF0LT5pbW1lZF9kYXRdLlNJRCk7CisJCQlwaGJhLT5jdF9jdHhbZXZ0X2RhdC0+aW1tZWRfZGF0XS5yeGlkID0KKwkJCQlwaW9jYnEtPmlvY2IudWxwQ29udGV4dDsKIAkJCXBoYmEtPmN0X2N0eFtldnRfZGF0LT5pbW1lZF9kYXRdLm94aWQgPQotCQkJCQkJcGlvY2JxLT5pb2NiLnVscENvbnRleHQ7CisJCQkJcGlvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLm94X2lkOwogCQkJcGhiYS0+Y3RfY3R4W2V2dF9kYXQtPmltbWVkX2RhdF0uU0lEID0KIAkJCQlwaW9jYnEtPmlvY2IudW4ucmN2ZWxzLnJlbW90ZUlEOwogCQkJcGhiYS0+Y3RfY3R4W2V2dF9kYXQtPmltbWVkX2RhdF0uZmxhZ3MgPSBVTlNPTF9WQUxJRDsKQEAgLTEzMTIsNyArMTMxNSw4IEBACiAJCQlyYyA9IElPQ0JfRVJST1I7CiAJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OwogCQl9Ci0JCWljbWQtPnVscENvbnRleHQgPSBwaGJhLT5jdF9jdHhbdGFnXS5veGlkOworCQlpY21kLT51bHBDb250ZXh0ID0gcGhiYS0+Y3RfY3R4W3RhZ10ucnhpZDsKKwkJaWNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQgPSBwaGJhLT5jdF9jdHhbdGFnXS5veGlkOwogCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYS0+cHBvcnQsIHBoYmEtPmN0X2N0eFt0YWddLlNJRCk7CiAJCWlmICghbmRscCkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0VMUywKQEAgLTEzMzcsOSArMTM0MSw3IEBACiAJCQlnb3RvIGlzc3VlX2N0X3JzcF9leGl0OwogCQl9CiAKLQkJaWNtZC0+dW4udWxwV29yZFszXSA9IG5kbHAtPm5scF9ycGk7Ci0JCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpCi0JCQlpY21kLT51bHBDb250ZXh0ID0KKwkJaWNtZC0+dW4udWxwV29yZFszXSA9CiAJCQkJcGhiYS0+c2xpNF9oYmEucnBpX2lkc1tuZGxwLT5ubHBfcnBpXTsKIAogCQkvKiBUaGUgZXhjaGFuZ2UgaXMgZG9uZSwgbWFyayB0aGUgZW50cnkgYXMgaW52YWxpZCAqLwpAQCAtMTM1MSw4ICsxMzUzLDggQEAKIAogCS8qIFhtaXQgQ1QgcmVzcG9uc2Ugb24gZXhjaGFuZ2UgPHhpZD4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAotCQkJIjI3MjIgWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSB4JXggRGF0YTogeCV4IHgleFxuIiwKLQkJCWljbWQtPnVscENvbnRleHQsIGljbWQtPnVscElvVGFnLCBwaGJhLT5saW5rX3N0YXRlKTsKKwkJIjI3MjIgWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSB4JXggRGF0YTogeCV4IHgleCB4JXhcbiIsCisJCWljbWQtPnVscENvbnRleHQsIGljbWQtPnVscElvVGFnLCB0YWcsIHBoYmEtPmxpbmtfc3RhdGUpOwogCiAJY3Rpb2NiLT5pb2NiX2NtcGwgPSBOVUxMOwogCWN0aW9jYi0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOwpAQCAtMTQ3MSwxMyArMTQ3MywxMiBAQAogLyoqCiAgKiBscGZjX2JzZ19kaWFnX21vZGVfZW50ZXIgLSBwcm9jZXNzIHByZXBhcmluZyBpbnRvIGRldmljZSBkaWFnIGxvb3BiYWNrIG1vZGUKICAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KLSAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX01PREUKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgZHJpdmVyIGZvciBkaWFnIGxvb3BiYWNrCiAgKiBvbiBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQKLWxwZmNfYnNnX2RpYWdfbW9kZV9lbnRlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19kaWFnX21vZGVfZW50ZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwpAQCAtMTUyMSw3ICsxNTIyLDYgQEAKIC8qKgogICogbHBmY19ic2dfZGlhZ19tb2RlX2V4aXQgLSBleGl0IHByb2Nlc3MgZnJvbSBkZXZpY2UgZGlhZyBsb29wYmFjayBtb2RlCiAgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCi0gKiBAam9iOiBMUEZDX0JTR19WRU5ET1JfRElBR19NT0RFCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZHJpdmVyIGV4aXQgcHJvY2Vzc2luZyBvZiBzZXR0aW5nIHVwCiAgKiBkaWFnIGxvb3BiYWNrIG1vZGUgb24gZGV2aWNlLgpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAKIAl1aW50MzJfdCBsaW5rX2ZsYWdzOwogCXVpbnQzMl90IHRpbWVvdXQ7CiAJTFBGQ19NQk9YUV90ICpwbWJveHE7Ci0JaW50IG1ieHN0YXR1czsKKwlpbnQgbWJ4c3RhdHVzID0gTUJYX1NVQ0NFU1M7CiAJaW50IGkgPSAwOwogCWludCByYyA9IDA7CiAKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAJCWdvdG8gam9iX2Vycm9yOwogCX0KIAotCXJjID0gbHBmY19ic2dfZGlhZ19tb2RlX2VudGVyKHBoYmEsIGpvYik7CisJcmMgPSBscGZjX2JzZ19kaWFnX21vZGVfZW50ZXIocGhiYSk7CiAJaWYgKHJjKQogCQlnb3RvIGpvYl9lcnJvcjsKIApAQCAtMTc0MSw3ICsxNzQxLDcgQEAKIAl1aW50MzJfdCBsaW5rX2ZsYWdzLCB0aW1lb3V0LCByZXFfbGVuLCBhbGxvY19sZW47CiAJc3RydWN0IGxwZmNfbWJ4X3NldF9saW5rX2RpYWdfbG9vcGJhY2sgKmxpbmtfZGlhZ19sb29wYmFjazsKIAlMUEZDX01CT1hRX3QgKnBtYm94cSA9IE5VTEw7Ci0JaW50IG1ieHN0YXR1cywgaSwgcmMgPSAwOworCWludCBtYnhzdGF0dXMgPSBNQlhfU1VDQ0VTUywgaSwgcmMgPSAwOwogCiAJLyogbm8gZGF0YSB0byByZXR1cm4ganVzdCB0aGUgcmV0dXJuIGNvZGUgKi8KIAlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwpAQCAtMTc1OCw3ICsxNzU4LDcgQEAKIAkJZ290byBqb2JfZXJyb3I7CiAJfQogCi0JcmMgPSBscGZjX2JzZ19kaWFnX21vZGVfZW50ZXIocGhiYSwgam9iKTsKKwlyYyA9IGxwZmNfYnNnX2RpYWdfbW9kZV9lbnRlcihwaGJhKTsKIAlpZiAocmMpCiAJCWdvdG8gam9iX2Vycm9yOwogCkBAIC0xOTgyLDcgKzE5ODIsNyBAQAogCQlnb3RvIGpvYl9lcnJvcjsKIAl9CiAKLQlyYyA9IGxwZmNfYnNnX2RpYWdfbW9kZV9lbnRlcihwaGJhLCBqb2IpOworCXJjID0gbHBmY19ic2dfZGlhZ19tb2RlX2VudGVyKHBoYmEpOwogCWlmIChyYykKIAkJZ290byBqb2JfZXJyb3I7CiAKQEAgLTMxNzgsNiArMzE3OCwxMSBAQAogCQkJCSIoeCV4L3gleCkgY29tcGxldGUgYnNnIGpvYiBkb25lLCBic2l6ZTolZFxuIiwKIAkJCQlwaGJhLT5tYm94X2V4dF9idWZfY3R4Lm5lbWJUeXBlLAogCQkJCXBoYmEtPm1ib3hfZXh0X2J1Zl9jdHgubWJveFR5cGUsIHNpemUpOworCQlscGZjX2lkaWFnX21ieGFjY19kdW1wX2JzZ19tYm94KHBoYmEsCisJCQkJCXBoYmEtPm1ib3hfZXh0X2J1Zl9jdHgubmVtYlR5cGUsCisJCQkJCXBoYmEtPm1ib3hfZXh0X2J1Zl9jdHgubWJveFR5cGUsCisJCQkJCWRtYV9lYnVmLCBzdGFfcG9zX2FkZHIsCisJCQkJCXBoYmEtPm1ib3hfZXh0X2J1Zl9jdHgubWJ4X2RtYWJ1ZiwgMCk7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIApAQCAtMzQzMCw2ICszNDM1LDEwIEBACiAJCQkJImV4dF9idWZfY250OiVkXG4iLCBleHRfYnVmX2NudCk7CiAJfQogCisJLyogYmVmb3JlIGRtYSBkZXNjcmlwdG9yIHNldHVwICovCisJbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveChwaGJhLCBuZW1iX3RwLCBtYm94X3JkLCBkbWFfbWJveCwKKwkJCQkJc3RhX3ByZV9hZGRyLCBkbWFidWYsIGV4dF9idWZfY250KTsKKwogCS8qIHJlamVjdCBub24tZW1iZWRkZWQgbWFpbGJveCBjb21tYW5kIHdpdGggbm9uZSBleHRlcm5hbCBidWZmZXIgKi8KIAlpZiAoZXh0X2J1Zl9jbnQgPT0gMCkgewogCQlyYyA9IC1FUEVSTTsKQEAgLTM0NzcsNiArMzQ4NiwxMCBAQAogCQl9CiAJfQogCisJLyogYWZ0ZXIgZG1hIGRlc2NyaXB0b3Igc2V0dXAgKi8KKwlscGZjX2lkaWFnX21ieGFjY19kdW1wX2JzZ19tYm94KHBoYmEsIG5lbWJfdHAsIG1ib3hfcmQsIGRtYV9tYm94LAorCQkJCQlzdGFfcG9zX2FkZHIsIGRtYWJ1ZiwgZXh0X2J1Zl9jbnQpOworCiAJLyogY29uc3RydWN0IGJhc2UgZHJpdmVyIG1ib3ggY29tbWFuZCAqLwogCXBtYiA9ICZwbWJveHEtPnUubWI7CiAJcG1ieCA9ICh1aW50OF90ICopZG1hYnVmLT52aXJ0OwpAQCAtMzUxMSw3ICszNTI0LDcgQEAKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJQkRGQywKIAkJCQkiMjk0NyBJc3N1ZWQgU0xJX0NPTkZJRyBleHQtYnVmZmVyICIKIAkJCQkibWFpYm94IGNvbW1hbmQsIHJjOngleFxuIiwgcmMpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIFNMSV9DT05GSUdfSEFORExFRDsKIAl9CiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElCREZDLAogCQkJIjI5NDggRmFpbGVkIHRvIGlzc3VlIFNMSV9DT05GSUcgZXh0LWJ1ZmZlciAiCkBAIC0zNTQ5LDcgKzM1NjIsNyBAQAogCUxQRkNfTUJPWFFfdCAqcG1ib3hxID0gTlVMTDsKIAlNQUlMQk9YX3QgKnBtYjsKIAl1aW50OF90ICptYng7Ci0JaW50IHJjID0gMCwgaTsKKwlpbnQgcmMgPSBTTElfQ09ORklHX05PVF9IQU5ETEVELCBpOwogCiAJbWJveF9yZXEgPQogCSAgIChzdHJ1Y3QgZGZjX21ib3hfcmVxICopam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKQEAgLTM1OTEsMTIgKzM2MDQsMjAgQEAKIAkJCQkiZXh0X2J1Zl9jbnQ6JWRcbiIsIGV4dF9idWZfY250KTsKIAl9CiAKKwkvKiBiZWZvcmUgZG1hIGJ1ZmZlciBkZXNjcmlwdG9yIHNldHVwICovCisJbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveChwaGJhLCBuZW1iX3RwLCBtYm94X3dyLCBkbWFfbWJveCwKKwkJCQkJc3RhX3ByZV9hZGRyLCBkbWFidWYsIGV4dF9idWZfY250KTsKKwogCWlmIChleHRfYnVmX2NudCA9PSAwKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogZm9yIHRoZSBmaXJzdCBleHRlcm5hbCBidWZmZXIgKi8KIAlscGZjX2JzZ19zbGlfY2ZnX2RtYV9kZXNjX3NldHVwKHBoYmEsIG5lbWJfdHAsIDAsIGRtYWJ1ZiwgZG1hYnVmKTsKIAorCS8qIGFmdGVyIGRtYSBkZXNjcmlwdG9yIHNldHVwICovCisJbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveChwaGJhLCBuZW1iX3RwLCBtYm94X3dyLCBkbWFfbWJveCwKKwkJCQkJc3RhX3Bvc19hZGRyLCBkbWFidWYsIGV4dF9idWZfY250KTsKKwogCS8qIGxvZyBmb3IgbG9va2luZyBmb3J3YXJkICovCiAJZm9yIChpID0gMTsgaSA8IGV4dF9idWZfY250OyBpKyspIHsKIAkJaWYgKG5lbWJfdHAgPT0gbmVtYl9tc2UpCkBAIC0zNjYwLDcgKzM2ODEsNyBAQAogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJQkRGQywKIAkJCQkJIjI5NTUgSXNzdWVkIFNMSV9DT05GSUcgZXh0LWJ1ZmZlciAiCiAJCQkJCSJtYWlib3ggY29tbWFuZCwgcmM6eCV4XG4iLCByYyk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiBTTElfQ09ORklHX0hBTkRMRUQ7CiAJCX0KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElCREZDLAogCQkJCSIyOTU2IEZhaWxlZCB0byBpc3N1ZSBTTElfQ09ORklHIGV4dC1idWZmZXIgIgpAQCAtMzY2OCw2ICszNjg5LDExIEBACiAJCXJjID0gLUVQSVBFOwogCX0KIAorCS8qIHdhaXQgZm9yIGFkZGl0b2luYWwgZXh0ZXJuYWwgYnVmZmVycyAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiBTTElfQ09ORklHX0hBTkRMRUQ7CisKIGpvYl9lcnJvcjoKIAlpZiAocG1ib3hxKQogCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKQEAgLTM4NDAsNiArMzg2NiwxMiBAQAogCWRtYWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnBoYmEtPm1ib3hfZXh0X2J1Zl9jdHguZXh0X2RtYWJ1Zl9saXN0LAogCQkJCSAgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkbWFidWYtPmxpc3QpOworCisJLyogYWZ0ZXIgZG1hIGJ1ZmZlciBkZXNjcmlwdG9yIHNldHVwICovCisJbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveChwaGJhLCBwaGJhLT5tYm94X2V4dF9idWZfY3R4Lm5lbWJUeXBlLAorCQkJCQltYm94X3JkLCBkbWFfZWJ1Ziwgc3RhX3Bvc19hZGRyLAorCQkJCQlkbWFidWYsIGluZGV4KTsKKwogCXBidWYgPSAodWludDhfdCAqKWRtYWJ1Zi0+dmlydDsKIAlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQogCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LApAQCAtMzkyMiw2ICszOTU0LDExIEBACiAJCQkJCWRtYWJ1Zik7CiAJbGlzdF9hZGRfdGFpbCgmZG1hYnVmLT5saXN0LCAmcGhiYS0+bWJveF9leHRfYnVmX2N0eC5leHRfZG1hYnVmX2xpc3QpOwogCisJLyogYWZ0ZXIgd3JpdGUgZG1hIGJ1ZmZlciAqLworCWxwZmNfaWRpYWdfbWJ4YWNjX2R1bXBfYnNnX21ib3gocGhiYSwgcGhiYS0+bWJveF9leHRfYnVmX2N0eC5uZW1iVHlwZSwKKwkJCQkJbWJveF93ciwgZG1hX2VidWYsIHN0YV9wb3NfYWRkciwKKwkJCQkJZG1hYnVmLCBpbmRleCk7CisKIAlpZiAocGhiYS0+bWJveF9leHRfYnVmX2N0eC5zZXFOdW0gPT0gcGhiYS0+bWJveF9leHRfYnVmX2N0eC5udW1CdWYpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJQkRGQywKIAkJCQkiMjk2OCBTTElfQ09ORklHIGV4dC1idWZmZXIgd3IgYWxsICVkICIKQEAgLTM5NTksNyArMzk5Niw3IEBACiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTElCREZDLAogCQkJCQkiMjk2OSBJc3N1ZWQgU0xJX0NPTkZJRyBleHQtYnVmZmVyICIKIAkJCQkJIm1haWJveCBjb21tYW5kLCByYzp4JXhcbiIsIHJjKTsKLQkJCXJldHVybiAxOworCQkJcmV0dXJuIFNMSV9DT05GSUdfSEFORExFRDsKIAkJfQogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSUJERkMsCiAJCQkJIjI5NzAgRmFpbGVkIHRvIGlzc3VlIFNMSV9DT05GSUcgZXh0LWJ1ZmZlciAiCkBAIC00MDM5LDE0ICs0MDc2LDE0IEBACiAJCQkgICAgc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWYpCiB7CiAJc3RydWN0IGRmY19tYm94X3JlcSAqbWJveF9yZXE7Ci0JaW50IHJjOworCWludCByYyA9IFNMSV9DT05GSUdfTk9UX0hBTkRMRUQ7CiAKIAltYm94X3JlcSA9CiAJICAgKHN0cnVjdCBkZmNfbWJveF9yZXEgKilqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOwogCiAJLyogbWJveCBjb21tYW5kIHdpdGgvd2l0aG91dCBzaW5nbGUgZXh0ZXJuYWwgYnVmZmVyICovCiAJaWYgKG1ib3hfcmVxLT5leHRNYm94VGFnID09IDAgJiYgbWJveF9yZXEtPmV4dFNlcU51bSA9PSAwKQotCQlyZXR1cm4gU0xJX0NPTkZJR19OT1RfSEFORExFRDsKKwkJcmV0dXJuIHJjOwogCiAJLyogbWJveCBjb21tYW5kIGFuZCBmaXJzdCBleHRlcm5hbCBidWZmZXIgKi8KIAlpZiAocGhiYS0+bWJveF9leHRfYnVmX2N0eC5zdGF0ZSA9PSBMUEZDX0JTR19NQk9YX0lETEUpIHsKQEAgLTQyNDksNyArNDI4Niw3IEBACiAJCSAqIG1haWxib3ggZXh0ZW5zaW9uIHNpemUKIAkJICovCiAJCWlmICgodHJhbnNtaXRfbGVuZ3RoID4gcmVjZWl2ZV9sZW5ndGgpIHx8Ci0JCQkodHJhbnNtaXRfbGVuZ3RoID4gTUFJTEJPWF9FWFRfU0laRSkpIHsKKwkJCSh0cmFuc21pdF9sZW5ndGggPiBCU0dfTUJPWF9TSVpFIC0gc2l6ZW9mKE1BSUxCT1hfdCkpKSB7CiAJCQlyYyA9IC1FUkFOR0U7CiAJCQlnb3RvIGpvYl9kb25lOwogCQl9CkBAIC00MjcyLDcgKzQzMDksNyBAQAogCQkvKiByZWNlaXZlIGxlbmd0aCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1haWxib3gKIAkJICogZXh0ZW5zaW9uIHNpemUKIAkJICovCi0JCWlmIChyZWNlaXZlX2xlbmd0aCA+IE1BSUxCT1hfRVhUX1NJWkUpIHsKKwkJaWYgKHJlY2VpdmVfbGVuZ3RoID4gQlNHX01CT1hfU0laRSAtIHNpemVvZihNQUlMQk9YX3QpKSB7CiAJCQlyYyA9IC1FUkFOR0U7CiAJCQlnb3RvIGpvYl9kb25lOwogCQl9CkBAIC00MzA2LDcgKzQzNDMsOCBAQAogCQkJYmRlID0gKHN0cnVjdCB1bHBfYmRlNjQgKikmcG1iLT51bi52YXJXb3Jkc1s0XTsKIAogCQkJLyogYmRlIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYWlsYm94IGV4dCBzaXplICovCi0JCQlpZiAoYmRlLT50dXMuZi5iZGVTaXplID4gTUFJTEJPWF9FWFRfU0laRSkgeworCQkJaWYgKGJkZS0+dHVzLmYuYmRlU2l6ZSA+CisJCQkgICAgQlNHX01CT1hfU0laRSAtIHNpemVvZihNQUlMQk9YX3QpKSB7CiAJCQkJcmMgPSAtRVJBTkdFOwogCQkJCWdvdG8gam9iX2RvbmU7CiAJCQl9CkBAIC00MzMyLDcgKzQzNzAsOCBAQAogCQkJCSAqIG1haWxib3ggZXh0ZW5zaW9uIHNpemUKIAkJCQkgKi8KIAkJCQlpZiAoKHJlY2VpdmVfbGVuZ3RoID09IDApIHx8Ci0JCQkJICAgIChyZWNlaXZlX2xlbmd0aCA+IE1BSUxCT1hfRVhUX1NJWkUpKSB7CisJCQkJICAgIChyZWNlaXZlX2xlbmd0aCA+CisJCQkJICAgICBCU0dfTUJPWF9TSVpFIC0gc2l6ZW9mKE1BSUxCT1hfdCkpKSB7CiAJCQkJCXJjID0gLUVSQU5HRTsKIAkJCQkJZ290byBqb2JfZG9uZTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGZjMjBjMjQuLmE2ZGI2YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0yMzUsOSArMjM1LDExIEBACiB2b2lkIGxwZmNfZmNmX3JlZGlzY193YWl0X3N0YXJ0X3RpbWVyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2ZjZl9kZWFkX2ZhaWx0aHJvdWdoKHN0cnVjdCBscGZjX2hiYSAqKTsKIHVpbnQxNl90IGxwZmNfc2xpNF9mY2ZfcnJfbmV4dF9pbmRleF9nZXQoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3NsaTRfc2V0X2ZjZl9mbG9naV9mYWlsKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCk7CiBpbnQgbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9zZXQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9jbGVhcihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QpOwogaW50IGxwZmNfc2xpNF9mY2ZfcnJfbmV4dF9wcm9jKHN0cnVjdCBscGZjX3Zwb3J0ICosIHVpbnQxNl90KTsKK3ZvaWQgbHBmY19zbGk0X2NsZWFyX2ZjZl9ycl9ibWFzayhzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIGludCBscGZjX21lbV9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKiwgaW50IGFsaWduKTsKIHZvaWQgbHBmY19tZW1fZnJlZShzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0zNzEsNiArMzczLDEwIEBACiAvKiBTTEk0IGlmX3R5cGUgMiBleHRlcm5zLiAqLwogaW50IGxwZmNfc2xpNF9hbGxvY19yZXNvdXJjZV9pZGVudGlmaWVycyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGk0X2RlYWxsb2NfcmVzb3VyY2VfaWRlbnRpZmllcnMoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2xpNF9nZXRfYWxsb2NhdGVkX2V4dG50cyhzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsCisJCQkJICAgdWludDE2X3QgKiwgdWludDE2X3QgKik7CitpbnQgbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwKKwkJCQkJICB1aW50MTZfdCAqLCB1aW50MTZfdCAqKTsKIAogLyogZXh0ZXJucyBCbG9ja0d1YXJkICovCiBleHRlcm4gY2hhciAqX2R1bXBfYnVmX2RhdGE7CkBAIC00MzIsMTAgKzQzOCwxNiBAQAogaW50IGxwZmNfc2VuZF9ycnEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVfcnJxICopOwogaW50IGxwZmNfc2V0X3JycV9hY3RpdmUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCiAJdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7Cit1aW50MTZfdCBscGZjX3NsaTRfeHJpX2lucmFuZ2Uoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19jbGVhbnVwX3d0X3JycXMoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2NsZWFudXBfdnBvcnRzX3JycXMoc3RydWN0IGxwZmNfdnBvcnQgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBzdHJ1Y3QgbHBmY19ub2RlX3JycSAqbHBmY19nZXRfYWN0aXZlX3JycShzdHJ1Y3QgbHBmY192cG9ydCAqLCB1aW50MTZfdCwKIAl1aW50MzJfdCk7Cit2b2lkIGxwZmNfaWRpYWdfbWJ4YWNjX2R1bXBfYnNnX21ib3goc3RydWN0IGxwZmNfaGJhICosIGVudW0gbmVtYl90eXBlLAorCWVudW0gbWJveF90eXBlLCBlbnVtIGRtYV90eXBlLCBlbnVtIHN0YV90eXBlLAorCXN0cnVjdCBscGZjX2RtYWJ1ZiAqLCB1aW50MzJfdCk7Cit2b2lkIGxwZmNfaWRpYWdfbWJ4YWNjX2R1bXBfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKiwgTUFJTEJPWF90ICopOwogaW50IGxwZmNfd3Jfb2JqZWN0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosIHVpbnQzMl90LCB1aW50MzJfdCAqKTsKIC8qIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFNSLUlPViAqLwogaW50IGxwZmNfc2xpX3Byb2JlX3NyaW92X25yX3ZpcnRmbihzdHJ1Y3QgbHBmY19oYmEgKiwgaW50KTsKK3VpbnQxNl90IGxwZmNfc2xpX3NyaW92X25yX3ZpcnRmbl9nZXQoc3RydWN0IGxwZmNfaGJhICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwppbmRleCAzMGIyNWM1Li5hMDQyNGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgImxwZmNfdmVyc2lvbi5oIgogI2luY2x1ZGUgImxwZmNfY29tcGF0LmgiCiAjaW5jbHVkZSAibHBmY19kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAibHBmY19ic2cuaCIKIAogI2lmZGVmIENPTkZJR19TQ1NJX0xQRkNfREVCVUdfRlMKIC8qCkBAIC0xMzUsNyArMTM2LDExIEBACiAJaW50IGksIGluZGV4LCBsZW4sIGVuYWJsZTsKIAl1aW50MzJfdCBtczsKIAlzdHJ1Y3QgbHBmY19kZWJ1Z2ZzX3RyYyAqZHRwOwotCWNoYXIgYnVmZmVyW0xQRkNfREVCVUdfVFJDX0VOVFJZX1NJWkVdOworCWNoYXIgKmJ1ZmZlcjsKKworCWJ1ZmZlciA9IGttYWxsb2MoTFBGQ19ERUJVR19UUkNfRU5UUllfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAwOwogCiAJZW5hYmxlID0gbHBmY19kZWJ1Z2ZzX2VuYWJsZTsKIAlscGZjX2RlYnVnZnNfZW5hYmxlID0gMDsKQEAgLTE2Nyw2ICsxNzIsOCBAQAogCX0KIAogCWxwZmNfZGVidWdmc19lbmFibGUgPSBlbmFibGU7CisJa2ZyZWUoYnVmZmVyKTsKKwogCXJldHVybiBsZW47CiB9CiAKQEAgLTE5NSw4ICsyMDIsMTEgQEAKIAlpbnQgaSwgaW5kZXgsIGxlbiwgZW5hYmxlOwogCXVpbnQzMl90IG1zOwogCXN0cnVjdCBscGZjX2RlYnVnZnNfdHJjICpkdHA7Ci0JY2hhciBidWZmZXJbTFBGQ19ERUJVR19UUkNfRU5UUllfU0laRV07CisJY2hhciAqYnVmZmVyOwogCisJYnVmZmVyID0ga21hbGxvYyhMUEZDX0RFQlVHX1RSQ19FTlRSWV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDA7CiAKIAllbmFibGUgPSBscGZjX2RlYnVnZnNfZW5hYmxlOwogCWxwZmNfZGVidWdmc19lbmFibGUgPSAwOwpAQCAtMjI4LDYgKzIzOCw4IEBACiAJfQogCiAJbHBmY19kZWJ1Z2ZzX2VuYWJsZSA9IGVuYWJsZTsKKwlrZnJlZShidWZmZXIpOworCiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtMzc4LDcgKzM5MCwxMSBAQAogCWludCBsZW4gPSAwOwogCWludCBpLCBvZmY7CiAJdWludDMyX3QgKnB0cjsKLQljaGFyIGJ1ZmZlclsxMDI0XTsKKwljaGFyICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gMDsKIAogCW9mZiA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CkBAIC00MDcsNiArNDIzLDggQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWtmcmVlKGJ1ZmZlcik7CisKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0xMzI3LDggKzEzNDUsOCBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1BDSUNGR19SRCkgewotCQl3aGVyZSA9IGlkaWFnLmNtZC5kYXRhWzBdOwotCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhWzFdOworCQl3aGVyZSA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX1BDSUNGR19XSEVSRV9JTkRYXTsKKwkJY291bnQgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19QQ0lDRkdfQ09VTlRfSU5EWF07CiAJfSBlbHNlCiAJCXJldHVybiAwOwogCkBAIC0xMzczLDYgKzEzOTEsMTEgQEAKIAkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1BDSV9DRkdfU0laRS1sZW4sCiAJCQkJIiUwOHggIiwgdTMydmFsKTsKIAkJb2Zmc2V0ICs9IHNpemVvZih1aW50MzJfdCk7CisJCWlmIChvZmZzZXQgPj0gTFBGQ19QQ0lfQ0ZHX1NJWkUpIHsKKwkJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwKKwkJCQkJTFBGQ19QQ0lfQ0ZHX1NJWkUtbGVuLCAiXG4iKTsKKwkJCWJyZWFrOworCQl9CiAJCWluZGV4IC09IHNpemVvZih1aW50MzJfdCk7CiAJCWlmICghaW5kZXgpCiAJCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUENJX0NGR19TSVpFLWxlbiwKQEAgLTEzODUsOCArMTQwOCwxMSBAQAogCX0KIAogCS8qIFNldCB1cCB0aGUgb2Zmc2V0IGZvciBuZXh0IHBvcnRpb24gb2YgcGNpIGNmZyByZWFkICovCi0JaWRpYWcub2Zmc2V0Lmxhc3RfcmQgKz0gTFBGQ19QQ0lfQ0ZHX1JEX1NJWkU7Ci0JaWYgKGlkaWFnLm9mZnNldC5sYXN0X3JkID49IExQRkNfUENJX0NGR19TSVpFKQorCWlmIChpbmRleCA9PSAwKSB7CisJCWlkaWFnLm9mZnNldC5sYXN0X3JkICs9IExQRkNfUENJX0NGR19SRF9TSVpFOworCQlpZiAoaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPj0gTFBGQ19QQ0lfQ0ZHX1NJWkUpCisJCQlpZGlhZy5vZmZzZXQubGFzdF9yZCA9IDA7CisJfSBlbHNlCiAJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gMDsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcGJ1ZmZlciwgbGVuKTsKQEAgLTE0MzksOCArMTQ2NSw4IEBACiAJCWlmIChyYyAhPSBMUEZDX1BDSV9DRkdfUkRfQ01EX0FSRykKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQkvKiBSZWFkIGNvbW1hbmQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlLCBzZXQgdXAgY29tbWFuZCBmaWVsZHMgKi8KLQkJd2hlcmUgPSBpZGlhZy5jbWQuZGF0YVswXTsKLQkJY291bnQgPSBpZGlhZy5jbWQuZGF0YVsxXTsKKwkJd2hlcmUgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19QQ0lDRkdfV0hFUkVfSU5EWF07CisJCWNvdW50ID0gaWRpYWcuY21kLmRhdGFbSURJQUdfUENJQ0ZHX0NPVU5UX0lORFhdOwogCQlpZiAoY291bnQgPT0gTFBGQ19QQ0lfQ0ZHX0JST1dTRSkgewogCQkJaWYgKHdoZXJlICUgc2l6ZW9mKHVpbnQzMl90KSkKIAkJCQlnb3RvIGVycm9yX291dDsKQEAgLTE0NzUsOSArMTUwMSw5IEBACiAJCWlmIChyYyAhPSBMUEZDX1BDSV9DRkdfV1JfQ01EX0FSRykKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQkvKiBXcml0ZSBjb21tYW5kIHRvIFBDSSBjb25maWcgc3BhY2UsIHJlYWQtbW9kaWZ5LXdyaXRlICovCi0JCXdoZXJlID0gaWRpYWcuY21kLmRhdGFbMF07Ci0JCWNvdW50ID0gaWRpYWcuY21kLmRhdGFbMV07Ci0JCXZhbHVlID0gaWRpYWcuY21kLmRhdGFbMl07CisJCXdoZXJlID0gaWRpYWcuY21kLmRhdGFbSURJQUdfUENJQ0ZHX1dIRVJFX0lORFhdOworCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX1BDSUNGR19DT1VOVF9JTkRYXTsKKwkJdmFsdWUgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19QQ0lDRkdfVkFMVUVfSU5EWF07CiAJCS8qIFNhbml0eSBjaGVja3MgKi8KIAkJaWYgKChjb3VudCAhPSBzaXplb2YodWludDhfdCkpICYmCiAJCSAgICAoY291bnQgIT0gc2l6ZW9mKHVpbnQxNl90KSkgJiYKQEAgLTE1NzAsNiArMTU5NiwyOTIgQEAKIH0KIAogLyoqCisgKiBscGZjX2lkaWFnX2JhcmFjY19yZWFkIC0gaWRpYWcgZGVidWdmcyBwY2kgYmFyIGFjY2VzcyByZWFkCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgdG8uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBkYXRhIGZyb20gdGhlIEBwaGJhIHBjaSBiYXIgbWVtb3J5IG1hcHBlZCBzcGFjZQorICogYWNjb3JkaW5nIHRvIHRoZSBpZGlhZyBjb21tYW5kLCBhbmQgY29waWVzIHRvIHVzZXIgQGJ1Zi4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdhcyByZWFkICh0aGlzIGNvdWxkIGJlIGxlc3MKKyAqIHRoYW4gQG5ieXRlcyBpZiB0aGUgZW5kIG9mIHRoZSBmaWxlIHdhcyByZWFjaGVkKSBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfaWRpYWdfYmFyYWNjX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJCSAgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOworCWludCBvZmZzZXRfbGFiZWwsIG9mZnNldCwgb2Zmc2V0X3J1biwgbGVuID0gMCwgaW5kZXg7CisJaW50IGJhcl9udW0sIGFjY19yYW5nZSwgYmFyX3NpemU7CisJY2hhciAqcGJ1ZmZlcjsKKwl2b2lkIF9faW9tZW0gKm1lbV9tYXBwZWRfYmFyOworCXVpbnQzMl90IGlmX3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdWludDMyX3QgdTMydmFsOworCisJcGRldiA9IHBoYmEtPnBjaWRldjsKKwlpZiAoIXBkZXYpCisJCXJldHVybiAwOworCisJLyogVGhpcyBpcyBhIHVzZXIgcmVhZCBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1JEOworCisJaWYgKCFkZWJ1Zy0+YnVmZmVyKQorCQlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX1BDSV9CQVJfUkRfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJcGJ1ZmZlciA9IGRlYnVnLT5idWZmZXI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQkFSQUNDX1JEKSB7CisJCWJhcl9udW0gICA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX0JBUkFDQ19CQVJfTlVNX0lORFhdOworCQlvZmZzZXQgICAgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19CQVJBQ0NfT0ZGX1NFVF9JTkRYXTsKKwkJYWNjX3JhbmdlID0gaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0FDQ19NT0RfSU5EWF07CisJCWJhcl9zaXplID0gaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWF07CisJfSBlbHNlCisJCXJldHVybiAwOworCisJaWYgKGFjY19yYW5nZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmX3R5cGUgPSBiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpOworCWlmIChpZl90eXBlID09IExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSB7CisJCWlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMCkKKwkJCW1lbV9tYXBwZWRfYmFyID0gcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wOworCQllbHNlIGlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMSkKKwkJCW1lbV9tYXBwZWRfYmFyID0gcGhiYS0+c2xpNF9oYmEuY3RybF9yZWdzX21lbW1hcF9wOworCQllbHNlIGlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMikKKwkJCW1lbV9tYXBwZWRfYmFyID0gcGhiYS0+c2xpNF9oYmEuZHJibF9yZWdzX21lbW1hcF9wOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGlmX3R5cGUgPT0gTFBGQ19TTElfSU5URl9JRl9UWVBFXzIpIHsKKwkJaWYgKGJhcl9udW0gPT0gSURJQUdfQkFSQUNDX0JBUl8wKQorCQkJbWVtX21hcHBlZF9iYXIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3A7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMDsKKworCS8qIFJlYWQgc2luZ2xlIFBDSSBiYXIgc3BhY2UgcmVnaXN0ZXIgKi8KKwlpZiAoYWNjX3JhbmdlID09IFNJTkdMRV9XT1JEKSB7CisJCW9mZnNldF9ydW4gPSBvZmZzZXQ7CisJCXUzMnZhbCA9IHJlYWRsKG1lbV9tYXBwZWRfYmFyICsgb2Zmc2V0X3J1bik7CisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19QQ0lfQkFSX1JEX0JVRl9TSVpFLWxlbiwKKwkJCQkiJTA1eDogJTA4eFxuIiwgb2Zmc2V0X3J1biwgdTMydmFsKTsKKwl9IGVsc2UKKwkJZ290byBiYXJhY2NfYnJvd3NlOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworCitiYXJhY2NfYnJvd3NlOgorCisJLyogQnJvd3NlIGFsbCBQQ0kgYmFyIHNwYWNlIHJlZ2lzdGVycyAqLworCW9mZnNldF9sYWJlbCA9IGlkaWFnLm9mZnNldC5sYXN0X3JkOworCW9mZnNldF9ydW4gPSBvZmZzZXRfbGFiZWw7CisKKwkvKiBSZWFkIFBDSSBiYXIgbWVtb3J5IG1hcHBlZCBzcGFjZSAqLworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19QQ0lfQkFSX1JEX0JVRl9TSVpFLWxlbiwKKwkJCSIlMDV4OiAiLCBvZmZzZXRfbGFiZWwpOworCWluZGV4ID0gTFBGQ19QQ0lfQkFSX1JEX1NJWkU7CisJd2hpbGUgKGluZGV4ID4gMCkgeworCQl1MzJ2YWwgPSByZWFkbChtZW1fbWFwcGVkX2JhciArIG9mZnNldF9ydW4pOworCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUENJX0JBUl9SRF9CVUZfU0laRS1sZW4sCisJCQkJIiUwOHggIiwgdTMydmFsKTsKKwkJb2Zmc2V0X3J1biArPSBzaXplb2YodWludDMyX3QpOworCQlpZiAoYWNjX3JhbmdlID09IExQRkNfUENJX0JBUl9CUk9XU0UpIHsKKwkJCWlmIChvZmZzZXRfcnVuID49IGJhcl9zaXplKSB7CisJCQkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLAorCQkJCQlMUEZDX1BDSV9CQVJfUkRfQlVGX1NJWkUtbGVuLCAiXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvZmZzZXRfcnVuID49IG9mZnNldCArCisJCQkgICAgKGFjY19yYW5nZSAqIHNpemVvZih1aW50MzJfdCkpKSB7CisJCQkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLAorCQkJCQlMUEZDX1BDSV9CQVJfUkRfQlVGX1NJWkUtbGVuLCAiXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpbmRleCAtPSBzaXplb2YodWludDMyX3QpOworCQlpZiAoIWluZGV4KQorCQkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLAorCQkJCQlMUEZDX1BDSV9CQVJfUkRfQlVGX1NJWkUtbGVuLCAiXG4iKTsKKwkJZWxzZSBpZiAoIShpbmRleCAlICg4ICogc2l6ZW9mKHVpbnQzMl90KSkpKSB7CisJCQlvZmZzZXRfbGFiZWwgKz0gKDggKiBzaXplb2YodWludDMyX3QpKTsKKwkJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwKKwkJCQkJTFBGQ19QQ0lfQkFSX1JEX0JVRl9TSVpFLWxlbiwKKwkJCQkJIlxuJTA1eDogIiwgb2Zmc2V0X2xhYmVsKTsKKwkJfQorCX0KKworCS8qIFNldCB1cCB0aGUgb2Zmc2V0IGZvciBuZXh0IHBvcnRpb24gb2YgcGNpIGJhciByZWFkICovCisJaWYgKGluZGV4ID09IDApIHsKKwkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgKz0gTFBGQ19QQ0lfQkFSX1JEX1NJWkU7CisJCWlmIChhY2NfcmFuZ2UgPT0gTFBGQ19QQ0lfQkFSX0JST1dTRSkgeworCQkJaWYgKGlkaWFnLm9mZnNldC5sYXN0X3JkID49IGJhcl9zaXplKQorCQkJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChvZmZzZXRfcnVuID49IG9mZnNldCArCisJCQkgICAgKGFjY19yYW5nZSAqIHNpemVvZih1aW50MzJfdCkpKQorCQkJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gb2Zmc2V0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFjY19yYW5nZSA9PSBMUEZDX1BDSV9CQVJfQlJPV1NFKQorCQkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSAwOworCQllbHNlCisJCQlpZGlhZy5vZmZzZXQubGFzdF9yZCA9IG9mZnNldDsKKwl9CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIHBidWZmZXIsIGxlbik7Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19iYXJhY2Nfd3JpdGUgLSBTeW50YXggY2hlY2sgYW5kIHNldCB1cCBpZGlhZyBiYXIgYWNjZXNzIGNvbW1hbmRzCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIHVzZXIgZGF0YSBmcm9tLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byBnZXQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBkZWJ1Z2ZzIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZyb20gdXNlciBzcGFjZSBhbmQKKyAqIHRoZW4gcGVyZm9ybSB0aGUgc3ludGF4IGNoZWNrIGZvciBQQ0kgYmFyIG1lbW9yeSBtYXBwZWQgc3BhY2UgcmVhZCBvcgorICogd3JpdGUgY29tbWFuZCBhY2NvcmRpbmdseS4gSW4gdGhlIGNhc2Ugb2YgUENJIGJhciBtZW1vcnkgbWFwcGVkIHNwYWNlCisgKiByZWFkIGNvbW1hbmQsIGl0IHNldHMgdXAgdGhlIGNvbW1hbmQgaW4gdGhlIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZvcgorICogdGhlIGRlYnVnZnMgcmVhZCBvcGVyYXRpb24uIEluIHRoZSBjYXNlIG9mIFBDSSBiYXIgbWVtb3JweSBtYXBwZWQgc3BhY2UKKyAqIHdyaXRlIG9wZXJhdGlvbiwgaXQgZXhlY3V0ZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBpbnRvIHRoZSBQQ0kgYmFyIG1lbW9yeQorICogbWFwcGVkIHNwYWNlIGFjY29yZGluZ2x5LgorICoKKyAqIEl0IHJldHVybnMgdGhlIEBuYnl0Z2VzIHBhc3NpbmcgaW4gZnJvbSBkZWJ1Z2ZzIHVzZXIgc3BhY2Ugd2hlbiBzdWNjZXNzZnVsLgorICogSW4gY2FzZSBvZiBlcnJvciBjb25kaXRpb25zLCBpdCByZXR1cm5zIHByb3BlciBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIHVzZXIKKyAqIHNwYWNlLgorICovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19iYXJhY2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOworCXVpbnQzMl90IGJhcl9udW0sIGJhcl9zaXplLCBvZmZzZXQsIHZhbHVlLCBhY2NfcmFuZ2U7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdm9pZCBfX2lvbWVtICptZW1fbWFwcGVkX2JhcjsKKwl1aW50MzJfdCBpZl90eXBlOworCXVpbnQzMl90IHUzMnZhbDsKKwlpbnQgcmM7CisKKwlwZGV2ID0gcGhiYS0+cGNpZGV2OworCWlmICghcGRldikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBUaGlzIGlzIGEgdXNlciB3cml0ZSBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1dSOworCisJcmMgPSBscGZjX2lkaWFnX2NtZF9nZXQoYnVmLCBuYnl0ZXMsICZpZGlhZy5jbWQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmX3R5cGUgPSBiZl9nZXQobHBmY19zbGlfaW50Zl9pZl90eXBlLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpOworCWJhcl9udW0gPSBpZGlhZy5jbWQuZGF0YVtJRElBR19CQVJBQ0NfQkFSX05VTV9JTkRYXTsKKworCWlmIChpZl90eXBlID09IExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSB7CisJCWlmICgoYmFyX251bSAhPSBJRElBR19CQVJBQ0NfQkFSXzApICYmCisJCSAgICAoYmFyX251bSAhPSBJRElBR19CQVJBQ0NfQkFSXzEpICYmCisJCSAgICAoYmFyX251bSAhPSBJRElBR19CQVJBQ0NfQkFSXzIpKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlIGlmIChpZl90eXBlID09IExQRkNfU0xJX0lOVEZfSUZfVFlQRV8yKSB7CisJCWlmIChiYXJfbnVtICE9IElESUFHX0JBUkFDQ19CQVJfMCkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZQorCQlnb3RvIGVycm9yX291dDsKKworCWlmIChpZl90eXBlID09IExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSB7CisJCWlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMCkgeworCQkJaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWF0gPQorCQkJCUxQRkNfUENJX0lGMF9CQVIwX1NJWkU7CisJCQltZW1fbWFwcGVkX2JhciA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcDsKKwkJfSBlbHNlIGlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMSkgeworCQkJaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWF0gPQorCQkJCUxQRkNfUENJX0lGMF9CQVIxX1NJWkU7CisJCQltZW1fbWFwcGVkX2JhciA9IHBoYmEtPnNsaTRfaGJhLmN0cmxfcmVnc19tZW1tYXBfcDsKKwkJfSBlbHNlIGlmIChiYXJfbnVtID09IElESUFHX0JBUkFDQ19CQVJfMikgeworCQkJaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWF0gPQorCQkJCUxQRkNfUENJX0lGMF9CQVIyX1NJWkU7CisJCQltZW1fbWFwcGVkX2JhciA9IHBoYmEtPnNsaTRfaGJhLmRyYmxfcmVnc19tZW1tYXBfcDsKKwkJfSBlbHNlCisJCQlnb3RvIGVycm9yX291dDsKKwl9IGVsc2UgaWYgKGlmX3R5cGUgPT0gTFBGQ19TTElfSU5URl9JRl9UWVBFXzIpIHsKKwkJaWYgKGJhcl9udW0gPT0gSURJQUdfQkFSQUNDX0JBUl8wKSB7CisJCQlpZGlhZy5jbWQuZGF0YVtJRElBR19CQVJBQ0NfQkFSX1NaRV9JTkRYXSA9CisJCQkJTFBGQ19QQ0lfSUYyX0JBUjBfU0laRTsKKwkJCW1lbV9tYXBwZWRfYmFyID0gcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wOworCQl9IGVsc2UKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZQorCQlnb3RvIGVycm9yX291dDsKKworCW9mZnNldCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX0JBUkFDQ19PRkZfU0VUX0lORFhdOworCWlmIChvZmZzZXQgJSBzaXplb2YodWludDMyX3QpKQorCQlnb3RvIGVycm9yX291dDsKKworCWJhcl9zaXplID0gaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWF07CisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQkFSQUNDX1JEKSB7CisJCS8qIFNhbml0eSBjaGVjayBvbiBQQ0kgY29uZmlnIHJlYWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCQlpZiAocmMgIT0gTFBGQ19QQ0lfQkFSX1JEX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKKwkJYWNjX3JhbmdlID0gaWRpYWcuY21kLmRhdGFbSURJQUdfQkFSQUNDX0FDQ19NT0RfSU5EWF07CisJCWlmIChhY2NfcmFuZ2UgPT0gTFBGQ19QQ0lfQkFSX0JST1dTRSkgeworCQkJaWYgKG9mZnNldCA+IGJhcl9zaXplIC0gc2l6ZW9mKHVpbnQzMl90KSkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCS8qIFN0YXJ0aW5nIG9mZnNldCB0byBicm93c2UgKi8KKwkJCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gb2Zmc2V0OworCQl9IGVsc2UgaWYgKGFjY19yYW5nZSA+IFNJTkdMRV9XT1JEKSB7CisJCQlpZiAob2Zmc2V0ICsgYWNjX3JhbmdlICogc2l6ZW9mKHVpbnQzMl90KSA+IGJhcl9zaXplKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJLyogU3RhcnRpbmcgb2Zmc2V0IHRvIGJyb3dzZSAqLworCQkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSBvZmZzZXQ7CisJCX0gZWxzZSBpZiAoYWNjX3JhbmdlICE9IFNJTkdMRV9XT1JEKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlIGlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0JBUkFDQ19XUiB8fAorCQkgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0JBUkFDQ19TVCB8fAorCQkgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0JBUkFDQ19DTCkgeworCQkvKiBTYW5pdHkgY2hlY2sgb24gUENJIGJhciB3cml0ZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisJCWlmIChyYyAhPSBMUEZDX1BDSV9CQVJfV1JfQ01EX0FSRykKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQkvKiBXcml0ZSBjb21tYW5kIHRvIFBDSSBiYXIgc3BhY2UsIHJlYWQtbW9kaWZ5LXdyaXRlICovCisJCWFjY19yYW5nZSA9IFNJTkdMRV9XT1JEOworCQl2YWx1ZSA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX0JBUkFDQ19SRUdfVkFMX0lORFhdOworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9CQVJBQ0NfV1IpIHsKKwkJCXdyaXRlbCh2YWx1ZSwgbWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQkJcmVhZGwobWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQl9CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0JBUkFDQ19TVCkgeworCQkJdTMydmFsID0gcmVhZGwobWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQkJdTMydmFsIHw9IHZhbHVlOworCQkJd3JpdGVsKHUzMnZhbCwgbWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQkJcmVhZGwobWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQl9CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0JBUkFDQ19DTCkgeworCQkJdTMydmFsID0gcmVhZGwobWVtX21hcHBlZF9iYXIgKyBvZmZzZXQpOworCQkJdTMydmFsICY9IH52YWx1ZTsKKwkJCXdyaXRlbCh1MzJ2YWwsIG1lbV9tYXBwZWRfYmFyICsgb2Zmc2V0KTsKKwkJCXJlYWRsKG1lbV9tYXBwZWRfYmFyICsgb2Zmc2V0KTsKKwkJfQorCX0gZWxzZQorCQkvKiBBbGwgb3RoZXIgb3BlY29kZXMgYXJlIGlsbGVnYWwgZm9yIG5vdyAqLworCQlnb3RvIGVycm9yX291dDsKKworCXJldHVybiBuYnl0ZXM7CitlcnJvcl9vdXQ6CisJbWVtc2V0KCZpZGlhZywgMCwgc2l6ZW9mKGlkaWFnKSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgogICogbHBmY19pZGlhZ19xdWVpbmZvX3JlYWQgLSBpZGlhZyBkZWJ1Z2ZzIHJlYWQgcXVldWUgaW5mb3JtYXRpb24KICAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KICAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgZGF0YSB0by4KQEAgLTE4NzEsOCArMjE4Myw4IEBACiAJCXJldHVybiAwOwogCiAJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1JEKSB7Ci0JCWluZGV4ID0gaWRpYWcuY21kLmRhdGFbMl07Ci0JCWNvdW50ID0gaWRpYWcuY21kLmRhdGFbM107CisJCWluZGV4ID0gaWRpYWcuY21kLmRhdGFbSURJQUdfUVVFQUNDX0lOREVYX0lORFhdOworCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX1FVRUFDQ19DT1VOVF9JTkRYXTsKIAkJcHF1ZSA9IChzdHJ1Y3QgbHBmY19xdWV1ZSAqKWlkaWFnLnB0cl9wcml2YXRlOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKQEAgLTE5NDQsMTIgKzIyNTYsMTIgQEAKIAkJcmV0dXJuIHJjOwogCiAJLyogR2V0IGFuZCBzYW5pdHkgY2hlY2sgb24gY29tbWFuZCBmZWlsZHMgKi8KLQlxdWV0cCAgPSBpZGlhZy5jbWQuZGF0YVswXTsKLQlxdWVpZCAgPSBpZGlhZy5jbWQuZGF0YVsxXTsKLQlpbmRleCAgPSBpZGlhZy5jbWQuZGF0YVsyXTsKLQljb3VudCAgPSBpZGlhZy5jbWQuZGF0YVszXTsKLQlvZmZzZXQgPSBpZGlhZy5jbWQuZGF0YVs0XTsKLQl2YWx1ZSAgPSBpZGlhZy5jbWQuZGF0YVs1XTsKKwlxdWV0cCAgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19RVUVBQ0NfUVVFVFBfSU5EWF07CisJcXVlaWQgID0gaWRpYWcuY21kLmRhdGFbSURJQUdfUVVFQUNDX1FVRUlEX0lORFhdOworCWluZGV4ICA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX1FVRUFDQ19JTkRFWF9JTkRYXTsKKwljb3VudCAgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19RVUVBQ0NfQ09VTlRfSU5EWF07CisJb2Zmc2V0ID0gaWRpYWcuY21kLmRhdGFbSURJQUdfUVVFQUNDX09GRlNUX0lORFhdOworCXZhbHVlICA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX1FVRUFDQ19WQUxVRV9JTkRYXTsKIAogCS8qIFNhbml0eSBjaGVjayBvbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCiAJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1dSIHx8CkBAIC0yMjE4LDcgKzI1MzAsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19SRCkKLQkJZHJiX3JlZ19pZCA9IGlkaWFnLmNtZC5kYXRhWzBdOworCQlkcmJfcmVnX2lkID0gaWRpYWcuY21kLmRhdGFbSURJQUdfRFJCQUNDX1JFR0lEX0lORFhdOwogCWVsc2UKIAkJcmV0dXJuIDA7CiAKQEAgLTIyNTcsNyArMjU2OSw3IEBACiB7CiAJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOwotCXVpbnQzMl90IGRyYl9yZWdfaWQsIHZhbHVlLCByZWdfdmFsOworCXVpbnQzMl90IGRyYl9yZWdfaWQsIHZhbHVlLCByZWdfdmFsID0gMDsKIAl2b2lkIF9faW9tZW0gKmRyYl9yZWc7CiAJaW50IHJjOwogCkBAIC0yMjY5LDggKzI1ODEsOCBAQAogCQlyZXR1cm4gcmM7CiAKIAkvKiBTYW5pdHkgY2hlY2sgb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLwotCWRyYl9yZWdfaWQgPSBpZGlhZy5jbWQuZGF0YVswXTsKLQl2YWx1ZSA9IGlkaWFnLmNtZC5kYXRhWzFdOworCWRyYl9yZWdfaWQgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19EUkJBQ0NfUkVHSURfSU5EWF07CisJdmFsdWUgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19EUkJBQ0NfVkFMVUVfSU5EWF07CiAKIAlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfV1IgfHwKIAkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfU1QgfHwKQEAgLTIzMzAsNiArMjY0Miw2NzkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorLyoqCisgKiBscGZjX2lkaWFnX2N0bGFjY19yZWFkX3JlZyAtIGlkaWFnIGRlYnVnZnMgcmVhZCBhIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBAcGhiYTogVGhlIHBvaW50ZXIgdG8gaGJhIHN0cnVjdHVyZS4KKyAqIEBwYnVmZmVyOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgdG8uCisgKiBAbGVuOiBUaGUgbGVuZ2h0IG9mIGJ5dGVzIHRvIGNvcGllZC4KKyAqIEBkcmJyZWdpZDogVGhlIGlkIHRvIGRvb3JiZWxsIHJlZ2lzdGVycy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGNvcGllcyBpdHMgY29udGVudCB0byB0aGUKKyAqIHVzZXIgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQHBidWZmZXIuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgY29waWVkIGludG8gQHBidWZmZXIuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX2N0bGFjY19yZWFkX3JlZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKnBidWZmZXIsCisJCQkgICBpbnQgbGVuLCB1aW50MzJfdCBjdGxyZWdpZCkKK3sKKworCWlmICghcGJ1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGN0bHJlZ2lkKSB7CisJY2FzZSBMUEZDX0NUTF9QT1JUX1NFTToKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0IFNlbVJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QT1JUX1NFTV9PRkZTRVQpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0NUTF9QT1JUX1NUQToKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0IFN0YVJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QT1JUX1NUQV9PRkZTRVQpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0NUTF9QT1JUX0NUTDoKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0IEN0bFJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QT1JUX0NUTF9PRkZTRVQpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0NUTF9QT1JUX0VSMToKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0IEVyMVJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QT1JUX0VSMV9PRkZTRVQpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0NUTF9QT1JUX0VSMjoKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0IEVyMlJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QT1JUX0VSMl9PRkZTRVQpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0NUTF9QREVWX0NUTDoKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQRGV2IEN0bFJlZzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkgICAgICBMUEZDX0NUTF9QREVWX0NUTF9PRkZTRVQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19jdGxhY2NfcmVhZCAtIGlkaWFnIGRlYnVnZnMgcmVhZCBwb3J0IGFuZCBkZXZpY2UgY29udHJvbCByZWdpc3RlcgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSBkYXRhIHRvLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgZGF0YSBmcm9tIHRoZSBAcGhiYSBwb3J0IGFuZCBkZXZpY2UgcmVnaXN0ZXJzIGFjY29yZGluZworICogdG8gdGhlIGlkaWFnIGNvbW1hbmQsIGFuZCBjb3BpZXMgdG8gdXNlciBAYnVmLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHJlYWQgKHRoaXMgY291bGQgYmUgbGVzcworICogdGhhbiBAbmJ5dGVzIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQpIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19jdGxhY2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKKwkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRlYnVnLT5pX3ByaXZhdGU7CisJdWludDMyX3QgY3RsX3JlZ19pZCwgaTsKKwljaGFyICpwYnVmZmVyOworCWludCBsZW4gPSAwOworCisJLyogVGhpcyBpcyBhIHVzZXIgcmVhZCBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1JEOworCisJaWYgKCFkZWJ1Zy0+YnVmZmVyKQorCQlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX0NUTF9BQ0NfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJcGJ1ZmZlciA9IGRlYnVnLT5idWZmZXI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQ1RMQUNDX1JEKQorCQljdGxfcmVnX2lkID0gaWRpYWcuY21kLmRhdGFbSURJQUdfQ1RMQUNDX1JFR0lEX0lORFhdOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3RsX3JlZ19pZCA9PSBMUEZDX0NUTF9BQ0NfQUxMKQorCQlmb3IgKGkgPSAxOyBpIDw9IExQRkNfQ1RMX01BWDsgaSsrKQorCQkJbGVuID0gbHBmY19pZGlhZ19jdGxhY2NfcmVhZF9yZWcocGhiYSwKKwkJCQkJCQkgcGJ1ZmZlciwgbGVuLCBpKTsKKwllbHNlCisJCWxlbiA9IGxwZmNfaWRpYWdfY3RsYWNjX3JlYWRfcmVnKHBoYmEsCisJCQkJCQkgcGJ1ZmZlciwgbGVuLCBjdGxfcmVnX2lkKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgcGJ1ZmZlciwgbGVuKTsKK30KKworLyoqCisgKiBscGZjX2lkaWFnX2N0bGFjY193cml0ZSAtIFN5bnRheCBjaGVjayBhbmQgc2V0IHVwIGlkaWFnIGN0bGFjYyBjb21tYW5kcworICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSB1c2VyIGRhdGEgZnJvbS4KKyAqIEBuYnl0ZXM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2V0LgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogVGhpcyByb3V0aW5lIGdldCB0aGUgZGVidWdmcyBpZGlhZyBjb21tYW5kIHN0cnVjdCBmcm9tIHVzZXIgc3BhY2UgYW5kIHRoZW4KKyAqIHBlcmZvcm0gdGhlIHN5bnRheCBjaGVjayBmb3IgcG9ydCBhbmQgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgcmVhZCAoZHVtcCkKKyAqIG9yIHdyaXRlIChzZXQpIGNvbW1hbmQgYWNjb3JkaW5nbHkuCisgKgorICogSXQgcmV0dXJucyB0aGUgQG5ieXRnZXMgcGFzc2luZyBpbiBmcm9tIGRlYnVnZnMgdXNlciBzcGFjZSB3aGVuIHN1Y2Nlc3NmdWwuCisgKiBJbiBjYXNlIG9mIGVycm9yIGNvbmRpdGlvbnMsIGl0IHJldHVybnMgcHJvcGVyIGVycm9yIGNvZGUgYmFjayB0byB0aGUgdXNlcgorICogc3BhY2UuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19jdGxhY2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilkZWJ1Zy0+aV9wcml2YXRlOworCXVpbnQzMl90IGN0bF9yZWdfaWQsIHZhbHVlLCByZWdfdmFsID0gMDsKKwl2b2lkIF9faW9tZW0gKmN0bF9yZWc7CisJaW50IHJjOworCisJLyogVGhpcyBpcyBhIHVzZXIgd3JpdGUgb3BlcmF0aW9uICovCisJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9XUjsKKworCXJjID0gbHBmY19pZGlhZ19jbWRfZ2V0KGJ1ZiwgbmJ5dGVzLCAmaWRpYWcuY21kKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBTYW5pdHkgY2hlY2sgb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCWN0bF9yZWdfaWQgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19DVExBQ0NfUkVHSURfSU5EWF07CisJdmFsdWUgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19DVExBQ0NfVkFMVUVfSU5EWF07CisKKwlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9DVExBQ0NfV1IgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9DVExBQ0NfU1QgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9DVExBQ0NfQ0wpIHsKKwkJaWYgKHJjICE9IExQRkNfQ1RMX0FDQ19XUl9DTURfQVJHKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmIChjdGxfcmVnX2lkID4gTFBGQ19DVExfTUFYKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlIGlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0NUTEFDQ19SRCkgeworCQlpZiAocmMgIT0gTFBGQ19DVExfQUNDX1JEX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKChjdGxfcmVnX2lkID4gTFBGQ19DVExfTUFYKSAmJgorCQkgICAgKGN0bF9yZWdfaWQgIT0gTFBGQ19DVExfQUNDX0FMTCkpCisJCQlnb3RvIGVycm9yX291dDsKKwl9IGVsc2UKKwkJZ290byBlcnJvcl9vdXQ7CisKKwkvKiBQZXJmb3JtIHRoZSB3cml0ZSBhY2Nlc3Mgb3BlcmF0aW9uICovCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQ1RMQUNDX1dSIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQ1RMQUNDX1NUIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfQ1RMQUNDX0NMKSB7CisJCXN3aXRjaCAoY3RsX3JlZ19pZCkgeworCQljYXNlIExQRkNfQ1RMX1BPUlRfU0VNOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BPUlRfU0VNX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfQ1RMX1BPUlRfU1RBOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BPUlRfU1RBX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfQ1RMX1BPUlRfQ1RMOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BPUlRfQ1RMX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfQ1RMX1BPUlRfRVIxOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BPUlRfRVIxX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfQ1RMX1BPUlRfRVIyOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BPUlRfRVIyX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfQ1RMX1BERVZfQ1RMOgorCQkJY3RsX3JlZyA9IHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCUxQRkNfQ1RMX1BERVZfQ1RMX09GRlNFVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9DVExBQ0NfV1IpCisJCQlyZWdfdmFsID0gdmFsdWU7CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0NUTEFDQ19TVCkgeworCQkJcmVnX3ZhbCA9IHJlYWRsKGN0bF9yZWcpOworCQkJcmVnX3ZhbCB8PSB2YWx1ZTsKKwkJfQorCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9DVExBQ0NfQ0wpIHsKKwkJCXJlZ192YWwgPSByZWFkbChjdGxfcmVnKTsKKwkJCXJlZ192YWwgJj0gfnZhbHVlOworCQl9CisJCXdyaXRlbChyZWdfdmFsLCBjdGxfcmVnKTsKKwkJcmVhZGwoY3RsX3JlZyk7IC8qIGZsdXNoICovCisJfQorCXJldHVybiBuYnl0ZXM7CisKK2Vycm9yX291dDoKKwkvKiBDbGVhbiBvdXQgY29tbWFuZCBzdHJ1Y3R1cmUgb24gY29tbWFuZCBlcnJvciBvdXQgKi8KKwltZW1zZXQoJmlkaWFnLCAwLCBzaXplb2YoaWRpYWcpKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBscGZjX2lkaWFnX21ieGFjY19nZXRfc2V0dXAgLSBpZGlhZyBkZWJ1Z2ZzIGdldCBtYWlsYm94IGFjY2VzcyBzZXR1cAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBidWZmZXI6IFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgZHJpdmVyIG1haWxib3ggYWNjZXNzIGRlYnVnZnMgc2V0dXAgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgcmVhZCAodGhpcyBjb3VsZCBiZSBsZXNzCisgKiB0aGFuIEBuYnl0ZXMgaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZCkgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfaWRpYWdfbWJ4YWNjX2dldF9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKnBidWZmZXIpCit7CisJdWludDMyX3QgbWJ4X2R1bXBfbWFwLCBtYnhfZHVtcF9jbnQsIG1ieF93b3JkX2NudCwgbWJ4X21ib3hfY21kOworCWludCBsZW4gPSAwOworCisJbWJ4X21ib3hfY21kID0gaWRpYWcuY21kLmRhdGFbSURJQUdfTUJYQUNDX01CQ01EX0lORFhdOworCW1ieF9kdW1wX21hcCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19EUE1BUF9JTkRYXTsKKwltYnhfZHVtcF9jbnQgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19NQlhBQ0NfRFBDTlRfSU5EWF07CisJbWJ4X3dvcmRfY250ID0gaWRpYWcuY21kLmRhdGFbSURJQUdfTUJYQUNDX1dEQ05UX0lORFhdOworCisJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX01CWF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJIm1ieF9kdW1wX21hcDogMHglMDh4XG4iLCBtYnhfZHVtcF9tYXApOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19NQlhfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJtYnhfZHVtcF9jbnQ6ICUwNGRcbiIsIG1ieF9kdW1wX2NudCk7CisJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX01CWF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJIm1ieF93b3JkX2NudDogJTA0ZFxuIiwgbWJ4X3dvcmRfY250KTsKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfTUJYX0FDQ19CVUZfU0laRS1sZW4sCisJCQkibWJ4X21ib3hfY21kOiAweCUwMnhcbiIsIG1ieF9tYm94X2NtZCk7CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfbWJ4YWNjX3JlYWQgLSBpZGlhZyBkZWJ1Z2ZzIHJlYWQgb24gbWFpbGJveCBhY2Nlc3MKKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgZGF0YSB0by4KKyAqIEBuYnl0ZXM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqIEBwcG9zOiBUaGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgdG8gc3RhcnQgcmVhZGluZyBmcm9tLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIHJlYWRzIGRhdGEgZnJvbSB0aGUgQHBoYmEgZHJpdmVyIG1haWxib3ggYWNjZXNzIGRlYnVnZnMgc2V0dXAKKyAqIGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHJlYWQgKHRoaXMgY291bGQgYmUgbGVzcworICogdGhhbiBAbmJ5dGVzIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQpIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19tYnhhY2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKKwkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRlYnVnLT5pX3ByaXZhdGU7CisJY2hhciAqcGJ1ZmZlcjsKKwlpbnQgbGVuID0gMDsKKworCS8qIFRoaXMgaXMgYSB1c2VyIHJlYWQgb3BlcmF0aW9uICovCisJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9SRDsKKworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19NQlhfQUNDX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlYnVnLT5idWZmZXIpCisJCXJldHVybiAwOworCXBidWZmZXIgPSBkZWJ1Zy0+YnVmZmVyOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCWlmICgoaWRpYWcuY21kLm9wY29kZSAhPSBMUEZDX0lESUFHX0NNRF9NQlhBQ0NfRFApICYmCisJICAgIChpZGlhZy5jbWQub3Bjb2RlICE9IExQRkNfSURJQUdfQlNHX01CWEFDQ19EUCkpCisJCXJldHVybiAwOworCisJbGVuID0gbHBmY19pZGlhZ19tYnhhY2NfZ2V0X3NldHVwKHBoYmEsIHBidWZmZXIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfbWJ4YWNjX3dyaXRlIC0gU3ludGF4IGNoZWNrIGFuZCBzZXQgdXAgaWRpYWcgbWJ4YWNjIGNvbW1hbmRzCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIHVzZXIgZGF0YSBmcm9tLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byBnZXQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBkZWJ1Z2ZzIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZyb20gdXNlciBzcGFjZSBhbmQgdGhlbgorICogcGVyZm9ybSB0aGUgc3ludGF4IGNoZWNrIGZvciBkcml2ZXIgbWFpbGJveCBjb21tYW5kIChkdW1wKSBhbmQgc2V0cyB1cCB0aGUKKyAqIG5lY2Vzc2FyeSBzdGF0ZXMgaW4gdGhlIGlkaWFnIGNvbW1hbmQgc3RydWN0IGFjY29yZGluZ2x5LgorICoKKyAqIEl0IHJldHVybnMgdGhlIEBuYnl0Z2VzIHBhc3NpbmcgaW4gZnJvbSBkZWJ1Z2ZzIHVzZXIgc3BhY2Ugd2hlbiBzdWNjZXNzZnVsLgorICogSW4gY2FzZSBvZiBlcnJvciBjb25kaXRpb25zLCBpdCByZXR1cm5zIHByb3BlciBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIHVzZXIKKyAqIHNwYWNlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfaWRpYWdfbWJ4YWNjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBscGZjX2RlYnVnICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1aW50MzJfdCBtYnhfZHVtcF9tYXAsIG1ieF9kdW1wX2NudCwgbWJ4X3dvcmRfY250LCBtYnhfbWJveF9jbWQ7CisJaW50IHJjOworCisJLyogVGhpcyBpcyBhIHVzZXIgd3JpdGUgb3BlcmF0aW9uICovCisJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9XUjsKKworCXJjID0gbHBmY19pZGlhZ19jbWRfZ2V0KGJ1ZiwgbmJ5dGVzLCAmaWRpYWcuY21kKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBTYW5pdHkgY2hlY2sgb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCW1ieF9tYm94X2NtZCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19NQkNNRF9JTkRYXTsKKwltYnhfZHVtcF9tYXAgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19NQlhBQ0NfRFBNQVBfSU5EWF07CisJbWJ4X2R1bXBfY250ID0gaWRpYWcuY21kLmRhdGFbSURJQUdfTUJYQUNDX0RQQ05UX0lORFhdOworCW1ieF93b3JkX2NudCA9IGlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19XRENOVF9JTkRYXTsKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX01CWEFDQ19EUCkgeworCQlpZiAoIShtYnhfZHVtcF9tYXAgJiBMUEZDX01CWF9ETVBfTUJYX0FMTCkpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKChtYnhfZHVtcF9tYXAgJiB+TFBGQ19NQlhfRE1QX01CWF9BTEwpICYmCisJCSAgICAobWJ4X2R1bXBfbWFwICE9IExQRkNfTUJYX0RNUF9BTEwpKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmIChtYnhfd29yZF9jbnQgPiBzaXplb2YoTUFJTEJPWF90KSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZSBpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0JTR19NQlhBQ0NfRFApIHsKKwkJaWYgKCEobWJ4X2R1bXBfbWFwICYgTFBGQ19CU0dfRE1QX01CWF9BTEwpKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCWlmICgobWJ4X2R1bXBfbWFwICYgfkxQRkNfQlNHX0RNUF9NQlhfQUxMKSAmJgorCQkgICAgKG1ieF9kdW1wX21hcCAhPSBMUEZDX01CWF9ETVBfQUxMKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAobWJ4X3dvcmRfY250ID4gKEJTR19NQk9YX1NJWkUpLzQpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKG1ieF9tYm94X2NtZCAhPSAweDliKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlCisJCWdvdG8gZXJyb3Jfb3V0OworCisJaWYgKG1ieF93b3JkX2NudCA9PSAwKQorCQlnb3RvIGVycm9yX291dDsKKwlpZiAocmMgIT0gTFBGQ19NQlhfRE1QX0FSRykKKwkJZ290byBlcnJvcl9vdXQ7CisJaWYgKG1ieF9tYm94X2NtZCAmIH4weGZmKQorCQlnb3RvIGVycm9yX291dDsKKworCS8qIGNvbmRpdGlvbiBmb3Igc3RvcCBtYWlsYm94IGR1bXAgKi8KKwlpZiAobWJ4X2R1bXBfY250ID09IDApCisJCWdvdG8gcmVzZXRfb3V0OworCisJcmV0dXJuIG5ieXRlczsKKworcmVzZXRfb3V0OgorCS8qIENsZWFuIG91dCBjb21tYW5kIHN0cnVjdHVyZSBvbiBjb21tYW5kIGVycm9yIG91dCAqLworCW1lbXNldCgmaWRpYWcsIDAsIHNpemVvZihpZGlhZykpOworCXJldHVybiBuYnl0ZXM7CisKK2Vycm9yX291dDoKKwkvKiBDbGVhbiBvdXQgY29tbWFuZCBzdHJ1Y3R1cmUgb24gY29tbWFuZCBlcnJvciBvdXQgKi8KKwltZW1zZXQoJmlkaWFnLCAwLCBzaXplb2YoaWRpYWcpKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBscGZjX2lkaWFnX2V4dGFjY19hdmFpbF9nZXQgLSBnZXQgdGhlIGF2YWlsYWJsZSBleHRlbnRzIGluZm9ybWF0aW9uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwYnVmZmVyOiBwb2ludGVyIHRvIGludGVybmFsIGJ1ZmZlci4KKyAqIEBsZW46IGxlbmd0aCBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIgZGF0YSBoYXMgYmVlbiBjb3BpZWQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gZ2V0IHRoZSBhdmFpbGFibGUgZXh0ZW50IGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBvdmVyYWxsIGxlbnRoIG9mIHRoZSBkYXRhIHJlYWQgaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyLgorICoqLworc3RhdGljIGludAorbHBmY19pZGlhZ19leHRhY2NfYXZhaWxfZ2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqcGJ1ZmZlciwgaW50IGxlbikKK3sKKwl1aW50MTZfdCBleHRfY250LCBleHRfc2l6ZTsKKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcbkF2YWlsYWJsZSBFeHRlbnRzIEluZm9ybWF0aW9uOlxuIik7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRQb3J0IEF2YWlsYWJsZSBWUEkgZXh0ZW50czogIik7CisJbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHBoYmEsIExQRkNfUlNDX1RZUEVfRkNPRV9WUEksCisJCQkJICAgICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJDb3VudCAlM2QsIFNpemUgJTNkXG4iLCBleHRfY250LCBleHRfc2l6ZSk7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRQb3J0IEF2YWlsYWJsZSBWRkkgZXh0ZW50czogIik7CisJbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHBoYmEsIExQRkNfUlNDX1RZUEVfRkNPRV9WRkksCisJCQkJICAgICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJDb3VudCAlM2QsIFNpemUgJTNkXG4iLCBleHRfY250LCBleHRfc2l6ZSk7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRQb3J0IEF2YWlsYWJsZSBSUEkgZXh0ZW50czogIik7CisJbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHBoYmEsIExQRkNfUlNDX1RZUEVfRkNPRV9SUEksCisJCQkJICAgICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJDb3VudCAlM2QsIFNpemUgJTNkXG4iLCBleHRfY250LCBleHRfc2l6ZSk7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRQb3J0IEF2YWlsYWJsZSBYUkkgZXh0ZW50czogIik7CisJbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHBoYmEsIExQRkNfUlNDX1RZUEVfRkNPRV9YUkksCisJCQkJICAgICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJDb3VudCAlM2QsIFNpemUgJTNkXG4iLCBleHRfY250LCBleHRfc2l6ZSk7CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfZXh0YWNjX2FsbG9jX2dldCAtIGdldCB0aGUgYWxsb2NhdGVkIGV4dGVudHMgaW5mb3JtYXRpb24KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBidWZmZXI6IHBvaW50ZXIgdG8gaW50ZXJuYWwgYnVmZmVyLgorICogQGxlbjogbGVuZ3RoIGludG8gdGhlIGludGVybmFsIGJ1ZmZlciBkYXRhIGhhcyBiZWVuIGNvcGllZC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBnZXQgdGhlIGFsbG9jYXRlZCBleHRlbnQgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczoKKyAqIG92ZXJhbGwgbGVudGggb2YgdGhlIGRhdGEgcmVhZCBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX2V4dGFjY19hbGxvY19nZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpwYnVmZmVyLCBpbnQgbGVuKQoreworCXVpbnQxNl90IGV4dF9jbnQsIGV4dF9zaXplOworCWludCByYzsKKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcbkFsbG9jYXRlZCBFeHRlbnRzIEluZm9ybWF0aW9uOlxuIik7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRIb3N0IEFsbG9jYXRlZCBWUEkgZXh0ZW50czogIik7CisJcmMgPSBscGZjX3NsaTRfZ2V0X2FsbG9jYXRlZF9leHRudHMocGhiYSwgTFBGQ19SU0NfVFlQRV9GQ09FX1ZQSSwKKwkJCQkJICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWlmICghcmMpCisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiUG9ydCAlZCBFeHRlbnQgJTNkLCBTaXplICUzZFxuIiwKKwkJCQlwaGJhLT5icmRfbm8sIGV4dF9jbnQsIGV4dF9zaXplKTsKKwllbHNlCisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiTi9BXG4iKTsKKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcdEhvc3QgQWxsb2NhdGVkIFZGSSBleHRlbnRzOiAiKTsKKwlyYyA9IGxwZmNfc2xpNF9nZXRfYWxsb2NhdGVkX2V4dG50cyhwaGJhLCBMUEZDX1JTQ19UWVBFX0ZDT0VfVkZJLAorCQkJCQkgICAgJmV4dF9jbnQsICZleHRfc2l6ZSk7CisJaWYgKCFyYykKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0VYVF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJQb3J0ICVkIEV4dGVudCAlM2QsIFNpemUgJTNkXG4iLAorCQkJCXBoYmEtPmJyZF9ubywgZXh0X2NudCwgZXh0X3NpemUpOworCWVsc2UKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0VYVF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJOL0FcbiIpOworCisJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0VYVF9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJIlx0SG9zdCBBbGxvY2F0ZWQgUlBJIGV4dGVudHM6ICIpOworCXJjID0gbHBmY19zbGk0X2dldF9hbGxvY2F0ZWRfZXh0bnRzKHBoYmEsIExQRkNfUlNDX1RZUEVfRkNPRV9SUEksCisJCQkJCSAgICAmZXh0X2NudCwgJmV4dF9zaXplKTsKKwlpZiAoIXJjKQorCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIlBvcnQgJWQgRXh0ZW50ICUzZCwgU2l6ZSAlM2RcbiIsCisJCQkJcGhiYS0+YnJkX25vLCBleHRfY250LCBleHRfc2l6ZSk7CisJZWxzZQorCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIk4vQVxuIik7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRIb3N0IEFsbG9jYXRlZCBYUkkgZXh0ZW50czogIik7CisJcmMgPSBscGZjX3NsaTRfZ2V0X2FsbG9jYXRlZF9leHRudHMocGhiYSwgTFBGQ19SU0NfVFlQRV9GQ09FX1hSSSwKKwkJCQkJICAgICZleHRfY250LCAmZXh0X3NpemUpOworCWlmICghcmMpCisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiUG9ydCAlZCBFeHRlbnQgJTNkLCBTaXplICUzZFxuIiwKKwkJCQlwaGJhLT5icmRfbm8sIGV4dF9jbnQsIGV4dF9zaXplKTsKKwllbHNlCisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiTi9BXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19leHRhY2NfZHJpdnJfZ2V0IC0gZ2V0IGRyaXZlciBleHRlbnQgaW5mb3JtYXRpb24KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBidWZmZXI6IHBvaW50ZXIgdG8gaW50ZXJuYWwgYnVmZmVyLgorICogQGxlbjogbGVuZ3RoIGludG8gdGhlIGludGVybmFsIGJ1ZmZlciBkYXRhIGhhcyBiZWVuIGNvcGllZC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0byBnZXQgdGhlIGRyaXZlciBleHRlbnQgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczoKKyAqIG92ZXJhbGwgbGVudGggb2YgdGhlIGRhdGEgcmVhZCBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX2V4dGFjY19kcml2cl9nZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBjaGFyICpwYnVmZmVyLCBpbnQgbGVuKQoreworCXN0cnVjdCBscGZjX3JzcmNfYmxrcyAqcnNyY19ibGtzOworCWludCBpbmRleDsKKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcbkRyaXZlciBFeHRlbnRzIEluZm9ybWF0aW9uOlxuIik7CisKKwlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkiXHRWUEkgZXh0ZW50czpcbiIpOworCWluZGV4ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzcmNfYmxrcywgJnBoYmEtPmxwZmNfdnBpX2Jsa19saXN0LCBsaXN0KSB7CisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiXHRcdEJsb2NrICUzZDogU3RhcnQgJTRkLCBDb3VudCAlNGRcbiIsCisJCQkJaW5kZXgsIHJzcmNfYmxrcy0+cnNyY19zdGFydCwKKwkJCQlyc3JjX2Jsa3MtPnJzcmNfc2l6ZSk7CisJCWluZGV4Kys7CisJfQorCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcdFZGSSBleHRlbnRzOlxuIik7CisJaW5kZXggPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnNyY19ibGtzLCAmcGhiYS0+c2xpNF9oYmEubHBmY192ZmlfYmxrX2xpc3QsCisJCQkgICAgbGlzdCkgeworCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIlx0XHRCbG9jayAlM2Q6IFN0YXJ0ICU0ZCwgQ291bnQgJTRkXG4iLAorCQkJCWluZGV4LCByc3JjX2Jsa3MtPnJzcmNfc3RhcnQsCisJCQkJcnNyY19ibGtzLT5yc3JjX3NpemUpOworCQlpbmRleCsrOworCX0KKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcdFJQSSBleHRlbnRzOlxuIik7CisJaW5kZXggPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnNyY19ibGtzLCAmcGhiYS0+c2xpNF9oYmEubHBmY19ycGlfYmxrX2xpc3QsCisJCQkgICAgbGlzdCkgeworCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIlx0XHRCbG9jayAlM2Q6IFN0YXJ0ICU0ZCwgQ291bnQgJTRkXG4iLAorCQkJCWluZGV4LCByc3JjX2Jsa3MtPnJzcmNfc3RhcnQsCisJCQkJcnNyY19ibGtzLT5yc3JjX3NpemUpOworCQlpbmRleCsrOworCX0KKworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19FWFRfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJcdFhSSSBleHRlbnRzOlxuIik7CisJaW5kZXggPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnNyY19ibGtzLCAmcGhiYS0+c2xpNF9oYmEubHBmY194cmlfYmxrX2xpc3QsCisJCQkgICAgbGlzdCkgeworCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRVhUX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIlx0XHRCbG9jayAlM2Q6IFN0YXJ0ICU0ZCwgQ291bnQgJTRkXG4iLAorCQkJCWluZGV4LCByc3JjX2Jsa3MtPnJzcmNfc3RhcnQsCisJCQkJcnNyY19ibGtzLT5yc3JjX3NpemUpOworCQlpbmRleCsrOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19leHRhY2Nfd3JpdGUgLSBTeW50YXggY2hlY2sgYW5kIHNldCB1cCBpZGlhZyBleHRhY2MgY29tbWFuZHMKKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgdXNlciBkYXRhIGZyb20uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldC4KKyAqIEBwcG9zOiBUaGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgdG8gc3RhcnQgcmVhZGluZyBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSBnZXQgdGhlIGRlYnVnZnMgaWRpYWcgY29tbWFuZCBzdHJ1Y3QgZnJvbSB1c2VyIHNwYWNlIGFuZCB0aGVuCisgKiBwZXJmb3JtIHRoZSBzeW50YXggY2hlY2sgZm9yIGV4dGVudCBpbmZvcm1hdGlvbiBhY2Nlc3MgY29tbWFuZHMgYW5kIHNldHMKKyAqIHVwIHRoZSBuZWNlc3Nhcnkgc3RhdGVzIGluIHRoZSBpZGlhZyBjb21tYW5kIHN0cnVjdCBhY2NvcmRpbmdseS4KKyAqCisgKiBJdCByZXR1cm5zIHRoZSBAbmJ5dGdlcyBwYXNzaW5nIGluIGZyb20gZGVidWdmcyB1c2VyIHNwYWNlIHdoZW4gc3VjY2Vzc2Z1bC4KKyAqIEluIGNhc2Ugb2YgZXJyb3IgY29uZGl0aW9ucywgaXQgcmV0dXJucyBwcm9wZXIgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSB1c2VyCisgKiBzcGFjZS4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2lkaWFnX2V4dGFjY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdWludDMyX3QgZXh0X21hcDsKKwlpbnQgcmM7CisKKwkvKiBUaGlzIGlzIGEgdXNlciB3cml0ZSBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1dSOworCisJcmMgPSBscGZjX2lkaWFnX2NtZF9nZXQoYnVmLCBuYnl0ZXMsICZpZGlhZy5jbWQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWV4dF9tYXAgPSBpZGlhZy5jbWQuZGF0YVtJRElBR19FWFRBQ0NfRVhNQVBfSU5EWF07CisKKwlpZiAoaWRpYWcuY21kLm9wY29kZSAhPSBMUEZDX0lESUFHX0NNRF9FWFRBQ0NfUkQpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChyYyAhPSBMUEZDX0VYVF9BQ0NfQ01EX0FSRykKKwkJZ290byBlcnJvcl9vdXQ7CisJaWYgKCEoZXh0X21hcCAmIExQRkNfRVhUX0FDQ19BTEwpKQorCQlnb3RvIGVycm9yX291dDsKKworCXJldHVybiBuYnl0ZXM7CitlcnJvcl9vdXQ6CisJLyogQ2xlYW4gb3V0IGNvbW1hbmQgc3RydWN0dXJlIG9uIGNvbW1hbmQgZXJyb3Igb3V0ICovCisJbWVtc2V0KCZpZGlhZywgMCwgc2l6ZW9mKGlkaWFnKSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19leHRhY2NfcmVhZCAtIGlkaWFnIGRlYnVnZnMgcmVhZCBhY2Nlc3MgdG8gZXh0ZW50IGluZm9ybWF0aW9uCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgdG8uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBkYXRhIGZyb20gdGhlIHByb3BlciBleHRlbnQgaW5mb3JtYXRpb24gYWNjb3JkaW5nIHRvCisgKiB0aGUgaWRpYWcgY29tbWFuZCwgYW5kIGNvcGllcyB0byB1c2VyIEBidWYuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgcmVhZCAodGhpcyBjb3VsZCBiZSBsZXNzCisgKiB0aGFuIEBuYnl0ZXMgaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZCkgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2lkaWFnX2V4dGFjY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLAorCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBscGZjX2RlYnVnICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopZGVidWctPmlfcHJpdmF0ZTsKKwljaGFyICpwYnVmZmVyOworCXVpbnQzMl90IGV4dF9tYXA7CisJaW50IGxlbiA9IDA7CisKKwkvKiBUaGlzIGlzIGEgdXNlciByZWFkIG9wZXJhdGlvbiAqLworCWRlYnVnLT5vcCA9IExQRkNfSURJQUdfT1BfUkQ7CisKKwlpZiAoIWRlYnVnLT5idWZmZXIpCisJCWRlYnVnLT5idWZmZXIgPSBrbWFsbG9jKExQRkNfRVhUX0FDQ19CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZWJ1Zy0+YnVmZmVyKQorCQlyZXR1cm4gMDsKKwlwYnVmZmVyID0gZGVidWctPmJ1ZmZlcjsKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCWlmIChpZGlhZy5jbWQub3Bjb2RlICE9IExQRkNfSURJQUdfQ01EX0VYVEFDQ19SRCkKKwkJcmV0dXJuIDA7CisKKwlleHRfbWFwID0gaWRpYWcuY21kLmRhdGFbSURJQUdfRVhUQUNDX0VYTUFQX0lORFhdOworCWlmIChleHRfbWFwICYgTFBGQ19FWFRfQUNDX0FWQUlMKQorCQlsZW4gPSBscGZjX2lkaWFnX2V4dGFjY19hdmFpbF9nZXQocGhiYSwgcGJ1ZmZlciwgbGVuKTsKKwlpZiAoZXh0X21hcCAmIExQRkNfRVhUX0FDQ19BTExPQykKKwkJbGVuID0gbHBmY19pZGlhZ19leHRhY2NfYWxsb2NfZ2V0KHBoYmEsIHBidWZmZXIsIGxlbik7CisJaWYgKGV4dF9tYXAgJiBMUEZDX0VYVF9BQ0NfRFJJVlIpCisJCWxlbiA9IGxwZmNfaWRpYWdfZXh0YWNjX2RyaXZyX2dldChwaGJhLCBwYnVmZmVyLCBsZW4pOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworfQorCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2Rpc2NfdHJjCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZGlzY190cmMgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLApAQCAtMjQyMCw2ICszNDA1LDE2IEBACiAJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfY21kX3JlbGVhc2UsCiB9OwogCisjdW5kZWYgbHBmY19pZGlhZ19vcF9iYXJBY2MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfaWRpYWdfb3BfYmFyQWNjID0geworCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgICAgICAgbHBmY19pZGlhZ19vcGVuLAorCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCisJLnJlYWQgPSAgICAgICAgIGxwZmNfaWRpYWdfYmFyYWNjX3JlYWQsCisJLndyaXRlID0gICAgICAgIGxwZmNfaWRpYWdfYmFyYWNjX3dyaXRlLAorCS5yZWxlYXNlID0gICAgICBscGZjX2lkaWFnX2NtZF9yZWxlYXNlLAorfTsKKwogI3VuZGVmIGxwZmNfaWRpYWdfb3BfcXVlSW5mbwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19pZGlhZ19vcF9xdWVJbmZvID0gewogCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKQEAgLTI0MjgsNyArMzQyMyw3IEBACiAJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfcmVsZWFzZSwKIH07CiAKLSN1bmRlZiBscGZjX2lkaWFnX29wX3F1ZWFjYworI3VuZGVmIGxwZmNfaWRpYWdfb3BfcXVlQWNjCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2lkaWFnX29wX3F1ZUFjYyA9IHsKIAkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCiAJLm9wZW4gPSAgICAgICAgIGxwZmNfaWRpYWdfb3BlbiwKQEAgLTI0MzgsNyArMzQzMyw3IEBACiAJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfY21kX3JlbGVhc2UsCiB9OwogCi0jdW5kZWYgbHBmY19pZGlhZ19vcF9kcmJhY2MKKyN1bmRlZiBscGZjX2lkaWFnX29wX2RyYkFjYwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19pZGlhZ19vcF9kcmJBY2MgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAogCS5vcGVuID0gICAgICAgICBscGZjX2lkaWFnX29wZW4sCkBAIC0yNDQ4LDggKzM0NDMsMjM0IEBACiAJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfY21kX3JlbGVhc2UsCiB9OwogCisjdW5kZWYgbHBmY19pZGlhZ19vcF9jdGxBY2MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfaWRpYWdfb3BfY3RsQWNjID0geworCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgICAgICAgbHBmY19pZGlhZ19vcGVuLAorCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCisJLnJlYWQgPSAgICAgICAgIGxwZmNfaWRpYWdfY3RsYWNjX3JlYWQsCisJLndyaXRlID0gICAgICAgIGxwZmNfaWRpYWdfY3RsYWNjX3dyaXRlLAorCS5yZWxlYXNlID0gICAgICBscGZjX2lkaWFnX2NtZF9yZWxlYXNlLAorfTsKKworI3VuZGVmIGxwZmNfaWRpYWdfb3BfbWJ4QWNjCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2lkaWFnX29wX21ieEFjYyA9IHsKKwkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCisJLm9wZW4gPSAgICAgICAgIGxwZmNfaWRpYWdfb3BlbiwKKwkubGxzZWVrID0gICAgICAgbHBmY19kZWJ1Z2ZzX2xzZWVrLAorCS5yZWFkID0gICAgICAgICBscGZjX2lkaWFnX21ieGFjY19yZWFkLAorCS53cml0ZSA9ICAgICAgICBscGZjX2lkaWFnX21ieGFjY193cml0ZSwKKwkucmVsZWFzZSA9ICAgICAgbHBmY19pZGlhZ19jbWRfcmVsZWFzZSwKK307CisKKyN1bmRlZiBscGZjX2lkaWFnX29wX2V4dEFjYworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19pZGlhZ19vcF9leHRBY2MgPSB7CisJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICAgICAgICBscGZjX2lkaWFnX29wZW4sCisJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKKwkucmVhZCA9ICAgICAgICAgbHBmY19pZGlhZ19leHRhY2NfcmVhZCwKKwkud3JpdGUgPSAgICAgICAgbHBmY19pZGlhZ19leHRhY2Nfd3JpdGUsCisJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfY21kX3JlbGVhc2UsCit9OworCiAjZW5kaWYKIAorLyogbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveCAtIGlkaWFnIGRlYnVnZnMgZHVtcCBic2cgbWFpbGJveCBjb21tYW5kCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAZG1hYnVmOiBQb2ludGVyIHRvIGEgRE1BIGJ1ZmZlciBkZXNjcmlwdG9yLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGR1bXAgYSBic2cgcGFzcy10aHJvdWdoIG5vbi1lbWJlZGRlZCBtYWlsYm94IGNvbW1hbmQgd2l0aAorICogZXh0ZXJuYWwgYnVmZmVyLgorICoqLwordm9pZAorbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9ic2dfbWJveChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGVudW0gbmVtYl90eXBlIG5lbWJfdHAsCisJCQkJZW51bSBtYm94X3R5cGUgbWJveF90cCwgZW51bSBkbWFfdHlwZSBkbWFfdHAsCisJCQkJZW51bSBzdGFfdHlwZSBzdGFfdHAsCisJCQkJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWYsIHVpbnQzMl90IGV4dF9idWYpCit7CisjaWZkZWYgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUworCXVpbnQzMl90ICptYnhfbWJveF9jbWQsICptYnhfZHVtcF9tYXAsICptYnhfZHVtcF9jbnQsICptYnhfd29yZF9jbnQ7CisJY2hhciBsaW5lX2J1ZltMUEZDX01CWF9BQ0NfTEJVRl9TWl07CisJaW50IGxlbiA9IDA7CisJdWludDMyX3QgZG9fZHVtcCA9IDA7CisJdWludDMyX3QgKnB3b3JkOworCXVpbnQzMl90IGk7CisKKwlpZiAoaWRpYWcuY21kLm9wY29kZSAhPSBMUEZDX0lESUFHX0JTR19NQlhBQ0NfRFApCisJCXJldHVybjsKKworCW1ieF9tYm94X2NtZCA9ICZpZGlhZy5jbWQuZGF0YVtJRElBR19NQlhBQ0NfTUJDTURfSU5EWF07CisJbWJ4X2R1bXBfbWFwID0gJmlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19EUE1BUF9JTkRYXTsKKwltYnhfZHVtcF9jbnQgPSAmaWRpYWcuY21kLmRhdGFbSURJQUdfTUJYQUNDX0RQQ05UX0lORFhdOworCW1ieF93b3JkX2NudCA9ICZpZGlhZy5jbWQuZGF0YVtJRElBR19NQlhBQ0NfV0RDTlRfSU5EWF07CisKKwlpZiAoISgqbWJ4X2R1bXBfbWFwICYgTFBGQ19NQlhfRE1QX0FMTCkgfHwKKwkgICAgKCptYnhfZHVtcF9jbnQgPT0gMCkgfHwKKwkgICAgKCptYnhfd29yZF9jbnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgqbWJ4X21ib3hfY21kICE9IDB4OUIpCisJCXJldHVybjsKKworCWlmICgobWJveF90cCA9PSBtYm94X3JkKSAmJiAoZG1hX3RwID09IGRtYV9tYm94KSkgeworCQlpZiAoKm1ieF9kdW1wX21hcCAmIExQRkNfQlNHX0RNUF9NQlhfUkRfTUJYKSB7CisJCQlkb19kdW1wIHw9IExQRkNfQlNHX0RNUF9NQlhfUkRfTUJYOworCQkJcHJpbnRrKEtFUk5fRVJSICJcblJlYWQgbWJveCBjb21tYW5kICh4JXgpLCAiCisJCQkgICAgICAgIm5lbWI6MHgleCwgZXh0YnVmX2NudDolZDpcbiIsCisJCQkgICAgICAgc3RhX3RwLCBuZW1iX3RwLCBleHRfYnVmKTsKKwkJfQorCX0KKwlpZiAoKG1ib3hfdHAgPT0gbWJveF9yZCkgJiYgKGRtYV90cCA9PSBkbWFfZWJ1ZikpIHsKKwkJaWYgKCptYnhfZHVtcF9tYXAgJiBMUEZDX0JTR19ETVBfTUJYX1JEX0JVRikgeworCQkJZG9fZHVtcCB8PSBMUEZDX0JTR19ETVBfTUJYX1JEX0JVRjsKKwkJCXByaW50ayhLRVJOX0VSUiAiXG5SZWFkIG1ib3ggYnVmZmVyICh4JXgpLCAiCisJCQkgICAgICAgIm5lbWI6MHgleCwgZXh0YnVmX3NlcTolZDpcbiIsCisJCQkgICAgICAgc3RhX3RwLCBuZW1iX3RwLCBleHRfYnVmKTsKKwkJfQorCX0KKwlpZiAoKG1ib3hfdHAgPT0gbWJveF93cikgJiYgKGRtYV90cCA9PSBkbWFfbWJveCkpIHsKKwkJaWYgKCptYnhfZHVtcF9tYXAgJiBMUEZDX0JTR19ETVBfTUJYX1dSX01CWCkgeworCQkJZG9fZHVtcCB8PSBMUEZDX0JTR19ETVBfTUJYX1dSX01CWDsKKwkJCXByaW50ayhLRVJOX0VSUiAiXG5Xcml0ZSBtYm94IGNvbW1hbmQgKHgleCksICIKKwkJCSAgICAgICAibmVtYjoweCV4LCBleHRidWZfY250OiVkOlxuIiwKKwkJCSAgICAgICBzdGFfdHAsIG5lbWJfdHAsIGV4dF9idWYpOworCQl9CisJfQorCWlmICgobWJveF90cCA9PSBtYm94X3dyKSAmJiAoZG1hX3RwID09IGRtYV9lYnVmKSkgeworCQlpZiAoKm1ieF9kdW1wX21hcCAmIExQRkNfQlNHX0RNUF9NQlhfV1JfQlVGKSB7CisJCQlkb19kdW1wIHw9IExQRkNfQlNHX0RNUF9NQlhfV1JfQlVGOworCQkJcHJpbnRrKEtFUk5fRVJSICJcbldyaXRlIG1ib3ggYnVmZmVyICh4JXgpLCAiCisJCQkgICAgICAgIm5lbWI6MHgleCwgZXh0YnVmX3NlcTolZDpcbiIsCisJCQkgICAgICAgc3RhX3RwLCBuZW1iX3RwLCBleHRfYnVmKTsKKwkJfQorCX0KKworCS8qIGR1bXAgYnVmZmVyIGNvbnRlbnQgKi8KKwlpZiAoZG9fZHVtcCkgeworCQlwd29yZCA9ICh1aW50MzJfdCAqKWRtYWJ1Zi0+dmlydDsKKwkJZm9yIChpID0gMDsgaSA8ICptYnhfd29yZF9jbnQ7IGkrKykgeworCQkJaWYgKCEoaSAlIDgpKSB7CisJCQkJaWYgKGkgIT0gMCkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICIlc1xuIiwgbGluZV9idWYpOworCQkJCWxlbiA9IDA7CisJCQkJbGVuICs9IHNucHJpbnRmKGxpbmVfYnVmK2xlbiwKKwkJCQkJCUxQRkNfTUJYX0FDQ19MQlVGX1NaLWxlbiwKKwkJCQkJCSIlMDNkOiAiLCBpKTsKKwkJCX0KKwkJCWxlbiArPSBzbnByaW50ZihsaW5lX2J1ZitsZW4sIExQRkNfTUJYX0FDQ19MQlVGX1NaLWxlbiwKKwkJCQkJIiUwOHggIiwgKHVpbnQzMl90KSpwd29yZCk7CisJCQlwd29yZCsrOworCQl9CisJCWlmICgoaSAtIDEpICUgOCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNcbiIsIGxpbmVfYnVmKTsKKwkJKCptYnhfZHVtcF9jbnQpLS07CisJfQorCisJLyogQ2xlYW4gb3V0IGNvbW1hbmQgc3RydWN0dXJlIG9uIHJlYWNoaW5nIGR1bXAgY291bnQgKi8KKwlpZiAoKm1ieF9kdW1wX2NudCA9PSAwKQorCQltZW1zZXQoJmlkaWFnLCAwLCBzaXplb2YoaWRpYWcpKTsKKwlyZXR1cm47CisjZW5kaWYKK30KKworLyogbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9pc3N1ZV9tYm94IC0gaWRpYWcgZGVidWdmcyBkdW1wIGlzc3VlIG1haWxib3ggY29tbWFuZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGRtYWJ1ZjogUG9pbnRlciB0byBhIERNQSBidWZmZXIgZGVzY3JpcHRvci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBkdW1wIGEgcGFzcy10aHJvdWdoIG5vbi1lbWJlZGRlZCBtYWlsYm94IGNvbW1hbmQgZnJvbSBpc3N1ZQorICogbWFpbGJveCBjb21tYW5kLgorICoqLwordm9pZAorbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9pc3N1ZV9tYm94KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTUFJTEJPWF90ICpwbWJveCkKK3sKKyNpZmRlZiBDT05GSUdfU0NTSV9MUEZDX0RFQlVHX0ZTCisJdWludDMyX3QgKm1ieF9kdW1wX21hcCwgKm1ieF9kdW1wX2NudCwgKm1ieF93b3JkX2NudCwgKm1ieF9tYm94X2NtZDsKKwljaGFyIGxpbmVfYnVmW0xQRkNfTUJYX0FDQ19MQlVGX1NaXTsKKwlpbnQgbGVuID0gMDsKKwl1aW50MzJfdCAqcHdvcmQ7CisJdWludDhfdCAqcGJ5dGU7CisJdWludDMyX3QgaSwgajsKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlICE9IExQRkNfSURJQUdfQ01EX01CWEFDQ19EUCkKKwkJcmV0dXJuOworCisJbWJ4X21ib3hfY21kID0gJmlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19NQkNNRF9JTkRYXTsKKwltYnhfZHVtcF9tYXAgPSAmaWRpYWcuY21kLmRhdGFbSURJQUdfTUJYQUNDX0RQTUFQX0lORFhdOworCW1ieF9kdW1wX2NudCA9ICZpZGlhZy5jbWQuZGF0YVtJRElBR19NQlhBQ0NfRFBDTlRfSU5EWF07CisJbWJ4X3dvcmRfY250ID0gJmlkaWFnLmNtZC5kYXRhW0lESUFHX01CWEFDQ19XRENOVF9JTkRYXTsKKworCWlmICghKCptYnhfZHVtcF9tYXAgJiBMUEZDX01CWF9ETVBfTUJYX0FMTCkgfHwKKwkgICAgKCptYnhfZHVtcF9jbnQgPT0gMCkgfHwKKwkgICAgKCptYnhfd29yZF9jbnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICgoKm1ieF9tYm94X2NtZCAhPSBMUEZDX01CWF9BTExfQ01EKSAmJgorCSAgICAoKm1ieF9tYm94X2NtZCAhPSBwbWJveC0+bWJ4Q29tbWFuZCkpCisJCXJldHVybjsKKworCS8qIGR1bXAgYnVmZmVyIGNvbnRlbnQgKi8KKwlpZiAoKm1ieF9kdW1wX21hcCAmIExQRkNfTUJYX0RNUF9NQlhfV09SRCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1haWxib3ggY29tbWFuZDoweCV4IGR1bXAgYnkgd29yZDpcbiIsCisJCSAgICAgICBwbWJveC0+bWJ4Q29tbWFuZCk7CisJCXB3b3JkID0gKHVpbnQzMl90ICopcG1ib3g7CisJCWZvciAoaSA9IDA7IGkgPCAqbWJ4X3dvcmRfY250OyBpKyspIHsKKwkJCWlmICghKGkgJSA4KSkgeworCQkJCWlmIChpICE9IDApCisJCQkJCXByaW50ayhLRVJOX0VSUiAiJXNcbiIsIGxpbmVfYnVmKTsKKwkJCQlsZW4gPSAwOworCQkJCW1lbXNldChsaW5lX2J1ZiwgMCwgTFBGQ19NQlhfQUNDX0xCVUZfU1opOworCQkJCWxlbiArPSBzbnByaW50ZihsaW5lX2J1ZitsZW4sCisJCQkJCQlMUEZDX01CWF9BQ0NfTEJVRl9TWi1sZW4sCisJCQkJCQkiJTAzZDogIiwgaSk7CisJCQl9CisJCQlsZW4gKz0gc25wcmludGYobGluZV9idWYrbGVuLCBMUEZDX01CWF9BQ0NfTEJVRl9TWi1sZW4sCisJCQkJCSIlMDh4ICIsCisJCQkJCSgodWludDMyX3QpKnB3b3JkKSAmIDB4ZmZmZmZmZmYpOworCQkJcHdvcmQrKzsKKwkJfQorCQlpZiAoKGkgLSAxKSAlIDgpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzXG4iLCBsaW5lX2J1Zik7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwl9CisJaWYgKCptYnhfZHVtcF9tYXAgJiBMUEZDX01CWF9ETVBfTUJYX0JZVEUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNYWlsYm94IGNvbW1hbmQ6MHgleCBkdW1wIGJ5IGJ5dGU6XG4iLAorCQkgICAgICAgcG1ib3gtPm1ieENvbW1hbmQpOworCQlwYnl0ZSA9ICh1aW50OF90ICopcG1ib3g7CisJCWZvciAoaSA9IDA7IGkgPCAqbWJ4X3dvcmRfY250OyBpKyspIHsKKwkJCWlmICghKGkgJSA4KSkgeworCQkJCWlmIChpICE9IDApCisJCQkJCXByaW50ayhLRVJOX0VSUiAiJXNcbiIsIGxpbmVfYnVmKTsKKwkJCQlsZW4gPSAwOworCQkJCW1lbXNldChsaW5lX2J1ZiwgMCwgTFBGQ19NQlhfQUNDX0xCVUZfU1opOworCQkJCWxlbiArPSBzbnByaW50ZihsaW5lX2J1ZitsZW4sCisJCQkJCQlMUEZDX01CWF9BQ0NfTEJVRl9TWi1sZW4sCisJCQkJCQkiJTAzZDogIiwgaSk7CisJCQl9CisJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQkJbGVuICs9IHNucHJpbnRmKGxpbmVfYnVmK2xlbiwKKwkJCQkJCUxQRkNfTUJYX0FDQ19MQlVGX1NaLWxlbiwKKwkJCQkJCSIlMDJ4IiwKKwkJCQkJCSgodWludDhfdCkqcGJ5dGUpICYgMHhmZik7CisJCQkJcGJ5dGUrKzsKKwkJCX0KKwkJCWxlbiArPSBzbnByaW50ZihsaW5lX2J1ZitsZW4sCisJCQkJCUxQRkNfTUJYX0FDQ19MQlVGX1NaLWxlbiwgIiAiKTsKKwkJfQorCQlpZiAoKGkgLSAxKSAlIDgpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzXG4iLCBsaW5lX2J1Zik7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwl9CisJKCptYnhfZHVtcF9jbnQpLS07CisKKwkvKiBDbGVhbiBvdXQgY29tbWFuZCBzdHJ1Y3R1cmUgb24gcmVhY2hpbmcgZHVtcCBjb3VudCAqLworCWlmICgqbWJ4X2R1bXBfY250ID09IDApCisJCW1lbXNldCgmaWRpYWcsIDAsIHNpemVvZihpZGlhZykpOworCXJldHVybjsKKyNlbmRpZgorfQorCiAvKioKICAqIGxwZmNfZGVidWdmc19pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGZvciBhIHZwb3J0CiAgKiBAdnBvcnQ6IFRoZSB2cG9ydCBwb2ludGVyIHRvIGluaXRpYWxpemUuCkBAIC0yNjczLDcgKzM4OTQsNyBAQAogCQkJCSB2cG9ydCwgJmxwZmNfZGVidWdmc19vcF9ub2RlbGlzdCk7CiAJaWYgKCF2cG9ydC0+ZGVidWdfbm9kZWxpc3QpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSAiMDQwOSBDYW4ndCBjcmVhdGUgZGVidWdmcyBub2RlbGlzdFxuIik7CisJCQkJICIyOTg1IENhbid0IGNyZWF0ZSBkZWJ1Z2ZzIG5vZGVsaXN0XG4iKTsKIAkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJfQogCkBAIC0yNzEwLDYgKzM5MzEsMjAgQEAKIAkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSAwOwogCX0KIAorCS8qIGlEaWFnIFBDSSBCQVIgYWNjZXNzICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYmFyQWNjIik7CisJaWYgKCFwaGJhLT5pZGlhZ19iYXJfYWNjKSB7CisJCXBoYmEtPmlkaWFnX2Jhcl9hY2MgPQorCQkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwKKwkJCQlwaGJhLT5pZGlhZ19yb290LCBwaGJhLCAmbHBmY19pZGlhZ19vcF9iYXJBY2MpOworCQlpZiAoIXBoYmEtPmlkaWFnX2Jhcl9hY2MpIHsKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjMwNTYgQ2FuJ3QgY3JlYXRlIGlkaWFnIGRlYnVnZnNcbiIpOworCQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJCX0KKwkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSAwOworCX0KKwogCS8qIGlEaWFnIGdldCBQQ0kgZnVuY3Rpb24gcXVldWUgaW5mb3JtYXRpb24gKi8KIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJxdWVJbmZvIik7CiAJaWYgKCFwaGJhLT5pZGlhZ19xdWVfaW5mbykgewpAQCAtMjc0OSw2ICszOTg0LDUwIEBACiAJCX0KIAl9CiAKKwkvKiBpRGlhZyBhY2Nlc3MgUENJIGZ1bmN0aW9uIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiY3RsQWNjIik7CisJaWYgKCFwaGJhLT5pZGlhZ19jdGxfYWNjKSB7CisJCXBoYmEtPmlkaWFnX2N0bF9hY2MgPQorCQkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwKKwkJCQlwaGJhLT5pZGlhZ19yb290LCBwaGJhLCAmbHBmY19pZGlhZ19vcF9jdGxBY2MpOworCQlpZiAoIXBoYmEtPmlkaWFnX2N0bF9hY2MpIHsKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJICIyOTgxIENhbid0IGNyZWF0ZSBpZGlhZyBkZWJ1Z2ZzXG4iKTsKKwkJCWdvdG8gZGVidWdfZmFpbGVkOworCQl9CisJfQorCisJLyogaURpYWcgYWNjZXNzIG1ib3ggY29tbWFuZHMgKi8KKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJtYnhBY2MiKTsKKwlpZiAoIXBoYmEtPmlkaWFnX21ieF9hY2MpIHsKKwkJcGhiYS0+aWRpYWdfbWJ4X2FjYyA9CisJCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLAorCQkJCXBoYmEtPmlkaWFnX3Jvb3QsIHBoYmEsICZscGZjX2lkaWFnX29wX21ieEFjYyk7CisJCWlmICghcGhiYS0+aWRpYWdfbWJ4X2FjYykgeworCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMjk4MCBDYW4ndCBjcmVhdGUgaWRpYWcgZGVidWdmc1xuIik7CisJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qIGlEaWFnIGV4dGVudHMgYWNjZXNzIGNvbW1hbmRzICovCisJaWYgKHBoYmEtPnNsaTRfaGJhLmV4dGVudHNfaW5fdXNlKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImV4dEFjYyIpOworCQlpZiAoIXBoYmEtPmlkaWFnX2V4dF9hY2MpIHsKKwkJCXBoYmEtPmlkaWFnX2V4dF9hY2MgPQorCQkJCWRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwKKwkJCQkJCSAgICBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwKKwkJCQkJCSAgICBwaGJhLT5pZGlhZ19yb290LCBwaGJhLAorCQkJCQkJICAgICZscGZjX2lkaWFnX29wX2V4dEFjYyk7CisJCQlpZiAoIXBoYmEtPmlkaWFnX2V4dF9hY2MpIHsKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJCQkiMjk4NiBDYW50IGNyZWF0ZSAiCisJCQkJCQkiaWRpYWcgZGVidWdmc1xuIik7CisJCQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJCQl9CisJCX0KKwl9CisKIGRlYnVnX2ZhaWxlZDoKIAlyZXR1cm47CiAjZW5kaWYKQEAgLTI3ODMsNyArNDA2Miw2IEBACiAJCWRlYnVnZnNfcmVtb3ZlKHZwb3J0LT5kZWJ1Z19ub2RlbGlzdCk7IC8qIG5vZGVsaXN0ICovCiAJCXZwb3J0LT5kZWJ1Z19ub2RlbGlzdCA9IE5VTEw7CiAJfQotCiAJaWYgKHZwb3J0LT52cG9ydF9kZWJ1Z2ZzX3Jvb3QpIHsKIAkJZGVidWdmc19yZW1vdmUodnBvcnQtPnZwb3J0X2RlYnVnZnNfcm9vdCk7IC8qIHZwb3J0WCAqLwogCQl2cG9ydC0+dnBvcnRfZGVidWdmc19yb290ID0gTlVMTDsKQEAgLTI4MjcsNiArNDEwNSwyMSBAQAogCQkgKiBpRGlhZyByZWxlYXNlCiAJCSAqLwogCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlpZiAocGhiYS0+aWRpYWdfZXh0X2FjYykgeworCQkJCS8qIGlEaWFnIGV4dEFjYyAqLworCQkJCWRlYnVnZnNfcmVtb3ZlKHBoYmEtPmlkaWFnX2V4dF9hY2MpOworCQkJCXBoYmEtPmlkaWFnX2V4dF9hY2MgPSBOVUxMOworCQkJfQorCQkJaWYgKHBoYmEtPmlkaWFnX21ieF9hY2MpIHsKKwkJCQkvKiBpRGlhZyBtYnhBY2MgKi8KKwkJCQlkZWJ1Z2ZzX3JlbW92ZShwaGJhLT5pZGlhZ19tYnhfYWNjKTsKKwkJCQlwaGJhLT5pZGlhZ19tYnhfYWNjID0gTlVMTDsKKwkJCX0KKwkJCWlmIChwaGJhLT5pZGlhZ19jdGxfYWNjKSB7CisJCQkJLyogaURpYWcgY3RsQWNjICovCisJCQkJZGVidWdmc19yZW1vdmUocGhiYS0+aWRpYWdfY3RsX2FjYyk7CisJCQkJcGhiYS0+aWRpYWdfY3RsX2FjYyA9IE5VTEw7CisJCQl9CiAJCQlpZiAocGhiYS0+aWRpYWdfZHJiX2FjYykgewogCQkJCS8qIGlEaWFnIGRyYkFjYyAqLwogCQkJCWRlYnVnZnNfcmVtb3ZlKHBoYmEtPmlkaWFnX2RyYl9hY2MpOwpAQCAtMjg0Miw2ICs0MTM1LDExIEBACiAJCQkJZGVidWdmc19yZW1vdmUocGhiYS0+aWRpYWdfcXVlX2luZm8pOwogCQkJCXBoYmEtPmlkaWFnX3F1ZV9pbmZvID0gTlVMTDsKIAkJCX0KKwkJCWlmIChwaGJhLT5pZGlhZ19iYXJfYWNjKSB7CisJCQkJLyogaURpYWcgYmFyQWNjICovCisJCQkJZGVidWdmc19yZW1vdmUocGhiYS0+aWRpYWdfYmFyX2FjYyk7CisJCQkJcGhiYS0+aWRpYWdfYmFyX2FjYyA9IE5VTEw7CisJCQl9CiAJCQlpZiAocGhiYS0+aWRpYWdfcGNpX2NmZykgewogCQkJCS8qIGlEaWFnIHBjaUNmZyAqLwogCQkJCWRlYnVnZnNfcmVtb3ZlKHBoYmEtPmlkaWFnX3BjaV9jZmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaAppbmRleCA2NTI1YTVlLi5mODNiZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaApAQCAtMzksMTQgKzM5LDUxIEBACiAvKiBoYnFpbmZvIG91dHB1dCBidWZmZXIgc2l6ZSAqLwogI2RlZmluZSBMUEZDX0hCUUlORk9fU0laRSA4MTkyCiAKKy8qCisgKiBGb3IgU0xJNCBpRGlhZyBkZWJ1Z2ZzIGRpYWdub3N0aWNzIHRvb2wKKyAqLworCiAvKiBwY2lDb25mICovCiAjZGVmaW5lIExQRkNfUENJX0NGR19CUk9XU0UgMHhmZmZmCiAjZGVmaW5lIExQRkNfUENJX0NGR19SRF9DTURfQVJHIDIKICNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX1dSX0NNRF9BUkcgMwogI2RlZmluZSBMUEZDX1BDSV9DRkdfU0laRSA0MDk2Ci0jZGVmaW5lIExQRkNfUENJX0NGR19SRF9CVUZfU0laRSAoTFBGQ19QQ0lfQ0ZHX1NJWkUvMikKICNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX1JEX1NJWkUgKExQRkNfUENJX0NGR19TSVpFLzQpCiAKKyNkZWZpbmUgSURJQUdfUENJQ0ZHX1dIRVJFX0lORFggMAorI2RlZmluZSBJRElBR19QQ0lDRkdfQ09VTlRfSU5EWCAxCisjZGVmaW5lIElESUFHX1BDSUNGR19WQUxVRV9JTkRYIDIKKworLyogYmFyQWNjICovCisjZGVmaW5lIExQRkNfUENJX0JBUl9CUk9XU0UgMHhmZmZmCisjZGVmaW5lIExQRkNfUENJX0JBUl9SRF9DTURfQVJHIDMKKyNkZWZpbmUgTFBGQ19QQ0lfQkFSX1dSX0NNRF9BUkcgMworCisjZGVmaW5lIExQRkNfUENJX0lGMF9CQVIwX1NJWkUgKDEwMjQgKiAgMTYpCisjZGVmaW5lIExQRkNfUENJX0lGMF9CQVIxX1NJWkUgKDEwMjQgKiAxMjgpCisjZGVmaW5lIExQRkNfUENJX0lGMF9CQVIyX1NJWkUgKDEwMjQgKiAxMjgpCisjZGVmaW5lIExQRkNfUENJX0lGMl9CQVIwX1NJWkUgKDEwMjQgKiAgMzIpCisKKyNkZWZpbmUgTFBGQ19QQ0lfQkFSX1JEX0JVRl9TSVpFIDQwOTYKKyNkZWZpbmUgTFBGQ19QQ0lfQkFSX1JEX1NJWkUgKExQRkNfUENJX0JBUl9SRF9CVUZfU0laRS80KQorCisjZGVmaW5lIExQRkNfUENJX0lGMF9CQVIwX1JEX1NJWkUgKExQRkNfUENJX0lGMF9CQVIwX1NJWkUvNCkKKyNkZWZpbmUgTFBGQ19QQ0lfSUYwX0JBUjFfUkRfU0laRSAoTFBGQ19QQ0lfSUYwX0JBUjFfU0laRS80KQorI2RlZmluZSBMUEZDX1BDSV9JRjBfQkFSMl9SRF9TSVpFIChMUEZDX1BDSV9JRjBfQkFSMl9TSVpFLzQpCisjZGVmaW5lIExQRkNfUENJX0lGMl9CQVIwX1JEX1NJWkUgKExQRkNfUENJX0lGMl9CQVIwX1NJWkUvNCkKKworI2RlZmluZSBJRElBR19CQVJBQ0NfQkFSX05VTV9JTkRYIDAKKyNkZWZpbmUgSURJQUdfQkFSQUNDX09GRl9TRVRfSU5EWCAxCisjZGVmaW5lIElESUFHX0JBUkFDQ19BQ0NfTU9EX0lORFggMgorI2RlZmluZSBJRElBR19CQVJBQ0NfUkVHX1ZBTF9JTkRYIDIKKyNkZWZpbmUgSURJQUdfQkFSQUNDX0JBUl9TWkVfSU5EWCAzCisKKyNkZWZpbmUgSURJQUdfQkFSQUNDX0JBUl8wIDAKKyNkZWZpbmUgSURJQUdfQkFSQUNDX0JBUl8xIDEKKyNkZWZpbmUgSURJQUdfQkFSQUNDX0JBUl8yIDIKKworI2RlZmluZSBTSU5HTEVfV09SRCAxCisKIC8qIHF1ZXVlIGluZm8gKi8KICNkZWZpbmUgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUgNDA5NgogCkBAIC02Myw3ICsxMDAsMTQgQEAKICNkZWZpbmUgTFBGQ19JRElBR19XUSA0CiAjZGVmaW5lIExQRkNfSURJQUdfUlEgNQogCi0vKiBkb29yYmVsbCBhY2MgKi8KKyNkZWZpbmUgSURJQUdfUVVFQUNDX1FVRVRQX0lORFggMAorI2RlZmluZSBJRElBR19RVUVBQ0NfUVVFSURfSU5EWCAxCisjZGVmaW5lIElESUFHX1FVRUFDQ19JTkRFWF9JTkRYIDIKKyNkZWZpbmUgSURJQUdfUVVFQUNDX0NPVU5UX0lORFggMworI2RlZmluZSBJRElBR19RVUVBQ0NfT0ZGU1RfSU5EWCA0CisjZGVmaW5lIElESUFHX1FVRUFDQ19WQUxVRV9JTkRYIDUKKworLyogZG9vcmJlbGwgcmVnaXN0ZXIgYWNjICovCiAjZGVmaW5lIExQRkNfRFJCX0FDQ19BTEwgMHhmZmZmCiAjZGVmaW5lIExQRkNfRFJCX0FDQ19SRF9DTURfQVJHIDEKICNkZWZpbmUgTFBGQ19EUkJfQUNDX1dSX0NNRF9BUkcgMgpAQCAtNzYsNiArMTIwLDY3IEBACiAKICNkZWZpbmUgTFBGQ19EUkJfTUFYICA0CiAKKyNkZWZpbmUgSURJQUdfRFJCQUNDX1JFR0lEX0lORFggMAorI2RlZmluZSBJRElBR19EUkJBQ0NfVkFMVUVfSU5EWCAxCisKKy8qIGNvbnRyb2wgcmVnaXN0ZXIgYWNjICovCisjZGVmaW5lIExQRkNfQ1RMX0FDQ19BTEwgMHhmZmZmCisjZGVmaW5lIExQRkNfQ1RMX0FDQ19SRF9DTURfQVJHIDEKKyNkZWZpbmUgTFBGQ19DVExfQUNDX1dSX0NNRF9BUkcgMgorI2RlZmluZSBMUEZDX0NUTF9BQ0NfQlVGX1NJWkUgMjU2CisKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9TRU0gIDEKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9TVEEgIDIKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9DVEwgIDMKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9FUjEgIDQKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9FUjIgIDUKKyNkZWZpbmUgTFBGQ19DVExfUERFVl9DVEwgIDYKKworI2RlZmluZSBMUEZDX0NUTF9NQVggIDYKKworI2RlZmluZSBJRElBR19DVExBQ0NfUkVHSURfSU5EWCAwCisjZGVmaW5lIElESUFHX0NUTEFDQ19WQUxVRV9JTkRYIDEKKworLyogbWFpbGJveCBhY2Nlc3MgKi8KKyNkZWZpbmUgTFBGQ19NQlhfRE1QX0FSRyA0CisKKyNkZWZpbmUgTFBGQ19NQlhfQUNDX0JVRl9TSVpFIDUxMgorI2RlZmluZSBMUEZDX01CWF9BQ0NfTEJVRl9TWiAxMjgKKworI2RlZmluZSBMUEZDX01CWF9ETVBfTUJYX1dPUkQgMHgwMDAwMDAwMQorI2RlZmluZSBMUEZDX01CWF9ETVBfTUJYX0JZVEUgMHgwMDAwMDAwMgorI2RlZmluZSBMUEZDX01CWF9ETVBfTUJYX0FMTCAoTFBGQ19NQlhfRE1QX01CWF9XT1JEIHwgTFBGQ19NQlhfRE1QX01CWF9CWVRFKQorCisjZGVmaW5lIExQRkNfQlNHX0RNUF9NQlhfUkRfTUJYIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBGQ19CU0dfRE1QX01CWF9SRF9CVUYgMHgwMDAwMDAwMgorI2RlZmluZSBMUEZDX0JTR19ETVBfTUJYX1dSX01CWCAweDAwMDAwMDA0CisjZGVmaW5lIExQRkNfQlNHX0RNUF9NQlhfV1JfQlVGIDB4MDAwMDAwMDgKKyNkZWZpbmUgTFBGQ19CU0dfRE1QX01CWF9BTEwgKExQRkNfQlNHX0RNUF9NQlhfUkRfTUJYIHwgXAorCQkJICAgICAgTFBGQ19CU0dfRE1QX01CWF9SRF9CVUYgfCBcCisJCQkgICAgICBMUEZDX0JTR19ETVBfTUJYX1dSX01CWCB8IFwKKwkJCSAgICAgIExQRkNfQlNHX0RNUF9NQlhfV1JfQlVGKQorCisjZGVmaW5lIExQRkNfTUJYX0RNUF9BTEwgMHhmZmZmCisjZGVmaW5lIExQRkNfTUJYX0FMTF9DTUQgMHhmZgorCisjZGVmaW5lIElESUFHX01CWEFDQ19NQkNNRF9JTkRYIDAKKyNkZWZpbmUgSURJQUdfTUJYQUNDX0RQTUFQX0lORFggMQorI2RlZmluZSBJRElBR19NQlhBQ0NfRFBDTlRfSU5EWCAyCisjZGVmaW5lIElESUFHX01CWEFDQ19XRENOVF9JTkRYIDMKKworLyogZXh0ZW50cyBhY2Nlc3MgKi8KKyNkZWZpbmUgTFBGQ19FWFRfQUNDX0NNRF9BUkcgMQorI2RlZmluZSBMUEZDX0VYVF9BQ0NfQlVGX1NJWkUgNDA5NgorCisjZGVmaW5lIExQRkNfRVhUX0FDQ19BVkFJTCAweDEKKyNkZWZpbmUgTFBGQ19FWFRfQUNDX0FMTE9DIDB4MgorI2RlZmluZSBMUEZDX0VYVF9BQ0NfRFJJVlIgMHg0CisjZGVmaW5lIExQRkNfRVhUX0FDQ19BTEwgICAoTFBGQ19FWFRfQUNDX0RSSVZSIHwgXAorCQkJICAgIExQRkNfRVhUX0FDQ19BVkFJTCB8IFwKKwkJCSAgICBMUEZDX0VYVF9BQ0NfQUxMT0MpCisKKyNkZWZpbmUgSURJQUdfRVhUQUNDX0VYTUFQX0lORFggMAorCiAjZGVmaW5lIFNJWkVfVTggIHNpemVvZih1aW50OF90KQogI2RlZmluZSBTSVpFX1UxNiBzaXplb2YodWludDE2X3QpCiAjZGVmaW5lIFNJWkVfVTMyIHNpemVvZih1aW50MzJfdCkKQEAgLTExMCw2ICsyMTUsMTEgQEAKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX1NUIDB4MDAwMDAwMDMKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX0NMIDB4MDAwMDAwMDQKIAorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9CQVJBQ0NfUkQgMHgwMDAwMDAwOAorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9CQVJBQ0NfV1IgMHgwMDAwMDAwOQorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9CQVJBQ0NfU1QgMHgwMDAwMDAwYQorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9CQVJBQ0NfQ0wgMHgwMDAwMDAwYgorCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1FVRUFDQ19SRCAweDAwMDAwMDExCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1FVRUFDQ19XUiAweDAwMDAwMDEyCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX1FVRUFDQ19TVCAweDAwMDAwMDEzCkBAIC0xMTksNiArMjI5LDE3IEBACiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19XUiAweDAwMDAwMDIyCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19TVCAweDAwMDAwMDIzCiAjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19DTCAweDAwMDAwMDI0CisKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfQ1RMQUNDX1JEIDB4MDAwMDAwMzEKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfQ1RMQUNDX1dSIDB4MDAwMDAwMzIKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfQ1RMQUNDX1NUIDB4MDAwMDAwMzMKKyNkZWZpbmUgTFBGQ19JRElBR19DTURfQ1RMQUNDX0NMIDB4MDAwMDAwMzQKKworI2RlZmluZSBMUEZDX0lESUFHX0NNRF9NQlhBQ0NfRFAgMHgwMDAwMDA0MQorI2RlZmluZSBMUEZDX0lESUFHX0JTR19NQlhBQ0NfRFAgMHgwMDAwMDA0MgorCisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0VYVEFDQ19SRCAweDAwMDAwMDUxCisKIAl1aW50MzJfdCBkYXRhW0xQRkNfSURJQUdfQ01EX0RBVEFfU0laRV07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAzMmEwODQ1Li4wMjNkYTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTY0NywyMSArNjQ3LDE1IEBACiAJCX0KIAkJbHBmY19jbGVhbnVwX3BlbmRpbmdfbWJveCh2cG9ydCk7CiAKLQkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgewogCQkJbHBmY19zbGk0X3VucmVnX2FsbF9ycGlzKHZwb3J0KTsKLQotCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgewogCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKIAkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwotCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQl9Ci0JCS8qCi0JCSAqIElmIFZQSSBpcyB1bnJlZ2VkLCBkcml2ZXIgbmVlZCB0byBkbyBJTklUX1ZQSQotCQkgKiBiZWZvcmUgcmUtcmVnaXN0ZXJpbmcKLQkJICovCi0JCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKLQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkvKgorCQkJKiBJZiBWUEkgaXMgdW5yZWdlZCwgZHJpdmVyIG5lZWQgdG8gZG8gSU5JVF9WUEkKKwkJCSogYmVmb3JlIHJlLXJlZ2lzdGVyaW5nCisJCQkqLwogCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCX0KQEAgLTg4MCw2ICs4NzQsOCBAQAogCQkJCQlwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgsCiAJCQkJCWlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSwKIAkJCQkJaXJzcC0+dWxwVGltZW91dCk7CisJCQlscGZjX3NsaTRfc2V0X2ZjZl9mbG9naV9mYWlsKHBoYmEsCisJCQkJCXBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7CiAJCQlmY2ZfaW5kZXggPSBscGZjX3NsaTRfZmNmX3JyX25leHRfaW5kZXhfZ2V0KHBoYmEpOwogCQkJcmMgPSBscGZjX3NsaTRfZmNmX3JyX25leHRfcHJvYyh2cG9ydCwgZmNmX2luZGV4KTsKIAkJCWlmIChyYykKQEAgLTEwOTYsMTEgKzEwOTIsMTQgQEAKIAkJCS8qIFNldCB0aGUgZmNmaSB0byB0aGUgZmNmaSB3ZSByZWdpc3RlcmVkIHdpdGggKi8KIAkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCA9IHBoYmEtPmZjZi5mY2ZpOwogCQl9Ci0JfSBlbHNlIGlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSB7Ci0JCXNwLT5jbW4ucmVxdWVzdF9tdWx0aXBsZV9OcG9ydCA9IDE7Ci0JCS8qIEZvciBGTE9HSSwgTGV0IEZMT0dJIHJzcCBzZXQgdGhlIE5Qb3J0SUQgZm9yIFZQSSAwICovCi0JCWljbWQtPnVscEN0X2ggPSAxOwotCQlpY21kLT51bHBDdF9sID0gMDsKKwl9IGVsc2UgeworCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgeworCQkJc3AtPmNtbi5yZXF1ZXN0X211bHRpcGxlX05wb3J0ID0gMTsKKwkJCS8qIEZvciBGTE9HSSwgTGV0IEZMT0dJIHJzcCBzZXQgdGhlIE5Qb3J0SUQgZm9yIFZQSSAwICovCisJCQlpY21kLT51bHBDdF9oID0gMTsKKwkJCWljbWQtPnVscEN0X2wgPSAwOworCQl9IGVsc2UKKwkJCXNwLT5jbW4ucmVxdWVzdF9tdWx0aXBsZV9OcG9ydCA9IDA7CiAJfQogCiAJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IExQRkNfVE9QT0xPR1lfTE9PUCkgewpAQCAtMzY1Niw3ICszNjU1LDggQEAKIAkJfQogCiAJCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKLQkJaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsJLyogWHJpICovCisJCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAvIHJ4X2lkICovCisJCWljbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkID0gb2xkY21kLT51bnNsaTMucmN2c2xpMy5veF9pZDsKIAkJcGNtZCA9ICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOwogCQkqKCh1aW50MzJfdCAqKSAocGNtZCkpID0gRUxTX0NNRF9BQ0M7CiAJCXBjbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKQEAgLTM2NzMsNyArMzY3Myw4IEBACiAJCQlyZXR1cm4gMTsKIAogCQlpY21kID0gJmVsc2lvY2ItPmlvY2I7Ci0JCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAqLworCQlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgLyByeF9pZCAqLworCQlpY21kLT51bnNsaTMucmN2c2xpMy5veF9pZCA9IG9sZGNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQ7CiAJCXBjbWQgPSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKIAogCQlpZiAobWJveCkKQEAgLTM2OTUsNyArMzY5Niw4IEBACiAJCQlyZXR1cm4gMTsKIAogCQlpY21kID0gJmVsc2lvY2ItPmlvY2I7Ci0JCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7IC8qIFhyaSAqLworCQlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgLyByeF9pZCAqLworCQlpY21kLT51bnNsaTMucmN2c2xpMy5veF9pZCA9IG9sZGNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQ7CiAJCXBjbWQgPSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKIAogCQltZW1jcHkocGNtZCwgKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgb2xkaW9jYi0+Y29udGV4dDIpLT52aXJ0LApAQCAtMzc4MSw3ICszNzgzLDggQEAKIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKIAlvbGRjbWQgPSAmb2xkaW9jYi0+aW9jYjsKLQlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgKi8KKwlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgLyByeF9pZCAqLworCWljbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkID0gb2xkY21kLT51bnNsaTMucmN2c2xpMy5veF9pZDsKIAlwY21kID0gKHVpbnQ4X3QgKikgKCgoc3RydWN0IGxwZmNfZG1hYnVmICopIGVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7CiAKIAkqKCh1aW50MzJfdCAqKSAocGNtZCkpID0gRUxTX0NNRF9MU19SSlQ7CkBAIC0zODUzLDcgKzM4NTYsOCBAQAogCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCW9sZGNtZCA9ICZvbGRpb2NiLT5pb2NiOwotCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAqLworCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAvIHJ4X2lkICovCisJaWNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQgPSBvbGRjbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkOwogCiAJLyogWG1pdCBBRElTQyBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCkBAIC0zOTMxLDcgKzM5MzUsOSBAQAogCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCW9sZGNtZCA9ICZvbGRpb2NiLT5pb2NiOwotCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAqLworCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAvIHJ4X2lkICovCisJaWNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQgPSBvbGRjbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkOworCiAJLyogWG1pdCBQUkxJIEFDQyByZXNwb25zZSB0YWcgPHVscElvVGFnPiAqLwogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKIAkJCSAiMDEzMSBYbWl0IFBSTEkgQUNDIHJlc3BvbnNlIHRhZyB4JXggeHJpIHgleCwgIgpAQCAtNDAzNSw3ICs0MDQxLDkgQEAKIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKIAlvbGRjbWQgPSAmb2xkaW9jYi0+aW9jYjsKLQlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgKi8KKwlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgLyByeF9pZCAqLworCWljbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkID0gb2xkY21kLT51bnNsaTMucmN2c2xpMy5veF9pZDsKKwogCS8qIFhtaXQgUk5JRCBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCiAJCQkgIjAxMzIgWG1pdCBSTklEIEFDQyByZXNwb25zZSB0YWcgeCV4IHhyaSB4JXhcbiIsCkBAIC00MTYzLDcgKzQxNzEsOSBAQAogCWlmICghZWxzaW9jYikKIAkJcmV0dXJuIDE7CiAKLQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQgPSBvbGRpb2NiLT5pb2NiLnVscENvbnRleHQ7CS8qIFhyaSAqLworCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCA9IG9sZGlvY2ItPmlvY2IudWxwQ29udGV4dDsgIC8qIFhyaSAvIHJ4X2lkICovCisJZWxzaW9jYi0+aW9jYi51bnNsaTMucmN2c2xpMy5veF9pZCA9IG9sZGlvY2ItPmlvY2IudW5zbGkzLnJjdnNsaTMub3hfaWQ7CisKIAkvKiBYbWl0IEVDSE8gQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCiAJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRUxTLAogCQkJICIyODc2IFhtaXQgRUNITyBBQ0MgcmVzcG9uc2UgdGFnIHgleCB4cmkgeCV4XG4iLApAQCAtNTA1NCwxMyArNTA2NCwxNSBAQAogCXVpbnQ4X3QgKnBjbWQ7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2I7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0JdWludDE2X3QgeHJpOworCXVpbnQxNl90IG94aWQ7CisJdWludDE2X3QgcnhpZDsKIAl1aW50MzJfdCBjbWRzaXplOwogCiAJbWIgPSAmcG1iLT51Lm1iOwogCiAJbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBwbWItPmNvbnRleHQyOwotCXhyaSA9ICh1aW50MTZfdCkgKCh1bnNpZ25lZCBsb25nKShwbWItPmNvbnRleHQxKSk7CisJcnhpZCA9ICh1aW50MTZfdCkgKCh1bnNpZ25lZCBsb25nKShwbWItPmNvbnRleHQxKSAmIDB4ZmZmZik7CisJb3hpZCA9ICh1aW50MTZfdCkgKCgodW5zaWduZWQgbG9uZykocG1iLT5jb250ZXh0MSkgPj4gMTYpICYgMHhmZmZmKTsKIAlwbWItPmNvbnRleHQxID0gTlVMTDsKIAlwbWItPmNvbnRleHQyID0gTlVMTDsKIApAQCAtNTA4Miw3ICs1MDk0LDggQEAKIAkJcmV0dXJuOwogCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwotCWljbWQtPnVscENvbnRleHQgPSB4cmk7CisJaWNtZC0+dWxwQ29udGV4dCA9IHJ4aWQ7CisJaWNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQgPSBveGlkOwogCiAJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOwogCSooKHVpbnQzMl90ICopIChwY21kKSkgPSBFTFNfQ01EX0FDQzsKQEAgLTUxMzcsMTMgKzUxNTAsMTYgQEAKIAl1aW50OF90ICpwY21kOwogCXN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCXVpbnQxNl90IHhyaSwgc3RhdHVzOworCXVpbnQxNl90IHN0YXR1czsKKwl1aW50MTZfdCBveGlkOworCXVpbnQxNl90IHJ4aWQ7CiAJdWludDMyX3QgY21kc2l6ZTsKIAogCW1iID0gJnBtYi0+dS5tYjsKIAogCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgcG1iLT5jb250ZXh0MjsKLQl4cmkgPSAodWludDE2X3QpICgodW5zaWduZWQgbG9uZykocG1iLT5jb250ZXh0MSkpOworCXJ4aWQgPSAodWludDE2X3QpICgodW5zaWduZWQgbG9uZykocG1iLT5jb250ZXh0MSkgJiAweGZmZmYpOworCW94aWQgPSAodWludDE2X3QpICgoKHVuc2lnbmVkIGxvbmcpKHBtYi0+Y29udGV4dDEpID4+IDE2KSAmIDB4ZmZmZik7CiAJcG1iLT5jb250ZXh0MSA9IE5VTEw7CiAJcG1iLT5jb250ZXh0MiA9IE5VTEw7CiAKQEAgLTUxNjUsNyArNTE4MSw4IEBACiAJCXJldHVybjsKIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKLQlpY21kLT51bHBDb250ZXh0ID0geHJpOworCWljbWQtPnVscENvbnRleHQgPSByeGlkOworCWljbWQtPnVuc2xpMy5yY3ZzbGkzLm94X2lkID0gb3hpZDsKIAogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKIAkqKCh1aW50MzJfdCAqKSAocGNtZCkpID0gRUxTX0NNRF9BQ0M7CkBAIC01MjM4LDggKzUyNTUsOSBAQAogCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9BVE9NSUMpOwogCWlmIChtYm94KSB7CiAJCWxwZmNfcmVhZF9sbmtfc3RhdChwaGJhLCBtYm94KTsKLQkJbWJveC0+Y29udGV4dDEgPQotCQkgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpIGNtZGlvY2ItPmlvY2IudWxwQ29udGV4dCk7CisJCW1ib3gtPmNvbnRleHQxID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkoKGNtZGlvY2ItPmlvY2IudW5zbGkzLnJjdnNsaTMub3hfaWQgPDwgMTYpIHwKKwkJCWNtZGlvY2ItPmlvY2IudWxwQ29udGV4dCkpOyAvKiByeF9pZCAqLwogCQltYm94LT5jb250ZXh0MiA9IGxwZmNfbmxwX2dldChuZGxwKTsKIAkJbWJveC0+dnBvcnQgPSB2cG9ydDsKIAkJbWJveC0+bWJveF9jbXBsID0gbHBmY19lbHNfcnNwX3Jsc19hY2M7CkBAIC01MzE0LDcgKzUzMzIsOCBAQAogCXBjbWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsgLyogU2tpcCBwYXN0IGNvbW1hbmQgKi8KIAogCS8qIHVzZSB0aGUgY29tbWFuZCdzIHhyaSBpbiB0aGUgcmVzcG9uc2UgKi8KLQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQgPSBjbWRpb2NiLT5pb2NiLnVscENvbnRleHQ7CisJZWxzaW9jYi0+aW9jYi51bHBDb250ZXh0ID0gY21kaW9jYi0+aW9jYi51bHBDb250ZXh0OyAgLyogWHJpIC8gcnhfaWQgKi8KKwllbHNpb2NiLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLm94X2lkID0gY21kaW9jYi0+aW9jYi51bnNsaTMucmN2c2xpMy5veF9pZDsKIAogCXJ0dl9yc3AgPSAoc3RydWN0IFJUVl9SU1AgKilwY21kOwogCkBAIC01Mzk5LDggKzU0MTgsOSBAQAogCQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfQVRPTUlDKTsKIAkJaWYgKG1ib3gpIHsKIAkJCWxwZmNfcmVhZF9sbmtfc3RhdChwaGJhLCBtYm94KTsKLQkJCW1ib3gtPmNvbnRleHQxID0KLQkJCSAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZykgY21kaW9jYi0+aW9jYi51bHBDb250ZXh0KTsKKwkJCW1ib3gtPmNvbnRleHQxID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkJKChjbWRpb2NiLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLm94X2lkIDw8IDE2KSB8CisJCQkJY21kaW9jYi0+aW9jYi51bHBDb250ZXh0KSk7IC8qIHJ4X2lkICovCiAJCQltYm94LT5jb250ZXh0MiA9IGxwZmNfbmxwX2dldChuZGxwKTsKIAkJCW1ib3gtPnZwb3J0ID0gdnBvcnQ7CiAJCQltYm94LT5tYm94X2NtcGwgPSBscGZjX2Vsc19yc3BfcnBzX2FjYzsKQEAgLTU1NTQsNyArNTU3NCw4IEBACiAKIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJb2xkY21kID0gJm9sZGlvY2ItPmlvY2I7Ci0JaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsJLyogWHJpICovCisJaWNtZC0+dWxwQ29udGV4dCA9IG9sZGNtZC0+dWxwQ29udGV4dDsJLyogWHJpIC8gcnhfaWQgKi8KKwlpY21kLT51bnNsaTMucmN2c2xpMy5veF9pZCA9IG9sZGNtZC0+dW5zbGkzLnJjdnNsaTMub3hfaWQ7CiAKIAlwY21kID0gKCgoc3RydWN0IGxwZmNfZG1hYnVmICopIGVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7CiAJKigodWludDMyX3QgKikgKHBjbWQpKSA9IEVMU19DTURfQUNDOwpAQCAtNjU4Niw3ICs2NjA3LDcgQEAKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKKwlpbnQgaSA9IDA7CiAKIAkvKiBUaGUgcGh5c2ljYWwgcG9ydHMgYXJlIGFsd2F5cyB2cGkgMCAtIHRyYW5zbGF0ZSBpcyB1bm5lY2Vzc2FyeS4gKi8KIAlpZiAodnBpID4gMCkgewpAQCAtNjYwOSw3ICs2NjMwLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2cG9ydCwgJnBoYmEtPnBvcnRfbGlzdCwgbGlzdGVudHJ5KSB7Ci0JCWlmICh2cG9ydC0+dnBpID09IHZwaSkgeworCQlpZiAodnBvcnQtPnZwaSA9PSBpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdnBvcnQ7CiAJCX0KQEAgLTc3ODcsNiArNzgwOCw3IEBACiB7CiAJdWludDE2X3QgeHJpID0gYmZfZ2V0KGxwZmNfd2NxZV94YV94cmksIGF4cmkpOwogCXVpbnQxNl90IHJ4aWQgPSBiZl9nZXQobHBmY193Y3FlX3hhX3JlbW90ZV94aWQsIGF4cmkpOworCXVpbnQxNl90IGx4cmkgPSAwOwogCiAJc3RydWN0IGxwZmNfc2dscSAqc2dscV9lbnRyeSA9IE5VTEwsICpzZ2xxX25leHQgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgaWZsYWcgPSAwOwpAQCAtNzgxNSw3ICs3ODM3LDEyIEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJnBoYmEtPnNsaTRfaGJhLmFidHNfc2dsX2xpc3RfbG9jayk7Ci0Jc2dscV9lbnRyeSA9IF9fbHBmY19nZXRfYWN0aXZlX3NnbHEocGhiYSwgeHJpKTsKKwlseHJpID0gbHBmY19zbGk0X3hyaV9pbnJhbmdlKHBoYmEsIHhyaSk7CisJaWYgKGx4cmkgPT0gTk9fWFJJKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFnKTsKKwkJcmV0dXJuOworCX0KKwlzZ2xxX2VudHJ5ID0gX19scGZjX2dldF9hY3RpdmVfc2dscShwaGJhLCBseHJpKTsKIAlpZiAoIXNnbHFfZW50cnkgfHwgKHNnbHFfZW50cnktPnNsaTRfeHJpdGFnICE9IHhyaSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDE4ZDBkYmYuLjBiNDdhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0xMTA5LDYgKzExMDksMjggQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGk0X2NsZWFyX2ZjZl9ycl9ibWFzaworICogQHBoYmEgcG9pbnRlciB0byB0aGUgc3RydWN0IGxwZmNfaGJhIGZvciB0aGlzIHBvcnQuCisgKiBUaGlzIGZ1Y25jdGlvbiByZXNldHMgdGhlIHJvdW5kIHJvYmluIGJpdCBtYXNrIGFuZCBjbGVhcnMgdGhlCisgKiBmY2YgcHJpb3JpdHkgbGlzdC4gVGhlIGxpc3QgZGVsZXRpb25zIGFyZSBkb25lIHdoaWxlIGhvbGRpbmcgdGhlCisgKiBoYmFsb2NrLiBUaGUgT05fTElTVCBmbGFnIGFuZCB0aGUgRkxPR0lfRkFJTEVEIGZsYWdzIGFyZSBjbGVhcmVkCisgKiBmcm9tIHRoZSBscGZjX2ZjZl9wcmkgcmVjb3JkLgorICoqLwordm9pZAorbHBmY19zbGk0X2NsZWFyX2ZjZl9ycl9ibWFzayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IGxwZmNfZmNmX3ByaSAqZmNmX3ByaTsKKwlzdHJ1Y3QgbHBmY19mY2ZfcHJpICpuZXh0X2ZjZl9wcmk7CisJbWVtc2V0KHBoYmEtPmZjZi5mY2ZfcnJfYm1hc2ssIDAsIHNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmY2ZfcHJpLCBuZXh0X2ZjZl9wcmksCisJCQkJJnBoYmEtPmZjZi5mY2ZfcHJpX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZmNmX3ByaS0+bGlzdCk7CisJCWZjZl9wcmktPmZjZl9yZWMuZmxhZyA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CiBzdGF0aWMgdm9pZAogbHBmY19tYnhfY21wbF9yZWdfZmNmaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCiB7CkBAIC0xMTMwLDcgKzExNTIsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKIAkvKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgRkNvRSBldmVudCwgcmVzdGFydCBGQ0YgdGFibGUgc2Nhbi4gKi8KLQlpZiAobHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQocGhiYSwgTFBGQ19VTlJFR19GQ0YpKQorCWlmICgoIShwaGJhLT5oYmFfZmxhZyAmIEZDRl9SUl9JTlBST0cpKSAmJgorCQlscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChwaGJhLCBMUEZDX1VOUkVHX0ZDRikpCiAJCWdvdG8gZmFpbF9vdXQ7CiAKIAkvKiBNYXJrIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBGQ0YgdGFibGUgc2NhbiAqLwpAQCAtMTI1MCw2ICsxMjczLDMwIEBACiB9CiAKIC8qKgorICogbHBmY191cGRhdGVfZmNmX3JlY29yZCAtIFVwZGF0ZSBkcml2ZXIgZmNmIHJlY29yZAorICogX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkX3ByaSAtIHVwZGF0ZSB0aGUgbHBmY19mY2ZfcHJpIHJlY29yZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9pbmRleDogSW5kZXggZm9yIHRoZSBscGZjX2ZjZl9yZWNvcmQuCisgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gaGJhIGZjZiByZWNvcmQuCisgKgorICogVGhpcyByb3V0aW5lIHVwZGF0ZXMgdGhlIGRyaXZlciBGQ0YgcHJpb3JpdHkgcmVjb3JkIGZyb20gdGhlIG5ldyBIQkEgRkNGCisgKiByZWNvcmQuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKiovCitzdGF0aWMgdm9pZAorX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkX3ByaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IGZjZl9pbmRleCwKKwkJCQkgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkCisJCQkJICkKK3sKKwlzdHJ1Y3QgbHBmY19mY2ZfcHJpICpmY2ZfcHJpOworCisJZmNmX3ByaSA9ICZwaGJhLT5mY2YuZmNmX3ByaVtmY2ZfaW5kZXhdOworCWZjZl9wcmktPmZjZl9yZWMuZmNmX2luZGV4ID0gZmNmX2luZGV4OworCS8qIEZDRiByZWNvcmQgcHJpb3JpdHkgKi8KKwlmY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5ID0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eTsKKworfQorCisvKioKICAqIGxwZmNfY29weV9mY2ZfcmVjb3JkIC0gQ29weSBmY2YgaW5mb3JtYXRpb24gdG8gbHBmY19oYmEuCiAgKiBAZmNmOiBwb2ludGVyIHRvIGRyaXZlciBmY2YgcmVjb3JkLgogICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGZjZiByZWNvcmQuCkBAIC0xMzMyLDYgKzEzNzksOSBAQAogCWZjZl9yZWMtPmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKIAlmY2ZfcmVjLT52bGFuX2lkID0gdmxhbl9pZDsKIAlmY2ZfcmVjLT5mbGFnIHw9IChmbGFnIHwgUkVDT1JEX1ZBTElEKTsKKwlfX2xwZmNfdXBkYXRlX2ZjZl9yZWNvcmRfcHJpKHBoYmEsCisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCksCisJCQkJIG5ld19mY2ZfcmVjb3JkKTsKIH0KIAogLyoqCkBAIC0xODM0LDYgKzE4ODQsOCBAQAogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCFscGZjX2ZhYl9uYW1lX21hdGNoKGZjZl9yZWMtPmZhYnJpY19uYW1lLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiBmYWxzZTsKKwlpZiAoZmNmX3JlYy0+cHJpb3JpdHkgIT0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSkKKwkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0xODk3LDYgKzE5NDksMTUyIEBACiB9CiAKIC8qKgorICogbHBmY19zbGk0X2ZjZl9wcmlfbGlzdF9kZWwKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGZjZl9pbmRleCB0aGUgaW5kZXggb2YgdGhlIGZjZiByZWNvcmQgdG8gZGVsZXRlCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSBvbiBsaXN0IGZsYWcgb2YgdGhlIGZjZl9pbmRleCB0byBiZSBkZWxldGVkLgorICogSWYgaXQgaXMgb25lIHRoZSBsaXN0IHRoZW4gaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCBhbmQgdGhlIGZsYWcKKyAqIGlzIGNsZWFyZWQuIFRoaXMgcm91dGluZSBncmFiIHRoZSBoYmFsb2NrIGJlZm9yZSByZW1vdmluZyB0aGUgZmNmCisgKiByZWNvcmQgZnJvbSB0aGUgbGlzdC4KKyAqKi8KK3N0YXRpYyB2b2lkIGxwZmNfc2xpNF9mY2ZfcHJpX2xpc3RfZGVsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXVpbnQxNl90IGZjZl9pbmRleCkKK3sKKwlzdHJ1Y3QgbHBmY19mY2ZfcHJpICpuZXdfZmNmX3ByaTsKKworCW5ld19mY2ZfcHJpID0gJnBoYmEtPmZjZi5mY2ZfcHJpW2ZjZl9pbmRleF07CisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJIjMwNTggZGVsZXRpbmcgaWR4IHgleCBwcmkgeCV4IGZsZyB4JXhcbiIsCisJCWZjZl9pbmRleCwgbmV3X2ZjZl9wcmktPmZjZl9yZWMucHJpb3JpdHksCisJCSBuZXdfZmNmX3ByaS0+ZmNmX3JlYy5mbGFnKTsKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAobmV3X2ZjZl9wcmktPmZjZl9yZWMuZmxhZyAmIExQRkNfRkNGX09OX1BSSV9MSVNUKSB7CisJCWlmIChwaGJhLT5mY2YuY3VycmVudF9yZWMucHJpb3JpdHkgPT0KKwkJCQluZXdfZmNmX3ByaS0+ZmNmX3JlYy5wcmlvcml0eSkKKwkJCXBoYmEtPmZjZi5lbGlnaWJsZV9mY2ZfY250LS07CisJCWxpc3RfZGVsX2luaXQoJm5ld19mY2ZfcHJpLT5saXN0KTsKKwkJbmV3X2ZjZl9wcmktPmZjZl9yZWMuZmxhZyAmPSB+TFBGQ19GQ0ZfT05fUFJJX0xJU1Q7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3NldF9mY2ZfZmxvZ2lfZmFpbAorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZmNmX2luZGV4IHRoZSBpbmRleCBvZiB0aGUgZmNmIHJlY29yZCB0byB1cGRhdGUKKyAqIFRoaXMgcm91dGluZSBhY3F1aXJlcyB0aGUgaGJhbG9jayBhbmQgdGhlbiBzZXQgdGhlIExQRkNfRkNGX0ZMT0dJX0ZBSUxFRAorICogZmxhZyBzbyB0aGUgdGhlIHJvdW5kIHJvYmluIHNsZWN0aW9uIGZvciB0aGUgcGFydGljdWxhciBwcmlvcml0eSBsZXZlbAorICogd2lsbCB0cnkgYSBkaWZmZXJlbnQgZmNmIHJlY29yZCB0aGF0IGRvZXMgbm90IGhhdmUgdGhpcyBiaXQgc2V0LgorICogSWYgdGhlIGZjZiByZWNvcmQgaXMgcmUtcmVhZCBmb3IgYW55IHJlYXNvbiB0aGlzIGZsYWcgaXMgY2xlYXJlZCBicmZvcmUKKyAqIGFkZGluZyBpdCB0byB0aGUgcHJpb3JpdHkgbGlzdC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2xpNF9zZXRfZmNmX2Zsb2dpX2ZhaWwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBmY2ZfaW5kZXgpCit7CisJc3RydWN0IGxwZmNfZmNmX3ByaSAqbmV3X2ZjZl9wcmk7CisJbmV3X2ZjZl9wcmkgPSAmcGhiYS0+ZmNmLmZjZl9wcmlbZmNmX2luZGV4XTsKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwluZXdfZmNmX3ByaS0+ZmNmX3JlYy5mbGFnIHw9IExQRkNfRkNGX0ZMT0dJX0ZBSUxFRDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9mY2ZfcHJpX2xpc3RfYWRkCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2ZfaW5kZXggdGhlIGluZGV4IG9mIHRoZSBmY2YgcmVjb3JkIHRvIGFkZAorICogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgcHJpb3JpdHkgb2YgdGhlIGZjZl9pbmRleCB0byBiZSBhZGRlZC4KKyAqIElmIGl0IGlzIGEgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgY3VycmVudCBoZWFkIG9mIHRoZSBmY2ZfcHJpIGxpc3QKKyAqIHRoZW4gaXQgaXMgYWRkZWQgdG8gdGhlIGxpc3QgaW4gdGhlIHJpZ2h0IG9yZGVyLgorICogSWYgaXQgaXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhlIGN1cnJlbnQgaGVhZCBvZiB0aGUgbGlzdCB0aGVuIGl0CisgKiBpcyBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCBhbmQgaXRzIGJpdCBpbiB0aGUgcnJfYm1hc2sgaXMgc2V0LgorICogSWYgdGhlIGZjZl9pbmRleCB0byBiZSBhZGRlZCBpcyBvZiBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBjdXJyZW50CisgKiBoZWFkIG9mIHRoZSBsaXN0IHRoZW4gdGhlIHJyX2JtYXNrIGlzIGNsZWFyZWQsIGl0cyBiaXQgaXMgc2V0IGluIHRoZQorICogcnJfYm1hc2sgYW5kIGl0IGlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgorICogcmV0dXJuczoKKyAqIDA9c3VjY2VzcyAxPWZhaWx1cmUKKyAqKi8KK2ludCBscGZjX3NsaTRfZmNmX3ByaV9saXN0X2FkZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IGZjZl9pbmRleCwKKwlzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCit7CisJdWludDE2X3QgY3VycmVudF9mY2ZfcHJpOworCXVpbnQxNl90IGxhc3RfaW5kZXg7CisJc3RydWN0IGxwZmNfZmNmX3ByaSAqZmNmX3ByaTsKKwlzdHJ1Y3QgbHBmY19mY2ZfcHJpICpuZXh0X2ZjZl9wcmk7CisJc3RydWN0IGxwZmNfZmNmX3ByaSAqbmV3X2ZjZl9wcmk7CisJaW50IHJldDsKKworCW5ld19mY2ZfcHJpID0gJnBoYmEtPmZjZi5mY2ZfcHJpW2ZjZl9pbmRleF07CisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJIjMwNTkgYWRkaW5nIGlkeCB4JXggcHJpIHgleCBmbGcgeCV4XG4iLAorCQlmY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHksCisJCSBuZXdfZmNmX3ByaS0+ZmNmX3JlYy5mbGFnKTsKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAobmV3X2ZjZl9wcmktPmZjZl9yZWMuZmxhZyAmIExQRkNfRkNGX09OX1BSSV9MSVNUKQorCQlsaXN0X2RlbF9pbml0KCZuZXdfZmNmX3ByaS0+bGlzdCk7CisJbmV3X2ZjZl9wcmktPmZjZl9yZWMuZmNmX2luZGV4ID0gZmNmX2luZGV4OworCW5ld19mY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5ID0gbmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eTsKKwlpZiAobGlzdF9lbXB0eSgmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCkpIHsKKwkJbGlzdF9hZGQoJm5ld19mY2ZfcHJpLT5saXN0LCAmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCk7CisJCXJldCA9IGxwZmNfc2xpNF9mY2ZfcnJfaW5kZXhfc2V0KHBoYmEsCisJCQkJbmV3X2ZjZl9wcmktPmZjZl9yZWMuZmNmX2luZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCisJbGFzdF9pbmRleCA9IGZpbmRfZmlyc3RfYml0KHBoYmEtPmZjZi5mY2ZfcnJfYm1hc2ssCisJCQkJTFBGQ19TTEk0X0ZDRl9UQkxfSU5EWF9NQVgpOworCWlmIChsYXN0X2luZGV4ID49IExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYKSB7CisJCXJldCA9IDA7IC8qIEVtcHR5IHJyIGxpc3QgKi8KKwkJZ290byBvdXQ7CisJfQorCWN1cnJlbnRfZmNmX3ByaSA9IHBoYmEtPmZjZi5mY2ZfcHJpW2xhc3RfaW5kZXhdLmZjZl9yZWMucHJpb3JpdHk7CisJaWYgKG5ld19mY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5IDw9ICBjdXJyZW50X2ZjZl9wcmkpIHsKKwkJbGlzdF9hZGQoJm5ld19mY2ZfcHJpLT5saXN0LCAmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCk7CisJCWlmIChuZXdfZmNmX3ByaS0+ZmNmX3JlYy5wcmlvcml0eSA8ICBjdXJyZW50X2ZjZl9wcmkpIHsKKwkJCW1lbXNldChwaGJhLT5mY2YuZmNmX3JyX2JtYXNrLCAwLAorCQkJCXNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCQkJLyogZmNmc19hdF90aGlzX3ByaW9yaXR5X2xldmVsID0gMTsgKi8KKwkJCXBoYmEtPmZjZi5lbGlnaWJsZV9mY2ZfY250ID0gMTsKKwkJfSBlbHNlCisJCQkvKiBmY2ZzX2F0X3RoaXNfcHJpb3JpdHlfbGV2ZWwrKzsgKi8KKwkJCXBoYmEtPmZjZi5lbGlnaWJsZV9mY2ZfY250Kys7CisJCXJldCA9IGxwZmNfc2xpNF9mY2ZfcnJfaW5kZXhfc2V0KHBoYmEsCisJCQkJbmV3X2ZjZl9wcmktPmZjZl9yZWMuZmNmX2luZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjZl9wcmksIG5leHRfZmNmX3ByaSwKKwkJCQkmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCwgbGlzdCkgeworCQlpZiAobmV3X2ZjZl9wcmktPmZjZl9yZWMucHJpb3JpdHkgPD0KKwkJCQlmY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5KSB7CisJCQlpZiAoZmNmX3ByaS0+bGlzdC5wcmV2ID09ICZwaGJhLT5mY2YuZmNmX3ByaV9saXN0KQorCQkJCWxpc3RfYWRkKCZuZXdfZmNmX3ByaS0+bGlzdCwKKwkJCQkJCSZwaGJhLT5mY2YuZmNmX3ByaV9saXN0KTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZCgmbmV3X2ZjZl9wcmktPmxpc3QsCisJCQkJCSAmKChzdHJ1Y3QgbHBmY19mY2ZfcHJpICopCisJCQkJCWZjZl9wcmktPmxpc3QucHJldiktPmxpc3QpOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKGZjZl9wcmktPmxpc3QubmV4dCA9PSAmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdAorCQkJfHwgbmV3X2ZjZl9wcmktPmZjZl9yZWMucHJpb3JpdHkgPAorCQkJCW5leHRfZmNmX3ByaS0+ZmNmX3JlYy5wcmlvcml0eSkgeworCQkJbGlzdF9hZGQoJm5ld19mY2ZfcHJpLT5saXN0LCAmZmNmX3ByaS0+bGlzdCk7CisJCQlyZXQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKG5ld19mY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5ID4gZmNmX3ByaS0+ZmNmX3JlYy5wcmlvcml0eSkKKwkJCWNvbnRpbnVlOworCisJfQorCXJldCA9IDE7CitvdXQ6CisJLyogd2UgdXNlID0gaW5zdGVhZCBvZiB8PSB0byBjbGVhciB0aGUgRkxPR0lfRkFJTEVEIGZsYWcuICovCisJbmV3X2ZjZl9wcmktPmZjZl9yZWMuZmxhZyA9IExQRkNfRkNGX09OX1BSSV9MSVNUOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBscGZjX21ieF9jbXBsX2ZjZl9zY2FuX3JlYWRfZmNmX3JlYyAtIGZjZiBzY2FuIHJlYWRfZmNmIG1ib3ggY21wbCBoYW5kbGVyLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAbWJveHE6IHBvaW50ZXIgdG8gbWFpbGJveCBvYmplY3QuCkBAIC0xOTU4LDYgKzIxNTYsOSBAQAogCSAqIHJlY29yZCBmb3Igcm91bmRyb2JpbiBGQ0YgZmFpbG92ZXIuCiAJICovCiAJaWYgKCFyYykgeworCQlscGZjX3NsaTRfZmNmX3ByaV9saXN0X2RlbChwaGJhLAorCQkJCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwKKwkJCQkJICAgICAgIG5ld19mY2ZfcmVjb3JkKSk7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19GSVAsCiAJCQkJIjI3ODEgRkNGICh4JXgpIGZhaWxlZCBjb25uZWN0aW9uICIKIAkJCQkibGlzdCBjaGVjazogKHgleC94JXgpXG4iLApAQCAtMjAwNSw3ICsyMjA2LDggQEAKIAkJZ290byByZWFkX25leHRfZmNmOwogCX0gZWxzZSB7CiAJCWZjZl9pbmRleCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7Ci0JCXJjID0gbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9zZXQocGhiYSwgZmNmX2luZGV4KTsKKwkJcmMgPSBscGZjX3NsaTRfZmNmX3ByaV9saXN0X2FkZChwaGJhLCBmY2ZfaW5kZXgsCisJCQkJCQkJbmV3X2ZjZl9yZWNvcmQpOwogCQlpZiAocmMpCiAJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJfQpAQCAtMjAxOCw3ICsyMjIwLDggQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0lOX1VTRSkgewotCQlpZiAobHBmY19zbGk0X2ZjZl9yZWNvcmRfbWF0Y2gocGhiYSwgJnBoYmEtPmZjZi5jdXJyZW50X3JlYywKKwkJaWYgKHBoYmEtPmNmZ19mY2ZfZmFpbG92ZXJfcG9saWN5ID09IExQRkNfRkNGX0ZPViAmJgorCQkJbHBmY19zbGk0X2ZjZl9yZWNvcmRfbWF0Y2gocGhiYSwgJnBoYmEtPmZjZi5jdXJyZW50X3JlYywKIAkJICAgIG5ld19mY2ZfcmVjb3JkLCB2bGFuX2lkKSkgewogCQkJaWYgKGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCkgPT0KIAkJCSAgICBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpIHsKQEAgLTIyMzIsNyArMjQzNSw4IEBACiAJCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpCiAJCQkJcmV0dXJuOwogCi0JCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0lOX1VTRSkgeworCQkJaWYgKHBoYmEtPmNmZ19mY2ZfZmFpbG92ZXJfcG9saWN5ID09IExQRkNfRkNGX0ZPViAmJgorCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9JTl9VU0UpIHsKIAkJCQkvKgogCQkJCSAqIEluIGNhc2UgdGhlIGN1cnJlbnQgaW4tdXNlIEZDRiByZWNvcmQgbm8KIAkJCQkgKiBsb25nZXIgZXhpc3RlZCBkdXJpbmcgRkNGIGRpc2NvdmVyeSB0aGF0CkBAIC0yMjQ3LDcgKzI0NTEsNiBAQAogCQkJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0ZPVjsKIAkJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCQkJCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKIAkJCQlscGZjX3NsaTRfZmNmX3NjYW5fcmVhZF9mY2ZfcmVjKHBoYmEsCiAJCQkJCQlMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CiAJCQkJcmV0dXJuOwpAQCAtMjQyNCw3ICsyNjI3LDggQEAKIAogCS8qIFVwZGF0ZSB0aGUgZWxpZ2libGUgRkNGIHJlY29yZCBpbmRleCBibWFzayAqLwogCWZjZl9pbmRleCA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmNmX2luZGV4LCBuZXdfZmNmX3JlY29yZCk7Ci0JcmMgPSBscGZjX3NsaTRfZmNmX3JyX2luZGV4X3NldChwaGJhLCBmY2ZfaW5kZXgpOworCisJcmMgPSBscGZjX3NsaTRfZmNmX3ByaV9saXN0X2FkZChwaGJhLCBmY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKTsKIAogb3V0OgogCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKQEAgLTI2NDUsNiArMjg0OSw3IEBACiAJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZGSV9SRUdJU1RFUkVEOwogCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPT0gTFBGQ19GQUJSSUNfQ0ZHX0xJTkspIHsKQEAgLTI4OTMsOCArMzA5OCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKiBSZXNldCBGQ0Ygcm91bmRyb2JpbiBibWFzayBmb3IgbmV3IGRpc2NvdmVyeSAqLwotCQltZW1zZXQocGhiYS0+ZmNmLmZjZl9ycl9ibWFzaywgMCwKLQkJICAgICAgIHNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCQlscGZjX3NsaTRfY2xlYXJfZmNmX3JyX2JtYXNrKHBoYmEpOwogCX0KIAogCXJldHVybjsKQEAgLTU1OTIsNyArNTc5Niw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAogCS8qIFJlc2V0IEZDRiByb3VuZHJvYmluIGJtYXNrIGZvciBuZXcgZGlzY292ZXJ5ICovCi0JbWVtc2V0KHBoYmEtPmZjZi5mY2ZfcnJfYm1hc2ssIDAsIHNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCWxwZmNfc2xpNF9jbGVhcl9mY2ZfcnJfYm1hc2socGhiYSk7CiAKIAlyYyA9IGxwZmNfc2xpNF9mY2Zfc2Nhbl9yZWFkX2ZjZl9yZWMocGhiYSwgTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggYWI0YzRkNi4uMDQ2ZWRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMzQ3MCwxMSArMzQ3MCwxNiBAQAogICAgb3IgQ01EX0lPQ0JfUkNWX1NFUTY0X0NYICgweEI1KSAqLwogCiBzdHJ1Y3QgcmN2X3NsaTMgewotCXVpbnQzMl90IHdvcmQ4UnN2ZDsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1aW50MTZfdCBveF9pZDsKKwl1aW50MTZfdCBzZXFfY250OworCiAJdWludDE2X3QgdnBpOwogCXVpbnQxNl90IHdvcmQ5UnN2ZDsKICNlbHNlICAvKiAgX19MSVRUTEVfRU5ESUFOICovCisJdWludDE2X3Qgc2VxX2NudDsKKwl1aW50MTZfdCBveF9pZDsKKwogCXVpbnQxNl90IHdvcmQ5UnN2ZDsKIAl1aW50MTZfdCB2cGk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCmluZGV4IDExZTI2YTIuLjdmODAwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaApAQCAtMTcwLDE1ICsxNzAsOCBAQAogI2RlZmluZSBMUEZDX1BDSV9GVU5DMwkJMwogI2RlZmluZSBMUEZDX1BDSV9GVU5DNAkJNAogCi0vKiBTTEk0IGludGVyZmFjZSB0eXBlLTIgY29udHJvbCByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIExQRkNfQ1RMX1BPUlRfU0VNX09GRlNFVAkweDQwMAotI2RlZmluZSBMUEZDX0NUTF9QT1JUX1NUQV9PRkZTRVQJMHg0MDQKLSNkZWZpbmUgTFBGQ19DVExfUE9SVF9DVExfT0ZGU0VUCTB4NDA4Ci0jZGVmaW5lIExQRkNfQ1RMX1BPUlRfRVIxX09GRlNFVAkweDQwQwotI2RlZmluZSBMUEZDX0NUTF9QT1JUX0VSMl9PRkZTRVQJMHg0MTAKKy8qIFNMSTQgaW50ZXJmYWNlIHR5cGUtMiBQREVWX0NUTCByZWdpc3RlciAqLwogI2RlZmluZSBMUEZDX0NUTF9QREVWX0NUTF9PRkZTRVQJMHg0MTQKLQotLyogU29tZSBTTEk0IGludGVyZmFjZSB0eXBlLTIgUERFVl9DVEwgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBMUEZDX0NUTF9QREVWX0NUTF9EUlNUCQkweDAwMDAwMDAxCiAjZGVmaW5lIExQRkNfQ1RMX1BERVZfQ1RMX0ZSU1QJCTB4MDAwMDAwMDIKICNkZWZpbmUgTFBGQ19DVExfUERFVl9DVExfREQJCTB4MDAwMDAwMDQKQEAgLTMzNyw2ICszMzAsNyBAQAogI2RlZmluZSBDUUVfQ09ERV9SRUxFQVNFX1dRRQkJMHgyCiAjZGVmaW5lIENRRV9DT0RFX1JFQ0VJVkUJCTB4NAogI2RlZmluZSBDUUVfQ09ERV9YUklfQUJPUlRFRAkJMHg1CisjZGVmaW5lIENRRV9DT0RFX1JFQ0VJVkVfVjEJCTB4OQogCiAvKiBjb21wbGV0aW9uIHF1ZXVlIGVudHJ5IGZvciB3cWUgY29tcGxldGlvbnMgKi8KIHN0cnVjdCBscGZjX3djcWVfY29tcGxldGUgewpAQCAtNDQwLDcgKzQzNCwxMCBAQAogI2RlZmluZSBGQ19TVEFUVVNfUlFfQlVGX0xFTl9FWENFRURFRCAJMHgxMSAvKiBwYXlsb2FkIHRydW5jYXRlZCAqLwogI2RlZmluZSBGQ19TVEFUVVNfSU5TVUZGX0JVRl9ORUVEX0JVRiAJMHgxMiAvKiBJbnN1ZmZpY2llbnQgYnVmZmVycyAqLwogI2RlZmluZSBGQ19TVEFUVVNfSU5TVUZGX0JVRl9GUk1fRElTQyAJMHgxMyAvKiBGcmFtZSBEaXNjYXJkICovCi0JdWludDMyX3QgcmVzZXJ2ZWQxOworCXVpbnQzMl90IHdvcmQxOworI2RlZmluZSBscGZjX3JjcWVfZmNmX2lkX3YxX1NISUZUCTAKKyNkZWZpbmUgbHBmY19yY3FlX2ZjZl9pZF92MV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgbHBmY19yY3FlX2ZjZl9pZF92MV9XT1JECXdvcmQxCiAJdWludDMyX3Qgd29yZDI7CiAjZGVmaW5lIGxwZmNfcmNxZV9sZW5ndGhfU0hJRlQJCTE2CiAjZGVmaW5lIGxwZmNfcmNxZV9sZW5ndGhfTUFTSwkJMHgwMDAwRkZGRgpAQCAtNDUxLDYgKzQ0OCw5IEBACiAjZGVmaW5lIGxwZmNfcmNxZV9mY2ZfaWRfU0hJRlQJCTAKICNkZWZpbmUgbHBmY19yY3FlX2ZjZl9pZF9NQVNLCQkweDAwMDAwMDNGCiAjZGVmaW5lIGxwZmNfcmNxZV9mY2ZfaWRfV09SRAkJd29yZDIKKyNkZWZpbmUgbHBmY19yY3FlX3JxX2lkX3YxX1NISUZUCTAKKyNkZWZpbmUgbHBmY19yY3FlX3JxX2lkX3YxX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19yY3FlX3JxX2lkX3YxX1dPUkQJCXdvcmQyCiAJdWludDMyX3Qgd29yZDM7CiAjZGVmaW5lIGxwZmNfcmNxZV92YWxpZF9TSElGVAkJbHBmY19jcWVfdmFsaWRfU0hJRlQKICNkZWZpbmUgbHBmY19yY3FlX3ZhbGlkX01BU0sJCWxwZmNfY3FlX3ZhbGlkX01BU0sKQEAgLTUxNSw3ICs1MTUsNyBAQAogLyogVGhlIGZvbGxvd2luZyBCQVIwIHJlZ2lzdGVyIHNldHMgYXJlIGRlZmluZWQgZm9yIGlmX3R5cGUgMCBhbmQgMiBVQ05Bcy4gKi8KICNkZWZpbmUgTFBGQ19TTElfSU5URgkJCTB4MDA1OAogCi0jZGVmaW5lIExQRkNfU0xJUE9SVF9JRjJfU01QSFIJCTB4MDQwMAorI2RlZmluZSBMUEZDX0NUTF9QT1JUX1NFTV9PRkZTRVQJMHg0MDAKICNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3BlcnJfU0hJRlQJMzEKICNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3BlcnJfTUFTSwkweDEKICNkZWZpbmUgbHBmY19wb3J0X3NtcGhyX3BlcnJfV09SRAl3b3JkMApAQCAtNTc1LDcgKzU3NSw3IEBACiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9QT1JUX1JFQURZCQkJMHhDMDAwCiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9QT1JUX1VFIAkJCTB4RjAwMAogCi0jZGVmaW5lIExQRkNfU0xJUE9SVF9TVEFUVVMJCTB4MDQwNAorI2RlZmluZSBMUEZDX0NUTF9QT1JUX1NUQV9PRkZTRVQJMHg0MDQKICNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lcnJfU0hJRlQJMzEKICNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lcnJfTUFTSwkweDEKICNkZWZpbmUgbHBmY19zbGlwb3J0X3N0YXR1c19lcnJfV09SRAl3b3JkMApAQCAtNTkzLDcgKzU5Myw3IEBACiAjZGVmaW5lIGxwZmNfc2xpcG9ydF9zdGF0dXNfcmR5X1dPUkQJd29yZDAKICNkZWZpbmUgTUFYX0lGX1RZUEVfMl9SRVNFVFMJMTAwMAogCi0jZGVmaW5lIExQRkNfU0xJUE9SVF9DTlRSTAkJMHgwNDA4CisjZGVmaW5lIExQRkNfQ1RMX1BPUlRfQ1RMX09GRlNFVAkweDQwOAogI2RlZmluZSBscGZjX3NsaXBvcnRfY3RybF9lbmRfU0hJRlQJMzAKICNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfZW5kX01BU0sJMHgxCiAjZGVmaW5lIGxwZmNfc2xpcG9ydF9jdHJsX2VuZF9XT1JECXdvcmQwCkBAIC02MDQsOCArNjA0LDggQEAKICNkZWZpbmUgbHBmY19zbGlwb3J0X2N0cmxfaXBfV09SRAl3b3JkMAogI2RlZmluZSBMUEZDX1NMSVBPUlRfSU5JVF9QT1JUCTEKIAotI2RlZmluZSBMUEZDX1NMSVBPUlRfRVJSXzEJCTB4MDQwQwotI2RlZmluZSBMUEZDX1NMSVBPUlRfRVJSXzIJCTB4MDQxMAorI2RlZmluZSBMUEZDX0NUTF9QT1JUX0VSMV9PRkZTRVQJMHg0MEMKKyNkZWZpbmUgTFBGQ19DVExfUE9SVF9FUjJfT0ZGU0VUCTB4NDEwCiAKIC8qIFRoZSBmb2xsb3dpbmcgUmVnaXN0ZXJzIGFwcGx5IHRvIFNMSTQgaWZfdHlwZSAwIFVDTkFzLiBUaGV5IHR5cGljYWxseQogICogcmVzaWRlIGluIEJBUiAyLgpAQCAtMzE5OCw2ICszMTk4LDggQEAKICNkZWZpbmUgbHBmY19ncnBfaGRyX2lkX01BU0sJCTB4MDAwMDAwRkYKICNkZWZpbmUgbHBmY19ncnBfaGRyX2lkX1dPUkQJCXdvcmQyCiAJdWludDhfdCByZXZfbmFtZVsxMjhdOworCXVpbnQ4X3QgZGF0ZVsxMl07CisJdWludDhfdCByZXZpc2lvblszMl07CiB9OwogCiAjZGVmaW5lIEZDUF9DT01NQU5EIDB4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCAxNDhiOThkLi5hM2M4MjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMjkyNyw2ICsyOTI3LDggQEAKIAkJCQkgc2l6ZW9mIGZjX2hvc3Rfc3ltYm9saWNfbmFtZShzaG9zdCkpOwogCiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHNob3N0KSA9IDA7CisJaWYgKHBoYmEtPmxtdCAmIExNVF8xNkdiKQorCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpIHw9IEZDX1BPUlRTUEVFRF8xNkdCSVQ7CiAJaWYgKHBoYmEtPmxtdCAmIExNVF8xMEdiKQogCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpIHw9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CiAJaWYgKHBoYmEtPmxtdCAmIExNVF84R2IpCkBAIC0zNjMyLDggKzM2MzQsNyBAQAogCQkJbHBmY19zbGk0X2ZjZl9kZWFkX2ZhaWx0aHJvdWdoKHBoYmEpOwogCQl9IGVsc2UgewogCQkJLyogUmVzZXQgRkNGIHJvdW5kcm9iaW4gYm1hc2sgZm9yIG5ldyBkaXNjb3ZlcnkgKi8KLQkJCW1lbXNldChwaGJhLT5mY2YuZmNmX3JyX2JtYXNrLCAwLAotCQkJICAgICAgIHNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCQkJbHBmY19zbGk0X2NsZWFyX2ZjZl9ycl9ibWFzayhwaGJhKTsKIAkJCS8qCiAJCQkgKiBIYW5kbGluZyBmYXN0IEZDRiBmYWlsb3ZlciB0byBhIERFQUQgRkNGIGV2ZW50IGlzCiAJCQkgKiBjb25zaWRlcmVkIGVxdWFsaXZhbnQgdG8gcmVjZWl2aW5nIENWTCB0byBhbGwgdnBvcnRzLgpAQCAtMzY0Nyw3ICszNjQ4LDcgQEAKIAkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmlwLT5pbmRleCwgYWNxZV9maXAtPmV2ZW50X3RhZyk7CiAKIAkJdnBvcnQgPSBscGZjX2ZpbmRfdnBvcnRfYnlfdnBpZChwaGJhLAotCQkJCWFjcWVfZmlwLT5pbmRleCAtIHBoYmEtPnZwaV9iYXNlKTsKKwkJCQkJCWFjcWVfZmlwLT5pbmRleCk7CiAJCW5kbHAgPSBscGZjX3NsaTRfcGVyZm9ybV92cG9ydF9jdmwodnBvcnQpOwogCQlpZiAoIW5kbHApCiAJCQlicmVhazsKQEAgLTM3MTksOCArMzcyMCw3IEBACiAJCQkJICogUmVzZXQgRkNGIHJvdW5kcm9iaW4gYm1hc2sgZm9yIG5ldwogCQkJCSAqIGRpc2NvdmVyeS4KIAkJCQkgKi8KLQkJCQltZW1zZXQocGhiYS0+ZmNmLmZjZl9ycl9ibWFzaywgMCwKLQkJCQkgICAgICAgc2l6ZW9mKCpwaGJhLT5mY2YuZmNmX3JyX2JtYXNrKSk7CisJCQkJbHBmY19zbGk0X2NsZWFyX2ZjZl9ycl9ibWFzayhwaGJhKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNDAzNSw2ICs0MDM1LDM0IEBACiB9CiAKIC8qKgorICogbHBmY19zbGlfc3Jpb3ZfbnJfdmlydGZuX2dldCAtIEdldCB0aGUgbnVtYmVyIG9mIHNyLWlvdiB2aXJ0dWFsIGZ1bmN0aW9ucworICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBQQ0kgU1ItSU9WIHZpcnR1YWwgZnVuY3Rpb25zIHRvIGEgcGh5c2ljYWwKKyAqIGZ1bmN0aW9uLiBJdCBpbnZva2VzIHRoZSBQQ0kgU1ItSU9WIGFwaSB3aXRoIHRoZSBAbnJfdmZuIHByb3ZpZGVkIHRvCisgKiBlbmFibGUgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0byB0aGUgcGh5c2ljYWwgZnVuY3Rpb24uIEFzCisgKiBub3QgYWxsIGRldmljZXMgc3VwcG9ydCBTUi1JT1YsIHRoZSByZXR1cm4gY29kZSBmcm9tIHRoZSBwY2lfZW5hYmxlX3NyaW92KCkKKyAqIEFQSSBjYWxsIGRvZXMgbm90IGNvbnNpZGVyZWQgYXMgYW4gZXJyb3IgY29uZGl0aW9uIGZvciBtb3N0IG9mIHRoZSBkZXZpY2UuCisgKiovCit1aW50MTZfdAorbHBmY19zbGlfc3Jpb3ZfbnJfdmlydGZuX2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwaGJhLT5wY2lkZXY7CisJdWludDE2X3QgbnJfdmlydGZuOworCWludCBwb3M7CisKKwlpZiAoIXBkZXYtPmlzX3BoeXNmbikKKwkJcmV0dXJuIDA7CisKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9TUklPVik7CisJaWYgKHBvcyA9PSAwKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9TUklPVl9UT1RBTF9WRiwgJm5yX3ZpcnRmbik7CisJcmV0dXJuIG5yX3ZpcnRmbjsKK30KKworLyoqCiAgKiBscGZjX3NsaV9wcm9iZV9zcmlvdl9ucl92aXJ0Zm4gLSBFbmFibGUgYSBudW1iZXIgb2Ygc3ItaW92IHZpcnR1YWwgZnVuY3Rpb25zCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBucl92Zm46IG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBiZSBlbmFibGVkLgpAQCAtNDA0OSw4ICs0MDc3LDE3IEBACiBscGZjX3NsaV9wcm9iZV9zcmlvdl9ucl92aXJ0Zm4oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgbnJfdmZuKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGhiYS0+cGNpZGV2OworCXVpbnQxNl90IG1heF9ucl92Zm47CiAJaW50IHJjOwogCisJbWF4X25yX3ZmbiA9IGxwZmNfc2xpX3NyaW92X25yX3ZpcnRmbl9nZXQocGhiYSk7CisJaWYgKG5yX3ZmbiA+IG1heF9ucl92Zm4pIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMzA1NyBSZXF1ZXN0ZWQgdmZzICglZCkgZ3JlYXRlciB0aGFuICIKKwkJCQkic3VwcG9ydGVkIHZmcyAoJWQpIiwgbnJfdmZuLCBtYXhfbnJfdmZuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmMgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG5yX3Zmbik7CiAJaWYgKHJjKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19JTklULApAQCAtNDUxNiw3ICs0NTUzLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfZmNwX2VxX2hkbDoKIAlrZnJlZShwaGJhLT5zbGk0X2hiYS5mY3BfZXFfaGRsKTsKQEAgLTQ5NjYsMTcgKzUwMDMsMTQgQEAKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKICAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHBvc3QgcnBpIGhlYWRlciB0ZW1wbGF0ZXMgdG8gdGhlCi0gKiBIQkEgY29uc2lzdGVudCB3aXRoIHRoZSBTTEktNCBpbnRlcmZhY2Ugc3BlYy4gIFRoaXMgcm91dGluZQorICogcG9ydCBmb3IgdGhvc2UgU0xJNCBwb3J0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGV4dGVudHMuICBUaGlzIHJvdXRpbmUKICAqIHBvc3RzIGEgUEFHRV9TSVpFIG1lbW9yeSByZWdpb24gdG8gdGhlIHBvcnQgdG8gaG9sZCB1cCB0bwotICogUEFHRV9TSVpFIG1vZHVsbyA2NCBycGkgY29udGV4dCBoZWFkZXJzLgotICogTm8gbG9ja3MgYXJlIGhlbGQgaGVyZSBiZWNhdXNlIHRoaXMgaXMgYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQotICogY2FsbGVkIG9ubHkgZnJvbSBwcm9iZSBvciBscGZjX29ubGluZSB3aGVuIGludGVycnVwdHMgYXJlIG5vdAotICogZW5hYmxlZCBhbmQgdGhlIGRyaXZlciBpcyByZWluaXRpYWxpemluZyB0aGUgZGV2aWNlLgorICogUEFHRV9TSVpFIG1vZHVsbyA2NCBycGkgY29udGV4dCBoZWFkZXJzLiAgVGhpcyBpcyBhbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCisgKiBhbmQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCiAgKgogICogUmV0dXJuIGNvZGVzCiAgKiAJMCAtIHN1Y2Nlc3NmdWwKLSAqIAktRU5PTUVNIC0gTm8gYXZhaWxhYmxlIG1lbW9yeQotICogICAgICAtRUlPIC0gVGhlIG1haWxib3ggZmFpbGVkIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KKyAqCS1FUlJPUiAtIG90aGVyd2lzZS4KICAqKi8KIGludAogbHBmY19zbGk0X2luaXRfcnBpX2hkcnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQpAQCAtNTY4NywxNyArNTcyMSwyMiBAQAogCQlicmVhazsKIAljYXNlIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8yOgogCQlwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUyLkVSUjFyZWdhZGRyID0KLQkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJUE9SVF9FUlJfMTsKKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCQlMUEZDX0NUTF9QT1JUX0VSMV9PRkZTRVQ7CiAJCXBoYmEtPnNsaTRfaGJhLnUuaWZfdHlwZTIuRVJSMnJlZ2FkZHIgPQotCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsgTFBGQ19TTElQT1JUX0VSUl8yOworCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsKKwkJCQkJCUxQRkNfQ1RMX1BPUlRfRVIyX09GRlNFVDsKIAkJcGhiYS0+c2xpNF9oYmEudS5pZl90eXBlMi5DVFJMcmVnYWRkciA9Ci0JCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX1NMSVBPUlRfQ05UUkw7CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKworCQkJCQkJTFBGQ19DVExfUE9SVF9DVExfT0ZGU0VUOwogCQlwaGJhLT5zbGk0X2hiYS51LmlmX3R5cGUyLlNUQVRVU3JlZ2FkZHIgPQotCQkJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wICsgTFBGQ19TTElQT1JUX1NUQVRVUzsKKwkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArCisJCQkJCQlMUEZDX0NUTF9QT1JUX1NUQV9PRkZTRVQ7CiAJCXBoYmEtPnNsaTRfaGJhLlNMSUlOVEZyZWdhZGRyID0KIAkJCXBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJX0lOVEY7CiAJCXBoYmEtPnNsaTRfaGJhLlBTTVBIUnJlZ2FkZHIgPQotCQkgICAgIHBoYmEtPnNsaTRfaGJhLmNvbmZfcmVnc19tZW1tYXBfcCArIExQRkNfU0xJUE9SVF9JRjJfU01QSFI7CisJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKworCQkJCQkJTFBGQ19DVExfUE9SVF9TRU1fT0ZGU0VUOwogCQlwaGJhLT5zbGk0X2hiYS5SUURCcmVnYWRkciA9CiAJCQlwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKyBMUEZDX1JRX0RPT1JCRUxMOwogCQlwaGJhLT5zbGk0X2hiYS5XUURCcmVnYWRkciA9CkBAIC04ODU5LDExICs4ODk4LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlscGZjX2RlY29kZV9maXJtd2FyZV9yZXYocGhiYSwgZndyZXYsIDEpOwotCWlmIChzdHJuY21wKGZ3cmV2LCBpbWFnZS0+cmV2X25hbWUsIHN0cm5sZW4oZndyZXYsIDE2KSkpIHsKKwlpZiAoc3RybmNtcChmd3JldiwgaW1hZ2UtPnJldmlzaW9uLCBzdHJubGVuKGltYWdlLT5yZXZpc2lvbiwgMTYpKSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIzMDIzIFVwZGF0aW5nIEZpcm13YXJlLiBDdXJyZW50IFZlcnNpb246JXMgIgogCQkJCSJOZXcgVmVyc2lvbjolc1xuIiwKLQkJCQlmd3JldiwgaW1hZ2UtPnJldl9uYW1lKTsKKwkJCQlmd3JldiwgaW1hZ2UtPnJldmlzaW9uKTsKIAkJZm9yIChpID0gMDsgaSA8IExQRkNfTUJYX1dSX0NPTkZJR19NQVhfQkRFOyBpKyspIHsKIAkJCWRtYWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksCiAJCQkJCSBHRlBfS0VSTkVMKTsKQEAgLTg4OTIsOSArODkzMSw5IEBACiAJCQkJCSAgICAgICBmdy0+c2l6ZSAtIG9mZnNldCk7CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQl0ZW1wX29mZnNldCArPSBTTEk0X1BBR0VfU0laRTsKIAkJCQltZW1jcHkoZG1hYnVmLT52aXJ0LCBmdy0+ZGF0YSArIHRlbXBfb2Zmc2V0LAogCQkJCSAgICAgICBTTEk0X1BBR0VfU0laRSk7CisJCQkJdGVtcF9vZmZzZXQgKz0gU0xJNF9QQUdFX1NJWkU7CiAJCQl9CiAJCQlyYyA9IGxwZmNfd3Jfb2JqZWN0KHBoYmEsICZkbWFfYnVmZmVyX2xpc3QsCiAJCQkJICAgIChmdy0+c2l6ZSAtIG9mZnNldCksICZvZmZzZXQpOwpAQCAtOTAwNSw2ICs5MDQ0LDcgQEAKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+YWN0aXZlX3JycV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCk7CiAKIAkvKiBTZXQgdXAgY29tbW9uIGRldmljZSBkcml2ZXIgcmVzb3VyY2VzICovCiAJZXJyb3IgPSBscGZjX3NldHVwX2RyaXZlcl9yZXNvdXJjZV9waGFzZTIocGhiYSk7CkBAIC05MTEyLDcgKzkxNTIsNiBAQAogCiAJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIHN0YXRpYyB2cG9ydHMgdG8gYmUgY3JlYXRlZC4gKi8KIAlscGZjX2NyZWF0ZV9zdGF0aWNfdnBvcnQocGhiYSk7Ci0KIAlyZXR1cm4gMDsKIAogb3V0X2Rpc2FibGVfaW50cjoKQEAgLTk0ODMsNiArOTUyMiwxMyBAQAogCX0KIAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggNTU2NzY3MC4uODM0NTBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTIwMzEsNyArMjAzMSw3IEBACiAJYmZfc2V0KGxwZmNfaW5pdF92ZmlfdnAsIGluaXRfdmZpLCAxKTsKIAliZl9zZXQobHBmY19pbml0X3ZmaV92ZmksIGluaXRfdmZpLAogCSAgICAgICB2cG9ydC0+cGhiYS0+c2xpNF9oYmEudmZpX2lkc1t2cG9ydC0+dmZpXSk7Ci0JYmZfc2V0KGxwZmNfaW5pdF92cGlfdnBpLCBpbml0X3ZmaSwKKwliZl9zZXQobHBmY19pbml0X3ZmaV92cGksIGluaXRfdmZpLAogCSAgICAgICB2cG9ydC0+cGhiYS0+dnBpX2lkc1t2cG9ydC0+dnBpXSk7CiAJYmZfc2V0KGxwZmNfaW5pdF92ZmlfZmNmaSwgaW5pdF92ZmksCiAJICAgICAgIHZwb3J0LT5waGJhLT5mY2YuZmNmaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IDNjY2M5NzQuLmVhZGQyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0xMzAyLDEzICsxMzAyLDEzIEBACiAJCWNhc2UgU0NTSV9QUk9UX05PUk1BTDoKIAkJZGVmYXVsdDoKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0JHLAotCQkJCSI5MDYzIEJMS0dSRDogQmFkIG9wL2d1YXJkOiVkLyVkIGNvbWJpbmF0aW9uXG4iLAotCQkJCQlzY3NpX2dldF9wcm90X29wKHNjKSwgZ3VhcmRfdHlwZSk7CisJCQkJIjkwNjMgQkxLR1JEOiBCYWQgb3AvZ3VhcmQ6JWQvSVAgY29tYmluYXRpb25cbiIsCisJCQkJCXNjc2lfZ2V0X3Byb3Rfb3Aoc2MpKTsKIAkJCXJldCA9IDE7CiAJCQlicmVhazsKIAogCQl9Ci0JfSBlbHNlIGlmIChndWFyZF90eXBlID09IFNIT1NUX0RJWF9HVUFSRF9DUkMpIHsKKwl9IGVsc2UgewogCQlzd2l0Y2ggKHNjc2lfZ2V0X3Byb3Rfb3Aoc2MpKSB7CiAJCWNhc2UgU0NTSV9QUk9UX1JFQURfU1RSSVA6CiAJCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDoKQEAgLTEzMjQsMTcgKzEzMjQsMTggQEAKIAogCQljYXNlIFNDU0lfUFJPVF9SRUFEX0lOU0VSVDoKIAkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA6CisJCQkqdHhvcCA9IEJHX09QX0lOX0NSQ19PVVRfTk9ESUY7CisJCQkqcnhvcCA9IEJHX09QX0lOX05PRElGX09VVF9DUkM7CisJCQlicmVhazsKKwogCQljYXNlIFNDU0lfUFJPVF9OT1JNQUw6CiAJCWRlZmF1bHQ6CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19CRywKLQkJCQkiOTA3NSBCTEtHUkQ6IEJhZCBvcC9ndWFyZDolZC8lZCBjb21iaW5hdGlvblxuIiwKLQkJCQkJc2NzaV9nZXRfcHJvdF9vcChzYyksIGd1YXJkX3R5cGUpOworCQkJCSI5MDc1IEJMS0dSRDogQmFkIG9wL2d1YXJkOiVkL0NSQyBjb21iaW5hdGlvblxuIiwKKwkJCQkJc2NzaV9nZXRfcHJvdF9vcChzYykpOwogCQkJcmV0ID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIHsKLQkJLyogdW5zdXBwb3J0ZWQgZm9ybWF0ICovCi0JCUJVRygpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xMzUyLDQ1ICsxMzUzLDYgQEAKIAlyZXR1cm4gc2MtPmRldmljZS0+c2VjdG9yX3NpemU7CiB9CiAKLS8qKgotICogbHBmY19nZXRfY21kX2RpZl9wYXJtcyAtIEV4dHJhY3QgRElGIHBhcmFtZXRlcnMgZnJvbSBTQ1NJIGNvbW1hbmQKLSAqIEBzYzogICAgICAgICAgICAgaW46IFNDU0kgY29tbWFuZAotICogQGFwcHRhZ21hc2s6ICAgICBvdXQ6IGFwcCB0YWcgbWFzawotICogQGFwcHRhZ3ZhbDogICAgICBvdXQ6IGFwcCB0YWcgdmFsdWUKLSAqIEByZWZ0YWc6ICAgICAgICAgb3V0OiByZWYgdGFnIChyZWZlcmVuY2UgdGFnKQotICoKLSAqIERlc2NyaXB0aW9uOgotICogICBFeHRyYWN0IERJRiBwYXJhbWV0ZXJzIGZyb20gdGhlIGNvbW1hbmQgaWYgcG9zc2libGUuICBPdGhlcndpc2UsCi0gKiAgIHVzZSBkZWZhdWx0IHBhcmFtZXRlcnMuCi0gKgotICoqLwotc3RhdGljIGlubGluZSB2b2lkCi1scGZjX2dldF9jbWRfZGlmX3Bhcm1zKHN0cnVjdCBzY3NpX2NtbmQgKnNjLCB1aW50MTZfdCAqYXBwdGFnbWFzaywKLQkJdWludDE2X3QgKmFwcHRhZ3ZhbCwgdWludDMyX3QgKnJlZnRhZykKLXsKLQlzdHJ1Y3QgIHNjc2lfZGlmX3R1cGxlICpzcHQ7Ci0JdW5zaWduZWQgY2hhciBvcCA9IHNjc2lfZ2V0X3Byb3Rfb3Aoc2MpOwotCXVuc2lnbmVkIGludCBwcm90Y250ID0gc2NzaV9wcm90X3NnX2NvdW50KHNjKTsKLQlzdGF0aWMgaW50IGNudDsKLQotCWlmIChwcm90Y250ICYmIChvcCA9PSBTQ1NJX1BST1RfV1JJVEVfU1RSSVAgfHwKLQkJCQlvcCA9PSBTQ1NJX1BST1RfV1JJVEVfUEFTUykpIHsKLQotCQljbnQrKzsKLQkJc3B0ID0gcGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2NzaV9wcm90X3NnbGlzdChzYykpKSArCi0JCQlzY3NpX3Byb3Rfc2dsaXN0KHNjKVswXS5vZmZzZXQ7Ci0JCSphcHB0YWdtYXNrID0gMDsKLQkJKmFwcHRhZ3ZhbCA9IDA7Ci0JCSpyZWZ0YWcgPSBjcHVfdG9fYmUzMihzcHQtPnJlZl90YWcpOwotCi0JfSBlbHNlIHsKLQkJLyogU0JDIGRlZmluZXMgcmVmIHRhZyB0byBiZSBsb3dlciAzMmJpdHMgb2YgTEJBICovCi0JCSpyZWZ0YWcgPSAodWludDMyX3QpICgweGZmZmZmZmZmICYgc2NzaV9nZXRfbGJhKHNjKSk7Ci0JCSphcHB0YWdtYXNrID0gMDsKLQkJKmFwcHRhZ3ZhbCA9IDA7Ci0JfQotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGJ1ZmZlciBsaXN0IGZvciBwcm90ZWN0aW9uIGdyb3VwcyBvZgogICogdHlwZSBMUEZDX1BHX1RZUEVfTk9fRElGCkBAIC0xNDI3LDkgKzEzODksOCBAQAogCWRtYV9hZGRyX3QgcGh5c2FkZHI7CiAJaW50IGkgPSAwLCBudW1fYmRlID0gMCwgc3RhdHVzOwogCWludCBkYXRhZGlyID0gc2MtPnNjX2RhdGFfZGlyZWN0aW9uOwotCXVuc2lnbmVkIGJsa3NpemU7CiAJdWludDMyX3QgcmVmdGFnOwotCXVpbnQxNl90IGFwcHRhZ21hc2ssIGFwcHRhZ3ZhbDsKKwl1bnNpZ25lZCBibGtzaXplOwogCXVpbnQ4X3QgdHhvcCwgcnhvcDsKIAogCXN0YXR1cyAgPSBscGZjX3NjX3RvX2JnX29wY29kZXMocGhiYSwgc2MsICZ0eG9wLCAmcnhvcCk7CkBAIC0xNDM4LDE3ICsxMzk5LDE2IEBACiAKIAkvKiBleHRyYWN0IHNvbWUgaW5mbyBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgZm9yIHBkZSovCiAJYmxrc2l6ZSA9IGxwZmNfY21kX2Jsa3NpemUoc2MpOwotCWxwZmNfZ2V0X2NtZF9kaWZfcGFybXMoc2MsICZhcHB0YWdtYXNrLCAmYXBwdGFndmFsLCAmcmVmdGFnKTsKKwlyZWZ0YWcgPSBzY3NpX2dldF9sYmEoc2MpICYgMHhmZmZmZmZmZjsKIAogCS8qIHNldHVwIFBERTUgd2l0aCB3aGF0IHdlIGhhdmUgKi8KIAlwZGU1ID0gKHN0cnVjdCBscGZjX3BkZTUgKikgYnBsOwogCW1lbXNldChwZGU1LCAwLCBzaXplb2Yoc3RydWN0IGxwZmNfcGRlNSkpOwogCWJmX3NldChwZGU1X3R5cGUsIHBkZTUsIExQRkNfUERFNV9ERVNDUklQVE9SKTsKLQlwZGU1LT5yZWZ0YWcgPSByZWZ0YWc7CiAKIAkvKiBFbmRpYW5uZXNzIGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU1ICovCiAJcGRlNS0+d29yZDAgPSBjcHVfdG9fbGUzMihwZGU1LT53b3JkMCk7Ci0JcGRlNS0+cmVmdGFnID0gY3B1X3RvX2xlMzIocGRlNS0+cmVmdGFnKTsKKwlwZGU1LT5yZWZ0YWcgPSBjcHVfdG9fbGUzMihyZWZ0YWcpOwogCiAJLyogYWR2YW5jZSBicGwgYW5kIGluY3JlbWVudCBiZGUgY291bnQgKi8KIAludW1fYmRlKys7CkBAIC0xNDYzLDEwICsxNDIzLDEwIEBACiAJaWYgKGRhdGFkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CiAJCWJmX3NldChwZGU2X2NlLCBwZGU2LCAxKTsKIAkJYmZfc2V0KHBkZTZfcmUsIHBkZTYsIDEpOwotCQliZl9zZXQocGRlNl9hZSwgcGRlNiwgMSk7CiAJfQogCWJmX3NldChwZGU2X2FpLCBwZGU2LCAxKTsKLQliZl9zZXQocGRlNl9hcHB0YWd2YWwsIHBkZTYsIGFwcHRhZ3ZhbCk7CisJYmZfc2V0KHBkZTZfYWUsIHBkZTYsIDApOworCWJmX3NldChwZGU2X2FwcHRhZ3ZhbCwgcGRlNiwgMCk7CiAKIAkvKiBFbmRpYW5uZXNzIGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU2ICovCiAJcGRlNi0+d29yZDAgPSBjcHVfdG9fbGUzMihwZGU2LT53b3JkMCk7CkBAIC0xNTUxLDcgKzE1MTEsNiBAQAogCXVuc2lnbmVkIGNoYXIgcGdkb25lID0gMCwgYWxsZG9uZSA9IDA7CiAJdW5zaWduZWQgYmxrc2l6ZTsKIAl1aW50MzJfdCByZWZ0YWc7Ci0JdWludDE2X3QgYXBwdGFnbWFzaywgYXBwdGFndmFsOwogCXVpbnQ4X3QgdHhvcCwgcnhvcDsKIAlpbnQgbnVtX2JkZSA9IDA7CiAKQEAgLTE1NzEsNyArMTUzMCw3IEBACiAKIAkvKiBleHRyYWN0IHNvbWUgaW5mbyBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgKi8KIAlibGtzaXplID0gbHBmY19jbWRfYmxrc2l6ZShzYyk7Ci0JbHBmY19nZXRfY21kX2RpZl9wYXJtcyhzYywgJmFwcHRhZ21hc2ssICZhcHB0YWd2YWwsICZyZWZ0YWcpOworCXJlZnRhZyA9IHNjc2lfZ2V0X2xiYShzYykgJiAweGZmZmZmZmZmOwogCiAJc3BsaXRfb2Zmc2V0ID0gMDsKIAlkbyB7CkBAIC0xNTc5LDExICsxNTM4LDEwIEBACiAJCXBkZTUgPSAoc3RydWN0IGxwZmNfcGRlNSAqKSBicGw7CiAJCW1lbXNldChwZGU1LCAwLCBzaXplb2Yoc3RydWN0IGxwZmNfcGRlNSkpOwogCQliZl9zZXQocGRlNV90eXBlLCBwZGU1LCBMUEZDX1BERTVfREVTQ1JJUFRPUik7Ci0JCXBkZTUtPnJlZnRhZyA9IHJlZnRhZzsKIAogCQkvKiBFbmRpYW5uZXNzIGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5IGZvciBQREU1ICovCiAJCXBkZTUtPndvcmQwID0gY3B1X3RvX2xlMzIocGRlNS0+d29yZDApOwotCQlwZGU1LT5yZWZ0YWcgPSBjcHVfdG9fbGUzMihwZGU1LT5yZWZ0YWcpOworCQlwZGU1LT5yZWZ0YWcgPSBjcHVfdG9fbGUzMihyZWZ0YWcpOwogCiAJCS8qIGFkdmFuY2UgYnBsIGFuZCBpbmNyZW1lbnQgYmRlIGNvdW50ICovCiAJCW51bV9iZGUrKzsKQEAgLTE1OTcsOSArMTU1NSw5IEBACiAJCWJmX3NldChwZGU2X29wcngsIHBkZTYsIHJ4b3ApOwogCQliZl9zZXQocGRlNl9jZSwgcGRlNiwgMSk7CiAJCWJmX3NldChwZGU2X3JlLCBwZGU2LCAxKTsKLQkJYmZfc2V0KHBkZTZfYWUsIHBkZTYsIDEpOwogCQliZl9zZXQocGRlNl9haSwgcGRlNiwgMSk7Ci0JCWJmX3NldChwZGU2X2FwcHRhZ3ZhbCwgcGRlNiwgYXBwdGFndmFsKTsKKwkJYmZfc2V0KHBkZTZfYWUsIHBkZTYsIDApOworCQliZl9zZXQocGRlNl9hcHB0YWd2YWwsIHBkZTYsIDApOwogCiAJCS8qIEVuZGlhbm5lc3MgY29udmVyc2lvbiBpZiBuZWNlc3NhcnkgZm9yIFBERTYgKi8KIAkJcGRlNi0+d29yZDAgPSBjcHVfdG9fbGUzMihwZGU2LT53b3JkMCk7CkBAIC0xNjIxLDggKzE1NzksOCBAQAogCQltZW1zZXQocGRlNywgMCwgc2l6ZW9mKHN0cnVjdCBscGZjX3BkZTcpKTsKIAkJYmZfc2V0KHBkZTdfdHlwZSwgcGRlNywgTFBGQ19QREU3X0RFU0NSSVBUT1IpOwogCi0JCXBkZTctPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocHJvdHBoeXNhZGRyKSk7Ci0JCXBkZTctPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocHJvdHBoeXNhZGRyKSk7CisJCXBkZTctPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHByb3RwaHlzYWRkcikpOworCQlwZGU3LT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocHJvdHBoeXNhZGRyKSk7CiAKIAkJcHJvdGdycF9ibGtzID0gcHJvdGdyb3VwX2xlbiAvIDg7CiAJCXByb3RncnBfYnl0ZXMgPSBwcm90Z3JwX2Jsa3MgKiBibGtzaXplOwpAQCAtMTYzMiw3ICsxNTkwLDcgQEAKIAkJCXByb3Rncm91cF9yZW1haW5kZXIgPSAweDEwMDAgLSAocGRlNy0+YWRkckxvdyAmIDB4ZmZmKTsKIAkJCXByb3Rncm91cF9vZmZzZXQgKz0gcHJvdGdyb3VwX3JlbWFpbmRlcjsKIAkJCXByb3RncnBfYmxrcyA9IHByb3Rncm91cF9yZW1haW5kZXIgLyA4OwotCQkJcHJvdGdycF9ieXRlcyA9IHByb3Rncm91cF9yZW1haW5kZXIgKiBibGtzaXplOworCQkJcHJvdGdycF9ieXRlcyA9IHByb3RncnBfYmxrcyAqIGJsa3NpemU7CiAJCX0gZWxzZSB7CiAJCQlwcm90Z3JvdXBfb2Zmc2V0ID0gMDsKIAkJCWN1cnJfcHJvdCsrOwpAQCAtMjAwNiwxNiArMTk2NCwyMSBAQAogCWlmIChscGZjX2Jnc19nZXRfaGlfd2F0ZXJfbWFya19wcmVzZW50KGJnc3RhdCkpIHsKIAkJLyoKIAkJICogc2V0dXAgc2Vuc2UgZGF0YSBkZXNjcmlwdG9yIDAgcGVyIFNQQy00IGFzIGFuIGluZm9ybWF0aW9uCi0JCSAqIGZpZWxkLCBhbmQgcHV0IHRoZSBmYWlsaW5nIExCQSBpbiBpdAorCQkgKiBmaWVsZCwgYW5kIHB1dCB0aGUgZmFpbGluZyBMQkEgaW4gaXQuCisJCSAqIFRoaXMgY29kZSBhc3N1bWVzIHRoZXJlIHdhcyBhbHNvIGEgZ3VhcmQvYXBwL3JlZiB0YWcgZXJyb3IKKwkJICogaW5kaWNhdGlvbi4KIAkJICovCi0JCWNtZC0+c2Vuc2VfYnVmZmVyWzhdID0gMDsgICAgIC8qIEluZm9ybWF0aW9uICovCi0JCWNtZC0+c2Vuc2VfYnVmZmVyWzldID0gMHhhOyAgIC8qIEFkZC4gbGVuZ3RoICovCisJCWNtZC0+c2Vuc2VfYnVmZmVyWzddID0gMHhjOyAgIC8qIEFkZGl0aW9uYWwgc2Vuc2UgbGVuZ3RoICovCisJCWNtZC0+c2Vuc2VfYnVmZmVyWzhdID0gMDsgICAgIC8qIEluZm9ybWF0aW9uIGRlc2NyaXB0b3IgdHlwZSAqLworCQljbWQtPnNlbnNlX2J1ZmZlcls5XSA9IDB4YTsgICAvKiBBZGRpdGlvbmFsIGRlc2NyaXB0b3IgbGVuZ3RoICovCisJCWNtZC0+c2Vuc2VfYnVmZmVyWzEwXSA9IDB4ODA7IC8qIFZhbGlkaXR5IGJpdCAqLwogCQliZ2htIC89IGNtZC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKIAogCQlmYWlsaW5nX3NlY3RvciA9IHNjc2lfZ2V0X2xiYShjbWQpOwogCQlmYWlsaW5nX3NlY3RvciArPSBiZ2htOwogCi0JCXB1dF91bmFsaWduZWRfYmU2NChmYWlsaW5nX3NlY3RvciwgJmNtZC0+c2Vuc2VfYnVmZmVyWzEwXSk7CisJCS8qIERlc2NyaXB0b3IgSW5mb3JtYXRpb24gKi8KKwkJcHV0X3VuYWxpZ25lZF9iZTY0KGZhaWxpbmdfc2VjdG9yLCAmY21kLT5zZW5zZV9idWZmZXJbMTJdKTsKIAl9CiAKIAlpZiAoIXJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggOTg5OTliYi4uOGI3OTlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC01NjAsNyArNTYwLDcgQEAKIAlycnEgPSBtZW1wb29sX2FsbG9jKHBoYmEtPnJycV9wb29sLCBHRlBfS0VSTkVMKTsKIAlpZiAocnJxKSB7CiAJCXJycS0+c2VuZF9ycnEgPSBzZW5kX3JycTsKLQkJcnJxLT54cml0YWcgPSBwaGJhLT5zbGk0X2hiYS54cmlfaWRzW3hyaXRhZ107CisJCXJycS0+eHJpdGFnID0geHJpdGFnOwogCQlycnEtPnJycV9zdG9wX3RpbWUgPSBqaWZmaWVzICsgSFogKiAocGhiYS0+ZmNfcmF0b3YgKyAxKTsKIAkJcnJxLT5uZGxwID0gbmRscDsKIAkJcnJxLT5ubHBfRElEID0gbmRscC0+bmxwX0RJRDsKQEAgLTI0NTIsNyArMjQ1Miw4IEBACiAKIAkJLyogc2VhcmNoIGNvbnRpbnVlIHNhdmUgcSBmb3Igc2FtZSBYUkkgKi8KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2NicSwgJnByaW5nLT5pb2NiX2NvbnRpbnVlX3NhdmVxLCBjbGlzdCkgewotCQkJaWYgKGlvY2JxLT5pb2NiLnVscENvbnRleHQgPT0gc2F2ZXEtPmlvY2IudWxwQ29udGV4dCkgeworCQkJaWYgKGlvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLm94X2lkID09CisJCQkJc2F2ZXEtPmlvY2IudW5zbGkzLnJjdnNsaTMub3hfaWQpIHsKIAkJCQlsaXN0X2FkZF90YWlsKCZzYXZlcS0+bGlzdCwgJmlvY2JxLT5saXN0KTsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CkBAIC0zMzU1LDYgKzMzNTYsNyBAQAogCQkJCQkJCSAgIGlyc3Bpb2NicSk7CiAJCQlicmVhazsKIAkJY2FzZSBDUUVfQ09ERV9SRUNFSVZFOgorCQljYXNlIENRRV9DT0RFX1JFQ0VJVkVfVjE6CiAJCQlkbWFidWYgPSBjb250YWluZXJfb2YoY3FfZXZlbnQsIHN0cnVjdCBoYnFfZG1hYnVmLAogCQkJCQkgICAgICBjcV9ldmVudCk7CiAJCQlscGZjX3NsaTRfaGFuZGxlX3JlY2VpdmVkX2J1ZmZlcihwaGJhLCBkbWFidWYpOwpAQCAtNDcxMiwxMCArNDcxNCwxNSBAQAogICogbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjIC0gR2V0IGF2YWlsYWJsZSByZXNvdXJjZSBleHRlbnQgY291bnQuCiAgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCiAgKiBAdHlwZTogVGhlIHJlc291cmNlIGV4dGVudCB0eXBlLgorICogQGV4dG50X2NvdW50OiBidWZmZXIgdG8gaG9sZCBwb3J0IGF2YWlsYWJsZSBleHRlbnQgY291bnQuCisgKiBAZXh0bnRfc2l6ZTogYnVmZmVyIHRvIGhvbGQgZWxlbWVudCBjb3VudCBwZXIgZXh0ZW50LgogICoKLSAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFsbCBTTEk0IHJlc291cmNlIGlkZW50aWZpZXJzLgorICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcG9ydCBhbmQgcmV0cmlldnMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUKKyAqIGV4dGVudHMgYW5kIHRoZWlyIHNpemUgZm9yIGEgcGFydGljdWxhciBleHRlbnQgdHlwZS4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwuICBOb256ZXJvIG90aGVyd2lzZS4KICAqKi8KLXN0YXRpYyBpbnQKK2ludAogbHBmY19zbGk0X2dldF9hdmFpbF9leHRudF9yc3JjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdHlwZSwKIAkJCSAgICAgICB1aW50MTZfdCAqZXh0bnRfY291bnQsIHVpbnQxNl90ICpleHRudF9zaXplKQogewpAQCAtNDg5Miw3ICs0ODk5LDcgQEAKIAkJCQkgICAgIHJlcV9sZW4sICplbWIpOwogCWlmIChhbGxvY19sZW4gPCByZXFfbGVuKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkiOTAwMCBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKKwkJCSIyOTgyIEFsbG9jYXRlZCBETUEgbWVtb3J5IHNpemUgKHgleCkgaXMgIgogCQkJImxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIERNQSBtZW1vcnkgIgogCQkJInNpemUgKHgleClcbiIsIGFsbG9jX2xlbiwgcmVxX2xlbik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTUwNiw2ICs1NTEzLDE1NCBAQAogfQogCiAvKioKKyAqIGxwZmNfc2xpNF9nZXRfYWxsb2NhdGVkX2V4dG50cyAtIEdldCB0aGUgcG9ydCdzIGFsbG9jYXRlZCBleHRlbnRzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHR5cGU6IFRoZSByZXNvdXJjZSBleHRlbnQgdHlwZS4KKyAqIEBleHRudF9jb3VudDogYnVmZmVyIHRvIGhvbGQgcG9ydCBleHRlbnQgY291bnQgcmVzcG9uc2UKKyAqIEBleHRudF9zaXplOiBidWZmZXIgdG8gaG9sZCBwb3J0IGV4dGVudCBzaXplIHJlc3BvbnNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIHBvcnQgdG8gcmVhZCB0aGUgaG9zdCBhbGxvY2F0ZWQgZXh0ZW50cworICogZm9yIGEgcGFydGljdWxhciB0eXBlLgorICoqLworaW50CitscGZjX3NsaTRfZ2V0X2FsbG9jYXRlZF9leHRudHMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB0eXBlLAorCQkJICAgICAgIHVpbnQxNl90ICpleHRudF9jbnQsIHVpbnQxNl90ICpleHRudF9zaXplKQoreworCWJvb2wgZW1iOworCWludCByYyA9IDA7CisJdWludDE2X3QgY3Vycl9ibGtzID0gMDsKKwl1aW50MzJfdCByZXFfbGVuLCBlbWJfbGVuOworCXVpbnQzMl90IGFsbG9jX2xlbiwgbWJveF90bW87CisJc3RydWN0IGxpc3RfaGVhZCAqYmxrX2xpc3RfaGVhZDsKKwlzdHJ1Y3QgbHBmY19yc3JjX2Jsa3MgKnJzcmNfYmxrOworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwl2b2lkICp2aXJ0YWRkciA9IE5VTEw7CisJc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9yc3JjX2V4dGVudCAqbl9yc3JjOworCXN0cnVjdCBscGZjX21ieF9hbGxvY19yc3JjX2V4dGVudHMgKnJzcmNfZXh0OworCXVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIgKnNoZHI7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIExQRkNfUlNDX1RZUEVfRkNPRV9WUEk6CisJCWJsa19saXN0X2hlYWQgPSAmcGhiYS0+bHBmY192cGlfYmxrX2xpc3Q7CisJCWJyZWFrOworCWNhc2UgTFBGQ19SU0NfVFlQRV9GQ09FX1hSSToKKwkJYmxrX2xpc3RfaGVhZCA9ICZwaGJhLT5zbGk0X2hiYS5scGZjX3hyaV9ibGtfbGlzdDsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX1JTQ19UWVBFX0ZDT0VfVkZJOgorCQlibGtfbGlzdF9oZWFkID0gJnBoYmEtPnNsaTRfaGJhLmxwZmNfdmZpX2Jsa19saXN0OworCQlicmVhazsKKwljYXNlIExQRkNfUlNDX1RZUEVfRkNPRV9SUEk6CisJCWJsa19saXN0X2hlYWQgPSAmcGhiYS0+c2xpNF9oYmEubHBmY19ycGlfYmxrX2xpc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIENvdW50IHRoZSBudW1iZXIgb2YgZXh0ZW50cyBjdXJyZW50bHkgYWxsb2NhdGQgZm9yIHRoaXMgdHlwZS4gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzcmNfYmxrLCBibGtfbGlzdF9oZWFkLCBsaXN0KSB7CisJCWlmIChjdXJyX2Jsa3MgPT0gMCkgeworCQkJLyoKKwkJCSAqIFRoZSBHRVRfQUxMT0NBVEVEIG1haWxib3ggZG9lcyBub3QgcmV0dXJuIHRoZSBzaXplLAorCQkJICoganVzdCB0aGUgY291bnQuICBUaGUgc2l6ZSBzaG91bGQgYmUganVzdCB0aGUgc2l6ZQorCQkJICogc3RvcmVkIGluIHRoZSBjdXJyZW50IGFsbG9jYXRlZCBibG9jayBhbmQgYWxsIHNpemVzCisJCQkgKiBmb3IgYW4gZXh0ZW50IHR5cGUgYXJlIHRoZSBzYW1lIHNvIHNldCB0aGUgcmV0dXJuCisJCQkgKiB2YWx1ZSBub3cuCisJCQkgKi8KKwkJCSpleHRudF9zaXplID0gcnNyY19ibGstPnJzcmNfc2l6ZTsKKwkJfQorCQljdXJyX2Jsa3MrKzsKKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIHRvdGFsIHJlcXVlc3RlZCBsZW5ndGggb2YgdGhlIGRtYSBtZW1vcnkuICovCisJcmVxX2xlbiA9IGN1cnJfYmxrcyAqIHNpemVvZih1aW50MTZfdCk7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhbiBlbWJlZGRlZCBtYWlsYm94LiAgVGhlIHVpbnQzMl90CisJICogYWNjb3VudHMgZm9yIGV4dGVudHMtc3BlY2lmaWMgd29yZC4KKwkgKi8KKwllbWJfbGVuID0gc2l6ZW9mKE1BSUxCT1hfdCkgLSBzaXplb2Yoc3RydWN0IG1ib3hfaGVhZGVyKSAtCisJCXNpemVvZih1aW50MzJfdCk7CisKKwkvKgorCSAqIFByZXN1bWUgdGhlIGFsbG9jYXRpb24gYW5kIHJlc3BvbnNlIHdpbGwgZml0IGludG8gYW4gZW1iZWRkZWQKKwkgKiBtYWlsYm94LiAgSWYgbm90IHRydWUsIHJlY29uZmlndXJlIHRvIGEgbm9uLWVtYmVkZGVkIG1haWxib3guCisJICovCisJZW1iID0gTFBGQ19TTEk0X01CWF9FTUJFRDsKKwlyZXFfbGVuID0gZW1iX2xlbjsKKwlpZiAocmVxX2xlbiA+IGVtYl9sZW4pIHsKKwkJcmVxX2xlbiA9IGN1cnJfYmxrcyAqIHNpemVvZih1aW50MTZfdCkgKworCQkJc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKworCQkJc2l6ZW9mKHVpbnQzMl90KTsKKwkJZW1iID0gTFBGQ19TTEk0X01CWF9ORU1CRUQ7CisJfQorCisJbWJveCA9IChMUEZDX01CT1hRX3QgKikgbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3gpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChtYm94LCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisKKwlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3gsIExQRkNfTUJPWF9TVUJTWVNURU1fQ09NTU9OLAorCQkJCSAgICAgTFBGQ19NQk9YX09QQ09ERV9HRVRfQUxMT0NfUlNSQ19FWFRFTlQsCisJCQkJICAgICByZXFfbGVuLCBlbWIpOworCWlmIChhbGxvY19sZW4gPCByZXFfbGVuKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjk4MyBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKKwkJCSJsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBETUEgbWVtb3J5ICIKKwkJCSJzaXplICh4JXgpXG4iLCBhbGxvY19sZW4sIHJlcV9sZW4pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2V4aXQ7CisJfQorCXJjID0gbHBmY19zbGk0X21ib3hfcnNyY19leHRlbnQocGhiYSwgbWJveCwgY3Vycl9ibGtzLCB0eXBlLCBlbWIpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9leGl0OworCX0KKworCWlmICghcGhiYS0+c2xpNF9oYmEuaW50cl9lbmFibGUpCisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfUE9MTCk7CisJZWxzZSB7CisJCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX1NMSTRfQ09ORklHKTsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveCwgbWJveF90bW8pOworCX0KKworCWlmICh1bmxpa2VseShyYykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9leGl0OworCX0KKworCS8qCisJICogRmlndXJlIG91dCB3aGVyZSB0aGUgcmVzcG9uc2UgaXMgbG9jYXRlZC4gIFRoZW4gZ2V0IGxvY2FsIHBvaW50ZXJzCisJICogdG8gdGhlIHJlc3BvbnNlIGRhdGEuICBUaGUgcG9ydCBkb2VzIG5vdCBndWFyYW50ZWUgdG8gcmVzcG9uZCB0bworCSAqIGFsbCBleHRlbnRzIGNvdW50cyByZXF1ZXN0IHNvIHVwZGF0ZSB0aGUgbG9jYWwgdmFyaWFibGUgd2l0aCB0aGUKKwkgKiBhbGxvY2F0ZWQgY291bnQgZnJvbSB0aGUgcG9ydC4KKwkgKi8KKwlpZiAoZW1iID09IExQRkNfU0xJNF9NQlhfRU1CRUQpIHsKKwkJcnNyY19leHQgPSAmbWJveC0+dS5tcWUudW4uYWxsb2NfcnNyY19leHRlbnRzOworCQlzaGRyID0gJnJzcmNfZXh0LT5oZWFkZXIuY2ZnX3NoZHI7CisJCSpleHRudF9jbnQgPSBiZl9nZXQobHBmY19tYnhfcnNyY19jbnQsICZyc3JjX2V4dC0+dS5yc3ApOworCX0gZWxzZSB7CisJCXZpcnRhZGRyID0gbWJveC0+c2dlX2FycmF5LT5hZGRyWzBdOworCQluX3JzcmMgPSAoc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9yc3JjX2V4dGVudCAqKSB2aXJ0YWRkcjsKKwkJc2hkciA9ICZuX3JzcmMtPmNmZ19zaGRyOworCQkqZXh0bnRfY250ID0gYmZfZ2V0KGxwZmNfbWJ4X3JzcmNfY250LCBuX3JzcmMpOworCX0KKworCWlmIChiZl9nZXQobHBmY19tYm94X2hkcl9zdGF0dXMsICZzaGRyLT5yZXNwb25zZSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCB8IExPR19JTklULAorCQkJIjI5ODQgRmFpbGVkIHRvIHJlYWQgYWxsb2NhdGVkIHJlc291cmNlcyAiCisJCQkiZm9yIHR5cGUgJWQgLSBTdGF0dXMgMHgleCBBZGQnbCBTdGF0dXMgMHgleC5cbiIsCisJCQl0eXBlLAorCQkJYmZfZ2V0KGxwZmNfbWJveF9oZHJfc3RhdHVzLCAmc2hkci0+cmVzcG9uc2UpLAorCQkJYmZfZ2V0KGxwZmNfbWJveF9oZHJfYWRkX3N0YXR1cywgJnNoZHItPnJlc3BvbnNlKSk7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisgZXJyX2V4aXQ6CisJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgbWJveCk7CisJcmV0dXJuIHJjOworfQorCisvKioKICAqIGxwZmNfc2xpNF9oYmFfc2V0dXAgLSBTTEk0IGRldmljZSBpbnRpYWxpemF0aW9uIFBDSSBmdW5jdGlvbgogICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgogICoKQEAgLTU4MzcsNiArNTk5Miw3IEBACiAJCQkJCSJBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKEFFUilcbiIpOwogCQkJcGhiYS0+Y2ZnX2Flcl9zdXBwb3J0ID0gMDsKIAkJfQorCQlyYyA9IDA7CiAJfQogCiAJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9NT0RFKSkgewpAQCAtNjYzNCw2ICs2NzkwLDkgQEAKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlpbnQgcmM7CiAKKwkvKiBkdW1wIGZyb20gaXNzdWUgbWFpbGJveCBjb21tYW5kIGlmIHNldHVwICovCisJbHBmY19pZGlhZ19tYnhhY2NfZHVtcF9pc3N1ZV9tYm94KHBoYmEsICZtYm94cS0+dS5tYik7CisKIAlyYyA9IGxwZmNfbWJveF9kZXZfY2hlY2socGhiYSk7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwgTE9HX1NMSSwKQEAgLTczMTgsMTIgKzc0NzcsMTIgQEAKIAkJYmZfc2V0KHdxZV9xb3NkLCAmd3FlLT5lbHNfcmVxLndxZV9jb20sIDEpOwogCQliZl9zZXQod3FlX2xlbmxvYywgJndxZS0+ZWxzX3JlcS53cWVfY29tLCBMUEZDX1dRRV9MRU5MT0NfTk9ORSk7CiAJCWJmX3NldCh3cWVfZWJkZV9jbnQsICZ3cWUtPmVsc19yZXEud3FlX2NvbSwgMCk7Ci0JYnJlYWs7CisJCWJyZWFrOwogCWNhc2UgQ01EX1hNSVRfU0VRVUVOQ0U2NF9DWDoKIAkJYmZfc2V0KHdxZV9jdHh0X3RhZywgJndxZS0+eG1pdF9zZXF1ZW5jZS53cWVfY29tLAogCQkgICAgICAgaW9jYnEtPmlvY2IudW4udWxwV29yZFszXSk7CiAJCWJmX3NldCh3cWVfcmN2b3hpZCwgJndxZS0+eG1pdF9zZXF1ZW5jZS53cWVfY29tLAotCQkgICAgICAgaW9jYnEtPmlvY2IudWxwQ29udGV4dCk7CisJCSAgICAgICBpb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5veF9pZCk7CiAJCS8qIFRoZSBlbnRpcmUgc2VxdWVuY2UgaXMgdHJhbnNtaXR0ZWQgZm9yIHRoaXMgSU9DQiAqLwogCQl4bWl0X2xlbiA9IHRvdGFsX2xlbjsKIAkJY21uZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1I7CkBAIC03MzQxLDcgKzc1MDAsNyBAQAogCQliZl9zZXQod3FlX2ViZGVfY250LCAmd3FlLT54bWl0X3NlcXVlbmNlLndxZV9jb20sIDApOwogCQl3cWUtPnhtaXRfc2VxdWVuY2UueG1pdF9sZW4gPSB4bWl0X2xlbjsKIAkJY29tbWFuZF90eXBlID0gT1RIRVJfQ09NTUFORDsKLQlicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBDTURfWE1JVF9CQ0FTVDY0X0NOOgogCQkvKiB3b3JkMyBpb2NiPWlvdGFnMzIgd3FlPXNlcV9wYXlsb2FkX2xlbiAqLwogCQl3cWUtPnhtaXRfYmNhc3Q2NC5zZXFfcGF5bG9hZF9sZW4gPSB4bWl0X2xlbjsKQEAgLTczNTUsNyArNzUxNCw3IEBACiAJCWJmX3NldCh3cWVfbGVubG9jLCAmd3FlLT54bWl0X2JjYXN0NjQud3FlX2NvbSwKIAkJICAgICAgIExQRkNfV1FFX0xFTkxPQ19XT1JEMyk7CiAJCWJmX3NldCh3cWVfZWJkZV9jbnQsICZ3cWUtPnhtaXRfYmNhc3Q2NC53cWVfY29tLCAwKTsKLQlicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBDTURfRkNQX0lXUklURTY0X0NSOgogCQljb21tYW5kX3R5cGUgPSBGQ1BfQ09NTUFORF9EQVRBX09VVDsKIAkJLyogd29yZDMgaW9jYj1pb3RhZyB3cWU9cGF5bG9hZF9vZmZzZXRfbGVuICovCkBAIC03Mzc1LDcgKzc1MzQsNyBAQAogCQkgICAgICAgTFBGQ19XUUVfTEVOTE9DX1dPUkQ0KTsKIAkJYmZfc2V0KHdxZV9lYmRlX2NudCwgJndxZS0+ZmNwX2l3cml0ZS53cWVfY29tLCAwKTsKIAkJYmZfc2V0KHdxZV9wdSwgJndxZS0+ZmNwX2l3cml0ZS53cWVfY29tLCBpb2NicS0+aW9jYi51bHBQVSk7Ci0JYnJlYWs7CisJCWJyZWFrOwogCWNhc2UgQ01EX0ZDUF9JUkVBRDY0X0NSOgogCQkvKiB3b3JkMyBpb2NiPWlvdGFnIHdxZT1wYXlsb2FkX29mZnNldF9sZW4gKi8KIAkJLyogQWRkIHRoZSBGQ1BfQ01EIGFuZCBGQ1BfUlNQIHNpemVzIHRvIGdldCB0aGUgb2Zmc2V0ICovCkBAIC03Mzk0LDcgKzc1NTMsNyBAQAogCQkgICAgICAgTFBGQ19XUUVfTEVOTE9DX1dPUkQ0KTsKIAkJYmZfc2V0KHdxZV9lYmRlX2NudCwgJndxZS0+ZmNwX2lyZWFkLndxZV9jb20sIDApOwogCQliZl9zZXQod3FlX3B1LCAmd3FlLT5mY3BfaXJlYWQud3FlX2NvbSwgaW9jYnEtPmlvY2IudWxwUFUpOwotCWJyZWFrOworCQlicmVhazsKIAljYXNlIENNRF9GQ1BfSUNNTkQ2NF9DUjoKIAkJLyogd29yZDMgaW9jYj1JT19UQUcgd3FlPXJlc2VydmVkICovCiAJCXdxZS0+ZmNwX2ljbWQucnNydmQzID0gMDsKQEAgLTc0MDcsNyArNzU2Niw3IEBACiAJCWJmX3NldCh3cWVfbGVubG9jLCAmd3FlLT5mY3BfaWNtZC53cWVfY29tLAogCQkgICAgICAgTFBGQ19XUUVfTEVOTE9DX05PTkUpOwogCQliZl9zZXQod3FlX2ViZGVfY250LCAmd3FlLT5mY3BfaWNtZC53cWVfY29tLCAwKTsKLQlicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBDTURfR0VOX1JFUVVFU1Q2NF9DUjoKIAkJLyogRm9yIHRoaXMgY29tbWFuZCBjYWxjdWxhdGUgdGhlIHhtaXQgbGVuZ3RoIG9mIHRoZQogCQkgKiByZXF1ZXN0IGJkZS4KQEAgLTc0NDIsNyArNzYwMSw3IEBACiAJCWJmX3NldCh3cWVfbGVubG9jLCAmd3FlLT5nZW5fcmVxLndxZV9jb20sIExQRkNfV1FFX0xFTkxPQ19OT05FKTsKIAkJYmZfc2V0KHdxZV9lYmRlX2NudCwgJndxZS0+Z2VuX3JlcS53cWVfY29tLCAwKTsKIAkJY29tbWFuZF90eXBlID0gT1RIRVJfQ09NTUFORDsKLQlicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBDTURfWE1JVF9FTFNfUlNQNjRfQ1g6CiAJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKilpb2NicS0+Y29udGV4dDE7CiAJCS8qIHdvcmRzMC0yIEJERSBtZW1jcHkgKi8KQEAgLTc0NTcsNyArNzYxNiw3IEBACiAJCSAgICAgICAoKGlvY2JxLT5pb2NiLnVscEN0X2ggPDwgMSkgfCBpb2NicS0+aW9jYi51bHBDdF9sKSk7CiAJCWJmX3NldCh3cWVfcHUsICZ3cWUtPnhtaXRfZWxzX3JzcC53cWVfY29tLCBpb2NicS0+aW9jYi51bHBQVSk7CiAJCWJmX3NldCh3cWVfcmN2b3hpZCwgJndxZS0+eG1pdF9lbHNfcnNwLndxZV9jb20sCi0JCSAgICAgICBpb2NicS0+aW9jYi51bHBDb250ZXh0KTsKKwkJICAgICAgIGlvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLm94X2lkKTsKIAkJaWYgKCFpb2NicS0+aW9jYi51bHBDdF9oICYmIGlvY2JxLT5pb2NiLnVscEN0X2wpCiAJCQliZl9zZXQod3FlX2N0eHRfdGFnLCAmd3FlLT54bWl0X2Vsc19yc3Aud3FlX2NvbSwKIAkJCSAgICAgICBwaGJhLT52cGlfaWRzW2lvY2JxLT52cG9ydC0+dnBpXSk7CkBAIC03NDcwLDcgKzc2MjksNyBAQAogCQliZl9zZXQod3FlX3JzcF90ZW1wX3JwaSwgJndxZS0+eG1pdF9lbHNfcnNwLAogCQkgICAgICAgcGhiYS0+c2xpNF9oYmEucnBpX2lkc1tuZGxwLT5ubHBfcnBpXSk7CiAJCWNvbW1hbmRfdHlwZSA9IE9USEVSX0NPTU1BTkQ7Ci0JYnJlYWs7CisJCWJyZWFrOwogCWNhc2UgQ01EX0NMT1NFX1hSSV9DTjoKIAljYXNlIENNRF9BQk9SVF9YUklfQ046CiAJY2FzZSBDTURfQUJPUlRfWFJJX0NYOgpAQCAtNzUwOSw3ICs3NjY4LDcgQEAKIAkJY21uZCA9IENNRF9BQk9SVF9YUklfQ1g7CiAJCWNvbW1hbmRfdHlwZSA9IE9USEVSX0NPTU1BTkQ7CiAJCXhyaXRhZyA9IDA7Ci0JYnJlYWs7CisJCWJyZWFrOwogCWNhc2UgQ01EX1hNSVRfQkxTX1JTUDY0X0NYOgogCQkvKiBBcyBCTFMgQUJUUyBSU1AgV1FFIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gb3RoZXIgV1FFcywKIAkJICogd2UgcmUtY29uc3RydWN0IHRoaXMgV1FFIGhlcmUgYmFzZWQgb24gaW5mb3JtYXRpb24gaW4KQEAgLTc1NTMsNyArNzcxMiw3IEBACiAJCQkgICAgICAgYmZfZ2V0KGxwZmNfcnNuX2NvZGUsICZpb2NicS0+aW9jYi51bi5ibHNfcnNwKSk7CiAJCX0KIAotCWJyZWFrOworCQlicmVhazsKIAljYXNlIENNRF9YUklfQUJPUlRFRF9DWDoKIAljYXNlIENNRF9DUkVBVEVfWFJJX0NSOiAvKiBEbyB3ZSBleHBlY3QgdG8gdXNlIHRoaXM/ICovCiAJY2FzZSBDTURfSU9DQl9GQ1BfSUJJRElSNjRfQ1I6IC8qIGJpZGlyZWN0aW9uYWwgeGZlciAqLwpAQCAtNzU2NSw3ICs3NzI0LDcgQEAKIAkJCQkiMjAxNCBJbnZhbGlkIGNvbW1hbmQgMHgleFxuIiwKIAkJCQlpb2NicS0+aW9jYi51bHBDb21tYW5kKTsKIAkJcmV0dXJuIElPQ0JfRVJST1I7Ci0JYnJlYWs7CisJCWJyZWFrOwogCX0KIAogCWJmX3NldCh3cWVfeHJpX3RhZywgJndxZS0+Z2VuZXJpYy53cWVfY29tLCB4cml0YWcpOwpAQCAtMTA0ODEsMTAgKzEwNjQwLDE0IEBACiAJc3RydWN0IGxwZmNfcXVldWUgKmhycSA9IHBoYmEtPnNsaTRfaGJhLmhkcl9ycTsKIAlzdHJ1Y3QgbHBmY19xdWV1ZSAqZHJxID0gcGhiYS0+c2xpNF9oYmEuZGF0X3JxOwogCXN0cnVjdCBoYnFfZG1hYnVmICpkbWFfYnVmOwotCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCBzdGF0dXMsIHJxX2lkOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCi0JaWYgKGJmX2dldChscGZjX3JjcWVfcnFfaWQsIHJjcWUpICE9IGhycS0+cXVldWVfaWQpCisJaWYgKGJmX2dldChscGZjX2NxZV9jb2RlLCByY3FlKSA9PSBDUUVfQ09ERV9SRUNFSVZFX1YxKQorCQlycV9pZCA9IGJmX2dldChscGZjX3JjcWVfcnFfaWRfdjEsIHJjcWUpOworCWVsc2UKKwkJcnFfaWQgPSBiZl9nZXQobHBmY19yY3FlX3JxX2lkLCByY3FlKTsKKwlpZiAocnFfaWQgIT0gaHJxLT5xdWV1ZV9pZCkKIAkJZ290byBvdXQ7CiAKIAlzdGF0dXMgPSBiZl9nZXQobHBmY19yY3FlX3N0YXR1cywgcmNxZSk7CkBAIC0xMDU2Myw2ICsxMDcyNiw3IEBACiAJCQkJKHN0cnVjdCBzbGk0X3djcWVfeHJpX2Fib3J0ZWQgKikmY3FldnQpOwogCQlicmVhazsKIAljYXNlIENRRV9DT0RFX1JFQ0VJVkU6CisJY2FzZSBDUUVfQ09ERV9SRUNFSVZFX1YxOgogCQkvKiBQcm9jZXNzIHRoZSBSUSBldmVudCAqLwogCQlwaGJhLT5sYXN0X2NvbXBsZXRpb25fdGltZSA9IGppZmZpZXM7CiAJCXdvcmtwb3N0ZWQgPSBscGZjX3NsaTRfc3BfaGFuZGxlX3JjcWUocGhiYSwKQEAgLTEyMzQ1LDE5ICsxMjUwOSwxOCBAQAogfQogCiAvKioKLSAqIGxwZmNfc2xpNF9pbml0X3JwaV9oZHJzIC0gUG9zdCB0aGUgcnBpIGhlYWRlciBtZW1vcnkgcmVnaW9uIHRvIHRoZSBwb3J0CisgKiBscGZjX3NsaTRfYWxsb2NfeHJpIC0gR2V0IGFuIGF2YWlsYWJsZSBycGkgaW4gdGhlIGRldmljZSdzIHJhbmdlCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBwb3N0IHJwaSBoZWFkZXIgdGVtcGxhdGVzIHRvIHRoZQotICogcG9ydCBmb3IgdGhvc2UgU0xJNCBwb3J0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGV4dGVudHMuICBUaGlzIHJvdXRpbmUKLSAqIHBvc3RzIGEgUEFHRV9TSVpFIG1lbW9yeSByZWdpb24gdG8gdGhlIHBvcnQgdG8gaG9sZCB1cCB0bwotICogUEFHRV9TSVpFIG1vZHVsbyA2NCBycGkgY29udGV4dCBoZWFkZXJzLiAgVGhpcyBpcyBhbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCi0gKiBhbmQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCisgKiBIQkEgY29uc2lzdGVudCB3aXRoIHRoZSBTTEktNCBpbnRlcmZhY2Ugc3BlYy4gIFRoaXMgcm91dGluZQorICogcG9zdHMgYSBTTEk0X1BBR0VfU0laRSBtZW1vcnkgcmVnaW9uIHRvIHRoZSBwb3J0IHRvIGhvbGQgdXAgdG8KKyAqIFNMSTRfUEFHRV9TSVpFIG1vZHVsbyA2NCBycGkgY29udGV4dCBoZWFkZXJzLgogICoKLSAqIFJldHVybiBjb2RlcwotICoJMCAtIHN1Y2Nlc3NmdWwKLSAqCS1FUlJPUiAtIG90aGVyd2lzZS4KLSAqLworICogUmV0dXJucworICoJQSBub256ZXJvIHJwaSBkZWZpbmVkIGFzIHJwaV9iYXNlIDw9IHJwaSA8IG1heF9ycGkgaWYgc3VjY2Vzc2Z1bAorICoJTFBGQ19SUElfQUxMT0NfRVJST1IgaWYgbm8gcnBpcyBhcmUgYXZhaWxhYmxlLgorICoqLwogdWludDE2X3QKIGxwZmNfc2xpNF9hbGxvY194cmkoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTM0MDYsNyArMTM1NjksNyBAQAogICogVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIHhyaSBtYXBzIHRvIHRoZSBrbm93biByYW5nZSBvZiBYUklzIGFsbG9jYXRlZCBhbgogICogdXNlZCBieSB0aGUgZHJpdmVyLgogICoqLwotc3RhdGljIHVpbnQxNl90Cit1aW50MTZfdAogbHBmY19zbGk0X3hyaV9pbnJhbmdlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJICAgICAgdWludDE2X3QgeHJpKQogewpAQCAtMTM2NDMsMTAgKzEzODA2LDEyIEBACiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19wcmVwX3NlcShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBoYnFfZG1hYnVmICpzZXFfZG1hYnVmKQogeworCXN0cnVjdCBoYnFfZG1hYnVmICpoYnFfYnVmOwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZF9idWYsICpuX2J1ZjsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqZmlyc3RfaW9jYnEsICppb2NicTsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmY19oZHI7CiAJdWludDMyX3Qgc2lkOworCXVpbnQzMl90IGxlbiwgdG90X2xlbjsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpwYmRlOwogCiAJZmNfaGRyID0gKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKilzZXFfZG1hYnVmLT5oYnVmLnZpcnQ7CkBAIC0xMzY1NSw2ICsxMzgyMCw3IEBACiAJbHBmY191cGRhdGVfcmN2X3RpbWVfc3RhbXAodnBvcnQpOwogCS8qIGdldCB0aGUgUmVtb3RlIFBvcnQncyBTSUQgKi8KIAlzaWQgPSBzbGk0X3NpZF9mcm9tX2ZjX2hkcihmY19oZHIpOworCXRvdF9sZW4gPSAwOwogCS8qIEdldCBhbiBpb2NicSBzdHJ1Y3QgdG8gZmlsbCBpbi4gKi8KIAlmaXJzdF9pb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicSh2cG9ydC0+cGhiYSk7CiAJaWYgKGZpcnN0X2lvY2JxKSB7CkBAIC0xMzY2Miw5ICsxMzgyOCwxMiBAQAogCQlmaXJzdF9pb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5hY2NfbGVuID0gMDsKIAkJZmlyc3RfaW9jYnEtPmlvY2IudWxwU3RhdHVzID0gSU9TVEFUX1NVQ0NFU1M7CiAJCWZpcnN0X2lvY2JxLT5pb2NiLnVscENvbW1hbmQgPSBDTURfSU9DQl9SQ1ZfU0VRNjRfQ1g7Ci0JCWZpcnN0X2lvY2JxLT5pb2NiLnVscENvbnRleHQgPSBiZTE2X3RvX2NwdShmY19oZHItPmZoX294X2lkKTsKLQkJLyogaW9jYnEgaXMgcHJlcHBlZCBmb3IgaW50ZXJuYWwgY29uc3VtcHRpb24uICBMb2dpY2FsIHZwaS4gKi8KLQkJZmlyc3RfaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMudnBpID0gdnBvcnQtPnZwaTsKKwkJZmlyc3RfaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IE5PX1hSSTsKKwkJZmlyc3RfaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMub3hfaWQgPQorCQkJYmUxNl90b19jcHUoZmNfaGRyLT5maF9veF9pZCk7CisJCS8qIGlvY2JxIGlzIHByZXBwZWQgZm9yIGludGVybmFsIGNvbnN1bXB0aW9uLiAgUGh5c2ljYWwgdnBpLiAqLworCQlmaXJzdF9pb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy52cGkgPQorCQkJdnBvcnQtPnBoYmEtPnZwaV9pZHNbdnBvcnQtPnZwaV07CiAJCS8qIHB1dCB0aGUgZmlyc3QgYnVmZmVyIGludG8gdGhlIGZpcnN0IElPQ0JxICovCiAJCWZpcnN0X2lvY2JxLT5jb250ZXh0MiA9ICZzZXFfZG1hYnVmLT5kYnVmOwogCQlmaXJzdF9pb2NicS0+Y29udGV4dDMgPSBOVUxMOwpAQCAtMTM2NzIsOSArMTM4NDEsOSBAQAogCQlmaXJzdF9pb2NicS0+aW9jYi51bi5jb250NjRbMF0udHVzLmYuYmRlU2l6ZSA9CiAJCQkJCQkJTFBGQ19EQVRBX0JVRl9TSVpFOwogCQlmaXJzdF9pb2NicS0+aW9jYi51bi5yY3ZlbHMucmVtb3RlSUQgPSBzaWQ7Ci0JCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KLQkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwKKwkJdG90X2xlbiA9IGJmX2dldChscGZjX3JjcWVfbGVuZ3RoLAogCQkJCSAgICAgICAmc2VxX2RtYWJ1Zi0+Y3FfZXZlbnQuY3FlLnJjcWVfY21wbCk7CisJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gPSB0b3RfbGVuOwogCX0KIAlpb2NicSA9IGZpcnN0X2lvY2JxOwogCS8qCkBAIC0xMzY5Miw5ICsxMzg2MSwxMyBAQAogCQkJcGJkZSA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopCiAJCQkJCSZpb2NicS0+aW9jYi51bnNsaTMuc2xpM1dvcmRzWzRdOwogCQkJcGJkZS0+dHVzLmYuYmRlU2l6ZSA9IExQRkNfREFUQV9CVUZfU0laRTsKLQkJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KLQkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwKLQkJCQkgICAgICAgJnNlcV9kbWFidWYtPmNxX2V2ZW50LmNxZS5yY3FlX2NtcGwpOworCisJCQkvKiBXZSBuZWVkIHRvIGdldCB0aGUgc2l6ZSBvdXQgb2YgdGhlIHJpZ2h0IENRRSAqLworCQkJaGJxX2J1ZiA9IGNvbnRhaW5lcl9vZihkX2J1Ziwgc3RydWN0IGhicV9kbWFidWYsIGRidWYpOworCQkJbGVuID0gYmZfZ2V0KGxwZmNfcmNxZV9sZW5ndGgsCisJCQkJICAgICAgICZoYnFfYnVmLT5jcV9ldmVudC5jcWUucmNxZV9jbXBsKTsKKwkJCWlvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0gbGVuOworCQkJdG90X2xlbiArPSBsZW47CiAJCX0gZWxzZSB7CiAJCQlpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicSh2cG9ydC0+cGhiYSk7CiAJCQlpZiAoIWlvY2JxKSB7CkBAIC0xMzcxMiw5ICsxMzg4NSwxNCBAQAogCQkJaW9jYnEtPmlvY2IudWxwQmRlQ291bnQgPSAxOwogCQkJaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLnR1cy5mLmJkZVNpemUgPQogCQkJCQkJCUxQRkNfREFUQV9CVUZfU0laRTsKLQkJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KLQkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwKLQkJCQkgICAgICAgJnNlcV9kbWFidWYtPmNxX2V2ZW50LmNxZS5yY3FlX2NtcGwpOworCisJCQkvKiBXZSBuZWVkIHRvIGdldCB0aGUgc2l6ZSBvdXQgb2YgdGhlIHJpZ2h0IENRRSAqLworCQkJaGJxX2J1ZiA9IGNvbnRhaW5lcl9vZihkX2J1Ziwgc3RydWN0IGhicV9kbWFidWYsIGRidWYpOworCQkJbGVuID0gYmZfZ2V0KGxwZmNfcmNxZV9sZW5ndGgsCisJCQkJICAgICAgICZoYnFfYnVmLT5jcV9ldmVudC5jcWUucmNxZV9jbXBsKTsKKwkJCXRvdF9sZW4gKz0gbGVuOworCQkJaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYWNjX2xlbiA9IHRvdF9sZW47CisKIAkJCWlvY2JxLT5pb2NiLnVuLnJjdmVscy5yZW1vdGVJRCA9IHNpZDsKIAkJCWxpc3RfYWRkX3RhaWwoJmlvY2JxLT5saXN0LCAmZmlyc3RfaW9jYnEtPmxpc3QpOwogCQl9CkBAIC0xMzc4Nyw3ICsxMzk2NSwxMyBAQAogCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsICZkbWFidWYtPmRidWYpOwogCQlyZXR1cm47CiAJfQotCWZjZmkgPSBiZl9nZXQobHBmY19yY3FlX2ZjZl9pZCwgJmRtYWJ1Zi0+Y3FfZXZlbnQuY3FlLnJjcWVfY21wbCk7CisJaWYgKChiZl9nZXQobHBmY19jcWVfY29kZSwKKwkJICAgICZkbWFidWYtPmNxX2V2ZW50LmNxZS5yY3FlX2NtcGwpID09IENRRV9DT0RFX1JFQ0VJVkVfVjEpKQorCQlmY2ZpID0gYmZfZ2V0KGxwZmNfcmNxZV9mY2ZfaWRfdjEsCisJCQkgICAgICAmZG1hYnVmLT5jcV9ldmVudC5jcWUucmNxZV9jbXBsKTsKKwllbHNlCisJCWZjZmkgPSBiZl9nZXQobHBmY19yY3FlX2ZjZl9pZCwKKwkJCSAgICAgICZkbWFidWYtPmNxX2V2ZW50LmNxZS5yY3FlX2NtcGwpOwogCXZwb3J0ID0gbHBmY19mY19mcmFtZV90b192cG9ydChwaGJhLCBmY19oZHIsIGZjZmkpOwogCWlmICghdnBvcnQgfHwgISh2cG9ydC0+dnBpX3N0YXRlICYgTFBGQ19WUElfUkVHSVNURVJFRCkpIHsKIAkJLyogdGhyb3cgb3V0IHRoZSBmcmFtZSAqLwpAQCAtMTQ0NTEsNiArMTQ2MzUsOTIgQEAKIH0KIAogLyoqCisgKiBscGZjX2NoZWNrX25leHRfZmNmX3ByaQorICogcGhiYSBwb2ludGVyIHRvIHRoZSBscGZjX2hiYSBzdHJ1Y3QgZm9yIHRoaXMgcG9ydC4KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgbHBmY19zbGk0X2ZjZl9ycl9uZXh0X2luZGV4X2dldAorICogcm91dGluZSB3aGVuIHRoZSBycl9ibWFzayBpcyBlbXB0eS4gVGhlIEZDRiBpbmRlY2llcyBhcmUgcHV0IGludG8gdGhlCisgKiBycl9ibWFzayBiYXNlZCBvbiB0aGVpciBwcmlvcml0eSBsZXZlbC4gU3RhcnRpbmcgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eQorICogdG8gdGhlIGxvd2VzdC4gVGhlIG1vc3QgbGlrZWx5IEZDRiBjYW5kaWRhdGUgd2lsbCBiZSBpbiB0aGUgaGlnaGVzdAorICogcHJpb3JpdHkgZ3JvdXAuIFdoZW4gdGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpdCBzZWFyY2hlcyB0aGUgZmNmX3ByaSBsaXN0IGZvcgorICogbmV4dCBsb3dlc3QgcHJpb3JpdHkgZ3JvdXAgYW5kIHJlcG9wdWxhdGVzIHRoZSBycl9ibWFzayB3aXRoIG9ubHkgdGhvc2UKKyAqIGZjZl9pbmRleGVzLgorICogcmV0dXJuczoKKyAqIDE9c3VjY2VzcyAwPWZhaWx1cmUKKyAqKi8KK2ludAorbHBmY19jaGVja19uZXh0X2ZjZl9wcmlfbGV2ZWwoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXVpbnQxNl90IG5leHRfZmNmX3ByaTsKKwl1aW50MTZfdCBsYXN0X2luZGV4OworCXN0cnVjdCBscGZjX2ZjZl9wcmkgKmZjZl9wcmk7CisJaW50IHJjOworCWludCByZXQgPSAwOworCisJbGFzdF9pbmRleCA9IGZpbmRfZmlyc3RfYml0KHBoYmEtPmZjZi5mY2ZfcnJfYm1hc2ssCisJCQlMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCk7CisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0ZJUCwKKwkJCSIzMDYwIExhc3QgSURYICVkXG4iLCBsYXN0X2luZGV4KTsKKwlpZiAobGlzdF9lbXB0eSgmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRklQLAorCQkJIjMwNjEgTGFzdCBJRFggJWRcbiIsIGxhc3RfaW5kZXgpOworCQlyZXR1cm4gMDsgLyogRW1wdHkgcnIgbGlzdCAqLworCX0KKwluZXh0X2ZjZl9wcmkgPSAwOworCS8qCisJICogQ2xlYXIgdGhlIHJyX2JtYXNrIGFuZCBzZXQgYWxsIG9mIHRoZSBiaXRzIHRoYXQgYXJlIGF0IHRoaXMKKwkgKiBwcmlvcml0eS4KKwkgKi8KKwltZW1zZXQocGhiYS0+ZmNmLmZjZl9ycl9ibWFzaywgMCwKKwkJCXNpemVvZigqcGhiYS0+ZmNmLmZjZl9ycl9ibWFzaykpOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNmX3ByaSwgJnBoYmEtPmZjZi5mY2ZfcHJpX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGZjZl9wcmktPmZjZl9yZWMuZmxhZyAmIExQRkNfRkNGX0ZMT0dJX0ZBSUxFRCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiB0aGUgMXN0IHByaW9yaXR5IHRoYXQgaGFzIG5vdCBGTE9HSSBmYWlsZWQKKwkJICogd2lsbCBiZSB0aGUgaGlnaGVzdC4KKwkJICovCisJCWlmICghbmV4dF9mY2ZfcHJpKQorCQkJbmV4dF9mY2ZfcHJpID0gZmNmX3ByaS0+ZmNmX3JlYy5wcmlvcml0eTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJaWYgKGZjZl9wcmktPmZjZl9yZWMucHJpb3JpdHkgPT0gbmV4dF9mY2ZfcHJpKSB7CisJCQlyYyA9IGxwZmNfc2xpNF9mY2ZfcnJfaW5kZXhfc2V0KHBoYmEsCisJCQkJCQlmY2ZfcHJpLT5mY2ZfcmVjLmZjZl9pbmRleCk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJfQorCS8qCisJICogaWYgbmV4dF9mY2ZfcHJpIHdhcyBub3Qgc2V0IGFib3ZlIGFuZCB0aGUgbGlzdCBpcyBub3QgZW1wdHkgdGhlbgorCSAqIHdlIGhhdmUgZmFpbGVkIGZsb2dpcyBvbiBhbGwgb2YgdGhlbS4gU28gcmVzZXQgZmxvZ2kgZmFpbGVkCisJICogYW5kIHN0YXJ0IGF0IHRoZSBiZWdpbmluZy4KKwkgKi8KKwlpZiAoIW5leHRfZmNmX3ByaSAmJiAhbGlzdF9lbXB0eSgmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY2ZfcHJpLCAmcGhiYS0+ZmNmLmZjZl9wcmlfbGlzdCwgbGlzdCkgeworCQkJZmNmX3ByaS0+ZmNmX3JlYy5mbGFnICY9IH5MUEZDX0ZDRl9GTE9HSV9GQUlMRUQ7CisJCQkvKgorCQkJICogdGhlIDFzdCBwcmlvcml0eSB0aGF0IGhhcyBub3QgRkxPR0kgZmFpbGVkCisJCQkgKiB3aWxsIGJlIHRoZSBoaWdoZXN0LgorCQkJICovCisJCQlpZiAoIW5leHRfZmNmX3ByaSkKKwkJCQluZXh0X2ZjZl9wcmkgPSBmY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5OworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCWlmIChmY2ZfcHJpLT5mY2ZfcmVjLnByaW9yaXR5ID09IG5leHRfZmNmX3ByaSkgeworCQkJCXJjID0gbHBmY19zbGk0X2ZjZl9ycl9pbmRleF9zZXQocGhiYSwKKwkJCQkJCWZjZl9wcmktPmZjZl9yZWMuZmNmX2luZGV4KTsKKwkJCQlpZiAocmMpCisJCQkJCXJldHVybiAwOworCQkJfQorCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gMTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJcmV0dXJuIHJldDsKK30KKy8qKgogICogbHBmY19zbGk0X2ZjZl9ycl9uZXh0X2luZGV4X2dldCAtIEdldCBuZXh0IGVsaWdpYmxlIGZjZiByZWNvcmQgaW5kZXgKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTE0NDY2LDYgKzE0NzM2LDcgQEAKIAl1aW50MTZfdCBuZXh0X2ZjZl9pbmRleDsKIAogCS8qIFNlYXJjaCBzdGFydCBmcm9tIG5leHQgYml0IG9mIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiBpbmRleCAqLworbmV4dF9wcmlvcml0eToKIAluZXh0X2ZjZl9pbmRleCA9IChwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHggKyAxKSAlCiAJCQkJCUxQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYOwogCW5leHRfZmNmX2luZGV4ID0gZmluZF9uZXh0X2JpdChwaGJhLT5mY2YuZmNmX3JyX2JtYXNrLApAQCAtMTQ0NzMsMTcgKzE0NzQ0LDQ2IEBACiAJCQkJICAgICAgIG5leHRfZmNmX2luZGV4KTsKIAogCS8qIFdyYXAgYXJvdW5kIGNvbmRpdGlvbiBvbiBwaGJhLT5mY2YuZmNmX3JyX2JtYXNrICovCi0JaWYgKG5leHRfZmNmX2luZGV4ID49IExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYKQorCWlmIChuZXh0X2ZjZl9pbmRleCA+PSBMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCkgeworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHdyYXBwZWQgdGhlbiB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBiaXRzIHRoYXQKKwkJICogaGF2ZSBiZWVuIHRlc3RlZCBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hlbiB3ZSBzaG91bGQKKwkJICogY2hhbmdlIHRoZSBwcmlvcml0eSBsZXZlbC4KKwkJICovCiAJCW5leHRfZmNmX2luZGV4ID0gZmluZF9uZXh0X2JpdChwaGJhLT5mY2YuZmNmX3JyX2JtYXNrLAogCQkJCQkgICAgICAgTFBGQ19TTEk0X0ZDRl9UQkxfSU5EWF9NQVgsIDApOworCX0KKwogCiAJLyogQ2hlY2sgcm91bmRyb2JpbiBmYWlsb3ZlciBsaXN0IGVtcHR5IGNvbmRpdGlvbiAqLwotCWlmIChuZXh0X2ZjZl9pbmRleCA+PSBMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCkgeworCWlmIChuZXh0X2ZjZl9pbmRleCA+PSBMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCB8fAorCQluZXh0X2ZjZl9pbmRleCA9PSBwaGJhLT5mY2YuY3VycmVudF9yZWMuZmNmX2luZHgpIHsKKwkJLyoKKwkJICogSWYgbmV4dCBmY2YgaW5kZXggaXMgbm90IGZvdW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBsb3dlcgorCQkgKiBQcmlvcml0eSBsZXZlbCBmY2YncyBpbiB0aGUgZmNmX3ByaW9yaXR5IGxpc3QuCisJCSAqIFNldCB1cCB0aGUgcnJfYm1hc2sgd2l0aCBhbGwgb2YgdGhlIGF2YWlhYmxlIGZjZiBiaXRzCisJCSAqIGF0IHRoYXQgbGV2ZWwgYW5kIGNvbnRpbnVlIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4KKwkJICovCisJCWlmIChscGZjX2NoZWNrX25leHRfZmNmX3ByaV9sZXZlbChwaGJhKSkKKwkJCWdvdG8gbmV4dF9wcmlvcml0eTsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0ZJUCwKIAkJCQkiMjg0NCBObyByb3VuZHJvYmluIGZhaWxvdmVyIEZDRiBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkU7CisJCWlmIChuZXh0X2ZjZl9pbmRleCA+PSBMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWCkKKwkJCXJldHVybiBMUEZDX0ZDT0VfRkNGX05FWFRfTk9ORTsKKwkJZWxzZSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRklQLAorCQkJCSIzMDYzIE9ubHkgRkNGIGF2YWlsYWJsZSBpZHggJWQsIGZsYWcgJXhcbiIsCisJCQkJbmV4dF9mY2ZfaW5kZXgsCisJCQlwaGJhLT5mY2YuZmNmX3ByaVtuZXh0X2ZjZl9pbmRleF0uZmNmX3JlYy5mbGFnKTsKKwkJCXJldHVybiBuZXh0X2ZjZl9pbmRleDsKKwkJfQogCX0KIAorCWlmIChuZXh0X2ZjZl9pbmRleCA8IExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYICYmCisJCXBoYmEtPmZjZi5mY2ZfcHJpW25leHRfZmNmX2luZGV4XS5mY2ZfcmVjLmZsYWcgJgorCQlMUEZDX0ZDRl9GTE9HSV9GQUlMRUQpCisJCWdvdG8gbmV4dF9wcmlvcml0eTsKKwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCiAJCQkiMjg0NSBHZXQgbmV4dCByb3VuZHJvYmluIGZhaWxvdmVyIEZDRiAoeCV4KVxuIiwKIAkJCW5leHRfZmNmX2luZGV4KTsKQEAgLTE0NTM1LDYgKzE0ODM1LDcgQEAKIHZvaWQKIGxwZmNfc2xpNF9mY2ZfcnJfaW5kZXhfY2xlYXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCBmY2ZfaW5kZXgpCiB7CisJc3RydWN0IGxwZmNfZmNmX3ByaSAqZmNmX3ByaTsKIAlpZiAoZmNmX2luZGV4ID49IExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZJUCwKIAkJCQkiMjc2MiBGQ0YgKHgleCkgcmVhY2hlZCBkcml2ZXIncyBib29rICIKQEAgLTE0NTQzLDYgKzE0ODQ0LDE0IEBACiAJCXJldHVybjsKIAl9CiAJLyogQ2xlYXIgdGhlIGVsaWdpYmxlIEZDRiByZWNvcmQgaW5kZXggYm1hc2sgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjZl9wcmksICZwaGJhLT5mY2YuZmNmX3ByaV9saXN0LCBsaXN0KSB7CisJCWlmIChmY2ZfcHJpLT5mY2ZfcmVjLmZjZl9pbmRleCA9PSBmY2ZfaW5kZXgpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmZjZl9wcmktPmxpc3QpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAljbGVhcl9iaXQoZmNmX2luZGV4LCBwaGJhLT5mY2YuZmNmX3JyX2JtYXNrKTsKIAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19GSVAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCmluZGV4IDRiMTcwMzUuLjE5YmI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC04MSw2ICs4MSw4IEBACiAJIChmY19oZHIpLT5maF9mX2N0bFsxXSA8PCAgOCB8IFwKIAkgKGZjX2hkciktPmZoX2ZfY3RsWzJdKQogCisjZGVmaW5lIExQRkNfRldfUkVTRVRfTUFYSU1VTV9XQUlUXzEwTVNfQ05UIDEyMDAwCisKIGVudW0gbHBmY19zbGk0X3F1ZXVlX3R5cGUgewogCUxQRkNfRVEsCiAJTFBGQ19HQ1EsCkBAIC0xNTcsNiArMTU5LDI1IEBACiAjZGVmaW5lIFJFQ09SRF9WQUxJRAkweDAyCiB9OwogCitzdHJ1Y3QgbHBmY19mY2ZfcHJpX3JlYyB7CisJdWludDE2X3QgZmNmX2luZGV4OworI2RlZmluZSBMUEZDX0ZDRl9PTl9QUklfTElTVCAweDAwMDEKKyNkZWZpbmUgTFBGQ19GQ0ZfRkxPR0lfRkFJTEVEIDB4MDAwMgorCXVpbnQxNl90IGZsYWc7CisJdWludDMyX3QgcHJpb3JpdHk7Cit9OworCitzdHJ1Y3QgbHBmY19mY2ZfcHJpIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxwZmNfZmNmX3ByaV9yZWMgZmNmX3JlYzsKK307CisKKy8qCisgKiBNYXhpbXVtIEZDRiB0YWJsZSBpbmRleCwgaXQgaXMgZm9yIGRyaXZlciBpbnRlcm5hbCBib29rIGtlZXBpbmcsIGl0CisgKiBqdXN0IG5lZWRzIHRvIGJlIG5vIGxlc3MgdGhhbiB0aGUgc3VwcG9ydGVkIEhCQSdzIEZDRiB0YWJsZSBzaXplLgorICovCisjZGVmaW5lIExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYCTMyCisKIHN0cnVjdCBscGZjX2ZjZiB7CiAJdWludDE2X3QgZmNmaTsKIAl1aW50MzJfdCBmY2ZfZmxhZzsKQEAgLTE3NiwxNSArMTk3LDEzIEBACiAJdWludDMyX3QgZWxpZ2libGVfZmNmX2NudDsKIAlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGN1cnJlbnRfcmVjOwogCXN0cnVjdCBscGZjX2ZjZl9yZWMgZmFpbG92ZXJfcmVjOworCXN0cnVjdCBsaXN0X2hlYWQgZmNmX3ByaV9saXN0OworCXN0cnVjdCBscGZjX2ZjZl9wcmkgZmNmX3ByaVtMUEZDX1NMSTRfRkNGX1RCTF9JTkRYX01BWF07CisJdWludDMyX3QgY3VycmVudF9mY2Zfc2Nhbl9wcmk7CiAJc3RydWN0IHRpbWVyX2xpc3QgcmVkaXNjX3dhaXQ7CiAJdW5zaWduZWQgbG9uZyAqZmNmX3JyX2JtYXNrOyAvKiBFbGlnaWJsZSBGQ0YgaW5kZXhlcyBmb3IgUlIgZmFpbG92ZXIgKi8KIH07CiAKLS8qCi0gKiBNYXhpbXVtIEZDRiB0YWJsZSBpbmRleCwgaXQgaXMgZm9yIGRyaXZlciBpbnRlcm5hbCBib29rIGtlZXBpbmcsIGl0Ci0gKiBqdXN0IG5lZWRzIHRvIGJlIG5vIGxlc3MgdGhhbiB0aGUgc3VwcG9ydGVkIEhCQSdzIEZDRiB0YWJsZSBzaXplLgotICovCi0jZGVmaW5lIExQRkNfU0xJNF9GQ0ZfVEJMX0lORFhfTUFYCTMyCiAKICNkZWZpbmUgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUgIlJHMjMiCiAjZGVmaW5lIExQRkNfUkVHSU9OMjNfVkVSU0lPTgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IGMwMzkyMWIuLmMxZTBhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjIzIgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMjUiCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUJCSJscGZjIgogI2RlZmluZSBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6c3AiCiAjZGVmaW5lIExQRkNfRlBfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpmcCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaCBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAppbmRleCA3MzcwYzA4Li4zOTQ4YTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCkBAIC0zMyw5ICszMyw5IEBACiAvKgogICogTWVnYVJBSUQgU0FTIERyaXZlciBtZXRhIGRhdGEKICAqLwotI2RlZmluZSBNRUdBU0FTX1ZFUlNJT04JCQkJIjAwLjAwLjA1LjM4LXJjMSIKLSNkZWZpbmUgTUVHQVNBU19SRUxEQVRFCQkJCSJNYXkuIDExLCAyMDExIgotI2RlZmluZSBNRUdBU0FTX0VYVF9WRVJTSU9OCQkJIldlZC4gTWF5LiAxMSAxNzowMDowMCBQRFQgMjAxMSIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwMC4wMC4wNS40MC1yYzEiCisjZGVmaW5lIE1FR0FTQVNfUkVMREFURQkJCQkiSnVsLiAyNiwgMjAxMSIKKyNkZWZpbmUgTUVHQVNBU19FWFRfVkVSU0lPTgkJCSJUdWUuIEp1bC4gMjYgMTc6MDA6MDAgUERUIDIwMTEiCiAKIC8qCiAgKiBEZXZpY2UgSURzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCmluZGV4IDJkOGNkY2UuLjc3NmQwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKICAqCiAgKiAgRklMRTogbWVnYXJhaWRfc2FzX2Jhc2UuYwotICogIFZlcnNpb24gOiB2MDAuMDAuMDUuMzgtcmMxCisgKiAgVmVyc2lvbiA6IHYwMC4wMC4wNS40MC1yYzEKICAqCiAgKiAgQXV0aG9yczogTFNJIENvcnBvcmF0aW9uCiAgKiAgICAgICAgICAgU3JlZW5pdmFzIEJhZ2Fsa290ZQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgogI2luY2x1ZGUgIm1lZ2FyYWlkX3Nhc19mdXNpb24uaCIKICNpbmNsdWRlICJtZWdhcmFpZF9zYXMuaCIKIApAQCAtMjA1Nyw2ICsyMDU4LDIwIEBACiAJfQogfQogCitzdGF0aWMgaW50IG1lZ2FzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCQkgICAgICBpbnQgcXVldWVfZGVwdGgsIGludCByZWFzb24pCit7CisJaWYgKHJlYXNvbiAhPSBTQ1NJX1FERVBUSF9ERUZBVUxUKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAocXVldWVfZGVwdGggPiBzZGV2LT5ob3N0LT5jYW5fcXVldWUpCisJCXF1ZXVlX2RlcHRoID0gc2Rldi0+aG9zdC0+Y2FuX3F1ZXVlOworCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNkZXYpLAorCQkJCXF1ZXVlX2RlcHRoKTsKKworCXJldHVybiBxdWV1ZV9kZXB0aDsKK30KKwogLyoKICAqIFNjc2kgaG9zdCB0ZW1wbGF0ZSBmb3IgbWVnYXJhaWRfc2FzIGRyaXZlcgogICovCkBAIC0yMDc0LDYgKzIwODksNyBAQAogCS5laF90aW1lZF9vdXQgPSBtZWdhc2FzX3Jlc2V0X3RpbWVyLAogCS5iaW9zX3BhcmFtID0gbWVnYXNhc19iaW9zX3BhcmFtLAogCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBtZWdhc2FzX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCmluZGV4IDhmZTNhNDUuLjVhNWFmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnAuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCQkJCS8qIEdldCBkZXYgaGFuZGxlIGZyb20gUGQgKi8KIAkJCQkqcERldkhhbmRsZSA9IE1SX1BkRGV2SGFuZGxlR2V0KHBkLCBtYXApOwogCQl9Ci0JCXJldHZhbCA9IEZBTFNFOwogCX0KIAogCSpwZEJsb2NrICs9IHN0cmlwUmVmICsgTVJfTGRTcGFuUHRyR2V0KGxkLCBzcGFuLCBtYXApLT5zdGFydEJsazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwppbmRleCA5MzlmMjgzLi42YWJkMmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC00MjU4LDYgKzQyNTgsNyBAQAogCXUzMiBsb2dfaW5mbzsKIAlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOwogCXUzMiByZXNwb25zZV9jb2RlID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIoaW9jLCBzbWlkKTsKQEAgLTQyODIsNiArNDI4Myw5IEBACiAJICogdGhlIGZhaWxlZCBkaXJlY3QgSS9PIHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIHZvbHVtZQogCSAqLwogCWlmIChfc2NzaWhfc2NzaV9kaXJlY3RfaW9fZ2V0KGlvYywgc21pZCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gc2NtZDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCV9zY3NpaF9zY3NpX2RpcmVjdF9pb19zZXQoaW9jLCBzbWlkLCAwKTsKIAkJbWVtY3B5KG1waV9yZXF1ZXN0LT5DREIuQ0RCMzIsIHNjbWQtPmNtbmQsIHNjbWQtPmNtZF9sZW4pOwogCQltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9LY29uZmlnIGIvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKaW5kZXggYzgyYjAxMi4uNzhmN2UyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKQEAgLTMsNyArMyw3IEBACiAjCiAjIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICMgQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgotIyBDb3B5cmlnaHQgMjAwOS0yMDAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CisjIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogIwogIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAjCkBAIC00MSwzICs0MSwxMCBAQAogCWhlbHAKIAkJQ29tcGlsZXMgdGhlIDg4U0U2NFhYLzg4U0U5NFhYIGRyaXZlciBpbiBkZWJ1ZyBtb2RlLiAgSW4gZGVidWcgbW9kZSwKIAkJdGhlIGRyaXZlciBwcmludHMgc29tZSBtZXNzYWdlcyB0byB0aGUgY29uc29sZS4KK2NvbmZpZyBTQ1NJX01WU0FTX1RBU0tMRVQKKwlib29sICJTdXBwb3J0IGZvciBpbnRlcnJ1cHQgdGFza2xldCIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFNDU0lfTVZTQVMKKwloZWxwCisJCUNvbXBpbGVzIHRoZSA4OFNFNjR4eC84OFNFOTR4eCBkcml2ZXIgaW4gaW50ZXJydXB0IHRhc2tsZXQgbW9kZS5JbiB0aGlzIG1vZGUsCisJCXRoZSBpbnRlcnJ1cHQgd2lsbCBzY2hlZHVsZSBhIHRhc2tsZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguYwppbmRleCAxM2M5NjA0Li44YmE0NzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmMKQEAgLTMzLDcgKzMzLDYgQEAKIAl1MzIgcmVnOwogCXN0cnVjdCBtdnNfcGh5ICpwaHkgPSAmbXZpLT5waHlbaV07CiAKLQkvKiBUT0RPIGNoZWNrICYgc2F2ZSBkZXZpY2UgdHlwZSAqLwogCXJlZyA9IG1yMzIoTVZTX0dCTF9QT1JUX1RZUEUpOwogCXBoeS0+cGh5X3R5cGUgJj0gfihQT1JUX1RZUEVfU0FTIHwgUE9SVF9UWVBFX1NBVEEpOwogCWlmIChyZWcgJiBNT0RFX1NBU19TQVRBICYgKDEgPDwgaSkpCkBAIC00OCw3ICs0Nyw3IEBACiAJdTMyIHRtcDsKIAogCXRtcCA9IG1yMzIoTVZTX1BDUyk7Ci0JaWYgKG12aS0+Y2hpcC0+bl9waHkgPD0gNCkKKwlpZiAobXZpLT5jaGlwLT5uX3BoeSA8PSBNVlNfU09DX1BPUlRTKQogCQl0bXAgfD0gMSA8PCAocGh5X2lkICsgUENTX0VOX1BPUlRfWE1UX1NISUZUKTsKIAllbHNlCiAJCXRtcCB8PSAxIDw8IChwaHlfaWQgKyBQQ1NfRU5fUE9SVF9YTVRfU0hJRlQyKTsKQEAgLTU4LDI0ICs1NywxNiBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IG12c182NHh4X3BoeV9oYWNrcyhzdHJ1Y3QgbXZzX2luZm8gKm12aSkKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJaW50IGk7CiAKIAltdnNfcGh5X2hhY2tzKG12aSk7CiAKIAlpZiAoIShtdmktPmZsYWdzICYgTVZGX0ZMQUdfU09DKSkgewotCQkvKiBURVNUIC0gZm9yIHBoeSBkZWNvZGluZyBlcnJvciwgYWRqdXN0IHZvbHRhZ2UgbGV2ZWxzICovCi0JCW13MzIoTVZTX1AwX1ZTUl9BRERSICsgMCwgMHg4KTsKLQkJbXczMihNVlNfUDBfVlNSX0RBVEEgKyAwLCAweDJGMCk7Ci0KLQkJbXczMihNVlNfUDBfVlNSX0FERFIgKyA4LCAweDgpOwotCQltdzMyKE1WU19QMF9WU1JfREFUQSArIDgsIDB4MkYwKTsKLQotCQltdzMyKE1WU19QMF9WU1JfQUREUiArIDE2LCAweDgpOwotCQltdzMyKE1WU19QMF9WU1JfREFUQSArIDE2LCAweDJGMCk7Ci0KLQkJbXczMihNVlNfUDBfVlNSX0FERFIgKyAyNCwgMHg4KTsKLQkJbXczMihNVlNfUDBfVlNSX0RBVEEgKyAyNCwgMHgyRjApOworCQlmb3IgKGkgPSAwOyBpIDwgTVZTX1NPQ19QT1JUUzsgaSsrKSB7CisJCQltdnNfd3JpdGVfcG9ydF92c3JfYWRkcihtdmksIGksIFZTUl9QSFlfTU9ERTgpOworCQkJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBpLCAweDJGMCk7CisJCX0KIAl9IGVsc2UgewotCQlpbnQgaTsKIAkJLyogZGlzYWJsZSBhdXRvIHBvcnQgZGV0ZWN0aW9uICovCiAJCW13MzIoTVZTX0dCTF9QT1JUX1RZUEUsIDApOwogCQlmb3IgKGkgPSAwOyBpIDwgbXZpLT5jaGlwLT5uX3BoeTsgaSsrKSB7CkBAIC05NSw3ICs4Niw3IEBACiAJdTMyIHJlZywgdG1wOwogCiAJaWYgKCEobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykpIHsKLQkJaWYgKHBoeV9pZCA8IDQpCisJCWlmIChwaHlfaWQgPCBNVlNfU09DX1BPUlRTKQogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKG12aS0+cGRldiwgUENSX1BIWV9DVEwsICZyZWcpOwogCQllbHNlCiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQobXZpLT5wZGV2LCBQQ1JfUEhZX0NUTDIsICZyZWcpOwpAQCAtMTA0LDEzICs5NSwxMyBAQAogCQlyZWcgPSBtcjMyKE1WU19QSFlfQ1RMKTsKIAogCXRtcCA9IHJlZzsKLQlpZiAocGh5X2lkIDwgNCkKKwlpZiAocGh5X2lkIDwgTVZTX1NPQ19QT1JUUykKIAkJdG1wIHw9ICgxVSA8PCBwaHlfaWQpIDw8IFBDVExfTElOS19PRkZTOwogCWVsc2UKLQkJdG1wIHw9ICgxVSA8PCAocGh5X2lkIC0gNCkpIDw8IFBDVExfTElOS19PRkZTOworCQl0bXAgfD0gKDFVIDw8IChwaHlfaWQgLSBNVlNfU09DX1BPUlRTKSkgPDwgUENUTF9MSU5LX09GRlM7CiAKIAlpZiAoIShtdmktPmZsYWdzICYgTVZGX0ZMQUdfU09DKSkgewotCQlpZiAocGh5X2lkIDwgNCkgeworCQlpZiAocGh5X2lkIDwgTVZTX1NPQ19QT1JUUykgewogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChtdmktPnBkZXYsIFBDUl9QSFlfQ1RMLCB0bXApOwogCQkJbWRlbGF5KDEwKTsKIAkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQobXZpLT5wZGV2LCBQQ1JfUEhZX0NUTCwgcmVnKTsKQEAgLTEzMyw5ICsxMjQsOSBAQAogCXRtcCAmPSB+UEhZRVZfUkRZX0NIOwogCW12c193cml0ZV9wb3J0X2lycV9zdGF0KG12aSwgcGh5X2lkLCB0bXApOwogCXRtcCA9IG12c19yZWFkX3BoeV9jdGwobXZpLCBwaHlfaWQpOwotCWlmIChoYXJkID09IDEpCisJaWYgKGhhcmQgPT0gTVZTX0hBUkRfUkVTRVQpCiAJCXRtcCB8PSBQSFlfUlNUX0hBUkQ7Ci0JZWxzZSBpZiAoaGFyZCA9PSAwKQorCWVsc2UgaWYgKGhhcmQgPT0gTVZTX1NPRlRfUkVTRVQpCiAJCXRtcCB8PSBQSFlfUlNUOwogCW12c193cml0ZV9waHlfY3RsKG12aSwgcGh5X2lkLCB0bXApOwogCWlmIChoYXJkKSB7CkBAIC0zMjEsNiArMzEyLDExIEBACiAJLyogaW5pdCBwaHlzICovCiAJbXZzXzY0eHhfcGh5X2hhY2tzKG12aSk7CiAKKwl0bXAgPSBtdnNfY3IzMihtdmksIENNRF9QSFlfTU9ERV8yMSk7CisJdG1wICY9IDB4MDAwMGZmZmY7CisJdG1wIHw9IDB4MDBmYTAwMDA7CisJbXZzX2N3MzIobXZpLCBDTURfUEhZX01PREVfMjEsIHRtcCk7CisKIAkvKiBlbmFibGUgYXV0byBwb3J0IGRldGVjdGlvbiAqLwogCW13MzIoTVZTX0dCTF9QT1JUX1RZUEUsIE1PREVfQVVUT19ERVRfRU4pOwogCkBAIC0zNDYsNyArMzQyLDcgQEAKIAogCQltdnNfNjR4eF9lbmFibGVfeG10KG12aSwgaSk7CiAKLQkJbXZzXzY0eHhfcGh5X3Jlc2V0KG12aSwgaSwgMSk7CisJCW12c182NHh4X3BoeV9yZXNldChtdmksIGksIE1WU19IQVJEX1JFU0VUKTsKIAkJbXNsZWVwKDUwMCk7CiAJCW12c182NHh4X2RldGVjdF9wb3J0dHlwZShtdmksIGkpOwogCX0KQEAgLTM3NywxMyArMzczLDcgQEAKIAkJbXZzX3VwZGF0ZV9waHlpbmZvKG12aSwgaSwgMSk7CiAJfQogCi0JLyogRklYTUU6IHVwZGF0ZSB3aWRlIHBvcnQgYml0bWFwcyAqLwotCiAJLyogbGl0dGxlIGVuZGlhbiBmb3Igb3BlbiBhZGRyZXNzIGFuZCBjb21tYW5kIHRhYmxlLCBldGMuICovCi0JLyoKLQkgKiBpdCBzZWVtcyB0aGF0ICggZnJvbSB0aGUgc3BlYyApIHR1cm5pbmcgb24gYmlnLWVuZGlhbiB3b24ndAotCSAqIGRvIHVzIGFueSBnb29kIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMsIG5lZWQgZnVydGhlciBjb25maXJtYXRpb24KLQkgKi8KIAljY3RsID0gbXIzMihNVlNfQ1RMKTsKIAljY3RsIHw9IENDVExfRU5ESUFOX0NNRDsKIAljY3RsIHw9IENDVExfRU5ESUFOX0RBVEE7CkBAIC0zOTQsMTUgKzM4NCwxOSBAQAogCS8qIHJlc2V0IENNRCBxdWV1ZSAqLwogCXRtcCA9IG1yMzIoTVZTX1BDUyk7CiAJdG1wIHw9IFBDU19DTURfUlNUOworCXRtcCAmPSB+UENTX1NFTEZfQ0xFQVI7CiAJbXczMihNVlNfUENTLCB0bXApOwotCS8qIGludGVycnVwdCBjb2FsZXNjaW5nIG1heSBjYXVzZSBtaXNzaW5nIEhXIGludGVycnB1dCBpbiBzb21lIGNhc2UsCi0JICogYW5kIHRoZSBtYXggY291bnQgaXMgMHgxZmYsIHdoaWxlIG91ciBtYXggc2xvdCBpcyAweDIwMCwKKwkvKgorCSAqIHRoZSBtYXggY291bnQgaXMgMHgxZmYsIHdoaWxlIG91ciBtYXggc2xvdCBpcyAweDIwMCwKIAkgKiBpdCB3aWxsIG1ha2UgY291bnQgMC4KIAkgKi8KIAl0bXAgPSAwOwotCW13MzIoTVZTX0lOVF9DT0FMLCB0bXApOworCWlmIChNVlNfQ0hJUF9TTE9UX1NaID4gMHgxZmYpCisJCW13MzIoTVZTX0lOVF9DT0FMLCAweDFmZiB8IENPQUxfRU4pOworCWVsc2UKKwkJbXczMihNVlNfSU5UX0NPQUwsIE1WU19DSElQX1NMT1RfU1ogfCBDT0FMX0VOKTsKIAotCXRtcCA9IDB4MTAwOworCXRtcCA9IDB4MTAwMDAgfCBpbnRlcnJ1cHRfY29hbGVzY2luZzsKIAltdzMyKE1WU19JTlRfQ09BTF9UTU9VVCwgdG1wKTsKIAogCS8qIGxhZGllcyBhbmQgZ2VudGxlbWVuLCBzdGFydCB5b3VyIGVuZ2luZXMgKi8KQEAgLTQ3NywxMyArNDcxLDExIEBACiAKIAkvKiBjbGVhciBDTURfQ01QTFQgQVNBUCAqLwogCW13MzJfZihNVlNfSU5UX1NUQVQsIENJTlRfRE9ORSk7Ci0jaWZuZGVmIE1WU19VU0VfVEFTS0xFVAorCiAJc3Bpbl9sb2NrKCZtdmktPmxvY2spOwotI2VuZGlmCiAJbXZzX2ludF9mdWxsKG12aSk7Ci0jaWZuZGVmIE1WU19VU0VfVEFTS0xFVAogCXNwaW5fdW5sb2NrKCZtdmktPmxvY2spOwotI2VuZGlmCisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTYzMCw3ICs2MjIsNiBAQAogewogCXUzMiB0bXA7CiAJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtpXTsKLQkvKiB3b3JrYXJvdW5kIGZvciBIVyBwaHkgZGVjb2RpbmcgZXJyb3Igb24gMS41ZyBkaXNrIGRyaXZlICovCiAJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBpLCBWU1JfUEhZX01PREU2KTsKIAl0bXAgPSBtdnNfcmVhZF9wb3J0X3Zzcl9kYXRhKG12aSwgaSk7CiAJaWYgKCgocGh5LT5waHlfc3RhdHVzICYgUEhZX05FR19TUFBfUEhZU19MSU5LX1JBVEVfTUFTSykgPj4KQEAgLTY2MSw3ICs2NTIsNyBAQAogCQl0bXAgfD0gbHJtYXg7CiAJfQogCW12c193cml0ZV9waHlfY3RsKG12aSwgcGh5X2lkLCB0bXApOwotCW12c182NHh4X3BoeV9yZXNldChtdmksIHBoeV9pZCwgMSk7CisJbXZzXzY0eHhfcGh5X3Jlc2V0KG12aSwgcGh5X2lkLCBNVlNfSEFSRF9SRVNFVCk7CiB9CiAKIHN0YXRpYyB2b2lkIG12c182NHh4X2NsZWFyX2FjdGl2ZV9jbWRzKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQpAQCAtNzQ0LDExICs3MzUsMTMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKLXZvaWQgbXZzXzY0eHhfZml4X2RtYShkbWFfYWRkcl90IGJ1Zl9kbWEsIGludCBidWZfbGVuLCBpbnQgZnJvbSwgdm9pZCAqcHJkKQordm9pZCBtdnNfNjR4eF9maXhfZG1hKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcGh5X21hc2ssCisJCQkJaW50IGJ1Zl9sZW4sIGludCBmcm9tLCB2b2lkICpwcmQpCiB7CiAJaW50IGk7CiAJc3RydWN0IG12c19wcmQgKmJ1Zl9wcmQgPSBwcmQ7CisJZG1hX2FkZHJfdCBidWZfZG1hID0gbXZpLT5idWxrX2J1ZmZlcl9kbWE7CisKIAlidWZfcHJkCSs9IGZyb207CiAJZm9yIChpID0gMDsgaSA8IE1BWF9TR19FTlRSWSAtIGZyb207IGkrKykgewogCQlidWZfcHJkLT5hZGRyID0gY3B1X3RvX2xlNjQoYnVmX2RtYSk7CkBAIC03NTYsNyArNzQ5LDI4IEBACiAJCSsrYnVmX3ByZDsKIAl9CiB9Ci0jZW5kaWYKKworc3RhdGljIHZvaWQgbXZzXzY0eHhfdHVuZV9pbnRlcnJ1cHQoc3RydWN0IG12c19pbmZvICptdmksIHUzMiB0aW1lKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKKwl1MzIgdG1wID0gMDsKKwkvKgorCSAqIHRoZSBtYXggY291bnQgaXMgMHgxZmYsIHdoaWxlIG91ciBtYXggc2xvdCBpcyAweDIwMCwKKwkgKiBpdCB3aWxsIG1ha2UgY291bnQgMC4KKwkgKi8KKwlpZiAodGltZSA9PSAwKSB7CisJCW13MzIoTVZTX0lOVF9DT0FMLCAwKTsKKwkJbXczMihNVlNfSU5UX0NPQUxfVE1PVVQsIDB4MTAwMDApOworCX0gZWxzZSB7CisJCWlmIChNVlNfQ0hJUF9TTE9UX1NaID4gMHgxZmYpCisJCQltdzMyKE1WU19JTlRfQ09BTCwgMHgxZmZ8Q09BTF9FTik7CisJCWVsc2UKKwkJCW13MzIoTVZTX0lOVF9DT0FMLCBNVlNfQ0hJUF9TTE9UX1NafENPQUxfRU4pOworCisJCXRtcCA9IDB4MTAwMDAgfCB0aW1lOworCQltdzMyKE1WU19JTlRfQ09BTF9UTU9VVCwgdG1wKTsKKwl9Cit9CiAKIGNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggbXZzXzY0eHhfZGlzcGF0Y2ggPSB7CiAJIm12NjR4eCIsCkBAIC03ODAsNyArNzk0LDYgQEAKIAltdnNfd3JpdGVfcG9ydF9pcnFfc3RhdCwKIAltdnNfcmVhZF9wb3J0X2lycV9tYXNrLAogCW12c193cml0ZV9wb3J0X2lycV9tYXNrLAotCW12c19nZXRfc2FzX2FkZHIsCiAJbXZzXzY0eHhfY29tbWFuZF9hY3RpdmUsCiAJbXZzXzY0eHhfY2xlYXJfc3JzX2lycSwKIAltdnNfNjR4eF9pc3N1ZV9zdG9wLApAQCAtODA4LDggKzgyMSw4IEBACiAJbXZzXzY0eHhfc3BpX2J1aWxkY21kLAogCW12c182NHh4X3NwaV9pc3N1ZWNtZCwKIAltdnNfNjR4eF9zcGlfd2FpdGRhdGFyZWFkeSwKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKIAltdnNfNjR4eF9maXhfZG1hLAotI2VuZGlmCisJbXZzXzY0eHhfdHVuZV9pbnRlcnJ1cHQsCisJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5jCmluZGV4IDc4MTYyYzMuLjM1MDEyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguYwpAQCAtNDgsNiArNDgsMjE2IEBACiAJfQogfQogCit2b2lkIHNldF9waHlfdHVuaW5nKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgcGh5X2lkLAorCQkJc3RydWN0IHBoeV90dW5pbmcgcGh5X3R1bmluZykKK3sKKwl1MzIgdG1wLCBzZXR0aW5nXzAgPSAwLCBzZXR0aW5nXzEgPSAwOworCXU4IGk7CisKKwkvKiBSZW1hcCBpbmZvcm1hdGlvbiBmb3IgQjAgY2hpcDoKKwkqCisJKiBSMENoIC0+IFIxMThoWzE1OjBdIChBZGFwdGVkIERGRSBGMyAtIEY1IGNvZWZmaWNpZW50KQorCSogUjBEaCAtPiBSMTE4aFszMToxNl0gKEdlbmVyYXRpb24gMSBTZXR0aW5nIDApCisJKiBSMEVoIC0+IFIxMUNoWzE1OjBdICAoR2VuZXJhdGlvbiAxIFNldHRpbmcgMSkKKwkqIFIwRmggLT4gUjExQ2hbMzE6MTZdIChHZW5lcmF0aW9uIDIgU2V0dGluZyAwKQorCSogUjEwaCAtPiBSMTIwaFsxNTowXSAgKEdlbmVyYXRpb24gMiBTZXR0aW5nIDEpCisJKiBSMTFoIC0+IFIxMjBoWzMxOjE2XSAoR2VuZXJhdGlvbiAzIFNldHRpbmcgMCkKKwkqIFIxMmggLT4gUjEyNGhbMTU6MF0gIChHZW5lcmF0aW9uIDMgU2V0dGluZyAxKQorCSogUjEzaCAtPiBSMTI0aFszMToxNl0gKEdlbmVyYXRpb24gNCBTZXR0aW5nIDAgKFJlc2VydmVkKSkKKwkqLworCisJLyogQTAgaGFzIGEgZGlmZmVyZW50IHNldCBvZiByZWdpc3RlcnMgKi8KKwlpZiAobXZpLT5wZGV2LT5yZXZpc2lvbiA9PSBWQU5JUl9BMF9SRVYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJLyogbG9vcCAzIHRpbWVzLCBzZXQgR2VuIDEsIEdlbiAyLCBHZW4gMyAqLworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJc2V0dGluZ18wID0gR0VORVJBVElPTl8xX1NFVFRJTkc7CisJCQlzZXR0aW5nXzEgPSBHRU5FUkFUSU9OXzFfMl9TRVRUSU5HOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNldHRpbmdfMCA9IEdFTkVSQVRJT05fMV8yX1NFVFRJTkc7CisJCQlzZXR0aW5nXzEgPSBHRU5FUkFUSU9OXzJfM19TRVRUSU5HOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXNldHRpbmdfMCA9IEdFTkVSQVRJT05fMl8zX1NFVFRJTkc7CisJCQlzZXR0aW5nXzEgPSBHRU5FUkFUSU9OXzNfNF9TRVRUSU5HOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTZXQ6CisJCSoKKwkJKiBUcmFuc21pdHRlciBFbXBoYXNpcyBFbmFibGUKKwkJKiBUcmFuc21pdHRlciBFbXBoYXNpcyBBbXBsaXR1ZGUKKwkJKiBUcmFuc21pdHRlciBBbXBsaXR1ZGUKKwkJKi8KKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIHNldHRpbmdfMCk7CisJCXRtcCA9IG12c19yZWFkX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQpOworCQl0bXAgJj0gfigweEZCRSA8PCAxNik7CisJCXRtcCB8PSAoKChwaHlfdHVuaW5nLnRyYW5zX2VtcF9lbiA8PCAxMSkgfAorCQkJKHBoeV90dW5pbmcudHJhbnNfZW1wX2FtcCA8PCA3KSB8CisJCQkocGh5X3R1bmluZy50cmFuc19hbXAgPDwgMSkpIDw8IDE2KTsKKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIHRtcCk7CisKKwkJLyogU2V0IFRyYW5zbWl0dGVyIEFtcGxpdHVkZSBBZGp1c3QgKi8KKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIHNldHRpbmdfMSk7CisJCXRtcCA9IG12c19yZWFkX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQpOworCQl0bXAgJj0gfigweEMwMDApOworCQl0bXAgfD0gKHBoeV90dW5pbmcudHJhbnNfYW1wX2FkaiA8PCAxNCk7CisJCW12c193cml0ZV9wb3J0X3Zzcl9kYXRhKG12aSwgcGh5X2lkLCB0bXApOworCX0KK30KKwordm9pZCBzZXRfcGh5X2ZmZV90dW5pbmcoc3RydWN0IG12c19pbmZvICptdmksIGludCBwaHlfaWQsCisJCQkJc3RydWN0IGZmZV9jb250cm9sIGZmZSkKK3sKKwl1MzIgdG1wOworCisJLyogRG9uJ3QgcnVuIHRoaXMgaWYgQTAvQjAgKi8KKwlpZiAoKG12aS0+cGRldi0+cmV2aXNpb24gPT0gVkFOSVJfQTBfUkVWKQorCQl8fCAobXZpLT5wZGV2LT5yZXZpc2lvbiA9PSBWQU5JUl9CMF9SRVYpKQorCQlyZXR1cm47CisKKwkvKiBGRkUgUmVzaXN0b3IgYW5kIENhcGFjaXRvciAqLworCS8qIFIxMENoIERGRSBSZXNvbHV0aW9uIENvbnRyb2wvU3F1ZWxjaCBhbmQgRkZFIFNldHRpbmcKKwkgKgorCSAqIEZGRV9GT1JDRSAgICAgICAgICAgIFs3XQorCSAqIEZGRV9SRVNfU0VMICAgICAgICAgIFs2OjRdCisJICogRkZFX0NBUF9TRUwgICAgICAgICAgWzM6MF0KKwkgKi8KKwltdnNfd3JpdGVfcG9ydF92c3JfYWRkcihtdmksIHBoeV9pZCwgVlNSX1BIWV9GRkVfQ09OVFJPTCk7CisJdG1wID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCk7CisJdG1wICY9IH4weEZGOworCisJLyogUmVhZCBmcm9tIEhCQV9JbmZvX1BhZ2UgKi8KKwl0bXAgfD0gKCgweDEgPDwgNykgfAorCQkoZmZlLmZmZV9yc3Nfc2VsIDw8IDQpIHwKKwkJKGZmZS5mZmVfY2FwX3NlbCA8PCAwKSk7CisKKwltdnNfd3JpdGVfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCwgdG1wKTsKKworCS8qIFIwNjRoIFBIWSBNb2RlIFJlZ2lzdGVyIDEKKwkgKgorCSAqIERGRV9ESVMJCTE4CisJICovCisJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIFZTUl9SRUZfQ0xPQ0tfQ1JUTCk7CisJdG1wID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCk7CisJdG1wICY9IH4weDQwMDAxOworCS8qIEhhcmQgY29kaW5nICovCisJLyogTm8gZGVmaW5lcyBpbiBIQkFfSW5mb19QYWdlICovCisJdG1wIHw9ICgwIDw8IDE4KTsKKwltdnNfd3JpdGVfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCwgdG1wKTsKKworCS8qIFIxMTBoIERGRSBGMC1GMSBDb2VmZmljaWVudCBDb250cm9sL0RGRSBVcGRhdGUgQ29udHJvbAorCSAqCisJICogREZFX1VQREFURV9FTiAgICAgICAgWzExOjZdCisJICogREZFX0ZYX0ZPUkNFICAgICAgICAgWzU6MF0KKwkgKi8KKwltdnNfd3JpdGVfcG9ydF92c3JfYWRkcihtdmksIHBoeV9pZCwgVlNSX1BIWV9ERkVfVVBEQVRFX0NSVEwpOworCXRtcCA9IG12c19yZWFkX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQpOworCXRtcCAmPSB+MHhGRkY7CisJLyogSGFyZCBjb2RpbmcgKi8KKwkvKiBObyBkZWZpbmVzIGluIEhCQV9JbmZvX1BhZ2UgKi8KKwl0bXAgfD0gKCgweDNGIDw8IDYpIHwgKDB4MCA8PCAwKSk7CisJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIHRtcCk7CisKKwkvKiBSMUEwaCBJbnRlcmZhY2UgYW5kIERpZ2l0YWwgUmVmZXJlbmNlIENsb2NrIENvbnRyb2wvUmVzZXJ2ZWRfNTBoCisJICoKKwkgKiBGRkVfVFJBSU5fRU4gICAgICAgICAzCisJICovCisJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIFZTUl9SRUZfQ0xPQ0tfQ1JUTCk7CisJdG1wID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCk7CisJdG1wICY9IH4weDg7CisJLyogSGFyZCBjb2RpbmcgKi8KKwkvKiBObyBkZWZpbmVzIGluIEhCQV9JbmZvX1BhZ2UgKi8KKwl0bXAgfD0gKDAgPDwgMyk7CisJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIHRtcCk7Cit9CisKKy8qTm90aWNlOiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdoZW4gcGh5IGlzIGRpc2FibGVkKi8KK3ZvaWQgc2V0X3BoeV9yYXRlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgcGh5X2lkLCB1OCByYXRlKQoreworCXVuaW9uIHJlZ19waHlfY2ZnIHBoeV9jZmcsIHBoeV9jZmdfdG1wOworCW12c193cml0ZV9wb3J0X3Zzcl9hZGRyKG12aSwgcGh5X2lkLCBWU1JfUEhZX01PREUyKTsKKwlwaHlfY2ZnX3RtcC52ID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCk7CisJcGh5X2NmZy52ID0gMDsKKwlwaHlfY2ZnLnUuZGlzYWJsZV9waHkgPSBwaHlfY2ZnX3RtcC51LmRpc2FibGVfcGh5OworCXBoeV9jZmcudS5zYXNfc3VwcG9ydCA9IDE7CisJcGh5X2NmZy51LnNhdGFfc3VwcG9ydCA9IDE7CisJcGh5X2NmZy51LnNhdGFfaG9zdF9tb2RlID0gMTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMHgwOgorCQkvKiBzdXBwb3J0IDEuNSBHYnBzICovCisJCXBoeV9jZmcudS5zcGVlZF9zdXBwb3J0ID0gMTsKKwkJcGh5X2NmZy51LnNud18zX3N1cHBvcnQgPSAwOworCQlwaHlfY2ZnLnUudHhfbG5rX3Bhcml0eSA9IDE7CisJCXBoeV9jZmcudS50eF9zcHRfcGhzX2xua19yYXRlID0gMHgzMDsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisKKwkJLyogc3VwcG9ydCAxLjUsIDMuMCBHYnBzICovCisJCXBoeV9jZmcudS5zcGVlZF9zdXBwb3J0ID0gMzsKKwkJcGh5X2NmZy51LnR4X3NwdF9waHNfbG5rX3JhdGUgPSAweDNjOworCQlwaHlfY2ZnLnUudHhfbGdjbF9sbmtfcmF0ZSA9IDB4MDg7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCWRlZmF1bHQ6CisJCS8qIHN1cHBvcnQgMS41LCAzLjAsIDYuMCBHYnBzICovCisJCXBoeV9jZmcudS5zcGVlZF9zdXBwb3J0ID0gNzsKKwkJcGh5X2NmZy51LnNud18zX3N1cHBvcnQgPSAxOworCQlwaHlfY2ZnLnUudHhfbG5rX3Bhcml0eSA9IDE7CisJCXBoeV9jZmcudS50eF9zcHRfcGhzX2xua19yYXRlID0gMHgzZjsKKwkJcGh5X2NmZy51LnR4X2xnY2xfbG5rX3JhdGUgPSAweDA5OworCQlicmVhazsKKwl9CisJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIHBoeV9jZmcudik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorbXZzXzk0eHhfY29uZmlnX3JlZ19mcm9tX2hiYShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IHBoeV9pZCkKK3sKKwl1MzIgdGVtcDsKKwl0ZW1wID0gKHUzMikoKih1MzIgKikmbXZpLT5oYmFfaW5mb19wYXJhbS5waHlfdHVuaW5nW3BoeV9pZF0pOworCWlmICh0ZW1wID09IDB4RkZGRkZGRkZMKSB7CisJCW12aS0+aGJhX2luZm9fcGFyYW0ucGh5X3R1bmluZ1twaHlfaWRdLnRyYW5zX2VtcF9hbXAgPSAweDY7CisJCW12aS0+aGJhX2luZm9fcGFyYW0ucGh5X3R1bmluZ1twaHlfaWRdLnRyYW5zX2FtcCA9IDB4MUE7CisJCW12aS0+aGJhX2luZm9fcGFyYW0ucGh5X3R1bmluZ1twaHlfaWRdLnRyYW5zX2FtcF9hZGogPSAweDM7CisJfQorCisJdGVtcCA9ICh1OCkoKih1OCAqKSZtdmktPmhiYV9pbmZvX3BhcmFtLmZmZV9jdGxbcGh5X2lkXSk7CisJaWYgKHRlbXAgPT0gMHhGRkwpIHsKKwkJc3dpdGNoIChtdmktPnBkZXYtPnJldmlzaW9uKSB7CisJCWNhc2UgVkFOSVJfQTBfUkVWOgorCQljYXNlIFZBTklSX0IwX1JFVjoKKwkJCW12aS0+aGJhX2luZm9fcGFyYW0uZmZlX2N0bFtwaHlfaWRdLmZmZV9yc3Nfc2VsID0gMHg3OworCQkJbXZpLT5oYmFfaW5mb19wYXJhbS5mZmVfY3RsW3BoeV9pZF0uZmZlX2NhcF9zZWwgPSAweDc7CisJCQlicmVhazsKKwkJY2FzZSBWQU5JUl9DMF9SRVY6CisJCWNhc2UgVkFOSVJfQzFfUkVWOgorCQljYXNlIFZBTklSX0MyX1JFVjoKKwkJZGVmYXVsdDoKKwkJCW12aS0+aGJhX2luZm9fcGFyYW0uZmZlX2N0bFtwaHlfaWRdLmZmZV9yc3Nfc2VsID0gMHg3OworCQkJbXZpLT5oYmFfaW5mb19wYXJhbS5mZmVfY3RsW3BoeV9pZF0uZmZlX2NhcF9zZWwgPSAweEM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXRlbXAgPSAodTgpKCoodTggKikmbXZpLT5oYmFfaW5mb19wYXJhbS5waHlfcmF0ZVtwaHlfaWRdKTsKKwlpZiAodGVtcCA9PSAweEZGTCkKKwkJLypzZXQgZGVmYXVsdCBwaHlfcmF0ZSA9IDZHYnBzKi8KKwkJbXZpLT5oYmFfaW5mb19wYXJhbS5waHlfcmF0ZVtwaHlfaWRdID0gMHgyOworCisJc2V0X3BoeV90dW5pbmcobXZpLCBwaHlfaWQsCisJCW12aS0+aGJhX2luZm9fcGFyYW0ucGh5X3R1bmluZ1twaHlfaWRdKTsKKwlzZXRfcGh5X2ZmZV90dW5pbmcobXZpLCBwaHlfaWQsCisJCW12aS0+aGJhX2luZm9fcGFyYW0uZmZlX2N0bFtwaHlfaWRdKTsKKwlzZXRfcGh5X3JhdGUobXZpLCBwaHlfaWQsCisJCW12aS0+aGJhX2luZm9fcGFyYW0ucGh5X3JhdGVbcGh5X2lkXSk7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBtdnNfOTR4eF9lbmFibGVfeG10KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgcGh5X2lkKQogewogCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKQEAgLTYxLDcgKzI3MSwxNCBAQAogc3RhdGljIHZvaWQgbXZzXzk0eHhfcGh5X3Jlc2V0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcGh5X2lkLCBpbnQgaGFyZCkKIHsKIAl1MzIgdG1wOwotCisJdTMyIGRlbGF5ID0gNTAwMDsKKwlpZiAoaGFyZCA9PSBNVlNfUEhZX1RVTkUpIHsKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBwaHlfaWQsIFBIWVJfU0FUQV9DVEwpOworCQl0bXAgPSBtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgcGh5X2lkKTsKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2RhdGEobXZpLCBwaHlfaWQsIHRtcHwweDIwMDAwMDAwKTsKKwkJbXZzX3dyaXRlX3BvcnRfY2ZnX2RhdGEobXZpLCBwaHlfaWQsIHRtcHwweDEwMDAwMCk7CisJCXJldHVybjsKKwl9CiAJdG1wID0gbXZzX3JlYWRfcG9ydF9pcnFfc3RhdChtdmksIHBoeV9pZCk7CiAJdG1wICY9IH5QSFlFVl9SRFlfQ0g7CiAJbXZzX3dyaXRlX3BvcnRfaXJxX3N0YXQobXZpLCBwaHlfaWQsIHRtcCk7CkBAIC03MSwxMiArMjg4LDE1IEBACiAJCW12c193cml0ZV9waHlfY3RsKG12aSwgcGh5X2lkLCB0bXApOwogCQlkbyB7CiAJCQl0bXAgPSBtdnNfcmVhZF9waHlfY3RsKG12aSwgcGh5X2lkKTsKLQkJfSB3aGlsZSAodG1wICYgUEhZX1JTVF9IQVJEKTsKKwkJCXVkZWxheSgxMCk7CisJCQlkZWxheS0tOworCQl9IHdoaWxlICgodG1wICYgUEhZX1JTVF9IQVJEKSAmJiBkZWxheSk7CisJCWlmICghZGVsYXkpCisJCQltdl9kcHJpbnRrKCJwaHkgaGFyZCByZXNldCBmYWlsZWQuXG4iKTsKIAl9IGVsc2UgewotCQltdnNfd3JpdGVfcG9ydF92c3JfYWRkcihtdmksIHBoeV9pZCwgVlNSX1BIWV9TVEFUKTsKLQkJdG1wID0gbXZzX3JlYWRfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCk7CisJCXRtcCA9IG12c19yZWFkX3BoeV9jdGwobXZpLCBwaHlfaWQpOwogCQl0bXAgfD0gUEhZX1JTVDsKLQkJbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIHRtcCk7CisJCW12c193cml0ZV9waHlfY3RsKG12aSwgcGh5X2lkLCB0bXApOwogCX0KIH0KIApAQCAtOTAsMTIgKzMxMCwyNSBAQAogCiBzdGF0aWMgdm9pZCBtdnNfOTR4eF9waHlfZW5hYmxlKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcGh5X2lkKQogewotCW12c193cml0ZV9wb3J0X3Zzcl9hZGRyKG12aSwgcGh5X2lkLCAweDFCNCk7Ci0JbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIDB4ODMwMGZmYzEpOwotCW12c193cml0ZV9wb3J0X3Zzcl9hZGRyKG12aSwgcGh5X2lkLCAweDEwNCk7Ci0JbXZzX3dyaXRlX3BvcnRfdnNyX2RhdGEobXZpLCBwaHlfaWQsIDB4MDAwMTgwODApOworCXUzMiB0bXA7CisJdTggcmV2aXNpb24gPSAwOworCisJcmV2aXNpb24gPSBtdmktPnBkZXYtPnJldmlzaW9uOworCWlmIChyZXZpc2lvbiA9PSBWQU5JUl9BMF9SRVYpIHsKKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIENNRF9IT1NUX1JEX0RBVEEpOworCQltdnNfd3JpdGVfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCwgMHg4MzAwZmZjMSk7CisJfQorCWlmIChyZXZpc2lvbiA9PSBWQU5JUl9CMF9SRVYpIHsKKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIENNRF9BUFBfTUVNX0NUTCk7CisJCW12c193cml0ZV9wb3J0X3Zzcl9kYXRhKG12aSwgcGh5X2lkLCAweDA4MDAxMDA2KTsKKwkJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIENNRF9IT1NUX1JEX0RBVEEpOworCQltdnNfd3JpdGVfcG9ydF92c3JfZGF0YShtdmksIHBoeV9pZCwgMHgwMDAwNzA1Zik7CisJfQorCiAJbXZzX3dyaXRlX3BvcnRfdnNyX2FkZHIobXZpLCBwaHlfaWQsIFZTUl9QSFlfTU9ERTIpOwotCW12c193cml0ZV9wb3J0X3Zzcl9kYXRhKG12aSwgcGh5X2lkLCAweDAwMjA3ZmZmKTsKKwl0bXAgPSBtdnNfcmVhZF9wb3J0X3Zzcl9kYXRhKG12aSwgcGh5X2lkKTsKKwl0bXAgfD0gYml0KDApOworCW12c193cml0ZV9wb3J0X3Zzcl9kYXRhKG12aSwgcGh5X2lkLCB0bXAgJiAweGZkN2ZmZmZmKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgbXZzXzk0eHhfaW5pdChzdHJ1Y3QgbXZzX2luZm8gKm12aSkKQEAgLTEwMyw3ICszMzYsOSBAQAogCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKIAlpbnQgaTsKIAl1MzIgdG1wLCBjY3RsOworCXU4IHJldmlzaW9uOwogCisJcmV2aXNpb24gPSBtdmktPnBkZXYtPnJldmlzaW9uOwogCW12c19zaG93X3BjaWVfdXNhZ2UobXZpKTsKIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykgewogCQl0bXAgPSBtcjMyKE1WU19QSFlfQ1RMKTsKQEAgLTEzMyw2ICszNjgsMjggQEAKIAkJbXNsZWVwKDEwMCk7CiAJfQogCisJLyogZGlzYWJsZSBNdWx0aXBsZXhpbmcsIGVuYWJsZSBwaHkgaW1wbGVtZW50ZWQgKi8KKwltdzMyKE1WU19QT1JUU19JTVAsIDB4RkYpOworCisJaWYgKHJldmlzaW9uID09IFZBTklSX0EwX1JFVikgeworCQltdzMyKE1WU19QQV9WU1JfQUREUiwgQ01EX0NNV0tfT09CX0RFVCk7CisJCW13MzIoTVZTX1BBX1ZTUl9QT1JULCAweDAwMDE4MDgwKTsKKwl9CisJbXczMihNVlNfUEFfVlNSX0FERFIsIFZTUl9QSFlfTU9ERTIpOworCWlmIChyZXZpc2lvbiA9PSBWQU5JUl9BMF9SRVYgfHwgcmV2aXNpb24gPT0gVkFOSVJfQjBfUkVWKQorCQkvKiBzZXQgNkcvM0cvMS41RywgbXVsdGlwbGV4aW5nLCB3aXRob3V0IFNTQyAqLworCQltdzMyKE1WU19QQV9WU1JfUE9SVCwgMHgwMDg0ZDRmZSk7CisJZWxzZQorCQkvKiBzZXQgNkcvM0cvMS41RywgbXVsdGlwbGV4aW5nLCB3aXRoIGFuZCB3aXRob3V0IFNTQyAqLworCQltdzMyKE1WU19QQV9WU1JfUE9SVCwgMHgwMDg0ZmZmZSk7CisKKwlpZiAocmV2aXNpb24gPT0gVkFOSVJfQjBfUkVWKSB7CisJCW13MzIoTVZTX1BBX1ZTUl9BRERSLCBDTURfQVBQX01FTV9DVEwpOworCQltdzMyKE1WU19QQV9WU1JfUE9SVCwgMHgwODAwMTAwNik7CisJCW13MzIoTVZTX1BBX1ZTUl9BRERSLCBDTURfSE9TVF9SRF9EQVRBKTsKKwkJbXczMihNVlNfUEFfVlNSX1BPUlQsIDB4MDAwMDcwNWYpOworCX0KKwogCS8qIHJlc2V0IGNvbnRyb2wgKi8KIAltdzMyKE1WU19QQ1MsIDApOwkJLyogTVZTX1BDUyAqLwogCW13MzIoTVZTX1NUUF9SRUdfU0VUXzAsIDApOwpAQCAtMTQxLDE3ICszOTgsOCBAQAogCS8qIGluaXQgcGh5cyAqLwogCW12c19waHlfaGFja3MobXZpKTsKIAotCS8qIGRpc2FibGUgTXVsdGlwbGV4aW5nLCBlbmFibGUgcGh5IGltcGxlbWVudGVkICovCi0JbXczMihNVlNfUE9SVFNfSU1QLCAweEZGKTsKLQotCi0JbXczMihNVlNfUEFfVlNSX0FERFIsIDB4MDAwMDAxMDQpOwotCW13MzIoTVZTX1BBX1ZTUl9QT1JULCAweDAwMDE4MDgwKTsKLQltdzMyKE1WU19QQV9WU1JfQUREUiwgVlNSX1BIWV9NT0RFOCk7Ci0JbXczMihNVlNfUEFfVlNSX1BPUlQsIDB4MDA4NGZmZmYpOwotCiAJLyogc2V0IExFRCBibGluayB3aGVuIElPKi8KLQltdzMyKE1WU19QQV9WU1JfQUREUiwgMHgwMDAwMDAzMCk7CisJbXczMihNVlNfUEFfVlNSX0FERFIsIFZTUl9QSFlfQUNUX0xFRCk7CiAJdG1wID0gbXIzMihNVlNfUEFfVlNSX1BPUlQpOwogCXRtcCAmPSAweEZGRkYwMEZGOwogCXRtcCB8PSAweDAwMDAzMzAwOwpAQCAtMTc1LDEyICs0MjMsMTMgQEAKIAkJbXZzXzk0eHhfcGh5X2Rpc2FibGUobXZpLCBpKTsKIAkJLyogc2V0IHBoeSBsb2NhbCBTQVMgYWRkcmVzcyAqLwogCQltdnNfc2V0X3Nhc19hZGRyKG12aSwgaSwgQ09ORklHX0lEX0ZSQU1FMywgQ09ORklHX0lEX0ZSQU1FNCwKLQkJCQkJCShtdmktPnBoeVtpXS5kZXZfc2FzX2FkZHIpKTsKKwkJCQkJCWNwdV90b19sZTY0KG12aS0+cGh5W2ldLmRldl9zYXNfYWRkcikpOwogCiAJCW12c185NHh4X2VuYWJsZV94bXQobXZpLCBpKTsKKwkJbXZzXzk0eHhfY29uZmlnX3JlZ19mcm9tX2hiYShtdmksIGkpOwogCQltdnNfOTR4eF9waHlfZW5hYmxlKG12aSwgaSk7CiAKLQkJbXZzXzk0eHhfcGh5X3Jlc2V0KG12aSwgaSwgMSk7CisJCW12c185NHh4X3BoeV9yZXNldChtdmksIGksIFBIWV9SU1RfSEFSRCk7CiAJCW1zbGVlcCg1MDApOwogCQltdnNfOTR4eF9kZXRlY3RfcG9ydHR5cGUobXZpLCBpKTsKIAl9CkBAIC0yMTEsMTYgKzQ2MCw5IEBACiAJCW12c191cGRhdGVfcGh5aW5mbyhtdmksIGksIDEpOwogCX0KIAotCS8qIEZJWE1FOiB1cGRhdGUgd2lkZSBwb3J0IGJpdG1hcHMgKi8KLQogCS8qIGxpdHRsZSBlbmRpYW4gZm9yIG9wZW4gYWRkcmVzcyBhbmQgY29tbWFuZCB0YWJsZSwgZXRjLiAqLwotCS8qCi0JICogaXQgc2VlbXMgdGhhdCAoIGZyb20gdGhlIHNwZWMgKSB0dXJuaW5nIG9uIGJpZy1lbmRpYW4gd29uJ3QKLQkgKiBkbyB1cyBhbnkgZ29vZCBvbiBiaWctZW5kaWFuIG1hY2hpbmVzLCBuZWVkIGZ1cnRoZXIgY29uZmlybWF0aW9uCi0JICovCiAJY2N0bCA9IG1yMzIoTVZTX0NUTCk7CiAJY2N0bCB8PSBDQ1RMX0VORElBTl9DTUQ7Ci0JY2N0bCB8PSBDQ1RMX0VORElBTl9EQVRBOwogCWNjdGwgJj0gfkNDVExfRU5ESUFOX09QRU47CiAJY2N0bCB8PSBDQ1RMX0VORElBTl9SU1A7CiAJbXczMl9mKE1WU19DVEwsIGNjdGwpOwpAQCAtMjI4LDE1ICs0NzAsMjAgQEAKIAkvKiByZXNldCBDTUQgcXVldWUgKi8KIAl0bXAgPSBtcjMyKE1WU19QQ1MpOwogCXRtcCB8PSBQQ1NfQ01EX1JTVDsKKwl0bXAgJj0gflBDU19TRUxGX0NMRUFSOwogCW13MzIoTVZTX1BDUywgdG1wKTsKLQkvKiBpbnRlcnJ1cHQgY29hbGVzY2luZyBtYXkgY2F1c2UgbWlzc2luZyBIVyBpbnRlcnJwdXQgaW4gc29tZSBjYXNlLAotCSAqIGFuZCB0aGUgbWF4IGNvdW50IGlzIDB4MWZmLCB3aGlsZSBvdXIgbWF4IHNsb3QgaXMgMHgyMDAsCisJLyoKKwkgKiB0aGUgbWF4IGNvdW50IGlzIDB4MWZmLCB3aGlsZSBvdXIgbWF4IHNsb3QgaXMgMHgyMDAsCiAJICogaXQgd2lsbCBtYWtlIGNvdW50IDAuCiAJICovCiAJdG1wID0gMDsKLQltdzMyKE1WU19JTlRfQ09BTCwgdG1wKTsKKwlpZiAoTVZTX0NISVBfU0xPVF9TWiA+IDB4MWZmKQorCQltdzMyKE1WU19JTlRfQ09BTCwgMHgxZmYgfCBDT0FMX0VOKTsKKwllbHNlCisJCW13MzIoTVZTX0lOVF9DT0FMLCBNVlNfQ0hJUF9TTE9UX1NaIHwgQ09BTF9FTik7CiAKLQl0bXAgPSAweDEwMDsKKwkvKiBkZWZhdWx0IGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWUgaXMgMTI4dXMgKi8KKwl0bXAgPSAweDEwMDAwIHwgaW50ZXJydXB0X2NvYWxlc2Npbmc7CiAJbXczMihNVlNfSU5UX0NPQUxfVE1PVVQsIHRtcCk7CiAKIAkvKiBsYWRpZXMgYW5kIGdlbnRsZW1lbiwgc3RhcnQgeW91ciBlbmdpbmVzICovCkBAIC0yNDksNyArNDk2LDcgQEAKIAogCS8qIGVuYWJsZSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdCAqLwogCXRtcCA9IChDSU5UX1BPUlRfTUFTSyB8IENJTlRfRE9ORSB8IENJTlRfTUVNIHwgQ0lOVF9TUlMgfCBDSU5UX0NJX1NUT1AgfAotCQlDSU5UX0RNQV9QQ0lFKTsKKwkJQ0lOVF9ETUFfUENJRSB8IENJTlRfTk9OX1NQRUNfTkNRX0VSUk9SKTsKIAl0bXAgfD0gQ0lOVF9QSFlfTUFTSzsKIAltdzMyKE1WU19JTlRfTUFTSywgdG1wKTsKIApAQCAtMzMyLDEzICs1NzksMTAgQEAKIAlpZiAoKChzdGF0ICYgSVJRX1NBU19BKSAmJiBtdmktPmlkID09IDApIHx8CiAJCQkoKHN0YXQgJiBJUlFfU0FTX0IpICYmIG12aS0+aWQgPT0gMSkpIHsKIAkJbXczMl9mKE1WU19JTlRfU1RBVCwgQ0lOVF9ET05FKTsKLQkjaWZuZGVmIE1WU19VU0VfVEFTS0xFVAorCiAJCXNwaW5fbG9jaygmbXZpLT5sb2NrKTsKLQkjZW5kaWYKIAkJbXZzX2ludF9mdWxsKG12aSk7Ci0JI2lmbmRlZiBNVlNfVVNFX1RBU0tMRVQKIAkJc3Bpbl91bmxvY2soJm12aS0+bG9jayk7Ci0JI2VuZGlmCiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTM0NiwxMCArNTkwLDQ4IEBACiBzdGF0aWMgdm9pZCBtdnNfOTR4eF9jb21tYW5kX2FjdGl2ZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHNsb3RfaWR4KQogewogCXUzMiB0bXA7Ci0JbXZzX2N3MzIobXZpLCAweDMwMCArIChzbG90X2lkeCA+PiAzKSwgMSA8PCAoc2xvdF9pZHggJSAzMikpOwotCWRvIHsKLQkJdG1wID0gbXZzX2NyMzIobXZpLCAweDMwMCArIChzbG90X2lkeCA+PiAzKSk7Ci0JfSB3aGlsZSAodG1wICYgMSA8PCAoc2xvdF9pZHggJSAzMikpOworCXRtcCA9IG12c19jcjMyKG12aSwgTVZTX0NPTU1BTkRfQUNUSVZFKyhzbG90X2lkeCA+PiAzKSk7CisJaWYgKHRtcCAmJiAxIDw8IChzbG90X2lkeCAlIDMyKSkgeworCQltdl9wcmludGsoImNvbW1hbmQgYWN0aXZlICUwOFgsICBzbG90IFsleF0uXG4iLCB0bXAsIHNsb3RfaWR4KTsKKwkJbXZzX2N3MzIobXZpLCBNVlNfQ09NTUFORF9BQ1RJVkUgKyAoc2xvdF9pZHggPj4gMyksCisJCQkxIDw8IChzbG90X2lkeCAlIDMyKSk7CisJCWRvIHsKKwkJCXRtcCA9IG12c19jcjMyKG12aSwKKwkJCQlNVlNfQ09NTUFORF9BQ1RJVkUgKyAoc2xvdF9pZHggPj4gMykpOworCQl9IHdoaWxlICh0bXAgJiAxIDw8IChzbG90X2lkeCAlIDMyKSk7CisJfQorfQorCit2b2lkIG12c185NHh4X2NsZWFyX3Nyc19pcnEoc3RydWN0IG12c19pbmZvICptdmksIHU4IHJlZ19zZXQsIHU4IGNsZWFyX2FsbCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJdTMyIHRtcDsKKworCWlmIChjbGVhcl9hbGwpIHsKKwkJdG1wID0gbXIzMihNVlNfSU5UX1NUQVRfU1JTXzApOworCQlpZiAodG1wKSB7CisJCQltdl9kcHJpbnRrKCJjaGVjayBTUlMgMCAlMDhYLlxuIiwgdG1wKTsKKwkJCW13MzIoTVZTX0lOVF9TVEFUX1NSU18wLCB0bXApOworCQl9CisJCXRtcCA9IG1yMzIoTVZTX0lOVF9TVEFUX1NSU18xKTsKKwkJaWYgKHRtcCkgeworCQkJbXZfZHByaW50aygiY2hlY2sgU1JTIDEgJTA4WC5cbiIsIHRtcCk7CisJCQltdzMyKE1WU19JTlRfU1RBVF9TUlNfMSwgdG1wKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChyZWdfc2V0ID4gMzEpCisJCQl0bXAgPSBtcjMyKE1WU19JTlRfU1RBVF9TUlNfMSk7CisJCWVsc2UKKwkJCXRtcCA9IG1yMzIoTVZTX0lOVF9TVEFUX1NSU18wKTsKKworCQlpZiAodG1wICYgKDEgPDwgKHJlZ19zZXQgJSAzMikpKSB7CisJCQltdl9kcHJpbnRrKCJyZWdpc3RlciBzZXQgMHgleCB3YXMgc3RvcHBlZC5cbiIsIHJlZ19zZXQpOworCQkJaWYgKHJlZ19zZXQgPiAzMSkKKwkJCQltdzMyKE1WU19JTlRfU1RBVF9TUlNfMSwgMSA8PCAocmVnX3NldCAlIDMyKSk7CisJCQllbHNlCisJCQkJbXczMihNVlNfSU5UX1NUQVRfU1JTXzAsIDEgPDwgKHJlZ19zZXQgJSAzMikpOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBtdnNfOTR4eF9pc3N1ZV9zdG9wKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBlbnVtIG12c19wb3J0X3R5cGUgdHlwZSwKQEAgLTM1NywzNyArNjM5LDU2IEBACiB7CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOwogCXUzMiB0bXA7CisJbXZzXzk0eHhfY2xlYXJfc3JzX2lycShtdmksIDAsIDEpOwogCi0JaWYgKHR5cGUgPT0gUE9SVF9UWVBFX1NBVEEpIHsKLQkJdG1wID0gbXIzMihNVlNfSU5UX1NUQVRfU1JTXzApIHwgKDFVIDw8IHRmcyk7Ci0JCW13MzIoTVZTX0lOVF9TVEFUX1NSU18wLCB0bXApOwotCX0KLQltdzMyKE1WU19JTlRfU1RBVCwgQ0lOVF9DSV9TVE9QKTsKKwl0bXAgPSBtcjMyKE1WU19JTlRfU1RBVCk7CisJbXczMihNVlNfSU5UX1NUQVQsIHRtcCB8IENJTlRfQ0lfU1RPUCk7CiAJdG1wID0gbXIzMihNVlNfUENTKSB8IDB4RkYwMDsKIAltdzMyKE1WU19QQ1MsIHRtcCk7CiB9CiAKK3N0YXRpYyB2b2lkIG12c185NHh4X25vbl9zcGVjX25jcV9lcnJvcihzdHJ1Y3QgbXZzX2luZm8gKm12aSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBtdmktPnJlZ3M7CisJdTMyIGVycl8wLCBlcnJfMTsKKwl1OCBpOworCXN0cnVjdCBtdnNfZGV2aWNlICpkZXZpY2U7CisKKwllcnJfMCA9IG1yMzIoTVZTX05PTl9OQ1FfRVJSXzApOworCWVycl8xID0gbXIzMihNVlNfTk9OX05DUV9FUlJfMSk7CisKKwltdl9kcHJpbnRrKCJub24gc3BlY2lmaWMgbmNxIGVycm9yIGVycl8wOiV4LGVycl8xOiV4LlxuIiwKKwkJCWVycl8wLCBlcnJfMSk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYgKGVycl8wICYgYml0KGkpKSB7CisJCQlkZXZpY2UgPSBtdnNfZmluZF9kZXZfYnlfcmVnX3NldChtdmksIGkpOworCQkJaWYgKGRldmljZSkKKwkJCQltdnNfcmVsZWFzZV90YXNrKG12aSwgZGV2aWNlLT5zYXNfZGV2aWNlKTsKKwkJfQorCQlpZiAoZXJyXzEgJiBiaXQoaSkpIHsKKwkJCWRldmljZSA9IG12c19maW5kX2Rldl9ieV9yZWdfc2V0KG12aSwgaSszMik7CisJCQlpZiAoZGV2aWNlKQorCQkJCW12c19yZWxlYXNlX3Rhc2sobXZpLCBkZXZpY2UtPnNhc19kZXZpY2UpOworCQl9CisJfQorCisJbXczMihNVlNfTk9OX05DUV9FUlJfMCwgZXJyXzApOworCW13MzIoTVZTX05PTl9OQ1FfRVJSXzEsIGVycl8xKTsKK30KKwogc3RhdGljIHZvaWQgbXZzXzk0eHhfZnJlZV9yZWdfc2V0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1OCAqdGZzKQogewogCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKLQl1MzIgdG1wOwogCXU4IHJlZ19zZXQgPSAqdGZzOwogCiAJaWYgKCp0ZnMgPT0gTVZTX0lEX05PVF9NQVBQRUQpCiAJCXJldHVybjsKIAogCW12aS0+c2F0YV9yZWdfc2V0ICY9IH5iaXQocmVnX3NldCk7Ci0JaWYgKHJlZ19zZXQgPCAzMikgeworCWlmIChyZWdfc2V0IDwgMzIpCiAJCXdfcmVnX3NldF9lbmFibGUocmVnX3NldCwgKHUzMiltdmktPnNhdGFfcmVnX3NldCk7Ci0JCXRtcCA9IG1yMzIoTVZTX0lOVF9TVEFUX1NSU18wKSAmICh1MzIpbXZpLT5zYXRhX3JlZ19zZXQ7Ci0JCWlmICh0bXApCi0JCQltdzMyKE1WU19JTlRfU1RBVF9TUlNfMCwgdG1wKTsKLQl9IGVsc2UgewotCQl3X3JlZ19zZXRfZW5hYmxlKHJlZ19zZXQsIG12aS0+c2F0YV9yZWdfc2V0KTsKLQkJdG1wID0gbXIzMihNVlNfSU5UX1NUQVRfU1JTXzEpICYgbXZpLT5zYXRhX3JlZ19zZXQ7Ci0JCWlmICh0bXApCi0JCQltdzMyKE1WU19JTlRfU1RBVF9TUlNfMSwgdG1wKTsKLQl9CisJZWxzZQorCQl3X3JlZ19zZXRfZW5hYmxlKHJlZ19zZXQsICh1MzIpKG12aS0+c2F0YV9yZWdfc2V0ID4+IDMyKSk7CiAKIAkqdGZzID0gTVZTX0lEX05PVF9NQVBQRUQ7CiAKQEAgLTQwMyw3ICs3MDQsNyBAQAogCQlyZXR1cm4gMDsKIAogCWkgPSBtdl9mZmM2NChtdmktPnNhdGFfcmVnX3NldCk7Ci0JaWYgKGkgPiAzMikgeworCWlmIChpID49IDMyKSB7CiAJCW12aS0+c2F0YV9yZWdfc2V0IHw9IGJpdChpKTsKIAkJd19yZWdfc2V0X2VuYWJsZShpLCAodTMyKShtdmktPnNhdGFfcmVnX3NldCA+PiAzMikpOwogCQkqdGZzID0gaTsKQEAgLTQyMiw5ICs3MjMsMTIgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXN0cnVjdCBtdnNfcHJkICpidWZfcHJkID0gcHJkOworCXN0cnVjdCBtdnNfcHJkX2ltdCBpbV9sZW47CisJKih1MzIgKikmaW1fbGVuID0gMDsKIAlmb3JfZWFjaF9zZyhzY2F0dGVyLCBzZywgbnIsIGkpIHsKIAkJYnVmX3ByZC0+YWRkciA9IGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCWJ1Zl9wcmQtPmltX2xlbi5sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CisJCWltX2xlbi5sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJYnVmX3ByZC0+aW1fbGVuID0gY3B1X3RvX2xlMzIoKih1MzIgKikmaW1fbGVuKTsKIAkJYnVmX3ByZCsrOwogCX0KIH0KQEAgLTQzMyw3ICs3MzcsNyBAQAogewogCXUzMiBwaHlfc3Q7CiAJcGh5X3N0ID0gbXZzX3JlYWRfcGh5X2N0bChtdmksIGkpOwotCWlmIChwaHlfc3QgJiBQSFlfUkVBRFlfTUFTSykJLyogcGh5IHJlYWR5ICovCisJaWYgKHBoeV9zdCAmIFBIWV9SRUFEWV9NQVNLKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0Nyw3ICs3NTEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKIAkJbXZzX3dyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBwb3J0X2lkLAogCQkJCQlDT05GSUdfSURfRlJBTUUwICsgaSAqIDQpOwotCQlpZF9mcmFtZVtpXSA9IG12c19yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBwb3J0X2lkKTsKKwkJaWRfZnJhbWVbaV0gPSBjcHVfdG9fbGUzMihtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgcG9ydF9pZCkpOwogCX0KIAltZW1jcHkoaWQsIGlkX2ZyYW1lLCAyOCk7CiB9CkBAIC00NTgsMTUgKzc2MiwxMyBAQAogCWludCBpOwogCXUzMiBpZF9mcmFtZVs3XTsKIAotCS8qIG12c19oZXhkdW1wKDI4LCAodTggKilpZF9mcmFtZSwgMCk7ICovCiAJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewogCQltdnNfd3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIHBvcnRfaWQsCiAJCQkJCUNPTkZJR19BVFRfSURfRlJBTUUwICsgaSAqIDQpOwotCQlpZF9mcmFtZVtpXSA9IG12c19yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBwb3J0X2lkKTsKKwkJaWRfZnJhbWVbaV0gPSBjcHVfdG9fbGUzMihtdnNfcmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgcG9ydF9pZCkpOwogCQltdl9kcHJpbnRrKCI5NHh4IHBoeSAlZCBhdHRhIGZyYW1lICVkICV4LlxuIiwKIAkJCXBvcnRfaWQgKyBtdmktPmlkICogbXZpLT5jaGlwLT5uX3BoeSwgaSwgaWRfZnJhbWVbaV0pOwogCX0KLQkvKiBtdnNfaGV4ZHVtcCgyOCwgKHU4ICopaWRfZnJhbWUsIDApOyAqLwogCW1lbWNweShpZCwgaWRfZnJhbWUsIDI4KTsKIH0KIApAQCAtNTI2LDcgKzgyOCwxOCBAQAogdm9pZCBtdnNfOTR4eF9waHlfc2V0X2xpbmtfcmF0ZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBoeV9pZCwKIAkJCXN0cnVjdCBzYXNfcGh5X2xpbmtyYXRlcyAqcmF0ZXMpCiB7Ci0JLyogVE9ETyAqLworCXUzMiBscm1heCA9IDA7CisJdTMyIHRtcDsKKworCXRtcCA9IG12c19yZWFkX3BoeV9jdGwobXZpLCBwaHlfaWQpOworCWxybWF4ID0gKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlIC0gU0FTX0xJTktfUkFURV8xXzVfR0JQUykgPDwgMTI7CisKKwlpZiAobHJtYXgpIHsKKwkJdG1wICY9IH4oMHgzIDw8IDEyKTsKKwkJdG1wIHw9IGxybWF4OworCX0KKwltdnNfd3JpdGVfcGh5X2N0bChtdmksIHBoeV9pZCwgdG1wKTsKKwltdnNfOTR4eF9waHlfcmVzZXQobXZpLCBwaHlfaWQsIFBIWV9SU1RfSEFSRCk7CiB9CiAKIHN0YXRpYyB2b2lkIG12c185NHh4X2NsZWFyX2FjdGl2ZV9jbWRzKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQpAQCAtNjAzLDI3ICs5MTYsNTkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKLXZvaWQgbXZzXzk0eHhfZml4X2RtYShkbWFfYWRkcl90IGJ1Zl9kbWEsIGludCBidWZfbGVuLCBpbnQgZnJvbSwgdm9pZCAqcHJkKQordm9pZCBtdnNfOTR4eF9maXhfZG1hKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgcGh5X21hc2ssCisJCQkJaW50IGJ1Zl9sZW4sIGludCBmcm9tLCB2b2lkICpwcmQpCiB7CiAJaW50IGk7CiAJc3RydWN0IG12c19wcmQgKmJ1Zl9wcmQgPSBwcmQ7CisJZG1hX2FkZHJfdCBidWZfZG1hOworCXN0cnVjdCBtdnNfcHJkX2ltdCBpbV9sZW47CisKKwkqKHUzMiAqKSZpbV9sZW4gPSAwOwogCWJ1Zl9wcmQgKz0gZnJvbTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1NHX0VOVFJZIC0gZnJvbTsgaSsrKSB7Ci0JCWJ1Zl9wcmQtPmFkZHIgPSBjcHVfdG9fbGU2NChidWZfZG1hKTsKLQkJYnVmX3ByZC0+aW1fbGVuLmxlbiA9IGNwdV90b19sZTMyKGJ1Zl9sZW4pOwotCQkrK2J1Zl9wcmQ7CisKKyNkZWZpbmUgUFJEX0NIQUlORURfRU5UUlkgMHgwMQorCWlmICgobXZpLT5wZGV2LT5yZXZpc2lvbiA9PSBWQU5JUl9BMF9SRVYpIHx8CisJCQkobXZpLT5wZGV2LT5yZXZpc2lvbiA9PSBWQU5JUl9CMF9SRVYpKQorCQlidWZfZG1hID0gKHBoeV9tYXNrIDw9IDB4MDgpID8KKwkJCQltdmktPmJ1bGtfYnVmZmVyX2RtYSA6IG12aS0+YnVsa19idWZmZXJfZG1hMTsKKwllbHNlCisJCXJldHVybjsKKworCWZvciAoaSA9IGZyb207IGkgPCBNQVhfU0dfRU5UUlk7IGkrKywgKytidWZfcHJkKSB7CisJCWlmIChpID09IE1BWF9TR19FTlRSWSAtIDEpIHsKKwkJCWJ1Zl9wcmQtPmFkZHIgPSBjcHVfdG9fbGU2NCh2aXJ0X3RvX3BoeXMoYnVmX3ByZCAtIDEpKTsKKwkJCWltX2xlbi5sZW4gPSAyOworCQkJaW1fbGVuLm1pc2NfY3RsID0gUFJEX0NIQUlORURfRU5UUlk7CisJCX0gZWxzZSB7CisJCQlidWZfcHJkLT5hZGRyID0gY3B1X3RvX2xlNjQoYnVmX2RtYSk7CisJCQlpbV9sZW4ubGVuID0gYnVmX2xlbjsKKwkJfQorCQlidWZfcHJkLT5pbV9sZW4gPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZpbV9sZW4pOwogCX0KIH0KLSNlbmRpZgogCi0vKgotICogRklYTUUgSkVKQjogdGVtcG9yYXJ5IG5vcCBjbGVhcl9zcnNfaXJxIHRvIG1ha2UgOTR4eCBzdGlsbCB3b3JrCi0gKiB3aXRoIDY0eHggZml4ZXMKLSAqLwotc3RhdGljIHZvaWQgbXZzXzk0eHhfY2xlYXJfc3JzX2lycShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTggcmVnX3NldCwKLQkJCQkgICB1OCBjbGVhcl9hbGwpCitzdGF0aWMgdm9pZCBtdnNfOTR4eF90dW5lX2ludGVycnVwdChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHRpbWUpCiB7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gbXZpLT5yZWdzOworCXUzMiB0bXAgPSAwOworCS8qCisJICogdGhlIG1heCBjb3VudCBpcyAweDFmZiwgd2hpbGUgb3VyIG1heCBzbG90IGlzIDB4MjAwLAorCSAqIGl0IHdpbGwgbWFrZSBjb3VudCAwLgorCSAqLworCWlmICh0aW1lID09IDApIHsKKwkJbXczMihNVlNfSU5UX0NPQUwsIDApOworCQltdzMyKE1WU19JTlRfQ09BTF9UTU9VVCwgMHgxMDAwMCk7CisJfSBlbHNlIHsKKwkJaWYgKE1WU19DSElQX1NMT1RfU1ogPiAweDFmZikKKwkJCW13MzIoTVZTX0lOVF9DT0FMLCAweDFmZnxDT0FMX0VOKTsKKwkJZWxzZQorCQkJbXczMihNVlNfSU5UX0NPQUwsIE1WU19DSElQX1NMT1RfU1p8Q09BTF9FTik7CisKKwkJdG1wID0gMHgxMDAwMCB8IHRpbWU7CisJCW13MzIoTVZTX0lOVF9DT0FMX1RNT1VULCB0bXApOworCX0KKwogfQogCiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c185NHh4X2Rpc3BhdGNoID0gewpAQCAtNjQ4LDcgKzk5Myw2IEBACiAJbXZzX3dyaXRlX3BvcnRfaXJxX3N0YXQsCiAJbXZzX3JlYWRfcG9ydF9pcnFfbWFzaywKIAltdnNfd3JpdGVfcG9ydF9pcnFfbWFzaywKLQltdnNfZ2V0X3Nhc19hZGRyLAogCW12c185NHh4X2NvbW1hbmRfYWN0aXZlLAogCW12c185NHh4X2NsZWFyX3Nyc19pcnEsCiAJbXZzXzk0eHhfaXNzdWVfc3RvcCwKQEAgLTY3Niw4ICsxMDIwLDggQEAKIAltdnNfOTR4eF9zcGlfYnVpbGRjbWQsCiAJbXZzXzk0eHhfc3BpX2lzc3VlY21kLAogCW12c185NHh4X3NwaV93YWl0ZGF0YXJlYWR5LAotI2lmbmRlZiBESVNBQkxFX0hPVFBMVUdfRE1BX0ZJWAogCW12c185NHh4X2ZpeF9kbWEsCi0jZW5kaWYKKwltdnNfOTR4eF90dW5lX2ludGVycnVwdCwKKwltdnNfOTR4eF9ub25fc3BlY19uY3FfZXJyb3IsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5oIGIvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguaAppbmRleCA4ODM1YmVmLi44ZjdlYjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmgKQEAgLTMwLDYgKzMwLDE0IEBACiAKICNkZWZpbmUgTUFYX0xJTktfUkFURQkJU0FTX0xJTktfUkFURV82XzBfR0JQUwogCitlbnVtIFZBTklSX1JFVklTSU9OX0lEIHsKKwlWQU5JUl9BMF9SRVYJCT0gMHhBMCwKKwlWQU5JUl9CMF9SRVYJCT0gMHgwMSwKKwlWQU5JUl9DMF9SRVYJCT0gMHgwMiwKKwlWQU5JUl9DMV9SRVYJCT0gMHgwMywKKwlWQU5JUl9DMl9SRVYJCT0gMHhDMiwKK307CisKIGVudW0gaHdfcmVnaXN0ZXJzIHsKIAlNVlNfR0JMX0NUTAkJPSAweDA0LCAgLyogZ2xvYmFsIGNvbnRyb2wgKi8KIAlNVlNfR0JMX0lOVF9TVEFUCT0gMHgwMCwgIC8qIGdsb2JhbCBpcnEgc3RhdHVzICovCkBAIC0xMDEsNiArMTA5LDcgQEAKIAlNVlNfUDRfVlNSX0RBVEEgCT0gMHgyNTQsIC8qIHBoeTQgVlNSIGRhdGEgKi8KIAlNVlNfUEFfVlNSX0FERFIJCT0gMHgyOTAsIC8qIEFsbCBwb3J0IFZTUiBhZGRyICovCiAJTVZTX1BBX1ZTUl9QT1JUCQk9IDB4Mjk0LCAvKiBBbGwgcG9ydCBWU1IgZGF0YSAqLworCU1WU19DT01NQU5EX0FDVElWRQk9IDB4MzAwLAogfTsKIAogZW51bSBwY2lfY2ZnX3JlZ2lzdGVycyB7CkBAIC0xMTIsMjYgKzEyMSwyOSBAQAogCiAvKiAgU0FTL1NBVEEgVmVuZG9yIFNwZWNpZmljIFBvcnQgUmVnaXN0ZXJzICovCiBlbnVtIHNhc19zYXRhX3ZzcF9yZWdzIHsKLQlWU1JfUEhZX1NUQVQJCT0gMHgwMCAqIDQsIC8qIFBoeSBTdGF0dXMgKi8KLQlWU1JfUEhZX01PREUxCQk9IDB4MDEgKiA0LCAvKiBwaHkgdHggKi8KLQlWU1JfUEhZX01PREUyCQk9IDB4MDIgKiA0LCAvKiB0eCBzY2MgKi8KLQlWU1JfUEhZX01PREUzCQk9IDB4MDMgKiA0LCAvKiBwbGwgKi8KLQlWU1JfUEhZX01PREU0CQk9IDB4MDQgKiA0LCAvKiBWQ08gKi8KLQlWU1JfUEhZX01PREU1CQk9IDB4MDUgKiA0LCAvKiBSeCAqLwotCVZTUl9QSFlfTU9ERTYJCT0gMHgwNiAqIDQsIC8qIENEUiAqLwotCVZTUl9QSFlfTU9ERTcJCT0gMHgwNyAqIDQsIC8qIEltcGVkYW5jZSAqLwotCVZTUl9QSFlfTU9ERTgJCT0gMHgwOCAqIDQsIC8qIFZvbHRhZ2UgKi8KLQlWU1JfUEhZX01PREU5CQk9IDB4MDkgKiA0LCAvKiBUZXN0ICovCi0JVlNSX1BIWV9NT0RFMTAJCT0gMHgwQSAqIDQsIC8qIFBvd2VyICovCi0JVlNSX1BIWV9NT0RFMTEJCT0gMHgwQiAqIDQsIC8qIFBoeSBNb2RlICovCi0JVlNSX1BIWV9WUzAJCT0gMHgwQyAqIDQsIC8qIFZlZG5vciBTcGVjaWZpYyAwICovCi0JVlNSX1BIWV9WUzEJCT0gMHgwRCAqIDQsIC8qIFZlZG5vciBTcGVjaWZpYyAxICovCisJVlNSX1BIWV9TVEFUCQk9IDB4MDAgKiA0LCAvKiBQaHkgSW50ZXJydXB0IFN0YXR1cyAqLworCVZTUl9QSFlfTU9ERTEJCT0gMHgwMSAqIDQsIC8qIHBoeSBJbnRlcnJ1cHQgRW5hYmxlICovCisJVlNSX1BIWV9NT0RFMgkJPSAweDAyICogNCwgLyogUGh5IENvbmZpZ3VyYXRpb24gKi8KKwlWU1JfUEhZX01PREUzCQk9IDB4MDMgKiA0LCAvKiBQaHkgU3RhdHVzICovCisJVlNSX1BIWV9NT0RFNAkJPSAweDA0ICogNCwgLyogUGh5IENvdW50ZXIgMCAqLworCVZTUl9QSFlfTU9ERTUJCT0gMHgwNSAqIDQsIC8qIFBoeSBDb3VudGVyIDEgKi8KKwlWU1JfUEhZX01PREU2CQk9IDB4MDYgKiA0LCAvKiBFdmVudCBDb3VudGVyIENvbnRyb2wgKi8KKwlWU1JfUEhZX01PREU3CQk9IDB4MDcgKiA0LCAvKiBFdmVudCBDb3VudGVyIFNlbGVjdCAqLworCVZTUl9QSFlfTU9ERTgJCT0gMHgwOCAqIDQsIC8qIEV2ZW50IENvdW50ZXIgMCAqLworCVZTUl9QSFlfTU9ERTkJCT0gMHgwOSAqIDQsIC8qIEV2ZW50IENvdW50ZXIgMSAqLworCVZTUl9QSFlfTU9ERTEwCQk9IDB4MEEgKiA0LCAvKiBFdmVudCBDb3VudGVyIDIgKi8KKwlWU1JfUEhZX01PREUxMQkJPSAweDBCICogNCwgLyogRXZlbnQgQ291bnRlciAzICovCisJVlNSX1BIWV9BQ1RfTEVECQk9IDB4MEMgKiA0LCAvKiBBY3Rpdml0eSBMRUQgY29udHJvbCAqLworCisJVlNSX1BIWV9GRkVfQ09OVFJPTAk9IDB4MTBDLAorCVZTUl9QSFlfREZFX1VQREFURV9DUlRMCT0gMHgxMTAsCisJVlNSX1JFRl9DTE9DS19DUlRMCT0gMHgxQTAsCiB9OwogCiBlbnVtIGNoaXBfcmVnaXN0ZXJfYml0cyB7CiAJUEhZX01JTl9TUFBfUEhZU19MSU5LX1JBVEVfTUFTSyA9ICgweDcgPDwgOCksCi0JUEhZX01BWF9TUFBfUEhZU19MSU5LX1JBVEVfTUFTSyA9ICgweDcgPDwgOCksCi0JUEhZX05FR19TUFBfUEhZU19MSU5LX1JBVEVfTUFTS19PRkZTRVQgPSAoMTIpLAorCVBIWV9NQVhfU1BQX1BIWVNfTElOS19SQVRFX01BU0sgPSAoMHg3IDw8IDEyKSwKKwlQSFlfTkVHX1NQUF9QSFlTX0xJTktfUkFURV9NQVNLX09GRlNFVCA9ICgxNiksCiAJUEhZX05FR19TUFBfUEhZU19MSU5LX1JBVEVfTUFTSyA9CiAJCQkoMHgzIDw8IFBIWV9ORUdfU1BQX1BIWVNfTElOS19SQVRFX01BU0tfT0ZGU0VUKSwKIH07CkBAIC0xNjksMjIgKzE4MSw3NSBAQAogCUlSUV9QQ0lFX0VSUiAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDMxKSwKIH07CiAKK3VuaW9uIHJlZ19waHlfY2ZnIHsKKwl1MzIgdjsKKwlzdHJ1Y3QgeworCQl1MzIgcGh5X3Jlc2V0OjE7CisJCXUzMiBzYXNfc3VwcG9ydDoxOworCQl1MzIgc2F0YV9zdXBwb3J0OjE7CisJCXUzMiBzYXRhX2hvc3RfbW9kZToxOworCQkvKgorCQkgKiBiaXQgMjogNkdicHMgc3VwcG9ydAorCQkgKiBiaXQgMTogM0dicHMgc3VwcG9ydAorCQkgKiBiaXQgMDogMS41R2JwcyBzdXBwb3J0CisJCSAqLworCQl1MzIgc3BlZWRfc3VwcG9ydDozOworCQl1MzIgc253XzNfc3VwcG9ydDoxOworCQl1MzIgdHhfbG5rX3Bhcml0eToxOworCQkvKgorCQkgKiBiaXQgNTogRzEgKDEuNUdicHMpIFdpdGhvdXQgU1NDCisJCSAqIGJpdCA0OiBHMSAoMS41R2Jwcykgd2l0aCBTU0MKKwkJICogYml0IDM6IEcyICgzLjBHYnBzKSBXaXRob3V0IFNTQworCQkgKiBiaXQgMjogRzIgKDMuMEdicHMpIHdpdGggU1NDCisJCSAqIGJpdCAxOiBHMyAoNi4wR2Jwcykgd2l0aG91dCBTU0MKKwkJICogYml0IDA6IEczICg2LjBHYnBzKSB3aXRoIFNTQworCQkgKi8KKwkJdTMyIHR4X3NwdF9waHNfbG5rX3JhdGU6NjsKKwkJLyogOGg6IDEuNUdicHMgOWg6IDNHYnBzIEFoOiA2R2JwcyAqLworCQl1MzIgdHhfbGdjbF9sbmtfcmF0ZTo0OworCQl1MzIgdHhfc3NjX3R5cGU6MTsKKwkJdTMyIHNhdGFfc3Bpbl91cF9zcHQ6MTsKKwkJdTMyIHNhdGFfc3Bpbl91cF9lbjoxOworCQl1MzIgYnlwYXNzX29vYjoxOworCQl1MzIgZGlzYWJsZV9waHk6MTsKKwkJdTMyIHJzdmQ6ODsKKwl9IHU7Cit9OworCiAjZGVmaW5lIE1BWF9TR19FTlRSWQkJMjU1CiAKIHN0cnVjdCBtdnNfcHJkX2ltdCB7CisjaWZuZGVmIF9fQklHX0VORElBTgogCV9fbGUzMgkJCWxlbjoyMjsKIAl1OAkJCV9yX2E6MjsKIAl1OAkJCW1pc2NfY3RsOjQ7CiAJdTgJCQlpbnRlcl9zZWw6NDsKKyNlbHNlCisJdTMyCQkJaW50ZXJfc2VsOjQ7CisJdTMyCQkJbWlzY19jdGw6NDsKKwl1MzIJCQlfcl9hOjI7CisJdTMyCQkJbGVuOjIyOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgbXZzX3ByZCB7CiAJLyogNjQtYml0IGJ1ZmZlciBhZGRyZXNzICovCiAJX19sZTY0CQkJYWRkcjsKIAkvKiAyMi1iaXQgbGVuZ3RoICovCi0Jc3RydWN0IG12c19wcmRfaW10CWltX2xlbjsKKwlfX2xlMzIJCQlpbV9sZW47CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIHRoZXNlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBwb3J0IHZlbmRvcgorICogc3BlY2lmaWMgYWRkcmVzcy9kYXRhIHJlZ2lzdGVycworICovCitlbnVtIHNhc19zYXRhX3BoeV9yZWdzIHsKKwlHRU5FUkFUSU9OXzFfU0VUVElORwkJPSAweDExOCwKKwlHRU5FUkFUSU9OXzFfMl9TRVRUSU5HCQk9IDB4MTFDLAorCUdFTkVSQVRJT05fMl8zX1NFVFRJTkcJCT0gMHgxMjAsCisJR0VORVJBVElPTl8zXzRfU0VUVElORwkJPSAweDEyNCwKK307CisKICNkZWZpbmUgU1BJX0NUUkxfUkVHXzk0WFggICAgICAgICAgIAkweGM4MDAKICNkZWZpbmUgU1BJX0FERFJfUkVHXzk0WFggICAgICAgICAgICAJMHhjODA0CiAjZGVmaW5lIFNQSV9XUl9EQVRBX1JFR185NFhYICAgICAgICAgMHhjODA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfY2hpcHMuaCBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9jaGlwcy5oCmluZGV4IDE3NTNhNmYuLmJjYzQwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9jaGlwcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9jaGlwcy5oCkBAIC0xNjQsNyArMTY0LDYgQEAKIHsKIAl1MzIgdG1wOwogCi0JLyogd29ya2Fyb3VuZCBmb3IgU0FUQSBSLUVSUiwgdG8gaWdub3JlIHBoeSBnbGl0Y2ggKi8KIAl0bXAgPSBtdnNfY3IzMihtdmksIENNRF9QSFlfVElNRVIpOwogCXRtcCAmPSB+KDEgPDwgOSk7CiAJdG1wIHw9ICgxIDw8IDEwKTsKQEAgLTE3OSwyMyArMTc4LDEwIEBACiAJdG1wIHw9IDB4M2ZmZjsKIAltdnNfY3czMihtdmksIENNRF9TQVNfQ1RMMCwgdG1wKTsKIAotCS8qIHdvcmthcm91bmQgZm9yIFdEVElNRU9VVCAsIHNldCB0byA1NTAgbXMgKi8KIAltdnNfY3czMihtdmksIENNRF9XRF9USU1FUiwgMHg3YTAwMDApOwogCiAJLyogbm90IHRvIGhhbHQgZm9yIGRpZmZlcmVudCBwb3J0IG9wIGR1cmluZyB3aWRlcG9ydCBsaW5rIGNoYW5nZSAqLwogCW12c19jdzMyKG12aSwgQ01EX0FQUF9FUlJfQ09ORklHLCAweGZmZWZiZjdkKTsKLQotCS8qIHdvcmthcm91bmQgZm9yIFNlYWdhdGUgZGlzayBub3QtZm91bmQgT09CIHNlcXVlbmNlLCByZWN2Ci0JICogQ09NSU5JVCBiZWZvcmUgc2VuZGluZyBvdXQgQ09NV0FLRSAqLwotCXRtcCA9IG12c19jcjMyKG12aSwgQ01EX1BIWV9NT0RFXzIxKTsKLQl0bXAgJj0gMHgwMDAwZmZmZjsKLQl0bXAgfD0gMHgwMGZhMDAwMDsKLQltdnNfY3czMihtdmksIENNRF9QSFlfTU9ERV8yMSwgdG1wKTsKLQotCXRtcCA9IG12c19jcjMyKG12aSwgQ01EX1BIWV9USU1FUik7Ci0JdG1wICY9IDB4MWZmZmZmZmY7Ci0JdG1wIHw9ICgyVSA8PCAyOSk7CS8qIDggbXMgcmV0cnkgKi8KLQltdnNfY3czMihtdmksIENNRF9QSFlfVElNRVIsIHRtcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdnNfaW50X3NhdGEoc3RydWN0IG12c19pbmZvICptdmkpCkBAIC0yMjMsNiArMjA5LDkgQEAKIAkJCW12c19pbnRfcG9ydChtdmksIGksIHRtcCk7CiAJfQogCisJaWYgKHN0YXQgJiBDSU5UX05PTl9TUEVDX05DUV9FUlJPUikKKwkJTVZTX0NISVBfRElTUC0+bm9uX3NwZWNfbmNxX2Vycm9yKG12aSk7CisKIAlpZiAoc3RhdCAmIENJTlRfU1JTKQogCQltdnNfaW50X3NhdGEobXZpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKaW5kZXggYmMwMGM5NC4uZGVjN2NhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCkBAIC00Myw3ICs0Myw2IEBACiAKIC8qIGRyaXZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiAqLwogZW51bSBkcml2ZXJfY29uZmlndXJhdGlvbiB7Ci0JTVZTX1NMT1RTCQk9IDUxMiwJLyogY29tbWFuZCBzbG90cyAqLwogCU1WU19UWF9SSU5HX1NaCQk9IDEwMjQsCS8qIFRYIHJpbmcgc2l6ZSAoMTItYml0KSAqLwogCU1WU19SWF9SSU5HX1NaCQk9IDEwMjQsIC8qIFJYIHJpbmcgc2l6ZSAoMTItYml0KSAqLwogCQkJCQkvKiBzb2Z0d2FyZSByZXF1aXJlcyBwb3dlci1vZi0yCkBAIC01Niw4ICs1NSw3IEBACiAJTVZTX1NTUF9DTURfU1oJCT0gNjQsCS8qIFNTUCBjb21tYW5kIHRhYmxlIGJ1ZmZlciBzaXplICovCiAJTVZTX0FUQV9DTURfU1oJCT0gOTYsCS8qIFNBVEEgY29tbWFuZCB0YWJsZSBidWZmZXIgc2l6ZSAqLwogCU1WU19PQUZfU1oJCT0gNjQsCS8qIE9wZW4gYWRkcmVzcyBmcmFtZSBidWZmZXIgc2l6ZSAqLwotCU1WU19RVUVVRV9TSVpFCT0gMzIsCS8qIFN1cHBvcnQgUXVldWUgZGVwdGggKi8KLQlNVlNfQ0FOX1FVRVVFCQk9IE1WU19TTE9UUyAtIDIsCS8qIFNDU0kgUXVldWUgZGVwdGggKi8KKwlNVlNfUVVFVUVfU0laRQkJPSA2NCwJLyogU3VwcG9ydCBRdWV1ZSBkZXB0aCAqLwogCU1WU19TT0NfQ0FOX1FVRVVFCT0gTVZTX1NPQ19TTE9UUyAtIDIsCiB9OwogCkBAIC0xNDQsNiArMTQyLDcgQEAKIAlDSU5UX0RNQV9QQ0lFCQk9ICgxVSA8PCAyNyksCS8qIERNQSB0byBQQ0lFIHRpbWVvdXQgKi8KIAlDSU5UX01FTQkJPSAoMVUgPDwgMjYpLAkvKiBpbnQgbWVtIHBhcml0eSBlcnIgKi8KIAlDSU5UX0kyQ19TTEFWRQkJPSAoMVUgPDwgMjUpLAkvKiBzbGF2ZSBJMkMgZXZlbnQgKi8KKwlDSU5UX05PTl9TUEVDX05DUV9FUlJPUgk9ICgxVSA8PCAyNSksCS8qIE5vbiBzcGVjaWZpYyBOQ1EgZXJyb3IgKi8KIAlDSU5UX1NSUwkJPSAoMVUgPDwgMyksCS8qIFNSUyBldmVudCAqLwogCUNJTlRfQ0lfU1RPUAkJPSAoMVUgPDwgMSksCS8qIGNtZCBpc3N1ZSBzdG9wcGVkICovCiAJQ0lOVF9ET05FCQk9ICgxVSA8PCAwKSwJLyogY21kIGNvbXBsZXRpb24gKi8KQEAgLTE2MSw3ICsxNjAsNyBAQAogCVRYUV9DTURfU1NQCQk9IDEsCQkvKiBTU1AgcHJvdG9jb2wgKi8KIAlUWFFfQ01EX1NNUAkJPSAyLAkJLyogU01QIHByb3RvY29sICovCiAJVFhRX0NNRF9TVFAJCT0gMywJCS8qIFNUUC9TQVRBIHByb3RvY29sICovCi0JVFhRX0NNRF9TU1BfRlJFRV9MSVNUCT0gNCwJCS8qIGFkZCB0byBTU1AgdGFyZyBmcmVlIGxpc3QgKi8KKwlUWFFfQ01EX1NTUF9GUkVFX0xJU1QJPSA0LAkJLyogYWRkIHRvIFNTUCB0YXJnZXQgZnJlZSBsaXN0ICovCiAJVFhRX0NNRF9TTE9UX1JFU0VUCT0gNywJCS8qIHJlc2V0IGNvbW1hbmQgc2xvdCAqLwogCVRYUV9NT0RFX0kJCT0gKDFVIDw8IDI4KSwJLyogbW9kZTogMD10YXJnZXQsMT1pbml0aWF0b3IgKi8KIAlUWFFfTU9ERV9UQVJHRVQgCT0gMCwKQEAgLTM5MSwxNSArMzkwLDE1IEBACiB9OwogCiBlbnVtIG12c19pbmZvX2ZsYWdzIHsKLQlNVkZfTVNJCQk9ICgxVSA8PCAwKSwJLyogTVNJIGlzIGVuYWJsZWQgKi8KIAlNVkZfUEhZX1BXUl9GSVgJPSAoMVUgPDwgMSksCS8qIGJ1ZyB3b3JrYXJvdW5kICovCiAJTVZGX0ZMQUdfU09DCQk9ICgxVSA8PCAyKSwJLyogU29DIGludGVncmF0ZWQgY29udHJvbGxlcnMgKi8KIH07CiAKIGVudW0gbXZzX2V2ZW50X2ZsYWdzIHsKLQlQSFlfUExVR19FVkVOVAk9ICgzVSksCisJUEhZX1BMVUdfRVZFTlQJCT0gKDNVKSwKIAlQSFlfUExVR19JTgkJPSAoMVUgPDwgMCksCS8qIHBoeSBwbHVnIGluICovCiAJUEhZX1BMVUdfT1VUCQk9ICgxVSA8PCAxKSwJLyogcGh5IHBsdWcgb3V0ICovCisJRVhQX0JSQ1RfQ0hHCQk9ICgxVSA8PCAyKSwJLyogYnJvYWRjYXN0IGNoYW5nZSAqLwogfTsKIAogZW51bSBtdnNfcG9ydF90eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCmluZGV4IDkwYjYzNjYuLjRlOWFmNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYwpAQCAtMzQsMjIgKzM0LDI1IEBACiAJIlx0VGhlIG12c2FzIFNBUyBMTEREIHN1cHBvcnRzIGJvdGggbW9kZXMuXG4iCiAJIlx0RGVmYXVsdDogMSAoRGlyZWN0IE1vZGUpLlxuIik7CiAKK2ludCBpbnRlcnJ1cHRfY29hbGVzY2luZyA9IDB4ODA7CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm12c19zdHQ7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqbXZzX3Rhc2tfbGlzdF9jYWNoZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXZzX2NoaXBfaW5mbyBtdnNfY2hpcHNbXSA9IHsKLQlbY2hpcF82MzIwXSA9CXsgMSwgMiwgMHg0MDAsIDE3LCAxNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF82NDQwXSA9CXsgMSwgNCwgMHg0MDAsIDE3LCAxNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF82NDg1XSA9CXsgMSwgOCwgMHg4MDAsIDMzLCAzMiwgMTAsICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF85MTgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF85NDgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF85NDQ1XSA9CXsgMSwgNCwgMHg4MDAsIDE3LCA2NCwgMTEsICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF85NDg1XSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgMTEsICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF8xMzAwXSA9CXsgMSwgNCwgMHg0MDAsIDE3LCAxNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKLQlbY2hpcF8xMzIwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF82MzIwXSA9CXsgMSwgMiwgMHg0MDAsIDE3LCAxNiwgNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF82NDQwXSA9CXsgMSwgNCwgMHg0MDAsIDE3LCAxNiwgNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF82NDg1XSA9CXsgMSwgOCwgMHg4MDAsIDMzLCAzMiwgNiwgMTAsICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF85MTgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgOCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF85NDgwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgOCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF85NDQ1XSA9CXsgMSwgNCwgMHg4MDAsIDE3LCA2NCwgOCwgMTEsICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF85NDg1XSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgOCwgMTEsICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF8xMzAwXSA9CXsgMSwgNCwgMHg0MDAsIDE3LCAxNiwgNiwgIDksICZtdnNfNjR4eF9kaXNwYXRjaCwgfSwKKwlbY2hpcF8xMzIwXSA9CXsgMiwgNCwgMHg4MDAsIDE3LCA2NCwgOCwgIDksICZtdnNfOTR4eF9kaXNwYXRjaCwgfSwKIH07CiAKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptdnN0X2hvc3RfYXR0cnNbXTsKKwogI2RlZmluZSBTT0NfU0FTX05VTSAyCi0jZGVmaW5lIFNHX01YIDY0CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIG12c19zaHQgPSB7CiAJLm1vZHVsZQkJCT0gVEhJU19NT0RVTEUsCkBAIC02Niw3ICs2OSw3IEBACiAJLmNhbl9xdWV1ZQkJPSAxLAogCS5jbWRfcGVyX2x1bgkJPSAxLAogCS50aGlzX2lkCQk9IC0xLAotCS5zZ190YWJsZXNpemUJCT0gU0dfTVgsCisJLnNnX3RhYmxlc2l6ZQkJPSBTR19BTEwsCiAJLm1heF9zZWN0b3JzCQk9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUywKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gc2FzX2VoX2RldmljZV9yZXNldF9oYW5kbGVyLApAQCAtNzQsNiArNzcsNyBAQAogCS5zbGF2ZV9hbGxvYwkJPSBtdnNfc2xhdmVfYWxsb2MsCiAJLnRhcmdldF9kZXN0cm95CQk9IHNhc190YXJnZXRfZGVzdHJveSwKIAkuaW9jdGwJCQk9IHNhc19pb2N0bCwKKwkuc2hvc3RfYXR0cnMJCT0gbXZzdF9ob3N0X2F0dHJzLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYXNfZG9tYWluX2Z1bmN0aW9uX3RlbXBsYXRlIG12c190cmFuc3BvcnRfb3BzID0gewpAQCAtMTAwLDYgKzEwNCw3IEBACiAJc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5ID0gJnBoeS0+c2FzX3BoeTsKIAogCXBoeS0+bXZpID0gbXZpOworCXBoeS0+cG9ydCA9IE5VTEw7CiAJaW5pdF90aW1lcigmcGh5LT50aW1lcik7CiAJc2FzX3BoeS0+ZW5hYmxlZCA9IChwaHlfaWQgPCBtdmktPmNoaXAtPm5fcGh5KSA/IDEgOiAwOwogCXNhc19waHktPmNsYXNzID0gU0FTOwpAQCAtMTI4LDcgKzEzMyw3IEBACiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCiAJCXNsb3RfbnIgPSBNVlNfU09DX1NMT1RTOwogCWVsc2UKLQkJc2xvdF9uciA9IE1WU19TTE9UUzsKKwkJc2xvdF9uciA9IE1WU19DSElQX1NMT1RfU1o7CiAKIAlpZiAobXZpLT5kbWFfcG9vbCkKIAkJcGNpX3Bvb2xfZGVzdHJveShtdmktPmRtYV9wb29sKTsKQEAgLTE0OCwyNSArMTUzLDI2IEBACiAJCWRtYV9mcmVlX2NvaGVyZW50KG12aS0+ZGV2LAogCQkJCSAgc2l6ZW9mKCptdmktPnNsb3QpICogc2xvdF9uciwKIAkJCQkgIG12aS0+c2xvdCwgbXZpLT5zbG90X2RtYSk7Ci0jaWZuZGVmIERJU0FCTEVfSE9UUExVR19ETUFfRklYCisKIAlpZiAobXZpLT5idWxrX2J1ZmZlcikKIAkJZG1hX2ZyZWVfY29oZXJlbnQobXZpLT5kZXYsIFRSQVNIX0JVQ0tFVF9TSVpFLAogCQkJCSAgbXZpLT5idWxrX2J1ZmZlciwgbXZpLT5idWxrX2J1ZmZlcl9kbWEpOwotI2VuZGlmCisJaWYgKG12aS0+YnVsa19idWZmZXIxKQorCQlkbWFfZnJlZV9jb2hlcmVudChtdmktPmRldiwgVFJBU0hfQlVDS0VUX1NJWkUsCisJCQkJICBtdmktPmJ1bGtfYnVmZmVyMSwgbXZpLT5idWxrX2J1ZmZlcl9kbWExKTsKIAogCU1WU19DSElQX0RJU1AtPmNoaXBfaW91bm1hcChtdmkpOwogCWlmIChtdmktPnNob3N0KQogCQlzY3NpX2hvc3RfcHV0KG12aS0+c2hvc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobXdxLCAmbXZpLT53cV9saXN0LCBlbnRyeSkKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbXdxLT53b3JrX3EpOworCWtmcmVlKG12aS0+dGFncyk7CiAJa2ZyZWUobXZpKTsKIH0KIAotI2lmZGVmIE1WU19VU0VfVEFTS0xFVAotc3RydWN0IHRhc2tsZXRfc3RydWN0CW12X3Rhc2tsZXQ7CisjaWZkZWYgQ09ORklHX1NDU0lfTVZTQVNfVEFTS0xFVAogc3RhdGljIHZvaWQgbXZzX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBvcGFxdWUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgc3RhdDsKIAl1MTYgY29yZV9uciwgaSA9IDA7CiAKQEAgLTE3OSwzNSArMTg1LDQ5IEBACiAJaWYgKHVubGlrZWx5KCFtdmkpKQogCQlCVUdfT04oMSk7CiAKKwlzdGF0ID0gTVZTX0NISVBfRElTUC0+aXNyX3N0YXR1cyhtdmksIG12aS0+cGRldi0+aXJxKTsKKwlpZiAoIXN0YXQpCisJCWdvdG8gb3V0OworCiAJZm9yIChpID0gMDsgaSA8IGNvcmVfbnI7IGkrKykgewogCQltdmkgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5tdmlbaV07Ci0JCXN0YXQgPSBNVlNfQ0hJUF9ESVNQLT5pc3Jfc3RhdHVzKG12aSwgbXZpLT5pcnEpOwotCQlpZiAoc3RhdCkKLQkJCU1WU19DSElQX0RJU1AtPmlzcihtdmksIG12aS0+aXJxLCBzdGF0KTsKKwkJTVZTX0NISVBfRElTUC0+aXNyKG12aSwgbXZpLT5wZGV2LT5pcnEsIHN0YXQpOwogCX0KK291dDoKKwlNVlNfQ0hJUF9ESVNQLT5pbnRlcnJ1cHRfZW5hYmxlKG12aSk7CiAKIH0KICNlbmRpZgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbXZzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpvcGFxdWUpCiB7Ci0JdTMyIGNvcmVfbnIsIGkgPSAwOworCXUzMiBjb3JlX25yOwogCXUzMiBzdGF0OwogCXN0cnVjdCBtdnNfaW5mbyAqbXZpOwogCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzaGEgPSBvcGFxdWU7CisjaWZuZGVmIENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQKKwl1MzIgaTsKKyNlbmRpZgogCiAJY29yZV9uciA9ICgoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm5faG9zdDsKIAltdmkgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5tdmlbMF07CiAKIAlpZiAodW5saWtlbHkoIW12aSkpCiAJCXJldHVybiBJUlFfTk9ORTsKKyNpZmRlZiBDT05GSUdfU0NTSV9NVlNBU19UQVNLTEVUCisJTVZTX0NISVBfRElTUC0+aW50ZXJydXB0X2Rpc2FibGUobXZpKTsKKyNlbmRpZgogCiAJc3RhdCA9IE1WU19DSElQX0RJU1AtPmlzcl9zdGF0dXMobXZpLCBpcnEpOwotCWlmICghc3RhdCkKKwlpZiAoIXN0YXQpIHsKKwkjaWZkZWYgQ09ORklHX1NDU0lfTVZTQVNfVEFTS0xFVAorCQlNVlNfQ0hJUF9ESVNQLT5pbnRlcnJ1cHRfZW5hYmxlKG12aSk7CisJI2VuZGlmCiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKLSNpZmRlZiBNVlNfVVNFX1RBU0tMRVQKLQl0YXNrbGV0X3NjaGVkdWxlKCZtdl90YXNrbGV0KTsKKyNpZmRlZiBDT05GSUdfU0NTSV9NVlNBU19UQVNLTEVUCisJdGFza2xldF9zY2hlZHVsZSgmKChzdHJ1Y3QgbXZzX3Bydl9pbmZvICopc2hhLT5sbGRkX2hhKS0+bXZfdGFza2xldCk7CiAjZWxzZQogCWZvciAoaSA9IDA7IGkgPCBjb3JlX25yOyBpKyspIHsKIAkJbXZpID0gKChzdHJ1Y3QgbXZzX3Bydl9pbmZvICopc2hhLT5sbGRkX2hhKS0+bXZpW2ldOwpAQCAtMjI1LDcgKzI0NSw3IEBACiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCiAJCXNsb3RfbnIgPSBNVlNfU09DX1NMT1RTOwogCWVsc2UKLQkJc2xvdF9uciA9IE1WU19TTE9UUzsKKwkJc2xvdF9uciA9IE1WU19DSElQX1NMT1RfU1o7CiAKIAlzcGluX2xvY2tfaW5pdCgmbXZpLT5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgbXZpLT5jaGlwLT5uX3BoeTsgaSsrKSB7CkBAIC0yNzMsMTMgKzI5MywxOCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJbWVtc2V0KG12aS0+c2xvdCwgMCwgc2l6ZW9mKCptdmktPnNsb3QpICogc2xvdF9ucik7CiAKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKIAltdmktPmJ1bGtfYnVmZmVyID0gZG1hX2FsbG9jX2NvaGVyZW50KG12aS0+ZGV2LAogCQkJCSAgICAgICBUUkFTSF9CVUNLRVRfU0laRSwKIAkJCQkgICAgICAgJm12aS0+YnVsa19idWZmZXJfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW12aS0+YnVsa19idWZmZXIpCiAJCWdvdG8gZXJyX291dDsKLSNlbmRpZgorCisJbXZpLT5idWxrX2J1ZmZlcjEgPSBkbWFfYWxsb2NfY29oZXJlbnQobXZpLT5kZXYsCisJCQkJICAgICAgIFRSQVNIX0JVQ0tFVF9TSVpFLAorCQkJCSAgICAgICAmbXZpLT5idWxrX2J1ZmZlcl9kbWExLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW12aS0+YnVsa19idWZmZXIxKQorCQlnb3RvIGVycl9vdXQ7CisKIAlzcHJpbnRmKHBvb2xfbmFtZSwgIiVzJWQiLCAibXZzX2RtYV9wb29sIiwgbXZpLT5pZCk7CiAJbXZpLT5kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZShwb29sX25hbWUsIG12aS0+cGRldiwgTVZTX1NMT1RfQlVGX1NaLCAxNiwgMCk7CiAJaWYgKCFtdmktPmRtYV9wb29sKSB7CkBAIC0zNTQsMTEgKzM3OSwxMiBAQAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCiAJCQkJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGludCBpZCkKIHsKLQlzdHJ1Y3QgbXZzX2luZm8gKm12aTsKKwlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IE5VTEw7CiAJc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNoYSA9IFNIT1NUX1RPX1NBU19IQShzaG9zdCk7CiAKLQltdmkgPSBremFsbG9jKHNpemVvZigqbXZpKSArIE1WU19TTE9UUyAqIHNpemVvZihzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyksCi0JCQlHRlBfS0VSTkVMKTsKKwltdmkgPSBremFsbG9jKHNpemVvZigqbXZpKSArCisJCSgxTCA8PCBtdnNfY2hpcHNbZW50LT5kcml2ZXJfZGF0YV0uc2xvdF93aWR0aCkgKgorCQlzaXplb2Yoc3RydWN0IG12c19zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW12aSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTM2Nyw3ICszOTMsNiBAQAogCW12aS0+Y2hpcF9pZCA9IGVudC0+ZHJpdmVyX2RhdGE7CiAJbXZpLT5jaGlwID0gJm12c19jaGlwc1ttdmktPmNoaXBfaWRdOwogCUlOSVRfTElTVF9IRUFEKCZtdmktPndxX2xpc3QpOwotCW12aS0+aXJxID0gcGRldi0+aXJxOwogCiAJKChzdHJ1Y3QgbXZzX3Bydl9pbmZvICopc2hhLT5sbGRkX2hhKS0+bXZpW2lkXSA9IG12aTsKIAkoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5uX3BoeSA9IG12aS0+Y2hpcC0+bl9waHk7CkBAIC0zNzUsOSArNDAwLDEwIEBACiAJbXZpLT5pZCA9IGlkOwogCW12aS0+c2FzID0gc2hhOwogCW12aS0+c2hvc3QgPSBzaG9zdDsKLSNpZmRlZiBNVlNfVVNFX1RBU0tMRVQKLQl0YXNrbGV0X2luaXQoJm12X3Rhc2tsZXQsIG12c190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzaGEpOwotI2VuZGlmCisKKwltdmktPnRhZ3MgPSBremFsbG9jKE1WU19DSElQX1NMT1RfU1o+PjMsIEdGUF9LRVJORUwpOworCWlmICghbXZpLT50YWdzKQorCQlnb3RvIGVycl9vdXQ7CiAKIAlpZiAoTVZTX0NISVBfRElTUC0+Y2hpcF9pb3JlbWFwKG12aSkpCiAJCWdvdG8gZXJyX291dDsKQEAgLTM4OCw3ICs0MTQsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBtb3ZlIHRvIFBDSSBsYXllciBvciBsaWJhdGEgY29yZT8gKi8KIHN0YXRpYyBpbnQgcGNpX2dvXzY0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWludCByYzsKQEAgLTQ1MCw3ICs0NzUsNyBAQAogCSgoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm5faG9zdCA9IGNvcmVfbnI7CiAKIAlzaG9zdC0+dHJhbnNwb3J0dCA9IG12c19zdHQ7Ci0Jc2hvc3QtPm1heF9pZCA9IDEyODsKKwlzaG9zdC0+bWF4X2lkID0gTVZTX01BWF9ERVZJQ0VTOwogCXNob3N0LT5tYXhfbHVuID0gfjA7CiAJc2hvc3QtPm1heF9jaGFubmVsID0gMTsKIAlzaG9zdC0+bWF4X2NtZF9sZW4gPSAxNjsKQEAgLTQ5MywxMSArNTE4LDEyIEBACiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCiAJCWNhbl9xdWV1ZSA9IE1WU19TT0NfQ0FOX1FVRVVFOwogCWVsc2UKLQkJY2FuX3F1ZXVlID0gTVZTX0NBTl9RVUVVRTsKKwkJY2FuX3F1ZXVlID0gTVZTX0NISVBfU0xPVF9TWjsKIAogCXNoYS0+bGxkZF9xdWV1ZV9zaXplID0gY2FuX3F1ZXVlOworCXNob3N0LT5zZ190YWJsZXNpemUgPSBtaW5fdCh1MTYsIFNHX0FMTCwgTVZTX01BWF9TRyk7CiAJc2hvc3QtPmNhbl9xdWV1ZSA9IGNhbl9xdWV1ZTsKLQltdmktPnNob3N0LT5jbWRfcGVyX2x1biA9IE1WU19TTE9UUy9zaGEtPm51bV9waHlzOworCW12aS0+c2hvc3QtPmNtZF9wZXJfbHVuID0gTVZTX1FVRVVFX1NJWkU7CiAJc2hhLT5jb3JlLnNob3N0ID0gbXZpLT5zaG9zdDsKIH0KIApAQCAtNTE4LDYgKzU0NCw3IEBACiB7CiAJdW5zaWduZWQgaW50IHJjLCBuaG9zdCA9IDA7CiAJc3RydWN0IG12c19pbmZvICptdmk7CisJc3RydWN0IG12c19wcnZfaW5mbyAqbXBpOwogCWlycV9oYW5kbGVyX3QgaXJxX2hhbmRsZXIgPSBtdnNfaW50ZXJydXB0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgbXZzX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2OSw2ICs1OTYsOSBAQAogCQkJZ290byBlcnJfb3V0X3JlZ2lvbnM7CiAJCX0KIAorCQltZW1zZXQoJm12aS0+aGJhX2luZm9fcGFyYW0sIDB4RkYsCisJCQlzaXplb2Yoc3RydWN0IGhiYV9pbmZvX3BhZ2UpKTsKKwogCQltdnNfaW5pdF9zYXNfYWRkKG12aSk7CiAKIAkJbXZpLT5pbnN0YW5jZSA9IG5ob3N0OwpAQCAtNTc5LDggKzYwOSw5IEBACiAJCX0KIAkJbmhvc3QrKzsKIAl9IHdoaWxlIChuaG9zdCA8IGNoaXAtPm5faG9zdCk7Ci0jaWZkZWYgTVZTX1VTRV9UQVNLTEVUCi0JdGFza2xldF9pbml0KCZtdl90YXNrbGV0LCBtdnNfdGFza2xldCwKKwltcGkgPSAoc3RydWN0IG12c19wcnZfaW5mbyAqKShTSE9TVF9UT19TQVNfSEEoc2hvc3QpLT5sbGRkX2hhKTsKKyNpZmRlZiBDT05GSUdfU0NTSV9NVlNBU19UQVNLTEVUCisJdGFza2xldF9pbml0KCYobXBpLT5tdl90YXNrbGV0KSwgbXZzX3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpU0hPU1RfVE9fU0FTX0hBKHNob3N0KSk7CiAjZW5kaWYKIApAQCAtNjI1LDggKzY1Niw4IEBACiAJY29yZV9uciA9ICgoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm5faG9zdDsKIAltdmkgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5tdmlbMF07CiAKLSNpZmRlZiBNVlNfVVNFX1RBU0tMRVQKLQl0YXNrbGV0X2tpbGwoJm12X3Rhc2tsZXQpOworI2lmZGVmIENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQKKwl0YXNrbGV0X2tpbGwoJigoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm12X3Rhc2tsZXQpOwogI2VuZGlmCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC02MzUsNyArNjY2LDcgQEAKIAlzY3NpX3JlbW92ZV9ob3N0KG12aS0+c2hvc3QpOwogCiAJTVZTX0NISVBfRElTUC0+aW50ZXJydXB0X2Rpc2FibGUobXZpKTsKLQlmcmVlX2lycShtdmktPmlycSwgc2hhKTsKKwlmcmVlX2lycShtdmktPnBkZXYtPmlycSwgc2hhKTsKIAlmb3IgKGkgPSAwOyBpIDwgY29yZV9ucjsgaSsrKSB7CiAJCW12aSA9ICgoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm12aVtpXTsKIAkJbXZzX2ZyZWUobXZpKTsKQEAgLTcwMyw2ICs3MzQsNzAgQEAKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG12c19wY2lfcmVtb3ZlKSwKIH07CiAKK3N0YXRpYyBzc2l6ZV90CittdnNfc2hvd19kcml2ZXJfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgIGNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBQQUdFX1NJWkUsICIlc1xuIiwgRFJWX1ZFUlNJT04pOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZHJpdmVyX3ZlcnNpb24sCisJCQkgU19JUlVHTywKKwkJCSBtdnNfc2hvd19kcml2ZXJfdmVyc2lvbiwKKwkJCSBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK212c19zdG9yZV9pbnRlcnJ1cHRfY29hbGVzY2luZyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWludCB2YWwgPSAwOworCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gTlVMTDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzaGEgPSBTSE9TVF9UT19TQVNfSEEoc2hvc3QpOworCXU4IGksIGNvcmVfbnI7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gc2l6ZTsKKworCWlmIChzc2NhbmYoYnVmZmVyLCAiJWQiLCAmdmFsKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPj0gMHgxMDAwMCkgeworCQltdl9kcHJpbnRrKCJpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lciAlZCB1cyBpcyIKKwkJCSJ0b28gbG9uZ1xuIiwgdmFsKTsKKwkJcmV0dXJuIHN0cmxlbihidWZmZXIpOworCX0KKworCWludGVycnVwdF9jb2FsZXNjaW5nID0gdmFsOworCisJY29yZV9uciA9ICgoc3RydWN0IG12c19wcnZfaW5mbyAqKXNoYS0+bGxkZF9oYSktPm5faG9zdDsKKwltdmkgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5tdmlbMF07CisKKwlpZiAodW5saWtlbHkoIW12aSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNvcmVfbnI7IGkrKykgeworCQltdmkgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5tdmlbaV07CisJCWlmIChNVlNfQ0hJUF9ESVNQLT50dW5lX2ludGVycnVwdCkKKwkJCU1WU19DSElQX0RJU1AtPnR1bmVfaW50ZXJydXB0KG12aSwKKwkJCQlpbnRlcnJ1cHRfY29hbGVzY2luZyk7CisJfQorCW12X2RwcmludGsoInNldCBpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lIHRvICVkIHVzXG4iLAorCQlpbnRlcnJ1cHRfY29hbGVzY2luZyk7CisJcmV0dXJuIHN0cmxlbihidWZmZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBtdnNfc2hvd19pbnRlcnJ1cHRfY29hbGVzY2luZyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBQQUdFX1NJWkUsICIlZFxuIiwgaW50ZXJydXB0X2NvYWxlc2NpbmcpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoaW50ZXJydXB0X2NvYWxlc2NpbmcsCisJCQkgU19JUlVHT3xTX0lXVVNSLAorCQkJIG12c19zaG93X2ludGVycnVwdF9jb2FsZXNjaW5nLAorCQkJIG12c19zdG9yZV9pbnRlcnJ1cHRfY29hbGVzY2luZyk7CisKIC8qIHRhc2sgaGFuZGxlciAqLwogc3RydWN0IHRhc2tfc3RydWN0ICptdnNfdGg7CiBzdGF0aWMgaW50IF9faW5pdCBtdnNfaW5pdCh2b2lkKQpAQCAtNzM5LDYgKzgzNCwxMiBAQAogCWttZW1fY2FjaGVfZGVzdHJveShtdnNfdGFza19saXN0X2NhY2hlKTsKIH0KIAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm12c3RfaG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9kcml2ZXJfdmVyc2lvbiwKKwkmZGV2X2F0dHJfaW50ZXJydXB0X2NvYWxlc2NpbmcsCisJTlVMTCwKK307CisKIG1vZHVsZV9pbml0KG12c19pbml0KTsKIG1vZHVsZV9leGl0KG12c19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCmluZGV4IDBlZjI3NDIuLjQ5NThmZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogdm9pZCBtdnNfdGFnX2NsZWFyKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnKQogewotCXZvaWQgKmJpdG1hcCA9ICZtdmktPnRhZ3M7CisJdm9pZCAqYml0bWFwID0gbXZpLT50YWdzOwogCWNsZWFyX2JpdCh0YWcsIGJpdG1hcCk7CiB9CiAKQEAgLTQ5LDE0ICs0OSwxNCBAQAogCiB2b2lkIG12c190YWdfc2V0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1bnNpZ25lZCBpbnQgdGFnKQogewotCXZvaWQgKmJpdG1hcCA9ICZtdmktPnRhZ3M7CisJdm9pZCAqYml0bWFwID0gbXZpLT50YWdzOwogCXNldF9iaXQodGFnLCBiaXRtYXApOwogfQogCiBpbmxpbmUgaW50IG12c190YWdfYWxsb2Moc3RydWN0IG12c19pbmZvICptdmksIHUzMiAqdGFnX291dCkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXgsIHRhZzsKLQl2b2lkICpiaXRtYXAgPSAmbXZpLT50YWdzOworCXZvaWQgKmJpdG1hcCA9IG12aS0+dGFnczsKIAogCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChiaXRtYXAsIG12aS0+dGFnc19udW0pOwogCXRhZyA9IGluZGV4OwpAQCAtNzQsMTI2ICs3NCw2IEBACiAJCW12c190YWdfY2xlYXIobXZpLCBpKTsKIH0KIAotdm9pZCBtdnNfaGV4ZHVtcCh1MzIgc2l6ZSwgdTggKmRhdGEsIHUzMiBiYXNlYWRkcikKLXsKLQl1MzIgaTsKLQl1MzIgcnVuOwotCXUzMiBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSAwOwotCXdoaWxlIChzaXplKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIiUwOFggOiAiLCBiYXNlYWRkciArIG9mZnNldCk7Ci0JCWlmIChzaXplID49IDE2KQotCQkJcnVuID0gMTY7Ci0JCWVsc2UKLQkJCXJ1biA9IHNpemU7Ci0JCXNpemUgLT0gcnVuOwotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQkJaWYgKGkgPCBydW4pCi0JCQkJcHJpbnRrKEtFUk5fREVCVUciJTAyWCAiLCAodTMyKWRhdGFbaV0pOwotCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHIiAgICIpOwotCQl9Ci0JCXByaW50ayhLRVJOX0RFQlVHIjogIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBydW47IGkrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHIiVjIiwKLQkJCQlpc2FsbnVtKGRhdGFbaV0pID8gZGF0YVtpXSA6ICcuJyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHIlxuIik7Ci0JCWRhdGEgPSAmZGF0YVsxNl07Ci0JCW9mZnNldCArPSBydW47Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHIlxuIik7Ci19Ci0KLSNpZiAoX01WX0RVTVAgPiAxKQotc3RhdGljIHZvaWQgbXZzX2hiYV9zYl9kdW1wKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnLAotCQkJCSAgIGVudW0gc2FzX3Byb3RvY29sIHByb3RvKQotewotCXUzMiBvZmZzZXQ7Ci0Jc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9bdGFnXTsKLQotCW9mZnNldCA9IHNsb3QtPmNtZF9zaXplICsgTVZTX09BRl9TWiArCi0JICAgIE1WU19DSElQX0RJU1AtPnByZF9zaXplKCkgKiBzbG90LT5uX2VsZW07Ci0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBtdmktPmRldiwgIistLS0tPlN0YXR1cyBidWZmZXJbJWRdIDpcbiIsCi0JCQl0YWcpOwotCW12c19oZXhkdW1wKDMyLCAodTggKikgc2xvdC0+cmVzcG9uc2UsCi0JCSAgICAodTMyKSBzbG90LT5idWZfZG1hICsgb2Zmc2V0KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBtdnNfaGJhX21lbW9yeV9kdW1wKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgdGFnLAotCQkJCWVudW0gc2FzX3Byb3RvY29sIHByb3RvKQotewotI2lmIChfTVZfRFVNUCA+IDEpCi0JdTMyIHN6LCB3X3B0cjsKLQl1NjQgYWRkcjsKLQlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdCA9ICZtdmktPnNsb3RfaW5mb1t0YWddOwotCi0JLypEZWxpdmVyeSBRdWV1ZSAqLwotCXN6ID0gTVZTX0NISVBfU0xPVF9TWjsKLQl3X3B0ciA9IHNsb3QtPnR4OwotCWFkZHIgPSBtdmktPnR4X2RtYTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG12aS0+ZGV2LAotCQkiRGVsaXZlcnkgUXVldWUgU2l6ZT0lMDRkICwgV1JUX1BUUj0lMDRYXG4iLCBzeiwgd19wdHIpOwotCWRldl9wcmludGsoS0VSTl9ERUJVRywgbXZpLT5kZXYsCi0JCSJEZWxpdmVyeSBRdWV1ZSBCYXNlIEFkZHJlc3M9MHglbGxYIChQQSkiCi0JCSIodHhfZG1hPTB4JWxsWCksIEVudHJ5PSUwNGRcbiIsCi0JCWFkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpbXZpLT50eF9kbWEsIHdfcHRyKTsKLQltdnNfaGV4ZHVtcChzaXplb2YodTMyKSwgKHU4ICopKCZtdmktPnR4W212aS0+dHhfcHJvZF0pLAotCQkJKHUzMikgbXZpLT50eF9kbWEgKyBzaXplb2YodTMyKSAqIHdfcHRyKTsKLQkvKkNvbW1hbmQgTGlzdCAqLwotCWFkZHIgPSBtdmktPnNsb3RfZG1hOwotCWRldl9wcmludGsoS0VSTl9ERUJVRywgbXZpLT5kZXYsCi0JCSJDb21tYW5kIExpc3QgQmFzZSBBZGRyZXNzPTB4JWxsWCAoUEEpIgotCQkiKHNsb3RfZG1hPTB4JWxsWCksIEhlYWRlcj0lMDNkXG4iLAotCQlhZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKXNsb3QtPmJ1Zl9kbWEsIHRhZyk7Ci0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBtdmktPmRldiwgIkNvbW1hbmQgSGVhZGVyWyUwM2RdOlxuIiwgdGFnKTsKLQkvKm12c19jbWRfaGRyICovCi0JbXZzX2hleGR1bXAoc2l6ZW9mKHN0cnVjdCBtdnNfY21kX2hkciksICh1OCAqKSgmbXZpLT5zbG90W3RhZ10pLAotCQkodTMyKSBtdmktPnNsb3RfZG1hICsgdGFnICogc2l6ZW9mKHN0cnVjdCBtdnNfY21kX2hkcikpOwotCS8qMS5jb21tYW5kIHRhYmxlIGFyZWEgKi8KLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG12aS0+ZGV2LCAiKy0tLS0+Q29tbWFuZCBUYWJsZSA6XG4iKTsKLQltdnNfaGV4ZHVtcChzbG90LT5jbWRfc2l6ZSwgKHU4ICopIHNsb3QtPmJ1ZiwgKHUzMikgc2xvdC0+YnVmX2RtYSk7Ci0JLyoyLm9wZW4gYWRkcmVzcyBmcmFtZSBhcmVhICovCi0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBtdmktPmRldiwgIistLS0tPk9wZW4gQWRkcmVzcyBGcmFtZSA6XG4iKTsKLQltdnNfaGV4ZHVtcChNVlNfT0FGX1NaLCAodTggKikgc2xvdC0+YnVmICsgc2xvdC0+Y21kX3NpemUsCi0JCQkJKHUzMikgc2xvdC0+YnVmX2RtYSArIHNsb3QtPmNtZF9zaXplKTsKLQkvKjMuc3RhdHVzIGJ1ZmZlciAqLwotCW12c19oYmFfc2JfZHVtcChtdmksIHRhZywgcHJvdG8pOwotCS8qNC5QUkQgdGFibGUgKi8KLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG12aS0+ZGV2LCAiKy0tLS0+UFJEIHRhYmxlIDpcbiIpOwotCW12c19oZXhkdW1wKE1WU19DSElQX0RJU1AtPnByZF9zaXplKCkgKiBzbG90LT5uX2VsZW0sCi0JCSh1OCAqKSBzbG90LT5idWYgKyBzbG90LT5jbWRfc2l6ZSArIE1WU19PQUZfU1osCi0JCSh1MzIpIHNsb3QtPmJ1Zl9kbWEgKyBzbG90LT5jbWRfc2l6ZSArIE1WU19PQUZfU1opOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIG12c19oYmFfY3FfZHVtcChzdHJ1Y3QgbXZzX2luZm8gKm12aSkKLXsKLSNpZiAoX01WX0RVTVAgPiAyKQotCXU2NCBhZGRyOwotCXZvaWQgX19pb21lbSAqcmVncyA9IG12aS0+cmVnczsKLQl1MzIgZW50cnkgPSBtdmktPnJ4X2NvbnMgKyAxOwotCXUzMiByeF9kZXNjID0gbGUzMl90b19jcHUobXZpLT5yeFtlbnRyeV0pOwotCi0JLypDb21wbGV0aW9uIFF1ZXVlICovCi0JYWRkciA9IG1yMzIoUlhfSEkpIDw8IDE2IDw8IDE2IHwgbXIzMihSWF9MTyk7Ci0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBtdmktPmRldiwgIkNvbXBsZXRpb24gVGFzayA9IDB4JXBcbiIsCi0JCSAgIG12aS0+c2xvdF9pbmZvW3J4X2Rlc2MgJiBSWFFfU0xPVF9NQVNLXS50YXNrKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIG12aS0+ZGV2LAotCQkiQ29tcGxldGlvbiBMaXN0IEJhc2UgQWRkcmVzcz0weCVsbFggKFBBKSwgIgotCQkiQ1FfRW50cnk9JTA0ZCwgQ1FfV1A9MHglMDhYXG4iLAotCQlhZGRyLCBlbnRyeSAtIDEsIG12aS0+cnhbMF0pOwotCW12c19oZXhkdW1wKHNpemVvZih1MzIpLCAodTggKikoJnJ4X2Rlc2MpLAotCQkgICAgbXZpLT5yeF9kbWEgKyBzaXplb2YodTMyKSAqIGVudHJ5KTsKLSNlbmRpZgotfQotCi12b2lkIG12c19nZXRfc2FzX2FkZHIodm9pZCAqYnVmLCB1MzIgYnVmbGVuKQotewotCS8qbWVtY3B5KGJ1ZiwgIlx4NTBceDA1XHgwNFx4MzBceDExXHhhYlx4NjRceDQwIiwgOCk7Ki8KLX0KLQogc3RydWN0IG12c19pbmZvICptdnNfZmluZF9kZXZfbXZpKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBpID0gMCwgaiA9IDAsIGhpID0gMDsKQEAgLTIyMiw3ICsxMDIsNiBAQAogCiB9CiAKLS8qIEZJWE1FICovCiBpbnQgbXZzX2ZpbmRfZGV2X3BoeW5vKHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsIGludCAqcGh5bm8pCiB7CiAJdW5zaWduZWQgbG9uZyBpID0gMCwgaiA9IDAsIG4gPSAwLCBudW0gPSAwOwpAQCAtMjUzLDYgKzEzMiwyMCBAQAogCXJldHVybiBudW07CiB9CiAKK3N0cnVjdCBtdnNfZGV2aWNlICptdnNfZmluZF9kZXZfYnlfcmVnX3NldChzdHJ1Y3QgbXZzX2luZm8gKm12aSwKKwkJCQkJCXU4IHJlZ19zZXQpCit7CisJdTMyIGRldl9ubzsKKwlmb3IgKGRldl9ubyA9IDA7IGRldl9ubyA8IE1WU19NQVhfREVWSUNFUzsgZGV2X25vKyspIHsKKwkJaWYgKG12aS0+ZGV2aWNlc1tkZXZfbm9dLnRhc2tmaWxlc2V0ID09IE1WU19JRF9OT1RfTUFQUEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKG12aS0+ZGV2aWNlc1tkZXZfbm9dLnRhc2tmaWxlc2V0ID09IHJlZ19zZXQpCisJCQlyZXR1cm4gJm12aS0+ZGV2aWNlc1tkZXZfbm9dOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG12c19mcmVlX3JlZ19zZXQoc3RydWN0IG12c19pbmZvICptdmksCiAJCQkJc3RydWN0IG12c19kZXZpY2UgKmRldikKIHsKQEAgLTI4Myw3ICsxNzYsNiBAQAogCX0KIH0KIAotLyogRklYTUU6IGxvY2tpbmc/ICovCiBpbnQgbXZzX3BoeV9jb250cm9sKHN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSwgZW51bSBwaHlfZnVuYyBmdW5jLAogCQkJdm9pZCAqZnVuY2RhdGEpCiB7CkBAIC0zMDksMTIgKzIwMSwxMiBAQAogCQl0bXAgPSBNVlNfQ0hJUF9ESVNQLT5yZWFkX3BoeV9jdGwobXZpLCBwaHlfaWQpOwogCQlpZiAodG1wICYgUEhZX1JTVF9IQVJEKQogCQkJYnJlYWs7Ci0JCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9pZCwgMSk7CisJCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9pZCwgTVZTX0hBUkRfUkVTRVQpOwogCQlicmVhazsKIAogCWNhc2UgUEhZX0ZVTkNfTElOS19SRVNFVDoKIAkJTVZTX0NISVBfRElTUC0+cGh5X2VuYWJsZShtdmksIHBoeV9pZCk7Ci0JCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9pZCwgMCk7CisJCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9pZCwgTVZTX1NPRlRfUkVTRVQpOwogCQlicmVhazsKIAogCWNhc2UgUEhZX0ZVTkNfRElTQUJMRToKQEAgLTQwNiwxNCArMjk4LDEwIEBACiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWlmIChkZXZfaXNfc2F0YShkZXYpKSB7Ci0JCS8qIG1heSBzZXQgUElPIG1vZGUgKi8KLQkjaWYgTVZfRElTQUJMRV9OQ1EKLQkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGRldi0+c2F0YV9kZXYuYXA7Ci0JCXN0cnVjdCBhdGFfZGV2aWNlICphZGV2ID0gYXAtPmxpbmsuZGV2aWNlOwotCQlhZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfTkNRX09GRjsKLQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwgTVNHX1NJTVBMRV9UQUcsIDEpOwotCSNlbmRpZgorCWlmICghZGV2X2lzX3NhdGEoZGV2KSkgeworCQlzYXNfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsCisJCQlNVlNfUVVFVUVfU0laRSwKKwkJCVNDU0lfUURFUFRIX0RFRkFVTFQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQyNCw2ICszMTIsNyBAQAogCXVuc2lnbmVkIHNob3J0IGNvcmVfbnI7CiAJc3RydWN0IG12c19pbmZvICptdmk7CiAJc3RydWN0IHNhc19oYV9zdHJ1Y3QgKnNoYSA9IFNIT1NUX1RPX1NBU19IQShzaG9zdCk7CisJc3RydWN0IG12c19wcnZfaW5mbyAqbXZzX3BydiA9IHNoYS0+bGxkZF9oYTsKIAogCWNvcmVfbnIgPSAoKHN0cnVjdCBtdnNfcHJ2X2luZm8gKilzaGEtPmxsZGRfaGEpLT5uX2hvc3Q7CiAKQEAgLTQzMiwxNSArMzIxLDE3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBtdmktPmNoaXAtPm5fcGh5OyArK2kpCiAJCQltdnNfYnl0ZXNfZG1hZWQobXZpLCBpKTsKIAl9CisJbXZzX3Bydi0+c2Nhbl9maW5pc2hlZCA9IDE7CiB9CiAKIGludCBtdnNfc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdW5zaWduZWQgbG9uZyB0aW1lKQogewotCS8qIGdpdmUgdGhlIHBoeSBlbmFibGluZyBpbnRlcnJ1cHQgZXZlbnQgdGltZSB0byBjb21lIGluICgxcwotCSAqIGlzIGVtcGlyaWNhbGx5IGFib3V0IGFsbCBpdCB0YWtlcykgKi8KLQlpZiAodGltZSA8IEhaKQorCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzaGEgPSBTSE9TVF9UT19TQVNfSEEoc2hvc3QpOworCXN0cnVjdCBtdnNfcHJ2X2luZm8gKm12c19wcnYgPSBzaGEtPmxsZGRfaGE7CisKKwlpZiAobXZzX3Bydi0+c2Nhbl9maW5pc2hlZCA9PSAwKQogCQlyZXR1cm4gMDsKLQkvKiBXYWl0IGZvciBkaXNjb3ZlcnkgdG8gZmluaXNoICovCisKIAlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOwogCXJldHVybiAxOwogfQpAQCAtNDYxLDEwICszNTIsNyBAQAogCXZvaWQgKmJ1Zl9wcmQ7CiAJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9bdGFnXTsKIAl1MzIgZmxhZ3MgPSAodGVpLT5uX2VsZW0gPDwgTUNIX1BSRF9MRU5fU0hJRlQpOwotI2lmIF9NVl9EVU1QCi0JdTggKmJ1Zl9jbWQ7Ci0Jdm9pZCAqZnJvbTsKLSNlbmRpZgorCiAJLyoKIAkgKiBETUEtbWFwIFNNUCByZXF1ZXN0LCByZXNwb25zZSBidWZmZXJzCiAJICovCkBAIC00OTYsMTUgKzM4NCw3IEBACiAJYnVmX3RtcCA9IHNsb3QtPmJ1ZjsKIAlidWZfdG1wX2RtYSA9IHNsb3QtPmJ1Zl9kbWE7CiAKLSNpZiBfTVZfRFVNUAotCWJ1Zl9jbWQgPSBidWZfdG1wOwotCWhkci0+Y21kX3RibCA9IGNwdV90b19sZTY0KGJ1Zl90bXBfZG1hKTsKLQlidWZfdG1wICs9IHJlcV9sZW47Ci0JYnVmX3RtcF9kbWEgKz0gcmVxX2xlbjsKLQlzbG90LT5jbWRfc2l6ZSA9IHJlcV9sZW47Ci0jZWxzZQogCWhkci0+Y21kX3RibCA9IGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHNnX3JlcSkpOwotI2VuZGlmCiAKIAkvKiByZWdpb24gMjogb3BlbiBhZGRyZXNzIGZyYW1lIGFyZWEgKE1WU19PQUZfU1ogYnl0ZXMpICoqKioqKioqKiAqLwogCWJ1Zl9vYWYgPSBidWZfdG1wOwpAQCAtNTUzLDEyICs0MzMsNiBAQAogCS8qIGZpbGwgaW4gUFJEIChzY2F0dGVyL2dhdGhlcikgdGFibGUsIGlmIGFueSAqLwogCU1WU19DSElQX0RJU1AtPm1ha2VfcHJkKHRhc2stPnNjYXR0ZXIsIHRlaS0+bl9lbGVtLCBidWZfcHJkKTsKIAotI2lmIF9NVl9EVU1QCi0JLyogY29weSBjbWQgdGFibGUgKi8KLQlmcm9tID0ga21hcF9hdG9taWMoc2dfcGFnZShzZ19yZXEpLCBLTV9JUlEwKTsKLQltZW1jcHkoYnVmX2NtZCwgZnJvbSArIHNnX3JlcS0+b2Zmc2V0LCByZXFfbGVuKTsKLQlrdW5tYXBfYXRvbWljKGZyb20sIEtNX0lSUTApOwotI2VuZGlmCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfMjoKQEAgLTYxNiwxNCArNDkwLDExIEBACiAJCShtdmlfZGV2LT50YXNrZmlsZXNldCA8PCBUWFFfU1JTX1NISUZUKTsKIAltdmktPnR4W212aS0+dHhfcHJvZF0gPSBjcHVfdG9fbGUzMihkZWxfcSk7CiAKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKIAlpZiAodGFzay0+ZGF0YV9kaXIgPT0gRE1BX0ZST01fREVWSUNFKQogCQlmbGFncyA9IChNVlNfQ0hJUF9ESVNQLT5wcmRfY291bnQoKSA8PCBNQ0hfUFJEX0xFTl9TSElGVCk7CiAJZWxzZQogCQlmbGFncyA9ICh0ZWktPm5fZWxlbSA8PCBNQ0hfUFJEX0xFTl9TSElGVCk7Ci0jZWxzZQotCWZsYWdzID0gKHRlaS0+bl9lbGVtIDw8IE1DSF9QUkRfTEVOX1NISUZUKTsKLSNlbmRpZgorCiAJaWYgKHRhc2stPmF0YV90YXNrLnVzZV9uY3EpCiAJCWZsYWdzIHw9IE1DSF9GUERNQTsKIAlpZiAoZGV2LT5zYXRhX2Rldi5jb21tYW5kX3NldCA9PSBBVEFQSV9DT01NQU5EX1NFVCkgewpAQCAtNjMxLDExICs1MDIsOCBAQAogCQkJZmxhZ3MgfD0gTUNIX0FUQVBJOwogCX0KIAotCS8qIEZJWE1FOiBmaWxsIGluIHBvcnQgbXVsdGlwbGllciBudW1iZXIgKi8KLQogCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAKLQkvKiBGSVhNRTogdGhlIGxvdyBvcmRlciBvcmRlciA1IGJpdHMgZm9yIHRoZSBUQUcgaWYgZW5hYmxlIE5DUSAqLwogCWlmICh0YXNrLT5hdGFfdGFzay51c2VfbmNxICYmIG12c19nZXRfbmNxX3RhZyh0YXNrLCAmaGRyX3RhZykpCiAJCXRhc2stPmF0YV90YXNrLmZpcy5zZWN0b3JfY291bnQgfD0gKHU4KSAoaGRyX3RhZyA8PCAzKTsKIAllbHNlCkBAIC02NTcsOSArNTI1LDYgQEAKIAogCWJ1Zl90bXAgKz0gTVZTX0FUQV9DTURfU1o7CiAJYnVmX3RtcF9kbWEgKz0gTVZTX0FUQV9DTURfU1o7Ci0jaWYgX01WX0RVTVAKLQlzbG90LT5jbWRfc2l6ZSA9IE1WU19BVEFfQ01EX1NaOwotI2VuZGlmCiAKIAkvKiByZWdpb24gMjogb3BlbiBhZGRyZXNzIGZyYW1lIGFyZWEgKE1WU19PQUZfU1ogYnl0ZXMpICoqKioqKioqKiAqLwogCS8qIHVzZWQgZm9yIFNUUC4gIHVudXNlZCBmb3IgU0FUQT8gKi8KQEAgLTY4Miw5ICs1NDcsNiBAQAogCWJ1Zl90bXBfZG1hICs9IGk7CiAKIAkvKiByZWdpb24gNDogc3RhdHVzIGJ1ZmZlciAobGFyZ2VyIHRoZSBQUkQsIHNtYWxsZXIgdGhpcyBidWYpICoqKioqKiAqLwotCS8qIEZJWE1FOiBwcm9iYWJseSB1bnVzZWQsIGZvciBTQVRBLiAga2VwdCBoZXJlIGp1c3QgaW4gY2FzZQotCSAqIHdlIGdldCBhIFNUUC9TQVRBIGVycm9yIGluZm9ybWF0aW9uIHJlY29yZAotCSAqLwogCXNsb3QtPnJlc3BvbnNlID0gYnVmX3RtcDsKIAloZHItPnN0YXR1c19idWYgPSBjcHVfdG9fbGU2NChidWZfdG1wX2RtYSk7CiAJaWYgKG12aS0+ZmxhZ3MgJiBNVkZfRkxBR19TT0MpCkBAIC03MTUsMTEgKzU3NywxMSBAQAogCiAJLyogZmlsbCBpbiBQUkQgKHNjYXR0ZXIvZ2F0aGVyKSB0YWJsZSwgaWYgYW55ICovCiAJTVZTX0NISVBfRElTUC0+bWFrZV9wcmQodGFzay0+c2NhdHRlciwgdGVpLT5uX2VsZW0sIGJ1Zl9wcmQpOwotI2lmbmRlZiBESVNBQkxFX0hPVFBMVUdfRE1BX0ZJWAorCiAJaWYgKHRhc2stPmRhdGFfZGlyID09IERNQV9GUk9NX0RFVklDRSkKLQkJTVZTX0NISVBfRElTUC0+ZG1hX2ZpeChtdmktPmJ1bGtfYnVmZmVyX2RtYSwKKwkJTVZTX0NISVBfRElTUC0+ZG1hX2ZpeChtdmksIHNhc19wb3J0LT5waHlfbWFzaywKIAkJCQlUUkFTSF9CVUNLRVRfU0laRSwgdGVpLT5uX2VsZW0sIGJ1Zl9wcmQpOwotI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzYxLDYgKzYyMyw5IEBACiAJfQogCWlmIChpc190bWYpCiAJCWZsYWdzIHw9IChNQ0hfU1NQX0ZSX1RBU0sgPDwgTUNIX1NTUF9GUl9UWVBFX1NISUZUKTsKKwllbHNlCisJCWZsYWdzIHw9IChNQ0hfU1NQX0ZSX0NNRCA8PCBNQ0hfU1NQX0ZSX1RZUEVfU0hJRlQpOworCiAJaGRyLT5mbGFncyA9IGNwdV90b19sZTMyKGZsYWdzIHwgKHRlaS0+bl9lbGVtIDw8IE1DSF9QUkRfTEVOX1NISUZUKSk7CiAJaGRyLT50YWdzID0gY3B1X3RvX2xlMzIodGFnKTsKIAloZHItPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIodGFzay0+dG90YWxfeGZlcl9sZW4pOwpAQCAtNzc3LDkgKzY0Miw2IEBACiAKIAlidWZfdG1wICs9IE1WU19TU1BfQ01EX1NaOwogCWJ1Zl90bXBfZG1hICs9IE1WU19TU1BfQ01EX1NaOwotI2lmIF9NVl9EVU1QCi0Jc2xvdC0+Y21kX3NpemUgPSBNVlNfU1NQX0NNRF9TWjsKLSNlbmRpZgogCiAJLyogcmVnaW9uIDI6IG9wZW4gYWRkcmVzcyBmcmFtZSBhcmVhIChNVlNfT0FGX1NaIGJ5dGVzKSAqKioqKioqKiogKi8KIAlidWZfb2FmID0gYnVmX3RtcDsKQEAgLTk4Niw3ICs4NDgsNiBAQAogCXRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfQVRfSU5JVElBVE9SOwogCXNwaW5fdW5sb2NrKCZ0YXNrLT50YXNrX3N0YXRlX2xvY2spOwogCi0JbXZzX2hiYV9tZW1vcnlfZHVtcChtdmksIHRhZywgdGFzay0+dGFza19wcm90byk7CiAJbXZpX2Rldi0+cnVubmluZ19yZXErKzsKIAkrKygqcGFzcyk7CiAJbXZpLT50eF9wcm9kID0gKG12aS0+dHhfcHJvZCArIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKTsKQEAgLTExODksOSArMTA1MCw5IEBACiAJbXZzX3Nsb3RfZnJlZShtdmksIHNsb3RfaWR4KTsKIH0KIAotc3RhdGljIHZvaWQgbXZzX3VwZGF0ZV93aWRlcG9ydChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGkpCitzdGF0aWMgdm9pZCBtdnNfdXBkYXRlX3dpZGVwb3J0KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgcGh5X25vKQogewotCXN0cnVjdCBtdnNfcGh5ICpwaHkgPSAmbXZpLT5waHlbaV07CisJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtwaHlfbm9dOwogCXN0cnVjdCBtdnNfcG9ydCAqcG9ydCA9IHBoeS0+cG9ydDsKIAlpbnQgaiwgbm87CiAKQEAgLTEyNDYsMTggKzExMDcsMTcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlNVlNfQ0hJUF9ESVNQLT53cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgaSwgUEhZUl9TQVRBX1NJRzMpOwotCXNbM10gPSBNVlNfQ0hJUF9ESVNQLT5yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBpKTsKKwlzWzNdID0gY3B1X3RvX2xlMzIoTVZTX0NISVBfRElTUC0+cmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSkpOwogCiAJTVZTX0NISVBfRElTUC0+d3JpdGVfcG9ydF9jZmdfYWRkcihtdmksIGksIFBIWVJfU0FUQV9TSUcyKTsKLQlzWzJdID0gTVZTX0NISVBfRElTUC0+cmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSk7CisJc1syXSA9IGNwdV90b19sZTMyKE1WU19DSElQX0RJU1AtPnJlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpKTsKIAogCU1WU19DSElQX0RJU1AtPndyaXRlX3BvcnRfY2ZnX2FkZHIobXZpLCBpLCBQSFlSX1NBVEFfU0lHMSk7Ci0Jc1sxXSA9IE1WU19DSElQX0RJU1AtPnJlYWRfcG9ydF9jZmdfZGF0YShtdmksIGkpOworCXNbMV0gPSBjcHVfdG9fbGUzMihNVlNfQ0hJUF9ESVNQLT5yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBpKSk7CiAKIAlNVlNfQ0hJUF9ESVNQLT53cml0ZV9wb3J0X2NmZ19hZGRyKG12aSwgaSwgUEhZUl9TQVRBX1NJRzApOwotCXNbMF0gPSBNVlNfQ0hJUF9ESVNQLT5yZWFkX3BvcnRfY2ZnX2RhdGEobXZpLCBpKTsKKwlzWzBdID0gY3B1X3RvX2xlMzIoTVZTX0NISVBfRElTUC0+cmVhZF9wb3J0X2NmZ19kYXRhKG12aSwgaSkpOwogCi0JLyogV29ya2Fyb3VuZDogdGFrZSBzb21lIEFUQVBJIGRldmljZXMgZm9yIEFUQSAqLwogCWlmICgoKHNbMV0gJiAweDAwRkZGRkZGKSA9PSAweDAwRUIxNDAxKSAmJiAoKih1OCAqKSZzWzNdID09IDB4MDEpKQogCQlzWzFdID0gMHgwMEVCMTQwMSB8ICgqKCh1OCAqKSZzWzFdICsgMykgJiAweDEwKTsKIApAQCAtMTI2OSw2ICsxMTI5LDEzIEBACiAJcmV0dXJuIGlycV9zdGF0dXMgJiBQSFlFVl9TSUdfRklTOwogfQogCitzdGF0aWMgdm9pZCBtdnNfc2lnX3JlbW92ZV90aW1lcihzdHJ1Y3QgbXZzX3BoeSAqcGh5KQoreworCWlmIChwaHktPnRpbWVyLmZ1bmN0aW9uKQorCQlkZWxfdGltZXIoJnBoeS0+dGltZXIpOworCXBoeS0+dGltZXIuZnVuY3Rpb24gPSBOVUxMOworfQorCiB2b2lkIG12c191cGRhdGVfcGh5aW5mbyhzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGksIGludCBnZXRfc3QpCiB7CiAJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtpXTsKQEAgLTEyOTEsNiArMTE1OCw3IEBACiAJCWlmIChwaHktPnBoeV90eXBlICYgUE9SVF9UWVBFX1NBVEEpIHsKIAkJCXBoeS0+aWRlbnRpZnkudGFyZ2V0X3BvcnRfcHJvdG9jb2xzID0gU0FTX1BST1RPQ09MX1NUUDsKIAkJCWlmIChtdnNfaXNfc2lnX2Zpc19yZWNlaXZlZChwaHktPmlycV9zdGF0dXMpKSB7CisJCQkJbXZzX3NpZ19yZW1vdmVfdGltZXIocGh5KTsKIAkJCQlwaHktPnBoeV9hdHRhY2hlZCA9IDE7CiAJCQkJcGh5LT5hdHRfZGV2X3Nhc19hZGRyID0KIAkJCQkJaSArIG12aS0+aWQgKiBtdmktPmNoaXAtPm5fcGh5OwpAQCAtMTMwOCw3ICsxMTc2LDYgQEAKIAkJCQkJCXRtcCB8IFBIWUVWX1NJR19GSVMpOwogCQkJCXBoeS0+cGh5X2F0dGFjaGVkID0gMDsKIAkJCQlwaHktPnBoeV90eXBlICY9IH5QT1JUX1RZUEVfU0FUQTsKLQkJCQlNVlNfQ0hJUF9ESVNQLT5waHlfcmVzZXQobXZpLCBpLCAwKTsKIAkJCQlnb3RvIG91dF9kb25lOwogCQkJfQogCQl9CWVsc2UgaWYgKHBoeS0+cGh5X3R5cGUgJiBQT1JUX1RZUEVfU0FTCkBAIC0xMzM0LDkgKzEyMDEsOSBAQAogCQlpZiAoTVZTX0NISVBfRElTUC0+cGh5X3dvcmtfYXJvdW5kKQogCQkJTVZTX0NISVBfRElTUC0+cGh5X3dvcmtfYXJvdW5kKG12aSwgaSk7CiAJfQotCW12X2RwcmludGsoInBvcnQgJWQgYXR0YWNoIGRldiBpbmZvIGlzICV4XG4iLAorCW12X2RwcmludGsoInBoeSAlZCBhdHRhY2ggZGV2IGluZm8gaXMgJXhcbiIsCiAJCWkgKyBtdmktPmlkICogbXZpLT5jaGlwLT5uX3BoeSwgcGh5LT5hdHRfZGV2X2luZm8pOwotCW12X2RwcmludGsoInBvcnQgJWQgYXR0YWNoIHNhcyBhZGRyIGlzICVsbHhcbiIsCisJbXZfZHByaW50aygicGh5ICVkIGF0dGFjaCBzYXMgYWRkciBpcyAlbGx4XG4iLAogCQlpICsgbXZpLT5pZCAqIG12aS0+Y2hpcC0+bl9waHksIHBoeS0+YXR0X2Rldl9zYXNfYWRkcik7CiBvdXRfZG9uZToKIAlpZiAoZ2V0X3N0KQpAQCAtMTM2MSwxMCArMTIyOCwxMCBAQAogCX0KIAloaSA9IGkvKChzdHJ1Y3QgbXZzX3Bydl9pbmZvICopc2FzX2hhLT5sbGRkX2hhKS0+bl9waHk7CiAJbXZpID0gKChzdHJ1Y3QgbXZzX3Bydl9pbmZvICopc2FzX2hhLT5sbGRkX2hhKS0+bXZpW2hpXTsKLQlpZiAoc2FzX3BvcnQtPmlkID49IG12aS0+Y2hpcC0+bl9waHkpCi0JCXBvcnQgPSAmbXZpLT5wb3J0W3Nhc19wb3J0LT5pZCAtIG12aS0+Y2hpcC0+bl9waHldOworCWlmIChpID49IG12aS0+Y2hpcC0+bl9waHkpCisJCXBvcnQgPSAmbXZpLT5wb3J0W2kgLSBtdmktPmNoaXAtPm5fcGh5XTsKIAllbHNlCi0JCXBvcnQgPSAmbXZpLT5wb3J0W3Nhc19wb3J0LT5pZF07CisJCXBvcnQgPSAmbXZpLT5wb3J0W2ldOwogCWlmIChsb2NrKQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CiAJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDE7CkBAIC0xMzkzLDcgKzEyNjAsNyBAQAogCQkJcmV0dXJuOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnBvcnQtPmRldl9saXN0LCBkZXZfbGlzdF9ub2RlKQotCQltdnNfZG9fcmVsZWFzZV90YXNrKHBoeS0+bXZpLCBwaHlfbm8sIE5VTEwpOworCQltdnNfZG9fcmVsZWFzZV90YXNrKHBoeS0+bXZpLCBwaHlfbm8sIGRldik7CiAKIH0KIApAQCAtMTQ1Nyw2ICsxMzI0LDcgQEAKIAltdmlfZGV2aWNlLT5kZXZfc3RhdHVzID0gTVZTX0RFVl9OT1JNQUw7CiAJbXZpX2RldmljZS0+ZGV2X3R5cGUgPSBkZXYtPmRldl90eXBlOwogCW12aV9kZXZpY2UtPm12aV9pbmZvID0gbXZpOworCW12aV9kZXZpY2UtPnNhc19kZXZpY2UgPSBkZXY7CiAJaWYgKHBhcmVudF9kZXYgJiYgREVWX0lTX0VYUEFOREVSKHBhcmVudF9kZXYtPmRldl90eXBlKSkgewogCQlpbnQgcGh5X2lkOwogCQl1OCBwaHlfbnVtID0gcGFyZW50X2Rldi0+ZXhfZGV2Lm51bV9waHlzOwpAQCAtMTUwOCw2ICsxMzc2LDcgQEAKIAkJbXZfZHByaW50aygiZm91bmQgZGV2IGhhcyBnb25lLlxuIik7CiAJfQogCWRldi0+bGxkZF9kZXYgPSBOVUxMOworCW12aV9kZXYtPnNhc19kZXZpY2UgPSBOVUxMOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0xNTU1LDcgKzE0MjQsNiBAQAogCWNvbXBsZXRlKCZ0YXNrLT5jb21wbGV0aW9uKTsKIH0KIAotLyogWFhYICovCiAjZGVmaW5lIE1WU19UQVNLX1RJTUVPVVQgMjAKIHN0YXRpYyBpbnQgbXZzX2V4ZWNfaW50ZXJuYWxfdG1mX3Rhc2soc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiwKIAkJCXZvaWQgKnBhcmFtZXRlciwgdTMyIHBhcmFfbGVuLCBzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCkBAIC0xNTg4LDcgKzE0NTYsNyBAQAogCQl9CiAKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmdGFzay0+Y29tcGxldGlvbik7Ci0JCXJlcyA9IC1UTUZfUkVTUF9GVU5DX0ZBSUxFRDsKKwkJcmVzID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CiAJCS8qIEV2ZW4gVE1GIHRpbWVkIG91dCwgcmV0dXJuIGRpcmVjdC4gKi8KIAkJaWYgKCh0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICYgU0FTX1RBU0tfU1RBVEVfQUJPUlRFRCkpIHsKIAkJCWlmICghKHRhc2stPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9ET05FKSkgewpAQCAtMTYzOCwxMSArMTUwNiwxMCBAQAogCQkJCXU4ICpsdW4sIHN0cnVjdCBtdnNfdG1mX3Rhc2sgKnRtZikKIHsKIAlzdHJ1Y3Qgc2FzX3NzcF90YXNrIHNzcF90YXNrOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOwogCWlmICghKGRldi0+dHByb3RvICYgU0FTX1BST1RPQ09MX1NTUCkpCiAJCXJldHVybiBUTUZfUkVTUF9GVU5DX0VTVVBQOwogCi0Jc3RybmNweSgodTggKikmc3NwX3Rhc2suTFVOLCBsdW4sIDgpOworCW1lbWNweShzc3BfdGFzay5MVU4sIGx1biwgOCk7CiAKIAlyZXR1cm4gbXZzX2V4ZWNfaW50ZXJuYWxfdG1mX3Rhc2soZGV2LCAmc3NwX3Rhc2ssCiAJCQkJc2l6ZW9mKHNzcF90YXNrKSwgdG1mKTsKQEAgLTE2NjYsNyArMTUzMyw3IEBACiBpbnQgbXZzX2x1X3Jlc2V0KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYsIHU4ICpsdW4pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgcGh5bm9bV0lERV9QT1JUX01BWF9QSFldLCBudW0gLCByYyA9IFRNRl9SRVNQX0ZVTkNfRkFJTEVEOworCWludCByYyA9IFRNRl9SRVNQX0ZVTkNfRkFJTEVEOwogCXN0cnVjdCBtdnNfdG1mX3Rhc2sgdG1mX3Rhc2s7CiAJc3RydWN0IG12c19kZXZpY2UgKiBtdmlfZGV2ID0gZGV2LT5sbGRkX2RldjsKIAlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IG12aV9kZXYtPm12aV9pbmZvOwpAQCAtMTY3NSwxMCArMTU0Miw4IEBACiAJbXZpX2Rldi0+ZGV2X3N0YXR1cyA9IE1WU19ERVZfRUg7CiAJcmMgPSBtdnNfZGVidWdfaXNzdWVfc3NwX3RtZihkZXYsIGx1biwgJnRtZl90YXNrKTsKIAlpZiAocmMgPT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSkgewotCQludW0gPSBtdnNfZmluZF9kZXZfcGh5bm8oZGV2LCBwaHlubyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtdmktPmxvY2ssIGZsYWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQkJbXZzX3JlbGVhc2VfdGFzayhtdmksIGRldik7CisJCW12c19yZWxlYXNlX3Rhc2sobXZpLCBkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdmktPmxvY2ssIGZsYWdzKTsKIAl9CiAJLyogSWYgZmFpbGVkLCBmYWxsLXRocm91Z2ggSV9UX05leHVzIHJlc2V0ICovCkBAIC0xNjk2LDExICsxNTYxLDEyIEBACiAKIAlpZiAobXZpX2Rldi0+ZGV2X3N0YXR1cyAhPSBNVlNfREVWX0VIKQogCQlyZXR1cm4gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKKwllbHNlCisJCW12aV9kZXYtPmRldl9zdGF0dXMgPSBNVlNfREVWX05PUk1BTDsKIAlyYyA9IG12c19kZWJ1Z19JX1RfbmV4dXNfcmVzZXQoZGV2KTsKIAltdl9wcmludGsoIiVzIGZvciBkZXZpY2VbJXhdOnJjPSAlZFxuIiwKIAkJX19mdW5jX18sIG12aV9kZXYtPmRldmljZV9pZCwgcmMpOwogCi0JLyogaG91c2VrZWVwZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CiAJbXZzX3JlbGVhc2VfdGFzayhtdmksIGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7CkBAIC0xNzM5LDkgKzE2MDUsNiBAQAogCQljYXNlIFRNRl9SRVNQX0ZVTkNfRkFJTEVEOgogCQljYXNlIFRNRl9SRVNQX0ZVTkNfQ09NUExFVEU6CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJjID0gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKLQkJCWJyZWFrOwogCQl9CiAJfQogCW12X3ByaW50aygiJXM6cmM9ICVkXG4iLCBfX2Z1bmNfXywgcmMpOwpAQCAtMTc2MSw4ICsxNjI0LDggQEAKIAl1MzIgdGFnOwogCiAJaWYgKCFtdmlfZGV2KSB7Ci0JCW12X3ByaW50aygiJXM6JWQgVE1GX1JFU1BfRlVOQ19GQUlMRURcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JCXJjID0gVE1GX1JFU1BfRlVOQ19GQUlMRUQ7CisJCW12X3ByaW50aygiRGV2aWNlIGhhcyByZW1vdmVkXG4iKTsKKwkJcmV0dXJuIFRNRl9SRVNQX0ZVTkNfRkFJTEVEOwogCX0KIAogCW12aSA9IG12aV9kZXYtPm12aV9pbmZvOwpAQCAtMTgwNywyNSArMTY3MCwxNyBAQAogCiAJfSBlbHNlIGlmICh0YXNrLT50YXNrX3Byb3RvICYgU0FTX1BST1RPQ09MX1NBVEEgfHwKIAkJdGFzay0+dGFza19wcm90byAmIFNBU19QUk9UT0NPTF9TVFApIHsKLQkJLyogdG8gZG8gZnJlZSByZWdpc3Rlcl9zZXQgKi8KIAkJaWYgKFNBVEFfREVWID09IGRldi0+ZGV2X3R5cGUpIHsKIAkJCXN0cnVjdCBtdnNfc2xvdF9pbmZvICpzbG90ID0gdGFzay0+bGxkZF90YXNrOwotCQkJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHN0YXQ7CiAJCQl1MzIgc2xvdF9pZHggPSAodTMyKShzbG90IC0gbXZpLT5zbG90X2luZm8pOwotCQkJdHN0YXQgPSAmdGFzay0+dGFza19zdGF0dXM7Ci0JCQltdl9kcHJpbnRrKEtFUk5fREVCVUcgIm12X2Fib3J0X3Rhc2soKSBtdmk9JXAgdGFzaz0lcCAiCisJCQltdl9kcHJpbnRrKCJtdnNfYWJvcnRfdGFzaygpIG12aT0lcCB0YXNrPSVwICIKIAkJCQkgICAic2xvdD0lcCBzbG90X2lkeD14JXhcbiIsCiAJCQkJICAgbXZpLCB0YXNrLCBzbG90LCBzbG90X2lkeCk7Ci0JCQl0c3RhdC0+c3RhdCA9IFNBU19BQk9SVEVEX1RBU0s7Ci0JCQlpZiAobXZpX2RldiAmJiBtdmlfZGV2LT5ydW5uaW5nX3JlcSkKLQkJCQltdmlfZGV2LT5ydW5uaW5nX3JlcS0tOwotCQkJaWYgKHNhc19wcm90b2NvbF9hdGEodGFzay0+dGFza19wcm90bykpCi0JCQkJbXZzX2ZyZWVfcmVnX3NldChtdmksIG12aV9kZXYpOworCQkJbXZzX3RtZl90aW1lZG91dCgodW5zaWduZWQgbG9uZyl0YXNrKTsKIAkJCW12c19zbG90X3Rhc2tfZnJlZShtdmksIHRhc2ssIHNsb3QsIHNsb3RfaWR4KTsKLQkJCXJldHVybiAtMTsKKwkJCXJjID0gVE1GX1JFU1BfRlVOQ19DT01QTEVURTsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JfSBlbHNlIHsKLQkJLyogU01QICovCiAKIAl9CiBvdXQ6CkBAIC0xODkxLDEyICsxNzQ2LDYzIEBACiAJcmV0dXJuIHN0YXQ7CiB9CiAKK3ZvaWQgbXZzX3NldF9zZW5zZSh1OCAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgZF9zZW5zZSwKKwkJaW50IGtleSwgaW50IGFzYywgaW50IGFzY3EpCit7CisJbWVtc2V0KGJ1ZmZlciwgMCwgbGVuKTsKKworCWlmIChkX3NlbnNlKSB7CisJCS8qIERlc2NyaXB0b3IgZm9ybWF0ICovCisJCWlmIChsZW4gPCA0KSB7CisJCQltdl9wcmludGsoIkxlbmd0aCAlZCBvZiBzZW5zZSBidWZmZXIgdG9vIHNtYWxsIHRvICIKKwkJCQkiZml0IHNlbnNlICV4OiV4OiV4IiwgbGVuLCBrZXksIGFzYywgYXNjcSk7CisJCX0KKworCQlidWZmZXJbMF0gPSAweDcyOwkJLyogUmVzcG9uc2UgQ29kZQkqLworCQlpZiAobGVuID4gMSkKKwkJCWJ1ZmZlclsxXSA9IGtleTsJLyogU2Vuc2UgS2V5ICovCisJCWlmIChsZW4gPiAyKQorCQkJYnVmZmVyWzJdID0gYXNjOwkvKiBBU0MJKi8KKwkJaWYgKGxlbiA+IDMpCisJCQlidWZmZXJbM10gPSBhc2NxOwkvKiBBU0NRCSovCisJfSBlbHNlIHsKKwkJaWYgKGxlbiA8IDE0KSB7CisJCQltdl9wcmludGsoIkxlbmd0aCAlZCBvZiBzZW5zZSBidWZmZXIgdG9vIHNtYWxsIHRvICIKKwkJCQkiZml0IHNlbnNlICV4OiV4OiV4IiwgbGVuLCBrZXksIGFzYywgYXNjcSk7CisJCX0KKworCQlidWZmZXJbMF0gPSAweDcwOwkJLyogUmVzcG9uc2UgQ29kZQkqLworCQlpZiAobGVuID4gMikKKwkJCWJ1ZmZlclsyXSA9IGtleTsJLyogU2Vuc2UgS2V5ICovCisJCWlmIChsZW4gPiA3KQorCQkJYnVmZmVyWzddID0gMHgwYTsJLyogQWRkaXRpb25hbCBTZW5zZSBMZW5ndGggKi8KKwkJaWYgKGxlbiA+IDEyKQorCQkJYnVmZmVyWzEyXSA9IGFzYzsJLyogQVNDICovCisJCWlmIChsZW4gPiAxMykKKwkJCWJ1ZmZlclsxM10gPSBhc2NxOyAvKiBBU0NRICovCisJfQorCisJcmV0dXJuOworfQorCit2b2lkIG12c19maWxsX3NzcF9yZXNwX2l1KHN0cnVjdCBzc3BfcmVzcG9uc2VfaXUgKml1LAorCQkJCXU4IGtleSwgdTggYXNjLCB1OCBhc2NfcSkKK3sKKwlpdS0+ZGF0YXByZXMgPSAyOworCWl1LT5yZXNwb25zZV9kYXRhX2xlbiA9IDA7CisJaXUtPnNlbnNlX2RhdGFfbGVuID0gMTc7CisJaXUtPnN0YXR1cyA9IDAyOworCW12c19zZXRfc2Vuc2UoaXUtPnNlbnNlX2RhdGEsIDE3LCAwLAorCQkJa2V5LCBhc2MsIGFzY19xKTsKK30KKwogc3RhdGljIGludCBtdnNfc2xvdF9lcnIoc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBzYXNfdGFzayAqdGFzaywKIAkJCSB1MzIgc2xvdF9pZHgpCiB7CiAJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9bc2xvdF9pZHhdOwogCWludCBzdGF0OwotCXUzMiBlcnJfZHcwID0gbGUzMl90b19jcHUoKih1MzIgKikgKHNsb3QtPnJlc3BvbnNlKSk7CisJdTMyIGVycl9kdzAgPSBsZTMyX3RvX2NwdSgqKHUzMiAqKXNsb3QtPnJlc3BvbnNlKTsKKwl1MzIgZXJyX2R3MSA9IGxlMzJfdG9fY3B1KCooKHUzMiAqKXNsb3QtPnJlc3BvbnNlICsgMSkpOwogCXUzMiB0ZnMgPSAwOwogCWVudW0gbXZzX3BvcnRfdHlwZSB0eXBlID0gUE9SVF9UWVBFX1NBUzsKIApAQCAtMTkwOCw4ICsxODE0LDE5IEBACiAJc3RhdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAlzd2l0Y2ggKHRhc2stPnRhc2tfcHJvdG8pIHsKIAljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJewogCQlzdGF0ID0gU0FTX0FCT1JURURfVEFTSzsKKwkJaWYgKChlcnJfZHcwICYgTk9fREVTVCkgfHwgZXJyX2R3MSAmIGJpdCgzMSkpIHsKKwkJCXN0cnVjdCBzc3BfcmVzcG9uc2VfaXUgKml1ID0gc2xvdC0+cmVzcG9uc2UgKworCQkJCXNpemVvZihzdHJ1Y3QgbXZzX2Vycl9pbmZvKTsKKwkJCW12c19maWxsX3NzcF9yZXNwX2l1KGl1LCBOT1RfUkVBRFksIDB4MDQsIDAxKTsKKwkJCXNhc19zc3BfdGFza19yZXNwb25zZShtdmktPmRldiwgdGFzaywgaXUpOworCQkJc3RhdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJfQorCQlpZiAoZXJyX2R3MSAmIGJpdCgzMSkpCisJCQltdl9wcmludGsoInJldXNlIHNhbWUgc2xvdCwgcmV0cnkgY29tbWFuZC5cbiIpOwogCQlicmVhazsKKwl9CiAJY2FzZSBTQVNfUFJPVE9DT0xfU01QOgogCQlzdGF0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQlicmVhazsKQEAgLTE5MTgsMTAgKzE4MzUsOCBAQAogCWNhc2UgU0FTX1BST1RPQ09MX1NUUDoKIAljYXNlIFNBU19QUk9UT0NPTF9TQVRBIHwgU0FTX1BST1RPQ09MX1NUUDoKIAl7Ci0JCWlmIChlcnJfZHcwID09IDB4ODA0MDAwMDIpCi0JCQltdl9wcmludGsoImZpbmQgcmVzZXJ2ZWQgZXJyb3IsIHdoeT9cbiIpOwotCiAJCXRhc2stPmF0YV90YXNrLnVzZV9uY3EgPSAwOworCQlzdGF0ID0gU0FTX1BST1RPX1JFU1BPTlNFOwogCQltdnNfc2F0YV9kb25lKG12aSwgdGFzaywgc2xvdF9pZHgsIGVycl9kdzApOwogCX0KIAkJYnJlYWs7CkBAIC0xOTQ1LDggKzE4NjAsNiBAQAogCXZvaWQgKnRvOwogCWVudW0gZXhlY19zdGF0dXMgc3RzOwogCi0JaWYgKG12aS0+ZXhwX3JlcSkKLQkJbXZpLT5leHBfcmVxLS07CiAJaWYgKHVubGlrZWx5KCF0YXNrIHx8ICF0YXNrLT5sbGRkX3Rhc2sgfHwgIXRhc2stPmRldikpCiAJCXJldHVybiAtMTsKIApAQCAtMTk1NCw4ICsxODY3LDYgQEAKIAlkZXYgPSB0YXNrLT5kZXY7CiAJbXZpX2RldiA9IGRldi0+bGxkZF9kZXY7CiAKLQltdnNfaGJhX2NxX2R1bXAobXZpKTsKLQogCXNwaW5fbG9jaygmdGFzay0+dGFza19zdGF0ZV9sb2NrKTsKIAl0YXNrLT50YXNrX3N0YXRlX2ZsYWdzICY9CiAJCX4oU0FTX1RBU0tfU1RBVEVfUEVORElORyB8IFNBU19UQVNLX0FUX0lOSVRJQVRPUik7CkBAIC0xOTc4LDYgKzE4ODksNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJLyogd2hlbiBubyBkZXZpY2UgYXR0YWNoaW5nLCBnbyBhaGVhZCBhbmQgY29tcGxldGUgYnkgZXJyb3IgaGFuZGxpbmcqLwogCWlmICh1bmxpa2VseSghbXZpX2RldiB8fCBmbGFncykpIHsKIAkJaWYgKCFtdmlfZGV2KQogCQkJbXZfZHByaW50aygicG9ydCBoYXMgbm90IGRldmljZS5cbiIpOwpAQCAtMTk4Nyw2ICsxODk5LDkgQEAKIAogCS8qIGVycm9yIGluZm8gcmVjb3JkIHByZXNlbnQgKi8KIAlpZiAodW5saWtlbHkoKHJ4X2Rlc2MgJiBSWFFfRVJSKSAmJiAoKih1NjQgKikgc2xvdC0+cmVzcG9uc2UpKSkgeworCQltdl9kcHJpbnRrKCJwb3J0ICVkIHNsb3QgJWQgcnhfZGVzYyAlWCBoYXMgZXJyb3IgaW5mbyIKKwkJCSIlMDE2bGxYLlxuIiwgc2xvdC0+cG9ydC0+c2FzX3BvcnQuaWQsIHNsb3RfaWR4LAorCQkJIHJ4X2Rlc2MsICh1NjQpKCoodTY0ICopc2xvdC0+cmVzcG9uc2UpKTsKIAkJdHN0YXQtPnN0YXQgPSBtdnNfc2xvdF9lcnIobXZpLCB0YXNrLCBzbG90X2lkeCk7CiAJCXRzdGF0LT5yZXNwID0gU0FTX1RBU0tfQ09NUExFVEU7CiAJCWdvdG8gb3V0OwpAQCAtMjA0OCw4ICsxOTYzLDcgQEAKIAlzcGluX3VubG9jaygmbXZpLT5sb2NrKTsKIAlpZiAodGFzay0+dGFza19kb25lKQogCQl0YXNrLT50YXNrX2RvbmUodGFzayk7Ci0JZWxzZQotCQltdl9kcHJpbnRrKCJ3aHkgaGFzIG5vdCB0YXNrX2RvbmUuXG4iKTsKKwogCXNwaW5fbG9jaygmbXZpLT5sb2NrKTsKIAogCXJldHVybiBzdHM7CkBAIC0yMDkyLDcgKzIwMDYsNiBAQAogCQkgICAgICBzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQogewogCWludCBpLCBwaHlub1tXSURFX1BPUlRfTUFYX1BIWV0sIG51bTsKLQkvKiBob3VzZWtlZXBlciAqLwogCW51bSA9IG12c19maW5kX2Rldl9waHlubyhkZXYsIHBoeW5vKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAJCW12c19kb19yZWxlYXNlX3Rhc2sobXZpLCBwaHlub1tpXSwgZGV2KTsKQEAgLTIxMTEsMTMgKzIwMjQsMTMgQEAKIAlzdHJ1Y3QgbXZzX3dxICptd3EgPSBjb250YWluZXJfb2YoZHcsIHN0cnVjdCBtdnNfd3EsIHdvcmtfcSk7CiAJc3RydWN0IG12c19pbmZvICptdmkgPSBtd3EtPm12aTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBwaHlfbm8gPSAodW5zaWduZWQgbG9uZykgbXdxLT5kYXRhOworCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBtdmktPnNhczsKKwlzdHJ1Y3QgbXZzX3BoeSAqcGh5ID0gJm12aS0+cGh5W3BoeV9ub107CisJc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5ID0gJnBoeS0+c2FzX3BoeTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdmktPmxvY2ssIGZsYWdzKTsKIAlpZiAobXdxLT5oYW5kbGVyICYgUEhZX1BMVUdfRVZFTlQpIHsKLQkJdTMyIHBoeV9ubyA9ICh1bnNpZ25lZCBsb25nKSBtd3EtPmRhdGE7Ci0JCXN0cnVjdCBzYXNfaGFfc3RydWN0ICpzYXNfaGEgPSBtdmktPnNhczsKLQkJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtwaHlfbm9dOwotCQlzdHJ1Y3QgYXNkX3Nhc19waHkgKnNhc19waHkgPSAmcGh5LT5zYXNfcGh5OwogCiAJCWlmIChwaHktPnBoeV9ldmVudCAmIFBIWV9QTFVHX09VVCkgewogCQkJdTMyIHRtcDsKQEAgLTIxMzksNiArMjA1MiwxMSBAQAogCQkJCW12X2RwcmludGsoInBoeSVkIEF0dGFjaGVkIERldmljZVxuIiwgcGh5X25vKTsKIAkJCX0KIAkJfQorCX0gZWxzZSBpZiAobXdxLT5oYW5kbGVyICYgRVhQX0JSQ1RfQ0hHKSB7CisJCXBoeS0+cGh5X2V2ZW50ICY9IH5FWFBfQlJDVF9DSEc7CisJCXNhc19oYS0+bm90aWZ5X3BvcnRfZXZlbnQoc2FzX3BoeSwKKwkJCQlQT1JURV9CUk9BRENBU1RfUkNWRCk7CisJCW12X2RwcmludGsoInBoeSVkIEdvdCBCcm9hZGNhc3QgQ2hhbmdlXG4iLCBwaHlfbm8pOwogCX0KIAlsaXN0X2RlbCgmbXdxLT5lbnRyeSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7CkBAIC0yMTc0LDI5ICsyMDkyLDIxIEBACiAJCWlmICgmbXZpLT5waHlbcGh5X25vXSA9PSBwaHkpIHsKIAkJCW12X2RwcmludGsoIkdldCBzaWduYXR1cmUgdGltZSBvdXQsIHJlc2V0IHBoeSAlZFxuIiwKIAkJCQlwaHlfbm8rbXZpLT5pZCptdmktPmNoaXAtPm5fcGh5KTsKLQkJCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9ubywgMSk7CisJCQlNVlNfQ0hJUF9ESVNQLT5waHlfcmVzZXQobXZpLCBwaHlfbm8sIE1WU19IQVJEX1JFU0VUKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgbXZzX3NpZ19yZW1vdmVfdGltZXIoc3RydWN0IG12c19waHkgKnBoeSkKLXsKLQlpZiAocGh5LT50aW1lci5mdW5jdGlvbikKLQkJZGVsX3RpbWVyKCZwaHktPnRpbWVyKTsKLQlwaHktPnRpbWVyLmZ1bmN0aW9uID0gTlVMTDsKLX0KLQogdm9pZCBtdnNfaW50X3BvcnQoc3RydWN0IG12c19pbmZvICptdmksIGludCBwaHlfbm8sIHUzMiBldmVudHMpCiB7CiAJdTMyIHRtcDsKLQlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzX2hhID0gbXZpLT5zYXM7CiAJc3RydWN0IG12c19waHkgKnBoeSA9ICZtdmktPnBoeVtwaHlfbm9dOwotCXN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSA9ICZwaHktPnNhc19waHk7CiAKIAlwaHktPmlycV9zdGF0dXMgPSBNVlNfQ0hJUF9ESVNQLT5yZWFkX3BvcnRfaXJxX3N0YXQobXZpLCBwaHlfbm8pOwotCW12X2RwcmludGsoInBvcnQgJWQgY3RybCBzdHM9MHglWC5cbiIsIHBoeV9ubyttdmktPmlkKm12aS0+Y2hpcC0+bl9waHksCisJTVZTX0NISVBfRElTUC0+d3JpdGVfcG9ydF9pcnFfc3RhdChtdmksIHBoeV9ubywgcGh5LT5pcnFfc3RhdHVzKTsKKwltdl9kcHJpbnRrKCJwaHkgJWQgY3RybCBzdHM9MHglMDhYLlxuIiwgcGh5X25vK212aS0+aWQqbXZpLT5jaGlwLT5uX3BoeSwKIAkJTVZTX0NISVBfRElTUC0+cmVhZF9waHlfY3RsKG12aSwgcGh5X25vKSk7Ci0JbXZfZHByaW50aygiUG9ydCAlZCBpcnEgc3RzID0gMHglWFxuIiwgcGh5X25vK212aS0+aWQqbXZpLT5jaGlwLT5uX3BoeSwKKwltdl9kcHJpbnRrKCJwaHkgJWQgaXJxIHN0cyA9IDB4JTA4WFxuIiwgcGh5X25vK212aS0+aWQqbXZpLT5jaGlwLT5uX3BoeSwKIAkJcGh5LT5pcnFfc3RhdHVzKTsKIAogCS8qCkBAIC0yMjA1LDExICsyMTE1LDEyIEBACiAJKi8KIAogCWlmIChwaHktPmlycV9zdGF0dXMgJiBQSFlFVl9EQ0RSX0VSUikgewotCQltdl9kcHJpbnRrKCJwb3J0ICVkIFNUUCBkZWNvZGluZyBlcnJvci5cbiIsCisJCW12X2RwcmludGsoInBoeSAlZCBTVFAgZGVjb2RpbmcgZXJyb3IuXG4iLAogCQlwaHlfbm8gKyBtdmktPmlkKm12aS0+Y2hpcC0+bl9waHkpOwogCX0KIAogCWlmIChwaHktPmlycV9zdGF0dXMgJiBQSFlFVl9QT09GKSB7CisJCW1kZWxheSg1MDApOwogCQlpZiAoIShwaHktPnBoeV9ldmVudCAmIFBIWV9QTFVHX09VVCkpIHsKIAkJCWludCBkZXZfc2F0YSA9IHBoeS0+cGh5X3R5cGUgJiBQT1JUX1RZUEVfU0FUQTsKIAkJCWludCByZWFkeTsKQEAgLTIyMjAsMTcgKzIxMzEsMTMgQEAKIAkJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXBoeV9ubywKIAkJCQlQSFlfUExVR19FVkVOVCk7CiAJCQlyZWFkeSA9IG12c19pc19waHlfcmVhZHkobXZpLCBwaHlfbm8pOwotCQkJaWYgKCFyZWFkeSkKLQkJCQltdl9kcHJpbnRrKCJwaHklZCBVbnBsdWcgTm90aWNlXG4iLAotCQkJCQlwaHlfbm8gKwotCQkJCQltdmktPmlkICogbXZpLT5jaGlwLT5uX3BoeSk7CiAJCQlpZiAocmVhZHkgfHwgZGV2X3NhdGEpIHsKIAkJCQlpZiAoTVZTX0NISVBfRElTUC0+c3RwX3Jlc2V0KQogCQkJCQlNVlNfQ0hJUF9ESVNQLT5zdHBfcmVzZXQobXZpLAogCQkJCQkJCXBoeV9ubyk7CiAJCQkJZWxzZQogCQkJCQlNVlNfQ0hJUF9ESVNQLT5waHlfcmVzZXQobXZpLAotCQkJCQkJCXBoeV9ubywgMCk7CisJCQkJCQkJcGh5X25vLCBNVlNfU09GVF9SRVNFVCk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQl9CkBAIC0yMjQzLDEzICsyMTUwLDEyIEBACiAJCWlmIChwaHktPnRpbWVyLmZ1bmN0aW9uID09IE5VTEwpIHsKIAkJCXBoeS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBoeTsKIAkJCXBoeS0+dGltZXIuZnVuY3Rpb24gPSBtdnNfc2lnX3RpbWVfb3V0OwotCQkJcGh5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOworCQkJcGh5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIDUqSFo7CiAJCQlhZGRfdGltZXIoJnBoeS0+dGltZXIpOwogCQl9CiAJfQogCWlmIChwaHktPmlycV9zdGF0dXMgJiAoUEhZRVZfU0lHX0ZJUyB8IFBIWUVWX0lEX0RPTkUpKSB7CiAJCXBoeS0+cGh5X3N0YXR1cyA9IG12c19pc19waHlfcmVhZHkobXZpLCBwaHlfbm8pOwotCQltdnNfc2lnX3JlbW92ZV90aW1lcihwaHkpOwogCQltdl9kcHJpbnRrKCJub3RpZnkgcGx1ZyBpbiBvbiBwaHlbJWRdXG4iLCBwaHlfbm8pOwogCQlpZiAocGh5LT5waHlfc3RhdHVzKSB7CiAJCQltZGVsYXkoMTApOwpAQCAtMjI2MywxNCArMjE2OSwxNCBAQAogCQkJfQogCQkJbXZzX3VwZGF0ZV9waHlpbmZvKG12aSwgcGh5X25vLCAwKTsKIAkJCWlmIChwaHktPnBoeV90eXBlICYgUE9SVF9UWVBFX1NBUykgewotCQkJCU1WU19DSElQX0RJU1AtPnBoeV9yZXNldChtdmksIHBoeV9ubywgMik7CisJCQkJTVZTX0NISVBfRElTUC0+cGh5X3Jlc2V0KG12aSwgcGh5X25vLCBNVlNfUEhZX1RVTkUpOwogCQkJCW1kZWxheSgxMCk7CiAJCQl9CiAKIAkJCW12c19ieXRlc19kbWFlZChtdmksIHBoeV9ubyk7CiAJCQkvKiB3aGV0aGVyIGRyaXZlciBpcyBnb2luZyB0byBoYW5kbGUgaG90IHBsdWcgKi8KIAkJCWlmIChwaHktPnBoeV9ldmVudCAmIFBIWV9QTFVHX09VVCkgewotCQkJCW12c19wb3J0X25vdGlmeV9mb3JtZWQoc2FzX3BoeSwgMCk7CisJCQkJbXZzX3BvcnRfbm90aWZ5X2Zvcm1lZCgmcGh5LT5zYXNfcGh5LCAwKTsKIAkJCQlwaHktPnBoeV9ldmVudCAmPSB+UEhZX1BMVUdfT1VUOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjI3OCwxMyArMjE4NCwxMSBAQAogCQkJCXBoeV9ubyArIG12aS0+aWQqbXZpLT5jaGlwLT5uX3BoeSk7CiAJCX0KIAl9IGVsc2UgaWYgKHBoeS0+aXJxX3N0YXR1cyAmIFBIWUVWX0JST0FEX0NIKSB7Ci0JCW12X2RwcmludGsoInBvcnQgJWQgYnJvYWRjYXN0IGNoYW5nZS5cbiIsCisJCW12X2RwcmludGsoInBoeSAlZCBicm9hZGNhc3QgY2hhbmdlLlxuIiwKIAkJCXBoeV9ubyArIG12aS0+aWQqbXZpLT5jaGlwLT5uX3BoeSk7Ci0JCS8qIGV4Y2VwdGlvbiBmb3IgU2Ftc3VuZyBkaXNrIGRyaXZlKi8KLQkJbWRlbGF5KDEwMDApOwotCQlzYXNfaGEtPm5vdGlmeV9wb3J0X2V2ZW50KHNhc19waHksIFBPUlRFX0JST0FEQ0FTVF9SQ1ZEKTsKKwkJbXZzX2hhbmRsZV9ldmVudChtdmksICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcGh5X25vLAorCQkJCUVYUF9CUkNUX0NIRyk7CiAJfQotCU1WU19DSElQX0RJU1AtPndyaXRlX3BvcnRfaXJxX3N0YXQobXZpLCBwaHlfbm8sIHBoeS0+aXJxX3N0YXR1cyk7CiB9CiAKIGludCBtdnNfaW50X3J4KHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBib29sIHNlbGZfY2xlYXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKaW5kZXggMTM2N2Q4Yi4uNDRkNzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaApAQCAtNDgsMTIgKzQ4LDggQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJIm12c2FzIgogI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuOC4yIgotI2RlZmluZSBfTVZfRFVNUAkJMAogI2RlZmluZSBNVlNfSURfTk9UX01BUFBFRAkweDdmCi0vKiAjZGVmaW5lIERJU0FCTEVfSE9UUExVR19ETUFfRklYICovCi0vLyAjZGVmaW5lIE1BWF9FWFBfUlVOTklOR19SRVEJMgogI2RlZmluZSBXSURFX1BPUlRfTUFYX1BIWQkJNAotI2RlZmluZQlNVl9ESVNBQkxFX05DUQkwCiAjZGVmaW5lIG12X3ByaW50ayhmbXQsIGFyZyAuLi4pCVwKIAlwcmludGsoS0VSTl9ERUJVRyIlcyAlZDoiIGZtdCwgX19GSUxFX18sIF9fTElORV9fLCAjIyBhcmcpCiAjaWZkZWYgTVZfREVCVUcKQEAgLTY0LDYgKzYwLDcgQEAKICNlbmRpZgogI2RlZmluZSBNVl9NQVhfVTMyCQkJMHhmZmZmZmZmZgogCitleHRlcm4gaW50IGludGVycnVwdF9jb2FsZXNjaW5nOwogZXh0ZXJuIHN0cnVjdCBtdnNfdGd0X2luaXRpYXRvciBtdnNfdGd0OwogZXh0ZXJuIHN0cnVjdCBtdnNfaW5mbyAqdGd0X212aTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c182NHh4X2Rpc3BhdGNoOwpAQCAtOTksNiArOTYsMTEgQEAKIAlNVlNfREVWX0VICT0gMHgxLAogfTsKIAorZW51bSBkZXZfcmVzZXQgeworCU1WU19TT0ZUX1JFU0VUCT0gMCwKKwlNVlNfSEFSRF9SRVNFVAk9IDEsCisJTVZTX1BIWV9UVU5FCT0gMiwKK307CiAKIHN0cnVjdCBtdnNfaW5mbzsKIApAQCAtMTMwLDcgKzEzMiw2IEBACiAJdTMyICgqcmVhZF9wb3J0X2lycV9tYXNrKShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQpOwogCXZvaWQgKCp3cml0ZV9wb3J0X2lycV9tYXNrKShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHBvcnQsIHUzMiB2YWwpOwogCi0Jdm9pZCAoKmdldF9zYXNfYWRkcikodm9pZCAqYnVmLCB1MzIgYnVmbGVuKTsKIAl2b2lkICgqY29tbWFuZF9hY3RpdmUpKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgc2xvdF9pZHgpOwogCXZvaWQgKCpjbGVhcl9zcnNfaXJxKShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTggcmVnX3NldCwgdTggY2xlYXJfYWxsKTsKIAl2b2lkICgqaXNzdWVfc3RvcCkoc3RydWN0IG12c19pbmZvICptdmksIGVudW0gbXZzX3BvcnRfdHlwZSB0eXBlLApAQCAtMTY3LDkgKzE2OCwxMCBAQAogCQkJCQkJKTsKIAlpbnQgKCpzcGlfaXNzdWVjbWQpKHN0cnVjdCBtdnNfaW5mbyAqbXZpLCB1MzIgY21kKTsKIAlpbnQgKCpzcGlfd2FpdGRhdGFyZWFkeSkoc3RydWN0IG12c19pbmZvICptdmksIHUzMiB0aW1lb3V0KTsKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKLQl2b2lkICgqZG1hX2ZpeCkoZG1hX2FkZHJfdCBidWZfZG1hLCBpbnQgYnVmX2xlbiwgaW50IGZyb20sIHZvaWQgKnByZCk7Ci0jZW5kaWYKKwl2b2lkICgqZG1hX2ZpeCkoc3RydWN0IG12c19pbmZvICptdmksIHUzMiBwaHlfbWFzaywKKwkJCQlpbnQgYnVmX2xlbiwgaW50IGZyb20sIHZvaWQgKnByZCk7CisJdm9pZCAoKnR1bmVfaW50ZXJydXB0KShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHRpbWUpOworCXZvaWQgKCpub25fc3BlY19uY3FfZXJyb3IpKHN0cnVjdCBtdnNfaW5mbyAqbXZpKTsKIAogfTsKIApAQCAtMTc5LDkgKzE4MSwxMSBAQAogCXUzMiAJCWZpc19vZmZzOwogCXUzMiAJCWZpc19jb3VudDsKIAl1MzIgCQlzcnNfc3o7CisJdTMyCQlzZ193aWR0aDsKIAl1MzIgCQlzbG90X3dpZHRoOwogCWNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggKmRpc3BhdGNoOwogfTsKKyNkZWZpbmUgTVZTX01BWF9TRwkJKDFVIDw8IG12aS0+Y2hpcC0+c2dfd2lkdGgpCiAjZGVmaW5lIE1WU19DSElQX1NMT1RfU1oJKDFVIDw8IG12aS0+Y2hpcC0+c2xvdF93aWR0aCkKICNkZWZpbmUgTVZTX1JYX0ZJU0xfU1oJCVwKIAkobXZpLT5jaGlwLT5maXNfb2ZmcyArIChtdmktPmNoaXAtPmZpc19jb3VudCAqIDB4MTAwKSkKQEAgLTI0OSw2ICsyNTMsNzMgQEAKIAl1MTYgcmVzZXJ2ZWQ7CiB9OwogCisvKiBHZW5lcmF0ZSAgUEhZIHR1bm5pbmcgcGFyYW1ldGVycyAqLworc3RydWN0IHBoeV90dW5pbmcgeworCS8qIDEgYml0LCAgdHJhbnNtaXR0ZXIgZW1waGFzaXMgZW5hYmxlCSovCisJdTgJdHJhbnNfZW1wX2VuOjE7CisJLyogNCBiaXRzLCB0cmFuc21pdHRlciBlbXBoYXNpcyBhbXBsaXR1ZGUgKi8KKwl1OAl0cmFuc19lbXBfYW1wOjQ7CisJLyogMyBiaXRzLCByZXNlcnZlZCBzcGFjZSAqLworCXU4CVJlc2VydmVkXzJiaXRfMTozOworCS8qIDUgYml0cywgdHJhbnNtaXR0ZXIgYW1wbGl0dWRlICovCisJdTgJdHJhbnNfYW1wOjU7CisJLyogMiBiaXRzLCB0cmFuc21pdHRlciBhbXBsaXR1ZGUgYWRqdXN0ICovCisJdTgJdHJhbnNfYW1wX2FkajoyOworCS8qIDEgYml0LCByZXNlcnZlZCBzcGFjZSAqLworCXU4CXJlc3ZfMmJpdF8yOjE7CisJLyogMiBieXRlcywgcmVzZXJ2ZWQgc3BhY2UgKi8KKwl1OAlyZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCBmZmVfY29udHJvbCB7CisJLyogNCBiaXRzLCAgRkZFIENhcGFjaXRvciBTZWxlY3QgICh2YWx1ZSByYW5nZSAwfkYpICAqLworCXU4IGZmZV9jYXBfc2VsOjQ7CisJLyogMyBiaXRzLCAgRkZFIFJlc2lzdG9yIFNlbGVjdCAodmFsdWUgcmFuZ2UgMH43KSAqLworCXU4IGZmZV9yc3Nfc2VsOjM7CisJLyogMSBiaXQgcmVzZXJ2ZSovCisJdTggcmVzZXJ2ZWQ6MTsKK307CisKKy8qCisgKiBIQkFfSW5mb19QYWdlIGlzIHNhdmVkIGluIEZsYXNoL05WUkFNLCB0b3RhbCAyNTYgYnl0ZXMuCisgKiBUaGUgZGF0YSBhcmVhIGlzIHZhbGlkIG9ubHkgU2lnbmF0dXJlPSJNUlZMIi4KKyAqIElmIGFueSBtZW1iZXIgZmlsbHMgd2l0aCAweEZGLCB0aGUgbWVtYmVyIGlzIGludmFsaWQuCisgKi8KK3N0cnVjdCBoYmFfaW5mb19wYWdlIHsKKwkvKiBEd29yZCAwICovCisJLyogNCBieXRlcywgc3RydWN0dXJlIHNpZ25hdHVyZSxzaG91bGQgYmUgIk1SVkwiIGF0IGZpcnN0IGluaXRpYWwgKi8KKwl1OCBzaWduYXR1cmVbNF07CisKKwkvKiBEd29yZCAxLTEzICovCisJdTMyIHJlc2VydmVkMVsxM107CisKKwkvKiBEd29yZCAxNC0yOSAqLworCS8qIDY0IGJ5dGVzLCBTQVMgYWRkcmVzcyBmb3IgZWFjaCBwb3J0ICovCisJdTY0IHNhc19hZGRyWzhdOworCisJLyogRHdvcmQgMzAtMzEgKi8KKwkvKiA4IGJ5dGVzIGZvciB2YW5pciA4IHBvcnQgUEhZIEZGRSBzZWV0aW5nCisJICogQklUIDB+MyA6IEZGRSBDYXBhY2l0b3Igc2VsZWN0KHZhbHVlIHJhbmdlIDB+RikKKwkgKiBCSVQgNH42IDogRkZFIFJlc2lzdG9yIHNlbGVjdCh2YWx1ZSByYW5nZSAwfjcpCisJICogQklUIDc6IHJlc2VydmUuCisJICovCisKKwlzdHJ1Y3QgZmZlX2NvbnRyb2wgIGZmZV9jdGxbOF07CisJLyogRHdvcmQgMzIgLTQzICovCisJdTMyIHJlc2VydmVkMlsxMl07CisKKwkvKiBEd29yZCA0NC00NSAqLworCS8qIDggYnl0ZXMsICAwOiAgMS41RywgMTogMy4wRywgc2hvdWxkIGJlIDB4MDEgYXQgZmlyc3QgaW5pdGlhbCAqLworCXU4IHBoeV9yYXRlWzhdOworCisJLyogRHdvcmQgNDYtNTMgKi8KKwkvKiAzMiBieXRlcywgUEhZIHR1bmluZyBwYXJhbWV0ZXJzIGZvciBlYWNoIFBIWSovCisJc3RydWN0IHBoeV90dW5pbmcgICBwaHlfdHVuaW5nWzhdOworCisJLyogRHdvcmQgNTQtNjMgKi8KKwl1MzIgcmVzZXJ2ZWQzWzEwXTsKK307CS8qIHRvdGFsIDI1NiBieXRlcyAqLworCiBzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKIAl1bmlvbiB7CkBAIC0yNjQsOSArMzM1LDYgQEAKIAkgKi8KIAl2b2lkICpidWY7CiAJZG1hX2FkZHJfdCBidWZfZG1hOwotI2lmIF9NVl9EVU1QCi0JdTMyIGNtZF9zaXplOwotI2VuZGlmCiAJdm9pZCAqcmVzcG9uc2U7CiAJc3RydWN0IG12c19wb3J0ICpwb3J0OwogCXN0cnVjdCBtdnNfZGV2aWNlCSpkZXZpY2U7CkBAIC0zMjAsMTIgKzM4OCwxMCBAQAogCWNvbnN0IHN0cnVjdCBtdnNfY2hpcF9pbmZvICpjaGlwOwogCiAJaW50IHRhZ3NfbnVtOwotCURFQ0xBUkVfQklUTUFQKHRhZ3MsIE1WU19TTE9UUyk7CisJdW5zaWduZWQgbG9uZyAqdGFnczsKIAkvKiBmdXJ0aGVyIHBlci1zbG90IGluZm9ybWF0aW9uICovCiAJc3RydWN0IG12c19waHkgcGh5W01WU19NQVhfUEhZU107CiAJc3RydWN0IG12c19wb3J0IHBvcnRbTVZTX01BWF9QSFlTXTsKLQl1MzIgaXJxOwotCXUzMiBleHBfcmVxOwogCXUzMiBpZDsKIAl1NjQgc2F0YV9yZWdfc2V0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmhiYV9saXN0OwpAQCAtMzM3LDEyICs0MDMsMTMgQEAKIAl1MzIgZmxhc2hzZWN0U2l6ZTsKIAogCXZvaWQgKmFkZG9uOworCXN0cnVjdCBoYmFfaW5mb19wYWdlIGhiYV9pbmZvX3BhcmFtOwogCXN0cnVjdCBtdnNfZGV2aWNlCWRldmljZXNbTVZTX01BWF9ERVZJQ0VTXTsKLSNpZm5kZWYgRElTQUJMRV9IT1RQTFVHX0RNQV9GSVgKIAl2b2lkICpidWxrX2J1ZmZlcjsKIAlkbWFfYWRkcl90IGJ1bGtfYnVmZmVyX2RtYTsKKwl2b2lkICpidWxrX2J1ZmZlcjE7CisJZG1hX2FkZHJfdCBidWxrX2J1ZmZlcl9kbWExOwogI2RlZmluZSBUUkFTSF9CVUNLRVRfU0laRSAgICAJMHgyMDAwMAotI2VuZGlmCiAJdm9pZCAqZG1hX3Bvb2w7CiAJc3RydWN0IG12c19zbG90X2luZm8gc2xvdF9pbmZvWzBdOwogfTsKQEAgLTM1MCw4ICs0MTcsMTAgQEAKIHN0cnVjdCBtdnNfcHJ2X2luZm97CiAJdTggbl9ob3N0OwogCXU4IG5fcGh5OwotCXUxNiByZXNlcnZlOworCXU4IHNjYW5fZmluaXNoZWQ7CisJdTggcmVzZXJ2ZTsKIAlzdHJ1Y3QgbXZzX2luZm8gKm12aVsyXTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbXZfdGFza2xldDsKIH07CiAKIHN0cnVjdCBtdnNfd3EgewpAQCAtNDE1LDYgKzQ4NCw2IEBACiB2b2lkIG12c19pbnRfcG9ydChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IHBoeV9ubywgdTMyIGV2ZW50cyk7CiB2b2lkIG12c191cGRhdGVfcGh5aW5mbyhzdHJ1Y3QgbXZzX2luZm8gKm12aSwgaW50IGksIGludCBnZXRfc3QpOwogaW50IG12c19pbnRfcngoc3RydWN0IG12c19pbmZvICptdmksIGJvb2wgc2VsZl9jbGVhcik7Ci12b2lkIG12c19oZXhkdW1wKHUzMiBzaXplLCB1OCAqZGF0YSwgdTMyIGJhc2VhZGRyKTsKK3N0cnVjdCBtdnNfZGV2aWNlICptdnNfZmluZF9kZXZfYnlfcmVnX3NldChzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTggcmVnX3NldCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggZmNhNmE4OS4uZDA3OWY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0zODcxLDYgKzM4NzEsOSBAQAogCQkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGJ1aWxkIHBhc3N0aHJvdWdoIGlvYWRsc1xuIik7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAkJfQorCX0gZWxzZSBpZiAocmVxdWVzdF9zaXplIDwgMCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAogCS8qIElmIGRhdGEgaXMgYmVpbmcgd3JpdHRlbiBpbnRvIHRoZSBkZXZpY2UsIGNvcHkgdGhlIGRhdGEgZnJvbSB1c2VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCA1MzIzMTNlLi5hMzFlMDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTQyLDggKzQyLDggQEAKIAlpbnQgcmVhZGluZzsKIAogCWlmIChJU19RTEE4MlhYKGhhKSkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJIkZpcm13YXJlIGR1bXAgbm90IHN1cHBvcnRlZCBmb3IgSVNQODJ4eFxuIikpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDViLAorCQkgICAgIkZpcm13YXJlIGR1bXAgbm90IHN1cHBvcnRlZCBmb3IgSVNQODJ4eFxuIik7CiAJCXJldHVybiBjb3VudDsKIAl9CiAKQEAgLTU2LDcgKzU2LDcgQEAKIAkJaWYgKCFoYS0+ZndfZHVtcF9yZWFkaW5nKQogCQkJYnJlYWs7CiAKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDVkLAogCQkgICAgIkZpcm13YXJlIGR1bXAgY2xlYXJlZCBvbiAoJWxkKS5cbiIsIHZoYS0+aG9zdF9ubyk7CiAKIAkJaGEtPmZ3X2R1bXBfcmVhZGluZyA9IDA7CkBAIC02Niw3ICs2Niw3IEBACiAJCWlmIChoYS0+ZndfZHVtcGVkICYmICFoYS0+ZndfZHVtcF9yZWFkaW5nKSB7CiAJCQloYS0+ZndfZHVtcF9yZWFkaW5nID0gMTsKIAotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NzA1ZSwKIAkJCSAgICAiUmF3IGZpcm13YXJlIGR1bXAgcmVhZHkgZm9yIHJlYWQgb24gKCVsZCkuXG4iLAogCQkJICAgIHZoYS0+aG9zdF9ubyk7CiAJCX0KQEAgLTE0OCw3ICsxNDgsNyBAQAogCX0KIAogCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNWYsCiAJCSAgICAiSEJBIG5vdCBvbmxpbmUsIGZhaWxpbmcgTlZSQU0gdXBkYXRlLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTE1OCw2ICsxNTgsOCBAQAogCWhhLT5pc3Bfb3BzLT5yZWFkX252cmFtKHZoYSwgKHVpbnQ4X3QgKiloYS0+bnZyYW0sIGhhLT5udnJhbV9iYXNlLAogCSAgICBjb3VudCk7CiAKKwlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDYwLAorCSAgICAiU2V0dGluZyBJU1BfQUJPUlRfTkVFREVEXG4iKTsKIAkvKiBOVlJBTSBzZXR0aW5ncyB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseS4gKi8KIAlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJcWxhMnh4eF93YWtlX2RwYyh2aGEpOwpAQCAtMjU1LDkgKzI1Nyw5IEBACiAKIAkJaGEtPm9wdHJvbV9zdGF0ZSA9IFFMQV9TV0FJVElORzsKIAotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDYxLAogCQkgICAgIkZyZWVpbmcgZmxhc2ggcmVnaW9uIGFsbG9jYXRpb24gLS0gMHgleCBieXRlcy5cbiIsCi0JCSAgICBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKSk7CisJCSAgICBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKIAogCQl2ZnJlZShoYS0+b3B0cm9tX2J1ZmZlcik7CiAJCWhhLT5vcHRyb21fYnVmZmVyID0gTlVMTDsKQEAgLTI3Myw3ICsyNzUsNyBAQAogCQloYS0+b3B0cm9tX3N0YXRlID0gUUxBX1NSRUFESU5HOwogCQloYS0+b3B0cm9tX2J1ZmZlciA9IHZtYWxsb2MoaGEtPm9wdHJvbV9yZWdpb25fc2l6ZSk7CiAJCWlmIChoYS0+b3B0cm9tX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDYyLAogCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBvcHRyb20gcmV0cmlldmFsICIKIAkJCSAgICAiKCV4KS5cbiIsIGhhLT5vcHRyb21fcmVnaW9uX3NpemUpOwogCkBAIC0yODIsMTQgKzI4NCwxNCBAQAogCQl9CiAKIAkJaWYgKHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZSh2aGEpICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJIkhCQSBub3Qgb25saW5lLCBmYWlsaW5nIE5WUkFNIHVwZGF0ZS5cbiIpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA2MywKKwkJCSAgICAiSEJBIG5vdCBvbmxpbmUsIGZhaWxpbmcgTlZSQU0gdXBkYXRlLlxuIik7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCi0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwNjQsCiAJCSAgICAiUmVhZGluZyBmbGFzaCByZWdpb24gLS0gMHgleC8weCV4LlxuIiwKLQkJICAgIGhhLT5vcHRyb21fcmVnaW9uX3N0YXJ0LCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKSk7CisJCSAgICBoYS0+b3B0cm9tX3JlZ2lvbl9zdGFydCwgaGEtPm9wdHJvbV9yZWdpb25fc2l6ZSk7CiAKIAkJbWVtc2V0KGhhLT5vcHRyb21fYnVmZmVyLCAwLCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKIAkJaGEtPmlzcF9vcHMtPnJlYWRfb3B0cm9tKHZoYSwgaGEtPm9wdHJvbV9idWZmZXIsCkBAIC0zMjgsNyArMzMwLDcgQEAKIAkJZWxzZSBpZiAoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBOFhYWF9UWVBFKGhhKSkKIAkJCXZhbGlkID0gMTsKIAkJaWYgKCF2YWxpZCkgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA2NSwKIAkJCSAgICAiSW52YWxpZCBzdGFydCByZWdpb24gMHgleC8weCV4LlxuIiwgc3RhcnQsIHNpemUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTM0MCwxNyArMzQyLDE3IEBACiAJCWhhLT5vcHRyb21fc3RhdGUgPSBRTEFfU1dSSVRJTkc7CiAJCWhhLT5vcHRyb21fYnVmZmVyID0gdm1hbGxvYyhoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKIAkJaWYgKGhhLT5vcHRyb21fYnVmZmVyID09IE5VTEwpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNjYsCiAJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9wdHJvbSB1cGRhdGUgIgotCQkJICAgICIoJXgpLlxuIiwgaGEtPm9wdHJvbV9yZWdpb25fc2l6ZSk7CisJCQkgICAgIigleClcbiIsIGhhLT5vcHRyb21fcmVnaW9uX3NpemUpOwogCiAJCQloYS0+b3B0cm9tX3N0YXRlID0gUUxBX1NXQUlUSU5HOwogCQkJcmV0dXJuIGNvdW50OwogCQl9CiAKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA2NywKIAkJICAgICJTdGFnaW5nIGZsYXNoIHJlZ2lvbiB3cml0ZSAtLSAweCV4LzB4JXguXG4iLAotCQkgICAgaGEtPm9wdHJvbV9yZWdpb25fc3RhcnQsIGhhLT5vcHRyb21fcmVnaW9uX3NpemUpKTsKKwkJICAgIGhhLT5vcHRyb21fcmVnaW9uX3N0YXJ0LCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKIAogCQltZW1zZXQoaGEtPm9wdHJvbV9idWZmZXIsIDAsIGhhLT5vcHRyb21fcmVnaW9uX3NpemUpOwogCQlicmVhazsKQEAgLTM1OSwxNCArMzYxLDE0IEBACiAJCQlicmVhazsKIAogCQlpZiAocWxhMngwMF93YWl0X2Zvcl9oYmFfb25saW5lKHZoYSkgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNjgsCiAJCQkgICAgIkhCQSBub3Qgb25saW5lLCBmYWlsaW5nIGZsYXNoIHVwZGF0ZS5cbiIpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDY5LAogCQkgICAgIldyaXRpbmcgZmxhc2ggcmVnaW9uIC0tIDB4JXgvMHgleC5cbiIsCi0JCSAgICBoYS0+b3B0cm9tX3JlZ2lvbl9zdGFydCwgaGEtPm9wdHJvbV9yZWdpb25fc2l6ZSkpOworCQkgICAgaGEtPm9wdHJvbV9yZWdpb25fc3RhcnQsIGhhLT5vcHRyb21fcmVnaW9uX3NpemUpOwogCiAJCWhhLT5pc3Bfb3BzLT53cml0ZV9vcHRyb20odmhhLCBoYS0+b3B0cm9tX2J1ZmZlciwKIAkJICAgIGhhLT5vcHRyb21fcmVnaW9uX3N0YXJ0LCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKQEAgLTQyNSw3ICs0MjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNmEsCiAJCSAgICAiSEJBIG5vdCBvbmxpbmUsIGZhaWxpbmcgVlBEIHVwZGF0ZS5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC00NDAsNyArNDQyLDcgQEAKIAogCXRtcF9kYXRhID0gdm1hbGxvYygyNTYpOwogCWlmICghdG1wX2RhdGEpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDZiLAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFZQRCBpbmZvcm1hdGlvbiB1cGRhdGUuXG4iKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTQ4MCw3ICs0ODIsNyBAQAogCWhhLT5zZnBfZGF0YSA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLAogCSAgICAmaGEtPnNmcF9kYXRhX2RtYSk7CiAJaWYgKCFoYS0+c2ZwX2RhdGEpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDZjLAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFNGUCByZWFkLWRhdGEuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDk5LDkgKzUwMSwxMCBAQAogCQlydmFsID0gcWxhMngwMF9yZWFkX3NmcCh2aGEsIGhhLT5zZnBfZGF0YV9kbWEsIGhhLT5zZnBfZGF0YSwKIAkJICAgIGFkZHIsIG9mZnNldCwgU0ZQX0JMT0NLX1NJWkUsIDApOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA2ZCwKIAkJCSAgICAiVW5hYmxlIHRvIHJlYWQgU0ZQIGRhdGEgKCV4LyV4LyV4KS5cbiIsIHJ2YWwsCiAJCQkgICAgYWRkciwgb2Zmc2V0KTsKKwogCQkJY291bnQgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUzOCw4ICs1NDEsOCBAQAogCXR5cGUgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgMHgyMDI1YzoKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgIklzc3VpbmcgSVNQIHJlc2V0IG9uICglbGQpLlxuIiwgdmhhLT5ob3N0X25vKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NzA2ZSwKKwkJICAgICJJc3N1aW5nIElTUCByZXNldC5cbiIpOwogCiAJCXNjc2lfYmxvY2tfcmVxdWVzdHModmhhLT5ob3N0KTsKIAkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwpAQCAtNTUxLDggKzU1NCw4IEBACiAJCWlmICghSVNfUUxBODFYWChoYSkpCiAJCQlicmVhazsKIAotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiSXNzdWluZyBNUEkgcmVzZXQgb24gKCVsZCkuXG4iLCB2aGEtPmhvc3Rfbm8pOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDZmLAorCQkgICAgIklzc3VpbmcgTVBJIHJlc2V0LlxuIik7CiAKIAkJLyogTWFrZSBzdXJlIEZDIHNpZGUgaXMgbm90IGluIHJlc2V0ICovCiAJCXFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZSh2aGEpOwpAQCAtNTYwLDIwICs1NjMsMTkgQEAKIAkJLyogSXNzdWUgTVBJIHJlc2V0ICovCiAJCXNjc2lfYmxvY2tfcmVxdWVzdHModmhhLT5ob3N0KTsKIAkJaWYgKHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUodmhhKSAhPSBRTEFfU1VDQ0VTUykKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiTVBJIHJlc2V0IGZhaWxlZCBvbiAoJWxkKS5cbiIsIHZoYS0+aG9zdF9ubyk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDcwLAorCQkJICAgICJNUEkgcmVzZXQgZmFpbGVkLlxuIik7CiAJCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyh2aGEtPmhvc3QpOwogCQlicmVhazsKIAljYXNlIDB4MjAyNWU6CiAJCWlmICghSVNfUUxBODJYWChoYSkgfHwgdmhhICE9IGJhc2VfdmhhKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkgICAgIkZDb0UgY3R4IHJlc2V0IG5vdCBzdXBwb3J0ZWQgZm9yIGhvc3QlbGQuXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubyk7CisJCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDcxLAorCQkJICAgICJGQ29FIGN0eCByZXNldCBubyBzdXBwb3J0ZWQuXG4iKTsKIAkJCXJldHVybiBjb3VudDsKIAkJfQogCi0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJJc3N1aW5nIEZDb0UgQ1RYIHJlc2V0IG9uIGhvc3QlbGQuXG4iLCB2aGEtPmhvc3Rfbm8pOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDcyLAorCQkgICAgIklzc3VpbmcgRkNvRSBjdHggcmVzZXQuXG4iKTsKIAkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAkJcWxhMngwMF93YWl0X2Zvcl9mY29lX2N0eF9yZXNldCh2aGEpOwpAQCAtNjExLDggKzYxMyw4IEBACiAJCWhhLT5lZGNfZGF0YSA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLAogCQkgICAgJmhhLT5lZGNfZGF0YV9kbWEpOwogCQlpZiAoIWhhLT5lZGNfZGF0YSkgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRURDIHdyaXRlLlxuIikpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA3MywKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRURDIHdyaXRlLlxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTYzMSw5ICs2MzMsOSBAQAogCXJ2YWwgPSBxbGEyeDAwX3dyaXRlX3NmcCh2aGEsIGhhLT5lZGNfZGF0YV9kbWEsIGhhLT5lZGNfZGF0YSwKIAkgICAgZGV2LCBhZHIsIGxlbiwgb3B0KTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgIlVuYWJsZSB0byB3cml0ZSBFREMgKCV4KSAlMDJ4OiUwMng6JTA0eDolMDJ4OiUwMnguXG4iLAotCQkgICAgcnZhbCwgZGV2LCBhZHIsIG9wdCwgbGVuLCBidWZbOF0pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA3NCwKKwkJICAgICJVbmFibGUgdG8gd3JpdGUgRURDICgleCkgJTAyeDolMDR4OiUwMng6JTAyeFxuIiwKKwkJICAgIHJ2YWwsIGRldiwgYWRyLCBvcHQsIGxlbiwgYnVmWzhdKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC02NjksOCArNjcxLDggQEAKIAkJaGEtPmVkY19kYXRhID0gZG1hX3Bvb2xfYWxsb2MoaGEtPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsCiAJCSAgICAmaGEtPmVkY19kYXRhX2RtYSk7CiAJCWlmICghaGEtPmVkY19kYXRhKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBFREMgc3RhdHVzLlxuIikpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA4YywKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRURDIHN0YXR1cy5cbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC02ODgsOSArNjkwLDkgQEAKIAlydmFsID0gcWxhMngwMF9yZWFkX3NmcCh2aGEsIGhhLT5lZGNfZGF0YV9kbWEsIGhhLT5lZGNfZGF0YSwKIAkJCWRldiwgYWRyLCBsZW4sIG9wdCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJVbmFibGUgdG8gd3JpdGUgRURDIHN0YXR1cyAoJXgpICUwMng6JTAyeDolMDR4OiUwMnguXG4iLAotCQkgICAgcnZhbCwgZGV2LCBhZHIsIG9wdCwgbGVuKSk7CisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDcwNzUsCisJCSAgICAiVW5hYmxlIHRvIHdyaXRlIEVEQyBzdGF0dXMgKCV4KSAlMDJ4OiUwNHg6JTAyeC5cbiIsCisJCSAgICBydmFsLCBkZXYsIGFkciwgb3B0LCBsZW4pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTc0OSw3ICs3NTEsNyBAQAogCWhhLT54Z21hY19kYXRhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBYR01BQ19EQVRBX1NJWkUsCiAJICAgICZoYS0+eGdtYWNfZGF0YV9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghaGEtPnhnbWFjX2RhdGEpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDc2LAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIFhHTUFDIHJlYWQtZGF0YS5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NjEsNyArNzYzLDcgQEAKIAlydmFsID0gcWxhMngwMF9nZXRfeGdtYWNfc3RhdHModmhhLCBoYS0+eGdtYWNfZGF0YV9kbWEsCiAJICAgIFhHTUFDX0RBVEFfU0laRSwgJmFjdHVhbF9zaXplKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNzcsCiAJCSAgICAiVW5hYmxlIHRvIHJlYWQgWEdNQUMgZGF0YSAoJXgpLlxuIiwgcnZhbCk7CiAJCWNvdW50ID0gMDsKIAl9CkBAIC04MDEsNyArODAzLDcgQEAKIAloYS0+ZGNieF90bHYgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIERDQlhfVExWX0RBVEFfU0laRSwKIAkgICAgJmhhLT5kY2J4X3Rsdl9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghaGEtPmRjYnhfdGx2KSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA3OCwKIAkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBEQ0JYIFRMViByZWFkLWRhdGEuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODEzLDggKzgxNSw4IEBACiAJcnZhbCA9IHFsYTJ4MDBfZ2V0X2RjYnhfcGFyYW1zKHZoYSwgaGEtPmRjYnhfdGx2X2RtYSwKIAkgICAgRENCWF9UTFZfREFUQV9TSVpFKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiVW5hYmxlIHRvIHJlYWQgRENCWCBUTFYgZGF0YSAoJXgpLlxuIiwgcnZhbCk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNzksCisJCSAgICAiVW5hYmxlIHRvIHJlYWQgRENCWCBUTFYgKCV4KS5cbiIsIHJ2YWwpOwogCQljb3VudCA9IDA7CiAJfQogCkBAIC04NjksOSArODcxLDEzIEBACiAJCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCiAJCSAgICBpdGVyLT5hdHRyKTsKIAkJaWYgKHJldCkKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LAotCQkJICAgICJVbmFibGUgdG8gY3JlYXRlIHN5c2ZzICVzIGJpbmFyeSBhdHRyaWJ1dGUgIgotCQkJICAgICIoJWQpLlxuIiwgaXRlci0+bmFtZSwgcmV0KTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZjMsCisJCQkgICAgIlVuYWJsZSB0byBjcmVhdGUgc3lzZnMgJXMgYmluYXJ5IGF0dHJpYnV0ZSAoJWQpLlxuIiwKKwkJCSAgICBpdGVyLT5uYW1lLCByZXQpOworCQllbHNlCisJCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGY0LAorCQkJICAgICJTdWNjZXNzZnVsbHkgY3JlYXRlZCBzeXNmcyAlcyBiaW5hcnkgYXR0cmlidXJlLlxuIiwKKwkJCSAgICBpdGVyLT5uYW1lKTsKIAl9CiB9CiAKQEAgLTExMjYsNyArMTEzMiw3IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAodGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwN2EsCiAJCSAgICAiQWJvcnQgSVNQIGFjdGl2ZSAtLSBpZ25vcmluZyBiZWFjb24gcmVxdWVzdC5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTEzMjIsOSArMTMyOCw4IEBACiAJdGVtcCA9IGZyYWMgPSAwOwogCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpCi0JCURFQlVHMl8zXzExKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICIlcyglbGQpOiBpc3AgcmVzZXQgaW4gcHJvZ3Jlc3MuXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDdiLAorCQkgICAgIklTUCByZXNldCBhY3RpdmUuXG4iKTsKIAllbHNlIGlmICghdmhhLT5ody0+ZmxhZ3MuZWVoX2J1c3kpCiAJCXJ2YWwgPSBxbGEyeDAwX2dldF90aGVybWFsX3RlbXAodmhhLCAmdGVtcCwgJmZyYWMpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQpAQCAtMTM0Myw4ICsxMzQ4LDggQEAKIAogCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CiAJCXRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpCi0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogaXNwIHJlc2V0IGluIHByb2dyZXNzLlxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA3YywKKwkJICAgICJJU1AgcmVzZXQgYWN0aXZlLlxuIik7CiAJZWxzZSBpZiAoIXZoYS0+aHctPmZsYWdzLmVlaF9idXN5KQogCQlydmFsID0gcWxhMngwMF9nZXRfZmlybXdhcmVfc3RhdGUodmhhLCBzdGF0ZSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCkBAIC0xNjQ1LDggKzE2NTAsOCBAQAogCiAJc3RhdHMgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnN0YXRzX2RtYSk7CiAJaWYgKHN0YXRzID09IE5VTEwpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LlxuIiwKLQkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDdkLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0YXRzLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJbWVtc2V0KHN0YXRzLCAwLCBETUFfUE9PTF9TSVpFKTsKQEAgLTE3NDYsMTUgKzE3NTEsMTQgQEAKIAogCXJldCA9IHFsYTI0eHhfdnBvcnRfY3JlYXRlX3JlcV9zYW5pdHlfY2hlY2soZmNfdnBvcnQpOwogCWlmIChyZXQpIHsKLQkJREVCVUcxNShwcmludGsoInFsYTI0eHhfdnBvcnRfY3JlYXRlX3JlcV9zYW5pdHlfY2hlY2sgZmFpbGVkLCAiCi0JCSAgICAic3RhdHVzICV4XG4iLCByZXQpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA3ZSwKKwkJICAgICJWcG9ydCBzYW5pdHkgY2hlY2sgZmFpbGVkLCBzdGF0dXMgJXhcbiIsIHJldCk7CiAJCXJldHVybiAocmV0KTsKIAl9CiAKIAl2aGEgPSBxbGEyNHh4X2NyZWF0ZV92aG9zdChmY192cG9ydCk7CiAJaWYgKHZoYSA9PSBOVUxMKSB7Ci0JCURFQlVHMTUocHJpbnRrICgicWxhMjR4eF9jcmVhdGVfdmhvc3QgZmFpbGVkLCB2aGEgPSAlcFxuIiwKLQkJICAgIHZoYSkpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDdmLCAiVnBvcnQgY3JlYXRlIGhvc3QgZmFpbGVkLlxuIik7CiAJCXJldHVybiBGQ19WUE9SVF9GQUlMRUQ7CiAJfQogCWlmIChkaXNhYmxlKSB7CkBAIC0xNzY0LDggKzE3NjgsOCBAQAogCQlhdG9taWNfc2V0KCZ2aGEtPnZwX3N0YXRlLCBWUF9GQUlMRUQpOwogCiAJLyogcmVhZHkgdG8gY3JlYXRlIHZwb3J0ICovCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsICJWUCBlbnRyeSBpZCAlZCBhc3NpZ25lZC5cbiIsCi0JCQkJCQkJdmhhLT52cF9pZHgpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDcwODAsCisJICAgICJWUCBlbnRyeSBpZCAlZCBhc3NpZ25lZC5cbiIsIHZoYS0+dnBfaWR4KTsKIAogCS8qIGluaXRpYWxpemVkIHZwb3J0IHN0YXRlcyAqLwogCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKQEAgLTE3NzUsMjEgKzE3NzksMjMgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX0RPV04gfHwKIAkgICAgYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX0RFQUQpIHsKIAkJLyogRG9uJ3QgcmV0cnkgb3IgYXR0ZW1wdCBsb2dpbiBvZiB0aGlzIHZpcnR1YWwgcG9ydCAqLwotCQlERUJVRzE1KHByaW50ayAoInNjc2koJWxkKTogcHBvcnQgbG9vcF9zdGF0ZSBpcyBub3QgVVAuXG4iLAotCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4MSwKKwkJICAgICJWcG9ydCBsb29wIHN0YXRlIGlzIG5vdCBVUC5cbiIpOwogCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfREVBRCk7CiAJCWlmICghZGlzYWJsZSkKIAkJCWZjX3Zwb3J0X3NldF9zdGF0ZShmY192cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOwogCX0KIAotCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpIHsKKwlpZiAoSVNfVDEwX1BJX0NBUEFCTEUoaGEpICYmIHFsMnhlbmFibGVkaWYpIHsKIAkJaWYgKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzQpIHsKKwkJCWludCBwcm90ID0gMDsKIAkJCXZoYS0+ZmxhZ3MuZGlmZGl4X3N1cHBvcnRlZCA9IDE7Ci0JCQlERUJVRzE4KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiUmVnaXN0ZXJpbmcgZm9yIERJRi9ESVggdHlwZSAxIGFuZCAzIgotCQkJICAgICIgcHJvdGVjdGlvbi5cbiIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwODIsCisJCQkgICAgIlJlZ2lzdGVyZWQgZm9yIERJRi9ESVggdHlwZSAxIGFuZCAzIHByb3RlY3Rpb24uXG4iKTsKKwkJCWlmIChxbDJ4ZW5hYmxlZGlmID09IDEpCisJCQkJcHJvdCA9IFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OOwogCQkJc2NzaV9ob3N0X3NldF9wcm90KHZoYS0+aG9zdCwKLQkJCSAgICBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTgorCQkJICAgIHByb3QgfCBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTgogCQkJICAgIHwgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT04KIAkJCSAgICB8IFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESVhfVFlQRTFfUFJPVEVDVElPTgpAQCAtMTgwMiw4ICsxODA4LDggQEAKIAogCWlmIChzY3NpX2FkZF9ob3N0X3dpdGhfZG1hKHZoYS0+aG9zdCwgJmZjX3Zwb3J0LT5kZXYsCiAJCQkJICAgJmhhLT5wZGV2LT5kZXYpKSB7Ci0JCURFQlVHMTUocHJpbnRrKCJzY3NpKCVsZCk6IHNjc2lfYWRkX2hvc3QgZmFpbHVyZSBmb3IgVlBbJWRdLlxuIiwKLQkJCXZoYS0+aG9zdF9ubywgdmhhLT52cF9pZHgpKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4MywKKwkJICAgICJzY3NpX2FkZF9ob3N0IGZhaWx1cmUgZm9yIFZQWyVkXS5cbiIsIHZoYS0+dnBfaWR4KTsKIAkJZ290byB2cG9ydF9jcmVhdGVfZmFpbGVkXzI7CiAJfQogCkBAIC0xODIwLDYgKzE4MjYsMTAgQEAKIAogCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpIHsKIAkJcmVxID0gaGEtPnJlcV9xX21hcFsxXTsKKwkJcWxfZGJnKHFsX2RiZ19tdWx0aXEsIHZoYSwgMHhjMDAwLAorCQkgICAgIlJlcXVlc3QgcXVldWUgJXAgYXR0YWNoZWQgd2l0aCAiCisJCSAgICAiVlBbJWRdLCBjcHUgYWZmaW5pdHkgPSVkXG4iLAorCQkgICAgcmVxLCB2aGEtPnZwX2lkeCwgaGEtPmZsYWdzLmNwdV9hZmZpbml0eV9lbmFibGVkKTsKIAkJZ290byB2cG9ydF9xdWV1ZTsKIAl9IGVsc2UgaWYgKHFsMnhtYXhxdWV1ZXMgPT0gMSB8fCAhaGEtPm5waXZfaW5mbykKIAkJZ290byB2cG9ydF9xdWV1ZTsKQEAgLTE4MzYsMTMgKzE4NDYsMTYgQEAKIAkJcmV0ID0gcWxhMjV4eF9jcmVhdGVfcmVxX3F1ZShoYSwgb3B0aW9ucywgdmhhLT52cF9pZHgsIDAsIDAsCiAJCQlxb3MpOwogCQlpZiAoIXJldCkKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJDYW4ndCBjcmVhdGUgcmVxdWVzdCBxdWV1ZSBmb3IgdnBfaWR4OiVkXG4iLAotCQkJdmhhLT52cF9pZHgpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA4NCwKKwkJCSAgICAiQ2FuJ3QgY3JlYXRlIHJlcXVlc3QgcXVldWUgZm9yIFZQWyVkXVxuIiwKKwkJCSAgICB2aGEtPnZwX2lkeCk7CiAJCWVsc2UgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJSZXF1ZXN0IFF1ZTolZCAoUW9TOiAlZCkgY3JlYXRlZCBmb3IgdnBfaWR4OiVkXG4iLAotCQkJcmV0LCBxb3MsIHZoYS0+dnBfaWR4KSk7CisJCQlxbF9kYmcocWxfZGJnX211bHRpcSwgdmhhLCAweGMwMDEsCisJCQkgICAgIlJlcXVlc3QgUXVlOiVkIFEwczogJWQpIGNyZWF0ZWQgZm9yIFZQWyVkXVxuIiwKKwkJCSAgICByZXQsIHFvcywgdmhhLT52cF9pZHgpOworCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4NSwKKwkJCSAgICAiUmVxdWVzdCBRdWU6JWQgUTBzOiAlZCkgY3JlYXRlZCBmb3IgVlBbJWRdXG4iLAorCQkJICAgIHJldCwgcW9zLCB2aGEtPnZwX2lkeCk7CiAJCQlyZXEgPSBoYS0+cmVxX3FfbWFwW3JldF07CiAJCX0KIAl9CkBAIC0xODgyLDEyICsxODk1LDEzIEBACiAKIAlpZiAodmhhLT50aW1lcl9hY3RpdmUpIHsKIAkJcWxhMngwMF92cF9zdG9wX3RpbWVyKHZoYSk7Ci0JCURFQlVHMTUocHJpbnRrKEtFUk5fSU5GTyAic2NzaSglbGQpOiB0aW1lciBmb3IgdGhlIHZwb3J0WyVkXSIKLQkJIiA9ICVwIGhhcyBzdG9wcGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHZoYS0+dnBfaWR4LCB2aGEpKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4NiwKKwkJICAgICJUaW1lciBmb3IgdGhlIFZQWyVkXSBoYXMgc3RvcHBlZFxuIiwgdmhhLT52cF9pZHgpOwogCX0KIAogCS8qIE5vIHBlbmRpbmcgYWN0aXZpdGllcyBzaGFsbCBiZSB0aGVyZSBvbiB0aGUgdmhhIG5vdyAqLwotCURFQlVHKG1zbGVlcChyYW5kb20zMigpJTEwKSk7ICAvKiBKdXN0IHRvIHNlZSBpZiBzb21ldGhpbmcgZmFsbHMgb24KKwlpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgJiBxbF9kYmdfdXNlcikKKwkJbXNsZWVwKHJhbmRvbTMyKCklMTApOyAgLyogSnVzdCB0byBzZWUgaWYgc29tZXRoaW5nIGZhbGxzIG9uCiAJCQkJCSogdGhlIG5ldCB3ZSBoYXZlIHBsYWNlZCBiZWxvdyAqLwogCiAJQlVHX09OKGF0b21pY19yZWFkKCZ2aGEtPnZyZWZfY291bnQpKTsKQEAgLTE5MDEsMTIgKzE5MTUsMTIgQEAKIAogCWlmICh2aGEtPnJlcS0+aWQgJiYgIWhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCkgewogCQlpZiAocWxhMjV4eF9kZWxldGVfcmVxX3F1ZSh2aGEsIHZoYS0+cmVxKSAhPSBRTEFfU1VDQ0VTUykKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkiUXVldWUgZGVsZXRlIGZhaWxlZC5cbiIpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA4NywKKwkJCSAgICAiUXVldWUgZGVsZXRlIGZhaWxlZC5cbiIpOwogCX0KIAogCXNjc2lfaG9zdF9wdXQodmhhLT5ob3N0KTsKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJ2cG9ydCAlZCBkZWxldGVkXG4iLCBpZCk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NzA4OCwgIlZQWyVkXSBkZWxldGVkLlxuIiwgaWQpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMKaW5kZXggOGMxMGUyYy4uMDdkMTc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYwpAQCAtMzYsNyArMzYsOCBAQAogfQogCiBpbnQKLXFsYTI0eHhfZmNwX3ByaW9fY2ZnX3ZhbGlkKHN0cnVjdCBxbGFfZmNwX3ByaW9fY2ZnICpwcmlfY2ZnLCB1aW50OF90IGZsYWcpCitxbGEyNHh4X2ZjcF9wcmlvX2NmZ192YWxpZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwKKwlzdHJ1Y3QgcWxhX2ZjcF9wcmlvX2NmZyAqcHJpX2NmZywgdWludDhfdCBmbGFnKQogewogCWludCBpLCByZXQsIG51bV92YWxpZDsKIAl1aW50OF90ICpiY29kZTsKQEAgLTUxLDE4ICs1MiwxNyBAQAogCiAJaWYgKGJjb2RlX3ZhbCA9PSAweEZGRkZGRkZGKSB7CiAJCS8qIE5vIEZDUCBQcmlvcml0eSBjb25maWcgZGF0YSBpbiBmbGFzaCAqLwotCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgIiVzOiBObyBGQ1AgcHJpb3JpdHkgY29uZmlnIGRhdGEuXG4iLAotCQkgICAgX19mdW5jX18pKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA1MSwKKwkJICAgICJObyBGQ1AgUHJpb3JpdHkgY29uZmlnIGRhdGEuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGJjb2RlWzBdICE9ICdIJyB8fCBiY29kZVsxXSAhPSAnUScgfHwgYmNvZGVbMl0gIT0gJ08nIHx8CiAJCQliY29kZVszXSAhPSAnUycpIHsKIAkJLyogSW52YWxpZCBGQ1AgcHJpb3JpdHkgZGF0YSBoZWFkZXIqLwotCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSCi0JCSAgICAiJXM6IEludmFsaWQgRkNQIFByaW9yaXR5IGRhdGEgaGVhZGVyLiBiY29kZT0weCV4XG4iLAotCQkgICAgX19mdW5jX18sIGJjb2RlX3ZhbCkpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDUyLAorCQkgICAgIkludmFsaWQgRkNQIFByaW9yaXR5IGRhdGEgaGVhZGVyLiBiY29kZT0weCV4LlxuIiwKKwkJICAgIGJjb2RlX3ZhbCk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoZmxhZyAhPSAxKQpAQCAtNzcsMTUgKzc3LDE0IEBACiAKIAlpZiAobnVtX3ZhbGlkID09IDApIHsKIAkJLyogTm8gdmFsaWQgRkNQIHByaW9yaXR5IGRhdGEgZW50cmllcyAqLwotCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSCi0JCSAgICAiJXM6IE5vIHZhbGlkIEZDUCBQcmlvcml0eSBkYXRhIGVudHJpZXMuXG4iLAotCQkgICAgX19mdW5jX18pKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA1MywKKwkJICAgICJObyB2YWxpZCBGQ1AgUHJpb3JpdHkgZGF0YSBlbnRyaWVzLlxuIik7CiAJCXJldCA9IDA7CiAJfSBlbHNlIHsKIAkJLyogRkNQIHByaW9yaXR5IGRhdGEgaXMgdmFsaWQgKi8KLQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlczogVmFsaWQgRkNQIHByaW9yaXR5IGRhdGEuIG51bSBlbnRyaWVzID0gJWRcbiIsCi0JCSAgICBfX2Z1bmNfXywgbnVtX3ZhbGlkKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwNTQsCisJCSAgICAiVmFsaWQgRkNQIHByaW9yaXR5IGRhdGEuIG51bSBlbnRyaWVzID0gJWQuXG4iLAorCQkgICAgbnVtX3ZhbGlkKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTgyLDEwICsxODEsOSBAQAogCQlpZiAoIWhhLT5mY3BfcHJpb19jZmcpIHsKIAkJCWhhLT5mY3BfcHJpb19jZmcgPSB2bWFsbG9jKEZDUF9QUklPX0NGR19TSVpFKTsKIAkJCWlmICghaGEtPmZjcF9wcmlvX2NmZykgewotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgIgotCQkJCQkiZm9yIGZjcCBwcmlvIGNvbmZpZyBkYXRhICgleCkuXG4iLAotCQkJCQlGQ1BfUFJJT19DRkdfU0laRSk7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA1MCwKKwkJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZjcCBwcmlvICIKKwkJCQkgICAgImNvbmZpZyBkYXRhICgleCkuXG4iLCBGQ1BfUFJJT19DRkdfU0laRSk7CiAJCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBleGl0X2ZjcF9wcmlvX2NmZzsKQEAgLTE5OCw5ICsxOTYsOSBAQAogCQkJRkNQX1BSSU9fQ0ZHX1NJWkUpOwogCiAJCS8qIHZhbGlkYXRlIGZjcCBwcmlvcml0eSBkYXRhICovCi0JCWlmICghcWxhMjR4eF9mY3BfcHJpb19jZmdfdmFsaWQoCi0JCQkoc3RydWN0IHFsYV9mY3BfcHJpb19jZmcgKikKLQkJCWhhLT5mY3BfcHJpb19jZmcsIDEpKSB7CisKKwkJaWYgKCFxbGEyNHh4X2ZjcF9wcmlvX2NmZ192YWxpZCh2aGEsCisJCSAgICAoc3RydWN0IHFsYV9mY3BfcHJpb19jZmcgKikgaGEtPmZjcF9wcmlvX2NmZywgMSkpIHsKIAkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQkvKiBJZiBidWZmZXIgd2FzIGludmFsaWRhdGljIGludApAQCAtMjU2LDkgKzI1NCw4IEBACiAKIAkvKiBwYXNzIHRocm91Z2ggaXMgc3VwcG9ydGVkIG9ubHkgZm9yIElTUCA0R2Igb3IgaGlnaGVyICovCiAJaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAic2NzaSglbGQpOkVMUyBwYXNzdGhydSBub3Qgc3VwcG9ydGVkIGZvciBJU1AyM3h4IGJhc2VkICIKLQkJICAgICJhZGFwdGVyc1xuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMDEsCisJCSAgICAiRUxTIHBhc3N0aHJ1IG5vdCBzdXBwb3J0ZWQgZm9yIElTUDIzeHggYmFzZWQgYWRhcHRlcnMuXG4iKTsKIAkJcnZhbCA9IC1FUEVSTTsKIAkJZ290byBkb25lOwogCX0KQEAgLTI2NiwxMSArMjYzLDExIEBACiAJLyogIE11bHRpcGxlIFNHJ3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIEVMUyByZXF1ZXN0cyAqLwogCWlmIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250ID4gMSB8fAogCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCA+IDEpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KLQkJCSJtdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBFTFMgcmVxdWVzdHMiCi0JCQkiIFtyZXF1ZXN0X3NnX2NudDogJXggcmVwbHlfc2dfY250OiAleF1cbiIsCi0JCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAotCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAwMiwKKwkJICAgICJNdWx0aXBsZSBTRydzIGFyZSBub3Qgc3VwcG9yZWQgZm9yIEVMUyByZXF1ZXN0cywgIgorCQkgICAgInJlcXVlc3Rfc2dfY250PSV4IHJlcGx5X3NnX2NudD0leC5cbiIsCisJCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpOwogCQlydmFsID0gLUVQRVJNOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjgxLDkgKzI3OCw5IEBACiAJCSAqIGlmIG5vdCBwZXJmb3JtIGZhYnJpYyBsb2dpbgogCQkgKi8KIAkJaWYgKHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LCAmbmV4dGxpZCkpIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiZmFpbGVkIHRvIGxvZ2luIHBvcnQgJTA2WCBmb3IgRUxTIHBhc3N0aHJ1XG4iLAotCQkJZmNwb3J0LT5kX2lkLmIyNCkpOworCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAwMywKKwkJCSAgICAiRmFpbGVkIHRvIGxvZ2luIHBvcnQgJTA2WCBmb3IgRUxTIHBhc3N0aHJ1LlxuIiwKKwkJCSAgICBmY3BvcnQtPmRfaWQuYjI0KTsKIAkJCXJ2YWwgPSAtRUlPOwogCQkJZ290byBkb25lOwogCQl9CkBAIC0zMTQsOCArMzExLDcgQEAKIAl9CiAKIAlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAwNSwgIkhvc3Qgbm90IG9ubGluZS5cbiIpOwogCQlydmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KQEAgLTMzNywxMiArMzMzLDExIEBACiAKIAlpZiAoKHJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CiAJCShyc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkJImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgXAotCQkJW3JlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4XAotCQkJcmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCi0JCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCByZXFfc2dfY250LAotCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAwOCwKKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzLCAiCisJCSAgICAicmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDoleCByZXBseV9zZ19jbnQ6JXggIgorCQkgICAgImRtYV9yZXBseV9zZ19jbnQ6JXguXG4iLCBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkgICAgcmVxX3NnX2NudCwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHJzcF9zZ19jbnQpOwogCQlydmFsID0gLUVBR0FJTjsKIAkJZ290byBkb25lX3VubWFwX3NnOwogCX0KQEAgLTM2MywxNSArMzU4LDE2IEBACiAJCSJic2dfZWxzX3JwdCIgOiAiYnNnX2Vsc19oc3QiKTsKIAllbHMtPnUuYnNnX2pvYiA9IGJzZ19qb2I7CiAKLQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkic2NzaSglbGQ6JXgpOiBic2cgcnFzdCB0eXBlOiAlcyBlbHMgdHlwZTogJXggLSBsb29wLWlkPSV4ICIKLQkJInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCB2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCi0JCWJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5jb21tYW5kX2NvZGUsCi0JCWZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAotCQlmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMGEsCisJICAgICJic2cgcnFzdCB0eXBlOiAlcyBlbHMgdHlwZTogJXggLSBsb29wLWlkPSV4ICIKKwkgICAgInBvcnRpZD0lLTJ4JTAyeCUwMnguXG4iLCB0eXBlLAorCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMuY29tbWFuZF9jb2RlLCBmY3BvcnQtPmxvb3BfaWQsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCiAJcnZhbCA9IHFsYTJ4MDBfc3RhcnRfc3Aoc3ApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMGUsCisJCSAgICAicWxhMngwMF9zdGFydF9zcCBmYWlsZWQgPSAlZFxuIiwgcnZhbCk7CiAJCWtmcmVlKHNwLT5jdHgpOwogCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CiAJCXJ2YWwgPSAtRUlPOwpAQCAtNDExLDYgKzQwNyw4IEBACiAJCWRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CiAJaWYgKCFyZXFfc2dfY250KSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMGYsCisJCSAgICAiZG1hX21hcF9zZyByZXR1cm4gJWQgZm9yIHJlcXVlc3RcbiIsIHJlcV9zZ19jbnQpOwogCQlydmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KQEAgLTQxOCwyNCArNDE2LDI1IEBACiAJcnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKIAkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CiAJaWYgKCFyc3Bfc2dfY250KSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMTAsCisJCSAgICAiZG1hX21hcF9zZyByZXR1cm4gJWQgZm9yIHJlcGx5XG4iLCByc3Bfc2dfY250KTsKIAkJcnZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoKHJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CiAJICAgIChyc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIltyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleFwKLQkJICAgIHJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhdXG4iLAotCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgcmVxX3NnX2NudCwKLQkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMTEsCisJCSAgICAicmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXggcmVwbHlfc2dfY250OiV4ICIKKwkJICAgICJkbWFfcmVwbHlfc2dfY250OiAleFxuIiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKKwkJICAgIHJlcV9zZ19jbnQsIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3Bfc2dfY250KTsKIAkJcnZhbCA9IC1FQUdBSU47CiAJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAl9CiAKIAlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMTIsCisJCSAgICAiSG9zdCBpcyBub3Qgb25saW5lLlxuIik7CiAJCXJ2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmVfdW5tYXBfc2c7CiAJfQpAQCAtNDUxLDggKzQ1MCw4IEBACiAJCWxvb3BfaWQgPSB2aGEtPm1nbXRfc3ZyX2xvb3BfaWQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiVW5rbm93biBsb29wIGlkOiAleFxuIiwgbG9vcF9pZCkpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDEzLAorCQkgICAgIlVua25vd24gbG9vcCBpZDogJXguXG4iLCBsb29wX2lkKTsKIAkJcnZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAl9CkBAIC00NjQsNiArNDYzLDggQEAKIAkgKi8KIAlmY3BvcnQgPSBxbGEyeDAwX2FsbG9jX2ZjcG9ydCh2aGEsIEdGUF9LRVJORUwpOwogCWlmICghZmNwb3J0KSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMTQsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIGZjcG9ydC5cbiIpOwogCQlydmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lX3VubWFwX3NnOwogCX0KQEAgLTQ3OSw2ICs0ODAsOCBAQAogCS8qIEFsbG9jIFNSQiBzdHJ1Y3R1cmUgKi8KIAlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9ic2dfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2N0eCkpOwogCWlmICghc3ApIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAxNSwKKwkJICAgICJxbGEyeDAwX2dldF9jdHhfYnNnX3NwIGZhaWxlZC5cbiIpOwogCQlydmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lX2ZyZWVfZmNwb3J0OwogCX0KQEAgLTQ4OCwxNSArNDkxLDE3IEBACiAJY3QtPm5hbWUgPSAiYnNnX2N0IjsKIAljdC0+dS5ic2dfam9iID0gYnNnX2pvYjsKIAotCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSJzY3NpKCVsZDoleCk6IGJzZyBycXN0IHR5cGU6ICVzIGVscyB0eXBlOiAleCAtIGxvb3AtaWQ9JXggIgotCQkicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnByZWFtYmxlX3dvcmQyID4+IDE2KSwKLQkJZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCWZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAxNiwKKwkgICAgImJzZyBycXN0IHR5cGU6ICVzIGVsc2UgdHlwZTogJXggLSAiCisJICAgICJsb29wLWlkPSV4IHBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCB0eXBlLAorCSAgICAoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfY3QucHJlYW1ibGVfd29yZDIgPj4gMTYpLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCiAJcnZhbCA9IHFsYTJ4MDBfc3RhcnRfc3Aoc3ApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMTcsCisJCSAgICAicWxhMngwMF9zdGFydF9zcCBmYWlsZWQ9JWQuXG4iLCBydmFsKTsKIAkJa2ZyZWUoc3AtPmN0eCk7CiAJCW1lbXBvb2xfZnJlZShzcCwgaGEtPnNyYl9tZW1wb29sKTsKIAkJcnZhbCA9IC1FSU87CkBAIC01MzUsOSArNTQwLDggQEAKIAloYS0+bm90aWZ5X2RjYnhfY29tcCA9IDE7CiAJcmV0ID0gcWxhODF4eF9zZXRfcG9ydF9jb25maWcodmhhLCBuZXdfY29uZmlnKTsKIAlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9FUlIKLQkJICAgICIlcyglbHUpOiBTZXQgcG9ydCBjb25maWcgZmFpbGVkXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDIxLAorCQkgICAgInNldCBwb3J0IGNvbmZpZyBmYWlsZWQuXG4iKTsKIAkJaGEtPm5vdGlmeV9kY2J4X2NvbXAgPSAwOwogCQlydmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lX3NldF9pbnRlcm5hbDsKQEAgLTU0NSwxMSArNTQ5LDExIEBACiAKIAkvKiBXYWl0IGZvciBEQ0JYIGNvbXBsZXRlIGV2ZW50ICovCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmhhLT5kY2J4X2NvbXAsICgyMCAqIEhaKSkpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJTdGF0ZSBjaGFuZ2Ugbm90aWZpY2FpdGlvbiBub3QgcmVjZWl2ZWQuXG4iKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMjIsCisJCSAgICAiU3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBub3QgcmVjZWl2ZWQuXG4iKTsKIAl9IGVsc2UKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJTdGF0ZSBjaGFuZ2UgUkVDRUlWRURcbiIpKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAyMywKKwkJICAgICJTdGF0ZSBjaGFuZ2UgcmVjZWl2ZWQuXG4iKTsKIAogCWhhLT5ub3RpZnlfZGNieF9jb21wID0gMDsKIApAQCAtNTgxLDkgKzU4NSw4IEBACiAJCWhhLT5ub3RpZnlfZGNieF9jb21wID0gd2FpdDsKIAkJcmV0ID0gcWxhODF4eF9zZXRfcG9ydF9jb25maWcodmhhLCBuZXdfY29uZmlnKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUgotCQkJICAgICIlcyglbHUpOiBTZXQgcG9ydCBjb25maWcgZmFpbGVkXG4iLAotCQkJICAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDI1LAorCQkJICAgICJTZXQgcG9ydCBjb25maWcgZmFpbGVkLlxuIik7CiAJCQloYS0+bm90aWZ5X2RjYnhfY29tcCA9IDA7CiAJCQlydmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZV9yZXNldF9pbnRlcm5hbDsKQEAgLTU5MiwxNCArNTk1LDE0IEBACiAJCS8qIFdhaXQgZm9yIERDQlggY29tcGxldGUgZXZlbnQgKi8KIAkJaWYgKHdhaXQgJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaGEtPmRjYnhfY29tcCwKIAkJCSgyMCAqIEhaKSkpIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIlN0YXRlIGNoYW5nZSBub3RpZmljYWl0aW9uIG5vdCByZWNlaXZlZC5cbiIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMjYsCisJCQkgICAgIlN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gbm90IHJlY2VpdmVkLlxuIik7CiAJCQloYS0+bm90aWZ5X2RjYnhfY29tcCA9IDA7CiAJCQlydmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gZG9uZV9yZXNldF9pbnRlcm5hbDsKIAkJfSBlbHNlCi0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJTdGF0ZSBjaGFuZ2UgUkVDRUlWRURcbiIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMjcsCisJCQkgICAgIlN0YXRlIGNoYW5nZSByZWNlaXZlZC5cbiIpOwogCiAJCWhhLT5ub3RpZnlfZGNieF9jb21wID0gMDsKIAl9CkBAIC02MjksMTEgKzYzMiwxMyBAQAogCiAJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykgfHwKIAkJdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAotCQl0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpCisJCXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDE4LCAiQWJvcnQgYWN0aXZlIG9yIG5lZWRlZC5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDE5LCAiSG9zdCBpcyBub3Qgb25saW5lLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNjQxLDI2ICs2NDYsMzEgQEAKIAkJYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCiAJCURNQV9UT19ERVZJQ0UpOwogCi0JaWYgKCFlbHJlcS5yZXFfc2dfY250KQorCWlmICghZWxyZXEucmVxX3NnX2NudCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDFhLAorCQkgICAgImRtYV9tYXBfc2cgcmV0dXJuZWQgJWQgZm9yIHJlcXVlc3QuXG4iLCBlbHJlcS5yZXFfc2dfY250KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZWxyZXEucnNwX3NnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsCiAJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCiAJCURNQV9GUk9NX0RFVklDRSk7CiAKIAlpZiAoIWVscmVxLnJzcF9zZ19jbnQpIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAxYiwKKwkJICAgICJkbWFfbWFwX3NnIHJldHVybmVkICVkIGZvciByZXBseS5cbiIsIGVscmVxLnJzcF9zZ19jbnQpOwogCQlydmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lX3VubWFwX3JlcV9zZzsKIAl9CiAKIAlpZiAoKGVscmVxLnJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CiAJCShlbHJlcS5yc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkJImRtYSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMgIgotCQkJIltyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleCAiCi0JCQkicmVwbHlfc2dfY250OiAleCBkbWFfcmVwbHlfc2dfY250OiAleF1cbiIsCi0JCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBlbHJlcS5yZXFfc2dfY250LAotCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIGVscmVxLnJzcF9zZ19jbnQpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAxYywKKwkJICAgICJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzLCAiCisJCSAgICAicmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXggIgorCQkgICAgInJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXguXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgZWxyZXEucmVxX3NnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBlbHJlcS5yc3Bfc2dfY250KTsKIAkJcnZhbCA9IC1FQUdBSU47CiAJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAl9CkBAIC02NjgsOCArNjc4LDggQEAKIAlyZXFfZGF0YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcmVxX2RhdGFfbGVuLAogCQkmcmVxX2RhdGFfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcV9kYXRhKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIHJlcV9kYXRhICIKLQkJCSJmYWlsZWQgZm9yIGhvc3Q9JWx1XG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMWQsCisJCSAgICAiZG1hIGFsbG9jIGZhaWxlZCBmb3IgcmVxX2RhdGEuXG4iKTsKIAkJcnZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAl9CkBAIC02NzcsOCArNjg3LDggQEAKIAlyc3BfZGF0YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcnNwX2RhdGFfbGVuLAogCQkmcnNwX2RhdGFfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJzcF9kYXRhKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIHJzcF9kYXRhICIKLQkJCSJmYWlsZWQgZm9yIGhvc3Q9JWx1XG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMDQsCisJCSAgICAiZG1hIGFsbG9jIGZhaWxlZCBmb3IgcnNwX2RhdGEuXG4iKTsKIAkJcnZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZV9mcmVlX2RtYV9yZXE7CiAJfQpAQCAtNjk5LDggKzcwOSw4IEBACiAJICAgICYmIHJlcV9kYXRhX2xlbiA9PSBNQVhfRUxTX0ZSQU1FX1BBWUxPQUQpKSAmJgogCQllbHJlcS5vcHRpb25zID09IEVYVEVSTkFMX0xPT1BCQUNLKSB7CiAJCXR5cGUgPSAiRkNfQlNHX0hTVF9WRU5ET1JfRUNIT19ESUFHIjsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsIHZoYS0+aG9zdF9ubywgdHlwZSkpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDFlLAorCQkgICAgIkJTRyByZXF1ZXN0IHR5cGU6ICVzLlxuIiwgdHlwZSk7CiAJCWNvbW1hbmRfc2VudCA9IElOVF9ERUZfTEJfRUNIT19DTUQ7CiAJCXJ2YWwgPSBxbGEyeDAwX2VjaG9fdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOwogCX0gZWxzZSB7CkBAIC03MDgsOSArNzE4LDggQEAKIAkJCW1lbXNldChjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKIAkJCW1lbXNldChuZXdfY29uZmlnLCAwLCBzaXplb2YobmV3X2NvbmZpZykpOwogCQkJaWYgKHFsYTgxeHhfZ2V0X3BvcnRfY29uZmlnKHZoYSwgY29uZmlnKSkgewotCQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIKLQkJCQkJIiVzKCVsdSk6IEdldCBwb3J0IGNvbmZpZyBmYWlsZWRcbiIsCi0JCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDFmLAorCQkJCSAgICAiR2V0IHBvcnQgY29uZmlnIGZhaWxlZC5cbiIpOwogCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KTsKIAkJCQlydmFsID0gLUVQRVJNOwpAQCAtNzE4LDExICs3MjcsMTMgQEAKIAkJCX0KIAogCQkJaWYgKGVscmVxLm9wdGlvbnMgIT0gRVhURVJOQUxfTE9PUEJBQ0spIHsKLQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCQkiSW50ZXJuYWw6IGN1cnJlbnQgcG9ydCBjb25maWcgPSAleFxuIiwKLQkJCQkJY29uZmlnWzBdKSk7CisJCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAyMCwKKwkJCQkgICAgIkludGVybmFsOiBjdXJlbnQgcG9ydCBjb25maWcgPSAleFxuIiwKKwkJCQkgICAgY29uZmlnWzBdKTsKIAkJCQlpZiAocWxhODF4eF9zZXRfaW50ZXJuYWxfbG9vcGJhY2sodmhhLCBjb25maWcsCiAJCQkJCW5ld19jb25maWcpKSB7CisJCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMjQsCisJCQkJCSAgICAiSW50ZXJuYWwgbG9vcGJhY2sgZmFpbGVkLlxuIik7CiAJCQkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQogCQkJCQkJMDsKIAkJCQkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9CkBAIC03NDYsOSArNzU3LDggQEAKIAkJCX0KIAogCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9MT09QQkFDSyI7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXNcbiIsCi0JCQkJdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDI4LAorCQkJICAgICJCU0cgcmVxdWVzdCB0eXBlOiAlcy5cbiIsIHR5cGUpOwogCiAJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRDsKIAkJCXJ2YWwgPSBxbGEyeDAwX2xvb3BiYWNrX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKQEAgLTc2MywxNyArNzczLDE2IEBACiAKIAkJCWlmIChyZXNwb25zZVswXSA9PSBNQlNfQ09NTUFORF9FUlJPUiAmJgogCQkJCQlyZXNwb25zZVsxXSA9PSBNQlNfTEJfUkVTRVQpIHsKLQkJCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbGQpOiBBQk9SVGluZyAiCi0JCQkJCSJJU1BcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDI5LAorCQkJCSAgICAiTUJYIGNvbW1hbmQgZXJyb3IsIEFib3J0aW5nIElTUC5cbiIpOwogCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCQkJcWxhMngwMF93YWl0X2Zvcl9jaGlwX3Jlc2V0KHZoYSk7CiAJCQkJLyogQWxzbyByZXNldCB0aGUgTVBJICovCiAJCQkJaWYgKHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUodmhhKSAhPQogCQkJCSAgICBRTEFfU1VDQ0VTUykgewotCQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJCSAgICAiTVBJIHJlc2V0IGZhaWxlZCBmb3IgaG9zdCVsZC5cbiIsCi0JCQkJCSAgICB2aGEtPmhvc3Rfbm8pOworCQkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDJhLAorCQkJCQkgICAgIk1QSSByZXNldCBmYWlsZWQuXG4iKTsKIAkJCQl9CiAKIAkJCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKQEAgLTc4MywxNyArNzkyLDE2IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQl0eXBlID0gIkZDX0JTR19IU1RfVkVORE9SX0xPT1BCQUNLIjsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJInNjc2koJWxkKSBic2cgcnFzdCB0eXBlOiAlc1xuIiwKLQkJCQl2aGEtPmhvc3Rfbm8sIHR5cGUpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMmIsCisJCQkgICAgIkJTRyByZXF1ZXN0IHR5cGU6ICVzLlxuIiwgdHlwZSk7CiAJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRDsKIAkJCXJ2YWwgPSBxbGEyeDAwX2xvb3BiYWNrX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKIAkJfQogCX0KIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpKCVsZCkgVmVuZG9yICIKLQkJICAgICJyZXF1ZXN0ICVzIGZhaWxlZFxuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMmMsCisJCSAgICAiVmVuZG9yIHJlcXVlc3QgJXMgZmFpbGVkLlxuIiwgdHlwZSk7CiAKIAkJZndfc3RzX3B0ciA9ICgodWludDhfdCAqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsKIAkJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKQEAgLTgwNSw4ICs4MTMsOCBAQAogCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwogCX0gZWxzZSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpKCVsZCkgVmVuZG9yICIKLQkJCSJyZXF1ZXN0ICVzIGNvbXBsZXRlZFxuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMmQsCisJCSAgICAiVmVuZG9yIHJlcXVlc3QgJXMgY29tcGxldGVkLlxuIiwgdHlwZSk7CiAKIAkJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpICsKIAkJCXNpemVvZihyZXNwb25zZSkgKyBzaXplb2YodWludDhfdCk7CkBAIC04NTEsMTIgKzg1OSwxMyBAQAogCiAJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpCisJICAgIHRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDJlLCAiQWJvcnQgYWN0aXZlIG9yIG5lZWRlZC5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWlmICghSVNfUUxBODRYWChoYSkpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInNjc2koJWxkKTogTm90IDg0eHgsICIKLQkJICAgImV4aXRpbmcuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAyZiwgIk5vdCA4NHh4LCBleGl0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODY1LDE0ICs4NzQsMTQgQEAKIAlydmFsID0gcWxhODR4eF9yZXNldF9jaGlwKHZoYSwgZmxhZyA9PSBBODRfSVNTVUVfUkVTRVRfRElBR19GVyk7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSglbGQpIFZlbmRvciAiCi0JCSAgICAicmVxdWVzdCA4NHh4IHJlc2V0IGZhaWxlZFxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMzAsCisJCSAgICAiVmVuZG9yIHJlcXVlc3QgODR4eCByZXNldCBmYWlsZWQuXG4iKTsKIAkJcnZhbCA9IGJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7CiAKIAl9IGVsc2UgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSglbGQpIFZlbmRvciAiCi0JCSAgICAicmVxdWVzdCA4NHh4IHJlc2V0IGNvbXBsZXRlZFxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwMzEsCisJCSAgICAiVmVuZG9yIHJlcXVlc3QgODR4eCByZXNldCBjb21wbGV0ZWQuXG4iKTsKIAkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IERJRF9PSzsKIAl9CiAKQEAgLTkwMiwyMSArOTExLDI0IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoIUlTX1FMQTg0WFgoaGEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpKCVsZCk6IE5vdCA4NHh4LCAiCi0JCQkiZXhpdGluZy5cbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDMyLAorCQkgICAgIk5vdCA4NHh4LCBleGl0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXNnX2NudCA9IGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQlpZiAoIXNnX2NudCkKKwlpZiAoIXNnX2NudCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDMzLAorCQkgICAgImRtYV9tYXBfc2cgcmV0dXJuZWQgJWQgZm9yIHJlcXVlc3QuXG4iLCBzZ19jbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlpZiAoc2dfY250ICE9IGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KLQkJCSJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzICIKLQkJCSJyZXF1ZXN0X3NnX2NudDogJXggZG1hX3JlcXVlc3Rfc2dfY250OiAleCAiLAotCQkJYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgc2dfY250KSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMzQsCisJCSAgICAiRE1BIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cywgIgorCQkgICAgInJlcXVlc3Rfc2dfY250OiAleCBkbWFfcmVxdWVzdF9zZ19jbnQ6ICV4LlxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIHNnX2NudCk7CiAJCXJ2YWwgPSAtRUFHQUlOOwogCQlnb3RvIGRvbmVfdW5tYXBfc2c7CiAJfQpAQCAtOTI1LDggKzkzNyw4IEBACiAJZndfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBkYXRhX2xlbiwKIAkJJmZ3X2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmd19idWYpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXM6IGRtYSBhbGxvYyBmb3IgZndfYnVmICIKLQkJCSJmYWlsZWQgZm9yIGhvc3Q9JWx1XG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMzUsCisJCSAgICAiRE1BIGFsbG9jIGZhaWxlZCBmb3IgZndfYnVmLlxuIik7CiAJCXJ2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmVfdW5tYXBfc2c7CiAJfQpAQCAtOTM2LDggKzk0OCw4IEBACiAKIAltbiA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmbW5fZG1hKTsKIAlpZiAoIW1uKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIGZ3IGJ1ZmZlciAiCi0JCQkiZmFpbGVkIGZvciBob3N0PSVsdVxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDM2LAorCQkgICAgIkRNQSBhbGxvYyBmYWlsZWQgZm9yIGZ3IGJ1ZmZlci5cbiIpOwogCQlydmFsID0gLUVOT01FTTsKIAkJZ290byBkb25lX2ZyZWVfZndfYnVmOwogCX0KQEAgLTk2NSwxNSArOTc3LDE1IEBACiAJcnZhbCA9IHFsYTJ4MDBfaXNzdWVfaW9jYl90aW1lb3V0KHZoYSwgbW4sIG1uX2RtYSwgMCwgMTIwKTsKIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpKCVsZCkgVmVuZG9yICIKLQkJCSJyZXF1ZXN0IDg0eHggdXBkYXRlZncgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAzNywKKwkJICAgICJWZW5kb3IgcmVxdWVzdCA4NHh4IHVwZGF0ZWZ3IGZhaWxlZC5cbiIpOwogCiAJCXJ2YWwgPSBic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpOwogCiAJfSBlbHNlIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInNjc2koJWxkKSBWZW5kb3IgIgotCQkJInJlcXVlc3QgODR4eCB1cGRhdGVmdyBjb21wbGV0ZWRcbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDM4LAorCQkgICAgIlZlbmRvciByZXF1ZXN0IDg0eHggdXBkYXRlZncgY29tcGxldGVkLlxuIik7CiAKIAkJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOwogCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX09LOwpAQCAtMTAwOSwyNyArMTAyMSwzMCBAQAogCiAJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncykgfHwKIAkJdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAotCQl0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpCisJCXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDM5LAorCQkgICAgIkFib3J0IGFjdGl2ZSBvciBuZWVkZWQuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlpZiAoIUlTX1FMQTg0WFgoaGEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzY3NpKCVsZCk6IE5vdCA4NHh4LCAiCi0JCQkiZXhpdGluZy5cbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDNhLAorCQkgICAgIk5vdCA4NHh4LCBleGl0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXFsODRfbWdtdCA9IChzdHJ1Y3QgcWxhX2JzZ19hODRfbWdtdCAqKSgoY2hhciAqKWJzZ19qb2ItPnJlcXVlc3QgKwogCQlzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSk7CiAJaWYgKCFxbDg0X21nbXQpIHsKLQkJREVCVUcyKHByaW50aygiJXMoJWxkKTogbWdtdCBoZWFkZXIgbm90IHByb3ZpZGVkLCBleGl0aW5nLlxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAzYiwKKwkJICAgICJNR01UIGhlYWRlciBub3QgcHJvdmlkZWQsIGV4aXRpbmcuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbW4gPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJm1uX2RtYSk7CiAJaWYgKCFtbikgewotCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlczogZG1hIGFsbG9jIGZvciBmdyBidWZmZXIgIgotCQkJImZhaWxlZCBmb3IgaG9zdD0lbHVcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAzYywKKwkJICAgICJETUEgYWxsb2MgZmFpbGVkIGZvciBmdyBidWZmZXIuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMDQ0LDYgKzEwNTksOCBAQAogCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAogCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CiAJCWlmICghc2dfY250KSB7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDNkLAorCQkJICAgICJkbWFfbWFwX3NnIHJldHVybmVkICVkIGZvciByZXBseS5cbiIsIHNnX2NudCk7CiAJCQlydmFsID0gLUVOT01FTTsKIAkJCWdvdG8gZXhpdF9tZ210OwogCQl9CkBAIC0xMDUxLDEwICsxMDY4LDEwIEBACiAJCWRtYV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAKIAkJaWYgKHNnX2NudCAhPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCkgewotCQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KLQkJCQkiZG1hIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cyAiCi0JCQkJInJlcGx5X3NnX2NudDogJXggZG1hX3JlcGx5X3NnX2NudDogJXhcbiIsCi0JCQkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIHNnX2NudCkpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAzZSwKKwkJCSAgICAiRE1BIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cywgIgorCQkJICAgICJyZXBseV9zZ19jbnQ6ICV4IGRtYV9yZXBseV9zZ19jbnQ6ICV4LlxuIiwKKwkJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgc2dfY250KTsKIAkJCXJ2YWwgPSAtRUFHQUlOOwogCQkJZ290byBkb25lX3VubWFwX3NnOwogCQl9CkBAIC0xMDY0LDkgKzEwODEsOCBAQAogCQltZ210X2IgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIGRhdGFfbGVuLAogCQkgICAgJm1nbXRfZG1hLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtZ210X2IpIHsKLQkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgZm9yIG1nbXRfYiAiCi0JCQkJImZhaWxlZCBmb3IgaG9zdD0lbHVcbiIsCi0JCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzAzZiwKKwkJCSAgICAiRE1BIGFsbG9jIGZhaWxlZCBmb3IgbWdtdF9iLlxuIik7CiAJCQlydmFsID0gLUVOT01FTTsKIAkJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAkJfQpAQCAtMTA5NCw2ICsxMTEwLDggQEAKIAkJCWJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOwogCiAJCWlmICghc2dfY250KSB7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDQwLAorCQkJICAgICJkbWFfbWFwX3NnIHJldHVybmVkICVkLlxuIiwgc2dfY250KTsKIAkJCXJ2YWwgPSAtRU5PTUVNOwogCQkJZ290byBleGl0X21nbXQ7CiAJCX0KQEAgLTExMDEsMTAgKzExMTksMTAgQEAKIAkJZG1hX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAKIAkJaWYgKHNnX2NudCAhPSBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250KSB7Ci0JCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkJCSJkbWEgbWFwcGluZyByZXN1bHRlZCBpbiBkaWZmZXJlbnQgc2cgY291bnRzICIKLQkJCQkicmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXggIiwKLQkJCQlic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBzZ19jbnQpKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNDEsCisJCQkgICAgIkRNQSBtYXBwaW5nIHJlc3VsdGVkIGluIGRpZmZlcmVudCBzZyBjb3VudHMsICIKKwkJCSAgICAicmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXguXG4iLAorCQkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIHNnX2NudCk7CiAJCQlydmFsID0gLUVBR0FJTjsKIAkJCWdvdG8gZG9uZV91bm1hcF9zZzsKIAkJfQpAQCAtMTExMyw5ICsxMTMxLDggQEAKIAkJbWdtdF9iID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBkYXRhX2xlbiwKIAkJCSZtZ210X2RtYSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbWdtdF9iKSB7Ci0JCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlczogZG1hIGFsbG9jIGZvciBtZ210X2IgIgotCQkJCSJmYWlsZWQgZm9yIGhvc3Q9JWx1XG4iLAotCQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNDIsCisJCQkgICAgIkRNQSBhbGxvYyBmYWlsZWQgZm9yIG1nbXRfYi5cbiIpOwogCQkJcnZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGRvbmVfdW5tYXBfc2c7CiAJCX0KQEAgLTExNTYsMTUgKzExNzMsMTUgQEAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgbW4sIG1uX2RtYSwgMCk7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSglbGQpIFZlbmRvciAiCi0JCQkicmVxdWVzdCA4NHh4IG1nbXQgZmFpbGVkXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA0MywKKwkJICAgICJWZW5kb3IgcmVxdWVzdCA4NHh4IG1nbXQgZmFpbGVkLlxuIik7CiAKIAkJcnZhbCA9IGJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7CiAKIAl9IGVsc2UgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2NzaSglbGQpIFZlbmRvciAiCi0JCQkicmVxdWVzdCA4NHh4IG1nbXQgY29tcGxldGVkXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA0NCwKKwkJICAgICJWZW5kb3IgcmVxdWVzdCA4NHh4IG1nbXQgY29tcGxldGVkLlxuIik7CiAKIAkJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOwogCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX09LOwpAQCAtMTIwNCw3ICsxMjIxLDYgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CiAJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOwotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCWludCBydmFsID0gMDsKIAlzdHJ1Y3QgcWxhX3BvcnRfcGFyYW0gKnBvcnRfcGFyYW0gPSBOVUxMOwogCWZjX3BvcnRfdCAqZmNwb3J0ID0gTlVMTDsKQEAgLTEyMTUsMjYgKzEyMzEsMjcgQEAKIAogCWlmICh0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpIHx8CiAJCXRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgfHwKLQkJdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKQorCQl0ZXN0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncykpIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA0NSwgImFib3J0IGFjdGl2ZSBvciBuZWVkZWQuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlpZiAoIUlTX0lJRE1BX0NBUEFCTEUodmhhLT5odykpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIiVzKCVsdSk6IGlpRE1BIG5vdCAiCi0JCQkic3VwcG9ydGVkXG4iLCAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDQ2LCAiaWlETUEgbm90IHN1cHBvcnRlZC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlwb3J0X3BhcmFtID0gKHN0cnVjdCBxbGFfcG9ydF9wYXJhbSAqKSgoY2hhciAqKWJzZ19qb2ItPnJlcXVlc3QgKwogCQlzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSk7CiAJaWYgKCFwb3J0X3BhcmFtKSB7Ci0JCURFQlVHMihwcmludGsoIiVzKCVsZCk6IHBvcnRfcGFyYW0gaGVhZGVyIG5vdCBwcm92aWRlZCwgIgotCQkJImV4aXRpbmcuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNDcsCisJCSAgICAicG9ydF9wYXJhbSBoZWFkZXIgbm90IHByb3ZpZGVkLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChwb3J0X3BhcmFtLT5mY19zY3NpX2FkZHIuZGVzdF90eXBlICE9IEVYVF9ERUZfVFlQRV9XV1BOKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzKCVsZCk6IEludmFsaWQgZGVzdGluYXRpb24gdHlwZVxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA0OCwKKwkJICAgICJJbnZhbGlkIGRlc3RpbmF0aW9uIHR5cGUuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjQ5LDIxICsxMjY2LDIwIEBACiAJfQogCiAJaWYgKCFmY3BvcnQpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXMoJWxkKTogRmFpbGVkIHRvIGZpbmQgcG9ydFxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA0OSwKKwkJICAgICJGYWlsZWQgdG8gZmluZCBwb3J0LlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbGQpOiBQb3J0IG5vdCBvbmxpbmVcbiIsCi0JCQlfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNGEsCisJCSAgICAiUG9ydCBpcyBub3Qgb25saW5lLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChmY3BvcnQtPmZsYWdzICYgRkNGX0xPR0lOX05FRURFRCkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlcyglbGQpOiBSZW1vdGUgcG9ydCBub3QgbG9nZ2VkIGluLCAiCi0JCSAgICAiZmxhZ3MgPSAweCV4XG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgZmNwb3J0LT5mbGFncykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDRiLAorCQkgICAgIlJlbW90ZSBwb3J0IG5vdCBsb2dnZWQgaW4gZmxhZ3MgPSAweCV4LlxuIiwgZmNwb3J0LT5mbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTI3NSwxNSArMTI5MSwxMyBAQAogCQkJJnBvcnRfcGFyYW0tPnNwZWVkLCBtYik7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzE2KHByaW50ayhLRVJOX0VSUiAic2NzaSglbGQpOiBpSURNQSBjbWQgZmFpbGVkIGZvciAiCi0JCQkiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggLS0gIgotCQkJIiUwNHggJXggJTA0eCAlMDR4LlxuIiwKLQkJCXZoYS0+aG9zdF9ubywgZmNwb3J0LT5wb3J0X25hbWVbMF0sCi0JCQlmY3BvcnQtPnBvcnRfbmFtZVsxXSwKLQkJCWZjcG9ydC0+cG9ydF9uYW1lWzJdLCBmY3BvcnQtPnBvcnRfbmFtZVszXSwKLQkJCWZjcG9ydC0+cG9ydF9uYW1lWzRdLCBmY3BvcnQtPnBvcnRfbmFtZVs1XSwKLQkJCWZjcG9ydC0+cG9ydF9uYW1lWzZdLCBmY3BvcnQtPnBvcnRfbmFtZVs3XSwgcnZhbCwKLQkJCWZjcG9ydC0+ZnBfc3BlZWQsIG1iWzBdLCBtYlsxXSkpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDRjLAorCQkgICAgImlJRE1BIGNtZCBmYWlsZWQgZm9yICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IC0tICIKKwkJICAgICIlMDR4ICV4ICUwNHggJTA0eC5cbiIsIGZjcG9ydC0+cG9ydF9uYW1lWzBdLAorCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbMV0sIGZjcG9ydC0+cG9ydF9uYW1lWzJdLAorCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbM10sIGZjcG9ydC0+cG9ydF9uYW1lWzRdLAorCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbNV0sIGZjcG9ydC0+cG9ydF9uYW1lWzZdLAorCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbN10sIHJ2YWwsIGZjcG9ydC0+ZnBfc3BlZWQsIG1iWzBdLCBtYlsxXSk7CiAJCXJ2YWwgPSAwOwogCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7CiAKQEAgLTEzMDcsMTEgKzEzMjEsMTIgQEAKIH0KIAogc3RhdGljIGludAotcWxhMngwMF9vcHRyb21fc2V0dXAoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IsIHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEsCitxbGEyeDAwX29wdHJvbV9zZXR1cChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYiwgc2NzaV9xbGFfaG9zdF90ICp2aGEsCiAJdWludDhfdCBpc191cGRhdGUpCiB7CiAJdWludDMyX3Qgc3RhcnQgPSAwOwogCWludCB2YWxpZCA9IDA7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKIAlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIApAQCAtMTMxOSwxNCArMTMzNCwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0YXJ0ID0gYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWRbMV07Ci0JaWYgKHN0YXJ0ID4gaGEtPm9wdHJvbV9zaXplKQorCWlmIChzdGFydCA+IGhhLT5vcHRyb21fc2l6ZSkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDU1LAorCQkgICAgInN0YXJ0ICVkID4gb3B0cm9tX3NpemUgJWQuXG4iLCBzdGFydCwgaGEtPm9wdHJvbV9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKGhhLT5vcHRyb21fc3RhdGUgIT0gUUxBX1NXQUlUSU5HKQorCWlmIChoYS0+b3B0cm9tX3N0YXRlICE9IFFMQV9TV0FJVElORykgeworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg3MDU2LAorCQkgICAgIm9wdHJvbV9zdGF0ZSAlZC5cbiIsIGhhLT5vcHRyb21fc3RhdGUpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWhhLT5vcHRyb21fcmVnaW9uX3N0YXJ0ID0gc3RhcnQ7Ci0KKwlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDU3LCAiaXNfdXBkYXRlPSVkLlxuIiwgaXNfdXBkYXRlKTsKIAlpZiAoaXNfdXBkYXRlKSB7CiAJCWlmIChoYS0+b3B0cm9tX3NpemUgPT0gT1BUUk9NX1NJWkVfMjMwMCAmJiBzdGFydCA9PSAwKQogCQkJdmFsaWQgPSAxOwpAQCAtMTMzNyw5ICsxMzU4LDkgQEAKIAkJICAgIElTX1FMQThYWFhfVFlQRShoYSkpCiAJCQl2YWxpZCA9IDE7CiAJCWlmICghdmFsaWQpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiSW52YWxpZCBzdGFydCByZWdpb24gMHgleC8weCV4LlxuIiwKLQkJCSAgICBzdGFydCwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwNTgsCisJCQkgICAgIkludmFsaWQgc3RhcnQgcmVnaW9uIDB4JXgvMHgleC5cbiIsIHN0YXJ0LAorCQkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMzU4LDkgKzEzNzksOSBAQAogCiAJaGEtPm9wdHJvbV9idWZmZXIgPSB2bWFsbG9jKGhhLT5vcHRyb21fcmVnaW9uX3NpemUpOwogCWlmICghaGEtPm9wdHJvbV9idWZmZXIpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDU5LAogCQkgICAgIlJlYWQ6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9wdHJvbSByZXRyaWV2YWwgIgotCQkgICAgIigleCkuXG4iLCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKKwkJICAgICIoJXgpXG4iLCBoYS0+b3B0cm9tX3JlZ2lvbl9zaXplKTsKIAogCQloYS0+b3B0cm9tX3N0YXRlID0gUUxBX1NXQUlUSU5HOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzNzgsNyArMTM5OSw3IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJaW50IHJ2YWwgPSAwOwogCi0JcnZhbCA9IHFsYTJ4MDBfb3B0cm9tX3NldHVwKGJzZ19qb2IsIGhhLCAwKTsKKwlydmFsID0gcWxhMngwMF9vcHRyb21fc2V0dXAoYnNnX2pvYiwgdmhhLCAwKTsKIAlpZiAocnZhbCkKIAkJcmV0dXJuIHJ2YWw7CiAKQEAgLTE0MDYsNyArMTQyNyw3IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJaW50IHJ2YWwgPSAwOwogCi0JcnZhbCA9IHFsYTJ4MDBfb3B0cm9tX3NldHVwKGJzZ19qb2IsIGhhLCAxKTsKKwlydmFsID0gcWxhMngwMF9vcHRyb21fc2V0dXAoYnNnX2pvYiwgdmhhLCAxKTsKIAlpZiAocnZhbCkKIAkJcmV0dXJuIHJ2YWw7CiAKQEAgLTE0NjQsNiArMTQ4NSwyMyBAQAogcWxhMjR4eF9ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCWZjX3BvcnRfdCAqZmNwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhOworCisJaWYgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX1JQVF9FTFMpIHsKKwkJcnBvcnQgPSBic2dfam9iLT5ycG9ydDsKKwkJZmNwb3J0ID0gKihmY19wb3J0X3QgKiopIHJwb3J0LT5kZF9kYXRhOworCQlob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCQl2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCX0gZWxzZSB7CisJCWhvc3QgPSBic2dfam9iLT5zaG9zdDsKKwkJdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwl9CisKKwlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDAwLAorCSAgICAiRW50ZXJlZCAlcyBtc2djb2RlPSVkLlxuIiwgX19mdW5jX18sIGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUpOwogCiAJc3dpdGNoIChic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlKSB7CiAJY2FzZSBGQ19CU0dfUlBUX0VMUzoKQEAgLTE0ODAsNyArMTUxOCw3IEBACiAJY2FzZSBGQ19CU0dfSFNUX0RFTF9SUE9SVDoKIAljYXNlIEZDX0JTR19SUFRfQ1Q6CiAJZGVmYXVsdDoKLQkJREVCVUcyKHByaW50aygicWxhMnh4eDogdW5zdXBwb3J0ZWQgQlNHIHJlcXVlc3RcbiIpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA1YSwgIlVuc3VwcG9ydGVkIEJTRyByZXF1ZXN0LlxuIik7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTUxNCwxNyArMTU1MiwxNSBAQAogCQkJCQkmJiAoc3BfYnNnLT51LmJzZ19qb2IgPT0gYnNnX2pvYikpIHsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJCQkJaWYgKGhhLT5pc3Bfb3BzLT5hYm9ydF9jb21tYW5kKHNwKSkgewotCQkJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCQkJCSAgICAic2NzaSglbGQpOiBtYnggIgotCQkJCQkJICAgICJhYm9ydF9jb21tYW5kIGZhaWxlZFxuIiwKLQkJCQkJCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwODksCisJCQkJCQkgICAgIm1ieCBhYm9ydF9jb21tYW5kICIKKwkJCQkJCSAgICAiZmFpbGVkLlxuIik7CiAJCQkJCQlic2dfam9iLT5yZXEtPmVycm9ycyA9CiAJCQkJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gLUVJTzsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJCQkgICAgInNjc2koJWxkKTogbWJ4ICIKLQkJCQkJCSAgICAiYWJvcnRfY29tbWFuZCBzdWNjZXNzXG4iLAotCQkJCQkJICAgIHZoYS0+aG9zdF9ubykpOworCQkJCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4YSwKKwkJCQkJCSAgICAibWJ4IGFib3J0X2NvbW1hbmQgIgorCQkJCQkJICAgICJzdWNjZXNzLlxuIik7CiAJCQkJCQlic2dfam9iLT5yZXEtPmVycm9ycyA9CiAJCQkJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKIAkJCQkJfQpAQCAtMTUzNSw4ICsxNTcxLDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSJzY3NpKCVsZCkgU1JCIG5vdCBmb3VuZCB0byBhYm9ydFxuIiwgdmhhLT5ob3N0X25vKSk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NzA4YiwgIlNSQiBub3QgZm91bmQgdG8gYWJvcnQuXG4iKTsKIAlic2dfam9iLT5yZXEtPmVycm9ycyA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAtRU5YSU87CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYwppbmRleCBjNTM3MTlhLi5kNzljZDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCkBAIC00LDEwICs0LDM2IEBACiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLworCisvKgorICogVGFibGUgZm9yIHNob3dpbmcgdGhlIGN1cnJlbnQgbWVzc2FnZSBpZCBpbiB1c2UgZm9yIHBhcnRpY3VsYXIgbGV2ZWwKKyAqIENoYW5nZSB0aGlzIHRhYmxlIGZvciBhZGRpdGlvbiBvZiBsb2cvZGVidWcgbWVzc2FnZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8ICAgICAgICAgICAgIExldmVsICAgICAgICAgICAgfCAgIExhc3QgVmFsdWUgVXNlZCAgfCAgICAgSG9sZXMJfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBNb2R1bGUgSW5pdCBhbmQgUHJvYmUgICAgICAgIHwgICAgICAgMHgwMTE2ICAgICAgIHwgIAkJfAorICogfCBNYWlsYm94IGNvbW1hbmRzICAgICAgICAgICAgIHwgICAgICAgMHgxMTI2ICAgICAgIHwJCXwKKyAqIHwgRGV2aWNlIERpc2NvdmVyeSAgICAgICAgICAgICB8ICAgICAgIDB4MjA4MyAgICAgICB8CQl8CisgKiB8IFF1ZXVlIENvbW1hbmQgYW5kIElPIHRyYWNpbmcgfCAgICAgICAweDMwMmUgICAgICAgfCAgICAgMHgzMDA4ICAgICB8CisgKiB8IERQQyBUaHJlYWQgICAgICAgICAgICAgICAgICAgfCAgICAgICAweDQwMWMgICAgICAgfAkJfAorICogfCBBc3luYyBFdmVudHMgICAgICAgICAgICAgICAgIHwgICAgICAgMHg1MDU5ICAgICAgIHwJCXwKKyAqIHwgVGltZXIgUm91dGluZXMgICAgICAgICAgICAgICB8ICAgICAgIDB4NjAwZCAgICAgICB8CQl8CisgKiB8IFVzZXIgU3BhY2UgSW50ZXJhY3Rpb25zICAgICAgfCAgICAgICAweDcwOWQgICAgICAgfAkJfAorICogfCBUYXNrIE1hbmFnZW1lbnQgICAgICAgICAgICAgIHwgICAgICAgMHg4MDQxICAgICAgIHwgICAgCQl8CisgKiB8IEFFUi9FRUggICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAweDkwMGYgICAgICAgfAkJfAorICogfCBWaXJ0dWFsIFBvcnQgICAgICAgICAgICAgICAgIHwgICAgICAgMHhhMDA3ICAgICAgIHwJCXwKKyAqIHwgSVNQODJYWCBTcGVjaWZpYyAgICAgICAgICAgICB8ICAgICAgIDB4YjA0ZiAgICAgICB8ICAgIAkJfAorICogfCBNdWx0aVEgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgMHhjMDBiICAgICAgIHwJCXwKKyAqIHwgTWlzYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIDB4ZDAwYiAgICAgICB8CQl8CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwogI2luY2x1ZGUgInFsYV9kZWYuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKK3N0YXRpYyB1aW50MzJfdCBxbF9kYmdfb2Zmc2V0ID0gMHg4MDA7CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWxhMnh4eF9wcmVwX2R1bXAoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3RydWN0IHFsYTJ4eHhfZndfZHVtcCAqZndfZHVtcCkKIHsKQEAgLTM4MywxMSArNDA5LDExIEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmFpbGVkIHRvIGR1bXAgZmlybXdhcmUgKCV4KSEhIVxuIiwgcnZhbCk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGQwMDAsCisJCSAgICAiRmFpbGVkIHRvIGR1bXAgZmlybXdhcmUgKCV4KS5cbiIsIHJ2YWwpOwogCQloYS0+ZndfZHVtcGVkID0gMDsKIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweGQwMDEsCiAJCSAgICAiRmlybXdhcmUgZHVtcCBzYXZlZCB0byB0ZW1wIGJ1ZmZlciAoJWxkLyVwKS5cbiIsCiAJCSAgICB2aGEtPmhvc3Rfbm8sIGhhLT5md19kdW1wKTsKIAkJaGEtPmZ3X2R1bXBlZCA9IDE7CkBAIC00MTksMTUgKzQ0NSwxNiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAogCWlmICghaGEtPmZ3X2R1bXApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIk5vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIGR1bXAhISFcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhkMDAyLAorCQkgICAgIk5vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIGR1bXAuXG4iKTsKIAkJZ290byBxbGEyMzAwX2Z3X2R1bXBfZmFpbGVkOwogCX0KIAogCWlmIChoYS0+ZndfZHVtcGVkKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJGaXJtd2FyZSBoYXMgYmVlbiBwcmV2aW91c2x5IGR1bXBlZCAoJXApIC0tIGlnbm9yaW5nICIKLQkJICAgICJyZXF1ZXN0Li4uXG4iLCBoYS0+ZndfZHVtcCk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGQwMDMsCisJCSAgICAiRmlybXdhcmUgaGFzIGJlZW4gcHJldmlvdXNseSBkdW1wZWQgKCVwKSAiCisJCSAgICAiLS0gaWdub3JpbmcgcmVxdWVzdC5cbiIsCisJCSAgICBoYS0+ZndfZHVtcCk7CiAJCWdvdG8gcWxhMjMwMF9md19kdW1wX2ZhaWxlZDsKIAl9CiAJZncgPSAmaGEtPmZ3X2R1bXAtPmlzcC5pc3AyMzsKQEAgLTU4MiwxNSArNjA5LDE2IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFoYS0+ZndfZHVtcCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiTm8gYnVmZmVyIGF2YWlsYWJsZSBmb3IgZHVtcCEhIVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGQwMDQsCisJCSAgICAiTm8gYnVmZmVyIGF2YWlsYWJsZSBmb3IgZHVtcC5cbiIpOwogCQlnb3RvIHFsYTIxMDBfZndfZHVtcF9mYWlsZWQ7CiAJfQogCiAJaWYgKGhhLT5md19kdW1wZWQpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkZpcm13YXJlIGhhcyBiZWVuIHByZXZpb3VzbHkgZHVtcGVkICglcCkgLS0gaWdub3JpbmcgIgotCQkgICAgInJlcXVlc3QuLi5cbiIsIGhhLT5md19kdW1wKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ZDAwNSwKKwkJICAgICJGaXJtd2FyZSBoYXMgYmVlbiBwcmV2aW91c2x5IGR1bXBlZCAoJXApICIKKwkJICAgICItLSBpZ25vcmluZyByZXF1ZXN0LlxuIiwKKwkJICAgIGhhLT5md19kdW1wKTsKIAkJZ290byBxbGEyMTAwX2Z3X2R1bXBfZmFpbGVkOwogCX0KIAlmdyA9ICZoYS0+ZndfZHVtcC0+aXNwLmlzcDIxOwpAQCAtNzc5LDE1ICs4MDcsMTYgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWhhLT5md19kdW1wKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJObyBidWZmZXIgYXZhaWxhYmxlIGZvciBkdW1wISEhXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ZDAwNiwKKwkJICAgICJObyBidWZmZXIgYXZhaWxhYmxlIGZvciBkdW1wLlxuIik7CiAJCWdvdG8gcWxhMjR4eF9md19kdW1wX2ZhaWxlZDsKIAl9CiAKIAlpZiAoaGEtPmZ3X2R1bXBlZCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmlybXdhcmUgaGFzIGJlZW4gcHJldmlvdXNseSBkdW1wZWQgKCVwKSAtLSBpZ25vcmluZyAiCi0JCSAgICAicmVxdWVzdC4uLlxuIiwgaGEtPmZ3X2R1bXApOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhkMDA3LAorCQkgICAgIkZpcm13YXJlIGhhcyBiZWVuIHByZXZpb3VzbHkgZHVtcGVkICglcCkgIgorCQkgICAgIi0tIGlnbm9yaW5nIHJlcXVlc3QuXG4iLAorCQkgICAgaGEtPmZ3X2R1bXApOwogCQlnb3RvIHFsYTI0eHhfZndfZHVtcF9mYWlsZWQ7CiAJfQogCWZ3ID0gJmhhLT5md19kdW1wLT5pc3AuaXNwMjQ7CkBAIC0xMDE3LDE1ICsxMDQ2LDE2IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFoYS0+ZndfZHVtcCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiTm8gYnVmZmVyIGF2YWlsYWJsZSBmb3IgZHVtcCEhIVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGQwMDgsCisJCSAgICAiTm8gYnVmZmVyIGF2YWlsYWJsZSBmb3IgZHVtcC5cbiIpOwogCQlnb3RvIHFsYTI1eHhfZndfZHVtcF9mYWlsZWQ7CiAJfQogCiAJaWYgKGhhLT5md19kdW1wZWQpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkZpcm13YXJlIGhhcyBiZWVuIHByZXZpb3VzbHkgZHVtcGVkICglcCkgLS0gaWdub3JpbmcgIgotCQkgICAgInJlcXVlc3QuLi5cbiIsIGhhLT5md19kdW1wKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ZDAwOSwKKwkJICAgICJGaXJtd2FyZSBoYXMgYmVlbiBwcmV2aW91c2x5IGR1bXBlZCAoJXApICIKKwkJICAgICItLSBpZ25vcmluZyByZXF1ZXN0LlxuIiwKKwkJICAgIGhhLT5md19kdW1wKTsKIAkJZ290byBxbGEyNXh4X2Z3X2R1bXBfZmFpbGVkOwogCX0KIAlmdyA9ICZoYS0+ZndfZHVtcC0+aXNwLmlzcDI1OwpAQCAtMTMyOCwxNSArMTM1OCwxNiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAogCWlmICghaGEtPmZ3X2R1bXApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIk5vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIGR1bXAhISFcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhkMDBhLAorCQkgICAgIk5vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIGR1bXAuXG4iKTsKIAkJZ290byBxbGE4MXh4X2Z3X2R1bXBfZmFpbGVkOwogCX0KIAogCWlmIChoYS0+ZndfZHVtcGVkKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJGaXJtd2FyZSBoYXMgYmVlbiBwcmV2aW91c2x5IGR1bXBlZCAoJXApIC0tIGlnbm9yaW5nICIKLQkJICAgICJyZXF1ZXN0Li4uXG4iLCBoYS0+ZndfZHVtcCk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGQwMGIsCisJCSAgICAiRmlybXdhcmUgaGFzIGJlZW4gcHJldmlvdXNseSBkdW1wZWQgKCVwKSAiCisJCSAgICAiLS0gaWdub3JpbmcgcmVxdWVzdC5cbiIsCisJCSAgICBoYS0+ZndfZHVtcCk7CiAJCWdvdG8gcWxhODF4eF9md19kdW1wX2ZhaWxlZDsKIAl9CiAJZncgPSAmaGEtPmZ3X2R1bXAtPmlzcC5pc3A4MTsKQEAgLTE2MTksMTA2ICsxNjUwLDI1NSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgRGVidWcgRnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGZvcm1hdHRpbmcgYW5kIGxvZ2dpbmcgZGVidWcgaW5mb3JtYXRpb24uCisgKiBJdCBpcyB0byBiZSB1c2VkIHdoZW4gdmhhIGlzIGF2YWlsYWJsZS4gSXQgZm9ybWF0cyB0aGUgbWVzc2FnZQorICogYW5kIGxvZ3MgaXQgdG8gdGhlIG1lc3NhZ2VzIGZpbGUuCisgKiBwYXJhbWV0ZXJzOgorICogbGV2ZWw6IFRoZSBsZXZlbCBvZiB0aGUgZGVidWcgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZC4KKyAqICAgICAgICBJZiBxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZyB2YWx1ZSBpcyBjb3JyZWN0bHkgc2V0LAorICogICAgICAgIHRoaXMgbWVzc2FnZSB3aWxsIGFwcGVhciBpbiB0aGUgbWVzc2FnZXMgZmlsZS4KKyAqIHZoYTogICBQb2ludGVyIHRvIHRoZSBzY3NpX3FsYV9ob3N0X3QuCisgKiBpZDogICAgVGhpcyBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbGV2ZWwuIEl0IGlkZW50aWZpZXMgdGhlCisgKiAgICAgICAgcGFydCBvZiB0aGUgY29kZSBmcm9tIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZWQuCisgKiBtc2c6ICAgVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLgorICovCit2b2lkCitxbF9kYmcodWludDMyX3QgbGV2ZWwsIHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBpbnQzMl90IGlkLCBjaGFyICptc2csIC4uLikgeworCisJY2hhciBwYnVmW1FMX0RCR19CVUZfTEVOXTsKKwl2YV9saXN0IGFwOworCXVpbnQzMl90IGxlbjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisKKwltZW1zZXQocGJ1ZiwgMCwgUUxfREJHX0JVRl9MRU4pOworCisJdmFfc3RhcnQoYXAsIG1zZyk7CisKKwlpZiAoKGxldmVsICYgcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpID09IGxldmVsKSB7CisJCWlmICh2aGEgIT0gTlVMTCkgeworCQkJcGRldiA9IHZoYS0+aHctPnBkZXY7CisJCQkvKiA8bW9kdWxlLW5hbWU+IDxwY2ktbmFtZT4gPG1zZy1pZD46PGhvc3Q+IE1lc3NhZ2UgKi8KKwkJCXNwcmludGYocGJ1ZiwgIiVzIFslc10tJTA0eDolbGQ6ICIsIFFMX01TR0hEUiwKKwkJCSAgICBkZXZfbmFtZSgmKHBkZXYtPmRldikpLCBpZCArIHFsX2RiZ19vZmZzZXQsCisJCQkgICAgdmhhLT5ob3N0X25vKTsKKwkJfSBlbHNlCisJCQlzcHJpbnRmKHBidWYsICIlcyBbJXNdLSUwNHg6IDogIiwgUUxfTVNHSERSLAorCQkJICAgICIwMDAwOjAwOjAwLjAiLCBpZCArIHFsX2RiZ19vZmZzZXQpOworCisJCWxlbiA9IHN0cmxlbihwYnVmKTsKKwkJdnNwcmludGYocGJ1ZitsZW4sIG1zZywgYXApOworCQlwcl93YXJuaW5nKCIlcyIsIHBidWYpOworCX0KKworCXZhX2VuZChhcCk7CisKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGZvcm1hdHRpbmcgYW5kIGxvZ2dpbmcgZGVidWcgaW5mb3JtYXRpb24uCisgKiBJdCBpcyB0byBiZSB1c2VkIHdoZW4gdmhhIGlzIG5vdCBhdmFpbGFibGUgYW5kIHBjaSBpcyBhdmFpbGJsZSwKKyAqIGkuZS4sIGJlZm9yZSBob3N0IGFsbG9jYXRpb24uIEl0IGZvcm1hdHMgdGhlIG1lc3NhZ2UgYW5kIGxvZ3MgaXQKKyAqIHRvIHRoZSBtZXNzYWdlcyBmaWxlLgorICogcGFyYW1ldGVyczoKKyAqIGxldmVsOiBUaGUgbGV2ZWwgb2YgdGhlIGRlYnVnIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQuCisgKiAgICAgICAgSWYgcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgdmFsdWUgaXMgY29ycmVjdGx5IHNldCwKKyAqICAgICAgICB0aGlzIG1lc3NhZ2Ugd2lsbCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2VzIGZpbGUuCisgKiBwZGV2OiAgUG9pbnRlciB0byB0aGUgc3RydWN0IHBjaV9kZXYuCisgKiBpZDogICAgVGhpcyBpcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGxldmVsLiBJdCBpZGVudGlmaWVzIHRoZSBwYXJ0CisgKiAgICAgICAgb2YgdGhlIGNvZGUgZnJvbSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVkLgorICogbXNnOiAgIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC4KKyAqLwordm9pZAorcWxfZGJnX3BjaSh1aW50MzJfdCBsZXZlbCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludDMyX3QgaWQsIGNoYXIgKm1zZywgLi4uKSB7CisKKwljaGFyIHBidWZbUUxfREJHX0JVRl9MRU5dOworCXZhX2xpc3QgYXA7CisJdWludDMyX3QgbGVuOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbWVtc2V0KHBidWYsIDAsIFFMX0RCR19CVUZfTEVOKTsKKworCXZhX3N0YXJ0KGFwLCBtc2cpOworCisJaWYgKChsZXZlbCAmIHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSA9PSBsZXZlbCkgeworCQkvKiA8bW9kdWxlLW5hbWU+IDxkZXYtbmFtZT46PG1zZy1pZD4gTWVzc2FnZSAqLworCQlzcHJpbnRmKHBidWYsICIlcyBbJXNdLSUwNHg6IDogIiwgUUxfTVNHSERSLAorCQkgICAgZGV2X25hbWUoJihwZGV2LT5kZXYpKSwgaWQgKyBxbF9kYmdfb2Zmc2V0KTsKKworCQlsZW4gPSBzdHJsZW4ocGJ1Zik7CisJCXZzcHJpbnRmKHBidWYrbGVuLCBtc2csIGFwKTsKKwkJcHJfd2FybmluZygiJXMiLCBwYnVmKTsKKwl9CisKKwl2YV9lbmQoYXApOworCit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBmb3JtYXR0aW5nIGFuZCBsb2dnaW5nIGxvZyBtZXNzYWdlcy4KKyAqIEl0IGlzIHRvIGJlIHVzZWQgd2hlbiB2aGEgaXMgYXZhaWxhYmxlLiBJdCBmb3JtYXRzIHRoZSBtZXNzYWdlCisgKiBhbmQgbG9ncyBpdCB0byB0aGUgbWVzc2FnZXMgZmlsZS4gQWxsIHRoZSBtZXNzYWdlcyB3aWxsIGJlIGxvZ2dlZAorICogaXJyZXNwZWN0aXZlIG9mIHZhbHVlIG9mIHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nLgorICogcGFyYW1ldGVyczoKKyAqIGxldmVsOiBUaGUgbGV2ZWwgb2YgdGhlIGxvZyBtZXNzYWdlcyB0byBiZSBwcmludGVkIGluIHRoZQorICogICAgICAgIG1lc3NhZ2VzIGZpbGUuCisgKiB2aGE6ICAgUG9pbnRlciB0byB0aGUgc2NzaV9xbGFfaG9zdF90CisgKiBpZDogICAgVGhpcyBpcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGxldmVsLiBJdCBpZGVudGlmaWVzIHRoZQorICogICAgICAgIHBhcnQgb2YgdGhlIGNvZGUgZnJvbSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVkLgorICogbXNnOiAgIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC4KKyAqLwordm9pZAorcWxfbG9nKHVpbnQzMl90IGxldmVsLCBzY3NpX3FsYV9ob3N0X3QgKnZoYSwgaW50MzJfdCBpZCwgY2hhciAqbXNnLCAuLi4pIHsKKworCWNoYXIgcGJ1ZltRTF9EQkdfQlVGX0xFTl07CisJdmFfbGlzdCBhcDsKKwl1aW50MzJfdCBsZW47CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCisJbWVtc2V0KHBidWYsIDAsIFFMX0RCR19CVUZfTEVOKTsKKworCXZhX3N0YXJ0KGFwLCBtc2cpOworCisJaWYgKGxldmVsIDw9IHFsX2VycmxldikgeworCQlpZiAodmhhICE9IE5VTEwpIHsKKwkJCXBkZXYgPSB2aGEtPmh3LT5wZGV2OworCQkJLyogPG1vZHVsZS1uYW1lPiA8bXNnLWlkPjo8aG9zdD4gTWVzc2FnZSAqLworCQkJc3ByaW50ZihwYnVmLCAiJXMgWyVzXS0lMDR4OiVsZDogIiwgUUxfTVNHSERSLAorCQkJICAgIGRldl9uYW1lKCYocGRldi0+ZGV2KSksIGlkLCB2aGEtPmhvc3Rfbm8pOworCQl9IGVsc2UKKwkJCXNwcmludGYocGJ1ZiwgIiVzIFslc10tJTA0eDogOiAiLCBRTF9NU0dIRFIsCisJCQkgICAgIjAwMDA6MDA6MDAuMCIsIGlkKTsKKworCQlsZW4gPSBzdHJsZW4ocGJ1Zik7CisJCQl2c3ByaW50ZihwYnVmK2xlbiwgbXNnLCBhcCk7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCQljYXNlIDA6IC8qIEZBVEFMIExPRyAqLworCQkJcHJfY3JpdCgiJXMiLCBwYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwcl9lcnIoIiVzIiwgcGJ1Zik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcHJfd2FybigiJXMiLCBwYnVmKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfaW5mbygiJXMiLCBwYnVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdmFfZW5kKGFwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGZvcm1hdHRpbmcgYW5kIGxvZ2dpbmcgbG9nIG1lc3NhZ2VzLgorICogSXQgaXMgdG8gYmUgdXNlZCB3aGVuIHZoYSBpcyBub3QgYXZhaWxhYmxlIGFuZCBwY2kgaXMgYXZhaWxibGUsCisgKiBpLmUuLCBiZWZvcmUgaG9zdCBhbGxvY2F0aW9uLiBJdCBmb3JtYXRzIHRoZSBtZXNzYWdlIGFuZCBsb2dzCisgKiBpdCB0byB0aGUgbWVzc2FnZXMgZmlsZS4gQWxsIHRoZSBtZXNzYWdlcyBhcmUgbG9nZ2VkIGlycmVzcGVjdGl2ZQorICogb2YgdGhlIHZhbHVlIG9mIHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nLgorICogcGFyYW1ldGVyczoKKyAqIGxldmVsOiBUaGUgbGV2ZWwgb2YgdGhlIGxvZyBtZXNzYWdlcyB0byBiZSBwcmludGVkIGluIHRoZQorICogICAgICAgIG1lc3NhZ2VzIGZpbGUuCisgKiBwZGV2OiAgUG9pbnRlciB0byB0aGUgc3RydWN0IHBjaV9kZXYuCisgKiBpZDogICAgVGhpcyBpcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGxldmVsLiBJdCBpZGVudGlmaWVzIHRoZQorICogICAgICAgIHBhcnQgb2YgdGhlIGNvZGUgZnJvbSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVkLgorICogbXNnOiAgIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC4KKyAqLwordm9pZAorcWxfbG9nX3BjaSh1aW50MzJfdCBsZXZlbCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludDMyX3QgaWQsIGNoYXIgKm1zZywgLi4uKSB7CisKKwljaGFyIHBidWZbUUxfREJHX0JVRl9MRU5dOworCXZhX2xpc3QgYXA7CisJdWludDMyX3QgbGVuOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbWVtc2V0KHBidWYsIDAsIFFMX0RCR19CVUZfTEVOKTsKKworCXZhX3N0YXJ0KGFwLCBtc2cpOworCisJaWYgKGxldmVsIDw9IHFsX2VycmxldikgeworCQkvKiA8bW9kdWxlLW5hbWU+IDxkZXYtbmFtZT46PG1zZy1pZD4gTWVzc2FnZSAqLworCQlzcHJpbnRmKHBidWYsICIlcyBbJXNdLSUwNHg6IDogIiwgUUxfTVNHSERSLAorCQkgICAgZGV2X25hbWUoJihwZGV2LT5kZXYpKSwgaWQpOworCisJCWxlbiA9IHN0cmxlbihwYnVmKTsKKwkJdnNwcmludGYocGJ1ZitsZW4sIG1zZywgYXApOworCQlzd2l0Y2ggKGxldmVsKSB7CisJCWNhc2UgMDogLyogRkFUQUwgTE9HICovCisJCQlwcl9jcml0KCIlcyIsIHBidWYpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXByX2VycigiJXMiLCBwYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwcl93YXJuKCIlcyIsIHBidWYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcl9pbmZvKCIlcyIsIHBidWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl2YV9lbmQoYXApOworfQogCiB2b2lkCi1xbGEyeDAwX2R1bXBfcmVncyhzY3NpX3FsYV9ob3N0X3QgKnZoYSkKK3FsX2R1bXBfcmVncyh1aW50MzJfdCBsZXZlbCwgc2NzaV9xbGFfaG9zdF90ICp2aGEsIGludDMyX3QgaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICpyZWcgPSAmaGEtPmlvYmFzZS0+aXNwOwogCXN0cnVjdCBkZXZpY2VfcmVnXzI0eHggX19pb21lbSAqcmVnMjQgPSAmaGEtPmlvYmFzZS0+aXNwMjQ7CisJc3RydWN0IGRldmljZV9yZWdfODJ4eCBfX2lvbWVtICpyZWc4MiA9ICZoYS0+aW9iYXNlLT5pc3A4MjsKIAl1aW50MTZfdCBfX2lvbWVtICptYnhfcmVnOwogCi0JbWJ4X3JlZyA9IElTX0ZXSTJfQ0FQQUJMRShoYSkgPyAmcmVnMjQtPm1haWxib3gwOgotCSAgICBNQUlMQk9YX1JFRyhoYSwgcmVnLCAwKTsKKwlpZiAoKGxldmVsICYgcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpID09IGxldmVsKSB7CiAKLQlwcmludGsoIk1haWxib3ggcmVnaXN0ZXJzOlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcHJpbnRrKCJzY3NpKCVsZCk6IG1ib3ggJWQgMHglMDR4IFxuIiwgdmhhLT5ob3N0X25vLCBpLAotCQkgICAgUkRfUkVHX1dPUkQobWJ4X3JlZysrKSk7Ci19Ci0KLQotdm9pZAotcWxhMngwMF9kdW1wX2J1ZmZlcih1aW50OF90ICogYiwgdWludDMyX3Qgc2l6ZSkKLXsKLQl1aW50MzJfdCBjbnQ7Ci0JdWludDhfdCBjOwotCi0JcHJpbnRrKCIgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgIgotCSAgICAiQWggIEJoICBDaCAgRGggIEVoICBGaFxuIik7Ci0JcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotCSAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IHNpemU7KSB7Ci0JCWMgPSAqYisrOwotCQlwcmludGsoIiUwMngiLCh1aW50MzJfdCkgYyk7Ci0JCWNudCsrOwotCQlpZiAoIShjbnQgJSAxNikpCi0JCQlwcmludGsoIlxuIik7CisJCWlmIChJU19RTEE4MlhYKGhhKSkKKwkJCW1ieF9yZWcgPSAmcmVnODItPm1haWxib3hfaW5bMF07CisJCWVsc2UgaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpCisJCQltYnhfcmVnID0gJnJlZzI0LT5tYWlsYm94MDsKIAkJZWxzZQotCQkJcHJpbnRrKCIgICIpOworCQkJbWJ4X3JlZyA9IE1BSUxCT1hfUkVHKGhhLCByZWcsIDApOworCisJCXFsX2RiZyhsZXZlbCwgdmhhLCBpZCwgIk1haWxib3ggcmVnaXN0ZXJzOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlxbF9kYmcobGV2ZWwsIHZoYSwgaWQsCisJCQkgICAgIm1ib3hbJWRdIDB4JTA0eFxuIiwgaSwgUkRfUkVHX1dPUkQobWJ4X3JlZysrKSk7CiAJfQotCWlmIChjbnQgJSAxNikKLQkJcHJpbnRrKCJcbiIpOwogfQogCisKIHZvaWQKLXFsYTJ4MDBfZHVtcF9idWZmZXJfemlwcGVkKHVpbnQ4X3QgKmIsIHVpbnQzMl90IHNpemUpCitxbF9kdW1wX2J1ZmZlcih1aW50MzJfdCBsZXZlbCwgc2NzaV9xbGFfaG9zdF90ICp2aGEsIGludDMyX3QgaWQsCisJdWludDhfdCAqYiwgdWludDMyX3Qgc2l6ZSkKIHsKIAl1aW50MzJfdCBjbnQ7CiAJdWludDhfdCBjOwotCXVpbnQ4X3QgIGxhc3QxNlsxNl0sIGN1cjE2WzE2XTsKLQl1aW50MzJfdCBsYyA9IDAsIG51bV9zYW1lMTYgPSAwLCBqOworCWlmICgobGV2ZWwgJiBxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgPT0gbGV2ZWwpIHsKIAotCXByaW50ayhLRVJOX0RFQlVHICIgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgIgotCSAgICAiQWggIEJoICBDaCAgRGggIEVoICBGaFxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0JICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJcWxfZGJnKGxldmVsLCB2aGEsIGlkLCAiIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgICIKKwkJICAgICI5ICBBaCAgQmggIENoICBEaCAgRWggIEZoXG4iKTsKKwkJcWxfZGJnKGxldmVsLCB2aGEsIGlkLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAotCWZvciAoY250ID0gMDsgY250IDwgc2l6ZTspIHsKLQkJYyA9ICpiKys7Ci0KLQkJY3VyMTZbbGMrK10gPSBjOwotCi0JCWNudCsrOworCQlxbF9kYmcobGV2ZWwsIHZoYSwgaWQsICIiKTsKKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBzaXplOykgeworCQkJYyA9ICpiKys7CisJCQlwcmludGsoIiUwMngiLCAodWludDMyX3QpIGMpOworCQkJY250Kys7CisJCQlpZiAoIShjbnQgJSAxNikpCisJCQkJcHJpbnRrKCJcbiIpOworCQkJZWxzZQorCQkJCXByaW50aygiICAiKTsKKwkJfQogCQlpZiAoY250ICUgMTYpCi0JCQljb250aW51ZTsKLQotCQkvKiBXZSBoYXZlIDE2IG5vdyAqLwotCQlsYyA9IDA7Ci0JCWlmIChudW1fc2FtZTE2ID09IDApIHsKLQkJCW1lbWNweShsYXN0MTYsIGN1cjE2LCAxNik7Ci0JCQludW1fc2FtZTE2Kys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobWVtY21wKGN1cjE2LCBsYXN0MTYsIDE2KSA9PSAwKSB7Ci0JCQludW1fc2FtZTE2Kys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlMDJ4ICAiLCAodWludDMyX3QpbGFzdDE2W2pdKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7Ci0KLQkJaWYgKG51bV9zYW1lMTYgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIj4gcHJldiBwYXR0ZXJuIHJlcGVhdHMgKCV1KSIKLQkJCSAgICAibW9yZSB0aW1lc1xuIiwgbnVtX3NhbWUxNi0xKTsKLQkJbWVtY3B5KGxhc3QxNiwgY3VyMTYsIDE2KTsKLQkJbnVtX3NhbWUxNiA9IDE7Ci0JfQotCi0JaWYgKG51bV9zYW1lMTYpIHsKLQkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAgIiwgKHVpbnQzMl90KWxhc3QxNltqXSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCi0JCWlmIChudW1fc2FtZTE2ID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICI+IHByZXYgcGF0dGVybiByZXBlYXRzICgldSkiCi0JCQkgICAgIm1vcmUgdGltZXNcbiIsIG51bV9zYW1lMTYtMSk7Ci0JfQotCWlmIChsYykgewotCQlmb3IgKGogPSAwOyBqIDwgbGM7IGorKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlMDJ4ICAiLCAodWludDMyX3QpY3VyMTZbal0pOwotCQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKKwkJCXFsX2RiZyhsZXZlbCwgdmhhLCBpZCwgIlxuIik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCmluZGV4IDkzMDQxNDUuLjk4YTM3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKQEAgLTgsMTQ2ICs4LDYgQEAKICNpbmNsdWRlICJxbGFfZGVmLmgiCiAKIC8qCi0gKiBEcml2ZXIgZGVidWcgZGVmaW5pdGlvbnMuCi0gKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMSAgKi8gLyogT3V0cHV0IHJlZ2lzdGVyIGFjY2Vzc2VzIHRvIENPTTEgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMiAgKi8gLyogT3V0cHV0IGVycm9yIG1zZ3MgdG8gQ09NMSAqLwotLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8zICAqLyAvKiBPdXRwdXQgZnVuY3Rpb24gdHJhY2UgbXNncyB0byBDT00xICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzQgICovIC8qIE91dHB1dCBOVlJBTSB0cmFjZSBtc2dzIHRvIENPTTEgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfNSAgKi8gLyogT3V0cHV0IHJpbmcgdHJhY2UgbXNncyB0byBDT00xICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzYgICovIC8qIE91dHB1dCBXQVRDSERPRyB0aW1lciB0cmFjZSB0byBDT00xICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzcgICovIC8qIE91dHB1dCBSSVNDIGxvYWQgdHJhY2UgbXNncyB0byBDT00xICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzggICovIC8qIE91dHB1dCByaW5nIHNhdHVyYXRpb24gbXNncyB0byBDT00xICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzkgICovIC8qIE91dHB1dCBJT0NUTCB0cmFjZSBtc2dzICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzEwICovIC8qIE91dHB1dCBJT0NUTCBlcnJvciBtc2dzICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzExICovIC8qIE91dHB1dCBNYnggQ21kIHRyYWNlIG1zZ3MgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTIgKi8gLyogT3V0cHV0IElQIHRyYWNlIG1zZ3MgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTMgKi8gLyogT3V0cHV0IGZkbWkgZnVuY3Rpb24gdHJhY2UgbXNncyAqLwotLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8xNCAqLyAvKiBPdXRwdXQgUlNDTiB0cmFjZSBtc2dzICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE1ICovIC8qIE91dHB1dCBOUElWIHRyYWNlIG1zZ3MgKi8KLS8qICNkZWZpbmUgUUxfREVCVUdfTEVWRUxfMTYgKi8gLyogT3V0cHV0IElTUDg0WFggdHJhY2UgbXNncyAqLwotLyogI2RlZmluZSBRTF9ERUJVR19MRVZFTF8xNyAqLyAvKiBPdXRwdXQgRUVIIHRyYWNlIG1lc3NhZ2VzICovCi0vKiAjZGVmaW5lIFFMX0RFQlVHX0xFVkVMXzE4ICovIC8qIE91dHB1dCBUMTAgQ1JDIHRyYWNlIG1lc3NhZ2VzICovCi0KLS8qCi0qIE1hY3JvcyB1c2UgZm9yIGRlYnVnZ2luZyB0aGUgZHJpdmVyLgotKi8KLQotI2RlZmluZSBERUJVRyh4KQlkbyB7IGlmIChxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCi0KLSNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzEpCi0jZGVmaW5lIERFQlVHMSh4KQlkbyB7eDt9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxKHgpCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgREVCVUcyKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzMoeCkJZG8geyBpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcpIHsgeDsgfSB9IHdoaWxlICgwKQotI2RlZmluZSBERUJVRzJfM18xMSh4KQlkbyB7IGlmIChxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCi0jZGVmaW5lIERFQlVHMl85XzEwKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzExKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzEzKHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzE2KHgpCWRvIHsgaWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB7IHg7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUcyXzE3KHgpIAlkbyB7IGlmIChxbDJ4ZXh0ZW5kZWRfZXJyb3JfbG9nZ2luZykgeyB4OyB9IH0gd2hpbGUgKDApCi0KLSNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzMpCi0jZGVmaW5lIERFQlVHMyh4KQlkbyB7eDt9IHdoaWxlICgwKQotI2RlZmluZSBERUJVRzNfMTEoeCkJZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHMyh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF80KQotI2RlZmluZSBERUJVRzQoeCkJZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHNCh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF81KQotI2RlZmluZSBERUJVRzUoeCkgICAgICAgICAgZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHNSh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF83KQotI2RlZmluZSBERUJVRzcoeCkgICAgICAgICAgZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHNyh4KQkgICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF85KQotI2RlZmluZSBERUJVRzkoeCkgICAgICAgZG8ge3g7fSB3aGlsZSAoMCkKLSNkZWZpbmUgREVCVUc5XzEwKHgpICAgIGRvIHt4O30gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBERUJVRzkoeCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTApCi0jZGVmaW5lIERFQlVHMTAoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKQotI2RlZmluZSBERUJVRzlfMTAoeCkJZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHMTAoeCkJZG8ge30gd2hpbGUgKDApCi0gICNpZiAhZGVmaW5lZChERUJVRzlfMTApCi0gICNkZWZpbmUgREVCVUc5XzEwKHgpCWRvIHt9IHdoaWxlICgwKQotICAjZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xMSkKLSNkZWZpbmUgREVCVUcxMSh4KSAgICAgIGRve3g7fSB3aGlsZSgwKQotI2lmICFkZWZpbmVkKERFQlVHM18xMSkKLSNkZWZpbmUgREVCVUczXzExKHgpICAgIGRve3g7fSB3aGlsZSgwKQotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBERUJVRzExKHgpCWRve30gd2hpbGUoMCkKLSAgI2lmICFkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzMpCi0gICNkZWZpbmUgREVCVUczXzExKHgpCWRve30gd2hpbGUoMCkKLSAgI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTIpCi0jZGVmaW5lIERFQlVHMTIoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxMih4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xMykKLSNkZWZpbmUgREVCVUcxMyh4KSAgICAgIGRvIHt4O30gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBERUJVRzEzKHgpCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzE0KQotI2RlZmluZSBERUJVRzE0KHgpICAgICAgZG8ge3g7fSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIERFQlVHMTQoeCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTUpCi0jZGVmaW5lIERFQlVHMTUoeCkgICAgICBkbyB7eDt9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxNSh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xNikKLSNkZWZpbmUgREVCVUcxNih4KQlkbyB7eDt9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxNih4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xNykKLSNkZWZpbmUgREVCVUcxNyh4KQlkbyB7eDt9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxNyh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xOCkKLSNkZWZpbmUgREVCVUcxOCh4KQlkbyB7aWYgKHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nKSB4OyB9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgREVCVUcxOCh4KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KLS8qCiAgKiBGaXJtd2FyZSBEdW1wIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgKi8KIApAQCAtMzcwLDMgKzIzMCw1MCBAQAogCQlzdHJ1Y3QgcWxhODF4eF9md19kdW1wIGlzcDgxOwogCX0gaXNwOwogfTsKKworI2RlZmluZSBRTF9NU0dIRFIgInFsYTJ4eHgiCisKKyNkZWZpbmUgcWxfbG9nX2ZhdGFsCQkwIC8qIGRpc3BsYXkgZmF0YWwgZXJyb3JzICovCisjZGVmaW5lIHFsX2xvZ193YXJuCQkxIC8qIGRpc3BsYXkgY3JpdGljYWwgZXJyb3JzICovCisjZGVmaW5lIHFsX2xvZ19pbmZvCQkyIC8qIGRpc3BsYXkgYWxsIHJlY292ZXJlZCBlcnJvcnMgKi8KKyNkZWZpbmUgcWxfbG9nX2FsbAkJMyAvKiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNlZCBieSBxbF9lcnJsZXYuCisJCQkJICAgKiBObyBtZXNzYWdlcyB3aWxsIHVzZSB0aGlzIHZhbHVlLgorCQkJCSAgICogVGhpcyBzaG91bGQgYmUgYWx3YXlzIGhpZ2hlc3QgdmFsdWUKKwkJCQkgICAqIGFzIGNvbXBhcmVkIHRvIG90aGVyIGxvZyBsZXZlbHMuCisJCQkJICAgKi8KKworZXh0ZXJuIGludCBxbF9lcnJsZXY7CisKK3ZvaWQKK3FsX2RiZyh1aW50MzJfdCwgc2NzaV9xbGFfaG9zdF90ICp2aGEsIGludDMyX3QsIGNoYXIgKiwgLi4uKTsKK3ZvaWQKK3FsX2RiZ19wY2kodWludDMyX3QsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQzMl90LCBjaGFyICosIC4uLik7CisKK3ZvaWQKK3FsX2xvZyh1aW50MzJfdCwgc2NzaV9xbGFfaG9zdF90ICp2aGEsIGludDMyX3QsIGNoYXIgKiwgLi4uKTsKK3ZvaWQKK3FsX2xvZ19wY2kodWludDMyX3QsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQzMl90LCBjaGFyICosIC4uLik7CisKKy8qIERlYnVnIExldmVscyAqLworLyogVGhlIDB4NDAwMDAwMDAgaXMgdGhlIG1heCB2YWx1ZSBhbnkgZGVidWcgbGV2ZWwgY2FuIGhhdmUKKyAqIGFzIHFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nIGlzIG9mIHR5cGUgc2lnbmVkIGludAorICovCisjZGVmaW5lIHFsX2RiZ19pbml0CTB4NDAwMDAwMDAgLyogSW5pdCBEZWJ1ZyAqLworI2RlZmluZSBxbF9kYmdfbWJ4CTB4MjAwMDAwMDAgLyogTUJYIERlYnVnICovCisjZGVmaW5lIHFsX2RiZ19kaXNjCTB4MTAwMDAwMDAgLyogRGV2aWNlIERpc2NvdmVyeSBEZWJ1ZyAqLworI2RlZmluZSBxbF9kYmdfaW8JMHgwODAwMDAwMCAvKiBJTyBUcmFjaW5nIERlYnVnICovCisjZGVmaW5lIHFsX2RiZ19kcGMJMHgwNDAwMDAwMCAvKiBEUEMgVGhlYWQgRGVidWcgKi8KKyNkZWZpbmUgcWxfZGJnX2FzeW5jCTB4MDIwMDAwMDAgLyogQXN5bmMgZXZlbnRzIERlYnVnICovCisjZGVmaW5lIHFsX2RiZ190aW1lcgkweDAxMDAwMDAwIC8qIFRpbWVyIERlYnVnICovCisjZGVmaW5lIHFsX2RiZ191c2VyCTB4MDA4MDAwMDAgLyogVXNlciBTcGFjZSBJbnRlcmF0aW9ucyBEZWJ1ZyAqLworI2RlZmluZSBxbF9kYmdfdGFza20JMHgwMDQwMDAwMCAvKiBUYXNrIE1hbmFnZW1lbnQgRGVidWcgKi8KKyNkZWZpbmUgcWxfZGJnX2FlcgkweDAwMjAwMDAwIC8qIEFFUi9FRUggRGVidWcgKi8KKyNkZWZpbmUgcWxfZGJnX211bHRpcQkweDAwMTAwMDAwIC8qIE11bHRpUSBEZWJ1ZyAqLworI2RlZmluZSBxbF9kYmdfcDNwCTB4MDAwODAwMDAgLyogUDNQIHNwZWNpZmljIERlYnVnICovCisjZGVmaW5lIHFsX2RiZ192cG9ydAkweDAwMDQwMDAwIC8qIFZpcnR1YWwgUG9ydCBEZWJ1ZyAqLworI2RlZmluZSBxbF9kYmdfYnVmZmVyCTB4MDAwMjAwMDAgLyogRm9yIGR1bXBpbmcgdGhlIGJ1ZmZlci9yZWdzICovCisjZGVmaW5lIHFsX2RiZ19taXNjCTB4MDAwMTAwMDAgLyogRm9yIGR1bXBpbmcgZXZlcnl0aGluZyB0aGF0IGlzIG5vdAorCQkJCSAgICAqIG5vdCBjb3ZlcmVkIGJ5IHVwcGVyIGNhdGVnb3JpZXMKKwkJCQkgICAgKi8KKworI2RlZmluZSBRTF9EQkdfQlVGX0xFTgk1MTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCBjYzVhNzkyLi5hMDNlYWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0yNTI5LDYgKzI1MjksNyBAQAogI2RlZmluZSBEVF9JU1A4MDIxCQkJQklUXzE0CiAjZGVmaW5lIERUX0lTUF9MQVNUCQkJKERUX0lTUDgwMjEgPDwgMSkKIAorI2RlZmluZSBEVF9UMTBfUEkgICAgICAgICAgICAgICAgICAgICAgIEJJVF8yNQogI2RlZmluZSBEVF9JSURNQSAgICAgICAgICAgICAgICAgICAgICAgIEJJVF8yNgogI2RlZmluZSBEVF9GV0kyICAgICAgICAgICAgICAgICAgICAgICAgIEJJVF8yNwogI2RlZmluZSBEVF9aSU9fU1VQUE9SVEVEICAgICAgICAgICAgICAgIEJJVF8yOApAQCAtMjU3Miw2ICsyNTczLDcgQEAKICNkZWZpbmUgSVNfTk9DQUNIRV9WUERfVFlQRShoYSkJKElTX1FMQTgxWFgoaGEpKQogI2RlZmluZSBJU19BTE9HSU9fQ0FQQUJMRShoYSkJKElTX1FMQTIzWFgoaGEpIHx8IElTX0ZXSTJfQ0FQQUJMRShoYSkpCiAKKyNkZWZpbmUgSVNfVDEwX1BJX0NBUEFCTEUoaGEpICAgKChoYSktPmRldmljZV90eXBlICYgRFRfVDEwX1BJKQogI2RlZmluZSBJU19JSURNQV9DQVBBQkxFKGhhKSAgICAoKGhhKS0+ZGV2aWNlX3R5cGUgJiBEVF9JSURNQSkKICNkZWZpbmUgSVNfRldJMl9DQVBBQkxFKGhhKSAgICAgKChoYSktPmRldmljZV90eXBlICYgRFRfRldJMikKICNkZWZpbmUgSVNfWklPX1NVUFBPUlRFRChoYSkgICAgKChoYSktPmRldmljZV90eXBlICYgRFRfWklPX1NVUFBPUlRFRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYwppbmRleCBhNWE0ZTEyLi4wYjRjMmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCkBAIC02NCw3ICs2NCw3IEBACiAJLyogUGF1c2UgdHJhY2luZyB0byBmbHVzaCBGQ0UgYnVmZmVycy4gKi8KIAlydmFsID0gcWxhMngwMF9kaXNhYmxlX2ZjZV90cmFjZSh2aGEsICZoYS0+ZmNlX3dyLCAmaGEtPmZjZV9yZCk7CiAJaWYgKHJ2YWwpCi0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA1YywKIAkJICAgICJEZWJ1Z0ZTOiBVbmFibGUgdG8gZGlzYWJsZSBGQ0UgKCVkKS5cbiIsIHJ2YWwpOwogCiAJaGEtPmZsYWdzLmZjZV9lbmFibGVkID0gMDsKQEAgLTkyLDcgKzkyLDcgQEAKIAlydmFsID0gcWxhMngwMF9lbmFibGVfZmNlX3RyYWNlKHZoYSwgaGEtPmZjZV9kbWEsIGhhLT5mY2VfYnVmcywKIAkgICAgaGEtPmZjZV9tYiwgJmhhLT5mY2VfYnVmcyk7CiAJaWYgKHJ2YWwpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDBkLAogCQkgICAgIkRlYnVnRlM6IFVuYWJsZSB0byByZWluaXRpYWxpemUgRkNFICglZCkuXG4iLCBydmFsKTsKIAkJaGEtPmZsYWdzLmZjZV9lbmFibGVkID0gMDsKIAl9CkBAIC0xMjUsOCArMTI1LDggQEAKIAlhdG9taWNfc2V0KCZxbGEyeDAwX2Rmc19yb290X2NvdW50LCAwKTsKIAlxbGEyeDAwX2Rmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFFMQTJYWFhfRFJJVkVSX05BTUUsIE5VTEwpOwogCWlmICghcWxhMngwMF9kZnNfcm9vdCkgewotCQlxbGFfcHJpbnRrKEtFUk5fTk9USUNFLCBoYSwKLQkJICAgICJEZWJ1Z0ZTOiBVbmFibGUgdG8gY3JlYXRlIHJvb3QgZGlyZWN0b3J5LlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZjcsCisJCSAgICAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3QgZGlyZWN0b3J5LlxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTM3LDggKzEzNyw4IEBACiAJbXV0ZXhfaW5pdCgmaGEtPmZjZV9tdXRleCk7CiAJaGEtPmRmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIodmhhLT5ob3N0X3N0ciwgcWxhMngwMF9kZnNfcm9vdCk7CiAJaWYgKCFoYS0+ZGZzX2RpcikgewotCQlxbGFfcHJpbnRrKEtFUk5fTk9USUNFLCBoYSwKLQkJICAgICJEZWJ1Z0ZTOiBVbmFibGUgdG8gY3JlYXRlIGhhIGRpcmVjdG9yeS5cbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGY4LAorCQkgICAgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBoYSBkaXJlY3RvcnkuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNDgsOCArMTQ4LDggQEAKIAloYS0+ZGZzX2ZjZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImZjZSIsIFNfSVJVU1IsIGhhLT5kZnNfZGlyLCB2aGEsCiAJICAgICZkZnNfZmNlX29wcyk7CiAJaWYgKCFoYS0+ZGZzX2ZjZSkgewotCQlxbGFfcHJpbnRrKEtFUk5fTk9USUNFLCBoYSwKLQkJICAgICJEZWJ1Z0ZTOiBVbmFibGUgdG8gZmNlIG5vZGUuXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBmOSwKKwkJICAgICJVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZmNlIG5vZGUuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCA2OTE3ODNhLi5hYTY5NDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtNTM3LDYgKzUzNywxMSBAQAogCS8qCiAJICogSWYgRElGIEVycm9yIGlzIHNldCBpbiBjb21wX3N0YXR1cywgdGhlc2UgYWRkaXRpb25hbCBmaWVsZHMgYXJlCiAJICogZGVmaW5lZDoKKwkgKgorCSAqICEhISBOT1RFOiBGaXJtd2FyZSBzZW5kcyBleHBlY3RlZC9hY3R1YWwgRElGIGRhdGEgaW4gYmlnIGVuZGlhbgorCSAqIGZvcm1hdDsgYnV0IGFsbCBvZiB0aGUgImRhdGEiIGZpZWxkIGdldHMgc3dhYjMyLWQgaW4gdGhlIGJlZ2lubmluZworCSAqIG9mIHFsYTJ4MDBfc3RhdHVzX2VudHJ5KCkuCisJICoKIAkgKiAmZGF0YVsxMF0gOiB1aW50OF90IHJlcG9ydF9ydW50X2JnWzJdOwktIGNvbXB1dGVkIGd1YXJkCiAJICogJmRhdGFbMTJdIDogdWludDhfdCBhY3R1YWxfZGlmWzhdOwkJLSBESUYgRGF0YSByZWNlaXZlZAogCSAqICZkYXRhWzIwXSA6IHVpbnQ4X3QgZXhwZWN0ZWRfZGlmWzhdOwkJLSBESUYgRGF0YSBjb21wdXRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDBiMzgxMjIuLjI5YjFhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTE4NSw3ICsxODUsNyBAQAogaW50IHFsYTJ4MDBfbWFya2VyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHN0cnVjdCByZXFfcXVlICosIHN0cnVjdCByc3BfcXVlICosCiAJCQkJCQl1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOwogZXh0ZXJuIGludCBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICopOwotZXh0ZXJuIHVpbnQxNl90IHFsYTI0eHhfY2FsY19pb2Nicyh1aW50MTZfdCk7CitleHRlcm4gdWludDE2X3QgcWxhMjR4eF9jYWxjX2lvY2JzKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCk7CiBleHRlcm4gdm9pZCBxbGEyNHh4X2J1aWxkX3Njc2lfaW9jYnMoc3JiX3QgKiwgc3RydWN0IGNtZF90eXBlXzcgKiwgdWludDE2X3QpOwogZXh0ZXJuIGludCBxbGEyNHh4X2RpZl9zdGFydF9zY3NpKHNyYl90ICopOwogCkBAIC00MzksNiArNDM5LDkgQEAKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZHVtcF9yZWdzKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZHVtcF9idWZmZXIodWludDhfdCAqLCB1aW50MzJfdCk7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2R1bXBfYnVmZmVyX3ppcHBlZCh1aW50OF90ICosIHVpbnQzMl90KTsKK2V4dGVybiB2b2lkIHFsX2R1bXBfcmVncyh1aW50MzJfdCwgc2NzaV9xbGFfaG9zdF90ICosIGludDMyX3QpOworZXh0ZXJuIHZvaWQgcWxfZHVtcF9idWZmZXIodWludDMyX3QsIHNjc2lfcWxhX2hvc3RfdCAqLCBpbnQzMl90LAorCXVpbnQ4X3QgKiwgdWludDMyX3QpOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX2dzLmMgc291cmNlIGZpbGUuCkBAIC00NzgsNyArNDgxLDggQEAKIGV4dGVybiBpbnQgcWxhMngwMF9lY2hvX3Rlc3Qoc2NzaV9xbGFfaG9zdF90ICosCiAJc3RydWN0IG1zZ19lY2hvX2xiICosIHVpbnQxNl90ICopOwogZXh0ZXJuIGludCBxbGEyNHh4X3VwZGF0ZV9hbGxfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICopOwotZXh0ZXJuIGludCBxbGEyNHh4X2ZjcF9wcmlvX2NmZ192YWxpZChzdHJ1Y3QgcWxhX2ZjcF9wcmlvX2NmZyAqLCB1aW50OF90KTsKK2V4dGVybiBpbnQgcWxhMjR4eF9mY3BfcHJpb19jZmdfdmFsaWQoc2NzaV9xbGFfaG9zdF90ICosCisJc3RydWN0IHFsYV9mY3BfcHJpb19jZmcgKiwgdWludDhfdCk7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfZGZzLmMgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCmluZGV4IDhjZDkwNjYuLjM3OTM3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCkBAIC0xMjEsMTEgKzEyMSwxMCBAQAogCiAJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJaWYgKG1zX3BrdC0+ZW50cnlfc3RhdHVzICE9IDApIHsKLQkJREVCVUcyXzMocHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSglbGQpOiAlcyBmYWlsZWQsIGVycm9yIHN0YXR1cyAiCi0JCSAgICAiKCV4KSBvbiBwb3J0X2lkOiAlMDJ4JTAyeCUwMnguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCByb3V0aW5lLCBtc19wa3QtPmVudHJ5X3N0YXR1cywKLQkJICAgIHZoYS0+ZF9pZC5iLmRvbWFpbiwgdmhhLT5kX2lkLmIuYXJlYSwKLQkJICAgIHZoYS0+ZF9pZC5iLmFsX3BhKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzEsCisJCSAgICAiJXMgZmFpbGVkLCBlcnJvciBzdGF0dXMgKCV4KSBvbiBwb3J0X2lkOiAlMDJ4JTAyeCUwMnguXG4iLAorCQkgICAgcm91dGluZSwgbXNfcGt0LT5lbnRyeV9zdGF0dXMsIHZoYS0+ZF9pZC5iLmRvbWFpbiwKKwkJICAgIHZoYS0+ZF9pZC5iLmFyZWEsIHZoYS0+ZF9pZC5iLmFsX3BhKTsKIAl9IGVsc2UgewogCQlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJCWNvbXBfc3RhdHVzID0gbGUxNl90b19jcHUoCkBAIC0xMzgsMjQgKzEzNywyNCBAQAogCQljYXNlIENTX0RBVEFfT1ZFUlJVTjoJCS8qIE92ZXJydW4/ICovCiAJCQlpZiAoY3RfcnNwLT5oZWFkZXIucmVzcG9uc2UgIT0KIAkJCSAgICBfX2NvbnN0YW50X2NwdV90b19iZTE2KENUX0FDQ0VQVF9SRVNQT05TRSkpIHsKLQkJCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogJXMgZmFpbGVkLCAiCi0JCQkJICAgICJyZWplY3RlZCByZXF1ZXN0IG9uIHBvcnRfaWQ6ICUwMnglMDJ4JTAyeFxuIiwKLQkJCQkgICAgdmhhLT5ob3N0X25vLCByb3V0aW5lLAorCQkJCXFsX2RiZyhxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDc3LAorCQkJCSAgICAiJXMgZmFpbGVkIHJlamVjdGVkIHJlcXVlc3Qgb24gcG9ydF9pZDogIgorCQkJCSAgICAiJTAyeCUwMnglMDJ4LlxuIiwgcm91dGluZSwKIAkJCQkgICAgdmhhLT5kX2lkLmIuZG9tYWluLCB2aGEtPmRfaWQuYi5hcmVhLAotCQkJCSAgICB2aGEtPmRfaWQuYi5hbF9wYSkpOwotCQkJCURFQlVHMl8zKHFsYTJ4MDBfZHVtcF9idWZmZXIoCi0JCQkJICAgICh1aW50OF90ICopJmN0X3JzcC0+aGVhZGVyLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGN0X3JzcF9oZHIpKSk7CisJCQkJICAgIHZoYS0+ZF9pZC5iLmFsX3BhKTsKKwkJCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwKKwkJCQkgICAgMHgyMDc4LCAodWludDhfdCAqKSZjdF9yc3AtPmhlYWRlciwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBjdF9yc3BfaGRyKSk7CiAJCQkJcnZhbCA9IFFMQV9JTlZBTElEX0NPTU1BTkQ7CiAJCQl9IGVsc2UKIAkJCQlydmFsID0gUUxBX1NVQ0NFU1M7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiAlcyBmYWlsZWQsIGNvbXBsZXRpb24gIgotCQkJICAgICJzdGF0dXMgKCV4KSBvbiBwb3J0X2lkOiAlMDJ4JTAyeCUwMnguXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgcm91dGluZSwgY29tcF9zdGF0dXMsCisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDMzLAorCQkJICAgICIlcyBmYWlsZWQsIGNvbXBsZXRpb24gc3RhdHVzICgleCkgb24gcG9ydF9pZDogIgorCQkJICAgICIlMDJ4JTAyeCUwMnguXG4iLCByb3V0aW5lLCBjb21wX3N0YXR1cywKIAkJCSAgICB2aGEtPmRfaWQuYi5kb21haW4sIHZoYS0+ZF9pZC5iLmFyZWEsCi0JCQkgICAgdmhhLT5kX2lkLmIuYWxfcGEpKTsKKwkJCSAgICB2aGEtPmRfaWQuYi5hbF9wYSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIwMiw4ICsyMDEsOCBAQAogCSAgICBzaXplb2YobXNfaW9jYl9lbnRyeV90KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHQV9OWFQgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA2MiwKKwkJICAgICJHQV9OWFQgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsICJHQV9OWFQiKSAhPQogCSAgICBRTEFfU1VDQ0VTUykgewogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKQEAgLTIyMiwxMSArMjIxLDEwIEBACiAJCSAgICBjdF9yc3AtPnJzcC5nYV9ueHQucG9ydF90eXBlICE9IE5TX05MX1BPUlRfVFlQRSkKIAkJCWZjcG9ydC0+ZF9pZC5iLmRvbWFpbiA9IDB4ZjA7CiAKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEdBX05YVCBlbnRyeSAtICIKLQkJICAgICJubiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNjMsCisJCSAgICAiR0FfTlhUIGVudHJ5IC0gbm4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgogCQkgICAgInBuICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywKKwkJICAgICJwb3J0X2lkPSUwMnglMDJ4JTAyeC5cbiIsCiAJCSAgICBmY3BvcnQtPm5vZGVfbmFtZVswXSwgZmNwb3J0LT5ub2RlX25hbWVbMV0sCiAJCSAgICBmY3BvcnQtPm5vZGVfbmFtZVsyXSwgZmNwb3J0LT5ub2RlX25hbWVbM10sCiAJCSAgICBmY3BvcnQtPm5vZGVfbmFtZVs0XSwgZmNwb3J0LT5ub2RlX25hbWVbNV0sCkBAIC0yMzYsNyArMjM0LDcgQEAKIAkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzRdLCBmY3BvcnQtPnBvcnRfbmFtZVs1XSwKIAkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzZdLCBmY3BvcnQtPnBvcnRfbmFtZVs3XSwKIAkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKLQkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSk7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTI4Nyw4ICsyODUsOCBAQAogCSAgICBzaXplb2YobXNfaW9jYl9lbnRyeV90KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHSURfUFQgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1NSwKKwkJICAgICJHSURfUFQgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsICJHSURfUFQiKSAhPQogCSAgICBRTEFfU1VDQ0VTUykgewogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKQEAgLTM2NCw4ICszNjIsOCBAQAogCQkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJLypFTVBUWSovCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR1BOX0lEIGlzc3VlIElPQ0IgZmFpbGVkICIKLQkJCSAgICAiKCVkKS5cbiIsIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1NiwKKwkJCSAgICAiR1BOX0lEIGlzc3VlIElPQ0IgZmFpbGVkICglZCkuXG4iLCBydmFsKTsKIAkJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwKIAkJICAgICJHUE5fSUQiKSAhPSBRTEFfU1VDQ0VTUykgewogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CkBAIC00MjQsOCArNDIyLDggQEAKIAkJICAgIHNpemVvZihtc19pb2NiX2VudHJ5X3QpKTsKIAkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCS8qRU1QVFkqLwotCQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEdOTl9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAiCi0JCQkgICAgIiglZCkuXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNTcsCisJCQkgICAgIkdOTl9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsCiAJCSAgICAiR05OX0lEIikgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwpAQCAtNDM0LDExICs0MzIsMTAgQEAKIAkJCW1lbWNweShsaXN0W2ldLm5vZGVfbmFtZSwKIAkJCSAgICBjdF9yc3AtPnJzcC5nbm5faWQubm9kZV9uYW1lLCBXV05fU0laRSk7CiAKLQkJCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHSURfUFQgZW50cnkgLSAiCi0JCQkgICAgIm5uICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJCSAgICAicG4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1OCwKKwkJCSAgICAiR0lEX1BUIGVudHJ5IC0gbm4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyWCUwMnggIgorCQkJICAgICJwbiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJYJTAyeCAiCiAJCQkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywKIAkJCSAgICBsaXN0W2ldLm5vZGVfbmFtZVswXSwgbGlzdFtpXS5ub2RlX25hbWVbMV0sCiAJCQkgICAgbGlzdFtpXS5ub2RlX25hbWVbMl0sIGxpc3RbaV0ubm9kZV9uYW1lWzNdLAogCQkJICAgIGxpc3RbaV0ubm9kZV9uYW1lWzRdLCBsaXN0W2ldLm5vZGVfbmFtZVs1XSwKQEAgLTQ0OCw3ICs0NDUsNyBAQAogCQkJICAgIGxpc3RbaV0ucG9ydF9uYW1lWzRdLCBsaXN0W2ldLnBvcnRfbmFtZVs1XSwKIAkJCSAgICBsaXN0W2ldLnBvcnRfbmFtZVs2XSwgbGlzdFtpXS5wb3J0X25hbWVbN10sCiAJCQkgICAgbGlzdFtpXS5kX2lkLmIuZG9tYWluLCBsaXN0W2ldLmRfaWQuYi5hcmVhLAotCQkJICAgIGxpc3RbaV0uZF9pZC5iLmFsX3BhKSk7CisJCQkgICAgbGlzdFtpXS5kX2lkLmIuYWxfcGEpOwogCQl9CiAKIAkJLyogTGFzdCBkZXZpY2UgZXhpdC4gKi8KQEAgLTQ5OSwxNCArNDk2LDE0IEBACiAJICAgIHNpemVvZihtc19pb2NiX2VudHJ5X3QpKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IFJGVF9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDQzLAorCQkgICAgIlJGVF9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwgIlJGVF9JRCIpICE9CiAJICAgIFFMQV9TVUNDRVNTKSB7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUkZUX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNDQsCisJCSAgICAiUkZUX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iKTsKIAl9CiAKIAlyZXR1cm4gKHJ2YWwpOwpAQCAtNTI4LDggKzUyNSw4IEBACiAJc3RydWN0IGN0X3Nuc19yc3AJKmN0X3JzcDsKIAogCWlmIChJU19RTEEyMTAwKGhhKSB8fCBJU19RTEEyMjAwKGhhKSkgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFJGRl9JRCBjYWxsIHVuc3VwcG9ydGVkIG9uICIKLQkJICAgICJJU1AyMTAwL0lTUDIyMDAuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA0NiwKKwkJICAgICJSRkZfSUQgY2FsbCBub3Qgc3VwcG9ydGVkIG9uIElTUDIxMDAvSVNQMjIwMC5cbiIpOwogCQlyZXR1cm4gKFFMQV9TVUNDRVNTKTsKIAl9CiAKQEAgLTU1NiwxNCArNTUzLDE0IEBACiAJICAgIHNpemVvZihtc19pb2NiX2VudHJ5X3QpKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IFJGRl9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDQ3LAorCQkgICAgIlJGRl9JRCBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwgIlJGRl9JRCIpICE9CiAJICAgIFFMQV9TVUNDRVNTKSB7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUkZGX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNDgsCisJCSAgICAiUkZGX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iKTsKIAl9CiAKIAlyZXR1cm4gKHJ2YWwpOwpAQCAtNjA5LDE0ICs2MDYsMTQgQEAKIAkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogUk5OX0lEIGlzc3VlIElPQ0IgZmFpbGVkICglZCkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNGQsCisJCSAgICAiUk5OX0lEIGlzc3VlIElPQ0IgZmFpbGVkICglZCkuXG4iLCBydmFsKTsKIAl9IGVsc2UgaWYgKHFsYTJ4MDBfY2hrX21zX3N0YXR1cyh2aGEsIG1zX3BrdCwgY3RfcnNwLCAiUk5OX0lEIikgIT0KIAkgICAgUUxBX1NVQ0NFU1MpIHsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBSTk5fSUQgZXhpdGluZyBub3JtYWxseS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA0ZSwKKwkJICAgICJSTk5fSUQgZXhpdGluZyBub3JtYWxseS5cbiIpOwogCX0KIAogCXJldHVybiAocnZhbCk7CkBAIC02NDcsOCArNjQ0LDggQEAKIAlzdHJ1Y3QgY3Rfc25zX3JzcAkqY3RfcnNwOwogCiAJaWYgKElTX1FMQTIxMDAoaGEpIHx8IElTX1FMQTIyMDAoaGEpKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUlNOTl9JRCBjYWxsIHVuc3VwcG9ydGVkIG9uICIKLQkJICAgICJJU1AyMTAwL0lTUDIyMDAuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1MCwKKwkJICAgICJSU05OX0lEIGNhbGwgdW5zdXBwb3J0ZWQgb24gSVNQMjEwMC9JU1AyMjAwLlxuIik7CiAJCXJldHVybiAoUUxBX1NVQ0NFU1MpOwogCX0KIApAQCAtNjgyLDE0ICs2NzksMTQgQEAKIAkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogUlNOTl9OTiBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDUxLAorCQkgICAgIlJTTk5fTk4gaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsICJSU05OX05OIikgIT0KIAkgICAgUUxBX1NVQ0NFU1MpIHsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBSU05OX05OIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNTIsCisJCSAgICAiUlNOTl9OTiBleGl0aW5nIG5vcm1hbGx5LlxuIik7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTc1NywxMyArNzU0LDE0IEBACiAJICAgIHNpemVvZihzdHJ1Y3Qgc25zX2NtZF9wa3QpKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEdBX05YVCBTZW5kIFNOUyBmYWlsZWQgKCVkKS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1ZiwKKwkJICAgICJHQV9OWFQgU2VuZCBTTlMgZmFpbGVkICglZCkuXG4iLCBydmFsKTsKIAl9IGVsc2UgaWYgKHNuc19jbWQtPnAuZ2FuX2RhdGFbOF0gIT0gMHg4MCB8fAogCSAgICBzbnNfY21kLT5wLmdhbl9kYXRhWzldICE9IDB4MDIpIHsKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEdBX05YVCBmYWlsZWQsIHJlamVjdGVkIHJlcXVlc3QsICIKLQkJICAgICJnYV9ueHRfcnNwOlxuIiwgdmhhLT5ob3N0X25vKSk7Ci0JCURFQlVHMl8zKHFsYTJ4MDBfZHVtcF9idWZmZXIoc25zX2NtZC0+cC5nYW5fZGF0YSwgMTYpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDIwN2QsCisJCSAgICAiR0FfTlhUIGZhaWxlZCwgcmVqZWN0ZWQgcmVxdWVzdCBnYV9ueHRfcnNwOlxuIik7CisJCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19kaXNjICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDIwNzQsCisJCSAgICBzbnNfY21kLT5wLmdhbl9kYXRhLCAxNik7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7CiAJCS8qIFBvcHVsYXRlIGZjX3BvcnRfdCBlbnRyeS4gKi8KQEAgLTc3OCwxMSArNzc2LDEwIEBACiAJCSAgICBzbnNfY21kLT5wLmdhbl9kYXRhWzE2XSAhPSBOU19OTF9QT1JUX1RZUEUpCiAJCQlmY3BvcnQtPmRfaWQuYi5kb21haW4gPSAweGYwOwogCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHQV9OWFQgZW50cnkgLSAiCi0JCSAgICAibm4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDYxLAorCQkgICAgIkdBX05YVCBlbnRyeSAtIG5uICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKIAkJICAgICJwbiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sCisJCSAgICAicG9ydF9pZD0lMDJ4JTAyeCUwMnguXG4iLAogCQkgICAgZmNwb3J0LT5ub2RlX25hbWVbMF0sIGZjcG9ydC0+bm9kZV9uYW1lWzFdLAogCQkgICAgZmNwb3J0LT5ub2RlX25hbWVbMl0sIGZjcG9ydC0+bm9kZV9uYW1lWzNdLAogCQkgICAgZmNwb3J0LT5ub2RlX25hbWVbNF0sIGZjcG9ydC0+bm9kZV9uYW1lWzVdLApAQCAtNzkyLDcgKzc4OSw3IEBACiAJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs0XSwgZmNwb3J0LT5wb3J0X25hbWVbNV0sCiAJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs2XSwgZmNwb3J0LT5wb3J0X25hbWVbN10sCiAJCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCX0KIAogCXJldHVybiAocnZhbCk7CkBAIC04MzEsMTMgKzgyOCwxNCBAQAogCSAgICBzaXplb2Yoc3RydWN0IHNuc19jbWRfcGt0KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHSURfUFQgU2VuZCBTTlMgZmFpbGVkICglZCkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNmQsCisJCSAgICAiR0lEX1BUIFNlbmQgU05TIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmIChzbnNfY21kLT5wLmdpZF9kYXRhWzhdICE9IDB4ODAgfHwKIAkgICAgc25zX2NtZC0+cC5naWRfZGF0YVs5XSAhPSAweDAyKSB7Ci0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHSURfUFQgZmFpbGVkLCByZWplY3RlZCByZXF1ZXN0LCAiCi0JCSAgICAiZ2lkX3JzcDpcbiIsIHZoYS0+aG9zdF9ubykpOwotCQlERUJVRzJfMyhxbGEyeDAwX2R1bXBfYnVmZmVyKHNuc19jbWQtPnAuZ2lkX2RhdGEsIDE2KSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMmYsCisJCSAgICAiR0lEX1BUIGZhaWxlZCwgcmVqZWN0ZWQgcmVxdWVzdCwgZ2lkX3JzcDpcbiIpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDgxLAorCQkgICAgc25zX2NtZC0+cC5naWRfZGF0YSwgMTYpOwogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgewogCQkvKiBTZXQgcG9ydCBJRHMgaW4gc3dpdGNoIGluZm8gbGlzdC4gKi8KQEAgLTkwMCwxMyArODk4LDE0IEBACiAJCSAgICBHUE5fSURfU05TX0NNRF9TSVpFIC8gMiwgc2l6ZW9mKHN0cnVjdCBzbnNfY21kX3BrdCkpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJLypFTVBUWSovCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR1BOX0lEIFNlbmQgU05TIGZhaWxlZCAiCi0JCQkgICAgIiglZCkuXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzIsCisJCQkgICAgIkdQTl9JRCBTZW5kIFNOUyBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCQl9IGVsc2UgaWYgKHNuc19jbWQtPnAuZ3BuX2RhdGFbOF0gIT0gMHg4MCB8fAogCQkgICAgc25zX2NtZC0+cC5ncG5fZGF0YVs5XSAhPSAweDAyKSB7Ci0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR1BOX0lEIGZhaWxlZCwgcmVqZWN0ZWQgIgotCQkJICAgICJyZXF1ZXN0LCBncG5fcnNwOlxuIiwgdmhhLT5ob3N0X25vKSk7Ci0JCQlERUJVRzJfMyhxbGEyeDAwX2R1bXBfYnVmZmVyKHNuc19jbWQtPnAuZ3BuX2RhdGEsIDE2KSk7CisJCQlxbF9kYmcocWxfZGJnX2Rpc2MgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MjA3ZSwKKwkJCSAgICAiR1BOX0lEIGZhaWxlZCwgcmVqZWN0ZWQgcmVxdWVzdCwgZ3BuX3JzcDpcbiIpOworCQkJcWxfZHVtcF9idWZmZXIocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDdmLAorCQkJICAgIHNuc19jbWQtPnAuZ3BuX2RhdGEsIDE2KTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9IGVsc2UgewogCQkJLyogU2F2ZSBwb3J0bmFtZSAqLwpAQCAtOTU1LDI0ICs5NTQsMjQgQEAKIAkJICAgIEdOTl9JRF9TTlNfQ01EX1NJWkUgLyAyLCBzaXplb2Yoc3RydWN0IHNuc19jbWRfcGt0KSk7CiAJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCQkvKkVNUFRZKi8KLQkJCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHTk5fSUQgU2VuZCBTTlMgZmFpbGVkICIKLQkJCSAgICAiKCVkKS5cbiIsIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAzZiwKKwkJCSAgICAiR05OX0lEIFNlbmQgU05TIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJCX0gZWxzZSBpZiAoc25zX2NtZC0+cC5nbm5fZGF0YVs4XSAhPSAweDgwIHx8CiAJCSAgICBzbnNfY21kLT5wLmdubl9kYXRhWzldICE9IDB4MDIpIHsKLQkJCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBHTk5fSUQgZmFpbGVkLCByZWplY3RlZCAiCi0JCQkgICAgInJlcXVlc3QsIGdubl9yc3A6XG4iLCB2aGEtPmhvc3Rfbm8pKTsKLQkJCURFQlVHMl8zKHFsYTJ4MDBfZHVtcF9idWZmZXIoc25zX2NtZC0+cC5nbm5fZGF0YSwgMTYpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDgyLAorCQkJICAgICJHTk5fSUQgZmFpbGVkLCByZWplY3RlZCByZXF1ZXN0LCBnbm5fcnNwOlxuIik7CisJCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDdhLAorCQkJICAgIHNuc19jbWQtPnAuZ25uX2RhdGEsIDE2KTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9IGVsc2UgewogCQkJLyogU2F2ZSBub2RlbmFtZSAqLwogCQkJbWVtY3B5KGxpc3RbaV0ubm9kZV9uYW1lLCAmc25zX2NtZC0+cC5nbm5fZGF0YVsxNl0sCiAJCQkgICAgV1dOX1NJWkUpOwogCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR0lEX1BUIGVudHJ5IC0gIgotCQkJICAgICJubiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDZlLAorCQkJICAgICJHSURfUFQgZW50cnkgLSBubiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCiAJCQkgICAgInBuICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsCi0JCQkgICAgdmhhLT5ob3N0X25vLAorCQkJICAgICJwb3J0X2lkPSUwMnglMDJ4JTAyeC5cbiIsCiAJCQkgICAgbGlzdFtpXS5ub2RlX25hbWVbMF0sIGxpc3RbaV0ubm9kZV9uYW1lWzFdLAogCQkJICAgIGxpc3RbaV0ubm9kZV9uYW1lWzJdLCBsaXN0W2ldLm5vZGVfbmFtZVszXSwKIAkJCSAgICBsaXN0W2ldLm5vZGVfbmFtZVs0XSwgbGlzdFtpXS5ub2RlX25hbWVbNV0sCkBAIC05ODIsNyArOTgxLDcgQEAKIAkJCSAgICBsaXN0W2ldLnBvcnRfbmFtZVs0XSwgbGlzdFtpXS5wb3J0X25hbWVbNV0sCiAJCQkgICAgbGlzdFtpXS5wb3J0X25hbWVbNl0sIGxpc3RbaV0ucG9ydF9uYW1lWzddLAogCQkJICAgIGxpc3RbaV0uZF9pZC5iLmRvbWFpbiwgbGlzdFtpXS5kX2lkLmIuYXJlYSwKLQkJCSAgICBsaXN0W2ldLmRfaWQuYi5hbF9wYSkpOworCQkJICAgIGxpc3RbaV0uZF9pZC5iLmFsX3BhKTsKIAkJfQogCiAJCS8qIExhc3QgZGV2aWNlIGV4aXQuICovCkBAIC0xMDI1LDE3ICsxMDI0LDE4IEBACiAJICAgIHNpemVvZihzdHJ1Y3Qgc25zX2NtZF9wa3QpKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IFJGVF9JRCBTZW5kIFNOUyBmYWlsZWQgKCVkKS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA2MCwKKwkJICAgICJSRlRfSUQgU2VuZCBTTlMgZmFpbGVkICglZCkuXG4iLCBydmFsKTsKIAl9IGVsc2UgaWYgKHNuc19jbWQtPnAucmZ0X2RhdGFbOF0gIT0gMHg4MCB8fAogCSAgICBzbnNfY21kLT5wLnJmdF9kYXRhWzldICE9IDB4MDIpIHsKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IFJGVF9JRCBmYWlsZWQsIHJlamVjdGVkIHJlcXVlc3QsICIKLQkJICAgICJyZnRfcnNwOlxuIiwgdmhhLT5ob3N0X25vKSk7Ci0JCURFQlVHMl8zKHFsYTJ4MDBfZHVtcF9idWZmZXIoc25zX2NtZC0+cC5yZnRfZGF0YSwgMTYpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDIwODMsCisJCSAgICAiUkZUX0lEIGZhaWxlZCwgcmVqZWN0ZWQgcmVxdWVzdCByZnRfcnNwOlxuIik7CisJCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19kaXNjICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDIwODAsCisJCSAgICBzbnNfY21kLT5wLnJmdF9kYXRhLCAxNik7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUkZUX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNzMsCisJCSAgICAiUkZUX0lEIGV4aXRpbmcgbm9ybWFsbHkuXG4iKTsKIAl9CiAKIAlyZXR1cm4gKHJ2YWwpOwpAQCAtMTA4MSwxNyArMTA4MSwxOCBAQAogCSAgICBzaXplb2Yoc3RydWN0IHNuc19jbWRfcGt0KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBSTk5fSUQgU2VuZCBTTlMgZmFpbGVkICglZCkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNGEsCisJCSAgICAiUk5OX0lEIFNlbmQgU05TIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmIChzbnNfY21kLT5wLnJubl9kYXRhWzhdICE9IDB4ODAgfHwKIAkgICAgc25zX2NtZC0+cC5ybm5fZGF0YVs5XSAhPSAweDAyKSB7Ci0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBSTk5fSUQgZmFpbGVkLCByZWplY3RlZCByZXF1ZXN0LCAiCi0JCSAgICAicm5uX3JzcDpcbiIsIHZoYS0+aG9zdF9ubykpOwotCQlERUJVRzJfMyhxbGEyeDAwX2R1bXBfYnVmZmVyKHNuc19jbWQtPnAucm5uX2RhdGEsIDE2KSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDdiLAorCQkgICAgIlJOTl9JRCBmYWlsZWQsIHJlamVjdGVkIHJlcXVlc3QsIHJubl9yc3A6XG4iKTsKKwkJcWxfZHVtcF9idWZmZXIocWxfZGJnX2Rpc2MgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MjA3YywKKwkJICAgIHNuc19jbWQtPnAucm5uX2RhdGEsIDE2KTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBSTk5fSUQgZXhpdGluZyBub3JtYWxseS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA0YywKKwkJICAgICJSTk5fSUQgZXhpdGluZyBub3JtYWxseS5cbiIpOwogCX0KIAogCXJldHVybiAocnZhbCk7CkBAIC0xMTE2LDEwICsxMTE3LDEwIEBACiAJaGEtPmlzcF9vcHMtPmZhYnJpY19sb2dpbih2aGEsIHZoYS0+bWdtdF9zdnJfbG9vcF9pZCwgMHhmZiwgMHhmZiwgMHhmYSwKIAkgICAgbWIsIEJJVF8xfEJJVF8wKTsKIAlpZiAobWJbMF0gIT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJREVCVUcyXzEzKHByaW50aygiJXMoJWxkKTogRmFpbGVkIE1BTkFHRU1FTlRfU0VSVkVSIGxvZ2luOiAiCi0JCSAgICAibG9vcF9pZD0leCBtYlswXT0leCBtYlsxXT0leCBtYlsyXT0leCBtYls2XT0leCBtYls3XT0leFxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHZoYS0+bWdtdF9zdnJfbG9vcF9pZCwgbWJbMF0sIG1iWzFdLAotCQkgICAgbWJbMl0sIG1iWzZdLCBtYls3XSkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDI0LAorCQkgICAgIkZhaWxlZCBtYW5hZ2VtZW50X3NlcnZlciBsb2dpbjogbG9vcGlkPSV4IG1iWzBdPSV4ICIKKwkJICAgICJtYlsxXT0leCBtYlsyXT0leCBtYls2XT0leCBtYls3XT0leC5cbiIsCisJCSAgICB2aGEtPm1nbXRfc3ZyX2xvb3BfaWQsIG1iWzBdLCBtYlsxXSwgbWJbMl0sIG1iWzZdLCBtYls3XSk7CiAJCXJldCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlCiAJCXZoYS0+ZmxhZ3MubWFuYWdlbWVudF9zZXJ2ZXJfbG9nZ2VkX2luID0gMTsKQEAgLTEyOTIsMTEgKzEyOTMsMTIgQEAKIAltZW1jcHkoZWl0ZXItPmEubm9kZV9uYW1lLCB2aGEtPm5vZGVfbmFtZSwgV1dOX1NJWkUpOwogCXNpemUgKz0gNCArIFdXTl9TSVpFOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IE5PREVOQU1FPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4LlxuIiwKLQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkgICAgZWl0ZXItPmEubm9kZV9uYW1lWzBdLCBlaXRlci0+YS5ub2RlX25hbWVbMV0sIGVpdGVyLT5hLm5vZGVfbmFtZVsyXSwKLQkgICAgZWl0ZXItPmEubm9kZV9uYW1lWzNdLCBlaXRlci0+YS5ub2RlX25hbWVbNF0sIGVpdGVyLT5hLm5vZGVfbmFtZVs1XSwKLQkgICAgZWl0ZXItPmEubm9kZV9uYW1lWzZdLCBlaXRlci0+YS5ub2RlX25hbWVbN10pKTsKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDI1LAorCSAgICAiTm9kZU5hbWUgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeC5cbiIsCisJICAgIGVpdGVyLT5hLm5vZGVfbmFtZVswXSwgZWl0ZXItPmEubm9kZV9uYW1lWzFdLAorCSAgICBlaXRlci0+YS5ub2RlX25hbWVbMl0sIGVpdGVyLT5hLm5vZGVfbmFtZVszXSwKKwkgICAgZWl0ZXItPmEubm9kZV9uYW1lWzRdLCBlaXRlci0+YS5ub2RlX25hbWVbNV0sCisJICAgIGVpdGVyLT5hLm5vZGVfbmFtZVs2XSwgZWl0ZXItPmEubm9kZV9uYW1lWzddKTsKIAogCS8qIE1hbnVmYWN0dXJlci4gKi8KIAllaXRlciA9IChzdHJ1Y3QgY3RfZmRtaV9oYmFfYXR0ciAqKSAoZW50cmllcyArIHNpemUpOwpAQCAtMTMwNyw4ICsxMzA5LDggQEAKIAllaXRlci0+bGVuID0gY3B1X3RvX2JlMTYoNCArIGFsZW4pOwogCXNpemUgKz0gNCArIGFsZW47CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogTUFOVUZBQ1RVUkVSPSVzLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkgICAgZWl0ZXItPmEubWFudWZhY3R1cmVyKSk7CisJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAyNiwKKwkgICAgIk1hbnVmYWN0dXJlciA9ICVzLlxuIiwgZWl0ZXItPmEubWFudWZhY3R1cmVyKTsKIAogCS8qIFNlcmlhbCBudW1iZXIuICovCiAJZWl0ZXIgPSAoc3RydWN0IGN0X2ZkbWlfaGJhX2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKQEAgLTEzMjAsOCArMTMyMiw4IEBACiAJZWl0ZXItPmxlbiA9IGNwdV90b19iZTE2KDQgKyBhbGVuKTsKIAlzaXplICs9IDQgKyBhbGVuOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IFNFUklBTE5PPSVzLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkgICAgZWl0ZXItPmEuc2VyaWFsX251bSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMjcsCisJICAgICJTZXJpYWwgbm8uID0gJXMuXG4iLCBlaXRlci0+YS5zZXJpYWxfbnVtKTsKIAogCS8qIE1vZGVsIG5hbWUuICovCiAJZWl0ZXIgPSAoc3RydWN0IGN0X2ZkbWlfaGJhX2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKQEAgLTEzMzIsOCArMTMzNCw4IEBACiAJZWl0ZXItPmxlbiA9IGNwdV90b19iZTE2KDQgKyBhbGVuKTsKIAlzaXplICs9IDQgKyBhbGVuOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IE1PREVMX05BTUU9JXMuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCSAgICBlaXRlci0+YS5tb2RlbCkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMjgsCisJICAgICJNb2RlbCBOYW1lID0gJXMuXG4iLCBlaXRlci0+YS5tb2RlbCk7CiAKIAkvKiBNb2RlbCBkZXNjcmlwdGlvbi4gKi8KIAllaXRlciA9IChzdHJ1Y3QgY3RfZmRtaV9oYmFfYXR0ciAqKSAoZW50cmllcyArIHNpemUpOwpAQCAtMTM0NSw4ICsxMzQ3LDggQEAKIAllaXRlci0+bGVuID0gY3B1X3RvX2JlMTYoNCArIGFsZW4pOwogCXNpemUgKz0gNCArIGFsZW47CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogTU9ERUxfREVTQz0lcy5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JICAgIGVpdGVyLT5hLm1vZGVsX2Rlc2MpKTsKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDI5LAorCSAgICAiTW9kZWwgRGVzYyA9ICVzLlxuIiwgZWl0ZXItPmEubW9kZWxfZGVzYyk7CiAKIAkvKiBIYXJkd2FyZSB2ZXJzaW9uLiAqLwogCWVpdGVyID0gKHN0cnVjdCBjdF9mZG1pX2hiYV9hdHRyICopIChlbnRyaWVzICsgc2l6ZSk7CkBAIC0xMzU3LDggKzEzNTksOCBAQAogCWVpdGVyLT5sZW4gPSBjcHVfdG9fYmUxNig0ICsgYWxlbik7CiAJc2l6ZSArPSA0ICsgYWxlbjsKIAotCURFQlVHMTMocHJpbnRrKCIlcyglbGQpOiBIQVJEV0FSRVZFUj0lcy5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JICAgIGVpdGVyLT5hLmh3X3ZlcnNpb24pKTsKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDJhLAorCSAgICAiSGFyZHdhcmUgdmVyID0gJXMuXG4iLCBlaXRlci0+YS5od192ZXJzaW9uKTsKIAogCS8qIERyaXZlciB2ZXJzaW9uLiAqLwogCWVpdGVyID0gKHN0cnVjdCBjdF9mZG1pX2hiYV9hdHRyICopIChlbnRyaWVzICsgc2l6ZSk7CkBAIC0xMzY5LDggKzEzNzEsOCBAQAogCWVpdGVyLT5sZW4gPSBjcHVfdG9fYmUxNig0ICsgYWxlbik7CiAJc2l6ZSArPSA0ICsgYWxlbjsKIAotCURFQlVHMTMocHJpbnRrKCIlcyglbGQpOiBEUklWRVJWRVI9JXMuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCSAgICBlaXRlci0+YS5kcml2ZXJfdmVyc2lvbikpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMmIsCisJICAgICJEcml2ZXIgdmVyID0gJXMuXG4iLCBlaXRlci0+YS5kcml2ZXJfdmVyc2lvbik7CiAKIAkvKiBPcHRpb24gUk9NIHZlcnNpb24uICovCiAJZWl0ZXIgPSAoc3RydWN0IGN0X2ZkbWlfaGJhX2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKQEAgLTEzODEsOCArMTM4Myw4IEBACiAJZWl0ZXItPmxlbiA9IGNwdV90b19iZTE2KDQgKyBhbGVuKTsKIAlzaXplICs9IDQgKyBhbGVuOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IE9QVFJPTVZFUj0lcy5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JICAgIGVpdGVyLT5hLm9yb21fdmVyc2lvbikpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhICwgMHgyMDJjLAorCSAgICAiT3B0cm9tIHZlcnMgPSAlcy5cbiIsIGVpdGVyLT5hLm9yb21fdmVyc2lvbik7CiAKIAkvKiBGaXJtd2FyZSB2ZXJzaW9uICovCiAJZWl0ZXIgPSAoc3RydWN0IGN0X2ZkbWlfaGJhX2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKQEAgLTEzOTMsNDQgKzEzOTUsNDYgQEAKIAllaXRlci0+bGVuID0gY3B1X3RvX2JlMTYoNCArIGFsZW4pOwogCXNpemUgKz0gNCArIGFsZW47CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogRklSTVdBUkVWRVI9JXMuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCSAgICBlaXRlci0+YS5md192ZXJzaW9uKSk7CisJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAyZCwKKwkgICAgIkZpcm13YXJlIHZlcnMgPSAlcy5cbiIsIGVpdGVyLT5hLmZ3X3ZlcnNpb24pOwogCiAJLyogVXBkYXRlIE1TIHJlcXVlc3Qgc2l6ZS4gKi8KIAlxbGEyeDAwX3VwZGF0ZV9tc19mZG1pX2lvY2IodmhhLCBzaXplICsgMTYpOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IFJIQkEgaWRlbnRpZmllcj0iCi0JICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCBzaXplPSVkLlxuIiwgX19mdW5jX18sCi0JICAgIHZoYS0+aG9zdF9ubywgY3RfcmVxLT5yZXEucmhiYS5oYmFfaWRlbnRpZmllclswXSwKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDJlLAorCSAgICAiUkhCQSBpZGVudGlmaWVyID0gIgorCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggc2l6ZT0lZC5cbiIsCisJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbMF0sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbMV0sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbMl0sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbM10sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbNF0sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbNV0sCiAJICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbNl0sCi0JICAgIGN0X3JlcS0+cmVxLnJoYmEuaGJhX2lkZW50aWZpZXJbN10sIHNpemUpKTsKLQlERUJVRzEzKHFsYTJ4MDBfZHVtcF9idWZmZXIoZW50cmllcywgc2l6ZSkpOworCSAgICBjdF9yZXEtPnJlcS5yaGJhLmhiYV9pZGVudGlmaWVyWzddLCBzaXplKTsKKwlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDc2LAorCSAgICBlbnRyaWVzLCBzaXplKTsKIAogCS8qIEV4ZWN1dGUgTVMgSU9DQiAqLwogCXJ2YWwgPSBxbGEyeDAwX2lzc3VlX2lvY2IodmhhLCBoYS0+bXNfaW9jYiwgaGEtPm1zX2lvY2JfZG1hLAogCSAgICBzaXplb2YobXNfaW9jYl9lbnRyeV90KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBSSEJBIGlzc3VlIElPQ0IgZmFpbGVkICglZCkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzAsCisJCSAgICAiUkhCQSBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwgIlJIQkEiKSAhPQogCSAgICBRTEFfU1VDQ0VTUykgewogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJaWYgKGN0X3JzcC0+aGVhZGVyLnJlYXNvbl9jb2RlID09IENUX1JFQVNPTl9DQU5OT1RfUEVSRk9STSAmJgogCQkgICAgY3RfcnNwLT5oZWFkZXIuZXhwbGFuYXRpb25fY29kZSA9PQogCQkgICAgQ1RfRVhQTF9BTFJFQURZX1JFR0lTVEVSRUQpIHsKLQkJCURFQlVHMl8xMyhwcmludGsoIiVzKCVsZCk6IEhCQSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4iLAotCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzQsCisJCQkgICAgIkhCQSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4iKTsKIAkJCXJ2YWwgPSBRTEFfQUxSRUFEWV9SRUdJU1RFUkVEOwogCQl9CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBSSEJBIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzUsCisJCSAgICAiUkhCQSBleGl0aW5nIG5vcm1hbGx5LlxuIik7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNDY0LDI2ICsxNDY4LDI2IEBACiAJLyogUHJlcGFyZSBGRE1JIGNvbW1hbmQgYXJndW1lbnRzIC0tIHBvcnRuYW1lLiAqLwogCW1lbWNweShjdF9yZXEtPnJlcS5kaGJhLnBvcnRfbmFtZSwgdmhhLT5wb3J0X25hbWUsIFdXTl9TSVpFKTsKIAotCURFQlVHMTMocHJpbnRrKCIlcyglbGQpOiBESEJBIHBvcnRuYW1lPSIKLQkgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDM2LAorCSAgICAiREhCQSBwb3J0bmFtZSA9ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4LlxuIiwKIAkgICAgY3RfcmVxLT5yZXEuZGhiYS5wb3J0X25hbWVbMF0sIGN0X3JlcS0+cmVxLmRoYmEucG9ydF9uYW1lWzFdLAogCSAgICBjdF9yZXEtPnJlcS5kaGJhLnBvcnRfbmFtZVsyXSwgY3RfcmVxLT5yZXEuZGhiYS5wb3J0X25hbWVbM10sCiAJICAgIGN0X3JlcS0+cmVxLmRoYmEucG9ydF9uYW1lWzRdLCBjdF9yZXEtPnJlcS5kaGJhLnBvcnRfbmFtZVs1XSwKLQkgICAgY3RfcmVxLT5yZXEuZGhiYS5wb3J0X25hbWVbNl0sIGN0X3JlcS0+cmVxLmRoYmEucG9ydF9uYW1lWzddKSk7CisJICAgIGN0X3JlcS0+cmVxLmRoYmEucG9ydF9uYW1lWzZdLCBjdF9yZXEtPnJlcS5kaGJhLnBvcnRfbmFtZVs3XSk7CiAKIAkvKiBFeGVjdXRlIE1TIElPQ0IgKi8KIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgaGEtPm1zX2lvY2IsIGhhLT5tc19pb2NiX2RtYSwKIAkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogREhCQSBpc3N1ZSBJT0NCIGZhaWxlZCAoJWQpLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDM3LAorCQkgICAgIkRIQkEgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsICJESEJBIikgIT0KIAkgICAgUUxBX1NVQ0NFU1MpIHsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBESEJBIGV4aXRpbmcgbm9ybWFsbHkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzgsCisJCSAgICAiREhCQSBleGl0aW5nIG5vcm1hbGx5LlxuIik7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNTM0LDkgKzE1MzgsMTAgQEAKIAllaXRlci0+YS5mYzRfdHlwZXNbMl0gPSAweDAxOwogCXNpemUgKz0gNCArIDMyOwogCi0JREVCVUcxMyhwcmludGsoIiVzKCVsZCk6IEZDNF9UWVBFUz0lMDJ4ICUwMnguXG4iLCBfX2Z1bmNfXywKLQkJdmhhLT5ob3N0X25vLCBlaXRlci0+YS5mYzRfdHlwZXNbMl0sCi0JCWVpdGVyLT5hLmZjNF90eXBlc1sxXSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMzksCisJICAgICJGQzRfVFlQRVM9JTAyeCAlMDJ4LlxuIiwKKwkgICAgZWl0ZXItPmEuZmM0X3R5cGVzWzJdLAorCSAgICBlaXRlci0+YS5mYzRfdHlwZXNbMV0pOwogCiAJLyogU3VwcG9ydGVkIHNwZWVkLiAqLwogCWVpdGVyID0gKHN0cnVjdCBjdF9mZG1pX3BvcnRfYXR0ciAqKSAoZW50cmllcyArIHNpemUpOwpAQCAtMTU2MSw4ICsxNTY2LDggQEAKIAkJICAgIEZETUlfUE9SVF9TUEVFRF8xR0IpOwogCXNpemUgKz0gNCArIDQ7CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogU1VQUE9SVEVEX1NQRUVEPSV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkgICAgZWl0ZXItPmEuc3VwX3NwZWVkKSk7CisJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAzYSwKKwkgICAgIlN1cHBvcnRlZF9TcGVlZD0leC5cbiIsIGVpdGVyLT5hLnN1cF9zcGVlZCk7CiAKIAkvKiBDdXJyZW50IHNwZWVkLiAqLwogCWVpdGVyID0gKHN0cnVjdCBjdF9mZG1pX3BvcnRfYXR0ciAqKSAoZW50cmllcyArIHNpemUpOwpAQCAtMTU5Niw4ICsxNjAxLDggQEAKIAl9CiAJc2l6ZSArPSA0ICsgNDsKIAotCURFQlVHMTMocHJpbnRrKCIlcyglbGQpOiBDVVJSRU5UX1NQRUVEPSV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkgICAgZWl0ZXItPmEuY3VyX3NwZWVkKSk7CisJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAzYiwKKwkgICAgIkN1cnJlbnRfU3BlZWQ9JXguXG4iLCBlaXRlci0+YS5jdXJfc3BlZWQpOwogCiAJLyogTWF4IGZyYW1lIHNpemUuICovCiAJZWl0ZXIgPSAoc3RydWN0IGN0X2ZkbWlfcG9ydF9hdHRyICopIChlbnRyaWVzICsgc2l6ZSk7CkBAIC0xNjA5LDggKzE2MTQsOCBAQAogCWVpdGVyLT5hLm1heF9mcmFtZV9zaXplID0gY3B1X3RvX2JlMzIobWF4X2ZyYW1lX3NpemUpOwogCXNpemUgKz0gNCArIDQ7CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogTUFYX0ZSQU1FX1NJWkU9JXguXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCSAgICBlaXRlci0+YS5tYXhfZnJhbWVfc2l6ZSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwM2MsCisJICAgICJNYXhfRnJhbWVfU2l6ZT0leC5cbiIsIGVpdGVyLT5hLm1heF9mcmFtZV9zaXplKTsKIAogCS8qIE9TIGRldmljZSBuYW1lLiAqLwogCWVpdGVyID0gKHN0cnVjdCBjdF9mZG1pX3BvcnRfYXR0ciAqKSAoZW50cmllcyArIHNpemUpOwpAQCAtMTYyMSw4ICsxNjI2LDggQEAKIAllaXRlci0+bGVuID0gY3B1X3RvX2JlMTYoNCArIGFsZW4pOwogCXNpemUgKz0gNCArIGFsZW47CiAKLQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogT1NfREVWSUNFX05BTUU9JXMuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCSAgICBlaXRlci0+YS5vc19kZXZfbmFtZSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNGIsCisJICAgICJPU19EZXZpY2VfTmFtZT0lcy5cbiIsIGVpdGVyLT5hLm9zX2Rldl9uYW1lKTsKIAogCS8qIEhvc3RuYW1lLiAqLwogCWlmIChzdHJsZW4oZmNfaG9zdF9zeXN0ZW1faG9zdG5hbWUodmhhLT5ob3N0KSkpIHsKQEAgLTE2MzcsMzUgKzE2NDIsMzYgQEAKIAkJZWl0ZXItPmxlbiA9IGNwdV90b19iZTE2KDQgKyBhbGVuKTsKIAkJc2l6ZSArPSA0ICsgYWxlbjsKIAotCQlERUJVRzEzKHByaW50aygiJXMoJWxkKTogSE9TVE5BTUU9JXMuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgZWl0ZXItPmEuaG9zdF9uYW1lKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwM2QsCisJCSAgICAiSG9zdE5hbWU9JXMuXG4iLCBlaXRlci0+YS5ob3N0X25hbWUpOwogCX0KIAogCS8qIFVwZGF0ZSBNUyByZXF1ZXN0IHNpemUuICovCiAJcWxhMngwMF91cGRhdGVfbXNfZmRtaV9pb2NiKHZoYSwgc2l6ZSArIDE2KTsKIAotCURFQlVHMTMocHJpbnRrKCIlcyglbGQpOiBSUEEgcG9ydG5hbWU9IgotCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggc2l6ZT0lZC5cbiIsIF9fZnVuY19fLAotCSAgICB2aGEtPmhvc3Rfbm8sIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbMF0sCi0JICAgIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbMV0sIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbMl0sCi0JICAgIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbM10sIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbNF0sCi0JICAgIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbNV0sIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbNl0sCi0JICAgIGN0X3JlcS0+cmVxLnJwYS5wb3J0X25hbWVbN10sIHNpemUpKTsKLQlERUJVRzEzKHFsYTJ4MDBfZHVtcF9idWZmZXIoZW50cmllcywgc2l6ZSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwM2UsCisJICAgICJSUEEgcG9ydG5hbWU9ICUwMnglMDJ4JTAyeCUwMnglMDJYJTAyeCUwMnglMDJ4IHNpemU9JWQuXG4iLAorCSAgICBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzBdLCBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzFdLAorCSAgICBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzJdLCBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzNdLAorCSAgICBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzRdLCBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzVdLAorCSAgICBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzZdLCBjdF9yZXEtPnJlcS5ycGEucG9ydF9uYW1lWzddLAorCSAgICBzaXplKTsKKwlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfZGlzYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgyMDc5LAorCSAgICBlbnRyaWVzLCBzaXplKTsKIAogCS8qIEV4ZWN1dGUgTVMgSU9DQiAqLwogCXJ2YWwgPSBxbGEyeDAwX2lzc3VlX2lvY2IodmhhLCBoYS0+bXNfaW9jYiwgaGEtPm1zX2lvY2JfZG1hLAogCSAgICBzaXplb2YobXNfaW9jYl9lbnRyeV90KSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zKHByaW50aygic2NzaSglbGQpOiBSUEEgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA0MCwKKwkJICAgICJSUEEgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAocWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsICJSUEEiKSAhPQogCSAgICBRTEFfU1VDQ0VTUykgewogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFJQQSBleGl0aW5nIG5vcm1hbGx5LlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDQxLAorCQkgICAgIlJQQSBleGl0aW5nIG5vcm5hbGx5LlxuIik7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNzQ5LDggKzE3NTUsOCBAQAogCQkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJLypFTVBUWSovCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR0ZQTl9JRCBpc3N1ZSBJT0NCICIKLQkJCSAgICAiZmFpbGVkICglZCkuXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMjMsCisJCQkgICAgIkdGUE5fSUQgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCQl9IGVsc2UgaWYgKHFsYTJ4MDBfY2hrX21zX3N0YXR1cyh2aGEsIG1zX3BrdCwgY3RfcnNwLAogCQkgICAgIkdGUE5fSUQiKSAhPSBRTEFfU1VDQ0VTUykgewogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CkBAIC0xODYwLDggKzE4NjYsOCBAQAogCQkgICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJLypFTVBUWSovCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR1BTQyBpc3N1ZSBJT0NCICIKLQkJCSAgICAiZmFpbGVkICglZCkuXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNTksCisJCQkgICAgIkdQU0MgaXNzdWUgSU9DQiBmYWlsZWQgKCVkKS5cbiIsIHJ2YWwpOwogCQl9IGVsc2UgaWYgKChydmFsID0gcWxhMngwMF9jaGtfbXNfc3RhdHVzKHZoYSwgbXNfcGt0LCBjdF9yc3AsCiAJCSAgICAiR1BTQyIpKSAhPSBRTEFfU1VDQ0VTUykgewogCQkJLyogRk0gY29tbWFuZCB1bnN1cHBvcnRlZD8gKi8KQEAgLTE4NzAsOSArMTg3Niw5IEBACiAJCQkJQ1RfUkVBU09OX0lOVkFMSURfQ09NTUFORF9DT0RFIHx8CiAJCQkgICAgIGN0X3JzcC0+aGVhZGVyLnJlYXNvbl9jb2RlID09CiAJCQkJQ1RfUkVBU09OX0NPTU1BTkRfVU5TVVBQT1JURUQpKSB7Ci0JCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBHUFNDIGNvbW1hbmQgIgotCQkJCSAgICAidW5zdXBwb3J0ZWQsIGRpc2FibGluZyBxdWVyeS4uLlxuIiwKLQkJCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1YSwKKwkJCQkgICAgIkdQU0MgY29tbWFuZCB1bnN1cHBvcnRlZCwgZGlzYWJsaW5nICIKKwkJCQkgICAgInF1ZXJ5LlxuIik7CiAJCQkJaGEtPmZsYWdzLmdwc2Nfc3VwcG9ydGVkID0gMDsKIAkJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJCQlicmVhazsKQEAgLTE4OTgsOSArMTkwNCwxMCBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogR1BTQyBleHQgZW50cnkgLSAiCi0JCQkgICAgImZwbiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCBzcGVlZHM9JTA0eCAiCi0JCQkgICAgInNwZWVkPSUwNHguXG4iLCB2aGEtPmhvc3Rfbm8sCisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDViLAorCQkJICAgICJHUFNDIGV4dCBlbnRyeSAtIGZwbiAiCisJCQkgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IHNwZWVkcz0lMDR4ICIKKwkJCSAgICAic3BlZWQ9JTA0eC5cbiIsCiAJCQkgICAgbGlzdFtpXS5mYWJyaWNfcG9ydF9uYW1lWzBdLAogCQkJICAgIGxpc3RbaV0uZmFicmljX3BvcnRfbmFtZVsxXSwKIAkJCSAgICBsaXN0W2ldLmZhYnJpY19wb3J0X25hbWVbMl0sCkBAIC0xOTEwLDcgKzE5MTcsNyBAQAogCQkJICAgIGxpc3RbaV0uZmFicmljX3BvcnRfbmFtZVs2XSwKIAkJCSAgICBsaXN0W2ldLmZhYnJpY19wb3J0X25hbWVbN10sCiAJCQkgICAgYmUxNl90b19jcHUoY3RfcnNwLT5yc3AuZ3BzYy5zcGVlZHMpLAotCQkJICAgIGJlMTZfdG9fY3B1KGN0X3JzcC0+cnNwLmdwc2Muc3BlZWQpKSk7CisJCQkgICAgYmUxNl90b19jcHUoY3RfcnNwLT5yc3AuZ3BzYy5zcGVlZCkpOwogCQl9CiAKIAkJLyogTGFzdCBkZXZpY2UgZXhpdC4gKi8KQEAgLTE5NjgsMTQgKzE5NzUsMTIgQEAKIAkJICAgc2l6ZW9mKG1zX2lvY2JfZW50cnlfdCkpOwogCiAJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRzJfMyhwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgInNjc2koJWxkKTogR0ZGX0lEIGlzc3VlIElPQ0IgZmFpbGVkICIKLQkJCSAgICAiKCVkKS5cbiIsIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA1YywKKwkJCSAgICAiR0ZGX0lEIGlzc3VlIElPQ0IgZmFpbGVkICglZCkuXG4iLCBydmFsKTsKIAkJfSBlbHNlIGlmIChxbGEyeDAwX2Noa19tc19zdGF0dXModmhhLCBtc19wa3QsIGN0X3JzcCwKIAkJCSAgICAgICAiR0ZGX0lEIikgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCURFQlVHMl8zKHByaW50ayhLRVJOX0lORk8KLQkJCSAgICAic2NzaSglbGQpOiBHRkZfSUQgSU9DQiBzdGF0dXMgaGFkIGEgIgotCQkJICAgICJmYWlsdXJlIHN0YXR1cyBjb2RlXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNWQsCisJCQkgICAgIkdGRl9JRCBJT0NCIHN0YXR1cyBoYWQgYSBmYWlsdXJlIHN0YXR1cyBjb2RlLlxuIik7CiAJCX0gZWxzZSB7CiAJCQlmY3Bfc2NzaV9mZWF0dXJlcyA9CiAJCQkgICBjdF9yc3AtPnJzcC5nZmZfaWQuZmM0X2ZlYXR1cmVzW0dGRl9GQ1BfU0NTSV9PRkZTRVRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggOTIwYjc2Yi4uMzdkYTA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0xNTMsMTEgKzE1MywxMCBAQAogCWZjX3BvcnRfdCAqZmNwb3J0ID0gc3AtPmZjcG9ydDsKIAlzdHJ1Y3Qgc3JiX2N0eCAqY3R4ID0gc3AtPmN0eDsKIAotCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCi0JCSJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIHRpbWVvdXQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKLQkJZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsCi0JCWN0eC0+bmFtZSwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAotCQlmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgZmNwb3J0LT52aGEsIDB4MjA3MSwKKwkgICAgIkFzeW5jLSVzIHRpbWVvdXQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKKwkgICAgY3R4LT5uYW1lLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAogCWZjcG9ydC0+ZmxhZ3MgJj0gfkZDRl9BU1lOQ19TRU5UOwogCWlmIChjdHgtPnR5cGUgPT0gU1JCX0xPR0lOX0NNRCkgewpAQCAtMjExLDExICsyMTAsMTAgQEAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKIAkJZ290byBkb25lX2ZyZWVfc3A7CiAKLQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtbG9naW4gLSBsb29wLWlkPSV4IHBvcnRpZD0lMDJ4JTAyeCUwMnggIgotCSAgICAicmV0cmllcz0lZC5cbiIsIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCBmY3BvcnQtPmxvb3BfaWQsCi0JICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEsCi0JICAgIGZjcG9ydC0+bG9naW5fcmV0cnkpKTsKKwlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDcyLAorCSAgICAiQXN5bmMtbG9naW4gLSBsb29waWQ9JXggcG9ydGlkPSUwMnglMDJ4JTAyeCByZXRyaWVzPSVkLlxuIiwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBmY3BvcnQtPmxvZ2luX3JldHJ5KTsKIAlyZXR1cm4gcnZhbDsKIAogZG9uZV9mcmVlX3NwOgpAQCAtMjU5LDEwICsyNTcsMTAgQEAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKIAkJZ290byBkb25lX2ZyZWVfc3A7CiAKLQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtbG9nb3V0IC0gbG9vcC1pZD0leCBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIGZjcG9ydC0+bG9vcF9pZCwKLQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNzAsCisJICAgICJBc3luYy1sb2dvdXQgLSBsb29wLWlkPSV4IHBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLAorCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCXJldHVybiBydmFsOwogCiBkb25lX2ZyZWVfc3A6CkBAIC0zMDksMTEgKzMwNywxMCBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQogCQlnb3RvIGRvbmVfZnJlZV9zcDsKIAotCURFQlVHMihwcmludGsoS0VSTl9ERUJVRwotCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy1hZGlzYyAtIGxvb3AtaWQ9JXggcG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsCi0JICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCBmY3BvcnQtPmxvb3BfaWQsCi0JICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKLQorCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNmYsCisJICAgICJBc3luYy1hZGlzYyAtIGxvb3BpZD0leCBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAlyZXR1cm4gcnZhbDsKIAogZG9uZV9mcmVlX3NwOgpAQCAtMzYyLDExICszNTksMTAgQEAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKIAkJZ290byBkb25lX2ZyZWVfc3A7CiAKLQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKLQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtdG1mIC0gbG9vcC1pZD0leCBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIGZjcG9ydC0+bG9vcF9pZCwKLQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOwotCisJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMmYsCisJICAgICJBc3luYy10bWYgbG9vcC1pZD0leCBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwKKwkgICAgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAlyZXR1cm4gcnZhbDsKIAogZG9uZV9mcmVlX3NwOgpAQCAtNDcxLDkgKzQ2Nyw4IEBACiAJCWZsYWdzID09IFRDRl9MVU5fUkVTRVQgPyBNS19TWU5DX0lEX0xVTiA6IE1LX1NZTkNfSUQpOwogCiAJaWYgKChydmFsICE9IFFMQV9TVUNDRVNTKSB8fCBpb2NiLT51LnRtZi5kYXRhKSB7Ci0JCURFQlVHMl8zXzExKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIlcyglbGQpOiBUTSBJT0NCIGZhaWxlZCAoJXgpLlxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMzAsCisJCSAgICAiVE0gSU9DQiBmYWlsZWQgKCV4KS5cbiIsIHJ2YWwpOwogCX0KIAogCXJldHVybjsKQEAgLTUxOSwxMSArNTE0LDEyIEBACiAJc2V0X2JpdCgwLCBoYS0+cmVxX3FpZF9tYXApOwogCXNldF9iaXQoMCwgaGEtPnJzcF9xaWRfbWFwKTsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkNvbmZpZ3VyaW5nIFBDSSBzcGFjZS4uLlxuIik7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA0MCwKKwkgICAgIkNvbmZpZ3VyaW5nIFBDSSBzcGFjZS4uLlxuIik7CiAJcnZhbCA9IGhhLT5pc3Bfb3BzLT5wY2lfY29uZmlnKHZoYSk7CiAJaWYgKHJ2YWwpIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbmFibGUgdG8gY29uZmlndXJlIFBDSSBzcGFjZS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA0NCwKKwkJICAgICJVbmFibGUgdG8gY29uZmlndXJlIFBDSSBzcGFjZS5cbiIpOwogCQlyZXR1cm4gKHJ2YWwpOwogCX0KIApAQCAtNTMxLDIwICs1MjcsMjEgQEAKIAogCXJ2YWwgPSBxbGEyeHh4X2dldF9mbGFzaF9pbmZvKHZoYSk7CiAJaWYgKHJ2YWwpIHsKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbmFibGUgdG8gdmFsaWRhdGUgRkxBU0ggZGF0YS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwNGYsCisJCSAgICAiVW5hYmxlIHRvIHZhbGlkYXRlIEZMQVNIIGRhdGEuXG4iKTsKIAkJcmV0dXJuIChydmFsKTsKIAl9CiAKIAloYS0+aXNwX29wcy0+Z2V0X2ZsYXNoX3ZlcnNpb24odmhhLCByZXEtPnJpbmcpOwotCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQ29uZmlndXJlIE5WUkFNIHBhcmFtZXRlcnMuLi5cbiIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwNjEsCisJICAgICJDb25maWd1cmUgTlZSQU0gcGFyYW1ldGVycy4uLlxuIik7CiAKIAloYS0+aXNwX29wcy0+bnZyYW1fY29uZmlnKHZoYSk7CiAKIAlpZiAoaGEtPmZsYWdzLmRpc2FibGVfc2VyZGVzKSB7CiAJCS8qIE1hc2sgSEJBIHZpYSBOVlJBTSBzZXR0aW5ncz8gKi8KLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTWFza2luZyBIQkEgV1dQTiAiCisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwNzcsCisJCSAgICAiTWFza2luZyBIQkEgV1dQTiAiCiAJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggKHZpYSBOVlJBTSkuXG4iLAogCQkgICAgdmhhLT5wb3J0X25hbWVbMF0sIHZoYS0+cG9ydF9uYW1lWzFdLAogCQkgICAgdmhhLT5wb3J0X25hbWVbMl0sIHZoYS0+cG9ydF9uYW1lWzNdLApAQCAtNTUzLDcgKzU1MCw4IEBACiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0KIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlZlcmlmeWluZyBsb2FkZWQgUklTQyBjb2RlLi4uXG4iKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDc4LAorCSAgICAiVmVyaWZ5aW5nIGxvYWRlZCBSSVNDIGNvZGUuLi5cbiIpOwogCiAJaWYgKHFsYTJ4MDBfaXNwX2Zpcm13YXJlKHZoYSkgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJcnZhbCA9IGhhLT5pc3Bfb3BzLT5jaGlwX2RpYWcodmhhKTsKQEAgLTU2Nyw3ICs1NjUsNyBAQAogCWlmIChJU19RTEE4NFhYKGhhKSkgewogCQloYS0+Y3M4NHh4ID0gcWxhODR4eF9nZXRfY2hpcCh2aGEpOwogCQlpZiAoIWhhLT5jczg0eHgpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBkMCwKIAkJCSAgICAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBJU1A4NFhYLlxuIik7CiAJCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfQpAQCAtNTc5LDggKzU3Nyw4IEBACiAJCS8qIElzc3VlIHZlcmlmeSA4NHh4IEZXIElPQ0IgdG8gY29tcGxldGUgODR4eCBpbml0aWFsaXphdGlvbiAqLwogCQlydmFsID0gcWxhODR4eF9pbml0X2NoaXAodmhhKTsKIAkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJCSJVbmFibGUgdG8gaW5pdGlhbGl6ZSBJU1A4NFhYLlxuIik7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGQ0LAorCQkJICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBJU1A4NFhYLlxuIik7CiAJCXFsYTg0eHhfcHV0X2NoaXAodmhhKTsKIAkJfQogCX0KQEAgLTc5Nyw5ICs3OTUsNyBAQAogCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCiAJaWYgKGhhLT5mbGFncy5kaXNhYmxlX3Jpc2NfY29kZV9sb2FkKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUklTQyBDT0RFIE5PVCBsb2FkZWRcbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUklTQyBDT0RFIE5PVCBsb2FkZWRcbiIpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDc5LCAiUklTQyBDT0RFIE5PVCBsb2FkZWQuXG4iKTsKIAogCQkvKiBWZXJpZnkgY2hlY2tzdW0gb2YgbG9hZGVkIFJJU0MgY29kZS4gKi8KIAkJcnZhbCA9IHFsYTJ4MDBfdmVyaWZ5X2NoZWNrc3VtKHZoYSwgaGEtPmZ3X3NyaXNjX2FkZHJlc3MpOwpAQCAtODEwLDEwICs4MDYsOSBAQAogCQl9CiAJfQogCi0JaWYgKHJ2YWwpIHsKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6ICoqKiogTG9hZCBSSVNDIGNvZGUgKioqKlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOwotCX0KKwlpZiAocnZhbCkKKwkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA3YSwKKwkJICAgICIqKioqIExvYWQgUklTQyBjb2RlICoqKiouXG4iKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0xMTA1LDggKzExMDAsOCBAQAogCS8qIEFzc3VtZSBhIGZhaWxlZCBzdGF0ZSAqLwogCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUczKHByaW50aygic2NzaSglbGQpOiBUZXN0aW5nIGRldmljZSBhdCAlbHguXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8sICh1X2xvbmcpJnJlZy0+Zmxhc2hfYWRkcmVzcykpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwN2IsCisJICAgICJUZXN0aW5nIGRldmljZSBhdCAlbHguXG4iLCAodV9sb25nKSZyZWctPmZsYXNoX2FkZHJlc3MpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKQEAgLTExMjgsOCArMTEyMyw4IEBACiAJaWYgKCFjbnQpCiAJCWdvdG8gY2hpcF9kaWFnX2ZhaWxlZDsKIAotCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogUmVzZXQgcmVnaXN0ZXIgY2xlYXJlZCBieSBjaGlwIHJlc2V0XG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDdjLAorCSAgICAiUmVzZXQgcmVnaXN0ZXIgY2xlYXJlZCBieSBjaGlwIHJlc2V0LlxuIik7CiAKIAkvKiBSZXNldCBSSVNDIHByb2Nlc3Nvci4gKi8KIAlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwgSENDUl9SRVNFVF9SSVNDKTsKQEAgLTExNTAsNyArMTE0NSw3IEBACiAJCWdvdG8gY2hpcF9kaWFnX2ZhaWxlZDsKIAogCS8qIENoZWNrIHByb2R1Y3QgSUQgb2YgY2hpcCAqLwotCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogQ2hlY2tpbmcgcHJvZHVjdCBJRCBvZiBjaGlwXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDdkLCAiQ2hlY2tpbmcgcHJvZHVjdCBJZCBvZiBjaGlwLlxuIik7CiAKIAltYlsxXSA9IFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDEpOwogCW1iWzJdID0gUkRfTUFJTEJPWF9SRUcoaGEsIHJlZywgMik7CkBAIC0xMTU4LDggKzExNTMsOSBAQAogCW1iWzRdID0gcWxhMngwMF9kZWJvdW5jZV9yZWdpc3RlcihNQUlMQk9YX1JFRyhoYSwgcmVnLCA0KSk7CiAJaWYgKG1iWzFdICE9IFBST0RfSURfMSB8fCAobWJbMl0gIT0gUFJPRF9JRF8yICYmIG1iWzJdICE9IFBST0RfSURfMmEpIHx8CiAJICAgIG1iWzNdICE9IFBST0RfSURfMykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiV3JvbmcgcHJvZHVjdCBJRCA9IDB4JXgsMHgleCwweCV4XG4iLCBtYlsxXSwgbWJbMl0sIG1iWzNdKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA2MiwKKwkJICAgICJXcm9uZyBwcm9kdWN0IElEID0gMHgleCwweCV4LDB4JXguXG4iLAorCQkgICAgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAKIAkJZ290byBjaGlwX2RpYWdfZmFpbGVkOwogCX0KQEAgLTExNzgsOCArMTE3NCw3IEBACiAJaWYgKElTX1FMQTIyMDAoaGEpICYmCiAJICAgIFJEX01BSUxCT1hfUkVHKGhhLCByZWcsIDcpID09IFFMQTIyMDBBX1JJU0NfUk9NX1ZFUikgewogCQkvKiBMaW1pdCBmaXJtd2FyZSB0cmFuc2ZlciBzaXplIHdpdGggYSAyMjAwQSAqLwotCQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IEZvdW5kIFFMQTIyMDBBIGNoaXAuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwN2UsICJGb3VuZCBRTEEyMjAwQSBDaGlwLlxuIik7CiAKIAkJaGEtPmRldmljZV90eXBlIHw9IERUX0lTUDIyMDBBOwogCQloYS0+ZndfdHJhbnNmZXJfc2l6ZSA9IDEyODsKQEAgLTExODgsMjQgKzExODMsMjAgQEAKIAkvKiBXcmFwIEluY29taW5nIE1haWxib3hlcyBUZXN0LiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKLQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IENoZWNraW5nIG1haWxib3hlcy5cbiIsIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwN2YsICJDaGVja2luZyBtYWlsYm94ZXMuXG4iKTsKIAlydmFsID0gcWxhMngwMF9tYnhfcmVnX3Rlc3QodmhhKTsKLQlpZiAocnZhbCkgewotCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogRmFpbGVkIG1haWxib3ggc2VuZCByZWdpc3RlciB0ZXN0XG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJGYWlsZWQgbWFpbGJveCBzZW5kIHJlZ2lzdGVyIHRlc3RcbiIpOwotCX0KLQllbHNlIHsKKwlpZiAocnZhbCkKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA4MCwKKwkJICAgICJGYWlsZWQgbWFpbGJveCBzZW5kIHJlZ2lzdGVyIHRlc3QuXG4iKTsKKwllbHNlCiAJCS8qIEZsYWcgYSBzdWNjZXNzZnVsIHJ2YWwgKi8KIAkJcnZhbCA9IFFMQV9TVUNDRVNTOwotCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAogY2hpcF9kaWFnX2ZhaWxlZDoKIAlpZiAocnZhbCkKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IENoaXAgZGlhZ25vc3RpY3MgKioqKiBGQUlMRUQgIgotCQkgICAgIioqKipcbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDgxLAorCQkgICAgIkNoaXAgZGlhZ25vc3RpY3MgKioqKiBGQUlMRUQgKioqKi5cbiIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIApAQCAtMTIzMiwxMCArMTIyMyw4IEBACiAKIAlydmFsID0gcWxhMngwMF9tYnhfcmVnX3Rlc3QodmhhKTsKIAlpZiAocnZhbCkgewotCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogRmFpbGVkIG1haWxib3ggc2VuZCByZWdpc3RlciB0ZXN0XG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJGYWlsZWQgbWFpbGJveCBzZW5kIHJlZ2lzdGVyIHRlc3RcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMDgyLAorCQkgICAgIkZhaWxlZCBtYWlsYm94IHNlbmQgcmVnaXN0ZXIgdGVzdC5cbiIpOwogCX0gZWxzZSB7CiAJCS8qIEZsYWcgYSBzdWNjZXNzZnVsIHJ2YWwgKi8KIAkJcnZhbCA9IFFMQV9TVUNDRVNTOwpAQCAtMTI1Nyw4ICsxMjQ2LDggQEAKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwID0gaGEtPnJzcF9xX21hcFswXTsKIAogCWlmIChoYS0+ZndfZHVtcCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmlybXdhcmUgZHVtcCBwcmV2aW91c2x5IGFsbG9jYXRlZC5cbiIpOworCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGJkLAorCQkgICAgIkZpcm13YXJlIGR1bXAgYWxyZWFkeSBhbGxvY2F0ZWQuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI4OCw4ICsxMjc3LDkgQEAKIAkJdGMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIEZDRV9TSVpFLCAmdGNfZG1hLAogCQkgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGMpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlVuYWJsZSB0byBhbGxvY2F0ZSAiCi0JCQkgICAgIiglZCBLQikgZm9yIEZDRS5cbiIsIEZDRV9TSVpFIC8gMTAyNCk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGJlLAorCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgKCVkIEtCKSBmb3IgRkNFLlxuIiwKKwkJCSAgICBGQ0VfU0laRSAvIDEwMjQpOwogCQkJZ290byB0cnlfZWZ0OwogCQl9CiAKQEAgLTEyOTcsMTYgKzEyODcsMTUgQEAKIAkJcnZhbCA9IHFsYTJ4MDBfZW5hYmxlX2ZjZV90cmFjZSh2aGEsIHRjX2RtYSwgRkNFX05VTV9CVUZGRVJTLAogCQkgICAgaGEtPmZjZV9tYiwgJmhhLT5mY2VfYnVmcyk7CiAJCWlmIChydmFsKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAiCi0JCQkgICAgIkZDRSAoJWQpLlxuIiwgcnZhbCk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGJmLAorCQkJICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBGQ0UgKCVkKS5cbiIsIHJ2YWwpOwogCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIEZDRV9TSVpFLCB0YywKIAkJCSAgICB0Y19kbWEpOwogCQkJaGEtPmZsYWdzLmZjZV9lbmFibGVkID0gMDsKIAkJCWdvdG8gdHJ5X2VmdDsKIAkJfQotCi0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkFsbG9jYXRlZCAoJWQgS0IpIGZvciBGQ0UuLi5cbiIsCi0JCSAgICBGQ0VfU0laRSAvIDEwMjQpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGMwLAorCQkgICAgIkFsbG9jYXRlICglZCBLQikgZm9yIEZDRS4uLlxuIiwgRkNFX1NJWkUgLyAxMDI0KTsKIAogCQlmY2Vfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcWxhMnh4eF9mY2VfY2hhaW4pICsgRkNFX1NJWkU7CiAJCWhhLT5mbGFncy5mY2VfZW5hYmxlZCA9IDE7CkBAIC0xMzE3LDIzICsxMzA2LDIzIEBACiAJCXRjID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBFRlRfU0laRSwgJnRjX2RtYSwKIAkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXRjKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJVbmFibGUgdG8gYWxsb2NhdGUgIgotCQkJICAgICIoJWQgS0IpIGZvciBFRlQuXG4iLCBFRlRfU0laRSAvIDEwMjQpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBjMSwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICglZCBLQikgZm9yIEVGVC5cbiIsCisJCQkgICAgRUZUX1NJWkUgLyAxMDI0KTsKIAkJCWdvdG8gY29udF9hbGxvYzsKIAkJfQogCiAJCW1lbXNldCh0YywgMCwgRUZUX1NJWkUpOwogCQlydmFsID0gcWxhMngwMF9lbmFibGVfZWZ0X3RyYWNlKHZoYSwgdGNfZG1hLCBFRlRfTlVNX0JVRkZFUlMpOwogCQlpZiAocnZhbCkgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgIgotCQkJICAgICJFRlQgKCVkKS5cbiIsIHJ2YWwpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBjMiwKKwkJCSAgICAiVW5hYmxlIHRvIGluaXRpYWxpemUgRUZUICglZCkuXG4iLCBydmFsKTsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCBFRlRfU0laRSwgdGMsCiAJCQkgICAgdGNfZG1hKTsKIAkJCWdvdG8gY29udF9hbGxvYzsKIAkJfQotCi0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkFsbG9jYXRlZCAoJWQgS0IpIGZvciBFRlQuLi5cbiIsCi0JCSAgICBFRlRfU0laRSAvIDEwMjQpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGMzLAorCQkgICAgIkFsbG9jYXRlZCAoJWQgS0IpIEVGVCAuLi5cbiIsIEVGVF9TSVpFIC8gMTAyNCk7CiAKIAkJZWZ0X3NpemUgPSBFRlRfU0laRTsKIAkJaGEtPmVmdF9kbWEgPSB0Y19kbWE7CkBAIC0xMzUwLDggKzEzMzksOSBAQAogCiAJaGEtPmZ3X2R1bXAgPSB2bWFsbG9jKGR1bXBfc2l6ZSk7CiAJaWYgKCFoYS0+ZndfZHVtcCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJVbmFibGUgdG8gYWxsb2NhdGUgKCVkIEtCKSBmb3IgIgotCQkgICAgImZpcm13YXJlIGR1bXAhISFcbiIsIGR1bXBfc2l6ZSAvIDEwMjQpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGM0LAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSAoJWQgS0IpIGZvciBmaXJtd2FyZSBkdW1wLlxuIiwKKwkJICAgIGR1bXBfc2l6ZSAvIDEwMjQpOwogCiAJCWlmIChoYS0+ZmNlKSB7CiAJCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgRkNFX1NJWkUsIGhhLT5mY2UsCkBAIC0xMzY4LDggKzEzNTgsOCBAQAogCQl9CiAJCXJldHVybjsKIAl9Ci0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxsb2NhdGVkICglZCBLQikgZm9yIGZpcm13YXJlIGR1bXAuLi5cbiIsCi0JICAgIGR1bXBfc2l6ZSAvIDEwMjQpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwYzUsCisJICAgICJBbGxvY2F0ZWQgKCVkIEtCKSBmb3IgZmlybXdhcmUgZHVtcC5cbiIsIGR1bXBfc2l6ZSAvIDEwMjQpOwogCiAJaGEtPmZ3X2R1bXBfbGVuID0gZHVtcF9zaXplOwogCWhhLT5md19kdW1wLT5zaWduYXR1cmVbMF0gPSAnUSc7CkBAIC0xMzk4LDIzICsxMzg4LDIxIEBACiAJaW50IHJ2YWw7CiAJdWludDE2X3QgZGM7CiAJdWludDMyX3QgZHc7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKIAlpZiAoIUlTX1FMQTgxWFgodmhhLT5odykpCiAJCXJldHVybiBRTEFfU1VDQ0VTUzsKIAogCXJ2YWwgPSBxbGEyeDAwX3dyaXRlX3JhbV93b3JkKHZoYSwgMHg3YzAwLCAxKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlN5bmMtTVBJOiBVbmFibGUgdG8gYWNxdWlyZSBzZW1hcGhvcmUuXG4iKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAxMDUsCisJCSAgICAiVW5hYmxlIHRvIGFjcXVpcmUgc2VtYXBob3JlLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZCh2aGEtPmh3LT5wZGV2LCAweDU0LCAmZGMpOwogCXJ2YWwgPSBxbGEyeDAwX3JlYWRfcmFtX3dvcmQodmhhLCAweDdhMTUsICZkdyk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJTeW5jLU1QSTogVW5hYmxlIHRvIHJlYWQgc3luYy5cbiIpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA2NywgIlVuYWJsZSB0byByZWFkIHN5bmMuXG4iKTsKIAkJZ290byBkb25lX3JlbGVhc2U7CiAJfQogCkBAIC0xNDI2LDE1ICsxNDE0LDE0IEBACiAJZHcgfD0gZGM7CiAJcnZhbCA9IHFsYTJ4MDBfd3JpdGVfcmFtX3dvcmQodmhhLCAweDdhMTUsIGR3KTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlN5bmMtTVBJOiBVbmFibGUgdG8gZ2FpbiBzeW5jLlxuIikpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMTE0LCAiVW5hYmxlIHRvIGdhaW4gc3luYy5cbiIpOwogCX0KIAogZG9uZV9yZWxlYXNlOgogCXJ2YWwgPSBxbGEyeDAwX3dyaXRlX3JhbV93b3JkKHZoYSwgMHg3YzAwLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlN5bmMtTVBJOiBVbmFibGUgdG8gcmVsZWFzZSBzZW1hcGhvcmUuXG4iKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNmQsCisJCSAgICAiVW5hYmxlIHRvIHJlbGVhc2Ugc2VtYXBob3JlLlxuIik7CiAJfQogCiBkb25lOgpAQCAtMTQ3OSwxNCArMTQ2NiwxNCBAQAogCS8qIExvYWQgZmlybXdhcmUgc2VxdWVuY2VzICovCiAJcnZhbCA9IGhhLT5pc3Bfb3BzLT5sb2FkX3Jpc2ModmhhLCAmc3Jpc2NfYWRkcmVzcyk7CiAJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IFZlcmlmeWluZyBDaGVja3N1bSBvZiBsb2FkZWQgUklTQyAiCi0JCSAgICAiY29kZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGM5LAorCQkgICAgIlZlcmlmeWluZyBDaGVja3N1bSBvZiBsb2FkZWQgUklTQyBjb2RlLlxuIik7CiAKIAkJcnZhbCA9IHFsYTJ4MDBfdmVyaWZ5X2NoZWNrc3VtKHZoYSwgc3Jpc2NfYWRkcmVzcyk7CiAJCWlmIChydmFsID09IFFMQV9TVUNDRVNTKSB7CiAJCQkvKiBTdGFydCBmaXJtd2FyZSBleGVjdXRpb24uICovCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogQ2hlY2tzdW0gT0ssIHN0YXJ0ICIKLQkJCSAgICAiZmlybXdhcmUuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwY2EsCisJCQkgICAgIlN0YXJ0aW5nIGZpcm13YXJlLlxuIik7CiAKIAkJCXJ2YWwgPSBxbGEyeDAwX2V4ZWN1dGVfZncodmhhLCBzcmlzY19hZGRyZXNzKTsKIAkJCS8qIFJldHJpZXZlIGZpcm13YXJlIGluZm9ybWF0aW9uLiAqLwpAQCAtMTUyMiw5ICsxNTA5LDkgQEAKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICJzY3NpKCVsZCk6IElTUCBGaXJtd2FyZSBmYWlsZWQgY2hlY2tzdW0uXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubykpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwY2QsCisJCQkgICAgIklTUCBGaXJtd2FyZSBmYWlsZWQgY2hlY2tzdW0uXG4iKTsKKwkJCWdvdG8gZmFpbGVkOwogCQl9CiAJfQogCkBAIC0xNTQ5LDcgKzE1MzYsNyBAQAogCQkJaGEtPmZsYWdzLmZhY19zdXBwb3J0ZWQgPSAxOwogCQkJaGEtPmZkdF9ibG9ja19zaXplID0gc2l6ZSA8PCAyOwogCQl9IGVsc2UgewotCQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGNlLAogCQkJICAgICJVbnN1cHBvcnRlZCBGQUMgZmlybXdhcmUgKCVkLiUwMmQuJTAyZCkuXG4iLAogCQkJICAgIGhhLT5md19tYWpvcl92ZXJzaW9uLCBoYS0+ZndfbWlub3JfdmVyc2lvbiwKIAkJCSAgICBoYS0+Zndfc3VibWlub3JfdmVyc2lvbik7CkBAIC0xNTU3LDggKzE1NDQsOCBAQAogCX0KIGZhaWxlZDoKIAlpZiAocnZhbCkgewotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogU2V0dXAgY2hpcCAqKioqIEZBSUxFRCAqKioqLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDBjZiwKKwkJICAgICJTZXR1cCBjaGlwICoqKipGQUlMRUQqKioqLlxuIik7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTE2MDgsMTAgKzE1OTUsMTEgQEAKIAkJcmV0dXJuOwogCiAJLyogU2VyaWFsIExpbmsgb3B0aW9ucy4gKi8KLQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IFNlcmlhbCBsaW5rIG9wdGlvbnM6XG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKLQlERUJVRzMocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKSZoYS0+Zndfc2VyaWFsbGlua19vcHRpb25zLAotCSAgICBzaXplb2YoaGEtPmZ3X3NlcmlhbGxpbmtfb3B0aW9ucykpKTsKKwlxbF9kYmcocWxfZGJnX2luaXQgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MDExNSwKKwkgICAgIlNlcmlhbCBsaW5rIG9wdGlvbnMuXG4iKTsKKwlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfaW5pdCArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgwMTA5LAorCSAgICAodWludDhfdCAqKSZoYS0+Zndfc2VyaWFsbGlua19vcHRpb25zLAorCSAgICBzaXplb2YoaGEtPmZ3X3NlcmlhbGxpbmtfb3B0aW9ucykpOwogCiAJaGEtPmZ3X29wdGlvbnNbMV0gJj0gfkZPMV9TRVRfRU1QSEFTSVNfU1dJTkc7CiAJaWYgKGhhLT5md19zZXJpYWxsaW5rX29wdGlvbnNbM10gJiBCSVRfMikgewpAQCAtMTY4OCw3ICsxNjc2LDcgQEAKIAkgICAgbGUxNl90b19jcHUoaGEtPmZ3X3NlcmlhbGxpbmtfb3B0aW9uczI0WzJdKSwKIAkgICAgbGUxNl90b19jcHUoaGEtPmZ3X3NlcmlhbGxpbmtfb3B0aW9uczI0WzNdKSk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMTA0LAogCQkgICAgIlVuYWJsZSB0byB1cGRhdGUgU2VyaWFsIExpbmsgb3B0aW9ucyAoJXgpLlxuIiwgcnZhbCk7CiAJfQogfQpAQCAtMTc0Niw4ICsxNzM0LDkgQEAKIAkJaWNiLT5yaWQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHJpZCk7CiAJCWlmIChoYS0+ZmxhZ3MubXNpeF9lbmFibGVkKSB7CiAJCQltc2l4ID0gJmhhLT5tc2l4X2VudHJpZXNbMV07Ci0JCQlERUJVRzJfMTcocHJpbnRrKEtFUk5fSU5GTwotCQkJIlJlZ2lzdGVyaW5nIHZlY3RvciAweCV4IGZvciBiYXNlIHF1ZVxuIiwgbXNpeC0+ZW50cnkpKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwZmQsCisJCQkgICAgIlJlZ2lzdGVyaW5nIHZlY3RvciAweCV4IGZvciBiYXNlIHF1ZS5cbiIsCisJCQkgICAgbXNpeC0+ZW50cnkpOwogCQkJaWNiLT5tc2l4ID0gY3B1X3RvX2xlMTYobXNpeC0+ZW50cnkpOwogCQl9CiAJCS8qIFVzZSBhbHRlcm5hdGUgUENJIGJ1cyBudW1iZXIgKi8KQEAgLTE3NjQsOCArMTc1Myw4IEBACiAJCQlpY2ItPmZpcm13YXJlX29wdGlvbnNfMiAmPQogCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIofkJJVF8yMik7CiAJCQloYS0+ZmxhZ3MuZGlzYWJsZV9tc2l4X2hhbmRzaGFrZSA9IDE7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJIk1TSVggSGFuZHNoYWtlIERpc2FibGUgTW9kZSB0dXJuZWQgb25cbiIpOworCQkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDBmZSwKKwkJCSAgICAiTVNJWCBIYW5kc2hha2UgRGlzYWJsZSBNb2RlIHR1cm5lZCBvbi5cbiIpOwogCQl9IGVsc2UgewogCQkJaWNiLT5maXJtd2FyZV9vcHRpb25zXzIgfD0KIAkJCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEJJVF8yMik7CkBAIC0xODUwLDcgKzE4MzksNyBAQAogCS8qIFVwZGF0ZSBhbnkgSVNQIHNwZWNpZmljIGZpcm13YXJlIG9wdGlvbnMgYmVmb3JlIGluaXRpYWxpemF0aW9uLiAqLwogCWhhLT5pc3Bfb3BzLT51cGRhdGVfZndfb3B0aW9ucyh2aGEpOwogCi0JREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IElzc3VlIGluaXQgZmlybXdhcmUuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGQxLCAiSXNzdWUgaW5pdCBmaXJtd2FyZS5cbiIpOwogCiAJaWYgKGhhLT5mbGFncy5ucGl2X3N1cHBvcnRlZCkgewogCQlpZiAoaGEtPm9wZXJhdGluZ19tb2RlID09IExPT1ApCkBAIC0xODY2LDExICsxODU1LDExIEBACiAKIAlydmFsID0gcWxhMngwMF9pbml0X2Zpcm13YXJlKHZoYSwgaGEtPmluaXRfY2Jfc2l6ZSk7CiAJaWYgKHJ2YWwpIHsKLQkJREVCVUcyXzMocHJpbnRrKCJzY3NpKCVsZCk6IEluaXQgZmlybXdhcmUgKioqKiBGQUlMRUQgKioqKi5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwZDIsCisJCSAgICAiSW5pdCBGaXJtd2FyZSAqKioqIEZBSUxFRCAqKioqLlxuIik7CiAJfSBlbHNlIHsKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBJbml0IGZpcm13YXJlIC0tIHN1Y2Nlc3MuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwZDMsCisJCSAgICAiSW5pdCBGaXJtd2FyZSAtLSBzdWNjZXNzLlxuIik7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTE5MTMsMTAgKzE5MDIsOCBAQAogCiAJLyogV2FpdCBmb3IgSVNQIHRvIGZpbmlzaCBMSVAgKi8KIAlpZiAoIXZoYS0+ZmxhZ3MuaW5pdF9kb25lKQotIAkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiV2FpdGluZyBmb3IgTElQIHRvIGNvbXBsZXRlLi4uXG4iKTsKLQotCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogV2FpdGluZyBmb3IgTElQIHRvIGNvbXBsZXRlLi4uXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAxZSwKKwkJICAgICJXYWl0aW5nIGZvciBMSVAgdG8gY29tcGxldGUuXG4iKTsKIAogCWRvIHsKIAkJcnZhbCA9IHFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKHZoYSwgc3RhdGUpOwpAQCAtMTkyNSwzMCArMTkxMiwzNSBAQAogCQkJCXZoYS0+ZGV2aWNlX2ZsYWdzICY9IH5ERkxHX05PX0NBQkxFOwogCQkJfQogCQkJaWYgKElTX1FMQTg0WFgoaGEpICYmIHN0YXRlWzBdICE9IEZTVEFURV9SRUFEWSkgewotCQkJCURFQlVHMTYocHJpbnRrKCJzY3NpKCVsZCk6IGZ3X3N0YXRlPSV4ICIKLQkJCQkgICAgIjg0eHg9JXguXG4iLCB2aGEtPmhvc3Rfbm8sIHN0YXRlWzBdLAotCQkJCSAgICBzdGF0ZVsyXSkpOworCQkJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDFmLAorCQkJCSAgICAiZndfc3RhdGU9JXggODR4eD0leC5cbiIsIHN0YXRlWzBdLAorCQkJCSAgICBzdGF0ZVsyXSk7CiAJCQkJaWYgKChzdGF0ZVsyXSAmIEZTVEFURV9MT0dHRURfSU4pICYmCiAJCQkJICAgICAoc3RhdGVbMl0gJiBGU1RBVEVfV0FJVElOR19GT1JfVkVSSUZZKSkgewotCQkJCQlERUJVRzE2KHByaW50aygic2NzaSglbGQpOiBTZW5kaW5nICIKLQkJCQkJICAgICJ2ZXJpZnkgaW9jYi5cbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAyOCwKKwkJCQkJICAgICJTZW5kaW5nIHZlcmlmeSBpb2NiLlxuIik7CiAKIAkJCQkJY3M4NHh4X3RpbWUgPSBqaWZmaWVzOwogCQkJCQlydmFsID0gcWxhODR4eF9pbml0X2NoaXAodmhhKTsKLQkJCQkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCQkJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQkJCQlxbF9sb2cocWxfbG9nX3dhcm4sCisJCQkJCQkgICAgdmhhLCAweDgwNDMsCisJCQkJCQkgICAgIkluaXQgY2hpcCBmYWlsZWQuXG4iKTsKIAkJCQkJCWJyZWFrOworCQkJCQl9CiAKIAkJCQkJLyogQWRkIHRpbWUgdGFrZW4gdG8gaW5pdGlhbGl6ZS4gKi8KIAkJCQkJY3M4NHh4X3RpbWUgPSBqaWZmaWVzIC0gY3M4NHh4X3RpbWU7CiAJCQkJCXd0aW1lICs9IGNzODR4eF90aW1lOwogCQkJCQltdGltZSArPSBjczg0eHhfdGltZTsKLQkJCQkJREVCVUcxNihwcmludGsoInNjc2koJWxkKTogSW5jcmVhc2luZyAiCi0JCQkJCSAgICAid2FpdCB0aW1lIGJ5ICVsZC4gTmV3IHRpbWUgJWxkXG4iLAotCQkJCQkgICAgdmhhLT5ob3N0X25vLCBjczg0eHhfdGltZSwgd3RpbWUpKTsKKwkJCQkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwNDIsCisJCQkJCSAgICAiSW5jcmVhc2luZyB3YWl0IHRpbWUgYnkgJWxkLiAiCisJCQkJCSAgICAiTmV3IHRpbWUgJWxkLlxuIiwgY3M4NHh4X3RpbWUsCisJCQkJCSAgICB3dGltZSk7CiAJCQkJfQogCQkJfSBlbHNlIGlmIChzdGF0ZVswXSA9PSBGU1RBVEVfUkVBRFkpIHsKLQkJCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogRi9XIFJlYWR5IC0gT0sgXG4iLAotCQkJCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAzNywKKwkJCQkgICAgIkYvVyBSZWFkeSAtIE9LLlxuIik7CiAKIAkJCQlxbGEyeDAwX2dldF9yZXRyeV9jbnQodmhhLCAmaGEtPnJldHJ5X2NvdW50LAogCQkJCSAgICAmaGEtPmxvZ2luX3RpbWVvdXQsICZoYS0+cl9hX3Rvdik7CkBAIC0xOTY1LDcgKzE5NTcsNyBAQAogCQkJCSAqIG90aGVyIHRoYW4gV2FpdCBmb3IgTG9naW4uCiAJCQkJICovCiAJCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgbXRpbWUpKSB7Ci0JCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAzOCwKIAkJCQkJICAgICJDYWJsZSBpcyB1bnBsdWdnZWQuLi5cbiIpOwogCiAJCQkJCXZoYS0+ZGV2aWNlX2ZsYWdzIHw9IERGTEdfTk9fQ0FCTEU7CkBAIC0xOTg1LDE3ICsxOTc3LDE3IEBACiAJCS8qIERlbGF5IGZvciBhIHdoaWxlICovCiAJCW1zbGVlcCg1MDApOwogCi0JCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogZndfc3RhdGU9JXggY3VyciB0aW1lPSVseC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHN0YXRlWzBdLCBqaWZmaWVzKSk7CisJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDM5LAorCQkgICAgImZ3X3N0YXRlPSV4IGN1cnIgdGltZT0lbHguXG4iLCBzdGF0ZVswXSwgamlmZmllcyk7CiAJfSB3aGlsZSAoMSk7CiAKLQlERUJVRyhwcmludGsoInNjc2koJWxkKTogZndfc3RhdGU9JXggKCV4LCAleCwgJXgsICV4KSBjdXJyIHRpbWU9JWx4LlxuIiwKLQkgICAgdmhhLT5ob3N0X25vLCBzdGF0ZVswXSwgc3RhdGVbMV0sIHN0YXRlWzJdLCBzdGF0ZVszXSwgc3RhdGVbNF0sCi0JICAgIGppZmZpZXMpKTsKKwlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAzYSwKKwkgICAgImZ3X3N0YXRlPSV4ICgleCwgJXgsICV4LCAleCkgIiAiY3VyciB0aW1lPSVseC5cbiIsIHN0YXRlWzBdLAorCSAgICBzdGF0ZVsxXSwgc3RhdGVbMl0sIHN0YXRlWzNdLCBzdGF0ZVs0XSwgamlmZmllcyk7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogRmlybXdhcmUgcmVhZHkgKioqKiBGQUlMRUQgKioqKi5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAzYiwKKwkJICAgICJGaXJtd2FyZSByZWFkeSAqKioqIEZBSUxFRCAqKioqLlxuIik7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTIwMzQsMTkgKzIwMjYsMTkgQEAKIAkJaWYgKExPT1BfVFJBTlNJVElPTih2aGEpIHx8IGF0b21pY19yZWFkKCZoYS0+bG9vcF9kb3duX3RpbWVyKSB8fAogCQkgICAgSVNfUUxBOFhYWF9UWVBFKGhhKSB8fAogCQkgICAgKHJ2YWwgPT0gUUxBX0NPTU1BTkRfRVJST1IgJiYgbG9vcF9pZCA9PSAweDcpKSB7Ci0JCQlERUJVRzIocHJpbnRrKCIlcyglbGQpIExvb3AgaXMgaW4gYSB0cmFuc2l0aW9uIHN0YXRlXG4iLAotCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMDgsCisJCQkgICAgIkxvb3AgaXMgaW4gYSB0cmFuc2l0aW9uIHN0YXRlLlxuIik7CiAJCX0gZWxzZSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIkVSUk9SIC0tIFVuYWJsZSB0byBnZXQgaG9zdCBsb29wIElELlxuIik7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgyMDA5LAorCQkJICAgICJVbmFibGUgdG8gZ2V0IGhvc3QgbG9vcCBJRC5cbiIpOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQl9CiAJCXJldHVybiAocnZhbCk7CiAJfQogCiAJaWYgKHRvcG8gPT0gNCkgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiQ2Fubm90IGdldCB0b3BvbG9neSAtIHJldHJ5aW5nLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDIwMGEsCisJCSAgICAiQ2Fubm90IGdldCB0b3BvbG9neSAtIHJldHJ5aW5nLlxuIik7CiAJCXJldHVybiAoUUxBX0ZVTkNUSU9OX0ZBSUxFRCk7CiAJfQogCkBAIC0yMDU5LDMxICsyMDUxLDI3IEBACiAKIAlzd2l0Y2ggKHRvcG8pIHsKIAljYXNlIDA6Ci0JCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogSEJBIGluIE5MIHRvcG9sb2d5LlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDBiLCAiSEJBIGluIE5MIHRvcG9sb2d5LlxuIik7CiAJCWhhLT5jdXJyZW50X3RvcG9sb2d5ID0gSVNQX0NGR19OTDsKIAkJc3RyY3B5KGNvbm5lY3RfdHlwZSwgIihMb29wKSIpOwogCQlicmVhazsKIAogCWNhc2UgMToKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBIQkEgaW4gRkwgdG9wb2xvZ3kuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMGMsICJIQkEgaW4gRkwgdG9wb2xvZ3kuXG4iKTsKIAkJaGEtPnN3aXRjaF9jYXAgPSBzd19jYXA7CiAJCWhhLT5jdXJyZW50X3RvcG9sb2d5ID0gSVNQX0NGR19GTDsKIAkJc3RyY3B5KGNvbm5lY3RfdHlwZSwgIihGTF9Qb3J0KSIpOwogCQlicmVhazsKIAogCWNhc2UgMjoKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBIQkEgaW4gTiBQMlAgdG9wb2xvZ3kuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMGQsICJIQkEgaW4gTiBQMlAgdG9wb2xvZ3kuXG4iKTsKIAkJaGEtPm9wZXJhdGluZ19tb2RlID0gUDJQOwogCQloYS0+Y3VycmVudF90b3BvbG9neSA9IElTUF9DRkdfTjsKIAkJc3RyY3B5KGNvbm5lY3RfdHlwZSwgIihOX1BvcnQtdG8tTl9Qb3J0KSIpOwogCQlicmVhazsKIAogCWNhc2UgMzoKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBIQkEgaW4gRiBQMlAgdG9wb2xvZ3kuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMGUsICJIQkEgaW4gRiBQMlAgdG9wb2xvZ3kuXG4iKTsKIAkJaGEtPnN3aXRjaF9jYXAgPSBzd19jYXA7CiAJCWhhLT5vcGVyYXRpbmdfbW9kZSA9IFAyUDsKIAkJaGEtPmN1cnJlbnRfdG9wb2xvZ3kgPSBJU1BfQ0ZHX0Y7CkBAIC0yMDkxLDkgKzIwNzksOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogSEJBIGluIHVua25vd24gdG9wb2xvZ3kgJXguICIKLQkJICAgICJVc2luZyBOTC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHRvcG8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAwZiwKKwkJICAgICJIQkEgaW4gdW5rbm93biB0b3BvbG9neSAleCwgdXNpbmcgTkwuXG4iLCB0b3BvKTsKIAkJaGEtPmN1cnJlbnRfdG9wb2xvZ3kgPSBJU1BfQ0ZHX05MOwogCQlzdHJjcHkoY29ubmVjdF90eXBlLCAiKExvb3ApIik7CiAJCWJyZWFrOwpAQCAtMjEwNiwxNCArMjA5MywxNiBAQAogCXZoYS0+ZF9pZC5iLmFsX3BhID0gYWxfcGE7CiAKIAlpZiAoIXZoYS0+ZmxhZ3MuaW5pdF9kb25lKQotIAkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgIlRvcG9sb2d5IC0gJXMsIEhvc3QgTG9vcCBhZGRyZXNzIDB4JXhcbiIsCisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDIwMTAsCisJCSAgICAiVG9wb2xvZ3kgLSAlcywgSG9zdCBMb29wIGFkZHJlc3MgMHgleC5cbiIsCiAJCSAgICBjb25uZWN0X3R5cGUsIHZoYS0+bG9vcF9pZCk7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogRkFJTEVELlxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDIwMTEsCisJCSAgICAiJXMgRkFJTEVEXG4iLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBleGl0aW5nIG5vcm1hbGx5LlxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMTIsCisJCSAgICAiJXMgc3VjY2Vzc1xuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybihydmFsKTsKQEAgLTIyMjcsMTggKzIyMTYsMjIgQEAKIAlmb3IgKGNudCA9IDAsIGNoa3N1bSA9IDA7IGNudCA8IGhhLT5udnJhbV9zaXplOyBjbnQrKykKIAkJY2hrc3VtICs9ICpwdHIrKzsKIAotCURFQlVHNShwcmludGsoInNjc2koJWxkKTogQ29udGVudHMgb2YgTlZSQU1cbiIsIHZoYS0+aG9zdF9ubykpOwotCURFQlVHNShxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbnYsIGhhLT5udnJhbV9zaXplKSk7CisJcWxfZGJnKHFsX2RiZ19pbml0ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDAxMGYsCisJICAgICJDb250ZW50cyBvZiBOVlJBTS5cbiIpOworCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19pbml0ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDAxMTAsCisJICAgICh1aW50OF90ICopbnYsIGhhLT5udnJhbV9zaXplKTsKIAogCS8qIEJhZCBOVlJBTSBkYXRhLCBzZXQgZGVmYXVsdHMgcGFyYW1ldGVycy4gKi8KIAlpZiAoY2hrc3VtIHx8IG52LT5pZFswXSAhPSAnSScgfHwgbnYtPmlkWzFdICE9ICdTJyB8fAogCSAgICBudi0+aWRbMl0gIT0gJ1AnIHx8IG52LT5pZFszXSAhPSAnICcgfHwgbnYtPm52cmFtX3ZlcnNpb24gPCAxKSB7CiAJCS8qIFJlc2V0IE5WUkFNIGRhdGEuICovCi0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIkluY29uc2lzdGVudCBOVlJBTSBkZXRlY3RlZDogIgotCQkgICAgImNoZWNrc3VtPTB4JXggaWQ9JWMgdmVyc2lvbj0weCV4LlxuIiwgY2hrc3VtLCBudi0+aWRbMF0sCi0JCSAgICBudi0+bnZyYW1fdmVyc2lvbik7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIkZhbGxpbmcgYmFjayB0byBmdW5jdGlvbmluZyAoeWV0ICIKLQkJICAgICJpbnZhbGlkIC0tIFdXUE4pIGRlZmF1bHRzLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNjQsCisJCSAgICAiSW5jb25pc2lzdGVudCBOVlJBTSAiCisJCSAgICAiZGV0ZWN0ZWQ6IGNoZWNrc3VtPTB4JXggaWQ9JWMgdmVyc2lvbj0weCV4LlxuIiwKKwkJICAgIGNoa3N1bSwgbnYtPmlkWzBdLCBudi0+bnZyYW1fdmVyc2lvbik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNjUsCisJCSAgICAiRmFsbGluZyBiYWNrIHRvICIKKwkJICAgICJmdW5jdGlvbmluZyAoeWV0IGludmFsaWQgLS0gV1dQTikgZGVmYXVsdHMuXG4iKTsKIAogCQkvKgogCQkgKiBTZXQgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBjb250cm9sIGJsb2NrLgpAQCAtMjM4Miw4ICsyMzc1LDEzIEBACiAJLyoKIAkgKiBTZXQgaG9zdCBhZGFwdGVyIHBhcmFtZXRlcnMuCiAJICovCisKKwkvKgorCSAqIEJJVF83IGluIHRoZSBob3N0LXBhcmFtZXRlcnMgc2VjdGlvbiBhbGxvd3MgZm9yIG1vZGlmaWNhdGlvbiB0bworCSAqIGludGVybmFsIGRyaXZlciBsb2dnaW5nLgorCSAqLwogCWlmIChudi0+aG9zdF9wWzBdICYgQklUXzcpCi0JCXFsMnhleHRlbmRlZF9lcnJvcl9sb2dnaW5nID0gMTsKKwkJcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgPSAweDdmZmZmZmZmOwogCWhhLT5mbGFncy5kaXNhYmxlX3Jpc2NfY29kZV9sb2FkID0gKChudi0+aG9zdF9wWzBdICYgQklUXzQpID8gMSA6IDApOwogCS8qIEFsd2F5cyBsb2FkIFJJU0MgY29kZSBvbiBub24gSVNQMlsxMl0wMCBjaGlwcy4gKi8KIAlpZiAoIUlTX1FMQTIxMDAoaGEpICYmICFJU19RTEEyMjAwKGhhKSkKQEAgLTI0ODgsMTAgKzI0ODYsNyBAQAogCQlpZiAoaGEtPnppb19tb2RlICE9IFFMQV9aSU9fRElTQUJMRUQpIHsKIAkJCWhhLT56aW9fbW9kZSA9IFFMQV9aSU9fTU9ERV82OwogCi0JCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFpJTyBtb2RlICVkIGVuYWJsZWQ7IHRpbWVyICIKLQkJCSAgICAiZGVsYXkgKCVkIHVzKS5cbiIsIHZoYS0+aG9zdF9ubywgaGEtPnppb19tb2RlLAotCQkJICAgIGhhLT56aW9fdGltZXIgKiAxMDApKTsKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwNjgsCiAJCQkgICAgIlpJTyBtb2RlICVkIGVuYWJsZWQ7IHRpbWVyIGRlbGF5ICglZCB1cykuXG4iLAogCQkJICAgIGhhLT56aW9fbW9kZSwgaGEtPnppb190aW1lciAqIDEwMCk7CiAKQEAgLTI1MDIsOCArMjQ5Nyw4IEBACiAJfQogCiAJaWYgKHJ2YWwpIHsKLQkJREVCVUcyXzMocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgInNjc2koJWxkKTogTlZSQU0gY29uZmlndXJhdGlvbiBmYWlsZWQhXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA2OSwKKwkJICAgICJOVlJBTSBjb25maWd1cmF0aW9uIGZhaWxlZC5cbiIpOwogCX0KIAlyZXR1cm4gKHJ2YWwpOwogfQpAQCAtMjU3NCwxNSArMjU2OSwxNSBAQAogCWlmICh0ZXN0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCQlydmFsID0gcWxhMngwMF9jb25maWd1cmVfaGJhKHZoYSk7CiAJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogVW5hYmxlIHRvIGNvbmZpZ3VyZSBIQkEuXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAxMywKKwkJCSAgICAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBIQkEuXG4iKTsKIAkJCXJldHVybiAocnZhbCk7CiAJCX0KIAl9CiAKIAlzYXZlX2ZsYWdzID0gZmxhZ3MgPSB2aGEtPmRwY19mbGFnczsKLQlERUJVRyhwcmludGsoInNjc2koJWxkKTogQ29uZmlndXJlIGxvb3AgLS0gZHBjIGZsYWdzID0weCVseFxuIiwKLQkgICAgdmhhLT5ob3N0X25vLCBmbGFncykpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMTQsCisJICAgICJDb25maWd1cmUgbG9vcCAtLSBkcGMgZmxhZ3MgPSAweCVseC5cbiIsIGZsYWdzKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBib3RoIGFuIFJTQ04gYW5kIFBPUlQgVVBEQVRFIHBlbmRpbmcgdGhlbiBoYW5kbGUgdGhlbQpAQCAtMjYxOSwxNSArMjYxNCwyMSBAQAogCX0KIAogCWlmICh0ZXN0X2JpdChMT0NBTF9MT09QX1VQREFURSwgJmZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSB7CisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDE1LAorCQkJICAgICJMb29wIHJlc3luYyBuZWVkZWQsIGZhaWxpbmcuXG4iKTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQl9CiAJCWVsc2UKIAkJCXJ2YWwgPSBxbGEyeDAwX2NvbmZpZ3VyZV9sb2NhbF9sb29wKHZoYSk7CiAJfQogCiAJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MgJiYgdGVzdF9iaXQoUlNDTl9VUERBVEUsICZmbGFncykpIHsKLQkJaWYgKExPT1BfVFJBTlNJVElPTih2aGEpKQorCQlpZiAoTE9PUF9UUkFOU0lUSU9OKHZoYSkpIHsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMWUsCisJCQkgICAgIk5lZWRzIFJTQ04gdXBkYXRlIGFuZCBsb29wIHRyYW5zaXRpb24uXG4iKTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCQl9CiAJCWVsc2UKIAkJCXJ2YWwgPSBxbGEyeDAwX2NvbmZpZ3VyZV9mYWJyaWModmhhKTsKIAl9CkBAIC0yNjM4LDE2ICsyNjM5LDE3IEBACiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfSBlbHNlIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9SRUFEWSk7Ci0KLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBMT09QIFJFQURZXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNjksCisJCQkgICAgIkxPT1AgUkVBRFkuXG4iKTsKIAkJfQogCX0KIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogKioqIEZBSUxFRCAqKipcbiIsCi0JCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNmEsCisJCSAgICAiJXMgKioqIEZBSUxFRCAqKiouXG4iLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKLQkJREVCVUczKHByaW50aygiJXM6IGV4aXRpbmcgbm9ybWFsbHlcbiIsIF9fZnVuY19fKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNmIsCisJCSAgICAiJXM6IGV4aXRpbmcgbm9ybWFsbHkuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJLyogUmVzdG9yZSBzdGF0ZSBpZiBhIHJlc3luYyBldmVudCBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZyAqLwpAQCAtMjY5NSw4ICsyNjk3LDEwIEBACiAJbmV3X2ZjcG9ydCA9IE5VTEw7CiAJZW50cmllcyA9IE1BWF9GSUJSRV9ERVZJQ0VTOwogCi0JREVCVUczKHByaW50aygic2NzaSglbGQpOiBHZXR0aW5nIEZDQUwgcG9zaXRpb24gbWFwXG4iLCB2aGEtPmhvc3Rfbm8pKTsKLQlERUJVRzMocWxhMngwMF9nZXRfZmNhbF9wb3NpdGlvbl9tYXAodmhhLCBOVUxMKSk7CisJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAxNiwKKwkgICAgIkdldHRpbmcgRkNBTCBwb3NpdGlvbiBtYXAuXG4iKTsKKwlpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgJiBxbF9kYmdfZGlzYykKKwkJcWxhMngwMF9nZXRfZmNhbF9wb3NpdGlvbl9tYXAodmhhLCBOVUxMKTsKIAogCS8qIEdldCBsaXN0IG9mIGxvZ2dlZCBpbiBkZXZpY2VzLiAqLwogCW1lbXNldChoYS0+Z2lkX2xpc3QsIDAsIEdJRF9MSVNUX1NJWkUpOwpAQCAtMjcwNSwxNCArMjcwOSwxNyBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQogCQlnb3RvIGNsZWFudXBfYWxsb2NhdGlvbjsKIAotCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogRW50cmllcyBpbiBJRCBsaXN0ICglZClcbiIsCi0JICAgIHZoYS0+aG9zdF9ubywgZW50cmllcykpOwotCURFQlVHMyhxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopaGEtPmdpZF9saXN0LAotCSAgICBlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBnaWRfbGlzdF9pbmZvKSkpOworCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMTcsCisJICAgICJFbnRyaWVzIGluIElEIGxpc3QgKCVkKS5cbiIsIGVudHJpZXMpOworCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19kaXNjICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDIwNzUsCisJICAgICh1aW50OF90ICopaGEtPmdpZF9saXN0LAorCSAgICBlbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBnaWRfbGlzdF9pbmZvKSk7CiAKIAkvKiBBbGxvY2F0ZSB0ZW1wb3JhcnkgZmNwb3J0IGZvciBhbnkgbmV3IGZjcG9ydHMgZGlzY292ZXJlZC4gKi8KIAluZXdfZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKIAlpZiAobmV3X2ZjcG9ydCA9PSBOVUxMKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDIwMTgsCisJCSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBmY3BvcnQuXG4iKTsKIAkJcnZhbCA9IFFMQV9NRU1PUllfQUxMT0NfRkFJTEVEOwogCQlnb3RvIGNsZWFudXBfYWxsb2NhdGlvbjsKIAl9CkBAIC0yNzI2LDkgKzI3MzMsOSBAQAogCQkgICAgZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX0JST0FEQ0FTVCAmJgogCQkgICAgKGZjcG9ydC0+ZmxhZ3MgJiBGQ0ZfRkFCUklDX0RFVklDRSkgPT0gMCkgewogCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogTWFya2luZyBwb3J0IGxvc3QsICIKLQkJCSAgICAibG9vcF9pZD0weCUwNHhcbiIsCi0JCQkgICAgdmhhLT5ob3N0X25vLCBmY3BvcnQtPmxvb3BfaWQpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMTksCisJCQkgICAgIk1hcmtpbmcgcG9ydCBsb3N0IGxvb3BfaWQ9MHglMDR4LlxuIiwKKwkJCSAgICBmY3BvcnQtPmxvb3BfaWQpOwogCiAJCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfREVWSUNFX0xPU1QpOwogCQl9CkBAIC0yNzY5LDEyICsyNzc2LDEyIEBACiAJCW5ld19mY3BvcnQtPnZwX2lkeCA9IHZoYS0+dnBfaWR4OwogCQlydmFsMiA9IHFsYTJ4MDBfZ2V0X3BvcnRfZGF0YWJhc2UodmhhLCBuZXdfZmNwb3J0LCAwKTsKIAkJaWYgKHJ2YWwyICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEZhaWxlZCB0byByZXRyaWV2ZSBmY3BvcnQgIgotCQkJICAgICJpbmZvcm1hdGlvbiAtLSBnZXRfcG9ydF9kYXRhYmFzZT0leCwgIgotCQkJICAgICJsb29wX2lkPTB4JTA0eFxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwyLCBuZXdfZmNwb3J0LT5sb29wX2lkKSk7Ci0JCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFNjaGVkdWxpbmcgcmVzeW5jLi4uXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAxYSwKKwkJCSAgICAiRmFpbGVkIHRvIHJldHJpZXZlIGZjcG9ydCBpbmZvcm1hdGlvbiAiCisJCQkgICAgIi0tIGdldF9wb3J0X2RhdGFiYXNlPSV4LCBsb29wX2lkPTB4JTA0eC5cbiIsCisJCQkgICAgcnZhbDIsIG5ld19mY3BvcnQtPmxvb3BfaWQpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAxYiwKKwkJCSAgICAiU2NoZWR1bGluZyByZXN5bmMuXG4iKTsKIAkJCXNldF9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI4MTAsNiArMjgxNyw4IEBACiAJCQlmY3BvcnQgPSBuZXdfZmNwb3J0OwogCQkJbmV3X2ZjcG9ydCA9IHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHZoYSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAobmV3X2ZjcG9ydCA9PSBOVUxMKSB7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MjAxYywKKwkJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZjcG9ydC5cbiIpOwogCQkJCXJ2YWwgPSBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAkJCQlnb3RvIGNsZWFudXBfYWxsb2NhdGlvbjsKIAkJCX0KQEAgLTI4MjgsOCArMjgzNyw4IEBACiAJa2ZyZWUobmV3X2ZjcG9ydCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IENvbmZpZ3VyZSBsb2NhbCBsb29wIGVycm9yIGV4aXQ6ICIKLQkJICAgICJydmFsPSV4XG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAxZCwKKwkJICAgICJDb25maWd1cmUgbG9jYWwgbG9vcCBlcnJvciBleGl0OiBydmFsPSV4LlxuIiwgcnZhbCk7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTI4NTgsMjcgKzI4NjcsMjcgQEAKIAlydmFsID0gcWxhMngwMF9zZXRfaWRtYV9zcGVlZCh2aGEsIGZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5mcF9zcGVlZCwKIAkgICAgbWIpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogVW5hYmxlIHRvIGFkanVzdCBpSURNQSAiCi0JCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggLS0gJTA0eCAleCAlMDR4ICUwNHguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBmY3BvcnQtPnBvcnRfbmFtZVswXSwgZmNwb3J0LT5wb3J0X25hbWVbMV0sCisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMDQsCisJCSAgICAiVW5hYmxlIHRvIGFkanVzdCBpSURNQSAiCisJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggLS0gJTA0eCAleCAlMDR4ICIKKwkJICAgICIlMDR4LlxuIiwgZmNwb3J0LT5wb3J0X25hbWVbMF0sIGZjcG9ydC0+cG9ydF9uYW1lWzFdLAogCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbMl0sIGZjcG9ydC0+cG9ydF9uYW1lWzNdLAogCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbNF0sIGZjcG9ydC0+cG9ydF9uYW1lWzVdLAogCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbNl0sIGZjcG9ydC0+cG9ydF9uYW1lWzddLCBydmFsLAotCQkgICAgZmNwb3J0LT5mcF9zcGVlZCwgbWJbMF0sIG1iWzFdKSk7CisJCSAgICBmY3BvcnQtPmZwX3NwZWVkLCBtYlswXSwgbWJbMV0pOwogCX0gZWxzZSB7CiAJCWxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkc1tMU19VTktOT1dOXTsKIAkJaWYgKGZjcG9ydC0+ZnBfc3BlZWQgPCA1KQogCQkJbGlua19zcGVlZCA9IGxpbmtfc3BlZWRzW2ZjcG9ydC0+ZnBfc3BlZWRdOwogCQllbHNlIGlmIChmY3BvcnQtPmZwX3NwZWVkID09IDB4MTMpCiAJCQlsaW5rX3NwZWVkID0gbGlua19zcGVlZHNbNV07Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiaUlETUEgYWRqdXN0ZWQgdG8gJXMgR0IvcyBvbiAiCi0JCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnguXG4iLAotCQkgICAgbGlua19zcGVlZCwgZmNwb3J0LT5wb3J0X25hbWVbMF0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVsxXSwgZmNwb3J0LT5wb3J0X25hbWVbMl0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVszXSwgZmNwb3J0LT5wb3J0X25hbWVbNF0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs1XSwgZmNwb3J0LT5wb3J0X25hbWVbNl0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs3XSkpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDA1LAorCQkgICAgImlJRE1BIGFkanVzdGVkIHRvICVzIEdCL3MgIgorCQkgICAgIm9uICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4LlxuIiwgbGlua19zcGVlZCwKKwkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzBdLCBmY3BvcnQtPnBvcnRfbmFtZVsxXSwKKwkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzJdLCBmY3BvcnQtPnBvcnRfbmFtZVszXSwKKwkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzRdLCBmY3BvcnQtPnBvcnRfbmFtZVs1XSwKKwkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzZdLCBmY3BvcnQtPnBvcnRfbmFtZVs3XSk7CiAJfQogfQogCkBAIC0yODg3LDcgKzI4OTYsNiBAQAogewogCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBycG9ydF9pZHM7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcWxhMngwMF9ycG9ydF9kZWwoZmNwb3J0KTsKQEAgLTI4OTksOCArMjkwNyw4IEBACiAJcnBvcnRfaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwogCWZjcG9ydC0+cnBvcnQgPSBycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZCh2aGEtPmhvc3QsIDAsICZycG9ydF9pZHMpOwogCWlmICghcnBvcnQpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBmYyByZW1vdGUgcG9ydCFcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgyMDA2LAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBmYyByZW1vdGUgcG9ydC5cbiIpOwogCQlyZXR1cm47CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKQEAgLTI5NzUsOCArMjk4Myw4IEBACiAJCWxvb3BfaWQgPSBTTlNfRkxfUE9SVDsKIAlydmFsID0gcWxhMngwMF9nZXRfcG9ydF9uYW1lKHZoYSwgbG9vcF9pZCwgdmhhLT5mYWJyaWNfbm9kZV9uYW1lLCAxKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IE1CQ19HRVRfUE9SVF9OQU1FIEZhaWxlZCwgTm8gRkwgIgotCQkgICAgIlBvcnRcbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDFmLAorCQkgICAgIk1CWF9HRVRfUE9SVF9OQU1FIGZhaWxlZCwgTm8gRkwgUG9ydC5cbiIpOwogCiAJCXZoYS0+ZGV2aWNlX2ZsYWdzICY9IH5TV0lUQ0hfRk9VTkQ7CiAJCXJldHVybiAoUUxBX1NVQ0NFU1MpOwpAQCAtMzAwMywzMiArMzAxMSwzMiBAQAogCQloYS0+aXNwX29wcy0+ZmFicmljX2xvZ2luKHZoYSwgbG9vcF9pZCwgMHhmZiwgMHhmZiwKIAkJICAgIDB4ZmMsIG1iLCBCSVRfMSB8IEJJVF8wKTsKIAkJaWYgKG1iWzBdICE9IE1CU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJGYWlsZWQgU05TIGxvZ2luOiBsb29wX2lkPSV4IG1iWzBdPSV4IG1iWzFdPSV4ICIKLQkJCSAgICAibWJbMl09JXggbWJbNl09JXggbWJbN109JXhcbiIsIGxvb3BfaWQsCi0JCQkgICAgbWJbMF0sIG1iWzFdLCBtYlsyXSwgbWJbNl0sIG1iWzddKSk7CisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDQyLAorCQkJICAgICJGYWlsZWQgU05TIGxvZ2luOiBsb29wX2lkPSV4IG1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4ICIKKwkJCSAgICAibWJbNl09JXggbWJbN109JXguXG4iLCBsb29wX2lkLCBtYlswXSwgbWJbMV0sCisJCQkgICAgbWJbMl0sIG1iWzZdLCBtYls3XSk7CiAJCQlyZXR1cm4gKFFMQV9TVUNDRVNTKTsKIAkJfQogCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVHSVNURVJfRkM0X05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCQkJaWYgKHFsYTJ4MDBfcmZ0X2lkKHZoYSkpIHsKIAkJCQkvKiBFTVBUWSAqLwotCQkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUmVnaXN0ZXIgRkMtNCAiCi0JCQkJICAgICJUWVBFIGZhaWxlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNDUsCisJCQkJICAgICJSZWdpc3RlciBGQy00IFRZUEUgZmFpbGVkLlxuIik7CiAJCQl9CiAJCQlpZiAocWxhMngwMF9yZmZfaWQodmhhKSkgewogCQkJCS8qIEVNUFRZICovCi0JCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBSZWdpc3RlciBGQy00ICIKLQkJCQkgICAgIkZlYXR1cmVzIGZhaWxlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNDksCisJCQkJICAgICJSZWdpc3RlciBGQy00IEZlYXR1cmVzIGZhaWxlZC5cbiIpOwogCQkJfQogCQkJaWYgKHFsYTJ4MDBfcm5uX2lkKHZoYSkpIHsKIAkJCQkvKiBFTVBUWSAqLwotCQkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogUmVnaXN0ZXIgTm9kZSBOYW1lICIKLQkJCQkgICAgImZhaWxlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNGYsCisJCQkJICAgICJSZWdpc3RlciBOb2RlIE5hbWUgZmFpbGVkLlxuIik7CiAJCQl9IGVsc2UgaWYgKHFsYTJ4MDBfcnNubl9ubih2aGEpKSB7CiAJCQkJLyogRU1QVFkgKi8KLQkJCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFJlZ2lzdGVyIFN5bWJvbGljICIKLQkJCQkgICAgIk5vZGUgTmFtZSBmYWlsZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDUzLAorCQkJCSAgICAiUmVnaXN0ZXIgU3ltb2JpbGljIE5vZGUgTmFtZSBmYWlsZWQuXG4iKTsKIAkJCX0KIAkJfQogCkBAIC0zMTMyLDggKzMxNDAsOCBAQAogCX0KIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQ29uZmlndXJlIGZhYnJpYyBlcnJvciBleGl0OiAiCi0JCSAgICAicnZhbD0lZFxuIiwgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNjgsCisJCSAgICAiQ29uZmlndXJlIGZhYnJpYyBlcnJvciBleGl0IHJ2YWw9JWQuXG4iLCBydmFsKTsKIAl9CiAKIAlyZXR1cm4gKHJ2YWwpOwpAQCAtMzE3NSw4ICszMTgzLDggQEAKIAlzd2wgPSBrY2FsbG9jKE1BWF9GSUJSRV9ERVZJQ0VTLCBzaXplb2Yoc3dfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzd2wpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogR0lEX1BUIGFsbG9jYXRpb25zIGZhaWxlZCwgZmFsbGJhY2sgIgotCQkgICAgIm9uIEdBX05YVFxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNTQsCisJCSAgICAiR0lEX1BUIGFsbG9jYXRpb25zIGZhaWxlZCwgZmFsbGJhY2sgb24gR0FfTlhULlxuIik7CiAJfSBlbHNlIHsKIAkJaWYgKHFsYTJ4MDBfZ2lkX3B0KHZoYSwgc3dsKSAhPSBRTEFfU1VDQ0VTUykgewogCQkJa2ZyZWUoc3dsKTsKQEAgLTMyMDEsNiArMzIwOSw4IEBACiAJLyogQWxsb2NhdGUgdGVtcG9yYXJ5IGZjcG9ydCBmb3IgYW55IG5ldyBmY3BvcnRzIGRpc2NvdmVyZWQuICovCiAJbmV3X2ZjcG9ydCA9IHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHZoYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5ld19mY3BvcnQgPT0gTlVMTCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgyMDVlLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZjcG9ydC5cbiIpOwogCQlrZnJlZShzd2wpOwogCQlyZXR1cm4gKFFMQV9NRU1PUllfQUxMT0NfRkFJTEVEKTsKIAl9CkBAIC0zMjQ3LDkgKzMyNTcsOSBAQAogCQkJLyogU2VuZCBHQV9OWFQgdG8gdGhlIHN3aXRjaCAqLwogCQkJcnZhbCA9IHFsYTJ4MDBfZ2Ffbnh0KHZoYSwgbmV3X2ZjcG9ydCk7CiAJCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkgICAgIlNOUyBzY2FuIGZhaWxlZCAtLSBhc3N1bWluZyB6ZXJvLWVudHJ5ICIKLQkJCQkgICAgInJlc3VsdC4uLlxuIik7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MjA2NCwKKwkJCQkgICAgIlNOUyBzY2FuIGZhaWxlZCAtLSBhc3N1bWluZyAiCisJCQkJICAgICJ6ZXJvLWVudHJ5IHJlc3VsdC5cbiIpOwogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmY3BvcnQsIGZjcHRlbXAsCiAJCQkJICAgIG5ld19mY3BvcnRzLCBsaXN0KSB7CiAJCQkJCWxpc3RfZGVsKCZmY3BvcnQtPmxpc3QpOwpAQCAtMzI2NSw5ICszMjc1LDExIEBACiAJCQl3cmFwLmIyNCA9IG5ld19mY3BvcnQtPmRfaWQuYjI0OwogCQkJZmlyc3RfZGV2ID0gMDsKIAkJfSBlbHNlIGlmIChuZXdfZmNwb3J0LT5kX2lkLmIyNCA9PSB3cmFwLmIyNCkgewotCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBkZXZpY2Ugd3JhcCAoJTAyeCUwMnglMDJ4KVxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIG5ld19mY3BvcnQtPmRfaWQuYi5kb21haW4sCi0JCQkgICAgbmV3X2ZjcG9ydC0+ZF9pZC5iLmFyZWEsIG5ld19mY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA2NSwKKwkJCSAgICAiRGV2aWNlIHdyYXAgKCUwMnglMDJ4JTAyeCkuXG4iLAorCQkJICAgIG5ld19mY3BvcnQtPmRfaWQuYi5kb21haW4sCisJCQkgICAgbmV3X2ZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCQkgICAgbmV3X2ZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTMzNzIsNiArMzM4NCw4IEBACiAJCW54dF9kX2lkLmIyNCA9IG5ld19mY3BvcnQtPmRfaWQuYjI0OwogCQluZXdfZmNwb3J0ID0gcWxhMngwMF9hbGxvY19mY3BvcnQodmhhLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG5ld19mY3BvcnQgPT0gTlVMTCkgeworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MjA2NiwKKwkJCSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciBmY3BvcnQuXG4iKTsKIAkJCWtmcmVlKHN3bCk7CiAJCQlyZXR1cm4gKFFMQV9NRU1PUllfQUxMT0NfRkFJTEVEKTsKIAkJfQpAQCAtMzUwMSwxMCArMzUxNSwxMCBAQAogCQlkX2lkLmIuYXJlYSA9IE1TQihMU1cocnNjbl9lbnRyeSkpOwogCQlkX2lkLmIuYWxfcGEgPSBMU0IoTFNXKHJzY25fZW50cnkpKTsKIAotCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogUlNDTiBxdWV1ZSBlbnRyeVslZF0gPSAiCi0JCSAgICAiWyUwMngvJTAyeCUwMnglMDJ4XS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHZoYS0+cnNjbl9vdXRfcHRyLCBmb3JtYXQsIGRfaWQuYi5kb21haW4sCi0JCSAgICBkX2lkLmIuYXJlYSwgZF9pZC5iLmFsX3BhKSk7CisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMjAsCisJCSAgICAiUlNDTiBxdWV1ZSBlbnRyeVslZF0gPSBbJTAyeC8lMDJ4JTAyeCUwMnhdLlxuIiwKKwkJICAgIHZoYS0+cnNjbl9vdXRfcHRyLCBmb3JtYXQsIGRfaWQuYi5kb21haW4sIGRfaWQuYi5hcmVhLAorCQkgICAgZF9pZC5iLmFsX3BhKTsKIAogCQl2aGEtPnJzY25fb3V0X3B0cisrOwogCQlpZiAodmhhLT5yc2NuX291dF9wdHIgPT0gTUFYX1JTQ05fQ09VTlQpCkBAIC0zNTIwLDE3ICszNTM0LDE3IEBACiAJCQlpZiAocnNjbl9lbnRyeSAhPSB2aGEtPnJzY25fcXVldWVbcnNjbl9vdXRfaXRlcl0pCiAJCQkJYnJlYWs7CiAKLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBTa2lwcGluZyBkdXBsaWNhdGUgUlNDTiBxdWV1ZSAiCi0JCQkgICAgImVudHJ5IGZvdW5kIGF0IFslZF0uXG4iLCB2aGEtPmhvc3Rfbm8sCi0JCQkgICAgcnNjbl9vdXRfaXRlcikpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAyMSwKKwkJCSAgICAiU2tpcHBpbmcgZHVwbGljYXRlIFJTQ04gcXVldWUgZW50cnkgZm91bmQgYXQgIgorCQkJICAgICJbJWRdLlxuIiwgcnNjbl9vdXRfaXRlcik7CiAKIAkJCXZoYS0+cnNjbl9vdXRfcHRyID0gcnNjbl9vdXRfaXRlcjsKIAkJfQogCiAJCS8qIFF1ZXVlIG92ZXJmbG93LCBzZXQgc3dpdGNoIGRlZmF1bHQgY2FzZS4gKi8KIAkJaWYgKHZoYS0+ZmxhZ3MucnNjbl9xdWV1ZV9vdmVyZmxvdykgewotCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IGRldmljZV9yZXN5bmM6IHJzY24gIgotCQkJICAgICJvdmVyZmxvdy5cbiIsIHZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAyMiwKKwkJCSAgICAiZGV2aWNlX3Jlc3luYzogcnNjbiBvdmVyZmxvdy5cbiIpOwogCiAJCQlmb3JtYXQgPSAzOwogCQkJdmhhLT5mbGFncy5yc2NuX3F1ZXVlX292ZXJmbG93ID0gMDsKQEAgLTM2NTksMTAgKzM2NzMsMTEgQEAKIAl0bXBfbG9vcGlkID0gMDsKIAogCWZvciAoOzspIHsKLQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IFRyeWluZyBGYWJyaWMgTG9naW4gdy9sb29wIGlkIDB4JTA0eCAiCi0gCQkgICAgImZvciBwb3J0ICUwMnglMDJ4JTAyeC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIGZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAotCQkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAwMCwKKwkJICAgICJUcnlpbmcgRmFicmljIExvZ2luIHcvbG9vcCBpZCAweCUwNHggZm9yIHBvcnQgIgorCQkgICAgIiUwMnglMDJ4JTAyeC5cbiIsCisJCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAogCQkvKiBMb2dpbiBmY3BvcnQgb24gc3dpdGNoLiAqLwogCQloYS0+aXNwX29wcy0+ZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LT5sb29wX2lkLApAQCAtMzY4MCwxMCArMzY5NSwxMSBAQAogCQkJdG1wX2xvb3BpZCA9IGZjcG9ydC0+bG9vcF9pZDsKIAkJCWZjcG9ydC0+bG9vcF9pZCA9IG1iWzFdOwogCi0JCQlERUJVRyhwcmludGsoIkZhYnJpYyBMb2dpbjogcG9ydCBpbiB1c2UgLSBuZXh0ICIKLSAJCQkgICAgImxvb3AgaWQ9MHglMDR4LCBwb3J0IElkPSUwMnglMDJ4JTAyeC5cbiIsCisJCQlxbF9kYmcocWxfZGJnX2Rpc2MsIHZoYSwgMHgyMDAxLAorCQkJICAgICJGYWJyaWMgTG9naW46IHBvcnQgaW4gdXNlIC0gbmV4dCBsb29wICIKKwkJCSAgICAiaWQ9MHglMDR4LCBwb3J0IGlkPSAlMDJ4JTAyeCUwMnguXG4iLAogCQkJICAgIGZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAotCQkJICAgIGZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJCQkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCiAJCX0gZWxzZSBpZiAobWJbMF0gPT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKIAkJCS8qCkBAIC0zNzQ0LDExICszNzYwLDExIEBACiAJCQkvKgogCQkJICogdW5yZWNvdmVyYWJsZSAvIG5vdCBoYW5kbGVkIGVycm9yCiAJCQkgKi8KLQkJCURFQlVHMihwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBwb3J0X2lkPSUwMnglMDJ4JTAyeCAiCi0gCQkJICAgICJsb29wX2lkPSV4IGppZmZpZXM9JWx4LlxuIiwKLQkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBtYlswXSwKLQkJCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIGZjcG9ydC0+bG9vcF9pZCwgamlmZmllcykpOworCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAwMiwKKwkJCSAgICAiRmFpbGVkPSV4IHBvcnRfaWQ9JTAyeCUwMnglMDJ4IGxvb3BfaWQ9JXggIgorCQkJICAgICJqaWZmaWVzPSVseC5cbiIsIG1iWzBdLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCisJCQkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEsCisJCQkgICAgZmNwb3J0LT5sb29wX2lkLCBqaWZmaWVzKTsKIAogCQkJKm5leHRfbG9vcGlkID0gZmNwb3J0LT5sb29wX2lkOwogCQkJaGEtPmlzcF9vcHMtPmZhYnJpY19sb2dvdXQodmhhLCBmY3BvcnQtPmxvb3BfaWQsCkBAIC0zODIyLDE1ICszODM4LDEyIEBACiAJCXJlcSA9IHZoYS0+cmVxOwogCXJzcCA9IHJlcS0+cnNwOwogCi0JYXRvbWljX3NldCgmdmhhLT5sb29wX3N0YXRlLCBMT09QX1VQREFURSk7CiAJY2xlYXJfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAlpZiAodmhhLT5mbGFncy5vbmxpbmUpIHsKIAkJaWYgKCEocnZhbCA9IHFsYTJ4MDBfZndfcmVhZHkodmhhKSkpIHsKIAkJCS8qIFdhaXQgYXQgbW9zdCBNQVhfVEFSR0VUIFJTQ05zIGZvciBhIHN0YWJsZSBsaW5rLiAqLwogCQkJd2FpdF90aW1lID0gMjU2OwogCQkJZG8gewotCQkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9VUERBVEUpOwotCiAJCQkJLyogSXNzdWUgYSBtYXJrZXIgYWZ0ZXIgRlcgYmVjb21lcyByZWFkeS4gKi8KIAkJCQlxbGEyeDAwX21hcmtlcih2aGEsIHJlcSwgcnNwLCAwLCAwLAogCQkJCQlNS19TWU5DX0FMTCk7CkBAIC0zODUyLDcgKzM4NjUsOCBAQAogCQlyZXR1cm4gKFFMQV9GVU5DVElPTl9GQUlMRUQpOwogCiAJaWYgKHJ2YWwpCi0JCURFQlVHMl8zKHByaW50aygiJXMoKTogKioqKiBGQUlMRUQgKioqKlxuIiwgX19mdW5jX18pKTsKKwkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjA2YywKKwkJICAgICIlcyAqKiogRkFJTEVEICoqKi5cbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAocnZhbCk7CiB9CkBAIC0zOTI5LDggKzM5NDMsOCBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2cDsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJQZXJmb3JtaW5nIElTUCBlcnJvciByZWNvdmVyeSAtIGhhPSAlcC5cbiIsIGhhKTsKKwlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMDIsCisJICAgICJQZXJmb3JtaW5nIElTUCBlcnJvciByZWNvdmVyeSAtIGhhPSVwLlxuIiwgaGEpOwogCiAJYXRvbWljX3NldCgmaGEtPmxvb3BfZG93bl90aW1lciwgTE9PUF9ET1dOX1RJTUUpOwogCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKQEAgLTM5NjQsOCArMzk3OCw4IEBACiAJY2xlYXJfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJaGEtPnFsYV9zdGF0cy50b3RhbF9pc3BfYWJvcnRzKys7CiAKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJQZXJmb3JtaW5nIElTUCBlcnJvciByZWNvdmVyeSAtIGhhPSAlcC5cbiIsIGhhKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGFmLAorCSAgICAiUGVyZm9ybWluZyBJU1AgZXJyb3IgcmVjb3ZlcnkgLSBoYT0lcC5cbiIsIGhhKTsKIAogCS8qIEZvciBJU1A4MlhYLCByZXNldF9jaGlwIGlzIGp1c3QgZGlzYWJsaW5nIGludGVycnVwdHMuCiAJICogRHJpdmVyIHdhaXRzIGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgY29tbWFuZHMuCkBAIC00MDE2LDYgKzQwMzAsOCBAQAogCQkvKiBNYWtlIHN1cmUgZm9yIElTUCA4MlhYIElPIERNQSBpcyBjb21wbGV0ZSAqLwogCQlpZiAoSVNfUUxBODJYWChoYSkpIHsKIAkJCXFsYTgyeHhfY2hpcF9yZXNldF9jbGVhbnVwKHZoYSk7CisJCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGI0LAorCQkJICAgICJEb25lIGNoaXAgcmVzZXQgY2xlYW51cC5cbiIpOwogCiAJCQkvKiBEb25lIHdhaXRpbmcgZm9yIHBlbmRpbmcgY29tbWFuZHMuCiAJCQkgKiBSZXNldCB0aGUgb25saW5lIGZsYWcuCkBAIC00MDk3LDcgKzQxMTMsNyBAQAogCQkJCSAgICBoYS0+ZmNlX2RtYSwgaGEtPmZjZV9idWZzLCBoYS0+ZmNlX21iLAogCQkJCSAgICAmaGEtPmZjZV9idWZzKTsKIAkJCQlpZiAocnZhbCkgewotCQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMzMsCiAJCQkJCSAgICAiVW5hYmxlIHRvIHJlaW5pdGlhbGl6ZSBGQ0UgIgogCQkJCQkgICAgIiglZCkuXG4iLCBydmFsKTsKIAkJCQkJaGEtPmZsYWdzLmZjZV9lbmFibGVkID0gMDsKQEAgLTQxMDksNyArNDEyNSw3IEBACiAJCQkJcnZhbCA9IHFsYTJ4MDBfZW5hYmxlX2VmdF90cmFjZSh2aGEsCiAJCQkJICAgIGhhLT5lZnRfZG1hLCBFRlRfTlVNX0JVRkZFUlMpOwogCQkJCWlmIChydmFsKSB7Ci0JCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAzNCwKIAkJCQkJICAgICJVbmFibGUgdG8gcmVpbml0aWFsaXplIEVGVCAiCiAJCQkJCSAgICAiKCVkKS5cbiIsIHJ2YWwpOwogCQkJCX0KQEAgLTQxMTgsOSArNDEzNCw5IEBACiAJCQl2aGEtPmZsYWdzLm9ubGluZSA9IDE7CiAJCQlpZiAodGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAJCQkJaWYgKGhhLT5pc3BfYWJvcnRfY250ID09IDApIHsKLSAJCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkJICAgICJJU1AgZXJyb3IgcmVjb3ZlcnkgZmFpbGVkIC0gIgotCQkJCQkgICAgImJvYXJkIGRpc2FibGVkXG4iKTsKKwkJCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDgwMzUsCisJCQkJCSAgICAiSVNQIGVycm9yIHJlY292ZXIgZmFpbGVkIC0gIgorCQkJCQkgICAgImJvYXJkIGRpc2FibGVkLlxuIik7CiAJCQkJCS8qCiAJCQkJCSAqIFRoZSBuZXh0IGNhbGwgZGlzYWJsZXMgdGhlIGJvYXJkCiAJCQkJCSAqIGNvbXBsZXRlbHkuCkBAIC00MTMyLDE2ICs0MTQ4LDE2IEBACiAJCQkJCXN0YXR1cyA9IDA7CiAJCQkJfSBlbHNlIHsgLyogc2NoZWR1bGUgYW5vdGhlciBJU1AgYWJvcnQgKi8KIAkJCQkJaGEtPmlzcF9hYm9ydF9jbnQtLTsKLQkJCQkJREVCVUcocHJpbnRrKCJxbGElbGQ6IElTUCBhYm9ydCAtICIKLQkJCQkJICAgICJyZXRyeSByZW1haW5pbmcgJWRcbiIsCi0JCQkJCSAgICB2aGEtPmhvc3Rfbm8sIGhhLT5pc3BfYWJvcnRfY250KSk7CisJCQkJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDIwLAorCQkJCQkgICAgIklTUCBhYm9ydCAtIHJldHJ5IHJlbWFpbmluZyAlZC5cbiIsCisJCQkJCSAgICBoYS0+aXNwX2Fib3J0X2NudCk7CiAJCQkJCXN0YXR1cyA9IDE7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQloYS0+aXNwX2Fib3J0X2NudCA9IE1BWF9SRVRSSUVTX09GX0lTUF9BQk9SVDsKLQkJCQlERUJVRyhwcmludGsoInFsYTJ4MDAoJWxkKTogSVNQIGVycm9yIHJlY292ZXJ5ICIKLQkJCQkgICAgIi0gcmV0cnlpbmcgKCVkKSBtb3JlIHRpbWVzXG4iLAotCQkJCSAgICB2aGEtPmhvc3Rfbm8sIGhhLT5pc3BfYWJvcnRfY250KSk7CisJCQkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMjEsCisJCQkJICAgICJJU1AgZXJyb3IgcmVjb3ZlcnkgLSByZXRyeWluZyAoJWQpICIKKwkJCQkgICAgIm1vcmUgdGltZXMuXG4iLCBoYS0+aXNwX2Fib3J0X2NudCk7CiAJCQkJc2V0X2JpdChJU1BfQUJPUlRfUkVUUlksICZ2aGEtPmRwY19mbGFncyk7CiAJCQkJc3RhdHVzID0gMTsKIAkJCX0KQEAgLTQxNTAsOSArNDE2Niw3IEBACiAJfQogCiAJaWYgKCFzdGF0dXMpIHsKLQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTwotCQkJCSJxbGEyeDAwX2Fib3J0X2lzcCglbGQpOiBzdWNjZWVkZWQuXG4iLAotCQkJCXZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAyMiwgIiVzIHN1Y2NlZWRlZC5cbiIsIF9fZnVuY19fKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgewpAQCAtNDE2OSw4ICs0MTgzLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CiAKIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkicWxhMngwMF9hYm9ydF9pc3A6ICoqKiogRkFJTEVEICoqKipcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDIzLCAiJXMgKioqKiBGQUlMRUQgKioqKi5cbiIpOwogCX0KIAogCXJldHVybihzdGF0dXMpOwpAQCAtNDIxMSw4ICs0MjI0LDggQEAKIAogCQlzdGF0dXMgPSBxbGEyeDAwX2Z3X3JlYWR5KHZoYSk7CiAJCWlmICghc3RhdHVzKSB7Ci0JCQlERUJVRyhwcmludGsoIiVzKCk6IFN0YXJ0IGNvbmZpZ3VyZSBsb29wLCAiCi0JCQkgICAgInN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKSk7CisJCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAzMSwKKwkJCSAgICAiU3RhcnQgY29uZmlndXJlIGxvb3Agc3RhdHVzID0gJWQuXG4iLCBzdGF0dXMpOwogCiAJCQkvKiBJc3N1ZSBhIG1hcmtlciBhZnRlciBGVyBiZWNvbWVzIHJlYWR5LiAqLwogCQkJcWxhMngwMF9tYXJrZXIodmhhLCByZXEsIHJzcCwgMCwgMCwgTUtfU1lOQ19BTEwpOwpAQCAtNDIzNCw5ICs0MjQ3LDggQEAKIAkJaWYgKCh2aGEtPmRldmljZV9mbGFncyAmIERGTEdfTk9fQ0FCTEUpKQogCQkJc3RhdHVzID0gMDsKIAotCQlERUJVRyhwcmludGsoIiVzKCk6IENvbmZpZ3VyZSBsb29wIGRvbmUsIHN0YXR1cyA9IDB4JXhcbiIsCi0JCQkJX19mdW5jX18sCi0JCQkJc3RhdHVzKSk7CisJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDMyLAorCQkgICAgIkNvbmZpZ3VyZSBsb29wIGRvbmUsIHN0YXR1cyA9IDB4JXguXG4iLCBzdGF0dXMpOwogCX0KIAlyZXR1cm4gKHN0YXR1cyk7CiB9CkBAIC00MjU2LDEzICs0MjY4LDEzIEBACiAJCQlyc3AtPm9wdGlvbnMgJj0gfkJJVF8wOwogCQkJcmV0ID0gcWxhMjV4eF9pbml0X3JzcF9xdWUoYmFzZV92aGEsIHJzcCk7CiAJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKQotCQkJCURFQlVHMl8xNyhwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSIlcyBSc3AgcXVlOiVkIGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXywKLQkJCQkJCXJzcC0+aWQpKTsKKwkJCQlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwZmYsCisJCQkJICAgICIlcyBSc3AgcXVlOiAlZCBpbml0IGZhaWxlZC5cbiIsCisJCQkJICAgIF9fZnVuY19fLCByc3AtPmlkKTsKIAkJCWVsc2UKLQkJCQlERUJVRzJfMTcocHJpbnRrKEtFUk5fSU5GTwotCQkJCQkiJXMgUnNwIHF1ZTolZCBpbml0ZWRcbiIsIF9fZnVuY19fLAotCQkJCQkJcnNwLT5pZCkpOworCQkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDEwMCwKKwkJCQkgICAgIiVzIFJzcCBxdWU6ICVkIGluaXRlZC5cbiIsCisJCQkJICAgIF9fZnVuY19fLCByc3AtPmlkKTsKIAkJfQogCX0KIAlmb3IgKGkgPSAxOyBpIDwgaGEtPm1heF9yZXFfcXVldWVzOyBpKyspIHsKQEAgLTQyNzIsMTMgKzQyODQsMTMgQEAKIAkJCXJlcS0+b3B0aW9ucyAmPSB+QklUXzA7CiAJCQlyZXQgPSBxbGEyNXh4X2luaXRfcmVxX3F1ZShiYXNlX3ZoYSwgcmVxKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpCi0JCQkJREVCVUcyXzE3KHByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJIiVzIFJlcSBxdWU6JWQgaW5pdCBmYWlsZWRcbiIsIF9fZnVuY19fLAotCQkJCQkJcmVxLT5pZCkpOworCQkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDEwMSwKKwkJCQkgICAgIiVzIFJlcSBxdWU6ICVkIGluaXQgZmFpbGVkLlxuIiwKKwkJCQkgICAgX19mdW5jX18sIHJlcS0+aWQpOwogCQkJZWxzZQotCQkJCURFQlVHMl8xNyhwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSIlcyBSZXEgcXVlOiVkIGluaXRlZFxuIiwgX19mdW5jX18sCi0JCQkJCQlyZXEtPmlkKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19pbml0LCBiYXNlX3ZoYSwgMHgwMTAyLAorCQkJCSAgICAiJXMgUmVxIHF1ZTogJWQgaW5pdGVkLlxuIiwKKwkJCQkgICAgX19mdW5jX18sIHJlcS0+aWQpOwogCQl9CiAJfQogCXJldHVybiByZXQ7CkBAIC00Mzk3LDE5ICs0NDA5LDIyIEBACiAJZm9yIChjbnQgPSAwLCBjaGtzdW0gPSAwOyBjbnQgPCBoYS0+bnZyYW1fc2l6ZSA+PiAyOyBjbnQrKykKIAkJY2hrc3VtICs9IGxlMzJfdG9fY3B1KCpkcHRyKyspOwogCi0JREVCVUc1KHByaW50aygic2NzaSglbGQpOiBDb250ZW50cyBvZiBOVlJBTVxuIiwgdmhhLT5ob3N0X25vKSk7Ci0JREVCVUc1KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKiludiwgaGEtPm52cmFtX3NpemUpKTsKKwlxbF9kYmcocWxfZGJnX2luaXQgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MDA2YSwKKwkgICAgIkNvbnRlbnRzIG9mIE5WUkFNXG4iKTsKKwlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfaW5pdCArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgwMTBkLAorCSAgICAodWludDhfdCAqKW52LCBoYS0+bnZyYW1fc2l6ZSk7CiAKIAkvKiBCYWQgTlZSQU0gZGF0YSwgc2V0IGRlZmF1bHRzIHBhcmFtZXRlcnMuICovCiAJaWYgKGNoa3N1bSB8fCBudi0+aWRbMF0gIT0gJ0knIHx8IG52LT5pZFsxXSAhPSAnUycgfHwgbnYtPmlkWzJdICE9ICdQJwogCSAgICB8fCBudi0+aWRbM10gIT0gJyAnIHx8CiAJICAgIG52LT5udnJhbV92ZXJzaW9uIDwgX19jb25zdGFudF9jcHVfdG9fbGUxNihJQ0JfVkVSU0lPTikpIHsKIAkJLyogUmVzZXQgTlZSQU0gZGF0YS4gKi8KLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiSW5jb25zaXN0ZW50IE5WUkFNIGRldGVjdGVkOiAiCi0JCSAgICAiY2hlY2tzdW09MHgleCBpZD0lYyB2ZXJzaW9uPTB4JXguXG4iLCBjaGtzdW0sIG52LT5pZFswXSwKLQkJICAgIGxlMTZfdG9fY3B1KG52LT5udnJhbV92ZXJzaW9uKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIkZhbGxpbmcgYmFjayB0byBmdW5jdGlvbmluZyAoeWV0ICIKLQkJICAgICJpbnZhbGlkIC0tIFdXUE4pIGRlZmF1bHRzLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNmIsCisJCSAgICAiSW5jb25pc2lzdGVudCBOVlJBTSBkZXRlY3RlZDogY2hlY2tzdW09MHgleCBpZD0lYyAiCisJCSAgICAidmVyc2lvbj0weCV4LlxuIiwgY2hrc3VtLCBudi0+aWRbMF0sIG52LT5udnJhbV92ZXJzaW9uKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA2YywKKwkJICAgICJGYWxsaW5nIGJhY2sgdG8gZnVuY3Rpb25pbmcgKHlldCBpbnZhbGlkIC0tIFdXUE4pICIKKwkJICAgICJkZWZhdWx0cy5cbiIpOwogCiAJCS8qCiAJCSAqIFNldCBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGNvbnRyb2wgYmxvY2suCkBAIC00NTg3LDEwICs0NjAyLDcgQEAKIAlpZiAoaGEtPnppb19tb2RlICE9IFFMQV9aSU9fRElTQUJMRUQpIHsKIAkJaGEtPnppb19tb2RlID0gUUxBX1pJT19NT0RFXzY7CiAKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBaSU8gbW9kZSAlZCBlbmFibGVkOyB0aW1lciBkZWxheSAiCi0JCSAgICAiKCVkIHVzKS5cbiIsIHZoYS0+aG9zdF9ubywgaGEtPnppb19tb2RlLAotCQkgICAgaGEtPnppb190aW1lciAqIDEwMCkpOwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwNmYsCiAJCSAgICAiWklPIG1vZGUgJWQgZW5hYmxlZDsgdGltZXIgZGVsYXkgKCVkIHVzKS5cbiIsCiAJCSAgICBoYS0+emlvX21vZGUsIGhhLT56aW9fdGltZXIgKiAxMDApOwogCkBAIC00NjAxLDggKzQ2MTMsOCBAQAogCX0KIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMl8zKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZCk6IE5WUkFNIGNvbmZpZ3VyYXRpb24gZmFpbGVkIVxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNzAsCisJCSAgICAiTlZSQU0gY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKIAl9CiAJcmV0dXJuIChydmFsKTsKIH0KQEAgLTQ2MjAsOCArNDYzMiw4IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJGVzogTG9hZGluZyBmcm9tIGZsYXNoICgleCkuLi5cbiIsIGZhZGRyKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDhiLAorCSAgICAiTG9hZGluZyBmaXJtd2FyZSBmcm9tIGZsYXNoICgleCkuXG4iLCBmYWRkcik7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7CiAKQEAgLTQ2MzcsMTEgKzQ2NDksMTIgQEAKIAkgICAgZGNvZGVbMl0gPT0gMHhmZmZmZmZmZiAmJiBkY29kZVszXSA9PSAweGZmZmZmZmZmKSB8fAogCSAgICAoZGNvZGVbMF0gPT0gMCAmJiBkY29kZVsxXSA9PSAwICYmIGRjb2RlWzJdID09IDAgJiYKIAkJZGNvZGVbM10gPT0gMCkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZsYXNoIGZpcm13YXJlIGltYWdlIVxuIik7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJGaXJtd2FyZSBkYXRhOiAlMDh4ICUwOHggJTA4eCAlMDh4IVxuIiwgZGNvZGVbMF0sCi0JCSAgICBkY29kZVsxXSwgZGNvZGVbMl0sIGRjb2RlWzNdKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwOGMsCisJCSAgICAiVW5hYmxlIHRvIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIGZsYXNoIGZpcm13YXJlICIKKwkJICAgICJpbWFnZS5cbiIpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDA4ZCwKKwkJICAgICJGaXJtd2FyZSBkYXRhOiAlMDh4ICUwOHggJTA4eCAlMDh4LlxuIiwKKwkJICAgIGRjb2RlWzBdLCBkY29kZVsxXSwgZGNvZGVbMl0sIGRjb2RlWzNdKTsKIAogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9CkBAIC00NjYwLDkgKzQ2NzMsMTAgQEAKIAkJCWlmIChkbGVuID4gcmlzY19zaXplKQogCQkJCWRsZW4gPSByaXNjX3NpemU7CiAKLQkJCURFQlVHNyhwcmludGsoInNjc2koJWxkKTogTG9hZGluZyByaXNjIHNlZ21lbnRAIHJpc2MgIgotCQkJICAgICJhZGRyICV4LCBudW1iZXIgb2YgZHdvcmRzIDB4JXgsIG9mZnNldCAweCV4LlxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIHJpc2NfYWRkciwgZGxlbiwgZmFkZHIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwOGUsCisJCQkgICAgIkxvYWRpbmcgcmlzYyBzZWdtZW50QCByaXNjIGFkZHIgJXggIgorCQkJICAgICJudW1iZXIgb2YgZHdvcmRzIDB4JXggb2Zmc2V0IDB4JXguXG4iLAorCQkJICAgIHJpc2NfYWRkciwgZGxlbiwgZmFkZHIpOwogCiAJCQlxbGEyNHh4X3JlYWRfZmxhc2hfZGF0YSh2aGEsIGRjb2RlLCBmYWRkciwgZGxlbik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgZGxlbjsgaSsrKQpAQCAtNDY3MSwxMiArNDY4NSw5IEBACiAJCQlydmFsID0gcWxhMngwMF9sb2FkX3JhbSh2aGEsIHJlcS0+ZG1hLCByaXNjX2FkZHIsCiAJCQkgICAgZGxlbik7CiAJCQlpZiAocnZhbCkgewotCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOltFUlJPUl0gRmFpbGVkIHRvIGxvYWQgIgotCQkJCSAgICAic2VnbWVudCAlZCBvZiBmaXJtd2FyZVxuIiwgdmhhLT5ob3N0X25vLAotCQkJCSAgICBmcmFnbWVudCkpOwotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkgICAgIltFUlJPUl0gRmFpbGVkIHRvIGxvYWQgc2VnbWVudCAlZCBvZiAiCi0JCQkJICAgICJmaXJtd2FyZVxuIiwgZnJhZ21lbnQpOworCQkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDhmLAorCQkJCSAgICAiRmFpbGVkIHRvIGxvYWQgc2VnbWVudCAlZCBvZiBmaXJtd2FyZS5cbiIsCisJCQkJICAgIGZyYWdtZW50KTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDcwOSw5ICs0NzIwLDEwIEBACiAJLyogTG9hZCBmaXJtd2FyZSBibG9iLiAqLwogCWJsb2IgPSBxbGEyeDAwX3JlcXVlc3RfZmlybXdhcmUodmhhKTsKIAlpZiAoIWJsb2IpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsICJGaXJtd2FyZSBpbWFnZSB1bmF2YWlsYWJsZS5cbiIpOwotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwgIkZpcm13YXJlIGltYWdlcyBjYW4gYmUgcmV0cmlldmVkICIKLQkJICAgICJmcm9tOiAiIFFMQV9GV19VUkwgIi5cbiIpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDgzLAorCQkgICAgIkZpbXdhcmUgaW1hZ2UgdW5hdmFpbGFibGUuXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA4NCwKKwkJICAgICJGaXJtd2FyZSBpbWFnZXMgY2FuIGJlIHJldHJpZXZlZCBmcm9tOiAiUUxBX0ZXX1VSTCAiLlxuIik7CiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0KIApAQCAtNDcyNCw4ICs0NzM2LDggQEAKIAogCS8qIFZhbGlkYXRlIGZpcm13YXJlIGltYWdlIGJ5IGNoZWNraW5nIHZlcnNpb24uICovCiAJaWYgKGJsb2ItPmZ3LT5zaXplIDwgOCAqIHNpemVvZih1aW50MTZfdCkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICglWmQpIVxuIiwKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwODUsCisJCSAgICAiVW5hYmxlIHRvIHZlcmlmeSBpbnRlZ3JpdHkgb2YgZmlybXdhcmUgaW1hZ2UgKCVaZCkuXG4iLAogCQkgICAgYmxvYi0+ZnctPnNpemUpOwogCQlnb3RvIGZhaWxfZndfaW50ZWdyaXR5OwogCX0KQEAgLTQ3MzQsMTEgKzQ3NDYsMTEgQEAKIAlpZiAoKHdjb2RlWzBdID09IDB4ZmZmZiAmJiB3Y29kZVsxXSA9PSAweGZmZmYgJiYgd2NvZGVbMl0gPT0gMHhmZmZmICYmCiAJICAgIHdjb2RlWzNdID09IDB4ZmZmZikgfHwgKHdjb2RlWzBdID09IDAgJiYgd2NvZGVbMV0gPT0gMCAmJgogCQl3Y29kZVsyXSA9PSAwICYmIHdjb2RlWzNdID09IDApKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJVbmFibGUgdG8gdmVyaWZ5IGludGVncml0eSBvZiBmaXJtd2FyZSBpbWFnZSFcbiIpOwotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmlybXdhcmUgZGF0YTogJTA0eCAlMDR4ICUwNHggJTA0eCFcbiIsIHdjb2RlWzBdLAotCQkgICAgd2NvZGVbMV0sIHdjb2RlWzJdLCB3Y29kZVszXSk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDg2LAorCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDg3LAorCQkgICAgIkZpcm13YXJlIGRhdGE6ICUwNHggJTA0eCAlMDR4ICUwNHguXG4iLAorCQkgICAgd2NvZGVbMF0sIHdjb2RlWzFdLCB3Y29kZVsyXSwgd2NvZGVbM10pOwogCQlnb3RvIGZhaWxfZndfaW50ZWdyaXR5OwogCX0KIApAQCAtNDc1MSw5ICs0NzYzLDkgQEAKIAkJLyogVmFsaWRhdGUgZmlybXdhcmUgaW1hZ2Ugc2l6ZS4gKi8KIAkJZndjbGVuICs9IHJpc2Nfc2l6ZSAqIHNpemVvZih1aW50MTZfdCk7CiAJCWlmIChibG9iLT5mdy0+c2l6ZSA8IGZ3Y2xlbikgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwODgsCiAJCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICIKLQkJCSAgICAiKCVaZCkhXG4iLCBibG9iLT5mdy0+c2l6ZSk7CisJCQkgICAgIiglWmQpLlxuIiwgYmxvYi0+ZnctPnNpemUpOwogCQkJZ290byBmYWlsX2Z3X2ludGVncml0eTsKIAkJfQogCkBAIC00NzYyLDEwICs0Nzc0LDkgQEAKIAkJCXdsZW4gPSAodWludDE2X3QpKGhhLT5md190cmFuc2Zlcl9zaXplID4+IDEpOwogCQkJaWYgKHdsZW4gPiByaXNjX3NpemUpCiAJCQkJd2xlbiA9IHJpc2Nfc2l6ZTsKLQotCQkJREVCVUc3KHByaW50aygic2NzaSglbGQpOiBMb2FkaW5nIHJpc2Mgc2VnbWVudEAgcmlzYyAiCi0JCQkgICAgImFkZHIgJXgsIG51bWJlciBvZiB3b3JkcyAweCV4LlxuIiwgdmhhLT5ob3N0X25vLAotCQkJICAgIHJpc2NfYWRkciwgd2xlbikpOworCQkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA4OSwKKwkJCSAgICAiTG9hZGluZyByaXNjIHNlZ21lbnRAIHJpc2MgYWRkciAleCBudW1iZXIgb2YgIgorCQkJICAgICJ3b3JkcyAweCV4LlxuIiwgcmlzY19hZGRyLCB3bGVuKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IHdsZW47IGkrKykKIAkJCQl3Y29kZVtpXSA9IHN3YWIxNihmd2NvZGVbaV0pOwpAQCAtNDc3MywxMiArNDc4NCw5IEBACiAJCQlydmFsID0gcWxhMngwMF9sb2FkX3JhbSh2aGEsIHJlcS0+ZG1hLCByaXNjX2FkZHIsCiAJCQkgICAgd2xlbik7CiAJCQlpZiAocnZhbCkgewotCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOltFUlJPUl0gRmFpbGVkIHRvIGxvYWQgIgotCQkJCSAgICAic2VnbWVudCAlZCBvZiBmaXJtd2FyZVxuIiwgdmhhLT5ob3N0X25vLAotCQkJCSAgICBmcmFnbWVudCkpOwotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkgICAgIltFUlJPUl0gRmFpbGVkIHRvIGxvYWQgc2VnbWVudCAlZCBvZiAiCi0JCQkJICAgICJmaXJtd2FyZVxuIiwgZnJhZ21lbnQpOworCQkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDhhLAorCQkJCSAgICAiRmFpbGVkIHRvIGxvYWQgc2VnbWVudCAlZCBvZiBmaXJtd2FyZS5cbiIsCisJCQkJICAgIGZyYWdtZW50KTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDgxNCwxNSArNDgyMiwxNyBAQAogCS8qIExvYWQgZmlybXdhcmUgYmxvYi4gKi8KIAlibG9iID0gcWxhMngwMF9yZXF1ZXN0X2Zpcm13YXJlKHZoYSk7CiAJaWYgKCFibG9iKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLCAiRmlybXdhcmUgaW1hZ2UgdW5hdmFpbGFibGUuXG4iKTsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsICJGaXJtd2FyZSBpbWFnZXMgY2FuIGJlIHJldHJpZXZlZCAiCi0JCSAgICAiZnJvbTogIiBRTEFfRldfVVJMICIuXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA5MCwKKwkJICAgICJGaW13YXJlIGltYWdlIHVuYXZhaWxhYmxlLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwOTEsCisJCSAgICAiRmlybXdhcmUgaW1hZ2VzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbTogIgorCQkgICAgUUxBX0ZXX1VSTCAiLlxuIik7CiAKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfQogCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiRlc6IExvYWRpbmcgdmlhIHJlcXVlc3QtZmlybXdhcmUuLi5cbiIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwOTIsCisJICAgICJMb2FkaW5nIHZpYSByZXF1ZXN0LWZpcm13YXJlLlxuIik7CiAKIAlydmFsID0gUUxBX1NVQ0NFU1M7CiAKQEAgLTQ4MzQsOCArNDg0NCw4IEBACiAKIAkvKiBWYWxpZGF0ZSBmaXJtd2FyZSBpbWFnZSBieSBjaGVja2luZyB2ZXJzaW9uLiAqLwogCWlmIChibG9iLT5mdy0+c2l6ZSA8IDggKiBzaXplb2YodWludDMyX3QpKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJVbmFibGUgdG8gdmVyaWZ5IGludGVncml0eSBvZiBmaXJtd2FyZSBpbWFnZSAoJVpkKSFcbiIsCisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDkzLAorCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICglWmQpLlxuIiwKIAkJICAgIGJsb2ItPmZ3LT5zaXplKTsKIAkJZ290byBmYWlsX2Z3X2ludGVncml0eTsKIAl9CkBAIC00ODQ1LDExICs0ODU1LDEyIEBACiAJICAgIGRjb2RlWzJdID09IDB4ZmZmZmZmZmYgJiYgZGNvZGVbM10gPT0gMHhmZmZmZmZmZikgfHwKIAkgICAgKGRjb2RlWzBdID09IDAgJiYgZGNvZGVbMV0gPT0gMCAmJiBkY29kZVsyXSA9PSAwICYmCiAJCWRjb2RlWzNdID09IDApKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJVbmFibGUgdG8gdmVyaWZ5IGludGVncml0eSBvZiBmaXJtd2FyZSBpbWFnZSFcbiIpOwotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmlybXdhcmUgZGF0YTogJTA4eCAlMDh4ICUwOHggJTA4eCFcbiIsIGRjb2RlWzBdLAotCQkgICAgZGNvZGVbMV0sIGRjb2RlWzJdLCBkY29kZVszXSk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDk0LAorCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgaW50ZWdyaXR5IG9mIGZpcm13YXJlIGltYWdlICglWmQpLlxuIiwKKwkJICAgIGJsb2ItPmZ3LT5zaXplKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwOTUsCisJCSAgICAiRmlybXdhcmUgZGF0YTogJTA4eCAlMDh4ICUwOHggJTA4eC5cbiIsCisJCSAgICBkY29kZVswXSwgZGNvZGVbMV0sIGRjb2RlWzJdLCBkY29kZVszXSk7CiAJCWdvdG8gZmFpbF9md19pbnRlZ3JpdHk7CiAJfQogCkBAIC00ODYxLDkgKzQ4NzIsOSBAQAogCQkvKiBWYWxpZGF0ZSBmaXJtd2FyZSBpbWFnZSBzaXplLiAqLwogCQlmd2NsZW4gKz0gcmlzY19zaXplICogc2l6ZW9mKHVpbnQzMl90KTsKIAkJaWYgKGJsb2ItPmZ3LT5zaXplIDwgZndjbGVuKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDA5NiwKIAkJCSAgICAiVW5hYmxlIHRvIHZlcmlmeSBpbnRlZ3JpdHkgb2YgZmlybXdhcmUgaW1hZ2UgIgotCQkJICAgICIoJVpkKSFcbiIsIGJsb2ItPmZ3LT5zaXplKTsKKwkJCSAgICAiKCVaZCkuXG4iLCBibG9iLT5mdy0+c2l6ZSk7CiAKIAkJCWdvdG8gZmFpbF9md19pbnRlZ3JpdHk7CiAJCX0KQEAgLTQ4NzQsOSArNDg4NSw5IEBACiAJCQlpZiAoZGxlbiA+IHJpc2Nfc2l6ZSkKIAkJCQlkbGVuID0gcmlzY19zaXplOwogCi0JCQlERUJVRzcocHJpbnRrKCJzY3NpKCVsZCk6IExvYWRpbmcgcmlzYyBzZWdtZW50QCByaXNjICIKLQkJCSAgICAiYWRkciAleCwgbnVtYmVyIG9mIGR3b3JkcyAweCV4LlxuIiwgdmhhLT5ob3N0X25vLAotCQkJICAgIHJpc2NfYWRkciwgZGxlbikpOworCQkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA5NywKKwkJCSAgICAiTG9hZGluZyByaXNjIHNlZ21lbnRAIHJpc2MgYWRkciAleCAiCisJCQkgICAgIm51bWJlciBvZiBkd29yZHMgMHgleC5cbiIsIHJpc2NfYWRkciwgZGxlbik7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBkbGVuOyBpKyspCiAJCQkJZGNvZGVbaV0gPSBzd2FiMzIoZndjb2RlW2ldKTsKQEAgLTQ4ODQsMTIgKzQ4OTUsOSBAQAogCQkJcnZhbCA9IHFsYTJ4MDBfbG9hZF9yYW0odmhhLCByZXEtPmRtYSwgcmlzY19hZGRyLAogCQkJICAgIGRsZW4pOwogCQkJaWYgKHJ2YWwpIHsKLQkJCQlERUJVRyhwcmludGsoInNjc2koJWxkKTpbRVJST1JdIEZhaWxlZCB0byBsb2FkICIKLQkJCQkgICAgInNlZ21lbnQgJWQgb2YgZmlybXdhcmVcbiIsIHZoYS0+aG9zdF9ubywKLQkJCQkgICAgZnJhZ21lbnQpKTsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJbRVJST1JdIEZhaWxlZCB0byBsb2FkIHNlZ21lbnQgJWQgb2YgIgotCQkJCSAgICAiZmlybXdhcmVcbiIsIGZyYWdtZW50KTsKKwkJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDA5OCwKKwkJCQkgICAgIkZhaWxlZCB0byBsb2FkIHNlZ21lbnQgJWQgb2YgZmlybXdhcmUuXG4iLAorCQkJCSAgICBmcmFnbWVudCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQ5NTMsMTQgKzQ5NjEsMTMgQEAKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUyB8fCAhaGEtPmZsdF9yZWdpb25fZ29sZF9mdykKIAkJcmV0dXJuIHJ2YWw7CiAKLQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkgICAgIkZXOiBBdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGdvbGRlbiBmaXJtd2FyZS4uLlxuIik7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA5OSwKKwkgICAgIkF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gZ29sZGVuIGZpcm13YXJlLlxuIik7CiAJcnZhbCA9IHFsYTI0eHhfbG9hZF9yaXNjX2ZsYXNoKHZoYSwgc3Jpc2NfYWRkciwgaGEtPmZsdF9yZWdpb25fZ29sZF9mdyk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCiAJCXJldHVybiBydmFsOwogCi0JcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JICAgICJGVzogUGxlYXNlIHVwZGF0ZSBvcGVyYXRpb25hbCBmaXJtd2FyZS4uLlxuIik7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA5YSwgIlVwZGF0ZSBvcGVyYXRpb25hbCBmaXJtd2FyZS5cbiIpOwogCWhhLT5mbGFncy5ydW5uaW5nX2dvbGRfZncgPSAxOwogCiAJcmV0dXJuIHJ2YWw7CkBAIC00OTg3LDggKzQ5OTQsOCBAQAogCQkJY29udGludWU7CiAJCWlmIChxbGEyeDAwX3NldHVwX2NoaXAodmhhKSAhPSBRTEFfU1VDQ0VTUykKIAkJCWNvbnRpbnVlOwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiQXR0ZW1wdGluZyByZXRyeSBvZiBzdG9wLWZpcm13YXJlIGNvbW1hbmQuLi5cbiIpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg4MDE1LAorCQkgICAgIkF0dGVtcHRpbmcgcmV0cnkgb2Ygc3RvcC1maXJtd2FyZSBjb21tYW5kLlxuIik7CiAJCXJldCA9IHFsYTJ4MDBfc3RvcF9maXJtd2FyZSh2aGEpOwogCX0KIH0KQEAgLTUwMjMsMTAgKzUwMzAsMTAgQEAKIAkvKiBMb2dpbiB0byBTTlMgZmlyc3QgKi8KIAloYS0+aXNwX29wcy0+ZmFicmljX2xvZ2luKHZoYSwgTlBIX1NOUywgMHhmZiwgMHhmZiwgMHhmYywgbWIsIEJJVF8xKTsKIAlpZiAobWJbMF0gIT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJREVCVUcxNShxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiRmFpbGVkIFNOUyBsb2dpbjogbG9vcF9pZD0leCBtYlswXT0leCBtYlsxXT0leCAiCi0JCSAgICAibWJbMl09JXggbWJbNl09JXggbWJbN109JXhcbiIsIE5QSF9TTlMsCi0JCSAgICBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYls2XSwgbWJbN10pKTsKKwkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDEwMywKKwkJICAgICJGYWlsZWQgU05TIGxvZ2luOiBsb29wX2lkPSV4IG1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4ICIKKwkJICAgICJtYls2XT0leCBtYls3XT0leC5cbiIsCisJCSAgICBOUEhfU05TLCBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYls2XSwgbWJbN10pOwogCQlyZXR1cm4gKFFMQV9GVU5DVElPTl9GQUlMRUQpOwogCX0KIApAQCAtNTE0NiwxOSArNTE1MywyMyBAQAogCWZvciAoY250ID0gMCwgY2hrc3VtID0gMDsgY250IDwgaGEtPm52cmFtX3NpemUgPj4gMjsgY250KyspCiAJCWNoa3N1bSArPSBsZTMyX3RvX2NwdSgqZHB0cisrKTsKIAotCURFQlVHNShwcmludGsoInNjc2koJWxkKTogQ29udGVudHMgb2YgTlZSQU1cbiIsIHZoYS0+aG9zdF9ubykpOwotCURFQlVHNShxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbnYsIGhhLT5udnJhbV9zaXplKSk7CisJcWxfZGJnKHFsX2RiZ19pbml0ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDAxMTEsCisJICAgICJDb250ZW50cyBvZiBOVlJBTTpcbiIpOworCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19pbml0ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDAxMTIsCisJICAgICh1aW50OF90ICopbnYsIGhhLT5udnJhbV9zaXplKTsKIAogCS8qIEJhZCBOVlJBTSBkYXRhLCBzZXQgZGVmYXVsdHMgcGFyYW1ldGVycy4gKi8KIAlpZiAoY2hrc3VtIHx8IG52LT5pZFswXSAhPSAnSScgfHwgbnYtPmlkWzFdICE9ICdTJyB8fCBudi0+aWRbMl0gIT0gJ1AnCiAJICAgIHx8IG52LT5pZFszXSAhPSAnICcgfHwKIAkgICAgbnYtPm52cmFtX3ZlcnNpb24gPCBfX2NvbnN0YW50X2NwdV90b19sZTE2KElDQl9WRVJTSU9OKSkgewogCQkvKiBSZXNldCBOVlJBTSBkYXRhLiAqLwotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJJbmNvbnNpc3RlbnQgTlZSQU0gZGV0ZWN0ZWQ6ICIKLQkJICAgICJjaGVja3N1bT0weCV4IGlkPSVjIHZlcnNpb249MHgleC5cbiIsIGNoa3N1bSwgbnYtPmlkWzBdLAorCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDczLAorCQkgICAgIkluY29uaXNpc3RlbnQgTlZSQU0gZGV0ZWN0ZWQ6IGNoZWNrc3VtPTB4JXggaWQ9JWMgIgorCQkgICAgInZlcnNpb249MHgleC5cbiIsIGNoa3N1bSwgbnYtPmlkWzBdLAogCQkgICAgbGUxNl90b19jcHUobnYtPm52cmFtX3ZlcnNpb24pKTsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiRmFsbGluZyBiYWNrIHRvIGZ1bmN0aW9uaW5nICh5ZXQgIgotCQkgICAgImludmFsaWQgLS0gV1dQTikgZGVmYXVsdHMuXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA3NCwKKwkJICAgICJGYWxsaW5nIGJhY2sgdG8gZnVuY3Rpb25pbmcgKHlldCBpbnZhbGlkIC0tIFdXUE4pICIKKwkJICAgICJkZWZhdWx0cy5cbiIpOwogCiAJCS8qCiAJCSAqIFNldCBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGNvbnRyb2wgYmxvY2suCkBAIC01MzUwLDEyICs1MzYxLDEwIEBACiAJaWYgKGhhLT56aW9fbW9kZSAhPSBRTEFfWklPX0RJU0FCTEVEKSB7CiAJCWhhLT56aW9fbW9kZSA9IFFMQV9aSU9fTU9ERV82OwogCi0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogWklPIG1vZGUgJWQgZW5hYmxlZDsgdGltZXIgZGVsYXkgIgotCQkgICAgIiglZCB1cykuXG4iLCB2aGEtPmhvc3Rfbm8sIGhhLT56aW9fbW9kZSwKLQkJICAgIGhhLT56aW9fdGltZXIgKiAxMDApKTsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMDc1LAogCQkgICAgIlpJTyBtb2RlICVkIGVuYWJsZWQ7IHRpbWVyIGRlbGF5ICglZCB1cykuXG4iLAotCQkgICAgaGEtPnppb19tb2RlLCBoYS0+emlvX3RpbWVyICogMTAwKTsKKwkJICAgIGhhLT56aW9fbW9kZSwKKwkJICAgIGhhLT56aW9fdGltZXIgKiAxMDApOwogCiAJCWljYi0+ZmlybXdhcmVfb3B0aW9uc18yIHw9IGNwdV90b19sZTMyKAogCQkgICAgKHVpbnQzMl90KWhhLT56aW9fbW9kZSk7CkBAIC01MzY0LDggKzUzNzMsOCBAQAogCX0KIAogCWlmIChydmFsKSB7Ci0JCURFQlVHMl8zKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZCk6IE5WUkFNIGNvbmZpZ3VyYXRpb24gZmFpbGVkIVxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNzYsCisJCSAgICAiTlZSQU0gY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKIAl9CiAJcmV0dXJuIChydmFsKTsKIH0KQEAgLTUzODgsOSArNTM5Nyw4IEBACiAKIAkJc3RhdHVzID0gcWxhMngwMF9md19yZWFkeSh2aGEpOwogCQlpZiAoIXN0YXR1cykgewotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJIiVzKCk6IFN0YXJ0IGNvbmZpZ3VyZSBsb29wLCAiCi0JCQkic3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAzYywKKwkJCSAgICAiU3RhcnQgY29uZmlndXJlIGxvb3AsIHN0YXR1cyA9JWQuXG4iLCBzdGF0dXMpOwogCiAJCQkvKiBJc3N1ZSBhIG1hcmtlciBhZnRlciBGVyBiZWNvbWVzIHJlYWR5LiAqLwogCQkJcWxhMngwMF9tYXJrZXIodmhhLCByZXEsIHJzcCwgMCwgMCwgTUtfU1lOQ19BTEwpOwpAQCAtNTQxMiw5ICs1NDIwLDggQEAKIAkJaWYgKCh2aGEtPmRldmljZV9mbGFncyAmIERGTEdfTk9fQ0FCTEUpKQogCQkJc3RhdHVzID0gMDsKIAotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiJXMoKTogQ29uZmlndXJlIGxvb3AgZG9uZSwgc3RhdHVzID0gMHgleFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg4MDNkLAorCQkgICAgIkNvbmZpZ3VyZSBsb29wIGRvbmUsIHN0YXR1cyA9IDB4JXguXG4iLCBzdGF0dXMpOwogCX0KIAogCWlmICghc3RhdHVzKSB7CkBAIC01NDUwLDkgKzU0NTcsOSBAQAogCQkJICAgIGhhLT5mY2VfZG1hLCBoYS0+ZmNlX2J1ZnMsIGhhLT5mY2VfbWIsCiAJCQkgICAgJmhhLT5mY2VfYnVmcyk7CiAJCQlpZiAocnZhbCkgewotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkgICAgIlVuYWJsZSB0byByZWluaXRpYWxpemUgRkNFICIKLQkJCQkgICAgIiglZCkuXG4iLCBydmFsKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDNlLAorCQkJCSAgICAiVW5hYmxlIHRvIHJlaW5pdGlhbGl6ZSBGQ0UgKCVkKS5cbiIsCisJCQkJICAgIHJ2YWwpOwogCQkJCWhhLT5mbGFncy5mY2VfZW5hYmxlZCA9IDA7CiAJCQl9CiAJCX0KQEAgLTU0NjIsMTcgKzU0NjksMTYgQEAKIAkJCXJ2YWwgPSBxbGEyeDAwX2VuYWJsZV9lZnRfdHJhY2UodmhhLAogCQkJICAgIGhhLT5lZnRfZG1hLCBFRlRfTlVNX0JVRkZFUlMpOwogCQkJaWYgKHJ2YWwpIHsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJVbmFibGUgdG8gcmVpbml0aWFsaXplIEVGVCAiCi0JCQkJICAgICIoJWQpLlxuIiwgcnZhbCk7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAzZiwKKwkJCQkgICAgIlVuYWJsZSB0byByZWluaXRpYWxpemUgRUZUICglZCkuXG4iLAorCQkJCSAgICBydmFsKTsKIAkJCX0KIAkJfQogCX0KIAogCWlmICghc3RhdHVzKSB7Ci0JCURFQlVHKHByaW50ayhLRVJOX0lORk8KLQkJCSJxbGE4Mnh4X3Jlc3RhcnRfaXNwKCVsZCk6IHN1Y2NlZWRlZC5cbiIsCi0JCQl2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwNDAsCisJCSAgICAicWxhODJ4eF9yZXN0YXJ0X2lzcCBzdWNjZWVkZWQuXG4iKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodnAsICZoYS0+dnBfbGlzdCwgbGlzdCkgewpAQCAtNTQ4OSw4ICs1NDk1LDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CiAKIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkicWxhODJ4eF9yZXN0YXJ0X2lzcDogKioqKiBGQUlMRUQgKioqKlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwNDEsCisJCSAgICAicWxhODJ4eF9yZXN0YXJ0X2lzcCAqKioqIEZBSUxFRCAqKioqLlxuIik7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTU2NDAsOSArNTY0Niw4IEBACiAJaWYgKHJldCA9PSBRTEFfU1VDQ0VTUykKIAkJZmNwb3J0LT5mY3BfcHJpbyA9IHByaW9yaXR5OwogCWVsc2UKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJzY3NpKCVsZCk6IFVuYWJsZSB0byBhY3RpdmF0ZSBmY3AgcHJpb3JpdHksICIKLQkJCSIgcmV0PTB4JXhcbiIsIHZoYS0+aG9zdF9ubywgcmV0KSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwNGYsCisJCSAgICAiVW5hYmxlIHRvIGFjdGl2YXRlIGZjcCBwcmlvcml0eSwgcmV0PTB4JXguXG4iLCByZXQpOwogCiAJcmV0dXJuICByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKaW5kZXggNGM4MTY3ZS4uOTkwMjgzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaApAQCAtOTQsMTEgKzk0LDQwIEBACiAKIAkvKiBEb24ndCBwcmludCBzdGF0ZSB0cmFuc2l0aW9ucyBkdXJpbmcgaW5pdGlhbCBhbGxvY2F0aW9uIG9mIGZjcG9ydCAqLwogCWlmIChvbGRfc3RhdGUgJiYgb2xkX3N0YXRlICE9IHN0YXRlKSB7Ci0JCURFQlVHKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBmY3BvcnQtPnZoYS0+aHcsCi0JCSAgICAic2NzaSglbGQpOiBGQ1BvcnQgc3RhdGUgdHJhbnNpdGlvbmVkIGZyb20gJXMgdG8gJXMgLSAiCi0JCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIGZjcG9ydC0+dmhhLT5ob3N0X25vLAorCQlxbF9kYmcocWxfZGJnX2Rpc2MsIGZjcG9ydC0+dmhhLCAweDIwN2QsCisJCSAgICAiRkNQb3J0IHN0YXRlIHRyYW5zaXRpb25lZCBmcm9tICVzIHRvICVzIC0gIgorCQkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLAogCQkgICAgcG9ydF9zdGF0ZV9zdHJbb2xkX3N0YXRlXSwgcG9ydF9zdGF0ZV9zdHJbc3RhdGVdLAogCQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAotCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAl9CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50CitxbGEyeDAwX2hiYV9lcnJfY2hrX2VuYWJsZWQoc3JiX3QgKnNwKQoreworCS8qCisJICogVW5jb21tZW50IHdoZW4gY29ycmVzcG9uZGluZyBTQ1NJIGNoYW5nZXMgYXJlIGRvbmUuCisJICoKKwlpZiAoIXNwLT5jbWQtPnByb3RfY2hrKQorCQlyZXR1cm4gMDsKKwkgKgorCSAqLworCisJc3dpdGNoIChzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpKSB7CisJY2FzZSBTQ1NJX1BST1RfUkVBRF9TVFJJUDoKKwljYXNlIFNDU0lfUFJPVF9XUklURV9JTlNFUlQ6CisJCWlmIChxbDJ4ZW5hYmxlaGJhX2Vycl9jaGsgPj0gMSkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CisJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKKwkJaWYgKHFsMnhlbmFibGVoYmFfZXJyX2NoayA+PSAyKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgU0NTSV9QUk9UX1JFQURfSU5TRVJUOgorCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1NUUklQOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCA3YmFjM2NkLi5kYmVjODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogCiAJLyogV2Ugb25seSBzdXBwb3J0IFQxMCBESUYgcmlnaHQgbm93ICovCiAJaWYgKGd1YXJkICE9IFNIT1NUX0RJWF9HVUFSRF9DUkMpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiVW5zdXBwb3J0ZWQgZ3VhcmQ6ICVkXG4iLCBndWFyZCkpOworCQlxbF9kYmcocWxfZGJnX2lvLCBzcC0+ZmNwb3J0LT52aGEsIDB4MzAwNywKKwkJICAgICJVbnN1cHBvcnRlZCBndWFyZDogJWQgZm9yIGNtZD0lcC5cbiIsIGd1YXJkLCBzcC0+Y21kKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDMsOSArMzQ0LDEwIEBACiAKIAkvKiBTZW5kIG1hcmtlciBpZiByZXF1aXJlZCAqLwogCWlmICh2aGEtPm1hcmtlcl9uZWVkZWQgIT0gMCkgewotCQlpZiAocWxhMngwMF9tYXJrZXIodmhhLCByZXEsIHJzcCwgMCwgMCwgTUtfU1lOQ19BTEwpCi0JCQkJCQkJIT0gUUxBX1NVQ0NFU1MpCisJCWlmIChxbGEyeDAwX21hcmtlcih2aGEsIHJlcSwgcnNwLCAwLCAwLCBNS19TWU5DX0FMTCkgIT0KKwkJICAgIFFMQV9TVUNDRVNTKSB7CiAJCQlyZXR1cm4gKFFMQV9GVU5DVElPTl9GQUlMRUQpOworCQl9CiAJCXZoYS0+bWFya2VyX25lZWRlZCA9IDA7CiAJfQogCkBAIC00OTAsOCArNDkyLDggQEAKIAltcmsyNCA9IE5VTEw7CiAJbXJrID0gKG1ya19lbnRyeV90ICopcWxhMngwMF9hbGxvY19pb2Nicyh2aGEsIDApOwogCWlmIChtcmsgPT0gTlVMTCkgewotCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBhbGxvY2F0ZSBNYXJrZXIgSU9DQi5cbiIsCi0JCSAgICBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgzMDI2LAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBNYXJrZXIgSU9DQi5cbiIpOwogCiAJCXJldHVybiAoUUxBX0ZVTkNUSU9OX0ZBSUxFRCk7CiAJfQpAQCAtNTQ3LDkgKzU0OSwxMCBAQAogCWRldmljZV9yZWdfdCBfX2lvbWVtICpyZWcgPSBJU1BfUVVFX1JFRyhoYSwgcmVxLT5pZCk7CiAJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICppb3JlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAKLQlERUJVRzUocHJpbnRrKCIlcygpOiBJT0NCIGRhdGE6XG4iLCBfX2Z1bmNfXykpOwotCURFQlVHNShxbGEyeDAwX2R1bXBfYnVmZmVyKAotCSAgICAodWludDhfdCAqKXJlcS0+cmluZ19wdHIsIFJFUVVFU1RfRU5UUllfU0laRSkpOworCXFsX2RiZyhxbF9kYmdfaW8gKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MzAyZCwKKwkgICAgIklPQ0IgZGF0YTpcbiIpOworCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19pbyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgzMDJlLAorCSAgICAodWludDhfdCAqKXJlcS0+cmluZ19wdHIsIFJFUVVFU1RfRU5UUllfU0laRSk7CiAKIAkvKiBBZGp1c3QgcmluZyBpbmRleC4gKi8KIAlyZXEtPnJpbmdfaW5kZXgrKzsKQEAgLTYwNCw3ICs2MDcsNyBAQAogICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIElPQ0IgZW50cmllcyBuZWVkZWQgdG8gc3RvcmUgQGRzZHMuCiAgKi8KIGlubGluZSB1aW50MTZfdAotcWxhMjR4eF9jYWxjX2lvY2JzKHVpbnQxNl90IGRzZHMpCitxbGEyNHh4X2NhbGNfaW9jYnMoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90IGRzZHMpCiB7CiAJdWludDE2X3QgaW9jYnM7CiAKQEAgLTYxNCw4ICs2MTcsNiBAQAogCQlpZiAoKGRzZHMgLSAxKSAlIDUpCiAJCQlpb2NicysrOwogCX0KLQlERUJVRzMocHJpbnRrKEtFUk5fREVCVUcgIiVzKCk6IFJlcXVpcmVkIFBLVChzKSA9ICVkXG4iLAotCSAgICBfX2Z1bmNfXywgaW9jYnMpKTsKIAlyZXR1cm4gaW9jYnM7CiB9CiAKQEAgLTcwOCwxOSArNzA5LDI4IEBACiAgKgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXFsYTI0eHhfc2V0X3QxMGRpZl90YWdzKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IGZ3X2RpZl9jb250ZXh0ICpwa3QsCitxbGEyNHh4X3NldF90MTBkaWZfdGFncyhzcmJfdCAqc3AsIHN0cnVjdCBmd19kaWZfY29udGV4dCAqcGt0LAogICAgIHVuc2lnbmVkIGludCBwcm90Y250KQogewotCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNwdDsKLQl1bnNpZ25lZCBjaGFyIG9wID0gc2NzaV9nZXRfcHJvdF9vcChjbWQpOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHNwLT5jbWQ7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAogCXN3aXRjaCAoc2NzaV9nZXRfcHJvdF90eXBlKGNtZCkpIHsKLQkvKiBGb3IgVFlQRSAwIHByb3RlY3Rpb246IG5vIGNoZWNraW5nICovCiAJY2FzZSBTQ1NJX1BST1RfRElGX1RZUEUwOgotCQlwa3QtPnJlZl90YWdfbWFza1swXSA9IDB4MDA7Ci0JCXBrdC0+cmVmX3RhZ19tYXNrWzFdID0gMHgwMDsKLQkJcGt0LT5yZWZfdGFnX21hc2tbMl0gPSAweDAwOwotCQlwa3QtPnJlZl90YWdfbWFza1szXSA9IDB4MDA7CisJCS8qCisJCSAqIE5vIGNoZWNrIGZvciBxbDJ4ZW5hYmxlaGJhX2Vycl9jaGssIGFzIGl0IHdvdWxkIGJlIGFuCisJCSAqIEkvTyBlcnJvciBpZiBoYmEgdGFnIGdlbmVyYXRpb24gaXMgbm90IGRvbmUuCisJCSAqLworCQlwa3QtPnJlZl90YWcgPSBjcHVfdG9fbGUzMigodWludDMyX3QpCisJCSAgICAoMHhmZmZmZmZmZiAmIHNjc2lfZ2V0X2xiYShjbWQpKSk7CisKKwkJaWYgKCFxbGEyeDAwX2hiYV9lcnJfY2hrX2VuYWJsZWQoc3ApKQorCQkJYnJlYWs7CisKKwkJcGt0LT5yZWZfdGFnX21hc2tbMF0gPSAweGZmOworCQlwa3QtPnJlZl90YWdfbWFza1sxXSA9IDB4ZmY7CisJCXBrdC0+cmVmX3RhZ19tYXNrWzJdID0gMHhmZjsKKwkJcGt0LT5yZWZfdGFnX21hc2tbM10gPSAweGZmOwogCQlicmVhazsKIAogCS8qCkBAIC03MjgsMjAgKzczOCwxNiBAQAogCSAqIG1hdGNoIExCQSBpbiBDREIgKyBOCiAJICovCiAJY2FzZSBTQ1NJX1BST1RfRElGX1RZUEUyOgotCQlpZiAoIXFsMnhlbmFibGVoYmFfZXJyX2NoaykKLQkJCWJyZWFrOwotCi0JCWlmIChzY3NpX3Byb3Rfc2dfY291bnQoY21kKSkgewotCQkJc3B0ID0gcGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2NzaV9wcm90X3NnbGlzdChjbWQpKSkgKwotCQkJICAgIHNjc2lfcHJvdF9zZ2xpc3QoY21kKVswXS5vZmZzZXQ7Ci0JCQlwa3QtPmFwcF90YWcgPSBzd2FiMzIoc3B0LT5hcHBfdGFnKTsKLQkJCXBrdC0+YXBwX3RhZ19tYXNrWzBdID0gIDB4ZmY7Ci0JCQlwa3QtPmFwcF90YWdfbWFza1sxXSA9ICAweGZmOwotCQl9CisJCXBrdC0+YXBwX3RhZyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7CisJCXBrdC0+YXBwX3RhZ19tYXNrWzBdID0gMHgwOworCQlwa3QtPmFwcF90YWdfbWFza1sxXSA9IDB4MDsKIAogCQlwa3QtPnJlZl90YWcgPSBjcHVfdG9fbGUzMigodWludDMyX3QpCiAJCSAgICAoMHhmZmZmZmZmZiAmIHNjc2lfZ2V0X2xiYShjbWQpKSk7CiAKKwkJaWYgKCFxbGEyeDAwX2hiYV9lcnJfY2hrX2VuYWJsZWQoc3ApKQorCQkJYnJlYWs7CisKIAkJLyogZW5hYmxlIEFMTCBieXRlcyBvZiB0aGUgcmVmIHRhZyAqLwogCQlwa3QtPnJlZl90YWdfbWFza1swXSA9IDB4ZmY7CiAJCXBrdC0+cmVmX3RhZ19tYXNrWzFdID0gMHhmZjsKQEAgLTc2MSwyNiArNzY3LDE1IEBACiAJICogMTYgYml0IGFwcCB0YWcuCiAJICovCiAJY2FzZSBTQ1NJX1BST1RfRElGX1RZUEUxOgotCQlpZiAoIXFsMnhlbmFibGVoYmFfZXJyX2NoaykKKwkJcGt0LT5yZWZfdGFnID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KQorCQkgICAgKDB4ZmZmZmZmZmYgJiBzY3NpX2dldF9sYmEoY21kKSkpOworCQlwa3QtPmFwcF90YWcgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOworCQlwa3QtPmFwcF90YWdfbWFza1swXSA9IDB4MDsKKwkJcGt0LT5hcHBfdGFnX21hc2tbMV0gPSAweDA7CisKKwkJaWYgKCFxbGEyeDAwX2hiYV9lcnJfY2hrX2VuYWJsZWQoc3ApKQogCQkJYnJlYWs7CiAKLQkJaWYgKHByb3RjbnQgJiYgKG9wID09IFNDU0lfUFJPVF9XUklURV9TVFJJUCB8fAotCQkgICAgb3AgPT0gU0NTSV9QUk9UX1dSSVRFX1BBU1MpKSB7Ci0JCQlzcHQgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzY3NpX3Byb3Rfc2dsaXN0KGNtZCkpKSArCi0JCQkgICAgc2NzaV9wcm90X3NnbGlzdChjbWQpWzBdLm9mZnNldDsKLQkJCURFQlVHMTgocHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAiJXMoKTogTEJBIGZyb20gdXNlciAlcCwgbGJhID0gMHgleFxuIiwKLQkJCSAgICBfX2Z1bmNfXywgc3B0LCAoaW50KXNwdC0+cmVmX3RhZykpOwotCQkJcGt0LT5yZWZfdGFnID0gc3dhYjMyKHNwdC0+cmVmX3RhZyk7Ci0JCQlwa3QtPmFwcF90YWdfbWFza1swXSA9IDB4MDsKLQkJCXBrdC0+YXBwX3RhZ19tYXNrWzFdID0gMHgwOwotCQl9IGVsc2UgewotCQkJcGt0LT5yZWZfdGFnID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KQotCQkJICAgICgweGZmZmZmZmZmICYgc2NzaV9nZXRfbGJhKGNtZCkpKTsKLQkJCXBrdC0+YXBwX3RhZyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCk7Ci0JCQlwa3QtPmFwcF90YWdfbWFza1swXSA9IDB4MDsKLQkJCXBrdC0+YXBwX3RhZ19tYXNrWzFdID0gMHgwOwotCQl9CiAJCS8qIGVuYWJsZSBBTEwgYnl0ZXMgb2YgdGhlIHJlZiB0YWcgKi8KIAkJcGt0LT5yZWZfdGFnX21hc2tbMF0gPSAweGZmOwogCQlwa3QtPnJlZl90YWdfbWFza1sxXSA9IDB4ZmY7CkBAIC03ODksMTQgKzc4NCwxNjggQEAKIAkJYnJlYWs7CiAJfQogCi0JREVCVUcxOChwcmludGsoS0VSTl9ERUJVRwotCSAgICAiJXMoKTogU2V0dGluZyBwcm90ZWN0aW9uIFRhZ3M6IChCSUcpIHJlZiB0YWcgPSAweCV4LCIKLQkgICAgIiBhcHAgdGFnID0gMHgleCwgcHJvdCBTRyBjb3VudCAlZCAsIGNtZCBsYmEgMHgleCwiCi0JICAgICIgcHJvdF90eXBlPSV1XG4iLCBfX2Z1bmNfXywgcGt0LT5yZWZfdGFnLCBwa3QtPmFwcF90YWcsIHByb3RjbnQsCi0JICAgIChpbnQpc2NzaV9nZXRfbGJhKGNtZCksIHNjc2lfZ2V0X3Byb3RfdHlwZShjbWQpKSk7CisJcWxfZGJnKHFsX2RiZ19pbywgdmhhLCAweDMwMDksCisJICAgICJTZXR0aW5nIHByb3RlY3Rpb24gVGFnczogKEJJRykgcmVmIHRhZyA9IDB4JXgsIGFwcCB0YWcgPSAweCV4LCAiCisJICAgICJwcm90IFNHIGNvdW50ICVkLCBjbWQgbGJhIDB4JXgsIHByb3RfdHlwZT0ldSBjbWQ9JXAuXG4iLAorCSAgICBwa3QtPnJlZl90YWcsIHBrdC0+YXBwX3RhZywgcHJvdGNudCwgKGludClzY3NpX2dldF9sYmEoY21kKSwKKwkgICAgc2NzaV9nZXRfcHJvdF90eXBlKGNtZCksIGNtZCk7CiB9CiAKK3N0cnVjdCBxbGEyX3NneCB7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CS8qIE9VVCAqLworCXVpbnQzMl90CQlkbWFfbGVuOwkvKiBPVVQgKi8KIAorCXVpbnQzMl90CQl0b3RfYnl0ZXM7CS8qIElOICovCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpjdXJfc2c7CS8qIElOICovCisKKwkvKiBmb3IgYm9vayBrZWVwaW5nLCBiemVybyBvbiBpbml0aWFsIGludm9jYXRpb24gKi8KKwl1aW50MzJfdAkJYnl0ZXNfY29uc3VtZWQ7CisJdWludDMyX3QJCW51bV9ieXRlczsKKwl1aW50MzJfdAkJdG90X3BhcnRpYWw7CisKKwkvKiBmb3IgZGVidWdnaW5nICovCisJdWludDMyX3QJCW51bV9zZzsKKwlzcmJfdAkJCSpzcDsKK307CisKK3N0YXRpYyBpbnQKK3FsYTI0eHhfZ2V0X29uZV9ibG9ja19zZyh1aW50MzJfdCBibGtfc3osIHN0cnVjdCBxbGEyX3NneCAqc2d4LAorCXVpbnQzMl90ICpwYXJ0aWFsKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdWludDMyX3QgY3VtdWxhdGl2ZV9wYXJ0aWFsLCBzZ19sZW47CisJZG1hX2FkZHJfdCBzZ19kbWFfYWRkcjsKKworCWlmIChzZ3gtPm51bV9ieXRlcyA9PSBzZ3gtPnRvdF9ieXRlcykKKwkJcmV0dXJuIDA7CisKKwlzZyA9IHNneC0+Y3VyX3NnOworCWN1bXVsYXRpdmVfcGFydGlhbCA9IHNneC0+dG90X3BhcnRpYWw7CisKKwlzZ19kbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKworCXNneC0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkciArIHNneC0+Ynl0ZXNfY29uc3VtZWQ7CisKKwlpZiAoKGN1bXVsYXRpdmVfcGFydGlhbCArIChzZ19sZW4gLSBzZ3gtPmJ5dGVzX2NvbnN1bWVkKSkgPj0gYmxrX3N6KSB7CisJCXNneC0+ZG1hX2xlbiA9IChibGtfc3ogLSBjdW11bGF0aXZlX3BhcnRpYWwpOworCQlzZ3gtPnRvdF9wYXJ0aWFsID0gMDsKKwkJc2d4LT5udW1fYnl0ZXMgKz0gYmxrX3N6OworCQkqcGFydGlhbCA9IDA7CisJfSBlbHNlIHsKKwkJc2d4LT5kbWFfbGVuID0gc2dfbGVuIC0gc2d4LT5ieXRlc19jb25zdW1lZDsKKwkJc2d4LT50b3RfcGFydGlhbCArPSBzZ3gtPmRtYV9sZW47CisJCSpwYXJ0aWFsID0gMTsKKwl9CisKKwlzZ3gtPmJ5dGVzX2NvbnN1bWVkICs9IHNneC0+ZG1hX2xlbjsKKworCWlmIChzZ19sZW4gPT0gc2d4LT5ieXRlc19jb25zdW1lZCkgeworCQlzZyA9IHNnX25leHQoc2cpOworCQlzZ3gtPm51bV9zZysrOworCQlzZ3gtPmN1cl9zZyA9IHNnOworCQlzZ3gtPmJ5dGVzX2NvbnN1bWVkID0gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcWxhMjR4eF93YWxrX2FuZF9idWlsZF9zZ2xpc3Rfbm9fZGlmYihzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLCBzcmJfdCAqc3AsCisJdWludDMyX3QgKmRzZCwgdWludDE2X3QgdG90X2RzZHMpCit7CisJdm9pZCAqbmV4dF9kc2Q7CisJdWludDhfdCBhdmFpbF9kc2RzID0gMDsKKwl1aW50MzJfdCBkc2RfbGlzdF9sZW47CisJc3RydWN0IGRzZF9kbWEgKmRzZF9wdHI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19wcm90OworCXVpbnQzMl90ICpjdXJfZHNkID0gZHNkOworCXVpbnQxNl90CXVzZWRfZHNkcyA9IHRvdF9kc2RzOworCisJdWludDMyX3QJcHJvdF9pbnQ7CisJdWludDMyX3QJcGFydGlhbDsKKwlzdHJ1Y3QgcWxhMl9zZ3ggc2d4OworCWRtYV9hZGRyX3QJc2xlX2RtYTsKKwl1aW50MzJfdAlzbGVfZG1hX2xlbiwgdG90X3Byb3RfZG1hX2xlbiA9IDA7CisJc3RydWN0IHNjc2lfY21uZCAqY21kID0gc3AtPmNtZDsKKworCXByb3RfaW50ID0gY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplOworCisJbWVtc2V0KCZzZ3gsIDAsIHNpemVvZihzdHJ1Y3QgcWxhMl9zZ3gpKTsKKwlzZ3gudG90X2J5dGVzID0gc2NzaV9idWZmbGVuKHNwLT5jbWQpOworCXNneC5jdXJfc2cgPSBzY3NpX3NnbGlzdChzcC0+Y21kKTsKKwlzZ3guc3AgPSBzcDsKKworCXNnX3Byb3QgPSBzY3NpX3Byb3Rfc2dsaXN0KHNwLT5jbWQpOworCisJd2hpbGUgKHFsYTI0eHhfZ2V0X29uZV9ibG9ja19zZyhwcm90X2ludCwgJnNneCwgJnBhcnRpYWwpKSB7CisKKwkJc2xlX2RtYSA9IHNneC5kbWFfYWRkcjsKKwkJc2xlX2RtYV9sZW4gPSBzZ3guZG1hX2xlbjsKK2FsbG9jX2FuZF9maWxsOgorCQkvKiBBbGxvY2F0ZSBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYWNrZXRzPyAqLworCQlpZiAoYXZhaWxfZHNkcyA9PSAwKSB7CisJCQlhdmFpbF9kc2RzID0gKHVzZWRfZHNkcyA+IFFMQV9EU0RTX1BFUl9JT0NCKSA/CisJCQkJCVFMQV9EU0RTX1BFUl9JT0NCIDogdXNlZF9kc2RzOworCQkJZHNkX2xpc3RfbGVuID0gKGF2YWlsX2RzZHMgKyAxKSAqIDEyOworCQkJdXNlZF9kc2RzIC09IGF2YWlsX2RzZHM7CisKKwkJCS8qIGFsbG9jYXRlIHRyYWNraW5nIERTICovCisJCQlkc2RfcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzZF9kbWEpLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghZHNkX3B0cikKKwkJCQlyZXR1cm4gMTsKKworCQkJLyogYWxsb2NhdGUgbmV3IGxpc3QgKi8KKwkJCWRzZF9wdHItPmRzZF9hZGRyID0gbmV4dF9kc2QgPQorCQkJICAgIGRtYV9wb29sX2FsbG9jKGhhLT5kbF9kbWFfcG9vbCwgR0ZQX0FUT01JQywKKwkJCQkmZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKTsKKworCQkJaWYgKCFuZXh0X2RzZCkgeworCQkJCS8qCisJCQkJICogTmVlZCB0byBjbGVhbnVwIG9ubHkgdGhpcyBkc2RfcHRyLCByZXN0CisJCQkJICogd2lsbCBiZSBkb25lIGJ5IHNwX2ZyZWVfZG1hKCkKKwkJCQkgKi8KKwkJCQlrZnJlZShkc2RfcHRyKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKworCQkJbGlzdF9hZGRfdGFpbCgmZHNkX3B0ci0+bGlzdCwKKwkJCSAgICAmKChzdHJ1Y3QgY3JjX2NvbnRleHQgKilzcC0+Y3R4KS0+ZHNkX2xpc3QpOworCisJCQlzcC0+ZmxhZ3MgfD0gU1JCX0NSQ19DVFhfRFNEX1ZBTElEOworCisJCQkvKiBhZGQgbmV3IGxpc3QgdG8gY21kIGlvY2Igb3IgbGFzdCBsaXN0ICovCisJCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoTFNEKGRzZF9wdHItPmRzZF9saXN0X2RtYSkpOworCQkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKE1TRChkc2RfcHRyLT5kc2RfbGlzdF9kbWEpKTsKKwkJCSpjdXJfZHNkKysgPSBkc2RfbGlzdF9sZW47CisJCQljdXJfZHNkID0gKHVpbnQzMl90ICopbmV4dF9kc2Q7CisJCX0KKwkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKExTRChzbGVfZG1hKSk7CisJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihNU0Qoc2xlX2RtYSkpOworCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoc2xlX2RtYV9sZW4pOworCQlhdmFpbF9kc2RzLS07CisKKwkJaWYgKHBhcnRpYWwgPT0gMCkgeworCQkJLyogR290IGEgZnVsbCBwcm90ZWN0aW9uIGludGVydmFsICovCisJCQlzbGVfZG1hID0gc2dfZG1hX2FkZHJlc3Moc2dfcHJvdCkgKyB0b3RfcHJvdF9kbWFfbGVuOworCQkJc2xlX2RtYV9sZW4gPSA4OworCisJCQl0b3RfcHJvdF9kbWFfbGVuICs9IHNsZV9kbWFfbGVuOworCQkJaWYgKHRvdF9wcm90X2RtYV9sZW4gPT0gc2dfZG1hX2xlbihzZ19wcm90KSkgeworCQkJCXRvdF9wcm90X2RtYV9sZW4gPSAwOworCQkJCXNnX3Byb3QgPSBzZ19uZXh0KHNnX3Byb3QpOworCQkJfQorCisJCQlwYXJ0aWFsID0gMTsgLyogU28gYXMgdG8gbm90IHJlLWVudGVyIHRoaXMgYmxvY2sgKi8KKwkJCWdvdG8gYWxsb2NfYW5kX2ZpbGw7CisJCX0KKwl9CisJLyogTnVsbCB0ZXJtaW5hdGlvbiAqLworCSpjdXJfZHNkKysgPSAwOworCSpjdXJfZHNkKysgPSAwOworCSpjdXJfZHNkKysgPSAwOworCXJldHVybiAwOworfQogc3RhdGljIGludAogcWxhMjR4eF93YWxrX2FuZF9idWlsZF9zZ2xpc3Qoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3JiX3QgKnNwLCB1aW50MzJfdCAqZHNkLAogCXVpbnQxNl90IHRvdF9kc2RzKQpAQCAtODA5LDYgKzk1OCw3IEBACiAJdWludDMyX3QgKmN1cl9kc2QgPSBkc2Q7CiAJaW50CWk7CiAJdWludDE2X3QJdXNlZF9kc2RzID0gdG90X2RzZHM7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KHNwLT5jbWQtPmRldmljZS0+aG9zdCk7CiAKIAl1aW50OF90CQkqY3A7CiAKQEAgLTg1Myw5ICsxMDAzLDEwIEBACiAJCQljdXJfZHNkID0gKHVpbnQzMl90ICopbmV4dF9kc2Q7CiAJCX0KIAkJc2xlX2RtYSA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJREVCVUcxOChwcmludGsoIiVzKCk6ICVwLCBzZyBlbnRyeSAlZCAtIGFkZHIgPTB4JXggMHgleCwiCi0JCSAgICAiIGxlbiA9JWRcbiIsIF9fZnVuY19fICwgY3VyX2RzZCwgaSwgTFNEKHNsZV9kbWEpLAotCQkgICAgTVNEKHNsZV9kbWEpLCBzZ19kbWFfbGVuKHNnKSkpOworCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAwYSwKKwkJICAgICJzZyBlbnRyeSAlZCAtIGFkZHI9MHgleCAweCV4LCAiICJsZW49JWQgZm9yIGNtZD0lcC5cbiIsCisJCSAgICBjdXJfZHNkLCBpLCBMU0Qoc2xlX2RtYSksIE1TRChzbGVfZG1hKSwgc2dfZG1hX2xlbihzZyksCisJCSAgICBzcC0+Y21kKTsKIAkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKExTRChzbGVfZG1hKSk7CiAJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihNU0Qoc2xlX2RtYSkpOwogCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwpAQCAtODYzLDggKzEwMTQsOCBAQAogCiAJCWlmIChzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpID09IFNDU0lfUFJPVF9XUklURV9QQVNTKSB7CiAJCQljcCA9IHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgKyBzZy0+b2Zmc2V0OwotCQkJREVCVUcxOChwcmludGsoIiVzKCk6IFVzZXIgRGF0YSBidWZmZXI9ICVwOlxuIiwKLQkJCSAgICBfX2Z1bmNfXyAsIGNwKSk7CisJCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAwYiwKKwkJCSAgICAiVXNlciBkYXRhIGJ1ZmZlcj0lcCBmb3IgY21kPSVwLlxuIiwgY3AsIHNwLT5jbWQpOwogCQl9CiAJfQogCS8qIE51bGwgdGVybWluYXRpb24gKi8KQEAgLTg4OCw3ICsxMDM5LDcgQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CiAJdWludDMyX3QgKmN1cl9kc2QgPSBkc2Q7CiAJdWludDE2X3QJdXNlZF9kc2RzID0gdG90X2RzZHM7Ci0KKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAJdWludDhfdAkJKmNwOwogCiAKQEAgLTkzNSwxMCArMTA4NiwxMSBAQAogCQl9CiAJCXNsZV9kbWEgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWlmIChzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpID09IFNDU0lfUFJPVF9XUklURV9QQVNTKSB7Ci0JCQlERUJVRzE4KHByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgIiVzKCk6ICVwLCBzZyBlbnRyeSAlZCAtIGFkZHIgPTB4JXgiCi0JCQkgICAgIjB4JXgsIGxlbiA9JWRcbiIsIF9fZnVuY19fICwgY3VyX2RzZCwgaSwKLQkJCSAgICBMU0Qoc2xlX2RtYSksIE1TRChzbGVfZG1hKSwgc2dfZG1hX2xlbihzZykpKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDI3LAorCQkJICAgICIlcygpOiAlcCwgc2dfZW50cnkgJWQgLSAiCisJCQkgICAgImFkZHI9MHgleDB4JXgsIGxlbj0lZC5cbiIsCisJCQkgICAgX19mdW5jX18sIGN1cl9kc2QsIGksCisJCQkgICAgTFNEKHNsZV9kbWEpLCBNU0Qoc2xlX2RtYSksIHNnX2RtYV9sZW4oc2cpKTsKIAkJfQogCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoTFNEKHNsZV9kbWEpKTsKIAkJKmN1cl9kc2QrKyA9IGNwdV90b19sZTMyKE1TRChzbGVfZG1hKSk7CkBAIC05NDYsOCArMTA5OCw5IEBACiAKIAkJaWYgKHNjc2lfZ2V0X3Byb3Rfb3Aoc3AtPmNtZCkgPT0gU0NTSV9QUk9UX1dSSVRFX1BBU1MpIHsKIAkJCWNwID0gcGFnZV9hZGRyZXNzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7Ci0JCQlERUJVRzE4KHByaW50aygiJXMoKTogUHJvdGVjdGlvbiBEYXRhIGJ1ZmZlciA9ICVwOlxuIiwKLQkJCSAgICBfX2Z1bmNfXyAsIGNwKSk7CisJCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyOCwKKwkJCSAgICAiJXMoKTogUHJvdGVjdGlvbiBEYXRhIGJ1ZmZlciA9ICVwLlxuIiwgX19mdW5jX18sCisJCQkgICAgY3ApOwogCQl9CiAJCWF2YWlsX2RzZHMtLTsKIAl9CkBAIC05NzUsNyArMTEyOCw3IEBACiAJc3RydWN0IHNjc2lfY21uZAkqY21kOwogCXN0cnVjdCBzY2F0dGVybGlzdAkqY3VyX3NlZzsKIAlpbnQJCQlzZ2M7Ci0JdWludDMyX3QJCXRvdGFsX2J5dGVzOworCXVpbnQzMl90CQl0b3RhbF9ieXRlcyA9IDA7CiAJdWludDMyX3QJCWRhdGFfYnl0ZXM7CiAJdWludDMyX3QJCWRpZl9ieXRlczsKIAl1aW50OF90CQkJYnVuZGxpbmcgPSAxOwpAQCAtOTk2LDIxICsxMTQ5LDE1IEBACiAJKigodWludDMyX3QgKikoJmNtZF9wa3QtPmVudHJ5X3R5cGUpKSA9CiAJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoQ09NTUFORF9UWVBFX0NSQ18yKTsKIAotCS8qIE5vIGRhdGEgdHJhbnNmZXIgKi8KLQlkYXRhX2J5dGVzID0gc2NzaV9idWZmbGVuKGNtZCk7Ci0JaWYgKCFkYXRhX2J5dGVzIHx8IGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX05PTkUpIHsKLQkJREVCVUcxOChwcmludGsoS0VSTl9JTkZPICIlczogWmVybyBkYXRhIGJ5dGVzIG9yIERNQS1OT05FICVkXG4iLAotCQkgICAgX19mdW5jX18sIGRhdGFfYnl0ZXMpKTsKLQkJY21kX3BrdC0+Ynl0ZV9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7Ci0JCXJldHVybiBRTEFfU1VDQ0VTUzsKLQl9Ci0KIAl2aGEgPSBzcC0+ZmNwb3J0LT52aGE7CiAJaGEgPSB2aGEtPmh3OwogCi0JREVCVUcxOChwcmludGsoS0VSTl9ERUJVRwotCSAgICAiJXMoJWxkKTogRXhlY3V0aW5nIGNtZCBzcCAlcCwgcHJvdF9vcD0ldS5cbiIsIF9fZnVuY19fLAotCSAgICB2aGEtPmhvc3Rfbm8sIHNwLCBzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpKSk7CisJLyogTm8gZGF0YSB0cmFuc2ZlciAqLworCWRhdGFfYnl0ZXMgPSBzY3NpX2J1ZmZsZW4oY21kKTsKKwlpZiAoIWRhdGFfYnl0ZXMgfHwgY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfTk9ORSkgeworCQljbWRfcGt0LT5ieXRlX2NvdW50ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigwKTsKKwkJcmV0dXJuIFFMQV9TVUNDRVNTOworCX0KIAogCWNtZF9wa3QtPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OwogCkBAIC0xMDIzLDggKzExNzAsMTAgQEAKIAkJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfUkVBRF9EQVRBKTsKIAl9CiAKLQl0b3RfcHJvdF9kc2RzID0gc2NzaV9wcm90X3NnX2NvdW50KGNtZCk7Ci0JaWYgKCF0b3RfcHJvdF9kc2RzKQorCWlmICgoc2NzaV9nZXRfcHJvdF9vcChzcC0+Y21kKSA9PSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQpIHx8CisJICAgIChzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpID09IFNDU0lfUFJPVF9XUklURV9TVFJJUCkgfHwKKwkgICAgKHNjc2lfZ2V0X3Byb3Rfb3Aoc3AtPmNtZCkgPT0gU0NTSV9QUk9UX1JFQURfU1RSSVApIHx8CisJICAgIChzY3NpX2dldF9wcm90X29wKHNwLT5jbWQpID09IFNDU0lfUFJPVF9XUklURV9JTlNFUlQpKQogCQlidW5kbGluZyA9IDA7CiAKIAkvKiBBbGxvY2F0ZSBDUkMgY29udGV4dCBmcm9tIGdsb2JhbCBwb29sICovCkBAIC0xMDQ3LDcgKzExOTYsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmNyY19jdHhfcGt0LT5kc2RfbGlzdCk7CiAKLQlxbGEyNHh4X3NldF90MTBkaWZfdGFncyhjbWQsIChzdHJ1Y3QgZndfZGlmX2NvbnRleHQgKikKKwlxbGEyNHh4X3NldF90MTBkaWZfdGFncyhzcCwgKHN0cnVjdCBmd19kaWZfY29udGV4dCAqKQogCSAgICAmY3JjX2N0eF9wa3QtPnJlZl90YWcsIHRvdF9wcm90X2RzZHMpOwogCiAJY21kX3BrdC0+Y3JjX2NvbnRleHRfYWRkcmVzc1swXSA9IGNwdV90b19sZTMyKExTRChjcmNfY3R4X2RtYSkpOwpAQCAtMTA1Niw4ICsxMjA1LDYgQEAKIAogCS8qIERldGVybWluZSBTQ1NJIGNvbW1hbmQgbGVuZ3RoIC0tIGFsaWduIHRvIDQgYnl0ZSBib3VuZGFyeSAqLwogCWlmIChjbWQtPmNtZF9sZW4gPiAxNikgewotCQlERUJVRzE4KHByaW50ayhLRVJOX0lORk8gIiVzKCk6ICoqKiogU0NTSSBDTUQgPiAxNlxuIiwKLQkJICAgIF9fZnVuY19fKSk7CiAJCWFkZGl0aW9uYWxfZmNwY2RiX2xlbiA9IGNtZC0+Y21kX2xlbiAtIDE2OwogCQlpZiAoKGNtZC0+Y21kX2xlbiAlIDQpICE9IDApIHsKIAkJCS8qIFNDU0kgY21kID4gMTYgYnl0ZXMgbXVzdCBiZSBtdWx0aXBsZSBvZiA0ICovCkBAIC0xMDc4LDcgKzEyMjUsNiBAQAogCQlmY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7CiAKIAlpbnRfdG9fc2NzaWx1bihzcC0+Y21kLT5kZXZpY2UtPmx1biwgJmZjcF9jbW5kLT5sdW4pOwotCWhvc3RfdG9fZmNwX3N3YXAoKHVpbnQ4X3QgKikmZmNwX2NtbmQtPmx1biwgc2l6ZW9mKGZjcF9jbW5kLT5sdW4pKTsKIAltZW1jcHkoZmNwX2NtbmQtPmNkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwogCWNtZF9wa3QtPmZjcF9jbW5kX2RzZWdfbGVuID0gY3B1X3RvX2xlMTYoZmNwX2NtbmRfbGVuKTsKIAljbWRfcGt0LT5mY3BfY21uZF9kc2VnX2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMigKQEAgLTExMDgsMjEgKzEyNTQsMjkgQEAKIAogCWNtZF9wa3QtPmZjcF9yc3BfZHNlZ19sZW4gPSAwOyAvKiBMZXQgcmVzcG9uc2UgY29tZSBpbiBzdGF0dXMgaW9jYiAqLwogCi0JREVCVUcxOChwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBUb3RhbCBTRyhzKSBFbnRyaWVzICVkLCBEYXRhIgotCSAgICAiZW50cmllcyAlZCwgZGF0YSBieXRlcyAlZCwgUHJvdGVjdGlvbiBlbnRyaWVzICVkXG4iLAotCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCB0b3RfZHNkcywgKHRvdF9kc2RzLXRvdF9wcm90X2RzZHMpLAotCSAgICBkYXRhX2J5dGVzLCB0b3RfcHJvdF9kc2RzKSk7Ci0KIAkvKiBDb21wdXRlIGRpZiBsZW4gYW5kIGFkanVzdCBkYXRhIGxlbiB0byBpbmN1ZGUgcHJvdGVjdGlvbiAqLwotCXRvdGFsX2J5dGVzID0gZGF0YV9ieXRlczsKIAlkaWZfYnl0ZXMgPSAwOwogCWJsa19zaXplID0gY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwotCWlmIChzY3NpX2dldF9wcm90X29wKGNtZCkgIT0gU0NTSV9QUk9UX05PUk1BTCkgewotCQlkaWZfYnl0ZXMgPSAoZGF0YV9ieXRlcyAvIGJsa19zaXplKSAqIDg7Ci0JCXRvdGFsX2J5dGVzICs9IGRpZl9ieXRlczsKKwlkaWZfYnl0ZXMgPSAoZGF0YV9ieXRlcyAvIGJsa19zaXplKSAqIDg7CisKKwlzd2l0Y2ggKHNjc2lfZ2V0X3Byb3Rfb3Aoc3AtPmNtZCkpIHsKKwljYXNlIFNDU0lfUFJPVF9SRUFEX0lOU0VSVDoKKwljYXNlIFNDU0lfUFJPVF9XUklURV9TVFJJUDoKKwkgICAgdG90YWxfYnl0ZXMgPSBkYXRhX2J5dGVzOworCSAgICBkYXRhX2J5dGVzICs9IGRpZl9ieXRlczsKKwkgICAgYnJlYWs7CisKKwljYXNlIFNDU0lfUFJPVF9SRUFEX1NUUklQOgorCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDoKKwljYXNlIFNDU0lfUFJPVF9SRUFEX1BBU1M6CisJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKKwkgICAgdG90YWxfYnl0ZXMgPSBkYXRhX2J5dGVzICsgZGlmX2J5dGVzOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBCVUcoKTsKIAl9CiAKLQlpZiAoIXFsMnhlbmFibGVoYmFfZXJyX2NoaykKKwlpZiAoIXFsYTJ4MDBfaGJhX2Vycl9jaGtfZW5hYmxlZChzcCkpCiAJCWZ3X3Byb3Rfb3B0cyB8PSAweDEwOyAvKiBEaXNhYmxlIEd1YXJkIHRhZyBjaGVja2luZyAqLwogCiAJaWYgKCFidW5kbGluZykgewpAQCAtMTE1MCwxNCArMTMwNCw3IEBACiAJICAgIGFkZGl0aW9uYWxfZmNwY2RiX2xlbik7CiAJKmZjcF9kbCA9IGh0b25sKHRvdGFsX2J5dGVzKTsKIAotCURFQlVHMTgocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZGlmIGJ5dGVzID0gMHgleCAoJWQpLCB0b3RhbCBieXRlcyIKLQkgICAgIiA9IDB4JXggKCVkKSwgZGF0IGJsb2NrIHNpemUgPTB4JXggKCVkKVxuIiwgX19mdW5jX18sCi0JICAgIHZoYS0+aG9zdF9ubywgZGlmX2J5dGVzLCBkaWZfYnl0ZXMsIHRvdGFsX2J5dGVzLCB0b3RhbF9ieXRlcywKLQkgICAgY3JjX2N0eF9wa3QtPmJsa19zaXplLCBjcmNfY3R4X3BrdC0+YmxrX3NpemUpKTsKLQogCWlmICghZGF0YV9ieXRlcyB8fCBjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9OT05FKSB7Ci0JCURFQlVHMTgocHJpbnRrKEtFUk5fSU5GTyAiJXM6IFplcm8gZGF0YSBieXRlcyBvciBETUEtTk9ORSAlZFxuIiwKLQkJICAgIF9fZnVuY19fLCBkYXRhX2J5dGVzKSk7CiAJCWNtZF9wa3QtPmJ5dGVfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOwogCQlyZXR1cm4gUUxBX1NVQ0NFU1M7CiAJfQpAQCAtMTE2NSw3ICsxMzEyLDEyIEBACiAKIAljbWRfcGt0LT5jb250cm9sX2ZsYWdzIHw9CiAJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoQ0ZfREFUQV9TRUdfREVTQ1JfRU5BQkxFKTsKLQlpZiAocWxhMjR4eF93YWxrX2FuZF9idWlsZF9zZ2xpc3QoaGEsIHNwLCBjdXJfZHNkLAorCisJaWYgKCFidW5kbGluZyAmJiB0b3RfcHJvdF9kc2RzKSB7CisJCWlmIChxbGEyNHh4X3dhbGtfYW5kX2J1aWxkX3NnbGlzdF9ub19kaWZiKGhhLCBzcCwKKwkJICAgIGN1cl9kc2QsIHRvdF9kc2RzKSkKKwkJCWdvdG8gY3JjX3F1ZXVpbmdfZXJyb3I7CisJfSBlbHNlIGlmIChxbGEyNHh4X3dhbGtfYW5kX2J1aWxkX3NnbGlzdChoYSwgc3AsIGN1cl9kc2QsCiAJICAgICh0b3RfZHNkcyAtIHRvdF9wcm90X2RzZHMpKSkKIAkJZ290byBjcmNfcXVldWluZ19lcnJvcjsKIApAQCAtMTE4Miw4ICsxMzM0LDYgQEAKIAlyZXR1cm4gUUxBX1NVQ0NFU1M7CiAKIGNyY19xdWV1aW5nX2Vycm9yOgotCURFQlVHMTgocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiQ01EIHNlbnQgRkFJTEVEIGNyY19xIGVycm9yOnNwID0gJXBcbiIsIHNwKSk7CiAJLyogQ2xlYW51cCB3aWxsIGJlIHBlcmZvcm1lZCBieSB0aGUgY2FsbGVyICovCiAKIAlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKQEAgLTEyMjUsOCArMTM3NSw4IEBACiAKIAkvKiBTZW5kIG1hcmtlciBpZiByZXF1aXJlZCAqLwogCWlmICh2aGEtPm1hcmtlcl9uZWVkZWQgIT0gMCkgewotCQlpZiAocWxhMngwMF9tYXJrZXIodmhhLCByZXEsIHJzcCwgMCwgMCwgTUtfU1lOQ19BTEwpCi0JCQkJCQkJIT0gUUxBX1NVQ0NFU1MpCisJCWlmIChxbGEyeDAwX21hcmtlcih2aGEsIHJlcSwgcnNwLCAwLCAwLCBNS19TWU5DX0FMTCkgIT0KKwkJICAgIFFMQV9TVUNDRVNTKQogCQkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCXZoYS0+bWFya2VyX25lZWRlZCA9IDA7CiAJfQpAQCAtMTI0Myw4ICsxMzkzLDkgQEAKIAkJaWYgKCFyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoaW5kZXggPT0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKQorCWlmIChpbmRleCA9PSBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpIHsKIAkJZ290byBxdWV1aW5nX2Vycm9yOworCX0KIAogCS8qIE1hcCB0aGUgc2cgdGFibGUgc28gd2UgaGF2ZSBhbiBhY2N1cmF0ZSBjb3VudCBvZiBzZyBlbnRyaWVzIG5lZWRlZCAqLwogCWlmIChzY3NpX3NnX2NvdW50KGNtZCkpIHsKQEAgLTEyNTYsOCArMTQwNyw3IEBACiAJCW5zZWcgPSAwOwogCiAJdG90X2RzZHMgPSBuc2VnOwotCi0JcmVxX2NudCA9IHFsYTI0eHhfY2FsY19pb2Nicyh0b3RfZHNkcyk7CisJcmVxX2NudCA9IHFsYTI0eHhfY2FsY19pb2Nicyh2aGEsIHRvdF9kc2RzKTsKIAlpZiAocmVxLT5jbnQgPCAocmVxX2NudCArIDIpKSB7CiAJCWNudCA9IFJEX1JFR19EV09SRF9SRUxBWEVEKHJlcS0+cmVxX3Ffb3V0KTsKIApAQCAtMTMyMiw3ICsxNDcyLDYgQEAKIAkvKiBTcGVjaWZ5IHJlc3BvbnNlIHF1ZXVlIG51bWJlciB3aGVyZSBjb21wbGV0aW9uIHNob3VsZCBoYXBwZW4gKi8KIAljbWRfcGt0LT5lbnRyeV9zdGF0dXMgPSAodWludDhfdCkgcnNwLT5pZDsKIAl3bWIoKTsKLQogCS8qIEFkanVzdCByaW5nIGluZGV4LiAqLwogCXJlcS0+cmluZ19pbmRleCsrOwogCWlmIChyZXEtPnJpbmdfaW5kZXggPT0gcmVxLT5sZW5ndGgpIHsKQEAgLTE0MzEsNiArMTU4MCwyMiBAQAogCQkJZ290byBxdWV1aW5nX2Vycm9yOwogCQllbHNlCiAJCQlzcC0+ZmxhZ3MgfD0gU1JCX0RNQV9WQUxJRDsKKworCQlpZiAoKHNjc2lfZ2V0X3Byb3Rfb3AoY21kKSA9PSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQpIHx8CisJCSAgICAoc2NzaV9nZXRfcHJvdF9vcChjbWQpID09IFNDU0lfUFJPVF9XUklURV9TVFJJUCkpIHsKKwkJCXN0cnVjdCBxbGEyX3NneCBzZ3g7CisJCQl1aW50MzJfdAlwYXJ0aWFsOworCisJCQltZW1zZXQoJnNneCwgMCwgc2l6ZW9mKHN0cnVjdCBxbGEyX3NneCkpOworCQkJc2d4LnRvdF9ieXRlcyA9IHNjc2lfYnVmZmxlbihjbWQpOworCQkJc2d4LmN1cl9zZyA9IHNjc2lfc2dsaXN0KGNtZCk7CisJCQlzZ3guc3AgPSBzcDsKKworCQkJbnNlZyA9IDA7CisJCQl3aGlsZSAocWxhMjR4eF9nZXRfb25lX2Jsb2NrX3NnKAorCQkJICAgIGNtZC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZSwgJnNneCwgJnBhcnRpYWwpKQorCQkJCW5zZWcrKzsKKwkJfQogCX0gZWxzZQogCQluc2VnID0gMDsKIApAQCAtMTQ0NSw2ICsxNjEwLDExIEBACiAJCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CiAJCWVsc2UKIAkJCXNwLT5mbGFncyB8PSBTUkJfQ1JDX1BST1RfRE1BX1ZBTElEOworCisJCWlmICgoc2NzaV9nZXRfcHJvdF9vcChjbWQpID09IFNDU0lfUFJPVF9SRUFEX0lOU0VSVCkgfHwKKwkJICAgIChzY3NpX2dldF9wcm90X29wKGNtZCkgPT0gU0NTSV9QUk9UX1dSSVRFX1NUUklQKSkgeworCQkJbnNlZyA9IHNjc2lfYnVmZmxlbihjbWQpIC8gY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplOworCQl9CiAJfSBlbHNlIHsKIAkJbnNlZyA9IDA7CiAJfQpAQCAtMTQ3MSw2ICsxNjQxLDcgQEAKIAkvKiBCdWlsZCBoZWFkZXIgcGFydCBvZiBjb21tYW5kIHBhY2tldCAoZXhjbHVkaW5nIHRoZSBPUENPREUpLiAqLwogCXJlcS0+Y3VycmVudF9vdXRzdGFuZGluZ19jbWQgPSBoYW5kbGU7CiAJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRsZV0gPSBzcDsKKwlzcC0+aGFuZGxlID0gaGFuZGxlOwogCXNwLT5jbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSh1bnNpZ25lZCBsb25nKWhhbmRsZTsKIAlyZXEtPmNudCAtPSByZXFfY250OwogCkBAIC0xNTM0LDkgKzE3MDUsNiBAQAogCS8qIENsZWFudXAgd2lsbCBiZSBwZXJmb3JtZWQgYnkgdGhlIGNhbGxlciAocXVldWVjb21tYW5kKSAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQotCURFQlVHMTgocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiQ01EIHNlbnQgRkFJTEVEIFNDU0kgcHJvdF9vcDolMDJ4XG4iLCBzY3NpX2dldF9wcm90X29wKGNtZCkpKTsKIAlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIH0KIApAQCAtMTU4MSw4ICsxNzQ5LDExIEBACiAJCWlmICghcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRsZV0pCiAJCQlicmVhazsKIAl9Ci0JaWYgKGluZGV4ID09IE1BWF9PVVRTVEFORElOR19DT01NQU5EUykKKwlpZiAoaW5kZXggPT0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMGIsCisJCSAgICAiTm8gcm9vbSBvbiBvdXN0YW5kaW5nIGNtZCBhcnJheS5cbiIpOwogCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CisJfQogCiAJLyogUHJlcCBjb21tYW5kIGFycmF5LiAqLwogCXJlcS0+Y3VycmVudF9vdXRzdGFuZGluZ19jbWQgPSBoYW5kbGU7CkBAIC0xOTk5LDggKzIxNzAsMTEgQEAKIAlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAlwa3QgPSBxbGEyeDAwX2FsbG9jX2lvY2JzKHNwLT5mY3BvcnQtPnZoYSwgc3ApOwotCWlmICghcGt0KQorCWlmICghcGt0KSB7CisJCXFsX2xvZyhxbF9sb2dfd2Fybiwgc3AtPmZjcG9ydC0+dmhhLCAweDcwMGMsCisJCSAgICAicWxhMngwMF9hbGxvY19pb2NicyBmYWlsZWQuXG4iKTsKIAkJZ290byBkb25lOworCX0KIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAlzd2l0Y2ggKGN0eC0+dHlwZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGFlOGUyOTguLjY0NmZjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlyc3AgPSAoc3RydWN0IHJzcF9xdWUgKikgZGV2X2lkOwogCWlmICghcnNwKSB7CiAJCXByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJICAgICIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXIuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAoSVJRX05PTkUpOwogCX0KIApAQCAtOTEsOSArOTEsOSBAQAogCQkJCXFsYTJ4MDBfYXN5bmNfZXZlbnQodmhhLCByc3AsIG1iKTsKIAkJCX0gZWxzZSB7CiAJCQkJLypFTVBUWSovCi0JCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbnJlY29nbml6ZWQgIgotCQkJCSAgICAiaW50ZXJydXB0IHR5cGUgKCVkKS5cbiIsCi0JCQkJICAgIHZoYS0+aG9zdF9ubywgbWJbMF0pKTsKKwkJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAyNSwKKwkJCQkgICAgIlVucmVjb2duaXplZCBpbnRlcnJ1cHQgdHlwZSAoJWQpLlxuIiwKKwkJCQkgICAgbWJbMF0pOwogCQkJfQogCQkJLyogUmVsZWFzZSBtYWlsYm94IHJlZ2lzdGVycy4gKi8KIAkJCVdSVF9SRUdfV09SRCgmcmVnLT5zZW1hcGhvcmUsIDApOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCSAgICAiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gKElSUV9OT05FKTsKIAl9CiAKQEAgLTE2MCwxMSArMTYwLDEzIEBACiAKIAkJCWhjY3IgPSBSRF9SRUdfV09SRCgmcmVnLT5oY2NyKTsKIAkJCWlmIChoY2NyICYgKEJJVF8xNSB8IEJJVF8xMyB8IEJJVF8xMSB8IEJJVF84KSkKLQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJQYXJpdHkgZXJyb3IgLS0gIgotCQkJCSAgICAiSENDUj0leCwgRHVtcGluZyBmaXJtd2FyZSFcbiIsIGhjY3IpOworCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwMjYsCisJCQkJICAgICJQYXJpdHkgZXJyb3IgLS0gSENDUj0leCwgRHVtcGluZyAiCisJCQkJICAgICJmaXJtd2FyZS5cbiIsIGhjY3IpOwogCQkJZWxzZQotCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlJJU0MgcGF1c2VkIC0tICIKLQkJCQkgICAgIkhDQ1I9JXgsIER1bXBpbmcgZmlybXdhcmUhXG4iLCBoY2NyKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDI3LAorCQkJCSAgICAiUklTQyBwYXVzZWQgLS0gSENDUj0leCwgRHVtcGluZyAiCisJCQkJICAgICJmaXJtd2FyZS5cbiIsIGhjY3IpOwogCiAJCQkvKgogCQkJICogSXNzdWUgYSAiSEFSRCIgcmVzZXQgaW4gb3JkZXIgZm9yIHRoZSBSSVNDCkBAIC0yMTMsOSArMjE1LDggQEAKIAkJCXFsYTJ4MDBfYXN5bmNfZXZlbnQodmhhLCByc3AsIG1iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgIgotCQkJICAgICIoJWQpLlxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIHN0YXQgJiAweGZmKSk7CisJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAyOCwKKwkJCSAgICAiVW5yZWNvZ25pemVkIGludGVycnVwdCB0eXBlICglZCkuXG4iLCBzdGF0ICYgMHhmZik7CiAJCQlicmVhazsKIAkJfQogCQlXUlRfUkVHX1dPUkQoJnJlZy0+aGNjciwgSENDUl9DTFJfUklTQ19JTlQpOwpAQCAtMjYyLDExICsyNjMsMTEgQEAKIAl9CiAKIAlpZiAoaGEtPm1jcCkgewotCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBHb3QgbWFpbGJveCBjb21wbGV0aW9uLiBjbWQ9JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgaGEtPm1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMDAsCisJCSAgICAiR290IG1ieCBjb21wbGV0aW9uLiBjbWQ9JXguXG4iLCBoYS0+bWNwLT5tYlswXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBNQlggcG9pbnRlciBFUlJPUiFcbiIsCi0JCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDAxLAorCQkgICAgIk1CWCBwb2ludGVyIEVSUk9SLlxuIik7CiAJfQogfQogCkBAIC0yODUsMjIgKzI4NiwyNCBAQAogCWZvciAoY250ID0gMDsgY250IDwgUUxBX0lEQ19BQ0tfUkVHUzsgY250KyssIHdwdHIrKykKIAkJbWJbY250XSA9IFJEX1JFR19XT1JEKHdwdHIpOwogCi0JREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gJXMgLS0gIgotCSAgICAiJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHggJTA0eC5cbiIsIHZoYS0+aG9zdF9ubywKLQkgICAgZXZlbnRbYWVuICYgMHhmZl0sCi0JICAgIG1iWzBdLCBtYlsxXSwgbWJbMl0sIG1iWzNdLCBtYls0XSwgbWJbNV0sIG1iWzZdKSk7CisJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMjEsCisJICAgICJJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gJXMgLS0gIgorCSAgICAiJTA0eCAlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHggJTA0eC5cbiIsCisJICAgIGV2ZW50W2FlbiAmIDB4ZmZdLCBtYlswXSwgbWJbMV0sIG1iWzJdLCBtYlszXSwKKwkgICAgbWJbNF0sIG1iWzVdLCBtYls2XSk7CiAKIAkvKiBBY2tub3dsZWRnZW1lbnQgbmVlZGVkPyBbTm90aWZ5ICYmIG5vbi16ZXJvIHRpbWVvdXRdLiAqLwogCXRpbWVvdXQgPSAoZGVzY3IgPj4gOCkgJiAweGY7CiAJaWYgKGFlbiAhPSBNQkFfSURDX05PVElGWSB8fCAhdGltZW91dCkKIAkJcmV0dXJuOwogCi0JREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gJXMgLS0gIgotCSAgICAiQUNLIHRpbWVvdXQ9JWQuXG4iLCB2aGEtPmhvc3Rfbm8sIGV2ZW50W2FlbiAmIDB4ZmZdLCB0aW1lb3V0KSk7CisJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMjIsCisJICAgICJJbnRlci1Ecml2ZXIgQ29tbXVjYXRpb24gJXMgLS0gQUNLIHRpbWVvdXQ9JWQuXG4iLAorCSAgICB2aGEtPmhvc3Rfbm8sIGV2ZW50W2FlbiAmIDB4ZmZdLCB0aW1lb3V0KTsKIAogCXJ2YWwgPSBxbGEyeDAwX3Bvc3RfaWRjX2Fja193b3JrKHZoYSwgbWIpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgdmhhLT5odywKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAyMywKIAkJICAgICJJREMgZmFpbGVkIHRvIHBvc3QgQUNLLlxuIik7CiB9CiAKQEAgLTM5MywxNSArMzk2LDE1IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfUkVTRVQ6CQkJLyogUmVzZXQgKi8KLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgUkVTRVQuXG4iLAotCQkJdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDAyLAorCQkgICAgIkFzeW5jaHJvbm91cyBSRVNFVC5cbiIpOwogCiAJCXNldF9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9TWVNURU1fRVJSOgkJLyogU3lzdGVtIEVycm9yICovCiAJCW1ieCA9IElTX1FMQTgxWFgoaGEpID8gUkRfUkVHX1dPUkQoJnJlZzI0LT5tYWlsYm94NykgOiAwOwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwMDMsCiAJCSAgICAiSVNQIFN5c3RlbSBFcnJvciAtIG1ieDE9JXhoIG1ieDI9JXhoIG1ieDM9JXhoICIKIAkJICAgICJtYng3PSV4aC5cbiIsIG1iWzFdLCBtYlsyXSwgbWJbM10sIG1ieCk7CiAKQEAgLTQwOSw3ICs0MTIsNyBAQAogCiAJCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7CiAJCQlpZiAobWJbMV0gPT0gMCAmJiBtYlsyXSA9PSAwKSB7Ci0JCQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDUwMDQsCiAJCQkJICAgICJVbnJlY292ZXJhYmxlIEhhcmR3YXJlIEVycm9yOiBhZGFwdGVyICIKIAkJCQkgICAgIm1hcmtlZCBPRkZMSU5FIVxuIik7CiAJCQkJdmhhLT5mbGFncy5vbmxpbmUgPSAwOwpAQCAtNDIyLDcgKzQyNSw3IEBACiAJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJfQogCQl9IGVsc2UgaWYgKG1iWzFdID09IDApIHsKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHg1MDA1LAogCQkJICAgICJVbnJlY292ZXJhYmxlIEhhcmR3YXJlIEVycm9yOiBhZGFwdGVyIG1hcmtlZCAiCiAJCQkgICAgIk9GRkxJTkUhXG4iKTsKIAkJCXZoYS0+ZmxhZ3Mub25saW5lID0gMDsKQEAgLTQzMSwzMSArNDM0LDI3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfUkVRX1RSQU5TRkVSX0VSUjoJLyogUmVxdWVzdCBUcmFuc2ZlciBFcnJvciAqLwotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IElTUCBSZXF1ZXN0IFRyYW5zZmVyIEVycm9yICgleCkuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBtYlsxXSkpOwotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiSVNQIFJlcXVlc3QgVHJhbnNmZXIgRXJyb3IgKCV4KS5cbiIsIG1iWzFdKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAwNiwKKwkJICAgICJJU1AgUmVxdWVzdCBUcmFuc2ZlciBFcnJvciAoJXgpLlxuIiwgIG1iWzFdKTsKIAogCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfUlNQX1RSQU5TRkVSX0VSUjoJLyogUmVzcG9uc2UgVHJhbnNmZXIgRXJyb3IgKi8KLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBJU1AgUmVzcG9uc2UgVHJhbnNmZXIgRXJyb3IuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIklTUCBSZXNwb25zZSBUcmFuc2ZlciBFcnJvci5cbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDA3LAorCQkgICAgIklTUCBSZXNwb25zZSBUcmFuc2ZlciBFcnJvci5cbiIpOwogCiAJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9XQUtFVVBfVEhSRVM6CQkvKiBSZXF1ZXN0IFF1ZXVlIFdha2UtdXAgKi8KLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgV0FLRVVQX1RIUkVTLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAwOCwKKwkJICAgICJBc3luY2hyb25vdXMgV0FLRVVQX1RIUkVTLlxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfTElQX09DQ1VSUkVEOgkJLyogTG9vcCBJbml0aWFsaXphdGlvbiBQcm9jZWR1cmUgKi8KLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBMSVAgb2NjdXJyZWQgKCV4KS5cbiIsIHZoYS0+aG9zdF9ubywKLQkJICAgIG1iWzFdKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkxJUCBvY2N1cnJlZCAoJXgpLlxuIiwgbWJbMV0pOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg1MDA5LAorCQkgICAgIkxJUCBvY2N1cnJlZCAoJXgpLlxuIiwgbWJbMV0pOwogCiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKQEAgLTQ4OCwxMCArNDg3LDggQEAKIAkJCWhhLT5saW5rX2RhdGFfcmF0ZSA9IG1iWzFdOwogCQl9CiAKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgTE9PUCBVUCAoJXMgR2JwcykuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBsaW5rX3NwZWVkKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkxPT1AgVVAgZGV0ZWN0ZWQgKCVzIEdicHMpLlxuIiwKLQkJICAgIGxpbmtfc3BlZWQpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg1MDBhLAorCQkgICAgIkxPT1AgVVAgZGV0ZWN0ZWQgKCVzIEdicHMpLlxuIiwgbGlua19zcGVlZCk7CiAKIAkJdmhhLT5mbGFncy5tYW5hZ2VtZW50X3NlcnZlcl9sb2dnZWRfaW4gPSAwOwogCQlxbGEyeDAwX3Bvc3RfYWVuX3dvcmsodmhhLCBGQ0hfRVZUX0xJTktVUCwgaGEtPmxpbmtfZGF0YV9yYXRlKTsKQEAgLTUwMCwxMiArNDk3LDkgQEAKIAljYXNlIE1CQV9MT09QX0RPV046CQkvKiBMb29wIERvd24gRXZlbnQgKi8KIAkJbWJ4ID0gSVNfUUxBODFYWChoYSkgPyBSRF9SRUdfV09SRCgmcmVnMjQtPm1haWxib3g0KSA6IDA7CiAJCW1ieCA9IElTX1FMQTgyWFgoaGEpID8gUkRfUkVHX1dPUkQoJnJlZzgyLT5tYWlsYm94X291dFs0XSkgOiBtYng7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQXN5bmNocm9ub3VzIExPT1AgRE9XTiAiCi0JCSAgICAiKCV4ICV4ICV4ICV4KS5cbiIsIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSwKLQkJICAgIG1ieCkpOwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSAgICAiTE9PUCBET1dOIGRldGVjdGVkICgleCAleCAleCAleCkuXG4iLCBtYlsxXSwgbWJbMl0sIG1iWzNdLAotCQkgICAgbWJ4KTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NTAwYiwKKwkJICAgICJMT09QIERPV04gZGV0ZWN0ZWQgKCV4ICV4ICV4ICV4KS5cbiIsCisJCSAgICBtYlsxXSwgbWJbMl0sIG1iWzNdLCBtYngpOwogCiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKQEAgLTUyNSw5ICs1MTksNyBAQAogCQlicmVhazsKIAogCWNhc2UgTUJBX0xJUF9SRVNFVDoJCS8qIExJUCByZXNldCBvY2N1cnJlZCAqLwotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBMSVAgUkVTRVQgKCV4KS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIG1iWzFdKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NTAwYywKIAkJICAgICJMSVAgcmVzZXQgb2NjdXJyZWQgKCV4KS5cbiIsIG1iWzFdKTsKIAogCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9zdGF0ZSkgIT0gTE9PUF9ET1dOKSB7CkBAIC01NTQsMTQgKzU0NiwxNSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKElTX1FMQThYWFhfVFlQRShoYSkpIHsKLQkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogRENCWCBDb21wbGV0ZWQgLS0gJTA0eCAlMDR4ICIKLQkJCSAgICAiJTA0eFxuIiwgdmhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7CisJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAwZCwKKwkJCSAgICAiRENCWCBDb21wbGV0ZWQgLS0gJTA0eCAlMDR4ICUwNHguXG4iLAorCQkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCQkJaWYgKGhhLT5ub3RpZnlfZGNieF9jb21wKQogCQkJCWNvbXBsZXRlKCZoYS0+ZGNieF9jb21wKTsKIAogCQl9IGVsc2UKLQkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQXN5bmNocm9ub3VzIFAyUCBNT0RFICIKLQkJCSAgICAicmVjZWl2ZWQuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDBlLAorCQkJICAgICJBc3luY2hyb25vdXMgUDJQIE1PREUgcmVjZWl2ZWQuXG4iKTsKIAogCQkvKgogCQkgKiBVbnRpbCB0aGVyZSdzIGEgdHJhbnNpdGlvbiBmcm9tIGxvb3AgZG93biB0byBsb29wIHVwLCB0cmVhdApAQCAtNTk0LDEwICs1ODcsNyBAQAogCQlpZiAoSVNfUUxBMjEwMChoYSkpCiAJCQlicmVhazsKIAotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBDaGFuZ2UgSW4gQ29ubmVjdGlvbiAiCi0JCSAgICAicmVjZWl2ZWQuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NTAwZiwKIAkJICAgICJDb25maWd1cmF0aW9uIGNoYW5nZSBkZXRlY3RlZDogdmFsdWU9JXguXG4iLCBtYlsxXSk7CiAKIAkJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3Bfc3RhdGUpICE9IExPT1BfRE9XTikgewpAQCAtNjQwLDExICs2MzAsOSBAQAogCiAJCS8qIEdsb2JhbCBldmVudCAtLSBwb3J0IGxvZ291dCBvciBwb3J0IHVuYXZhaWxhYmxlLiAqLwogCQlpZiAobWJbMV0gPT0gMHhmZmZmICYmIG1iWzJdID09IDB4NykgewotCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgUE9SVCBVUERBVEUuXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubykpOwotCQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICJzY3NpKCVsZCk6IFBvcnQgdW5hdmFpbGFibGUgJTA0eCAlMDR4ICUwNHguXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSkpOworCQkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMTAsCisJCQkgICAgIlBvcnQgdW5hdmFpbGFibGUgJTA0eCAlMDR4ICUwNHguXG4iLAorCQkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCiAJCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9zdGF0ZSkgIT0gTE9PUF9ET1dOKSB7CiAJCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX3N0YXRlLCBMT09QX0RPV04pOwpAQCAtNjc0LDE3ICs2NjIsMTUgQEAKIAkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsIDApOwogCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9zdGF0ZSkgIT0gTE9PUF9ET1dOICYmCiAJCSAgICBhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RFQUQpIHsKLQkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQXN5bmNocm9ub3VzIFBPUlQgVVBEQVRFICIKLQkJCSAgICAiaWdub3JlZCAlMDR4LyUwNHgvJTA0eC5cbiIsIHZoYS0+aG9zdF9ubywgbWJbMV0sCi0JCQkgICAgbWJbMl0sIG1iWzNdKSk7CisJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAxMSwKKwkJCSAgICAiQXN5bmNocm9ub3VzIFBPUlQgVVBEQVRFIGlnbm9yZWQgJTA0eC8lMDR4LyUwNHguXG4iLAorCQkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCQkJYnJlYWs7CiAJCX0KIAotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBQT1JUIFVQREFURS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKLQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgInNjc2koJWxkKTogUG9ydCBkYXRhYmFzZSBjaGFuZ2VkICUwNHggJTA0eCAlMDR4LlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSkpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAxMiwKKwkJICAgICJQb3J0IGRhdGFiYXNlIGNoYW5nZWQgJTA0eCAlMDR4ICUwNHguXG4iLAorCQkgICAgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAKIAkJLyoKIAkJICogTWFyayBhbGwgZGV2aWNlcyBhcyBtaXNzaW5nIHNvIHdlIHdpbGwgbG9naW4gYWdhaW4uCkBAIC03MDcsMjAgKzY5MywxNyBAQAogCQlpZiAoaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkICYmIHZoYS0+dnBfaWR4ICE9IChtYlszXSAmIDB4ZmYpKQogCQkJYnJlYWs7CiAKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgUlNDUiBVUERBVEUuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCURFQlVHKHByaW50ayhLRVJOX0lORk8KLQkJICAgICJzY3NpKCVsZCk6IFJTQ04gZGF0YWJhc2UgY2hhbmdlZCAtLSAlMDR4ICUwNHggJTA0eC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSwgbWJbM10pKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMTMsCisJCSAgICAiUlNDTiBkYXRhYmFzZSBjaGFuZ2VkIC0tICUwNHggJTA0eCAlMDR4LlxuIiwKKwkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCiAJCXJzY25fZW50cnkgPSAoKG1iWzFdICYgMHhmZikgPDwgMTYpIHwgbWJbMl07CiAJCWhvc3RfcGlkID0gKHZoYS0+ZF9pZC5iLmRvbWFpbiA8PCAxNikgfCAodmhhLT5kX2lkLmIuYXJlYSA8PCA4KQogCQkJCXwgdmhhLT5kX2lkLmIuYWxfcGE7CiAJCWlmIChyc2NuX2VudHJ5ID09IGhvc3RfcGlkKSB7Ci0JCQlERUJVRyhwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgInNjc2koJWxkKTogSWdub3JpbmcgUlNDTiB1cGRhdGUgdG8gbG9jYWwgaG9zdCAiCi0JCQkgICAgInBvcnQgSUQgKCUwNngpXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgaG9zdF9waWQpKTsKKwkJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDE0LAorCQkJICAgICJJZ25vcmluZyBSU0NOIHVwZGF0ZSB0byBsb2NhbCBob3N0ICIKKwkJCSAgICAicG9ydCBJRCAoJTA2eCkuXG4iLCBob3N0X3BpZCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC03MzYsNyArNzE5LDYgQEAKIAkJCXZoYS0+ZmxhZ3MucnNjbl9xdWV1ZV9vdmVyZmxvdyA9IDE7CiAJCX0KIAotCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfVVBEQVRFKTsKIAkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsIDApOwogCQl2aGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7CiAKQEAgLTc0Nyw4ICs3MjksOCBAQAogCiAJLyogY2FzZSBNQkFfUklPX1JFU1BPTlNFOiAqLwogCWNhc2UgTUJBX1pJT19SRVNQT05TRToKLQkJREVCVUczKHByaW50aygic2NzaSglbGQpOiBbUnxaXUlPIHVwZGF0ZSBjb21wbGV0aW9uLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAxNSwKKwkJICAgICJbUnxaXUlPIHVwZGF0ZSBjb21wbGV0aW9uLlxuIik7CiAKIAkJaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpCiAJCQlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwpAQCAtNzU3LDYxICs3MzksNjggQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9ESVNDQVJEX1JORF9GUkFNRToKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBEaXNjYXJkIFJORCBGcmFtZSAtLSAlMDR4ICUwNHggIgotCQkgICAgIiUwNHguXG4iLCB2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSwgbWJbM10pKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMTYsCisJCSAgICAiRGlzY2FyZCBSTkQgRnJhbWUgLS0gJTA0eCAlMDR4ICUwNHguXG4iLAorCQkgICAgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfVFJBQ0VfTk9USUZJQ0FUSU9OOgotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFRyYWNlIE5vdGlmaWNhdGlvbiAtLSAlMDR4ICUwNHguXG4iLAotCQl2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSkpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAxNywKKwkJICAgICJUcmFjZSBOb3RpZmljYXRpb24gLS0gJTA0eCAlMDR4LlxuIiwgbWJbMV0sIG1iWzJdKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1CQV9JU1A4NFhYX0FMRVJUOgotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IElTUDg0WFggQWxlcnQgTm90aWZpY2F0aW9uIC0tICIKLQkJICAgICIlMDR4ICUwNHggJTA0eFxuIiwgdmhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDE4LAorCQkgICAgIklTUDg0WFggQWxlcnQgTm90aWZpY2F0aW9uIC0tICUwNHggJTA0eCAlMDR4LlxuIiwKKwkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+Y3M4NHh4LT5hY2Nlc3NfbG9jaywgZmxhZ3MpOwogCQlzd2l0Y2ggKG1iWzFdKSB7CiAJCWNhc2UgQTg0X1BBTklDX1JFQ09WRVJZOgotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxlcnQgODRYWDogcGFuaWMgcmVjb3ZlcnkgIgotCQkJICAgICIlMDR4ICUwNHhcbiIsIG1iWzJdLCBtYlszXSk7CisJCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg1MDE5LAorCQkJICAgICJBbGVydCA4NFhYOiBwYW5pYyByZWNvdmVyeSAlMDR4ICUwNHguXG4iLAorCQkJICAgIG1iWzJdLCBtYlszXSk7CiAJCQlicmVhazsKIAkJY2FzZSBBODRfT1BfTE9HSU5fQ09NUExFVEU6CiAJCQloYS0+Y3M4NHh4LT5vcF9md192ZXJzaW9uID0gbWJbM10gPDwgMTYgfCBtYlsyXTsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJBbGVydCA4NFhYOiIKLQkJCSAgICAiZmlybXdhcmUgdmVyc2lvbiAleFxuIiwgaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbikpOworCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NTAxYSwKKwkJCSAgICAiQWxlcnQgODRYWDogZmlybXdhcmUgdmVyc2lvbiAleC5cbiIsCisJCQkgICAgaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbik7CiAJCQlicmVhazsKIAkJY2FzZSBBODRfRElBR19MT0dJTl9DT01QTEVURToKIAkJCWhhLT5jczg0eHgtPmRpYWdfZndfdmVyc2lvbiA9IG1iWzNdIDw8IDE2IHwgbWJbMl07Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxlcnQgODRYWDoiCi0JCQkgICAgImRpYWdub3N0aWMgZmlybXdhcmUgdmVyc2lvbiAleFxuIiwKLQkJCSAgICBoYS0+Y3M4NHh4LT5kaWFnX2Z3X3ZlcnNpb24pKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDUwMWIsCisJCQkgICAgIkFsZXJ0IDg0WFg6IGRpYWdub3N0aWMgZmlybXdhcmUgdmVyc2lvbiAleC5cbiIsCisJCQkgICAgaGEtPmNzODR4eC0+ZGlhZ19md192ZXJzaW9uKTsKIAkJCWJyZWFrOwogCQljYXNlIEE4NF9HT0xEX0xPR0lOX0NPTVBMRVRFOgogCQkJaGEtPmNzODR4eC0+ZGlhZ19md192ZXJzaW9uID0gbWJbM10gPDwgMTYgfCBtYlsyXTsKIAkJCWhhLT5jczg0eHgtPmZ3X3VwZGF0ZSA9IDE7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiQWxlcnQgODRYWDogZ29sZCAiCi0JCQkgICAgImZpcm13YXJlIHZlcnNpb24gJXhcbiIsCi0JCQkgICAgaGEtPmNzODR4eC0+Z29sZF9md192ZXJzaW9uKSk7CisJCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg1MDFjLAorCQkJICAgICJBbGVydCA4NFhYOiBnb2xkIGZpcm13YXJlIHZlcnNpb24gJXguXG4iLAorCQkJICAgIGhhLT5jczg0eHgtPmdvbGRfZndfdmVyc2lvbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJICAgICJBbGVydCA4NHh4OiBJbnZhbGlkIEFsZXJ0ICUwNHggJTA0eCAlMDR4XG4iLAorCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAxZCwKKwkJCSAgICAiQWxlcnQgODR4eDogSW52YWxpZCBBbGVydCAlMDR4ICUwNHggJTA0eC5cbiIsCiAJCQkgICAgbWJbMV0sIG1iWzJdLCBtYlszXSk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmNzODR4eC0+YWNjZXNzX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBNQkFfRENCWF9TVEFSVDoKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBEQ0JYIFN0YXJ0ZWQgLS0gJTA0eCAlMDR4ICUwNHhcbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSwgbWJbM10pKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMWUsCisJCSAgICAiRENCWCBTdGFydGVkIC0tICUwNHggJTA0eCAlMDR4LlxuIiwKKwkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCQlicmVhazsKIAljYXNlIE1CQV9EQ0JYX1BBUkFNX1VQREFURToKLQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBEQ0JYIFBhcmFtZXRlcnMgVXBkYXRlZCAtLSAiCi0JCSAgICAiJTA0eCAlMDR4ICUwNHhcbiIsIHZoYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdLCBtYlszXSkpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAxZiwKKwkJICAgICJEQ0JYIFBhcmFtZXRlcnMgVXBkYXRlZCAtLSAlMDR4ICUwNHggJTA0eC5cbiIsCisJCSAgICBtYlsxXSwgbWJbMl0sIG1iWzNdKTsKIAkJYnJlYWs7CiAJY2FzZSBNQkFfRkNGX0NPTkZfRVJSOgotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEZDRiBDb25maWd1cmF0aW9uIEVycm9yIC0tICIKLQkJICAgICIlMDR4ICUwNHggJTA0eFxuIiwgdmhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDIwLAorCQkgICAgIkZDRiBDb25maWd1cmF0aW9uIEVycm9yIC0tICUwNHggJTA0eCAlMDR4LlxuIiwKKwkJICAgIG1iWzFdLCBtYlsyXSwgbWJbM10pOwogCQlicmVhazsKIAljYXNlIE1CQV9JRENfQ09NUExFVEU6CiAJY2FzZSBNQkFfSURDX05PVElGWToKQEAgLTgzOCwxMCArODI3LDggQEAKIAogCS8qIFZhbGlkYXRlIGhhbmRsZS4gKi8KIAlpZiAoaW5kZXggPj0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKSB7Ci0JCURFQlVHMihwcmludGsoInNjc2koJWxkKTogSW52YWxpZCBTQ1NJIGNvbXBsZXRpb24gaGFuZGxlICVkLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgaW5kZXgpKTsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkludmFsaWQgU0NTSSBjb21wbGV0aW9uIGhhbmRsZSAlZC5cbiIsIGluZGV4KTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxNCwKKwkJICAgICJJbnZhbGlkIFNDU0kgY29tbWFuZCBpbmRleCAoJXgpLlxuIiwgaW5kZXgpOwogCiAJCWlmIChJU19RTEE4MlhYKGhhKSkKIAkJCXNldF9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwpAQCAtODU5LDEwICs4NDYsNyBAQAogCQlzcC0+Y21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CiAJCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKIAl9IGVsc2UgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCkgUmVxOiVkOiBJbnZhbGlkIElTUCBTQ1NJIGNvbXBsZXRpb24iCi0JCQkiIGhhbmRsZSgweCV4KVxuIiwgdmhhLT5ob3N0X25vLCByZXEtPmlkLCBpbmRleCkpOwotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiSW52YWxpZCBJU1AgU0NTSSBjb21wbGV0aW9uIGhhbmRsZVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDMwMTYsICJJbnZhbGlkIFNDU0kgU1JCLlxuIik7CiAKIAkJaWYgKElTX1FMQTgyWFgoaGEpKQogCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CkBAIC04ODIsOCArODY2LDggQEAKIAogCWluZGV4ID0gTFNXKHBrdC0+aGFuZGxlKTsKIAlpZiAoaW5kZXggPj0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICIlczogSW52YWxpZCBjb21wbGV0aW9uIGhhbmRsZSAoJXgpLlxuIiwgZnVuYywgaW5kZXgpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDMxLAorCQkgICAgIkludmFsaWQgY29tbWFuZCBpbmRleCAoJXgpLlxuIiwgaW5kZXgpOwogCQlpZiAoSVNfUUxBODJYWChoYSkpCiAJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJZWxzZQpAQCAtODkyLDE1ICs4NzYsMTMgQEAKIAl9CiAJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbaW5kZXhdOwogCWlmICghc3ApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIiVzOiBJbnZhbGlkIGNvbXBsZXRpb24gaGFuZGxlICgleCkgLS0gdGltZWQtb3V0LlxuIiwgZnVuYywKLQkJICAgIGluZGV4KTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAzMiwKKwkJICAgICJJbnZhbGlkIGNvbXBsZXRpb24gaGFuZGxlICgleCkgLS0gdGltZWQtb3V0LlxuIiwgaW5kZXgpOwogCQlyZXR1cm4gc3A7CiAJfQogCWlmIChzcC0+aGFuZGxlICE9IGluZGV4KSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICIlczogU1JCIGhhbmRsZSAoJXgpIG1pc21hdGNoICV4LlxuIiwgZnVuYywgc3AtPmhhbmRsZSwKLQkJICAgIGluZGV4KTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAzMywKKwkJICAgICJTUkIgaGFuZGxlICgleCkgbWlzbWF0Y2ggJXguXG4iLCBzcC0+aGFuZGxlLCBpbmRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtOTM3LDE3ICs5MTksMTcgQEAKIAlkYXRhWzFdID0gbGlvLT51LmxvZ2lvLmZsYWdzICYgU1JCX0xPR0lOX1JFVFJJRUQgPwogCSAgICBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRCA6IDA7CiAJaWYgKG1ieC0+ZW50cnlfc3RhdHVzKSB7Ci0JCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgorCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTA0MywKKwkJICAgICJBc3luYy0lcyBlcnJvciBlbnRyeSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgogCQkgICAgImVudHJ5LXN0YXR1cz0leCBzdGF0dXM9JXggc3RhdGUtZmxhZz0leCAiCiAJCSAgICAic3RhdHVzLWZsYWdzPSV4LlxuIiwKLQkJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAotCQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCQkgICAgdHlwZSwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAogCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIG1ieC0+ZW50cnlfc3RhdHVzLAogCQkgICAgbGUxNl90b19jcHUobWJ4LT5zdGF0dXMpLCBsZTE2X3RvX2NwdShtYngtPnN0YXRlX2ZsYWdzKSwKLQkJICAgIGxlMTZfdG9fY3B1KG1ieC0+c3RhdHVzX2ZsYWdzKSkpOworCQkgICAgbGUxNl90b19jcHUobWJ4LT5zdGF0dXNfZmxhZ3MpKTsKIAotCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1ieCwgc2l6ZW9mKCptYngpKSk7CisJCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19hc3luYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHg1MDU3LAorCQkgICAgKHVpbnQ4X3QgKiltYngsIHNpemVvZigqbWJ4KSk7CiAKIAkJZ290byBsb2dpb19kb25lOwogCX0KQEAgLTk1NywxMiArOTM5LDEwIEBACiAJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIwKSA9PSBNQlNfQ09NTUFORF9DT01QTEVURSkKIAkJc3RhdHVzID0gMDsKIAlpZiAoIXN0YXR1cyAmJiBsZTE2X3RvX2NwdShtYngtPm1iMCkgPT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgotCQkgICAgIm1ieDE9JXguXG4iLAotCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwgbGUxNl90b19jcHUobWJ4LT5tYjEpKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDQ1LAorCQkgICAgIkFzeW5jLSVzIGNvbXBsZXRlIC0gcG9ydGlkPSUwMnglMDJ4JTAyeCBtYngxPSV4LlxuIiwKKwkJICAgIHR5cGUsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBsZTE2X3RvX2NwdShtYngtPm1iMSkpOwogCiAJCWRhdGFbMF0gPSBNQlNfQ09NTUFORF9DT01QTEVURTsKIAkJaWYgKGN0eC0+dHlwZSA9PSBTUkJfTE9HSU5fQ01EKSB7CkBAIC05ODcsMTQgKzk2NywxNCBAQAogCQlicmVhazsKIAl9CiAKLQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBmYWlsZWQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4IHN0YXR1cz0leCAiCisJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTA0NiwKKwkgICAgIkFzeW5jLSVzIGZhaWxlZCAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggc3RhdHVzPSV4ICIKIAkgICAgIm1iMD0leCBtYjE9JXggbWIyPSV4IG1iNj0leCBtYjc9JXguXG4iLAotCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAorCSAgICB0eXBlLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCiAJICAgIGZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBzdGF0dXMsCiAJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIwKSwgbGUxNl90b19jcHUobWJ4LT5tYjEpLAogCSAgICBsZTE2X3RvX2NwdShtYngtPm1iMiksIGxlMTZfdG9fY3B1KG1ieC0+bWI2KSwKLQkgICAgbGUxNl90b19jcHUobWJ4LT5tYjcpKSk7CisJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWI3KSk7CiAKIGxvZ2lvX2RvbmU6CiAJbGlvLT5kb25lKHNwKTsKQEAgLTEwMjUsOSArMTAwNSw4IEBACiAJCXR5cGUgPSAiY3QgcGFzcy10aHJvdWdoIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIiVzOiBVbnJlY29nbml6ZWQgU1JCOiAoJXApIHR5cGU9JWQuXG4iLCBmdW5jLCBzcCwKLQkJICAgIHNwX2JzZy0+dHlwZSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwNDcsCisJCSAgICAiVW5yZWNvZ25pemVkIFNSQjogKCVwKSB0eXBlPSVkLlxuIiwgc3AsIHNwX2JzZy0+dHlwZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNDUsMjAgKzEwMjQsMjAgQEAKIAkJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQogCQkJICAgIGxlMTZfdG9fY3B1KCgoc3RzX2VudHJ5X3QgKilwa3QpLT5yc3BfaW5mb19sZW4pOwogCi0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJzY3NpKCVsZCk6IENUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciAiCisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDQ4LAorCQkJICAgICJDVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgIgogCQkJICAgICJjb21wX3N0YXR1cy1zdGF0dXM9MHgleCB0b3RhbF9ieXRlID0gMHgleC5cbiIsCi0JCQkgICAgdmhhLT5ob3N0X25vLCB0eXBlLCBjb21wX3N0YXR1cywKLQkJCSAgICBic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuKSk7CisJCQkgICAgdHlwZSwgY29tcF9zdGF0dXMsCisJCQkgICAgYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbik7CiAJCX0gZWxzZSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJzY3NpKCVsZCk6IENUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciAiCi0JCQkgICAgImNvbXBfc3RhdHVzLXN0YXR1cz0weCV4LlxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIHR5cGUsIGNvbXBfc3RhdHVzKSk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDQ5LAorCQkJICAgICJDVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgIgorCQkJICAgICJjb21wX3N0YXR1cy1zdGF0dXM9MHgleC5cbiIsIHR5cGUsIGNvbXBfc3RhdHVzKTsKIAkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CiAJCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAkJfQotCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKXBrdCwgc2l6ZW9mKCpwa3QpKSk7CisJCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19hc3luYyArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHg1MDU4LAorCQkgICAgKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSk7CiAJfSBlbHNlIHsKIAkJYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9ICBESURfT0sgPDwgMTY7CiAJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQpAQCAtMTExMCw5ICsxMDg5LDggQEAKIAkJdHlwZSA9ICJjdCBwYXNzLXRocm91Z2giOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiJXM6IFVucmVjb2duaXplZCBTUkI6ICglcCkgdHlwZT0lZC5cbiIsIGZ1bmMsIHNwLAotCQkgICAgc3BfYnNnLT50eXBlKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAzZSwKKwkJICAgICJVbnJlY29nbml6ZWQgU1JCOiAoJXApIHR5cGU9JWQuXG4iLCBzcCwgc3BfYnNnLT50eXBlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTEzMiwyNyArMTExMCwzMSBAQAogCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CiAJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT50b3RhbF9ieXRlX2NvdW50KTsKIAotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAic2NzaSglbGQ6MHgleCk6IEVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgorCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NTAzZiwKKwkJCSAgICAiRUxTLUNUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciBjb21wX3N0YXR1cy1zdGF0dXM9MHgleCAiCiAJCQkgICAgImVycm9yIHN1YmNvZGUgMT0weCV4IGVycm9yIHN1YmNvZGUgMj0weCV4IHRvdGFsX2J5dGUgPSAweCV4LlxuIiwKLQkJCQl2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGNvbXBfc3RhdHVzLCBmd19zdGF0dXNbMV0sIGZ3X3N0YXR1c1syXSwKLQkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPnRvdGFsX2J5dGVfY291bnQpKSk7CisJCQkgICAgdHlwZSwgY29tcF9zdGF0dXMsIGZ3X3N0YXR1c1sxXSwgZndfc3RhdHVzWzJdLAorCQkJICAgIGxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCAqKQorCQkJCXBrdCktPnRvdGFsX2J5dGVfY291bnQpKTsKIAkJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOwogCQkJbWVtY3B5KCBmd19zdHNfcHRyLCBmd19zdGF0dXMsIHNpemVvZihmd19zdGF0dXMpKTsKIAkJfQogCQllbHNlIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgInNjc2koJWxkOjB4JXgpOiBFTFMtQ1QgcGFzcy10aHJvdWdoLSVzIGVycm9yIGNvbXBfc3RhdHVzLXN0YXR1cz0weCV4ICIKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDUwNDAsCisJCQkgICAgIkVMUy1DVCBwYXNzLXRocm91Z2gtJXMgZXJyb3IgY29tcF9zdGF0dXMtc3RhdHVzPTB4JXggIgogCQkJICAgICJlcnJvciBzdWJjb2RlIDE9MHgleCBlcnJvciBzdWJjb2RlIDI9MHgleC5cbiIsCi0JCQkJdmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBjb21wX3N0YXR1cywKLQkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMSksCi0JCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4Kilwa3QpLT5lcnJvcl9zdWJjb2RlXzIpKSk7CisJCQkgICAgdHlwZSwgY29tcF9zdGF0dXMsCisJCQkgICAgbGUxNl90b19jcHUoKChzdHJ1Y3QgZWxzX3N0c19lbnRyeV8yNHh4ICopCisJCQkJcGt0KS0+ZXJyb3Jfc3ViY29kZV8xKSwKKwkJCSAgICBsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHggKikKKwkJCQkgICAgcGt0KS0+ZXJyb3Jfc3ViY29kZV8yKSk7CiAJCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwogCQkJYnNnX2pvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAJCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKIAkJCW1lbWNweSggZndfc3RzX3B0ciwgZndfc3RhdHVzLCBzaXplb2YoZndfc3RhdHVzKSk7CiAJCX0KLQkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilwa3QsIHNpemVvZigqcGt0KSkpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfYXN5bmMgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4NTA1NiwKKwkJCQkodWludDhfdCAqKXBrdCwgc2l6ZW9mKCpwa3QpKTsKIAl9CiAJZWxzZSB7CiAJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAgRElEX09LIDw8IDE2OwpAQCAtMTIwMSwyNSArMTE4MywyNCBAQAogCWRhdGFbMV0gPSBsaW8tPnUubG9naW8uZmxhZ3MgJiBTUkJfTE9HSU5fUkVUUklFRCA/CiAJCVFMQV9MT0dJT19MT0dJTl9SRVRSSUVEIDogMDsKIAlpZiAobG9naW8tPmVudHJ5X3N0YXR1cykgewotCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgZW50cnkgLSAiCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwMzQsCisJCSAgICAiQXN5bmMtJXMgZXJyb3IgZW50cnkgLSAiCiAJCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeCBlbnRyeS1zdGF0dXM9JXguXG4iLAotCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwgbG9naW8tPmVudHJ5X3N0YXR1cykpOwotCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKWxvZ2lvLCBzaXplb2YoKmxvZ2lvKSkpOworCQkgICAgdHlwZSwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIGxvZ2lvLT5lbnRyeV9zdGF0dXMpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfYXN5bmMgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4NTA1OSwKKwkJICAgICh1aW50OF90ICopbG9naW8sIHNpemVvZigqbG9naW8pKTsKIAogCQlnb3RvIGxvZ2lvX2RvbmU7CiAJfQogCiAJaWYgKGxlMTZfdG9fY3B1KGxvZ2lvLT5jb21wX3N0YXR1cykgPT0gQ1NfQ09NUExFVEUpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgorCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAzNiwKKwkJICAgICJBc3luYy0lcyBjb21wbGV0ZSAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggIgogCQkgICAgImlvcDA9JXguXG4iLAotCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCSAgICB0eXBlLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCiAJCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwKLQkJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pKSk7CisJCSAgICBsZTMyX3RvX2NwdShsb2dpby0+aW9fcGFyYW1ldGVyWzBdKSk7CiAKIAkJZGF0YVswXSA9IE1CU19DT01NQU5EX0NPTVBMRVRFOwogCQlpZiAoY3R4LT50eXBlICE9IFNSQl9MT0dJTl9DTUQpCkBAIC0xMjU2LDE0ICsxMjM3LDE0IEBACiAJCWJyZWFrOwogCX0KIAotCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCi0JICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGZhaWxlZCAtIHBvcnRpZD0lMDJ4JTAyeCUwMnggY29tcD0leCAiCisJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMzcsCisJICAgICJBc3luYy0lcyBmYWlsZWQgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4IGNvbXA9JXggIgogCSAgICAiaW9wMD0leCBpb3AxPSV4LlxuIiwKLQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwKKwkgICAgdHlwZSwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLAogCSAgICBmY3BvcnQtPmRfaWQuYi5hcmVhLCBmY3BvcnQtPmRfaWQuYi5hbF9wYSwKIAkgICAgbGUxNl90b19jcHUobG9naW8tPmNvbXBfc3RhdHVzKSwKIAkgICAgbGUzMl90b19jcHUobG9naW8tPmlvX3BhcmFtZXRlclswXSksCi0JICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMV0pKSk7CisJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMV0pKTsKIAogbG9naW9fZG9uZToKIAlsaW8tPmRvbmUoc3ApOwpAQCAtMTI5MiwzOCArMTI3MywzNCBAQAogCWZjcG9ydCA9IHNwLT5mY3BvcnQ7CiAKIAlpZiAoc3RzLT5lbnRyeV9zdGF0dXMpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGVycm9yIC0gZW50cnktc3RhdHVzKCV4KS5cbiIsCi0JCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIHN0cy0+ZW50cnlfc3RhdHVzKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwMzgsCisJCSAgICAiQXN5bmMtJXMgZXJyb3IgLSBlbnRyeS1zdGF0dXMoJXgpLlxuIiwKKwkJICAgIHR5cGUsIHN0cy0+ZW50cnlfc3RhdHVzKTsKIAl9IGVsc2UgaWYgKHN0cy0+Y29tcF9zdGF0dXMgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDU19DT01QTEVURSkpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGVycm9yIC0gY29tcGxldGlvbiBzdGF0dXMoJXgpLlxuIiwKLQkJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAotCQkgICAgc3RzLT5jb21wX3N0YXR1cykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDM5LAorCQkgICAgIkFzeW5jLSVzIGVycm9yIC0gY29tcGxldGlvbiBzdGF0dXMoJXgpLlxuIiwKKwkJICAgIHR5cGUsIHN0cy0+Y29tcF9zdGF0dXMpOwogCX0gZWxzZSBpZiAoIShsZTE2X3RvX2NwdShzdHMtPnNjc2lfc3RhdHVzKSAmCiAJICAgIFNTX1JFU1BPTlNFX0lORk9fTEVOX1ZBTElEKSkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgLSBubyByZXNwb25zZSBpbmZvKCV4KS5cbiIsCi0JCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIHN0cy0+c2NzaV9zdGF0dXMpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTAzYSwKKwkJICAgICJBc3luYy0lcyBlcnJvciAtIG5vIHJlc3BvbnNlIGluZm8oJXgpLlxuIiwKKwkJICAgIHR5cGUsIHN0cy0+c2NzaV9zdGF0dXMpOwogCX0gZWxzZSBpZiAobGUzMl90b19jcHUoc3RzLT5yc3BfZGF0YV9sZW4pIDwgNCkgewotCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgLSBub3QgZW5vdWdoIHJlc3BvbnNlKCVkKS5cbiIsCi0JCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKLQkJICAgIHN0cy0+cnNwX2RhdGFfbGVuKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwM2IsCisJCSAgICAiQXN5bmMtJXMgZXJyb3IgLSBub3QgZW5vdWdoIHJlc3BvbnNlKCVkKS5cbiIsCisJCSAgICB0eXBlLCBzdHMtPnJzcF9kYXRhX2xlbik7CiAJfSBlbHNlIGlmIChzdHMtPmRhdGFbM10pIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGVycm9yIC0gcmVzcG9uc2UoJXgpLlxuIiwKLQkJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAotCQkgICAgc3RzLT5kYXRhWzNdKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwM2MsCisJCSAgICAiQXN5bmMtJXMgZXJyb3IgLSByZXNwb25zZSgleCkuXG4iLAorCQkgICAgdHlwZSwgc3RzLT5kYXRhWzNdKTsKIAl9IGVsc2UgewogCQllcnJvciA9IDA7CiAJfQogCiAJaWYgKGVycm9yKSB7CiAJCWlvY2ItPnUudG1mLmRhdGEgPSBlcnJvcjsKLQkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilzdHMsIHNpemVvZigqc3RzKSkpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfYXN5bmMgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4NTA1NSwKKwkJICAgICh1aW50OF90ICopc3RzLCBzaXplb2YoKnN0cykpOwogCX0KIAogCWlvY2ItPmRvbmUoc3ApOwpAQCAtMTM2MCw4ICsxMzM3LDggQEAKIAkJfQogCiAJCWlmIChwa3QtPmVudHJ5X3N0YXR1cyAhPSAwKSB7Ci0JCQlERUJVRzMocHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICJzY3NpKCVsZCk6IFByb2Nlc3MgZXJyb3IgZW50cnkuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwMzUsCisJCQkgICAgIlByb2Nlc3MgZXJyb3IgZW50cnkuXG4iKTsKIAogCQkJcWxhMngwMF9lcnJvcl9lbnRyeSh2aGEsIHJzcCwgcGt0KTsKIAkJCSgocmVzcG9uc2VfdCAqKXBrdCktPnNpZ25hdHVyZSA9IFJFU1BPTlNFX1BST0NFU1NFRDsKQEAgLTEzOTksMTAgKzEzNzYsMTAgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogVHlwZSBOb3QgU3VwcG9ydGVkLiAqLwotCQkJREVCVUc0KHByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAic2NzaSglbGQpOiBSZWNlaXZlZCB1bmtub3duIHJlc3BvbnNlIHBrdCB0eXBlICV4ICIKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwNGEsCisJCQkgICAgIlJlY2VpdmVkIHVua25vd24gcmVzcG9uc2UgcGt0IHR5cGUgJXggIgogCQkJICAgICJlbnRyeSBzdGF0dXM9JXguXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgcGt0LT5lbnRyeV90eXBlLCBwa3QtPmVudHJ5X3N0YXR1cykpOworCQkJICAgIHBrdC0+ZW50cnlfdHlwZSwgcGt0LT5lbnRyeV9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJKChyZXNwb25zZV90ICopcGt0KS0+c2lnbmF0dXJlID0gUkVTUE9OU0VfUFJPQ0VTU0VEOwpAQCAtMTQxOCw2ICsxMzk1LDcgQEAKIHFsYTJ4MDBfaGFuZGxlX3NlbnNlKHNyYl90ICpzcCwgdWludDhfdCAqc2Vuc2VfZGF0YSwgdWludDMyX3QgcGFyX3NlbnNlX2xlbiwKICAgICB1aW50MzJfdCBzZW5zZV9sZW4sIHN0cnVjdCByc3BfcXVlICpyc3ApCiB7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IHNwLT5mY3BvcnQtPnZoYTsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjcCA9IHNwLT5jbWQ7CiAKIAlpZiAoc2Vuc2VfbGVuID49IFNDU0lfU0VOU0VfQlVGRkVSU0laRSkKQEAgLTE0MzUsMTEgKzE0MTMsMTMgQEAKIAlpZiAoc3AtPnJlcXVlc3Rfc2Vuc2VfbGVuZ3RoICE9IDApCiAJCXJzcC0+c3RhdHVzX3NyYiA9IHNwOwogCi0JREVCVUc1KHByaW50aygiJXMoKTogQ2hlY2sgY29uZGl0aW9uIFNlbnNlIGRhdGEsIHNjc2koJWxkOiVkOiVkOiVkKSAiCi0JICAgICJjbWQ9JXBcbiIsIF9fZnVuY19fLCBzcC0+ZmNwb3J0LT52aGEtPmhvc3Rfbm8sCi0JICAgIGNwLT5kZXZpY2UtPmNoYW5uZWwsIGNwLT5kZXZpY2UtPmlkLCBjcC0+ZGV2aWNlLT5sdW4sIGNwKSk7CisJcWxfZGJnKHFsX2RiZ19pbywgdmhhLCAweDMwMWMsCisJICAgICJDaGVjayBjb25kaXRpb24gU2Vuc2UgZGF0YSwgc2NzaSglbGQ6JWQ6JWQ6JWQpIGNtZD0lcC5cbiIsCisJICAgIHNwLT5mY3BvcnQtPnZoYS0+aG9zdF9ubywgY3AtPmRldmljZS0+Y2hhbm5lbCwgY3AtPmRldmljZS0+aWQsCisJICAgIGNwLT5kZXZpY2UtPmx1biwgY3ApOwogCWlmIChzZW5zZV9sZW4pCi0JCURFQlVHNShxbGEyeDAwX2R1bXBfYnVmZmVyKGNwLT5zZW5zZV9idWZmZXIsIHNlbnNlX2xlbikpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfaW8gKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MzAyYiwKKwkJICAgIGNwLT5zZW5zZV9idWZmZXIsIHNlbnNlX2xlbik7CiB9CiAKIHN0cnVjdCBzY3NpX2RpZl90dXBsZSB7CkBAIC0xNDU0LDM0ICsxNDM0LDk0IEBACiAgKiBBU0MvQVNDUSBmaWVsZHMgaW4gdGhlIHNlbnNlIGJ1ZmZlciB3aXRoIElMTEVHQUxfUkVRVUVTVAogICogdG8gaW5kaWNhdGUgdG8gdGhlIGtlcm5lbCB0aGF0IHRoZSBIQkEgZGV0ZWN0ZWQgZXJyb3IuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSBpbnQKIHFsYTJ4MDBfaGFuZGxlX2RpZl9lcnJvcihzcmJfdCAqc3AsIHN0cnVjdCBzdHNfZW50cnlfMjR4eCAqc3RzMjQpCiB7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSA9IHNwLT5mY3BvcnQtPnZoYTsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBzcC0+Y21kOwotCXN0cnVjdCBzY3NpX2RpZl90dXBsZQkqZXAgPQotCQkJKHN0cnVjdCBzY3NpX2RpZl90dXBsZSAqKSZzdHMyNC0+ZGF0YVsyMF07Ci0Jc3RydWN0IHNjc2lfZGlmX3R1cGxlCSphcCA9Ci0JCQkoc3RydWN0IHNjc2lfZGlmX3R1cGxlICopJnN0czI0LT5kYXRhWzEyXTsKKwl1aW50OF90CQkqYXAgPSAmc3RzMjQtPmRhdGFbMTJdOworCXVpbnQ4X3QJCSplcCA9ICZzdHMyNC0+ZGF0YVsyMF07CiAJdWludDMyX3QJZV9yZWZfdGFnLCBhX3JlZl90YWc7CiAJdWludDE2X3QJZV9hcHBfdGFnLCBhX2FwcF90YWc7CiAJdWludDE2X3QJZV9ndWFyZCwgYV9ndWFyZDsKIAotCWVfcmVmX3RhZyA9IGJlMzJfdG9fY3B1KGVwLT5yZWZfdGFnKTsKLQlhX3JlZl90YWcgPSBiZTMyX3RvX2NwdShhcC0+cmVmX3RhZyk7Ci0JZV9hcHBfdGFnID0gYmUxNl90b19jcHUoZXAtPmFwcF90YWcpOwotCWFfYXBwX3RhZyA9IGJlMTZfdG9fY3B1KGFwLT5hcHBfdGFnKTsKLQllX2d1YXJkID0gYmUxNl90b19jcHUoZXAtPmd1YXJkKTsKLQlhX2d1YXJkID0gYmUxNl90b19jcHUoYXAtPmd1YXJkKTsKKwkvKgorCSAqIHN3YWIzMiBvZiB0aGUgImRhdGEiIGZpZWxkIGluIHRoZSBiZWdpbm5pbmcgb2YgcWxhMngwMF9zdGF0dXNfZW50cnkoKQorCSAqIHdvdWxkIG1ha2UgZ3VhcmQgZmllbGQgYXBwZWFyIGF0IG9mZnNldCAyCisJICovCisJYV9ndWFyZCAgID0gbGUxNl90b19jcHUoKih1aW50MTZfdCAqKShhcCArIDIpKTsKKwlhX2FwcF90YWcgPSBsZTE2X3RvX2NwdSgqKHVpbnQxNl90ICopKGFwICsgMCkpOworCWFfcmVmX3RhZyA9IGxlMzJfdG9fY3B1KCoodWludDMyX3QgKikoYXAgKyA0KSk7CisJZV9ndWFyZCAgID0gbGUxNl90b19jcHUoKih1aW50MTZfdCAqKShlcCArIDIpKTsKKwllX2FwcF90YWcgPSBsZTE2X3RvX2NwdSgqKHVpbnQxNl90ICopKGVwICsgMCkpOworCWVfcmVmX3RhZyA9IGxlMzJfdG9fY3B1KCoodWludDMyX3QgKikoZXAgKyA0KSk7CiAKLQlERUJVRzE4KHByaW50ayhLRVJOX0RFQlVHCi0JICAgICIlcygpOiBpb2NiKHMpICVwIFJldHVybmVkIFNUQVRVU1xuIiwgX19mdW5jX18sIHN0czI0KSk7CisJcWxfZGJnKHFsX2RiZ19pbywgdmhhLCAweDMwMjMsCisJICAgICJpb2NiKHMpICVwIFJldHVybmVkIFNUQVRVUy5cbiIsIHN0czI0KTsKIAotCURFQlVHMTgocHJpbnRrKEtFUk5fRVJSICJESUYgRVJST1IgaW4gY21kIDB4JXggbGJhIDB4JWxseCBhY3QgcmVmIgorCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDI0LAorCSAgICAiRElGIEVSUk9SIGluIGNtZCAweCV4IGxiYSAweCVsbHggYWN0IHJlZiIKIAkgICAgIiB0YWc9MHgleCwgZXhwIHJlZl90YWc9MHgleCwgYWN0IGFwcCB0YWc9MHgleCwgZXhwIGFwcCIKLQkgICAgIiB0YWc9MHgleCwgYWN0IGd1YXJkPTB4JXgsIGV4cCBndWFyZD0weCV4XG4iLAorCSAgICAiIHRhZz0weCV4LCBhY3QgZ3VhcmQ9MHgleCwgZXhwIGd1YXJkPTB4JXguXG4iLAogCSAgICBjbWQtPmNtbmRbMF0sICh1NjQpc2NzaV9nZXRfbGJhKGNtZCksIGFfcmVmX3RhZywgZV9yZWZfdGFnLAotCSAgICBhX2FwcF90YWcsIGVfYXBwX3RhZywgYV9ndWFyZCwgZV9ndWFyZCkpOworCSAgICBhX2FwcF90YWcsIGVfYXBwX3RhZywgYV9ndWFyZCwgZV9ndWFyZCk7CiAKKwkvKgorCSAqIElnbm9yZSBzZWN0b3IgaWY6CisJICogRm9yIHR5cGUgICAgIDM6IHJlZiAmIGFwcCB0YWcgaXMgYWxsICdmJ3MKKwkgKiBGb3IgdHlwZSAwLDEsMjogYXBwIHRhZyBpcyBhbGwgJ2YncworCSAqLworCWlmICgoYV9hcHBfdGFnID09IDB4ZmZmZikgJiYKKwkgICAgKChzY3NpX2dldF9wcm90X3R5cGUoY21kKSAhPSBTQ1NJX1BST1RfRElGX1RZUEUzKSB8fAorCSAgICAgKGFfcmVmX3RhZyA9PSAweGZmZmZmZmZmKSkpIHsKKwkJdWludDMyX3QgYmxvY2tzX2RvbmUsIHJlc2lkOworCQlzZWN0b3JfdCBsYmFfcyA9IHNjc2lfZ2V0X2xiYShjbWQpOworCisJCS8qIDJUQiBib3VuZGFyeSBjYXNlIGNvdmVyZWQgYXV0b21hdGljYWxseSB3aXRoIHRoaXMgKi8KKwkJYmxvY2tzX2RvbmUgPSBlX3JlZl90YWcgLSAodWludDMyX3QpbGJhX3MgKyAxOworCisJCXJlc2lkID0gc2NzaV9idWZmbGVuKGNtZCkgLSAoYmxvY2tzX2RvbmUgKgorCQkgICAgY21kLT5kZXZpY2UtPnNlY3Rvcl9zaXplKTsKKworCQlzY3NpX3NldF9yZXNpZChjbWQsIHJlc2lkKTsKKwkJY21kLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CisKKwkJLyogVXBkYXRlIHByb3RlY3Rpb24gdGFnICovCisJCWlmIChzY3NpX3Byb3Rfc2dfY291bnQoY21kKSkgeworCQkJdWludDMyX3QgaSwgaiA9IDAsIGsgPSAwLCBudW1fZW50OworCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwkJCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNwdDsKKworCQkJLyogUGF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgcHJvdGVjdGlvbiB0YWdzICovCisJCQlzY3NpX2Zvcl9lYWNoX3Byb3Rfc2coY21kLCBzZywKKwkJCSAgICBzY3NpX3Byb3Rfc2dfY291bnQoY21kKSwgaSkgeworCQkJCW51bV9lbnQgPSBzZ19kbWFfbGVuKHNnKSAvIDg7CisJCQkJaWYgKGsgKyBudW1fZW50IDwgYmxvY2tzX2RvbmUpIHsKKwkJCQkJayArPSBudW1fZW50OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaiA9IGJsb2Nrc19kb25lIC0gayAtIDE7CisJCQkJayA9IGJsb2Nrc19kb25lOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoayAhPSBibG9ja3NfZG9uZSkgeworCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBzcC0+ZmNwb3J0LT52aGEtPmh3LAorCQkJCSAgICAidW5leHBlY3RlZCB0YWcgdmFsdWVzIHRhZzpsYmE9JXg6JWx4KVxuIiwKKwkJCQkgICAgZV9yZWZfdGFnLCBsYmFfcyk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisKKwkJCXNwdCA9IHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgKyBzZy0+b2Zmc2V0OworCQkJc3B0ICs9IGo7CisKKwkJCXNwdC0+YXBwX3RhZyA9IDB4ZmZmZjsKKwkJCWlmIChzY3NpX2dldF9wcm90X3R5cGUoY21kKSA9PSBTQ1NJX1BST1RfRElGX1RZUEUzKQorCQkJCXNwdC0+cmVmX3RhZyA9IDB4ZmZmZmZmZmY7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBjaGVjayBndWFyZCAqLwogCWlmIChlX2d1YXJkICE9IGFfZ3VhcmQpIHsKQEAgLTE0OTAsMTcgKzE1MzAsNyBAQAogCQlzZXRfZHJpdmVyX2J5dGUoY21kLCBEUklWRVJfU0VOU0UpOwogCQlzZXRfaG9zdF9ieXRlKGNtZCwgRElEX0FCT1JUKTsKIAkJY21kLT5yZXN1bHQgfD0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OIDw8IDE7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjaGVjayBhcHBsIHRhZyAqLwotCWlmIChlX2FwcF90YWcgIT0gYV9hcHBfdGFnKSB7Ci0JCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsCi0JCSAgICAweDEwLCAweDIpOwotCQlzZXRfZHJpdmVyX2J5dGUoY21kLCBEUklWRVJfU0VOU0UpOwotCQlzZXRfaG9zdF9ieXRlKGNtZCwgRElEX0FCT1JUKTsKLQkJY21kLT5yZXN1bHQgfD0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OIDw8IDE7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogY2hlY2sgcmVmIHRhZyAqLwpAQCAtMTUxMCw4ICsxNTQwLDIwIEBACiAJCXNldF9kcml2ZXJfYnl0ZShjbWQsIERSSVZFUl9TRU5TRSk7CiAJCXNldF9ob3N0X2J5dGUoY21kLCBESURfQUJPUlQpOwogCQljbWQtPnJlc3VsdCB8PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04gPDwgMTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CisKKwkvKiBjaGVjayBhcHBsIHRhZyAqLworCWlmIChlX2FwcF90YWcgIT0gYV9hcHBfdGFnKSB7CisJCXNjc2lfYnVpbGRfc2Vuc2VfYnVmZmVyKDEsIGNtZC0+c2Vuc2VfYnVmZmVyLCBJTExFR0FMX1JFUVVFU1QsCisJCSAgICAweDEwLCAweDIpOworCQlzZXRfZHJpdmVyX2J5dGUoY21kLCBEUklWRVJfU0VOU0UpOworCQlzZXRfaG9zdF9ieXRlKGNtZCwgRElEX0FCT1JUKTsKKwkJY21kLT5yZXN1bHQgfD0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OIDw8IDE7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTE1NjksOSArMTYxMSw4IEBACiAJCXNwID0gTlVMTDsKIAogCWlmIChzcCA9PSBOVUxMKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJzY3NpKCVsZCk6IEludmFsaWQgc3RhdHVzIGhhbmRsZSAoMHgleCkuXG4iLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBzdHMtPmhhbmRsZSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDMwMTcsCisJCSAgICAiSW52YWxpZCBzdGF0dXMgaGFuZGxlICgweCV4KS5cbiIsIHN0cy0+aGFuZGxlKTsKIAogCQlpZiAoSVNfUUxBODJYWChoYSkpCiAJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTE1ODIsOSArMTYyMyw5IEBACiAJfQogCWNwID0gc3AtPmNtZDsKIAlpZiAoY3AgPT0gTlVMTCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAic2NzaSglbGQpOiBDb21tYW5kIGFscmVhZHkgcmV0dXJuZWQgKDB4JXgvJXApLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgc3RzLT5oYW5kbGUsIHNwKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxOCwKKwkJICAgICJDb21tYW5kIGFscmVhZHkgcmV0dXJuZWQgKDB4JXgvJXApLlxuIiwKKwkJICAgIHN0cy0+aGFuZGxlLCBzcCk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTE2MjksMTAgKzE2NzAsOSBAQAogCQkJcGFyX3NlbnNlX2xlbiAtPSByc3BfaW5mb19sZW47CiAJCX0KIAkJaWYgKHJzcF9pbmZvX2xlbiA+IDMgJiYgcnNwX2luZm9bM10pIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkgICAgInNjc2koJWxkOiVkOiVkKTogRkNQIEkvTyBwcm90b2NvbCBmYWlsdXJlICIKLQkJCSAgICAiKDB4JXgvMHgleCkuXG4iLCB2aGEtPmhvc3Rfbm8sIGNwLT5kZXZpY2UtPmlkLAotCQkJICAgIGNwLT5kZXZpY2UtPmx1biwgcnNwX2luZm9fbGVuLCByc3BfaW5mb1szXSkpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxOSwKKwkJCSAgICAiRkNQIEkvTyBwcm90b2NvbCBmYWlsdXJlICgweCV4LzB4JXgpLlxuIiwKKwkJCSAgICByc3BfaW5mb19sZW4sIHJzcF9pbmZvWzNdKTsKIAogCQkJY3AtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKIAkJCWdvdG8gb3V0OwpAQCAtMTY2MSwxMSArMTcwMSwxMCBAQAogCQkJaWYgKCFsc2NzaV9zdGF0dXMgJiYKIAkJCSAgICAoKHVuc2lnbmVkKShzY3NpX2J1ZmZsZW4oY3ApIC0gcmVzaWQpIDwKIAkJCSAgICAgY3AtPnVuZGVyZmxvdykpIHsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJICAgICJzY3NpKCVsZDolZDolZCk6IE1pZC1sYXllciB1bmRlcmZsb3cgIgorCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDMwMWEsCisJCQkJICAgICJNaWQtbGF5ZXIgdW5kZXJmbG93ICIKIAkJCQkgICAgImRldGVjdGVkICgweCV4IG9mIDB4JXggYnl0ZXMpLlxuIiwKLQkJCQkgICAgdmhhLT5ob3N0X25vLCBjcC0+ZGV2aWNlLT5pZCwKLQkJCQkgICAgY3AtPmRldmljZS0+bHVuLCByZXNpZCwgc2NzaV9idWZmbGVuKGNwKSk7CisJCQkJICAgIHJlc2lkLCBzY3NpX2J1ZmZsZW4oY3ApKTsKIAogCQkJCWNwLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CiAJCQkJYnJlYWs7CkBAIC0xNjc0LDkgKzE3MTMsOCBAQAogCQljcC0+cmVzdWx0ID0gRElEX09LIDw8IDE2IHwgbHNjc2lfc3RhdHVzOwogCiAJCWlmIChsc2NzaV9zdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAic2NzaSglbGQ6JWQ6JWQpIFFVRVVFIEZVTEwgZGV0ZWN0ZWQuXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgY3AtPmRldmljZS0+aWQsIGNwLT5kZXZpY2UtPmx1bikpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxYiwKKwkJCSAgICAiUVVFVUUgRlVMTCBkZXRlY3RlZC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJbG9naXQgPSAwOwpAQCAtMTY5NywxMSArMTczNSwxMCBAQAogCQlzY3NpX3NldF9yZXNpZChjcCwgcmVzaWQpOwogCQlpZiAoc2NzaV9zdGF0dXMgJiBTU19SRVNJRFVBTF9VTkRFUikgewogCQkJaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkgJiYgZndfcmVzaWRfbGVuICE9IHJlc2lkX2xlbikgewotCQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJICAgICJzY3NpKCVsZDolZDolZCkgRHJvcHBlZCBmcmFtZShzKSBkZXRlY3RlZCAiCi0JCQkJICAgICIoMHgleCBvZiAweCV4IGJ5dGVzKS5cbiIsIHZoYS0+aG9zdF9ubywKLQkJCQkgICAgY3AtPmRldmljZS0+aWQsIGNwLT5kZXZpY2UtPmx1biwgcmVzaWQsCi0JCQkJICAgIHNjc2lfYnVmZmxlbihjcCkpKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgzMDFkLAorCQkJCSAgICAiRHJvcHBlZCBmcmFtZShzKSBkZXRlY3RlZCAiCisJCQkJICAgICIoMHgleCBvZiAweCV4IGJ5dGVzKS5cbiIsCisJCQkJICAgIHJlc2lkLCBzY3NpX2J1ZmZsZW4oY3ApKTsKIAogCQkJCWNwLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTYgfCBsc2NzaV9zdGF0dXM7CiAJCQkJYnJlYWs7CkBAIC0xNzEwLDIwICsxNzQ3LDE4IEBACiAJCQlpZiAoIWxzY3NpX3N0YXR1cyAmJgogCQkJICAgICgodW5zaWduZWQpKHNjc2lfYnVmZmxlbihjcCkgLSByZXNpZCkgPAogCQkJICAgIGNwLT51bmRlcmZsb3cpKSB7Ci0JCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCSAgICAic2NzaSglbGQ6JWQ6JWQpOiBNaWQtbGF5ZXIgdW5kZXJmbG93ICIKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgzMDFlLAorCQkJCSAgICAiTWlkLWxheWVyIHVuZGVyZmxvdyAiCiAJCQkJICAgICJkZXRlY3RlZCAoMHgleCBvZiAweCV4IGJ5dGVzKS5cbiIsCi0JCQkJICAgIHZoYS0+aG9zdF9ubywgY3AtPmRldmljZS0+aWQsCi0JCQkJICAgIGNwLT5kZXZpY2UtPmx1biwgcmVzaWQsIHNjc2lfYnVmZmxlbihjcCkpOworCQkJCSAgICByZXNpZCwgc2NzaV9idWZmbGVuKGNwKSk7CiAKIAkJCQljcC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAic2NzaSglbGQ6JWQ6JWQpIERyb3BwZWQgZnJhbWUocykgZGV0ZWN0ZWQgKDB4JXggIgotCQkJICAgICJvZiAweCV4IGJ5dGVzKS5cbiIsIHZoYS0+aG9zdF9ubywgY3AtPmRldmljZS0+aWQsCi0JCQkgICAgY3AtPmRldmljZS0+bHVuLCByZXNpZCwgc2NzaV9idWZmbGVuKGNwKSkpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxZiwKKwkJCSAgICAiRHJvcHBlZCBmcmFtZShzKSBkZXRlY3RlZCAoMHgleCAiCisJCQkgICAgIm9mIDB4JXggYnl0ZXMpLlxuIiwgcmVzaWQsIHNjc2lfYnVmZmxlbihjcCkpOwogCiAJCQljcC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2IHwgbHNjc2lfc3RhdHVzOwogCQkJZ290byBjaGVja19zY3NpX3N0YXR1czsKQEAgLTE3MzksMTAgKzE3NzQsOCBAQAogCQkgKi8KIAkJaWYgKGxzY3NpX3N0YXR1cyAhPSAwKSB7CiAJCQlpZiAobHNjc2lfc3RhdHVzID09IFNBTV9TVEFUX1RBU0tfU0VUX0ZVTEwpIHsKLQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCSAgICAic2NzaSglbGQ6JWQ6JWQpIFFVRVVFIEZVTEwgZGV0ZWN0ZWQuXG4iLAotCQkJCSAgICB2aGEtPmhvc3Rfbm8sIGNwLT5kZXZpY2UtPmlkLAotCQkJCSAgICBjcC0+ZGV2aWNlLT5sdW4pKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgzMDIwLAorCQkJCSAgICAiUVVFVUUgRlVMTCBkZXRlY3RlZC5cbiIpOwogCQkJCWxvZ2l0ID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE3ODEsMTAgKzE4MTQsOSBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJzY3NpKCVsZDolZDolZCkgUG9ydCBkb3duIHN0YXR1czogcG9ydC1zdGF0ZT0weCV4XG4iLAotCQkJdmhhLT5ob3N0X25vLCBjcC0+ZGV2aWNlLT5pZCwgY3AtPmRldmljZS0+bHVuLAotCQkJYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpKSk7CisJCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDIxLAorCQkgICAgIlBvcnQgZG93biBzdGF0dXM6IHBvcnQtc3RhdGU9MHgleC5cbiIsCisJCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkpOwogCiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSkKIAkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdChmY3BvcnQtPnZoYSwgZmNwb3J0LCAxLCAxKTsKQEAgLTE3OTUsNyArMTgyNyw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBDU19ESUZfRVJST1I6Ci0JCXFsYTJ4MDBfaGFuZGxlX2RpZl9lcnJvcihzcCwgc3RzMjQpOworCQlsb2dpdCA9IHFsYTJ4MDBfaGFuZGxlX2RpZl9lcnJvcihzcCwgc3RzMjQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQljcC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwpAQCAtMTgwNCwxNSArMTgzNiwxMyBAQAogCiBvdXQ6CiAJaWYgKGxvZ2l0KQotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgInNjc2koJWxkOiVkOiVkKSBGQ1AgY29tbWFuZCBzdGF0dXM6IDB4JXgtMHgleCAoMHgleCkgIgotCQkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnggb3hpZD0weCV4IGNkYj0lMDJ4JTAyeCUwMnggbGVuPTB4JXggIgotCQkgICAgInJzcF9pbmZvPTB4JXggcmVzaWQ9MHgleCBmd19yZXNpZD0weCV4XG4iLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBjcC0+ZGV2aWNlLT5pZCwgY3AtPmRldmljZS0+bHVuLCBjb21wX3N0YXR1cywgc2NzaV9zdGF0dXMsCi0JCSAgICBjcC0+cmVzdWx0LCBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCi0JCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSwgb3hfaWQsIGNwLT5jbW5kWzBdLCBjcC0+Y21uZFsxXSwKLQkJICAgIGNwLT5jbW5kWzJdLCBzY3NpX2J1ZmZsZW4oY3ApLCByc3BfaW5mb19sZW4sIHJlc2lkX2xlbiwKLQkJICAgIGZ3X3Jlc2lkX2xlbikpOworCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyMiwKKwkJICAgICJGQ1AgY29tbWFuZCBzdGF0dXM6IDB4JXgtMHgleCAoMHgleCkgIgorCQkgICAgIm94aWQ9MHgleCBjZGI9JTAyeCUwMnglMDJ4IGxlbj0weCV4ICIKKwkJICAgICJyc3BfaW5mbz0weCV4IHJlc2lkPTB4JXggZndfcmVzaWQ9MHgleC5cbiIsCisJCSAgICBjb21wX3N0YXR1cywgc2NzaV9zdGF0dXMsIGNwLT5yZXN1bHQsIG94X2lkLCBjcC0+Y21uZFswXSwKKwkJICAgIGNwLT5jbW5kWzFdLCBjcC0+Y21uZFsyXSwgc2NzaV9idWZmbGVuKGNwKSwgcnNwX2luZm9fbGVuLAorCQkgICAgcmVzaWRfbGVuLCBmd19yZXNpZF9sZW4pOwogCiAJaWYgKHJzcC0+c3RhdHVzX3NyYiA9PSBOVUxMKQogCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CkBAIC0xODMwLDE2ICsxODYwLDE1IEBACiB7CiAJdWludDhfdAkJc2Vuc2Vfc3ogPSAwOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSByc3AtPmh3OworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCXNyYl90CQkqc3AgPSByc3AtPnN0YXR1c19zcmI7CiAJc3RydWN0IHNjc2lfY21uZCAqY3A7CiAKIAlpZiAoc3AgIT0gTlVMTCAmJiBzcC0+cmVxdWVzdF9zZW5zZV9sZW5ndGggIT0gMCkgewogCQljcCA9IHNwLT5jbWQ7CiAJCWlmIChjcCA9PSBOVUxMKSB7Ci0JCQlERUJVRzIocHJpbnRrKCIlcygpOiBDbWQgYWxyZWFkeSByZXR1cm5lZCBiYWNrIHRvIE9TICIKLQkJCSAgICAic3A9JXAuXG4iLCBfX2Z1bmNfXywgc3ApKTsKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiY21kIGlzIE5VTEw6IGFscmVhZHkgcmV0dXJuZWQgdG8gT1MgKHNwPSVwKVxuIiwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDMwMjUsCisJCQkgICAgImNtZCBpcyBOVUxMOiBhbHJlYWR5IHJldHVybmVkIHRvIE9TIChzcD0lcCkuXG4iLAogCQkJICAgIHNwKTsKIAogCQkJcnNwLT5zdGF0dXNfc3JiID0gTlVMTDsKQEAgLTE4NTYsNyArMTg4NSw4IEBACiAJCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKQogCQkJaG9zdF90b19mY3Bfc3dhcChwa3QtPmRhdGEsIHNpemVvZihwa3QtPmRhdGEpKTsKIAkJbWVtY3B5KHNwLT5yZXF1ZXN0X3NlbnNlX3B0ciwgcGt0LT5kYXRhLCBzZW5zZV9zeik7Ci0JCURFQlVHNShxbGEyeDAwX2R1bXBfYnVmZmVyKHNwLT5yZXF1ZXN0X3NlbnNlX3B0ciwgc2Vuc2Vfc3opKTsKKwkJcWxfZHVtcF9idWZmZXIocWxfZGJnX2lvICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDMwMmMsCisJCQlzcC0+cmVxdWVzdF9zZW5zZV9wdHIsIHNlbnNlX3N6KTsKIAogCQlzcC0+cmVxdWVzdF9zZW5zZV9wdHIgKz0gc2Vuc2Vfc3o7CiAJCXNwLT5yZXF1ZXN0X3NlbnNlX2xlbmd0aCAtPSBzZW5zZV9zejsKQEAgLTE4ODIsMjEgKzE5MTIsMjUgQEAKIAl1aW50MzJfdCBoYW5kbGUgPSBMU1cocGt0LT5oYW5kbGUpOwogCXVpbnQxNl90IHF1ZSA9IE1TVyhwa3QtPmhhbmRsZSk7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbcXVlXTsKLSNpZiBkZWZpbmVkKFFMX0RFQlVHX0xFVkVMXzIpCisKIAlpZiAocGt0LT5lbnRyeV9zdGF0dXMgJiBSRl9JTlZfRV9PUkRFUikKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsICIlczogSW52YWxpZCBFbnRyeSBPcmRlclxuIiwgX19mdW5jX18pOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAyYSwKKwkJICAgICJJbnZhbGlkIEVudHJ5IE9yZGVyLlxuIik7CiAJZWxzZSBpZiAocGt0LT5lbnRyeV9zdGF0dXMgJiBSRl9JTlZfRV9DT1VOVCkKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsICIlczogSW52YWxpZCBFbnRyeSBDb3VudFxuIiwgX19mdW5jX18pOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAyYiwKKwkJICAgICJJbnZhbGlkIEVudHJ5IENvdW50LlxuIik7CiAJZWxzZSBpZiAocGt0LT5lbnRyeV9zdGF0dXMgJiBSRl9JTlZfRV9QQVJBTSkKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiJXM6IEludmFsaWQgRW50cnkgUGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDJjLAorCQkgICAgIkludmFsaWQgRW50cnkgUGFyYW1ldGVyLlxuIik7CiAJZWxzZSBpZiAocGt0LT5lbnRyeV9zdGF0dXMgJiBSRl9JTlZfRV9UWVBFKQotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwgIiVzOiBJbnZhbGlkIEVudHJ5IFR5cGVcbiIsIF9fZnVuY19fKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwMmQsCisJCSAgICAiSW52YWxpZCBFbnRyeSBUeXBlLlxuIik7CiAJZWxzZSBpZiAocGt0LT5lbnRyeV9zdGF0dXMgJiBSRl9CVVNZKQotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwgIiVzOiBCdXN5XG4iLCBfX2Z1bmNfXyk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDJlLAorCQkgICAgIkJ1c3kuXG4iKTsKIAllbHNlCi0JCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLCAiJXM6IFVOS05PV04gZmxhZyBlcnJvclxuIiwgX19mdW5jX18pOwotI2VuZGlmCisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDJmLAorCQkgICAgIlVOS05PV04gZmxhZyBlcnJvci5cbiIpOwogCiAJLyogVmFsaWRhdGUgaGFuZGxlLiAqLwogCWlmIChoYW5kbGUgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpCkBAIC0xOTIzLDEwICsxOTU3LDggQEAKIAl9IGVsc2UgaWYgKHBrdC0+ZW50cnlfdHlwZSA9PSBDT01NQU5EX0E2NF9UWVBFIHx8IHBrdC0+ZW50cnlfdHlwZSA9PQogCQlDT01NQU5EX1RZUEUgfHwgcGt0LT5lbnRyeV90eXBlID09IENPTU1BTkRfVFlQRV83CiAJCXx8IHBrdC0+ZW50cnlfdHlwZSA9PSBDT01NQU5EX1RZUEVfNikgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIsCi0JCQl2aGEtPmhvc3Rfbm8pKTsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIkVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg1MDMwLAorCQkgICAgIkVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGUuXG4iKTsKIAogCQlpZiAoSVNfUUxBODJYWChoYSkpCiAJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTE5NjAsMTEgKzE5OTIsMTEgQEAKIAl9CiAKIAlpZiAoaGEtPm1jcCkgewotCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBHb3QgbWFpbGJveCBjb21wbGV0aW9uLiBjbWQ9JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgaGEtPm1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwNGQsCisJCSAgICAiR290IG1haWxib3ggY29tcGxldGlvbi4gY21kPSV4LlxuIiwgaGEtPm1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogTUJYIHBvaW50ZXIgRVJST1IhXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTA0ZSwKKwkJICAgICJNQlggcG9pbnRlciBFUlJPUi5cbiIpOwogCX0KIH0KIApAQCAtMTk5Myw4ICsyMDI1LDggQEAKIAkJfQogCiAJCWlmIChwa3QtPmVudHJ5X3N0YXR1cyAhPSAwKSB7Ci0JCQlERUJVRzMocHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICJzY3NpKCVsZCk6IFByb2Nlc3MgZXJyb3IgZW50cnkuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDI5LAorCQkJICAgICJQcm9jZXNzIGVycm9yIGVudHJ5LlxuIik7CiAKIAkJCXFsYTJ4MDBfZXJyb3JfZW50cnkodmhhLCByc3AsIChzdHNfZW50cnlfdCAqKSBwa3QpOwogCQkJKChyZXNwb25zZV90ICopcGt0KS0+c2lnbmF0dXJlID0gUkVTUE9OU0VfUFJPQ0VTU0VEOwpAQCAtMjAzMCwxMCArMjA2MiwxMCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBUeXBlIE5vdCBTdXBwb3J0ZWQuICovCi0JCQlERUJVRzQocHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICJzY3NpKCVsZCk6IFJlY2VpdmVkIHVua25vd24gcmVzcG9uc2UgcGt0IHR5cGUgJXggIgorCQkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwNDIsCisJCQkgICAgIlJlY2VpdmVkIHVua25vd24gcmVzcG9uc2UgcGt0IHR5cGUgJXggIgogCQkJICAgICJlbnRyeSBzdGF0dXM9JXguXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgcGt0LT5lbnRyeV90eXBlLCBwa3QtPmVudHJ5X3N0YXR1cykpOworCQkJICAgIHBrdC0+ZW50cnlfdHlwZSwgcGt0LT5lbnRyeV9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJKChyZXNwb25zZV90ICopcGt0KS0+c2lnbmF0dXJlID0gUkVTUE9OU0VfUFJPQ0VTU0VEOwpAQCAtMjA4OCw3ICsyMTIwLDggQEAKIAogbmV4dF90ZXN0OgogCWlmIChSRF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX2M4KSAmIEJJVF8zKQotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJBZGRpdGlvbmFsIGNvZGUgLS0gMHg1NUFBLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDUwNGMsCisJCSAgICAiQWRkaXRpb25hbCBjb2RlIC0tIDB4NTVBQS5cbiIpOwogCiBkb25lOgogCVdSVF9SRUdfRFdPUkQoJnJlZy0+aW9iYXNlX3dpbmRvdywgMHgwMDAwKTsKQEAgLTIxMjEsNyArMjE1NCw3IEBACiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCSAgICAiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCkBAIC0yMTQyLDggKzIxNzUsOSBAQAogCiAJCQloY2NyID0gUkRfUkVHX0RXT1JEKCZyZWctPmhjY3IpOwogCi0JCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJSSVNDIHBhdXNlZCAtLSBIQ0NSPSV4LCAiCi0JCQkgICAgIkR1bXBpbmcgZmlybXdhcmUhXG4iLCBoY2NyKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwNGIsCisJCQkgICAgIlJJU0MgcGF1c2VkIC0tIEhDQ1I9JXgsIER1bXBpbmcgZmlybXdhcmUuXG4iLAorCQkJICAgIGhjY3IpOwogCiAJCQlxbGEyeHh4X2NoZWNrX3Jpc2Nfc3RhdHVzKHZoYSk7CiAKQEAgLTIxNzQsOSArMjIwOCw4IEBACiAJCQlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFVucmVjb2duaXplZCBpbnRlcnJ1cHQgdHlwZSAiCi0JCQkgICAgIiglZCkuXG4iLAotCQkJICAgIHZoYS0+aG9zdF9ubywgc3RhdCAmIDB4ZmYpKTsKKwkJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDRmLAorCQkJICAgICJVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgKCVkKS5cbiIsIHN0YXQgKiAweGZmKTsKIAkJCWJyZWFrOwogCQl9CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKQEAgLTIyMDUsNyArMjIzOCw3IEBACiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0JCSIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJIiVzKCk6IE5VTEwgcmVzcG9uc2UgcXVldWUgcG9pbnRlci5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAloYSA9IHJzcC0+aHc7CkBAIC0yMjM1LDcgKzIyNjgsNyBAQAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzKCk6IE5VTEwgcmVzcG9uc2UgcXVldWUgcG9pbnRlclxuIiwgX19mdW5jX18pOworCQkJIiVzKCk6IE5VTEwgcmVzcG9uc2UgcXVldWUgcG9pbnRlci5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAloYSA9IHJzcC0+aHc7CkBAIC0yMjY4LDggKzIzMDEsOCBAQAogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewotCQlERUJVRyhwcmludGsoCi0JCSIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXJcbiIsIF9fZnVuY19fKSk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXIuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAJaGEgPSByc3AtPmh3OwpAQCAtMjI4Niw4ICsyMzE5LDkgQEAKIAogCQkJaGNjciA9IFJEX1JFR19EV09SRCgmcmVnLT5oY2NyKTsKIAotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUklTQyBwYXVzZWQgLS0gSENDUj0leCwgIgotCQkJICAgICJEdW1waW5nIGZpcm13YXJlIVxuIiwgaGNjcik7CisJCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg1MDUwLAorCQkJICAgICJSSVNDIHBhdXNlZCAtLSBIQ0NSPSV4LCBEdW1waW5nIGZpcm13YXJlLlxuIiwKKwkJCSAgICBoY2NyKTsKIAogCQkJcWxhMnh4eF9jaGVja19yaXNjX3N0YXR1cyh2aGEpOwogCkBAIC0yMzE4LDkgKzIzNTIsOCBAQAogCQkJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgIgotCQkJICAgICIoJWQpLlxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIHN0YXQgJiAweGZmKSk7CisJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTA1MSwKKwkJCSAgICAiVW5yZWNvZ25pemVkIGludGVycnVwdCB0eXBlICglZCkuXG4iLCBzdGF0ICYgMHhmZik7CiAJCQlicmVhazsKIAkJfQogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmhjY3IsIEhDQ1JYX0NMUl9SSVNDX0lOVCk7CkBAIC0yMzU4LDYgKzIzOTEsNyBAQAogewogCWludCBpOwogCXN0cnVjdCBxbGFfbXNpeF9lbnRyeSAqcWVudHJ5OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBoYS0+bXNpeF9jb3VudDsgaSsrKSB7CiAJCXFlbnRyeSA9ICZoYS0+bXNpeF9lbnRyaWVzW2ldOwpAQCAtMjM2OCw2ICsyNDAyLDggQEAKIAlrZnJlZShoYS0+bXNpeF9lbnRyaWVzKTsKIAloYS0+bXNpeF9lbnRyaWVzID0gTlVMTDsKIAloYS0+ZmxhZ3MubXNpeF9lbmFibGVkID0gMDsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDQyLAorCSAgICAiRGlzYWJsZWQgdGhlIE1TSS5cbiIpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzc3LDExICsyNDEzLDE1IEBACiAJaW50IGksIHJldDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllczsKIAlzdHJ1Y3QgcWxhX21zaXhfZW50cnkgKnFlbnRyeTsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAllbnRyaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpICogaGEtPm1zaXhfY291bnQsCiAJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWVudHJpZXMpCisJaWYgKCFlbnRyaWVzKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwYmMsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbXNpeF9lbnRyeS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgaGEtPm1zaXhfY291bnQ7IGkrKykKIAkJZW50cmllc1tpXS5lbnRyeSA9IGk7CkBAIC0yMzkxLDE2ICsyNDMxLDE4IEBACiAJCWlmIChyZXQgPCBNSU5fTVNJWF9DT1VOVCkKIAkJCWdvdG8gbXNpeF9mYWlsZWQ7CiAKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIk1TSS1YOiBGYWlsZWQgdG8gZW5hYmxlIHN1cHBvcnQgLS0gJWQvJWRcbiIKLQkJCSIgUmV0cnkgd2l0aCAlZCB2ZWN0b3JzXG4iLCBoYS0+bXNpeF9jb3VudCwgcmV0LCByZXQpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGM2LAorCQkgICAgIk1TSS1YOiBGYWlsZWQgdG8gZW5hYmxlIHN1cHBvcnQgIgorCQkgICAgIi0tICVkLyVkXG4gUmV0cnkgd2l0aCAlZCB2ZWN0b3JzLlxuIiwKKwkJICAgIGhhLT5tc2l4X2NvdW50LCByZXQsIHJldCk7CiAJCWhhLT5tc2l4X2NvdW50ID0gcmV0OwogCQlyZXQgPSBwY2lfZW5hYmxlX21zaXgoaGEtPnBkZXYsIGVudHJpZXMsIGhhLT5tc2l4X2NvdW50KTsKIAkJaWYgKHJldCkgewogbXNpeF9mYWlsZWQ6Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJNU0ktWDogRmFpbGVkIHRvIGVuYWJsZSIKLQkJCQkiIHN1cHBvcnQsIGdpdmluZyB1cCAtLSAlZC8lZFxuIiwKLQkJCQloYS0+bXNpeF9jb3VudCwgcmV0KTsKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMGM3LAorCQkJICAgICJNU0ktWDogRmFpbGVkIHRvIGVuYWJsZSBzdXBwb3J0LCAiCisJCQkgICAgImdpdmluZyAgIHVwIC0tICVkLyVkLlxuIiwKKwkJCSAgICBoYS0+bXNpeF9jb3VudCwgcmV0KTsKIAkJCWdvdG8gbXNpeF9vdXQ7CiAJCX0KIAkJaGEtPm1heF9yc3BfcXVldWVzID0gaGEtPm1zaXhfY291bnQgLSAxOwpAQCAtMjQwOCw2ICsyNDUwLDggQEAKIAloYS0+bXNpeF9lbnRyaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsYV9tc2l4X2VudHJ5KSAqCiAJCQkJaGEtPm1zaXhfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghaGEtPm1zaXhfZW50cmllcykgeworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDBjOCwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBoYS0+bXNpeF9lbnRyaWVzLlxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gbXNpeF9vdXQ7CiAJfQpAQCAtMjQzNCw5ICsyNDc4LDkgQEAKIAkJCQkwLCBtc2l4X2VudHJpZXNbaV0ubmFtZSwgcnNwKTsKIAkJfQogCQlpZiAocmV0KSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiTVNJLVg6IFVuYWJsZSB0byByZWdpc3RlciBoYW5kbGVyIC0tICV4LyVkLlxuIiwKLQkJCXFlbnRyeS0+dmVjdG9yLCByZXQpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwY2IsCisJCQkgICAgIk1TSS1YOiB1bmFibGUgdG8gcmVnaXN0ZXIgaGFuZGxlciAtLSAleC8lZC5cbiIsCisJCQkgICAgcWVudHJ5LT52ZWN0b3IsIHJldCk7CiAJCQlxbGEyNHh4X2Rpc2FibGVfbXNpeChoYSk7CiAJCQloYS0+bXFlbmFibGUgPSAwOwogCQkJZ290byBtc2l4X291dDsKQEAgLTI0NDksNiArMjQ5MywxMiBAQAogCS8qIEVuYWJsZSBNU0ktWCB2ZWN0b3IgZm9yIHJlc3BvbnNlIHF1ZXVlIHVwZGF0ZSBmb3IgcXVldWUgMCAqLwogCWlmIChoYS0+bXFpb2Jhc2UgJiYgIChoYS0+bWF4X3JzcF9xdWV1ZXMgPiAxIHx8IGhhLT5tYXhfcmVxX3F1ZXVlcyA+IDEpKQogCQloYS0+bXFlbmFibGUgPSAxOworCXFsX2RiZyhxbF9kYmdfbXVsdGlxLCB2aGEsIDB4YzAwNSwKKwkgICAgIm1xaW9iYXNlPSVwLCBtYXhfcnNwX3F1ZXVlcz0lZCwgbWF4X3JlcV9xdWV1ZXM9JWQuXG4iLAorCSAgICBoYS0+bXFpb2Jhc2UsIGhhLT5tYXhfcnNwX3F1ZXVlcywgaGEtPm1heF9yZXFfcXVldWVzKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDU1LAorCSAgICAibXFpb2Jhc2U9JXAsIG1heF9yc3BfcXVldWVzPSVkLCBtYXhfcmVxX3F1ZXVlcz0lZC5cbiIsCisJICAgIGhhLT5tcWlvYmFzZSwgaGEtPm1heF9yc3BfcXVldWVzLCBoYS0+bWF4X3JlcV9xdWV1ZXMpOwogCiBtc2l4X291dDoKIAlrZnJlZShlbnRyaWVzKTsKQEAgLTI0NjAsNiArMjUxMCw3IEBACiB7CiAJaW50IHJldDsKIAlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnID0gaGEtPmlvYmFzZTsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAkvKiBJZiBwb3NzaWJsZSwgZW5hYmxlIE1TSS1YLiAqLwogCWlmICghSVNfUUxBMjQzMihoYSkgJiYgIUlTX1FMQTI1MzIoaGEpICYmCkBAIC0yNDcwLDMwICsyNTIxLDI5IEBACiAJCShoYS0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDcwNDAgfHwKIAkJaGEtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg3MDQxIHx8CiAJCWhhLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MTcwNSkpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJNU0ktWDogVW5zdXBwb3J0ZWQgSVNQMjQzMiBTU1ZJRC9TU0RJRCAoMHglWCwweCVYKS5cbiIsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwMzQsCisJCSAgICAiTVNJLVg6IFVuc3VwcG9ydGVkIElTUCAyNDMyIFNTVklEL1NTRElEICgweCVYLDB4JVgpLlxuIiwKIAkJCWhhLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAotCQkJaGEtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpKTsKKwkJCWhhLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJZ290byBza2lwX21zaTsKIAl9CiAKLQlpZiAoSVNfUUxBMjQzMihoYSkgJiYgKGhhLT5wZGV2LT5yZXZpc2lvbiA8IFFMQV9NU0lYX0NISVBfUkVWXzI0WFggfHwKLQkJIVFMQV9NU0lYX0ZXX01PREVfMShoYS0+ZndfYXR0cmlidXRlcykpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSJNU0ktWDogVW5zdXBwb3J0ZWQgSVNQMjQzMiAoMHglWCwgMHglWCkuXG4iLAotCQkJaGEtPnBkZXYtPnJldmlzaW9uLCBoYS0+ZndfYXR0cmlidXRlcykpOworCWlmIChJU19RTEEyNDMyKGhhKSAmJiAoaGEtPnBkZXYtPnJldmlzaW9uIDwgUUxBX01TSVhfQ0hJUF9SRVZfMjRYWCkpIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDAzNSwKKwkJICAgICJNU0ktWDsgVW5zdXBwb3J0ZWQgSVNQMjQzMiAoMHglWCwgMHglWCkuXG4iLAorCQkgICAgaGEtPnBkZXYtPnJldmlzaW9uLCBRTEFfTVNJWF9DSElQX1JFVl8yNFhYKTsKIAkJZ290byBza2lwX21zaXg7CiAJfQogCiAJcmV0ID0gcWxhMjR4eF9lbmFibGVfbXNpeChoYSwgcnNwKTsKIAlpZiAoIXJldCkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgIk1TSS1YOiBFbmFibGVkICgweCVYLCAweCVYKS5cbiIsIGhhLT5jaGlwX3JldmlzaW9uLAotCQkgICAgaGEtPmZ3X2F0dHJpYnV0ZXMpKTsKKwkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDAzNiwKKwkJICAgICJNU0ktWDogRW5hYmxlZCAoMHglWCwgMHglWCkuXG4iLAorCQkgICAgaGEtPmNoaXBfcmV2aXNpb24sIGhhLT5md19hdHRyaWJ1dGVzKTsKIAkJZ290byBjbGVhcl9yaXNjX2ludHM7CiAJfQotCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkgICAgIk1TSS1YOiBGYWxsaW5nIGJhY2stdG8gTVNJIG1vZGUgLS0gJWQuXG4iLCByZXQpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwMzcsCisJICAgICJNU0ktWCBGYWxsaW5nIGJhY2stdG8gTVNJIG1vZGUgLSVkLlxuIiwgcmV0KTsKIHNraXBfbXNpeDoKIAogCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1MzIoaGEpICYmICFJU19RTEE4NDMyKGhhKSAmJgpAQCAtMjUwMiwxOCArMjU1MiwxOSBAQAogCiAJcmV0ID0gcGNpX2VuYWJsZV9tc2koaGEtPnBkZXYpOwogCWlmICghcmV0KSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJNU0k6IEVuYWJsZWQuXG4iKSk7CisJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwMzgsCisJCSAgICAiTVNJOiBFbmFibGVkLlxuIik7CiAJCWhhLT5mbGFncy5tc2lfZW5hYmxlZCA9IDE7CiAJfSBlbHNlCi0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJNU0ktWDogRmFsbGluZyBiYWNrLXRvIElOVGEgbW9kZSAtLSAlZC5cbiIsIHJldCk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwMzksCisJCSAgICAiTVNJLVg7IEZhbGxpbmcgYmFjay10byBJTlRhIG1vZGUgLS0gJWQuXG4iLCByZXQpOwogc2tpcF9tc2k6CiAKIAlyZXQgPSByZXF1ZXN0X2lycShoYS0+cGRldi0+aXJxLCBoYS0+aXNwX29wcy0+aW50cl9oYW5kbGVyLAogCSAgICBoYS0+ZmxhZ3MubXNpX2VuYWJsZWQgPyAwIDogSVJRRl9TSEFSRUQsCiAJICAgIFFMQTJYWFhfRFJJVkVSX05BTUUsIHJzcCk7CiAJaWYgKHJldCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwM2EsCiAJCSAgICAiRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKIAkJICAgIGhhLT5wZGV2LT5pcnEpOwogCQlnb3RvIGZhaWw7CkBAIC0yNTYzLDEzICsyNjE0LDE0IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHJzcC0+aHc7CiAJc3RydWN0IHFsYV9pbml0X21zaXhfZW50cnkgKmludHIgPSAmbXNpeF9lbnRyaWVzWzJdOwogCXN0cnVjdCBxbGFfbXNpeF9lbnRyeSAqbXNpeCA9IHJzcC0+bXNpeDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAJaW50IHJldDsKIAogCXJldCA9IHJlcXVlc3RfaXJxKG1zaXgtPnZlY3RvciwgaW50ci0+aGFuZGxlciwgMCwgaW50ci0+bmFtZSwgcnNwKTsKIAlpZiAocmV0KSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJNU0ktWDogVW5hYmxlIHRvIHJlZ2lzdGVyIGhhbmRsZXIgLS0gJXgvJWQuXG4iLAotCQkJbXNpeC0+dmVjdG9yLCByZXQpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDBlNiwKKwkJICAgICJNU0ktWDogVW5hYmxlIHRvIHJlZ2lzdGVyIGhhbmRsZXIgLS0gJXgvJWQuXG4iLAorCQkgICAgbXNpeC0+dmVjdG9yLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAltc2l4LT5oYXZlX2lycSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggYzI2ZjBhYy4uZjc2MDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtNDYsMTQgKzQ2LDE4IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc2NzaV9xbGFfaG9zdF90ICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKLQlpZiAoaGEtPnBkZXYtPmVycm9yX3N0YXRlID4gcGNpX2NoYW5uZWxfaW9fZnJvemVuKQorCXFsX2RiZyhxbF9kYmdfbWJ4LCBiYXNlX3ZoYSwgMHgxMDAwLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKworCWlmIChoYS0+cGRldi0+ZXJyb3Jfc3RhdGUgPiBwY2lfY2hhbm5lbF9pb19mcm96ZW4pIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgxMDAxLAorCQkgICAgImVycm9yX3N0YXRlIGlzIGdyZWF0ZXIgdGhhbiBwY2lfY2hhbm5lbF9pb19mcm96ZW4sICIKKwkJICAgICJleGl0aW5nLlxuIik7CiAJCXJldHVybiBRTEFfRlVOQ1RJT05fVElNRU9VVDsKKwl9CiAKIAlpZiAodmhhLT5kZXZpY2VfZmxhZ3MgJiBERkxHX0RFVl9GQUlMRUQpIHsKLQkJREVCVUcyXzNfMTEocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIiVzKCVsZCk6IERldmljZSBpbiBmYWlsZWQgc3RhdGUsICIKLQkJCSJ0aW1lb3V0IE1CWCBFeGl0aW5nLlxuIiwKLQkJCV9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIGJhc2VfdmhhLCAweDEwMDIsCisJCSAgICAiRGV2aWNlIGluIGZhaWxlZCBzdGF0ZSwgZXhpdGluZy5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX1RJTUVPVVQ7CiAJfQogCkBAIC02MywxNyArNjcsMTggQEAKIAlydmFsID0gUUxBX1NVQ0NFU1M7CiAJYWJvcnRfYWN0aXZlID0gdGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8pKTsKIAogCWlmIChoYS0+ZmxhZ3MucGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7Ci0JCURFQlVHKHByaW50aygiJXMoJWxkKTogUGVybSBmYWlsdXJlIG9uIEVFSCwgdGltZW91dCBNQlggIgotCQkJICAgICAiRXhpdGluZy5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgxMDAzLAorCQkgICAgIlBlcm0gZmFpbHVyZSBvbiBFRUggdGltZW91dCBNQlgsIGV4aXRpbmcuXG4iKTsKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9USU1FT1VUOwogCX0KIAogCWlmIChoYS0+ZmxhZ3MuaXNwODJ4eF9md19odW5nKSB7CiAJCS8qIFNldHRpbmcgTGluay1Eb3duIGVycm9yICovCiAJCW1jcC0+bWJbMF0gPSBNQlNfTElOS19ET1dOX0VSUk9SOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIGJhc2VfdmhhLCAweDEwMDQsCisJCSAgICAiRlcgaHVuZyA9ICVkLlxuIiwgaGEtPmZsYWdzLmlzcDgyeHhfZndfaHVuZyk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQlnb3RvIHByZW1hdHVyZV9leGl0OwogCX0KQEAgLTg1LDggKzkwLDggQEAKIAkgKi8KIAlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaGEtPm1ieF9jbWRfY29tcCwgbWNwLT50b3YgKiBIWikpIHsKIAkJLyogVGltZW91dCBvY2N1cnJlZC4gUmV0dXJuIGVycm9yLiAqLwotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGNtZCBhY2Nlc3MgdGltZW91dC4gIgotCQkgICAgIkV4aXRpbmcuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgxMDA1LAorCQkgICAgIkNtZCBhY2Nlc3MgdGltZW91dCwgRXhpdGluZy5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX1RJTUVPVVQ7CiAJfQogCkBAIC05NCw4ICs5OSw4IEBACiAJLyogU2F2ZSBtYWlsYm94IGNvbW1hbmQgZm9yIGRlYnVnICovCiAJaGEtPm1jcCA9IG1jcDsKIAotCURFQlVHMTEocHJpbnRrKCJzY3NpKCVsZCk6IHByZXBhcmUgdG8gaXNzdWUgbWJveCBjbWQ9MHgleC5cbiIsCi0JICAgIGJhc2VfdmhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMDYsCisJICAgICJQcmVwYXJlIHRvIGlzc3VlIG1ib3ggY21kPTB4JXguXG4iLCBtY3AtPm1iWzBdKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCkBAIC0xMjMsMjcgKzEyOCwzMCBAQAogCQlpcHRyKys7CiAJfQogCi0jaWYgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8xKQotCXByaW50aygiJXMoJWxkKTogTG9hZGVkIE1CWCByZWdpc3RlcnMgKGRpc3BsYXllZCBpbiBieXRlcykgPSBcbiIsCi0JICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubyk7Ci0JcWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1jcC0+bWIsIDE2KTsKLQlwcmludGsoIlxuIik7Ci0JcWxhMngwMF9kdW1wX2J1ZmZlcigoKHVpbnQ4X3QgKiltY3AtPm1iICsgMHgxMCksIDE2KTsKLQlwcmludGsoIlxuIik7Ci0JcWxhMngwMF9kdW1wX2J1ZmZlcigoKHVpbnQ4X3QgKiltY3AtPm1iICsgMHgyMCksIDgpOwotCXByaW50aygiXG4iKTsKLQlwcmludGsoIiVzKCVsZCk6IEkvTyBhZGRyZXNzID0gJXAuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8sCi0JCW9wdHIpOwotCXFsYTJ4MDBfZHVtcF9yZWdzKGJhc2VfdmhhKTsKLSNlbmRpZgorCXFsX2RiZyhxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgYmFzZV92aGEsIDB4MTExMSwKKwkgICAgIkxvYWRlZCBNQlggcmVnaXN0ZXJzIChkaXNwbGF5ZWQgaW4gYnl0ZXMpID0uXG4iKTsKKwlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgYmFzZV92aGEsIDB4MTExMiwKKwkgICAgKHVpbnQ4X3QgKiltY3AtPm1iLCAxNik7CisJcWxfZGJnKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCBiYXNlX3ZoYSwgMHgxMTEzLAorCSAgICAiLlxuIik7CisJcWxfZHVtcF9idWZmZXIocWxfZGJnX21ieCArIHFsX2RiZ19idWZmZXIsIGJhc2VfdmhhLCAweDExMTQsCisJICAgICgodWludDhfdCAqKW1jcC0+bWIgKyAweDEwKSwgMTYpOworCXFsX2RiZyhxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgYmFzZV92aGEsIDB4MTExNSwKKwkgICAgIi5cbiIpOworCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCBiYXNlX3ZoYSwgMHgxMTE2LAorCSAgICAoKHVpbnQ4X3QgKiltY3AtPm1iICsgMHgyMCksIDgpOworCXFsX2RiZyhxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgYmFzZV92aGEsIDB4MTExNywKKwkgICAgIkkvTyBBZGRyZXNzID0gJXAuXG4iLCBvcHRyKTsKKwlxbF9kdW1wX3JlZ3MocWxfZGJnX21ieCArIHFsX2RiZ19idWZmZXIsIGJhc2VfdmhhLCAweDEwMGUpOwogCiAJLyogSXNzdWUgc2V0IGhvc3QgaW50ZXJydXB0IGNvbW1hbmQgdG8gc2VuZCBjbWQgb3V0LiAqLwogCWhhLT5mbGFncy5tYm94X2ludCA9IDA7CiAJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAKIAkvKiBVbmxvY2sgbWJ4IHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IgaW50ZXJydXB0ICovCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGdvaW5nIHRvIHVubG9jayBpcnEgJiB3YWl0aW5nIGZvciBpbnRlcnJ1cHQuICIKLQkgICAgImppZmZpZXM9JWx4LlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vLCBqaWZmaWVzKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMGYsCisJICAgICJHb2luZyB0byB1bmxvY2sgaXJxICYgd2FpdGluZyBmb3IgaW50ZXJydXB0cy4gIgorCSAgICAiamlmZmllcz0lbHguXG4iLCBqaWZmaWVzKTsKIAogCS8qIFdhaXQgZm9yIG1ieCBjbWQgY29tcGxldGlvbiB1bnRpbCB0aW1lb3V0ICovCiAKQEAgLTE1NSw5ICsxNjMsOCBAQAogCQkJCUhJTlRfTUJYX0lOVF9QRU5ESU5HKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssCiAJCQkJCWZsYWdzKTsKLQkJCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICIlcyglbGQpOiBQZW5kaW5nIE1haWxib3ggdGltZW91dC4gIgotCQkJCSAgICAiRXhpdGluZy5cbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfbWJ4LCBiYXNlX3ZoYSwgMHgxMDEwLAorCQkJCSAgICAiUGVuZGluZyBtYWlsYm94IHRpbWVvdXQsIGV4aXRpbmcuXG4iKTsKIAkJCQlydmFsID0gUUxBX0ZVTkNUSU9OX1RJTUVPVVQ7CiAJCQkJZ290byBwcmVtYXR1cmVfZXhpdDsKIAkJCX0KQEAgLTE3MywxNyArMTgwLDE2IEBACiAJCWNsZWFyX2JpdChNQlhfSU5UUl9XQUlULCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCiAJfSBlbHNlIHsKLQkJREVCVUczXzExKHByaW50aygiJXMoJWxkKTogY21kPSV4IFBPTExJTkcgTU9ERS5cbiIsIF9fZnVuY19fLAotCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8sIGNvbW1hbmQpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMTEsCisJCSAgICAiQ21kPSV4IFBvbGxpbmcgTW9kZS5cbiIsIGNvbW1hbmQpOwogCiAJCWlmIChJU19RTEE4MlhYKGhhKSkgewogCQkJaWYgKFJEX1JFR19EV09SRCgmcmVnLT5pc3A4Mi5oaW50KSAmCiAJCQkJSElOVF9NQlhfSU5UX1BFTkRJTkcpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywKIAkJCQkJZmxhZ3MpOwotCQkJCURFQlVHMl8zXzExKHByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgIiVzKCVsZCk6IFBlbmRpbmcgTWFpbGJveCB0aW1lb3V0LiAiCi0JCQkJICAgICJFeGl0aW5nLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMTIsCisJCQkJICAgICJQZW5kaW5nIG1haWxib3ggdGltZW91dCwgZXhpdGluZy5cbiIpOwogCQkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fVElNRU9VVDsKIAkJCQlnb3RvIHByZW1hdHVyZV9leGl0OwogCQkJfQpAQCAtMjA3LDE3ICsyMTMsMTcgQEAKIAkJCSAgICBjb21tYW5kID09IE1CQ19MT0FEX1JJU0NfUkFNX0VYVEVOREVEKSkKIAkJCQltc2xlZXAoMTApOwogCQl9IC8qIHdoaWxlICovCi0JCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIldhaXRlZCAlZCBzZWNcbiIsCi0JCQkodWludCkoKGppZmZpZXMgLSAod2FpdF90aW1lIC0gKG1jcC0+dG92ICogSFopKSkvSFopKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCBiYXNlX3ZoYSwgMHgxMDEzLAorCQkgICAgIldhaXRlZCAlZCBzZWMuXG4iLAorCQkgICAgKHVpbnQpKChqaWZmaWVzIC0gKHdhaXRfdGltZSAtIChtY3AtPnRvdiAqIEhaKSkpL0haKSk7CiAJfQogCiAJLyogQ2hlY2sgd2hldGhlciB3ZSB0aW1lZCBvdXQgKi8KIAlpZiAoaGEtPmZsYWdzLm1ib3hfaW50KSB7CiAJCXVpbnQxNl90ICppcHRyMjsKIAotCQlERUJVRzNfMTEocHJpbnRrKCIlcyglbGQpOiBjbWQgJXggY29tcGxldGVkLlxuIiwgX19mdW5jX18sCi0JCSAgICBiYXNlX3ZoYS0+aG9zdF9ubywgY29tbWFuZCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgYmFzZV92aGEsIDB4MTAxNCwKKwkJICAgICJDbWQ9JXggY29tcGxldGVkLlxuIiwgY29tbWFuZCk7CiAKIAkJLyogR290IGludGVycnVwdC4gQ2xlYXIgdGhlIGZsYWcuICovCiAJCWhhLT5mbGFncy5tYm94X2ludCA9IDA7CkBAIC0yMjksNiArMjM1LDggQEAKIAkJCW1jcC0+bWJbMF0gPSBNQlNfTElOS19ET1dOX0VSUk9SOwogCQkJaGEtPm1jcCA9IE5VTEw7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgYmFzZV92aGEsIDB4MTAxNSwKKwkJCSAgICAiRlcgaHVuZyA9ICVkLlxuIiwgaGEtPmZsYWdzLmlzcDgyeHhfZndfaHVuZyk7CiAJCQlnb3RvIHByZW1hdHVyZV9leGl0OwogCQl9CiAKQEAgLTI0OSw4ICsyNTcsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMikgfHwgZGVmaW5lZChRTF9ERUJVR19MRVZFTF8zKSB8fCBcCi0JCWRlZmluZWQoUUxfREVCVUdfTEVWRUxfMTEpCiAJCXVpbnQxNl90IG1iMDsKIAkJdWludDMyX3QgaWN0cmw7CiAKQEAgLTI2MSwxNCArMjY3LDEzIEBACiAJCQltYjAgPSBSRF9NQUlMQk9YX1JFRyhoYSwgJnJlZy0+aXNwLCAwKTsKIAkJCWljdHJsID0gUkRfUkVHX1dPUkQoJnJlZy0+aXNwLmljdHJsKTsKIAkJfQotCQlwcmludGsoIiVzKCVsZCk6ICoqKiogTUIgQ29tbWFuZCBUaW1lb3V0IGZvciBjbWQgJXggKioqKlxuIiwKLQkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubywgY29tbWFuZCk7Ci0JCXByaW50aygiJXMoJWxkKTogaWNvbnRyb2w9JXggamlmZmllcz0lbHhcbiIsIF9fZnVuY19fLAotCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8sIGljdHJsLCBqaWZmaWVzKTsKLQkJcHJpbnRrKCIlcyglbGQpOiAqKiogbWFpbGJveFswXSA9IDB4JXggKioqXG4iLCBfX2Z1bmNfXywKLQkJICAgIGJhc2VfdmhhLT5ob3N0X25vLCBtYjApOwotCQlxbGEyeDAwX2R1bXBfcmVncyhiYXNlX3ZoYSk7Ci0jZW5kaWYKKwkJcWxfZGJnKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCBiYXNlX3ZoYSwgMHgxMTE5LAorCQkgICAgIk1CWCBDb21tYW5kIHRpbWVvdXQgZm9yIGNtZCAleC5cbiIsIGNvbW1hbmQpOworCQlxbF9kYmcocWxfZGJnX21ieCArIHFsX2RiZ19idWZmZXIsIGJhc2VfdmhhLCAweDExMWEsCisJCSAgICAiaW9jb250cm9sPSV4IGppZmZpZXM9JWx4LlxuIiwgaWN0cmwsIGppZmZpZXMpOworCQlxbF9kYmcocWxfZGJnX21ieCArIHFsX2RiZ19idWZmZXIsIGJhc2VfdmhhLCAweDExMWIsCisJCSAgICAibWJbMF0gPSAweCV4LlxuIiwgbWIwKTsKKwkJcWxfZHVtcF9yZWdzKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCBiYXNlX3ZoYSwgMHgxMDE5KTsKIAogCQlydmFsID0gUUxBX0ZVTkNUSU9OX1RJTUVPVVQ7CiAJfQpAQCAtMjc5LDggKzI4NCw4IEBACiAJaGEtPm1jcCA9IE5VTEw7CiAKIAlpZiAoKGFib3J0X2FjdGl2ZSB8fCAhaW9fbG9ja19vbikgJiYgIUlTX05PUE9MTElOR19UWVBFKGhhKSkgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgcmVzcCAiCi0JCSAgICAiaW50ZXJydXB0LlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCBiYXNlX3ZoYSwgMHgxMDFhLAorCQkgICAgIkNoZWNraW5nIGZvciBhZGRpdGlvbmFsIHJlc3AgaW50ZXJydXB0LlxuIik7CiAKIAkJLyogcG9sbGluZyBtb2RlIGZvciBub24gaXNwX2Fib3J0IGNvbW1hbmRzLiAqLwogCQlxbGEyeDAwX3BvbGwoaGEtPnJzcF9xX21hcFswXSk7CkBAIC0yOTEsMzggKzI5NiwzMiBAQAogCQlpZiAoIWlvX2xvY2tfb24gfHwgKG1jcC0+ZmxhZ3MgJiBJT0NUTF9DTUQpIHx8CiAJCSAgICBoYS0+ZmxhZ3MuZWVoX2J1c3kpIHsKIAkJCS8qIG5vdCBpbiBkcGMuIHNjaGVkdWxlIGl0IGZvciBkcGMgdG8gdGFrZSBvdmVyLiAqLwotCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IHNjaGVkdWxlICIKLQkJCSJpc3BfYWJvcnRfbmVlZGVkLlxuIiwgX19mdW5jX18sCi0JCQliYXNlX3ZoYS0+aG9zdF9ubykpOwotCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IHNjaGVkdWxlICIKLQkJCSJpc3BfYWJvcnRfbmVlZGVkLlxuIiwgX19mdW5jX18sCi0JCQliYXNlX3ZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMWIsCisJCQkgICAgIlRpbWVvdXQsIHNjaGVkdWxlIGlzcF9hYm9ydF9uZWVkZWQuXG4iKTsKIAogCQkJaWYgKCF0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpICYmCiAJCQkgICAgIXRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgJiYKIAkJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJNYWlsYm94IGNvbW1hbmQgdGltZW91dCBvY2N1cnJlZC4gIgotCQkJCSAgICAiU2NoZWR1bGluZyBJU1AgIiAiYWJvcnQuIGVlaF9idXN5OiAweCV4XG4iLAotCQkJCSAgICBoYS0+ZmxhZ3MuZWVoX2J1c3kpOworCQkJCXFsX2xvZyhxbF9sb2dfaW5mbywgYmFzZV92aGEsIDB4MTAxYywKKwkJCQkgICAgIk1haWxib3ggY21kIHRpbWVvdXQgb2NjdXJlZC4gIgorCQkJCSAgICAiU2NoZWR1bGluZyBJU1AgYWJvcnQgZWVoX2J1c3k9MHgleC5cbiIsCisJCQkJCWhhLT5mbGFncy5lZWhfYnVzeSk7CiAJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAkJCX0KIAkJfSBlbHNlIGlmICghYWJvcnRfYWN0aXZlKSB7CiAJCQkvKiBjYWxsIGFib3J0IGRpcmVjdGx5IHNpbmNlIHdlIGFyZSBpbiB0aGUgRFBDIHRocmVhZCAqLwotCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgYWJvcnRfaXNwXG4iLAotCQkJICAgIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwotCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgIgotCQkJICAgICJhYm9ydF9pc3BcbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMWQsCisJCQkgICAgIlRpbWVvdXQsIGNhbGxpbmcgYWJvcnRfaXNwLlxuIik7CiAKIAkJCWlmICghdGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSAmJgogCQkJICAgICF0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpICYmCiAJCQkgICAgIXRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCi0JCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJyZWQuICIKLQkJCQkgICAgIklzc3VpbmcgSVNQIGFib3J0LlxuIik7CisJCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCBiYXNlX3ZoYSwgMHgxMDFlLAorCQkJCSAgICAiTWFpbGJveCBjbWQgdGltZW91dCBvY2N1cmVkLiAiCisJCQkJICAgICJTY2hlZHVsaW5nIElTUCBhYm9ydC5cbiIpOwogCiAJCQkJc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJCWNsZWFyX2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwpAQCAtMzMyLDExICszMzEsOCBAQAogCQkJCQkgICAgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCQl9CiAJCQkJY2xlYXJfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncyk7Ci0JCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiBmaW5pc2hlZCBhYm9ydF9pc3BcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQkJCQlERUJVRzJfM18xMShwcmludGsoCi0JCQkJICAgICIlcyglbGQpOiBmaW5pc2hlZCBhYm9ydF9pc3BcbiIsCi0JCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJCQlxbF9kYmcocWxfZGJnX21ieCwgYmFzZV92aGEsIDB4MTAxZiwKKwkJCQkgICAgIkZpbmlzaGVkIGFib3J0X2lzcC5cbiIpOwogCQkJfQogCQl9CiAJfQpAQCAtMzQ2LDEyICszNDIsMTEgQEAKIAljb21wbGV0ZSgmaGEtPm1ieF9jbWRfY29tcCk7CiAKIAlpZiAocnZhbCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6ICoqKiogRkFJTEVELiBtYngwPSV4LCBtYngxPSV4LCAiCi0JCSAgICAibWJ4Mj0leCwgY21kPSV4ICoqKipcbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubywKLQkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0sIGNvbW1hbmQpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIGJhc2VfdmhhLCAweDEwMjAsCisJCSAgICAiKioqKiBGYWlsZWQgbWJ4WzBdPSV4LCBtYlsxXT0leCwgbWJbMl09JXgsIGNtZD0leCAqKioqLlxuIiwKKwkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0sIGNvbW1hbmQpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sCi0JCWJhc2VfdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCBiYXNlX3ZoYSwgMHgxMDIxLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTM2Niw3ICszNjEsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyMiwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoTVNXKHJpc2NfYWRkcikgfHwgSVNfRldJMl9DQVBBQkxFKGhhKSkgewogCQltY3AtPm1iWzBdID0gTUJDX0xPQURfUklTQ19SQU1fRVhURU5ERUQ7CkBAIC0zOTcsMTAgKzM5MiwxMCBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBtYlswXT0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyMywKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDI0LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTQzMCw3ICs0MjUsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyNSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0VYRUNVVEVfRklSTVdBUkU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTQ2MSwxNSArNDU2LDE0IEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDI2LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7CiAJCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7Ci0JCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZSBleGNoYW5nZXM9JXguXG4iLAotCQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIG1jcC0+bWJbMV0pKTsKKwkJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyNywKKwkJCSAgICAiRG9uZSBleGNoYW5nZXM9JXguXG4iLCBtY3AtPm1iWzFdKTsKIAkJfSBlbHNlIHsKLQkJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sCi0JCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMjgsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCQl9CiAJfQogCkBAIC01MDEsNyArNDk1LDcgQEAKIAltYnhfY21kX3QJbWM7CiAJbWJ4X2NtZF90CSptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMjksICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfRklSTVdBUkVfVkVSU0lPTjsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtNTM1LDExICs1MjksMTAgQEAKIGZhaWxlZDoKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMmEsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewogCQkvKkVNUFRZKi8KLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyYiwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCXJldHVybiBydmFsOwogfQpAQCAtNTY1LDcgKzU1OCw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDJjLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfR0VUX0ZJUk1XQVJFX09QVElPTjsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtNTc2LDE1ICs1NjksMTQgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyZCwgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7CiAJCWZ3b3B0c1swXSA9IG1jcC0+bWJbMF07CiAJCWZ3b3B0c1sxXSA9IG1jcC0+bWJbMV07CiAJCWZ3b3B0c1syXSA9IG1jcC0+bWJbMl07CiAJCWZ3b3B0c1szXSA9IG1jcC0+bWJbM107CiAKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAyZSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC02MTIsNyArNjA0LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMmYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19TRVRfRklSTVdBUkVfT1BUSU9OOwogCW1jcC0+bWJbMV0gPSBmd29wdHNbMV07CkBAIC02MzYsMTEgKzYyOCwxMSBAQAogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4ICgleC8leCkuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMzAsCisJCSAgICAiRmFpbGVkPSV4ICgleC8leCkuXG4iLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTsKIAl9IGVsc2UgewogCQkvKkVNUFRZKi8KLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzMSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC02NjgsNyArNjYwLDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9tYnhfcmVnX3Rlc3QoJWxkKTogZW50ZXJlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzMiwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX01BSUxCT1hfUkVHSVNURVJfVEVTVDsKIAltY3AtPm1iWzFdID0gMHhBQUFBOwpAQCAtNjk1LDEyICs2ODcsMTAgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfbWJ4X3JlZ190ZXN0KCVsZCk6IGZhaWxlZD0leC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDMzLCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX21ieF9yZWdfdGVzdCglbGQpOiBkb25lLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMzQsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtNzI4LDcgKzcxOCw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDM1LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfVkVSSUZZX0NIRUNLU1VNOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CkBAIC03NDksMTEgKzczOSwxMSBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBjaGsgc3VtPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIElTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSA/Ci0JCSAgICAobWNwLT5tYlsyXSA8PCAxNikgfCBtY3AtPm1iWzFdOiBtY3AtPm1iWzFdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzNiwKKwkJICAgICJGYWlsZWQ9JXggY2htIHN1bT0leC5cbiIsIHJ2YWwsIElTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSA/CisJCSAgICAobWNwLT5tYlsyXSA8PCAxNikgfCBtY3AtPm1iWzFdIDogbWNwLT5tYlsxXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzNywgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC03ODUsNiArNzc1LDggQEAKIAltYnhfY21kX3QJbWM7CiAJbWJ4X2NtZF90CSptY3AgPSAmbWM7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMzgsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJbWNwLT5tYlswXSA9IE1CQ19JT0NCX0NPTU1BTkRfQTY0OwogCW1jcC0+bWJbMV0gPSAwOwogCW1jcC0+bWJbMl0gPSBNU1cocGh5c19hZGRyKTsKQEAgLTc5OSwxNCArNzkxLDE0IEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcocHJpbnRrKCJxbGEyeDAwX2lzc3VlX2lvY2IoJWxkKTogZmFpbGVkIHJ2YWwgMHgleFxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMzksICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewogCQlzdHNfZW50cnlfdCAqc3RzX2VudHJ5ID0gKHN0c19lbnRyeV90ICopIGJ1ZmZlcjsKIAogCQkvKiBNYXNrIHJlc2VydmVkIGJpdHMuICovCiAJCXN0c19lbnRyeS0+ZW50cnlfc3RhdHVzICY9CiAJCSAgICBJU19GV0kyX0NBUEFCTEUodmhhLT5odykgPyBSRl9NQVNLXzI0WFggOiBSRl9NQVNLOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwM2EsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtODQ3LDcgKzgzOSw3IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IHZoYS0+cmVxOwogCi0JREVCVUcxMShwcmludGsoInFsYTJ4MDBfYWJvcnRfY29tbWFuZCglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDNiLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCWZvciAoaGFuZGxlID0gMTsgaGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBoYW5kbGUrKykgewpAQCAtODc2LDExICs4NjgsOSBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfYWJvcnRfY29tbWFuZCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzYywgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Fib3J0X2NvbW1hbmQoJWxkKTogZG9uZS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDNkLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTg5NiwxMCArODg2LDExIEBACiAJc3RydWN0IHJlcV9xdWUgKnJlcTsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgZmNwb3J0LT52aGEtPmhvc3Rfbm8pKTsKLQogCWwgPSBsOwogCXZoYSA9IGZjcG9ydC0+dmhhOworCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDNlLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCXJlcSA9IHZoYS0+aHctPnJlcV9xX21hcFswXTsKIAlyc3AgPSByZXEtPnJzcDsKIAltY3AtPm1iWzBdID0gTUJDX0FCT1JUX1RBUkdFVDsKQEAgLTkxOSwxOCArOTEwLDE3IEBACiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAzZiwgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0KIAogCS8qIElzc3VlIG1hcmtlciBJT0NCLiAqLwogCXJ2YWwyID0gcWxhMngwMF9tYXJrZXIodmhhLCByZXEsIHJzcCwgZmNwb3J0LT5sb29wX2lkLCAwLAogCQkJCQkJCU1LX1NZTkNfSUQpOwogCWlmIChydmFsMiAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBNYXJrZXIgSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwyKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0MCwKKwkJICAgICJGYWlsZWQgdG8gaXNzdWUgbWFya2VyIElPQ0IgKCV4KS5cbiIsIHJ2YWwyKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDQxLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTk0Niw5ICs5MzYsMTAgQEAKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBmY3BvcnQtPnZoYS0+aG9zdF9ubykpOwotCiAJdmhhID0gZmNwb3J0LT52aGE7CisKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNDIsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJcmVxID0gdmhhLT5ody0+cmVxX3FfbWFwWzBdOwogCXJzcCA9IHJlcS0+cnNwOwogCW1jcC0+bWJbMF0gPSBNQkNfTFVOX1JFU0VUOwpAQCAtOTY2LDE4ICs5NTcsMTcgQEAKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDQzLCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJfQogCiAJLyogSXNzdWUgbWFya2VyIElPQ0IuICovCiAJcnZhbDIgPSBxbGEyeDAwX21hcmtlcih2aGEsIHJlcSwgcnNwLCBmY3BvcnQtPmxvb3BfaWQsIGwsCiAJCQkJCQkJCU1LX1NZTkNfSURfTFVOKTsKIAlpZiAocnZhbDIgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgTWFya2VyIElPQ0IgIgotCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsMikpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNDQsCisJCSAgICAiRmFpbGVkIHRvIGlzc3VlIG1hcmtlciBJT0NCICgleCkuXG4iLCBydmFsMik7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0NSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xMDExLDggKzEwMDEsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9hZGFwdGVyX2lkKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNDYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfQURBUFRFUl9MT09QX0lEOwogCW1jcC0+bWJbOV0gPSB2aGEtPnZwX2lkeDsKQEAgLTEwMzgsMTEgKzEwMjcsOSBAQAogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9nZXRfYWRhcHRlcl9pZCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0NywgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9hZGFwdGVyX2lkKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0OCwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAkJaWYgKElTX1FMQThYWFhfVFlQRSh2aGEtPmh3KSkgewogCQkJdmhhLT5mY29lX3ZsYW5faWQgPSBtY3AtPm1iWzldICYgMHhmZmY7CkBAIC0xMDgzLDggKzEwNzAsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9yZXRyeV9jbnQoJWxkKTogZW50ZXJlZC5cbiIsCi0JCQl2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNDksICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfUkVUUllfQ09VTlQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTEwOTUsOCArMTA4MSw4IEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2dldF9yZXRyeV9jbnQoJWxkKTogZmFpbGVkID0gJXguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0YSwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKIAl9IGVsc2UgewogCQkvKiBDb252ZXJ0IHJldHVybmVkIGRhdGEgYW5kIGNoZWNrIG91ciB2YWx1ZXMuICovCiAJCSpyX2FfdG92ID0gbWNwLT5tYlszXSAvIDI7CkBAIC0xMTA3LDggKzEwOTMsOCBAQAogCQkJKnRvdiA9IHJhdG92OwogCQl9CiAKLQkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfZ2V0X3JldHJ5X2NudCglbGQpOiBkb25lLiBtYjM9JWQgIgotCQkgICAgInJhdG92PSVkLlxuIiwgdmhhLT5ob3N0X25vLCBtY3AtPm1iWzNdLCByYXRvdikpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNGIsCisJCSAgICAiRG9uZSAlcyBtYjM9JWQgcmF0b3Y9JWQuXG4iLCBfX2Z1bmNfXywgbWNwLT5tYlszXSwgcmF0b3YpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMTEzOSw4ICsxMTI1LDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2luaXRfZmlybXdhcmUoJWxkKTogZW50ZXJlZC5cbiIsCi0JICAgIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0YywgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoSVNfUUxBODJYWChoYSkgJiYgcWwyeGRid3IpCiAJCXFsYTgyeHhfd3JfMzIoaGEsIGhhLT5ueGRiX3dyX3B0ciwKQEAgLTExNzQsMTMgKzExNTksMTEgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfaW5pdF9maXJtd2FyZSglbGQpOiBmYWlsZWQ9JXggIgotCQkgICAgIm1iMD0leC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDRkLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9pbml0X2Zpcm13YXJlKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA0ZSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xMjEzLDEzICsxMTk2LDEzIEBACiAJZG1hX2FkZHJfdCBwZF9kbWE7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNGYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJcGQyNCA9IE5VTEw7CiAJcGQgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnBkX2RtYSk7CiAJaWYgKHBkICA9PSBOVUxMKSB7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIFBvcnQgRGF0YWJhc2UgIgotCQkgICAgInN0cnVjdHVyZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MTA1MCwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9ydCBkYXRhYmFzZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIFFMQV9NRU1PUllfQUxMT0NfRkFJTEVEOwogCX0KIAltZW1zZXQocGQsIDAsIG1heChQT1JUX0RBVEFCQVNFX1NJWkUsIFBPUlRfREFUQUJBU0VfMjRYWF9TSVpFKSk7CkBAIC0xMjYxLDEyICsxMjQ0LDEwIEBACiAJCS8qIENoZWNrIGZvciBsb2dnZWQgaW4gc3RhdGUuICovCiAJCWlmIChwZDI0LT5jdXJyZW50X2xvZ2luX3N0YXRlICE9IFBEU19QUkxJX0NPTVBMRVRFICYmCiAJCSAgICBwZDI0LT5sYXN0X2xvZ2luX3N0YXRlICE9IFBEU19QUkxJX0NPTVBMRVRFKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgInNjc2koJWxkKTogVW5hYmxlIHRvIHZlcmlmeSBsb2dpbi1zdGF0ZSAoJXgvJXgpICIKLQkJCSAgICIgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLAotCQkJICAgcGQyNC0+Y3VycmVudF9sb2dpbl9zdGF0ZSwgcGQyNC0+bGFzdF9sb2dpbl9zdGF0ZSwKLQkJCSAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKLQkJCSAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNTEsCisJCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgbG9naW4tc3RhdGUgKCV4LyV4KSBmb3IgIgorCQkJICAgICJsb29wX2lkICV4LlxuIiwgcGQyNC0+Y3VycmVudF9sb2dpbl9zdGF0ZSwKKwkJCSAgICBwZDI0LT5sYXN0X2xvZ2luX3N0YXRlLCBmY3BvcnQtPmxvb3BfaWQpOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlnb3RvIGdwZF9lcnJvcl9vdXQ7CiAJCX0KQEAgLTEyOTAsMTIgKzEyNzEsMTEgQEAKIAkJLyogQ2hlY2sgZm9yIGxvZ2dlZCBpbiBzdGF0ZS4gKi8KIAkJaWYgKHBkLT5tYXN0ZXJfc3RhdGUgIT0gUERfU1RBVEVfUE9SVF9MT0dHRURfSU4gJiYKIAkJICAgIHBkLT5zbGF2ZV9zdGF0ZSAhPSBQRF9TVEFURV9QT1JUX0xPR0dFRF9JTikgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICJzY3NpKCVsZCk6IFVuYWJsZSB0byB2ZXJpZnkgbG9naW4tc3RhdGUgKCV4LyV4KSAiCi0JCQkgICAiIC0gcG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywKLQkJCSAgIHBkLT5tYXN0ZXJfc3RhdGUsIHBkLT5zbGF2ZV9zdGF0ZSwKLQkJCSAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKLQkJCSAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMGEsCisJCQkgICAgIlVuYWJsZSB0byB2ZXJpZnkgbG9naW4tc3RhdGUgKCV4LyV4KSAtICIKKwkJCSAgICAicG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHBkLT5tYXN0ZXJfc3RhdGUsCisJCQkgICAgcGQtPnNsYXZlX3N0YXRlLCBmY3BvcnQtPmRfaWQuYi5kb21haW4sCisJCQkgICAgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlnb3RvIGdwZF9lcnJvcl9vdXQ7CiAJCX0KQEAgLTEzMjUsMTAgKzEzMDUsMTEgQEAKIAlkbWFfcG9vbF9mcmVlKGhhLT5zX2RtYV9wb29sLCBwZCwgcGRfZG1hKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDUyLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsIHJ2YWwsCisJCSAgICBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDUzLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTEzNTcsOCArMTMzOCw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoInFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNTQsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfRklSTVdBUkVfU1RBVEU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTEzODEsMTIgKzEzNjEsMTAgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfZ2V0X2Zpcm13YXJlX3N0YXRlKCVsZCk6ICIKLQkJICAgICJmYWlsZWQ9JXguXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDU1LCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2dldF9maXJtd2FyZV9zdGF0ZSglbGQpOiBkb25lLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNTYsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMTQxOCw4ICsxMzk2LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfcG9ydF9uYW1lKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNTcsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfUE9SVF9OQU1FOwogCW1jcC0+bWJbOV0gPSB2aGEtPnZwX2lkeDsKQEAgLTE0MzksOCArMTQxNiw3IEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2dldF9wb3J0X25hbWUoJWxkKTogZmFpbGVkPSV4LlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNTgsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewogCQlpZiAobmFtZSAhPSBOVUxMKSB7CiAJCQkvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbmFtZSBpbiBiaWcgZW5kaWFuLiAqLwpAQCAtMTQ1NCw4ICsxNDMwLDcgQEAKIAkJCW5hbWVbN10gPSBMU0IobWNwLT5tYls3XSk7CiAJCX0KIAotCQlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfcG9ydF9uYW1lKCVsZCk6IGRvbmUuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA1OSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNDgzLDcgKzE0NTgsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA1YSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoSVNfUUxBOFhYWF9UWVBFKHZoYS0+aHcpKSB7CiAJCS8qIExvZ291dCBhY3Jvc3MgYWxsIEZDRnMuICovCkBAIC0xNTE3LDExICsxNDkyLDEwIEBACiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNWIsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewogCQkvKkVNUFRZKi8KLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA1YywgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNTUzLDEyICsxNTI3LDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZW50ZXJlZC5cbiIsCi0JICAgIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA1ZCwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9zZW5kX3NuczogcmV0cnkgY250PSVkIHJhdG92PSVkIHRvdGFsICIKLQkJInRvdj0lZC5cbiIsIHZoYS0+aHctPnJldHJ5X2NvdW50LCB2aGEtPmh3LT5sb2dpbl90aW1lb3V0LAotCQltY3AtPnRvdikpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA1ZSwKKwkgICAgIlJldHJ5IGNudD0lZCByYXRvdj0lZCB0b3RhbCB0b3Y9JWQuXG4iLAorCSAgICB2aGEtPmh3LT5yZXRyeV9jb3VudCwgdmhhLT5ody0+bG9naW5fdGltZW91dCwgbWNwLT50b3YpOwogCiAJbWNwLT5tYlswXSA9IE1CQ19TRU5EX1NOU19DT01NQU5EOwogCW1jcC0+bWJbMV0gPSBjbWRfc2l6ZTsKQEAgLTE1NzUsMTMgKzE1NDgsMTIgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRyhwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4ICIKLQkJICAgICJtYlsxXT0leC5cbiIsIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOwotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfc2VuZF9zbnMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4ICIKLQkJICAgICJtYlsxXT0leC5cbiIsIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNWYsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKKwkJICAgIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9zZW5kX3NucyglbGQpOiBkb25lLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2MCwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xNjAwLDcgKzE1NzIsNyBAQAogCXN0cnVjdCByZXFfcXVlICpyZXE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2MSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaGEtPmZsYWdzLmNwdV9hZmZpbml0eV9lbmFibGVkKQogCQlyZXEgPSBoYS0+cmVxX3FfbWFwWzBdOwpAQCAtMTYxMCw4ICsxNTgyLDggQEAKIAogCWxnID0gZG1hX3Bvb2xfYWxsb2MoaGEtPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsICZsZ19kbWEpOwogCWlmIChsZyA9PSBOVUxMKSB7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIExvZ2luIElPQ0IuXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgxMDYyLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBsb2dpbiBJT0NCLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAJbWVtc2V0KGxnLCAwLCBzaXplb2Yoc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHgpKTsKQEAgLTE2MzEsMjEgKzE2MDMsMjEgQEAKIAlsZy0+dnBfaW5kZXggPSB2aGEtPnZwX2lkeDsKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgbGcsIGxnX2RtYSwgMCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgTG9naW4gSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDYzLAorCQkgICAgIkZhaWxlZCB0byBpc3N1ZSBsb2dpbiBJT0NCICgleCkuXG4iLCBydmFsKTsKIAl9IGVsc2UgaWYgKGxnLT5lbnRyeV9zdGF0dXMgIT0gMCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJICAgICItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBsZy0+ZW50cnlfc3RhdHVzKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2NCwKKwkJICAgICJGYWlsZWQgdG8gY29tcGxldGUgSU9DQiAtLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsCisJCSAgICBsZy0+ZW50cnlfc3RhdHVzKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIGlmIChsZy0+Y29tcF9zdGF0dXMgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDU19DT01QTEVURSkpIHsKIAkJaW9wWzBdID0gbGUzMl90b19jcHUobGctPmlvX3BhcmFtZXRlclswXSk7CiAJCWlvcFsxXSA9IGxlMzJfdG9fY3B1KGxnLT5pb19wYXJhbWV0ZXJbMV0pOwogCi0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgotCQkgICAgIi0tIGNvbXBsZXRpb24gc3RhdHVzICgleCkgIGlvcGFyYW09JXgvJXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgbGUxNl90b19jcHUobGctPmNvbXBfc3RhdHVzKSwgaW9wWzBdLAotCQkgICAgaW9wWzFdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2NSwKKwkJICAgICJGYWlsZWQgdG8gY29tcGxldGUgSU9DQiAtLSBjb21wbGV0aW9uICBzdGF0dXMgKCV4KSAiCisJCSAgICAiaW9wYXJhbT0leC8leC5cbiIsIGxlMTZfdG9fY3B1KGxnLT5jb21wX3N0YXR1cyksCisJCSAgICBpb3BbMF0sIGlvcFsxXSk7CiAKIAkJc3dpdGNoIChpb3BbMF0pIHsKIAkJY2FzZSBMU0NfU0NPREVfUE9SVElEX1VTRUQ6CkBAIC0xNjczLDcgKzE2NDUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDY2LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAogCQlpb3BbMF0gPSBsZTMyX3RvX2NwdShsZy0+aW9fcGFyYW1ldGVyWzBdKTsKIApAQCAtMTcyOCw3ICsxNzAwLDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2xvZ2luX2ZhYnJpYyglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDY3LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfTE9HSU5fRkFCUklDX1BPUlQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKQEAgLTE3NzEsMTMgKzE3NDMsMTIgQEAKIAkJCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAogCQkvKkVNUFRZKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCJxbGEyeDAwX2xvZ2luX2ZhYnJpYyglbGQpOiBmYWlsZWQ9JXggIgotCQkgICAgIm1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4LlxuIiwgdmhhLT5ob3N0X25vLCBydmFsLAotCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNjgsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4LlxuIiwKKwkJICAgIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0pOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9sb2dpbl9mYWJyaWMoJWxkKTogZG9uZS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDY5LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTE4MDgsMTMgKzE3NzksMTMgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAorCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2YSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJcmV0dXJuIHFsYTI0eHhfbG9naW5fZmFicmljKHZoYSwgZmNwb3J0LT5sb29wX2lkLAogCQkgICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAogCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIG1iX3JldCwgb3B0KTsKIAotCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX0xPR0lOX0xPT1BfUE9SVDsKIAlpZiAoSEFTX0VYVEVOREVEX0lEUyhoYSkpCiAJCW1jcC0+bWJbMV0gPSBmY3BvcnQtPmxvb3BfaWQ7CkBAIC0xODQ1LDE1ICsxODE2LDEyIEBACiAgCQlpZiAobWNwLT5tYlswXSA9PSAweDQwMDUgfHwgbWNwLT5tYlswXSA9PSAweDQwMDYpCiAgCQkJcnZhbCA9IFFMQV9TVUNDRVNTOwogCi0JCURFQlVHKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4ICIKLQkJICAgICJtYls2XT0leCBtYls3XT0leC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsCi0JCSAgICBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzZdLCBtY3AtPm1iWzddKSk7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4ICIKLQkJICAgICJtYls2XT0leCBtYls3XT0leC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsCi0JCSAgICBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzZdLCBtY3AtPm1iWzddKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2YiwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXggbWJbNl09JXggbWJbN109JXguXG4iLAorCQkgICAgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYls2XSwgbWNwLT5tYls3XSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMyhwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2YywgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIChydmFsKTsKQEAgLTE4NzAsMTIgKzE4MzgsMTIgQEAKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNmQsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbGcgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJmxnX2RtYSk7CiAJaWYgKGxnID09IE5VTEwpIHsKLQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gYWxsb2NhdGUgTG9nb3V0IElPQ0IuXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgxMDZlLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBsb2dvdXQgSU9DQi5cbiIpOwogCQlyZXR1cm4gUUxBX01FTU9SWV9BTExPQ19GQUlMRUQ7CiAJfQogCW1lbXNldChsZywgMCwgc2l6ZW9mKHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4KSk7CkBAIC0xODk5LDIyICsxODY3LDIyIEBACiAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgbGcsIGxnX2RtYSwgMCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgTG9nb3V0IElPQ0IgIgotCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA2ZiwKKwkJICAgICJGYWlsZWQgdG8gaXNzdWUgbG9nb3V0IElPQ0IgKCV4KS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAobGctPmVudHJ5X3N0YXR1cyAhPSAwKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgotCQkgICAgIi0tIGVycm9yIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkJICAgIGxnLT5lbnRyeV9zdGF0dXMpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDcwLAorCQkgICAgIkZhaWxlZCB0byBjb21wbGV0ZSBJT0NCIC0tIGVycm9yIHN0YXR1cyAoJXgpLlxuIiwKKwkJICAgIGxnLT5lbnRyeV9zdGF0dXMpOwogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgaWYgKGxnLT5jb21wX3N0YXR1cyAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENTX0NPTVBMRVRFKSkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCAlZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJICAgICItLSBjb21wbGV0aW9uIHN0YXR1cyAoJXgpICBpb3BhcmFtPSV4LyV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHZoYS0+dnBfaWR4LCBsZTE2X3RvX2NwdShsZy0+Y29tcF9zdGF0dXMpLAorCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNzEsCisJCSAgICAiRmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KSAiCisJCSAgICAiaW9wYXJhbT0leC8leC5cbiIsIGxlMTZfdG9fY3B1KGxnLT5jb21wX3N0YXR1cyksCiAJCSAgICBsZTMyX3RvX2NwdShsZy0+aW9fcGFyYW1ldGVyWzBdKSwKLQkJICAgIGxlMzJfdG9fY3B1KGxnLT5pb19wYXJhbWV0ZXJbMV0pKSk7CisJCSAgICBsZTMyX3RvX2NwdShsZy0+aW9fcGFyYW1ldGVyWzFdKSk7CiAJfSBlbHNlIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNzIsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIGxnLCBsZ19kbWEpOwpAQCAtMTk0Niw4ICsxOTE0LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9mYWJyaWNfbG9nb3V0KCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNzMsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19MT0dPVVRfRkFCUklDX1BPUlQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKQEAgLTE5NjYsMTIgKzE5MzMsMTEgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoInFsYTJ4MDBfZmFicmljX2xvZ291dCglbGQpOiBmYWlsZWQ9JXggIgotCQkgICAgIm1ieDE9JXguXG4iLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMV0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDc0LAorCQkgICAgIkZhaWxlZD0leCBtYlsxXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMV0pOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9mYWJyaWNfbG9nb3V0KCVsZCk6IGRvbmUuXG4iLAotCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA3NSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0xOTk5LDggKzE5NjUsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCJxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKCVsZCk6IGVudGVyZWQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNzYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19MSVBfRlVMTF9MT0dJTjsKIAltY3AtPm1iWzFdID0gSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpID8gQklUXzMgOiAwOwpAQCAtMjAxNCwxMiArMTk3OSwxMCBAQAogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9mdWxsX2xvZ2luX2xpcCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA3NywgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygicWxhMngwMF9mdWxsX2xvZ2luX2xpcCglbGQpOiBkb25lLlxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwNzgsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMjA0NSw4ICsyMDA4LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygicWxhMngwMF9nZXRfaWRfbGlzdCglbGQpOiBlbnRlcmVkLlxuIiwKLQkgICAgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDc5LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCWlmIChpZF9saXN0ID09IE5VTEwpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwpAQCAtMjA3NSwxMiArMjAzNywxMCBAQAogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zXzExKHByaW50aygicWxhMngwMF9nZXRfaWRfbGlzdCglbGQpOiBmYWlsZWQ9JXguXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA3YSwgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7CiAJCSplbnRyaWVzID0gbWNwLT5tYlsxXTsKLQkJREVCVUcxMShwcmludGsoInFsYTJ4MDBfZ2V0X2lkX2xpc3QoJWxkKTogZG9uZS5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDdiLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTIxMDgsNyArMjA2OCw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDdjLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfR0VUX1JFU09VUkNFX0NPVU5UUzsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtMjEyMSwxNCArMjA4MSwxNCBAQAogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJLypFTVBUWSovCi0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkID0gJXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgbWNwLT5tYlswXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwN2QsCisJCSAgICAiRmFpbGVkIG1iWzBdPSV4LlxuIiwgbWNwLT5tYlswXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuIG1iMT0leCBtYjI9JXggbWIzPSV4IG1iNj0leCAiCi0JCSAgICAibWI3PSV4IG1iMTA9JXggbWIxMT0leCBtYjEyPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0sIG1jcC0+bWJbM10sCi0JCSAgICBtY3AtPm1iWzZdLCBtY3AtPm1iWzddLCBtY3AtPm1iWzEwXSwgbWNwLT5tYlsxMV0sCi0JCSAgICBtY3AtPm1iWzEyXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwN2UsCisJCSAgICAiRG9uZSAlcyBtYjE9JXggbWIyPSV4IG1iMz0leCBtYjY9JXggbWI3PSV4IG1iMTA9JXggIgorCQkgICAgIm1iMTE9JXggbWIxMj0leC5cbiIsIF9fZnVuY19fLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdLAorCQkgICAgbWNwLT5tYlszXSwgbWNwLT5tYls2XSwgbWNwLT5tYls3XSwgbWNwLT5tYlsxMF0sCisJCSAgICBtY3AtPm1iWzExXSwgbWNwLT5tYlsxMl0pOwogCiAJCWlmIChjdXJfeGNoZ19jbnQpCiAJCQkqY3VyX3hjaGdfY250ID0gbWNwLT5tYlszXTsKQEAgLTIxNDcsNyArMjEwNyw2IEBACiAJcmV0dXJuIChydmFsKTsKIH0KIAotI2lmIGRlZmluZWQoUUxfREVCVUdfTEVWRUxfMykKIC8qCiAgKiBxbGEyeDAwX2dldF9mY2FsX3Bvc2l0aW9uX21hcAogICoJR2V0IEZDQUwgKExJTFApIHBvc2l0aW9uIG1hcCB1c2luZyBtYWlsYm94IGNvbW1hbmQKQEAgLTIxNzIsMTAgKzIxMzEsMTIgQEAKIAlkbWFfYWRkcl90IHBtYXBfZG1hOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDdmLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCXBtYXAgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnBtYXBfZG1hKTsKIAlpZiAocG1hcCAgPT0gTlVMTCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6ICoqKiogTWVtIEFsbG9jIEZhaWxlZCAqKioqIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MTA4MCwKKwkJICAgICJNZW1vcnkgYWxsb2MgZmFpbGVkLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAJbWVtc2V0KHBtYXAsIDAsIEZDQUxfTUFQX1NJWkUpOwpAQCAtMjE5MywxMCArMjE1NCwxMSBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogKG1iMD0leC9tYjE9JXgpIEZDL0FMIFBvc2l0aW9uIE1hcCAiCi0JCSAgICAic2l6ZSAoJXgpXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBtY3AtPm1iWzBdLAotCQkgICAgbWNwLT5tYlsxXSwgKHVuc2lnbmVkKXBtYXBbMF0pKTsKLQkJREVCVUcxMShxbGEyeDAwX2R1bXBfYnVmZmVyKHBtYXAsIHBtYXBbMF0gKyAxKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA4MSwKKwkJICAgICJtYjAvbWIxPSV4LyVYIEZDL0FMIHBvc2l0aW9uIG1hcCBzaXplICgleCkuXG4iLAorCQkgICAgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgKHVuc2lnbmVkKXBtYXBbMF0pOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDExMWQsCisJCSAgICBwbWFwLCBwbWFwWzBdICsgMSk7CiAKIAkJaWYgKHBvc19tYXApCiAJCQltZW1jcHkocG9zX21hcCwgcG1hcCwgRkNBTF9NQVBfU0laRSk7CkBAIC0yMjA0LDE1ICsyMTY2LDEzIEBACiAJZG1hX3Bvb2xfZnJlZShoYS0+c19kbWFfcG9vbCwgcG1hcCwgcG1hcF9kbWEpOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwODIsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDgzLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKIH0KLSNlbmRpZgogCiAvKgogICogcWxhMngwMF9nZXRfbGlua19zdGF0dXMKQEAgLTIyMzcsNyArMjE5Nyw3IEBACiAJdWludDMyX3QgKnNpdGVyLCAqZGl0ZXIsIGR3b3JkczsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA4NCwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFVF9MSU5LX1NUQVRVUzsKIAltY3AtPm1iWzJdID0gTVNXKHN0YXRzX2RtYSk7CkBAIC0yMjY2LDExICsyMjI2LDEyIEBACiAKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewogCQlpZiAobWNwLT5tYlswXSAhPSBNQlNfQ09NTUFORF9DT01QTEVURSkgewotCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBjbWQgZmFpbGVkLiBtYngwPSV4LlxuIiwKLQkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwODUsCisJCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0gZWxzZSB7CiAJCQkvKiBDb3B5IG92ZXIgZGF0YSAtLSBmaXJtd2FyZSBkYXRhIGlzIExFLiAqLworCQkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDg2LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAkJCWR3b3JkcyA9IG9mZnNldG9mKHN0cnVjdCBsaW5rX3N0YXRpc3RpY3MsIHVudXNlZDEpIC8gNDsKIAkJCXNpdGVyID0gZGl0ZXIgPSAmc3RhdHMtPmxpbmtfZmFpbF9jbnQ7CiAJCQl3aGlsZSAoZHdvcmRzLS0pCkBAIC0yMjc4LDggKzIyMzksNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogRmFpbGVkLiAqLwotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA4NywgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMjI5NCw3ICsyMjU0LDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAl1aW50MzJfdCAqc2l0ZXIsICpkaXRlciwgZHdvcmRzOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDg4LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfR0VUX0xJTktfUFJJVl9TVEFUUzsKIAltY3AtPm1iWzJdID0gTVNXKHN0YXRzX2RtYSk7CkBAIC0yMzEyLDEwICsyMjcyLDExIEBACiAKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewogCQlpZiAobWNwLT5tYlswXSAhPSBNQlNfQ09NTUFORF9DT01QTEVURSkgewotCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBjbWQgZmFpbGVkLiBtYngwPSV4LlxuIiwKLQkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBtY3AtPm1iWzBdKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwODksCisJCQkgICAgIkZhaWxlZCBtYlswXT0leC5cbiIsIG1jcC0+bWJbMF0pOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0gZWxzZSB7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOGEsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCQkJLyogQ29weSBvdmVyIGRhdGEgLS0gZmlybXdhcmUgZGF0YSBpcyBMRS4gKi8KIAkJCWR3b3JkcyA9IHNpemVvZihzdHJ1Y3QgbGlua19zdGF0aXN0aWNzKSAvIDQ7CiAJCQlzaXRlciA9IGRpdGVyID0gJnN0YXRzLT5saW5rX2ZhaWxfY250OwpAQCAtMjMyNCw4ICsyMjg1LDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEZhaWxlZC4gKi8KLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOGIsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTIzNDUsNyArMjMwNSw3IEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IHZoYS0+cmVxOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDhjLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCWZvciAoaGFuZGxlID0gMTsgaGFuZGxlIDwgTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTOyBoYW5kbGUrKykgewpAQCAtMjM2MCw4ICsyMzIwLDggQEAKIAogCWFidCA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmYWJ0X2RtYSk7CiAJaWYgKGFidCA9PSBOVUxMKSB7Ci0JCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIEFib3J0IElPQ0IuXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgxMDhkLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBhYm9ydCBJT0NCLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAJbWVtc2V0KGFidCwgMCwgc2l6ZW9mKHN0cnVjdCBhYm9ydF9lbnRyeV8yNHh4KSk7CkBAIC0yMzgwLDIwICsyMzQwLDIwIEBACiAKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgYWJ0LCBhYnRfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBJT0NCICgleCkuXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOGUsCisJCSAgICAiRmFpbGVkIHRvIGlzc3VlIElPQ0IgKCV4KS5cbiIsIHJ2YWwpOwogCX0gZWxzZSBpZiAoYWJ0LT5lbnRyeV9zdGF0dXMgIT0gMCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJICAgICItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBhYnQtPmVudHJ5X3N0YXR1cykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOGYsCisJCSAgICAiRmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgLS0gZXJyb3Igc3RhdHVzICgleCkuXG4iLAorCQkgICAgYWJ0LT5lbnRyeV9zdGF0dXMpOwogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgaWYgKGFidC0+bnBvcnRfaGFuZGxlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCi0JCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBsZTE2X3RvX2NwdShhYnQtPm5wb3J0X2hhbmRsZSkpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDkwLAorCQkgICAgIkZhaWxlZCB0byBjb21wbGV0ZSBJT0NCIC0tIGNvbXBsZXRpb24gc3RhdHVzICgleCkuXG4iLAorCQkgICAgbGUxNl90b19jcHUoYWJ0LT5ucG9ydF9oYW5kbGUpKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA5MSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJZG1hX3Bvb2xfZnJlZShoYS0+c19kbWFfcG9vbCwgYWJ0LCBhYnRfZG1hKTsKQEAgLTI0MjEsMTkgKzIzODEsMjAgQEAKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBmY3BvcnQtPnZoYS0+aG9zdF9ubykpOwotCiAJdmhhID0gZmNwb3J0LT52aGE7CiAJaGEgPSB2aGEtPmh3OwogCXJlcSA9IHZoYS0+cmVxOworCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDkyLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpCiAJCXJzcCA9IGhhLT5yc3BfcV9tYXBbdGFnICsgMV07CiAJZWxzZQogCQlyc3AgPSByZXEtPnJzcDsKIAl0c2sgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnRza19kbWEpOwogCWlmICh0c2sgPT0gTlVMTCkgewotCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBhbGxvY2F0ZSBUYXNrIE1hbmFnZW1lbnQgIgotCQkgICAgIklPQ0IuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDEwOTMsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIHRhc2sgbWFuYWdlbWVudCBJT0NCLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAJbWVtc2V0KHRzaywgMCwgc2l6ZW9mKHN0cnVjdCB0c2tfbWdtdF9jbWQpKTsKQEAgLTI0NTcsMzAgKzI0MTgsMzAgQEAKIAlzdHMgPSAmdHNrLT5wLnN0czsKIAlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiKHZoYSwgdHNrLCB0c2tfZG1hLCAwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSAlcyBSZXNldCBJT0NCICIKLQkJICAgICIoJXgpLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgbmFtZSwgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOTQsCisJCSAgICAiRmFpbGVkIHRvIGlzc3VlICVzIHJlc2V0IElPQ0IgKCV4KS5cbiIsIG5hbWUsIHJ2YWwpOwogCX0gZWxzZSBpZiAoc3RzLT5lbnRyeV9zdGF0dXMgIT0gMCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJICAgICItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCSAgICBzdHMtPmVudHJ5X3N0YXR1cykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOTUsCisJCSAgICAiRmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgLS0gZXJyb3Igc3RhdHVzICgleCkuXG4iLAorCQkgICAgc3RzLT5lbnRyeV9zdGF0dXMpOwogCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9IGVsc2UgaWYgKHN0cy0+Y29tcF9zdGF0dXMgIT0KIAkgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNihDU19DT01QTEVURSkpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCi0JCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBsZTE2X3RvX2NwdShzdHMtPmNvbXBfc3RhdHVzKSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOTYsCisJCSAgICAiRmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsCisJCSAgICBsZTE2X3RvX2NwdShzdHMtPmNvbXBfc3RhdHVzKSk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSBpZiAobGUxNl90b19jcHUoc3RzLT5zY3NpX3N0YXR1cykgJgogCSAgICBTU19SRVNQT05TRV9JTkZPX0xFTl9WQUxJRCkgewogCQlpZiAobGUzMl90b19jcHUoc3RzLT5yc3BfZGF0YV9sZW4pIDwgNCkgewotCQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBpZ25vcmluZyBpbmNvbnNpc3RlbnQgIgotCQkJICAgICJkYXRhIGxlbmd0aCAtLSBub3QgZW5vdWdoIHJlc3BvbnNlIGluZm8gKCVkKS5cbiIsCi0JCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkJCSAgICBsZTMyX3RvX2NwdShzdHMtPnJzcF9kYXRhX2xlbikpKTsKKwkJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA5NywKKwkJCSAgICAiSWdub3JpbmcgaW5jb25zaXN0ZW50IGRhdGEgbGVuZ3RoIC0tIG5vdCBlbm91Z2ggIgorCQkJICAgICJyZXNwb25zZSBpbmZvICglZCkuXG4iLAorCQkJICAgIGxlMzJfdG9fY3B1KHN0cy0+cnNwX2RhdGFfbGVuKSk7CiAJCX0gZWxzZSBpZiAoc3RzLT5kYXRhWzNdKSB7Ci0JCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJCSAgICAiLS0gcmVzcG9uc2UgKCV4KS5cbiIsIF9fZnVuY19fLAotCQkJICAgIHZoYS0+aG9zdF9ubywgc3RzLT5kYXRhWzNdKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOTgsCisJCQkgICAgIkZhaWxlZCB0byBjb21wbGV0ZSBJT0NCIC0tIHJlc3BvbnNlICgleCkuXG4iLAorCQkJICAgIHN0cy0+ZGF0YVszXSk7CiAJCQlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfQogCX0KQEAgLTI0ODksMTAgKzI0NTAsMTAgQEAKIAlydmFsMiA9IHFsYTJ4MDBfbWFya2VyKHZoYSwgcmVxLCByc3AsIGZjcG9ydC0+bG9vcF9pZCwgbCwKIAkgICAgdHlwZSA9PSBUQ0ZfTFVOX1JFU0VUID8gTUtfU1lOQ19JRF9MVU46IE1LX1NZTkNfSUQpOwogCWlmIChydmFsMiAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBpc3N1ZSBNYXJrZXIgSU9DQiAiCi0JCSAgICAiKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwyKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA5OSwKKwkJICAgICJGYWlsZWQgdG8gaXNzdWUgbWFya2VyIElPQ0IgKCV4KS5cbiIsIHJ2YWwyKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDlhLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlkbWFfcG9vbF9mcmVlKGhhLT5zX2RtYV9wb29sLCB0c2ssIHRza19kbWEpOwpAQCAtMjUzMyw3ICsyNDk0LDcgQEAKIAlpZiAoIUlTX1FMQTIzWFgoaGEpICYmICFJU19GV0kyX0NBUEFCTEUoaGEpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA5YiwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFTl9TWVNURU1fRVJST1I7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKQEAgLTI1NDMsMTAgKzI1MDQsOSBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTA5YywgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOWQsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMjU2Niw3ICsyNTI2LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwOWUsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbWNwLT5tYlswXSA9IE1CQ19TRVJERVNfUEFSQU1TOwogCW1jcC0+bWJbMV0gPSBCSVRfMDsKQEAgLTI1ODEsMTEgKzI1NDEsMTEgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDlmLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7CiAJCS8qRU1QVFkqLwotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGEwLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTI2MDEsNyArMjU2MSw3IEBACiAJaWYgKCFJU19GV0kyX0NBUEFCTEUodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGExLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfU1RPUF9GSVJNV0FSRTsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwpAQCAtMjYxMSwxMiArMjU3MSwxMSBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBhMiwgIkZhaWxlZD0leC5cbiIsIHJ2YWwpOwogCQlpZiAobWNwLT5tYlswXSA9PSBNQlNfSU5WQUxJRF9DT01NQU5EKQogCQkJcnZhbCA9IFFMQV9JTlZBTElEX0NPTU1BTkQ7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBhMywgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0yNjMwLDE0ICsyNTg5LDE0IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGE0LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAogCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHZoYS0+aHctPnBkZXYpKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQogCW1jcC0+bWJbMF0gPSBNQkNfVFJBQ0VfQ09OVFJPTDsKIAltY3AtPm1iWzFdID0gVENfRUZUX0VOQUJMRTsKIAltY3AtPm1iWzJdID0gTFNXKGVmdF9kbWEpOwpAQCAtMjY1MiwxMCArMjYxMSwxMSBAQAogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYTUsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKKwkJICAgIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYTYsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMjY2OCwxNCArMjYyOCwxNCBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAorCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBhNywgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoIUlTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZSh2aGEtPmh3LT5wZGV2KSkpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX1RSQUNFX0NPTlRST0w7CiAJbWNwLT5tYlsxXSA9IFRDX0VGVF9ESVNBQkxFOwogCW1jcC0+b3V0X21iID0gTUJYXzF8TUJYXzA7CkBAIC0yNjg0LDEwICsyNjQ0LDExIEBACiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsCi0JCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBhOCwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXguXG4iLAorCQkgICAgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBhOSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0yNzAxLDE0ICsyNjYyLDE0IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGFhLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfUUxBMjVYWCh2aGEtPmh3KSAmJiAhSVNfUUxBODFYWCh2aGEtPmh3KSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlpZiAodW5saWtlbHkocGNpX2NoYW5uZWxfb2ZmbGluZSh2aGEtPmh3LT5wZGV2KSkpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX1RSQUNFX0NPTlRST0w7CiAJbWNwLT5tYlsxXSA9IFRDX0ZDRV9FTkFCTEU7CiAJbWNwLT5tYlsyXSA9IExTVyhmY2VfZG1hKTsKQEAgLTI3MjcsMTAgKzI2ODgsMTEgQEAKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGFiLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsCisJCSAgICBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGFjLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAogCQlpZiAobWIpCiAJCQltZW1jcHkobWIsIG1jcC0+bWIsIDggKiBzaXplb2YoKm1iKSk7CkBAIC0yNzQ4LDE0ICsyNzEwLDE0IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGFkLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAogCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHZoYS0+aHctPnBkZXYpKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQogCW1jcC0+bWJbMF0gPSBNQkNfVFJBQ0VfQ09OVFJPTDsKIAltY3AtPm1iWzFdID0gVENfRkNFX0RJU0FCTEU7CiAJbWNwLT5tYlsyXSA9IFRDX0ZDRV9ESVNBQkxFX1RSQUNFOwpAQCAtMjc2NiwxMCArMjcyOCwxMSBAQAogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYWUsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKKwkJICAgIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYWYsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCiAJCWlmICh3cikKIAkJCSp3ciA9ICh1aW50NjRfdCkgbWNwLT5tYls1XSA8PCA0OCB8CkBAIC0yNzk0LDExICsyNzU3LDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGIwLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfSUlETUFfQ0FQQUJMRSh2aGEtPmh3KSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQogCW1jcC0+bWJbMF0gPSBNQkNfUE9SVF9QQVJBTVM7CiAJbWNwLT5tYlsxXSA9IGxvb3BfaWQ7CiAJbWNwLT5tYlsyXSA9IG1jcC0+bWJbM10gPSAwOwpAQCAtMjgxNywxMCArMjc4MCw5IEBACiAJfQogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYjEsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGIyLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAkJaWYgKHBvcnRfc3BlZWQpCiAJCQkqcG9ydF9zcGVlZCA9IG1jcC0+bWJbM107CiAJfQpAQCAtMjgzNiwxMSArMjc5OCwxMSBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAorCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBiMywgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoIUlTX0lJRE1BX0NBUEFCTEUodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX1BPUlRfUEFSQU1TOwogCW1jcC0+bWJbMV0gPSBsb29wX2lkOwogCW1jcC0+bWJbMl0gPSBCSVRfMDsKQEAgLTI4NjMsMTAgKzI4MjUsOSBAQAogCX0KIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGI0LCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBiNSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0yODgyLDMzICsyODQzLDM2IEBACiAJc2NzaV9xbGFfaG9zdF90ICp2cDsKIAl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYjYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJaWYgKHJwdGlkX2VudHJ5LT5lbnRyeV9zdGF0dXMgIT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKHJwdGlkX2VudHJ5LT5mb3JtYXQgPT0gMCkgewotCQlERUJVRzE1KHByaW50aygiJXM6Zm9ybWF0IDAgOiBzY3NpKCVsZCkgbnVtYmVyIG9mIFZQcyBzZXR1cCAlZCwiCi0JCQkiIG51bWJlciBvZiBWUHMgYWNxdWlyZWQgJWRcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCQlNU0IobGUxNl90b19jcHUocnB0aWRfZW50cnktPnZwX2NvdW50KSksCi0JCQlMU0IobGUxNl90b19jcHUocnB0aWRfZW50cnktPnZwX2NvdW50KSkpKTsKLQkJREVCVUcxNShwcmludGsoIiVzIHByaW1hcnkgcG9ydCBpZCAlMDJ4JTAyeCUwMnhcbiIsIF9fZnVuY19fLAotCQkJcnB0aWRfZW50cnktPnBvcnRfaWRbMl0sIHJwdGlkX2VudHJ5LT5wb3J0X2lkWzFdLAotCQkJcnB0aWRfZW50cnktPnBvcnRfaWRbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGI3LAorCQkgICAgIkZvcm1hdCAwIDogTnVtYmVyIG9mIFZQcyBzZXR1cCAlZCwgbnVtYmVyIG9mICIKKwkJICAgICJWUHMgYWNxdWlyZWQgJWQuXG4iLAorCQkgICAgTVNCKGxlMTZfdG9fY3B1KHJwdGlkX2VudHJ5LT52cF9jb3VudCkpLAorCQkgICAgTFNCKGxlMTZfdG9fY3B1KHJwdGlkX2VudHJ5LT52cF9jb3VudCkpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGI4LAorCQkgICAgIlByaW1hcnkgcG9ydCBpZCAlMDJ4JTAyeCUwMnguXG4iLAorCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMl0sIHJwdGlkX2VudHJ5LT5wb3J0X2lkWzFdLAorCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMF0pOwogCX0gZWxzZSBpZiAocnB0aWRfZW50cnktPmZvcm1hdCA9PSAxKSB7CiAJCXZwX2lkeCA9IExTQihzdGF0KTsKLQkJREVCVUcxNShwcmludGsoIiVzOmZvcm1hdCAxOiBzY3NpKCVsZCk6IFZQWyVkXSBlbmFibGVkICIKLQkJICAgICItIHN0YXR1cyAlZCAtICIKLQkJICAgICJ3aXRoIHBvcnQgaWQgJTAyeCUwMnglMDJ4XG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCQkgICAgdnBfaWR4LCBNU0Ioc3RhdCksCisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBiOSwKKwkJICAgICJGb3JtYXQgMTogVlBbJWRdIGVuYWJsZWQgLSBzdGF0dXMgJWQgLSB3aXRoICIKKwkJICAgICJwb3J0IGlkICUwMnglMDJ4JTAyeC5cbiIsIHZwX2lkeCwgTVNCKHN0YXQpLAogCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMl0sIHJwdGlkX2VudHJ5LT5wb3J0X2lkWzFdLAotCQkgICAgcnB0aWRfZW50cnktPnBvcnRfaWRbMF0pKTsKKwkJICAgIHJwdGlkX2VudHJ5LT5wb3J0X2lkWzBdKTsKIAogCQl2cCA9IHZoYTsKIAkJaWYgKHZwX2lkeCA9PSAwICYmIChNU0Ioc3RhdCkgIT0gMSkpCiAJCQlnb3RvIHJlZ19uZWVkZWQ7CiAKIAkJaWYgKE1TQihzdGF0KSA9PSAxKSB7Ci0JCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IENvdWxkIG5vdCBhY3F1aXJlIElEIGZvciAiCi0JCQkgICAgIlZQWyVkXS5cbiIsIHZoYS0+aG9zdF9ubywgdnBfaWR4KSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYmEsCisJCQkgICAgIkNvdWxkIG5vdCBhY3F1aXJlIElEIGZvciBWUFslZF0uXG4iLCB2cF9pZHgpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTI5NjMsMTAgKzI5MjcsMTIgQEAKIAogCS8qIFRoaXMgY2FuIGJlIGNhbGxlZCBieSB0aGUgcGFyZW50ICovCiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYmIsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJdnBtb2QgPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJnZwbW9kX2RtYSk7CiAJaWYgKCF2cG1vZCkgewotCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBhbGxvY2F0ZSBNb2RpZnkgVlAgIgotCQkgICAgIklPQ0IuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDEwYmMsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1vZGlmeSBWUCBJT0NCLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAKQEAgLTI5ODMsMjIgKzI5NDksMjEgQEAKIAogCXJ2YWwgPSBxbGEyeDAwX2lzc3VlX2lvY2IoYmFzZV92aGEsIHZwbW9kLCB2cG1vZF9kbWEsIDApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGlzc3VlIFZQIGNvbmZpZyBJT0NCIgotCQkJIigleCkuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGJkLAorCQkgICAgIkZhaWxlZCB0byBpc3N1ZSBWUCBjb25maWcgSU9DQiAoJXgpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmICh2cG1vZC0+Y29tcF9zdGF0dXMgIT0gMCkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJCSItLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubywKLQkJCXZwbW9kLT5jb21wX3N0YXR1cykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYmUsCisJCSAgICAiRmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgLS0gZXJyb3Igc3RhdHVzICgleCkuXG4iLAorCQkgICAgdnBtb2QtPmNvbXBfc3RhdHVzKTsKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfSBlbHNlIGlmICh2cG1vZC0+Y29tcF9zdGF0dXMgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihDU19DT01QTEVURSkpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCi0JCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubywKLQkJICAgIGxlMTZfdG9fY3B1KHZwbW9kLT5jb21wX3N0YXR1cykpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGJmLAorCQkgICAgIkZhaWxlZCB0byBjb21wbGV0ZSBJT0NCIC0tIGNvbXBsZXRpb24gc3RhdHVzICgleCkuXG4iLAorCQkgICAgbGUxNl90b19jcHUodnBtb2QtPmNvbXBfc3RhdHVzKSk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7CiAJCS8qIEVNUFRZICovCi0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sCi0JCQkJCQkJYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGMwLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAkJZmNfdnBvcnRfc2V0X3N0YXRlKHZoYS0+ZmNfdnBvcnQsIEZDX1ZQT1JUX0lOSVRJQUxJWklORyk7CiAJfQogCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIHZwbW9kLCB2cG1vZF9kbWEpOwpAQCAtMzAzMiwxNyArMjk5NywxNiBAQAogCWludAl2cF9pbmRleCA9IHZoYS0+dnBfaWR4OwogCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpiYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC4gRW5hYmxpbmcgaW5kZXggJWRcbiIsIF9fZnVuY19fLAotCSAgICB2aGEtPmhvc3Rfbm8sIHZwX2luZGV4KSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGMxLAorCSAgICAiRW50ZXJlZCAlcyBlbmFibGluZyBpbmRleCAlZC5cbiIsIF9fZnVuY19fLCB2cF9pbmRleCk7CiAKIAlpZiAodnBfaW5kZXggPT0gMCB8fCB2cF9pbmRleCA+PSBoYS0+bWF4X25waXZfdnBvcnRzKQogCQlyZXR1cm4gUUxBX1BBUkFNRVRFUl9FUlJPUjsKIAogCXZjZSA9IGRtYV9wb29sX2FsbG9jKGhhLT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmdmNlX2RtYSk7CiAJaWYgKCF2Y2UpIHsKLQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiAiCi0JCSAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIFZQIENvbnRyb2wgSU9DQi5cbiIsIF9fZnVuY19fLAotCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MTBjMiwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgVlAgY29udHJvbCBJT0NCLlxuIik7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAJbWVtc2V0KHZjZSwgMCwgc2l6ZW9mKHN0cnVjdCB2cF9jdHJsX2VudHJ5XzI0eHgpKTsKQEAgLTMwNjMsMjggKzMwMjcsMjAgQEAKIAogCXJ2YWwgPSBxbGEyeDAwX2lzc3VlX2lvY2IoYmFzZV92aGEsIHZjZSwgdmNlX2RtYSwgMCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgVlAgY29udHJvbCBJT0NCIgotCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKLQkJcHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gaXNzdWUgVlAgY29udHJvbCBJT0NCIgotCQkgICAgIigleCkuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8sIHJ2YWwpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYzMsCisJCSAgICAiRmFpbGVkIHRvIGlzc3VlIFZQIGNvbnRyb2wgSU9DQiAoJXgpLlxuIiwgcnZhbCk7CiAJfSBlbHNlIGlmICh2Y2UtPmVudHJ5X3N0YXR1cyAhPSAwKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGNvbXBsZXRlIElPQ0IgIgotCQkgICAgIi0tIGVycm9yIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vLAotCQkgICAgdmNlLT5lbnRyeV9zdGF0dXMpKTsKLQkJcHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCi0JCSAgICAiLS0gZXJyb3Igc3RhdHVzICgleCkuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8sCisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBjNCwKKwkJICAgICJGYWlsZWQgdG8gY29tcGxldGUgSU9DQiAtLSBlcnJvciBzdGF0dXMgKCV4KS5cbiIsCiAJCSAgICB2Y2UtPmVudHJ5X3N0YXR1cyk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSBpZiAodmNlLT5jb21wX3N0YXR1cyAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KENTX0NPTVBMRVRFKSkgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZCB0byBjb21wbGV0ZSBJT0NCICIKLQkJICAgICItLSBjb21wbGV0aW9uIHN0YXR1cyAoJXgpLlxuIiwgX19mdW5jX18sIGJhc2VfdmhhLT5ob3N0X25vLAotCQkgICAgbGUxNl90b19jcHUodmNlLT5jb21wX3N0YXR1cykpKTsKLQkJcHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gY29tcGxldGUgSU9DQiAiCi0JCSAgICAiLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsIF9fZnVuY19fLCBiYXNlX3ZoYS0+aG9zdF9ubywKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGM1LAorCQkgICAgIkZhaWxlZCB0byBjb21wbGV0IElPQ0IgLS0gY29tcGxldGlvbiBzdGF0dXMgKCV4KS5cbiIsCiAJCSAgICBsZTE2X3RvX2NwdSh2Y2UtPmNvbXBfc3RhdHVzKSk7CiAJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0gZWxzZSB7Ci0JCURFQlVHMihwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGM2LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlkbWFfcG9vbF9mcmVlKGhhLT5zX2RtYV9wb29sLCB2Y2UsIHZjZV9kbWEpOwpAQCAtMzEyMSw2ICszMDc3LDggQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYzcsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJLyoKIAkgKiBUaGlzIGNvbW1hbmQgaXMgaW1wbGljaXRseSBleGVjdXRlZCBieSBmaXJtd2FyZSBkdXJpbmcgbG9naW4gZm9yIHRoZQogCSAqIHBoeXNpY2FsIGhvc3RzCkBAIC0zMTU1LDcgKzMxMTMsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAwOSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoTVNXKGFkZHIpIHx8IElTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSkgewogCQltY3AtPm1iWzBdID0gTUJDX0RVTVBfUklTQ19SQU1fRVhURU5ERUQ7CkBAIC0zMTg2LDEwICszMTQ0LDEwIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDA4LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMDcsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMzIxNCwxMiArMzE3MiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYzgsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJbW4gPSBkbWFfcG9vbF9hbGxvYyhoYS0+c19kbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJm1uX2RtYSk7CiAJaWYgKG1uID09IE5VTEwpIHsKLQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQgdG8gYWxsb2NhdGUgVmVyaWZ5IElTUDg0WFggIgotCQkgICAgIklPQ0IuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiAJCXJldHVybiBRTEFfTUVNT1JZX0FMTE9DX0ZBSUxFRDsKIAl9CiAKQEAgLTMyMzcsNDMgKzMxOTMsNDMgQEAKIAkJbW4tPnAucmVxLmVudHJ5X2NvdW50ID0gMTsKIAkJbW4tPnAucmVxLm9wdGlvbnMgPSBjcHVfdG9fbGUxNihvcHRpb25zKTsKIAotCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogRHVtcCBvZiBWZXJpZnkgUmVxdWVzdC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vKSk7Ci0JCURFQlVHMTYocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1uLAotCQkgICAgc2l6ZW9mKCptbikpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MTExYywKKwkJICAgICJEdW1wIG9mIFZlcmlmeSBSZXF1ZXN0LlxuIik7CisJCXFsX2R1bXBfYnVmZmVyKHFsX2RiZ19tYnggKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MTExZSwKKwkJICAgICh1aW50OF90ICopbW4sIHNpemVvZigqbW4pKTsKIAogCQlydmFsID0gcWxhMngwMF9pc3N1ZV9pb2NiX3RpbWVvdXQodmhhLCBtbiwgbW5fZG1hLCAwLCAxMjApOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQkJREVCVUcyXzE2KHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGlzc3VlIFZlcmlmeSAiCi0JCQkgICAgIklPQ0IgKCV4KS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBjYiwKKwkJCSAgICAiRmFpbGVkIHRvIGlzc3VlIHZlcmlmeSBJT0NCICgleCkuXG4iLCBydmFsKTsKIAkJCWdvdG8gdmVyaWZ5X2RvbmU7CiAJCX0KIAotCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogRHVtcCBvZiBWZXJpZnkgUmVzcG9uc2UuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubykpOwotCQlERUJVRzE2KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKiltbiwKLQkJICAgIHNpemVvZigqbW4pKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4ICsgcWxfZGJnX2J1ZmZlciwgdmhhLCAweDExMTAsCisJCSAgICAiRHVtcCBvZiBWZXJpZnkgUmVzcG9uc2UuXG4iKTsKKwkJcWxfZHVtcF9idWZmZXIocWxfZGJnX21ieCArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgxMTE4LAorCQkgICAgKHVpbnQ4X3QgKiltbiwgc2l6ZW9mKCptbikpOwogCiAJCXN0YXR1c1swXSA9IGxlMTZfdG9fY3B1KG1uLT5wLnJzcC5jb21wX3N0YXR1cyk7CiAJCXN0YXR1c1sxXSA9IHN0YXR1c1swXSA9PSBDU19WQ1NfQ0hJUF9GQUlMVVJFID8KIAkJICAgIGxlMTZfdG9fY3B1KG1uLT5wLnJzcC5mYWlsdXJlX2NvZGUpIDogMDsKLQkJREVCVUcyXzE2KHByaW50aygiJXMoJWxkKTogY3M9JXggZmM9JXhcbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBzdGF0dXNbMF0sIHN0YXR1c1sxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwY2UsCisJCSAgICAiY3M9JXggZmM9JXguXG4iLCBzdGF0dXNbMF0sIHN0YXR1c1sxXSk7CiAKIAkJaWYgKHN0YXR1c1swXSAhPSBDU19DT01QTEVURSkgewogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlpZiAoIShvcHRpb25zICYgVkNPX0RPTlRfVVBEQVRFX0ZXKSkgewotCQkJCURFQlVHMl8xNihwcmludGsoIiVzKCVsZCk6IEZpcm13YXJlIHVwZGF0ZSAiCi0JCQkJICAgICJmYWlsZWQuIFJldHJ5aW5nIHdpdGhvdXQgdXBkYXRlICIKLQkJCQkgICAgImZpcm13YXJlLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBjZiwKKwkJCQkgICAgIkZpcm13YXJlIHVwZGF0ZSBmYWlsZWQuIFJldHJ5aW5nICIKKwkJCQkgICAgIndpdGhvdXQgdXBkYXRlIGZpcm13YXJlLlxuIik7CiAJCQkJb3B0aW9ucyB8PSBWQ09fRE9OVF9VUERBVEVfRlc7CiAJCQkJb3B0aW9ucyAmPSB+VkNPX0ZPUkNFX1VQREFURTsKIAkJCQlyZXRyeSA9IDE7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlERUJVRzJfMTYocHJpbnRrKCIlcyglbGQpOiBmaXJtd2FyZSB1cGRhdGVkIHRvICV4LlxuIiwKLQkJCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCQkJICAgIGxlMzJfdG9fY3B1KG1uLT5wLnJzcC5md192ZXIpKSk7CisJCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZDAsCisJCQkgICAgIkZpcm13YXJlIHVwZGF0ZWQgdG8gJXguXG4iLAorCQkJICAgIGxlMzJfdG9fY3B1KG1uLT5wLnJzcC5md192ZXIpKTsKIAogCQkJLyogTk9URTogd2Ugb25seSB1cGRhdGUgT1AgZmlybXdhcmUuICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmNzODR4eC0+YWNjZXNzX2xvY2ssIGZsYWdzKTsKQEAgLTMyODgsMTAgKzMyNDQsOSBAQAogCWRtYV9wb29sX2ZyZWUoaGEtPnNfZG1hX3Bvb2wsIG1uLCBtbl9kbWEpOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzE2KHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGQxLCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJfSBlbHNlIHsKLQkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkMiwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0zMzA3LDYgKzMyNjIsOCBAQAogCXN0cnVjdCBkZXZpY2VfcmVnXzI1eHhtcSBfX2lvbWVtICpyZWc7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZDMsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJbWNwLT5tYlswXSA9IE1CQ19JTklUSUFMSVpFX01VTFRJUTsKIAltY3AtPm1iWzFdID0gcmVxLT5vcHRpb25zOwogCW1jcC0+bWJbMl0gPSBNU1coTFNEKHJlcS0+ZG1hKSk7CkBAIC0zMzQ0LDkgKzMzMDEsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKLQkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORyAiJXMoJWxkKTogZmFpbGVkPSV4IG1iMD0leC5cbiIsCi0JCQlfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGQ0LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOworCX0gZWxzZSB7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkNSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CisJfQorCiAJcmV0dXJuIHJ2YWw7CiB9CiAKQEAgLTMzNjAsNiArMzMyMSw4IEBACiAJc3RydWN0IGRldmljZV9yZWdfMjV4eG1xIF9faW9tZW0gKnJlZzsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAorCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkNiwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CisKIAltY3AtPm1iWzBdID0gTUJDX0lOSVRJQUxJWkVfTVVMVElROwogCW1jcC0+bWJbMV0gPSByc3AtPm9wdGlvbnM7CiAJbWNwLT5tYlsyXSA9IE1TVyhMU0QocnNwLT5kbWEpKTsKQEAgLTMzOTMsMTAgKzMzNTYsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKLQkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORyAiJXMoJWxkKTogZmFpbGVkPSV4ICIKLQkJCSJtYjA9JXguXG4iLCBfX2Z1bmNfXywKLQkJCXZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkNywKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKKwl9IGVsc2UgeworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZDgsICJEb25lICVzLlxuIiwgX19mdW5jX18pOworCX0KKwogCXJldHVybiBydmFsOwogfQogCkBAIC0zNDA3LDcgKzMzNzMsNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkOSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0lEQ19BQ0s7CiAJbWVtY3B5KCZtY3AtPm1iWzFdLCBtYiwgUUxBX0lEQ19BQ0tfUkVHUyAqIHNpemVvZih1aW50MTZfdCkpOwpAQCAtMzQxOCwxMCArMzM4NCwxMCBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGRhLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZGIsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMzQzNCwxMSArMzQwMCwxMSBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAorCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBkYywgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoIUlTX1FMQTgxWFgodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX0ZMQVNIX0FDQ0VTU19DVFJMOwogCW1jcC0+bWJbMV0gPSBGQUNfT1BUX0NNRF9HRVRfU0VDVE9SX1NJWkU7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKQEAgLTM0NDgsMTAgKzM0MTQsMTEgQEAKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZGQsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKKwkJICAgIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZGUsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCQkqc2VjdG9yX3NpemUgPSBtY3AtPm1iWzFdOwogCX0KIApAQCAtMzQ2OCw3ICszNDM1LDcgQEAKIAlpZiAoIUlTX1FMQTgxWFgodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGRmLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1jcC0+bWJbMF0gPSBNQkNfRkxBU0hfQUNDRVNTX0NUUkw7CiAJbWNwLT5tYlsxXSA9IGVuYWJsZSA/IEZBQ19PUFRfQ01EX1dSSVRFX0VOQUJMRSA6CkBAIC0zNDgwLDEwICszNDQ3LDExIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4LlxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGUwLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsCisJCSAgICBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGUxLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTM0OTksNyArMzQ2Nyw3IEBACiAJaWYgKCFJU19RTEE4MVhYKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlMiwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0ZMQVNIX0FDQ0VTU19DVFJMOwogCW1jcC0+bWJbMV0gPSBGQUNfT1BUX0NNRF9FUkFTRV9TRUNUT1I7CkBAIC0zNTE0LDExICszNDgyLDExIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4ICIKLQkJICAgICJtYlsyXT0leC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sCi0JCSAgICBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlMywKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXggbWJbMl09JXguXG4iLAorCQkgICAgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlNCwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0zNTMxLDcgKzM0OTksNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlNSwgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX1JFU1RBUlRfTVBJX0ZXOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CkBAIC0zNTQxLDEwICszNTA5LDExIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggbWJbMV09MHgleC5cbiIsCi0JCSAgICBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlNiwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXggbWJbMV09JXguXG4iLAorCQkgICAgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlNywgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0zNTU5LDExICszNTI4LDExIEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZTgsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJaWYgKCFJU19GV0kyX0NBUEFCTEUoaGEpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCiAJaWYgKGxlbiA9PSAxKQogCQlvcHQgfD0gQklUXzA7CiAKQEAgLTM1ODYsMTAgKzM1NTUsMTAgQEAKIAkJKnNmcCA9IG1jcC0+bWJbMV07CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGU5LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZWEsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMzYwNCwxMSArMzU3MywxMSBAQAogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGViLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQogCWlmIChsZW4gPT0gMSkKIAkJb3B0IHw9IEJJVF8wOwogCkBAIC0zNjMxLDEwICszNjAwLDEwIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZWMsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgcnZhbCwgbWNwLT5tYlswXSk7CiAJfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBlZCwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC0zNjQ4LDExICszNjE3LDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGVlLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfUUxBOFhYWF9UWVBFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfWEdNQUNfU1RBVFM7CiAJbWNwLT5tYlsyXSA9IE1TVyhzdGF0c19kbWEpOwogCW1jcC0+bWJbM10gPSBMU1coc3RhdHNfZG1hKTsKQEAgLTM2NjYsMTEgKzM2MzUsMTIgQEAKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCAiCi0JCSAgICAibWJbMV09MHgleCBtYlsyXT0weCV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwKLQkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGVmLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leCBtYlsyXT0leC5cbiIsCisJCSAgICBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGYwLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKKwogCiAJCSphY3R1YWxfc2l6ZSA9IG1jcC0+bWJbMl0gPDwgMjsKIAl9CkBAIC0zNjg2LDExICszNjU2LDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGYxLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfUUxBOFhYWF9UWVBFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCiAJbWNwLT5tYlswXSA9IE1CQ19HRVRfRENCWF9QQVJBTVM7CiAJbWNwLT5tYlsxXSA9IDA7CiAJbWNwLT5tYlsyXSA9IE1TVyh0bHZfZG1hKTsKQEAgLTM3MDUsMTEgKzM2NzUsMTEgQEAKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCAiCi0JCSAgICAibWJbMV09MHgleCBtYlsyXT0weCV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwKLQkJICAgIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0sIG1jcC0+bWJbMl0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGYyLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leCBtYlsyXT0leC5cbiIsCisJCSAgICBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdLCBtY3AtPm1iWzJdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGYzLCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gcnZhbDsKQEAgLTM3MjIsMTEgKzM2OTIsMTEgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZjQsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJaWYgKCFJU19GV0kyX0NBUEFCTEUodmhhLT5odykpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX1JFQURfUkFNX0VYVEVOREVEOwogCW1jcC0+bWJbMV0gPSBMU1cocmlzY19hZGRyKTsKIAltY3AtPm1iWzhdID0gTVNXKHJpc2NfYWRkcik7CkBAIC0zNzM2LDEwICszNzA2LDEwIEBACiAJbWNwLT5mbGFncyA9IDA7CiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leCBtYlswXT0leC5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTBmNSwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGY2LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAkJKmRhdGEgPSBtY3AtPm1iWzNdIDw8IDE2IHwgbWNwLT5tYlsyXTsKIAl9CiAKQEAgLTM3NTUsNyArMzcyNSw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAJdWludDMyX3QgaXRlcl9jbnQgPSAweDE7CiAKLQlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGY3LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKIAltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfTE9PUF9CQUNLOwpAQCAtMzc5NCwxNSArMzc2NCwxMiBAQAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCQkJIiglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCAiCi0JCQkibWJbMV09MHgleCBtYlsyXT0weCV4IG1iWzNdPTB4JXggbWJbMThdPTB4JXggIgotCQkJIm1iWzE5XT0weCV4LlxuIiwKLQkJCXZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSwKLQkJCW1jcC0+bWJbM10sIG1jcC0+bWJbMThdLCBtY3AtPm1iWzE5XSkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZjgsCisJCSAgICAiRmFpbGVkPSV4IG1iWzBdPSV4IG1iWzFdPSV4IG1iWzJdPSV4IG1iWzNdPSV4IG1iWzE4XT0leCAiCisJCSAgICAibWJbMTldPSV4LlxuIiwgcnZhbCwgbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSwKKwkJICAgIG1jcC0+bWJbM10sIG1jcC0+bWJbMThdLCBtY3AtPm1iWzE5XSk7CiAJfSBlbHNlIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJzY3NpKCVsZCk6IGRvbmUuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGY5LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIAl9CiAKIAkvKiBDb3B5IG1haWxib3ggaW5mb3JtYXRpb24gKi8KQEAgLTM4MTksNyArMzc4Niw3IEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGZhLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKIAogCW1lbXNldChtY3AtPm1iLCAwICwgc2l6ZW9mKG1jcC0+bWIpKTsKIAltY3AtPm1iWzBdID0gTUJDX0RJQUdOT1NUSUNfRUNITzsKQEAgLTM4NTgsMTIgKzM4MjUsMTEgQEAKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICIoJWxkKTogZmFpbGVkPSV4IG1iWzBdPTB4JXggbWJbMV09MHgleC5cbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0sIG1jcC0+bWJbMV0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGZiLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leCBtYlsxXT0leC5cbiIsCisJCSAgICBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKTsKIAl9IGVsc2UgewotCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgInNjc2koJWxkKTogZG9uZS5cbiIsIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZmMsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCS8qIENvcHkgbWFpbGJveCBpbmZvcm1hdGlvbiAqLwpAQCAtMzg3MiwxNCArMzgzOCwxNCBAQAogfQogCiBpbnQKLXFsYTg0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBlbmFibGVfZGlhZ25vc3RpYykKK3FsYTg0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgZW5hYmxlX2RpYWdub3N0aWMpCiB7CiAJaW50IHJ2YWw7CiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGVuYWJsZV9kaWFnPSVkIGVudGVyZWQuXG4iLCBfX2Z1bmNfXywKLQkJaGEtPmhvc3Rfbm8sIGVuYWJsZV9kaWFnbm9zdGljKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGZkLAorCSAgICAiRW50ZXJlZCAlcyBlbmFibGVfZGlhZz0lZC5cbiIsIF9fZnVuY19fLCBlbmFibGVfZGlhZ25vc3RpYyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0lTUDg0WFhfUkVTRVQ7CiAJbWNwLT5tYlsxXSA9IGVuYWJsZV9kaWFnbm9zdGljOwpAQCAtMzg4NywxMyArMzg1MywxMiBAQAogCW1jcC0+aW5fbWIgPSBNQlhfMXxNQlhfMDsKIAltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gTUJYX0RNQV9PVVR8TUJYX0RNQV9JTnxJT0NUTF9DTUQ7Ci0JcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKGhhLCBtY3ApOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKLQkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKLQkJCXJ2YWwpKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMGZlLCAiRmFpbGVkPSV4LlxuIiwgcnZhbCk7CiAJZWxzZQotCQlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZG9uZS5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwZmYsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIHJ2YWw7CiB9CkBAIC0zOTA1LDExICszODcwLDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTAwLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKHZoYS0+aHcpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAotCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCiAJbWNwLT5tYlswXSA9IE1CQ19XUklURV9SQU1fV09SRF9FWFRFTkRFRDsKIAltY3AtPm1iWzFdID0gTFNXKHJpc2NfYWRkcik7CiAJbWNwLT5tYlsyXSA9IExTVyhkYXRhKTsKQEAgLTM5MjEsMTAgKzM4ODYsMTAgQEAKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTAxLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMDIsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMzk0MSw4ICszOTA2LDcgQEAKIAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAotCURFQlVHMTEocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMDMsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJY2xlYXJfYml0KE1CWF9JTlRFUlJVUFQsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAKQEAgLTM5ODIsMTEgKzM5NDYsMTAgQEAKIAkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBmYWlsZWQ9JXggbWJbMF09JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCwgbWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTA0LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1iWzBdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMDUsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMzk5OSwxMiArMzk2MiwxMSBAQAogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTA2LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX0RBVEFfUkFURTsKIAltY3AtPm1iWzFdID0gMDsKIAltY3AtPm91dF9tYiA9IE1CWF8xfE1CWF8wOwpAQCAtNDAxMywxMSArMzk3NSwxMCBAQAogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwKLQkJICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTA3LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTwotCQkgICAgIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTEwOCwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChtY3AtPm1iWzFdICE9IDB4NykKIAkJCWhhLT5saW5rX2RhdGFfcmF0ZSA9IG1jcC0+bWJbMV07CiAJfQpAQCAtNDAzMyw4ICszOTk0LDcgQEAKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTwotCSAgICAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMDksICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJaWYgKCFJU19RTEE4MVhYKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CkBAIC00MDQ3LDE1ICs0MDA3LDEzIEBACiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICIlcyglbGQpOiBmYWlsZWQ9JXggKCV4KS5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTEwYSwKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKIAl9IGVsc2UgewogCQkvKiBDb3B5IGFsbCBiaXRzIHRvIHByZXNlcnZlIG9yaWdpbmFsIHZhbHVlICovCiAJCW1lbWNweShtYiwgJm1jcC0+bWJbMV0sIHNpemVvZih1aW50MTZfdCkgKiA0KTsKIAotCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMGIsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAlyZXR1cm4gcnZhbDsKIH0KQEAgLTQwNjcsOCArNDAyNSw3IEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCi0JREVCVUcxMShwcmludGsoS0VSTl9JTkZPCi0JICAgICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTEwYywgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAltY3AtPm1iWzBdID0gTUJDX1NFVF9QT1JUX0NPTkZJRzsKIAkvKiBDb3B5IGFsbCBiaXRzIHRvIHByZXNlcnZlIG9yaWdpbmFsIHNldHRpbmcgKi8KQEAgLTQwODAsMTIgKzQwMzcsMTAgQEAKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMTBkLAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZQotCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMGUsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIHJ2YWw7CiB9CkBAIC00MTAwLDEyICs0MDU1LDExIEBACiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDExMGYsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOworCiAJaWYgKCFJU19RTEEyNFhYX1RZUEUoaGEpICYmICFJU19RTEEyNVhYKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkgICAgIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltY3AtPm1iWzBdID0gTUJDX1BPUlRfUEFSQU1TOwogCW1jcC0+bWJbMV0gPSBsb29wX2lkOwogCWlmIChoYS0+ZmxhZ3MuZmNwX3ByaW9fZW5hYmxlZCkKQEAgLTQxMjcsMTIgKzQwODEsOSBAQAogCX0KIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCURFQlVHMl8zXzExKHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwY2QsICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwY2MsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtNDE0NSwxMyArNDA5NiwxMiBAQAogCXVpbnQ4X3QgYnl0ZTsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCURFQlVHMTEocHJpbnRrKEtFUk5fSU5GTyAiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwY2EsICJFbnRlcmVkICVzLlxuIiwgX19mdW5jX18pOwogCiAJLyogSW50ZWdlciBwYXJ0ICovCiAJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCAwLCAmYnl0ZSwgMHg5OCwgMHgwMSwgMSwgQklUXzEzfEJJVF8wKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwYzksICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAkJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMDsKIAkJZ290byBmYWlsOwogCX0KQEAgLTQxNjAsMTQgKzQxMTAsMTMgQEAKIAkvKiBGcmFjdGlvbiBwYXJ0ICovCiAJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCAwLCAmYnl0ZSwgMHg5OCwgMHgxMCwgMSwgQklUXzEzfEJJVF8wKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgcnZhbCkpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMTksICJGYWlsZWQ9JXguXG4iLCBydmFsKTsKIAkJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMDsKIAkJZ290byBmYWlsOwogCX0KIAkqZnJhYyA9IChieXRlID4+IDYpICogMjU7CiAKLQlERUJVRzExKHByaW50ayhLRVJOX0lORk8gIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDE4LCAiRG9uZSAlcy5cbiIsIF9fZnVuY19fKTsKIGZhaWw6CiAJcmV0dXJuIHJ2YWw7CiB9CkBAIC00MTgwLDEyICs0MTI5LDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDE3LCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzExKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0KIAltZW1zZXQobWNwLCAwLCBzaXplb2YobWJ4X2NtZF90KSk7CiAJbWNwLT5tYlswXSA9IE1CQ19UT0dHTEVfSU5URVJSVVBUOwogCW1jcC0+bWJbMV0gPSAxOwpAQCAtNDE5NywxMiArNDE0NSwxMCBAQAogCiAJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzJfM18xMShxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgX19mdW5jX18sCi0JCQl2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDE2LAorCQkgICAgIkZhaWxlZD0leCBtYlswXT0leC5cbiIsIHJ2YWwsIG1jcC0+bWJbMF0pOwogCX0gZWxzZSB7Ci0JCURFQlVHMTEocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAwZSwgIkRvbmUgJXMuXG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJcmV0dXJuIHJ2YWw7CkBAIC00MjE2LDEyICs0MTYyLDExIEBACiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJcWxfZGJnKHFsX2RiZ19tYngsIHZoYSwgMHgxMDBkLCAiRW50ZXJlZCAlcy5cbiIsIF9fZnVuY19fKTsKKwogCWlmICghSVNfUUxBODJYWChoYSkpCiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCi0JREVCVUcxMShxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCiAJbWVtc2V0KG1jcCwgMCwgc2l6ZW9mKG1ieF9jbWRfdCkpOwogCW1jcC0+bWJbMF0gPSBNQkNfVE9HR0xFX0lOVEVSUlVQVDsKIAltY3AtPm1iWzFdID0gMDsKQEAgLTQyMzMsMTIgKzQxNzgsMTAgQEAKIAogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIiVzKCVsZCk6IGZhaWxlZD0leCBtYlswXT0leC5cbiIsIF9fZnVuY19fLAotCQkJdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfbWJ4LCB2aGEsIDB4MTAwYywKKwkJICAgICJGYWlsZWQ9JXggbWJbMF09JXguXG4iLCBydmFsLCBtY3AtPm1iWzBdKTsKIAl9IGVsc2UgewotCQlERUJVRzExKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX21ieCwgdmhhLCAweDEwMGIsICJEb25lICVzLlxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiBydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IDVlMzQzOTEuLmY0ODhjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTM2LDggKzM2LDkgQEAKIAltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAJdnBfaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGhhLT52cF9pZHhfbWFwLCBoYS0+bWF4X25waXZfdnBvcnRzICsgMSk7CiAJaWYgKHZwX2lkID4gaGEtPm1heF9ucGl2X3Zwb3J0cykgewotCQlERUJVRzE1KHByaW50ayAoInZwX2lkICVkIGlzIGJpZ2dlciB0aGFuIG1heC1zdXBwb3J0ZWQgJWQuXG4iLAotCQkgICAgdnBfaWQsIGhhLT5tYXhfbnBpdl92cG9ydHMpKTsKKwkJcWxfZGJnKHFsX2RiZ192cG9ydCwgdmhhLCAweGEwMDAsCisJCSAgICAidnBfaWQgJWQgaXMgYmlnZ2VyIHRoYW4gbWF4LXN1cHBvcnRlZCAlZC5cbiIsCisJCSAgICB2cF9pZCwgaGEtPm1heF9ucGl2X3Zwb3J0cyk7CiAJCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOwogCQlyZXR1cm4gdnBfaWQ7CiAJfQpAQCAtMTMxLDkgKzEzMiw5IEBACiAJZmNfcG9ydF90ICpmY3BvcnQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkgewotCQlERUJVRzE1KHByaW50aygic2NzaSglbGQpOiBNYXJraW5nIHBvcnQgZGVhZCwgIgotCQkgICAgImxvb3BfaWQ9MHglMDR4IDoleFxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubywgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPnZwX2lkeCkpOworCQlxbF9kYmcocWxfZGJnX3Zwb3J0LCB2aGEsIDB4YTAwMSwKKwkJICAgICJNYXJraW5nIHBvcnQgZGVhZCwgbG9vcF9pZD0weCUwNHggOiAleC5cbiIsCisJCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+dnBfaWR4KTsKIAogCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDAsIDApOwogCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfVU5DT05GSUdVUkVEKTsKQEAgLTE4NywxMyArMTg4LDEzIEBACiAJCWdvdG8gZW5hYmxlX2ZhaWxlZDsKIAl9CiAKLQlERUJVRzE1KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgIlZpcnR1YWwgcG9ydCB3aXRoIGlkOiAlZCAtIEVuYWJsZWRcbiIsIHZoYS0+dnBfaWR4KSk7CisJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMWEsCisJICAgICJWaXJ0dWFsIHBvcnQgd2l0aCBpZDogJWQgLSBFbmFibGVkLlxuIiwgdmhhLT52cF9pZHgpOwogCXJldHVybiAwOwogCiBlbmFibGVfZmFpbGVkOgotCURFQlVHMTUocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiVmlydHVhbCBwb3J0IHdpdGggaWQ6ICVkIC0gRGlzYWJsZWRcbiIsIHZoYS0+dnBfaWR4KSk7CisJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMWIsCisJICAgICJWaXJ0dWFsIHBvcnQgd2l0aCBpZDogJWQgLSBEaXNhYmxlZC5cbiIsIHZoYS0+dnBfaWR4KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjA1LDEyICsyMDYsMTIgQEAKIAogCWZjX3Zwb3J0ID0gdmhhLT5mY192cG9ydDsKIAotCURFQlVHMTUocHJpbnRrKCJzY3NpKCVsZCk6ICVzOiBjaGFuZ2UgcmVxdWVzdCAjMyBmb3IgdGhpcyBob3N0LlxuIiwKLQkgICAgdmhhLT5ob3N0X25vLCBfX2Z1bmNfXykpOworCXFsX2RiZyhxbF9kYmdfdnBvcnQsIHZoYSwgMHhhMDAyLAorCSAgICAiJXM6IGNoYW5nZSByZXF1ZXN0ICMzLlxuIiwgX19mdW5jX18pOwogCXJldCA9IHFsYTJ4MDBfc2VuZF9jaGFuZ2VfcmVxdWVzdCh2aGEsIDB4MywgdmhhLT52cF9pZHgpOwogCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcxNShxbGFfcHJpbnRrKEtFUk5fRVJSLCB2aGEtPmh3LCAiRmFpbGVkIHRvIGVuYWJsZSAiCi0JCSAgICAicmVjZWl2aW5nIG9mIFJTQ04gcmVxdWVzdHM6IDB4JXhcbiIsIHJldCkpOworCQlxbF9kYmcocWxfZGJnX3Zwb3J0LCB2aGEsIDB4YTAwMywgIkZhaWxlZCB0byBlbmFibGUgIgorCQkgICAgInJlY2VpdmluZyBvZiBSU0NOIHJlcXVlc3RzOiAweCV4LlxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCS8qIENvcnJlc3BvbmRzIHRvIFNDUiBlbmFibGVkICovCkBAIC0yNDgsOSArMjQ5LDkgQEAKIAkJCWNhc2UgTUJBX0NIR19JTl9DT05ORUNUSU9OOgogCQkJY2FzZSBNQkFfUE9SVF9VUERBVEU6CiAJCQljYXNlIE1CQV9SU0NOX1VQREFURToKLQkJCQlERUJVRzE1KHByaW50aygic2NzaSglbGQpJXM6IEFzeW5jX2V2ZW50IGZvciIKLQkJCQkiIFZQWyVkXSwgbWIgPSAweCV4LCB2aGE9JXBcbiIsCi0JCQkJdmhhLT5ob3N0X25vLCBfX2Z1bmNfXywgaSwgKm1iLCB2aGEpKTsKKwkJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTAyNCwKKwkJCQkgICAgIkFzeW5jX2V2ZW50IGZvciBWUFslZF0sIG1iPTB4JXggdmhhPSVwLlxuIiwKKwkJCQkgICAgaSwgKm1iLCB2aGEpOwogCQkJCXFsYTJ4MDBfYXN5bmNfZXZlbnQodmhhLCByc3AsIG1iKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTI4NiwzNyArMjg3LDQ5IEBACiAJaWYgKCF0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKQogCQlxbGEyNHh4X2NvbnRyb2xfdnAodmhhLCBWQ0VfQ09NTUFORF9ESVNBQkxFX1ZQU19MT0dPX0FMTCk7CiAKLQlERUJVRzE1KHByaW50aygic2NzaSglbGQpOiBTY2hlZHVsaW5nIGVuYWJsZSBvZiBWcG9ydCAlZC4uLlxuIiwKLQkgICAgdmhhLT5ob3N0X25vLCB2aGEtPnZwX2lkeCkpOworCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDFkLAorCSAgICAiU2NoZWR1bGluZyBlbmFibGUgb2YgVnBvcnQgJWQuXG4iLCB2aGEtPnZwX2lkeCk7CiAJcmV0dXJuIHFsYTI0eHhfZW5hYmxlX3ZwKHZoYSk7CiB9CiAKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfZG9fZHBjX3ZwKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogeworCXFsX2RiZyhxbF9kYmdfZHBjLCB2aGEsIDB4NDAxMiwKKwkgICAgIkVudGVyaW5nICVzLlxuIiwgX19mdW5jX18pOworCXFsX2RiZyhxbF9kYmdfZHBjLCB2aGEsIDB4NDAxMywKKwkgICAgInZwX2ZsYWdzOiAweCVseC5cbiIsIHZoYS0+dnBfZmxhZ3MpOworCiAJcWxhMngwMF9kb193b3JrKHZoYSk7CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFZQX0lEWF9BQ1FVSVJFRCwgJnZoYS0+dnBfZmxhZ3MpKSB7CiAJCS8qIFZQIGFjcXVpcmVkLiBjb21wbGV0ZSBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwkJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDE0LAorCQkgICAgIkNvbmZpZ3VyZSBWUCBzY2hlZHVsZWQuXG4iKTsKIAkJcWxhMjR4eF9jb25maWd1cmVfdnAodmhhKTsKKwkJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDE1LAorCQkgICAgIkNvbmZpZ3VyZSBWUCBlbmQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHRlc3RfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSB7CisJCXFsX2RiZyhxbF9kYmdfZHBjLCB2aGEsIDB4NDAxNiwKKwkJICAgICJGQ1BvcnQgdXBkYXRlIHNjaGVkdWxlZC5cbiIpOwogCQlxbGEyeDAwX3VwZGF0ZV9mY3BvcnRzKHZoYSk7CiAJCWNsZWFyX2JpdChGQ1BPUlRfVVBEQVRFX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDE3LAorCQkgICAgIkZDUG9ydCB1cGRhdGUgZW5kLlxuIik7CiAJfQogCiAJaWYgKCh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpICYmCiAJCSF0ZXN0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZ2aGEtPmRwY19mbGFncykgJiYKIAkJYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9zdGF0ZSkgIT0gTE9PUF9ET1dOKSB7CiAKLQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IHFsYTJ4MDBfcG9ydF9sb2dpbigpXG4iLAotCQkJCQkJdmhhLT5ob3N0X25vKSk7CisJCXFsX2RiZyhxbF9kYmdfZHBjLCB2aGEsIDB4NDAxOCwKKwkJICAgICJSZWxvZ2luIG5lZWRlZCBzY2hlZHVsZWQuXG4iKTsKIAkJcWxhMngwMF9yZWxvZ2luKHZoYSk7Ci0KLQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IHFsYTJ4MDBfcG9ydF9sb2dpbiAtIGVuZFxuIiwKLQkJCQkJCQl2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDE5LAorCQkgICAgIlJlbG9naW4gbmVlZGVkIGVuZC5cbiIpOwogCX0KIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSAmJgpAQCAtMzI2LDExICszMzksMTcgQEAKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTE9PUF9SRVNZTkNfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAJCWlmICghKHRlc3RfYW5kX3NldF9iaXQoTE9PUF9SRVNZTkNfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKSkgeworCQkJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDFhLAorCQkJICAgICJMb29wIHJlc3luYyBzY2hlZHVsZWQuXG4iKTsKIAkJCXFsYTJ4MDBfbG9vcF9yZXN5bmModmhhKTsKIAkJCWNsZWFyX2JpdChMT09QX1JFU1lOQ19BQ1RJVkUsICZ2aGEtPmRwY19mbGFncyk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgdmhhLCAweDQwMWIsCisJCQkgICAgIkxvb3AgcmVzeW5jIGVuZC5cbiIpOwogCQl9CiAJfQogCisJcWxfZGJnKHFsX2RiZ19kcGMsIHZoYSwgMHg0MDFjLAorCSAgICAiRXhpdGluZyAlcy5cbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk2LDkgKzQxNSwxMCBAQAogCiAJLyogQ2hlY2sgdXAgbWF4LW5waXYtc3VwcG9ydHMgKi8KIAlpZiAoaGEtPm51bV92aG9zdHMgPiBoYS0+bWF4X25waXZfdnBvcnRzKSB7Ci0JCURFQlVHMTUocHJpbnRrKCJzY3NpKCVsZCk6IG51bV92aG9zdHMgJXVkIGlzIGJpZ2dlciB0aGFuICIKLQkJICAgICJtYXhfbnB2X3Zwb3J0cyAldWQuXG4iLCBiYXNlX3ZoYS0+aG9zdF9ubywKLQkJICAgIGhhLT5udW1fdmhvc3RzLCBoYS0+bWF4X25waXZfdnBvcnRzKSk7CisJCXFsX2RiZyhxbF9kYmdfdnBvcnQsIHZoYSwgMHhhMDA0LAorCQkgICAgIm51bV92aG9zdHMgJXVkIGlzIGJpZ2dlciAiCisJCSAgICAidGhhbiBtYXhfbnBpdl92cG9ydHMgJXVkLlxuIiwKKwkJICAgIGhhLT5udW1fdmhvc3RzLCBoYS0+bWF4X25waXZfdnBvcnRzKTsKIAkJcmV0dXJuIFZQQ0VSUl9VTlNVUFBPUlRFRDsKIAl9CiAJcmV0dXJuIDA7CkBAIC00MTUsNyArNDM1LDggQEAKIAogCXZoYSA9IHFsYTJ4MDBfY3JlYXRlX2hvc3Qoc2h0LCBoYSk7CiAJaWYgKCF2aGEpIHsKLQkJREVCVUcocHJpbnRrKCJxbGEyeHh4OiBzY3NpX2hvc3RfYWxsb2MoKSBmYWlsZWQgZm9yIHZwb3J0XG4iKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGEwMDUsCisJCSAgICAic2NzaV9ob3N0X2FsbG9jKCkgZmFpbGVkIGZvciB2cG9ydC5cbiIpOwogCQlyZXR1cm4oTlVMTCk7CiAJfQogCkBAIC00MjksOCArNDUwLDggQEAKIAl2aGEtPmRldmljZV9mbGFncyA9IDA7CiAJdmhhLT52cF9pZHggPSBxbGEyNHh4X2FsbG9jYXRlX3ZwX2lkKHZoYSk7CiAJaWYgKHZoYS0+dnBfaWR4ID4gaGEtPm1heF9ucGl2X3Zwb3J0cykgewotCQlERUJVRzE1KHByaW50aygic2NzaSglbGQpOiBDb3VsZG4ndCBhbGxvY2F0ZSB2cF9pZC5cbiIsCi0JCQl2aGEtPmhvc3Rfbm8pKTsKKwkJcWxfZGJnKHFsX2RiZ192cG9ydCwgdmhhLCAweGEwMDYsCisJCSAgICAiQ291bGRuJ3QgYWxsb2NhdGUgdnBfaWQuXG4iKTsKIAkJZ290byBjcmVhdGVfdmhvc3RfZmFpbGVkOwogCX0KIAl2aGEtPm1nbXRfc3ZyX2xvb3BfaWQgPSAxMCArIHZoYS0+dnBfaWR4OwpAQCAtNDUxLDcgKzQ3Miw3IEBACiAJaG9zdC0+Y2FuX3F1ZXVlID0gYmFzZV92aGEtPnJlcS0+bGVuZ3RoICsgMTI4OwogCWhvc3QtPnRoaXNfaWQgPSAyNTU7CiAJaG9zdC0+Y21kX3Blcl9sdW4gPSAzOwotCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpCisJaWYgKElTX1QxMF9QSV9DQVBBQkxFKGhhKSAmJiBxbDJ4ZW5hYmxlZGlmKQogCQlob3N0LT5tYXhfY21kX2xlbiA9IDMyOwogCWVsc2UKIAkJaG9zdC0+bWF4X2NtZF9sZW4gPSBNQVhfQ01EU1o7CkBAIC00NjEsOCArNDgyLDkgQEAKIAlob3N0LT5tYXhfaWQgPSBNQVhfVEFSR0VUU18yMjAwOwogCWhvc3QtPnRyYW5zcG9ydHQgPSBxbGEyeHh4X3RyYW5zcG9ydF92cG9ydF90ZW1wbGF0ZTsKIAotCURFQlVHMTUocHJpbnRrKCJERUJVRzogZGV0ZWN0IHZwb3J0IGhiYSAlbGQgYXQgYWRkcmVzcyA9ICVwXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8sIHZoYSkpOworCXFsX2RiZyhxbF9kYmdfdnBvcnQsIHZoYSwgMHhhMDA3LAorCSAgICAiRGV0ZWN0IHZwb3J0IGhiYSAlbGQgYXQgYWRkcmVzcyA9ICVwLlxuIiwKKwkgICAgdmhhLT5ob3N0X25vLCB2aGEpOwogCiAJdmhhLT5mbGFncy5pbml0X2RvbmUgPSAxOwogCkBAIC01NjcsOSArNTg5LDkgQEAKIAkJaWYgKHJlcSkgewogCQkJcmV0ID0gcWxhMjV4eF9kZWxldGVfcmVxX3F1ZSh2aGEsIHJlcSk7CiAJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSJDb3VsZG4ndCBkZWxldGUgcmVxIHF1ZSAlZFxuIiwKLQkJCQlyZXEtPmlkKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGVhLAorCQkJCSAgICAiQ291bGRuJ3QgZGVsZXRlIHJlcSBxdWUgJWQuXG4iLAorCQkJCSAgICByZXEtPmlkKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CkBAIC01ODEsOSArNjAzLDkgQEAKIAkJaWYgKHJzcCkgewogCQkJcmV0ID0gcWxhMjV4eF9kZWxldGVfcnNwX3F1ZSh2aGEsIHJzcCk7CiAJCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSJDb3VsZG4ndCBkZWxldGUgcnNwIHF1ZSAlZFxuIiwKLQkJCQlyc3AtPmlkKTsKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGViLAorCQkJCSAgICAiQ291bGRuJ3QgZGVsZXRlIHJzcCBxdWUgJWQuXG4iLAorCQkJCSAgICByc3AtPmlkKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CkBAIC02MDQsOCArNjI2LDggQEAKIAogCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXFfcXVlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlcSA9PSBOVUxMKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkiCi0JCQkiZm9yIHJlcXVlc3QgcXVlXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgYmFzZV92aGEsIDB4MDBkOSwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByZXF1ZXN0IHF1ZXVlLlxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNjE0LDggKzYzNiw4IEBACiAJCQkocmVxLT5sZW5ndGggKyAxKSAqIHNpemVvZihyZXF1ZXN0X3QpLAogCQkJJnJlcS0+ZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVxLT5yaW5nID09IE5VTEwpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkiTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIC0gcmVxdWVzdF9yaW5nXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgYmFzZV92aGEsIDB4MDBkYSwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2N0ZSBtZW1vcnkgZm9yIHJlcXVlc3RfcmluZy5cbiIpOwogCQlnb3RvIHF1ZV9mYWlsZWQ7CiAJfQogCkBAIC02MjMsOCArNjQ1LDggQEAKIAlxdWVfaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGhhLT5yZXFfcWlkX21hcCwgaGEtPm1heF9yZXFfcXVldWVzKTsKIAlpZiAocXVlX2lkID49IGhhLT5tYXhfcmVxX3F1ZXVlcykgewogCQltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTm8gcmVzb3VyY2VzIHRvIGNyZWF0ZSAiCi0JCQkgImFkZGl0aW9uYWwgcmVxdWVzdCBxdWV1ZVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgYmFzZV92aGEsIDB4MDBkYiwKKwkJICAgICJObyByZXNvdXJjZXMgdG8gY3JlYXRlIGFkZGl0aW9uYWwgcmVxdWVzdCBxdWV1ZS5cbiIpOwogCQlnb3RvIHF1ZV9mYWlsZWQ7CiAJfQogCXNldF9iaXQocXVlX2lkLCBoYS0+cmVxX3FpZF9tYXApOwpAQCAtNjMzLDYgKzY1NSwxMiBAQAogCXJlcS0+dnBfaWR4ID0gdnBfaWR4OwogCXJlcS0+cW9zID0gcW9zOwogCisJcWxfZGJnKHFsX2RiZ19tdWx0aXEsIGJhc2VfdmhhLCAweGMwMDIsCisJICAgICJxdWV1ZV9pZD0lZCByaWQ9JWQgdnBfaWR4PSVkIHFvcz0lZC5cbiIsCisJICAgIHF1ZV9pZCwgcmVxLT5yaWQsIHJlcS0+dnBfaWR4LCByZXEtPnFvcyk7CisJcWxfZGJnKHFsX2RiZ19pbml0LCBiYXNlX3ZoYSwgMHgwMGRjLAorCSAgICAicXVldWVfaWQ9JWQgcmlkPSVkIHZwX2lkeD0lZCBxb3M9JWQuXG4iLAorCSAgICBxdWVfaWQsIHJlcS0+cmlkLCByZXEtPnZwX2lkeCwgcmVxLT5xb3MpOwogCWlmIChyc3BfcXVlIDwgMCkKIAkJcmVxLT5yc3AgPSBOVUxMOwogCWVsc2UKQEAgLTY0NSw2ICs2NzMsMTAgQEAKIAkJb3B0aW9ucyB8PSBCSVRfNTsKIAlyZXEtPm9wdGlvbnMgPSBvcHRpb25zOwogCisJcWxfZGJnKHFsX2RiZ19tdWx0aXEsIGJhc2VfdmhhLCAweGMwMDMsCisJICAgICJvcHRpb25zPTB4JXguXG4iLCByZXEtPm9wdGlvbnMpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDBkZCwKKwkgICAgIm9wdGlvbnM9MHgleC5cbiIsIHJlcS0+b3B0aW9ucyk7CiAJZm9yIChjbnQgPSAxOyBjbnQgPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGNudCsrKQogCQlyZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XSA9IE5VTEw7CiAJcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZCA9IDE7CkBAIC02NTYsMTAgKzY4OCwyMSBAQAogCXJlZyA9IElTUF9RVUVfUkVHKGhhLCBxdWVfaWQpOwogCXJlcS0+bWF4X3FfZGVwdGggPSBoYS0+cmVxX3FfbWFwWzBdLT5tYXhfcV9kZXB0aDsKIAltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKKwlxbF9kYmcocWxfZGJnX211bHRpcSwgYmFzZV92aGEsIDB4YzAwNCwKKwkgICAgInJpbmdfcHRyPSVwIHJpbmdfaW5kZXg9JWQsICIKKwkgICAgImNudD0lZCBpZD0lZCBtYXhfcV9kZXB0aD0lZC5cbiIsCisJICAgIHJlcS0+cmluZ19wdHIsIHJlcS0+cmluZ19pbmRleCwKKwkgICAgcmVxLT5jbnQsIHJlcS0+aWQsIHJlcS0+bWF4X3FfZGVwdGgpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDBkZSwKKwkgICAgInJpbmdfcHRyPSVwIHJpbmdfaW5kZXg9JWQsICIKKwkgICAgImNudD0lZCBpZD0lZCBtYXhfcV9kZXB0aD0lZC5cbiIsCisJICAgIHJlcS0+cmluZ19wdHIsIHJlcS0+cmluZ19pbmRleCwgcmVxLT5jbnQsCisJICAgIHJlcS0+aWQsIHJlcS0+bWF4X3FfZGVwdGgpOwogCiAJcmV0ID0gcWxhMjV4eF9pbml0X3JlcV9xdWUoYmFzZV92aGEsIHJlcSk7CiAJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgYmFzZV92aGEsIDB4MDBkZiwKKwkJICAgICIlcyBmYWlsZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCW11dGV4X2xvY2soJmhhLT52cG9ydF9sb2NrKTsKIAkJY2xlYXJfYml0KHF1ZV9pZCwgaGEtPnJlcV9xaWRfbWFwKTsKIAkJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CkBAIC03MDAsOCArNzQzLDggQEAKIAogCXJzcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByc3BfcXVlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJzcCA9PSBOVUxMKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIgotCQkJCSIgcmVzcG9uc2UgcXVlXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgwMDY2LAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc3BvbnNlIHF1ZXVlLlxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIApAQCAtNzEwLDggKzc1Myw4IEBACiAJCQkocnNwLT5sZW5ndGggKyAxKSAqIHNpemVvZihyZXNwb25zZV90KSwKIAkJCSZyc3AtPmRtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJzcC0+cmluZyA9PSBOVUxMKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJIk1lbW9yeSBBbGxvY2F0aW9uIGZhaWxlZCAtIHJlc3BvbnNlX3JpbmdcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIGJhc2VfdmhhLCAweDAwZTEsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzcG9uc2UgcmluZy5cbiIpOwogCQlnb3RvIHF1ZV9mYWlsZWQ7CiAJfQogCkBAIC03MTksOCArNzYyLDggQEAKIAlxdWVfaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGhhLT5yc3BfcWlkX21hcCwgaGEtPm1heF9yc3BfcXVldWVzKTsKIAlpZiAocXVlX2lkID49IGhhLT5tYXhfcnNwX3F1ZXVlcykgewogCQltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTm8gcmVzb3VyY2VzIHRvIGNyZWF0ZSAiCi0JCQkgImFkZGl0aW9uYWwgcmVzcG9uc2UgcXVldWVcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIGJhc2VfdmhhLCAweDAwZTIsCisJCSAgICAiTm8gcmVzb3VyY2VzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIHJlcXVlc3QgcXVldWUuXG4iKTsKIAkJZ290byBxdWVfZmFpbGVkOwogCX0KIAlzZXRfYml0KHF1ZV9pZCwgaGEtPnJzcF9xaWRfbWFwKTsKQEAgLTcyOCwxMiArNzcxLDE2IEBACiAJaWYgKGhhLT5mbGFncy5tc2l4X2VuYWJsZWQpCiAJCXJzcC0+bXNpeCA9ICZoYS0+bXNpeF9lbnRyaWVzW3F1ZV9pZCArIDFdOwogCWVsc2UKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAibXNpeCBub3QgZW5hYmxlZFxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgYmFzZV92aGEsIDB4MDBlMywKKwkJICAgICJNU0lYIG5vdCBlbmFsYmxlZC5cbiIpOwogCiAJaGEtPnJzcF9xX21hcFtxdWVfaWRdID0gcnNwOwogCXJzcC0+cmlkID0gcmlkOwogCXJzcC0+dnBfaWR4ID0gdnBfaWR4OwogCXJzcC0+aHcgPSBoYTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwZTQsCisJICAgICJxdWV1ZV9pZD0lZCByaWQ9JWQgdnBfaWR4PSVkIGh3PSVwLlxuIiwKKwkgICAgcXVlX2lkLCByc3AtPnJpZCwgcnNwLT52cF9pZHgsIHJzcC0+aHcpOwogCS8qIFVzZSBhbHRlcm5hdGUgUENJIGJ1cyBudW1iZXIgKi8KIAlpZiAoTVNCKHJzcC0+cmlkKSkKIAkJb3B0aW9ucyB8PSBCSVRfNDsKQEAgLTc1MCw2ICs3OTcsMTQgQEAKIAlyc3AtPnJzcF9xX2luID0gJnJlZy0+aXNwMjVtcS5yc3BfcV9pbjsKIAlyc3AtPnJzcF9xX291dCA9ICZyZWctPmlzcDI1bXEucnNwX3Ffb3V0OwogCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOworCXFsX2RiZyhxbF9kYmdfbXVsdGlxLCBiYXNlX3ZoYSwgMHhjMDBiLAorCSAgICAib3B0aW9ucz0leCBpZD0lZCByc3BfcV9pbj0lcCByc3BfcV9vdXQ9JXAiLAorCSAgICByc3AtPm9wdGlvbnMsIHJzcC0+aWQsIHJzcC0+cnNwX3FfaW4sCisJICAgIHJzcC0+cnNwX3Ffb3V0KTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwZTUsCisJICAgICJvcHRpb25zPSV4IGlkPSVkIHJzcF9xX2luPSVwIHJzcF9xX291dD0lcCIsCisJICAgIHJzcC0+b3B0aW9ucywgcnNwLT5pZCwgcnNwLT5yc3BfcV9pbiwKKwkgICAgcnNwLT5yc3BfcV9vdXQpOwogCiAJcmV0ID0gcWxhMjV4eF9yZXF1ZXN0X2lycShyc3ApOwogCWlmIChyZXQpCkBAIC03NTcsNyArODEyLDggQEAKIAogCXJldCA9IHFsYTI1eHhfaW5pdF9yc3BfcXVlKGJhc2VfdmhhLCByc3ApOwogCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIGJhc2VfdmhhLCAweDAwZTcsCisJCSAgICAiJXMgZmFpbGVkLlxuIiwgX19mdW5jX18pOwogCQltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAJCWNsZWFyX2JpdChxdWVfaWQsIGhhLT5yc3BfcWlkX21hcCk7CiAJCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwppbmRleCBlMTEzOGJjLi4wNDk4MDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwpAQCAtMzQ4LDYgKzM0OCw3IEBACiBxbGE4Mnh4X3BjaV9zZXRfY3Jid2luZG93XzJNKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEsIHVsb25nICpvZmYpCiB7CiAJdTMyIHdpbl9yZWFkOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCWhhLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOwogCXdyaXRlbChoYS0+Y3JiX3dpbiwKQEAgLTM1OCw5ICszNTksMTAgQEAKIAkgKi8KIAl3aW5fcmVhZCA9IFJEX1JFR19EV09SRCgodm9pZCAqKShDUkJfV0lORE9XXzJNICsgaGEtPm54X3BjaWJhc2UpKTsKIAlpZiAod2luX3JlYWQgIT0gaGEtPmNyYl93aW4pIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICIlczogV3JpdHRlbiBjcmJ3aW4gKDB4JXgpICE9IFJlYWQgY3Jid2luICgweCV4KSwgIgotCQkgICAgIm9mZj0weCVseFxuIiwgX19mdW5jX18sIGhhLT5jcmJfd2luLCB3aW5fcmVhZCwgKm9mZikpOworCQlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMDAsCisJCSAgICAiJXM6IFdyaXR0ZW4gY3Jid2luICgweCV4KSAiCisJCSAgICAiIT0gUmVhZCBjcmJ3aW4gKDB4JXgpLCBvZmY9MHglbHguXG4iLAorCQkgICAgaGEtPmNyYl93aW4sIHdpbl9yZWFkLCAqb2ZmKTsKIAl9CiAJKm9mZiA9ICgqb2ZmICYgTUFTSygxNikpICsgQ1JCX0lORElSRUNUXzJNICsgaGEtPm54X3BjaWJhc2U7CiB9CkBAIC0zNjgsNiArMzcwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogcWxhODJ4eF9wY2lfc2V0X2NyYndpbmRvdyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLCB1NjQgb2ZmKQogeworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAkvKiBTZWUgaWYgd2UgYXJlIGN1cnJlbnRseSBwb2ludGluZyB0byB0aGUgcmVnaW9uIHdlIHdhbnQgdG8gdXNlIG5leHQgKi8KIAlpZiAoKG9mZiA+PSBRTEE4MlhYX0NSQl9QQ0lYX0hPU1QpICYmIChvZmYgPCBRTEE4MlhYX0NSQl9ERFJfTkVUKSkgewogCQkvKiBObyBuZWVkIHRvIGNoYW5nZSB3aW5kb3cuIFBDSVggYW5kIFBDSUVyZWdzIGFyZSBpbiBib3RoCkBAIC0zOTgsOSArNDAxLDEwIEBACiAJCQlyZXR1cm4gb2ZmOwogCX0KIAkvKiBzdHJhbmdlIGFkZHJlc3MgZ2l2ZW4gKi8KLQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSIlczogV2FybmluZzogdW5tX25pY19wY2lfc2V0X2NyYndpbmRvdyBjYWxsZWQgd2l0aCIKLQkJIiBhbiB1bmtub3duIGFkZHJlc3MoJWxseClcbiIsIFFMQTJYWFhfRFJJVkVSX05BTUUsIG9mZik7CisJcWxfZGJnKHFsX2RiZ19wM3AsIHZoYSwgMHhiMDAxLAorCSAgICAiJXg6IFdhcm5pbmc6IHVubV9uaWNfcGNpX3NldF9jcmJ3aW5kb3cgIgorCSAgICAiY2FsbGVkIHdpdGggYW4gdW5rbm93biBhZGRyZXNzKCVsbHgpLlxuIiwKKwkgICAgUUxBMlhYWF9EUklWRVJfTkFNRSwgb2ZmKTsKIAlyZXR1cm4gb2ZmOwogfQogCkBAIC01NjMsNiArNTY3LDcgQEAKIHsKIAlpbnQgd2luZG93OwogCXUzMiB3aW5fcmVhZDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAlpZiAoUUxBODJYWF9BRERSX0lOX1JBTkdFKGFkZHIsIFFMQTgyWFhfQUREUl9ERFJfTkVULAogCQlRTEE4MlhYX0FERFJfRERSX05FVF9NQVgpKSB7CkBAIC01NzQsOCArNTc5LDggQEAKIAkJd2luX3JlYWQgPSBxbGE4Mnh4X3JkXzMyKGhhLAogCQkJaGEtPm1uX3dpbl9jcmIgfCBRTEE4MlhYX1BDSV9DUkJTUEFDRSk7CiAJCWlmICgod2luX3JlYWQgPDwgMTcpICE9IHdpbmRvdykgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICIlczogV3JpdHRlbiBNTndpbiAoMHgleCkgIT0gUmVhZCBNTndpbiAoMHgleClcbiIsCisJCQlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMDMsCisJCQkgICAgIiVzOiBXcml0dGVuIE1Od2luICgweCV4KSAhPSBSZWFkIE1Od2luICgweCV4KS5cbiIsCiAJCQkgICAgX19mdW5jX18sIHdpbmRvdywgd2luX3JlYWQpOwogCQl9CiAJCWFkZHIgPSBHRVRfTUVNX09GRlNfMk0oYWRkcikgKyBRTEE4MlhYX1BDSV9ERFJfTkVUOwpAQCAtNTgzLDcgKzU4OCw3IEBACiAJCVFMQTgyWFhfQUREUl9PQ00wX01BWCkpIHsKIAkJdW5zaWduZWQgaW50IHRlbXAxOwogCQlpZiAoKGFkZHIgJiAweDAwZmY4MDApID09IDB4ZmY4MDApIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMDQsCiAJCQkgICAgIiVzOiBRTSBhY2Nlc3Mgbm90IGhhbmRsZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCQlhZGRyID0gLTFVTDsKIAkJfQpAQCAtNTk2LDggKzYwMSw4IEBACiAJCXRlbXAxID0gKCh3aW5kb3cgJiAweDFGRikgPDwgNykgfAogCQkgICAgKCh3aW5kb3cgJiAweDBGRkZFMDAwMCkgPj4gMTcpOwogCQlpZiAod2luX3JlYWQgIT0gdGVtcDEpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiJXM6IFdyaXR0ZW4gT0NNd2luICgweCV4KSAhPSBSZWFkIE9DTXdpbiAoMHgleClcbiIsCisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDA1LAorCQkJICAgICIlczogV3JpdHRlbiBPQ013aW4gKDB4JXgpICE9IFJlYWQgT0NNd2luICgweCV4KS5cbiIsCiAJCQkgICAgX19mdW5jX18sIHRlbXAxLCB3aW5fcmVhZCk7CiAJCX0KIAkJYWRkciA9IEdFVF9NRU1fT0ZGU18yTShhZGRyKSArIFFMQTgyWFhfUENJX09DTTBfMk07CkBAIC02MTIsOCArNjE3LDggQEAKIAkJd2luX3JlYWQgPSBxbGE4Mnh4X3JkXzMyKGhhLAogCQkJaGEtPm1zX3dpbl9jcmIgfCBRTEE4MlhYX1BDSV9DUkJTUEFDRSk7CiAJCWlmICh3aW5fcmVhZCAhPSB3aW5kb3cpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiJXM6IFdyaXR0ZW4gTVN3aW4gKDB4JXgpICE9IFJlYWQgTVN3aW4gKDB4JXgpXG4iLAorCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAwNiwKKwkJCSAgICAiJXM6IFdyaXR0ZW4gTVN3aW4gKDB4JXgpICE9IFJlYWQgTVN3aW4gKDB4JXgpLlxuIiwKIAkJCSAgICBfX2Z1bmNfXywgd2luZG93LCB3aW5fcmVhZCk7CiAJCX0KIAkJYWRkciA9IEdFVF9NRU1fT0ZGU18yTShhZGRyKSArIFFMQTgyWFhfUENJX1FEUl9ORVQ7CkBAIC02MjQsOSArNjI5LDkgQEAKIAkJICovCiAJCWlmICgocWxhODJ4eF9wY2lfc2V0X3dpbmRvd193YXJuaW5nX2NvdW50KysgPCA4KSB8fAogCQkgICAgKHFsYTgyeHhfcGNpX3NldF93aW5kb3dfd2FybmluZ19jb3VudCU2NCA9PSAwKSkgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICIlczogV2FybmluZzolcyBVbmtub3duIGFkZHJlc3MgcmFuZ2UhXG4iLCBfX2Z1bmNfXywKLQkJCSAgICBRTEEyWFhYX0RSSVZFUl9OQU1FKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMDcsCisJCQkgICAgIiVzOiBXYXJuaW5nOiVzIFVua25vd24gYWRkcmVzcyByYW5nZSEuXG4iLAorCQkJICAgIF9fZnVuY19fLCBRTEEyWFhYX0RSSVZFUl9OQU1FKTsKIAkJfQogCQlhZGRyID0gLTFVTDsKIAl9CkBAIC02NzEsNiArNjc2LDcgQEAKIAl1aW50OF90ICAgICAgICAgKm1lbV9wdHIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgICBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nICAgbWVtX3BhZ2U7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZoYS0+aHdfbG9jaywgZmxhZ3MpOwogCkBAIC02ODIsOSArNjg4LDEwIEBACiAJaWYgKChzdGFydCA9PSAtMVVMKSB8fAogCQkocWxhODJ4eF9wY2lfaXNfc2FtZV93aW5kb3coaGEsIG9mZiArIHNpemUgLSAxKSA9PSAwKSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkiJXMgb3V0IG9mIGJvdW5kIHBjaSBtZW1vcnkgYWNjZXNzLiAiCi0JCQkib2Zmc2V0IGlzIDB4JWxseFxuIiwgUUxBMlhYWF9EUklWRVJfTkFNRSwgb2ZmKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweGIwMDgsCisJCSAgICAiJXMgb3V0IG9mIGJvdW5kIHBjaSBtZW1vcnkgIgorCQkgICAgImFjY2Vzcywgb2Zmc2V0IGlzIDB4JWxseC5cbiIsCisJCSAgICBRTEEyWFhYX0RSSVZFUl9OQU1FLCBvZmYpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03NDEsNiArNzQ4LDcgQEAKIAl1aW50OF90ICAgICAgICAgKm1lbV9wdHIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgICBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nICAgbWVtX3BhZ2U7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZoYS0+aHdfbG9jaywgZmxhZ3MpOwogCkBAIC03NTIsOSArNzYwLDEwIEBACiAJaWYgKChzdGFydCA9PSAtMVVMKSB8fAogCQkocWxhODJ4eF9wY2lfaXNfc2FtZV93aW5kb3coaGEsIG9mZiArIHNpemUgLSAxKSA9PSAwKSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmh3X2xvY2ssIGZsYWdzKTsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkiJXMgb3V0IG9mIGJvdW5kIHBjaSBtZW1vcnkgYWNjZXNzLiAiCi0JCQkib2Zmc2V0IGlzIDB4JWxseFxuIiwgUUxBMlhYWF9EUklWRVJfTkFNRSwgb2ZmKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweGIwMDksCisJCSAgICAiJXMgb3V0IG9mIGJvdW50IG1lbW9yeSAiCisJCSAgICAiYWNjZXNzLCBvZmZzZXQgaXMgMHglbGx4LlxuIiwKKwkJICAgIFFMQTJYWFhfRFJJVkVSX05BTUUsIG9mZik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTg1NSwxNSArODY0LDE2IEBACiB7CiAJbG9uZyB0aW1lb3V0ID0gMDsKIAlsb25nIGRvbmUgPSAwIDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAl3aGlsZSAoZG9uZSA9PSAwKSB7CiAJCWRvbmUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9HTEJfU1RBVFVTKTsKIAkJZG9uZSAmPSA0OwogCQl0aW1lb3V0Kys7CiAJCWlmICh0aW1lb3V0ID49IHJvbV9tYXhfdGltZW91dCkgewotCQkJREVCVUcocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCSIlczogVGltZW91dCByZWFjaGVkIHdhaXRpbmcgZm9yIHJvbSBidXN5IiwKLQkJCQlRTEEyWFhYX0RSSVZFUl9OQU1FKSk7CisJCQlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMGEsCisJCQkgICAgIiVzOiBUaW1lb3V0IHJlYWNoZWQgd2FpdGluZyBmb3Igcm9tIGJ1c3kuXG4iLAorCQkJICAgIFFMQTJYWFhfRFJJVkVSX05BTUUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtODc1LDE1ICs4ODUsMTYgQEAKIHsKIAlsb25nIHRpbWVvdXQgPSAwOwogCWxvbmcgZG9uZSA9IDAgOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCXdoaWxlIChkb25lID09IDApIHsKIAkJZG9uZSA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX0dMQl9TVEFUVVMpOwogCQlkb25lICY9IDI7CiAJCXRpbWVvdXQrKzsKIAkJaWYgKHRpbWVvdXQgPj0gcm9tX21heF90aW1lb3V0KSB7Ci0JCQlERUJVRyhxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJIiVzOiBUaW1lb3V0IHJlYWNoZWQgIHdhaXRpbmcgZm9yIHJvbSBkb25lIiwKLQkJCQlRTEEyWFhYX0RSSVZFUl9OQU1FKSk7CisJCQlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMGIsCisJCQkgICAgIiVzOiBUaW1lb3V0IHJlYWNoZWQgd2FpdGluZyBmb3Igcm9tIGRvbmUuXG4iLAorCQkJICAgIFFMQTJYWFhfRFJJVkVSX05BTUUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtODkzLDE1ICs5MDQsMTYgQEAKIHN0YXRpYyBpbnQKIHFsYTgyeHhfZG9fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLCBpbnQgYWRkciwgaW50ICp2YWxwKQogeworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKKwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQsIDApOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIDB4Yik7CiAJcWxhODJ4eF93YWl0X3JvbV9idXN5KGhhKTsKIAlpZiAocWxhODJ4eF93YWl0X3JvbV9kb25lKGhhKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiJXM6IEVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lXG4iLAotCQkJUUxBMlhYWF9EUklWRVJfTkFNRSk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMGJhLAorCQkgICAgIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJLyogUmVzZXQgYWJ5dGVfY250IGFuZCBkdW1teV9ieXRlX2NudCAqLwpAQCAtOTE3LDYgKzkyOSw3IEBACiBxbGE4Mnh4X3JvbV9mYXN0X3JlYWQoc3RydWN0IHFsYV9od19kYXRhICpoYSwgaW50IGFkZHIsIGludCAqdmFscCkKIHsKIAlpbnQgcmV0LCBsb29wcyA9IDA7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJd2hpbGUgKChxbGE4Mnh4X3JvbV9sb2NrKGhhKSAhPSAwKSAmJiAobG9vcHMgPCA1MDAwMCkpIHsKIAkJdWRlbGF5KDEwMCk7CkBAIC05MjQsOSArOTM3LDggQEAKIAkJbG9vcHMrKzsKIAl9CiAJaWYgKGxvb3BzID49IDUwMDAwKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSIlczogcWxhODJ4eF9yb21fbG9jayBmYWlsZWRcbiIsCi0JCQlRTEEyWFhYX0RSSVZFUl9OQU1FKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwYjksCisJCSAgICAiRmFpbGVkIHRvIGFxdWlyZSBTRU0yIGxvY2suXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXQgPSBxbGE4Mnh4X2RvX3JvbV9mYXN0X3JlYWQoaGEsIGFkZHIsIHZhbHApOwpAQCAtOTM3LDExICs5NDksMTIgQEAKIHN0YXRpYyBpbnQKIHFsYTgyeHhfcmVhZF9zdGF0dXNfcmVnKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEsIHVpbnQzMl90ICp2YWwpCiB7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIE0yNVBfSU5TVFJfUkRTUik7CiAJcWxhODJ4eF93YWl0X3JvbV9idXN5KGhhKTsKIAlpZiAocWxhODJ4eF93YWl0X3JvbV9kb25lKGhhKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRXJyb3Igd2FpdGluZyBmb3Igcm9tIGRvbmVcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDBjLAorCQkgICAgIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJKnZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9SREFUQSk7CkBAIC05NTUsNiArOTY4LDcgQEAKIAl1aW50MzJfdCBkb25lID0gMSA7CiAJdWludDMyX3QgdmFsOwogCWludCByZXQgPSAwOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOwogCXdoaWxlICgoZG9uZSAhPSAwKSAmJiAocmV0ID09IDApKSB7CkBAIC05NjQsOCArOTc4LDggQEAKIAkJdWRlbGF5KDEwKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWlmICh0aW1lb3V0ID49IDUwMDAwKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIlRpbWVvdXQgcmVhY2hlZCAgd2FpdGluZyBmb3Igd3JpdGUgZmluaXNoIik7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDBkLAorCQkJICAgICJUaW1lb3V0IHJlYWNoZWQgd2FpdGluZyBmb3Igd3JpdGUgZmluaXNoLlxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC05OTIsMTMgKzEwMDYsMTQgQEAKIHN0YXRpYyBpbnQKIHFsYTgyeHhfd3JpdGVfc3RhdHVzX3JlZyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLCB1aW50MzJfdCB2YWwpCiB7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCWlmIChxbGE4Mnh4X2ZsYXNoX3NldF93cml0ZV9lbmFibGUoaGEpKQogCQlyZXR1cm4gLTE7CiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfUk9NX1dEQVRBLCB2YWwpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIDB4MSk7CiAJaWYgKHFsYTgyeHhfd2FpdF9yb21fZG9uZShoYSkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAwZSwKKwkJICAgICJFcnJvciB3YWl0aW5nIGZvciByb20gZG9uZS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiBxbGE4Mnh4X2ZsYXNoX3dhaXRfd3JpdGVfZmluaXNoKGhhKTsKQEAgLTEwMDcsMTAgKzEwMjIsMTEgQEAKIHN0YXRpYyBpbnQKIHFsYTgyeHhfd3JpdGVfZGlzYWJsZV9mbGFzaChzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhKQogeworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCBNMjVQX0lOU1RSX1dSREkpOwogCWlmIChxbGE4Mnh4X3dhaXRfcm9tX2RvbmUoaGEpKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJFcnJvciB3YWl0aW5nIGZvciByb20gZG9uZVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMGYsCisJCSAgICAiRXJyb3Igd2FpdGluZyBmb3Igcm9tIGRvbmUuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMjAsMTMgKzEwMzYsMTYgQEAKIHFsODJ4eF9yb21fbG9ja19kKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEpCiB7CiAJaW50IGxvb3BzID0gMDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CisKIAl3aGlsZSAoKHFsYTgyeHhfcm9tX2xvY2soaGEpICE9IDApICYmIChsb29wcyA8IDUwMDAwKSkgewogCQl1ZGVsYXkoMTAwKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWxvb3BzKys7CiAJfQogCWlmIChsb29wcyA+PSA1MDAwMCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJST00gbG9jayBmYWlsZWRcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDEwLAorCQkgICAgIlJPTSBsb2NrIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOzsKQEAgLTEwMzcsMTAgKzEwNTYsMTIgQEAKIAl1aW50MzJfdCBkYXRhKQogewogCWludCByZXQgPSAwOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCXJldCA9IHFsODJ4eF9yb21fbG9ja19kKGhhKTsKIAlpZiAocmV0IDwgMCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJST00gTG9jayBmYWlsZWRcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDExLAorCQkgICAgIlJPTSBsb2NrIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTA1Myw4ICsxMDc0LDggQEAKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCBNMjVQX0lOU1RSX1BQKTsKIAlxbGE4Mnh4X3dhaXRfcm9tX2J1c3koaGEpOwogCWlmIChxbGE4Mnh4X3dhaXRfcm9tX2RvbmUoaGEpKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJFcnJvciB3YWl0aW5nIGZvciByb20gZG9uZVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMTIsCisJCSAgICAiRXJyb3Igd2FpdGluZyBmb3Igcm9tIGRvbmUuXG4iKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZV93cml0ZTsKIAl9CkBAIC0xMTU5LDggKzExODAsOCBAQAogCSAqLwogCWlmIChxbGE4Mnh4X3JvbV9mYXN0X3JlYWQoaGEsIDAsICZuKSAhPSAwIHx8IG4gIT0gMHhjYWZlY2FmZVVMIHx8CiAJICAgIHFsYTgyeHhfcm9tX2Zhc3RfcmVhZChoYSwgNCwgJm4pICE9IDApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIltFUlJPUl0gUmVhZGluZyBjcmJfaW5pdCBhcmVhOiBuOiAlMDh4XG4iLCBuKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwNmUsCisJCSAgICAiRXJyb3IgUmVhZGluZyBjcmJfaW5pdCBhcmVhOiBuOiAlMDh4LlxuIiwgbik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTExNzIsMjAgKzExOTMsMTggQEAKIAogCS8qIG51bWJlciBvZiBhZGRyL3ZhbHVlIHBhaXIgc2hvdWxkIG5vdCBleGNlZWQgMTAyNCBlbnRlcmllcyAqLwogCWlmIChuICA+PSAxMDI0KSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICIlczogJXM6bj0weCV4IFtFUlJPUl0gQ2FyZCBmbGFzaCBub3QgaW5pdGlhbGl6ZWQuXG4iLAotCQkgICAgUUxBMlhYWF9EUklWRVJfTkFNRSwgX19mdW5jX18sIG4pOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDA3MSwKKwkJICAgICJDYXJkIGZsYXNoIG5vdCBpbml0aWFsaXplZDpuPTB4JXguXG4iLCBuKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgIiVzOiAlZCBDUkIgaW5pdCB2YWx1ZXMgZm91bmQgaW4gUk9NLlxuIiwgUUxBMlhYWF9EUklWRVJfTkFNRSwgbik7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDA3MiwKKwkgICAgIiVkIENSQiBpbml0IHZhbHVlcyBmb3VuZCBpbiBST00uXG4iLCBuKTsKIAogCWJ1ZiA9IGttYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgY3JiX2FkZHJfcGFpciksIEdGUF9LRVJORUwpOwogCWlmIChidWYgPT0gTlVMTCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiJXM6IFtFUlJPUl0gVW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkuXG4iLAotCQkgICAgUUxBMlhYWF9EUklWRVJfTkFNRSk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMTBjLAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTIzNiw5ICsxMjU1LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChvZmYgPT0gQUREUl9FUlJPUikgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICIlczogW0VSUk9SXSBVbmtub3duIGFkZHI6IDB4JTA4bHhcbiIsCi0JCQkgICAgUUxBMlhYWF9EUklWRVJfTkFNRSwgYnVmW2ldLmFkZHIpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAxMTYsCisJCQkgICAgIlVua25vdyBhZGRyOiAweCUwOGx4LlxuIiwgYnVmW2ldLmFkZHIpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTM3MCw3ICsxMzg4LDcgQEAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewogCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCQlkZXZfZXJyKCZoYS0+cGRldi0+ZGV2LAotCQkJCSAgICAiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOworCQkJCSAgICAiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnQuXG4iKTsKIAkJCXJldCA9IC0xOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0NjAsNyArMTQ3OCw3IEBACiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKIAkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQkJZGV2X2VycigmaGEtPnBkZXYtPmRldiwKLQkJCQkgICAgImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOworCQkJCSAgICAiZmFpbGVkIHRvIHJlYWQgdGhyb3VnaCBhZ2VudC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTYzMywxNyArMTY1MSwxNSBAQAogCXVpbnQzMl90IGxlbiA9IDA7CiAKIAlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhoYS0+cGRldiwgUUxBMlhYWF9EUklWRVJfTkFNRSkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIkZhaWxlZCB0byByZXNlcnZlIHNlbGVjdGVkIHJlZ2lvbnMgKCVzKVxuIiwKLQkJCXBjaV9uYW1lKGhhLT5wZGV2KSk7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDBjLAorCQkgICAgIkZhaWxlZCB0byByZXNlcnZlciBzZWxlY3RlZCByZWdpb25zLlxuIik7CiAJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OwogCX0KIAogCS8qIFVzZSBNTUlPIG9wZXJhdGlvbnMgZm9yIGFsbCBhY2Nlc3Nlcy4gKi8KIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoaGEtPnBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJInJlZ2lvbiAjMCBub3QgYW4gTU1JTyByZXNvdXJjZSAoJXMpLCBhYm9ydGluZ1xuIiwKLQkJCXBjaV9uYW1lKGhhLT5wZGV2KSk7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDBkLAorCQkgICAgIlJlZ2lvbiAjMCBub3QgYW4gTU1JTyByZXNvdXJjZSwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBpb3NwYWNlX2Vycm9yX2V4aXQ7CiAJfQogCkBAIC0xNjUxLDkgKzE2NjcsOCBAQAogCWhhLT5ueF9wY2liYXNlID0KIAkgICAgKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoaGEtPnBkZXYsIDApLCBsZW4pOwogCWlmICghaGEtPm54X3BjaWJhc2UpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiY2Fubm90IHJlbWFwIHBjaWJhc2UgTU1JTyAoJXMpLCBhYm9ydGluZ1xuIiwKLQkJICAgIHBjaV9uYW1lKGhhLT5wZGV2KSk7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDBlLAorCQkgICAgIkNhbm5vdCByZW1hcCBwY2liYXNlIE1NSU8sIGFib3J0aW5nLlxuIik7CiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaGEtPnBkZXYpOwogCQlnb3RvIGlvc3BhY2VfZXJyb3JfZXhpdDsKIAl9CkBAIC0xNjY3LDkgKzE2ODIsOCBAQAogCQkgICAgKHVuc2lnbmVkIGxvbmcpaW9yZW1hcCgocGNpX3Jlc291cmNlX3N0YXJ0KGhhLT5wZGV2LCA0KSArCiAJCSAgICAoaGEtPnBkZXYtPmRldmZuIDw8IDEyKSksIDQpOwogCQlpZiAoIWhhLT5ueGRiX3dyX3B0cikgewotCQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkgICAgImNhbm5vdCByZW1hcCBNTUlPICglcyksIGFib3J0aW5nXG4iLAotCQkJICAgIHBjaV9uYW1lKGhhLT5wZGV2KSk7CisJCQlxbF9sb2dfcGNpKHFsX2xvZ19mYXRhbCwgaGEtPnBkZXYsIDB4MDAwZiwKKwkJCSAgICAiQ2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nLlxuIik7CiAJCQlwY2lfcmVsZWFzZV9yZWdpb25zKGhhLT5wZGV2KTsKIAkJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OwogCQl9CkBAIC0xNjg3LDYgKzE3MDEsMTYgQEAKIAogCWhhLT5tYXhfcmVxX3F1ZXVlcyA9IGhhLT5tYXhfcnNwX3F1ZXVlcyA9IDE7CiAJaGEtPm1zaXhfY291bnQgPSBoYS0+bWF4X3JzcF9xdWV1ZXMgKyAxOworCXFsX2RiZ19wY2kocWxfZGJnX211bHRpcSwgaGEtPnBkZXYsIDB4YzAwNiwKKwkgICAgIm54X3BjaV9iYXNlPSVwIGlvYmFzZT0lcCAiCisJICAgICJtYXhfcmVxX3F1ZXVlcz0lZCBtc2l4X2NvdW50PSVkLlxuIiwKKwkgICAgaGEtPm54X3BjaWJhc2UsIGhhLT5pb2Jhc2UsCisJICAgIGhhLT5tYXhfcmVxX3F1ZXVlcywgaGEtPm1zaXhfY291bnQpOworCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIGhhLT5wZGV2LCAweDAwMTAsCisJICAgICJueF9wY2lfYmFzZT0lcCBpb2Jhc2U9JXAgIgorCSAgICAibWF4X3JlcV9xdWV1ZXM9JWQgbXNpeF9jb3VudD0lZC5cbiIsCisJICAgIGhhLT5ueF9wY2liYXNlLCBoYS0+aW9iYXNlLAorCSAgICBoYS0+bWF4X3JlcV9xdWV1ZXMsIGhhLT5tc2l4X2NvdW50KTsKIAlyZXR1cm4gMDsKIAogaW9zcGFjZV9lcnJvcl9leGl0OgpAQCAtMTcxMiw2ICsxNzM2LDkgQEAKIAlwY2lfc2V0X21hc3RlcihoYS0+cGRldik7CiAJcmV0ID0gcGNpX3NldF9td2koaGEtPnBkZXYpOwogCWhhLT5jaGlwX3JldmlzaW9uID0gaGEtPnBkZXYtPnJldmlzaW9uOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwNDMsCisJICAgICJDaGlwIHJldmlzaW9uOiVsZC5cbiIsCisJICAgIGhhLT5jaGlwX3JldmlzaW9uKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg3Nyw2ICsxOTA0LDcgQEAKIHsKIAl1MzIgdmFsID0gMDsKIAlpbnQgcmV0cmllcyA9IDYwOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCWRvIHsKIAkJcmVhZF9sb2NrKCZoYS0+aHdfbG9jayk7CkBAIC0xODkyLDE1ICsxOTIwLDE1IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiQ1JCX0NNRFBFR19TVEFURTogMHgleCBhbmQgcmV0cmllczogMHgleFxuIiwKLQkJCXZhbCwgcmV0cmllcyk7CisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwYTgsCisJCSAgICAiQ1JCX0NNRFBFR19TVEFURTogMHgleCBhbmQgcmV0cmllczoweCV4LlxuIiwKKwkJICAgIHZhbCwgcmV0cmllcyk7CiAKIAkJbXNsZWVwKDUwMCk7CiAKIAl9IHdoaWxlICgtLXJldHJpZXMpOwogCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMGE5LAogCSAgICAiQ21kIFBlZyBpbml0aWFsaXphdGlvbiBmYWlsZWQ6IDB4JXguXG4iLCB2YWwpOwogCiAJdmFsID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1BFR1RVTkVfRE9ORSk7CkBAIC0xOTE1LDYgKzE5NDMsNyBAQAogewogCXUzMiB2YWwgPSAwOwogCWludCByZXRyaWVzID0gNjA7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJZG8gewogCQlyZWFkX2xvY2soJmhhLT5od19sb2NrKTsKQEAgLTE5MzAsMTcgKzE5NTksMTYgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0KLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIkNSQl9SQ1ZQRUdfU1RBVEU6IDB4JXggYW5kIHJldHJpZXM6IDB4JXhcbiIsCi0JCQl2YWwsIHJldHJpZXMpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGFiLAorCQkgICAgIkNSQl9SQ1ZQRUdfU1RBVEU6IDB4JXggYW5kIHJldHJpZXM6IDB4JXguXG4iLAorCQkgICAgdmFsLCByZXRyaWVzKTsKIAogCQltc2xlZXAoNTAwKTsKIAogCX0gd2hpbGUgKC0tcmV0cmllcyk7CiAKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSJSY3YgUGVnIGluaXRpYWxpemF0aW9uIGZhaWxlZDogMHgleC5cbiIsIHZhbCk7CisJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwYWMsCisJICAgICJSY3YgUGVnIGluaXRpYWxpemF0aW4gZmFpbGVkOiAweCV4LlxuIiwgdmFsKTsKIAlyZWFkX2xvY2soJmhhLT5od19sb2NrKTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBDUkJfUkNWUEVHX1NUQVRFLCBQSEFOX0lOSVRJQUxJWkVfRkFJTEVEKTsKIAlyZWFkX3VubG9jaygmaGEtPmh3X2xvY2spOwpAQCAtMTk4OSwxMyArMjAxNywxMSBAQAogCX0KIAogCWlmIChoYS0+bWNwKSB7Ci0JCURFQlVHM18xMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiAiCi0JCQkiR290IG1haWxib3ggY29tcGxldGlvbi4gY21kPSV4LlxuIiwKLQkJCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIGhhLT5tY3AtPm1iWzBdKSk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDUyLAorCQkgICAgIkdvdCBtYWlsYm94IGNvbXBsZXRpb24uIGNtZD0leC5cbiIsIGhhLT5tY3AtPm1iWzBdKTsKIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiJXMoJWxkKTogTUJYIHBvaW50ZXIgRVJST1IhXG4iLAotCQkJX19mdW5jX18sIHZoYS0+aG9zdF9ubyk7CisJCXFsX2RiZyhxbF9kYmdfYXN5bmMsIHZoYSwgMHg1MDUzLAorCQkgICAgIk1CWCBwb2ludGVyIEVSUk9SLlxuIik7CiAJfQogfQogCkBAIC0yMDE5LDEzICsyMDQ1LDEzIEBACiAJaW50IHN0YXR1cyA9IDAsIHN0YXR1czEgPSAwOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJdW5zaWduZWQgbG9uZwlpdGVyOwotCXVpbnQzMl90CXN0YXQ7CisJdWludDMyX3QJc3RhdCA9IDA7CiAJdWludDE2X3QJbWJbNF07CiAKIAlyc3AgPSAoc3RydWN0IHJzcF9xdWUgKikgZGV2X2lkOwogCWlmICghcnNwKSB7CiAJCXByaW50ayhLRVJOX0lORk8KLQkJCSIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJCSIlcygpOiBOVUxMIHJlc3BvbnNlIHF1ZXVlIHBvaW50ZXIuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAJaGEgPSByc3AtPmh3OwpAQCAtMjA3NSw5ICsyMTAxLDkgQEAKIAkJCQlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6ICIKLQkJCQkJIiBVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgKCVkKS5cbiIsCi0JCQkJCXZoYS0+aG9zdF9ubywgc3RhdCAmIDB4ZmYpKTsKKwkJCQlxbF9kYmcocWxfZGJnX2FzeW5jLCB2aGEsIDB4NTA1NCwKKwkJCQkgICAgIlVucmVjb2duaXplZCBpbnRlcnJ1cHQgdHlwZSAoJWQpLlxuIiwKKwkJCQkgICAgc3RhdCAmIDB4ZmYpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yMDg5LDggKzIxMTUsOCBAQAogCiAjaWZkZWYgUUxfREVCVUdfTEVWRUxfMTcKIAlpZiAoIWlycSAmJiBoYS0+ZmxhZ3MuZWVoX2J1c3kpCi0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJpc3I6IHN0YXR1cyAleCwgY21kX2ZsYWdzICVseCwgbWJveF9pbnQgJXgsIHN0YXQgJXhcbiIsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDUwM2QsCisJCSAgICAiaXNyOnN0YXR1cyAleCwgY21kX2ZsYWdzICVseCwgbWJveF9pbnQgJXgsIHN0YXQgJXguXG4iLAogCQkgICAgc3RhdHVzLCBoYS0+bWJ4X2NtZF9mbGFncywgaGEtPmZsYWdzLm1ib3hfaW50LCBzdGF0KTsKICNlbmRpZgogCkBAIC0yMTExLDEzICsyMTM3LDEzIEBACiAJc3RydWN0IGRldmljZV9yZWdfODJ4eCBfX2lvbWVtICpyZWc7CiAJaW50IHN0YXR1cyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1aW50MzJfdCBzdGF0OworCXVpbnQzMl90IHN0YXQgPSAwOwogCXVpbnQxNl90IG1iWzRdOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCQkiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCWhhID0gcnNwLT5odzsKQEAgLTIxNDksOSArMjE3NSw5IEBACiAJCQkJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiAiCi0JCQkJCSIgVW5yZWNvZ25pemVkIGludGVycnVwdCB0eXBlICglZCkuXG4iLAotCQkJCQl2aGEtPmhvc3Rfbm8sIHN0YXQgJiAweGZmKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19hc3luYywgdmhhLCAweDUwNDEsCisJCQkJICAgICJVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgKCVkKS5cbiIsCisJCQkJICAgIHN0YXQgJiAweGZmKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMjE2Miw5ICsyMTg4LDkgQEAKIAogI2lmZGVmIFFMX0RFQlVHX0xFVkVMXzE3CiAJaWYgKCFpcnEgJiYgaGEtPmZsYWdzLmVlaF9idXN5KQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiaXNyOiBzdGF0dXMgJXgsIGNtZF9mbGFncyAlbHgsIG1ib3hfaW50ICV4LCBzdGF0ICV4XG4iLAotCQkJc3RhdHVzLCBoYS0+bWJ4X2NtZF9mbGFncywgaGEtPmZsYWdzLm1ib3hfaW50LCBzdGF0KTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NTA0NCwKKwkJICAgICJpc3I6c3RhdHVzICV4LCBjbWRfZmxhZ3MgJWx4LCBtYm94X2ludCAleCwgc3RhdCAleC5cbiIsCisJCSAgICBzdGF0dXMsIGhhLT5tYnhfY21kX2ZsYWdzLCBoYS0+ZmxhZ3MubWJveF9pbnQsIHN0YXQpOwogI2VuZGlmCiAKIAlpZiAodGVzdF9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKSAmJgpAQCAtMjE4MiwyMSArMjIwOCwyMiBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGE7CiAJc3RydWN0IHJzcF9xdWUgKnJzcDsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ184Mnh4IF9faW9tZW0gKnJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcnNwID0gKHN0cnVjdCByc3BfcXVlICopIGRldl9pZDsKIAlpZiAoIXJzcCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCQkiJXMoKTogTlVMTCByZXNwb25zZSBxdWV1ZSBwb2ludGVyLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCiAJaGEgPSByc3AtPmh3OwogCXJlZyA9ICZoYS0+aW9iYXNlLT5pc3A4MjsKLQlzcGluX2xvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwogCVdSVF9SRUdfRFdPUkQoJnJlZy0+aG9zdF9pbnQsIDApOwotCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yMjE1LDcgKzIyNDIsNyBAQAogCXJzcCA9IChzdHJ1Y3QgcnNwX3F1ZSAqKSBkZXZfaWQ7CiAJaWYgKCFyc3ApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIiVzKCk6IE5VTEwgcmVzcG9uc2UgcXVldWUgcG9pbnRlclxuIiwgX19mdW5jX18pOworCQkJIiVzKCk6IE5VTEwgcmVzcG9uc2UgcXVldWUgcG9pbnRlci5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAloYSA9IHJzcC0+aHc7CkBAIC0yMjQ1LDkgKzIyNzIsOSBAQAogCQkJcWxhMjR4eF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKHZoYSwgcnNwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBVbnJlY29nbml6ZWQgaW50ZXJydXB0IHR5cGUgIgotCQkJCSIoJWQpLlxuIiwKLQkJCQl2aGEtPmhvc3Rfbm8sIHN0YXQgJiAweGZmKSk7CisJCQlxbF9kYmcocWxfZGJnX3AzcCwgdmhhLCAweGIwMTMsCisJCQkgICAgIlVucmVjb2duaXplZCBpbnRlcnJ1cHQgdHlwZSAoJWQpLlxuIiwKKwkJCSAgICBzdGF0ICogMHhmZik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTIzNDcsOSArMjM3NCw4IEBACiAJCWRydl9zdGF0ZSA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSk7CiAJfQogCWRydl9zdGF0ZSB8PSAoUUxBODJYWF9EUlZTVF9SU1RfUkRZIDw8IChoYS0+cG9ydG51bSAqIDQpKTsKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCSIlcyglbGQpOmRydl9zdGF0ZSA9IDB4JXhcbiIsCi0JCV9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIGRydl9zdGF0ZSk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDBiYiwKKwkgICAgImRydl9zdGF0ZSA9IDB4JXguXG4iLCBkcnZfc3RhdGUpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RSVl9TVEFURSwgZHJ2X3N0YXRlKTsKIH0KIApAQCAtMjM5Miw4ICsyNDE4LDggQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCWlmIChxbGE4Mnh4X3Bpbml0X2Zyb21fcm9tKHZoYSkgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkiJXM6IEVycm9yIGR1cmluZyBDUkIgSW5pdGlhbGl6YXRpb25cbiIsIF9fZnVuY19fKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwOWYsCisJCSAgICAiRXJyb3IgZHVyaW5nIENSQiBpbml0aWFsaXphdGlvbi5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9CiAJdWRlbGF5KDUwMCk7CkBAIC0yNDExLDI3ICsyNDM3LDI3IEBACiAJaWYgKHFsMnhmd2xvYWRiaW4gPT0gMikKIAkJZ290byB0cnlfYmxvYl9mdzsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJIkF0dGVtcHRpbmcgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZsYXNoXG4iKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGEwLAorCSAgICAiQXR0ZW1wdGluZyB0byBsb2FkIGZpcm13YXJlIGZyb20gZmxhc2guXG4iKTsKIAogCWlmIChxbGE4Mnh4X2Z3X2xvYWRfZnJvbV9mbGFzaChoYSkgPT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiRmlybXdhcmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBmcm9tIGZsYXNoXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDBhMSwKKwkJICAgICJGaXJtd2FyZSBsb2FkZWQgc3VjY2Vzc3VsbHkgZnJvbSBmbGFzaC5cbiIpOwogCQlyZXR1cm4gUUxBX1NVQ0NFU1M7CiAJfSBlbHNlIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiRmlybXdhcmUgbG9hZCBmcm9tIGZsYXNoIGZhaWxlZFxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAxMDgsCisJCSAgICAiRmlybXdhcmUgbG9hZCBmcm9tIGZsYXNoIGZhaWxlZC5cbiIpOwogCX0KIAogdHJ5X2Jsb2JfZnc6Ci0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCSAgICAiQXR0ZW1wdGluZyB0byBsb2FkIGZpcm13YXJlIGZyb20gYmxvYlxuIik7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDBhMiwKKwkgICAgIkF0dGVtcHRpbmcgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGJsb2IuXG4iKTsKIAogCS8qIExvYWQgZmlybXdhcmUgYmxvYi4gKi8KIAlibG9iID0gaGEtPmhhYmxvYiA9IHFsYTJ4MDBfcmVxdWVzdF9maXJtd2FyZSh2aGEpOwogCWlmICghYmxvYikgewotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJCSJGaXJtd2FyZSBpbWFnZSBub3QgcHJlc2VudC5cbiIpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDBhMywKKwkJICAgICJGaXJtd2FyZSBpbWFnZSBub3QgcHJlc2V0LlxuIik7CiAJCWdvdG8gZndfbG9hZF9mYWlsZWQ7CiAJfQogCkBAIC0yNDQxLDIwICsyNDY3LDE5IEBACiAJCS8qIEZhbGxiYWNrIHRvIFVSSSBmb3JtYXQgKi8KIAkJaWYgKHFsYTgyeHhfdmFsaWRhdGVfZmlybXdhcmVfYmxvYih2aGEsCiAJCQlRTEE4MlhYX1VOSUZJRURfUk9NSU1BR0UpKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJCQkiTm8gdmFsaWQgZmlybXdhcmUgaW1hZ2UgZm91bmQhISEiKTsKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMGE0LAorCQkJICAgICJObyB2YWxpZCBmaXJtd2FyZSBpbWFnZSBmb3VuZC5cbiIpOwogCQkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0KIAl9CiAKIAlpZiAocWxhODJ4eF9md19sb2FkX2Zyb21fYmxvYihoYSkgPT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkiJXM6IEZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHkgIgotCQkJIiBmcm9tIGJpbmFyeSBibG9iXG4iLCBfX2Z1bmNfXyk7CisJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwYTUsCisJCSAgICAiRmlybXdhcmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBmcm9tIGJpbmFyeSBibG9iLlxuIik7CiAJCXJldHVybiBRTEFfU1VDQ0VTUzsKIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJICAgICJGaXJtd2FyZSBsb2FkIGZhaWxlZCBmcm9tIGJpbmFyeSBibG9iXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwYTYsCisJCSAgICAiRmlybXdhcmUgbG9hZCBmYWlsZWQgZm9yIGJpbmFyeSBibG9iLlxuIik7CiAJCWJsb2ItPmZ3ID0gTlVMTDsKIAkJYmxvYiA9IE5VTEw7CiAJCWdvdG8gZndfbG9hZF9mYWlsZWQ7CkBAIC0yNDg2LDE1ICsyNTExLDE1IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMyLCAwKTsKIAogCWlmIChxbGE4Mnh4X2xvYWRfZncodmhhKSAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiJXM6IEVycm9yIHRyeWluZyB0byBzdGFydCBmdyFcbiIsIF9fZnVuY19fKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwYTcsCisJCSAgICAiRXJyb3IgdHJ5aW5nIHRvIHN0YXJ0IGZ3LlxuIik7CiAJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCX0KIAogCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KIAlpZiAocWxhODJ4eF9jaGVja19jbWRwZWdfc3RhdGUoaGEpICE9IFFMQV9TVUNDRVNTKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSIlczogRXJyb3IgZHVyaW5nIGNhcmQgaGFuZHNoYWtlIVxuIiwgX19mdW5jX18pOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDBhYSwKKwkJICAgICJFcnJvciBkdXJpbmcgY2FyZCBoYW5kc2hha2UuXG4iKTsKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfQogCkBAIC0yNjYzLDggKzI2ODgsMTEgQEAKIAkvKiBTZW5kIG1hcmtlciBpZiByZXF1aXJlZCAqLwogCWlmICh2aGEtPm1hcmtlcl9uZWVkZWQgIT0gMCkgewogCQlpZiAocWxhMngwMF9tYXJrZXIodmhhLCByZXEsCi0JCQlyc3AsIDAsIDAsIE1LX1NZTkNfQUxMKSAhPSBRTEFfU1VDQ0VTUykKKwkJCXJzcCwgMCwgMCwgTUtfU1lOQ19BTEwpICE9IFFMQV9TVUNDRVNTKSB7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgzMDBjLAorCQkJICAgICJxbGEyeDAwX21hcmtlciBmYWlsZWQgZm9yIGNtZD0lcC5cbiIsIGNtZCk7CiAJCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwkJfQogCQl2aGEtPm1hcmtlcl9uZWVkZWQgPSAwOwogCX0KIApAQCAtMjcwMSw4ICsyNzI5LDEzIEBACiAJCXVpbnQxNl90IGk7CiAKIAkJbW9yZV9kc2RfbGlzdHMgPSBxbGE4Mnh4X2NhbGNfZHNkX2xpc3RzKHRvdF9kc2RzKTsKLQkJaWYgKChtb3JlX2RzZF9saXN0cyArIGhhLT5nYmxfZHNkX2ludXNlKSA+PSBOVU1fRFNEX0NIQUlOKQorCQlpZiAoKG1vcmVfZHNkX2xpc3RzICsgaGEtPmdibF9kc2RfaW51c2UpID49IE5VTV9EU0RfQ0hBSU4pIHsKKwkJCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDBkLAorCQkJICAgICJOdW0gb2YgRFNEIGxpc3QgJWQgaXMgdGhhbiAlZCBmb3IgY21kPSVwLlxuIiwKKwkJCSAgICBtb3JlX2RzZF9saXN0cyArIGhhLT5nYmxfZHNkX2ludXNlLCBOVU1fRFNEX0NIQUlOLAorCQkJICAgIGNtZCk7CiAJCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CisJCX0KIAogCQlpZiAobW9yZV9kc2RfbGlzdHMgPD0gaGEtPmdibF9kc2RfYXZhaWwpCiAJCQlnb3RvIHN1ZmZpY2llbnRfZHNkczsKQEAgLTI3MTEsMTMgKzI3NDQsMjAgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgbW9yZV9kc2RfbGlzdHM7IGkrKykgewogCQkJZHNkX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc2RfZG1hKSwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIWRzZF9wdHIpCisJCQlpZiAoIWRzZF9wdHIpIHsKKwkJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MzAwZSwKKwkJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRzZF9kbWEgIgorCQkJCSAgICAiZm9yIGNtZD0lcC5cbiIsIGNtZCk7CiAJCQkJZ290byBxdWV1aW5nX2Vycm9yOworCQkJfQogCiAJCQlkc2RfcHRyLT5kc2RfYWRkciA9IGRtYV9wb29sX2FsbG9jKGhhLT5kbF9kbWFfcG9vbCwKIAkJCQlHRlBfQVRPTUlDLCAmZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKTsKIAkJCWlmICghZHNkX3B0ci0+ZHNkX2FkZHIpIHsKIAkJCQlrZnJlZShkc2RfcHRyKTsKKwkJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MzAwZiwKKwkJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRzZF9hZGRyICIKKwkJCQkgICAgImZvciBjbWQ9JXAuXG4iLCBjbWQpOwogCQkJCWdvdG8gcXVldWluZ19lcnJvcjsKIAkJCX0KIAkJCWxpc3RfYWRkX3RhaWwoJmRzZF9wdHItPmxpc3QsICZoYS0+Z2JsX2RzZF9saXN0KTsKQEAgLTI3NDIsMTcgKzI3ODIsMTYgQEAKIAogCQljdHggPSBzcC0+Y3R4ID0gbWVtcG9vbF9hbGxvYyhoYS0+Y3R4X21lbXBvb2wsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNwLT5jdHgpIHsKLQkJCURFQlVHKHByaW50ayhLRVJOX0lORk8KLQkJCQkiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIgotCQkJCSIgY3R4LlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDMwMTAsCisJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBjdHggZm9yIGNtZD0lcC5cbiIsIGNtZCk7CiAJCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CiAJCX0KIAkJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKHN0cnVjdCBjdDZfZHNkKSk7CiAJCWN0eC0+ZmNwX2NtbmQgPSBkbWFfcG9vbF9hbGxvYyhoYS0+ZmNwX2NtbmRfZG1hX3Bvb2wsCiAJCQlHRlBfQVRPTUlDLCAmY3R4LT5mY3BfY21uZF9kbWEpOwogCQlpZiAoIWN0eC0+ZmNwX2NtbmQpIHsKLQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkIHRvIGFsbG9jYXRlIgotCQkJCSIgZmNwX2NtbmQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MzAxMSwKKwkJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIGZjcF9jbW5kIGZvciBjbWQ9JXAuXG4iLCBjbWQpOwogCQkJZ290byBxdWV1aW5nX2Vycm9yX2ZjcF9jbW5kOwogCQl9CiAKQEAgLTI3NjYsNiArMjgwNSw5IEBACiAJCQkJLyogU0NTSSBjb21tYW5kIGJpZ2dlciB0aGFuIDE2IGJ5dGVzIG11c3QgYmUKIAkJCQkgKiBtdWx0aXBsZSBvZiA0CiAJCQkJICovCisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MzAxMiwKKwkJCQkgICAgInNjc2kgY21kIGxlbiAlZCBub3QgbXVsdGlwbGUgb2YgNCAiCisJCQkJICAgICJmb3IgY21kPSVwLlxuIiwgY21kLT5jbWRfbGVuLCBjbWQpOwogCQkJCWdvdG8gcXVldWluZ19lcnJvcl9mY3BfY21uZDsKIAkJCX0KIAkJCWN0eC0+ZmNwX2NtbmRfbGVuID0gMTIgKyBjbWQtPmNtZF9sZW4gKyA0OwpAQCAtMjc5Nyw2ICsyODM5LDE2IEBACiAJCWludF90b19zY3NpbHVuKHNwLT5jbWQtPmRldmljZS0+bHVuLCAmY21kX3BrdC0+bHVuKTsKIAkJaG9zdF90b19mY3Bfc3dhcCgodWludDhfdCAqKSZjbWRfcGt0LT5sdW4sIHNpemVvZihjbWRfcGt0LT5sdW4pKTsKIAorCQkvKiBidWlsZCBGQ1BfQ01ORCBJVSAqLworCQltZW1zZXQoY3R4LT5mY3BfY21uZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkpOworCQlpbnRfdG9fc2NzaWx1bihzcC0+Y21kLT5kZXZpY2UtPmx1biwgJmN0eC0+ZmNwX2NtbmQtPmx1bik7CisJCWN0eC0+ZmNwX2NtbmQtPmFkZGl0aW9uYWxfY2RiX2xlbiA9IGFkZGl0aW9uYWxfY2RiX2xlbjsKKworCQlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDE7CisJCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQorCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7CisKIAkJLyoKIAkJICogVXBkYXRlIHRhZ2dlZCBxdWV1aW5nIG1vZGlmaWVyIC0tIGRlZmF1bHQgaXMgVFNLX1NJTVBMRSAoMCkuCiAJCSAqLwpAQCAtMjgxMywxNiArMjg2NSw2IEBACiAJCQl9CiAJCX0KIAotCQkvKiBidWlsZCBGQ1BfQ01ORCBJVSAqLwotCQltZW1zZXQoY3R4LT5mY3BfY21uZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkpOwotCQlpbnRfdG9fc2NzaWx1bihzcC0+Y21kLT5kZXZpY2UtPmx1biwgJmN0eC0+ZmNwX2NtbmQtPmx1bik7Ci0JCWN0eC0+ZmNwX2NtbmQtPmFkZGl0aW9uYWxfY2RiX2xlbiA9IGFkZGl0aW9uYWxfY2RiX2xlbjsKLQotCQlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDE7Ci0JCWVsc2UgaWYgKGNtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKQotCQkJY3R4LT5mY3BfY21uZC0+YWRkaXRpb25hbF9jZGJfbGVuIHw9IDI7Ci0KIAkJbWVtY3B5KGN0eC0+ZmNwX2NtbmQtPmNkYiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwogCiAJCWZjcF9kbCA9ICh1aW50MzJfdCAqKShjdHgtPmZjcF9jbW5kLT5jZGIgKyAxNiArCkBAIC0yODQ1LDcgKzI4ODcsNyBAQAogCQljbWRfcGt0LT5lbnRyeV9zdGF0dXMgPSAodWludDhfdCkgcnNwLT5pZDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY21kX3R5cGVfNyAqY21kX3BrdDsKLQkJcmVxX2NudCA9IHFsYTI0eHhfY2FsY19pb2Nicyh0b3RfZHNkcyk7CisJCXJlcV9jbnQgPSBxbGEyNHh4X2NhbGNfaW9jYnModmhhLCB0b3RfZHNkcyk7CiAJCWlmIChyZXEtPmNudCA8IChyZXFfY250ICsgMikpIHsKIAkJCWNudCA9ICh1aW50MTZfdClSRF9SRUdfRFdPUkRfUkVMQVhFRCgKIAkJCSAgICAmcmVnLT5yZXFfcV9vdXRbMF0pOwpAQCAtMjk3OSw4ICszMDIxLDggQEAKIAkvKiBEd29yZCByZWFkcyB0byBmbGFzaC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoLzQ7IGkrKywgZmFkZHIgKz0gNCkgewogCQlpZiAocWxhODJ4eF9yb21fZmFzdF9yZWFkKGhhLCBmYWRkciwgJnZhbCkpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiRG8gUk9NIGZhc3QgcmVhZCBmYWlsZWRcbiIpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDEwNiwKKwkJCSAgICAiRG8gUk9NIGZhc3QgcmVhZCBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZG9uZV9yZWFkOwogCQl9CiAJCWR3cHRyW2ldID0gX19jb25zdGFudF9jcHVfdG9fbGUzMih2YWwpOwpAQCAtMjk5NCwxMCArMzAzNiwxMiBAQAogewogCWludCByZXQ7CiAJdWludDMyX3QgdmFsOworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKIAogCXJldCA9IHFsODJ4eF9yb21fbG9ja19kKGhhKTsKIAlpZiAocmV0IDwgMCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJST00gTG9jayBmYWlsZWRcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDE0LAorCQkgICAgIlJPTSBMb2NrIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzAxMyw3ICszMDU3LDggQEAKIAl9CiAKIAlpZiAocWxhODJ4eF93cml0ZV9kaXNhYmxlX2ZsYXNoKGhhKSAhPSAwKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJXcml0ZSBkaXNhYmxlIGZhaWxlZFxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMTUsCisJCSAgICAiV3JpdGUgZGlzYWJsZSBmYWlsZWQuXG4iKTsKIAogZG9uZV91bnByb3RlY3Q6CiAJcWxhODJ4eF9yb21fdW5sb2NrKGhhKTsKQEAgLTMwMjUsMTAgKzMwNzAsMTIgQEAKIHsKIAlpbnQgcmV0OwogCXVpbnQzMl90IHZhbDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAlyZXQgPSBxbDgyeHhfcm9tX2xvY2tfZChoYSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiUk9NIExvY2sgZmFpbGVkXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAxNiwKKwkJICAgICJST00gTG9jayBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMwNDAsMTAgKzMwODcsMTIgQEAKIAkvKiBMT0NLIGFsbCBzZWN0b3JzICovCiAJcmV0ID0gcWxhODJ4eF93cml0ZV9zdGF0dXNfcmVnKGhhLCB2YWwpOwogCWlmIChyZXQgPCAwKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJXcml0ZSBzdGF0dXMgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAxNywKKwkJICAgICJXcml0ZSBzdGF0dXMgcmVnaXN0ZXIgZmFpbGVkLlxuIik7CiAKIAlpZiAocWxhODJ4eF93cml0ZV9kaXNhYmxlX2ZsYXNoKGhhKSAhPSAwKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJXcml0ZSBkaXNhYmxlIGZhaWxlZFxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMTgsCisJCSAgICAiV3JpdGUgZGlzYWJsZSBmYWlsZWQuXG4iKTsKIGRvbmVfcHJvdGVjdDoKIAlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CkBAIC0zMDUzLDEwICszMTAyLDEyIEBACiBxbGE4Mnh4X2VyYXNlX3NlY3RvcihzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhLCBpbnQgYWRkcikKIHsKIAlpbnQgcmV0ID0gMDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAlyZXQgPSBxbDgyeHhfcm9tX2xvY2tfZChoYSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiUk9NIExvY2sgZmFpbGVkXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAxOSwKKwkJICAgICJST00gTG9jayBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMwNjYsOCArMzExNyw4IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwgTTI1UF9JTlNUUl9TRSk7CiAKIAlpZiAocWxhODJ4eF93YWl0X3JvbV9kb25lKGhhKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRXJyb3Igd2FpdGluZyBmb3Igcm9tIGRvbmVcbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDFhLAorCQkgICAgIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lLlxuIik7CiAJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzExMCwxMCArMzE2MSwxMCBAQAogCQlvcHRyb20gPSBkbWFfYWxsb2NfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIE9QVFJPTV9CVVJTVF9TSVpFLAogCQkgICAgJm9wdHJvbV9kbWEsIEdGUF9LRVJORUwpOwogCQlpZiAoIW9wdHJvbSkgewotCQkJcWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwKLQkJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3B0cm9tICIKLQkJCQkiYnVyc3Qgd3JpdGUgKCV4IEtCKS5cbiIsCi0JCQkJT1BUUk9NX0JVUlNUX1NJWkUgLyAxMDI0KTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMWIsCisJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgIgorCQkJICAgICJmb3Igb3B0cm9uIGJ1cnN0IHdyaXRlICgleCBLQikuXG4iLAorCQkJICAgIE9QVFJPTV9CVVJTVF9TSVpFIC8gMTAyNCk7CiAJCX0KIAl9CiAKQEAgLTMxMjIsOCArMzE3Myw4IEBACiAKIAlyZXQgPSBxbGE4Mnh4X3VucHJvdGVjdF9mbGFzaChoYSk7CiAJaWYgKHJldCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiVW5hYmxlIHRvIHVucHJvdGVjdCBmbGFzaCBmb3IgdXBkYXRlLlxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweGIwMWMsCisJCSAgICAiVW5hYmxlIHRvIHVucHJvdGVjdCBmbGFzaCBmb3IgdXBkYXRlLlxuIik7CiAJCWdvdG8gd3JpdGVfZG9uZTsKIAl9CiAKQEAgLTMxMzMsOSArMzE4NCw5IEBACiAKIAkJCXJldCA9IHFsYTgyeHhfZXJhc2Vfc2VjdG9yKGhhLCBmYWRkcik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJREVCVUc5KHFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJCSAgICAiVW5hYmxlIHRvIGVyYXNlIHNlY3RvcjogIgotCQkJCSAgICAiYWRkcmVzcz0leC5cbiIsIGZhZGRyKSk7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAxZCwKKwkJCQkgICAgIlVuYWJsZSB0byBlcmFzZSBzZWN0b3I6IGFkZHJlc3M9JXguXG4iLAorCQkJCSAgICBmYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTMxNDksMTIgKzMyMDAsMTIgQEAKIAkJCSAgICAoaGEtPmZsYXNoX2RhdGFfb2ZmIHwgZmFkZHIpLAogCQkJICAgIE9QVFJPTV9CVVJTVF9EV09SRFMpOwogCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHhiMDFlLAogCQkJCSAgICAiVW5hYmxlIHRvIGJ1cnN0LXdyaXRlIG9wdHJvbSBzZWdtZW50ICIKIAkJCQkgICAgIigleC8leC8lbGx4KS5cbiIsIHJldCwKIAkJCQkgICAgKGhhLT5mbGFzaF9kYXRhX29mZiB8IGZhZGRyKSwKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcHRyb21fZG1hKTsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAxZiwKIAkJCQkgICAgIlJldmVydGluZyB0byBzbG93LXdyaXRlLlxuIik7CiAKIAkJCQlkbWFfZnJlZV9jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwKQEAgLTMxNzEsMTYgKzMyMjIsMTYgQEAKIAkJcmV0ID0gcWxhODJ4eF93cml0ZV9mbGFzaF9kd29yZChoYSwgZmFkZHIsCiAJCSAgICBjcHVfdG9fbGUzMigqZHdwdHIpKTsKIAkJaWYgKHJldCkgewotCQkJREVCVUc5KHByaW50ayhLRVJOX0RFQlVHICIlcyglbGQpIFVuYWJsZSB0byBwcm9ncmFtIgotCQkJICAgICJmbGFzaCBhZGRyZXNzPSV4IGRhdGE9JXguXG4iLCBfX2Z1bmNfXywKLQkJCSAgICBoYS0+aG9zdF9ubywgZmFkZHIsICpkd3B0cikpOworCQkJcWxfZGJnKHFsX2RiZ19wM3AsIHZoYSwgMHhiMDIwLAorCQkJICAgICJVbmFibGUgdG8gcHJvZ3JhbSBmbGFzaCBhZGRyZXNzPSV4IGRhdGE9JXguXG4iLAorCQkJICAgIGZhZGRyLCAqZHdwdHIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlyZXQgPSBxbGE4Mnh4X3Byb3RlY3RfZmxhc2goaGEpOwogCWlmIChyZXQpCi0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4YjAyMSwKIAkJICAgICJVbmFibGUgdG8gcHJvdGVjdCBmbGFzaCBhZnRlciB1cGRhdGUuXG4iKTsKIHdyaXRlX2RvbmU6CiAJaWYgKG9wdHJvbSkKQEAgLTMyNDQsOSArMzI5NSwxMiBAQAogCiB2b2lkIHFsYTgyeHhfcm9tX2xvY2tfcmVjb3Zlcnkoc3RydWN0IHFsYV9od19kYXRhICpoYSkKIHsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CisKIAlpZiAocWxhODJ4eF9yb21fbG9jayhoYSkpCiAJCS8qIFNvbWVvbmUgZWxzZSBpcyBob2xkaW5nIHRoZSBsb2NrLiAqLwotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJSZXNldHRpbmcgcm9tX2xvY2tcbiIpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHhiMDIyLAorCQkgICAgIlJlc2V0dGluZyByb21fbG9jay5cbiIpOwogCiAJLyoKIAkgKiBFaXRoZXIgd2UgZ290IHRoZSBsb2NrLCBvciBzb21lb25lCkBAIC0zMzEzLDcgKzMzNjcsOCBAQAogCiBkZXZfaW5pdGlhbGl6ZToKIAkvKiBzZXQgdG8gREVWX0lOSVRJQUxJWklORyAqLwotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBJTklUSUFMSVpJTkdcbiIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwOWUsCisJICAgICJIVyBTdGF0ZTogSU5JVElBTElaSU5HLlxuIik7CiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLCBRTEE4MlhYX0RFVl9JTklUSUFMSVpJTkcpOwogCiAJLyogRHJpdmVyIHRoYXQgc2V0cyBkZXZpY2Ugc3RhdGUgdG8gaW5pdGlhbGl6YXRpbmcgc2V0cyBJREMgdmVyc2lvbiAqLwpAQCAtMzMyNCwxNCArMzM3OSwxNiBAQAogCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IEZBSUxFRFxuIik7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMGFkLAorCQkgICAgIkhXIFN0YXRlOiBGQUlMRUQuXG4iKTsKIAkJcWxhODJ4eF9jbGVhcl9kcnZfYWN0aXZlKGhhKTsKIAkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLCBRTEE4MlhYX0RFVl9GQUlMRUQpOwogCQlyZXR1cm4gcnZhbDsKIAl9CiAKIGRldl9yZWFkeToKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJIVyBTdGF0ZTogUkVBRFlcbiIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwYWUsCisJICAgICJIVyBTdGF0ZTogUkVBRFkuXG4iKTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX1JFQURZKTsKIAogCXJldHVybiBRTEFfU1VDQ0VTUzsKQEAgLTMzNzYsMTUgKzM0MzMsMTUgQEAKIAkJCS8qIHF1aWVzY2VuY2UgdGltZW91dCwgb3RoZXIgZnVuY3Rpb25zIGRpZG4ndCBhY2sKIAkJCSAqIGNoYW5naW5nIHRoZSBzdGF0ZSB0byBERVZfUkVBRFkKIAkJCSAqLwotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICIlczogUVVJRVNDRU5UIFRJTUVPVVRcbiIsIFFMQTJYWFhfRFJJVkVSX05BTUUpOwotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJICAgICJEUlZfQUNUSVZFOiVkIERSVl9TVEFURTolZFxuIiwgZHJ2X2FjdGl2ZSwKLQkJCSAgICBkcnZfc3RhdGUpOworCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4YjAyMywKKwkJCSAgICAiJXMgOiBRVUlFU0NFTlQgVElNRU9VVC5cbiIsIFFMQTJYWFhfRFJJVkVSX05BTUUpOworCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4YjAyNCwKKwkJCSAgICAiRFJWX0FDVElWRTolZCBEUlZfU1RBVEU6JWQuXG4iLAorCQkJICAgIGRydl9hY3RpdmUsIGRydl9zdGF0ZSk7CiAJCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCi0JCQkJCQlRTEE4MlhYX0RFVl9SRUFEWSk7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkgICAgIkhXIFN0YXRlOiBERVZfUkVBRFlcbiIpOworCQkJICAgIFFMQTgyWFhfREVWX1JFQURZKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweGIwMjUsCisJCQkgICAgIkhXIFN0YXRlOiBERVZfUkVBRFkuXG4iKTsKIAkJCXFsYTgyeHhfaWRjX3VubG9jayhoYSk7CiAJCQlxbGEyeDAwX3BlcmZvcm1fbG9vcF9yZXN5bmModmhhKTsKIAkJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwpAQCAtMzQwNCw3ICszNDYxLDggQEAKIAlkZXZfc3RhdGUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOwogCS8qIGV2ZXJ5b25lIGFja2VkIHNvIHNldCB0aGUgc3RhdGUgdG8gREVWX1FVSUVTQ0VOQ0UgKi8KIAlpZiAoZGV2X3N0YXRlID09IFFMQTgyWFhfREVWX05FRURfUVVJRVNDRU5UKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBERVZfUVVJRVNDRU5UXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4YjAyNiwKKwkJICAgICJIVyBTdGF0ZTogREVWX1FVSUVTQ0VOVC5cbiIpOwogCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsIFFMQTgyWFhfREVWX1FVSUVTQ0VOVCk7CiAJfQogfQpAQCAtMzQ0MSw3ICszNDk5LDggQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCS8qIERpc2FibGUgdGhlIGJvYXJkICovCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiRGlzYWJsaW5nIHRoZSBib2FyZFxuIik7CisJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwYjgsCisJICAgICJEaXNhYmxpbmcgdGhlIGJvYXJkLlxuIik7CiAKIAlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKIAlxbGE4Mnh4X2NsZWFyX2Rydl9hY3RpdmUoaGEpOwpAQCAtMzQ5Miw4ICszNTUxLDggQEAKIAogCXdoaWxlIChkcnZfc3RhdGUgIT0gZHJ2X2FjdGl2ZSkgewogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCByZXNldF90aW1lb3V0KSkgewotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCSIlczogUkVTRVQgVElNRU9VVCFcbiIsIFFMQTJYWFhfRFJJVkVSX05BTUUpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBiNSwKKwkJCSAgICAiUmVzZXQgdGltZW91dC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKQEAgLTM1MDQsMTIgKzM1NjMsMTUgQEAKIAl9CiAKIAlkZXZfc3RhdGUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOwotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIjM6RGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlc1xuIiwgZGV2X3N0YXRlLAotCQlkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHgwMGI2LAorCSAgICAiRGV2aWNlIHN0YXRlIGlzIDB4JXggPSAlcy5cbiIsCisJICAgIGRldl9zdGF0ZSwKKwkgICAgZGV2X3N0YXRlIDwgTUFYX1NUQVRFUyA/IHFkZXZfc3RhdGVbZGV2X3N0YXRlXSA6ICJVbmtub3duIik7CiAKIAkvKiBGb3JjZSB0byBERVZfQ09MRCB1bmxlc3Mgc29tZW9uZSBlbHNlIGlzIHN0YXJ0aW5nIGEgcmVzZXQgKi8KIAlpZiAoZGV2X3N0YXRlICE9IFFMQTgyWFhfREVWX0lOSVRJQUxJWklORykgewotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJIVyBTdGF0ZTogQ09MRC9SRS1JTklUXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4MDBiNywKKwkJICAgICJIVyBTdGF0ZTogQ09MRC9SRS1JTklULlxuIik7CiAJCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSwgUUxBODJYWF9ERVZfQ09MRCk7CiAJfQogfQpAQCAtMzUyMyw4ICszNTg1LDEyIEBACiAJZndfaGVhcnRiZWF0X2NvdW50ZXIgPSBxbGE4Mnh4X3JkXzMyKHZoYS0+aHcsCiAJCVFMQTgyWFhfUEVHX0FMSVZFX0NPVU5URVIpOwogCS8qIGFsbCAweGZmLCBhc3N1bWUgQUVSL0VFSCBpbiBwcm9ncmVzcywgaWdub3JlICovCi0JaWYgKGZ3X2hlYXJ0YmVhdF9jb3VudGVyID09IDB4ZmZmZmZmZmYpCisJaWYgKGZ3X2hlYXJ0YmVhdF9jb3VudGVyID09IDB4ZmZmZmZmZmYpIHsKKwkJcWxfZGJnKHFsX2RiZ190aW1lciwgdmhhLCAweDYwMDMsCisJCSAgICAiRlcgaGVhcnRiZWF0IGNvdW50ZXIgaXMgMHhmZmZmZmZmZiwgIgorCQkgICAgInJldHVybmluZyBzdGF0dXM9JWQuXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOworCX0KIAlpZiAodmhhLT5md19oZWFydGJlYXRfY291bnRlciA9PSBmd19oZWFydGJlYXRfY291bnRlcikgewogCQl2aGEtPnNlY29uZHNfc2luY2VfbGFzdF9oZWFydGJlYXQrKzsKIAkJLyogRlcgbm90IGFsaXZlIGFmdGVyIDIgc2Vjb25kcyAqLwpAQCAtMzUzNSw2ICszNjAxLDkgQEAKIAl9IGVsc2UKIAkJdmhhLT5zZWNvbmRzX3NpbmNlX2xhc3RfaGVhcnRiZWF0ID0gMDsKIAl2aGEtPmZ3X2hlYXJ0YmVhdF9jb3VudGVyID0gZndfaGVhcnRiZWF0X2NvdW50ZXI7CisJaWYgKHN0YXR1cykKKwkJcWxfZGJnKHFsX2RiZ190aW1lciwgdmhhLCAweDYwMDQsCisJCSAgICAiUmV0dXJuaW5nIHN0YXR1cz0lZC5cbiIsIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzU2NSw4ICszNjM0LDEwIEBACiAKIAlkZXZfc3RhdGUgPSBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpOwogCW9sZF9kZXZfc3RhdGUgPSBkZXZfc3RhdGU7Ci0JcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiMTpEZXZpY2Ugc3RhdGUgaXMgMHgleCA9ICVzXG4iLCBkZXZfc3RhdGUsCi0JCWRldl9zdGF0ZSA8IE1BWF9TVEFURVMgPyBxZGV2X3N0YXRlW2Rldl9zdGF0ZV0gOiAiVW5rbm93biIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwOWIsCisJICAgICJEZXZpY2Ugc3RhdGUgaXMgMHgleCA9ICVzLlxuIiwKKwkgICAgZGV2X3N0YXRlLAorCSAgICBkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKIAogCS8qIHdhaXQgZm9yIDMwIHNlY29uZHMgZm9yIGRldmljZSB0byBnbyByZWFkeSAqLwogCWRldl9pbml0X3RpbWVvdXQgPSBqaWZmaWVzICsgKGhhLT5ueF9kZXZfaW5pdF90aW1lb3V0ICogSFopOwpAQCAtMzU3NCw5ICszNjQ1LDggQEAKIAl3aGlsZSAoMSkgewogCiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRldl9pbml0X3RpbWVvdXQpKSB7Ci0JCQlERUJVRyhxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJIiVzOiBkZXZpY2UgaW5pdCBmYWlsZWQhXG4iLAotCQkJCVFMQTJYWFhfRFJJVkVSX05BTUUpKTsKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDljLAorCQkJICAgICJEZXZpY2UgaW5pdCBmYWlsZWQuXG4iKTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM1ODYsMTAgKzM2NTYsMTEgQEAKIAkJCW9sZF9kZXZfc3RhdGUgPSBkZXZfc3RhdGU7CiAJCX0KIAkJaWYgKGxvb3Bjb3VudCA8IDUpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiMjpEZXZpY2Ugc3RhdGUgaXMgMHgleCA9ICVzXG4iLCBkZXZfc3RhdGUsCi0JCQkgICAgZGV2X3N0YXRlIDwgTUFYX1NUQVRFUyA/Ci0JCQkgICAgcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDAwOWQsCisJCQkgICAgIkRldmljZSBzdGF0ZSBpcyAweCV4ID0gJXMuXG4iLAorCQkJICAgIGRldl9zdGF0ZSwKKwkJCSAgICBkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8gcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDoKKwkJCSAgICAiVW5rbm93biIpOwogCQl9CiAKIAkJc3dpdGNoIChkZXZfc3RhdGUpIHsKQEAgLTM2NTYsMjkgKzM3MjcsMjYgQEAKIAkJZGV2X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKIAkJaWYgKGRldl9zdGF0ZSA9PSBRTEE4MlhYX0RFVl9ORUVEX1JFU0VUICYmCiAJCSAgICAhdGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSkgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJzY3NpKCVsZCkgJXM6IEFkYXB0ZXIgcmVzZXQgbmVlZGVkIVxuIiwKLQkJCQl2aGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDYwMDEsCisJCQkgICAgIkFkYXB0ZXIgcmVzZXQgbmVlZGVkLlxuIik7CiAJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCX0gZWxzZSBpZiAoZGV2X3N0YXRlID09IFFMQTgyWFhfREVWX05FRURfUVVJRVNDRU5UICYmCiAJCQkhdGVzdF9iaXQoSVNQX1FVSUVTQ0VfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSB7Ci0JCQlERUJVRyhxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJInNjc2koJWxkKSAlcyAtIGRldGVjdGVkIHF1aWVzY2VuY2UgbmVlZGVkXG4iLAotCQkJCXZoYS0+aG9zdF9ubywgX19mdW5jX18pKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDYwMDIsCisJCQkgICAgIlF1aWVzY2VudCBuZWVkZWQuXG4iKTsKIAkJCXNldF9iaXQoSVNQX1FVSUVTQ0VfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOwogCQl9IGVsc2UgewogCQkJaWYgKHFsYTgyeHhfY2hlY2tfZndfYWxpdmUodmhhKSkgewogCQkJCWhhbHRfc3RhdHVzID0gcWxhODJ4eF9yZF8zMihoYSwKIAkJCQkgICAgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMxKTsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJICAgICJzY3NpKCVsZCk6ICVzLCBEdW1waW5nIGh3L2Z3IHJlZ2lzdGVyczpcbiAiCi0JCQkJICAgICIgUEVHX0hBTFRfU1RBVFVTMTogMHgleCwgUEVHX0hBTFRfU1RBVFVTMjogMHgleCxcbiAiCi0JCQkJICAgICIgUEVHX05FVF8wX1BDOiAweCV4LCBQRUdfTkVUXzFfUEM6IDB4JXgsXG4gIgotCQkJCSAgICAiIFBFR19ORVRfMl9QQzogMHgleCwgUEVHX05FVF8zX1BDOiAweCV4LFxuICIKLQkJCQkgICAgIiBQRUdfTkVUXzRfUEM6IDB4JXhcbiIsCi0JCQkJICAgIHZoYS0+aG9zdF9ubywgX19mdW5jX18sIGhhbHRfc3RhdHVzLAorCQkJCXFsX2RiZyhxbF9kYmdfdGltZXIsIHZoYSwgMHg2MDA1LAorCQkJCSAgICAiZHVtcGluZyBody9mdyByZWdpc3RlcnM6LlxuICIKKwkJCQkgICAgIiBQRUdfSEFMVF9TVEFUVVMxOiAweCV4LCBQRUdfSEFMVF9TVEFUVVMyOiAweCV4LC5cbiAiCisJCQkJICAgICIgUEVHX05FVF8wX1BDOiAweCV4LCBQRUdfTkVUXzFfUEM6IDB4JXgsLlxuICIKKwkJCQkgICAgIiBQRUdfTkVUXzJfUEM6IDB4JXgsIFBFR19ORVRfM19QQzogMHgleCwuXG4gIgorCQkJCSAgICAiIFBFR19ORVRfNF9QQzogMHgleC5cbiIsIGhhbHRfc3RhdHVzLAogCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzIpLAogCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLAogCQkJCQkgICAgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgzYyksCkBAIC0zNjk0LDkgKzM3NjIsOCBAQAogCQkJCQlzZXRfYml0KElTUF9VTlJFQ09WRVJBQkxFLAogCQkJCQkgICAgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCQl9IGVsc2UgewotCQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJCSAgICAic2NzaSglbGQpOiAlcyAtIGRldGVjdCBhYm9ydCBuZWVkZWRcbiIsCi0JCQkJCSAgICB2aGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKKwkJCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4NjAwNiwKKwkJCQkJICAgICJEZXRlY3QgYWJvcnQgIG5lZWRlZC5cbiIpOwogCQkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsCiAJCQkJCSAgICAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJCX0KQEAgLTM3MDQsMTAgKzM3NzEsMTAgQEAKIAkJCQloYS0+ZmxhZ3MuaXNwODJ4eF9md19odW5nID0gMTsKIAkJCQlpZiAoaGEtPmZsYWdzLm1ib3hfYnVzeSkgewogCQkJCQloYS0+ZmxhZ3MubWJveF9pbnQgPSAxOwotCQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkJCSAgICAic2NzaSglbGQpIER1ZSB0byBmdyBodW5nLCBkb2luZyAiCisJCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDYwMDcsCisJCQkJCSAgICAiRHVlIHRvIEZXIGh1bmcsIGRvaW5nICIKIAkJCQkJICAgICJwcmVtYXR1cmUgY29tcGxldGlvbiBvZiBtYnggIgotCQkJCQkgICAgImNvbW1hbmRcbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCQkgICAgImNvbW1hbmQuXG4iKTsKIAkJCQkJaWYgKHRlc3RfYml0KE1CWF9JTlRSX1dBSVQsCiAJCQkJCSAgICAmaGEtPm1ieF9jbWRfZmxhZ3MpKQogCQkJCQkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKQEAgLTM3NDIsOSArMzgwOSw4IEBACiAJdWludDMyX3QgZGV2X3N0YXRlOwogCiAJaWYgKHZoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19ERVZfRkFJTEVEKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSIlcyglbGQpOiBEZXZpY2UgaW4gZmFpbGVkIHN0YXRlLCAiCi0JCQkiRXhpdGluZy5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDI0LAorCQkgICAgIkRldmljZSBpbiBmYWlsZWQgc3RhdGUsIGV4aXRpbmcuXG4iKTsKIAkJcmV0dXJuIFFMQV9TVUNDRVNTOwogCX0KIAloYS0+ZmxhZ3MuaXNwODJ4eF9yZXNldF9oZGxyX2FjdGl2ZSA9IDE7CkBAIC0zNzUyLDEzICszODE4LDE0IEBACiAJcWxhODJ4eF9pZGNfbG9jayhoYSk7CiAJZGV2X3N0YXRlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFKTsKIAlpZiAoZGV2X3N0YXRlID09IFFMQTgyWFhfREVWX1JFQURZKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkhXIFN0YXRlOiBORUVEIFJFU0VUXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAyNSwKKwkJICAgICJIVyBTdGF0ZTogTkVFRCBSRVNFVC5cbiIpOwogCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCiAJCQlRTEE4MlhYX0RFVl9ORUVEX1JFU0VUKTsKIAl9IGVsc2UKLQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6ICVzXG4iLAotCQkJZGV2X3N0YXRlIDwgTUFYX1NUQVRFUyA/Ci0JCQlxZGV2X3N0YXRlW2Rldl9zdGF0ZV0gOiAiVW5rbm93biIpOworCQlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg4MDI2LAorCQkgICAgIkh3IFN0YXRlOiAlcy5cbiIsIGRldl9zdGF0ZSA8IE1BWF9TVEFURVMgPworCQkgICAgcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKIAlxbGE4Mnh4X2lkY191bmxvY2soaGEpOwogCiAJcnZhbCA9IHFsYTgyeHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIodmhhKTsKQEAgLTM3NzcsOSArMzg0NCw5IEBACiAJCXZoYS0+ZmxhZ3Mub25saW5lID0gMTsKIAkJaWYgKHRlc3RfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKSkgewogCQkJaWYgKGhhLT5pc3BfYWJvcnRfY250ID09IDApIHsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJJU1AgZXJyb3IgcmVjb3ZlcnkgZmFpbGVkIC0gIgotCQkJCSAgICAiYm9hcmQgZGlzYWJsZWRcbiIpOworCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMjcsCisJCQkJICAgICJJU1AgZXJyb3IgcmVjb3ZlciBmYWlsZWQgLSBib2FyZCAiCisJCQkJICAgICJkaXNhYmxlZC5cbiIpOwogCQkJCS8qCiAJCQkJICogVGhlIG5leHQgY2FsbCBkaXNhYmxlcyB0aGUgYm9hcmQKIAkJCQkgKiBjb21wbGV0ZWx5LgpAQCAtMzc5MSwxNiArMzg1OCwxNiBAQAogCQkJCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAkJCX0gZWxzZSB7IC8qIHNjaGVkdWxlIGFub3RoZXIgSVNQIGFib3J0ICovCiAJCQkJaGEtPmlzcF9hYm9ydF9jbnQtLTsKLQkJCQlERUJVRyhxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJICAgICJxbGElbGQ6IElTUCBhYm9ydCAtIHJldHJ5IHJlbWFpbmluZyAlZFxuIiwKLQkJCQkgICAgdmhhLT5ob3N0X25vLCBoYS0+aXNwX2Fib3J0X2NudCkpOworCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMzYsCisJCQkJICAgICJJU1AgYWJvcnQgLSByZXRyeSByZW1haW5pbmcgJWQuXG4iLAorCQkJCSAgICBoYS0+aXNwX2Fib3J0X2NudCk7CiAJCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQloYS0+aXNwX2Fib3J0X2NudCA9IE1BWF9SRVRSSUVTX09GX0lTUF9BQk9SVDsKLQkJCURFQlVHKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiKCVsZCk6IElTUCBlcnJvciByZWNvdmVyeSAtIHJldHJ5aW5nICglZCkgIgotCQkJICAgICJtb3JlIHRpbWVzXG4iLCB2aGEtPmhvc3Rfbm8sIGhhLT5pc3BfYWJvcnRfY250KSk7CisJCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAyOSwKKwkJCSAgICAiSVNQIGVycm9yIHJlY292ZXJ5IC0gcmV0cnlpbmcgKCVkKSBtb3JlIHRpbWVzLlxuIiwKKwkJCSAgICBoYS0+aXNwX2Fib3J0X2NudCk7CiAJCQlzZXRfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQl9CkBAIC0zODcyLDggKzM5MzksOCBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JREVCVUcyKHByaW50ayhLRVJOX0lORk8KLQkgICAgIiVzIHN0YXR1cz0lZFxuIiwgX19mdW5jX18sIHN0YXR1cykpOworCXFsX2RiZyhxbF9kYmdfcDNwLCB2aGEsIDB4YjAyNywKKwkgICAgIiVzIHN0YXR1cz0lZC5cbiIsIHN0YXR1cyk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzkwMiw2ICszOTY5LDkgQEAKIAkJCX0KIAkJfQogCX0KKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGIwLAorCSAgICAiRW50ZXJlZCAlcyBmd19odW5nPSVkLlxuIiwKKwkgICAgX19mdW5jX18sIGhhLT5mbGFncy5pc3A4Mnh4X2Z3X2h1bmcpOwogCiAJLyogQWJvcnQgYWxsIGNvbW1hbmRzIGdyYWNlZnVsbHkgaWYgZncgTk9UIGh1bmcgKi8KIAlpZiAoIWhhLT5mbGFncy5pc3A4Mnh4X2Z3X2h1bmcpIHsKQEAgLTM5MjIsMTMgKzM5OTIsMTMgQEAKIAkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCiAJCQkJCQkgICAgJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJCQkJCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7Ci0JCQkJCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkJCQkJCSAgICAic2NzaSglbGQpOiBtYnggYWJvcnQgY29tbWFuZCBmYWlsZWQgaW4gJXNcbiIsCi0JCQkJCQkJICAgIHZoYS0+aG9zdF9ubywgX19mdW5jX18pOworCQkJCQkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLAorCQkJCQkJCSAgICAweDAwYjEsCisJCQkJCQkJICAgICJtYnggYWJvcnQgZmFpbGVkLlxuIik7CiAJCQkJCQl9IGVsc2UgewotCQkJCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCQkJCQkgICAgInNjc2koJWxkKTogbWJ4IGFib3J0IGNvbW1hbmQgc3VjY2VzcyBpbiAlc1xuIiwKLQkJCQkJCQkgICAgdmhhLT5ob3N0X25vLCBfX2Z1bmNfXyk7CisJCQkJCQkJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsCisJCQkJCQkJICAgIDB4MDBiMiwKKwkJCQkJCQkgICAgIm1ieCBhYm9ydCBzdWNjZXNzLlxuIik7CiAJCQkJCQl9CiAJCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJCQkJfQpAQCAtMzk0MCw4ICs0MDEwLDkgQEAKIAkJLyogV2FpdCBmb3IgcGVuZGluZyBjbWRzIChwaHlzaWNhbCBhbmQgdmlydHVhbCkgdG8gY29tcGxldGUgKi8KIAkJaWYgKCFxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHModmhhLCAwLCAwLAogCQkgICAgV0FJVF9IT1NUKSA9PSBRTEFfU1VDQ0VTUykgewotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiRG9uZSB3YWl0IGZvciBwZW5kaW5nIGNvbW1hbmRzXG4iKSk7CisJCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMGIzLAorCQkJICAgICJEb25lIHdhaXQgZm9yICIKKwkJCSAgICAicGVuZGluZyBjb21tYW5kcy5cbiIpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBmNDYxOTI1Li40Y2FjZTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMzUsNiArMzUsMTAgQEAKICAqIENUNiBDVFggYWxsb2NhdGlvbiBjYWNoZQogICovCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmN0eF9jYWNoZXA7CisvKgorICogZXJyb3IgbGV2ZWwgZm9yIGxvZ2dpbmcKKyAqLworaW50IHFsX2VycmxldiA9IHFsX2xvZ19hbGw7CiAKIGludCBxbDJ4bG9naW50aW1lb3V0ID0gMjA7CiBtb2R1bGVfcGFyYW0ocWwyeGxvZ2ludGltZW91dCwgaW50LCBTX0lSVUdPKTsKQEAgLTY5LDggKzczLDE3IEBACiBpbnQgcWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmc7CiBtb2R1bGVfcGFyYW0ocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcsCi0JCSJPcHRpb24gdG8gZW5hYmxlIGV4dGVuZGVkIGVycm9yIGxvZ2dpbmcsICIKLQkJIkRlZmF1bHQgaXMgMCAtIG5vIGxvZ2dpbmcuIDEgLSBsb2cgZXJyb3JzLiIpOworCQkiT3B0aW9uIHRvIGVuYWJsZSBleHRlbmRlZCBlcnJvciBsb2dnaW5nLFxuIgorCQkiXHRcdERlZmF1bHQgaXMgMCAtIG5vIGxvZ2dpbmcuICAweDQwMDAwMDAwIC0gTW9kdWxlIEluaXQgJiBQcm9iZS5cbiIKKwkJIlx0XHQweDIwMDAwMDAwIC0gTWFpbGJveCBDbW5kcy4gMHgxMDAwMDAwMCAtIERldmljZSBEaXNjb3ZlcnkuXG4iCisJCSJcdFx0MHgwODAwMDAwMCAtIElPIHRyYWNpbmcuICAgIDB4MDQwMDAwMDAgLSBEUEMgVGhyZWFkLlxuIgorCQkiXHRcdDB4MDIwMDAwMDAgLSBBc3luYyBldmVudHMuICAweDAxMDAwMDAwIC0gVGltZXIgcm91dGluZXMuXG4iCisJCSJcdFx0MHgwMDgwMDAwMCAtIFVzZXIgc3BhY2UuICAgIDB4MDA0MDAwMDAgLSBUYXNrIE1hbmFnZW1lbnQuXG4iCisJCSJcdFx0MHgwMDIwMDAwMCAtIEFFUi9FRUguICAgICAgIDB4MDAxMDAwMDAgLSBNdWx0aSBRLlxuIgorCQkiXHRcdDB4MDAwODAwMDAgLSBQM1AgU3BlY2lmaWMuICAweDAwMDQwMDAwIC0gVmlydHVhbCBQb3J0LlxuIgorCQkiXHRcdDB4MDAwMjAwMDAgLSBCdWZmZXIgRHVtcC4gICAweDAwMDEwMDAwIC0gTWlzYy5cbiIKKwkJIlx0XHQweDdmZmZmZmZmIC0gRm9yIGVuYWJsaW5nIGFsbCBsb2dzLCBjYW4gYmUgdG9vIG1hbnkgbG9ncy5cbiIKKwkJIlx0XHREbyBMT0dJQ0FMIE9SIG9mIHRoZSB2YWx1ZSB0byBlbmFibGUgbW9yZSB0aGFuIG9uZSBsZXZlbCIpOwogCiBpbnQgcWwyeHNoaWZ0Y3RvbmRzZCA9IDY7CiBtb2R1bGVfcGFyYW0ocWwyeHNoaWZ0Y3RvbmRzZCwgaW50LCBTX0lSVUdPKTsKQEAgLTkzLDE3ICsxMDYsMjEgQEAKIAkJIk1heGltdW0gcXVldWUgZGVwdGggdG8gcmVwb3J0IGZvciB0YXJnZXQgZGV2aWNlcy4iKTsKIAogLyogRG8gbm90IGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyBhZnRlciBtb2R1bGUgbG9hZCAqLwotaW50IHFsMnhlbmFibGVkaWYgPSAxOworaW50IHFsMnhlbmFibGVkaWYgPSAwOwogbW9kdWxlX3BhcmFtKHFsMnhlbmFibGVkaWYsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGVuYWJsZWRpZiwKIAkJIiBFbmFibGUgVDEwLUNSQy1ESUYgIgotCQkiIERlZmF1bHQgaXMgMCAtIE5vIERJRiBTdXBwb3J0LiAxIC0gRW5hYmxlIGl0Iik7CisJCSIgRGVmYXVsdCBpcyAwIC0gTm8gRElGIFN1cHBvcnQuIDEgLSBFbmFibGUgaXQiCisJCSIsIDIgLSBFbmFibGUgRElGIGZvciBhbGwgdHlwZXMsIGV4Y2VwdCBUeXBlIDAuIik7CiAKLWludCBxbDJ4ZW5hYmxlaGJhX2Vycl9jaGs7CitpbnQgcWwyeGVuYWJsZWhiYV9lcnJfY2hrID0gMjsKIG1vZHVsZV9wYXJhbShxbDJ4ZW5hYmxlaGJhX2Vycl9jaGssIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGVuYWJsZWhiYV9lcnJfY2hrLAotCQkiIEVuYWJsZSBUMTAtQ1JDLURJRiBFcnJvciBpc29sYXRpb24gYnkgSEJBIgotCQkiIERlZmF1bHQgaXMgMCAtIEVycm9yIGlzb2xhdGlvbiBkaXNhYmxlZCwgMSAtIEVuYWJsZSBpdCIpOworCQkiIEVuYWJsZSBUMTAtQ1JDLURJRiBFcnJvciBpc29sYXRpb24gYnkgSEJBOlxuIgorCQkiIERlZmF1bHQgaXMgMS5cbiIKKwkJIiAgMCAtLSBFcnJvciBpc29sYXRpb24gZGlzYWJsZWRcbiIKKwkJIiAgMSAtLSBFcnJvciBpc29sYXRpb24gZW5hYmxlZCBvbmx5IGZvciBESVggVHlwZSAwXG4iCisJCSIgIDIgLS0gRXJyb3IgaXNvbGF0aW9uIGVuYWJsZWQgZm9yIGFsbCBUeXBlc1xuIik7CiAKIGludCBxbDJ4aWlkbWFlbmFibGU9MTsKIG1vZHVsZV9wYXJhbShxbDJ4aWlkbWFlbmFibGUsIGludCwgU19JUlVHTyk7CkBAIC0xMjgsOCArMTQ1LDggQEAKIGludCBxbDJ4Zndsb2FkYmluOwogbW9kdWxlX3BhcmFtKHFsMnhmd2xvYWRiaW4sIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHFsMnhmd2xvYWRiaW4sCi0JCSJPcHRpb24gdG8gc3BlY2lmeSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRvIGxvYWQgSVNQIGZpcm13YXJlOlxuIgotCQkiIDIgLS0gbG9hZCBmaXJtd2FyZSB2aWEgdGhlIHJlcXVlc3RfZmlybXdhcmUoKSAoaG90cGx1ZylcbiIKKwkJIk9wdGlvbiB0byBzcGVjaWZ5IGxvY2F0aW9uIGZyb20gd2hpY2ggdG8gbG9hZCBJU1AgZmlybXdhcmU6LlxuIgorCQkiIDIgLS0gbG9hZCBmaXJtd2FyZSB2aWEgdGhlIHJlcXVlc3RfZmlybXdhcmUoKSAoaG90cGx1ZykuXG4iCiAJCSIgICAgICBpbnRlcmZhY2UuXG4iCiAJCSIgMSAtLSBsb2FkIGZpcm13YXJlIGZyb20gZmxhc2guXG4iCiAJCSIgMCAtLSB1c2UgZGVmYXVsdCBzZW1hbnRpY3MuXG4iKTsKQEAgLTE0Myw3ICsxNjAsNyBAQAogaW50IHFsMnhkYndyID0gMTsKIG1vZHVsZV9wYXJhbShxbDJ4ZGJ3ciwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocWwyeGRid3IsCi0JIk9wdGlvbiB0byBzcGVjaWZ5IHNjaGVtZSBmb3IgcmVxdWVzdCBxdWV1ZSBwb3N0aW5nXG4iCisJIk9wdGlvbiB0byBzcGVjaWZ5IHNjaGVtZSBmb3IgcmVxdWVzdCBxdWV1ZSBwb3N0aW5nLlxuIgogCSIgMCAtLSBSZWd1bGFyIGRvb3JiZWxsLlxuIgogCSIgMSAtLSBDQU1SQU0gZG9vcmJlbGwgKGZhc3RlcikuXG4iKTsKIApAQCAtMTY4LDcgKzE4NSw3IEBACiBpbnQgcWwyeGRvbnRyZXNldGhiYTsKIG1vZHVsZV9wYXJhbShxbDJ4ZG9udHJlc2V0aGJhLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZG9udHJlc2V0aGJhLAotCSJPcHRpb24gdG8gc3BlY2lmeSByZXNldCBiZWhhdmlvdXJcbiIKKwkiT3B0aW9uIHRvIHNwZWNpZnkgcmVzZXQgYmVoYXZpb3VyLlxuIgogCSIgMCAoRGVmYXVsdCkgLS0gUmVzZXQgb24gZmFpbHVyZS5cbiIKIAkiIDEgLS0gRG8gbm90IHJlc2V0IG9uIGZhaWx1cmUuXG4iKTsKIApAQCAtMjQ3LDggKzI2NCwxMSBAQAogcWxhMngwMF9yZXN0YXJ0X3RpbWVyKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQogewogCS8qIEN1cnJlbnRseSB1c2VkIGZvciA4MlhYIG9ubHkuICovCi0JaWYgKHZoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19ERVZfRkFJTEVEKQorCWlmICh2aGEtPmRldmljZV9mbGFncyAmIERGTEdfREVWX0ZBSUxFRCkgeworCQlxbF9kYmcocWxfZGJnX3RpbWVyLCB2aGEsIDB4NjAwZCwKKwkJICAgICJEZXZpY2UgaW4gYSBmYWlsZWQgc3RhdGUsIHJldHVybmluZy5cbiIpOwogCQlyZXR1cm47CisJfQogCiAJbW9kX3RpbWVyKCZ2aGEtPnRpbWVyLCBqaWZmaWVzICsgaW50ZXJ2YWwgKiBIWik7CiB9CkBAIC0yNzMsMTkgKzI5MywyMCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgcWxhMngwMF9hbGxvY19xdWV1ZXMoc3RydWN0IHFsYV9od19kYXRhICpoYSkKIHsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAJaGEtPnJlcV9xX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXFfcXVlICopICogaGEtPm1heF9yZXFfcXVldWVzLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghaGEtPnJlcV9xX21hcCkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVxdWVzdCBxdWV1ZSBwdHJzXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwM2IsCisJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVxdWVzdCBxdWV1ZSBwdHJzLlxuIik7CiAJCWdvdG8gZmFpbF9yZXFfbWFwOwogCX0KIAogCWhhLT5yc3BfcV9tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnNwX3F1ZSAqKSAqIGhhLT5tYXhfcnNwX3F1ZXVlcywKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIWhhLT5yc3BfcV9tYXApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc3BvbnNlIHF1ZXVlIHB0cnNcbiIpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCB2aGEsIDB4MDAzYywKKwkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByZXNwb25zZSBxdWV1ZSBwdHJzLlxuIik7CiAJCWdvdG8gZmFpbF9yc3BfbWFwOwogCX0KIAlzZXRfYml0KDAsIGhhLT5yc3BfcWlkX21hcCk7CkBAIC0zNDksOCArMzcwLDggQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCWlmICghKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzYpKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJGaXJtd2FyZSBpcyBub3QgbXVsdGktcXVldWUgY2FwYWJsZVxuIik7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZDgsCisJCSAgICAiRmlybXdhcmUgaXMgbm90IG11bHRpLXF1ZXVlIGNhcGFibGUuXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAlpZiAocWwyeG11bHRpcXVlX3RhZykgewpAQCAtMzU5LDggKzM4MCw4IEBACiAJCXJlcSA9IHFsYTI1eHhfY3JlYXRlX3JlcV9xdWUoaGEsIG9wdGlvbnMsIDAsIDAsIC0xLAogCQkJUUxBX0RFRkFVTFRfUVVFX1FPUyk7CiAJCWlmICghcmVxKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJIkNhbid0IGNyZWF0ZSByZXF1ZXN0IHF1ZXVlXG4iKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZTAsCisJCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgcmVxdWVzdCBxdWV1ZS5cbiIpOwogCQkJZ290byBmYWlsOwogCQl9CiAJCWhhLT53cSA9IGFsbG9jX3dvcmtxdWV1ZSgicWxhMnh4eF93cSIsIFdRX01FTV9SRUNMQUlNLCAxKTsKQEAgLTM2OSwxNyArMzkwLDIwIEBACiAJCWZvciAocXVlcyA9IDE7IHF1ZXMgPCBoYS0+bWF4X3JzcF9xdWV1ZXM7IHF1ZXMrKykgewogCQkJcmV0ID0gcWxhMjV4eF9jcmVhdGVfcnNwX3F1ZShoYSwgb3B0aW9ucywgMCwgMCwgcmVxKTsKIAkJCWlmICghcmV0KSB7Ci0JCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCQkiUmVzcG9uc2UgUXVldWUgY3JlYXRlIGZhaWxlZFxuIik7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBlOCwKKwkJCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgcmVzcG9uc2UgcXVldWUuXG4iKTsKIAkJCQlnb3RvIGZhaWwyOwogCQkJfQogCQl9CiAJCWhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCA9IDE7Ci0KLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSJDUFUgYWZmaW5pdHkgbW9kZSBlbmFibGVkLCBuby4gb2YgcmVzcG9uc2UiCi0JCQkiIHF1ZXVlczolZCwgbm8uIG9mIHJlcXVlc3QgcXVldWVzOiVkXG4iLAotCQkJaGEtPm1heF9yc3BfcXVldWVzLCBoYS0+bWF4X3JlcV9xdWV1ZXMpKTsKKwkJcWxfZGJnKHFsX2RiZ19tdWx0aXEsIHZoYSwgMHhjMDA3LAorCQkgICAgIkNQVSBhZmZpbml0eSBtb2RlIGVuYWxiZWQsICIKKwkJICAgICJuby4gb2YgcmVzcG9uc2UgcXVldWVzOiVkIG5vLiBvZiByZXF1ZXN0IHF1ZXVlczolZC5cbiIsCisJCSAgICBoYS0+bWF4X3JzcF9xdWV1ZXMsIGhhLT5tYXhfcmVxX3F1ZXVlcyk7CisJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwZTksCisJCSAgICAiQ1BVIGFmZmluaXR5IG1vZGUgZW5hbGJlZCwgIgorCQkgICAgIm5vLiBvZiByZXNwb25zZSBxdWV1ZXM6JWQgbm8uIG9mIHJlcXVlc3QgcXVldWVzOiVkLlxuIiwKKwkJICAgIGhhLT5tYXhfcnNwX3F1ZXVlcywgaGEtPm1heF9yZXFfcXVldWVzKTsKIAl9CiAJcmV0dXJuIDA7CiBmYWlsMjoKQEAgLTUyNiw4ICs1NTAsMTEgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAogCXNwID0gbWVtcG9vbF9hbGxvYyhoYS0+c3JiX21lbXBvb2wsIEdGUF9BVE9NSUMpOwotCWlmICghc3ApCisJaWYgKCFzcCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgzMDA2LAorCQkgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3Igc3AuXG4iKTsKIAkJcmV0dXJuIHNwOworCX0KIAogCWF0b21pY19zZXQoJnNwLT5yZWZfY291bnQsIDEpOwogCXNwLT5mY3BvcnQgPSBmY3BvcnQ7CkBAIC01NTEsMzAgKzU3OCw0MyBAQAogCWludCBydmFsOwogCiAJaWYgKGhhLT5mbGFncy5lZWhfYnVzeSkgewotCQlpZiAoaGEtPmZsYWdzLnBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJaWYgKGhhLT5mbGFncy5wY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDAxLAorCQkJICAgICJQQ0kgQ2hhbm5lbCBJTyBwZXJtYW5lbnQgZmFpbHVyZSwgZXhpdGluZyAiCisJCQkgICAgImNtZD0lcC5cbiIsIGNtZCk7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwotCQllbHNlCisJCX0gZWxzZSB7CisJCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAwMiwKKwkJCSAgICAiRUVIX0J1c3ksIFJlcXVldWluZyB0aGUgY21kPSVwLlxuIiwgY21kKTsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX1JFUVVFVUUgPDwgMTY7CisJCX0KIAkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKIAl9CiAKIAlydmFsID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpOwogCWlmIChydmFsKSB7CiAJCWNtZC0+cmVzdWx0ID0gcnZhbDsKKwkJcWxfZGJnKHFsX2RiZ19pbywgdmhhLCAweDMwMDMsCisJCSAgICAiZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkgZmFpbGVkIGZvciBjbWQ9JXAsIHJ2YWw9MHgleC5cbiIsCisJCSAgICBjbWQsIHJ2YWwpOwogCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwogCX0KIAogCWlmICghdmhhLT5mbGFncy5kaWZkaXhfc3VwcG9ydGVkICYmCiAJCXNjc2lfZ2V0X3Byb3Rfb3AoY21kKSAhPSBTQ1NJX1BST1RfTk9STUFMKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkgICAgIkRJRiBDYXAgTm90IFJlZywgZmFpbCBESUYgY2FwYWJsZSBjbWQnczoleFxuIiwKLQkJCSAgICBjbWQtPmNtbmRbMF0pKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW8sIHZoYSwgMHgzMDA0LAorCQkJICAgICJESUYgQ2FwIG5vdCByZWcsIGZhaWwgRElGIGNhcGFibGUgY21kJ3M6JXAuXG4iLAorCQkJICAgIGNtZCk7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKIAl9CiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfT05MSU5FKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEIHx8CiAJCQlhdG9taWNfcmVhZCgmYmFzZV92aGEtPmxvb3Bfc3RhdGUpID09IExPT1BfREVBRCkgeworCQkJcWxfZGJnKHFsX2RiZ19pbywgdmhhLCAweDMwMDUsCisJCQkgICAgIlJldHVybmluZyBETkMsIGZjcG9ydF9zdGF0ZT0lZCBsb29wX3N0YXRlPSVkLlxuIiwKKwkJCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSksCisJCQkgICAgYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSk7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKIAkJfQpAQCAtNTg2LDggKzYyNiwxMSBAQAogCQlnb3RvIHFjMjRfaG9zdF9idXN5OwogCiAJcnZhbCA9IGhhLT5pc3Bfb3BzLT5zdGFydF9zY3NpKHNwKTsKLQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAxMywKKwkJICAgICJTdGFydCBzY3NpIGZhaWxlZCBydmFsPSVkIGZvciBjbWQ9JXAuXG4iLCBydmFsLCBjbWQpOwogCQlnb3RvIHFjMjRfaG9zdF9idXN5X2ZyZWVfc3A7CisJfQogCiAJcmV0dXJuIDA7CiAKQEAgLTYzMCw3ICs2NzMsOCBAQAogCWludCByZXQgPSBRTEFfU1VDQ0VTUzsKIAogCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKGhhLT5wZGV2KSkgfHwgaGEtPmZsYWdzLmVlaF9idXN5KSB7Ci0JCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAicmV0dXJuOmVoX3dhaXRcbiIpKTsKKwkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMDUsCisJCSAgICAiUmV0dXJuOmVoX3dhaXQuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTcyMyw3ICs3NjcsOCBAQAogCWVsc2UKIAkJcmV0dXJuX3N0YXR1cyA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKLQlERUJVRzIocHJpbnRrKCIlcyByZXR1cm5fc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgcmV0dXJuX3N0YXR1cykpOworCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDE5LAorCSAgICAiJXMgcmV0dXJuIHN0YXR1cz0lZC5cbiIsIF9fZnVuY19fLCByZXR1cm5fc3RhdHVzKTsKIAogCXJldHVybiByZXR1cm5fc3RhdHVzOwogfQpAQCAtODMxLDEwICs4NzYsMTQgQEAKIAlpbnQgd2FpdCA9IDA7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKKwlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAwMCwKKwkgICAgIkVudGVyZWQgJXMgZm9yIGNtZD0lcC5cbiIsIF9fZnVuY19fLCBjbWQpOwogCWlmICghQ01EX1NQKGNtZCkpCiAJCXJldHVybiBTVUNDRVNTOwogCiAJcmV0ID0gZmNfYmxvY2tfc2NzaV9laChjbWQpOworCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDAxLAorCSAgICAiUmV0dXJuIHZhbHVlIG9mIGZjX2Jsb2NrX3Njc2lfZWg9JWQuXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAlyZXQgPSBTVUNDRVNTOwpAQCAtODQ5LDM3ICs4OTgsNDEgQEAKIAkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCi0JREVCVUcyKHByaW50aygiJXMoJWxkKTogYWJvcnRpbmcgc3AgJXAgZnJvbSBSSVNDLiIsCi0JICAgIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHNwKSk7CisJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMDIsCisJICAgICJBYm9ydGluZyBzcD0lcCBjbWQ9JXAgZnJvbSBSSVNDICIsIHNwLCBjbWQpOwogCiAJLyogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzcCBhbmQgZHJvcCB0aGUgbG9jay4qLwogCXNwX2dldChzcCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCWlmIChoYS0+aXNwX29wcy0+YWJvcnRfY29tbWFuZChzcCkpIHsKLQkJREVCVUcyKHByaW50aygiJXMoJWxkKTogYWJvcnRfY29tbWFuZCAiCi0JCSJtYnggZmFpbGVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwotCQlyZXQgPSBGQUlMRUQ7CisJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDAzLAorCQkgICAgIkFib3J0IGNvbW1hbmQgbWJ4IGZhaWxlZCBmb3IgY21kPSVwLlxuIiwgY21kKTsKIAl9IGVsc2UgewotCQlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBhYm9ydF9jb21tYW5kICIKLQkJIm1ieCBzdWNjZXNzLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAwNCwKKwkJICAgICJBYm9ydCBjb21tYW5kIG1ieCBzdWNjZXNzLlxuIik7CiAJCXdhaXQgPSAxOwogCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCisJLyogRGlkIHRoZSBjb21tYW5kIHJldHVybiBkdXJpbmcgbWFpbGJveCBleGVjdXRpb24/ICovCisJaWYgKHJldCA9PSBGQUlMRUQgJiYgIUNNRF9TUChjbWQpKQorCQlyZXQgPSBTVUNDRVNTOwogCiAJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gYmUgcmV0dXJuZWQuICovCiAJaWYgKHdhaXQpIHsKIAkJaWYgKHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKGNtZCkgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJICAgICJzY3NpKCVsZDolZDolZCk6IEFib3J0IGhhbmRsZXIgdGltZWQgb3V0IC0tICV4LlxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8sIGlkLCBsdW4sIHJldCk7CisJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDA2LAorCQkJICAgICJBYm9ydCBoYW5kbGVyIHRpbWVkIG91dCBmb3IgY21kPSVwLlxuIiwgY21kKTsKIAkJCXJldCA9IEZBSUxFRDsKIAkJfQogCX0KIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgInNjc2koJWxkOiVkOiVkKTogQWJvcnQgY29tbWFuZCBpc3N1ZWQgLS0gJWQgJXguXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8sIGlkLCBsdW4sIHdhaXQsIHJldCk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAxYywKKwkgICAgIkFib3J0IGNvbW1hbmQgaXNzdWVkIC0tICAlZCAleC5cbiIsIHdhaXQsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTQ3LDQwICsxMDAwLDU5IEBACiAJZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCWludCBlcnI7CiAKLQlpZiAoIWZjcG9ydCkKKwlpZiAoIWZjcG9ydCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDA3LAorCQkgICAgImZjcG9ydCBpcyBOVUxMLlxuIik7CiAJCXJldHVybiBGQUlMRUQ7CisJfQogCiAJZXJyID0gZmNfYmxvY2tfc2NzaV9laChjbWQpOworCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDA4LAorCSAgICAiZmNfYmxvY2tfc2NzaV9laCByZXQ9JWQuXG4iLCBlcnIpOwogCWlmIChlcnIgIT0gMCkKIAkJcmV0dXJuIGVycjsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LCAic2NzaSglbGQ6JWQ6JWQpOiAlcyBSRVNFVCBJU1NVRUQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgbmFtZSk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAwOSwKKwkgICAgIiVzIFJFU0VUIElTU1VFRCBmb3IgaWQgJWQgbHVuICVkIGNtZD0lcC5cbiIsIG5hbWUsCisJICAgIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kKTsKIAogCWVyciA9IDA7Ci0JaWYgKHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZSh2aGEpICE9IFFMQV9TVUNDRVNTKQorCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDBhLAorCQkgICAgIldhaXQgZm9yIGhiYSBvbmxpbmUgZmFpbGVkIGZvciBjbWQ9JXAuXG4iLCBjbWQpOwogCQlnb3RvIGVoX3Jlc2V0X2ZhaWxlZDsKKwl9CiAJZXJyID0gMTsKLQlpZiAocWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KHZoYSkgIT0gUUxBX1NVQ0NFU1MpCisJaWYgKHFsYTJ4MDBfd2FpdF9mb3JfbG9vcF9yZWFkeSh2aGEpICE9IFFMQV9TVUNDRVNTKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMGIsCisJCSAgICAiV2FpdCBmb3IgbG9vcCByZWFkeSBmYWlsZWQgZm9yIGNtZD0lcC5cbiIsIGNtZCk7CiAJCWdvdG8gZWhfcmVzZXRfZmFpbGVkOworCX0KIAllcnIgPSAyOwogCWlmIChkb19yZXNldChmY3BvcnQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+cmVxdWVzdC0+Y3B1ICsgMSkKLQkJIT0gUUxBX1NVQ0NFU1MpCisJCSE9IFFMQV9TVUNDRVNTKSB7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMGMsCisJCSAgICAiZG9fcmVzZXQgZmFpbGVkIGZvciBjbWQ9JXAuXG4iLCBjbWQpOwogCQlnb3RvIGVoX3Jlc2V0X2ZhaWxlZDsKKwl9CiAJZXJyID0gMzsKIAlpZiAocWxhMngwMF9laF93YWl0X2Zvcl9wZW5kaW5nX2NvbW1hbmRzKHZoYSwgY21kLT5kZXZpY2UtPmlkLAotCSAgICBjbWQtPmRldmljZS0+bHVuLCB0eXBlKSAhPSBRTEFfU1VDQ0VTUykKKwkgICAgY21kLT5kZXZpY2UtPmx1biwgdHlwZSkgIT0gUUxBX1NVQ0NFU1MpIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAwZCwKKwkJICAgICJ3YWl0IGZvciBwZWRpbmcgY21kcyBmYWlsZWQgZm9yIGNtZD0lcC5cbiIsIGNtZCk7CiAJCWdvdG8gZWhfcmVzZXRfZmFpbGVkOworCX0KIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LCAic2NzaSglbGQ6JWQ6JWQpOiAlcyBSRVNFVCBTVUNDRUVERUQuXG4iLAotCSAgICB2aGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgbmFtZSk7CisJcWxfbG9nKHFsX2xvZ19pbmZvLCB2aGEsIDB4ODAwZSwKKwkgICAgIiVzIFJFU0VUIFNVQ0NFRURFRCBmb3IgaWQgJWQgbHVuICVkIGNtZD0lcC5cbiIsIG5hbWUsCisJICAgIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kKTsKIAogCXJldHVybiBTVUNDRVNTOwogCiBlaF9yZXNldF9mYWlsZWQ6Ci0JcWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsICJzY3NpKCVsZDolZDolZCk6ICVzIFJFU0VUIEZBSUxFRDogJXMuXG4iCi0JICAgICwgdmhhLT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIG5hbWUsCi0JICAgIHJlc2V0X2Vycm9yc1tlcnJdKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg4MDBmLAorCSAgICAiJXMgUkVTRVQgRkFJTEVEOiAlcyBmb3IgaWQgJWQgbHVuICVkIGNtZD0lcC5cbiIsIG5hbWUsCisJICAgIHJlc2V0X2Vycm9yc1tlcnJdLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwogCXJldHVybiBGQUlMRUQ7CiB9CiAKQEAgLTEwMzAsMTkgKzExMDIsMjUgQEAKIAlpZCA9IGNtZC0+ZGV2aWNlLT5pZDsKIAlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCi0JaWYgKCFmY3BvcnQpCisJaWYgKCFmY3BvcnQpIHsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAxMCwKKwkJICAgICJmY3BvcnQgaXMgTlVMTC5cbiIpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCXJldCA9IGZjX2Jsb2NrX3Njc2lfZWgoY21kKTsKKwlxbF9kYmcocWxfZGJnX3Rhc2ttLCB2aGEsIDB4ODAxMSwKKwkgICAgImZjX2Jsb2NrX3Njc2lfZWggcmV0PSVkLlxuIiwgcmV0KTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAJcmV0ID0gRkFJTEVEOwogCi0JcWxhX3ByaW50ayhLRVJOX0lORk8sIHZoYS0+aHcsCi0JICAgICJzY3NpKCVsZDolZDolZCk6IEJVUyBSRVNFVCBJU1NVRUQuXG4iLCB2aGEtPmhvc3Rfbm8sIGlkLCBsdW4pOworCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDgwMTIsCisJICAgICJCVVMgUkVTRVQgSVNTVUVEIGZvciBpZCAlZCBsdW4gJWQuXG4iLCBpZCwgbHVuKTsKIAogCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykgewotCQlERUJVRzIocHJpbnRrKCIlcyBmYWlsZWQ6Ym9hcmQgZGlzYWJsZWRcbiIsX19mdW5jX18pKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDgwMTMsCisJCSAgICAiV2FpdCBmb3IgaGJhIG9ubGluZSBmYWlsZWQgYm9hcmQgZGlzYWJsZWQuXG4iKTsKIAkJZ290byBlaF9idXNfcmVzZXRfZG9uZTsKIAl9CiAKQEAgLTEwNTUsMTIgKzExMzMsMTUgQEAKIAogCS8qIEZsdXNoIG91dHN0YW5kaW5nIGNvbW1hbmRzLiAqLwogCWlmIChxbGEyeDAwX2VoX3dhaXRfZm9yX3BlbmRpbmdfY29tbWFuZHModmhhLCAwLCAwLCBXQUlUX0hPU1QpICE9Ci0JICAgIFFMQV9TVUNDRVNTKQorCSAgICBRTEFfU1VDQ0VTUykgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDE0LAorCQkgICAgIldhaXQgZm9yIHBlbmRpbmcgY29tbWFuZHMgZmFpbGVkLlxuIik7CiAJCXJldCA9IEZBSUxFRDsKKwl9CiAKIGVoX2J1c19yZXNldF9kb25lOgotCXFsYV9wcmludGsoS0VSTl9JTkZPLCB2aGEtPmh3LCAiJXM6IHJlc2V0ICVzXG4iLCBfX2Z1bmNfXywKLQkgICAgKHJldCA9PSBGQUlMRUQpID8gImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CisJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4ODAyYiwKKwkgICAgIkJVUyBSRVNFVCAlcy5cbiIsIChyZXQgPT0gRkFJTEVEKSA/ICJGQUlMRUQiIDogIlNVQ0NFREVEIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTA5MywxNiArMTE3NCwyMSBAQAogCWlkID0gY21kLT5kZXZpY2UtPmlkOwogCWx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CiAKLQlpZiAoIWZjcG9ydCkKKwlpZiAoIWZjcG9ydCkgeworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg4MDE2LAorCQkgICAgImZjcG9ydCBpcyBOVUxMLlxuIik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0gZmNfYmxvY2tfc2NzaV9laChjbWQpOworCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDE3LAorCSAgICAiZmNfYmxvY2tfc2NzaV9laCByZXQ9JWQuXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAlyZXQgPSBGQUlMRUQ7CiAKLQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJzY3NpKCVsZDolZDolZCk6IEFEQVBURVIgUkVTRVQgSVNTVUVELlxuIiwgdmhhLT5ob3N0X25vLCBpZCwgbHVuKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIHZoYSwgMHg4MDE4LAorCSAgICAiQURBUFRFUiBSRVNFVCBJU1NVRUQgZm9yIGlkICVkIGx1biAlZC5cbiIsIGlkLCBsdW4pOwogCiAJaWYgKHFsYTJ4MDBfd2FpdF9mb3JfcmVzZXRfcmVhZHkodmhhKSAhPSBRTEFfU1VDQ0VTUykKIAkJZ290byBlaF9ob3N0X3Jlc2V0X2xvY2s7CkBAIC0xMTM3LDggKzEyMjMsMTEgQEAKIAkJCS8qIGZhaWxlZC4gc2NoZWR1bGUgZHBjIHRvIHRyeSAqLwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAKLQkJCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykKKwkJCWlmIChxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUodmhhKSAhPSBRTEFfU1VDQ0VTUykgeworCQkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDgwMmEsCisJCQkJICAgICJ3YWl0IGZvciBoYmEgb25saW5lIGZhaWxlZC5cbiIpOwogCQkJCWdvdG8gZWhfaG9zdF9yZXNldF9sb2NrOworCQkJfQogCQl9CiAJCWNsZWFyX2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJfQpAQCAtMTE0OSw3ICsxMjM4LDcgQEAKIAkJcmV0ID0gU1VDQ0VTUzsKIAogZWhfaG9zdF9yZXNldF9sb2NrOgotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIiVzOiByZXNldCAlc1xuIiwgX19mdW5jX18sCisJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiJXM6IHJlc2V0ICVzLlxuIiwgX19mdW5jX18sCiAJICAgIChyZXQgPT0gRkFJTEVEKSA/ICJmYWlsZWQiIDogInN1Y2NlZWRlZCIpOwogCiAJcmV0dXJuIHJldDsKQEAgLTExNzksOSArMTI2OCw5IEBACiAKIAkJCXJldCA9IGhhLT5pc3Bfb3BzLT50YXJnZXRfcmVzZXQoZmNwb3J0LCAwLCAwKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGJ1c19yZXNldCBmYWlsZWQ6ICIKLQkJCQkgICAgInRhcmdldF9yZXNldD0lZCBkX2lkPSV4LlxuIiwgX19mdW5jX18sCi0JCQkJICAgIHZoYS0+aG9zdF9ubywgcmV0LCBmY3BvcnQtPmRfaWQuYjI0KSk7CisJCQkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMmMsCisJCQkJICAgICJCdXMgUmVzZXQgZmFpbGVkOiBUYXJnZXQgUmVzZXQ9JWQgIgorCQkJCSAgICAiZF9pZD0leC5cbiIsIHJldCwgZmNwb3J0LT5kX2lkLmIyNCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTg5LDkgKzEyNzgsOCBAQAogCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9mdWxsX2xvZ2luICYmICFJU19RTEE4WFhYX1RZUEUoaGEpKSB7CiAJCXJldCA9IHFsYTJ4MDBfZnVsbF9sb2dpbl9saXAodmhhKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ6ICIKLQkJCSAgICAiZnVsbF9sb2dpbl9saXA9JWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLAotCQkJICAgIHJldCkpOworCQkJcWxfZGJnKHFsX2RiZ190YXNrbSwgdmhhLCAweDgwMmQsCisJCQkgICAgImZ1bGxfbG9naW5fbGlwPSVkLlxuIiwgcmV0KTsKIAkJfQogCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfRE9XTik7CiAJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCBMT09QX0RPV05fVElNRSk7CkBAIC0xMjAyLDggKzEyOTAsOCBAQAogCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9yZXNldCkgewogCQlyZXQgPSBxbGEyeDAwX2xpcF9yZXNldCh2aGEpOwogCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRzJfMyhwcmludGsoIiVzKCVsZCk6IGZhaWxlZDogIgotCQkJICAgICJsaXBfcmVzZXQ9JWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCByZXQpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdGFza20sIHZoYSwgMHg4MDJlLAorCQkJICAgICJsaXBfcmVzZXQgZmFpbGVkICglZCkuXG4iLCByZXQpOwogCQl9IGVsc2UKIAkJCXFsYTJ4MDBfd2FpdF9mb3JfbG9vcF9yZWFkeSh2aGEpOwogCX0KQEAgLTEzMDIsMTcgKzEzOTAsMTcgQEAKIAlpZiAoIXNjc2lfdHJhY2tfcXVldWVfZnVsbChzZGV2LCBxZGVwdGgpKQogCQlyZXR1cm47CiAKLQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGZjcG9ydC0+dmhhLT5odywKLQkJInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtZG93biB0byAlZC5cbiIsCi0JCWZjcG9ydC0+dmhhLT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwgc2Rldi0+bHVuLAotCQlzZGV2LT5xdWV1ZV9kZXB0aCkpOworCXFsX2RiZyhxbF9kYmdfaW8sIGZjcG9ydC0+dmhhLCAweDMwMjksCisJICAgICJRdWV1ZSBkZXB0aCBhZGp1c3RlZC1kb3duICIKKwkgICAgInRvICVkIGZvciBzY3NpKCVsZDolZDolZDolZCkuXG4iLAorCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgZmNwb3J0LT52aGEtPmhvc3Rfbm8sCisJICAgIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwogfQogCiBzdGF0aWMgdm9pZCBxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCiB7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSBzZGV2LT5ob3N0ZGF0YTsKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhID0gZmNwb3J0LT52aGE7Ci0Jc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IE5VTEw7CiAKIAlyZXEgPSB2aGEtPnJlcTsKQEAgLTEzMjcsMTAgKzE0MTUsMTEgQEAKIAllbHNlCiAJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsIE1TR19TSU1QTEVfVEFHLCBxZGVwdGgpOwogCi0JREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgICAgInNjc2koJWxkOiVkOiVkOiVkKTogUXVldWUgZGVwdGggYWRqdXN0ZWQtdXAgdG8gJWQuXG4iLAotCSAgICAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1biwKLQkgICAgICAgc2Rldi0+cXVldWVfZGVwdGgpKTsKKwlxbF9kYmcocWxfZGJnX2lvLCB2aGEsIDB4MzAyYSwKKwkgICAgIlF1ZXVlIGRlcHRoIGFkanVzdGVkLXVwIHRvICVkIGZvciAiCisJICAgICJzY3NpKCVsZDolZDolZDolZCkuXG4iLAorCSAgICBzZGV2LT5xdWV1ZV9kZXB0aCwgZmNwb3J0LT52aGEtPmhvc3Rfbm8sCisJICAgIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzc2LDYgKzE4NjUsOSBAQAogCQloYS0+ZmxhZ3MucG9ydDAgPSAxOwogCWVsc2UKIAkJaGEtPmZsYWdzLnBvcnQwID0gMDsKKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDBiLAorCSAgICAiZGV2aWNlX3R5cGU9MHgleCBwb3J0PSVkIGZ3X3NyaXNjX2FkZHJlc3M9JXAuXG4iLAorCSAgICBoYS0+ZGV2aWNlX3R5cGUsIGhhLT5mbGFncy5wb3J0MCwgaGEtPmZ3X3NyaXNjX2FkZHJlc3MpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzkwLDEwICsxODgyLDkgQEAKIAogCWlmIChwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKGhhLT5wZGV2LCBoYS0+YmFycywKIAkgICAgUUxBMlhYWF9EUklWRVJfTkFNRSkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIkZhaWxlZCB0byByZXNlcnZlIFBJTy9NTUlPIHJlZ2lvbnMgKCVzKVxuIiwKKwkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMTEsCisJCSAgICAiRmFpbGVkIHRvIHJlc2VydmUgUElPL01NSU8gcmVnaW9ucyAoJXMpLCBhYm9ydGluZy5cbiIsCiAJCSAgICBwY2lfbmFtZShoYS0+cGRldikpOwotCiAJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OwogCX0KIAlpZiAoIShoYS0+YmFycyAmIDEpKQpAQCAtMTgwMywzOSArMTg5NCw0MiBAQAogCXBpbyA9IHBjaV9yZXNvdXJjZV9zdGFydChoYS0+cGRldiwgMCk7CiAJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhoYS0+cGRldiwgMCkgJiBJT1JFU09VUkNFX0lPKSB7CiAJCWlmIChwY2lfcmVzb3VyY2VfbGVuKGhhLT5wZGV2LCAwKSA8IE1JTl9JT0JBU0VfTEVOKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIkludmFsaWQgUENJIEkvTyByZWdpb24gc2l6ZSAoJXMpLi4uXG4iLAotCQkJCXBjaV9uYW1lKGhhLT5wZGV2KSk7CisJCQlxbF9sb2dfcGNpKHFsX2xvZ193YXJuLCBoYS0+cGRldiwgMHgwMDEyLAorCQkJICAgICJJbnZhbGlkIHBjaSBJL08gcmVnaW9uIHNpemUgKCVzKS5cbiIsCisJCQkgICAgcGNpX25hbWUoaGEtPnBkZXYpKTsKIAkJCXBpbyA9IDA7CiAJCX0KIAl9IGVsc2UgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAicmVnaW9uICMwIG5vdCBhIFBJTyByZXNvdXJjZSAoJXMpLi4uXG4iLAorCQlxbF9sb2dfcGNpKHFsX2xvZ193YXJuLCBoYS0+cGRldiwgMHgwMDEzLAorCQkgICAgIlJlZ2lvbiAjMCBubyBhIFBJTyByZXNvdXJjZSAoJXMpLlxuIiwKIAkJICAgIHBjaV9uYW1lKGhhLT5wZGV2KSk7CiAJCXBpbyA9IDA7CiAJfQogCWhhLT5waW9fYWRkcmVzcyA9IHBpbzsKKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDE0LAorCSAgICAiUElPIGFkZHJlc3M9JXAuXG4iLAorCSAgICBoYS0+cGlvX2FkZHJlc3MpOwogCiBza2lwX3BpbzoKIAkvKiBVc2UgTU1JTyBvcGVyYXRpb25zIGZvciBhbGwgYWNjZXNzZXMuICovCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKGhhLT5wZGV2LCAxKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJICAgICJyZWdpb24gIzEgbm90IGFuIE1NSU8gcmVzb3VyY2UgKCVzKSwgYWJvcnRpbmdcbiIsCisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDE1LAorCQkgICAgIlJlZ2lvbiAjMSBub3QgYW4gTU1JTyByZXNvdXJjZSAoJXMpLCBhYm9ydGluZy5cbiIsCiAJCSAgICBwY2lfbmFtZShoYS0+cGRldikpOwogCQlnb3RvIGlvc3BhY2VfZXJyb3JfZXhpdDsKIAl9CiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4oaGEtPnBkZXYsIDEpIDwgTUlOX0lPQkFTRV9MRU4pIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiSW52YWxpZCBQQ0kgbWVtIHJlZ2lvbiBzaXplICglcyksIGFib3J0aW5nXG4iLAotCQkJcGNpX25hbWUoaGEtPnBkZXYpKTsKKwkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMTYsCisJCSAgICAiSW52YWxpZCBQQ0kgbWVtIHJlZ2lvbiBzaXplICglcyksIGFib3J0aW5nLlxuIiwKKwkJICAgIHBjaV9uYW1lKGhhLT5wZGV2KSk7CiAJCWdvdG8gaW9zcGFjZV9lcnJvcl9leGl0OwogCX0KIAogCWhhLT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChoYS0+cGRldiwgMSksIE1JTl9JT0JBU0VfTEVOKTsKIAlpZiAoIWhhLT5pb2Jhc2UpIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCSAgICAiY2Fubm90IHJlbWFwIE1NSU8gKCVzKSwgYWJvcnRpbmdcbiIsIHBjaV9uYW1lKGhhLT5wZGV2KSk7Ci0KKwkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMTcsCisJCSAgICAiQ2Fubm90IHJlbWFwIE1NSU8gKCVzKSwgYWJvcnRpbmcuXG4iLAorCQkgICAgcGNpX25hbWUoaGEtPnBkZXYpKTsKIAkJZ290byBpb3NwYWNlX2Vycm9yX2V4aXQ7CiAJfQogCkBAIC0xODQ5LDYgKzE5NDMsOCBAQAogCWhhLT5tcWlvYmFzZSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGhhLT5wZGV2LCAzKSwKIAkJCXBjaV9yZXNvdXJjZV9sZW4oaGEtPnBkZXYsIDMpKTsKIAlpZiAoaGEtPm1xaW9iYXNlKSB7CisJCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIGhhLT5wZGV2LCAweDAwMTgsCisJCSAgICAiTVFJTyBCYXNlPSVwLlxuIiwgaGEtPm1xaW9iYXNlKTsKIAkJLyogUmVhZCBNU0lYIHZlY3RvciBzaXplIG9mIHRoZSBib2FyZCAqLwogCQlwY2lfcmVhZF9jb25maWdfd29yZChoYS0+cGRldiwgUUxBX1BDSV9NU0lYX0NPTlRST0wsICZtc2l4KTsKIAkJaGEtPm1zaXhfY291bnQgPSBtc2l4OwpAQCAtMTg2MSwxNyArMTk1NywyNCBAQAogCQkJaGEtPm1heF9yZXFfcXVldWVzID0gMjsKIAkJfSBlbHNlIGlmIChxbDJ4bWF4cXVldWVzID4gMSkgewogCQkJaGEtPm1heF9yZXFfcXVldWVzID0gcWwyeG1heHF1ZXVlcyA+IFFMQV9NUV9TSVpFID8KLQkJCQkJCVFMQV9NUV9TSVpFIDogcWwyeG1heHF1ZXVlczsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJRb1MgbW9kZSBzZXQsIG1heCBubyIKLQkJCSIgb2YgcmVxdWVzdCBxdWV1ZXM6JWRcbiIsIGhhLT5tYXhfcmVxX3F1ZXVlcykpOworCQkJICAgIFFMQV9NUV9TSVpFIDogcWwyeG1heHF1ZXVlczsKKwkJCXFsX2RiZ19wY2kocWxfZGJnX211bHRpcSwgaGEtPnBkZXYsIDB4YzAwOCwKKwkJCSAgICAiUW9TIG1vZGUgc2V0LCBtYXggbm8gb2YgcmVxdWVzdCBxdWV1ZXM6JWQuXG4iLAorCQkJICAgIGhhLT5tYXhfcmVxX3F1ZXVlcyk7CisJCQlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDE5LAorCQkJICAgICJRb1MgbW9kZSBzZXQsIG1heCBubyBvZiByZXF1ZXN0IHF1ZXVlczolZC5cbiIsCisJCQkgICAgaGEtPm1heF9yZXFfcXVldWVzKTsKIAkJfQotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkiTVNJLVggdmVjdG9yIGNvdW50OiAlZFxuIiwgbXNpeCk7CisJCXFsX2xvZ19wY2kocWxfbG9nX2luZm8sIGhhLT5wZGV2LCAweDAwMWEsCisJCSAgICAiTVNJLVggdmVjdG9yIGNvdW50OiAlZC5cbiIsIG1zaXgpOwogCX0gZWxzZQotCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJCQVIgMyBub3QgZW5hYmxlZFxuIik7CisJCXFsX2xvZ19wY2kocWxfbG9nX2luZm8sIGhhLT5wZGV2LCAweDAwMWIsCisJCSAgICAiQkFSIDMgbm90IGVuYWJsZWQuXG4iKTsKIAogbXFpb2Jhc2VfZXhpdDoKIAloYS0+bXNpeF9jb3VudCA9IGhhLT5tYXhfcnNwX3F1ZXVlcyArIDE7CisJcWxfZGJnX3BjaShxbF9kYmdfaW5pdCwgaGEtPnBkZXYsIDB4MDAxYywKKwkgICAgIk1TSVggQ291bnQ6JWQuXG4iLCBoYS0+bXNpeF9jb3VudCk7CiAJcmV0dXJuICgwKTsKIAogaW9zcGFjZV9lcnJvcl9leGl0OgpAQCAtMTkzNSw3ICsyMDM4LDExIEBACiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A4MDIxKSB7CiAJCWJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pOwogCQltZW1fb25seSA9IDE7CisJCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIHBkZXYsIDB4MDAwNywKKwkJICAgICJNZW0gb25seSBhZGFwdGVyLlxuIik7CiAJfQorCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIHBkZXYsIDB4MDAwOCwKKwkgICAgIkJhcnM9JWQuXG4iLCBiYXJzKTsKIAogCWlmIChtZW1fb25seSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpKQpAQCAtMTk1MCw5ICsyMDU3LDEyIEBACiAKIAloYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxbGFfaHdfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghaGEpIHsKLQkJREVCVUcocHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBoYVxuIikpOworCQlxbF9sb2dfcGNpKHFsX2xvZ19mYXRhbCwgcGRldiwgMHgwMDA5LAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhhLlxuIik7CiAJCWdvdG8gcHJvYmVfb3V0OwogCX0KKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBwZGV2LCAweDAwMGEsCisJICAgICJNZW1vcnkgYWxsb2NhdGVkIGZvciBoYT0lcC5cbiIsIGhhKTsKIAloYS0+cGRldiA9IHBkZXY7CiAKIAkvKiBDbGVhciBvdXIgZGF0YSBhcmVhICovCkBAIC0xOTc0LDEwICsyMDg0LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIHByb2JlX2h3X2ZhaWxlZDsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgIkZvdW5kIGFuIElTUCUwNFgsIGlycSAlZCwgaW9iYXNlIDB4JXBcbiIsIHBkZXYtPmRldmljZSwgcGRldi0+aXJxLAotCSAgICBoYS0+aW9iYXNlKTsKLQorCXFsX2xvZ19wY2kocWxfbG9nX2luZm8sIHBkZXYsIDB4MDAxZCwKKwkgICAgIkZvdW5kIGFuIElTUCUwNFggaXJxICVkIGlvYmFzZSAweCVwLlxuIiwKKwkgICAgcGRldi0+ZGV2aWNlLCBwZGV2LT5pcnEsIGhhLT5pb2Jhc2UpOwogCWhhLT5wcmV2X3RvcG9sb2d5ID0gMDsKIAloYS0+aW5pdF9jYl9zaXplID0gc2l6ZW9mKGluaXRfY2JfdCk7CiAJaGEtPmxpbmtfZGF0YV9yYXRlID0gUE9SVF9TUEVFRF9VTktOT1dOOwpAQCAtMjA3OCw3ICsyMTg3LDE4IEBACiAJCWhhLT5udnJhbV9jb25mX29mZiA9IEZBUlhfQUNDRVNTX05WUkFNX0NPTkY7CiAJCWhhLT5udnJhbV9kYXRhX29mZiA9IEZBUlhfQUNDRVNTX05WUkFNX0RBVEE7CiAJfQotCisJcWxfZGJnX3BjaShxbF9kYmdfaW5pdCwgcGRldiwgMHgwMDFlLAorCSAgICAibWJ4X2NvdW50PSVkLCByZXFfbGVuZ3RoPSVkLCAiCisJICAgICJyc3BfbGVuZ3RoPSVkLCBtYXhfbG9vcF9pZD0lZCwgaW5pdF9jYl9zaXplPSVkLCAiCisJICAgICJnaWRfbGlzdF9pbmZvX3NpemU9JWQsIG9wdHJvbV9zaXplPSVkLCBudnJhbV9ucGl2X3NpemU9JWQsIC5cbiIsCisJICAgIGhhLT5tYnhfY291bnQsIHJlcV9sZW5ndGgsIHJzcF9sZW5ndGgsIGhhLT5tYXhfbG9vcF9pZCwKKwkgICAgaGEtPmluaXRfY2Jfc2l6ZSwgaGEtPmdpZF9saXN0X2luZm9fc2l6ZSwgaGEtPm9wdHJvbV9zaXplLAorCSAgICBoYS0+bnZyYW1fbnBpdl9zaXplKTsKKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBwZGV2LCAweDAwMWYsCisJICAgICJpc3Bfb3BzPSVwLCBmbGFzaF9jb25mX29mZj0lZCwgIgorCSAgICAiZmxhc2hfZGF0YV9vZmY9JWQsIG52cmFtX2NvbmZfb2ZmPSVkLCBudnJhbV9kYXRhX29mZj0lZC5cbiIsCisJICAgIGhhLT5pc3Bfb3BzLCBoYS0+Zmxhc2hfY29uZl9vZmYsIGhhLT5mbGFzaF9kYXRhX29mZiwKKwkgICAgaGEtPm52cmFtX2NvbmZfb2ZmLCBoYS0+bnZyYW1fZGF0YV9vZmYpOwogCW11dGV4X2luaXQoJmhhLT52cG9ydF9sb2NrKTsKIAlpbml0X2NvbXBsZXRpb24oJmhhLT5tYnhfY21kX2NvbXApOwogCWNvbXBsZXRlKCZoYS0+bWJ4X2NtZF9jb21wKTsKQEAgLTIwODgsMTAgKzIyMDgsMTQgQEAKIAlzZXRfYml0KDAsICh1bnNpZ25lZCBsb25nICopIGhhLT52cF9pZHhfbWFwKTsKIAogCXFsYTJ4MDBfY29uZmlnX2RtYV9hZGRyZXNzaW5nKGhhKTsKKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBwZGV2LCAweDAwMjAsCisJICAgICI2NCBCaXQgYWRkcmVzc2luZyBpcyAlcy5cbiIsCisJICAgIGhhLT5mbGFncy5lbmFibGVfNjRiaXRfYWRkcmVzc2luZyA/ICJlbmFibGUiIDoKKwkgICAgImRpc2FibGUiKTsKIAlyZXQgPSBxbGEyeDAwX21lbV9hbGxvYyhoYSwgcmVxX2xlbmd0aCwgcnNwX2xlbmd0aCwgJnJlcSwgJnJzcCk7CiAJaWYgKCFyZXQpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIltFUlJPUl0gRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWRhcHRlclxuIik7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBwZGV2LCAweDAwMzEsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWRhcHRlciwgYWJvcnRpbmcuXG4iKTsKIAogCQlnb3RvIHByb2JlX2h3X2ZhaWxlZDsKIAl9CkBAIC0yMTAzLDkgKzIyMjcsNiBAQAogCiAJYmFzZV92aGEgPSBxbGEyeDAwX2NyZWF0ZV9ob3N0KHNodCwgaGEpOwogCWlmICghYmFzZV92aGEpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIltFUlJPUl0gRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igc2NzaV9ob3N0XG4iKTsKLQogCQlyZXQgPSAtRU5PTUVNOwogCQlxbGEyeDAwX21lbV9mcmVlKGhhKTsKIAkJcWxhMngwMF9mcmVlX3JlcV9xdWUoaGEsIHJlcSk7CkBAIC0yMTMyLDEyICsyMjUzLDE2IEBACiAJCWlmICghSVNfUUxBODJYWChoYSkpCiAJCQlob3N0LT5zZ190YWJsZXNpemUgPSBRTEFfU0dfQUxMOwogCX0KLQorCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDAzMiwKKwkgICAgImNhbl9xdWV1ZT0lZCwgcmVxPSVwLCAiCisJICAgICJtZ210X3N2cl9sb29wX2lkPSVkLCBzZ190YWJsZXNpemU9JWQuXG4iLAorCSAgICBob3N0LT5jYW5fcXVldWUsIGJhc2VfdmhhLT5yZXEsCisJICAgIGJhc2VfdmhhLT5tZ210X3N2cl9sb29wX2lkLCBob3N0LT5zZ190YWJsZXNpemUpOwogCWhvc3QtPm1heF9pZCA9IG1heF9pZDsKIAlob3N0LT50aGlzX2lkID0gMjU1OwogCWhvc3QtPmNtZF9wZXJfbHVuID0gMzsKIAlob3N0LT51bmlxdWVfaWQgPSBob3N0LT5ob3N0X25vOwotCWlmICgoSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpICYmIHFsMnhlbmFibGVkaWYpCisJaWYgKElTX1QxMF9QSV9DQVBBQkxFKGhhKSAmJiBxbDJ4ZW5hYmxlZGlmKQogCQlob3N0LT5tYXhfY21kX2xlbiA9IDMyOwogCWVsc2UKIAkJaG9zdC0+bWF4X2NtZF9sZW4gPSBNQVhfQ01EU1o7CkBAIC0yMTQ2LDYgKzIyNzEsMTQgQEAKIAlob3N0LT50cmFuc3BvcnR0ID0gcWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGU7CiAJc2h0LT52ZW5kb3JfaWQgPSAoU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX1FMT0dJQyk7CiAKKwlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwMzMsCisJICAgICJtYXhfaWQ9JWQgdGhpc19pZD0lZCAiCisJICAgICJjbWRfcGVyX2xlbj0lZCB1bmlxdWVfaWQ9JWQgbWF4X2NtZF9sZW49JWQgbWF4X2NoYW5uZWw9JWQgIgorCSAgICAibWF4X2x1bj0lZCB0cmFuc3BvcnR0PSVwLCB2ZW5kb3JfaWQ9JWQuXG4iLCBob3N0LT5tYXhfaWQsCisJICAgIGhvc3QtPnRoaXNfaWQsIGhvc3QtPmNtZF9wZXJfbHVuLCBob3N0LT51bmlxdWVfaWQsCisJICAgIGhvc3QtPm1heF9jbWRfbGVuLCBob3N0LT5tYXhfY2hhbm5lbCwgaG9zdC0+bWF4X2x1biwKKwkgICAgaG9zdC0+dHJhbnNwb3J0dCwgc2h0LT52ZW5kb3JfaWQpOworCiAJLyogU2V0IHVwIHRoZSBpcnFzICovCiAJcmV0ID0gcWxhMngwMF9yZXF1ZXN0X2lycXMoaGEsIHJzcCk7CiAJaWYgKHJldCkKQEAgLTIxNTYsOSArMjI4OSw4IEBACiAJLyogQWxsb2MgYXJyYXlzIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJpbmcgcHRycyAqLwogcXVlX2luaXQ6CiAJaWYgKCFxbGEyeDAwX2FsbG9jX3F1ZXVlcyhoYSkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkiW0VSUk9SXSBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZSIKLQkJIiBwb2ludGVyc1xuIik7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIGJhc2VfdmhhLCAweDAwM2QsCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWUgcG9pbnRlcnMuLiBhYm9ydGluZy5cbiIpOwogCQlnb3RvIHByb2JlX2luaXRfZmFpbGVkOwogCX0KIApAQCAtMjE4NiwyMCArMjMxOCwzMyBAQAogCQlyc3AtPnJzcF9xX291dCA9ICZoYS0+aW9iYXNlLT5pc3A4Mi5yc3BfcV9vdXRbMF07CiAJfQogCi0JaWYgKHFsYTJ4MDBfaW5pdGlhbGl6ZV9hZGFwdGVyKGJhc2VfdmhhKSkgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlclxuIik7CisJcWxfZGJnKHFsX2RiZ19tdWx0aXEsIGJhc2VfdmhhLCAweGMwMDksCisJICAgICJyc3BfcV9tYXA9JXAgcmVxX3FfbWFwPSVwIHJzcC0+cmVxPSVwIHJlcS0+cnNwPSVwLlxuIiwKKwkgICAgaGEtPnJzcF9xX21hcCwgaGEtPnJlcV9xX21hcCwgcnNwLT5yZXEsIHJlcS0+cnNwKTsKKwlxbF9kYmcocWxfZGJnX211bHRpcSwgYmFzZV92aGEsIDB4YzAwYSwKKwkgICAgInJlcS0+cmVxX3FfaW49JXAgcmVxLT5yZXFfcV9vdXQ9JXAgIgorCSAgICAicnNwLT5yc3BfcV9pbj0lcCByc3AtPnJzcF9xX291dD0lcC5cbiIsCisJICAgIHJlcS0+cmVxX3FfaW4sIHJlcS0+cmVxX3Ffb3V0LAorCSAgICByc3AtPnJzcF9xX2luLCByc3AtPnJzcF9xX291dCk7CisJcWxfZGJnKHFsX2RiZ19pbml0LCBiYXNlX3ZoYSwgMHgwMDNlLAorCSAgICAicnNwX3FfbWFwPSVwIHJlcV9xX21hcD0lcCByc3AtPnJlcT0lcCByZXEtPnJzcD0lcC5cbiIsCisJICAgIGhhLT5yc3BfcV9tYXAsIGhhLT5yZXFfcV9tYXAsIHJzcC0+cmVxLCByZXEtPnJzcCk7CisJcWxfZGJnKHFsX2RiZ19pbml0LCBiYXNlX3ZoYSwgMHgwMDNmLAorCSAgICAicmVxLT5yZXFfcV9pbj0lcCByZXEtPnJlcV9xX291dD0lcCByc3AtPnJzcF9xX2luPSVwIHJzcC0+cnNwX3Ffb3V0PSVwLlxuIiwKKwkgICAgcmVxLT5yZXFfcV9pbiwgcmVxLT5yZXFfcV9vdXQsIHJzcC0+cnNwX3FfaW4sIHJzcC0+cnNwX3Ffb3V0KTsKIAotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXIgLSAiCi0JCSAgICAiQWRhcHRlciBmbGFncyAleC5cbiIsCi0JCSAgICBiYXNlX3ZoYS0+aG9zdF9ubywgYmFzZV92aGEtPmRldmljZV9mbGFncykpOworCWlmIChxbGEyeDAwX2luaXRpYWxpemVfYWRhcHRlcihiYXNlX3ZoYSkpIHsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgYmFzZV92aGEsIDB4MDBkNiwKKwkJICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyIC0gQWRhcHRlciBmbGFncyAleC5cbiIsCisJCSAgICBiYXNlX3ZoYS0+ZGV2aWNlX2ZsYWdzKTsKIAogCQlpZiAoSVNfUUxBODJYWChoYSkpIHsKIAkJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCQkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfREVWX1NUQVRFLAogCQkJCVFMQTgyWFhfREVWX0ZBSUxFRCk7CiAJCQlxbGE4Mnh4X2lkY191bmxvY2soaGEpOwotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IEZBSUxFRFxuIik7CisJCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCBiYXNlX3ZoYSwgMHgwMGQ3LAorCQkJICAgICJIVyBTdGF0ZTogRkFJTEVELlxuIik7CiAJCX0KIAogCQlyZXQgPSAtRU5PREVWOwpAQCAtMjIwOCw5ICsyMzUzLDggQEAKIAogCWlmIChoYS0+bXFlbmFibGUpIHsKIAkJaWYgKHFsYTI1eHhfc2V0dXBfbW9kZShiYXNlX3ZoYSkpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkiQ2FuJ3QgY3JlYXRlIHF1ZXVlcywgZmFsbGluZyBiYWNrIHRvIHNpbmdsZSIKLQkJCQkiIHF1ZXVlIG1vZGVcbiIpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCBiYXNlX3ZoYSwgMHgwMGVjLAorCQkJICAgICJGYWlsZWQgdG8gY3JlYXRlIHF1ZXVlcywgZmFsbGluZyBiYWNrIHRvIHNpbmdsZSBxdWV1ZSBtb2RlLlxuIik7CiAJCQlnb3RvIHF1ZV9pbml0OwogCQl9CiAJfQpAQCAtMjIyMiwxMyArMjM2NiwxNSBAQAogCSAqIFN0YXJ0dXAgdGhlIGtlcm5lbCB0aHJlYWQgZm9yIHRoaXMgaG9zdCBhZGFwdGVyCiAJICovCiAJaGEtPmRwY190aHJlYWQgPSBrdGhyZWFkX2NyZWF0ZShxbGEyeDAwX2RvX2RwYywgaGEsCi0JCQkiJXNfZHBjIiwgYmFzZV92aGEtPmhvc3Rfc3RyKTsKKwkgICAgIiVzX2RwYyIsIGJhc2VfdmhhLT5ob3N0X3N0cik7CiAJaWYgKElTX0VSUihoYS0+ZHBjX3RocmVhZCkpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlVuYWJsZSB0byBzdGFydCBEUEMgdGhyZWFkIVxuIik7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIGJhc2VfdmhhLCAweDAwZWQsCisJCSAgICAiRmFpbGVkIHRvIHN0YXJ0IERQQyB0aHJlYWQuXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihoYS0+ZHBjX3RocmVhZCk7CiAJCWdvdG8gcHJvYmVfZmFpbGVkOwogCX0KKwlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwZWUsCisJICAgICJEUEMgdGhyZWFkIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LlxuIik7CiAKIHNraXBfZHBjOgogCWxpc3RfYWRkX3RhaWwoJmJhc2VfdmhhLT5saXN0LCAmaGEtPnZwX2xpc3QpOwpAQCAtMjIzNiwxOCArMjM4MiwyMyBAQAogCiAJLyogSW5pdGlhbGl6ZWQgdGhlIHRpbWVyICovCiAJcWxhMngwMF9zdGFydF90aW1lcihiYXNlX3ZoYSwgcWxhMngwMF90aW1lciwgV0FUQ0hfSU5URVJWQUwpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDBlZiwKKwkgICAgIlN0YXJ0ZWQgcWxhMngwMF90aW1lciB3aXRoICIKKwkgICAgImludGVydmFsPSVkLlxuIiwgV0FUQ0hfSU5URVJWQUwpOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDBmMCwKKwkgICAgIkRldGVjdGVkIGhiYSBhdCBhZGRyZXNzPSVwLlxuIiwKKwkgICAgaGEpOwogCi0JREVCVUcyKHByaW50aygiREVCVUc6IGRldGVjdCBoYmEgJWxkIGF0IGFkZHJlc3MgPSAlcFxuIiwKLQkgICAgYmFzZV92aGEtPmhvc3Rfbm8sIGhhKSk7Ci0KLQlpZiAoKElTX1FMQTI1WFgoaGEpIHx8IElTX1FMQTgxWFgoaGEpKSAmJiBxbDJ4ZW5hYmxlZGlmKSB7CisJaWYgKElTX1QxMF9QSV9DQVBBQkxFKGhhKSAmJiBxbDJ4ZW5hYmxlZGlmKSB7CiAJCWlmIChoYS0+ZndfYXR0cmlidXRlcyAmIEJJVF80KSB7CisJCQlpbnQgcHJvdCA9IDA7CiAJCQliYXNlX3ZoYS0+ZmxhZ3MuZGlmZGl4X3N1cHBvcnRlZCA9IDE7Ci0JCQlERUJVRzE4KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiUmVnaXN0ZXJpbmcgZm9yIERJRi9ESVggdHlwZSAxIGFuZCAzIgotCQkJICAgICIgcHJvdGVjdGlvbi5cbiIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgYmFzZV92aGEsIDB4MDBmMSwKKwkJCSAgICAiUmVnaXN0ZXJpbmcgZm9yIERJRi9ESVggdHlwZSAxIGFuZCAzIHByb3RlY3Rpb24uXG4iKTsKKwkJCWlmIChxbDJ4ZW5hYmxlZGlmID09IDEpCisJCQkJcHJvdCA9IFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OOwogCQkJc2NzaV9ob3N0X3NldF9wcm90KGhvc3QsCi0JCQkgICAgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KKwkJCSAgICBwcm90IHwgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT04KIAkJCSAgICB8IFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OCiAJCQkgICAgfCBTSE9TVF9ESUZfVFlQRTNfUFJPVEVDVElPTgogCQkJICAgIHwgU0hPU1RfRElYX1RZUEUxX1BST1RFQ1RJT04KQEAgLTIyNjcsNiArMjQxOCw5IEBACiAJYmFzZV92aGEtPmZsYWdzLmluaXRfZG9uZSA9IDE7CiAJYmFzZV92aGEtPmZsYWdzLm9ubGluZSA9IDE7CiAKKwlxbF9kYmcocWxfZGJnX2luaXQsIGJhc2VfdmhhLCAweDAwZjIsCisJICAgICJJbml0IGRvbmUgYW5kIGhiYSBpcyBvbmxpbmUuXG4iKTsKKwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcWxhMngwMF9hbGxvY19zeXNmc19hdHRyKGJhc2VfdmhhKTsKQEAgLTIyNzUsMTQgKzI0MjksMTcgQEAKIAogCXFsYTJ4MDBfZGZzX3NldHVwKGJhc2VfdmhhKTsKIAotCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlxuIgotCSAgICAiIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXI6ICVzXG4iCi0JICAgICIgIFFMb2dpYyAlcyAtICVzXG4iCi0JICAgICIgIElTUCUwNFg6ICVzIEAgJXMgaGRtYSVjLCBob3N0Iz0lbGQsIGZ3PSVzXG4iLAotCSAgICBxbGEyeDAwX3ZlcnNpb25fc3RyLCBoYS0+bW9kZWxfbnVtYmVyLAotCSAgICBoYS0+bW9kZWxfZGVzYyA/IGhhLT5tb2RlbF9kZXNjIDogIiIsIHBkZXYtPmRldmljZSwKLQkgICAgaGEtPmlzcF9vcHMtPnBjaV9pbmZvX3N0cihiYXNlX3ZoYSwgcGNpX2luZm8pLCBwY2lfbmFtZShwZGV2KSwKLQkgICAgaGEtPmZsYWdzLmVuYWJsZV82NGJpdF9hZGRyZXNzaW5nID8gJysnIDogJy0nLCBiYXNlX3ZoYS0+aG9zdF9ubywKKwlxbF9sb2cocWxfbG9nX2luZm8sIGJhc2VfdmhhLCAweDAwZmEsCisJICAgICJRTG9naWMgRmlicmUgQ2hhbm5lZCBIQkEgRHJpdmVyOiAlcy5cbiIsCisJICAgIHFsYTJ4MDBfdmVyc2lvbl9zdHIpOworCXFsX2xvZyhxbF9sb2dfaW5mbywgYmFzZV92aGEsIDB4MDBmYiwKKwkgICAgIlFMb2dpYyAlcyAtICVzLlxuIiwKKwkgICAgaGEtPm1vZGVsX251bWJlciwgaGEtPm1vZGVsX2Rlc2MgPyBoYS0+bW9kZWxfZGVzYyA6ICIiKTsKKwlxbF9sb2cocWxfbG9nX2luZm8sIGJhc2VfdmhhLCAweDAwZmMsCisJICAgICJJU1AlMDRYOiAlcyBAICVzIGhkbWElYyBob3N0Iz0lbGQgZnc9JXMuXG4iLAorCSAgICBwZGV2LT5kZXZpY2UsIGhhLT5pc3Bfb3BzLT5wY2lfaW5mb19zdHIoYmFzZV92aGEsIHBjaV9pbmZvKSwKKwkgICAgcGNpX25hbWUocGRldiksIGhhLT5mbGFncy5lbmFibGVfNjRiaXRfYWRkcmVzc2luZyA/ICcrJyA6ICctJywKKwkgICAgYmFzZV92aGEtPmhvc3Rfbm8sCiAJICAgIGhhLT5pc3Bfb3BzLT5md192ZXJzaW9uX3N0cihiYXNlX3ZoYSwgZndfc3RyKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI1ODAsMjAgKzI3MzcsMTUgQEAKIAkJZmNwb3J0LT5sb2dpbl9yZXRyeSA9IHZoYS0+aHctPmxvZ2luX3JldHJ5X2NvdW50OwogCQlzZXRfYml0KFJFTE9HSU5fTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCi0JCURFQlVHKHByaW50aygic2NzaSglbGQpOiBQb3J0IGxvZ2luIHJldHJ5OiAiCisJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwNjcsCisJCSAgICAiUG9ydCBsb2dpbiByZXRyeSAiCiAJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngsICIKLQkJICAgICJpZCA9IDB4JTA0eCByZXRyeSBjbnQ9JWRcbiIsCi0JCSAgICB2aGEtPmhvc3Rfbm8sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVswXSwKLQkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzFdLAotCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbMl0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVszXSwKLQkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzRdLAotCQkgICAgZmNwb3J0LT5wb3J0X25hbWVbNV0sCi0JCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs2XSwKLQkJICAgIGZjcG9ydC0+cG9ydF9uYW1lWzddLAotCQkgICAgZmNwb3J0LT5sb29wX2lkLAotCQkgICAgZmNwb3J0LT5sb2dpbl9yZXRyeSkpOworCQkgICAgImlkID0gMHglMDR4IHJldHJ5IGNudD0lZC5cbiIsCisJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVswXSwgZmNwb3J0LT5wb3J0X25hbWVbMV0sCisJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVsyXSwgZmNwb3J0LT5wb3J0X25hbWVbM10sCisJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs0XSwgZmNwb3J0LT5wb3J0X25hbWVbNV0sCisJCSAgICBmY3BvcnQtPnBvcnRfbmFtZVs2XSwgZmNwb3J0LT5wb3J0X25hbWVbN10sCisJCSAgICBmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+bG9naW5fcmV0cnkpOwogCX0KIH0KIApAQCAtMjY3Niw2ICsyODI4LDkgQEAKIAkJCWN0eF9jYWNoZXApOwogCQlpZiAoIWhhLT5jdHhfbWVtcG9vbCkKIAkJCWdvdG8gZmFpbF9mcmVlX3NyYl9tZW1wb29sOworCQlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDIxLAorCQkgICAgImN0eF9jYWNoZXA9JXAgY3R4X21lbXBvb2w9JXAuXG4iLAorCQkgICAgY3R4X2NhY2hlcCwgaGEtPmN0eF9tZW1wb29sKTsKIAl9CiAKIAkvKiBHZXQgbWVtb3J5IGZvciBjYWNoZWQgTlZSQU0gKi8KQEAgLTI2OTAsMjIgKzI4NDUsMjkgQEAKIAlpZiAoIWhhLT5zX2RtYV9wb29sKQogCQlnb3RvIGZhaWxfZnJlZV9udnJhbTsKIAorCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIGhhLT5wZGV2LCAweDAwMjIsCisJICAgICJpbml0X2NiPSVwIGdpZF9saXN0PSVwLCBzcmJfbWVtcG9vbD0lcCBzX2RtYV9wb29sPSVwLlxuIiwKKwkgICAgaGEtPmluaXRfY2IsIGhhLT5naWRfbGlzdCwgaGEtPnNyYl9tZW1wb29sLCBoYS0+c19kbWFfcG9vbCk7CisKIAlpZiAoSVNfUUxBODJYWChoYSkgfHwgcWwyeGVuYWJsZWRpZikgewogCQloYS0+ZGxfZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUobmFtZSwgJmhhLT5wZGV2LT5kZXYsCiAJCQlEU0RfTElTVF9ETUFfUE9PTF9TSVpFLCA4LCAwKTsKIAkJaWYgKCFoYS0+ZGxfZG1hX3Bvb2wpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSAgICAiTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIC0gZGxfZG1hX3Bvb2xcbiIpOworCQkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMjMsCisJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRsX2RtYV9wb29sLlxuIik7CiAJCQlnb3RvIGZhaWxfc19kbWFfcG9vbDsKIAkJfQogCiAJCWhhLT5mY3BfY21uZF9kbWFfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShuYW1lLCAmaGEtPnBkZXYtPmRldiwKIAkJCUZDUF9DTU5EX0RNQV9QT09MX1NJWkUsIDgsIDApOwogCQlpZiAoIWhhLT5mY3BfY21uZF9kbWFfcG9vbCkgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgLSBmY3BfY21uZF9kbWFfcG9vbFxuIik7CisJCQlxbF9sb2dfcGNpKHFsX2xvZ19mYXRhbCwgaGEtPnBkZXYsIDB4MDAyNCwKKwkJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZmNwX2NtbmRfZG1hX3Bvb2wuXG4iKTsKIAkJCWdvdG8gZmFpbF9kbF9kbWFfcG9vbDsKIAkJfQorCQlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDI1LAorCQkgICAgImRsX2RtYV9wb29sPSVwIGZjcF9jbW5kX2RtYV9wb29sPSVwLlxuIiwKKwkJICAgIGhhLT5kbF9kbWFfcG9vbCwgaGEtPmZjcF9jbW5kX2RtYV9wb29sKTsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFNOUyBjb21tYW5kcyAqLwpAQCAtMjcxNSw2ICsyODc3LDggQEAKIAkJc2l6ZW9mKHN0cnVjdCBzbnNfY21kX3BrdCksICZoYS0+c25zX2NtZF9kbWEsIEdGUF9LRVJORUwpOwogCQlpZiAoIWhhLT5zbnNfY21kKQogCQkJZ290byBmYWlsX2RtYV9wb29sOworCQlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDI2LAorCQkgICAgInNuc19jbWQuXG4iLCBoYS0+c25zX2NtZCk7CiAJfSBlbHNlIHsKIAkvKiBHZXQgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGVkIGZvciBNUyBJT0NCICovCiAJCWhhLT5tc19pb2NiID0gZG1hX3Bvb2xfYWxsb2MoaGEtPnNfZG1hX3Bvb2wsIEdGUF9LRVJORUwsCkBAIC0yNzI2LDEyICsyODkwLDE2IEBACiAJCQlzaXplb2Yoc3RydWN0IGN0X3Nuc19wa3QpLCAmaGEtPmN0X3Nuc19kbWEsIEdGUF9LRVJORUwpOwogCQlpZiAoIWhhLT5jdF9zbnMpCiAJCQlnb3RvIGZhaWxfZnJlZV9tc19pb2NiOworCQlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDI3LAorCQkgICAgIm1zX2lvY2I9JXAgY3Rfc25zPSVwLlxuIiwKKwkJICAgIGhhLT5tc19pb2NiLCBoYS0+Y3Rfc25zKTsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHJlcXVlc3QgcmluZyAqLwogCSpyZXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVxX3F1ZSksIEdGUF9LRVJORUwpOwogCWlmICghKnJlcSkgewotCQlERUJVRyhwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlcVxuIikpOworCQlxbF9sb2dfcGNpKHFsX2xvZ19mYXRhbCwgaGEtPnBkZXYsIDB4MDAyOCwKKwkJICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByZXEuXG4iKTsKIAkJZ290byBmYWlsX3JlcTsKIAl9CiAJKCpyZXEpLT5sZW5ndGggPSByZXFfbGVuOwpAQCAtMjczOSwxNCArMjkwNywxNSBAQAogCQkoKCpyZXEpLT5sZW5ndGggKyAxKSAqIHNpemVvZihyZXF1ZXN0X3QpLAogCQkmKCpyZXEpLT5kbWEsIEdGUF9LRVJORUwpOwogCWlmICghKCpyZXEpLT5yaW5nKSB7Ci0JCURFQlVHKHByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVxX3JpbmdcbiIpKTsKKwkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMjksCisJCSAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVxX3JpbmcuXG4iKTsKIAkJZ290byBmYWlsX3JlcV9yaW5nOwogCX0KIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc3BvbnNlIHJpbmcgKi8KIAkqcnNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJzcF9xdWUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISpyc3ApIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJzcFxuIik7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDJhLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJzcC5cbiIpOwogCQlnb3RvIGZhaWxfcnNwOwogCX0KIAkoKnJzcCktPmh3ID0gaGE7CkBAIC0yNzU1LDE5ICsyOTI0LDI0IEBACiAJCSgoKnJzcCktPmxlbmd0aCArIDEpICogc2l6ZW9mKHJlc3BvbnNlX3QpLAogCQkmKCpyc3ApLT5kbWEsIEdGUF9LRVJORUwpOwogCWlmICghKCpyc3ApLT5yaW5nKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByc3BfcmluZ1xuIik7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMDJiLAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJzcF9yaW5nLlxuIik7CiAJCWdvdG8gZmFpbF9yc3BfcmluZzsKIAl9CiAJKCpyZXEpLT5yc3AgPSAqcnNwOwogCSgqcnNwKS0+cmVxID0gKnJlcTsKKwlxbF9kYmdfcGNpKHFsX2RiZ19pbml0LCBoYS0+cGRldiwgMHgwMDJjLAorCSAgICAicmVxPSVwIHJlcS0+bGVuZ3RoPSVkIHJlcS0+cmluZz0lcCByc3A9JXAgIgorCSAgICAicnNwLT5sZW5ndGg9JWQgcnNwLT5yaW5nPSVwLlxuIiwKKwkgICAgKnJlcSwgKCpyZXEpLT5sZW5ndGgsICgqcmVxKS0+cmluZywgKnJzcCwgKCpyc3ApLT5sZW5ndGgsCisJICAgICgqcnNwKS0+cmluZyk7CiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBOVlJBTSBkYXRhIGZvciB2cG9ydHMgKi8KIAlpZiAoaGEtPm52cmFtX25waXZfc2l6ZSkgewogCQloYS0+bnBpdl9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsYV9ucGl2X2VudHJ5KSAqCi0JCQkJCWhhLT5udnJhbV9ucGl2X3NpemUsIEdGUF9LRVJORUwpOworCQkgICAgaGEtPm52cmFtX25waXZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaGEtPm5waXZfaW5mbykgewotCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBucGl2IGluZm9cbiIpOworCQkJcWxfbG9nX3BjaShxbF9sb2dfZmF0YWwsIGhhLT5wZGV2LCAweDAwMmQsCisJCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5waXZfaW5mby5cbiIpOwogCQkJZ290byBmYWlsX25waXZfaW5mbzsKIAkJfQogCX0gZWxzZQpAQCAtMjc3OSw2ICsyOTUzLDggQEAKIAkJICAgICZoYS0+ZXhfaW5pdF9jYl9kbWEpOwogCQlpZiAoIWhhLT5leF9pbml0X2NiKQogCQkJZ290byBmYWlsX2V4X2luaXRfY2I7CisJCXFsX2RiZ19wY2kocWxfZGJnX2luaXQsIGhhLT5wZGV2LCAweDAwMmUsCisJCSAgICAiZXhfaW5pdF9jYj0lcC5cbiIsIGhhLT5leF9pbml0X2NiKTsKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmaGEtPmdibF9kc2RfbGlzdCk7CkBAIC0yNzg5LDYgKzI5NjUsOCBAQAogCQkJJmhhLT5hc3luY19wZF9kbWEpOwogCQlpZiAoIWhhLT5hc3luY19wZCkKIAkJCWdvdG8gZmFpbF9hc3luY19wZDsKKwkJcWxfZGJnX3BjaShxbF9kYmdfaW5pdCwgaGEtPnBkZXYsIDB4MDAyZiwKKwkJICAgICJhc3luY19wZD0lcC5cbiIsIGhhLT5hc3luY19wZCk7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmhhLT52cF9saXN0KTsKQEAgLTI4NTQsNyArMzAzMiw4IEBACiAJaGEtPmluaXRfY2IgPSBOVUxMOwogCWhhLT5pbml0X2NiX2RtYSA9IDA7CiBmYWlsOgotCURFQlVHKHByaW50aygiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKSk7CisJcWxfbG9nKHFsX2xvZ19mYXRhbCwgTlVMTCwgMHgwMDMwLAorCSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zMDAzLDggKzMxODIsOCBAQAogCiAJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZihzY3NpX3FsYV9ob3N0X3QpKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJInFsYTJ4eHg6IENvdWxkbid0IGFsbG9jYXRlIGhvc3QgZnJvbSBzY3NpIGxheWVyIVxuIik7CisJCXFsX2xvZ19wY2kocWxfbG9nX2ZhdGFsLCBoYS0+cGRldiwgMHgwMTA3LAorCQkgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBob3N0IGZyb20gdGhlIHNjc2kgbGF5ZXIsIGFib3J0aW5nLlxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTMwMjMsNiArMzIwMiwxMSBAQAogCXNwaW5fbG9ja19pbml0KCZ2aGEtPndvcmtfbG9jayk7CiAKIAlzcHJpbnRmKHZoYS0+aG9zdF9zdHIsICIlc18lbGQiLCBRTEEyWFhYX0RSSVZFUl9OQU1FLCB2aGEtPmhvc3Rfbm8pOworCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwNDEsCisJICAgICJBbGxvY2F0ZWQgdGhlIGhvc3Q9JXAgaHc9JXAgdmhhPSVwIGRldl9uYW1lPSVzIiwKKwkgICAgdmhhLT5ob3N0LCB2aGEtPmh3LCB2aGEsCisJICAgIGRldl9uYW1lKCYoaGEtPnBkZXYtPmRldikpKTsKKwogCXJldHVybiB2aGE7CiAKIGZhaWw6CkBAIC0zMjY0LDE4ICszNDQ4LDE4IEBACiAJCQlpZiAoc3RhdHVzID09IFFMQV9TVUNDRVNTKSB7CiAJCQkJZmNwb3J0LT5vbGRfbG9vcF9pZCA9IGZjcG9ydC0+bG9vcF9pZDsKIAotCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBwb3J0IGxvZ2luIE9LOiBsb2dnZWQgIgotCQkJCSJpbiBJRCAweCV4XG4iLCB2aGEtPmhvc3Rfbm8sIGZjcG9ydC0+bG9vcF9pZCkpOworCQkJCXFsX2RiZyhxbF9kYmdfZGlzYywgdmhhLCAweDIwMDMsCisJCQkJICAgICJQb3J0IGxvZ2luIE9LOiBsb2dnZWQgaW4gSUQgMHgleC5cbiIsCisJCQkJICAgIGZjcG9ydC0+bG9vcF9pZCk7CiAKIAkJCQlxbGEyeDAwX3VwZGF0ZV9mY3BvcnQodmhhLCBmY3BvcnQpOwogCiAJCQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAxKSB7CiAJCQkJc2V0X2JpdChSRUxPR0lOX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCQkvKiByZXRyeSB0aGUgbG9naW4gYWdhaW4gKi8KLQkJCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogUmV0cnlpbmciCi0JCQkJIiAlZCBsb2dpbiBhZ2FpbiBsb29wX2lkIDB4JXhcbiIsCi0JCQkJdmhhLT5ob3N0X25vLCBmY3BvcnQtPmxvZ2luX3JldHJ5LAotCQkJCQkJZmNwb3J0LT5sb29wX2lkKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19kaXNjLCB2aGEsIDB4MjAwNywKKwkJCQkgICAgIlJldHJ5aW5nICVkIGxvZ2luIGFnYWluIGxvb3BfaWQgMHgleC5cbiIsCisJCQkJICAgIGZjcG9ydC0+bG9naW5fcmV0cnksIGZjcG9ydC0+bG9vcF9pZCk7CiAJCQl9IGVsc2UgewogCQkJCWZjcG9ydC0+bG9naW5fcmV0cnkgPSAwOwogCQkJfQpAQCAtMzMxNSwyNiArMzQ5OSwyNyBAQAogCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlERUJVRzMocHJpbnRrKCJxbGEyeDAwOiBEUEMgaGFuZGxlciBzbGVlcGluZ1xuIikpOworCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAwMCwKKwkJICAgICJEUEMgaGFuZGxlciBzbGVlcGluZy5cbiIpOwogCiAJCXNjaGVkdWxlKCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCQlERUJVRzMocHJpbnRrKCJxbGEyeDAwOiBEUEMgaGFuZGxlciB3YWtpbmcgdXBcbiIpKTsKKwkJcWxfZGJnKHFsX2RiZ19kcGMsIGJhc2VfdmhhLCAweDQwMDEsCisJCSAgICAiRFBDIGhhbmRsZXIgd2FraW5nIHVwLlxuIik7CisJCXFsX2RiZyhxbF9kYmdfZHBjLCBiYXNlX3ZoYSwgMHg0MDAyLAorCQkgICAgImRwY19mbGFncz0weCVseC5cbiIsIGJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCiAJCS8qIEluaXRpYWxpemF0aW9uIG5vdCB5ZXQgZmluaXNoZWQuIERvbid0IGRvIGFueXRoaW5nIHlldC4gKi8KIAkJaWYgKCFiYXNlX3ZoYS0+ZmxhZ3MuaW5pdF9kb25lKQogCQkJY29udGludWU7CiAKIAkJaWYgKGhhLT5mbGFncy5lZWhfYnVzeSkgewotCQkJREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgInFsYTJ4MDBfZG9fZHBjOiBkcGNfZmxhZ3M6ICVseFxuIiwKLQkJCSAgICBiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAwMywKKwkJCSAgICAiZWVoX2J1c3k9JWQuXG4iLCBoYS0+ZmxhZ3MuZWVoX2J1c3kpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IERQQyBoYW5kbGVyXG4iLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwotCiAJCWhhLT5kcGNfYWN0aXZlID0gMTsKIAogCQlpZiAoaGEtPmZsYWdzLm1ib3hfYnVzeSkgewpAQCAtMzM1MSw4ICszNTM2LDggQEAKIAkJCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCiAJCQkJCVFMQTgyWFhfREVWX0ZBSUxFRCk7CiAJCQkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JCQkJCSJIVyBTdGF0ZTogRkFJTEVEXG4iKTsKKwkJCQlxbF9sb2cocWxfbG9nX2luZm8sIGJhc2VfdmhhLCAweDQwMDQsCisJCQkJICAgICJIVyBTdGF0ZTogRkFJTEVELlxuIik7CiAJCQkJcWxhODJ4eF9kZXZpY2Vfc3RhdGVfaGFuZGxlcihiYXNlX3ZoYSk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0zMzYwLDEwICszNTQ1LDggQEAKIAkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELAogCQkJCSZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkgewogCi0JCQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTwotCQkJCQkic2NzaSglbGQpOiBkcGM6IHNjaGVkICIKLQkJCQkJInFsYTgyeHhfZmNvZV9jdHhfcmVzZXQgaGEgPSAlcFxuIiwKLQkJCQkJYmFzZV92aGEtPmhvc3Rfbm8sIGhhKSk7CisJCQkJcWxfZGJnKHFsX2RiZ19kcGMsIGJhc2VfdmhhLCAweDQwMDUsCisJCQkJICAgICJGQ29FIGNvbnRleHQgcmVzZXQgc2NoZWR1bGVkLlxuIik7CiAJCQkJaWYgKCEodGVzdF9hbmRfc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLAogCQkJCQkmYmFzZV92aGEtPmRwY19mbGFncykpKSB7CiAJCQkJCWlmIChxbGE4Mnh4X2Zjb2VfY3R4X3Jlc2V0KGJhc2VfdmhhKSkgewpAQCAtMzM3NywxOCArMzU2MCwxNiBAQAogCQkJCQkJJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCQkJCX0KIAotCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBkcGM6IgotCQkJCQkiIHFsYTgyeHhfZmNvZV9jdHhfcmVzZXQgZW5kXG4iLAotCQkJCQliYXNlX3ZoYS0+aG9zdF9ubykpOworCQkJCXFsX2RiZyhxbF9kYmdfZHBjLCBiYXNlX3ZoYSwgMHg0MDA2LAorCQkJCSAgICAiRkNvRSBjb250ZXh0IHJlc2V0IGVuZC5cbiIpOwogCQkJfQogCQl9CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJU1BfQUJPUlRfTkVFREVELAogCQkJCQkJJmJhc2VfdmhhLT5kcGNfZmxhZ3MpKSB7CiAKLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBkcGM6IHNjaGVkICIKLQkJCSAgICAicWxhMngwMF9hYm9ydF9pc3AgaGEgPSAlcFxuIiwKLQkJCSAgICBiYXNlX3ZoYS0+aG9zdF9ubywgaGEpKTsKKwkJCXFsX2RiZyhxbF9kYmdfZHBjLCBiYXNlX3ZoYSwgMHg0MDA3LAorCQkJICAgICJJU1AgYWJvcnQgc2NoZWR1bGVkLlxuIik7CiAJCQlpZiAoISh0ZXN0X2FuZF9zZXRfYml0KEFCT1JUX0lTUF9BQ1RJVkUsCiAJCQkgICAgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpKSkgewogCkBAIC0zNDAxLDggKzM1ODIsOCBAQAogCQkJCQkJJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCQkJfQogCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogZHBjOiBxbGEyeDAwX2Fib3J0X2lzcCBlbmRcbiIsCi0JCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2RiZyhxbF9kYmdfZHBjLCBiYXNlX3ZoYSwgMHg0MDA4LAorCQkJICAgICJJU1AgYWJvcnQgZW5kLlxuIik7CiAJCX0KIAogCQlpZiAodGVzdF9iaXQoRkNQT1JUX1VQREFURV9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkgewpAQCAtMzQxMSw5ICszNTkyLDggQEAKIAkJfQogCiAJCWlmICh0ZXN0X2JpdChJU1BfUVVJRVNDRV9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkgewotCQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAic2NzaSglbGQpOiBkcGM6IHNjaGVkICIKLQkJCSAgICAicWxhMngwMF9xdWllc2NlX25lZWRlZCBoYSA9ICVwXG4iLAotCQkJICAgIGJhc2VfdmhhLT5ob3N0X25vLCBoYSkpOworCQkJcWxfZGJnKHFsX2RiZ19kcGMsIGJhc2VfdmhhLCAweDQwMDksCisJCQkgICAgIlF1aWVzY2VuY2UgbW9kZSBzY2hlZHVsZWQuXG4iKTsKIAkJCXFsYTgyeHhfZGV2aWNlX3N0YXRlX2hhbmRsZXIoYmFzZV92aGEpOwogCQkJY2xlYXJfYml0KElTUF9RVUlFU0NFX05FRURFRCwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCQkJaWYgKCFoYS0+ZmxhZ3MucXVpZXNjZV9vd25lcikgewpAQCAtMzQyMywxNyArMzYwMywyMCBAQAogCQkJCXFsYTgyeHhfY2xlYXJfcXNudF9yZWFkeShiYXNlX3ZoYSk7CiAJCQkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKIAkJCX0KKwkJCXFsX2RiZyhxbF9kYmdfZHBjLCBiYXNlX3ZoYSwgMHg0MDBhLAorCQkJICAgICJRdWllc2NlbmNlIG1vZGUgZW5kLlxuIik7CiAJCX0KIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJFU0VUX01BUktFUl9ORUVERUQsCiAJCQkJCQkJJmJhc2VfdmhhLT5kcGNfZmxhZ3MpICYmCiAJCSAgICAoISh0ZXN0X2FuZF9zZXRfYml0KFJFU0VUX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpKSkpIHsKIAotCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IHFsYTJ4MDBfcmVzZXRfbWFya2VyKClcbiIsCi0JCQkgICAgYmFzZV92aGEtPmhvc3Rfbm8pKTsKLQorCQkJcWxfZGJnKHFsX2RiZ19kcGMsIGJhc2VfdmhhLCAweDQwMGIsCisJCQkgICAgIlJlc2V0IG1hcmtlciBzY2hlZHVsZWQuXG4iKTsKIAkJCXFsYTJ4MDBfcnN0X2FlbihiYXNlX3ZoYSk7CiAJCQljbGVhcl9iaXQoUkVTRVRfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAwYywKKwkJCSAgICAiUmVzZXQgbWFya2VyIGVuZC5cbiIpOwogCQl9CiAKIAkJLyogUmV0cnkgZWFjaCBkZXZpY2UgdXAgdG8gbG9naW4gcmV0cnkgY291bnQgKi8KQEAgLTM0NDIsMTkgKzM2MjUsMTggQEAKIAkJICAgICF0ZXN0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSAmJgogCQkgICAgYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAotCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IHFsYTJ4MDBfcG9ydF9sb2dpbigpXG4iLAotCQkJCQliYXNlX3ZoYS0+aG9zdF9ubykpOworCQkJcWxfZGJnKHFsX2RiZ19kcGMsIGJhc2VfdmhhLCAweDQwMGQsCisJCQkgICAgIlJlbG9naW4gc2NoZWR1bGVkLlxuIik7CiAJCQlxbGEyeDAwX3JlbG9naW4oYmFzZV92aGEpOwotCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogcWxhMngwMF9wb3J0X2xvZ2luIC0gZW5kXG4iLAotCQkJICAgIGJhc2VfdmhhLT5ob3N0X25vKSk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAwZSwKKwkJCSAgICAiUmVsb2dpbiBlbmQuXG4iKTsKIAkJfQogCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTE9PUF9SRVNZTkNfTkVFREVELAogCQkJCQkJCSZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkgewogCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogcWxhMngwMF9sb29wX3Jlc3luYygpXG4iLAotCQkJCWJhc2VfdmhhLT5ob3N0X25vKSk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAwZiwKKwkJCSAgICAiTG9vcCByZXN5bmMgc2NoZWR1bGVkLlxuIik7CiAKIAkJCWlmICghKHRlc3RfYW5kX3NldF9iaXQoTE9PUF9SRVNZTkNfQUNUSVZFLAogCQkJICAgICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKSkpIHsKQEAgLTM0NjUsOCArMzY0Nyw4IEBACiAJCQkJCQkmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJCQl9CiAKLQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBxbGEyeDAwX2xvb3BfcmVzeW5jIC0gZW5kXG4iLAotCQkJICAgIGJhc2VfdmhhLT5ob3N0X25vKSk7CisJCQlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAxMCwKKwkJCSAgICAiTG9vcCByZXN5bmMgZW5kLlxuIik7CiAJCX0KIAogCQlpZiAodGVzdF9iaXQoTlBJVl9DT05GSUdfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncykgJiYKQEAgLTM0ODksNyArMzY3MSw4IEBACiAJfSAvKiBFbmQgb2Ygd2hpbGUoMSkgKi8KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlERUJVRyhwcmludGsoInNjc2koJWxkKTogRFBDIGhhbmRsZXIgZXhpdGluZ1xuIiwgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX2RwYywgYmFzZV92aGEsIDB4NDAxMSwKKwkgICAgIkRQQyBoYW5kbGVyIGV4aXRpbmcuXG4iKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgbm9ib2R5IHRyaWVzIHRvIHdha2UgdXMgdXAgYWdhaW4uCkBAIC0zNTk2LDkgKzM3NzksMTEgQEAKIHFsYTJ4MDBfc3BfY29tcGwoc3RydWN0IHFsYV9od19kYXRhICpoYSwgc3JiX3QgKnNwKQogewogCWlmIChhdG9taWNfcmVhZCgmc3AtPnJlZl9jb3VudCkgPT0gMCkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkgICAgIlNQIHJlZmVyZW5jZS1jb3VudCB0byBaRVJPIC0tIHNwPSVwXG4iLCBzcCkpOwotCQlERUJVRzIoQlVHKCkpOworCQlxbF9kYmcocWxfZGJnX2lvLCBzcC0+ZmNwb3J0LT52aGEsIDB4MzAxNSwKKwkJICAgICJTUCByZWZlcmVuY2UtY291bnQgdG8gWkVSTyAtLSBzcD0lcCBjbWQ9JXAuXG4iLAorCQkgICAgc3AsIHNwLT5jbWQpOworCQlpZiAocWwyeGV4dGVuZGVkX2Vycm9yX2xvZ2dpbmcgJiBxbF9kYmdfaW8pCisJCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNwLT5yZWZfY291bnQpKQpAQCAtMzYyNiw2ICszODExLDkgQEAKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCiAJaWYgKGhhLT5mbGFncy5lZWhfYnVzeSkgeworCQlxbF9kYmcocWxfZGJnX3RpbWVyLCB2aGEsIDB4NjAwMCwKKwkJICAgICJFRUggPSAlZCwgcmVzdGFydGluZyB0aW1lci5cbiIsCisJCSAgICBoYS0+ZmxhZ3MuZWVoX2J1c3kpOwogCQlxbGEyeDAwX3Jlc3RhcnRfdGltZXIodmhhLCBXQVRDSF9JTlRFUlZBTCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNjUwLDkgKzM4MzgsOCBAQAogCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSA9PQogCQkgICAgdmhhLT5sb29wX2Rvd25fYWJvcnRfdGltZSkgewogCi0JCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogTG9vcCBEb3duIC0gYWJvcnRpbmcgdGhlICIKLQkJCSAgICAicXVldWVzIGJlZm9yZSB0aW1lIGV4cGlyZVxuIiwKLQkJCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgdmhhLCAweDYwMDgsCisJCQkgICAgIkxvb3AgZG93biAtIGFib3J0aW5nIHRoZSBxdWV1ZXMgYmVmb3JlIHRpbWUgZXhwaXJlcy5cbiIpOwogCiAJCQlpZiAoIUlTX1FMQTIxMDAoaGEpICYmIHZoYS0+bGlua19kb3duX3RpbWVvdXQpCiAJCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX3N0YXRlLCBMT09QX0RFQUQpOwpAQCAtMzY5NywxMCArMzg4NCw3IEBACiAJCS8qIGlmIHRoZSBsb29wIGhhcyBiZWVuIGRvd24gZm9yIDQgbWludXRlcywgcmVpbml0IGFkYXB0ZXIgKi8KIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSAhPSAwKSB7CiAJCQlpZiAoISh2aGEtPmRldmljZV9mbGFncyAmIERGTEdfTk9fQ0FCTEUpKSB7Ci0JCQkJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IExvb3AgZG93biAtICIKLQkJCQkgICAgImFib3J0aW5nIElTUC5cbiIsCi0JCQkJICAgIHZoYS0+aG9zdF9ubykpOwotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg2MDA5LAogCQkJCSAgICAiTG9vcCBkb3duIC0gYWJvcnRpbmcgSVNQLlxuIik7CiAKIAkJCQlpZiAoSVNfUUxBODJYWChoYSkpCkBAIC0zNzExLDkgKzM4OTUsOSBAQAogCQkJCQkJJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCX0KIAkJfQotCQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IExvb3AgRG93biAtIHNlY29uZHMgcmVtYWluaW5nICVkXG4iLAotCQkgICAgdmhhLT5ob3N0X25vLAotCQkgICAgYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSkpOworCQlxbF9kYmcocWxfZGJnX3RpbWVyLCB2aGEsIDB4NjAwYSwKKwkJICAgICJMb29wIGRvd24gLSBzZWNvbmRzIHJlbWFpbmluZyAlZC5cbiIsCisJCSAgICBhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpKTsKIAl9CiAKIAkvKiBDaGVjayBpZiBiZWFjb24gTEVEIG5lZWRzIHRvIGJlIGJsaW5rZWQgZm9yIHBoeXNpY2FsIGhvc3Qgb25seSAqLwpAQCAtMzczNiw4ICszOTIwLDI3IEBACiAJICAgIHRlc3RfYml0KElTUF9VTlJFQ09WRVJBQkxFLCAmdmhhLT5kcGNfZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChWUF9EUENfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KFJFTE9HSU5fTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSkKKwkgICAgdGVzdF9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpKSB7CisJCXFsX2RiZyhxbF9kYmdfdGltZXIsIHZoYSwgMHg2MDBiLAorCQkgICAgImlzcF9hYm9ydF9uZWVkZWQ9JWQgbG9vcF9yZXN5bmNfbmVlZGVkPSVkICIKKwkJICAgICJmY3BvcnRfdXBkYXRlX25lZWRlZD0lZCBzdGFydF9kcGM9JWQgIgorCQkgICAgInJlc2V0X21hcmtlcl9uZWVkZWQ9JWQiLAorCQkgICAgdGVzdF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSwKKwkJICAgIHRlc3RfYml0KExPT1BfUkVTWU5DX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSwKKwkJICAgIHRlc3RfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpLAorCQkgICAgc3RhcnRfZHBjLAorCQkgICAgdGVzdF9iaXQoUkVTRVRfTUFSS0VSX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSk7CisJCXFsX2RiZyhxbF9kYmdfdGltZXIsIHZoYSwgMHg2MDBjLAorCQkgICAgImJlYWNvbl9ibGlua19uZWVkZWQ9JWQgaXNwX3VucmVjb3ZlcmFibGU9JWQgIgorCQkgICAgImZjb2VfY3R4X3Jlc2V0X25lZWRlZD0lZCB2cF9kcGNfbmVlZGVkPSVkICIKKwkJICAgICJyZWxvZ2luX25lZWRlZD0lZC5cbiIsCisJCSAgICB0ZXN0X2JpdChCRUFDT05fQkxJTktfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpLAorCQkgICAgdGVzdF9iaXQoSVNQX1VOUkVDT1ZFUkFCTEUsICZ2aGEtPmRwY19mbGFncyksCisJCSAgICB0ZXN0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyksCisJCSAgICB0ZXN0X2JpdChWUF9EUENfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpLAorCQkgICAgdGVzdF9iaXQoUkVMT0dJTl9ORUVERUQsICZ2aGEtPmRwY19mbGFncykpOwogCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJfQogCiAJcWxhMngwMF9yZXN0YXJ0X3RpbWVyKHZoYSwgV0FUQ0hfSU5URVJWQUwpOwogfQpAQCAtMzgwNiw4ICs0MDA5LDggQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmYmxvYi0+ZncsIGJsb2ItPm5hbWUsICZoYS0+cGRldi0+ZGV2KSkgewotCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlIGltYWdlICIKLQkJICAgICIoJXMpLlxuIiwgdmhhLT5ob3N0X25vLCBibG9iLT5uYW1lKSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNjMsCisJCSAgICAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgaW1hZ2UgKCVzKS5cbiIsIGJsb2ItPm5hbWUpOwogCQlibG9iLT5mdyA9IE5VTEw7CiAJCWJsb2IgPSBOVUxMOwogCQlnb3RvIG91dDsKQEAgLTM4MzYsOCArNDAzOSw4IEBACiAJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiZXJyb3JfZGV0ZWN0ZWQ6c3RhdGUgJXhcbiIsCi0JICAgIHN0YXRlKSk7CisJcWxfZGJnKHFsX2RiZ19hZXIsIHZoYSwgMHg5MDAwLAorCSAgICAiUENJIGVycm9yIGRldGVjdGVkLCBzdGF0ZSAleC5cbiIsIHN0YXRlKTsKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIHBjaV9jaGFubmVsX2lvX25vcm1hbDoKQEAgLTM4NTAsOSArNDA1Myw5IEBACiAJCQloYS0+ZmxhZ3MuaXNwODJ4eF9md19odW5nID0gMTsKIAkJCWlmIChoYS0+ZmxhZ3MubWJveF9idXN5KSB7CiAJCQkJaGEtPmZsYWdzLm1ib3hfaW50ID0gMTsKLQkJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCi0JCQkJCSJEdWUgdG8gcGNpIGNoYW5uZWwgaW8gZnJvemVuLCBkb2luZyBwcmVtYXR1cmUgIgotCQkJCQkiY29tcGxldGlvbiBvZiBtYnggY29tbWFuZFxuIikpOworCQkJCXFsX2RiZyhxbF9kYmdfYWVyLCB2aGEsIDB4OTAwMSwKKwkJCQkgICAgIkR1ZSB0byBwY2kgY2hhbm5lbCBpbyBmcm96ZW4sIGRvaW5nIHByZW1hdHVyZSAiCisJCQkJICAgICJjb21wbGV0aW9uIG9mIG1ieCBjb21tYW5kLlxuIik7CiAJCQkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKIAkJCX0KIAkJfQpAQCAtMzkwMCw4ICs0MTAzLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJpc2NfcGF1c2VkKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlJJU0MgcGF1c2VkIC0tIG1taW9fZW5hYmxlZCwgIgotCQkgICAgIkR1bXBpbmcgZmlybXdhcmUhXG4iKTsKKwkJcWxfbG9nKHFsX2xvZ19pbmZvLCBiYXNlX3ZoYSwgMHg5MDAzLAorCQkgICAgIlJJU0MgcGF1c2VkIC0tIG1taW9fZW5hYmxlZCwgRHVtcGluZyBmaXJtd2FyZS5cbiIpOwogCQloYS0+aXNwX29wcy0+ZndfZHVtcChiYXNlX3ZoYSwgMCk7CiAKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CkBAIC0zOTE3LDggKzQxMjAsOCBAQAogCWludCBmbjsKIAlzdHJ1Y3QgcGNpX2RldiAqb3RoZXJfcGRldiA9IE5VTEw7CiAKLQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkgICAgInNjc2koJWxkKTogSW4gcWxhODJ4eF9lcnJvcl9yZWNvdmVyeVxuIiwgYmFzZV92aGEtPmhvc3Rfbm8pKTsKKwlxbF9kYmcocWxfZGJnX2FlciwgYmFzZV92aGEsIDB4OTAwNiwKKwkgICAgIkVudGVyZWQgJXMuXG4iLCBfX2Z1bmNfXyk7CiAKIAlzZXRfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKIApAQCAtMzkzMiw4ICs0MTM1LDggQEAKIAlmbiA9IFBDSV9GVU5DKGhhLT5wZGV2LT5kZXZmbik7CiAJd2hpbGUgKGZuID4gMCkgewogCQlmbi0tOwotCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJGaW5kaW5nIHBjaSBkZXZpY2UgYXQgZnVuY3Rpb24gPSAweCV4XG4iLCBmbikpOworCQlxbF9kYmcocWxfZGJnX2FlciwgYmFzZV92aGEsIDB4OTAwNywKKwkJICAgICJGaW5kaW5nIHBjaSBkZXZpY2UgYXQgZnVuY3Rpb24gPSAweCV4LlxuIiwgZm4pOwogCQlvdGhlcl9wZGV2ID0KIAkJICAgIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChwY2lfZG9tYWluX25yKGhhLT5wZGV2LT5idXMpLAogCQkgICAgaGEtPnBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfREVWRk4oUENJX1NMT1QoaGEtPnBkZXYtPmRldmZuKSwKQEAgLTM5NDIsOSArNDE0NSw5IEBACiAJCWlmICghb3RoZXJfcGRldikKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXRvbWljX3JlYWQoJm90aGVyX3BkZXYtPmVuYWJsZV9jbnQpKSB7Ci0JCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSAgICAiRm91bmQgUENJIGZ1bmMgYXZhaWxhYmxlIGFuZCBlbmFibGVkIGF0IDB4JXhcbiIsCi0JCQkgICAgZm4pKTsKKwkJCXFsX2RiZyhxbF9kYmdfYWVyLCBiYXNlX3ZoYSwgMHg5MDA4LAorCQkJICAgICJGb3VuZCBQQ0kgZnVuYyBhdmFpbGFibGUgYW5kIGVuYWJsZSBhdCAweCV4LlxuIiwKKwkJCSAgICBmbik7CiAJCQlwY2lfZGV2X3B1dChvdGhlcl9wZGV2KTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zOTUzLDggKzQxNTYsOSBAQAogCiAJaWYgKCFmbikgewogCQkvKiBSZXNldCBvd25lciAqLwotCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJUaGlzIGRldmZuIGlzIHJlc2V0IG93bmVyID0gMHgleFxuIiwgaGEtPnBkZXYtPmRldmZuKSk7CisJCXFsX2RiZyhxbF9kYmdfYWVyLCBiYXNlX3ZoYSwgMHg5MDA5LAorCQkgICAgIlRoaXMgZGV2Zm4gaXMgcmVzZXQgb3duZXIgPSAweCV4LlxuIiwKKwkJICAgIGhhLT5wZGV2LT5kZXZmbik7CiAJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCiAJCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSwKQEAgLTM5NjQsOCArNDE2OCw4IEBACiAJCSAgICBRTEE4MlhYX0lEQ19WRVJTSU9OKTsKIAogCQlkcnZfYWN0aXZlID0gcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9DUkJfRFJWX0FDVElWRSk7Ci0JCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAotCQkgICAgImRydl9hY3RpdmUgPSAweCV4XG4iLCBkcnZfYWN0aXZlKSk7CisJCXFsX2RiZyhxbF9kYmdfYWVyLCBiYXNlX3ZoYSwgMHg5MDBhLAorCQkgICAgImRydl9hY3RpdmUgPSAweCV4LlxuIiwgZHJ2X2FjdGl2ZSk7CiAKIAkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKIAkJLyogUmVzZXQgaWYgZGV2aWNlIGlzIG5vdCBhbHJlYWR5IHJlc2V0CkBAIC0zOTc4LDEyICs0MTgyLDE0IEBACiAJCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCiAJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJIVyBTdGF0ZTogRkFJTEVEXG4iKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgYmFzZV92aGEsIDB4OTAwYiwKKwkJCSAgICAiSFcgU3RhdGU6IEZBSUxFRC5cbiIpOwogCQkJcWxhODJ4eF9jbGVhcl9kcnZfYWN0aXZlKGhhKTsKIAkJCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSwKIAkJCSAgICBRTEE4MlhYX0RFVl9GQUlMRUQpOwogCQl9IGVsc2UgewotCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSFcgU3RhdGU6IFJFQURZXG4iKTsKKwkJCXFsX2xvZyhxbF9sb2dfaW5mbywgYmFzZV92aGEsIDB4OTAwYywKKwkJCSAgICAiSFcgU3RhdGU6IFJFQURZLlxuIik7CiAJCQlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUsCiAJCQkgICAgUUxBODJYWF9ERVZfUkVBRFkpOwogCQkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKQEAgLTM5OTYsOCArNDIwMiw5IEBACiAJCX0KIAkJcWxhODJ4eF9pZGNfdW5sb2NrKGhhKTsKIAl9IGVsc2UgewotCQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICJUaGlzIGRldmZuIGlzIG5vdCByZXNldCBvd25lciA9IDB4JXhcbiIsIGhhLT5wZGV2LT5kZXZmbikpOworCQlxbF9kYmcocWxfZGJnX2FlciwgYmFzZV92aGEsIDB4OTAwZCwKKwkJICAgICJUaGlzIGRldmZuIGlzIG5vdCByZXNldCBvd25lciA9IDB4JXguXG4iLAorCQkgICAgaGEtPnBkZXYtPmRldmZuKTsKIAkJaWYgKChxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX0NSQl9ERVZfU1RBVEUpID09CiAJCSAgICBRTEE4MlhYX0RFVl9SRUFEWSkpIHsKIAkJCWhhLT5mbGFncy5pc3A4Mnh4X2Z3X2h1bmcgPSAwOwpAQCAtNDAyMSw3ICs0MjI4LDggQEAKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwogCWludCByYywgcmV0cmllcyA9IDEwOwogCi0JREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsICJzbG90X3Jlc2V0XG4iKSk7CisJcWxfZGJnKHFsX2RiZ19hZXIsIGJhc2VfdmhhLCAweDkwMDQsCisJICAgICJTbG90IFJlc2V0LlxuIik7CiAKIAkvKiBXb3JrYXJvdW5kOiBxbGEyeHh4IGRyaXZlciB3aGljaCBhY2Nlc3MgaGFyZHdhcmUgZWFybGllcgogCSAqIG5lZWRzIGVycm9yIHN0YXRlIHRvIGJlIHBjaV9jaGFubmVsX2lvX29ubGluZS4KQEAgLTQwNDIsNyArNDI1MCw3IEBACiAJCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAKIAlpZiAocmMpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIGJhc2VfdmhhLCAweDkwMDUsCiAJCSAgICAiQ2FuJ3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJZ290byBleGl0X3Nsb3RfcmVzZXQ7CiAJfQpAQCAtNDA3Miw4ICs0MjgwLDggQEAKIAogCiBleGl0X3Nsb3RfcmVzZXQ6Ci0JREVCVUcxNyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JICAgICJzbG90X3Jlc2V0LXJldHVybjpyZXQ9JXhcbiIsIHJldCkpOworCXFsX2RiZyhxbF9kYmdfYWVyLCBiYXNlX3ZoYSwgMHg5MDBlLAorCSAgICAic2xvdF9yZXNldCByZXR1cm4gJXguXG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQwODUsMTMgKzQyOTMsMTMgQEAKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gYmFzZV92aGEtPmh3OwogCWludCByZXQ7CiAKLQlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgInBjaV9yZXN1bWVcbiIpKTsKKwlxbF9kYmcocWxfZGJnX2FlciwgYmFzZV92aGEsIDB4OTAwZiwKKwkgICAgInBjaV9yZXN1bWUuXG4iKTsKIAogCXJldCA9IHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZShiYXNlX3ZoYSk7CiAJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKLQkJICAgICJ0aGUgZGV2aWNlIGZhaWxlZCB0byByZXN1bWUgSS9PICIKLQkJICAgICJmcm9tIHNsb3QvbGlua19yZXNldCIpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCBiYXNlX3ZoYSwgMHg5MDAyLAorCQkgICAgIlRoZSBkZXZpY2UgZmFpbGVkIHRvIHJlc3VtZSBJL08gZnJvbSBzbG90L2xpbmtfcmVzZXQuXG4iKTsKIAl9CiAKIAlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKQEAgLTQxNTUsOCArNDM2Myw4IEBACiAJc3JiX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJxbGEyeHh4X3NyYnMiLCBzaXplb2Yoc3JiX3QpLCAwLAogCSAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwogCWlmIChzcmJfY2FjaGVwID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAicWxhMnh4eDogVW5hYmxlIHRvIGFsbG9jYXRlIFNSQiBjYWNoZS4uLkZhaWxpbmcgbG9hZCFcbiIpOworCQlxbF9sb2cocWxfbG9nX2ZhdGFsLCBOVUxMLCAweDAwMDEsCisJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIFNSQiBjYWNoZS4uLkZhaWxpbmcgbG9hZCEuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC00MTY5LDEzICs0Mzc3LDE1IEBACiAJICAgIGZjX2F0dGFjaF90cmFuc3BvcnQoJnFsYTJ4eHhfdHJhbnNwb3J0X2Z1bmN0aW9ucyk7CiAJaWYgKCFxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZSkgewogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koc3JiX2NhY2hlcCk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIE5VTEwsIDB4MDAwMiwKKwkJICAgICJmY19hdHRhY2hfdHJhbnNwb3J0IGZhaWxlZC4uLkZhaWxpbmcgbG9hZCEuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJYXBpZGV2X21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIFFMQTJYWFhfQVBJREVWLCAmYXBpZGV2X2ZvcHMpOwogCWlmIChhcGlkZXZfbWFqb3IgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInFsYTJ4eHg6IFVuYWJsZSB0byByZWdpc3RlciBjaGFyIGRldmljZSAiCi0JCSAgICAiJXNcbiIsIFFMQTJYWFhfQVBJREVWKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgTlVMTCwgMHgwMDAzLAorCQkgICAgIlVuYWJsZSB0byByZWdpc3RlciBjaGFyIGRldmljZSAlcy5cbiIsIFFMQTJYWFhfQVBJREVWKTsKIAl9CiAKIAlxbGEyeHh4X3RyYW5zcG9ydF92cG9ydF90ZW1wbGF0ZSA9CkBAIC00MTgzLDE2ICs0MzkzLDIxIEBACiAJaWYgKCFxbGEyeHh4X3RyYW5zcG9ydF92cG9ydF90ZW1wbGF0ZSkgewogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koc3JiX2NhY2hlcCk7CiAJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KHFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgTlVMTCwgMHgwMDA0LAorCQkgICAgImZjX2F0dGFjaF90cmFuc3BvcnQgdnBvcnQgZmFpbGVkLi4uRmFpbGluZyBsb2FkIS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyOiAlc1xuIiwKKwlxbF9sb2cocWxfbG9nX2luZm8sIE5VTEwsIDB4MDAwNSwKKwkgICAgIlFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXI6ICVzLlxuIiwKIAkgICAgcWxhMngwMF92ZXJzaW9uX3N0cik7CiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcWxhMnh4eF9wY2lfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCWttZW1fY2FjaGVfZGVzdHJveShzcmJfY2FjaGVwKTsKIAkJZmNfcmVsZWFzZV90cmFuc3BvcnQocWxhMnh4eF90cmFuc3BvcnRfdGVtcGxhdGUpOwogCQlmY19yZWxlYXNlX3RyYW5zcG9ydChxbGEyeHh4X3RyYW5zcG9ydF92cG9ydF90ZW1wbGF0ZSk7CisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIE5VTEwsIDB4MDAwNiwKKwkJICAgICJwY2lfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZC4uLnJldD0lZCBGYWlsaW5nIGxvYWQhLlxuIiwKKwkJICAgIHJldCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKaW5kZXggNjkzNjQ3Ni4uZWZmMTM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwpAQCAtMTg5LDYgKzE4OSw3IEBACiAJdWludDE2X3Qgd29yZDsKIAl1aW50MzJfdCBudl9jbWQsIHdhaXRfY250OwogCXN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggX19pb21lbSAqcmVnID0gJmhhLT5pb2Jhc2UtPmlzcDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAlxbGEyeDAwX252X3dyaXRlKGhhLCBOVlJfREFUQV9PVVQpOwogCXFsYTJ4MDBfbnZfd3JpdGUoaGEsIDApOwpAQCAtMjIwLDggKzIyMSw4IEBACiAJd2FpdF9jbnQgPSBOVlJfV0FJVF9DTlQ7CiAJZG8gewogCQlpZiAoIS0td2FpdF9jbnQpIHsKLQkJCURFQlVHOV8xMChxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIk5WUkFNIGRpZG4ndCBnbyByZWFkeS4uLlxuIikpOworCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA4ZCwKKwkJCSAgICAiTlZSQU0gZGlkbid0IGdvIHJlYWR5Li4uXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCU5WUkFNX0RFTEFZKCk7CkBAIC0zMDgsNiArMzA5LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAJdWludDMyX3Qgd29yZCwgd2FpdF9jbnQ7CiAJdWludDE2X3Qgd3Byb3QsIHdwcm90X29sZDsKKwlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHBjaV9nZXRfZHJ2ZGF0YShoYS0+cGRldik7CiAKIAkvKiBDbGVhciBOVlJBTSB3cml0ZSBwcm90ZWN0aW9uLiAqLwogCXJldCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CkBAIC0zNTAsOCArMzUyLDggQEAKIAkJd2FpdF9jbnQgPSBOVlJfV0FJVF9DTlQ7CiAJCWRvIHsKIAkJCWlmICghLS13YWl0X2NudCkgewotCQkJCURFQlVHOV8xMChxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkJICAgICJOVlJBTSBkaWRuJ3QgZ28gcmVhZHkuLi5cbiIpKTsKKwkJCQlxbF9kYmcocWxfZGJnX3VzZXIsIHZoYSwgMHg3MDhlLAorCQkJCSAgICAiTlZSQU0gZGlkbid0IGdvIHJlYWR5Li4uXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCU5WUkFNX0RFTEFZKCk7CkBAIC0zNzEsNiArMzczLDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX3JlZ18yeHh4IF9faW9tZW0gKnJlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CiAJdWludDMyX3Qgd29yZCwgd2FpdF9jbnQ7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOwogCiAJaWYgKHN0YXQgIT0gUUxBX1NVQ0NFU1MpCiAJCXJldHVybjsKQEAgLTQwOSw4ICs0MTIsOCBAQAogCXdhaXRfY250ID0gTlZSX1dBSVRfQ05UOwogCWRvIHsKIAkJaWYgKCEtLXdhaXRfY250KSB7Ci0JCQlERUJVRzlfMTAocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJICAgICJOVlJBTSBkaWRuJ3QgZ28gcmVhZHkuLi5cbiIpKTsKKwkJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwOGYsCisJCQkgICAgIk5WUkFNIGRpZG4ndCBnbyByZWFkeS4uLlxuIik7CiAJCQlicmVhazsKIAkJfQogCQlOVlJBTV9ERUxBWSgpOwpAQCAtNjA3LDkgKzYxMCwxMCBAQAogCWZvciAoY2hrc3VtID0gMDsgY250OyBjbnQtLSkKIAkJY2hrc3VtICs9IGxlMTZfdG9fY3B1KCp3cHRyKyspOwogCWlmIChjaGtzdW0pIHsKLQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDQ1LAogCQkgICAgIkluY29uc2lzdGVudCBGTFRMIGRldGVjdGVkOiBjaGVja3N1bT0weCV4LlxuIiwgY2hrc3VtKTsKLQkJcWxhMngwMF9kdW1wX2J1ZmZlcihidWYsIHNpemVvZihzdHJ1Y3QgcWxhX2ZsdF9sb2NhdGlvbikpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfaW5pdCArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgwMTBlLAorCQkgICAgYnVmLCBzaXplb2Yoc3RydWN0IHFsYV9mbHRfbG9jYXRpb24pKTsKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfQogCkBAIC02MTgsNyArNjIyLDkgQEAKIAkqc3RhcnQgPSAobGUxNl90b19jcHUoZmx0bC0+c3RhcnRfaGkpIDw8IDE2IHwKIAkgICAgbGUxNl90b19jcHUoZmx0bC0+c3RhcnRfbG8pKSA+PiAyOwogZW5kOgotCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLCAiRkxUTFslc10gPSAweCV4LlxuIiwgbG9jLCAqc3RhcnQpKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDQ2LAorCSAgICAiRkxUTFslc10gPSAweCV4LlxuIiwKKwkgICAgbG9jLCAqc3RhcnQpOwogCXJldHVybiBRTEFfU1VDQ0VTUzsKIH0KIApAQCAtNjg1LDEwICs2OTEsMTAgQEAKIAlpZiAoKndwdHIgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpKQogCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CiAJaWYgKGZsdC0+dmVyc2lvbiAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJVbnN1cHBvcnRlZCBGTFQgZGV0ZWN0ZWQ6ICIKLQkJICAgICJ2ZXJzaW9uPTB4JXggbGVuZ3RoPTB4JXggY2hlY2tzdW09MHgleC5cbiIsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNDcsCisJCSAgICAiVW5zdXBwb3J0ZWQgRkxUIGRldGVjdGVkOiB2ZXJzaW9uPTB4JXggbGVuZ3RoPTB4JXggY2hlY2tzdW09MHgleC5cbiIsCiAJCSAgICBsZTE2X3RvX2NwdShmbHQtPnZlcnNpb24pLCBsZTE2X3RvX2NwdShmbHQtPmxlbmd0aCksCi0JCSAgICBsZTE2X3RvX2NwdShmbHQtPmNoZWNrc3VtKSkpOworCQkgICAgbGUxNl90b19jcHUoZmx0LT5jaGVja3N1bSkpOwogCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CiAJfQogCkBAIC02OTYsMTAgKzcwMiwxMCBAQAogCWZvciAoY2hrc3VtID0gMDsgY250OyBjbnQtLSkKIAkJY2hrc3VtICs9IGxlMTZfdG9fY3B1KCp3cHRyKyspOwogCWlmIChjaGtzdW0pIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkluY29uc2lzdGVudCBGTFQgZGV0ZWN0ZWQ6ICIKLQkJICAgICJ2ZXJzaW9uPTB4JXggbGVuZ3RoPTB4JXggY2hlY2tzdW09MHgleC5cbiIsCisJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDQ4LAorCQkgICAgIkluY29uc2lzdGVudCBGTFQgZGV0ZWN0ZWQ6IHZlcnNpb249MHgleCBsZW5ndGg9MHgleCBjaGVja3N1bT0weCV4LlxuIiwKIAkJICAgIGxlMTZfdG9fY3B1KGZsdC0+dmVyc2lvbiksIGxlMTZfdG9fY3B1KGZsdC0+bGVuZ3RoKSwKLQkJICAgIGNoa3N1bSkpOworCQkgICAgbGUxNl90b19jcHUoZmx0LT5jaGVja3N1bSkpOwogCQlnb3RvIG5vX2ZsYXNoX2RhdGE7CiAJfQogCkBAIC03MDgsMTAgKzcxNCwxMSBAQAogCWZvciAoIDsgY250OyBjbnQtLSwgcmVnaW9uKyspIHsKIAkJLyogU3RvcmUgYWRkcmVzc2VzIGFzIERXT1JEIG9mZnNldHMuICovCiAJCXN0YXJ0ID0gbGUzMl90b19jcHUocmVnaW9uLT5zdGFydCkgPj4gMjsKLQotCQlERUJVRzMocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgIkZMVFslMDJ4XTogc3RhcnQ9MHgleCAiCi0JCSAgICAiZW5kPTB4JXggc2l6ZT0weCV4LlxuIiwgbGUzMl90b19jcHUocmVnaW9uLT5jb2RlKSwgc3RhcnQsCi0JCSAgICBsZTMyX3RvX2NwdShyZWdpb24tPmVuZCkgPj4gMiwgbGUzMl90b19jcHUocmVnaW9uLT5zaXplKSkpOworCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDQ5LAorCQkgICAgIkZMVFslMDJ4XTogc3RhcnQ9MHgleCAiCisJCSAgICAiZW5kPTB4JXggc2l6ZT0weCV4LlxuIiwgbGUzMl90b19jcHUocmVnaW9uLT5jb2RlKSwKKwkJICAgIHN0YXJ0LCBsZTMyX3RvX2NwdShyZWdpb24tPmVuZCkgPj4gMiwKKwkJICAgIGxlMzJfdG9fY3B1KHJlZ2lvbi0+c2l6ZSkpOwogCiAJCXN3aXRjaCAobGUzMl90b19jcHUocmVnaW9uLT5jb2RlKSAmIDB4ZmYpIHsKIAkJY2FzZSBGTFRfUkVHX0ZXOgpAQCAtNzk2LDEyICs4MDMsMTYgQEAKIAloYS0+Zmx0X3JlZ2lvbl9ucGl2X2NvbmYgPSBoYS0+ZmxhZ3MucG9ydDAgPwogCSAgICBkZWZfbnBpdl9jb25mMFtkZWZdIDogZGVmX25waXZfY29uZjFbZGVmXTsKIGRvbmU6Ci0JREVCVUcyKHFsYV9wcmludGsoS0VSTl9ERUJVRywgaGEsICJGTFRbJXNdOiBib290PTB4JXggZnc9MHgleCAiCi0JICAgICJ2cGRfbnZyYW09MHgleCB2cGQ9MHgleCBudnJhbT0weCV4IGZkdD0weCV4IGZsdD0weCV4ICIKLQkgICAgIm5waXY9MHgleC4gZmNwX3ByaW9fY2ZnPTB4JXhcbiIsIGxvYywgaGEtPmZsdF9yZWdpb25fYm9vdCwKLQkgICAgaGEtPmZsdF9yZWdpb25fZncsIGhhLT5mbHRfcmVnaW9uX3ZwZF9udnJhbSwgaGEtPmZsdF9yZWdpb25fdnBkLAotCSAgICBoYS0+Zmx0X3JlZ2lvbl9udnJhbSwgaGEtPmZsdF9yZWdpb25fZmR0LCBoYS0+Zmx0X3JlZ2lvbl9mbHQsCi0JICAgIGhhLT5mbHRfcmVnaW9uX25waXZfY29uZiwgaGEtPmZsdF9yZWdpb25fZmNwX3ByaW8pKTsKKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDRhLAorCSAgICAiRkxUWyVzXTogYm9vdD0weCV4IGZ3PTB4JXggdnBkX252cmFtPTB4JXggdnBkPTB4JXguXG4iLAorCSAgICBsb2MsIGhhLT5mbHRfcmVnaW9uX2Jvb3QsCisJICAgIGhhLT5mbHRfcmVnaW9uX2Z3LCBoYS0+Zmx0X3JlZ2lvbl92cGRfbnZyYW0sCisJICAgIGhhLT5mbHRfcmVnaW9uX3ZwZCk7CisJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA0YiwKKwkgICAgIm52cmFtPTB4JXggZmR0PTB4JXggZmx0PTB4JXggbnBpdj0weCV4IGZjcF9wcmlmX2NmZz0weCV4LlxuIiwKKwkgICAgaGEtPmZsdF9yZWdpb25fbnZyYW0sCisJICAgIGhhLT5mbHRfcmVnaW9uX2ZkdCwgaGEtPmZsdF9yZWdpb25fZmx0LAorCSAgICBoYS0+Zmx0X3JlZ2lvbl9ucGl2X2NvbmYsIGhhLT5mbHRfcmVnaW9uX2ZjcF9wcmlvKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTgzMywxMCArODQ0LDEyIEBACiAJICAgIGNudCsrKQogCQljaGtzdW0gKz0gbGUxNl90b19jcHUoKndwdHIrKyk7CiAJaWYgKGNoa3N1bSkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiSW5jb25zaXN0ZW50IEZEVCBkZXRlY3RlZDogIgotCQkgICAgImNoZWNrc3VtPTB4JXggaWQ9JWMgdmVyc2lvbj0weCV4LlxuIiwgY2hrc3VtLCBmZHQtPnNpZ1swXSwKLQkJICAgIGxlMTZfdG9fY3B1KGZkdC0+dmVyc2lvbikpKTsKLQkJREVCVUc5KHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilmZHQsIHNpemVvZigqZmR0KSkpOworCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDRjLAorCQkgICAgIkluY29uc2lzdGVudCBGRFQgZGV0ZWN0ZWQ6IgorCQkgICAgIiBjaGVja3N1bT0weCV4IGlkPSVjIHZlcnNpb24weCV4LlxuIiwgY2hrc3VtLAorCQkgICAgZmR0LT5zaWdbMF0sIGxlMTZfdG9fY3B1KGZkdC0+dmVyc2lvbikpOworCQlxbF9kdW1wX2J1ZmZlcihxbF9kYmdfaW5pdCArIHFsX2RiZ19idWZmZXIsIHZoYSwgMHgwMTEzLAorCQkgICAgKHVpbnQ4X3QgKilmZHQsIHNpemVvZigqZmR0KSk7CiAJCWdvdG8gbm9fZmxhc2hfZGF0YTsKIAl9CiAKQEAgLTg5MCwxMSArOTAzLDEyIEBACiAJCWJyZWFrOwogCX0KIGRvbmU6Ci0JREVCVUcyKHFsYV9wcmludGsoS0VSTl9ERUJVRywgaGEsICJGRFRbJXNdOiAoMHgleC8weCV4KSBlcmFzZT0weCV4ICIKLQkgICAgInBybz0leCB1cHJvPSV4IHdydGQ9MHgleCBibGs9MHgleC5cbiIsIGxvYywgbWlkLCBmaWQsCisJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA0ZCwKKwkgICAgIkZEVFsleF06ICgweCV4LzB4JXgpIGVyYXNlPTB4JXggIgorCSAgICAicHI9JXggdXBybz0leCB3cnRkPTB4JXggYmxrPTB4JXguXG4iLCBsb2MsIG1pZCwgZmlkLAogCSAgICBoYS0+ZmR0X2VyYXNlX2NtZCwgaGEtPmZkdF9wcm90ZWN0X3NlY19jbWQsCi0JICAgIGhhLT5mZHRfdW5wcm90ZWN0X3NlY19jbWQsIGhhLT5mZHRfd3J0X2Rpc2FibGUsCi0JICAgIGhhLT5mZHRfYmxvY2tfc2l6ZSkpOworCSAgICBoYS0+ZmR0X3dydF9kaXNhYmxlLCBoYS0+ZmR0X2Jsb2NrX3NpemUpOworCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05MTksNiArOTMzLDEwIEBACiAJCWhhLT5ueF9kZXZfaW5pdF90aW1lb3V0ID0gbGUzMl90b19jcHUoKndwdHIrKyk7CiAJCWhhLT5ueF9yZXNldF90aW1lb3V0ID0gbGUzMl90b19jcHUoKndwdHIpOwogCX0KKwlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDRlLAorCSAgICAibnhfZGV2X2luaXRfdGltZW91dD0lZCAiCisJICAgICJueF9yZXNldF90aW1lb3V0PSVkLlxuIiwgaGEtPm54X2Rldl9pbml0X3RpbWVvdXQsCisJICAgIGhhLT5ueF9yZXNldF90aW1lb3V0KTsKIAlyZXR1cm47CiB9CiAKQEAgLTk2MywxNyArOTgxLDE4IEBACiAJaWYgKGhkci52ZXJzaW9uID09IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhmZmZmKSkKIAkJcmV0dXJuOwogCWlmIChoZHIudmVyc2lvbiAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJVbnN1cHBvcnRlZCBOUElWLUNvbmZpZyAiCisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwOTAsCisJCSAgICAiVW5zdXBwb3J0ZWQgTlBJVi1Db25maWcgIgogCQkgICAgImRldGVjdGVkOiB2ZXJzaW9uPTB4JXggZW50cmllcz0weCV4IGNoZWNrc3VtPTB4JXguXG4iLAogCQkgICAgbGUxNl90b19jcHUoaGRyLnZlcnNpb24pLCBsZTE2X3RvX2NwdShoZHIuZW50cmllcyksCi0JCSAgICBsZTE2X3RvX2NwdShoZHIuY2hlY2tzdW0pKSk7CisJCSAgICBsZTE2X3RvX2NwdShoZHIuY2hlY2tzdW0pKTsKIAkJcmV0dXJuOwogCX0KIAogCWRhdGEgPSBrbWFsbG9jKE5QSVZfQ09ORklHX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewotCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiTlBJVi1Db25maWc6IFVuYWJsZSB0byAiCi0JCSAgICAiYWxsb2NhdGUgbWVtb3J5LlxuIikpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDkxLAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRhdGEuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTg1LDEwICsxMDA0LDExIEBACiAJZm9yICh3cHRyID0gZGF0YSwgY2hrc3VtID0gMDsgY250OyBjbnQtLSkKIAkJY2hrc3VtICs9IGxlMTZfdG9fY3B1KCp3cHRyKyspOwogCWlmIChjaGtzdW0pIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIkluY29uc2lzdGVudCBOUElWLUNvbmZpZyAiCisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwOTIsCisJCSAgICAiSW5jb25zaXN0ZW50IE5QSVYtQ29uZmlnICIKIAkJICAgICJkZXRlY3RlZDogdmVyc2lvbj0weCV4IGVudHJpZXM9MHgleCBjaGVja3N1bT0weCV4LlxuIiwKIAkJICAgIGxlMTZfdG9fY3B1KGhkci52ZXJzaW9uKSwgbGUxNl90b19jcHUoaGRyLmVudHJpZXMpLAotCQkgICAgY2hrc3VtKSk7CisJCSAgICBsZTE2X3RvX2NwdShoZHIuY2hlY2tzdW0pKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMTAxNCwyMSArMTAzNCwyMiBAQAogCQl2aWQucG9ydF9uYW1lID0gd3duX3RvX3U2NChlbnRyeS0+cG9ydF9uYW1lKTsKIAkJdmlkLm5vZGVfbmFtZSA9IHd3bl90b191NjQoZW50cnktPm5vZGVfbmFtZSk7CiAKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIk5QSVZbJTAyeF06IHd3cG49JWxseCAiCi0JCQkid3dubj0lbGx4IHZmX2lkPTB4JXggUV9xb3M9MHgleCBGX3Fvcz0weCV4LlxuIiwgY250LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aWQucG9ydF9uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aWQubm9kZV9uYW1lLAotCQkJbGUxNl90b19jcHUoZW50cnktPnZmX2lkKSwKLQkJCWVudHJ5LT5xX3FvcywgZW50cnktPmZfcW9zKSk7CisJCXFsX2RiZyhxbF9kYmdfdXNlciwgdmhhLCAweDcwOTMsCisJCSAgICAiTlBJVlslMDJ4XTogd3dwbj0lbGx4ICIKKwkJICAgICJ3d25uPSVsbHggdmZfaWQ9MHgleCBRX3Fvcz0weCV4IEZfcW9zPTB4JXguXG4iLCBjbnQsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXZpZC5wb3J0X25hbWUsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXZpZC5ub2RlX25hbWUsCisJCSAgICBsZTE2X3RvX2NwdShlbnRyeS0+dmZfaWQpLAorCQkgICAgZW50cnktPnFfcW9zLCBlbnRyeS0+Zl9xb3MpOwogCiAJCWlmIChpIDwgUUxBX1BSRUNPTkZJR19WUE9SVFMpIHsKIAkJCXZwb3J0ID0gZmNfdnBvcnRfY3JlYXRlKHZoYS0+aG9zdCwgMCwgJnZpZCk7CiAJCQlpZiAoIXZwb3J0KQotCQkJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCQkiTlBJVi1Db25maWc6IEZhaWxlZCB0byBjcmVhdGUgdnBvcnQgWyUwMnhdOiAiCi0JCQkJInd3cG49JWxseCB3d25uPSVsbHguXG4iLCBjbnQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aWQucG9ydF9uYW1lLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdmlkLm5vZGVfbmFtZSk7CisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA5NCwKKwkJCQkgICAgIk5QSVYtQ29uZmlnIEZhaWxlZCB0byBjcmVhdGUgdnBvcnQgWyUwMnhdOiAiCisJCQkJICAgICJ3d3BuPSVsbHggd3dubj0lbGx4LlxuIiwgY250LAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXZpZC5wb3J0X25hbWUsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmlkLm5vZGVfbmFtZSk7CiAJCX0KIAl9CiBkb25lOgpAQCAtMTEyNyw5ICsxMTQ4LDEwIEBACiAJCW9wdHJvbSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgT1BUUk9NX0JVUlNUX1NJWkUsCiAJCSAgICAmb3B0cm9tX2RtYSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghb3B0cm9tKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLAotCQkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBvcHRyb20gYnVyc3Qgd3JpdGUgIgotCQkJICAgICIoJXggS0IpLlxuIiwgT1BUUk9NX0JVUlNUX1NJWkUgLyAxMDI0KTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwOTUsCisJCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSAiCisJCQkgICAgIm1lbW9yeSBmb3Igb3B0cm9tIGJ1cnN0IHdyaXRlICgleCBLQikuXG4iLAorCQkJICAgIE9QVFJPTV9CVVJTVF9TSVpFIC8gMTAyNCk7CiAJCX0KIAl9CiAKQEAgLTExMzgsNyArMTE2MCw3IEBACiAKIAlyZXQgPSBxbGEyNHh4X3VucHJvdGVjdF9mbGFzaCh2aGEpOwogCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDk2LAogCQkgICAgIlVuYWJsZSB0byB1bnByb3RlY3QgZmxhc2ggZm9yIHVwZGF0ZS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTE1Niw5ICsxMTc4LDkgQEAKIAkJCQkgICAgMHhmZjAwMDApIHwgKChmZGF0YSA+PiAxNikgJiAweGZmKSk7CiAJCQlyZXQgPSBxbGEyNHh4X2VyYXNlX3NlY3Rvcih2aGEsIGZkYXRhKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCQlERUJVRzkocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJCSAgICAiVW5hYmxlIHRvIGVyYXNlIHNlY3RvcjogYWRkcmVzcz0leC5cbiIsCi0JCQkJICAgIGZhZGRyKSk7CisJCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAwNywKKwkJCQkgICAgIlVuYWJsZSB0byBlcmFzZSBlcmFzZSBzZWN0b3I6IGFkZHJlc3M9JXguXG4iLAorCQkJCSAgICBmYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTExNzIsMTIgKzExOTQsMTIgQEAKIAkJCSAgICBmbGFzaF9kYXRhX2FkZHIoaGEsIGZhZGRyKSwKIAkJCSAgICBPUFRST01fQlVSU1RfRFdPUkRTKTsKIAkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA5NywKIAkJCQkgICAgIlVuYWJsZSB0byBidXJzdC13cml0ZSBvcHRyb20gc2VnbWVudCAiCiAJCQkJICAgICIoJXgvJXgvJWxseCkuXG4iLCByZXQsCiAJCQkJICAgIGZsYXNoX2RhdGFfYWRkcihoYSwgZmFkZHIpLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKW9wdHJvbV9kbWEpOwotCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDk4LAogCQkJCSAgICAiUmV2ZXJ0aW5nIHRvIHNsb3ctd3JpdGUuXG4iKTsKIAogCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LApAQCAtMTE5NCw5ICsxMjE2LDkgQEAKIAkJcmV0ID0gcWxhMjR4eF93cml0ZV9mbGFzaF9kd29yZChoYSwKIAkJICAgIGZsYXNoX2RhdGFfYWRkcihoYSwgZmFkZHIpLCBjcHVfdG9fbGUzMigqZHdwdHIpKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJREVCVUc5KHByaW50aygiJXMoJWxkKSBVbmFibGUgdG8gcHJvZ3JhbSBmbGFzaCAiCi0JCQkgICAgImFkZHJlc3M9JXggZGF0YT0leC5cbiIsIF9fZnVuY19fLAotCQkJICAgIHZoYS0+aG9zdF9ubywgZmFkZHIsICpkd3B0cikpOworCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzAwNiwKKwkJCSAgICAiVW5hYmxlIHRvIHByb2dyYW0gZmxhc2ggYWRkcmVzcz0leCBkYXRhPSV4LlxuIiwKKwkJCSAgICBmYWRkciwgKmR3cHRyKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyMTEsNyArMTIzMyw3IEBACiAKIAlyZXQgPSBxbGEyNHh4X3Byb3RlY3RfZmxhc2godmhhKTsKIAlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwOTksCiAJCSAgICAiVW5hYmxlIHRvIHByb3RlY3QgZmxhc2ggYWZ0ZXIgdXBkYXRlLlxuIik7CiBkb25lOgogCWlmIChvcHRyb20pCkBAIC0xMzI0LDkgKzEzNDYsOSBAQAogCQlyZXQgPSBxbGEyNHh4X3dyaXRlX2ZsYXNoX2R3b3JkKGhhLAogCQkgICAgbnZyYW1fZGF0YV9hZGRyKGhhLCBuYWRkciksIGNwdV90b19sZTMyKCpkd3B0cikpOwogCQlpZiAocmV0ICE9IFFMQV9TVUNDRVNTKSB7Ci0JCQlERUJVRzkocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJcWxfZGJnKHFsX2RiZ191c2VyLCB2aGEsIDB4NzA5YSwKIAkJCSAgICAiVW5hYmxlIHRvIHByb2dyYW0gbnZyYW0gYWRkcmVzcz0leCBkYXRhPSV4LlxuIiwKLQkJCSAgICBuYWRkciwgKmR3cHRyKSk7CisJCQkgICAgbmFkZHIsICpkd3B0cik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE0NzYsNyArMTQ5OCw3IEBACiAJaGEtPmZ3X29wdGlvbnNbMV0gfD0gRk8xX0RJU0FCTEVfR1BJTzZfNzsKIAogCWlmIChxbGEyeDAwX3NldF9md19vcHRpb25zKHZoYSwgaGEtPmZ3X29wdGlvbnMpICE9IFFMQV9TVUNDRVNTKSB7Ci0JCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4NzA5YiwKIAkJICAgICJVbmFibGUgdG8gdXBkYXRlIGZ3IG9wdGlvbnMgKGJlYWNvbiBvbikuXG4iKTsKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJfQpAQCAtMTU0MSw3ICsxNTYzLDcgQEAKIAogCXJ2YWwgPSBxbGEyeDAwX3NldF9md19vcHRpb25zKHZoYSwgaGEtPmZ3X29wdGlvbnMpOwogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwOWMsCiAJCSAgICAiVW5hYmxlIHRvIHVwZGF0ZSBmdyBvcHRpb25zIChiZWFjb24gb2ZmKS5cbiIpOwogCXJldHVybiBydmFsOwogfQpAQCAtMTYxNiw3ICsxNjM4LDcgQEAKIAogCQlpZiAocWxhMngwMF9nZXRfZndfb3B0aW9ucyh2aGEsIGhhLT5md19vcHRpb25zKSAhPQogCQkgICAgUUxBX1NVQ0NFU1MpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDcwMDksCiAJCQkgICAgIlVuYWJsZSB0byB1cGRhdGUgZncgb3B0aW9ucyAoYmVhY29uIG9uKS5cbiIpOwogCQkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCX0KQEAgLTE2NzAsMTQgKzE2OTIsMTQgQEAKIAloYS0+Zndfb3B0aW9uc1sxXSAmPSB+QUREX0ZPMV9ESVNBQkxFX0dQSU9fTEVEX0NUUkw7CiAKIAlpZiAocWxhMngwMF9zZXRfZndfb3B0aW9ucyh2aGEsIGhhLT5md19vcHRpb25zKSAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiVW5hYmxlIHRvIHVwZGF0ZSBmdyBvcHRpb25zIChiZWFjb24gb2ZmKS5cbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDRkLAorCQkgICAgIlVuYWJsZSB0byB1cGRhdGUgZncgb3B0aW9ucyAoYmVhY29uIG9uKS5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9CiAKIAlpZiAocWxhMngwMF9nZXRfZndfb3B0aW9ucyh2aGEsIGhhLT5md19vcHRpb25zKSAhPSBRTEFfU1VDQ0VTUykgewotCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCSAgICAiVW5hYmxlIHRvIGdldCBmdyBvcHRpb25zIChiZWFjb24gb2ZmKS5cbiIpOworCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHg3MDRlLAorCQkgICAgIlVuYWJsZSB0byB1cGRhdGUgZncgb3B0aW9ucyAoYmVhY29uIG9uKS5cbiIpOwogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAl9CiAKQEAgLTIzODksMTAgKzI0MTEsOSBAQAogCW9wdHJvbSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgT1BUUk9NX0JVUlNUX1NJWkUsCiAJICAgICZvcHRyb21fZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9wdHJvbSkgewotCQlxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLAotCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9wdHJvbSBidXJzdCByZWFkICIKLQkJICAgICIoJXggS0IpLlxuIiwgT1BUUk9NX0JVUlNUX1NJWkUgLyAxMDI0KTsKLQorCQlxbF9sb2cocWxfbG9nX3dhcm4sIHZoYSwgMHgwMGNjLAorCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG9wdHJvbSBidXJzdCByZWFkICgleCBLQikuXG4iLAorCQkgICAgT1BUUk9NX0JVUlNUX1NJWkUgLyAxMDI0KTsKIAkJZ290byBzbG93X3JlYWQ7CiAJfQogCkBAIC0yNDA3LDEyICsyNDI4LDExIEBACiAJCXJ2YWwgPSBxbGEyeDAwX2R1bXBfcmFtKHZoYSwgb3B0cm9tX2RtYSwKIAkJICAgIGZsYXNoX2RhdGFfYWRkcihoYSwgZmFkZHIpLCBidXJzdCk7CiAJCWlmIChydmFsKSB7Ci0JCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIlVuYWJsZSB0byBidXJzdC1yZWFkIG9wdHJvbSBzZWdtZW50ICIKLQkJCSAgICAiKCV4LyV4LyVsbHgpLlxuIiwgcnZhbCwKLQkJCSAgICBmbGFzaF9kYXRhX2FkZHIoaGEsIGZhZGRyKSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZjUsCisJCQkgICAgIlVuYWJsZSB0byBidXJzdC1yZWFkIG9wdHJvbSBzZWdtZW50ICgleC8leC8lbGx4KS5cbiIsCisJCQkgICAgcnZhbCwgZmxhc2hfZGF0YV9hZGRyKGhhLCBmYWRkciksCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcHRyb21fZG1hKTsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwZjYsCiAJCQkgICAgIlJldmVydGluZyB0byBzbG93LXJlYWQuXG4iKTsKIAogCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIE9QVFJPTV9CVVJTVF9TSVpFLApAQCAtMjU1Niw4ICsyNTc2LDggQEAKIAkJaWYgKHFsYTJ4MDBfcmVhZF9mbGFzaF9ieXRlKGhhLCBwY2loZHIpICE9IDB4NTUgfHwKIAkJICAgIHFsYTJ4MDBfcmVhZF9mbGFzaF9ieXRlKGhhLCBwY2loZHIgKyAweDAxKSAhPSAweGFhKSB7CiAJCQkvKiBObyBzaWduYXR1cmUgKi8KLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLCAiTm8gbWF0Y2hpbmcgUk9NICIKLQkJCSAgICAic2lnbmF0dXJlLlxuIikpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwNTAsCisJCQkgICAgIk5vIG1hdGNoaW5nIFJPTSBzaWduYXR1cmUuXG4iKTsKIAkJCXJldCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMjU3Myw4ICsyNTkzLDggQEAKIAkJICAgIHFsYTJ4MDBfcmVhZF9mbGFzaF9ieXRlKGhhLCBwY2lkcyArIDB4MikgIT0gJ0knIHx8CiAJCSAgICBxbGEyeDAwX3JlYWRfZmxhc2hfYnl0ZShoYSwgcGNpZHMgKyAweDMpICE9ICdSJykgewogCQkJLyogSW5jb3JyZWN0IGhlYWRlci4gKi8KLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJQQ0kgZGF0YSBzdHJ1Y3Qgbm90ICIKLQkJCSAgICAiZm91bmQgcGNpcl9hZHI9JXguXG4iLCBwY2lkcykpOworCQkJcWxfbG9nKHFsX2xvZ19mYXRhbCwgdmhhLCAweDAwNTEsCisJCQkgICAgIlBDSSBkYXRhIHN0cnVjdCBub3QgZm91bmQgcGNpcl9hZHI9JXguXG4iLCBwY2lkcyk7CiAJCQlyZXQgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1ODgsOCArMjYwOCw5IEBACiAJCQkgICAgcWxhMngwMF9yZWFkX2ZsYXNoX2J5dGUoaGEsIHBjaWRzICsgMHgxMik7CiAJCQloYS0+Ymlvc19yZXZpc2lvblsxXSA9CiAJCQkgICAgcWxhMngwMF9yZWFkX2ZsYXNoX2J5dGUoaGEsIHBjaWRzICsgMHgxMyk7Ci0JCQlERUJVRzMocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgInJlYWQgQklPUyAlZC4lZC5cbiIsCi0JCQkgICAgaGEtPmJpb3NfcmV2aXNpb25bMV0sIGhhLT5iaW9zX3JldmlzaW9uWzBdKSk7CisJCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDUyLAorCQkJICAgICJSZWFkIEJJT1MgJWQuJWQuXG4iLAorCQkJICAgIGhhLT5iaW9zX3JldmlzaW9uWzFdLCBoYS0+Ymlvc19yZXZpc2lvblswXSk7CiAJCQlicmVhazsKIAkJY2FzZSBST01fQ09ERV9UWVBFX0ZDT0RFOgogCQkJLyogT3BlbiBGaXJtd2FyZSBzdGFuZGFyZCBmb3IgUENJIChGQ29kZSkuICovCkBAIC0yNjAyLDEyICsyNjIzLDE0IEBACiAJCQkgICAgcWxhMngwMF9yZWFkX2ZsYXNoX2J5dGUoaGEsIHBjaWRzICsgMHgxMik7CiAJCQloYS0+ZWZpX3JldmlzaW9uWzFdID0KIAkJCSAgICBxbGEyeDAwX3JlYWRfZmxhc2hfYnl0ZShoYSwgcGNpZHMgKyAweDEzKTsKLQkJCURFQlVHMyhxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLCAicmVhZCBFRkkgJWQuJWQuXG4iLAotCQkJICAgIGhhLT5lZmlfcmV2aXNpb25bMV0sIGhhLT5lZmlfcmV2aXNpb25bMF0pKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwNTMsCisJCQkgICAgIlJlYWQgRUZJICVkLiVkLlxuIiwKKwkJCSAgICBoYS0+ZWZpX3JldmlzaW9uWzFdLCBoYS0+ZWZpX3JldmlzaW9uWzBdKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwgIlVucmVjb2duaXplZCBjb2RlICIKLQkJCSAgICAidHlwZSAleCBhdCBwY2lkcyAleC5cbiIsIGNvZGVfdHlwZSwgcGNpZHMpKTsKKwkJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNTQsCisJCQkgICAgIlVucmVjb2duaXplZCBjb2RlIHR5cGUgJXggYXQgcGNpZHMgJXguXG4iLAorCQkJICAgIGNvZGVfdHlwZSwgcGNpZHMpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjYyNywyMSArMjY1MCwyOCBAQAogCiAJCXFsYTJ4MDBfcmVhZF9mbGFzaF9kYXRhKGhhLCBkYnl0ZSwgaGEtPmZsdF9yZWdpb25fZncgKiA0ICsgMTAsCiAJCSAgICA4KTsKLQkJREVCVUczKHFsYV9wcmludGsoS0VSTl9ERUJVRywgaGEsICJkdW1waW5nIGZ3IHZlciBmcm9tICIKLQkJICAgICJmbGFzaDpcbiIpKTsKLQkJREVCVUczKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilkYnl0ZSwgOCkpOworCQlxbF9kYmcocWxfZGJnX2luaXQgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MDEwYSwKKwkJICAgICJEdW1waW5nIGZ3ICIKKwkJICAgICJ2ZXIgZnJvbSBmbGFzaDouXG4iKTsKKwkJcWxfZHVtcF9idWZmZXIocWxfZGJnX2luaXQgKyBxbF9kYmdfYnVmZmVyLCB2aGEsIDB4MDEwYiwKKwkJICAgICh1aW50OF90ICopZGJ5dGUsIDgpOwogCiAJCWlmICgoZGNvZGVbMF0gPT0gMHhmZmZmICYmIGRjb2RlWzFdID09IDB4ZmZmZiAmJgogCQkgICAgZGNvZGVbMl0gPT0gMHhmZmZmICYmIGRjb2RlWzNdID09IDB4ZmZmZikgfHwKIAkJICAgIChkY29kZVswXSA9PSAwICYmIGRjb2RlWzFdID09IDAgJiYgZGNvZGVbMl0gPT0gMCAmJgogCQkgICAgZGNvZGVbM10gPT0gMCkpIHsKLQkJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJVbnJlY29nbml6ZWQgZncgIgotCQkJICAgICJyZXZpc2lvbiBhdCAleC5cbiIsIGhhLT5mbHRfcmVnaW9uX2Z3ICogNCkpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA1NywKKwkJCSAgICAiVW5yZWNvZ25pemVkIGZ3IHJldmlzaW9uIGF0ICV4LlxuIiwKKwkJCSAgICBoYS0+Zmx0X3JlZ2lvbl9mdyAqIDQpOwogCQl9IGVsc2UgewogCQkJLyogdmFsdWVzIGFyZSBpbiBiaWcgZW5kaWFuICovCiAJCQloYS0+ZndfcmV2aXNpb25bMF0gPSBkYnl0ZVswXSA8PCAxNiB8IGRieXRlWzFdOwogCQkJaGEtPmZ3X3JldmlzaW9uWzFdID0gZGJ5dGVbMl0gPDwgMTYgfCBkYnl0ZVszXTsKIAkJCWhhLT5md19yZXZpc2lvblsyXSA9IGRieXRlWzRdIDw8IDE2IHwgZGJ5dGVbNV07CisJCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDU4LAorCQkJICAgICJGVyBWZXJzaW9uOiAiCisJCQkgICAgIiVkLiVkLiVkLlxuIiwgaGEtPmZ3X3JldmlzaW9uWzBdLAorCQkJICAgIGhhLT5md19yZXZpc2lvblsxXSwgaGEtPmZ3X3JldmlzaW9uWzJdKTsKIAkJfQogCX0KIApAQCAtMjY4Myw4ICsyNzEzLDggQEAKIAkJYmNvZGUgPSBtYnVmICsgKHBjaWhkciAlIDQpOwogCQlpZiAoYmNvZGVbMHgwXSAhPSAweDU1IHx8IGJjb2RlWzB4MV0gIT0gMHhhYSkgewogCQkJLyogTm8gc2lnbmF0dXJlICovCi0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgIk5vIG1hdGNoaW5nIFJPTSAiCi0JCQkgICAgInNpZ25hdHVyZS5cbiIpKTsKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDU5LAorCQkJICAgICJObyBtYXRjaGluZyBST00gc2lnbmF0dXJlLlxuIik7CiAJCQlyZXQgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI2OTksOCArMjcyOSw4IEBACiAJCWlmIChiY29kZVsweDBdICE9ICdQJyB8fCBiY29kZVsweDFdICE9ICdDJyB8fAogCQkgICAgYmNvZGVbMHgyXSAhPSAnSScgfHwgYmNvZGVbMHgzXSAhPSAnUicpIHsKIAkJCS8qIEluY29ycmVjdCBoZWFkZXIuICovCi0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiUENJIGRhdGEgc3RydWN0IG5vdCAiCi0JCQkgICAgImZvdW5kIHBjaXJfYWRyPSV4LlxuIiwgcGNpZHMpKTsKKwkJCXFsX2xvZyhxbF9sb2dfZmF0YWwsIHZoYSwgMHgwMDVhLAorCQkJICAgICJQQ0kgZGF0YSBzdHJ1Y3Qgbm90IGZvdW5kIHBjaXJfYWRyPSV4LlxuIiwgcGNpZHMpOwogCQkJcmV0ID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNzEyLDI2ICsyNzQyLDMwIEBACiAJCQkvKiBJbnRlbCB4ODYsIFBDLUFUIGNvbXBhdGlibGUuICovCiAJCQloYS0+Ymlvc19yZXZpc2lvblswXSA9IGJjb2RlWzB4MTJdOwogCQkJaGEtPmJpb3NfcmV2aXNpb25bMV0gPSBiY29kZVsweDEzXTsKLQkJCURFQlVHMyhxbGFfcHJpbnRrKEtFUk5fREVCVUcsIGhhLCAicmVhZCBCSU9TICVkLiVkLlxuIiwKLQkJCSAgICBoYS0+Ymlvc19yZXZpc2lvblsxXSwgaGEtPmJpb3NfcmV2aXNpb25bMF0pKTsKKwkJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwNWIsCisJCQkgICAgIlJlYWQgQklPUyAlZC4lZC5cbiIsCisJCQkgICAgaGEtPmJpb3NfcmV2aXNpb25bMV0sIGhhLT5iaW9zX3JldmlzaW9uWzBdKTsKIAkJCWJyZWFrOwogCQljYXNlIFJPTV9DT0RFX1RZUEVfRkNPREU6CiAJCQkvKiBPcGVuIEZpcm13YXJlIHN0YW5kYXJkIGZvciBQQ0kgKEZDb2RlKS4gKi8KIAkJCWhhLT5mY29kZV9yZXZpc2lvblswXSA9IGJjb2RlWzB4MTJdOwogCQkJaGEtPmZjb2RlX3JldmlzaW9uWzFdID0gYmNvZGVbMHgxM107Ci0JCQlERUJVRzMocWxhX3ByaW50ayhLRVJOX0RFQlVHLCBoYSwgInJlYWQgRkNPREUgJWQuJWQuXG4iLAotCQkJICAgIGhhLT5mY29kZV9yZXZpc2lvblsxXSwgaGEtPmZjb2RlX3JldmlzaW9uWzBdKSk7CisJCQlxbF9kYmcocWxfZGJnX2luaXQsIHZoYSwgMHgwMDVjLAorCQkJICAgICJSZWFkIEZDT0RFICVkLiVkLlxuIiwKKwkJCSAgICBoYS0+ZmNvZGVfcmV2aXNpb25bMV0sIGhhLT5mY29kZV9yZXZpc2lvblswXSk7CiAJCQlicmVhazsKIAkJY2FzZSBST01fQ09ERV9UWVBFX0VGSToKIAkJCS8qIEV4dGVuc2libGUgRmlybXdhcmUgSW50ZXJmYWNlIChFRkkpLiAqLwogCQkJaGEtPmVmaV9yZXZpc2lvblswXSA9IGJjb2RlWzB4MTJdOwogCQkJaGEtPmVmaV9yZXZpc2lvblsxXSA9IGJjb2RlWzB4MTNdOwotCQkJREVCVUczKHFsYV9wcmludGsoS0VSTl9ERUJVRywgaGEsICJyZWFkIEVGSSAlZC4lZC5cbiIsCi0JCQkgICAgaGEtPmVmaV9yZXZpc2lvblsxXSwgaGEtPmVmaV9yZXZpc2lvblswXSkpOworCQkJcWxfZGJnKHFsX2RiZ19pbml0LCB2aGEsIDB4MDA1ZCwKKwkJCSAgICAiUmVhZCBFRkkgJWQuJWQuXG4iLAorCQkJICAgIGhhLT5lZmlfcmV2aXNpb25bMV0sIGhhLT5lZmlfcmV2aXNpb25bMF0pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLCAiVW5yZWNvZ25pemVkIGNvZGUgIgotCQkJICAgICJ0eXBlICV4IGF0IHBjaWRzICV4LlxuIiwgY29kZV90eXBlLCBwY2lkcykpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA1ZSwKKwkJCSAgICAiVW5yZWNvZ25pemVkIGNvZGUgdHlwZSAleCBhdCBwY2lkcyAleC5cbiIsCisJCQkgICAgY29kZV90eXBlLCBwY2lkcyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yNzUzLDEzICsyNzg3LDE4IEBACiAJICAgIGRjb2RlWzJdID09IDB4ZmZmZmZmZmYgJiYgZGNvZGVbM10gPT0gMHhmZmZmZmZmZikgfHwKIAkgICAgKGRjb2RlWzBdID09IDAgJiYgZGNvZGVbMV0gPT0gMCAmJiBkY29kZVsyXSA9PSAwICYmCiAJICAgIGRjb2RlWzNdID09IDApKSB7Ci0JCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICJVbnJlY29nbml6ZWQgZncgIgotCQkgICAgInJldmlzaW9uIGF0ICV4LlxuIiwgaGEtPmZsdF9yZWdpb25fZncgKiA0KSk7CisJCXFsX2xvZyhxbF9sb2dfd2FybiwgdmhhLCAweDAwNWYsCisJCSAgICAiVW5yZWNvZ25pemVkIGZ3IHJldmlzaW9uIGF0ICV4LlxuIiwKKwkJICAgIGhhLT5mbHRfcmVnaW9uX2Z3ICogNCk7CiAJfSBlbHNlIHsKIAkJaGEtPmZ3X3JldmlzaW9uWzBdID0gZGNvZGVbMF07CiAJCWhhLT5md19yZXZpc2lvblsxXSA9IGRjb2RlWzFdOwogCQloYS0+ZndfcmV2aXNpb25bMl0gPSBkY29kZVsyXTsKIAkJaGEtPmZ3X3JldmlzaW9uWzNdID0gZGNvZGVbM107CisJCXFsX2RiZyhxbF9kYmdfaW5pdCwgdmhhLCAweDAwNjAsCisJCSAgICAiRmlybXdhcmUgcmV2aXNpb24gJWQuJWQuJWQuJWQuXG4iLAorCQkgICAgaGEtPmZ3X3JldmlzaW9uWzBdLCBoYS0+ZndfcmV2aXNpb25bMV0sCisJCSAgICBoYS0+ZndfcmV2aXNpb25bMl0sIGhhLT5md19yZXZpc2lvblszXSk7CiAJfQogCiAJLyogQ2hlY2sgZm9yIGdvbGRlbiBmaXJtd2FyZSBhbmQgZ2V0IHZlcnNpb24gaWYgYXZhaWxhYmxlICovCkBAIC0yNzc1LDkgKzI4MTQsOSBAQAogCiAJaWYgKGRjb2RlWzRdID09IDB4RkZGRkZGRkYgJiYgZGNvZGVbNV0gPT0gMHhGRkZGRkZGRiAmJgogCSAgICBkY29kZVs2XSA9PSAweEZGRkZGRkZGICYmIGRjb2RlWzddID09IDB4RkZGRkZGRkYpIHsKLQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJICAgICIlcyglbGQpOiBVbnJlY29nbml6ZWQgZ29sZGVuIGZ3IGF0IDB4JXguXG4iLAotCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywgaGEtPmZsdF9yZWdpb25fZ29sZF9mdyAqIDQpKTsKKwkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDA1NiwKKwkJICAgICJVbnJlY29nbml6ZWQgZ29sZGVuIGZ3IGF0IDB4JXguXG4iLAorCQkgICAgaGEtPmZsdF9yZWdpb25fZ29sZF9mdyAqIDQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjg0Myw5ICsyODgyLDkgQEAKIAlpZiAoIWhhLT5mY3BfcHJpb19jZmcpIHsKIAkJaGEtPmZjcF9wcmlvX2NmZyA9IHZtYWxsb2MoRkNQX1BSSU9fQ0ZHX1NJWkUpOwogCQlpZiAoIWhhLT5mY3BfcHJpb19jZmcpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBmY3AgcHJpb3JpdHkgZGF0YSAiCi0JCQkJCSIoJXgpLlxuIiwgRkNQX1BSSU9fQ0ZHX1NJWkUpOworCQkJcWxfbG9nKHFsX2xvZ193YXJuLCB2aGEsIDB4MDBkNSwKKwkJCSAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZmNwIHByaW9ydHkgZGF0YSAoJXgpLlxuIiwKKwkJCSAgICBGQ1BfUFJJT19DRkdfU0laRSk7CiAJCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAkJfQogCX0KQEAgLTI4NTcsNyArMjg5Niw3IEBACiAJaGEtPmlzcF9vcHMtPnJlYWRfb3B0cm9tKHZoYSwgKHVpbnQ4X3QgKiloYS0+ZmNwX3ByaW9fY2ZnLAogCQkJZmNwX3ByaW9fYWRkciA8PCAyLCBGQ1BfUFJJT19DRkdfSERSX1NJWkUpOwogCi0JaWYgKCFxbGEyNHh4X2ZjcF9wcmlvX2NmZ192YWxpZChoYS0+ZmNwX3ByaW9fY2ZnLCAwKSkKKwlpZiAoIXFsYTI0eHhfZmNwX3ByaW9fY2ZnX3ZhbGlkKHZoYSwgaGEtPmZjcF9wcmlvX2NmZywgMCkpCiAJCWdvdG8gZmFpbDsKIAogCS8qIHJlYWQgcmVtYWluaW5nIEZDUCBDTUQgY29uZmlnIGRhdGEgZnJvbSBmbGFzaCAqLwpAQCAtMjg2OSw3ICsyOTA4LDcgQEAKIAkJCWZjcF9wcmlvX2FkZHIgPDwgMiwgKGxlbiA8IG1heF9sZW4gPyBsZW4gOiBtYXhfbGVuKSk7CiAKIAkvKiByZXZhbGlkYXRlIHRoZSBlbnRpcmUgRkNQIHByaW9yaXR5IGNvbmZpZyBkYXRhLCBpbmNsdWRpbmcgZW50cmllcyAqLwotCWlmICghcWxhMjR4eF9mY3BfcHJpb19jZmdfdmFsaWQoaGEtPmZjcF9wcmlvX2NmZywgMSkpCisJaWYgKCFxbGEyNHh4X2ZjcF9wcmlvX2NmZ192YWxpZCh2aGEsIGhhLT5mY3BfcHJpb19jZmcsIDEpKQogCQlnb3RvIGZhaWw7CiAKIAloYS0+ZmxhZ3MuZmNwX3ByaW9fZW5hYmxlZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCAwNjJjOTdiLi4xM2I2MzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wNy4wMy1rIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wNy4wNy1rIgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L0tjb25maWcKaW5kZXggMmMzM2NlNi4uMGY1NTk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFNDU0lfUUxBX0lTQ1NJCiAJdHJpc3RhdGUgIlFMb2dpYyBJU1A0WFhYIGFuZCBJU1A4MlhYIGhvc3QgYWRhcHRlciBmYW1pbHkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSSAmJiBORVQKIAlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUwogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDQweHggKElTUDRYWFgpIGFuZCA4MDIyIChJU1A4MlhYKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCAyOGQ5YzlkLi5mYzNmMTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiAJCWhvc3QtPmhvc3RfYmxvY2tlZCA9IGhvc3QtPm1heF9ob3N0X2Jsb2NrZWQ7CiAJCWJyZWFrOwogCWNhc2UgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOgorCWNhc2UgU0NTSV9NTFFVRVVFX0VIX1JFVFJZOgogCQlkZXZpY2UtPmRldmljZV9ibG9ja2VkID0gZGV2aWNlLT5tYXhfZGV2aWNlX2Jsb2NrZWQ7CiAJCWJyZWFrOwogCWNhc2UgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IDhhMTcyZDQuLjVmYmVhZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTU5Nyw2ICs1OTcsMjggQEAKIAkJICAgc2hvd19zcGlfaG9zdF9zaWduYWxsaW5nLAogCQkgICBzdG9yZV9zcGlfaG9zdF9zaWduYWxsaW5nKTsKIAorc3RhdGljIHNzaXplX3Qgc2hvd19zcGlfaG9zdF93aWR0aChzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHRyYW5zcG9ydF9jbGFzc190b19zaG9zdChjZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzaG9zdC0+bWF4X2lkID09IDE2ID8gIndpZGUiIDogIm5hcnJvdyIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGhvc3Rfd2lkdGgsIFNfSVJVR08sCisJCSAgIHNob3dfc3BpX2hvc3Rfd2lkdGgsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3NwaV9ob3N0X2hiYV9pZChzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3Nob3N0KGNkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHNob3N0LT50aGlzX2lkKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihoYmFfaWQsIFNfSVJVR08sCisJCSAgIHNob3dfc3BpX2hvc3RfaGJhX2lkLCBOVUxMKTsKKwogI2RlZmluZSBEVl9TRVQoeCwgeSkJCQlcCiAJaWYoaS0+Zi0+c2V0XyMjeCkJCVwKIAkJaS0+Zi0+c2V0XyMjeChzZGV2LT5zZGV2X3RhcmdldCwgeSkKQEAgLTEzODAsNiArMTQwMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3N0X2F0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfc2lnbmFsbGluZy5hdHRyLAorCSZkZXZfYXR0cl9ob3N0X3dpZHRoLmF0dHIsCisJJmRldl9hdHRyX2hiYV9pZC5hdHRyLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvY2xrL2NvcmUuYyBiL2RyaXZlcnMvc2gvY2xrL2NvcmUuYwppbmRleCBkNjcwMmU1Li5kYzhkMDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2Nsay9jb3JlLmMKKysrIGIvZHJpdmVycy9zaC9jbGsvY29yZS5jCkBAIC0zNCw2ICszNCw5IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2NrX2xvY2spOwogc3RhdGljIERFRklORV9NVVRFWChjbG9ja19saXN0X3NlbSk7CiAKKy8qIGNsb2NrIGRpc2FibGUgb3BlcmF0aW9ucyBhcmUgbm90IHBhc3NlZCBvbiB0byBoYXJkd2FyZSBkdXJpbmcgYm9vdCAqLworc3RhdGljIGludCBhbGxvd19kaXNhYmxlOworCiB2b2lkIGNsa19yYXRlX3RhYmxlX2J1aWxkKHN0cnVjdCBjbGsgKmNsaywKIAkJCSAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlLAogCQkJICBpbnQgbnJfZnJlcXMsCkBAIC0yMjgsNyArMjMxLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKCEoLS1jbGstPnVzZWNvdW50KSkgewotCQlpZiAobGlrZWx5KGNsay0+b3BzICYmIGNsay0+b3BzLT5kaXNhYmxlKSkKKwkJaWYgKGxpa2VseShhbGxvd19kaXNhYmxlICYmIGNsay0+b3BzICYmIGNsay0+b3BzLT5kaXNhYmxlKSkKIAkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CiAJCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQogCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CkBAIC0zOTMsNyArMzk2LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQorCWlmIChJU19FUlJfT1JfTlVMTChjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC03NDQsMyArNzQ3LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIGxhdGVfaW5pdGNhbGwoY2xrX2RlYnVnZnNfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19sYXRlX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbGsgKmNsazsKKworCS8qIGRpc2FibGUgYWxsIGNsb2NrcyB3aXRoIHplcm8gdXNlIGNvdW50ICovCisJbXV0ZXhfbG9jaygmY2xvY2tfbGlzdF9zZW0pOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmNsb2NrX2xpc3QsIG5vZGUpCisJCWlmICghY2xrLT51c2Vjb3VudCAmJiBjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkKKwkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CisKKwkvKiBmcm9tIG5vdyBvbiBhbGxvdyBjbG9jayBkaXNhYmxlIG9wZXJhdGlvbnMgKi8KKwlhbGxvd19kaXNhYmxlID0gMTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmNsb2NrX2xpc3Rfc2VtKTsKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoY2xrX2xhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jIGIvZHJpdmVycy9zaC9pbnRjL2NoaXAuYwppbmRleCBmMzNlMmRkLi4zM2IyZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKQEAgLTE4Niw2ICsxODYsOSBAQAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCiAJW0lSUV9UWVBFX0xFVkVMX0hJR0hdID0gVkFMSUQoMyksCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKKwlbSVJRX1RZUEVfRURHRV9CT1RIXSA9IFZBTElEKDQpLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGludGNfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKaW5kZXggZWJhODhjNy4uNzMwYjRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXBsMDIyLmMKQEAgLTIyNjcsMTcgKzIyNjcsMTMgQEAKIHBsMDIyX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBsMDIyICpwbDAyMiA9IGFtYmFfZ2V0X2RydmRhdGEoYWRldik7Ci0JaW50IHN0YXR1cyA9IDA7CisKIAlpZiAoIXBsMDIyKQogCQlyZXR1cm4gMDsKIAogCS8qIFJlbW92ZSB0aGUgcXVldWUgKi8KLQlzdGF0dXMgPSBkZXN0cm95X3F1ZXVlKHBsMDIyKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmYWRldi0+ZGV2LAotCQkJInF1ZXVlIHJlbW92ZSBmYWlsZWQgKCVkKVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9CisJaWYgKGRlc3Ryb3lfcXVldWUocGwwMjIpICE9IDApCisJCWRldl9lcnIoJmFkZXYtPmRldiwgInF1ZXVlIHJlbW92ZSBmYWlsZWRcbiIpOwogCWxvYWRfc3NwX2RlZmF1bHRfY29uZmlnKHBsMDIyKTsKIAlwbDAyMl9kbWFfcmVtb3ZlKHBsMDIyKTsKIAlmcmVlX2lycShhZGV2LT5pcnFbMF0sIHBsMDIyKTsKQEAgLTIyODksNyArMjI4NSw2IEBACiAJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKHBsMDIyLT5tYXN0ZXIpOwogCXNwaV9tYXN0ZXJfcHV0KHBsMDIyLT5tYXN0ZXIpOwogCWFtYmFfc2V0X2RydmRhdGEoYWRldiwgTlVMTCk7Ci0JZGV2X2RiZygmYWRldi0+ZGV2LCAicmVtb3ZlIHN1Y2NlZWRlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzcGFyc2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc3BhcnNlci5jCmluZGV4IGMwMWMwY2IuLmI5OWExMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNwYXJzZXIuYwpAQCAtODEyLDcgKzgxMiw3IEBACiAgICAgZm9yKGNvdW50ID0gMDsgY291bnQgPCBQYXRjaF9Db3VudDsgY291bnQrKykgewogCiAgICAgICAgIEFSX0RFQlVHX1BSSU5URihBVEhfREVCVUdfRVJSLCgiRnJlZWluZyBQYXRjaCBCdWZmZXIgJWQgXHJcbiIsY291bnQpKTsKLSAgICAgICAga2ZyZWUoUmFtUGF0Y2hbUGF0Y2hfQ291bnRdLkRhdGEpOworCWtmcmVlKFJhbVBhdGNoW2NvdW50XS5EYXRhKTsKICAgICB9CiAKICAgICBmb3IoY291bnQgPSAwOyBjb3VudCA8IFRhZ19Db3VudDsgY291bnQrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9vdHAuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvb3RwLmMKaW5kZXggMzQyNTNjZi4uNGE3MDE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy9vdHAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL290cC5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxicmNtX2h3X2lkcy5oPgogI2luY2x1ZGUgPGNoaXBjb21tb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbXNtYWMvdHlwZXMuaAppbmRleCBiYmYyMTg5Li44MjNiNWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21zbWFjL3R5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtc21hYy90eXBlcy5oCkBAIC0xOCw2ICsxOCw3IEBACiAjZGVmaW5lIF9CUkNNX1RZUEVTX0hfCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qIEJ1cyB0eXBlcyAqLwogI2RlZmluZQlTSV9CVVMJCQkwCS8qIFNPQyBJbnRlcmNvbm5lY3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeGQyMDk5L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY3hkMjA5OS9LY29uZmlnCmluZGV4IDlkNjM4YzMuLmI0OGFlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeGQyMDk5L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4ZDIwOTkvS2NvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiBjb25maWcgRFZCX0NYRDIwOTkKLSAgICAgICAgdHJpc3RhdGUgIkNYRDIwOTlBUiBDb21tb24gSW50ZXJmYWNlIGRyaXZlciIKLSAgICAgICAgZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIERWQl9OR0VORQotICAgICAgICAtLS1oZWxwLS0tCi0gICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIENJIG1vZHVsZSBmb3VuZCBvbiBjaW5lUzIgRFZCLVMyLCBzdXBwb3J0ZWQgYnkKLQkgIHRoZSBNaWNyb25hcyBQQ0llIGRldmljZSBkcml2ZXIgKG5nZW5lKS4KKwl0cmlzdGF0ZSAiQ1hEMjA5OUFSIENvbW1vbiBJbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBDSSBtb2R1bGUgZm91bmQgb24gY2FyZHMgYmFzZWQgb24KKwkgIC0gTWljcm9uYXMgbmdlbmUgUENJZSBicmlkZ2U6IGNpbmVTMiBldGMuCisJICAtIERpZ2l0YWwgRGV2aWNlcyBQQ0llIGJyaWRnZTogT2N0b3B1cyBzZXJpZXMKIAogCSAgRm9yIG5vdywgZGF0YSBpcyBwYXNzZWQgdGhyb3VnaCAnL2Rldi9kdmIvYWRhcHRlclgvc2VjMCc6CiAJICAgIC0gRW5jcnlwdGVkIGRhdGEgbXVzdCBiZSB3cml0dGVuIHRvICdzZWMwJy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeGQyMDk5L2N4ZDIwOTkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeGQyMDk5L2N4ZDIwOTkuYwppbmRleCA1NWIxYzRhLi4xYzA0MTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3hkMjA5OS9jeGQyMDk5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4ZDIwOTkvY3hkMjA5OS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGN4ZDIwOTkuYzogRHJpdmVyIGZvciB0aGUgQ1hEMjA5OUFSIENvbW1vbiBJbnRlcmZhY2UgQ29udHJvbGxlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBEaWdpdGFsRGV2aWNlcyBVRworICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRGlnaXRhbCBEZXZpY2VzIEdtYkgKICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDEsMTMgKzQxLDEzIEBACiAJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGVuOwogCiAJc3RydWN0IGkyY19hZGFwdGVyICppMmM7Ci0JdTggICAgIGFkcjsKKwlzdHJ1Y3QgY3hkMjA5OV9jZmcgY2ZnOworCiAJdTggICAgIHJlZ3NbMHgyM107CiAJdTggICAgIGxhc3RhZGRyZXNzOwogCXU4ICAgICBjbGtfcmVnX2Y7CiAJdTggICAgIGNsa19yZWdfYjsKIAlpbnQgICAgbW9kZTsKLQl1MzIgICAgYml0cmF0ZTsKIAlpbnQgICAgcmVhZHk7CiAJaW50ICAgIGRyOwogCWludCAgICBzbG90X3N0YXQ7CkBAIC04OSw5ICs4OSw5IEBACiAJCQl1OCByZWcsIHU4ICp2YWwpCiB7CiAJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHt7LmFkZHIgPSBhZHIsIC5mbGFncyA9IDAsCi0JCQkJICAgLmJ1ZiA9ICZyZWcsIC5sZW4gPSAxIH0sCisJCQkJICAgLmJ1ZiA9ICZyZWcsIC5sZW4gPSAxfSwKIAkJCQkgIHsuYWRkciA9IGFkciwgLmZsYWdzID0gSTJDX01fUkQsCi0JCQkJICAgLmJ1ZiA9IHZhbCwgLmxlbiA9IDEgfSB9OworCQkJCSAgIC5idWYgPSB2YWwsIC5sZW4gPSAxfSB9OwogCiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSAhPSAyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgaW4gaTJjX3JlYWRfcmVnXG4iKTsKQEAgLTEwNCw5ICsxMDQsOSBAQAogCQkgICAgdTggcmVnLCB1OCAqZGF0YSwgdTggbikKIHsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdID0ge3suYWRkciA9IGFkciwgLmZsYWdzID0gMCwKLQkJCQkgICAuYnVmID0gJnJlZywgLmxlbiA9IDEgfSwKLQkJCQkgIHsuYWRkciA9IGFkciwgLmZsYWdzID0gSTJDX01fUkQsCi0JCQkJICAgLmJ1ZiA9IGRhdGEsIC5sZW4gPSBuIH0gfTsKKwkJCQkgLmJ1ZiA9ICZyZWcsIC5sZW4gPSAxfSwKKwkJCQl7LmFkZHIgPSBhZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAuYnVmID0gZGF0YSwgLmxlbiA9IG59IH07CiAKIAlpZiAoaTJjX3RyYW5zZmVyKGFkYXB0ZXIsIG1zZ3MsIDIpICE9IDIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBpbiBpMmNfcmVhZFxuIik7CkBAIC0xMTksMTAgKzExOSwxMCBAQAogewogCWludCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBpMmNfd3JpdGVfcmVnKGNpLT5pMmMsIGNpLT5hZHIsIDAsIGFkcik7CisJc3RhdHVzID0gaTJjX3dyaXRlX3JlZyhjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgMCwgYWRyKTsKIAlpZiAoIXN0YXR1cykgewogCQljaS0+bGFzdGFkZHJlc3MgPSBhZHI7Ci0JCXN0YXR1cyA9IGkyY19yZWFkKGNpLT5pMmMsIGNpLT5hZHIsIDEsIGRhdGEsIG4pOworCQlzdGF0dXMgPSBpMmNfcmVhZChjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgMSwgZGF0YSwgbik7CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMzYsMjQgKzEzNiwyNCBAQAogc3RhdGljIGludCByZWFkX3BjY2FyZChzdHJ1Y3QgY3hkICpjaSwgdTE2IGFkZHJlc3MsIHU4ICpkYXRhLCB1OCBuKQogewogCWludCBzdGF0dXM7Ci0JdTggYWRkclszXSA9IHsgMiwgYWRkcmVzcyYweGZmLCBhZGRyZXNzPj44IH07CisJdTggYWRkclszXSA9IHsyLCBhZGRyZXNzICYgMHhmZiwgYWRkcmVzcyA+PiA4fTsKIAotCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+YWRyLCBhZGRyLCAzKTsKKwlzdGF0dXMgPSBpMmNfd3JpdGUoY2ktPmkyYywgY2ktPmNmZy5hZHIsIGFkZHIsIDMpOwogCWlmICghc3RhdHVzKQotCQlzdGF0dXMgPSBpMmNfcmVhZChjaS0+aTJjLCBjaS0+YWRyLCAzLCBkYXRhLCBuKTsKKwkJc3RhdHVzID0gaTJjX3JlYWQoY2ktPmkyYywgY2ktPmNmZy5hZHIsIDMsIGRhdGEsIG4pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfcGNjYXJkKHN0cnVjdCBjeGQgKmNpLCB1MTYgYWRkcmVzcywgdTggKmRhdGEsIHU4IG4pCiB7CiAJaW50IHN0YXR1czsKLQl1OCBhZGRyWzNdID0geyAyLCBhZGRyZXNzJjB4ZmYsIGFkZHJlc3M+PjggfTsKKwl1OCBhZGRyWzNdID0gezIsIGFkZHJlc3MgJiAweGZmLCBhZGRyZXNzID4+IDh9OwogCi0Jc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5hZHIsIGFkZHIsIDMpOworCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgYWRkciwgMyk7CiAJaWYgKCFzdGF0dXMpIHsKIAkJdTggYnVmWzI1Nl0gPSB7M307CiAJCW1lbWNweShidWYrMSwgZGF0YSwgbik7Ci0JCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+YWRyLCBidWYsIG4rMSk7CisJCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgYnVmLCBuKzEpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTYxLDM5ICsxNjEsNjQgQEAKIHN0YXRpYyBpbnQgcmVhZF9pbyhzdHJ1Y3QgY3hkICpjaSwgdTE2IGFkZHJlc3MsIHU4ICp2YWwpCiB7CiAJaW50IHN0YXR1czsKLQl1OCBhZGRyWzNdID0geyAyLCBhZGRyZXNzJjB4ZmYsIGFkZHJlc3M+PjggfTsKKwl1OCBhZGRyWzNdID0gezIsIGFkZHJlc3MgJiAweGZmLCBhZGRyZXNzID4+IDh9OwogCi0Jc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5hZHIsIGFkZHIsIDMpOworCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgYWRkciwgMyk7CiAJaWYgKCFzdGF0dXMpCi0JCXN0YXR1cyA9IGkyY19yZWFkKGNpLT5pMmMsIGNpLT5hZHIsIDMsIHZhbCwgMSk7CisJCXN0YXR1cyA9IGkyY19yZWFkKGNpLT5pMmMsIGNpLT5jZmcuYWRyLCAzLCB2YWwsIDEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfaW8oc3RydWN0IGN4ZCAqY2ksIHUxNiBhZGRyZXNzLCB1OCB2YWwpCiB7CiAJaW50IHN0YXR1czsKLQl1OCBhZGRyWzNdID0geyAyLCBhZGRyZXNzJjB4ZmYsIGFkZHJlc3M+PjggfTsKLQl1OCBidWZbMl0gPSB7IDMsIHZhbCB9OworCXU4IGFkZHJbM10gPSB7MiwgYWRkcmVzcyAmIDB4ZmYsIGFkZHJlc3MgPj4gOH07CisJdTggYnVmWzJdID0gezMsIHZhbH07CiAKLQlzdGF0dXMgPSBpMmNfd3JpdGUoY2ktPmkyYywgY2ktPmFkciwgYWRkciwgMyk7CisJc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5jZmcuYWRyLCBhZGRyLCAzKTsKIAlpZiAoIXN0YXR1cykKLQkJc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5hZHIsIGJ1ZiwgMik7Ci0KKwkJc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5jZmcuYWRyLCBidWYsIDIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKKyNpZiAwCitzdGF0aWMgaW50IHJlYWRfaW9fZGF0YShzdHJ1Y3QgY3hkICpjaSwgdTggKmRhdGEsIHU4IG4pCit7CisJaW50IHN0YXR1czsKKwl1OCBhZGRyWzNdID0geyAyLCAwLCAwIH07CisKKwlzdGF0dXMgPSBpMmNfd3JpdGUoY2ktPmkyYywgY2ktPmNmZy5hZHIsIGFkZHIsIDMpOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBpMmNfcmVhZChjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgMywgZGF0YSwgbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfaW9fZGF0YShzdHJ1Y3QgY3hkICpjaSwgdTggKmRhdGEsIHU4IG4pCit7CisJaW50IHN0YXR1czsKKwl1OCBhZGRyWzNdID0gezIsIDAsIDB9OworCisJc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5jZmcuYWRyLCBhZGRyLCAzKTsKKwlpZiAoIXN0YXR1cykgeworCQl1OCBidWZbMjU2XSA9IHszfTsKKwkJbWVtY3B5KGJ1ZisxLCBkYXRhLCBuKTsKKwkJc3RhdHVzID0gaTJjX3dyaXRlKGNpLT5pMmMsIGNpLT5jZmcuYWRyLCBidWYsIG4gKyAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogc3RhdGljIGludCB3cml0ZV9yZWdtKHN0cnVjdCBjeGQgKmNpLCB1OCByZWcsIHU4IHZhbCwgdTggbWFzaykKIHsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gaTJjX3dyaXRlX3JlZyhjaS0+aTJjLCBjaS0+YWRyLCAwLCByZWcpOworCXN0YXR1cyA9IGkyY193cml0ZV9yZWcoY2ktPmkyYywgY2ktPmNmZy5hZHIsIDAsIHJlZyk7CiAJaWYgKCFzdGF0dXMgJiYgcmVnID49IDYgJiYgcmVnIDw9IDggJiYgbWFzayAhPSAweGZmKQotCQlzdGF0dXMgPSBpMmNfcmVhZF9yZWcoY2ktPmkyYywgY2ktPmFkciwgMSwgJmNpLT5yZWdzW3JlZ10pOwotCWNpLT5yZWdzW3JlZ10gPSAoY2ktPnJlZ3NbcmVnXSYofm1hc2spKXx2YWw7CisJCXN0YXR1cyA9IGkyY19yZWFkX3JlZyhjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgMSwgJmNpLT5yZWdzW3JlZ10pOworCWNpLT5yZWdzW3JlZ10gPSAoY2ktPnJlZ3NbcmVnXSAmICh+bWFzaykpIHwgdmFsOwogCWlmICghc3RhdHVzKSB7CiAJCWNpLT5sYXN0YWRkcmVzcyA9IHJlZzsKLQkJc3RhdHVzID0gaTJjX3dyaXRlX3JlZyhjaS0+aTJjLCBjaS0+YWRyLCAxLCBjaS0+cmVnc1tyZWddKTsKKwkJc3RhdHVzID0gaTJjX3dyaXRlX3JlZyhjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgMSwgY2ktPnJlZ3NbcmVnXSk7CiAJfQogCWlmIChyZWcgPT0gMHgyMCkKIAkJY2ktPnJlZ3NbcmVnXSAmPSAweDdmOwpAQCAtMjExLDExICsyMzYsMTEgQEAKIAlpbnQgc3RhdHVzOwogCXU4IGJ1ZlsyNTZdID0gezF9OwogCi0Jc3RhdHVzID0gaTJjX3dyaXRlX3JlZyhjaS0+aTJjLCBjaS0+YWRyLCAwLCBhZHIpOworCXN0YXR1cyA9IGkyY193cml0ZV9yZWcoY2ktPmkyYywgY2ktPmNmZy5hZHIsIDAsIGFkcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJY2ktPmxhc3RhZGRyZXNzID0gYWRyOwotCQltZW1jcHkoYnVmKzEsIGRhdGEsIG4pOwotCQlzdGF0dXMgPSBpMmNfd3JpdGUoY2ktPmkyYywgY2ktPmFkciwgYnVmLCBuKzEpOworCQltZW1jcHkoYnVmICsgMSwgZGF0YSwgbik7CisJCXN0YXR1cyA9IGkyY193cml0ZShjaS0+aTJjLCBjaS0+Y2ZnLmFkciwgYnVmLCBuICsgMSk7CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yNDksMTIgKzI3NCwxNiBAQAogCQl3cml0ZV9yZWdtKGNpLCAweDIwLCAweDgwLCAweDgwKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAxOgorI2lmZGVmIEJVRkZFUl9NT0RFCisJCWlmICghY2ktPmVuLnJlYWRfZGF0YSkKKwkJCXJldHVybjsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZW5hYmxlIGNhbSBidWZmZXIgbW9kZVxuIik7CiAJCS8qIHdyaXRlX3JlZyhjaSwgMHgwZCwgMHgwMCk7ICovCiAJCS8qIHdyaXRlX3JlZyhjaSwgMHgwZSwgMHgwMSk7ICovCiAJCXdyaXRlX3JlZ20oY2ksIDB4MDgsIDB4NDAsIDB4NDApOwogCQkvKiByZWFkX3JlZyhjaSwgMHgxMiwgJmR1bW15KTsgKi8KIAkJd3JpdGVfcmVnbShjaSwgMHgwOCwgMHg4MCwgMHg4MCk7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yNjQsOCArMjkzLDYgQEAKIAogCiAKLSNkZWZpbmUgQ0hLX0VSUk9SKHMpIGlmICgoc3RhdHVzID0gcykpIGJyZWFrCi0KIHN0YXRpYyBpbnQgaW5pdChzdHJ1Y3QgY3hkICpjaSkKIHsKIAlpbnQgc3RhdHVzOwpAQCAtMjczLDYzICszMDAsMTYwIEBACiAJbXV0ZXhfbG9jaygmY2ktPmxvY2spOwogCWNpLT5tb2RlID0gLTE7CiAJZG8gewotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDAwLCAweDAwKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MDEsIDB4MDApKTsKLQkJQ0hLX0VSUk9SKHdyaXRlX3JlZyhjaSwgMHgwMiwgMHgxMCkpOwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDAzLCAweDAwKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MDUsIDB4RkYpKTsKLQkJQ0hLX0VSUk9SKHdyaXRlX3JlZyhjaSwgMHgwNiwgMHgxRikpOwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDA3LCAweDFGKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MDgsIDB4MjgpKTsKLQkJQ0hLX0VSUk9SKHdyaXRlX3JlZyhjaSwgMHgxNCwgMHgyMCkpOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDAsIDB4MDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDEsIDB4MDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDIsIDB4MTApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDMsIDB4MDApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDUsIDB4RkYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDYsIDB4MUYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDcsIDB4MUYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDgsIDB4MjgpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MTQsIDB4MjApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOwogCi0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MDksIDB4NEQpKTsgLyogSW5wdXQgTW9kZSBDLCBCWVBhc3MgU2VyaWFsLCBUSVZBTCA9IGxvdywgTVNCICovCi0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MEEsIDB4QTcpKTsgLyogVE9TVFJUID0gOCwgTW9kZSBCIChnYXRlZCBjbG9jayksIGZhbGxpbmcgRWRnZSwgU2VyaWFsLCBQT0w9SElHSCwgTVNCICovCi0KLQkJLyogU3luYyBkZXRlY3RvciAqLwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDBCLCAweDMzKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MEMsIDB4MzMpKTsKLQotCQlDSEtfRVJST1Iod3JpdGVfcmVnbShjaSwgMHgxNCwgMHgwMCwgMHgwRikpOwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDE1LCBjaS0+Y2xrX3JlZ19iKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWdtKGNpLCAweDE2LCAweDAwLCAweDBGKSk7Ci0JCUNIS19FUlJPUih3cml0ZV9yZWcoY2ksIDB4MTcsIGNpLT5jbGtfcmVnX2YpKTsKLQotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDIwLCAweDI4KSk7IC8qIEludGVnZXIgRGl2aWRlciwgRmFsbGluZyBFZGdlLCBJbnRlcm5hbCBTeW5jLCAqLwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDIxLCAweDAwKSk7IC8qIE1DTEtJID0gVElDTEsvOCAqLwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDIyLCAweDA3KSk7IC8qIE1DTEtJID0gVElDTEsvOCAqLwotCi0KLQkJQ0hLX0VSUk9SKHdyaXRlX3JlZ20oY2ksIDB4MjAsIDB4ODAsIDB4ODApKTsgLyogUmVzZXQgQ0FNIHN0YXRlIG1hY2hpbmUgKi8KLQotCQlDSEtfRVJST1Iod3JpdGVfcmVnbShjaSwgMHgwMywgMHgwMiwgMDIpKTsgIC8qIEVuYWJsZSBJUkVRQSBJbnRlcnJ1cHQgKi8KLQkJQ0hLX0VSUk9SKHdyaXRlX3JlZyhjaSwgMHgwMSwgMHgwNCkpOyAgLyogRW5hYmxlIENEIEludGVycnVwdCAqLwotCQlDSEtfRVJST1Iod3JpdGVfcmVnKGNpLCAweDAwLCAweDMxKSk7ICAvKiBFbmFibGUgVFMxLEhvdCBTd2FwLFNsb3QgQSAqLwotCQlDSEtfRVJST1Iod3JpdGVfcmVnbShjaSwgMHgwOSwgMHgwOCwgMHgwOCkpOyAgLyogUHV0IFRTIGluIGJ5cGFzcyAqLwotCQljaS0+Y2FtbW9kZSA9IC0xOwotI2lmZGVmIEJVRkZFUl9NT0RFCi0JCWNhbV9tb2RlKGNpLCAwKTsKKyNpZiAwCisJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgwOSwgMHg0RCk7IC8qIElucHV0IE1vZGUgQywgQllQYXNzIFNlcmlhbCwgVElWQUwgPSBsb3csIE1TQiAqLworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOwogI2VuZGlmCisJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgwQSwgMHhBNyk7IC8qIFRPU1RSVCA9IDgsIE1vZGUgQiAoZ2F0ZWQgY2xvY2spLCBmYWxsaW5nIEVkZ2UsIFNlcmlhbCwgUE9MPUhJR0gsIE1TQiAqLworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgwQiwgMHgzMyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgwQywgMHgzMyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisKKwkJc3RhdHVzID0gd3JpdGVfcmVnbShjaSwgMHgxNCwgMHgwMCwgMHgwRik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgxNSwgY2ktPmNsa19yZWdfYik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IHdyaXRlX3JlZ20oY2ksIDB4MTYsIDB4MDAsIDB4MEYpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MTcsIGNpLT5jbGtfcmVnX2YpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChjaS0+Y2ZnLmNsb2NrX21vZGUpIHsKKwkJCWlmIChjaS0+Y2ZnLnBvbGFyaXR5KSB7CisJCQkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDA5LCAweDZmKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgwOSwgMHg2ZCk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDIwLCAweDY4KTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDIxLCAweDAwKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDIyLCAweDAyKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKGNpLT5jZmcucG9sYXJpdHkpIHsKKwkJCQlzdGF0dXMgPSB3cml0ZV9yZWcoY2ksIDB4MDksIDB4NGYpOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDA5LCAweDRkKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgyMCwgMHgyOCk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgyMSwgMHgwMCk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IHdyaXRlX3JlZyhjaSwgMHgyMiwgMHgwNyk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCisJCXN0YXR1cyA9IHdyaXRlX3JlZ20oY2ksIDB4MjAsIDB4ODAsIDB4ODApOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSB3cml0ZV9yZWdtKGNpLCAweDAzLCAweDAyLCAweDAyKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDAxLCAweDA0KTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKwkJc3RhdHVzID0gd3JpdGVfcmVnKGNpLCAweDAwLCAweDMxKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQkvKiBQdXQgVFMgaW4gYnlwYXNzICovCisJCXN0YXR1cyA9IHdyaXRlX3JlZ20oY2ksIDB4MDksIDB4MDgsIDB4MDgpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQljaS0+Y2FtbW9kZSA9IC0xOworCQljYW1fbW9kZShjaSwgMCk7CiAJfSB3aGlsZSAoMCk7CiAJbXV0ZXhfdW5sb2NrKCZjaS0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHJlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAogCQkJICAgICAgaW50IHNsb3QsIGludCBhZGRyZXNzKQogewogCXN0cnVjdCBjeGQgKmNpID0gY2EtPmRhdGE7CisjaWYgMAorCWlmIChjaS0+YW1lbV9yZWFkKSB7CisJCWlmIChhZGRyZXNzIDw9IDAgfHwgYWRkcmVzcyA+IDEwMjQpCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIGNpLT5hbWVtW2FkZHJlc3NdOworCX0KKworCW11dGV4X2xvY2soJmNpLT5sb2NrKTsKKwl3cml0ZV9yZWdtKGNpLCAweDA2LCAweDAwLCAweDA1KTsKKwlyZWFkX3BjY2FyZChjaSwgMCwgJmNpLT5hbWVtWzBdLCAxMjgpOworCXJlYWRfcGNjYXJkKGNpLCAxMjgsICZjaS0+YW1lbVswXSwgMTI4KTsKKwlyZWFkX3BjY2FyZChjaSwgMjU2LCAmY2ktPmFtZW1bMF0sIDEyOCk7CisJcmVhZF9wY2NhcmQoY2ksIDM4NCwgJmNpLT5hbWVtWzBdLCAxMjgpOworCXdyaXRlX3JlZ20oY2ksIDB4MDYsIDB4MDUsIDB4MDUpOworCW11dGV4X3VubG9jaygmY2ktPmxvY2spOworCXJldHVybiBjaS0+YW1lbVthZGRyZXNzXTsKKyNlbHNlCiAJdTggdmFsOwogCW11dGV4X2xvY2soJmNpLT5sb2NrKTsKIAlzZXRfbW9kZShjaSwgMSk7CiAJcmVhZF9wY2NhcmQoY2ksIGFkZHJlc3MsICZ2YWwsIDEpOwogCW11dGV4X3VubG9jaygmY2ktPmxvY2spOworCS8qIHByaW50ayhLRVJOX0lORk8gIiUwMng6JTAyeFxuIiwgYWRkcmVzcyx2YWwpOyAqLwogCXJldHVybiB2YWw7CisjZW5kaWYKIH0KIAotCiBzdGF0aWMgaW50IHdyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QsCiAJCQkgICAgICAgaW50IGFkZHJlc3MsIHU4IHZhbHVlKQogewpAQCAtMzcyLDYgKzQ5NiwxNSBAQAogCXN0cnVjdCBjeGQgKmNpID0gY2EtPmRhdGE7CiAKIAltdXRleF9sb2NrKCZjaS0+bG9jayk7CisjaWYgMAorCXdyaXRlX3JlZyhjaSwgMHgwMCwgMHgyMSk7CisJd3JpdGVfcmVnKGNpLCAweDA2LCAweDFGKTsKKwl3cml0ZV9yZWcoY2ksIDB4MDAsIDB4MzEpOworI2Vsc2UKKyNpZiAwCisJd3JpdGVfcmVnKGNpLCAweDA2LCAweDFGKTsKKwl3cml0ZV9yZWcoY2ksIDB4MDYsIDB4MkYpOworI2Vsc2UKIAljYW1fbW9kZShjaSwgMCk7CiAJd3JpdGVfcmVnKGNpLCAweDAwLCAweDIxKTsKIAl3cml0ZV9yZWcoY2ksIDB4MDYsIDB4MUYpOwpAQCAtMzc5LDEzICs1MTIsMjUgQEAKIAl3cml0ZV9yZWdtKGNpLCAweDIwLCAweDgwLCAweDgwKTsKIAl3cml0ZV9yZWcoY2ksIDB4MDMsIDB4MDIpOwogCWNpLT5yZWFkeSA9IDA7CisjZW5kaWYKKyNlbmRpZgogCWNpLT5tb2RlID0gLTE7CiAJewogCQlpbnQgaTsKKyNpZiAwCisJCXU4IHZhbDsKKyNlbmRpZgogCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJCW1zbGVlcCgxMCk7CisjaWYgMAorCQkJcmVhZF9yZWcoY2ksIDB4MDYsICZ2YWwpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJWQ6JTAyeFxuIiwgaSwgdmFsKTsKKwkJCWlmICghKHZhbCYweDEwKSkKKwkJCQlicmVhazsKKyNlbHNlCiAJCQlpZiAoY2ktPnJlYWR5KQogCQkJCWJyZWFrOworI2VuZGlmCiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjaS0+bG9jayk7CkBAIC0zOTksMTIgKzU0NCwxMiBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAic2xvdF9zaHV0ZG93blxuIik7CiAJbXV0ZXhfbG9jaygmY2ktPmxvY2spOwotCS8qIHdyaXRlX3JlZ20oY2ksIDB4MDksIDB4MDgsIDB4MDgpOyAqLwotCXdyaXRlX3JlZ20oY2ksIDB4MjAsIDB4ODAsIDB4ODApOwotCXdyaXRlX3JlZ20oY2ksIDB4MDYsIDB4MDcsIDB4MDcpOworCXdyaXRlX3JlZ20oY2ksIDB4MDksIDB4MDgsIDB4MDgpOworCXdyaXRlX3JlZ20oY2ksIDB4MjAsIDB4ODAsIDB4ODApOyAvKiBSZXNldCBDQU0gTW9kZSAqLworCXdyaXRlX3JlZ20oY2ksIDB4MDYsIDB4MDcsIDB4MDcpOyAvKiBDbGVhciBJTyBNb2RlICovCiAJY2ktPm1vZGUgPSAtMTsKIAltdXRleF91bmxvY2soJmNpLT5sb2NrKTsKLQlyZXR1cm4gMDsgLyogc2h1dGRvd24oY2kpOyAqLworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNsb3RfdHNfZW5hYmxlKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQpAQCAtNDU5LDcgKzYwNCw2IEBACiAJCWlmIChpc3RhdCY4ICYmIGNpLT5zbG90X3N0YXQgPT0gRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUFJFU0VOVCkgewogCQkJY2ktPnJlYWR5ID0gMTsKIAkJCWNpLT5zbG90X3N0YXQgfD0gRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUkVBRFk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJSRUFEWVxuIik7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC01MTAsNyArNjU0LDcgQEAKIAlzdHJ1Y3QgY3hkICpjaSA9IGNhLT5kYXRhOwogCiAJbXV0ZXhfbG9jaygmY2ktPmxvY2spOwotCXByaW50ayhLRVJOX0lORk8gIndyaXRlX2RhdGEgJWRcbiIsIGVjb3VudCk7CisJcHJpbnRrKGtlcm5fSU5GTyAid3JpdGVfZGF0YSAlZFxuIiwgZWNvdW50KTsKIAl3cml0ZV9yZWcoY2ksIDB4MGQsIGVjb3VudD4+OCk7CiAJd3JpdGVfcmVnKGNpLCAweDBlLCBlY291bnQmMHhmZik7CiAJd3JpdGVfYmxvY2soY2ksIDB4MTEsIGVidWYsIGVjb3VudCk7CkBAIC01MzUsMTUgKzY3OSwxNSBAQAogCiB9OwogCi1zdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmN4ZDIwOTlfYXR0YWNoKHU4IGFkciwgdm9pZCAqcHJpdiwKK3N0cnVjdCBkdmJfY2FfZW41MDIyMSAqY3hkMjA5OV9hdHRhY2goc3RydWN0IGN4ZDIwOTlfY2ZnICpjZmcsCisJCQkJICAgICAgdm9pZCAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3QgY3hkICpjaSA9IDA7Ci0JdTMyIGJpdHJhdGUgPSA2MjAwMDAwMDsKIAl1OCB2YWw7CiAKLQlpZiAoaTJjX3JlYWRfcmVnKGkyYywgYWRyLCAwLCAmdmFsKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJObyBDWEQyMDk5IGRldGVjdGVkIGF0ICUwMnhcbiIsIGFkcik7CisJaWYgKGkyY19yZWFkX3JlZyhpMmMsIGNmZy0+YWRyLCAwLCAmdmFsKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gQ1hEMjA5OSBkZXRlY3RlZCBhdCAlMDJ4XG4iLCBjZmctPmFkcik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTUzLDIxICs2OTcsMjAgQEAKIAltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKIAogCW11dGV4X2luaXQoJmNpLT5sb2NrKTsKKwltZW1jcHkoJmNpLT5jZmcsIGNmZywgc2l6ZW9mKHN0cnVjdCBjeGQyMDk5X2NmZykpOwogCWNpLT5pMmMgPSBpMmM7Ci0JY2ktPmFkciA9IGFkcjsKIAljaS0+bGFzdGFkZHJlc3MgPSAweGZmOwogCWNpLT5jbGtfcmVnX2IgPSAweDRhOwogCWNpLT5jbGtfcmVnX2YgPSAweDFiOwotCWNpLT5iaXRyYXRlID0gYml0cmF0ZTsKIAogCW1lbWNweSgmY2ktPmVuLCAmZW5fdGVtcGwsIHNpemVvZihlbl90ZW1wbCkpOwogCWNpLT5lbi5kYXRhID0gY2k7CiAJaW5pdChjaSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQXR0YWNoZWQgQ1hEMjA5OUFSIGF0ICUwMnhcbiIsIGNpLT5hZHIpOworCXByaW50ayhLRVJOX0lORk8gIkF0dGFjaGVkIENYRDIwOTlBUiBhdCAlMDJ4XG4iLCBjaS0+Y2ZnLmFkcik7CiAJcmV0dXJuICZjaS0+ZW47CiB9CiBFWFBPUlRfU1lNQk9MKGN4ZDIwOTlfYXR0YWNoKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJjeGQyMDk5Iik7Ci1NT0RVTEVfQVVUSE9SKCJSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPiIpOworTU9EVUxFX0FVVEhPUigiUmFscGggTWV0emxlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4ZDIwOTkvY3hkMjA5OS5oIGIvZHJpdmVycy9zdGFnaW5nL2N4ZDIwOTkvY3hkMjA5OS5oCmluZGV4IGJlZDU0ZmYuLjE5YzU4OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeGQyMDk5L2N4ZDIwOTkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3hkMjA5OS9jeGQyMDk5LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogY3hkMjA5OS5oOiBEcml2ZXIgZm9yIHRoZSBDWEQyMDk5QVIgQ29tbW9uIEludGVyZmFjZSBDb250cm9sbGVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDEwIERpZ2l0YWxEZXZpY2VzIFVHCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBEaWdpdGFsIERldmljZXMgR21iSAogICoKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNywxMSArMjcsMjEgQEAKIAogI2luY2x1ZGUgPGR2Yl9jYV9lbjUwMjIxLmg+CiAKK3N0cnVjdCBjeGQyMDk5X2NmZyB7CisJdTMyIGJpdHJhdGU7CisJdTggIGFkcjsKKwl1OCAgcG9sYXJpdHk6MTsKKwl1OCAgY2xvY2tfbW9kZToxOworfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWEQyMDk5KSB8fCBcCi0gICAgICAgIChkZWZpbmVkKENPTkZJR19EVkJfQ1hEMjA5OV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLXN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY3hkMjA5OV9hdHRhY2godTggYWRyLCB2b2lkICpwcml2LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisJKGRlZmluZWQoQ09ORklHX0RWQl9DWEQyMDk5X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjeGQyMDk5X2F0dGFjaChzdHJ1Y3QgY3hkMjA5OV9jZmcgKmNmZywKKwkJCQkgICAgICB2b2lkICpwcml2LCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmN4ZDIwOTlfYXR0YWNoKHU4IGFkciwgdm9pZCAqcHJpdiwgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjeGQyMDk5X2F0dGFjaChzdHJ1Y3QgY3hkMjA5OV9jZmcgKmNmZywKKwkJCQkJdm9pZCAqcHJpdiwgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL2R0MzE1NXY0bC5jIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYwppbmRleCBmZTAyZDIyLi4wNWFhNDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL2R0MzE1NXY0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTV2NGwvZHQzMTU1djRsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKaW5kZXggNjI3YTk4Yi4uOWU3MjhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJmdDEwMDAuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9nZW1fZ2x1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9nZW1fZ2x1ZS5jCmluZGV4IDc3OWFjMWEuLmRhYWMxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvZ2VtX2dsdWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL2dlbV9nbHVlLmMKQEAgLTIwLDI2ICsyMCw2IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtLmg+CiAKLS8qKgotICogSW5pdGlhbGl6ZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBHRU0gb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSB3aXRoCi0gKiBubyBHRU0gcHJvdmlkZWQgYmFja2luZyBzdG9yZS4gSW5zdGVhZCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgotICogYmFja2luZyB0aGUgb2JqZWN0IGFuZCBoYW5kbGluZyBpdC4KLSAqLwotaW50IGRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHNpemVfdCBzaXplKQotewotCUJVR19PTigoc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCk7Ci0KLQlvYmotPmRldiA9IGRldjsKLQlvYmotPmZpbHAgPSBOVUxMOwotCi0Ja3JlZl9pbml0KCZvYmotPnJlZmNvdW50KTsKLQlhdG9taWNfc2V0KCZvYmotPmhhbmRsZV9jb3VudCwgMCk7Ci0Jb2JqLT5zaXplID0gc2l6ZTsKLQotCXJldHVybiAwOwotfQotCiB2b2lkIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Vfd3JhcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAkvKiBSZW1vdmUgdGhlIGxpc3QgbWFwIGlmIG9uZSBpcyBwcmVzZW50ICovCkBAIC01MSw4ICszMSw3IEBACiAJCWtmcmVlKGxpc3QtPm1hcCk7CiAJCWxpc3QtPm1hcCA9IE5VTEw7CiAJfQotCWlmIChvYmotPmZpbHApCi0JCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9nZW1fZ2x1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9nZW1fZ2x1ZS5oCmluZGV4IGEwZjJiYzQuLmNlNWNlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvZ2VtX2dsdWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL2dlbV9nbHVlLmgKQEAgLTEsNCArMSwyIEBACiBleHRlcm4gdm9pZCBkcm1fZ2VtX29iamVjdF9yZWxlYXNlX3dyYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotZXh0ZXJuIGludCBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IGdlbV9jcmVhdGVfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tZGZsZF9kc2lfZGJpLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuYwppbmRleCAwMmUxN2M5Li5mZDIxMWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuYwpAQCAtNzExLDEwICs3MTEsMTEgQEAKIAkvKiBDcmVhdGUgZHJtIGVuY29kZXIgb2JqZWN0ICovCiAJY29ubmVjdG9yID0gJmRzaV9jb25uZWN0b3ItPmJhc2UuYmFzZTsKIAllbmNvZGVyID0gJmRiaV9vdXRwdXQtPmJhc2UuYmFzZTsKKwkvKiBSZXZpZXcgdGhpcyBpZiB3ZSBldmVyIGdldCBNSVBJLUhETUkgYnJpZGdlcyBvciBzaW1pbGFyICovCiAJZHJtX2VuY29kZXJfaW5pdChkZXYsCiAJCQllbmNvZGVyLAogCQkJcF9mdW5jcy0+ZW5jb2Rlcl9mdW5jcywKLQkJCURSTV9NT0RFX0VOQ09ERVJfTUlQSSk7CisJCQlEUk1fTU9ERV9FTkNPREVSX0xWRFMpOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwgcF9mdW5jcy0+ZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwogCiAJLyogQXR0YWNoIHRvIGdpdmVuIGNvbm5lY3RvciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tZGZsZF9kc2lfZGJpLmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuaAppbmRleCBkYzYyNDJjLi5mMGZhOTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kYmkuaApAQCAtNDIsOSArNDIsNiBAQAogI2luY2x1ZGUgIm1kZmxkX2RzaV9vdXRwdXQuaCIKICNpbmNsdWRlICJtZGZsZF9vdXRwdXQuaCIKIAotI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX01JUEkgIDUKLQotCiAvKgogICogREJJIGVuY29kZXIgd2hpY2ggaW5oZXJpdHMgZnJvbSBtZGZsZF9kc2lfZW5jb2RlcgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9kcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCmluZGV4IDZlMDNhOTEuLmU2ODVmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX2RwaS5jCkBAIC03NzcsMTAgKzc3NywxNSBAQAogCS8qIENyZWF0ZSBkcm0gZW5jb2RlciBvYmplY3QgKi8KIAljb25uZWN0b3IgPSAmZHNpX2Nvbm5lY3Rvci0+YmFzZS5iYXNlOwogCWVuY29kZXIgPSAmZHBpX291dHB1dC0+YmFzZS5iYXNlOworCS8qCisJICogT24gZXhpc3RpbmcgaGFyZHdhcmUgdGhpcyB3aWxsIGJlIGEgcGFuZWwgb2Ygc29tZSBmb3JtLAorCSAqIGlmIGZ1dHVyZSBkZXZpY2VzIGFsc28gaGF2ZSBIRE1JIGJyaWRnZXMgdGhpcyB3aWxsIG5lZWQKKwkgKiByZXZpc2l0aW5nCisJICovCiAJZHJtX2VuY29kZXJfaW5pdChkZXYsCiAJCQllbmNvZGVyLAogCQkJcF9mdW5jcy0+ZW5jb2Rlcl9mdW5jcywKLQkJCURSTV9NT0RFX0VOQ09ERVJfTUlQSSk7CisJCQlEUk1fTU9ERV9FTkNPREVSX0xWRFMpOwogCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2RlciwKIAkJCQlwX2Z1bmNzLT5lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CiAJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21kZmxkX2RzaV9vdXRwdXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5jCmluZGV4IDc1MzYwOTUuLjkwNTBjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWRmbGRfZHNpX291dHB1dC5jCkBAIC05NTUsNyArOTU1LDkgQEAKIAlwc2Jfb3V0cHV0LT50eXBlID0gKHBpcGUgPT0gMCkgPyBJTlRFTF9PVVRQVVRfTUlQSSA6IElOVEVMX09VVFBVVF9NSVBJMjsKIAogCWNvbm5lY3RvciA9ICZwc2Jfb3V0cHV0LT5iYXNlOwotCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJm1kZmxkX2RzaV9jb25uZWN0b3JfZnVuY3MsIERSTV9NT0RFX0NPTk5FQ1RPUl9NSVBJKTsKKwkvKiBSZXZpc2l0IHR5cGUgaWYgTUlQSS9IRE1JIGJyaWRnZXMgZXZlciBhcHBlYXIgb24gTWVkZmllbGQgKi8KKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZtZGZsZF9kc2lfY29ubmVjdG9yX2Z1bmNzLAorCQkJCQkJRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpOwogCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZtZGZsZF9kc2lfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAJCiAJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21lZGZpZWxkLmggYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL21lZGZpZWxkLmgKaW5kZXggMzgxNjVlOC4uMDllOTY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9tZWRmaWVsZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvbWVkZmllbGQuaApAQCAtMjEsOCArMjEsNiBAQAogICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLSNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9NSVBJICA1Ci0KIC8qIE1lZGZpZWxkIERTSSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCiAjZGVmaW5lIE1JUElBX0RFVklDRV9SRUFEWV9SRUcJCQkJMHhiMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5oCmluZGV4IDcyZjQ4N2EuLmZkNDczMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5oCkBAIC0zNSw3ICszNSw2IEBACiAKIC8qIEFwcGVuZCBuZXcgZHJtIG1vZGUgZGVmaW5pdGlvbiBoZXJlLCBhbGlnbiB3aXRoIGxpYmRybSBkZWZpbml0aW9uICovCiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PX1NDQUxFICAgCTIKLSNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX01JUEkgICAgICAgICAxNQogCiBlbnVtIHsKIAlDSElQX1BTQl84MTA4ID0gMCwJCS8qIFBvdWxzYm8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IDM2MTI1NzQuLmQyODZiMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAKIAlwYWdlX2J1ZiA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYWdlX2J1ZikgewotCQlrbWVtX2NhY2hlX2ZyZWUoYmxrdnNjX3JlcS0+ZGV2LT5yZXF1ZXN0X3Bvb2wsIGJsa3ZzY19yZXEpOworCQlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIGJsa3ZzY19yZXEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyMiw3ICs0MjIsNyBAQAogCiAJX19mcmVlX3BhZ2UocGFnZV9idWYpOwogCi0Ja21lbV9jYWNoZV9mcmVlKGJsa3ZzY19yZXEtPmRldi0+cmVxdWVzdF9wb29sLCBibGt2c2NfcmVxKTsKKwlrbWVtX2NhY2hlX2ZyZWUoYmxrZGV2LT5yZXF1ZXN0X3Bvb2wsIGJsa3ZzY19yZXEpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzX2NvcmUuYwppbmRleCBiZjE5ODg4Li5jZjVkMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwM19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDNfY29yZS5jCkBAIC0zMTEsMTMgKzMxMSwxNyBAQAogCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJYWRkciA9IGFkaXMxNjIwM19hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMF07CiAJCXJldCA9IGFkaXMxNjIwM19zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCiAJCWlmICh2YWwxNiAmIEFESVMxNjIwM19FUlJPUl9BQ1RJVkUpIHsKIAkJCXJldCA9IGFkaXMxNjIwM19jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKLQkJCWlmIChyZXQpCisJCQlpZiAocmV0KSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAJCXZhbDE2ID0gdmFsMTYgJiAoKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDEpOwogCQlpZiAoY2hhbi0+c2Nhbl90eXBlLnNpZ24gPT0gJ3MnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDRfY29yZS5jCmluZGV4IGNmZDA5YjMuLjNlMmI2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA0X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwNF9jb3JlLmMKQEAgLTM0MSwxMyArMzQxLDE3IEBACiAJCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCQlhZGRyID0gYWRpczE2MjA0X2FkZHJlc3Nlc1tjaGFuLT5hZGRyZXNzXVswXTsKIAkJcmV0ID0gYWRpczE2MjA0X3NwaV9yZWFkX3JlZ18xNihpbmRpb19kZXYsIGFkZHIsICZ2YWwxNik7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAKIAkJaWYgKHZhbDE2ICYgQURJUzE2MjA0X0VSUk9SX0FDVElWRSkgewogCQkJcmV0ID0gYWRpczE2MjA0X2NoZWNrX3N0YXR1cyhpbmRpb19kZXYpOwotCQkJaWYgKHJldCkKKwkJCWlmIChyZXQpIHsKKwkJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAkJdmFsMTYgPSB2YWwxNiAmICgoMSA8PCBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpIC0gMSk7CiAJCWlmIChjaGFuLT5zY2FuX3R5cGUuc2lnbiA9PSAncycpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMKaW5kZXggNTVmM2E3Yi4uYmVjMWZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X2NvcmUuYwpAQCAtMzM3LDEzICszMzcsMTcgQEAKIAkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJCWFkZHIgPSBhZGlzMTYyMDlfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOwogCQlyZXQgPSBhZGlzMTYyMDlfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJCXJldHVybiByZXQ7CisJCX0KIAogCQlpZiAodmFsMTYgJiBBRElTMTYyMDlfRVJST1JfQUNUSVZFKSB7CiAJCQlyZXQgPSBhZGlzMTYyMDlfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7Ci0JCQlpZiAocmV0KQorCQkJaWYgKHJldCkgeworCQkJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogCQl2YWwxNiA9IHZhbDE2ICYgKCgxIDw8IGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykgLSAxKTsKIAkJaWYgKGNoYW4tPnNjYW5fdHlwZS5zaWduID09ICdzJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYwppbmRleCA0YTRlYWZjLi5hZWU4YjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfY29yZS5jCkBAIC0zNzAsMTMgKzM3MCwxNyBAQAogCQltdXRleF9sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJYWRkciA9IGFkaXMxNjI0MF9hZGRyZXNzZXNbY2hhbi0+YWRkcmVzc11bMF07CiAJCXJldCA9IGFkaXMxNjI0MF9zcGlfcmVhZF9yZWdfMTYoaW5kaW9fZGV2LCBhZGRyLCAmdmFsMTYpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmluZGlvX2Rldi0+bWxvY2spOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCiAJCWlmICh2YWwxNiAmIEFESVMxNjI0MF9FUlJPUl9BQ1RJVkUpIHsKIAkJCXJldCA9IGFkaXMxNjI0MF9jaGVja19zdGF0dXMoaW5kaW9fZGV2KTsKLQkJCWlmIChyZXQpCisJCQlpZiAocmV0KSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAJCXZhbDE2ID0gdmFsMTYgJiAoKDEgPDwgY2hhbi0+c2Nhbl90eXBlLnJlYWxiaXRzKSAtIDEpOwogCQlpZiAoY2hhbi0+c2Nhbl90eXBlLnNpZ24gPT0gJ3MnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYwppbmRleCAwNTc5N2Y0Li5mMmQ0M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX2NvcmUuYwpAQCAtNDQ2LDEzICs0NDYsMTcgQEAKIAkJbXV0ZXhfbG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJCWFkZHIgPSBhZGlzMTYyNjBfYWRkcmVzc2VzW2NoYW4tPmFkZHJlc3NdWzBdOwogCQlyZXQgPSBhZGlzMTYyNjBfc3BpX3JlYWRfcmVnXzE2KGluZGlvX2RldiwgYWRkciwgJnZhbDE2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfdW5sb2NrKCZpbmRpb19kZXYtPm1sb2NrKTsKIAkJCXJldHVybiByZXQ7CisJCX0KIAogCQlpZiAodmFsMTYgJiBBRElTMTYyNjBfRVJST1JfQUNUSVZFKSB7CiAJCQlyZXQgPSBhZGlzMTYyNjBfY2hlY2tfc3RhdHVzKGluZGlvX2Rldik7Ci0JCQlpZiAocmV0KQorCQkJaWYgKHJldCkgeworCQkJCW11dGV4X3VubG9jaygmaW5kaW9fZGV2LT5tbG9jayk7CiAJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogCQl2YWwxNiA9IHZhbDE2ICYgKCgxIDw8IGNoYW4tPnNjYW5fdHlwZS5yZWFsYml0cykgLSAxKTsKIAkJaWYgKGNoYW4tPnNjYW5fdHlwZS5zaWduID09ICdzJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9UT0RPCmluZGV4IDc3YjQ3ZjcuLjY0OWQ2YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvVE9ETwpAQCAtNCw1ICs0LDcgQEAKIAktIGFkZCBjb21waWxlIGFzIG1vZHVsZSBzdXBwb3J0CiAJLSBtb3ZlIG52ZWMgZGV2aWNlcyB0byBtZmQgY2VsbHM/CiAJLSBhZGp1c3QgdG8ga2VybmVsIHN0eWxlCi0KLQorCS0gZml4IGNsayB1c2FnZQorCSAgc2hvdWxkIG5vdCBiZSB1c2luZyBjbGtfZ2V0X3N5cygpLCBidXQgY2xrX2dldCgmcGRldi0+ZGV2LCBjb25uKQorCSAgd2hlcmUgY29ubiBpcyBlaXRoZXIgTlVMTCBpZiB0aGUgZGV2aWNlIG9ubHkgaGFzIG9uZSBjbG9jaywgb3IKKwkgIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbmFtZSBpZiBpdCBoYXMgbXVsdGlwbGUgY2xvY2tzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCmluZGV4IDljMGQyOTMuLmMzZDczZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKQEAgLTI2LDYgKzI2LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKaW5kZXggOTcwODI1NC4uZDBlMmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCkBAIC0yNiw2ICsyNiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMKaW5kZXggNjc2NmY0Ni4uNGJiNWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmUuYwpAQCAtMzk5LDEwICszOTksNyBAQAogCiB9CiAKLQotCi0KLQotCi0KK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MlUvYm9vdC5pbWciKTsKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MlUvbWFpbi5pbWciKTsKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MlUvZGF0YS5pbWciKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guYwppbmRleCA1ZmY1OWYyLi4xNmM3M2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guYwpAQCAtNjYsMTIgKzY2LDYgQEAKIG1vZHVsZV9wYXJhbShtc2lfZW4sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhtc2lfZW4sICJlbmFibGUgbXNpIik7CiAKLS8qIFRoZXNlIGFyZSB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIGRvZXNuJ3QgdW5sb2FkIGJlZm9yZSBhbGwgdGhlCi0gKiB0aHJlYWRzIGhhdmUgZXhpdGVkLgotICovCi1zdGF0aWMgYXRvbWljX3QgdG90YWxfdGhyZWFkcyA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTih0aHJlYWRzX2dvbmUpOwotCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRzeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTIsNyArMTg2LDcgQEAKIAkvKiBlbnF1ZXVlIHRoZSBjb21tYW5kIGFuZCB3YWtlIHVwIHRoZSBjb250cm9sIHRocmVhZCAqLwogCXNyYi0+c2NzaV9kb25lID0gZG9uZTsKIAljaGlwLT5zcmIgPSBzcmI7Ci0JdXAoJihkZXYtPnNlbWEpKTsKKwljb21wbGV0ZSgmZGV2LT5jbW5kX3JlYWR5KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc1LDcgKzQ2OSw3IEBACiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAKIAlmb3IgKDs7KSB7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+c2VtYSkpCisJCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmRldi0+Y21uZF9yZWFkeSkpCiAJCQlicmVhazsKIAogCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KQEAgLTU1Nyw4ICs1NTEsNiBAQAogCQltdXRleF91bmxvY2soJmRldi0+ZGV2X211dGV4KTsKIAl9IC8qIGZvciAoOzspICovCiAKLQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCiAJLyogbm90aWZ5IHRoZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdwogCSAqCiAJICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKQEAgLTU3Myw3ICs1NjUsNyBAQAogCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKIAkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCiAJICovCi0JY29tcGxldGVfYW5kX2V4aXQoJnRocmVhZHNfZ29uZSwgMCk7CisJY29tcGxldGVfYW5kX2V4aXQoJmRldi0+Y29udHJvbF9leGl0LCAwKTsKIH0KIAogCkBAIC01ODEsNyArNTczLDYgQEAKIHsKIAlzdHJ1Y3QgcnRzeF9kZXYgKmRldiA9IChzdHJ1Y3QgcnRzeF9kZXYgKilfX2RldjsKIAlzdHJ1Y3QgcnRzeF9jaGlwICpjaGlwID0gZGV2LT5jaGlwOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBydHN4X3RvX2hvc3QoZGV2KTsKIAlzdHJ1Y3Qgc2RfaW5mbyAqc2RfY2FyZCA9ICYoY2hpcC0+c2RfY2FyZCk7CiAJc3RydWN0IHhkX2luZm8gKnhkX2NhcmQgPSAmKGNoaXAtPnhkX2NhcmQpOwogCXN0cnVjdCBtc19pbmZvICptc19jYXJkID0gJihjaGlwLT5tc19jYXJkKTsKQEAgLTYyMSw4ICs2MTIsNyBAQAogCQltdXRleF91bmxvY2soJmRldi0+ZGV2X211dGV4KTsKIAl9CiAKLQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCWNvbXBsZXRlX2FuZF9leGl0KCZ0aHJlYWRzX2dvbmUsIDApOworCWNvbXBsZXRlX2FuZF9leGl0KCZkZXYtPnBvbGxpbmdfZXhpdCwgMCk7CiB9CiAKIC8qCkBAIC02OTksMjkgKzY4OSwzOCBAQAogewogCXByaW50ayhLRVJOX0lORk8gIi0tICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoZGV2LT5ydHN4X3Jlc3ZfYnVmKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCYoZGV2LT5wY2ktPmRldiksIEhPU1RfQ01EU19CVUZfTEVOLAotCQkJCWRldi0+cnRzeF9yZXN2X2J1ZiwgZGV2LT5ydHN4X3Jlc3ZfYnVmX2FkZHIpOwotCQlkZXYtPmNoaXAtPmhvc3RfY21kc19wdHIgPSBOVUxMOwotCQlkZXYtPmNoaXAtPmhvc3Rfc2dfdGJsX3B0ciA9IE5VTEw7Ci0JfQotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGRldi0+cGNpKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldi0+cGNpKTsKLQotCWlmIChkZXYtPmlycSA+IDApIHsKLQkJZnJlZV9pcnEoZGV2LT5pcnEsICh2b2lkICopZGV2KTsKLQl9Ci0JaWYgKGRldi0+Y2hpcC0+bXNpX2VuKSB7Ci0JCXBjaV9kaXNhYmxlX21zaShkZXYtPnBjaSk7Ci0JfQotCiAJLyogVGVsbCB0aGUgY29udHJvbCB0aHJlYWQgdG8gZXhpdC4gIFRoZSBTQ1NJIGhvc3QgbXVzdAogCSAqIGFscmVhZHkgaGF2ZSBiZWVuIHJlbW92ZWQgc28gaXQgd29uJ3QgdHJ5IHRvIHF1ZXVlCiAJICogYW55IG1vcmUgY29tbWFuZHMuCiAJICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiLS0gc2VuZGluZyBleGl0IGNvbW1hbmQgdG8gdGhyZWFkXG4iKTsKLQl1cCgmZGV2LT5zZW1hKTsKKwljb21wbGV0ZSgmZGV2LT5jbW5kX3JlYWR5KTsKKwlpZiAoZGV2LT5jdGxfdGhyZWFkKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNvbnRyb2xfZXhpdCk7CisJaWYgKGRldi0+cG9sbGluZ190aHJlYWQpCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRldi0+cG9sbGluZ19leGl0KTsKKworCXdhaXRfdGltZW91dCgyMDApOworCisJaWYgKGRldi0+cnRzeF9yZXN2X2J1ZikgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmKGRldi0+cGNpLT5kZXYpLCBSVFNYX1JFU1ZfQlVGX0xFTiwKKwkJCQlkZXYtPnJ0c3hfcmVzdl9idWYsIGRldi0+cnRzeF9yZXN2X2J1Zl9hZGRyKTsKKwkJZGV2LT5jaGlwLT5ob3N0X2NtZHNfcHRyID0gTlVMTDsKKwkJZGV2LT5jaGlwLT5ob3N0X3NnX3RibF9wdHIgPSBOVUxMOworCX0KKworCWlmIChkZXYtPmlycSA+IDApCisJCWZyZWVfaXJxKGRldi0+aXJxLCAodm9pZCAqKWRldik7CisJaWYgKGRldi0+Y2hpcC0+bXNpX2VuKQorCQlwY2lfZGlzYWJsZV9tc2koZGV2LT5wY2kpOworCWlmIChkZXYtPnJlbWFwX2FkZHIpCisJCWlvdW5tYXAoZGV2LT5yZW1hcF9hZGRyKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShkZXYtPnBjaSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYtPnBjaSk7CisKKwlydHN4X3JlbGVhc2VfY2hpcChkZXYtPmNoaXApOworCWtmcmVlKGRldi0+Y2hpcCk7CiB9CiAKIC8qIEZpcnN0IHN0YWdlIG9mIGRpc2Nvbm5lY3QgcHJvY2Vzc2luZzogc3RvcCBhbGwgY29tbWFuZHMgYW5kIHJlbW92ZQpAQCAtNzM5LDYgKzczOCw3IEBACiAJc2NzaV91bmxvY2soaG9zdCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldl9tdXRleCk7CiAJd2FrZV91cCgmZGV2LT5kZWxheV93YWl0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPnNjYW5uaW5nX2RvbmUpOwogCiAJLyogV2FpdCBzb21lIHRpbWUgdG8gbGV0IG90aGVyIHRocmVhZHMgZXhpc3QgKi8KIAl3YWl0X3RpbWVvdXQoMTAwKTsKQEAgLTc5Myw4ICs3OTMsNyBAQAogCQkvKiBTaG91bGQgd2UgdW5iaW5kIGlmIG5vIGRldmljZXMgd2VyZSBkZXRlY3RlZD8gKi8KIAl9CiAKLQlzY3NpX2hvc3RfcHV0KHJ0c3hfdG9faG9zdChkZXYpKTsKLQljb21wbGV0ZV9hbmRfZXhpdCgmdGhyZWFkc19nb25lLCAwKTsKKwljb21wbGV0ZV9hbmRfZXhpdCgmZGV2LT5zY2FubmluZ19kb25lLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgcnRzeF9pbml0X29wdGlvbnMoc3RydWN0IHJ0c3hfY2hpcCAqY2hpcCkKQEAgLTk0MSw4ICs5NDAsMTEgQEAKIAogCXNwaW5fbG9ja19pbml0KCZkZXYtPnJlZ19sb2NrKTsKIAltdXRleF9pbml0KCYoZGV2LT5kZXZfbXV0ZXgpKTsKLQlzZW1hX2luaXQoJihkZXYtPnNlbWEpLCAwKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21uZF9yZWFkeSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNvbnRyb2xfZXhpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnBvbGxpbmdfZXhpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCYoZGV2LT5ub3RpZnkpKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+c2Nhbm5pbmdfZG9uZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5kZWxheV93YWl0KTsKIAogCWRldi0+cGNpID0gcGNpOwpAQCAtOTkyLDI4ICs5OTQsMjIgQEAKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCXN5bmNocm9uaXplX2lycShkZXYtPmlycSk7CiAKLQllcnIgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZwY2ktPmRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhZGQgdGhlIHNjc2kgaG9zdFxuIik7Ci0JCWdvdG8gZXJyb3V0OwotCX0KLQogCXJ0c3hfaW5pdF9jaGlwKGRldi0+Y2hpcCk7CiAKIAkvKiBTdGFydCB1cCBvdXIgY29udHJvbCB0aHJlYWQgKi8KLQl0aCA9IGt0aHJlYWRfY3JlYXRlKHJ0c3hfY29udHJvbF90aHJlYWQsIGRldiwgQ1JfRFJJVkVSX05BTUUpOworCXRoID0ga3RocmVhZF9ydW4ocnRzeF9jb250cm9sX3RocmVhZCwgZGV2LCBDUl9EUklWRVJfTkFNRSk7CiAJaWYgKElTX0VSUih0aCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RhcnQgY29udHJvbCB0aHJlYWRcbiIpOwogCQllcnIgPSBQVFJfRVJSKHRoKTsKIAkJZ290byBlcnJvdXQ7CiAJfQorCWRldi0+Y3RsX3RocmVhZCA9IHRoOwogCi0JLyogVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBmb3IgdGhlIGNvbnRyb2wgdGhyZWFkIGFuZAotCSAqIGNvdW50IGl0IGFtb25nIGFsbCB0aGUgdGhyZWFkcyB3ZSBoYXZlIGxhdW5jaGVkLiAgVGhlbgotCSAqIHN0YXJ0IGl0IHVwLiAqLwotCXNjc2lfaG9zdF9nZXQocnRzeF90b19ob3N0KGRldikpOwotCWF0b21pY19pbmMoJnRvdGFsX3RocmVhZHMpOwotCXdha2VfdXBfcHJvY2Vzcyh0aCk7CisJZXJyID0gc2NzaV9hZGRfaG9zdChob3N0LCAmcGNpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOworCQlnb3RvIGVycm91dDsKKwl9CiAKIAkvKiBTdGFydCB1cCB0aGUgdGhyZWFkIGZvciBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCiAJdGggPSBrdGhyZWFkX2NyZWF0ZShydHN4X3NjYW5fdGhyZWFkLCBkZXYsICJydHN4LXNjYW4iKTsKQEAgLTEwMjQsMjggKzEwMjAsMTcgQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JLyogVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBmb3IgdGhlIHNjYW5uaW5nIHRocmVhZCBhbmQKLQkgKiBjb3VudCBpdCBhbW9uZyBhbGwgdGhlIHRocmVhZHMgd2UgaGF2ZSBsYXVuY2hlZC4gIFRoZW4KLQkgKiBzdGFydCBpdCB1cC4gKi8KLQlzY3NpX2hvc3RfZ2V0KHJ0c3hfdG9faG9zdChkZXYpKTsKLQlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKIAl3YWtlX3VwX3Byb2Nlc3ModGgpOwogCiAJLyogU3RhcnQgdXAgdGhlIHRocmVhZCBmb3IgcG9sbGluZyB0aHJlYWQgKi8KLQl0aCA9IGt0aHJlYWRfY3JlYXRlKHJ0c3hfcG9sbGluZ190aHJlYWQsIGRldiwgInJ0c3gtcG9sbGluZyIpOworCXRoID0ga3RocmVhZF9ydW4ocnRzeF9wb2xsaW5nX3RocmVhZCwgZGV2LCAicnRzeC1wb2xsaW5nIik7CiAJaWYgKElTX0VSUih0aCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gc3RhcnQgdGhlIGRldmljZS1wb2xsaW5nIHRocmVhZFxuIik7CiAJCXF1aWVzY2VfYW5kX3JlbW92ZV9ob3N0KGRldik7CiAJCWVyciA9IFBUUl9FUlIodGgpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0KLQkvKiBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0IGZvciB0aGUgcG9sbGluZyB0aHJlYWQgYW5kCi0JICogY291bnQgaXQgYW1vbmcgYWxsIHRoZSB0aHJlYWRzIHdlIGhhdmUgbGF1bmNoZWQuICBUaGVuCi0JICogc3RhcnQgaXQgdXAuICovCi0Jc2NzaV9ob3N0X2dldChydHN4X3RvX2hvc3QoZGV2KSk7Ci0JYXRvbWljX2luYygmdG90YWxfdGhyZWFkcyk7Ci0Jd2FrZV91cF9wcm9jZXNzKHRoKTsKKwlkZXYtPnBvbGxpbmdfdGhyZWFkID0gdGg7CiAKIAlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXYpOwogCkBAIC0xMTA4LDE2ICsxMDkzLDYgQEAKIAogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIAotCS8qIERvbid0IHJldHVybiB1bnRpbCBhbGwgb2Ygb3VyIGNvbnRyb2wgYW5kIHNjYW5uaW5nIHRocmVhZHMKLQkgKiBoYXZlIGV4aXRlZC4gIFNpbmNlIGVhY2ggdGhyZWFkIHNpZ25hbHMgdGhyZWFkc19nb25lIGFzIGl0cwotCSAqIGxhc3QgYWN0LCB3ZSBoYXZlIHRvIGNhbGwgd2FpdF9mb3JfY29tcGxldGlvbiB0aGUgcmlnaHQgbnVtYmVyCi0JICogb2YgdGltZXMuCi0JICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZ0b3RhbF90aHJlYWRzKSA+IDApIHsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmdGhyZWFkc19nb25lKTsKLQkJYXRvbWljX2RlYygmdG90YWxfdGhyZWFkcyk7Ci0JfQotCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgbW9kdWxlIGV4aXRcbiIsIENSX0RSSVZFUl9OQU1FKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guaAppbmRleCAyNDc2MTViLi44NmU0N2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3guaApAQCAtMTEyLDkgKzExMiwxNiBAQAogCS8qIGxvY2tzICovCiAJc3BpbmxvY2tfdCAJCXJlZ19sb2NrOwogCisJc3RydWN0IHRhc2tfc3RydWN0CSpjdGxfdGhyZWFkOwkgLyogdGhlIGNvbnRyb2wgdGhyZWFkICAgKi8KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnBvbGxpbmdfdGhyZWFkOyAvKiB0aGUgcG9sbGluZyB0aHJlYWQgICAqLworCiAJLyogbXV0dWFsIGV4Y2x1c2lvbiBhbmQgc3luY2hyb25pemF0aW9uIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCXNlbWE7CQkgLyogdG8gc2xlZXAgdGhyZWFkIG9uCSAgICAqLworCXN0cnVjdCBjb21wbGV0aW9uCWNtbmRfcmVhZHk7CSAvKiB0byBzbGVlcCB0aHJlYWQgb24JICAgICovCisJc3RydWN0IGNvbXBsZXRpb24JY29udHJvbF9leGl0OwkgLyogY29udHJvbCB0aHJlYWQgZXhpdAkgICAgKi8KKwlzdHJ1Y3QgY29tcGxldGlvbglwb2xsaW5nX2V4aXQ7CSAvKiBwb2xsaW5nIHRocmVhZCBleGl0CSAgICAqLwogCXN0cnVjdCBjb21wbGV0aW9uCW5vdGlmeTsJCSAvKiB0aHJlYWQgYmVnaW4vZW5kCSAgICAqLworCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5uaW5nX2RvbmU7CSAvKiB3YWl0IGZvciBzY2FuIHRocmVhZCAgICAqLworCiAJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsYXlfd2FpdDsJIC8qIHdhaXQgZHVyaW5nIHNjYW4sIHJlc2V0ICovCiAJc3RydWN0IG11dGV4CQlkZXZfbXV0ZXg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvY29yZS5jCmluZGV4IDc2Nzc5OTQuLmY5NzRmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL2NvcmUuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlICJzb2xvNngxMC5oIgogI2luY2x1ZGUgInR3MjguaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9lbmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9lbmMuYwppbmRleCAyODVmN2YzLi5kZTUwMjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvZW5jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL2VuYy5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJzb2xvNngxMC5oIgogI2luY2x1ZGUgIm9zZC1mb250LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9nNzIzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvZzcyMy5jCmluZGV4IGJkOGViOTIuLjU5Mjc0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9nNzIzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL2c3MjMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9wMm0uYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9wMm0uYwppbmRleCA1NzE3ZWFiLi41NjIxMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvcDJtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3AybS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgInNvbG82eDEwLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNngxMC5oIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82eDEwLmgKaW5kZXggMTdjMDZiZC4uYWJlZTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82eDEwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82eDEwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvZGV2c3ludGguYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2RldnN5bnRoLmMKaW5kZXggMzlkYzU4Ni4uOTQwNzY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvZGV2c3ludGguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9kZXZzeW50aC5jCkBAIC0xOCwxMyArMTgsMTQgQEAKIHsKIAlzaXplX3QgY291bnQgPSBuYnl0ZXM7CiAJY29uc3QgY2hhciAqcHRyID0gYnVmZmVyOwotCWludCBieXRlczsKKwlzaXplX3QgYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1X2NoYXIgYnVmWzI1Nl07CisKIAlpZiAoc3ludGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJd2hpbGUgKGNvdW50ID4gMCkgewotCQlieXRlcyA9IG1pbl90KHNpemVfdCwgY291bnQsIHNpemVvZihidWYpKTsKKwkJYnl0ZXMgPSBtaW4oY291bnQsIHNpemVvZihidWYpKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgcHRyLCBieXRlcykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJY291bnQgLT0gYnl0ZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCmluZGV4IDU4OWEwNTUuLjNkMTI3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCkBAIC0yMDksNyArMjA5LDYgQEAKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX09NQVBfTUNCU1AKIAljYXNlIE1DQlNQX0NMSzoKLQkJb21hcF9tY2JzcF9zZXRfaW9fdHlwZShNQ0JTUF9JRChjbGtfaWQpLCBPTUFQX01DQlNQX1BPTExfSU8pOwogCQlvbWFwX21jYnNwX3JlcXVlc3QoTUNCU1BfSUQoY2xrX2lkKSk7CiAJCW9tYXAyX21jYnNwX3NldF9jbGtzX3NyYyhNQ0JTUF9JRChjbGtfaWQpLCBNQ0JTUF9DTEtTX1BBRF9TUkMpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWFsc2EuYyBiL2RyaXZlcnMvc3RhZ2luZy90bTYwMDAvdG02MDAwLWFsc2EuYwppbmRleCBkZGZkN2MzLi5iZDVmYTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdG02MDAwL3RtNjAwMC1hbHNhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RtNjAwMC90bTYwMDAtYWxzYS5jCkBAIC04NCw3ICs4NCw2IEBACiAKIAl0bTYwMDBfc2V0X2F1ZGlvX2JpdHJhdGUoY29yZSwgNDgwMDApOwogCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIzLDYgKzEyMiw3IEBACiAJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID4gc2l6ZSkKIAkJCXJldHVybiAwOworCiAJCWRzcF9idWZmZXJfZnJlZShzdWJzdHJlYW0pOwogCX0KIApAQCAtMTUyLDkgKzE1Miw5IEBACiAJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCiAJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKIAotCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCS5yYXRlX21pbiA9CQk0ODAwMCwKLQkucmF0ZV9tYXggPQkJNDgwMDAsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSA0ODAwMCwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkucGVyaW9kX2J5dGVzX21pbiA9IDY0LApAQCAtMjU0LDkgKzI1NCw3IEBACiAJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGJ1Zl9wb3MgKiBzdHJpZGUsIGJ1ZiwKIAkJCWxlbmd0aCAqIHN0cmlkZSk7CiAKLSNpZm5kZWYgTk9fUENNX0xPQ0sKIAlzbmRfcGNtX3N0cmVhbV9sb2NrKHN1YnN0cmVhbSk7Ci0jZW5kaWYKIAogCWNoaXAtPmJ1Zl9wb3MgKz0gbGVuZ3RoOwogCWlmIChjaGlwLT5idWZfcG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQpAQCAtMjY4LDkgKzI2Niw3IEBACiAJCXBlcmlvZF9lbGFwc2VkID0gMTsKIAl9CiAKLSNpZm5kZWYgTk9fUENNX0xPQ0sKIAlzbmRfcGNtX3N0cmVhbV91bmxvY2soc3Vic3RyZWFtKTsKLSNlbmRpZgogCiAJaWYgKHBlcmlvZF9lbGFwc2VkKQogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvemNhY2hlL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3pjYWNoZS9NYWtlZmlsZQppbmRleCBmNWVjNjRmLi42MGRhYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvemNhY2hlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96Y2FjaGUvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi16Y2FjaGUteQk6PQl0bWVtLm8KK3pjYWNoZS15CTo9CXpjYWNoZS1tYWluLm8gdG1lbS5vCiAKIG9iai0kKENPTkZJR19aQ0FDSEUpCSs9CXpjYWNoZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvemNhY2hlL3RtZW0uYyBiL2RyaXZlcnMvc3RhZ2luZy96Y2FjaGUvdG1lbS5jCmluZGV4IDk3NWUzNGIuLjFjYTY2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy96Y2FjaGUvdG1lbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96Y2FjaGUvdG1lbS5jCkBAIC02MDQsNyArNjA0LDcgQEAKIAlzdHJ1Y3QgdG1lbV9vYmogKm9iajsKIAl2b2lkICpwYW1wZDsKIAlib29sIGVwaGVtZXJhbCA9IGlzX2VwaGVtZXJhbChwb29sKTsKLQl1aW50MzJfdCByZXQgPSAtMTsKKwlpbnQgcmV0ID0gLTE7CiAJc3RydWN0IHRtZW1faGFzaGJ1Y2tldCAqaGI7CiAJYm9vbCBmcmVlID0gKGdldF9hbmRfZnJlZSA9PSAxKSB8fCAoKGdldF9hbmRfZnJlZSA9PSAwKSAmJiBlcGhlbWVyYWwpOwogCWJvb2wgbG9ja19oZWxkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvemNhY2hlL3pjYWNoZS5jIGIvZHJpdmVycy9zdGFnaW5nL3pjYWNoZS96Y2FjaGUtbWFpbi5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy96Y2FjaGUvemNhY2hlLmMKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy96Y2FjaGUvemNhY2hlLW1haW4uYwppbmRleCA2NWE4MWEwLi5hM2Y1MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvemNhY2hlL3pjYWNoZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96Y2FjaGUvemNhY2hlLW1haW4uYwpAQCAtMTksNiArMTksNyBAQAogICogICBodHRwOi8vbWFyYy5pbmZvLz9sPWxpbnV4LW1tJm09MTI3ODExMjcxNjA1MDA5CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgInRtZW0uaCIKIAogI2luY2x1ZGUgIi4uL3pyYW0veHZtYWxsb2MuaCIgLyogaWYgYnVpbHQgaW4gZHJpdmVycy9zdGFnaW5nICovCkBAIC01Myw2ICs1NSw5IEBACiAKICNkZWZpbmUgTUFYX0NMSUVOVFMgMTYKICNkZWZpbmUgTE9DQUxfQ0xJRU5UICgodWludDE2X3QpLTEpCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwogc3RydWN0IHpjYWNoZV9jbGllbnQgewogCXN0cnVjdCB0bWVtX3Bvb2wgKnRtZW1fcG9vbHNbTUFYX1BPT0xTX1BFUl9DTElFTlRdOwogCXN0cnVjdCB4dl9wb29sICp4dnBvb2w7CkBAIC0xMTUzLDExICsxMTU4LDEyIEBACiAJc2l6ZV90IGNsZW47CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGNvdW50OwotCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKGRhdGEpOworCXN0cnVjdCBwYWdlICpwYWdlID0gKHN0cnVjdCBwYWdlICopKGRhdGEpOwogCXN0cnVjdCB6Y2FjaGVfY2xpZW50ICpjbGkgPSBwb29sLT5jbGllbnQ7CiAJdWludDE2X3QgY2xpZW50X2lkID0gZ2V0X2NsaWVudF9pZF9mcm9tX2NsaWVudChjbGkpOwogCXVuc2lnbmVkIGxvbmcgenZfbWVhbl96c2l6ZTsKIAl1bnNpZ25lZCBsb25nIGN1cnJfcGVyc19wYW1wZF9jb3VudDsKKwl1NjQgdG90YWxfenNpemU7CiAKIAlpZiAoZXBoKSB7CiAJCXJldCA9IHpjYWNoZV9jb21wcmVzcyhwYWdlLCAmY2RhdGEsICZjbGVuKTsKQEAgLTExOTAsOCArMTE5Niw5IEBACiAJCX0KIAkJLyogcmVqZWN0IGlmIG1lYW4gY29tcHJlc3Npb24gaXMgdG9vIHBvb3IgKi8KIAkJaWYgKChjbGVuID4genZfbWF4X21lYW5fenNpemUpICYmIChjdXJyX3BlcnNfcGFtcGRfY291bnQgPiAwKSkgewotCQkJenZfbWVhbl96c2l6ZSA9IHh2X2dldF90b3RhbF9zaXplX2J5dGVzKGNsaS0+eHZwb29sKSAvCi0JCQkJCQljdXJyX3BlcnNfcGFtcGRfY291bnQ7CisJCQl0b3RhbF96c2l6ZSA9IHh2X2dldF90b3RhbF9zaXplX2J5dGVzKGNsaS0+eHZwb29sKTsKKwkJCXp2X21lYW5fenNpemUgPSBkaXZfdTY0KHRvdGFsX3pzaXplLAorCQkJCQkJY3Vycl9wZXJzX3BhbXBkX2NvdW50KTsKIAkJCWlmICh6dl9tZWFuX3pzaXplID4genZfbWF4X21lYW5fenNpemUpIHsKIAkJCQl6Y2FjaGVfbWVhbl9jb21wcmVzc19wb29yKys7CiAJCQkJZ290byBvdXQ7CkBAIC0xMjIwLDcgKzEyMjcsNyBAQAogCWludCByZXQgPSAwOwogCiAJQlVHX09OKGlzX2VwaGVtZXJhbChwb29sKSk7Ci0JenZfZGVjb21wcmVzcyh2aXJ0X3RvX3BhZ2UoZGF0YSksIHBhbXBkKTsKKwl6dl9kZWNvbXByZXNzKChzdHJ1Y3QgcGFnZSAqKShkYXRhKSwgcGFtcGQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1MzIsNyArMTUzOSw3IEBACiAJCWdvdG8gb3V0OwogCWlmICghemNhY2hlX2ZyZWV6ZSAmJiB6Y2FjaGVfZG9fcHJlbG9hZChwb29sKSA9PSAwKSB7CiAJCS8qIHByZWxvYWQgZG9lcyBwcmVlbXB0X2Rpc2FibGUgb24gc3VjY2VzcyAqLwotCQlyZXQgPSB0bWVtX3B1dChwb29sLCBvaWRwLCBpbmRleCwgcGFnZV9hZGRyZXNzKHBhZ2UpLAorCQlyZXQgPSB0bWVtX3B1dChwb29sLCBvaWRwLCBpbmRleCwgKGNoYXIgKikocGFnZSksCiAJCQkJUEFHRV9TSVpFLCAwLCBpc19lcGhlbWVyYWwocG9vbCkpOwogCQlpZiAocmV0IDwgMCkgewogCQkJaWYgKGlzX2VwaGVtZXJhbChwb29sKSkKQEAgLTE1NjUsNyArMTU3Miw3IEBACiAJcG9vbCA9IHpjYWNoZV9nZXRfcG9vbF9ieV9pZChjbGlfaWQsIHBvb2xfaWQpOwogCWlmIChsaWtlbHkocG9vbCAhPSBOVUxMKSkgewogCQlpZiAoYXRvbWljX3JlYWQoJnBvb2wtPm9ial9jb3VudCkgPiAwKQotCQkJcmV0ID0gdG1lbV9nZXQocG9vbCwgb2lkcCwgaW5kZXgsIHBhZ2VfYWRkcmVzcyhwYWdlKSwKKwkJCXJldCA9IHRtZW1fZ2V0KHBvb2wsIG9pZHAsIGluZGV4LCAoY2hhciAqKShwYWdlKSwKIAkJCQkJJnNpemUsIDAsIGlzX2VwaGVtZXJhbChwb29sKSk7CiAJCXpjYWNoZV9wdXRfcG9vbChwb29sKTsKIAl9CkBAIC0xOTI5LDkgKzE5MzYsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB6Y2FjaGVfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19TWVNGUwogCWludCByZXQgPSAwOwogCisjaWZkZWYgQ09ORklHX1NZU0ZTCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosICZ6Y2FjaGVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInpjYWNoZTogY2FuJ3QgY3JlYXRlIHN5c2ZzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL0tjb25maWcgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9LY29uZmlnCmluZGV4IDU2NGZmNGUuLjgzNDVmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy90YXJnZXQvaXNjc2kvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBJU0NTSV9UQVJHRVQKIAl0cmlzdGF0ZSAiTGludXgtaVNDU0kub3JnIGlTQ1NJIFRhcmdldCBNb2RlIFN0YWNrIgorCWRlcGVuZHMgb24gTkVUCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQ1JDMzJDCiAJc2VsZWN0IENSWVBUT19DUkMzMkNfSU5URUwgaWYgWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXQuYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCmluZGV4IDE0YzgxYzQuLjZhNGVhMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAlzdHJ1Y3QgaXNjc2lfdGlxbiAqdGlxbiA9IE5VTEw7CiAJaW50IHJldDsKIAotCWlmIChzdHJsZW4oYnVmKSA+IElTQ1NJX0lRTl9MRU4pIHsKKwlpZiAoc3RybGVuKGJ1ZikgPj0gSVNDU0lfSVFOX0xFTikgewogCQlwcl9lcnIoIlRhcmdldCBJUU4gZXhjZWVkcyAlZCBieXRlc1xuIiwKIAkJCQlJU0NTSV9JUU5fTEVOKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0xODU3LDcgKzE4NTcsNyBAQAogCWNoYXIgKnRleHRfcHRyLCAqdGV4dF9pbjsKIAlpbnQgY21kc25fcmV0LCBuaW92ID0gMCwgcnhfZ290LCByeF9zaXplOwogCXUzMiBjaGVja3N1bSA9IDAsIGRhdGFfY3JjID0gMCwgcGF5bG9hZF9sZW5ndGg7Ci0JdTMyIHBhZGRpbmcgPSAwLCB0ZXh0X2xlbmd0aCA9IDA7CisJdTMyIHBhZGRpbmcgPSAwLCBwYWRfYnl0ZXMgPSAwLCB0ZXh0X2xlbmd0aCA9IDA7CiAJc3RydWN0IGlzY3NpX2NtZCAqY21kOwogCXN0cnVjdCBrdmVjIGlvdlszXTsKIAlzdHJ1Y3QgaXNjc2lfdGV4dCAqaGRyOwpAQCAtMTg5Niw3ICsxODk2LDcgQEAKIAogCQlwYWRkaW5nID0gKCgtcGF5bG9hZF9sZW5ndGgpICYgMyk7CiAJCWlmIChwYWRkaW5nICE9IDApIHsKLQkJCWlvdltuaW92XS5pb3ZfYmFzZSA9IGNtZC0+cGFkX2J5dGVzOworCQkJaW92W25pb3ZdLmlvdl9iYXNlID0gJnBhZF9ieXRlczsKIAkJCWlvdltuaW92KytdLmlvdl9sZW4gID0gcGFkZGluZzsKIAkJCXJ4X3NpemUgKz0gcGFkZGluZzsKIAkJCXByX2RlYnVnKCJSZWNlaXZpbmcgJXUgYWRkaXRpb25hbCBieXRlcyIKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAJCWlmIChjb25uLT5jb25uX29wcy0+RGF0YURpZ2VzdCkgewogCQkJaXNjc2l0X2RvX2NyeXB0b19oYXNoX2J1ZigmY29ubi0+Y29ubl9yeF9oYXNoLAogCQkJCQl0ZXh0X2luLCB0ZXh0X2xlbmd0aCwKLQkJCQkJcGFkZGluZywgY21kLT5wYWRfYnl0ZXMsCisJCQkJCXBhZGRpbmcsICh1OCAqKSZwYWRfYnl0ZXMsCiAJCQkJCSh1OCAqKSZkYXRhX2NyYyk7CiAKIAkJCWlmIChjaGVja3N1bSAhPSBkYXRhX2NyYykgewpAQCAtMjI0Myw3ICsyMjQzLDYgQEAKIAljYXNlIDA6CiAJCXJldHVybiBpc2NzaXRfaGFuZGxlX3JlY292ZXJ5X2RhdGFpbl9vcl9yMnQoY29ubiwgYnVmLAogCQkJaGRyLT5pdHQsIGhkci0+dHR0LCBoZHItPmJlZ3J1biwgaGRyLT5ydW5sZW5ndGgpOwotCQlyZXR1cm4gMDsKIAljYXNlIElTQ1NJX0ZMQUdfU05BQ0tfVFlQRV9TVEFUVVM6CiAJCXJldHVybiBpc2NzaXRfaGFuZGxlX3N0YXR1c19zbmFjayhjb25uLCBoZHItPml0dCwgaGRyLT50dHQsCiAJCQloZHItPmJlZ3J1biwgaGRyLT5ydW5sZW5ndGgpOwpAQCAtMzQ2OCw3ICszNDY3LDEyIEBACiB9CiAKICNlbHNlCi0jZGVmaW5lIGlzY3NpdF90aHJlYWRfZ2V0X2NwdW1hc2soWCkgKHt9KQorCit2b2lkIGlzY3NpdF90aHJlYWRfZ2V0X2NwdW1hc2soc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCit7CisJcmV0dXJuOworfQorCiAjZGVmaW5lIGlzY3NpdF90aHJlYWRfY2hlY2tfY3B1bWFzayhYLCBZLCBaKSAoe30pCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfY29uZmlnZnMuYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9jb25maWdmcy5jCmluZGV4IDMyYmI5MmMuLmYxNjQzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9jb25maWdmcy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9jb25maWdmcy5jCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJfQogCW1lbXNldChidWYsIDAsIE1BWF9QT1JUQUxfTEVOICsgMSk7Ci0Jc25wcmludGYoYnVmLCBNQVhfUE9SVEFMX0xFTiwgIiVzIiwgbmFtZSk7CisJc25wcmludGYoYnVmLCBNQVhfUE9SVEFMX0xFTiArIDEsICIlcyIsIG5hbWUpOwogCiAJbWVtc2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlKSk7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogCQkJCUlTQ1NJX1RDUCk7CiAJaWYgKElTX0VSUih0cGdfbnApKSB7CiAJCWlzY3NpdF9wdXRfdHBnKHRwZyk7Ci0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodHBnX25wKSk7CisJCXJldHVybiBFUlJfQ0FTVCh0cGdfbnApOwogCX0KIAlwcl9kZWJ1ZygiTElPX1RhcmdldF9Db25maWdGUzogYWRkbnB0b3RwZyBkb25lIVxuIik7CiAKQEAgLTEyODUsNyArMTI4NSw3IEBACiAKIAl0aXFuID0gaXNjc2l0X2FkZF90aXFuKCh1bnNpZ25lZCBjaGFyICopbmFtZSk7CiAJaWYgKElTX0VSUih0aXFuKSkKLQkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUih0aXFuKSk7CisJCXJldHVybiBFUlJfQ0FTVCh0aXFuKTsKIAkvKgogCSAqIFNldHVwIHN0cnVjdCBpc2NzaV93d25fc3RhdF9ncnBzIGZvciBzZV93d24tPmZhYnJpY19zdGF0X2dyb3VwLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2VybDEuYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9lcmwxLmMKaW5kZXggOTgwNjUwNy4uYzRjNjhkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2VybDEuYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfZXJsMS5jCkBAIC04MzQsNyArODM0LDcgQEAKIAkJCSAqLwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShvb29fdG1wLCAmc2Vzcy0+c2Vzc19vb29fY21kc25fbGlzdCwKIAkJCQkJCW9vb19saXN0KSB7Ci0JCQkJd2hpbGUgKG9vb190bXAtPmNtZHNuIDwgb29vX2NtZHNuLT5jbWRzbikKKwkJCQlpZiAob29vX3RtcC0+Y21kc24gPCBvb29fY21kc24tPmNtZHNuKQogCQkJCQljb250aW51ZTsKIAogCQkJCWxpc3RfYWRkKCZvb29fY21kc24tPm9vb19saXN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X2xvZ2luLmMgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbG9naW4uYwppbmRleCBiY2FmODJmLi5kYWFkMzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbG9naW4uYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbG9naW4uYwpAQCAtMTAxMywxOSArMTAxMyw5IEBACiAJCQkJCUlTQ1NJX0xPR0lOX1NUQVRVU19UQVJHRVRfRVJST1IpOwogCQkJZ290byBuZXdfc2Vzc19vdXQ7CiAJCX0KLSNpZiAwCi0JCWlmICghaXNjc2lfbnRvcDYoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKLQkJCQkmc29ja19pbjYuc2luNl9hZGRyLmluNl91LAotCQkJCShjaGFyICopJmNvbm4tPmlwdjZfbG9naW5faXBbMF0sCi0JCQkJSVBWNl9BRERSRVNTX1NQQUNFKSkgewotCQkJcHJfZXJyKCJpc2NzaV9udG9wNigpIGZhaWxlZFxuIik7Ci0JCQlpc2NzaXRfdHhfbG9naW5fcnNwKGNvbm4sIElTQ1NJX1NUQVRVU19DTFNfVEFSR0VUX0VSUiwKLQkJCQkJSVNDU0lfTE9HSU5fU1RBVFVTX1RBUkdFVF9FUlJPUik7Ci0JCQlnb3RvIG5ld19zZXNzX291dDsKLQkJfQotI2Vsc2UKLQkJcHJfZGVidWcoIlNraXBwaW5nIGlzY3NpX250b3A2KClcbiIpOwotI2VuZGlmCisJCXNucHJpbnRmKGNvbm4tPmxvZ2luX2lwLCBzaXplb2YoY29ubi0+bG9naW5faXApLCAiJXBJNmMiLAorCQkJCSZzb2NrX2luNi5zaW42X2FkZHIuaW42X3UpOworCQljb25uLT5sb2dpbl9wb3J0ID0gbnRvaHMoc29ja19pbjYuc2luNl9wb3J0KTsKIAl9IGVsc2UgewogCQltZW1zZXQoJnNvY2tfaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X25lZ28uYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9uZWdvLmMKaW5kZXggNzEzYTRkMi4uNGQwODdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X25lZ28uYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfbmVnby5jCkBAIC05NzgsNyArOTc4LDcgQEAKIAkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzdHJ1Y3QgaXNjc2lfbG9naW4uXG4iKTsKIAkJaXNjc2l0X3R4X2xvZ2luX3JzcChjb25uLCBJU0NTSV9TVEFUVVNfQ0xTX1RBUkdFVF9FUlIsCiAJCQkJSVNDU0lfTE9HSU5fU1RBVFVTX05PX1JFU09VUkNFUyk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlsb2dpbi0+cmVxID0ga3phbGxvYyhJU0NTSV9IRFJfTEVOLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9wYXJhbWV0ZXJzLmMgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfcGFyYW1ldGVycy5jCmluZGV4IDI1MmUyNDYuLjQ5N2IyZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF9wYXJhbWV0ZXJzLmMKKysrIGIvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X3BhcmFtZXRlcnMuYwpAQCAtNTQ1LDEzICs1NDUsMTMgQEAKIAlzdHJ1Y3QgaXNjc2lfcGFyYW1fbGlzdCAqc3JjX3BhcmFtX2xpc3QsCiAJaW50IGxlYWRpbmcpCiB7Ci0Jc3RydWN0IGlzY3NpX3BhcmFtICpuZXdfcGFyYW0gPSBOVUxMLCAqcGFyYW0gPSBOVUxMOworCXN0cnVjdCBpc2NzaV9wYXJhbSAqcGFyYW0gPSBOVUxMOworCXN0cnVjdCBpc2NzaV9wYXJhbSAqbmV3X3BhcmFtID0gTlVMTDsKIAlzdHJ1Y3QgaXNjc2lfcGFyYW1fbGlzdCAqcGFyYW1fbGlzdCA9IE5VTEw7CiAKIAlwYXJhbV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX3BhcmFtX2xpc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhcmFtX2xpc3QpIHsKLQkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciIKLQkJCQkiIHN0cnVjdCBpc2NzaV9wYXJhbV9saXN0LlxuIik7CisJCXByX2VycigiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Igc3RydWN0IGlzY3NpX3BhcmFtX2xpc3QuXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAlJTklUX0xJU1RfSEVBRCgmcGFyYW1fbGlzdC0+cGFyYW1fbGlzdCk7CkBAIC01NjcsOCArNTY3LDE3IEBACiAKIAkJbmV3X3BhcmFtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX3BhcmFtKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbmV3X3BhcmFtKSB7Ci0JCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgotCQkJCSIgc3RydWN0IGlzY3NpX3BhcmFtLlxuIik7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cnVjdCBpc2NzaV9wYXJhbS5cbiIpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJbmV3X3BhcmFtLT5uYW1lID0ga3N0cmR1cChwYXJhbS0+bmFtZSwgR0ZQX0tFUk5FTCk7CisJCW5ld19wYXJhbS0+dmFsdWUgPSBrc3RyZHVwKHBhcmFtLT52YWx1ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X3BhcmFtLT52YWx1ZSB8fCAhbmV3X3BhcmFtLT5uYW1lKSB7CisJCQlrZnJlZShuZXdfcGFyYW0tPnZhbHVlKTsKKwkJCWtmcmVlKG5ld19wYXJhbS0+bmFtZSk7CisJCQlrZnJlZShuZXdfcGFyYW0pOworCQkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBwYXJhbWV0ZXIgbmFtZS92YWx1ZS5cbiIpOwogCQkJZ290byBlcnJfb3V0OwogCQl9CiAKQEAgLTU4MCwzMiArNTg5LDEyIEBACiAJCW5ld19wYXJhbS0+dXNlID0gcGFyYW0tPnVzZTsKIAkJbmV3X3BhcmFtLT50eXBlX3JhbmdlID0gcGFyYW0tPnR5cGVfcmFuZ2U7CiAKLQkJbmV3X3BhcmFtLT5uYW1lID0ga3phbGxvYyhzdHJsZW4ocGFyYW0tPm5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X3BhcmFtLT5uYW1lKSB7Ci0JCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgotCQkJCSIgcGFyYW1ldGVyIG5hbWUuXG4iKTsKLQkJCWdvdG8gZXJyX291dDsKLQkJfQotCi0JCW5ld19wYXJhbS0+dmFsdWUgPSBremFsbG9jKHN0cmxlbihwYXJhbS0+dmFsdWUpICsgMSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdfcGFyYW0tPnZhbHVlKSB7Ci0JCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgotCQkJCSIgcGFyYW1ldGVyIHZhbHVlLlxuIik7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQotCQltZW1jcHkobmV3X3BhcmFtLT5uYW1lLCBwYXJhbS0+bmFtZSwgc3RybGVuKHBhcmFtLT5uYW1lKSk7Ci0JCW5ld19wYXJhbS0+bmFtZVtzdHJsZW4ocGFyYW0tPm5hbWUpXSA9ICdcMCc7Ci0JCW1lbWNweShuZXdfcGFyYW0tPnZhbHVlLCBwYXJhbS0+dmFsdWUsIHN0cmxlbihwYXJhbS0+dmFsdWUpKTsKLQkJbmV3X3BhcmFtLT52YWx1ZVtzdHJsZW4ocGFyYW0tPnZhbHVlKV0gPSAnXDAnOwotCiAJCWxpc3RfYWRkX3RhaWwoJm5ld19wYXJhbS0+cF9saXN0LCAmcGFyYW1fbGlzdC0+cGFyYW1fbGlzdCk7CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZwYXJhbV9saXN0LT5wYXJhbV9saXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJnBhcmFtX2xpc3QtPnBhcmFtX2xpc3QpKSB7CiAJCSpkc3RfcGFyYW1fbGlzdCA9IHBhcmFtX2xpc3Q7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJcHJfZXJyKCJObyBwYXJhbWV0ZXJzIGFsbG9jYXRlZC5cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X3V0aWwuYyBiL2RyaXZlcnMvdGFyZ2V0L2lzY3NpL2lzY3NpX3RhcmdldF91dGlsLmMKaW5kZXggYTFhY2IwMS4uYTBkMjNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvaXNjc2kvaXNjc2lfdGFyZ2V0X3V0aWwuYworKysgYi9kcml2ZXJzL3RhcmdldC9pc2NzaS9pc2NzaV90YXJnZXRfdXRpbC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAlpZiAoIWNtZC0+dG1yX3JlcSkgewogCQlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIgogCQkJIiBUYXNrIE1hbmFnZW1lbnQgY29tbWFuZCFcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXQ7CiAJfQogCS8qCiAJICogVEFTS19SRUFTU0lHTiBmb3IgRVJMPTIgLyBjb25uZWN0aW9uIHN0YXlzIGluc2lkZSBvZgpAQCAtMjk4LDggKzI5OCw2IEBACiAJcmV0dXJuIGNtZDsKIG91dDoKIAlpc2NzaXRfcmVsZWFzZV9jbWQoY21kKTsKLQlpZiAoc2VfY21kKQotCQl0cmFuc3BvcnRfZnJlZV9zZV9jbWQoc2VfY21kKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY2RiLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jZGIuYwppbmRleCA4YWUwOWExLi44OWFlOTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jZGIuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jZGIuYwpAQCAtNjcsNiArNjcsNyBAQAogewogCXN0cnVjdCBzZV9sdW4gKmx1biA9IGNtZC0+c2VfbHVuOwogCXN0cnVjdCBzZV9kZXZpY2UgKmRldiA9IGNtZC0+c2VfZGV2OworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnRwZyA9IGx1bi0+bHVuX3NlcC0+c2VwX3RwZzsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAKIAkvKgpAQCAtODEsOSArODIsMTMgQEAKIAogCWJ1ZiA9IHRyYW5zcG9ydF9rbWFwX2ZpcnN0X2RhdGFfcGFnZShjbWQpOwogCi0JYnVmWzBdID0gZGV2LT50cmFuc3BvcnQtPmdldF9kZXZpY2VfdHlwZShkZXYpOwotCWlmIChidWZbMF0gPT0gVFlQRV9UQVBFKQotCQlidWZbMV0gPSAweDgwOworCWlmIChkZXYgPT0gdHBnLT50cGdfdmlydF9sdW4wLmx1bl9zZV9kZXYpIHsKKwkJYnVmWzBdID0gMHgzZjsgLyogTm90IGNvbm5lY3RlZCAqLworCX0gZWxzZSB7CisJCWJ1ZlswXSA9IGRldi0+dHJhbnNwb3J0LT5nZXRfZGV2aWNlX3R5cGUoZGV2KTsKKwkJaWYgKGJ1ZlswXSA9PSBUWVBFX1RBUEUpCisJCQlidWZbMV0gPSAweDgwOworCX0KIAlidWZbMl0gPSBkZXYtPnRyYW5zcG9ydC0+Z2V0X2RldmljZV9yZXYoZGV2KTsKIAogCS8qCkBAIC05MTUsOCArOTIwLDggQEAKIAkJbGVuZ3RoICs9IHRhcmdldF9tb2Rlc2Vuc2VfY29udHJvbChkZXYsICZidWZbb2Zmc2V0K2xlbmd0aF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl9lcnIoIkdvdCBVbmtub3duIE1vZGUgUGFnZTogMHglMDJ4XG4iLAotCQkJCWNkYlsyXSAmIDB4M2YpOworCQlwcl9lcnIoIk1PREUgU0VOU0U6IHVuaW1wbGVtZW50ZWQgcGFnZS9zdWJwYWdlOiAweCUwMngvMHglMDJ4XG4iLAorCQkgICAgICAgY2RiWzJdICYgMHgzZiwgY2RiWzNdKTsKIAkJcmV0dXJuIFBZWF9UUkFOU1BPUlRfVU5LTk9XTl9NT0RFX1BBR0U7CiAJfQogCW9mZnNldCArPSBsZW5ndGg7CkBAIC0xMDcyLDggKzEwNzcsNiBAQAogCQlzaXplIC09IDE2OwogCX0KIAotCXRhc2stPnRhc2tfc2NzaV9zdGF0dXMgPSBHT09EOwotCXRyYW5zcG9ydF9jb21wbGV0ZV90YXNrKHRhc2ssIDEpOwogZXJyOgogCXRyYW5zcG9ydF9rdW5tYXBfZmlyc3RfZGF0YV9wYWdlKGNtZCk7CiAKQEAgLTEwODUsMjQgKzEwODgsMTcgQEAKICAqIE5vdGUgdGhpcyBpcyBub3QgdXNlZCBmb3IgVENNL3BTQ1NJIHBhc3N0aHJvdWdoCiAgKi8KIHN0YXRpYyBpbnQKLXRhcmdldF9lbXVsYXRlX3dyaXRlX3NhbWUoc3RydWN0IHNlX3Rhc2sgKnRhc2ssIGludCB3cml0ZV9zYW1lMzIpCit0YXJnZXRfZW11bGF0ZV93cml0ZV9zYW1lKHN0cnVjdCBzZV90YXNrICp0YXNrLCB1MzIgbnVtX2Jsb2NrcykKIHsKIAlzdHJ1Y3Qgc2VfY21kICpjbWQgPSB0YXNrLT50YXNrX3NlX2NtZDsKIAlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBjbWQtPnNlX2RldjsKIAlzZWN0b3JfdCByYW5nZTsKIAlzZWN0b3JfdCBsYmEgPSBjbWQtPnRfdGFza19sYmE7Ci0JdW5zaWduZWQgaW50IG51bV9ibG9ja3M7CiAJaW50IHJldDsKIAkvKgotCSAqIEV4dHJhY3QgbnVtX2Jsb2NrcyBmcm9tIHRoZSBXUklURV9TQU1FXyogQ0RCLiAgVGhlbiB1c2UgdGhlIGV4cGxpY3QKLQkgKiByYW5nZSB3aGVuIG5vbiB6ZXJvIGlzIHN1cHBsaWVkLCBvdGhlcndpc2UgY2FsY3VsYXRlIHRoZSByZW1haW5pbmcKLQkgKiByYW5nZSBiYXNlZCBvbiAtPmdldF9ibG9ja3MoKSAtIHN0YXJ0aW5nIExCQS4KKwkgKiBVc2UgdGhlIGV4cGxpY2l0IHJhbmdlIHdoZW4gbm9uIHplcm8gaXMgc3VwcGxpZWQsIG90aGVyd2lzZSBjYWxjdWxhdGUKKwkgKiB0aGUgcmVtYWluaW5nIHJhbmdlIGJhc2VkIG9uIC0+Z2V0X2Jsb2NrcygpIC0gc3RhcnRpbmcgTEJBLgogCSAqLwotCWlmICh3cml0ZV9zYW1lMzIpCi0JCW51bV9ibG9ja3MgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmNtZC0+dF90YXNrX2NkYlsyOF0pOwotCWVsc2UKLQkJbnVtX2Jsb2NrcyA9IGdldF91bmFsaWduZWRfYmUzMigmY21kLT50X3Rhc2tfY2RiWzEwXSk7Ci0KIAlpZiAobnVtX2Jsb2NrcyAhPSAwKQogCQlyYW5nZSA9IG51bV9ibG9ja3M7CiAJZWxzZQpAQCAtMTExNyw4ICsxMTEzLDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl0YXNrLT50YXNrX3Njc2lfc3RhdHVzID0gR09PRDsKLQl0cmFuc3BvcnRfY29tcGxldGVfdGFzayh0YXNrLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE2NSwxMyArMTE1OSwyMyBAQAogCQl9CiAJCXJldCA9IHRhcmdldF9lbXVsYXRlX3VubWFwKHRhc2spOwogCQlicmVhazsKKwljYXNlIFdSSVRFX1NBTUU6CisJCWlmICghZGV2LT50cmFuc3BvcnQtPmRvX2Rpc2NhcmQpIHsKKwkJCXByX2VycigiV1JJVEVfU0FNRSBlbXVsYXRpb24gbm90IHN1cHBvcnRlZCIKKwkJCQkJIiBmb3I6ICVzXG4iLCBkZXYtPnRyYW5zcG9ydC0+bmFtZSk7CisJCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9VTktOT1dOX1NBTV9PUENPREU7CisJCX0KKwkJcmV0ID0gdGFyZ2V0X2VtdWxhdGVfd3JpdGVfc2FtZSh0YXNrLAorCQkJCWdldF91bmFsaWduZWRfYmUxNigmY21kLT50X3Rhc2tfY2RiWzddKSk7CisJCWJyZWFrOwogCWNhc2UgV1JJVEVfU0FNRV8xNjoKIAkJaWYgKCFkZXYtPnRyYW5zcG9ydC0+ZG9fZGlzY2FyZCkgewogCQkJcHJfZXJyKCJXUklURV9TQU1FXzE2IGVtdWxhdGlvbiBub3Qgc3VwcG9ydGVkIgogCQkJCQkiIGZvcjogJXNcbiIsIGRldi0+dHJhbnNwb3J0LT5uYW1lKTsKIAkJCXJldHVybiBQWVhfVFJBTlNQT1JUX1VOS05PV05fU0FNX09QQ09ERTsKIAkJfQotCQlyZXQgPSB0YXJnZXRfZW11bGF0ZV93cml0ZV9zYW1lKHRhc2ssIDApOworCQlyZXQgPSB0YXJnZXRfZW11bGF0ZV93cml0ZV9zYW1lKHRhc2ssCisJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZjbWQtPnRfdGFza19jZGJbMTBdKSk7CiAJCWJyZWFrOwogCWNhc2UgVkFSSUFCTEVfTEVOR1RIX0NNRDoKIAkJc2VydmljZV9hY3Rpb24gPQpAQCAtMTE4NCw3ICsxMTg4LDggQEAKIAkJCQkJZGV2LT50cmFuc3BvcnQtPm5hbWUpOwogCQkJCXJldHVybiBQWVhfVFJBTlNQT1JUX1VOS05PV05fU0FNX09QQ09ERTsKIAkJCX0KLQkJCXJldCA9IHRhcmdldF9lbXVsYXRlX3dyaXRlX3NhbWUodGFzaywgMSk7CisJCQlyZXQgPSB0YXJnZXRfZW11bGF0ZV93cml0ZV9zYW1lKHRhc2ssCisJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZjbWQtPnRfdGFza19jZGJbMjhdKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiVW5zdXBwb3J0ZWQgVkFSSUFCTEVfTEVOR1RIX0NNRCBTQToiCkBAIC0xMjE5LDggKzEyMjQsMTQgQEAKIAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCXRhc2stPnRhc2tfc2NzaV9zdGF0dXMgPSBHT09EOwotCXRyYW5zcG9ydF9jb21wbGV0ZV90YXNrKHRhc2ssIDEpOworCS8qCisJICogSGFuZGxlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gaGVyZSB1bmxlc3MgYSBjYWxsZXIKKwkgKiBoYXMgZXhwbGljdGx5IHJlcXVlc3RlZCBhbiBhc3ljaHJvbm91cyBjb21wbGV0aW9uLgorCSAqLworCWlmICghKGNtZC0+c2VfY21kX2ZsYWdzICYgU0NGX0VNVUxBVEVfQ0RCX0FTWU5DKSkgeworCQl0YXNrLT50YXNrX3Njc2lfc3RhdHVzID0gR09PRDsKKwkJdHJhbnNwb3J0X2NvbXBsZXRlX3Rhc2sodGFzaywgMSk7CisJfQogCiAJcmV0dXJuIFBZWF9UUkFOU1BPUlRfU0VOVF9UT19UUkFOU1BPUlQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCmluZGV4IGIzOGI2YzkuLmNhNmU0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCkBAIC00NzIsOSArNDcyLDkgQEAKIAlzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpkZXZlOwogCXUzMiBpOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuYWNsLCAmdHBnLT5hY2xfbm9kZV9saXN0LCBhY2xfbGlzdCkgewotCQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCiAJCXNwaW5fbG9ja19pcnEoJm5hY2wtPmRldmljZV9saXN0X2xvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEc7IGkrKykgewpAQCAtNDkxLDkgKzQ5MSw5IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZuYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKIAotCQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzZV9wb3J0ICpjb3JlX2FsbG9jX3BvcnQoc3RydWN0IHNlX2RldmljZSAqZGV2KQpAQCAtODM5LDYgKzgzOSwyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3UzMiBzZV9kZXZfYWxpZ25fbWF4X3NlY3RvcnModTMyIG1heF9zZWN0b3JzLCB1MzIgYmxvY2tfc2l6ZSkKK3sKKwl1MzIgdG1wLCBhbGlnbmVkX21heF9zZWN0b3JzOworCS8qCisJICogTGltaXQgbWF4X3NlY3RvcnMgdG8gYSBQQUdFX1NJWkUgYWxpZ25lZCB2YWx1ZSBmb3IgbW9kZXJuCisJICogdHJhbnNwb3J0X2FsbG9jYXRlX2RhdGFfdGFza3MoKSBvcGVyYXRpb24uCisJICovCisJdG1wID0gcm91bmRkb3duKChtYXhfc2VjdG9ycyAqIGJsb2NrX3NpemUpLCBQQUdFX1NJWkUpOworCWFsaWduZWRfbWF4X3NlY3RvcnMgPSAodG1wIC8gYmxvY2tfc2l6ZSk7CisJaWYgKG1heF9zZWN0b3JzICE9IGFsaWduZWRfbWF4X3NlY3RvcnMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUm91bmRpbmcgZG93biBhbGlnbmVkIG1heF9zZWN0b3JzIGZyb20gJXUiCisJCQkJIiB0byAldVxuIiwgbWF4X3NlY3RvcnMsIGFsaWduZWRfbWF4X3NlY3RvcnMpOworCQlyZXR1cm4gYWxpZ25lZF9tYXhfc2VjdG9yczsKKwl9CisKKwlyZXR1cm4gbWF4X3NlY3RvcnM7Cit9CisKIHZvaWQgc2VfZGV2X3NldF9kZWZhdWx0X2F0dHJpYnMoCiAJc3RydWN0IHNlX2RldmljZSAqZGV2LAogCXN0cnVjdCBzZV9kZXZfbGltaXRzICpkZXZfbGltaXRzKQpAQCAtODc4LDYgKzg5NiwxMSBAQAogCSAqIG1heF9zZWN0b3JzIGlzIGJhc2VkIG9uIHN1YnN5c3RlbSBwbHVnaW4gZGVwZW5kZW50IHJlcXVpcmVtZW50cy4KIAkgKi8KIAlkZXYtPnNlX3N1Yl9kZXYtPnNlX2Rldl9hdHRyaWIuaHdfbWF4X3NlY3RvcnMgPSBsaW1pdHMtPm1heF9od19zZWN0b3JzOworCS8qCisJICogQWxpZ24gbWF4X3NlY3RvcnMgZG93biB0byBQQUdFX1NJWkUgdG8gZm9sbG93IHRyYW5zcG9ydF9hbGxvY2F0ZV9kYXRhX3Rhc2tzKCkKKwkgKi8KKwlsaW1pdHMtPm1heF9zZWN0b3JzID0gc2VfZGV2X2FsaWduX21heF9zZWN0b3JzKGxpbWl0cy0+bWF4X3NlY3RvcnMsCisJCQkJCQlsaW1pdHMtPmxvZ2ljYWxfYmxvY2tfc2l6ZSk7CiAJZGV2LT5zZV9zdWJfZGV2LT5zZV9kZXZfYXR0cmliLm1heF9zZWN0b3JzID0gbGltaXRzLT5tYXhfc2VjdG9yczsKIAkvKgogCSAqIFNldCBvcHRpbWFsX3NlY3RvcnMgZnJvbSBtYXhfc2VjdG9ycywgd2hpY2ggY2FuIGJlIGxvd2VyZWQgdmlhCkBAIC0xMjQyLDYgKzEyNjUsMTEgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQorCS8qCisJICogQWxpZ24gbWF4X3NlY3RvcnMgZG93biB0byBQQUdFX1NJWkUgdG8gZm9sbG93IHRyYW5zcG9ydF9hbGxvY2F0ZV9kYXRhX3Rhc2tzKCkKKwkgKi8KKwltYXhfc2VjdG9ycyA9IHNlX2Rldl9hbGlnbl9tYXhfc2VjdG9ycyhtYXhfc2VjdG9ycywKKwkJCQlkZXYtPnNlX3N1Yl9kZXYtPnNlX2Rldl9hdHRyaWIuYmxvY2tfc2l6ZSk7CiAKIAlkZXYtPnNlX3N1Yl9kZXYtPnNlX2Rldl9hdHRyaWIubWF4X3NlY3RvcnMgPSBtYXhfc2VjdG9yczsKIAlwcl9kZWJ1ZygiZGV2WyVwXTogU0UgRGV2aWNlIG1heF9zZWN0b3JzIGNoYW5nZWQgdG8gJXVcbiIsCkBAIC0xMzQ0LDE1ICsxMzcyLDE3IEBACiAJICovCiAJaWYgKHRwZy0+c2VfdHBnX3Rmby0+dHBnX2NoZWNrX2RlbW9fbW9kZSh0cGcpKSB7CiAJCXN0cnVjdCBzZV9ub2RlX2FjbCAqYWNsOwotCQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYWNsLCAmdHBnLT5hY2xfbm9kZV9saXN0LCBhY2xfbGlzdCkgewotCQkJaWYgKGFjbC0+ZHluYW1pY19ub2RlX2FjbCkgewotCQkJCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQkJaWYgKGFjbC0+ZHluYW1pY19ub2RlX2FjbCAmJgorCQkJICAgICghdHBnLT5zZV90cGdfdGZvLT50cGdfY2hlY2tfZGVtb19tb2RlX2xvZ2luX29ubHkgfHwKKwkJCSAgICAgIXRwZy0+c2VfdHBnX3Rmby0+dHBnX2NoZWNrX2RlbW9fbW9kZV9sb2dpbl9vbmx5KHRwZykpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQkJCWNvcmVfdHBnX2FkZF9ub2RlX3RvX2RldnMoYWNsLCB0cGcpOwotCQkJCXNwaW5fbG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJCQlzcGluX2xvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJfQogCiAJcmV0dXJuIGx1bl9wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYwppbmRleCBmMTY1NDY5Li41NWJiZTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAKIAlzZV9uYWNsID0gdGYtPnRmX29wcy5mYWJyaWNfbWFrZV9ub2RlYWNsKHNlX3RwZywgZ3JvdXAsIG5hbWUpOwogCWlmIChJU19FUlIoc2VfbmFjbCkpCi0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoc2VfbmFjbCkpOworCQlyZXR1cm4gRVJSX0NBU1Qoc2VfbmFjbCk7CiAKIAluYWNsX2NnID0gJnNlX25hY2wtPmFjbF9ncm91cDsKIAluYWNsX2NnLT5kZWZhdWx0X2dyb3VwcyA9IHNlX25hY2wtPmFjbF9kZWZhdWx0X2dyb3VwczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wci5jCmluZGV4IDFjMWI4NDkuLjdmZDNhMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3ByLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHIuYwpAQCAtMTU5OCwxNCArMTU5OCwxNCBAQAogCQkJICogZnJvbSB0aGUgZGVjb2RlZCBmYWJyaWMgbW9kdWxlIHNwZWNpZmljIFRyYW5zcG9ydElECiAJCQkgKiBhdCAqaV9zdHIuCiAJCQkgKi8KLQkJCXNwaW5fbG9ja19iaCgmdG1wX3RwZy0+YWNsX25vZGVfbG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZ0bXBfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAkJCWRlc3Rfbm9kZV9hY2wgPSBfX2NvcmVfdHBnX2dldF9pbml0aWF0b3Jfbm9kZV9hY2woCiAJCQkJCQl0bXBfdHBnLCBpX3N0cik7CiAJCQlpZiAoZGVzdF9ub2RlX2FjbCkgewogCQkJCWF0b21pY19pbmMoJmRlc3Rfbm9kZV9hY2wtPmFjbF9wcl9yZWZfY291bnQpOwogCQkJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogCQkJfQotCQkJc3Bpbl91bmxvY2tfYmgoJnRtcF90cGctPmFjbF9ub2RlX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ0bXBfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCQkJaWYgKCFkZXN0X25vZGVfYWNsKSB7CiAJCQkJY29yZV9zY3NpM190cGdfdW5kZXBlbmRfaXRlbSh0bXBfdHBnKTsKQEAgLTM0OTYsMTQgKzM0OTYsMTQgQEAKIAkvKgogCSAqIExvY2F0ZSB0aGUgZGVzdGluYXRpb24gc3RydWN0IHNlX25vZGVfYWNsIGZyb20gdGhlIHJlY2VpdmVkIFRyYW5zcG9ydCBJRAogCSAqLwotCXNwaW5fbG9ja19iaCgmZGVzdF9zZV90cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJmRlc3Rfc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAlkZXN0X25vZGVfYWNsID0gX19jb3JlX3RwZ19nZXRfaW5pdGlhdG9yX25vZGVfYWNsKGRlc3Rfc2VfdHBnLAogCQkJCWluaXRpYXRvcl9zdHIpOwogCWlmIChkZXN0X25vZGVfYWNsKSB7CiAJCWF0b21pY19pbmMoJmRlc3Rfbm9kZV9hY2wtPmFjbF9wcl9yZWZfY291bnQpOwogCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmRlc3Rfc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmRlc3Rfc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCWlmICghZGVzdF9ub2RlX2FjbCkgewogCQlwcl9lcnIoIlVuYWJsZSB0byBsb2NhdGUgJXMgZGVzdF9ub2RlX2FjbCBmb3IiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9yZC5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcmQuYwppbmRleCAzZGQ4MWQyLi5lNTY3ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9yZC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3JkLmMKQEAgLTM5MCwxMiArMzkwLDEwIEBACiAJCQkJbGVuZ3RoID0gcmVxLT5yZF9zaXplOwogCiAJCQlkc3QgPSBzZ192aXJ0KCZzZ19kW2krK10pICsgZHN0X29mZnNldDsKLQkJCWlmICghZHN0KQotCQkJCUJVRygpOworCQkJQlVHX09OKCFkc3QpOwogCiAJCQlzcmMgPSBzZ192aXJ0KCZzZ19zW2pdKSArIHNyY19vZmZzZXQ7Ci0JCQlpZiAoIXNyYykKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighc3JjKTsKIAogCQkJZHN0X29mZnNldCA9IDA7CiAJCQlzcmNfb2Zmc2V0ID0gbGVuZ3RoOwpAQCAtNDE1LDggKzQxMyw3IEBACiAJCQkJbGVuZ3RoID0gcmVxLT5yZF9zaXplOwogCiAJCQlkc3QgPSBzZ192aXJ0KCZzZ19kW2ldKSArIGRzdF9vZmZzZXQ7Ci0JCQlpZiAoIWRzdCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighZHN0KTsKIAogCQkJaWYgKHNnX2RbaV0ubGVuZ3RoID09IGxlbmd0aCkgewogCQkJCWkrKzsKQEAgLTQyNSw4ICs0MjIsNyBAQAogCQkJCWRzdF9vZmZzZXQgPSBsZW5ndGg7CiAKIAkJCXNyYyA9IHNnX3ZpcnQoJnNnX3NbaisrXSkgKyBzcmNfb2Zmc2V0OwotCQkJaWYgKCFzcmMpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oIXNyYyk7CiAKIAkJCXNyY19vZmZzZXQgPSAwOwogCQkJcGFnZV9lbmQgPSAxOwpAQCAtNTEwLDEyICs1MDYsMTAgQEAKIAkJCQlsZW5ndGggPSByZXEtPnJkX3NpemU7CiAKIAkJCXNyYyA9IHNnX3ZpcnQoJnNnX3NbaSsrXSkgKyBzcmNfb2Zmc2V0OwotCQkJaWYgKCFzcmMpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oIXNyYyk7CiAKIAkJCWRzdCA9IHNnX3ZpcnQoJnNnX2Rbal0pICsgZHN0X29mZnNldDsKLQkJCWlmICghZHN0KQotCQkJCUJVRygpOworCQkJQlVHX09OKCFkc3QpOwogCiAJCQlzcmNfb2Zmc2V0ID0gMDsKIAkJCWRzdF9vZmZzZXQgPSBsZW5ndGg7CkBAIC01MzUsOCArNTI5LDcgQEAKIAkJCQlsZW5ndGggPSByZXEtPnJkX3NpemU7CiAKIAkJCXNyYyA9IHNnX3ZpcnQoJnNnX3NbaV0pICsgc3JjX29mZnNldDsKLQkJCWlmICghc3JjKQotCQkJCUJVRygpOworCQkJQlVHX09OKCFzcmMpOwogCiAJCQlpZiAoc2dfc1tpXS5sZW5ndGggPT0gbGVuZ3RoKSB7CiAJCQkJaSsrOwpAQCAtNTQ1LDggKzUzOCw3IEBACiAJCQkJc3JjX29mZnNldCA9IGxlbmd0aDsKIAogCQkJZHN0ID0gc2dfdmlydCgmc2dfZFtqKytdKSArIGRzdF9vZmZzZXQ7Ci0JCQlpZiAoIWRzdCkKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighZHN0KTsKIAogCQkJZHN0X29mZnNldCA9IDA7CiAJCQlwYWdlX2VuZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5jCmluZGV4IDRmMWJhNGMuLjE2MmI3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5jCkBAIC0xMzcsMTUgKzEzNywxNSBAQAogewogCXN0cnVjdCBzZV9ub2RlX2FjbCAqYWNsOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhY2wsICZ0cGctPmFjbF9ub2RlX2xpc3QsIGFjbF9saXN0KSB7CiAJCWlmICghc3RyY21wKGFjbC0+aW5pdGlhdG9ybmFtZSwgaW5pdGlhdG9ybmFtZSkgJiYKIAkJICAgICFhY2wtPmR5bmFtaWNfbm9kZV9hY2wpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQkJcmV0dXJuIGFjbDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI5OCwxMyArMjk4LDIxIEBACiAJCXRwZy0+c2VfdHBnX3Rmby0+dHBnX3JlbGVhc2VfZmFicmljX2FjbCh0cGcsIGFjbCk7CiAJCXJldHVybiBOVUxMOwogCX0KKwkvKgorCSAqIEhlcmUgd2Ugb25seSBjcmVhdGUgZGVtby1tb2RlIE1hcHBlZExVTnMgZnJvbSB0aGUgYWN0aXZlCisJICogVFBHIExVTnMgaWYgdGhlIGZhYnJpYyBpcyBub3QgZXhwbGljdGx5IGFza2luZyBmb3IKKwkgKiB0cGdfY2hlY2tfZGVtb19tb2RlX2xvZ2luX29ubHkoKSA9PSAxLgorCSAqLworCWlmICgodHBnLT5zZV90cGdfdGZvLT50cGdfY2hlY2tfZGVtb19tb2RlX2xvZ2luX29ubHkgIT0gTlVMTCkgJiYKKwkgICAgKHRwZy0+c2VfdHBnX3Rmby0+dHBnX2NoZWNrX2RlbW9fbW9kZV9sb2dpbl9vbmx5KHRwZykgPT0gMSkpCisJCWRvIHsgOyB9IHdoaWxlICgwKTsKKwllbHNlCisJCWNvcmVfdHBnX2FkZF9ub2RlX3RvX2RldnMoYWNsLCB0cGcpOwogCi0JY29yZV90cGdfYWRkX25vZGVfdG9fZGV2cyhhY2wsIHRwZyk7Ci0KLQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZhY2wtPmFjbF9saXN0LCAmdHBnLT5hY2xfbm9kZV9saXN0KTsKIAl0cGctPm51bV9ub2RlX2FjbHMrKzsKLQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlwcl9kZWJ1ZygiJXNfVFBHWyV1XSAtIEFkZGVkIERZTkFNSUMgQUNMIHdpdGggVENRIERlcHRoOiAlZCBmb3IgJXMiCiAJCSIgSW5pdGlhdG9yIE5vZGU6ICVzXG4iLCB0cGctPnNlX3RwZ190Zm8tPmdldF9mYWJyaWNfbmFtZSgpLApAQCAtMzU0LDcgKzM2Miw3IEBACiB7CiAJc3RydWN0IHNlX25vZGVfYWNsICphY2wgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJYWNsID0gX19jb3JlX3RwZ19nZXRfaW5pdGlhdG9yX25vZGVfYWNsKHRwZywgaW5pdGlhdG9ybmFtZSk7CiAJaWYgKGFjbCkgewogCQlpZiAoYWNsLT5keW5hbWljX25vZGVfYWNsKSB7CkBAIC0zNjIsNyArMzcwLDcgQEAKIAkJCXByX2RlYnVnKCIlc19UUEdbJXVdIC0gUmVwbGFjaW5nIGR5bmFtaWMgQUNMIgogCQkJCSIgZm9yICVzXG4iLCB0cGctPnNlX3RwZ190Zm8tPmdldF9mYWJyaWNfbmFtZSgpLAogCQkJCXRwZy0+c2VfdHBnX3Rmby0+dHBnX2dldF90YWcodHBnKSwgaW5pdGlhdG9ybmFtZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAkJCS8qCiAJCQkgKiBSZWxlYXNlIHRoZSBsb2NhbGx5IGFsbG9jYXRlZCBzdHJ1Y3Qgc2Vfbm9kZV9hY2wKIAkJCSAqIGJlY2F1c2UgKiBjb3JlX3RwZ19hZGRfaW5pdGlhdG9yX25vZGVfYWNsKCkgcmV0dXJuZWQKQEAgLTM3OCwxMCArMzg2LDEwIEBACiAJCQkiIE5vZGUgJXMgYWxyZWFkeSBleGlzdHMgZm9yIFRQRyAldSwgaWdub3JpbmciCiAJCQkiIHJlcXVlc3QuXG4iLCAgdHBnLT5zZV90cGdfdGZvLT5nZXRfZmFicmljX25hbWUoKSwKIAkJCWluaXRpYXRvcm5hbWUsIHRwZy0+c2VfdHBnX3Rmby0+dHBnX2dldF90YWcodHBnKSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJCXJldHVybiBFUlJfUFRSKC1FRVhJU1QpOwogCX0KLQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlpZiAoIXNlX25hY2wpIHsKIAkJcHJfZXJyKCJzdHJ1Y3Qgc2Vfbm9kZV9hY2wgcG9pbnRlciBpcyBOVUxMXG4iKTsKQEAgLTQxOCwxMCArNDI2LDEwIEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAotCXNwaW5fbG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmFjbC0+YWNsX2xpc3QsICZ0cGctPmFjbF9ub2RlX2xpc3QpOwogCXRwZy0+bnVtX25vZGVfYWNscysrOwotCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogZG9uZToKIAlwcl9kZWJ1ZygiJXNfVFBHWyVodV0gLSBBZGRlZCBBQ0wgd2l0aCBUQ1EgRGVwdGg6ICVkIGZvciAlcyIKQEAgLTQ0NSwxNCArNDUzLDE0IEBACiAJc3RydWN0IHNlX3Nlc3Npb24gKnNlc3MsICpzZXNzX3RtcDsKIAlpbnQgZHluYW1pY19hY2wgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJaWYgKGFjbC0+ZHluYW1pY19ub2RlX2FjbCkgewogCQlhY2wtPmR5bmFtaWNfbm9kZV9hY2wgPSAwOwogCQlkeW5hbWljX2FjbCA9IDE7CiAJfQogCWxpc3RfZGVsKCZhY2wtPmFjbF9saXN0KTsKIAl0cGctPm51bV9ub2RlX2FjbHMtLTsKLQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlzcGluX2xvY2tfYmgoJnRwZy0+c2Vzc2lvbl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2Vzcywgc2Vzc190bXAsCkBAIC01MDMsMjEgKzUxMSwyMSBAQAogCXN0cnVjdCBzZV9ub2RlX2FjbCAqYWNsOwogCWludCBkeW5hbWljX2FjbCA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAlhY2wgPSBfX2NvcmVfdHBnX2dldF9pbml0aWF0b3Jfbm9kZV9hY2wodHBnLCBpbml0aWF0b3JuYW1lKTsKIAlpZiAoIWFjbCkgewogCQlwcl9lcnIoIkFjY2VzcyBDb250cm9sIExpc3QgZW50cnkgZm9yICVzIEluaXRpYXRvciIKIAkJCSIgTm9kZSAlcyBkb2VzIG5vdCBleGlzdHMgZm9yIFRQRyAlaHUsIGlnbm9yaW5nIgogCQkJIiByZXF1ZXN0LlxuIiwgdHBnLT5zZV90cGdfdGZvLT5nZXRfZmFicmljX25hbWUoKSwKIAkJCWluaXRpYXRvcm5hbWUsIHRwZy0+c2VfdHBnX3Rmby0+dHBnX2dldF90YWcodHBnKSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQlzcGluX3VubG9ja19pcnEoJnRwZy0+YWNsX25vZGVfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYWNsLT5keW5hbWljX25vZGVfYWNsKSB7CiAJCWFjbC0+ZHluYW1pY19ub2RlX2FjbCA9IDA7CiAJCWR5bmFtaWNfYWNsID0gMTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCiAJc3Bpbl9sb2NrX2JoKCZ0cGctPnNlc3Npb25fbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXNzLCAmdHBnLT50cGdfc2Vzc19saXN0LCBzZXNzX2xpc3QpIHsKQEAgLTUzMywxMCArNTQxLDEwIEBACiAJCQkJdHBnLT5zZV90cGdfdGZvLT5nZXRfZmFicmljX25hbWUoKSwgaW5pdGlhdG9ybmFtZSk7CiAJCQlzcGluX3VubG9ja19iaCgmdHBnLT5zZXNzaW9uX2xvY2spOwogCi0JCQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJCQlzcGluX2xvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQkJaWYgKGR5bmFtaWNfYWNsKQogCQkJCWFjbC0+ZHluYW1pY19ub2RlX2FjbCA9IDE7Ci0JCQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CiAJCS8qCkBAIC01NzEsMTAgKzU3OSwxMCBAQAogCQlpZiAoaW5pdF9zZXNzKQogCQkJdHBnLT5zZV90cGdfdGZvLT5jbG9zZV9zZXNzaW9uKGluaXRfc2Vzcyk7CiAKLQkJc3Bpbl9sb2NrX2JoKCZ0cGctPmFjbF9ub2RlX2xvY2spOworCQlzcGluX2xvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQlpZiAoZHluYW1pY19hY2wpCiAJCQlhY2wtPmR5bmFtaWNfbm9kZV9hY2wgPSAxOwotCQlzcGluX3VubG9ja19iaCgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnRwZy0+c2Vzc2lvbl9sb2NrKTsKQEAgLTU5MCwxMCArNTk4LDEwIEBACiAJCWluaXRpYXRvcm5hbWUsIHRwZy0+c2VfdHBnX3Rmby0+Z2V0X2ZhYnJpY19uYW1lKCksCiAJCXRwZy0+c2VfdHBnX3Rmby0+dHBnX2dldF90YWcodHBnKSk7CiAKLQlzcGluX2xvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAlpZiAoZHluYW1pY19hY2wpCiAJCWFjbC0+ZHluYW1pY19ub2RlX2FjbCA9IDE7Ci0Jc3Bpbl91bmxvY2tfYmgoJnRwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ0cGctPmFjbF9ub2RlX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MTcsMjAgKzcyNSwyMCBAQAogCSAqIG5vdCBiZWVuIHJlbGVhc2VkIGJlY2F1c2Ugb2YgVEZPLT50cGdfY2hlY2tfZGVtb19tb2RlX2NhY2hlKCkgPT0gMQogCSAqIGluIHRyYW5zcG9ydF9kZXJlZ2lzdGVyX3Nlc3Npb24oKS4KIAkgKi8KLQlzcGluX2xvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmFjbCwgbmFjbF90bXAsICZzZV90cGctPmFjbF9ub2RlX2xpc3QsCiAJCQlhY2xfbGlzdCkgewogCQlsaXN0X2RlbCgmbmFjbC0+YWNsX2xpc3QpOwogCQlzZV90cGctPm51bV9ub2RlX2FjbHMtLTsKLQkJc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCQljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihuYWNsKTsKIAkJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKG5hY2wsIHNlX3RwZyk7CiAJCXNlX3RwZy0+c2VfdHBnX3Rmby0+dHBnX3JlbGVhc2VfZmFicmljX2FjbChzZV90cGcsIG5hY2wpOwogCi0JCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwogCiAJaWYgKHNlX3RwZy0+c2VfdHBnX3R5cGUgPT0gVFJBTlNQT1JUX1RQR19UWVBFX05PUk1BTCkKIAkJY29yZV90cGdfcmVsZWFzZV92aXJ0dWFsX2x1bjAoc2VfdHBnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKaW5kZXggYzc1YTAxYS4uOGQwYzU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKQEAgLTM4OSwxNyArMzg5LDE4IEBACiB7CiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gc2Vfc2Vzcy0+c2VfdHBnOwogCXN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfbmFjbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFzZV90cGcpIHsKIAkJdHJhbnNwb3J0X2ZyZWVfc2Vzc2lvbihzZV9zZXNzKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5zZXNzaW9uX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZV90cGctPnNlc3Npb25fbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZzZV9zZXNzLT5zZXNzX2xpc3QpOwogCXNlX3Nlc3MtPnNlX3RwZyA9IE5VTEw7CiAJc2Vfc2Vzcy0+ZmFicmljX3Nlc3NfcHRyID0gTlVMTDsKLQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5zZXNzaW9uX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlX3RwZy0+c2Vzc2lvbl9sb2NrLCBmbGFncyk7CiAKIAkvKgogCSAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIGRvIGV4dHJhIHdvcmsgZm9yIHRoaXMgaW5pdGlhdG9yIG5vZGUncwpAQCAtNDA3LDIyICs0MDgsMjIgQEAKIAkgKi8KIAlzZV9uYWNsID0gc2Vfc2Vzcy0+c2Vfbm9kZV9hY2w7CiAJaWYgKHNlX25hY2wpIHsKLQkJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrLCBmbGFncyk7CiAJCWlmIChzZV9uYWNsLT5keW5hbWljX25vZGVfYWNsKSB7CiAJCQlpZiAoIXNlX3RwZy0+c2VfdHBnX3Rmby0+dHBnX2NoZWNrX2RlbW9fbW9kZV9jYWNoZSgKIAkJCQkJc2VfdHBnKSkgewogCQkJCWxpc3RfZGVsKCZzZV9uYWNsLT5hY2xfbGlzdCk7CiAJCQkJc2VfdHBnLT5udW1fbm9kZV9hY2xzLS07Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrLCBmbGFncyk7CiAKIAkJCQljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihzZV9uYWNsKTsKIAkJCQljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUoc2VfbmFjbCwgc2VfdHBnKTsKIAkJCQlzZV90cGctPnNlX3RwZ190Zm8tPnRwZ19yZWxlYXNlX2ZhYnJpY19hY2woc2VfdHBnLAogCQkJCQkJc2VfbmFjbCk7Ci0JCQkJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzZV90cGctPmFjbF9ub2RlX2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrLCBmbGFncyk7CiAJfQogCiAJdHJhbnNwb3J0X2ZyZWVfc2Vzc2lvbihzZV9zZXNzKTsKQEAgLTE3NDcsNiArMTc0OCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHRyYW5zcG9ydF9nZW5lcmljX2hhbmRsZV9jZGIpOwogCitzdGF0aWMgdm9pZCB0cmFuc3BvcnRfZ2VuZXJpY19yZXF1ZXN0X2ZhaWx1cmUoc3RydWN0IHNlX2NtZCAqLAorCQkJc3RydWN0IHNlX2RldmljZSAqLCBpbnQsIGludCk7CiAvKgogICogVXNlZCBieSBmYWJyaWMgbW9kdWxlIGZyb250ZW5kcyB0byBxdWV1ZSB0YXNrcyBkaXJlY3RseS4KICAqIE1hbnkgb25seSBiZSB1c2VkIGZyb20gcHJvY2VzcyBjb250ZXh0IG9ubHkKQEAgLTE3NTQsNiArMTc1Nyw4IEBACiBpbnQgdHJhbnNwb3J0X2hhbmRsZV9jZGJfZGlyZWN0KAogCXN0cnVjdCBzZV9jbWQgKmNtZCkKIHsKKwlpbnQgcmV0OworCiAJaWYgKCFjbWQtPnNlX2x1bikgewogCQlkdW1wX3N0YWNrKCk7CiAJCXByX2VycigiY21kLT5zZV9sdW4gaXMgTlVMTFxuIik7CkBAIC0xNzY1LDggKzE3NzAsMzEgQEAKIAkJCQkiIGZyb20gaW50ZXJydXB0IGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlyZXR1cm4gdHJhbnNwb3J0X2dlbmVyaWNfbmV3X2NtZChjbWQpOworCS8qCisJICogU2V0IFRSQU5TUE9SVF9ORVdfQ01EIHN0YXRlIGFuZCBjbWQtPnRfdHJhbnNwb3J0X2FjdGl2ZT0xIGZvbGxvd2luZworCSAqIHRyYW5zcG9ydF9nZW5lcmljX2hhbmRsZV9jZGIqKCkgLT4gdHJhbnNwb3J0X2FkZF9jbWRfdG9fcXVldWUoKQorCSAqIGluIGV4aXN0aW5nIHVzYWdlIHRvIGVuc3VyZSB0aGF0IG91dHN0YW5kaW5nIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkCisJICogY29ycmVjdGx5IGR1cmluZyBzaHV0ZG93biB2aWEgdHJhbnNwb3J0X2dlbmVyaWNfd2FpdF9mb3JfdGFza3MoKQorCSAqCisJICogQWxzbywgd2UgZG9uJ3QgdGFrZSBjbWQtPnRfc3RhdGVfbG9jayBoZXJlIGFzIHdlIG9ubHkgZXhwZWN0CisJICogdGhpcyB0byBiZSBjYWxsZWQgZm9yIGluaXRpYWwgZGVzY3JpcHRvciBzdWJtaXNzaW9uLgorCSAqLworCWNtZC0+dF9zdGF0ZSA9IFRSQU5TUE9SVF9ORVdfQ01EOworCWF0b21pY19zZXQoJmNtZC0+dF90cmFuc3BvcnRfYWN0aXZlLCAxKTsKKwkvKgorCSAqIHRyYW5zcG9ydF9nZW5lcmljX25ld19jbWQoKSBpcyBhbHJlYWR5IGhhbmRsaW5nIFFVRVVFX0ZVTEwsCisJICogc28gZm9sbG93IFRSQU5TUE9SVF9ORVdfQ01EIHByb2Nlc3NpbmcgdGhyZWFkIGNvbnRleHQgdXNhZ2UKKwkgKiBhbmQgY2FsbCB0cmFuc3BvcnRfZ2VuZXJpY19yZXF1ZXN0X2ZhaWx1cmUoKSBpZiBuZWNlc3NhcnkuLgorCSAqLworCXJldCA9IHRyYW5zcG9ydF9nZW5lcmljX25ld19jbWQoY21kKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCXJldHVybiAwOworCWVsc2UgaWYgKHJldCA8IDApIHsKKwkJY21kLT50cmFuc3BvcnRfZXJyb3Jfc3RhdHVzID0gcmV0OworCQl0cmFuc3BvcnRfZ2VuZXJpY19yZXF1ZXN0X2ZhaWx1cmUoY21kLCBOVUxMLCAwLAorCQkJCShjbWQtPmRhdGFfZGlyZWN0aW9uICE9IERNQV9UT19ERVZJQ0UpKTsKKwl9CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHRyYW5zcG9ydF9oYW5kbGVfY2RiX2RpcmVjdCk7CiAKQEAgLTIwMjYsOCArMjA1NCwxNCBAQAogCQljbWQtPnNjc2lfc2Vuc2VfcmVhc29uID0gVENNX1VOU1VQUE9SVEVEX1NDU0lfT1BDT0RFOwogCQlicmVhazsKIAl9Ci0KLQlpZiAoIXNjKQorCS8qCisJICogSWYgYSBmYWJyaWMgZG9lcyBub3QgZGVmaW5lIGEgY21kLT5zZV90Zm8tPm5ld19jbWRfbWFwIGNhbGxlciwKKwkgKiBtYWtlIHRoZSBjYWxsIHRvIHRyYW5zcG9ydF9zZW5kX2NoZWNrX2NvbmRpdGlvbl9hbmRfc2Vuc2UoKQorCSAqIGRpcmVjdGx5LiAgT3RoZXJ3aXNlIGV4cGVjdCB0aGUgZmFicmljIHRvIG1ha2UgdGhlIGNhbGwgdG8KKwkgKiB0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKCkgYWZ0ZXIgaGFuZGxpbmcKKwkgKiBwb3NzaWJsZSB1bnNvbGl0aWNpZWQgd3JpdGUgZGF0YSBwYXlsb2Fkcy4KKwkgKi8KKwlpZiAoIXNjICYmICFjbWQtPnNlX3Rmby0+bmV3X2NtZF9tYXApCiAJCXRyYW5zcG9ydF9uZXdfY21kX2ZhaWx1cmUoY21kKTsKIAllbHNlIHsKIAkJcmV0ID0gdHJhbnNwb3J0X3NlbmRfY2hlY2tfY29uZGl0aW9uX2FuZF9zZW5zZShjbWQsCkBAIC0yODIwLDEyICsyODU0LDQyIEBACiAJCQkiIHRyYW5zcG9ydF9kZXZfZW5kX2xiYSgpOiAlbGx1XG4iLAogCQkJY21kLT50X3Rhc2tfbGJhLCBzZWN0b3JzLAogCQkJdHJhbnNwb3J0X2Rldl9lbmRfbGJhKGRldikpOwotCQlwcl9lcnIoIiAgV2Ugc2hvdWxkIHJldHVybiBDSEVDS19DT05ESVRJT04iCi0JCSAgICAgICAiIGJ1dCB3ZSBkb24ndCB5ZXRcbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIHNlY3RvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGFyZ2V0X2NoZWNrX3dyaXRlX3NhbWVfZGlzY2FyZCh1bnNpZ25lZCBjaGFyICpmbGFncywgc3RydWN0IHNlX2RldmljZSAqZGV2KQoreworCS8qCisJICogRGV0ZXJtaW5lIGlmIHRoZSByZWNlaXZlZCBXUklURV9TQU1FIGlzIHVzZWQgdG8gZm9yIGRpcmVjdAorCSAqIHBhc3N0aHJvdWdoIGludG8gTGludXgvU0NTSSB3aXRoIHN0cnVjdCByZXF1ZXN0IHZpYSBUQ00vcFNDU0kKKwkgKiBvciB3ZSBhcmUgc2lnbmFsaW5nIHRoZSB1c2Ugb2YgaW50ZXJuYWwgV1JJVEVfU0FNRSArIFVOTUFQPTEKKwkgKiBlbXVsYXRpb24gZm9yIC0+IExpbnV4L0JMT0NLIGRpc2JhcmQgd2l0aCBUQ00vSUJMT0NLIGNvZGUuCisJICovCisJaW50IHBhc3N0aHJvdWdoID0gKGRldi0+dHJhbnNwb3J0LT50cmFuc3BvcnRfdHlwZSA9PQorCQkJCVRSQU5TUE9SVF9QTFVHSU5fUEhCQV9QREVWKTsKKworCWlmICghcGFzc3Rocm91Z2gpIHsKKwkJaWYgKChmbGFnc1swXSAmIDB4MDQpIHx8IChmbGFnc1swXSAmIDB4MDIpKSB7CisJCQlwcl9lcnIoIldSSVRFX1NBTUUgUEJEQVRBIGFuZCBMQkRBVEEiCisJCQkJIiBiaXRzIG5vdCBzdXBwb3J0ZWQgZm9yIEJsb2NrIERpc2NhcmQiCisJCQkJIiBFbXVsYXRpb25cbiIpOworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwkJLyoKKwkJICogQ3VycmVudGx5IGZvciB0aGUgZW11bGF0ZWQgY2FzZSB3ZSBvbmx5IGFjY2VwdAorCQkgKiB0cHdzIHdpdGggdGhlIFVOTUFQPTEgYml0IHNldC4KKwkJICovCisJCWlmICghKGZsYWdzWzBdICYgMHgwOCkpIHsKKwkJCXByX2VycigiV1JJVEVfU0FNRSB3L28gVU5NQVAgYml0IG5vdCIKKwkJCQkiIHN1cHBvcnRlZCBmb3IgQmxvY2sgRGlzY2FyZCBFbXVsYXRpb25cbiIpOworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoJdHJhbnNwb3J0X2dlbmVyaWNfY21kX3NlcXVlbmNlcigpOgpAQCAtMzAzOCw3ICszMTAyLDcgQEAKIAkJCQlnb3RvIG91dF91bnN1cHBvcnRlZF9jZGI7CiAKIAkJCWlmIChzZWN0b3JzKQotCQkJCXNpemUgPSB0cmFuc3BvcnRfZ2V0X3NpemUoc2VjdG9ycywgY2RiLCBjbWQpOworCQkJCXNpemUgPSB0cmFuc3BvcnRfZ2V0X3NpemUoMSwgY2RiLCBjbWQpOwogCQkJZWxzZSB7CiAJCQkJcHJfZXJyKCJXU05aPTEsIFdSSVRFX1NBTUUgdy9zZWN0b3JzPTAgbm90IgogCQkJCSAgICAgICAiIHN1cHBvcnRlZFxuIik7CkBAIC0zMDQ4LDI3ICszMTEyLDkgQEAKIAkJCWNtZC0+dF90YXNrX2xiYSA9IGdldF91bmFsaWduZWRfYmU2NCgmY2RiWzEyXSk7CiAJCQljbWQtPnNlX2NtZF9mbGFncyB8PSBTQ0ZfU0NTSV9DT05UUk9MX1NHX0lPX0NEQjsKIAotCQkJLyoKLQkJCSAqIFNraXAgdGhlIHJlbWFpbmluZyBhc3NpZ25tZW50cyBmb3IgVENNL1BTQ1NJIHBhc3N0aHJvdWdoCi0JCQkgKi8KLQkJCWlmIChwYXNzdGhyb3VnaCkKLQkJCQlicmVhazsKKwkJCWlmICh0YXJnZXRfY2hlY2tfd3JpdGVfc2FtZV9kaXNjYXJkKCZjZGJbMTBdLCBkZXYpIDwgMCkKKwkJCQlnb3RvIG91dF9pbnZhbGlkX2NkYl9maWVsZDsKIAotCQkJaWYgKChjZGJbMTBdICYgMHgwNCkgfHwgKGNkYlsxMF0gJiAweDAyKSkgewotCQkJCXByX2VycigiV1JJVEVfU0FNRSBQQkRBVEEgYW5kIExCREFUQSIKLQkJCQkJIiBiaXRzIG5vdCBzdXBwb3J0ZWQgZm9yIEJsb2NrIERpc2NhcmQiCi0JCQkJCSIgRW11bGF0aW9uXG4iKTsKLQkJCQlnb3RvIG91dF9pbnZhbGlkX2NkYl9maWVsZDsKLQkJCX0KLQkJCS8qCi0JCQkgKiBDdXJyZW50bHkgZm9yIHRoZSBlbXVsYXRlZCBjYXNlIHdlIG9ubHkgYWNjZXB0Ci0JCQkgKiB0cHdzIHdpdGggdGhlIFVOTUFQPTEgYml0IHNldC4KLQkJCSAqLwotCQkJaWYgKCEoY2RiWzEwXSAmIDB4MDgpKSB7Ci0JCQkJcHJfZXJyKCJXUklURV9TQU1FIHcvbyBVTk1BUCBiaXQgbm90IgotCQkJCQkiIHN1cHBvcnRlZCBmb3IgQmxvY2sgRGlzY2FyZCBFbXVsYXRpb25cbiIpOwotCQkJCWdvdG8gb3V0X2ludmFsaWRfY2RiX2ZpZWxkOwotCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcl9lcnIoIlZBUklBQkxFX0xFTkdUSF9DTUQgc2VydmljZSBhY3Rpb24iCkBAIC0zMzAzLDEwICszMzQ5LDEyIEBACiAJCWNtZC0+c2VfY21kX2ZsYWdzIHw9IFNDRl9FTVVMQVRFX0NEQl9BU1lOQzsKIAkJLyoKIAkJICogQ2hlY2sgdG8gZW5zdXJlIHRoYXQgTEJBICsgUmFuZ2UgZG9lcyBub3QgZXhjZWVkIHBhc3QgZW5kIG9mCi0JCSAqIGRldmljZS4KKwkJICogZGV2aWNlIGZvciBJQkxPQ0sgYW5kIEZJTEVJTyAtPmRvX3N5bmNfY2FjaGUoKSBiYWNrZW5kIGNhbGxzCiAJCSAqLwotCQlpZiAoIXRyYW5zcG9ydF9jbWRfZ2V0X3ZhbGlkX3NlY3RvcnMoY21kKSkKLQkJCWdvdG8gb3V0X2ludmFsaWRfY2RiX2ZpZWxkOworCQlpZiAoKGNtZC0+dF90YXNrX2xiYSAhPSAwKSB8fCAoc2VjdG9ycyAhPSAwKSkgeworCQkJaWYgKHRyYW5zcG9ydF9jbWRfZ2V0X3ZhbGlkX3NlY3RvcnMoY21kKSA8IDApCisJCQkJZ290byBvdXRfaW52YWxpZF9jZGJfZmllbGQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBVTk1BUDoKIAkJc2l6ZSA9IGdldF91bmFsaWduZWRfYmUxNigmY2RiWzddKTsKQEAgLTMzMTgsNDAgKzMzNjYsMzggQEAKIAkJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkX2NkYjsKIAogCQlpZiAoc2VjdG9ycykKLQkJCXNpemUgPSB0cmFuc3BvcnRfZ2V0X3NpemUoc2VjdG9ycywgY2RiLCBjbWQpOworCQkJc2l6ZSA9IHRyYW5zcG9ydF9nZXRfc2l6ZSgxLCBjZGIsIGNtZCk7CiAJCWVsc2UgewogCQkJcHJfZXJyKCJXU05aPTEsIFdSSVRFX1NBTUUgdy9zZWN0b3JzPTAgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlnb3RvIG91dF9pbnZhbGlkX2NkYl9maWVsZDsKIAkJfQogCi0JCWNtZC0+dF90YXNrX2xiYSA9IGdldF91bmFsaWduZWRfYmUxNigmY2RiWzJdKTsKLQkJcGFzc3Rocm91Z2ggPSAoZGV2LT50cmFuc3BvcnQtPnRyYW5zcG9ydF90eXBlID09Ci0JCQkJVFJBTlNQT1JUX1BMVUdJTl9QSEJBX1BERVYpOwotCQkvKgotCQkgKiBEZXRlcm1pbmUgaWYgdGhlIHJlY2VpdmVkIFdSSVRFX1NBTUVfMTYgaXMgdXNlZCB0byBmb3IgZGlyZWN0Ci0JCSAqIHBhc3N0aHJvdWdoIGludG8gTGludXgvU0NTSSB3aXRoIHN0cnVjdCByZXF1ZXN0IHZpYSBUQ00vcFNDU0kKLQkJICogb3Igd2UgYXJlIHNpZ25hbGluZyB0aGUgdXNlIG9mIGludGVybmFsIFdSSVRFX1NBTUUgKyBVTk1BUD0xCi0JCSAqIGVtdWxhdGlvbiBmb3IgLT4gTGludXgvQkxPQ0sgZGlzYmFyZCB3aXRoIFRDTS9JQkxPQ0sgYW5kCi0JCSAqIFRDTS9GSUxFSU8gc3Vic3lzdGVtIHBsdWdpbiBiYWNrc3RvcmVzLgotCQkgKi8KLQkJaWYgKCFwYXNzdGhyb3VnaCkgewotCQkJaWYgKChjZGJbMV0gJiAweDA0KSB8fCAoY2RiWzFdICYgMHgwMikpIHsKLQkJCQlwcl9lcnIoIldSSVRFX1NBTUUgUEJEQVRBIGFuZCBMQkRBVEEiCi0JCQkJCSIgYml0cyBub3Qgc3VwcG9ydGVkIGZvciBCbG9jayBEaXNjYXJkIgotCQkJCQkiIEVtdWxhdGlvblxuIik7Ci0JCQkJZ290byBvdXRfaW52YWxpZF9jZGJfZmllbGQ7Ci0JCQl9Ci0JCQkvKgotCQkJICogQ3VycmVudGx5IGZvciB0aGUgZW11bGF0ZWQgY2FzZSB3ZSBvbmx5IGFjY2VwdAotCQkJICogdHB3cyB3aXRoIHRoZSBVTk1BUD0xIGJpdCBzZXQuCi0JCQkgKi8KLQkJCWlmICghKGNkYlsxXSAmIDB4MDgpKSB7Ci0JCQkJcHJfZXJyKCJXUklURV9TQU1FIHcvbyBVTk1BUCBiaXQgbm90ICIKLQkJCQkJIiBzdXBwb3J0ZWQgZm9yIEJsb2NrIERpc2NhcmQgRW11bGF0aW9uXG4iKTsKLQkJCQlnb3RvIG91dF9pbnZhbGlkX2NkYl9maWVsZDsKLQkJCX0KLQkJfQorCQljbWQtPnRfdGFza19sYmEgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmNkYlsyXSk7CiAJCWNtZC0+c2VfY21kX2ZsYWdzIHw9IFNDRl9TQ1NJX0NPTlRST0xfU0dfSU9fQ0RCOworCisJCWlmICh0YXJnZXRfY2hlY2tfd3JpdGVfc2FtZV9kaXNjYXJkKCZjZGJbMV0sIGRldikgPCAwKQorCQkJZ290byBvdXRfaW52YWxpZF9jZGJfZmllbGQ7CisJCWJyZWFrOworCWNhc2UgV1JJVEVfU0FNRToKKwkJc2VjdG9ycyA9IHRyYW5zcG9ydF9nZXRfc2VjdG9yc18xMChjZGIsIGNtZCwgJnNlY3Rvcl9yZXQpOworCQlpZiAoc2VjdG9yX3JldCkKKwkJCWdvdG8gb3V0X3Vuc3VwcG9ydGVkX2NkYjsKKworCQlpZiAoc2VjdG9ycykKKwkJCXNpemUgPSB0cmFuc3BvcnRfZ2V0X3NpemUoMSwgY2RiLCBjbWQpOworCQllbHNlIHsKKwkJCXByX2VycigiV1NOWj0xLCBXUklURV9TQU1FIHcvc2VjdG9ycz0wIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJZ290byBvdXRfaW52YWxpZF9jZGJfZmllbGQ7CisJCX0KKworCQljbWQtPnRfdGFza19sYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmNkYlsyXSk7CisJCWNtZC0+c2VfY21kX2ZsYWdzIHw9IFNDRl9TQ1NJX0NPTlRST0xfU0dfSU9fQ0RCOworCQkvKgorCQkgKiBGb2xsb3cgc2JjcjI2IHdpdGggV1JJVEVfU0FNRSAoMTApIGFuZCBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZQorCQkgKiBvZiBieXRlIDEgYml0IDMgVU5NQVAgaW5zdGVhZCBvZiBvcmlnaW5hbCByZXNlcnZlZCBmaWVsZAorCQkgKi8KKwkJaWYgKHRhcmdldF9jaGVja193cml0ZV9zYW1lX2Rpc2NhcmQoJmNkYlsxXSwgZGV2KSA8IDApCisJCQlnb3RvIG91dF9pbnZhbGlkX2NkYl9maWVsZDsKIAkJYnJlYWs7CiAJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKIAljYXNlIEdQQ01EX0NMT1NFX1RSQUNLOgpAQCAtMzg0Niw5ICszODkyLDcgQEAKIHN0YXRpYyBpbnQgdHJhbnNwb3J0X25ld19jbWRfb2JqKHN0cnVjdCBzZV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBjbWQtPnNlX2RldjsKLQl1MzIgdGFza19jZGJzOwotCXUzMiByYzsKLQlpbnQgc2V0X2NvdW50cyA9IDE7CisJaW50IHNldF9jb3VudHMgPSAxLCByYywgdGFza19jZGJzOwogCiAJLyoKIAkgKiBTZXR1cCBhbnkgQklESSBSRUFEIHRhc2tzIGFuZCBtZW1vcnkgZnJvbQpAQCAtMzg2Niw3ICszOTEwLDcgQEAKIAkJCWNtZC0+c2VfY21kX2ZsYWdzIHw9IFNDRl9TQ1NJX0NEQl9FWENFUFRJT047CiAJCQljbWQtPnNjc2lfc2Vuc2VfcmVhc29uID0KIAkJCQlUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRTsKLQkJCXJldHVybiBQWVhfVFJBTlNQT1JUX0xVX0NPTU1fRkFJTFVSRTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWF0b21pY19pbmMoJmNtZC0+dF9mZV9jb3VudCk7CiAJCWF0b21pY19pbmMoJmNtZC0+dF9zZV9jb3VudCk7CkBAIC0zODg1LDcgKzM5MjksNyBAQAogCQljbWQtPnNlX2NtZF9mbGFncyB8PSBTQ0ZfU0NTSV9DREJfRVhDRVBUSU9OOwogCQljbWQtPnNjc2lfc2Vuc2VfcmVhc29uID0KIAkJCVRDTV9MT0dJQ0FMX1VOSVRfQ09NTVVOSUNBVElPTl9GQUlMVVJFOwotCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9MVV9DT01NX0ZBSUxVUkU7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChzZXRfY291bnRzKSB7CkBAIC00MDAxLDggKzQwNDUsNiBAQAogCQlpZiAoIXRhc2stPnRhc2tfc2cpCiAJCQljb250aW51ZTsKIAotCQlCVUdfT04oIXRhc2stPnRhc2tfcGFkZGVkX3NnKTsKLQogCQlpZiAoIXNnX2ZpcnN0KSB7CiAJCQlzZ19maXJzdCA9IHRhc2stPnRhc2tfc2c7CiAJCQljaGFpbmVkX25lbnRzID0gdGFzay0+dGFza19zZ19uZW50czsKQEAgLTQwMTAsOSArNDA1MiwxOSBAQAogCQkJc2dfY2hhaW4oc2dfcHJldiwgc2dfcHJldl9uZW50cywgdGFzay0+dGFza19zZyk7CiAJCQljaGFpbmVkX25lbnRzICs9IHRhc2stPnRhc2tfc2dfbmVudHM7CiAJCX0KKwkJLyoKKwkJICogRm9yIHRoZSBwYWRkZWQgdGFza3MsIHVzZSB0aGUgZXh0cmEgU0dMIHZlY3RvciBhbGxvY2F0ZWQKKwkJICogaW4gdHJhbnNwb3J0X2FsbG9jYXRlX2RhdGFfdGFza3MoKSBmb3IgdGhlIHNnX3ByZXZfbmVudHMKKwkJICogb2Zmc2V0IGludG8gc2dfY2hhaW4oKSBhYm92ZS4uICBUaGUgbGFzdCB0YXNrIG9mIGEKKwkJICogbXVsdGktdGFzayBsaXN0LCBvciBhIHNpbmdsZSB0YXNrIHdpbGwgbm90IGhhdmUKKwkJICogdGFzay0+dGFza19zZ19wYWRkZWQgc2V0Li4KKwkJICovCisJCWlmICh0YXNrLT50YXNrX3BhZGRlZF9zZykKKwkJCXNnX3ByZXZfbmVudHMgPSAodGFzay0+dGFza19zZ19uZW50cyArIDEpOworCQllbHNlCisJCQlzZ19wcmV2X25lbnRzID0gdGFzay0+dGFza19zZ19uZW50czsKIAogCQlzZ19wcmV2ID0gdGFzay0+dGFza19zZzsKLQkJc2dfcHJldl9uZW50cyA9IHRhc2stPnRhc2tfc2dfbmVudHM7CiAJfQogCS8qCiAJICogU2V0dXAgdGhlIHN0YXJ0aW5nIHBvaW50ZXIgYW5kIHRvdGFsIHRfdGFza3Nfc2dfbGlua2VkX25vIGluY2x1ZGluZwpAQCAtNDA2NCw3ICs0MTE2LDcgQEAKIAkKIAljbWRfc2cgPSBzZ2w7CiAJZm9yIChpID0gMDsgaSA8IHRhc2tfY291bnQ7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgdGFza19zaXplOworCQl1bnNpZ25lZCBpbnQgdGFza19zaXplLCB0YXNrX3NnX25lbnRzX3BhZGRlZDsKIAkJaW50IGNvdW50OwogCiAJCXRhc2sgPSB0cmFuc3BvcnRfZ2VuZXJpY19nZXRfdGFzayhjbWQsIGRhdGFfZGlyZWN0aW9uKTsKQEAgLTQwODMsMzAgKzQxMzUsMzMgQEAKIAogCQkvKiBVcGRhdGUgbmV3IGNkYiB3aXRoIHVwZGF0ZWQgbGJhL3NlY3RvcnMgKi8KIAkJY21kLT50cmFuc3BvcnRfc3BsaXRfY2RiKHRhc2stPnRhc2tfbGJhLCB0YXNrLT50YXNrX3NlY3RvcnMsIGNkYik7Ci0KKwkJLyoKKwkJICogVGhpcyBub3cgYXNzdW1lcyB0aGF0IHBhc3NlZCBzZ19lbnRzIGFyZSBpbiBQQUdFX1NJWkUgY2h1bmtzCisJCSAqIGluIG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIHBlciB0YXNrIFNHTCBlbnRyaWVzCisJCSAqLworCQl0YXNrLT50YXNrX3NnX25lbnRzID0gRElWX1JPVU5EX1VQKHRhc2stPnRhc2tfc2l6ZSwgUEFHRV9TSVpFKTsKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIGZhYnJpYyBtb2R1bGUgZHJpdmVyIGlzIHJlcXVlc3RpbmcgdGhhdCBhbGwKIAkJICogc3RydWN0IHNlX3Rhc2stPnRhc2tfc2dbXSBiZSBjaGFpbmVkIHRvZ2V0aGVyLi4gIElmIHNvLAogCQkgKiB0aGVuIGFsbG9jYXRlIGFuIGV4dHJhIHBhZGRpbmcgU0cgZW50cnkgZm9yIGxpbmtpbmcgYW5kCi0JCSAqIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgY2hhaW5lZCBTR0wuCi0JCSAqIFBvc3NpYmx5IG92ZXItYWxsb2NhdGUgdGFzayBzZ2wgc2l6ZSBieSB1c2luZyBjbWQgc2dsIHNpemUuCi0JCSAqIEl0J3Mgc28gbXVjaCBlYXNpZXIgYW5kIG9ubHkgYSB3YXN0ZSB3aGVuIHRhc2tfY291bnQgPiAxLgotCQkgKiBUaGF0IGlzIGV4dHJlbWVseSByYXJlLgorCQkgKiBtYXJraW5nIHRoZSBlbmQgb2YgdGhlIGNoYWluZWQgU0dMIGZvciBldmVyeSB0YXNrIGV4Y2VwdAorCQkgKiB0aGUgbGFzdCBvbmUgZm9yICh0YXNrX2NvdW50ID4gMSkgb3BlcmF0aW9uLCBvciBza2lwcGluZworCQkgKiB0aGUgZXh0cmEgcGFkZGluZyBmb3IgdGhlICh0YXNrX2NvdW50ID09IDEpIGNhc2UuCiAJCSAqLwotCQl0YXNrLT50YXNrX3NnX25lbnRzID0gc2dsX25lbnRzOwotCQlpZiAoY21kLT5zZV90Zm8tPnRhc2tfc2dfY2hhaW5pbmcpIHsKLQkJCXRhc2stPnRhc2tfc2dfbmVudHMrKzsKKwkJaWYgKGNtZC0+c2VfdGZvLT50YXNrX3NnX2NoYWluaW5nICYmIChpIDwgKHRhc2tfY291bnQgLSAxKSkpIHsKKwkJCXRhc2tfc2dfbmVudHNfcGFkZGVkID0gKHRhc2stPnRhc2tfc2dfbmVudHMgKyAxKTsKIAkJCXRhc2stPnRhc2tfcGFkZGVkX3NnID0gMTsKLQkJfQorCQl9IGVsc2UKKwkJCXRhc2tfc2dfbmVudHNfcGFkZGVkID0gdGFzay0+dGFza19zZ19uZW50czsKIAogCQl0YXNrLT50YXNrX3NnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAqCi0JCQkJCXRhc2stPnRhc2tfc2dfbmVudHMsIEdGUF9LRVJORUwpOworCQkJCQl0YXNrX3NnX25lbnRzX3BhZGRlZCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGFzay0+dGFza19zZykgewogCQkJY21kLT5zZV9kZXYtPnRyYW5zcG9ydC0+ZnJlZV90YXNrKHRhc2spOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQlzZ19pbml0X3RhYmxlKHRhc2stPnRhc2tfc2csIHRhc2stPnRhc2tfc2dfbmVudHMpOworCQlzZ19pbml0X3RhYmxlKHRhc2stPnRhc2tfc2csIHRhc2tfc2dfbmVudHNfcGFkZGVkKTsKIAogCQl0YXNrX3NpemUgPSB0YXNrLT50YXNrX3NpemU7CiAKQEAgLTQyMDMsMTAgKzQyNTgsMTMgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKIAl1bnNpZ25lZCBpbnQgc2dsX25lbnRzKQogewotCWlmIChjbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9TQ1NJX0RBVEFfU0dfSU9fQ0RCKQorCWlmIChjbWQtPnNlX2NtZF9mbGFncyAmIFNDRl9TQ1NJX0RBVEFfU0dfSU9fQ0RCKSB7CisJCWlmICh0cmFuc3BvcnRfY21kX2dldF92YWxpZF9zZWN0b3JzKGNtZCkgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcmV0dXJuIHRyYW5zcG9ydF9hbGxvY2F0ZV9kYXRhX3Rhc2tzKGNtZCwgbGJhLCBkYXRhX2RpcmVjdGlvbiwKIAkJCQkJCSAgICAgc2dsLCBzZ2xfbmVudHMpOwotCWVsc2UKKwl9IGVsc2UKIAkJcmV0dXJuIHRyYW5zcG9ydF9hbGxvY2F0ZV9jb250cm9sX3Rhc2soY21kKTsKIAogfQpAQCAtNDY5OSw2ICs0NzU3LDEzIEBACiAJICovCiAJc3dpdGNoIChyZWFzb24pIHsKIAljYXNlIFRDTV9OT05fRVhJU1RFTlRfTFVOOgorCQkvKiBDVVJSRU5UIEVSUk9SICovCisJCWJ1ZmZlcltvZmZzZXRdID0gMHg3MDsKKwkJLyogSUxMRUdBTCBSRVFVRVNUICovCisJCWJ1ZmZlcltvZmZzZXQrU1BDX1NFTlNFX0tFWV9PRkZTRVRdID0gSUxMRUdBTF9SRVFVRVNUOworCQkvKiBMT0dJQ0FMIFVOSVQgTk9UIFNVUFBPUlRFRCAqLworCQlidWZmZXJbb2Zmc2V0K1NQQ19BU0NfS0VZX09GRlNFVF0gPSAweDI1OworCQlicmVhazsKIAljYXNlIFRDTV9VTlNVUFBPUlRFRF9TQ1NJX09QQ09ERToKIAljYXNlIFRDTV9TRUNUT1JfQ09VTlRfVE9PX01BTlk6CiAJCS8qIENVUlJFTlQgRVJST1IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90Y21fZmMuaCBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90Y21fZmMuaAppbmRleCBmN2ZmZjdlLi5iZDRmZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGNtX2ZjLmgKKysrIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RjbV9mYy5oCkBAIC0xODcsNCArMTg3LDkgQEAKIAogc3NpemVfdCBmdF9mb3JtYXRfd3duKGNoYXIgKiwgc2l6ZV90LCB1NjQpOwogCisvKgorICogVW5kZXJseWluZyBIVyBzcGVjaWZpYyBoZWxwZXIgZnVuY3Rpb24KKyAqLwordm9pZCBmdF9pbnZsX2h3X2NvbnRleHQoc3RydWN0IGZ0X2NtZCAqKTsKKwogI2VuZGlmIC8qIF9fVENNX0ZDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jbWQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY21kLmMKaW5kZXggMDlkZjM4Yi4uNTY1NGRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jbWQuYworKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NtZC5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIAlkZWZhdWx0OgogCQlwcl9kZWJ1ZygiJXM6IHVuaGFuZGxlZCBmcmFtZSByX2N0bCAleFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBmaC0+Zmhfcl9jdGwpOworCQlmdF9pbnZsX2h3X2NvbnRleHQoY21kKTsKIAkJZmNfZnJhbWVfZnJlZShmcCk7CiAJCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKCZjbWQtPnNlX2NtZCwgMCwgMCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jb25mLmMgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NvbmYuYwppbmRleCA4NzgxZDFlLi5iMTU4NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NvbmYuYworKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NvbmYuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gJnRwZy0+c2VfdHBnOwogCXN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfYWNsOwogCi0Jc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCXNwaW5fbG9ja19pcnEoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZV9hY2wsICZzZV90cGctPmFjbF9ub2RlX2xpc3QsIGFjbF9saXN0KSB7CiAJCWFjbCA9IGNvbnRhaW5lcl9vZihzZV9hY2wsIHN0cnVjdCBmdF9ub2RlX2FjbCwgc2Vfbm9kZV9hY2wpOwogCQlwcl9kZWJ1ZygiYWNsICVwIHBvcnRfbmFtZSAlbGx4XG4iLApAQCAtMjcwLDcgKzI3MCw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC02NTUsOSArNjU1LDcgQEAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotI2lmZGVmIE1PRFVMRQogTU9EVUxFX0RFU0NSSVBUSU9OKCJGQyBUQ00gZmFicmljIGRyaXZlciAiIEZUX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX2luaXQoZnRfaW5pdCk7CiBtb2R1bGVfZXhpdChmdF9leGl0KTsKLSNlbmRpZiAvKiBNT0RVTEUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfaW8uYyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfaW8uYwppbmRleCA4ZTJhNDZkLi5jMzdmNGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2lvLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19pby5jCkBAIC0yMTMsNjIgKzIxMyw0OSBAQAogCWlmICghKG50b2gyNChmaC0+ZmhfZl9jdGwpICYgRkNfRkNfUkVMX09GRikpCiAJCWdvdG8gZHJvcDsKIAotCS8qCi0JICogRG9lc24ndCBleHBlY3QgZXZlbiBzaW5nbGUgYnl0ZSBvZiBwYXlsb2FkLiBQYXlsb2FkCi0JICogaXMgZXhwZWN0ZWQgdG8gYmUgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgYnVmZmVycwotCSAqIGR1ZSB0byBERFAgKExhcmdlIFJ4IG9mZmxvYWQpIGZlYXR1cmUsIGhlbmNlCi0JICogQlVHX09OIGlmIEJVRiBpcyBub24tTlVMTAotCSAqLwotCWJ1ZiA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCAxKTsKLQlpZiAoY21kLT53YXNfZGRwX3NldHVwICYmIGJ1ZikgewotCQlwcl9kZWJ1ZygiJXM6IFdoZW4gRERQIHdhcyBzZXR1cCwgbm90IGV4cGVjdGVkIHRvIgotCQkJCSAicmVjZWl2ZSBmcmFtZSB3aXRoIHBheWxvYWQsIFBheWxvYWQgc2hhbGwgYmUiCi0JCQkJICJjb3BpZWQgZGlyZWN0bHkgdG8gYnVmZmVyIGluc3RlYWQgb2YgY29taW5nICIKLQkJCQkgInZpYS4gbGVnYWN5IHJlY2VpdmUgcXVldWVzXG4iLCBfX2Z1bmNfXyk7Ci0JCUJVR19PTihidWYpOworCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CisJZXAgPSBmY19zZXFfZXhjaChzZXEpOworCWxwb3J0ID0gZXAtPmxwOworCWlmIChjbWQtPndhc19kZHBfc2V0dXApIHsKKwkJQlVHX09OKCFlcCk7CisJCUJVR19PTighbHBvcnQpOwogCX0KIAogCS8qCi0JICogSWYgZnRfY21kIGluZGljYXRlZCAnZGRwX3NldHVwJywgaW4gdGhhdCBjYXNlIG9ubHkgdGhlIGxhc3QgZnJhbWUKLQkgKiBzaG91bGQgY29tZSB3aXRoICdUU0kgYml0IGJlaW5nIHNldCcuIElmICdUU0kgYml0IGlzIG5vdCBzZXQgYW5kIGlmCi0JICogZGF0YSBmcmFtZSBhcHBlYXJzIGhlcmUsIG1lYW5zIGVycm9yIGNvbmRpdGlvbi4gSW4gYm90aCB0aGUgY2FzZXMKLQkgKiByZWxlYXNlIHRoZSBERFAgY29udGV4dCAoZGRwX3B1dCkgYW5kIGluIGVycm9yIGNhc2UsIGFzIHdlbGwKLQkgKiBpbml0aWF0ZSBlcnJvciByZWNvdmVyeSBtZWNoYW5pc20uCisJICogRG9lc24ndCBleHBlY3QgcGF5bG9hZCBpZiBERFAgaXMgc2V0dXAuIFBheWxvYWQKKwkgKiBpcyBleHBlY3RlZCB0byBiZSBjb3BpZWQgZGlyZWN0bHkgdG8gdXNlciBidWZmZXJzCisJICogZHVlIHRvIEREUCAoTGFyZ2UgUnggb2ZmbG9hZCksCiAJICovCi0JZXAgPSBmY19zZXFfZXhjaChzZXEpOwotCWlmIChjbWQtPndhc19kZHBfc2V0dXApIHsKLQkJQlVHX09OKCFlcCk7Ci0JCWxwb3J0ID0gZXAtPmxwOwotCQlCVUdfT04oIWxwb3J0KTsKLQl9Ci0JaWYgKGNtZC0+d2FzX2RkcF9zZXR1cCAmJiBlcC0+eGlkICE9IEZDX1hJRF9VTktOT1dOKSB7Ci0JCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7Ci0JCS8qCi0JCSAqIElmIFRTSSBiaXQgc2V0IGluIGZfY3RsLCBtZWFucyBsYXN0IHdyaXRlIGRhdGEgZnJhbWUgaXMKLQkJICogcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5IHdoZXJlIHBheWxvYWQgaXMgcG9zdGVkIGRpcmVjdGx5Ci0JCSAqIHRvIHVzZXIgYnVmZmVyIGFuZCBvbmx5IHRoZSBsYXN0IGZyYW1lJ3MgaGVhZGVyIGlzIHBvc3RlZAotCQkgKiBpbiBsZWdhY3kgcmVjZWl2ZSBxdWV1ZQotCQkgKi8KLQkJaWYgKGZfY3RsICYgRkNfRkNfU0VRX0lOSVQpIHsgLyogVFNJIGJpdCBzZXQgaW4gRkMgZnJhbWUgKi8KLQkJCWNtZC0+d3JpdGVfZGF0YV9sZW4gPSBscG9ydC0+dHQuZGRwX2RvbmUobHBvcnQsCi0JCQkJCQkJCWVwLT54aWQpOwotCQkJZ290byBsYXN0X2ZyYW1lOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFVwZGF0aW5nIHRoZSB3cml0ZV9kYXRhX2xlbiBtYXkgYmUgbWVhbmluZ2xlc3MgYXQKLQkJCSAqIHRoaXMgcG9pbnQsIGJ1dCBqdXN0IGluIGNhc2UgaWYgcmVxdWlyZWQgaW4gZnV0dXJlCi0JCQkgKiBmb3IgZGVidWdnaW5nIG9yIGFueSBvdGhlciBwdXJwb3NlCi0JCQkgKi8KLQkJCXByX2VycigiJXM6IFJlY2VpdmVkIGZyYW1lIHdpdGggVFNJIGJpdCBub3QiCi0JCQkJCSIgYmVpbmcgU0VULCBkcm9wcGluZyB0aGUgZnJhbWUsICIKLQkJCQkJImNtZC0+c2cgPCVwPiwgY21kLT5zZ19jbnQgPDB4JXg+XG4iLAotCQkJCQlfX2Z1bmNfXywgY21kLT5zZywgY21kLT5zZ19jbnQpOwotCQkJY21kLT53cml0ZV9kYXRhX2xlbiA9IGxwb3J0LT50dC5kZHBfZG9uZShscG9ydCwKLQkJCQkJCQkgICAgICBlcC0+eGlkKTsKLQkJCWxwb3J0LT50dC5zZXFfZXhjaF9hYm9ydChjbWQtPnNlcSwgMCk7Ci0JCQlnb3RvIGRyb3A7Ci0JCX0KLQl9CisJYnVmID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDEpOworCWlmIChidWYpCisJCXByX2VycigiJXM6IHhpZCAweCV4LCBmX2N0bCAweCV4LCBjbWQtPnNnICVwLCAiCisJCQkJImNtZC0+c2dfY250IDB4JXguIEREUCB3YXMgc2V0dXAiCisJCQkJIiBoZW5jZSBub3QgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBmcmFtZSB3aXRoICIKKwkJCQkicGF5bG9hZCwgRnJhbWUgd2lsbCBiZSBkcm9wcGVkIGlmICIKKwkJCQkiJ1NlcXVlbmNlIEluaXRpYXRpdmUnIGJpdCBpbiBmX2N0bCBpcyAiCisJCQkJIm5vdCBzZXRcbiIsIF9fZnVuY19fLCBlcC0+eGlkLCBmX2N0bCwKKwkJCQljbWQtPnNnLCBjbWQtPnNnX2NudCk7CisJLyoKKyAJICogSW52YWxpZGF0ZSBIVyBERFAgY29udGV4dCBpZiBpdCB3YXMgc2V0dXAgZm9yIHJlc3BlY3RpdmUKKyAJICogY29tbWFuZC4gSW52YWxpZGF0aW9uIG9mIEhXIEREUCBjb250ZXh0IGlzIHJlcXVpdGVkIGluIGJvdGgKKyAJICogc2l0dWF0aW9uIChzdWNjZXNzIGFuZCBlcnJvcikuIAorIAkgKi8KKwlmdF9pbnZsX2h3X2NvbnRleHQoY21kKTsKKworCS8qCisJICogSWYgIlNlcXVlbmNlIEluaXRpYXRpdmUgKFRTSSkiIGJpdCBzZXQgaW4gZl9jdGwsIG1lYW5zIGxhc3QKKwkgKiB3cml0ZSBkYXRhIGZyYW1lIGlzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSB3aGVyZSBwYXlsb2FkIGlzCisJICogcG9zdGVkIGRpcmVjdGx5IHRvIHVzZXIgYnVmZmVyIGFuZCBvbmx5IHRoZSBsYXN0IGZyYW1lJ3MKKwkgKiBoZWFkZXIgaXMgcG9zdGVkIGluIHJlY2VpdmUgcXVldWUuCisJICoKKwkgKiBJZiAiU2VxdWVuY2UgSW5pdGlhdGl2ZSAoVFNJKSIgYml0IGlzIG5vdCBzZXQsIG1lYW5zIGVycm9yCisJICogY29uZGl0aW9uIHcuci50LiBERFAsIGhlbmNlIGRyb3AgdGhlIHBhY2tldCBhbmQgbGV0IGV4cGxpY3QKKwkgKiBBQk9SVFMgZnJvbSBvdGhlciBlbmQgb2YgZXhjaGFuZ2UgdGltZXIgdHJpZ2dlciB0aGUgcmVjb3ZlcnkuCisJICovCisJaWYgKGZfY3RsICYgRkNfRkNfU0VRX0lOSVQpCisJCWdvdG8gbGFzdF9mcmFtZTsKKwllbHNlCisJCWdvdG8gZHJvcDsKIAogCXJlbF9vZmYgPSBudG9obChmaC0+ZmhfcGFybV9vZmZzZXQpOwogCWZyYW1lX2xlbiA9IGZyX2xlbihmcCk7CkBAIC0zMzEsMyArMzE4LDM5IEBACiBkcm9wOgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQorCisvKgorICogSGFuZGxlIGFuZCBjbGVhbnVwIGFueSBIVyBzcGVjaWZpYyByZXNvdXJjZXMgaWYKKyAqIHJlY2VpdmVkIEFCT1JUUywgZXJyb3JzLCB0aW1lb3V0cy4KKyAqLwordm9pZCBmdF9pbnZsX2h3X2NvbnRleHQoc3RydWN0IGZ0X2NtZCAqY21kKQoreworCXN0cnVjdCBmY19zZXEgKnNlcSA9IGNtZC0+c2VxOworCXN0cnVjdCBmY19leGNoICplcCA9IE5VTEw7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IE5VTEw7CisKKwlCVUdfT04oIWNtZCk7CisKKwkvKiBDbGVhbnVwIHRoZSBERFAgY29udGV4dCBpbiBIVyBpZiBERFAgd2FzIHNldHVwICovCisJaWYgKGNtZC0+d2FzX2RkcF9zZXR1cCAmJiBzZXEpIHsKKwkJZXAgPSBmY19zZXFfZXhjaChzZXEpOworCQlpZiAoZXApIHsKKwkJCWxwb3J0ID0gZXAtPmxwOworCQkJaWYgKGxwb3J0ICYmIChlcC0+eGlkIDw9IGxwb3J0LT5scm9feGlkKSkKKwkJCQkvKgorCQkJCSAqICJkZHBfZG9uZSIgdHJpZ2dlciBpbnZhbGlkYXRpb24gb2YgSFcKKwkJCQkgKiBzcGVjaWZpYyBERFAgY29udGV4dAorCQkJCSAqLworCQkJCWNtZC0+d3JpdGVfZGF0YV9sZW4gPSBscG9ydC0+dHQuZGRwX2RvbmUobHBvcnQsCisJCQkJCQkJCSAgICAgIGVwLT54aWQpOworCisJCQkJLyoKKwkJCQkgKiBSZXNldHRpbmcgc2FtZSB2YXJpYWJsZSB0byBpbmRpY2F0ZSBIVydzCisJCQkJICogRERQIGNvbnRleHQgaGFzIGJlZW4gaW52YWxpZGF0ZWQgdG8gYXZvaWQKKwkJCQkgKiByZV9pbnZhbGlkYXRpb24gb2Ygc2FtZSBjb250ZXh0IChjb250ZXh0IGlzCisJCQkJICogaWRlbnRpZmllZCB1c2luZyBlcC0+eGlkKQorCQkJCSAqLworCQkJCWNtZC0+d2FzX2RkcF9zZXR1cCA9IDA7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCmluZGV4IGJmN2M2ODcuLmY3ZjcxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCkBAIC0xNCwxMSArMTQsNyBAQAogCSAgSWYgeW91IHdhbnQgdGhpcyBzdXBwb3J0LCB5b3Ugc2hvdWxkIHNheSBZIG9yIE0gaGVyZS4KIAogY29uZmlnIFRIRVJNQUxfSFdNT04KLQlib29sICJIYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQiCisJYm9vbAogCWRlcGVuZHMgb24gVEhFUk1BTAogCWRlcGVuZHMgb24gSFdNT049eSB8fCBIV01PTj1USEVSTUFMCi0JaGVscAotCSAgVGhlIGdlbmVyaWMgdGhlcm1hbCBzeXNmcyBkcml2ZXIncyBoYXJkd2FyZSBtb25pdG9yaW5nIHN1cHBvcnQKLQkgIHJlcXVpcmVzIGEgMi4xMC43LzMuMC4yIG9yIGxhdGVyIGxtLXNlbnNvcnMgdXNlcnNwYWNlLgotCi0JICBTYXkgWSBpZiB5b3VyIHVzZXItc3BhY2UgaXMgbmV3IGVub3VnaC4KKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKaW5kZXggMGIxYzgyYS4uNzA4ZjhlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTQyMCw2ICs0MjAsMjkgQEAKIAogLyogaHdtb24gc3lzIEkvRiAqLwogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisKKy8qIHRoZXJtYWwgem9uZSBkZXZpY2VzIHdpdGggdGhlIHNhbWUgdHlwZSBzaGFyZSBvbmUgaHdtb24gZGV2aWNlICovCitzdHJ1Y3QgdGhlcm1hbF9od21vbl9kZXZpY2UgeworCWNoYXIgdHlwZVtUSEVSTUFMX05BTUVfTEVOR1RIXTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJaW50IGNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgdHpfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitzdHJ1Y3QgdGhlcm1hbF9od21vbl9hdHRyIHsKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOworCWNoYXIgbmFtZVsxNl07Cit9OworCisvKiBvbmUgdGVtcGVyYXR1cmUgaW5wdXQgZm9yIGVhY2ggdGhlcm1hbCB6b25lICovCitzdHJ1Y3QgdGhlcm1hbF9od21vbl90ZW1wIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGh3bW9uX25vZGU7CisJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6OworCXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgdGVtcF9pbnB1dDsJLyogaHdtb24gc3lzIGF0dHIgKi8KKwlzdHJ1Y3QgdGhlcm1hbF9od21vbl9hdHRyIHRlbXBfY3JpdDsJLyogaHdtb24gc3lzIGF0dHIgKi8KK307CisKIHN0YXRpYyBMSVNUX0hFQUQodGhlcm1hbF9od21vbl9saXN0KTsKIAogc3RhdGljIHNzaXplX3QKQEAgLTQzNyw5ICs0NjAsMTAgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgKmh3bW9uX2F0dHIKIAkJCT0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIsIGF0dHIpOwotCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0egotCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UsCisJc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCAqdGVtcAorCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCwKIAkJCQkgICAgICAgdGVtcF9pbnB1dCk7CisJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ID0gdGVtcC0+dHo7CiAKIAlyZXQgPSB0ei0+b3BzLT5nZXRfdGVtcCh0eiwgJnRlbXBlcmF0dXJlKTsKIApAQCAtNDU1LDkgKzQ3OSwxMCBAQAogewogCXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgKmh3bW9uX2F0dHIKIAkJCT0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIsIGF0dHIpOwotCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0egotCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UsCisJc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCAqdGVtcAorCQkJPSBjb250YWluZXJfb2YoaHdtb25fYXR0ciwgc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCwKIAkJCQkgICAgICAgdGVtcF9jcml0KTsKKwlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHogPSB0ZW1wLT50ejsKIAlsb25nIHRlbXBlcmF0dXJlOwogCWludCByZXQ7CiAKQEAgLTQ2OSwyMiArNDk0LDU0IEBACiB9CiAKIAotc3RhdGljIGludAotdGhlcm1hbF9hZGRfaHdtb25fc3lzZnMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQorc3RhdGljIHN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqCit0aGVybWFsX2h3bW9uX2xvb2t1cF9ieV90eXBlKGNvbnN0IHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKIHsKIAlzdHJ1Y3QgdGhlcm1hbF9od21vbl9kZXZpY2UgKmh3bW9uOwotCWludCBuZXdfaHdtb25fZGV2aWNlID0gMTsKLQlpbnQgcmVzdWx0OwogCiAJbXV0ZXhfbG9jaygmdGhlcm1hbF9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaHdtb24sICZ0aGVybWFsX2h3bW9uX2xpc3QsIG5vZGUpCiAJCWlmICghc3RyY21wKGh3bW9uLT50eXBlLCB0ei0+dHlwZSkpIHsKLQkJCW5ld19od21vbl9kZXZpY2UgPSAwOwogCQkJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7Ci0JCQlnb3RvIHJlZ2lzdGVyX3N5c19pbnRlcmZhY2U7CisJCQlyZXR1cm4gaHdtb247CiAJCX0KIAltdXRleF91bmxvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKIAorCXJldHVybiBOVUxMOworfQorCisvKiBGaW5kIHRoZSB0ZW1wZXJhdHVyZSBpbnB1dCBtYXRjaGluZyBhIGdpdmVuIHRoZXJtYWwgem9uZSAqLworc3RhdGljIHN0cnVjdCB0aGVybWFsX2h3bW9uX3RlbXAgKgordGhlcm1hbF9od21vbl9sb29rdXBfdGVtcChjb25zdCBzdHJ1Y3QgdGhlcm1hbF9od21vbl9kZXZpY2UgKmh3bW9uLAorCQkJICBjb25zdCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCit7CisJc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCAqdGVtcDsKKworCW11dGV4X2xvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXAsICZod21vbi0+dHpfbGlzdCwgaHdtb25fbm9kZSkKKwkJaWYgKHRlbXAtPnR6ID09IHR6KSB7CisJCQltdXRleF91bmxvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKKwkJCXJldHVybiB0ZW1wOworCQl9CisJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAordGhlcm1hbF9hZGRfaHdtb25fc3lzZnMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQoreworCXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqaHdtb247CisJc3RydWN0IHRoZXJtYWxfaHdtb25fdGVtcCAqdGVtcDsKKwlpbnQgbmV3X2h3bW9uX2RldmljZSA9IDE7CisJaW50IHJlc3VsdDsKKworCWh3bW9uID0gdGhlcm1hbF9od21vbl9sb29rdXBfYnlfdHlwZSh0eik7CisJaWYgKGh3bW9uKSB7CisJCW5ld19od21vbl9kZXZpY2UgPSAwOworCQlnb3RvIHJlZ2lzdGVyX3N5c19pbnRlcmZhY2U7CisJfQorCiAJaHdtb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhlcm1hbF9od21vbl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWh3bW9uKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUwMiwzMCArNTU5LDM2IEBACiAJCWdvdG8gZnJlZV9tZW07CiAKICByZWdpc3Rlcl9zeXNfaW50ZXJmYWNlOgotCXR6LT5od21vbiA9IGh3bW9uOworCXRlbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhlcm1hbF9od21vbl90ZW1wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gdW5yZWdpc3Rlcl9uYW1lOworCX0KKworCXRlbXAtPnR6ID0gdHo7CiAJaHdtb24tPmNvdW50Kys7CiAKLQlzbnByaW50Zih0ei0+dGVtcF9pbnB1dC5uYW1lLCBUSEVSTUFMX05BTUVfTEVOR1RILAorCXNucHJpbnRmKHRlbXAtPnRlbXBfaW5wdXQubmFtZSwgVEhFUk1BTF9OQU1FX0xFTkdUSCwKIAkJICJ0ZW1wJWRfaW5wdXQiLCBod21vbi0+Y291bnQpOwotCXR6LT50ZW1wX2lucHV0LmF0dHIuYXR0ci5uYW1lID0gdHotPnRlbXBfaW5wdXQubmFtZTsKLQl0ei0+dGVtcF9pbnB1dC5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7Ci0JdHotPnRlbXBfaW5wdXQuYXR0ci5zaG93ID0gdGVtcF9pbnB1dF9zaG93OwotCXN5c2ZzX2F0dHJfaW5pdCgmdHotPnRlbXBfaW5wdXQuYXR0ci5hdHRyKTsKLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoaHdtb24tPmRldmljZSwgJnR6LT50ZW1wX2lucHV0LmF0dHIpOworCXRlbXAtPnRlbXBfaW5wdXQuYXR0ci5hdHRyLm5hbWUgPSB0ZW1wLT50ZW1wX2lucHV0Lm5hbWU7CisJdGVtcC0+dGVtcF9pbnB1dC5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CisJdGVtcC0+dGVtcF9pbnB1dC5hdHRyLnNob3cgPSB0ZW1wX2lucHV0X3Nob3c7CisJc3lzZnNfYXR0cl9pbml0KCZ0ZW1wLT50ZW1wX2lucHV0LmF0dHIuYXR0cik7CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGh3bW9uLT5kZXZpY2UsICZ0ZW1wLT50ZW1wX2lucHV0LmF0dHIpOwogCWlmIChyZXN1bHQpCi0JCWdvdG8gdW5yZWdpc3Rlcl9uYW1lOworCQlnb3RvIGZyZWVfdGVtcF9tZW07CiAKIAlpZiAodHotPm9wcy0+Z2V0X2NyaXRfdGVtcCkgewogCQl1bnNpZ25lZCBsb25nIHRlbXBlcmF0dXJlOwogCQlpZiAoIXR6LT5vcHMtPmdldF9jcml0X3RlbXAodHosICZ0ZW1wZXJhdHVyZSkpIHsKLQkJCXNucHJpbnRmKHR6LT50ZW1wX2NyaXQubmFtZSwgVEhFUk1BTF9OQU1FX0xFTkdUSCwKKwkJCXNucHJpbnRmKHRlbXAtPnRlbXBfY3JpdC5uYW1lLCBUSEVSTUFMX05BTUVfTEVOR1RILAogCQkJCSJ0ZW1wJWRfY3JpdCIsIGh3bW9uLT5jb3VudCk7Ci0JCQl0ei0+dGVtcF9jcml0LmF0dHIuYXR0ci5uYW1lID0gdHotPnRlbXBfY3JpdC5uYW1lOwotCQkJdHotPnRlbXBfY3JpdC5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7Ci0JCQl0ei0+dGVtcF9jcml0LmF0dHIuc2hvdyA9IHRlbXBfY3JpdF9zaG93OwotCQkJc3lzZnNfYXR0cl9pbml0KCZ0ei0+dGVtcF9jcml0LmF0dHIuYXR0cik7CisJCQl0ZW1wLT50ZW1wX2NyaXQuYXR0ci5hdHRyLm5hbWUgPSB0ZW1wLT50ZW1wX2NyaXQubmFtZTsKKwkJCXRlbXAtPnRlbXBfY3JpdC5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CisJCQl0ZW1wLT50ZW1wX2NyaXQuYXR0ci5zaG93ID0gdGVtcF9jcml0X3Nob3c7CisJCQlzeXNmc19hdHRyX2luaXQoJnRlbXAtPnRlbXBfY3JpdC5hdHRyLmF0dHIpOwogCQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGh3bW9uLT5kZXZpY2UsCi0JCQkJCQkgICAgJnR6LT50ZW1wX2NyaXQuYXR0cik7CisJCQkJCQkgICAgJnRlbXAtPnRlbXBfY3JpdC5hdHRyKTsKIAkJCWlmIChyZXN1bHQpCiAJCQkJZ290byB1bnJlZ2lzdGVyX2lucHV0OwogCQl9CkBAIC01MzQsMTMgKzU5NywxNSBAQAogCW11dGV4X2xvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKIAlpZiAobmV3X2h3bW9uX2RldmljZSkKIAkJbGlzdF9hZGRfdGFpbCgmaHdtb24tPm5vZGUsICZ0aGVybWFsX2h3bW9uX2xpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnR6LT5od21vbl9ub2RlLCAmaHdtb24tPnR6X2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnRlbXAtPmh3bW9uX25vZGUsICZod21vbi0+dHpfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gMDsKIAogIHVucmVnaXN0ZXJfaW5wdXQ6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGh3bW9uLT5kZXZpY2UsICZ0ei0+dGVtcF9pbnB1dC5hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoaHdtb24tPmRldmljZSwgJnRlbXAtPnRlbXBfaW5wdXQuYXR0cik7CisgZnJlZV90ZW1wX21lbToKKwlrZnJlZSh0ZW1wKTsKICB1bnJlZ2lzdGVyX25hbWU6CiAJaWYgKG5ld19od21vbl9kZXZpY2UpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGh3bW9uLT5kZXZpY2UsICZkZXZfYXR0cl9uYW1lKTsKQEAgLTU1NiwxNSArNjIxLDMwIEBACiBzdGF0aWMgdm9pZAogdGhlcm1hbF9yZW1vdmVfaHdtb25fc3lzZnMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQogewotCXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqaHdtb24gPSB0ei0+aHdtb247CisJc3RydWN0IHRoZXJtYWxfaHdtb25fZGV2aWNlICpod21vbjsKKwlzdHJ1Y3QgdGhlcm1hbF9od21vbl90ZW1wICp0ZW1wOwogCi0JdHotPmh3bW9uID0gTlVMTDsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoaHdtb24tPmRldmljZSwgJnR6LT50ZW1wX2lucHV0LmF0dHIpOworCWh3bW9uID0gdGhlcm1hbF9od21vbl9sb29rdXBfYnlfdHlwZSh0eik7CisJaWYgKHVubGlrZWx5KCFod21vbikpIHsKKwkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLworCQlkZXZfZGJnKCZ0ei0+ZGV2aWNlLCAiaHdtb24gZGV2aWNlIGxvb2t1cCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXRlbXAgPSB0aGVybWFsX2h3bW9uX2xvb2t1cF90ZW1wKGh3bW9uLCB0eik7CisJaWYgKHVubGlrZWx5KCF0ZW1wKSkgeworCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCisJCWRldl9kYmcoJnR6LT5kZXZpY2UsICJ0ZW1wZXJhdHVyZSBpbnB1dCBsb29rdXAgZmFpbGVkIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoaHdtb24tPmRldmljZSwgJnRlbXAtPnRlbXBfaW5wdXQuYXR0cik7CiAJaWYgKHR6LT5vcHMtPmdldF9jcml0X3RlbXApCi0JCWRldmljZV9yZW1vdmVfZmlsZShod21vbi0+ZGV2aWNlLCAmdHotPnRlbXBfY3JpdC5hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGh3bW9uLT5kZXZpY2UsICZ0ZW1wLT50ZW1wX2NyaXQuYXR0cik7CiAKIAltdXRleF9sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJnR6LT5od21vbl9ub2RlKTsKKwlsaXN0X2RlbCgmdGVtcC0+aHdtb25fbm9kZSk7CisJa2ZyZWUodGVtcCk7CiAJaWYgKCFsaXN0X2VtcHR5KCZod21vbi0+dHpfbGlzdCkpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3B0eS5jIGIvZHJpdmVycy90dHkvcHR5LmMKaW5kZXggOThiNmUzYi4uZTgwOWU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvcHR5LmMKKysrIGIvZHJpdmVycy90dHkvcHR5LmMKQEAgLTQ0Niw4ICs0NDYsMTkgQEAKIGludCBwdHlfbGltaXQgPSBOUl9VTklYOThfUFRZX0RFRkFVTFQ7CiBzdGF0aWMgaW50IHB0eV9saW1pdF9taW47CiBzdGF0aWMgaW50IHB0eV9saW1pdF9tYXggPSBOUl9VTklYOThfUFRZX01BWDsKK3N0YXRpYyBpbnQgdHR5X2NvdW50Owogc3RhdGljIGludCBwdHlfY291bnQ7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHlfaW5jX2NvdW50KHZvaWQpCit7CisJcHR5X2NvdW50ID0gKCsrdHR5X2NvdW50KSAvIDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHlfZGVjX2NvdW50KHZvaWQpCit7CisJcHR5X2NvdW50ID0gKC0tdHR5X2NvdW50KSAvIDI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2RldiBwdG14X2NkZXY7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHB0eV90YWJsZVtdID0gewpAQCAtNTQyLDYgKzU1Myw3IEBACiAKIHN0YXRpYyB2b2lkIHB0eV91bml4OThfc2h1dGRvd24oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwl0dHlfZHJpdmVyX3JlbW92ZV90dHkodHR5LT5kcml2ZXIsIHR0eSk7CiAJLyogV2UgaGF2ZSBvdXIgb3duIG1ldGhvZCBhcyB3ZSBkb24ndCB1c2UgdGhlIHR0eSBpbmRleCAqLwogCWtmcmVlKHR0eS0+dGVybWlvcyk7CiB9CkBAIC01ODgsNyArNjAwLDggQEAKIAkgKi8KIAl0dHlfZHJpdmVyX2tyZWZfZ2V0KGRyaXZlcik7CiAJdHR5LT5jb3VudCsrOwotCXB0eV9jb3VudCsrOworCXB0eV9pbmNfY291bnQoKTsgLyogdHR5ICovCisJcHR5X2luY19jb3VudCgpOyAvKiB0dHktPmxpbmsgKi8KIAlyZXR1cm4gMDsKIGVycl9mcmVlX21lbToKIAlkZWluaXRpYWxpemVfdHR5X3N0cnVjdChvX3R0eSk7CkBAIC02MDIsNyArNjE1LDcgQEAKIAogc3RhdGljIHZvaWQgcHR5X3VuaXg5OF9yZW1vdmUoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlwdHlfY291bnQtLTsKKwlwdHlfZGVjX2NvdW50KCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHRtX3VuaXg5OF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwppbmRleCBmMmRmZWM4Li43ZjUwOTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKQEAgLTE4MTksNiArMTgxOSw4IEBACiAJdW5zaWduZWQgaW50IGlpciwgaWVyID0gMCwgbHNyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCiAJLyoKIAkgKiBNdXN0IGRpc2FibGUgaW50ZXJydXB0cyBvciBlbHNlIHdlIHJpc2sgcmFjaW5nIHdpdGggdGhlIGludGVycnVwdAogCSAqIGJhc2VkIGhhbmRsZXIuCkBAIC0xODM2LDEwICsxODM4LDggQEAKIAkgKiB0aGUgIkRpdmEiIFVBUlQgdXNlZCBvbiB0aGUgbWFuYWdlbWVudCBwcm9jZXNzb3Igb24gbWFueSBIUAogCSAqIGlhNjQgYW5kIHBhcmlzYyBib3hlcy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCWxzciA9IHNlcmlhbF9pbih1cCwgVUFSVF9MU1IpOwogCXVwLT5sc3Jfc2F2ZWRfZmxhZ3MgfD0gbHNyICYgTFNSX1NBVkVfRkxBR1M7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCWlmICgoaWlyICYgVUFSVF9JSVJfTk9fSU5UKSAmJiAodXAtPmllciAmIFVBUlRfSUVSX1RIUkkpICYmCiAJICAgICghdWFydF9jaXJjX2VtcHR5KCZ1cC0+cG9ydC5zdGF0ZS0+eG1pdCkgfHwgdXAtPnBvcnQueF9jaGFyKSAmJgogCSAgICAobHNyICYgVUFSVF9MU1JfVEhSRSkpIHsKQEAgLTE4NDgsMTEgKzE4NDgsMTMgQEAKIAl9CiAKIAlpZiAoIShpaXIgJiBVQVJUX0lJUl9OT19JTlQpKQotCQlzZXJpYWw4MjUwX2hhbmRsZV9wb3J0KHVwKTsKKwkJdHJhbnNtaXRfY2hhcnModXApOwogCiAJaWYgKGlzX3JlYWxfaW50ZXJydXB0KHVwLT5wb3J0LmlycSkpCiAJCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCBpZXIpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCiAJLyogU3RhbmRhcmQgdGltZXIgaW50ZXJ2YWwgcGx1cyAwLjJzIHRvIGtlZXAgdGhlIHBvcnQgcnVubmluZyAqLwogCW1vZF90aW1lcigmdXAtPnRpbWVyLAogCQlqaWZmaWVzICsgdWFydF9wb2xsX3RpbWVvdXQoJnVwLT5wb3J0KSArIEhaIC8gNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCmluZGV4IDZiODg3ZDkuLjNhYmVjYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BjaS5jCkBAIC0xNTk5LDExICsxNTk5LDYgQEAKIAkJLmRldmljZSAgICAgICAgID0gMHg4MDBELAogCQkuaW5pdAkJPSBwY2lfZWcyMHRfaW5pdCwKIAl9LAotCXsKLQkJLnZlbmRvciAgICAgICAgID0gMHgxMERCLAotCQkuZGV2aWNlICAgICAgICAgPSAweDgwMEQsCi0JCS5pbml0CQk9IHBjaV9lZzIwdF9pbml0LAotCX0sCiAJLyoKIAkgKiBDcm9ueXggT21lZ2EgUENJIChQTFgtY2hpcCBiYXNlZCkKIAkgKi8KQEAgLTQwMjEsNyArNDAxNiw3IEBACiAJCTAsIDAsIHBibl9ORVRNT1M5OTAwXzJzXzExNTIwMCB9LAogCiAJLyoKLQkgKiBCZXN0IENvbm5lY3Rpdml0eSBQQ0kgTXVsdGkgSS9PIGNhcmRzCisJICogQmVzdCBDb25uZWN0aXZpdHkgYW5kIFJvc2V3aWxsIFBDSSBNdWx0aSBJL08gY2FyZHMKIAkgKi8KIAogCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCkBAIC00MDI5LDYgKzQwMjQsMTAgQEAKIAkJMCwgMCwgcGJuX2IwXzFfMTE1MjAwIH0sCiAKIAl7CVBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODY1LAorCQkweEEwMDAsIDB4MzAwMiwKKwkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODY1LAogCQkweEEwMDAsIDB4MzAwNCwKIAkJMCwgMCwgcGJuX2IwX2J0XzRfMTE1MjAwIH0sCiAJLyogSW50ZWwgQ0U0MTAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MF9wbnAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCmluZGV4IGZjMzAxZjYuLmEyZjIzNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwX3BucC5jCkBAIC0xMDksNiArMTA5LDkgQEAKIAkvKiBJQk0gKi8KIAkvKiBJQk0gVGhpbmtwYWQgNzAxIEludGVybmFsIE1vZGVtIFZvaWNlICovCiAJewkiSUJNMDAzMyIsCQkwCX0sCisJLyogSW50ZXJtZWMgKi8KKwkvKiBJbnRlcm1lYyBDVjYwIHRvdWNoc2NyZWVuIHBvcnQgKi8KKwl7CSJQTlA0OTcyIiwJCTAJfSwKIAkvKiBJbnRlcnRleCAqLwogCS8qIEludGVydGV4IDI4azggMzNrNiBWb2ljZSBFWFQgUG5QICovCiAJewkiSVhEQzgwMSIsCQkwCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGNiNDBiODIuLjRkY2IzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC05NTksNyArOTU5LDcgQEAKIAogY29uZmlnIFNFUklBTF9TSF9TQ0kKIAl0cmlzdGF0ZSAiU3VwZXJIIFNDSShGKSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSEFWRV9DTEsgJiYgKFNVUEVSSCB8fCBIODMwMCB8fCBBUkNIX1NITU9CSUxFKQorCWRlcGVuZHMgb24gSEFWRV9DTEsgJiYgKFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFKQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCiBjb25maWcgU0VSSUFMX1NIX1NDSV9OUl9VQVJUUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCmluZGV4IGFmOWI3ODEuLmI5MjJmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE2MDksOSArMTYwOSwxMSBAQAogc3RhdGljIGludCBfX2luaXQgYXRtZWxfY29uc29sZV9pbml0KHZvaWQpCiB7CiAJaWYgKGF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpIHsKLQkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKEFUTUVMX0RFVklDRU5BTUUsCi0JCQkJICAgICAgYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZS0+aWQsIE5VTEwpOwotCQlhdG1lbF9pbml0X3BvcnQoJmF0bWVsX3BvcnRzW2F0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UtPmlkXSwKKwkJc3RydWN0IGF0bWVsX3VhcnRfZGF0YSAqcGRhdGEgPQorCQkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKEFUTUVMX0RFVklDRU5BTUUsIHBkYXRhLT5udW0sIE5VTEwpOworCQlhdG1lbF9pbml0X3BvcnQoJmF0bWVsX3BvcnRzW3BkYXRhLT5udW1dLAogCQkJCWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpOwogCQlyZWdpc3Rlcl9jb25zb2xlKCZhdG1lbF9jb25zb2xlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2NyaXN2MTAuYwppbmRleCAyMjUxMjNiLi41OGJlNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9jcmlzdjEwLmMKQEAgLTQ0NTAsNyArNDQ1MCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19FVFJBWF9SUzQ4NSkKICNpZiBkZWZpbmVkKENPTkZJR19FVFJBWF9SUzQ4NV9PTl9QQSkKLQlpZiAoY3Jpc19pb19pbnRlcmZhY2VfYWxsb2NhdGVfcGlucyhpZl9zZXIwLCAnYScsIHJzNDg1X3BhX2JpdCwKKwlpZiAoY3Jpc19pb19pbnRlcmZhY2VfYWxsb2NhdGVfcGlucyhpZl9zZXJpYWxfMCwgJ2EnLCByczQ4NV9wYV9iaXQsCiAJCQlyczQ4NV9wYV9iaXQpKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgIkVUUkFYMTAwTFggc2VyaWFsOiBDb3VsZCBub3QgYWxsb2NhdGUgIgogCQkJIlJTNDg1IHBpblxuIik7CkBAIC00NDU5LDcgKzQ0NTksNyBAQAogCX0KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0VUUkFYX1JTNDg1X09OX1BPUlRfRykKLQlpZiAoY3Jpc19pb19pbnRlcmZhY2VfYWxsb2NhdGVfcGlucyhpZl9zZXIwLCAnZycsIHJzNDg1X3BhX2JpdCwKKwlpZiAoY3Jpc19pb19pbnRlcmZhY2VfYWxsb2NhdGVfcGlucyhpZl9zZXJpYWxfMCwgJ2cnLCByczQ4NV9wYV9iaXQsCiAJCQlyczQ4NV9wb3J0X2dfYml0KSkgewogCQlwcmludGsoS0VSTl9DUklUICJFVFJBWDEwMExYIHNlcmlhbDogQ291bGQgbm90IGFsbG9jYXRlICIKIAkJCSJSUzQ4NSBwaW5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCmluZGV4IDgyN2RiNzYuLjdlOTFiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKQEAgLTEyODYsMjIgKzEyODYsMTcgQEAKIHN0YXRpYyBpbnQgc2VyaWFsX2lteF9wcm9iZV9kdChzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0LAogCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0YXRpYyBpbnQgcG9ydG51bSA9IDA7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KIAkJCW9mX21hdGNoX2RldmljZShpbXhfdWFydF9kdF9pZHMsICZwZGV2LT5kZXYpOwotCWludCByZXQ7CiAKIAlpZiAoIW5wKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IG9mX2FsaWFzX2dldF9pZChucCwgInNlcmlhbCIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgYWxpYXMgaWQsIGVycm5vICVkXG4iLAotCQkJX19mdW5jX18sIHJldCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0gZWxzZSB7Ci0JCXNwb3J0LT5wb3J0LmxpbmUgPSByZXQ7Ci0JfQorCXNwb3J0LT5wb3J0LmxpbmUgPSBwb3J0bnVtKys7CisJaWYgKHNwb3J0LT5wb3J0LmxpbmUgPj0gVUFSVF9OUikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZnNsLHVhcnQtaGFzLXJ0c2N0cyIsIE5VTEwpKQogCQlzcG9ydC0+aGF2ZV9ydHNjdHMgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDctYWF2YS5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDctYWF2YS5jCmluZGV4IGExZmUzMDQuLmQ3M2FhZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LWFhdmEuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy1hYXZhLmMKQEAgLTM0MCw1ICszNDAsNSBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDMxMDcgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJBYXZhbW9iaWxlIik7Ci1NT0RVTEVfQUxJQVMoImFhdmEtbWF4MzEwNy1zcGkiKTsKK01PRFVMRV9BTElBUygic3BpOmFhdmEtbWF4MzEwNyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMKaW5kZXggNzUwYjRmNi4uYTgxNjQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jCkBAIC0xMjA5LDUgKzEyMDksNSBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDMxMDcgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJBYXZhbW9iaWxlIik7Ci1NT0RVTEVfQUxJQVMoIm1heDMxMDctc3BpIik7CitNT0RVTEVfQUxJQVMoInNwaTptYXgzMTA3Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXJzdF9tYXgzMTEwLmMKaW5kZXggYTc2NGJmOS4uMjNiYzc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21yc3RfbWF4MzExMC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcnN0X21heDMxMTAuYwpAQCAtOTE3LDQgKzkxNyw0IEBACiBtb2R1bGVfZXhpdChzZXJpYWxfbTMxMTBfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BTElBUygibWF4MzExMC11YXJ0Iik7CitNT0RVTEVfQUxJQVMoInNwaTptYXgzMTEwLXVhcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vbWFwLXNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKaW5kZXggYzM3ZGY4ZC4uNWU3MTNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL29tYXAtc2VyaWFsLmMKQEAgLTgwNiw4ICs4MDYsNyBAQAogCiAJc2VyaWFsX29tYXBfc2V0X21jdHJsKCZ1cC0+cG9ydCwgdXAtPnBvcnQubWN0cmwpOwogCS8qIFNvZnR3YXJlIEZsb3cgQ29udHJvbCBDb25maWd1cmF0aW9uICovCi0JaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiAoSVhPTiB8IElYT0ZGKSkKLQkJc2VyaWFsX29tYXBfY29uZmlndXJlX3hvbnhvZmYodXAsIHRlcm1pb3MpOworCXNlcmlhbF9vbWFwX2NvbmZpZ3VyZV94b254b2ZmKHVwLCB0ZXJtaW9zKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIAlkZXZfZGJnKHVwLT5wb3J0LmRldiwgInNlcmlhbF9vbWFwX3NldF90ZXJtaW9zKyVkXG4iLCB1cC0+cGRldi0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwppbmRleCA4NDZkZmNkLi5iNDYyMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvcGNoX3VhcnQuYwpAQCAtNTk4LDcgKzU5OCw4IEBACiAJZG1hX2NhcF96ZXJvKG1hc2spOwogCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CiAKLQlkbWFfZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMiwgUENJX0RFVkZOKDB4YSwgMCkpOyAvKiBHZXQgRE1BJ3MgZGV2CisJZG1hX2RldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KHByaXYtPnBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJCSAgICAgICBQQ0lfREVWRk4oMHhhLCAwKSk7IC8qIEdldCBETUEncyBkZXYKIAkJCQkJCQkJaW5mb3JtYXRpb24gKi8KIAkvKiBTZXQgVHggRE1BICovCiAJcGFyYW0gPSAmcHJpdi0+cGFyYW1fdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYwppbmRleCBhZmM2Mjk0Li42ZWRhZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMKQEAgLTEyMjUsMTUgKzEyMjUsMTkgQEAKIAkuc3VzcGVuZCA9IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSwKIH07CisjZGVmaW5lIFNFUklBTF9TQU1TVU5HX1BNX09QUwkoJnMzYzI0eHhfc2VyaWFsX3BtX29wcykKKwogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwotI2RlZmluZSBzM2MyNHh4X3NlcmlhbF9wbV9vcHMJTlVMTAorCisjZGVmaW5lIFNFUklBTF9TQU1TVU5HX1BNX09QUwlOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIGludCBzM2MyNHh4X3NlcmlhbF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiwKIAkJCXN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKIHsKIAlkYmcoInMzYzI0eHhfc2VyaWFsX2luaXQoJXAsJXApXG4iLCBkcnYsIGluZm8pOwotCWRydi0+ZHJpdmVyLnBtID0gJnMzYzI0eHhfc2VyaWFsX3BtX29wczsKKworCWRydi0+ZHJpdmVyLnBtID0gU0VSSUFMX1NBTVNVTkdfUE1fT1BTOwogCiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCBkYjc5MTJjLi5hM2VmYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMjAwLDYgKzIwMCwxMSBAQAogCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAJfQogCisJLyoKKwkgKiBUaGlzIGlzIHRvIGFsbG93IHNldHNlcmlhbCBvbiB0aGlzIHBvcnQuIFBlb3BsZSBtYXkgd2FudCB0byBzZXQKKwkgKiBwb3J0L2lycS90eXBlIGFuZCB0aGVuIHJlY29uZmlndXJlIHRoZSBwb3J0IHByb3Blcmx5IGlmIGl0IGZhaWxlZAorCSAqIG5vdy4KKwkgKi8KIAlpZiAocmV0dmFsICYmIGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHZhbCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuYwppbmRleCBlYmQ4NjI5Li41ZWE2ZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCkBAIC01NCwxMCArNTUsNiBAQAogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19IODMwMAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInNoLXNjaS5oIgogCiBzdHJ1Y3Qgc2NpX3BvcnQgewpAQCAtNjYsMTIgKzYzLDYgQEAKIAkvKiBQbGF0Zm9ybSBjb25maWd1cmF0aW9uICovCiAJc3RydWN0IHBsYXRfc2NpX3BvcnQJKmNmZzsKIAotCS8qIFBvcnQgZW5hYmxlIGNhbGxiYWNrICovCi0Jdm9pZAkJCSgqZW5hYmxlKShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKLQotCS8qIFBvcnQgZGlzYWJsZSBjYWxsYmFjayAqLwotCXZvaWQJCQkoKmRpc2FibGUpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwotCiAJLyogQnJlYWsgdGltZXIgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAlicmVha190aW1lcjsKIAlpbnQJCQlicmVha19mbGFnOwpAQCAtODEsNiArNzIsOCBAQAogCS8qIEZ1bmN0aW9uIGNsb2NrICovCiAJc3RydWN0IGNsawkJKmZjbGs7CiAKKwljaGFyCQkJKmlycXN0cltTQ0l4X05SX0lSUVNdOworCiAJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW5fdHg7CiAJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW5fcng7CiAKQEAgLTEwMyw2ICs5NiwxMiBAQAogI2VuZGlmCiAKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCWZyZXFfdHJhbnNpdGlvbjsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUKKwl1bnNpZ25lZCBzaG9ydCBzYXZlZF9zbXI7CisJdW5zaWduZWQgc2hvcnQgc2F2ZWRfZmNyOworCXVuc2lnbmVkIGNoYXIgc2F2ZWRfYnJyOworI2VuZGlmCiB9OwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCkBAIC0xMjEsNiArMTIwLDI3OCBAQAogCXJldHVybiBjb250YWluZXJfb2YodWFydCwgc3RydWN0IHNjaV9wb3J0LCBwb3J0KTsKIH0KIAorc3RydWN0IHBsYXRfc2NpX3JlZyB7CisJdTggb2Zmc2V0LCBzaXplOworfTsKKworLyogSGVscGVyIGZvciBpbnZhbGlkYXRpbmcgc3BlY2lmaWMgZW50cmllcyBvZiBhbiBpbmhlcml0ZWQgbWFwLiAqLworI2RlZmluZSBzY2lfcmVnX2ludmFsaWQJeyAub2Zmc2V0ID0gMCwgLnNpemUgPSAwIH0KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9yZWcgc2NpX3JlZ21hcFtTQ0l4X05SX1JFR1RZUEVTXVtTQ0l4X05SX1JFR1NdID0geworCVtTQ0l4X1BST0JFX1JFR1RZUEVdID0geworCQlbMCAuLi4gU0NJeF9OUl9SRUdTIC0gMV0gPSBzY2lfcmVnX2ludmFsaWQsCisJfSwKKworCS8qCisJICogQ29tbW9uIFNDSSBkZWZpbml0aW9ucywgZGVwZW5kZW50IG9uIHRoZSBwb3J0J3MgcmVnc2hpZnQKKwkgKiB2YWx1ZS4KKwkgKi8KKwlbU0NJeF9TQ0lfUkVHVFlQRV0gPSB7CisJCVtTQ1NNUl0JCT0geyAweDAwLCAgOCB9LAorCQlbU0NCUlJdCQk9IHsgMHgwMSwgIDggfSwKKwkJW1NDU0NSXQkJPSB7IDB4MDIsICA4IH0sCisJCVtTQ3hURFJdCT0geyAweDAzLCAgOCB9LAorCQlbU0N4U1JdCQk9IHsgMHgwNCwgIDggfSwKKwkJW1NDeFJEUl0JPSB7IDB4MDUsICA4IH0sCisJCVtTQ0ZDUl0JCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NGRFJdCQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDVEZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1JGRFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NTUFRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDTFNSXQkJPSBzY2lfcmVnX2ludmFsaWQsCisJfSwKKworCS8qCisJICogQ29tbW9uIGRlZmluaXRpb25zIGZvciBsZWdhY3kgSXJEQSBwb3J0cywgZGVwZW5kZW50IG9uCisJICogcmVnc2hpZnQgdmFsdWUuCisJICovCisJW1NDSXhfSVJEQV9SRUdUWVBFXSA9IHsKKwkJW1NDU01SXQkJPSB7IDB4MDAsICA4IH0sCisJCVtTQ0JSUl0JCT0geyAweDAxLCAgOCB9LAorCQlbU0NTQ1JdCQk9IHsgMHgwMiwgIDggfSwKKwkJW1NDeFREUl0JPSB7IDB4MDMsICA4IH0sCisJCVtTQ3hTUl0JCT0geyAweDA0LCAgOCB9LAorCQlbU0N4UkRSXQk9IHsgMHgwNSwgIDggfSwKKwkJW1NDRkNSXQkJPSB7IDB4MDYsICA4IH0sCisJCVtTQ0ZEUl0JCT0geyAweDA3LCAxNiB9LAorCQlbU0NURkRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDUkZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1NQVFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NMU1JdCQk9IHNjaV9yZWdfaW52YWxpZCwKKwl9LAorCisJLyoKKwkgKiBDb21tb24gU0NJRkEgZGVmaW5pdGlvbnMuCisJICovCisJW1NDSXhfU0NJRkFfUkVHVFlQRV0gPSB7CisJCVtTQ1NNUl0JCT0geyAweDAwLCAxNiB9LAorCQlbU0NCUlJdCQk9IHsgMHgwNCwgIDggfSwKKwkJW1NDU0NSXQkJPSB7IDB4MDgsIDE2IH0sCisJCVtTQ3hURFJdCT0geyAweDIwLCAgOCB9LAorCQlbU0N4U1JdCQk9IHsgMHgxNCwgMTYgfSwKKwkJW1NDeFJEUl0JPSB7IDB4MjQsICA4IH0sCisJCVtTQ0ZDUl0JCT0geyAweDE4LCAxNiB9LAorCQlbU0NGRFJdCQk9IHsgMHgxYywgMTYgfSwKKwkJW1NDVEZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1JGRFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NTUFRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDTFNSXQkJPSBzY2lfcmVnX2ludmFsaWQsCisJfSwKKworCS8qCisJICogQ29tbW9uIFNDSUZCIGRlZmluaXRpb25zLgorCSAqLworCVtTQ0l4X1NDSUZCX1JFR1RZUEVdID0geworCQlbU0NTTVJdCQk9IHsgMHgwMCwgMTYgfSwKKwkJW1NDQlJSXQkJPSB7IDB4MDQsICA4IH0sCisJCVtTQ1NDUl0JCT0geyAweDA4LCAxNiB9LAorCQlbU0N4VERSXQk9IHsgMHg0MCwgIDggfSwKKwkJW1NDeFNSXQkJPSB7IDB4MTQsIDE2IH0sCisJCVtTQ3hSRFJdCT0geyAweDYwLCAgOCB9LAorCQlbU0NGQ1JdCQk9IHsgMHgxOCwgMTYgfSwKKwkJW1NDRkRSXQkJPSB7IDB4MWMsIDE2IH0sCisJCVtTQ1RGRFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NSRkRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDU1BUUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ0xTUl0JCT0gc2NpX3JlZ19pbnZhbGlkLAorCX0sCisKKwkvKgorCSAqIENvbW1vbiBTSC0zIFNDSUYgZGVmaW5pdGlvbnMuCisJICovCisJW1NDSXhfU0gzX1NDSUZfUkVHVFlQRV0gPSB7CisJCVtTQ1NNUl0JCT0geyAweDAwLCAgOCB9LAorCQlbU0NCUlJdCQk9IHsgMHgwMiwgIDggfSwKKwkJW1NDU0NSXQkJPSB7IDB4MDQsICA4IH0sCisJCVtTQ3hURFJdCT0geyAweDA2LCAgOCB9LAorCQlbU0N4U1JdCQk9IHsgMHgwOCwgMTYgfSwKKwkJW1NDeFJEUl0JPSB7IDB4MGEsICA4IH0sCisJCVtTQ0ZDUl0JCT0geyAweDBjLCAgOCB9LAorCQlbU0NGRFJdCQk9IHsgMHgwZSwgMTYgfSwKKwkJW1NDVEZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1JGRFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NTUFRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDTFNSXQkJPSBzY2lfcmVnX2ludmFsaWQsCisJfSwKKworCS8qCisJICogQ29tbW9uIFNILTQoQSkgU0NJRihCKSBkZWZpbml0aW9ucy4KKwkgKi8KKwlbU0NJeF9TSDRfU0NJRl9SRUdUWVBFXSA9IHsKKwkJW1NDU01SXQkJPSB7IDB4MDAsIDE2IH0sCisJCVtTQ0JSUl0JCT0geyAweDA0LCAgOCB9LAorCQlbU0NTQ1JdCQk9IHsgMHgwOCwgMTYgfSwKKwkJW1NDeFREUl0JPSB7IDB4MGMsICA4IH0sCisJCVtTQ3hTUl0JCT0geyAweDEwLCAxNiB9LAorCQlbU0N4UkRSXQk9IHsgMHgxNCwgIDggfSwKKwkJW1NDRkNSXQkJPSB7IDB4MTgsIDE2IH0sCisJCVtTQ0ZEUl0JCT0geyAweDFjLCAxNiB9LAorCQlbU0NURkRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDUkZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1NQVFJdCT0geyAweDIwLCAxNiB9LAorCQlbU0NMU1JdCQk9IHsgMHgyNCwgMTYgfSwKKwl9LAorCisJLyoKKwkgKiBDb21tb24gU0gtNChBKSBTQ0lGKEIpIGRlZmluaXRpb25zIGZvciBwb3J0cyB3aXRob3V0IGFuIFNDU1BUUgorCSAqIHJlZ2lzdGVyLgorCSAqLworCVtTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFXSA9IHsKKwkJW1NDU01SXQkJPSB7IDB4MDAsIDE2IH0sCisJCVtTQ0JSUl0JCT0geyAweDA0LCAgOCB9LAorCQlbU0NTQ1JdCQk9IHsgMHgwOCwgMTYgfSwKKwkJW1NDeFREUl0JPSB7IDB4MGMsICA4IH0sCisJCVtTQ3hTUl0JCT0geyAweDEwLCAxNiB9LAorCQlbU0N4UkRSXQk9IHsgMHgxNCwgIDggfSwKKwkJW1NDRkNSXQkJPSB7IDB4MTgsIDE2IH0sCisJCVtTQ0ZEUl0JCT0geyAweDFjLCAxNiB9LAorCQlbU0NURkRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDUkZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1NQVFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NMU1JdCQk9IHsgMHgyNCwgMTYgfSwKKwl9LAorCisJLyoKKwkgKiBDb21tb24gU0gtNChBKSBTQ0lGKEIpIGRlZmluaXRpb25zIGZvciBwb3J0cyB3aXRoIEZJRk8gZGF0YQorCSAqIGNvdW50IHJlZ2lzdGVycy4KKwkgKi8KKwlbU0NJeF9TSDRfU0NJRl9GSUZPREFUQV9SRUdUWVBFXSA9IHsKKwkJW1NDU01SXQkJPSB7IDB4MDAsIDE2IH0sCisJCVtTQ0JSUl0JCT0geyAweDA0LCAgOCB9LAorCQlbU0NTQ1JdCQk9IHsgMHgwOCwgMTYgfSwKKwkJW1NDeFREUl0JPSB7IDB4MGMsICA4IH0sCisJCVtTQ3hTUl0JCT0geyAweDEwLCAxNiB9LAorCQlbU0N4UkRSXQk9IHsgMHgxNCwgIDggfSwKKwkJW1NDRkNSXQkJPSB7IDB4MTgsIDE2IH0sCisJCVtTQ0ZEUl0JCT0geyAweDFjLCAxNiB9LAorCQlbU0NURkRSXQk9IHsgMHgxYywgMTYgfSwJLyogYWxpYXNlZCB0byBTQ0ZEUiAqLworCQlbU0NSRkRSXQk9IHsgMHgyMCwgMTYgfSwKKwkJW1NDU1BUUl0JPSB7IDB4MjQsIDE2IH0sCisJCVtTQ0xTUl0JCT0geyAweDI4LCAxNiB9LAorCX0sCisKKwkvKgorCSAqIFNINzcwNS1zdHlsZSBTQ0lGKEIpIHBvcnRzLCBsYWNraW5nIGJvdGggU0NTUFRSIGFuZCBTQ0xTUgorCSAqIHJlZ2lzdGVycy4KKwkgKi8KKwlbU0NJeF9TSDc3MDVfU0NJRl9SRUdUWVBFXSA9IHsKKwkJW1NDU01SXQkJPSB7IDB4MDAsIDE2IH0sCisJCVtTQ0JSUl0JCT0geyAweDA0LCAgOCB9LAorCQlbU0NTQ1JdCQk9IHsgMHgwOCwgMTYgfSwKKwkJW1NDeFREUl0JPSB7IDB4MjAsICA4IH0sCisJCVtTQ3hTUl0JCT0geyAweDE0LCAxNiB9LAorCQlbU0N4UkRSXQk9IHsgMHgyNCwgIDggfSwKKwkJW1NDRkNSXQkJPSB7IDB4MTgsIDE2IH0sCisJCVtTQ0ZEUl0JCT0geyAweDFjLCAxNiB9LAorCQlbU0NURkRSXQk9IHNjaV9yZWdfaW52YWxpZCwKKwkJW1NDUkZEUl0JPSBzY2lfcmVnX2ludmFsaWQsCisJCVtTQ1NQVFJdCT0gc2NpX3JlZ19pbnZhbGlkLAorCQlbU0NMU1JdCQk9IHNjaV9yZWdfaW52YWxpZCwKKwl9LAorfTsKKworI2RlZmluZSBzY2lfZ2V0cmVnKHVwLCBvZmZzZXQpCQkoc2NpX3JlZ21hcFt0b19zY2lfcG9ydCh1cCktPmNmZy0+cmVndHlwZV0gKyBvZmZzZXQpCisKKy8qCisgKiBUaGUgIm9mZnNldCIgaGVyZSBpcyByYXRoZXIgbWlzbGVhZGluZywgaW4gdGhhdCBpdCByZWZlcnMgdG8gYW4gZW51bQorICogdmFsdWUgcmVsYXRpdmUgdG8gdGhlIHBvcnQgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgZml4ZWQgb2Zmc2V0CisgKiBpdHNlbGYsIHdoaWNoIG5lZWRzIHRvIGJlIG1hbnVhbGx5IHJldHJpZXZlZCBmcm9tIHRoZSBwbGF0Zm9ybSdzCisgKiByZWdpc3RlciBtYXAgZm9yIHRoZSBnaXZlbiBwb3J0LgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHNjaV9zZXJpYWxfaW4oc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgcGxhdF9zY2lfcmVnICpyZWcgPSBzY2lfZ2V0cmVnKHAsIG9mZnNldCk7CisKKwlpZiAocmVnLT5zaXplID09IDgpCisJCXJldHVybiBpb3JlYWQ4KHAtPm1lbWJhc2UgKyAocmVnLT5vZmZzZXQgPDwgcC0+cmVnc2hpZnQpKTsKKwllbHNlIGlmIChyZWctPnNpemUgPT0gMTYpCisJCXJldHVybiBpb3JlYWQxNihwLT5tZW1iYXNlICsgKHJlZy0+b2Zmc2V0IDw8IHAtPnJlZ3NoaWZ0KSk7CisJZWxzZQorCQlXQVJOKDEsICJJbnZhbGlkIHJlZ2lzdGVyIGFjY2Vzc1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NpX3NlcmlhbF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBwbGF0X3NjaV9yZWcgKnJlZyA9IHNjaV9nZXRyZWcocCwgb2Zmc2V0KTsKKworCWlmIChyZWctPnNpemUgPT0gOCkKKwkJaW93cml0ZTgodmFsdWUsIHAtPm1lbWJhc2UgKyAocmVnLT5vZmZzZXQgPDwgcC0+cmVnc2hpZnQpKTsKKwllbHNlIGlmIChyZWctPnNpemUgPT0gMTYpCisJCWlvd3JpdGUxNih2YWx1ZSwgcC0+bWVtYmFzZSArIChyZWctPm9mZnNldCA8PCBwLT5yZWdzaGlmdCkpOworCWVsc2UKKwkJV0FSTigxLCAiSW52YWxpZCByZWdpc3RlciBhY2Nlc3NcbiIpOworfQorCisjZGVmaW5lIHNjaV9pbih1cCwgb2Zmc2V0KQkJKHVwLT5zZXJpYWxfaW4odXAsIG9mZnNldCkpCisjZGVmaW5lIHNjaV9vdXQodXAsIG9mZnNldCwgdmFsdWUpCSh1cC0+c2VyaWFsX291dCh1cCwgb2Zmc2V0LCB2YWx1ZSkpCisKK3N0YXRpYyBpbnQgc2NpX3Byb2JlX3JlZ21hcChzdHJ1Y3QgcGxhdF9zY2lfcG9ydCAqY2ZnKQoreworCXN3aXRjaCAoY2ZnLT50eXBlKSB7CisJY2FzZSBQT1JUX1NDSToKKwkJY2ZnLT5yZWd0eXBlID0gU0NJeF9TQ0lfUkVHVFlQRTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX0lSREE6CisJCWNmZy0+cmVndHlwZSA9IFNDSXhfSVJEQV9SRUdUWVBFOworCQlicmVhazsKKwljYXNlIFBPUlRfU0NJRkE6CisJCWNmZy0+cmVndHlwZSA9IFNDSXhfU0NJRkFfUkVHVFlQRTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX1NDSUZCOgorCQljZmctPnJlZ3R5cGUgPSBTQ0l4X1NDSUZCX1JFR1RZUEU7CisJCWJyZWFrOworCWNhc2UgUE9SVF9TQ0lGOgorCQkvKgorCQkgKiBUaGUgU0gtNCBpcyBhIGJpdCBvZiBhIG1pc25vbWVyIGhlcmUsIGFsdGhvdWdoIHRoYXQncworCQkgKiB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgcG9ydCBsYXlvdXQgb3JpZ2luYXRlZC4gVGhpcworCQkgKiBjb25maWd1cmF0aW9uIChvciBzb21lIHNsaWdodCB2YXJpYXRpb24gdGhlcmVvZikKKwkJICogcmVtYWlucyB0aGUgZG9taW5hbnQgbW9kZWwgZm9yIGFsbCBTQ0lGcy4KKwkJICovCisJCWNmZy0+cmVndHlwZSA9IFNDSXhfU0g0X1NDSUZfUkVHVFlQRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBwcm9iZSByZWdpc3RlciBtYXAgZm9yIGdpdmVuIHBvcnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2NpX3BvcnRfZW5hYmxlKHN0cnVjdCBzY2lfcG9ydCAqc2NpX3BvcnQpCit7CisJaWYgKCFzY2lfcG9ydC0+cG9ydC5kZXYpCisJCXJldHVybjsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc2NpX3BvcnQtPnBvcnQuZGV2KTsKKworCWNsa19lbmFibGUoc2NpX3BvcnQtPmljbGspOworCXNjaV9wb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoc2NpX3BvcnQtPmljbGspOworCWNsa19lbmFibGUoc2NpX3BvcnQtPmZjbGspOworfQorCitzdGF0aWMgdm9pZCBzY2lfcG9ydF9kaXNhYmxlKHN0cnVjdCBzY2lfcG9ydCAqc2NpX3BvcnQpCit7CisJaWYgKCFzY2lfcG9ydC0+cG9ydC5kZXYpCisJCXJldHVybjsKKworCWNsa19kaXNhYmxlKHNjaV9wb3J0LT5mY2xrKTsKKwljbGtfZGlzYWJsZShzY2lfcG9ydC0+aWNsayk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKHNjaV9wb3J0LT5wb3J0LmRldik7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19DT05TT0xFX1BPTEwpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSkKIAogI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKQEAgLTE2NCwyMjUgKzQzNSw3OCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgfHwgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwogCi0jaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCiBzdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKIHsKLQlpbnQgY2ggPSAocG9ydC0+bWFwYmFzZSAtIFNNUjApID4+IDM7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CisJc3RydWN0IHBsYXRfc2NpX3JlZyAqcmVnID0gc2NpX3JlZ21hcFtzLT5jZmctPnJlZ3R5cGVdICsgU0NTUFRSOwogCi0JLyogc2V0IEREUiByZWdzICovCi0JSDgzMDBfR1BJT19ERFIoaDgzMDBfc2NpX3BpbnNbY2hdLnBvcnQsCi0JCSAgICAgICBoODMwMF9zY2lfcGluc1tjaF0ucngsCi0JCSAgICAgICBIODMwMF9HUElPX0lOUFVUKTsKLQlIODMwMF9HUElPX0REUihoODMwMF9zY2lfcGluc1tjaF0ucG9ydCwKLQkJICAgICAgIGg4MzAwX3NjaV9waW5zW2NoXS50eCwKLQkJICAgICAgIEg4MzAwX0dQSU9fT1VUUFVUKTsKLQotCS8qIHR4IG1hcmsgb3V0cHV0Ki8KLQlIODMwMF9TQ0lfRFIoY2gpIHw9IGg4MzAwX3NjaV9waW5zW2NoXS50eDsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQotc3RhdGljIGlubGluZSB2b2lkIHNjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4QTQ0MDAwMDApIHsKLQkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBQ1IpICYgMHhmZmMwLCBQQUNSKTsKLQkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBCQ1IpICYgMHgwZmZmLCBQQkNSKTsKLQl9IGVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhBNDQxMDAwMCkKLQkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBCQ1IpICYgMHhmMDAzLCBQQkNSKTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQotc3RhdGljIGlubGluZSB2b2lkIHNjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQotewotCXVuc2lnbmVkIHNob3J0IGRhdGE7Ci0KLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCS8qIGVuYWJsZSBSVFMvQ1RTICovCi0JCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzAwMDApIHsgLyogU0NJRjAgKi8KLQkJCS8qIENsZWFyIFBUQ1IgYml0IDktMjsgZW5hYmxlIGFsbCBzY2lmIHBpbnMgYnV0IHNjayAqLwotCQkJZGF0YSA9IF9fcmF3X3JlYWR3KFBPUlRfUFRDUik7Ci0JCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweGZjMDMpLCBQT1JUX1BUQ1IpOwotCQl9IGVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDQzODAwMCkgeyAvKiBTQ0lGMSAqLwotCQkJLyogQ2xlYXIgUFZDUiBiaXQgOS0yICovCi0JCQlkYXRhID0gX19yYXdfcmVhZHcoUE9SVF9QVkNSKTsKLQkJCV9fcmF3X3dyaXRldygoZGF0YSAmIDB4ZmMwMyksIFBPUlRfUFZDUik7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0NDMwMDAwKSB7IC8qIFNDSUYwICovCi0JCQkvKiBDbGVhciBQVENSIGJpdCA1LTI7IGVuYWJsZSBvbmx5IHR4IGFuZCByeCAgKi8KLQkJCWRhdGEgPSBfX3Jhd19yZWFkdyhQT1JUX1BUQ1IpOwotCQkJX19yYXdfd3JpdGV3KChkYXRhICYgMHhmZmMzKSwgUE9SVF9QVENSKTsKLQkJfSBlbHNlIGlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQ0MzgwMDApIHsgLyogU0NJRjEgKi8KLQkJCS8qIENsZWFyIFBWQ1IgYml0IDUtMiAqLwotCQkJZGF0YSA9IF9fcmF3X3JlYWR3KFBPUlRfUFZDUik7Ci0JCQlfX3Jhd193cml0ZXcoKGRhdGEgJiAweGZmYzMpLCBQT1JUX1BWQ1IpOwotCQl9CisJLyoKKwkgKiBVc2UgcG9ydC1zcGVjaWZpYyBoYW5kbGVyIGlmIHByb3ZpZGVkLgorCSAqLworCWlmIChzLT5jZmctPm9wcyAmJiBzLT5jZmctPm9wcy0+aW5pdF9waW5zKSB7CisJCXMtPmNmZy0+b3BzLT5pbml0X3BpbnMocG9ydCwgY2ZsYWcpOworCQlyZXR1cm47CiAJfQotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKLS8qIEZvciBTSDc3MDUsIFNINzcwNiwgU0g3NzA3LCBTSDc3MDksIFNINzcwOUEsIFNINzcyOSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQotewotCXVuc2lnbmVkIHNob3J0IGRhdGE7CiAKLQkvKiBXZSBuZWVkIHRvIHNldCBTQ1BDUiB0byBlbmFibGUgUlRTL0NUUyAqLwotCWRhdGEgPSBfX3Jhd19yZWFkdyhTQ1BDUik7Ci0JLyogQ2xlYXIgb3V0IFNDUDdNRDEsMCwgU0NQNk1EMSwwLCBTQ1A0TUQxLDAqLwotCV9fcmF3X3dyaXRldyhkYXRhICYgMHgwZmNmLCBTQ1BDUik7CisJLyoKKwkgKiBGb3IgdGhlIGdlbmVyaWMgcGF0aCBTQ1NQVFIgaXMgbmVjZXNzYXJ5LiBCYWlsIG91dCBpZiB0aGF0J3MKKwkgKiB1bmF2YWlsYWJsZSwgdG9vLgorCSAqLworCWlmICghcmVnLT5zaXplKQorCQlyZXR1cm47CiAKLQlpZiAoIShjZmxhZyAmIENSVFNDVFMpKSB7Ci0JCS8qIFdlIG5lZWQgdG8gc2V0IFNDUENSIHRvIGVuYWJsZSBSVFMvQ1RTICovCi0JCWRhdGEgPSBfX3Jhd19yZWFkdyhTQ1BDUik7Ci0JCS8qIENsZWFyIG91dCBTQ1A3TUQxLDAsIFNDUDRNRDEsMCwKLQkJICAgU2V0IFNDUDZNRDEsMCA9IHswMX0gKG91dHB1dCkgICovCi0JCV9fcmF3X3dyaXRldygoZGF0YSAmIDB4MGZjZikgfCAweDEwMDAsIFNDUENSKTsKLQotCQlkYXRhID0gX19yYXdfcmVhZGIoU0NQRFIpOwotCQkvKiBTZXQgL1JUUzIgKGJpdDYpID0gMCAqLwotCQlfX3Jhd193cml0ZWIoZGF0YSAmIDB4YmYsIFNDUERSKTsKLQl9Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCi17Ci0JdW5zaWduZWQgc2hvcnQgZGF0YTsKLQotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApIHsKLQkJZGF0YSA9IF9fcmF3X3JlYWR3KFBTQ1IpOwotCQlkYXRhICY9IH4weDAzY2Y7Ci0JCWlmICghKGNmbGFnICYgQ1JUU0NUUykpCi0JCQlkYXRhIHw9IDB4MDM0MDsKLQotCQlfX3Jhd193cml0ZXcoZGF0YSwgUFNDUik7Ci0JfQotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCi17CiAJaWYgKCEoY2ZsYWcgJiBDUlRTQ1RTKSkKLQkJX19yYXdfd3JpdGV3KDB4MDA4MCwgU0NTUFRSMCk7IC8qIFNldCBSVFMgPSAxICovCisJCXNjaV9vdXQocG9ydCwgU0NTUFRSLCAweDAwODApOyAvKiBTZXQgUlRTID0gMSAqLwogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIGlubGluZSB2b2lkIHNjaV9pbml0X3BpbnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQotewotCWlmICghKGNmbGFnICYgQ1JUU0NUUykpCi0JCV9fcmF3X3dyaXRldygweDAwODAsIFNDU1BUUjIpOyAvKiBTZXQgUlRTID0gMSAqLwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfaW5pdF9waW5zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZykKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKLXN0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmOwotfQotCi1zdGF0aWMgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIHNjaWZfdHhmaWxsKHBvcnQpOwotfQotCi1zdGF0aWMgaW50IHNjaWZfcnhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHhmZjsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKLXN0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwIHx8Ci0JICAgIHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKLQkJLyogU0NJRjAvMSovCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4ZmY7Ci0JZWxzZQotCQkvKiBTQ0lGMiAqLwotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4OwotfQotCi1zdGF0aWMgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCB8fAotCSAgICBwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApCi0JCS8qIFNDSUYwLzEqLwotCQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gc2NpZl90eGZpbGwocG9ydCk7Ci0JZWxzZQotCQkvKiBTQ0lGMiAqLwotCQlyZXR1cm4gU0NJRjJfVFhST09NX01BWCAtIHNjaWZfdHhmaWxsKHBvcnQpOwotfQotCi1zdGF0aWMgaW50IHNjaWZfcnhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApIHx8Ci0JICAgIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApKSB7Ci0JCS8qIFNDSUYwLzEqLwotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDUkZEUikgJiAweGZmOwotCX0gZWxzZSB7Ci0JCS8qIFNDSUYyICovCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpICYgU0NJRjJfUkZEQ19NQVNLOwotCX0KLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzcyKQotc3RhdGljIGludCBzY2lmX3R4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpID4+IDg7Ci0JZWxzZQotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDVEZEUik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gcG9ydC0+Zmlmb3NpemUgLSBzY2lmX3R4ZmlsbChwb3J0KTsKLX0KLQotc3RhdGljIGludCBzY2lmX3J4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpCi0JCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpICYgU0NJRl9SRkRDX01BU0s7Ci0JZWxzZQotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDUkZEUik7Ci19Ci0jZWxzZQotc3RhdGljIGludCBzY2lmX3R4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpID4+IDg7Ci19Ci0KLXN0YXRpYyBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gc2NpZl90eGZpbGwocG9ydCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NpZl9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSAmIFNDSUZfUkZEQ19NQVNLOwotfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2NpX3R4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogeworCXN0cnVjdCBwbGF0X3NjaV9yZWcgKnJlZzsKKworCXJlZyA9IHNjaV9nZXRyZWcocG9ydCwgU0NURkRSKTsKKwlpZiAocmVnLT5zaXplKQorCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmOworCisJcmVnID0gc2NpX2dldHJlZyhwb3J0LCBTQ0ZEUik7CisJaWYgKHJlZy0+c2l6ZSkKKwkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ0ZEUikgPj4gODsKKwogCXJldHVybiAhKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBTQ0lfVERSRSk7CiB9CiAKIHN0YXRpYyBpbnQgc2NpX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiAhc2NpX3R4ZmlsbChwb3J0KTsKKwlyZXR1cm4gcG9ydC0+Zmlmb3NpemUgLSBzY2lfdHhmaWxsKHBvcnQpOwogfQogCiBzdGF0aWMgaW50IHNjaV9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgcGxhdF9zY2lfcmVnICpyZWc7CisKKwlyZWcgPSBzY2lfZ2V0cmVnKHBvcnQsIFNDUkZEUik7CisJaWYgKHJlZy0+c2l6ZSkKKwkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHhmZjsKKworCXJlZyA9IHNjaV9nZXRyZWcocG9ydCwgU0NGRFIpOworCWlmIChyZWctPnNpemUpCisJCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpICYgKChwb3J0LT5maWZvc2l6ZSA8PCAxKSAtIDEpOworCiAJcmV0dXJuIChzY2lfaW4ocG9ydCwgU0N4U1IpICYgU0N4U1JfUkR4Rihwb3J0KSkgIT0gMDsKIH0KIAorLyoKKyAqIFNDSSBoZWxwZXIgZm9yIGNoZWNraW5nIHRoZSBzdGF0ZSBvZiB0aGUgbXV4ZWQgcG9ydC9SWEQgcGlucy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOworCisJaWYgKHMtPmNmZy0+cG9ydF9yZWcgPD0gMCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gISFfX3Jhd19yZWFkYihzLT5jZmctPnBvcnRfcmVnKTsKK30KKwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqCiAgKiAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IHJlbGF0ZWQgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICoKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KQEAgLTQwNiwxMCArNTMwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJKQotCQljb3VudCA9IHNjaV90eHJvb20ocG9ydCk7Ci0JZWxzZQotCQljb3VudCA9IHNjaWZfdHhyb29tKHBvcnQpOworCWNvdW50ID0gc2NpX3R4cm9vbShwb3J0KTsKIAogCWRvIHsKIAkJdW5zaWduZWQgY2hhciBjOwpAQCAtNDY0LDEzICs1ODUsOCBAQAogCQlyZXR1cm47CiAKIAl3aGlsZSAoMSkgewotCQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSSkKLQkJCWNvdW50ID0gc2NpX3J4ZmlsbChwb3J0KTsKLQkJZWxzZQotCQkJY291bnQgPSBzY2lmX3J4ZmlsbChwb3J0KTsKLQogCQkvKiBEb24ndCBjb3B5IG1vcmUgYnl0ZXMgdGhhbiB0aGVyZSBpcyByb29tIGZvciBpbiB0aGUgYnVmZmVyICovCi0JCWNvdW50ID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjb3VudCk7CisJCWNvdW50ID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzY2lfcnhmaWxsKHBvcnQpKTsKIAogCQkvKiBJZiBmb3IgYW55IHJlYXNvbiB3ZSBjYW4ndCBjb3B5IG1vcmUgZGF0YSwgd2UncmUgZG9uZSEgKi8KIAkJaWYgKGNvdW50ID09IDApCkBAIC01NjEsOCArNjc3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQgPSAoc3RydWN0IHNjaV9wb3J0ICopZGF0YTsKIAotCWlmIChwb3J0LT5lbmFibGUpCi0JCXBvcnQtPmVuYWJsZSgmcG9ydC0+cG9ydCk7CisJc2NpX3BvcnRfZW5hYmxlKHBvcnQpOwogCiAJaWYgKHNjaV9yeGRfaW4oJnBvcnQtPnBvcnQpID09IDApIHsKIAkJcG9ydC0+YnJlYWtfZmxhZyA9IDE7CkBAIC01NzQsOCArNjg5LDcgQEAKIAl9IGVsc2UKIAkJcG9ydC0+YnJlYWtfZmxhZyA9IDA7CiAKLQlpZiAocG9ydC0+ZGlzYWJsZSkKLQkJcG9ydC0+ZGlzYWJsZSgmcG9ydC0+cG9ydCk7CisJc2NpX3BvcnRfZGlzYWJsZShwb3J0KTsKIH0KIAogc3RhdGljIGludCBzY2lfaGFuZGxlX2Vycm9ycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtNTgzLDEzICs2OTcsMTkgQEAKIAlpbnQgY29waWVkID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CiAKLQlpZiAoc3RhdHVzICYgU0N4U1JfT1JFUihwb3J0KSkgewotCQkvKiBvdmVycnVuIGVycm9yICovCi0JCWlmICh0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKSkKLQkJCWNvcGllZCsrOworCS8qCisJICogSGFuZGxlIG92ZXJydW5zLCBpZiBzdXBwb3J0ZWQuCisJICovCisJaWYgKHMtPmNmZy0+b3ZlcnJ1bl9iaXQgIT0gU0NJeF9OT1RfU1VQUE9SVEVEKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBzLT5jZmctPm92ZXJydW5fYml0KSkgeworCQkJLyogb3ZlcnJ1biBlcnJvciAqLworCQkJaWYgKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pKQorCQkJCWNvcGllZCsrOwogCi0JCWRldl9ub3RpY2UocG9ydC0+ZGV2LCAib3ZlcnJ1biBlcnJvciIpOworCQkJZGV2X25vdGljZShwb3J0LT5kZXYsICJvdmVycnVuIGVycm9yIik7CisJCX0KIAl9CiAKIAlpZiAoc3RhdHVzICYgU0N4U1JfRkVSKHBvcnQpKSB7CkBAIC02MzcsMTIgKzc1NywxNSBAQAogc3RhdGljIGludCBzY2lfaGFuZGxlX2ZpZm9fb3ZlcnJ1bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CisJc3RydWN0IHBsYXRfc2NpX3JlZyAqcmVnOwogCWludCBjb3BpZWQgPSAwOwogCi0JaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF9TQ0lGKQorCXJlZyA9IHNjaV9nZXRyZWcocG9ydCwgU0NMU1IpOworCWlmICghcmVnLT5zaXplKQogCQlyZXR1cm4gMDsKIAotCWlmICgoc2NpX2luKHBvcnQsIFNDTFNSKSAmIFNDSUZfT1JFUikgIT0gMCkgeworCWlmICgoc2NpX2luKHBvcnQsIFNDTFNSKSAmICgxIDw8IHMtPmNmZy0+b3ZlcnJ1bl9iaXQpKSkgewogCQlzY2lfb3V0KHBvcnQsIFNDTFNSLCAwKTsKIAogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKQEAgLTg0MCw3NCArOTYzLDEwMiBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyB2b2lkIHNjaV9jbGtfZW5hYmxlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IHNjaV9wb3J0ICpzY2lfcG9ydCA9IHRvX3NjaV9wb3J0KHBvcnQpOworc3RhdGljIHN0cnVjdCBzY2lfaXJxX2Rlc2MgeworCWNvbnN0IGNoYXIJKmRlc2M7CisJaXJxX2hhbmRsZXJfdAloYW5kbGVyOworfSBzY2lfaXJxX2Rlc2NbXSA9IHsKKwkvKgorCSAqIFNwbGl0IG91dCBoYW5kbGVycywgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKi8KKwlbU0NJeF9FUklfSVJRXSA9IHsKKwkJLmRlc2MgPSAicnggZXJyIiwKKwkJLmhhbmRsZXIgPSBzY2lfZXJfaW50ZXJydXB0LAorCX0sCiAKLQlwbV9ydW50aW1lX2dldF9zeW5jKHBvcnQtPmRldik7CisJW1NDSXhfUlhJX0lSUV0gPSB7CisJCS5kZXNjID0gInJ4IGZ1bGwiLAorCQkuaGFuZGxlciA9IHNjaV9yeF9pbnRlcnJ1cHQsCisJfSwKIAotCWNsa19lbmFibGUoc2NpX3BvcnQtPmljbGspOwotCXNjaV9wb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoc2NpX3BvcnQtPmljbGspOwotCWNsa19lbmFibGUoc2NpX3BvcnQtPmZjbGspOwotfQorCVtTQ0l4X1RYSV9JUlFdID0geworCQkuZGVzYyA9ICJ0eCBlbXB0eSIsCisJCS5oYW5kbGVyID0gc2NpX3R4X2ludGVycnVwdCwKKwl9LAogCi1zdGF0aWMgdm9pZCBzY2lfY2xrX2Rpc2FibGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaV9wb3J0ID0gdG9fc2NpX3BvcnQocG9ydCk7CisJW1NDSXhfQlJJX0lSUV0gPSB7CisJCS5kZXNjID0gImJyZWFrIiwKKwkJLmhhbmRsZXIgPSBzY2lfYnJfaW50ZXJydXB0LAorCX0sCiAKLQljbGtfZGlzYWJsZShzY2lfcG9ydC0+ZmNsayk7Ci0JY2xrX2Rpc2FibGUoc2NpX3BvcnQtPmljbGspOwotCi0JcG1fcnVudGltZV9wdXRfc3luYyhwb3J0LT5kZXYpOwotfQorCS8qCisJICogU3BlY2lhbCBtdXhlZCBoYW5kbGVyLgorCSAqLworCVtTQ0l4X01VWF9JUlFdID0geworCQkuZGVzYyA9ICJtdXgiLAorCQkuaGFuZGxlciA9IHNjaV9tcHhlZF9pbnRlcnJ1cHQsCisJfSwKK307CiAKIHN0YXRpYyBpbnQgc2NpX3JlcXVlc3RfaXJxKHN0cnVjdCBzY2lfcG9ydCAqcG9ydCkKIHsKLQlpbnQgaTsKLQlpcnFyZXR1cm5fdCAoKmhhbmRsZXJzWzRdKShpbnQgaXJxLCB2b2lkICpwdHIpID0gewotCQlzY2lfZXJfaW50ZXJydXB0LCBzY2lfcnhfaW50ZXJydXB0LCBzY2lfdHhfaW50ZXJydXB0LAotCQlzY2lfYnJfaW50ZXJydXB0LAotCX07Ci0JY29uc3QgY2hhciAqZGVzY1tdID0geyAiU0NJIFJlY2VpdmUgRXJyb3IiLCAiU0NJIFJlY2VpdmUgRGF0YSBGdWxsIiwKLQkJCSAgICAgICAiU0NJIFRyYW5zbWl0IERhdGEgRW1wdHkiLCAiU0NJIEJyZWFrIiB9OworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwID0gJnBvcnQtPnBvcnQ7CisJaW50IGksIGosIHJldCA9IDA7CiAKLQlpZiAocG9ydC0+Y2ZnLT5pcnFzWzBdID09IHBvcnQtPmNmZy0+aXJxc1sxXSkgewotCQlpZiAodW5saWtlbHkoIXBvcnQtPmNmZy0+aXJxc1swXSkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKKwlmb3IgKGkgPSBqID0gMDsgaSA8IFNDSXhfTlJfSVJRUzsgaSsrLCBqKyspIHsKKwkJc3RydWN0IHNjaV9pcnFfZGVzYyAqZGVzYzsKKwkJdW5zaWduZWQgaW50IGlycTsKIAotCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+Y2ZnLT5pcnFzWzBdLCBzY2lfbXB4ZWRfaW50ZXJydXB0LAotCQkJCUlSUUZfRElTQUJMRUQsICJzY2kiLCBwb3J0KSkgewotCQkJZGV2X2Vycihwb3J0LT5wb3J0LmRldiwgIkNhbid0IGFsbG9jYXRlIElSUVxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKFNDSXhfSVJRX0lTX01VWEVEKHBvcnQpKSB7CisJCQlpID0gU0NJeF9NVVhfSVJROworCQkJaXJxID0gdXAtPmlycTsKKwkJfSBlbHNlCisJCQlpcnEgPSBwb3J0LT5jZmctPmlycXNbaV07CisKKwkJZGVzYyA9IHNjaV9pcnFfZGVzYyArIGk7CisJCXBvcnQtPmlycXN0cltqXSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXM6JXMiLAorCQkJCQkgICAgZGV2X25hbWUodXAtPmRldiksIGRlc2MtPmRlc2MpOworCQlpZiAoIXBvcnQtPmlycXN0cltqXSkgeworCQkJZGV2X2Vycih1cC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzIElSUSBzdHJpbmdcbiIsCisJCQkJZGVzYy0+ZGVzYyk7CisJCQlnb3RvIG91dF9ub21lbTsKIAkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhhbmRsZXJzKTsgaSsrKSB7Ci0JCQlpZiAodW5saWtlbHkoIXBvcnQtPmNmZy0+aXJxc1tpXSkpCi0JCQkJY29udGludWU7CiAKLQkJCWlmIChyZXF1ZXN0X2lycShwb3J0LT5jZmctPmlycXNbaV0sIGhhbmRsZXJzW2ldLAotCQkJCQlJUlFGX0RJU0FCTEVELCBkZXNjW2ldLCBwb3J0KSkgewotCQkJCWRldl9lcnIocG9ydC0+cG9ydC5kZXYsICJDYW4ndCBhbGxvY2F0ZSBJUlFcbiIpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQorCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRlc2MtPmhhbmRsZXIsIHVwLT5pcnFmbGFncywKKwkJCQkgIHBvcnQtPmlycXN0cltqXSwgcG9ydCk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKHVwLT5kZXYsICJDYW4ndCBhbGxvY2F0ZSAlcyBJUlFcbiIsIGRlc2MtPmRlc2MpOworCQkJZ290byBvdXRfbm9pcnE7CiAJCX0KIAl9CiAKIAlyZXR1cm4gMDsKKworb3V0X25vaXJxOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZnJlZV9pcnEocG9ydC0+Y2ZnLT5pcnFzW2ldLCBwb3J0KTsKKworb3V0X25vbWVtOgorCXdoaWxlICgtLWogPj0gMCkKKwkJa2ZyZWUocG9ydC0+aXJxc3RyW2pdKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9mcmVlX2lycShzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQpCiB7CiAJaW50IGk7CiAKLQlpZiAocG9ydC0+Y2ZnLT5pcnFzWzBdID09IHBvcnQtPmNmZy0+aXJxc1sxXSkKLQkJZnJlZV9pcnEocG9ydC0+Y2ZnLT5pcnFzWzBdLCBwb3J0KTsKLQllbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9ydC0+Y2ZnLT5pcnFzKTsgaSsrKSB7Ci0JCQlpZiAoIXBvcnQtPmNmZy0+aXJxc1tpXSkKLQkJCQljb250aW51ZTsKKwkvKgorCSAqIEludGVudGlvbmFsbHkgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBpdGVyYXRlIG92ZXIgdGhlIG11eGVkCisJICogSVJRIGZpcnN0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBTQ0l4X05SX0lSUVM7IGkrKykgeworCQlmcmVlX2lycShwb3J0LT5jZmctPmlycXNbaV0sIHBvcnQpOworCQlrZnJlZShwb3J0LT5pcnFzdHJbaV0pOwogCi0JCQlmcmVlX2lycShwb3J0LT5jZmctPmlycXNbaV0sIHBvcnQpOworCQlpZiAoU0NJeF9JUlFfSVNfTVVYRUQocG9ydCkpIHsKKwkJCS8qIElmIHRoZXJlJ3Mgb25seSBvbmUgSVJRLCB3ZSdyZSBkb25lLiAqLworCQkJcmV0dXJuOwogCQl9CiAJfQogfQpAQCAtOTE1LDcgKzEwNjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzY2lfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwotCXVuc2lnbmVkIHNob3J0IGluX3R4X2ZpZm8gPSBzY2lmX3R4ZmlsbChwb3J0KTsKKwl1bnNpZ25lZCBzaG9ydCBpbl90eF9maWZvID0gc2NpX3R4ZmlsbChwb3J0KTsKIAogCXJldHVybiAoc3RhdHVzICYgU0N4U1JfVEVORChwb3J0KSkgJiYgIWluX3R4X2ZpZm8gPyBUSU9DU0VSX1RFTVQgOiAwOwogfQpAQCAtOTMyLDcgKzEwODMsNyBAQAogCS8qIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBnZXR0aW5nIHNpZ25hbHMgb2Y6IERUUiwgRENELCBEU1IsIFJJLAogCSAgIGFuZCBDVFMvUlRTICovCiAKLQlyZXR1cm4gVElPQ01fRFRSIHwgVElPQ01fUlRTIHwgVElPQ01fRFNSOworCXJldHVybiBUSU9DTV9EVFIgfCBUSU9DTV9SVFMgfCBUSU9DTV9DVFMgfCBUSU9DTV9EU1I7CiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKQEAgLTE0MzgsOCArMTU4OSw3IEBACiAKIAlkZXZfZGJnKHBvcnQtPmRldiwgIiVzKCVkKVxuIiwgX19mdW5jX18sIHBvcnQtPmxpbmUpOwogCi0JaWYgKHMtPmVuYWJsZSkKLQkJcy0+ZW5hYmxlKHBvcnQpOworCXNjaV9wb3J0X2VuYWJsZShzKTsKIAogCXJldCA9IHNjaV9yZXF1ZXN0X2lycShzKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCkBAIC0xNDY1LDggKzE2MTUsNyBAQAogCXNjaV9mcmVlX2RtYShwb3J0KTsKIAlzY2lfZnJlZV9pcnEocyk7CiAKLQlpZiAocy0+ZGlzYWJsZSkKLQkJcy0+ZGlzYWJsZShwb3J0KTsKKwlzY2lfcG9ydF9kaXNhYmxlKHMpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNjaV9zY2Jycl9jYWxjKHVuc2lnbmVkIGludCBhbGdvX2lkLCB1bnNpZ25lZCBpbnQgYnBzLApAQCAtMTQ5MSwxMSArMTY0MCwyNSBAQAogCXJldHVybiAoKGZyZXEgKyAxNiAqIGJwcykgLyAoMzIgKiBicHMpIC0gMSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNjaV9yZXNldChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlkbyB7CisJCXN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7CisJfSB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URU5EKHBvcnQpKSk7CisKKwlzY2lfb3V0KHBvcnQsIFNDU0NSLCAweDAwKTsJLyogVEU9MCwgUkU9MCwgQ0tFMT0wICovCisKKwlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX1NDSSkKKwkJc2NpX291dChwb3J0LCBTQ0ZDUiwgU0NGQ1JfUkZSU1QgfCBTQ0ZDUl9URlJTVCk7Cit9CisKIHN0YXRpYyB2b2lkIHNjaV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCiAJCQkgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7Ci0JdW5zaWduZWQgaW50IHN0YXR1cywgYmF1ZCwgc21yX3ZhbCwgbWF4X2JhdWQ7CisJdW5zaWduZWQgaW50IGJhdWQsIHNtcl92YWwsIG1heF9iYXVkOwogCWludCB0ID0gLTE7CiAJdTE2IHNjZmNyID0gMDsKIApAQCAtMTUxMywxNyArMTY3Niw5IEBACiAJaWYgKGxpa2VseShiYXVkICYmIHBvcnQtPnVhcnRjbGspKQogCQl0ID0gc2NpX3NjYnJyX2NhbGMocy0+Y2ZnLT5zY2Jycl9hbGdvX2lkLCBiYXVkLCBwb3J0LT51YXJ0Y2xrKTsKIAotCWlmIChzLT5lbmFibGUpCi0JCXMtPmVuYWJsZShwb3J0KTsKKwlzY2lfcG9ydF9lbmFibGUocyk7CiAKLQlkbyB7Ci0JCXN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7Ci0JfSB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URU5EKHBvcnQpKSk7Ci0KLQlzY2lfb3V0KHBvcnQsIFNDU0NSLCAweDAwKTsJLyogVEU9MCwgUkU9MCwgQ0tFMT0wICovCi0KLQlpZiAocG9ydC0+dHlwZSAhPSBQT1JUX1NDSSkKLQkJc2NpX291dChwb3J0LCBTQ0ZDUiwgc2NmY3IgfCBTQ0ZDUl9SRlJTVCB8IFNDRkNSX1RGUlNUKTsKKwlzY2lfcmVzZXQocG9ydCk7CiAKIAlzbXJfdmFsID0gc2NpX2luKHBvcnQsIFNDU01SKSAmIDM7CiAKQEAgLTE1ODQsOCArMTczOSw3IEBACiAJaWYgKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JFQUQpICE9IDApCiAJCXNjaV9zdGFydF9yeChwb3J0KTsKIAotCWlmIChzLT5kaXNhYmxlKQotCQlzLT5kaXNhYmxlKHBvcnQpOworCXNjaV9wb3J0X2Rpc2FibGUocyk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzY2lfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMTcyNiw2ICsxODgwLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBwbGF0X3NjaV9wb3J0ICpwKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2NpX3BvcnQtPnBvcnQ7CisJaW50IHJldDsKIAogCXBvcnQtPm9wcwk9ICZzY2lfdWFydF9vcHM7CiAJcG9ydC0+aW90eXBlCT0gVVBJT19NRU07CkBAIC0xNzQ2LDYgKzE5MDEsMTIgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKHAtPnJlZ3R5cGUgPT0gU0NJeF9QUk9CRV9SRUdUWVBFKSB7CisJCXJldCA9IHNjaV9wcm9iZV9yZWdtYXAocCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlpZiAoZGV2KSB7CiAJCXNjaV9wb3J0LT5pY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJzY2lfaWNrIik7CiAJCWlmIChJU19FUlIoc2NpX3BvcnQtPmljbGspKSB7CkBAIC0xNzY0LDEwICsxOTI1LDkgQEAKIAkJaWYgKElTX0VSUihzY2lfcG9ydC0+ZmNsaykpCiAJCQlzY2lfcG9ydC0+ZmNsayA9IE5VTEw7CiAKLQkJc2NpX3BvcnQtPmVuYWJsZSA9IHNjaV9jbGtfZW5hYmxlOwotCQlzY2lfcG9ydC0+ZGlzYWJsZSA9IHNjaV9jbGtfZGlzYWJsZTsKIAkJcG9ydC0+ZGV2ID0gJmRldi0+ZGV2OwogCisJCXBtX3J1bnRpbWVfaXJxX3NhZmUoJmRldi0+ZGV2KTsKIAkJcG1fcnVudGltZV9lbmFibGUoJmRldi0+ZGV2KTsKIAl9CiAKQEAgLTE3NzUsMjAgKzE5MzUsNTEgQEAKIAlzY2lfcG9ydC0+YnJlYWtfdGltZXIuZnVuY3Rpb24gPSBzY2lfYnJlYWtfdGltZXI7CiAJaW5pdF90aW1lcigmc2NpX3BvcnQtPmJyZWFrX3RpbWVyKTsKIAorCS8qCisJICogRXN0YWJsaXNoIHNvbWUgc2Vuc2libGUgZGVmYXVsdHMgZm9yIHRoZSBlcnJvciBkZXRlY3Rpb24uCisJICovCisJaWYgKCFwLT5lcnJvcl9tYXNrKQorCQlwLT5lcnJvcl9tYXNrID0gKHAtPnR5cGUgPT0gUE9SVF9TQ0kpID8KKwkJCVNDSV9ERUZBVUxUX0VSUk9SX01BU0sgOiBTQ0lGX0RFRkFVTFRfRVJST1JfTUFTSzsKKworCS8qCisJICogRXN0YWJsaXNoIHNlbnNpYmxlIGRlZmF1bHRzIGZvciB0aGUgb3ZlcnJ1biBkZXRlY3Rpb24sIHVubGVzcworCSAqIHRoZSBwYXJ0IGhhcyBleHBsaWNpdGx5IGRpc2FibGVkIHN1cHBvcnQgZm9yIGl0LgorCSAqLworCWlmIChwLT5vdmVycnVuX2JpdCAhPSBTQ0l4X05PVF9TVVBQT1JURUQpIHsKKwkJaWYgKHAtPnR5cGUgPT0gUE9SVF9TQ0kpCisJCQlwLT5vdmVycnVuX2JpdCA9IDU7CisJCWVsc2UgaWYgKHAtPnNjYnJyX2FsZ29faWQgPT0gU0NCUlJfQUxHT180KQorCQkJcC0+b3ZlcnJ1bl9iaXQgPSA5OworCQllbHNlCisJCQlwLT5vdmVycnVuX2JpdCA9IDA7CisKKwkJLyoKKwkJICogTWFrZSB0aGUgZXJyb3IgbWFzayBpbmNsdXNpdmUgb2Ygb3ZlcnJ1biBkZXRlY3Rpb24sIGlmCisJCSAqIHN1cHBvcnRlZC4KKwkJICovCisJCXAtPmVycm9yX21hc2sgfD0gKDEgPDwgcC0+b3ZlcnJ1bl9iaXQpOworCX0KKwogCXNjaV9wb3J0LT5jZmcJCT0gcDsKIAogCXBvcnQtPm1hcGJhc2UJCT0gcC0+bWFwYmFzZTsKIAlwb3J0LT50eXBlCQk9IHAtPnR5cGU7CiAJcG9ydC0+ZmxhZ3MJCT0gcC0+ZmxhZ3M7CisJcG9ydC0+cmVnc2hpZnQJCT0gcC0+cmVnc2hpZnQ7CiAKIAkvKgotCSAqIFRoZSBVQVJUIHBvcnQgbmVlZHMgYW4gSVJRIHZhbHVlLCBzbyB3ZSBwZWcgdGhpcyB0byB0aGUgVFggSVJRCisJICogVGhlIFVBUlQgcG9ydCBuZWVkcyBhbiBJUlEgdmFsdWUsIHNvIHdlIHBlZyB0aGlzIHRvIHRoZSBSWCBJUlEKIAkgKiBmb3IgdGhlIG11bHRpLUlSUSBwb3J0cywgd2hpY2ggaXMgd2hlcmUgd2UgYXJlIHByaW1hcmlseQogCSAqIGNvbmNlcm5lZCB3aXRoIHRoZSBzaHV0ZG93biBwYXRoIHN5bmNocm9uaXphdGlvbi4KIAkgKgogCSAqIEZvciB0aGUgbXV4ZWQgY2FzZSB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4KIAkgKi8KIAlwb3J0LT5pcnEJCT0gcC0+aXJxc1tTQ0l4X1JYSV9JUlFdOworCXBvcnQtPmlycWZsYWdzCQk9IElSUUZfRElTQUJMRUQ7CisKKwlwb3J0LT5zZXJpYWxfaW4JCT0gc2NpX3NlcmlhbF9pbjsKKwlwb3J0LT5zZXJpYWxfb3V0CT0gc2NpX3NlcmlhbF9vdXQ7CiAKIAlpZiAocC0+ZG1hX2RldikKIAkJZGV2X2RiZyhwb3J0LT5kZXYsICJETUEgZGV2aWNlICVwLCB0eCAlZCwgcnggJWRcbiIsCkBAIC0xODE0LDggKzIwMDUsNyBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2NpX3BvcnQtPnBvcnQ7CiAJdW5zaWduZWQgc2hvcnQgYml0czsKIAotCWlmIChzY2lfcG9ydC0+ZW5hYmxlKQotCQlzY2lfcG9ydC0+ZW5hYmxlKHBvcnQpOworCXNjaV9wb3J0X2VuYWJsZShzY2lfcG9ydCk7CiAKIAl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIHNlcmlhbF9jb25zb2xlX3B1dGNoYXIpOwogCkBAIC0xODI0LDggKzIwMTQsNyBAQAogCXdoaWxlICgoc2NpX2luKHBvcnQsIFNDeFNSKSAmIGJpdHMpICE9IGJpdHMpCiAJCWNwdV9yZWxheCgpOwogCi0JaWYgKHNjaV9wb3J0LT5kaXNhYmxlKQotCQlzY2lfcG9ydC0+ZGlzYWJsZShwb3J0KTsKKwlzY2lfcG9ydF9kaXNhYmxlKHNjaV9wb3J0KTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc2VyaWFsX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQpAQCAtMTg1NywyMCArMjA0NiwxNCBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoc2NpX3BvcnQtPmVuYWJsZSkKLQkJc2NpX3BvcnQtPmVuYWJsZShwb3J0KTsKKwlzY2lfcG9ydF9lbmFibGUoc2NpX3BvcnQpOwogCiAJaWYgKG9wdGlvbnMpCiAJCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKIAotCXJldCA9IHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Ci0jaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCi0JLyogZGlzYWJsZSByeCBpbnRlcnJ1cHQgKi8KLQlpZiAocmV0ID09IDApCi0JCXNjaV9zdG9wX3J4KHBvcnQpOwotI2VuZGlmCi0JLyogVE9ETzogZGlzYWJsZSBjbG9jayAqLwotCXJldHVybiByZXQ7CisJc2NpX3BvcnRfZGlzYWJsZShzY2lfcG9ydCk7CisKKwlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25zb2xlIHNlcmlhbF9jb25zb2xlID0gewpAQCAtMTkxMiw2ICsyMDk1LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgdWFydF9jb25zb2xlKHBvcnQpCSgocG9ydCktPmNvbnMtPmluZGV4ID09IChwb3J0KS0+bGluZSkKKworc3RhdGljIGludCBzY2lfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaV9wb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzY2lfcG9ydC0+cG9ydDsKKworCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwkJc2NpX3BvcnQtPnNhdmVkX3NtciA9IHNjaV9pbihwb3J0LCBTQ1NNUik7CisJCXNjaV9wb3J0LT5zYXZlZF9icnIgPSBzY2lfaW4ocG9ydCwgU0NCUlIpOworCQlzY2lfcG9ydC0+c2F2ZWRfZmNyID0gc2NpX2luKHBvcnQsIFNDRkNSKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NpX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaV9wb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzY2lfcG9ydC0+cG9ydDsKKworCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwkJc2NpX3Jlc2V0KHBvcnQpOworCQlzY2lfb3V0KHBvcnQsIFNDU01SLCBzY2lfcG9ydC0+c2F2ZWRfc21yKTsKKwkJc2NpX291dChwb3J0LCBTQ0JSUiwgc2NpX3BvcnQtPnNhdmVkX2Jycik7CisJCXNjaV9vdXQocG9ydCwgU0NGQ1IsIHNjaV9wb3J0LT5zYXZlZF9mY3IpOworCQlzY2lfb3V0KHBvcnQsIFNDU0NSLCBzY2lfcG9ydC0+Y2ZnLT5zY3Njcik7CisJfQorCXJldHVybiAwOworfQorCiAjZGVmaW5lIFNDSV9DT05TT0xFCSgmc2VyaWFsX2NvbnNvbGUpCiAKICNlbHNlCkBAIC0xOTIxLDYgKzIxMzQsOCBAQAogfQogCiAjZGVmaW5lIFNDSV9DT05TT0xFCU5VTEwKKyNkZWZpbmUgc2NpX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHNjaV9ydW50aW1lX3Jlc3VtZQlOVUxMCiAKICNlbmRpZiAvKiBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFICovCiAKQEAgLTIwMzYsNiArMjI1MSw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzY2lfZGV2X3BtX29wcyA9IHsKKwkucnVudGltZV9zdXNwZW5kID0gc2NpX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBzY2lfcnVudGltZV9yZXN1bWUsCiAJLnN1c3BlbmQJPSBzY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNjaV9yZXN1bWUsCiB9OwpAQCAtMjA4MSwzICsyMjk4LDUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaC1zY2kiKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgTXVuZHQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIFNDSShGKSBzZXJpYWwgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2gtc2NpLmgKaW5kZXggYjA0ZDkzNy4uZTliZWQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zaC1zY2kuaApAQCAtMiwxNjkgKzIsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQotI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSDhTMjY3OCkKLSNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotIyBkZWZpbmUgU0NQQ1IgIDB4QTQwMDAxMTYgLyogMTYgYml0IFNDSSBhbmQgU0NJRiAqLwotIyBkZWZpbmUgU0NQRFIgIDB4QTQwMDAxMzYgLyogOCAgYml0IFNDSSBhbmQgU0NJRiAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQotIyBkZWZpbmUgU0NJRjAJCTB4QTQ0MDAwMDAKLSMgZGVmaW5lIFNDSUYyCQkweEE0NDEwMDAwCi0jIGRlZmluZSBTQ1BDUiAweEE0MDAwMTE2Ci0jIGRlZmluZSBTQ1BEUiAweEE0MDAwMTM2Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczQTApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3NykgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzIpCi0jIGRlZmluZSBQT1JUX1BUQ1IJICAgMHhBNDA1MDExRVVMCi0jIGRlZmluZSBQT1JUX1BWQ1IJICAgMHhBNDA1MDEyMlVMCi0jIGRlZmluZSBTQ0lGX09SRVIJICAgMHgwMjAwICAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX1NIX1JUUzc3NTFSMkQpCi0jIGRlZmluZSBTQ1NQVFIxIDB4RkZFMDAwMUMgLyogOCBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NTUFRSMiAweEZGRTgwMDIwIC8qIDE2IGJpdCBTQ0lGICovCi0jIGRlZmluZSBTQ0lGX09SRVIgMHgwMDAxICAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkgIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSkgIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCi0jIGRlZmluZSBTQ1NQVFIxIDB4ZmZlMDAwMWMgLyogOCAgYml0IFNDSSAqLwotIyBkZWZpbmUgU0NTUFRSMiAweEZGRTgwMDIwIC8qIDE2IGJpdCBTQ0lGICovCi0jIGRlZmluZSBTQ0lGX09SRVIgMHgwMDAxICAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKLSMgZGVmaW5lIFNDU1BUUjAgMHhmZTYwMDAyNCAvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NTUFRSMSAweGZlNjEwMDI0IC8qIDE2IGJpdCBTQ0lGICovCi0jIGRlZmluZSBTQ1NQVFIyIDB4ZmU2MjAwMjQgLyogMTYgYml0IFNDSUYgKi8KLSMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEgIC8qIG92ZXJydW4gZXJyb3IgYml0ICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKLSMgZGVmaW5lIFNDU1BUUjAgMHhBNDQwMDAwMAkgIC8qIDE2IGJpdCBTQ0lGICovCi0jIGRlZmluZSBTQ0lGX09SRVIgMHgwMDAxICAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSMgZGVmaW5lIFBBQ1IgMHhhNDA1MDEwMAotIyBkZWZpbmUgUEJDUiAweGE0MDUwMTAyCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCi0jIGRlZmluZSBTQ1NQVFIwIDB4ZmZlMDAwMTAJLyogMTYgYml0IFNDSUYgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKLSMgZGVmaW5lIFBBRFIJCQkweEE0MDUwMTIwCi0jIGRlZmluZSBQU0RSCQkJMHhBNDA1MDEzZQotIyBkZWZpbmUgUFdEUgkJCTB4QTQwNTAxNjYKLSMgZGVmaW5lIFBTQ1IJCQkweEE0MDUwMTFFCi0jIGRlZmluZSBTQ0lGX09SRVIJCTB4MDAwMQkvKiBvdmVycnVuIGVycm9yIGJpdCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQotIyBkZWZpbmUgU0NQRFIwCQkJMHhBNDA1MDEzRSAgICAgIC8qIDE2IGJpdCBTQ0lGMCBQU0RSICovCi0jIGRlZmluZSBTQ1NQVFIwCQlTQ1BEUjAKLSMgZGVmaW5lIFNDSUZfT1JFUgkJMHgwMDAxICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQotIyBkZWZpbmUgU0NTUFRSMCAgICAgICAgICAgICAgICAweGE0MDUwMTYwCi0jIGRlZmluZSBTQ0lGX09SRVIgICAgICAgICAgICAgIDB4MDAwMSAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKLSMgZGVmaW5lIFNDSUZfT1JFUiAgICAgICAgICAgICAgMHgwMDAxICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKLSMgZGVmaW5lIFNDU1BUUjIgMHhmZmU4MDAyMCAvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUkVSIDB4MDAwMSAgIC8qIG92ZXJydW4gZXJyb3IgYml0ICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19IODMwMDcpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA2OCkKLSMgZGVmaW5lIEg4MzAwX1NDSV9EUihjaCkgKih2b2xhdGlsZSBjaGFyICopKFAxRFIgKyBoODMwMF9zY2lfcGluc1tjaF0ucG9ydCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0g4UzI2NzgpCi0jIGRlZmluZSBIODMwMF9TQ0lfRFIoY2gpICoodm9sYXRpbGUgY2hhciAqKShQMURSICsgaDgzMDBfc2NpX3BpbnNbY2hdLnBvcnQpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcpCi0jIGRlZmluZSBTQ1NQVFIwIDB4ZmU0YjAwMjAKLSMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKLSMgZGVmaW5lIFNDU1BUUjAgMHhmZmUwMDAyNCAvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUkVSIDB4MDAwMSAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCkKLSMgZGVmaW5lIFNDU1BUUjAgMHhmZjkyMzAyMCAvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUkVSIDB4MDAwMSAgLyogb3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLSMgZGVmaW5lIFNDU1BUUjAJMHhmZmUwMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUkVSCTB4MDAwMQkJLyogT3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQotIyBkZWZpbmUgU0NTUFRSMAkweGZmZWEwMDI0CS8qIDE2IGJpdCBTQ0lGICovCi0jIGRlZmluZSBTQ0lGX09SRVIJMHgwMDAxCQkvKiBPdmVycnVuIGVycm9yIGJpdCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNikgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQotIyBkZWZpbmUgU0NTUFRSMCAweGZmZmU4MDIwIC8qIDE2IGJpdCBTQ0lGICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkpCi0jIGRlZmluZSBTQ1NQVFIwIDB4Zjg0MDAwMjAgLyogMTYgYml0IFNDSUYgKi8KLSMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEgIC8qIG92ZXJydW4gZXJyb3IgYml0ICovCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQotIyBkZWZpbmUgU0NTUFRSMCAweGZmYzMwMDIwCQkvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUkVSIDB4MDAwMQkJLyogT3ZlcnJ1biBlcnJvciBiaXQgKi8KLSNlbHNlCi0jIGVycm9yIENQVSBzdWJ0eXBlIG5vdCBkZWZpbmVkCi0jZW5kaWYKLQotLyogU0N4U1IgU0NJICovCi0jZGVmaW5lIFNDSV9URFJFICAweDgwIC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0jZGVmaW5lIFNDSV9SRFJGICAweDQwIC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0jZGVmaW5lIFNDSV9PUkVSICAweDIwIC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0jZGVmaW5lIFNDSV9GRVIgICAweDEwIC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0jZGVmaW5lIFNDSV9QRVIgICAweDA4IC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0jZGVmaW5lIFNDSV9URU5EICAweDA0IC8qIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0vKiAgICAgIFNDSV9NUEIgICAweDAyICAqIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0vKiAgICAgIFNDSV9NUEJUICAweDAxICAqIDc3MDcgU0NJLCA3NzA4IFNDSSwgNzcwOSBTQ0ksIDc3NTAgU0NJICovCi0KLSNkZWZpbmUgU0NJX0VSUk9SUyAoIFNDSV9QRVIgfCBTQ0lfRkVSIHwgU0NJX09SRVIpCi0KLS8qIFNDeFNSIFNDSUYgKi8KLSNkZWZpbmUgU0NJRl9FUiAgICAweDAwODAgLyogNzcwNSBTQ0lGLCA3NzA3IFNDSUYsIDc3MDkgU0NJRiwgNzc1MCBTQ0lGICovCi0jZGVmaW5lIFNDSUZfVEVORCAgMHgwMDQwIC8qIDc3MDUgU0NJRiwgNzcwNyBTQ0lGLCA3NzA5IFNDSUYsIDc3NTAgU0NJRiAqLwotI2RlZmluZSBTQ0lGX1RERkUgIDB4MDAyMCAvKiA3NzA1IFNDSUYsIDc3MDcgU0NJRiwgNzcwOSBTQ0lGLCA3NzUwIFNDSUYgKi8KLSNkZWZpbmUgU0NJRl9CUksgICAweDAwMTAgLyogNzcwNSBTQ0lGLCA3NzA3IFNDSUYsIDc3MDkgU0NJRiwgNzc1MCBTQ0lGICovCi0jZGVmaW5lIFNDSUZfRkVSICAgMHgwMDA4IC8qIDc3MDUgU0NJRiwgNzcwNyBTQ0lGLCA3NzA5IFNDSUYsIDc3NTAgU0NJRiAqLwotI2RlZmluZSBTQ0lGX1BFUiAgIDB4MDAwNCAvKiA3NzA1IFNDSUYsIDc3MDcgU0NJRiwgNzcwOSBTQ0lGLCA3NzUwIFNDSUYgKi8KLSNkZWZpbmUgU0NJRl9SREYgICAweDAwMDIgLyogNzcwNSBTQ0lGLCA3NzA3IFNDSUYsIDc3MDkgU0NJRiwgNzc1MCBTQ0lGICovCi0jZGVmaW5lIFNDSUZfRFIgICAgMHgwMDAxIC8qIDc3MDUgU0NJRiwgNzcwNyBTQ0lGLCA3NzA5IFNDSUYsIDc3NTAgU0NJRiAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczQTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM2NykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3Mzc3KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzIpCi0jIGRlZmluZSBTQ0lGX09SRVIgICAgMHgwMjAwCi0jIGRlZmluZSBTQ0lGX0VSUk9SUyAoIFNDSUZfUEVSIHwgU0NJRl9GRVIgfCBTQ0lGX0VSIHwgU0NJRl9CUksgfCBTQ0lGX09SRVIpCi0jIGRlZmluZSBTQ0lGX1JGRENfTUFTSyAweDAwN2YKLSMgZGVmaW5lIFNDSUZfVFhST09NX01BWCA2NAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQotIyBkZWZpbmUgU0NJRl9FUlJPUlMgKCBTQ0lGX1BFUiB8IFNDSUZfRkVSIHwgU0NJRl9FUiB8IFNDSUZfQlJLICkKLSMgZGVmaW5lIFNDSUZfUkZEQ19NQVNLIDB4MDA3ZgotIyBkZWZpbmUgU0NJRl9UWFJPT01fTUFYIDY0Ci0vKiBTSDc3NjMgU0NJRjIgc3VwcG9ydCAqLwotIyBkZWZpbmUgU0NJRjJfUkZEQ19NQVNLIDB4MDAxZgotIyBkZWZpbmUgU0NJRjJfVFhST09NX01BWCAxNgotI2Vsc2UKLSMgZGVmaW5lIFNDSUZfRVJST1JTICggU0NJRl9QRVIgfCBTQ0lGX0ZFUiB8IFNDSUZfRVIgfCBTQ0lGX0JSSykKLSMgZGVmaW5lIFNDSUZfUkZEQ19NQVNLIDB4MDAxZgotIyBkZWZpbmUgU0NJRl9UWFJPT01fTUFYIDE2Ci0jZW5kaWYKLQotI2lmbmRlZiBTQ0lGX09SRVIKLSNkZWZpbmUgU0NJRl9PUkVSCTB4MDAwMAotI2VuZGlmCi0KICNkZWZpbmUgU0N4U1JfVEVORChwb3J0KQkoKChwb3J0KS0+dHlwZSA9PSBQT1JUX1NDSSkgPyBTQ0lfVEVORCAgIDogU0NJRl9URU5EKQotI2RlZmluZSBTQ3hTUl9FUlJPUlMocG9ydCkJKCgocG9ydCktPnR5cGUgPT0gUE9SVF9TQ0kpID8gU0NJX0VSUk9SUyA6IFNDSUZfRVJST1JTKQogI2RlZmluZSBTQ3hTUl9SRHhGKHBvcnQpCSgoKHBvcnQpLT50eXBlID09IFBPUlRfU0NJKSA/IFNDSV9SRFJGICAgOiBTQ0lGX1JERikKICNkZWZpbmUgU0N4U1JfVER4RShwb3J0KQkoKChwb3J0KS0+dHlwZSA9PSBQT1JUX1NDSSkgPyBTQ0lfVERSRSAgIDogU0NJRl9UREZFKQogI2RlZmluZSBTQ3hTUl9GRVIocG9ydCkJCSgoKHBvcnQpLT50eXBlID09IFBPUlRfU0NJKSA/IFNDSV9GRVIgICAgOiBTQ0lGX0ZFUikKICNkZWZpbmUgU0N4U1JfUEVSKHBvcnQpCQkoKChwb3J0KS0+dHlwZSA9PSBQT1JUX1NDSSkgPyBTQ0lfUEVSICAgIDogU0NJRl9QRVIpCiAjZGVmaW5lIFNDeFNSX0JSSyhwb3J0KQkJKCgocG9ydCktPnR5cGUgPT0gUE9SVF9TQ0kpID8gMHgwMCAgICAgICA6IFNDSUZfQlJLKQotI2RlZmluZSBTQ3hTUl9PUkVSKHBvcnQpCSgoKHBvcnQpLT50eXBlID09IFBPUlRfU0NJKSA/IFNDSV9PUkVSCSA6IFNDSUZfT1JFUikKKworI2RlZmluZSBTQ3hTUl9FUlJPUlMocG9ydCkJKHRvX3NjaV9wb3J0KHBvcnQpLT5jZmctPmVycm9yX21hc2spCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKQEAgLTE5MSwyNzggKzM2LDMgQEAKIAogI2RlZmluZSBTQ0lfTUFKT1IJCTIwNAogI2RlZmluZSBTQ0lfTUlOT1JfU1RBUlQJCTgKLQotI2RlZmluZSBTQ0lfSU4oc2l6ZSwgb2Zmc2V0KQkJCQkJXAotICBpZiAoKHNpemUpID09IDgpIHsJCQkJCQlcCi0gICAgcmV0dXJuIGlvcmVhZDgocG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCi0gIH0gZWxzZSB7CQkJCQkJCVwKLSAgICByZXR1cm4gaW9yZWFkMTYocG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCi0gIH0KLSNkZWZpbmUgU0NJX09VVChzaXplLCBvZmZzZXQsIHZhbHVlKQkJCQlcCi0gIGlmICgoc2l6ZSkgPT0gOCkgewkJCQkJCVwKLSAgICBpb3dyaXRlOCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCi0gIH0gZWxzZSBpZiAoKHNpemUpID09IDE2KSB7CQkJCQlcCi0gICAgaW93cml0ZTE2KHZhbHVlLCBwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKLSAgfQotCi0jZGVmaW5lIENQVV9TQ0l4X0ZOUyhuYW1lLCBzY2lfb2Zmc2V0LCBzY2lfc2l6ZSwgc2NpZl9vZmZzZXQsIHNjaWZfc2l6ZSlcCi0gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjaV8jI25hbWUjI19pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQlcCi0gIHsJCQkJCQkJCQlcCi0gICAgaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGIHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQikgewkJXAotICAgICAgU0NJX0lOKHNjaWZfc2l6ZSwgc2NpZl9vZmZzZXQpCQkJCQlcCi0gICAgfSBlbHNlIHsJLyogUE9SVF9TQ0kgb3IgUE9SVF9TQ0lGQSAqLwkJCQlcCi0gICAgICBTQ0lfSU4oc2NpX3NpemUsIHNjaV9vZmZzZXQpOwkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gIH0JCQkJCQkJCQlcCi0gIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfIyNuYW1lIyNfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCB2YWx1ZSkgXAotICB7CQkJCQkJCQkJXAotICAgIGlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRiB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpIHsJCVwKLSAgICAgIFNDSV9PVVQoc2NpZl9zaXplLCBzY2lmX29mZnNldCwgdmFsdWUpCQkJCVwKLSAgICB9IGVsc2UgewkvKiBQT1JUX1NDSSBvciBQT1JUX1NDSUZBICovCQkJCVwKLSAgICAgIFNDSV9PVVQoc2NpX3NpemUsIHNjaV9vZmZzZXQsIHZhbHVlKTsJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gIH0KLQotI2lmZGVmIENPTkZJR19IODMwMAotLyogaDgzMDAgZG9uJ3QgaGF2ZSBTQ0lGICovCi0jZGVmaW5lIENQVV9TQ0lGX0ZOUyhuYW1lKQkJCQkJCVwKLSAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NpXyMjbmFtZSMjX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCVwKLSAgewkJCQkJCQkJCVwKLSAgICByZXR1cm4gMDsJCQkJCQkJCVwKLSAgfQkJCQkJCQkJCVwKLSAgc3RhdGljIGlubGluZSB2b2lkIHNjaV8jI25hbWUjI19vdXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHZhbHVlKSBcCi0gIHsJCQkJCQkJCQlcCi0gIH0KLSNlbHNlCi0jZGVmaW5lIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQkJCVwKLSAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NpXyMjbmFtZSMjX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCVwKLSAgewkJCQkJCQkJCVwKLSAgICBTQ0lfSU4oc2NpZl9zaXplLCBzY2lmX29mZnNldCk7CQkJCQlcCi0gIH0JCQkJCQkJCQlcCi0gIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfIyNuYW1lIyNfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCB2YWx1ZSkgXAotICB7CQkJCQkJCQkJXAotICAgIFNDSV9PVVQoc2NpZl9zaXplLCBzY2lmX29mZnNldCwgdmFsdWUpOwkJCQlcCi0gIH0KLSNlbmRpZgotCi0jZGVmaW5lIENQVV9TQ0lfRk5TKG5hbWUsIHNjaV9vZmZzZXQsIHNjaV9zaXplKQkJCQlcCi0gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjaV8jI25hbWUjI19pbihzdHJ1Y3QgdWFydF9wb3J0KiBwb3J0KQlcCi0gIHsJCQkJCQkJCQlcCi0gICAgU0NJX0lOKHNjaV9zaXplLCBzY2lfb2Zmc2V0KTsJCQkJCVwKLSAgfQkJCQkJCQkJCVwKLSAgc3RhdGljIGlubGluZSB2b2lkIHNjaV8jI25hbWUjI19vdXQoc3RydWN0IHVhcnRfcG9ydCogcG9ydCwgdW5zaWduZWQgaW50IHZhbHVlKSBcCi0gIHsJCQkJCQkJCQlcCi0gICAgU0NJX09VVChzY2lfc2l6ZSwgc2NpX29mZnNldCwgdmFsdWUpOwkJCQlcCi0gIH0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzNBMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKLSNkZWZpbmUgU0NJeF9GTlMobmFtZSwgc2gzX3NjaV9vZmZzZXQsIHNoM19zY2lfc2l6ZSwgc2g0X3NjaV9vZmZzZXQsIHNoNF9zY2lfc2l6ZSwgXAotCQkgICAgICAgICAgICAgICAgc2gzX3NjaWZfb2Zmc2V0LCBzaDNfc2NpZl9zaXplLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUsIFwKLQkJICAgICAgICAgICAgICAgICBoOF9zY2lfb2Zmc2V0LCBoOF9zY2lfc2l6ZSkgXAotICBDUFVfU0NJeF9GTlMobmFtZSwgc2g0X3NjaV9vZmZzZXQsIHNoNF9zY2lfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKQotI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzaDNfc2NpZl9vZmZzZXQsIHNoM19zY2lmX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkgXAotCSAgQ1BVX1NDSUZfRk5TKG5hbWUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KQotI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKSBcCi0gIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzcyKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzNBMCkKLSNkZWZpbmUgU0NJeF9GTlMobmFtZSwgc2g0X3NjaWZhX29mZnNldCwgc2g0X3NjaWZhX3NpemUsIHNoNF9zY2lmYl9vZmZzZXQsIHNoNF9zY2lmYl9zaXplKSBcCi0gIENQVV9TQ0l4X0ZOUyhuYW1lLCBzaDRfc2NpZmFfb2Zmc2V0LCBzaDRfc2NpZmFfc2l6ZSwgc2g0X3NjaWZiX29mZnNldCwgc2g0X3NjaWZiX3NpemUpCi0jZGVmaW5lIFNDSUZfRk5TKG5hbWUsIHNjaWZfb2Zmc2V0LCBzY2lmX3NpemUpIFwKLSAgQ1BVX1NDSUZfRk5TKG5hbWUsIHNjaWZfb2Zmc2V0LCBzY2lmX3NpemUpCi0jZWxzZQotI2RlZmluZSBTQ0l4X0ZOUyhuYW1lLCBzaDNfc2NpX29mZnNldCwgc2gzX3NjaV9zaXplLCBzaDRfc2NpX29mZnNldCwgc2g0X3NjaV9zaXplLCBcCi0JCSBzaDNfc2NpZl9vZmZzZXQsIHNoM19zY2lmX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSwgXAotICAgICAgICAgICAgICAgICBoOF9zY2lfb2Zmc2V0LCBoOF9zY2lfc2l6ZSkgXAotICBDUFVfU0NJeF9GTlMobmFtZSwgc2gzX3NjaV9vZmZzZXQsIHNoM19zY2lfc2l6ZSwgc2gzX3NjaWZfb2Zmc2V0LCBzaDNfc2NpZl9zaXplKQotI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzaDNfc2NpZl9vZmZzZXQsIHNoM19zY2lmX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkgXAotICBDUFVfU0NJRl9GTlMobmFtZSwgc2gzX3NjaWZfb2Zmc2V0LCBzaDNfc2NpZl9zaXplKQotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKLSNkZWZpbmUgU0NJeF9GTlMobmFtZSwgc2gzX3NjaV9vZmZzZXQsIHNoM19zY2lfc2l6ZSwgc2g0X3NjaV9vZmZzZXQsIHNoNF9zY2lfc2l6ZSwgXAotCQkgc2gzX3NjaWZfb2Zmc2V0LCBzaDNfc2NpZl9zaXplLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUsIFwKLSAgICAgICAgICAgICAgICAgaDhfc2NpX29mZnNldCwgaDhfc2NpX3NpemUpIFwKLSAgQ1BVX1NDSV9GTlMobmFtZSwgaDhfc2NpX29mZnNldCwgaDhfc2NpX3NpemUpCi0jZGVmaW5lIFNDSUZfRk5TKG5hbWUsIHNoM19zY2lmX29mZnNldCwgc2gzX3NjaWZfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKSBcCi0gIENQVV9TQ0lGX0ZOUyhuYW1lKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKSB8fFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKLSAgICAgICAgI2RlZmluZSBTQ0l4X0ZOUyhuYW1lLCBzaDRfc2NpZmFfb2Zmc2V0LCBzaDRfc2NpZmFfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKSBcCi0gICAgICAgICAgICAgICAgQ1BVX1NDSXhfRk5TKG5hbWUsIHNoNF9zY2lmYV9vZmZzZXQsIHNoNF9zY2lmYV9zaXplLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUpCi0gICAgICAgICNkZWZpbmUgU0NJRl9GTlMobmFtZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKSBcCi0gICAgICAgICAgICAgICAgQ1BVX1NDSUZfRk5TKG5hbWUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkKLSNlbHNlCi0jZGVmaW5lIFNDSXhfRk5TKG5hbWUsIHNoM19zY2lfb2Zmc2V0LCBzaDNfc2NpX3NpemUsIHNoNF9zY2lfb2Zmc2V0LCBzaDRfc2NpX3NpemUsIFwKLQkJIHNoM19zY2lmX29mZnNldCwgc2gzX3NjaWZfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplLCBcCi0JCSBoOF9zY2lfb2Zmc2V0LCBoOF9zY2lfc2l6ZSkgXAotICBDUFVfU0NJeF9GTlMobmFtZSwgc2g0X3NjaV9vZmZzZXQsIHNoNF9zY2lfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKQotI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzaDNfc2NpZl9vZmZzZXQsIHNoM19zY2lmX3NpemUsIHNoNF9zY2lmX29mZnNldCwgc2g0X3NjaWZfc2l6ZSkgXAotICBDUFVfU0NJRl9GTlMobmFtZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM2NykKLQotU0NJRl9GTlMoU0NTTVIsICAweDAwLCAxNikKLVNDSUZfRk5TKFNDQlJSLCAgMHgwNCwgIDgpCi1TQ0lGX0ZOUyhTQ1NDUiwgIDB4MDgsIDE2KQotU0NJRl9GTlMoU0N4U1IsICAweDE0LCAxNikKLVNDSUZfRk5TKFNDRkNSLCAgMHgxOCwgMTYpCi1TQ0lGX0ZOUyhTQ0ZEUiwgIDB4MWMsIDE2KQotU0NJRl9GTlMoU0N4VERSLCAweDIwLCAgOCkKLVNDSUZfRk5TKFNDeFJEUiwgMHgyNCwgIDgpCi1TQ0lGX0ZOUyhTQ0xTUiwgIDB4MDAsICAwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzcyKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzNBMCkKLVNDSUZfRk5TKFNDU01SLCAgMHgwMCwgMTYpCi1TQ0lGX0ZOUyhTQ0JSUiwgIDB4MDQsICA4KQotU0NJRl9GTlMoU0NTQ1IsICAweDA4LCAxNikKLVNDSUZfRk5TKFNDVERTUiwgMHgwYywgMTYpCi1TQ0lGX0ZOUyhTQ0ZFUiwgIDB4MTAsIDE2KQotU0NJRl9GTlMoU0N4U1IsICAweDE0LCAxNikKLVNDSUZfRk5TKFNDRkNSLCAgMHgxOCwgMTYpCi1TQ0lGX0ZOUyhTQ0ZEUiwgIDB4MWMsIDE2KQotU0NJRl9GTlMoU0NURkRSLCAweDM4LCAxNikKLVNDSUZfRk5TKFNDUkZEUiwgMHgzYywgMTYpCi1TQ0l4X0ZOUyhTQ3hURFIsIDB4MjAsICA4LCAweDQwLCAgOCkKLVNDSXhfRk5TKFNDeFJEUiwgMHgyNCwgIDgsIDB4NjAsICA4KQotU0NJRl9GTlMoU0NMU1IsICAweDAwLCAgMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykgfHxcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCi1TQ0l4X0ZOUyhTQ1NNUiwgIDB4MDAsIDE2LCAweDAwLCAxNikKLVNDSXhfRk5TKFNDQlJSLCAgMHgwNCwgIDgsIDB4MDQsICA4KQotU0NJeF9GTlMoU0NTQ1IsICAweDA4LCAxNiwgMHgwOCwgMTYpCi1TQ0l4X0ZOUyhTQ3hURFIsIDB4MjAsICA4LCAweDBjLCAgOCkKLVNDSXhfRk5TKFNDeFNSLCAgMHgxNCwgMTYsIDB4MTAsIDE2KQotU0NJeF9GTlMoU0N4UkRSLCAweDI0LCAgOCwgMHgxNCwgIDgpCi1TQ0l4X0ZOUyhTQ1NQVFIsIDAsICAgICAwLCAgICAwLCAgMCkKLVNDSUZfRk5TKFNDRkNSLCAgMHgxOCwgMTYpCi1TQ0lGX0ZOUyhTQ0ZEUiwgIDB4MWMsIDE2KQotU0NJRl9GTlMoU0NMU1IsICAweDI0LCAxNikKLSNlbHNlCi0vKiAgICAgIHJlZyAgICAgIFNDSS9TSDMgICBTQ0kvU0g0ICBTQ0lGL1NIMyAgIFNDSUYvU0g0ICBTQ0kvSDgqLwotLyogICAgICBuYW1lICAgICBvZmYgIHN6ICAgb2ZmICBzeiAgIG9mZiAgc3ogICBvZmYgIHN6ICAgb2ZmICBzeiovCi1TQ0l4X0ZOUyhTQ1NNUiwgIDB4MDAsICA4LCAweDAwLCAgOCwgMHgwMCwgIDgsIDB4MDAsIDE2LCAweDAwLCAgOCkKLVNDSXhfRk5TKFNDQlJSLCAgMHgwMiwgIDgsIDB4MDQsICA4LCAweDAyLCAgOCwgMHgwNCwgIDgsIDB4MDEsICA4KQotU0NJeF9GTlMoU0NTQ1IsICAweDA0LCAgOCwgMHgwOCwgIDgsIDB4MDQsICA4LCAweDA4LCAxNiwgMHgwMiwgIDgpCi1TQ0l4X0ZOUyhTQ3hURFIsIDB4MDYsICA4LCAweDBjLCAgOCwgMHgwNiwgIDgsIDB4MEMsICA4LCAweDAzLCAgOCkKLVNDSXhfRk5TKFNDeFNSLCAgMHgwOCwgIDgsIDB4MTAsICA4LCAweDA4LCAxNiwgMHgxMCwgMTYsIDB4MDQsICA4KQotU0NJeF9GTlMoU0N4UkRSLCAweDBhLCAgOCwgMHgxNCwgIDgsIDB4MEEsICA4LCAweDE0LCAgOCwgMHgwNSwgIDgpCi1TQ0lGX0ZOUyhTQ0ZDUiwgICAgICAgICAgICAgICAgICAgICAgMHgwYywgIDgsIDB4MTgsIDE2KQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKLVNDSUZfRk5TKFNDRkRSLAkJCSAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQotU0NJRl9GTlMoU0NURkRSLAkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCi1TQ0lGX0ZOUyhTQ1JGRFIsCQkgICAgIDB4MGUsIDE2LCAweDIwLCAxNikKLVNDSUZfRk5TKFNDU1BUUiwJCQkwLCAgMCwgMHgyNCwgMTYpCi1TQ0lGX0ZOUyhTQ0xTUiwJCQkJMCwgIDAsIDB4MjgsIDE2KQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQotU0NJRl9GTlMoU0NGRFIsCQkJCTAsICAwLCAweDFDLCAxNikKLVNDSUZfRk5TKFNDVEZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQotU0NJRl9GTlMoU0NSRkRSLAkJICAgICAweDBlLCAxNiwgMHgyMCwgMTYpCi1TQ0lGX0ZOUyhTQ1NQVFIsCQkJMCwgIDAsIDB4MjQsIDE2KQotU0NJRl9GTlMoU0NMU1IsCQkJCTAsICAwLCAweDI4LCAxNikKLSNlbHNlCi1TQ0lGX0ZOUyhTQ0ZEUiwgICAgICAgICAgICAgICAgICAgICAgMHgwZSwgMTYsIDB4MUMsIDE2KQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKLVNDSUZfRk5TKFNDU1BUUiwgICAgICAgICAgICAgICAgICAgICAgICAwLCAgMCwgMCwgMCkKLSNlbHNlCi1TQ0lGX0ZOUyhTQ1NQVFIsICAgICAgICAgICAgICAgICAgICAgICAgMCwgIDAsIDB4MjAsIDE2KQotI2VuZGlmCi1TQ0lGX0ZOUyhTQ0xTUiwgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIDAsIDB4MjQsIDE2KQotI2VuZGlmCi0jZW5kaWYKLSNkZWZpbmUgc2NpX2luKHBvcnQsIHJlZykgc2NpXyMjcmVnIyNfaW4ocG9ydCkKLSNkZWZpbmUgc2NpX291dChwb3J0LCByZWcsIHZhbHVlKSBzY2lfIyNyZWcjI19vdXQocG9ydCwgdmFsdWUpCi0KLS8qIEg4LzMwMCBzZXJpZXMgU0NJIHBpbnMgYXNzaWdubWVudCAqLwotI2lmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQotc3RhdGljIGNvbnN0IHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB7Ci0JaW50IHBvcnQ7ICAgICAgICAgICAgIC8qIEdQSU8gcG9ydCBubyAqLwotCXVuc2lnbmVkIHNob3J0IHJ4LHR4OyAvKiBHUElPIGJpdCBubyAqLwotfSBoODMwMF9zY2lfcGluc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQotCXsgICAgLyogU0NJMCAqLwotCQkucG9ydCA9IEg4MzAwX0dQSU9fUDksCi0JCS5yeCAgID0gSDgzMDBfR1BJT19CMiwKLQkJLnR4ICAgPSBIODMwMF9HUElPX0IwLAotCX0sCi0JeyAgICAvKiBTQ0kxICovCi0JCS5wb3J0ID0gSDgzMDBfR1BJT19QOSwKLQkJLnJ4ICAgPSBIODMwMF9HUElPX0IzLAotCQkudHggICA9IEg4MzAwX0dQSU9fQjEsCi0JfSwKLQl7ICAgIC8qIFNDSTIgKi8KLQkJLnBvcnQgPSBIODMwMF9HUElPX1BCLAotCQkucnggICA9IEg4MzAwX0dQSU9fQjcsCi0JCS50eCAgID0gSDgzMDBfR1BJT19CNiwKLQl9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19IOFMyNjc4KQotCXsgICAgLyogU0NJMCAqLwotCQkucG9ydCA9IEg4MzAwX0dQSU9fUDMsCi0JCS5yeCAgID0gSDgzMDBfR1BJT19CMiwKLQkJLnR4ICAgPSBIODMwMF9HUElPX0IwLAotCX0sCi0JeyAgICAvKiBTQ0kxICovCi0JCS5wb3J0ID0gSDgzMDBfR1BJT19QMywKLQkJLnJ4ICAgPSBIODMwMF9HUElPX0IzLAotCQkudHggICA9IEg4MzAwX0dQSU9fQjEsCi0JfSwKLQl7ICAgIC8qIFNDSTIgKi8KLQkJLnBvcnQgPSBIODMwMF9HUElPX1A1LAotCQkucnggICA9IEg4MzAwX0dQSU9fQjEsCi0JCS50eCAgID0gSDgzMDBfR1BJT19CMCwKLQl9Ci0jZW5kaWYKLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmZmZTgwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApICB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpICB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBTKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFNDU1BUUjEpJjB4MDEgPyAxIDogMDsgLyogU0NJICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpbnQgY2ggPSAocG9ydC0+bWFwYmFzZSAtIFNNUjApID4+IDM7Ci0JcmV0dXJuIChIODMwMF9TQ0lfRFIoY2gpICYgaDgzMDBfc2NpX3BpbnNbY2hdLnJ4KSA/IDEgOiAwOwotfQotI2Vsc2UgLyogZGVmYXVsdCBjYXNlIGZvciBub24tU0NJIHByb2Nlc3NvcnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYwppbmRleCBjMzI3MjE4Li45YWY5ZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJCXJldHVybiBxZV9wb3J0LT5iZF92aXJ0ICsgKGFkZHIgLSBxZV9wb3J0LT5iZF9kbWFfYWRkcik7CiAKIAkvKiBzb21ldGhpbmcgbmFzdHkgaGFwcGVuZWQgKi8KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRyPSV4XG4iLCBfX2Z1bmNfXywgYWRkcik7CisJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkcj0lbGx4XG4iLCBfX2Z1bmNfXywgKHU2NClhZGRyKTsKIAlCVUcoKTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKaW5kZXggMTUwZTRmNy4uNGYxZmM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMKKysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTEyOTUsOCArMTI5NSw3IEBACiAgKgogICoJTG9ja2luZzogdHR5X211dGV4IGZvciBub3cKICAqLwotc3RhdGljIHZvaWQgdHR5X2RyaXZlcl9yZW1vdmVfdHR5KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCi0JCQkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCB0dHlfZHJpdmVyX3JlbW92ZV90dHkoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAoZHJpdmVyLT5vcHMtPnJlbW92ZSkKIAkJZHJpdmVyLT5vcHMtPnJlbW92ZShkcml2ZXIsIHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCmluZGV4IDM4NWFjYjguLjNmOTRhYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJCQlkZXZfZXJyKGRldiwgInVzYl9idWxrX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KLQkJfSB3aGlsZSAoKGFjdHVhbCA9IG1heF9zaXplKSAmJgorCQl9IHdoaWxlICgoYWN0dWFsID09IG1heF9zaXplKSAmJgogCQkJIChuIDwgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKSk7CiAKIAlpZiAoYWN0dWFsID09IG1heF9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jIGIvZHJpdmVycy91c2IvY29yZS9jb25maWcuYwppbmRleCBjOTYyNjA4Li4yNjY3OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTEyMywxMCArMTIzLDExIEBACiAJfQogCiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkKLQkJbWF4X3R4ID0gZXAtPmRlc2Mud01heFBhY2tldFNpemUgKiAoZGVzYy0+Yk1heEJ1cnN0ICsgMSkgKgotCQkJKGRlc2MtPmJtQXR0cmlidXRlcyArIDEpOworCQltYXhfdHggPSAoZGVzYy0+Yk1heEJ1cnN0ICsgMSkgKiAoZGVzYy0+Ym1BdHRyaWJ1dGVzICsgMSkgKgorCQkJbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCWVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludCgmZXAtPmRlc2MpKQotCQltYXhfdHggPSBlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSAqIChkZXNjLT5iTWF4QnVyc3QgKyAxKTsKKwkJbWF4X3R4ID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpICoKKwkJCShkZXNjLT5iTWF4QnVyc3QgKyAxKTsKIAllbHNlCiAJCW1heF90eCA9IDk5OTk5OTsKIAlpZiAobGUxNl90b19jcHUoZGVzYy0+d0J5dGVzUGVySW50ZXJ2YWwpID4gbWF4X3R4KSB7CkBAIC0xMzQsMTAgKzEzNSwxMCBAQAogCQkJCSJjb25maWcgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgZXAgJWQ6ICIKIAkJCQkic2V0dGluZyB0byAlZFxuIiwKIAkJCQl1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZlcC0+ZGVzYykgPyAiSXNvYyIgOiAiSW50IiwKLQkJCQlkZXNjLT53Qnl0ZXNQZXJJbnRlcnZhbCwKKwkJCQlsZTE2X3RvX2NwdShkZXNjLT53Qnl0ZXNQZXJJbnRlcnZhbCksCiAJCQkJY2Znbm8sIGludW0sIGFzbnVtLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCW1heF90eCk7Ci0JCWVwLT5zc19lcF9jb21wLndCeXRlc1BlckludGVydmFsID0gbWF4X3R4OworCQllcC0+c3NfZXBfY29tcC53Qnl0ZXNQZXJJbnRlcnZhbCA9IGNwdV90b19sZTE2KG1heF90eCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA4NjY5YmEzLi43M2NiYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTE3NzUsNiArMTc3NSw4IEBACiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSA9IHVzYl9pZm51bV90b19pZih1ZGV2LAogCQkJCWN1cl9hbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKKwkJaWYgKCFpZmFjZSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoaWZhY2UtPnJlc2V0dGluZ19kZXZpY2UpIHsKIAkJCS8qCiAJCQkgKiBUaGUgVVNCIGNvcmUganVzdCByZXNldCB0aGUgZGV2aWNlLCBzbyB0aGUgeEhDSSBob3N0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDQ0YjZiNDAuLjVhMDg0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0zMTAsNyArMzEwLDcgQEAKICMgbXVzYiBidWlsZHMgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAogY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCiAJdHJpc3RhdGUgIkludmVudHJhIEhEUkMgVVNCIFBlcmlwaGVyYWwgKFRJLCBBREksIC4uLikiCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKKwlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMKIAlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKIAloZWxwCiAJICBUaGlzIE9URy1jYXBhYmxlIHNpbGljb24gSVAgaXMgdXNlZCBpbiBkdWFsIGRlc2lnbnMgaW5jbHVkaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDk4Y2JjMDYuLmRkYjExOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggNWVmODc3OS4uYWVmNDc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtMTA3OSwxMCArMTA3OSwxMiBAQAogCQkJY2Rldi0+ZGVzYy5iTWF4UGFja2V0U2l6ZTAgPQogCQkJCWNkZXYtPmdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CiAJCQlpZiAoZ2FkZ2V0X2lzX3N1cGVyc3BlZWQoZ2FkZ2V0KSkgewotCQkJCWlmIChnYWRnZXQtPnNwZWVkID49IFVTQl9TUEVFRF9TVVBFUikKKwkJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA+PSBVU0JfU1BFRURfU1VQRVIpIHsKIAkJCQkJY2Rldi0+ZGVzYy5iY2RVU0IgPSBjcHVfdG9fbGUxNigweDAzMDApOwotCQkJCWVsc2UKKwkJCQkJY2Rldi0+ZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSA5OworCQkJCX0gZWxzZSB7CiAJCQkJCWNkZXYtPmRlc2MuYmNkVVNCID0gY3B1X3RvX2xlMTYoMHgwMjEwKTsKKwkJCQl9CiAJCQl9CiAKIAkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgY2Rldi0+ZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9oaWQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2hpZC5jCmluZGV4IDQwM2E0OGIuLjgzYTI2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2hpZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2hpZC5jCkBAIC0zNjcsNiArMzY3LDEzIEBACiAJY2FzZSAoKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgKIAkJICB8IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IpOgogCQlzd2l0Y2ggKHZhbHVlID4+IDgpIHsKKwkJY2FzZSBISURfRFRfSElEOgorCQkJVkRCRyhjZGV2LCAiVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjogSElEXG4iKTsKKwkJCWxlbmd0aCA9IG1pbl90KHVuc2lnbmVkIHNob3J0LCBsZW5ndGgsCisJCQkJCQkgICBoaWRnX2Rlc2MuYkxlbmd0aCk7CisJCQltZW1jcHkocmVxLT5idWYsICZoaWRnX2Rlc2MsIGxlbmd0aCk7CisJCQlnb3RvIHJlc3BvbmQ7CisJCQlicmVhazsKIAkJY2FzZSBISURfRFRfUkVQT1JUOgogCQkJVkRCRyhjZGV2LCAiVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjogUkVQT1JUXG4iKTsKIAkJCWxlbmd0aCA9IG1pbl90KHVuc2lnbmVkIHNob3J0LCBsZW5ndGgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCmluZGV4IDhmOGQzZjYuLjhmM2VhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCkBAIC00MzQsNiArNDM0LDcgQEAKIAkJCSAgICBjb25maWdfZXBfYnlfc3BlZWQoZ2FkZ2V0LCBmLCBmcC0+b3V0X2VwKSkgewogCQkJCWZwLT5pbl9lcC0+ZGVzYyA9IE5VTEw7CiAJCQkJZnAtPm91dF9lcC0+ZGVzYyA9IE5VTEw7CisJCQkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJdXNiX2VwX2VuYWJsZShmcC0+b3V0X2VwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdXNiMzAwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKaW5kZXggMjRhOTI0My4uNGVjODg4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1c2IzMDBfdWRjLmMKQEAgLTYwOSwxMDcgKzYwOSw2IEBACiAJfQogfQogCi0jaWYgMAotc3RhdGljIHZvaWQgZnVzYjMwMF9kYmdfZmlmbyhzdHJ1Y3QgZnVzYjMwMF9lcCAqZXAsCi0JCQkJdTggZW50cnksIHUxNiBsZW5ndGgpCi17Ci0JdTMyIHJlZzsKLQl1MzIgaSA9IDA7Ci0JdTMyIGogPSAwOwotCi0JcmVnID0gaW9yZWFkMzIoZXAtPmZ1c2IzMDAtPnJlZyArIEZVU0IzMDBfT0ZGU0VUX0dUTSk7Ci0JcmVnICY9IH4oRlVTQjMwMF9HVE1fVFNUX0VQX0VOVFJZKDB4RikgfAotCQlGVVNCMzAwX0dUTV9UU1RfRVBfTlVNKDB4RikgfCBGVVNCMzAwX0dUTV9UU1RfRklGT19ERUcpOwotCXJlZyB8PSAoRlVTQjMwMF9HVE1fVFNUX0VQX0VOVFJZKGVudHJ5KSB8Ci0JCUZVU0IzMDBfR1RNX1RTVF9FUF9OVU0oZXAtPmVwbnVtKSB8IEZVU0IzMDBfR1RNX1RTVF9GSUZPX0RFRyk7Ci0JaW93cml0ZTMyKHJlZywgZXAtPmZ1c2IzMDAtPnJlZyArIEZVU0IzMDBfT0ZGU0VUX0dUTSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKGxlbmd0aCA+PiAyKTsgaSsrKSB7Ci0JCWlmIChpICogNCA9PSAxMDI0KQotCQkJYnJlYWs7Ci0JCXJlZyA9IGlvcmVhZDMyKGVwLT5mdXNiMzAwLT5yZWcgKwotCQkJRlVTQjMwMF9PRkZTRVRfQlVGREJHX1NUQVJUICsgaSAqIDQpOwotCQlwcmludGsoS0VSTl9ERUJVRyIgIDB4JS04eCIsIHJlZyk7Ci0JCWorKzsKLQkJaWYgKChqICUgNCkgID09IDApCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKLQl9Ci0KLQlpZiAobGVuZ3RoICUgNCkgewotCQlyZWcgPSBpb3JlYWQzMihlcC0+ZnVzYjMwMC0+cmVnICsKLQkJCUZVU0IzMDBfT0ZGU0VUX0JVRkRCR19TVEFSVCArIGkgKiA0KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgMHgleFxuIiwgcmVnKTsKLQl9Ci0KLQlpZiAoKGogJSA0KSAgIT0gMCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7Ci0KLQlmdXNiMzAwX2Rpc2FibGVfYml0KGVwLT5mdXNiMzAwLCBGVVNCMzAwX09GRlNFVF9HVE0sCi0JCUZVU0IzMDBfR1RNX1RTVF9GSUZPX0RFRyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ1c2IzMDBfY21wX2RiZ19maWZvKHN0cnVjdCBmdXNiMzAwX2VwICplcCwKLQkJCQl1OCBlbnRyeSwgdTE2IGxlbmd0aCwgdTggKmdvbGRlbikKLXsKLQl1MzIgcmVnOwotCXUzMiBpID0gMDsKLQl1MzIgZ29sZGVuX3ZhbHVlOwotCXU4ICp0bXA7Ci0KLQl0bXAgPSBnb2xkZW47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiZnVzYjMwMF9jbXBfZGJnX2ZpZm8gKGVudHJ5ICVkKSA6IHN0YXJ0XG4iLCBlbnRyeSk7Ci0KLQlyZWcgPSBpb3JlYWQzMihlcC0+ZnVzYjMwMC0+cmVnICsgRlVTQjMwMF9PRkZTRVRfR1RNKTsKLQlyZWcgJj0gfihGVVNCMzAwX0dUTV9UU1RfRVBfRU5UUlkoMHhGKSB8Ci0JCUZVU0IzMDBfR1RNX1RTVF9FUF9OVU0oMHhGKSB8IEZVU0IzMDBfR1RNX1RTVF9GSUZPX0RFRyk7Ci0JcmVnIHw9IChGVVNCMzAwX0dUTV9UU1RfRVBfRU5UUlkoZW50cnkpIHwKLQkJRlVTQjMwMF9HVE1fVFNUX0VQX05VTShlcC0+ZXBudW0pIHwgRlVTQjMwMF9HVE1fVFNUX0ZJRk9fREVHKTsKLQlpb3dyaXRlMzIocmVnLCBlcC0+ZnVzYjMwMC0+cmVnICsgRlVTQjMwMF9PRkZTRVRfR1RNKTsKLQotCWZvciAoaSA9IDA7IGkgPCAobGVuZ3RoID4+IDIpOyBpKyspIHsKLQkJaWYgKGkgKiA0ID09IDEwMjQpCi0JCQlicmVhazsKLQkJZ29sZGVuX3ZhbHVlID0gKnRtcCB8ICoodG1wICsgMSkgPDwgOCB8Ci0JCQkJKih0bXAgKyAyKSA8PCAxNiB8ICoodG1wICsgMykgPDwgMjQ7Ci0KLQkJcmVnID0gaW9yZWFkMzIoZXAtPmZ1c2IzMDAtPnJlZyArCi0JCQlGVVNCMzAwX09GRlNFVF9CVUZEQkdfU1RBUlQgKyBpKjQpOwotCi0JCWlmIChyZWcgIT0gZ29sZGVuX3ZhbHVlKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiMHgleCAgOiAgIiwgKHUzMikoZXAtPmZ1c2IzMDAtPnJlZyArCi0JCQkJRlVTQjMwMF9PRkZTRVRfQlVGREJHX1NUQVJUICsgaSo0KSk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIGdvbGRlbiA9IDB4JXgsIHJlZyA9IDB4JXhcbiIsCi0JCQkJZ29sZGVuX3ZhbHVlLCByZWcpOwotCQl9Ci0JCXRtcCArPSA0OwotCX0KLQotCXN3aXRjaCAobGVuZ3RoICUgNCkgewotCWNhc2UgMToKLQkJZ29sZGVuX3ZhbHVlID0gKnRtcDsKLQljYXNlIDI6Ci0JCWdvbGRlbl92YWx1ZSA9ICp0bXAgfCAqKHRtcCArIDEpIDw8IDg7Ci0JY2FzZSAzOgotCQlnb2xkZW5fdmFsdWUgPSAqdG1wIHwgKih0bXAgKyAxKSA8PCA4IHwgKih0bXAgKyAyKSA8PCAxNjsKLQlkZWZhdWx0OgotCQlicmVhazsKLQotCXJlZyA9IGlvcmVhZDMyKGVwLT5mdXNiMzAwLT5yZWcgKyBGVVNCMzAwX09GRlNFVF9CVUZEQkdfU1RBUlQgKyBpKjQpOwotCWlmIChyZWcgIT0gZ29sZGVuX3ZhbHVlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCV4OiIsICh1MzIpKGVwLT5mdXNiMzAwLT5yZWcgKwotCQkJRlVTQjMwMF9PRkZTRVRfQlVGREJHX1NUQVJUICsgaSo0KSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgIGdvbGRlbiA9IDB4JXgsIHJlZyA9IDB4JXhcbiIsCi0JCQlnb2xkZW5fdmFsdWUsIHJlZyk7Ci0JfQotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJmdXNiMzAwX2NtcF9kYmdfZmlmbyA6IGVuZFxuIik7Ci0JZnVzYjMwMF9kaXNhYmxlX2JpdChlcC0+ZnVzYjMwMCwgRlVTQjMwMF9PRkZTRVRfR1RNLAotCQlGVVNCMzAwX0dUTV9UU1RfRklGT19ERUcpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGZ1c2IzMDBfcmRmaWZvKHN0cnVjdCBmdXNiMzAwX2VwICplcCwKIAkJCSAgc3RydWN0IGZ1c2IzMDBfcmVxdWVzdCAqcmVxLAogCQkJICB1MzIgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyNzIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjcyLmMKaW5kZXggN2M3YjBlMS4uYWI5OGVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyNzIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI3Mi5jCkBAIC0yNywxMyArMjcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggODVjMWIwZC4uOGQzMTg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTIwNjAsNiArMjA2MCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzM2NfdWRjX2lkc1tdID0gewogCXsgInMzYzI0MTAtdXNiZ2FkZ2V0IiwgfSwKIAl7ICJzM2MyNDQwLXVzYmdhZGdldCIsIH0sCisJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgczNjX3VkY19pZHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfdjRsMi5jCmluZGV4IDVlODA3ZjAuLjUyZjhmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91dmNfdjRsMi5jCkBAIC0xMjQsMjQgKzEyNCwxMiBAQAogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCB1dmNfZGV2aWNlICp1dmMgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlzdHJ1Y3QgdXZjX2ZpbGVfaGFuZGxlICpoYW5kbGU7Ci0JaW50IHJldDsKIAogCWhhbmRsZSA9IGt6YWxsb2Moc2l6ZW9mKCpoYW5kbGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGFuZGxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gdjRsMl9maF9pbml0KCZoYW5kbGUtPnZmaCwgdmRldik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZXQgPSB2NGwyX2V2ZW50X2luaXQoJmhhbmRsZS0+dmZoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLQotCXJldCA9IHY0bDJfZXZlbnRfYWxsb2MoJmhhbmRsZS0+dmZoLCA4KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLQorCXY0bDJfZmhfaW5pdCgmaGFuZGxlLT52ZmgsIHZkZXYpOwogCXY0bDJfZmhfYWRkKCZoYW5kbGUtPnZmaCk7CiAKIAloYW5kbGUtPmRldmljZSA9ICZ1dmMtPnZpZGVvOwpAQCAtMTQ5LDEwICsxMzcsNiBAQAogCiAJdXZjX2Z1bmN0aW9uX2Nvbm5lY3QodXZjKTsKIAlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JdjRsMl9maF9leGl0KCZoYW5kbGUtPnZmaCk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMzE0LDcgKzI5OCw3IEBACiAJCWlmIChzdWItPnR5cGUgPCBVVkNfRVZFTlRfRklSU1QgfHwgc3ViLT50eXBlID4gVVZDX0VWRU5UX0xBU1QpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gdjRsMl9ldmVudF9zdWJzY3JpYmUoJmhhbmRsZS0+dmZoLCBhcmcpOworCQlyZXR1cm4gdjRsMl9ldmVudF9zdWJzY3JpYmUoJmhhbmRsZS0+dmZoLCBhcmcsIDIpOwogCX0KIAogCWNhc2UgVklESU9DX1VOU1VCU0NSSUJFX0VWRU5UOgpAQCAtMzU0LDcgKzMzOCw3IEBACiAJc3RydWN0IHV2Y19maWxlX2hhbmRsZSAqaGFuZGxlID0gdG9fdXZjX2ZpbGVfaGFuZGxlKGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JcG9sbF93YWl0KGZpbGUsICZoYW5kbGUtPnZmaC5ldmVudHMtPndhaXQsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmaGFuZGxlLT52Zmgud2FpdCwgd2FpdCk7CiAJaWYgKHY0bDJfZXZlbnRfcGVuZGluZygmaGFuZGxlLT52ZmgpKQogCQltYXNrIHw9IFBPTExQUkk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCBiZjJjOGY2Li40YzMyY2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC0zNDMsNyArMzQzLDcgQEAKIAl1MzIJCQl0ZW1wOwogCXUzMgkJCXBvd2VyX29rYXk7CiAJaW50CQkJaTsKLQl1OAkJCXJlc3VtZV9uZWVkZWQgPSAwOworCXVuc2lnbmVkIGxvbmcJCXJlc3VtZV9uZWVkZWQgPSAwOwogCiAJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKIAkJbXNsZWVwKDUpOwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJCWlmICh0ZXN0X2JpdChpLCAmZWhjaS0+YnVzX3N1c3BlbmRlZCkgJiYKIAkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpIHsKIAkJCXRlbXAgfD0gUE9SVF9SRVNVTUU7Ci0JCQlyZXN1bWVfbmVlZGVkID0gMTsKKwkJCXNldF9iaXQoaSwgJnJlc3VtZV9uZWVkZWQpOwogCQl9CiAJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCX0KQEAgLTQzMSw4ICs0MzEsNyBAQAogCWkgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CiAJd2hpbGUgKGktLSkgewogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKLQkJaWYgKHRlc3RfYml0KGksICZlaGNpLT5idXNfc3VzcGVuZGVkKSAmJgotCQkJCSh0ZW1wICYgUE9SVF9TVVNQRU5EKSkgeworCQlpZiAodGVzdF9iaXQoaSwgJnJlc3VtZV9uZWVkZWQpKSB7CiAJCQl0ZW1wICY9IH4oUE9SVF9SV0NfQklUUyB8IFBPUlRfUkVTVU1FKTsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCQkJZWhjaV92ZGJnIChlaGNpLCAicmVzdW1lZCBwb3J0ICVkXG4iLCBpICsgMSk7CkBAIC0xMDQ2LDcgKzEwNDUsMTkgQEAKIAkJCWlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPiA1KQogCQkJCWdvdG8gZXJyb3I7CiAJCQllaGNpX3F1aWVzY2UoZWhjaSk7CisKKwkJCS8qIFB1dCBhbGwgZW5hYmxlZCBwb3J0cyBpbnRvIHN1c3BlbmQgKi8KKwkJCXdoaWxlIChwb3J0cy0tKSB7CisJCQkJdTMyIF9faW9tZW0gKnNyZWcgPQorCQkJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzW3BvcnRzXTsKKworCQkJCXRlbXAgPSBlaGNpX3JlYWRsKGVoY2ksIHNyZWcpICYgflBPUlRfUldDX0JJVFM7CisJCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wIHwgUE9SVF9TVVNQRU5ELAorCQkJCQkJCXNyZWcpOworCQkJfQogCQkJZWhjaV9oYWx0KGVoY2kpOworCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgc3RhdHVzX3JlZyk7CiAJCQl0ZW1wIHw9IHNlbGVjdG9yIDw8IDE2OwogCQkJZWhjaV93cml0ZWwoZWhjaSwgdGVtcCwgc3RhdHVzX3JlZyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwppbmRleCAwYzA1OGJlLi41NTVhNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDU1YTU3YzIuLjQ1MjQwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtOTgsNiArOTgsMTggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGRpc2FibGVfcHV0X3JlZ3VsYXRvcigKKwkJc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IE9NQVAzX0hTX1VTQl9QT1JUUyA7IGkrKykgeworCQlpZiAocGRhdGEtPnJlZ3VsYXRvcltpXSkgeworCQkJcmVndWxhdG9yX2Rpc2FibGUocGRhdGEtPnJlZ3VsYXRvcltpXSk7CisJCQlyZWd1bGF0b3JfcHV0KHBkYXRhLT5yZWd1bGF0b3JbaV0pOworCQl9CisJfQorfQogCiAvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCiAvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLwpAQCAtMjMxLDkgKzI0MywxMSBAQAogCW9tYXBfdXNiaHNfZGlzYWJsZShkZXYpOwogCiBlcnJfZW5hYmxlOgorCWRpc2FibGVfcHV0X3JlZ3VsYXRvcihwZGF0YSk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAogZXJyX2lvOgorCWlvdW5tYXAocmVncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjUzLDYgKzI2Nyw4IEBACiAKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCW9tYXBfdXNiaHNfZGlzYWJsZShkZXYpOworCWRpc2FibGVfcHV0X3JlZ3VsYXRvcihkZXYtPnBsYXRmb3JtX2RhdGEpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKIAl1c2JfcHV0X2hjZChoY2QpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXM1cC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXM1cC5jCmluZGV4IGIzOTU4YjMuLjllNzdmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zNXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktczVwLmMKQEAgLTg2LDYgKzg2LDcgQEAKIAkJZ290byBmYWlsX2hjZDsKIAl9CiAKKwlzNXBfZWhjaS0+aGNkID0gaGNkOwogCXM1cF9laGNpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2Job3N0Iik7CiAKIAlpZiAoSVNfRVJSKHM1cF9laGNpLT5jbGspKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggNTVkM2Q1OC4uODQwYmVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtMTU4Myw2ICsxNTgzLDkgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBzcGluZmxhZ3MpOworCXJldHZhbCA9IHVzYl9oY2RfY2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKIAogCXFoID0gdXJiLT5lcC0+aGNwcml2OwogCWlmICghcWgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggYTlkMzE1OS4uNjI5YTk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogCWlvdW5tYXAoYmFzZSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdCBlaGNpX2RtaV9ub2hhbmRvZmZfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBlaGNpX2RtaV9ub2hhbmRvZmZfdGFibGVbXSA9IHsKIAl7CiAJCS8qICBQZWdhdHJvbiBMdWNpZCAoRXhvUEMpICovCiAJCS5tYXRjaGVzID0gewpAQCAtODE3LDcgKzgxNyw3IEBACiAKIAkvKiBJZiB0aGUgQklPUyBvd25zIHRoZSBIQywgc2lnbmFsIHRoYXQgdGhlIE9TIHdhbnRzIGl0LCBhbmQgd2FpdCAqLwogCWlmICh2YWwgJiBYSENJX0hDX0JJT1NfT1dORUQpIHsKLQkJd3JpdGVsKHZhbCAmIFhIQ0lfSENfT1NfT1dORUQsIGJhc2UgKyBleHRfY2FwX29mZnNldCk7CisJCXdyaXRlbCh2YWwgfCBYSENJX0hDX09TX09XTkVELCBiYXNlICsgZXh0X2NhcF9vZmZzZXQpOwogCiAJCS8qIFdhaXQgZm9yIDUgc2Vjb25kcyB3aXRoIDEwIG1pY3Jvc2Vjb25kIHBvbGxpbmcgaW50ZXJ2YWwgKi8KIAkJdGltZW91dCA9IGhhbmRzaGFrZShiYXNlICsgZXh0X2NhcF9vZmZzZXQsIFhIQ0lfSENfQklPU19PV05FRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCAwYmU3ODhjLi4xZTk2ZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC00NjMsMTEgKzQ2MywxMiBAQAogCQkJCQkmJiAodGVtcCAmIFBPUlRfUE9XRVIpKQogCQkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX1NVU1BFTkQ7CiAJCX0KLQkJaWYgKCh0ZW1wICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9SRVNVTUUpIHsKKwkJaWYgKCh0ZW1wICYgUE9SVF9QTFNfTUFTSykgPT0gWERFVl9SRVNVTUUgJiYKKwkJCQkhREVWX1NVUEVSU1BFRUQodGVtcCkpIHsKIAkJCWlmICgodGVtcCAmIFBPUlRfUkVTRVQpIHx8ICEodGVtcCAmIFBPUlRfUEUpKQogCQkJCWdvdG8gZXJyb3I7Ci0JCQlpZiAoIURFVl9TVVBFUlNQRUVEKHRlbXApICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKLQkJCQkJCWJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0luZGV4XSkpIHsKKwkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsCisJCQkJCWJ1c19zdGF0ZS0+cmVzdW1lX2RvbmVbd0luZGV4XSkpIHsKIAkJCQl4aGNpX2RiZyh4aGNpLCAiUmVzdW1lIFVTQjIgcG9ydCAlZFxuIiwKIAkJCQkJd0luZGV4ICsgMSk7CiAJCQkJYnVzX3N0YXRlLT5yZXN1bWVfZG9uZVt3SW5kZXhdID0gMDsKQEAgLTQ4Nyw2ICs0ODgsMTQgQEAKIAkJCQl4aGNpX3JpbmdfZGV2aWNlKHhoY2ksIHNsb3RfaWQpOwogCQkJCWJ1c19zdGF0ZS0+cG9ydF9jX3N1c3BlbmQgfD0gMSA8PCB3SW5kZXg7CiAJCQkJYnVzX3N0YXRlLT5zdXNwZW5kZWRfcG9ydHMgJj0gfigxIDw8IHdJbmRleCk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogVGhlIHJlc3VtZSBoYXMgYmVlbiBzaWduYWxpbmcgZm9yIGxlc3MgdGhhbgorCQkJCSAqIDIwbXMuIFJlcG9ydCB0aGUgcG9ydCBzdGF0dXMgYXMgU1VTUEVORCwKKwkJCQkgKiBsZXQgdGhlIHVzYmNvcmUgY2hlY2sgcG9ydCBzdGF0dXMgYWdhaW4KKwkJCQkgKiBhbmQgY2xlYXIgcmVzdW1lIHNpZ25hbGluZyBsYXRlci4KKwkJCQkgKi8KKwkJCQlzdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9TVVNQRU5EOwogCQkJfQogCQl9CiAJCWlmICgodGVtcCAmIFBPUlRfUExTX01BU0spID09IFhERVZfVTAKQEAgLTY2NCw3ICs2NzMsNyBAQAogCQkJeGhjaV9kYmcoeGhjaSwgIlBPUlRTQyAlMDR4XG4iLCB0ZW1wKTsKIAkJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKIAkJCQlnb3RvIGVycm9yOwotCQkJaWYgKHRlbXAgJiBYREVWX1UzKSB7CisJCQlpZiAoKHRlbXAgJiBQT1JUX1BMU19NQVNLKSA9PSBYREVWX1UzKSB7CiAJCQkJaWYgKCh0ZW1wICYgUE9SVF9QRSkgPT0gMCkKIAkJCQkJZ290byBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggNzExM2QxNi4uNTQxMzlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC01MTQsOCArNTE0LDEyIEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyKTsKIH0KIAorLyogZmxpcF9jeWNsZSBtZWFucyBmbGlwIHRoZSBjeWNsZSBiaXQgb2YgYWxsIGJ1dCB0aGUgZmlyc3QgYW5kIGxhc3QgVFJCLgorICogKFRoZSBsYXN0IFRSQiBhY3R1YWxseSBwb2ludHMgdG8gdGhlIHJpbmcgZW5xdWV1ZSBwb2ludGVyLCB3aGljaCBpcyBub3QgcGFydAorICogb2YgdGhpcyBURC4pICBUaGlzIGlzIHVzZWQgdG8gcmVtb3ZlIHBhcnRpYWxseSBlbnF1ZXVlZCBpc29jIFREcyBmcm9tIGEgcmluZy4KKyAqLwogc3RhdGljIHZvaWQgdGRfdG9fbm9vcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKmVwX3JpbmcsCi0JCXN0cnVjdCB4aGNpX3RkICpjdXJfdGQpCisJCXN0cnVjdCB4aGNpX3RkICpjdXJfdGQsIGJvb2wgZmxpcF9jeWNsZSkKIHsKIAlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpjdXJfc2VnOwogCXVuaW9uIHhoY2lfdHJiICpjdXJfdHJiOwpAQCAtNTI4LDYgKzUzMiwxMiBAQAogCQkJICogbGVhdmUgdGhlIHBvaW50ZXJzIGludGFjdC4KIAkJCSAqLwogCQkJY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmPSBjcHVfdG9fbGUzMih+VFJCX0NIQUlOKTsKKwkJCS8qIEZsaXAgdGhlIGN5Y2xlIGJpdCAobGluayBUUkJzIGNhbid0IGJlIHRoZSBmaXJzdAorCQkJICogb3IgbGFzdCBUUkIpLgorCQkJICovCisJCQlpZiAoZmxpcF9jeWNsZSkKKwkJCQljdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdIF49CisJCQkJCWNwdV90b19sZTMyKFRSQl9DWUNMRSk7CiAJCQl4aGNpX2RiZyh4aGNpLCAiQ2FuY2VsICh1bmNoYWluKSBsaW5rIFRSQlxuIik7CiAJCQl4aGNpX2RiZyh4aGNpLCAiQWRkcmVzcyA9ICVwICgweCVsbHggZG1hKTsgIgogCQkJCQkiaW4gc2VnICVwICgweCVsbHggZG1hKVxuIiwKQEAgLTU0MSw2ICs1NTEsMTEgQEAKIAkJCWN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0gPSAwOwogCQkJLyogUHJlc2VydmUgb25seSB0aGUgY3ljbGUgYml0IG9mIHRoaXMgVFJCICovCiAJCQljdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdICY9IGNwdV90b19sZTMyKFRSQl9DWUNMRSk7CisJCQkvKiBGbGlwIHRoZSBjeWNsZSBiaXQgZXhjZXB0IG9uIHRoZSBmaXJzdCBvciBsYXN0IFRSQiAqLworCQkJaWYgKGZsaXBfY3ljbGUgJiYgY3VyX3RyYiAhPSBjdXJfdGQtPmZpcnN0X3RyYiAmJgorCQkJCQljdXJfdHJiICE9IGN1cl90ZC0+bGFzdF90cmIpCisJCQkJY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSBePQorCQkJCQljcHVfdG9fbGUzMihUUkJfQ1lDTEUpOwogCQkJY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSB8PSBjcHVfdG9fbGUzMigKIAkJCQlUUkJfVFlQRShUUkJfVFJfTk9PUCkpOwogCQkJeGhjaV9kYmcoeGhjaSwgIkNhbmNlbCBUUkIgJXAgKDB4JWxseCBkbWEpICIKQEAgLTcxOSwxNCArNzM0LDE0IEBACiAJCQkJCWN1cl90ZC0+dXJiLT5zdHJlYW1faWQsCiAJCQkJCWN1cl90ZCwgJmRlcV9zdGF0ZSk7CiAJCWVsc2UKLQkJCXRkX3RvX25vb3AoeGhjaSwgZXBfcmluZywgY3VyX3RkKTsKKwkJCXRkX3RvX25vb3AoeGhjaSwgZXBfcmluZywgY3VyX3RkLCBmYWxzZSk7CiByZW1vdmVfZmluaXNoZWRfdGQ6CiAJCS8qCiAJCSAqIFRoZSBldmVudCBoYW5kbGVyIHdvbid0IHNlZSBhIGNvbXBsZXRpb24gZm9yIHRoaXMgVEQgYW55bW9yZSwKIAkJICogc28gcmVtb3ZlIGl0IGZyb20gdGhlIGVuZHBvaW50IHJpbmcncyBURCBsaXN0LiAgS2VlcCBpdCBpbgogCQkgKiB0aGUgY2FuY2VsbGVkIFREIGxpc3QgZm9yIFVSQiBjb21wbGV0aW9uIGxhdGVyLgogCQkgKi8KLQkJbGlzdF9kZWwoJmN1cl90ZC0+dGRfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmN1cl90ZC0+dGRfbGlzdCk7CiAJfQogCWxhc3RfdW5saW5rZWRfdGQgPSBjdXJfdGQ7CiAJeGhjaV9zdG9wX3dhdGNoZG9nX3RpbWVyX2luX2lycSh4aGNpLCBlcCk7CkBAIC03NTQsNyArNzY5LDcgQEAKIAlkbyB7CiAJCWN1cl90ZCA9IGxpc3RfZW50cnkoZXAtPmNhbmNlbGxlZF90ZF9saXN0Lm5leHQsCiAJCQkJc3RydWN0IHhoY2lfdGQsIGNhbmNlbGxlZF90ZF9saXN0KTsKLQkJbGlzdF9kZWwoJmN1cl90ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZjdXJfdGQtPmNhbmNlbGxlZF90ZF9saXN0KTsKIAogCQkvKiBDbGVhbiB1cCB0aGUgY2FuY2VsbGVkIFVSQiAqLwogCQkvKiBEb2Vzbid0IG1hdHRlciB3aGF0IHdlIHBhc3MgZm9yIHN0YXR1cywgc2luY2UgdGhlIGNvcmUgd2lsbApAQCAtODYyLDkgKzg3Nyw5IEBACiAJCQkJY3VyX3RkID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+dGRfbGlzdCwKIAkJCQkJCXN0cnVjdCB4aGNpX3RkLAogCQkJCQkJdGRfbGlzdCk7Ci0JCQkJbGlzdF9kZWwoJmN1cl90ZC0+dGRfbGlzdCk7CisJCQkJbGlzdF9kZWxfaW5pdCgmY3VyX3RkLT50ZF9saXN0KTsKIAkJCQlpZiAoIWxpc3RfZW1wdHkoJmN1cl90ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpKQotCQkJCQlsaXN0X2RlbCgmY3VyX3RkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisJCQkJCWxpc3RfZGVsX2luaXQoJmN1cl90ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOwogCQkJCXhoY2lfZ2l2ZWJhY2tfdXJiX2luX2lycSh4aGNpLCBjdXJfdGQsCiAJCQkJCQktRVNIVVRET1dOLCAia2lsbGVkIik7CiAJCQl9CkBAIC04NzMsNyArODg4LDcgQEAKIAkJCQkJCSZ0ZW1wX2VwLT5jYW5jZWxsZWRfdGRfbGlzdCwKIAkJCQkJCXN0cnVjdCB4aGNpX3RkLAogCQkJCQkJY2FuY2VsbGVkX3RkX2xpc3QpOwotCQkJCWxpc3RfZGVsKCZjdXJfdGQtPmNhbmNlbGxlZF90ZF9saXN0KTsKKwkJCQlsaXN0X2RlbF9pbml0KCZjdXJfdGQtPmNhbmNlbGxlZF90ZF9saXN0KTsKIAkJCQl4aGNpX2dpdmViYWNrX3VyYl9pbl9pcnEoeGhjaSwgY3VyX3RkLAogCQkJCQkJLUVTSFVURE9XTiwgImtpbGxlZCIpOwogCQkJfQpAQCAtMTU2NSwxMCArMTU4MCwxMCBAQAogCQkJZWxzZQogCQkJCSpzdGF0dXMgPSAwOwogCQl9Ci0JCWxpc3RfZGVsKCZ0ZC0+dGRfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJnRkLT50ZF9saXN0KTsKIAkJLyogV2FzIHRoaXMgVEQgc2xhdGVkIHRvIGJlIGNhbmNlbGxlZCBidXQgY29tcGxldGVkIGFueXdheT8gKi8KIAkJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpKQotCQkJbGlzdF9kZWwoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisJCQlsaXN0X2RlbF9pbml0KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOwogCiAJCXVyYl9wcml2LT50ZF9jbnQrKzsKIAkJLyogR2l2ZWJhY2sgdGhlIHVyYiB3aGVuIGFsbCB0aGUgdGRzIGFyZSBjb21wbGV0ZWQgKi8KQEAgLTI1MDAsMTEgKzI1MTUsOCBAQAogCiAJaWYgKHRkX2luZGV4ID09IDApIHsKIAkJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChidXNfdG9faGNkKHVyYi0+ZGV2LT5idXMpLCB1cmIpOwotCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJeGhjaV91cmJfZnJlZV9wcml2KHhoY2ksIHVyYl9wcml2KTsKLQkJCXVyYi0+aGNwcml2ID0gTlVMTDsKKwkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJfQogCiAJdGQtPnVyYiA9IHVyYjsKQEAgLTI2NzIsNiArMjY4NCwxMCBAQAogewogCWludCBwYWNrZXRzX3RyYW5zZmVycmVkOwogCisJLyogT25lIFRSQiB3aXRoIGEgemVyby1sZW5ndGggZGF0YSBwYWNrZXQuICovCisJaWYgKHJ1bm5pbmdfdG90YWwgPT0gMCAmJiB0cmJfYnVmZl9sZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKIAkvKiBBbGwgdGhlIFRSQiBxdWV1ZWluZyBmdW5jdGlvbnMgZG9uJ3QgY291bnQgdGhlIGN1cnJlbnQgVFJCIGluCiAJICogcnVubmluZ190b3RhbC4KIAkgKi8KQEAgLTMxMTMsMjEgKzMxMjksMTYgQEAKIAkJc3RydWN0IHVyYiAqdXJiLCBpbnQgaSkKIHsKIAlpbnQgbnVtX3RyYnMgPSAwOwotCXU2NCBhZGRyLCB0ZF9sZW4sIHJ1bm5pbmdfdG90YWw7CisJdTY0IGFkZHIsIHRkX2xlbjsKIAogCWFkZHIgPSAodTY0KSAodXJiLT50cmFuc2Zlcl9kbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJdGRfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CiAKLQlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLSAoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKLQlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKLQlpZiAocnVubmluZ190b3RhbCAhPSAwKQorCW51bV90cmJzID0gRElWX1JPVU5EX1VQKHRkX2xlbiArIChhZGRyICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpLAorCQkJVFJCX01BWF9CVUZGX1NJWkUpOworCWlmIChudW1fdHJicyA9PSAwKQogCQludW1fdHJicysrOwogCi0Jd2hpbGUgKHJ1bm5pbmdfdG90YWwgPCB0ZF9sZW4pIHsKLQkJbnVtX3RyYnMrKzsKLQkJcnVubmluZ190b3RhbCArPSBUUkJfTUFYX0JVRkZfU0laRTsKLQl9Ci0KIAlyZXR1cm4gbnVtX3RyYnM7CiB9CiAKQEAgLTMyMjYsNiArMzIzNyw3IEBACiAJc3RhcnRfdHJiID0gJmVwX3JpbmctPmVucXVldWUtPmdlbmVyaWM7CiAJc3RhcnRfY3ljbGUgPSBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKIAorCXVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CiAJLyogUXVldWUgdGhlIGZpcnN0IFRSQiwgZXZlbiBpZiBpdCdzIHplcm8tbGVuZ3RoICovCiAJZm9yIChpID0gMDsgaSA8IG51bV90ZHM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdG90YWxfcGFja2V0X2NvdW50OwpAQCAtMzIzNyw5ICszMjQ5LDExIEBACiAJCWFkZHIgPSBzdGFydF9hZGRyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CiAJCXRkX2xlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOwogCQl0ZF9yZW1haW5fbGVuID0gdGRfbGVuOwotCQkvKiBGSVhNRTogSWdub3JpbmcgemVyby1sZW5ndGggcGFja2V0cywgY2FuIHRob3NlIGhhcHBlbj8gKi8KIAkJdG90YWxfcGFja2V0X2NvdW50ID0gcm91bmR1cCh0ZF9sZW4sCiAJCQkJbGUxNl90b19jcHUodXJiLT5lcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpOworCQkvKiBBIHplcm8tbGVuZ3RoIHRyYW5zZmVyIHN0aWxsIGludm9sdmVzIGF0IGxlYXN0IG9uZSBwYWNrZXQuICovCisJCWlmICh0b3RhbF9wYWNrZXRfY291bnQgPT0gMCkKKwkJCXRvdGFsX3BhY2tldF9jb3VudCsrOwogCQlidXJzdF9jb3VudCA9IHhoY2lfZ2V0X2J1cnN0X2NvdW50KHhoY2ksIHVyYi0+ZGV2LCB1cmIsCiAJCQkJdG90YWxfcGFja2V0X2NvdW50KTsKIAkJcmVzaWR1ZSA9IHhoY2lfZ2V0X2xhc3RfYnVyc3RfcGFja2V0X2NvdW50KHhoY2ksCkBAIC0zMjQ5LDEyICszMjYzLDEzIEBACiAKIAkJcmV0ID0gcHJlcGFyZV90cmFuc2Zlcih4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLCBlcF9pbmRleCwKIAkJCQl1cmItPnN0cmVhbV9pZCwgdHJic19wZXJfdGQsIHVyYiwgaSwgbWVtX2ZsYWdzKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKGkgPT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZ290byBjbGVhbnVwOworCQl9CiAKLQkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKIAkJdGQgPSB1cmJfcHJpdi0+dGRbaV07Ci0KIAkJZm9yIChqID0gMDsgaiA8IHRyYnNfcGVyX3RkOyBqKyspIHsKIAkJCXUzMiByZW1haW5kZXIgPSAwOwogCQkJZmllbGQgPSBUUkJfVEJDKGJ1cnN0X2NvdW50KSB8IFRSQl9UTEJQQyhyZXNpZHVlKTsKQEAgLTMzNDQsNiArMzM1OSwyNyBAQAogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCiAJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKK2NsZWFudXA6CisJLyogQ2xlYW4gdXAgYSBwYXJ0aWFsbHkgZW5xdWV1ZWQgaXNvYyB0cmFuc2Zlci4gKi8KKworCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJbGlzdF9kZWxfaW5pdCgmdXJiX3ByaXYtPnRkW2ldLT50ZF9saXN0KTsKKworCS8qIFVzZSB0aGUgZmlyc3QgVEQgYXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gdHVybiB0aGUgVERzIHdlJ3ZlIHF1ZXVlZAorCSAqIGludG8gTm8tb3BzIHdpdGggYSBzb2Z0d2FyZS1vd25lZCBjeWNsZSBiaXQuIFRoYXQgd2F5IHRoZSBoYXJkd2FyZQorCSAqIHdvbid0IGFjY2lkZW50YWxseSBzdGFydCBleGVjdXRpbmcgYm9ndXMgVERzIHdoZW4gd2UgcGFydGlhbGx5CisJICogb3ZlcndyaXRlIHRoZW0uICB0ZC0+Zmlyc3RfdHJiIGFuZCB0ZC0+c3RhcnRfc2VnIGFyZSBhbHJlYWR5IHNldC4KKwkgKi8KKwl1cmJfcHJpdi0+dGRbMF0tPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKKwkvKiBFdmVyeSBUUkIgZXhjZXB0IHRoZSBmaXJzdCAmIGxhc3Qgd2lsbCBoYXZlIGl0cyBjeWNsZSBiaXQgZmxpcHBlZC4gKi8KKwl0ZF90b19ub29wKHhoY2ksIGVwX3JpbmcsIHVyYl9wcml2LT50ZFswXSwgdHJ1ZSk7CisKKwkvKiBSZXNldCB0aGUgcmluZyBlbnF1ZXVlIGJhY2sgdG8gdGhlIGZpcnN0IFRSQiBhbmQgaXRzIGN5Y2xlIGJpdC4gKi8KKwllcF9yaW5nLT5lbnF1ZXVlID0gdXJiX3ByaXYtPnRkWzBdLT5maXJzdF90cmI7CisJZXBfcmluZy0+ZW5xX3NlZyA9IHVyYl9wcml2LT50ZFswXS0+c3RhcnRfc2VnOworCWVwX3JpbmctPmN5Y2xlX3N0YXRlID0gc3RhcnRfY3ljbGU7CisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoYnVzX3RvX2hjZCh1cmItPmRldi0+YnVzKSwgdXJiKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA3NjNmNDg0Li4zYTBmNjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMzQ1LDcgKzM0NSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+c3RhdHVzKTsKIAl4aGNpX2RiZyh4aGNpLCAib3AgcmVnIHN0YXR1cyA9IDB4JXhcbiIsIHRlbXApOwotCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYgfHwgKHhoY2ktPnhoY19zdGF0ZSAmIFhIQ0lfU1RBVEVfRFlJTkcpKSB7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZiB8fCAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgfHwKKwkJCSh4aGNpLT54aGNfc3RhdGUgJiBYSENJX1NUQVRFX0hBTFRFRCkpIHsKIAkJeGhjaV9kYmcoeGhjaSwgIkhXIGRpZWQsIHBvbGxpbmcgc3RvcHBlZC5cbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTkzOSw4ICs5NDAsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJaWYgKHhoY2ktPnhoY19zdGF0ZSAmIFhIQ0lfU1RBVEVfSEFMVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChjaGVja192aXJ0X2RldikgewotCQl4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAkJaWYgKCF1ZGV2LT5zbG90X2lkIHx8ICF4aGNpLT5kZXZzCiAJCQl8fCAheGhjaS0+ZGV2c1t1ZGV2LT5zbG90X2lkXSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInhIQ0kgJXMgY2FsbGVkIHdpdGggdW5hZGRyZXNzZWQgIgpAQCAtMTA4MSw4ICsxMDg1LDExIEBACiAJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKIAkJCXJldCA9IHhoY2lfY2hlY2tfbWF4cGFja2V0KHhoY2ksIHNsb3RfaWQsCiAJCQkJCWVwX2luZGV4LCB1cmIpOwotCQkJaWYgKHJldCA8IDApCisJCQlpZiAocmV0IDwgMCkgeworCQkJCXhoY2lfdXJiX2ZyZWVfcHJpdih4aGNpLCB1cmJfcHJpdik7CisJCQkJdXJiLT5oY3ByaXYgPSBOVUxMOwogCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAogCQkvKiBXZSBoYXZlIGEgc3BpbmxvY2sgYW5kIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIHdlIG11c3QgcGFzcwpAQCAtMTA5Myw2ICsxMTAwLDggQEAKIAkJCWdvdG8gZHlpbmc7CiAJCXJldCA9IHhoY2lfcXVldWVfY3RybF90eCh4aGNpLCBHRlBfQVRPTUlDLCB1cmIsCiAJCQkJc2xvdF9pZCwgZXBfaW5kZXgpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlX3ByaXY7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJnVyYi0+ZXAtPmRlc2MpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMTEzLDYgKzExMjIsOCBAQAogCQkJcmV0ID0geGhjaV9xdWV1ZV9idWxrX3R4KHhoY2ksIEdGUF9BVE9NSUMsIHVyYiwKIAkJCQkJc2xvdF9pZCwgZXBfaW5kZXgpOwogCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWVfcHJpdjsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KCZ1cmItPmVwLT5kZXNjKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTEyMCw2ICsxMTMxLDggQEAKIAkJCWdvdG8gZHlpbmc7CiAJCXJldCA9IHhoY2lfcXVldWVfaW50cl90eCh4aGNpLCBHRlBfQVRPTUlDLCB1cmIsCiAJCQkJc2xvdF9pZCwgZXBfaW5kZXgpOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlX3ByaXY7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMTEyNywxOCArMTE0MCwyMiBAQAogCQkJZ290byBkeWluZzsKIAkJcmV0ID0geGhjaV9xdWV1ZV9pc29jX3R4X3ByZXBhcmUoeGhjaSwgR0ZQX0FUT01JQywgdXJiLAogCQkJCXNsb3RfaWQsIGVwX2luZGV4KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZV9wcml2OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJfQogZXhpdDoKIAlyZXR1cm4gcmV0OwogZHlpbmc6Ci0JeGhjaV91cmJfZnJlZV9wcml2KHhoY2ksIHVyYl9wcml2KTsKLQl1cmItPmhjcHJpdiA9IE5VTEw7CiAJeGhjaV9kYmcoeGhjaSwgIkVwIDB4JXg6IFVSQiAlcCBzdWJtaXR0ZWQgZm9yICIKIAkJCSJub24tcmVzcG9uc2l2ZSB4SENJIGhvc3QuXG4iLAogCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCB1cmIpOworCXJldCA9IC1FU0hVVERPV047CitmcmVlX3ByaXY6CisJeGhjaV91cmJfZnJlZV9wcml2KHhoY2ksIHVyYl9wcml2KTsKKwl1cmItPmhjcHJpdiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAtRVNIVVRET1dOOworCXJldHVybiByZXQ7CiB9CiAKIC8qIEdldCB0aGUgcmlnaHQgcmluZyBmb3IgdGhlIGdpdmVuIFVSQi4KQEAgLTEyMzUsNiArMTI1MiwxMyBAQAogCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYgfHwgKHhoY2ktPnhoY19zdGF0ZSAmIFhIQ0lfU1RBVEVfSEFMVEVEKSkgewogCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgZnJlZWluZyBURC5cbiIpOwogCQl1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCQlmb3IgKGkgPSB1cmJfcHJpdi0+dGRfY250OyBpIDwgdXJiX3ByaXYtPmxlbmd0aDsgaSsrKSB7CisJCQl0ZCA9IHVyYl9wcml2LT50ZFtpXTsKKwkJCWlmICghbGlzdF9lbXB0eSgmdGQtPnRkX2xpc3QpKQorCQkJCWxpc3RfZGVsX2luaXQoJnRkLT50ZF9saXN0KTsKKwkJCWlmICghbGlzdF9lbXB0eSgmdGQtPmNhbmNlbGxlZF90ZF9saXN0KSkKKwkJCQlsaXN0X2RlbF9pbml0KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpOworCQl9CiAKIAkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xMjQyLDcgKzEyNjYsOCBAQAogCQl4aGNpX3VyYl9mcmVlX3ByaXYoeGhjaSwgdXJiX3ByaXYpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgeworCWlmICgoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgfHwKKwkJCSh4aGNpLT54aGNfc3RhdGUgJiBYSENJX1NUQVRFX0hBTFRFRCkpIHsKIAkJeGhjaV9kYmcoeGhjaSwgIkVwIDB4JXg6IFVSQiAlcCB0byBiZSBjYW5jZWxlZCBvbiAiCiAJCQkJIm5vbi1yZXNwb25zaXZlIHhIQ0kgaG9zdC5cbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLCB1cmIpOwpAQCAtMjY2NSw3ICsyNjkwLDEwIEBACiAJaW50IGksIHJldDsKIAogCXJldCA9IHhoY2lfY2hlY2tfYXJncyhoY2QsIHVkZXYsIE5VTEwsIDAsIHRydWUsIF9fZnVuY19fKTsKLQlpZiAocmV0IDw9IDApCisJLyogSWYgdGhlIGhvc3QgaXMgaGFsdGVkIGR1ZSB0byBkcml2ZXIgdW5sb2FkLCB3ZSBzdGlsbCBuZWVkIHRvIGZyZWUgdGhlCisJICogZGV2aWNlLgorCSAqLworCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVOT0RFVikKIAkJcmV0dXJuOwogCiAJdmlydF9kZXYgPSB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdOwpAQCAtMjY3OSw3ICsyNzA3LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCS8qIERvbid0IGRpc2FibGUgdGhlIHNsb3QgaWYgdGhlIGhvc3QgY29udHJvbGxlciBpcyBkZWFkLiAqLwogCXN0YXRlID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+c3RhdHVzKTsKLQlpZiAoc3RhdGUgPT0gMHhmZmZmZmZmZiB8fCAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykpIHsKKwlpZiAoc3RhdGUgPT0gMHhmZmZmZmZmZiB8fCAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgfHwKKwkJCSh4aGNpLT54aGNfc3RhdGUgJiBYSENJX1NUQVRFX0hBTFRFRCkpIHsKIAkJeGhjaV9mcmVlX3ZpcnRfZGV2aWNlKHhoY2ksIHVkZXYtPnNsb3RfaWQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA2MTkyYjQ1Li5mYzM0YjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0zLDkgKzMsNiBAQAogIyBmb3Igc2lsaWNvbiBiYXNlZCBvbiBNZW50b3IgR3JhcGhpY3MgSU5WRU5UUkEgZGVzaWducwogIwogCi1jb21tZW50ICJFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucyIKLQlkZXBlbmRzIG9uICFVU0IgJiYgVVNCX0dBREdFVD1uCi0KICMgKE0pSERSQyA9IChNdWx0aXBvaW50KSBIaWdoc3BlZWQgRHVhbC1Sb2xlIENvbnRyb2xsZXIKIGNvbmZpZyBVU0JfTVVTQl9IRFJDCiAJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0dBREdFVApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGFlOGMzOTYuLjVlN2NmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwppbmRleCAxNDlmM2YzLi4zMThmYjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCkBAIC0yMjYsOCArMjI2LDEwIEBACiAJc3RydWN0IGNwcGkJCSpjb250cm9sbGVyOwogCXZvaWQgX19pb21lbQkJKnRpYmFzZTsKIAlpbnQJCQlpOworCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAogCWNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywgc3RydWN0IGNwcGksIGNvbnRyb2xsZXIpOworCW11c2IgPSBjb250cm9sbGVyLT5tdXNiOwogCiAJdGliYXNlID0gY29udHJvbGxlci0+dGliYXNlOwogCS8qIERJU0FCTEUgSU5ESVZJRFVBTCBDSEFOTkVMIEludGVycnVwdHMgKi8KQEAgLTI4OSw5ICsyOTEsMTEgQEAKIAl1OAkJCWluZGV4OwogCXN0cnVjdCBjcHBpX2NoYW5uZWwJKmNwcGlfY2g7CiAJdm9pZCBfX2lvbWVtCQkqdGliYXNlOworCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAogCWNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywgc3RydWN0IGNwcGksIGNvbnRyb2xsZXIpOwogCXRpYmFzZSA9IGNvbnRyb2xsZXItPnRpYmFzZTsKKwltdXNiID0gY29udHJvbGxlci0+bXVzYjsKIAogCS8qIGVwMCBkb2Vzbid0IHVzZSBETUE7IHJlbWVtYmVyIGNwcGkgaW5kaWNlcyBhcmUgMC4uTi0xICovCiAJaW5kZXggPSBlcC0+ZXBudW0gLSAxOwpAQCAtMzM5LDcgKzM0Myw4IEBACiAJYyA9IGNvbnRhaW5lcl9vZihjaGFubmVsLCBzdHJ1Y3QgY3BwaV9jaGFubmVsLCBjaGFubmVsKTsKIAl0aWJhc2UgPSBjLT5jb250cm9sbGVyLT50aWJhc2U7CiAJaWYgKCFjLT5od19lcCkKLQkJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAicmVsZWFzaW5nIGlkbGUgRE1BIGNoYW5uZWwgJXBcbiIsIGMpOworCQlkZXZfZGJnKGMtPmNvbnRyb2xsZXItPm11c2ItPmNvbnRyb2xsZXIsCisJCQkicmVsZWFzaW5nIGlkbGUgRE1BIGNoYW5uZWwgJXBcbiIsIGMpOwogCWVsc2UgaWYgKCFjLT50cmFuc21pdCkKIAkJY29yZV9yeGlycV9lbmFibGUodGliYXNlLCBjLT5pbmRleCArIDEpOwogCkBAIC0zNTcsMTAgKzM2MiwxMSBAQAogCiAJbXVzYl9lcF9zZWxlY3QoYmFzZSwgYy0+aW5kZXggKyAxKTsKIAotCURCRyhsZXZlbCwgIlJYIERNQSVkJXM6ICVkIGxlZnQsIGNzciAlMDR4LCAiCi0JCQkiJTA4eCBIJTA4eCBTJTA4eCBDJTA4eCwgIgotCQkJIkIlMDh4IEwlMDh4ICUwOHggLi4gJTA4eCIKLQkJCSJcbiIsCisJZGV2X2RiZyhjLT5jb250cm9sbGVyLT5tdXNiLT5jb250cm9sbGVyLAorCQkiUlggRE1BJWQlczogJWQgbGVmdCwgY3NyICUwNHgsICIKKwkJIiUwOHggSCUwOHggUyUwOHggQyUwOHgsICIKKwkJIkIlMDh4IEwlMDh4ICUwOHggLi4gJTA4eCIKKwkJIlxuIiwKIAkJYy0+aW5kZXgsIHRhZywKIAkJbXVzYl9yZWFkbChjLT5jb250cm9sbGVyLT50aWJhc2UsCiAJCQlEQVZJTkNJX1JYQ1BQSV9CVUZDTlQwX1JFRyArIDQgKiBjLT5pbmRleCksCkBAIC0zODcsMTAgKzM5MywxMSBAQAogCiAJbXVzYl9lcF9zZWxlY3QoYmFzZSwgYy0+aW5kZXggKyAxKTsKIAotCURCRyhsZXZlbCwgIlRYIERNQSVkJXM6IGNzciAlMDR4LCAiCi0JCQkiSCUwOHggUyUwOHggQyUwOHggJTA4eCwgIgotCQkJIkYlMDh4IEwlMDh4IC4uICUwOHgiCi0JCQkiXG4iLAorCWRldl9kYmcoYy0+Y29udHJvbGxlci0+bXVzYi0+Y29udHJvbGxlciwKKwkJIlRYIERNQSVkJXM6IGNzciAlMDR4LCAiCisJCSJIJTA4eCBTJTA4eCBDJTA4eCAlMDh4LCAiCisJCSJGJTA4eCBMJTA4eCAuLiAlMDh4IgorCQkiXG4iLAogCQljLT5pbmRleCwgdGFnLAogCQltdXNiX3JlYWR3KGMtPmh3X2VwLT5yZWdzLCBNVVNCX1RYQ1NSKSwKIApAQCAtMTAyMiw2ICsxMDI5LDcgQEAKIAlpbnQJCQkJaTsKIAlkbWFfYWRkcl90CQkJc2FmZTJhY2s7CiAJdm9pZCBfX2lvbWVtCQkJKnJlZ3MgPSByeC0+aHdfZXAtPnJlZ3M7CisJc3RydWN0IG11c2IJCQkqbXVzYiA9IGNwcGktPm11c2I7CiAKIAljcHBpX2R1bXBfcngoNiwgcngsICIvSyIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA2NjhlZWVmLi5iM2MwNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTE3Miw3ICsxNzIsOCBAQAogI2VuZGlmCiAKIC8qIFRVU0IgbWFwcGluZzogImZsYXQiIHBsdXMgZXAwIHNwZWNpYWwgY2FzZXMgKi8KLSNpZglkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwX01PRFVMRSkKICNkZWZpbmUgbXVzYl9lcF9zZWxlY3QoX21iYXNlLCBfZXBudW0pIFwKIAltdXNiX3dyaXRlYigoX21iYXNlKSwgTVVTQl9JTkRFWCwgKF9lcG51bSkpCiAjZGVmaW5lCU1VU0JfRVBfT0ZGU0VUCQkJTVVTQl9UVVNCX09GRlNFVApAQCAtMjQxLDcgKzI0Miw4IEBACiAJdm9pZCBfX2lvbWVtCQkqZmlmbzsKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwogCi0jaWZkZWYgQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfVFVTQjYwMTApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMF9NT0RVTEUpCiAJdm9pZCBfX2lvbWVtCQkqY29uZjsKICNlbmRpZgogCkBAIC0yNTgsNyArMjYwLDggQEAKIAlzdHJ1Y3QgZG1hX2NoYW5uZWwJKnR4X2NoYW5uZWw7CiAJc3RydWN0IGRtYV9jaGFubmVsCSpyeF9jaGFubmVsOwogCi0jaWZkZWYgQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfVFVTQjYwMTApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMF9NT0RVTEUpCiAJLyogVFVTQiBoYXMgImFzeW5jaHJvbm91cyIgYW5kICJzeW5jaHJvbm91cyIgZG1hIG1vZGVzICovCiAJZG1hX2FkZHJfdAkJZmlmb19hc3luYzsKIAlkbWFfYWRkcl90CQlmaWZvX3N5bmM7CkBAIC0zNTYsNyArMzU5LDggQEAKIAl2b2lkIF9faW9tZW0JCSpjdHJsX2Jhc2U7CiAJdm9pZCBfX2lvbWVtCQkqbXJlZ3M7CiAKLSNpZmRlZiBDT05GSUdfVVNCX01VU0JfVFVTQjYwMTAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwX01PRFVMRSkKIAlkbWFfYWRkcl90CQlhc3luYzsKIAlkbWFfYWRkcl90CQlzeW5jOwogCXZvaWQgX19pb21lbQkJKnN5bmNfdmE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggYjY3YTA2Mi4uZTgxODIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMTY5OCw2ICsxNjk4LDggQEAKIAogCWlzX29uID0gISFpc19vbjsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMobXVzYi0+Y29udHJvbGxlcik7CisKIAkvKiBOT1RFOiB0aGlzIGFzc3VtZXMgd2UgYXJlIHNlbnNpbmcgdmJ1czsgd2UnZCByYXRoZXIKIAkgKiBub3QgcHVsbHVwIHVubGVzcyB0aGUgQi1zZXNzaW9uIGlzIGFjdGl2ZS4KIAkgKi8KQEAgLTE3MDcsNiArMTcwOSw5IEBACiAJCW11c2JfcHVsbHVwKG11c2IsIGlzX29uKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOworCisJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg1MSw2ICsxODU2LDcgQEAKIAogCXJldHVybiAwOwogZXJyOgorCW11c2ItPmcuZGV2LnBhcmVudCA9IE5VTEw7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm11c2ItPmcuZGV2KTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTg1OCw3ICsxODY0LDggQEAKIHZvaWQgbXVzYl9nYWRnZXRfY2xlYW51cChzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKIAl1c2JfZGVsX2dhZGdldF91ZGMoJm11c2ItPmcpOwotCWRldmljZV91bnJlZ2lzdGVyKCZtdXNiLT5nLmRldik7CisJaWYgKG11c2ItPmcuZGV2LnBhcmVudCkKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJm11c2ItPmcuZGV2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCmluZGV4IDgyNDEwNzAuLjAzZjI2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaApAQCAtMjM0LDcgKzIzNCw4IEBACiAjZGVmaW5lIE1VU0JfVEVTVE1PREUJCTB4MEYJLyogOCBiaXQgKi8KIAogLyogR2V0IG9mZnNldCBmb3IgYSBnaXZlbiBGSUZPIGZyb20gbXVzYi0+bXJlZ3MgKi8KLSNpZmRlZglDT05GSUdfVVNCX01VU0JfVFVTQjYwMTAKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMCkgfHwJXAorCWRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwX01PRFVMRSkKICNkZWZpbmUgTVVTQl9GSUZPX09GRlNFVChlcG51bSkJKDB4MjAwICsgKChlcG51bSkgKiAweDIwKSkKICNlbHNlCiAjZGVmaW5lIE1VU0JfRklGT19PRkZTRVQoZXBudW0pCSgweDIwICsgKChlcG51bSkgKiA0KSkKQEAgLTI5NSw3ICsyOTYsOCBAQAogI2RlZmluZSBNVVNCX0ZMQVRfT0ZGU0VUKF9lcG51bSwgX29mZnNldCkJXAogCSgweDEwMCArICgweDEwKihfZXBudW0pKSArIChfb2Zmc2V0KSkKIAotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9UVVNCNjAxMAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX1RVU0I2MDEwKSB8fAlcCisJZGVmaW5lZChDT05GSUdfVVNCX01VU0JfVFVTQjYwMTBfTU9EVUxFKQogLyogVFVTQjYwMTAgRVAwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgc3BlY2lhbCAqLwogI2RlZmluZSBNVVNCX1RVU0JfT0ZGU0VUKF9lcG51bSwgX29mZnNldCkJXAogCSgweDEwICsgX29mZnNldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYyBiL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYwppbmRleCA5ZWVjNDFmLi5lYzE0ODAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTBfb21hcC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKaW5kZXggYzc4NGU2Yy4uYjY3YjRiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogCiAjaW5jbHVkZSAibXVzYl9jb3JlLmgiCisjaW5jbHVkZSAidHVzYjYwMTAuaCIKIAogI2RlZmluZSB0b19jaGRhdChjKQkJKChzdHJ1Y3QgdHVzYl9vbWFwX2RtYV9jaCAqKShjKS0+cHJpdmF0ZV9kYXRhKQogCkBAIC04OSw3ICs5MCw3IEBACiAJdTMyCQlyZWcgPSBtdXNiX3JlYWRsKGNoZGF0LT50YmFzZSwgVFVTQl9ETUFfRVBfTUFQKTsKIAogCWlmIChyZWcgIT0gMCkgewotCQlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJlcCVpIGRtYXJlcTAgaXMgYnVzeSBmb3IgZXAlaVxuIiwKKwkJZGV2X2RiZyhjaGRhdC0+bXVzYi0+Y29udHJvbGxlciwgImVwJWkgZG1hcmVxMCBpcyBidXN5IGZvciBlcCVpXG4iLAogCQkJY2hkYXQtPmVwbnVtLCByZWcgJiAweGYpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwX2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi91eDUwMF9kbWEuYwppbmRleCBjZWNhY2U0Li5lZjQzMzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3V4NTAwX2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvdXg1MDBfZG1hLmMKQEAgLTY1LDcgKzY1LDggQEAKIAlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGh3X2VwLT5tdXNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEQkcoNCwgIkRNQSB0eCB0cmFuc2ZlciBkb25lIG9uIGh3X2VwPSVkXG4iLCBod19lcC0+ZXBudW0pOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIkRNQSB0eCB0cmFuc2ZlciBkb25lIG9uIGh3X2VwPSVkXG4iLAorCQlod19lcC0+ZXBudW0pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAl1eDUwMF9jaGFubmVsLT5jaGFubmVsLmFjdHVhbF9sZW4gPSB1eDUwMF9jaGFubmVsLT5jdXJfbGVuOwpAQCAtODQsNyArODUsOCBAQAogCXN0cnVjdCBtdXNiICptdXNiID0gaHdfZXAtPm11c2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURCRyg0LCAiRE1BIHJ4IHRyYW5zZmVyIGRvbmUgb24gaHdfZXA9JWRcbiIsIGh3X2VwLT5lcG51bSk7CisJZGV2X2RiZyhtdXNiLT5jb250cm9sbGVyLCAiRE1BIHJ4IHRyYW5zZmVyIGRvbmUgb24gaHdfZXA9JWRcbiIsCisJCWh3X2VwLT5lcG51bSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXV4NTAwX2NoYW5uZWwtPmNoYW5uZWwuYWN0dWFsX2xlbiA9IHV4NTAwX2NoYW5uZWwtPmN1cl9sZW47CkBAIC0xMTYsOSArMTE4LDExIEBACiAJZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aDsKIAlkbWFfYWRkcl90IHVzYl9maWZvX2FkZHIgPSAoTVVTQl9GSUZPX09GRlNFVChod19lcC0+ZXBudW0pICsKIAkJCQkJdXg1MDBfY2hhbm5lbC0+Y29udHJvbGxlci0+cGh5X2Jhc2UpOworCXN0cnVjdCBtdXNiICptdXNiID0gdXg1MDBfY2hhbm5lbC0+Y29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOwogCi0JREJHKDQsICJwYWNrZXRfc3o9JWQsIG1vZGU9JWQsIGRtYV9hZGRyPTB4JXgsIGxlbj0lZCBpc190eD0lZFxuIiwKLQkJCXBhY2tldF9zeiwgbW9kZSwgZG1hX2FkZHIsIGxlbiwgdXg1MDBfY2hhbm5lbC0+aXNfdHgpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwKKwkJInBhY2tldF9zej0lZCwgbW9kZT0lZCwgZG1hX2FkZHI9MHgleCwgbGVuPSVkIGlzX3R4PSVkXG4iLAorCQlwYWNrZXRfc3osIG1vZGUsIGRtYV9hZGRyLCBsZW4sIHV4NTAwX2NoYW5uZWwtPmlzX3R4KTsKIAogCXV4NTAwX2NoYW5uZWwtPmN1cl9sZW4gPSBsZW47CiAKQEAgLTEzMywxNSArMTM3LDEzIEBACiAJCQkJCURNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOwogCiAJc2xhdmVfY29uZi5kaXJlY3Rpb24gPSBkaXJlY3Rpb247Ci0JaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKLQkJc2xhdmVfY29uZi5zcmNfYWRkciA9IHVzYl9maWZvX2FkZHI7Ci0JCXNsYXZlX2NvbmYuc3JjX2FkZHJfd2lkdGggPSBhZGRyX3dpZHRoOwotCQlzbGF2ZV9jb25mLnNyY19tYXhidXJzdCA9IDE2OwotCX0gZWxzZSB7Ci0JCXNsYXZlX2NvbmYuZHN0X2FkZHIgPSB1c2JfZmlmb19hZGRyOwotCQlzbGF2ZV9jb25mLmRzdF9hZGRyX3dpZHRoID0gYWRkcl93aWR0aDsKLQkJc2xhdmVfY29uZi5kc3RfbWF4YnVyc3QgPSAxNjsKLQl9CisJc2xhdmVfY29uZi5zcmNfYWRkciA9IHVzYl9maWZvX2FkZHI7CisJc2xhdmVfY29uZi5zcmNfYWRkcl93aWR0aCA9IGFkZHJfd2lkdGg7CisJc2xhdmVfY29uZi5zcmNfbWF4YnVyc3QgPSAxNjsKKwlzbGF2ZV9jb25mLmRzdF9hZGRyID0gdXNiX2ZpZm9fYWRkcjsKKwlzbGF2ZV9jb25mLmRzdF9hZGRyX3dpZHRoID0gYWRkcl93aWR0aDsKKwlzbGF2ZV9jb25mLmRzdF9tYXhidXJzdCA9IDE2OworCiAJZG1hX2NoYW4tPmRldmljZS0+ZGV2aWNlX2NvbnRyb2woZG1hX2NoYW4sIERNQV9TTEFWRV9DT05GSUcsCiAJCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpICZzbGF2ZV9jb25mKTsKIApAQCAtMTY2LDYgKzE2OCw3IEBACiAJc3RydWN0IHV4NTAwX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCiAJCQlzdHJ1Y3QgdXg1MDBfZG1hX2NvbnRyb2xsZXIsIGNvbnRyb2xsZXIpOwogCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IE5VTEw7CisJc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wcml2YXRlX2RhdGE7CiAJdTggY2hfbnVtID0gaHdfZXAtPmVwbnVtIC0gMTsKIAl1MzIgbWF4X2NoOwogCkBAIC0xOTIsNyArMTk1LDcgQEAKIAl1eDUwMF9jaGFubmVsLT5od19lcCA9IGh3X2VwOwogCXV4NTAwX2NoYW5uZWwtPmlzX2FsbG9jYXRlZCA9IDE7CiAKLQlEQkcoNywgImh3X2VwPSVkLCBpc190eD0weCV4LCBjaGFubmVsPSVkXG4iLAorCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImh3X2VwPSVkLCBpc190eD0weCV4LCBjaGFubmVsPSVkXG4iLAogCQlod19lcC0+ZXBudW0sIGlzX3R4LCBjaF9udW0pOwogCiAJcmV0dXJuICYodXg1MDBfY2hhbm5lbC0+Y2hhbm5lbCk7CkBAIC0yMDEsOCArMjA0LDkgQEAKIHN0YXRpYyB2b2lkIHV4NTAwX2RtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewogCXN0cnVjdCB1eDUwMF9kbWFfY2hhbm5lbCAqdXg1MDBfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IHV4NTAwX2NoYW5uZWwtPmNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKIAotCURCRyg3LCAiY2hhbm5lbD0lZFxuIiwgdXg1MDBfY2hhbm5lbC0+Y2hfbnVtKTsKKwlkZXZfZGJnKG11c2ItPmNvbnRyb2xsZXIsICJjaGFubmVsPSVkXG4iLCB1eDUwMF9jaGFubmVsLT5jaF9udW0pOwogCiAJaWYgKHV4NTAwX2NoYW5uZWwtPmlzX2FsbG9jYXRlZCkgewogCQl1eDUwMF9jaGFubmVsLT5pc19hbGxvY2F0ZWQgPSAwOwpAQCAtMjUyLDggKzI1Niw4IEBACiAJdm9pZCBfX2lvbWVtICplcGlvID0gbXVzYi0+ZW5kcG9pbnRzW3V4NTAwX2NoYW5uZWwtPmh3X2VwLT5lcG51bV0ucmVnczsKIAl1MTYgY3NyOwogCi0JREJHKDQsICJjaGFubmVsPSVkLCBpc190eD0lZFxuIiwgdXg1MDBfY2hhbm5lbC0+Y2hfbnVtLAotCQkJCQkJdXg1MDBfY2hhbm5lbC0+aXNfdHgpOworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgImNoYW5uZWw9JWQsIGlzX3R4PSVkXG4iLAorCQl1eDUwMF9jaGFubmVsLT5jaF9udW0sIHV4NTAwX2NoYW5uZWwtPmlzX3R4KTsKIAogCWlmIChjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKIAkJaWYgKHV4NTAwX2NoYW5uZWwtPmlzX3R4KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCmluZGV4IGJhNzlkYmYuLmNiMmQ0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICoKICAqLworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTc2LDcgKzc3LDcgQEAKIAkJc3RydWN0IHVzYmhzZ19ncHJpdiwgbW9kKQogCiAjZGVmaW5lIF9fdXNiaHNnX2Zvcl9lYWNoX3VlcChzdGFydCwgcG9zLCBnLCBpKQlcCi0JZm9yIChpID0gc3RhcnQsIHBvcyA9IChnKS0+dWVwOwkJXAorCWZvciAoaSA9IHN0YXJ0LCBwb3MgPSAoZyktPnVlcCArIGk7CVwKIAkgICAgIGkgPCAoZyktPnVlcF9zaXplOwkJCVwKIAkgICAgIGkrKywgcG9zID0gKGcpLT51ZXAgKyBpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IDJlMDZiOTAuLjVmYzEzZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIHN0YXRpYyBpbnQgICBmdGRpX210eG9yYl9oYWNrX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgIGZ0ZGlfTkRJX2RldmljZV9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgICBmdGRpX3N0bWNsaXRlX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfOHUyMjMyY19wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkICBmdGRpX1VTQl9VSVJUX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIHZvaWQgIGZ0ZGlfSEVfVElSQTFfc2V0dXAoc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdik7CiAKQEAgLTEyOCw2ICsxMjksMTAgQEAKIAkucHJvYmUJPSBmdGRpX3N0bWNsaXRlX3Byb2JlLAogfTsKIAorc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpXzh1MjIzMmNfcXVpcmsgPSB7CisJLnByb2JlCT0gZnRkaV84dTIyMzJjX3Byb2JlLAorfTsKKwogLyoKICAqIFRoZSA4VTIzMkFNIGhhcyB0aGUgc2FtZSBBUEkgYXMgdGhlIHNpbyBleGNlcHQgZm9yOgogICogLSBpdCBjYW4gc3VwcG9ydCBNVUNIIGhpZ2hlciBiYXVkcmF0ZXM7IHVwIHRvOgpAQCAtMTUxLDYgKzE1Niw3IEBACiAgKiAvc3lzL2J1cy91c2IvZnRkaV9zaW8vbmV3X2lkLCB0aGVuIHNlbmQgcGF0Y2gvcmVwb3J0IQogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1pFSVRDT05UUk9MX1RBR1RSQUNFX01JRkFSRV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NUSV9NSU5JX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ1RJX05BTk9fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BTUMyMzJfUElEKSB9LApAQCAtMTc3LDcgKzE4Myw4IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV84VTIzMkFNX0FMVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzIzMlJMX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMjMyQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjIzMkNfUElEKSAsCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV84dTIyMzJjX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzQyMzJIX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfMjMySF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01JQ1JPX0NIQU1FTEVPTl9QSUQpIH0sCkBAIC0xMTcxLDcgKzExNzgsNyBAQAogCWNhc2UgRlQyMjMySDogLyogRlQyMjMySCBjaGlwICovCiAJY2FzZSBGVDQyMzJIOiAvKiBGVDQyMzJIIGNoaXAgKi8KIAljYXNlIEZUMjMySDogIC8qIEZUMjMySCBjaGlwICovCi0JCWlmICgoYmF1ZCA8PSAxMjAwMDAwMCkgJiAoYmF1ZCA+PSAxMjAwKSkgeworCQlpZiAoKGJhdWQgPD0gMTIwMDAwMDApICYmIChiYXVkID49IDEyMDApKSB7CiAJCQlkaXZfdmFsdWUgPSBmdGRpXzIyMzJoX2JhdWRfdG9fZGl2aXNvcihiYXVkKTsKIAkJfSBlbHNlIGlmIChiYXVkIDwgMTIwMCkgewogCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IoYmF1ZCk7CkBAIC0xMjA1LDcgKzEyMTIsMTAgQEAKIAl1cmJfaW5kZXhfdmFsdWUgPSBnZXRfZnRkaV9kaXZpc29yKHR0eSwgcG9ydCk7CiAJdXJiX3ZhbHVlID0gKF9fdTE2KXVyYl9pbmRleF92YWx1ZTsKIAl1cmJfaW5kZXggPSAoX191MTYpKHVyYl9pbmRleF92YWx1ZSA+PiAxNik7Ci0JaWYgKHByaXYtPmludGVyZmFjZSkgewkvKiBGVDIyMzJDICovCisJaWYgKChwcml2LT5jaGlwX3R5cGUgPT0gRlQyMjMyQykgfHwgKHByaXYtPmNoaXBfdHlwZSA9PSBGVDIyMzJIKSB8fAorCQkocHJpdi0+Y2hpcF90eXBlID09IEZUNDIzMkgpIHx8IChwcml2LT5jaGlwX3R5cGUgPT0gRlQyMzJIKSkgeworCQkvKiBQcm9iYWJseSB0aGUgQk0gdHlwZSBuZWVkcyB0aGUgTVNCIG9mIHRoZSBlbmNvZGVkIGZyYWN0aW9uYWwKKwkJICogZGl2aWRlciBhbHNvIG1vdmVkIGxpa2UgZm9yIHRoZSBjaGlwcyBhYm92ZS4gQW55IGluZm9zPyAqLwogCQl1cmJfaW5kZXggPSAoX191MTYpKCh1cmJfaW5kZXggPDwgOCkgfCBwcml2LT5pbnRlcmZhY2UpOwogCX0KIApAQCAtMTczMyw2ICsxNzQzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV84dTIyMzJjX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZXJpYWwtPmRldjsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3RyY21wKHVkZXYtPm1hbnVmYWN0dXJlciwgIkNBTEFPIFN5c3RlbXMiKSA9PSAwKQorCQlyZXR1cm4gZnRkaV9qdGFnX3Byb2JlKHNlcmlhbCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEZpcnN0IGFuZCBzZWNvbmQgcG9ydCBvbiBTVE1DTGl0ZWFkYXB0b3JzIGlzIHJlc2VydmVkIGZvciBKVEFHIGludGVyZmFjZQogICogYW5kIHRoZSBmb3J0aCBwb3J0IGZvciBwaW8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCAxOTE1NmQxLi5iZjUyMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC0xMTU5LDQgKzExNTksOCBAQAogLyogVVNCLU5hbm8tNDg1Ki8KICNkZWZpbmUgRlRESV9DVElfTkFOT19QSUQJMHhGNjBCCiAKLQorLyoKKyAqIFplaXRDb250cm9sIGNhcmRzeXN0ZW1zIEdtYkggcmZpZC1yZWFkZXJzIGh0dHA6Ly96ZWl0Y29ucm9sLmRlCisgKi8KKy8qIFRhZ1RyYWNlciBNSUZBUkUqLworI2RlZmluZSBGVERJX1pFSVRDT05UUk9MX1RBR1RSQUNFX01JRkFSRV9QSUQJMHhGN0MwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNjBiMjVkOC4uZmUyMmU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTQ4LDYgKzE0OCwxMiBAQAogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LNDUwNQkJCTB4MTQ2NAogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LMzc2NQkJCTB4MTQ2NQogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FMTRBQwkJCTB4MTRBQworI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LMzgwNgkJCTB4MTRBRQorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LNDYwNQkJCTB4MTRDNgorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LMzc3MAkJCTB4MTRDOQorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LMzc3MQkJCTB4MTRDQQorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LNDUxMAkJCTB4MTRDQgorI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9LNDUxMQkJCTB4MTRDQwogI2RlZmluZSBIVUFXRUlfUFJPRFVDVF9FVFMxMjIwCQkJMHgxODAzCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UzNTMJCQkweDE1MDYKIApAQCAtNDEyLDYgKzQxOCw1NiBAQAogI2RlZmluZSBTQU1TVU5HX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgICAgICAgMHgwNGU4CiAjZGVmaW5lIFNBTVNVTkdfUFJPRFVDVF9HVF9CMzczMCAgICAgICAgICAgICAgICAweDY4ODkKIAorLyogWVVHQSBwcm9kdWN0cyAgd3d3Lnl1Z2EtaW5mby5jb20qLworI2RlZmluZSBZVUdBX1ZFTkRPUl9JRAkJCQkweDI1N0EKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NFTTYwMAkJCTB4MTYwMQorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0VNNjEwCQkJMHgxNjAyCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DRU01MDAJCQkweDE2MDMKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NFTTUxMAkJCTB4MTYwNAorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0VNODAwCQkJMHgxNjA1CisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DRU05MDAJCQkweDE2MDYKKworI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0VVODE4CQkJMHgxNjA3CisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DRVU4MTYJCQkweDE2MDgKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NFVTgyOAkJCTB4MTYwOQorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0VVODI2CQkJMHgxNjBBCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DRVU1MTgJCQkweDE2MEIKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NFVTUxNgkJCTB4MTYwQworI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0VVNTI4CQkJMHgxNjBECisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DRVU1MjYJCQkweDE2MEYKKworI2RlZmluZSBZVUdBX1BST0RVQ1RfQ1dNNjAwCQkJMHgyNjAxCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DV002MTAJCQkweDI2MDIKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NXTTUwMAkJCTB4MjYwMworI2RlZmluZSBZVUdBX1BST0RVQ1RfQ1dNNTEwCQkJMHgyNjA0CisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DV004MDAJCQkweDI2MDUKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NXTTkwMAkJCTB4MjYwNgorCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DV1U3MTgJCQkweDI2MDcKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NXVTcxNgkJCTB4MjYwOAorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ1dVNzI4CQkJMHgyNjA5CisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DV1U3MjYJCQkweDI2MEEKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NXVTUxOAkJCTB4MjYwQgorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ1dVNTE2CQkJMHgyNjBDCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DV1U1MjgJCQkweDI2MEQKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NXVTUyNgkJCTB4MjYwRgorCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DTE02MDAJCQkweDI2MDEKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NMTTYxMAkJCTB4MjYwMgorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0xNNTAwCQkJMHgyNjAzCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DTE01MTAJCQkweDI2MDQKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NMTTgwMAkJCTB4MjYwNQorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0xNOTAwCQkJMHgyNjA2CisKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NMVTcxOAkJCTB4MjYwNworI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0xVNzE2CQkJMHgyNjA4CisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DTFU3MjgJCQkweDI2MDkKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NMVTcyNgkJCTB4MjYwQQorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0xVNTE4CQkJMHgyNjBCCisjZGVmaW5lIFlVR0FfUFJPRFVDVF9DTFU1MTYJCQkweDI2MEMKKyNkZWZpbmUgWVVHQV9QUk9EVUNUX0NMVTUyOAkJCTB4MjYwRAorI2RlZmluZSBZVUdBX1BST0RVQ1RfQ0xVNTI2CQkJMHgyNjBGCisKIC8qIHNvbWUgZGV2aWNlcyBpbnRlcmZhY2VzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdWUgdG8gYSBudW1iZXIgb2YgcmVhc29ucyAqLwogZW51bSBvcHRpb25fYmxhY2tsaXN0X3JlYXNvbiB7CiAJCU9QVElPTl9CTEFDS0xJU1RfTk9ORSA9IDAsCkBAIC01NDcsNiArNjAzLDE2IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9LMzc2NSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0VUUzEyMjAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTRBQywgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0szODA2LCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfSzQ2MDUsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9LMzc3MCwgMHhmZiwgMHgwMiwgMHgzMSkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0szNzcwLCAweGZmLCAweDAyLCAweDMyKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfSzM3NzEsIDB4ZmYsIDB4MDIsIDB4MzEpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9LMzc3MSwgMHhmZiwgMHgwMiwgMHgzMikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0s0NTEwLCAweGZmLCAweDAxLCAweDMxKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfSzQ1MTAsIDB4ZmYsIDB4MDEsIDB4MzIpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9LNDUxMSwgMHhmZiwgMHgwMSwgMHgzMSkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0s0NTExLCAweGZmLCAweDAxLCAweDMyKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTM1MywgMHhmZiwgMHgwMSwgMHgwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjY0MCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwKQEAgLTk5Myw2ICsxMDU5LDQ4IEBACiAJeyBVU0JfREVWSUNFKENFTE9UX1ZFTkRPUl9JRCwgQ0VMT1RfUFJPRFVDVF9DVDY4ME0pIH0sIC8qIENULTY1MCBDRE1BIDQ1MCAxeEVWRE8gbW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoT05EQV9WRU5ET1JfSUQsIE9OREFfTVQ4MjVVUCkgfSwgLyogT05EQSBNVDgyNVVQIG1vZGVtICovCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX0dUX0IzNzMwLCBVU0JfQ0xBU1NfQ0RDX0RBVEEsIDB4MDAsIDB4MDApIH0sIC8qIFNhbXN1bmcgR1QtQjM3MzAgTFRFIFVTQiBtb2RlbS4qLworCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NFTTYwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DRU02MTApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0VNNTAwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NFTTUxMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DRU04MDApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0VNOTAwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NFVTgxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DRVU4MTYpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0VVODI4KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NFVTgyNikgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DRVU1MTgpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0VVNTE2KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NFVTUyOCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DRVU1MjYpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ1dNNjAwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NXTTYxMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DV001MDApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ1dNNTEwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NXTTgwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DV005MDApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ1dVNzE4KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NXVTcxNikgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DV1U3MjgpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ1dVNzI2KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NXVTUxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DV1U1MTYpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ1dVNTI4KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NXVTUyNikgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DTE02MDApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0xNNjEwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NMTTUwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DTE01MTApIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0xNODAwKSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NMTTkwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DTFU3MTgpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0xVNzE2KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NMVTcyOCkgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DTFU3MjYpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0xVNTE4KSB9LAorCXsgVVNCX0RFVklDRShZVUdBX1ZFTkRPUl9JRCwgWVVHQV9QUk9EVUNUX0NMVTUxNikgfSwKKwl7IFVTQl9ERVZJQ0UoWVVHQV9WRU5ET1JfSUQsIFlVR0FfUFJPRFVDVF9DTFU1MjgpIH0sCisJeyBVU0JfREVWSUNFKFlVR0FfVkVORE9SX0lELCBZVUdBX1BST0RVQ1RfQ0xVNTI2KSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBvcHRpb25faWRzKTsKQEAgLTExMjIsMTEgKzEyMzAsMTMgQEAKIAkJc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAweGZmKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIERvbid0IGJpbmQgbmV0d29yayBpbnRlcmZhY2VzIG9uIEh1YXdlaSBLMzc2NSAmIEs0NTA1ICovCisJLyogRG9uJ3QgYmluZCBuZXR3b3JrIGludGVyZmFjZXMgb24gSHVhd2VpIEszNzY1LCBLNDUwNSAmIEs0NjA1ICovCiAJaWYgKHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IEhVQVdFSV9WRU5ET1JfSUQgJiYKIAkJKHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBIVUFXRUlfUFJPRFVDVF9LMzc2NSB8fAotCQkJc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IEhVQVdFSV9QUk9EVUNUX0s0NTA1KSAmJgotCQlzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAxKQorCQkJc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IEhVQVdFSV9QUk9EVUNUX0s0NTA1IHx8CisJCQlzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gSFVBV0VJX1BST0RVQ1RfSzQ2MDUpICYmCisJCShzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAxIHx8CisJCQlzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBEb24ndCBiaW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9uIFNhbXN1bmcgR1QtQjM3MzAsIGl0IGlzIGhhbmRsZWQgYnkgYSBzZXBhcmF0ZSBtb2R1bGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKaW5kZXggNTRhOWRhYi4uYWVjY2M3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIwMyl9LAkvKiBHZW5lcmljIEdvYmkgTW9kZW0gZGV2aWNlICovCiAJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMjIpfSwJLyogR2VuZXJpYyBHb2JpIE1vZGVtIGRldmljZSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MDA4KX0sCS8qIEdlbmVyaWMgR29iaSBRREwgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkwMDkpfSwJLyogR2VuZXJpYyBHb2JpIE1vZGVtIGRldmljZSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjAxKX0sCS8qIEdlbmVyaWMgR29iaSBRREwgZGV2aWNlICovCiAJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMjEpfSwJLyogR2VuZXJpYyBHb2JpIFFETCBkZXZpY2UgKi8KIAl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIzMSl9LAkvKiBHZW5lcmljIEdvYmkgUURMIGRldmljZSAqLwpAQCAtNzgsNiArNzksNyBAQAogCXtVU0JfREVWSUNFKDB4MTE5OSwgMHg5MDA4KX0sCS8qIFNpZXJyYSBXaXJlbGVzcyBHb2JpIDIwMDAgTW9kZW0gZGV2aWNlIChWVDc3MykgKi8KIAl7VVNCX0RFVklDRSgweDExOTksIDB4OTAwOSl9LAkvKiBTaWVycmEgV2lyZWxlc3MgR29iaSAyMDAwIE1vZGVtIGRldmljZSAoVlQ3NzMpICovCiAJe1VTQl9ERVZJQ0UoMHgxMTk5LCAweDkwMGEpfSwJLyogU2llcnJhIFdpcmVsZXNzIEdvYmkgMjAwMCBNb2RlbSBkZXZpY2UgKFZUNzczKSAqLworCXtVU0JfREVWSUNFKDB4MTE5OSwgMHg5MDExKX0sICAgLyogU2llcnJhIFdpcmVsZXNzIEdvYmkgMjAwMCBNb2RlbSBkZXZpY2UgKE1DODMwNSkgKi8KIAl7VVNCX0RFVklDRSgweDE2ZDgsIDB4ODAwMSl9LAkvKiBDTURUZWNoIEdvYmkgMjAwMCBRREwgZGV2aWNlIChWVTkyMikgKi8KIAl7VVNCX0RFVklDRSgweDE2ZDgsIDB4ODAwMil9LAkvKiBDTURUZWNoIEdvYmkgMjAwMCBNb2RlbSBkZXZpY2UgKFZVOTIyKSAqLwogCXtVU0JfREVWSUNFKDB4MDVjNiwgMHg5MjA0KX0sCS8qIEdvYmkgMjAwMCBRREwgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBjY2ZmMzQ4Li4zMDQxYTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTE5ODgsNiArMTk4OCwxNiBAQAogCQkiTWljcm8gTWluaSAxR0IiLAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAorLyoKKyAqIE5pY2sgQm93bGVyIDxuYm93bGVyQGVsbGlwdGljdGVjaC5jb20+CisgKiBTQ1NJIHN0YWNrIHNwYW1zIChvdGhlcndpc2UgaGFybWxlc3MpIGVycm9yIG1lc3NhZ2VzLgorICovCitVTlVTVUFMX0RFViggIDB4YzI1MSwgMHg0MDAzLCAweDAxMDAsIDB4MDEwMCwKKwkJIktlaWwgU29mdHdhcmUsIEluYy4iLAorCQkiVjJNIE1vdGhlckJvYXJkIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9UX0xPQ0tBQkxFKSwKKwogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggMWU1NGI4Yi4uMjc4YWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0zMzUsNiArMzM1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIGJhY2tsaWdodCBkcml2ZW4gYnkgYSBOWFAgUENGNTA2MzMgTUZELCBzYXkgWSBoZXJlIHRvCiAJICBlbmFibGUgaXRzIGRyaXZlci4KIAorY29uZmlnIEJBQ0tMSUdIVF9BQVQyODcwCisJdHJpc3RhdGUgIkFuYWxvZ2ljVGVjaCBBQVQyODcwIEJhY2tsaWdodCIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgTUZEX0FBVDI4NzBfQ09SRQorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgQW5hbG9naWNUZWNoIEFBVDI4NzAgc2F5IFkgdG8gZW5hYmxlIHRoZQorCSAgYmFja2xpZ2h0IGRyaXZlci4KKwogZW5kaWYgIyBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAKIGVuZGlmICMgQkFDS0xJR0hUX0xDRF9TVVBQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IGJmMWRkOTIuLmZkZDFmYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0zOCw0ICszOCw1IEBACiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEUDg4NzApCSs9IGFkcDg4NzBfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF84OFBNODYwWCkgKz0gODhwbTg2MHhfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QQ0Y1MDYzMykJKz0gcGNmNTA2MzMtYmFja2xpZ2h0Lm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQUFUMjg3MCkgKz0gYWF0Mjg3MF9ibC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FhdDI4NzBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FhdDI4NzBfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFmMWVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWF0Mjg3MF9ibC5jCkBAIC0wLDAgKzEsMjQ2IEBACisvKgorICogbGludXgvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWF0Mjg3MF9ibC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IEppbiBQYXJrIDxqaW55b3VuZ3BAbnZpZGlhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYWF0Mjg3MC5oPgorCitzdHJ1Y3QgYWF0Mjg3MF9ibF9kcml2ZXJfZGF0YSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7CisKKwlpbnQgY2hhbm5lbHM7CisJaW50IG1heF9jdXJyZW50OworCWludCBicmlnaHRuZXNzOyAvKiBjdXJyZW50IGJyaWdodG5lc3MgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGFhdDI4NzBfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWF0Mjg3MF9ibF9kcml2ZXJfZGF0YSAqYWF0Mjg3MF9ibCwKKwkJCQkgICAgIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGFhdDI4NzBfYmwtPmJkOworCWludCB2YWw7CisKKwl2YWwgPSBicmlnaHRuZXNzICogKGFhdDI4NzBfYmwtPm1heF9jdXJyZW50IC0gMSk7CisJdmFsIC89IGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFhdDI4NzBfYmxfZW5hYmxlKHN0cnVjdCBhYXQyODcwX2JsX2RyaXZlcl9kYXRhICphYXQyODcwX2JsKQoreworCXN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAKKwkJCT0gZGV2X2dldF9kcnZkYXRhKGFhdDI4NzBfYmwtPnBkZXYtPmRldi5wYXJlbnQpOworCisJcmV0dXJuIGFhdDI4NzAtPndyaXRlKGFhdDI4NzAsIEFBVDI4NzBfQkxfQ0hfRU4sCisJCQkgICAgICAodTgpYWF0Mjg3MF9ibC0+Y2hhbm5lbHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhYXQyODcwX2JsX2Rpc2FibGUoc3RydWN0IGFhdDI4NzBfYmxfZHJpdmVyX2RhdGEgKmFhdDI4NzBfYmwpCit7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MAorCQkJPSBkZXZfZ2V0X2RydmRhdGEoYWF0Mjg3MF9ibC0+cGRldi0+ZGV2LnBhcmVudCk7CisKKwlyZXR1cm4gYWF0Mjg3MC0+d3JpdGUoYWF0Mjg3MCwgQUFUMjg3MF9CTF9DSF9FTiwgMHgwKTsKK30KKworc3RhdGljIGludCBhYXQyODcwX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgYWF0Mjg3MF9ibF9kcml2ZXJfZGF0YSAqYWF0Mjg3MF9ibCA9IGRldl9nZXRfZHJ2ZGF0YSgmYmQtPmRldik7CisJc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCA9CisJCQlkZXZfZ2V0X2RydmRhdGEoYWF0Mjg3MF9ibC0+cGRldi0+ZGV2LnBhcmVudCk7CisJaW50IGJyaWdodG5lc3MgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpbnQgcmV0OworCisJaWYgKChicmlnaHRuZXNzIDwgMCkgfHwgKGJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA8IGJyaWdodG5lc3MpKSB7CisJCWRldl9lcnIoJmJkLT5kZXYsICJpbnZhbGlkIGJyaWdodG5lc3MsICVkXG4iLCBicmlnaHRuZXNzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZygmYmQtPmRldiwgImJyaWdodG5lc3M9JWQsIHBvd2VyPSVkLCBzdGF0ZT0lZFxuIiwKKwkJIGJkLT5wcm9wcy5icmlnaHRuZXNzLCBiZC0+cHJvcHMucG93ZXIsIGJkLT5wcm9wcy5zdGF0ZSk7CisKKwlpZiAoKGJkLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKSB8fAorCQkJKGJkLT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykgfHwKKwkJCShiZC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkpCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0ID0gYWF0Mjg3MC0+d3JpdGUoYWF0Mjg3MCwgQUFUMjg3MF9CTE0sCisJCQkgICAgICh1OClhYXQyODcwX2JyaWdodG5lc3MoYWF0Mjg3MF9ibCwgYnJpZ2h0bmVzcykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJyaWdodG5lc3MgPT0gMCkgeworCQlyZXQgPSBhYXQyODcwX2JsX2Rpc2FibGUoYWF0Mjg3MF9ibCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKGFhdDI4NzBfYmwtPmJyaWdodG5lc3MgPT0gMCkgeworCQlyZXQgPSBhYXQyODcwX2JsX2VuYWJsZShhYXQyODcwX2JsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWFhdDI4NzBfYmwtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9ibF9jaGVja19mYihzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIHN0cnVjdCBmYl9pbmZvICpmaSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFhdDI4NzBfYmxfb3BzID0geworCS5vcHRpb25zID0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLAorCS5nZXRfYnJpZ2h0bmVzcyA9IGFhdDI4NzBfYmxfZ2V0X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgPSBhYXQyODcwX2JsX3VwZGF0ZV9zdGF0dXMsCisJLmNoZWNrX2ZiID0gYWF0Mjg3MF9ibF9jaGVja19mYiwKK307CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9ibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhYXQyODcwX2JsX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFhdDI4NzBfYmxfZHJpdmVyX2RhdGEgKmFhdDI4NzBfYmw7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOworCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyBwcm9wczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBkZXYtPmlkICE9IEFBVDI4NzBfSURfQkwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBkZXZpY2UgSUQsICVkXG4iLCBwZGV2LT5pZCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWFhdDI4NzBfYmwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWF0Mjg3MF9ibF9kcml2ZXJfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghYWF0Mjg3MF9ibCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWF0Mjg3MCBiYWNrbGlnaHRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CisKKwlwcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoImFhdDI4NzAtYmFja2xpZ2h0IiwgJnBkZXYtPmRldiwKKwkJCQkgICAgICAgYWF0Mjg3MF9ibCwgJmFhdDI4NzBfYmxfb3BzLCAmcHJvcHMpOworCWlmIChJU19FUlIoYmQpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgYWxsb2NhdGUgbWVtb3J5IGZvciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihiZCk7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KKworCWFhdDI4NzBfYmwtPnBkZXYgPSBwZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFhdDI4NzBfYmwpOworCisJYWF0Mjg3MF9ibC0+YmQgPSBiZDsKKworCWlmIChwZGF0YS0+Y2hhbm5lbHMgPiAwKQorCQlhYXQyODcwX2JsLT5jaGFubmVscyA9IHBkYXRhLT5jaGFubmVsczsKKwllbHNlCisJCWFhdDI4NzBfYmwtPmNoYW5uZWxzID0gQUFUMjg3MF9CTF9DSF9BTEw7CisKKwlpZiAocGRhdGEtPm1heF9jdXJyZW50ID4gMCkKKwkJYWF0Mjg3MF9ibC0+bWF4X2N1cnJlbnQgPSBwZGF0YS0+bWF4X2N1cnJlbnQ7CisJZWxzZQorCQlhYXQyODcwX2JsLT5tYXhfY3VycmVudCA9IEFBVDI4NzBfQ1VSUkVOVF8yN185OworCisJaWYgKHBkYXRhLT5tYXhfYnJpZ2h0bmVzcyA+IDApCisJCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IHBkYXRhLT5tYXhfYnJpZ2h0bmVzczsKKwllbHNlCisJCWJkLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKKworCWFhdDI4NzBfYmwtPmJyaWdodG5lc3MgPSAwOworCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJYmQtPnByb3BzLmJyaWdodG5lc3MgPSBiZC0+cHJvcHMubWF4X2JyaWdodG5lc3M7CisKKwlyZXQgPSBhYXQyODcwX2JsX3VwZGF0ZV9zdGF0dXMoYmQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplXG4iKTsKKwkJZ290byBvdXRfYmxfZGV2X3VucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9ibF9kZXZfdW5yZWdpc3RlcjoKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmQpOworb3V0X2tmcmVlOgorCWtmcmVlKGFhdDI4NzBfYmwpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWF0Mjg3MF9ibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWF0Mjg3MF9ibF9kcml2ZXJfZGF0YSAqYWF0Mjg3MF9ibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGFhdDI4NzBfYmwtPmJkOworCisJYmQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gMDsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmQpOworCWtmcmVlKGFhdDI4NzBfYmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFhdDI4NzBfYmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImFhdDI4NzAtYmFja2xpZ2h0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWF0Mjg3MF9ibF9wcm9iZSwKKwkucmVtb3ZlCQk9IGFhdDI4NzBfYmxfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWF0Mjg3MF9ibF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWF0Mjg3MF9ibF9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKGFhdDI4NzBfYmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhYXQyODcwX2JsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWF0Mjg3MF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWF0Mjg3MF9ibF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2dpY1RlY2ggQUFUMjg3MCBCYWNrbGlnaHQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkppbiBQYXJrIDxqaW55b3VuZ3BAbnZpZGlhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYwppbmRleCAwNWE4ODMyLi5kMDY4ODZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA4ODcwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg3MF9ibC5jCkBAIC0xMDA5LDQgKzEwMDksNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQURQODg3MCBCYWNrbGlnaHQgZHJpdmVyIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDg4NzAtYmFja2xpZ2h0Iik7CitNT0RVTEVfQUxJQVMoImkyYzphZHA4ODcwLWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwppbmRleCA4MGQyOTJmLi43MzYzYzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9iYWNrbGlnaHQuaD4KICNlbmRpZgogCi1zdGF0aWMgY29uc3QgY2hhciBjb25zdCAqYmFja2xpZ2h0X3R5cGVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYmFja2xpZ2h0X3R5cGVzW10gPSB7CiAJW0JBQ0tMSUdIVF9SQVddID0gInJhdyIsCiAJW0JBQ0tMSUdIVF9QTEFURk9STV0gPSAicGxhdGZvcm0iLAogCVtCQUNLTElHSFRfRklSTVdBUkVdID0gImZpcm13YXJlIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2VwOTN4eF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4X2JsLmMKaW5kZXggOWYxZTM4OS4uYjA1ODI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4X2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZXA5M3h4X2JsLmMKQEAgLTExLDcgKzExLDcgQEAKICAqIEJSSUdIVCwgb24gdGhlIENpcnJ1cyBFUDkzMDcsIEVQOTMxMiwgYW5kIEVQOTMxNSBwcm9jZXNzb3JzLgogICovCiAKLQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3B3bV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKaW5kZXggYjhmMzhlYy4uOGI1YjJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvcHdtX2JsLmMKQEAgLTI4LDYgKzI4LDggQEAKIAl1bnNpZ25lZCBpbnQJCWx0aF9icmlnaHRuZXNzOwogCWludAkJCSgqbm90aWZ5KShzdHJ1Y3QgZGV2aWNlICosCiAJCQkJCSAgaW50IGJyaWdodG5lc3MpOworCXZvaWQJCQkoKm5vdGlmeV9hZnRlcikoc3RydWN0IGRldmljZSAqLAorCQkJCQlpbnQgYnJpZ2h0bmVzcyk7CiAJaW50CQkJKCpjaGVja19mYikoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZmJfaW5mbyAqKTsKIH07CiAKQEAgLTU1LDYgKzU3LDEwIEBACiAJCXB3bV9jb25maWcocGItPnB3bSwgYnJpZ2h0bmVzcywgcGItPnBlcmlvZCk7CiAJCXB3bV9lbmFibGUocGItPnB3bSk7CiAJfQorCisJaWYgKHBiLT5ub3RpZnlfYWZ0ZXIpCisJCXBiLT5ub3RpZnlfYWZ0ZXIocGItPmRldiwgYnJpZ2h0bmVzcyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA1LDYgKzExMSw3IEBACiAKIAlwYi0+cGVyaW9kID0gZGF0YS0+cHdtX3BlcmlvZF9uczsKIAlwYi0+bm90aWZ5ID0gZGF0YS0+bm90aWZ5OworCXBiLT5ub3RpZnlfYWZ0ZXIgPSBkYXRhLT5ub3RpZnlfYWZ0ZXI7CiAJcGItPmNoZWNrX2ZiID0gZGF0YS0+Y2hlY2tfZmI7CiAJcGItPmx0aF9icmlnaHRuZXNzID0gZGF0YS0+bHRoX2JyaWdodG5lc3MgKgogCQkoZGF0YS0+cHdtX3BlcmlvZF9ucyAvIGRhdGEtPm1heF9icmlnaHRuZXNzKTsKQEAgLTE3Miw2ICsxNzksOCBAQAogCQlwYi0+bm90aWZ5KHBiLT5kZXYsIDApOwogCXB3bV9jb25maWcocGItPnB3bSwgMCwgcGItPnBlcmlvZCk7CiAJcHdtX2Rpc2FibGUocGItPnB3bSk7CisJaWYgKHBiLT5ub3RpZnlfYWZ0ZXIpCisJCXBiLT5ub3RpZnlfYWZ0ZXIocGItPmRldiwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMKaW5kZXggZmRkNWQ0YWUuLjRlODg4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jCkBAIC01MDQsMTQgKzUwNCwxOCBAQAogCQlyZXR1cm4gMDsKIAogCXIgPSBvbWFwZHNzX2RzaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOwotCWlmIChyKQotCQlnb3RvIGVycjsKKwlpZiAocikgeworCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgRFNJXG4iKTsKKwkJZ290byBlcnIxOworCX0KIAogCW9tYXBkc3NfZHNpX3ZjX2VuYWJsZV9ocyhkc3NkZXYsIHRkLT5jaGFubmVsLCB0cnVlKTsKIAogCXIgPSBfdGFhbF9lbmFibGVfdGUoZHNzZGV2LCB0cnVlKTsKLQlpZiAocikKLQkJZ290byBlcnI7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJmYWlsZWQgdG8gcmUtZW5hYmxlIFRFIik7CisJCWdvdG8gZXJyMjsKKwl9CiAKIAllbmFibGVfaXJxKGdwaW9fdG9faXJxKHBhbmVsX2RhdGEtPmV4dF90ZV9ncGlvKSk7CiAKQEAgLTUyMSwxMyArNTI1LDE1IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyOgotCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZXhpdCBVTFBTIGZhaWxlZCIpOworZXJyMjoKKwlkZXZfZXJyKCZkc3NkZXYtPmRldiwgImZhaWxlZCB0byBleGl0IFVMUFMiKTsKKwogCXIgPSB0YWFsX3BhbmVsX3Jlc2V0KGRzc2Rldik7Ci0KLQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHBhbmVsX2RhdGEtPmV4dF90ZV9ncGlvKSk7Ci0JdGQtPnVscHNfZW5hYmxlZCA9IGZhbHNlOwotCisJaWYgKCFyKSB7CisJCWVuYWJsZV9pcnEoZ3Bpb190b19pcnEocGFuZWxfZGF0YS0+ZXh0X3RlX2dwaW8pKTsKKwkJdGQtPnVscHNfZW5hYmxlZCA9IGZhbHNlOworCX0KK2VycjE6CiAJdGFhbF9xdWV1ZV91bHBzX3dvcmsoZHNzZGV2KTsKIAogCXJldHVybiByOwpAQCAtMTI0MSwxMSArMTI0Nyw4IEBACiAJaW50IHI7CiAKIAlyID0gdGFhbF9kY3Nfd3JpdGVfMCh0ZCwgRENTX0RJU1BMQVlfT0ZGKTsKLQlpZiAoIXIpIHsKKwlpZiAoIXIpCiAJCXIgPSB0YWFsX3NsZWVwX2luKHRkKTsKLQkJLyogSEFDSzogd2FpdCBhIGJpdCBzbyB0aGF0IHRoZSBtZXNzYWdlIGdvZXMgdGhyb3VnaCAqLwotCQltc2xlZXAoMTApOwotCX0KIAogCWlmIChyKSB7CiAJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LApAQCAtMTMxNyw4ICsxMzIwLDExIEBACiAJZHNpX2J1c19sb2NrKGRzc2Rldik7CiAKIAlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkgewotCQl0YWFsX3dha2VfdXAoZHNzZGV2KTsKLQkJdGFhbF9wb3dlcl9vZmYoZHNzZGV2KTsKKwkJaW50IHI7CisKKwkJciA9IHRhYWxfd2FrZV91cChkc3NkZXYpOworCQlpZiAoIXIpCisJCQl0YWFsX3Bvd2VyX29mZihkc3NkZXYpOwogCX0KIAogCWRzaV9idXNfdW5sb2NrKGRzc2Rldik7CkBAIC0xODk3LDIwICsxOTAzLDYgQEAKIAltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCB0YWFsX3NldF91cGRhdGVfbW9kZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSkKLXsKLQlpZiAobW9kZSAhPSBPTUFQX0RTU19VUERBVEVfTUFOVUFMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdGFhbF9nZXRfdXBkYXRlX21vZGUoCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX01BTlVBTDsKLX0KLQogc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgdGFhbF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHRhYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2V4aXRfcCh0YWFsX3JlbW92ZSksCkBAIC0xOTIwLDkgKzE5MTIsNiBAQAogCS5zdXNwZW5kCT0gdGFhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdGFhbF9yZXN1bWUsCiAKLQkuc2V0X3VwZGF0ZV9tb2RlID0gdGFhbF9zZXRfdXBkYXRlX21vZGUsCi0JLmdldF91cGRhdGVfbW9kZSA9IHRhYWxfZ2V0X3VwZGF0ZV9tb2RlLAotCiAJLnVwZGF0ZQkJPSB0YWFsX3VwZGF0ZSwKIAkuc3luYwkJPSB0YWFsX3N5bmMsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9LY29uZmlnCmluZGV4IDZiM2UyZGEuLjBkMTI1MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvS2NvbmZpZwpAQCAtMTE3LDE4ICsxMTcsNiBAQAogCSAgTWF4IEZDSyBpcyAxNzNNSHosIHNvIHRoaXMgZG9lc24ndCB3b3JrIGlmIHlvdXIgUENLCiAJICBpcyB2ZXJ5IGhpZ2guCiAKLWNvbmZpZyBPTUFQMl9EU1NfU0xFRVBfQkVGT1JFX1JFU0VUCi0JYm9vbCAiU2xlZXAgNTBtcyBiZWZvcmUgRFNTIHJlc2V0IgotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEZvciBzb21lIHVua25vd24gcmVhc29uIHdlIG1heSBnZXQgU1lOQ19MT1NUIGVycm9ycyBmcm9tIHRoZSBkaXNwbGF5Ci0JICBzdWJzeXN0ZW0gYXQgaW5pdGlhbGl6YXRpb24gdGltZSBpZiB3ZSBkb24ndCBzbGVlcCBiZWZvcmUgcmVzZXR0aW5nCi0JICB0aGUgRFNTLiBTZWUgdGhlIHNvdXJjZSAoZHNzLmMpIGZvciBtb3JlIGNvbW1lbnRzLgotCi0JICBIb3dldmVyLCA1MG1zIGlzIHF1aXRlIGxvbmcgdGltZSB0byBzbGVlcCwgYW5kIHdpdGggc29tZQotCSAgY29uZmlndXJhdGlvbnMgdGhlIFNZTkNfTE9TVCBtYXkgbmV2ZXIgaGFwcGVuLCBzbyB0aGUgc2xlZXAgY2FuCi0JICBiZSBkaXNhYmxlZCBoZXJlLgotCiBjb25maWcgT01BUDJfRFNTX1NMRUVQX0FGVEVSX1ZFTkNfUkVTRVQKIAlib29sICJTbGVlcCAyMG1zIGFmdGVyIFZFTkMgcmVzZXQiCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMKaW5kZXggM2RhNDI2Ny4uNzY4MjFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2NvcmUuYwpAQCAtMTgzLDggKzE4MywxMSBAQAogCQlnb3RvIGVycl9kc3M7CiAJfQogCi0JLyoga2VlcCBjbG9ja3MgZW5hYmxlZCB0byBwcmV2ZW50IGNvbnRleHQgc2F2ZXMvcmVzdG9yZXMgZHVyaW5nIGluaXQgKi8KLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlyID0gZGlzcGNfaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKKwlpZiAocikgeworCQlEU1NFUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIGRpc3BjIHBsYXRmb3JtIGRyaXZlclxuIik7CisJCWdvdG8gZXJyX2Rpc3BjOworCX0KIAogCXIgPSByZmJpX2luaXRfcGxhdGZvcm1fZHJpdmVyKCk7CiAJaWYgKHIpIHsKQEAgLTE5MiwxMiArMTk1LDYgQEAKIAkJZ290byBlcnJfcmZiaTsKIAl9CiAKLQlyID0gZGlzcGNfaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKLQlpZiAocikgewotCQlEU1NFUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIGRpc3BjIHBsYXRmb3JtIGRyaXZlclxuIik7Ci0JCWdvdG8gZXJyX2Rpc3BjOwotCX0KLQogCXIgPSB2ZW5jX2luaXRfcGxhdGZvcm1fZHJpdmVyKCk7CiAJaWYgKHIpIHsKIAkJRFNTRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB2ZW5jIHBsYXRmb3JtIGRyaXZlclxuIik7CkBAIC0yMzgsOCArMjM1LDYgQEAKIAkJCXBkYXRhLT5kZWZhdWx0X2RldmljZSA9IGRzc2RldjsKIAl9CiAKLQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3JlZ2lzdGVyOgpAQCAtMjY4LDExICsyNjMsMTEgQEAKIAogCWRzc191bmluaXRpYWxpemVfZGVidWdmcygpOwogCi0JdmVuY191bmluaXRfcGxhdGZvcm1fZHJpdmVyKCk7Ci0JZGlzcGNfdW5pbml0X3BsYXRmb3JtX2RyaXZlcigpOwotCXJmYmlfdW5pbml0X3BsYXRmb3JtX2RyaXZlcigpOwotCWRzaV91bmluaXRfcGxhdGZvcm1fZHJpdmVyKCk7CiAJaGRtaV91bmluaXRfcGxhdGZvcm1fZHJpdmVyKCk7CisJZHNpX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKKwl2ZW5jX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKKwlyZmJpX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKKwlkaXNwY191bmluaXRfcGxhdGZvcm1fZHJpdmVyKCk7CiAJZHNzX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIoKTsKIAogCWRzc191bmluaXRfb3ZlcmxheXMocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYwppbmRleCA3YTlhMmU3Li4wZjM5NjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9zcmFtLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgpAQCAtNzcsNiArNzksMTIgQEAKIAlzOCB2YzAwOwogfTsKIAorZW51bSBvbWFwX2J1cnN0X3NpemUgeworCUJVUlNUX1NJWkVfWDIgPSAwLAorCUJVUlNUX1NJWkVfWDQgPSAxLAorCUJVUlNUX1NJWkVfWDggPSAyLAorfTsKKwogI2RlZmluZSBSRUdfR0VUKGlkeCwgc3RhcnQsIGVuZCkgXAogCUZMRF9HRVQoZGlzcGNfcmVhZF9yZWcoaWR4KSwgc3RhcnQsIGVuZCkKIApAQCAtOTIsNyArMTAwLDExIEBACiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXZvaWQgX19pb21lbSAgICAqYmFzZTsKKworCWludAkJY3R4X2xvc3NfY250OworCiAJaW50IGlycTsKKwlzdHJ1Y3QgY2xrICpkc3NfY2xrOwogCiAJdTMyCWZpZm9fc2l6ZVszXTsKIApAQCAtMTAyLDYgKzExNCw3IEBACiAJdTMyIGVycm9yX2lycXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IGVycm9yX3dvcms7CiAKKwlib29sCQljdHhfdmFsaWQ7CiAJdTMyCQljdHhbRElTUENfU1pfUkVHUyAvIHNpemVvZih1MzIpXTsKIAogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKQEAgLTEzNCwxOCArMTQ3LDM0IEBACiAJcmV0dXJuIF9fcmF3X3JlYWRsKGRpc3BjLmJhc2UgKyBpZHgpOwogfQogCitzdGF0aWMgaW50IGRpc3BjX2dldF9jdHhfbG9zc19jb3VudCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkaXNwYy5wZGV2LT5kZXY7CisJc3RydWN0IG9tYXBfZGlzcGxheV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyAqYm9hcmRfZGF0YSA9IHBkYXRhLT5ib2FyZF9kYXRhOworCWludCBjbnQ7CisKKwlpZiAoIWJvYXJkX2RhdGEtPmdldF9jb250ZXh0X2xvc3NfY291bnQpCisJCXJldHVybiAtRU5PRU5UOworCisJY250ID0gYm9hcmRfZGF0YS0+Z2V0X2NvbnRleHRfbG9zc19jb3VudChkZXYpOworCisJV0FSTl9PTkNFKGNudCA8IDAsICJnZXRfY29udGV4dF9sb3NzX2NvdW50IGZhaWxlZDogJWRcbiIsIGNudCk7CisKKwlyZXR1cm4gY250OworfQorCiAjZGVmaW5lIFNSKHJlZykgXAogCWRpc3BjLmN0eFtESVNQQ18jI3JlZyAvIHNpemVvZih1MzIpXSA9IGRpc3BjX3JlYWRfcmVnKERJU1BDXyMjcmVnKQogI2RlZmluZSBSUihyZWcpIFwKIAlkaXNwY193cml0ZV9yZWcoRElTUENfIyNyZWcsIGRpc3BjLmN0eFtESVNQQ18jI3JlZyAvIHNpemVvZih1MzIpXSkKIAotdm9pZCBkaXNwY19zYXZlX2NvbnRleHQodm9pZCkKK3N0YXRpYyB2b2lkIGRpc3BjX3NhdmVfY29udGV4dCh2b2lkKQogewogCWludCBpOwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJcmV0dXJuOwogCi0JU1IoU1lTQ09ORklHKTsKKwlEU1NEQkcoImRpc3BjX3NhdmVfY29udGV4dFxuIik7CisKIAlTUihJUlFFTkFCTEUpOwogCVNSKENPTlRST0wpOwogCVNSKENPTkZJRyk7CkBAIC0xNTgsNyArMTg3LDggQEAKIAlTUihUSU1JTkdfVihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwogCVNSKFBPTF9GUkVRKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CiAJU1IoRElWSVNPUm8oT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKLQlTUihHTE9CQUxfQUxQSEEpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9HTE9CQUxfQUxQSEEpKQorCQlTUihHTE9CQUxfQUxQSEEpOwogCVNSKFNJWkVfTUdSKE9NQVBfRFNTX0NIQU5ORUxfRElHSVQpKTsKIAlTUihTSVpFX01HUihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9NR1JfTENEMikpIHsKQEAgLTE4OCwyMCArMjE4LDI1IEBACiAJU1IoREFUQV9DWUNMRTIoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKIAlTUihEQVRBX0NZQ0xFMyhPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwogCi0JU1IoQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCVNSKENQUl9DT0VGX0coT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKLQlTUihDUFJfQ09FRl9CKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0NQUikpIHsKKwkJU1IoQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOworCQlTUihDUFJfQ09FRl9HKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CisJCVNSKENQUl9DT0VGX0IoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKKwl9CiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX01HUl9MQ0QyKSkgewotCQlTUihDUFJfQ09FRl9CKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOwotCQlTUihDUFJfQ09FRl9HKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOwotCQlTUihDUFJfQ09FRl9SKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQ1BSKSkgeworCQkJU1IoQ1BSX0NPRUZfQihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKKwkJCVNSKENQUl9DT0VGX0coT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSk7CisJCQlTUihDUFJfQ09FRl9SKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQl9CiAKIAkJU1IoREFUQV9DWUNMRTEoT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSk7CiAJCVNSKERBVEFfQ1lDTEUyKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOwogCQlTUihEQVRBX0NZQ0xFMyhPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKIAl9CiAKLQlTUihPVkxfUFJFTE9BRChPTUFQX0RTU19HRlgpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfUFJFTE9BRCkpCisJCVNSKE9WTF9QUkVMT0FEKE9NQVBfRFNTX0dGWCkpOwogCiAJLyogVklEMSAqLwogCVNSKE9WTF9CQTAoT01BUF9EU1NfVklERU8xKSk7CkBAIC0yMjYsOCArMjYxLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKIAkJU1IoT1ZMX0NPTlZfQ09FRihPTUFQX0RTU19WSURFTzEsIGkpKTsKIAotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCVNSKE9WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMSwgaSkpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9GSVJfQ09FRl9WKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJU1IoT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8xLCBpKSk7CisJfQogCiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0hBTkRMRV9VVl9TRVBBUkFURSkpIHsKIAkJU1IoT1ZMX0JBMF9VVihPTUFQX0RTU19WSURFTzEpKTsKQEAgLTI0OCw3ICsyODUsOCBAQAogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9BVFRSMikpCiAJCVNSKE9WTF9BVFRSSUJVVEVTMihPTUFQX0RTU19WSURFTzEpKTsKIAotCVNSKE9WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMSkpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9QUkVMT0FEKSkKKwkJU1IoT1ZMX1BSRUxPQUQoT01BUF9EU1NfVklERU8xKSk7CiAKIAkvKiBWSUQyICovCiAJU1IoT1ZMX0JBMChPTUFQX0RTU19WSURFTzIpKTsKQEAgLTI3Myw4ICszMTEsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQogCQlTUihPVkxfQ09OVl9DT0VGKE9NQVBfRFNTX1ZJREVPMiwgaSkpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJU1IoT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCBpKSk7CisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0ZJUl9DT0VGX1YpKSB7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlTUihPVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzIsIGkpKTsKKwl9CiAKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfSEFORExFX1VWX1NFUEFSQVRFKSkgewogCQlTUihPVkxfQkEwX1VWKE9NQVBfRFNTX1ZJREVPMikpOwpAQCAtMjk1LDE2ICszMzUsMzUgQEAKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQVRUUjIpKQogCQlTUihPVkxfQVRUUklCVVRFUzIoT01BUF9EU1NfVklERU8yKSk7CiAKLQlTUihPVkxfUFJFTE9BRChPTUFQX0RTU19WSURFTzIpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfUFJFTE9BRCkpCisJCVNSKE9WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMikpOwogCiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0NPUkVfQ0xLX0RJVikpCiAJCVNSKERJVklTT1IpOworCisJZGlzcGMuY3R4X2xvc3NfY250ID0gZGlzcGNfZ2V0X2N0eF9sb3NzX2NvdW50KCk7CisJZGlzcGMuY3R4X3ZhbGlkID0gdHJ1ZTsKKworCURTU0RCRygiY29udGV4dCBzYXZlZCwgY3R4X2xvc3NfY291bnQgJWRcbiIsIGRpc3BjLmN0eF9sb3NzX2NudCk7CiB9CiAKLXZvaWQgZGlzcGNfcmVzdG9yZV9jb250ZXh0KHZvaWQpCitzdGF0aWMgdm9pZCBkaXNwY19yZXN0b3JlX2NvbnRleHQodm9pZCkKIHsKLQlpbnQgaTsKLQlSUihTWVNDT05GSUcpOworCWludCBpLCBjdHg7CisKKwlEU1NEQkcoImRpc3BjX3Jlc3RvcmVfY29udGV4dFxuIik7CisKKwlpZiAoIWRpc3BjLmN0eF92YWxpZCkKKwkJcmV0dXJuOworCisJY3R4ID0gZGlzcGNfZ2V0X2N0eF9sb3NzX2NvdW50KCk7CisKKwlpZiAoY3R4ID49IDAgJiYgY3R4ID09IGRpc3BjLmN0eF9sb3NzX2NudCkKKwkJcmV0dXJuOworCisJRFNTREJHKCJjdHhfbG9zc19jb3VudDogc2F2ZWQgJWQsIGN1cnJlbnQgJWRcbiIsCisJCQlkaXNwYy5jdHhfbG9zc19jbnQsIGN0eCk7CisKIAkvKlJSKElSUUVOQUJMRSk7Ki8KIAkvKlJSKENPTlRST0wpOyovCiAJUlIoQ09ORklHKTsKQEAgLTMxNyw3ICszNzYsOCBAQAogCVJSKFRJTUlOR19WKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CiAJUlIoUE9MX0ZSRVEoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKIAlSUihESVZJU09SbyhPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCVJSKEdMT0JBTF9BTFBIQSk7CisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0dMT0JBTF9BTFBIQSkpCisJCVJSKEdMT0JBTF9BTFBIQSk7CiAJUlIoU0laRV9NR1IoT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkpOwogCVJSKFNJWkVfTUdSKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX01HUl9MQ0QyKSkgewpAQCAtMzQ3LDIwICs0MDcsMjUgQEAKIAlSUihEQVRBX0NZQ0xFMihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwogCVJSKERBVEFfQ1lDTEUzKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CiAKLQlSUihDUFJfQ09FRl9SKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7Ci0JUlIoQ1BSX0NPRUZfRyhPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCVJSKENQUl9DT0VGX0IoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQ1BSKSkgeworCQlSUihDUFJfQ09FRl9SKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CisJCVJSKENQUl9DT0VGX0coT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKKwkJUlIoQ1BSX0NPRUZfQihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOworCX0KIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfTUdSX0xDRDIpKSB7CiAJCVJSKERBVEFfQ1lDTEUxKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOwogCQlSUihEQVRBX0NZQ0xFMihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKIAkJUlIoREFUQV9DWUNMRTMoT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSk7CiAKLQkJUlIoQ1BSX0NPRUZfQihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKLQkJUlIoQ1BSX0NPRUZfRyhPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKLQkJUlIoQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKKwkJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0NQUikpIHsKKwkJCVJSKENQUl9DT0VGX0IoT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSk7CisJCQlSUihDUFJfQ09FRl9HKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQkJUlIoQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKKwkJfQogCX0KIAotCVJSKE9WTF9QUkVMT0FEKE9NQVBfRFNTX0dGWCkpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9QUkVMT0FEKSkKKwkJUlIoT1ZMX1BSRUxPQUQoT01BUF9EU1NfR0ZYKSk7CiAKIAkvKiBWSUQxICovCiAJUlIoT1ZMX0JBMChPTUFQX0RTU19WSURFTzEpKTsKQEAgLTM4NSw4ICs0NTAsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQogCQlSUihPVkxfQ09OVl9DT0VGKE9NQVBfRFNTX1ZJREVPMSwgaSkpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJUlIoT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8xLCBpKSk7CisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0ZJUl9DT0VGX1YpKSB7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlSUihPVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIGkpKTsKKwl9CiAKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfSEFORExFX1VWX1NFUEFSQVRFKSkgewogCQlSUihPVkxfQkEwX1VWKE9NQVBfRFNTX1ZJREVPMSkpOwpAQCAtNDA3LDcgKzQ3NCw4IEBACiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0FUVFIyKSkKIAkJUlIoT1ZMX0FUVFJJQlVURVMyKE9NQVBfRFNTX1ZJREVPMSkpOwogCi0JUlIoT1ZMX1BSRUxPQUQoT01BUF9EU1NfVklERU8xKSk7CisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX1BSRUxPQUQpKQorCQlSUihPVkxfUFJFTE9BRChPTUFQX0RTU19WSURFTzEpKTsKIAogCS8qIFZJRDIgKi8KIAlSUihPVkxfQkEwKE9NQVBfRFNTX1ZJREVPMikpOwpAQCAtNDMyLDggKzUwMCwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCiAJCVJSKE9WTF9DT05WX0NPRUYoT01BUF9EU1NfVklERU8yLCBpKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlSUihPVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzIsIGkpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfRklSX0NPRUZfVikpIHsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCVJSKE9WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMiwgaSkpOworCX0KIAogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9IQU5ETEVfVVZfU0VQQVJBVEUpKSB7CiAJCVJSKE9WTF9CQTBfVVYoT01BUF9EU1NfVklERU8yKSk7CkBAIC00NTQsNyArNTI0LDggQEAKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQVRUUjIpKQogCQlSUihPVkxfQVRUUklCVVRFUzIoT01BUF9EU1NfVklERU8yKSk7CiAKLQlSUihPVkxfUFJFTE9BRChPTUFQX0RTU19WSURFTzIpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfUFJFTE9BRCkpCisJCVJSKE9WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMikpOwogCiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0NPUkVfQ0xLX0RJVikpCiAJCVJSKERJVklTT1IpOwpAQCAtNDcxLDE5ICs1NDIsMzUgQEAKIAkgKiB0aGUgY29udGV4dCBpcyBmdWxseSByZXN0b3JlZAogCSAqLwogCVJSKElSUUVOQUJMRSk7CisKKwlEU1NEQkcoImNvbnRleHQgcmVzdG9yZWRcbiIpOwogfQogCiAjdW5kZWYgU1IKICN1bmRlZiBSUgogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Nsb2Nrcyhib29sIGVuYWJsZSkKK2ludCBkaXNwY19ydW50aW1lX2dldCh2b2lkKQogewotCWlmIChlbmFibGUpCi0JCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOwotCWVsc2UKLQkJZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCWludCByOworCisJRFNTREJHKCJkaXNwY19ydW50aW1lX2dldFxuIik7CisKKwlyID0gcG1fcnVudGltZV9nZXRfc3luYygmZGlzcGMucGRldi0+ZGV2KTsKKwlXQVJOX09OKHIgPCAwKTsKKwlyZXR1cm4gciA8IDAgPyByIDogMDsKIH0KIAordm9pZCBkaXNwY19ydW50aW1lX3B1dCh2b2lkKQoreworCWludCByOworCisJRFNTREJHKCJkaXNwY19ydW50aW1lX3B1dFxuIik7CisKKwlyID0gcG1fcnVudGltZV9wdXQoJmRpc3BjLnBkZXYtPmRldik7CisJV0FSTl9PTihyIDwgMCk7Cit9CisKKwogYm9vbCBkaXNwY19nb19idXN5KGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpCiB7CiAJaW50IGJpdDsKQEAgLTUwNSw4ICs1OTIsNiBAQAogCWludCBiaXQ7CiAJYm9vbCBlbmFibGVfYml0LCBnb19iaXQ7CiAKLQllbmFibGVfY2xvY2tzKDEpOwotCiAJaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QgfHwKIAkJCWNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKQogCQliaXQgPSAwOyAvKiBMQ0RFTkFCTEUgKi8KQEAgLTUyMCw3ICs2MDUsNyBAQAogCQllbmFibGVfYml0ID0gUkVHX0dFVChESVNQQ19DT05UUk9MLCBiaXQsIGJpdCkgPT0gMTsKIAogCWlmICghZW5hYmxlX2JpdCkKLQkJZ290byBlbmQ7CisJCXJldHVybjsKIAogCWlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEIHx8CiAJCQljaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEMikKQEAgLTUzNSw3ICs2MjAsNyBAQAogCiAJaWYgKGdvX2JpdCkgewogCQlEU1NFUlIoIkdPIGJpdCBub3QgZG93biBmb3IgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7Ci0JCWdvdG8gZW5kOworCQlyZXR1cm47CiAJfQogCiAJRFNTREJHKCJHTyAlc1xuIiwgY2hhbm5lbCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCA/ICJMQ0QiIDoKQEAgLTU0NSw4ICs2MzAsNiBAQAogCQlSRUdfRkxEX01PRChESVNQQ19DT05UUk9MMiwgMSwgYml0LCBiaXQpOwogCWVsc2UKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTCwgMSwgYml0LCBiaXQpOwotZW5kOgotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9kaXNwY193cml0ZV9maXJoX3JlZyhlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIGludCByZWcsIHUzMiB2YWx1ZSkKQEAgLTkyMCw3ICsxMDAzLDcgQEAKIAlSRUdfRkxEX01PRChESVNQQ19PVkxfQVRUUklCVVRFUyhwbGFuZSksIG0sIDQsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBfZGlzcGNfc2V0X2NoYW5uZWxfb3V0KGVudW0gb21hcF9wbGFuZSBwbGFuZSwKK3ZvaWQgZGlzcGNfc2V0X2NoYW5uZWxfb3V0KGVudW0gb21hcF9wbGFuZSBwbGFuZSwKIAkJZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCkKIHsKIAlpbnQgc2hpZnQ7CkBAIC05NjcsMTMgKzEwNTAsMTAgQEAKIAlkaXNwY193cml0ZV9yZWcoRElTUENfT1ZMX0FUVFJJQlVURVMocGxhbmUpLCB2YWwpOwogfQogCi12b2lkIGRpc3BjX3NldF9idXJzdF9zaXplKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKK3N0YXRpYyB2b2lkIGRpc3BjX3NldF9idXJzdF9zaXplKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKIAkJZW51bSBvbWFwX2J1cnN0X3NpemUgYnVyc3Rfc2l6ZSkKIHsKIAlpbnQgc2hpZnQ7Ci0JdTMyIHZhbDsKLQotCWVuYWJsZV9jbG9ja3MoMSk7CiAKIAlzd2l0Y2ggKHBsYW5lKSB7CiAJY2FzZSBPTUFQX0RTU19HRlg6CkBAIC05ODgsMTEgKzEwNjgsMjQgQEAKIAkJcmV0dXJuOwogCX0KIAotCXZhbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX09WTF9BVFRSSUJVVEVTKHBsYW5lKSk7Ci0JdmFsID0gRkxEX01PRCh2YWwsIGJ1cnN0X3NpemUsIHNoaWZ0KzEsIHNoaWZ0KTsKLQlkaXNwY193cml0ZV9yZWcoRElTUENfT1ZMX0FUVFJJQlVURVMocGxhbmUpLCB2YWwpOworCVJFR19GTERfTU9EKERJU1BDX09WTF9BVFRSSUJVVEVTKHBsYW5lKSwgYnVyc3Rfc2l6ZSwgc2hpZnQgKyAxLCBzaGlmdCk7Cit9CiAKLQllbmFibGVfY2xvY2tzKDApOworc3RhdGljIHZvaWQgZGlzcGNfY29uZmlndXJlX2J1cnN0X3NpemVzKHZvaWQpCit7CisJaW50IGk7CisJY29uc3QgaW50IGJ1cnN0X3NpemUgPSBCVVJTVF9TSVpFX1g4OworCisJLyogQ29uZmlndXJlIGJ1cnN0IHNpemUgYWx3YXlzIHRvIG1heGltdW0gc2l6ZSAqLworCWZvciAoaSA9IDA7IGkgPCBvbWFwX2Rzc19nZXRfbnVtX292ZXJsYXlzKCk7ICsraSkKKwkJZGlzcGNfc2V0X2J1cnN0X3NpemUoaSwgYnVyc3Rfc2l6ZSk7Cit9CisKK3UzMiBkaXNwY19nZXRfYnVyc3Rfc2l6ZShlbnVtIG9tYXBfcGxhbmUgcGxhbmUpCit7CisJdW5zaWduZWQgdW5pdCA9IGRzc19mZWF0X2dldF9idXJzdF9zaXplX3VuaXQoKTsKKwkvKiBidXJzdCBtdWx0aXBsaWVyIGlzIGFsd2F5cyB4OCAoc2VlIGRpc3BjX2NvbmZpZ3VyZV9idXJzdF9zaXplcygpKSAqLworCXJldHVybiB1bml0ICogODsKIH0KIAogdm9pZCBkaXNwY19lbmFibGVfZ2FtbWFfdGFibGUoYm9vbCBlbmFibGUpCkBAIC0xMDA5LDYgKzExMDIsNDAgQEAKIAlSRUdfRkxEX01PRChESVNQQ19DT05GSUcsIGVuYWJsZSwgOSwgOSk7CiB9CiAKK3ZvaWQgZGlzcGNfZW5hYmxlX2NwcihlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKwl1MTYgcmVnOworCisJaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpCisJCXJlZyA9IERJU1BDX0NPTkZJRzsKKwllbHNlIGlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEMikKKwkJcmVnID0gRElTUENfQ09ORklHMjsKKwllbHNlCisJCXJldHVybjsKKworCVJFR19GTERfTU9EKHJlZywgZW5hYmxlLCAxNSwgMTUpOworfQorCit2b2lkIGRpc3BjX3NldF9jcHJfY29lZihlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLAorCQlzdHJ1Y3Qgb21hcF9kc3NfY3ByX2NvZWZzICpjb2VmcykKK3sKKwl1MzIgY29lZl9yLCBjb2VmX2csIGNvZWZfYjsKKworCWlmIChjaGFubmVsICE9IE9NQVBfRFNTX0NIQU5ORUxfTENEICYmIGNoYW5uZWwgIT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKQorCQlyZXR1cm47CisKKwljb2VmX3IgPSBGTERfVkFMKGNvZWZzLT5yciwgMzEsIDIyKSB8IEZMRF9WQUwoY29lZnMtPnJnLCAyMCwgMTEpIHwKKwkJRkxEX1ZBTChjb2Vmcy0+cmIsIDksIDApOworCWNvZWZfZyA9IEZMRF9WQUwoY29lZnMtPmdyLCAzMSwgMjIpIHwgRkxEX1ZBTChjb2Vmcy0+Z2csIDIwLCAxMSkgfAorCQlGTERfVkFMKGNvZWZzLT5nYiwgOSwgMCk7CisJY29lZl9iID0gRkxEX1ZBTChjb2Vmcy0+YnIsIDMxLCAyMikgfCBGTERfVkFMKGNvZWZzLT5iZywgMjAsIDExKSB8CisJCUZMRF9WQUwoY29lZnMtPmJiLCA5LCAwKTsKKworCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19DUFJfQ09FRl9SKGNoYW5uZWwpLCBjb2VmX3IpOworCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19DUFJfQ09FRl9HKGNoYW5uZWwpLCBjb2VmX2cpOworCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19DUFJfQ09FRl9CKGNoYW5uZWwpLCBjb2VmX2IpOworfQorCiBzdGF0aWMgdm9pZCBfZGlzcGNfc2V0X3ZpZF9jb2xvcl9jb252KGVudW0gb21hcF9wbGFuZSBwbGFuZSwgYm9vbCBlbmFibGUpCiB7CiAJdTMyIHZhbDsKQEAgLTEwMjksOSArMTE1Niw3IEBACiAJZWxzZQogCQliaXQgPSAxMDsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJUkVHX0ZMRF9NT0QoRElTUENfT1ZMX0FUVFJJQlVURVMocGxhbmUpLCBlbmFibGUsIGJpdCwgYml0KTsKLQllbmFibGVfY2xvY2tzKDApOwogfQogCiB2b2lkIGRpc3BjX3NldF9sY2Rfc2l6ZShlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCB1MTYgd2lkdGgsIHUxNiBoZWlnaHQpCkBAIC0xMDM5LDkgKzExNjQsNyBAQAogCXUzMiB2YWw7CiAJQlVHX09OKCh3aWR0aCA+ICgxIDw8IDExKSkgfHwgKGhlaWdodCA+ICgxIDw8IDExKSkpOwogCXZhbCA9IEZMRF9WQUwoaGVpZ2h0IC0gMSwgMjYsIDE2KSB8IEZMRF9WQUwod2lkdGggLSAxLCAxMCwgMCk7Ci0JZW5hYmxlX2Nsb2NrcygxKTsKIAlkaXNwY193cml0ZV9yZWcoRElTUENfU0laRV9NR1IoY2hhbm5lbCksIHZhbCk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdm9pZCBkaXNwY19zZXRfZGlnaXRfc2l6ZSh1MTYgd2lkdGgsIHUxNiBoZWlnaHQpCkBAIC0xMDQ5LDkgKzExNzIsNyBAQAogCXUzMiB2YWw7CiAJQlVHX09OKCh3aWR0aCA+ICgxIDw8IDExKSkgfHwgKGhlaWdodCA+ICgxIDw8IDExKSkpOwogCXZhbCA9IEZMRF9WQUwoaGVpZ2h0IC0gMSwgMjYsIDE2KSB8IEZMRF9WQUwod2lkdGggLSAxLCAxMCwgMCk7Ci0JZW5hYmxlX2Nsb2NrcygxKTsKIAlkaXNwY193cml0ZV9yZWcoRElTUENfU0laRV9NR1IoT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCksIHZhbCk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGNfcmVhZF9wbGFuZV9maWZvX3NpemVzKHZvaWQpCkBAIC0xMDU5LDE4ICsxMTgwLDE3IEBACiAJdTMyIHNpemU7CiAJaW50IHBsYW5lOwogCXU4IHN0YXJ0LCBlbmQ7CisJdTMyIHVuaXQ7CiAKLQllbmFibGVfY2xvY2tzKDEpOworCXVuaXQgPSBkc3NfZmVhdF9nZXRfYnVmZmVyX3NpemVfdW5pdCgpOwogCiAJZHNzX2ZlYXRfZ2V0X3JlZ19maWVsZChGRUFUX1JFR19GSUZPU0laRSwgJnN0YXJ0LCAmZW5kKTsKIAogCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IEFSUkFZX1NJWkUoZGlzcGMuZmlmb19zaXplKTsgKytwbGFuZSkgewotCQlzaXplID0gRkxEX0dFVChkaXNwY19yZWFkX3JlZyhESVNQQ19PVkxfRklGT19TSVpFX1NUQVRVUyhwbGFuZSkpLAotCQkJc3RhcnQsIGVuZCk7CisJCXNpemUgPSBSRUdfR0VUKERJU1BDX09WTF9GSUZPX1NJWkVfU1RBVFVTKHBsYW5lKSwgc3RhcnQsIGVuZCk7CisJCXNpemUgKj0gdW5pdDsKIAkJZGlzcGMuZmlmb19zaXplW3BsYW5lXSA9IHNpemU7CiAJfQotCi0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdTMyIGRpc3BjX2dldF9wbGFuZV9maWZvX3NpemUoZW51bSBvbWFwX3BsYW5lIHBsYW5lKQpAQCAtMTA3OCwxNSArMTE5OCwyMiBAQAogCXJldHVybiBkaXNwYy5maWZvX3NpemVbcGxhbmVdOwogfQogCi12b2lkIGRpc3BjX3NldHVwX3BsYW5lX2ZpZm8oZW51bSBvbWFwX3BsYW5lIHBsYW5lLCB1MzIgbG93LCB1MzIgaGlnaCkKK3ZvaWQgZGlzcGNfc2V0X2ZpZm9fdGhyZXNob2xkKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgdTMyIGxvdywgdTMyIGhpZ2gpCiB7CiAJdTggaGlfc3RhcnQsIGhpX2VuZCwgbG9fc3RhcnQsIGxvX2VuZDsKKwl1MzIgdW5pdDsKKworCXVuaXQgPSBkc3NfZmVhdF9nZXRfYnVmZmVyX3NpemVfdW5pdCgpOworCisJV0FSTl9PTihsb3cgJSB1bml0ICE9IDApOworCVdBUk5fT04oaGlnaCAlIHVuaXQgIT0gMCk7CisKKwlsb3cgLz0gdW5pdDsKKwloaWdoIC89IHVuaXQ7CiAKIAlkc3NfZmVhdF9nZXRfcmVnX2ZpZWxkKEZFQVRfUkVHX0ZJRk9ISUdIVEhSRVNIT0xELCAmaGlfc3RhcnQsICZoaV9lbmQpOwogCWRzc19mZWF0X2dldF9yZWdfZmllbGQoRkVBVF9SRUdfRklGT0xPV1RIUkVTSE9MRCwgJmxvX3N0YXJ0LCAmbG9fZW5kKTsKIAotCWVuYWJsZV9jbG9ja3MoMSk7Ci0KIAlEU1NEQkcoImZpZm8oJWQpIGxvdy9oaWdoIG9sZCAldS8ldSwgbmV3ICV1LyV1XG4iLAogCQkJcGxhbmUsCiAJCQlSRUdfR0VUKERJU1BDX09WTF9GSUZPX1RIUkVTSE9MRChwbGFuZSksCkBAIC0xMDk4LDE4ICsxMjI1LDEyIEBACiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX09WTF9GSUZPX1RIUkVTSE9MRChwbGFuZSksCiAJCQlGTERfVkFMKGhpZ2gsIGhpX3N0YXJ0LCBoaV9lbmQpIHwKIAkJCUZMRF9WQUwobG93LCBsb19zdGFydCwgbG9fZW5kKSk7Ci0KLQllbmFibGVfY2xvY2tzKDApOwogfQogCiB2b2lkIGRpc3BjX2VuYWJsZV9maWZvbWVyZ2UoYm9vbCBlbmFibGUpCiB7Ci0JZW5hYmxlX2Nsb2NrcygxKTsKLQogCURTU0RCRygiRklGTyBtZXJnZSAlc1xuIiwgZW5hYmxlID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCBlbmFibGUgPyAxIDogMCwgMTQsIDE0KTsKLQotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9kaXNwY19zZXRfZmlyKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKQEAgLTE3MjksMTQgKzE4NTAsNyBAQAogCXJldHVybiBkaXNwY19wY2xrX3JhdGUoY2hhbm5lbCkgKiB2ZiAqIGhmOwogfQogCi12b2lkIGRpc3BjX3NldF9jaGFubmVsX291dChlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWxfb3V0KQotewotCWVuYWJsZV9jbG9ja3MoMSk7Ci0JX2Rpc3BjX3NldF9jaGFubmVsX291dChwbGFuZSwgY2hhbm5lbF9vdXQpOwotCWVuYWJsZV9jbG9ja3MoMCk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Rpc3BjX3NldHVwX3BsYW5lKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKK2ludCBkaXNwY19zZXR1cF9wbGFuZShlbnVtIG9tYXBfcGxhbmUgcGxhbmUsCiAJCXUzMiBwYWRkciwgdTE2IHNjcmVlbl93aWR0aCwKIAkJdTE2IHBvc194LCB1MTYgcG9zX3ksCiAJCXUxNiB3aWR0aCwgdTE2IGhlaWdodCwKQEAgLTE3NDQsNyArMTg1OCw3IEBACiAJCWVudW0gb21hcF9jb2xvcl9tb2RlIGNvbG9yX21vZGUsCiAJCWJvb2wgaWxhY2UsCiAJCWVudW0gb21hcF9kc3Nfcm90YXRpb25fdHlwZSByb3RhdGlvbl90eXBlLAotCQl1OCByb3RhdGlvbiwgaW50IG1pcnJvciwKKwkJdTggcm90YXRpb24sIGJvb2wgbWlycm9yLAogCQl1OCBnbG9iYWxfYWxwaGEsIHU4IHByZV9tdWx0X2FscGhhLAogCQllbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCB1MzIgcHV2X2FkZHIpCiB7CkBAIC0xNzU4LDYgKzE4NzIsMTQgQEAKIAl1MTYgZnJhbWVfaGVpZ2h0ID0gaGVpZ2h0OwogCXVuc2lnbmVkIGludCBmaWVsZF9vZmZzZXQgPSAwOwogCisJRFNTREJHKCJkaXNwY19zZXR1cF9wbGFuZSAlZCwgcGEgJXgsIHN3ICVkLCAlZCwlZCwgJWR4JWQgLT4gIgorCSAgICAgICAiJWR4JWQsIGlsYWNlICVkLCBjbW9kZSAleCwgcm90ICVkLCBtaXIgJWQgY2hhbiAlZFxuIiwKKwkgICAgICAgcGxhbmUsIHBhZGRyLCBzY3JlZW5fd2lkdGgsIHBvc194LCBwb3NfeSwKKwkgICAgICAgd2lkdGgsIGhlaWdodCwKKwkgICAgICAgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0LAorCSAgICAgICBpbGFjZSwgY29sb3JfbW9kZSwKKwkgICAgICAgcm90YXRpb24sIG1pcnJvciwgY2hhbm5lbCk7CisKIAlpZiAocGFkZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE5MDMsOSArMjAyNSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfZGlzcGNfZW5hYmxlX3BsYW5lKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgYm9vbCBlbmFibGUpCitpbnQgZGlzcGNfZW5hYmxlX3BsYW5lKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgYm9vbCBlbmFibGUpCiB7CisJRFNTREJHKCJkaXNwY19lbmFibGVfcGxhbmUgJWQsICVkXG4iLCBwbGFuZSwgZW5hYmxlKTsKKwogCVJFR19GTERfTU9EKERJU1BDX09WTF9BVFRSSUJVVEVTKHBsYW5lKSwgZW5hYmxlID8gMSA6IDAsIDAsIDApOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc3BjX2Rpc2FibGVfaXNyKHZvaWQgKmRhdGEsIHUzMiBtYXNrKQpAQCAtMTkyOSw4ICsyMDU1LDYgQEAKIAlpbnQgcjsKIAl1MzIgaXJxOwogCi0JZW5hYmxlX2Nsb2NrcygxKTsKLQogCS8qIFdoZW4gd2UgZGlzYWJsZSBMQ0Qgb3V0cHV0LCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgZnJhbWUgaXMgZG9uZS4KIAkgKiBPdGhlcndpc2UgdGhlIERTUyBpcyBzdGlsbCB3b3JraW5nLCBhbmQgdHVybmluZyBvZmYgdGhlIGNsb2NrcwogCSAqIHByZXZlbnRzIERTUyBmcm9tIGdvaW5nIHRvIE9GRiBtb2RlICovCkBAIC0xOTY0LDggKzIwODgsNiBAQAogCQlpZiAocikKIAkJCURTU0VSUigiZmFpbGVkIHRvIHVucmVnaXN0ZXIgRlJBTUVET05FIGlzclxuIik7CiAJfQotCi0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogc3RhdGljIHZvaWQgX2VuYWJsZV9kaWdpdF9vdXQoYm9vbCBlbmFibGUpCkBAIC0xOTc4LDEyICsyMTAwLDggQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBmcmFtZV9kb25lX2NvbXBsZXRpb247CiAJaW50IHI7CiAKLQllbmFibGVfY2xvY2tzKDEpOwotCi0JaWYgKFJFR19HRVQoRElTUENfQ09OVFJPTCwgMSwgMSkgPT0gZW5hYmxlKSB7Ci0JCWVuYWJsZV9jbG9ja3MoMCk7CisJaWYgKFJFR19HRVQoRElTUENfQ09OVFJPTCwgMSwgMSkgPT0gZW5hYmxlKQogCQlyZXR1cm47Ci0JfQogCiAJaWYgKGVuYWJsZSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjAzNSw4ICsyMTUzLDYgQEAKIAkJX29tYXBfZGlzcGNfc2V0X2lycXMoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlzcGMuaXJxX2xvY2ssIGZsYWdzKTsKIAl9Ci0KLQllbmFibGVfY2xvY2tzKDApOwogfQogCiBib29sIGRpc3BjX2lzX2NoYW5uZWxfZW5hYmxlZChlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQpAQCAtMjA2Nyw5ICsyMTgzLDcgQEAKIAlpZiAoIWRzc19oYXNfZmVhdHVyZShGRUFUX0xDREVOQUJMRVBPTCkpCiAJCXJldHVybjsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTCwgYWN0X2hpZ2ggPyAxIDogMCwgMjksIDI5KTsKLQllbmFibGVfY2xvY2tzKDApOwogfQogCiB2b2lkIGRpc3BjX2xjZF9lbmFibGVfc2lnbmFsKGJvb2wgZW5hYmxlKQpAQCAtMjA3Nyw5ICsyMTkxLDcgQEAKIAlpZiAoIWRzc19oYXNfZmVhdHVyZShGRUFUX0xDREVOQUJMRVNJR05BTCkpCiAJCXJldHVybjsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTCwgZW5hYmxlID8gMSA6IDAsIDI4LCAyOCk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdm9pZCBkaXNwY19wY2tfZnJlZV9lbmFibGUoYm9vbCBlbmFibGUpCkBAIC0yMDg3LDE5ICsyMTk5LDE1IEBACiAJaWYgKCFkc3NfaGFzX2ZlYXR1cmUoRkVBVF9QQ0tGUkVFRU5BQkxFKSkKIAkJcmV0dXJuOwogCi0JZW5hYmxlX2Nsb2NrcygxKTsKIAlSRUdfRkxEX01PRChESVNQQ19DT05UUk9MLCBlbmFibGUgPyAxIDogMCwgMjcsIDI3KTsKLQllbmFibGVfY2xvY2tzKDApOwogfQogCiB2b2lkIGRpc3BjX2VuYWJsZV9maWZvaGFuZGNoZWNrKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIGJvb2wgZW5hYmxlKQogewotCWVuYWJsZV9jbG9ja3MoMSk7CiAJaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKQogCQlSRUdfRkxEX01PRChESVNQQ19DT05GSUcyLCBlbmFibGUgPyAxIDogMCwgMTYsIDE2KTsKIAllbHNlCiAJCVJFR19GTERfTU9EKERJU1BDX0NPTkZJRywgZW5hYmxlID8gMSA6IDAsIDE2LCAxNik7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogCkBAIC0yMTIyLDI3ICsyMjMwLDIxIEBACiAJCXJldHVybjsKIAl9CiAKLQllbmFibGVfY2xvY2tzKDEpOwogCWlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEMikKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTDIsIG1vZGUsIDMsIDMpOwogCWVsc2UKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTCwgbW9kZSwgMywgMyk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdm9pZCBkaXNwY19zZXRfbG9hZG1vZGUoZW51bSBvbWFwX2Rzc19sb2FkX21vZGUgbW9kZSkKIHsKLQllbmFibGVfY2xvY2tzKDEpOwogCVJFR19GTERfTU9EKERJU1BDX0NPTkZJRywgbW9kZSwgMiwgMSk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogCiB2b2lkIGRpc3BjX3NldF9kZWZhdWx0X2NvbG9yKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIHUzMiBjb2xvcikKIHsKLQllbmFibGVfY2xvY2tzKDEpOwogCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19ERUZBVUxUX0NPTE9SKGNoYW5uZWwpLCBjb2xvcik7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdTMyIGRpc3BjX2dldF9kZWZhdWx0X2NvbG9yKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpCkBAIC0yMTUzLDkgKzIyNTUsNyBAQAogCQljaGFubmVsICE9IE9NQVBfRFNTX0NIQU5ORUxfTENEICYmCiAJCWNoYW5uZWwgIT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKTsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0RFRkFVTFRfQ09MT1IoY2hhbm5lbCkpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiAKIAlyZXR1cm4gbDsKIH0KQEAgLTIxNjQsNyArMjI2NCw2IEBACiAJCWVudW0gb21hcF9kc3NfdHJhbnNfa2V5X3R5cGUgdHlwZSwKIAkJdTMyIHRyYW5zX2tleSkKIHsKLQllbmFibGVfY2xvY2tzKDEpOwogCWlmIChjaCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCB0eXBlLCAxMSwgMTEpOwogCWVsc2UgaWYgKGNoID09IE9NQVBfRFNTX0NIQU5ORUxfRElHSVQpCkBAIC0yMTczLDE0ICsyMjcyLDEyIEBACiAJCVJFR19GTERfTU9EKERJU1BDX0NPTkZJRzIsIHR5cGUsIDExLCAxMSk7CiAKIAlkaXNwY193cml0ZV9yZWcoRElTUENfVFJBTlNfQ09MT1IoY2gpLCB0cmFuc19rZXkpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiAKIHZvaWQgZGlzcGNfZ2V0X3RyYW5zX2tleShlbnVtIG9tYXBfY2hhbm5lbCBjaCwKIAkJZW51bSBvbWFwX2Rzc190cmFuc19rZXlfdHlwZSAqdHlwZSwKIAkJdTMyICp0cmFuc19rZXkpCiB7Ci0JZW5hYmxlX2Nsb2NrcygxKTsKIAlpZiAodHlwZSkgewogCQlpZiAoY2ggPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpCiAJCQkqdHlwZSA9IFJFR19HRVQoRElTUENfQ09ORklHLCAxMSwgMTEpOwpAQCAtMjE5NCwzMyArMjI5MSwyOCBAQAogCiAJaWYgKHRyYW5zX2tleSkKIAkJKnRyYW5zX2tleSA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX1RSQU5TX0NPTE9SKGNoKSk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogdm9pZCBkaXNwY19lbmFibGVfdHJhbnNfa2V5KGVudW0gb21hcF9jaGFubmVsIGNoLCBib29sIGVuYWJsZSkKIHsKLQllbmFibGVfY2xvY2tzKDEpOwogCWlmIChjaCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCBlbmFibGUsIDEwLCAxMCk7CiAJZWxzZSBpZiAoY2ggPT0gT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCBlbmFibGUsIDEyLCAxMik7CiAJZWxzZSAvKiBPTUFQX0RTU19DSEFOTkVMX0xDRDIgKi8KIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHMiwgZW5hYmxlLCAxMCwgMTApOwotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiB2b2lkIGRpc3BjX2VuYWJsZV9hbHBoYV9ibGVuZGluZyhlbnVtIG9tYXBfY2hhbm5lbCBjaCwgYm9vbCBlbmFibGUpCiB7CiAJaWYgKCFkc3NfaGFzX2ZlYXR1cmUoRkVBVF9HTE9CQUxfQUxQSEEpKQogCQlyZXR1cm47CiAKLQllbmFibGVfY2xvY2tzKDEpOwogCWlmIChjaCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCBlbmFibGUsIDE4LCAxOCk7CiAJZWxzZSBpZiAoY2ggPT0gT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkKIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHLCBlbmFibGUsIDE5LCAxOSk7CiAJZWxzZSAvKiBPTUFQX0RTU19DSEFOTkVMX0xDRDIgKi8KIAkJUkVHX0ZMRF9NT0QoRElTUENfQ09ORklHMiwgZW5hYmxlLCAxOCwgMTgpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiBib29sIGRpc3BjX2FscGhhX2JsZW5kaW5nX2VuYWJsZWQoZW51bSBvbWFwX2NoYW5uZWwgY2gpCiB7CkBAIC0yMjI5LDcgKzIzMjEsNiBAQAogCWlmICghZHNzX2hhc19mZWF0dXJlKEZFQVRfR0xPQkFMX0FMUEhBKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JZW5hYmxlX2Nsb2NrcygxKTsKIAlpZiAoY2ggPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpCiAJCWVuYWJsZWQgPSBSRUdfR0VUKERJU1BDX0NPTkZJRywgMTgsIDE4KTsKIAllbHNlIGlmIChjaCA9PSBPTUFQX0RTU19DSEFOTkVMX0RJR0lUKQpAQCAtMjIzOCw3ICsyMzI5LDYgQEAKIAkJZW5hYmxlZCA9IFJFR19HRVQoRElTUENfQ09ORklHMiwgMTgsIDE4KTsKIAllbHNlCiAJCUJVRygpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiAKIAlyZXR1cm4gZW5hYmxlZDsKIH0KQEAgLTIyNDgsNyArMjMzOCw2IEBACiB7CiAJYm9vbCBlbmFibGVkOwogCi0JZW5hYmxlX2Nsb2NrcygxKTsKIAlpZiAoY2ggPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpCiAJCWVuYWJsZWQgPSBSRUdfR0VUKERJU1BDX0NPTkZJRywgMTAsIDEwKTsKIAllbHNlIGlmIChjaCA9PSBPTUFQX0RTU19DSEFOTkVMX0RJR0lUKQpAQCAtMjI1Nyw3ICsyMzQ2LDYgQEAKIAkJZW5hYmxlZCA9IFJFR19HRVQoRElTUENfQ09ORklHMiwgMTAsIDEwKTsKIAllbHNlCiAJCUJVRygpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiAKIAlyZXR1cm4gZW5hYmxlZDsKIH0KQEAgLTIyODUsMTIgKzIzNzMsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKQogCQlSRUdfRkxEX01PRChESVNQQ19DT05UUk9MMiwgY29kZSwgOSwgOCk7CiAJZWxzZQogCQlSRUdfRkxEX01PRChESVNQQ19DT05UUk9MLCBjb2RlLCA5LCA4KTsKLQllbmFibGVfY2xvY2tzKDApOwogfQogCiB2b2lkIGRpc3BjX3NldF9wYXJhbGxlbF9pbnRlcmZhY2VfbW9kZShlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLApAQCAtMjMyMiw4ICsyNDA4LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWVuYWJsZV9jbG9ja3MoMSk7Ci0KIAlpZiAoY2hhbm5lbCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRDIpIHsKIAkJbCA9IGRpc3BjX3JlYWRfcmVnKERJU1BDX0NPTlRST0wyKTsKIAkJbCA9IEZMRF9NT0QobCwgc3RhbGxtb2RlLCAxMSwgMTEpOwpAQCAtMjMzNSw4ICsyNDE5LDYgQEAKIAkJbCA9IEZMRF9NT0QobCwgZ3BvdXQxLCAxNiwgMTYpOwogCQlkaXNwY193cml0ZV9yZWcoRElTUENfQ09OVFJPTCwgbCk7CiAJfQotCi0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogc3RhdGljIGJvb2wgX2Rpc3BjX2xjZF90aW1pbmdzX29rKGludCBoc3csIGludCBoZnAsIGludCBoYnAsCkBAIC0yMzg5LDEwICsyNDcxLDggQEAKIAkJCUZMRF9WQUwodmJwLCAzMSwgMjApOwogCX0KIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX1RJTUlOR19IKGNoYW5uZWwpLCB0aW1pbmdfaCk7CiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX1RJTUlOR19WKGNoYW5uZWwpLCB0aW1pbmdfdik7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogLyogY2hhbmdlIG5hbWUgdG8gbW9kZT8gKi8KQEAgLTI0MzUsMTAgKzI1MTUsOCBAQAogCUJVR19PTihsY2tfZGl2IDwgMSk7CiAJQlVHX09OKHBja19kaXYgPCAyKTsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX0RJVklTT1JvKGNoYW5uZWwpLAogCQkJRkxEX1ZBTChsY2tfZGl2LCAyMywgMTYpIHwgRkxEX1ZBTChwY2tfZGl2LCA3LCAwKSk7Ci0JZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGNfZ2V0X2xjZF9kaXZpc29yKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIGludCAqbGNrX2RpdiwKQEAgLTI0NTcsNyArMjUzNSw3IEBACiAKIAlzd2l0Y2ggKGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpKSB7CiAJY2FzZSBPTUFQX0RTU19DTEtfU1JDX0ZDSzoKLQkJciA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0spOworCQlyID0gY2xrX2dldF9yYXRlKGRpc3BjLmRzc19jbGspOwogCQlicmVhazsKIAljYXNlIE9NQVBfRFNTX0NMS19TUkNfRFNJX1BMTF9IU0RJVl9ESVNQQzoKIAkJZHNpZGV2ID0gZHNpX2dldF9kc2lkZXZfZnJvbV9pZCgwKTsKQEAgLTI0ODcsNyArMjU2NSw3IEBACiAKIAlzd2l0Y2ggKGRzc19nZXRfbGNkX2Nsa19zb3VyY2UoY2hhbm5lbCkpIHsKIAljYXNlIE9NQVBfRFNTX0NMS19TUkNfRkNLOgotCQlyID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX0ZDSyk7CisJCXIgPSBjbGtfZ2V0X3JhdGUoZGlzcGMuZHNzX2Nsayk7CiAJCWJyZWFrOwogCWNhc2UgT01BUF9EU1NfQ0xLX1NSQ19EU0lfUExMX0hTRElWX0RJU1BDOgogCQlkc2lkZXYgPSBkc2lfZ2V0X2RzaWRldl9mcm9tX2lkKDApOwpAQCAtMjUyNiw3ICsyNjA0LDggQEAKIAllbnVtIG9tYXBfZHNzX2Nsa19zb3VyY2UgZGlzcGNfY2xrX3NyYyA9IGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpOwogCWVudW0gb21hcF9kc3NfY2xrX3NvdXJjZSBsY2RfY2xrX3NyYzsKIAotCWVuYWJsZV9jbG9ja3MoMSk7CisJaWYgKGRpc3BjX3J1bnRpbWVfZ2V0KCkpCisJCXJldHVybjsKIAogCXNlcV9wcmludGYocywgIi0gRElTUEMgLVxuIik7CiAKQEAgLTI1NzQsNyArMjY1Myw4IEBACiAJCXNlcV9wcmludGYocywgInBja1x0XHQlLTE2bHVwY2sgZGl2XHQldVxuIiwKIAkJCQlkaXNwY19wY2xrX3JhdGUoT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSwgcGNkKTsKIAl9Ci0JZW5hYmxlX2Nsb2NrcygwKTsKKworCWRpc3BjX3J1bnRpbWVfcHV0KCk7CiB9CiAKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTCkBAIC0yNjI5LDcgKzI3MDksOCBAQAogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtNTBzICUwOHhcbiIsICNyLCBkaXNwY19yZWFkX3JlZyhyKSkKIAotCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCWlmIChkaXNwY19ydW50aW1lX2dldCgpKQorCQlyZXR1cm47CiAKIAlEVU1QUkVHKERJU1BDX1JFVklTSU9OKTsKIAlEVU1QUkVHKERJU1BDX1NZU0NPTkZJRyk7CkBAIC0yNjQ5LDcgKzI3MzAsOCBAQAogCURVTVBSRUcoRElTUENfVElNSU5HX1YoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKIAlEVU1QUkVHKERJU1BDX1BPTF9GUkVRKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CiAJRFVNUFJFRyhESVNQQ19ESVZJU09SbyhPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCURVTVBSRUcoRElTUENfR0xPQkFMX0FMUEhBKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfR0xPQkFMX0FMUEhBKSkKKwkJRFVNUFJFRyhESVNQQ19HTE9CQUxfQUxQSEEpOwogCURVTVBSRUcoRElTUENfU0laRV9NR1IoT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkpOwogCURVTVBSRUcoRElTUENfU0laRV9NR1IoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfTUdSX0xDRDIpKSB7CkBAIC0yNjgwLDIwICsyNzYyLDI1IEBACiAJRFVNUFJFRyhESVNQQ19EQVRBX0NZQ0xFMihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwogCURVTVBSRUcoRElTUENfREFUQV9DWUNMRTMoT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKIAotCURVTVBSRUcoRElTUENfQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCURVTVBSRUcoRElTUENfQ1BSX0NPRUZfRyhPTUFQX0RTU19DSEFOTkVMX0xDRCkpOwotCURVTVBSRUcoRElTUENfQ1BSX0NPRUZfQihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9DUFIpKSB7CisJCURVTVBSRUcoRElTUENfQ1BSX0NPRUZfUihPTUFQX0RTU19DSEFOTkVMX0xDRCkpOworCQlEVU1QUkVHKERJU1BDX0NQUl9DT0VGX0coT01BUF9EU1NfQ0hBTk5FTF9MQ0QpKTsKKwkJRFVNUFJFRyhESVNQQ19DUFJfQ09FRl9CKE9NQVBfRFNTX0NIQU5ORUxfTENEKSk7CisJfQogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9NR1JfTENEMikpIHsKIAkJRFVNUFJFRyhESVNQQ19EQVRBX0NZQ0xFMShPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKIAkJRFVNUFJFRyhESVNQQ19EQVRBX0NZQ0xFMihPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKIAkJRFVNUFJFRyhESVNQQ19EQVRBX0NZQ0xFMyhPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKIAotCQlEVU1QUkVHKERJU1BDX0NQUl9DT0VGX1IoT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKSk7Ci0JCURVTVBSRUcoRElTUENfQ1BSX0NPRUZfRyhPTUFQX0RTU19DSEFOTkVMX0xDRDIpKTsKLQkJRFVNUFJFRyhESVNQQ19DUFJfQ09FRl9CKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQ1BSKSkgeworCQkJRFVNUFJFRyhESVNQQ19DUFJfQ09FRl9SKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQkJRFVNUFJFRyhESVNQQ19DUFJfQ09FRl9HKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQkJRFVNUFJFRyhESVNQQ19DUFJfQ09FRl9CKE9NQVBfRFNTX0NIQU5ORUxfTENEMikpOworCQl9CiAJfQogCi0JRFVNUFJFRyhESVNQQ19PVkxfUFJFTE9BRChPTUFQX0RTU19HRlgpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfUFJFTE9BRCkpCisJCURVTVBSRUcoRElTUENfT1ZMX1BSRUxPQUQoT01BUF9EU1NfR0ZYKSk7CiAKIAlEVU1QUkVHKERJU1BDX09WTF9CQTAoT01BUF9EU1NfVklERU8xKSk7CiAJRFVNUFJFRyhESVNQQ19PVkxfQkExKE9NQVBfRFNTX1ZJREVPMSkpOwpAQCAtMjc0NCwxNCArMjgzMSwxNiBAQAogCURVTVBSRUcoRElTUENfT1ZMX0NPTlZfQ09FRihPTUFQX0RTU19WSURFTzEsIDIpKTsKIAlEVU1QUkVHKERJU1BDX09WTF9DT05WX0NPRUYoT01BUF9EU1NfVklERU8xLCAzKSk7CiAJRFVNUFJFRyhESVNQQ19PVkxfQ09OVl9DT0VGKE9NQVBfRFNTX1ZJREVPMSwgNCkpOwotCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8xLCAwKSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDEpKTsKLQlEVU1QUkVHKERJU1BDX09WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMSwgMikpOwotCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8xLCAzKSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDQpKTsKLQlEVU1QUkVHKERJU1BDX09WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMSwgNSkpOwotCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8xLCA2KSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDcpKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfRklSX0NPRUZfVikpIHsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDApKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDEpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDIpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDMpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDQpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDUpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDYpKTsKKwkJRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzEsIDcpKTsKKwl9CiAKIAlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfSEFORExFX1VWX1NFUEFSQVRFKSkgewogCQlEVU1QUkVHKERJU1BDX09WTF9CQTBfVVYoT01BUF9EU1NfVklERU8xKSk7CkBAIC0yODEyLDE0ICsyOTAxLDE3IEBACiAJRFVNUFJFRyhESVNQQ19PVkxfQ09OVl9DT0VGKE9NQVBfRFNTX1ZJREVPMiwgMikpOwogCURVTVBSRUcoRElTUENfT1ZMX0NPTlZfQ09FRihPTUFQX0RTU19WSURFTzIsIDMpKTsKIAlEVU1QUkVHKERJU1BDX09WTF9DT05WX0NPRUYoT01BUF9EU1NfVklERU8yLCA0KSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzIsIDApKTsKLQlEVU1QUkVHKERJU1BDX09WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMiwgMSkpOwotCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCAyKSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzIsIDMpKTsKLQlEVU1QUkVHKERJU1BDX09WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMiwgNCkpOwotCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCA1KSk7Ci0JRFVNUFJFRyhESVNQQ19PVkxfRklSX0NPRUZfVihPTUFQX0RTU19WSURFTzIsIDYpKTsKLQlEVU1QUkVHKERJU1BDX09WTF9GSVJfQ09FRl9WKE9NQVBfRFNTX1ZJREVPMiwgNykpOworCisJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0ZJUl9DT0VGX1YpKSB7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCAwKSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCAxKSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCAyKSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCAzKSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCA0KSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCA1KSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCA2KSk7CisJCURVTVBSRUcoRElTUENfT1ZMX0ZJUl9DT0VGX1YoT01BUF9EU1NfVklERU8yLCA3KSk7CisJfQogCiAJaWYgKGRzc19oYXNfZmVhdHVyZShGRUFUX0hBTkRMRV9VVl9TRVBBUkFURSkpIHsKIAkJRFVNUFJFRyhESVNQQ19PVkxfQkEwX1VWKE9NQVBfRFNTX1ZJREVPMikpOwpAQCAtMjg1OCwxMCArMjk1MCwxMiBAQAogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9BVFRSMikpCiAJCURVTVBSRUcoRElTUENfT1ZMX0FUVFJJQlVURVMyKE9NQVBfRFNTX1ZJREVPMikpOwogCi0JRFVNUFJFRyhESVNQQ19PVkxfUFJFTE9BRChPTUFQX0RTU19WSURFTzEpKTsKLQlEVU1QUkVHKERJU1BDX09WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMikpOworCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9QUkVMT0FEKSkgeworCQlEVU1QUkVHKERJU1BDX09WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMSkpOworCQlEVU1QUkVHKERJU1BDX09WTF9QUkVMT0FEKE9NQVBfRFNTX1ZJREVPMikpOworCX0KIAotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlkaXNwY19ydW50aW1lX3B1dCgpOwogI3VuZGVmIERVTVBSRUcKIH0KIApAQCAtMjg4Miw5ICsyOTc2LDcgQEAKIAlsIHw9IEZMRF9WQUwoYWNiaSwgMTEsIDgpOwogCWwgfD0gRkxEX1ZBTChhY2IsIDcsIDApOwogCi0JZW5hYmxlX2Nsb2NrcygxKTsKIAlkaXNwY193cml0ZV9yZWcoRElTUENfUE9MX0ZSRVEoY2hhbm5lbCksIGwpOwotCWVuYWJsZV9jbG9ja3MoMCk7CiB9CiAKIHZvaWQgZGlzcGNfc2V0X3BvbF9mcmVxKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsCkBAIC0zMDA1LDE1ICszMDk3LDExIEBACiAJCW1hc2sgfD0gaXNyX2RhdGEtPm1hc2s7CiAJfQogCi0JZW5hYmxlX2Nsb2NrcygxKTsKLQogCW9sZF9tYXNrID0gZGlzcGNfcmVhZF9yZWcoRElTUENfSVJRRU5BQkxFKTsKIAkvKiBjbGVhciB0aGUgaXJxc3RhdHVzIGZvciBuZXdseSBlbmFibGVkIGlycXMgKi8KIAlkaXNwY193cml0ZV9yZWcoRElTUENfSVJRU1RBVFVTLCAobWFzayBeIG9sZF9tYXNrKSAmIG1hc2spOwogCiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX0lSUUVOQUJMRSwgbWFzayk7Ci0KLQllbmFibGVfY2xvY2tzKDApOwogfQogCiBpbnQgb21hcF9kaXNwY19yZWdpc3Rlcl9pc3Iob21hcF9kaXNwY19pc3JfdCBpc3IsIHZvaWQgKmFyZywgdTMyIG1hc2spCkBAIC0zNTIyLDEzICszNjEwLDYgQEAKIHsKIAl1MzIgbDsKIAotCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19TWVNDT05GSUcpOwotCWwgPSBGTERfTU9EKGwsIDIsIDEzLCAxMik7CS8qIE1JRExFTU9ERTogc21hcnQgc3RhbmRieSAqLwotCWwgPSBGTERfTU9EKGwsIDIsIDQsIDMpOwkvKiBTSURMRU1PREU6IHNtYXJ0IGlkbGUgKi8KLQlsID0gRkxEX01PRChsLCAxLCAyLCAyKTsJLyogRU5XQUtFVVAgKi8KLQlsID0gRkxEX01PRChsLCAxLCAwLCAwKTsJLyogQVVUT0lETEUgKi8KLQlkaXNwY193cml0ZV9yZWcoRElTUENfU1lTQ09ORklHLCBsKTsKLQogCS8qIEV4Y2x1c2l2ZWx5IGVuYWJsZSBESVNQQ19DT1JFX0NMSyBhbmQgc2V0IGRpdmlkZXIgdG8gMSAqLwogCWlmIChkc3NfaGFzX2ZlYXR1cmUoRkVBVF9DT1JFX0NMS19ESVYpKSB7CiAJCWwgPSBkaXNwY19yZWFkX3JlZyhESVNQQ19ESVZJU09SKTsKQEAgLTM1NTIsNTggKzM2MzMsOCBAQAogCWRpc3BjX3NldF9sb2FkbW9kZShPTUFQX0RTU19MT0FEX0ZSQU1FX09OTFkpOwogCiAJZGlzcGNfcmVhZF9wbGFuZV9maWZvX3NpemVzKCk7Ci19CiAKLWludCBkaXNwY19lbmFibGVfcGxhbmUoZW51bSBvbWFwX3BsYW5lIHBsYW5lLCBib29sIGVuYWJsZSkKLXsKLQlEU1NEQkcoImRpc3BjX2VuYWJsZV9wbGFuZSAlZCwgJWRcbiIsIHBsYW5lLCBlbmFibGUpOwotCi0JZW5hYmxlX2Nsb2NrcygxKTsKLQlfZGlzcGNfZW5hYmxlX3BsYW5lKHBsYW5lLCBlbmFibGUpOwotCWVuYWJsZV9jbG9ja3MoMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRpc3BjX3NldHVwX3BsYW5lKGVudW0gb21hcF9wbGFuZSBwbGFuZSwKLQkJICAgICAgIHUzMiBwYWRkciwgdTE2IHNjcmVlbl93aWR0aCwKLQkJICAgICAgIHUxNiBwb3NfeCwgdTE2IHBvc195LAotCQkgICAgICAgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0LAotCQkgICAgICAgdTE2IG91dF93aWR0aCwgdTE2IG91dF9oZWlnaHQsCi0JCSAgICAgICBlbnVtIG9tYXBfY29sb3JfbW9kZSBjb2xvcl9tb2RlLAotCQkgICAgICAgYm9vbCBpbGFjZSwKLQkJICAgICAgIGVudW0gb21hcF9kc3Nfcm90YXRpb25fdHlwZSByb3RhdGlvbl90eXBlLAotCQkgICAgICAgdTggcm90YXRpb24sIGJvb2wgbWlycm9yLCB1OCBnbG9iYWxfYWxwaGEsCi0JCSAgICAgICB1OCBwcmVfbXVsdF9hbHBoYSwgZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCwKLQkJICAgICAgIHUzMiBwdXZfYWRkcikKLXsKLQlpbnQgciA9IDA7Ci0KLQlEU1NEQkcoImRpc3BjX3NldHVwX3BsYW5lICVkLCBwYSAleCwgc3cgJWQsICVkLCAlZCwgJWR4JWQgLT4gIgotCSAgICAgICAiJWR4JWQsIGlsYWNlICVkLCBjbW9kZSAleCwgcm90ICVkLCBtaXIgJWQgY2hhbiAlZFxuIiwKLQkgICAgICAgcGxhbmUsIHBhZGRyLCBzY3JlZW5fd2lkdGgsIHBvc194LCBwb3NfeSwKLQkgICAgICAgd2lkdGgsIGhlaWdodCwKLQkgICAgICAgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0LAotCSAgICAgICBpbGFjZSwgY29sb3JfbW9kZSwKLQkgICAgICAgcm90YXRpb24sIG1pcnJvciwgY2hhbm5lbCk7Ci0KLQllbmFibGVfY2xvY2tzKDEpOwotCi0JciA9IF9kaXNwY19zZXR1cF9wbGFuZShwbGFuZSwKLQkJCSAgIHBhZGRyLCBzY3JlZW5fd2lkdGgsCi0JCQkgICBwb3NfeCwgcG9zX3ksCi0JCQkgICB3aWR0aCwgaGVpZ2h0LAotCQkJICAgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0LAotCQkJICAgY29sb3JfbW9kZSwgaWxhY2UsCi0JCQkgICByb3RhdGlvbl90eXBlLAotCQkJICAgcm90YXRpb24sIG1pcnJvciwKLQkJCSAgIGdsb2JhbF9hbHBoYSwKLQkJCSAgIHByZV9tdWx0X2FscGhhLAotCQkJICAgY2hhbm5lbCwgcHV2X2FkZHIpOwotCi0JZW5hYmxlX2Nsb2NrcygwKTsKLQotCXJldHVybiByOworCWRpc3BjX2NvbmZpZ3VyZV9idXJzdF9zaXplcygpOwogfQogCiAvKiBESVNQQyBIVyBJUCBpbml0aWFsaXNhdGlvbiAqLwpAQCAtMzYxMiw5ICszNjQzLDE5IEBACiAJdTMyIHJldjsKIAlpbnQgciA9IDA7CiAJc3RydWN0IHJlc291cmNlICpkaXNwY19tZW07CisJc3RydWN0IGNsayAqY2xrOwogCiAJZGlzcGMucGRldiA9IHBkZXY7CiAKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJRFNTRVJSKCJjYW4ndCBnZXQgZmNrXG4iKTsKKwkJciA9IFBUUl9FUlIoY2xrKTsKKwkJZ290byBlcnJfZ2V0X2NsazsKKwl9CisKKwlkaXNwYy5kc3NfY2xrID0gY2xrOworCiAJc3Bpbl9sb2NrX2luaXQoJmRpc3BjLmlycV9sb2NrKTsKIAogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMKQEAgLTM2MjgsNjIgKzM2NjksMTAzIEBACiAJaWYgKCFkaXNwY19tZW0pIHsKIAkJRFNTRVJSKCJjYW4ndCBnZXQgSU9SRVNPVVJDRV9NRU0gRElTUENcbiIpOwogCQlyID0gLUVJTlZBTDsKLQkJZ290byBmYWlsMDsKKwkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAJZGlzcGMuYmFzZSA9IGlvcmVtYXAoZGlzcGNfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShkaXNwY19tZW0pKTsKIAlpZiAoIWRpc3BjLmJhc2UpIHsKIAkJRFNTRVJSKCJjYW4ndCBpb3JlbWFwIERJU1BDXG4iKTsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDA7CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCWRpc3BjLmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGlzcGMucGRldiwgMCk7CiAJaWYgKGRpc3BjLmlycSA8IDApIHsKIAkJRFNTRVJSKCJwbGF0Zm9ybV9nZXRfaXJxIGZhaWxlZFxuIik7CiAJCXIgPSAtRU5PREVWOwotCQlnb3RvIGZhaWwxOworCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJciA9IHJlcXVlc3RfaXJxKGRpc3BjLmlycSwgb21hcF9kaXNwY19pcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCSJPTUFQIERJU1BDIiwgZGlzcGMucGRldik7CiAJaWYgKHIgPCAwKSB7CiAJCURTU0VSUigicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBmYWlsMTsKKwkJZ290byBlcnJfaXJxOwogCX0KIAotCWVuYWJsZV9jbG9ja3MoMSk7CisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlyID0gZGlzcGNfcnVudGltZV9nZXQoKTsKKwlpZiAocikKKwkJZ290byBlcnJfcnVudGltZV9nZXQ7CiAKIAlfb21hcF9kaXNwY19pbml0aWFsX2NvbmZpZygpOwogCiAJX29tYXBfZGlzcGNfaW5pdGlhbGl6ZV9pcnEoKTsKIAotCWRpc3BjX3NhdmVfY29udGV4dCgpOwotCiAJcmV2ID0gZGlzcGNfcmVhZF9yZWcoRElTUENfUkVWSVNJT04pOwogCWRldl9kYmcoJnBkZXYtPmRldiwgIk9NQVAgRElTUEMgcmV2ICVkLiVkXG4iLAogCSAgICAgICBGTERfR0VUKHJldiwgNywgNCksIEZMRF9HRVQocmV2LCAzLCAwKSk7CiAKLQllbmFibGVfY2xvY2tzKDApOworCWRpc3BjX3J1bnRpbWVfcHV0KCk7CiAKIAlyZXR1cm4gMDsKLWZhaWwxOgorCitlcnJfcnVudGltZV9nZXQ6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCWZyZWVfaXJxKGRpc3BjLmlycSwgZGlzcGMucGRldik7CitlcnJfaXJxOgogCWlvdW5tYXAoZGlzcGMuYmFzZSk7Ci1mYWlsMDoKK2Vycl9pb3JlbWFwOgorCWNsa19wdXQoZGlzcGMuZHNzX2Nsayk7CitlcnJfZ2V0X2NsazoKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBvbWFwX2Rpc3BjaHdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJY2xrX3B1dChkaXNwYy5kc3NfY2xrKTsKKwogCWZyZWVfaXJxKGRpc3BjLmlycSwgZGlzcGMucGRldik7CiAJaW91bm1hcChkaXNwYy5iYXNlKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkaXNwY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRpc3BjX3NhdmVfY29udGV4dCgpOworCWNsa19kaXNhYmxlKGRpc3BjLmRzc19jbGspOworCWRzc19ydW50aW1lX3B1dCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzcGNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByOworCisJciA9IGRzc19ydW50aW1lX2dldCgpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwljbGtfZW5hYmxlKGRpc3BjLmRzc19jbGspOworCWRpc3BjX3Jlc3RvcmVfY29udGV4dCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkaXNwY19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IGRpc3BjX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBkaXNwY19ydW50aW1lX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfZGlzcGNod19kcml2ZXIgPSB7CiAJLnByb2JlICAgICAgICAgID0gb21hcF9kaXNwY2h3X3Byb2JlLAogCS5yZW1vdmUgICAgICAgICA9IG9tYXBfZGlzcGNod19yZW1vdmUsCiAJLmRyaXZlciAgICAgICAgID0gewogCQkubmFtZSAgID0gIm9tYXBkc3NfZGlzcGMiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZkaXNwY19wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BsYXkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BsYXkuYwppbmRleCBjMmRmYzhjLi45NDQ5NWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGxheS5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAjaW5jbHVkZSAiZHNzLmgiCisjaW5jbHVkZSAiZHNzX2ZlYXR1cmVzLmgiCiAKIHN0YXRpYyBzc2l6ZV90IGRpc3BsYXlfZW5hYmxlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTY1LDQ4ICs2Niw2IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGRpc3BsYXlfdXBkX21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gdG9fZHNzX2RldmljZShkZXYpOwotCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSA9IE9NQVBfRFNTX1VQREFURV9BVVRPOwotCWlmIChkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKQotCQltb2RlID0gZHNzZGV2LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkc3NkZXYpOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBtb2RlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZGlzcGxheV91cGRfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKLQlpbnQgdmFsLCByOwotCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZTsKLQotCWlmICghZHNzZGV2LT5kcml2ZXItPnNldF91cGRhdGVfbW9kZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyID0ga3N0cnRvaW50KGJ1ZiwgMCwgJnZhbCk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDoKLQljYXNlIE9NQVBfRFNTX1VQREFURV9BVVRPOgotCWNhc2UgT01BUF9EU1NfVVBEQVRFX01BTlVBTDoKLQkJbW9kZSA9IChlbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlKXZhbDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JciA9IGRzc2Rldi0+ZHJpdmVyLT5zZXRfdXBkYXRlX21vZGUoZHNzZGV2LCBtb2RlKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogc3RhdGljIHNzaXplX3QgZGlzcGxheV90ZWFyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjk0LDggKzI1Myw2IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihlbmFibGVkLCBTX0lSVUdPfFNfSVdVU1IsCiAJCWRpc3BsYXlfZW5hYmxlZF9zaG93LCBkaXNwbGF5X2VuYWJsZWRfc3RvcmUpOwotc3RhdGljIERFVklDRV9BVFRSKHVwZGF0ZV9tb2RlLCBTX0lSVUdPfFNfSVdVU1IsCi0JCWRpc3BsYXlfdXBkX21vZGVfc2hvdywgZGlzcGxheV91cGRfbW9kZV9zdG9yZSk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVhcl9lbGltLCBTX0lSVUdPfFNfSVdVU1IsCiAJCWRpc3BsYXlfdGVhcl9zaG93LCBkaXNwbGF5X3RlYXJfc3RvcmUpOwogc3RhdGljIERFVklDRV9BVFRSKHRpbWluZ3MsIFNfSVJVR098U19JV1VTUiwKQEAgLTMwOSw3ICsyNjYsNiBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRpc3BsYXlfc3lzZnNfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfZW5hYmxlZCwKLQkmZGV2X2F0dHJfdXBkYXRlX21vZGUsCiAJJmRldl9hdHRyX3RlYXJfZWxpbSwKIAkmZGV2X2F0dHJfdGltaW5ncywKIAkmZGV2X2F0dHJfcm90YXRlLApAQCAtMzI3LDE2ICsyODMsMTMgQEAKIEVYUE9SVF9TWU1CT0wob21hcGRzc19kZWZhdWx0X2dldF9yZXNvbHV0aW9uKTsKIAogdm9pZCBkZWZhdWx0X2dldF9vdmVybGF5X2ZpZm9fdGhyZXNob2xkcyhlbnVtIG9tYXBfcGxhbmUgcGxhbmUsCi0JCXUzMiBmaWZvX3NpemUsIGVudW0gb21hcF9idXJzdF9zaXplICpidXJzdF9zaXplLAorCQl1MzIgZmlmb19zaXplLCB1MzIgYnVyc3Rfc2l6ZSwKIAkJdTMyICpmaWZvX2xvdywgdTMyICpmaWZvX2hpZ2gpCiB7Ci0JdW5zaWduZWQgYnVyc3Rfc2l6ZV9ieXRlczsKKwl1bnNpZ25lZCBidWZfdW5pdCA9IGRzc19mZWF0X2dldF9idWZmZXJfc2l6ZV91bml0KCk7CiAKLQkqYnVyc3Rfc2l6ZSA9IE9NQVBfRFNTX0JVUlNUXzE2eDMyOwotCWJ1cnN0X3NpemVfYnl0ZXMgPSAxNiAqIDMyIC8gODsKLQotCSpmaWZvX2hpZ2ggPSBmaWZvX3NpemUgLSAxOwotCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemVfYnl0ZXM7CisJKmZpZm9faGlnaCA9IGZpZm9fc2l6ZSAtIGJ1Zl91bml0OworCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemU7CiB9CiAKIGludCBvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kcGkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCmluZGV4IGZmNmJkMzAuLmYwNTNiMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjZGVmaW5lIERTU19TVUJTWVNfTkFNRSAiRFBJIgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTMwLDggKzEyOSw2IEBACiAJYm9vbCBpc190ZnQ7CiAJaW50IHIgPSAwOwogCi0JZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7Ci0KIAlkaXNwY19zZXRfcG9sX2ZyZXEoZHNzZGV2LT5tYW5hZ2VyLT5pZCwgZHNzZGV2LT5wYW5lbC5jb25maWcsCiAJCQlkc3NkZXYtPnBhbmVsLmFjYmksIGRzc2Rldi0+cGFuZWwuYWNiKTsKIApAQCAtMTQ0LDcgKzE0MSw3IEBACiAJCXIgPSBkcGlfc2V0X2Rpc3BjX2Nsayhkc3NkZXYsIGlzX3RmdCwgdC0+cGl4ZWxfY2xvY2sgKiAxMDAwLAogCQkJCSZmY2ssICZsY2tfZGl2LCAmcGNrX2Rpdik7CiAJaWYgKHIpCi0JCWdvdG8gZXJyMDsKKwkJcmV0dXJuIHI7CiAKIAlwY2sgPSBmY2sgLyBsY2tfZGl2IC8gcGNrX2RpdiAvIDEwMDA7CiAKQEAgLTE1OCwxMiArMTU1LDEwIEBACiAKIAlkaXNwY19zZXRfbGNkX3RpbWluZ3MoZHNzZGV2LT5tYW5hZ2VyLT5pZCwgdCk7CiAKLWVycjA6Ci0JZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOwotCXJldHVybiByOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRwaV9iYXNpY19pbml0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyB2b2lkIGRwaV9iYXNpY19pbml0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlib29sIGlzX3RmdDsKIApAQCAtMTc1LDggKzE3MCw2IEBACiAJCQlPTUFQX0RTU19MQ0RfRElTUExBWV9URlQgOiBPTUFQX0RTU19MQ0RfRElTUExBWV9TVE4pOwogCWRpc3BjX3NldF90ZnRfZGF0YV9saW5lcyhkc3NkZXYtPm1hbmFnZXItPmlkLAogCQkJZHNzZGV2LT5waHkuZHBpLmRhdGFfbGluZXMpOwotCi0JcmV0dXJuIDA7CiB9CiAKIGludCBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCkBAIC0xODYsMzEgKzE3OSwzOCBAQAogCXIgPSBvbWFwX2Rzc19zdGFydF9kZXZpY2UoZHNzZGV2KTsKIAlpZiAocikgewogCQlEU1NFUlIoImZhaWxlZCB0byBzdGFydCBkZXZpY2VcbiIpOwotCQlnb3RvIGVycjA7CisJCWdvdG8gZXJyX3N0YXJ0X2RldjsKIAl9CiAKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJciA9IHJlZ3VsYXRvcl9lbmFibGUoZHBpLnZkZHNfZHNpX3JlZyk7CiAJCWlmIChyKQotCQkJZ290byBlcnIxOworCQkJZ290byBlcnJfcmVnX2VuYWJsZTsKIAl9CiAKLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKLQotCXIgPSBkcGlfYmFzaWNfaW5pdChkc3NkZXYpOworCXIgPSBkc3NfcnVudGltZV9nZXQoKTsKIAlpZiAocikKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9nZXRfZHNzOworCisJciA9IGRpc3BjX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF9kaXNwYzsKKworCWRwaV9iYXNpY19pbml0KGRzc2Rldik7CiAKIAlpZiAoZHBpX3VzZV9kc2lfcGxsKGRzc2RldikpIHsKLQkJZHNzX2Nsa19lbmFibGUoRFNTX0NMS19TWVNDSyk7CisJCXIgPSBkc2lfcnVudGltZV9nZXQoZHBpLmRzaWRldik7CisJCWlmIChyKQorCQkJZ290byBlcnJfZ2V0X2RzaTsKKwogCQlyID0gZHNpX3BsbF9pbml0KGRwaS5kc2lkZXYsIDAsIDEpOwogCQlpZiAocikKLQkJCWdvdG8gZXJyMzsKKwkJCWdvdG8gZXJyX2RzaV9wbGxfaW5pdDsKIAl9CiAKIAlyID0gZHBpX3NldF9tb2RlKGRzc2Rldik7CiAJaWYgKHIpCi0JCWdvdG8gZXJyNDsKKwkJZ290byBlcnJfc2V0X21vZGU7CiAKIAltZGVsYXkoMik7CiAKQEAgLTIxOCwxOSArMjE4LDIyIEBACiAKIAlyZXR1cm4gMDsKIAotZXJyNDoKK2Vycl9zZXRfbW9kZToKIAlpZiAoZHBpX3VzZV9kc2lfcGxsKGRzc2RldikpCiAJCWRzaV9wbGxfdW5pbml0KGRwaS5kc2lkZXYsIHRydWUpOwotZXJyMzoKK2Vycl9kc2lfcGxsX2luaXQ6CiAJaWYgKGRwaV91c2VfZHNpX3BsbChkc3NkZXYpKQotCQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19TWVNDSyk7Ci1lcnIyOgotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwkJZHNpX3J1bnRpbWVfcHV0KGRwaS5kc2lkZXYpOworZXJyX2dldF9kc2k6CisJZGlzcGNfcnVudGltZV9wdXQoKTsKK2Vycl9nZXRfZGlzcGM6CisJZHNzX3J1bnRpbWVfcHV0KCk7CitlcnJfZ2V0X2RzczoKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCXJlZ3VsYXRvcl9kaXNhYmxlKGRwaS52ZGRzX2RzaV9yZWcpOwotZXJyMToKK2Vycl9yZWdfZW5hYmxlOgogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7Ci1lcnIwOgorZXJyX3N0YXJ0X2RldjoKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0wob21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUpOwpAQCAtMjQyLDEwICsyNDUsMTEgQEAKIAlpZiAoZHBpX3VzZV9kc2lfcGxsKGRzc2RldikpIHsKIAkJZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKE9NQVBfRFNTX0NMS19TUkNfRkNLKTsKIAkJZHNpX3BsbF91bmluaXQoZHBpLmRzaWRldiwgdHJ1ZSk7Ci0JCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX1NZU0NLKTsKKwkJZHNpX3J1bnRpbWVfcHV0KGRwaS5kc2lkZXYpOwogCX0KIAotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlkaXNwY19ydW50aW1lX3B1dCgpOworCWRzc19ydW50aW1lX3B1dCgpOwogCiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlyZWd1bGF0b3JfZGlzYWJsZShkcGkudmRkc19kc2lfcmVnKTsKQEAgLTI1NywxMSArMjYxLDI2IEBACiB2b2lkIGRwaV9zZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCiAJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQogeworCWludCByOworCiAJRFNTREJHKCJkcGlfc2V0X3RpbWluZ3NcbiIpOwogCWRzc2Rldi0+cGFuZWwudGltaW5ncyA9ICp0aW1pbmdzOwogCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKSB7CisJCXIgPSBkc3NfcnVudGltZV9nZXQoKTsKKwkJaWYgKHIpCisJCQlyZXR1cm47CisKKwkJciA9IGRpc3BjX3J1bnRpbWVfZ2V0KCk7CisJCWlmIChyKSB7CisJCQlkc3NfcnVudGltZV9wdXQoKTsKKwkJCXJldHVybjsKKwkJfQorCiAJCWRwaV9zZXRfbW9kZShkc3NkZXYpOwogCQlkaXNwY19nbyhkc3NkZXYtPm1hbmFnZXItPmlkKTsKKworCQlkaXNwY19ydW50aW1lX3B1dCgpOworCQlkc3NfcnVudGltZV9wdXQoKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGRwaV9zZXRfdGltaW5ncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCmluZGV4IDM0NTc1N2MuLjdhZGJiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CkBAIC0yNjcsOCArMjY4LDEyIEBACiBzdHJ1Y3QgZHNpX2RhdGEgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdm9pZCBfX2lvbWVtCSpiYXNlOworCiAJaW50IGlycTsKIAorCXN0cnVjdCBjbGsgKmRzc19jbGs7CisJc3RydWN0IGNsayAqc3lzX2NsazsKKwogCXZvaWQgKCpkc2lfbXV4X3BhZHMpKGJvb2wgZW5hYmxlKTsKIAogCXN0cnVjdCBkc2lfY2xvY2tfaW5mbyBjdXJyZW50X2NpbmZvOwpAQCAtMzg5LDE1ICszOTQsNiBAQAogCXJldHVybiBfX3Jhd19yZWFkbChkc2ktPmJhc2UgKyBpZHguaWR4KTsKIH0KIAotCi12b2lkIGRzaV9zYXZlX2NvbnRleHQodm9pZCkKLXsKLX0KLQotdm9pZCBkc2lfcmVzdG9yZV9jb250ZXh0KHZvaWQpCi17Ci19Ci0KIHZvaWQgZHNpX2J1c19sb2NrKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYgPSBkc2lfZ2V0X2RzaWRldl9mcm9tX2Rzc2Rldihkc3NkZXYpOwpAQCAtNDkzLDkgKzQ4OSwxOCBAQAogCQkJdG90YWxfYnl0ZXMgKiAxMDAwIC8gdG90YWxfdXMpOwogfQogI2Vsc2UKLSNkZWZpbmUgZHNpX3BlcmZfbWFya19zZXR1cCh4KQotI2RlZmluZSBkc2lfcGVyZl9tYXJrX3N0YXJ0KHgpCi0jZGVmaW5lIGRzaV9wZXJmX3Nob3coeCwgeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfcGVyZl9tYXJrX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzaV9wZXJmX21hcmtfc3RhcnQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3BlcmZfc2hvdyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYsCisJCWNvbnN0IGNoYXIgKm5hbWUpCit7Cit9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgcHJpbnRfaXJxX3N0YXR1cyh1MzIgc3RhdHVzKQpAQCAtMTAzOSwxMyArMTA0NCwyNyBAQAogCXJldHVybiBlOwogfQogCi0vKiBEU0kgZnVuYyBjbG9jay4gdGhpcyBjb3VsZCBhbHNvIGJlIGRzaV9wbGxfaHNkaXZfZHNpX2NsayAqLwotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9jbG9ja3MoYm9vbCBlbmFibGUpCitpbnQgZHNpX3J1bnRpbWVfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKIHsKLQlpZiAoZW5hYmxlKQotCQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKLQllbHNlCi0JCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlpbnQgcjsKKwlzdHJ1Y3QgZHNpX2RhdGEgKmRzaSA9IGRzaV9nZXRfZHNpZHJ2X2RhdGEoZHNpZGV2KTsKKworCURTU0RCRygiZHNpX3J1bnRpbWVfZ2V0XG4iKTsKKworCXIgPSBwbV9ydW50aW1lX2dldF9zeW5jKCZkc2ktPnBkZXYtPmRldik7CisJV0FSTl9PTihyIDwgMCk7CisJcmV0dXJuIHIgPCAwID8gciA6IDA7Cit9CisKK3ZvaWQgZHNpX3J1bnRpbWVfcHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKK3sKKwlzdHJ1Y3QgZHNpX2RhdGEgKmRzaSA9IGRzaV9nZXRfZHNpZHJ2X2RhdGEoZHNpZGV2KTsKKwlpbnQgcjsKKworCURTU0RCRygiZHNpX3J1bnRpbWVfcHV0XG4iKTsKKworCXIgPSBwbV9ydW50aW1lX3B1dCgmZHNpLT5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOwogfQogCiAvKiBzb3VyY2UgY2xvY2sgZm9yIERTSSBQTEwuIHRoaXMgY291bGQgYWxzbyBiZSBQQ0xLRlJFRSAqLwpAQCAtMTA1NSw5ICsxMDc0LDkgQEAKIAlzdHJ1Y3QgZHNpX2RhdGEgKmRzaSA9IGRzaV9nZXRfZHNpZHJ2X2RhdGEoZHNpZGV2KTsKIAogCWlmIChlbmFibGUpCi0JCWRzc19jbGtfZW5hYmxlKERTU19DTEtfU1lTQ0spOworCQljbGtfZW5hYmxlKGRzaS0+c3lzX2Nsayk7CiAJZWxzZQotCQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19TWVNDSyk7CisJCWNsa19kaXNhYmxlKGRzaS0+c3lzX2Nsayk7CiAKIAlpZiAoZW5hYmxlICYmIGRzaS0+cGxsX2xvY2tlZCkgewogCQlpZiAod2FpdF9mb3JfYml0X2NoYW5nZShkc2lkZXYsIERTSV9QTExfU1RBVFVTLCAxLCAxKSAhPSAxKQpAQCAtMTE1MCwxMCArMTE2OSwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgcjsKIAlpbnQgZHNpX21vZHVsZSA9IGRzaV9nZXRfZHNpZGV2X2lkKGRzaWRldik7CisJc3RydWN0IGRzaV9kYXRhICpkc2kgPSBkc2lfZ2V0X2RzaWRydl9kYXRhKGRzaWRldik7CiAKIAlpZiAoZHNzX2dldF9kc2lfY2xrX3NvdXJjZShkc2lfbW9kdWxlKSA9PSBPTUFQX0RTU19DTEtfU1JDX0ZDSykgewogCQkvKiBEU0kgRkNMSyBzb3VyY2UgaXMgRFNTX0NMS19GQ0sgKi8KLQkJciA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0spOworCQlyID0gY2xrX2dldF9yYXRlKGRzaS0+ZHNzX2Nsayk7CiAJfSBlbHNlIHsKIAkJLyogRFNJIEZDTEsgc291cmNlIGlzIGRzaV9wbGxfaHNkaXZfZHNpX2NsayAqLwogCQlyID0gZHNpX2dldF9wbGxfaHNkaXZfZHNpX3JhdGUoZHNpZGV2KTsKQEAgLTEyNjIsNyArMTI4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGNpbmZvLT51c2Vfc3lzX2NsaykgewotCQljaW5mby0+Y2xraW4gPSBkc3NfY2xrX2dldF9yYXRlKERTU19DTEtfU1lTQ0spOworCQljaW5mby0+Y2xraW4gPSBjbGtfZ2V0X3JhdGUoZHNpLT5zeXNfY2xrKTsKIAkJLyogWFhYIGl0IGlzIHVuY2xlYXIgaWYgaGlnaGZyZXEgc2hvdWxkIGJlIHVzZWQKIAkJICogd2l0aCBEU1NfU1lTX0NMSyBzb3VyY2UgYWxzbyAqLwogCQljaW5mby0+aGlnaGZyZXEgPSAwOwpAQCAtMTMxMSw3ICsxMzMxLDcgQEAKIAlpbnQgbWF0Y2ggPSAwOwogCXVuc2lnbmVkIGxvbmcgZHNzX3N5c19jbGssIG1heF9kc3NfZmNrOwogCi0JZHNzX3N5c19jbGsgPSBkc3NfY2xrX2dldF9yYXRlKERTU19DTEtfU1lTQ0spOworCWRzc19zeXNfY2xrID0gY2xrX2dldF9yYXRlKGRzaS0+c3lzX2Nsayk7CiAKIAltYXhfZHNzX2ZjayA9IGRzc19mZWF0X2dldF9wYXJhbV9tYXgoRkVBVF9QQVJBTV9EU1NfRkNLKTsKIApAQCAtMTYwMSw3ICsxNjIxLDYgQEAKIAkJZHNpLT52ZGRzX2RzaV9yZWcgPSB2ZGRzX2RzaTsKIAl9CiAKLQllbmFibGVfY2xvY2tzKDEpOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKGRzaWRldiwgMSk7CiAJLyoKIAkgKiBOb3RlOiBTQ1AgQ0xLIGlzIG5vdCByZXF1aXJlZCBvbiBPTUFQMywgYnV0IGl0IGlzIHJlcXVpcmVkIG9uIE9NQVA0LgpAQCAtMTY1Myw3ICsxNjcyLDYgQEAKIAl9CiBlcnIwOgogCWRzaV9kaXNhYmxlX3NjcF9jbGsoZHNpZGV2KTsKLQllbmFibGVfY2xvY2tzKDApOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKGRzaWRldiwgMCk7CiAJcmV0dXJuIHI7CiB9CkBAIC0xNjcxLDcgKzE2ODksNiBAQAogCX0KIAogCWRzaV9kaXNhYmxlX3NjcF9jbGsoZHNpZGV2KTsKLQllbmFibGVfY2xvY2tzKDApOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKGRzaWRldiwgMCk7CiAKIAlEU1NEQkcoIlBMTCB1bmluaXQgZG9uZVxuIik7CkBAIC0xNjg4LDcgKzE3MDUsOCBAQAogCWRpc3BjX2Nsa19zcmMgPSBkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKTsKIAlkc2lfY2xrX3NyYyA9IGRzc19nZXRfZHNpX2Nsa19zb3VyY2UoZHNpX21vZHVsZSk7CiAKLQllbmFibGVfY2xvY2tzKDEpOworCWlmIChkc2lfcnVudGltZV9nZXQoZHNpZGV2KSkKKwkJcmV0dXJuOwogCiAJc2VxX3ByaW50ZihzLAkiLSBEU0klZCBQTEwgLVxuIiwgZHNpX21vZHVsZSArIDEpOwogCkBAIC0xNzMxLDcgKzE3NDksNyBAQAogCiAJc2VxX3ByaW50ZihzLAkiTFBfQ0xLXHRcdCVsdVxuIiwgY2luZm8tPmxwX2Nsayk7CiAKLQllbmFibGVfY2xvY2tzKDApOworCWRzaV9ydW50aW1lX3B1dChkc2lkZXYpOwogfQogCiB2b2lkIGRzaV9kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCkBAIC0xODczLDcgKzE4OTEsOCBAQAogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtMzVzICUwOHhcbiIsICNyLCBkc2lfcmVhZF9yZWcoZHNpZGV2LCByKSkKIAotCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCWlmIChkc2lfcnVudGltZV9nZXQoZHNpZGV2KSkKKwkJcmV0dXJuOwogCWRzaV9lbmFibGVfc2NwX2Nsayhkc2lkZXYpOwogCiAJRFVNUFJFRyhEU0lfUkVWSVNJT04pOwpAQCAtMTk0Nyw3ICsxOTY2LDcgQEAKIAlEVU1QUkVHKERTSV9QTExfQ09ORklHVVJBVElPTjIpOwogCiAJZHNpX2Rpc2FibGVfc2NwX2Nsayhkc2lkZXYpOwotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlkc2lfcnVudGltZV9wdXQoZHNpZGV2KTsKICN1bmRlZiBEVU1QUkVHCiB9CiAKQEAgLTI0NjMsMjggKzI0ODIsNiBAQAogCQlkc2ktPmRzaV9tdXhfcGFkcyhmYWxzZSk7CiB9CiAKLXN0YXRpYyBpbnQgX2RzaV93YWl0X3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKLXsKLQlpbnQgdCA9IDA7Ci0KLQl3aGlsZSAoUkVHX0dFVChkc2lkZXYsIERTSV9TWVNTVEFUVVMsIDAsIDApID09IDApIHsKLQkJaWYgKCsrdCA+IDUpIHsKLQkJCURTU0VSUigic29mdCByZXNldCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQkJdWRlbGF5KDEpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kc2lfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQotewotCS8qIFNvZnQgcmVzZXQgKi8KLQlSRUdfRkxEX01PRChkc2lkZXYsIERTSV9TWVNDT05GSUcsIDEsIDEsIDEpOwotCXJldHVybiBfZHNpX3dhaXRfcmVzZXQoZHNpZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgZHNpX2NvbmZpZ190eF9maWZvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldiwKIAkJZW51bSBmaWZvX3NpemUgc2l6ZTEsIGVudW0gZmlmb19zaXplIHNpemUyLAogCQllbnVtIGZpZm9fc2l6ZSBzaXplMywgZW51bSBmaWZvX3NpemUgc2l6ZTQpCkBAIC0zMzg2LDYgKzMzODMsMTAgQEAKIAlkc2lfdW5yZWdpc3Rlcl9pc3JfY2lvKGRzaWRldiwgZHNpX2NvbXBsZXRpb25faGFuZGxlciwgJmNvbXBsZXRpb24sCiAJCQlEU0lfQ0lPX0lSUV9VTFBTQUNUSVZFTk9UX0FMTDApOwogCisJLyogUmVzZXQgTEFORXhfVUxQU19TSUcyICovCisJUkVHX0ZMRF9NT0QoZHNpZGV2LCBEU0lfQ09NUExFWElPX0NGRzIsICgwIDw8IDApIHwgKDAgPDwgMSkgfCAoMCA8PCAyKSwKKwkJNywgNSk7CisKIAlkc2lfY2lvX3Bvd2VyKGRzaWRldiwgRFNJX0NPTVBMRVhJT19QT1dFUl9VTFBTKTsKIAogCWRzaV9pZl9lbmFibGUoZHNpZGV2LCBmYWxzZSk7CkBAIC00MTk4LDIyICs0MTk5LDYgQEAKIAlkc2lfcGxsX3VuaW5pdChkc2lkZXYsIGRpc2Nvbm5lY3RfbGFuZXMpOwogfQogCi1zdGF0aWMgaW50IGRzaV9jb3JlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQotewotCS8qIEF1dG9pZGxlICovCi0JUkVHX0ZMRF9NT0QoZHNpZGV2LCBEU0lfU1lTQ09ORklHLCAxLCAwLCAwKTsKLQotCS8qIEVOV0FLRVVQICovCi0JUkVHX0ZMRF9NT0QoZHNpZGV2LCBEU0lfU1lTQ09ORklHLCAxLCAyLCAyKTsKLQotCS8qIFNJRExFTU9ERSBzbWFydC1pZGxlICovCi0JUkVHX0ZMRF9NT0QoZHNpZGV2LCBEU0lfU1lTQ09ORklHLCAyLCA0LCAzKTsKLQotCV9kc2lfaW5pdGlhbGl6ZV9pcnEoZHNpZGV2KTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgb21hcGRzc19kc2lfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldiA9IGRzaV9nZXRfZHNpZGV2X2Zyb21fZHNzZGV2KGRzc2Rldik7CkBAIC00MjI5LDM3ICs0MjE0LDM3IEBACiAJciA9IG9tYXBfZHNzX3N0YXJ0X2RldmljZShkc3NkZXYpOwogCWlmIChyKSB7CiAJCURTU0VSUigiZmFpbGVkIHRvIHN0YXJ0IGRldmljZVxuIik7Ci0JCWdvdG8gZXJyMDsKKwkJZ290byBlcnJfc3RhcnRfZGV2OwogCX0KIAotCWVuYWJsZV9jbG9ja3MoMSk7CisJciA9IGRzaV9ydW50aW1lX2dldChkc2lkZXYpOworCWlmIChyKQorCQlnb3RvIGVycl9nZXRfZHNpOworCiAJZHNpX2VuYWJsZV9wbGxfY2xvY2soZHNpZGV2LCAxKTsKIAotCXIgPSBfZHNpX3Jlc2V0KGRzaWRldik7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyMTsKLQotCWRzaV9jb3JlX2luaXQoZHNpZGV2KTsKKwlfZHNpX2luaXRpYWxpemVfaXJxKGRzaWRldik7CiAKIAlyID0gZHNpX2Rpc3BsYXlfaW5pdF9kaXNwYyhkc3NkZXYpOwogCWlmIChyKQotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyX2luaXRfZGlzcGM7CiAKIAlyID0gZHNpX2Rpc3BsYXlfaW5pdF9kc2koZHNzZGV2KTsKIAlpZiAocikKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pbml0X2RzaTsKIAogCW11dGV4X3VubG9jaygmZHNpLT5sb2NrKTsKIAogCXJldHVybiAwOwogCi1lcnIyOgorZXJyX2luaXRfZHNpOgogCWRzaV9kaXNwbGF5X3VuaW5pdF9kaXNwYyhkc3NkZXYpOwotZXJyMToKLQllbmFibGVfY2xvY2tzKDApOworZXJyX2luaXRfZGlzcGM6CiAJZHNpX2VuYWJsZV9wbGxfY2xvY2soZHNpZGV2LCAwKTsKKwlkc2lfcnVudGltZV9wdXQoZHNpZGV2KTsKK2Vycl9nZXRfZHNpOgogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7Ci1lcnIwOgorZXJyX3N0YXJ0X2RldjoKIAltdXRleF91bmxvY2soJmRzaS0+bG9jayk7CiAJRFNTREJHKCJkc2lfZGlzcGxheV9lbmFibGUgRkFJTEVEXG4iKTsKIAlyZXR1cm4gcjsKQEAgLTQyNzgsMTEgKzQyNjMsMTYgQEAKIAogCW11dGV4X2xvY2soJmRzaS0+bG9jayk7CiAKKwlkc2lfc3luY192Yyhkc2lkZXYsIDApOworCWRzaV9zeW5jX3ZjKGRzaWRldiwgMSk7CisJZHNpX3N5bmNfdmMoZHNpZGV2LCAyKTsKKwlkc2lfc3luY192Yyhkc2lkZXYsIDMpOworCiAJZHNpX2Rpc3BsYXlfdW5pbml0X2Rpc3BjKGRzc2Rldik7CiAKIAlkc2lfZGlzcGxheV91bmluaXRfZHNpKGRzc2RldiwgZGlzY29ubmVjdF9sYW5lcywgZW50ZXJfdWxwcyk7CiAKLQllbmFibGVfY2xvY2tzKDApOworCWRzaV9ydW50aW1lX3B1dChkc2lkZXYpOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKGRzaWRldiwgMCk7CiAKIAlvbWFwX2Rzc19zdG9wX2RldmljZShkc3NkZXYpOwpAQCAtNDMwMiwxNiArNDI5MiwxMSBAQAogRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RzaV9lbmFibGVfdGUpOwogCiB2b2lkIGRzaV9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAotCQl1MzIgZmlmb19zaXplLCBlbnVtIG9tYXBfYnVyc3Rfc2l6ZSAqYnVyc3Rfc2l6ZSwKKwkJdTMyIGZpZm9fc2l6ZSwgdTMyIGJ1cnN0X3NpemUsCiAJCXUzMiAqZmlmb19sb3csIHUzMiAqZmlmb19oaWdoKQogewotCXVuc2lnbmVkIGJ1cnN0X3NpemVfYnl0ZXM7Ci0KLQkqYnVyc3Rfc2l6ZSA9IE9NQVBfRFNTX0JVUlNUXzE2eDMyOwotCWJ1cnN0X3NpemVfYnl0ZXMgPSAxNiAqIDMyIC8gODsKLQotCSpmaWZvX2hpZ2ggPSBmaWZvX3NpemUgLSBidXJzdF9zaXplX2J5dGVzOwotCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemVfYnl0ZXMgKiAyOworCSpmaWZvX2hpZ2ggPSBmaWZvX3NpemUgLSBidXJzdF9zaXplOworCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemUgKiAyOwogfQogCiBpbnQgZHNpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCkBAIC00NDM3LDcgKzQ0MjIsNDcgQEAKIAlkc2ktPmxwZGl2X21heCA9IGRzc19mZWF0X2dldF9wYXJhbV9tYXgoRkVBVF9QQVJBTV9EU0lQTExfTFBESVYpOwogfQogCi1zdGF0aWMgaW50IGRzaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKK3N0YXRpYyBpbnQgZHNpX2dldF9jbG9ja3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQoreworCXN0cnVjdCBkc2lfZGF0YSAqZHNpID0gZHNpX2dldF9kc2lkcnZfZGF0YShkc2lkZXYpOworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoJmRzaWRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCURTU0VSUigiY2FuJ3QgZ2V0IGZja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJfQorCisJZHNpLT5kc3NfY2xrID0gY2xrOworCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwMzYzMCgpKQorCQljbGsgPSBjbGtfZ2V0KCZkc2lkZXYtPmRldiwgImRzczJfYWx3b25fZmNrIik7CisJZWxzZQorCQljbGsgPSBjbGtfZ2V0KCZkc2lkZXYtPmRldiwgInN5c19jbGsiKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJRFNTRVJSKCJjYW4ndCBnZXQgc3lzX2Nsa1xuIik7CisJCWNsa19wdXQoZHNpLT5kc3NfY2xrKTsKKwkJZHNpLT5kc3NfY2xrID0gTlVMTDsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwl9CisKKwlkc2ktPnN5c19jbGsgPSBjbGs7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHNpX3B1dF9jbG9ja3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQoreworCXN0cnVjdCBkc2lfZGF0YSAqZHNpID0gZHNpX2dldF9kc2lkcnZfZGF0YShkc2lkZXYpOworCisJaWYgKGRzaS0+ZHNzX2NsaykKKwkJY2xrX3B1dChkc2ktPmRzc19jbGspOworCWlmIChkc2ktPnN5c19jbGspCisJCWNsa19wdXQoZHNpLT5zeXNfY2xrKTsKK30KKworLyogRFNJMSBIVyBJUCBpbml0aWFsaXNhdGlvbiAqLworc3RhdGljIGludCBvbWFwX2RzaTFod19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYpCiB7CiAJc3RydWN0IG9tYXBfZGlzcGxheV9wbGF0Zm9ybV9kYXRhICpkc3NfcGxhdF9kYXRhOwogCXN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvICpib2FyZF9pbmZvOwpAQCAtNDQ0OSw3ICs0NDc0LDcgQEAKIAlkc2kgPSBremFsbG9jKHNpemVvZigqZHNpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkc2kpIHsKIAkJciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMDsKKwkJZ290byBlcnJfYWxsb2M7CiAJfQogCiAJZHNpLT5wZGV2ID0gZHNpZGV2OwpAQCAtNDQ3Miw2ICs0NDk3LDEyIEBACiAJbXV0ZXhfaW5pdCgmZHNpLT5sb2NrKTsKIAlzZW1hX2luaXQoJmRzaS0+YnVzX2xvY2ssIDEpOwogCisJciA9IGRzaV9nZXRfY2xvY2tzKGRzaWRldik7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF9jbGs7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmZHNpZGV2LT5kZXYpOworCiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZHNpLT5mcmFtZWRvbmVfdGltZW91dF93b3JrLAogCQkJZHNpX2ZyYW1lZG9uZV90aW1lb3V0X3dvcmtfY2FsbGJhY2spOwogCkBAIC00NDg0LDI2ICs0NTE1LDI2IEBACiAJaWYgKCFkc2lfbWVtKSB7CiAJCURTU0VSUigiY2FuJ3QgZ2V0IElPUkVTT1VSQ0VfTUVNIERTSVxuIik7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCWRzaS0+YmFzZSA9IGlvcmVtYXAoZHNpX21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoZHNpX21lbSkpOwogCWlmICghZHNpLT5iYXNlKSB7CiAJCURTU0VSUigiY2FuJ3QgaW9yZW1hcCBEU0lcbiIpOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAlkc2ktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZHNpLT5wZGV2LCAwKTsKIAlpZiAoZHNpLT5pcnEgPCAwKSB7CiAJCURTU0VSUigicGxhdGZvcm1fZ2V0X2lycSBmYWlsZWRcbiIpOwogCQlyID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9nZXRfaXJxOwogCX0KIAogCXIgPSByZXF1ZXN0X2lycShkc2ktPmlycSwgb21hcF9kc2lfaXJxX2hhbmRsZXIsIElSUUZfU0hBUkVELAogCQlkZXZfbmFtZSgmZHNpZGV2LT5kZXYpLCBkc2ktPnBkZXYpOwogCWlmIChyIDwgMCkgewogCQlEU1NFUlIoInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfZ2V0X2lycTsKIAl9CiAKIAkvKiBEU0kgVkNzIGluaXRpYWxpemF0aW9uICovCkBAIC00NTE1LDcgKzQ1NDYsOSBAQAogCiAJZHNpX2NhbGNfY2xvY2tfcGFyYW1fcmFuZ2VzKGRzaWRldik7CiAKLQllbmFibGVfY2xvY2tzKDEpOworCXIgPSBkc2lfcnVudGltZV9nZXQoZHNpZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnJfZ2V0X2RzaTsKIAogCXJldiA9IGRzaV9yZWFkX3JlZyhkc2lkZXYsIERTSV9SRVZJU0lPTik7CiAJZGV2X2RiZygmZHNpZGV2LT5kZXYsICJPTUFQIERTSSByZXYgJWQuJWRcbiIsCkBAIC00NTIzLDIxICs0NTU2LDMyIEBACiAKIAlkc2ktPm51bV9kYXRhX2xhbmVzID0gZHNpX2dldF9udW1fZGF0YV9sYW5lcyhkc2lkZXYpOwogCi0JZW5hYmxlX2Nsb2NrcygwKTsKKwlkc2lfcnVudGltZV9wdXQoZHNpZGV2KTsKIAogCXJldHVybiAwOwotZXJyMjoKKworZXJyX2dldF9kc2k6CisJZnJlZV9pcnEoZHNpLT5pcnEsIGRzaS0+cGRldik7CitlcnJfZ2V0X2lycToKIAlpb3VubWFwKGRzaS0+YmFzZSk7Ci1lcnIxOgorZXJyX2lvcmVtYXA6CisJcG1fcnVudGltZV9kaXNhYmxlKCZkc2lkZXYtPmRldik7CitlcnJfZ2V0X2NsazoKIAlrZnJlZShkc2kpOwotZXJyMDoKK2Vycl9hbGxvYzoKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgZHNpX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQorc3RhdGljIGludCBvbWFwX2RzaTFod19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQogewogCXN0cnVjdCBkc2lfZGF0YSAqZHNpID0gZHNpX2dldF9kc2lkcnZfZGF0YShkc2lkZXYpOwogCisJV0FSTl9PTihkc2ktPnNjcF9jbGtfcmVmY291bnQgPiAwKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmZHNpZGV2LT5kZXYpOworCisJZHNpX3B1dF9jbG9ja3MoZHNpZGV2KTsKKwogCWlmIChkc2ktPnZkZHNfZHNpX3JlZyAhPSBOVUxMKSB7CiAJCWlmIChkc2ktPnZkZHNfZHNpX2VuYWJsZWQpIHsKIAkJCXJlZ3VsYXRvcl9kaXNhYmxlKGRzaS0+dmRkc19kc2lfcmVnKTsKQEAgLTQ1NTMsMzEgKzQ1OTcsNDggQEAKIAogCWtmcmVlKGRzaSk7CiAKLQlEU1NEQkcoIm9tYXBfZHNpX2V4aXRcbiIpOworCXJldHVybiAwOwogfQogCi0vKiBEU0kxIEhXIElQIGluaXRpYWxpc2F0aW9uICovCi1zdGF0aWMgaW50IG9tYXBfZHNpMWh3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldikKK3N0YXRpYyBpbnQgZHNpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGRzaV9kYXRhICpkc2kgPSBkc2lfZ2V0X2RzaWRydl9kYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKworCWNsa19kaXNhYmxlKGRzaS0+ZHNzX2Nsayk7CisKKwlkaXNwY19ydW50aW1lX3B1dCgpOworCWRzc19ydW50aW1lX3B1dCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHNpX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHNpX2RhdGEgKmRzaSA9IGRzaV9nZXRfZHNpZHJ2X2RhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwogCWludCByOwogCi0JciA9IGRzaV9pbml0KGRzaWRldik7Ci0JaWYgKHIpIHsKLQkJRFNTRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBEU0lcbiIpOwotCQlnb3RvIGVycl9kc2k7Ci0JfQotZXJyX2RzaToKKwlyID0gZHNzX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF9kc3M7CisKKwlyID0gZGlzcGNfcnVudGltZV9nZXQoKTsKKwlpZiAocikKKwkJZ290byBlcnJfZ2V0X2Rpc3BjOworCisJY2xrX2VuYWJsZShkc2ktPmRzc19jbGspOworCisJcmV0dXJuIDA7CisKK2Vycl9nZXRfZGlzcGM6CisJZHNzX3J1bnRpbWVfcHV0KCk7CitlcnJfZ2V0X2RzczoKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIGludCBvbWFwX2RzaTFod19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQotewotCXN0cnVjdCBkc2lfZGF0YSAqZHNpID0gZHNpX2dldF9kc2lkcnZfZGF0YShkc2lkZXYpOwotCi0JZHNpX2V4aXQoZHNpZGV2KTsKLQlXQVJOX09OKGRzaS0+c2NwX2Nsa19yZWZjb3VudCA+IDApOwotCXJldHVybiAwOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGRzaV9wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IGRzaV9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gZHNpX3J1bnRpbWVfcmVzdW1lLAorfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9kc2kxaHdfZHJpdmVyID0gewogCS5wcm9iZSAgICAgICAgICA9IG9tYXBfZHNpMWh3X3Byb2JlLApAQCAtNDU4NSw2ICs0NjQ2LDcgQEAKIAkuZHJpdmVyICAgICAgICAgPSB7CiAJCS5uYW1lICAgPSAib21hcGRzc19kc2kxIiwKIAkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmZHNpX3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwppbmRleCBkOTQ4OWQ1Li4wZjljM2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgpAQCAtNTksMTUgKzYxLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdm9pZCBfX2lvbWVtICAgICpiYXNlOwotCWludCAgICAgICAgICAgICBjdHhfaWQ7CiAKIAlzdHJ1Y3QgY2xrCSpkcGxsNF9tNF9jazsKLQlzdHJ1Y3QgY2xrCSpkc3NfaWNrOwotCXN0cnVjdCBjbGsJKmRzc19mY2s7Ci0Jc3RydWN0IGNsawkqZHNzX3N5c19jbGs7Ci0Jc3RydWN0IGNsawkqZHNzX3R2X2ZjazsKLQlzdHJ1Y3QgY2xrCSpkc3NfdmlkZW9fZmNrOwotCXVuc2lnbmVkCW51bV9jbGtzX2VuYWJsZWQ7CisJc3RydWN0IGNsawkqZHNzX2NsazsKIAogCXVuc2lnbmVkIGxvbmcJY2FjaGVfcmVxX3BjazsKIAl1bnNpZ25lZCBsb25nCWNhY2hlX3ByYXRlOwpAQCAtNzgsNiArNzQsNyBAQAogCWVudW0gb21hcF9kc3NfY2xrX3NvdXJjZSBkaXNwY19jbGtfc291cmNlOwogCWVudW0gb21hcF9kc3NfY2xrX3NvdXJjZSBsY2RfY2xrX3NvdXJjZVtNQVhfRFNTX0xDRF9NQU5BR0VSU107CiAKKwlib29sCQljdHhfdmFsaWQ7CiAJdTMyCQljdHhbRFNTX1NaX1JFR1MgLyBzaXplb2YodTMyKV07CiB9IGRzczsKIApAQCAtODcsMTMgKzg0LDYgQEAKIAlbT01BUF9EU1NfQ0xLX1NSQ19GQ0tdCQkJPSAiRFNTX0ZDSyIsCiB9OwogCi1zdGF0aWMgdm9pZCBkc3NfY2xrX2VuYWJsZV9hbGxfbm9fY3R4KHZvaWQpOwotc3RhdGljIHZvaWQgZHNzX2Nsa19kaXNhYmxlX2FsbF9ub19jdHgodm9pZCk7Ci1zdGF0aWMgdm9pZCBkc3NfY2xrX2VuYWJsZV9ub19jdHgoZW51bSBkc3NfY2xvY2sgY2xrcyk7Ci1zdGF0aWMgdm9pZCBkc3NfY2xrX2Rpc2FibGVfbm9fY3R4KGVudW0gZHNzX2Nsb2NrIGNsa3MpOwotCi1zdGF0aWMgaW50IF9vbWFwX2Rzc193YWl0X3Jlc2V0KHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNzX3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3QgZHNzX3JlZyBpZHgsIHUzMiB2YWwpCiB7CiAJX19yYXdfd3JpdGVsKHZhbCwgZHNzLmJhc2UgKyBpZHguaWR4KTsKQEAgLTEwOSwxMiArOTksMTAgQEAKICNkZWZpbmUgUlIocmVnKSBcCiAJZHNzX3dyaXRlX3JlZyhEU1NfIyNyZWcsIGRzcy5jdHhbKERTU18jI3JlZykuaWR4IC8gc2l6ZW9mKHUzMildKQogCi12b2lkIGRzc19zYXZlX2NvbnRleHQodm9pZCkKK3N0YXRpYyB2b2lkIGRzc19zYXZlX2NvbnRleHQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybjsKKwlEU1NEQkcoImRzc19zYXZlX2NvbnRleHRcbiIpOwogCi0JU1IoU1lTQ09ORklHKTsKIAlTUihDT05UUk9MKTsKIAogCWlmIChkc3NfZmVhdF9nZXRfc3VwcG9ydGVkX2Rpc3BsYXlzKE9NQVBfRFNTX0NIQU5ORUxfTENEKSAmCkBAIC0xMjIsMTQgKzExMCwxOSBAQAogCQlTUihTRElfQ09OVFJPTCk7CiAJCVNSKFBMTF9DT05UUk9MKTsKIAl9CisKKwlkc3MuY3R4X3ZhbGlkID0gdHJ1ZTsKKworCURTU0RCRygiY29udGV4dCBzYXZlZFxuIik7CiB9CiAKLXZvaWQgZHNzX3Jlc3RvcmVfY29udGV4dCh2b2lkKQorc3RhdGljIHZvaWQgZHNzX3Jlc3RvcmVfY29udGV4dCh2b2lkKQogewotCWlmIChfb21hcF9kc3Nfd2FpdF9yZXNldCgpKQotCQlEU1NFUlIoIkRTUyBub3QgY29taW5nIG91dCBvZiByZXNldCBhZnRlciBzbGVlcFxuIik7CisJRFNTREJHKCJkc3NfcmVzdG9yZV9jb250ZXh0XG4iKTsKIAotCVJSKFNZU0NPTkZJRyk7CisJaWYgKCFkc3MuY3R4X3ZhbGlkKQorCQlyZXR1cm47CisKIAlSUihDT05UUk9MKTsKIAogCWlmIChkc3NfZmVhdF9nZXRfc3VwcG9ydGVkX2Rpc3BsYXlzKE9NQVBfRFNTX0NIQU5ORUxfTENEKSAmCkBAIC0xMzcsNiArMTMwLDggQEAKIAkJUlIoU0RJX0NPTlRST0wpOwogCQlSUihQTExfQ09OVFJPTCk7CiAJfQorCisJRFNTREJHKCJjb250ZXh0IHJlc3RvcmVkXG4iKTsKIH0KIAogI3VuZGVmIFNSCkBAIC0yMzQsNiArMjI5LDcgQEAKIAlyZXR1cm4gZHNzX2dlbmVyaWNfY2xrX3NvdXJjZV9uYW1lc1tjbGtfc3JjXTsKIH0KIAorCiB2b2lkIGRzc19kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBkcGxsNF9ja19yYXRlOwpAQCAtMjQxLDEzICsyMzcsMTQgQEAKIAljb25zdCBjaGFyICpmY2xrX25hbWUsICpmY2xrX3JlYWxfbmFtZTsKIAl1bnNpZ25lZCBsb25nIGZjbGtfcmF0ZTsKIAotCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCWlmIChkc3NfcnVudGltZV9nZXQoKSkKKwkJcmV0dXJuOwogCiAJc2VxX3ByaW50ZihzLCAiLSBEU1MgLVxuIik7CiAKIAlmY2xrX25hbWUgPSBkc3NfZ2V0X2dlbmVyaWNfY2xrX3NvdXJjZV9uYW1lKE9NQVBfRFNTX0NMS19TUkNfRkNLKTsKIAlmY2xrX3JlYWxfbmFtZSA9IGRzc19mZWF0X2dldF9jbGtfc291cmNlX25hbWUoT01BUF9EU1NfQ0xLX1NSQ19GQ0spOwotCWZjbGtfcmF0ZSA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0spOworCWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShkc3MuZHNzX2Nsayk7CiAKIAlpZiAoZHNzLmRwbGw0X200X2NrKSB7CiAJCWRwbGw0X2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrX2dldF9wYXJlbnQoZHNzLmRwbGw0X200X2NrKSk7CkBAIC0yNzMsMTQgKzI3MCwxNSBAQAogCQkJCWZjbGtfcmF0ZSk7CiAJfQogCi0JZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCWRzc19ydW50aW1lX3B1dCgpOwogfQogCiB2b2lkIGRzc19kdW1wX3JlZ3Moc3RydWN0IHNlcV9maWxlICpzKQogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtMzVzICUwOHhcbiIsICNyLCBkc3NfcmVhZF9yZWcocikpCiAKLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlpZiAoZHNzX3J1bnRpbWVfZ2V0KCkpCisJCXJldHVybjsKIAogCURVTVBSRUcoRFNTX1JFVklTSU9OKTsKIAlEVU1QUkVHKERTU19TWVNDT05GSUcpOwpAQCAtMjk0LDcgKzI5Miw3IEBACiAJCURVTVBSRUcoRFNTX1NESV9TVEFUVVMpOwogCX0KIAotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlkc3NfcnVudGltZV9wdXQoKTsKICN1bmRlZiBEVU1QUkVHCiB9CiAKQEAgLTQzNyw3ICs0MzUsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChjaW5mby0+ZmNrX2RpdiAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNpbmZvLT5mY2sgPSBkc3NfY2xrX2dldF9yYXRlKERTU19DTEtfRkNLKTsKKwkJY2luZm8tPmZjayA9IGNsa19nZXRfcmF0ZShkc3MuZHNzX2Nsayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NjcsNyArNDY1LDcgQEAKIAogaW50IGRzc19nZXRfY2xvY2tfZGl2KHN0cnVjdCBkc3NfY2xvY2tfaW5mbyAqY2luZm8pCiB7Ci0JY2luZm8tPmZjayA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0spOworCWNpbmZvLT5mY2sgPSBjbGtfZ2V0X3JhdGUoZHNzLmRzc19jbGspOwogCiAJaWYgKGRzcy5kcGxsNF9tNF9jaykgewogCQl1bnNpZ25lZCBsb25nIHByYXRlOwpAQCAtNTEyLDcgKzUxMCw3IEBACiAKIAltYXhfZHNzX2ZjayA9IGRzc19mZWF0X2dldF9wYXJhbV9tYXgoRkVBVF9QQVJBTV9EU1NfRkNLKTsKIAotCWZjayA9IGRzc19jbGtfZ2V0X3JhdGUoRFNTX0NMS19GQ0spOworCWZjayA9IGNsa19nZXRfcmF0ZShkc3MuZHNzX2Nsayk7CiAJaWYgKHJlcV9wY2sgPT0gZHNzLmNhY2hlX3JlcV9wY2sgJiYKIAkJCSgoY3B1X2lzX29tYXAzNHh4KCkgJiYgcHJhdGUgPT0gZHNzLmNhY2hlX3ByYXRlKSB8fAogCQkJIGRzcy5jYWNoZV9kc3NfY2luZm8uZmNrID09IGZjaykpIHsKQEAgLTUzOSw3ICs1MzcsNyBAQAogCWlmIChkc3MuZHBsbDRfbTRfY2sgPT0gTlVMTCkgewogCQlzdHJ1Y3QgZGlzcGNfY2xvY2tfaW5mbyBjdXJfZGlzcGM7CiAJCS8qIFhYWCBjYW4gd2UgY2hhbmdlIHRoZSBjbG9jayBvbiBvbWFwMj8gKi8KLQkJZmNrID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX0ZDSyk7CisJCWZjayA9IGNsa19nZXRfcmF0ZShkc3MuZHNzX2Nsayk7CiAJCWZja19kaXYgPSAxOwogCiAJCWRpc3BjX2ZpbmRfY2xrX2RpdnMoaXNfdGZ0LCByZXFfcGNrLCBmY2ssICZjdXJfZGlzcGMpOwpAQCAtNjE2LDI4ICs2MTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9vbWFwX2Rzc193YWl0X3Jlc2V0KHZvaWQpCi17Ci0JaW50IHQgPSAwOwotCi0Jd2hpbGUgKFJFR19HRVQoRFNTX1NZU1NUQVRVUywgMCwgMCkgPT0gMCkgewotCQlpZiAoKyt0ID4gMTAwMCkgewotCQkJRFNTRVJSKCJzb2Z0IHJlc2V0IGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX29tYXBfZHNzX3Jlc2V0KHZvaWQpCi17Ci0JLyogU29mdCByZXNldCAqLwotCVJFR19GTERfTU9EKERTU19TWVNDT05GSUcsIDEsIDEsIDEpOwotCXJldHVybiBfb21hcF9kc3Nfd2FpdF9yZXNldCgpOwotfQotCiB2b2lkIGRzc19zZXRfdmVuY19vdXRwdXQoZW51bSBvbWFwX2Rzc192ZW5jX3R5cGUgdHlwZSkKIHsKIAlpbnQgbCA9IDA7CkBAIC02NjMsNDggKzYzOSwxMjcgQEAKIAlSRUdfRkxEX01PRChEU1NfQ09OVFJPTCwgaGRtaSwgMTUsIDE1KTsJLyogVkVOQ19IRE1JX1NXSVRDSCAqLwogfQogCi1zdGF0aWMgaW50IGRzc19pbml0KHZvaWQpCitzdGF0aWMgaW50IGRzc19nZXRfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByOworCisJY2xrID0gY2xrX2dldCgmZHNzLnBkZXYtPmRldiwgImZjayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlEU1NFUlIoImNhbid0IGdldCBjbG9jayBmY2tcbiIpOworCQlyID0gUFRSX0VSUihjbGspOworCQlnb3RvIGVycjsKKwl9CisKKwlkc3MuZHNzX2NsayA9IGNsazsKKworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQljbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsNF9tNF9jayIpOworCQlpZiAoSVNfRVJSKGNsaykpIHsKKwkJCURTU0VSUigiRmFpbGVkIHRvIGdldCBkcGxsNF9tNF9ja1xuIik7CisJCQlyID0gUFRSX0VSUihjbGspOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWNsayA9IGNsa19nZXQoTlVMTCwgImRwbGxfcGVyX201eDJfY2siKTsKKwkJaWYgKElTX0VSUihjbGspKSB7CisJCQlEU1NFUlIoIkZhaWxlZCB0byBnZXQgZHBsbF9wZXJfbTV4Ml9ja1xuIik7CisJCQlyID0gUFRSX0VSUihjbGspOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UgeyAvKiBvbWFwMjR4eCAqLworCQljbGsgPSBOVUxMOworCX0KKworCWRzcy5kcGxsNF9tNF9jayA9IGNsazsKKworCXJldHVybiAwOworCitlcnI6CisJaWYgKGRzcy5kc3NfY2xrKQorCQljbGtfcHV0KGRzcy5kc3NfY2xrKTsKKwlpZiAoZHNzLmRwbGw0X200X2NrKQorCQljbGtfcHV0KGRzcy5kcGxsNF9tNF9jayk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgZHNzX3B1dF9jbG9ja3Modm9pZCkKK3sKKwlpZiAoZHNzLmRwbGw0X200X2NrKQorCQljbGtfcHV0KGRzcy5kcGxsNF9tNF9jayk7CisJY2xrX3B1dChkc3MuZHNzX2Nsayk7Cit9CisKK3N0cnVjdCBjbGsgKmRzc19nZXRfaWNrKHZvaWQpCit7CisJcmV0dXJuIGNsa19nZXQoJmRzcy5wZGV2LT5kZXYsICJpY2siKTsKK30KKworaW50IGRzc19ydW50aW1lX2dldCh2b2lkKQogewogCWludCByOwotCXUzMiByZXY7CisKKwlEU1NEQkcoImRzc19ydW50aW1lX2dldFxuIik7CisKKwlyID0gcG1fcnVudGltZV9nZXRfc3luYygmZHNzLnBkZXYtPmRldik7CisJV0FSTl9PTihyIDwgMCk7CisJcmV0dXJuIHIgPCAwID8gciA6IDA7Cit9CisKK3ZvaWQgZHNzX3J1bnRpbWVfcHV0KHZvaWQpCit7CisJaW50IHI7CisKKwlEU1NEQkcoImRzc19ydW50aW1lX3B1dFxuIik7CisKKwlyID0gcG1fcnVudGltZV9wdXQoJmRzcy5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOworfQorCisvKiBERUJVR0ZTICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUKQordm9pZCBkc3NfZGVidWdfZHVtcF9jbG9ja3Moc3RydWN0IHNlcV9maWxlICpzKQoreworCWRzc19kdW1wX2Nsb2NrcyhzKTsKKwlkaXNwY19kdW1wX2Nsb2NrcyhzKTsKKyNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0RTSQorCWRzaV9kdW1wX2Nsb2NrcyhzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIERTUyBIVyBJUCBpbml0aWFsaXNhdGlvbiAqLworc3RhdGljIGludCBvbWFwX2Rzc2h3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CiAJc3RydWN0IHJlc291cmNlICpkc3NfbWVtOwotCXN0cnVjdCBjbGsgKmRwbGw0X200X2NrOworCXUzMiByZXY7CisJaW50IHI7CisKKwlkc3MucGRldiA9IHBkZXY7CiAKIAlkc3NfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRzcy5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFkc3NfbWVtKSB7CiAJCURTU0VSUigiY2FuJ3QgZ2V0IElPUkVTT1VSQ0VfTUVNIERTU1xuIik7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWwwOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAlkc3MuYmFzZSA9IGlvcmVtYXAoZHNzX21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoZHNzX21lbSkpOwogCWlmICghZHNzLmJhc2UpIHsKIAkJRFNTRVJSKCJjYW4ndCBpb3JlbWFwIERTU1xuIik7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWwwOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAotCS8qIGRpc2FibGUgTENEIGFuZCBESUdJVCBvdXRwdXQuIFRoaXMgc2VlbXMgdG8gZml4IHRoZSBzeW5jbG9zdAotCSAqIHByb2JsZW0gdGhhdCB3ZSBnZXQsIGlmIHRoZSBib290bG9hZGVyIHN0YXJ0cyB0aGUgRFNTIGFuZAotCSAqIHRoZSBrZXJuZWwgcmVzZXRzIGl0ICovCi0Jb21hcF93cml0ZWwob21hcF9yZWFkbCgweDQ4MDUwNDQwKSAmIH4weDMsIDB4NDgwNTA0NDApOworCXIgPSBkc3NfZ2V0X2Nsb2NrcygpOworCWlmIChyKQorCQlnb3RvIGVycl9jbG9ja3M7CiAKLSNpZmRlZiBDT05GSUdfT01BUDJfRFNTX1NMRUVQX0JFRk9SRV9SRVNFVAotCS8qIFdlIG5lZWQgdG8gd2FpdCBoZXJlIGEgYml0LCBvdGhlcndpc2Ugd2Ugc29tZXRpbWVzIHN0YXJ0IHRvCi0JICogZ2V0IHN5bmNsb3N0IGVycm9ycywgYW5kIGFmdGVyIHRoYXQgb25seSBwb3dlciBjeWNsZSB3aWxsCi0JICogcmVzdG9yZSBEU1MgZnVuY3Rpb25hbGl0eS4gSSBoYXZlIG5vIGlkZWEgd2h5IHRoaXMgaGFwcGVucy4KLQkgKiBBbmQgd2UgaGF2ZSB0byB3YWl0IF9iZWZvcmVfIHJlc2V0dGluZyB0aGUgRFNTLCBidXQgYWZ0ZXIKLQkgKiBlbmFibGluZyBjbG9ja3MuCi0JICoKLQkgKiBUaGlzIGJ1ZyB3YXMgYXQgbGVhc3QgcHJlc2VudCBvbiBPTUFQMzQzMC4gSXQncyB1bmtub3duCi0JICogaWYgaXQgaGFwcGVucyBvbiBPTUFQMiBvciBPTUFQMzYzMC4KLQkgKi8KLQltc2xlZXAoNTApOwotI2VuZGlmCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAKLQlfb21hcF9kc3NfcmVzZXQoKTsKLQotCS8qIGF1dG9pZGxlICovCi0JUkVHX0ZMRF9NT0QoRFNTX1NZU0NPTkZJRywgMSwgMCwgMCk7CisJciA9IGRzc19ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlnb3RvIGVycl9ydW50aW1lX2dldDsKIAogCS8qIFNlbGVjdCBEUExMICovCiAJUkVHX0ZMRF9NT0QoRFNTX0NPTlRST0wsIDAsIDAsIDApOwpAQCAtNzE0LDQwNCArNzY5LDEyIEBACiAJUkVHX0ZMRF9NT0QoRFNTX0NPTlRST0wsIDEsIDMsIDMpOwkvKiB2ZW5jIGNsb2NrIDR4IGVuYWJsZSAqLwogCVJFR19GTERfTU9EKERTU19DT05UUk9MLCAwLCAyLCAyKTsJLyogdmVuYyBjbG9jayBtb2RlID0gbm9ybWFsICovCiAjZW5kaWYKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJZHBsbDRfbTRfY2sgPSBjbGtfZ2V0KE5VTEwsICJkcGxsNF9tNF9jayIpOwotCQlpZiAoSVNfRVJSKGRwbGw0X200X2NrKSkgewotCQkJRFNTRVJSKCJGYWlsZWQgdG8gZ2V0IGRwbGw0X200X2NrXG4iKTsKLQkJCXIgPSBQVFJfRVJSKGRwbGw0X200X2NrKTsKLQkJCWdvdG8gZmFpbDE7Ci0JCX0KLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCWRwbGw0X200X2NrID0gY2xrX2dldChOVUxMLCAiZHBsbF9wZXJfbTV4Ml9jayIpOwotCQlpZiAoSVNfRVJSKGRwbGw0X200X2NrKSkgewotCQkJRFNTRVJSKCJGYWlsZWQgdG8gZ2V0IGRwbGw0X200X2NrXG4iKTsKLQkJCXIgPSBQVFJfRVJSKGRwbGw0X200X2NrKTsKLQkJCWdvdG8gZmFpbDE7Ci0JCX0KLQl9IGVsc2UgeyAvKiBvbWFwMjR4eCAqLwotCQlkcGxsNF9tNF9jayA9IE5VTEw7Ci0JfQotCi0JZHNzLmRwbGw0X200X2NrID0gZHBsbDRfbTRfY2s7Ci0KIAlkc3MuZHNpX2Nsa19zb3VyY2VbMF0gPSBPTUFQX0RTU19DTEtfU1JDX0ZDSzsKIAlkc3MuZHNpX2Nsa19zb3VyY2VbMV0gPSBPTUFQX0RTU19DTEtfU1JDX0ZDSzsKIAlkc3MuZGlzcGNfY2xrX3NvdXJjZSA9IE9NQVBfRFNTX0NMS19TUkNfRkNLOwogCWRzcy5sY2RfY2xrX3NvdXJjZVswXSA9IE9NQVBfRFNTX0NMS19TUkNfRkNLOwogCWRzcy5sY2RfY2xrX3NvdXJjZVsxXSA9IE9NQVBfRFNTX0NMS19TUkNfRkNLOwogCi0JZHNzX3NhdmVfY29udGV4dCgpOwotCi0JcmV2ID0gZHNzX3JlYWRfcmVnKERTU19SRVZJU0lPTik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBEU1MgcmV2ICVkLiVkXG4iLAotCQkJRkxEX0dFVChyZXYsIDcsIDQpLCBGTERfR0VUKHJldiwgMywgMCkpOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWwxOgotCWlvdW5tYXAoZHNzLmJhc2UpOwotZmFpbDA6Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzc19leGl0KHZvaWQpCi17Ci0JaWYgKGRzcy5kcGxsNF9tNF9jaykKLQkJY2xrX3B1dChkc3MuZHBsbDRfbTRfY2spOwotCi0JaW91bm1hcChkc3MuYmFzZSk7Ci19Ci0KLS8qIENPTlRFWFQgKi8KLXN0YXRpYyBpbnQgZHNzX2dldF9jdHhfaWQodm9pZCkKLXsKLQlzdHJ1Y3Qgb21hcF9kaXNwbGF5X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZHNzLnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCByOwotCi0JaWYgKCFwZGF0YS0+Ym9hcmRfZGF0YS0+Z2V0X2xhc3Rfb2ZmX29uX3RyYW5zYWN0aW9uX2lkKQotCQlyZXR1cm4gMDsKLQlyID0gcGRhdGEtPmJvYXJkX2RhdGEtPmdldF9sYXN0X29mZl9vbl90cmFuc2FjdGlvbl9pZCgmZHNzLnBkZXYtPmRldik7Ci0JaWYgKHIgPCAwKSB7Ci0JCWRldl9lcnIoJmRzcy5wZGV2LT5kZXYsICJnZXR0aW5nIHRyYW5zYWN0aW9uIElEIGZhaWxlZCwgIgotCQkJCSJ3aWxsIGZvcmNlIGNvbnRleHQgcmVzdG9yZVxuIik7Ci0JCXIgPSAtMTsKLQl9Ci0JcmV0dXJuIHI7Ci19Ci0KLWludCBkc3NfbmVlZF9jdHhfcmVzdG9yZSh2b2lkKQotewotCWludCBpZCA9IGRzc19nZXRfY3R4X2lkKCk7Ci0KLQlpZiAoaWQgPCAwIHx8IGlkICE9IGRzcy5jdHhfaWQpIHsKLQkJRFNTREJHKCJjdHggaWQgJWQgLT4gaWQgJWRcbiIsCi0JCQkJZHNzLmN0eF9pZCwgaWQpOwotCQlkc3MuY3R4X2lkID0gaWQ7Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2F2ZV9hbGxfY3R4KHZvaWQpCi17Ci0JRFNTREJHKCJzYXZlIGNvbnRleHRcbiIpOwotCi0JZHNzX2Nsa19lbmFibGVfbm9fY3R4KERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOwotCi0JZHNzX3NhdmVfY29udGV4dCgpOwotCWRpc3BjX3NhdmVfY29udGV4dCgpOwotI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfRFNJCi0JZHNpX3NhdmVfY29udGV4dCgpOwotI2VuZGlmCi0KLQlkc3NfY2xrX2Rpc2FibGVfbm9fY3R4KERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOwotfQotCi1zdGF0aWMgdm9pZCByZXN0b3JlX2FsbF9jdHgodm9pZCkKLXsKLQlEU1NEQkcoInJlc3RvcmUgY29udGV4dFxuIik7Ci0KLQlkc3NfY2xrX2VuYWJsZV9hbGxfbm9fY3R4KCk7Ci0KLQlkc3NfcmVzdG9yZV9jb250ZXh0KCk7Ci0JZGlzcGNfcmVzdG9yZV9jb250ZXh0KCk7Ci0jaWZkZWYgQ09ORklHX09NQVAyX0RTU19EU0kKLQlkc2lfcmVzdG9yZV9jb250ZXh0KCk7Ci0jZW5kaWYKLQotCWRzc19jbGtfZGlzYWJsZV9hbGxfbm9fY3R4KCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNzX2dldF9jbG9jayhzdHJ1Y3QgY2xrICoqY2xvY2ssIGNvbnN0IGNoYXIgKmNsa19uYW1lKQotewotCXN0cnVjdCBjbGsgKmNsazsKLQotCWNsayA9IGNsa19nZXQoJmRzcy5wZGV2LT5kZXYsIGNsa19uYW1lKTsKLQotCWlmIChJU19FUlIoY2xrKSkgewotCQlEU1NFUlIoImNhbid0IGdldCBjbG9jayAlcyIsIGNsa19uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKLQl9Ci0KLQkqY2xvY2sgPSBjbGs7Ci0KLQlEU1NEQkcoImNsayAlcywgcmF0ZSAlbGRcbiIsIGNsa19uYW1lLCBjbGtfZ2V0X3JhdGUoY2xrKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc3NfZ2V0X2Nsb2Nrcyh2b2lkKQotewotCWludCByOwotCXN0cnVjdCBvbWFwX2Rpc3BsYXlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkc3MucGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQlkc3MuZHNzX2ljayA9IE5VTEw7Ci0JZHNzLmRzc19mY2sgPSBOVUxMOwotCWRzcy5kc3Nfc3lzX2NsayA9IE5VTEw7Ci0JZHNzLmRzc190dl9mY2sgPSBOVUxMOwotCWRzcy5kc3NfdmlkZW9fZmNrID0gTlVMTDsKLQotCXIgPSBkc3NfZ2V0X2Nsb2NrKCZkc3MuZHNzX2ljaywgImljayIpOwotCWlmIChyKQotCQlnb3RvIGVycjsKLQotCXIgPSBkc3NfZ2V0X2Nsb2NrKCZkc3MuZHNzX2ZjaywgImZjayIpOwotCWlmIChyKQotCQlnb3RvIGVycjsKLQotCWlmICghcGRhdGEtPm9wdF9jbG9ja19hdmFpbGFibGUpIHsKLQkJciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWlmIChwZGF0YS0+b3B0X2Nsb2NrX2F2YWlsYWJsZSgic3lzX2NsayIpKSB7Ci0JCXIgPSBkc3NfZ2V0X2Nsb2NrKCZkc3MuZHNzX3N5c19jbGssICJzeXNfY2xrIik7Ci0JCWlmIChyKQotCQkJZ290byBlcnI7Ci0JfQotCi0JaWYgKHBkYXRhLT5vcHRfY2xvY2tfYXZhaWxhYmxlKCJ0dl9jbGsiKSkgewotCQlyID0gZHNzX2dldF9jbG9jaygmZHNzLmRzc190dl9mY2ssICJ0dl9jbGsiKTsKLQkJaWYgKHIpCi0JCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAocGRhdGEtPm9wdF9jbG9ja19hdmFpbGFibGUoInZpZGVvX2NsayIpKSB7Ci0JCXIgPSBkc3NfZ2V0X2Nsb2NrKCZkc3MuZHNzX3ZpZGVvX2ZjaywgInZpZGVvX2NsayIpOwotCQlpZiAocikKLQkJCWdvdG8gZXJyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnI6Ci0JaWYgKGRzcy5kc3NfaWNrKQotCQljbGtfcHV0KGRzcy5kc3NfaWNrKTsKLQlpZiAoZHNzLmRzc19mY2spCi0JCWNsa19wdXQoZHNzLmRzc19mY2spOwotCWlmIChkc3MuZHNzX3N5c19jbGspCi0JCWNsa19wdXQoZHNzLmRzc19zeXNfY2xrKTsKLQlpZiAoZHNzLmRzc190dl9mY2spCi0JCWNsa19wdXQoZHNzLmRzc190dl9mY2spOwotCWlmIChkc3MuZHNzX3ZpZGVvX2ZjaykKLQkJY2xrX3B1dChkc3MuZHNzX3ZpZGVvX2Zjayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgZHNzX3B1dF9jbG9ja3Modm9pZCkKLXsKLQlpZiAoZHNzLmRzc192aWRlb19mY2spCi0JCWNsa19wdXQoZHNzLmRzc192aWRlb19mY2spOwotCWlmIChkc3MuZHNzX3R2X2ZjaykKLQkJY2xrX3B1dChkc3MuZHNzX3R2X2Zjayk7Ci0JaWYgKGRzcy5kc3Nfc3lzX2NsaykKLQkJY2xrX3B1dChkc3MuZHNzX3N5c19jbGspOwotCWNsa19wdXQoZHNzLmRzc19mY2spOwotCWNsa19wdXQoZHNzLmRzc19pY2spOwotfQotCi11bnNpZ25lZCBsb25nIGRzc19jbGtfZ2V0X3JhdGUoZW51bSBkc3NfY2xvY2sgY2xrKQotewotCXN3aXRjaCAoY2xrKSB7Ci0JY2FzZSBEU1NfQ0xLX0lDSzoKLQkJcmV0dXJuIGNsa19nZXRfcmF0ZShkc3MuZHNzX2ljayk7Ci0JY2FzZSBEU1NfQ0xLX0ZDSzoKLQkJcmV0dXJuIGNsa19nZXRfcmF0ZShkc3MuZHNzX2Zjayk7Ci0JY2FzZSBEU1NfQ0xLX1NZU0NLOgotCQlyZXR1cm4gY2xrX2dldF9yYXRlKGRzcy5kc3Nfc3lzX2Nsayk7Ci0JY2FzZSBEU1NfQ0xLX1RWRkNLOgotCQlyZXR1cm4gY2xrX2dldF9yYXRlKGRzcy5kc3NfdHZfZmNrKTsKLQljYXNlIERTU19DTEtfVklERkNLOgotCQlyZXR1cm4gY2xrX2dldF9yYXRlKGRzcy5kc3NfdmlkZW9fZmNrKTsKLQl9Ci0KLQlCVUcoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvdW50X2Nsa19iaXRzKGVudW0gZHNzX2Nsb2NrIGNsa3MpCi17Ci0JdW5zaWduZWQgbnVtX2Nsa3MgPSAwOwotCi0JaWYgKGNsa3MgJiBEU1NfQ0xLX0lDSykKLQkJKytudW1fY2xrczsKLQlpZiAoY2xrcyAmIERTU19DTEtfRkNLKQotCQkrK251bV9jbGtzOwotCWlmIChjbGtzICYgRFNTX0NMS19TWVNDSykKLQkJKytudW1fY2xrczsKLQlpZiAoY2xrcyAmIERTU19DTEtfVFZGQ0spCi0JCSsrbnVtX2Nsa3M7Ci0JaWYgKGNsa3MgJiBEU1NfQ0xLX1ZJREZDSykKLQkJKytudW1fY2xrczsKLQotCXJldHVybiBudW1fY2xrczsKLX0KLQotc3RhdGljIHZvaWQgZHNzX2Nsa19lbmFibGVfbm9fY3R4KGVudW0gZHNzX2Nsb2NrIGNsa3MpCi17Ci0JdW5zaWduZWQgbnVtX2Nsa3MgPSBjb3VudF9jbGtfYml0cyhjbGtzKTsKLQotCWlmIChjbGtzICYgRFNTX0NMS19JQ0spCi0JCWNsa19lbmFibGUoZHNzLmRzc19pY2spOwotCWlmIChjbGtzICYgRFNTX0NMS19GQ0spCi0JCWNsa19lbmFibGUoZHNzLmRzc19mY2spOwotCWlmICgoY2xrcyAmIERTU19DTEtfU1lTQ0spICYmIGRzcy5kc3Nfc3lzX2NsaykKLQkJY2xrX2VuYWJsZShkc3MuZHNzX3N5c19jbGspOwotCWlmICgoY2xrcyAmIERTU19DTEtfVFZGQ0spICYmIGRzcy5kc3NfdHZfZmNrKQotCQljbGtfZW5hYmxlKGRzcy5kc3NfdHZfZmNrKTsKLQlpZiAoKGNsa3MgJiBEU1NfQ0xLX1ZJREZDSykgJiYgZHNzLmRzc192aWRlb19mY2spCi0JCWNsa19lbmFibGUoZHNzLmRzc192aWRlb19mY2spOwotCi0JZHNzLm51bV9jbGtzX2VuYWJsZWQgKz0gbnVtX2Nsa3M7Ci19Ci0KLXZvaWQgZHNzX2Nsa19lbmFibGUoZW51bSBkc3NfY2xvY2sgY2xrcykKLXsKLQlib29sIGNoZWNrX2N0eCA9IGRzcy5udW1fY2xrc19lbmFibGVkID09IDA7Ci0KLQlkc3NfY2xrX2VuYWJsZV9ub19jdHgoY2xrcyk7Ci0KLQkvKgotCSAqIEhBQ0s6IE9uIG9tYXA0IHRoZSByZWdpc3RlcnMgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHJpZ2h0IGFmdGVyCi0JICogZW5hYmxpbmcgdGhlIGNsb2Nrcy4gQXQgc29tZSBwb2ludCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBieQotCSAqIHBtX3J1bnRpbWUsIGJ1dCBmb3IgdGhlIHRpbWUgYmVnaW4gdGhpcyBzaG91bGQgbWFrZSB0aGluZ3Mgd29yay4KLQkgKi8KLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkgJiYgY2hlY2tfY3R4KQotCQl1ZGVsYXkoMTApOwotCi0JaWYgKGNoZWNrX2N0eCAmJiBjcHVfaXNfb21hcDM0eHgoKSAmJiBkc3NfbmVlZF9jdHhfcmVzdG9yZSgpKQotCQlyZXN0b3JlX2FsbF9jdHgoKTsKLX0KLQotc3RhdGljIHZvaWQgZHNzX2Nsa19kaXNhYmxlX25vX2N0eChlbnVtIGRzc19jbG9jayBjbGtzKQotewotCXVuc2lnbmVkIG51bV9jbGtzID0gY291bnRfY2xrX2JpdHMoY2xrcyk7Ci0KLQlpZiAoY2xrcyAmIERTU19DTEtfSUNLKQotCQljbGtfZGlzYWJsZShkc3MuZHNzX2ljayk7Ci0JaWYgKGNsa3MgJiBEU1NfQ0xLX0ZDSykKLQkJY2xrX2Rpc2FibGUoZHNzLmRzc19mY2spOwotCWlmICgoY2xrcyAmIERTU19DTEtfU1lTQ0spICYmIGRzcy5kc3Nfc3lzX2NsaykKLQkJY2xrX2Rpc2FibGUoZHNzLmRzc19zeXNfY2xrKTsKLQlpZiAoKGNsa3MgJiBEU1NfQ0xLX1RWRkNLKSAmJiBkc3MuZHNzX3R2X2ZjaykKLQkJY2xrX2Rpc2FibGUoZHNzLmRzc190dl9mY2spOwotCWlmICgoY2xrcyAmIERTU19DTEtfVklERkNLKSAmJiBkc3MuZHNzX3ZpZGVvX2ZjaykKLQkJY2xrX2Rpc2FibGUoZHNzLmRzc192aWRlb19mY2spOwotCi0JZHNzLm51bV9jbGtzX2VuYWJsZWQgLT0gbnVtX2Nsa3M7Ci19Ci0KLXZvaWQgZHNzX2Nsa19kaXNhYmxlKGVudW0gZHNzX2Nsb2NrIGNsa3MpCi17Ci0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXVuc2lnbmVkIG51bV9jbGtzID0gY291bnRfY2xrX2JpdHMoY2xrcyk7Ci0KLQkJQlVHX09OKGRzcy5udW1fY2xrc19lbmFibGVkIDwgbnVtX2Nsa3MpOwotCi0JCWlmIChkc3MubnVtX2Nsa3NfZW5hYmxlZCA9PSBudW1fY2xrcykKLQkJCXNhdmVfYWxsX2N0eCgpOwotCX0KLQotCWRzc19jbGtfZGlzYWJsZV9ub19jdHgoY2xrcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzc19jbGtfZW5hYmxlX2FsbF9ub19jdHgodm9pZCkKLXsKLQllbnVtIGRzc19jbG9jayBjbGtzOwotCi0JY2xrcyA9IERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sgfCBEU1NfQ0xLX1NZU0NLIHwgRFNTX0NMS19UVkZDSzsKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCWNsa3MgfD0gRFNTX0NMS19WSURGQ0s7Ci0JZHNzX2Nsa19lbmFibGVfbm9fY3R4KGNsa3MpOwotfQotCi1zdGF0aWMgdm9pZCBkc3NfY2xrX2Rpc2FibGVfYWxsX25vX2N0eCh2b2lkKQotewotCWVudW0gZHNzX2Nsb2NrIGNsa3M7Ci0KLQljbGtzID0gRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyB8IERTU19DTEtfU1lTQ0sgfCBEU1NfQ0xLX1RWRkNLOwotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJY2xrcyB8PSBEU1NfQ0xLX1ZJREZDSzsKLQlkc3NfY2xrX2Rpc2FibGVfbm9fY3R4KGNsa3MpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpICYmIGRlZmluZWQoQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUKQotLyogQ0xPQ0tTICovCi1zdGF0aWMgdm9pZCBjb3JlX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY2xrICpjbG9ja3NbNV0gPSB7Ci0JCWRzcy5kc3NfaWNrLAotCQlkc3MuZHNzX2ZjaywKLQkJZHNzLmRzc19zeXNfY2xrLAotCQlkc3MuZHNzX3R2X2ZjaywKLQkJZHNzLmRzc192aWRlb19mY2sKLQl9OwotCi0JY29uc3QgY2hhciAqbmFtZXNbNV0gPSB7Ci0JCSJpY2siLAotCQkiZmNrIiwKLQkJInN5c19jbGsiLAotCQkidHZfZmNrIiwKLQkJInZpZGVvX2ZjayIKLQl9OwotCi0Jc2VxX3ByaW50ZihzLCAiLSBDT1JFIC1cbiIpOwotCi0Jc2VxX3ByaW50ZihzLCAiaW50ZXJuYWwgY2xrIGNvdW50XHRcdCV1XG4iLCBkc3MubnVtX2Nsa3NfZW5hYmxlZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCWlmICghY2xvY2tzW2ldKQotCQkJY29udGludWU7Ci0JCXNlcV9wcmludGYocywgIiVzICglcyklKnNcdCVsdVx0JWRcbiIsCi0JCQkJbmFtZXNbaV0sCi0JCQkJY2xvY2tzW2ldLT5uYW1lLAotCQkJCTI0IC0gc3RybGVuKG5hbWVzW2ldKSAtIHN0cmxlbihjbG9ja3NbaV0tPm5hbWUpLAotCQkJCSIiLAotCQkJCWNsa19nZXRfcmF0ZShjbG9ja3NbaV0pLAotCQkJCWNsb2Nrc1tpXS0+dXNlY291bnQpOwotCX0KLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQpICovCi0KLS8qIERFQlVHRlMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQpCi12b2lkIGRzc19kZWJ1Z19kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCi17Ci0JY29yZV9kdW1wX2Nsb2NrcyhzKTsKLQlkc3NfZHVtcF9jbG9ja3Mocyk7Ci0JZGlzcGNfZHVtcF9jbG9ja3Mocyk7Ci0jaWZkZWYgQ09ORklHX09NQVAyX0RTU19EU0kKLQlkc2lfZHVtcF9jbG9ja3Mocyk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0KLS8qIERTUyBIVyBJUCBpbml0aWFsaXNhdGlvbiAqLwotc3RhdGljIGludCBvbWFwX2Rzc2h3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHI7Ci0KLQlkc3MucGRldiA9IHBkZXY7Ci0KLQlyID0gZHNzX2dldF9jbG9ja3MoKTsKLQlpZiAocikKLQkJZ290byBlcnJfY2xvY2tzOwotCi0JZHNzX2Nsa19lbmFibGVfYWxsX25vX2N0eCgpOwotCi0JZHNzLmN0eF9pZCA9IGRzc19nZXRfY3R4X2lkKCk7Ci0JRFNTREJHKCJpbml0aWFsIGN0eCBpZCAldVxuIiwgZHNzLmN0eF9pZCk7Ci0KLQlyID0gZHNzX2luaXQoKTsKLQlpZiAocikgewotCQlEU1NFUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIERTU1xuIik7Ci0JCWdvdG8gZXJyX2RzczsKLQl9Ci0KIAlyID0gZHBpX2luaXQoKTsKIAlpZiAocikgewogCQlEU1NFUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIERQSVxuIik7CkBAIC0xMTI0LDQyICs3ODcsNjYgQEAKIAkJZ290byBlcnJfc2RpOwogCX0KIAotCWRzc19jbGtfZGlzYWJsZV9hbGxfbm9fY3R4KCk7CisJcmV2ID0gZHNzX3JlYWRfcmVnKERTU19SRVZJU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBEU1MgcmV2ICVkLiVkXG4iLAorCQkJRkxEX0dFVChyZXYsIDcsIDQpLCBGTERfR0VUKHJldiwgMywgMCkpOworCisJZHNzX3J1bnRpbWVfcHV0KCk7CisKIAlyZXR1cm4gMDsKIGVycl9zZGk6CiAJZHBpX2V4aXQoKTsKIGVycl9kcGk6Ci0JZHNzX2V4aXQoKTsKLWVycl9kc3M6Ci0JZHNzX2Nsa19kaXNhYmxlX2FsbF9ub19jdHgoKTsKKwlkc3NfcnVudGltZV9wdXQoKTsKK2Vycl9ydW50aW1lX2dldDoKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJZHNzX3B1dF9jbG9ja3MoKTsKIGVycl9jbG9ja3M6CisJaW91bm1hcChkc3MuYmFzZSk7CitlcnJfaW9yZW1hcDoKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBvbWFwX2Rzc2h3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWRwaV9leGl0KCk7CisJc2RpX2V4aXQoKTsKIAotCWRzc19leGl0KCk7CisJaW91bm1hcChkc3MuYmFzZSk7CiAKLQkvKgotCSAqIEFzIHBhcnQgb2YgaHdtb2QgY2hhbmdlcywgRFNTIGlzIG5vdCB0aGUgb25seSBjb250cm9sbGVyIG9mIGRzcwotCSAqIGNsb2NrczsgaHdtb2QgZnJhbWV3b3JrIGl0c2VsZiB3aWxsIGFsc28gZW5hYmxlIGNsb2NrcyBkdXJpbmcgaHdtb2QKLQkgKiBpbml0IGZvciBkc3MsIGFuZCBhdXRvaWRsZSBpcyBzZXQgaW4gaC93IGZvciBEU1MuIEhlbmNlLCB0aGVyZSdzIG5vCi0JICogbmVlZCB0byBkaXNhYmxlIGNsb2NrcyBpZiB0aGVpciB1c2Vjb3VudHMgPiAxLgotCSAqLwotCVdBUk5fT04oZHNzLm51bV9jbGtzX2VuYWJsZWQgPiAwKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKIAlkc3NfcHV0X2Nsb2NrcygpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZHNzX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZHNzX3NhdmVfY29udGV4dCgpOworCWNsa19kaXNhYmxlKGRzcy5kc3NfY2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNsa19lbmFibGUoZHNzLmRzc19jbGspOworCWRzc19yZXN0b3JlX2NvbnRleHQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGRzc19wbV9vcHMgPSB7CisJLnJ1bnRpbWVfc3VzcGVuZCA9IGRzc19ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gZHNzX3J1bnRpbWVfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9kc3Nod19kcml2ZXIgPSB7CiAJLnByb2JlICAgICAgICAgID0gb21hcF9kc3Nod19wcm9iZSwKIAkucmVtb3ZlICAgICAgICAgPSBvbWFwX2Rzc2h3X3JlbW92ZSwKIAkuZHJpdmVyICAgICAgICAgPSB7CiAJCS5uYW1lICAgPSAib21hcGRzc19kc3MiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZkc3NfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaCBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCmluZGV4IDhhYjZkNDMuLjljOTRiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCkBAIC05NywyNiArOTcsMTIgQEAKICNkZWZpbmUgRkxEX01PRChvcmlnLCB2YWwsIHN0YXJ0LCBlbmQpIFwKIAkoKChvcmlnKSAmIH5GTERfTUFTSyhzdGFydCwgZW5kKSkgfCBGTERfVkFMKHZhbCwgc3RhcnQsIGVuZCkpCiAKLWVudW0gb21hcF9idXJzdF9zaXplIHsKLQlPTUFQX0RTU19CVVJTVF80eDMyID0gMCwKLQlPTUFQX0RTU19CVVJTVF84eDMyID0gMSwKLQlPTUFQX0RTU19CVVJTVF8xNngzMiA9IDIsCi19OwotCiBlbnVtIG9tYXBfcGFyYWxsZWxfaW50ZXJmYWNlX21vZGUgewogCU9NQVBfRFNTX1BBUkFMTEVMTU9ERV9CWVBBU1MsCQkvKiBNSVBJIERQSSAqLwogCU9NQVBfRFNTX1BBUkFMTEVMTU9ERV9SRkJJLAkJLyogTUlQSSBEQkkgKi8KIAlPTUFQX0RTU19QQVJBTExFTE1PREVfRFNJLAogfTsKIAotZW51bSBkc3NfY2xvY2sgewotCURTU19DTEtfSUNLCT0gMSA8PCAwLAkvKiBEU1NfTDNfSUNMSyBhbmQgRFNTX0w0X0lDTEsgKi8KLQlEU1NfQ0xLX0ZDSwk9IDEgPDwgMSwJLyogRFNTMV9BTFdPTl9GQ0xLICovCi0JRFNTX0NMS19TWVNDSwk9IDEgPDwgMiwJLyogRFNTMl9BTFdPTl9GQ0xLICovCi0JRFNTX0NMS19UVkZDSwk9IDEgPDwgMywJLyogRFNTX1RWX0ZDTEsgKi8KLQlEU1NfQ0xLX1ZJREZDSwk9IDEgPDwgNCwJLyogRFNTXzk2TV9GQ0xLKi8KLX07Ci0KIGVudW0gZHNzX2hkbWlfdmVuY19jbGtfc291cmNlX3NlbGVjdCB7CiAJRFNTX1ZFTkNfVFZfQ0xLID0gMCwKIAlEU1NfSERNSV9NX1BDTEsgPSAxLApAQCAtMTk0LDcgKzE4MCw3IEBACiBib29sIGRzc191c2VfcmVwbGljYXRpb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAogCQllbnVtIG9tYXBfY29sb3JfbW9kZSBtb2RlKTsKIHZvaWQgZGVmYXVsdF9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAotCQl1MzIgZmlmb19zaXplLCBlbnVtIG9tYXBfYnVyc3Rfc2l6ZSAqYnVyc3Rfc2l6ZSwKKwkJdTMyIGZpZm9fc2l6ZSwgdTMyIGJ1cnN0X3NpemUsCiAJCXUzMiAqZmlmb19sb3csIHUzMiAqZmlmb19oaWdoKTsKIAogLyogbWFuYWdlciAqLwpAQCAtMjIwLDEzICsyMDYsMTIgQEAKIGludCBkc3NfaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9pZCk7CiB2b2lkIGRzc191bmluaXRfcGxhdGZvcm1fZHJpdmVyKHZvaWQpOwogCitpbnQgZHNzX3J1bnRpbWVfZ2V0KHZvaWQpOwordm9pZCBkc3NfcnVudGltZV9wdXQodm9pZCk7CisKK3N0cnVjdCBjbGsgKmRzc19nZXRfaWNrKHZvaWQpOworCiB2b2lkIGRzc19zZWxlY3RfaGRtaV92ZW5jX2Nsa19zb3VyY2UoZW51bSBkc3NfaGRtaV92ZW5jX2Nsa19zb3VyY2Vfc2VsZWN0KTsKLXZvaWQgZHNzX3NhdmVfY29udGV4dCh2b2lkKTsKLXZvaWQgZHNzX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKLXZvaWQgZHNzX2Nsa19lbmFibGUoZW51bSBkc3NfY2xvY2sgY2xrcyk7Ci12b2lkIGRzc19jbGtfZGlzYWJsZShlbnVtIGRzc19jbG9jayBjbGtzKTsKLXVuc2lnbmVkIGxvbmcgZHNzX2Nsa19nZXRfcmF0ZShlbnVtIGRzc19jbG9jayBjbGspOwotaW50IGRzc19uZWVkX2N0eF9yZXN0b3JlKHZvaWQpOwogY29uc3QgY2hhciAqZHNzX2dldF9nZW5lcmljX2Nsa19zb3VyY2VfbmFtZShlbnVtIG9tYXBfZHNzX2Nsa19zb3VyY2UgY2xrX3NyYyk7CiB2b2lkIGRzc19kdW1wX2Nsb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpOwogCkBAIC0yODMsMTUgKzI2OCwxNSBAQAogaW50IGRzaV9pbml0X3BsYXRmb3JtX2RyaXZlcih2b2lkKTsKIHZvaWQgZHNpX3VuaW5pdF9wbGF0Zm9ybV9kcml2ZXIodm9pZCk7CiAKK2ludCBkc2lfcnVudGltZV9nZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KTsKK3ZvaWQgZHNpX3J1bnRpbWVfcHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldik7CisKIHZvaWQgZHNpX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcyk7CiB2b2lkIGRzaV9jcmVhdGVfZGVidWdmc19maWxlc19pcnEoc3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXIsCiAJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmRlYnVnX2ZvcHMpOwogdm9pZCBkc2lfY3JlYXRlX2RlYnVnZnNfZmlsZXNfcmVnKHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGlyLAogCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpkZWJ1Z19mb3BzKTsKIAotdm9pZCBkc2lfc2F2ZV9jb250ZXh0KHZvaWQpOwotdm9pZCBkc2lfcmVzdG9yZV9jb250ZXh0KHZvaWQpOwotCiBpbnQgZHNpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5KTsKIHZvaWQgZHNpX2lycV9oYW5kbGVyKHZvaWQpOwogdW5zaWduZWQgbG9uZyBkc2lfZ2V0X3BsbF9oc2Rpdl9kaXNwY19yYXRlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzaWRldik7CkBAIC0zMDQsNyArMjg5LDcgQEAKIAkJYm9vbCBlbmFibGVfaHNkaXYpOwogdm9pZCBkc2lfcGxsX3VuaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYsIGJvb2wgZGlzY29ubmVjdF9sYW5lcyk7CiB2b2lkIGRzaV9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAotCQl1MzIgZmlmb19zaXplLCBlbnVtIG9tYXBfYnVyc3Rfc2l6ZSAqYnVyc3Rfc2l6ZSwKKwkJdTMyIGZpZm9fc2l6ZSwgdTMyIGJ1cnN0X3NpemUsCiAJCXUzMiAqZmlmb19sb3csIHUzMiAqZmlmb19oaWdoKTsKIHZvaWQgZHNpX3dhaXRfcGxsX2hzZGl2X2Rpc3BjX2FjdGl2ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYpOwogdm9pZCBkc2lfd2FpdF9wbGxfaHNkaXZfZHNpX2FjdGl2ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYpOwpAQCAtMzE3LDYgKzMwMiwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRzaV91bmluaXRfcGxhdGZvcm1fZHJpdmVyKHZvaWQpCiB7CiB9CitzdGF0aWMgaW5saW5lIGludCBkc2lfcnVudGltZV9nZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHNpZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGRzaV9ydW50aW1lX3B1dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYpCit7Cit9CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZHNpX2dldF9wbGxfaHNkaXZfZGlzcGNfcmF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkc2lkZXYpCiB7CiAJV0FSTigiJXM6IERTSSBub3QgY29tcGlsZWQgaW4sIHJldHVybmluZyByYXRlIGFzIDBcbiIsIF9fZnVuY19fKTsKQEAgLTM4NCw4ICszNzYsOCBAQAogdm9pZCBkaXNwY19pcnFfaGFuZGxlcih2b2lkKTsKIHZvaWQgZGlzcGNfZmFrZV92c3luY19pcnEodm9pZCk7CiAKLXZvaWQgZGlzcGNfc2F2ZV9jb250ZXh0KHZvaWQpOwotdm9pZCBkaXNwY19yZXN0b3JlX2NvbnRleHQodm9pZCk7CitpbnQgZGlzcGNfcnVudGltZV9nZXQodm9pZCk7Cit2b2lkIGRpc3BjX3J1bnRpbWVfcHV0KHZvaWQpOwogCiB2b2lkIGRpc3BjX2VuYWJsZV9zaWRsZSh2b2lkKTsKIHZvaWQgZGlzcGNfZGlzYWJsZV9zaWRsZSh2b2lkKTsKQEAgLTM5OCwxMCArMzkwLDEyIEBACiB2b2lkIGRpc3BjX3NldF9sY2Rfc2l6ZShlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsLCB1MTYgd2lkdGgsIHUxNiBoZWlnaHQpOwogdm9pZCBkaXNwY19zZXRfZGlnaXRfc2l6ZSh1MTYgd2lkdGgsIHUxNiBoZWlnaHQpOwogdTMyIGRpc3BjX2dldF9wbGFuZV9maWZvX3NpemUoZW51bSBvbWFwX3BsYW5lIHBsYW5lKTsKLXZvaWQgZGlzcGNfc2V0dXBfcGxhbmVfZmlmbyhlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIHUzMiBsb3csIHUzMiBoaWdoKTsKK3ZvaWQgZGlzcGNfc2V0X2ZpZm9fdGhyZXNob2xkKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgdTMyIGxvdywgdTMyIGhpZ2gpOwogdm9pZCBkaXNwY19lbmFibGVfZmlmb21lcmdlKGJvb2wgZW5hYmxlKTsKLXZvaWQgZGlzcGNfc2V0X2J1cnN0X3NpemUoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAotCQllbnVtIG9tYXBfYnVyc3Rfc2l6ZSBidXJzdF9zaXplKTsKK3UzMiBkaXNwY19nZXRfYnVyc3Rfc2l6ZShlbnVtIG9tYXBfcGxhbmUgcGxhbmUpOwordm9pZCBkaXNwY19lbmFibGVfY3ByKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIGJvb2wgZW5hYmxlKTsKK3ZvaWQgZGlzcGNfc2V0X2Nwcl9jb2VmKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsCisJCXN0cnVjdCBvbWFwX2Rzc19jcHJfY29lZnMgKmNvZWZzKTsKIAogdm9pZCBkaXNwY19zZXRfcGxhbmVfYmEwKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgdTMyIHBhZGRyKTsKIHZvaWQgZGlzcGNfc2V0X3BsYW5lX2JhMShlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIHUzMiBwYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3NfZmVhdHVyZXMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzc19mZWF0dXJlcy5jCmluZGV4IDFjMTg4ODguLmI0MTVjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzc19mZWF0dXJlcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzc19mZWF0dXJlcy5jCkBAIC00OSw2ICs0OSw5IEBACiAJY29uc3QgZW51bSBvbWFwX2NvbG9yX21vZGUgKnN1cHBvcnRlZF9jb2xvcl9tb2RlczsKIAljb25zdCBjaGFyICogY29uc3QgKmNsa3NyY19uYW1lczsKIAljb25zdCBzdHJ1Y3QgZHNzX3BhcmFtX3JhbmdlICpkc3NfcGFyYW1zOworCisJY29uc3QgdTMyIGJ1ZmZlcl9zaXplX3VuaXQ7CisJY29uc3QgdTMyIGJ1cnN0X3NpemVfdW5pdDsKIH07CiAKIC8qIFRoaXMgc3RydWN0IGlzIGFzc2lnbmVkIHRvIG9uZSBvZiB0aGUgYmVsb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCkBAIC0yNzQsNiArMjc3LDggQEAKIAkuc3VwcG9ydGVkX2NvbG9yX21vZGVzID0gb21hcDJfZHNzX3N1cHBvcnRlZF9jb2xvcl9tb2RlcywKIAkuY2xrc3JjX25hbWVzID0gb21hcDJfZHNzX2Nsa19zb3VyY2VfbmFtZXMsCiAJLmRzc19wYXJhbXMgPSBvbWFwMl9kc3NfcGFyYW1fcmFuZ2UsCisJLmJ1ZmZlcl9zaXplX3VuaXQgPSAxLAorCS5idXJzdF9zaXplX3VuaXQgPSA4LAogfTsKIAogLyogT01BUDMgRFNTIEZlYXR1cmVzICovCkBAIC0yODYsNyArMjkxLDkgQEAKIAkJRkVBVF9MQ0RFTkFCTEVTSUdOQUwgfCBGRUFUX1BDS0ZSRUVFTkFCTEUgfAogCQlGRUFUX0ZVTkNHQVRFRCB8IEZFQVRfUk9XUkVQRUFURU5BQkxFIHwKIAkJRkVBVF9MSU5FQlVGRkVSU1BMSVQgfCBGRUFUX1JFU0laRUNPTkYgfAotCQlGRUFUX0RTSV9QTExfRlJFUVNFTCB8IEZFQVRfRFNJX1JFVkVSU0VfVFhDTEtFU0MsCisJCUZFQVRfRFNJX1BMTF9GUkVRU0VMIHwgRkVBVF9EU0lfUkVWRVJTRV9UWENMS0VTQyB8CisJCUZFQVRfVkVOQ19SRVFVSVJFU19UVl9EQUNfQ0xLIHwgRkVBVF9DUFIgfCBGRUFUX1BSRUxPQUQgfAorCQlGRUFUX0ZJUl9DT0VGX1YsCiAKIAkubnVtX21ncnMgPSAyLAogCS5udW1fb3ZscyA9IDMsCkBAIC0yOTQsNiArMzAxLDggQEAKIAkuc3VwcG9ydGVkX2NvbG9yX21vZGVzID0gb21hcDNfZHNzX3N1cHBvcnRlZF9jb2xvcl9tb2RlcywKIAkuY2xrc3JjX25hbWVzID0gb21hcDNfZHNzX2Nsa19zb3VyY2VfbmFtZXMsCiAJLmRzc19wYXJhbXMgPSBvbWFwM19kc3NfcGFyYW1fcmFuZ2UsCisJLmJ1ZmZlcl9zaXplX3VuaXQgPSAxLAorCS5idXJzdF9zaXplX3VuaXQgPSA4LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX2Rzc19mZWF0dXJlcyBvbWFwMzYzMF9kc3NfZmVhdHVyZXMgPSB7CkBAIC0zMDYsNyArMzE1LDggQEAKIAkJRkVBVF9QUkVfTVVMVF9BTFBIQSB8IEZFQVRfRlVOQ0dBVEVEIHwKIAkJRkVBVF9ST1dSRVBFQVRFTkFCTEUgfCBGRUFUX0xJTkVCVUZGRVJTUExJVCB8CiAJCUZFQVRfUkVTSVpFQ09ORiB8IEZFQVRfRFNJX1BMTF9QV1JfQlVHIHwKLQkJRkVBVF9EU0lfUExMX0ZSRVFTRUwsCisJCUZFQVRfRFNJX1BMTF9GUkVRU0VMIHwgRkVBVF9DUFIgfCBGRUFUX1BSRUxPQUQgfAorCQlGRUFUX0ZJUl9DT0VGX1YsCiAKIAkubnVtX21ncnMgPSAyLAogCS5udW1fb3ZscyA9IDMsCkBAIC0zMTQsNiArMzI0LDggQEAKIAkuc3VwcG9ydGVkX2NvbG9yX21vZGVzID0gb21hcDNfZHNzX3N1cHBvcnRlZF9jb2xvcl9tb2RlcywKIAkuY2xrc3JjX25hbWVzID0gb21hcDNfZHNzX2Nsa19zb3VyY2VfbmFtZXMsCiAJLmRzc19wYXJhbXMgPSBvbWFwM19kc3NfcGFyYW1fcmFuZ2UsCisJLmJ1ZmZlcl9zaXplX3VuaXQgPSAxLAorCS5idXJzdF9zaXplX3VuaXQgPSA4LAogfTsKIAogLyogT01BUDQgRFNTIEZlYXR1cmVzICovCkBAIC0zMjcsNyArMzM5LDggQEAKIAkJRkVBVF9NR1JfTENEMiB8IEZFQVRfR0xPQkFMX0FMUEhBX1ZJRDEgfAogCQlGRUFUX0NPUkVfQ0xLX0RJViB8IEZFQVRfTENEX0NMS19TUkMgfAogCQlGRUFUX0RTSV9EQ1NfQ01EX0NPTkZJR19WQyB8IEZFQVRfRFNJX1ZDX09DUF9XSURUSCB8Ci0JCUZFQVRfRFNJX0dOUSB8IEZFQVRfSEFORExFX1VWX1NFUEFSQVRFIHwgRkVBVF9BVFRSMiwKKwkJRkVBVF9EU0lfR05RIHwgRkVBVF9IQU5ETEVfVVZfU0VQQVJBVEUgfCBGRUFUX0FUVFIyIHwKKwkJRkVBVF9DUFIgfCBGRUFUX1BSRUxPQUQgfCBGRUFUX0ZJUl9DT0VGX1YsCiAKIAkubnVtX21ncnMgPSAzLAogCS5udW1fb3ZscyA9IDMsCkBAIC0zMzUsNiArMzQ4LDggQEAKIAkuc3VwcG9ydGVkX2NvbG9yX21vZGVzID0gb21hcDRfZHNzX3N1cHBvcnRlZF9jb2xvcl9tb2RlcywKIAkuY2xrc3JjX25hbWVzID0gb21hcDRfZHNzX2Nsa19zb3VyY2VfbmFtZXMsCiAJLmRzc19wYXJhbXMgPSBvbWFwNF9kc3NfcGFyYW1fcmFuZ2UsCisJLmJ1ZmZlcl9zaXplX3VuaXQgPSAxNiwKKwkuYnVyc3Rfc2l6ZV91bml0ID0gMTYsCiB9OwogCiAvKiBGb3IgYWxsIHRoZSBvdGhlciBPTUFQNCB2ZXJzaW9ucyAqLwpAQCAtMzQ4LDcgKzM2Myw4IEBACiAJCUZFQVRfQ09SRV9DTEtfRElWIHwgRkVBVF9MQ0RfQ0xLX1NSQyB8CiAJCUZFQVRfRFNJX0RDU19DTURfQ09ORklHX1ZDIHwgRkVBVF9EU0lfVkNfT0NQX1dJRFRIIHwKIAkJRkVBVF9EU0lfR05RIHwgRkVBVF9IRE1JX0NUU19TV01PREUgfAotCQlGRUFUX0hBTkRMRV9VVl9TRVBBUkFURSB8IEZFQVRfQVRUUjIsCisJCUZFQVRfSEFORExFX1VWX1NFUEFSQVRFIHwgRkVBVF9BVFRSMiB8IEZFQVRfQ1BSIHwKKwkJRkVBVF9QUkVMT0FEIHwgRkVBVF9GSVJfQ09FRl9WLAogCiAJLm51bV9tZ3JzID0gMywKIAkubnVtX292bHMgPSAzLApAQCAtMzU2LDYgKzM3Miw4IEBACiAJLnN1cHBvcnRlZF9jb2xvcl9tb2RlcyA9IG9tYXA0X2Rzc19zdXBwb3J0ZWRfY29sb3JfbW9kZXMsCiAJLmNsa3NyY19uYW1lcyA9IG9tYXA0X2Rzc19jbGtfc291cmNlX25hbWVzLAogCS5kc3NfcGFyYW1zID0gb21hcDRfZHNzX3BhcmFtX3JhbmdlLAorCS5idWZmZXJfc2l6ZV91bml0ID0gMTYsCisJLmJ1cnN0X3NpemVfdW5pdCA9IDE2LAogfTsKIAogLyogRnVuY3Rpb25zIHJldHVybmluZyB2YWx1ZXMgcmVsYXRlZCB0byBhIERTUyBmZWF0dXJlICovCkBAIC00MDEsNiArNDE5LDE2IEBACiAJcmV0dXJuIG9tYXBfY3VycmVudF9kc3NfZmVhdHVyZXMtPmNsa3NyY19uYW1lc1tpZF07CiB9CiAKK3UzMiBkc3NfZmVhdF9nZXRfYnVmZmVyX3NpemVfdW5pdCh2b2lkKQoreworCXJldHVybiBvbWFwX2N1cnJlbnRfZHNzX2ZlYXR1cmVzLT5idWZmZXJfc2l6ZV91bml0OworfQorCit1MzIgZHNzX2ZlYXRfZ2V0X2J1cnN0X3NpemVfdW5pdCh2b2lkKQoreworCXJldHVybiBvbWFwX2N1cnJlbnRfZHNzX2ZlYXR1cmVzLT5idXJzdF9zaXplX3VuaXQ7Cit9CisKIC8qIERTUyBoYXNfZmVhdHVyZSBjaGVjayAqLwogYm9vbCBkc3NfaGFzX2ZlYXR1cmUoZW51bSBkc3NfZmVhdF9pZCBpZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzc19mZWF0dXJlcy5oIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmgKaW5kZXggMDdiMzQ2Zi4uYjczOThjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmgKQEAgLTUxLDYgKzUxLDEwIEBACiAJRkVBVF9IRE1JX0NUU19TV01PREUJCT0gMSA8PCAxOSwKIAlGRUFUX0hBTkRMRV9VVl9TRVBBUkFURSAgICAgICAgID0gMSA8PCAyMCwKIAlGRUFUX0FUVFIyICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyMSwKKwlGRUFUX1ZFTkNfUkVRVUlSRVNfVFZfREFDX0NMSwk9IDEgPDwgMjIsCisJRkVBVF9DUFIJCQk9IDEgPDwgMjMsCisJRkVBVF9QUkVMT0FECQkJPSAxIDw8IDI0LAorCUZFQVRfRklSX0NPRUZfVgkJCT0gMSA8PCAyNSwKIH07CiAKIC8qIERTUyByZWdpc3RlciBmaWVsZCBpZCAqLwpAQCAtOTAsNiArOTQsOSBAQAogCQllbnVtIG9tYXBfY29sb3JfbW9kZSBjb2xvcl9tb2RlKTsKIGNvbnN0IGNoYXIgKmRzc19mZWF0X2dldF9jbGtfc291cmNlX25hbWUoZW51bSBvbWFwX2Rzc19jbGtfc291cmNlIGlkKTsKIAordTMyIGRzc19mZWF0X2dldF9idWZmZXJfc2l6ZV91bml0KHZvaWQpOwkvKiBpbiBieXRlcyAqLwordTMyIGRzc19mZWF0X2dldF9idXJzdF9zaXplX3VuaXQodm9pZCk7CQkvKiBpbiBieXRlcyAqLworCiBib29sIGRzc19oYXNfZmVhdHVyZShlbnVtIGRzc19mZWF0X2lkIGlkKTsKIHZvaWQgZHNzX2ZlYXRfZ2V0X3JlZ19maWVsZChlbnVtIGRzc19mZWF0X3JlZ19maWVsZCBpZCwgdTggKnN0YXJ0LCB1OCAqZW5kKTsKIHZvaWQgZHNzX2ZlYXR1cmVzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9oZG1pLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9oZG1pLmMKaW5kZXggYjA1NTVmNC4uMjU2ZjI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvaGRtaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2hkbWkuYwpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogI2lmIGRlZmluZWQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQNF9IRE1JKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfU05EX09NQVBfU09DX09NQVA0X0hETUlfTU9EVUxFKQpAQCAtNTEsNiArNTQsOSBAQAogCXU4IGVkaWRfc2V0OwogCWJvb2wgY3VzdG9tX3NldDsKIAlzdHJ1Y3QgaGRtaV9jb25maWcgY2ZnOworCisJc3RydWN0IGNsayAqc3lzX2NsazsKKwlzdHJ1Y3QgY2xrICpoZG1pX2NsazsKIH0gaGRtaTsKIAogLyoKQEAgLTE2Miw2ICsxNjgsMjcgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW50IGhkbWlfcnVudGltZV9nZXQodm9pZCkKK3sKKwlpbnQgcjsKKworCURTU0RCRygiaGRtaV9ydW50aW1lX2dldFxuIik7CisKKwlyID0gcG1fcnVudGltZV9nZXRfc3luYygmaGRtaS5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOworCXJldHVybiByIDwgMCA/IHIgOiAwOworfQorCitzdGF0aWMgdm9pZCBoZG1pX3J1bnRpbWVfcHV0KHZvaWQpCit7CisJaW50IHI7CisKKwlEU1NEQkcoImhkbWlfcnVudGltZV9wdXRcbiIpOworCisJciA9IHBtX3J1bnRpbWVfcHV0KCZoZG1pLnBkZXYtPmRldik7CisJV0FSTl9PTihyIDwgMCk7Cit9CisKIGludCBoZG1pX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJpbml0X2Rpc3BsYXlcbiIpOwpAQCAtMzExLDMwICszMzgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZG1pX3dhaXRfc29mdHJlc2V0KHZvaWQpCi17Ci0JLyogcmVzZXQgVzEgKi8KLQlSRUdfRkxEX01PRChIRE1JX1dQX1NZU0NPTkZJRywgMHgxLCAwLCAwKTsKLQotCS8qIHdhaXQgdGlsbCBTT0ZUUkVTRVQgPT0gMCAqLwotCWlmIChoZG1pX3dhaXRfZm9yX2JpdF9jaGFuZ2UoSERNSV9XUF9TWVNDT05GSUcsIDAsIDAsIDApICE9IDApIHsKLQkJRFNTRVJSKCJzeXNjb25maWcgcmVzZXQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaGRtaV9wbGxfcHJvZ3JhbShzdHJ1Y3QgaGRtaV9wbGxfaW5mbyAqZm10KQogewogCXUxNiByID0gMDsKIAllbnVtIGhkbWlfY2xrX3JlZnNlbCByZWZzZWw7CiAKLQkvKiB3YWl0IGZvciB3cmFwcGVyIHJlc2V0ICovCi0JciA9IGhkbWlfd2FpdF9zb2Z0cmVzZXQoKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KIAlyID0gaGRtaV9zZXRfcGxsX3B3cihIRE1JX1BMTFBXUkNNRF9BTExPRkYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTEwNjQsNyArMTA3Miw3IEBACiAJdW5zaWduZWQgbG9uZyBjbGtpbiwgcmVmY2xrOwogCXUzMiBtZjsKIAotCWNsa2luID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX1NZU0NLKSAvIDEwMDAwOworCWNsa2luID0gY2xrX2dldF9yYXRlKGhkbWkuc3lzX2NsaykgLyAxMDAwMDsKIAkvKgogCSAqIElucHV0IGNsb2NrIGlzIHByZWRpdmlkZWQgYnkgTiArIDEKIAkgKiBvdXQgcHV0IG9mIHdoaWNoIGlzIHJlZmVyZW5jZSBjbGsKQEAgLTEwOTgsMTYgKzExMDYsNiBAQAogCURTU0RCRygicmFuZ2UgPSAlZCBzZCA9ICVkXG4iLCBwaS0+ZGNvZnJlcSwgcGktPnJlZ3NkKTsKIH0KIAotc3RhdGljIHZvaWQgaGRtaV9lbmFibGVfY2xvY2tzKGludCBlbmFibGUpCi17Ci0JaWYgKGVuYWJsZSkKLQkJZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyB8Ci0JCQkJRFNTX0NMS19TWVNDSyB8IERTU19DTEtfVklERkNLKTsKLQllbHNlCi0JCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLIHwKLQkJCQlEU1NfQ0xLX1NZU0NLIHwgRFNTX0NMS19WSURGQ0spOwotfQotCiBzdGF0aWMgaW50IGhkbWlfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWludCByLCBjb2RlID0gMDsKQEAgLTExMTUsNyArMTExMyw5IEBACiAJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqcDsKIAl1bnNpZ25lZCBsb25nIHBoeTsKIAotCWhkbWlfZW5hYmxlX2Nsb2NrcygxKTsKKwlyID0gaGRtaV9ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAogCWRpc3BjX2VuYWJsZV9jaGFubmVsKE9NQVBfRFNTX0NIQU5ORUxfRElHSVQsIDApOwogCkBAIC0xMTgwLDcgKzExODAsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JaGRtaV9lbmFibGVfY2xvY2tzKDApOworCWhkbWlfcnVudGltZV9wdXQoKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMTE5MSw3ICsxMTkxLDcgQEAKIAloZG1pX3dwX3ZpZGVvX3N0YXJ0KDApOwogCWhkbWlfcGh5X29mZigpOwogCWhkbWlfc2V0X3BsbF9wd3IoSERNSV9QTExQV1JDTURfQUxMT0ZGKTsKLQloZG1pX2VuYWJsZV9jbG9ja3MoMCk7CisJaGRtaV9ydW50aW1lX3B1dCgpOwogCiAJaGRtaS5lZGlkX3NldCA9IDA7CiB9CkBAIC0xNjg2LDE0ICsxNjg2LDQzIEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgaGRtaV9nZXRfY2xvY2tzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic3lzX2NsayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlEU1NFUlIoImNhbid0IGdldCBzeXNfY2xrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwl9CisKKwloZG1pLnN5c19jbGsgPSBjbGs7CisKKwljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJkc3NfNDhtaHpfY2xrIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCURTU0VSUigiY2FuJ3QgZ2V0IGhkbWlfY2xrXG4iKTsKKwkJY2xrX3B1dChoZG1pLnN5c19jbGspOworCQlyZXR1cm4gUFRSX0VSUihjbGspOworCX0KKworCWhkbWkuaGRtaV9jbGsgPSBjbGs7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9wdXRfY2xvY2tzKHZvaWQpCit7CisJaWYgKGhkbWkuc3lzX2NsaykKKwkJY2xrX3B1dChoZG1pLnN5c19jbGspOworCWlmIChoZG1pLmhkbWlfY2xrKQorCQljbGtfcHV0KGhkbWkuaGRtaV9jbGspOworfQorCiAvKiBIRE1JIEhXIElQIGluaXRpYWxpc2F0aW9uICovCiBzdGF0aWMgaW50IG9tYXBkc3NfaGRtaWh3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpoZG1pX21lbTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDRfSERNSSkgfHwgXAotCWRlZmluZWQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQNF9IRE1JX01PRFVMRSkKLQlpbnQgcmV0OwotI2VuZGlmCisJaW50IHI7CiAKIAloZG1pLnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaGRtaS5wZGV2ID0gcGRldjsKQEAgLTE3MTMsMTcgKzE3NDIsMjUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJciA9IGhkbWlfZ2V0X2Nsb2NrcyhwZGV2KTsKKwlpZiAocikgeworCQlpb3VubWFwKGhkbWkuYmFzZV93cCk7CisJCXJldHVybiByOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCiAJaGRtaV9wYW5lbF9pbml0KCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDRfSERNSSkgfHwgXAogCWRlZmluZWQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQNF9IRE1JX01PRFVMRSkKIAogCS8qIFJlZ2lzdGVyIEFTb0MgY29kZWMgREFJICovCi0JcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmcGRldi0+ZGV2LCAmaGRtaV9hdWRpb19jb2RlY19kcnYsCisJciA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldiwgJmhkbWlfYXVkaW9fY29kZWNfZHJ2LAogCQkJCQkmaGRtaV9jb2RlY19kYWlfZHJ2LCAxKTsKLQlpZiAocmV0KSB7CisJaWYgKHIpIHsKIAkJRFNTRVJSKCJjYW4ndCByZWdpc3RlciBBU29DIEhETUkgYXVkaW8gY29kZWNcbiIpOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gcjsKIAl9CiAjZW5kaWYKIAlyZXR1cm4gMDsKQEAgLTE3MzgsMTcgKzE3NzUsNjIgQEAKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldik7CiAjZW5kaWYKIAorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCWhkbWlfcHV0X2Nsb2NrcygpOworCiAJaW91bm1hcChoZG1pLmJhc2Vfd3ApOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaGRtaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNsa19kaXNhYmxlKGhkbWkuaGRtaV9jbGspOworCWNsa19kaXNhYmxlKGhkbWkuc3lzX2Nsayk7CisKKwlkaXNwY19ydW50aW1lX3B1dCgpOworCWRzc19ydW50aW1lX3B1dCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGRtaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHI7CisKKwlyID0gZHNzX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9nZXRfZHNzOworCisJciA9IGRpc3BjX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9nZXRfZGlzcGM7CisKKworCWNsa19lbmFibGUoaGRtaS5zeXNfY2xrKTsKKwljbGtfZW5hYmxlKGhkbWkuaGRtaV9jbGspOworCisJcmV0dXJuIDA7CisKK2Vycl9nZXRfZGlzcGM6CisJZHNzX3J1bnRpbWVfcHV0KCk7CitlcnJfZ2V0X2RzczoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGhkbWlfcG1fb3BzID0geworCS5ydW50aW1lX3N1c3BlbmQgPSBoZG1pX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBoZG1pX3J1bnRpbWVfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcGRzc19oZG1paHdfZHJpdmVyID0gewogCS5wcm9iZSAgICAgICAgICA9IG9tYXBkc3NfaGRtaWh3X3Byb2JlLAogCS5yZW1vdmUgICAgICAgICA9IG9tYXBkc3NfaGRtaWh3X3JlbW92ZSwKIAkuZHJpdmVyICAgICAgICAgPSB7CiAJCS5uYW1lICAgPSAib21hcGRzc19oZG1pIiwKIAkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmaGRtaV9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYwppbmRleCA5YWVlYTUwLi4xM2Q3MmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvbWFuYWdlci5jCkBAIC0yNzUsNiArMjc1LDEwOCBAQAogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgc3NpemVfdCBtYW5hZ2VyX2Nwcl9lbmFibGVfc2hvdyhzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1nciwKKwkJY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBtZ3ItPmluZm8uY3ByX2VuYWJsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hbmFnZXJfY3ByX2VuYWJsZV9zdG9yZShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1nciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXJfaW5mbyBpbmZvOworCWludCB2OworCWludCByOworCWJvb2wgZW5hYmxlOworCisJaWYgKCFkc3NfaGFzX2ZlYXR1cmUoRkVBVF9DUFIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXIgPSBrc3RydG9pbnQoYnVmLCAwLCAmdik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZW5hYmxlID0gISF2OworCisJbWdyLT5nZXRfbWFuYWdlcl9pbmZvKG1nciwgJmluZm8pOworCisJaWYgKGluZm8uY3ByX2VuYWJsZSA9PSBlbmFibGUpCisJCXJldHVybiBzaXplOworCisJaW5mby5jcHJfZW5hYmxlID0gZW5hYmxlOworCisJciA9IG1nci0+c2V0X21hbmFnZXJfaW5mbyhtZ3IsICZpbmZvKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0gbWdyLT5hcHBseShtZ3IpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdCBtYW5hZ2VyX2Nwcl9jb2VmX3Nob3coc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXJfaW5mbyBpbmZvOworCisJbWdyLT5nZXRfbWFuYWdlcl9pbmZvKG1nciwgJmluZm8pOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQkJIiVkICVkICVkICVkICVkICVkICVkICVkICVkXG4iLAorCQkJaW5mby5jcHJfY29lZnMucnIsCisJCQlpbmZvLmNwcl9jb2Vmcy5yZywKKwkJCWluZm8uY3ByX2NvZWZzLnJiLAorCQkJaW5mby5jcHJfY29lZnMuZ3IsCisJCQlpbmZvLmNwcl9jb2Vmcy5nZywKKwkJCWluZm8uY3ByX2NvZWZzLmdiLAorCQkJaW5mby5jcHJfY29lZnMuYnIsCisJCQlpbmZvLmNwcl9jb2Vmcy5iZywKKwkJCWluZm8uY3ByX2NvZWZzLmJiKTsKK30KKworc3RhdGljIHNzaXplX3QgbWFuYWdlcl9jcHJfY29lZl9zdG9yZShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1nciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXJfaW5mbyBpbmZvOworCXN0cnVjdCBvbWFwX2Rzc19jcHJfY29lZnMgY29lZnM7CisJaW50IHIsIGk7CisJczE2ICphcnI7CisKKwlpZiAoIWRzc19oYXNfZmVhdHVyZShGRUFUX0NQUikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNzY2FuZihidWYsICIlaGQgJWhkICVoZCAlaGQgJWhkICVoZCAlaGQgJWhkICVoZCIsCisJCQkJJmNvZWZzLnJyLCAmY29lZnMucmcsICZjb2Vmcy5yYiwKKwkJCQkmY29lZnMuZ3IsICZjb2Vmcy5nZywgJmNvZWZzLmdiLAorCQkJCSZjb2Vmcy5iciwgJmNvZWZzLmJnLCAmY29lZnMuYmIpICE9IDkpCisJCXJldHVybiAtRUlOVkFMOworCisJYXJyID0gKHMxNltdKXsgY29lZnMucnIsIGNvZWZzLnJnLCBjb2Vmcy5yYiwKKwkJY29lZnMuZ3IsIGNvZWZzLmdnLCBjb2Vmcy5nYiwKKwkJY29lZnMuYnIsIGNvZWZzLmJnLCBjb2Vmcy5iYiB9OworCisJZm9yIChpID0gMDsgaSA8IDk7ICsraSkgeworCQlpZiAoYXJyW2ldIDwgLTUxMiB8fCBhcnJbaV0gPiA1MTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZ3ItPmdldF9tYW5hZ2VyX2luZm8obWdyLCAmaW5mbyk7CisKKwlpbmZvLmNwcl9jb2VmcyA9IGNvZWZzOworCisJciA9IG1nci0+c2V0X21hbmFnZXJfaW5mbyhtZ3IsICZpbmZvKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0gbWdyLT5hcHBseShtZ3IpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiBzaXplOworfQorCiBzdHJ1Y3QgbWFuYWdlcl9hdHRyaWJ1dGUgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICosIGNoYXIgKik7CkBAIC0zMDAsNiArNDAyLDEyIEBACiBzdGF0aWMgTUFOQUdFUl9BVFRSKGFscGhhX2JsZW5kaW5nX2VuYWJsZWQsIFNfSVJVR098U19JV1VTUiwKIAkJbWFuYWdlcl9hbHBoYV9ibGVuZGluZ19lbmFibGVkX3Nob3csCiAJCW1hbmFnZXJfYWxwaGFfYmxlbmRpbmdfZW5hYmxlZF9zdG9yZSk7CitzdGF0aWMgTUFOQUdFUl9BVFRSKGNwcl9lbmFibGUsIFNfSVJVR098U19JV1VTUiwKKwkJbWFuYWdlcl9jcHJfZW5hYmxlX3Nob3csCisJCW1hbmFnZXJfY3ByX2VuYWJsZV9zdG9yZSk7CitzdGF0aWMgTUFOQUdFUl9BVFRSKGNwcl9jb2VmLCBTX0lSVUdPfFNfSVdVU1IsCisJCW1hbmFnZXJfY3ByX2NvZWZfc2hvdywKKwkJbWFuYWdlcl9jcHJfY29lZl9zdG9yZSk7CiAKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1hbmFnZXJfc3lzZnNfYXR0cnNbXSA9IHsKQEAgLTMxMCw2ICs0MTgsOCBAQAogCSZtYW5hZ2VyX2F0dHJfdHJhbnNfa2V5X3ZhbHVlLmF0dHIsCiAJJm1hbmFnZXJfYXR0cl90cmFuc19rZXlfZW5hYmxlZC5hdHRyLAogCSZtYW5hZ2VyX2F0dHJfYWxwaGFfYmxlbmRpbmdfZW5hYmxlZC5hdHRyLAorCSZtYW5hZ2VyX2F0dHJfY3ByX2VuYWJsZS5hdHRyLAorCSZtYW5hZ2VyX2F0dHJfY3ByX2NvZWYuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0zOTEsMzMgKzUwMSwxNCBAQAogCiAJYm9vbCBlbmFibGVkOwogCi0JdTMyIHBhZGRyOwotCXZvaWQgX19pb21lbSAqdmFkZHI7Ci0JdTMyIHBfdXZfYWRkcjsgLyogcmVsZXZhbnQgZm9yIE5WMTIgZm9ybWF0IG9ubHkgKi8KLQl1MTYgc2NyZWVuX3dpZHRoOwotCXUxNiB3aWR0aDsKLQl1MTYgaGVpZ2h0OwotCWVudW0gb21hcF9jb2xvcl9tb2RlIGNvbG9yX21vZGU7Ci0JdTggcm90YXRpb247Ci0JZW51bSBvbWFwX2Rzc19yb3RhdGlvbl90eXBlIHJvdGF0aW9uX3R5cGU7Ci0JYm9vbCBtaXJyb3I7Ci0KLQl1MTYgcG9zX3g7Ci0JdTE2IHBvc195OwotCXUxNiBvdXRfd2lkdGg7CS8qIGlmIDAsIG91dF93aWR0aCA9PSB3aWR0aCAqLwotCXUxNiBvdXRfaGVpZ2h0OwkvKiBpZiAwLCBvdXRfaGVpZ2h0ID09IGhlaWdodCAqLwotCXU4IGdsb2JhbF9hbHBoYTsKLQl1OCBwcmVfbXVsdF9hbHBoYTsKKwlzdHJ1Y3Qgb21hcF9vdmVybGF5X2luZm8gaW5mbzsKIAogCWVudW0gb21hcF9jaGFubmVsIGNoYW5uZWw7CiAJYm9vbCByZXBsaWNhdGlvbjsKIAlib29sIGlsYWNlOwogCi0JZW51bSBvbWFwX2J1cnN0X3NpemUgYnVyc3Rfc2l6ZTsKIAl1MzIgZmlmb19sb3c7CiAJdTMyIGZpZm9faGlnaDsKLQotCWJvb2wgbWFudWFsX3VwZGF0ZTsKIH07CiAKIHN0cnVjdCBtYW5hZ2VyX2NhY2hlX2RhdGEgewpAQCAtNDI5LDE1ICs1MjAsOCBAQAogCSAqIFZTWU5DL0VWU1lOQyAqLwogCWJvb2wgc2hhZG93X2RpcnR5OwogCi0JdTMyIGRlZmF1bHRfY29sb3I7CisJc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyX2luZm8gaW5mbzsKIAotCWVudW0gb21hcF9kc3NfdHJhbnNfa2V5X3R5cGUgdHJhbnNfa2V5X3R5cGU7Ci0JdTMyIHRyYW5zX2tleTsKLQlib29sIHRyYW5zX2VuYWJsZWQ7Ci0KLQlib29sIGFscGhhX2VuYWJsZWQ7Ci0KLQlib29sIG1hbnVhbF91cGRfZGlzcGxheTsKIAlib29sIG1hbnVhbF91cGRhdGU7CiAJYm9vbCBkb19tYW51YWxfdXBkYXRlOwogCkBAIC01MzksMjQgKzYyMywxNSBAQAogCWlmICghZHNzZGV2IHx8IGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCiAJCXJldHVybiAwOwogCisJaWYgKGRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpCisJCXJldHVybiAwOworCiAJaWYgKGRzc2Rldi0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DCiAJCQl8fCBkc3NkZXYtPnR5cGUgPT0gT01BUF9ESVNQTEFZX1RZUEVfSERNSSkgewogCQlpcnEgPSBESVNQQ19JUlFfRVZTWU5DX09ERCB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTjsKIAl9IGVsc2UgewotCQlpZiAoZHNzZGV2LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgewotCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlOwotCQkJbW9kZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKLQkJCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQotCQkJCXJldHVybiAwOwotCi0JCQlpcnEgPSAoZHNzZGV2LT5tYW5hZ2VyLT5pZCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkgPwotCQkJCURJU1BDX0lSUV9GUkFNRURPTkUKLQkJCQk6IERJU1BDX0lSUV9GUkFNRURPTkUyOwotCQl9IGVsc2UgewotCQkJaXJxID0gKGRzc2Rldi0+bWFuYWdlci0+aWQgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpID8KLQkJCQlESVNQQ19JUlFfVlNZTkMKLQkJCQk6IERJU1BDX0lSUV9WU1lOQzI7Ci0JCX0KKwkJaXJxID0gKGRzc2Rldi0+bWFuYWdlci0+aWQgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpID8KKwkJCURJU1BDX0lSUV9WU1lOQyA6IERJU1BDX0lSUV9WU1lOQzI7CiAJfQogCiAJbWMgPSAmZHNzX2NhY2hlLm1hbmFnZXJfY2FjaGVbbWdyLT5pZF07CkBAIC02MTcsMjQgKzY5MiwxNSBAQAogCWlmICghZHNzZGV2IHx8IGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCiAJCXJldHVybiAwOwogCisJaWYgKGRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpCisJCXJldHVybiAwOworCiAJaWYgKGRzc2Rldi0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DCiAJCQl8fCBkc3NkZXYtPnR5cGUgPT0gT01BUF9ESVNQTEFZX1RZUEVfSERNSSkgewogCQlpcnEgPSBESVNQQ19JUlFfRVZTWU5DX09ERCB8IERJU1BDX0lSUV9FVlNZTkNfRVZFTjsKIAl9IGVsc2UgewotCQlpZiAoZHNzZGV2LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgewotCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlOwotCQkJbW9kZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKLQkJCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQotCQkJCXJldHVybiAwOwotCi0JCQlpcnEgPSAoZHNzZGV2LT5tYW5hZ2VyLT5pZCA9PSBPTUFQX0RTU19DSEFOTkVMX0xDRCkgPwotCQkJCURJU1BDX0lSUV9GUkFNRURPTkUKLQkJCQk6IERJU1BDX0lSUV9GUkFNRURPTkUyOwotCQl9IGVsc2UgewotCQkJaXJxID0gKGRzc2Rldi0+bWFuYWdlci0+aWQgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpID8KLQkJCQlESVNQQ19JUlFfVlNZTkMKLQkJCQk6IERJU1BDX0lSUV9WU1lOQzI7Ci0JCX0KKwkJaXJxID0gKGRzc2Rldi0+bWFuYWdlci0+aWQgPT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QpID8KKwkJCURJU1BDX0lSUV9WU1lOQyA6IERJU1BDX0lSUV9WU1lOQzI7CiAJfQogCiAJb2MgPSAmZHNzX2NhY2hlLm92ZXJsYXlfY2FjaGVbb3ZsLT5pZF07CkBAIC03MjAsMTAgKzc4NiwxMiBAQAogCiBzdGF0aWMgYm9vbCBkaXNwY19pc19vdmVybGF5X3NjYWxlZChzdHJ1Y3Qgb3ZlcmxheV9jYWNoZV9kYXRhICpvYykKIHsKLQlpZiAob2MtPm91dF93aWR0aCAhPSAwICYmIG9jLT53aWR0aCAhPSBvYy0+b3V0X3dpZHRoKQorCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAqb2kgPSAmb2MtPmluZm87CisKKwlpZiAob2ktPm91dF93aWR0aCAhPSAwICYmIG9pLT53aWR0aCAhPSBvaS0+b3V0X3dpZHRoKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWlmIChvYy0+b3V0X2hlaWdodCAhPSAwICYmIG9jLT5oZWlnaHQgIT0gb2MtPm91dF9oZWlnaHQpCisJaWYgKG9pLT5vdXRfaGVpZ2h0ICE9IDAgJiYgb2ktPmhlaWdodCAhPSBvaS0+b3V0X2hlaWdodCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC03MzMsNiArODAxLDggQEAKIHsKIAlzdHJ1Y3Qgb3ZlcmxheV9jYWNoZV9kYXRhICpjOwogCXN0cnVjdCBtYW5hZ2VyX2NhY2hlX2RhdGEgKm1jOworCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAqb2k7CisJc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyX2luZm8gKm1pOwogCXUxNiBvdXR3LCBvdXRoOwogCXUxNiB4LCB5LCB3LCBoOwogCXUzMiBwYWRkcjsKQEAgLTc0Miw2ICs4MTIsNyBAQAogCURTU0RCR0YoIiVkIiwgcGxhbmUpOwogCiAJYyA9ICZkc3NfY2FjaGUub3ZlcmxheV9jYWNoZVtwbGFuZV07CisJb2kgPSAmYy0+aW5mbzsKIAogCWlmICghYy0+ZW5hYmxlZCkgewogCQlkaXNwY19lbmFibGVfcGxhbmUocGxhbmUsIDApOwpAQCAtNzQ5LDIxICs4MjAsMjIgQEAKIAl9CiAKIAltYyA9ICZkc3NfY2FjaGUubWFuYWdlcl9jYWNoZVtjLT5jaGFubmVsXTsKKwltaSA9ICZtYy0+aW5mbzsKIAotCXggPSBjLT5wb3NfeDsKLQl5ID0gYy0+cG9zX3k7Ci0JdyA9IGMtPndpZHRoOwotCWggPSBjLT5oZWlnaHQ7Ci0Jb3V0dyA9IGMtPm91dF93aWR0aCA9PSAwID8gYy0+d2lkdGggOiBjLT5vdXRfd2lkdGg7Ci0Jb3V0aCA9IGMtPm91dF9oZWlnaHQgPT0gMCA/IGMtPmhlaWdodCA6IGMtPm91dF9oZWlnaHQ7Ci0JcGFkZHIgPSBjLT5wYWRkcjsKKwl4ID0gb2ktPnBvc194OworCXkgPSBvaS0+cG9zX3k7CisJdyA9IG9pLT53aWR0aDsKKwloID0gb2ktPmhlaWdodDsKKwlvdXR3ID0gb2ktPm91dF93aWR0aCA9PSAwID8gb2ktPndpZHRoIDogb2ktPm91dF93aWR0aDsKKwlvdXRoID0gb2ktPm91dF9oZWlnaHQgPT0gMCA/IG9pLT5oZWlnaHQgOiBvaS0+b3V0X2hlaWdodDsKKwlwYWRkciA9IG9pLT5wYWRkcjsKIAogCW9yaWdfdyA9IHc7CiAJb3JpZ19oID0gaDsKIAlvcmlnX291dHcgPSBvdXR3OwogCW9yaWdfb3V0aCA9IG91dGg7CiAKLQlpZiAoYy0+bWFudWFsX3VwZGF0ZSAmJiBtYy0+ZG9fbWFudWFsX3VwZGF0ZSkgeworCWlmIChtYy0+bWFudWFsX3VwZGF0ZSAmJiBtYy0+ZG9fbWFudWFsX3VwZGF0ZSkgewogCQl1bnNpZ25lZCBicHA7CiAJCXVuc2lnbmVkIHNjYWxlX3hfbSA9IHcsIHNjYWxlX3hfZCA9IG91dHc7CiAJCXVuc2lnbmVkIHNjYWxlX3lfbSA9IGgsIHNjYWxlX3lfZCA9IG91dGg7CkBAIC03NzUsNyArODQ3LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJc3dpdGNoIChjLT5jb2xvcl9tb2RlKSB7CisJCXN3aXRjaCAob2ktPmNvbG9yX21vZGUpIHsKIAkJY2FzZSBPTUFQX0RTU19DT0xPUl9OVjEyOgogCQkJYnBwID0gODsKIAkJCWJyZWFrOwpAQCAtODA1LDIzICs4NzcsMjMgQEAKIAkJCUJVRygpOwogCQl9CiAKLQkJaWYgKG1jLT54ID4gYy0+cG9zX3gpIHsKKwkJaWYgKG1jLT54ID4gb2ktPnBvc194KSB7CiAJCQl4ID0gMDsKLQkJCW91dHcgLT0gKG1jLT54IC0gYy0+cG9zX3gpOwotCQkJcGFkZHIgKz0gKG1jLT54IC0gYy0+cG9zX3gpICoKKwkJCW91dHcgLT0gKG1jLT54IC0gb2ktPnBvc194KTsKKwkJCXBhZGRyICs9IChtYy0+eCAtIG9pLT5wb3NfeCkgKgogCQkJCXNjYWxlX3hfbSAvIHNjYWxlX3hfZCAqIGJwcCAvIDg7CiAJCX0gZWxzZSB7Ci0JCQl4ID0gYy0+cG9zX3ggLSBtYy0+eDsKKwkJCXggPSBvaS0+cG9zX3ggLSBtYy0+eDsKIAkJfQogCi0JCWlmIChtYy0+eSA+IGMtPnBvc195KSB7CisJCWlmIChtYy0+eSA+IG9pLT5wb3NfeSkgewogCQkJeSA9IDA7Ci0JCQlvdXRoIC09IChtYy0+eSAtIGMtPnBvc195KTsKLQkJCXBhZGRyICs9IChtYy0+eSAtIGMtPnBvc195KSAqCisJCQlvdXRoIC09IChtYy0+eSAtIG9pLT5wb3NfeSk7CisJCQlwYWRkciArPSAobWMtPnkgLSBvaS0+cG9zX3kpICoKIAkJCQlzY2FsZV95X20gLyBzY2FsZV95X2QgKgotCQkJCWMtPnNjcmVlbl93aWR0aCAqIGJwcCAvIDg7CisJCQkJb2ktPnNjcmVlbl93aWR0aCAqIGJwcCAvIDg7CiAJCX0gZWxzZSB7Ci0JCQl5ID0gYy0+cG9zX3kgLSBtYy0+eTsKKwkJCXkgPSBvaS0+cG9zX3kgLSBtYy0+eTsKIAkJfQogCiAJCWlmIChtYy0+dyA8ICh4ICsgb3V0dykpCkBAIC04NDAsOCArOTEyLDggQEAKIAkJICogdGhlIHdpZHRoIGlmIHRoZSBvcmlnaW5hbCB3aWR0aCB3YXMgYmlnZ2VyLgogCQkgKi8KIAkJaWYgKCh3ICYgMSkgJiYKLQkJCQkoYy0+Y29sb3JfbW9kZSA9PSBPTUFQX0RTU19DT0xPUl9ZVVYyIHx8Ci0JCQkJIGMtPmNvbG9yX21vZGUgPT0gT01BUF9EU1NfQ09MT1JfVVlWWSkpIHsKKwkJCQkob2ktPmNvbG9yX21vZGUgPT0gT01BUF9EU1NfQ09MT1JfWVVWMiB8fAorCQkJCSBvaS0+Y29sb3JfbW9kZSA9PSBPTUFQX0RTU19DT0xPUl9VWVZZKSkgewogCQkJaWYgKG9yaWdfdyA+IHcpCiAJCQkJdyArPSAxOwogCQkJZWxzZQpAQCAtODUxLDE5ICs5MjMsMTkgQEAKIAogCXIgPSBkaXNwY19zZXR1cF9wbGFuZShwbGFuZSwKIAkJCXBhZGRyLAotCQkJYy0+c2NyZWVuX3dpZHRoLAorCQkJb2ktPnNjcmVlbl93aWR0aCwKIAkJCXgsIHksCiAJCQl3LCBoLAogCQkJb3V0dywgb3V0aCwKLQkJCWMtPmNvbG9yX21vZGUsCisJCQlvaS0+Y29sb3JfbW9kZSwKIAkJCWMtPmlsYWNlLAotCQkJYy0+cm90YXRpb25fdHlwZSwKLQkJCWMtPnJvdGF0aW9uLAotCQkJYy0+bWlycm9yLAotCQkJYy0+Z2xvYmFsX2FscGhhLAotCQkJYy0+cHJlX211bHRfYWxwaGEsCisJCQlvaS0+cm90YXRpb25fdHlwZSwKKwkJCW9pLT5yb3RhdGlvbiwKKwkJCW9pLT5taXJyb3IsCisJCQlvaS0+Z2xvYmFsX2FscGhhLAorCQkJb2ktPnByZV9tdWx0X2FscGhhLAogCQkJYy0+Y2hhbm5lbCwKLQkJCWMtPnBfdXZfYWRkcik7CisJCQlvaS0+cF91dl9hZGRyKTsKIAogCWlmIChyKSB7CiAJCS8qIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwpAQCAtODc0LDggKzk0Niw3IEBACiAKIAlkaXNwY19lbmFibGVfcmVwbGljYXRpb24ocGxhbmUsIGMtPnJlcGxpY2F0aW9uKTsKIAotCWRpc3BjX3NldF9idXJzdF9zaXplKHBsYW5lLCBjLT5idXJzdF9zaXplKTsKLQlkaXNwY19zZXR1cF9wbGFuZV9maWZvKHBsYW5lLCBjLT5maWZvX2xvdywgYy0+Zmlmb19oaWdoKTsKKwlkaXNwY19zZXRfZmlmb190aHJlc2hvbGQocGxhbmUsIGMtPmZpZm9fbG93LCBjLT5maWZvX2hpZ2gpOwogCiAJZGlzcGNfZW5hYmxlX3BsYW5lKHBsYW5lLCAxKTsKIApAQCAtODg0LDE2ICs5NTUsMjEgQEAKIAogc3RhdGljIHZvaWQgY29uZmlndXJlX21hbmFnZXIoZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgbWFuYWdlcl9jYWNoZV9kYXRhICpjOworCXN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlcl9pbmZvICptaTsKIAogCURTU0RCR0YoIiVkIiwgY2hhbm5lbCk7CiAKLQljID0gJmRzc19jYWNoZS5tYW5hZ2VyX2NhY2hlW2NoYW5uZWxdOworCS8qIHBpY2tpbmcgaW5mbyBmcm9tIHRoZSBjYWNoZSAqLworCW1pID0gJmRzc19jYWNoZS5tYW5hZ2VyX2NhY2hlW2NoYW5uZWxdLmluZm87CiAKLQlkaXNwY19zZXRfZGVmYXVsdF9jb2xvcihjaGFubmVsLCBjLT5kZWZhdWx0X2NvbG9yKTsKLQlkaXNwY19zZXRfdHJhbnNfa2V5KGNoYW5uZWwsIGMtPnRyYW5zX2tleV90eXBlLCBjLT50cmFuc19rZXkpOwotCWRpc3BjX2VuYWJsZV90cmFuc19rZXkoY2hhbm5lbCwgYy0+dHJhbnNfZW5hYmxlZCk7Ci0JZGlzcGNfZW5hYmxlX2FscGhhX2JsZW5kaW5nKGNoYW5uZWwsIGMtPmFscGhhX2VuYWJsZWQpOworCWRpc3BjX3NldF9kZWZhdWx0X2NvbG9yKGNoYW5uZWwsIG1pLT5kZWZhdWx0X2NvbG9yKTsKKwlkaXNwY19zZXRfdHJhbnNfa2V5KGNoYW5uZWwsIG1pLT50cmFuc19rZXlfdHlwZSwgbWktPnRyYW5zX2tleSk7CisJZGlzcGNfZW5hYmxlX3RyYW5zX2tleShjaGFubmVsLCBtaS0+dHJhbnNfZW5hYmxlZCk7CisJZGlzcGNfZW5hYmxlX2FscGhhX2JsZW5kaW5nKGNoYW5uZWwsIG1pLT5hbHBoYV9lbmFibGVkKTsKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfQ1BSKSkgeworCQlkaXNwY19lbmFibGVfY3ByKGNoYW5uZWwsIG1pLT5jcHJfZW5hYmxlKTsKKwkJZGlzcGNfc2V0X2Nwcl9jb2VmKGNoYW5uZWwsICZtaS0+Y3ByX2NvZWZzKTsKKwl9CiB9CiAKIC8qIGNvbmZpZ3VyZV9kaXNwYygpIHRyaWVzIHRvIHdyaXRlIHZhbHVlcyBmcm9tIGNhY2hlIHRvIHNoYWRvdyByZWdpc3RlcnMuCkBAIC05MjgsNyArMTAwNCw3IEBACiAJCWlmICghb2MtPmRpcnR5KQogCQkJY29udGludWU7CiAKLQkJaWYgKG9jLT5tYW51YWxfdXBkYXRlICYmICFtYy0+ZG9fbWFudWFsX3VwZGF0ZSkKKwkJaWYgKG1jLT5tYW51YWxfdXBkYXRlICYmICFtYy0+ZG9fbWFudWFsX3VwZGF0ZSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChtZ3JfYnVzeVtvYy0+Y2hhbm5lbF0pIHsKQEAgLTk3Niw3ICsxMDUyLDcgQEAKIAkJLyogV2UgZG9uJ3QgbmVlZCBHTyB3aXRoIG1hbnVhbCB1cGRhdGUgZGlzcGxheS4gTENEIGlmYWNlIHdpbGwKIAkJICogYWx3YXlzIGJlIHR1cm5lZCBvZmYgYWZ0ZXIgZnJhbWUsIGFuZCBuZXcgc2V0dGluZ3Mgd2lsbCBiZQogCQkgKiB0YWtlbiBpbiB0byB1c2UgYXQgbmV4dCB1cGRhdGUgKi8KLQkJaWYgKCFtYy0+bWFudWFsX3VwZF9kaXNwbGF5KQorCQlpZiAoIW1jLT5tYW51YWxfdXBkYXRlKQogCQkJZGlzcGNfZ28oaSk7CiAJfQogCkBAIC0xMDExLDYgKzEwODcsNyBAQAogewogCXN0cnVjdCBvdmVybGF5X2NhY2hlX2RhdGEgKm9jOwogCXN0cnVjdCBtYW5hZ2VyX2NhY2hlX2RhdGEgKm1jOworCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAqb2k7CiAJY29uc3QgaW50IG51bV9vdmxzID0gZHNzX2ZlYXRfZ2V0X251bV9vdmxzKCk7CiAJc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3I7CiAJaW50IGk7CkBAIC0xMDUzLDYgKzExMzAsNyBAQAogCQkJdW5zaWduZWQgb3V0dywgb3V0aDsKIAogCQkJb2MgPSAmZHNzX2NhY2hlLm92ZXJsYXlfY2FjaGVbaV07CisJCQlvaSA9ICZvYy0+aW5mbzsKIAogCQkJaWYgKG9jLT5jaGFubmVsICE9IG1nci0+aWQpCiAJCQkJY29udGludWU7CkBAIC0xMDY4LDM5ICsxMTQ2LDM5IEBACiAJCQlpZiAoIWRpc3BjX2lzX292ZXJsYXlfc2NhbGVkKG9jKSkKIAkJCQljb250aW51ZTsKIAotCQkJb3V0dyA9IG9jLT5vdXRfd2lkdGggPT0gMCA/Ci0JCQkJb2MtPndpZHRoIDogb2MtPm91dF93aWR0aDsKLQkJCW91dGggPSBvYy0+b3V0X2hlaWdodCA9PSAwID8KLQkJCQlvYy0+aGVpZ2h0IDogb2MtPm91dF9oZWlnaHQ7CisJCQlvdXR3ID0gb2ktPm91dF93aWR0aCA9PSAwID8KKwkJCQlvaS0+d2lkdGggOiBvaS0+b3V0X3dpZHRoOworCQkJb3V0aCA9IG9pLT5vdXRfaGVpZ2h0ID09IDAgPworCQkJCW9pLT5oZWlnaHQgOiBvaS0+b3V0X2hlaWdodDsKIAogCQkJLyogaXMgdGhlIG92ZXJsYXkgb3V0c2lkZSB0aGUgdXBkYXRlIHJlZ2lvbj8gKi8KIAkJCWlmICghcmVjdGFuZ2xlX2ludGVyc2VjdHMoeCwgeSwgdywgaCwKLQkJCQkJCW9jLT5wb3NfeCwgb2MtPnBvc195LAorCQkJCQkJb2ktPnBvc194LCBvaS0+cG9zX3ksCiAJCQkJCQlvdXR3LCBvdXRoKSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogaWYgdGhlIG92ZXJsYXkgdG90YWxseSBpbnNpZGUgdGhlIHVwZGF0ZSByZWdpb24/ICovCi0JCQlpZiAocmVjdGFuZ2xlX3N1YnNldChvYy0+cG9zX3gsIG9jLT5wb3NfeSwgb3V0dywgb3V0aCwKKwkJCWlmIChyZWN0YW5nbGVfc3Vic2V0KG9pLT5wb3NfeCwgb2ktPnBvc195LCBvdXR3LCBvdXRoLAogCQkJCQkJeCwgeSwgdywgaCkpCiAJCQkJY29udGludWU7CiAKLQkJCWlmICh4ID4gb2MtPnBvc194KQotCQkJCXgxID0gb2MtPnBvc194OworCQkJaWYgKHggPiBvaS0+cG9zX3gpCisJCQkJeDEgPSBvaS0+cG9zX3g7CiAJCQllbHNlCiAJCQkJeDEgPSB4OwogCi0JCQlpZiAoeSA+IG9jLT5wb3NfeSkKLQkJCQl5MSA9IG9jLT5wb3NfeTsKKwkJCWlmICh5ID4gb2ktPnBvc195KQorCQkJCXkxID0gb2ktPnBvc195OwogCQkJZWxzZQogCQkJCXkxID0geTsKIAotCQkJaWYgKCh4ICsgdykgPCAob2MtPnBvc194ICsgb3V0dykpCi0JCQkJeDIgPSBvYy0+cG9zX3ggKyBvdXR3OworCQkJaWYgKCh4ICsgdykgPCAob2ktPnBvc194ICsgb3V0dykpCisJCQkJeDIgPSBvaS0+cG9zX3ggKyBvdXR3OwogCQkJZWxzZQogCQkJCXgyID0geCArIHc7CiAKLQkJCWlmICgoeSArIGgpIDwgKG9jLT5wb3NfeSArIG91dGgpKQotCQkJCXkyID0gb2MtPnBvc195ICsgb3V0aDsKKwkJCWlmICgoeSArIGgpIDwgKG9pLT5wb3NfeSArIG91dGgpKQorCQkJCXkyID0gb2ktPnBvc195ICsgb3V0aDsKIAkJCWVsc2UKIAkJCQl5MiA9IHkgKyBoOwogCkBAIC0xMjM2LDYgKzEzMTQsMTAgQEAKIAogCURTU0RCRygib21hcF9kc3NfbWdyX2FwcGx5KCVzKVxuIiwgbWdyLT5uYW1lKTsKIAorCXIgPSBkaXNwY19ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkc3NfY2FjaGUubG9jaywgZmxhZ3MpOwogCiAJLyogQ29uZmlndXJlIG92ZXJsYXlzICovCkBAIC0xMjc1LDIzICsxMzU3LDcgQEAKIAogCQlvdmwtPmluZm9fZGlydHkgPSBmYWxzZTsKIAkJb2MtPmRpcnR5ID0gdHJ1ZTsKLQotCQlvYy0+cGFkZHIgPSBvdmwtPmluZm8ucGFkZHI7Ci0JCW9jLT52YWRkciA9IG92bC0+aW5mby52YWRkcjsKLQkJb2MtPnBfdXZfYWRkciA9IG92bC0+aW5mby5wX3V2X2FkZHI7Ci0JCW9jLT5zY3JlZW5fd2lkdGggPSBvdmwtPmluZm8uc2NyZWVuX3dpZHRoOwotCQlvYy0+d2lkdGggPSBvdmwtPmluZm8ud2lkdGg7Ci0JCW9jLT5oZWlnaHQgPSBvdmwtPmluZm8uaGVpZ2h0OwotCQlvYy0+Y29sb3JfbW9kZSA9IG92bC0+aW5mby5jb2xvcl9tb2RlOwotCQlvYy0+cm90YXRpb24gPSBvdmwtPmluZm8ucm90YXRpb247Ci0JCW9jLT5yb3RhdGlvbl90eXBlID0gb3ZsLT5pbmZvLnJvdGF0aW9uX3R5cGU7Ci0JCW9jLT5taXJyb3IgPSBvdmwtPmluZm8ubWlycm9yOwotCQlvYy0+cG9zX3ggPSBvdmwtPmluZm8ucG9zX3g7Ci0JCW9jLT5wb3NfeSA9IG92bC0+aW5mby5wb3NfeTsKLQkJb2MtPm91dF93aWR0aCA9IG92bC0+aW5mby5vdXRfd2lkdGg7Ci0JCW9jLT5vdXRfaGVpZ2h0ID0gb3ZsLT5pbmZvLm91dF9oZWlnaHQ7Ci0JCW9jLT5nbG9iYWxfYWxwaGEgPSBvdmwtPmluZm8uZ2xvYmFsX2FscGhhOwotCQlvYy0+cHJlX211bHRfYWxwaGEgPSBvdmwtPmluZm8ucHJlX211bHRfYWxwaGE7CisJCW9jLT5pbmZvID0gb3ZsLT5pbmZvOwogCiAJCW9jLT5yZXBsaWNhdGlvbiA9CiAJCQlkc3NfdXNlX3JlcGxpY2F0aW9uKGRzc2Rldiwgb3ZsLT5pbmZvLmNvbG9yX21vZGUpOwpAQCAtMTMwMiwxMSArMTM2OCw2IEBACiAKIAkJb2MtPmVuYWJsZWQgPSB0cnVlOwogCi0JCW9jLT5tYW51YWxfdXBkYXRlID0KLQkJCWRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUgJiYKLQkJCWRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KSAhPQotCQkJCU9NQVBfRFNTX1VQREFURV9BVVRPOwotCiAJCSsrbnVtX3BsYW5lc19lbmFibGVkOwogCX0KIApAQCAtMTMzNCwyMCArMTM5NSwxMCBAQAogCiAJCW1nci0+aW5mb19kaXJ0eSA9IGZhbHNlOwogCQltYy0+ZGlydHkgPSB0cnVlOwotCi0JCW1jLT5kZWZhdWx0X2NvbG9yID0gbWdyLT5pbmZvLmRlZmF1bHRfY29sb3I7Ci0JCW1jLT50cmFuc19rZXlfdHlwZSA9IG1nci0+aW5mby50cmFuc19rZXlfdHlwZTsKLQkJbWMtPnRyYW5zX2tleSA9IG1nci0+aW5mby50cmFuc19rZXk7Ci0JCW1jLT50cmFuc19lbmFibGVkID0gbWdyLT5pbmZvLnRyYW5zX2VuYWJsZWQ7Ci0JCW1jLT5hbHBoYV9lbmFibGVkID0gbWdyLT5pbmZvLmFscGhhX2VuYWJsZWQ7Ci0KLQkJbWMtPm1hbnVhbF91cGRfZGlzcGxheSA9Ci0JCQlkc3NkZXYtPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFOworCQltYy0+aW5mbyA9IG1nci0+aW5mbzsKIAogCQltYy0+bWFudWFsX3VwZGF0ZSA9Ci0JCQlkc3NkZXYtPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFICYmCi0JCQlkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2RldikgIT0KLQkJCQlPTUFQX0RTU19VUERBVEVfQVVUTzsKKwkJCWRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEU7CiAJfQogCiAJLyogWFhYIFRPRE86IFRyeSB0byBnZXQgZmlmb21lcmdlIHdvcmtpbmcuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQKQEAgLTEzNjgsNyArMTQxOSw3IEBACiAJLyogQ29uZmlndXJlIG92ZXJsYXkgZmlmb3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgb21hcF9kc3NfZ2V0X251bV9vdmVybGF5cygpOyArK2kpIHsKIAkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2OwotCQl1MzIgc2l6ZTsKKwkJdTMyIHNpemUsIGJ1cnN0X3NpemU7CiAKIAkJb3ZsID0gb21hcF9kc3NfZ2V0X292ZXJsYXkoaSk7CiAKQEAgLTEzODYsNiArMTQzNyw4IEBACiAJCWlmICh1c2VfZmlmb21lcmdlKQogCQkJc2l6ZSAqPSAzOwogCisJCWJ1cnN0X3NpemUgPSBkaXNwY19nZXRfYnVyc3Rfc2l6ZShvdmwtPmlkKTsKKwogCQlzd2l0Y2ggKGRzc2Rldi0+dHlwZSkgewogCQljYXNlIE9NQVBfRElTUExBWV9UWVBFX0RQSToKIAkJY2FzZSBPTUFQX0RJU1BMQVlfVFlQRV9EQkk6CkBAIC0xMzkzLDEzICsxNDQ2LDEzIEBACiAJCWNhc2UgT01BUF9ESVNQTEFZX1RZUEVfVkVOQzoKIAkJY2FzZSBPTUFQX0RJU1BMQVlfVFlQRV9IRE1JOgogCQkJZGVmYXVsdF9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMob3ZsLT5pZCwgc2l6ZSwKLQkJCQkJJm9jLT5idXJzdF9zaXplLCAmb2MtPmZpZm9fbG93LAorCQkJCQlidXJzdF9zaXplLCAmb2MtPmZpZm9fbG93LAogCQkJCQkmb2MtPmZpZm9faGlnaCk7CiAJCQlicmVhazsKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0RTSQogCQljYXNlIE9NQVBfRElTUExBWV9UWVBFX0RTSToKIAkJCWRzaV9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMob3ZsLT5pZCwgc2l6ZSwKLQkJCQkJJm9jLT5idXJzdF9zaXplLCAmb2MtPmZpZm9fbG93LAorCQkJCQlidXJzdF9zaXplLCAmb2MtPmZpZm9fbG93LAogCQkJCQkmb2MtPmZpZm9faGlnaCk7CiAJCQlicmVhazsKICNlbmRpZgpAQCAtMTQwOSw3ICsxNDYyLDYgQEAKIAl9CiAKIAlyID0gMDsKLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKIAlpZiAoIWRzc19jYWNoZS5pcnFfZW5hYmxlZCkgewogCQl1MzIgbWFzazsKIApAQCAtMTQyMiwxMCArMTQ3NCwxMSBAQAogCQlkc3NfY2FjaGUuaXJxX2VuYWJsZWQgPSB0cnVlOwogCX0KIAljb25maWd1cmVfZGlzcGMoKTsKLQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc3NfY2FjaGUubG9jaywgZmxhZ3MpOwogCisJZGlzcGNfcnVudGltZV9wdXQoKTsKKwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9vdmVybGF5LmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9vdmVybGF5LmMKaW5kZXggMGYwODAyNS4uYzg0MzgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvb3ZlcmxheS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYwpAQCAtODQsMzIgKzg0LDQyIEBACiAKIAlvbGRfbWdyID0gb3ZsLT5tYW5hZ2VyOwogCisJciA9IGRpc3BjX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCXJldHVybiByOworCiAJLyogZGV0YWNoIG9sZCBtYW5hZ2VyICovCiAJaWYgKG9sZF9tZ3IpIHsKIAkJciA9IG92bC0+dW5zZXRfbWFuYWdlcihvdmwpOwogCQlpZiAocikgewogCQkJRFNTRVJSKCJkZXRhY2ggZmFpbGVkXG4iKTsKLQkJCXJldHVybiByOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlyID0gb2xkX21nci0+YXBwbHkob2xkX21ncik7CiAJCWlmIChyKQotCQkJcmV0dXJuIHI7CisJCQlnb3RvIGVycjsKIAl9CiAKIAlpZiAobWdyKSB7CiAJCXIgPSBvdmwtPnNldF9tYW5hZ2VyKG92bCwgbWdyKTsKIAkJaWYgKHIpIHsKIAkJCURTU0VSUigiRmFpbGVkIHRvIGF0dGFjaCBvdmVybGF5XG4iKTsKLQkJCXJldHVybiByOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlyID0gbWdyLT5hcHBseShtZ3IpOwogCQlpZiAocikKLQkJCXJldHVybiByOworCQkJZ290byBlcnI7CiAJfQogCisJZGlzcGNfcnVudGltZV9wdXQoKTsKKwogCXJldHVybiBzaXplOworCitlcnI6CisJZGlzcGNfcnVudGltZV9wdXQoKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHNzaXplX3Qgb3ZlcmxheV9pbnB1dF9zaXplX3Nob3coc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsLCBjaGFyICpidWYpCkBAIC0yMzgsNiArMjQ4LDkgQEAKIAl1OCBhbHBoYTsKIAlzdHJ1Y3Qgb21hcF9vdmVybGF5X2luZm8gaW5mbzsKIAorCWlmICghZHNzX2hhc19mZWF0dXJlKEZFQVRfR0xPQkFMX0FMUEhBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyID0ga3N0cnRvdTgoYnVmLCAwLCAmYWxwaGEpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTUwNCw3ICs1MTcsNiBAQAogCiAJb3ZsLT5tYW5hZ2VyID0gbWdyOwogCi0JZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7CiAJLyogWFhYOiBXaGVuIHRoZXJlIGlzIGFuIG92ZXJsYXkgb24gYSBEU0kgbWFudWFsIHVwZGF0ZSBkaXNwbGF5LCBhbmQKIAkgKiB0aGUgb3ZlcmxheSBpcyBmaXJzdCBkaXNhYmxlZCwgdGhlbiBtb3ZlZCB0byB0diwgYW5kIGVuYWJsZWQsIHdlCiAJICogc2VlbSB0byBnZXQgU1lOQ19MT1NUX0RJR0lUIGVycm9yLgpAQCAtNTE4LDcgKzUzMCw2IEBACiAJICogdGhlIG92ZXJsYXksIGJ1dCBiZWZvcmUgbW92aW5nIHRoZSBvdmVybGF5IHRvIFRWLgogCSAqLwogCWRpc3BjX3NldF9jaGFubmVsX291dChvdmwtPmlkLCBtZ3ItPmlkKTsKLQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxOSw2ICs3MzAsOCBAQAogCX0KIAogCWlmIChtZ3IpIHsKKwkJZGlzcGNfcnVudGltZV9nZXQoKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgZHNzX2ZlYXRfZ2V0X251bV9vdmxzKCk7IGkrKykgewogCQkJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwogCQkJb3ZsID0gb21hcF9kc3NfZ2V0X292ZXJsYXkoaSk7CkBAIC03MjgsNiArNzQxLDggQEAKIAkJCQlvbWFwX2Rzc19zZXRfbWFuYWdlcihvdmwsIG1ncik7CiAJCQl9CiAJCX0KKworCQlkaXNwY19ydW50aW1lX3B1dCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCmluZGV4IGMwNmZiZTAuLjM5ZjRjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAjaW5jbHVkZSAiZHNzLmgiCkBAIC0xMjAsMTIgKzEyMiwyNSBAQAogCXJldHVybiBfX3Jhd19yZWFkbChyZmJpLmJhc2UgKyBpZHguaWR4KTsKIH0KIAotc3RhdGljIHZvaWQgcmZiaV9lbmFibGVfY2xvY2tzKGJvb2wgZW5hYmxlKQorc3RhdGljIGludCByZmJpX3J1bnRpbWVfZ2V0KHZvaWQpCiB7Ci0JaWYgKGVuYWJsZSkKLQkJZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7Ci0JZWxzZQotCQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7CisJaW50IHI7CisKKwlEU1NEQkcoInJmYmlfcnVudGltZV9nZXRcbiIpOworCisJciA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnJmYmkucGRldi0+ZGV2KTsKKwlXQVJOX09OKHIgPCAwKTsKKwlyZXR1cm4gciA8IDAgPyByIDogMDsKK30KKworc3RhdGljIHZvaWQgcmZiaV9ydW50aW1lX3B1dCh2b2lkKQoreworCWludCByOworCisJRFNTREJHKCJyZmJpX3J1bnRpbWVfcHV0XG4iKTsKKworCXIgPSBwbV9ydW50aW1lX3B1dCgmcmZiaS5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOwogfQogCiB2b2lkIHJmYmlfYnVzX2xvY2sodm9pZCkKQEAgLTgwNSw3ICs4MjAsOCBAQAogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtMzVzICUwOHhcbiIsICNyLCByZmJpX3JlYWRfcmVnKHIpKQogCi0JZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSyk7CisJaWYgKHJmYmlfcnVudGltZV9nZXQoKSkKKwkJcmV0dXJuOwogCiAJRFVNUFJFRyhSRkJJX1JFVklTSU9OKTsKIAlEVU1QUkVHKFJGQklfU1lTQ09ORklHKTsKQEAgLTgzNiw3ICs4NTIsNyBAQAogCURVTVBSRUcoUkZCSV9WU1lOQ19XSURUSCk7CiAJRFVNUFJFRyhSRkJJX0hTWU5DX1dJRFRIKTsKIAotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlyZmJpX3J1bnRpbWVfcHV0KCk7CiAjdW5kZWYgRFVNUFJFRwogfQogCkBAIC04NDQsNyArODYwLDkgQEAKIHsKIAlpbnQgcjsKIAotCXJmYmlfZW5hYmxlX2Nsb2NrcygxKTsKKwlyID0gcmZiaV9ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAogCXIgPSBvbWFwX2Rzc19zdGFydF9kZXZpY2UoZHNzZGV2KTsKIAlpZiAocikgewpAQCAtODc5LDYgKzg5Nyw3IEBACiBlcnIxOgogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7CiBlcnIwOgorCXJmYmlfcnVudGltZV9wdXQoKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0wob21hcGRzc19yZmJpX2Rpc3BsYXlfZW5hYmxlKTsKQEAgLTg4OSw3ICs5MDgsNyBAQAogCQkJRElTUENfSVJRX0ZSQU1FRE9ORSk7CiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIAotCXJmYmlfZW5hYmxlX2Nsb2NrcygwKTsKKwlyZmJpX3J1bnRpbWVfcHV0KCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBkc3NfcmZiaV9kaXNwbGF5X2Rpc2FibGUpOwogCkBAIC05MDQsOCArOTIzLDkgQEAKIHN0YXRpYyBpbnQgb21hcF9yZmJpaHdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1MzIgcmV2OwotCXUzMiBsOwogCXN0cnVjdCByZXNvdXJjZSAqcmZiaV9tZW07CisJc3RydWN0IGNsayAqY2xrOworCWludCByOwogCiAJcmZiaS5wZGV2ID0gcGRldjsKIApAQCAtOTE0LDQ2ICs5MzQsMTAyIEBACiAJcmZiaV9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocmZiaS5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZmJpX21lbSkgewogCQlEU1NFUlIoImNhbid0IGdldCBJT1JFU09VUkNFX01FTSBSRkJJXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAlyZmJpLmJhc2UgPSBpb3JlbWFwKHJmYmlfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZmJpX21lbSkpOwogCWlmICghcmZiaS5iYXNlKSB7CiAJCURTU0VSUigiY2FuJ3QgaW9yZW1hcCBSRkJJXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KIAotCXJmYmlfZW5hYmxlX2Nsb2NrcygxKTsKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKworCXIgPSByZmJpX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF9yZmJpOwogCiAJbXNsZWVwKDEwKTsKIAotCXJmYmkubDRfa2h6ID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX0lDSykgLyAxMDAwOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDM2MzAoKSkKKwkJY2xrID0gZHNzX2dldF9pY2soKTsKKwllbHNlCisJCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlEU1NFUlIoImNhbid0IGdldCBpY2tcbiIpOworCQlyID0gUFRSX0VSUihjbGspOworCQlnb3RvIGVycl9nZXRfaWNrOworCX0KIAotCS8qIEVuYWJsZSBhdXRvaWRsZSBhbmQgc21hcnQtaWRsZSAqLwotCWwgPSByZmJpX3JlYWRfcmVnKFJGQklfU1lTQ09ORklHKTsKLQlsIHw9ICgxIDw8IDApIHwgKDIgPDwgMyk7Ci0JcmZiaV93cml0ZV9yZWcoUkZCSV9TWVNDT05GSUcsIGwpOworCXJmYmkubDRfa2h6ID0gY2xrX2dldF9yYXRlKGNsaykgLyAxMDAwOworCisJY2xrX3B1dChjbGspOwogCiAJcmV2ID0gcmZiaV9yZWFkX3JlZyhSRkJJX1JFVklTSU9OKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJPTUFQIFJGQkkgcmV2ICVkLiVkXG4iLAogCSAgICAgICBGTERfR0VUKHJldiwgNywgNCksIEZMRF9HRVQocmV2LCAzLCAwKSk7CiAKLQlyZmJpX2VuYWJsZV9jbG9ja3MoMCk7CisJcmZiaV9ydW50aW1lX3B1dCgpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9nZXRfaWNrOgorCXJmYmlfcnVudGltZV9wdXQoKTsKK2Vycl9nZXRfcmZiaToKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJaW91bm1hcChyZmJpLmJhc2UpOworZXJyX2lvcmVtYXA6CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9yZmJpaHdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWlvdW5tYXAocmZiaS5iYXNlKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByZmJpX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGlzcGNfcnVudGltZV9wdXQoKTsKKwlkc3NfcnVudGltZV9wdXQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJmYmlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByOworCisJciA9IGRzc19ydW50aW1lX2dldCgpOworCWlmIChyIDwgMCkKKwkJZ290byBlcnJfZ2V0X2RzczsKKworCXIgPSBkaXNwY19ydW50aW1lX2dldCgpOworCWlmIChyIDwgMCkKKwkJZ290byBlcnJfZ2V0X2Rpc3BjOworCisJcmV0dXJuIDA7CisKK2Vycl9nZXRfZGlzcGM6CisJZHNzX3J1bnRpbWVfcHV0KCk7CitlcnJfZ2V0X2RzczoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJmYmlfcG1fb3BzID0geworCS5ydW50aW1lX3N1c3BlbmQgPSByZmJpX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSByZmJpX3J1bnRpbWVfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9yZmJpaHdfZHJpdmVyID0gewogCS5wcm9iZSAgICAgICAgICA9IG9tYXBfcmZiaWh3X3Byb2JlLAogCS5yZW1vdmUgICAgICAgICA9IG9tYXBfcmZiaWh3X3JlbW92ZSwKIAkuZHJpdmVyICAgICAgICAgPSB7CiAJCS5uYW1lICAgPSAib21hcGRzc19yZmJpIiwKIAkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmcmZiaV9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3NkaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMKaW5kZXggMGJkNGIwMy4uM2E2ODhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMKQEAgLTIwLDEzICsyMCwxMSBAQAogI2RlZmluZSBEU1NfU1VCU1lTX05BTUUgIlNESSIKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlICJkc3MuaCIKIAogc3RhdGljIHN0cnVjdCB7CkBAIC02MCwxNCArNTgsMjAgQEAKIAlyID0gb21hcF9kc3Nfc3RhcnRfZGV2aWNlKGRzc2Rldik7CiAJaWYgKHIpIHsKIAkJRFNTRVJSKCJmYWlsZWQgdG8gc3RhcnQgZGV2aWNlXG4iKTsKLQkJZ290byBlcnIwOworCQlnb3RvIGVycl9zdGFydF9kZXY7CiAJfQogCiAJciA9IHJlZ3VsYXRvcl9lbmFibGUoc2RpLnZkZHNfc2RpX3JlZyk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnJfcmVnX2VuYWJsZTsKIAotCWRzc19jbGtfZW5hYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0spOworCXIgPSBkc3NfcnVudGltZV9nZXQoKTsKKwlpZiAocikKKwkJZ290byBlcnJfZ2V0X2RzczsKKworCXIgPSBkaXNwY19ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlnb3RvIGVycl9nZXRfZGlzcGM7CiAKIAlzZGlfYmFzaWNfaW5pdChkc3NkZXYpOwogCkBAIC04MCw3ICs4NCw3IEBACiAJciA9IGRzc19jYWxjX2Nsb2NrX2RpdigxLCB0LT5waXhlbF9jbG9jayAqIDEwMDAsCiAJCQkmZHNzX2NpbmZvLCAmZGlzcGNfY2luZm8pOwogCWlmIChyKQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2NhbGNfY2xvY2tfZGl2OwogCiAJZmNrID0gZHNzX2NpbmZvLmZjazsKIAlsY2tfZGl2ID0gZGlzcGNfY2luZm8ubGNrX2RpdjsKQEAgLTEwMSwyNyArMTA1LDM0IEBACiAKIAlyID0gZHNzX3NldF9jbG9ja19kaXYoJmRzc19jaW5mbyk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnJfc2V0X2Rzc19jbG9ja19kaXY7CiAKIAlyID0gZGlzcGNfc2V0X2Nsb2NrX2Rpdihkc3NkZXYtPm1hbmFnZXItPmlkLCAmZGlzcGNfY2luZm8pOwogCWlmIChyKQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX3NldF9kaXNwY19jbG9ja19kaXY7CiAKIAlkc3Nfc2RpX2luaXQoZHNzZGV2LT5waHkuc2RpLmRhdGFwYWlycyk7CiAJciA9IGRzc19zZGlfZW5hYmxlKCk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnJfc2RpX2VuYWJsZTsKIAltZGVsYXkoMik7CiAKIAlkc3NkZXYtPm1hbmFnZXItPmVuYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogCiAJcmV0dXJuIDA7Ci1lcnIyOgotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKworZXJyX3NkaV9lbmFibGU6CitlcnJfc2V0X2Rpc3BjX2Nsb2NrX2RpdjoKK2Vycl9zZXRfZHNzX2Nsb2NrX2RpdjoKK2Vycl9jYWxjX2Nsb2NrX2RpdjoKKwlkaXNwY19ydW50aW1lX3B1dCgpOworZXJyX2dldF9kaXNwYzoKKwlkc3NfcnVudGltZV9wdXQoKTsKK2Vycl9nZXRfZHNzOgogCXJlZ3VsYXRvcl9kaXNhYmxlKHNkaS52ZGRzX3NkaV9yZWcpOwotZXJyMToKK2Vycl9yZWdfZW5hYmxlOgogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7Ci1lcnIwOgorZXJyX3N0YXJ0X2RldjoKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0wob21hcGRzc19zZGlfZGlzcGxheV9lbmFibGUpOwpAQCAtMTMyLDcgKzE0Myw4IEBACiAKIAlkc3Nfc2RpX2Rpc2FibGUoKTsKIAotCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLKTsKKwlkaXNwY19ydW50aW1lX3B1dCgpOworCWRzc19ydW50aW1lX3B1dCgpOwogCiAJcmVndWxhdG9yX2Rpc2FibGUoc2RpLnZkZHNfc2RpX3JlZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3ZlbmMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3ZlbmMuYwppbmRleCA5ODBmOTE5Li4xNzNjNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy92ZW5jLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvdmVuYy5jCkBAIC0zMywxMSArMzMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAiZHNzLmgiCisjaW5jbHVkZSAiZHNzX2ZlYXR1cmVzLmgiCiAKIC8qIFZlbmMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFZFTkNfUkVWX0lECQkJCTB4MDAKQEAgLTI5Miw2ICsyOTQsOSBAQAogCXN0cnVjdCBtdXRleCB2ZW5jX2xvY2s7CiAJdTMyIHdzc19kYXRhOwogCXN0cnVjdCByZWd1bGF0b3IgKnZkZGFfZGFjX3JlZzsKKworCXN0cnVjdCBjbGsJKnR2X2NsazsKKwlzdHJ1Y3QgY2xrCSp0dl9kYWNfY2xrOwogfSB2ZW5jOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmVuY193cml0ZV9yZWcoaW50IGlkeCwgdTMyIHZhbCkKQEAgLTM4MCwxNCArMzg1LDI1IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgdmVuY19lbmFibGVfY2xvY2tzKGludCBlbmFibGUpCitzdGF0aWMgaW50IHZlbmNfcnVudGltZV9nZXQodm9pZCkKIHsKLQlpZiAoZW5hYmxlKQotCQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLIHwgRFNTX0NMS19UVkZDSyB8Ci0JCQkJRFNTX0NMS19WSURGQ0spOwotCWVsc2UKLQkJZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sgfCBEU1NfQ0xLX1RWRkNLIHwKLQkJCQlEU1NfQ0xLX1ZJREZDSyk7CisJaW50IHI7CisKKwlEU1NEQkcoInZlbmNfcnVudGltZV9nZXRcbiIpOworCisJciA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJnZlbmMucGRldi0+ZGV2KTsKKwlXQVJOX09OKHIgPCAwKTsKKwlyZXR1cm4gciA8IDAgPyByIDogMDsKK30KKworc3RhdGljIHZvaWQgdmVuY19ydW50aW1lX3B1dCh2b2lkKQoreworCWludCByOworCisJRFNTREJHKCJ2ZW5jX3J1bnRpbWVfcHV0XG4iKTsKKworCXIgPSBwbV9ydW50aW1lX3B1dCgmdmVuYy5wZGV2LT5kZXYpOworCVdBUk5fT04ociA8IDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZlbmNfY29uZmlnICp2ZW5jX3RpbWluZ3NfdG9fY29uZmlnKApAQCAtNDA2LDggKzQyMiw2IEBACiB7CiAJdTMyIGw7CiAKLQl2ZW5jX2VuYWJsZV9jbG9ja3MoMSk7Ci0KIAl2ZW5jX3Jlc2V0KCk7CiAJdmVuY193cml0ZV9jb25maWcodmVuY190aW1pbmdzX3RvX2NvbmZpZygmZHNzZGV2LT5wYW5lbC50aW1pbmdzKSk7CiAKQEAgLTQ0OCw4ICs0NjIsNiBAQAogCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKIAogCXJlZ3VsYXRvcl9kaXNhYmxlKHZlbmMudmRkYV9kYWNfcmVnKTsKLQotCXZlbmNfZW5hYmxlX2Nsb2NrcygwKTsKIH0KIAogCkBAIC00ODcsNiArNDk5LDEwIEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKKwlyID0gdmVuY19ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlnb3RvIGVycjE7CisKIAl2ZW5jX3Bvd2VyX29uKGRzc2Rldik7CiAKIAl2ZW5jLndzc19kYXRhID0gMDsKQEAgLTUyMCw2ICs1MzYsOCBAQAogCiAJdmVuY19wb3dlcl9vZmYoZHNzZGV2KTsKIAorCXZlbmNfcnVudGltZV9wdXQoKTsKKwogCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOwogCiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKQEAgLTUzOCwyMCArNTU2LDYgQEAKIAlyZXR1cm4gdmVuY19wYW5lbF9lbmFibGUoZHNzZGV2KTsKIH0KIAotc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdmVuY19nZXRfdXBkYXRlX21vZGUoCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX0FVVE87Ci19Ci0KLXN0YXRpYyBpbnQgdmVuY19zZXRfdXBkYXRlX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG1vZGUpCi17Ci0JaWYgKG1vZGUgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCB2ZW5jX2dldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKIAkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpCiB7CkBAIC01OTgsNiArNjAyLDcgQEAKIHN0YXRpYyBpbnQgdmVuY19zZXRfd3NzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwJdTMyIHdzcykKIHsKIAljb25zdCBzdHJ1Y3QgdmVuY19jb25maWcgKmNvbmZpZzsKKwlpbnQgcjsKIAogCURTU0RCRygidmVuY19zZXRfd3NzXG4iKTsKIApAQCAtNjA4LDE2ICs2MTMsMTkgQEAKIAkvKiBJbnZlcnQgZHVlIHRvIFZFTkNfTDIxX1dDX0NUTDpJTlY9MSAqLwogCXZlbmMud3NzX2RhdGEgPSAod3NzIF4gMHhmZmZmZikgPDwgODsKIAotCXZlbmNfZW5hYmxlX2Nsb2NrcygxKTsKKwlyID0gdmVuY19ydW50aW1lX2dldCgpOworCWlmIChyKQorCQlnb3RvIGVycjsKIAogCXZlbmNfd3JpdGVfcmVnKFZFTkNfQlNUQU1QX1dTU19EQVRBLCBjb25maWctPmJzdGFtcF93c3NfZGF0YSB8CiAJCQl2ZW5jLndzc19kYXRhKTsKIAotCXZlbmNfZW5hYmxlX2Nsb2NrcygwKTsKKwl2ZW5jX3J1bnRpbWVfcHV0KCk7CiAKK2VycjoKIAltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiByOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RyaXZlciB2ZW5jX2RyaXZlciA9IHsKQEAgLTYzMiw5ICs2NDAsNiBAQAogCS5nZXRfcmVzb2x1dGlvbgk9IG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbiwKIAkuZ2V0X3JlY29tbWVuZGVkX2JwcCA9IG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVjb21tZW5kZWRfYnBwLAogCi0JLnNldF91cGRhdGVfbW9kZSA9IHZlbmNfc2V0X3VwZGF0ZV9tb2RlLAotCS5nZXRfdXBkYXRlX21vZGUgPSB2ZW5jX2dldF91cGRhdGVfbW9kZSwKLQogCS5nZXRfdGltaW5ncwk9IHZlbmNfZ2V0X3RpbWluZ3MsCiAJLnNldF90aW1pbmdzCT0gdmVuY19zZXRfdGltaW5ncywKIAkuY2hlY2tfdGltaW5ncwk9IHZlbmNfY2hlY2tfdGltaW5ncywKQEAgLTY3Myw3ICs2NzgsOCBAQAogewogI2RlZmluZSBEVU1QUkVHKHIpIHNlcV9wcmludGYocywgIiUtMzVzICUwOHhcbiIsICNyLCB2ZW5jX3JlYWRfcmVnKHIpKQogCi0JdmVuY19lbmFibGVfY2xvY2tzKDEpOworCWlmICh2ZW5jX3J1bnRpbWVfZ2V0KCkpCisJCXJldHVybjsKIAogCURVTVBSRUcoVkVOQ19GX0NPTlRST0wpOwogCURVTVBSRUcoVkVOQ19WSURPVVRfQ1RSTCk7CkBAIC03MTcsMTYgKzcyMyw1NiBAQAogCURVTVBSRUcoVkVOQ19PVVRQVVRfQ09OVFJPTCk7CiAJRFVNUFJFRyhWRU5DX09VVFBVVF9URVNUKTsKIAotCXZlbmNfZW5hYmxlX2Nsb2NrcygwKTsKKwl2ZW5jX3J1bnRpbWVfcHV0KCk7CiAKICN1bmRlZiBEVU1QUkVHCiB9CiAKK3N0YXRpYyBpbnQgdmVuY19nZXRfY2xvY2tzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCURTU0VSUigiY2FuJ3QgZ2V0IGZja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJfQorCisJdmVuYy50dl9jbGsgPSBjbGs7CisKKwlpZiAoZHNzX2hhc19mZWF0dXJlKEZFQVRfVkVOQ19SRVFVSVJFU19UVl9EQUNfQ0xLKSkgeworCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXAzNjMwKCkpCisJCQljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJkc3NfOTZtX2ZjayIpOworCQllbHNlCisJCQljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ0dl9kYWNfY2xrIik7CisJCWlmIChJU19FUlIoY2xrKSkgeworCQkJRFNTRVJSKCJjYW4ndCBnZXQgdHZfZGFjX2Nsa1xuIik7CisJCQljbGtfcHV0KHZlbmMudHZfY2xrKTsKKwkJCXJldHVybiBQVFJfRVJSKGNsayk7CisJCX0KKwl9IGVsc2UgeworCQljbGsgPSBOVUxMOworCX0KKworCXZlbmMudHZfZGFjX2NsayA9IGNsazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZW5jX3B1dF9jbG9ja3Modm9pZCkKK3sKKwlpZiAodmVuYy50dl9jbGspCisJCWNsa19wdXQodmVuYy50dl9jbGspOworCWlmICh2ZW5jLnR2X2RhY19jbGspCisJCWNsa19wdXQodmVuYy50dl9kYWNfY2xrKTsKK30KKwogLyogVkVOQyBIVyBJUCBpbml0aWFsaXNhdGlvbiAqLwogc3RhdGljIGludCBvbWFwX3ZlbmNod19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXU4IHJldl9pZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnZlbmNfbWVtOworCWludCByOwogCiAJdmVuYy5wZGV2ID0gcGRldjsKIApAQCAtNzM3LDIyICs3ODMsNDAgQEAKIAl2ZW5jX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZSh2ZW5jLnBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXZlbmNfbWVtKSB7CiAJCURTU0VSUigiY2FuJ3QgZ2V0IElPUkVTT1VSQ0VfTUVNIFZFTkNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCXZlbmMuYmFzZSA9IGlvcmVtYXAodmVuY19tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKHZlbmNfbWVtKSk7CiAJaWYgKCF2ZW5jLmJhc2UpIHsKIAkJRFNTRVJSKCJjYW4ndCBpb3JlbWFwIFZFTkNcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCi0JdmVuY19lbmFibGVfY2xvY2tzKDEpOworCXIgPSB2ZW5jX2dldF9jbG9ja3MocGRldik7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF9jbGs7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKworCXIgPSB2ZW5jX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCWdvdG8gZXJyX2dldF92ZW5jOwogCiAJcmV2X2lkID0gKHU4KSh2ZW5jX3JlYWRfcmVnKFZFTkNfUkVWX0lEKSAmIDB4ZmYpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgIk9NQVAgVkVOQyByZXYgJWRcbiIsIHJldl9pZCk7CiAKLQl2ZW5jX2VuYWJsZV9jbG9ja3MoMCk7CisJdmVuY19ydW50aW1lX3B1dCgpOwogCiAJcmV0dXJuIG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmdmVuY19kcml2ZXIpOworCitlcnJfZ2V0X3ZlbmM6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXZlbmNfcHV0X2Nsb2NrcygpOworZXJyX2dldF9jbGs6CisJaW91bm1hcCh2ZW5jLmJhc2UpOworZXJyX2lvcmVtYXA6CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF92ZW5jaHdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC03NjMsMTYgKzgyNyw2MSBAQAogCX0KIAlvbWFwX2Rzc191bnJlZ2lzdGVyX2RyaXZlcigmdmVuY19kcml2ZXIpOwogCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXZlbmNfcHV0X2Nsb2NrcygpOworCiAJaW91bm1hcCh2ZW5jLmJhc2UpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZlbmNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAodmVuYy50dl9kYWNfY2xrKQorCQljbGtfZGlzYWJsZSh2ZW5jLnR2X2RhY19jbGspOworCWNsa19kaXNhYmxlKHZlbmMudHZfY2xrKTsKKworCWRpc3BjX3J1bnRpbWVfcHV0KCk7CisJZHNzX3J1bnRpbWVfcHV0KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZW5jX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcjsKKworCXIgPSBkc3NfcnVudGltZV9nZXQoKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyX2dldF9kc3M7CisKKwlyID0gZGlzcGNfcnVudGltZV9nZXQoKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyX2dldF9kaXNwYzsKKworCWNsa19lbmFibGUodmVuYy50dl9jbGspOworCWlmICh2ZW5jLnR2X2RhY19jbGspCisJCWNsa19lbmFibGUodmVuYy50dl9kYWNfY2xrKTsKKworCXJldHVybiAwOworCitlcnJfZ2V0X2Rpc3BjOgorCWRzc19ydW50aW1lX3B1dCgpOworZXJyX2dldF9kc3M6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB2ZW5jX3BtX29wcyA9IHsKKwkucnVudGltZV9zdXNwZW5kID0gdmVuY19ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gdmVuY19ydW50aW1lX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfdmVuY2h3X2RyaXZlciA9IHsKIAkucHJvYmUgICAgICAgICAgPSBvbWFwX3ZlbmNod19wcm9iZSwKIAkucmVtb3ZlICAgICAgICAgPSBvbWFwX3ZlbmNod19yZW1vdmUsCiAJLmRyaXZlciAgICAgICAgID0gewogCQkubmFtZSAgID0gIm9tYXBkc3NfdmVuYyIsCiAJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJnZlbmNfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItaW9jdGwuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCmluZGV4IGNmZjQ1MDMuLjZiMWFjMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jCkBAIC0zMTYsNjggKzMxNiw2OCBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwZmJfdXBkYXRlX3dpbmRvdyk7CiAKLXN0YXRpYyBpbnQgb21hcGZiX3NldF91cGRhdGVfbW9kZShzdHJ1Y3QgZmJfaW5mbyAqZmJpLAoraW50IG9tYXBmYl9zZXRfdXBkYXRlX21vZGUoc3RydWN0IGZiX2luZm8gKmZiaSwKIAkJCQkgICBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSBtb2RlKQogewogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXkgPSBmYjJkaXNwbGF5KGZiaSk7Ci0JZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSB1bTsKKwlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKKwlzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2ID0gb2ZiaS0+ZmJkZXY7CisJc3RydWN0IG9tYXBmYl9kaXNwbGF5X2RhdGEgKmQ7CiAJaW50IHI7CiAKLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+c2V0X3VwZGF0ZV9tb2RlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgT01BUEZCX1VQREFURV9ESVNBQkxFRDoKLQkJdW0gPSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBPTUFQRkJfQVVUT19VUERBVEU6Ci0JCXVtID0gT01BUF9EU1NfVVBEQVRFX0FVVE87Ci0JCWJyZWFrOwotCi0JY2FzZSBPTUFQRkJfTUFOVUFMX1VQREFURToKLQkJdW0gPSBPTUFQX0RTU19VUERBVEVfTUFOVUFMOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXIgPSBkaXNwbGF5LT5kcml2ZXItPnNldF91cGRhdGVfbW9kZShkaXNwbGF5LCB1bSk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBvbWFwZmJfZ2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBmYl9pbmZvICpmYmksCi0JCWVudW0gb21hcGZiX3VwZGF0ZV9tb2RlICptb2RlKQotewotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXkgPSBmYjJkaXNwbGF5KGZiaSk7Ci0JZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtOwotCiAJaWYgKCFkaXNwbGF5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghZGlzcGxheS0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUpIHsKLQkJKm1vZGUgPSBPTUFQRkJfQVVUT19VUERBVEU7CisJaWYgKG1vZGUgIT0gT01BUEZCX0FVVE9fVVBEQVRFICYmIG1vZGUgIT0gT01BUEZCX01BTlVBTF9VUERBVEUpCisJCXJldHVybiAtRUlOVkFMOworCisJb21hcGZiX2xvY2soZmJkZXYpOworCisJZCA9IGdldF9kaXNwbGF5X2RhdGEoZmJkZXYsIGRpc3BsYXkpOworCisJaWYgKGQtPnVwZGF0ZV9tb2RlID09IG1vZGUpIHsKKwkJb21hcGZiX3VubG9jayhmYmRldik7CiAJCXJldHVybiAwOwogCX0KIAotCW0gPSBkaXNwbGF5LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkaXNwbGF5KTsKKwlyID0gMDsKIAotCXN3aXRjaCAobSkgewotCWNhc2UgT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOgotCQkqbW9kZSA9IE9NQVBGQl9VUERBVEVfRElTQUJMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgT01BUF9EU1NfVVBEQVRFX0FVVE86Ci0JCSptb2RlID0gT01BUEZCX0FVVE9fVVBEQVRFOwotCQlicmVhazsKLQljYXNlIE9NQVBfRFNTX1VQREFURV9NQU5VQUw6Ci0JCSptb2RlID0gT01BUEZCX01BTlVBTF9VUERBVEU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOworCWlmIChkaXNwbGF5LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgeworCQlpZiAobW9kZSA9PSBPTUFQRkJfQVVUT19VUERBVEUpCisJCQlvbWFwZmJfc3RhcnRfYXV0b191cGRhdGUoZmJkZXYsIGRpc3BsYXkpOworCQllbHNlIC8qIE1BTlVBTF9VUERBVEUgKi8KKwkJCW9tYXBmYl9zdG9wX2F1dG9fdXBkYXRlKGZiZGV2LCBkaXNwbGF5KTsKKworCQlkLT51cGRhdGVfbW9kZSA9IG1vZGU7CisJfSBlbHNlIHsgLyogQVVUT19VUERBVEUgKi8KKwkJaWYgKG1vZGUgPT0gT01BUEZCX01BTlVBTF9VUERBVEUpCisJCQlyID0gLUVJTlZBTDsKIAl9CiAKKwlvbWFwZmJfdW5sb2NrKGZiZGV2KTsKKworCXJldHVybiByOworfQorCitpbnQgb21hcGZiX2dldF91cGRhdGVfbW9kZShzdHJ1Y3QgZmJfaW5mbyAqZmJpLAorCQllbnVtIG9tYXBmYl91cGRhdGVfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5ID0gZmIyZGlzcGxheShmYmkpOworCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYgPSBvZmJpLT5mYmRldjsKKwlzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSAqZDsKKworCWlmICghZGlzcGxheSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvbWFwZmJfbG9jayhmYmRldik7CisKKwlkID0gZ2V0X2Rpc3BsYXlfZGF0YShmYmRldiwgZGlzcGxheSk7CisKKwkqbW9kZSA9IGQtPnVwZGF0ZV9tb2RlOworCisJb21hcGZiX3VubG9jayhmYmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMKaW5kZXggNTA1YmMxMi4uNjAyYjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jCkBAIC00Niw2ICs0NiwxMCBAQAogc3RhdGljIGludCBkZWZfdnJmYjsKIHN0YXRpYyBpbnQgZGVmX3JvdGF0ZTsKIHN0YXRpYyBpbnQgZGVmX21pcnJvcjsKK3N0YXRpYyBib29sIGF1dG9fdXBkYXRlOworc3RhdGljIHVuc2lnbmVkIGludCBhdXRvX3VwZGF0ZV9mcmVxOworbW9kdWxlX3BhcmFtKGF1dG9fdXBkYXRlLCBib29sLCAwKTsKK21vZHVsZV9wYXJhbShhdXRvX3VwZGF0ZV9mcmVxLCB1aW50LCAwNjQ0KTsKIAogI2lmZGVmIERFQlVHCiB1bnNpZ25lZCBpbnQgb21hcGZiX2RlYnVnOwpAQCAtMTI0Miw2ICsxMjQ2LDcgQEAKIAlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAlzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2ID0gb2ZiaS0+ZmJkZXY7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSA9IGZiMmRpc3BsYXkoZmJpKTsKKwlzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSAqZDsKIAlpbnQgciA9IDA7CiAKIAlpZiAoIWRpc3BsYXkpCkBAIC0xMjQ5LDYgKzEyNTQsOCBAQAogCiAJb21hcGZiX2xvY2soZmJkZXYpOwogCisJZCA9IGdldF9kaXNwbGF5X2RhdGEoZmJkZXYsIGRpc3BsYXkpOworCiAJc3dpdGNoIChibGFuaykgewogCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKIAkJaWYgKGRpc3BsYXktPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEKQpAQCAtMTI1Nyw2ICsxMjY0LDExIEBACiAJCWlmIChkaXNwbGF5LT5kcml2ZXItPnJlc3VtZSkKIAkJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnJlc3VtZShkaXNwbGF5KTsKIAorCQlpZiAoKGRpc3BsYXktPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFKSAmJgorCQkJCWQtPnVwZGF0ZV9tb2RlID09IE9NQVBGQl9BVVRPX1VQREFURSAmJgorCQkJCSFkLT5hdXRvX3VwZGF0ZV93b3JrX2VuYWJsZWQpCisJCQlvbWFwZmJfc3RhcnRfYXV0b191cGRhdGUoZmJkZXYsIGRpc3BsYXkpOworCiAJCWJyZWFrOwogCiAJY2FzZSBGQl9CTEFOS19OT1JNQUw6CkBAIC0xMjY4LDYgKzEyODAsOSBAQAogCQlpZiAoZGlzcGxheS0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCiAJCQlnb3RvIGV4aXQ7CiAKKwkJaWYgKGQtPmF1dG9fdXBkYXRlX3dvcmtfZW5hYmxlZCkKKwkJCW9tYXBmYl9zdG9wX2F1dG9fdXBkYXRlKGZiZGV2LCBkaXNwbGF5KTsKKwogCQlpZiAoZGlzcGxheS0+ZHJpdmVyLT5zdXNwZW5kKQogCQkJciA9IGRpc3BsYXktPmRyaXZlci0+c3VzcGVuZChkaXNwbGF5KTsKIApAQCAtMTcyNCw2ICsxNzM5LDc4IEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyB2b2lkIG9tYXBmYl9hdXRvX3VwZGF0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXY7CisJc3RydWN0IG9tYXBfZHNzX2RyaXZlciAqZHNzZHJ2OworCXN0cnVjdCBvbWFwZmJfZGlzcGxheV9kYXRhICpkOworCXUxNiB3LCBoOworCXVuc2lnbmVkIGludCBmcmVxOworCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXY7CisKKwlkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvbWFwZmJfZGlzcGxheV9kYXRhLAorCQkJYXV0b191cGRhdGVfd29yay53b3JrKTsKKworCWRzc2RldiA9IGQtPmRzc2RldjsKKwlkc3NkcnYgPSBkc3NkZXYtPmRyaXZlcjsKKwlmYmRldiA9IGQtPmZiZGV2OworCisJaWYgKCFkc3NkcnYgfHwgIWRzc2Rydi0+dXBkYXRlKQorCQlyZXR1cm47CisKKwlpZiAoZHNzZHJ2LT5zeW5jKQorCQlkc3NkcnYtPnN5bmMoZHNzZGV2KTsKKworCWRzc2Rydi0+Z2V0X3Jlc29sdXRpb24oZHNzZGV2LCAmdywgJmgpOworCWRzc2Rydi0+dXBkYXRlKGRzc2RldiwgMCwgMCwgdywgaCk7CisKKwlmcmVxID0gYXV0b191cGRhdGVfZnJlcTsKKwlpZiAoZnJlcSA9PSAwKQorCQlmcmVxID0gMjA7CisJcXVldWVfZGVsYXllZF93b3JrKGZiZGV2LT5hdXRvX3VwZGF0ZV93cSwKKwkJCSZkLT5hdXRvX3VwZGF0ZV93b3JrLCBIWiAvIGZyZXEpOworfQorCit2b2lkIG9tYXBmYl9zdGFydF9hdXRvX3VwZGF0ZShzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LAorCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5KQoreworCXN0cnVjdCBvbWFwZmJfZGlzcGxheV9kYXRhICpkOworCisJaWYgKGZiZGV2LT5hdXRvX3VwZGF0ZV93cSA9PSBOVUxMKSB7CisJCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKworCQl3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvbWFwZmJfYXV0b191cGRhdGUiKTsKKworCQlpZiAod3EgPT0gTlVMTCkgeworCQkJZGV2X2VycihmYmRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWUgZm9yICIKKwkJCQkJImF1dG8tdXBkYXRlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZiZGV2LT5hdXRvX3VwZGF0ZV93cSA9IHdxOworCX0KKworCWQgPSBnZXRfZGlzcGxheV9kYXRhKGZiZGV2LCBkaXNwbGF5KTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZkLT5hdXRvX3VwZGF0ZV93b3JrLCBvbWFwZmJfYXV0b191cGRhdGVfd29yayk7CisKKwlkLT5hdXRvX3VwZGF0ZV93b3JrX2VuYWJsZWQgPSB0cnVlOworCisJb21hcGZiX2F1dG9fdXBkYXRlX3dvcmsoJmQtPmF1dG9fdXBkYXRlX3dvcmsud29yayk7Cit9CisKK3ZvaWQgb21hcGZiX3N0b3BfYXV0b191cGRhdGUoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiwKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSkKK3sKKwlzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSAqZDsKKworCWQgPSBnZXRfZGlzcGxheV9kYXRhKGZiZGV2LCBkaXNwbGF5KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZC0+YXV0b191cGRhdGVfd29yayk7CisKKwlkLT5hdXRvX3VwZGF0ZV93b3JrX2VuYWJsZWQgPSBmYWxzZTsKK30KKwogLyogaW5pdGlhbGl6ZSBmYl9pbmZvLCB2YXIsIGZpeCB0byBzb21ldGhpbmcgc2FuZSBiYXNlZCBvbiB0aGUgZGlzcGxheSAqLwogc3RhdGljIGludCBvbWFwZmJfZmJfaW5pdChzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewpAQCAtMTg1OCwxMCArMTk0NSwyMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBmYmRldi0+bnVtX2Rpc3BsYXlzOyBpKyspIHsKLQkJaWYgKGZiZGV2LT5kaXNwbGF5c1tpXS0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkKLQkJCWZiZGV2LT5kaXNwbGF5c1tpXS0+ZHJpdmVyLT5kaXNhYmxlKGZiZGV2LT5kaXNwbGF5c1tpXSk7CisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IGZiZGV2LT5kaXNwbGF5c1tpXS5kc3NkZXY7CiAKLQkJb21hcF9kc3NfcHV0X2RldmljZShmYmRldi0+ZGlzcGxheXNbaV0pOworCQlpZiAoZmJkZXYtPmRpc3BsYXlzW2ldLmF1dG9fdXBkYXRlX3dvcmtfZW5hYmxlZCkKKwkJCW9tYXBmYl9zdG9wX2F1dG9fdXBkYXRlKGZiZGV2LCBkc3NkZXYpOworCisJCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpCisJCQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOworCisJCW9tYXBfZHNzX3B1dF9kZXZpY2UoZHNzZGV2KTsKKwl9CisKKwlpZiAoZmJkZXYtPmF1dG9fdXBkYXRlX3dxICE9IE5VTEwpIHsKKwkJZmx1c2hfd29ya3F1ZXVlKGZiZGV2LT5hdXRvX3VwZGF0ZV93cSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGZiZGV2LT5hdXRvX3VwZGF0ZV93cSk7CisJCWZiZGV2LT5hdXRvX3VwZGF0ZV93cSA9IE5VTEw7CiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKGZiZGV2LT5kZXYsIE5VTEwpOwpAQCAtMjA4NCwxNCArMjE4MiwxNCBAQAogCWludCByOwogCXU4IGJwcDsKIAlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHRpbWluZ3MsIHRlbXBfdGltaW5nczsKKwlzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSAqZDsKIAogCXIgPSBvbWFwZmJfbW9kZV90b190aW1pbmdzKG1vZGVfc3RyLCAmdGltaW5ncywgJmJwcCk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZmJkZXYtPmJwcF9vdmVycmlkZXNbZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzXS5kc3NkZXYgPSBkaXNwbGF5OwotCWZiZGV2LT5icHBfb3ZlcnJpZGVzW2ZiZGV2LT5udW1fYnBwX292ZXJyaWRlc10uYnBwID0gYnBwOwotCSsrZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzOworCWQgPSBnZXRfZGlzcGxheV9kYXRhKGZiZGV2LCBkaXNwbGF5KTsKKwlkLT5icHBfb3ZlcnJpZGUgPSBicHA7CiAKIAlpZiAoZGlzcGxheS0+ZHJpdmVyLT5jaGVja190aW1pbmdzKSB7CiAJCXIgPSBkaXNwbGF5LT5kcml2ZXItPmNoZWNrX3RpbWluZ3MoZGlzcGxheSwgJnRpbWluZ3MpOwpAQCAtMjExNywxNCArMjIxNSwxNCBAQAogc3RhdGljIGludCBvbWFwZmJfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LAogCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaW50IGk7CisJc3RydWN0IG9tYXBmYl9kaXNwbGF5X2RhdGEgKmQ7CiAKIAlCVUdfT04oZHNzZGV2LT5kcml2ZXItPmdldF9yZWNvbW1lbmRlZF9icHAgPT0gTlVMTCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzOyArK2kpIHsKLQkJaWYgKGRzc2RldiA9PSBmYmRldi0+YnBwX292ZXJyaWRlc1tpXS5kc3NkZXYpCi0JCQlyZXR1cm4gZmJkZXYtPmJwcF9vdmVycmlkZXNbaV0uYnBwOwotCX0KKwlkID0gZ2V0X2Rpc3BsYXlfZGF0YShmYmRldiwgZHNzZGV2KTsKKworCWlmIChkLT5icHBfb3ZlcnJpZGUgIT0gMCkKKwkJcmV0dXJuIGQtPmJwcF9vdmVycmlkZTsKIAogCXJldHVybiBkc3NkZXYtPmRyaXZlci0+Z2V0X3JlY29tbWVuZGVkX2JwcChkc3NkZXYpOwogfQpAQCAtMjE1Niw5ICsyMjU0LDkgQEAKIAogCQlkaXNwbGF5ID0gTlVMTDsKIAkJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fZGlzcGxheXM7ICsraSkgewotCQkJaWYgKHN0cmNtcChmYmRldi0+ZGlzcGxheXNbaV0tPm5hbWUsCisJCQlpZiAoc3RyY21wKGZiZGV2LT5kaXNwbGF5c1tpXS5kc3NkZXYtPm5hbWUsCiAJCQkJCQlkaXNwbGF5X3N0cikgPT0gMCkgewotCQkJCWRpc3BsYXkgPSBmYmRldi0+ZGlzcGxheXNbaV07CisJCQkJZGlzcGxheSA9IGZiZGV2LT5kaXNwbGF5c1tpXS5kc3NkZXY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTIxODIsNiArMjI4MCw3IEBACiAJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyICpkc3NkcnYgPSBkc3NkZXYtPmRyaXZlcjsKKwlzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSAqZDsKIAlpbnQgcjsKIAogCXIgPSBkc3NkcnYtPmVuYWJsZShkc3NkZXYpOwpAQCAtMjE5MSw4ICsyMjkwLDIwIEBACiAJCXJldHVybiByOwogCX0KIAorCWQgPSBnZXRfZGlzcGxheV9kYXRhKGZiZGV2LCBkc3NkZXYpOworCisJZC0+ZmJkZXYgPSBmYmRldjsKKwogCWlmIChkc3NkZXYtPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFKSB7CiAJCXUxNiB3LCBoOworCisJCWlmIChhdXRvX3VwZGF0ZSkgeworCQkJb21hcGZiX3N0YXJ0X2F1dG9fdXBkYXRlKGZiZGV2LCBkc3NkZXYpOworCQkJZC0+dXBkYXRlX21vZGUgPSBPTUFQRkJfQVVUT19VUERBVEU7CisJCX0gZWxzZSB7CisJCQlkLT51cGRhdGVfbW9kZSA9IE9NQVBGQl9NQU5VQUxfVVBEQVRFOworCQl9CisKIAkJaWYgKGRzc2Rydi0+ZW5hYmxlX3RlKSB7CiAJCQlyID0gZHNzZHJ2LT5lbmFibGVfdGUoZHNzZGV2LCAxKTsKIAkJCWlmIChyKSB7CkBAIC0yMjAxLDE2ICsyMzEyLDYgQEAKIAkJCX0KIAkJfQogCi0JCWlmIChkc3NkcnYtPnNldF91cGRhdGVfbW9kZSkgewotCQkJciA9IGRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKGRzc2RldiwKLQkJCQkJT01BUF9EU1NfVVBEQVRFX01BTlVBTCk7Ci0JCQlpZiAocikgewotCQkJCWRldl9lcnIoZmJkZXYtPmRldiwKLQkJCQkJCSJGYWlsZWQgdG8gc2V0IHVwZGF0ZSBtb2RlXG4iKTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfQotCiAJCWRzc2Rydi0+Z2V0X3Jlc29sdXRpb24oZHNzZGV2LCAmdywgJmgpOwogCQlyID0gZHNzZHJ2LT51cGRhdGUoZHNzZGV2LCAwLCAwLCB3LCBoKTsKIAkJaWYgKHIpIHsKQEAgLTIyMTksMTUgKzIzMjAsNyBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoZHNzZHJ2LT5zZXRfdXBkYXRlX21vZGUpIHsKLQkJCXIgPSBkc3NkcnYtPnNldF91cGRhdGVfbW9kZShkc3NkZXYsCi0JCQkJCU9NQVBfRFNTX1VQREFURV9BVVRPKTsKLQkJCWlmIChyKSB7Ci0JCQkJZGV2X2VycihmYmRldi0+ZGV2LAotCQkJCQkJIkZhaWxlZCB0byBzZXQgdXBkYXRlIG1vZGVcbiIpOwotCQkJCXJldHVybiByOwotCQkJfQotCQl9CisJCWQtPnVwZGF0ZV9tb2RlID0gT01BUEZCX0FVVE9fVVBEQVRFOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjI3NSw2ICsyMzY4LDggQEAKIAlmYmRldi0+bnVtX2Rpc3BsYXlzID0gMDsKIAlkc3NkZXYgPSBOVUxMOwogCWZvcl9lYWNoX2Rzc19kZXYoZHNzZGV2KSB7CisJCXN0cnVjdCBvbWFwZmJfZGlzcGxheV9kYXRhICpkOworCiAJCW9tYXBfZHNzX2dldF9kZXZpY2UoZHNzZGV2KTsKIAogCQlpZiAoIWRzc2Rldi0+ZHJpdmVyKSB7CkBAIC0yMjgyLDcgKzIzNzcsMTIgQEAKIAkJCXIgPSAtRU5PREVWOwogCQl9CiAKLQkJZmJkZXYtPmRpc3BsYXlzW2ZiZGV2LT5udW1fZGlzcGxheXMrK10gPSBkc3NkZXY7CisJCWQgPSAmZmJkZXYtPmRpc3BsYXlzW2ZiZGV2LT5udW1fZGlzcGxheXMrK107CisJCWQtPmRzc2RldiA9IGRzc2RldjsKKwkJaWYgKGRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpCisJCQlkLT51cGRhdGVfbW9kZSA9IE9NQVBGQl9NQU5VQUxfVVBEQVRFOworCQllbHNlCisJCQlkLT51cGRhdGVfbW9kZSA9IE9NQVBGQl9BVVRPX1VQREFURTsKIAl9CiAKIAlpZiAocikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1zeXNmcy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLXN5c2ZzLmMKaW5kZXggMmY1ZTgxNy4uMTUzYmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLXN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLXN5c2ZzLmMKQEAgLTUxOCw2ICs1MTgsMzkgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcFxuIiwgb2ZiaS0+cmVnaW9uLT52YWRkcik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfdXBkX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwllbnVtIG9tYXBmYl91cGRhdGVfbW9kZSBtb2RlOworCWludCByOworCisJciA9IG9tYXBmYl9nZXRfdXBkYXRlX21vZGUoZmJpLCAmbW9kZSk7CisKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgKHVuc2lnbmVkKW1vZGUpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV91cGRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbW9kZTsKKwlpbnQgcjsKKworCXIgPSBrc3RydG91aW50KGJ1ZiwgMCwgJm1vZGUpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSBvbWFwZmJfc2V0X3VwZGF0ZV9tb2RlKGZiaSwgbW9kZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgb21hcGZiX2F0dHJzW10gPSB7CiAJX19BVFRSKHJvdGF0ZV90eXBlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19yb3RhdGVfdHlwZSwKIAkJCXN0b3JlX3JvdGF0ZV90eXBlKSwKQEAgLTUyOCw2ICs1NjEsNyBAQAogCQkJc3RvcmVfb3ZlcmxheXNfcm90YXRlKSwKIAlfX0FUVFIocGh5c19hZGRyLCBTX0lSVUdPLCBzaG93X3BoeXMsIE5VTEwpLAogCV9fQVRUUih2aXJ0X2FkZHIsIFNfSVJVR08sIHNob3dfdmlydCwgTlVMTCksCisJX19BVFRSKHVwZGF0ZV9tb2RlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd191cGRfbW9kZSwgc3RvcmVfdXBkX21vZGUpLAogfTsKIAogaW50IG9tYXBmYl9jcmVhdGVfc3lzZnMoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi5oIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLmgKaW5kZXggYWExYjFkOS4uZmRmMGVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLmgKQEAgLTczLDYgKzczLDE1IEBACiAJYm9vbCBtaXJyb3I7CiB9OwogCitzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfZGF0YSB7CisJc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldjsKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXY7CisJdTggYnBwX292ZXJyaWRlOworCWVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIHVwZGF0ZV9tb2RlOworCWJvb2wgYXV0b191cGRhdGVfd29ya19lbmFibGVkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgYXV0b191cGRhdGVfd29yazsKK307CisKIHN0cnVjdCBvbWFwZmIyX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBtdXRleCAgbXR4OwpAQCAtODYsMTcgKzk1LDEzIEBACiAJc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiByZWdpb25zWzEwXTsKIAogCXVuc2lnbmVkIG51bV9kaXNwbGF5czsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5c1sxMF07CisJc3RydWN0IG9tYXBmYl9kaXNwbGF5X2RhdGEgZGlzcGxheXNbMTBdOwogCXVuc2lnbmVkIG51bV9vdmVybGF5czsKIAlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmVybGF5c1sxMF07CiAJdW5zaWduZWQgbnVtX21hbmFnZXJzOwogCXN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWFuYWdlcnNbMTBdOwogCi0JdW5zaWduZWQgbnVtX2JwcF9vdmVycmlkZXM7Ci0Jc3RydWN0IHsKLQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2OwotCQl1OCBicHA7Ci0JfSBicHBfb3ZlcnJpZGVzWzEwXTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXV0b191cGRhdGVfd3E7CiB9OwogCiBzdHJ1Y3Qgb21hcGZiX2NvbG9ybW9kZSB7CkBAIC0xMjgsNiArMTMzLDEzIEBACiBpbnQgb21hcGZiX3NldHVwX292ZXJsYXkoc3RydWN0IGZiX2luZm8gKmZiaSwgc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsLAogCQl1MTYgcG9zeCwgdTE2IHBvc3ksIHUxNiBvdXR3LCB1MTYgb3V0aCk7CiAKK3ZvaWQgb21hcGZiX3N0YXJ0X2F1dG9fdXBkYXRlKHN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYsCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXkpOwordm9pZCBvbWFwZmJfc3RvcF9hdXRvX3VwZGF0ZShzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LAorCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5KTsKK2ludCBvbWFwZmJfZ2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBmYl9pbmZvICpmYmksIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlICptb2RlKTsKK2ludCBvbWFwZmJfc2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBmYl9pbmZvICpmYmksIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIG1vZGUpOworCiAvKiBmaW5kIHRoZSBkaXNwbGF5IGNvbm5lY3RlZCB0byB0aGlzIGZiLCBpZiBhbnkgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZmIyZGlzcGxheShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewpAQCAtMTQzLDYgKzE1NSwxOSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvbWFwZmJfZGlzcGxheV9kYXRhICpnZXRfZGlzcGxheV9kYXRhKAorCQlzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmJkZXYtPm51bV9kaXNwbGF5czsgKytpKQorCQlpZiAoZmJkZXYtPmRpc3BsYXlzW2ldLmRzc2RldiA9PSBkc3NkZXYpCisJCQlyZXR1cm4gJmZiZGV2LT5kaXNwbGF5c1tpXTsKKworCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCUJVRygpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcGZiX2xvY2soc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldikKIHsKIAltdXRleF9sb2NrKCZmYmRldi0+bXR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmggYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi5oCmluZGV4IDMyNTQ5ZDEuLmRjYWFiOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLmgKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmIuaApAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIFMzX1NBVkFHRTNEX1NFUklFUyhjaGlwKSAgKChjaGlwPj1TM19TQVZBR0UzRCkgJiYgKGNoaXA8PVMzX1NBVkFHRV9NWCkpCiAKLSNkZWZpbmUgUzNfU0FWQUdFNF9TRVJJRVMoY2hpcCkgICAoKGNoaXA+PVMzX1NBVkFHRTQpIHx8IChjaGlwPD1TM19QUk9TQVZBR0VERFIpKQorI2RlZmluZSBTM19TQVZBR0U0X1NFUklFUyhjaGlwKSAgICgoY2hpcD49UzNfU0FWQUdFNCkgJiYgKGNoaXA8PVMzX1BST1NBVkFHRUREUikpCiAKICNkZWZpbmUgUzNfU0FWQUdFX01PQklMRV9TRVJJRVMoY2hpcCkgICgoY2hpcD09UzNfU0FWQUdFX01YKSB8fCAoY2hpcD09UzNfU1VQRVJTQVZBR0UpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMKaW5kZXggMDJiZjdiZi4uYjVhYmFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ5MC5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0OTAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglkc2NvcmUuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEwMjQsNSArMTAyNCw1IEBACiBtb2R1bGVfZXhpdChkc19maW5pKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKK01PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRFMyNDkwIFVTQiA8LT4gVzEgYnVzIG1hc3RlciBkcml2ZXIgKERTOTQ5MCopIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvbWF0cm94X3cxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvbWF0cm94X3cxLmMKaW5kZXggMzM0ZDFjYy4uZjY2N2MyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL21hdHJveF93MS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9tYXRyb3hfdzEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKgltYXRyb3hfdzEuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICIuLi93MV9sb2cuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKK01PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0cmFuc3BvcnQoRGFsbGFzIDEtd2lyZSBwcnRvY29sKSBvdmVyIFZHQSBEREMobWF0cm94IGdwaW8pLiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWF0cm94X3cxX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNDA4LmMgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MDguYwppbmRleCBjMzc3ODE4Li43YzhjZGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MDguYworKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MDguYwpAQCAtMzczLDcgKzM3Myw3IEBACiBzdGF0aWMgdm9pZCB3MV9mMjlfcmVtb3ZlX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCiB7CiAJaW50IGk7Ci0JZm9yIChpID0gTkJfU1lTRlNfQklOX0ZJTEVTOyBpIDw9IDA7IC0taSkKKwlmb3IgKGkgPSBOQl9TWVNGU19CSU5fRklMRVMgLSAxOyBpID49IDA7IC0taSkKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosCiAJCQkmKHcxX2YyOV9zeXNmc19iaW5fZmlsZXNbaV0pKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3NtZW0uYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3NtZW0uYwppbmRleCBjYzhjMDJlLi44NDY1NTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9zbWVtLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfc21lbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCXcxX3NtZW0uYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICIuLi93MV9mYW1pbHkuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKK01PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciAxLXdpcmUgRGFsbGFzIG5ldHdvcmsgcHJvdG9jb2wsIDY0Yml0IG1lbW9yeSBmYW1pbHkuIik7CiAKIHN0YXRpYyBzdHJ1Y3QgdzFfZmFtaWx5IHcxX3NtZW1fZmFtaWx5XzAxID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKaW5kZXggNDAyOTI4Yi4uYTFlZjliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYworKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCXcxX3RoZXJtLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiLi4vdzFfZmFtaWx5LmgiCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Iik7CitNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgMS13aXJlIERhbGxhcyBuZXR3b3JrIHByb3RvY29sLCB0ZW1wZXJhdHVyZSBmYW1pbHkuIik7CiAKIC8qIEFsbG93IHRoZSBzdHJvbmcgcHVsbHVwIHRvIGJlIGRpc2FibGVkLCBidXQgZGVmYXVsdCB0byBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MS5jIGIvZHJpdmVycy93MS93MS5jCmluZGV4IDZjMTM2YzEuLmMzNzQ5NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzEuYworKysgYi9kcml2ZXJzL3cxL3cxLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJdzEuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJ3MV9uZXRsaW5rLmgiCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Iik7CitNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgMS13aXJlIERhbGxhcyBuZXR3b3JrIHByb3RvY29sLiIpOwogCiBzdGF0aWMgaW50IHcxX3RpbWVvdXQgPSAxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuaCBiL2RyaXZlcnMvdzEvdzEuaAppbmRleCAxY2UyM2ZjLi40ZDAxMmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmgKKysrIGIvZHJpdmVycy93MS93MS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCXcxLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jIGIvZHJpdmVycy93MS93MV9mYW1pbHkuYwppbmRleCA0YTA5OTA0Li42MzM1OTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJdzFfZmFtaWx5LmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oIGIvZHJpdmVycy93MS93MV9mYW1pbHkuaAppbmRleCA5OGExYWMwLi40OTBjZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICoJdzFfZmFtaWx5LmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ludC5jIGIvZHJpdmVycy93MS93MV9pbnQuYwppbmRleCBiNTBiZTNmLi5kMjIwYmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ludC5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW50LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJdzFfaW50LmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ludC5oIGIvZHJpdmVycy93MS93MV9pbnQuaAppbmRleCA0Mjc0MDgyLi4yYWQ3ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ludC5oCisrKyBiL2RyaXZlcnMvdzEvdzFfaW50LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICoJdzFfaW50LmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2lvLmMgYi9kcml2ZXJzL3cxL3cxX2lvLmMKaW5kZXggOGU4YjY0Yy4uNzY1YjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9pby5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW8uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKgl3MV9pby5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgogICoKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9sb2cuaCBiL2RyaXZlcnMvdzEvdzFfbG9nLmgKaW5kZXggZTZhYjdjZi4uOWM3YmQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9sb2cuaAorKysgYi9kcml2ZXJzL3cxL3cxX2xvZy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCXcxX2xvZy5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0IEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgogICoKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9uZXRsaW5rLmMgYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYwppbmRleCA1NWFhYmQ5Li40MDc4OGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYworKysgYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB3MV9uZXRsaW5rLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwMyBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX25ldGxpbmsuaCBiL2RyaXZlcnMvdzEvdzFfbmV0bGluay5oCmluZGV4IDI3ZTk1MGYuLmIwOTIyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfbmV0bGluay5oCisrKyBiL2RyaXZlcnMvdzEvdzFfbmV0bGluay5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHcxX25ldGxpbmsuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQ29weXJpZ2h0IChjKSAyMDAzIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KICAqCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBmNDQxNzI2Li44NmIwNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0zNiw5ICszNiw2IEBACiAJICBhbmQgZ2l2ZXMgdGhlbSB0aGUgL2Rldi93YXRjaGRvZyBpbnRlcmZhY2UgKGFuZCBsYXRlciBhbHNvIHRoZQogCSAgc3lzZnMgaW50ZXJmYWNlKS4KIAotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCi0JICBiZSBjYWxsZWQgd2F0Y2hkb2cuCi0KIGNvbmZpZyBXQVRDSERPR19OT1dBWU9VVAogCWJvb2wgIkRpc2FibGUgd2F0Y2hkb2cgc2h1dGRvd24gb24gY2xvc2UiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9udl90Y28uYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbnZfdGNvLmMKaW5kZXggYWZhNzhhNS4uODA5ZjQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9udl90Y28uYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL252X3Rjby5jCkBAIC00NTgsNyArNDU4LDE1IEBACiAKIHN0YXRpYyB2b2lkIG52X3Rjb19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJdTMyIHZhbDsKKwogCXRjb190aW1lcl9zdG9wKCk7CisKKwkvKiBTb21lIEJJT1NlcyBmYWlsIHRoZSBQT1NUIChvbmNlKSBpZiB0aGUgTk9fUkVCT09UIGZsYWcgaXMgbm90CisJICogdW5zZXQgZHVyaW5nIHNodXRkb3duLiAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0Y29fcGNpLCBNQ1A1MV9TTUJVU19TRVRVUF9CLCAmdmFsKTsKKwl2YWwgJj0gfk1DUDUxX1NNQlVTX1NFVFVQX0JfVENPX1JFQk9PVDsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRjb19wY2ksIE1DUDUxX1NNQlVTX1NFVFVQX0IsIHZhbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG52X3Rjb19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKaW5kZXggZGI4NGYyMy4uYTI2N2RjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2h3ZHQuYwpAQCAtNjQsNyArNjQsNyBAQAogICogbWlzc2VzIGl0cyBkZWFkbGluZSwgdGhlIGtlcm5lbCB0aW1lciB3aWxsIGFsbG93IHRoZSBXRFQgdG8gb3ZlcmZsb3cuCiAgKi8KIHN0YXRpYyBpbnQgY2xvY2tfZGl2aXNpb25fcmF0aW8gPSBXVENTUl9DS1NfNDA5NjsKLSNkZWZpbmUgbmV4dF9waW5nX3BlcmlvZChja3MpCW1zZWNzX3RvX2ppZmZpZXMoY2tzIC0gNCkKKyNkZWZpbmUgbmV4dF9waW5nX3BlcmlvZChja3MpCShqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhja3MgLSA0KSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIHNoX3dkdF9pbmZvOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoX3dkdF9kZXY7CmRpZmYgLS1naXQgYS9mcy85cC9hY2wuYyBiL2ZzLzlwL2FjbC5jCmluZGV4IGU5Y2I1N2YuLjlhMWQ0MjYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2FjbC5jCisrKyBiL2ZzLzlwL2FjbC5jCkBAIC0xODIsMTEgKzE4MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdjlmc19hY2xfbW9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90ICptb2RlcCwKK2ludCB2OWZzX2FjbF9tb2RlKHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90ICptb2RlcCwKIAkJICBzdHJ1Y3QgcG9zaXhfYWNsICoqZHBhY2wsIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQogewogCWludCByZXR2YWwgPSAwOwotCW1vZGVfdCBtb2RlID0gKm1vZGVwOworCXVtb2RlX3QgbW9kZSA9ICptb2RlcDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOwogCiAJaWYgKCFTX0lTTE5LKG1vZGUpKSB7CkBAIC0zMTksNyArMzE5LDcgQEAKIAljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKIAkJbmFtZSA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1M7CiAJCWlmIChhY2wpIHsKLQkJCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJCQlyZXR2YWwgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKIAkJCWlmIChyZXR2YWwgPCAwKQogCQkJCWdvdG8gZXJyX291dDsKZGlmZiAtLWdpdCBhL2ZzLzlwL2FjbC5oIGIvZnMvOXAvYWNsLmgKaW5kZXggZGRiN2FlMS4uNTU5NTU2NCAxMDA2NDQKLS0tIGEvZnMvOXAvYWNsLmgKKysrIGIvZnMvOXAvYWNsLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBpbnQgdjlmc19hY2xfY2htb2Qoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBpbnQgdjlmc19zZXRfY3JlYXRlX2FjbChzdHJ1Y3QgZGVudHJ5ICosCiAJCQkgICAgICAgc3RydWN0IHBvc2l4X2FjbCAqKiwgc3RydWN0IHBvc2l4X2FjbCAqKik7Ci1leHRlcm4gaW50IHY5ZnNfYWNsX21vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCAqbW9kZXAsCitleHRlcm4gaW50IHY5ZnNfYWNsX21vZGUoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgKm1vZGVwLAogCQkJIHN0cnVjdCBwb3NpeF9hY2wgKipkcGFjbCwgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpOwogI2Vsc2UKICNkZWZpbmUgdjlmc19pb3BfZ2V0X2FjbCBOVUxMCkBAIC0zOCw3ICszOCw3IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCB2OWZzX2FjbF9tb2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBtb2RlX3QgKm1vZGVwLAorc3RhdGljIGlubGluZSBpbnQgdjlmc19hY2xfbW9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCAqbW9kZXAsCiAJCQkJc3RydWN0IHBvc2l4X2FjbCAqKmRwYWNsLAogCQkJCXN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQogewpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggNDZjZTM1Ny4uNDEwZmZkNiAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC01NCw5ICs1NCw5IEBACiAKIHN0cnVjdCBpbm9kZSAqdjlmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHZvaWQgdjlmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7CitzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBkZXZfdCk7CiBpbnQgdjlmc19pbml0X2lub2RlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsCi0JCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSk7CisJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSwgZGV2X3QpOwogdm9pZCB2OWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW5vX3Qgdjlmc19xaWQyaW5vKHN0cnVjdCBwOV9xaWQgKnFpZCk7CiB2b2lkIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKQEAgLTgzLDQgKzgzLDYgQEAKIAl2OWlub2RlLT5jYWNoZV92YWxpZGl0eSB8PSBWOUZTX0lOT19JTlZBTElEX0FUVFI7CiAJcmV0dXJuOwogfQorCitpbnQgdjlmc19vcGVuX3RvX2RvdGxfZmxhZ3MoaW50IGZsYWdzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2ZpbGUuYyBiL2ZzLzlwL3Zmc19maWxlLmMKaW5kZXggM2MxNzNmYy4uNjI4NTdhOCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2ZpbGUuYworKysgYi9mcy85cC92ZnNfZmlsZS5jCkBAIC02NSw3ICs2NSw3IEBACiAJdjlpbm9kZSA9IFY5RlNfSShpbm9kZSk7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlpZiAodjlmc19wcm90b19kb3RsKHY5c2VzKSkKLQkJb21vZGUgPSBmaWxlLT5mX2ZsYWdzOworCQlvbW9kZSA9IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCWVsc2UKIAkJb21vZGUgPSB2OWZzX3VmbGFnczJvbW9kZShmaWxlLT5mX2ZsYWdzLAogCQkJCQl2OWZzX3Byb3RvX2RvdHUodjlzZXMpKTsKQEAgLTE2OSw3ICsxNjksMTggQEAKIAogCS8qIGNvbnZlcnQgcG9zaXggbG9jayB0byBwOSB0bG9jayBhcmdzICovCiAJbWVtc2V0KCZmbG9jaywgMCwgc2l6ZW9mKGZsb2NrKSk7Ci0JZmxvY2sudHlwZSA9IGZsLT5mbF90eXBlOworCS8qIG1hcCB0aGUgbG9jayB0eXBlICovCisJc3dpdGNoIChmbC0+ZmxfdHlwZSkgeworCWNhc2UgRl9SRExDSzoKKwkJZmxvY2sudHlwZSA9IFA5X0xPQ0tfVFlQRV9SRExDSzsKKwkJYnJlYWs7CisJY2FzZSBGX1dSTENLOgorCQlmbG9jay50eXBlID0gUDlfTE9DS19UWVBFX1dSTENLOworCQlicmVhazsKKwljYXNlIEZfVU5MQ0s6CisJCWZsb2NrLnR5cGUgPSBQOV9MT0NLX1RZUEVfVU5MQ0s7CisJCWJyZWFrOworCX0KIAlmbG9jay5zdGFydCA9IGZsLT5mbF9zdGFydDsKIAlpZiAoZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYKQogCQlmbG9jay5sZW5ndGggPSAwOwpAQCAtMjQ1LDcgKzI1Niw3IEBACiAKIAkvKiBjb252ZXJ0IHBvc2l4IGxvY2sgdG8gcDkgdGdldGxvY2sgYXJncyAqLwogCW1lbXNldCgmZ2xvY2ssIDAsIHNpemVvZihnbG9jaykpOwotCWdsb2NrLnR5cGUgPSBmbC0+ZmxfdHlwZTsKKwlnbG9jay50eXBlICA9IFA5X0xPQ0tfVFlQRV9VTkxDSzsKIAlnbG9jay5zdGFydCA9IGZsLT5mbF9zdGFydDsKIAlpZiAoZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYKQogCQlnbG9jay5sZW5ndGggPSAwOwpAQCAtMjU3LDE3ICsyNjgsMjYgQEAKIAlyZXMgPSBwOV9jbGllbnRfZ2V0bG9ja19kb3RsKGZpZCwgJmdsb2NrKTsKIAlpZiAocmVzIDwgMCkKIAkJcmV0dXJuIHJlczsKLQlpZiAoZ2xvY2sudHlwZSAhPSBGX1VOTENLKSB7Ci0JCWZsLT5mbF90eXBlID0gZ2xvY2sudHlwZTsKKwkvKiBtYXAgOXAgbG9jayB0eXBlIHRvIG9zIGxvY2sgdHlwZSAqLworCXN3aXRjaCAoZ2xvY2sudHlwZSkgeworCWNhc2UgUDlfTE9DS19UWVBFX1JETENLOgorCQlmbC0+ZmxfdHlwZSA9IEZfUkRMQ0s7CisJCWJyZWFrOworCWNhc2UgUDlfTE9DS19UWVBFX1dSTENLOgorCQlmbC0+ZmxfdHlwZSA9IEZfV1JMQ0s7CisJCWJyZWFrOworCWNhc2UgUDlfTE9DS19UWVBFX1VOTENLOgorCQlmbC0+ZmxfdHlwZSA9IEZfVU5MQ0s7CisJCWJyZWFrOworCX0KKwlpZiAoZ2xvY2sudHlwZSAhPSBQOV9MT0NLX1RZUEVfVU5MQ0spIHsKIAkJZmwtPmZsX3N0YXJ0ID0gZ2xvY2suc3RhcnQ7CiAJCWlmIChnbG9jay5sZW5ndGggPT0gMCkKIAkJCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwogCQllbHNlCiAJCQlmbC0+ZmxfZW5kID0gZ2xvY2suc3RhcnQgKyBnbG9jay5sZW5ndGggLSAxOwogCQlmbC0+ZmxfcGlkID0gZ2xvY2sucHJvY19pZDsKLQl9IGVsc2UKLQkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwotCisJfQogCXJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggOGJiNTUwNy4uZTNjMDNkYiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTk1LDE1ICs5NSwxOCBAQAogLyoqCiAgKiBwOW1vZGUydW5peG1vZGUtIGNvbnZlcnQgcGxhbjkgbW9kZSBiaXRzIHRvIHVuaXggbW9kZSBiaXRzCiAgKiBAdjlzZXM6IHY5ZnMgc2Vzc2lvbiBpbmZvcm1hdGlvbgotICogQG1vZGU6IG1vZGUgdG8gY29udmVydAorICogQHN0YXQ6IHA5X3dzdGF0IGZyb20gd2hpY2ggbW9kZSBuZWVkIHRvIGJlIGRlcml2ZWQKKyAqIEByZGV2OiBtYWpvciBudW1iZXIsIG1pbm9yIG51bWJlciBpbiBjYXNlIG9mIGRldmljZSBmaWxlcy4KICAqCiAgKi8KLQotc3RhdGljIGludCBwOW1vZGUydW5peG1vZGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgaW50IG1vZGUpCitzdGF0aWMgaW50IHA5bW9kZTJ1bml4bW9kZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLAorCQkJICAgc3RydWN0IHA5X3dzdGF0ICpzdGF0LCBkZXZfdCAqcmRldikKIHsKIAlpbnQgcmVzOworCWludCBtb2RlID0gc3RhdC0+bW9kZTsKIAotCXJlcyA9IG1vZGUgJiAwNzc3OworCXJlcyA9IG1vZGUgJiBTX0lBTExVR087CisJKnJkZXYgPSAwOwogCiAJaWYgKChtb2RlICYgUDlfRE1ESVIpID09IFA5X0RNRElSKQogCQlyZXMgfD0gU19JRkRJUjsKQEAgLTExNiw5ICsxMTksMjYgQEAKIAkJICYmICh2OXNlcy0+bm9kZXYgPT0gMCkpCiAJCXJlcyB8PSBTX0lGSUZPOwogCWVsc2UgaWYgKChtb2RlICYgUDlfRE1ERVZJQ0UpICYmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKQotCQkgJiYgKHY5c2VzLT5ub2RldiA9PSAwKSkKLQkJcmVzIHw9IFNfSUZCTEs7Ci0JZWxzZQorCQkgJiYgKHY5c2VzLT5ub2RldiA9PSAwKSkgeworCQljaGFyIHR5cGUgPSAwLCBleHRbMzJdOworCQlpbnQgbWFqb3IgPSAtMSwgbWlub3IgPSAtMTsKKworCQlzdHJuY3B5KGV4dCwgc3RhdC0+ZXh0ZW5zaW9uLCBzaXplb2YoZXh0KSk7CisJCXNzY2FuZihleHQsICIlYyAldSAldSIsICZ0eXBlLCAmbWFqb3IsICZtaW5vcik7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlICdjJzoKKwkJCXJlcyB8PSBTX0lGQ0hSOworCQkJYnJlYWs7CisJCWNhc2UgJ2InOgorCQkJcmVzIHw9IFNfSUZCTEs7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCisJCQkJIlVua25vd24gc3BlY2lhbCB0eXBlICVjICVzXG4iLCB0eXBlLAorCQkJCXN0YXQtPmV4dGVuc2lvbik7CisJCX07CisJCSpyZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwl9IGVsc2UKIAkJcmVzIHw9IFNfSUZSRUc7CiAKIAlpZiAodjlmc19wcm90b19kb3R1KHY5c2VzKSkgewpAQCAtMTMxLDcgKzE1MSw2IEBACiAJCWlmICgobW9kZSAmIFA5X0RNU0VUVlRYKSA9PSBQOV9ETVNFVFZUWCkKIAkJCXJlcyB8PSBTX0lTVlRYOwogCX0KLQogCXJldHVybiByZXM7CiB9CiAKQEAgLTI0MiwxMyArMjYxLDEzIEBACiB9CiAKIGludCB2OWZzX2luaXRfaW5vZGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywKLQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtb2RlKQorCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsIGRldl90IHJkZXYpCiB7CiAJaW50IGVyciA9IDA7CiAKIAlpbm9kZV9pbml0X293bmVyKGlub2RlLCBOVUxMLCBtb2RlKTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwotCWlub2RlLT5pX3JkZXYgPSAwOworCWlub2RlLT5pX3JkZXYgPSByZGV2OwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZ2OWZzX2FkZHJfb3BlcmF0aW9uczsKIApAQCAtMzM1LDcgKzM1NCw3IEBACiAgKgogICovCiAKLXN0cnVjdCBpbm9kZSAqdjlmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUpCitzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBkZXZfdCByZGV2KQogewogCWludCBlcnI7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTM0OCw3ICszNjcsNyBAQAogCQlQOV9FUFJJTlRLKEtFUk5fV0FSTklORywgIlByb2JsZW0gYWxsb2NhdGluZyBpbm9kZVxuIik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KLQllcnIgPSB2OWZzX2luaXRfaW5vZGUodjlzZXMsIGlub2RlLCBtb2RlKTsKKwllcnIgPSB2OWZzX2luaXRfaW5vZGUodjlzZXMsIGlub2RlLCBtb2RlLCByZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwpAQCAtNDM1LDExICs0NTQsMTIgQEAKIHN0YXRpYyBpbnQgdjlmc190ZXN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHVtb2RlOworCWRldl90IHJkZXY7CiAJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOwogCXN0cnVjdCBwOV93c3RhdCAqc3QgPSAoc3RydWN0IHA5X3dzdGF0ICopZGF0YTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhpbm9kZSk7CiAKLQl1bW9kZSA9IHA5bW9kZTJ1bml4bW9kZSh2OXNlcywgc3QtPm1vZGUpOworCXVtb2RlID0gcDltb2RlMnVuaXhtb2RlKHY5c2VzLCBzdCwgJnJkZXYpOwogCS8qIGRvbid0IG1hdGNoIGlub2RlIG9mIGRpZmZlcmVudCB0eXBlICovCiAJaWYgKChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSAhPSAodW1vZGUgJiBTX0lGTVQpKQogCQlyZXR1cm4gMDsKQEAgLTQ3Myw2ICs0OTMsNyBAQAogCQkJCSAgIHN0cnVjdCBwOV93c3RhdCAqc3QsCiAJCQkJICAgaW50IG5ldykKIHsKKwlkZXZfdCByZGV2OwogCWludCByZXR2YWwsIHVtb2RlOwogCXVuc2lnbmVkIGxvbmcgaV9pbm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTQ5Niw4ICs1MTcsOCBAQAogCSAqIGxhdGVyLgogCSAqLwogCWlub2RlLT5pX2lubyA9IGlfaW5vOwotCXVtb2RlID0gcDltb2RlMnVuaXhtb2RlKHY5c2VzLCBzdC0+bW9kZSk7Ci0JcmV0dmFsID0gdjlmc19pbml0X2lub2RlKHY5c2VzLCBpbm9kZSwgdW1vZGUpOworCXVtb2RlID0gcDltb2RlMnVuaXhtb2RlKHY5c2VzLCBzdCwgJnJkZXYpOworCXJldHZhbCA9IHY5ZnNfaW5pdF9pbm9kZSh2OXNlcywgaW5vZGUsIHVtb2RlLCByZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycm9yOwogCkBAIC01MzIsNiArNTUzLDE5IEBACiB9CiAKIC8qKgorICogdjlmc19hdF90b19kb3RsX2ZsYWdzLSBjb252ZXJ0IExpbnV4IHNwZWNpZmljIEFUIGZsYWdzIHRvCisgKiBwbGFuIDkgQVQgZmxhZy4KKyAqIEBmbGFnczogZmxhZ3MgdG8gY29udmVydAorICovCitzdGF0aWMgaW50IHY5ZnNfYXRfdG9fZG90bF9mbGFncyhpbnQgZmxhZ3MpCit7CisJaW50IHJmbGFncyA9IDA7CisJaWYgKGZsYWdzICYgQVRfUkVNT1ZFRElSKQorCQlyZmxhZ3MgfD0gUDlfRE9UTF9BVF9SRU1PVkVESVI7CisJcmV0dXJuIHJmbGFnczsKK30KKworLyoqCiAgKiB2OWZzX3JlbW92ZSAtIGhlbHBlciBmdW5jdGlvbiB0byByZW1vdmUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBkZWxldGVkCiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZApAQCAtNTU4LDcgKzU5Miw4IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCWlmICh2OWZzX3Byb3RvX2RvdGwodjlzZXMpKQotCQlyZXR2YWwgPSBwOV9jbGllbnRfdW5saW5rYXQoZGZpZCwgZGVudHJ5LT5kX25hbWUubmFtZSwgZmxhZ3MpOworCQlyZXR2YWwgPSBwOV9jbGllbnRfdW5saW5rYXQoZGZpZCwgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCQkJICAgIHY5ZnNfYXRfdG9fZG90bF9mbGFncyhmbGFncykpOwogCWlmIChyZXR2YWwgPT0gLUVPUE5PVFNVUFApIHsKIAkJLyogVHJ5IHRoZSBvbmUgYmFzZWQgb24gcGF0aCAqLwogCQl2OWZpZCA9IHY5ZnNfZmlkX2Nsb25lKGRlbnRyeSk7CkBAIC02NDUsMTMgKzY4MCwxMSBAQAogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwotCisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gb2ZpZDsKLQogZXJyb3I6CiAJaWYgKG9maWQpCiAJCXA5X2NsaWVudF9jbHVuayhvZmlkKTsKQEAgLTc5Miw2ICs4MjUsNyBAQAogc3RydWN0IGRlbnRyeSAqdjlmc192ZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJICAgICAgc3RydWN0IG5hbWVpZGF0YSAqbmFtZWlkYXRhKQogeworCXN0cnVjdCBkZW50cnkgKnJlczsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJc3RydWN0IHA5X2ZpZCAqZGZpZCwgKmZpZDsKQEAgLTgyMywyMiArODU3LDM1IEBACiAKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9Ci0KLQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgd3JvbmcgaW5vZGUgZHVlIHRvIHBhcmFsbGVsCisJICogdW5saW5rLiBGb3IgY2FjaGVkIG1vZGUgY3JlYXRlIGNhbGxzIHJlcXVlc3QgZm9yIG5ldworCSAqIGlub2RlLiBCdXQgd2l0aCBjYWNoZSBkaXNhYmxlZCwgbG9va3VwIHNob3VsZCBkbyB0aGlzLgorCSAqLworCWlmICh2OXNlcy0+Y2FjaGUpCisJCWlub2RlID0gdjlmc19nZXRfaW5vZGVfZnJvbV9maWQodjlzZXMsIGZpZCwgZGlyLT5pX3NiKTsKKwllbHNlCisJCWlub2RlID0gdjlmc19nZXRfbmV3X2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcmVzdWx0ID0gUFRSX0VSUihpbm9kZSk7CiAJCWlub2RlID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9Ci0KIAlyZXN1bHQgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX2lwdXQ7Ci0KIGluc3Rfb3V0OgotCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCXJldHVybiBOVUxMOwotCisJLyoKKwkgKiBJZiB3ZSBoYWQgYSByZW5hbWUgb24gdGhlIHNlcnZlciBhbmQgYSBwYXJhbGxlbCBsb29rdXAKKwkgKiBmb3IgdGhlIG5ldyBuYW1lLCB0aGVuIG1ha2Ugc3VyZSB3ZSBpbnN0YW50aWF0ZSB3aXRoCisJICogdGhlIG5ldyBuYW1lLiBpZSBsb29rIHVwIGZvciBhL2IsIHdoaWxlIG9uIHNlcnZlciBzb21lYm9keQorCSAqIG1vdmVkIGIgdW5kZXIgayBhbmQgY2xpZW50IHBhcmFsbGVseSBkaWQgYSBsb29rdXAgZm9yCisJICogay9iLgorCSAqLworCXJlcyA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGRlbnRyeSwgaW5vZGUpOworCWlmICghSVNfRVJSKHJlcykpCisJCXJldHVybiByZXM7CisJcmVzdWx0ID0gUFRSX0VSUihyZXMpOwogZXJyb3JfaXB1dDoKIAlpcHV0KGlub2RlKTsKIGVycm9yOgpAQCAtMTAwMiw3ICsxMDQ5LDcgQEAKIAkJcmV0dXJuIFBUUl9FUlIoc3QpOwogCiAJdjlmc19zdGF0Mmlub2RlKHN0LCBkZW50cnktPmRfaW5vZGUsIGRlbnRyeS0+ZF9pbm9kZS0+aV9zYik7Ci0JCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKKwlnZW5lcmljX2ZpbGxhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgc3RhdCk7CiAKIAlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwpAQCAtMTA4Niw2ICsxMTMzLDcgQEAKIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKnN0YXQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKwltb2RlX3QgbW9kZTsKIAljaGFyIGV4dFszMl07CiAJY2hhciB0YWdfbmFtZVsxNF07CiAJdW5zaWduZWQgaW50IGlfbmxpbms7CkBAIC0xMTIxLDMxICsxMTY5LDkgQEAKIAkJCQlpbm9kZS0+aV9ubGluayA9IGlfbmxpbms7CiAJCX0KIAl9Ci0JaW5vZGUtPmlfbW9kZSA9IHA5bW9kZTJ1bml4bW9kZSh2OXNlcywgc3RhdC0+bW9kZSk7Ci0JaWYgKChTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB8fCAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSkpIHsKLQkJY2hhciB0eXBlID0gMDsKLQkJaW50IG1ham9yID0gLTE7Ci0JCWludCBtaW5vciA9IC0xOwotCi0JCXN0cm5jcHkoZXh0LCBzdGF0LT5leHRlbnNpb24sIHNpemVvZihleHQpKTsKLQkJc3NjYW5mKGV4dCwgIiVjICV1ICV1IiwgJnR5cGUsICZtYWpvciwgJm1pbm9yKTsKLQkJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgJ2MnOgotCQkJaW5vZGUtPmlfbW9kZSAmPSB+U19JRkJMSzsKLQkJCWlub2RlLT5pX21vZGUgfD0gU19JRkNIUjsKLQkJCWJyZWFrOwotCQljYXNlICdiJzoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkiVW5rbm93biBzcGVjaWFsIHR5cGUgJWMgJXNcbiIsIHR5cGUsCi0JCQkJc3RhdC0+ZXh0ZW5zaW9uKTsKLQkJfTsKLQkJaW5vZGUtPmlfcmRldiA9IE1LREVWKG1ham9yLCBtaW5vcik7Ci0JCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7Ci0JfSBlbHNlCi0JCWlub2RlLT5pX3JkZXYgPSAwOwotCisJbW9kZSA9IHN0YXQtPm1vZGUgJiBTX0lBTExVR087CisJbW9kZSB8PSBpbm9kZS0+aV9tb2RlICYgflNfSUFMTFVHTzsKKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAlpX3NpemVfd3JpdGUoaW5vZGUsIHN0YXQtPmxlbmd0aCk7CiAKIAkvKiBub3QgcmVhbCBudW1iZXIgb2YgYmxvY2tzLCBidXQgNTEyIGJ5dGUgb25lcyAuLi4gKi8KQEAgLTE0MTEsNiArMTQzNyw4IEBACiAKIGludCB2OWZzX3JlZnJlc2hfaW5vZGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWludCB1bW9kZTsKKwlkZXZfdCByZGV2OwogCWxvZmZfdCBpX3NpemU7CiAJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwpAQCAtMTQxOSw2ICsxNDQ3LDEyIEBACiAJc3QgPSBwOV9jbGllbnRfc3RhdChmaWQpOwogCWlmIChJU19FUlIoc3QpKQogCQlyZXR1cm4gUFRSX0VSUihzdCk7CisJLyoKKwkgKiBEb24ndCB1cGRhdGUgaW5vZGUgaWYgdGhlIGZpbGUgdHlwZSBpcyBkaWZmZXJlbnQKKwkgKi8KKwl1bW9kZSA9IHA5bW9kZTJ1bml4bW9kZSh2OXNlcywgc3QsICZyZGV2KTsKKwlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9ICh1bW9kZSAmIFNfSUZNVCkpCisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKgpAQCAtMTQzMCw2ICsxNDY0LDcgQEAKIAlpZiAodjlzZXMtPmNhY2hlKQogCQlpbm9kZS0+aV9zaXplID0gaV9zaXplOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK291dDoKIAlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKaW5kZXggOWEyNmRjZS4uYWRlZDc5ZiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYworKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0xNTMsNyArMTUzLDggQEAKIAkgKiBsYXRlci4KIAkgKi8KIAlpbm9kZS0+aV9pbm8gPSBpX2lubzsKLQlyZXR2YWwgPSB2OWZzX2luaXRfaW5vZGUodjlzZXMsIGlub2RlLCBzdC0+c3RfbW9kZSk7CisJcmV0dmFsID0gdjlmc19pbml0X2lub2RlKHY5c2VzLCBpbm9kZSwKKwkJCQkgc3QtPnN0X21vZGUsIG5ld19kZWNvZGVfZGV2KHN0LT5zdF9yZGV2KSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKIApAQCAtMTkwLDYgKzE5MSw1OCBAQAogCXJldHVybiBpbm9kZTsKIH0KIAorc3RydWN0IGRvdGxfb3BlbmZsYWdfbWFwIHsKKwlpbnQgb3Blbl9mbGFnOworCWludCBkb3RsX2ZsYWc7Cit9OworCitzdGF0aWMgaW50IHY5ZnNfbWFwcGVkX2RvdGxfZmxhZ3MoaW50IGZsYWdzKQoreworCWludCBpOworCWludCByZmxhZ3MgPSAwOworCXN0cnVjdCBkb3RsX29wZW5mbGFnX21hcCBkb3RsX29mbGFnX21hcFtdID0geworCQl7IE9fQ1JFQVQsCVA5X0RPVExfQ1JFQVRFIH0sCisJCXsgT19FWENMLAlQOV9ET1RMX0VYQ0wgfSwKKwkJeyBPX05PQ1RUWSwJUDlfRE9UTF9OT0NUVFkgfSwKKwkJeyBPX1RSVU5DLAlQOV9ET1RMX1RSVU5DIH0sCisJCXsgT19BUFBFTkQsCVA5X0RPVExfQVBQRU5EIH0sCisJCXsgT19OT05CTE9DSywJUDlfRE9UTF9OT05CTE9DSyB9LAorCQl7IE9fRFNZTkMsCVA5X0RPVExfRFNZTkMgfSwKKwkJeyBGQVNZTkMsCVA5X0RPVExfRkFTWU5DIH0sCisJCXsgT19ESVJFQ1QsCVA5X0RPVExfRElSRUNUIH0sCisJCXsgT19MQVJHRUZJTEUsCVA5X0RPVExfTEFSR0VGSUxFIH0sCisJCXsgT19ESVJFQ1RPUlksCVA5X0RPVExfRElSRUNUT1JZIH0sCisJCXsgT19OT0ZPTExPVywJUDlfRE9UTF9OT0ZPTExPVyB9LAorCQl7IE9fTk9BVElNRSwJUDlfRE9UTF9OT0FUSU1FIH0sCisJCXsgT19DTE9FWEVDLAlQOV9ET1RMX0NMT0VYRUMgfSwKKwkJeyBPX1NZTkMsCVA5X0RPVExfU1lOQ30sCisJfTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkb3RsX29mbGFnX21hcCk7IGkrKykgeworCQlpZiAoZmxhZ3MgJiBkb3RsX29mbGFnX21hcFtpXS5vcGVuX2ZsYWcpCisJCQlyZmxhZ3MgfD0gZG90bF9vZmxhZ19tYXBbaV0uZG90bF9mbGFnOworCX0KKwlyZXR1cm4gcmZsYWdzOworfQorCisvKioKKyAqIHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzLSBjb252ZXJ0IExpbnV4IHNwZWNpZmljIG9wZW4gZmxhZ3MgdG8KKyAqIHBsYW4gOSBvcGVuIGZsYWcuCisgKiBAZmxhZ3M6IGZsYWdzIHRvIGNvbnZlcnQKKyAqLworaW50IHY5ZnNfb3Blbl90b19kb3RsX2ZsYWdzKGludCBmbGFncykKK3sKKwlpbnQgcmZsYWdzID0gMDsKKworCS8qCisJICogV2UgaGF2ZSBzYW1lIGJpdHMgZm9yIFA5X0RPVExfUkVBRE9OTFksIFA5X0RPVExfV1JPTkxZCisJICogYW5kIFA5X0RPVExfTk9BQ0NFU1MKKwkgKi8KKwlyZmxhZ3MgfD0gZmxhZ3MgJiBPX0FDQ01PREU7CisJcmZsYWdzIHw9IHY5ZnNfbWFwcGVkX2RvdGxfZmxhZ3MoZmxhZ3MpOworCisJcmV0dXJuIHJmbGFnczsKK30KKwogLyoqCiAgKiB2OWZzX3Zmc19jcmVhdGVfZG90bCAtIFZGUyBob29rIHRvIGNyZWF0ZSBmaWxlcyBmb3IgOVAyMDAwLkwgcHJvdG9jb2wuCiAgKiBAZGlyOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkCkBAIC0yMDYsNyArMjU5LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlnaWRfdCBnaWQ7CiAJaW50IGZsYWdzOwotCW1vZGVfdCBtb2RlOworCXVtb2RlX3QgbW9kZTsKIAljaGFyICpuYW1lID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlzdHJ1Y3QgcDlfcWlkIHFpZDsKQEAgLTI1OCw3ICszMTEsOCBAQAogCQkJICAgIkZhaWxlZCB0byBnZXQgYWNsIHZhbHVlcyBpbiBjcmVhdCAlZFxuIiwgZXJyKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZXJyID0gcDlfY2xpZW50X2NyZWF0ZV9kb3RsKG9maWQsIG5hbWUsIGZsYWdzLCBtb2RlLCBnaWQsICZxaWQpOworCWVyciA9IHA5X2NsaWVudF9jcmVhdGVfZG90bChvZmlkLCBuYW1lLCB2OWZzX29wZW5fdG9fZG90bF9mbGFncyhmbGFncyksCisJCQkJICAgIG1vZGUsIGdpZCwgJnFpZCk7CiAJaWYgKGVyciA8IDApIHsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCiAJCQkJInA5X2NsaWVudF9vcGVuX2RvdGwgZmFpbGVkIGluIGNyZWF0ICVkXG4iLApAQCAtMjgxLDEwICszMzUsMTAgQEAKIAkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZSBjcmVhdGlvbiBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCiAJLyogTm93IHNldCB0aGUgQUNMIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlICovCiAJdjlmc19zZXRfY3JlYXRlX2FjbChkZW50cnksICZkYWNsLCAmcGFjbCk7CkBAIC0zNDgsNyArNDAyLDcgQEAKIAlzdHJ1Y3QgcDlfZmlkICpmaWQgPSBOVUxMLCAqZGZpZCA9IE5VTEw7CiAJZ2lkX3QgZ2lkOwogCWNoYXIgKm5hbWU7Ci0JbW9kZV90IG1vZGU7CisJdW1vZGVfdCBtb2RlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHA5X3FpZCBxaWQ7CiAJc3RydWN0IGRlbnRyeSAqZGlyX2RlbnRyeTsKQEAgLTQwMywxMCArNDU3LDEwIEBACiAJCQkJZXJyKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycm9yOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQlmaWQgPSBOVUxMOwogCX0gZWxzZSB7CiAJCS8qCkBAIC00MTQsNyArNDY4LDcgQEAKIAkJICogaW5vZGUgd2l0aCBzdGF0LiBXZSBuZWVkIHRvIGdldCBhbiBpbm9kZQogCQkgKiBzbyB0aGF0IHdlIGNhbiBzZXQgdGhlIGFjbCB3aXRoIGRlbnRyeQogCQkgKi8KLQkJaW5vZGUgPSB2OWZzX2dldF9pbm9kZShkaXItPmlfc2IsIG1vZGUpOworCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgMCk7CiAJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJCWdvdG8gZXJyb3I7CkBAIC01NDAsNiArNTk0LDcgQEAKIHZvaWQKIHY5ZnNfc3RhdDJpbm9kZV9kb3RsKHN0cnVjdCBwOV9zdGF0X2RvdGwgKnN0YXQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CisJbW9kZV90IG1vZGU7CiAJc3RydWN0IHY5ZnNfaW5vZGUgKnY5aW5vZGUgPSBWOUZTX0koaW5vZGUpOwogCiAJaWYgKChzdGF0LT5zdF9yZXN1bHRfbWFzayAmIFA5X1NUQVRTX0JBU0lDKSA9PSBQOV9TVEFUU19CQVNJQykgewpAQCAtNTUyLDExICs2MDcsMTAgQEAKIAkJaW5vZGUtPmlfdWlkID0gc3RhdC0+c3RfdWlkOwogCQlpbm9kZS0+aV9naWQgPSBzdGF0LT5zdF9naWQ7CiAJCWlub2RlLT5pX25saW5rID0gc3RhdC0+c3Rfbmxpbms7Ci0JCWlub2RlLT5pX21vZGUgPSBzdGF0LT5zdF9tb2RlOwotCQlpbm9kZS0+aV9yZGV2ID0gbmV3X2RlY29kZV9kZXYoc3RhdC0+c3RfcmRldik7CiAKLQkJaWYgKChTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB8fCAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSkpCi0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3JkZXYpOworCQltb2RlID0gc3RhdC0+c3RfbW9kZSAmIFNfSUFMTFVHTzsKKwkJbW9kZSB8PSBpbm9kZS0+aV9tb2RlICYgflNfSUFMTFVHTzsKKwkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBzdGF0LT5zdF9zaXplKTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gc3RhdC0+c3RfYmxvY2tzOwpAQCAtNjU3LDE0ICs3MTEsMTQgQEAKIAkJCQkJZXJyKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZXJyID0gdjlmc19maWRfYWRkKGRlbnRyeSwgZmlkKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycm9yOworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQlmaWQgPSBOVUxMOwogCX0gZWxzZSB7CiAJCS8qIE5vdCBpbiBjYWNoZWQgbW9kZS4gTm8gbmVlZCB0byBwb3B1bGF0ZSBpbm9kZSB3aXRoIHN0YXQgKi8KLQkJaW5vZGUgPSB2OWZzX2dldF9pbm9kZShkaXItPmlfc2IsIFNfSUZMTkspOworCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgU19JRkxOSywgMCk7CiAJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJCWdvdG8gZXJyb3I7CkBAIC03NTEsNyArODA1LDcgQEAKIAlpbnQgZXJyOwogCWdpZF90IGdpZDsKIAljaGFyICpuYW1lOwotCW1vZGVfdCBtb2RlOworCXVtb2RlX3QgbW9kZTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwOV9maWQgKmZpZCA9IE5VTEwsICpkZmlkID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtODEwLDE3ICs4NjQsMTcgQEAKIAkJCQllcnIpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQllcnIgPSB2OWZzX2ZpZF9hZGQoZGVudHJ5LCBmaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyb3I7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCWZpZCA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogTm90IGluIGNhY2hlZCBtb2RlLiBObyBuZWVkIHRvIHBvcHVsYXRlIGlub2RlIHdpdGggc3RhdC4KIAkJICogc29ja2V0IHN5c2NhbGwgcmV0dXJucyBhIGZkLCBzbyB3ZSBuZWVkIGluc3RhbnRpYXRlCiAJCSAqLwotCQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSk7CisJCWlub2RlID0gdjlmc19nZXRfaW5vZGUoZGlyLT5pX3NiLCBtb2RlLCByZGV2KTsKIAkJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQkJZ290byBlcnJvcjsKQEAgLTg4Niw2ICs5NDAsMTEgQEAKIAlzdCA9IHA5X2NsaWVudF9nZXRhdHRyX2RvdGwoZmlkLCBQOV9TVEFUU19BTEwpOwogCWlmIChJU19FUlIoc3QpKQogCQlyZXR1cm4gUFRSX0VSUihzdCk7CisJLyoKKwkgKiBEb24ndCB1cGRhdGUgaW5vZGUgaWYgdGhlIGZpbGUgdHlwZSBpcyBkaWZmZXJlbnQKKwkgKi8KKwlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9IChzdC0+c3RfbW9kZSAmIFNfSUZNVCkpCisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkvKgpAQCAtODk3LDYgKzk1Niw3IEBACiAJaWYgKHY5c2VzLT5jYWNoZSkKIAkJaW5vZGUtPmlfc2l6ZSA9IGlfc2l6ZTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CitvdXQ6CiAJa2ZyZWUoc3QpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBmZWVmNmNkLi5jNzAyNTFkIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJZWxzZQogCQlzYi0+c19kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKLQlpbm9kZSA9IHY5ZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgbW9kZSk7CisJaW5vZGUgPSB2OWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IG1vZGUsIDApOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIHJlbGVhc2Vfc2I7CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCAxOTg5MWFhLi45ZmUwYjM0IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTEyNywxNCArMTI3LDIxIEBACiAJc2VsZWN0IFRNUEZTX1hBVFRSCiAJc2VsZWN0IEdFTkVSSUNfQUNMCiAJaGVscAotCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgYWRkaXRpb25hbCBhY2Nlc3MgcmlnaHRzCisJICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZSwKKwkgIGFuZCB0aGlzIG9wdGlvbiBzZWxlY3RzIHN1cHBvcnQgZm9yIEFDTHMgc3BlY2lmaWNhbGx5IGZvciB0bXBmcworCSAgZmlsZXN5c3RlbXMuCisKKwkgIElmIHlvdSd2ZSBzZWxlY3RlZCBUTVBGUywgaXQncyBwb3NzaWJsZSB0aGF0IHlvdSdsbCBhbHNvIG5lZWQKKwkgIHRoaXMgb3B0aW9uIGFzIHRoZXJlIGFyZSBhIG51bWJlciBvZiBMaW51eCBkaXN0cm9zIHRoYXQgcmVxdWlyZQorCSAgUE9TSVggQUNMIHN1cHBvcnQgdW5kZXIgL2RldiBmb3IgY2VydGFpbiBmZWF0dXJlcyB0byB3b3JrIHByb3Blcmx5LgorCSAgRm9yIGV4YW1wbGUsIHNvbWUgZGlzdHJvcyBuZWVkIHRoaXMgZmVhdHVyZSBmb3IgQUxTQS1yZWxhdGVkIC9kZXYKKwkgIGZpbGVzIGZvciBzb3VuZCB0byB3b3JrIHByb3Blcmx5LiAgSW4gc2hvcnQsIGlmIHlvdSdyZSBub3Qgc3VyZSwKKwkgIHNheSBZLgogCiAJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKIAkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KIAotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOLgotCiBjb25maWcgVE1QRlNfWEFUVFIKIAlib29sICJUbXBmcyBleHRlbmRlZCBhdHRyaWJ1dGVzIgogCWRlcGVuZHMgb24gVE1QRlMKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCA0NzVmOWM1Li4zMjZkYzA4IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC0zOSwyNyArMzksMTcgQEAKIAogLyogI2RlZmluZSBERUJVRyAqLwogCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCQkJCVwKLWRvIHsJCQkJCQkJXAotCXByaW50ayhLRVJOX0RFQlVHICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCi0JCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKKyNkZWZpbmUgRFBSSU5USyhmbXQsIC4uLikJCQkJXAorCXByX2RlYnVnKCJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAkJXAorCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQogCi0jZGVmaW5lIEFVVE9GU19XQVJOKGZtdCwgYXJncy4uLikJCQlcCi1kbyB7CQkJCQkJCVwKKyNkZWZpbmUgQVVUT0ZTX1dBUk4oZm10LCAuLi4pCQkJCVwKIAlwcmludGsoS0VSTl9XQVJOSU5HICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCi0JCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKLX0gd2hpbGUgKDApCisJCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgQVVUT0ZTX0VSUk9SKGZtdCwgYXJncy4uLikJCQlcCi1kbyB7CQkJCQkJCVwKKyNkZWZpbmUgQVVUT0ZTX0VSUk9SKGZtdCwgLi4uKQkJCQlcCiAJcHJpbnRrKEtFUk5fRVJSICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCi0JCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKLX0gd2hpbGUgKDApCisJCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCiAKIC8qIFVuaWZpZWQgaW5mbyBzdHJ1Y3R1cmUuICBUaGlzIGlzIHBvaW50ZWQgdG8gYnkgYm90aCB0aGUgZGVudHJ5IGFuZAogICAgaW5vZGUgc3RydWN0dXJlcy4gIEVhY2ggZmlsZSBpbiB0aGUgZmlsZXN5c3RlbSBoYXMgYW4gaW5zdGFuY2Ugb2YgdGhpcwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC93YWl0cS5jIGIvZnMvYXV0b2ZzNC93YWl0cS5jCmluZGV4IDI1NDM1OTguLmUxZmJkZWUgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvd2FpdHEuYworKysgYi9mcy9hdXRvZnM0L3dhaXRxLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXNpemVfdCBwa3RzejsKIAogCURQUklOVEsoIndhaXQgaWQgPSAweCUwOGx4LCBuYW1lID0gJS4qcywgdHlwZT0lZCIsCi0JCXdxLT53YWl0X3F1ZXVlX3Rva2VuLCB3cS0+bmFtZS5sZW4sIHdxLT5uYW1lLm5hbWUsIHR5cGUpOworCQkodW5zaWduZWQgbG9uZykgd3EtPndhaXRfcXVldWVfdG9rZW4sIHdxLT5uYW1lLmxlbiwgd3EtPm5hbWUubmFtZSwgdHlwZSk7CiAKIAltZW1zZXQoJnBrdCwwLHNpemVvZiBwa3QpOyAvKiBGb3Igc2VjdXJpdHkgcmVhc29ucyAqLwogCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggNTRiOGMyOC4uNzIwZDg4NSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtNDc0LDE3ICs0NzQsMjIgQEAKIAkJYmVmc19kYXRhX3N0cmVhbSAqZGF0YSA9ICZiZWZzX2luby0+aV9kYXRhLmRzOwogCQliZWZzX29mZl90IGxlbiA9IGRhdGEtPnNpemU7CiAKLQkJYmVmc19kZWJ1ZyhzYiwgIkZvbGxvdyBsb25nIHN5bWxpbmsiKTsKLQotCQlsaW5rID0ga21hbGxvYyhsZW4sIEdGUF9OT0ZTKTsKLQkJaWYgKCFsaW5rKSB7Ci0JCQlsaW5rID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJfSBlbHNlIGlmIChiZWZzX3JlYWRfbHN5bWxpbmsoc2IsIGRhdGEsIGxpbmssIGxlbikgIT0gbGVuKSB7Ci0JCQlrZnJlZShsaW5rKTsKLQkJCWJlZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gcmVhZCBlbnRpcmUgbG9uZyBzeW1saW5rIik7CisJCWlmIChsZW4gPT0gMCkgeworCQkJYmVmc19lcnJvcihzYiwgIkxvbmcgc3ltbGluayB3aXRoIGlsbGVnYWwgbGVuZ3RoIik7CiAJCQlsaW5rID0gRVJSX1BUUigtRUlPKTsKIAkJfSBlbHNlIHsKLQkJCWxpbmtbbGVuIC0gMV0gPSAnXDAnOworCQkJYmVmc19kZWJ1ZyhzYiwgIkZvbGxvdyBsb25nIHN5bWxpbmsiKTsKKworCQkJbGluayA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CisJCQlpZiAoIWxpbmspIHsKKwkJCQlsaW5rID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCX0gZWxzZSBpZiAoYmVmc19yZWFkX2xzeW1saW5rKHNiLCBkYXRhLCBsaW5rLCBsZW4pICE9IGxlbikgeworCQkJCWtmcmVlKGxpbmspOworCQkJCWJlZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gcmVhZCBlbnRpcmUgbG9uZyBzeW1saW5rIik7CisJCQkJbGluayA9IEVSUl9QVFIoLUVJTyk7CisJCQl9IGVsc2UgeworCQkJCWxpbmtbbGVuIC0gMV0gPSAnXDAnOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJbGluayA9IGJlZnNfaW5vLT5pX2RhdGEuc3ltbGluazsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggZjU1YWFkNC4uOTVmNzg2ZSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTM4Nyw2ICszODcsMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgKmJkX2lub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBJX0JERVYoYmRfaW5vZGUpOwogCWludCBlcnJvcjsKKwkKKwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlscC0+Zl9tYXBwaW5nLCBzdGFydCwgZW5kKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCS8qCiAJICogVGhlcmUgaXMgbm8gbmVlZCB0byBzZXJpYWxpc2UgY2FsbHMgdG8gYmxrZGV2X2lzc3VlX2ZsdXNoIHdpdGgKQEAgLTU1Miw2ICs1NTYsNyBAQAogCiAJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpIHsKIAkJYmRldi0+YmRfY29udGFpbnMgPSBOVUxMOworCQliZGV2LT5iZF9zdXBlciA9IE5VTEw7CiAJCWJkZXYtPmJkX2lub2RlID0gaW5vZGU7CiAJCWJkZXYtPmJkX2Jsb2NrX3NpemUgPSAoMSA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIAkJYmRldi0+YmRfcGFydF9jb3VudCA9IDA7CkBAIC0xNDI0LDYgKzE0MjksMTEgQEAKIAkJV0FSTl9PTl9PTkNFKGJkZXYtPmJkX2hvbGRlcnMpOwogCQlzeW5jX2Jsb2NrZGV2KGJkZXYpOwogCQlraWxsX2JkZXYoYmRldik7CisJCS8qIC0+cmVsZWFzZSBjYW4gY2F1c2UgdGhlIG9sZCBiZGkgdG8gZGlzYXBwZWFyLAorCQkgKiBzbyBtdXN0IHN3aXRjaCBpdCBvdXQgZmlyc3QKKwkJICovCisJCWJkZXZfaW5vZGVfc3dpdGNoX2JkaShiZGV2LT5iZF9pbm9kZSwKKwkJCQkJJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7CiAJfQogCWlmIChiZGV2LT5iZF9jb250YWlucyA9PSBiZGV2KSB7CiAJCWlmIChkaXNrLT5mb3BzLT5yZWxlYXNlKQpAQCAtMTQzNyw4ICsxNDQ3LDYgQEAKIAkJZGlza19wdXRfcGFydChiZGV2LT5iZF9wYXJ0KTsKIAkJYmRldi0+YmRfcGFydCA9IE5VTEw7CiAJCWJkZXYtPmJkX2Rpc2sgPSBOVUxMOwotCQliZGV2X2lub2RlX3N3aXRjaF9iZGkoYmRldi0+YmRfaW5vZGUsCi0JCQkJCSZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwogCQlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKIAkJCXZpY3RpbSA9IGJkZXYtPmJkX2NvbnRhaW5zOwogCQliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9NYWtlZmlsZSBiL2ZzL2J0cmZzL01ha2VmaWxlCmluZGV4IDliNzJkY2YuLjQwZTZhYzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL01ha2VmaWxlCisrKyBiL2ZzL2J0cmZzL01ha2VmaWxlCkBAIC02LDUgKzYsNyBAQAogCSAgIHRyYW5zYWN0aW9uLm8gaW5vZGUubyBmaWxlLm8gdHJlZS1kZWZyYWcubyBcCiAJICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gc3RydWN0LWZ1bmNzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcCiAJICAgZXh0ZW50X2lvLm8gdm9sdW1lcy5vIGFzeW5jLXRocmVhZC5vIGlvY3RsLm8gbG9ja2luZy5vIG9ycGhhbi5vIFwKLQkgICBleHBvcnQubyB0cmVlLWxvZy5vIGFjbC5vIGZyZWUtc3BhY2UtY2FjaGUubyB6bGliLm8gbHpvLm8gXAorCSAgIGV4cG9ydC5vIHRyZWUtbG9nLm8gZnJlZS1zcGFjZS1jYWNoZS5vIHpsaWIubyBsem8ubyBcCiAJICAgY29tcHJlc3Npb24ubyBkZWxheWVkLXJlZi5vIHJlbG9jYXRpb24ubyBkZWxheWVkLWlub2RlLm8gc2NydWIubworCitidHJmcy0kKENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wpICs9IGFjbC5vCmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDY1YTczNWQuLmViMTU5YWEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSAiYnRyZnNfaW5vZGUuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgogCi0jaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAotCiBzdHJ1Y3QgcG9zaXhfYWNsICpidHJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewogCWludCBzaXplOwpAQCAtMTExLDcgKzEwOSw2IEBACiAJaW50IHJldCwgc2l6ZSA9IDA7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljaGFyICp2YWx1ZSA9IE5VTEw7Ci0JbW9kZV90IG1vZGU7CiAKIAlpZiAoYWNsKSB7CiAJCXJldCA9IHBvc2l4X2FjbF92YWxpZChhY2wpOwpAQCAtMTIyLDEzICsxMTksMTEgQEAKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgotCQltb2RlID0gaW5vZGUtPmlfbW9kZTsKIAkJbmFtZSA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1M7CiAJCWlmIChhY2wpIHsKLQkJCXJldCA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJm1vZGUpOworCQkJcmV0ID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmaW5vZGUtPmlfbW9kZSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCX0KIAkJcmV0ID0gMDsKIAkJYnJlYWs7CkBAIC0yMjIsMTkgKzIxNywxNiBAQAogCX0KIAogCWlmIChJU19QT1NJWEFDTChkaXIpICYmIGFjbCkgewotCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0KIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCXJldCA9IGJ0cmZzX3NldF9hY2wodHJhbnMsIGlub2RlLCBhY2wsCiAJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxUKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KLQkJcmV0ID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfTk9GUywgJm1vZGUpOworCQlyZXQgPSBwb3NpeF9hY2xfY3JlYXRlKCZhY2wsIEdGUF9OT0ZTLCAmaW5vZGUtPmlfbW9kZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJaWYgKHJldCA+IDApIHsKIAkJCS8qIHdlIG5lZWQgYW4gYWNsICovCiAJCQlyZXQgPSBidHJmc19zZXRfYWNsKHRyYW5zLCBpbm9kZSwgYWNsLCBBQ0xfVFlQRV9BQ0NFU1MpOwpAQCAtMjgyLDE4ICsyNzQsMyBAQAogCS5nZXQJPSBidHJmc194YXR0cl9hY2xfZ2V0LAogCS5zZXQJPSBidHJmc194YXR0cl9hY2xfc2V0LAogfTsKLQotI2Vsc2UgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwotCi1pbnQgYnRyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJICAgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCA1MDJiOWU5Li5kOWY5OWExIDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTE3Niw3ICsxNzYsMTEgQEAKIHsKIAl1NjQgaW5vID0gQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLm9iamVjdGlkOwogCi0JaWYgKGlubyA8PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQorCS8qCisJICogIWlubzogYnRyZWVfaW5vZGUKKwkgKiB0eXBlID09IEJUUkZTX1JPT1RfSVRFTV9LRVk6IHN1YnZvbCBkaXIKKwkgKi8KKwlpZiAoIWlubyB8fCBCVFJGU19JKGlub2RlKS0+bG9jYXRpb24udHlwZSA9PSBCVFJGU19ST09UX0lURU1fS0VZKQogCQlpbm8gPSBpbm9kZS0+aV9pbm87CiAJcmV0dXJuIGlubzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMgYi9mcy9idHJmcy9jb21wcmVzc2lvbi5jCmluZGV4IGJmZTQyYjAuLjhlYzVkODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKKysrIGIvZnMvYnRyZnMvY29tcHJlc3Npb24uYwpAQCAtMzM4LDYgKzMzOCw3IEBACiAJdTY0IGZpcnN0X2J5dGUgPSBkaXNrX3N0YXJ0OwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CiAJaW50IHJldDsKKwlpbnQgc2tpcF9zdW0gPSBCVFJGU19JKGlub2RlKS0+ZmxhZ3MgJiBCVFJGU19JTk9ERV9OT0RBVEFTVU07CiAKIAlXQVJOX09OKHN0YXJ0ICYgKCh1NjQpUEFHRV9DQUNIRV9TSVpFIC0gMSkpOwogCWNiID0ga21hbGxvYyhjb21wcmVzc2VkX2Jpb19zaXplKHJvb3QsIGNvbXByZXNzZWRfbGVuKSwgR0ZQX05PRlMpOwpAQCAtMzkyLDggKzM5MywxMSBAQAogCQkJcmV0ID0gYnRyZnNfYmlvX3dxX2VuZF9pbyhyb290LT5mc19pbmZvLCBiaW8sIDApOwogCQkJQlVHX09OKHJldCk7CiAKLQkJCXJldCA9IGJ0cmZzX2NzdW1fb25lX2Jpbyhyb290LCBpbm9kZSwgYmlvLCBzdGFydCwgMSk7Ci0JCQlCVUdfT04ocmV0KTsKKwkJCWlmICghc2tpcF9zdW0pIHsKKwkJCQlyZXQgPSBidHJmc19jc3VtX29uZV9iaW8ocm9vdCwgaW5vZGUsIGJpbywKKwkJCQkJCQkgc3RhcnQsIDEpOworCQkJCUJVR19PTihyZXQpOworCQkJfQogCiAJCQlyZXQgPSBidHJmc19tYXBfYmlvKHJvb3QsIFdSSVRFLCBiaW8sIDAsIDEpOwogCQkJQlVHX09OKHJldCk7CkBAIC00MTgsOCArNDIyLDEwIEBACiAJcmV0ID0gYnRyZnNfYmlvX3dxX2VuZF9pbyhyb290LT5mc19pbmZvLCBiaW8sIDApOwogCUJVR19PTihyZXQpOwogCi0JcmV0ID0gYnRyZnNfY3N1bV9vbmVfYmlvKHJvb3QsIGlub2RlLCBiaW8sIHN0YXJ0LCAxKTsKLQlCVUdfT04ocmV0KTsKKwlpZiAoIXNraXBfc3VtKSB7CisJCXJldCA9IGJ0cmZzX2NzdW1fb25lX2Jpbyhyb290LCBpbm9kZSwgYmlvLCBzdGFydCwgMSk7CisJCUJVR19PTihyZXQpOworCX0KIAogCXJldCA9IGJ0cmZzX21hcF9iaW8ocm9vdCwgV1JJVEUsIGJpbywgMCwgMSk7CiAJQlVHX09OKHJldCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCAzNjVjNGUxLi4wMzkxMmM1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTE0MTUsMTcgKzE0MTUsMTUgQEAKICNkZWZpbmUgQlRSRlNfU0VUR0VUX0hFQURFUl9GVU5DUyhuYW1lLCB0eXBlLCBtZW1iZXIsIGJpdHMpCQlcCiBzdGF0aWMgaW5saW5lIHUjI2JpdHMgYnRyZnNfIyNuYW1lKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikJCVwKIHsJCQkJCQkJCQlcCi0JdHlwZSAqcCA9IGttYXBfYXRvbWljKGViLT5maXJzdF9wYWdlLCBLTV9VU0VSMCk7CQlcCisJdHlwZSAqcCA9IHBhZ2VfYWRkcmVzcyhlYi0+Zmlyc3RfcGFnZSk7CQkJCVwKIAl1IyNiaXRzIHJlcyA9IGxlIyNiaXRzIyNfdG9fY3B1KHAtPm1lbWJlcik7CQkJXAotCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJCVwKIH0JCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfc2V0XyMjbmFtZShzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIsCQlcCiAJCQkJICAgIHUjI2JpdHMgdmFsKQkJCVwKIHsJCQkJCQkJCQlcCi0JdHlwZSAqcCA9IGttYXBfYXRvbWljKGViLT5maXJzdF9wYWdlLCBLTV9VU0VSMCk7CQlcCisJdHlwZSAqcCA9IHBhZ2VfYWRkcmVzcyhlYi0+Zmlyc3RfcGFnZSk7CQkJCVwKIAlwLT5tZW1iZXIgPSBjcHVfdG9fbGUjI2JpdHModmFsKTsJCQkJXAotCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwkJCQkJXAogfQogCiAjZGVmaW5lIEJUUkZTX1NFVEdFVF9TVEFDS19GVU5DUyhuYW1lLCB0eXBlLCBtZW1iZXIsIGJpdHMpCQlcCkBAIC0yMzY3LDggKzIzNjUsOCBAQAogaW50IGJ0cmZzX25leHRfbGVhZihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgpOwogaW50IGJ0cmZzX3ByZXZfbGVhZihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgpOwogaW50IGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWYpOwotaW50IGJ0cmZzX2Ryb3Bfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3YsIGludCB1cGRhdGVfcmVmKTsKK3ZvaWQgYnRyZnNfZHJvcF9zbmFwc2hvdChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCSBzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3YsIGludCB1cGRhdGVfcmVmKTsKIGludCBidHJmc19kcm9wX3N1YnRyZWUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCXN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlLApAQCAtMjQwNiw4ICsyNDA0LDggQEAKIAkJCSBidHJmc19yb290X2l0ZW0gKml0ZW0sIHN0cnVjdCBidHJmc19rZXkgKmtleSk7CiBpbnQgYnRyZnNfZmluZF9kZWFkX3Jvb3RzKHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgb2JqZWN0aWQpOwogaW50IGJ0cmZzX2ZpbmRfb3JwaGFuX3Jvb3RzKHN0cnVjdCBidHJmc19yb290ICp0cmVlX3Jvb3QpOwotaW50IGJ0cmZzX3NldF9yb290X25vZGUoc3RydWN0IGJ0cmZzX3Jvb3RfaXRlbSAqaXRlbSwKLQkJCXN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlKTsKK3ZvaWQgYnRyZnNfc2V0X3Jvb3Rfbm9kZShzdHJ1Y3QgYnRyZnNfcm9vdF9pdGVtICppdGVtLAorCQkJIHN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlKTsKIHZvaWQgYnRyZnNfY2hlY2tfYW5kX2luaXRfcm9vdF9pdGVtKHN0cnVjdCBidHJmc19yb290X2l0ZW0gKml0ZW0pOwogCiAvKiBkaXItaXRlbS5jICovCkBAIC0yNTIzLDYgKzI1MjEsMTQgQEAKICNkZWZpbmUgUGFnZUNoZWNrZWQgUGFnZUZzTWlzYwogI2VuZGlmCiAKKy8qIFRoaXMgZm9yY2VzIHJlYWRhaGVhZCBvbiBhIGdpdmVuIHJhbmdlIG9mIGJ5dGVzIGluIGFuIGlub2RlICovCitzdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfZm9yY2VfcmEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgcGdvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgcmVxX3NpemUpCit7CisJcGFnZV9jYWNoZV9zeW5jX3JlYWRhaGVhZChtYXBwaW5nLCByYSwgZmlsZSwgb2Zmc2V0LCByZXFfc2l6ZSk7Cit9CisKIHN0cnVjdCBpbm9kZSAqYnRyZnNfbG9va3VwX2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBidHJmc19zZXRfaW5vZGVfaW5kZXgoc3RydWN0IGlub2RlICpkaXIsIHU2NCAqaW5kZXgpOwogaW50IGJ0cmZzX3VubGlua19pbm9kZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTI1NTEsOSArMjU1Nyw2IEBACiBpbnQgYnRyZnNfbWVyZ2VfYmlvX2hvb2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJIHNpemVfdCBzaXplLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGxvbmcgYmlvX2ZsYWdzKTsKIAotdW5zaWduZWQgbG9uZyBidHJmc19mb3JjZV9yYShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBwZ29mZl90IG9mZnNldCwgcGdvZmZfdCBsYXN0X2luZGV4KTsKIGludCBidHJmc19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKIGludCBidHJmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwogdm9pZCBidHJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKQEAgLTI2NDgsMTIgKzI2NTEsMjEgQEAKIC8qIGFjbC5jICovCiAjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogc3RydWN0IHBvc2l4X2FjbCAqYnRyZnNfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7Ci0jZWxzZQotI2RlZmluZSBidHJmc19nZXRfYWNsIE5VTEwKLSNlbmRpZgogaW50IGJ0cmZzX2luaXRfYWNsKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcik7CiBpbnQgYnRyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworI2Vsc2UKKyNkZWZpbmUgYnRyZnNfZ2V0X2FjbCBOVUxMCitzdGF0aWMgaW5saW5lIGludCBidHJmc19pbml0X2FjbChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBidHJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiByZWxvY2F0aW9uLmMgKi8KIGludCBidHJmc19yZWxvY2F0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGdyb3VwX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpci1pdGVtLmMgYi9mcy9idHJmcy9kaXItaXRlbS5jCmluZGV4IGMzNjBhODQuLjMxZDg0ZTcgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpci1pdGVtLmMKKysrIGIvZnMvYnRyZnMvZGlyLWl0ZW0uYwpAQCAtMTk4LDggKzE5OCw2IEBACiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJaW50IGluc19sZW4gPSBtb2QgPCAwID8gLTEgOiAwOwogCWludCBjb3cgPSBtb2QgIT0gMDsKLQlzdHJ1Y3QgYnRyZnNfa2V5IGZvdW5kX2tleTsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKIAogCWtleS5vYmplY3RpZCA9IGRpcjsKIAlidHJmc19zZXRfa2V5X3R5cGUoJmtleSwgQlRSRlNfRElSX0lURU1fS0VZKTsKQEAgLTIwOSwxOCArMjA3LDcgQEAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgaW5zX2xlbiwgY293KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQlpZiAocmV0ID4gMCkgewotCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkKLQkJCXJldHVybiBOVUxMOwotCQlwYXRoLT5zbG90c1swXS0tOwotCX0KLQotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgcGF0aC0+c2xvdHNbMF0pOwotCi0JaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSBkaXIgfHwKLQkgICAgYnRyZnNfa2V5X3R5cGUoJmZvdW5kX2tleSkgIT0gQlRSRlNfRElSX0lURU1fS0VZIHx8Ci0JICAgIGZvdW5kX2tleS5vZmZzZXQgIT0ga2V5Lm9mZnNldCkKKwlpZiAocmV0ID4gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gYnRyZnNfbWF0Y2hfZGlyX2l0ZW1fbmFtZShyb290LCBwYXRoLCBuYW1lLCBuYW1lX2xlbik7CkBAIC0zMTUsOCArMzAyLDYgQEAKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKIAlpbnQgaW5zX2xlbiA9IG1vZCA8IDAgPyAtMSA6IDA7CiAJaW50IGNvdyA9IG1vZCAhPSAwOwotCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCiAJa2V5Lm9iamVjdGlkID0gZGlyOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19YQVRUUl9JVEVNX0tFWSk7CkBAIC0zMjQsMTggKzMwOSw3IEBACiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QodHJhbnMsIHJvb3QsICZrZXksIHBhdGgsIGluc19sZW4sIGNvdyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JaWYgKHJldCA+IDApIHsKLQkJaWYgKHBhdGgtPnNsb3RzWzBdID09IDApCi0JCQlyZXR1cm4gTlVMTDsKLQkJcGF0aC0+c2xvdHNbMF0tLTsKLQl9Ci0KLQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIHBhdGgtPnNsb3RzWzBdKTsKLQotCWlmIChmb3VuZF9rZXkub2JqZWN0aWQgIT0gZGlyIHx8Ci0JICAgIGJ0cmZzX2tleV90eXBlKCZmb3VuZF9rZXkpICE9IEJUUkZTX1hBVFRSX0lURU1fS0VZIHx8Ci0JICAgIGZvdW5kX2tleS5vZmZzZXQgIT0ga2V5Lm9mZnNldCkKKwlpZiAocmV0ID4gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gYnRyZnNfbWF0Y2hfZGlyX2l0ZW1fbmFtZShyb290LCBwYXRoLCBuYW1lLCBuYW1lX2xlbik7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA0ZDA4ZWQ3Li5mNWJlMDZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTY2Myw3ICs2NjMsOSBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlrZXkub2JqZWN0aWQgPSBzdGFydDsKIAlrZXkub2Zmc2V0ID0gbGVuOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwpAQCAtMTc4MCw2ICsxNzgyLDkgQEAKIAogCiAJCWZvciAoaSA9IDA7IGkgPCBtdWx0aS0+bnVtX3N0cmlwZXM7IGkrKywgc3RyaXBlKyspIHsKKwkJCWlmICghc3RyaXBlLT5kZXYtPmNhbl9kaXNjYXJkKQorCQkJCWNvbnRpbnVlOworCiAJCQlyZXQgPSBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cmlwZS0+ZGV2LT5iZGV2LAogCQkJCQkJICBzdHJpcGUtPnBoeXNpY2FsLAogCQkJCQkJICBzdHJpcGUtPmxlbmd0aCk7CkBAIC0xNzg3LDExICsxNzkyLDE2IEBACiAJCQkJZGlzY2FyZGVkX2J5dGVzICs9IHN0cmlwZS0+bGVuZ3RoOwogCQkJZWxzZSBpZiAocmV0ICE9IC1FT1BOT1RTVVBQKQogCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogSnVzdCBpbiBjYXNlIHdlIGdldCBiYWNrIEVPUE5PVFNVUFAgZm9yIHNvbWUgcmVhc29uLAorCQkJICoganVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBzbyB3ZSBkb24ndCBzY3JldyB1cAorCQkJICogcGVvcGxlIGNhbGxpbmcgZGlzY2FyZF9leHRlbnQuCisJCQkgKi8KKwkJCXJldCA9IDA7CiAJCX0KIAkJa2ZyZWUobXVsdGkpOwogCX0KLQlpZiAoZGlzY2FyZGVkX2J5dGVzICYmIHJldCA9PSAtRU9QTk9UU1VQUCkKLQkJcmV0ID0gMDsKIAogCWlmIChhY3R1YWxfYnl0ZXMpCiAJCSphY3R1YWxfYnl0ZXMgPSBkaXNjYXJkZWRfYnl0ZXM7CkBAIC0zMjcyLDYgKzMyODIsOSBAQAogCX0KIAogCXJldCA9IGJ0cmZzX2FsbG9jX2NodW5rKHRyYW5zLCBleHRlbnRfcm9vdCwgZmxhZ3MpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PU1BDKQorCQlnb3RvIG91dDsKKwogCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiAJaWYgKHJldCkKIAkJc3BhY2VfaW5mby0+ZnVsbCA9IDE7CkBAIC0zMjgxLDYgKzMyOTQsNyBAQAogCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CiAJc3BhY2VfaW5mby0+Y2h1bmtfYWxsb2MgPSAwOwogCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKK291dDoKIAltdXRleF91bmxvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5jaHVua19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ0NTYsNyArNDQ3MCw5IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSICJ1bW0sIGdvdCAlZCBiYWNrIGZyb20gc2VhcmNoIgogCQkJCSAgICAgICAiLCB3YXMgbG9va2luZyBmb3IgJWxsdVxuIiwgcmV0LAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVucik7Ci0JCQkJYnRyZnNfcHJpbnRfbGVhZihleHRlbnRfcm9vdCwgcGF0aC0+bm9kZXNbMF0pOworCQkJCWlmIChyZXQgPiAwKQorCQkJCQlidHJmc19wcmludF9sZWFmKGV4dGVudF9yb290LAorCQkJCQkJCSBwYXRoLT5ub2Rlc1swXSk7CiAJCQl9CiAJCQlCVUdfT04ocmV0KTsKIAkJCWV4dGVudF9zbG90ID0gcGF0aC0+c2xvdHNbMF07CkBAIC01MDczLDcgKzUwODksOSBAQAogCQkJICogZ3JvdXAgaXMgZG9lcyBwb2ludCB0byBhbmQgdHJ5IGFnYWluCiAJCQkgKi8KIAkJCWlmICghbGFzdF9wdHJfbG9vcCAmJiBsYXN0X3B0ci0+YmxvY2tfZ3JvdXAgJiYKLQkJCSAgICBsYXN0X3B0ci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApIHsKKwkJCSAgICBsYXN0X3B0ci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXAgJiYKKwkJCSAgICBpbmRleCA8PQorCQkJCSBnZXRfYmxvY2tfZ3JvdXBfaW5kZXgobGFzdF9wdHItPmJsb2NrX2dyb3VwKSkgewogCiAJCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJCQlibG9ja19ncm91cCA9IGxhc3RfcHRyLT5ibG9ja19ncm91cDsKQEAgLTU1MDEsNyArNTUxOSw4IEBACiAJdTMyIHNpemUgPSBzaXplb2YoKmV4dGVudF9pdGVtKSArIHNpemVvZigqYmxvY2tfaW5mbykgKyBzaXplb2YoKmlyZWYpOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW0odHJhbnMsIGZzX2luZm8tPmV4dGVudF9yb290LCBwYXRoLApAQCAtNjI1OCw4ICs2Mjc3LDggQEAKICAqIGFsc28gbWFrZSBzdXJlIGJhY2tyZWZzIGZvciB0aGUgc2hhcmVkIGJsb2NrIGFuZCBhbGwgbG93ZXIgbGV2ZWwKICAqIGJsb2NrcyBhcmUgcHJvcGVybHkgdXBkYXRlZC4KICAqLwotaW50IGJ0cmZzX2Ryb3Bfc25hcHNob3Qoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3YsIGludCB1cGRhdGVfcmVmKQordm9pZCBidHJmc19kcm9wX3NuYXBzaG90KHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKmJsb2NrX3JzdiwgaW50IHVwZGF0ZV9yZWYpCiB7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CkBAIC02MjcyLDEwICs2MjkxLDE3IEBACiAJaW50IGxldmVsOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAl3YyA9IGt6YWxsb2Moc2l6ZW9mKCp3YyksIEdGUF9OT0ZTKTsKLQlCVUdfT04oIXdjKTsKKwlpZiAoIXdjKSB7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDApOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKQEAgLTYzMDMsNyArNjMyOSw3IEBACiAJCXBhdGgtPmxvd2VzdF9sZXZlbCA9IDA7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIgPSByZXQ7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJV0FSTl9PTihyZXQgPiAwKTsKIApAQCAtNjQxMCwxMSArNjQzNiwxNCBAQAogCQlmcmVlX2V4dGVudF9idWZmZXIocm9vdC0+Y29tbWl0X3Jvb3QpOwogCQlrZnJlZShyb290KTsKIAl9Ci1vdXQ6CitvdXRfZnJlZToKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHRyZWVfcm9vdCk7CiAJa2ZyZWUod2MpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlyZXR1cm4gZXJyOworb3V0OgorCWlmIChlcnIpCisJCWJ0cmZzX3N0ZF9lcnJvcihyb290LT5mc19pbmZvLCBlcnIpOworCXJldHVybjsKIH0KIAogLyoKQEAgLTY1MzgsOCArNjU2Nyw2IEBACiAJdTY0IG1pbl9hbGxvY2FibGVfYnl0ZXM7CiAJaW50IHJldCA9IC1FTk9TUEM7CiAKLQlpZiAoY2FjaGUtPnJvKQotCQlyZXR1cm4gMDsKIAogCS8qCiAJICogV2UgbmVlZCBzb21lIG1ldGFkYXRhIHNwYWNlIGFuZCBzeXN0ZW0gbWV0YWRhdGEgc3BhY2UgZm9yCkBAIC02NTU1LDYgKzY1ODIsMTIgQEAKIAogCXNwaW5fbG9jaygmc2luZm8tPmxvY2spOwogCXNwaW5fbG9jaygmY2FjaGUtPmxvY2spOworCisJaWYgKGNhY2hlLT5ybykgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAludW1fYnl0ZXMgPSBjYWNoZS0+a2V5Lm9mZnNldCAtIGNhY2hlLT5yZXNlcnZlZCAtIGNhY2hlLT5waW5uZWQgLQogCQkgICAgY2FjaGUtPmJ5dGVzX3N1cGVyIC0gYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmY2FjaGUtPml0ZW0pOwogCkBAIC02NTY4LDcgKzY2MDEsNyBAQAogCQljYWNoZS0+cm8gPSAxOwogCQlyZXQgPSAwOwogCX0KLQorb3V0OgogCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7CiAJc3Bpbl91bmxvY2soJnNpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjcwMSw2ICs2NzM0LDEwIEBACiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXMgPSByb290LT5mc19pbmZvLT5mc19kZXZpY2VzOwogCXN0cnVjdCBidHJmc19kZXZpY2UgKmRldmljZTsKKwl1NjQgbWluX2ZyZWU7CisJdTY0IGRldl9taW4gPSAxOworCXU2NCBkZXZfbnIgPSAwOworCWludCBpbmRleDsKIAlpbnQgZnVsbCA9IDA7CiAJaW50IHJldCA9IDA7CiAKQEAgLTY3MTAsOCArNjc0NywxMCBAQAogCWlmICghYmxvY2tfZ3JvdXApCiAJCXJldHVybiAtMTsKIAorCW1pbl9mcmVlID0gYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmYmxvY2tfZ3JvdXAtPml0ZW0pOworCiAJLyogbm8gYnl0ZXMgdXNlZCwgd2UncmUgZ29vZCAqLwotCWlmICghYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmYmxvY2tfZ3JvdXAtPml0ZW0pKQorCWlmICghbWluX2ZyZWUpCiAJCWdvdG8gb3V0OwogCiAJc3BhY2VfaW5mbyA9IGJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvOwpAQCAtNjcyNywxMCArNjc2Niw5IEBACiAJICogYWxsIG9mIHRoZSBleHRlbnRzIGZyb20gdGhpcyBibG9jayBncm91cC4gIElmIHdlIGNhbiwgd2UncmUgZ29vZAogCSAqLwogCWlmICgoc3BhY2VfaW5mby0+dG90YWxfYnl0ZXMgIT0gYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpICYmCi0JICAgKHNwYWNlX2luZm8tPmJ5dGVzX3VzZWQgKyBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZCArCi0JICAgIHNwYWNlX2luZm8tPmJ5dGVzX3Bpbm5lZCArIHNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKLQkgICAgYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmYmxvY2tfZ3JvdXAtPml0ZW0pIDwKLQkgICAgc3BhY2VfaW5mby0+dG90YWxfYnl0ZXMpKSB7CisJICAgIChzcGFjZV9pbmZvLT5ieXRlc191c2VkICsgc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKworCSAgICAgc3BhY2VfaW5mby0+Ynl0ZXNfcGlubmVkICsgc3BhY2VfaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCSAgICAgbWluX2ZyZWUgPCBzcGFjZV9pbmZvLT50b3RhbF9ieXRlcykpIHsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CkBAIC02NzQ3LDkgKzY3ODUsMzEgQEAKIAlpZiAoZnVsbCkKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIGluZGV4OgorCSAqICAgICAgMDogcmFpZDEwCisJICogICAgICAxOiByYWlkMQorCSAqICAgICAgMjogZHVwCisJICogICAgICAzOiByYWlkMAorCSAqICAgICAgNDogc2luZ2xlCisJICovCisJaW5kZXggPSBnZXRfYmxvY2tfZ3JvdXBfaW5kZXgoYmxvY2tfZ3JvdXApOworCWlmIChpbmRleCA9PSAwKSB7CisJCWRldl9taW4gPSA0OworCQkvKiBEaXZpZGUgYnkgMiAqLworCQltaW5fZnJlZSA+Pj0gMTsKKwl9IGVsc2UgaWYgKGluZGV4ID09IDEpIHsKKwkJZGV2X21pbiA9IDI7CisJfSBlbHNlIGlmIChpbmRleCA9PSAyKSB7CisJCS8qIE11bHRpcGx5IGJ5IDIgKi8KKwkJbWluX2ZyZWUgPDw9IDE7CisJfSBlbHNlIGlmIChpbmRleCA9PSAzKSB7CisJCWRldl9taW4gPSBmc19kZXZpY2VzLT5yd19kZXZpY2VzOworCQlkb19kaXYobWluX2ZyZWUsIGRldl9taW4pOworCX0KKwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPmNodW5rX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJmZzX2RldmljZXMtPmFsbG9jX2xpc3QsIGRldl9hbGxvY19saXN0KSB7Ci0JCXU2NCBtaW5fZnJlZSA9IGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmJsb2NrX2dyb3VwLT5pdGVtKTsKIAkJdTY0IGRldl9vZmZzZXQ7CiAKIAkJLyoKQEAgLTY3NjAsNyArNjgyMCwxMSBAQAogCQkJcmV0ID0gZmluZF9mcmVlX2Rldl9leHRlbnQoTlVMTCwgZGV2aWNlLCBtaW5fZnJlZSwKIAkJCQkJCSAgICZkZXZfb2Zmc2V0LCBOVUxMKTsKIAkJCWlmICghcmV0KQorCQkJCWRldl9ucisrOworCisJCQlpZiAoZGV2X25yID49IGRldl9taW4pCiAJCQkJYnJlYWs7CisKIAkJCXJldCA9IC0xOwogCQl9CiAJfQpAQCAtNzE4MywxMSArNzI0NywxNSBAQAogCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5yZWZpbGxfbG9jayk7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCUJVR19PTighcGF0aCk7CisJaWYgKCFwYXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCWlub2RlID0gbG9va3VwX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgYmxvY2tfZ3JvdXAsIHBhdGgpOwogCWlmICghSVNfRVJSKGlub2RlKSkgewotCQlidHJmc19vcnBoYW5fYWRkKHRyYW5zLCBpbm9kZSk7CisJCXJldCA9IGJ0cmZzX29ycGhhbl9hZGQodHJhbnMsIGlub2RlKTsKKwkJQlVHX09OKHJldCk7CiAJCWNsZWFyX25saW5rKGlub2RlKTsKIAkJLyogT25lIGZvciB0aGUgYmxvY2sgZ3JvdXBzIHJlZiAqLwogCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMDY3YjE3NC4uZDQxODE2NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTI1NCwxNCArMjU0LDE0IEBACiAgKgogICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHRyZWUgbG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50IG1lcmdlX3N0YXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKLQkJICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlKQorc3RhdGljIHZvaWQgbWVyZ2Vfc3RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAorCQkgICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyOwogCXN0cnVjdCByYl9ub2RlICpvdGhlcl9ub2RlOwogCiAJaWYgKHN0YXRlLT5zdGF0ZSAmIChFWFRFTlRfSU9CSVRTIHwgRVhURU5UX0JPVU5EQVJZKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCW90aGVyX25vZGUgPSByYl9wcmV2KCZzdGF0ZS0+cmJfbm9kZSk7CiAJaWYgKG90aGVyX25vZGUpIHsKQEAgLTI4NywxOSArMjg3LDEzIEBACiAJCQlmcmVlX2V4dGVudF9zdGF0ZShvdGhlcik7CiAJCX0KIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXRfc3RhdGVfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAorc3RhdGljIHZvaWQgc2V0X3N0YXRlX2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgaW50ICpiaXRzKQogewotCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zZXRfYml0X2hvb2spIHsKLQkJcmV0dXJuIHRyZWUtPm9wcy0+c2V0X2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsCi0JCQkJCSAgICAgICBzdGF0ZSwgYml0cyk7Ci0JfQotCi0JcmV0dXJuIDA7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPnNldF9iaXRfaG9vaykKKwkJdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUsIGJpdHMpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCkBAIC0zMDksNiArMzAzLDkgQEAKIAkJdHJlZS0+b3BzLT5jbGVhcl9iaXRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LCBzdGF0ZSwgYml0cyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKKwkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgKmJpdHMpOworCiAvKgogICogaW5zZXJ0IGFuIGV4dGVudF9zdGF0ZSBzdHJ1Y3QgaW50byB0aGUgdHJlZS4gICdiaXRzJyBhcmUgc2V0IG9uIHRoZQogICogc3RydWN0IGJlZm9yZSBpdCBpcyBpbnNlcnRlZC4KQEAgLTMyNCw4ICszMjEsNiBAQAogCQkJaW50ICpiaXRzKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOwotCWludCBiaXRzX3RvX3NldCA9ICpiaXRzICYgfkVYVEVOVF9DVExCSVRTOwotCWludCByZXQ7CiAKIAlpZiAoZW5kIDwgc3RhcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyBlbmQgPCBzdGFydCAlbGx1ICVsbHVcbiIsCkBAIC0zMzUsMTMgKzMzMCw5IEBACiAJfQogCXN0YXRlLT5zdGFydCA9IHN0YXJ0OwogCXN0YXRlLT5lbmQgPSBlbmQ7Ci0JcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwogCi0JaWYgKGJpdHNfdG9fc2V0ICYgRVhURU5UX0RJUlRZKQotCQl0cmVlLT5kaXJ0eV9ieXRlcyArPSBlbmQgLSBzdGFydCArIDE7Ci0Jc3RhdGUtPnN0YXRlIHw9IGJpdHNfdG9fc2V0OworCXNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwogCW5vZGUgPSB0cmVlX2luc2VydCgmdHJlZS0+c3RhdGUsIGVuZCwgJnN0YXRlLT5yYl9ub2RlKTsKIAlpZiAobm9kZSkgewogCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpmb3VuZDsKQEAgLTM1NywxMyArMzQ4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BsaXRfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLAorc3RhdGljIHZvaWQgc3BsaXRfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLAogCQkgICAgIHU2NCBzcGxpdCkKIHsKIAlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+c3BsaXRfZXh0ZW50X2hvb2spCi0JCXJldHVybiB0cmVlLT5vcHMtPnNwbGl0X2V4dGVudF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsCi0JCQkJCQkgICAgb3JpZywgc3BsaXQpOwotCXJldHVybiAwOworCQl0cmVlLT5vcHMtPnNwbGl0X2V4dGVudF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIG9yaWcsIHNwbGl0KTsKIH0KIAogLyoKQEAgLTY1OSwzNCArNjQ4LDI1IEBACiAJCWlmIChzdGFydCA+IGVuZCkKIAkJCWJyZWFrOwogCi0JCWlmIChuZWVkX3Jlc2NoZWQoKSkgewotCQkJc3Bpbl91bmxvY2soJnRyZWUtPmxvY2spOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlzcGluX2xvY2soJnRyZWUtPmxvY2spOwotCQl9CisJCWNvbmRfcmVzY2hlZF9sb2NrKCZ0cmVlLT5sb2NrKTsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2soJnRyZWUtPmxvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKK3N0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJICAgaW50ICpiaXRzKQogewotCWludCByZXQ7CiAJaW50IGJpdHNfdG9fc2V0ID0gKmJpdHMgJiB+RVhURU5UX0NUTEJJVFM7CiAKLQlyZXQgPSBzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKIAlpZiAoKGJpdHNfdG9fc2V0ICYgRVhURU5UX0RJUlRZKSAmJiAhKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CiAJCXRyZWUtPmRpcnR5X2J5dGVzICs9IHJhbmdlOwogCX0KIAlzdGF0ZS0+c3RhdGUgfD0gYml0c190b19zZXQ7Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2FjaGVfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCkBAIC03NzksOSArNzU5LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgc3RhdGUsICZiaXRzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OworCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgJmJpdHMpOwogCiAJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CkBAIC04MzAsOSArODA4LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlpZiAoc3RhdGUtPmVuZCA8PSBlbmQpIHsKLQkJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCAmYml0cyk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gb3V0OworCQkJc2V0X3N0YXRlX2JpdHModHJlZSwgc3RhdGUsICZiaXRzKTsKIAkJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQkJbWVyZ2Vfc3RhdGUodHJlZSwgc3RhdGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCkBAIC04OTMsMTEgKzg2OSw3IEBACiAJCWVyciA9IHNwbGl0X3N0YXRlKHRyZWUsIHN0YXRlLCBwcmVhbGxvYywgZW5kICsgMSk7CiAJCUJVR19PTihlcnIgPT0gLUVFWElTVCk7CiAKLQkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsICZiaXRzKTsKLQkJaWYgKGVycikgewotCQkJcHJlYWxsb2MgPSBOVUxMOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsICZiaXRzKTsKIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCW1lcmdlX3N0YXRlKHRyZWUsIHByZWFsbG9jKTsKIAkJcHJlYWxsb2MgPSBOVUxMOwpAQCAtMTA1OSw0NiArMTAzMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBmaW5kIHRoZSBmaXJzdCBvZmZzZXQgaW4gdGhlIGlvIHRyZWUgd2l0aCAnYml0cycgc2V0LiB6ZXJvIGlzCi0gKiByZXR1cm5lZCBpZiB3ZSBmaW5kIHNvbWV0aGluZywgYW5kICpzdGFydF9yZXQgYW5kICplbmRfcmV0IGFyZQotICogc2V0IHRvIHJlZmxlY3QgdGhlIHN0YXRlIHN0cnVjdCB0aGF0IHdhcyBmb3VuZC4KLSAqCi0gKiBJZiBub3RoaW5nIHdhcyBmb3VuZCwgMSBpcyByZXR1cm5lZCwgPCAwIG9uIGVycm9yCi0gKi8KLWludCBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsCi0JCQkgIHU2NCAqc3RhcnRfcmV0LCB1NjQgKmVuZF9yZXQsIGludCBiaXRzKQotewotCXN0cnVjdCByYl9ub2RlICpub2RlOwotCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOwotCWludCByZXQgPSAxOwotCi0Jc3Bpbl9sb2NrKCZ0cmVlLT5sb2NrKTsKLQkvKgotCSAqIHRoaXMgc2VhcmNoIHdpbGwgZmluZCBhbGwgdGhlIGV4dGVudHMgdGhhdCBlbmQgYWZ0ZXIKLQkgKiBvdXIgcmFuZ2Ugc3RhcnRzLgotCSAqLwotCW5vZGUgPSB0cmVlX3NlYXJjaCh0cmVlLCBzdGFydCk7Ci0JaWYgKCFub2RlKQotCQlnb3RvIG91dDsKLQotCXdoaWxlICgxKSB7Ci0JCXN0YXRlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSwgcmJfbm9kZSk7Ci0JCWlmIChzdGF0ZS0+ZW5kID49IHN0YXJ0ICYmIChzdGF0ZS0+c3RhdGUgJiBiaXRzKSkgewotCQkJKnN0YXJ0X3JldCA9IHN0YXRlLT5zdGFydDsKLQkJCSplbmRfcmV0ID0gc3RhdGUtPmVuZDsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlub2RlID0gcmJfbmV4dChub2RlKTsKLQkJaWYgKCFub2RlKQotCQkJYnJlYWs7Ci0JfQotb3V0OgotCXNwaW5fdW5sb2NrKCZ0cmVlLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKiBmaW5kIHRoZSBmaXJzdCBzdGF0ZSBzdHJ1Y3Qgd2l0aCAnYml0cycgc2V0IGFmdGVyICdzdGFydCcsIGFuZAogICogcmV0dXJuIGl0LiAgdHJlZS0+bG9jayBtdXN0IGJlIGhlbGQuICBOVUxMIHdpbGwgcmV0dXJuZWQgaWYKICAqIG5vdGhpbmcgd2FzIGZvdW5kIGFmdGVyICdzdGFydCcKQEAgLTExMzEsNiArMTA2MywzMCBAQAogfQogCiAvKgorICogZmluZCB0aGUgZmlyc3Qgb2Zmc2V0IGluIHRoZSBpbyB0cmVlIHdpdGggJ2JpdHMnIHNldC4gemVybyBpcworICogcmV0dXJuZWQgaWYgd2UgZmluZCBzb21ldGhpbmcsIGFuZCAqc3RhcnRfcmV0IGFuZCAqZW5kX3JldCBhcmUKKyAqIHNldCB0byByZWZsZWN0IHRoZSBzdGF0ZSBzdHJ1Y3QgdGhhdCB3YXMgZm91bmQuCisgKgorICogSWYgbm90aGluZyB3YXMgZm91bmQsIDEgaXMgcmV0dXJuZWQsIDwgMCBvbiBlcnJvcgorICovCitpbnQgZmluZF9maXJzdF9leHRlbnRfYml0KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LAorCQkJICB1NjQgKnN0YXJ0X3JldCwgdTY0ICplbmRfcmV0LCBpbnQgYml0cykKK3sKKwlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9jaygmdHJlZS0+bG9jayk7CisJc3RhdGUgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXRfc3RhdGUodHJlZSwgc3RhcnQsIGJpdHMpOworCWlmIChzdGF0ZSkgeworCQkqc3RhcnRfcmV0ID0gc3RhdGUtPnN0YXJ0OworCQkqZW5kX3JldCA9IHN0YXRlLT5lbmQ7CisJCXJldCA9IDA7CisJfQorCXNwaW5fdW5sb2NrKCZ0cmVlLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogZmluZCBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgYnl0ZXMgaW4gdGhlIGZpbGUgbWFya2VkIGFzIGRlbGFsbG9jLCBub3QKICAqIG1vcmUgdGhhbiAnbWF4X2J5dGVzJy4gIHN0YXJ0IGFuZCBlbmQgYXJlIHVzZWQgdG8gcmV0dXJuIHRoZSByYW5nZSwKICAqCkBAIC0yNTQ2LDcgKzI1MDIsNiBAQAogCQkJICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAlzdHJ1Y3QgZXh0ZW50X3BhZ2VfZGF0YSBlcGQgPSB7CiAJCS5iaW8gPSBOVUxMLAogCQkudHJlZSA9IHRyZWUsCkBAIC0yNTU0LDE3ICsyNTA5LDkgQEAKIAkJLmV4dGVudF9sb2NrZWQgPSAwLAogCQkuc3luY19pbyA9IHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMLAogCX07Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiY193cml0ZXBhZ2VzID0gewotCQkuc3luY19tb2RlCT0gd2JjLT5zeW5jX21vZGUsCi0JCS5ucl90b193cml0ZQk9IDY0LAotCQkucmFuZ2Vfc3RhcnQJPSBwYWdlX29mZnNldChwYWdlKSArIFBBR0VfQ0FDSEVfU0laRSwKLQkJLnJhbmdlX2VuZAk9IChsb2ZmX3QpLTEsCi0JfTsKIAogCXJldCA9IF9fZXh0ZW50X3dyaXRlcGFnZShwYWdlLCB3YmMsICZlcGQpOwogCi0JZXh0ZW50X3dyaXRlX2NhY2hlX3BhZ2VzKHRyZWUsIG1hcHBpbmcsICZ3YmNfd3JpdGVwYWdlcywKLQkJCQkgX19leHRlbnRfd3JpdGVwYWdlLCAmZXBkLCBmbHVzaF93cml0ZV9iaW8pOwogCWZsdXNoX2VwZF93cml0ZV9iaW8oJmVwZCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5oIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKaW5kZXggMjFhN2NhOS4uN2IyZjBjMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmgKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKQEAgLTc2LDE1ICs3NiwxNSBAQAogCQkJCSAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSk7CiAJaW50ICgqd3JpdGVwYWdlX2VuZF9pb19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgdXB0b2RhdGUpOwotCWludCAoKnNldF9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgaW50ICpiaXRzKTsKLQlpbnQgKCpjbGVhcl9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICBpbnQgKmJpdHMpOwotCWludCAoKm1lcmdlX2V4dGVudF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpuZXcsCi0JCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKTsKLQlpbnQgKCpzcGxpdF9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3JpZywgdTY0IHNwbGl0KTsKKwl2b2lkICgqc2V0X2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgaW50ICpiaXRzKTsKKwl2b2lkICgqY2xlYXJfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIGludCAqYml0cyk7CisJdm9pZCAoKm1lcmdlX2V4dGVudF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpOworCXZvaWQgKCpzcGxpdF9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCk7CiAJaW50ICgqd3JpdGVfY2FjaGVfcGFnZXNfbG9ja19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB9OwogCkBAIC0xMDgsOCArMTA4LDYgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIAlhdG9taWNfdCByZWZzOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7Ci0JdTY0IHNwbGl0X3N0YXJ0OwotCXU2NCBzcGxpdF9lbmQ7CiAKIAkvKiBmb3IgdXNlIGJ5IHRoZSBGUyAqLwogCXU2NCBwcml2YXRlOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCmluZGV4IDJkMDQxMDMuLjdjOTdiMzMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYworKysgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKQEAgLTE4MywyMiArMTgzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB1bnBpbl9leHRlbnRfY2FjaGUoc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgbGVuKQorc3RhdGljIHZvaWQgdHJ5X21lcmdlX21hcChzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X21hcCAqZW0pCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IGV4dGVudF9tYXAgKm1lcmdlID0gTlVMTDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmI7Ci0Jc3RydWN0IGV4dGVudF9tYXAgKmVtOwotCi0Jd3JpdGVfbG9jaygmdHJlZS0+bG9jayk7Ci0JZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcodHJlZSwgc3RhcnQsIGxlbik7Ci0KLQlXQVJOX09OKCFlbSB8fCBlbS0+c3RhcnQgIT0gc3RhcnQpOwotCi0JaWYgKCFlbSkKLQkJZ290byBvdXQ7Ci0KLQljbGVhcl9iaXQoRVhURU5UX0ZMQUdfUElOTkVELCAmZW0tPmZsYWdzKTsKIAogCWlmIChlbS0+c3RhcnQgIT0gMCkgewogCQlyYiA9IHJiX3ByZXYoJmVtLT5yYl9ub2RlKTsKQEAgLTIyNSw2ICsyMTMsMjQgQEAKIAkJbWVyZ2UtPmluX3RyZWUgPSAwOwogCQlmcmVlX2V4dGVudF9tYXAobWVyZ2UpOwogCX0KK30KKworaW50IHVucGluX2V4dGVudF9jYWNoZShzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBsZW4pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGV4dGVudF9tYXAgKmVtOworCisJd3JpdGVfbG9jaygmdHJlZS0+bG9jayk7CisJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcodHJlZSwgc3RhcnQsIGxlbik7CisKKwlXQVJOX09OKCFlbSB8fCBlbS0+c3RhcnQgIT0gc3RhcnQpOworCisJaWYgKCFlbSkKKwkJZ290byBvdXQ7CisKKwljbGVhcl9iaXQoRVhURU5UX0ZMQUdfUElOTkVELCAmZW0tPmZsYWdzKTsKKworCXRyeV9tZXJnZV9tYXAodHJlZSwgZW0pOwogCiAJZnJlZV9leHRlbnRfbWFwKGVtKTsKIG91dDoKQEAgLTI0Nyw3ICsyNTMsNiBAQAogCQkgICAgICAgc3RydWN0IGV4dGVudF9tYXAgKmVtKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBleHRlbnRfbWFwICptZXJnZSA9IE5VTEw7CiAJc3RydWN0IHJiX25vZGUgKnJiOwogCXN0cnVjdCBleHRlbnRfbWFwICpleGlzdDsKIApAQCAtMjYzLDMwICsyNjgsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAJYXRvbWljX2luYygmZW0tPnJlZnMpOwotCWlmIChlbS0+c3RhcnQgIT0gMCkgewotCQlyYiA9IHJiX3ByZXYoJmVtLT5yYl9ub2RlKTsKLQkJaWYgKHJiKQotCQkJbWVyZ2UgPSByYl9lbnRyeShyYiwgc3RydWN0IGV4dGVudF9tYXAsIHJiX25vZGUpOwotCQlpZiAocmIgJiYgbWVyZ2FibGVfbWFwcyhtZXJnZSwgZW0pKSB7Ci0JCQllbS0+c3RhcnQgPSBtZXJnZS0+c3RhcnQ7Ci0JCQllbS0+bGVuICs9IG1lcmdlLT5sZW47Ci0JCQllbS0+YmxvY2tfbGVuICs9IG1lcmdlLT5ibG9ja19sZW47Ci0JCQllbS0+YmxvY2tfc3RhcnQgPSBtZXJnZS0+YmxvY2tfc3RhcnQ7Ci0JCQltZXJnZS0+aW5fdHJlZSA9IDA7Ci0JCQlyYl9lcmFzZSgmbWVyZ2UtPnJiX25vZGUsICZ0cmVlLT5tYXApOwotCQkJZnJlZV9leHRlbnRfbWFwKG1lcmdlKTsKLQkJfQotCSB9Ci0JcmIgPSByYl9uZXh0KCZlbS0+cmJfbm9kZSk7Ci0JaWYgKHJiKQotCQltZXJnZSA9IHJiX2VudHJ5KHJiLCBzdHJ1Y3QgZXh0ZW50X21hcCwgcmJfbm9kZSk7Ci0JaWYgKHJiICYmIG1lcmdhYmxlX21hcHMoZW0sIG1lcmdlKSkgewotCQllbS0+bGVuICs9IG1lcmdlLT5sZW47Ci0JCWVtLT5ibG9ja19sZW4gKz0gbWVyZ2UtPmxlbjsKLQkJcmJfZXJhc2UoJm1lcmdlLT5yYl9ub2RlLCAmdHJlZS0+bWFwKTsKLQkJbWVyZ2UtPmluX3RyZWUgPSAwOwotCQlmcmVlX2V4dGVudF9tYXAobWVyZ2UpOwotCX0KKworCXRyeV9tZXJnZV9tYXAodHJlZSwgZW0pOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yOTksNiArMjgyLDM0IEBACiAJcmV0dXJuIHN0YXJ0ICsgbGVuOwogfQogCitzdHJ1Y3QgZXh0ZW50X21hcCAqX19sb29rdXBfZXh0ZW50X21hcHBpbmcoc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqdHJlZSwKKwkJCQkJICAgdTY0IHN0YXJ0LCB1NjQgbGVuLCBpbnQgc3RyaWN0KQoreworCXN0cnVjdCBleHRlbnRfbWFwICplbTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSBOVUxMOworCXU2NCBlbmQgPSByYW5nZV9lbmQoc3RhcnQsIGxlbik7CisKKwlyYl9ub2RlID0gX190cmVlX3NlYXJjaCgmdHJlZS0+bWFwLCBzdGFydCwgJnByZXYsICZuZXh0KTsKKwlpZiAoIXJiX25vZGUpIHsKKwkJaWYgKHByZXYpCisJCQlyYl9ub2RlID0gcHJldjsKKwkJZWxzZSBpZiAobmV4dCkKKwkJCXJiX25vZGUgPSBuZXh0OworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllbSA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBleHRlbnRfbWFwLCByYl9ub2RlKTsKKworCWlmIChzdHJpY3QgJiYgIShlbmQgPiBlbS0+c3RhcnQgJiYgc3RhcnQgPCBleHRlbnRfbWFwX2VuZChlbSkpKQorCQlyZXR1cm4gTlVMTDsKKworCWF0b21pY19pbmMoJmVtLT5yZWZzKTsKKwlyZXR1cm4gZW07Cit9CisKIC8qKgogICogbG9va3VwX2V4dGVudF9tYXBwaW5nIC0gbG9va3VwIGV4dGVudF9tYXAKICAqIEB0cmVlOgl0cmVlIHRvIGxvb2t1cCBpbgpAQCAtMzEzLDQyICszMjQsNyBAQAogc3RydWN0IGV4dGVudF9tYXAgKmxvb2t1cF9leHRlbnRfbWFwcGluZyhzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICp0cmVlLAogCQkJCQkgdTY0IHN0YXJ0LCB1NjQgbGVuKQogewotCXN0cnVjdCBleHRlbnRfbWFwICplbTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7Ci0Jc3RydWN0IHJiX25vZGUgKm5leHQgPSBOVUxMOwotCXU2NCBlbmQgPSByYW5nZV9lbmQoc3RhcnQsIGxlbik7Ci0KLQlyYl9ub2RlID0gX190cmVlX3NlYXJjaCgmdHJlZS0+bWFwLCBzdGFydCwgJnByZXYsICZuZXh0KTsKLQlpZiAoIXJiX25vZGUgJiYgcHJldikgewotCQllbSA9IHJiX2VudHJ5KHByZXYsIHN0cnVjdCBleHRlbnRfbWFwLCByYl9ub2RlKTsKLQkJaWYgKGVuZCA+IGVtLT5zdGFydCAmJiBzdGFydCA8IGV4dGVudF9tYXBfZW5kKGVtKSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCWlmICghcmJfbm9kZSAmJiBuZXh0KSB7Ci0JCWVtID0gcmJfZW50cnkobmV4dCwgc3RydWN0IGV4dGVudF9tYXAsIHJiX25vZGUpOwotCQlpZiAoZW5kID4gZW0tPnN0YXJ0ICYmIHN0YXJ0IDwgZXh0ZW50X21hcF9lbmQoZW0pKQotCQkJZ290byBmb3VuZDsKLQl9Ci0JaWYgKCFyYl9ub2RlKSB7Ci0JCWVtID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChJU19FUlIocmJfbm9kZSkpIHsKLQkJZW0gPSBFUlJfQ0FTVChyYl9ub2RlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVtID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGV4dGVudF9tYXAsIHJiX25vZGUpOwotCWlmIChlbmQgPiBlbS0+c3RhcnQgJiYgc3RhcnQgPCBleHRlbnRfbWFwX2VuZChlbSkpCi0JCWdvdG8gZm91bmQ7Ci0KLQllbSA9IE5VTEw7Ci0JZ290byBvdXQ7Ci0KLWZvdW5kOgotCWF0b21pY19pbmMoJmVtLT5yZWZzKTsKLW91dDoKLQlyZXR1cm4gZW07CisJcmV0dXJuIF9fbG9va3VwX2V4dGVudF9tYXBwaW5nKHRyZWUsIHN0YXJ0LCBsZW4sIDEpOwogfQogCiAvKioKQEAgLTM2NSwzOCArMzQxLDcgQEAKIHN0cnVjdCBleHRlbnRfbWFwICpzZWFyY2hfZXh0ZW50X21hcHBpbmcoc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqdHJlZSwKIAkJCQkJIHU2NCBzdGFydCwgdTY0IGxlbikKIHsKLQlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07Ci0Jc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnByZXYgPSBOVUxMOwotCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gTlVMTDsKLQotCXJiX25vZGUgPSBfX3RyZWVfc2VhcmNoKCZ0cmVlLT5tYXAsIHN0YXJ0LCAmcHJldiwgJm5leHQpOwotCWlmICghcmJfbm9kZSAmJiBwcmV2KSB7Ci0JCWVtID0gcmJfZW50cnkocHJldiwgc3RydWN0IGV4dGVudF9tYXAsIHJiX25vZGUpOwotCQlnb3RvIGZvdW5kOwotCX0KLQlpZiAoIXJiX25vZGUgJiYgbmV4dCkgewotCQllbSA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBleHRlbnRfbWFwLCByYl9ub2RlKTsKLQkJZ290byBmb3VuZDsKLQl9Ci0JaWYgKCFyYl9ub2RlKSB7Ci0JCWVtID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChJU19FUlIocmJfbm9kZSkpIHsKLQkJZW0gPSBFUlJfQ0FTVChyYl9ub2RlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVtID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGV4dGVudF9tYXAsIHJiX25vZGUpOwotCWdvdG8gZm91bmQ7Ci0KLQllbSA9IE5VTEw7Ci0JZ290byBvdXQ7Ci0KLWZvdW5kOgotCWF0b21pY19pbmMoJmVtLT5yZWZzKTsKLW91dDoKLQlyZXR1cm4gZW07CisJcmV0dXJuIF9fbG9va3VwX2V4dGVudF9tYXBwaW5nKHRyZWUsIHN0YXJ0LCBsZW4sIDApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKaW5kZXggMDhiY2ZhOS4uYTFjYjc4MiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKQEAgLTE4Myw4ICsxODMsMTAgQEAKIAkgKiByZWFkIGZyb20gdGhlIGNvbW1pdCByb290IGFuZCBzaWRlc3RlcCBhIG5hc3R5IGRlYWRsb2NrCiAJICogYmV0d2VlbiByZWFkaW5nIHRoZSBmcmVlIHNwYWNlIGNhY2hlIGFuZCB1cGRhdGluZyB0aGUgY3N1bSB0cmVlLgogCSAqLwotCWlmIChidHJmc19pc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSkKKwlpZiAoYnRyZnNfaXNfZnJlZV9zcGFjZV9pbm9kZShyb290LCBpbm9kZSkpIHsKIAkJcGF0aC0+c2VhcmNoX2NvbW1pdF9yb290ID0gMTsKKwkJcGF0aC0+c2tpcF9sb2NraW5nID0gMTsKKwl9CiAKIAlkaXNrX2J5dGVuciA9ICh1NjQpYmlvLT5iaV9zZWN0b3IgPDwgOTsKIAlpZiAoZGlvKQpAQCAtMjkxLDcgKzI5Myw4IEBACiAJdTE2IGNzdW1fc2l6ZSA9IGJ0cmZzX3N1cGVyX2NzdW1fc2l6ZSgmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCUJVR19PTighcGF0aCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChzZWFyY2hfY29tbWl0KSB7CiAJCXBhdGgtPnNraXBfbG9ja2luZyA9IDE7CkBAIC02NzcsNyArNjgwLDkgQEAKIAkJYnRyZnNfc3VwZXJfY3N1bV9zaXplKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JQlVHX09OKCFwYXRoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJc2VjdG9yX3N1bSA9IHN1bXMtPnN1bXM7CiBhZ2FpbjoKIAluZXh0X29mZnNldCA9ICh1NjQpLTE7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLmMgYi9mcy9idHJmcy9maWxlLmMKaW5kZXggYTM1ZTUxYy4uM2MzYWJmZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUuYwpAQCAtNzQsNyArNzQsNyBAQAogICogSWYgYW4gZXhpc3RpbmcgcmVjb3JkIGlzIGZvdW5kIHRoZSBkZWZyYWcgaXRlbSB5b3UKICAqIHBhc3MgaW4gaXMgZnJlZWQKICAqLwotc3RhdGljIGludCBfX2J0cmZzX2FkZF9pbm9kZV9kZWZyYWcoc3RydWN0IGlub2RlICppbm9kZSwKK3N0YXRpYyB2b2lkIF9fYnRyZnNfYWRkX2lub2RlX2RlZnJhZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGVfZGVmcmFnICpkZWZyYWcpCiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKQEAgLTEwNiwxMSArMTA2LDExIEBACiAJQlRSRlNfSShpbm9kZSktPmluX2RlZnJhZyA9IDE7CiAJcmJfbGlua19ub2RlKCZkZWZyYWctPnJiX25vZGUsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZkZWZyYWctPnJiX25vZGUsICZyb290LT5mc19pbmZvLT5kZWZyYWdfaW5vZGVzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm47CiAKIGV4aXN0czoKIAlrZnJlZShkZWZyYWcpOwotCXJldHVybiAwOworCXJldHVybjsKIAogfQogCkBAIC0xMjMsNyArMTIzLDYgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBpbm9kZV9kZWZyYWcgKmRlZnJhZzsKLQlpbnQgcmV0ID0gMDsKIAl1NjQgdHJhbnNpZDsKIAogCWlmICghYnRyZnNfdGVzdF9vcHQocm9vdCwgQVVUT19ERUZSQUcpKQpAQCAtMTUwLDkgKzE0OSwxMSBAQAogCiAJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWZyYWdfaW5vZGVzX2xvY2spOwogCWlmICghQlRSRlNfSShpbm9kZSktPmluX2RlZnJhZykKLQkJcmV0ID0gX19idHJmc19hZGRfaW5vZGVfZGVmcmFnKGlub2RlLCBkZWZyYWcpOworCQlfX2J0cmZzX2FkZF9pbm9kZV9kZWZyYWcoaW5vZGUsIGRlZnJhZyk7CisJZWxzZQorCQlrZnJlZShkZWZyYWcpOwogCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5kZWZyYWdfaW5vZGVzX2xvY2spOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC04NTUsNyArODU2LDggQEAKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIGVuZCAtIDEsIDApOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiBhZ2FpbjoKIAlyZWNvdyA9IDA7CiAJc3BsaXQgPSBzdGFydDsKQEAgLTEwNTksNyArMTA2MSw3IEBACiBzdGF0aWMgbm9pbmxpbmUgaW50IHByZXBhcmVfcGFnZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMsCiAJCQkgbG9mZl90IHBvcywgdW5zaWduZWQgbG9uZyBmaXJzdF9pbmRleCwKLQkJCSB1bnNpZ25lZCBsb25nIGxhc3RfaW5kZXgsIHNpemVfdCB3cml0ZV9ieXRlcykKKwkJCSBzaXplX3Qgd3JpdGVfYnl0ZXMpCiB7CiAJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gTlVMTDsKIAlpbnQgaTsKQEAgLTEwNzMsMTIgKzEwNzUsNiBAQAogCXN0YXJ0X3BvcyA9IHBvcyAmIH4oKHU2NClyb290LT5zZWN0b3JzaXplIC0gMSk7CiAJbGFzdF9wb3MgPSAoKHU2NClpbmRleCArIG51bV9wYWdlcykgPDwgUEFHRV9DQUNIRV9TSElGVDsKIAotCWlmIChzdGFydF9wb3MgPiBpbm9kZS0+aV9zaXplKSB7Ci0JCWVyciA9IGJ0cmZzX2NvbnRfZXhwYW5kKGlub2RlLCBpX3NpemVfcmVhZChpbm9kZSksIHN0YXJ0X3Bvcyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CiAJCXBhZ2VzW2ldID0gZmluZF9vcl9jcmVhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCArIGksCkBAIC0xMTU5LDcgKzExNTUsNiBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9pbmRleDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfaW5kZXg7CiAJc2l6ZV90IG51bV93cml0dGVuID0gMDsKIAlpbnQgbnJwdHJzOwogCWludCByZXQgPSAwOwpAQCAtMTE3Miw3ICsxMTY3LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmaXJzdF9pbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCWxhc3RfaW5kZXggPSAocG9zICsgaW92X2l0ZXJfY291bnQoaSkpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAl3aGlsZSAoaW92X2l0ZXJfY291bnQoaSkgPiAwKSB7CiAJCXNpemVfdCBvZmZzZXQgPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0xMjA2LDggKzEyMDAsNyBAQAogCQkgKiBjb250ZW50cyBvZiBwYWdlcyBmcm9tIGxvb3AgdG8gbG9vcAogCQkgKi8KIAkJcmV0ID0gcHJlcGFyZV9wYWdlcyhyb290LCBmaWxlLCBwYWdlcywgbnVtX3BhZ2VzLAotCQkJCSAgICBwb3MsIGZpcnN0X2luZGV4LCBsYXN0X2luZGV4LAotCQkJCSAgICB3cml0ZV9ieXRlcyk7CisJCQkJICAgIHBvcywgZmlyc3RfaW5kZXgsIHdyaXRlX2J5dGVzKTsKIAkJaWYgKHJldCkgewogCQkJYnRyZnNfZGVsYWxsb2NfcmVsZWFzZV9zcGFjZShpbm9kZSwKIAkJCQkJbnVtX3BhZ2VzIDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwpAQCAtMTMzOSw2ICsxMzMyLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmRlbnRyeShmaWxlKS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCWxvZmZfdCAqcHBvcyA9ICZpb2NiLT5raV9wb3M7CisJdTY0IHN0YXJ0X3BvczsKIAlzc2l6ZV90IG51bV93cml0dGVuID0gMDsKIAlzc2l6ZV90IGVyciA9IDA7CiAJc2l6ZV90IGNvdW50LCBvY291bnQ7CkBAIC0xMzg3LDYgKzEzODEsMTUgQEAKIAlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCUJUUkZTX0koaW5vZGUpLT5zZXF1ZW5jZSsrOwogCisJc3RhcnRfcG9zID0gcm91bmRfZG93bihwb3MsIHJvb3QtPnNlY3RvcnNpemUpOworCWlmIChzdGFydF9wb3MgPiBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJZXJyID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSwgc3RhcnRfcG9zKTsKKwkJaWYgKGVycikgeworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCWlmICh1bmxpa2VseShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKSB7CiAJCW51bV93cml0dGVuID0gX19idHJmc19kaXJlY3Rfd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLAogCQkJCQkJICAgcG9zLCBwcG9zLCBjb3VudCwgb2NvdW50KTsKQEAgLTE2NDEsMTEgKzE2NDQsMTUgQEAKIAogCWN1cl9vZmZzZXQgPSBhbGxvY19zdGFydDsKIAl3aGlsZSAoMSkgeworCQl1NjQgYWN0dWFsX2VuZDsKKwogCQllbSA9IGJ0cmZzX2dldF9leHRlbnQoaW5vZGUsIE5VTEwsIDAsIGN1cl9vZmZzZXQsCiAJCQkJICAgICAgYWxsb2NfZW5kIC0gY3VyX29mZnNldCwgMCk7CiAJCUJVR19PTihJU19FUlJfT1JfTlVMTChlbSkpOwogCQlsYXN0X2J5dGUgPSBtaW4oZXh0ZW50X21hcF9lbmQoZW0pLCBhbGxvY19lbmQpOworCQlhY3R1YWxfZW5kID0gbWluX3QodTY0LCBleHRlbnRfbWFwX2VuZChlbSksIG9mZnNldCArIGxlbik7CiAJCWxhc3RfYnl0ZSA9IChsYXN0X2J5dGUgKyBtYXNrKSAmIH5tYXNrOworCiAJCWlmIChlbS0+YmxvY2tfc3RhcnQgPT0gRVhURU5UX01BUF9IT0xFIHx8CiAJCSAgICAoY3VyX29mZnNldCA+PSBpbm9kZS0+aV9zaXplICYmCiAJCSAgICAgIXRlc3RfYml0KEVYVEVOVF9GTEFHX1BSRUFMTE9DLCAmZW0tPmZsYWdzKSkpIHsKQEAgLTE2NTgsNiArMTY2NSwxNiBAQAogCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCX0gZWxzZSBpZiAoYWN0dWFsX2VuZCA+IGlub2RlLT5pX3NpemUgJiYKKwkJCSAgICEobW9kZSAmIEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7CisJCQkvKgorCQkJICogV2UgZGlkbid0IG5lZWQgdG8gYWxsb2NhdGUgYW55IG1vcmUgc3BhY2UsIGJ1dCB3ZQorCQkJICogc3RpbGwgZXh0ZW5kZWQgdGhlIHNpemUgb2YgdGhlIGZpbGUgc28gd2UgbmVlZCB0bworCQkJICogdXBkYXRlIGlfc2l6ZS4KKwkJCSAqLworCQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGFjdHVhbF9lbmQpOworCQkJYnRyZnNfb3JkZXJlZF91cGRhdGVfaV9zaXplKGlub2RlLCBhY3R1YWxfZW5kLCBOVUxMKTsKIAkJfQogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCkBAIC0xODA3LDEwICsxODI0LDE0IEBACiAJCX0KIAl9CiAKLQlpZiAob2Zmc2V0IDwgMCAmJiAhKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1VOU0lHTkVEX09GRlNFVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChvZmZzZXQgPiBpbm9kZS0+aV9zYi0+c19tYXhieXRlcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG9mZnNldCA8IDAgJiYgIShmaWxlLT5mX21vZGUgJiBGTU9ERV9VTlNJR05FRF9PRkZTRVQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogU3BlY2lhbCBsb2NrIG5lZWRlZCBoZXJlPyAqLwogCWlmIChvZmZzZXQgIT0gZmlsZS0+Zl9wb3MpIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCA2Mzc3NzEzLi40MWFjOTI3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC0xOTAsOSArMTkwLDExIEBACiAJCQkJICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKnJzdjsKIAlsb2ZmX3Qgb2xkc2l6ZTsKIAlpbnQgcmV0ID0gMDsKIAorCXJzdiA9IHRyYW5zLT5ibG9ja19yc3Y7CiAJdHJhbnMtPmJsb2NrX3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7CiAJcmV0ID0gYnRyZnNfYmxvY2tfcnN2X2NoZWNrKHRyYW5zLCByb290LAogCQkJCSAgICByb290LT5vcnBoYW5fYmxvY2tfcnN2LApAQCAtMjEwLDYgKzIxMiw4IEBACiAJICovCiAJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXModHJhbnMsIHJvb3QsIGlub2RlLAogCQkJCQkgMCwgQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKKworCXRyYW5zLT5ibG9ja19yc3YgPSByc3Y7CiAJaWYgKHJldCkgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTE2OCw5ICsxMTcyLDkgQEAKIAkJZGl2NjRfdTY0KGV4dGVudF9ieXRlcywgKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSkpKTsKIH0KIAotc3RhdGljIHZvaWQgYml0bWFwX2NsZWFyX2JpdHMoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCi0JCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgdTY0IG9mZnNldCwKLQkJCSAgICAgIHU2NCBieXRlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2JpdG1hcF9jbGVhcl9iaXRzKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsLAorCQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywKKwkJCQkgICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGNvdW50OwogCkBAIC0xMTgxLDYgKzExODUsMTMgQEAKIAliaXRtYXBfY2xlYXIoaW5mby0+Yml0bWFwLCBzdGFydCwgY291bnQpOwogCiAJaW5mby0+Ynl0ZXMgLT0gYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGJpdG1hcF9jbGVhcl9iaXRzKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsLAorCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8sIHU2NCBvZmZzZXQsCisJCQkgICAgICB1NjQgYnl0ZXMpCit7CisJX19iaXRtYXBfY2xlYXJfYml0cyhjdGwsIGluZm8sIG9mZnNldCwgYnl0ZXMpOwogCWN0bC0+ZnJlZV9zcGFjZSAtPSBieXRlczsKIH0KIApAQCAtMTk4NCw3ICsxOTk1LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBzZWFyY2hfc3RhcnQ7Ci0JYml0bWFwX2NsZWFyX2JpdHMoY3RsLCBlbnRyeSwgcmV0LCBieXRlcyk7CisJX19iaXRtYXBfY2xlYXJfYml0cyhjdGwsIGVudHJ5LCByZXQsIGJ5dGVzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMDM5LDcgKzIwNTAsNiBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9IGVsc2UgewotCiAJCQlyZXQgPSBlbnRyeS0+b2Zmc2V0OwogCiAJCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMTNlNjI1NS4uNGQxNGRlNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0xMDYxLDcgKzEwNjEsOCBAQAogCXU2NCBpbm8gPSBidHJmc19pbm8oaW5vZGUpOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlub2xvY2sgPSBidHJmc19pc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKTsKIApAQCAtMTI4MiwxNyArMTI4MywxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYnRyZnNfc3BsaXRfZXh0ZW50X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLCB1NjQgc3BsaXQpCitzdGF0aWMgdm9pZCBidHJmc19zcGxpdF9leHRlbnRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvcmlnLCB1NjQgc3BsaXQpCiB7CiAJLyogbm90IGRlbGFsbG9jLCBpZ25vcmUgaXQgKi8KIAlpZiAoIShvcmlnLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5sb2NrKTsKIAlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cysrOwogCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+bG9jayk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMzAxLDE4ICsxMzAxLDE3IEBACiAgKiBleHRlbnRzLCBzdWNoIGFzIHdoZW4gd2UgYXJlIGRvaW5nIHNlcXVlbnRpYWwgd3JpdGVzLCBzbyB3ZSBjYW4gcHJvcGVybHkKICAqIGFjY291bnQgZm9yIHRoZSBtZXRhZGF0YSBzcGFjZSB3ZSdsbCBuZWVkLgogICovCi1zdGF0aWMgaW50IGJ0cmZzX21lcmdlX2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAotCQkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKQorc3RhdGljIHZvaWQgYnRyZnNfbWVyZ2VfZXh0ZW50X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcikKIHsKIAkvKiBub3QgZGVsYWxsb2MsIGlnbm9yZSBpdCAqLwogCWlmICghKG90aGVyLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5sb2NrKTsKIAlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cy0tOwogCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+bG9jayk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMzIwLDggKzEzMTksOCBAQAogICogYnl0ZXMgaW4gdGhpcyBmaWxlLCBhbmQgdG8gbWFpbnRhaW4gdGhlIGxpc3Qgb2YgaW5vZGVzIHRoYXQKICAqIGhhdmUgcGVuZGluZyBkZWxhbGxvYyB3b3JrIHRvIGJlIGRvbmUuCiAgKi8KLXN0YXRpYyBpbnQgYnRyZnNfc2V0X2JpdF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgaW50ICpiaXRzKQorc3RhdGljIHZvaWQgYnRyZnNfc2V0X2JpdF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsIGludCAqYml0cykKIHsKIAogCS8qCkBAIC0xMzUxLDE0ICsxMzUwLDEzIEBACiAJCX0KIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyoKICAqIGV4dGVudF9pby5jIGNsZWFyX2JpdF9ob29rLCBzZWUgc2V0X2JpdF9ob29rIGZvciB3aHkKICAqLwotc3RhdGljIGludCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgKmJpdHMpCitzdGF0aWMgdm9pZCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgaW50ICpiaXRzKQogewogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQpAQCAtMTM5NSw3ICsxMzkzLDYgQEAKIAkJfQogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTY0NSw3ICsxNjQyLDggQEAKIAlpbnQgcmV0OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAKQEAgLTE3ODgsNyArMTc4Niw3IEBACiAJCQkgICZvcmRlcmVkX2V4dGVudC0+bGlzdCk7CiAKIAlyZXQgPSBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWRfZXh0ZW50KTsKLQlpZiAoIXJldCkgeworCWlmICghcmV0IHx8ICF0ZXN0X2JpdChCVFJGU19PUkRFUkVEX1BSRUFMTE9DLCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkgewogCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAkJQlVHX09OKHJldCk7CiAJfQpAQCAtMjIxNSw3ICsyMjEzLDggQEAKIAogCWlmICghcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdikgewogCQlibG9ja19yc3YgPSBidHJmc19hbGxvY19ibG9ja19yc3Yocm9vdCk7Ci0JCUJVR19PTighYmxvY2tfcnN2KTsKKwkJaWYgKCFibG9ja19yc3YpCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlzcGluX2xvY2soJnJvb3QtPm9ycGhhbl9sb2NrKTsKQEAgLTI1MTcsNyArMjUxNiw5IEBACiAJCWZpbGxlZCA9IHRydWU7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCUJVR19PTighcGF0aCk7CisJaWYgKCFwYXRoKQorCQlnb3RvIG1ha2VfYmFkOworCiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCW1lbWNweSgmbG9jYXRpb24sICZCVFJGU19JKGlub2RlKS0+bG9jYXRpb24sIHNpemVvZihsb2NhdGlvbikpOwogCkBAIC0yOTk4LDEzICsyOTk5LDE2IEBACiAKIAlyZXQgPSBidHJmc191bmxpbmtfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX2lub2RlLAogCQkJCSBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4pOwotCUJVR19PTihyZXQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJaWYgKGlub2RlLT5pX25saW5rID09IDApIHsKIAkJcmV0ID0gYnRyZnNfb3JwaGFuX2FkZCh0cmFucywgaW5vZGUpOwotCQlCVUdfT04ocmV0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OwogCX0KIAorb3V0OgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCV9fdW5saW5rX2VuZF90cmFucyh0cmFucywgcm9vdCk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CkBAIC0zMTQ3LDYgKzMxNTEsMTEgQEAKIAogCUJVR19PTihuZXdfc2l6ZSA+IDAgJiYgbWluX3R5cGUgIT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKTsKIAorCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwYXRoLT5yZWFkYSA9IC0xOworCiAJaWYgKHJvb3QtPnJlZl9jb3dzIHx8IHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290KQogCQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgbmV3X3NpemUgJiAofm1hc2spLCAodTY0KS0xLCAwKTsKIApAQCAtMzE1OSwxMCArMzE2OCw2IEBACiAJaWYgKG1pbl90eXBlID09IDAgJiYgcm9vdCA9PSBCVFJGU19JKGlub2RlKS0+cm9vdCkKIAkJYnRyZnNfa2lsbF9kZWxheWVkX2lub2RlX2l0ZW1zKGlub2RlKTsKIAotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JQlVHX09OKCFwYXRoKTsKLQlwYXRoLT5yZWFkYSA9IC0xOwotCiAJa2V5Lm9iamVjdGlkID0gaW5vOwogCWtleS5vZmZzZXQgPSAodTY0KS0xOwogCWtleS50eXBlID0gKHU4KS0xOwpAQCAtMzUwNSwxNSArMzUxMCwxOSBAQAogCQkJZXJyID0gYnRyZnNfZHJvcF9leHRlbnRzKHRyYW5zLCBpbm9kZSwgY3VyX29mZnNldCwKIAkJCQkJCSBjdXJfb2Zmc2V0ICsgaG9sZV9zaXplLAogCQkJCQkJICZoaW50X2J5dGUsIDEpOwotCQkJaWYgKGVycikKKwkJCWlmIChlcnIpIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJCWJyZWFrOworCQkJfQogCiAJCQllcnIgPSBidHJmc19pbnNlcnRfZmlsZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCWJ0cmZzX2lubyhpbm9kZSksIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKLQkJCWlmIChlcnIpCisJCQlpZiAoZXJyKSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQlicmVhazsKKwkJCX0KIAogCQkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIGhvbGVfc3RhcnQsCiAJCQkJCWxhc3RfYnl0ZSAtIDEsIDApOwpAQCAtMzY5MCw3ICszNjk5LDggQEAKIAlpbnQgcmV0ID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JQlVHX09OKCFwYXRoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZGkgPSBidHJmc19sb29rdXBfZGlyX2l0ZW0oTlVMTCwgcm9vdCwgcGF0aCwgYnRyZnNfaW5vKGRpciksIG5hbWUsCiAJCQkJICAgIG5hbWVsZW4sIDApOwpAQCAtMzk1NSwxMCArMzk2NSwxNiBAQAogCQlCVFJGU19JKGlub2RlKS0+cm9vdCA9IHJvb3Q7CiAJCW1lbWNweSgmQlRSRlNfSShpbm9kZSktPmxvY2F0aW9uLCBsb2NhdGlvbiwgc2l6ZW9mKCpsb2NhdGlvbikpOwogCQlidHJmc19yZWFkX2xvY2tlZF9pbm9kZShpbm9kZSk7Ci0JCWlub2RlX3RyZWVfYWRkKGlub2RlKTsKLQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JCWlmIChuZXcpCi0JCQkqbmV3ID0gMTsKKwkJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKSB7CisJCQlpbm9kZV90cmVlX2FkZChpbm9kZSk7CisJCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKwkJCWlmIChuZXcpCisJCQkJKm5ldyA9IDE7CisJCX0gZWxzZSB7CisJCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKwkJCWlwdXQoaW5vZGUpOworCQkJaW5vZGUgPSBFUlJfUFRSKC1FU1RBTEUpOworCQl9CiAJfQogCiAJcmV0dXJuIGlub2RlOwpAQCAtMzk5MywxMiArNDAwOSwxOSBAQAogCXN0cnVjdCBidHJmc19yb290ICpzdWJfcm9vdCA9IHJvb3Q7CiAJc3RydWN0IGJ0cmZzX2tleSBsb2NhdGlvbjsKIAlpbnQgaW5kZXg7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBCVFJGU19OQU1FX0xFTikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiAKLQlyZXQgPSBidHJmc19pbm9kZV9ieV9uYW1lKGRpciwgZGVudHJ5LCAmbG9jYXRpb24pOworCWlmICh1bmxpa2VseShkX25lZWRfbG9va3VwKGRlbnRyeSkpKSB7CisJCW1lbWNweSgmbG9jYXRpb24sIGRlbnRyeS0+ZF9mc2RhdGEsIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSk7CisJCWtmcmVlKGRlbnRyeS0+ZF9mc2RhdGEpOworCQlkZW50cnktPmRfZnNkYXRhID0gTlVMTDsKKwkJZF9jbGVhcl9uZWVkX2xvb2t1cChkZW50cnkpOworCX0gZWxzZSB7CisJCXJldCA9IGJ0cmZzX2lub2RlX2J5X25hbWUoZGlyLCBkZW50cnksICZsb2NhdGlvbik7CisJfQogCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC00MDUzLDYgKzQwNzYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYnRyZnNfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlmIChkZW50cnktPmRfZnNkYXRhKQorCQlrZnJlZShkZW50cnktPmRfZnNkYXRhKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmJ0cmZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewpAQCAtNDA3NSw2ICs0MTA0LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGluc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGVsX2xpc3Q7CisJc3RydWN0IHFzdHIgcTsKIAlpbnQgcmV0OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCWludCBzbG90OwpAQCAtNDE2NCw2ICs0MTk0LDcgQEAKIAogCQl3aGlsZSAoZGlfY3VyIDwgZGlfdG90YWwpIHsKIAkJCXN0cnVjdCBidHJmc19rZXkgbG9jYXRpb247CisJCQlzdHJ1Y3QgZGVudHJ5ICp0bXA7CiAKIAkJCWlmICh2ZXJpZnlfZGlyX2l0ZW0ocm9vdCwgbGVhZiwgZGkpKQogCQkJCWJyZWFrOwpAQCAtNDE4NCw2ICs0MjE1LDMzIEBACiAJCQlkX3R5cGUgPSBidHJmc19maWxldHlwZV90YWJsZVtidHJmc19kaXJfdHlwZShsZWFmLCBkaSldOwogCQkJYnRyZnNfZGlyX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCBkaSwgJmxvY2F0aW9uKTsKIAorCQkJcS5uYW1lID0gbmFtZV9wdHI7CisJCQlxLmxlbiA9IG5hbWVfbGVuOworCQkJcS5oYXNoID0gZnVsbF9uYW1lX2hhc2gocS5uYW1lLCBxLmxlbik7CisJCQl0bXAgPSBkX2xvb2t1cChmaWxwLT5mX2RlbnRyeSwgJnEpOworCQkJaWYgKCF0bXApIHsKKwkJCQlzdHJ1Y3QgYnRyZnNfa2V5ICpuZXdrZXk7CisKKwkJCQluZXdrZXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSwKKwkJCQkJCSBHRlBfTk9GUyk7CisJCQkJaWYgKCFuZXdrZXkpCisJCQkJCWdvdG8gbm9fZGVudHJ5OworCQkJCXRtcCA9IGRfYWxsb2MoZmlscC0+Zl9kZW50cnksICZxKTsKKwkJCQlpZiAoIXRtcCkgeworCQkJCQlrZnJlZShuZXdrZXkpOworCQkJCQlkcHV0KHRtcCk7CisJCQkJCWdvdG8gbm9fZGVudHJ5OworCQkJCX0KKwkJCQltZW1jcHkobmV3a2V5LCAmbG9jYXRpb24sCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSk7CisJCQkJdG1wLT5kX2ZzZGF0YSA9IG5ld2tleTsKKwkJCQl0bXAtPmRfZmxhZ3MgfD0gRENBQ0hFX05FRURfTE9PS1VQOworCQkJCWRfcmVoYXNoKHRtcCk7CisJCQkJZHB1dCh0bXApOworCQkJfSBlbHNlIHsKKwkJCQlkcHV0KHRtcCk7CisJCQl9Citub19kZW50cnk6CiAJCQkvKiBpcyB0aGlzIGEgcmVmZXJlbmNlIHRvIG91ciBvd24gc25hcHNob3Q/IElmIHNvCiAJCQkgKiBza2lwIGl0CiAJCQkgKi8KQEAgLTQ0MDksNyArNDQ2Nyw4IEBACiAJaW50IG93bmVyOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpbm9kZSA9IG5ld19pbm9kZShyb290LT5mc19pbmZvLT5zYik7CiAJaWYgKCFpbm9kZSkgewpAQCAtNTc2NCw3ICs1ODIzLDcgQEAKIAogCWFkZF9wZW5kaW5nX2NzdW1zKHRyYW5zLCBpbm9kZSwgb3JkZXJlZC0+ZmlsZV9vZmZzZXQsICZvcmRlcmVkLT5saXN0KTsKIAlyZXQgPSBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWQpOwotCWlmICghcmV0KQorCWlmICghcmV0IHx8ICF0ZXN0X2JpdChCVFJGU19PUkRFUkVEX1BSRUFMTE9DLCAmb3JkZXJlZC0+ZmxhZ3MpKQogCQlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlyZXQgPSAwOwogb3V0X3VubG9jazoKQEAgLTY2NjksMTkgKzY3MjgsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGZpbGUgZGVmcmFnIGFuZCBzcGFjZSBiYWxhbmNpbmcuICBUaGlzCi0gKiBmb3JjZXMgcmVhZGFoZWFkIG9uIGEgZ2l2ZW4gcmFuZ2Ugb2YgYnl0ZXMgaW4gYW4gaW5vZGUKLSAqLwotdW5zaWduZWQgbG9uZyBidHJmc19mb3JjZV9yYShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBwZ29mZl90IG9mZnNldCwgcGdvZmZfdCBsYXN0X2luZGV4KQotewotCXBnb2ZmX3QgcmVxX3NpemUgPSBsYXN0X2luZGV4IC0gb2Zmc2V0ICsgMTsKLQotCXBhZ2VfY2FjaGVfc3luY19yZWFkYWhlYWQobWFwcGluZywgcmEsIGZpbGUsIG9mZnNldCwgcmVxX3NpemUpOwotCXJldHVybiBvZmZzZXQgKyByZXFfc2l6ZTsKLX0KLQogc3RydWN0IGlub2RlICpidHJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBidHJmc19pbm9kZSAqZWk7CkBAIC03MTY0LDcgKzcyMTAsMTEgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkgeworCQllcnIgPSAtRU5PTUVNOworCQlkcm9wX2lub2RlID0gMTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlrZXkub2JqZWN0aWQgPSBidHJmc19pbm8oaW5vZGUpOwogCWtleS5vZmZzZXQgPSAwOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19FWFRFTlRfREFUQV9LRVkpOwpAQCAtNzMwNCwxMSArNzM1NCwxNSBAQAogc3RhdGljIGludCBidHJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJdW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKIAotCWlmIChidHJmc19yb290X3JlYWRvbmx5KHJvb3QpICYmIChtYXNrICYgTUFZX1dSSVRFKSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoKEJUUkZTX0koaW5vZGUpLT5mbGFncyAmIEJUUkZTX0lOT0RFX1JFQURPTkxZKSAmJiAobWFzayAmIE1BWV9XUklURSkpCi0JCXJldHVybiAtRUFDQ0VTOworCWlmIChtYXNrICYgTUFZX1dSSVRFICYmCisJICAgIChTX0lTUkVHKG1vZGUpIHx8IFNfSVNESVIobW9kZSkgfHwgU19JU0xOSyhtb2RlKSkpIHsKKwkJaWYgKGJ0cmZzX3Jvb3RfcmVhZG9ubHkocm9vdCkpCisJCQlyZXR1cm4gLUVST0ZTOworCQlpZiAoQlRSRlNfSShpbm9kZSktPmZsYWdzICYgQlRSRlNfSU5PREVfUkVBRE9OTFkpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CiAJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiB9CiAKQEAgLTc0MzAsNCArNzQ4NCw1IEBACiAKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBidHJmc19kZW50cnlfZGVsZXRlLAorCS5kX3JlbGVhc2UJPSBidHJmc19kZW50cnlfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCAwYjk4MGFmLi4zMzUxYjFiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTE3NDksMTEgKzE3NDksMTAgQEAKIAkJa2V5Lm9iamVjdGlkID0ga2V5Lm9mZnNldDsKIAkJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAJCWRpcmlkID0ga2V5Lm9iamVjdGlkOwotCiAJfQogCWlmIChwdHIgPCBuYW1lKQogCQlnb3RvIG91dDsKLQltZW1jcHkobmFtZSwgcHRyLCB0b3RhbF9sZW4pOworCW1lbW1vdmUobmFtZSwgcHRyLCB0b3RhbF9sZW4pOwogCW5hbWVbdG90YWxfbGVuXT0nXDAnOwogCXJldCA9IDA7CiBvdXQ6CkBAIC0yMjIxLDYgKzIyMjAsMTIgQEAKIAkgICAgIUlTX0FMSUdORUQoZGVzdG9mZiwgYnMpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlpZiAoZGVzdG9mZiA+IGlub2RlLT5pX3NpemUpIHsKKwkJcmV0ID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLT5pX3NpemUsIGRlc3RvZmYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIGRvIGFueSBwZW5kaW5nIGRlbGFsbG9jL2NzdW0gY2FsYyBvbiBzcmMsIG9uZSB3YXkgb3IKIAkgICBhbm90aGVyLCBhbmQgbG9jayBmaWxlIGNvbnRlbnQgKi8KIAl3aGlsZSAoMSkgewpAQCAtMjIzNyw2ICsyMjQyLDEwIEBACiAJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShzcmMsIG9mZiwgbGVuKTsKIAl9CiAKKwkvKiB0cnVuY2F0ZSBwYWdlIGNhY2hlIHBhZ2VzIGZyb20gdGFyZ2V0IGlub2RlIHJhbmdlICovCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoJmlub2RlLT5pX2RhdGEsIG9mZiwKKwkJCQkgICBBTElHTihvZmYgKyBsZW4sIFBBR0VfQ0FDSEVfU0laRSkgLSAxKTsKKwogCS8qIGNsb25lIGRhdGEgKi8KIAlrZXkub2JqZWN0aWQgPSBidHJmc19pbm8oc3JjKTsKIAlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWTsKQEAgLTIzMjIsMTQgKzIzMzEsMjEgQEAKIAogCQkJaWYgKHR5cGUgPT0gQlRSRlNfRklMRV9FWFRFTlRfUkVHIHx8CiAJCQkgICAgdHlwZSA9PSBCVFJGU19GSUxFX0VYVEVOVF9QUkVBTExPQykgeworCQkJCS8qCisJCQkJICogICAgYSAgfCAtLS0gcmFuZ2UgdG8gY2xvbmUgLS0tfCAgYgorCQkJCSAqIHwgLS0tLS0tLS0tLS0tLSBleHRlbnQgLS0tLS0tLS0tLS0tLSB8CisJCQkJICovCisKKwkJCQkvKiBzdWJzdHJhY3QgcmFuZ2UgYiAqLworCQkJCWlmIChrZXkub2Zmc2V0ICsgZGF0YWwgPiBvZmYgKyBsZW4pCisJCQkJCWRhdGFsID0gb2ZmICsgbGVuIC0ga2V5Lm9mZnNldDsKKworCQkJCS8qIHN1YnN0cmFjdCByYW5nZSBhICovCiAJCQkJaWYgKG9mZiA+IGtleS5vZmZzZXQpIHsKIAkJCQkJZGF0YW8gKz0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQkJZGF0YWwgLT0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQl9CiAKLQkJCQlpZiAoa2V5Lm9mZnNldCArIGRhdGFsID4gb2ZmICsgbGVuKQotCQkJCQlkYXRhbCA9IG9mZiArIGxlbiAtIGtleS5vZmZzZXQ7Ci0KIAkJCQlyZXQgPSBidHJmc19kcm9wX2V4dGVudHModHJhbnMsIGlub2RlLAogCQkJCQkJCSBuZXdfa2V5Lm9mZnNldCwKIAkJCQkJCQkgbmV3X2tleS5vZmZzZXQgKyBkYXRhbCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlZi1jYWNoZS5jIGIvZnMvYnRyZnMvcmVmLWNhY2hlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZDU2OWMuLjAwMDAwMDAKLS0tIGEvZnMvYnRyZnMvcmVmLWNhY2hlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KLSNpbmNsdWRlICJjdHJlZS5oIgotI2luY2x1ZGUgInJlZi1jYWNoZS5oIgotI2luY2x1ZGUgInRyYW5zYWN0aW9uLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqdHJlZV9pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCi0JCQkJICAgc3RydWN0IHJiX25vZGUgKm5vZGUpCi17Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2xlYWZfcmVmICplbnRyeTsKLQotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJZW50cnkgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBidHJmc19sZWFmX3JlZiwgcmJfbm9kZSk7Ci0KLQkJaWYgKGJ5dGVuciA8IGVudHJ5LT5ieXRlbnIpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGJ5dGVuciA+IGVudHJ5LT5ieXRlbnIpCi0JCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlCi0JCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2xlYWZfcmVmLCByYl9ub2RlKTsKLQlyYl9saW5rX25vZGUobm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3Iobm9kZSwgcm9vdCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqdHJlZV9zZWFyY2goc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOwotCXN0cnVjdCBidHJmc19sZWFmX3JlZiAqZW50cnk7Ci0KLQl3aGlsZSAobikgewotCQllbnRyeSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBidHJmc19sZWFmX3JlZiwgcmJfbm9kZSk7Ci0JCVdBUk5fT04oIWVudHJ5LT5pbl90cmVlKTsKLQotCQlpZiAoYnl0ZW5yIDwgZW50cnktPmJ5dGVucikKLQkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChieXRlbnIgPiBlbnRyeS0+Ynl0ZW5yKQotCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlCi0JCQlyZXR1cm4gbjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWYtY2FjaGUuaCBiL2ZzL2J0cmZzL3JlZi1jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGY3MDAxLi4wMDAwMDAwCi0tLSBhL2ZzL2J0cmZzL3JlZi1jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgotICovCi0jaWZuZGVmIF9fUkVGQ0FDSEVfXwotI2RlZmluZSBfX1JFRkNBQ0hFX18KLQotc3RydWN0IGJ0cmZzX2V4dGVudF9pbmZvIHsKLQkvKiBieXRlbnIgYW5kIG51bV9ieXRlcyBmaW5kIHRoZSBleHRlbnQgaW4gdGhlIGV4dGVudCBhbGxvY2F0aW9uIHRyZWUgKi8KLQl1NjQgYnl0ZW5yOwotCXU2NCBudW1fYnl0ZXM7Ci0KLQkvKiBvYmplY3RpZCBhbmQgb2Zmc2V0IGZpbmQgdGhlIGJhY2sgcmVmZXJlbmNlIGZvciB0aGUgZmlsZSAqLwotCXU2NCBvYmplY3RpZDsKLQl1NjQgb2Zmc2V0OwotfTsKLQotc3RydWN0IGJ0cmZzX2xlYWZfcmVmIHsKLQlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOwotCXN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlICp0cmVlOwotCWludCBpbl90cmVlOwotCWF0b21pY190IHVzYWdlOwotCi0JdTY0IHJvb3RfZ2VuOwotCXU2NCBieXRlbnI7Ci0JdTY0IG93bmVyOwotCXU2NCBnZW5lcmF0aW9uOwotCWludCBucml0ZW1zOwotCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBidHJmc19leHRlbnRfaW5mbyBleHRlbnRzW107Ci19OwotCi1zdGF0aWMgaW5saW5lIHNpemVfdCBidHJmc19sZWFmX3JlZl9zaXplKGludCBucl9leHRlbnRzKQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IGJ0cmZzX2xlYWZfcmVmKSArCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgYnRyZnNfZXh0ZW50X2luZm8pICogbnJfZXh0ZW50czsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcm9vdC10cmVlLmMgYi9mcy9idHJmcy9yb290LXRyZWUuYwppbmRleCBlYmU0NTQ0Li5mNDA5OTkwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yb290LXRyZWUuYworKysgYi9mcy9idHJmcy9yb290LXRyZWUuYwpAQCAtNzEsMTMgKzcxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGJ0cmZzX3NldF9yb290X25vZGUoc3RydWN0IGJ0cmZzX3Jvb3RfaXRlbSAqaXRlbSwKLQkJCXN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlKQordm9pZCBidHJmc19zZXRfcm9vdF9ub2RlKHN0cnVjdCBidHJmc19yb290X2l0ZW0gKml0ZW0sCisJCQkgc3RydWN0IGV4dGVudF9idWZmZXIgKm5vZGUpCiB7CiAJYnRyZnNfc2V0X3Jvb3RfYnl0ZW5yKGl0ZW0sIG5vZGUtPnN0YXJ0KTsKIAlidHJmc19zZXRfcm9vdF9sZXZlbChpdGVtLCBidHJmc19oZWFkZXJfbGV2ZWwobm9kZSkpOwogCWJ0cmZzX3NldF9yb290X2dlbmVyYXRpb24oaXRlbSwgYnRyZnNfaGVhZGVyX2dlbmVyYXRpb24obm9kZSkpOwotCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggZWI1NTg2My4uZTI0Yjc5NiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0yMTYsMTcgKzIxNiwxMSBAQAogCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJY3VyX3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKIAlpZiAoY3VyX3RyYW5zICYmIGN1cl90cmFucy0+YmxvY2tlZCkgewotCQlERUZJTkVfV0FJVCh3YWl0KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7Ci0JCXdoaWxlICgxKSB7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAotCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoIWN1cl90cmFucy0+YmxvY2tlZCkKLQkJCQlicmVhazsKLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQkJZmluaXNoX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0KTsKKworCQl3YWl0X2V2ZW50KHJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsCisJCQkgICAhY3VyX3RyYW5zLT5ibG9ja2VkKTsKIAkJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwpAQCAtMzU3LDE5ICszNTEsMTAgQEAKIH0KIAogLyogd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgdG8gYmUgZnVsbHkgY29tcGxldGUgKi8KLXN0YXRpYyBub2lubGluZSBpbnQgd2FpdF9mb3JfY29tbWl0KHN0cnVjdCBidHJmc19yb290ICpyb290LAorc3RhdGljIG5vaW5saW5lIHZvaWQgd2FpdF9mb3JfY29tbWl0KHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSAgICBzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmNvbW1pdCkKIHsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQl3aGlsZSAoIWNvbW1pdC0+Y29tbWl0X2RvbmUpIHsKLQkJcHJlcGFyZV90b193YWl0KCZjb21taXQtPmNvbW1pdF93YWl0LCAmd2FpdCwKLQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChjb21taXQtPmNvbW1pdF9kb25lKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCWZpbmlzaF93YWl0KCZjb21taXQtPmNvbW1pdF93YWl0LCAmd2FpdCk7Ci0JcmV0dXJuIDA7CisJd2FpdF9ldmVudChjb21taXQtPmNvbW1pdF93YWl0LCBjb21taXQtPmNvbW1pdF9kb25lKTsKIH0KIAogaW50IGJ0cmZzX3dhaXRfZm9yX2NvbW1pdChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHRyYW5zaWQpCkBAIC04OTksNiArODg0LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqdHJlZV9yb290ID0gZnNfaW5mby0+dHJlZV9yb290OwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gcGVuZGluZy0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcGFyZW50X3Jvb3Q7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2OwogCXN0cnVjdCBpbm9kZSAqcGFyZW50X2lub2RlOwogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CkBAIC05MTAsNiArODk2LDggQEAKIAl1NjQgb2JqZWN0aWQ7CiAJdTY0IHJvb3RfZmxhZ3M7CiAKKwlyc3YgPSB0cmFucy0+YmxvY2tfcnN2OworCiAJbmV3X3Jvb3RfaXRlbSA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfcm9vdF9pdGVtKSwgR0ZQX05PRlMpOwogCWlmICghbmV3X3Jvb3RfaXRlbSkgewogCQlwZW5kaW5nLT5lcnJvciA9IC1FTk9NRU07CkBAIC0xMDE3LDYgKzEwMDUsNyBAQAogCWJ0cmZzX29ycGhhbl9wb3N0X3NuYXBzaG90KHRyYW5zLCBwZW5kaW5nKTsKIGZhaWw6CiAJa2ZyZWUobmV3X3Jvb3RfaXRlbSk7CisJdHJhbnMtPmJsb2NrX3JzdiA9IHJzdjsKIAlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyb290LCAmcGVuZGluZy0+YmxvY2tfcnN2LCAodTY0KS0xKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwODUsMjIgKzEwNzQsNyBAQAogc3RhdGljIHZvaWQgd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJICAgIHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqdHJhbnMpCiB7Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0KLQlpZiAodHJhbnMtPmluX2NvbW1pdCkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKDEpIHsKLQkJcHJlcGFyZV90b193YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsICZ3YWl0LAotCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHRyYW5zLT5pbl9jb21taXQpIHsKLQkJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsCi0JCQkJICAgICZ3YWl0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlKCk7Ci0JCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsICZ3YWl0KTsKLQl9CisJd2FpdF9ldmVudChyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsIHRyYW5zLT5pbl9jb21taXQpOwogfQogCiAvKgpAQCAtMTExMCwyNCArMTA4NCw4IEBACiBzdGF0aWMgdm9pZCB3YWl0X2N1cnJlbnRfdHJhbnNfY29tbWl0X3N0YXJ0X2FuZF91bmJsb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkgc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uICp0cmFucykKIHsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCWlmICh0cmFucy0+Y29tbWl0X2RvbmUgfHwgKHRyYW5zLT5pbl9jb21taXQgJiYgIXRyYW5zLT5ibG9ja2VkKSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKDEpIHsKLQkJcHJlcGFyZV90b193YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl93YWl0LCAmd2FpdCwKLQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICh0cmFucy0+Y29tbWl0X2RvbmUgfHwKLQkJICAgICh0cmFucy0+aW5fY29tbWl0ICYmICF0cmFucy0+YmxvY2tlZCkpIHsKLQkJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl93YWl0LAotCQkJCSAgICAmd2FpdCk7Ci0JCQlicmVhazsKLQkJfQotCQlzY2hlZHVsZSgpOwotCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwKLQkJCSAgICAmd2FpdCk7Ci0JfQorCXdhaXRfZXZlbnQocm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwKKwkJICAgdHJhbnMtPmNvbW1pdF9kb25lIHx8ICh0cmFucy0+aW5fY29tbWl0ICYmICF0cmFucy0+YmxvY2tlZCkpOwogfQogCiAvKgpAQCAtMTIzNCw4ICsxMTkyLDcgQEAKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCi0JCXJldCA9IHdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwotCQlCVUdfT04ocmV0KTsKKwkJd2FpdF9mb3JfY29tbWl0KHJvb3QsIGN1cl90cmFucyk7CiAKIAkJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IGFjMjc4ZGQuLjc4NjYzOWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtNzk5LDE0ICs3OTksMTUgQEAKIAkJCQkgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgaW50IHNsb3QsCiAJCQkJICBzdHJ1Y3QgYnRyZnNfa2V5ICprZXkpCiB7Ci0Jc3RydWN0IGlub2RlICpkaXI7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgYnRyZnNfaW5vZGVfcmVmICpyZWY7CisJc3RydWN0IGJ0cmZzX2Rpcl9pdGVtICpkaTsKKwlzdHJ1Y3QgaW5vZGUgKmRpcjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWNoYXIgKm5hbWU7Ci0JaW50IG5hbWVsZW47CiAJdW5zaWduZWQgbG9uZyByZWZfcHRyOwogCXVuc2lnbmVkIGxvbmcgcmVmX2VuZDsKKwljaGFyICpuYW1lOworCWludCBuYW1lbGVuOworCWludCByZXQ7CiAJaW50IHNlYXJjaF9kb25lID0gMDsKIAogCS8qCkBAIC05MDksNiArOTEwLDI1IEBACiAJfQogCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKIAorCS8qIGxvb2sgZm9yIGEgY29uZmxpY3Rpbmcgc2VxdWVuY2UgbnVtYmVyICovCisJZGkgPSBidHJmc19sb29rdXBfZGlyX2luZGV4X2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsIGJ0cmZzX2lubyhkaXIpLAorCQkJCQkgYnRyZnNfaW5vZGVfcmVmX2luZGV4KGViLCByZWYpLAorCQkJCQkgbmFtZSwgbmFtZWxlbiwgMCk7CisJaWYgKGRpICYmICFJU19FUlIoZGkpKSB7CisJCXJldCA9IGRyb3Bfb25lX2Rpcl9pdGVtKHRyYW5zLCByb290LCBwYXRoLCBkaXIsIGRpKTsKKwkJQlVHX09OKHJldCk7CisJfQorCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKKworCS8qIGxvb2sgZm9yIGEgY29uZmxpY2luZyBuYW1lICovCisJZGkgPSBidHJmc19sb29rdXBfZGlyX2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsIGJ0cmZzX2lubyhkaXIpLAorCQkJCSAgIG5hbWUsIG5hbWVsZW4sIDApOworCWlmIChkaSAmJiAhSVNfRVJSKGRpKSkgeworCQlyZXQgPSBkcm9wX29uZV9kaXJfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgZGlyLCBkaSk7CisJCUJVR19PTihyZXQpOworCX0KKwlidHJmc19yZWxlYXNlX3BhdGgocGF0aCk7CisKIGluc2VydDoKIAkvKiBpbnNlcnQgb3VyIG5hbWUgKi8KIAlyZXQgPSBidHJmc19hZGRfbGluayh0cmFucywgZGlyLCBpbm9kZSwgbmFtZSwgbmFtZWxlbiwgMCwKQEAgLTE2MTcsNyArMTYzNyw4IEBACiAJCXJldHVybiAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlCVUdfT04oIXBhdGgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMoZWIpOwogCWZvciAoaSA9IDA7IGkgPCBucml0ZW1zOyBpKyspIHsKQEAgLTE3MjMsNyArMTc0NCw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpZiAoKmxldmVsID09IDEpIHsKLQkJCXdjLT5wcm9jZXNzX2Z1bmMocm9vdCwgbmV4dCwgd2MsIHB0cl9nZW4pOworCQkJcmV0ID0gd2MtPnByb2Nlc3NfZnVuYyhyb290LCBuZXh0LCB3YywgcHRyX2dlbik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CiAKIAkJCXBhdGgtPnNsb3RzWypsZXZlbF0rKzsKIAkJCWlmICh3Yy0+ZnJlZSkgewpAQCAtMTc4OCw4ICsxODExLDExIEBACiAJCQkJcGFyZW50ID0gcGF0aC0+bm9kZXNbKmxldmVsICsgMV07CiAKIAkJCXJvb3Rfb3duZXIgPSBidHJmc19oZWFkZXJfb3duZXIocGFyZW50KTsKLQkJCXdjLT5wcm9jZXNzX2Z1bmMocm9vdCwgcGF0aC0+bm9kZXNbKmxldmVsXSwgd2MsCisJCQlyZXQgPSB3Yy0+cHJvY2Vzc19mdW5jKHJvb3QsIHBhdGgtPm5vZGVzWypsZXZlbF0sIHdjLAogCQkJCSBidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihwYXRoLT5ub2Rlc1sqbGV2ZWxdKSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisKIAkJCWlmICh3Yy0+ZnJlZSkgewogCQkJCXN0cnVjdCBleHRlbnRfYnVmZmVyICpuZXh0OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggYjg5ZTM3Mi4uZjJhNGNjNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMTQyLDYgKzE0Miw3IEBACiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkID0gMDsKIAlpbnQgZm9yY2VfcmVnID0gMDsKKwlpbnQgc3luY19wZW5kaW5nID0gMDsKIAlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCS8qCkBAIC0yMjksNiArMjMwLDIyIEBACiAKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjdXItPmJpX2NudCkgPT0gMCk7CiAKKwkJLyoKKwkJICogaWYgd2UncmUgZG9pbmcgdGhlIHN5bmMgbGlzdCwgcmVjb3JkIHRoYXQgb3VyCisJCSAqIHBsdWcgaGFzIHNvbWUgc3luYyByZXF1ZXN0cyBvbiBpdAorCQkgKgorCQkgKiBJZiB3ZSdyZSBkb2luZyB0aGUgcmVndWxhciBsaXN0IGFuZCB0aGVyZSBhcmUKKwkJICogc3luYyByZXF1ZXN0cyBzaXR0aW5nIGFyb3VuZCwgdW5wbHVnIGJlZm9yZQorCQkgKiB3ZSBhZGQgbW9yZQorCQkgKi8KKwkJaWYgKHBlbmRpbmdfYmlvcyA9PSAmZGV2aWNlLT5wZW5kaW5nX3N5bmNfYmlvcykgeworCQkJc3luY19wZW5kaW5nID0gMTsKKwkJfSBlbHNlIGlmIChzeW5jX3BlbmRpbmcpIHsKKwkJCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CisJCQlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CisJCQlzeW5jX3BlbmRpbmcgPSAwOworCQl9CisKIAkJc3VibWl0X2JpbyhjdXItPmJpX3J3LCBjdXIpOwogCQludW1fcnVuKys7CiAJCWJhdGNoX3J1bisrOwpAQCAtNTAwLDYgKzUxNyw5IEBACiAJCQlmc19kZXZpY2VzLT5yd19kZXZpY2VzLS07CiAJCX0KIAorCQlpZiAoZGV2aWNlLT5jYW5fZGlzY2FyZCkKKwkJCWZzX2RldmljZXMtPm51bV9jYW5fZGlzY2FyZC0tOworCiAJCW5ld19kZXZpY2UgPSBrbWFsbG9jKHNpemVvZigqbmV3X2RldmljZSksIEdGUF9OT0ZTKTsKIAkJQlVHX09OKCFuZXdfZGV2aWNlKTsKIAkJbWVtY3B5KG5ld19kZXZpY2UsIGRldmljZSwgc2l6ZW9mKCpuZXdfZGV2aWNlKSk7CkBAIC01MDgsNiArNTI4LDcgQEAKIAkJbmV3X2RldmljZS0+YmRldiA9IE5VTEw7CiAJCW5ld19kZXZpY2UtPndyaXRlYWJsZSA9IDA7CiAJCW5ld19kZXZpY2UtPmluX2ZzX21ldGFkYXRhID0gMDsKKwkJbmV3X2RldmljZS0+Y2FuX2Rpc2NhcmQgPSAwOwogCQlsaXN0X3JlcGxhY2VfcmN1KCZkZXZpY2UtPmRldl9saXN0LCAmbmV3X2RldmljZS0+ZGV2X2xpc3QpOwogCiAJCWNhbGxfcmN1KCZkZXZpY2UtPnJjdSwgZnJlZV9kZXZpY2UpOwpAQCAtNTQ3LDYgKzU2OCw3IEBACiBzdGF0aWMgaW50IF9fYnRyZnNfb3Blbl9kZXZpY2VzKHN0cnVjdCBidHJmc19mc19kZXZpY2VzICpmc19kZXZpY2VzLAogCQkJCWZtb2RlX3QgZmxhZ3MsIHZvaWQgKmhvbGRlcikKIHsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmZnNfZGV2aWNlcy0+ZGV2aWNlczsKIAlzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2U7CkBAIC02MDMsNiArNjI1LDEyIEBACiAJCQlzZWVkaW5nID0gMDsKIAkJfQogCisJCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwkJaWYgKGJsa19xdWV1ZV9kaXNjYXJkKHEpKSB7CisJCQlkZXZpY2UtPmNhbl9kaXNjYXJkID0gMTsKKwkJCWZzX2RldmljZXMtPm51bV9jYW5fZGlzY2FyZCsrOworCQl9CisKIAkJZGV2aWNlLT5iZGV2ID0gYmRldjsKIAkJZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDA7CiAJCWRldmljZS0+bW9kZSA9IGZsYWdzOwpAQCAtODM1LDYgKzg2Myw3IEBACiAKIAltYXhfaG9sZV9zdGFydCA9IHNlYXJjaF9zdGFydDsKIAltYXhfaG9sZV9zaXplID0gMDsKKwlob2xlX3NpemUgPSAwOwogCiAJaWYgKHNlYXJjaF9zdGFydCA+PSBzZWFyY2hfZW5kKSB7CiAJCXJldCA9IC1FTk9TUEM7CkBAIC05MTcsNyArOTQ2LDE0IEBACiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAotCWhvbGVfc2l6ZSA9IHNlYXJjaF9lbmQtIHNlYXJjaF9zdGFydDsKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHNlYXJjaF9zdGFydCBzaG91bGQgYmUgdGhlIGVuZCBvZgorCSAqIGFsbG9jYXRlZCBkZXYgZXh0ZW50cywgYW5kIHdoZW4gc2hyaW5raW5nIHRoZSBkZXZpY2UsCisJICogc2VhcmNoX2VuZCBtYXkgYmUgc21hbGxlciB0aGFuIHNlYXJjaF9zdGFydC4KKwkgKi8KKwlpZiAoc2VhcmNoX2VuZCA+IHNlYXJjaF9zdGFydCkKKwkJaG9sZV9zaXplID0gc2VhcmNoX2VuZCAtIHNlYXJjaF9zdGFydDsKKwogCWlmIChob2xlX3NpemUgPiBtYXhfaG9sZV9zaXplKSB7CiAJCW1heF9ob2xlX3N0YXJ0ID0gc2VhcmNoX3N0YXJ0OwogCQltYXhfaG9sZV9zaXplID0gaG9sZV9zaXplOwpAQCAtMTAzNyw3ICsxMDczLDggQEAKIAlzdHJ1Y3QgYnRyZnNfa2V5IGZvdW5kX2tleTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JQlVHX09OKCFwYXRoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCiAJa2V5Lm9iamVjdGlkID0gb2JqZWN0aWQ7CiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CkBAIC0xNTQyLDYgKzE1NzksNyBAQAogCiBpbnQgYnRyZnNfaW5pdF9uZXdfZGV2aWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBjaGFyICpkZXZpY2VfcGF0aCkKIHsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKQEAgLTE2MTEsNiArMTY0OSw5IEBACiAKIAlsb2NrX2NodW5rcyhyb290KTsKIAorCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwlpZiAoYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCisJCWRldmljZS0+Y2FuX2Rpc2NhcmQgPSAxOwogCWRldmljZS0+d3JpdGVhYmxlID0gMTsKIAlkZXZpY2UtPndvcmsuZnVuYyA9IHBlbmRpbmdfYmlvc19mbjsKIAlnZW5lcmF0ZV9yYW5kb21fdXVpZChkZXZpY2UtPnV1aWQpOwpAQCAtMTY0Niw2ICsxNjg3LDggQEAKIAlyb290LT5mc19pbmZvLT5mc19kZXZpY2VzLT5udW1fZGV2aWNlcysrOwogCXJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPm9wZW5fZGV2aWNlcysrOwogCXJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPnJ3X2RldmljZXMrKzsKKwlpZiAoZGV2aWNlLT5jYW5fZGlzY2FyZCkKKwkJcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+bnVtX2Nhbl9kaXNjYXJkKys7CiAJcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+dG90YWxfcndfYnl0ZXMgKz0gZGV2aWNlLT50b3RhbF9ieXRlczsKIAogCWlmICghYmxrX3F1ZXVlX25vbnJvdChiZGV2X2dldF9xdWV1ZShiZGV2KSkpCkBAIC0yMDYxLDggKzIxMDQsMTAgQEAKIAogCS8qIHN0ZXAgdHdvLCByZWxvY2F0ZSBhbGwgdGhlIGNodW5rcyAqLwogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JQlVHX09OKCFwYXRoKTsKLQorCWlmICghcGF0aCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KIAlrZXkub2JqZWN0aWQgPSBCVFJGU19GSVJTVF9DSFVOS19UUkVFX09CSkVDVElEOwogCWtleS5vZmZzZXQgPSAodTY0KS0xOwogCWtleS50eXBlID0gQlRSRlNfQ0hVTktfSVRFTV9LRVk7CkBAIC0yNDEwLDkgKzI0NTUsMTAgQEAKIAkJCXRvdGFsX2F2YWlsID0gZGV2aWNlLT50b3RhbF9ieXRlcyAtIGRldmljZS0+Ynl0ZXNfdXNlZDsKIAkJZWxzZQogCQkJdG90YWxfYXZhaWwgPSAwOwotCQkvKiBhdmFpbCBpcyBvZmYgYnkgbWF4KGFsbG9jX3N0YXJ0LCAxTUIpLCBidXQgdGhhdCBpcyB0aGUgc2FtZQotCQkgKiBmb3IgYWxsIGRldmljZXMsIHNvIGl0IGRvZXNuJ3QgaHVydCB0aGUgc29ydGluZyBsYXRlciBvbgotCQkgKi8KKworCQkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSBvbiB0aGlzIGRldmljZSwgc2tpcCBpdC4gKi8KKwkJaWYgKHRvdGFsX2F2YWlsID09IDApCisJCQljb250aW51ZTsKIAogCQlyZXQgPSBmaW5kX2ZyZWVfZGV2X2V4dGVudCh0cmFucywgZGV2aWNlLAogCQkJCQkgICBtYXhfc3RyaXBlX3NpemUgKiBkZXZfc3RyaXBlcywKQEAgLTI2NjEsNyArMjcwNyw4IEBACiAKIAlyZXQgPSBmaW5kX25leHRfY2h1bmsoZnNfaW5mby0+Y2h1bmtfcm9vdCwKIAkJCSAgICAgIEJUUkZTX0ZJUlNUX0NIVU5LX1RSRUVfT0JKRUNUSUQsICZjaHVua19vZmZzZXQpOwotCUJVR19PTihyZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlhbGxvY19wcm9maWxlID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfAogCQkJKGZzX2luZm8tPm1ldGFkYXRhX2FsbG9jX3Byb2ZpbGUgJgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5oIGIvZnMvYnRyZnMvdm9sdW1lcy5oCmluZGV4IDdjMTJkNjEuLjZkODY2ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuaAorKysgYi9mcy9idHJmcy92b2x1bWVzLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlpbnQgd3JpdGVhYmxlOwogCWludCBpbl9mc19tZXRhZGF0YTsKIAlpbnQgbWlzc2luZzsKKwlpbnQgY2FuX2Rpc2NhcmQ7CiAKIAlzcGlubG9ja190IGlvX2xvY2s7CiAKQEAgLTEwNCw2ICsxMDUsNyBAQAogCXU2NCByd19kZXZpY2VzOwogCXU2NCBtaXNzaW5nX2RldmljZXM7CiAJdTY0IHRvdGFsX3J3X2J5dGVzOworCXU2NCBudW1fY2FuX2Rpc2NhcmQ7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqbGF0ZXN0X2JkZXY7CiAKIAkvKiBhbGwgb2YgdGhlIGRldmljZXMgaW4gdGhlIEZTLCBwcm90ZWN0ZWQgYnkgYSBtdXRleApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIuYyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggZDczM2I5Yy4uNjk1NjVlNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMveGF0dHIuYworKysgYi9mcy9idHJmcy94YXR0ci5jCkBAIC0xMTYsNiArMTE2LDEyIEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOworCisJCS8qCisJCSAqIHJlbW92ZSB0aGUgYXR0cmlidXRlCisJCSAqLworCQlpZiAoIXZhbHVlKQorCQkJZ290byBvdXQ7CiAJfQogCiBhZ2FpbjoKQEAgLTE1OCw2ICsxNjQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBAdmFsdWU6ICIiIG1ha2VzIHRoZSBhdHRyaWJ1dGUgdG8gZW1wdHksIE5VTEwgcmVtb3ZlcyBpdAorICovCiBpbnQgX19idHJmc19zZXR4YXR0cihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCBmZWUwMjhiLi44NmM1OWUxIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAkJciA9IGJ1aWxkX2RlbnRyeV9wYXRoKHJkZW50cnksIHBwYXRoLCBwYXRobGVuLCBpbm8sIGZyZWVwYXRoKTsKIAkJZG91dCgiIGRlbnRyeSAlcCAlbGx4LyUuKnNcbiIsIHJkZW50cnksICppbm8sICpwYXRobGVuLAogCQkgICAgICpwcGF0aCk7Ci0JfSBlbHNlIGlmIChycGF0aCkgeworCX0gZWxzZSBpZiAocnBhdGggfHwgcmlubykgewogCQkqaW5vID0gcmlubzsKIAkJKnBwYXRoID0gcnBhdGg7CiAJCSpwYXRobGVuID0gc3RybGVuKHJwYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuYyBiL2ZzL2NlcGgvc3VwZXIuYwppbmRleCBkNDdjNWVjLi44OGJhY2FmIDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmMKKysrIGIvZnMvY2VwaC9zdXBlci5jCkBAIC04MTMsOCArODEzLDggQEAKIAlmc2MgPSBjcmVhdGVfZnNfY2xpZW50KGZzb3B0LCBvcHQpOwogCWlmIChJU19FUlIoZnNjKSkgewogCQlyZXMgPSBFUlJfQ0FTVChmc2MpOwotCQlrZnJlZShmc29wdCk7Ci0JCWtmcmVlKG9wdCk7CisJCWRlc3Ryb3lfbW91bnRfb3B0aW9ucyhmc29wdCk7CisJCWNlcGhfZGVzdHJveV9vcHRpb25zKG9wdCk7CiAJCWdvdG8gb3V0X2ZpbmFsOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCAyZmUzY2YxLi42ZDQwNjU2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAkJCXNlcV9wcmludGYobSwgIiBJbiBTZW5kOiAlZCBJbiBNYXhSZXEgV2FpdDogJWQiLAotCQkJCWF0b21pY19yZWFkKCZzZXJ2ZXItPmluU2VuZCksCisJCQkJYXRvbWljX3JlYWQoJnNlcnZlci0+aW5fc2VuZCksCiAJCQkJYXRvbWljX3JlYWQoJnNlcnZlci0+bnVtX3dhaXRlcnMpKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA4ZDhmMjhjLi42ODczYmI2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTE0MSwxMCArMTQxLDExIEBACiAKIAlyYyA9IGRuc19yZXNvbHZlX3NlcnZlcl9uYW1lX3RvX2lwKCpkZXZuYW1lLCAmc3J2SVApOwogCWlmIChyYyA8IDApIHsKLQkJY0VSUk9SKDEsICIlczogRmFpbGVkIHRvIHJlc29sdmUgc2VydmVyIHBhcnQgb2YgJXMgdG8gSVA6ICVkIiwKLQkJCSAgX19mdW5jX18sICpkZXZuYW1lLCByYyk7CisJCWNGWUkoMSwgIiVzOiBGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2ZXIgcGFydCBvZiAlcyB0byBJUDogJWQiLAorCQkJX19mdW5jX18sICpkZXZuYW1lLCByYyk7CiAJCWdvdG8gY29tcG9zZV9tb3VudF9vcHRpb25zX2VycjsKIAl9CisKIAkvKiBtZF9sZW4gPSBzdHJsZW4oLi4uKSArIDEyIGZvciAnc2VwK3ByZWZpeHBhdGg9JwogCSAqIGFzc3VtaW5nIHRoYXQgd2UgaGF2ZSAndW5jPScgYW5kICdpcD0nIGluCiAJICogdGhlIG9yaWdpbmFsIHNiX21vdW50ZGF0YQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCAyMWRlMWQ2Li5kMGY1OWZhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtOTkxLDI0ICs5OTEsNiBAQAogCXJldHVybiBwbnRzZDsKIH0KIAotc3RhdGljIGludCBzZXRfY2lmc19hY2xfYnlfZmlkKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIF9fdTE2IGZpZCwKLQkJc3RydWN0IGNpZnNfbnRzZCAqcG5udHNkLCB1MzIgYWNsbGVuKQotewotCWludCB4aWQsIHJjOwotCXN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rID0gY2lmc19zYl90bGluayhjaWZzX3NiKTsKLQotCWlmIChJU19FUlIodGxpbmspKQotCQlyZXR1cm4gUFRSX0VSUih0bGluayk7Ci0KLQl4aWQgPSBHZXRYaWQoKTsKLQlyYyA9IENJRlNTTUJTZXRDSUZTQUNMKHhpZCwgdGxpbmtfdGNvbih0bGluayksIGZpZCwgcG5udHNkLCBhY2xsZW4pOwotCUZyZWVYaWQoeGlkKTsKLQljaWZzX3B1dF90bGluayh0bGluayk7Ci0KLQljRllJKERCRzIsICJTZXRDSUZTQUNMIHJjID0gJWQiLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IHNldF9jaWZzX2FjbF9ieV9wYXRoKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsIGNvbnN0IGNoYXIgKnBhdGgsCiAJCXN0cnVjdCBjaWZzX250c2QgKnBubnRzZCwgdTMyIGFjbGxlbikKIHsKQEAgLTEwNDcsMTggKzEwMjksMTAgQEAKIAkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwYXRoKQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGU7Ci0JaW50IHJjOwogCiAJY0ZZSShEQkcyLCAic2V0IEFDTCBmb3IgJXMgZnJvbSBtb2RlIDB4JXgiLCBwYXRoLCBpbm9kZS0+aV9tb2RlKTsKIAotCW9wZW5fZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShDSUZTX0koaW5vZGUpLCB0cnVlKTsKLQlpZiAoIW9wZW5fZmlsZSkKLQkJcmV0dXJuIHNldF9jaWZzX2FjbF9ieV9wYXRoKGNpZnNfc2IsIHBhdGgsIHBubnRzZCwgYWNsbGVuKTsKLQotCXJjID0gc2V0X2NpZnNfYWNsX2J5X2ZpZChjaWZzX3NiLCBvcGVuX2ZpbGUtPm5ldGZpZCwgcG5udHNkLCBhY2xsZW4pOwotCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHNldF9jaWZzX2FjbF9ieV9wYXRoKGNpZnNfc2IsIHBhdGgsIHBubnRzZCwgYWNsbGVuKTsKIH0KIAogLyogVHJhbnNsYXRlIHRoZSBDSUZTIEFDTCAoc2ltbGFyIHRvIE5URlMgQUNMKSBmb3IgYSBmaWxlIGludG8gbW9kZSBiaXRzICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggMjU5OTkxYi4uZTc2YmZlYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtODcsOSArODcsMTUgQEAKIAlpZiAoKGNpZnNfcGR1ID09IE5VTEwpIHx8IChzZXJ2ZXIgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChjaWZzX3BkdS0+RmxhZ3MyICYgU01CRkxHMl9TRUNVUklUWV9TSUdOQVRVUkUpID09IDApCisJaWYgKCEoY2lmc19wZHUtPkZsYWdzMiAmIFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFKSB8fAorCSAgICBzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZE5lZ290aWF0ZSkKIAkJcmV0dXJuIHJjOwogCisJaWYgKCFzZXJ2ZXItPnNlc3Npb25fZXN0YWIpIHsKKwkJc3RybmNweShjaWZzX3BkdS0+U2lnbmF0dXJlLlNlY3VyaXR5U2lnbmF0dXJlLCAiQlNSU1BZTCIsIDgpOworCQlyZXR1cm4gcmM7CisJfQorCiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5TZXF1ZW5jZU51bWJlciA9CiAJCQljcHVfdG9fbGUzMihzZXJ2ZXItPnNlcXVlbmNlX251bWJlcik7CiAJY2lmc19wZHUtPlNpZ25hdHVyZS5TZXF1ZW5jZS5SZXNlcnZlZCA9IDA7CkBAIC0xNzgsOSArMTg0LDE1IEBACiAJaWYgKChjaWZzX3BkdSA9PSBOVUxMKSB8fCAoc2VydmVyID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgoY2lmc19wZHUtPkZsYWdzMiAmIFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFKSA9PSAwKQorCWlmICghKGNpZnNfcGR1LT5GbGFnczIgJiBTTUJGTEcyX1NFQ1VSSVRZX1NJR05BVFVSRSkgfHwKKwkgICAgc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWROZWdvdGlhdGUpCiAJCXJldHVybiByYzsKIAorCWlmICghc2VydmVyLT5zZXNzaW9uX2VzdGFiKSB7CisJCXN0cm5jcHkoY2lmc19wZHUtPlNpZ25hdHVyZS5TZWN1cml0eVNpZ25hdHVyZSwgIkJTUlNQWUwiLCA4KTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWNpZnNfcGR1LT5TaWduYXR1cmUuU2VxdWVuY2UuU2VxdWVuY2VOdW1iZXIgPQogCQkJCWNwdV90b19sZTMyKHNlcnZlci0+c2VxdWVuY2VfbnVtYmVyKTsKIAljaWZzX3BkdS0+U2lnbmF0dXJlLlNlcXVlbmNlLlJlc2VydmVkID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDg2NTUxNzQuLmY5M2ViOTQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtODYsMjQgKzg2LDYgQEAKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19taWRfcG9vbHA7CiAKLXZvaWQKLWNpZnNfc2JfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqc2VydmVyID0gQ0lGU19TQihzYik7Ci0KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlcnZlci0+YWN0aXZlKSA9PSAxKQotCQlhdG9taWNfaW5jKCZzYi0+c19hY3RpdmUpOwotfQotCi12b2lkCi1jaWZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqc2VydmVyID0gQ0lGU19TQihzYik7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2VydmVyLT5hY3RpdmUpKQotCQlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKLX0KLQogc3RhdGljIGludAogY2lmc19yZWFkX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC01ODEsNiArNTYzLDEwIEBACiAJCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAkJZHB1dChkZW50cnkpOwogCQlkZW50cnkgPSBjaGlsZDsKKwkJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKKwkJCWRwdXQoZGVudHJ5KTsKKwkJCWRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJCX0KIAl9IHdoaWxlICghSVNfRVJSKGRlbnRyeSkpOwogCV9GcmVlWGlkKHhpZCk7CiAJa2ZyZWUoZnVsbF9wYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGZiZDA1MGMuLjk1ZGE4MDIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtNDEsMTAgKzQxLDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmOwogCi0vKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBzdXBlciBibG9jayBvcGVyYXRpb25zICovCi1leHRlcm4gdm9pZCBjaWZzX3NiX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLWV4dGVybiB2b2lkIGNpZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Ci0KIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGlub2RlcyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wczsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKQEAgLTEyOSw1ICsxMjUsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogQ0lGU19ORlNEX0VYUE9SVCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjc0IgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43NSIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCAxZmNmNGU1Li45NWRhZDlkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgICAqZnNjYWNoZTsgLyogY2xpZW50IGluZGV4IGNhY2hlIGNvb2tpZSAqLwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JYXRvbWljX3QgaW5TZW5kOyAvKiByZXF1ZXN0cyB0cnlpbmcgdG8gc2VuZCAqLworCWF0b21pY190IGluX3NlbmQ7IC8qIHJlcXVlc3RzIHRyeWluZyB0byBzZW5kICovCiAJYXRvbWljX3QgbnVtX3dhaXRlcnM7ICAgLyogYmxvY2tlZCB3YWl0aW5nIHRvIGdldCBpbiBzZW5kcmVjdiAqLwogI2VuZGlmCiB9OwpAQCAtNjcyLDEyICs2NzIsNTQgQEAKIAlib29sIG11bHRpRW5kOjE7CS8qIGJvdGggcmVjZWl2ZWQgKi8KIH07CiAKLXN0cnVjdCBvcGxvY2tfcV9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBxaGVhZDsKLQlzdHJ1Y3QgaW5vZGUgKnBpbm9kZTsKLQlzdHJ1Y3QgY2lmc190Y29uICp0Y29uOwotCV9fdTE2IG5ldGZpZDsKLX07CisvKglNYWtlIGNvZGUgaW4gdHJhbnNwb3J0LmMgYSBsaXR0bGUgY2xlYW5lciBieSBtb3ZpbmcKKwl1cGRhdGUgb2Ygb3B0aW9uYWwgc3RhdHMgaW50byBmdW5jdGlvbiBiZWxvdyAqLworI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgorCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19pbl9zZW5kX2luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7CisJYXRvbWljX2luYygmc2VydmVyLT5pbl9zZW5kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpZnNfaW5fc2VuZF9kZWMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQoreworCWF0b21pY19kZWMoJnNlcnZlci0+aW5fc2VuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX251bV93YWl0ZXJzX2luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7CisJYXRvbWljX2luYygmc2VydmVyLT5udW1fd2FpdGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX251bV93YWl0ZXJzX2RlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7CisJYXRvbWljX2RlYygmc2VydmVyLT5udW1fd2FpdGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NhdmVfd2hlbl9zZW50KHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKQoreworCW1pZC0+d2hlbl9zZW50ID0gamlmZmllczsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19pbl9zZW5kX2luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc19pbl9zZW5kX2RlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX251bV93YWl0ZXJzX2luYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX251bV93YWl0ZXJzX2RlYyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NhdmVfd2hlbl9zZW50KHN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkKQoreworfQorI2VuZGlmCiAKIC8qIGZvciBwZW5kaW5nIGRub3RpZnkgcmVxdWVzdHMgKi8KIHN0cnVjdCBkaXJfbm90aWZ5X3JlcSB7CkBAIC05NDIsOCArOTg0LDYgQEAKIEdMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdCBzaWRnaWRsb2NrOwogCiB2b2lkIGNpZnNfb3Bsb2NrX2JyZWFrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci12b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSk7Ci12b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBjaWZzX29wbG9ja19icmVha19vcHM7CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMWE5ZmU3Zi4uYWFjMzdkOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogc3RhdGljIGludAogY2lmc19yZWNvbm5lY3RfdGNvbihzdHJ1Y3QgY2lmc190Y29uICp0Y29uLCBpbnQgc21iX2NvbW1hbmQpCiB7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmM7CiAJc3RydWN0IGNpZnNfc2VzICpzZXM7CiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyOwogCXN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZTsKQEAgLTU3MjAsNiArNTcyMCw3IEBACiAJY2hhciAqdGVtcF9wdHI7CiAJY2hhciAqZW5kX29mX3NtYjsKIAlfX3UxNiBwYXJhbXMsIGJ5dGVfY291bnQsIGRhdGFfb2Zmc2V0OworCXVuc2lnbmVkIGludCBlYV9uYW1lX2xlbiA9IGVhX25hbWUgPyBzdHJsZW4oZWFfbmFtZSkgOiAwOwogCiAJY0ZZSSgxLCAiSW4gUXVlcnkgQWxsIEVBcyBwYXRoICVzIiwgc2VhcmNoTmFtZSk7CiBRQWxsRUFzUmV0cnk6CkBAIC01ODM3LDcgKzU4MzgsOCBAQAogCQl9CiAKIAkJaWYgKGVhX25hbWUpIHsKLQkJCWlmIChzdHJuY21wKGVhX25hbWUsIHRlbXBfcHRyLCBuYW1lX2xlbikgPT0gMCkgeworCQkJaWYgKGVhX25hbWVfbGVuID09IG5hbWVfbGVuICYmCisJCQkgICAgc3RybmNtcChlYV9uYW1lLCB0ZW1wX3B0ciwgbmFtZV9sZW4pID09IDApIHsKIAkJCQl0ZW1wX3B0ciArPSBuYW1lX2xlbiArIDE7CiAJCQkJcmMgPSB2YWx1ZV9sZW47CiAJCQkJaWYgKGJ1Zl9zaXplID09IDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGU2NjI5N2IuLjYzM2MyNDYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0zMTksMzQ0ICszMTksMjIxIEBACiAJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9ucnRfd3EsICZzZXJ2ZXItPmVjaG8sIFNNQl9FQ0hPX0lOVEVSVkFMKTsKIH0KIAotc3RhdGljIGludAotY2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcCkKK3N0YXRpYyBib29sCithbGxvY2F0ZV9idWZmZXJzKGNoYXIgKipiaWdidWYsIGNoYXIgKipzbWFsbGJ1ZiwgdW5zaWduZWQgaW50IHNpemUsCisJCSBib29sIGlzX2xhcmdlX2J1ZikKIHsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IHA7Ci0JdW5zaWduZWQgaW50IHBkdV9sZW5ndGgsIHRvdGFsX3JlYWQ7Ci0Jc3RydWN0IHNtYl9oZHIgKnNtYl9idWZmZXIgPSBOVUxMOwotCXN0cnVjdCBzbWJfaGRyICpiaWdidWYgPSBOVUxMOwotCXN0cnVjdCBzbWJfaGRyICpzbWFsbGJ1ZiA9IE5VTEw7Ci0Jc3RydWN0IG1zZ2hkciBzbWJfbXNnOwotCXN0cnVjdCBrdmVjIGlvdjsKLQlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCwgKnRtcDI7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3RvX3dha2UgPSBOVUxMOwotCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OwotCWNoYXIgdGVtcDsKLQlib29sIGlzTGFyZ2VCdWYgPSBmYWxzZTsKLQlib29sIGlzTXVsdGlSc3A7Ci0JaW50IHJlY29ubmVjdDsKKwljaGFyICpiYnVmID0gKmJpZ2J1ZiwgKnNidWYgPSAqc21hbGxidWY7CiAKLQljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKLQljRllJKDEsICJEZW11bHRpcGxleCBQSUQ6ICVkIiwgdGFza19waWRfbnIoY3VycmVudCkpOwotCi0JbGVuZ3RoID0gYXRvbWljX2luY19yZXR1cm4oJnRjcFNlc0FsbG9jQ291bnQpOwotCWlmIChsZW5ndGggPiAxKQotCQltZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2LAotCQkJCUdGUF9LRVJORUwpOwotCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCXdoaWxlIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykgewotCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQotCQkJY29udGludWU7Ci0JCWlmIChiaWdidWYgPT0gTlVMTCkgewotCQkJYmlnYnVmID0gY2lmc19idWZfZ2V0KCk7Ci0JCQlpZiAoIWJpZ2J1ZikgewotCQkJCWNFUlJPUigxLCAiTm8gbWVtb3J5IGZvciBsYXJnZSBTTUIgcmVzcG9uc2UiKTsKLQkJCQltc2xlZXAoMzAwMCk7Ci0JCQkJLyogcmV0cnkgd2lsbCBjaGVjayBpZiBleGl0aW5nICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoaXNMYXJnZUJ1ZikgewotCQkJLyogd2UgYXJlIHJldXNpbmcgYSBkaXJ0eSBsYXJnZSBidWYsIGNsZWFyIGl0cyBzdGFydCAqLwotCQkJbWVtc2V0KGJpZ2J1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSk7CisJaWYgKGJidWYgPT0gTlVMTCkgeworCQliYnVmID0gKGNoYXIgKiljaWZzX2J1Zl9nZXQoKTsKKwkJaWYgKCFiYnVmKSB7CisJCQljRVJST1IoMSwgIk5vIG1lbW9yeSBmb3IgbGFyZ2UgU01CIHJlc3BvbnNlIik7CisJCQltc2xlZXAoMzAwMCk7CisJCQkvKiByZXRyeSB3aWxsIGNoZWNrIGlmIGV4aXRpbmcgKi8KKwkJCXJldHVybiBmYWxzZTsKIAkJfQorCX0gZWxzZSBpZiAoaXNfbGFyZ2VfYnVmKSB7CisJCS8qIHdlIGFyZSByZXVzaW5nIGEgZGlydHkgbGFyZ2UgYnVmLCBjbGVhciBpdHMgc3RhcnQgKi8KKwkJbWVtc2V0KGJidWYsIDAsIHNpemUpOworCX0KIAotCQlpZiAoc21hbGxidWYgPT0gTlVMTCkgewotCQkJc21hbGxidWYgPSBjaWZzX3NtYWxsX2J1Zl9nZXQoKTsKLQkJCWlmICghc21hbGxidWYpIHsKLQkJCQljRVJST1IoMSwgIk5vIG1lbW9yeSBmb3IgU01CIHJlc3BvbnNlIik7Ci0JCQkJbXNsZWVwKDEwMDApOwotCQkJCS8qIHJldHJ5IHdpbGwgY2hlY2sgaWYgZXhpdGluZyAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogYmVnaW5uaW5nIG9mIHNtYiBidWZmZXIgaXMgY2xlYXJlZCBpbiBvdXIgYnVmX2dldCAqLwotCQl9IGVsc2UgLyogaWYgZXhpc3Rpbmcgc21hbGwgYnVmIGNsZWFyIGJlZ2lubmluZyAqLwotCQkJbWVtc2V0KHNtYWxsYnVmLCAwLCBzaXplb2Yoc3RydWN0IHNtYl9oZHIpKTsKLQotCQlpc0xhcmdlQnVmID0gZmFsc2U7Ci0JCWlzTXVsdGlSc3AgPSBmYWxzZTsKLQkJc21iX2J1ZmZlciA9IHNtYWxsYnVmOwotCQlpb3YuaW92X2Jhc2UgPSBzbWJfYnVmZmVyOwotCQlpb3YuaW92X2xlbiA9IDQ7Ci0JCXNtYl9tc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCQlzbWJfbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQkJcGR1X2xlbmd0aCA9IDQ7IC8qIGVub3VnaCB0byBnZXQgUkZDMTAwMSBoZWFkZXIgKi8KLQotaW5jb21wbGV0ZV9yY3Y6Ci0JCWlmIChlY2hvX3JldHJpZXMgPiAwICYmIHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNHb29kICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKwotCQkJCQkoZWNob19yZXRyaWVzICogU01CX0VDSE9fSU5URVJWQUwpKSkgewotCQkJY0VSUk9SKDEsICJTZXJ2ZXIgJXMgaGFzIG5vdCByZXNwb25kZWQgaW4gJWQgc2Vjb25kcy4gIgotCQkJCSAgIlJlY29ubmVjdGluZy4uLiIsIHNlcnZlci0+aG9zdG5hbWUsCi0JCQkJICAoZWNob19yZXRyaWVzICogU01CX0VDSE9fSU5URVJWQUwgLyBIWikpOwotCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7Ci0JCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwotCQkJY29udGludWU7CisJaWYgKHNidWYgPT0gTlVMTCkgeworCQlzYnVmID0gKGNoYXIgKiljaWZzX3NtYWxsX2J1Zl9nZXQoKTsKKwkJaWYgKCFzYnVmKSB7CisJCQljRVJST1IoMSwgIk5vIG1lbW9yeSBmb3IgU01CIHJlc3BvbnNlIik7CisJCQltc2xlZXAoMTAwMCk7CisJCQkvKiByZXRyeSB3aWxsIGNoZWNrIGlmIGV4aXRpbmcgKi8KKwkJCXJldHVybiBmYWxzZTsKIAkJfQorCQkvKiBiZWdpbm5pbmcgb2Ygc21iIGJ1ZmZlciBpcyBjbGVhcmVkIGluIG91ciBidWZfZ2V0ICovCisJfSBlbHNlIHsKKwkJLyogaWYgZXhpc3Rpbmcgc21hbGwgYnVmIGNsZWFyIGJlZ2lubmluZyAqLworCQltZW1zZXQoc2J1ZiwgMCwgc2l6ZSk7CisJfQogCi0JCWxlbmd0aCA9Ci0JCSAgICBrZXJuZWxfcmVjdm1zZyhjc29ja2V0LCAmc21iX21zZywKLQkJCQkmaW92LCAxLCBwZHVfbGVuZ3RoLCAwIC8qIEJCIG90aGVyIGZsYWdzPyAqLyk7CisJKmJpZ2J1ZiA9IGJidWY7CisJKnNtYWxsYnVmID0gc2J1ZjsKIAorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50CityZWFkX2Zyb21fc29ja2V0KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IG1zZ2hkciAqc21iX21zZywKKwkJIHN0cnVjdCBrdmVjICppb3YsIHVuc2lnbmVkIGludCB0b19yZWFkLAorCQkgdW5zaWduZWQgaW50ICpwdG90YWxfcmVhZCwgYm9vbCBpc19oZWFkZXJfcmVhZCkKK3sKKwlpbnQgbGVuZ3RoLCByYyA9IDA7CisJdW5zaWduZWQgaW50IHRvdGFsX3JlYWQ7CisJY2hhciAqYnVmID0gaW92LT5pb3ZfYmFzZTsKKworCWZvciAodG90YWxfcmVhZCA9IDA7IHRvdGFsX3JlYWQgPCB0b19yZWFkOyB0b3RhbF9yZWFkICs9IGxlbmd0aCkgeworCQlsZW5ndGggPSBrZXJuZWxfcmVjdm1zZyhzZXJ2ZXItPnNzb2NrZXQsIHNtYl9tc2csIGlvdiwgMSwKKwkJCQkJdG9fcmVhZCAtIHRvdGFsX3JlYWQsIDApOwogCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKKwkJCS8qIHRoZW4gd2lsbCBleGl0ICovCisJCQlyYyA9IDI7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgewotCQkJY0ZZSSgxLCAiUmVjb25uZWN0IGFmdGVyIHNlcnZlciBzdG9wcGVkIHJlc3BvbmRpbmciKTsKIAkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7Ci0JCQljRllJKDEsICJjYWxsIHRvIHJlY29ubmVjdCBkb25lIik7Ci0JCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCQkJY29udGludWU7CisJCQkvKiBSZWNvbm5lY3Qgd2FrZXMgdXAgcnNwbnMgcSAqLworCQkJLyogTm93IHdlIHdpbGwgcmVyZWFkIHNvY2sgKi8KKwkJCXJjID0gMTsKKwkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKGxlbmd0aCA9PSAtRVJFU1RBUlRTWVMgfHwKIAkJCSAgIGxlbmd0aCA9PSAtRUFHQUlOIHx8CiAJCQkgICBsZW5ndGggPT0gLUVJTlRSKSB7Ci0JCQltc2xlZXAoMSk7IC8qIG1pbmltdW0gc2xlZXAgdG8gcHJldmVudCBsb29waW5nCi0JCQkJYWxsb3dpbmcgc29ja2V0IHRvIGNsZWFyIGFuZCBhcHAgdGhyZWFkcyB0byBzZXQKLQkJCQl0Y3BTdGF0dXMgQ2lmc05lZWRSZWNvbm5lY3QgaWYgc2VydmVyIGh1bmcgKi8KLQkJCWlmIChwZHVfbGVuZ3RoIDwgNCkgewotCQkJCWlvdi5pb3ZfYmFzZSA9ICg0IC0gcGR1X2xlbmd0aCkgKwotCQkJCQkJCShjaGFyICopc21iX2J1ZmZlcjsKLQkJCQlpb3YuaW92X2xlbiA9IHBkdV9sZW5ndGg7Ci0JCQkJc21iX21zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0JCQkJc21iX21zZy5tc2dfY29udHJvbGxlbiA9IDA7Ci0JCQkJZ290byBpbmNvbXBsZXRlX3JjdjsKLQkJCX0gZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKGxlbmd0aCA8PSAwKSB7Ci0JCQljRllJKDEsICJSZWNvbm5lY3QgYWZ0ZXIgdW5leHBlY3RlZCBwZWVrIGVycm9yICVkIiwKLQkJCQlsZW5ndGgpOwotCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7Ci0JCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAobGVuZ3RoIDwgcGR1X2xlbmd0aCkgewotCQkJY0ZZSSgxLCAicmVxdWVzdGVkICVkIGJ5dGVzIGJ1dCBvbmx5IGdvdCAlZCBieXRlcyIsCi0JCQkJICBwZHVfbGVuZ3RoLCBsZW5ndGgpOwotCQkJcGR1X2xlbmd0aCAtPSBsZW5ndGg7Ci0JCQltc2xlZXAoMSk7Ci0JCQlnb3RvIGluY29tcGxldGVfcmN2OwotCQl9Ci0KLQkJLyogVGhlIHJpZ2h0IGFtb3VudCB3YXMgcmVhZCBmcm9tIHNvY2tldCAtIDQgYnl0ZXMgKi8KLQkJLyogc28gd2UgY2FuIG5vdyBpbnRlcnByZXQgdGhlIGxlbmd0aCBmaWVsZCAqLwotCi0JCS8qIHRoZSBmaXJzdCBieXRlIGJpZyBlbmRpYW4gb2YgdGhlIGxlbmd0aCBmaWVsZCwKLQkJaXMgYWN0dWFsbHkgbm90IHBhcnQgb2YgdGhlIGxlbmd0aCBidXQgdGhlIHR5cGUKLQkJd2l0aCB0aGUgbW9zdCBjb21tb24sIHplcm8sIGFzIHJlZ3VsYXIgZGF0YSAqLwotCQl0ZW1wID0gKigoY2hhciAqKSBzbWJfYnVmZmVyKTsKLQotCQkvKiBOb3RlIHRoYXQgRkMgMTAwMSBsZW5ndGggaXMgYmlnIGVuZGlhbiBvbiB0aGUgd2lyZSwKLQkJYnV0IHdlIGNvbnZlcnQgaXQgaGVyZSBzbyBpdCBpcyBhbHdheXMgbWFuaXB1bGF0ZWQKLQkJYXMgaG9zdCBieXRlIG9yZGVyICovCi0JCXBkdV9sZW5ndGggPSBiZTMyX3RvX2NwdShzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCk7Ci0KLQkJY0ZZSSgxLCAicmZjMTAwMiBsZW5ndGggMHgleCIsIHBkdV9sZW5ndGgrNCk7Ci0KLQkJaWYgKHRlbXAgPT0gKGNoYXIpIFJGQzEwMDJfU0VTU0lPTl9LRUVQX0FMSVZFKSB7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICh0ZW1wID09IChjaGFyKVJGQzEwMDJfUE9TSVRJVkVfU0VTU0lPTl9SRVNQT05TRSkgewotCQkJY0ZZSSgxLCAiR29vZCBSRkMgMTAwMiBzZXNzaW9uIHJzcCIpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAodGVtcCA9PSAoY2hhcilSRkMxMDAyX05FR0FUSVZFX1NFU1NJT05fUkVTUE9OU0UpIHsKLQkJCS8qIHdlIGdldCB0aGlzIGZyb20gV2luZG93cyA5OCBpbnN0ZWFkIG9mCi0JCQkgICBhbiBlcnJvciBvbiBTTUIgbmVncHJvdCByZXNwb25zZSAqLwotCQkJY0ZZSSgxLCAiTmVnYXRpdmUgUkZDMTAwMiBTZXNzaW9uIFJlc3BvbnNlIEVycm9yIDB4JXgpIiwKLQkJCQlwZHVfbGVuZ3RoKTsKLQkJCS8qIGdpdmUgc2VydmVyIGEgc2Vjb25kIHRvIGNsZWFuIHVwICAqLwotCQkJbXNsZWVwKDEwMDApOwotCQkJLyogYWx3YXlzIHRyeSA0NDUgZmlyc3Qgb24gcmVjb25uZWN0IHNpbmNlIHdlIGdldCBOQUNLCi0JCQkgKiBvbiBzb21lIGlmIHdlIGV2ZXIgY29ubmVjdGVkIHRvIHBvcnQgMTM5ICh0aGUgTkFDSwotCQkJICogaXMgc2luY2Ugd2UgZG8gbm90IGJlZ2luIHdpdGggUkZDMTAwMSBzZXNzaW9uCi0JCQkgKiBpbml0aWFsaXplIGZyYW1lKQorCQkJLyoKKwkJCSAqIE1pbmltdW0gc2xlZXAgdG8gcHJldmVudCBsb29waW5nLCBhbGxvd2luZyBzb2NrZXQKKwkJCSAqIHRvIGNsZWFyIGFuZCBhcHAgdGhyZWFkcyB0byBzZXQgdGNwU3RhdHVzCisJCQkgKiBDaWZzTmVlZFJlY29ubmVjdCBpZiBzZXJ2ZXIgaHVuZy4KIAkJCSAqLwotCQkJY2lmc19zZXRfcG9ydCgoc3RydWN0IHNvY2thZGRyICopCi0JCQkJCSZzZXJ2ZXItPmRzdGFkZHIsIENJRlNfUE9SVCk7Ci0JCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOwotCQkJY3NvY2tldCA9IHNlcnZlci0+c3NvY2tldDsKLQkJCXdha2VfdXAoJnNlcnZlci0+cmVzcG9uc2VfcSk7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICh0ZW1wICE9IChjaGFyKSAwKSB7Ci0JCQljRVJST1IoMSwgIlVua25vd24gUkZDIDEwMDIgZnJhbWUiKTsKLQkJCWNpZnNfZHVtcF9tZW0oIiBSZWNlaXZlZCBEYXRhOiAiLCAoY2hhciAqKXNtYl9idWZmZXIsCi0JCQkJICAgICAgbGVuZ3RoKTsKLQkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7Ci0JCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBlbHNlIHdlIGhhdmUgYW4gU01CIHJlc3BvbnNlICovCi0JCWlmICgocGR1X2xlbmd0aCA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB8fAotCQkJICAgIChwZHVfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtIDEgLSA0KSkgewotCQkJY0VSUk9SKDEsICJJbnZhbGlkIHNpemUgU01CIGxlbmd0aCAlZCBwZHVfbGVuZ3RoICVkIiwKLQkJCQkJbGVuZ3RoLCBwZHVfbGVuZ3RoKzQpOwotCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7Ci0JCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBlbHNlIGxlbmd0aCBvayAqLwotCQlyZWNvbm5lY3QgPSAwOwotCi0JCWlmIChwZHVfbGVuZ3RoID4gTUFYX0NJRlNfU01BTExfQlVGRkVSX1NJWkUgLSA0KSB7Ci0JCQlpc0xhcmdlQnVmID0gdHJ1ZTsKLQkJCW1lbWNweShiaWdidWYsIHNtYWxsYnVmLCA0KTsKLQkJCXNtYl9idWZmZXIgPSBiaWdidWY7Ci0JCX0KLQkJbGVuZ3RoID0gMDsKLQkJaW92Lmlvdl9iYXNlID0gNCArIChjaGFyICopc21iX2J1ZmZlcjsKLQkJaW92Lmlvdl9sZW4gPSBwZHVfbGVuZ3RoOwotCQlmb3IgKHRvdGFsX3JlYWQgPSAwOyB0b3RhbF9yZWFkIDwgcGR1X2xlbmd0aDsKLQkJICAgICB0b3RhbF9yZWFkICs9IGxlbmd0aCkgewotCQkJbGVuZ3RoID0ga2VybmVsX3JlY3Ztc2coY3NvY2tldCwgJnNtYl9tc2csICZpb3YsIDEsCi0JCQkJCQlwZHVfbGVuZ3RoIC0gdG90YWxfcmVhZCwgMCk7Ci0JCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKLQkJCQkvKiB0aGVuIHdpbGwgZXhpdCAqLwotCQkJCXJlY29ubmVjdCA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCQkJCS8qIFJlY29ubmVjdCB3YWtlcyB1cCByc3BucyBxICovCi0JCQkJLyogTm93IHdlIHdpbGwgcmVyZWFkIHNvY2sgKi8KLQkJCQlyZWNvbm5lY3QgPSAxOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIGlmIChsZW5ndGggPT0gLUVSRVNUQVJUU1lTIHx8Ci0JCQkJICAgbGVuZ3RoID09IC1FQUdBSU4gfHwKLQkJCQkgICBsZW5ndGggPT0gLUVJTlRSKSB7Ci0JCQkJbXNsZWVwKDEpOyAvKiBtaW5pbXVtIHNsZWVwIHRvIHByZXZlbnQgbG9vcGluZywKLQkJCQkJICAgICAgYWxsb3dpbmcgc29ja2V0IHRvIGNsZWFyIGFuZCBhcHAKLQkJCQkJICAgICAgdGhyZWFkcyB0byBzZXQgdGNwU3RhdHVzCi0JCQkJCSAgICAgIENpZnNOZWVkUmVjb25uZWN0IGlmIHNlcnZlciBodW5nKi8KLQkJCQlsZW5ndGggPSAwOworCQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCQkJbGVuZ3RoID0gMDsKKwkJCWlmICghaXNfaGVhZGVyX3JlYWQpCiAJCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKGxlbmd0aCA8PSAwKSB7Ci0JCQkJY0VSUk9SKDEsICJSZWNlaXZlZCBubyBkYXRhLCBleHBlY3RpbmcgJWQiLAotCQkJCQkgICAgICBwZHVfbGVuZ3RoIC0gdG90YWxfcmVhZCk7Ci0JCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCQljc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwotCQkJCXJlY29ubmVjdCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHJlY29ubmVjdCA9PSAyKQorCQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgaGVhZGVyIHJlYWQgKi8KKwkJCWlmICh0b3RhbF9yZWFkKSB7CisJCQkJaW92LT5pb3ZfYmFzZSA9ICh0b19yZWFkIC0gdG90YWxfcmVhZCkgKworCQkJCQkJYnVmOworCQkJCWlvdi0+aW92X2xlbiA9IHRvX3JlYWQgLSB0b3RhbF9yZWFkOworCQkJCXNtYl9tc2ctPm1zZ19jb250cm9sID0gTlVMTDsKKwkJCQlzbWJfbXNnLT5tc2dfY29udHJvbGxlbiA9IDA7CisJCQkJcmMgPSAzOworCQkJfSBlbHNlCisJCQkJcmMgPSAxOwogCQkJYnJlYWs7Ci0JCWVsc2UgaWYgKHJlY29ubmVjdCA9PSAxKQotCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAobGVuZ3RoIDw9IDApIHsKKwkJCWNFUlJPUigxLCAiUmVjZWl2ZWQgbm8gZGF0YSwgZXhwZWN0aW5nICVkIiwKKwkJCSAgICAgICB0b19yZWFkIC0gdG90YWxfcmVhZCk7CisJCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CiAKLQkJdG90YWxfcmVhZCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCSpwdG90YWxfcmVhZCA9IHRvdGFsX3JlYWQ7CisJcmV0dXJuIHJjOworfQogCi0JCWR1bXBfc21iKHNtYl9idWZmZXIsIHRvdGFsX3JlYWQpOworc3RhdGljIGJvb2wKK2NoZWNrX3JmYzEwMDJfaGVhZGVyKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgY2hhciAqYnVmKQoreworCWNoYXIgdGVtcCA9ICpidWY7CisJdW5zaWduZWQgaW50IHBkdV9sZW5ndGggPSBiZTMyX3RvX2NwdSgKKwkJCQkoKHN0cnVjdCBzbWJfaGRyICopYnVmKS0+c21iX2J1Zl9sZW5ndGgpOwogCisJLyoKKwkgKiBUaGUgZmlyc3QgYnl0ZSBiaWcgZW5kaWFuIG9mIHRoZSBsZW5ndGggZmllbGQsCisJICogaXMgYWN0dWFsbHkgbm90IHBhcnQgb2YgdGhlIGxlbmd0aCBidXQgdGhlIHR5cGUKKwkgKiB3aXRoIHRoZSBtb3N0IGNvbW1vbiwgemVybywgYXMgcmVndWxhciBkYXRhLgorCSAqLworCWlmICh0ZW1wID09IChjaGFyKSBSRkMxMDAyX1NFU1NJT05fS0VFUF9BTElWRSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICh0ZW1wID09IChjaGFyKVJGQzEwMDJfUE9TSVRJVkVfU0VTU0lPTl9SRVNQT05TRSkgeworCQljRllJKDEsICJHb29kIFJGQyAxMDAyIHNlc3Npb24gcnNwIik7CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKHRlbXAgPT0gKGNoYXIpUkZDMTAwMl9ORUdBVElWRV9TRVNTSU9OX1JFU1BPTlNFKSB7CiAJCS8qCi0JCSAqIFdlIGtub3cgdGhhdCB3ZSByZWNlaXZlZCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBNSUQgYXMgd2UKLQkJICogY2hlY2tlZCB0aGUgcGR1X2xlbmd0aCBlYXJsaWVyLiBOb3cgY2hlY2sgdG8gc2VlCi0JCSAqIGlmIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgaXMgT0suIFdlIGJvcnJvdyB0aGUgbGVuZ3RoCi0JCSAqIHZhciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGxvb3AgdG8gYXZvaWQgYSBuZXcgc3RhY2sgdmFyLgotCQkgKgotCQkgKiA0OCBieXRlcyBpcyBlbm91Z2ggdG8gZGlzcGxheSB0aGUgaGVhZGVyIGFuZCBhIGxpdHRsZSBiaXQKLQkJICogaW50byB0aGUgcGF5bG9hZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCQkgKiBXZSBnZXQgdGhpcyBmcm9tIFdpbmRvd3MgOTggaW5zdGVhZCBvZiBhbiBlcnJvciBvbgorCQkgKiBTTUIgbmVncHJvdCByZXNwb25zZS4KIAkJICovCi0JCWxlbmd0aCA9IGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCk7Ci0JCWlmIChsZW5ndGggIT0gMCkKLQkJCWNpZnNfZHVtcF9tZW0oIkJhZCBTTUI6ICIsIHNtYl9idWZmZXIsCi0JCQkJCW1pbl90KHVuc2lnbmVkIGludCwgdG90YWxfcmVhZCwgNDgpKTsKKwkJY0ZZSSgxLCAiTmVnYXRpdmUgUkZDMTAwMiBTZXNzaW9uIFJlc3BvbnNlIEVycm9yIDB4JXgpIiwKKwkJCXBkdV9sZW5ndGgpOworCQkvKiBnaXZlIHNlcnZlciBhIHNlY29uZCB0byBjbGVhbiB1cCAqLworCQltc2xlZXAoMTAwMCk7CisJCS8qCisJCSAqIEFsd2F5cyB0cnkgNDQ1IGZpcnN0IG9uIHJlY29ubmVjdCBzaW5jZSB3ZSBnZXQgTkFDSworCQkgKiBvbiBzb21lIGlmIHdlIGV2ZXIgY29ubmVjdGVkIHRvIHBvcnQgMTM5ICh0aGUgTkFDSworCQkgKiBpcyBzaW5jZSB3ZSBkbyBub3QgYmVnaW4gd2l0aCBSRkMxMDAxIHNlc3Npb24KKwkJICogaW5pdGlhbGl6ZSBmcmFtZSkuCisJCSAqLworCQljaWZzX3NldF9wb3J0KChzdHJ1Y3Qgc29ja2FkZHIgKikKKwkJCQkmc2VydmVyLT5kc3RhZGRyLCBDSUZTX1BPUlQpOworCQljaWZzX3JlY29ubmVjdChzZXJ2ZXIpOworCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmICh0ZW1wICE9IChjaGFyKSAwKSB7CisJCWNFUlJPUigxLCAiVW5rbm93biBSRkMgMTAwMiBmcmFtZSIpOworCQljaWZzX2R1bXBfbWVtKCIgUmVjZWl2ZWQgRGF0YTogIiwgYnVmLCA0KTsKKwkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotCQltaWRfZW50cnkgPSBOVUxMOwotCQlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKKwkvKiBlbHNlIHdlIGhhdmUgYW4gU01CIHJlc3BvbnNlICovCisJaWYgKChwZHVfbGVuZ3RoID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSAtIDQpIHx8CisJICAgIChwZHVfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtIDEgLSA0KSkgeworCQljRVJST1IoMSwgIkludmFsaWQgc2l6ZSBTTUIgbGVuZ3RoICVkIHBkdV9sZW5ndGggJWQiLAorCQkgICAgICAgNCwgcGR1X2xlbmd0aCs0KTsKKwkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKKwkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewotCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOworCXJldHVybiB0cnVlOworfQogCi0JCQlpZiAobWlkX2VudHJ5LT5taWQgIT0gc21iX2J1ZmZlci0+TWlkIHx8Ci0JCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSAhPSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHwKLQkJCSAgICBtaWRfZW50cnktPmNvbW1hbmQgIT0gc21iX2J1ZmZlci0+Q29tbWFuZCkgewotCQkJCW1pZF9lbnRyeSA9IE5VTEw7Ci0JCQkJY29udGludWU7Ci0JCQl9CitzdGF0aWMgc3RydWN0IG1pZF9xX2VudHJ5ICoKK2ZpbmRfY2lmc19taWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBzdHJ1Y3Qgc21iX2hkciAqYnVmLAorCSAgICAgIGludCAqbGVuZ3RoLCBib29sIGlzX2xhcmdlX2J1ZiwgYm9vbCAqaXNfbXVsdGlfcnNwLCBjaGFyICoqYmlnYnVmKQoreworCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkID0gTlVMTCwgKnRtcF9taWQsICpyZXQgPSBOVUxMOwogCi0JCQlpZiAobGVuZ3RoID09IDAgJiYKLQkJCSAgICBjaGVjazJuZFQyKHNtYl9idWZmZXIsIHNlcnZlci0+bWF4QnVmKSA+IDApIHsKLQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCi0JCQkJaXNNdWx0aVJzcCA9IHRydWU7Ci0JCQkJaWYgKG1pZF9lbnRyeS0+cmVzcF9idWYpIHsKLQkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KLQkJCQkJbGVuZ3RoID0gY29hbGVzY2VfdDIoc21iX2J1ZmZlciwKLQkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmKTsKLQkJCQkJaWYgKGxlbmd0aCA+IDApIHsKLQkJCQkJCWxlbmd0aCA9IDA7Ci0JCQkJCQltaWRfZW50cnktPm11bHRpUnNwID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9IGVsc2UgewotCQkJCQkJLyogYWxsIHBhcnRzIHJlY2VpdmVkIG9yCi0JCQkJCQkgKiBwYWNrZXQgaXMgbWFsZm9ybWVkCi0JCQkJCQkgKi8KLQkJCQkJCW1pZF9lbnRyeS0+bXVsdGlFbmQgPSB0cnVlOwotCQkJCQkJZ290byBtdWx0aV90Ml9mbmQ7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBGSVhNRTogc3dpdGNoIHRvIGFscmVhZHkKLQkJCQkJCSAqICAgICAgICBhbGxvY2F0ZWQgbGFyZ2VidWY/Ci0JCQkJCQkgKi8KLQkJCQkJCWNFUlJPUigxLCAiMXN0IHRyYW5zMiByZXNwICIKLQkJCQkJCQkgICJuZWVkcyBiaWdidWYiKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCi0JCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KLQkJCQkJCQkgc21iX2J1ZmZlcjsKLQkJCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSB0cnVlOwotCQkJCQkJYmlnYnVmID0gTlVMTDsKLQkJCQkJfQorCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtaWQsIHRtcF9taWQsICZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EsIHFoZWFkKSB7CisJCWlmIChtaWQtPm1pZCAhPSBidWYtPk1pZCB8fAorCQkgICAgbWlkLT5taWRTdGF0ZSAhPSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHwKKwkJICAgIG1pZC0+Y29tbWFuZCAhPSBidWYtPkNvbW1hbmQpCisJCQljb250aW51ZTsKKworCQlpZiAoKmxlbmd0aCA9PSAwICYmIGNoZWNrMm5kVDIoYnVmLCBzZXJ2ZXItPm1heEJ1ZikgPiAwKSB7CisJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCisJCQkqaXNfbXVsdGlfcnNwID0gdHJ1ZTsKKwkJCWlmIChtaWQtPnJlc3BfYnVmKSB7CisJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KKwkJCQkqbGVuZ3RoID0gY29hbGVzY2VfdDIoYnVmLCBtaWQtPnJlc3BfYnVmKTsKKwkJCQlpZiAoKmxlbmd0aCA+IDApIHsKKwkJCQkJKmxlbmd0aCA9IDA7CisJCQkJCW1pZC0+bXVsdGlSc3AgPSB0cnVlOworCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJYnJlYWs7CisJCQkJLyogQWxsIHBhcnRzIHJlY2VpdmVkIG9yIHBhY2tldCBpcyBtYWxmb3JtZWQuICovCisJCQkJbWlkLT5tdWx0aUVuZCA9IHRydWU7CisJCQkJZ290byBtdWx0aV90Ml9mbmQ7CiAJCQl9Ci0JCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKLQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOwotbXVsdGlfdDJfZm5kOgotCQkJaWYgKGxlbmd0aCA9PSAwKQotCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7Ci0JCQllbHNlCi0JCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOwotI2VuZGlmCi0JCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCWlmICghaXNfbGFyZ2VfYnVmKSB7CisJCQkJLypGSVhNRTogc3dpdGNoIHRvIGFscmVhZHkgYWxsb2NhdGVkIGxhcmdlYnVmPyovCisJCQkJY0VSUk9SKDEsICIxc3QgdHJhbnMyIHJlc3AgbmVlZHMgYmlnYnVmIik7CisJCQl9IGVsc2UgeworCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCisJCQkJbWlkLT5yZXNwX2J1ZiA9IGJ1ZjsKKwkJCQltaWQtPmxhcmdlQnVmID0gdHJ1ZTsKKwkJCQkqYmlnYnVmID0gTlVMTDsKKwkJCX0KIAkJCWJyZWFrOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCW1pZC0+cmVzcF9idWYgPSBidWY7CisJCW1pZC0+bGFyZ2VCdWYgPSBpc19sYXJnZV9idWY7CittdWx0aV90Ml9mbmQ6CisJCWlmICgqbGVuZ3RoID09IDApCisJCQltaWQtPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQllbHNlCisJCQltaWQtPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX01BTEZPUk1FRDsKKyNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKKwkJbWlkLT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKKyNlbmRpZgorCQlsaXN0X2RlbF9pbml0KCZtaWQtPnFoZWFkKTsKKwkJcmV0ID0gbWlkOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAotCQlpZiAobWlkX2VudHJ5ICE9IE5VTEwpIHsKLQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKLQkJCS8qIFdhcyBwcmV2aW91cyBidWYgcHV0IGluIG1weCBzdHJ1Y3QgZm9yIG11bHRpLXJzcD8gKi8KLQkJCWlmICghaXNNdWx0aVJzcCkgewotCQkJCS8qIHNtYiBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSB1c2VyIHRocmVhZCAqLwotCQkJCWlmIChpc0xhcmdlQnVmKQotCQkJCQliaWdidWYgPSBOVUxMOwotCQkJCWVsc2UKLQkJCQkJc21hbGxidWYgPSBOVUxMOwotCQkJfQotCQl9IGVsc2UgaWYgKGxlbmd0aCAhPSAwKSB7Ci0JCQkvKiByZXNwb25zZSBzYW5pdHkgY2hlY2tzIGZhaWxlZCAqLwotCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAoIWlzX3ZhbGlkX29wbG9ja19icmVhayhzbWJfYnVmZmVyLCBzZXJ2ZXIpICYmCi0JCQkgICAhaXNNdWx0aVJzcCkgewotCQkJY0VSUk9SKDEsICJObyB0YXNrIHRvIHdha2UsIHVua25vd24gZnJhbWUgcmVjZWl2ZWQhICIKLQkJCQkgICAiTnVtTWlkcyAlZCIsIGF0b21pY19yZWFkKCZtaWRDb3VudCkpOwotCQkJY2lmc19kdW1wX21lbSgiUmVjZWl2ZWQgRGF0YSBpczogIiwgKGNoYXIgKilzbWJfYnVmZmVyLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikpOwotI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgotCQkJY2lmc19kdW1wX2RldGFpbChzbWJfYnVmZmVyKTsKLQkJCWNpZnNfZHVtcF9taWRzKHNlcnZlcik7Ci0jZW5kaWYgLyogQ0lGU19ERUJVRzIgKi8KKwlyZXR1cm4gcmV0OworfQogCi0JCX0KLQl9IC8qIGVuZCB3aGlsZSAhRVhJVElORyAqLworc3RhdGljIHZvaWQgY2xlYW5fZGVtdWx0aXBsZXhfaW5mbyhzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIpCit7CisJaW50IGxlbmd0aDsKIAogCS8qIHRha2UgaXQgb2ZmIHRoZSBsaXN0LCBpZiBpdCdzIG5vdCBhbHJlYWR5ICovCiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CkBAIC02NjgsMzUgKzU0NSwzOSBAQAogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJd2FrZV91cF9hbGwoJnNlcnZlci0+cmVzcG9uc2VfcSk7CiAKLQkvKiBjaGVjayBpZiB3ZSBoYXZlIGJsb2NrZWQgcmVxdWVzdHMgdGhhdCBuZWVkIHRvIGZyZWUgKi8KLQkvKiBOb3RlIHRoYXQgY2lmc19tYXhfcGVuZGluZyBpcyBub3JtYWxseSA1MCwgYnV0Ci0JY2FuIGJlIHNldCBhdCBtb2R1bGUgaW5zdGFsbCB0aW1lIHRvIGFzIGxpdHRsZSBhcyB0d28gKi8KKwkvKgorCSAqIENoZWNrIGlmIHdlIGhhdmUgYmxvY2tlZCByZXF1ZXN0cyB0aGF0IG5lZWQgdG8gZnJlZS4gTm90ZSB0aGF0CisJICogY2lmc19tYXhfcGVuZGluZyBpcyBub3JtYWxseSA1MCwgYnV0IGNhbiBiZSBzZXQgYXQgbW9kdWxlIGluc3RhbGwKKwkgKiB0aW1lIHRvIGFzIGxpdHRsZSBhcyB0d28uCisJICovCiAJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJaWYgKGF0b21pY19yZWFkKCZzZXJ2ZXItPmluRmxpZ2h0KSA+PSBjaWZzX21heF9wZW5kaW5nKQogCQlhdG9taWNfc2V0KCZzZXJ2ZXItPmluRmxpZ2h0LCBjaWZzX21heF9wZW5kaW5nIC0gMSk7Ci0JLyogV2UgZG8gbm90IHdhbnQgdG8gc2V0IHRoZSBtYXhfcGVuZGluZyB0b28gbG93IG9yIHdlCi0JY291bGQgZW5kIHVwIHdpdGggdGhlIGNvdW50ZXIgZ29pbmcgbmVnYXRpdmUgKi8KKwkvKgorCSAqIFdlIGRvIG5vdCB3YW50IHRvIHNldCB0aGUgbWF4X3BlbmRpbmcgdG9vIGxvdyBvciB3ZSBjb3VsZCBlbmQgdXAKKwkgKiB3aXRoIHRoZSBjb3VudGVyIGdvaW5nIG5lZ2F0aXZlLgorCSAqLwogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JLyogQWx0aG91Z2ggdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcmVxdWVzdHMgYmxvY2tlZCBvbgotCXRoaXMgcXVldWUgaXQgY2FuIG5vdCBodXJ0IHRvIGJlIHBhcmFub2lkIGFuZCB0cnkgdG8gd2FrZSB1cCByZXF1ZXN0cwotCXRoYXQgbWF5IGhhdmVuIGJlZW4gYmxvY2tlZCB3aGVuIG1vcmUgdGhhbiA1MCBhdCB0aW1lIHdlcmUgb24gdGhlIHdpcmUKLQl0byB0aGUgc2FtZSBzZXJ2ZXIgLSB0aGV5IG5vdyB3aWxsIHNlZSB0aGUgc2Vzc2lvbiBpcyBpbiBleGl0IHN0YXRlCi0JYW5kIGdldCBvdXQgb2YgU2VuZFJlY2VpdmUuICAqLworCS8qCisJICogQWx0aG91Z2ggdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcmVxdWVzdHMgYmxvY2tlZCBvbiB0aGlzIHF1ZXVlIGl0CisJICogY2FuIG5vdCBodXJ0IHRvIGJlIHBhcmFub2lkIGFuZCB0cnkgdG8gd2FrZSB1cCByZXF1ZXN0cyB0aGF0IG1heQorCSAqIGhhdmVuIGJlZW4gYmxvY2tlZCB3aGVuIG1vcmUgdGhhbiA1MCBhdCB0aW1lIHdlcmUgb24gdGhlIHdpcmUgdG8gdGhlCisJICogc2FtZSBzZXJ2ZXIgLSB0aGV5IG5vdyB3aWxsIHNlZSB0aGUgc2Vzc2lvbiBpcyBpbiBleGl0IHN0YXRlIGFuZCBnZXQKKwkgKiBvdXQgb2YgU2VuZFJlY2VpdmUuCisJICovCiAJd2FrZV91cF9hbGwoJnNlcnZlci0+cmVxdWVzdF9xKTsKIAkvKiBnaXZlIHRob3NlIHJlcXVlc3RzIHRpbWUgdG8gZXhpdCAqLwogCW1zbGVlcCgxMjUpOwogCiAJaWYgKHNlcnZlci0+c3NvY2tldCkgewotCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CisJCXNvY2tfcmVsZWFzZShzZXJ2ZXItPnNzb2NrZXQpOwogCQlzZXJ2ZXItPnNzb2NrZXQgPSBOVUxMOwogCX0KLQkvKiBidWZmZXIgdXN1YWxseSBmcmVlZCBpbiBmcmVlX21pZCAtIG5lZWQgdG8gZnJlZSBpdCBoZXJlIG9uIGV4aXQgKi8KLQljaWZzX2J1Zl9yZWxlYXNlKGJpZ2J1Zik7Ci0JaWYgKHNtYWxsYnVmKSAvKiBubyBzZW5zZSBsb2dnaW5nIGEgZGVidWcgbWVzc2FnZSBpZiBOVUxMICovCi0JCWNpZnNfc21hbGxfYnVmX3JlbGVhc2Uoc21hbGxidWYpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZzZXJ2ZXItPnBlbmRpbmdfbWlkX3EpKSB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgZGlzcG9zZV9saXN0OworCQlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZF9lbnRyeTsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdG1wLCAqdG1wMjsKIAogCQlJTklUX0xJU1RfSEVBRCgmZGlzcG9zZV9saXN0KTsKIAkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CkBAIC03MjAsMjYgKzYwMSwxODQgQEAKIAl9CiAKIAlpZiAoIWxpc3RfZW1wdHkoJnNlcnZlci0+cGVuZGluZ19taWRfcSkpIHsKLQkJLyogbXB4IHRocmVhZHMgaGF2ZSBub3QgZXhpdGVkIHlldCBnaXZlIHRoZW0KLQkJYXQgbGVhc3QgdGhlIHNtYiBzZW5kIHRpbWVvdXQgdGltZSBmb3IgbG9uZyBvcHMgKi8KLQkJLyogZHVlIHRvIGRlbGF5cyBvbiBvcGxvY2sgYnJlYWsgcmVxdWVzdHMsIHdlIG5lZWQKLQkJdG8gd2FpdCBhdCBsZWFzdCA0NSBzZWNvbmRzIGJlZm9yZSBnaXZpbmcgdXAKLQkJb24gYSByZXF1ZXN0IGdldHRpbmcgYSByZXNwb25zZSBhbmQgZ29pbmcgYWhlYWQKLQkJYW5kIGtpbGxpbmcgY2lmc2QgKi8KKwkJLyoKKwkJICogbXB4IHRocmVhZHMgaGF2ZSBub3QgZXhpdGVkIHlldCBnaXZlIHRoZW0gYXQgbGVhc3QgdGhlIHNtYgorCQkgKiBzZW5kIHRpbWVvdXQgdGltZSBmb3IgbG9uZyBvcHMuCisJCSAqCisJCSAqIER1ZSB0byBkZWxheXMgb24gb3Bsb2NrIGJyZWFrIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHdhaXQgYXQKKwkJICogbGVhc3QgNDUgc2Vjb25kcyBiZWZvcmUgZ2l2aW5nIHVwIG9uIGEgcmVxdWVzdCBnZXR0aW5nIGEKKwkJICogcmVzcG9uc2UgYW5kIGdvaW5nIGFoZWFkIGFuZCBraWxsaW5nIGNpZnNkLgorCQkgKi8KIAkJY0ZZSSgxLCAiV2FpdCBmb3IgZXhpdCBmcm9tIGRlbXVsdGlwbGV4IHRocmVhZCIpOwogCQltc2xlZXAoNDYwMDApOwotCQkvKiBpZiB0aHJlYWRzIHN0aWxsIGhhdmUgbm90IGV4aXRlZCB0aGV5IGFyZSBwcm9iYWJseSBuZXZlcgotCQljb21pbmcgaG9tZSBub3QgbXVjaCBlbHNlIHdlIGNhbiBkbyBidXQgZnJlZSB0aGUgbWVtb3J5ICovCisJCS8qCisJCSAqIElmIHRocmVhZHMgc3RpbGwgaGF2ZSBub3QgZXhpdGVkIHRoZXkgYXJlIHByb2JhYmx5IG5ldmVyCisJCSAqIGNvbWluZyBob21lIG5vdCBtdWNoIGVsc2Ugd2UgY2FuIGRvIGJ1dCBmcmVlIHRoZSBtZW1vcnkuCisJCSAqLwogCX0KIAogCWtmcmVlKHNlcnZlci0+aG9zdG5hbWUpOwotCXRhc2tfdG9fd2FrZSA9IHhjaGcoJnNlcnZlci0+dHNrLCBOVUxMKTsKIAlrZnJlZShzZXJ2ZXIpOwogCiAJbGVuZ3RoID0gYXRvbWljX2RlY19yZXR1cm4oJnRjcFNlc0FsbG9jQ291bnQpOwotCWlmIChsZW5ndGggID4gMCkKKwlpZiAobGVuZ3RoID4gMCkKIAkJbWVtcG9vbF9yZXNpemUoY2lmc19yZXFfcG9vbHAsIGxlbmd0aCArIGNpZnNfbWluX3JjdiwKIAkJCQlHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGludAorY2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcCkKK3sKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IHA7CisJdW5zaWduZWQgaW50IHBkdV9sZW5ndGgsIHRvdGFsX3JlYWQ7CisJY2hhciAqYnVmID0gTlVMTCwgKmJpZ2J1ZiA9IE5VTEwsICpzbWFsbGJ1ZiA9IE5VTEw7CisJc3RydWN0IHNtYl9oZHIgKnNtYl9idWZmZXIgPSBOVUxMOworCXN0cnVjdCBtc2doZHIgc21iX21zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX3RvX3dha2UgPSBOVUxMOworCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OworCWJvb2wgaXNMYXJnZUJ1ZiA9IGZhbHNlOworCWJvb2wgaXNNdWx0aVJzcCA9IGZhbHNlOworCWludCByYzsKKworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCWNGWUkoMSwgIkRlbXVsdGlwbGV4IFBJRDogJWQiLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisKKwlsZW5ndGggPSBhdG9taWNfaW5jX3JldHVybigmdGNwU2VzQWxsb2NDb3VudCk7CisJaWYgKGxlbmd0aCA+IDEpCisJCW1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YsCisJCQkJR0ZQX0tFUk5FTCk7CisKKwlzZXRfZnJlZXphYmxlKCk7CisJd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKSB7CisJCWlmICh0cnlfdG9fZnJlZXplKCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWFsbG9jYXRlX2J1ZmZlcnMoJmJpZ2J1ZiwgJnNtYWxsYnVmLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc21iX2hkciksIGlzTGFyZ2VCdWYpKQorCQkJY29udGludWU7CisKKwkJaXNMYXJnZUJ1ZiA9IGZhbHNlOworCQlpc011bHRpUnNwID0gZmFsc2U7CisJCXNtYl9idWZmZXIgPSAoc3RydWN0IHNtYl9oZHIgKilzbWFsbGJ1ZjsKKwkJYnVmID0gc21hbGxidWY7CisJCWlvdi5pb3ZfYmFzZSA9IGJ1ZjsKKwkJaW92Lmlvdl9sZW4gPSA0OworCQlzbWJfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwkJc21iX21zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCXBkdV9sZW5ndGggPSA0OyAvKiBlbm91Z2ggdG8gZ2V0IFJGQzEwMDEgaGVhZGVyICovCisKK2luY29tcGxldGVfcmN2OgorCQlpZiAoZWNob19yZXRyaWVzID4gMCAmJiBzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZXJ2ZXItPmxzdHJwICsKKwkJCQkJKGVjaG9fcmV0cmllcyAqIFNNQl9FQ0hPX0lOVEVSVkFMKSkpIHsKKwkJCWNFUlJPUigxLCAiU2VydmVyICVzIGhhcyBub3QgcmVzcG9uZGVkIGluICVkIHNlY29uZHMuICIKKwkJCQkgICJSZWNvbm5lY3RpbmcuLi4iLCBzZXJ2ZXItPmhvc3RuYW1lLAorCQkJCSAgKGVjaG9fcmV0cmllcyAqIFNNQl9FQ0hPX0lOVEVSVkFMIC8gSFopKTsKKwkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CisJCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOworCQkJY29udGludWU7CisJCX0KKworCQlyYyA9IHJlYWRfZnJvbV9zb2NrZXQoc2VydmVyLCAmc21iX21zZywgJmlvdiwgcGR1X2xlbmd0aCwKKwkJCQkgICAgICAmdG90YWxfcmVhZCwgdHJ1ZSAvKiBoZWFkZXIgcmVhZCAqLyk7CisJCWlmIChyYyA9PSAzKQorCQkJZ290byBpbmNvbXBsZXRlX3JjdjsKKwkJZWxzZSBpZiAocmMgPT0gMikKKwkJCWJyZWFrOworCQllbHNlIGlmIChyYyA9PSAxKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIHJpZ2h0IGFtb3VudCB3YXMgcmVhZCBmcm9tIHNvY2tldCAtIDQgYnl0ZXMsCisJCSAqIHNvIHdlIGNhbiBub3cgaW50ZXJwcmV0IHRoZSBsZW5ndGggZmllbGQuCisJCSAqLworCisJCS8qCisJCSAqIE5vdGUgdGhhdCBSRkMgMTAwMSBsZW5ndGggaXMgYmlnIGVuZGlhbiBvbiB0aGUgd2lyZSwKKwkJICogYnV0IHdlIGNvbnZlcnQgaXQgaGVyZSBzbyBpdCBpcyBhbHdheXMgbWFuaXB1bGF0ZWQKKwkJICogYXMgaG9zdCBieXRlIG9yZGVyLgorCQkgKi8KKwkJcGR1X2xlbmd0aCA9IGJlMzJfdG9fY3B1KHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoKTsKKworCQljRllJKDEsICJyZmMxMDAyIGxlbmd0aCAweCV4IiwgcGR1X2xlbmd0aCs0KTsKKwkJaWYgKCFjaGVja19yZmMxMDAyX2hlYWRlcihzZXJ2ZXIsIGJ1ZikpCisJCQljb250aW51ZTsKKworCQkvKiBlbHNlIGxlbmd0aCBvayAqLworCQlpZiAocGR1X2xlbmd0aCA+IE1BWF9DSUZTX1NNQUxMX0JVRkZFUl9TSVpFIC0gNCkgeworCQkJaXNMYXJnZUJ1ZiA9IHRydWU7CisJCQltZW1jcHkoYmlnYnVmLCBzbWFsbGJ1ZiwgNCk7CisJCQlzbWJfYnVmZmVyID0gKHN0cnVjdCBzbWJfaGRyICopYmlnYnVmOworCQkJYnVmID0gYmlnYnVmOworCQl9CisKKwkJaW92Lmlvdl9iYXNlID0gNCArIGJ1ZjsKKwkJaW92Lmlvdl9sZW4gPSBwZHVfbGVuZ3RoOworCQlyYyA9IHJlYWRfZnJvbV9zb2NrZXQoc2VydmVyLCAmc21iX21zZywgJmlvdiwgcGR1X2xlbmd0aCwKKwkJCQkgICAgICAmdG90YWxfcmVhZCwgZmFsc2UpOworCQlpZiAocmMgPT0gMikKKwkJCWJyZWFrOworCQllbHNlIGlmIChyYyA9PSAxKQorCQkJY29udGludWU7CisKKwkJdG90YWxfcmVhZCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCisJCWR1bXBfc21iKHNtYl9idWZmZXIsIHRvdGFsX3JlYWQpOworCisJCS8qCisJCSAqIFdlIGtub3cgdGhhdCB3ZSByZWNlaXZlZCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBNSUQgYXMgd2UKKwkJICogY2hlY2tlZCB0aGUgcGR1X2xlbmd0aCBlYXJsaWVyLiBOb3cgY2hlY2sgdG8gc2VlCisJCSAqIGlmIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgaXMgT0suIFdlIGJvcnJvdyB0aGUgbGVuZ3RoCisJCSAqIHZhciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGxvb3AgdG8gYXZvaWQgYSBuZXcgc3RhY2sgdmFyLgorCQkgKgorCQkgKiA0OCBieXRlcyBpcyBlbm91Z2ggdG8gZGlzcGxheSB0aGUgaGVhZGVyIGFuZCBhIGxpdHRsZSBiaXQKKwkJICogaW50byB0aGUgcGF5bG9hZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCQkgKi8KKwkJbGVuZ3RoID0gY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKTsKKwkJaWYgKGxlbmd0aCAhPSAwKQorCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgYnVmLAorCQkJCSAgICAgIG1pbl90KHVuc2lnbmVkIGludCwgdG90YWxfcmVhZCwgNDgpKTsKKworCQlzZXJ2ZXItPmxzdHJwID0gamlmZmllczsKKworCQltaWRfZW50cnkgPSBmaW5kX2NpZnNfbWlkKHNlcnZlciwgc21iX2J1ZmZlciwgJmxlbmd0aCwKKwkJCQkJICBpc0xhcmdlQnVmLCAmaXNNdWx0aVJzcCwgJmJpZ2J1Zik7CisJCWlmIChtaWRfZW50cnkgIT0gTlVMTCkgeworCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOworCQkJLyogV2FzIHByZXZpb3VzIGJ1ZiBwdXQgaW4gbXB4IHN0cnVjdCBmb3IgbXVsdGktcnNwPyAqLworCQkJaWYgKCFpc011bHRpUnNwKSB7CisJCQkJLyogc21iIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHVzZXIgdGhyZWFkICovCisJCQkJaWYgKGlzTGFyZ2VCdWYpCisJCQkJCWJpZ2J1ZiA9IE5VTEw7CisJCQkJZWxzZQorCQkJCQlzbWFsbGJ1ZiA9IE5VTEw7CisJCQl9CisJCX0gZWxzZSBpZiAobGVuZ3RoICE9IDApIHsKKwkJCS8qIHJlc3BvbnNlIHNhbml0eSBjaGVja3MgZmFpbGVkICovCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHNtYl9idWZmZXIsIHNlcnZlcikgJiYKKwkJCSAgICFpc011bHRpUnNwKSB7CisJCQljRVJST1IoMSwgIk5vIHRhc2sgdG8gd2FrZSwgdW5rbm93biBmcmFtZSByZWNlaXZlZCEgIgorCQkJCSAgICJOdW1NaWRzICVkIiwgYXRvbWljX3JlYWQoJm1pZENvdW50KSk7CisJCQljaWZzX2R1bXBfbWVtKCJSZWNlaXZlZCBEYXRhIGlzOiAiLCBidWYsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSk7CisjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCisJCQljaWZzX2R1bXBfZGV0YWlsKHNtYl9idWZmZXIpOworCQkJY2lmc19kdW1wX21pZHMoc2VydmVyKTsKKyNlbmRpZiAvKiBDSUZTX0RFQlVHMiAqLworCisJCX0KKwl9IC8qIGVuZCB3aGlsZSAhRVhJVElORyAqLworCisJLyogYnVmZmVyIHVzdWFsbHkgZnJlZWQgaW4gZnJlZV9taWQgLSBuZWVkIHRvIGZyZWUgaXQgaGVyZSBvbiBleGl0ICovCisJY2lmc19idWZfcmVsZWFzZShiaWdidWYpOworCWlmIChzbWFsbGJ1ZikgLyogbm8gc2Vuc2UgbG9nZ2luZyBhIGRlYnVnIG1lc3NhZ2UgaWYgTlVMTCAqLworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHNtYWxsYnVmKTsKKworCXRhc2tfdG9fd2FrZSA9IHhjaGcoJnNlcnZlci0+dHNrLCBOVUxMKTsKKwljbGVhbl9kZW11bHRpcGxleF9pbmZvKHNlcnZlcik7CiAKIAkvKiBpZiBzZXJ2ZXItPnRzayB3YXMgTlVMTCB0aGVuIHdhaXQgZm9yIGEgc2lnbmFsIGJlZm9yZSBleGl0aW5nICovCiAJaWYgKCF0YXNrX3RvX3dha2UpIHsKQEAgLTI4MzksNyArMjg3OCw4IEBACiAJa2ZyZWUodm9sdW1lX2luZm8tPnVzZXJuYW1lKTsKIAlremZyZWUodm9sdW1lX2luZm8tPnBhc3N3b3JkKTsKIAlrZnJlZSh2b2x1bWVfaW5mby0+VU5DKTsKLQlrZnJlZSh2b2x1bWVfaW5mby0+VU5DaXApOworCWlmICh2b2x1bWVfaW5mby0+VU5DaXAgIT0gdm9sdW1lX2luZm8tPlVOQyArIDIpCisJCWtmcmVlKHZvbHVtZV9pbmZvLT5VTkNpcCk7CiAJa2ZyZWUodm9sdW1lX2luZm8tPmRvbWFpbm5hbWUpOwogCWtmcmVlKHZvbHVtZV9pbmZvLT5pb2NoYXJzZXQpOwogCWtmcmVlKHZvbHVtZV9pbmZvLT5wcmVwYXRoKTsKQEAgLTMxOTMsMTUgKzMyMzMsOSBAQAogCQllbHNlCiAJCQljaWZzX3B1dF90Y3Bfc2Vzc2lvbihzcnZUY3ApOwogCQliZGlfZGVzdHJveSgmY2lmc19zYi0+YmRpKTsKLQkJZ290byBvdXQ7CiAJfQogCi0JLyogdm9sdW1lX2luZm8tPnBhc3N3b3JkIGlzIGZyZWVkIGFib3ZlIHdoZW4gZXhpc3Rpbmcgc2Vzc2lvbiBmb3VuZAotCShpbiB3aGljaCBjYXNlIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZSkgYnV0IHdoZW4gbmV3IHNlc2lvbiBpcyBjcmVhdGVkCi0JdGhlIHBhc3N3b3JkIHB0ciBpcyBwdXQgaW4gdGhlIG5ldyBzZXNzaW9uIHN0cnVjdHVyZSAoaW4gd2hpY2ggY2FzZSB0aGUKLQlwYXNzd29yZCB3aWxsIGJlIGZyZWVkIGF0IHVubW91bnQgdGltZSkgKi8KIG91dDoKLQkvKiB6ZXJvIG91dCBwYXNzd29yZCBiZWZvcmUgZnJlZWluZyAqLwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCBhZTU3NmZiLi43MmQ0NDhiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTEwNSw4ICsxMDUsOCBAQAogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAobmFtZWxlbiAhPSBkZnNwbGVuIHx8IHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKSB7Ci0JCWNFUlJPUigxLCAiZGlkIG5vdCBlbmQgcGF0aCBsb29rdXAgd2hlcmUgZXhwZWN0ZWQgbmFtZWxlbiBpcyAlZCIsCi0JCQluYW1lbGVuKTsKKwkJY0ZZSSgxLCAiZGlkIG5vdCBlbmQgcGF0aCBsb29rdXAgd2hlcmUgZXhwZWN0ZWQuIG5hbWVsZW49JWQgIgorCQkJImRmc3BsZW49JWQiLCBuYW1lbGVuLCBkZnNwbGVuKTsKIAkJLyogcHJlc3VtYWJseSB0aGlzIGlzIG9ubHkgcG9zc2libGUgaWYgcmFjaW5nIHdpdGggYSByZW5hbWUKIAkJb2Ygb25lIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgICh3ZSBjYW4gbm90IGxvY2sgdGhlIGRlbnRyaWVzCiAJCWFib3ZlIHVzIHRvIHByZXZlbnQgdGhpcywgYnV0IHJldHJ5aW5nIHNob3VsZCBiZSBoYXJtbGVzcykgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYyBiL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYwppbmRleCA1NDhmMDYyLi4xZDJkOTFkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Ruc19yZXNvbHZlLmMKKysrIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jCkBAIC03OSw4ICs3OSw4IEBACiAJLyogUGVyZm9ybSB0aGUgdXBjYWxsICovCiAJcmMgPSBkbnNfcXVlcnkoTlVMTCwgaG9zdG5hbWUsIGxlbiwgTlVMTCwgaXBfYWRkciwgTlVMTCk7CiAJaWYgKHJjIDwgMCkKLQkJY0VSUk9SKDEsICIlczogdW5hYmxlIHRvIHJlc29sdmU6ICUqLipzIiwKLQkJICAgICAgIF9fZnVuY19fLCBsZW4sIGxlbiwgaG9zdG5hbWUpOworCQljRllJKDEsICIlczogdW5hYmxlIHRvIHJlc29sdmU6ICUqLipzIiwKKwkJCV9fZnVuY19fLCBsZW4sIGxlbiwgaG9zdG5hbWUpOwogCWVsc2UKIAkJY0ZZSSgxLCAiJXM6IHJlc29sdmVkOiAlKi4qcyB0byAlcyIsCiAJCSAgICAgX19mdW5jX18sIGxlbiwgbGVuLCBob3N0bmFtZSwgKmlwX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCAzNzhhY2RhLi45ZjQxYTEwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMzE0LDYgKzMxNCw4IEBACiAJfQogCXNwaW5fdW5sb2NrKCZjaWZzX2ZpbGVfbGlzdF9sb2NrKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmNpZnNfZmlsZS0+b3Bsb2NrX2JyZWFrKTsKKwogCWlmICghdGNvbi0+bmVlZF9yZWNvbm5lY3QgJiYgIWNpZnNfZmlsZS0+aW52YWxpZEhhbmRsZSkgewogCQlpbnQgeGlkLCByYzsKIApAQCAtMjQxOCwzMSArMjQyMCw2IEBACiAJCQkJIGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID8gMSA6IDApOwogCQljRllJKDEsICJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpOwogCX0KLQotCS8qCi0JICogV2UgbWlnaHQgaGF2ZSBraWNrZWQgaW4gYmVmb3JlIGlzX3ZhbGlkX29wbG9ja19icmVhaygpCi0JICogZmluaXNoZWQgZ3JhYmJpbmcgcmVmZXJlbmNlIGZvciB1cy4gIE1ha2Ugc3VyZSBpdCdzIGRvbmUgYnkKLQkgKiB3YWl0aW5nIGZvciBjaWZzX2ZpbGVfbGlzdF9sb2NrLgotCSAqLwotCXNwaW5fbG9jaygmY2lmc19maWxlX2xpc3RfbG9jayk7Ci0Jc3Bpbl91bmxvY2soJmNpZnNfZmlsZV9saXN0X2xvY2spOwotCi0JY2lmc19vcGxvY2tfYnJlYWtfcHV0KGNmaWxlKTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBjaWZzX2ZpbGVfbGlzdF9sb2NrICovCi12b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSkKLXsKLQljaWZzX3NiX2FjdGl2ZShjZmlsZS0+ZGVudHJ5LT5kX3NiKTsKLQljaWZzRmlsZUluZm9fZ2V0KGNmaWxlKTsKLX0KLQotdm9pZCBjaWZzX29wbG9ja19icmVha19wdXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGNmaWxlLT5kZW50cnktPmRfc2I7Ci0KLQljaWZzRmlsZUluZm9fcHV0KGNmaWxlKTsKLQljaWZzX3NiX2RlYWN0aXZlKHNiKTsKIH0KIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDliMDE4YzguLmE3YjJkY2QgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTc2NCwyMCArNzY0LDEwIEBACiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gZnVsbF9wYXRoOwogCi0JaWYgKGRmc3BsZW4pIHsKKwlpZiAoZGZzcGxlbikKIAkJc3RybmNweShmdWxsX3BhdGgsIHRjb24tPnRyZWVOYW1lLCBkZnNwbGVuKTsKLQkJLyogc3dpdGNoIHNsYXNoIGRpcmVjdGlvbiBpbiBwcmVwYXRoIGRlcGVuZGluZyBvbiB3aGV0aGVyCi0JCSAqIHdpbmRvd3Mgb3IgcG9zaXggc3R5bGUgcGF0aCBuYW1lcwotCQkgKi8KLQkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9QT1NJWF9QQVRIUykgewotCQkJaW50IGk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZGZzcGxlbjsgaSsrKSB7Ci0JCQkJaWYgKGZ1bGxfcGF0aFtpXSA9PSAnXFwnKQotCQkJCQlmdWxsX3BhdGhbaV0gPSAnLyc7Ci0JCQl9Ci0JCX0KLQl9CiAJc3RybmNweShmdWxsX3BhdGggKyBkZnNwbGVuLCB2b2wtPnByZXBhdGgsIHBwbGVuKTsKKwljb252ZXJ0X2RlbGltaXRlcihmdWxsX3BhdGgsIENJRlNfRElSX1NFUChjaWZzX3NiKSk7CiAJZnVsbF9wYXRoW2Rmc3BsZW4gKyBwcGxlbl0gPSAwOyAvKiBhZGQgdHJhaWxpbmcgbnVsbCAqLwogCXJldHVybiBmdWxsX3BhdGg7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDAzYTFmNDkuLjdjMTY5MzMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC01ODUsMTUgKzU4NSw4IEBACiAKIAkJCQljaWZzX3NldF9vcGxvY2tfbGV2ZWwocENpZnNJbm9kZSwKIAkJCQkJcFNNQi0+T3Bsb2NrTGV2ZWwgPyBPUExPQ0tfUkVBRCA6IDApOwotCQkJCS8qCi0JCQkJICogY2lmc19vcGxvY2tfYnJlYWtfcHV0KCkgY2FuJ3QgYmUgY2FsbGVkCi0JCQkJICogZnJvbSBoZXJlLiAgR2V0IHJlZmVyZW5jZSBhZnRlciBxdWV1ZWluZwotCQkJCSAqIHN1Y2NlZWRlZC4gIGNpZnNfb3Bsb2NrX2JyZWFrKCkgd2lsbAotCQkJCSAqIHN5bmNocm9uaXplIHVzaW5nIGNpZnNfZmlsZV9saXN0X2xvY2suCi0JCQkJICovCi0JCQkJaWYgKHF1ZXVlX3dvcmsoc3lzdGVtX25ydF93cSwKLQkJCQkJICAgICAgICZuZXRmaWxlLT5vcGxvY2tfYnJlYWspKQotCQkJCQljaWZzX29wbG9ja19icmVha19nZXQobmV0ZmlsZSk7CisJCQkJcXVldWVfd29yayhzeXN0ZW1fbnJ0X3dxLAorCQkJCQkgICAmbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrKTsKIAkJCQluZXRmaWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gZmFsc2U7CiAKIAkJCQlzcGluX3VubG9jaygmY2lmc19maWxlX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCAxNDdhYTIyLi4xMGNhNmIyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTI2NiwxNSArMjY2LDExIEBACiAJd2hpbGUgKDEpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZzZXJ2ZXItPmluRmxpZ2h0KSA+PSBjaWZzX21heF9wZW5kaW5nKSB7CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJYXRvbWljX2luYygmc2VydmVyLT5udW1fd2FpdGVycyk7Ci0jZW5kaWYKKwkJCWNpZnNfbnVtX3dhaXRlcnNfaW5jKHNlcnZlcik7CiAJCQl3YWl0X2V2ZW50KHNlcnZlci0+cmVxdWVzdF9xLAogCQkJCSAgIGF0b21pY19yZWFkKCZzZXJ2ZXItPmluRmxpZ2h0KQogCQkJCSAgICAgPCBjaWZzX21heF9wZW5kaW5nKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKLQkJCWF0b21pY19kZWMoJnNlcnZlci0+bnVtX3dhaXRlcnMpOwotI2VuZGlmCisJCQljaWZzX251bV93YWl0ZXJzX2RlYyhzZXJ2ZXIpOwogCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKQEAgLTM2Miw2ICszNTgsOCBAQAogCW1pZCA9IEFsbG9jTWlkUUVudHJ5KGhkciwgc2VydmVyKTsKIAlpZiAobWlkID09IE5VTEwpIHsKIAkJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CisJCWF0b21pY19kZWMoJnNlcnZlci0+aW5GbGlnaHQpOworCQl3YWtlX3VwKCZzZXJ2ZXItPnJlcXVlc3RfcSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzc5LDE1ICszNzcsMTMgQEAKIAltaWQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJbWlkLT5jYWxsYmFja19kYXRhID0gY2JkYXRhOwogCW1pZC0+bWlkU3RhdGUgPSBNSURfUkVRVUVTVF9TVUJNSVRURUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JYXRvbWljX2luYygmc2VydmVyLT5pblNlbmQpOwotI2VuZGlmCisKKwljaWZzX2luX3NlbmRfaW5jKHNlcnZlcik7CiAJcmMgPSBzbWJfc2VuZHYoc2VydmVyLCBpb3YsIG52ZWMpOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCWF0b21pY19kZWMoJnNlcnZlci0+aW5TZW5kKTsKLQltaWQtPndoZW5fc2VudCA9IGppZmZpZXM7Ci0jZW5kaWYKKwljaWZzX2luX3NlbmRfZGVjKHNlcnZlcik7CisJY2lmc19zYXZlX3doZW5fc2VudChtaWQpOwogCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOworCiAJaWYgKHJjKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTU3MywxNCArNTY5LDEwIEBACiAJfQogCiAJbWlkUS0+bWlkU3RhdGUgPSBNSURfUkVRVUVTVF9TVUJNSVRURUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7Ci0jZW5kaWYKKwljaWZzX2luX3NlbmRfaW5jKHNlcy0+c2VydmVyKTsKIAlyYyA9IHNtYl9zZW5kdihzZXMtPnNlcnZlciwgaW92LCBuX3ZlYyk7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7Ci0JbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKLSNlbmRpZgorCWNpZnNfaW5fc2VuZF9kZWMoc2VzLT5zZXJ2ZXIpOworCWNpZnNfc2F2ZV93aGVuX3NlbnQobWlkUSk7CiAKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwogCkBAIC03MDEsMTQgKzY5MywxMSBAQAogCX0KIAogCW1pZFEtPm1pZFN0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCWF0b21pY19pbmMoJnNlcy0+c2VydmVyLT5pblNlbmQpOwotI2VuZGlmCisKKwljaWZzX2luX3NlbmRfaW5jKHNlcy0+c2VydmVyKTsKIAlyYyA9IHNtYl9zZW5kKHNlcy0+c2VydmVyLCBpbl9idWYsIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKLQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKLQltaWRRLT53aGVuX3NlbnQgPSBqaWZmaWVzOwotI2VuZGlmCisJY2lmc19pbl9zZW5kX2RlYyhzZXMtPnNlcnZlcik7CisJY2lmc19zYXZlX3doZW5fc2VudChtaWRRKTsKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJaWYgKHJjIDwgMCkKQEAgLTg0MSwxNCArODMwLDEwIEBACiAJfQogCiAJbWlkUS0+bWlkU3RhdGUgPSBNSURfUkVRVUVTVF9TVUJNSVRURUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7Ci0jZW5kaWYKKwljaWZzX2luX3NlbmRfaW5jKHNlcy0+c2VydmVyKTsKIAlyYyA9IHNtYl9zZW5kKHNlcy0+c2VydmVyLCBpbl9idWYsIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKLQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKLQltaWRRLT53aGVuX3NlbnQgPSBqaWZmaWVzOwotI2VuZGlmCisJY2lmc19pbl9zZW5kX2RlYyhzZXMtPnNlcnZlcik7CisJY2lmc19zYXZlX3doZW5fc2VudChtaWRRKTsKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJaWYgKHJjIDwgMCkgewpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCAwYjQ4ZDAxLi41OGIxZGE0IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTY3NSwxMSArMTY3NSw2IEBACiB9CiAjZW5kaWYgLyogSEFWRV9TRVRfUkVTVE9SRV9TSUdNQVNLICovCiAKLWxvbmcgYXNtbGlua2FnZSBjb21wYXRfc3lzX25mc3NlcnZjdGwoaW50IGNtZCwgdm9pZCAqbm90dXNlZCwgdm9pZCAqbm90dXNlZDIpCi17Ci0JcmV0dXJuIHN5c19uaV9zeXNjYWxsKCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfRVBPTEwKIAogI2lmZGVmIEhBVkVfU0VUX1JFU1RPUkVfU0lHTUFTSwpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCA4YmUwODZlLi41MTM1MmRlIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMTAwMyw2ICsxMDAzLDcgQEAKIENPTVBBVElCTEVfSU9DVEwoUFBQSU9DRElTQ09OTikKIENPTVBBVElCTEVfSU9DVEwoUFBQSU9DQVRUQ0hBTikKIENPTVBBVElCTEVfSU9DVEwoUFBQSU9DR0NIQU4pCitDT01QQVRJQkxFX0lPQ1RMKFBQUElPQ0dMMlRQU1RBVFMpCiAvKiBQUFBPWCAqLwogQ09NUEFUSUJMRV9JT0NUTChQUFBPRUlPQ1NGV0QpCiBDT01QQVRJQkxFX0lPQ1RMKFBQUE9FSU9DREZXRCkKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggYjA1YWFjMy4uYTg4OTQ4YiAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTMwMSw2ICszMDEsMjcgQEAKIAlyZXR1cm4gcGFyZW50OwogfQogCisvKgorICogVW5oYXNoIGEgZGVudHJ5IHdpdGhvdXQgaW5zZXJ0aW5nIGFuIFJDVSB3YWxrIGJhcnJpZXIgb3IgY2hlY2tpbmcgdGhhdAorICogZGVudHJ5LT5kX2xvY2sgaXMgbG9ja2VkLiAgVGhlIGNhbGxlciBtdXN0IHRha2UgY2FyZSBvZiB0aGF0LCBpZgorICogYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyB2b2lkIF9fZF9zaHJpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWlmICghZF91bmhhc2hlZChkZW50cnkpKSB7CisJCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiOworCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpCisJCQliID0gJmRlbnRyeS0+ZF9zYi0+c19hbm9uOworCQllbHNlCisJCQliID0gZF9oYXNoKGRlbnRyeS0+ZF9wYXJlbnQsIGRlbnRyeS0+ZF9uYW1lLmhhc2gpOworCisJCWhsaXN0X2JsX2xvY2soYik7CisJCV9faGxpc3RfYmxfZGVsKCZkZW50cnktPmRfaGFzaCk7CisJCWRlbnRyeS0+ZF9oYXNoLnBwcmV2ID0gTlVMTDsKKwkJaGxpc3RfYmxfdW5sb2NrKGIpOworCX0KK30KKwogLyoqCiAgKiBkX2Ryb3AgLSBkcm9wIGEgZGVudHJ5CiAgKiBAZGVudHJ5OiBkZW50cnkgdG8gZHJvcApAQCAtMzE5LDE3ICszNDAsNyBAQAogdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkpIHsKLQkJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmI7Ci0JCWlmICh1bmxpa2VseShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfRElTQ09OTkVDVEVEKSkKLQkJCWIgPSAmZGVudHJ5LT5kX3NiLT5zX2Fub247Ci0JCWVsc2UKLQkJCWIgPSBkX2hhc2goZGVudHJ5LT5kX3BhcmVudCwgZGVudHJ5LT5kX25hbWUuaGFzaCk7Ci0KLQkJaGxpc3RfYmxfbG9jayhiKTsKLQkJX19obGlzdF9ibF9kZWwoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJZGVudHJ5LT5kX2hhc2gucHByZXYgPSBOVUxMOwotCQlobGlzdF9ibF91bmxvY2soYik7Ci0KKwkJX19kX3NocmluayhkZW50cnkpOwogCQlkZW50cnlfcmN1d2Fsa19iYXJyaWVyKGRlbnRyeSk7CiAJfQogfQpAQCAtNzg0LDYgKzc5NSw3IEBACiAKIC8qKgogICogcHJ1bmVfZGNhY2hlX3NiIC0gc2hyaW5rIHRoZSBkY2FjaGUKKyAqIEBzYjogc3VwZXJibG9jawogICogQG5yX3RvX3NjYW46IG51bWJlciBvZiBlbnRyaWVzIHRvIHRyeSB0byBmcmVlCiAgKgogICogQXR0ZW1wdCB0byBzaHJpbmsgdGhlIHN1cGVyYmxvY2sgZGNhY2hlIExSVSBieSBAbnJfdG9fc2NhbiBlbnRyaWVzLiBUaGlzIGlzCkBAIC04MjgsNDQgKzg0MCwyNCBAQAogc3RhdGljIHZvaWQgc2hyaW5rX2RjYWNoZV9mb3JfdW1vdW50X3N1YnRyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKLQl1bnNpZ25lZCBkZXRhY2hlZCA9IDA7CiAKIAlCVUdfT04oIUlTX1JPT1QoZGVudHJ5KSk7CiAKLQkvKiBkZXRhY2ggdGhpcyByb290IGZyb20gdGhlIHN5c3RlbSAqLwotCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwotCWRlbnRyeV9scnVfZGVsKGRlbnRyeSk7Ci0JX19kX2Ryb3AoZGVudHJ5KTsKLQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCiAJZm9yICg7OykgewogCQkvKiBkZXNjZW5kIHRvIHRoZSBmaXJzdCBsZWFmIGluIHRoZSBjdXJyZW50IHN1YnRyZWUgKi8KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKLQkJCXN0cnVjdCBkZW50cnkgKmxvb3A7Ci0KLQkJCS8qIHRoaXMgaXMgYSBicmFuY2ggd2l0aCBjaGlsZHJlbiAtIGRldGFjaCBhbGwgb2YgdGhlbQotCQkJICogZnJvbSB0aGUgc3lzdGVtIGluIG9uZSBnbyAqLwotCQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvb3AsICZkZW50cnktPmRfc3ViZGlycywKLQkJCQkJICAgIGRfdS5kX2NoaWxkKSB7Ci0JCQkJc3Bpbl9sb2NrX25lc3RlZCgmbG9vcC0+ZF9sb2NrLAotCQkJCQkJREVOVFJZX0RfTE9DS19ORVNURUQpOwotCQkJCWRlbnRyeV9scnVfZGVsKGxvb3ApOwotCQkJCV9fZF9kcm9wKGxvb3ApOwotCQkJCXNwaW5fdW5sb2NrKCZsb29wLT5kX2xvY2spOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQotCQkJLyogbW92ZSB0byB0aGUgZmlyc3QgY2hpbGQgKi8KKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpCiAJCQlkZW50cnkgPSBsaXN0X2VudHJ5KGRlbnRyeS0+ZF9zdWJkaXJzLm5leHQsCiAJCQkJCSAgICBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7Ci0JCX0KIAogCQkvKiBjb25zdW1lIHRoZSBkZW50cmllcyBmcm9tIHRoaXMgbGVhZiB1cCB0aHJvdWdoIGl0cyBwYXJlbnRzCiAJCSAqIHVudGlsIHdlIGZpbmQgb25lIHdpdGggY2hpbGRyZW4gb3IgcnVuIG91dCBhbHRvZ2V0aGVyICovCiAJCWRvIHsKIAkJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKKwkJCS8qIGRldGFjaCBmcm9tIHRoZSBzeXN0ZW0gKi8KKwkJCWRlbnRyeV9scnVfZGVsKGRlbnRyeSk7CisJCQlfX2Rfc2hyaW5rKGRlbnRyeSk7CisKIAkJCWlmIChkZW50cnktPmRfY291bnQgIT0gMCkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiQlVHOiBEZW50cnkgJXB7aT0lbHgsbj0lc30iCkBAIC04ODYsMTQgKzg3OCwxMCBAQAogCQkJCWxpc3RfZGVsKCZkZW50cnktPmRfdS5kX2NoaWxkKTsKIAkJCX0gZWxzZSB7CiAJCQkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJCQlzcGluX2xvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAkJCQlwYXJlbnQtPmRfY291bnQtLTsKIAkJCQlsaXN0X2RlbCgmZGVudHJ5LT5kX3UuZF9jaGlsZCk7Ci0JCQkJc3Bpbl91bmxvY2soJnBhcmVudC0+ZF9sb2NrKTsKIAkJCX0KIAotCQkJZGV0YWNoZWQrKzsKLQogCQkJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJCQlpZiAoaW5vZGUpIHsKIAkJCQlkZW50cnktPmRfaW5vZGUgPSBOVUxMOwpAQCAtOTM4LDkgKzkyNiw3IEBACiAKIAlkZW50cnkgPSBzYi0+c19yb290OwogCXNiLT5zX3Jvb3QgPSBOVUxMOwotCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCWRlbnRyeS0+ZF9jb3VudC0tOwotCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJc2hyaW5rX2RjYWNoZV9mb3JfdW1vdW50X3N1YnRyZWUoZGVudHJ5KTsKIAogCXdoaWxlICghaGxpc3RfYmxfZW1wdHkoJnNiLT5zX2Fub24pKSB7CkBAIC0xNzQzLDcgKzE3MjksNyBAQAogCQkgKi8KIAkJaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJmRlbnRyeS0+ZF9zZXEsICpzZXEpKQogCQkJZ290byBzZXFyZXRyeTsKLQkJaWYgKHBhcmVudC0+ZF9mbGFncyAmIERDQUNIRV9PUF9DT01QQVJFKSB7CisJCWlmICh1bmxpa2VseShwYXJlbnQtPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfQ09NUEFSRSkpIHsKIAkJCWlmIChwYXJlbnQtPmRfb3AtPmRfY29tcGFyZShwYXJlbnQsICppbm9kZSwKIAkJCQkJCWRlbnRyeSwgaSwKIAkJCQkJCXRsZW4sIHRuYW1lLCBuYW1lKSkKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL0tjb25maWcgYi9mcy9lY3J5cHRmcy9LY29uZmlnCmluZGV4IDFjZDZkOWQuLmNjMTY1NjIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL0tjb25maWcKKysrIGIvZnMvZWNyeXB0ZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBFQ1JZUFRfRlMKIAl0cmlzdGF0ZSAiZUNyeXB0IGZpbGVzeXN0ZW0gbGF5ZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTworCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEtFWVMgJiYgQ1JZUFRPICYmIChFTkNSWVBURURfS0VZUyB8fCBFTkNSWVBURURfS0VZUz1uKQogCXNlbGVjdCBDUllQVE9fRUNCCiAJc2VsZWN0IENSWVBUT19DQkMKIAlzZWxlY3QgQ1JZUFRPX01ENQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggMzQwYzY1Ny4uMTFmODU4MiAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC02OSw2ICs2OSw3IEBACiAJaW5vZGUtPmlfaW5vID0gbG93ZXJfaW5vZGUtPmlfaW5vOwogCWlub2RlLT5pX3ZlcnNpb24rKzsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZlY3J5cHRmc19hb3BzOworCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBpbm9kZS0+aV9zYi0+c19iZGk7CiAKIAlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJaW5vZGUtPmlfb3AgPSAmZWNyeXB0ZnNfc3ltbGlua19pb3BzOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKaW5kZXggYzQ3MjUzMy4uYWMxYWQ0OCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYworKysgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCkBAIC0xODcxLDExICsxODcxLDYgQEAKIAkgKiBqdXN0IG9uZSB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZGVjcnlwdCB0byBnZXQgdGhlIEZFSy4gKi8KIGZpbmRfbmV4dF9tYXRjaGluZ19hdXRoX3RvazoKIAlmb3VuZF9hdXRoX3RvayA9IDA7Ci0JaWYgKGF1dGhfdG9rX2tleSkgewotCQl1cF93cml0ZSgmKGF1dGhfdG9rX2tleS0+c2VtKSk7Ci0JCWtleV9wdXQoYXV0aF90b2tfa2V5KTsKLQkJYXV0aF90b2tfa2V5ID0gTlVMTDsKLQl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhdXRoX3Rva19saXN0X2l0ZW0sICZhdXRoX3Rva19saXN0LCBsaXN0KSB7CiAJCWNhbmRpZGF0ZV9hdXRoX3RvayA9ICZhdXRoX3Rva19saXN0X2l0ZW0tPmF1dGhfdG9rOwogCQlpZiAodW5saWtlbHkoZWNyeXB0ZnNfdmVyYm9zaXR5ID4gMCkpIHsKQEAgLTE5MTIsMTQgKzE5MDcsMjIgQEAKIAkJbWVtY3B5KCYoY2FuZGlkYXRlX2F1dGhfdG9rLT50b2tlbi5wcml2YXRlX2tleSksCiAJCSAgICAgICAmKG1hdGNoaW5nX2F1dGhfdG9rLT50b2tlbi5wcml2YXRlX2tleSksCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX3ByaXZhdGVfa2V5KSk7CisJCXVwX3dyaXRlKCYoYXV0aF90b2tfa2V5LT5zZW0pKTsKKwkJa2V5X3B1dChhdXRoX3Rva19rZXkpOwogCQlyYyA9IGRlY3J5cHRfcGtpX2VuY3J5cHRlZF9zZXNzaW9uX2tleShjYW5kaWRhdGVfYXV0aF90b2ssCiAJCQkJCQkgICAgICAgY3J5cHRfc3RhdCk7CiAJfSBlbHNlIGlmIChjYW5kaWRhdGVfYXV0aF90b2stPnRva2VuX3R5cGUgPT0gRUNSWVBURlNfUEFTU1dPUkQpIHsKIAkJbWVtY3B5KCYoY2FuZGlkYXRlX2F1dGhfdG9rLT50b2tlbi5wYXNzd29yZCksCiAJCSAgICAgICAmKG1hdGNoaW5nX2F1dGhfdG9rLT50b2tlbi5wYXNzd29yZCksCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGVjcnlwdGZzX3Bhc3N3b3JkKSk7CisJCXVwX3dyaXRlKCYoYXV0aF90b2tfa2V5LT5zZW0pKTsKKwkJa2V5X3B1dChhdXRoX3Rva19rZXkpOwogCQlyYyA9IGRlY3J5cHRfcGFzc3BocmFzZV9lbmNyeXB0ZWRfc2Vzc2lvbl9rZXkoCiAJCQljYW5kaWRhdGVfYXV0aF90b2ssIGNyeXB0X3N0YXQpOworCX0gZWxzZSB7CisJCXVwX3dyaXRlKCYoYXV0aF90b2tfa2V5LT5zZW0pKTsKKwkJa2V5X3B1dChhdXRoX3Rva19rZXkpOworCQlyYyA9IC1FSU5WQUw7CiAJfQogCWlmIChyYykgewogCQlzdHJ1Y3QgZWNyeXB0ZnNfYXV0aF90b2tfbGlzdF9pdGVtICphdXRoX3Rva19saXN0X2l0ZW1fdG1wOwpAQCAtMTk1OSwyMSArMTk2MiwxOCBAQAogb3V0X3dpcGVfbGlzdDoKIAl3aXBlX2F1dGhfdG9rX2xpc3QoJmF1dGhfdG9rX2xpc3QpOwogb3V0OgotCWlmIChhdXRoX3Rva19rZXkpIHsKLQkJdXBfd3JpdGUoJihhdXRoX3Rva19rZXktPnNlbSkpOwotCQlrZXlfcHV0KGF1dGhfdG9rX2tleSk7Ci0JfQogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludAotcGtpX2VuY3J5cHRfc2Vzc2lvbl9rZXkoc3RydWN0IGVjcnlwdGZzX2F1dGhfdG9rICphdXRoX3RvaywKK3BraV9lbmNyeXB0X3Nlc3Npb25fa2V5KHN0cnVjdCBrZXkgKmF1dGhfdG9rX2tleSwKKwkJCXN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2ssCiAJCQlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCXN0cnVjdCBlY3J5cHRmc19rZXlfcmVjb3JkICprZXlfcmVjKQogewogCXN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4ID0gTlVMTDsKIAljaGFyICpwYXlsb2FkID0gTlVMTDsKLQlzaXplX3QgcGF5bG9hZF9sZW47CisJc2l6ZV90IHBheWxvYWRfbGVuID0gMDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbWVzc2FnZSAqbXNnOwogCWludCByYzsKIApAQCAtMTk4Miw2ICsxOTgyLDggQEAKIAkJCQkJIGNyeXB0X3N0YXQtPmNpcGhlciwKIAkJCQkJIGNyeXB0X3N0YXQtPmtleV9zaXplKSwKIAkJCQkgY3J5cHRfc3RhdCwgJnBheWxvYWQsICZwYXlsb2FkX2xlbik7CisJdXBfd3JpdGUoJihhdXRoX3Rva19rZXktPnNlbSkpOworCWtleV9wdXQoYXV0aF90b2tfa2V5KTsKIAlpZiAocmMpIHsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgZ2VuZXJhdGluZyB0YWcgNjYgcGFja2V0XG4iKTsKIAkJZ290byBvdXQ7CkBAIC0yMDExLDYgKzIwMTMsOCBAQAogICogd3JpdGVfdGFnXzFfcGFja2V0IC0gV3JpdGUgYW4gUkZDMjQ0MC1jb21wYXRpYmxlIHRhZyAxIChwdWJsaWMga2V5KSBwYWNrZXQKICAqIEBkZXN0OiBCdWZmZXIgaW50byB3aGljaCB0byB3cml0ZSB0aGUgcGFja2V0CiAgKiBAcmVtYWluaW5nX2J5dGVzOiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSB3cml0dG4KKyAqIEBhdXRoX3Rva19rZXk6IFRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbiBrZXkgdG8gdW5sb2NrIGFuZCBwdXQgd2hlbiBkb25lIHdpdGgKKyAqICAgICAgICAgICAgICAgIEBhdXRoX3RvawogICogQGF1dGhfdG9rOiBUaGUgYXV0aGVudGljYXRpb24gdG9rZW4gdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgdGFnIDEgcGFja2V0CiAgKiBAY3J5cHRfc3RhdDogVGhlIGNyeXB0b2dyYXBoaWMgY29udGV4dAogICogQGtleV9yZWM6IFRoZSBrZXkgcmVjb3JkIHN0cnVjdCBmb3IgdGhlIHRhZyAxIHBhY2tldApAQCAtMjAyMSw3ICsyMDI1LDcgQEAKICAqLwogc3RhdGljIGludAogd3JpdGVfdGFnXzFfcGFja2V0KGNoYXIgKmRlc3QsIHNpemVfdCAqcmVtYWluaW5nX2J5dGVzLAotCQkgICBzdHJ1Y3QgZWNyeXB0ZnNfYXV0aF90b2sgKmF1dGhfdG9rLAorCQkgICBzdHJ1Y3Qga2V5ICphdXRoX3Rva19rZXksIHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2ssCiAJCSAgIHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LAogCQkgICBzdHJ1Y3QgZWNyeXB0ZnNfa2V5X3JlY29yZCAqa2V5X3JlYywgc2l6ZV90ICpwYWNrZXRfc2l6ZSkKIHsKQEAgLTIwNDIsMTIgKzIwNDYsMTUgQEAKIAkJbWVtY3B5KGtleV9yZWMtPmVuY19rZXksCiAJCSAgICAgICBhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleSwKIAkJICAgICAgIGF1dGhfdG9rLT5zZXNzaW9uX2tleS5lbmNyeXB0ZWRfa2V5X3NpemUpOworCQl1cF93cml0ZSgmKGF1dGhfdG9rX2tleS0+c2VtKSk7CisJCWtleV9wdXQoYXV0aF90b2tfa2V5KTsKIAkJZ290byBlbmNyeXB0ZWRfc2Vzc2lvbl9rZXlfc2V0OwogCX0KIAlpZiAoYXV0aF90b2stPnNlc3Npb25fa2V5LmVuY3J5cHRlZF9rZXlfc2l6ZSA9PSAwKQogCQlhdXRoX3Rvay0+c2Vzc2lvbl9rZXkuZW5jcnlwdGVkX2tleV9zaXplID0KIAkJCWF1dGhfdG9rLT50b2tlbi5wcml2YXRlX2tleS5rZXlfc2l6ZTsKLQlyYyA9IHBraV9lbmNyeXB0X3Nlc3Npb25fa2V5KGF1dGhfdG9rLCBjcnlwdF9zdGF0LCBrZXlfcmVjKTsKKwlyYyA9IHBraV9lbmNyeXB0X3Nlc3Npb25fa2V5KGF1dGhfdG9rX2tleSwgYXV0aF90b2ssIGNyeXB0X3N0YXQsCisJCQkJICAgICBrZXlfcmVjKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZW5jcnlwdCBzZXNzaW9uIGtleSB2aWEgYSBrZXkgIgogCQkgICAgICAgIm1vZHVsZTsgcmMgPSBbJWRdXG4iLCByYyk7CkBAIC0yNDI0LDYgKzI0MzEsOCBAQAogCQkJCQkJJm1heCwgYXV0aF90b2ssCiAJCQkJCQljcnlwdF9zdGF0LCBrZXlfcmVjLAogCQkJCQkJJndyaXR0ZW4pOworCQkJdXBfd3JpdGUoJihhdXRoX3Rva19rZXktPnNlbSkpOworCQkJa2V5X3B1dChhdXRoX3Rva19rZXkpOwogCQkJaWYgKHJjKSB7CiAJCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fV0FSTklORywgIkVycm9yICIKIAkJCQkJCSJ3cml0aW5nIHRhZyAzIHBhY2tldFxuIik7CkBAIC0yNDQxLDggKzI0NTAsOCBAQAogCQkJfQogCQkJKCpsZW4pICs9IHdyaXR0ZW47CiAJCX0gZWxzZSBpZiAoYXV0aF90b2stPnRva2VuX3R5cGUgPT0gRUNSWVBURlNfUFJJVkFURV9LRVkpIHsKLQkJCXJjID0gd3JpdGVfdGFnXzFfcGFja2V0KGRlc3RfYmFzZSArICgqbGVuKSwKLQkJCQkJCSZtYXgsIGF1dGhfdG9rLAorCQkJcmMgPSB3cml0ZV90YWdfMV9wYWNrZXQoZGVzdF9iYXNlICsgKCpsZW4pLCAmbWF4LAorCQkJCQkJYXV0aF90b2tfa2V5LCBhdXRoX3RvaywKIAkJCQkJCWNyeXB0X3N0YXQsIGtleV9yZWMsICZ3cml0dGVuKTsKIAkJCWlmIChyYykgewogCQkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciAiCkBAIC0yNDUxLDE0ICsyNDYwLDEzIEBACiAJCQl9CiAJCQkoKmxlbikgKz0gd3JpdHRlbjsKIAkJfSBlbHNlIHsKKwkJCXVwX3dyaXRlKCYoYXV0aF90b2tfa2V5LT5zZW0pKTsKKwkJCWtleV9wdXQoYXV0aF90b2tfa2V5KTsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJVbnN1cHBvcnRlZCAiCiAJCQkJCSJhdXRoZW50aWNhdGlvbiB0b2tlbiB0eXBlXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KLQkJdXBfd3JpdGUoJihhdXRoX3Rva19rZXktPnNlbSkpOwotCQlrZXlfcHV0KGF1dGhfdG9rX2tleSk7Ci0JCWF1dGhfdG9rX2tleSA9IE5VTEw7CiAJfQogCWlmIChsaWtlbHkobWF4ID4gMCkpIHsKIAkJZGVzdF9iYXNlWygqbGVuKV0gPSAweDAwOwpAQCAtMjQ3MSwxMSArMjQ3OSw2IEBACiBvdXQ6CiAJaWYgKHJjKQogCQkoKmxlbikgPSAwOwotCWlmIChhdXRoX3Rva19rZXkpIHsKLQkJdXBfd3JpdGUoJihhdXRoX3Rva19rZXktPnNlbSkpOwotCQlrZXlfcHV0KGF1dGhfdG9rX2tleSk7Ci0JfQotCiAJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWFpbi5jIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCmluZGV4IDlmMWJiNzQuLmI0YTZiZWYgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21haW4uYworKysgYi9mcy9lY3J5cHRmcy9tYWluLmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogICAgICAgIGVjcnlwdGZzX29wdF9lbmNyeXB0ZWRfdmlldywgZWNyeXB0ZnNfb3B0X2ZuZWtfc2lnLAogICAgICAgIGVjcnlwdGZzX29wdF9mbl9jaXBoZXIsIGVjcnlwdGZzX29wdF9mbl9jaXBoZXJfa2V5X2J5dGVzLAogICAgICAgIGVjcnlwdGZzX29wdF91bmxpbmtfc2lncywgZWNyeXB0ZnNfb3B0X21vdW50X2F1dGhfdG9rX29ubHksCisgICAgICAgZWNyeXB0ZnNfb3B0X2NoZWNrX2Rldl9ydWlkLAogICAgICAgIGVjcnlwdGZzX29wdF9lcnIgfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMTkxLDYgKzE5Miw3IEBACiAJe2VjcnlwdGZzX29wdF9mbl9jaXBoZXJfa2V5X2J5dGVzLCAiZWNyeXB0ZnNfZm5fa2V5X2J5dGVzPSV1In0sCiAJe2VjcnlwdGZzX29wdF91bmxpbmtfc2lncywgImVjcnlwdGZzX3VubGlua19zaWdzIn0sCiAJe2VjcnlwdGZzX29wdF9tb3VudF9hdXRoX3Rva19vbmx5LCAiZWNyeXB0ZnNfbW91bnRfYXV0aF90b2tfb25seSJ9LAorCXtlY3J5cHRmc19vcHRfY2hlY2tfZGV2X3J1aWQsICJlY3J5cHRmc19jaGVja19kZXZfcnVpZCJ9LAogCXtlY3J5cHRmc19vcHRfZXJyLCBOVUxMfQogfTsKIApAQCAtMjM2LDYgKzIzOCw3IEBACiAgKiBlY3J5cHRmc19wYXJzZV9vcHRpb25zCiAgKiBAc2I6IFRoZSBlY3J5cHRmcyBzdXBlciBibG9jawogICogQG9wdGlvbnM6IFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUga2VybmVsCisgKiBAY2hlY2tfcnVpZDogc2V0IHRvIDEgaWYgZGV2aWNlIHVpZCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBydWlkCiAgKgogICogUGFyc2UgbW91bnQgb3B0aW9uczoKICAqIGRlYnVnPU4gCSAgIC0gZWNyeXB0ZnNfdmVyYm9zaXR5IGxldmVsIGZvciBkZWJ1ZyBvdXRwdXQKQEAgLTI1MSw3ICsyNTQsOCBAQAogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvbiBlcnJvcgogICovCi1zdGF0aWMgaW50IGVjcnlwdGZzX3BhcnNlX29wdGlvbnMoc3RydWN0IGVjcnlwdGZzX3NiX2luZm8gKnNiaSwgY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3QgZWNyeXB0ZnNfc2JfaW5mbyAqc2JpLCBjaGFyICpvcHRpb25zLAorCQkJCSAgdWlkX3QgKmNoZWNrX3J1aWQpCiB7CiAJY2hhciAqcDsKIAlpbnQgcmMgPSAwOwpAQCAtMjc2LDYgKzI4MCw4IEBACiAJY2hhciAqY2lwaGVyX2tleV9ieXRlc19zcmM7CiAJY2hhciAqZm5fY2lwaGVyX2tleV9ieXRlc19zcmM7CiAKKwkqY2hlY2tfcnVpZCA9IDA7CisKIAlpZiAoIW9wdGlvbnMpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTM4MCw2ICszODYsOSBAQAogCQkJbW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MgfD0KIAkJCQlFQ1JZUFRGU19HTE9CQUxfTU9VTlRfQVVUSF9UT0tfT05MWTsKIAkJCWJyZWFrOworCQljYXNlIGVjcnlwdGZzX29wdF9jaGVja19kZXZfcnVpZDoKKwkJCSpjaGVja19ydWlkID0gMTsKKwkJCWJyZWFrOwogCQljYXNlIGVjcnlwdGZzX29wdF9lcnI6CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC00NzUsNiArNDg0LDcgQEAKIAljb25zdCBjaGFyICplcnIgPSAiR2V0dGluZyBzYiBmYWlsZWQiOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHBhdGggcGF0aDsKKwl1aWRfdCBjaGVja19ydWlkOwogCWludCByYzsKIAogCXNiaSA9IGttZW1fY2FjaGVfemFsbG9jKGVjcnlwdGZzX3NiX2luZm9fY2FjaGUsIEdGUF9LRVJORUwpOwpAQCAtNDgzLDcgKzQ5Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJjID0gZWNyeXB0ZnNfcGFyc2Vfb3B0aW9ucyhzYmksIHJhd19kYXRhKTsKKwlyYyA9IGVjcnlwdGZzX3BhcnNlX29wdGlvbnMoc2JpLCByYXdfZGF0YSwgJmNoZWNrX3J1aWQpOwogCWlmIChyYykgewogCQllcnIgPSAiRXJyb3IgcGFyc2luZyBvcHRpb25zIjsKIAkJZ290byBvdXQ7CkBAIC01MjEsNiArNTMxLDE1IEBACiAJCQkia25vd24gaW5jb21wYXRpYmlsaXRpZXNcbiIpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KKworCWlmIChjaGVja19ydWlkICYmIHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX3VpZCAhPSBjdXJyZW50X3VpZCgpKSB7CisJCXJjID0gLUVQRVJNOworCQlwcmludGsoS0VSTl9FUlIgIk1vdW50IG9mIGRldmljZSAodWlkOiAlZCkgbm90IG93bmVkIGJ5ICIKKwkJICAgICAgICJyZXF1ZXN0ZWQgdXNlciAodWlkOiAlZClcbiIsCisJCSAgICAgICBwYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV91aWQsIGN1cnJlbnRfdWlkKCkpOworCQlnb3RvIG91dF9mcmVlOworCX0KKwogCWVjcnlwdGZzX3NldF9zdXBlcmJsb2NrX2xvd2VyKHMsIHBhdGguZGVudHJ5LT5kX3NiKTsKIAlzLT5zX21heGJ5dGVzID0gcGF0aC5kZW50cnktPmRfc2ItPnNfbWF4Ynl0ZXM7CiAJcy0+c19ibG9ja3NpemUgPSBwYXRoLmRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMgYi9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMKaW5kZXggODVkNDMwOS4uMzc0NWY3YyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL2VjcnlwdGZzL3JlYWRfd3JpdGUuYwpAQCAtMzksMTUgKzM5LDE2IEBACiBpbnQgZWNyeXB0ZnNfd3JpdGVfbG93ZXIoc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSwgY2hhciAqZGF0YSwKIAkJCSBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKKwlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZTsKIAltbV9zZWdtZW50X3QgZnNfc2F2ZTsKIAlzc2l6ZV90IHJjOwogCi0JaW5vZGVfaW5mbyA9IGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpOwotCUJVR19PTighaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CisJbG93ZXJfZmlsZSA9IGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpLT5sb3dlcl9maWxlOworCWlmICghbG93ZXJfZmlsZSkKKwkJcmV0dXJuIC1FSU87CiAJZnNfc2F2ZSA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7Ci0JcmMgPSB2ZnNfd3JpdGUoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwgJm9mZnNldCk7CisJcmMgPSB2ZnNfd3JpdGUobG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwgJm9mZnNldCk7CiAJc2V0X2ZzKGZzX3NhdmUpOwogCW1hcmtfaW5vZGVfZGlydHlfc3luYyhlY3J5cHRmc19pbm9kZSk7CiAJcmV0dXJuIHJjOwpAQCAtMjI1LDE1ICsyMjYsMTYgQEAKIGludCBlY3J5cHRmc19yZWFkX2xvd2VyKGNoYXIgKmRhdGEsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplLAogCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSkKIHsKLQlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9Ci0JCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfaW5vZGUpOworCXN0cnVjdCBmaWxlICpsb3dlcl9maWxlOwogCW1tX3NlZ21lbnRfdCBmc19zYXZlOwogCXNzaXplX3QgcmM7CiAKLQlCVUdfT04oIWlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOworCWxvd2VyX2ZpbGUgPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKS0+bG93ZXJfZmlsZTsKKwlpZiAoIWxvd2VyX2ZpbGUpCisJCXJldHVybiAtRUlPOwogCWZzX3NhdmUgPSBnZXRfZnMoKTsKIAlzZXRfZnMoZ2V0X2RzKCkpOwotCXJjID0gdmZzX3JlYWQoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwgZGF0YSwgc2l6ZSwgJm9mZnNldCk7CisJcmMgPSB2ZnNfcmVhZChsb3dlcl9maWxlLCBkYXRhLCBzaXplLCAmb2Zmc2V0KTsKIAlzZXRfZnMoZnNfc2F2ZSk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGRhODA2MTIuLjI1ZGNiZTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTE0NTksNiArMTQ1OSwyMyBAQAogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmRpc3BsYWNlZDsKIAlib29sIGNsZWFyX2luX2V4ZWM7CiAJaW50IHJldHZhbDsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCisJLyoKKwkgKiBXZSBtb3ZlIHRoZSBhY3R1YWwgZmFpbHVyZSBpbiBjYXNlIG9mIFJMSU1JVF9OUFJPQyBleGNlc3MgZnJvbQorCSAqIHNldCp1aWQoKSB0byBleGVjdmUoKSBiZWNhdXNlIHRvbyBtYW55IHBvb3JseSB3cml0dGVuIHByb2dyYW1zCisJICogZG9uJ3QgY2hlY2sgc2V0dWlkKCkgcmV0dXJuIGNvZGUuICBIZXJlIHdlIGFkZGl0aW9uYWxseSByZWNoZWNrCisJICogd2hldGhlciBOUFJPQyBsaW1pdCBpcyBzdGlsbCBleGNlZWRlZC4KKwkgKi8KKwlpZiAoKGN1cnJlbnQtPmZsYWdzICYgUEZfTlBST0NfRVhDRUVERUQpICYmCisJICAgIGF0b21pY19yZWFkKCZjcmVkLT51c2VyLT5wcm9jZXNzZXMpID4gcmxpbWl0KFJMSU1JVF9OUFJPQykpIHsKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwkJZ290byBvdXRfcmV0OworCX0KKworCS8qIFdlJ3JlIGJlbG93IHRoZSBsaW1pdCAoc3RpbGwgb3IgYWdhaW4pLCBzbyB3ZSBkb24ndCB3YW50IHRvIG1ha2UKKwkgKiBmdXJ0aGVyIGV4ZWN2ZSgpIGNhbGxzIGZhaWwuICovCisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX05QUk9DX0VYQ0VFREVEOwogCiAJcmV0dmFsID0gdW5zaGFyZV9maWxlcygmZGlzcGxhY2VkKTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvS2J1aWxkIGIvZnMvZXhvZnMvS2J1aWxkCmluZGV4IDJkMGY3NTcuLmM1YTU4NTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL0tidWlsZAorKysgYi9mcy9leG9mcy9LYnVpbGQKQEAgLTEyLDUgKzEyLDggQEAKICMgS2J1aWxkIC0gR2V0cyBpbmNsdWRlZCBmcm9tIHRoZSBLZXJuZWxzIE1ha2VmaWxlIGFuZCBidWlsZCBzeXN0ZW0KICMKIAotZXhvZnMteSA6PSBpb3MubyBpbm9kZS5vIGZpbGUubyBzeW1saW5rLm8gbmFtZWkubyBkaXIubyBzdXBlci5vCisjIG9yZSBtb2R1bGUgbGlicmFyeQorb2JqLSQoQ09ORklHX09SRSkgKz0gb3JlLm8KKworZXhvZnMteSA6PSBpbm9kZS5vIGZpbGUubyBzeW1saW5rLm8gbmFtZWkubyBkaXIubyBzdXBlci5vCiBvYmotJChDT05GSUdfRVhPRlNfRlMpICs9IGV4b2ZzLm8KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL0tjb25maWcgYi9mcy9leG9mcy9LY29uZmlnCmluZGV4IDg2MTk0YjIuLjcwYmFlNDEgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL0tjb25maWcKKysrIGIvZnMvZXhvZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDEwIEBACitjb25maWcgT1JFCisJdHJpc3RhdGUKKwogY29uZmlnIEVYT0ZTX0ZTCiAJdHJpc3RhdGUgImV4b2ZzOiBPU0QgYmFzZWQgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNDU0lfT1NEX1VMRAorCXNlbGVjdCBPUkUKIAloZWxwCiAJICBFWE9GUyBpcyBhIGZpbGUgc3lzdGVtIHRoYXQgdXNlcyBhbiBPU0Qgc3RvcmFnZSBkZXZpY2UsCiAJICBhcyBpdHMgYmFja2luZyBzdG9yYWdlLgpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZXhvZnMuaCBiL2ZzL2V4b2ZzL2V4b2ZzLmgKaW5kZXggYzk2NTgwNi4uZjRlNDQyZSAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvZXhvZnMuaAorKysgYi9mcy9leG9mcy9leG9mcy5oCkBAIC0zNiwxMiArMzYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8c2NzaS9vc2Rfb3JlLmg+CiAKLS8qIEZJWE1FOiBSZW1vdmUgb25jZSBwbmZzIGhpdHMgbWFpbmxpbmUKLSAqICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy9wbmZzX29zZF94ZHIuaD4KLSAqLwotI2luY2x1ZGUgInBuZnMuaCIKKyNpbmNsdWRlICJjb21tb24uaCIKIAogI2RlZmluZSBFWE9GU19FUlIoZm10LCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImV4b2ZzOiAiIGZtdCwgIyNhKQogCkBAIC01NiwyNyArNTMsMTEgQEAKIC8qIHU2NCBoYXMgcHJvYmxlbXMgd2l0aCBwcmludGsgdGhpcyB3aWxsIGNhc3QgaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nICovCiAjZGVmaW5lIF9MTFUoeCkgKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkKIAotc3RydWN0IGV4b2ZzX2xheW91dCB7Ci0Jb3NkX2lkCQlzX3BpZDsJCQkvKiBwYXJ0aXRpb24gSUQgb2YgZmlsZSBzeXN0ZW0qLwotCi0JLyogT3VyIHdheSBvZiBsb29raW5nIGF0IHRoZSBkYXRhX21hcCAqLwotCXVuc2lnbmVkIHN0cmlwZV91bml0OwotCXVuc2lnbmVkIG1pcnJvcnNfcDE7Ci0KLQl1bnNpZ25lZCBncm91cF93aWR0aDsKLQl1NjQJIGdyb3VwX2RlcHRoOwotCXVuc2lnbmVkIGdyb3VwX2NvdW50OwotCi0JZW51bSBleG9mc19pbm9kZV9sYXlvdXRfZ2VuX2Z1bmN0aW9ucyBsYXlfZnVuYzsKLQotCXVuc2lnbmVkCXNfbnVtZGV2czsJCS8qIE51bSBvZiBkZXZpY2VzIGluIGFycmF5ICAgICovCi0Jc3RydWN0IG9zZF9kZXYJKnNfb2RzWzBdOwkJLyogVmFyaWFibGUgbGVuZ3RoICAgICAgICAgICAgKi8KLX07Ci0KIC8qCiAgKiBvdXIgZXh0ZW5zaW9uIHRvIHRoZSBpbi1tZW1vcnkgc3VwZXJibG9jawogICovCiBzdHJ1Y3QgZXhvZnNfc2JfaW5mbyB7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYmRpOwkJLyogcmVnaXN0ZXIgb3VyIGJkaSB3aXRoIFZGUyAgKi8KIAlzdHJ1Y3QgZXhvZnNfc2Jfc3RhdHMgc19lc3M7CQkvKiBXcml0dGVuIG9mdGVuLCBwcmUtYWxsb2NhdGUqLwogCWludAkJc190aW1lb3V0OwkJLyogdGltZW91dCBmb3IgT1NEIG9wZXJhdGlvbnMgKi8KIAl1aW50NjRfdAlzX25leHRpZDsJCS8qIGhpZ2hlc3Qgb2JqZWN0IElEIHVzZWQgICAgICovCkBAIC04NCwxNiArNjUsMTMgQEAKIAlzcGlubG9ja190CXNfbmV4dF9nZW5fbG9jazsJLyogc3BpbmxvY2sgZm9yIGdlbiAjIHVwZGF0ZSAgKi8KIAl1MzIJCXNfbmV4dF9nZW5lcmF0aW9uOwkvKiBuZXh0IGdlbiAjIHRvIHVzZSAgICAgICAgICAqLwogCWF0b21pY190CXNfY3Vycl9wZW5kaW5nOwkJLyogbnVtYmVyIG9mIHBlbmRpbmcgY29tbWFuZHMgKi8KLQl1aW50OF90CQlzX2NyZWRbT1NEX0NBUF9MRU5dOwkvKiBjcmVkZW50aWFsIGZvciB0aGUgZnNjYiAgICAqLwotCXN0cnVjdCAJCWJhY2tpbmdfZGV2X2luZm8gYmRpOwkvKiByZWdpc3RlciBvdXIgYmRpIHdpdGggVkZTICAqLwogCiAJc3RydWN0IHBuZnNfb3NkX2RhdGFfbWFwIGRhdGFfbWFwOwkvKiBEZWZhdWx0IHJhaWQgdG8gdXNlCiAJCQkJCQkgKiBGSVhNRTogTmVlZGVkID8KIAkJCQkJCSAqLwotLyoJc3RydWN0IGV4b2ZzX2xheW91dAlkaXJfbGF5b3V0OyovCS8qIERlZmF1bHQgZGlyIGxheW91dCAqLwotCXN0cnVjdCBleG9mc19sYXlvdXQJbGF5b3V0OwkJLyogRGVmYXVsdCBmaWxlcyBsYXlvdXQsCi0JCQkJCQkgKiBjb250YWlucyB0aGUgdmFyaWFibGUgb3NkX2RldgotCQkJCQkJICogYXJyYXkuIEtlZXAgbGFzdCAqLworCXN0cnVjdCBvcmVfbGF5b3V0CWxheW91dDsJCS8qIERlZmF1bHQgZmlsZXMgbGF5b3V0ICAgICAgICovCisJc3RydWN0IG9yZV9jb21wIG9uZV9jb21wOwkJLyogaWQgJiBjcmVkIG9mIHBhcnRpdGlvbiBpZD0wKi8KKwlzdHJ1Y3Qgb3JlX2NvbXBvbmVudHMgY29tcHM7CQkvKiBjb21wcyBmb3IgdGhlIHBhcnRpdGlvbiAgICAqLwogCXN0cnVjdCBvc2RfZGV2CSpfbWluX29uZV9kZXZbMV07CS8qIFBsYWNlIGhvbGRlciBmb3Igb25lIGRldiAgICovCiB9OwogCkBAIC0xMDcsNyArODUsOCBAQAogCXVpbnQzMl90ICAgICAgIGlfZGF0YVtFWE9GU19JREFUQV07LypzaG9ydCBzeW1saW5rIG5hbWVzIGFuZCBkZXZpY2UgI3MqLwogCXVpbnQzMl90ICAgICAgIGlfZGlyX3N0YXJ0X2xvb2t1cDsgLyogd2hpY2ggcGFnZSB0byBzdGFydCBsb29rdXAgICAgICAqLwogCXVpbnQ2NF90ICAgICAgIGlfY29tbWl0X3NpemU7ICAgICAgLyogdGhlIG9iamVjdCdzIHdyaXR0ZW4gbGVuZ3RoICAgICAqLwotCXVpbnQ4X3QgICAgICAgIGlfY3JlZFtPU0RfQ0FQX0xFTl07LyogYWxsLXBvd2VyZnVsIGNyZWRlbnRpYWwgICAgICAgICAqLworCXN0cnVjdCBvcmVfY29tcCBvbmVfY29tcDsJICAgLyogc2FtZSBjb21wb25lbnQgZm9yIGFsbCBkZXZpY2VzICAqLworCXN0cnVjdCBvcmVfY29tcG9uZW50cyBjb21wczsJICAgLyogaW5vZGUgdmlldyBvZiB0aGUgZGV2aWNlIHRhYmxlICAqLwogfTsKIAogc3RhdGljIGlubGluZSBvc2RfaWQgZXhvZnNfb2lfb2Jqbm8oc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCkBAIC0xMTUsNTIgKzk0LDYgQEAKIAlyZXR1cm4gb2ktPnZmc19pbm9kZS5pX2lubyArIEVYT0ZTX09CSl9PRkY7CiB9CiAKLXN0cnVjdCBleG9mc19pb19zdGF0ZTsKLXR5cGVkZWYgdm9pZCAoKmV4b2ZzX2lvX2RvbmVfZm4pKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqb3IsIHZvaWQgKnByaXZhdGUpOwotCi1zdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgewotCXN0cnVjdCBrcmVmCQlrcmVmOwotCi0Jdm9pZAkJCSpwcml2YXRlOwotCWV4b2ZzX2lvX2RvbmVfZm4JZG9uZTsKLQotCXN0cnVjdCBleG9mc19sYXlvdXQJKmxheW91dDsKLQlzdHJ1Y3Qgb3NkX29ial9pZAlvYmo7Ci0JdTgJCQkqY3JlZDsKLQotCS8qIEdsb2JhbCByZWFkL3dyaXRlIElPKi8KLQlsb2ZmX3QJCQlvZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZwkJbGVuZ3RoOwotCXZvaWQJCQkqa2Vybl9idWZmOwotCi0Jc3RydWN0IHBhZ2UJCSoqcGFnZXM7Ci0JdW5zaWduZWQJCW5yX3BhZ2VzOwotCXVuc2lnbmVkCQlwZ2Jhc2U7Ci0JdW5zaWduZWQJCXBhZ2VzX2NvbnN1bWVkOwotCi0JLyogQXR0cmlidXRlcyAqLwotCXVuc2lnbmVkCQlpbl9hdHRyX2xlbjsKLQlzdHJ1Y3Qgb3NkX2F0dHIgCSppbl9hdHRyOwotCXVuc2lnbmVkCQlvdXRfYXR0cl9sZW47Ci0Jc3RydWN0IG9zZF9hdHRyIAkqb3V0X2F0dHI7Ci0KLQkvKiBWYXJpYWJsZSBhcnJheSBvZiBzaXplIG51bWRldnMgKi8KLQl1bnNpZ25lZCBudW1kZXZzOwotCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlIHsKLQkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKLQkJc3RydWN0IGJpbyAqYmlvOwotCQlsb2ZmX3Qgb2Zmc2V0OwotCQl1bnNpZ25lZCBsZW5ndGg7Ci0JCXVuc2lnbmVkIGRldjsKLQl9IHBlcl9kZXZbXTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZXhvZnNfaW9fc3RhdGVfc2l6ZSh1bnNpZ25lZCBudW1kZXZzKQotewotCXJldHVybiBzaXplb2Yoc3RydWN0IGV4b2ZzX2lvX3N0YXRlKSArCi0JCXNpemVvZihzdHJ1Y3QgZXhvZnNfcGVyX2Rldl9zdGF0ZSkgKiBudW1kZXZzOwotfQotCiAvKgogICogb3VyIGlub2RlIGZsYWdzCiAgKi8KQEAgLTIwNSwxMiArMTM4LDYgQEAKIH0KIAogLyoKLSAqIEdpdmVuIGEgbGF5b3V0LCBvYmplY3RfbnVtYmVyIGFuZCBzdHJpcGVfaW5kZXggcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGdsb2JhbAotICogZGV2X2luZGV4Ci0gKi8KLXVuc2lnbmVkIGV4b2ZzX2xheW91dF9vZF9pZChzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCi0JCQkgICAgb3NkX2lkIG9ial9ubywgdW5zaWduZWQgbGF5b3V0X2luZGV4KTsKLS8qCiAgKiBNYXhpbXVtIGNvdW50IG9mIGxpbmtzIHRvIGEgZmlsZQogICovCiAjZGVmaW5lIEVYT0ZTX0xJTktfTUFYICAgICAgICAgICAzMjAwMApAQCAtMjE5LDQ0ICsxNDYsOCBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBpb3MuYyAqLwotdm9pZCBleG9mc19tYWtlX2NyZWRlbnRpYWwodTggY3JlZF9hW09TRF9DQVBfTEVOXSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmopOwotaW50IGV4b2ZzX3JlYWRfa2VybihzdHJ1Y3Qgb3NkX2RldiAqb2QsIHU4ICpjcmVkLCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLAotCQkgICAgdTY0IG9mZnNldCwgdm9pZCAqcCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotaW50ICBleG9mc19nZXRfaW9fc3RhdGUoc3RydWN0IGV4b2ZzX2xheW91dCAqbGF5b3V0LAotCQkJc3RydWN0IGV4b2ZzX2lvX3N0YXRlICoqaW9zKTsKLXZvaWQgZXhvZnNfcHV0X2lvX3N0YXRlKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKTsKLQotaW50IGV4b2ZzX2NoZWNrX2lvKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB1NjQgKnJlc2lkKTsKLQotaW50IGV4b2ZzX3NiaV9jcmVhdGUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpOwotaW50IGV4b2ZzX3NiaV9yZW1vdmUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpOwotaW50IGV4b2ZzX3NiaV93cml0ZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcyk7Ci1pbnQgZXhvZnNfc2JpX3JlYWQoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpOwotCi1pbnQgZXh0cmFjdF9hdHRyX2Zyb21faW9zKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCBzdHJ1Y3Qgb3NkX2F0dHIgKmF0dHIpOwotCi1pbnQgZXhvZnNfb2lfdHJ1bmNhdGUoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2ksIHU2NCBuZXdfbGVuKTsKLXN0YXRpYyBpbmxpbmUgaW50IGV4b2ZzX29pX3dyaXRlKHN0cnVjdCBleG9mc19pX2luZm8gKm9pLAotCQkJCSBzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKLXsKLQlpb3MtPm9iai5pZCA9IGV4b2ZzX29pX29iam5vKG9pKTsKLQlpb3MtPmNyZWQgPSBvaS0+aV9jcmVkOwotCXJldHVybiBleG9mc19zYmlfd3JpdGUoaW9zKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZXhvZnNfb2lfcmVhZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSwKLQkJCQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKLXsKLQlpb3MtPm9iai5pZCA9IGV4b2ZzX29pX29iam5vKG9pKTsKLQlpb3MtPmNyZWQgPSBvaS0+aV9jcmVkOwotCXJldHVybiBleG9mc19zYmlfcmVhZChpb3MpOwotfQotCiAvKiBpbm9kZS5jICAgICAgICAgICAgICAgKi8KLXVuc2lnbmVkIGV4b2ZzX21heF9pb19wYWdlcyhzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCit1bnNpZ25lZCBleG9mc19tYXhfaW9fcGFnZXMoc3RydWN0IG9yZV9sYXlvdXQgKmxheW91dCwKIAkJCSAgICB1bnNpZ25lZCBleHBlY3RlZF9wYWdlcyk7CiBpbnQgZXhvZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGludCBleG9mc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC0yODEsNiArMTcyLDggQEAKIAkJICAgIHN0cnVjdCBpbm9kZSAqKTsKIAogLyogc3VwZXIuYyAgICAgICAgICAgICAgICovCit2b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLAorCQkJICAgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaik7CiBpbnQgZXhvZnNfc2JpX3dyaXRlX3N0YXRzKHN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTUsNyArMTg4LDYgQEAKIAogLyogaW5vZGUuYyAgICAgICAgICAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4b2ZzX2FvcHM7Ci1leHRlcm4gY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aDsKIAogLyogbmFtZWkuYyAgICAgICAgICAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTMwNSw0ICsxOTcsMzMgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAKKy8qIGV4b2ZzX2luaXRfY29tcHMgd2lsbCBpbml0aWFsaXplIGFuIG9yZV9jb21wb25lbnRzIGRldmljZSBhcnJheQorICogcG9pbnRpbmcgdG8gYSBzaW5nbGUgb3JlX2NvbXAgc3RydWN0LCBhbmQgYSByb3VuZC1yb2JpbiB2aWV3CisgKiBvZiB0aGUgZGV2aWNlIHRhYmxlLgorICogVGhlIGZpcnN0IGRldmljZSBvZiBlYWNoIGlub2RlIGlzIHRoZSBbaW5vZGUtPmlubyAlIG51bV9kZXZpY2VzXQorICogYW5kIHRoZSByZXN0IG9mIHRoZSBkZXZpY2VzIHNlcXVlbnRpYWxseSBmb2xsb3dpbmcgd2hlcmUgdGhlCisgKiBmaXJzdCBkZXZpY2UgaXMgYWZ0ZXIgdGhlIGxhc3QgZGV2aWNlLgorICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBnbG9iYWwgZGV2aWNlIGFycmF5IGF0IEBzYmkgaXMgdHdpY2UKKyAqIGJpZ2dlciBhbmQgdGhhdCB0aGUgZGV2aWNlIHRhYmxlIHJlcGVhdHMgdHdpY2UuCisgKiBTZWU6IGV4b2ZzX3JlYWRfbG9va3VwX2Rldl90YWJsZSgpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBleG9mc19pbml0X2NvbXBzKHN0cnVjdCBvcmVfY29tcG9uZW50cyAqY29tcHMsCisJCQkJICAgIHN0cnVjdCBvcmVfY29tcCAqb25lX2NvbXAsCisJCQkJICAgIHN0cnVjdCBleG9mc19zYl9pbmZvICpzYmksIG9zZF9pZCBvaWQpCit7CisJdW5zaWduZWQgZGV2X21vZCA9ICh1bnNpZ25lZClvaWQsIGZpcnN0X2RldjsKKworCW9uZV9jb21wLT5vYmoucGFydGl0aW9uID0gc2JpLT5vbmVfY29tcC5vYmoucGFydGl0aW9uOworCW9uZV9jb21wLT5vYmouaWQgPSBvaWQ7CisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKG9uZV9jb21wLT5jcmVkLCAmb25lX2NvbXAtPm9iaik7CisKKwljb21wcy0+bnVtZGV2cyA9IHNiaS0+Y29tcHMubnVtZGV2czsKKwljb21wcy0+c2luZ2xlX2NvbXAgPSBFQ19TSU5HTEVfQ09NUDsKKwljb21wcy0+Y29tcHMgPSBvbmVfY29tcDsKKworCS8qIFJvdW5kIHJvYmluIGRldmljZSB2aWV3IG9mIHRoZSB0YWJsZSAqLworCWZpcnN0X2RldiA9IChkZXZfbW9kICogc2JpLT5sYXlvdXQubWlycm9yc19wMSkgJSBzYmktPmNvbXBzLm51bWRldnM7CisJY29tcHMtPm9kcyA9IHNiaS0+Y29tcHMub2RzICsgZmlyc3RfZGV2OworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCmluZGV4IDg0NzJjMDkuLmYzOWEzOGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lub2RlLmMKKysrIGIvZnMvZXhvZnMvaW5vZGUuYwpAQCAtNDMsNyArNDMsNyBAQAogCQlQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCiB9OwogCi11bnNpZ25lZCBleG9mc19tYXhfaW9fcGFnZXMoc3RydWN0IGV4b2ZzX2xheW91dCAqbGF5b3V0LAordW5zaWduZWQgZXhvZnNfbWF4X2lvX3BhZ2VzKHN0cnVjdCBvcmVfbGF5b3V0ICpsYXlvdXQsCiAJCQkgICAgdW5zaWduZWQgZXhwZWN0ZWRfcGFnZXMpCiB7CiAJdW5zaWduZWQgcGFnZXMgPSBtaW5fdCh1bnNpZ25lZCwgZXhwZWN0ZWRfcGFnZXMsIE1BWF9QQUdFU19LTUFMTE9DKTsKQEAgLTU4LDcgKzU4LDcgQEAKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJdW5zaWduZWQgZXhwZWN0ZWRfcGFnZXM7Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3M7CisJc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zOwogCiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAl1bnNpZ25lZCBhbGxvY19wYWdlczsKQEAgLTExMCwxMyArMTEwLDYgQEAKIHsKIAl1bnNpZ25lZCBwYWdlczsKIAotCWlmICghcGNvbC0+aW9zKSB7IC8qIEZpcnN0IHRpbWUgYWxsb2NhdGUgaW9fc3RhdGUgKi8KLQkJaW50IHJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmcGNvbC0+c2JpLT5sYXlvdXQsICZwY29sLT5pb3MpOwotCi0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIFRPRE86IGVhc2lseSBzdXBwb3J0IGJpbyBjaGFpbmluZyAqLwogCXBhZ2VzID0gIGV4b2ZzX21heF9pb19wYWdlcygmcGNvbC0+c2JpLT5sYXlvdXQsIHBjb2wtPmV4cGVjdGVkX3BhZ2VzKTsKIApAQCAtMTQwLDcgKzEzMyw3IEBACiAJcGNvbC0+cGFnZXMgPSBOVUxMOwogCiAJaWYgKHBjb2wtPmlvcykgewotCQlleG9mc19wdXRfaW9fc3RhdGUocGNvbC0+aW9zKTsKKwkJb3JlX3B1dF9pb19zdGF0ZShwY29sLT5pb3MpOwogCQlwY29sLT5pb3MgPSBOVUxMOwogCX0KIH0KQEAgLTIwMCw3ICsxOTMsNyBAQAogCXU2NCByZXNpZDsKIAl1NjQgZ29vZF9ieXRlczsKIAl1NjQgbGVuZ3RoID0gMDsKLQlpbnQgcmV0ID0gZXhvZnNfY2hlY2tfaW8ocGNvbC0+aW9zLCAmcmVzaWQpOworCWludCByZXQgPSBvcmVfY2hlY2tfaW8ocGNvbC0+aW9zLCAmcmVzaWQpOwogCiAJaWYgKGxpa2VseSghcmV0KSkKIAkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aDsKQEAgLTI0MSw3ICsyMzQsNyBAQAogfQogCiAvKiBjYWxsYmFjayBvZiBhc3luYyByZWFkcyAqLwotc3RhdGljIHZvaWQgcmVhZHBhZ2VzX2RvbmUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCitzdGF0aWMgdm9pZCByZWFkcGFnZXNfZG9uZShzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCiB7CiAJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7CiAKQEAgLTI2OSwyMCArMjYyLDI4IEBACiBzdGF0aWMgaW50IHJlYWRfZXhlYyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sKQogewogCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShwY29sLT5pbm9kZSk7Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MgPSBwY29sLT5pb3M7CisJc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zOwogCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2xfY29weSA9IE5VTEw7CiAJaW50IHJldDsKIAogCWlmICghcGNvbC0+cGFnZXMpCiAJCXJldHVybiAwOwogCisJaWYgKCFwY29sLT5pb3MpIHsKKwkJaW50IHJldCA9IG9yZV9nZXRfcndfc3RhdGUoJnBjb2wtPnNiaS0+bGF5b3V0LCAmb2ktPmNvbXBzLCB0cnVlLAorCQkJCQkgICAgIHBjb2wtPnBnX2ZpcnN0IDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQkJCSAgICAgcGNvbC0+bGVuZ3RoLCAmcGNvbC0+aW9zKTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpb3MgPSBwY29sLT5pb3M7CiAJaW9zLT5wYWdlcyA9IHBjb2wtPnBhZ2VzOwogCWlvcy0+bnJfcGFnZXMgPSBwY29sLT5ucl9wYWdlczsKLQlpb3MtPmxlbmd0aCA9IHBjb2wtPmxlbmd0aDsKLQlpb3MtPm9mZnNldCA9IHBjb2wtPnBnX2ZpcnN0IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAlpZiAocGNvbC0+cmVhZF80X3dyaXRlKSB7Ci0JCWV4b2ZzX29pX3JlYWQob2ksIHBjb2wtPmlvcyk7CisJCW9yZV9yZWFkKHBjb2wtPmlvcyk7CiAJCXJldHVybiBfX3JlYWRwYWdlc19kb25lKHBjb2wpOwogCX0KIApAQCAtMjk1LDE0ICsyOTYsMTQgQEAKIAkqcGNvbF9jb3B5ID0gKnBjb2w7CiAJaW9zLT5kb25lID0gcmVhZHBhZ2VzX2RvbmU7CiAJaW9zLT5wcml2YXRlID0gcGNvbF9jb3B5OwotCXJldCA9IGV4b2ZzX29pX3JlYWQob2ksIGlvcyk7CisJcmV0ID0gb3JlX3JlYWQoaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBlcnI7CiAKIAlhdG9taWNfaW5jKCZwY29sLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKIAogCUVYT0ZTX0RCR01TRzIoInJlYWRfZXhlYyBvYmo9MHglbGx4IHN0YXJ0PTB4JWxseCBsZW5ndGg9MHglbHhcbiIsCi0JCSAgaW9zLT5vYmouaWQsIF9MTFUoaW9zLT5vZmZzZXQpLCBwY29sLT5sZW5ndGgpOworCQkgIG9pLT5vbmVfY29tcC5vYmouaWQsIF9MTFUoaW9zLT5vZmZzZXQpLCBwY29sLT5sZW5ndGgpOwogCiAJLyogcGFnZXMgb3duZXJzaGlwIHdhcyBwYXNzZWQgdG8gcGNvbF9jb3B5ICovCiAJX3Bjb2xfcmVzZXQocGNvbCk7CkBAIC00NTcsMTQgKzQ1OCwxNCBAQAogfQogCiAvKiBDYWxsYmFjayBmb3Igb3NkX3dyaXRlLiBBbGwgd3JpdGVzIGFyZSBhc3luY2hyb25vdXMgKi8KLXN0YXRpYyB2b2lkIHdyaXRlcGFnZXNfZG9uZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKK3N0YXRpYyB2b2lkIHdyaXRlcGFnZXNfZG9uZShzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCiB7CiAJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7CiAJaW50IGk7CiAJdTY0IHJlc2lkOwogCXU2NCAgZ29vZF9ieXRlczsKIAl1NjQgIGxlbmd0aCA9IDA7Ci0JaW50IHJldCA9IGV4b2ZzX2NoZWNrX2lvKGlvcywgJnJlc2lkKTsKKwlpbnQgcmV0ID0gb3JlX2NoZWNrX2lvKGlvcywgJnJlc2lkKTsKIAogCWF0b21pY19kZWMoJnBjb2wtPnNiaS0+c19jdXJyX3BlbmRpbmcpOwogCkBAIC01MDcsMTMgKzUwOCwyMSBAQAogc3RhdGljIGludCB3cml0ZV9leGVjKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCiB7CiAJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKHBjb2wtPmlub2RlKTsKLQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcyA9IHBjb2wtPmlvczsKKwlzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3M7CiAJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbF9jb3B5ID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaWYgKCFwY29sLT5wYWdlcykKIAkJcmV0dXJuIDA7CiAKKwlCVUdfT04ocGNvbC0+aW9zKTsKKwlyZXQgPSBvcmVfZ2V0X3J3X3N0YXRlKCZwY29sLT5zYmktPmxheW91dCwgJm9pLT5jb21wcywgZmFsc2UsCisJCQkJIHBjb2wtPnBnX2ZpcnN0IDw8IFBBR0VfQ0FDSEVfU0hJRlQsCisJCQkJIHBjb2wtPmxlbmd0aCwgJnBjb2wtPmlvcyk7CisKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnI7CisKIAlwY29sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqcGNvbF9jb3B5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY29sX2NvcHkpIHsKIAkJRVhPRlNfRVJSKCJ3cml0ZV9leGVjOiBGYWlsZWQgdG8ga21hbGxvYyhwY29sKVxuIik7CkBAIC01MjMsMTYgKzUzMiwxNSBAQAogCiAJKnBjb2xfY29weSA9ICpwY29sOwogCisJaW9zID0gcGNvbC0+aW9zOwogCWlvcy0+cGFnZXMgPSBwY29sX2NvcHktPnBhZ2VzOwogCWlvcy0+bnJfcGFnZXMgPSBwY29sX2NvcHktPm5yX3BhZ2VzOwotCWlvcy0+b2Zmc2V0ID0gcGNvbF9jb3B5LT5wZ19maXJzdCA8PCBQQUdFX0NBQ0hFX1NISUZUOwotCWlvcy0+bGVuZ3RoID0gcGNvbF9jb3B5LT5sZW5ndGg7CiAJaW9zLT5kb25lID0gd3JpdGVwYWdlc19kb25lOwogCWlvcy0+cHJpdmF0ZSA9IHBjb2xfY29weTsKIAotCXJldCA9IGV4b2ZzX29pX3dyaXRlKG9pLCBpb3MpOworCXJldCA9IG9yZV93cml0ZShpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0VSUigid3JpdGVfZXhlYzogZXhvZnNfb2lfd3JpdGUoKSBGYWlsZWRcbiIpOworCQlFWE9GU19FUlIoIndyaXRlX2V4ZWM6IG9yZV93cml0ZSgpIEZhaWxlZFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtODQ0LDE3ICs4NTIsMTUgQEAKIAlyZXR1cm4gU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiAob2ktPmlfZGF0YVswXSAhPSAwKTsKIH0KIAotY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aCA9IEFUVFJfREVGKAotCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04sIE9TRF9BVFRSX09JX0xPR0lDQUxfTEVOR1RILCA4KTsKLQogc3RhdGljIGludCBfZG9fdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpCiB7CiAJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAlpbnQgcmV0OwogCiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAotCXJldCA9IGV4b2ZzX29pX3RydW5jYXRlKG9pLCAodTY0KW5ld3NpemUpOworCXJldCA9IG9yZV90cnVuY2F0ZSgmc2JpLT5sYXlvdXQsICZvaS0+Y29tcHMsICh1NjQpbmV3c2l6ZSk7CiAJaWYgKGxpa2VseSghcmV0KSkKIAkJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgbmV3c2l6ZSk7CiAKQEAgLTkxNywzMCArOTIzLDI2IEBACiAJCVsxXSA9IGdfYXR0cl9pbm9kZV9maWxlX2xheW91dCwKIAkJWzJdID0gZ19hdHRyX2lub2RlX2Rpcl9sYXlvdXQsCiAJfTsKLQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvczsKKwlzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3M7CiAJc3RydWN0IGV4b2ZzX29uX2Rpc2tfaW5vZGVfbGF5b3V0ICpsYXlvdXQ7CiAJaW50IHJldDsKIAotCXJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZpb3MpOworCXJldCA9IG9yZV9nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmb2ktPmNvbXBzLCAmaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewotCQlFWE9GU19FUlIoIiVzOiBleG9mc19nZXRfaW9fc3RhdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOworCQlFWE9GU19FUlIoIiVzOiBvcmVfZ2V0X2lvX3N0YXRlIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpb3MtPm9iai5pZCA9IGV4b2ZzX29pX29iam5vKG9pKTsKLQlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJmlvcy0+b2JqKTsKLQlpb3MtPmNyZWQgPSBvaS0+aV9jcmVkOwotCi0JYXR0cnNbMV0ubGVuID0gZXhvZnNfb25fZGlza19pbm9kZV9sYXlvdXRfc2l6ZShzYmktPmxheW91dC5zX251bWRldnMpOwotCWF0dHJzWzJdLmxlbiA9IGV4b2ZzX29uX2Rpc2tfaW5vZGVfbGF5b3V0X3NpemUoc2JpLT5sYXlvdXQuc19udW1kZXZzKTsKKwlhdHRyc1sxXS5sZW4gPSBleG9mc19vbl9kaXNrX2lub2RlX2xheW91dF9zaXplKHNiaS0+Y29tcHMubnVtZGV2cyk7CisJYXR0cnNbMl0ubGVuID0gZXhvZnNfb25fZGlza19pbm9kZV9sYXlvdXRfc2l6ZShzYmktPmNvbXBzLm51bWRldnMpOwogCiAJaW9zLT5pbl9hdHRyID0gYXR0cnM7CiAJaW9zLT5pbl9hdHRyX2xlbiA9IEFSUkFZX1NJWkUoYXR0cnMpOwogCi0JcmV0ID0gZXhvZnNfc2JpX3JlYWQoaW9zKTsKKwlyZXQgPSBvcmVfcmVhZChpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCUVYT0ZTX0VSUigib2JqZWN0KDB4JWxseCkgY29ycnVwdGVkLCByZXR1cm4gZW1wdHkgZmlsZT0+JWRcbiIsCi0JCQkgIF9MTFUoaW9zLT5vYmouaWQpLCByZXQpOworCQkJICBfTExVKG9pLT5vbmVfY29tcC5vYmouaWQpLCByZXQpOwogCQltZW1zZXQoaW5vZGUsIDAsIHNpemVvZigqaW5vZGUpKTsKIAkJaW5vZGUtPmlfbW9kZSA9IDAwNDAwMDAgfCAoMDc3NyAmIH4wMjIpOwogCQkvKiBJZiBvYmplY3QgaXMgbG9zdCBvbiB0YXJnZXQgd2UgbWlnaHQgYXMgd2VsbCBlbmFibGUgaXQncwpAQCAtOTkwLDcgKzk5Miw3IEBACiAJfQogCiBvdXQ6Ci0JZXhvZnNfcHV0X2lvX3N0YXRlKGlvcyk7CisJb3JlX3B1dF9pb19zdGF0ZShpb3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMTYsNiArMTAxOCw4IEBACiAJCXJldHVybiBpbm9kZTsKIAlvaSA9IGV4b2ZzX2koaW5vZGUpOwogCV9fb2lfaW5pdChvaSk7CisJZXhvZnNfaW5pdF9jb21wcygmb2ktPmNvbXBzLCAmb2ktPm9uZV9jb21wLCBzYi0+c19mc19pbmZvLAorCQkJIGV4b2ZzX29pX29iam5vKG9pKSk7CiAKIAkvKiByZWFkIHRoZSBpbm9kZSBmcm9tIHRoZSBvc2QgKi8KIAlyZXQgPSBleG9mc19nZXRfaW5vZGUoc2IsIG9pLCAmZmNiKTsKQEAgLTExMDcsMjEgKzExMTEsMjIgQEAKICAqIHNldCB0aGUgb2JqX2NyZWF0ZWQgZmxhZyBzbyB0aGF0IG90aGVyIG1ldGhvZHMga25vdyB0aGF0IHRoZSBvYmplY3QgZXhpc3RzIG9uCiAgKiB0aGUgT1NELgogICovCi1zdGF0aWMgdm9pZCBjcmVhdGVfZG9uZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kb25lKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcDsKIAlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOwogCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCWludCByZXQ7CiAKLQlyZXQgPSBleG9mc19jaGVja19pbyhpb3MsIE5VTEwpOwotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCXJldCA9IG9yZV9jaGVja19pbyhpb3MsIE5VTEwpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAogCWF0b21pY19kZWMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOwogCiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJRVhPRlNfRVJSKCJvYmplY3Q9MHglbGx4IGNyZWF0aW9uIGZhaWxlZCBpbiBwaWQ9MHglbGx4IiwKLQkJCSAgX0xMVShleG9mc19vaV9vYmpubyhvaSkpLCBfTExVKHNiaS0+bGF5b3V0LnNfcGlkKSk7CisJCQkgIF9MTFUoZXhvZnNfb2lfb2Jqbm8ob2kpKSwKKwkJCSAgX0xMVShvaS0+b25lX2NvbXAub2JqLnBhcnRpdGlvbikpOwogCQkvKlRPRE86IFdoZW4gRlMgaXMgY29ycnVwdGVkIGNyZWF0aW9uIGNhbiBmYWlsLCBvYmplY3QgYWxyZWFkeQogCQkgKiBleGlzdC4gR2V0IHJpZCBvZiB0aGlzIGFzeW5jaHJvbm91cyBjcmVhdGlvbiwgaWYgZXhpc3QKIAkJICogaW5jcmVtZW50IHRoZSBvYmogY291bnRlciBhbmQgdHJ5IHRoZSBuZXh0IG9iamVjdC4gVW50aWwgd2UKQEAgLTExNDAsMTQgKzExNDUsMTMgQEAKICAqLwogc3RydWN0IGlub2RlICpleG9mc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBleG9mc19pX2luZm8gKm9pOwotCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3M7CisJc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zOwogCWludCByZXQ7CiAKLQlzYiA9IGRpci0+aV9zYjsKIAlpbm9kZSA9IG5ld19pbm9kZShzYik7CiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xMTU3LDggKzExNjEsNiBAQAogCiAJc2V0X29ial8yYmNyZWF0ZWQob2kpOwogCi0Jc2JpID0gc2ItPnNfZnNfaW5mbzsKLQogCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzYi0+c19iZGk7CiAJaW5vZGVfaW5pdF9vd25lcihpbm9kZSwgZGlyLCBtb2RlKTsKIAlpbm9kZS0+aV9pbm8gPSBzYmktPnNfbmV4dGlkKys7CkBAIC0xMTcwLDI1ICsxMTcyLDI0IEBACiAJc3Bpbl91bmxvY2soJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAKKwlleG9mc19pbml0X2NvbXBzKCZvaS0+Y29tcHMsICZvaS0+b25lX2NvbXAsIHNiLT5zX2ZzX2luZm8sCisJCQkgZXhvZnNfb2lfb2Jqbm8ob2kpKTsKIAlleG9mc19zYmlfd3JpdGVfc3RhdHMoc2JpKTsgLyogTWFrZSBzdXJlIG5ldyBzYmktPnNfbmV4dGlkIGlzIG9uIGRpc2sgKi8KIAogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCi0JcmV0ID0gZXhvZnNfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJmlvcyk7CisJcmV0ID0gb3JlX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZvaS0+Y29tcHMsICZpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0VSUigiZXhvZnNfbmV3X2lub2RlOiBleG9mc19nZXRfaW9fc3RhdGUgZmFpbGVkXG4iKTsKKwkJRVhPRlNfRVJSKCJleG9mc19uZXdfaW5vZGU6IG9yZV9nZXRfaW9fc3RhdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKLQlpb3MtPm9iai5pZCA9IGV4b2ZzX29pX29iam5vKG9pKTsKLQlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJmlvcy0+b2JqKTsKLQogCWlvcy0+ZG9uZSA9IGNyZWF0ZV9kb25lOwogCWlvcy0+cHJpdmF0ZSA9IGlub2RlOwotCWlvcy0+Y3JlZCA9IG9pLT5pX2NyZWQ7Ci0JcmV0ID0gZXhvZnNfc2JpX2NyZWF0ZShpb3MpOworCisJcmV0ID0gb3JlX2NyZWF0ZShpb3MpOwogCWlmIChyZXQpIHsKLQkJZXhvZnNfcHV0X2lvX3N0YXRlKGlvcyk7CisJCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAJYXRvbWljX2luYygmc2JpLT5zX2N1cnJfcGVuZGluZyk7CkBAIC0xMjA3LDExICsxMjA4LDExIEBACiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBleG9mc191cGRhdGVfaW5vZGUoKS4KICAqLwotc3RhdGljIHZvaWQgdXBkYXRlaV9kb25lKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB2b2lkICpwKQorc3RhdGljIHZvaWQgdXBkYXRlaV9kb25lKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdXBkYXRlaV9hcmdzICphcmdzID0gcDsKIAotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAogCWF0b21pY19kZWMoJmFyZ3MtPnNiaS0+c19jdXJyX3BlbmRpbmcpOwogCkBAIC0xMjI3LDcgKzEyMjgsNyBAQAogCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOwotCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOworCXN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvczsKIAlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKIAlzdHJ1Y3QgZXhvZnNfZmNiICpmY2I7CiAJc3RydWN0IHVwZGF0ZWlfYXJncyAqYXJnczsKQEAgLTEyNjYsOSArMTI2Nyw5IEBACiAJfSBlbHNlCiAJCW1lbWNweShmY2ItPmlfZGF0YSwgb2ktPmlfZGF0YSwgc2l6ZW9mKGZjYi0+aV9kYXRhKSk7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKKwlyZXQgPSBvcmVfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJm9pLT5jb21wcywgJmlvcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJRVhPRlNfRVJSKCIlczogZXhvZnNfZ2V0X2lvX3N0YXRlIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKKwkJRVhPRlNfRVJSKCIlczogb3JlX2dldF9pb19zdGF0ZSBmYWlsZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZnJlZV9hcmdzOwogCX0KIApAQCAtMTI4NSwxMyArMTI4NiwxMyBAQAogCQlpb3MtPnByaXZhdGUgPSBhcmdzOwogCX0KIAotCXJldCA9IGV4b2ZzX29pX3dyaXRlKG9pLCBpb3MpOworCXJldCA9IG9yZV93cml0ZShpb3MpOwogCWlmICghZG9fc3luYyAmJiAhcmV0KSB7CiAJCWF0b21pY19pbmMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOwogCQlnb3RvIG91dDsgLyogZGVhbGxvY2F0aW9uIGluIHVwZGF0ZWlfZG9uZSAqLwogCX0KIAotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIGZyZWVfYXJnczoKIAlrZnJlZShhcmdzKTsKIG91dDoKQEAgLTEzMTAsMTEgKzEzMTEsMTEgQEAKICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZyb20gZXhvZnNfZGVsZXRlX2lub2RlKCkgLSBkb24ndCBoYXZlIG11Y2ggY2xlYW5pbmcgdXAgdG8KICAqIGRvLgogICovCi1zdGF0aWMgdm9pZCBkZWxldGVfZG9uZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKK3N0YXRpYyB2b2lkIGRlbGV0ZV9kb25lKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gcDsKIAotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAogCWF0b21pY19kZWMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOwogfQpAQCAtMTMyOSw3ICsxMzMwLDcgQEAKIAlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKLQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvczsKKwlzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3M7CiAJaW50IHJldDsKIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKQEAgLTEzNDksMjAgKzEzNTAsMTkgQEAKIAkvKiBpZ25vcmUgdGhlIGVycm9yLCBhdHRlbXB0IGEgcmVtb3ZlIGFueXdheSAqLwogCiAJLyogTm93IFJlbW92ZSB0aGUgT1NEIG9iamVjdHMgKi8KLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKKwlyZXQgPSBvcmVfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJm9pLT5jb21wcywgJmlvcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJRVhPRlNfRVJSKCIlczogZXhvZnNfZ2V0X2lvX3N0YXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlFWE9GU19FUlIoIiVzOiBvcmVfZ2V0X2lvX3N0YXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCi0JaW9zLT5vYmouaWQgPSBleG9mc19vaV9vYmpubyhvaSk7CiAJaW9zLT5kb25lID0gZGVsZXRlX2RvbmU7CiAJaW9zLT5wcml2YXRlID0gc2JpOwotCWlvcy0+Y3JlZCA9IG9pLT5pX2NyZWQ7Ci0JcmV0ID0gZXhvZnNfc2JpX3JlbW92ZShpb3MpOworCisJcmV0ID0gb3JlX3JlbW92ZShpb3MpOwogCWlmIChyZXQpIHsKLQkJRVhPRlNfRVJSKCIlczogZXhvZnNfc2JpX3JlbW92ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZXhvZnNfcHV0X2lvX3N0YXRlKGlvcyk7CisJCUVYT0ZTX0VSUigiJXM6IG9yZV9yZW1vdmUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAkJcmV0dXJuOwogCX0KIAlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lvcy5jIGIvZnMvZXhvZnMvb3JlLmMKc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gZnMvZXhvZnMvaW9zLmMKcmVuYW1lIHRvIGZzL2V4b2ZzL29yZS5jCmluZGV4IGY3NGEyZWMuLjI1MzA1YWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lvcy5jCisrKyBiL2ZzL2V4b2ZzL29yZS5jCkBAIC0yMyw4MSArMjMsODcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotI2luY2x1ZGUgImV4b2ZzLmgiCisjaW5jbHVkZSA8c2NzaS9vc2Rfb3JlLmg+CiAKLSNkZWZpbmUgRVhPRlNfREJHTVNHMihNLi4uKSBkbyB7fSB3aGlsZSAoMCkKLS8qICNkZWZpbmUgRVhPRlNfREJHTVNHMiBFWE9GU19EQkdNU0cgKi8KKyNkZWZpbmUgT1JFX0VSUihmbXQsIGEuLi4pIHByaW50ayhLRVJOX0VSUiAib3JlOiAiIGZtdCwgIyNhKQogCi12b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKQorI2lmZGVmIENPTkZJR19FWE9GU19ERUJVRworI2RlZmluZSBPUkVfREJHTVNHKGZtdCwgYS4uLikgXAorCXByaW50ayhLRVJOX05PVElDRSAib3JlIEAlczolZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhKQorI2Vsc2UKKyNkZWZpbmUgT1JFX0RCR01TRyhmbXQsIGEuLi4pIFwKKwlkbyB7IGlmICgwKSBwcmludGsoZm10LCAjI2EpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIHU2NCBoYXMgcHJvYmxlbXMgd2l0aCBwcmludGsgdGhpcyB3aWxsIGNhc3QgaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nICovCisjZGVmaW5lIF9MTFUoeCkgKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkKKworI2RlZmluZSBPUkVfREJHTVNHMihNLi4uKSBkbyB7fSB3aGlsZSAoMCkKKy8qICNkZWZpbmUgT1JFX0RCR01TRzIgT1JFX0RCR01TRyAqLworCitNT0RVTEVfQVVUSE9SKCJCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPYmplY3RzIFJhaWQgRW5naW5lIG9yZS5rbyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdTggKl9pb3NfY3JlZChzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHVuc2lnbmVkIGluZGV4KQogewotCW9zZF9zZWNfaW5pdF9ub3NlY19kb2FsbF9jYXBzKGNyZWRfYSwgb2JqLCBmYWxzZSwgdHJ1ZSk7CisJcmV0dXJuIGlvcy0+Y29tcHMtPmNvbXBzW2luZGV4ICYgaW9zLT5jb21wcy0+c2luZ2xlX2NvbXBdLmNyZWQ7CiB9CiAKLWludCBleG9mc19yZWFkX2tlcm4oc3RydWN0IG9zZF9kZXYgKm9kLCB1OCAqY3JlZCwgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwKLQkJICAgIHU2NCBvZmZzZXQsIHZvaWQgKnAsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBzdHJ1Y3Qgb3NkX29ial9pZCAqX2lvc19vYmooc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1bnNpZ25lZCBpbmRleCkKIHsKLQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qob2QsIEdGUF9LRVJORUwpOwotLyoJc3RydWN0IG9zZF9zZW5zZV9pbmZvIG9zaSA9IHsua2V5ID0gMH07Ki8KLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KCFvcikpIHsKLQkJRVhPRlNfREJHTVNHKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0ID0gb3NkX3JlcV9yZWFkX2tlcm4ob3IsIG9iaiwgb2Zmc2V0LCBwLCBsZW5ndGgpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0RCR01TRygiJXM6IG9zZF9yZXFfcmVhZF9rZXJuIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gb3NkX2ZpbmFsaXplX3JlcXVlc3Qob3IsIDAsIGNyZWQsIE5VTEwpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0RCR01TRygiRmFpbGVkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IG9zZF9leGVjdXRlX3JlcXVlc3Qob3IpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlFWE9GU19EQkdNU0coIm9zZF9leGVjdXRlX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKLQkvKiBvc2RfcmVxX2RlY29kZV9zZW5zZShvciwgcmV0KTsgKi8KLQotb3V0OgotCW9zZF9lbmRfcmVxdWVzdChvcik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gJmlvcy0+Y29tcHMtPmNvbXBzW2luZGV4ICYgaW9zLT5jb21wcy0+c2luZ2xlX2NvbXBdLm9iajsKIH0KIAotaW50IGV4b2ZzX2dldF9pb19zdGF0ZShzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCi0JCSAgICAgICBzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKipwaW9zKQorc3RhdGljIHN0cnVjdCBvc2RfZGV2ICpfaW9zX29kKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgdW5zaWduZWQgaW5kZXgpCiB7Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3M7CisJcmV0dXJuIGlvcy0+Y29tcHMtPm9kc1tpbmRleF07Cit9CisKK2ludCAgb3JlX2dldF9yd19zdGF0ZShzdHJ1Y3Qgb3JlX2xheW91dCAqbGF5b3V0LCBzdHJ1Y3Qgb3JlX2NvbXBvbmVudHMgKmNvbXBzLAorCQkgICAgICBib29sIGlzX3JlYWRpbmcsIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsCisJCSAgICAgIHN0cnVjdCBvcmVfaW9fc3RhdGUgKipwaW9zKQoreworCXN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvczsKIAogCS8qVE9ETzogTWF5YmUgdXNlIGttZW1fY2FjaCBwZXIgc2JpIG9mIHNpemUKIAkgKiBleG9mc19pb19zdGF0ZV9zaXplKGxheW91dC0+c19udW1kZXZzKQogCSAqLwotCWlvcyA9IGt6YWxsb2MoZXhvZnNfaW9fc3RhdGVfc2l6ZShsYXlvdXQtPnNfbnVtZGV2cyksIEdGUF9LRVJORUwpOworCWlvcyA9IGt6YWxsb2Mob3JlX2lvX3N0YXRlX3NpemUoY29tcHMtPm51bWRldnMpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWlvcykpIHsKLQkJRVhPRlNfREJHTVNHKCJGYWlsZWQga3phbGxvYyBieXRlcz0lZFxuIiwKLQkJCSAgICAgZXhvZnNfaW9fc3RhdGVfc2l6ZShsYXlvdXQtPnNfbnVtZGV2cykpOworCQlPUkVfREJHTVNHKCJGYWlsZWQga3phbGxvYyBieXRlcz0lZFxuIiwKKwkJCSAgICAgb3JlX2lvX3N0YXRlX3NpemUoY29tcHMtPm51bWRldnMpKTsKIAkJKnBpb3MgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlpb3MtPmxheW91dCA9IGxheW91dDsKLQlpb3MtPm9iai5wYXJ0aXRpb24gPSBsYXlvdXQtPnNfcGlkOworCWlvcy0+Y29tcHMgPSBjb21wczsKKwlpb3MtPm9mZnNldCA9IG9mZnNldDsKKwlpb3MtPmxlbmd0aCA9IGxlbmd0aDsKKwlpb3MtPnJlYWRpbmcgPSBpc19yZWFkaW5nOworCiAJKnBpb3MgPSBpb3M7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG9yZV9nZXRfcndfc3RhdGUpOwogCi12b2lkIGV4b2ZzX3B1dF9pb19zdGF0ZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKK2ludCAgb3JlX2dldF9pb19zdGF0ZShzdHJ1Y3Qgb3JlX2xheW91dCAqbGF5b3V0LCBzdHJ1Y3Qgb3JlX2NvbXBvbmVudHMgKmNvbXBzLAorCQkgICAgICBzdHJ1Y3Qgb3JlX2lvX3N0YXRlICoqaW9zKQoreworCXJldHVybiBvcmVfZ2V0X3J3X3N0YXRlKGxheW91dCwgY29tcHMsIHRydWUsIDAsIDAsIGlvcyk7Cit9CitFWFBPUlRfU1lNQk9MKG9yZV9nZXRfaW9fc3RhdGUpOworCit2b2lkIG9yZV9wdXRfaW9fc3RhdGUoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKQogewogCWlmIChpb3MpIHsKIAkJdW5zaWduZWQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgaW9zLT5udW1kZXZzOyBpKyspIHsKLQkJCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltpXTsKKwkJCXN0cnVjdCBvcmVfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbaV07CiAKIAkJCWlmIChwZXJfZGV2LT5vcikKIAkJCQlvc2RfZW5kX3JlcXVlc3QocGVyX2Rldi0+b3IpOwpAQCAtMTA4LDMxICsxMTQsOSBAQAogCQlrZnJlZShpb3MpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wob3JlX3B1dF9pb19zdGF0ZSk7CiAKLXVuc2lnbmVkIGV4b2ZzX2xheW91dF9vZF9pZChzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCi0JCQkgICAgb3NkX2lkIG9ial9ubywgdW5zaWduZWQgbGF5b3V0X2luZGV4KQotewotLyoJc3dpdGNoIChsYXlvdXQtPmxheV9mdW5jKSB7Ci0JY2FzZSBMQVlPVVRfTU9WSU5HX1dJTkRPVzoKLQl7Ki8KLQkJdW5zaWduZWQgZGV2X21vZCA9IG9ial9ubzsKLQotCQlyZXR1cm4gKGxheW91dF9pbmRleCArIGRldl9tb2QgKiBsYXlvdXQtPm1pcnJvcnNfcDEpICUKLQkJCQkJCQkgICAgICBsYXlvdXQtPnNfbnVtZGV2czsKLS8qCX0KLQljYXNlIExBWU9VVF9GVU5DX0lNUExJQ1Q6Ci0JCXJldHVybiBsYXlvdXQtPmRldnNbbGF5b3V0X2luZGV4XTsKLQl9Ki8KLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3NkX2RldiAqZXhvZnNfaW9zX29kKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLAotCQkJCQkgICB1bnNpZ25lZCBsYXlvdXRfaW5kZXgpCi17Ci0JcmV0dXJuIGlvcy0+bGF5b3V0LT5zX29kc1sKLQkJZXhvZnNfbGF5b3V0X29kX2lkKGlvcy0+bGF5b3V0LCBpb3MtPm9iai5pZCwgbGF5b3V0X2luZGV4KV07Ci19Ci0KLXN0YXRpYyB2b2lkIF9zeW5jX2RvbmUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCitzdGF0aWMgdm9pZCBfc3luY19kb25lKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IHA7CiAKQEAgLTE0MSwyMCArMTI1LDIwIEBACiAKIHN0YXRpYyB2b2lkIF9sYXN0X2lvKHN0cnVjdCBrcmVmICprcmVmKQogewotCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zID0gY29udGFpbmVyX29mKAotCQkJCQlrcmVmLCBzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUsIGtyZWYpOworCXN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcyA9IGNvbnRhaW5lcl9vZigKKwkJCQkJa3JlZiwgc3RydWN0IG9yZV9pb19zdGF0ZSwga3JlZik7CiAKIAlpb3MtPmRvbmUoaW9zLCBpb3MtPnByaXZhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBfZG9uZV9pbyhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQogewotCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zID0gcDsKKwlzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MgPSBwOwogCiAJa3JlZl9wdXQoJmlvcy0+a3JlZiwgX2xhc3RfaW8pOwogfQogCi1zdGF0aWMgaW50IGV4b2ZzX2lvX2V4ZWN1dGUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpCitzdGF0aWMgaW50IG9yZV9pb19leGVjdXRlKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcykKIHsKIAlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAlib29sIHN5bmMgPSAoaW9zLT5kb25lID09IE5VTEwpOwpAQCAtMTcwLDkgKzE1NCw5IEBACiAJCWlmICh1bmxpa2VseSghb3IpKQogCQkJY29udGludWU7CiAKLQkJcmV0ID0gb3NkX2ZpbmFsaXplX3JlcXVlc3Qob3IsIDAsIGlvcy0+Y3JlZCwgTlVMTCk7CisJCXJldCA9IG9zZF9maW5hbGl6ZV9yZXF1ZXN0KG9yLCAwLCBfaW9zX2NyZWQoaW9zLCBpKSwgTlVMTCk7CiAJCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCQlFWE9GU19EQkdNU0coIkZhaWxlZCB0byBvc2RfZmluYWxpemVfcmVxdWVzdCgpID0+ICVkXG4iLAorCQkJT1JFX0RCR01TRygiRmFpbGVkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsCiAJCQkJICAgICByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMTk0LDcgKzE3OCw3IEBACiAKIAlpZiAoc3luYykgewogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKLQkJcmV0ID0gZXhvZnNfY2hlY2tfaW8oaW9zLCBOVUxMKTsKKwkJcmV0ID0gb3JlX2NoZWNrX2lvKGlvcywgTlVMTCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yMTQsNyArMTk4LDcgQEAKIAl9CiB9CiAKLWludCBleG9mc19jaGVja19pbyhzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdTY0ICpyZXNpZCkKK2ludCBvcmVfY2hlY2tfaW8oc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1NjQgKnJlc2lkKQogewogCWVudW0gb3NkX2Vycl9wcmlvcml0eSBhY3VtdWxhdGVkX29zZF9lcnIgPSAwOwogCWludCBhY3VtdWxhdGVkX2xpbl9lcnIgPSAwOwpAQCAtMjM1LDcgKzIxOSw3IEBACiAJCWlmIChPU0RfRVJSX1BSSV9DTEVBUl9QQUdFUyA9PSBvc2kub3NkX2Vycl9wcmkpIHsKIAkJCS8qIHN0YXJ0IHJlYWQgb2Zmc2V0IHBhc3NlZCBlbmRvZiBmaWxlICovCiAJCQlfY2xlYXJfYmlvKGlvcy0+cGVyX2RldltpXS5iaW8pOwotCQkJRVhPRlNfREJHTVNHKCJzdGFydCByZWFkIG9mZnNldCBwYXNzZWQgZW5kIG9mIGZpbGUgIgorCQkJT1JFX0RCR01TRygic3RhcnQgcmVhZCBvZmZzZXQgcGFzc2VkIGVuZCBvZiBmaWxlICIKIAkJCQkib2Zmc2V0PTB4JWxseCwgbGVuZ3RoPTB4JWxseFxuIiwKIAkJCQlfTExVKGlvcy0+cGVyX2RldltpXS5vZmZzZXQpLAogCQkJCV9MTFUoaW9zLT5wZXJfZGV2W2ldLmxlbmd0aCkpOwpAQCAtMjU5LDYgKzI0Myw3IEBACiAKIAlyZXR1cm4gYWN1bXVsYXRlZF9saW5fZXJyOwogfQorRVhQT1JUX1NZTUJPTChvcmVfY2hlY2tfaW8pOwogCiAvKgogICogTCAtIGxvZ2ljYWwgb2Zmc2V0IGludG8gdGhlIGZpbGUKQEAgLTMwNSwyMCArMjkwLDIxIEBACiBzdHJ1Y3QgX3N0cmlwaW5nX2luZm8gewogCXU2NCBvYmpfb2Zmc2V0OwogCXU2NCBncm91cF9sZW5ndGg7CisJdTY0IE07IC8qIGZvciB0cnVuY2F0ZSAqLwogCXVuc2lnbmVkIGRldjsKIAl1bnNpZ25lZCB1bml0X29mZjsKIH07CiAKLXN0YXRpYyB2b2lkIF9jYWxjX3N0cmlwZV9pbmZvKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB1NjQgZmlsZV9vZmZzZXQsCitzdGF0aWMgdm9pZCBfY2FsY19zdHJpcGVfaW5mbyhzdHJ1Y3Qgb3JlX2xheW91dCAqbGF5b3V0LCB1NjQgZmlsZV9vZmZzZXQsCiAJCQkgICAgICBzdHJ1Y3QgX3N0cmlwaW5nX2luZm8gKnNpKQogewotCXUzMglzdHJpcGVfdW5pdCA9IGlvcy0+bGF5b3V0LT5zdHJpcGVfdW5pdDsKLQl1MzIJZ3JvdXBfd2lkdGggPSBpb3MtPmxheW91dC0+Z3JvdXBfd2lkdGg7Ci0JdTY0CWdyb3VwX2RlcHRoID0gaW9zLT5sYXlvdXQtPmdyb3VwX2RlcHRoOworCXUzMglzdHJpcGVfdW5pdCA9IGxheW91dC0+c3RyaXBlX3VuaXQ7CisJdTMyCWdyb3VwX3dpZHRoID0gbGF5b3V0LT5ncm91cF93aWR0aDsKKwl1NjQJZ3JvdXBfZGVwdGggPSBsYXlvdXQtPmdyb3VwX2RlcHRoOwogCiAJdTMyCVUgPSBzdHJpcGVfdW5pdCAqIGdyb3VwX3dpZHRoOwogCXU2NAlUID0gVSAqIGdyb3VwX2RlcHRoOwotCXU2NAlTID0gVCAqIGlvcy0+bGF5b3V0LT5ncm91cF9jb3VudDsKKwl1NjQJUyA9IFQgKiBsYXlvdXQtPmdyb3VwX2NvdW50OwogCXU2NAlNID0gZGl2NjRfdTY0KGZpbGVfb2Zmc2V0LCBTKTsKIAogCS8qCkBAIC0zMzMsNyArMzE5LDcgQEAKIAogCS8qICJIIC0gKE4gKiBVKSIgaXMganVzdCAiSCAlIFUiIHNvIGl0J3MgYm91bmQgdG8gdTMyICovCiAJc2ktPmRldiA9ICh1MzIpKEggLSAoTiAqIFUpKSAvIHN0cmlwZV91bml0ICsgRyAqIGdyb3VwX3dpZHRoOwotCXNpLT5kZXYgKj0gaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDE7CisJc2ktPmRldiAqPSBsYXlvdXQtPm1pcnJvcnNfcDE7CiAKIAlkaXZfdTY0X3JlbShmaWxlX29mZnNldCwgc3RyaXBlX3VuaXQsICZzaS0+dW5pdF9vZmYpOwogCkBAIC0zNDEsMTUgKzMyNywxNiBAQAogCQkJCSAgKE0gKiBncm91cF9kZXB0aCAqIHN0cmlwZV91bml0KTsKIAogCXNpLT5ncm91cF9sZW5ndGggPSBUIC0gSDsKKwlzaS0+TSA9IE07CiB9CiAKLXN0YXRpYyBpbnQgX2FkZF9zdHJpcGVfdW5pdChzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgIHVuc2lnbmVkICpjdXJfcGcsCi0JCXVuc2lnbmVkIHBnYmFzZSwgc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYsCitzdGF0aWMgaW50IF9hZGRfc3RyaXBlX3VuaXQoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCAgdW5zaWduZWQgKmN1cl9wZywKKwkJdW5zaWduZWQgcGdiYXNlLCBzdHJ1Y3Qgb3JlX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYsCiAJCWludCBjdXJfbGVuKQogewogCXVuc2lnbmVkIHBnID0gKmN1cl9wZzsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9Ci0JCQlvc2RfcmVxdWVzdF9xdWV1ZShleG9mc19pb3Nfb2QoaW9zLCBwZXJfZGV2LT5kZXYpKTsKKwkJCW9zZF9yZXF1ZXN0X3F1ZXVlKF9pb3Nfb2QoaW9zLCBwZXJfZGV2LT5kZXYpKTsKIAogCXBlcl9kZXYtPmxlbmd0aCArPSBjdXJfbGVuOwogCkBAIC0zNjEsNyArMzQ4LDcgQEAKIAogCQlwZXJfZGV2LT5iaW8gPSBiaW9fa21hbGxvYyhHRlBfS0VSTkVMLCBiaW9fc2l6ZSk7CiAJCWlmICh1bmxpa2VseSghcGVyX2Rldi0+YmlvKSkgewotCQkJRVhPRlNfREJHTVNHKCJGYWlsZWQgdG8gYWxsb2NhdGUgQklPIHNpemU9JXVcbiIsCisJCQlPUkVfREJHTVNHKCJGYWlsZWQgdG8gYWxsb2NhdGUgQklPIHNpemU9JXVcbiIsCiAJCQkJICAgICBiaW9fc2l6ZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMzg3LDcgKzM3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX3ByZXBhcmVfb25lX2dyb3VwKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB1NjQgbGVuZ3RoLAorc3RhdGljIGludCBfcHJlcGFyZV9vbmVfZ3JvdXAoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1NjQgbGVuZ3RoLAogCQkJICAgICAgc3RydWN0IF9zdHJpcGluZ19pbmZvICpzaSkKIHsKIAl1bnNpZ25lZCBzdHJpcGVfdW5pdCA9IGlvcy0+bGF5b3V0LT5zdHJpcGVfdW5pdDsKQEAgLTQwMCw3ICszODcsNyBAQAogCWludCByZXQgPSAwOwogCiAJd2hpbGUgKGxlbmd0aCkgewotCQlzdHJ1Y3QgZXhvZnNfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbZGV2XTsKKwkJc3RydWN0IG9yZV9wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltkZXZdOwogCQl1bnNpZ25lZCBjdXJfbGVuLCBwYWdlX29mZiA9IDA7CiAKIAkJaWYgKCFwZXJfZGV2LT5sZW5ndGgpIHsKQEAgLTQ0Myw3ICs0MzAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX3ByZXBhcmVfZm9yX3N0cmlwaW5nKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKQorc3RhdGljIGludCBfcHJlcGFyZV9mb3Jfc3RyaXBpbmcoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKQogewogCXU2NCBsZW5ndGggPSBpb3MtPmxlbmd0aDsKIAl1NjQgb2Zmc2V0ID0gaW9zLT5vZmZzZXQ7CkBAIC00NTIsOSArNDM5LDkgQEAKIAogCWlmICghaW9zLT5wYWdlcykgewogCQlpZiAoaW9zLT5rZXJuX2J1ZmYpIHsKLQkJCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldlswXTsKKwkJCXN0cnVjdCBvcmVfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbMF07CiAKLQkJCV9jYWxjX3N0cmlwZV9pbmZvKGlvcywgaW9zLT5vZmZzZXQsICZzaSk7CisJCQlfY2FsY19zdHJpcGVfaW5mbyhpb3MtPmxheW91dCwgaW9zLT5vZmZzZXQsICZzaSk7CiAJCQlwZXJfZGV2LT5vZmZzZXQgPSBzaS5vYmpfb2Zmc2V0OwogCQkJcGVyX2Rldi0+ZGV2ID0gc2kuZGV2OwogCkBAIC00NjgsNyArNDU1LDcgQEAKIAl9CiAKIAl3aGlsZSAobGVuZ3RoKSB7Ci0JCV9jYWxjX3N0cmlwZV9pbmZvKGlvcywgb2Zmc2V0LCAmc2kpOworCQlfY2FsY19zdHJpcGVfaW5mbyhpb3MtPmxheW91dCwgb2Zmc2V0LCAmc2kpOwogCiAJCWlmIChsZW5ndGggPCBzaS5ncm91cF9sZW5ndGgpCiAJCQlzaS5ncm91cF9sZW5ndGggPSBsZW5ndGg7CkBAIC00ODUsNTcgKzQ3Miw1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBleG9mc19zYmlfY3JlYXRlKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKQoraW50IG9yZV9jcmVhdGUoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKQogewogCWludCBpLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW9zLT5sYXlvdXQtPnNfbnVtZGV2czsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGlvcy0+Y29tcHMtPm51bWRldnM7IGkrKykgewogCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOwogCi0JCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgaSksIEdGUF9LRVJORUwpOworCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KF9pb3Nfb2QoaW9zLCBpKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseSghb3IpKSB7Ci0JCQlFWE9GU19FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCU9SRV9FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQogCQlpb3MtPnBlcl9kZXZbaV0ub3IgPSBvcjsKIAkJaW9zLT5udW1kZXZzKys7CiAKLQkJb3NkX3JlcV9jcmVhdGVfb2JqZWN0KG9yLCAmaW9zLT5vYmopOworCQlvc2RfcmVxX2NyZWF0ZV9vYmplY3Qob3IsIF9pb3Nfb2JqKGlvcywgaSkpOwogCX0KLQlyZXQgPSBleG9mc19pb19leGVjdXRlKGlvcyk7CisJcmV0ID0gb3JlX2lvX2V4ZWN1dGUoaW9zKTsKIAogb3V0OgogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKG9yZV9jcmVhdGUpOwogCi1pbnQgZXhvZnNfc2JpX3JlbW92ZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKK2ludCBvcmVfcmVtb3ZlKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcykKIHsKIAlpbnQgaSwgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGlvcy0+bGF5b3V0LT5zX251bWRldnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb3MtPmNvbXBzLT5udW1kZXZzOyBpKyspIHsKIAkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKIAotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KGV4b2ZzX2lvc19vZChpb3MsIGkpLCBHRlBfS0VSTkVMKTsKKwkJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChfaW9zX29kKGlvcywgaSksIEdGUF9LRVJORUwpOwogCQlpZiAodW5saWtlbHkoIW9yKSkgewotCQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlPUkVfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJaW9zLT5wZXJfZGV2W2ldLm9yID0gb3I7CiAJCWlvcy0+bnVtZGV2cysrOwogCi0JCW9zZF9yZXFfcmVtb3ZlX29iamVjdChvciwgJmlvcy0+b2JqKTsKKwkJb3NkX3JlcV9yZW1vdmVfb2JqZWN0KG9yLCBfaW9zX29iaihpb3MsIGkpKTsKIAl9Ci0JcmV0ID0gZXhvZnNfaW9fZXhlY3V0ZShpb3MpOworCXJldCA9IG9yZV9pb19leGVjdXRlKGlvcyk7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChvcmVfcmVtb3ZlKTsKIAotc3RhdGljIGludCBfc2JpX3dyaXRlX21pcnJvcihzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgaW50IGN1cl9jb21wKQorc3RhdGljIGludCBfd3JpdGVfbWlycm9yKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcywgaW50IGN1cl9jb21wKQogewotCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICptYXN0ZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CisJc3RydWN0IG9yZV9wZXJfZGV2X3N0YXRlICptYXN0ZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CiAJdW5zaWduZWQgZGV2ID0gaW9zLT5wZXJfZGV2W2N1cl9jb21wXS5kZXY7CiAJdW5zaWduZWQgbGFzdF9jb21wID0gY3VyX2NvbXAgKyBpb3MtPmxheW91dC0+bWlycm9yc19wMTsKIAlpbnQgcmV0ID0gMDsKQEAgLTU0NCwxMiArNTMzLDEyIEBACiAJCXJldHVybiAwOyAvKiBKdXN0IGFuIGVtcHR5IHNsb3QgKi8KIAogCWZvciAoOyBjdXJfY29tcCA8IGxhc3RfY29tcDsgKytjdXJfY29tcCwgKytkZXYpIHsKLQkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2W2N1cl9jb21wXTsKKwkJc3RydWN0IG9yZV9wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CiAJCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CiAKLQkJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChleG9mc19pb3Nfb2QoaW9zLCBkZXYpLCBHRlBfS0VSTkVMKTsKKwkJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChfaW9zX29kKGlvcywgZGV2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseSghb3IpKSB7Ci0JCQlFWE9GU19FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCU9SRV9FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNTYzLDcgKzU1Miw3IEBACiAJCQkJYmlvID0gYmlvX2ttYWxsb2MoR0ZQX0tFUk5FTCwKIAkJCQkJCSAgbWFzdGVyX2Rldi0+YmlvLT5iaV9tYXhfdmVjcyk7CiAJCQkJaWYgKHVubGlrZWx5KCFiaW8pKSB7Ci0JCQkJCUVYT0ZTX0RCR01TRygKKwkJCQkJT1JFX0RCR01TRygKIAkJCQkJICAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBCSU8gc2l6ZT0ldVxuIiwKIAkJCQkJICAgICAgbWFzdGVyX2Rldi0+YmlvLT5iaV9tYXhfdmVjcyk7CiAJCQkJCXJldCA9IC1FTk9NRU07CkBAIC01ODIsMjUgKzU3MSwyOSBAQAogCQkJCWJpby0+YmlfcncgfD0gUkVRX1dSSVRFOwogCQkJfQogCi0JCQlvc2RfcmVxX3dyaXRlKG9yLCAmaW9zLT5vYmosIHBlcl9kZXYtPm9mZnNldCwgYmlvLAotCQkJCSAgICAgIHBlcl9kZXYtPmxlbmd0aCk7Ci0JCQlFWE9GU19EQkdNU0coIndyaXRlKDB4JWxseCkgb2Zmc2V0PTB4JWxseCAiCisJCQlvc2RfcmVxX3dyaXRlKG9yLCBfaW9zX29iaihpb3MsIGRldiksIHBlcl9kZXYtPm9mZnNldCwKKwkJCQkgICAgICBiaW8sIHBlcl9kZXYtPmxlbmd0aCk7CisJCQlPUkVfREJHTVNHKCJ3cml0ZSgweCVsbHgpIG9mZnNldD0weCVsbHggIgogCQkJCSAgICAgICJsZW5ndGg9MHglbGx4IGRldj0lZFxuIiwKLQkJCQkgICAgIF9MTFUoaW9zLT5vYmouaWQpLCBfTExVKHBlcl9kZXYtPm9mZnNldCksCisJCQkJICAgICBfTExVKF9pb3Nfb2JqKGlvcywgZGV2KS0+aWQpLAorCQkJCSAgICAgX0xMVShwZXJfZGV2LT5vZmZzZXQpLAogCQkJCSAgICAgX0xMVShwZXJfZGV2LT5sZW5ndGgpLCBkZXYpOwogCQl9IGVsc2UgaWYgKGlvcy0+a2Vybl9idWZmKSB7Ci0JCQlyZXQgPSBvc2RfcmVxX3dyaXRlX2tlcm4ob3IsICZpb3MtPm9iaiwgcGVyX2Rldi0+b2Zmc2V0LAotCQkJCQkgICBpb3MtPmtlcm5fYnVmZiwgaW9zLT5sZW5ndGgpOworCQkJcmV0ID0gb3NkX3JlcV93cml0ZV9rZXJuKG9yLCBfaW9zX29iaihpb3MsIGRldiksCisJCQkJCQkgcGVyX2Rldi0+b2Zmc2V0LAorCQkJCQkJIGlvcy0+a2Vybl9idWZmLCBpb3MtPmxlbmd0aCk7CiAJCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCQlnb3RvIG91dDsKLQkJCUVYT0ZTX0RCR01TRzIoIndyaXRlX2tlcm4oMHglbGx4KSBvZmZzZXQ9MHglbGx4ICIKKwkJCU9SRV9EQkdNU0cyKCJ3cml0ZV9rZXJuKDB4JWxseCkgb2Zmc2V0PTB4JWxseCAiCiAJCQkJICAgICAgImxlbmd0aD0weCVsbHggZGV2PSVkXG4iLAotCQkJCSAgICAgX0xMVShpb3MtPm9iai5pZCksIF9MTFUocGVyX2Rldi0+b2Zmc2V0KSwKKwkJCQkgICAgIF9MTFUoX2lvc19vYmooaW9zLCBkZXYpLT5pZCksCisJCQkJICAgICBfTExVKHBlcl9kZXYtPm9mZnNldCksCiAJCQkJICAgICBfTExVKGlvcy0+bGVuZ3RoKSwgZGV2KTsKIAkJfSBlbHNlIHsKLQkJCW9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMob3IsICZpb3MtPm9iaik7Ci0JCQlFWE9GU19EQkdNU0cyKCJvYmooMHglbGx4KSBzZXRfYXR0cmlidXRlcz0lZCBkZXY9JWRcbiIsCi0JCQkJICAgICBfTExVKGlvcy0+b2JqLmlkKSwgaW9zLT5vdXRfYXR0cl9sZW4sIGRldik7CisJCQlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCBfaW9zX29iaihpb3MsIGRldikpOworCQkJT1JFX0RCR01TRzIoIm9iaigweCVsbHgpIHNldF9hdHRyaWJ1dGVzPSVkIGRldj0lZFxuIiwKKwkJCQkgICAgIF9MTFUoX2lvc19vYmooaW9zLCBkZXYpLT5pZCksCisJCQkJICAgICBpb3MtPm91dF9hdHRyX2xlbiwgZGV2KTsKIAkJfQogCiAJCWlmIChpb3MtPm91dF9hdHRyKQpAQCAtNjE2LDcgKzYwOSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGV4b2ZzX3NiaV93cml0ZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKK2ludCBvcmVfd3JpdGUoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKQogewogCWludCBpOwogCWludCByZXQ7CkBAIC02MjYsNTIgKzYxOSw1NSBAQAogCQlyZXR1cm4gcmV0OwogCiAJZm9yIChpID0gMDsgaSA8IGlvcy0+bnVtZGV2czsgaSArPSBpb3MtPmxheW91dC0+bWlycm9yc19wMSkgewotCQlyZXQgPSBfc2JpX3dyaXRlX21pcnJvcihpb3MsIGkpOworCQlyZXQgPSBfd3JpdGVfbWlycm9yKGlvcywgaSk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBleG9mc19pb19leGVjdXRlKGlvcyk7CisJcmV0ID0gb3JlX2lvX2V4ZWN1dGUoaW9zKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChvcmVfd3JpdGUpOwogCi1zdGF0aWMgaW50IF9zYmlfcmVhZF9taXJyb3Ioc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHVuc2lnbmVkIGN1cl9jb21wKQorc3RhdGljIGludCBfcmVhZF9taXJyb3Ioc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1bnNpZ25lZCBjdXJfY29tcCkKIHsKIAlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOwotCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07Ci0JdW5zaWduZWQgZmlyc3RfZGV2ID0gKHVuc2lnbmVkKWlvcy0+b2JqLmlkOworCXN0cnVjdCBvcmVfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbY3VyX2NvbXBdOworCXN0cnVjdCBvc2Rfb2JqX2lkICpvYmogPSBfaW9zX29iaihpb3MsIGN1cl9jb21wKTsKKwl1bnNpZ25lZCBmaXJzdF9kZXYgPSAodW5zaWduZWQpb2JqLT5pZDsKIAogCWlmIChpb3MtPnBhZ2VzICYmICFwZXJfZGV2LT5sZW5ndGgpCiAJCXJldHVybiAwOyAvKiBKdXN0IGFuIGVtcHR5IHNsb3QgKi8KIAogCWZpcnN0X2RldiA9IHBlcl9kZXYtPmRldiArIGZpcnN0X2RldiAlIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOwotCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgZmlyc3RfZGV2KSwgR0ZQX0tFUk5FTCk7CisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChfaW9zX29kKGlvcywgZmlyc3RfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFvcikpIHsKLQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCU9SRV9FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXBlcl9kZXYtPm9yID0gb3I7CiAKIAlpZiAoaW9zLT5wYWdlcykgewotCQlvc2RfcmVxX3JlYWQob3IsICZpb3MtPm9iaiwgcGVyX2Rldi0+b2Zmc2V0LAorCQlvc2RfcmVxX3JlYWQob3IsIG9iaiwgcGVyX2Rldi0+b2Zmc2V0LAogCQkJCXBlcl9kZXYtPmJpbywgcGVyX2Rldi0+bGVuZ3RoKTsKLQkJRVhPRlNfREJHTVNHKCJyZWFkKDB4JWxseCkgb2Zmc2V0PTB4JWxseCBsZW5ndGg9MHglbGx4IgotCQkJICAgICAiIGRldj0lZFxuIiwgX0xMVShpb3MtPm9iai5pZCksCisJCU9SRV9EQkdNU0coInJlYWQoMHglbGx4KSBvZmZzZXQ9MHglbGx4IGxlbmd0aD0weCVsbHgiCisJCQkgICAgICIgZGV2PSVkXG4iLCBfTExVKG9iai0+aWQpLAogCQkJICAgICBfTExVKHBlcl9kZXYtPm9mZnNldCksIF9MTFUocGVyX2Rldi0+bGVuZ3RoKSwKIAkJCSAgICAgZmlyc3RfZGV2KTsKIAl9IGVsc2UgaWYgKGlvcy0+a2Vybl9idWZmKSB7Ci0JCWludCByZXQgPSBvc2RfcmVxX3JlYWRfa2VybihvciwgJmlvcy0+b2JqLCBwZXJfZGV2LT5vZmZzZXQsCisJCWludCByZXQgPSBvc2RfcmVxX3JlYWRfa2Vybihvciwgb2JqLCBwZXJfZGV2LT5vZmZzZXQsCiAJCQkJCSAgICBpb3MtPmtlcm5fYnVmZiwgaW9zLT5sZW5ndGgpOwotCQlFWE9GU19EQkdNU0cyKCJyZWFkX2tlcm4oMHglbGx4KSBvZmZzZXQ9MHglbGx4ICIKKwkJT1JFX0RCR01TRzIoInJlYWRfa2VybigweCVsbHgpIG9mZnNldD0weCVsbHggIgogCQkJICAgICAgImxlbmd0aD0weCVsbHggZGV2PSVkIHJldD0+JWRcbiIsCi0JCQkgICAgICBfTExVKGlvcy0+b2JqLmlkKSwgX0xMVShwZXJfZGV2LT5vZmZzZXQpLAorCQkJICAgICAgX0xMVShvYmotPmlkKSwgX0xMVShwZXJfZGV2LT5vZmZzZXQpLAogCQkJICAgICAgX0xMVShpb3MtPmxlbmd0aCksIGZpcnN0X2RldiwgcmV0KTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7Ci0JCW9zZF9yZXFfZ2V0X2F0dHJpYnV0ZXMob3IsICZpb3MtPm9iaik7Ci0JCUVYT0ZTX0RCR01TRzIoIm9iaigweCVsbHgpIGdldF9hdHRyaWJ1dGVzPSVkIGRldj0lZFxuIiwKLQkJCSAgICAgIF9MTFUoaW9zLT5vYmouaWQpLCBpb3MtPmluX2F0dHJfbGVuLCBmaXJzdF9kZXYpOworCQlvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKG9yLCBvYmopOworCQlPUkVfREJHTVNHMigib2JqKDB4JWxseCkgZ2V0X2F0dHJpYnV0ZXM9JWQgZGV2PSVkXG4iLAorCQkJICAgICAgX0xMVShvYmotPmlkKSwKKwkJCSAgICAgIGlvcy0+aW5fYXR0cl9sZW4sIGZpcnN0X2Rldik7CiAJfQogCWlmIChpb3MtPm91dF9hdHRyKQogCQlvc2RfcmVxX2FkZF9zZXRfYXR0cl9saXN0KG9yLCBpb3MtPm91dF9hdHRyLCBpb3MtPm91dF9hdHRyX2xlbik7CkBAIC02ODIsNyArNjc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV4b2ZzX3NiaV9yZWFkKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKQoraW50IG9yZV9yZWFkKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcykKIHsKIAlpbnQgaTsKIAlpbnQgcmV0OwpAQCAtNjkyLDE2ICs2ODgsMTcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBpb3MtPm51bWRldnM7IGkgKz0gaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDEpIHsKLQkJcmV0ID0gX3NiaV9yZWFkX21pcnJvcihpb3MsIGkpOworCQlyZXQgPSBfcmVhZF9taXJyb3IoaW9zLCBpKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGV4b2ZzX2lvX2V4ZWN1dGUoaW9zKTsKKwlyZXQgPSBvcmVfaW9fZXhlY3V0ZShpb3MpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKG9yZV9yZWFkKTsKIAotaW50IGV4dHJhY3RfYXR0cl9mcm9tX2lvcyhzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgc3RydWN0IG9zZF9hdHRyICphdHRyKQoraW50IGV4dHJhY3RfYXR0cl9mcm9tX2lvcyhzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHN0cnVjdCBvc2RfYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3Qgb3NkX2F0dHIgY3VyX2F0dHIgPSB7LmF0dHJfcGFnZSA9IDB9OyAvKiBzdGFydCB3aXRoIHplcm9zICovCiAJdm9pZCAqaXRlciA9IE5VTEw7CkBAIC03MjEsODMgKzcxOCwxMTggQEAKIAogCXJldHVybiAtRUlPOwogfQorRVhQT1JUX1NZTUJPTChleHRyYWN0X2F0dHJfZnJvbV9pb3MpOwogCi1zdGF0aWMgaW50IF90cnVuY2F0ZV9taXJyb3JzKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB1bnNpZ25lZCBjdXJfY29tcCwKK3N0YXRpYyBpbnQgX3RydW5jYXRlX21pcnJvcnMoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1bnNpZ25lZCBjdXJfY29tcCwKIAkJCSAgICAgc3RydWN0IG9zZF9hdHRyICphdHRyKQogewogCWludCBsYXN0X2NvbXAgPSBjdXJfY29tcCArIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOwogCiAJZm9yICg7IGN1cl9jb21wIDwgbGFzdF9jb21wOyArK2N1cl9jb21wKSB7Ci0JCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CisJCXN0cnVjdCBvcmVfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbY3VyX2NvbXBdOwogCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOwogCi0JCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgY3VyX2NvbXApLCBHRlBfS0VSTkVMKTsKKwkJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChfaW9zX29kKGlvcywgY3VyX2NvbXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHVubGlrZWx5KCFvcikpIHsKLQkJCUVYT0ZTX0VSUigiJXM6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJT1JFX0VSUigiJXM6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJcGVyX2Rldi0+b3IgPSBvcjsKIAotCQlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCAmaW9zLT5vYmopOworCQlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCBfaW9zX29iaihpb3MsIGN1cl9jb21wKSk7CiAJCW9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qob3IsIGF0dHIsIDEpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1pbnQgZXhvZnNfb2lfdHJ1bmNhdGUoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2ksIHU2NCBzaXplKQorc3RydWN0IF90cnVuY19pbmZvIHsKKwlzdHJ1Y3QgX3N0cmlwaW5nX2luZm8gc2k7CisJdTY0IHByZXZfZ3JvdXBfb2JqX29mZjsKKwl1NjQgbmV4dF9ncm91cF9vYmpfb2ZmOworCisJdW5zaWduZWQgZmlyc3RfZ3JvdXBfZGV2OworCXVuc2lnbmVkIG5leF9ncm91cF9kZXY7CisJdW5zaWduZWQgbWF4X2RldnM7Cit9OworCit2b2lkIF9jYWxjX3RydW5rX2luZm8oc3RydWN0IG9yZV9sYXlvdXQgKmxheW91dCwgdTY0IGZpbGVfb2Zmc2V0LAorCQkgICAgICAgc3RydWN0IF90cnVuY19pbmZvICp0aSkKIHsKLQlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gb2ktPnZmc19pbm9kZS5pX3NiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3M7CisJdW5zaWduZWQgc3RyaXBlX3VuaXQgPSBsYXlvdXQtPnN0cmlwZV91bml0OworCisJX2NhbGNfc3RyaXBlX2luZm8obGF5b3V0LCBmaWxlX29mZnNldCwgJnRpLT5zaSk7CisKKwl0aS0+cHJldl9ncm91cF9vYmpfb2ZmID0gdGktPnNpLk0gKiBzdHJpcGVfdW5pdDsKKwl0aS0+bmV4dF9ncm91cF9vYmpfb2ZmID0gdGktPnNpLk0gPyAodGktPnNpLk0gLSAxKSAqIHN0cmlwZV91bml0IDogMDsKKworCXRpLT5maXJzdF9ncm91cF9kZXYgPSB0aS0+c2kuZGV2IC0gKHRpLT5zaS5kZXYgJSBsYXlvdXQtPmdyb3VwX3dpZHRoKTsKKwl0aS0+bmV4X2dyb3VwX2RldiA9IHRpLT5maXJzdF9ncm91cF9kZXYgKyBsYXlvdXQtPmdyb3VwX3dpZHRoOworCXRpLT5tYXhfZGV2cyA9IGxheW91dC0+Z3JvdXBfd2lkdGggKiBsYXlvdXQtPmdyb3VwX2NvdW50OworfQorCitpbnQgb3JlX3RydW5jYXRlKHN0cnVjdCBvcmVfbGF5b3V0ICpsYXlvdXQsIHN0cnVjdCBvcmVfY29tcG9uZW50cyAqY29tcHMsCisJCSAgIHU2NCBzaXplKQoreworCXN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvczsKIAlzdHJ1Y3QgZXhvZnNfdHJ1bmNfYXR0ciB7CiAJCXN0cnVjdCBvc2RfYXR0ciBhdHRyOwogCQlfX2JlNjQgbmV3c2l6ZTsKIAl9ICpzaXplX2F0dHJzOwotCXN0cnVjdCBfc3RyaXBpbmdfaW5mbyBzaTsKKwlzdHJ1Y3QgX3RydW5jX2luZm8gdGk7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZpb3MpOworCXJldCA9IG9yZV9nZXRfaW9fc3RhdGUobGF5b3V0LCBjb21wcywgJmlvcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCXJldHVybiByZXQ7CiAKLQlzaXplX2F0dHJzID0ga2NhbGxvYyhpb3MtPmxheW91dC0+Z3JvdXBfd2lkdGgsIHNpemVvZigqc2l6ZV9hdHRycyksCisJX2NhbGNfdHJ1bmtfaW5mbyhpb3MtPmxheW91dCwgc2l6ZSwgJnRpKTsKKworCXNpemVfYXR0cnMgPSBrY2FsbG9jKHRpLm1heF9kZXZzLCBzaXplb2YoKnNpemVfYXR0cnMpLAogCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXNpemVfYXR0cnMpKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCWlvcy0+b2JqLmlkID0gZXhvZnNfb2lfb2Jqbm8ob2kpOwotCWlvcy0+Y3JlZCA9IG9pLT5pX2NyZWQ7CisJaW9zLT5udW1kZXZzID0gaW9zLT5jb21wcy0+bnVtZGV2czsKIAotCWlvcy0+bnVtZGV2cyA9IGlvcy0+bGF5b3V0LT5zX251bWRldnM7Ci0JX2NhbGNfc3RyaXBlX2luZm8oaW9zLCBzaXplLCAmc2kpOwotCi0JZm9yIChpID0gMDsgaSA8IGlvcy0+bGF5b3V0LT5ncm91cF93aWR0aDsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHRpLm1heF9kZXZzOyArK2kpIHsKIAkJc3RydWN0IGV4b2ZzX3RydW5jX2F0dHIgKnNpemVfYXR0ciA9ICZzaXplX2F0dHJzW2ldOwogCQl1NjQgb2JqX3NpemU7CiAKLQkJaWYgKGkgPCBzaS5kZXYpCi0JCQlvYmpfc2l6ZSA9IHNpLm9ial9vZmZzZXQgKwotCQkJCQlpb3MtPmxheW91dC0+c3RyaXBlX3VuaXQgLSBzaS51bml0X29mZjsKLQkJZWxzZSBpZiAoaSA9PSBzaS5kZXYpCi0JCQlvYmpfc2l6ZSA9IHNpLm9ial9vZmZzZXQ7Ci0JCWVsc2UgLyogaSA+IHNpLmRldiAqLwotCQkJb2JqX3NpemUgPSBzaS5vYmpfb2Zmc2V0IC0gc2kudW5pdF9vZmY7CisJCWlmIChpIDwgdGkuZmlyc3RfZ3JvdXBfZGV2KQorCQkJb2JqX3NpemUgPSB0aS5wcmV2X2dyb3VwX29ial9vZmY7CisJCWVsc2UgaWYgKGkgPj0gdGkubmV4X2dyb3VwX2RldikKKwkJCW9ial9zaXplID0gdGkubmV4dF9ncm91cF9vYmpfb2ZmOworCQllbHNlIGlmIChpIDwgdGkuc2kuZGV2KSAvKiBkZXYgd2l0aGluIHRoaXMgZ3JvdXAgKi8KKwkJCW9ial9zaXplID0gdGkuc2kub2JqX29mZnNldCArCisJCQkJICAgICAgaW9zLT5sYXlvdXQtPnN0cmlwZV91bml0IC0gdGkuc2kudW5pdF9vZmY7CisJCWVsc2UgaWYgKGkgPT0gdGkuc2kuZGV2KQorCQkJb2JqX3NpemUgPSB0aS5zaS5vYmpfb2Zmc2V0OworCQllbHNlIC8qIGkgPiB0aS5kZXYgKi8KKwkJCW9ial9zaXplID0gdGkuc2kub2JqX29mZnNldCAtIHRpLnNpLnVuaXRfb2ZmOwogCiAJCXNpemVfYXR0ci0+bmV3c2l6ZSA9IGNwdV90b19iZTY0KG9ial9zaXplKTsKIAkJc2l6ZV9hdHRyLT5hdHRyID0gZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOwogCQlzaXplX2F0dHItPmF0dHIudmFsX3B0ciA9ICZzaXplX2F0dHItPm5ld3NpemU7CiAKKwkJT1JFX0RCR01TRygidHJ1bmMoMHglbGx4KSBvYmpfb2Zmc2V0PTB4JWxseCBkZXY9JWRcbiIsCisJCQkgICAgIF9MTFUoY29tcHMtPmNvbXBzLT5vYmouaWQpLCBfTExVKG9ial9zaXplKSwgaSk7CiAJCXJldCA9IF90cnVuY2F0ZV9taXJyb3JzKGlvcywgaSAqIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxLAogCQkJCQkmc2l6ZV9hdHRyLT5hdHRyKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlnb3RvIG91dDsKIAl9Ci0JcmV0ID0gZXhvZnNfaW9fZXhlY3V0ZShpb3MpOworCXJldCA9IG9yZV9pb19leGVjdXRlKGlvcyk7CiAKIG91dDoKIAlrZnJlZShzaXplX2F0dHJzKTsKLQlleG9mc19wdXRfaW9fc3RhdGUoaW9zKTsKKwlvcmVfcHV0X2lvX3N0YXRlKGlvcyk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0wob3JlX3RydW5jYXRlKTsKKworY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aCA9IEFUVFJfREVGKAorCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04sIE9TRF9BVFRSX09JX0xPR0lDQUxfTEVOR1RILCA4KTsKK0VYUE9SVF9TWU1CT0woZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL3BuZnMuaCBiL2ZzL2V4b2ZzL3BuZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUyZTk4OC4uMDAwMDAwMAotLS0gYS9mcy9leG9mcy9wbmZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5Ci0gKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgotICoKLSAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0KLS8qIEZJWE1FOiBSZW1vdmUgdGhpcyBmaWxlIG9uY2UgcG5mcyBoaXRzIG1haW5saW5lICovCi0KLSNpZm5kZWYgX19FWE9GU19QTkZTX0hfXwotI2RlZmluZSBfX0VYT0ZTX1BORlNfSF9fCi0KLSNpZiAhIGRlZmluZWQoX19QTkZTX09TRF9YRFJfSF9fKQotCi1lbnVtIHBuZnNfaW9tb2RlIHsKLQlJT01PREVfUkVBRCA9IDEsCi0JSU9NT0RFX1JXID0gMiwKLQlJT01PREVfQU5ZID0gMywKLX07Ci0KLS8qIExheW91dCBTdHJ1Y3R1cmUgKi8KLWVudW0gcG5mc19vc2RfcmFpZF9hbGdvcml0aG00IHsKLQlQTkZTX09TRF9SQUlEXzAJCT0gMSwKLQlQTkZTX09TRF9SQUlEXzQJCT0gMiwKLQlQTkZTX09TRF9SQUlEXzUJCT0gMywKLQlQTkZTX09TRF9SQUlEX1BRCT0gNCAgICAgLyogUmVlZC1Tb2xvbW9uIFArUSAqLwotfTsKLQotc3RydWN0IHBuZnNfb3NkX2RhdGFfbWFwIHsKLQl1MzIJb2RtX251bV9jb21wczsKLQl1NjQJb2RtX3N0cmlwZV91bml0OwotCXUzMglvZG1fZ3JvdXBfd2lkdGg7Ci0JdTMyCW9kbV9ncm91cF9kZXB0aDsKLQl1MzIJb2RtX21pcnJvcl9jbnQ7Ci0JdTMyCW9kbV9yYWlkX2FsZ29yaXRobTsKLX07Ci0KLSNlbmRpZiAvKiAhIGRlZmluZWQoX19QTkZTX09TRF9YRFJfSF9fKSAqLwotCi0jZW5kaWYgLyogX19FWE9GU19QTkZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvc3VwZXIuYyBiL2ZzL2V4b2ZzL3N1cGVyLmMKaW5kZXggYzU3YmVkZC4uMjc0ODk0MCAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvc3VwZXIuYworKysgYi9mcy9leG9mcy9zdXBlci5jCkBAIC00MCw2ICs0MCw4IEBACiAKICNpbmNsdWRlICJleG9mcy5oIgogCisjZGVmaW5lIEVYT0ZTX0RCR01TRzIoTS4uLikgZG8ge30gd2hpbGUgKDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1PVU5UIE9QVElPTlMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIwOCwxMCArMjEwLDQ4IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNVUEVSQkxPQ0sgRlVOQ1RJT05TCisgKiBTb21lIG9zZCBoZWxwZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXhvZnNfc29wczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXhvZnNfZXhwb3J0X29wczsKK3ZvaWQgZXhvZnNfbWFrZV9jcmVkZW50aWFsKHU4IGNyZWRfYVtPU0RfQ0FQX0xFTl0sIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmopCit7CisJb3NkX3NlY19pbml0X25vc2VjX2RvYWxsX2NhcHMoY3JlZF9hLCBvYmosIGZhbHNlLCB0cnVlKTsKK30KKworc3RhdGljIGludCBleG9mc19yZWFkX2tlcm4oc3RydWN0IG9zZF9kZXYgKm9kLCB1OCAqY3JlZCwgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwKKwkJICAgIHU2NCBvZmZzZXQsIHZvaWQgKnAsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qob2QsIEdGUF9LRVJORUwpOworLyoJc3RydWN0IG9zZF9zZW5zZV9pbmZvIG9zaSA9IHsua2V5ID0gMH07Ki8KKwlpbnQgcmV0OworCisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfREJHTVNHKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gb3NkX3JlcV9yZWFkX2tlcm4ob3IsIG9iaiwgb2Zmc2V0LCBwLCBsZW5ndGgpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0RCR01TRygiJXM6IG9zZF9yZXFfcmVhZF9rZXJuIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb3NkX2ZpbmFsaXplX3JlcXVlc3Qob3IsIDAsIGNyZWQsIE5VTEwpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGVkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9zZF9leGVjdXRlX3JlcXVlc3Qob3IpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlFWE9GU19EQkdNU0coIm9zZF9leGVjdXRlX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKKwkvKiBvc2RfcmVxX2RlY29kZV9zZW5zZShvciwgcmV0KTsgKi8KKworb3V0OgorCW9zZF9lbmRfcmVxdWVzdChvcik7CisJRVhPRlNfREJHTVNHMigicmVhZF9rZXJuKDB4JWxseCkgb2Zmc2V0PTB4JWxseCAiCisJCSAgICAgICJsZW5ndGg9MHglbGx4IGRldj0lcCByZXQ9PiVkXG4iLAorCQkgICAgICBfTExVKG9iai0+aWQpLCBfTExVKG9mZnNldCksIF9MTFUobGVuZ3RoKSwgb2QsIHJldCk7CisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvc2RfYXR0ciBnX2F0dHJfc2Jfc3RhdHMgPSBBVFRSX0RFRigKIAlFWE9GU19BUEFHRV9TQl9EQVRBLApAQCAtMjIzLDIxICsyNjMsMTkgQEAKIAlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cnNbXSA9IHsKIAkJWzBdID0gZ19hdHRyX3NiX3N0YXRzLAogCX07Ci0Jc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3M7CisJc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zOwogCWludCByZXQ7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKKwlyZXQgPSBvcmVfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJnNiaS0+Y29tcHMsICZpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0VSUigiJXM6IGV4b2ZzX2dldF9pb19zdGF0ZSBmYWlsZWQuXG4iLCBfX2Z1bmNfXyk7CisJCUVYT0ZTX0VSUigiJXM6IG9yZV9nZXRfaW9fc3RhdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlvcy0+Y3JlZCA9IHNiaS0+c19jcmVkOwotCiAJaW9zLT5pbl9hdHRyID0gYXR0cnM7CiAJaW9zLT5pbl9hdHRyX2xlbiA9IEFSUkFZX1NJWkUoYXR0cnMpOwogCi0JcmV0ID0gZXhvZnNfc2JpX3JlYWQoaW9zKTsKKwlyZXQgPSBvcmVfcmVhZChpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCUVYT0ZTX0VSUigiRXJyb3IgcmVhZGluZyBzdXBlcl9ibG9jayBzdGF0cyA9PiAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yNjQsMTMgKzMwMiwxMyBAQAogCX0KIAogb3V0OgotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBzdGF0c19kb25lKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB2b2lkICpwKQorc3RhdGljIHZvaWQgc3RhdHNfZG9uZShzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCiB7Ci0JZXhvZnNfcHV0X2lvX3N0YXRlKGlvcyk7CisJb3JlX3B1dF9pb19zdGF0ZShpb3MpOwogCS8qIEdvb2QgdGhhbmtzIG5vdGhpbmcgdG8gZG8gYW55bW9yZSAqLwogfQogCkBAIC0yODAsMTIgKzMxOCwxMiBAQAogCXN0cnVjdCBvc2RfYXR0ciBhdHRyc1tdID0gewogCQlbMF0gPSBnX2F0dHJfc2Jfc3RhdHMsCiAJfTsKLQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvczsKKwlzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3M7CiAJaW50IHJldDsKIAotCXJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZpb3MpOworCXJldCA9IG9yZV9nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmc2JpLT5jb21wcywgJmlvcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJRVhPRlNfRVJSKCIlczogZXhvZnNfZ2V0X2lvX3N0YXRlIGZhaWxlZC5cbiIsIF9fZnVuY19fKTsKKwkJRVhPRlNfRVJSKCIlczogb3JlX2dldF9pb19zdGF0ZSBmYWlsZWQuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yOTMsMjEgKzMzMSwyNyBAQAogCXNiaS0+c19lc3Muc19udW1maWxlcyA9IGNwdV90b19sZTY0KHNiaS0+c19udW1maWxlcyk7CiAJYXR0cnNbMF0udmFsX3B0ciA9ICZzYmktPnNfZXNzOwogCi0JaW9zLT5jcmVkID0gc2JpLT5zX2NyZWQ7CisKIAlpb3MtPmRvbmUgPSBzdGF0c19kb25lOwogCWlvcy0+cHJpdmF0ZSA9IHNiaTsKIAlpb3MtPm91dF9hdHRyID0gYXR0cnM7CiAJaW9zLT5vdXRfYXR0cl9sZW4gPSBBUlJBWV9TSVpFKGF0dHJzKTsKIAotCXJldCA9IGV4b2ZzX3NiaV93cml0ZShpb3MpOworCXJldCA9IG9yZV93cml0ZShpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0VSUigiJXM6IGV4b2ZzX3NiaV93cml0ZSBmYWlsZWQuXG4iLCBfX2Z1bmNfXyk7Ci0JCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCQlFWE9GU19FUlIoIiVzOiBvcmVfd3JpdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOworCQlvcmVfcHV0X2lvX3N0YXRlKGlvcyk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU1VQRVJCTE9DSyBGVU5DVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleG9mc19zb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBleG9mc19leHBvcnRfb3BzOworCiAvKgogICogV3JpdGUgdGhlIHN1cGVyYmxvY2sgdG8gdGhlIE9TRAogICovCkBAIC0zMTUsNyArMzU5LDkgQEAKIHsKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOwogCXN0cnVjdCBleG9mc19mc2NiICpmc2NiOwotCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOworCXN0cnVjdCBvcmVfY29tcCBvbmVfY29tcDsKKwlzdHJ1Y3Qgb3JlX2NvbXBvbmVudHMgY29tcHM7CisJc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zOwogCWludCByZXQgPSAtRU5PTUVNOwogCiAJZnNjYiA9IGttYWxsb2Moc2l6ZW9mKCpmc2NiKSwgR0ZQX0tFUk5FTCk7CkBAIC0zMzEsNyArMzc3LDEwIEBACiAJICogdmVyc2lvbikuIE90aGVyd2lzZSB0aGUgZXhvZnNfZnNjYiBpcyByZWFkLW9ubHkgZnJvbSBta2ZzIHRpbWUuIEFsbAogCSAqIHRoZSB3cml0ZWFibGUgaW5mbyBpcyBzZXQgaW4gZXhvZnNfc2JpX3dyaXRlX3N0YXRzKCkgYWJvdmUuCiAJICovCi0JcmV0ID0gZXhvZnNfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJmlvcyk7CisKKwlleG9mc19pbml0X2NvbXBzKCZjb21wcywgJm9uZV9jb21wLCBzYmksIEVYT0ZTX1NVUEVSX0lEKTsKKworCXJldCA9IG9yZV9nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmY29tcHMsICZpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKQogCQlnb3RvIG91dDsKIApAQCAtMzQ1LDE0ICszOTQsMTIgQEAKIAlmc2NiLT5zX25ld2ZzID0gMDsKIAlmc2NiLT5zX3ZlcnNpb24gPSBFWE9GU19GU0NCX1ZFUjsKIAotCWlvcy0+b2JqLmlkID0gRVhPRlNfU1VQRVJfSUQ7CiAJaW9zLT5vZmZzZXQgPSAwOwogCWlvcy0+a2Vybl9idWZmID0gZnNjYjsKLQlpb3MtPmNyZWQgPSBzYmktPnNfY3JlZDsKIAotCXJldCA9IGV4b2ZzX3NiaV93cml0ZShpb3MpOworCXJldCA9IG9yZV93cml0ZShpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKQotCQlFWE9GU19FUlIoIiVzOiBleG9mc19zYmlfd3JpdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOworCQlFWE9GU19FUlIoIiVzOiBvcmVfd3JpdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOwogCWVsc2UKIAkJc2ItPnNfZGlydCA9IDA7CiAKQEAgLTM2MCw3ICs0MDcsNyBAQAogCXVubG9ja19zdXBlcihzYik7CiBvdXQ6CiAJRVhPRlNfREJHTVNHKCJzX25leHRpZD0weCVsbHggcmV0PSVkXG4iLCBfTExVKHNiaS0+c19uZXh0aWQpLCByZXQpOwotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAlrZnJlZShmc2NiKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzg0LDE1ICs0MzEsMTcgQEAKIAogdm9pZCBleG9mc19mcmVlX3NiaShzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpKQogewotCXdoaWxlIChzYmktPmxheW91dC5zX251bWRldnMpIHsKLQkJaW50IGkgPSAtLXNiaS0+bGF5b3V0LnNfbnVtZGV2czsKLQkJc3RydWN0IG9zZF9kZXYgKm9kID0gc2JpLT5sYXlvdXQuc19vZHNbaV07CisJd2hpbGUgKHNiaS0+Y29tcHMubnVtZGV2cykgeworCQlpbnQgaSA9IC0tc2JpLT5jb21wcy5udW1kZXZzOworCQlzdHJ1Y3Qgb3NkX2RldiAqb2QgPSBzYmktPmNvbXBzLm9kc1tpXTsKIAogCQlpZiAob2QpIHsKLQkJCXNiaS0+bGF5b3V0LnNfb2RzW2ldID0gTlVMTDsKKwkJCXNiaS0+Y29tcHMub2RzW2ldID0gTlVMTDsKIAkJCW9zZHVsZF9wdXRfZGV2aWNlKG9kKTsKIAkJfQogCX0KKwlpZiAoc2JpLT5jb21wcy5vZHMgIT0gc2JpLT5fbWluX29uZV9kZXYpCisJCWtmcmVlKHNiaS0+Y29tcHMub2RzKTsKIAlrZnJlZShzYmkpOwogfQogCkBAIC00MTksOCArNDY4LDggQEAKIAkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiAJfQogCi0JX2V4b2ZzX3ByaW50X2RldmljZSgiVW5tb3VudGluZyIsIE5VTEwsIHNiaS0+bGF5b3V0LnNfb2RzWzBdLAotCQkJICAgIHNiaS0+bGF5b3V0LnNfcGlkKTsKKwlfZXhvZnNfcHJpbnRfZGV2aWNlKCJVbm1vdW50aW5nIiwgTlVMTCwgc2JpLT5jb21wcy5vZHNbMF0sCisJCQkgICAgc2JpLT5vbmVfY29tcC5vYmoucGFydGl0aW9uKTsKIAogCWJkaV9kZXN0cm95KCZzYmktPmJkaSk7CiAJZXhvZnNfZnJlZV9zYmkoc2JpKTsKQEAgLTUwMSwxMCArNTUwLDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCUVYT0ZTX0RCR01TRygiZXhvZnM6IGxheW91dDogIgorCQkibnVtX2NvbXBzPSV1IHN0cmlwZV91bml0PTB4JXggZ3JvdXBfd2lkdGg9JXUgIgorCQkiZ3JvdXBfZGVwdGg9MHglbGx4IG1pcnJvcnNfcDE9JXUgcmFpZF9hbGdvcml0aG09JXVcbiIsCisJCW51bWRldnMsCisJCXNiaS0+bGF5b3V0LnN0cmlwZV91bml0LAorCQlzYmktPmxheW91dC5ncm91cF93aWR0aCwKKwkJX0xMVShzYmktPmxheW91dC5ncm91cF9kZXB0aCksCisJCXNiaS0+bGF5b3V0Lm1pcnJvcnNfcDEsCisJCXNiaS0+ZGF0YV9tYXAub2RtX3JhaWRfYWxnb3JpdGhtKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIF9fcmFfcGFnZXMoc3RydWN0IGV4b2ZzX2xheW91dCAqbGF5b3V0KQorc3RhdGljIHVuc2lnbmVkIF9fcmFfcGFnZXMoc3RydWN0IG9yZV9sYXlvdXQgKmxheW91dCkKIHsKIAljb25zdCB1bnNpZ25lZCBfTUlOX1JBID0gMzI7IC8qIG1pbiAxMjhLIHJlYWQtYWhlYWQgKi8KIAl1bnNpZ25lZCByYV9wYWdlcyA9IGxheW91dC0+Z3JvdXBfd2lkdGggKiBsYXlvdXQtPnN0cmlwZV91bml0IC8KQEAgLTU0NywxMyArNjA1LDExIEBACiAJcmV0dXJuICEob2RpLT5zeXN0ZW1pZF9sZW4gfHwgb2RpLT5vc2RuYW1lX2xlbik7CiB9CiAKLXN0YXRpYyBpbnQgZXhvZnNfcmVhZF9sb29rdXBfZGV2X3RhYmxlKHN0cnVjdCBleG9mc19zYl9pbmZvICoqcHNiaSwKK3N0YXRpYyBpbnQgZXhvZnNfcmVhZF9sb29rdXBfZGV2X3RhYmxlKHN0cnVjdCBleG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgIHN0cnVjdCBvc2RfZGV2ICpmc2NiX29kLAogCQkJCSAgICAgICB1bnNpZ25lZCB0YWJsZV9jb3VudCkKIHsKLQlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gKnBzYmk7Ci0Jc3RydWN0IG9zZF9kZXYgKmZzY2Jfb2Q7Ci0Jc3RydWN0IG9zZF9vYmpfaWQgb2JqID0gey5wYXJ0aXRpb24gPSBzYmktPmxheW91dC5zX3BpZCwKLQkJCQkgLmlkID0gRVhPRlNfREVWVEFCTEVfSUR9OworCXN0cnVjdCBvcmVfY29tcCBjb21wOwogCXN0cnVjdCBleG9mc19kZXZpY2VfdGFibGUgKmR0OwogCXVuc2lnbmVkIHRhYmxlX2J5dGVzID0gdGFibGVfY291bnQgKiBzaXplb2YoZHQtPmR0X2Rldl90YWJsZVswXSkgKwogCQkJCQkgICAgIHNpemVvZigqZHQpOwpAQCAtNTY3LDEwICs2MjMsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZnNjYl9vZCA9IHNiaS0+bGF5b3V0LnNfb2RzWzBdOwotCXNiaS0+bGF5b3V0LnNfb2RzWzBdID0gTlVMTDsKLQlzYmktPmxheW91dC5zX251bWRldnMgPSAwOwotCXJldCA9IGV4b2ZzX3JlYWRfa2Vybihmc2NiX29kLCBzYmktPnNfY3JlZCwgJm9iaiwgMCwgZHQsIHRhYmxlX2J5dGVzKTsKKwlzYmktPmNvbXBzLm51bWRldnMgPSAwOworCisJY29tcC5vYmoucGFydGl0aW9uID0gc2JpLT5vbmVfY29tcC5vYmoucGFydGl0aW9uOworCWNvbXAub2JqLmlkID0gRVhPRlNfREVWVEFCTEVfSUQ7CisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKGNvbXAuY3JlZCwgJmNvbXAub2JqKTsKKworCXJldCA9IGV4b2ZzX3JlYWRfa2Vybihmc2NiX29kLCBjb21wLmNyZWQsICZjb21wLm9iaiwgMCwgZHQsCisJCQkgICAgICB0YWJsZV9ieXRlcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJRVhPRlNfRVJSKCJFUlJPUjogcmVhZGluZyBkZXZpY2UgdGFibGVcbiIpOwogCQlnb3RvIG91dDsKQEAgLTU4OCwxNiArNjQ4LDE4IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKGxpa2VseShudW1kZXZzID4gMSkpIHsKLQkJdW5zaWduZWQgc2l6ZSA9IG51bWRldnMgKiBzaXplb2Yoc2JpLT5sYXlvdXQuc19vZHNbMF0pOworCQl1bnNpZ25lZCBzaXplID0gbnVtZGV2cyAqIHNpemVvZihzYmktPmNvbXBzLm9kc1swXSk7CiAKLQkJc2JpID0ga3JlYWxsb2Moc2JpLCBzaXplb2YoKnNiaSkgKyBzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHVubGlrZWx5KCFzYmkpKSB7CisJCS8qIFR3aWNlIGJpZ2dlciB0YWJsZTogU2VlIGV4b2ZzX2luaXRfY29tcHMoKSBhbmQgYmVsb3cKKwkJICogY29tbWVudAorCQkgKi8KKwkJc2JpLT5jb21wcy5vZHMgPSBremFsbG9jKHNpemUgKyBzaXplIC0gMSwgR0ZQX0tFUk5FTCk7CisJCWlmICh1bmxpa2VseSghc2JpLT5jb21wcy5vZHMpKSB7CisJCQlFWE9GU19FUlIoIkVSUk9SOiBmYWlsZCBhbGxvY2F0aW5nIERldmljZSBhcnJheVslZF1cbiIsCisJCQkJICBudW1kZXZzKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQltZW1zZXQoJnNiaS0+bGF5b3V0LnNfb2RzWzFdLCAwLAotCQkgICAgICAgc2l6ZSAtIHNpemVvZihzYmktPmxheW91dC5zX29kc1swXSkpOwotCQkqcHNiaSA9IHNiaTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtZGV2czsgaSsrKSB7CkBAIC02MTksOCArNjgxLDggQEAKIAkJICogbGluZS4gV2UgYWx3YXlzIGtlZXAgdGhlbSBpbiBkZXZpY2UtdGFibGUgb3JkZXIuCiAJCSAqLwogCQlpZiAoZnNjYl9vZCAmJiBvc2R1bGRfZGV2aWNlX3NhbWUoZnNjYl9vZCwgJm9kaSkpIHsKLQkJCXNiaS0+bGF5b3V0LnNfb2RzW2ldID0gZnNjYl9vZDsKLQkJCSsrc2JpLT5sYXlvdXQuc19udW1kZXZzOworCQkJc2JpLT5jb21wcy5vZHNbaV0gPSBmc2NiX29kOworCQkJKytzYmktPmNvbXBzLm51bWRldnM7CiAJCQlmc2NiX29kID0gTlVMTDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MzMsMTMgKzY5NSwxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzYmktPmxheW91dC5zX29kc1tpXSA9IG9kOwotCQkrK3NiaS0+bGF5b3V0LnNfbnVtZGV2czsKKwkJc2JpLT5jb21wcy5vZHNbaV0gPSBvZDsKKwkJKytzYmktPmNvbXBzLm51bWRldnM7CiAKIAkJLyogUmVhZCB0aGUgZnNjYiBvZiB0aGUgb3RoZXIgZGV2aWNlcyB0byBtYWtlIHN1cmUgdGhlIEZTCiAJCSAqIHBhcnRpdGlvbiBpcyB0aGVyZS4KIAkJICovCi0JCXJldCA9IGV4b2ZzX3JlYWRfa2VybihvZCwgc2JpLT5zX2NyZWQsICZvYmosIDAsICZmc2NiLAorCQlyZXQgPSBleG9mc19yZWFkX2tlcm4ob2QsIGNvbXAuY3JlZCwgJmNvbXAub2JqLCAwLCAmZnNjYiwKIAkJCQkgICAgICBzaXplb2YoZnNjYikpOwogCQlpZiAodW5saWtlbHkocmV0KSkgewogCQkJRVhPRlNfRVJSKCJFUlJPUjogTWFsZm9ybWVkIHBhcnRpY2lwYXRpbmcgZGV2aWNlICIKQEAgLTY1NiwxMyArNzE4LDIyIEBACiAKIG91dDoKIAlrZnJlZShkdCk7Ci0JaWYgKHVubGlrZWx5KCFyZXQgJiYgZnNjYl9vZCkpIHsKLQkJRVhPRlNfRVJSKAotCQkgICAgICAiRVJST1I6IEJhZCBkZXZpY2UtdGFibGUgY29udGFpbmVyIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0JCW9zZHVsZF9wdXRfZGV2aWNlKGZzY2Jfb2QpOwotCQlyZXQgPSAtRUlOVkFMOwotCX0KKwlpZiAobGlrZWx5KCFyZXQpKSB7CisJCXVuc2lnbmVkIG51bWRldnMgPSBzYmktPmNvbXBzLm51bWRldnM7CiAKKwkJaWYgKHVubGlrZWx5KGZzY2Jfb2QpKSB7CisJCQlFWE9GU19FUlIoIkVSUk9SOiBCYWQgZGV2aWNlLXRhYmxlIGNvbnRhaW5lciBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQkJb3NkdWxkX3B1dF9kZXZpY2UoZnNjYl9vZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBleG9mcyByb3VuZC1yb2JpbnMgdGhlIGRldmljZSB0YWJsZSB2aWV3IGFjY29yZGluZyB0byBpbm9kZQorCQkgKiBudW1iZXIuIFdlIGhvbGQgYTogdHdpY2UgYmlnZ2VyIHRhYmxlIGhlbmNlIGlub2RlcyBjYW4gcG9pbnQKKwkJICogdG8gYW55IGRldmljZSBhbmQgaGF2ZSBhIHNlcXVlbnRpYWwgdmlldyBvZiB0aGUgdGFibGUKKwkJICogc3RhcnRpbmcgYXQgdGhpcyBkZXZpY2UuIFNlZSBleG9mc19pbml0X2NvbXBzKCkKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1kZXZzIC0gMTsgKytpKQorCQkJc2JpLT5jb21wcy5vZHNbaSArIG51bWRldnNdID0gc2JpLT5jb21wcy5vZHNbaV07CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3Niw3ICs3NDcsNyBAQAogCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7CS8qZXh0ZW5kZWQgaW5mbyAgICAgICAgICAgICAgICAgICovCiAJc3RydWN0IG9zZF9kZXYgKm9kOwkJLyogTWFzdGVyIGRldmljZSAgICAgICAgICAgICAgICAgKi8KIAlzdHJ1Y3QgZXhvZnNfZnNjYiBmc2NiOwkJLypvbi1kaXNrIHN1cGVyYmxvY2sgaW5mbyAgICAgICAgKi8KLQlzdHJ1Y3Qgb3NkX29ial9pZCBvYmo7CisJc3RydWN0IG9yZV9jb21wIGNvbXA7CiAJdW5zaWduZWQgdGFibGVfY291bnQ7CiAJaW50IHJldDsKIApAQCAtNjg0LDEwICs3NTUsNiBAQAogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGJkaV9zZXR1cF9hbmRfcmVnaXN0ZXIoJnNiaS0+YmRpLCAiZXhvZnMiLCBCRElfQ0FQX01BUF9DT1BZKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWVfYmRpOwotCiAJLyogdXNlIG1vdW50IG9wdGlvbnMgdG8gZmlsbCBzdXBlcmJsb2NrICovCiAJaWYgKG9wdHMtPmlzX29zZG5hbWUpIHsKIAkJc3RydWN0IG9zZF9kZXZfaW5mbyBvZGkgPSB7LnN5c3RlbWlkX2xlbiA9IDB9OwpAQCAtNjk1LDYgKzc2Miw4IEBACiAJCW9kaS5vc2RuYW1lX2xlbiA9IHN0cmxlbihvcHRzLT5kZXZfbmFtZSk7CiAJCW9kaS5vc2RuYW1lID0gKHU4ICopb3B0cy0+ZGV2X25hbWU7CiAJCW9kID0gb3NkdWxkX2luZm9fbG9va3VwKCZvZGkpOworCQlrZnJlZShvcHRzLT5kZXZfbmFtZSk7CisJCW9wdHMtPmRldl9uYW1lID0gTlVMTDsKIAl9IGVsc2UgewogCQlvZCA9IG9zZHVsZF9wYXRoX2xvb2t1cChvcHRzLT5kZXZfbmFtZSk7CiAJfQpAQCAtNzA5LDExICs3NzgsMTYgQEAKIAlzYmktPmxheW91dC5ncm91cF93aWR0aCA9IDE7CiAJc2JpLT5sYXlvdXQuZ3JvdXBfZGVwdGggPSAtMTsKIAlzYmktPmxheW91dC5ncm91cF9jb3VudCA9IDE7Ci0Jc2JpLT5sYXlvdXQuc19vZHNbMF0gPSBvZDsKLQlzYmktPmxheW91dC5zX251bWRldnMgPSAxOwotCXNiaS0+bGF5b3V0LnNfcGlkID0gb3B0cy0+cGlkOwogCXNiaS0+c190aW1lb3V0ID0gb3B0cy0+dGltZW91dDsKIAorCXNiaS0+b25lX2NvbXAub2JqLnBhcnRpdGlvbiA9IG9wdHMtPnBpZDsKKwlzYmktPm9uZV9jb21wLm9iai5pZCA9IDA7CisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKHNiaS0+b25lX2NvbXAuY3JlZCwgJnNiaS0+b25lX2NvbXAub2JqKTsKKwlzYmktPmNvbXBzLm51bWRldnMgPSAxOworCXNiaS0+Y29tcHMuc2luZ2xlX2NvbXAgPSBFQ19TSU5HTEVfQ09NUDsKKwlzYmktPmNvbXBzLmNvbXBzID0gJnNiaS0+b25lX2NvbXA7CisJc2JpLT5jb21wcy5vZHMgPSBzYmktPl9taW5fb25lX2RldjsKKwogCS8qIGZpbGwgaW4gc29tZSBvdGhlciBkYXRhIGJ5IGhhbmQgKi8KIAltZW1zZXQoc2ItPnNfaWQsIDAsIHNpemVvZihzYi0+c19pZCkpOwogCXN0cmNweShzYi0+c19pZCwgImV4b2ZzIik7CkBAIC03MjQsMTEgKzc5OCwxMSBAQAogCXNiLT5zX2JkZXYgPSBOVUxMOwogCXNiLT5zX2RldiA9IDA7CiAKLQlvYmoucGFydGl0aW9uID0gc2JpLT5sYXlvdXQuc19waWQ7Ci0Jb2JqLmlkID0gRVhPRlNfU1VQRVJfSUQ7Ci0JZXhvZnNfbWFrZV9jcmVkZW50aWFsKHNiaS0+c19jcmVkLCAmb2JqKTsKKwljb21wLm9iai5wYXJ0aXRpb24gPSBzYmktPm9uZV9jb21wLm9iai5wYXJ0aXRpb247CisJY29tcC5vYmouaWQgPSBFWE9GU19TVVBFUl9JRDsKKwlleG9mc19tYWtlX2NyZWRlbnRpYWwoY29tcC5jcmVkLCAmY29tcC5vYmopOwogCi0JcmV0ID0gZXhvZnNfcmVhZF9rZXJuKG9kLCBzYmktPnNfY3JlZCwgJm9iaiwgMCwgJmZzY2IsIHNpemVvZihmc2NiKSk7CisJcmV0ID0gZXhvZnNfcmVhZF9rZXJuKG9kLCBjb21wLmNyZWQsICZjb21wLm9iaiwgMCwgJmZzY2IsIHNpemVvZihmc2NiKSk7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCWdvdG8gZnJlZV9zYmk7CiAKQEAgLTc1Nyw5ICs4MzEsMTEgQEAKIAogCXRhYmxlX2NvdW50ID0gbGU2NF90b19jcHUoZnNjYi5zX2Rldl90YWJsZV9jb3VudCk7CiAJaWYgKHRhYmxlX2NvdW50KSB7Ci0JCXJldCA9IGV4b2ZzX3JlYWRfbG9va3VwX2Rldl90YWJsZSgmc2JpLCB0YWJsZV9jb3VudCk7CisJCXJldCA9IGV4b2ZzX3JlYWRfbG9va3VwX2Rldl90YWJsZShzYmksIG9kLCB0YWJsZV9jb3VudCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJZ290byBmcmVlX3NiaTsKKwl9IGVsc2UgeworCQlzYmktPmNvbXBzLm9kc1swXSA9IG9kOwogCX0KIAogCV9fc2JpX3JlYWRfc3RhdHMoc2JpKTsKQEAgLTc5MywyMCArODY5LDIwIEBACiAJCWdvdG8gZnJlZV9zYmk7CiAJfQogCi0JX2V4b2ZzX3ByaW50X2RldmljZSgiTW91bnRpbmciLCBvcHRzLT5kZXZfbmFtZSwgc2JpLT5sYXlvdXQuc19vZHNbMF0sCi0JCQkgICAgc2JpLT5sYXlvdXQuc19waWQpOwotCWlmIChvcHRzLT5pc19vc2RuYW1lKQotCQlrZnJlZShvcHRzLT5kZXZfbmFtZSk7CisJcmV0ID0gYmRpX3NldHVwX2FuZF9yZWdpc3Rlcigmc2JpLT5iZGksICJleG9mcyIsIEJESV9DQVBfTUFQX0NPUFkpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfREJHTVNHKCJGYWlsZWQgdG8gYmRpX3NldHVwX2FuZF9yZWdpc3RlclxuIik7CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJX2V4b2ZzX3ByaW50X2RldmljZSgiTW91bnRpbmciLCBvcHRzLT5kZXZfbmFtZSwgc2JpLT5jb21wcy5vZHNbMF0sCisJCQkgICAgc2JpLT5vbmVfY29tcC5vYmoucGFydGl0aW9uKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9zYmk6Ci0JYmRpX2Rlc3Ryb3koJnNiaS0+YmRpKTsKLWZyZWVfYmRpOgogCUVYT0ZTX0VSUigiVW5hYmxlIHRvIG1vdW50IGV4b2ZzIG9uICVzIHBpZD0weCVsbHggZXJyPSVkXG4iLAotCQkgIG9wdHMtPmRldl9uYW1lLCBzYmktPmxheW91dC5zX3BpZCwgcmV0KTsKKwkJICBvcHRzLT5kZXZfbmFtZSwgc2JpLT5vbmVfY29tcC5vYmoucGFydGl0aW9uLCByZXQpOwogCWV4b2ZzX2ZyZWVfc2JpKHNiaSk7Ci0JaWYgKG9wdHMtPmlzX29zZG5hbWUpCi0JCWtmcmVlKG9wdHMtPmRldl9uYW1lKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MzcsNyArOTEzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOwogCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOwotCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOworCXN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvczsKIAlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cnNbXSA9IHsKIAkJQVRUUl9ERUYoT1NEX0FQQUdFX1BBUlRJVElPTl9RVU9UQVMsCiAJCQlPU0RfQVRUUl9QUV9DQVBBQ0lUWV9RVU9UQSwgc2l6ZW9mKF9fYmU2NCkpLApAQCAtODQ2LDIxICs5MjIsMTggQEAKIAl9OwogCXVpbnQ2NF90IGNhcGFjaXR5ID0gVUxMT05HX01BWDsKIAl1aW50NjRfdCB1c2VkID0gVUxMT05HX01BWDsKLQl1aW50OF90IGNyZWRfYVtPU0RfQ0FQX0xFTl07CiAJaW50IHJldDsKIAotCXJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZpb3MpOworCXJldCA9IG9yZV9nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmc2JpLT5jb21wcywgJmlvcyk7CiAJaWYgKHJldCkgewotCQlFWE9GU19EQkdNU0coImV4b2ZzX2dldF9pb19zdGF0ZSBmYWlsZWQuXG4iKTsKKwkJRVhPRlNfREJHTVNHKCJvcmVfZ2V0X2lvX3N0YXRlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWV4b2ZzX21ha2VfY3JlZGVudGlhbChjcmVkX2EsICZpb3MtPm9iaik7Ci0JaW9zLT5jcmVkID0gc2JpLT5zX2NyZWQ7CiAJaW9zLT5pbl9hdHRyID0gYXR0cnM7CiAJaW9zLT5pbl9hdHRyX2xlbiA9IEFSUkFZX1NJWkUoYXR0cnMpOwogCi0JcmV0ID0gZXhvZnNfc2JpX3JlYWQoaW9zKTsKKwlyZXQgPSBvcmVfcmVhZChpb3MpOwogCWlmICh1bmxpa2VseShyZXQpKQogCQlnb3RvIG91dDsKIApAQCAtODg5LDcgKzk2Miw3IEBACiAJYnVmLT5mX25hbWVsZW4gPSBFWE9GU19OQU1FX0xFTjsKIAogb3V0OgotCWV4b2ZzX3B1dF9pb19zdGF0ZShpb3MpOworCW9yZV9wdXRfaW9fc3RhdGUoaW9zKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5jIGIvZnMvZXh0Mi9hY2wuYwppbmRleCA1MmMwNTM3Li4zNWQ2YTNjIDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5jCisrKyBiL2ZzL2V4dDIvYWNsLmMKQEAgLTE5NCwxMiArMTk0LDEwIEBACiAJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgogCQkJbmFtZV9pbmRleCA9IEVYVDJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzsKIAkJCWlmIChhY2wpIHsKLQkJCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0JCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKKwkJCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJmlub2RlLT5pX21vZGUpOwogCQkJCWlmIChlcnJvciA8IDApCiAJCQkJCXJldHVybiBlcnJvcjsKIAkJCQllbHNlIHsKLQkJCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCQkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCQkJCWlmIChlcnJvciA9PSAwKQpAQCAtMjUzLDE2ICsyNTEsMTQgQEAKIAkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewotCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CiAJCQllcnJvciA9IGV4dDJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwgYWNsKTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KLQkJZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKCZhY2wsIEdGUF9LRVJORUwsICZtb2RlKTsKKwkJZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKCZhY2wsIEdGUF9LRVJORUwsICZpbm9kZS0+aV9tb2RlKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKLQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlmIChlcnJvciA+IDApIHsKIAkJCS8qIFRoaXMgaXMgYW4gZXh0ZW5kZWQgQUNMICovCiAJCQllcnJvciA9IGV4dDJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9hY2wuYyBiL2ZzL2V4dDMvYWNsLmMKaW5kZXggNmMyOWJmMC4uMzA5MWY2MiAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuYworKysgYi9mcy9leHQzL2FjbC5jCkBAIC0xOTksMTIgKzE5OSwxMCBAQAogCQljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKIAkJCW5hbWVfaW5kZXggPSBFWFQzX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7CiAJCQlpZiAoYWNsKSB7Ci0JCQkJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwotCQkJCWVycm9yID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CisJCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZpbm9kZS0+aV9tb2RlKTsKIAkJCQlpZiAoZXJyb3IgPCAwKQogCQkJCQlyZXR1cm4gZXJyb3I7CiAJCQkJZWxzZSB7Ci0JCQkJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQkJCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCQkJCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAkJCQkJaWYgKGVycm9yID09IDApCkBAIC0yNjEsMTkgKzI1OSwxNiBAQAogCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkgJiYgYWNsKSB7Ci0JCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKLQogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQkJZXJyb3IgPSBleHQzX3NldF9hY2woaGFuZGxlLCBpbm9kZSwKIAkJCQkJICAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQllcnJvciA9IHBvc2l4X2FjbF9jcmVhdGUoJmFjbCwgR0ZQX05PRlMsICZtb2RlKTsKKwkJZXJyb3IgPSBwb3NpeF9hY2xfY3JlYXRlKCZhY2wsIEdGUF9OT0ZTLCAmaW5vZGUtPmlfbW9kZSk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlmIChlcnJvciA+IDApIHsKIAkJCS8qIFRoaXMgaXMgYW4gZXh0ZW5kZWQgQUNMICovCiAJCQllcnJvciA9IGV4dDNfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGFjbCk7CmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggNmUxOGEwYi4uNTU3MTcwOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMjIwOSw5ICsyMjA5LDExIEBACiAJCS8qCiAJCSAqIEZvciBub24tZmFzdCBzeW1saW5rcywgd2UganVzdCBhbGxvY2F0ZSBpbm9kZSBhbmQgcHV0IGl0IG9uCiAJCSAqIG9ycGhhbiBsaXN0IGluIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiA9PiB3ZSBuZWVkIGJpdG1hcCwKLQkJICogZ3JvdXAgZGVzY3JpcHRvciwgc2IsIGlub2RlIGJsb2NrLCBxdW90YSBibG9ja3MuCisJCSAqIGdyb3VwIGRlc2NyaXB0b3IsIHNiLCBpbm9kZSBibG9jaywgcXVvdGEgYmxvY2tzLCBhbmQKKwkJICogcG9zc2libHkgc2VsaW51eCB4YXR0ciBibG9ja3MuCiAJCSAqLwotCQljcmVkaXRzID0gNCArIEVYVDNfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYik7CisJCWNyZWRpdHMgPSA0ICsgRVhUM19NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCisJCQkgIEVYVDNfWEFUVFJfVFJBTlNfQkxPQ0tTOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhc3Qgc3ltbGluay4gV2UgaGF2ZSB0byBhZGQgZW50cnkgdG8gZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9mcy9leHQ0L01ha2VmaWxlIGIvZnMvZXh0NC9NYWtlZmlsZQppbmRleCAwNDEwOTQ2MC4uNTZmZDhmODYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvTWFrZWZpbGUKKysrIGIvZnMvZXh0NC9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIGV4dDQteQk6PSBiYWxsb2MubyBiaXRtYXAubyBkaXIubyBmaWxlLm8gZnN5bmMubyBpYWxsb2MubyBpbm9kZS5vIHBhZ2UtaW8ubyBcCiAJCWlvY3RsLm8gbmFtZWkubyBzdXBlci5vIHN5bWxpbmsubyBoYXNoLm8gcmVzaXplLm8gZXh0ZW50cy5vIFwKIAkJZXh0NF9qYmQyLm8gbWlncmF0ZS5vIG1iYWxsb2MubyBibG9ja192YWxpZGl0eS5vIG1vdmVfZXh0ZW50Lm8gXAotCQltbXAubworCQltbXAubyBpbmRpcmVjdC5vCiAKIGV4dDQtJChDT05GSUdfRVhUNF9GU19YQVRUUikJCSs9IHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3RydXN0ZWQubwogZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCkJKz0gYWNsLm8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IGRjYTJkMWQuLmE1YzI5YmIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtMTk4LDEyICsxOTgsMTAgQEAKIAljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKIAkJbmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzsKIAkJaWYgKGFjbCkgewotCQkJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwotCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKKwkJCWVycm9yID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmaW5vZGUtPmlfbW9kZSk7CiAJCQlpZiAoZXJyb3IgPCAwKQogCQkJCXJldHVybiBlcnJvcjsKIAkJCWVsc2UgewotCQkJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQkJCWlub2RlLT5pX2N0aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoaW5vZGUpOwogCQkJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAkJCQlpZiAoZXJyb3IgPT0gMCkKQEAgLTI1OSwxOSArMjU3LDE2IEBACiAJCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQogCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSAmJiBhY2wpIHsKLQkJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwotCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CiAJCQllcnJvciA9IGV4dDRfc2V0X2FjbChoYW5kbGUsIGlub2RlLAogCQkJCQkgICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCWVycm9yID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfTk9GUywgJm1vZGUpOworCQllcnJvciA9IHBvc2l4X2FjbF9jcmVhdGUoJmFjbCwgR0ZQX05PRlMsICZpbm9kZS0+aV9tb2RlKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKIAotCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJaWYgKGVycm9yID4gMCkgewogCQkJLyogVGhpcyBpcyBhbiBleHRlbmRlZCBBQ0wgKi8KIAkJCWVycm9yID0gZXh0NF9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IDI2NGY2OTQuLmY4MjI0YWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNjIwLDMgKzYyMCw1MSBAQAogCiB9CiAKKy8qKgorICoJZXh0NF9pbm9kZV90b19nb2FsX2Jsb2NrIC0gcmV0dXJuIGEgaGludCBmb3IgYmxvY2sgYWxsb2NhdGlvbgorICoJQGlub2RlOiBpbm9kZSBmb3IgYmxvY2sgYWxsb2NhdGlvbgorICoKKyAqCVJldHVybiB0aGUgaWRlYWwgbG9jYXRpb24gdG8gc3RhcnQgYWxsb2NhdGluZyBibG9ja3MgZm9yIGEKKyAqCW5ld2x5IGNyZWF0ZWQgaW5vZGUuCisgKi8KK2V4dDRfZnNibGtfdCBleHQ0X2lub2RlX3RvX2dvYWxfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CisJZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwOworCWV4dDRfZ3JwYmxrX3QgY29sb3VyOworCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShFWFQ0X1NCKGlub2RlLT5pX3NiKSk7CisJZXh0NF9mc2Jsa190IGJnX3N0YXJ0OworCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOworCisJYmxvY2tfZ3JvdXAgPSBlaS0+aV9ibG9ja19ncm91cDsKKwlpZiAoZmxleF9zaXplID49IEVYVDRfRkxFWF9TSVpFX0RJUl9BTExPQ19TQ0hFTUUpIHsKKwkJLyoKKwkJICogSWYgdGhlcmUgYXJlIGF0IGxlYXN0IEVYVDRfRkxFWF9TSVpFX0RJUl9BTExPQ19TQ0hFTUUKKwkJICogYmxvY2sgZ3JvdXBzIHBlciBmbGV4Z3JvdXAsIHJlc2VydmUgdGhlIGZpcnN0IGJsb2NrCisJCSAqIGdyb3VwIGZvciBkaXJlY3RvcmllcyBhbmQgc3BlY2lhbCBmaWxlcy4gIFJlZ3VsYXIKKwkJICogZmlsZXMgd2lsbCBzdGFydCBhdCB0aGUgc2Vjb25kIGJsb2NrIGdyb3VwLiAgVGhpcworCQkgKiB0ZW5kcyB0byBzcGVlZCB1cCBkaXJlY3RvcnkgYWNjZXNzIGFuZCBpbXByb3ZlcworCQkgKiBmc2NrIHRpbWVzLgorCQkgKi8KKwkJYmxvY2tfZ3JvdXAgJj0gfihmbGV4X3NpemUtMSk7CisJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQkJYmxvY2tfZ3JvdXArKzsKKwl9CisJYmdfc3RhcnQgPSBleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKGlub2RlLT5pX3NiLCBibG9ja19ncm91cCk7CisJbGFzdF9ibG9jayA9IGV4dDRfYmxvY2tzX2NvdW50KEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzKSAtIDE7CisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBkZWxheWVkIGFsbG9jYXRpb24sIHdlIGRvbid0IG5lZWQgdGFrZQorCSAqIGNvbG91ciBpbnRvIGFjY291bnQuCisJICovCisJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBERUxBTExPQykpCisJCXJldHVybiBiZ19zdGFydDsKKworCWlmIChiZ19zdGFydCArIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikgPD0gbGFzdF9ibG9jaykKKwkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqCisJCQkoRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSAvIDE2KTsKKwllbHNlCisJCWNvbG91ciA9IChjdXJyZW50LT5waWQgJSAxNikgKiAoKGxhc3RfYmxvY2sgLSBiZ19zdGFydCkgLyAxNik7CisJcmV0dXJuIGJnX3N0YXJ0ICsgY29sb3VyOworfQorCmRpZmYgLS1naXQgYS9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMgYi9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMKaW5kZXggZmFjOTBmMy4uOGVmYjJmMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jCisrKyBiL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYwpAQCAtMjQ2LDMgKzI0NiwyNCBAQAogCXJldHVybiAxOwogfQogCitpbnQgZXh0NF9jaGVja19ibG9ja3JlZihjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsCisJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX2xlMzIgKnAsIHVuc2lnbmVkIGludCBtYXgpCit7CisJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXM7CisJX19sZTMyICpicmVmID0gcDsKKwl1bnNpZ25lZCBpbnQgYmxrOworCisJd2hpbGUgKGJyZWYgPCBwK21heCkgeworCQlibGsgPSBsZTMyX3RvX2NwdSgqYnJlZisrKTsKKwkJaWYgKGJsayAmJgorCQkgICAgdW5saWtlbHkoIWV4dDRfZGF0YV9ibG9ja192YWxpZChFWFQ0X1NCKGlub2RlLT5pX3NiKSwKKwkJCQkJCSAgICBibGssIDEpKSkgeworCQkJZXMtPnNfbGFzdF9lcnJvcl9ibG9jayA9IGNwdV90b19sZTY0KGJsayk7CisJCQlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgYmxrLAorCQkJCQkgImludmFsaWQgYmxvY2siKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGZhNDRkZjguLmI3ZDdiZDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xNzUsNiArMTc1LDcgQEAKICAqLwogI2RlZmluZQlFWFQ0X0lPX0VORF9VTldSSVRURU4JMHgwMDAxCiAjZGVmaW5lIEVYVDRfSU9fRU5EX0VSUk9SCTB4MDAwMgorI2RlZmluZSBFWFQ0X0lPX0VORF9RVUVVRUQJMHgwMDA0CiAKIHN0cnVjdCBleHQ0X2lvX3BhZ2UgewogCXN0cnVjdCBwYWdlCSpwX3BhZ2U7CkBAIC01MjYsNiArNTI3LDcgQEAKICNkZWZpbmUgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQQkweDAwMDEKICNkZWZpbmUgRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQJCTB4MDAwMgogI2RlZmluZSBFWFQ0X0ZSRUVfQkxPQ0tTX1ZBTElEQVRFRAkweDAwMDQKKyNkZWZpbmUgRVhUNF9GUkVFX0JMT0NLU19OT19RVU9UX1VQREFURQkweDAwMDgKIAogLyoKICAqIGlvY3RsIGNvbW1hbmRzCkBAIC05MzksNiArOTQxLDggQEAKICNkZWZpbmUgZXh0NF9maW5kX25leHRfemVyb19iaXQJCWZpbmRfbmV4dF96ZXJvX2JpdF9sZQogI2RlZmluZSBleHQ0X2ZpbmRfbmV4dF9iaXQJCWZpbmRfbmV4dF9iaXRfbGUKIAorZXh0ZXJuIHZvaWQgZXh0NF9zZXRfYml0cyh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7CisKIC8qCiAgKiBNYXhpbWFsIG1vdW50IGNvdW50cyBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtIGNoZWNrcwogICovCkBAIC0xMTI2LDcgKzExMzAsOCBAQAogCXN0cnVjdCBqb3VybmFsX3MgKnNfam91cm5hbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOwogCXN0cnVjdCBtdXRleCBzX29ycGhhbl9sb2NrOwotCXN0cnVjdCBtdXRleCBzX3Jlc2l6ZV9sb2NrOworCXVuc2lnbmVkIGxvbmcgc19yZXNpemVfZmxhZ3M7CQkvKiBGbGFncyBpbmRpY2F0aW5nIGlmIHRoZXJlCisJCQkJCQkgICBpcyBhIHJlc2l6ZXIgKi8KIAl1bnNpZ25lZCBsb25nIHNfY29tbWl0X2ludGVydmFsOwogCXUzMiBzX21heF9iYXRjaF90aW1lOwogCXUzMiBzX21pbl9iYXRjaF90aW1lOwpAQCAtMTIxNCw2ICsxMjE5LDkgQEAKIAogCS8qIEtlcm5lbCB0aHJlYWQgZm9yIG11bHRpcGxlIG1vdW50IHByb3RlY3Rpb24gKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNfbW1wX3RzazsKKworCS8qIHJlY29yZCB0aGUgbGFzdCBtaW5sZW4gd2hlbiBGSVRSSU0gaXMgY2FsbGVkLiAqLworCWF0b21pY190IHNfbGFzdF90cmltX21pbmJsa3M7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQ0X3NiX2luZm8gKkVYVDRfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTE3NDMsNiArMTc1MSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmRlc2MpOwogI2RlZmluZSBleHQ0X2ZyZWVfYmxvY2tzX2FmdGVyX2luaXQoc2IsIGdyb3VwLCBkZXNjKQkJCVwKIAkJZXh0NF9pbml0X2Jsb2NrX2JpdG1hcChzYiwgTlVMTCwgZ3JvdXAsIGRlc2MpCitleHQ0X2ZzYmxrX3QgZXh0NF9pbm9kZV90b19nb2FsX2Jsb2NrKHN0cnVjdCBpbm9kZSAqKTsKIAogLyogZGlyLmMgKi8KIGV4dGVybiBpbnQgX19leHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgc3RydWN0IGlub2RlICosCkBAIC0xNzkzLDcgKzE4MDIsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBleHQ0X21iX2FkZF9ncm91cGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJZXh0NF9ncm91cF90IGksIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmRlc2MpOwotZXh0ZXJuIHZvaWQgZXh0NF9hZGRfZ3JvdXBibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKK2V4dGVybiBpbnQgZXh0NF9ncm91cF9hZGRfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJZXh0NF9mc2Jsa190IGJsb2NrLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGV4dGVybiBpbnQgZXh0NF90cmltX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnN0cmltX3JhbmdlICopOwogCkBAIC0xODM0LDYgKzE4NDMsMTcgQEAKIGV4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGV4dDRfZGFfdXBkYXRlX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJaW50IHVzZWQsIGludCBxdW90YV9jbGFpbSk7CisKKy8qIGluZGlyZWN0LmMgKi8KK2V4dGVybiBpbnQgZXh0NF9pbmRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKTsKK2V4dGVybiBzc2l6ZV90IGV4dDRfaW5kX2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MpOworZXh0ZXJuIGludCBleHQ0X2luZF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBsYmxvY2spOworZXh0ZXJuIGludCBleHQ0X2luZF90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5yYmxvY2tzLCBpbnQgY2h1bmspOworZXh0ZXJuIHZvaWQgZXh0NF9pbmRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7CisKIC8qIGlvY3RsLmMgKi8KIGV4dGVybiBsb25nIGV4dDRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBsb25nIGV4dDRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CkBAIC0xODU1LDYgKzE4NzUsOSBAQAogCQkJCWV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7CiAKIC8qIHN1cGVyLmMgKi8KK2V4dGVybiB2b2lkICpleHQ0X2t2bWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7CitleHRlcm4gdm9pZCAqZXh0NF9rdnphbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIHZvaWQgZXh0NF9rdmZyZWUodm9pZCAqcHRyKTsKIGV4dGVybiB2b2lkIF9fZXh0NF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgY29uc3QgY2hhciAqLCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOwpAQCAtMjA2NywxMSArMjA5MCwxOSBAQAogCQkJCQkgKiA1IGZyZWUgOC1ibG9jayByZWdpb25zLiAqLwogfTsKIAotI2RlZmluZSBFWFQ0X0dST1VQX0lORk9fTkVFRF9JTklUX0JJVAkwCisjZGVmaW5lIEVYVDRfR1JPVVBfSU5GT19ORUVEX0lOSVRfQklUCQkwCisjZGVmaW5lIEVYVDRfR1JPVVBfSU5GT19XQVNfVFJJTU1FRF9CSVQJCTEKIAogI2RlZmluZSBFWFQ0X01CX0dSUF9ORUVEX0lOSVQoZ3JwKQlcCiAJKHRlc3RfYml0KEVYVDRfR1JPVVBfSU5GT19ORUVEX0lOSVRfQklULCAmKChncnApLT5iYl9zdGF0ZSkpKQogCisjZGVmaW5lIEVYVDRfTUJfR1JQX1dBU19UUklNTUVEKGdycCkJXAorCSh0ZXN0X2JpdChFWFQ0X0dST1VQX0lORk9fV0FTX1RSSU1NRURfQklULCAmKChncnApLT5iYl9zdGF0ZSkpKQorI2RlZmluZSBFWFQ0X01CX0dSUF9TRVRfVFJJTU1FRChncnApCVwKKwkoc2V0X2JpdChFWFQ0X0dST1VQX0lORk9fV0FTX1RSSU1NRURfQklULCAmKChncnApLT5iYl9zdGF0ZSkpKQorI2RlZmluZSBFWFQ0X01CX0dSUF9DTEVBUl9UUklNTUVEKGdycCkJXAorCShjbGVhcl9iaXQoRVhUNF9HUk9VUF9JTkZPX1dBU19UUklNTUVEX0JJVCwgJigoZ3JwKS0+YmJfc3RhdGUpKSkKKwogI2RlZmluZSBFWFQ0X01BWF9DT05URU5USU9OCQk4CiAjZGVmaW5lIEVYVDRfQ09OVEVOVElPTl9USFJFU0hPTEQJMgogCkBAIC0yMTIzLDYgKzIxNTQsMTkgQEAKIH0KIAogLyoKKyAqIEJsb2NrIHZhbGlkaXR5IGNoZWNraW5nCisgKi8KKyNkZWZpbmUgZXh0NF9jaGVja19pbmRpcmVjdF9ibG9ja3JlZihpbm9kZSwgYmgpCQkJCVwKKwlleHQ0X2NoZWNrX2Jsb2NrcmVmKF9fZnVuY19fLCBfX0xJTkVfXywgaW5vZGUsCQkJXAorCQkJICAgIChfX2xlMzIgKikoYmgpLT5iX2RhdGEsCQkJXAorCQkJICAgIEVYVDRfQUREUl9QRVJfQkxPQ0soKGlub2RlKS0+aV9zYikpCisKKyNkZWZpbmUgZXh0NF9pbmRfY2hlY2tfaW5vZGUoaW5vZGUpCQkJCQlcCisJZXh0NF9jaGVja19ibG9ja3JlZihfX2Z1bmNfXywgX19MSU5FX18sIGlub2RlLAkJCVwKKwkJCSAgICBFWFQ0X0koaW5vZGUpLT5pX2RhdGEsCQkJXAorCQkJICAgIEVYVDRfTkRJUl9CTE9DS1MpCisKKy8qCiAgKiBJbm9kZXMgYW5kIGZpbGVzIG9wZXJhdGlvbnMKICAqLwogCkBAIC0yMTUxLDYgKzIxOTUsOCBAQAogZXh0ZXJuIGludCBleHQ0X2RhdGFfYmxvY2tfdmFsaWQoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLAogCQkJCSBleHQ0X2ZzYmxrX3Qgc3RhcnRfYmxrLAogCQkJCSB1bnNpZ25lZCBpbnQgY291bnQpOworZXh0ZXJuIGludCBleHQ0X2NoZWNrX2Jsb2NrcmVmKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqLCBfX2xlMzIgKiwgdW5zaWduZWQgaW50KTsKIAogLyogZXh0ZW50cy5jICovCiBleHRlcm4gaW50IGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKik7CkBAIC0yMjMwLDYgKzIyNzYsMTAgQEAKIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOwogZXh0ZXJuIHN0cnVjdCBtdXRleCBleHQ0X19haW9fbXV0ZXhbRVhUNF9XUV9IQVNIX1NaXTsKIAorI2RlZmluZSBFWFQ0X1JFU0laSU5HCTAKK2V4dGVybiBpbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gdm9pZCBleHQ0X3Jlc2l6ZV9lbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfRVhUNF9IICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5oIGIvZnMvZXh0NC9leHQ0X2piZDIuaAppbmRleCBiYjg1NzU3Li41ODAyZmExIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5oCisrKyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmgKQEAgLTI4OSwxMCArMjg5LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQotCQlyZXR1cm4gMDsKIAlpZiAoRVhUNF9KT1VSTkFMKGlub2RlKSA9PSBOVUxMKQogCQlyZXR1cm4gMTsKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAwOwogCWlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9KT1VSTkFMX0RBVEEpKQogCQlyZXR1cm4gMDsKIAlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfV1JJVEVCQUNLX0RBVEEpCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IGY4MTVjYzguLjU3Y2Y1NjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0xMTQsMTIgKzExNCw2IEBACiAJCQkgICAgICBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKIAkJCSAgICAgIGV4dDRfbGJsa190IGJsb2NrKQogewotCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKLQlleHQ0X2ZzYmxrX3QgYmdfc3RhcnQ7Ci0JZXh0NF9mc2Jsa190IGxhc3RfYmxvY2s7Ci0JZXh0NF9ncnBibGtfdCBjb2xvdXI7Ci0JZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwOwotCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShFWFQ0X1NCKGlub2RlLT5pX3NiKSk7CiAJaW50IGRlcHRoOwogCiAJaWYgKHBhdGgpIHsKQEAgLTE2MSwzNiArMTU1LDcgQEAKIAl9CiAKIAkvKiBPSy4gdXNlIGlub2RlJ3MgZ3JvdXAgKi8KLQlibG9ja19ncm91cCA9IGVpLT5pX2Jsb2NrX2dyb3VwOwotCWlmIChmbGV4X3NpemUgPj0gRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRSkgewotCQkvKgotCQkgKiBJZiB0aGVyZSBhcmUgYXQgbGVhc3QgRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRQotCQkgKiBibG9jayBncm91cHMgcGVyIGZsZXhncm91cCwgcmVzZXJ2ZSB0aGUgZmlyc3QgYmxvY2sKLQkJICogZ3JvdXAgZm9yIGRpcmVjdG9yaWVzIGFuZCBzcGVjaWFsIGZpbGVzLiAgUmVndWxhcgotCQkgKiBmaWxlcyB3aWxsIHN0YXJ0IGF0IHRoZSBzZWNvbmQgYmxvY2sgZ3JvdXAuICBUaGlzCi0JCSAqIHRlbmRzIHRvIHNwZWVkIHVwIGRpcmVjdG9yeSBhY2Nlc3MgYW5kIGltcHJvdmVzCi0JCSAqIGZzY2sgdGltZXMuCi0JCSAqLwotCQlibG9ja19ncm91cCAmPSB+KGZsZXhfc2l6ZS0xKTsKLQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCQlibG9ja19ncm91cCsrOwotCX0KLQliZ19zdGFydCA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oaW5vZGUtPmlfc2IsIGJsb2NrX2dyb3VwKTsKLQlsYXN0X2Jsb2NrID0gZXh0NF9ibG9ja3NfY291bnQoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMpIC0gMTsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGRlbGF5ZWQgYWxsb2NhdGlvbiwgd2UgZG9uJ3QgbmVlZCB0YWtlCi0JICogY29sb3VyIGludG8gYWNjb3VudC4KLQkgKi8KLQlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERFTEFMTE9DKSkKLQkJcmV0dXJuIGJnX3N0YXJ0OwotCi0JaWYgKGJnX3N0YXJ0ICsgRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSA8PSBsYXN0X2Jsb2NrKQotCQljb2xvdXIgPSAoY3VycmVudC0+cGlkICUgMTYpICoKLQkJCShFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpIC8gMTYpOwotCWVsc2UKLQkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqICgobGFzdF9ibG9jayAtIGJnX3N0YXJ0KSAvIDE2KTsKLQlyZXR1cm4gYmdfc3RhcnQgKyBjb2xvdXIgKyBibG9jazsKKwlyZXR1cm4gZXh0NF9pbm9kZV90b19nb2FsX2Jsb2NrKGlub2RlKTsKIH0KIAogLyoKQEAgLTc3Niw2ICs3NDEsMTYgQEAKIAkJCQkgbG9naWNhbCwgbGUzMl90b19jcHUoY3VycC0+cF9pZHgtPmVpX2Jsb2NrKSk7CiAJCXJldHVybiAtRUlPOwogCX0KKworCWlmICh1bmxpa2VseShsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfZW50cmllcykKKwkJCSAgICAgPj0gbGUxNl90b19jcHUoY3VycC0+cF9oZHItPmVoX21heCkpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJlaF9lbnRyaWVzICVkID49IGVoX21heCAlZCEiLAorCQkJCSBsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfZW50cmllcyksCisJCQkJIGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9tYXgpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJbGVuID0gRVhUX01BWF9JTkRFWChjdXJwLT5wX2hkcikgLSBjdXJwLT5wX2lkeDsKIAlpZiAobG9naWNhbCA+IGxlMzJfdG9fY3B1KGN1cnAtPnBfaWR4LT5laV9ibG9jaykpIHsKIAkJLyogaW5zZXJ0IGFmdGVyICovCkBAIC04MDUsMTMgKzc4MCw2IEBACiAJZXh0NF9pZHhfc3RvcmVfcGJsb2NrKGl4LCBwdHIpOwogCWxlMTZfYWRkX2NwdSgmY3VycC0+cF9oZHItPmVoX2VudHJpZXMsIDEpOwogCi0JaWYgKHVubGlrZWx5KGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9lbnRyaWVzKQotCQkJICAgICA+IGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9tYXgpKSkgewotCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAotCQkJCSAibG9naWNhbCAlZCA9PSBlaV9ibG9jayAlZCEiLAotCQkJCSBsb2dpY2FsLCBsZTMyX3RvX2NwdShjdXJwLT5wX2lkeC0+ZWlfYmxvY2spKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQogCWlmICh1bmxpa2VseShpeCA+IEVYVF9MQVNUX0lOREVYKGN1cnAtPnBfaGRyKSkpIHsKIAkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwgIml4ID4gRVhUX0xBU1RfSU5ERVghIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMTQ0Niw4ICsxNDE0LDcgQEAKICAqIGV4dDRfZXh0X25leHRfbGVhZl9ibG9jazoKICAqIHJldHVybnMgZmlyc3QgYWxsb2NhdGVkIGJsb2NrIGZyb20gbmV4dCBsZWFmIG9yIEVYVF9NQVhfQkxPQ0tTCiAgKi8KLXN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9uZXh0X2xlYWZfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCitzdGF0aWMgZXh0NF9sYmxrX3QgZXh0NF9leHRfbmV4dF9sZWFmX2Jsb2NrKHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKQogewogCWludCBkZXB0aDsKIApAQCAtMTc1Nyw3ICsxNzI0LDYgQEAKIAkJZ290byBtZXJnZTsKIAl9CiAKLXJlcGVhdDoKIAlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CiAJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKIAlpZiAobGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpIDwgbGUxNl90b19jcHUoZWgtPmVoX21heCkpCkBAIC0xNzY1LDkgKzE3MzEsMTAgQEAKIAogCS8qIHByb2JhYmx5IG5leHQgbGVhZiBoYXMgc3BhY2UgZm9yIHVzPyAqLwogCWZleCA9IEVYVF9MQVNUX0VYVEVOVChlaCk7Ci0JbmV4dCA9IGV4dDRfZXh0X25leHRfbGVhZl9ibG9jayhpbm9kZSwgcGF0aCk7Ci0JaWYgKGxlMzJfdG9fY3B1KG5ld2V4dC0+ZWVfYmxvY2spID4gbGUzMl90b19jcHUoZmV4LT5lZV9ibG9jaykKLQkgICAgJiYgbmV4dCAhPSBFWFRfTUFYX0JMT0NLUykgeworCW5leHQgPSBFWFRfTUFYX0JMT0NLUzsKKwlpZiAobGUzMl90b19jcHUobmV3ZXh0LT5lZV9ibG9jaykgPiBsZTMyX3RvX2NwdShmZXgtPmVlX2Jsb2NrKSkKKwkJbmV4dCA9IGV4dDRfZXh0X25leHRfbGVhZl9ibG9jayhwYXRoKTsKKwlpZiAobmV4dCAhPSBFWFRfTUFYX0JMT0NLUykgewogCQlleHRfZGVidWcoIm5leHQgbGVhZiBibG9jayAtICVkXG4iLCBuZXh0KTsKIAkJQlVHX09OKG5wYXRoICE9IE5VTEwpOwogCQlucGF0aCA9IGV4dDRfZXh0X2ZpbmRfZXh0ZW50KGlub2RlLCBuZXh0LCBOVUxMKTsKQEAgLTE3NzksNyArMTc0Niw3IEBACiAJCQlleHRfZGVidWcoIm5leHQgbGVhZiBpc24ndCBmdWxsKCVkKVxuIiwKIAkJCQkgIGxlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSk7CiAJCQlwYXRoID0gbnBhdGg7Ci0JCQlnb3RvIHJlcGVhdDsKKwkJCWdvdG8gaGFzX3NwYWNlOwogCQl9CiAJCWV4dF9kZWJ1ZygibmV4dCBsZWFmIGhhcyBubyBmcmVlIHNwYWNlKCVkLCVkKVxuIiwKIAkJCSAgbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpLCBsZTE2X3RvX2NwdShlaC0+ZWhfbWF4KSk7CkBAIC0xODM5LDcgKzE4MDYsNyBAQAogCQkJCWV4dDRfZXh0X3BibG9jayhuZXdleHQpLAogCQkJCWV4dDRfZXh0X2lzX3VuaW5pdGlhbGl6ZWQobmV3ZXh0KSwKIAkJCQlleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihuZXdleHQpLAotCQkJCW5lYXJleCwgbGVuLCBuZWFyZXggKyAxLCBuZWFyZXggKyAyKTsKKwkJCQluZWFyZXgsIGxlbiwgbmVhcmV4LCBuZWFyZXggKyAxKTsKIAkJbWVtbW92ZShuZWFyZXggKyAxLCBuZWFyZXgsIGxlbik7CiAJCXBhdGhbZGVwdGhdLnBfZXh0ID0gbmVhcmV4OwogCX0KQEAgLTIwNTIsNyArMjAxOSw3IEBACiB9CiAKIC8qCi0gKiBleHQ0X2V4dF9pbl9jYWNoZSgpCisgKiBleHQ0X2V4dF9jaGVja19jYWNoZSgpCiAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBnaXZlbiBibG9jayBpcyBpbiB0aGUgY2FjaGUuCiAgKiBJZiBpdCBpcywgdGhlIGNhY2hlZCBleHRlbnQgaXMgc3RvcmVkIGluIHRoZSBnaXZlbgogICogY2FjaGUgZXh0ZW50IHBvaW50ZXIuICBJZiB0aGUgY2FjaGVkIGV4dGVudCBpcyBhIGhvbGUsCkBAIC0yMTM0LDggKzIxMDEsNiBAQAogLyoKICAqIGV4dDRfZXh0X3JtX2lkeDoKICAqIHJlbW92ZXMgaW5kZXggZnJvbSB0aGUgaW5kZXggYmxvY2suCi0gKiBJdCdzIHVzZWQgaW4gdHJ1bmNhdGUgY2FzZSBvbmx5LCB0aHVzIGFsbCByZXF1ZXN0cyBhcmUgZm9yCi0gKiBsYXN0IGluZGV4IGluIHRoZSBibG9jayBvbmx5LgogICovCiBzdGF0aWMgaW50IGV4dDRfZXh0X3JtX2lkeChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCkBAIC0yMTUzLDYgKzIxMTgsMTMgQEAKIAllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisKKwlpZiAocGF0aC0+cF9pZHggIT0gRVhUX0xBU1RfSU5ERVgocGF0aC0+cF9oZHIpKSB7CisJCWludCBsZW4gPSBFWFRfTEFTVF9JTkRFWChwYXRoLT5wX2hkcikgLSBwYXRoLT5wX2lkeDsKKwkJbGVuICo9IHNpemVvZihzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4KTsKKwkJbWVtbW92ZShwYXRoLT5wX2lkeCwgcGF0aC0+cF9pZHggKyAxLCBsZW4pOworCX0KKwogCWxlMTZfYWRkX2NwdSgmcGF0aC0+cF9oZHItPmVoX2VudHJpZXMsIC0xKTsKIAllcnIgPSBleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoKTsKIAlpZiAoZXJyKQpAQCAtMjUzNCw4ICsyNTA2LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBleHQ0X2V4dF9yZW1vdmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsCi0JCQkJZXh0NF9sYmxrX3QgZW5kKQorc3RhdGljIGludCBleHQ0X2V4dF9yZW1vdmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCWludCBkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CkBAIC0yNTc1LDcgKzI1NDYsNyBAQAogCQlpZiAoaSA9PSBkZXB0aCkgewogCQkJLyogdGhpcyBpcyBsZWFmIGJsb2NrICovCiAJCQllcnIgPSBleHQ0X2V4dF9ybV9sZWFmKGhhbmRsZSwgaW5vZGUsIHBhdGgsCi0JCQkJCXN0YXJ0LCBlbmQpOworCQkJCQlzdGFydCwgRVhUX01BWF9CTE9DS1MgLSAxKTsKIAkJCS8qIHJvb3QgbGV2ZWwgaGFzIHBfYmggPT0gTlVMTCwgYnJlbHNlKCkgZWF0cyB0aGlzICovCiAJCQlicmVsc2UocGF0aFtpXS5wX2JoKTsKIAkJCXBhdGhbaV0ucF9iaCA9IE5VTEw7CkBAIC0zMTA3LDEyICszMDc4LDEwIEBACiAJCQkJCSAgICAgIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKQogewogCXN0cnVjdCBleHQ0X2V4dGVudCAqZXg7Ci0Jc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CiAJaW50IGRlcHRoOwogCWludCBlcnIgPSAwOwogCiAJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOwotCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CiAJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKIAogCWV4dF9kZWJ1ZygiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2VuZGlvOiBpbm9kZSAlbHUsIGxvZ2ljYWwiCkBAIC0zMzU3LDggKzMzMjYsOCBAQAogCXRyYWNlX2V4dDRfZXh0X21hcF9ibG9ja3NfZW50ZXIoaW5vZGUsIG1hcC0+bV9sYmxrLCBtYXAtPm1fbGVuLCBmbGFncyk7CiAKIAkvKiBjaGVjayBpbiBjYWNoZSAqLwotCWlmIChleHQ0X2V4dF9pbl9jYWNoZShpbm9kZSwgbWFwLT5tX2xibGssICZuZXdleCkgJiYKLQkJKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19QVU5DSF9PVVRfRVhUKSA9PSAwKSkgeworCWlmICghKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1BVTkNIX09VVF9FWFQpICYmCisJCWV4dDRfZXh0X2luX2NhY2hlKGlub2RlLCBtYXAtPm1fbGJsaywgJm5ld2V4KSkgewogCQlpZiAoIW5ld2V4LmVlX3N0YXJ0X2xvICYmICFuZXdleC5lZV9zdGFydF9oaSkgewogCQkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApIHsKIAkJCQkvKgpAQCAtMzQ5Nyw4ICszNDY2LDI3IEBACiAKIAkJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleCk7CiAKLQkJCWVyciA9IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShpbm9kZSwgbWFwLT5tX2xibGssCi0JCQkJbWFwLT5tX2xibGsgKyBwdW5jaGVkX291dCk7CisJCQlleHQ0X2V4dF9pbnZhbGlkYXRlX2NhY2hlKGlub2RlKTsKKworCQkJZXJyID0gZXh0NF9leHRfcm1fbGVhZihoYW5kbGUsIGlub2RlLCBwYXRoLAorCQkJCW1hcC0+bV9sYmxrLCBtYXAtPm1fbGJsayArIHB1bmNoZWRfb3V0KTsKKworCQkJaWYgKCFlcnIgJiYgcGF0aC0+cF9oZHItPmVoX2VudHJpZXMgPT0gMCkgeworCQkJCS8qCisJCQkJICogUHVuY2ggaG9sZSBmcmVlZCBhbGwgb2YgdGhpcyBzdWIgdHJlZSwKKwkJCQkgKiBzbyB3ZSBuZWVkIHRvIGNvcnJlY3QgZWhfZGVwdGgKKwkJCQkgKi8KKwkJCQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOworCQkJCWlmIChlcnIgPT0gMCkgeworCQkJCQlleHRfaW5vZGVfaGRyKGlub2RlKS0+ZWhfZGVwdGggPSAwOworCQkJCQlleHRfaW5vZGVfaGRyKGlub2RlKS0+ZWhfbWF4ID0KKwkJCQkJY3B1X3RvX2xlMTYoZXh0NF9leHRfc3BhY2Vfcm9vdCgKKwkJCQkJCWlub2RlLCAwKSk7CisKKwkJCQkJZXJyID0gZXh0NF9leHRfZGlydHkoCisJCQkJCQloYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJCQl9CisJCQl9CiAKIAkJCWdvdG8gb3V0MjsKIAkJfQpAQCAtMzU5NiwxNyArMzU4NCwxOCBAQAogCX0KIAogCWVyciA9IGNoZWNrX2VvZmJsb2Nrc19mbChoYW5kbGUsIGlub2RlLCBtYXAtPm1fbGJsaywgcGF0aCwgYXIubGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDI7Ci0KLQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgZmxhZ3MpOworCWlmICghZXJyKQorCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsCisJCQkJCSAgICAgJm5ld2V4LCBmbGFncyk7CiAJaWYgKGVycikgeworCQlpbnQgZmJfZmxhZ3MgPSBmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19ERUxBTExPQ19SRVNFUlZFID8KKwkJCUVYVDRfRlJFRV9CTE9DS1NfTk9fUVVPVF9VUERBVEUgOiAwOwogCQkvKiBmcmVlIGRhdGEgYmxvY2tzIHdlIGp1c3QgYWxsb2NhdGVkICovCiAJCS8qIG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIGRpc2NhcmQgaGVyZSBkaXJlY3RseSwKIAkJICogYnV0IG90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gY2FsbCBpdCBldmVyeSBmcmVlKCkgKi8KIAkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIAkJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBleHQ0X2V4dF9wYmxvY2soJm5ld2V4KSwKLQkJCQkgZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oJm5ld2V4KSwgMCk7CisJCQkJIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKCZuZXdleCksIGZiX2ZsYWdzKTsKIAkJZ290byBvdXQyOwogCX0KIApAQCAtMzY5OSw3ICszNjg4LDcgQEAKIAogCWxhc3RfYmxvY2sgPSAoaW5vZGUtPmlfc2l6ZSArIHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpCiAJCQk+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhzYik7Ci0JZXJyID0gZXh0NF9leHRfcmVtb3ZlX3NwYWNlKGlub2RlLCBsYXN0X2Jsb2NrLCBFWFRfTUFYX0JMT0NLUyAtIDEpOworCWVyciA9IGV4dDRfZXh0X3JlbW92ZV9zcGFjZShpbm9kZSwgbGFzdF9ibG9jayk7CiAKIAkvKiBJbiBhIG11bHRpLXRyYW5zYWN0aW9uIHRydW5jYXRlLCB3ZSBvbmx5IG1ha2UgdGhlIGZpbmFsCiAJICogdHJhbnNhY3Rpb24gc3luY2hyb25vdXMuCkBAIC0zODM1LDcgKzM4MjQsNyBAQAogCQkJCQkJYmxrYml0cykgPj4gYmxrYml0cykpCiAJCQluZXdfc2l6ZSA9IG9mZnNldCArIGxlbjsKIAkJZWxzZQotCQkJbmV3X3NpemUgPSAobWFwLm1fbGJsayArIHJldCkgPDwgYmxrYml0czsKKwkJCW5ld19zaXplID0gKChsb2ZmX3QpIG1hcC5tX2xibGsgKyByZXQpIDw8IGJsa2JpdHM7CiAKIAkJZXh0NF9mYWxsb2NfdXBkYXRlX2lub2RlKGlub2RlLCBtb2RlLCBuZXdfc2l6ZSwKIAkJCQkJIChtYXAubV9mbGFncyAmIEVYVDRfTUFQX05FVykpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IGRhM2JlZDMuLjAzNmY3OGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYworKysgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTEyOSwxNSArMTI5LDMwIEBACiB7CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYzsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqbmV4dDsKIAlpbnQgcmV0ID0gMDsKIAotCXdoaWxlIChpbm9kZSAmJiBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTkVXRU5UUlkpKSB7CisJaWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTkVXRU5UUlkpKQorCQlyZXR1cm4gMDsKKwlpbm9kZSA9IGlncmFiKGlub2RlKTsKKwl3aGlsZSAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FV0VOVFJZKSkgewogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FV0VOVFJZKTsKLQkJZGVudHJ5ID0gbGlzdF9lbnRyeShpbm9kZS0+aV9kZW50cnkubmV4dCwKLQkJCQkgICAgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7Ci0JCWlmICghZGVudHJ5IHx8ICFkZW50cnktPmRfcGFyZW50IHx8ICFkZW50cnktPmRfcGFyZW50LT5kX2lub2RlKQorCQlkZW50cnkgPSBOVUxMOworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpIHsKKwkJCWRlbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJmlub2RlLT5pX2RlbnRyeSwKKwkJCQkJCSAgc3RydWN0IGRlbnRyeSwgZF9hbGlhcyk7CisJCQlkZ2V0KGRlbnRyeSk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQlpZiAoIWRlbnRyeSkKIAkJCWJyZWFrOwotCQlpbm9kZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisJCW5leHQgPSBpZ3JhYihkZW50cnktPmRfcGFyZW50LT5kX2lub2RlKTsKKwkJZHB1dChkZW50cnkpOworCQlpZiAoIW5leHQpCisJCQlicmVhazsKKwkJaXB1dChpbm9kZSk7CisJCWlub2RlID0gbmV4dDsKIAkJcmV0ID0gc3luY19tYXBwaW5nX2J1ZmZlcnMoaW5vZGUtPmlfbWFwcGluZyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTE0OCw2ICsxNjMsNyBAQAogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJfQorCWlwdXQoaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jCmluZGV4IDIxYmIyZjYuLjljNjNmMjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaWFsbG9jLmMKKysrIGIvZnMvZXh0NC9pYWxsb2MuYwpAQCAtMTI4Nyw3ICsxMjg3LDcgQEAKIAkJCSAgIGdyb3VwLCB1c2VkX2Jsa3MsCiAJCQkgICBleHQ0X2l0YWJsZV91bnVzZWRfY291bnQoc2IsIGdkcCkpOwogCQlyZXQgPSAxOwotCQlnb3RvIG91dDsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCWJsayA9IGV4dDRfaW5vZGVfdGFibGUoc2IsIGdkcCkgKyB1c2VkX2Jsa3M7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2luZGlyZWN0LmMgYi9mcy9leHQ0L2luZGlyZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2MjY0MgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDQvaW5kaXJlY3QuYwpAQCAtMCwwICsxLDE0ODcgQEAKKy8qCisgKiAgbGludXgvZnMvZXh0NC9pbmRpcmVjdC5jCisgKgorICogIGZyb20KKyAqCisgKiAgbGludXgvZnMvZXh0NC9pbm9kZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICoKKyAqICBmcm9tCisgKgorICogIGxpbnV4L2ZzL21pbml4L2lub2RlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqICBHb2FsLWRpcmVjdGVkIGJsb2NrIGFsbG9jYXRpb24gYnkgU3RlcGhlbiBUd2VlZGllCisgKgkoc2N0QHJlZGhhdC5jb20pLCAxOTkzLCAxOTk4CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImV4dDRfamJkMi5oIgorI2luY2x1ZGUgInRydW5jYXRlLmgiCisKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvZXh0NC5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJX19sZTMyCSpwOworCV9fbGUzMglrZXk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKK30gSW5kaXJlY3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRfY2hhaW4oSW5kaXJlY3QgKnAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIF9fbGUzMiAqdikKK3sKKwlwLT5rZXkgPSAqKHAtPnAgPSB2KTsKKwlwLT5iaCA9IGJoOworfQorCisvKioKKyAqCWV4dDRfYmxvY2tfdG9fcGF0aCAtIHBhcnNlIHRoZSBibG9jayBudW1iZXIgaW50byBhcnJheSBvZiBvZmZzZXRzCisgKglAaW5vZGU6IGlub2RlIGluIHF1ZXN0aW9uICh3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGl0cyBzdXBlcmJsb2NrKQorICoJQGlfYmxvY2s6IGJsb2NrIG51bWJlciB0byBiZSBwYXJzZWQKKyAqCUBvZmZzZXRzOiBhcnJheSB0byBzdG9yZSB0aGUgb2Zmc2V0cyBpbgorICoJQGJvdW5kYXJ5OiBzZXQgdGhpcyBub24temVybyBpZiB0aGUgcmVmZXJyZWQtdG8gYmxvY2sgaXMgbGlrZWx5IHRvIGJlCisgKgkgICAgICAgZm9sbG93ZWQgKG9uIGRpc2spIGJ5IGFuIGluZGlyZWN0IGJsb2NrLgorICoKKyAqCVRvIHN0b3JlIHRoZSBsb2NhdGlvbnMgb2YgZmlsZSdzIGRhdGEgZXh0NCB1c2VzIGEgZGF0YSBzdHJ1Y3R1cmUgY29tbW9uCisgKglmb3IgVU5JWCBmaWxlc3lzdGVtcyAtIHRyZWUgb2YgcG9pbnRlcnMgYW5jaG9yZWQgaW4gdGhlIGlub2RlLCB3aXRoCisgKglkYXRhIGJsb2NrcyBhdCBsZWF2ZXMgYW5kIGluZGlyZWN0IGJsb2NrcyBpbiBpbnRlcm1lZGlhdGUgbm9kZXMuCisgKglUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhlIGJsb2NrIG51bWJlciBpbnRvIHBhdGggaW4gdGhhdCB0cmVlIC0KKyAqCXJldHVybiB2YWx1ZSBpcyB0aGUgcGF0aCBsZW5ndGggYW5kIEBvZmZzZXRzW25dIGlzIHRoZSBvZmZzZXQgb2YKKyAqCXBvaW50ZXIgdG8gKG4rMSl0aCBub2RlIGluIHRoZSBudGggb25lLiBJZiBAYmxvY2sgaXMgb3V0IG9mIHJhbmdlCisgKgkobmVnYXRpdmUgb3IgdG9vIGxhcmdlKSB3YXJuaW5nIGlzIHByaW50ZWQgYW5kIHplcm8gcmV0dXJuZWQuCisgKgorICoJTm90ZTogZnVuY3Rpb24gZG9lc24ndCBmaW5kIG5vZGUgYWRkcmVzc2VzLCBzbyBubyBJTyBpcyBuZWVkZWQuIEFsbAorICoJd2UgbmVlZCB0byBrbm93IGlzIHRoZSBjYXBhY2l0eSBvZiBpbmRpcmVjdCBibG9ja3MgKHRha2VuIGZyb20gdGhlCisgKglpbm9kZS0+aV9zYikuCisgKi8KKworLyoKKyAqIFBvcnRhYmlsaXR5IG5vdGU6IHRoZSBsYXN0IGNvbXBhcmlzb24gKGNoZWNrIHRoYXQgd2UgZml0IGludG8gdHJpcGxlCisgKiBpbmRpcmVjdCBibG9jaykgaXMgc3BlbGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSBvdGhlcndpc2Ugb24gYW4KKyAqIGFyY2hpdGVjdHVyZSB3aXRoIDMyLWJpdCBsb25ncyBhbmQgOEtiIHBhZ2VzIHdlIG1pZ2h0IGdldCBpbnRvIHRyb3VibGUKKyAqIGlmIG91ciBmaWxlc3lzdGVtIGhhZCA4S2IgYmxvY2tzLiBXZSBtaWdodCB1c2UgbG9uZyBsb25nLCBidXQgdGhhdCB3b3VsZAorICoga2lsbCB1cyBvbiB4ODYuIE9oLCB3ZWxsLCBhdCBsZWFzdCB0aGUgc2lnbiBwcm9wYWdhdGlvbiBkb2VzIG5vdCBtYXR0ZXIgLQorICogaV9ibG9jayB3b3VsZCBoYXZlIHRvIGJlIG5lZ2F0aXZlIGluIHRoZSB2ZXJ5IGJlZ2lubmluZywgc28gd2Ugd291bGQgbm90CisgKiBnZXQgdGhlcmUgYXQgYWxsLgorICovCisKK3N0YXRpYyBpbnQgZXh0NF9ibG9ja190b19wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBleHQ0X2xibGtfdCBpX2Jsb2NrLAorCQkJICAgICAgZXh0NF9sYmxrX3Qgb2Zmc2V0c1s0XSwgaW50ICpib3VuZGFyeSkKK3sKKwlpbnQgcHRycyA9IEVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpOworCWludCBwdHJzX2JpdHMgPSBFWFQ0X0FERFJfUEVSX0JMT0NLX0JJVFMoaW5vZGUtPmlfc2IpOworCWNvbnN0IGxvbmcgZGlyZWN0X2Jsb2NrcyA9IEVYVDRfTkRJUl9CTE9DS1MsCisJCWluZGlyZWN0X2Jsb2NrcyA9IHB0cnMsCisJCWRvdWJsZV9ibG9ja3MgPSAoMSA8PCAocHRyc19iaXRzICogMikpOworCWludCBuID0gMDsKKwlpbnQgZmluYWwgPSAwOworCisJaWYgKGlfYmxvY2sgPCBkaXJlY3RfYmxvY2tzKSB7CisJCW9mZnNldHNbbisrXSA9IGlfYmxvY2s7CisJCWZpbmFsID0gZGlyZWN0X2Jsb2NrczsKKwl9IGVsc2UgaWYgKChpX2Jsb2NrIC09IGRpcmVjdF9ibG9ja3MpIDwgaW5kaXJlY3RfYmxvY2tzKSB7CisJCW9mZnNldHNbbisrXSA9IEVYVDRfSU5EX0JMT0NLOworCQlvZmZzZXRzW24rK10gPSBpX2Jsb2NrOworCQlmaW5hbCA9IHB0cnM7CisJfSBlbHNlIGlmICgoaV9ibG9jayAtPSBpbmRpcmVjdF9ibG9ja3MpIDwgZG91YmxlX2Jsb2NrcykgeworCQlvZmZzZXRzW24rK10gPSBFWFQ0X0RJTkRfQkxPQ0s7CisJCW9mZnNldHNbbisrXSA9IGlfYmxvY2sgPj4gcHRyc19iaXRzOworCQlvZmZzZXRzW24rK10gPSBpX2Jsb2NrICYgKHB0cnMgLSAxKTsKKwkJZmluYWwgPSBwdHJzOworCX0gZWxzZSBpZiAoKChpX2Jsb2NrIC09IGRvdWJsZV9ibG9ja3MpID4+IChwdHJzX2JpdHMgKiAyKSkgPCBwdHJzKSB7CisJCW9mZnNldHNbbisrXSA9IEVYVDRfVElORF9CTE9DSzsKKwkJb2Zmc2V0c1tuKytdID0gaV9ibG9jayA+PiAocHRyc19iaXRzICogMik7CisJCW9mZnNldHNbbisrXSA9IChpX2Jsb2NrID4+IHB0cnNfYml0cykgJiAocHRycyAtIDEpOworCQlvZmZzZXRzW24rK10gPSBpX2Jsb2NrICYgKHB0cnMgLSAxKTsKKwkJZmluYWwgPSBwdHJzOworCX0gZWxzZSB7CisJCWV4dDRfd2FybmluZyhpbm9kZS0+aV9zYiwgImJsb2NrICVsdSA+IG1heCBpbiBpbm9kZSAlbHUiLAorCQkJICAgICBpX2Jsb2NrICsgZGlyZWN0X2Jsb2NrcyArCisJCQkgICAgIGluZGlyZWN0X2Jsb2NrcyArIGRvdWJsZV9ibG9ja3MsIGlub2RlLT5pX2lubyk7CisJfQorCWlmIChib3VuZGFyeSkKKwkJKmJvdW5kYXJ5ID0gZmluYWwgLSAxIC0gKGlfYmxvY2sgJiAocHRycyAtIDEpKTsKKwlyZXR1cm4gbjsKK30KKworLyoqCisgKglleHQ0X2dldF9icmFuY2ggLSByZWFkIHRoZSBjaGFpbiBvZiBpbmRpcmVjdCBibG9ja3MgbGVhZGluZyB0byBkYXRhCisgKglAaW5vZGU6IGlub2RlIGluIHF1ZXN0aW9uCisgKglAZGVwdGg6IGRlcHRoIG9mIHRoZSBjaGFpbiAoMSAtIGRpcmVjdCBwb2ludGVyLCBldGMuKQorICoJQG9mZnNldHM6IG9mZnNldHMgb2YgcG9pbnRlcnMgaW4gaW5vZGUvaW5kaXJlY3QgYmxvY2tzCisgKglAY2hhaW46IHBsYWNlIHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqCUBlcnI6IGhlcmUgd2Ugc3RvcmUgdGhlIGVycm9yIHZhbHVlCisgKgorICoJRnVuY3Rpb24gZmlsbHMgdGhlIGFycmF5IG9mIHRyaXBsZXMgPGtleSwgcCwgYmg+IGFuZCByZXR1cm5zICVOVUxMCisgKglpZiBldmVyeXRoaW5nIHdlbnQgT0sgb3IgdGhlIHBvaW50ZXIgdG8gdGhlIGxhc3QgZmlsbGVkIHRyaXBsZQorICoJKGluY29tcGxldGUgb25lKSBvdGhlcndpc2UuIFVwb24gdGhlIHJldHVybiBjaGFpbltpXS5rZXkgY29udGFpbnMKKyAqCXRoZSBudW1iZXIgb2YgKGkrMSktdGggYmxvY2sgaW4gdGhlIGNoYWluIChhcyBpdCBpcyBzdG9yZWQgaW4gbWVtb3J5LAorICoJaS5lLiBsaXR0bGUtZW5kaWFuIDMyLWJpdCksIGNoYWluW2ldLnAgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhhdAorICoJbnVtYmVyIChpdCBwb2ludHMgaW50byBzdHJ1Y3QgaW5vZGUgZm9yIGk9PTAgYW5kIGludG8gdGhlIGJoLT5iX2RhdGEKKyAqCWZvciBpPjApIGFuZCBjaGFpbltpXS5iaCBwb2ludHMgdG8gdGhlIGJ1ZmZlcl9oZWFkIG9mIGktdGggaW5kaXJlY3QKKyAqCWJsb2NrIGZvciBpPjAgYW5kIE5VTEwgZm9yIGk9PTAuIEluIG90aGVyIHdvcmRzLCBpdCBob2xkcyB0aGUgYmxvY2sKKyAqCW51bWJlcnMgb2YgdGhlIGNoYWluLCBhZGRyZXNzZXMgdGhleSB3ZXJlIHRha2VuIGZyb20gKGFuZCB3aGVyZSB3ZSBjYW4KKyAqCXZlcmlmeSB0aGF0IGNoYWluIGRpZCBub3QgY2hhbmdlKSBhbmQgYnVmZmVyX2hlYWRzIGhvc3RpbmcgdGhlc2UKKyAqCW51bWJlcnMuCisgKgorICoJRnVuY3Rpb24gc3RvcHMgd2hlbiBpdCBzdHVtYmxlcyB1cG9uIHplcm8gcG9pbnRlciAoYWJzZW50IGJsb2NrKQorICoJCShwb2ludGVyIHRvIGxhc3QgdHJpcGxlIHJldHVybmVkLCAqQGVyciA9PSAwKQorICoJb3Igd2hlbiBpdCBnZXRzIGFuIElPIGVycm9yIHJlYWRpbmcgYW4gaW5kaXJlY3QgYmxvY2sKKyAqCQkoZGl0dG8sICpAZXJyID09IC1FSU8pCisgKglvciB3aGVuIGl0IHJlYWRzIGFsbCBAZGVwdGgtMSBpbmRpcmVjdCBibG9ja3Mgc3VjY2Vzc2Z1bGx5IGFuZCBmaW5kcworICoJdGhlIHdob2xlIGNoYWluLCBhbGwgd2F5IHRvIHRoZSBkYXRhIChyZXR1cm5zICVOVUxMLCAqZXJyID09IDApLgorICoKKyAqICAgICAgTmVlZCB0byBiZSBjYWxsZWQgd2l0aAorICogICAgICBkb3duX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pCisgKi8KK3N0YXRpYyBJbmRpcmVjdCAqZXh0NF9nZXRfYnJhbmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkZXB0aCwKKwkJCQkgZXh0NF9sYmxrX3QgICpvZmZzZXRzLAorCQkJCSBJbmRpcmVjdCBjaGFpbls0XSwgaW50ICplcnIpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCUluZGlyZWN0ICpwID0gY2hhaW47CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCSplcnIgPSAwOworCS8qIGlfZGF0YSBpcyBub3QgZ29pbmcgYXdheSwgbm8gbG9jayBuZWVkZWQgKi8KKwlhZGRfY2hhaW4oY2hhaW4sIE5VTEwsIEVYVDRfSShpbm9kZSktPmlfZGF0YSArICpvZmZzZXRzKTsKKwlpZiAoIXAtPmtleSkKKwkJZ290byBub19ibG9jazsKKwl3aGlsZSAoLS1kZXB0aCkgeworCQliaCA9IHNiX2dldGJsayhzYiwgbGUzMl90b19jcHUocC0+a2V5KSk7CisJCWlmICh1bmxpa2VseSghYmgpKQorCQkJZ290byBmYWlsdXJlOworCisJCWlmICghYmhfdXB0b2RhdGVfb3JfbG9jayhiaCkpIHsKKwkJCWlmIChiaF9zdWJtaXRfcmVhZChiaCkgPCAwKSB7CisJCQkJcHV0X2JoKGJoKTsKKwkJCQlnb3RvIGZhaWx1cmU7CisJCQl9CisJCQkvKiB2YWxpZGF0ZSBibG9jayByZWZlcmVuY2VzICovCisJCQlpZiAoZXh0NF9jaGVja19pbmRpcmVjdF9ibG9ja3JlZihpbm9kZSwgYmgpKSB7CisJCQkJcHV0X2JoKGJoKTsKKwkJCQlnb3RvIGZhaWx1cmU7CisJCQl9CisJCX0KKworCQlhZGRfY2hhaW4oKytwLCBiaCwgKF9fbGUzMiAqKWJoLT5iX2RhdGEgKyAqKytvZmZzZXRzKTsKKwkJLyogUmVhZGVyOiBlbmQgKi8KKwkJaWYgKCFwLT5rZXkpCisJCQlnb3RvIG5vX2Jsb2NrOworCX0KKwlyZXR1cm4gTlVMTDsKKworZmFpbHVyZToKKwkqZXJyID0gLUVJTzsKK25vX2Jsb2NrOgorCXJldHVybiBwOworfQorCisvKioKKyAqCWV4dDRfZmluZF9uZWFyIC0gZmluZCBhIHBsYWNlIGZvciBhbGxvY2F0aW9uIHdpdGggc3VmZmljaWVudCBsb2NhbGl0eQorICoJQGlub2RlOiBvd25lcgorICoJQGluZDogZGVzY3JpcHRvciBvZiBpbmRpcmVjdCBibG9jay4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZWZlcnJlZCBwbGFjZSBmb3IgYmxvY2sgYWxsb2NhdGlvbi4KKyAqCUl0IGlzIHVzZWQgd2hlbiBoZXVyaXN0aWMgZm9yIHNlcXVlbnRpYWwgYWxsb2NhdGlvbiBmYWlscy4KKyAqCVJ1bGVzIGFyZToKKyAqCSAgKyBpZiB0aGVyZSBpcyBhIGJsb2NrIHRvIHRoZSBsZWZ0IG9mIG91ciBwb3NpdGlvbiAtIGFsbG9jYXRlIG5lYXIgaXQuCisgKgkgICsgaWYgcG9pbnRlciB3aWxsIGxpdmUgaW4gaW5kaXJlY3QgYmxvY2sgLSBhbGxvY2F0ZSBuZWFyIHRoYXQgYmxvY2suCisgKgkgICsgaWYgcG9pbnRlciB3aWxsIGxpdmUgaW4gaW5vZGUgLSBhbGxvY2F0ZSBpbiB0aGUgc2FtZQorICoJICAgIGN5bGluZGVyIGdyb3VwLgorICoKKyAqIEluIHRoZSBsYXR0ZXIgY2FzZSB3ZSBjb2xvdXIgdGhlIHN0YXJ0aW5nIGJsb2NrIGJ5IHRoZSBjYWxsZXJzIFBJRCB0bworICogcHJldmVudCBpdCBmcm9tIGNsYXNoaW5nIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9ucyBmb3IgYSBkaWZmZXJlbnQgaW5vZGUKKyAqIGluIHRoZSBzYW1lIGJsb2NrIGdyb3VwLiAgIFRoZSBQSUQgaXMgdXNlZCBoZXJlIHNvIHRoYXQgZnVuY3Rpb25hbGx5IHJlbGF0ZWQKKyAqIGZpbGVzIHdpbGwgYmUgY2xvc2UtYnkgb24tZGlzay4KKyAqCisgKglDYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBAaW5kIGlzIHZhbGlkIGFuZCB3aWxsIHN0YXkgdGhhdCB3YXkuCisgKi8KK3N0YXRpYyBleHQ0X2ZzYmxrX3QgZXh0NF9maW5kX25lYXIoc3RydWN0IGlub2RlICppbm9kZSwgSW5kaXJlY3QgKmluZCkKK3sKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CisJX19sZTMyICpzdGFydCA9IGluZC0+YmggPyAoX19sZTMyICopIGluZC0+YmgtPmJfZGF0YSA6IGVpLT5pX2RhdGE7CisJX19sZTMyICpwOworCisJLyogVHJ5IHRvIGZpbmQgcHJldmlvdXMgYmxvY2sgKi8KKwlmb3IgKHAgPSBpbmQtPnAgLSAxOyBwID49IHN0YXJ0OyBwLS0pIHsKKwkJaWYgKCpwKQorCQkJcmV0dXJuIGxlMzJfdG9fY3B1KCpwKTsKKwl9CisKKwkvKiBObyBzdWNoIHRoaW5nLCBzbyBsZXQncyB0cnkgbG9jYXRpb24gb2YgaW5kaXJlY3QgYmxvY2sgKi8KKwlpZiAoaW5kLT5iaCkKKwkJcmV0dXJuIGluZC0+YmgtPmJfYmxvY2tucjsKKworCS8qCisJICogSXQgaXMgZ29pbmcgdG8gYmUgcmVmZXJyZWQgdG8gZnJvbSB0aGUgaW5vZGUgaXRzZWxmPyBPSywganVzdCBwdXQgaXQKKwkgKiBpbnRvIHRoZSBzYW1lIGN5bGluZGVyIGdyb3VwIHRoZW4uCisJICovCisJcmV0dXJuIGV4dDRfaW5vZGVfdG9fZ29hbF9ibG9jayhpbm9kZSk7Cit9CisKKy8qKgorICoJZXh0NF9maW5kX2dvYWwgLSBmaW5kIGEgcHJlZmVycmVkIHBsYWNlIGZvciBhbGxvY2F0aW9uLgorICoJQGlub2RlOiBvd25lcgorICoJQGJsb2NrOiAgYmxvY2sgd2Ugd2FudAorICoJQHBhcnRpYWw6IHBvaW50ZXIgdG8gdGhlIGxhc3QgdHJpcGxlIHdpdGhpbiBhIGNoYWluCisgKgorICoJTm9ybWFsbHkgdGhpcyBmdW5jdGlvbiBmaW5kIHRoZSBwcmVmZXJyZWQgcGxhY2UgZm9yIGJsb2NrIGFsbG9jYXRpb24sCisgKglyZXR1cm5zIGl0LgorICoJQmVjYXVzZSB0aGlzIGlzIG9ubHkgdXNlZCBmb3Igbm9uLWV4dGVudCBmaWxlcywgd2UgbGltaXQgdGhlIGJsb2NrIG5yCisgKgl0byAzMiBiaXRzLgorICovCitzdGF0aWMgZXh0NF9mc2Jsa190IGV4dDRfZmluZF9nb2FsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGJsb2NrLAorCQkJCSAgIEluZGlyZWN0ICpwYXJ0aWFsKQoreworCWV4dDRfZnNibGtfdCBnb2FsOworCisJLyoKKwkgKiBYWFggbmVlZCB0byBnZXQgZ29hbCBibG9jayBmcm9tIG1iYWxsb2MncyBkYXRhIHN0cnVjdHVyZXMKKwkgKi8KKworCWdvYWwgPSBleHQ0X2ZpbmRfbmVhcihpbm9kZSwgcGFydGlhbCk7CisJZ29hbCA9IGdvYWwgJiBFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVM7CisJcmV0dXJuIGdvYWw7Cit9CisKKy8qKgorICoJZXh0NF9ibGtzX3RvX2FsbG9jYXRlIC0gTG9vayB1cCB0aGUgYmxvY2sgbWFwIGFuZCBjb3VudCB0aGUgbnVtYmVyCisgKglvZiBkaXJlY3QgYmxvY2tzIG5lZWQgdG8gYmUgYWxsb2NhdGVkIGZvciB0aGUgZ2l2ZW4gYnJhbmNoLgorICoKKyAqCUBicmFuY2g6IGNoYWluIG9mIGluZGlyZWN0IGJsb2NrcworICoJQGs6IG51bWJlciBvZiBibG9ja3MgbmVlZCBmb3IgaW5kaXJlY3QgYmxvY2tzCisgKglAYmxrczogbnVtYmVyIG9mIGRhdGEgYmxvY2tzIHRvIGJlIG1hcHBlZC4KKyAqCUBibG9ja3NfdG9fYm91bmRhcnk6ICB0aGUgb2Zmc2V0IGluIHRoZSBpbmRpcmVjdCBibG9jaworICoKKyAqCXJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBhbGxvY2F0ZSwgaW5jbHVkaW5nIHRoZQorICoJZGlyZWN0IGFuZCBpbmRpcmVjdCBibG9ja3MuCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9ibGtzX3RvX2FsbG9jYXRlKEluZGlyZWN0ICpicmFuY2gsIGludCBrLCB1bnNpZ25lZCBpbnQgYmxrcywKKwkJCQkgaW50IGJsb2Nrc190b19ib3VuZGFyeSkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCisJLyoKKwkgKiBTaW1wbGUgY2FzZSwgW3QsZF1JbmRpcmVjdCBibG9jayhzKSBoYXMgbm90IGFsbG9jYXRlZCB5ZXQKKwkgKiB0aGVuIGl0J3MgY2xlYXIgYmxvY2tzIG9uIHRoYXQgcGF0aCBoYXZlIG5vdCBhbGxvY2F0ZWQKKwkgKi8KKwlpZiAoayA+IDApIHsKKwkJLyogcmlnaHQgbm93IHdlIGRvbid0IGhhbmRsZSBjcm9zcyBib3VuZGFyeSBhbGxvY2F0aW9uICovCisJCWlmIChibGtzIDwgYmxvY2tzX3RvX2JvdW5kYXJ5ICsgMSkKKwkJCWNvdW50ICs9IGJsa3M7CisJCWVsc2UKKwkJCWNvdW50ICs9IGJsb2Nrc190b19ib3VuZGFyeSArIDE7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwljb3VudCsrOworCXdoaWxlIChjb3VudCA8IGJsa3MgJiYgY291bnQgPD0gYmxvY2tzX3RvX2JvdW5kYXJ5ICYmCisJCWxlMzJfdG9fY3B1KCooYnJhbmNoWzBdLnAgKyBjb3VudCkpID09IDApIHsKKwkJY291bnQrKzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqCWV4dDRfYWxsb2NfYmxvY2tzOiBtdWx0aXBsZSBhbGxvY2F0ZSBibG9ja3MgbmVlZGVkIGZvciBhIGJyYW5jaAorICoJQGhhbmRsZTogaGFuZGxlIGZvciB0aGlzIHRyYW5zYWN0aW9uCisgKglAaW5vZGU6IGlub2RlIHdoaWNoIG5lZWRzIGFsbG9jYXRlZCBibG9ja3MKKyAqCUBpYmxvY2s6IHRoZSBsb2dpY2FsIGJsb2NrIHRvIHN0YXJ0IGFsbG9jYXRlZCBhdAorICoJQGdvYWw6IHByZWZlcnJlZCBwaHlzaWNhbCBibG9jayBvZiBhbGxvY2F0aW9uCisgKglAaW5kaXJlY3RfYmxrczogdGhlIG51bWJlciBvZiBibG9ja3MgbmVlZCB0byBhbGxvY2F0ZSBmb3IgaW5kaXJlY3QKKyAqCQkJYmxvY2tzCisgKglAYmxrczogbnVtYmVyIG9mIGRlc2lyZWQgYmxvY2tzCisgKglAbmV3X2Jsb2Nrczogb24gcmV0dXJuIGl0IHdpbGwgc3RvcmUgdGhlIG5ldyBibG9jayBudW1iZXJzIGZvcgorICoJdGhlIGluZGlyZWN0IGJsb2NrcyhpZiBuZWVkZWQpIGFuZCB0aGUgZmlyc3QgZGlyZWN0IGJsb2NrLAorICoJQGVycjogb24gcmV0dXJuIGl0IHdpbGwgc3RvcmUgdGhlIGVycm9yIGNvZGUKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCBhcworICoJcmVxdWVzdGVkIGJ5IHRoZSBwYXNzZWQtaW4gcGFyYW1ldGVycy4KKyAqLworc3RhdGljIGludCBleHQ0X2FsbG9jX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBleHQ0X2xibGtfdCBpYmxvY2ssIGV4dDRfZnNibGtfdCBnb2FsLAorCQkJICAgICBpbnQgaW5kaXJlY3RfYmxrcywgaW50IGJsa3MsCisJCQkgICAgIGV4dDRfZnNibGtfdCBuZXdfYmxvY2tzWzRdLCBpbnQgKmVycikKK3sKKwlzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7CisJaW50IHRhcmdldCwgaTsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMCwgYmxrX2FsbG9jYXRlZCA9IDA7CisJaW50IGluZGV4ID0gMDsKKwlleHQ0X2ZzYmxrX3QgY3VycmVudF9ibG9jayA9IDA7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIEhlcmUgd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbXVsdGlwbGUgYmxvY2tzIGF0IG9uY2UsCisJICogb24gYSBiZXN0LWVmZm9ydCBiYXNpcy4KKwkgKiBUbyBidWlsZCBhIGJyYW5jaCwgd2Ugc2hvdWxkIGFsbG9jYXRlIGJsb2NrcyBmb3IKKwkgKiB0aGUgaW5kaXJlY3QgYmxvY2tzKGlmIG5vdCBhbGxvY2F0ZWQgeWV0KSwgYW5kIGF0IGxlYXN0CisJICogdGhlIGZpcnN0IGRpcmVjdCBibG9jayBvZiB0aGlzIGJyYW5jaC4gIFRoYXQncyB0aGUKKwkgKiBtaW5pbXVtIG51bWJlciBvZiBibG9ja3MgbmVlZCB0byBhbGxvY2F0ZShyZXF1aXJlZCkKKwkgKi8KKwkvKiBmaXJzdCB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlIGluZGlyZWN0IGJsb2NrcyAqLworCXRhcmdldCA9IGluZGlyZWN0X2Jsa3M7CisJd2hpbGUgKHRhcmdldCA+IDApIHsKKwkJY291bnQgPSB0YXJnZXQ7CisJCS8qIGFsbG9jYXRpbmcgYmxvY2tzIGZvciBpbmRpcmVjdCBibG9ja3MgYW5kIGRpcmVjdCBibG9ja3MgKi8KKwkJY3VycmVudF9ibG9jayA9IGV4dDRfbmV3X21ldGFfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGdvYWwsCisJCQkJCQkgICAgIDAsICZjb3VudCwgZXJyKTsKKwkJaWYgKCplcnIpCisJCQlnb3RvIGZhaWxlZF9vdXQ7CisKKwkJaWYgKHVubGlrZWx5KGN1cnJlbnRfYmxvY2sgKyBjb3VudCA+IEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUykpIHsKKwkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJCSAiY3VycmVudF9ibG9jayAlbGx1ICsgY291bnQgJWx1ID4gJWQhIiwKKwkJCQkJIGN1cnJlbnRfYmxvY2ssIGNvdW50LAorCQkJCQkgRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTKTsKKwkJCSplcnIgPSAtRUlPOworCQkJZ290byBmYWlsZWRfb3V0OworCQl9CisKKwkJdGFyZ2V0IC09IGNvdW50OworCQkvKiBhbGxvY2F0ZSBibG9ja3MgZm9yIGluZGlyZWN0IGJsb2NrcyAqLworCQl3aGlsZSAoaW5kZXggPCBpbmRpcmVjdF9ibGtzICYmIGNvdW50KSB7CisJCQluZXdfYmxvY2tzW2luZGV4KytdID0gY3VycmVudF9ibG9jaysrOworCQkJY291bnQtLTsKKwkJfQorCQlpZiAoY291bnQgPiAwKSB7CisJCQkvKgorCQkJICogc2F2ZSB0aGUgbmV3IGJsb2NrIG51bWJlcgorCQkJICogZm9yIHRoZSBmaXJzdCBkaXJlY3QgYmxvY2sKKwkJCSAqLworCQkJbmV3X2Jsb2Nrc1tpbmRleF0gPSBjdXJyZW50X2Jsb2NrOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcmV0dXJuZWQgbW9yZSBibG9ja3MgdGhhbiAiCisJCQkJCQkicmVxdWVzdGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlXQVJOX09OKDEpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl0YXJnZXQgPSBibGtzIC0gY291bnQgOworCWJsa19hbGxvY2F0ZWQgPSBjb3VudDsKKwlpZiAoIXRhcmdldCkKKwkJZ290byBhbGxvY2F0ZWQ7CisJLyogTm93IGFsbG9jYXRlIGRhdGEgYmxvY2tzICovCisJbWVtc2V0KCZhciwgMCwgc2l6ZW9mKGFyKSk7CisJYXIuaW5vZGUgPSBpbm9kZTsKKwlhci5nb2FsID0gZ29hbDsKKwlhci5sZW4gPSB0YXJnZXQ7CisJYXIubG9naWNhbCA9IGlibG9jazsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJLyogZW5hYmxlIGluLWNvcmUgcHJlYWxsb2NhdGlvbiBvbmx5IGZvciByZWd1bGFyIGZpbGVzICovCisJCWFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7CisKKwljdXJyZW50X2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgJmFyLCBlcnIpOworCWlmICh1bmxpa2VseShjdXJyZW50X2Jsb2NrICsgYXIubGVuID4gRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTKSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAorCQkJCSAiY3VycmVudF9ibG9jayAlbGx1ICsgYXIubGVuICVkID4gJWQhIiwKKwkJCQkgY3VycmVudF9ibG9jaywgYXIubGVuLAorCQkJCSBFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMpOworCQkqZXJyID0gLUVJTzsKKwkJZ290byBmYWlsZWRfb3V0OworCX0KKworCWlmICgqZXJyICYmICh0YXJnZXQgPT0gYmxrcykpIHsKKwkJLyoKKwkJICogaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkIGFuZCB3ZSBkaWRuJ3QgYWxsb2NhdGUKKwkJICogYW55IGJsb2NrcyBiZWZvcmUKKwkJICovCisJCWdvdG8gZmFpbGVkX291dDsKKwl9CisJaWYgKCEqZXJyKSB7CisJCWlmICh0YXJnZXQgPT0gYmxrcykgeworCQkJLyoKKwkJCSAqIHNhdmUgdGhlIG5ldyBibG9jayBudW1iZXIKKwkJCSAqIGZvciB0aGUgZmlyc3QgZGlyZWN0IGJsb2NrCisJCQkgKi8KKwkJCW5ld19ibG9ja3NbaW5kZXhdID0gY3VycmVudF9ibG9jazsKKwkJfQorCQlibGtfYWxsb2NhdGVkICs9IGFyLmxlbjsKKwl9CithbGxvY2F0ZWQ6CisJLyogdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIGRpcmVjdCBibG9ja3MgKi8KKwlyZXQgPSBibGtfYWxsb2NhdGVkOworCSplcnIgPSAwOworCXJldHVybiByZXQ7CitmYWlsZWRfb3V0OgorCWZvciAoaSA9IDA7IGkgPCBpbmRleDsgaSsrKQorCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld19ibG9ja3NbaV0sIDEsIDApOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJZXh0NF9hbGxvY19icmFuY2ggLSBhbGxvY2F0ZSBhbmQgc2V0IHVwIGEgY2hhaW4gb2YgYmxvY2tzLgorICoJQGhhbmRsZTogaGFuZGxlIGZvciB0aGlzIHRyYW5zYWN0aW9uCisgKglAaW5vZGU6IG93bmVyCisgKglAaW5kaXJlY3RfYmxrczogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbmRpcmVjdCBibG9ja3MKKyAqCUBibGtzOiBudW1iZXIgb2YgYWxsb2NhdGVkIGRpcmVjdCBibG9ja3MKKyAqCUBnb2FsOiBwcmVmZXJyZWQgcGxhY2UgZm9yIGFsbG9jYXRpb24KKyAqCUBvZmZzZXRzOiBvZmZzZXRzIChpbiB0aGUgYmxvY2tzKSB0byBzdG9yZSB0aGUgcG9pbnRlcnMgdG8gbmV4dC4KKyAqCUBicmFuY2g6IHBsYWNlIHRvIHN0b3JlIHRoZSBjaGFpbiBpbi4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBibG9ja3MsIHplcm9lcyBvdXQgYWxsIGJ1dCB0aGUgbGFzdCBvbmUsCisgKglsaW5rcyB0aGVtIGludG8gY2hhaW4gYW5kIChpZiB3ZSBhcmUgc3luY2hyb25vdXMpIHdyaXRlcyB0aGVtIHRvIGRpc2suCisgKglJbiBvdGhlciB3b3JkcywgaXQgcHJlcGFyZXMgYSBicmFuY2ggdGhhdCBjYW4gYmUgc3BsaWNlZCBvbnRvIHRoZQorICoJaW5vZGUuIEl0IHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBjaGFpbiBpbiB0aGUgYnJhbmNoW10sIGluCisgKgl0aGUgc2FtZSBmb3JtYXQgYXMgZXh0NF9nZXRfYnJhbmNoKCkgd291bGQgZG8uIFdlIGFyZSBjYWxsaW5nIGl0IGFmdGVyCisgKgl3ZSBoYWQgcmVhZCB0aGUgZXhpc3RpbmcgcGFydCBvZiBjaGFpbiBhbmQgcGFydGlhbCBwb2ludHMgdG8gdGhlIGxhc3QKKyAqCXRyaXBsZSBvZiB0aGF0IChvbmUgd2l0aCB6ZXJvIC0+a2V5KS4gVXBvbiB0aGUgZXhpdCB3ZSBoYXZlIHRoZSBzYW1lCisgKglwaWN0dXJlIGFzIGFmdGVyIHRoZSBzdWNjZXNzZnVsIGV4dDRfZ2V0X2Jsb2NrKCksIGV4Y2VwdCB0aGF0IGluIG9uZQorICoJcGxhY2UgY2hhaW4gaXMgZGlzY29ubmVjdGVkIC0gKmJyYW5jaC0+cCBpcyBzdGlsbCB6ZXJvICh3ZSBkaWQgbm90CisgKglzZXQgdGhlIGxhc3QgbGluayksIGJ1dCBicmFuY2gtPmtleSBjb250YWlucyB0aGUgbnVtYmVyIHRoYXQgc2hvdWxkCisgKgliZSBwbGFjZWQgaW50byAqYnJhbmNoLT5wIHRvIGZpbGwgdGhhdCBnYXAuCisgKgorICoJSWYgYWxsb2NhdGlvbiBmYWlscyB3ZSBmcmVlIGFsbCBibG9ja3Mgd2UndmUgYWxsb2NhdGVkIChhbmQgZm9yZ2V0CisgKgl0aGVpciBidWZmZXJfaGVhZHMpIGFuZCByZXR1cm4gdGhlIGVycm9yIHZhbHVlIHRoZSBmcm9tIGZhaWxlZAorICoJZXh0NF9hbGxvY19ibG9jaygpIChub3JtYWxseSAtRU5PU1BDKS4gT3RoZXJ3aXNlIHdlIHNldCB0aGUgY2hhaW4KKyAqCWFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9hbGxvY19icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgZXh0NF9sYmxrX3QgaWJsb2NrLCBpbnQgaW5kaXJlY3RfYmxrcywKKwkJCSAgICAgaW50ICpibGtzLCBleHQ0X2ZzYmxrX3QgZ29hbCwKKwkJCSAgICAgZXh0NF9sYmxrX3QgKm9mZnNldHMsIEluZGlyZWN0ICpicmFuY2gpCit7CisJaW50IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlpbnQgaSwgbiA9IDA7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlpbnQgbnVtOworCWV4dDRfZnNibGtfdCBuZXdfYmxvY2tzWzRdOworCWV4dDRfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCisJbnVtID0gZXh0NF9hbGxvY19ibG9ja3MoaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBnb2FsLCBpbmRpcmVjdF9ibGtzLAorCQkJCSpibGtzLCBuZXdfYmxvY2tzLCAmZXJyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYnJhbmNoWzBdLmtleSA9IGNwdV90b19sZTMyKG5ld19ibG9ja3NbMF0pOworCS8qCisJICogbWV0YWRhdGEgYmxvY2tzIGFuZCBkYXRhIGJsb2NrcyBhcmUgYWxsb2NhdGVkLgorCSAqLworCWZvciAobiA9IDE7IG4gPD0gaW5kaXJlY3RfYmxrczsgIG4rKykgeworCQkvKgorCQkgKiBHZXQgYnVmZmVyX2hlYWQgZm9yIHBhcmVudCBibG9jaywgemVybyBpdCBvdXQKKwkJICogYW5kIHNldCB0aGUgcG9pbnRlciB0byBuZXcgb25lLCB0aGVuIHNlbmQKKwkJICogcGFyZW50IHRvIGRpc2suCisJCSAqLworCQliaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgbmV3X2Jsb2Nrc1tuLTFdKTsKKwkJaWYgKHVubGlrZWx5KCFiaCkpIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCWJyYW5jaFtuXS5iaCA9IGJoOworCQlsb2NrX2J1ZmZlcihiaCk7CisJCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZ2V0X2NyZWF0ZV9hY2Nlc3MiKTsKKwkJZXJyID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCQlpZiAoZXJyKSB7CisJCQkvKiBEb24ndCBicmVsc2UoYmgpIGhlcmU7IGl0J3MgZG9uZSBpbgorCQkJICogZXh0NF9qb3VybmFsX2ZvcmdldCgpIGJlbG93ICovCisJCQl1bmxvY2tfYnVmZmVyKGJoKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIGJsb2Nrc2l6ZSk7CisJCWJyYW5jaFtuXS5wID0gKF9fbGUzMiAqKSBiaC0+Yl9kYXRhICsgb2Zmc2V0c1tuXTsKKwkJYnJhbmNoW25dLmtleSA9IGNwdV90b19sZTMyKG5ld19ibG9ja3Nbbl0pOworCQkqYnJhbmNoW25dLnAgPSBicmFuY2hbbl0ua2V5OworCQlpZiAobiA9PSBpbmRpcmVjdF9ibGtzKSB7CisJCQljdXJyZW50X2Jsb2NrID0gbmV3X2Jsb2Nrc1tuXTsKKwkJCS8qCisJCQkgKiBFbmQgb2YgY2hhaW4sIHVwZGF0ZSB0aGUgbGFzdCBuZXcgbWV0YWJsb2NrIG9mCisJCQkgKiB0aGUgY2hhaW4gdG8gcG9pbnQgdG8gdGhlIG5ldyBhbGxvY2F0ZWQKKwkJCSAqIGRhdGEgYmxvY2tzIG51bWJlcnMKKwkJCSAqLworCQkJZm9yIChpID0gMTsgaSA8IG51bTsgaSsrKQorCQkJCSooYnJhbmNoW25dLnAgKyBpKSA9IGNwdV90b19sZTMyKCsrY3VycmVudF9ibG9jayk7CisJCX0KKwkJQlVGRkVSX1RSQUNFKGJoLCAibWFya2luZyB1cHRvZGF0ZSIpOworCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwkJdW5sb2NrX2J1ZmZlcihiaCk7CisKKwkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBiaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJKmJsa3MgPSBudW07CisJcmV0dXJuIGVycjsKK2ZhaWxlZDoKKwkvKiBBbGxvY2F0aW9uIGZhaWxlZCwgZnJlZSB3aGF0IHdlIGFscmVhZHkgYWxsb2NhdGVkICovCisJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdfYmxvY2tzWzBdLCAxLCAwKTsKKwlmb3IgKGkgPSAxOyBpIDw9IG4gOyBpKyspIHsKKwkJLyoKKwkJICogYnJhbmNoW2ldLmJoIGlzIG5ld2x5IGFsbG9jYXRlZCwgc28gdGhlcmUgaXMgbm8KKwkJICogbmVlZCB0byByZXZva2UgdGhlIGJsb2NrLCB3aGljaCBpcyB3aHkgd2UgZG9uJ3QKKwkJICogbmVlZCB0byBzZXQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQS4KKwkJICovCisJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3X2Jsb2Nrc1tpXSwgMSwKKwkJCQkgRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQpOworCX0KKwlmb3IgKGkgPSBuKzE7IGkgPCBpbmRpcmVjdF9ibGtzOyBpKyspCisJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3X2Jsb2Nrc1tpXSwgMSwgMCk7CisKKwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld19ibG9ja3NbaV0sIG51bSwgMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGV4dDRfc3BsaWNlX2JyYW5jaCAtIHNwbGljZSB0aGUgYWxsb2NhdGVkIGJyYW5jaCBvbnRvIGlub2RlLgorICogQGhhbmRsZTogaGFuZGxlIGZvciB0aGlzIHRyYW5zYWN0aW9uCisgKiBAaW5vZGU6IG93bmVyCisgKiBAYmxvY2s6IChsb2dpY2FsKSBudW1iZXIgb2YgYmxvY2sgd2UgYXJlIGFkZGluZworICogQGNoYWluOiBjaGFpbiBvZiBpbmRpcmVjdCBibG9ja3MgKHdpdGggYSBtaXNzaW5nIGxpbmsgLSBzZWUKKyAqCWV4dDRfYWxsb2NfYnJhbmNoKQorICogQHdoZXJlOiBsb2NhdGlvbiBvZiBtaXNzaW5nIGxpbmsKKyAqIEBudW06ICAgbnVtYmVyIG9mIGluZGlyZWN0IGJsb2NrcyB3ZSBhcmUgYWRkaW5nCisgKiBAYmxrczogIG51bWJlciBvZiBkaXJlY3QgYmxvY2tzIHdlIGFyZSBhZGRpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBtaXNzaW5nIGxpbmsgYW5kIGRvZXMgYWxsIGhvdXNla2VlcGluZyBuZWVkZWQgaW4KKyAqIGlub2RlICgtPmlfYmxvY2tzLCBldGMuKS4gSW4gY2FzZSBvZiBzdWNjZXNzIHdlIGVuZCB1cCB3aXRoIHRoZSBmdWxsCisgKiBjaGFpbiB0byBuZXcgYmxvY2sgYW5kIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IGV4dDRfc3BsaWNlX2JyYW5jaChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgZXh0NF9sYmxrX3QgYmxvY2ssIEluZGlyZWN0ICp3aGVyZSwgaW50IG51bSwKKwkJCSAgICAgIGludCBibGtzKQoreworCWludCBpOworCWludCBlcnIgPSAwOworCWV4dDRfZnNibGtfdCBjdXJyZW50X2Jsb2NrOworCisJLyoKKwkgKiBJZiB3ZSdyZSBzcGxpY2luZyBpbnRvIGEgW3RkXWluZGlyZWN0IGJsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQorCSAqIGlub2RlKSB0aGVuIHdlIG5lZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byB0aGUgW3RkXWluZGlyZWN0IGJsb2NrCisJICogYmVmb3JlIHRoZSBzcGxpY2UuCisJICovCisJaWYgKHdoZXJlLT5iaCkgeworCQlCVUZGRVJfVFJBQ0Uod2hlcmUtPmJoLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOworCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIHdoZXJlLT5iaCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIFRoYXQncyBpdCAqLworCisJKndoZXJlLT5wID0gd2hlcmUtPmtleTsKKworCS8qCisJICogVXBkYXRlIHRoZSBob3N0IGJ1ZmZlcl9oZWFkIG9yIGlub2RlIHRvIHBvaW50IHRvIG1vcmUganVzdCBhbGxvY2F0ZWQKKwkgKiBkaXJlY3QgYmxvY2tzIGJsb2NrcworCSAqLworCWlmIChudW0gPT0gMCAmJiBibGtzID4gMSkgeworCQljdXJyZW50X2Jsb2NrID0gbGUzMl90b19jcHUod2hlcmUtPmtleSkgKyAxOworCQlmb3IgKGkgPSAxOyBpIDwgYmxrczsgaSsrKQorCQkJKih3aGVyZS0+cCArIGkpID0gY3B1X3RvX2xlMzIoY3VycmVudF9ibG9jaysrKTsKKwl9CisKKwkvKiBXZSBhcmUgZG9uZSB3aXRoIGF0b21pYyBzdHVmZiwgbm93IGRvIHRoZSByZXN0IG9mIGhvdXNla2VlcGluZyAqLworCS8qIGhhZCB3ZSBzcGxpY2VkIGl0IG9udG8gaW5kaXJlY3QgYmxvY2s/ICovCisJaWYgKHdoZXJlLT5iaCkgeworCQkvKgorCQkgKiBJZiB3ZSBzcGxpY2VkIGl0IG9udG8gYW4gaW5kaXJlY3QgYmxvY2ssIHdlIGhhdmVuJ3QKKwkJICogYWx0ZXJlZCB0aGUgaW5vZGUuICBOb3RlIGhvd2V2ZXIgdGhhdCBpZiBpdCBpcyBiZWluZyBzcGxpY2VkCisJCSAqIG9udG8gYW4gaW5kaXJlY3QgYmxvY2sgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBmaWxlICh0aGUKKwkJICogZmlsZSBpcyBncm93aW5nKSB0aGVuIHdlICp3aWxsKiBhbHRlciB0aGUgaW5vZGUgdG8gcmVmbGVjdAorCQkgKiB0aGUgbmV3IGlfc2l6ZS4gIEJ1dCB0aGF0IGlzIG5vdCBkb25lIGhlcmUgLSBpdCBpcyBkb25lIGluCisJCSAqIGdlbmVyaWNfY29tbWl0X3dyaXRlLT5fX21hcmtfaW5vZGVfZGlydHktPmV4dDRfZGlydHlfaW5vZGUuCisJCSAqLworCQlqYmRfZGVidWcoNSwgInNwbGljaW5nIGluZGlyZWN0IG9ubHlcbiIpOworCQlCVUZGRVJfVFJBQ0Uod2hlcmUtPmJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCB3aGVyZS0+YmgpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCX0gZWxzZSB7CisJCS8qCisJCSAqIE9LLCB3ZSBzcGxpY2VkIGl0IGludG8gdGhlIGlub2RlIGl0c2VsZiBvbiBhIGRpcmVjdCBibG9jay4KKwkJICovCisJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJamJkX2RlYnVnKDUsICJzcGxpY2luZyBkaXJlY3RcbiIpOworCX0KKwlyZXR1cm4gZXJyOworCitlcnJfb3V0OgorCWZvciAoaSA9IDE7IGkgPD0gbnVtOyBpKyspIHsKKwkJLyoKKwkJICogYnJhbmNoW2ldLmJoIGlzIG5ld2x5IGFsbG9jYXRlZCwgc28gdGhlcmUgaXMgbm8KKwkJICogbmVlZCB0byByZXZva2UgdGhlIGJsb2NrLCB3aGljaCBpcyB3aHkgd2UgZG9uJ3QKKwkJICogbmVlZCB0byBzZXQgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQS4KKwkJICovCisJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgd2hlcmVbaV0uYmgsIDAsIDEsCisJCQkJIEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTsKKwl9CisJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBsZTMyX3RvX2NwdSh3aGVyZVtudW1dLmtleSksCisJCQkgYmxrcywgMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGhlIGV4dDRfaW5kX21hcF9ibG9ja3MoKSBmdW5jdGlvbiBoYW5kbGVzIG5vbi1leHRlbnRzIGlub2RlcworICogKGkuZS4sIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBpbmRpcmVjdC9kb3VibGUtaW5kaXJlY3QgaV9ibG9ja3MKKyAqIHNjaGVtZSkgZm9yIGV4dDRfbWFwX2Jsb2NrcygpLgorICoKKyAqIEFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgc2ltcGxlOiBpZiB3ZSBoYXZlIHRvIGFsbG9jYXRlIHNvbWV0aGluZywgd2Ugd2lsbAorICogaGF2ZSB0byBnbyB0aGUgd2hvbGUgd2F5IHRvIGxlYWYuIFNvIGxldCdzIGRvIGl0IGJlZm9yZSBhdHRhY2hpbmcgYW55dGhpbmcKKyAqIHRvIHRyZWUsIHNldCBsaW5rYWdlIGJldHdlZW4gdGhlIG5ld2Jvcm4gYmxvY2tzLCB3cml0ZSB0aGVtIGlmIHN5bmMgaXMKKyAqIHJlcXVpcmVkLCByZWNoZWNrIHRoZSBwYXRoLCBmcmVlIGFuZCByZXBlYXQgaWYgY2hlY2sgZmFpbHMsIG90aGVyd2lzZQorICogc2V0IHRoZSBsYXN0IG1pc3NpbmcgbGluayAodGhhdCB3aWxsIHByb3RlY3QgdXMgZnJvbSBhbnkgdHJ1bmNhdGUtZ2VuZXJhdGVkCisgKiByZW1vdmFscyAtIGFsbCBibG9ja3Mgb24gdGhlIHBhdGggYXJlIGltbXVuZSBub3cpIGFuZCBwb3NzaWJseSBmb3JjZSB0aGUKKyAqIHdyaXRlIG9uIHRoZSBwYXJlbnQgYmxvY2suCisgKiBUaGF0IGhhcyBhIG5pY2UgYWRkaXRpb25hbCBwcm9wZXJ0eTogbm8gc3BlY2lhbCByZWNvdmVyeSBmcm9tIHRoZSBmYWlsZWQKKyAqIGFsbG9jYXRpb25zIGlzIG5lZWRlZCAtIHdlIHNpbXBseSByZWxlYXNlIGJsb2NrcyBhbmQgZG8gbm90IHRvdWNoIGFueXRoaW5nCisgKiByZWFjaGFibGUgZnJvbSBpbm9kZS4KKyAqCisgKiBgaGFuZGxlJyBjYW4gYmUgTlVMTCBpZiBjcmVhdGUgPT0gMC4KKyAqCisgKiByZXR1cm4gPiAwLCAjIG9mIGJsb2NrcyBtYXBwZWQgb3IgYWxsb2NhdGVkLgorICogcmV0dXJuID0gMCwgaWYgcGxhaW4gbG9va3VwIGZhaWxlZC4KKyAqIHJldHVybiA8IDAsIGVycm9yIGNhc2UuCisgKgorICogVGhlIGV4dDRfaW5kX2dldF9ibG9ja3MoKSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGgKKyAqIGRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pIGlmIGFsbG9jYXRpbmcgZmlsZXN5c3RlbQorICogYmxvY2tzIChpLmUuLCBmbGFncyBoYXMgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSBzZXQpIG9yCisgKiBkb3duX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pIGlmIG5vdCBhbGxvY2F0aW5nIGZpbGUgc3lzdGVtCisgKiBibG9ja3MuCisgKi8KK2ludCBleHQ0X2luZF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsCisJCQlpbnQgZmxhZ3MpCit7CisJaW50IGVyciA9IC1FSU87CisJZXh0NF9sYmxrX3Qgb2Zmc2V0c1s0XTsKKwlJbmRpcmVjdCBjaGFpbls0XTsKKwlJbmRpcmVjdCAqcGFydGlhbDsKKwlleHQ0X2ZzYmxrX3QgZ29hbDsKKwlpbnQgaW5kaXJlY3RfYmxrczsKKwlpbnQgYmxvY2tzX3RvX2JvdW5kYXJ5ID0gMDsKKwlpbnQgZGVwdGg7CisJaW50IGNvdW50ID0gMDsKKwlleHQ0X2ZzYmxrX3QgZmlyc3RfYmxvY2sgPSAwOworCisJdHJhY2VfZXh0NF9pbmRfbWFwX2Jsb2Nrc19lbnRlcihpbm9kZSwgbWFwLT5tX2xibGssIG1hcC0+bV9sZW4sIGZsYWdzKTsKKwlKX0FTU0VSVCghKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSk7CisJSl9BU1NFUlQoaGFuZGxlICE9IE5VTEwgfHwgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMCk7CisJZGVwdGggPSBleHQ0X2Jsb2NrX3RvX3BhdGgoaW5vZGUsIG1hcC0+bV9sYmxrLCBvZmZzZXRzLAorCQkJCSAgICZibG9ja3NfdG9fYm91bmRhcnkpOworCisJaWYgKGRlcHRoID09IDApCisJCWdvdG8gb3V0OworCisJcGFydGlhbCA9IGV4dDRfZ2V0X2JyYW5jaChpbm9kZSwgZGVwdGgsIG9mZnNldHMsIGNoYWluLCAmZXJyKTsKKworCS8qIFNpbXBsZXN0IGNhc2UgLSBibG9jayBmb3VuZCwgbm8gYWxsb2NhdGlvbiBuZWVkZWQgKi8KKwlpZiAoIXBhcnRpYWwpIHsKKwkJZmlyc3RfYmxvY2sgPSBsZTMyX3RvX2NwdShjaGFpbltkZXB0aCAtIDFdLmtleSk7CisJCWNvdW50Kys7CisJCS8qbWFwIG1vcmUgYmxvY2tzKi8KKwkJd2hpbGUgKGNvdW50IDwgbWFwLT5tX2xlbiAmJiBjb3VudCA8PSBibG9ja3NfdG9fYm91bmRhcnkpIHsKKwkJCWV4dDRfZnNibGtfdCBibGs7CisKKwkJCWJsayA9IGxlMzJfdG9fY3B1KCooY2hhaW5bZGVwdGgtMV0ucCArIGNvdW50KSk7CisKKwkJCWlmIChibGsgPT0gZmlyc3RfYmxvY2sgKyBjb3VudCkKKwkJCQljb3VudCsrOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWdvdG8gZ290X2l0OworCX0KKworCS8qIE5leHQgc2ltcGxlIGNhc2UgLSBwbGFpbiBsb29rdXAgb3IgZmFpbGVkIHJlYWQgb2YgaW5kaXJlY3QgYmxvY2sgKi8KKwlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMCB8fCBlcnIgPT0gLUVJTykKKwkJZ290byBjbGVhbnVwOworCisJLyoKKwkgKiBPa2F5LCB3ZSBuZWVkIHRvIGRvIGJsb2NrIGFsbG9jYXRpb24uCisJKi8KKwlnb2FsID0gZXh0NF9maW5kX2dvYWwoaW5vZGUsIG1hcC0+bV9sYmxrLCBwYXJ0aWFsKTsKKworCS8qIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5lZWQgdG8gYWxsb2NhdGUgZm9yIFtkLHRdaW5kaXJlY3QgYmxvY2tzICovCisJaW5kaXJlY3RfYmxrcyA9IChjaGFpbiArIGRlcHRoKSAtIHBhcnRpYWwgLSAxOworCisJLyoKKwkgKiBOZXh0IGxvb2sgdXAgdGhlIGluZGlyZWN0IG1hcCB0byBjb3VudCB0aGUgdG90b2FsIG51bWJlciBvZgorCSAqIGRpcmVjdCBibG9ja3MgdG8gYWxsb2NhdGUgZm9yIHRoaXMgYnJhbmNoLgorCSAqLworCWNvdW50ID0gZXh0NF9ibGtzX3RvX2FsbG9jYXRlKHBhcnRpYWwsIGluZGlyZWN0X2Jsa3MsCisJCQkJICAgICAgbWFwLT5tX2xlbiwgYmxvY2tzX3RvX2JvdW5kYXJ5KTsKKwkvKgorCSAqIEJsb2NrIG91dCBleHQ0X3RydW5jYXRlIHdoaWxlIHdlIGFsdGVyIHRoZSB0cmVlCisJICovCisJZXJyID0gZXh0NF9hbGxvY19icmFuY2goaGFuZGxlLCBpbm9kZSwgbWFwLT5tX2xibGssIGluZGlyZWN0X2Jsa3MsCisJCQkJJmNvdW50LCBnb2FsLAorCQkJCW9mZnNldHMgKyAocGFydGlhbCAtIGNoYWluKSwgcGFydGlhbCk7CisKKwkvKgorCSAqIFRoZSBleHQ0X3NwbGljZV9icmFuY2ggY2FsbCB3aWxsIGZyZWUgYW5kIGZvcmdldCBhbnkgYnVmZmVycworCSAqIG9uIHRoZSBuZXcgY2hhaW4gaWYgdGhlcmUgaXMgYSBmYWlsdXJlLCBidXQgdGhhdCByaXNrcyB1c2luZworCSAqIHVwIHRyYW5zYWN0aW9uIGNyZWRpdHMsIGVzcGVjaWFsbHkgZm9yIGJpdG1hcHMgd2hlcmUgdGhlCisJICogY3JlZGl0cyBjYW5ub3QgYmUgcmV0dXJuZWQuICBDYW4gd2UgaGFuZGxlIHRoaXMgc29tZWhvdz8gIFdlCisJICogbWF5IG5lZWQgdG8gcmV0dXJuIC1FQUdBSU4gdXB3YXJkcyBpbiB0aGUgd29yc3QgY2FzZS4gIC0tc2N0CisJICovCisJaWYgKCFlcnIpCisJCWVyciA9IGV4dDRfc3BsaWNlX2JyYW5jaChoYW5kbGUsIGlub2RlLCBtYXAtPm1fbGJsaywKKwkJCQkJIHBhcnRpYWwsIGluZGlyZWN0X2Jsa3MsIGNvdW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIGNsZWFudXA7CisKKwltYXAtPm1fZmxhZ3MgfD0gRVhUNF9NQVBfTkVXOworCisJZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7Citnb3RfaXQ6CisJbWFwLT5tX2ZsYWdzIHw9IEVYVDRfTUFQX01BUFBFRDsKKwltYXAtPm1fcGJsayA9IGxlMzJfdG9fY3B1KGNoYWluW2RlcHRoLTFdLmtleSk7CisJbWFwLT5tX2xlbiA9IGNvdW50OworCWlmIChjb3VudCA+IGJsb2Nrc190b19ib3VuZGFyeSkKKwkJbWFwLT5tX2ZsYWdzIHw9IEVYVDRfTUFQX0JPVU5EQVJZOworCWVyciA9IGNvdW50OworCS8qIENsZWFuIHVwIGFuZCBleGl0ICovCisJcGFydGlhbCA9IGNoYWluICsgZGVwdGggLSAxOwkvKiB0aGUgd2hvbGUgY2hhaW4gKi8KK2NsZWFudXA6CisJd2hpbGUgKHBhcnRpYWwgPiBjaGFpbikgeworCQlCVUZGRVJfVFJBQ0UocGFydGlhbC0+YmgsICJjYWxsIGJyZWxzZSIpOworCQlicmVsc2UocGFydGlhbC0+YmgpOworCQlwYXJ0aWFsLS07CisJfQorb3V0OgorCXRyYWNlX2V4dDRfaW5kX21hcF9ibG9ja3NfZXhpdChpbm9kZSwgbWFwLT5tX2xibGssCisJCQkJbWFwLT5tX3BibGssIG1hcC0+bV9sZW4sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIE9fRElSRUNUIGZvciBleHQzIChvciBpbmRpcmVjdCBtYXApIGJhc2VkIGZpbGVzCisgKgorICogSWYgdGhlIE9fRElSRUNUIHdyaXRlIHdpbGwgZXh0ZW5kIHRoZSBmaWxlIHRoZW4gYWRkIHRoaXMgaW5vZGUgdG8gdGhlCisgKiBvcnBoYW4gbGlzdC4gIFNvIHJlY292ZXJ5IHdpbGwgdHJ1bmNhdGUgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgc2l6ZQorICogaWYgdGhlIG1hY2hpbmUgY3Jhc2hlcyBkdXJpbmcgdGhlIHdyaXRlLgorICoKKyAqIElmIHRoZSBPX0RJUkVDVCB3cml0ZSBpcyBpbnRhbnRpYXRpbmcgaG9sZXMgaW5zaWRlIGlfc2l6ZSBhbmQgdGhlIG1hY2hpbmUKKyAqIGNyYXNoZXMgdGhlbiBzdGFsZSBkaXNrIGRhdGEgX21heV8gYmUgZXhwb3NlZCBpbnNpZGUgdGhlIGZpbGUuIEJ1dCBjdXJyZW50CisgKiBWRlMgY29kZSBmYWxscyBiYWNrIGludG8gYnVmZmVyZWQgcGF0aCBpbiB0aGF0IGNhc2Ugc28gd2UgYXJlIHNhZmUuCisgKi8KK3NzaXplX3QgZXh0NF9pbmRfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAorCQkJICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCisJCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3NpemVfdCByZXQ7CisJaW50IG9ycGhhbiA9IDA7CisJc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWludCByZXRyaWVzID0gMDsKKworCWlmIChydyA9PSBXUklURSkgeworCQlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OworCisJCWlmIChmaW5hbF9zaXplID4gaW5vZGUtPmlfc2l6ZSkgeworCQkJLyogQ3JlZGl0cyBmb3Igc2IgKyBpbm9kZSB3cml0ZSAqLworCQkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAyKTsKKwkJCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJb3JwaGFuID0gMTsKKwkJCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKKwkJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCX0KKwl9CisKK3JldHJ5OgorCWlmIChydyA9PSBSRUFEICYmIGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkgeworCQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KSkpIHsKKwkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJCWV4dDRfZmx1c2hfY29tcGxldGVkX0lPKGlub2RlKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQl9CisJCXJldCA9IF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwKKwkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpb3YsCisJCQkJIG9mZnNldCwgbnJfc2VncywgZXh0NF9nZXRfYmxvY2spOworCisJCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKKwkJCWxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJCWxvZmZfdCBlbmQgPSBvZmZzZXQgKyBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisKKwkJCWlmIChlbmQgPiBpc2l6ZSkKKwkJCQlleHQ0X3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7CisJCX0KKwl9CisJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCisJCWdvdG8gcmV0cnk7CisKKwlpZiAob3JwaGFuKSB7CisJCWludCBlcnI7CisKKwkJLyogQ3JlZGl0cyBmb3Igc2IgKyBpbm9kZSB3cml0ZSAqLworCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIpOworCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCS8qIFRoaXMgaXMgcmVhbGx5IGJhZCBsdWNrLiBXZSd2ZSB3cml0dGVuIHRoZSBkYXRhCisJCQkgKiBidXQgY2Fubm90IGV4dGVuZCBpX3NpemUuIEJhaWwgb3V0IGFuZCBwcmV0ZW5kCisJCQkgKiB0aGUgd3JpdGUgZmFpbGVkLi4uICovCisJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCQlpZiAoaW5vZGUtPmlfbmxpbmspCisJCQkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKKworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGlub2RlLT5pX25saW5rKQorCQkJZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpOworCQlpZiAocmV0ID4gMCkgeworCQkJbG9mZl90IGVuZCA9IG9mZnNldCArIHJldDsKKwkJCWlmIChlbmQgPiBpbm9kZS0+aV9zaXplKSB7CisJCQkJZWktPmlfZGlza3NpemUgPSBlbmQ7CisJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBlbmQpOworCQkJCS8qCisJCQkJICogV2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgcG9zaXRpdmUgYHJldCcKKwkJCQkgKiBoZXJlIGR1ZSB0byBub24temVyby1sZW5ndGggSS9PLCBzbyB0aGVyZSdzCisJCQkJICogbm8gd2F5IG9mIHJlcG9ydGluZyBlcnJvciByZXR1cm5zIGZyb20KKwkJCQkgKiBleHQ0X21hcmtfaW5vZGVfZGlydHkoKSB0byB1c2Vyc3BhY2UuICBTbworCQkJCSAqIGlnbm9yZSBpdC4KKwkJCQkgKi8KKwkJCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJCQl9CisJCX0KKwkJZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gZXJyOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQorICogdG8gYWxsb2NhdGUgYSBuZXcgYmxvY2sgYXQgQGxibG9ja3MgZm9yIG5vbiBleHRlbnQgZmlsZSBiYXNlZCBmaWxlCisgKi8KK2ludCBleHQ0X2luZF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBsYmxvY2spCit7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCXNlY3Rvcl90IGRpbmRfbWFzayA9IH4oKHNlY3Rvcl90KUVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpIC0gMSk7CisJaW50IGJsa19iaXRzOworCisJaWYgKGxibG9jayA8IEVYVDRfTkRJUl9CTE9DS1MpCisJCXJldHVybiAwOworCisJbGJsb2NrIC09IEVYVDRfTkRJUl9CTE9DS1M7CisKKwlpZiAoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJiYKKwkgICAgKGxibG9jayAmIGRpbmRfbWFzaykgPT0gZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jaykgeworCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbisrOworCQlyZXR1cm4gMDsKKwl9CisJZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jayA9IGxibG9jayAmIGRpbmRfbWFzazsKKwllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDE7CisJYmxrX2JpdHMgPSBvcmRlcl9iYXNlXzIobGJsb2NrKTsKKwlyZXR1cm4gKGJsa19iaXRzIC8gRVhUNF9BRERSX1BFUl9CTE9DS19CSVRTKGlub2RlLT5pX3NiKSkgKyAxOworfQorCitpbnQgZXh0NF9pbmRfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2NrcywgaW50IGNodW5rKQoreworCWludCBpbmRpcmVjdHM7CisKKwkvKiBpZiBucmJsb2NrcyBhcmUgY29udGlndW91cyAqLworCWlmIChjaHVuaykgeworCQkvKgorCQkgKiBXaXRoIE4gY29udGlndW91cyBkYXRhIGJsb2Nrcywgd2UgbmVlZCBhdCBtb3N0CisJCSAqIE4vRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikgKyAxIGluZGlyZWN0IGJsb2NrcywKKwkJICogMiBkaW5kaXJlY3QgYmxvY2tzLCBhbmQgMSB0aW5kaXJlY3QgYmxvY2sKKwkJICovCisJCXJldHVybiBESVZfUk9VTkRfVVAobnJibG9ja3MsCisJCQkJICAgIEVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpKSArIDQ7CisJfQorCS8qCisJICogaWYgbnJibG9ja3MgYXJlIG5vdCBjb250aWd1b3VzLCB3b3JzZSBjYXNlLCBlYWNoIGJsb2NrIHRvdWNoCisJICogYSBpbmRpcmVjdCBibG9jaywgYW5kIGVhY2ggaW5kaXJlY3QgYmxvY2sgdG91Y2ggYSBkb3VibGUgaW5kaXJlY3QKKwkgKiBibG9jaywgcGx1cyBhIHRyaXBsZSBpbmRpcmVjdCBibG9jaworCSAqLworCWluZGlyZWN0cyA9IG5yYmxvY2tzICogMiArIDE7CisJcmV0dXJuIGluZGlyZWN0czsKK30KKworLyoKKyAqIFRydW5jYXRlIHRyYW5zYWN0aW9ucyBjYW4gYmUgY29tcGxleCBhbmQgYWJzb2x1dGVseSBodWdlLiAgU28gd2UgbmVlZCB0bworICogYmUgYWJsZSB0byByZXN0YXJ0IHRoZSB0cmFuc2FjdGlvbiBhdCBhIGNvbnZlbnRpZW50IGNoZWNrcG9pbnQgdG8gbWFrZQorICogc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgam91cm5hbC4KKyAqCisgKiBzdGFydF90cmFuc2FjdGlvbiBnZXRzIHVzIGEgbmV3IGhhbmRsZSBmb3IgYSB0cnVuY2F0ZSB0cmFuc2FjdGlvbiwKKyAqIGFuZCBleHRlbmRfdHJhbnNhY3Rpb24gdHJpZXMgdG8gZXh0ZW5kIHRoZSBleGlzdGluZyBvbmUgYSBiaXQuICBJZgorICogZXh0ZW5kIGZhaWxzLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUgZmFpbHVyZSB1cCBhbmQgcmVzdGFydCB0aGUKKyAqIHRyYW5zYWN0aW9uIGluIHRoZSB0b3AtbGV2ZWwgdHJ1bmNhdGUgbG9vcC4gLS1zY3QKKyAqLworc3RhdGljIGhhbmRsZV90ICpzdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWhhbmRsZV90ICpyZXN1bHQ7CisKKwlyZXN1bHQgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGV4dDRfYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpOworCWlmICghSVNfRVJSKHJlc3VsdCkpCisJCXJldHVybiByZXN1bHQ7CisKKwlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgUFRSX0VSUihyZXN1bHQpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVHJ5IHRvIGV4dGVuZCB0aGlzIHRyYW5zYWN0aW9uIGZvciB0aGUgcHVycG9zZXMgb2YgdHJ1bmNhdGlvbi4KKyAqCisgKiBSZXR1cm5zIDAgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgbW9yZSByb29tLiAgSWYgd2UgY2FuJ3QgY3JlYXRlIG1vcmUKKyAqIHJvb20sIGFuZCB0aGUgdHJhbnNhY3Rpb24gbXVzdCBiZSByZXN0YXJ0ZWQgd2UgcmV0dXJuIDEuCisgKi8KK3N0YXRpYyBpbnQgdHJ5X3RvX2V4dGVuZF90cmFuc2FjdGlvbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmICghZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKKwkJcmV0dXJuIDA7CisJaWYgKGV4dDRfaGFuZGxlX2hhc19lbm91Z2hfY3JlZGl0cyhoYW5kbGUsIEVYVDRfUkVTRVJWRV9UUkFOU19CTE9DS1MrMSkpCisJCXJldHVybiAwOworCWlmICghZXh0NF9qb3VybmFsX2V4dGVuZChoYW5kbGUsIGV4dDRfYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFByb2JhYmx5IGl0IHNob3VsZCBiZSBhIGxpYnJhcnkgZnVuY3Rpb24uLi4gc2VhcmNoIGZvciBmaXJzdCBub24temVybyB3b3JkCisgKiBvciBtZW1jbXAgd2l0aCB6ZXJvX3BhZ2UsIHdoYXRldmVyIGlzIGJldHRlciBmb3IgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuCisgKiBMaW51cz8KKyAqLworc3RhdGljIGlubGluZSBpbnQgYWxsX3plcm9lcyhfX2xlMzIgKnAsIF9fbGUzMiAqcSkKK3sKKwl3aGlsZSAocCA8IHEpCisJCWlmICgqcCsrKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICoJZXh0NF9maW5kX3NoYXJlZCAtIGZpbmQgdGhlIGluZGlyZWN0IGJsb2NrcyBmb3IgcGFydGlhbCB0cnVuY2F0aW9uLgorICoJQGlub2RlOgkgIGlub2RlIGluIHF1ZXN0aW9uCisgKglAZGVwdGg6CSAgZGVwdGggb2YgdGhlIGFmZmVjdGVkIGJyYW5jaAorICoJQG9mZnNldHM6IG9mZnNldHMgb2YgcG9pbnRlcnMgaW4gdGhhdCBicmFuY2ggKHNlZSBleHQ0X2Jsb2NrX3RvX3BhdGgpCisgKglAY2hhaW46CSAgcGxhY2UgdG8gc3RvcmUgdGhlIHBvaW50ZXJzIHRvIHBhcnRpYWwgaW5kaXJlY3QgYmxvY2tzCisgKglAdG9wOgkgIHBsYWNlIHRvIHRoZSAoZGV0YWNoZWQpIHRvcCBvZiBicmFuY2gKKyAqCisgKglUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZXh0NF90cnVuY2F0ZSgpLgorICoKKyAqCVdoZW4gd2UgZG8gdHJ1bmNhdGUoKSB3ZSBtYXkgaGF2ZSB0byBjbGVhbiB0aGUgZW5kcyBvZiBzZXZlcmFsCisgKglpbmRpcmVjdCBibG9ja3MgYnV0IGxlYXZlIHRoZSBibG9ja3MgdGhlbXNlbHZlcyBhbGl2ZS4gQmxvY2sgaXMKKyAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVycmVkCisgKglmcm9tIGl0IChhbmQgaXQgaXMgb24gdGhlIHBhdGggdG8gdGhlIGZpcnN0IGNvbXBsZXRlbHkgdHJ1bmNhdGVkCisgKglkYXRhIGJsb2NrLCBpbmRlZWQpLiAgV2UgaGF2ZSB0byBmcmVlIHRoZSB0b3Agb2YgdGhhdCBwYXRoIGFsb25nCisgKgl3aXRoIGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXRoLiBTaW5jZSBubyBhbGxvY2F0aW9uCisgKglwYXN0IHRoZSB0cnVuY2F0aW9uIHBvaW50IGlzIHBvc3NpYmxlIHVudGlsIGV4dDRfdHJ1bmNhdGUoKQorICoJZmluaXNoZXMsIHdlIG1heSBzYWZlbHkgZG8gdGhlIGxhdHRlciwgYnV0IHRvcCBvZiBicmFuY2ggbWF5CisgKglyZXF1aXJlIHNwZWNpYWwgYXR0ZW50aW9uIC0gcGFnZW91dCBiZWxvdyB0aGUgdHJ1bmNhdGlvbiBwb2ludAorICoJbWlnaHQgdHJ5IHRvIHBvcHVsYXRlIGl0LgorICoKKyAqCVdlIGF0b21pY2FsbHkgZGV0YWNoIHRoZSB0b3Agb2YgYnJhbmNoIGZyb20gdGhlIHRyZWUsIHN0b3JlIHRoZQorICoJYmxvY2sgbnVtYmVyIG9mIGl0cyByb290IGluICpAdG9wLCBwb2ludGVycyB0byBidWZmZXJfaGVhZHMgb2YKKyAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgYmxvY2tzIC0gaW4gQGNoYWluW10uYmggYW5kIHBvaW50ZXJzIHRvCisgKgl0aGVpciBsYXN0IGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSByZW1vdmVkIC0gaW4KKyAqCUBjaGFpbltdLnAuIFJldHVybiB2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBsYXN0IGZpbGxlZCBlbGVtZW50CisgKglvZiBAY2hhaW4uCisgKgorICoJVGhlIHdvcmsgbGVmdCB0byBjYWxsZXIgdG8gZG8gdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHN1YnRyZWVzOgorICoJCWEpIGZyZWUgdGhlIHN1YnRyZWUgc3RhcnRpbmcgZnJvbSAqQHRvcAorICoJCWIpIGZyZWUgdGhlIHN1YnRyZWVzIHdob3NlIHJvb3RzIGFyZSBzdG9yZWQgaW4KKyAqCQkJKEBjaGFpbltpXS5wKzEgLi4gZW5kIG9mIEBjaGFpbltpXS5iaC0+Yl9kYXRhKQorICoJCWMpIGZyZWUgdGhlIHN1YnRyZWVzIGdyb3dpbmcgZnJvbSB0aGUgaW5vZGUgcGFzdCB0aGUgQGNoYWluWzBdLgorICoJCQkobm8gcGFydGlhbGx5IHRydW5jYXRlZCBzdHVmZiB0aGVyZSkuICAqLworCitzdGF0aWMgSW5kaXJlY3QgKmV4dDRfZmluZF9zaGFyZWQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRlcHRoLAorCQkJCSAgZXh0NF9sYmxrX3Qgb2Zmc2V0c1s0XSwgSW5kaXJlY3QgY2hhaW5bNF0sCisJCQkJICBfX2xlMzIgKnRvcCkKK3sKKwlJbmRpcmVjdCAqcGFydGlhbCwgKnA7CisJaW50IGssIGVycjsKKworCSp0b3AgPSAwOworCS8qIE1ha2UgayBpbmRleCB0aGUgZGVlcGVzdCBub24tbnVsbCBvZmZzZXQgKyAxICovCisJZm9yIChrID0gZGVwdGg7IGsgPiAxICYmICFvZmZzZXRzW2stMV07IGstLSkKKwkJOworCXBhcnRpYWwgPSBleHQ0X2dldF9icmFuY2goaW5vZGUsIGssIG9mZnNldHMsIGNoYWluLCAmZXJyKTsKKwkvKiBXcml0ZXI6IHBvaW50ZXJzICovCisJaWYgKCFwYXJ0aWFsKQorCQlwYXJ0aWFsID0gY2hhaW4gKyBrLTE7CisJLyoKKwkgKiBJZiB0aGUgYnJhbmNoIGFjcXVpcmVkIGNvbnRpbnVhdGlvbiBzaW5jZSB3ZSd2ZSBsb29rZWQgYXQgaXQgLQorCSAqIGZpbmUsIGl0IHNob3VsZCBhbGwgc3Vydml2ZSBhbmQgKG5ldykgdG9wIGRvZXNuJ3QgYmVsb25nIHRvIHVzLgorCSAqLworCWlmICghcGFydGlhbC0+a2V5ICYmICpwYXJ0aWFsLT5wKQorCQkvKiBXcml0ZXI6IGVuZCAqLworCQlnb3RvIG5vX3RvcDsKKwlmb3IgKHAgPSBwYXJ0aWFsOyAocCA+IGNoYWluKSAmJiBhbGxfemVyb2VzKChfX2xlMzIgKikgcC0+YmgtPmJfZGF0YSwgcC0+cCk7IHAtLSkKKwkJOworCS8qCisJICogT0ssIHdlJ3ZlIGZvdW5kIHRoZSBsYXN0IGJsb2NrIHRoYXQgbXVzdCBzdXJ2aXZlLiBUaGUgcmVzdCBvZiBvdXIKKwkgKiBicmFuY2ggc2hvdWxkIGJlIGRldGFjaGVkIGJlZm9yZSB1bmxvY2tpbmcuIEhvd2V2ZXIsIGlmIHRoYXQgcmVzdAorCSAqIG9mIGJyYW5jaCBpcyBhbGwgb3VycyBhbmQgZG9lcyBub3QgZ3JvdyBpbW1lZGlhdGVseSBmcm9tIHRoZSBpbm9kZQorCSAqIGl0J3MgZWFzaWVyIHRvIGNoZWF0IGFuZCBqdXN0IGRlY3JlbWVudCBwYXJ0aWFsLT5wLgorCSAqLworCWlmIChwID09IGNoYWluICsgayAtIDEgJiYgcCA+IGNoYWluKSB7CisJCXAtPnAtLTsKKwl9IGVsc2UgeworCQkqdG9wID0gKnAtPnA7CisJCS8qIE5vcGUsIGRvbid0IGRvIHRoaXMgaW4gZXh0NC4gIE11c3QgbGVhdmUgdGhlIHRyZWUgaW50YWN0ICovCisjaWYgMAorCQkqcC0+cCA9IDA7CisjZW5kaWYKKwl9CisJLyogV3JpdGVyOiBlbmQgKi8KKworCXdoaWxlIChwYXJ0aWFsID4gcCkgeworCQlicmVsc2UocGFydGlhbC0+YmgpOworCQlwYXJ0aWFsLS07CisJfQorbm9fdG9wOgorCXJldHVybiBwYXJ0aWFsOworfQorCisvKgorICogWmVybyBhIG51bWJlciBvZiBibG9jayBwb2ludGVycyBpbiBlaXRoZXIgYW4gaW5vZGUgb3IgYW4gaW5kaXJlY3QgYmxvY2suCisgKiBJZiB3ZSByZXN0YXJ0IHRoZSB0cmFuc2FjdGlvbiB3ZSBtdXN0IGFnYWluIGdldCB3cml0ZSBhY2Nlc3MgdG8gdGhlCisgKiBpbmRpcmVjdCBibG9jayBmb3IgZnVydGhlciBtb2RpZmljYXRpb24uCisgKgorICogV2UgcmVsZWFzZSBgY291bnQnIGJsb2NrcyBvbiBkaXNrLCBidXQgKGxhc3QgLSBmaXJzdCkgbWF5IGJlIGdyZWF0ZXIKKyAqIHRoYW4gYGNvdW50JyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBob2xlcyBpbiB0aGVyZS4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGludmFsaWQgYmxvY2sgcmFuZ2UKKyAqIGFuZCA8IDAgb24gZmF0YWwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgICAgZXh0NF9mc2Jsa190IGJsb2NrX3RvX2ZyZWUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIF9fbGUzMiAqZmlyc3QsCisJCQkgICAgIF9fbGUzMiAqbGFzdCkKK3sKKwlfX2xlMzIgKnA7CisJaW50CWZsYWdzID0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQgfCBFWFQ0X0ZSRUVfQkxPQ0tTX1ZBTElEQVRFRDsKKwlpbnQJZXJyOworCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJZmxhZ3MgfD0gRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQTsKKworCWlmICghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLCBibG9ja190b19mcmVlLAorCQkJCSAgIGNvdW50KSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAiYXR0ZW1wdCB0byBjbGVhciBpbnZhbGlkICIKKwkJCQkgImJsb2NrcyAlbGx1IGxlbiAlbHUiLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBibG9ja190b19mcmVlLCBjb3VudCk7CisJCXJldHVybiAxOworCX0KKworCWlmICh0cnlfdG9fZXh0ZW5kX3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpKSB7CisJCWlmIChiaCkgeworCQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCQkJaWYgKHVubGlrZWx5KGVycikpCisJCQkJZ290byBvdXRfZXJyOworCQl9CisJCWVyciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9lcnI7CisJCWVyciA9IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGUsIGlub2RlLAorCQkJCQlleHQ0X2Jsb2Nrc19mb3JfdHJ1bmNhdGUoaW5vZGUpKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9lcnI7CisJCWlmIChiaCkgeworCQkJQlVGRkVSX1RSQUNFKGJoLCAicmV0YWtpbmcgd3JpdGUgYWNjZXNzIik7CisJCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKworCWZvciAocCA9IGZpcnN0OyBwIDwgbGFzdDsgcCsrKQorCQkqcCA9IDA7CisKKwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrX3RvX2ZyZWUsIGNvdW50LCBmbGFncyk7CisJcmV0dXJuIDA7CitvdXRfZXJyOgorCWV4dDRfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogZXh0NF9mcmVlX2RhdGEgLSBmcmVlIGEgbGlzdCBvZiBkYXRhIGJsb2NrcworICogQGhhbmRsZToJaGFuZGxlIGZvciB0aGlzIHRyYW5zYWN0aW9uCisgKiBAaW5vZGU6CWlub2RlIHdlIGFyZSBkZWFsaW5nIHdpdGgKKyAqIEB0aGlzX2JoOglpbmRpcmVjdCBidWZmZXJfaGVhZCB3aGljaCBjb250YWlucyAqQGZpcnN0IGFuZCAqQGxhc3QKKyAqIEBmaXJzdDoJYXJyYXkgb2YgYmxvY2sgbnVtYmVycworICogQGxhc3Q6CXBvaW50cyBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQgb2YgYXJyYXkKKyAqCisgKiBXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhhdCBhcnJheSAobnVtYmVycyBhcmUgc3RvcmVkIGFzCisgKiBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBXZSBhY2N1bXVsYXRlIGNvbnRpZ3VvdXMgcnVucyBvZiBibG9ja3MgdG8gZnJlZS4gIENvbnZlbmllbnRseSwgaWYgdGhlc2UKKyAqIGJsb2NrcyBhcmUgY29udGlndW91cyB0aGVuIHJlbGVhc2luZyB0aGVtIGF0IG9uZSB0aW1lIHdpbGwgb25seSBhZmZlY3Qgb25lCisgKiBvciB0d28gYml0bWFwIGJsb2NrcyAoKyBncm91cCBkZXNjcmlwdG9yKHMpIGFuZCBzdXBlcmJsb2NrKSBhbmQgd2Ugd29uJ3QKKyAqIGFjdHVhbGx5IHVzZSBhIGxvdCBvZiBqb3VybmFsIHNwYWNlLgorICoKKyAqIEB0aGlzX2JoIHdpbGwgYmUgJU5VTEwgaWYgQGZpcnN0IGFuZCBAbGFzdCBwb2ludCBpbnRvIHRoZSBpbm9kZSdzIGRpcmVjdAorICogYmxvY2sgcG9pbnRlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGV4dDRfZnJlZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRoaXNfYmgsCisJCQkgICBfX2xlMzIgKmZpcnN0LCBfX2xlMzIgKmxhc3QpCit7CisJZXh0NF9mc2Jsa190IGJsb2NrX3RvX2ZyZWUgPSAwOyAgICAvKiBTdGFydGluZyBibG9jayAjIG9mIGEgcnVuICovCisJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CSAgICAvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoZSBydW4gKi8KKwlfX2xlMzIgKmJsb2NrX3RvX2ZyZWVfcCA9IE5VTEw7CSAgICAvKiBQb2ludGVyIGludG8gaW5vZGUvaW5kCisJCQkJCSAgICAgICBjb3JyZXNwb25kaW5nIHRvCisJCQkJCSAgICAgICBibG9ja190b19mcmVlICovCisJZXh0NF9mc2Jsa190IG5yOwkJICAgIC8qIEN1cnJlbnQgYmxvY2sgIyAqLworCV9fbGUzMiAqcDsJCQkgICAgLyogUG9pbnRlciBpbnRvIGlub2RlL2luZAorCQkJCQkgICAgICAgZm9yIGN1cnJlbnQgYmxvY2sgKi8KKwlpbnQgZXJyID0gMDsKKworCWlmICh0aGlzX2JoKSB7CQkJCS8qIEZvciBpbmRpcmVjdCBibG9jayAqLworCQlCVUZGRVJfVFJBQ0UodGhpc19iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKKwkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCB0aGlzX2JoKTsKKwkJLyogSW1wb3J0YW50OiBpZiB3ZSBjYW4ndCB1cGRhdGUgdGhlIGluZGlyZWN0IHBvaW50ZXJzCisJCSAqIHRvIHRoZSBibG9ja3MsIHdlIGNhbid0IGZyZWUgdGhlbS4gKi8KKwkJaWYgKGVycikKKwkJCXJldHVybjsKKwl9CisKKwlmb3IgKHAgPSBmaXJzdDsgcCA8IGxhc3Q7IHArKykgeworCQluciA9IGxlMzJfdG9fY3B1KCpwKTsKKwkJaWYgKG5yKSB7CisJCQkvKiBhY2N1bXVsYXRlIGJsb2NrcyB0byBmcmVlIGlmIHRoZXkncmUgY29udGlndW91cyAqLworCQkJaWYgKGNvdW50ID09IDApIHsKKwkJCQlibG9ja190b19mcmVlID0gbnI7CisJCQkJYmxvY2tfdG9fZnJlZV9wID0gcDsKKwkJCQljb3VudCA9IDE7CisJCQl9IGVsc2UgaWYgKG5yID09IGJsb2NrX3RvX2ZyZWUgKyBjb3VudCkgeworCQkJCWNvdW50Kys7CisJCQl9IGVsc2UgeworCQkJCWVyciA9IGV4dDRfY2xlYXJfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgsCisJCQkJCQkgICAgICAgIGJsb2NrX3RvX2ZyZWUsIGNvdW50LAorCQkJCQkJICAgICAgICBibG9ja190b19mcmVlX3AsIHApOworCQkJCWlmIChlcnIpCisJCQkJCWJyZWFrOworCQkJCWJsb2NrX3RvX2ZyZWUgPSBucjsKKwkJCQlibG9ja190b19mcmVlX3AgPSBwOworCQkJCWNvdW50ID0gMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZXJyICYmIGNvdW50ID4gMCkKKwkJZXJyID0gZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgdGhpc19iaCwgYmxvY2tfdG9fZnJlZSwKKwkJCQkJY291bnQsIGJsb2NrX3RvX2ZyZWVfcCwgcCk7CisJaWYgKGVyciA8IDApCisJCS8qIGZhdGFsIGVycm9yICovCisJCXJldHVybjsKKworCWlmICh0aGlzX2JoKSB7CisJCUJVRkZFUl9UUkFDRSh0aGlzX2JoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCisJCS8qCisJCSAqIFRoZSBidWZmZXIgaGVhZCBzaG91bGQgaGF2ZSBhbiBhdHRhY2hlZCBqb3VybmFsIGhlYWQgYXQgdGhpcworCQkgKiBwb2ludC4gSG93ZXZlciwgaWYgdGhlIGRhdGEgaXMgY29ycnVwdGVkIGFuZCBhbiBpbmRpcmVjdAorCQkgKiBibG9jayBwb2ludGVkIHRvIGl0c2VsZiwgaXQgd291bGQgaGF2ZSBiZWVuIGRldGFjaGVkIHdoZW4KKwkJICogdGhlIGJsb2NrIHdhcyBjbGVhcmVkLiBDaGVjayBmb3IgdGhpcyBpbnN0ZWFkIG9mIE9PUFNpbmcuCisJCSAqLworCQlpZiAoKEVYVDRfSk9VUk5BTChpbm9kZSkgPT0gTlVMTCkgfHwgYmgyamgodGhpc19iaCkpCisJCQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCB0aGlzX2JoKTsKKwkJZWxzZQorCQkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKKwkJCQkJICJjaXJjdWxhciBpbmRpcmVjdCBibG9jayBkZXRlY3RlZCBhdCAiCisJCQkJCSAiYmxvY2sgJWxsdSIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgdGhpc19iaC0+Yl9ibG9ja25yKTsKKwl9Cit9CisKKy8qKgorICoJZXh0NF9mcmVlX2JyYW5jaGVzIC0gZnJlZSBhbiBhcnJheSBvZiBicmFuY2hlcworICoJQGhhbmRsZTogSkJEIGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgorICoJQGlub2RlOglpbm9kZSB3ZSBhcmUgZGVhbGluZyB3aXRoCisgKglAcGFyZW50X2JoOiB0aGUgYnVmZmVyX2hlYWQgd2hpY2ggY29udGFpbnMgKkBmaXJzdCBhbmQgKkBsYXN0CisgKglAZmlyc3Q6CWFycmF5IG9mIGJsb2NrIG51bWJlcnMKKyAqCUBsYXN0Oglwb2ludGVyIGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZCBvZiBhcnJheQorICoJQGRlcHRoOglkZXB0aCBvZiB0aGUgYnJhbmNoZXMgdG8gZnJlZQorICoKKyAqCVdlIGFyZSBmcmVlaW5nIGFsbCBibG9ja3MgcmVmZXJyZWQgZnJvbSB0aGVzZSBicmFuY2hlcyAobnVtYmVycyBhcmUKKyAqCXN0b3JlZCBhcyBsaXR0bGUtZW5kaWFuIDMyLWJpdCkgYW5kIHVwZGF0aW5nIEBpbm9kZS0+aV9ibG9ja3MKKyAqCWFwcHJvcHJpYXRlbHkuCisgKi8KK3N0YXRpYyB2b2lkIGV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2JoLAorCQkJICAgICAgIF9fbGUzMiAqZmlyc3QsIF9fbGUzMiAqbGFzdCwgaW50IGRlcHRoKQoreworCWV4dDRfZnNibGtfdCBucjsKKwlfX2xlMzIgKnA7CisKKwlpZiAoZXh0NF9oYW5kbGVfaXNfYWJvcnRlZChoYW5kbGUpKQorCQlyZXR1cm47CisKKwlpZiAoZGVwdGgtLSkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQlpbnQgYWRkcl9wZXJfYmxvY2sgPSBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKTsKKwkJcCA9IGxhc3Q7CisJCXdoaWxlICgtLXAgPj0gZmlyc3QpIHsKKwkJCW5yID0gbGUzMl90b19jcHUoKnApOworCQkJaWYgKCFucikKKwkJCQljb250aW51ZTsJCS8qIEEgaG9sZSAqLworCisJCQlpZiAoIWV4dDRfZGF0YV9ibG9ja192YWxpZChFWFQ0X1NCKGlub2RlLT5pX3NiKSwKKwkJCQkJCSAgIG5yLCAxKSkgeworCQkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJCQkgImludmFsaWQgaW5kaXJlY3QgbWFwcGVkICIKKwkJCQkJCSAiYmxvY2sgJWx1IChsZXZlbCAlZCkiLAorCQkJCQkJICh1bnNpZ25lZCBsb25nKSBuciwgZGVwdGgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBHbyByZWFkIHRoZSBidWZmZXIgZm9yIHRoZSBuZXh0IGxldmVsIGRvd24gKi8KKwkJCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIG5yKTsKKworCQkJLyoKKwkJCSAqIEEgcmVhZCBmYWlsdXJlPyBSZXBvcnQgZXJyb3IgYW5kIGNsZWFyIHNsb3QKKwkJCSAqIChzaG91bGQgYmUgcmFyZSkuCisJCQkgKi8KKwkJCWlmICghYmgpIHsKKwkJCQlFWFQ0X0VSUk9SX0lOT0RFX0JMT0NLKGlub2RlLCBuciwKKwkJCQkJCSAgICAgICAiUmVhZCBmYWlsdXJlIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFRoaXMgemFwcyB0aGUgZW50aXJlIGJsb2NrLiAgQm90dG9tIHVwLiAqLworCQkJQlVGRkVSX1RSQUNFKGJoLCAiZnJlZSBjaGlsZCBicmFuY2hlcyIpOworCQkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIGJoLAorCQkJCQkoX19sZTMyICopIGJoLT5iX2RhdGEsCisJCQkJCShfX2xlMzIgKikgYmgtPmJfZGF0YSArIGFkZHJfcGVyX2Jsb2NrLAorCQkJCQlkZXB0aCk7CisJCQlicmVsc2UoYmgpOworCisJCQkvKgorCQkJICogRXZlcnl0aGluZyBiZWxvdyB0aGlzIHRoaXMgcG9pbnRlciBoYXMgYmVlbgorCQkJICogcmVsZWFzZWQuICBOb3cgbGV0IHRoaXMgdG9wLW9mLXN1YnRyZWUgZ28uCisJCQkgKgorCQkJICogV2Ugd2FudCB0aGUgZnJlZWluZyBvZiB0aGlzIGluZGlyZWN0IGJsb2NrIHRvIGJlCisJCQkgKiBhdG9taWMgaW4gdGhlIGpvdXJuYWwgd2l0aCB0aGUgdXBkYXRpbmcgb2YgdGhlCisJCQkgKiBiaXRtYXAgYmxvY2sgd2hpY2ggb3ducyBpdC4gIFNvIG1ha2Ugc29tZSByb29tIGluCisJCQkgKiB0aGUgam91cm5hbC4KKwkJCSAqCisJCQkgKiBXZSB6ZXJvIHRoZSBwYXJlbnQgcG9pbnRlciAqYWZ0ZXIqIGZyZWVpbmcgaXRzCisJCQkgKiBwb2ludGVlIGluIHRoZSBiaXRtYXBzLCBzbyBpZiBleHRlbmRfdHJhbnNhY3Rpb24oKQorCQkJICogZm9yIHNvbWUgcmVhc29uIGZhaWxzIHRvIHB1dCB0aGUgYml0bWFwIGNoYW5nZXMgYW5kCisJCQkgKiB0aGUgcmVsZWFzZSBpbnRvIHRoZSBzYW1lIHRyYW5zYWN0aW9uLCByZWNvdmVyeQorCQkJICogd2lsbCBtZXJlbHkgY29tcGxhaW4gYWJvdXQgcmVsZWFzaW5nIGEgZnJlZSBibG9jaywKKwkJCSAqIHJhdGhlciB0aGFuIGxlYWtpbmcgYmxvY2tzLgorCQkJICovCisJCQlpZiAoZXh0NF9oYW5kbGVfaXNfYWJvcnRlZChoYW5kbGUpKQorCQkJCXJldHVybjsKKwkJCWlmICh0cnlfdG9fZXh0ZW5kX3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpKSB7CisJCQkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCQkJCWV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGUsIGlub2RlLAorCQkJCQkgICAgZXh0NF9ibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGUgZm9yZ2V0IGZsYWcgaGVyZSBpcyBjcml0aWNhbCBiZWNhdXNlIGlmCisJCQkgKiB3ZSBhcmUgam91cm5hbGluZyAoYW5kIG5vdCBkb2luZyBkYXRhCisJCQkgKiBqb3VybmFsaW5nKSwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgYSByZXZva2UKKwkJCSAqIHJlY29yZCBpcyB3cml0dGVuIHRvIHByZXZlbnQgdGhlIGpvdXJuYWwKKwkJCSAqIHJlcGxheSBmcm9tIG92ZXJ3cml0aW5nIHRoZSAoZm9ybWVyKQorCQkJICogaW5kaXJlY3QgYmxvY2sgaWYgaXQgZ2V0cyByZWFsbG9jYXRlZCBhcyBhCisJCQkgKiBkYXRhIGJsb2NrLiAgVGhpcyBtdXN0IGhhcHBlbiBpbiB0aGUgc2FtZQorCQkJICogdHJhbnNhY3Rpb24gd2hlcmUgdGhlIGRhdGEgYmxvY2tzIGFyZQorCQkJICogYWN0dWFsbHkgZnJlZWQuCisJCQkgKi8KKwkJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbnIsIDEsCisJCQkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBfAorCQkJCQkgRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQpOworCisJCQlpZiAocGFyZW50X2JoKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgYmxvY2sgd2hpY2ggd2UgaGF2ZSBqdXN0IGZyZWVkIGlzCisJCQkJICogcG9pbnRlZCB0byBieSBhbiBpbmRpcmVjdCBibG9jazogam91cm5hbCBpdAorCQkJCSAqLworCQkJCUJVRkZFUl9UUkFDRShwYXJlbnRfYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CisJCQkJaWYgKCFleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCisJCQkJCQkJCSAgIHBhcmVudF9iaCkpeworCQkJCQkqcCA9IDA7CisJCQkJCUJVRkZFUl9UUkFDRShwYXJlbnRfYmgsCisJCQkJCSJjYWxsIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhIik7CisJCQkJCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKKwkJCQkJCQkJICAgaW5vZGUsCisJCQkJCQkJCSAgIHBhcmVudF9iaCk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogV2UgaGF2ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIHRyZWUuICovCisJCUJVRkZFUl9UUkFDRShwYXJlbnRfYmgsICJmcmVlIGRhdGEgYmxvY2tzIik7CisJCWV4dDRfZnJlZV9kYXRhKGhhbmRsZSwgaW5vZGUsIHBhcmVudF9iaCwgZmlyc3QsIGxhc3QpOworCX0KK30KKwordm9pZCBleHQ0X2luZF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOworCV9fbGUzMiAqaV9kYXRhID0gZWktPmlfZGF0YTsKKwlpbnQgYWRkcl9wZXJfYmxvY2sgPSBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJZXh0NF9sYmxrX3Qgb2Zmc2V0c1s0XTsKKwlJbmRpcmVjdCBjaGFpbls0XTsKKwlJbmRpcmVjdCAqcGFydGlhbDsKKwlfX2xlMzIgbnIgPSAwOworCWludCBuID0gMDsKKwlleHQ0X2xibGtfdCBsYXN0X2Jsb2NrLCBtYXhfYmxvY2s7CisJdW5zaWduZWQgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCisJaGFuZGxlID0gc3RhcnRfdHJhbnNhY3Rpb24oaW5vZGUpOworCWlmIChJU19FUlIoaGFuZGxlKSkKKwkJcmV0dXJuOwkJLyogQUtQTTogcmV0dXJuIHdoYXQ/ICovCisKKwlsYXN0X2Jsb2NrID0gKGlub2RlLT5pX3NpemUgKyBibG9ja3NpemUtMSkKKwkJCQkJPj4gRVhUNF9CTE9DS19TSVpFX0JJVFMoaW5vZGUtPmlfc2IpOworCW1heF9ibG9jayA9IChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19iaXRtYXBfbWF4Ynl0ZXMgKyBibG9ja3NpemUtMSkKKwkJCQkJPj4gRVhUNF9CTE9DS19TSVpFX0JJVFMoaW5vZGUtPmlfc2IpOworCisJaWYgKGlub2RlLT5pX3NpemUgJiAoYmxvY2tzaXplIC0gMSkpCisJCWlmIChleHQ0X2Jsb2NrX3RydW5jYXRlX3BhZ2UoaGFuZGxlLCBtYXBwaW5nLCBpbm9kZS0+aV9zaXplKSkKKwkJCWdvdG8gb3V0X3N0b3A7CisKKwlpZiAobGFzdF9ibG9jayAhPSBtYXhfYmxvY2spIHsKKwkJbiA9IGV4dDRfYmxvY2tfdG9fcGF0aChpbm9kZSwgbGFzdF9ibG9jaywgb2Zmc2V0cywgTlVMTCk7CisJCWlmIChuID09IDApCisJCQlnb3RvIG91dF9zdG9wOwkvKiBlcnJvciAqLworCX0KKworCS8qCisJICogT0suICBUaGlzIHRydW5jYXRlIGlzIGdvaW5nIHRvIGhhcHBlbi4gIFdlIGFkZCB0aGUgaW5vZGUgdG8gdGhlCisJICogb3JwaGFuIGxpc3QsIHNvIHRoYXQgaWYgdGhpcyB0cnVuY2F0ZSBzcGFucyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMsCisJICogYW5kIHdlIGNyYXNoLCB3ZSB3aWxsIHJlc3VtZSB0aGUgdHJ1bmNhdGUgd2hlbiB0aGUgZmlsZXN5c3RlbQorCSAqIHJlY292ZXJzLiAgSXQgYWxzbyBtYXJrcyB0aGUgaW5vZGUgZGlydHksIHRvIGNhdGNoIHRoZSBuZXcgc2l6ZS4KKwkgKgorCSAqIEltcGxpY2F0aW9uOiB0aGUgZmlsZSBtdXN0IGFsd2F5cyBiZSBpbiBhIHNhbmUsIGNvbnNpc3RlbnQKKwkgKiB0cnVuY2F0YWJsZSBzdGF0ZSB3aGlsZSBlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisJICovCisJaWYgKGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKSkKKwkJZ290byBvdXRfc3RvcDsKKworCS8qCisJICogRnJvbSBoZXJlIHdlIGJsb2NrIG91dCBhbGwgZXh0NF9nZXRfYmxvY2soKSBjYWxsZXJzIHdobyB3YW50IHRvCisJICogbW9kaWZ5IHRoZSBibG9jayBhbGxvY2F0aW9uIHRyZWUuCisJICovCisJZG93bl93cml0ZSgmZWktPmlfZGF0YV9zZW0pOworCisJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKKworCS8qCisJICogVGhlIG9ycGhhbiBsaXN0IGVudHJ5IHdpbGwgbm93IHByb3RlY3QgdXMgZnJvbSBhbnkgY3Jhc2ggd2hpY2gKKwkgKiBvY2N1cnMgYmVmb3JlIHRoZSB0cnVuY2F0ZSBjb21wbGV0ZXMsIHNvIGl0IGlzIG5vdyBzYWZlIHRvIHByb3BhZ2F0ZQorCSAqIHRoZSBuZXcsIHNob3J0ZXIgaW5vZGUgc2l6ZSAoaGVsZCBmb3Igbm93IGluIGlfc2l6ZSkgaW50byB0aGUKKwkgKiBvbi1kaXNrIGlub2RlLiBXZSBkbyB0aGlzIHZpYSBpX2Rpc2tzaXplLCB3aGljaCBpcyB0aGUgdmFsdWUgd2hpY2gKKwkgKiBleHQ0ICpyZWFsbHkqIHdyaXRlcyBvbnRvIHRoZSBkaXNrIGlub2RlLgorCSAqLworCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKKworCWlmIChsYXN0X2Jsb2NrID09IG1heF9ibG9jaykgeworCQkvKgorCQkgKiBJdCBpcyB1bm5lY2Vzc2FyeSB0byBmcmVlIGFueSBkYXRhIGJsb2NrcyBpZiBsYXN0X2Jsb2NrIGlzCisJCSAqIGVxdWFsIHRvIHRoZSBpbmRpcmVjdCBibG9jayBsaW1pdC4KKwkJICovCisJCWdvdG8gb3V0X3VubG9jazsKKwl9IGVsc2UgaWYgKG4gPT0gMSkgewkJLyogZGlyZWN0IGJsb2NrcyAqLworCQlleHQ0X2ZyZWVfZGF0YShoYW5kbGUsIGlub2RlLCBOVUxMLCBpX2RhdGErb2Zmc2V0c1swXSwKKwkJCSAgICAgICBpX2RhdGEgKyBFWFQ0X05ESVJfQkxPQ0tTKTsKKwkJZ290byBkb19pbmRpcmVjdHM7CisJfQorCisJcGFydGlhbCA9IGV4dDRfZmluZF9zaGFyZWQoaW5vZGUsIG4sIG9mZnNldHMsIGNoYWluLCAmbnIpOworCS8qIEtpbGwgdGhlIHRvcCBvZiBzaGFyZWQgYnJhbmNoIChub3QgZGV0YWNoZWQpICovCisJaWYgKG5yKSB7CisJCWlmIChwYXJ0aWFsID09IGNoYWluKSB7CisJCQkvKiBTaGFyZWQgYnJhbmNoIGdyb3dzIGZyb20gdGhlIGlub2RlICovCisJCQlleHQ0X2ZyZWVfYnJhbmNoZXMoaGFuZGxlLCBpbm9kZSwgTlVMTCwKKwkJCQkJICAgJm5yLCAmbnIrMSwgKGNoYWluK24tMSkgLSBwYXJ0aWFsKTsKKwkJCSpwYXJ0aWFsLT5wID0gMDsKKwkJCS8qCisJCQkgKiBXZSBtYXJrIHRoZSBpbm9kZSBkaXJ0eSBwcmlvciB0byByZXN0YXJ0LAorCQkJICogYW5kIHByaW9yIHRvIHN0b3AuICBObyBuZWVkIGZvciBpdCBoZXJlLgorCQkJICovCisJCX0gZWxzZSB7CisJCQkvKiBTaGFyZWQgYnJhbmNoIGdyb3dzIGZyb20gYW4gaW5kaXJlY3QgYmxvY2sgKi8KKwkJCUJVRkZFUl9UUkFDRShwYXJ0aWFsLT5iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKKwkJCWV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGUsIGlub2RlLCBwYXJ0aWFsLT5iaCwKKwkJCQkJcGFydGlhbC0+cCwKKwkJCQkJcGFydGlhbC0+cCsxLCAoY2hhaW4rbi0xKSAtIHBhcnRpYWwpOworCQl9CisJfQorCS8qIENsZWFyIHRoZSBlbmRzIG9mIGluZGlyZWN0IGJsb2NrcyBvbiB0aGUgc2hhcmVkIGJyYW5jaCAqLworCXdoaWxlIChwYXJ0aWFsID4gY2hhaW4pIHsKKwkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIHBhcnRpYWwtPmJoLCBwYXJ0aWFsLT5wICsgMSwKKwkJCQkgICAoX19sZTMyKilwYXJ0aWFsLT5iaC0+Yl9kYXRhK2FkZHJfcGVyX2Jsb2NrLAorCQkJCSAgIChjaGFpbituLTEpIC0gcGFydGlhbCk7CisJCUJVRkZFUl9UUkFDRShwYXJ0aWFsLT5iaCwgImNhbGwgYnJlbHNlIik7CisJCWJyZWxzZShwYXJ0aWFsLT5iaCk7CisJCXBhcnRpYWwtLTsKKwl9Citkb19pbmRpcmVjdHM6CisJLyogS2lsbCB0aGUgcmVtYWluaW5nICh3aG9sZSkgc3VidHJlZXMgKi8KKwlzd2l0Y2ggKG9mZnNldHNbMF0pIHsKKwlkZWZhdWx0OgorCQluciA9IGlfZGF0YVtFWFQ0X0lORF9CTE9DS107CisJCWlmIChucikgeworCQkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIE5VTEwsICZuciwgJm5yKzEsIDEpOworCQkJaV9kYXRhW0VYVDRfSU5EX0JMT0NLXSA9IDA7CisJCX0KKwljYXNlIEVYVDRfSU5EX0JMT0NLOgorCQluciA9IGlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdOworCQlpZiAobnIpIHsKKwkJCWV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGUsIGlub2RlLCBOVUxMLCAmbnIsICZucisxLCAyKTsKKwkJCWlfZGF0YVtFWFQ0X0RJTkRfQkxPQ0tdID0gMDsKKwkJfQorCWNhc2UgRVhUNF9ESU5EX0JMT0NLOgorCQluciA9IGlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdOworCQlpZiAobnIpIHsKKwkJCWV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGUsIGlub2RlLCBOVUxMLCAmbnIsICZucisxLCAzKTsKKwkJCWlfZGF0YVtFWFQ0X1RJTkRfQkxPQ0tdID0gMDsKKwkJfQorCWNhc2UgRVhUNF9USU5EX0JMT0NLOgorCQk7CisJfQorCitvdXRfdW5sb2NrOgorCXVwX3dyaXRlKCZlaS0+aV9kYXRhX3NlbSk7CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IGV4dDRfY3VycmVudF90aW1lKGlub2RlKTsKKwlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisKKwkvKgorCSAqIEluIGEgbXVsdGktdHJhbnNhY3Rpb24gdHJ1bmNhdGUsIHdlIG9ubHkgbWFrZSB0aGUgZmluYWwgdHJhbnNhY3Rpb24KKwkgKiBzeW5jaHJvbm91cworCSAqLworCWlmIChJU19TWU5DKGlub2RlKSkKKwkJZXh0NF9oYW5kbGVfc3luYyhoYW5kbGUpOworb3V0X3N0b3A6CisJLyoKKwkgKiBJZiB0aGlzIHdhcyBhIHNpbXBsZSBmdHJ1bmNhdGUoKSwgYW5kIHRoZSBmaWxlIHdpbGwgcmVtYWluIGFsaXZlCisJICogdGhlbiB3ZSBuZWVkIHRvIGNsZWFyIHVwIHRoZSBvcnBoYW4gcmVjb3JkIHdoaWNoIHdlIGNyZWF0ZWQgYWJvdmUuCisJICogSG93ZXZlciwgaWYgdGhpcyB3YXMgYSByZWFsIHVubGluayB0aGVuIHdlIHdlcmUgY2FsbGVkIGJ5CisJICogZXh0NF9kZWxldGVfaW5vZGUoKSwgYW5kIHdlIGFsbG93IHRoYXQgZnVuY3Rpb24gdG8gY2xlYW4gdXAgdGhlCisJICogb3JwaGFuIGluZm8gZm9yIHVzLgorCSAqLworCWlmIChpbm9kZS0+aV9ubGluaykKKwkJZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpOworCisJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwl0cmFjZV9leHQ0X3RydW5jYXRlX2V4aXQoaW5vZGUpOworfQorCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggM2U1MTkxZi4uMThkMjU1OCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKLSAqICBHb2FsLWRpcmVjdGVkIGJsb2NrIGFsbG9jYXRpb24gYnkgU3RlcGhlbiBUd2VlZGllCi0gKgkoc2N0QHJlZGhhdC5jb20pLCAxOTkzLCAxOTk4Ci0gKiAgQmlnLWVuZGlhbiB0byBsaXR0bGUtZW5kaWFuIGJ5dGUtc3dhcHBpbmcvYml0bWFwcyBieQotICogICAgICAgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSksIDE5OTUKICAqICA2NC1iaXQgZmlsZSBzdXBwb3J0IG9uIDY0LWJpdCBwbGF0Zm9ybXMgYnkgSmFrdWIgSmVsaW5lawogICoJKGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3opCiAgKgpAQCAtNDcsNiArNDMsNyBAQAogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiYWNsLmgiCiAjaW5jbHVkZSAiZXh0NF9leHRlbnRzLmgiCisjaW5jbHVkZSAidHJ1bmNhdGUuaCIKIAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9leHQ0Lmg+CiAKQEAgLTg5LDcyICs4Niw2IEBACiB9CiAKIC8qCi0gKiBXb3JrIG91dCBob3cgbWFueSBibG9ja3Mgd2UgbmVlZCB0byBwcm9jZWVkIHdpdGggdGhlIG5leHQgY2h1bmsgb2YgYQotICogdHJ1bmNhdGUgdHJhbnNhY3Rpb24uCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJsb2Nrc19mb3JfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlleHQ0X2xibGtfdCBuZWVkZWQ7Ci0KLQluZWVkZWQgPSBpbm9kZS0+aV9ibG9ja3MgPj4gKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7Ci0KLQkvKiBHaXZlIG91cnNlbHZlcyBqdXN0IGVub3VnaCByb29tIHRvIGNvcGUgd2l0aCBpbm9kZXMgaW4gd2hpY2gKLQkgKiBpX2Jsb2NrcyBpcyBjb3JydXB0OiB3ZSd2ZSBzZWVuIGRpc2sgY29ycnVwdGlvbnMgaW4gdGhlIHBhc3QKLQkgKiB3aGljaCByZXN1bHRlZCBpbiByYW5kb20gZGF0YSBpbiBhbiBpbm9kZSB3aGljaCBsb29rZWQgZW5vdWdoCi0JICogbGlrZSBhIHJlZ3VsYXIgZmlsZSBmb3IgZXh0NCB0byB0cnkgdG8gZGVsZXRlIGl0LiAgVGhpbmdzCi0JICogd2lsbCBnbyBhIGJpdCBjcmF6eSBpZiB0aGF0IGhhcHBlbnMsIGJ1dCBhdCBsZWFzdCB3ZSBzaG91bGQKLQkgKiB0cnkgbm90IHRvIHBhbmljIHRoZSB3aG9sZSBrZXJuZWwuICovCi0JaWYgKG5lZWRlZCA8IDIpCi0JCW5lZWRlZCA9IDI7Ci0KLQkvKiBCdXQgd2UgbmVlZCB0byBib3VuZCB0aGUgdHJhbnNhY3Rpb24gc28gd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlCi0JICogam91cm5hbC4gKi8KLQlpZiAobmVlZGVkID4gRVhUNF9NQVhfVFJBTlNfREFUQSkKLQkJbmVlZGVkID0gRVhUNF9NQVhfVFJBTlNfREFUQTsKLQotCXJldHVybiBFWFQ0X0RBVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKSArIG5lZWRlZDsKLX0KLQotLyoKLSAqIFRydW5jYXRlIHRyYW5zYWN0aW9ucyBjYW4gYmUgY29tcGxleCBhbmQgYWJzb2x1dGVseSBodWdlLiAgU28gd2UgbmVlZCB0bwotICogYmUgYWJsZSB0byByZXN0YXJ0IHRoZSB0cmFuc2FjdGlvbiBhdCBhIGNvbnZlbnRpZW50IGNoZWNrcG9pbnQgdG8gbWFrZQotICogc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgam91cm5hbC4KLSAqCi0gKiBzdGFydF90cmFuc2FjdGlvbiBnZXRzIHVzIGEgbmV3IGhhbmRsZSBmb3IgYSB0cnVuY2F0ZSB0cmFuc2FjdGlvbiwKLSAqIGFuZCBleHRlbmRfdHJhbnNhY3Rpb24gdHJpZXMgdG8gZXh0ZW5kIHRoZSBleGlzdGluZyBvbmUgYSBiaXQuICBJZgotICogZXh0ZW5kIGZhaWxzLCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUgZmFpbHVyZSB1cCBhbmQgcmVzdGFydCB0aGUKLSAqIHRyYW5zYWN0aW9uIGluIHRoZSB0b3AtbGV2ZWwgdHJ1bmNhdGUgbG9vcC4gLS1zY3QKLSAqLwotc3RhdGljIGhhbmRsZV90ICpzdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWhhbmRsZV90ICpyZXN1bHQ7Ci0KLQlyZXN1bHQgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGJsb2Nrc19mb3JfdHJ1bmNhdGUoaW5vZGUpKTsKLQlpZiAoIUlTX0VSUihyZXN1bHQpKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JZXh0NF9zdGRfZXJyb3IoaW5vZGUtPmlfc2IsIFBUUl9FUlIocmVzdWx0KSk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFRyeSB0byBleHRlbmQgdGhpcyB0cmFuc2FjdGlvbiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRydW5jYXRpb24uCi0gKgotICogUmV0dXJucyAwIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIG1vcmUgcm9vbS4gIElmIHdlIGNhbid0IGNyZWF0ZSBtb3JlCi0gKiByb29tLCBhbmQgdGhlIHRyYW5zYWN0aW9uIG11c3QgYmUgcmVzdGFydGVkIHdlIHJldHVybiAxLgotICovCi1zdGF0aWMgaW50IHRyeV90b19leHRlbmRfdHJhbnNhY3Rpb24oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpCi0JCXJldHVybiAwOwotCWlmIChleHQ0X2hhbmRsZV9oYXNfZW5vdWdoX2NyZWRpdHMoaGFuZGxlLCBFWFQ0X1JFU0VSVkVfVFJBTlNfQkxPQ0tTKzEpKQotCQlyZXR1cm4gMDsKLQlpZiAoIWV4dDRfam91cm5hbF9leHRlbmQoaGFuZGxlLCBibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKgogICogUmVzdGFydCB0aGUgdHJhbnNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoICpoYW5kbGUuICBUaGlzIGRvZXMgYSBjb21taXQsCiAgKiBzbyBiZWZvcmUgd2UgY2FsbCBoZXJlIGV2ZXJ5dGhpbmcgbXVzdCBiZSBjb25zaXN0ZW50bHkgZGlydGllZCBhZ2FpbnN0CiAgKiB0aGlzIHRyYW5zYWN0aW9uLgpAQCAtMTg5LDcgKzEyMCwzNyBAQAogCWludCBlcnI7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKKworCWV4dDRfaW9lbmRfd2FpdChpbm9kZSk7CisKIAlpZiAoaW5vZGUtPmlfbmxpbmspIHsKKwkJLyoKKwkJICogV2hlbiBqb3VybmFsbGluZyBkYXRhIGRpcnR5IGJ1ZmZlcnMgYXJlIHRyYWNrZWQgb25seSBpbiB0aGUKKwkJICogam91cm5hbC4gU28gYWx0aG91Z2ggbW0gdGhpbmtzIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gYW5kCisJCSAqIHJlYWR5IGZvciByZWFwaW5nIHRoZSBpbm9kZSBtaWdodCBzdGlsbCBoYXZlIHNvbWUgcGFnZXMgdG8KKwkJICogd3JpdGUgaW4gdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24gb3Igd2FpdGluZyB0byBiZQorCQkgKiBjaGVja3BvaW50ZWQuIFRodXMgY2FsbGluZyBqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZXBhZ2UoKQorCQkgKiAodmlhIHRydW5jYXRlX2lub2RlX3BhZ2VzKCkpIHRvIGRpc2NhcmQgdGhlc2UgYnVmZmVycyBjYW4KKwkJICogY2F1c2UgZGF0YSBsb3NzLiBBbHNvIGV2ZW4gaWYgd2UgZGlkIG5vdCBkaXNjYXJkIHRoZXNlCisJCSAqIGJ1ZmZlcnMsIHdlIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGZpbmQgdGhlbSBhZnRlciB0aGUgaW5vZGUKKwkJICogaXMgcmVhcGVkIGFuZCB0aHVzIHVzZXIgY291bGQgc2VlIHN0YWxlIGRhdGEgaWYgaGUgdHJpZXMgdG8KKwkJICogcmVhZCB0aGVtIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gaXMgY2hlY2twb2ludGVkLiBTbyBiZQorCQkgKiBjYXJlZnVsIGFuZCBmb3JjZSBldmVyeXRoaW5nIHRvIGRpc2sgaGVyZS4uLiBXZSB1c2UKKwkJICogZWktPmlfZGF0YXN5bmNfdGlkIHRvIHN0b3JlIHRoZSBuZXdlc3QgdHJhbnNhY3Rpb24KKwkJICogY29udGFpbmluZyBpbm9kZSdzIGRhdGEuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBkaXJlY3RvcmllcyBkbyBub3QgaGF2ZSB0aGlzIHByb2JsZW0gYmVjYXVzZSB0aGV5CisJCSAqIGRvbid0IHVzZSBwYWdlIGNhY2hlLgorCQkgKi8KKwkJaWYgKGV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkgJiYKKwkJICAgIChTX0lTTE5LKGlub2RlLT5pX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpKSB7CisJCQlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsOworCQkJdGlkX3QgY29tbWl0X3RpZCA9IEVYVDRfSShpbm9kZSktPmlfZGF0YXN5bmNfdGlkOworCisJCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgY29tbWl0X3RpZCk7CisJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKKwkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoJmlub2RlLT5pX2RhdGEpOworCQl9CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAkJZ290byBub19kZWxldGU7CiAJfQpAQCAtMjA0LDcgKzE2NSw3IEBACiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCiAJCWdvdG8gbm9fZGVsZXRlOwogCi0JaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSszKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGV4dDRfYmxvY2tzX2Zvcl90cnVuY2F0ZShpbm9kZSkrMyk7CiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCWV4dDRfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBQVFJfRVJSKGhhbmRsZSkpOwogCQkvKgpAQCAtMjc3LDc5MyArMjM4LDYgQEAKIAlleHQ0X2NsZWFyX2lub2RlKGlub2RlKTsJLyogV2UgbXVzdCBndWFyYW50ZWUgY2xlYXJpbmcgb2YgaW5vZGUuLi4gKi8KIH0KIAotdHlwZWRlZiBzdHJ1Y3QgewotCV9fbGUzMgkqcDsKLQlfX2xlMzIJa2V5OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci19IEluZGlyZWN0OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX2NoYWluKEluZGlyZWN0ICpwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBfX2xlMzIgKnYpCi17Ci0JcC0+a2V5ID0gKihwLT5wID0gdik7Ci0JcC0+YmggPSBiaDsKLX0KLQotLyoqCi0gKglleHQ0X2Jsb2NrX3RvX3BhdGggLSBwYXJzZSB0aGUgYmxvY2sgbnVtYmVyIGludG8gYXJyYXkgb2Ygb2Zmc2V0cwotICoJQGlub2RlOiBpbm9kZSBpbiBxdWVzdGlvbiAod2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBpdHMgc3VwZXJibG9jaykKLSAqCUBpX2Jsb2NrOiBibG9jayBudW1iZXIgdG8gYmUgcGFyc2VkCi0gKglAb2Zmc2V0czogYXJyYXkgdG8gc3RvcmUgdGhlIG9mZnNldHMgaW4KLSAqCUBib3VuZGFyeTogc2V0IHRoaXMgbm9uLXplcm8gaWYgdGhlIHJlZmVycmVkLXRvIGJsb2NrIGlzIGxpa2VseSB0byBiZQotICoJICAgICAgIGZvbGxvd2VkIChvbiBkaXNrKSBieSBhbiBpbmRpcmVjdCBibG9jay4KLSAqCi0gKglUbyBzdG9yZSB0aGUgbG9jYXRpb25zIG9mIGZpbGUncyBkYXRhIGV4dDQgdXNlcyBhIGRhdGEgc3RydWN0dXJlIGNvbW1vbgotICoJZm9yIFVOSVggZmlsZXN5c3RlbXMgLSB0cmVlIG9mIHBvaW50ZXJzIGFuY2hvcmVkIGluIHRoZSBpbm9kZSwgd2l0aAotICoJZGF0YSBibG9ja3MgYXQgbGVhdmVzIGFuZCBpbmRpcmVjdCBibG9ja3MgaW4gaW50ZXJtZWRpYXRlIG5vZGVzLgotICoJVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIHRoZSBibG9jayBudW1iZXIgaW50byBwYXRoIGluIHRoYXQgdHJlZSAtCi0gKglyZXR1cm4gdmFsdWUgaXMgdGhlIHBhdGggbGVuZ3RoIGFuZCBAb2Zmc2V0c1tuXSBpcyB0aGUgb2Zmc2V0IG9mCi0gKglwb2ludGVyIHRvIChuKzEpdGggbm9kZSBpbiB0aGUgbnRoIG9uZS4gSWYgQGJsb2NrIGlzIG91dCBvZiByYW5nZQotICoJKG5lZ2F0aXZlIG9yIHRvbyBsYXJnZSkgd2FybmluZyBpcyBwcmludGVkIGFuZCB6ZXJvIHJldHVybmVkLgotICoKLSAqCU5vdGU6IGZ1bmN0aW9uIGRvZXNuJ3QgZmluZCBub2RlIGFkZHJlc3Nlcywgc28gbm8gSU8gaXMgbmVlZGVkLiBBbGwKLSAqCXdlIG5lZWQgdG8ga25vdyBpcyB0aGUgY2FwYWNpdHkgb2YgaW5kaXJlY3QgYmxvY2tzICh0YWtlbiBmcm9tIHRoZQotICoJaW5vZGUtPmlfc2IpLgotICovCi0KLS8qCi0gKiBQb3J0YWJpbGl0eSBub3RlOiB0aGUgbGFzdCBjb21wYXJpc29uIChjaGVjayB0aGF0IHdlIGZpdCBpbnRvIHRyaXBsZQotICogaW5kaXJlY3QgYmxvY2spIGlzIHNwZWxsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugb3RoZXJ3aXNlIG9uIGFuCi0gKiBhcmNoaXRlY3R1cmUgd2l0aCAzMi1iaXQgbG9uZ3MgYW5kIDhLYiBwYWdlcyB3ZSBtaWdodCBnZXQgaW50byB0cm91YmxlCi0gKiBpZiBvdXIgZmlsZXN5c3RlbSBoYWQgOEtiIGJsb2Nrcy4gV2UgbWlnaHQgdXNlIGxvbmcgbG9uZywgYnV0IHRoYXQgd291bGQKLSAqIGtpbGwgdXMgb24geDg2LiBPaCwgd2VsbCwgYXQgbGVhc3QgdGhlIHNpZ24gcHJvcGFnYXRpb24gZG9lcyBub3QgbWF0dGVyIC0KLSAqIGlfYmxvY2sgd291bGQgaGF2ZSB0byBiZSBuZWdhdGl2ZSBpbiB0aGUgdmVyeSBiZWdpbm5pbmcsIHNvIHdlIHdvdWxkIG5vdAotICogZ2V0IHRoZXJlIGF0IGFsbC4KLSAqLwotCi1zdGF0aWMgaW50IGV4dDRfYmxvY2tfdG9fcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgZXh0NF9sYmxrX3QgaV9ibG9jaywKLQkJCSAgICAgIGV4dDRfbGJsa190IG9mZnNldHNbNF0sIGludCAqYm91bmRhcnkpCi17Ci0JaW50IHB0cnMgPSBFWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKTsKLQlpbnQgcHRyc19iaXRzID0gRVhUNF9BRERSX1BFUl9CTE9DS19CSVRTKGlub2RlLT5pX3NiKTsKLQljb25zdCBsb25nIGRpcmVjdF9ibG9ja3MgPSBFWFQ0X05ESVJfQkxPQ0tTLAotCQlpbmRpcmVjdF9ibG9ja3MgPSBwdHJzLAotCQlkb3VibGVfYmxvY2tzID0gKDEgPDwgKHB0cnNfYml0cyAqIDIpKTsKLQlpbnQgbiA9IDA7Ci0JaW50IGZpbmFsID0gMDsKLQotCWlmIChpX2Jsb2NrIDwgZGlyZWN0X2Jsb2NrcykgewotCQlvZmZzZXRzW24rK10gPSBpX2Jsb2NrOwotCQlmaW5hbCA9IGRpcmVjdF9ibG9ja3M7Ci0JfSBlbHNlIGlmICgoaV9ibG9jayAtPSBkaXJlY3RfYmxvY2tzKSA8IGluZGlyZWN0X2Jsb2NrcykgewotCQlvZmZzZXRzW24rK10gPSBFWFQ0X0lORF9CTE9DSzsKLQkJb2Zmc2V0c1tuKytdID0gaV9ibG9jazsKLQkJZmluYWwgPSBwdHJzOwotCX0gZWxzZSBpZiAoKGlfYmxvY2sgLT0gaW5kaXJlY3RfYmxvY2tzKSA8IGRvdWJsZV9ibG9ja3MpIHsKLQkJb2Zmc2V0c1tuKytdID0gRVhUNF9ESU5EX0JMT0NLOwotCQlvZmZzZXRzW24rK10gPSBpX2Jsb2NrID4+IHB0cnNfYml0czsKLQkJb2Zmc2V0c1tuKytdID0gaV9ibG9jayAmIChwdHJzIC0gMSk7Ci0JCWZpbmFsID0gcHRyczsKLQl9IGVsc2UgaWYgKCgoaV9ibG9jayAtPSBkb3VibGVfYmxvY2tzKSA+PiAocHRyc19iaXRzICogMikpIDwgcHRycykgewotCQlvZmZzZXRzW24rK10gPSBFWFQ0X1RJTkRfQkxPQ0s7Ci0JCW9mZnNldHNbbisrXSA9IGlfYmxvY2sgPj4gKHB0cnNfYml0cyAqIDIpOwotCQlvZmZzZXRzW24rK10gPSAoaV9ibG9jayA+PiBwdHJzX2JpdHMpICYgKHB0cnMgLSAxKTsKLQkJb2Zmc2V0c1tuKytdID0gaV9ibG9jayAmIChwdHJzIC0gMSk7Ci0JCWZpbmFsID0gcHRyczsKLQl9IGVsc2UgewotCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsICJibG9jayAlbHUgPiBtYXggaW4gaW5vZGUgJWx1IiwKLQkJCSAgICAgaV9ibG9jayArIGRpcmVjdF9ibG9ja3MgKwotCQkJICAgICBpbmRpcmVjdF9ibG9ja3MgKyBkb3VibGVfYmxvY2tzLCBpbm9kZS0+aV9pbm8pOwotCX0KLQlpZiAoYm91bmRhcnkpCi0JCSpib3VuZGFyeSA9IGZpbmFsIC0gMSAtIChpX2Jsb2NrICYgKHB0cnMgLSAxKSk7Ci0JcmV0dXJuIG47Ci19Ci0KLXN0YXRpYyBpbnQgX19leHQ0X2NoZWNrX2Jsb2NrcmVmKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSwKLQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgX19sZTMyICpwLCB1bnNpZ25lZCBpbnQgbWF4KQotewotCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzOwotCV9fbGUzMiAqYnJlZiA9IHA7Ci0JdW5zaWduZWQgaW50IGJsazsKLQotCXdoaWxlIChicmVmIDwgcCttYXgpIHsKLQkJYmxrID0gbGUzMl90b19jcHUoKmJyZWYrKyk7Ci0JCWlmIChibGsgJiYKLQkJICAgIHVubGlrZWx5KCFleHQ0X2RhdGFfYmxvY2tfdmFsaWQoRVhUNF9TQihpbm9kZS0+aV9zYiksCi0JCQkJCQkgICAgYmxrLCAxKSkpIHsKLQkJCWVzLT5zX2xhc3RfZXJyb3JfYmxvY2sgPSBjcHVfdG9fbGU2NChibGspOwotCQkJZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgZnVuY3Rpb24sIGxpbmUsIGJsaywKLQkJCQkJICJpbnZhbGlkIGJsb2NrIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0jZGVmaW5lIGV4dDRfY2hlY2tfaW5kaXJlY3RfYmxvY2tyZWYoaW5vZGUsIGJoKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JX19leHQ0X2NoZWNrX2Jsb2NrcmVmKF9fZnVuY19fLCBfX0xJTkVfXywgaW5vZGUsCQlcCi0JCQkgICAgICAoX19sZTMyICopKGJoKS0+Yl9kYXRhLAkJCVwKLQkJCSAgICAgIEVYVDRfQUREUl9QRVJfQkxPQ0soKGlub2RlKS0+aV9zYikpCi0KLSNkZWZpbmUgZXh0NF9jaGVja19pbm9kZV9ibG9ja3JlZihpbm9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfX2V4dDRfY2hlY2tfYmxvY2tyZWYoX19mdW5jX18sIF9fTElORV9fLCBpbm9kZSwJCVwKLQkJCSAgICAgIEVYVDRfSShpbm9kZSktPmlfZGF0YSwJCQlcCi0JCQkgICAgICBFWFQ0X05ESVJfQkxPQ0tTKQotCi0vKioKLSAqCWV4dDRfZ2V0X2JyYW5jaCAtIHJlYWQgdGhlIGNoYWluIG9mIGluZGlyZWN0IGJsb2NrcyBsZWFkaW5nIHRvIGRhdGEKLSAqCUBpbm9kZTogaW5vZGUgaW4gcXVlc3Rpb24KLSAqCUBkZXB0aDogZGVwdGggb2YgdGhlIGNoYWluICgxIC0gZGlyZWN0IHBvaW50ZXIsIGV0Yy4pCi0gKglAb2Zmc2V0czogb2Zmc2V0cyBvZiBwb2ludGVycyBpbiBpbm9kZS9pbmRpcmVjdCBibG9ja3MKLSAqCUBjaGFpbjogcGxhY2UgdG8gc3RvcmUgdGhlIHJlc3VsdAotICoJQGVycjogaGVyZSB3ZSBzdG9yZSB0aGUgZXJyb3IgdmFsdWUKLSAqCi0gKglGdW5jdGlvbiBmaWxscyB0aGUgYXJyYXkgb2YgdHJpcGxlcyA8a2V5LCBwLCBiaD4gYW5kIHJldHVybnMgJU5VTEwKLSAqCWlmIGV2ZXJ5dGhpbmcgd2VudCBPSyBvciB0aGUgcG9pbnRlciB0byB0aGUgbGFzdCBmaWxsZWQgdHJpcGxlCi0gKgkoaW5jb21wbGV0ZSBvbmUpIG90aGVyd2lzZS4gVXBvbiB0aGUgcmV0dXJuIGNoYWluW2ldLmtleSBjb250YWlucwotICoJdGhlIG51bWJlciBvZiAoaSsxKS10aCBibG9jayBpbiB0aGUgY2hhaW4gKGFzIGl0IGlzIHN0b3JlZCBpbiBtZW1vcnksCi0gKglpLmUuIGxpdHRsZS1lbmRpYW4gMzItYml0KSwgY2hhaW5baV0ucCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGF0Ci0gKgludW1iZXIgKGl0IHBvaW50cyBpbnRvIHN0cnVjdCBpbm9kZSBmb3IgaT09MCBhbmQgaW50byB0aGUgYmgtPmJfZGF0YQotICoJZm9yIGk+MCkgYW5kIGNoYWluW2ldLmJoIHBvaW50cyB0byB0aGUgYnVmZmVyX2hlYWQgb2YgaS10aCBpbmRpcmVjdAotICoJYmxvY2sgZm9yIGk+MCBhbmQgTlVMTCBmb3IgaT09MC4gSW4gb3RoZXIgd29yZHMsIGl0IGhvbGRzIHRoZSBibG9jawotICoJbnVtYmVycyBvZiB0aGUgY2hhaW4sIGFkZHJlc3NlcyB0aGV5IHdlcmUgdGFrZW4gZnJvbSAoYW5kIHdoZXJlIHdlIGNhbgotICoJdmVyaWZ5IHRoYXQgY2hhaW4gZGlkIG5vdCBjaGFuZ2UpIGFuZCBidWZmZXJfaGVhZHMgaG9zdGluZyB0aGVzZQotICoJbnVtYmVycy4KLSAqCi0gKglGdW5jdGlvbiBzdG9wcyB3aGVuIGl0IHN0dW1ibGVzIHVwb24gemVybyBwb2ludGVyIChhYnNlbnQgYmxvY2spCi0gKgkJKHBvaW50ZXIgdG8gbGFzdCB0cmlwbGUgcmV0dXJuZWQsICpAZXJyID09IDApCi0gKglvciB3aGVuIGl0IGdldHMgYW4gSU8gZXJyb3IgcmVhZGluZyBhbiBpbmRpcmVjdCBibG9jawotICoJCShkaXR0bywgKkBlcnIgPT0gLUVJTykKLSAqCW9yIHdoZW4gaXQgcmVhZHMgYWxsIEBkZXB0aC0xIGluZGlyZWN0IGJsb2NrcyBzdWNjZXNzZnVsbHkgYW5kIGZpbmRzCi0gKgl0aGUgd2hvbGUgY2hhaW4sIGFsbCB3YXkgdG8gdGhlIGRhdGEgKHJldHVybnMgJU5VTEwsICplcnIgPT0gMCkuCi0gKgotICogICAgICBOZWVkIHRvIGJlIGNhbGxlZCB3aXRoCi0gKiAgICAgIGRvd25fcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkKLSAqLwotc3RhdGljIEluZGlyZWN0ICpleHQ0X2dldF9icmFuY2goc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRlcHRoLAotCQkJCSBleHQ0X2xibGtfdCAgKm9mZnNldHMsCi0JCQkJIEluZGlyZWN0IGNoYWluWzRdLCBpbnQgKmVycikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0JSW5kaXJlY3QgKnAgPSBjaGFpbjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JKmVyciA9IDA7Ci0JLyogaV9kYXRhIGlzIG5vdCBnb2luZyBhd2F5LCBubyBsb2NrIG5lZWRlZCAqLwotCWFkZF9jaGFpbihjaGFpbiwgTlVMTCwgRVhUNF9JKGlub2RlKS0+aV9kYXRhICsgKm9mZnNldHMpOwotCWlmICghcC0+a2V5KQotCQlnb3RvIG5vX2Jsb2NrOwotCXdoaWxlICgtLWRlcHRoKSB7Ci0JCWJoID0gc2JfZ2V0YmxrKHNiLCBsZTMyX3RvX2NwdShwLT5rZXkpKTsKLQkJaWYgKHVubGlrZWx5KCFiaCkpCi0JCQlnb3RvIGZhaWx1cmU7Ci0KLQkJaWYgKCFiaF91cHRvZGF0ZV9vcl9sb2NrKGJoKSkgewotCQkJaWYgKGJoX3N1Ym1pdF9yZWFkKGJoKSA8IDApIHsKLQkJCQlwdXRfYmgoYmgpOwotCQkJCWdvdG8gZmFpbHVyZTsKLQkJCX0KLQkJCS8qIHZhbGlkYXRlIGJsb2NrIHJlZmVyZW5jZXMgKi8KLQkJCWlmIChleHQ0X2NoZWNrX2luZGlyZWN0X2Jsb2NrcmVmKGlub2RlLCBiaCkpIHsKLQkJCQlwdXRfYmgoYmgpOwotCQkJCWdvdG8gZmFpbHVyZTsKLQkJCX0KLQkJfQotCi0JCWFkZF9jaGFpbigrK3AsIGJoLCAoX19sZTMyICopYmgtPmJfZGF0YSArICorK29mZnNldHMpOwotCQkvKiBSZWFkZXI6IGVuZCAqLwotCQlpZiAoIXAtPmtleSkKLQkJCWdvdG8gbm9fYmxvY2s7Ci0JfQotCXJldHVybiBOVUxMOwotCi1mYWlsdXJlOgotCSplcnIgPSAtRUlPOwotbm9fYmxvY2s6Ci0JcmV0dXJuIHA7Ci19Ci0KLS8qKgotICoJZXh0NF9maW5kX25lYXIgLSBmaW5kIGEgcGxhY2UgZm9yIGFsbG9jYXRpb24gd2l0aCBzdWZmaWNpZW50IGxvY2FsaXR5Ci0gKglAaW5vZGU6IG93bmVyCi0gKglAaW5kOiBkZXNjcmlwdG9yIG9mIGluZGlyZWN0IGJsb2NrLgotICoKLSAqCVRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJlZmVycmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLgotICoJSXQgaXMgdXNlZCB3aGVuIGhldXJpc3RpYyBmb3Igc2VxdWVudGlhbCBhbGxvY2F0aW9uIGZhaWxzLgotICoJUnVsZXMgYXJlOgotICoJICArIGlmIHRoZXJlIGlzIGEgYmxvY2sgdG8gdGhlIGxlZnQgb2Ygb3VyIHBvc2l0aW9uIC0gYWxsb2NhdGUgbmVhciBpdC4KLSAqCSAgKyBpZiBwb2ludGVyIHdpbGwgbGl2ZSBpbiBpbmRpcmVjdCBibG9jayAtIGFsbG9jYXRlIG5lYXIgdGhhdCBibG9jay4KLSAqCSAgKyBpZiBwb2ludGVyIHdpbGwgbGl2ZSBpbiBpbm9kZSAtIGFsbG9jYXRlIGluIHRoZSBzYW1lCi0gKgkgICAgY3lsaW5kZXIgZ3JvdXAuCi0gKgotICogSW4gdGhlIGxhdHRlciBjYXNlIHdlIGNvbG91ciB0aGUgc3RhcnRpbmcgYmxvY2sgYnkgdGhlIGNhbGxlcnMgUElEIHRvCi0gKiBwcmV2ZW50IGl0IGZyb20gY2xhc2hpbmcgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zIGZvciBhIGRpZmZlcmVudCBpbm9kZQotICogaW4gdGhlIHNhbWUgYmxvY2sgZ3JvdXAuICAgVGhlIFBJRCBpcyB1c2VkIGhlcmUgc28gdGhhdCBmdW5jdGlvbmFsbHkgcmVsYXRlZAotICogZmlsZXMgd2lsbCBiZSBjbG9zZS1ieSBvbi1kaXNrLgotICoKLSAqCUNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IEBpbmQgaXMgdmFsaWQgYW5kIHdpbGwgc3RheSB0aGF0IHdheS4KLSAqLwotc3RhdGljIGV4dDRfZnNibGtfdCBleHQ0X2ZpbmRfbmVhcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBJbmRpcmVjdCAqaW5kKQotewotCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKLQlfX2xlMzIgKnN0YXJ0ID0gaW5kLT5iaCA/IChfX2xlMzIgKikgaW5kLT5iaC0+Yl9kYXRhIDogZWktPmlfZGF0YTsKLQlfX2xlMzIgKnA7Ci0JZXh0NF9mc2Jsa190IGJnX3N0YXJ0OwotCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOwotCWV4dDRfZ3JwYmxrX3QgY29sb3VyOwotCWV4dDRfZ3JvdXBfdCBibG9ja19ncm91cDsKLQlpbnQgZmxleF9zaXplID0gZXh0NF9mbGV4X2JnX3NpemUoRVhUNF9TQihpbm9kZS0+aV9zYikpOwotCi0JLyogVHJ5IHRvIGZpbmQgcHJldmlvdXMgYmxvY2sgKi8KLQlmb3IgKHAgPSBpbmQtPnAgLSAxOyBwID49IHN0YXJ0OyBwLS0pIHsKLQkJaWYgKCpwKQotCQkJcmV0dXJuIGxlMzJfdG9fY3B1KCpwKTsKLQl9Ci0KLQkvKiBObyBzdWNoIHRoaW5nLCBzbyBsZXQncyB0cnkgbG9jYXRpb24gb2YgaW5kaXJlY3QgYmxvY2sgKi8KLQlpZiAoaW5kLT5iaCkKLQkJcmV0dXJuIGluZC0+YmgtPmJfYmxvY2tucjsKLQotCS8qCi0JICogSXQgaXMgZ29pbmcgdG8gYmUgcmVmZXJyZWQgdG8gZnJvbSB0aGUgaW5vZGUgaXRzZWxmPyBPSywganVzdCBwdXQgaXQKLQkgKiBpbnRvIHRoZSBzYW1lIGN5bGluZGVyIGdyb3VwIHRoZW4uCi0JICovCi0JYmxvY2tfZ3JvdXAgPSBlaS0+aV9ibG9ja19ncm91cDsKLQlpZiAoZmxleF9zaXplID49IEVYVDRfRkxFWF9TSVpFX0RJUl9BTExPQ19TQ0hFTUUpIHsKLQkJYmxvY2tfZ3JvdXAgJj0gfihmbGV4X3NpemUtMSk7Ci0JCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQotCQkJYmxvY2tfZ3JvdXArKzsKLQl9Ci0JYmdfc3RhcnQgPSBleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKGlub2RlLT5pX3NiLCBibG9ja19ncm91cCk7Ci0JbGFzdF9ibG9jayA9IGV4dDRfYmxvY2tzX2NvdW50KEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzKSAtIDE7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBkZWxheWVkIGFsbG9jYXRpb24sIHdlIGRvbid0IG5lZWQgdGFrZQotCSAqIGNvbG91ciBpbnRvIGFjY291bnQuCi0JICovCi0JaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBERUxBTExPQykpCi0JCXJldHVybiBiZ19zdGFydDsKLQotCWlmIChiZ19zdGFydCArIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikgPD0gbGFzdF9ibG9jaykKLQkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqCi0JCQkoRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSAvIDE2KTsKLQllbHNlCi0JCWNvbG91ciA9IChjdXJyZW50LT5waWQgJSAxNikgKiAoKGxhc3RfYmxvY2sgLSBiZ19zdGFydCkgLyAxNik7Ci0JcmV0dXJuIGJnX3N0YXJ0ICsgY29sb3VyOwotfQotCi0vKioKLSAqCWV4dDRfZmluZF9nb2FsIC0gZmluZCBhIHByZWZlcnJlZCBwbGFjZSBmb3IgYWxsb2NhdGlvbi4KLSAqCUBpbm9kZTogb3duZXIKLSAqCUBibG9jazogIGJsb2NrIHdlIHdhbnQKLSAqCUBwYXJ0aWFsOiBwb2ludGVyIHRvIHRoZSBsYXN0IHRyaXBsZSB3aXRoaW4gYSBjaGFpbgotICoKLSAqCU5vcm1hbGx5IHRoaXMgZnVuY3Rpb24gZmluZCB0aGUgcHJlZmVycmVkIHBsYWNlIGZvciBibG9jayBhbGxvY2F0aW9uLAotICoJcmV0dXJucyBpdC4KLSAqCUJlY2F1c2UgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIG5vbi1leHRlbnQgZmlsZXMsIHdlIGxpbWl0IHRoZSBibG9jayBucgotICoJdG8gMzIgYml0cy4KLSAqLwotc3RhdGljIGV4dDRfZnNibGtfdCBleHQ0X2ZpbmRfZ29hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBibG9jaywKLQkJCQkgICBJbmRpcmVjdCAqcGFydGlhbCkKLXsKLQlleHQ0X2ZzYmxrX3QgZ29hbDsKLQotCS8qCi0JICogWFhYIG5lZWQgdG8gZ2V0IGdvYWwgYmxvY2sgZnJvbSBtYmFsbG9jJ3MgZGF0YSBzdHJ1Y3R1cmVzCi0JICovCi0KLQlnb2FsID0gZXh0NF9maW5kX25lYXIoaW5vZGUsIHBhcnRpYWwpOwotCWdvYWwgPSBnb2FsICYgRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTOwotCXJldHVybiBnb2FsOwotfQotCi0vKioKLSAqCWV4dDRfYmxrc190b19hbGxvY2F0ZSAtIExvb2sgdXAgdGhlIGJsb2NrIG1hcCBhbmQgY291bnQgdGhlIG51bWJlcgotICoJb2YgZGlyZWN0IGJsb2NrcyBuZWVkIHRvIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGdpdmVuIGJyYW5jaC4KLSAqCi0gKglAYnJhbmNoOiBjaGFpbiBvZiBpbmRpcmVjdCBibG9ja3MKLSAqCUBrOiBudW1iZXIgb2YgYmxvY2tzIG5lZWQgZm9yIGluZGlyZWN0IGJsb2NrcwotICoJQGJsa3M6IG51bWJlciBvZiBkYXRhIGJsb2NrcyB0byBiZSBtYXBwZWQuCi0gKglAYmxvY2tzX3RvX2JvdW5kYXJ5OiAgdGhlIG9mZnNldCBpbiB0aGUgaW5kaXJlY3QgYmxvY2sKLSAqCi0gKglyZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBibG9ja3MgdG8gYmUgYWxsb2NhdGUsIGluY2x1ZGluZyB0aGUKLSAqCWRpcmVjdCBhbmQgaW5kaXJlY3QgYmxvY2tzLgotICovCi1zdGF0aWMgaW50IGV4dDRfYmxrc190b19hbGxvY2F0ZShJbmRpcmVjdCAqYnJhbmNoLCBpbnQgaywgdW5zaWduZWQgaW50IGJsa3MsCi0JCQkJIGludCBibG9ja3NfdG9fYm91bmRhcnkpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQotCS8qCi0JICogU2ltcGxlIGNhc2UsIFt0LGRdSW5kaXJlY3QgYmxvY2socykgaGFzIG5vdCBhbGxvY2F0ZWQgeWV0Ci0JICogdGhlbiBpdCdzIGNsZWFyIGJsb2NrcyBvbiB0aGF0IHBhdGggaGF2ZSBub3QgYWxsb2NhdGVkCi0JICovCi0JaWYgKGsgPiAwKSB7Ci0JCS8qIHJpZ2h0IG5vdyB3ZSBkb24ndCBoYW5kbGUgY3Jvc3MgYm91bmRhcnkgYWxsb2NhdGlvbiAqLwotCQlpZiAoYmxrcyA8IGJsb2Nrc190b19ib3VuZGFyeSArIDEpCi0JCQljb3VudCArPSBibGtzOwotCQllbHNlCi0JCQljb3VudCArPSBibG9ja3NfdG9fYm91bmRhcnkgKyAxOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JY291bnQrKzsKLQl3aGlsZSAoY291bnQgPCBibGtzICYmIGNvdW50IDw9IGJsb2Nrc190b19ib3VuZGFyeSAmJgotCQlsZTMyX3RvX2NwdSgqKGJyYW5jaFswXS5wICsgY291bnQpKSA9PSAwKSB7Ci0JCWNvdW50Kys7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotLyoqCi0gKglleHQ0X2FsbG9jX2Jsb2NrczogbXVsdGlwbGUgYWxsb2NhdGUgYmxvY2tzIG5lZWRlZCBmb3IgYSBicmFuY2gKLSAqCUBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgotICoJQGlub2RlOiBpbm9kZSB3aGljaCBuZWVkcyBhbGxvY2F0ZWQgYmxvY2tzCi0gKglAaWJsb2NrOiB0aGUgbG9naWNhbCBibG9jayB0byBzdGFydCBhbGxvY2F0ZWQgYXQKLSAqCUBnb2FsOiBwcmVmZXJyZWQgcGh5c2ljYWwgYmxvY2sgb2YgYWxsb2NhdGlvbgotICoJQGluZGlyZWN0X2Jsa3M6IHRoZSBudW1iZXIgb2YgYmxvY2tzIG5lZWQgdG8gYWxsb2NhdGUgZm9yIGluZGlyZWN0Ci0gKgkJCWJsb2NrcwotICoJQGJsa3M6IG51bWJlciBvZiBkZXNpcmVkIGJsb2NrcwotICoJQG5ld19ibG9ja3M6IG9uIHJldHVybiBpdCB3aWxsIHN0b3JlIHRoZSBuZXcgYmxvY2sgbnVtYmVycyBmb3IKLSAqCXRoZSBpbmRpcmVjdCBibG9ja3MoaWYgbmVlZGVkKSBhbmQgdGhlIGZpcnN0IGRpcmVjdCBibG9jaywKLSAqCUBlcnI6IG9uIHJldHVybiBpdCB3aWxsIHN0b3JlIHRoZSBlcnJvciBjb2RlCi0gKgotICoJVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgYXMKLSAqCXJlcXVlc3RlZCBieSB0aGUgcGFzc2VkLWluIHBhcmFtZXRlcnMuCi0gKi8KLXN0YXRpYyBpbnQgZXh0NF9hbGxvY19ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgZXh0NF9sYmxrX3QgaWJsb2NrLCBleHQ0X2ZzYmxrX3QgZ29hbCwKLQkJCSAgICAgaW50IGluZGlyZWN0X2Jsa3MsIGludCBibGtzLAotCQkJICAgICBleHQ0X2ZzYmxrX3QgbmV3X2Jsb2Nrc1s0XSwgaW50ICplcnIpCi17Ci0Jc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOwotCWludCB0YXJnZXQsIGk7Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9IDAsIGJsa19hbGxvY2F0ZWQgPSAwOwotCWludCBpbmRleCA9IDA7Ci0JZXh0NF9mc2Jsa190IGN1cnJlbnRfYmxvY2sgPSAwOwotCWludCByZXQgPSAwOwotCi0JLyoKLQkgKiBIZXJlIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG11bHRpcGxlIGJsb2NrcyBhdCBvbmNlLAotCSAqIG9uIGEgYmVzdC1lZmZvcnQgYmFzaXMuCi0JICogVG8gYnVpbGQgYSBicmFuY2gsIHdlIHNob3VsZCBhbGxvY2F0ZSBibG9ja3MgZm9yCi0JICogdGhlIGluZGlyZWN0IGJsb2NrcyhpZiBub3QgYWxsb2NhdGVkIHlldCksIGFuZCBhdCBsZWFzdAotCSAqIHRoZSBmaXJzdCBkaXJlY3QgYmxvY2sgb2YgdGhpcyBicmFuY2guICBUaGF0J3MgdGhlCi0JICogbWluaW11bSBudW1iZXIgb2YgYmxvY2tzIG5lZWQgdG8gYWxsb2NhdGUocmVxdWlyZWQpCi0JICovCi0JLyogZmlyc3Qgd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZSBpbmRpcmVjdCBibG9ja3MgKi8KLQl0YXJnZXQgPSBpbmRpcmVjdF9ibGtzOwotCXdoaWxlICh0YXJnZXQgPiAwKSB7Ci0JCWNvdW50ID0gdGFyZ2V0OwotCQkvKiBhbGxvY2F0aW5nIGJsb2NrcyBmb3IgaW5kaXJlY3QgYmxvY2tzIGFuZCBkaXJlY3QgYmxvY2tzICovCi0JCWN1cnJlbnRfYmxvY2sgPSBleHQ0X25ld19tZXRhX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBnb2FsLAotCQkJCQkJICAgICAwLCAmY291bnQsIGVycik7Ci0JCWlmICgqZXJyKQotCQkJZ290byBmYWlsZWRfb3V0OwotCi0JCWlmICh1bmxpa2VseShjdXJyZW50X2Jsb2NrICsgY291bnQgPiBFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMpKSB7Ci0JCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAotCQkJCQkgImN1cnJlbnRfYmxvY2sgJWxsdSArIGNvdW50ICVsdSA+ICVkISIsCi0JCQkJCSBjdXJyZW50X2Jsb2NrLCBjb3VudCwKLQkJCQkJIEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyk7Ci0JCQkqZXJyID0gLUVJTzsKLQkJCWdvdG8gZmFpbGVkX291dDsKLQkJfQotCi0JCXRhcmdldCAtPSBjb3VudDsKLQkJLyogYWxsb2NhdGUgYmxvY2tzIGZvciBpbmRpcmVjdCBibG9ja3MgKi8KLQkJd2hpbGUgKGluZGV4IDwgaW5kaXJlY3RfYmxrcyAmJiBjb3VudCkgewotCQkJbmV3X2Jsb2Nrc1tpbmRleCsrXSA9IGN1cnJlbnRfYmxvY2srKzsKLQkJCWNvdW50LS07Ci0JCX0KLQkJaWYgKGNvdW50ID4gMCkgewotCQkJLyoKLQkJCSAqIHNhdmUgdGhlIG5ldyBibG9jayBudW1iZXIKLQkJCSAqIGZvciB0aGUgZmlyc3QgZGlyZWN0IGJsb2NrCi0JCQkgKi8KLQkJCW5ld19ibG9ja3NbaW5kZXhdID0gY3VycmVudF9ibG9jazsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzIHJldHVybmVkIG1vcmUgYmxvY2tzIHRoYW4gIgotCQkJCQkJInJlcXVlc3RlZFxuIiwgX19mdW5jX18pOwotCQkJV0FSTl9PTigxKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JdGFyZ2V0ID0gYmxrcyAtIGNvdW50IDsKLQlibGtfYWxsb2NhdGVkID0gY291bnQ7Ci0JaWYgKCF0YXJnZXQpCi0JCWdvdG8gYWxsb2NhdGVkOwotCS8qIE5vdyBhbGxvY2F0ZSBkYXRhIGJsb2NrcyAqLwotCW1lbXNldCgmYXIsIDAsIHNpemVvZihhcikpOwotCWFyLmlub2RlID0gaW5vZGU7Ci0JYXIuZ29hbCA9IGdvYWw7Ci0JYXIubGVuID0gdGFyZ2V0OwotCWFyLmxvZ2ljYWwgPSBpYmxvY2s7Ci0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCi0JCS8qIGVuYWJsZSBpbi1jb3JlIHByZWFsbG9jYXRpb24gb25seSBmb3IgcmVndWxhciBmaWxlcyAqLwotCQlhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBOwotCi0JY3VycmVudF9ibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhciwgZXJyKTsKLQlpZiAodW5saWtlbHkoY3VycmVudF9ibG9jayArIGFyLmxlbiA+IEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUykpIHsKLQkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKLQkJCQkgImN1cnJlbnRfYmxvY2sgJWxsdSArIGFyLmxlbiAlZCA+ICVkISIsCi0JCQkJIGN1cnJlbnRfYmxvY2ssIGFyLmxlbiwKLQkJCQkgRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTKTsKLQkJKmVyciA9IC1FSU87Ci0JCWdvdG8gZmFpbGVkX291dDsKLQl9Ci0KLQlpZiAoKmVyciAmJiAodGFyZ2V0ID09IGJsa3MpKSB7Ci0JCS8qCi0JCSAqIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCBhbmQgd2UgZGlkbid0IGFsbG9jYXRlCi0JCSAqIGFueSBibG9ja3MgYmVmb3JlCi0JCSAqLwotCQlnb3RvIGZhaWxlZF9vdXQ7Ci0JfQotCWlmICghKmVycikgewotCQlpZiAodGFyZ2V0ID09IGJsa3MpIHsKLQkJCS8qCi0JCQkgKiBzYXZlIHRoZSBuZXcgYmxvY2sgbnVtYmVyCi0JCQkgKiBmb3IgdGhlIGZpcnN0IGRpcmVjdCBibG9jawotCQkJICovCi0JCQluZXdfYmxvY2tzW2luZGV4XSA9IGN1cnJlbnRfYmxvY2s7Ci0JCX0KLQkJYmxrX2FsbG9jYXRlZCArPSBhci5sZW47Ci0JfQotYWxsb2NhdGVkOgotCS8qIHRvdGFsIG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciBkaXJlY3QgYmxvY2tzICovCi0JcmV0ID0gYmxrX2FsbG9jYXRlZDsKLQkqZXJyID0gMDsKLQlyZXR1cm4gcmV0OwotZmFpbGVkX291dDoKLQlmb3IgKGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKLQkJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdfYmxvY2tzW2ldLCAxLCAwKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCWV4dDRfYWxsb2NfYnJhbmNoIC0gYWxsb2NhdGUgYW5kIHNldCB1cCBhIGNoYWluIG9mIGJsb2Nrcy4KLSAqCUBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgotICoJQGlub2RlOiBvd25lcgotICoJQGluZGlyZWN0X2Jsa3M6IG51bWJlciBvZiBhbGxvY2F0ZWQgaW5kaXJlY3QgYmxvY2tzCi0gKglAYmxrczogbnVtYmVyIG9mIGFsbG9jYXRlZCBkaXJlY3QgYmxvY2tzCi0gKglAZ29hbDogcHJlZmVycmVkIHBsYWNlIGZvciBhbGxvY2F0aW9uCi0gKglAb2Zmc2V0czogb2Zmc2V0cyAoaW4gdGhlIGJsb2NrcykgdG8gc3RvcmUgdGhlIHBvaW50ZXJzIHRvIG5leHQuCi0gKglAYnJhbmNoOiBwbGFjZSB0byBzdG9yZSB0aGUgY2hhaW4gaW4uCi0gKgotICoJVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYmxvY2tzLCB6ZXJvZXMgb3V0IGFsbCBidXQgdGhlIGxhc3Qgb25lLAotICoJbGlua3MgdGhlbSBpbnRvIGNoYWluIGFuZCAoaWYgd2UgYXJlIHN5bmNocm9ub3VzKSB3cml0ZXMgdGhlbSB0byBkaXNrLgotICoJSW4gb3RoZXIgd29yZHMsIGl0IHByZXBhcmVzIGEgYnJhbmNoIHRoYXQgY2FuIGJlIHNwbGljZWQgb250byB0aGUKLSAqCWlub2RlLiBJdCBzdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgY2hhaW4gaW4gdGhlIGJyYW5jaFtdLCBpbgotICoJdGhlIHNhbWUgZm9ybWF0IGFzIGV4dDRfZ2V0X2JyYW5jaCgpIHdvdWxkIGRvLiBXZSBhcmUgY2FsbGluZyBpdCBhZnRlcgotICoJd2UgaGFkIHJlYWQgdGhlIGV4aXN0aW5nIHBhcnQgb2YgY2hhaW4gYW5kIHBhcnRpYWwgcG9pbnRzIHRvIHRoZSBsYXN0Ci0gKgl0cmlwbGUgb2YgdGhhdCAob25lIHdpdGggemVybyAtPmtleSkuIFVwb24gdGhlIGV4aXQgd2UgaGF2ZSB0aGUgc2FtZQotICoJcGljdHVyZSBhcyBhZnRlciB0aGUgc3VjY2Vzc2Z1bCBleHQ0X2dldF9ibG9jaygpLCBleGNlcHQgdGhhdCBpbiBvbmUKLSAqCXBsYWNlIGNoYWluIGlzIGRpc2Nvbm5lY3RlZCAtICpicmFuY2gtPnAgaXMgc3RpbGwgemVybyAod2UgZGlkIG5vdAotICoJc2V0IHRoZSBsYXN0IGxpbmspLCBidXQgYnJhbmNoLT5rZXkgY29udGFpbnMgdGhlIG51bWJlciB0aGF0IHNob3VsZAotICoJYmUgcGxhY2VkIGludG8gKmJyYW5jaC0+cCB0byBmaWxsIHRoYXQgZ2FwLgotICoKLSAqCUlmIGFsbG9jYXRpb24gZmFpbHMgd2UgZnJlZSBhbGwgYmxvY2tzIHdlJ3ZlIGFsbG9jYXRlZCAoYW5kIGZvcmdldAotICoJdGhlaXIgYnVmZmVyX2hlYWRzKSBhbmQgcmV0dXJuIHRoZSBlcnJvciB2YWx1ZSB0aGUgZnJvbSBmYWlsZWQKLSAqCWV4dDRfYWxsb2NfYmxvY2soKSAobm9ybWFsbHkgLUVOT1NQQykuIE90aGVyd2lzZSB3ZSBzZXQgdGhlIGNoYWluCi0gKglhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHJldHVybiAwLgotICovCi1zdGF0aWMgaW50IGV4dDRfYWxsb2NfYnJhbmNoKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgIGV4dDRfbGJsa190IGlibG9jaywgaW50IGluZGlyZWN0X2Jsa3MsCi0JCQkgICAgIGludCAqYmxrcywgZXh0NF9mc2Jsa190IGdvYWwsCi0JCQkgICAgIGV4dDRfbGJsa190ICpvZmZzZXRzLCBJbmRpcmVjdCAqYnJhbmNoKQotewotCWludCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Ci0JaW50IGksIG4gPSAwOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IG51bTsKLQlleHQ0X2ZzYmxrX3QgbmV3X2Jsb2Nrc1s0XTsKLQlleHQ0X2ZzYmxrX3QgY3VycmVudF9ibG9jazsKLQotCW51bSA9IGV4dDRfYWxsb2NfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgZ29hbCwgaW5kaXJlY3RfYmxrcywKLQkJCQkqYmxrcywgbmV3X2Jsb2NrcywgJmVycik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWJyYW5jaFswXS5rZXkgPSBjcHVfdG9fbGUzMihuZXdfYmxvY2tzWzBdKTsKLQkvKgotCSAqIG1ldGFkYXRhIGJsb2NrcyBhbmQgZGF0YSBibG9ja3MgYXJlIGFsbG9jYXRlZC4KLQkgKi8KLQlmb3IgKG4gPSAxOyBuIDw9IGluZGlyZWN0X2Jsa3M7ICBuKyspIHsKLQkJLyoKLQkJICogR2V0IGJ1ZmZlcl9oZWFkIGZvciBwYXJlbnQgYmxvY2ssIHplcm8gaXQgb3V0Ci0JCSAqIGFuZCBzZXQgdGhlIHBvaW50ZXIgdG8gbmV3IG9uZSwgdGhlbiBzZW5kCi0JCSAqIHBhcmVudCB0byBkaXNrLgotCQkgKi8KLQkJYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIG5ld19ibG9ja3Nbbi0xXSk7Ci0JCWlmICh1bmxpa2VseSghYmgpKSB7Ci0JCQllcnIgPSAtRUlPOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KLQotCQlicmFuY2hbbl0uYmggPSBiaDsKLQkJbG9ja19idWZmZXIoYmgpOwotCQlCVUZGRVJfVFJBQ0UoYmgsICJjYWxsIGdldF9jcmVhdGVfYWNjZXNzIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKLQkJaWYgKGVycikgewotCQkJLyogRG9uJ3QgYnJlbHNlKGJoKSBoZXJlOyBpdCdzIGRvbmUgaW4KLQkJCSAqIGV4dDRfam91cm5hbF9mb3JnZXQoKSBiZWxvdyAqLwotCQkJdW5sb2NrX2J1ZmZlcihiaCk7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQotCi0JCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBibG9ja3NpemUpOwotCQlicmFuY2hbbl0ucCA9IChfX2xlMzIgKikgYmgtPmJfZGF0YSArIG9mZnNldHNbbl07Ci0JCWJyYW5jaFtuXS5rZXkgPSBjcHVfdG9fbGUzMihuZXdfYmxvY2tzW25dKTsKLQkJKmJyYW5jaFtuXS5wID0gYnJhbmNoW25dLmtleTsKLQkJaWYgKG4gPT0gaW5kaXJlY3RfYmxrcykgewotCQkJY3VycmVudF9ibG9jayA9IG5ld19ibG9ja3Nbbl07Ci0JCQkvKgotCQkJICogRW5kIG9mIGNoYWluLCB1cGRhdGUgdGhlIGxhc3QgbmV3IG1ldGFibG9jayBvZgotCQkJICogdGhlIGNoYWluIHRvIHBvaW50IHRvIHRoZSBuZXcgYWxsb2NhdGVkCi0JCQkgKiBkYXRhIGJsb2NrcyBudW1iZXJzCi0JCQkgKi8KLQkJCWZvciAoaSA9IDE7IGkgPCBudW07IGkrKykKLQkJCQkqKGJyYW5jaFtuXS5wICsgaSkgPSBjcHVfdG9fbGUzMigrK2N1cnJlbnRfYmxvY2spOwotCQl9Ci0JCUJVRkZFUl9UUkFDRShiaCwgIm1hcmtpbmcgdXB0b2RhdGUiKTsKLQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCXVubG9ja19idWZmZXIoYmgpOwotCi0JCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsZWQ7Ci0JfQotCSpibGtzID0gbnVtOwotCXJldHVybiBlcnI7Ci1mYWlsZWQ6Ci0JLyogQWxsb2NhdGlvbiBmYWlsZWQsIGZyZWUgd2hhdCB3ZSBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3X2Jsb2Nrc1swXSwgMSwgMCk7Ci0JZm9yIChpID0gMTsgaSA8PSBuIDsgaSsrKSB7Ci0JCS8qCi0JCSAqIGJyYW5jaFtpXS5iaCBpcyBuZXdseSBhbGxvY2F0ZWQsIHNvIHRoZXJlIGlzIG5vCi0JCSAqIG5lZWQgdG8gcmV2b2tlIHRoZSBibG9jaywgd2hpY2ggaXMgd2h5IHdlIGRvbid0Ci0JCSAqIG5lZWQgdG8gc2V0IEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEuCi0JCSAqLwotCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld19ibG9ja3NbaV0sIDEsCi0JCQkJIEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUKTsKLQl9Ci0JZm9yIChpID0gbisxOyBpIDwgaW5kaXJlY3RfYmxrczsgaSsrKQotCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld19ibG9ja3NbaV0sIDEsIDApOwotCi0JZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdfYmxvY2tzW2ldLCBudW0sIDApOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gKiBleHQ0X3NwbGljZV9icmFuY2ggLSBzcGxpY2UgdGhlIGFsbG9jYXRlZCBicmFuY2ggb250byBpbm9kZS4KLSAqIEBoYW5kbGU6IGhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgotICogQGlub2RlOiBvd25lcgotICogQGJsb2NrOiAobG9naWNhbCkgbnVtYmVyIG9mIGJsb2NrIHdlIGFyZSBhZGRpbmcKLSAqIEBjaGFpbjogY2hhaW4gb2YgaW5kaXJlY3QgYmxvY2tzICh3aXRoIGEgbWlzc2luZyBsaW5rIC0gc2VlCi0gKglleHQ0X2FsbG9jX2JyYW5jaCkKLSAqIEB3aGVyZTogbG9jYXRpb24gb2YgbWlzc2luZyBsaW5rCi0gKiBAbnVtOiAgIG51bWJlciBvZiBpbmRpcmVjdCBibG9ja3Mgd2UgYXJlIGFkZGluZwotICogQGJsa3M6ICBudW1iZXIgb2YgZGlyZWN0IGJsb2NrcyB3ZSBhcmUgYWRkaW5nCi0gKgotICogVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgbWlzc2luZyBsaW5rIGFuZCBkb2VzIGFsbCBob3VzZWtlZXBpbmcgbmVlZGVkIGluCi0gKiBpbm9kZSAoLT5pX2Jsb2NrcywgZXRjLikuIEluIGNhc2Ugb2Ygc3VjY2VzcyB3ZSBlbmQgdXAgd2l0aCB0aGUgZnVsbAotICogY2hhaW4gdG8gbmV3IGJsb2NrIGFuZCByZXR1cm4gMC4KLSAqLwotc3RhdGljIGludCBleHQ0X3NwbGljZV9icmFuY2goaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIGV4dDRfbGJsa190IGJsb2NrLCBJbmRpcmVjdCAqd2hlcmUsIGludCBudW0sCi0JCQkgICAgICBpbnQgYmxrcykKLXsKLQlpbnQgaTsKLQlpbnQgZXJyID0gMDsKLQlleHQ0X2ZzYmxrX3QgY3VycmVudF9ibG9jazsKLQotCS8qCi0JICogSWYgd2UncmUgc3BsaWNpbmcgaW50byBhIFt0ZF1pbmRpcmVjdCBibG9jayAoYXMgb3Bwb3NlZCB0byB0aGUKLQkgKiBpbm9kZSkgdGhlbiB3ZSBuZWVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gdGhlIFt0ZF1pbmRpcmVjdCBibG9jawotCSAqIGJlZm9yZSB0aGUgc3BsaWNlLgotCSAqLwotCWlmICh3aGVyZS0+YmgpIHsKLQkJQlVGRkVSX1RSQUNFKHdoZXJlLT5iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCB3aGVyZS0+YmgpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0OwotCX0KLQkvKiBUaGF0J3MgaXQgKi8KLQotCSp3aGVyZS0+cCA9IHdoZXJlLT5rZXk7Ci0KLQkvKgotCSAqIFVwZGF0ZSB0aGUgaG9zdCBidWZmZXJfaGVhZCBvciBpbm9kZSB0byBwb2ludCB0byBtb3JlIGp1c3QgYWxsb2NhdGVkCi0JICogZGlyZWN0IGJsb2NrcyBibG9ja3MKLQkgKi8KLQlpZiAobnVtID09IDAgJiYgYmxrcyA+IDEpIHsKLQkJY3VycmVudF9ibG9jayA9IGxlMzJfdG9fY3B1KHdoZXJlLT5rZXkpICsgMTsKLQkJZm9yIChpID0gMTsgaSA8IGJsa3M7IGkrKykKLQkJCSood2hlcmUtPnAgKyBpKSA9IGNwdV90b19sZTMyKGN1cnJlbnRfYmxvY2srKyk7Ci0JfQotCi0JLyogV2UgYXJlIGRvbmUgd2l0aCBhdG9taWMgc3R1ZmYsIG5vdyBkbyB0aGUgcmVzdCBvZiBob3VzZWtlZXBpbmcgKi8KLQkvKiBoYWQgd2Ugc3BsaWNlZCBpdCBvbnRvIGluZGlyZWN0IGJsb2NrPyAqLwotCWlmICh3aGVyZS0+YmgpIHsKLQkJLyoKLQkJICogSWYgd2Ugc3BsaWNlZCBpdCBvbnRvIGFuIGluZGlyZWN0IGJsb2NrLCB3ZSBoYXZlbid0Ci0JCSAqIGFsdGVyZWQgdGhlIGlub2RlLiAgTm90ZSBob3dldmVyIHRoYXQgaWYgaXQgaXMgYmVpbmcgc3BsaWNlZAotCQkgKiBvbnRvIGFuIGluZGlyZWN0IGJsb2NrIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZSAodGhlCi0JCSAqIGZpbGUgaXMgZ3Jvd2luZykgdGhlbiB3ZSAqd2lsbCogYWx0ZXIgdGhlIGlub2RlIHRvIHJlZmxlY3QKLQkJICogdGhlIG5ldyBpX3NpemUuICBCdXQgdGhhdCBpcyBub3QgZG9uZSBoZXJlIC0gaXQgaXMgZG9uZSBpbgotCQkgKiBnZW5lcmljX2NvbW1pdF93cml0ZS0+X19tYXJrX2lub2RlX2RpcnR5LT5leHQ0X2RpcnR5X2lub2RlLgotCQkgKi8KLQkJamJkX2RlYnVnKDUsICJzcGxpY2luZyBpbmRpcmVjdCBvbmx5XG4iKTsKLQkJQlVGRkVSX1RSQUNFKHdoZXJlLT5iaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgd2hlcmUtPmJoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBPSywgd2Ugc3BsaWNlZCBpdCBpbnRvIHRoZSBpbm9kZSBpdHNlbGYgb24gYSBkaXJlY3QgYmxvY2suCi0JCSAqLwotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JCWpiZF9kZWJ1Zyg1LCAic3BsaWNpbmcgZGlyZWN0XG4iKTsKLQl9Ci0JcmV0dXJuIGVycjsKLQotZXJyX291dDoKLQlmb3IgKGkgPSAxOyBpIDw9IG51bTsgaSsrKSB7Ci0JCS8qCi0JCSAqIGJyYW5jaFtpXS5iaCBpcyBuZXdseSBhbGxvY2F0ZWQsIHNvIHRoZXJlIGlzIG5vCi0JCSAqIG5lZWQgdG8gcmV2b2tlIHRoZSBibG9jaywgd2hpY2ggaXMgd2h5IHdlIGRvbid0Ci0JCSAqIG5lZWQgdG8gc2V0IEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEuCi0JCSAqLwotCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHdoZXJlW2ldLmJoLCAwLCAxLAotCQkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7Ci0JfQotCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbGUzMl90b19jcHUod2hlcmVbbnVtXS5rZXkpLAotCQkJIGJsa3MsIDApOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIFRoZSBleHQ0X2luZF9tYXBfYmxvY2tzKCkgZnVuY3Rpb24gaGFuZGxlcyBub24tZXh0ZW50cyBpbm9kZXMKLSAqIChpLmUuLCB1c2luZyB0aGUgdHJhZGl0aW9uYWwgaW5kaXJlY3QvZG91YmxlLWluZGlyZWN0IGlfYmxvY2tzCi0gKiBzY2hlbWUpIGZvciBleHQ0X21hcF9ibG9ja3MoKS4KLSAqCi0gKiBBbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHNpbXBsZTogaWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBzb21ldGhpbmcsIHdlIHdpbGwKLSAqIGhhdmUgdG8gZ28gdGhlIHdob2xlIHdheSB0byBsZWFmLiBTbyBsZXQncyBkbyBpdCBiZWZvcmUgYXR0YWNoaW5nIGFueXRoaW5nCi0gKiB0byB0cmVlLCBzZXQgbGlua2FnZSBiZXR3ZWVuIHRoZSBuZXdib3JuIGJsb2Nrcywgd3JpdGUgdGhlbSBpZiBzeW5jIGlzCi0gKiByZXF1aXJlZCwgcmVjaGVjayB0aGUgcGF0aCwgZnJlZSBhbmQgcmVwZWF0IGlmIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UKLSAqIHNldCB0aGUgbGFzdCBtaXNzaW5nIGxpbmsgKHRoYXQgd2lsbCBwcm90ZWN0IHVzIGZyb20gYW55IHRydW5jYXRlLWdlbmVyYXRlZAotICogcmVtb3ZhbHMgLSBhbGwgYmxvY2tzIG9uIHRoZSBwYXRoIGFyZSBpbW11bmUgbm93KSBhbmQgcG9zc2libHkgZm9yY2UgdGhlCi0gKiB3cml0ZSBvbiB0aGUgcGFyZW50IGJsb2NrLgotICogVGhhdCBoYXMgYSBuaWNlIGFkZGl0aW9uYWwgcHJvcGVydHk6IG5vIHNwZWNpYWwgcmVjb3ZlcnkgZnJvbSB0aGUgZmFpbGVkCi0gKiBhbGxvY2F0aW9ucyBpcyBuZWVkZWQgLSB3ZSBzaW1wbHkgcmVsZWFzZSBibG9ja3MgYW5kIGRvIG5vdCB0b3VjaCBhbnl0aGluZwotICogcmVhY2hhYmxlIGZyb20gaW5vZGUuCi0gKgotICogYGhhbmRsZScgY2FuIGJlIE5VTEwgaWYgY3JlYXRlID09IDAuCi0gKgotICogcmV0dXJuID4gMCwgIyBvZiBibG9ja3MgbWFwcGVkIG9yIGFsbG9jYXRlZC4KLSAqIHJldHVybiA9IDAsIGlmIHBsYWluIGxvb2t1cCBmYWlsZWQuCi0gKiByZXR1cm4gPCAwLCBlcnJvciBjYXNlLgotICoKLSAqIFRoZSBleHQ0X2luZF9nZXRfYmxvY2tzKCkgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoCi0gKiBkb3duX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSBpZiBhbGxvY2F0aW5nIGZpbGVzeXN0ZW0KLSAqIGJsb2NrcyAoaS5lLiwgZmxhZ3MgaGFzIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgc2V0KSBvcgotICogZG93bl9yZWFkKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSBpZiBub3QgYWxsb2NhdGluZyBmaWxlIHN5c3RlbQotICogYmxvY2tzLgotICovCi1zdGF0aWMgaW50IGV4dDRfaW5kX21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsCi0JCQkgICAgICAgaW50IGZsYWdzKQotewotCWludCBlcnIgPSAtRUlPOwotCWV4dDRfbGJsa190IG9mZnNldHNbNF07Ci0JSW5kaXJlY3QgY2hhaW5bNF07Ci0JSW5kaXJlY3QgKnBhcnRpYWw7Ci0JZXh0NF9mc2Jsa190IGdvYWw7Ci0JaW50IGluZGlyZWN0X2Jsa3M7Ci0JaW50IGJsb2Nrc190b19ib3VuZGFyeSA9IDA7Ci0JaW50IGRlcHRoOwotCWludCBjb3VudCA9IDA7Ci0JZXh0NF9mc2Jsa190IGZpcnN0X2Jsb2NrID0gMDsKLQotCXRyYWNlX2V4dDRfaW5kX21hcF9ibG9ja3NfZW50ZXIoaW5vZGUsIG1hcC0+bV9sYmxrLCBtYXAtPm1fbGVuLCBmbGFncyk7Ci0JSl9BU1NFUlQoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpOwotCUpfQVNTRVJUKGhhbmRsZSAhPSBOVUxMIHx8IChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApOwotCWRlcHRoID0gZXh0NF9ibG9ja190b19wYXRoKGlub2RlLCBtYXAtPm1fbGJsaywgb2Zmc2V0cywKLQkJCQkgICAmYmxvY2tzX3RvX2JvdW5kYXJ5KTsKLQotCWlmIChkZXB0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCXBhcnRpYWwgPSBleHQ0X2dldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmVycik7Ci0KLQkvKiBTaW1wbGVzdCBjYXNlIC0gYmxvY2sgZm91bmQsIG5vIGFsbG9jYXRpb24gbmVlZGVkICovCi0JaWYgKCFwYXJ0aWFsKSB7Ci0JCWZpcnN0X2Jsb2NrID0gbGUzMl90b19jcHUoY2hhaW5bZGVwdGggLSAxXS5rZXkpOwotCQljb3VudCsrOwotCQkvKm1hcCBtb3JlIGJsb2NrcyovCi0JCXdoaWxlIChjb3VudCA8IG1hcC0+bV9sZW4gJiYgY291bnQgPD0gYmxvY2tzX3RvX2JvdW5kYXJ5KSB7Ci0JCQlleHQ0X2ZzYmxrX3QgYmxrOwotCi0JCQlibGsgPSBsZTMyX3RvX2NwdSgqKGNoYWluW2RlcHRoLTFdLnAgKyBjb3VudCkpOwotCi0JCQlpZiAoYmxrID09IGZpcnN0X2Jsb2NrICsgY291bnQpCi0JCQkJY291bnQrKzsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJfQotCQlnb3RvIGdvdF9pdDsKLQl9Ci0KLQkvKiBOZXh0IHNpbXBsZSBjYXNlIC0gcGxhaW4gbG9va3VwIG9yIGZhaWxlZCByZWFkIG9mIGluZGlyZWN0IGJsb2NrICovCi0JaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDAgfHwgZXJyID09IC1FSU8pCi0JCWdvdG8gY2xlYW51cDsKLQotCS8qCi0JICogT2theSwgd2UgbmVlZCB0byBkbyBibG9jayBhbGxvY2F0aW9uLgotCSovCi0JZ29hbCA9IGV4dDRfZmluZF9nb2FsKGlub2RlLCBtYXAtPm1fbGJsaywgcGFydGlhbCk7Ci0KLQkvKiB0aGUgbnVtYmVyIG9mIGJsb2NrcyBuZWVkIHRvIGFsbG9jYXRlIGZvciBbZCx0XWluZGlyZWN0IGJsb2NrcyAqLwotCWluZGlyZWN0X2Jsa3MgPSAoY2hhaW4gKyBkZXB0aCkgLSBwYXJ0aWFsIC0gMTsKLQotCS8qCi0JICogTmV4dCBsb29rIHVwIHRoZSBpbmRpcmVjdCBtYXAgdG8gY291bnQgdGhlIHRvdG9hbCBudW1iZXIgb2YKLQkgKiBkaXJlY3QgYmxvY2tzIHRvIGFsbG9jYXRlIGZvciB0aGlzIGJyYW5jaC4KLQkgKi8KLQljb3VudCA9IGV4dDRfYmxrc190b19hbGxvY2F0ZShwYXJ0aWFsLCBpbmRpcmVjdF9ibGtzLAotCQkJCSAgICAgIG1hcC0+bV9sZW4sIGJsb2Nrc190b19ib3VuZGFyeSk7Ci0JLyoKLQkgKiBCbG9jayBvdXQgZXh0NF90cnVuY2F0ZSB3aGlsZSB3ZSBhbHRlciB0aGUgdHJlZQotCSAqLwotCWVyciA9IGV4dDRfYWxsb2NfYnJhbmNoKGhhbmRsZSwgaW5vZGUsIG1hcC0+bV9sYmxrLCBpbmRpcmVjdF9ibGtzLAotCQkJCSZjb3VudCwgZ29hbCwKLQkJCQlvZmZzZXRzICsgKHBhcnRpYWwgLSBjaGFpbiksIHBhcnRpYWwpOwotCi0JLyoKLQkgKiBUaGUgZXh0NF9zcGxpY2VfYnJhbmNoIGNhbGwgd2lsbCBmcmVlIGFuZCBmb3JnZXQgYW55IGJ1ZmZlcnMKLQkgKiBvbiB0aGUgbmV3IGNoYWluIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSwgYnV0IHRoYXQgcmlza3MgdXNpbmcKLQkgKiB1cCB0cmFuc2FjdGlvbiBjcmVkaXRzLCBlc3BlY2lhbGx5IGZvciBiaXRtYXBzIHdoZXJlIHRoZQotCSAqIGNyZWRpdHMgY2Fubm90IGJlIHJldHVybmVkLiAgQ2FuIHdlIGhhbmRsZSB0aGlzIHNvbWVob3c/ICBXZQotCSAqIG1heSBuZWVkIHRvIHJldHVybiAtRUFHQUlOIHVwd2FyZHMgaW4gdGhlIHdvcnN0IGNhc2UuICAtLXNjdAotCSAqLwotCWlmICghZXJyKQotCQllcnIgPSBleHQ0X3NwbGljZV9icmFuY2goaGFuZGxlLCBpbm9kZSwgbWFwLT5tX2xibGssCi0JCQkJCSBwYXJ0aWFsLCBpbmRpcmVjdF9ibGtzLCBjb3VudCk7Ci0JaWYgKGVycikKLQkJZ290byBjbGVhbnVwOwotCi0JbWFwLT5tX2ZsYWdzIHw9IEVYVDRfTUFQX05FVzsKLQotCWV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpOwotZ290X2l0OgotCW1hcC0+bV9mbGFncyB8PSBFWFQ0X01BUF9NQVBQRUQ7Ci0JbWFwLT5tX3BibGsgPSBsZTMyX3RvX2NwdShjaGFpbltkZXB0aC0xXS5rZXkpOwotCW1hcC0+bV9sZW4gPSBjb3VudDsKLQlpZiAoY291bnQgPiBibG9ja3NfdG9fYm91bmRhcnkpCi0JCW1hcC0+bV9mbGFncyB8PSBFWFQ0X01BUF9CT1VOREFSWTsKLQllcnIgPSBjb3VudDsKLQkvKiBDbGVhbiB1cCBhbmQgZXhpdCAqLwotCXBhcnRpYWwgPSBjaGFpbiArIGRlcHRoIC0gMTsJLyogdGhlIHdob2xlIGNoYWluICovCi1jbGVhbnVwOgotCXdoaWxlIChwYXJ0aWFsID4gY2hhaW4pIHsKLQkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiY2FsbCBicmVsc2UiKTsKLQkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKLQkJcGFydGlhbC0tOwotCX0KLW91dDoKLQl0cmFjZV9leHQ0X2luZF9tYXBfYmxvY2tzX2V4aXQoaW5vZGUsIG1hcC0+bV9sYmxrLAotCQkJCW1hcC0+bV9wYmxrLCBtYXAtPm1fbGVuLCBlcnIpOwotCXJldHVybiBlcnI7Ci19Ci0KICNpZmRlZiBDT05GSUdfUVVPVEEKIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0xMDczLDMzICsyNDcsNiBAQAogCiAvKgogICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQotICogdG8gYWxsb2NhdGUgYSBuZXcgYmxvY2sgYXQgQGxibG9ja3MgZm9yIG5vbiBleHRlbnQgZmlsZSBiYXNlZCBmaWxlCi0gKi8KLXN0YXRpYyBpbnQgZXh0NF9pbmRpcmVjdF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICAgICBzZWN0b3JfdCBsYmxvY2spCi17Ci0Jc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwotCXNlY3Rvcl90IGRpbmRfbWFzayA9IH4oKHNlY3Rvcl90KUVYVDRfQUREUl9QRVJfQkxPQ0soaW5vZGUtPmlfc2IpIC0gMSk7Ci0JaW50IGJsa19iaXRzOwotCi0JaWYgKGxibG9jayA8IEVYVDRfTkRJUl9CTE9DS1MpCi0JCXJldHVybiAwOwotCi0JbGJsb2NrIC09IEVYVDRfTkRJUl9CTE9DS1M7Ci0KLQlpZiAoZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sZW4gJiYKLQkgICAgKGxibG9jayAmIGRpbmRfbWFzaykgPT0gZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jaykgewotCQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbisrOwotCQlyZXR1cm4gMDsKLQl9Ci0JZWktPmlfZGFfbWV0YWRhdGFfY2FsY19sYXN0X2xibG9jayA9IGxibG9jayAmIGRpbmRfbWFzazsKLQllaS0+aV9kYV9tZXRhZGF0YV9jYWxjX2xlbiA9IDE7Ci0JYmxrX2JpdHMgPSBvcmRlcl9iYXNlXzIobGJsb2NrKTsKLQlyZXR1cm4gKGJsa19iaXRzIC8gRVhUNF9BRERSX1BFUl9CTE9DS19CSVRTKGlub2RlLT5pX3NiKSkgKyAxOwotfQotCi0vKgotICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbWV0YWRhdGEgYmxvY2tzIG5lZWQgdG8gcmVzZXJ2ZQogICogdG8gYWxsb2NhdGUgYSBibG9jayBsb2NhdGVkIGF0IEBsYmxvY2sKICAqLwogc3RhdGljIGludCBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibG9jaykKQEAgLTExMDcsNyArMjU0LDcgQEAKIAlpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpCiAJCXJldHVybiBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgbGJsb2NrKTsKIAotCXJldHVybiBleHQ0X2luZGlyZWN0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBsYmxvY2spOworCXJldHVybiBleHQ0X2luZF9jYWxjX21ldGFkYXRhX2Ftb3VudChpbm9kZSwgbGJsb2NrKTsKIH0KIAogLyoKQEAgLTE1ODksMTYgKzczNiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFRydW5jYXRlIGJsb2NrcyB0aGF0IHdlcmUgbm90IHVzZWQgYnkgd3JpdGUuIFdlIGhhdmUgdG8gdHJ1bmNhdGUgdGhlCi0gKiBwYWdlY2FjaGUgYXMgd2VsbCBzbyB0aGF0IGNvcnJlc3BvbmRpbmcgYnVmZmVycyBnZXQgcHJvcGVybHkgdW5tYXBwZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGV4dDRfdHJ1bmNhdGVfZmFpbGVkX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7Ci0JZXh0NF90cnVuY2F0ZShpbm9kZSk7Ci19Ci0KIHN0YXRpYyBpbnQgZXh0NF9nZXRfYmxvY2tfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApAQCAtMTg0OSw2ICs5ODYsOCBAQAogCWZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJdG8gPSBmcm9tICsgbGVuOwogCisJQlVHX09OKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKTsKKwogCWlmIChjb3BpZWQgPCBsZW4pIHsKIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCiAJCQljb3BpZWQgPSAwOwpAQCAtMTg2Myw2ICsxMDAyLDcgQEAKIAlpZiAobmV3X2lfc2l6ZSA+IGlub2RlLT5pX3NpemUpCiAJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zK2NvcGllZCk7CiAJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfSkRBVEEpOworCUVYVDRfSShpbm9kZSktPmlfZGF0YXN5bmNfdGlkID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZDsKIAlpZiAobmV3X2lfc2l6ZSA+IEVYVDRfSShpbm9kZSktPmlfZGlza3NpemUpIHsKIAkJZXh0NF91cGRhdGVfaV9kaXNrc2l6ZShpbm9kZSwgbmV3X2lfc2l6ZSk7CiAJCXJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CkBAIC0yMTQ4LDcgKzEyODgsMTIgQEAKIAkJCWVsc2UgaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBNQkxLX0lPX1NVQk1JVCkpCiAJCQkJZXJyID0gZXh0NF9iaW9fd3JpdGVfcGFnZSgmaW9fc3VibWl0LCBwYWdlLAogCQkJCQkJCSAgbGVuLCBtcGQtPndiYyk7Ci0JCQllbHNlCisJCQllbHNlIGlmIChidWZmZXJfdW5pbml0KHBhZ2VfYnVmcykpIHsKKwkJCQlleHQ0X3NldF9iaF9lbmRpbyhwYWdlX2J1ZnMsIGlub2RlKTsKKwkJCQllcnIgPSBibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8ocGFnZSwKKwkJCQkJbm9hbGxvY19nZXRfYmxvY2tfd3JpdGUsCisJCQkJCW1wZC0+d2JjLCBleHQ0X2VuZF9pb19idWZmZXJfd3JpdGUpOworCQkJfSBlbHNlCiAJCQkJZXJyID0gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsCiAJCQkJCW5vYWxsb2NfZ2V0X2Jsb2NrX3dyaXRlLCBtcGQtPndiYyk7CiAKQEAgLTI1NjQsNiArMTcwOSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCUJVR19PTighZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSk7CisKIAlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmcywgMCwgbGVuLCBOVUxMLAogCQkJCWRvX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzcyk7CiAKQEAgLTI1NzEsNiArMTcxOCw3IEBACiAJCQkJd3JpdGVfZW5kX2ZuKTsKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IGVycjsKKwlFWFQ0X0koaW5vZGUpLT5pX2RhdGFzeW5jX3RpZCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7CiAJZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gZXJyOwpAQCAtMzQ1MCwxMTIgKzI1OTgsNiBAQAogfQogCiAvKgotICogT19ESVJFQ1QgZm9yIGV4dDMgKG9yIGluZGlyZWN0IG1hcCkgYmFzZWQgZmlsZXMKLSAqCi0gKiBJZiB0aGUgT19ESVJFQ1Qgd3JpdGUgd2lsbCBleHRlbmQgdGhlIGZpbGUgdGhlbiBhZGQgdGhpcyBpbm9kZSB0byB0aGUKLSAqIG9ycGhhbiBsaXN0LiAgU28gcmVjb3Zlcnkgd2lsbCB0cnVuY2F0ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaXplCi0gKiBpZiB0aGUgbWFjaGluZSBjcmFzaGVzIGR1cmluZyB0aGUgd3JpdGUuCi0gKgotICogSWYgdGhlIE9fRElSRUNUIHdyaXRlIGlzIGludGFudGlhdGluZyBob2xlcyBpbnNpZGUgaV9zaXplIGFuZCB0aGUgbWFjaGluZQotICogY3Jhc2hlcyB0aGVuIHN0YWxlIGRpc2sgZGF0YSBfbWF5XyBiZSBleHBvc2VkIGluc2lkZSB0aGUgZmlsZS4gQnV0IGN1cnJlbnQKLSAqIFZGUyBjb2RlIGZhbGxzIGJhY2sgaW50byBidWZmZXJlZCBwYXRoIGluIHRoYXQgY2FzZSBzbyB3ZSBhcmUgc2FmZS4KLSAqLwotc3RhdGljIHNzaXplX3QgZXh0NF9pbmRfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0Jc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwotCWhhbmRsZV90ICpoYW5kbGU7Ci0Jc3NpemVfdCByZXQ7Ci0JaW50IG9ycGhhbiA9IDA7Ci0Jc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOwotCWludCByZXRyaWVzID0gMDsKLQotCWlmIChydyA9PSBXUklURSkgewotCQlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OwotCi0JCWlmIChmaW5hbF9zaXplID4gaW5vZGUtPmlfc2l6ZSkgewotCQkJLyogQ3JlZGl0cyBmb3Igc2IgKyBpbm9kZSB3cml0ZSAqLwotCQkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAyKTsKLQkJCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJb3JwaGFuID0gMTsKLQkJCWVpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKLQkJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCX0KLQl9Ci0KLXJldHJ5OgotCWlmIChydyA9PSBSRUFEICYmIGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkKLQkJcmV0ID0gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLAotCQkJCSBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCi0JCQkJIG9mZnNldCwgbnJfc2VncywKLQkJCQkgZXh0NF9nZXRfYmxvY2ssIE5VTEwsIE5VTEwsIDApOwotCWVsc2UgewotCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpb3YsCi0JCQkJIG9mZnNldCwgbnJfc2VncywgZXh0NF9nZXRfYmxvY2spOwotCi0JCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKLQkJCWxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJCWxvZmZfdCBlbmQgPSBvZmZzZXQgKyBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7Ci0KLQkJCWlmIChlbmQgPiBpc2l6ZSkKLQkJCQlleHQ0X3RydW5jYXRlX2ZhaWxlZF93cml0ZShpbm9kZSk7Ci0JCX0KLQl9Ci0JaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCi0JCWdvdG8gcmV0cnk7Ci0KLQlpZiAob3JwaGFuKSB7Ci0JCWludCBlcnI7Ci0KLQkJLyogQ3JlZGl0cyBmb3Igc2IgKyBpbm9kZSB3cml0ZSAqLwotCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIpOwotCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKLQkJCS8qIFRoaXMgaXMgcmVhbGx5IGJhZCBsdWNrLiBXZSd2ZSB3cml0dGVuIHRoZSBkYXRhCi0JCQkgKiBidXQgY2Fubm90IGV4dGVuZCBpX3NpemUuIEJhaWwgb3V0IGFuZCBwcmV0ZW5kCi0JCQkgKiB0aGUgd3JpdGUgZmFpbGVkLi4uICovCi0JCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCQlpZiAoaW5vZGUtPmlfbmxpbmspCi0JCQkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGlub2RlLT5pX25saW5rKQotCQkJZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpOwotCQlpZiAocmV0ID4gMCkgewotCQkJbG9mZl90IGVuZCA9IG9mZnNldCArIHJldDsKLQkJCWlmIChlbmQgPiBpbm9kZS0+aV9zaXplKSB7Ci0JCQkJZWktPmlfZGlza3NpemUgPSBlbmQ7Ci0JCQkJaV9zaXplX3dyaXRlKGlub2RlLCBlbmQpOwotCQkJCS8qCi0JCQkJICogV2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgcG9zaXRpdmUgYHJldCcKLQkJCQkgKiBoZXJlIGR1ZSB0byBub24temVyby1sZW5ndGggSS9PLCBzbyB0aGVyZSdzCi0JCQkJICogbm8gd2F5IG9mIHJlcG9ydGluZyBlcnJvciByZXR1cm5zIGZyb20KLQkJCQkgKiBleHQ0X21hcmtfaW5vZGVfZGlydHkoKSB0byB1c2Vyc3BhY2UuICBTbwotCQkJCSAqIGlnbm9yZSBpdC4KLQkJCQkgKi8KLQkJCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JCQl9Ci0JCX0KLQkJZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gZXJyOwotCX0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogZXh0NF9nZXRfYmxvY2sgdXNlZCB3aGVuIHByZXBhcmluZyBmb3IgYSBESU8gd3JpdGUgb3IgYnVmZmVyIHdyaXRlLgogICogV2UgYWxsb2NhdGUgYW4gdWluaXRpYWxpemVkIGV4dGVudCBpZiBibG9ja3MgaGF2ZW4ndCBiZWVuIGFsbG9jYXRlZC4KICAqIFRoZSBleHRlbnQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhlIElPIGlzIGNvbXBsZXRlLgpAQCAtMzYzOCw4ICsyNjgwLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlvX2VuZC0+ZmxhZyA9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKKwkvKgorCSAqIEl0IG1heSBiZSBvdmVyLWRlZmVuc2l2ZSBoZXJlIHRvIGNoZWNrIEVYVDRfSU9fRU5EX1VOV1JJVFRFTiBub3csCisJICogYnV0IGJlaW5nIG1vcmUgY2FyZWZ1bCBpcyBhbHdheXMgc2FmZSBmb3IgdGhlIGZ1dHVyZSBjaGFuZ2UuCisJICovCiAJaW5vZGUgPSBpb19lbmQtPmlub2RlOworCWlmICghKGlvX2VuZC0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikpIHsKKwkJaW9fZW5kLT5mbGFnIHw9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKKwkJYXRvbWljX2luYygmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKTsKKwl9CiAKIAkvKiBBZGQgdGhlIGlvX2VuZCB0byBwZXItaW5vZGUgY29tcGxldGVkIGlvIGxpc3QqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZFWFQ0X0koaW5vZGUpLT5pX2NvbXBsZXRlZF9pb19sb2NrLCBmbGFncyk7CkBAIC00MDMzLDM4MyArMzA4Miw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFByb2JhYmx5IGl0IHNob3VsZCBiZSBhIGxpYnJhcnkgZnVuY3Rpb24uLi4gc2VhcmNoIGZvciBmaXJzdCBub24temVybyB3b3JkCi0gKiBvciBtZW1jbXAgd2l0aCB6ZXJvX3BhZ2UsIHdoYXRldmVyIGlzIGJldHRlciBmb3IgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuCi0gKiBMaW51cz8KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYWxsX3plcm9lcyhfX2xlMzIgKnAsIF9fbGUzMiAqcSkKLXsKLQl3aGlsZSAocCA8IHEpCi0JCWlmICgqcCsrKQotCQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qKgotICoJZXh0NF9maW5kX3NoYXJlZCAtIGZpbmQgdGhlIGluZGlyZWN0IGJsb2NrcyBmb3IgcGFydGlhbCB0cnVuY2F0aW9uLgotICoJQGlub2RlOgkgIGlub2RlIGluIHF1ZXN0aW9uCi0gKglAZGVwdGg6CSAgZGVwdGggb2YgdGhlIGFmZmVjdGVkIGJyYW5jaAotICoJQG9mZnNldHM6IG9mZnNldHMgb2YgcG9pbnRlcnMgaW4gdGhhdCBicmFuY2ggKHNlZSBleHQ0X2Jsb2NrX3RvX3BhdGgpCi0gKglAY2hhaW46CSAgcGxhY2UgdG8gc3RvcmUgdGhlIHBvaW50ZXJzIHRvIHBhcnRpYWwgaW5kaXJlY3QgYmxvY2tzCi0gKglAdG9wOgkgIHBsYWNlIHRvIHRoZSAoZGV0YWNoZWQpIHRvcCBvZiBicmFuY2gKLSAqCi0gKglUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZXh0NF90cnVuY2F0ZSgpLgotICoKLSAqCVdoZW4gd2UgZG8gdHJ1bmNhdGUoKSB3ZSBtYXkgaGF2ZSB0byBjbGVhbiB0aGUgZW5kcyBvZiBzZXZlcmFsCi0gKglpbmRpcmVjdCBibG9ja3MgYnV0IGxlYXZlIHRoZSBibG9ja3MgdGhlbXNlbHZlcyBhbGl2ZS4gQmxvY2sgaXMKLSAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgaWYgc29tZSBkYXRhIGJlbG93IHRoZSBuZXcgaV9zaXplIGlzIHJlZmVycmVkCi0gKglmcm9tIGl0IChhbmQgaXQgaXMgb24gdGhlIHBhdGggdG8gdGhlIGZpcnN0IGNvbXBsZXRlbHkgdHJ1bmNhdGVkCi0gKglkYXRhIGJsb2NrLCBpbmRlZWQpLiAgV2UgaGF2ZSB0byBmcmVlIHRoZSB0b3Agb2YgdGhhdCBwYXRoIGFsb25nCi0gKgl3aXRoIGV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXRoLiBTaW5jZSBubyBhbGxvY2F0aW9uCi0gKglwYXN0IHRoZSB0cnVuY2F0aW9uIHBvaW50IGlzIHBvc3NpYmxlIHVudGlsIGV4dDRfdHJ1bmNhdGUoKQotICoJZmluaXNoZXMsIHdlIG1heSBzYWZlbHkgZG8gdGhlIGxhdHRlciwgYnV0IHRvcCBvZiBicmFuY2ggbWF5Ci0gKglyZXF1aXJlIHNwZWNpYWwgYXR0ZW50aW9uIC0gcGFnZW91dCBiZWxvdyB0aGUgdHJ1bmNhdGlvbiBwb2ludAotICoJbWlnaHQgdHJ5IHRvIHBvcHVsYXRlIGl0LgotICoKLSAqCVdlIGF0b21pY2FsbHkgZGV0YWNoIHRoZSB0b3Agb2YgYnJhbmNoIGZyb20gdGhlIHRyZWUsIHN0b3JlIHRoZQotICoJYmxvY2sgbnVtYmVyIG9mIGl0cyByb290IGluICpAdG9wLCBwb2ludGVycyB0byBidWZmZXJfaGVhZHMgb2YKLSAqCXBhcnRpYWxseSB0cnVuY2F0ZWQgYmxvY2tzIC0gaW4gQGNoYWluW10uYmggYW5kIHBvaW50ZXJzIHRvCi0gKgl0aGVpciBsYXN0IGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSByZW1vdmVkIC0gaW4KLSAqCUBjaGFpbltdLnAuIFJldHVybiB2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBsYXN0IGZpbGxlZCBlbGVtZW50Ci0gKglvZiBAY2hhaW4uCi0gKgotICoJVGhlIHdvcmsgbGVmdCB0byBjYWxsZXIgdG8gZG8gdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHN1YnRyZWVzOgotICoJCWEpIGZyZWUgdGhlIHN1YnRyZWUgc3RhcnRpbmcgZnJvbSAqQHRvcAotICoJCWIpIGZyZWUgdGhlIHN1YnRyZWVzIHdob3NlIHJvb3RzIGFyZSBzdG9yZWQgaW4KLSAqCQkJKEBjaGFpbltpXS5wKzEgLi4gZW5kIG9mIEBjaGFpbltpXS5iaC0+Yl9kYXRhKQotICoJCWMpIGZyZWUgdGhlIHN1YnRyZWVzIGdyb3dpbmcgZnJvbSB0aGUgaW5vZGUgcGFzdCB0aGUgQGNoYWluWzBdLgotICoJCQkobm8gcGFydGlhbGx5IHRydW5jYXRlZCBzdHVmZiB0aGVyZSkuICAqLwotCi1zdGF0aWMgSW5kaXJlY3QgKmV4dDRfZmluZF9zaGFyZWQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGRlcHRoLAotCQkJCSAgZXh0NF9sYmxrX3Qgb2Zmc2V0c1s0XSwgSW5kaXJlY3QgY2hhaW5bNF0sCi0JCQkJICBfX2xlMzIgKnRvcCkKLXsKLQlJbmRpcmVjdCAqcGFydGlhbCwgKnA7Ci0JaW50IGssIGVycjsKLQotCSp0b3AgPSAwOwotCS8qIE1ha2UgayBpbmRleCB0aGUgZGVlcGVzdCBub24tbnVsbCBvZmZzZXQgKyAxICovCi0JZm9yIChrID0gZGVwdGg7IGsgPiAxICYmICFvZmZzZXRzW2stMV07IGstLSkKLQkJOwotCXBhcnRpYWwgPSBleHQ0X2dldF9icmFuY2goaW5vZGUsIGssIG9mZnNldHMsIGNoYWluLCAmZXJyKTsKLQkvKiBXcml0ZXI6IHBvaW50ZXJzICovCi0JaWYgKCFwYXJ0aWFsKQotCQlwYXJ0aWFsID0gY2hhaW4gKyBrLTE7Ci0JLyoKLQkgKiBJZiB0aGUgYnJhbmNoIGFjcXVpcmVkIGNvbnRpbnVhdGlvbiBzaW5jZSB3ZSd2ZSBsb29rZWQgYXQgaXQgLQotCSAqIGZpbmUsIGl0IHNob3VsZCBhbGwgc3Vydml2ZSBhbmQgKG5ldykgdG9wIGRvZXNuJ3QgYmVsb25nIHRvIHVzLgotCSAqLwotCWlmICghcGFydGlhbC0+a2V5ICYmICpwYXJ0aWFsLT5wKQotCQkvKiBXcml0ZXI6IGVuZCAqLwotCQlnb3RvIG5vX3RvcDsKLQlmb3IgKHAgPSBwYXJ0aWFsOyAocCA+IGNoYWluKSAmJiBhbGxfemVyb2VzKChfX2xlMzIgKikgcC0+YmgtPmJfZGF0YSwgcC0+cCk7IHAtLSkKLQkJOwotCS8qCi0JICogT0ssIHdlJ3ZlIGZvdW5kIHRoZSBsYXN0IGJsb2NrIHRoYXQgbXVzdCBzdXJ2aXZlLiBUaGUgcmVzdCBvZiBvdXIKLQkgKiBicmFuY2ggc2hvdWxkIGJlIGRldGFjaGVkIGJlZm9yZSB1bmxvY2tpbmcuIEhvd2V2ZXIsIGlmIHRoYXQgcmVzdAotCSAqIG9mIGJyYW5jaCBpcyBhbGwgb3VycyBhbmQgZG9lcyBub3QgZ3JvdyBpbW1lZGlhdGVseSBmcm9tIHRoZSBpbm9kZQotCSAqIGl0J3MgZWFzaWVyIHRvIGNoZWF0IGFuZCBqdXN0IGRlY3JlbWVudCBwYXJ0aWFsLT5wLgotCSAqLwotCWlmIChwID09IGNoYWluICsgayAtIDEgJiYgcCA+IGNoYWluKSB7Ci0JCXAtPnAtLTsKLQl9IGVsc2UgewotCQkqdG9wID0gKnAtPnA7Ci0JCS8qIE5vcGUsIGRvbid0IGRvIHRoaXMgaW4gZXh0NC4gIE11c3QgbGVhdmUgdGhlIHRyZWUgaW50YWN0ICovCi0jaWYgMAotCQkqcC0+cCA9IDA7Ci0jZW5kaWYKLQl9Ci0JLyogV3JpdGVyOiBlbmQgKi8KLQotCXdoaWxlIChwYXJ0aWFsID4gcCkgewotCQlicmVsc2UocGFydGlhbC0+YmgpOwotCQlwYXJ0aWFsLS07Ci0JfQotbm9fdG9wOgotCXJldHVybiBwYXJ0aWFsOwotfQotCi0vKgotICogWmVybyBhIG51bWJlciBvZiBibG9jayBwb2ludGVycyBpbiBlaXRoZXIgYW4gaW5vZGUgb3IgYW4gaW5kaXJlY3QgYmxvY2suCi0gKiBJZiB3ZSByZXN0YXJ0IHRoZSB0cmFuc2FjdGlvbiB3ZSBtdXN0IGFnYWluIGdldCB3cml0ZSBhY2Nlc3MgdG8gdGhlCi0gKiBpbmRpcmVjdCBibG9jayBmb3IgZnVydGhlciBtb2RpZmljYXRpb24uCi0gKgotICogV2UgcmVsZWFzZSBgY291bnQnIGJsb2NrcyBvbiBkaXNrLCBidXQgKGxhc3QgLSBmaXJzdCkgbWF5IGJlIGdyZWF0ZXIKLSAqIHRoYW4gYGNvdW50JyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBob2xlcyBpbiB0aGVyZS4KLSAqCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGludmFsaWQgYmxvY2sgcmFuZ2UKLSAqIGFuZCA8IDAgb24gZmF0YWwgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSAgICAgZXh0NF9mc2Jsa190IGJsb2NrX3RvX2ZyZWUsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIF9fbGUzMiAqZmlyc3QsCi0JCQkgICAgIF9fbGUzMiAqbGFzdCkKLXsKLQlfX2xlMzIgKnA7Ci0JaW50CWZsYWdzID0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQgfCBFWFQ0X0ZSRUVfQkxPQ0tTX1ZBTElEQVRFRDsKLQlpbnQJZXJyOwotCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKLQkJZmxhZ3MgfD0gRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQTsKLQotCWlmICghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLCBibG9ja190b19mcmVlLAotCQkJCSAgIGNvdW50KSkgewotCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAiYXR0ZW1wdCB0byBjbGVhciBpbnZhbGlkICIKLQkJCQkgImJsb2NrcyAlbGx1IGxlbiAlbHUiLAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBibG9ja190b19mcmVlLCBjb3VudCk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICh0cnlfdG9fZXh0ZW5kX3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpKSB7Ci0JCWlmIChiaCkgewotCQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOwotCQkJaWYgKHVubGlrZWx5KGVycikpCi0JCQkJZ290byBvdXRfZXJyOwotCQl9Ci0JCWVyciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQkJaWYgKHVubGlrZWx5KGVycikpCi0JCQlnb3RvIG91dF9lcnI7Ci0JCWVyciA9IGV4dDRfdHJ1bmNhdGVfcmVzdGFydF90cmFucyhoYW5kbGUsIGlub2RlLAotCQkJCQkJICBibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSk7Ci0JCWlmICh1bmxpa2VseShlcnIpKQotCQkJZ290byBvdXRfZXJyOwotCQlpZiAoYmgpIHsKLQkJCUJVRkZFUl9UUkFDRShiaCwgInJldGFraW5nIHdyaXRlIGFjY2VzcyIpOwotCQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCX0KLQl9Ci0KLQlmb3IgKHAgPSBmaXJzdDsgcCA8IGxhc3Q7IHArKykKLQkJKnAgPSAwOwotCi0JZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9ja190b19mcmVlLCBjb3VudCwgZmxhZ3MpOwotCXJldHVybiAwOwotb3V0X2VycjoKLQlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKioKLSAqIGV4dDRfZnJlZV9kYXRhIC0gZnJlZSBhIGxpc3Qgb2YgZGF0YSBibG9ja3MKLSAqIEBoYW5kbGU6CWhhbmRsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgotICogQGlub2RlOglpbm9kZSB3ZSBhcmUgZGVhbGluZyB3aXRoCi0gKiBAdGhpc19iaDoJaW5kaXJlY3QgYnVmZmVyX2hlYWQgd2hpY2ggY29udGFpbnMgKkBmaXJzdCBhbmQgKkBsYXN0Ci0gKiBAZmlyc3Q6CWFycmF5IG9mIGJsb2NrIG51bWJlcnMKLSAqIEBsYXN0Oglwb2ludHMgaW1tZWRpYXRlbHkgcGFzdCB0aGUgZW5kIG9mIGFycmF5Ci0gKgotICogV2UgYXJlIGZyZWVpbmcgYWxsIGJsb2NrcyByZWZlcnJlZCBmcm9tIHRoYXQgYXJyYXkgKG51bWJlcnMgYXJlIHN0b3JlZCBhcwotICogbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzIGFwcHJvcHJpYXRlbHkuCi0gKgotICogV2UgYWNjdW11bGF0ZSBjb250aWd1b3VzIHJ1bnMgb2YgYmxvY2tzIHRvIGZyZWUuICBDb252ZW5pZW50bHksIGlmIHRoZXNlCi0gKiBibG9ja3MgYXJlIGNvbnRpZ3VvdXMgdGhlbiByZWxlYXNpbmcgdGhlbSBhdCBvbmUgdGltZSB3aWxsIG9ubHkgYWZmZWN0IG9uZQotICogb3IgdHdvIGJpdG1hcCBibG9ja3MgKCsgZ3JvdXAgZGVzY3JpcHRvcihzKSBhbmQgc3VwZXJibG9jaykgYW5kIHdlIHdvbid0Ci0gKiBhY3R1YWxseSB1c2UgYSBsb3Qgb2Ygam91cm5hbCBzcGFjZS4KLSAqCi0gKiBAdGhpc19iaCB3aWxsIGJlICVOVUxMIGlmIEBmaXJzdCBhbmQgQGxhc3QgcG9pbnQgaW50byB0aGUgaW5vZGUncyBkaXJlY3QKLSAqIGJsb2NrIHBvaW50ZXJzLgotICovCi1zdGF0aWMgdm9pZCBleHQ0X2ZyZWVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICp0aGlzX2JoLAotCQkJICAgX19sZTMyICpmaXJzdCwgX19sZTMyICpsYXN0KQotewotCWV4dDRfZnNibGtfdCBibG9ja190b19mcmVlID0gMDsgICAgLyogU3RhcnRpbmcgYmxvY2sgIyBvZiBhIHJ1biAqLwotCXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwkgICAgLyogTnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgcnVuICovCi0JX19sZTMyICpibG9ja190b19mcmVlX3AgPSBOVUxMOwkgICAgLyogUG9pbnRlciBpbnRvIGlub2RlL2luZAotCQkJCQkgICAgICAgY29ycmVzcG9uZGluZyB0bwotCQkJCQkgICAgICAgYmxvY2tfdG9fZnJlZSAqLwotCWV4dDRfZnNibGtfdCBucjsJCSAgICAvKiBDdXJyZW50IGJsb2NrICMgKi8KLQlfX2xlMzIgKnA7CQkJICAgIC8qIFBvaW50ZXIgaW50byBpbm9kZS9pbmQKLQkJCQkJICAgICAgIGZvciBjdXJyZW50IGJsb2NrICovCi0JaW50IGVyciA9IDA7Ci0KLQlpZiAodGhpc19iaCkgewkJCQkvKiBGb3IgaW5kaXJlY3QgYmxvY2sgKi8KLQkJQlVGRkVSX1RSQUNFKHRoaXNfYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgdGhpc19iaCk7Ci0JCS8qIEltcG9ydGFudDogaWYgd2UgY2FuJ3QgdXBkYXRlIHRoZSBpbmRpcmVjdCBwb2ludGVycwotCQkgKiB0byB0aGUgYmxvY2tzLCB3ZSBjYW4ndCBmcmVlIHRoZW0uICovCi0JCWlmIChlcnIpCi0JCQlyZXR1cm47Ci0JfQotCi0JZm9yIChwID0gZmlyc3Q7IHAgPCBsYXN0OyBwKyspIHsKLQkJbnIgPSBsZTMyX3RvX2NwdSgqcCk7Ci0JCWlmIChucikgewotCQkJLyogYWNjdW11bGF0ZSBibG9ja3MgdG8gZnJlZSBpZiB0aGV5J3JlIGNvbnRpZ3VvdXMgKi8KLQkJCWlmIChjb3VudCA9PSAwKSB7Ci0JCQkJYmxvY2tfdG9fZnJlZSA9IG5yOwotCQkJCWJsb2NrX3RvX2ZyZWVfcCA9IHA7Ci0JCQkJY291bnQgPSAxOwotCQkJfSBlbHNlIGlmIChuciA9PSBibG9ja190b19mcmVlICsgY291bnQpIHsKLQkJCQljb3VudCsrOwotCQkJfSBlbHNlIHsKLQkJCQllcnIgPSBleHQ0X2NsZWFyX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCB0aGlzX2JoLAotCQkJCQkJICAgICAgICBibG9ja190b19mcmVlLCBjb3VudCwKLQkJCQkJCSAgICAgICAgYmxvY2tfdG9fZnJlZV9wLCBwKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKLQkJCQlibG9ja190b19mcmVlID0gbnI7Ci0JCQkJYmxvY2tfdG9fZnJlZV9wID0gcDsKLQkJCQljb3VudCA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoIWVyciAmJiBjb3VudCA+IDApCi0JCWVyciA9IGV4dDRfY2xlYXJfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgsIGJsb2NrX3RvX2ZyZWUsCi0JCQkJCWNvdW50LCBibG9ja190b19mcmVlX3AsIHApOwotCWlmIChlcnIgPCAwKQotCQkvKiBmYXRhbCBlcnJvciAqLwotCQlyZXR1cm47Ci0KLQlpZiAodGhpc19iaCkgewotCQlCVUZGRVJfVFJBQ0UodGhpc19iaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQotCQkvKgotCQkgKiBUaGUgYnVmZmVyIGhlYWQgc2hvdWxkIGhhdmUgYW4gYXR0YWNoZWQgam91cm5hbCBoZWFkIGF0IHRoaXMKLQkJICogcG9pbnQuIEhvd2V2ZXIsIGlmIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZCBhbmQgYW4gaW5kaXJlY3QKLQkJICogYmxvY2sgcG9pbnRlZCB0byBpdHNlbGYsIGl0IHdvdWxkIGhhdmUgYmVlbiBkZXRhY2hlZCB3aGVuCi0JCSAqIHRoZSBibG9jayB3YXMgY2xlYXJlZC4gQ2hlY2sgZm9yIHRoaXMgaW5zdGVhZCBvZiBPT1BTaW5nLgotCQkgKi8KLQkJaWYgKChFWFQ0X0pPVVJOQUwoaW5vZGUpID09IE5VTEwpIHx8IGJoMmpoKHRoaXNfYmgpKQotCQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgdGhpc19iaCk7Ci0JCWVsc2UKLQkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCi0JCQkJCSAiY2lyY3VsYXIgaW5kaXJlY3QgYmxvY2sgZGV0ZWN0ZWQgYXQgIgotCQkJCQkgImJsb2NrICVsbHUiLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHRoaXNfYmgtPmJfYmxvY2tucik7Ci0JfQotfQotCi0vKioKLSAqCWV4dDRfZnJlZV9icmFuY2hlcyAtIGZyZWUgYW4gYXJyYXkgb2YgYnJhbmNoZXMKLSAqCUBoYW5kbGU6IEpCRCBoYW5kbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24KLSAqCUBpbm9kZToJaW5vZGUgd2UgYXJlIGRlYWxpbmcgd2l0aAotICoJQHBhcmVudF9iaDogdGhlIGJ1ZmZlcl9oZWFkIHdoaWNoIGNvbnRhaW5zICpAZmlyc3QgYW5kICpAbGFzdAotICoJQGZpcnN0OglhcnJheSBvZiBibG9jayBudW1iZXJzCi0gKglAbGFzdDoJcG9pbnRlciBpbW1lZGlhdGVseSBwYXN0IHRoZSBlbmQgb2YgYXJyYXkKLSAqCUBkZXB0aDoJZGVwdGggb2YgdGhlIGJyYW5jaGVzIHRvIGZyZWUKLSAqCi0gKglXZSBhcmUgZnJlZWluZyBhbGwgYmxvY2tzIHJlZmVycmVkIGZyb20gdGhlc2UgYnJhbmNoZXMgKG51bWJlcnMgYXJlCi0gKglzdG9yZWQgYXMgbGl0dGxlLWVuZGlhbiAzMi1iaXQpIGFuZCB1cGRhdGluZyBAaW5vZGUtPmlfYmxvY2tzCi0gKglhcHByb3ByaWF0ZWx5LgotICovCi1zdGF0aWMgdm9pZCBleHQ0X2ZyZWVfYnJhbmNoZXMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9iaCwKLQkJCSAgICAgICBfX2xlMzIgKmZpcnN0LCBfX2xlMzIgKmxhc3QsIGludCBkZXB0aCkKLXsKLQlleHQ0X2ZzYmxrX3QgbnI7Ci0JX19sZTMyICpwOwotCi0JaWYgKGV4dDRfaGFuZGxlX2lzX2Fib3J0ZWQoaGFuZGxlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGRlcHRoLS0pIHsKLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQkJaW50IGFkZHJfcGVyX2Jsb2NrID0gRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYik7Ci0JCXAgPSBsYXN0OwotCQl3aGlsZSAoLS1wID49IGZpcnN0KSB7Ci0JCQluciA9IGxlMzJfdG9fY3B1KCpwKTsKLQkJCWlmICghbnIpCi0JCQkJY29udGludWU7CQkvKiBBIGhvbGUgKi8KLQotCQkJaWYgKCFleHQ0X2RhdGFfYmxvY2tfdmFsaWQoRVhUNF9TQihpbm9kZS0+aV9zYiksCi0JCQkJCQkgICBuciwgMSkpIHsKLQkJCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAotCQkJCQkJICJpbnZhbGlkIGluZGlyZWN0IG1hcHBlZCAiCi0JCQkJCQkgImJsb2NrICVsdSAobGV2ZWwgJWQpIiwKLQkJCQkJCSAodW5zaWduZWQgbG9uZykgbnIsIGRlcHRoKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogR28gcmVhZCB0aGUgYnVmZmVyIGZvciB0aGUgbmV4dCBsZXZlbCBkb3duICovCi0JCQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBucik7Ci0KLQkJCS8qCi0JCQkgKiBBIHJlYWQgZmFpbHVyZT8gUmVwb3J0IGVycm9yIGFuZCBjbGVhciBzbG90Ci0JCQkgKiAoc2hvdWxkIGJlIHJhcmUpLgotCQkJICovCi0JCQlpZiAoIWJoKSB7Ci0JCQkJRVhUNF9FUlJPUl9JTk9ERV9CTE9DSyhpbm9kZSwgbnIsCi0JCQkJCQkgICAgICAgIlJlYWQgZmFpbHVyZSIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBUaGlzIHphcHMgdGhlIGVudGlyZSBibG9jay4gIEJvdHRvbSB1cC4gKi8KLQkJCUJVRkZFUl9UUkFDRShiaCwgImZyZWUgY2hpbGQgYnJhbmNoZXMiKTsKLQkJCWV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGUsIGlub2RlLCBiaCwKLQkJCQkJKF9fbGUzMiAqKSBiaC0+Yl9kYXRhLAotCQkJCQkoX19sZTMyICopIGJoLT5iX2RhdGEgKyBhZGRyX3Blcl9ibG9jaywKLQkJCQkJZGVwdGgpOwotCQkJYnJlbHNlKGJoKTsKLQotCQkJLyoKLQkJCSAqIEV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyB0aGlzIHBvaW50ZXIgaGFzIGJlZW4KLQkJCSAqIHJlbGVhc2VkLiAgTm93IGxldCB0aGlzIHRvcC1vZi1zdWJ0cmVlIGdvLgotCQkJICoKLQkJCSAqIFdlIHdhbnQgdGhlIGZyZWVpbmcgb2YgdGhpcyBpbmRpcmVjdCBibG9jayB0byBiZQotCQkJICogYXRvbWljIGluIHRoZSBqb3VybmFsIHdpdGggdGhlIHVwZGF0aW5nIG9mIHRoZQotCQkJICogYml0bWFwIGJsb2NrIHdoaWNoIG93bnMgaXQuICBTbyBtYWtlIHNvbWUgcm9vbSBpbgotCQkJICogdGhlIGpvdXJuYWwuCi0JCQkgKgotCQkJICogV2UgemVybyB0aGUgcGFyZW50IHBvaW50ZXIgKmFmdGVyKiBmcmVlaW5nIGl0cwotCQkJICogcG9pbnRlZSBpbiB0aGUgYml0bWFwcywgc28gaWYgZXh0ZW5kX3RyYW5zYWN0aW9uKCkKLQkJCSAqIGZvciBzb21lIHJlYXNvbiBmYWlscyB0byBwdXQgdGhlIGJpdG1hcCBjaGFuZ2VzIGFuZAotCQkJICogdGhlIHJlbGVhc2UgaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbiwgcmVjb3ZlcnkKLQkJCSAqIHdpbGwgbWVyZWx5IGNvbXBsYWluIGFib3V0IHJlbGVhc2luZyBhIGZyZWUgYmxvY2ssCi0JCQkgKiByYXRoZXIgdGhhbiBsZWFraW5nIGJsb2Nrcy4KLQkJCSAqLwotCQkJaWYgKGV4dDRfaGFuZGxlX2lzX2Fib3J0ZWQoaGFuZGxlKSkKLQkJCQlyZXR1cm47Ci0JCQlpZiAodHJ5X3RvX2V4dGVuZF90cmFuc2FjdGlvbihoYW5kbGUsIGlub2RlKSkgewotCQkJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQkJCQlleHQ0X3RydW5jYXRlX3Jlc3RhcnRfdHJhbnMoaGFuZGxlLCBpbm9kZSwKLQkJCQkJICAgIGJsb2Nrc19mb3JfdHJ1bmNhdGUoaW5vZGUpKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFRoZSBmb3JnZXQgZmxhZyBoZXJlIGlzIGNyaXRpY2FsIGJlY2F1c2UgaWYKLQkJCSAqIHdlIGFyZSBqb3VybmFsaW5nIChhbmQgbm90IGRvaW5nIGRhdGEKLQkJCSAqIGpvdXJuYWxpbmcpLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBhIHJldm9rZQotCQkJICogcmVjb3JkIGlzIHdyaXR0ZW4gdG8gcHJldmVudCB0aGUgam91cm5hbAotCQkJICogcmVwbGF5IGZyb20gb3ZlcndyaXRpbmcgdGhlIChmb3JtZXIpCi0JCQkgKiBpbmRpcmVjdCBibG9jayBpZiBpdCBnZXRzIHJlYWxsb2NhdGVkIGFzIGEKLQkJCSAqIGRhdGEgYmxvY2suICBUaGlzIG11c3QgaGFwcGVuIGluIHRoZSBzYW1lCi0JCQkgKiB0cmFuc2FjdGlvbiB3aGVyZSB0aGUgZGF0YSBibG9ja3MgYXJlCi0JCQkgKiBhY3R1YWxseSBmcmVlZC4KLQkJCSAqLwotCQkJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuciwgMSwKLQkJCQkJIEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEF8Ci0JCQkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7Ci0KLQkJCWlmIChwYXJlbnRfYmgpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBibG9jayB3aGljaCB3ZSBoYXZlIGp1c3QgZnJlZWQgaXMKLQkJCQkgKiBwb2ludGVkIHRvIGJ5IGFuIGluZGlyZWN0IGJsb2NrOiBqb3VybmFsIGl0Ci0JCQkJICovCi0JCQkJQlVGRkVSX1RSQUNFKHBhcmVudF9iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKLQkJCQlpZiAoIWV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQkJCQkJICAgcGFyZW50X2JoKSl7Ci0JCQkJCSpwID0gMDsKLQkJCQkJQlVGRkVSX1RSQUNFKHBhcmVudF9iaCwKLQkJCQkJImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJCQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCQkJCQkgICBpbm9kZSwKLQkJCQkJCQkJICAgcGFyZW50X2JoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgdHJlZS4gKi8KLQkJQlVGRkVSX1RSQUNFKHBhcmVudF9iaCwgImZyZWUgZGF0YSBibG9ja3MiKTsKLQkJZXh0NF9mcmVlX2RhdGEoaGFuZGxlLCBpbm9kZSwgcGFyZW50X2JoLCBmaXJzdCwgbGFzdCk7Ci0JfQotfQotCiBpbnQgZXh0NF9jYW5fdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKQEAgLTQ0NzYsMTkgKzMxNDgsNiBAQAogICovCiB2b2lkIGV4dDRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQloYW5kbGVfdCAqaGFuZGxlOwotCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKLQlfX2xlMzIgKmlfZGF0YSA9IGVpLT5pX2RhdGE7Ci0JaW50IGFkZHJfcGVyX2Jsb2NrID0gRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYik7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCWV4dDRfbGJsa190IG9mZnNldHNbNF07Ci0JSW5kaXJlY3QgY2hhaW5bNF07Ci0JSW5kaXJlY3QgKnBhcnRpYWw7Ci0JX19sZTMyIG5yID0gMDsKLQlpbnQgbiA9IDA7Ci0JZXh0NF9sYmxrX3QgbGFzdF9ibG9jaywgbWF4X2Jsb2NrOwotCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKLQogCXRyYWNlX2V4dDRfdHJ1bmNhdGVfZW50ZXIoaW5vZGUpOwogCiAJaWYgKCFleHQ0X2Nhbl90cnVuY2F0ZShpbm9kZSkpCkBAIC00NDk5LDE0OSArMzE1OCwxMSBAQAogCWlmIChpbm9kZS0+aV9zaXplID09IDAgJiYgIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT19BVVRPX0RBX0FMTE9DKSkKIAkJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UpOwogCi0JaWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSB7CisJaWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKQogCQlleHQ0X2V4dF90cnVuY2F0ZShpbm9kZSk7Ci0JCXRyYWNlX2V4dDRfdHJ1bmNhdGVfZXhpdChpbm9kZSk7Ci0JCXJldHVybjsKLQl9CisJZWxzZQorCQlleHQ0X2luZF90cnVuY2F0ZShpbm9kZSk7CiAKLQloYW5kbGUgPSBzdGFydF90cmFuc2FjdGlvbihpbm9kZSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKQotCQlyZXR1cm47CQkvKiBBS1BNOiByZXR1cm4gd2hhdD8gKi8KLQotCWxhc3RfYmxvY2sgPSAoaW5vZGUtPmlfc2l6ZSArIGJsb2Nrc2l6ZS0xKQotCQkJCQk+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhpbm9kZS0+aV9zYik7Ci0JbWF4X2Jsb2NrID0gKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2JpdG1hcF9tYXhieXRlcyArIGJsb2Nrc2l6ZS0xKQotCQkJCQk+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhpbm9kZS0+aV9zYik7Ci0KLQlpZiAoaW5vZGUtPmlfc2l6ZSAmIChibG9ja3NpemUgLSAxKSkKLQkJaWYgKGV4dDRfYmxvY2tfdHJ1bmNhdGVfcGFnZShoYW5kbGUsIG1hcHBpbmcsIGlub2RlLT5pX3NpemUpKQotCQkJZ290byBvdXRfc3RvcDsKLQotCWlmIChsYXN0X2Jsb2NrICE9IG1heF9ibG9jaykgewotCQluID0gZXh0NF9ibG9ja190b19wYXRoKGlub2RlLCBsYXN0X2Jsb2NrLCBvZmZzZXRzLCBOVUxMKTsKLQkJaWYgKG4gPT0gMCkKLQkJCWdvdG8gb3V0X3N0b3A7CS8qIGVycm9yICovCi0JfQotCi0JLyoKLQkgKiBPSy4gIFRoaXMgdHJ1bmNhdGUgaXMgZ29pbmcgdG8gaGFwcGVuLiAgV2UgYWRkIHRoZSBpbm9kZSB0byB0aGUKLQkgKiBvcnBoYW4gbGlzdCwgc28gdGhhdCBpZiB0aGlzIHRydW5jYXRlIHNwYW5zIG11bHRpcGxlIHRyYW5zYWN0aW9ucywKLQkgKiBhbmQgd2UgY3Jhc2gsIHdlIHdpbGwgcmVzdW1lIHRoZSB0cnVuY2F0ZSB3aGVuIHRoZSBmaWxlc3lzdGVtCi0JICogcmVjb3ZlcnMuICBJdCBhbHNvIG1hcmtzIHRoZSBpbm9kZSBkaXJ0eSwgdG8gY2F0Y2ggdGhlIG5ldyBzaXplLgotCSAqCi0JICogSW1wbGljYXRpb246IHRoZSBmaWxlIG11c3QgYWx3YXlzIGJlIGluIGEgc2FuZSwgY29uc2lzdGVudAotCSAqIHRydW5jYXRhYmxlIHN0YXRlIHdoaWxlIGVhY2ggdHJhbnNhY3Rpb24gY29tbWl0cy4KLQkgKi8KLQlpZiAoZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpKQotCQlnb3RvIG91dF9zdG9wOwotCi0JLyoKLQkgKiBGcm9tIGhlcmUgd2UgYmxvY2sgb3V0IGFsbCBleHQ0X2dldF9ibG9jaygpIGNhbGxlcnMgd2hvIHdhbnQgdG8KLQkgKiBtb2RpZnkgdGhlIGJsb2NrIGFsbG9jYXRpb24gdHJlZS4KLQkgKi8KLQlkb3duX3dyaXRlKCZlaS0+aV9kYXRhX3NlbSk7Ci0KLQlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwotCi0JLyoKLQkgKiBUaGUgb3JwaGFuIGxpc3QgZW50cnkgd2lsbCBub3cgcHJvdGVjdCB1cyBmcm9tIGFueSBjcmFzaCB3aGljaAotCSAqIG9jY3VycyBiZWZvcmUgdGhlIHRydW5jYXRlIGNvbXBsZXRlcywgc28gaXQgaXMgbm93IHNhZmUgdG8gcHJvcGFnYXRlCi0JICogdGhlIG5ldywgc2hvcnRlciBpbm9kZSBzaXplIChoZWxkIGZvciBub3cgaW4gaV9zaXplKSBpbnRvIHRoZQotCSAqIG9uLWRpc2sgaW5vZGUuIFdlIGRvIHRoaXMgdmlhIGlfZGlza3NpemUsIHdoaWNoIGlzIHRoZSB2YWx1ZSB3aGljaAotCSAqIGV4dDQgKnJlYWxseSogd3JpdGVzIG9udG8gdGhlIGRpc2sgaW5vZGUuCi0JICovCi0JZWktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOwotCi0JaWYgKGxhc3RfYmxvY2sgPT0gbWF4X2Jsb2NrKSB7Ci0JCS8qCi0JCSAqIEl0IGlzIHVubmVjZXNzYXJ5IHRvIGZyZWUgYW55IGRhdGEgYmxvY2tzIGlmIGxhc3RfYmxvY2sgaXMKLQkJICogZXF1YWwgdG8gdGhlIGluZGlyZWN0IGJsb2NrIGxpbWl0LgotCQkgKi8KLQkJZ290byBvdXRfdW5sb2NrOwotCX0gZWxzZSBpZiAobiA9PSAxKSB7CQkvKiBkaXJlY3QgYmxvY2tzICovCi0JCWV4dDRfZnJlZV9kYXRhKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGlfZGF0YStvZmZzZXRzWzBdLAotCQkJICAgICAgIGlfZGF0YSArIEVYVDRfTkRJUl9CTE9DS1MpOwotCQlnb3RvIGRvX2luZGlyZWN0czsKLQl9Ci0KLQlwYXJ0aWFsID0gZXh0NF9maW5kX3NoYXJlZChpbm9kZSwgbiwgb2Zmc2V0cywgY2hhaW4sICZucik7Ci0JLyogS2lsbCB0aGUgdG9wIG9mIHNoYXJlZCBicmFuY2ggKG5vdCBkZXRhY2hlZCkgKi8KLQlpZiAobnIpIHsKLQkJaWYgKHBhcnRpYWwgPT0gY2hhaW4pIHsKLQkJCS8qIFNoYXJlZCBicmFuY2ggZ3Jvd3MgZnJvbSB0aGUgaW5vZGUgKi8KLQkJCWV4dDRfZnJlZV9icmFuY2hlcyhoYW5kbGUsIGlub2RlLCBOVUxMLAotCQkJCQkgICAmbnIsICZucisxLCAoY2hhaW4rbi0xKSAtIHBhcnRpYWwpOwotCQkJKnBhcnRpYWwtPnAgPSAwOwotCQkJLyoKLQkJCSAqIFdlIG1hcmsgdGhlIGlub2RlIGRpcnR5IHByaW9yIHRvIHJlc3RhcnQsCi0JCQkgKiBhbmQgcHJpb3IgdG8gc3RvcC4gIE5vIG5lZWQgZm9yIGl0IGhlcmUuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCS8qIFNoYXJlZCBicmFuY2ggZ3Jvd3MgZnJvbSBhbiBpbmRpcmVjdCBibG9jayAqLwotCQkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOwotCQkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIHBhcnRpYWwtPmJoLAotCQkJCQlwYXJ0aWFsLT5wLAotCQkJCQlwYXJ0aWFsLT5wKzEsIChjaGFpbituLTEpIC0gcGFydGlhbCk7Ci0JCX0KLQl9Ci0JLyogQ2xlYXIgdGhlIGVuZHMgb2YgaW5kaXJlY3QgYmxvY2tzIG9uIHRoZSBzaGFyZWQgYnJhbmNoICovCi0Jd2hpbGUgKHBhcnRpYWwgPiBjaGFpbikgewotCQlleHQ0X2ZyZWVfYnJhbmNoZXMoaGFuZGxlLCBpbm9kZSwgcGFydGlhbC0+YmgsIHBhcnRpYWwtPnAgKyAxLAotCQkJCSAgIChfX2xlMzIqKXBhcnRpYWwtPmJoLT5iX2RhdGErYWRkcl9wZXJfYmxvY2ssCi0JCQkJICAgKGNoYWluK24tMSkgLSBwYXJ0aWFsKTsKLQkJQlVGRkVSX1RSQUNFKHBhcnRpYWwtPmJoLCAiY2FsbCBicmVsc2UiKTsKLQkJYnJlbHNlKHBhcnRpYWwtPmJoKTsKLQkJcGFydGlhbC0tOwotCX0KLWRvX2luZGlyZWN0czoKLQkvKiBLaWxsIHRoZSByZW1haW5pbmcgKHdob2xlKSBzdWJ0cmVlcyAqLwotCXN3aXRjaCAob2Zmc2V0c1swXSkgewotCWRlZmF1bHQ6Ci0JCW5yID0gaV9kYXRhW0VYVDRfSU5EX0JMT0NLXTsKLQkJaWYgKG5yKSB7Ci0JCQlleHQ0X2ZyZWVfYnJhbmNoZXMoaGFuZGxlLCBpbm9kZSwgTlVMTCwgJm5yLCAmbnIrMSwgMSk7Ci0JCQlpX2RhdGFbRVhUNF9JTkRfQkxPQ0tdID0gMDsKLQkJfQotCWNhc2UgRVhUNF9JTkRfQkxPQ0s6Ci0JCW5yID0gaV9kYXRhW0VYVDRfRElORF9CTE9DS107Ci0JCWlmIChucikgewotCQkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIE5VTEwsICZuciwgJm5yKzEsIDIpOwotCQkJaV9kYXRhW0VYVDRfRElORF9CTE9DS10gPSAwOwotCQl9Ci0JY2FzZSBFWFQ0X0RJTkRfQkxPQ0s6Ci0JCW5yID0gaV9kYXRhW0VYVDRfVElORF9CTE9DS107Ci0JCWlmIChucikgewotCQkJZXh0NF9mcmVlX2JyYW5jaGVzKGhhbmRsZSwgaW5vZGUsIE5VTEwsICZuciwgJm5yKzEsIDMpOwotCQkJaV9kYXRhW0VYVDRfVElORF9CTE9DS10gPSAwOwotCQl9Ci0JY2FzZSBFWFQ0X1RJTkRfQkxPQ0s6Ci0JCTsKLQl9Ci0KLW91dF91bmxvY2s6Ci0JdXBfd3JpdGUoJmVpLT5pX2RhdGFfc2VtKTsKLQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoaW5vZGUpOwotCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQotCS8qCi0JICogSW4gYSBtdWx0aS10cmFuc2FjdGlvbiB0cnVuY2F0ZSwgd2Ugb25seSBtYWtlIHRoZSBmaW5hbCB0cmFuc2FjdGlvbgotCSAqIHN5bmNocm9ub3VzCi0JICovCi0JaWYgKElTX1NZTkMoaW5vZGUpKQotCQlleHQ0X2hhbmRsZV9zeW5jKGhhbmRsZSk7Ci1vdXRfc3RvcDoKLQkvKgotCSAqIElmIHRoaXMgd2FzIGEgc2ltcGxlIGZ0cnVuY2F0ZSgpLCBhbmQgdGhlIGZpbGUgd2lsbCByZW1haW4gYWxpdmUKLQkgKiB0aGVuIHdlIG5lZWQgdG8gY2xlYXIgdXAgdGhlIG9ycGhhbiByZWNvcmQgd2hpY2ggd2UgY3JlYXRlZCBhYm92ZS4KLQkgKiBIb3dldmVyLCBpZiB0aGlzIHdhcyBhIHJlYWwgdW5saW5rIHRoZW4gd2Ugd2VyZSBjYWxsZWQgYnkKLQkgKiBleHQ0X2RlbGV0ZV9pbm9kZSgpLCBhbmQgd2UgYWxsb3cgdGhhdCBmdW5jdGlvbiB0byBjbGVhbiB1cCB0aGUKLQkgKiBvcnBoYW4gaW5mbyBmb3IgdXMuCi0JICovCi0JaWYgKGlub2RlLT5pX25saW5rKQotCQlleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7Ci0KLQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCXRyYWNlX2V4dDRfdHJ1bmNhdGVfZXhpdChpbm9kZSk7CiB9CiAKQEAgLTUwMTIsNyArMzUzMyw3IEBACiAJCSAgIChTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmCiAJCSAgICAhZXh0NF9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgewogCQkvKiBWYWxpZGF0ZSBibG9jayByZWZlcmVuY2VzIHdoaWNoIGFyZSBwYXJ0IG9mIGlub2RlICovCi0JCXJldCA9IGV4dDRfY2hlY2tfaW5vZGVfYmxvY2tyZWYoaW5vZGUpOworCQlyZXQgPSBleHQ0X2luZF9jaGVja19pbm9kZShpbm9kZSk7CiAJfQogCWlmIChyZXQpCiAJCWdvdG8gYmFkX2lub2RlOwpAQCAtNTQ1OSwzNCArMzk4MCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV4dDRfaW5kaXJlY3RfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2NrcywKLQkJCQkgICAgICBpbnQgY2h1bmspCi17Ci0JaW50IGluZGlyZWN0czsKLQotCS8qIGlmIG5yYmxvY2tzIGFyZSBjb250aWd1b3VzICovCi0JaWYgKGNodW5rKSB7Ci0JCS8qCi0JCSAqIFdpdGggTiBjb250aWd1b3VzIGRhdGEgYmxvY2tzLCB3ZSBuZWVkIGF0IG1vc3QKLQkJICogTi9FWFQ0X0FERFJfUEVSX0JMT0NLKGlub2RlLT5pX3NiKSArIDEgaW5kaXJlY3QgYmxvY2tzLAotCQkgKiAyIGRpbmRpcmVjdCBibG9ja3MsIGFuZCAxIHRpbmRpcmVjdCBibG9jawotCQkgKi8KLQkJcmV0dXJuIERJVl9ST1VORF9VUChucmJsb2NrcywKLQkJCQkgICAgRVhUNF9BRERSX1BFUl9CTE9DSyhpbm9kZS0+aV9zYikpICsgNDsKLQl9Ci0JLyoKLQkgKiBpZiBucmJsb2NrcyBhcmUgbm90IGNvbnRpZ3VvdXMsIHdvcnNlIGNhc2UsIGVhY2ggYmxvY2sgdG91Y2gKLQkgKiBhIGluZGlyZWN0IGJsb2NrLCBhbmQgZWFjaCBpbmRpcmVjdCBibG9jayB0b3VjaCBhIGRvdWJsZSBpbmRpcmVjdAotCSAqIGJsb2NrLCBwbHVzIGEgdHJpcGxlIGluZGlyZWN0IGJsb2NrCi0JICovCi0JaW5kaXJlY3RzID0gbnJibG9ja3MgKiAyICsgMTsKLQlyZXR1cm4gaW5kaXJlY3RzOwotfQotCiBzdGF0aWMgaW50IGV4dDRfaW5kZXhfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2NrcywgaW50IGNodW5rKQogewogCWlmICghKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSkKLQkJcmV0dXJuIGV4dDRfaW5kaXJlY3RfdHJhbnNfYmxvY2tzKGlub2RlLCBucmJsb2NrcywgY2h1bmspOworCQlyZXR1cm4gZXh0NF9pbmRfdHJhbnNfYmxvY2tzKGlub2RlLCBucmJsb2NrcywgY2h1bmspOwogCXJldHVybiBleHQ0X2V4dF9pbmRleF90cmFuc19ibG9ja3MoaW5vZGUsIG5yYmxvY2tzLCBjaHVuayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW9jdGwuYyBiL2ZzL2V4dDQvaW9jdGwuYwppbmRleCA4MDhjNTU0Li5mMThiZmUzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lvY3RsLmMKKysrIGIvZnMvZXh0NC9pb2N0bC5jCkBAIC0yMDIsOCArMjAyLDkgQEAKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCQlpbnQgZXJyLCBlcnIyPTA7CiAKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJZXJyID0gZXh0NF9yZXNpemVfYmVnaW4oc2IpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAogCQlpZiAoZ2V0X3VzZXIobl9ibG9ja3NfY291bnQsIChfX3UzMiBfX3VzZXIgKilhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMjEsNiArMjIyLDcgQEAKIAkJaWYgKGVyciA9PSAwKQogCQkJZXJyID0gZXJyMjsKIAkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWV4dDRfcmVzaXplX2VuZChzYik7CiAKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNzEsOCArMjczLDkgQEAKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCQlpbnQgZXJyLCBlcnIyPTA7CiAKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJZXJyID0gZXh0NF9yZXNpemVfYmVnaW4oc2IpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlucHV0LCAoc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0IF9fdXNlciAqKWFyZywKIAkJCQlzaXplb2YoaW5wdXQpKSkKQEAgLTI5MSw2ICsyOTQsNyBAQAogCQlpZiAoZXJyID09IDApCiAJCQllcnIgPSBlcnIyOwogCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJZXh0NF9yZXNpemVfZW5kKHNiKTsKIAogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggNmVkODU5ZC4uMTdhNWE1NyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTc1LDggKzc1LDggQEAKICAqCiAgKiBUaGUgaW5vZGUgcHJlYWxsb2NhdGlvbiBzcGFjZSBpcyB1c2VkIGxvb2tpbmcgYXQgdGhlIF9sb2dpY2FsXyBzdGFydAogICogYmxvY2suIElmIG9ubHkgdGhlIGxvZ2ljYWwgZmlsZSBibG9jayBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIG9mIHByZWFsbG9jCi0gKiBzcGFjZSB3ZSB3aWxsIGNvbnN1bWUgdGhlIHBhcnRpY3VsYXIgcHJlYWxsb2Mgc3BhY2UuIFRoaXMgbWFrZSBzdXJlIHRoYXQKLSAqIHRoYXQgdGhlIHdlIGhhdmUgY29udGlndW91cyBwaHlzaWNhbCBibG9ja3MgcmVwcmVzZW50aW5nIHRoZSBmaWxlIGJsb2NrcworICogc3BhY2Ugd2Ugd2lsbCBjb25zdW1lIHRoZSBwYXJ0aWN1bGFyIHByZWFsbG9jIHNwYWNlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdAorICogd2UgaGF2ZSBjb250aWd1b3VzIHBoeXNpY2FsIGJsb2NrcyByZXByZXNlbnRpbmcgdGhlIGZpbGUgYmxvY2tzCiAgKgogICogVGhlIGltcG9ydGFudCB0aGluZyB0byBiZSBub3RlZCBpbiBjYXNlIG9mIGlub2RlIHByZWFsbG9jIHNwYWNlIGlzIHRoYXQKICAqIHdlIGRvbid0IG1vZGlmeSB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgdG8gaW5vZGUgcHJlYWxsb2Mgc3BhY2UgZXhjZXB0CkBAIC04NCw3ICs4NCw3IEBACiAgKgogICogSWYgd2UgYXJlIG5vdCBhYmxlIHRvIGZpbmQgYmxvY2tzIGluIHRoZSBpbm9kZSBwcmVhbGxvYyBzcGFjZSBhbmQgaWYgd2UKICAqIGhhdmUgdGhlIGdyb3VwIGFsbG9jYXRpb24gZmxhZyBzZXQgdGhlbiB3ZSBsb29rIGF0IHRoZSBsb2NhbGl0eSBncm91cAotICogcHJlYWxsb2Mgc3BhY2UuIFRoZXNlIGFyZSBwZXIgQ1BVIHByZWFsbG9jIGxpc3QgcmVwcmVhc2VudGVkIGFzCisgKiBwcmVhbGxvYyBzcGFjZS4gVGhlc2UgYXJlIHBlciBDUFUgcHJlYWxsb2MgbGlzdCByZXByZXNlbnRlZCBhcwogICoKICAqIGV4dDRfc2JfaW5mby5zX2xvY2FsaXR5X2dyb3Vwc1tzbXBfcHJvY2Vzc29yX2lkKCldCiAgKgpAQCAtMTI4LDEyICsxMjgsMTMgQEAKICAqIHdlIGFyZSBkb2luZyBhIGdyb3VwIHByZWFsbG9jIHdlIHRyeSB0byBub3JtYWxpemUgdGhlIHJlcXVlc3QgdG8KICAqIHNiaS0+c19tYl9ncm91cF9wcmVhbGxvYy4gRGVmYXVsdCB2YWx1ZSBvZiBzX21iX2dyb3VwX3ByZWFsbG9jIGlzCiAgKiA1MTIgYmxvY2tzLiBUaGlzIGNhbiBiZSB0dW5lZCB2aWEKLSAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uL21iX2dyb3VwX3ByZWFsbG9jLiBUaGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgaW4KKyAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9ncm91cF9wcmVhbGxvYy4gVGhlIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluCiAgKiB0ZXJtcyBvZiBudW1iZXIgb2YgYmxvY2tzLiBJZiB3ZSBoYXZlIG1vdW50ZWQgdGhlIGZpbGUgc3lzdGVtIHdpdGggLU8KICAqIHN0cmlwZT08dmFsdWU+IG9wdGlvbiB0aGUgZ3JvdXAgcHJlYWxsb2MgcmVxdWVzdCBpcyBub3JtYWxpemVkIHRvIHRoZQotICogc3RyaXBlIHZhbHVlIChzYmktPnNfc3RyaXBlKQorICogdGhlIHNtYWxsZXN0IG11bHRpcGxlIG9mIHRoZSBzdHJpcGUgdmFsdWUgKHNiaS0+c19zdHJpcGUpIHdoaWNoIGlzCisgKiBncmVhdGVyIHRoYW4gdGhlIGRlZmF1bHQgbWJfZ3JvdXBfcHJlYWxsb2MuCiAgKgotICogVGhlIHJlZ3VsYXIgYWxsb2NhdG9yKHVzaW5nIHRoZSBidWRkeSBjYWNoZSkgc3VwcG9ydHMgZmV3IHR1bmFibGVzLgorICogVGhlIHJlZ3VsYXIgYWxsb2NhdG9yICh1c2luZyB0aGUgYnVkZHkgY2FjaGUpIHN1cHBvcnRzIGEgZmV3IHR1bmFibGVzLgogICoKICAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9taW5fdG9fc2NhbgogICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX21heF90b19zY2FuCkBAIC0xNTIsNyArMTUzLDcgQEAKICAqIGJlc3QgZXh0ZW50IGluIHRoZSBmb3VuZCBleHRlbnRzLiBTZWFyY2hpbmcgZm9yIHRoZSBibG9ja3Mgc3RhcnRzIHdpdGgKICAqIHRoZSBncm91cCBzcGVjaWZpZWQgYXMgdGhlIGdvYWwgdmFsdWUgaW4gYWxsb2NhdGlvbiBjb250ZXh0IHZpYQogICogYWNfZ19leC4gRWFjaCBncm91cCBpcyBmaXJzdCBjaGVja2VkIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSB3aGV0aGVyIGl0Ci0gKiBjYW4gdXNlZCBmb3IgYWxsb2NhdGlvbi4gZXh0NF9tYl9nb29kX2dyb3VwIGV4cGxhaW5zIGhvdyB0aGUgZ3JvdXBzIGFyZQorICogY2FuIGJlIHVzZWQgZm9yIGFsbG9jYXRpb24uIGV4dDRfbWJfZ29vZF9ncm91cCBleHBsYWlucyBob3cgdGhlIGdyb3VwcyBhcmUKICAqIGNoZWNrZWQuCiAgKgogICogQm90aCB0aGUgcHJlYWxsb2Mgc3BhY2UgYXJlIGdldHRpbmcgcG9wdWxhdGVkIGFzIGFib3ZlLiBTbyBmb3IgdGhlIGZpcnN0CkBAIC00OTIsMTAgKzQ5MywxMSBAQAogCQliMiA9ICh1bnNpZ25lZCBjaGFyICopIGJpdG1hcDsKIAkJZm9yIChpID0gMDsgaSA8IGU0Yi0+YmRfc2ItPnNfYmxvY2tzaXplOyBpKyspIHsKIAkJCWlmIChiMVtpXSAhPSBiMltpXSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY29ycnVwdGlvbiBpbiBncm91cCAldSAiCi0JCQkJICAgICAgICJhdCBieXRlICV1KCV1KTogJXggaW4gY29weSAhPSAleCAiCi0JCQkJICAgICAgICJvbiBkaXNrL3ByZWFsbG9jXG4iLAotCQkJCSAgICAgICBlNGItPmJkX2dyb3VwLCBpLCBpICogOCwgYjFbaV0sIGIyW2ldKTsKKwkJCQlleHQ0X21zZyhlNGItPmJkX3NiLCBLRVJOX0VSUiwKKwkJCQkJICJjb3JydXB0aW9uIGluIGdyb3VwICV1ICIKKwkJCQkJICJhdCBieXRlICV1KCV1KTogJXggaW4gY29weSAhPSAleCAiCisJCQkJCSAib24gZGlzay9wcmVhbGxvYyIsCisJCQkJCSBlNGItPmJkX2dyb3VwLCBpLCBpICogOCwgYjFbaV0sIGIyW2ldKTsKIAkJCQlCVUcoKTsKIAkJCX0KIAkJfQpAQCAtMTEyNSw3ICsxMTI3LDcgQEAKIAlncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7CiAKIAllNGItPmJkX2Jsa2JpdHMgPSBzYi0+c19ibG9ja3NpemVfYml0czsKLQllNGItPmJkX2luZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBncm91cCk7CisJZTRiLT5iZF9pbmZvID0gZ3JwOwogCWU0Yi0+YmRfc2IgPSBzYjsKIAllNGItPmJkX2dyb3VwID0gZ3JvdXA7CiAJZTRiLT5iZF9idWRkeV9wYWdlID0gTlVMTDsKQEAgLTEyODEsNyArMTI4Myw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBtYl9zZXRfYml0cyh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbikKK3ZvaWQgZXh0NF9zZXRfYml0cyh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbikKIHsKIAlfX3UzMiAqYWRkcjsKIApAQCAtMTUxMCw3ICsxNTEyLDcgQEAKIAl9CiAJbWJfc2V0X2xhcmdlc3RfZnJlZV9vcmRlcihlNGItPmJkX3NiLCBlNGItPmJkX2luZm8pOwogCi0JbWJfc2V0X2JpdHMoRVhUNF9NQl9CSVRNQVAoZTRiKSwgZXgtPmZlX3N0YXJ0LCBsZW4wKTsKKwlleHQ0X3NldF9iaXRzKEVYVDRfTUJfQklUTUFQKGU0YiksIGV4LT5mZV9zdGFydCwgbGVuMCk7CiAJbWJfY2hlY2tfYnVkZHkoZTRiKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMjIzLDggKzIyMjUsOCBAQAogCQkJRVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKTsKIAkJbWV0YV9ncm91cF9pbmZvID0ga21hbGxvYyhtZXRhbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1ldGFfZ3JvdXBfaW5mbyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGNhbid0IGFsbG9jYXRlIG1lbSBmb3IgYSAiCi0JCQkgICAgICAgImJ1ZGR5IGdyb3VwXG4iKTsKKwkJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgIkVYVDQtZnM6IGNhbid0IGFsbG9jYXRlIG1lbSAiCisJCQkJICJmb3IgYSBidWRkeSBncm91cCIpOwogCQkJZ290byBleGl0X21ldGFfZ3JvdXBfaW5mbzsKIAkJfQogCQlzYmktPnNfZ3JvdXBfaW5mb1tncm91cCA+PiBFWFQ0X0RFU0NfUEVSX0JMT0NLX0JJVFMoc2IpXSA9CkBAIC0yMjM3LDcgKzIyMzksNyBAQAogCiAJbWV0YV9ncm91cF9pbmZvW2ldID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmIChtZXRhX2dyb3VwX2luZm9baV0gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGNhbid0IGFsbG9jYXRlIGJ1ZGR5IG1lbVxuIik7CisJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgIkVYVDQtZnM6IGNhbid0IGFsbG9jYXRlIGJ1ZGR5IG1lbSIpOwogCQlnb3RvIGV4aXRfZ3JvdXBfaW5mbzsKIAl9CiAJbWVtc2V0KG1ldGFfZ3JvdXBfaW5mb1tpXSwgMCwga21lbV9jYWNoZV9zaXplKGNhY2hlcCkpOwpAQCAtMjI3OSw4ICsyMjgxLDEwIEBACiAKIGV4aXRfZ3JvdXBfaW5mbzoKIAkvKiBJZiBhIG1ldGFfZ3JvdXBfaW5mbyB0YWJsZSBoYXMgYmVlbiBhbGxvY2F0ZWQsIHJlbGVhc2UgaXQgbm93ICovCi0JaWYgKGdyb3VwICUgRVhUNF9ERVNDX1BFUl9CTE9DSyhzYikgPT0gMCkKKwlpZiAoZ3JvdXAgJSBFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSA9PSAwKSB7CiAJCWtmcmVlKHNiaS0+c19ncm91cF9pbmZvW2dyb3VwID4+IEVYVDRfREVTQ19QRVJfQkxPQ0tfQklUUyhzYildKTsKKwkJc2JpLT5zX2dyb3VwX2luZm9bZ3JvdXAgPj4gRVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKV0gPSBOVUxMOworCX0KIGV4aXRfbWV0YV9ncm91cF9pbmZvOgogCXJldHVybiAtRU5PTUVNOwogfSAvKiBleHQ0X21iX2FkZF9ncm91cGluZm8gKi8KQEAgLTIzMjgsMjMgKzIzMzIsMjYgQEAKIAkvKiBBbiA4VEIgZmlsZXN5c3RlbSB3aXRoIDY0LWJpdCBwb2ludGVycyByZXF1aXJlcyBhIDQwOTYgYnl0ZQogCSAqIGttYWxsb2MuIEEgMTI4a2IgbWFsbG9jIHNob3VsZCBzdWZmaWNlIGZvciBhIDI1NlRCIGZpbGVzeXN0ZW0uCiAJICogU28gYSB0d28gbGV2ZWwgc2NoZW1lIHN1ZmZpY2VzIGZvciBub3cuICovCi0Jc2JpLT5zX2dyb3VwX2luZm8gPSBremFsbG9jKGFycmF5X3NpemUsIEdGUF9LRVJORUwpOworCXNiaS0+c19ncm91cF9pbmZvID0gZXh0NF9rdnphbGxvYyhhcnJheV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2JpLT5zX2dyb3VwX2luZm8gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGNhbid0IGFsbG9jYXRlIGJ1ZGR5IG1ldGEgZ3JvdXBcbiIpOworCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJjYW4ndCBhbGxvY2F0ZSBidWRkeSBtZXRhIGdyb3VwIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlzYmktPnNfYnVkZHlfY2FjaGUgPSBuZXdfaW5vZGUoc2IpOwogCWlmIChzYmktPnNfYnVkZHlfY2FjaGUgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGNhbid0IGdldCBuZXcgaW5vZGVcbiIpOworCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJjYW4ndCBnZXQgbmV3IGlub2RlIik7CiAJCWdvdG8gZXJyX2ZyZWVzZ2k7CiAJfQotCXNiaS0+c19idWRkeV9jYWNoZS0+aV9pbm8gPSBnZXRfbmV4dF9pbm8oKTsKKwkvKiBUbyBhdm9pZCBwb3RlbnRpYWxseSBjb2xsaWRpbmcgd2l0aCBhbiB2YWxpZCBvbi1kaXNrIGlub2RlIG51bWJlciwKKwkgKiB1c2UgRVhUNF9CQURfSU5PIGZvciB0aGUgYnVkZHkgY2FjaGUgaW5vZGUgbnVtYmVyLiAgVGhpcyBpbm9kZSBpcworCSAqIG5vdCBpbiB0aGUgaW5vZGUgaGFzaCwgc28gaXQgc2hvdWxkIG5ldmVyIGJlIGZvdW5kIGJ5IGlnZXQoKSwgYnV0CisJICogdGhpcyB3aWxsIGF2b2lkIGNvbmZ1c2lvbiBpZiBpdCBldmVyIHNob3dzIHVwIGR1cmluZyBkZWJ1Z2dpbmcuICovCisJc2JpLT5zX2J1ZGR5X2NhY2hlLT5pX2lubyA9IEVYVDRfQkFEX0lOTzsKIAlFWFQ0X0koc2JpLT5zX2J1ZGR5X2NhY2hlKS0+aV9kaXNrc2l6ZSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5ncm91cHM7IGkrKykgewogCQlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgaSwgTlVMTCk7CiAJCWlmIChkZXNjID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSJFWFQ0LWZzOiBjYW4ndCByZWFkIGRlc2NyaXB0b3IgJXVcbiIsIGkpOworCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAiY2FuJ3QgcmVhZCBkZXNjcmlwdG9yICV1IiwgaSk7CiAJCQlnb3RvIGVycl9mcmVlYnVkZHk7CiAJCX0KIAkJaWYgKGV4dDRfbWJfYWRkX2dyb3VwaW5mbyhzYiwgaSwgZGVzYykgIT0gMCkKQEAgLTIzNjIsNyArMjM2OSw3IEBACiAJCWtmcmVlKHNiaS0+c19ncm91cF9pbmZvW2ldKTsKIAlpcHV0KHNiaS0+c19idWRkeV9jYWNoZSk7CiBlcnJfZnJlZXNnaToKLQlrZnJlZShzYmktPnNfZ3JvdXBfaW5mbyk7CisJZXh0NF9rdmZyZWUoc2JpLT5zX2dyb3VwX2luZm8pOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0yNDA0LDE0ICsyNDExLDE1IEBACiAJCQkJCXNsYWJfc2l6ZSwgMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlQsCiAJCQkJCU5VTEwpOwogCisJZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSA9IGNhY2hlcDsKKwogCW11dGV4X3VubG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKIAlpZiAoIWNhY2hlcCkgewotCQlwcmludGsoS0VSTl9FTUVSRyAiRVhUNDogbm8gbWVtb3J5IGZvciBncm91cGluZm8gc2xhYiBjYWNoZVxuIik7CisJCXByaW50ayhLRVJOX0VNRVJHCisJCSAgICAgICAiRVhUNC1mczogbm8gbWVtb3J5IGZvciBncm91cGluZm8gc2xhYiBjYWNoZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0gPSBjYWNoZXA7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1NywxMiArMjQ2NSw2IEBACiAJCWkrKzsKIAl9IHdoaWxlIChpIDw9IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMSk7CiAKLQkvKiBpbml0IGZpbGUgZm9yIGJ1ZGR5IGRhdGEgKi8KLQlyZXQgPSBleHQ0X21iX2luaXRfYmFja2VuZChzYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbWRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19iYWxfbG9jayk7CiAKQEAgLTI0NzIsNiArMjQ3NCwxOCBAQAogCXNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCA9IE1CX0RFRkFVTFRfU1RSRUFNX1RIUkVTSE9MRDsKIAlzYmktPnNfbWJfb3JkZXIyX3JlcXMgPSBNQl9ERUZBVUxUX09SREVSMl9SRVFTOwogCXNiaS0+c19tYl9ncm91cF9wcmVhbGxvYyA9IE1CX0RFRkFVTFRfR1JPVVBfUFJFQUxMT0M7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIHNfc3RyaXBlID4gMSwgdGhlbiB3ZSBzZXQgdGhlIHNfbWJfZ3JvdXBfcHJlYWxsb2MKKwkgKiB0byB0aGUgbG93ZXN0IG11bHRpcGxlIG9mIHNfc3RyaXBlIHdoaWNoIGlzIGJpZ2dlciB0aGFuCisJICogdGhlIHNfbWJfZ3JvdXBfcHJlYWxsb2MgYXMgZGV0ZXJtaW5lZCBhYm92ZS4gV2Ugd2FudAorCSAqIHRoZSBwcmVhbGxvY2F0aW9uIHNpemUgdG8gYmUgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlCisJICogUkFJRCBzdHJpcGUgc2l6ZSBzbyB0aGF0IHByZWFsbG9jYXRpb25zIGRvbid0IGZyYWdtZW50CisJICogdGhlIHN0cmlwZXMuCisJICovCisJaWYgKHNiaS0+c19zdHJpcGUgPiAxKSB7CisJCXNiaS0+c19tYl9ncm91cF9wcmVhbGxvYyA9IHJvdW5kdXAoCisJCQlzYmktPnNfbWJfZ3JvdXBfcHJlYWxsb2MsIHNiaS0+c19zdHJpcGUpOworCX0KIAogCXNiaS0+c19sb2NhbGl0eV9ncm91cHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IGV4dDRfbG9jYWxpdHlfZ3JvdXApOwogCWlmIChzYmktPnNfbG9jYWxpdHlfZ3JvdXBzID09IE5VTEwpIHsKQEAgLTI0ODcsNiArMjUwMSwxMiBAQAogCQlzcGluX2xvY2tfaW5pdCgmbGctPmxnX3ByZWFsbG9jX2xvY2spOwogCX0KIAorCS8qIGluaXQgZmlsZSBmb3IgYnVkZHkgZGF0YSAqLworCXJldCA9IGV4dDRfbWJfaW5pdF9iYWNrZW5kKHNiKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKHNiaS0+c19wcm9jKQogCQlwcm9jX2NyZWF0ZV9kYXRhKCJtYl9ncm91cHMiLCBTX0lSVUdPLCBzYmktPnNfcHJvYywKIAkJCQkgJmV4dDRfbWJfc2VxX2dyb3Vwc19mb3BzLCBzYik7CkBAIC0yNTQ0LDMyICsyNTY0LDMyIEBACiAJCQlFWFQ0X0RFU0NfUEVSX0JMT0NLX0JJVFMoc2IpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX21ldGFfZ3JvdXBfaW5mb3M7IGkrKykKIAkJCWtmcmVlKHNiaS0+c19ncm91cF9pbmZvW2ldKTsKLQkJa2ZyZWUoc2JpLT5zX2dyb3VwX2luZm8pOworCQlleHQ0X2t2ZnJlZShzYmktPnNfZ3JvdXBfaW5mbyk7CiAJfQogCWtmcmVlKHNiaS0+c19tYl9vZmZzZXRzKTsKIAlrZnJlZShzYmktPnNfbWJfbWF4cyk7CiAJaWYgKHNiaS0+c19idWRkeV9jYWNoZSkKIAkJaXB1dChzYmktPnNfYnVkZHlfY2FjaGUpOwogCWlmIChzYmktPnNfbWJfc3RhdHMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIkVYVDQtZnM6IG1iYWxsb2M6ICV1IGJsb2NrcyAldSByZXFzICgldSBzdWNjZXNzKVxuIiwKKwkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywKKwkJICAgICAgICJtYmFsbG9jOiAldSBibG9ja3MgJXUgcmVxcyAoJXUgc3VjY2VzcykiLAogCQkJCWF0b21pY19yZWFkKCZzYmktPnNfYmFsX2FsbG9jYXRlZCksCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19iYWxfcmVxcyksCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19iYWxfc3VjY2VzcykpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICJFWFQ0LWZzOiBtYmFsbG9jOiAldSBleHRlbnRzIHNjYW5uZWQsICV1IGdvYWwgaGl0cywgIgotCQkJCSIldSAyXk4gaGl0cywgJXUgYnJlYWtzLCAldSBsb3N0XG4iLAorCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLAorCQkgICAgICAibWJhbGxvYzogJXUgZXh0ZW50cyBzY2FubmVkLCAldSBnb2FsIGhpdHMsICIKKwkJCQkiJXUgMl5OIGhpdHMsICV1IGJyZWFrcywgJXUgbG9zdCIsCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19iYWxfZXhfc2Nhbm5lZCksCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19iYWxfZ29hbHMpLAogCQkJCWF0b21pY19yZWFkKCZzYmktPnNfYmFsXzJvcmRlcnMpLAogCQkJCWF0b21pY19yZWFkKCZzYmktPnNfYmFsX2JyZWFrcyksCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19tYl9sb3N0X2NodW5rcykpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiRVhUNC1mczogbWJhbGxvYzogJWx1IGdlbmVyYXRlZCBhbmQgaXQgdG9vayAlTHVcbiIsCi0JCQkJc2JpLT5zX21iX2J1ZGRpZXNfZ2VuZXJhdGVkKyssCisJCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sCisJCSAgICAgICAibWJhbGxvYzogJWx1IGdlbmVyYXRlZCBhbmQgaXQgdG9vayAlTHUiLAorCQkJCXNiaS0+c19tYl9idWRkaWVzX2dlbmVyYXRlZCwKIAkJCQlzYmktPnNfbWJfZ2VuZXJhdGlvbl90aW1lKTsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIkVYVDQtZnM6IG1iYWxsb2M6ICV1IHByZWFsbG9jYXRlZCwgJXUgZGlzY2FyZGVkXG4iLAorCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLAorCQkgICAgICAgIm1iYWxsb2M6ICV1IHByZWFsbG9jYXRlZCwgJXUgZGlzY2FyZGVkIiwKIAkJCQlhdG9taWNfcmVhZCgmc2JpLT5zX21iX3ByZWFsbG9jYXRlZCksCiAJCQkJYXRvbWljX3JlYWQoJnNiaS0+c19tYl9kaXNjYXJkZWQpKTsKIAl9CkBAIC0yNjI4LDYgKzI2NDgsMTUgQEAKIAkJcmJfZXJhc2UoJmVudHJ5LT5ub2RlLCAmKGRiLT5iYl9mcmVlX3Jvb3QpKTsKIAkJbWJfZnJlZV9ibG9ja3MoTlVMTCwgJmU0YiwgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKIAorCQkvKgorCQkgKiBDbGVhciB0aGUgdHJpbW1lZCBmbGFnIGZvciB0aGUgZ3JvdXAgc28gdGhhdCB0aGUgbmV4dAorCQkgKiBleHQ0X3RyaW1fZnMgY2FuIHRyaW0gaXQuCisJCSAqIElmIHRoZSB2b2x1bWUgaXMgbW91bnRlZCB3aXRoIC1vIGRpc2NhcmQsIG9ubGluZSBkaXNjYXJkCisJCSAqIGlzIHN1cHBvcnRlZCBhbmQgdGhlIGZyZWUgYmxvY2tzIHdpbGwgYmUgdHJpbW1lZCBvbmxpbmUuCisJCSAqLworCQlpZiAoIXRlc3Rfb3B0KHNiLCBESVNDQVJEKSkKKwkJCUVYVDRfTUJfR1JQX0NMRUFSX1RSSU1NRUQoZGIpOworCiAJCWlmICghZGItPmJiX2ZyZWVfcm9vdC5yYl9ub2RlKSB7CiAJCQkvKiBObyBtb3JlIGl0ZW1zIGluIHRoZSBwZXIgZ3JvdXAgcmIgdHJlZQogCQkJICogYmFsYW5jZSByZWZjb3VudHMgZnJvbSBleHQ0X21iX2ZyZWVfbWV0YWRhdGEoKQpAQCAtMjc3MSw4ICsyODAwLDggQEAKIAkJICogV2UgbGVhayBzb21lIG9mIHRoZSBibG9ja3MgaGVyZS4KIAkJICovCiAJCWV4dDRfbG9ja19ncm91cChzYiwgYWMtPmFjX2JfZXguZmVfZ3JvdXApOwotCQltYl9zZXRfYml0cyhiaXRtYXBfYmgtPmJfZGF0YSwgYWMtPmFjX2JfZXguZmVfc3RhcnQsCi0JCQkgICAgYWMtPmFjX2JfZXguZmVfbGVuKTsKKwkJZXh0NF9zZXRfYml0cyhiaXRtYXBfYmgtPmJfZGF0YSwgYWMtPmFjX2JfZXguZmVfc3RhcnQsCisJCQkgICAgICBhYy0+YWNfYl9leC5mZV9sZW4pOwogCQlleHQ0X3VubG9ja19ncm91cChzYiwgYWMtPmFjX2JfZXguZmVfZ3JvdXApOwogCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGJpdG1hcF9iaCk7CiAJCWlmICghZXJyKQpAQCAtMjc5MCw3ICsyODE5LDggQEAKIAkJfQogCX0KICNlbmRpZgotCW1iX3NldF9iaXRzKGJpdG1hcF9iaC0+Yl9kYXRhLCBhYy0+YWNfYl9leC5mZV9zdGFydCxhYy0+YWNfYl9leC5mZV9sZW4pOworCWV4dDRfc2V0X2JpdHMoYml0bWFwX2JoLT5iX2RhdGEsIGFjLT5hY19iX2V4LmZlX3N0YXJ0LAorCQkgICAgICBhYy0+YWNfYl9leC5mZV9sZW4pOwogCWlmIChnZHAtPmJnX2ZsYWdzICYgY3B1X3RvX2xlMTYoRVhUNF9CR19CTE9DS19VTklOSVQpKSB7CiAJCWdkcC0+YmdfZmxhZ3MgJj0gY3B1X3RvX2xlMTYofkVYVDRfQkdfQkxPQ0tfVU5JTklUKTsKIAkJZXh0NF9mcmVlX2Jsa3Nfc2V0KHNiLCBnZHAsCkBAIC0yODMwLDggKzI4NjAsOSBAQAogCiAvKgogICogaGVyZSB3ZSBub3JtYWxpemUgcmVxdWVzdCBmb3IgbG9jYWxpdHkgZ3JvdXAKLSAqIEdyb3VwIHJlcXVlc3QgYXJlIG5vcm1hbGl6ZWQgdG8gc19zdHJpcCBzaXplIGlmIHdlIHNldCB0aGUgc2FtZSB2aWEgbW91bnQKLSAqIG9wdGlvbi4gSWYgbm90IHdlIHNldCBpdCB0byBzX21iX2dyb3VwX3ByZWFsbG9jIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIHZpYQorICogR3JvdXAgcmVxdWVzdCBhcmUgbm9ybWFsaXplZCB0byBzX21iX2dyb3VwX3ByZWFsbG9jLCB3aGljaCBnb2VzIHRvCisgKiBzX3N0cmlwIGlmIHdlIHNldCB0aGUgc2FtZSB2aWEgbW91bnQgb3B0aW9uLgorICogc19tYl9ncm91cF9wcmVhbGxvYyBjYW4gYmUgY29uZmlndXJlZCB2aWEKICAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9ncm91cF9wcmVhbGxvYwogICoKICAqIFhYWDogc2hvdWxkIHdlIHRyeSB0byBwcmVhbGxvY2F0ZSBtb3JlIHRoYW4gdGhlIGdyb3VwIGhhcyBub3c/CkBAIC0yODQyLDEwICsyODczLDcgQEAKIAlzdHJ1Y3QgZXh0NF9sb2NhbGl0eV9ncm91cCAqbGcgPSBhYy0+YWNfbGc7CiAKIAlCVUdfT04obGcgPT0gTlVMTCk7Ci0JaWYgKEVYVDRfU0Ioc2IpLT5zX3N0cmlwZSkKLQkJYWMtPmFjX2dfZXguZmVfbGVuID0gRVhUNF9TQihzYiktPnNfc3RyaXBlOwotCWVsc2UKLQkJYWMtPmFjX2dfZXguZmVfbGVuID0gRVhUNF9TQihzYiktPnNfbWJfZ3JvdXBfcHJlYWxsb2M7CisJYWMtPmFjX2dfZXguZmVfbGVuID0gRVhUNF9TQihzYiktPnNfbWJfZ3JvdXBfcHJlYWxsb2M7CiAJbWJfZGVidWcoMSwgIiMldTogZ29hbCAldSBibG9ja3MgZm9yIGxvY2FsaXR5IGdyb3VwXG4iLAogCQljdXJyZW50LT5waWQsIGFjLT5hY19nX2V4LmZlX2xlbik7CiB9CkBAIC0zMDAxLDkgKzMwMjksMTAgQEAKIAogCWlmIChzdGFydCArIHNpemUgPD0gYWMtPmFjX29fZXguZmVfbG9naWNhbCAmJgogCQkJc3RhcnQgPiBhYy0+YWNfb19leC5mZV9sb2dpY2FsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3RhcnQgJWx1LCBzaXplICVsdSwgZmVfbG9naWNhbCAlbHVcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nKSBzaXplLAotCQkJKHVuc2lnbmVkIGxvbmcpIGFjLT5hY19vX2V4LmZlX2xvZ2ljYWwpOworCQlleHQ0X21zZyhhYy0+YWNfc2IsIEtFUk5fRVJSLAorCQkJICJzdGFydCAlbHUsIHNpemUgJWx1LCBmZV9sb2dpY2FsICVsdSIsCisJCQkgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0LCAodW5zaWduZWQgbG9uZykgc2l6ZSwKKwkJCSAodW5zaWduZWQgbG9uZykgYWMtPmFjX29fZXguZmVfbG9naWNhbCk7CiAJfQogCUJVR19PTihzdGFydCArIHNpemUgPD0gYWMtPmFjX29fZXguZmVfbG9naWNhbCAmJgogCQkJc3RhcnQgPiBhYy0+YWNfb19leC5mZV9sb2dpY2FsKTsKQEAgLTMyNjIsNyArMzI5MSw3IEBACiAKIAl3aGlsZSAobikgewogCQllbnRyeSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbm9kZSk7Ci0JCW1iX3NldF9iaXRzKGJpdG1hcCwgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKwkJZXh0NF9zZXRfYml0cyhiaXRtYXAsIGVudHJ5LT5zdGFydF9ibGssIGVudHJ5LT5jb3VudCk7CiAJCW4gPSByYl9uZXh0KG4pOwogCX0KIAlyZXR1cm47CkBAIC0zMzA0LDcgKzMzMzMsNyBAQAogCQlpZiAodW5saWtlbHkobGVuID09IDApKQogCQkJY29udGludWU7CiAJCUJVR19PTihncm91cG5yICE9IGdyb3VwKTsKLQkJbWJfc2V0X2JpdHMoYml0bWFwLCBzdGFydCwgbGVuKTsKKwkJZXh0NF9zZXRfYml0cyhiaXRtYXAsIHN0YXJ0LCBsZW4pOwogCQlwcmVhbGxvY2F0ZWQgKz0gbGVuOwogCQljb3VudCsrOwogCX0KQEAgLTM1ODQsMTAgKzM2MTMsMTEgQEAKIAkJYml0ID0gbmV4dCArIDE7CiAJfQogCWlmIChmcmVlICE9IHBhLT5wYV9mcmVlKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgInBhICVwOiBsb2dpYyAlbHUsIHBoeXMuICVsdSwgbGVuICVsdVxuIiwKLQkJCXBhLCAodW5zaWduZWQgbG9uZykgcGEtPnBhX2xzdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nKSBwYS0+cGFfcHN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcpIHBhLT5wYV9sZW4pOworCQlleHQ0X21zZyhlNGItPmJkX3NiLCBLRVJOX0NSSVQsCisJCQkgInBhICVwOiBsb2dpYyAlbHUsIHBoeXMuICVsdSwgbGVuICVsdSIsCisJCQkgcGEsICh1bnNpZ25lZCBsb25nKSBwYS0+cGFfbHN0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nKSBwYS0+cGFfcHN0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nKSBwYS0+cGFfbGVuKTsKIAkJZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHNiLCBncm91cCwgMCwgMCwgImZyZWUgJXUsIHBhX2ZyZWUgJXUiLAogCQkJCQlmcmVlLCBwYS0+cGFfZnJlZSk7CiAJCS8qCkBAIC0zNzc1LDcgKzM4MDUsOCBAQAogCQkJICogdXNlIHByZWFsbG9jYXRpb24gd2hpbGUgd2UncmUgZGlzY2FyZGluZyBpdCAqLwogCQkJc3Bpbl91bmxvY2soJnBhLT5wYV9sb2NrKTsKIAkJCXNwaW5fdW5sb2NrKCZlaS0+aV9wcmVhbGxvY19sb2NrKTsKLQkJCXByaW50ayhLRVJOX0VSUiAidWgtb2ghIHVzZWQgcGEgd2hpbGUgZGlzY2FyZGluZ1xuIik7CisJCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCisJCQkJICJ1aC1vaCEgdXNlZCBwYSB3aGlsZSBkaXNjYXJkaW5nIik7CiAJCQlXQVJOX09OKDEpOwogCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOwogCQkJZ290byByZXBlYXQ7CkBAIC0zODUyLDEyICszODgzLDEzIEBACiAJICAgIChFWFQ0X1NCKHNiKS0+c19tb3VudF9mbGFncyAmIEVYVDRfTUZfRlNfQUJPUlRFRCkpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogQ2FuJ3QgYWxsb2NhdGU6IgotCQkJIiBBbGxvY2F0aW9uIGNvbnRleHQgZGV0YWlsczpcbiIpOwotCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogc3RhdHVzICVkIGZsYWdzICVkXG4iLAorCWV4dDRfbXNnKGFjLT5hY19zYiwgS0VSTl9FUlIsICJFWFQ0LWZzOiBDYW4ndCBhbGxvY2F0ZToiCisJCQkiIEFsbG9jYXRpb24gY29udGV4dCBkZXRhaWxzOiIpOworCWV4dDRfbXNnKGFjLT5hY19zYiwgS0VSTl9FUlIsICJFWFQ0LWZzOiBzdGF0dXMgJWQgZmxhZ3MgJWQiLAogCQkJYWMtPmFjX3N0YXR1cywgYWMtPmFjX2ZsYWdzKTsKLQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IG9yaWcgJWx1LyVsdS8lbHVAJWx1LCBnb2FsICVsdS8lbHUvJWx1QCVsdSwgIgotCQkJImJlc3QgJWx1LyVsdS8lbHVAJWx1IGNyICVkXG4iLAorCWV4dDRfbXNnKGFjLT5hY19zYiwgS0VSTl9FUlIsICJFWFQ0LWZzOiBvcmlnICVsdS8lbHUvJWx1QCVsdSwgIgorCQkgCSJnb2FsICVsdS8lbHUvJWx1QCVsdSwgIgorCQkJImJlc3QgJWx1LyVsdS8lbHVAJWx1IGNyICVkIiwKIAkJCSh1bnNpZ25lZCBsb25nKWFjLT5hY19vX2V4LmZlX2dyb3VwLAogCQkJKHVuc2lnbmVkIGxvbmcpYWMtPmFjX29fZXguZmVfc3RhcnQsCiAJCQkodW5zaWduZWQgbG9uZylhYy0+YWNfb19leC5mZV9sZW4sCkBAIC0zODcxLDkgKzM5MDMsOSBAQAogCQkJKHVuc2lnbmVkIGxvbmcpYWMtPmFjX2JfZXguZmVfbGVuLAogCQkJKHVuc2lnbmVkIGxvbmcpYWMtPmFjX2JfZXguZmVfbG9naWNhbCwKIAkJCShpbnQpYWMtPmFjX2NyaXRlcmlhKTsKLQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6ICVsdSBzY2FubmVkLCAlZCBmb3VuZFxuIiwgYWMtPmFjX2V4X3NjYW5uZWQsCi0JCWFjLT5hY19mb3VuZCk7Ci0JcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBncm91cHM6IFxuIik7CisJZXh0NF9tc2coYWMtPmFjX3NiLCBLRVJOX0VSUiwgIkVYVDQtZnM6ICVsdSBzY2FubmVkLCAlZCBmb3VuZCIsCisJCSBhYy0+YWNfZXhfc2Nhbm5lZCwgYWMtPmFjX2ZvdW5kKTsKKwlleHQ0X21zZyhhYy0+YWNfc2IsIEtFUk5fRVJSLCAiRVhUNC1mczogZ3JvdXBzOiAiKTsKIAluZ3JvdXBzID0gZXh0NF9nZXRfZ3JvdXBzX2NvdW50KHNiKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7CiAJCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdycCA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpOwpAQCAtNDYzNyw3ICs0NjY5LDcgQEAKIAl9CiAJZXh0NF9tYXJrX3N1cGVyX2RpcnR5KHNiKTsKIGVycm9yX3JldHVybjoKLQlpZiAoZnJlZWQpCisJaWYgKGZyZWVkICYmICEoZmxhZ3MgJiBFWFQ0X0ZSRUVfQkxPQ0tTX05PX1FVT1RfVVBEQVRFKSkKIAkJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgZnJlZWQpOwogCWJyZWxzZShiaXRtYXBfYmgpOwogCWV4dDRfc3RkX2Vycm9yKHNiLCBlcnIpOwpAQCAtNDY0NSw3ICs0Njc3LDcgQEAKIH0KIAogLyoqCi0gKiBleHQ0X2FkZF9ncm91cGJsb2NrcygpIC0tIEFkZCBnaXZlbiBibG9ja3MgdG8gYW4gZXhpc3RpbmcgZ3JvdXAKKyAqIGV4dDRfZ3JvdXBfYWRkX2Jsb2NrcygpIC0tIEFkZCBnaXZlbiBibG9ja3MgdG8gYW4gZXhpc3RpbmcgZ3JvdXAKICAqIEBoYW5kbGU6CQkJaGFuZGxlIHRvIHRoaXMgdHJhbnNhY3Rpb24KICAqIEBzYjoJCQkJc3VwZXIgYmxvY2sKICAqIEBibG9jazoJCQlzdGFydCBwaHlzY2lhbCBibG9jayB0byBhZGQgdG8gdGhlIGJsb2NrIGdyb3VwCkBAIC00NjUzLDcgKzQ2ODUsNyBAQAogICoKICAqIFRoaXMgbWFya3MgdGhlIGJsb2NrcyBhcyBmcmVlIGluIHRoZSBiaXRtYXAgYW5kIGJ1ZGR5LgogICovCi12b2lkIGV4dDRfYWRkX2dyb3VwYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCitpbnQgZXh0NF9ncm91cF9hZGRfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgZXh0NF9mc2Jsa190IGJsb2NrLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYml0bWFwX2JoID0gTlVMTDsKQEAgLTQ2NjYsMjUgKzQ2OTgsMzUgQEAKIAlzdHJ1Y3QgZXh0NF9idWRkeSBlNGI7CiAJaW50IGVyciA9IDAsIHJldCwgYmxrX2ZyZWVfY291bnQ7CiAJZXh0NF9ncnBibGtfdCBibG9ja3NfZnJlZWQ7Ci0Jc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwOwogCiAJZXh0NF9kZWJ1ZygiQWRkaW5nIGJsb2NrKHMpICVsbHUtJWxsdVxuIiwgYmxvY2ssIGJsb2NrICsgY291bnQgLSAxKTsKIAorCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKwogCWV4dDRfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc2IsIGJsb2NrLCAmYmxvY2tfZ3JvdXAsICZiaXQpOwotCWdycCA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGJsb2NrX2dyb3VwKTsKIAkvKgogCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZnJlZWluZyBibG9ja3MgYWNyb3NzIGEgZ3JvdXAKIAkgKiBib3VuZGFyeS4KIAkgKi8KLQlpZiAoYml0ICsgY291bnQgPiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCWlmIChiaXQgKyBjb3VudCA+IEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikpIHsKKwkJZXh0NF93YXJuaW5nKHNiLCAidG9vIG11Y2ggYmxvY2tzIGFkZGVkIHRvIGdyb3VwICV1XG4iLAorCQkJICAgICBibG9ja19ncm91cCk7CisJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOworCX0KIAogCWJpdG1hcF9iaCA9IGV4dDRfcmVhZF9ibG9ja19iaXRtYXAoc2IsIGJsb2NrX2dyb3VwKTsKLQlpZiAoIWJpdG1hcF9iaCkKKwlpZiAoIWJpdG1hcF9iaCkgeworCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKIAlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgYmxvY2tfZ3JvdXAsICZnZF9iaCk7Ci0JaWYgKCFkZXNjKQorCWlmICghZGVzYykgeworCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CiAKIAlpZiAoaW5fcmFuZ2UoZXh0NF9ibG9ja19iaXRtYXAoc2IsIGRlc2MpLCBibG9jaywgY291bnQpIHx8CiAJICAgIGluX3JhbmdlKGV4dDRfaW5vZGVfYml0bWFwKHNiLCBkZXNjKSwgYmxvY2ssIGNvdW50KSB8fApAQCAtNDY5NCw2ICs0NzM2LDcgQEAKIAkJZXh0NF9lcnJvcihzYiwgIkFkZGluZyBibG9ja3MgaW4gc3lzdGVtIHpvbmVzIC0gIgogCQkJICAgIkJsb2NrID0gJWxsdSwgY291bnQgPSAlbHUiLAogCQkJICAgYmxvY2ssIGNvdW50KTsKKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCkBAIC00NzYyLDcgKzQ4MDUsNyBAQAogZXJyb3JfcmV0dXJuOgogCWJyZWxzZShiaXRtYXBfYmgpOwogCWV4dDRfc3RkX2Vycm9yKHNiLCBlcnIpOwotCXJldHVybjsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTQ3ODIsNiArNDgyNSw4IEBACiB7CiAJc3RydWN0IGV4dDRfZnJlZV9leHRlbnQgZXg7CiAKKwl0cmFjZV9leHQ0X3RyaW1fZXh0ZW50KHNiLCBncm91cCwgc3RhcnQsIGNvdW50KTsKKwogCWFzc2VydF9zcGluX2xvY2tlZChleHQ0X2dyb3VwX2xvY2tfcHRyKHNiLCBncm91cCkpOwogCiAJZXguZmVfc3RhcnQgPSBzdGFydDsKQEAgLTQ4MDIsNyArNDg0Nyw3IEBACiAvKioKICAqIGV4dDRfdHJpbV9hbGxfZnJlZSAtLSBmdW5jdGlvbiB0byB0cmltIGFsbCBmcmVlIHNwYWNlIGluIGFsbG9jLiBncm91cAogICogQHNiOgkJCXN1cGVyIGJsb2NrIGZvciBmaWxlIHN5c3RlbQotICogQGU0YjoJCWV4dDQgYnVkZHkKKyAqIEBncm91cDoJCWdyb3VwIHRvIGJlIHRyaW1tZWQKICAqIEBzdGFydDoJCWZpcnN0IGdyb3VwIGJsb2NrIHRvIGV4YW1pbmUKICAqIEBtYXg6CQlsYXN0IGdyb3VwIGJsb2NrIHRvIGV4YW1pbmUKICAqIEBtaW5ibG9ja3M6CQltaW5pbXVtIGV4dGVudCBibG9jayBjb3VudApAQCAtNDgyMywxMCArNDg2OCwxMiBAQAogCQkgICBleHQ0X2dycGJsa190IG1pbmJsb2NrcykKIHsKIAl2b2lkICpiaXRtYXA7Ci0JZXh0NF9ncnBibGtfdCBuZXh0LCBjb3VudCA9IDA7CisJZXh0NF9ncnBibGtfdCBuZXh0LCBjb3VudCA9IDAsIGZyZWVfY291bnQgPSAwOwogCXN0cnVjdCBleHQ0X2J1ZGR5IGU0YjsKIAlpbnQgcmV0OwogCisJdHJhY2VfZXh0NF90cmltX2FsbF9mcmVlKHNiLCBncm91cCwgc3RhcnQsIG1heCk7CisKIAlyZXQgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGdyb3VwLCAmZTRiKTsKIAlpZiAocmV0KSB7CiAJCWV4dDRfZXJyb3Ioc2IsICJFcnJvciBpbiBsb2FkaW5nIGJ1ZGR5ICIKQEAgLTQ4MzYsNiArNDg4MywxMCBAQAogCWJpdG1hcCA9IGU0Yi5iZF9iaXRtYXA7CiAKIAlleHQ0X2xvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKKwlpZiAoRVhUNF9NQl9HUlBfV0FTX1RSSU1NRUQoZTRiLmJkX2luZm8pICYmCisJICAgIG1pbmJsb2NrcyA+PSBhdG9taWNfcmVhZCgmRVhUNF9TQihzYiktPnNfbGFzdF90cmltX21pbmJsa3MpKQorCQlnb3RvIG91dDsKKwogCXN0YXJ0ID0gKGU0Yi5iZF9pbmZvLT5iYl9maXJzdF9mcmVlID4gc3RhcnQpID8KIAkJZTRiLmJkX2luZm8tPmJiX2ZpcnN0X2ZyZWUgOiBzdGFydDsKIApAQCAtNDg1MCw2ICs0OTAxLDcgQEAKIAkJCQkJIG5leHQgLSBzdGFydCwgZ3JvdXAsICZlNGIpOwogCQkJY291bnQgKz0gbmV4dCAtIHN0YXJ0OwogCQl9CisJCWZyZWVfY291bnQgKz0gbmV4dCAtIHN0YXJ0OwogCQlzdGFydCA9IG5leHQgKyAxOwogCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtNDg2Myw5ICs0OTE1LDEzIEBACiAJCQlleHQ0X2xvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKIAkJfQogCi0JCWlmICgoZTRiLmJkX2luZm8tPmJiX2ZyZWUgLSBjb3VudCkgPCBtaW5ibG9ja3MpCisJCWlmICgoZTRiLmJkX2luZm8tPmJiX2ZyZWUgLSBmcmVlX2NvdW50KSA8IG1pbmJsb2NrcykKIAkJCWJyZWFrOwogCX0KKworCWlmICghcmV0KQorCQlFWFQ0X01CX0dSUF9TRVRfVFJJTU1FRChlNGIuYmRfaW5mbyk7CitvdXQ6CiAJZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKIAlleHQ0X21iX3VubG9hZF9idWRkeSgmZTRiKTsKIApAQCAtNDkwNCw2ICs0OTYwLDggQEAKIAogCWlmICh1bmxpa2VseShtaW5sZW4gPiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0YXJ0ICsgbGVuIDw9IGZpcnN0X2RhdGFfYmxrKQorCQlnb3RvIG91dDsKIAlpZiAoc3RhcnQgPCBmaXJzdF9kYXRhX2JsaykgewogCQlsZW4gLT0gZmlyc3RfZGF0YV9ibGsgLSBzdGFydDsKIAkJc3RhcnQgPSBmaXJzdF9kYXRhX2JsazsKQEAgLTQ5NTIsNSArNTAxMCw5IEBACiAJfQogCXJhbmdlLT5sZW4gPSB0cmltbWVkICogc2ItPnNfYmxvY2tzaXplOwogCisJaWYgKCFyZXQpCisJCWF0b21pY19zZXQoJkVYVDRfU0Ioc2IpLT5zX2xhc3RfdHJpbV9taW5ibGtzLCBtaW5sZW4pOworCitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggMjBiNWU3Yi4uOWQ0YTYzNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTE4Nyw3ICsxODcsNiBAQAogCV9fdTE2IGFjX2ZsYWdzOwkJLyogYWxsb2NhdGlvbiBoaW50cyAqLwogCV9fdTggYWNfc3RhdHVzOwogCV9fdTggYWNfY3JpdGVyaWE7Ci0JX191OCBhY19yZXBlYXRzOwogCV9fdTggYWNfMm9yZGVyOwkJLyogaWYgcmVxdWVzdCBpcyB0byBhbGxvY2F0ZSAyXk4gYmxvY2tzIGFuZAogCQkJCSAqIE4gPiAwLCB0aGUgZmllbGQgc3RvcmVzIE4sIG90aGVyd2lzZSAwICovCiAJX191OCBhY19vcDsJCS8qIG9wZXJhdGlvbiwgZm9yIGhpc3Rvcnkgb25seSAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IDhjOWJhYmEuLmY4MDY4YzcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbmFtZWkuYworKysgYi9mcy9leHQ0L25hbWVpLmMKQEAgLTI4OSw3ICsyODksNyBAQAogCQkJCXdoaWxlIChsZW4tLSkgcHJpbnRrKCIlYyIsICpuYW1lKyspOwogCQkJCWV4dDRmc19kaXJoYXNoKGRlLT5uYW1lLCBkZS0+bmFtZV9sZW4sICZoKTsKIAkJCQlwcmludGsoIjoleC4ldSAiLCBoLmhhc2gsCi0JCQkJICAgICAgICgoY2hhciAqKSBkZSAtIGJhc2UpKTsKKwkJCQkgICAgICAgKHVuc2lnbmVkKSAoKGNoYXIgKikgZGUgLSBiYXNlKSk7CiAJCQl9CiAJCQlzcGFjZSArPSBFWFQ0X0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7CiAJCQluYW1lcysrOwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKIAogCSplcnIgPSAtRU5PRU5UOwogZXJyb3V0OgotCWR4dHJhY2UocHJpbnRrKEtFUk5fREVCVUcgIiVzIG5vdCBmb3VuZFxuIiwgbmFtZSkpOworCWR4dHJhY2UocHJpbnRrKEtFUk5fREVCVUcgIiVzIG5vdCBmb3VuZFxuIiwgZF9uYW1lLT5uYW1lKSk7CiAJZHhfcmVsZWFzZSAoZnJhbWVzKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE5ODUsMTggKzE5ODUsMTEgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfb3JwaGFuKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JLyogT3JwaGFuIGhhbmRsaW5nIGlzIG9ubHkgdmFsaWQgZm9yIGZpbGVzIHdpdGggZGF0YSBibG9ja3MKLQkgKiBiZWluZyB0cnVuY2F0ZWQsIG9yIGZpbGVzIGJlaW5nIHVubGlua2VkLiAqLwotCi0JLyogQEBAIEZJWE1FOiBPYnNlcnZhdGlvbiBmcm9tIGF2aXJvOgotCSAqIEkgdGhpbmsgSSBjYW4gdHJpZ2dlciBKX0FTU0VSVCBpbiBleHQ0X29ycGhhbl9hZGQoKS4gIFdlIGJsb2NrCi0JICogaGVyZSAob24gc19vcnBoYW5fbG9jayksIHNvIHJhY2Ugd2l0aCBleHQ0X2xpbmsoKSB3aGljaCBtaWdodCBidW1wCi0JICogLT5pX25saW5rLiBGb3IsIHNheSBpdCwgY2hhcmFjdGVyIGRldmljZS4gTm90IGEgcmVndWxhciBmaWxlLAotCSAqIG5vdCBhIGRpcmVjdG9yeSwgbm90IGEgc3ltbGluayBhbmQgLT5pX25saW5rID4gMC4KLQkgKgotCSAqIHR5dHNvLCA0LzI1LzIwMDk6IEknbSBub3Qgc3VyZSBob3cgdGhhdCBjb3VsZCBoYXBwZW47Ci0JICogc2hvdWxkbid0IHRoZSBmcyBjb3JlIHByb3RlY3QgdXMgZnJvbSB0aGVzZSBzb3J0IG9mCi0JICogdW5saW5rKCkvbGluaygpIHJhY2VzPworCS8qCisJICogT3JwaGFuIGhhbmRsaW5nIGlzIG9ubHkgdmFsaWQgZm9yIGZpbGVzIHdpdGggZGF0YSBibG9ja3MKKwkgKiBiZWluZyB0cnVuY2F0ZWQsIG9yIGZpbGVzIGJlaW5nIHVubGlua2VkLiBOb3RlIHRoYXQgd2UgZWl0aGVyCisJICogaG9sZCBpX211dGV4LCBvciB0aGUgaW5vZGUgY2FuIG5vdCBiZSByZWZlcmVuY2VkIGZyb20gb3V0c2lkZSwKKwkgKiBzbyBpX25saW5rIHNob3VsZCBub3QgYmUgYnVtcGVkIGR1ZSB0byByYWNlCiAJICovCiAJSl9BU1NFUlQoKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fAogCQkgIFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHx8IGlub2RlLT5pX25saW5rID09IDApOwpAQCAtMjI2MCw5ICsyMjUzLDExIEBACiAJCS8qCiAJCSAqIEZvciBub24tZmFzdCBzeW1saW5rcywgd2UganVzdCBhbGxvY2F0ZSBpbm9kZSBhbmQgcHV0IGl0IG9uCiAJCSAqIG9ycGhhbiBsaXN0IGluIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiA9PiB3ZSBuZWVkIGJpdG1hcCwKLQkJICogZ3JvdXAgZGVzY3JpcHRvciwgc2IsIGlub2RlIGJsb2NrLCBxdW90YSBibG9ja3MuCisJCSAqIGdyb3VwIGRlc2NyaXB0b3IsIHNiLCBpbm9kZSBibG9jaywgcXVvdGEgYmxvY2tzLCBhbmQKKwkJICogcG9zc2libHkgc2VsaW51eCB4YXR0ciBibG9ja3MuCiAJCSAqLwotCQljcmVkaXRzID0gNCArIEVYVDRfTUFYUVVPVEFTX0lOSVRfQkxPQ0tTKGRpci0+aV9zYik7CisJCWNyZWRpdHMgPSA0ICsgRVhUNF9NQVhRVU9UQVNfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCisJCQkgIEVYVDRfWEFUVFJfVFJBTlNfQkxPQ0tTOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhc3Qgc3ltbGluay4gV2UgaGF2ZSB0byBhZGQgZW50cnkgdG8gZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9mcy9leHQ0L3BhZ2UtaW8uYyBiL2ZzL2V4dDQvcGFnZS1pby5jCmluZGV4IDdiYjhmNzYuLjkyZjM4ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcGFnZS1pby5jCisrKyBiL2ZzL2V4dDQvcGFnZS1pby5jCkBAIC0xNDIsNyArMTQyLDIzIEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJaW50CQkJcmV0OwogCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlmICghbXV0ZXhfdHJ5bG9jaygmaW5vZGUtPmlfbXV0ZXgpKSB7CisJCS8qCisJCSAqIFJlcXVldWUgdGhlIHdvcmsgaW5zdGVhZCBvZiB3YWl0aW5nIHNvIHRoYXQgdGhlIHdvcmsKKwkJICogaXRlbXMgcXVldWVkIGFmdGVyIHRoaXMgY2FuIGJlIHByb2Nlc3NlZC4KKwkJICovCisJCXF1ZXVlX3dvcmsoRVhUNF9TQihpbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3EsICZpby0+d29yayk7CisJCS8qCisJCSAqIFRvIHByZXZlbnQgdGhlIGV4dDQtZGlvLXVud3JpdHRlbiB0aHJlYWQgZnJvbSBrZWVwaW5nCisJCSAqIHJlcXVldWVpbmcgZW5kX2lvIHJlcXVlc3RzIGFuZCBvY2N1cHlpbmcgY3B1IGZvciB0b28gbG9uZywKKwkJICogeWllbGQgdGhlIGNwdSBpZiBpdCBzZWVzIGFuIGVuZF9pbyByZXF1ZXN0IHRoYXQgaGFzIGFscmVhZHkKKwkJICogYmVlbiByZXF1ZXVlZC4KKwkJICovCisJCWlmIChpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1FVRVVFRCkKKwkJCXlpZWxkKCk7CisJCWlvLT5mbGFnIHw9IEVYVDRfSU9fRU5EX1FVRVVFRDsKKwkJcmV0dXJuOworCX0KIAlyZXQgPSBleHQ0X2VuZF9pb19ub2xvY2soaW8pOwogCWlmIChyZXQgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwpAQCAtMjg1LDExICszMDEsNyBAQAogCWlvX2VuZCA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUsIEdGUF9OT0ZTKTsKIAlpZiAoIWlvX2VuZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZG8gewotCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIG52ZWNzKTsKLQkJbnZlY3MgPj49IDE7Ci0JfSB3aGlsZSAoYmlvID09IE5VTEwpOwotCisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCBtaW4obnZlY3MsIEJJT19NQVhfUEFHRVMpKTsKIAliaW8tPmJpX3NlY3RvciA9IGJoLT5iX2Jsb2NrbnIgKiAoYmgtPmJfc2l6ZSA+PiA5KTsKIAliaW8tPmJpX2JkZXYgPSBiaC0+Yl9iZGV2OwogCWJpby0+YmlfcHJpdmF0ZSA9IGlvLT5pb19lbmQgPSBpb19lbmQ7CkBAIC0zMzgsOCArMzUwLDEwIEBACiAJaWYgKChpb19lbmQtPm51bV9pb19wYWdlcyA+PSBNQVhfSU9fUEFHRVMpICYmCiAJICAgIChpb19lbmQtPnBhZ2VzW2lvX2VuZC0+bnVtX2lvX3BhZ2VzLTFdICE9IGlvX3BhZ2UpKQogCQlnb3RvIHN1Ym1pdF9hbmRfcmV0cnk7Ci0JaWYgKGJ1ZmZlcl91bmluaXQoYmgpKQotCQlpby0+aW9fZW5kLT5mbGFnIHw9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKKwlpZiAoYnVmZmVyX3VuaW5pdChiaCkgJiYgIShpb19lbmQtPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CisJCWlvX2VuZC0+ZmxhZyB8PSBFWFQ0X0lPX0VORF9VTldSSVRURU47CisJCWF0b21pY19pbmMoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbik7CisJfQogCWlvLT5pb19lbmQtPnNpemUgKz0gYmgtPmJfc2l6ZTsKIAlpby0+aW9fbmV4dF9ibG9jaysrOwogCXJldCA9IGJpb19hZGRfcGFnZShpby0+aW9fYmlvLCBiaC0+Yl9wYWdlLCBiaC0+Yl9zaXplLCBiaF9vZmZzZXQoYmgpKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jCmluZGV4IDgwYmJjOWMuLjcwN2QzZjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcmVzaXplLmMKKysrIGIvZnMvZXh0NC9yZXNpemUuYwpAQCAtMTYsNiArMTYsMzUgQEAKIAogI2luY2x1ZGUgImV4dDRfamJkMi5oIgogCitpbnQgZXh0NF9yZXNpemVfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qCisJICogV2UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIG9ubGluZS1yZXNpemluZyBvbiBhIGZpbGVzeXN0ZW0gbW91bnRlZAorCSAqIHdpdGggZXJyb3IsIGJlY2F1c2UgaXQgY2FuIGRlc3Ryb3kgdGhlIGZpbGVzeXN0ZW0gZWFzaWx5LgorCSAqLworCWlmIChFWFQ0X1NCKHNiKS0+c19tb3VudF9zdGF0ZSAmIEVYVDRfRVJST1JfRlMpIHsKKwkJZXh0NF93YXJuaW5nKHNiLCAiVGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgZmlsZXN5c3RlbSwgIgorCQkJICAgICAic28gb25saW5lIHJlc2l6aW5nIGlzIG5vdCBhbGxvd2VkXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKEVYVDRfUkVTSVpJTkcsICZFWFQ0X1NCKHNiKS0+c19yZXNpemVfZmxhZ3MpKQorCQlyZXQgPSAtRUJVU1k7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGV4dDRfcmVzaXplX2VuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWNsZWFyX2JpdF91bmxvY2soRVhUNF9SRVNJWklORywgJkVYVDRfU0Ioc2IpLT5zX3Jlc2l6ZV9mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKK30KKwogI2RlZmluZSBvdXRzaWRlKGIsIGZpcnN0LCBsYXN0KQkoKGIpIDwgKGZpcnN0KSB8fCAoYikgPj0gKGxhc3QpKQogI2RlZmluZSBpbnNpZGUoYiwgZmlyc3QsIGxhc3QpCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPCAobGFzdCkpCiAKQEAgLTExOCwxMCArMTQ3LDggQEAKIAkJYnJlbHNlKGJoKTsKIAkJYmggPSBFUlJfUFRSKGVycik7CiAJfSBlbHNlIHsKLQkJbG9ja19idWZmZXIoYmgpOwogCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgc2ItPnNfYmxvY2tzaXplKTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCXVubG9ja19idWZmZXIoYmgpOwogCX0KIAogCXJldHVybiBiaDsKQEAgLTEzMiw4ICsxNTksNyBAQAogICogSWYgdGhhdCBmYWlscywgcmVzdGFydCB0aGUgdHJhbnNhY3Rpb24gJiByZWdhaW4gd3JpdGUgYWNjZXNzIGZvciB0aGUKICAqIGJ1ZmZlciBoZWFkIHdoaWNoIGlzIHVzZWQgZm9yIGJsb2NrX2JpdG1hcCBtb2RpZmljYXRpb25zLgogICovCi1zdGF0aWMgaW50IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZV90ICpoYW5kbGUsIGludCB0aHJlc2gsCi0JCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorc3RhdGljIGludCBleHRlbmRfb3JfcmVzdGFydF90cmFuc2FjdGlvbihoYW5kbGVfdCAqaGFuZGxlLCBpbnQgdGhyZXNoKQogewogCWludCBlcnI7CiAKQEAgLTE0NCw5ICsxNzAsOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCWlmIChlcnIpIHsKLQkJaWYgKChlcnIgPSBleHQ0X2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIEVYVDRfTUFYX1RSQU5TX0RBVEEpKSkKLQkJCXJldHVybiBlcnI7Ci0JCWlmICgoZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCkpKQorCQllcnIgPSBleHQ0X2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIEVYVDRfTUFYX1RSQU5TX0RBVEEpOworCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTE4MSwyMSArMjA2LDcgQEAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CiAKLQltdXRleF9sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwotCWlmIChpbnB1dC0+Z3JvdXAgIT0gc2JpLT5zX2dyb3Vwc19jb3VudCkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXhpdF9qb3VybmFsOwotCX0KLQotCWlmIChJU19FUlIoYmggPSBiY2xlYW4oaGFuZGxlLCBzYiwgaW5wdXQtPmJsb2NrX2JpdG1hcCkpKSB7Ci0JCWVyciA9IFBUUl9FUlIoYmgpOwotCQlnb3RvIGV4aXRfam91cm5hbDsKLQl9Ci0KLQlpZiAoZXh0NF9iZ19oYXNfc3VwZXIoc2IsIGlucHV0LT5ncm91cCkpIHsKLQkJZXh0NF9kZWJ1ZygibWFyayBiYWNrdXAgc3VwZXJibG9jayAlIzA0bGx4ICgrMClcbiIsIHN0YXJ0KTsKLQkJZXh0NF9zZXRfYml0KDAsIGJoLT5iX2RhdGEpOwotCX0KKwlCVUdfT04oaW5wdXQtPmdyb3VwICE9IHNiaS0+c19ncm91cHNfY291bnQpOwogCiAJLyogQ29weSBhbGwgb2YgdGhlIEdEVCBibG9ja3MgaW50byB0aGUgYmFja3VwIGluIHRoaXMgZ3JvdXAgKi8KIAlmb3IgKGkgPSAwLCBiaXQgPSAxLCBibG9jayA9IHN0YXJ0ICsgMTsKQEAgLTIwMywyOSArMjE0LDI2IEBACiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqZ2RiOwogCiAJCWV4dDRfZGVidWcoInVwZGF0ZSBiYWNrdXAgZ3JvdXAgJSMwNGxseCAoKyVkKVxuIiwgYmxvY2ssIGJpdCk7Ci0KLQkJaWYgKChlcnIgPSBleHRlbmRfb3JfcmVzdGFydF90cmFuc2FjdGlvbihoYW5kbGUsIDEsIGJoKSkpCi0JCQlnb3RvIGV4aXRfYmg7CisJCWVyciA9IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZSwgMSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfam91cm5hbDsKIAogCQlnZGIgPSBzYl9nZXRibGsoc2IsIGJsb2NrKTsKIAkJaWYgKCFnZGIpIHsKIAkJCWVyciA9IC1FSU87Ci0JCQlnb3RvIGV4aXRfYmg7CisJCQlnb3RvIGV4aXRfam91cm5hbDsKIAkJfQogCQlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZ2RiKSkpIHsKIAkJCWJyZWxzZShnZGIpOwotCQkJZ290byBleGl0X2JoOworCQkJZ290byBleGl0X2pvdXJuYWw7CiAJCX0KLQkJbG9ja19idWZmZXIoZ2RiKTsKIAkJbWVtY3B5KGdkYi0+Yl9kYXRhLCBzYmktPnNfZ3JvdXBfZGVzY1tpXS0+Yl9kYXRhLCBnZGItPmJfc2l6ZSk7CiAJCXNldF9idWZmZXJfdXB0b2RhdGUoZ2RiKTsKLQkJdW5sb2NrX2J1ZmZlcihnZGIpOwogCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGdkYik7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQlicmVsc2UoZ2RiKTsKLQkJCWdvdG8gZXhpdF9iaDsKKwkJCWdvdG8gZXhpdF9qb3VybmFsOwogCQl9Ci0JCWV4dDRfc2V0X2JpdChiaXQsIGJoLT5iX2RhdGEpOwogCQlicmVsc2UoZ2RiKTsKIAl9CiAKQEAgLTIzNSw5ICsyNDMsMjIgQEAKIAllcnIgPSBzYl9pc3N1ZV96ZXJvb3V0KHNiLCBnZGJsb2NrcyArIHN0YXJ0ICsgMSwgcmVzZXJ2ZWRfZ2RiLAogCQkJICAgICAgIEdGUF9OT0ZTKTsKIAlpZiAoZXJyKQotCQlnb3RvIGV4aXRfYmg7Ci0JZm9yIChpID0gMCwgYml0ID0gZ2RibG9ja3MgKyAxOyBpIDwgcmVzZXJ2ZWRfZ2RiOyBpKyssIGJpdCsrKQotCQlleHQ0X3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKKwkJZ290byBleGl0X2pvdXJuYWw7CisKKwllcnIgPSBleHRlbmRfb3JfcmVzdGFydF90cmFuc2FjdGlvbihoYW5kbGUsIDIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9qb3VybmFsOworCisJYmggPSBiY2xlYW4oaGFuZGxlLCBzYiwgaW5wdXQtPmJsb2NrX2JpdG1hcCk7CisJaWYgKElTX0VSUihiaCkpIHsKKwkJZXJyID0gUFRSX0VSUihiaCk7CisJCWdvdG8gZXhpdF9qb3VybmFsOworCX0KKworCWlmIChleHQ0X2JnX2hhc19zdXBlcihzYiwgaW5wdXQtPmdyb3VwKSkgeworCQlleHQ0X2RlYnVnKCJtYXJrIGJhY2t1cCBncm91cCB0YWJsZXMgJSMwNGxseCAoKzApXG4iLCBzdGFydCk7CisJCWV4dDRfc2V0X2JpdHMoYmgtPmJfZGF0YSwgMCwgZ2RibG9ja3MgKyByZXNlcnZlZF9nZGIgKyAxKTsKKwl9CiAKIAlleHQ0X2RlYnVnKCJtYXJrIGJsb2NrIGJpdG1hcCAlIzA0bGx4ICgrJWxsdSlcbiIsIGlucHV0LT5ibG9ja19iaXRtYXAsCiAJCSAgIGlucHV0LT5ibG9ja19iaXRtYXAgLSBzdGFydCk7CkBAIC0yNTMsMTIgKzI3NCw5IEBACiAJZXJyID0gc2JfaXNzdWVfemVyb291dChzYiwgYmxvY2ssIHNiaS0+c19pdGJfcGVyX2dyb3VwLCBHRlBfTk9GUyk7CiAJaWYgKGVycikKIAkJZ290byBleGl0X2JoOwotCWZvciAoaSA9IDAsIGJpdCA9IGlucHV0LT5pbm9kZV90YWJsZSAtIHN0YXJ0OwotCSAgICAgaSA8IHNiaS0+c19pdGJfcGVyX2dyb3VwOyBpKyssIGJpdCsrKQotCQlleHQ0X3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKKwlleHQ0X3NldF9iaXRzKGJoLT5iX2RhdGEsIGlucHV0LT5pbm9kZV90YWJsZSAtIHN0YXJ0LAorCQkgICAgICBzYmktPnNfaXRiX3Blcl9ncm91cCk7CiAKLQlpZiAoKGVyciA9IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZSwgMiwgYmgpKSkKLQkJZ290byBleGl0X2JoOwogCiAJZXh0NF9tYXJrX2JpdG1hcF9lbmQoaW5wdXQtPmJsb2Nrc19jb3VudCwgc2ItPnNfYmxvY2tzaXplICogOCwKIAkJCSAgICAgYmgtPmJfZGF0YSk7CkBAIC0yODUsNyArMzAzLDYgQEAKIAlicmVsc2UoYmgpOwogCiBleGl0X2pvdXJuYWw6Ci0JbXV0ZXhfdW5sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwogCWlmICgoZXJyMiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSkpICYmICFlcnIpCiAJCWVyciA9IGVycjI7CiAKQEAgLTM3NywxNSArMzk0LDE1IEBACiAgKiBmYWlsIG9uY2Ugd2Ugc3RhcnQgbW9kaWZ5aW5nIHRoZSBkYXRhIG9uIGRpc2ssIGJlY2F1c2UgSkJEIGhhcyBubyByb2xsYmFjay4KICAqLwogc3RhdGljIGludCBhZGRfbmV3X2dkYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICAgICAgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2RhdGEgKmlucHV0LAotCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcHJpbWFyeSkKKwkJICAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihzYiktPnNfZXM7Ci0JdW5zaWduZWQgbG9uZyBnZGJfbnVtID0gaW5wdXQtPmdyb3VwIC8gRVhUNF9ERVNDX1BFUl9CTE9DSyhzYik7CisJdW5zaWduZWQgbG9uZyBnZGJfbnVtID0gZ3JvdXAgLyBFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKTsKIAlleHQ0X2ZzYmxrX3QgZ2RibG9jayA9IEVYVDRfU0Ioc2IpLT5zX3NiaC0+Yl9ibG9ja25yICsgMSArIGdkYl9udW07CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICoqb19ncm91cF9kZXNjLCAqKm5fZ3JvdXBfZGVzYzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpbmQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpnZGJfYmg7CiAJaW50IGdkYmFja3VwczsKIAlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiAJX19sZTMyICpkYXRhOwpAQCAtNDA4LDExICs0MjUsMTIgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQkqcHJpbWFyeSA9IHNiX2JyZWFkKHNiLCBnZGJsb2NrKTsKLQlpZiAoISpwcmltYXJ5KQorCWdkYl9iaCA9IHNiX2JyZWFkKHNiLCBnZGJsb2NrKTsKKwlpZiAoIWdkYl9iaCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoKGdkYmFja3VwcyA9IHZlcmlmeV9yZXNlcnZlZF9nZGIoc2IsICpwcmltYXJ5KSkgPCAwKSB7CisJZ2RiYWNrdXBzID0gdmVyaWZ5X3Jlc2VydmVkX2dkYihzYiwgZ2RiX2JoKTsKKwlpZiAoZ2RiYWNrdXBzIDwgMCkgewogCQllcnIgPSBnZGJhY2t1cHM7CiAJCWdvdG8gZXhpdF9iaDsKIAl9CkBAIC00MjcsNyArNDQ1LDcgQEAKIAlkYXRhID0gKF9fbGUzMiAqKWRpbmQtPmJfZGF0YTsKIAlpZiAobGUzMl90b19jcHUoZGF0YVtnZGJfbnVtICUgRVhUNF9BRERSX1BFUl9CTE9DSyhzYildKSAhPSBnZGJsb2NrKSB7CiAJCWV4dDRfd2FybmluZyhzYiwgIm5ldyBncm91cCAldSBHRFQgYmxvY2sgJWxsdSBub3QgcmVzZXJ2ZWQiLAotCQkJICAgICBpbnB1dC0+Z3JvdXAsIGdkYmxvY2spOworCQkJICAgICBncm91cCwgZ2RibG9jayk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdF9kaW5kOwogCX0KQEAgLTQzNiw3ICs0NTQsNyBAQAogCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGV4aXRfZGluZDsKIAotCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgKnByaW1hcnkpOworCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZ2RiX2JoKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJZ290byBleGl0X3NiaDsKIApAQCAtNDQ5LDEyICs0NjcsMTMgQEAKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJZ290byBleGl0X2RpbmRqOwogCi0Jbl9ncm91cF9kZXNjID0ga21hbGxvYygoZ2RiX251bSArIDEpICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKLQkJCUdGUF9OT0ZTKTsKKwluX2dyb3VwX2Rlc2MgPSBleHQ0X2t2bWFsbG9jKChnZGJfbnVtICsgMSkgKgorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKKwkJCQkgICAgIEdGUF9OT0ZTKTsKIAlpZiAoIW5fZ3JvdXBfZGVzYykgewogCQllcnIgPSAtRU5PTUVNOwotCQlleHQ0X3dhcm5pbmcoc2IsCi0JCQkgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yICVsdSBncm91cHMiLCBnZGJfbnVtICsgMSk7CisJCWV4dDRfd2FybmluZyhzYiwgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciAlbHUgZ3JvdXBzIiwKKwkJCSAgICAgZ2RiX251bSArIDEpOwogCQlnb3RvIGV4aXRfaW5vZGU7CiAJfQogCkBAIC00NzUsOCArNDk0LDggQEAKIAl9CiAJaW5vZGUtPmlfYmxvY2tzIC09IChnZGJhY2t1cHMgKyAxKSAqIHNiLT5zX2Jsb2Nrc2l6ZSA+PiA5OwogCWV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZpbG9jKTsKLQltZW1zZXQoKCpwcmltYXJ5KS0+Yl9kYXRhLCAwLCBzYi0+c19ibG9ja3NpemUpOwotCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgKnByaW1hcnkpOworCW1lbXNldChnZGJfYmgtPmJfZGF0YSwgMCwgc2ItPnNfYmxvY2tzaXplKTsKKwllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGdkYl9iaCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CiAJCWdvdG8gZXhpdF9pbm9kZTsKQEAgLTQ4NiwxMCArNTA1LDEwIEBACiAJb19ncm91cF9kZXNjID0gRVhUNF9TQihzYiktPnNfZ3JvdXBfZGVzYzsKIAltZW1jcHkobl9ncm91cF9kZXNjLCBvX2dyb3VwX2Rlc2MsCiAJICAgICAgIEVYVDRfU0Ioc2IpLT5zX2dkYl9jb3VudCAqIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKikpOwotCW5fZ3JvdXBfZGVzY1tnZGJfbnVtXSA9ICpwcmltYXJ5OworCW5fZ3JvdXBfZGVzY1tnZGJfbnVtXSA9IGdkYl9iaDsKIAlFWFQ0X1NCKHNiKS0+c19ncm91cF9kZXNjID0gbl9ncm91cF9kZXNjOwogCUVYVDRfU0Ioc2IpLT5zX2dkYl9jb3VudCsrOwotCWtmcmVlKG9fZ3JvdXBfZGVzYyk7CisJZXh0NF9rdmZyZWUob19ncm91cF9kZXNjKTsKIAogCWxlMTZfYWRkX2NwdSgmZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcywgLTEpOwogCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgRVhUNF9TQihzYiktPnNfc2JoKTsKQEAgLTQ5OSw2ICs1MTgsNyBAQAogCXJldHVybiBlcnI7CiAKIGV4aXRfaW5vZGU6CisJZXh0NF9rdmZyZWUobl9ncm91cF9kZXNjKTsKIAkvKiBleHQ0X2hhbmRsZV9yZWxlYXNlX2J1ZmZlcihoYW5kbGUsIGlsb2MuYmgpOyAqLwogCWJyZWxzZShpbG9jLmJoKTsKIGV4aXRfZGluZGo6CkBAIC01MDgsNyArNTI4LDcgQEAKIGV4aXRfZGluZDoKIAlicmVsc2UoZGluZCk7CiBleGl0X2JoOgotCWJyZWxzZSgqcHJpbWFyeSk7CisJYnJlbHNlKGdkYl9iaCk7CiAKIAlleHQ0X2RlYnVnKCJsZWF2aW5nIHdpdGggZXJyb3IgJWRcbiIsIGVycik7CiAJcmV0dXJuIGVycjsKQEAgLTUyOCw3ICs1NDgsNyBAQAogICogYmFja3VwIEdEVCBibG9ja3MgYXJlIHN0b3JlZCBpbiB0aGVpciByZXNlcnZlZCBwcmltYXJ5IEdEVCBibG9jay4KICAqLwogc3RhdGljIGludCByZXNlcnZlX2JhY2t1cF9nZGIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIHN0cnVjdCBleHQ0X25ld19ncm91cF9kYXRhICppbnB1dCkKKwkJCSAgICAgIGV4dDRfZ3JvdXBfdCBncm91cCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJaW50IHJlc2VydmVkX2dkYiA9bGUxNl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2Nrcyk7CkBAIC01OTksNyArNjE5LDcgQEAKIAkgKiBGaW5hbGx5IHdlIGNhbiBhZGQgZWFjaCBvZiB0aGUgcmVzZXJ2ZWQgYmFja3VwIEdEVCBibG9ja3MgZnJvbQogCSAqIHRoZSBuZXcgZ3JvdXAgdG8gaXRzIHJlc2VydmVkIHByaW1hcnkgR0RUIGJsb2NrLgogCSAqLwotCWJsayA9IGlucHV0LT5ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYik7CisJYmxrID0gZ3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpOwogCWZvciAoaSA9IDA7IGkgPCByZXNlcnZlZF9nZGI7IGkrKykgewogCQlpbnQgZXJyMjsKIAkJZGF0YSA9IChfX2xlMzIgKilwcmltYXJ5W2ldLT5iX2RhdGE7CkBAIC03OTksMTMgKzgxOSw2IEBACiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKLQlpZiAoaW5wdXQtPmdyb3VwICE9IHNiaS0+c19ncm91cHNfY291bnQpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCAibXVsdGlwbGUgcmVzaXplcnMgcnVuIG9uIGZpbGVzeXN0ZW0hIik7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0X2pvdXJuYWw7Ci0JfQotCiAJaWYgKChlcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIHNiaS0+c19zYmgpKSkKIAkJZ290byBleGl0X2pvdXJuYWw7CiAKQEAgLTgyMCwxNiArODMzLDI1IEBACiAJCWlmICgoZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBwcmltYXJ5KSkpCiAJCQlnb3RvIGV4aXRfam91cm5hbDsKIAotCQlpZiAocmVzZXJ2ZWRfZ2RiICYmIGV4dDRfYmdfbnVtX2dkYihzYiwgaW5wdXQtPmdyb3VwKSAmJgotCQkgICAgKGVyciA9IHJlc2VydmVfYmFja3VwX2dkYihoYW5kbGUsIGlub2RlLCBpbnB1dCkpKQorCQlpZiAocmVzZXJ2ZWRfZ2RiICYmIGV4dDRfYmdfbnVtX2dkYihzYiwgaW5wdXQtPmdyb3VwKSkgeworCQkJZXJyID0gcmVzZXJ2ZV9iYWNrdXBfZ2RiKGhhbmRsZSwgaW5vZGUsIGlucHV0LT5ncm91cCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXhpdF9qb3VybmFsOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTm90ZSB0aGF0IHdlIGNhbiBhY2Nlc3MgbmV3IGdyb3VwIGRlc2NyaXB0b3IgYmxvY2sgc2FmZWx5CisJCSAqIG9ubHkgaWYgYWRkX25ld19nZGIoKSBzdWNjZWVkcy4KKwkJICovCisJCWVyciA9IGFkZF9uZXdfZ2RiKGhhbmRsZSwgaW5vZGUsIGlucHV0LT5ncm91cCk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGV4aXRfam91cm5hbDsKLQl9IGVsc2UgaWYgKChlcnIgPSBhZGRfbmV3X2dkYihoYW5kbGUsIGlub2RlLCBpbnB1dCwgJnByaW1hcnkpKSkKLQkJZ290byBleGl0X2pvdXJuYWw7CisJCXByaW1hcnkgPSBzYmktPnNfZ3JvdXBfZGVzY1tnZGJfbnVtXTsKKwl9CiAKICAgICAgICAgLyoKICAgICAgICAgICogT0ssIG5vdyB3ZSd2ZSBzZXQgdXAgdGhlIG5ldyBncm91cC4gIFRpbWUgdG8gbWFrZSBpdCBhY3RpdmUuCiAgICAgICAgICAqCi0gICAgICAgICAqIFdlIGRvIG5vdCBsb2NrIGFsbCBhbGxvY2F0aW9ucyB2aWEgc19yZXNpemVfbG9jawogICAgICAgICAgKiBzbyB3ZSBoYXZlIHRvIGJlIHNhZmUgd3J0LiBjb25jdXJyZW50IGFjY2Vzc2VzIHRoZSBncm91cAogICAgICAgICAgKiBkYXRhLiAgU28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIHRvIHNldCBhbGwgb2YgdGhlIHJlbGV2YW50CiAgICAgICAgICAqIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSBldGMuICpiZWZvcmUqIHdlIGVuYWJsZSB0aGUgZ3JvdXAuCkBAIC04ODYsMTMgKzkwOCw5IEBACiAJICoKIAkgKiBUaGUgcHJlY2lzZSBydWxlcyB3ZSB1c2UgYXJlOgogCSAqCi0JICogKiBXcml0ZXJzIG9mIHNfZ3JvdXBzX2NvdW50ICptdXN0KiBob2xkIHNfcmVzaXplX2xvY2sKLQkgKiBBTkQKIAkgKiAqIFdyaXRlcnMgbXVzdCBwZXJmb3JtIGEgc21wX3dtYigpIGFmdGVyIHVwZGF0aW5nIGFsbCBkZXBlbmRlbnQKIAkgKiAgIGRhdGEgYW5kIGJlZm9yZSBtb2RpZnlpbmcgdGhlIGdyb3VwcyBjb3VudAogCSAqCi0JICogKiBSZWFkZXJzIG11c3QgaG9sZCBzX3Jlc2l6ZV9sb2NrIG92ZXIgdGhlIGFjY2VzcwotCSAqIE9SCiAJICogKiBSZWFkZXJzIG11c3QgcGVyZm9ybSBhbiBzbXBfcm1iKCkgYWZ0ZXIgcmVhZGluZyB0aGUgZ3JvdXBzIGNvdW50CiAJICogICBhbmQgYmVmb3JlIHJlYWRpbmcgYW55IGRlcGVuZGVudCBkYXRhLgogCSAqCkBAIC05MzcsMTAgKzk1NSw5IEBACiAJZXh0NF9oYW5kbGVfZGlydHlfc3VwZXIoaGFuZGxlLCBzYik7CiAKIGV4aXRfam91cm5hbDoKLQltdXRleF91bmxvY2soJnNiaS0+c19yZXNpemVfbG9jayk7CiAJaWYgKChlcnIyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKSkgJiYgIWVycikKIAkJZXJyID0gZXJyMjsKLQlpZiAoIWVycikgeworCWlmICghZXJyICYmIHByaW1hcnkpIHsKIAkJdXBkYXRlX2JhY2t1cHMoc2IsIHNiaS0+c19zYmgtPmJfYmxvY2tuciwgKGNoYXIgKillcywKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV4dDRfc3VwZXJfYmxvY2spKTsKIAkJdXBkYXRlX2JhY2t1cHMoc2IsIHByaW1hcnktPmJfYmxvY2tuciwgcHJpbWFyeS0+Yl9kYXRhLApAQCAtOTY5LDE2ICs5ODYsMTMgQEAKIAlleHQ0X2dycGJsa190IGFkZDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWhhbmRsZV90ICpoYW5kbGU7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBlcnIyOwogCWV4dDRfZ3JvdXBfdCBncm91cDsKIAotCS8qIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyB3cnQgb3RoZXIgcmVzaXplcnMganVzdAotCSAqIHlldDogd2UncmUgZ29pbmcgdG8gcmV2YWxpZGF0ZSBlcy0+c19ibG9ja3NfY291bnQgYWZ0ZXIKLQkgKiB0YWtpbmcgdGhlIHNfcmVzaXplX2xvY2sgYmVsb3cuICovCiAJb19ibG9ja3NfY291bnQgPSBleHQ0X2Jsb2Nrc19jb3VudChlcyk7CiAKIAlpZiAodGVzdF9vcHQoc2IsIERFQlVHKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkVYVDQtZnM6IGV4dGVuZGluZyBsYXN0IGdyb3VwIGZyb20gJWxsdSB1dG8gJWxsdSBibG9ja3NcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICJFWFQ0LWZzOiBleHRlbmRpbmcgbGFzdCBncm91cCBmcm9tICVsbHUgdG8gJWxsdSBibG9ja3NcbiIsCiAJCSAgICAgICBvX2Jsb2Nrc19jb3VudCwgbl9ibG9ja3NfY291bnQpOwogCiAJaWYgKG5fYmxvY2tzX2NvdW50ID09IDAgfHwgbl9ibG9ja3NfY291bnQgPT0gb19ibG9ja3NfY291bnQpCkBAIC05OTUsNyArMTAwOSw3IEBACiAKIAlpZiAobl9ibG9ja3NfY291bnQgPCBvX2Jsb2Nrc19jb3VudCkgewogCQlleHQ0X3dhcm5pbmcoc2IsICJjYW4ndCBzaHJpbmsgRlMgLSByZXNpemUgYWJvcnRlZCIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBIYW5kbGUgdGhlIHJlbWFpbmluZyBibG9ja3MgaW4gdGhlIGxhc3QgZ3JvdXAgb25seS4gKi8KQEAgLTEwMzgsMzIgKzEwNTIsMjUgQEAKIAkJZ290byBleGl0X3B1dDsKIAl9CiAKLQltdXRleF9sb2NrKCZFWFQ0X1NCKHNiKS0+c19yZXNpemVfbG9jayk7Ci0JaWYgKG9fYmxvY2tzX2NvdW50ICE9IGV4dDRfYmxvY2tzX2NvdW50KGVzKSkgewotCQlleHQ0X3dhcm5pbmcoc2IsICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKLQkJbXV0ZXhfdW5sb2NrKCZFWFQ0X1NCKHNiKS0+c19yZXNpemVfbG9jayk7Ci0JCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBleGl0X3B1dDsKLQl9Ci0KIAlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKIAkJCQkJCSBFWFQ0X1NCKHNiKS0+c19zYmgpKSkgewogCQlleHQ0X3dhcm5pbmcoc2IsICJlcnJvciAlZCBvbiBqb3VybmFsIHdyaXRlIGFjY2VzcyIsIGVycik7Ci0JCW11dGV4X3VubG9jaygmRVhUNF9TQihzYiktPnNfcmVzaXplX2xvY2spOwogCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQlnb3RvIGV4aXRfcHV0OwogCX0KIAlleHQ0X2Jsb2Nrc19jb3VudF9zZXQoZXMsIG9fYmxvY2tzX2NvdW50ICsgYWRkKTsKLQltdXRleF91bmxvY2soJkVYVDRfU0Ioc2IpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlleHQ0X2RlYnVnKCJmcmVlaW5nIGJsb2NrcyAlbGx1IHRocm91Z2ggJWxsdVxuIiwgb19ibG9ja3NfY291bnQsCiAJCSAgIG9fYmxvY2tzX2NvdW50ICsgYWRkKTsKIAkvKiBXZSBhZGQgdGhlIGJsb2NrcyB0byB0aGUgYml0bWFwIGFuZCBzZXQgdGhlIGdyb3VwIG5lZWQgaW5pdCBiaXQgKi8KLQlleHQ0X2FkZF9ncm91cGJsb2NrcyhoYW5kbGUsIHNiLCBvX2Jsb2Nrc19jb3VudCwgYWRkKTsKKwllcnIgPSBleHQ0X2dyb3VwX2FkZF9ibG9ja3MoaGFuZGxlLCBzYiwgb19ibG9ja3NfY291bnQsIGFkZCk7CiAJZXh0NF9oYW5kbGVfZGlydHlfc3VwZXIoaGFuZGxlLCBzYik7CiAJZXh0NF9kZWJ1ZygiZnJlZWQgYmxvY2tzICVsbHUgdGhyb3VnaCAlbGx1XG4iLCBvX2Jsb2Nrc19jb3VudCwKIAkJICAgb19ibG9ja3NfY291bnQgKyBhZGQpOwotCWlmICgoZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKSkpCisJZXJyMiA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJaWYgKCFlcnIgJiYgZXJyMikKKwkJZXJyID0gZXJyMjsKKworCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9wdXQ7CiAKIAlpZiAodGVzdF9vcHQoc2IsIERFQlVHKSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA5ZWE3MWFhLi40NGQwYzhkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xMTAsNiArMTEwLDM1IEBACiAjZGVmaW5lIElTX0VYVDNfU0Ioc2IpICgwKQogI2VuZGlmCiAKK3ZvaWQgKmV4dDRfa3ZtYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQoreworCXZvaWQgKnJldDsKKworCXJldCA9IGttYWxsb2Moc2l6ZSwgZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgZmxhZ3MsIFBBR0VfS0VSTkVMKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICpleHQ0X2t2emFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3sKKwl2b2lkICpyZXQ7CisKKwlyZXQgPSBremFsbG9jKHNpemUsIGZsYWdzKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gX192bWFsbG9jKHNpemUsIGZsYWdzIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZXh0NF9rdmZyZWUodm9pZCAqcHRyKQoreworCWlmIChpc192bWFsbG9jX2FkZHIocHRyKSkKKwkJdmZyZWUocHRyKTsKKwllbHNlCisJCWtmcmVlKHB0cik7CisKK30KKwogZXh0NF9mc2Jsa190IGV4dDRfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqYmcpCiB7CkBAIC0yNjksNiArMjk4LDcgQEAKIAlqb3VybmFsX3QgKmpvdXJuYWw7CiAJaGFuZGxlX3QgICpoYW5kbGU7CiAKKwl0cmFjZV9leHQ0X2pvdXJuYWxfc3RhcnQoc2IsIG5ibG9ja3MsIF9SRVRfSVBfKTsKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiBFUlJfUFRSKC1FUk9GUyk7CiAKQEAgLTc4OSwxMSArODE5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfZ2RiX2NvdW50OyBpKyspCiAJCWJyZWxzZShzYmktPnNfZ3JvdXBfZGVzY1tpXSk7Ci0Ja2ZyZWUoc2JpLT5zX2dyb3VwX2Rlc2MpOwotCWlmIChpc192bWFsbG9jX2FkZHIoc2JpLT5zX2ZsZXhfZ3JvdXBzKSkKLQkJdmZyZWUoc2JpLT5zX2ZsZXhfZ3JvdXBzKTsKLQllbHNlCi0JCWtmcmVlKHNiaS0+c19mbGV4X2dyb3Vwcyk7CisJZXh0NF9rdmZyZWUoc2JpLT5zX2dyb3VwX2Rlc2MpOworCWV4dDRfa3ZmcmVlKHNiaS0+c19mbGV4X2dyb3Vwcyk7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcik7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlcik7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2RpcnNfY291bnRlcik7CkBAIC04OTIsNyArOTE5LDYgQEAKIAogc3RhdGljIHZvaWQgZXh0NF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JZXh0NF9pb2VuZF93YWl0KGlub2RlKTsKIAlpZiAoIWxpc3RfZW1wdHkoJihFWFQ0X0koaW5vZGUpLT5pX29ycGhhbikpKSB7CiAJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX0VSUiwKIAkJCSAiSW5vZGUgJWx1ICglcCk6IG9ycGhhbiBsaXN0IGNoZWNrIGZhaWxlZCEiLApAQCAtMTk3NiwxNSArMjAwMiwxMSBAQAogCQkJKChsZTE2X3RvX2NwdShzYmktPnNfZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykgKyAxKSA8PAogCQkJICAgICAgRVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKSkpIC8gZ3JvdXBzX3Blcl9mbGV4OwogCXNpemUgPSBmbGV4X2dyb3VwX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBmbGV4X2dyb3Vwcyk7Ci0Jc2JpLT5zX2ZsZXhfZ3JvdXBzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlzYmktPnNfZmxleF9ncm91cHMgPSBleHQ0X2t2emFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChzYmktPnNfZmxleF9ncm91cHMgPT0gTlVMTCkgewotCQlzYmktPnNfZmxleF9ncm91cHMgPSB2emFsbG9jKHNpemUpOwotCQlpZiAoc2JpLT5zX2ZsZXhfZ3JvdXBzID09IE5VTEwpIHsKLQkJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwKLQkJCQkgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciAldSBmbGV4IGdyb3VwcyIsCi0JCQkJIGZsZXhfZ3JvdXBfY291bnQpOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KKwkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAibm90IGVub3VnaCBtZW1vcnkgZm9yICV1IGZsZXggZ3JvdXBzIiwKKwkJCSBmbGV4X2dyb3VwX2NvdW50KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHNiaS0+c19ncm91cHNfY291bnQ7IGkrKykgewpAQCAtMjM4MywxNyArMjQwNSwyNSBAQAogCXVuc2lnbmVkIGxvbmcgc3RyaWRlID0gbGUxNl90b19jcHUoc2JpLT5zX2VzLT5zX3JhaWRfc3RyaWRlKTsKIAl1bnNpZ25lZCBsb25nIHN0cmlwZV93aWR0aCA9CiAJCQlsZTMyX3RvX2NwdShzYmktPnNfZXMtPnNfcmFpZF9zdHJpcGVfd2lkdGgpOworCWludCByZXQ7CiAKIAlpZiAoc2JpLT5zX3N0cmlwZSAmJiBzYmktPnNfc3RyaXBlIDw9IHNiaS0+c19ibG9ja3NfcGVyX2dyb3VwKQotCQlyZXR1cm4gc2JpLT5zX3N0cmlwZTsKKwkJcmV0ID0gc2JpLT5zX3N0cmlwZTsKKwllbHNlIGlmIChzdHJpcGVfd2lkdGggPD0gc2JpLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCisJCXJldCA9IHN0cmlwZV93aWR0aDsKKwllbHNlIGlmIChzdHJpZGUgPD0gc2JpLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCisJCXJldCA9IHN0cmlkZTsKKwllbHNlCisJCXJldCA9IDA7CiAKLQlpZiAoc3RyaXBlX3dpZHRoIDw9IHNiaS0+c19ibG9ja3NfcGVyX2dyb3VwKQotCQlyZXR1cm4gc3RyaXBlX3dpZHRoOworCS8qCisJICogSWYgdGhlIHN0cmlwZSB3aWR0aCBpcyAxLCB0aGlzIG1ha2VzIG5vIHNlbnNlIGFuZAorCSAqIHdlIHNldCBpdCB0byAwIHRvIHR1cm4gb2ZmIHN0cmlwZSBoYW5kbGluZyBjb2RlLgorCSAqLworCWlmIChyZXQgPD0gMSkKKwkJcmV0ID0gMDsKIAotCWlmIChzdHJpZGUgPD0gc2JpLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCi0JCXJldHVybiBzdHJpZGU7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBzeXNmcyBzdXBwcnQgKi8KQEAgLTM0MDgsOCArMzQzOCw5IEBACiAJCQkoRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTIC8gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSkpOwogCWRiX2NvdW50ID0gKHNiaS0+c19ncm91cHNfY291bnQgKyBFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpIC8KIAkJICAgRVhUNF9ERVNDX1BFUl9CTE9DSyhzYik7Ci0Jc2JpLT5zX2dyb3VwX2Rlc2MgPSBrbWFsbG9jKGRiX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJc2JpLT5zX2dyb3VwX2Rlc2MgPSBleHQ0X2t2bWFsbG9jKGRiX2NvdW50ICoKKwkJCQkJICBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLAorCQkJCQkgIEdGUF9LRVJORUwpOwogCWlmIChzYmktPnNfZ3JvdXBfZGVzYyA9PSBOVUxMKSB7CiAJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgIm5vdCBlbm91Z2ggbWVtb3J5Iik7CiAJCWdvdG8gZmFpbGVkX21vdW50OwpAQCAtMzQ5MSw3ICszNTIyLDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfb3JwaGFuKTsgLyogdW5saW5rZWQgYnV0IG9wZW4gZmlsZXMgKi8KIAltdXRleF9pbml0KCZzYmktPnNfb3JwaGFuX2xvY2spOwotCW11dGV4X2luaXQoJnNiaS0+c19yZXNpemVfbG9jayk7CisJc2JpLT5zX3Jlc2l6ZV9mbGFncyA9IDA7CiAKIAlzYi0+c19yb290ID0gTlVMTDsKIApAQCAtMzc0MSwxMiArMzc3Miw4IEBACiAJfQogZmFpbGVkX21vdW50MzoKIAlkZWxfdGltZXIoJnNiaS0+c19lcnJfcmVwb3J0KTsKLQlpZiAoc2JpLT5zX2ZsZXhfZ3JvdXBzKSB7Ci0JCWlmIChpc192bWFsbG9jX2FkZHIoc2JpLT5zX2ZsZXhfZ3JvdXBzKSkKLQkJCXZmcmVlKHNiaS0+c19mbGV4X2dyb3Vwcyk7Ci0JCWVsc2UKLQkJCWtmcmVlKHNiaS0+c19mbGV4X2dyb3Vwcyk7Ci0JfQorCWlmIChzYmktPnNfZmxleF9ncm91cHMpCisJCWV4dDRfa3ZmcmVlKHNiaS0+c19mbGV4X2dyb3Vwcyk7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcik7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlcik7CiAJcGVyY3B1X2NvdW50ZXJfZGVzdHJveSgmc2JpLT5zX2RpcnNfY291bnRlcik7CkBAIC0zNzU2LDcgKzM3ODMsNyBAQAogZmFpbGVkX21vdW50MjoKIAlmb3IgKGkgPSAwOyBpIDwgZGJfY291bnQ7IGkrKykKIAkJYnJlbHNlKHNiaS0+c19ncm91cF9kZXNjW2ldKTsKLQlrZnJlZShzYmktPnNfZ3JvdXBfZGVzYyk7CisJZXh0NF9rdmZyZWUoc2JpLT5zX2dyb3VwX2Rlc2MpOwogZmFpbGVkX21vdW50OgogCWlmIChzYmktPnNfcHJvYykgewogCQlyZW1vdmVfcHJvY19lbnRyeShzYi0+c19pZCwgZXh0NF9wcm9jX3Jvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC90cnVuY2F0ZS5oIGIvZnMvZXh0NC90cnVuY2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWJhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQ0L3RydW5jYXRlLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGxpbnV4L2ZzL2V4dDQvdHJ1bmNhdGUuaAorICoKKyAqIENvbW1vbiBpbmxpbmUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJ1bmNhdGUgc3VwcG9ydAorICovCisKKy8qCisgKiBUcnVuY2F0ZSBibG9ja3MgdGhhdCB3ZXJlIG5vdCB1c2VkIGJ5IHdyaXRlLiBXZSBoYXZlIHRvIHRydW5jYXRlIHRoZQorICogcGFnZWNhY2hlIGFzIHdlbGwgc28gdGhhdCBjb3JyZXNwb25kaW5nIGJ1ZmZlcnMgZ2V0IHByb3Blcmx5IHVubWFwcGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF90cnVuY2F0ZV9mYWlsZWRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwlleHQ0X3RydW5jYXRlKGlub2RlKTsKK30KKworLyoKKyAqIFdvcmsgb3V0IGhvdyBtYW55IGJsb2NrcyB3ZSBuZWVkIHRvIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBjaHVuayBvZiBhCisgKiB0cnVuY2F0ZSB0cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGV4dDRfYmxvY2tzX2Zvcl90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWV4dDRfbGJsa190IG5lZWRlZDsKKworCW5lZWRlZCA9IGlub2RlLT5pX2Jsb2NrcyA+PiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMgLSA5KTsKKworCS8qIEdpdmUgb3Vyc2VsdmVzIGp1c3QgZW5vdWdoIHJvb20gdG8gY29wZSB3aXRoIGlub2RlcyBpbiB3aGljaAorCSAqIGlfYmxvY2tzIGlzIGNvcnJ1cHQ6IHdlJ3ZlIHNlZW4gZGlzayBjb3JydXB0aW9ucyBpbiB0aGUgcGFzdAorCSAqIHdoaWNoIHJlc3VsdGVkIGluIHJhbmRvbSBkYXRhIGluIGFuIGlub2RlIHdoaWNoIGxvb2tlZCBlbm91Z2gKKwkgKiBsaWtlIGEgcmVndWxhciBmaWxlIGZvciBleHQ0IHRvIHRyeSB0byBkZWxldGUgaXQuICBUaGluZ3MKKwkgKiB3aWxsIGdvIGEgYml0IGNyYXp5IGlmIHRoYXQgaGFwcGVucywgYnV0IGF0IGxlYXN0IHdlIHNob3VsZAorCSAqIHRyeSBub3QgdG8gcGFuaWMgdGhlIHdob2xlIGtlcm5lbC4gKi8KKwlpZiAobmVlZGVkIDwgMikKKwkJbmVlZGVkID0gMjsKKworCS8qIEJ1dCB3ZSBuZWVkIHRvIGJvdW5kIHRoZSB0cmFuc2FjdGlvbiBzbyB3ZSBkb24ndCBvdmVyZmxvdyB0aGUKKwkgKiBqb3VybmFsLiAqLworCWlmIChuZWVkZWQgPiBFWFQ0X01BWF9UUkFOU19EQVRBKQorCQluZWVkZWQgPSBFWFQ0X01BWF9UUkFOU19EQVRBOworCisJcmV0dXJuIEVYVDRfREFUQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpICsgbmVlZGVkOworfQorCmRpZmYgLS1naXQgYS9mcy9mYXQvZGlyLmMgYi9mcy9mYXQvZGlyLmMKaW5kZXggNGFkNjQ3My4uNWVmYmQ1ZCAxMDA2NDQKLS0tIGEvZnMvZmF0L2Rpci5jCisrKyBiL2ZzL2ZhdC9kaXIuYwpAQCAtMTIzMSw3ICsxMjMxLDcgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwogCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKnByZXYsICpiaHNbM107IC8qIDMyKnNsb3RzICg2NzJieXRlcykgKi8KLQlzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICp1bmluaXRpYWxpemVkX3ZhcihkZSk7CiAJaW50IGVyciwgZnJlZV9zbG90cywgaSwgbnJfYmhzOwogCWxvZmZfdCBwb3MsIGlfcG9zOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDU5NDJmZWMuLjE3MjZkNzMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC0xMTg4LDkgKzExODgsOSBAQAogb3V0OgogCS8qIFVURi04IGRvZXNuJ3QgcHJvdmlkZSBGQVQgc2VtYW50aWNzICovCiAJaWYgKCFzdHJjbXAob3B0cy0+aW9jaGFyc2V0LCAidXRmOCIpKSB7Ci0JCWZhdF9tc2coc2IsIEtFUk5fRVJSLCAidXRmOCBpcyBub3QgYSByZWNvbW1lbmRlZCBJTyBjaGFyc2V0IgorCQlmYXRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsICJ1dGY4IGlzIG5vdCBhIHJlY29tbWVuZGVkIElPIGNoYXJzZXQiCiAJCSAgICAgICAiIGZvciBGQVQgZmlsZXN5c3RlbXMsIGZpbGVzeXN0ZW0gd2lsbCBiZSAiCi0JCSAgICAgICAiY2FzZSBzZW5zaXRpdmUhXG4iKTsKKwkJICAgICAgICJjYXNlIHNlbnNpdGl2ZSEiKTsKIAl9CiAKIAkvKiBJZiB1c2VyIGRvZXNuJ3Qgc3BlY2lmeSBhbGxvd191dGltZSwgaXQncyBpbml0aWFsaXplZCBmcm9tIGRtYXNrLiAqLwpAQCAtMTM2Nyw2ICsxMzY3LDcgQEAKIAlzYmktPmZyZWVfY2x1c3RlcnMgPSAtMTsJLyogRG9uJ3Qga25vdyB5ZXQgKi8KIAlzYmktPmZyZWVfY2x1c192YWxpZCA9IDA7CiAJc2JpLT5wcmV2X2ZyZWUgPSBGQVRfU1RBUlRfRU5UOworCXNiLT5zX21heGJ5dGVzID0gMHhmZmZmZmZmZjsKIAogCWlmICghc2JpLT5mYXRfbGVuZ3RoICYmIGItPmZhdDMyX2xlbmd0aCkgewogCQlzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvICpmc2luZm87CkBAIC0xMzc3LDggKzEzNzgsNiBAQAogCQlzYmktPmZhdF9sZW5ndGggPSBsZTMyX3RvX2NwdShiLT5mYXQzMl9sZW5ndGgpOwogCQlzYmktPnJvb3RfY2x1c3RlciA9IGxlMzJfdG9fY3B1KGItPnJvb3RfY2x1c3Rlcik7CiAKLQkJc2ItPnNfbWF4Ynl0ZXMgPSAweGZmZmZmZmZmOwotCiAJCS8qIE1DIC0gaWYgaW5mb19zZWN0b3IgaXMgMCwgZG9uJ3QgbXVsdGlwbHkgYnkgMCAqLwogCQlzYmktPmZzaW5mb19zZWN0b3IgPSBsZTE2X3RvX2NwdShiLT5pbmZvX3NlY3Rvcik7CiAJCWlmIChzYmktPmZzaW5mb19zZWN0b3IgPT0gMCkKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggMTU5OWFhOS4uMDRjZjNiOSAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTYxOCw3ICs2MTgsMTIgQEAKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCiAJCWlmICghZ3JhYl9zdXBlcl9wYXNzaXZlKHNiKSkgewotCQkJcmVxdWV1ZV9pbyhpbm9kZSwgd2IpOworCQkJLyoKKwkJCSAqIGdyYWJfc3VwZXJfcGFzc2l2ZSgpIG1heSBmYWlsIGNvbnNpc3RlbnRseSBkdWUgdG8KKwkJCSAqIHNfdW1vdW50IGJlaW5nIGdyYWJiZWQgYnkgc29tZW9uZSBlbHNlLiBEb24ndCB1c2UKKwkJCSAqIHJlcXVldWVfaW8oKSB0byBhdm9pZCBidXN5IHJldHJ5aW5nIHRoZSBpbm9kZS9zYi4KKwkJCSAqLworCQkJcmVkaXJ0eV90YWlsKGlub2RlLCB3Yik7CiAJCQljb250aW51ZTsKIAkJfQogCQl3cm90ZSArPSB3cml0ZWJhY2tfc2JfaW5vZGVzKHNiLCB3Yiwgd29yayk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCA2NDBmYzIyLi41Y2I4NjE0IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTI1OCwxMCArMjU4LDE0IEBACiAJZm9yZ2V0LT5mb3JnZXRfb25lLm5sb29rdXAgPSBubG9va3VwOwogCiAJc3Bpbl9sb2NrKCZmYy0+bG9jayk7Ci0JZmMtPmZvcmdldF9saXN0X3RhaWwtPm5leHQgPSBmb3JnZXQ7Ci0JZmMtPmZvcmdldF9saXN0X3RhaWwgPSBmb3JnZXQ7Ci0Jd2FrZV91cCgmZmMtPndhaXRxKTsKLQlraWxsX2Zhc3luYygmZmMtPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOworCWlmIChmYy0+Y29ubmVjdGVkKSB7CisJCWZjLT5mb3JnZXRfbGlzdF90YWlsLT5uZXh0ID0gZm9yZ2V0OworCQlmYy0+Zm9yZ2V0X2xpc3RfdGFpbCA9IGZvcmdldDsKKwkJd2FrZV91cCgmZmMtPndhaXRxKTsKKwkJa2lsbF9mYXN5bmMoJmZjLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKKwl9IGVsc2UgeworCQlrZnJlZShmb3JnZXQpOworCX0KIAlzcGluX3VubG9jaygmZmMtPmxvY2spOwogfQogCkBAIC0xMzU4LDYgKzEzNjIsMTAgQEAKIAlpZiAob3V0YXJnLm5hbWVsZW4gPiBGVVNFX05BTUVfTUFYKQogCQlnb3RvIGVycjsKIAorCWVyciA9IC1FSU5WQUw7CisJaWYgKHNpemUgIT0gc2l6ZW9mKG91dGFyZykgKyBvdXRhcmcubmFtZWxlbiArIDEpCisJCWdvdG8gZXJyOworCiAJbmFtZS5uYW1lID0gYnVmOwogCW5hbWUubGVuID0gb3V0YXJnLm5hbWVsZW47CiAJZXJyID0gZnVzZV9jb3B5X29uZShjcywgYnVmLCBvdXRhcmcubmFtZWxlbiArIDEpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBkNDgwZDlhLi41OTRmMDdhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2RpcmVjdF9pb19maWxlX29wZXJhdGlvbnM7CiAKQEAgLTI0NSw2ICsyNDYsMTIgQEAKIAlyZXEgPSBmZi0+cmVzZXJ2ZWRfcmVxOwogCWZ1c2VfcHJlcGFyZV9yZWxlYXNlKGZmLCBmaWxlLT5mX2ZsYWdzLCBvcGNvZGUpOwogCisJaWYgKGZmLT5mbG9jaykgeworCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luICppbmFyZyA9ICZyZXEtPm1pc2MucmVsZWFzZS5pbjsKKwkJaW5hcmctPnJlbGVhc2VfZmxhZ3MgfD0gRlVTRV9SRUxFQVNFX0ZMT0NLX1VOTE9DSzsKKwkJaW5hcmctPmxvY2tfb3duZXIgPSBmdXNlX2xvY2tfb3duZXJfaWQoZmYtPmZjLAorCQkJCQkJICAgICAgIChmbF9vd25lcl90KSBmaWxlKTsKKwl9CiAJLyogSG9sZCB2ZnNtb3VudCBhbmQgZGVudHJ5IHVudGlsIHJlbGVhc2UgaXMgZmluaXNoZWQgKi8KIAlwYXRoX2dldCgmZmlsZS0+Zl9wYXRoKTsKIAlyZXEtPm1pc2MucmVsZWFzZS5wYXRoID0gZmlsZS0+Zl9wYXRoOwpAQCAtNzU1LDE4ICs3NjIsNiBAQAogCXJldHVybiByZXEtPm1pc2Mud3JpdGUub3V0LnNpemU7CiB9CiAKLXN0YXRpYyBpbnQgZnVzZV93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAotCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKLXsKLQlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0KLQkqcGFnZXAgPSBncmFiX2NhY2hlX3BhZ2Vfd3JpdGVfYmVnaW4obWFwcGluZywgaW5kZXgsIGZsYWdzKTsKLQlpZiAoISpwYWdlcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgZnVzZV93cml0ZV91cGRhdGVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CkBAIC03NzksNjIgKzc3NCw2IEBACiAJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBmdXNlX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGNvdW50LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpbnQgZXJyOwotCXNpemVfdCBucmVzOwotCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0JdW5zaWduZWQgb2Zmc2V0ID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwotCi0JaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCXJldHVybiAtRUlPOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd3JpdGVwYWdlcyBvbiB0aGUgc2FtZSBwYWdlIGFyZSBub3QgbWl4ZWQgdXAgd2l0aAotCSAqIHBsYWluIHdyaXRlcy4KLQkgKi8KLQlmdXNlX3dhaXRfb25fcGFnZV93cml0ZWJhY2soaW5vZGUsIHBhZ2UtPmluZGV4KTsKLQotCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7Ci0JaWYgKElTX0VSUihyZXEpKQotCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCi0JcmVxLT5pbi5hcmdwYWdlcyA9IDE7Ci0JcmVxLT5udW1fcGFnZXMgPSAxOwotCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwotCXJlcS0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7Ci0JbnJlcyA9IGZ1c2Vfc2VuZF93cml0ZShyZXEsIGZpbGUsIHBvcywgY291bnQsIE5VTEwpOwotCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7Ci0JZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKLQlpZiAoIWVyciAmJiAhbnJlcykKLQkJZXJyID0gLUVJTzsKLQlpZiAoIWVycikgewotCQlwb3MgKz0gbnJlczsKLQkJZnVzZV93cml0ZV91cGRhdGVfc2l6ZShpbm9kZSwgcG9zKTsKLQkJaWYgKGNvdW50ID09IFBBR0VfQ0FDSEVfU0laRSkKLQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQl9Ci0JZnVzZV9pbnZhbGlkYXRlX2F0dHIoaW5vZGUpOwotCXJldHVybiBlcnIgPyBlcnIgOiBucmVzOwotfQotCi1zdGF0aWMgaW50IGZ1c2Vfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQlpbnQgcmVzID0gMDsKLQotCWlmIChjb3BpZWQpCi0JCXJlcyA9IGZ1c2VfYnVmZmVyZWRfd3JpdGUoZmlsZSwgaW5vZGUsIHBvcywgY29waWVkLCBwYWdlKTsKLQotCXVubG9ja19wYWdlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgc2l6ZV90IGZ1c2Vfc2VuZF93cml0ZV9wYWdlcyhzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsCiAJCQkJICAgIHNpemVfdCBjb3VudCkKQEAgLTkwOCw2ICs4NDcsOCBAQAogCQlwYWdlZmF1bHRfZW5hYmxlKCk7CiAJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCisJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwogCQlpZiAoIXRtcCkgewogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CkBAIC0xNTU5LDExICsxNTAwLDE0IEBACiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlpbnQgZXJyOwogCi0JaWYgKGZjLT5ub19sb2NrKSB7CisJaWYgKGZjLT5ub19mbG9jaykgewogCQllcnIgPSBmbG9ja19sb2NrX2ZpbGVfd2FpdChmaWxlLCBmbCk7CiAJfSBlbHNlIHsKKwkJc3RydWN0IGZ1c2VfZmlsZSAqZmYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKIAkJLyogZW11bGF0ZSBmbG9jayB3aXRoIFBPU0lYIGxvY2tzICovCiAJCWZsLT5mbF9vd25lciA9IChmbF9vd25lcl90KSBmaWxlOworCQlmZi0+ZmxvY2sgPSB0cnVlOwogCQllcnIgPSBmdXNlX3NldGxrKGZpbGUsIGZsLCAxKTsKIAl9CiAKQEAgLTIyMDEsOCArMjE0NSw2IEBACiAJLnJlYWRwYWdlCT0gZnVzZV9yZWFkcGFnZSwKIAkud3JpdGVwYWdlCT0gZnVzZV93cml0ZXBhZ2UsCiAJLmxhdW5kZXJfcGFnZQk9IGZ1c2VfbGF1bmRlcl9wYWdlLAotCS53cml0ZV9iZWdpbgk9IGZ1c2Vfd3JpdGVfYmVnaW4sCi0JLndyaXRlX2VuZAk9IGZ1c2Vfd3JpdGVfZW5kLAogCS5yZWFkcGFnZXMJPSBmdXNlX3JlYWRwYWdlcywKIAkuc2V0X3BhZ2VfZGlydHkJPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKIAkuYm1hcAkJPSBmdXNlX2JtYXAsCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCBjNmFhMmQ0Li5jZjZkYjBhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTEzNSw2ICsxMzUsOSBAQAogCiAJLyoqIFdhaXQgcXVldWUgaGVhZCBmb3IgcG9sbCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHBvbGxfd2FpdDsKKworCS8qKiBIYXMgZmxvY2sgYmVlbiBwZXJmb3JtZWQgb24gdGhpcyBmaWxlPyAqLworCWJvb2wgZmxvY2s6MTsKIH07CiAKIC8qKiBPbmUgaW5wdXQgYXJndW1lbnQgb2YgYSByZXF1ZXN0ICovCkBAIC00NDgsNyArNDUxLDcgQEAKIAkvKiogSXMgcmVtb3ZleGF0dHIgbm90IGltcGxlbWVudGVkIGJ5IGZzPyAqLwogCXVuc2lnbmVkIG5vX3JlbW92ZXhhdHRyOjE7CiAKLQkvKiogQXJlIGZpbGUgbG9ja2luZyBwcmltaXRpdmVzIG5vdCBpbXBsZW1lbnRlZCBieSBmcz8gKi8KKwkvKiogQXJlIHBvc2l4IGZpbGUgbG9ja2luZyBwcmltaXRpdmVzIG5vdCBpbXBsZW1lbnRlZCBieSBmcz8gKi8KIAl1bnNpZ25lZCBub19sb2NrOjE7CiAKIAkvKiogSXMgYWNjZXNzIG5vdCBpbXBsZW1lbnRlZCBieSBmcz8gKi8KQEAgLTQ3Miw2ICs0NzUsOSBAQAogCS8qKiBEb24ndCBhcHBseSB1bWFzayB0byBjcmVhdGlvbiBtb2RlcyAqLwogCXVuc2lnbmVkIGRvbnRfbWFzazoxOwogCisJLyoqIEFyZSBCU0QgZmlsZSBsb2NraW5nIHByaW1pdGl2ZXMgbm90IGltcGxlbWVudGVkIGJ5IGZzPyAqLworCXVuc2lnbmVkIG5vX2Zsb2NrOjE7CisKIAkvKiogVGhlIG51bWJlciBvZiByZXF1ZXN0cyB3YWl0aW5nIGZvciBjb21wbGV0aW9uICovCiAJYXRvbWljX3QgbnVtX3dhaXRpbmc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCAzOGY4NGNkLi5hZGQ5NmY2IDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC03MSw3ICs3MSw3IEBACiAJdW5zaWduZWQgYmxrc2l6ZTsKIH07CiAKLXN0cnVjdCBmdXNlX2ZvcmdldF9saW5rICpmdXNlX2FsbG9jX2ZvcmdldCgpCitzdHJ1Y3QgZnVzZV9mb3JnZXRfbGluayAqZnVzZV9hbGxvY19mb3JnZXQodm9pZCkKIHsKIAlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ1c2VfZm9yZ2V0X2xpbmspLCBHRlBfS0VSTkVMKTsKIH0KQEAgLTgwOSw2ICs4MDksMTMgQEAKIAkJCQlmYy0+YXN5bmNfcmVhZCA9IDE7CiAJCQlpZiAoIShhcmctPmZsYWdzICYgRlVTRV9QT1NJWF9MT0NLUykpCiAJCQkJZmMtPm5vX2xvY2sgPSAxOworCQkJaWYgKGFyZy0+bWlub3IgPj0gMTcpIHsKKwkJCQlpZiAoIShhcmctPmZsYWdzICYgRlVTRV9GTE9DS19MT0NLUykpCisJCQkJCWZjLT5ub19mbG9jayA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmICghKGFyZy0+ZmxhZ3MgJiBGVVNFX1BPU0lYX0xPQ0tTKSkKKwkJCQkJZmMtPm5vX2Zsb2NrID0gMTsKKwkJCX0KIAkJCWlmIChhcmctPmZsYWdzICYgRlVTRV9BVE9NSUNfT19UUlVOQykKIAkJCQlmYy0+YXRvbWljX29fdHJ1bmMgPSAxOwogCQkJaWYgKGFyZy0+bWlub3IgPj0gOSkgewpAQCAtODIzLDYgKzgzMCw3IEBACiAJCX0gZWxzZSB7CiAJCQlyYV9wYWdlcyA9IGZjLT5tYXhfcmVhZCAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCWZjLT5ub19sb2NrID0gMTsKKwkJCWZjLT5ub19mbG9jayA9IDE7CiAJCX0KIAogCQlmYy0+YmRpLnJhX3BhZ2VzID0gbWluKGZjLT5iZGkucmFfcGFnZXMsIHJhX3BhZ2VzKTsKQEAgLTg0Myw3ICs4NTEsOCBAQAogCWFyZy0+bWlub3IgPSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OOwogCWFyZy0+bWF4X3JlYWRhaGVhZCA9IGZjLT5iZGkucmFfcGFnZXMgKiBQQUdFX0NBQ0hFX1NJWkU7CiAJYXJnLT5mbGFncyB8PSBGVVNFX0FTWU5DX1JFQUQgfCBGVVNFX1BPU0lYX0xPQ0tTIHwgRlVTRV9BVE9NSUNfT19UUlVOQyB8Ci0JCUZVU0VfRVhQT1JUX1NVUFBPUlQgfCBGVVNFX0JJR19XUklURVMgfCBGVVNFX0RPTlRfTUFTSzsKKwkJRlVTRV9FWFBPUlRfU1VQUE9SVCB8IEZVU0VfQklHX1dSSVRFUyB8IEZVU0VfRE9OVF9NQVNLIHwKKwkJRlVTRV9GTE9DS19MT0NLUzsKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9JTklUOwogCXJlcS0+aW4ubnVtYXJncyA9IDE7CiAJcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoKmFyZyk7CmRpZmYgLS1naXQgYS9mcy9nZW5lcmljX2FjbC5jIGIvZnMvZ2VuZXJpY19hY2wuYwppbmRleCBkNWUzM2EwLi5kMGRkZGFjIDEwMDY0NAotLS0gYS9mcy9nZW5lcmljX2FjbC5jCisrKyBiL2ZzL2dlbmVyaWNfYWNsLmMKQEAgLTgyLDE4ICs4MiwxNCBAQAogCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAl9CiAJaWYgKGFjbCkgewotCQltb2RlX3QgbW9kZTsKLQogCQllcnJvciA9IHBvc2l4X2FjbF92YWxpZChhY2wpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGZhaWxlZDsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgotCQkJbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0JCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJm1vZGUpOworCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZpbm9kZS0+aV9tb2RlKTsKIAkJCWlmIChlcnJvciA8IDApCiAJCQkJZ290byBmYWlsZWQ7Ci0JCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQkJaWYgKGVycm9yID09IDApIHsKIAkJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwpAQCAtMTI1LDIxICsxMjEsMjAgQEAKIGdlbmVyaWNfYWNsX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJaW50IGVycm9yOwogCi0JaW5vZGUtPmlfbW9kZSA9IG1vZGUgJiB+Y3VycmVudF91bWFzaygpOwogCWlmICghU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKIAkJYWNsID0gZ2V0X2NhY2hlZF9hY2woZGlyLCBBQ0xfVFlQRV9ERUZBVUxUKTsKIAlpZiAoYWNsKSB7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCk7Ci0JCWVycm9yID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfS0VSTkVMLCAmbW9kZSk7CisJCWVycm9yID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfS0VSTkVMLCAmaW5vZGUtPmlfbW9kZSk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpZiAoZXJyb3IgPiAwKQogCQkJc2V0X2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKTsKKwl9IGVsc2UgeworCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQogCWVycm9yID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuYyBiL2ZzL2dmczIvYWNsLmMKaW5kZXggODg0YzlhZi4uMzQ1MDFiNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuYworKysgYi9mcy9nZnMyL2FjbC5jCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIGdmczJfYWNsX2dldChHRlMyX0koaW5vZGUpLCB0eXBlKTsKIH0KIAotc3RhdGljIGludCBnZnMyX3NldF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIG1vZGVfdCBtb2RlKQorc3RhdGljIGludCBnZnMyX3NldF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVtb2RlX3QgbW9kZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmRpcC0+aV9pbm9kZSk7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwotCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwl1bW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWludCBlcnJvciA9IDA7CiAKIAlpZiAoIXNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZTsKIAogCWlmICh0eXBlID09IEFDTF9UWVBFX0FDQ0VTUykgewotCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJCWVycm9yID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CiAKIAkJaWYgKGVycm9yIDw9IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCBjMTA2Y2EyLi5kMjRhOWI2IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC0zNDQsNiArMzQ0LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJvb3QsICppbm9kZTsKIAlzdHJ1Y3QgcXN0ciBzdHI7CiAJc3RydWN0IG5sc190YWJsZSAqbmxzID0gTlVMTDsKKwl1NjQgbGFzdF9mc19ibG9jaywgbGFzdF9mc19wYWdlOwogCWludCBlcnI7CiAKIAllcnIgPSAtRUlOVkFMOwpAQCAtMzk5LDkgKzQwMCwxMyBAQAogCWlmICghc2JpLT5yc3JjX2NsdW1wX2Jsb2NrcykKIAkJc2JpLT5yc3JjX2NsdW1wX2Jsb2NrcyA9IDE7CiAKLQllcnIgPSBnZW5lcmljX2NoZWNrX2FkZHJlc3NhYmxlKHNiaS0+YWxsb2NfYmxrc3pfc2hpZnQsCi0JCQkJCXNiaS0+dG90YWxfYmxvY2tzKTsKLQlpZiAoZXJyKSB7CisJZXJyID0gLUVGQklHOworCWxhc3RfZnNfYmxvY2sgPSBzYmktPnRvdGFsX2Jsb2NrcyAtIDE7CisJbGFzdF9mc19wYWdlID0gKGxhc3RfZnNfYmxvY2sgPDwgc2JpLT5hbGxvY19ibGtzel9zaGlmdCkgPj4KKwkJCVBBR0VfQ0FDSEVfU0hJRlQ7CisKKwlpZiAoKGxhc3RfZnNfYmxvY2sgPiAoc2VjdG9yX3QpKH4wVUxMKSA+PiAoc2JpLT5hbGxvY19ibGtzel9zaGlmdCAtIDkpKSB8fAorCSAgICAobGFzdF9mc19wYWdlID4gKHBnb2ZmX3QpKH4wVUxMKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZpbGVzeXN0ZW0gc2l6ZSB0b28gbGFyZ2UuXG4iKTsKIAkJZ290byBvdXRfZnJlZV92aGRyOwogCX0KQEAgLTUyNSw4ICs1MzAsOCBAQAogb3V0X2Nsb3NlX2V4dF90cmVlOgogCWhmc19idHJlZV9jbG9zZShzYmktPmV4dF90cmVlKTsKIG91dF9mcmVlX3ZoZHI6Ci0Ja2ZyZWUoc2JpLT5zX3ZoZHIpOwotCWtmcmVlKHNiaS0+c19iYWNrdXBfdmhkcik7CisJa2ZyZWUoc2JpLT5zX3ZoZHJfYnVmKTsKKwlrZnJlZShzYmktPnNfYmFja3VwX3ZoZHJfYnVmKTsKIG91dF91bmxvYWRfbmxzOgogCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCXVubG9hZF9ubHMobmxzKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTBlNTE1YS4uN2RhZjRiOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTI3Miw5ICsyNzIsOSBAQAogCXJldHVybiAwOwogCiBvdXRfZnJlZV9iYWNrdXBfdmhkcjoKLQlrZnJlZShzYmktPnNfYmFja3VwX3ZoZHIpOworCWtmcmVlKHNiaS0+c19iYWNrdXBfdmhkcl9idWYpOwogb3V0X2ZyZWVfdmhkcjoKLQlrZnJlZShzYmktPnNfdmhkcik7CisJa2ZyZWUoc2JpLT5zX3ZoZHJfYnVmKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9ocHBmcy9ocHBmcy5jIGIvZnMvaHBwZnMvaHBwZnMuYwppbmRleCA4NjM1YmU1Li45NzBlYTk4IDEwMDY0NAotLS0gYS9mcy9ocHBmcy9ocHBmcy5jCisrKyBiL2ZzL2hwcGZzL2hwcGZzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAib3MuaCIKIApkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA4N2I2ZTA0Li5lYzg4OTUzIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtNDkxLDYgKzQ5MSw3IEBACiAJCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWJyZWFrOwogCQl9CisJCWxvY2tkZXBfYW5ub3RhdGVfaW5vZGVfbXV0ZXhfa2V5KGlub2RlKTsKIAl9CiAJcmV0dXJuIGlub2RlOwogfQpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggZDBjNzJmZi4uZWM3OTI0NiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIAlpbm9kZS0+aV9vcCA9ICZlbXB0eV9pb3BzOwogCWlub2RlLT5pX2ZvcCA9ICZlbXB0eV9mb3BzOwogCWlub2RlLT5pX25saW5rID0gMTsKKwlpbm9kZS0+aV9vcGZsYWdzID0gMDsKIAlpbm9kZS0+aV91aWQgPSAwOwogCWlub2RlLT5pX2dpZCA9IDA7CiAJYXRvbWljX3NldCgmaW5vZGUtPmlfd3JpdGVjb3VudCwgMCk7CkBAIC0zOTksMTIgKzQwMCwxMiBAQAogRVhQT1JUX1NZTUJPTChfX2luc2VydF9pbm9kZV9oYXNoKTsKIAogLyoqCi0gKglyZW1vdmVfaW5vZGVfaGFzaCAtIHJlbW92ZSBhbiBpbm9kZSBmcm9tIHRoZSBoYXNoCisgKglfX3JlbW92ZV9pbm9kZV9oYXNoIC0gcmVtb3ZlIGFuIGlub2RlIGZyb20gdGhlIGhhc2gKICAqCUBpbm9kZTogaW5vZGUgdG8gdW5oYXNoCiAgKgogICoJUmVtb3ZlIGFuIGlub2RlIGZyb20gdGhlIHN1cGVyYmxvY2suCiAgKi8KLXZvaWQgcmVtb3ZlX2lub2RlX2hhc2goc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgX19yZW1vdmVfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXNwaW5fbG9jaygmaW5vZGVfaGFzaF9sb2NrKTsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwpAQCAtNDEyLDcgKzQxMyw3IEBACiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXNwaW5fdW5sb2NrKCZpbm9kZV9oYXNoX2xvY2spOwogfQotRVhQT1JUX1NZTUJPTChyZW1vdmVfaW5vZGVfaGFzaCk7CitFWFBPUlRfU1lNQk9MKF9fcmVtb3ZlX2lub2RlX2hhc2gpOwogCiB2b2lkIGVuZF93cml0ZWJhY2soc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTQ1NCw3ICs0NTUsOSBAQAogCUJVR19PTighKGlub2RlLT5pX3N0YXRlICYgSV9GUkVFSU5HKSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZpbm9kZS0+aV9scnUpKTsKIAotCWlub2RlX3diX2xpc3RfZGVsKGlub2RlKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmlub2RlLT5pX3diX2xpc3QpKQorCQlpbm9kZV93Yl9saXN0X2RlbChpbm9kZSk7CisKIAlpbm9kZV9zYl9saXN0X2RlbChpbm9kZSk7CiAKIAlpZiAob3AtPmV2aWN0X2lub2RlKSB7CkBAIC04NDUsMTYgKzg0OCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5ld19pbm9kZSk7CiAKLS8qKgotICogdW5sb2NrX25ld19pbm9kZSAtIGNsZWFyIHRoZSBJX05FVyBzdGF0ZSBhbmQgd2FrZSB1cCBhbnkgd2FpdGVycwotICogQGlub2RlOgluZXcgaW5vZGUgdG8gdW5sb2NrCi0gKgotICogQ2FsbGVkIHdoZW4gdGhlIGlub2RlIGlzIGZ1bGx5IGluaXRpYWxpc2VkIHRvIGNsZWFyIHRoZSBuZXcgc3RhdGUgb2YgdGhlCi0gKiBpbm9kZSBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBmb3IgdGhlIGlub2RlIHRvIGZpbmlzaCBpbml0aWFsaXNhdGlvbi4KLSAqLwotdm9pZCB1bmxvY2tfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17CiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3ZvaWQgbG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoc3RydWN0IGlub2RlICppbm9kZSkKK3sKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSA9IGlub2RlLT5pX3NiLT5zX3R5cGU7CiAKQEAgLTg3MCw3ICs4NjYsMjAgQEAKIAkJCQkJICAmdHlwZS0+aV9tdXRleF9kaXJfa2V5KTsKIAkJfQogCX0KK30KK0VYUE9SVF9TWU1CT0wobG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkpOwogI2VuZGlmCisKKy8qKgorICogdW5sb2NrX25ld19pbm9kZSAtIGNsZWFyIHRoZSBJX05FVyBzdGF0ZSBhbmQgd2FrZSB1cCBhbnkgd2FpdGVycworICogQGlub2RlOgluZXcgaW5vZGUgdG8gdW5sb2NrCisgKgorICogQ2FsbGVkIHdoZW4gdGhlIGlub2RlIGlzIGZ1bGx5IGluaXRpYWxpc2VkIHRvIGNsZWFyIHRoZSBuZXcgc3RhdGUgb2YgdGhlCisgKiBpbm9kZSBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBmb3IgdGhlIGlub2RlIHRvIGZpbmlzaCBpbml0aWFsaXNhdGlvbi4KKyAqLwordm9pZCB1bmxvY2tfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJbG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpOwogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJV0FSTl9PTighKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9ORVc7CkBAIC0xMzI4LDcgKzEzMzcsOCBAQAogCX0KIAogCWlub2RlLT5pX3N0YXRlIHw9IElfRlJFRUlORzsKLQlpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpOworCWlmICghbGlzdF9lbXB0eSgmaW5vZGUtPmlfbHJ1KSkKKwkJaW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAKIAlldmljdChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDJjNjJjNWEuLjE2YTY5OGIgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC0yNTcsOSArMjU3LDEyIEBACiBfX2ZsdXNoX2JhdGNoKGpvdXJuYWxfdCAqam91cm5hbCwgaW50ICpiYXRjaF9jb3VudCkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAorCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAlmb3IgKGkgPSAwOyBpIDwgKmJhdGNoX2NvdW50OyBpKyspCi0JCXdyaXRlX2RpcnR5X2J1ZmZlcihqb3VybmFsLT5qX2Noa3B0X2Joc1tpXSwgV1JJVEUpOworCQl3cml0ZV9kaXJ0eV9idWZmZXIoam91cm5hbC0+al9jaGtwdF9iaHNbaV0sIFdSSVRFX1NZTkMpOworCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKmJhdGNoX2NvdW50OyBpKyspIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpvdXJuYWwtPmpfY2hrcHRfYmhzW2ldOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCAwZGZhNWI1OS4uZjI0ZGYxMyAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTIzOTAsNzMgKzIzOTAsNiBAQAogCWpiZDJfam91cm5hbF9kZXN0cm95X2NhY2hlcygpOwogfQogCi0vKiAKLSAqIGpiZDJfZGV2X3RvX25hbWUgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGpiZDIgYW5kIGV4dDQgCi0gKiB0cmFjaW5nIGluZnJhc3RydWN0dXJlIHRvIG1hcCBhIGRldl90IHRvIGEgZGV2aWNlIG5hbWUuCi0gKgotICogVGhlIGNhbGxlciBzaG91bGQgdXNlIHJjdV9yZWFkX2xvY2soKSBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlCi0gKiBkZXZpY2UgbmFtZSBzdGF5cyB2YWxpZCB1bnRpbCBpdHMgZG9uZSB3aXRoIGl0LiAgV2UgdXNlCi0gKiByY3VfcmVhZF9sb2NrKCkgYXMgd2VsbCB0byBtYWtlIHN1cmUgd2UncmUgc2FmZSBpbiBjYXNlIHRoZSBjYWxsZXIKLSAqIGdldHMgc2xvcHB5LCBhbmQgYmVjYXVzZSByY3VfcmVhZF9sb2NrKCkgaXMgY2hlYXAgYW5kIGNhbiBiZSBzYWZlbHkKLSAqIG5lc3RlZC4KLSAqLwotc3RydWN0IGRldm5hbWVfY2FjaGUgewotCXN0cnVjdCByY3VfaGVhZAlyY3U7Ci0JZGV2X3QJCWRldmljZTsKLQljaGFyCQlkZXZuYW1lW0JERVZOQU1FX1NJWkVdOwotfTsKLSNkZWZpbmUgQ0FDSEVfU0laRV9CSVRTIDYKLXN0YXRpYyBzdHJ1Y3QgZGV2bmFtZV9jYWNoZSAqZGV2Y2FjaGVbMSA8PCBDQUNIRV9TSVpFX0JJVFNdOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZuYW1lX2NhY2hlX2xvY2spOwotCi1zdGF0aWMgdm9pZCBmcmVlX2RldmNhY2hlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQotewotCWtmcmVlKHJjdSk7Ci19Ci0KLWNvbnN0IGNoYXIgKmpiZDJfZGV2X3RvX25hbWUoZGV2X3QgZGV2aWNlKQotewotCWludAlpID0gaGFzaF8zMihkZXZpY2UsIENBQ0hFX1NJWkVfQklUUyk7Ci0JY2hhcgkqcmV0OwotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkOwotCXN0YXRpYyBzdHJ1Y3QgZGV2bmFtZV9jYWNoZSAqbmV3X2RldjsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoZGV2Y2FjaGVbaV0gJiYgZGV2Y2FjaGVbaV0tPmRldmljZSA9PSBkZXZpY2UpIHsKLQkJcmV0ID0gZGV2Y2FjaGVbaV0tPmRldm5hbWU7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCW5ld19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2bmFtZV9jYWNoZSksIEdGUF9LRVJORUwpOwotCWlmICghbmV3X2RldikKLQkJcmV0dXJuICJOT0RFVi1BTExPQ0ZBSUxVUkUiOyAvKiBTb21ldGhpbmcgbm9uLU5VTEwgKi8KLQliZCA9IGJkZ2V0KGRldmljZSk7Ci0Jc3Bpbl9sb2NrKCZkZXZuYW1lX2NhY2hlX2xvY2spOwotCWlmIChkZXZjYWNoZVtpXSkgewotCQlpZiAoZGV2Y2FjaGVbaV0tPmRldmljZSA9PSBkZXZpY2UpIHsKLQkJCWtmcmVlKG5ld19kZXYpOwotCQkJYmRwdXQoYmQpOwotCQkJcmV0ID0gZGV2Y2FjaGVbaV0tPmRldm5hbWU7Ci0JCQlzcGluX3VubG9jaygmZGV2bmFtZV9jYWNoZV9sb2NrKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJY2FsbF9yY3UoJmRldmNhY2hlW2ldLT5yY3UsIGZyZWVfZGV2Y2FjaGUpOwotCX0KLQlkZXZjYWNoZVtpXSA9IG5ld19kZXY7Ci0JZGV2Y2FjaGVbaV0tPmRldmljZSA9IGRldmljZTsKLQlpZiAoYmQpIHsKLQkJYmRldm5hbWUoYmQsIGRldmNhY2hlW2ldLT5kZXZuYW1lKTsKLQkJYmRwdXQoYmQpOwotCX0gZWxzZQotCQlfX2JkZXZuYW1lKGRldmljZSwgZGV2Y2FjaGVbaV0tPmRldm5hbWUpOwotCXJldCA9IGRldmNhY2hlW2ldLT5kZXZuYW1lOwotCXNwaW5fdW5sb2NrKCZkZXZuYW1lX2NhY2hlX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGpiZDJfZGV2X3RvX25hbWUpOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBtb2R1bGVfaW5pdChqb3VybmFsX2luaXQpOwogbW9kdWxlX2V4aXQoam91cm5hbF9leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5jIGIvZnMvamZmczIvYWNsLmMKaW5kZXggMjdjNTExYS4uOTI2ZDAyMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgogCQl4cHJlZml4ID0gSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTOwogCQlpZiAoYWNsKSB7Ci0JCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCQl1bW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCQkJcmMgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKIAkJCWlmIChyYyA8IDApCiAJCQkJcmV0dXJuIHJjOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgamZmczJfaW5pdF9hY2xfcHJlKHN0cnVjdCBpbm9kZSAqZGlyX2ksIHN0cnVjdCBpbm9kZSAqaW5vZGUsIG1vZGVfdCAqaV9tb2RlKQoraW50IGpmZnMyX2luaXRfYWNsX3ByZShzdHJ1Y3QgaW5vZGUgKmRpcl9pLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90ICppX21vZGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5oIGIvZnMvamZmczIvYWNsLmgKaW5kZXggYjM0MjFjNy4uOWI0NzcyNCAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmgKKysrIGIvZnMvamZmczIvYWNsLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RydWN0IHBvc2l4X2FjbCAqamZmczJfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IGpmZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gaW50IGpmZnMyX2luaXRfYWNsX3ByZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosIG1vZGVfdCAqKTsKK2V4dGVybiBpbnQgamZmczJfaW5pdF9hY2xfcHJlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCAqKTsKIGV4dGVybiBpbnQgamZmczJfaW5pdF9hY2xfcG9zdChzdHJ1Y3QgaW5vZGUgKik7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl9hY2xfYWNjZXNzX3hhdHRyX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCBiODFiMzVkLi5iYmNiOTc1IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCiAvKiBqZmZzMl9uZXdfaW5vZGU6IGFsbG9jYXRlIGEgbmV3IGlub2RlIGFuZCBpbm9jYWNoZSwgYWRkIGl0IHRvIHRoZSBoYXNoLAogICAgZmlsbCBpbiB0aGUgcmF3X2lub2RlIHdoaWxlIHlvdSdyZSBhdCBpdC4gKi8KLXN0cnVjdCBpbm9kZSAqamZmczJfbmV3X2lub2RlIChzdHJ1Y3QgaW5vZGUgKmRpcl9pLCBtb2RlX3QgbW9kZSwgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmkpCitzdHJ1Y3QgaW5vZGUgKmpmZnMyX25ld19pbm9kZSAoc3RydWN0IGlub2RlICpkaXJfaSwgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXJfaS0+aV9zYjsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL29zLWxpbnV4LmggYi9mcy9qZmZzMi9vcy1saW51eC5oCmluZGV4IDUyNjk3OWMuLjZjMTc1NWMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL29zLWxpbnV4LmgKKysrIGIvZnMvamZmczIvb3MtbGludXguaApAQCAtMTczLDcgKzE3Myw3IEBACiBzdHJ1Y3QgaW5vZGUgKmpmZnMyX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBqZmZzMl9ldmljdF9pbm9kZSAoc3RydWN0IGlub2RlICopOwogdm9pZCBqZmZzMl9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpOwotc3RydWN0IGlub2RlICpqZmZzMl9uZXdfaW5vZGUgKHN0cnVjdCBpbm9kZSAqZGlyX2ksIG1vZGVfdCBtb2RlLAorc3RydWN0IGlub2RlICpqZmZzMl9uZXdfaW5vZGUgKHN0cnVjdCBpbm9kZSAqZGlyX2ksIHVtb2RlX3QgbW9kZSwKIAkJCSAgICAgICBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSk7CiBpbnQgamZmczJfc3RhdGZzIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopOwogaW50IGpmZnMyX3JlbW91bnRfZnMgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9hY2wuYyBiL2ZzL2pmcy9hY2wuYwppbmRleCBiM2EzMmNhLi40NTU1OWRjIDEwMDY0NAotLS0gYS9mcy9qZnMvYWNsLmMKKysrIGIvZnMvamZzL2FjbC5jCkBAIC0xMjcsMTYgKzEyNywxNCBAQAogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCiAJaWYgKGFjbCkgewotCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CiAJCQlyYyA9IGpmc19zZXRfYWNsKHRpZCwgaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCk7CiAJCQlpZiAocmMpCiAJCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCXJjID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfS0VSTkVMLCAmbW9kZSk7CisJCXJjID0gcG9zaXhfYWNsX2NyZWF0ZSgmYWNsLCBHRlBfS0VSTkVMLCAmaW5vZGUtPmlfbW9kZSk7CiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIGNsZWFudXA7IC8qIHBvc2l4X2FjbF9yZWxlYXNlKE5VTEwpIGlzIG5vLW9wICovCi0JCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpZiAocmMgPiAwKQogCQkJcmMgPSBqZnNfc2V0X2FjbCh0aWQsIGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGFjbCk7CiBjbGVhbnVwOgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc191bW91bnQuYyBiL2ZzL2pmcy9qZnNfdW1vdW50LmMKaW5kZXggYWRjZjkyZC4uNzk3MWYzNyAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc191bW91bnQuYworKysgYi9mcy9qZnMvamZzX3Vtb3VudC5jCkBAIC02OCw3ICs2OCw3IEBACiAJCS8qCiAJCSAqIFdhaXQgZm9yIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyB0byBiZSB3cml0dGVuIHRvIGxvZzoKIAkJICovCi0JCWpmc19mbHVzaF9qb3VybmFsKGxvZywgMSk7CisJCWpmc19mbHVzaF9qb3VybmFsKGxvZywgMik7CiAKIAkvKgogCSAqIGNsb3NlIGZpbGVzZXQgaW5vZGUgYWxsb2NhdGlvbiBtYXAgKGFrYSBmaWxlc2V0IGlub2RlKQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJICoKIAkgKiByZW1vdmUgZmlsZSBzeXN0ZW0gZnJvbSBsb2cgYWN0aXZlIGZpbGUgc3lzdGVtIGxpc3QuCiAJICovCi0JamZzX2ZsdXNoX2pvdXJuYWwobG9nLCAxKTsKKwlqZnNfZmx1c2hfam91cm5hbChsb2csIDIpOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgYWxsIG1ldGFkYXRhIG1ha2VzIGl0IHRvIGRpc2sKZGlmZiAtLWdpdCBhL2ZzL2pmcy94YXR0ci5jIGIvZnMvamZzL3hhdHRyLmMKaW5kZXggMjQ4MzhmMS4uZTg3ZmVkZSAxMDA2NDQKLS0tIGEvZnMvamZzL3hhdHRyLmMKKysrIGIvZnMvamZzL3hhdHRyLmMKQEAgLTY5Myw4ICs2OTMsNyBAQAogCQkJcmV0dXJuIHJjOwogCQl9CiAJCWlmIChhY2wpIHsKLQkJCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKLQkJCXJjID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CisJCQlyYyA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJmlub2RlLT5pX21vZGUpOwogCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKIAkJCWlmIChyYyA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKQEAgLTcwMiw3ICs3MDEsNiBAQAogCQkJCSAgICAgICByYyk7CiAJCQkJcmV0dXJuIHJjOwogCQkJfQotCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJfQogCQkvKgpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZjhjNjlkMy4uZjQ3ODgzNiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0xNzksMTkgKzE3OSwxNCBAQAogI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAKLQkvKgotCSAqIFVuZGVyIFJDVSB3YWxrLCB3ZSBjYW5ub3QgZXZlbiBkbyBhICJnZXRfY2FjaGVkX2FjbCgpIiwKLQkgKiBiZWNhdXNlIHRoYXQgaW52b2x2ZXMgbG9ja2luZyBhbmQgZ2V0dGluZyBhIHJlZmNvdW50IG9uCi0JICogYSBjYWNoZWQgQUNMLgotCSAqCi0JICogU28gdGhlIG9ubHkgY2FzZSB3ZSBoYW5kbGUgZHVyaW5nIFJDVSB3YWxraW5nIGlzIHRoZQotCSAqIGNhc2Ugb2YgYSBjYWNoZWQgIm5vIEFDTCBhdCBhbGwiLCB3aGljaCBuZWVkcyBubyBsb2NrcwotCSAqIG9yIHJlZmNvdW50cy4KLQkgKi8KIAlpZiAobWFzayAmIE1BWV9OT1RfQkxPQ0spIHsKLQkgICAgICAgIGlmIChuZWdhdGl2ZV9jYWNoZWRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpKQorCQlhY2wgPSBnZXRfY2FjaGVkX2FjbF9yY3UoaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CisJICAgICAgICBpZiAoIWFjbCkKIAkgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47Ci0JICAgICAgICByZXR1cm4gLUVDSElMRDsKKwkJLyogbm8gLT5nZXRfYWNsKCkgY2FsbHMgaW4gUkNVIG1vZGUuLi4gKi8KKwkJaWYgKGFjbCA9PSBBQ0xfTk9UX0NBQ0hFRCkKKwkJCXJldHVybiAtRUNISUxEOworCSAgICAgICAgcmV0dXJuIHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2sgJiB+TUFZX05PVF9CTE9DSyk7CiAJfQogCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CkBAIC0zMTMsNiArMzA4LDI2IEBACiAJcmV0dXJuIC1FQUNDRVM7CiB9CiAKKy8qCisgKiBXZSBfcmVhbGx5XyB3YW50IHRvIGp1c3QgZG8gImdlbmVyaWNfcGVybWlzc2lvbigpIiB3aXRob3V0CisgKiBldmVuIGxvb2tpbmcgYXQgdGhlIGlub2RlLT5pX29wIHZhbHVlcy4gU28gd2Uga2VlcCBhIGNhY2hlCisgKiBmbGFnIGluIGlub2RlLT5pX29wZmxhZ3MsIHRoYXQgc2F5cyAidGhpcyBoYXMgbm90IHNwZWNpYWwKKyAqIHBlcm1pc3Npb24gZnVuY3Rpb24sIHVzZSB0aGUgZmFzdCBjYXNlIi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZG9faW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3sKKwlpZiAodW5saWtlbHkoIShpbm9kZS0+aV9vcGZsYWdzICYgSU9QX0ZBU1RQRVJNKSkpIHsKKwkJaWYgKGxpa2VseShpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikpCisJCQlyZXR1cm4gaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24oaW5vZGUsIG1hc2spOworCisJCS8qIFRoaXMgZ2V0cyBzZXQgb25jZSBmb3IgdGhlIGlub2RlIGxpZmV0aW1lICovCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlub2RlLT5pX29wZmxhZ3MgfD0gSU9QX0ZBU1RQRVJNOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOworfQorCiAvKioKICAqIGlub2RlX3Blcm1pc3Npb24gIC0gIGNoZWNrIGZvciBhY2Nlc3MgcmlnaHRzIHRvIGEgZ2l2ZW4gaW5vZGUKICAqIEBpbm9kZToJaW5vZGUgdG8gY2hlY2sgcGVybWlzc2lvbiBvbgpAQCAtMzI3LDcgKzM0Miw3IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmIChtYXNrICYgTUFZX1dSSVRFKSB7CisJaWYgKHVubGlrZWx5KG1hc2sgJiBNQVlfV1JJVEUpKSB7CiAJCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAKIAkJLyoKQEAgLTM0NCwxMSArMzU5LDcgQEAKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KIAotCWlmIChpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikKLQkJcmV0dmFsID0gaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24oaW5vZGUsIG1hc2spOwotCWVsc2UKLQkJcmV0dmFsID0gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKLQorCXJldHZhbCA9IGRvX2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTcxNiwxNyArNzI3LDIwIEBACiAJaWYgKChmbGFncyAmIExPT0tVUF9OT19BVVRPTU9VTlQpICYmICEoZmxhZ3MgJiBMT09LVVBfUEFSRU5UKSkKIAkJcmV0dXJuIC1FSVNESVI7IC8qIHdlIGFjdHVhbGx5IHdhbnQgdG8gc3RvcCBoZXJlICovCiAKLQkvKiBXZSB3YW50IHRvIG1vdW50IGlmIHNvbWVvbmUgaXMgdHJ5aW5nIHRvIG9wZW4vY3JlYXRlIGEgZmlsZSBvZiBhbnkKLQkgKiB0eXBlIHVuZGVyIHRoZSBtb3VudHBvaW50LCB3YW50cyB0byB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBtb3VudHBvaW50Ci0JICogb3Igd2FudHMgdG8gb3BlbiB0aGUgbW91bnRlZCBkaXJlY3RvcnkuCisJLyogV2UgZG9uJ3Qgd2FudCB0byBtb3VudCBpZiBzb21lb25lJ3MganVzdCBkb2luZyBhIHN0YXQgLQorCSAqIHVubGVzcyB0aGV5J3JlIHN0YXQnaW5nIGEgZGlyZWN0b3J5IGFuZCBhcHBlbmRlZCBhICcvJyB0bworCSAqIHRoZSBuYW1lLgogCSAqCi0JICogV2UgZG9uJ3Qgd2FudCB0byBtb3VudCBpZiBzb21lb25lJ3MganVzdCBkb2luZyBhIHN0YXQgYW5kIHRoZXkndmUKLQkgKiBzZXQgQVRfU1lNTElOS19OT0ZPTExPVyAtIHVubGVzcyB0aGV5J3JlIHN0YXQnaW5nIGEgZGlyZWN0b3J5IGFuZAotCSAqIGFwcGVuZGVkIGEgJy8nIHRvIHRoZSBuYW1lLgorCSAqIFdlIGRvLCBob3dldmVyLCB3YW50IHRvIG1vdW50IGlmIHNvbWVvbmUgd2FudHMgdG8gb3BlbiBvcgorCSAqIGNyZWF0ZSBhIGZpbGUgb2YgYW55IHR5cGUgdW5kZXIgdGhlIG1vdW50cG9pbnQsIHdhbnRzIHRvCisJICogdHJhdmVyc2UgdGhyb3VnaCB0aGUgbW91bnRwb2ludCBvciB3YW50cyB0byBvcGVuIHRoZQorCSAqIG1vdW50ZWQgZGlyZWN0b3J5LiAgQWxzbywgYXV0b2ZzIG1heSBtYXJrIG5lZ2F0aXZlIGRlbnRyaWVzCisJICogYXMgYmVpbmcgYXV0b21vdW50IHBvaW50cy4gIFRoZXNlIHdpbGwgbmVlZCB0aGUgYXR0ZW50aW9ucworCSAqIG9mIHRoZSBkYWVtb24gdG8gaW5zdGFudGlhdGUgdGhlbSBiZWZvcmUgdGhleSBjYW4gYmUgdXNlZC4KIAkgKi8KLQlpZiAoIShmbGFncyAmIExPT0tVUF9GT0xMT1cpICYmCi0JICAgICEoZmxhZ3MgJiAoTE9PS1VQX1BBUkVOVCB8IExPT0tVUF9ESVJFQ1RPUlkgfAotCQkgICAgICAgTE9PS1VQX09QRU4gfCBMT09LVVBfQ1JFQVRFKSkpCisJaWYgKCEoZmxhZ3MgJiAoTE9PS1VQX1BBUkVOVCB8IExPT0tVUF9ESVJFQ1RPUlkgfAorCQkgICAgIExPT0tVUF9PUEVOIHwgTE9PS1VQX0NSRUFURSkpICYmCisJICAgIHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkKIAkJcmV0dXJuIC1FSVNESVI7CiAKIAljdXJyZW50LT50b3RhbF9saW5rX2NvdW50Kys7CkBAIC0xMjQ0LDYgKzEyNTgsMjYgQEAKIAl9CiB9CiAKKy8qCisgKiBEbyB3ZSBuZWVkIHRvIGZvbGxvdyBsaW5rcz8gV2UgX3JlYWxseV8gd2FudCB0byBiZSBhYmxlCisgKiB0byBkbyB0aGlzIGNoZWNrIHdpdGhvdXQgaGF2aW5nIHRvIGxvb2sgYXQgaW5vZGUtPmlfb3AsCisgKiBzbyB3ZSBrZWVwIGEgY2FjaGUgb2YgIm5vLCB0aGlzIGRvZXNuJ3QgbmVlZCBmb2xsb3dfbGluayIKKyAqIGZvciB0aGUgY29tbW9uIGNhc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNob3VsZF9mb2xsb3dfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZm9sbG93KQoreworCWlmICh1bmxpa2VseSghKGlub2RlLT5pX29wZmxhZ3MgJiBJT1BfTk9GT0xMT1cpKSkgeworCQlpZiAobGlrZWx5KGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykpCisJCQlyZXR1cm4gZm9sbG93OworCisJCS8qIFRoaXMgZ2V0cyBzZXQgb25jZSBmb3IgdGhlIGlub2RlIGxpZmV0aW1lICovCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlub2RlLT5pX29wZmxhZ3MgfD0gSU9QX05PRk9MTE9XOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCB3YWxrX2NvbXBvbmVudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCiAJCXN0cnVjdCBxc3RyICpuYW1lLCBpbnQgdHlwZSwgaW50IGZvbGxvdykKIHsKQEAgLTEyNjYsNyArMTMwMCw3IEBACiAJCXRlcm1pbmF0ZV93YWxrKG5kKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWlmICh1bmxpa2VseShpbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspICYmIGZvbGxvdykgeworCWlmIChzaG91bGRfZm9sbG93X2xpbmsoaW5vZGUsIGZvbGxvdykpIHsKIAkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHsKIAkJCWlmICh1bmxpa2VseSh1bmxhenlfd2FsayhuZCwgcGF0aC0+ZGVudHJ5KSkpIHsKIAkJCQl0ZXJtaW5hdGVfd2FsayhuZCk7CkBAIC0xMzE5LDYgKzEzNTMsMjYgQEAKIH0KIAogLyoKKyAqIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGxvb2sgYXQgaW5vZGUtPmlfb3AtPmxvb2t1cAorICogd2hlbiB3ZSBkb24ndCBoYXZlIHRvLiBTbyB3ZSBrZWVwIGEgY2FjaGUgYml0IGluCisgKiB0aGUgaW5vZGUgLT5pX29wZmxhZ3MgZmllbGQgdGhhdCBzYXlzICJ5ZXMsIHdlIGNhbgorICogZG8gbG9va3VwIG9uIHRoaXMgaW5vZGUiLgorICovCitzdGF0aWMgaW5saW5lIGludCBjYW5fbG9va3VwKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKGxpa2VseShpbm9kZS0+aV9vcGZsYWdzICYgSU9QX0xPT0tVUCkpCisJCXJldHVybiAxOworCWlmIChsaWtlbHkoIWlub2RlLT5pX29wLT5sb29rdXApKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGRvIHRoaXMgb25jZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBpbm9kZSAqLworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJaW5vZGUtPmlfb3BmbGFncyB8PSBJT1BfTE9PS1VQOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIE5hbWUgcmVzb2x1dGlvbi4KICAqIFRoaXMgaXMgdGhlIGJhc2ljIG5hbWUgcmVzb2x1dGlvbiBmdW5jdGlvbiwgdHVybmluZyBhIHBhdGhuYW1lIGludG8KICAqIHRoZSBmaW5hbCBkZW50cnkuIFdlIGV4cGVjdCAnYmFzZScgdG8gYmUgcG9zaXRpdmUgYW5kIGEgZGlyZWN0b3J5LgpAQCAtMTM5NywxMCArMTQ1MSwxMCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CisJCWlmIChjYW5fbG9va3VwKG5kLT5pbm9kZSkpCisJCQljb250aW51ZTsKIAkJZXJyID0gLUVOT1RESVI7IAotCQlpZiAoIW5kLT5pbm9kZS0+aV9vcC0+bG9va3VwKQotCQkJYnJlYWs7Ci0JCWNvbnRpbnVlOworCQlicmVhazsKIAkJLyogaGVyZSBlbmRzIHRoZSBtYWluIGxvb3AgKi8KIAogbGFzdF9jb21wb25lbnQ6CkBAIC0yNTYyLDYgKzI2MTYsNyBAQAogCWlmICghZGlyLT5pX29wLT5ybWRpcikKIAkJcmV0dXJuIC1FUEVSTTsKIAorCWRnZXQoZGVudHJ5KTsKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJZXJyb3IgPSAtRUJVU1k7CkBAIC0yNTgyLDYgKzI2MzcsNyBAQAogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGVudHJ5KTsKIAlpZiAoIWVycm9yKQogCQlkX2RlbGV0ZShkZW50cnkpOwogCXJldHVybiBlcnJvcjsKQEAgLTI5NzEsNiArMzAyNyw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwlkZ2V0KG5ld19kZW50cnkpOwogCWlmICh0YXJnZXQpCiAJCW11dGV4X2xvY2soJnRhcmdldC0+aV9tdXRleCk7CiAKQEAgLTI5OTEsNiArMzA0OCw3IEBACiBvdXQ6CiAJaWYgKHRhcmdldCkKIAkJbXV0ZXhfdW5sb2NrKCZ0YXJnZXQtPmlfbXV0ZXgpOworCWRwdXQobmV3X2RlbnRyeSk7CiAJaWYgKCFlcnJvcikKIAkJaWYgKCEob2xkX2Rpci0+aV9zYi0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFTkFNRV9ET0VTX0RfTU9WRSkpCiAJCQlkX21vdmUob2xkX2RlbnRyeSxuZXdfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9LY29uZmlnIGIvZnMvbmZzL0tjb25maWcKaW5kZXggMmNkZTVkOS4uZGJjZDgyMSAxMDA2NDQKLS0tIGEvZnMvbmZzL0tjb25maWcKKysrIGIvZnMvbmZzL0tjb25maWcKQEAgLTg4LDE1ICs4OCwxNSBAQAogY29uZmlnIFBORlNfRklMRV9MQVlPVVQKIAl0cmlzdGF0ZQogCi1jb25maWcgUE5GU19PQkpMQVlPVVQKLQl0cmlzdGF0ZSAiUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgcE5GUyBPYmplY3RzIExheW91dCBEcml2ZXIgZm9yIE5GU3Y0LjEgcE5GUyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5GU19GUyAmJiBORlNfVjRfMSAmJiBTQ1NJX09TRF9VTEQKLQloZWxwCi0JICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHlvdXIgcE5GUyBjbGllbnQgdG8gc3VwcG9ydCB0aGUgT2JqZWN0cyBMYXlvdXQgRHJpdmVyLgotCSAgUmVxdWlyZXMgdGhlIFNDU0kgb3NkIGluaXRpYXRvciBsaWJyYXJ5IChTQ1NJX09TRF9JTklUSUFUT1IpIGFuZAotCSAgdXBwZXIgbGV2ZWwgZHJpdmVyIChTQ1NJX09TRF9VTEQpLgorY29uZmlnIFBORlNfQkxPQ0sKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTkZTX0ZTICYmIE5GU19WNF8xICYmIEJMS19ERVZfRE0KKwlkZWZhdWx0IG0KIAotCSAgSWYgdW5zdXJlLCBzYXkgTi4KK2NvbmZpZyBQTkZTX09CSkxBWU9VVAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBORlNfRlMgJiYgTkZTX1Y0XzEgJiYgU0NTSV9PU0RfVUxECisJZGVmYXVsdCBtCiAKIGNvbmZpZyBST09UX05GUwogCWJvb2wgIlJvb3QgZmlsZSBzeXN0ZW0gb24gTkZTIgpkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIvZnMvbmZzL01ha2VmaWxlCmluZGV4IDZhMzRmN2QuLmI1ODYxM2QgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9NYWtlZmlsZQorKysgYi9mcy9uZnMvTWFrZWZpbGUKQEAgLTIzLDMgKzIzLDQgQEAKIG5mc19sYXlvdXRfbmZzdjQxX2ZpbGVzLXkgOj0gbmZzNGZpbGVsYXlvdXQubyBuZnM0ZmlsZWxheW91dGRldi5vCiAKIG9iai0kKENPTkZJR19QTkZTX09CSkxBWU9VVCkgKz0gb2JqbGF5b3V0Lworb2JqLSQoQ09ORklHX1BORlNfQkxPQ0spICs9IGJsb2NrbGF5b3V0LwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L01ha2VmaWxlIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODE1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvYmxvY2tsYXlvdXQvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgcE5GUyBibG9jayBsYXlvdXQgZHJpdmVyIGtlcm5lbCBtb2R1bGUKKyMKK29iai0kKENPTkZJR19QTkZTX0JMT0NLKSArPSBibG9ja2xheW91dGRyaXZlci5vCitibG9ja2xheW91dGRyaXZlci1vYmpzIDo9IGJsb2NrbGF5b3V0Lm8gZXh0ZW50cy5vIGJsb2NrbGF5b3V0ZGV2Lm8gYmxvY2tsYXlvdXRkbS5vCmRpZmYgLS1naXQgYS9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYyBiL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjFjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYwpAQCAtMCwwICsxLDEwMjAgQEAKKy8qCisgKiAgbGludXgvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMKKyAqCisgKiAgTW9kdWxlIGZvciB0aGUgTkZTdjQuMSBwTkZTIGJsb2NrIGxheW91dCBkcml2ZXIuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBBbmR5IEFkYW1zb24gPGFuZHJvc0BjaXRpLnVtaWNoLmVkdT4KKyAqICBGcmVkIElzYW1hbiA8aWlzYW1hbkB1bWljaC5lZHU+CisgKgorICogcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSwgY29weSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYW5kCisgKiByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIGZvciBhbnkgcHVycG9zZSwKKyAqIHNvIGxvbmcgYXMgdGhlIG5hbWUgb2YgdGhlIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gaXMgbm90IHVzZWQgaW4KKyAqIGFueSBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbgorICogb2YgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIGF1dGhvcml6YXRpb24uICBpZgorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb3IgYW55IG90aGVyIGlkZW50aWZpY2F0aW9uIG9mIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBpcyBpbmNsdWRlZCBpbiBhbnkgY29weSBvZiBhbnkgcG9ydGlvbiBvZgorICogdGhpcyBzb2Z0d2FyZSwgdGhlbiB0aGUgZGlzY2xhaW1lciBiZWxvdyBtdXN0IGFsc28gYmUgaW5jbHVkZWQuCisgKgorICogdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcyBpcywgd2l0aG91dCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBhcyB0byBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0CisgKiB3YXJyYW50eSBieSB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGltcGxpZWQgd2FycmFudGllcyBvZgorICogbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHRoZSByZWdlbnRzCisgKiBvZiB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcywKKyAqIGluY2x1ZGluZyBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLAorICogd2l0aCByZXNwZWN0IHRvIGFueSBjbGFpbSBhcmlzaW5nIG91dCBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHVzZQorICogb2YgdGhlIHNvZnR3YXJlLCBldmVuIGlmIGl0IGhhcyBiZWVuIG9yIGlzIGhlcmVhZnRlciBhZHZpc2VkIG9mIHRoZQorICogcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgkJLyogc3RydWN0IGJpbyAqLworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIHZhcmlvdXMgd3JpdGUgY2FsbHMgKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorCisjaW5jbHVkZSAiYmxvY2tsYXlvdXQuaCIKKworI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJTkZTREJHX1BORlNfTEQKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQW5keSBBZGFtc29uIDxhbmRyb3NAY2l0aS51bWljaC5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRoZSBORlN2NC4xIHBORlMgQmxvY2sgbGF5b3V0IGRyaXZlciIpOworCitzdHJ1Y3QgZGVudHJ5ICpibF9kZXZpY2VfcGlwZTsKK3dhaXRfcXVldWVfaGVhZF90IGJsX3dxOworCitzdGF0aWMgdm9pZCBwcmludF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWRwcmludGsoIlBSSU5UUEFHRSBwYWdlICVwXG4iLCBwYWdlKTsKKwlkcHJpbnRrKCIJUGFnZVByaXZhdGUgJWRcbiIsIFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlkcHJpbnRrKCIJUGFnZVVwdG9kYXRlICVkXG4iLCBQYWdlVXB0b2RhdGUocGFnZSkpOworCWRwcmludGsoIglQYWdlRXJyb3IgJWRcbiIsIFBhZ2VFcnJvcihwYWdlKSk7CisJZHByaW50aygiCVBhZ2VEaXJ0eSAlZFxuIiwgUGFnZURpcnR5KHBhZ2UpKTsKKwlkcHJpbnRrKCIJUGFnZVJlZmVyZW5jZWQgJWRcbiIsIFBhZ2VSZWZlcmVuY2VkKHBhZ2UpKTsKKwlkcHJpbnRrKCIJUGFnZUxvY2tlZCAlZFxuIiwgUGFnZUxvY2tlZChwYWdlKSk7CisJZHByaW50aygiCVBhZ2VXcml0ZWJhY2sgJWRcbiIsIFBhZ2VXcml0ZWJhY2socGFnZSkpOworCWRwcmludGsoIglQYWdlTWFwcGVkVG9EaXNrICVkXG4iLCBQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpKTsKKwlkcHJpbnRrKCJcbiIpOworfQorCisvKiBHaXZlbiB0aGUgYmUgYXNzb2NpYXRlZCB3aXRoIGlzZWN0LCBkZXRlcm1pbmUgaWYgcGFnZSBkYXRhIG5lZWRzIHRvIGJlCisgKiBpbml0aWFsaXplZC4KKyAqLworc3RhdGljIGludCBpc19ob2xlKHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsIHNlY3Rvcl90IGlzZWN0KQoreworCWlmIChiZS0+YmVfc3RhdGUgPT0gUE5GU19CTE9DS19OT05FX0RBVEEpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGJlLT5iZV9zdGF0ZSAhPSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gIWJsX2lzX3NlY3Rvcl9pbml0KGJlLT5iZV9pbnZhbCwgaXNlY3QpOworfQorCisvKiBHaXZlbiB0aGUgYmUgYXNzb2NpYXRlZCB3aXRoIGlzZWN0LCBkZXRlcm1pbmUgaWYgcGFnZSBkYXRhIGNhbiBiZQorICogd3JpdHRlbiB0byBkaXNrLgorICovCitzdGF0aWMgaW50IGlzX3dyaXRhYmxlKHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsIHNlY3Rvcl90IGlzZWN0KQoreworCXJldHVybiAoYmUtPmJlX3N0YXRlID09IFBORlNfQkxPQ0tfUkVBRFdSSVRFX0RBVEEgfHwKKwkJYmUtPmJlX3N0YXRlID09IFBORlNfQkxPQ0tfSU5WQUxJRF9EQVRBKTsKK30KKworLyogVGhlIGRhdGEgd2UgYXJlIGhhbmRlZCBtaWdodCBiZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgYmlvcy4gIFdlIG5lZWQKKyAqIHRvIHRyYWNrIHdoZW4gdGhlIGxhc3Qgb25lIGlzIGZpbmlzaGVkLgorICovCitzdHJ1Y3QgcGFyYWxsZWxfaW8geworCXN0cnVjdCBrcmVmIHJlZmNudDsKKwlzdHJ1Y3QgcnBjX2NhbGxfb3BzIGNhbGxfb3BzOworCXZvaWQgKCpwbmZzX2NhbGxiYWNrKSAodm9pZCAqZGF0YSk7CisJdm9pZCAqZGF0YTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhcmFsbGVsX2lvICphbGxvY19wYXJhbGxlbCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYXJhbGxlbF9pbyAqcnY7CisKKwlydiAgPSBrbWFsbG9jKHNpemVvZigqcnYpLCBHRlBfTk9GUyk7CisJaWYgKHJ2KSB7CisJCXJ2LT5kYXRhID0gZGF0YTsKKwkJa3JlZl9pbml0KCZydi0+cmVmY250KTsKKwl9CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3BhcmFsbGVsKHN0cnVjdCBwYXJhbGxlbF9pbyAqcCkKK3sKKwlrcmVmX2dldCgmcC0+cmVmY250KTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9wYXJhbGxlbChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfaW8gKnAgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBhcmFsbGVsX2lvLCByZWZjbnQpOworCisJZHByaW50aygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlwLT5wbmZzX2NhbGxiYWNrKHAtPmRhdGEpOworCWtmcmVlKHApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3BhcmFsbGVsKHN0cnVjdCBwYXJhbGxlbF9pbyAqcCkKK3sKKwlrcmVmX3B1dCgmcC0+cmVmY250LCBkZXN0cm95X3BhcmFsbGVsKTsKK30KKworc3RhdGljIHN0cnVjdCBiaW8gKgorYmxfc3VibWl0X2JpbyhpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlpZiAoYmlvKSB7CisJCWdldF9wYXJhbGxlbChiaW8tPmJpX3ByaXZhdGUpOworCQlkcHJpbnRrKCIlcyBzdWJtaXR0aW5nICVzIGJpbyAldUAlbGx1XG4iLCBfX2Z1bmNfXywKKwkJCXJ3ID09IFJFQUQgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJYmlvLT5iaV9zaXplLCAodW5zaWduZWQgbG9uZyBsb25nKWJpby0+Ymlfc2VjdG9yKTsKKwkJc3VibWl0X2JpbyhydywgYmlvKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmlvICpibF9hbGxvY19pbml0X2JpbyhpbnQgbnBnLCBzZWN0b3JfdCBpc2VjdCwKKwkJCQkgICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsCisJCQkJICAgICB2b2lkICgqZW5kX2lvKShzdHJ1Y3QgYmlvICosIGludCBlcnIpLAorCQkJCSAgICAgc3RydWN0IHBhcmFsbGVsX2lvICpwYXIpCit7CisJc3RydWN0IGJpbyAqYmlvOworCisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCBucGcpOworCWlmICghYmlvKQorCQlyZXR1cm4gTlVMTDsKKworCWJpby0+Ymlfc2VjdG9yID0gaXNlY3QgLSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfdl9vZmZzZXQ7CisJYmlvLT5iaV9iZGV2ID0gYmUtPmJlX21kZXY7CisJYmlvLT5iaV9lbmRfaW8gPSBlbmRfaW87CisJYmlvLT5iaV9wcml2YXRlID0gcGFyOworCXJldHVybiBiaW87Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmlvICpibF9hZGRfcGFnZV90b19iaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgbnBnLCBpbnQgcncsCisJCQkJICAgICAgc2VjdG9yX3QgaXNlY3QsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsCisJCQkJICAgICAgdm9pZCAoKmVuZF9pbykoc3RydWN0IGJpbyAqLCBpbnQgZXJyKSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFyYWxsZWxfaW8gKnBhcikKK3sKK3JldHJ5OgorCWlmICghYmlvKSB7CisJCWJpbyA9IGJsX2FsbG9jX2luaXRfYmlvKG5wZywgaXNlY3QsIGJlLCBlbmRfaW8sIHBhcik7CisJCWlmICghYmlvKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCWlmIChiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBQQUdFX0NBQ0hFX1NJWkUsIDApIDwgUEFHRV9DQUNIRV9TSVpFKSB7CisJCWJpbyA9IGJsX3N1Ym1pdF9iaW8ocncsIGJpbyk7CisJCWdvdG8gcmV0cnk7CisJfQorCXJldHVybiBiaW87Cit9CisKK3N0YXRpYyB2b2lkIGJsX3NldF9sb19mYWlsKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQoreworCWlmIChsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlID09IElPTU9ERV9SVykgeworCQlkcHJpbnRrKCIlcyBTZXR0aW5nIGxheW91dCBJT01PREVfUlcgZmFpbCBiaXRcbiIsIF9fZnVuY19fKTsKKwkJc2V0X2JpdChsb19mYWlsX2JpdChJT01PREVfUlcpLCAmbHNlZy0+cGxzX2xheW91dC0+cGxoX2ZsYWdzKTsKKwl9IGVsc2UgeworCQlkcHJpbnRrKCIlcyBTZXR0aW5nIGxheW91dCBJT01PREVfUkVBRCBmYWlsIGJpdFxuIiwgX19mdW5jX18pOworCQlzZXRfYml0KGxvX2ZhaWxfYml0KElPTU9ERV9SRUFEKSwgJmxzZWctPnBsc19sYXlvdXQtPnBsaF9mbGFncyk7CisJfQorfQorCisvKiBUaGlzIGlzIGJhc2ljYWxseSBjb3BpZWQgZnJvbSBtcGFnZV9lbmRfaW9fcmVhZCAqLworc3RhdGljIHZvaWQgYmxfZW5kX2lvX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQoreworCXN0cnVjdCBwYXJhbGxlbF9pbyAqcGFyID0gYmlvLT5iaV9wcml2YXRlOworCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOworCXN0cnVjdCBuZnNfcmVhZF9kYXRhICpyZGF0YSA9IChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKXBhci0+ZGF0YTsKKworCWRvIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCisJCWlmICgtLWJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpCisJCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKKwkJaWYgKHVwdG9kYXRlKQorCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCX0gd2hpbGUgKGJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpOworCWlmICghdXB0b2RhdGUpIHsKKwkJaWYgKCFyZGF0YS0+cG5mc19lcnJvcikKKwkJCXJkYXRhLT5wbmZzX2Vycm9yID0gLUVJTzsKKwkJYmxfc2V0X2xvX2ZhaWwocmRhdGEtPmxzZWcpOworCX0KKwliaW9fcHV0KGJpbyk7CisJcHV0X3BhcmFsbGVsKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIGJsX3JlYWRfY2xlYW51cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJwY190YXNrICp0YXNrOworCXN0cnVjdCBuZnNfcmVhZF9kYXRhICpyZGF0YTsKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCXRhc2sgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dvcmspOworCXJkYXRhID0gY29udGFpbmVyX29mKHRhc2ssIHN0cnVjdCBuZnNfcmVhZF9kYXRhLCB0YXNrKTsKKwlwbmZzX2xkX3JlYWRfZG9uZShyZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitibF9lbmRfcGFyX2lvX3JlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqcmRhdGEgPSBkYXRhOworCisJSU5JVF9XT1JLKCZyZGF0YS0+dGFzay51LnRrX3dvcmssIGJsX3JlYWRfY2xlYW51cCk7CisJc2NoZWR1bGVfd29yaygmcmRhdGEtPnRhc2sudS50a193b3JrKTsKK30KKworLyogV2UgZG9uJ3Qgd2FudCBub3JtYWwgLnJwY19jYWxsX2RvbmUgY2FsbGJhY2sgdXNlZCwgc28gd2UgcmVwbGFjZSBpdAorICogd2l0aCB0aGlzIHN0dWIuCisgKi8KK3N0YXRpYyB2b2lkIGJsX3JwY19kb19ub3RoaW5nKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgZW51bSBwbmZzX3RyeV9zdGF0dXMKK2JsX3JlYWRfcGFnZWxpc3Qoc3RydWN0IG5mc19yZWFkX2RhdGEgKnJkYXRhKQoreworCWludCBpLCBob2xlOworCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSA9IE5VTEwsICpjb3dfcmVhZCA9IE5VTEw7CisJc2VjdG9yX3QgaXNlY3QsIGV4dGVudF9sZW5ndGggPSAwOworCXN0cnVjdCBwYXJhbGxlbF9pbyAqcGFyOworCWxvZmZfdCBmX29mZnNldCA9IHJkYXRhLT5hcmdzLm9mZnNldDsKKwlzaXplX3QgY291bnQgPSByZGF0YS0+YXJncy5jb3VudDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gcmRhdGEtPmFyZ3MucGFnZXM7CisJaW50IHBnX2luZGV4ID0gcmRhdGEtPmFyZ3MucGdiYXNlID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisKKwlkcHJpbnRrKCIlcyBlbnRlciBucl9wYWdlcyAldSBvZmZzZXQgJWxsZCBjb3VudCAlWmRcbiIsIF9fZnVuY19fLAorCSAgICAgICByZGF0YS0+bnBhZ2VzLCBmX29mZnNldCwgY291bnQpOworCisJcGFyID0gYWxsb2NfcGFyYWxsZWwocmRhdGEpOworCWlmICghcGFyKQorCQlnb3RvIHVzZV9tZHM7CisJcGFyLT5jYWxsX29wcyA9ICpyZGF0YS0+bWRzX29wczsKKwlwYXItPmNhbGxfb3BzLnJwY19jYWxsX2RvbmUgPSBibF9ycGNfZG9fbm90aGluZzsKKwlwYXItPnBuZnNfY2FsbGJhY2sgPSBibF9lbmRfcGFyX2lvX3JlYWQ7CisJLyogQXQgdGhpcyBwb2ludCwgd2UgY2FuIG5vIGxvbmdlciBqdW1wIHRvIHVzZV9tZHMgKi8KKworCWlzZWN0ID0gKHNlY3Rvcl90KSAoZl9vZmZzZXQgPj4gU0VDVE9SX1NISUZUKTsKKwkvKiBDb2RlIGFzc3VtZXMgZXh0ZW50cyBhcmUgcGFnZS1hbGlnbmVkICovCisJZm9yIChpID0gcGdfaW5kZXg7IGkgPCByZGF0YS0+bnBhZ2VzOyBpKyspIHsKKwkJaWYgKCFleHRlbnRfbGVuZ3RoKSB7CisJCQkvKiBXZSd2ZSB1c2VkIHVwIHRoZSBwcmV2aW91cyBleHRlbnQgKi8KKwkJCWJsX3B1dF9leHRlbnQoYmUpOworCQkJYmxfcHV0X2V4dGVudChjb3dfcmVhZCk7CisJCQliaW8gPSBibF9zdWJtaXRfYmlvKFJFQUQsIGJpbyk7CisJCQkvKiBHZXQgdGhlIG5leHQgb25lICovCisJCQliZSA9IGJsX2ZpbmRfZ2V0X2V4dGVudChCTEtfTFNFRzJFWFQocmRhdGEtPmxzZWcpLAorCQkJCQkgICAgIGlzZWN0LCAmY293X3JlYWQpOworCQkJaWYgKCFiZSkgeworCQkJCXJkYXRhLT5wbmZzX2Vycm9yID0gLUVJTzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWV4dGVudF9sZW5ndGggPSBiZS0+YmVfbGVuZ3RoIC0KKwkJCQkoaXNlY3QgLSBiZS0+YmVfZl9vZmZzZXQpOworCQkJaWYgKGNvd19yZWFkKSB7CisJCQkJc2VjdG9yX3QgY293X2xlbmd0aCA9IGNvd19yZWFkLT5iZV9sZW5ndGggLQorCQkJCQkoaXNlY3QgLSBjb3dfcmVhZC0+YmVfZl9vZmZzZXQpOworCQkJCWV4dGVudF9sZW5ndGggPSBtaW4oZXh0ZW50X2xlbmd0aCwgY293X2xlbmd0aCk7CisJCQl9CisJCX0KKwkJaG9sZSA9IGlzX2hvbGUoYmUsIGlzZWN0KTsKKwkJaWYgKGhvbGUgJiYgIWNvd19yZWFkKSB7CisJCQliaW8gPSBibF9zdWJtaXRfYmlvKFJFQUQsIGJpbyk7CisJCQkvKiBGaWxsIGhvbGUgdy8gemVyb2VzIHcvbyBhY2Nlc3NpbmcgZGV2aWNlICovCisJCQlkcHJpbnRrKCIlcyBaZXJvaW5nIHBhZ2UgZm9yIGhvbGVcbiIsIF9fZnVuY19fKTsKKwkJCXplcm9fdXNlcl9zZWdtZW50KHBhZ2VzW2ldLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOworCQkJcHJpbnRfcGFnZShwYWdlc1tpXSk7CisJCQlTZXRQYWdlVXB0b2RhdGUocGFnZXNbaV0pOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZV9yZWFkOworCisJCQliZV9yZWFkID0gKGhvbGUgJiYgY293X3JlYWQpID8gY293X3JlYWQgOiBiZTsKKwkJCWJpbyA9IGJsX2FkZF9wYWdlX3RvX2JpbyhiaW8sIHJkYXRhLT5ucGFnZXMgLSBpLCBSRUFELAorCQkJCQkJIGlzZWN0LCBwYWdlc1tpXSwgYmVfcmVhZCwKKwkJCQkJCSBibF9lbmRfaW9fcmVhZCwgcGFyKTsKKwkJCWlmIChJU19FUlIoYmlvKSkgeworCQkJCXJkYXRhLT5wbmZzX2Vycm9yID0gUFRSX0VSUihiaW8pOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCWlzZWN0ICs9IFBBR0VfQ0FDSEVfU0VDVE9SUzsKKwkJZXh0ZW50X2xlbmd0aCAtPSBQQUdFX0NBQ0hFX1NFQ1RPUlM7CisJfQorCWlmICgoaXNlY3QgPDwgU0VDVE9SX1NISUZUKSA+PSByZGF0YS0+aW5vZGUtPmlfc2l6ZSkgeworCQlyZGF0YS0+cmVzLmVvZiA9IDE7CisJCXJkYXRhLT5yZXMuY291bnQgPSByZGF0YS0+aW5vZGUtPmlfc2l6ZSAtIGZfb2Zmc2V0OworCX0gZWxzZSB7CisJCXJkYXRhLT5yZXMuY291bnQgPSAoaXNlY3QgPDwgU0VDVE9SX1NISUZUKSAtIGZfb2Zmc2V0OworCX0KK291dDoKKwlibF9wdXRfZXh0ZW50KGJlKTsKKwlibF9wdXRfZXh0ZW50KGNvd19yZWFkKTsKKwlibF9zdWJtaXRfYmlvKFJFQUQsIGJpbyk7CisJcHV0X3BhcmFsbGVsKHBhcik7CisJcmV0dXJuIFBORlNfQVRURU1QVEVEOworCisgdXNlX21kczoKKwlkcHJpbnRrKCJHaXZpbmcgdXAgYW5kIHVzaW5nIG5vcm1hbCBORlNcbiIpOworCXJldHVybiBQTkZTX05PVF9BVFRFTVBURUQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfZXh0ZW50c193cml0dGVuKHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsCisJCQkJIF9fdTY0IG9mZnNldCwgX191MzIgY291bnQpCit7CisJc2VjdG9yX3QgaXNlY3QsIGVuZDsKKwlzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJlOworCisJZHByaW50aygiJXMoJWxsdSwgJXUpXG4iLCBfX2Z1bmNfXywgb2Zmc2V0LCBjb3VudCk7CisJaWYgKGNvdW50ID09IDApCisJCXJldHVybjsKKwlpc2VjdCA9IChvZmZzZXQgJiAobG9uZykoUEFHRV9DQUNIRV9NQVNLKSkgPj4gU0VDVE9SX1NISUZUOworCWVuZCA9IChvZmZzZXQgKyBjb3VudCArIFBBR0VfQ0FDSEVfU0laRSAtIDEpICYgKGxvbmcpKFBBR0VfQ0FDSEVfTUFTSyk7CisJZW5kID4+PSBTRUNUT1JfU0hJRlQ7CisJd2hpbGUgKGlzZWN0IDwgZW5kKSB7CisJCXNlY3Rvcl90IGxlbjsKKwkJYmUgPSBibF9maW5kX2dldF9leHRlbnQoYmwsIGlzZWN0LCBOVUxMKTsKKwkJQlVHX09OKCFiZSk7IC8qIEZJWE1FICovCisJCWxlbiA9IG1pbihlbmQsIGJlLT5iZV9mX29mZnNldCArIGJlLT5iZV9sZW5ndGgpIC0gaXNlY3Q7CisJCWlmIChiZS0+YmVfc3RhdGUgPT0gUE5GU19CTE9DS19JTlZBTElEX0RBVEEpCisJCQlibF9tYXJrX2Zvcl9jb21taXQoYmUsIGlzZWN0LCBsZW4pOyAvKiBXaGF0IGlmIGZhaWxzPyAqLworCQlpc2VjdCArPSBsZW47CisJCWJsX3B1dF9leHRlbnQoYmUpOworCX0KK30KKworc3RhdGljIHZvaWQgYmxfZW5kX2lvX3dyaXRlX3plcm8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQoreworCXN0cnVjdCBwYXJhbGxlbF9pbyAqcGFyID0gYmlvLT5iaV9wcml2YXRlOworCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOworCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEgPSAoc3RydWN0IG5mc193cml0ZV9kYXRhICopcGFyLT5kYXRhOworCisJZG8geworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisKKwkJaWYgKC0tYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYykKKwkJCXByZWZldGNodygmYnZlYy0+YnZfcGFnZS0+ZmxhZ3MpOworCQkvKiBUaGlzIGlzIHRoZSB6ZXJvaW5nIHBhZ2Ugd2UgYWRkZWQgKi8KKwkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfSB3aGlsZSAoYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYyk7CisJaWYgKCF1cHRvZGF0ZSkgeworCQlpZiAoIXdkYXRhLT5wbmZzX2Vycm9yKQorCQkJd2RhdGEtPnBuZnNfZXJyb3IgPSAtRUlPOworCQlibF9zZXRfbG9fZmFpbCh3ZGF0YS0+bHNlZyk7CisJfQorCWJpb19wdXQoYmlvKTsKKwlwdXRfcGFyYWxsZWwocGFyKTsKK30KKworLyogVGhpcyBpcyBiYXNpY2FsbHkgY29waWVkIGZyb20gbXBhZ2VfZW5kX2lvX3JlYWQgKi8KK3N0YXRpYyB2b2lkIGJsX2VuZF9pb193cml0ZShzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCit7CisJc3RydWN0IHBhcmFsbGVsX2lvICpwYXIgPSBiaW8tPmJpX3ByaXZhdGU7CisJY29uc3QgaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CisJc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSA9IChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKilwYXItPmRhdGE7CisKKwlpZiAoIXVwdG9kYXRlKSB7CisJCWlmICghd2RhdGEtPnBuZnNfZXJyb3IpCisJCQl3ZGF0YS0+cG5mc19lcnJvciA9IC1FSU87CisJCWJsX3NldF9sb19mYWlsKHdkYXRhLT5sc2VnKTsKKwl9CisJYmlvX3B1dChiaW8pOworCXB1dF9wYXJhbGxlbChwYXIpOworfQorCisvKiBGdW5jdGlvbiBzY2hlZHVsZWQgZm9yIGNhbGwgZHVyaW5nIGJsX2VuZF9wYXJfaW9fd3JpdGUsCisgKiBpdCBtYXJrcyBzZWN0b3JzIGFzIHdyaXR0ZW4gYW5kIGV4dGVuZHMgdGhlIGNvbW1pdGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIGJsX3dyaXRlX2NsZWFudXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKwlzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKndkYXRhOworCWRwcmludGsoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJdGFzayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd29yayk7CisJd2RhdGEgPSBjb250YWluZXJfb2YodGFzaywgc3RydWN0IG5mc193cml0ZV9kYXRhLCB0YXNrKTsKKwlpZiAoIXdkYXRhLT5wbmZzX2Vycm9yKSB7CisJCS8qIE1hcmtzIGZvciBMQVlPVVRDT01NSVQgKi8KKwkJbWFya19leHRlbnRzX3dyaXR0ZW4oQkxLX0xTRUcyRVhUKHdkYXRhLT5sc2VnKSwKKwkJCQkgICAgIHdkYXRhLT5hcmdzLm9mZnNldCwgd2RhdGEtPmFyZ3MuY291bnQpOworCX0KKwlwbmZzX2xkX3dyaXRlX2RvbmUod2RhdGEpOworfQorCisvKiBDYWxsZWQgd2hlbiBsYXN0IG9mIGJpb3MgYXNzb2NpYXRlZCB3aXRoIGEgYmxfd3JpdGVfcGFnZWxpc3QgY2FsbCBmaW5pc2hlcyAqLworc3RhdGljIHZvaWQgYmxfZW5kX3Bhcl9pb193cml0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEgPSBkYXRhOworCisJd2RhdGEtPnRhc2sudGtfc3RhdHVzID0gMDsKKwl3ZGF0YS0+dmVyZi5jb21taXR0ZWQgPSBORlNfRklMRV9TWU5DOworCUlOSVRfV09SSygmd2RhdGEtPnRhc2sudS50a193b3JrLCBibF93cml0ZV9jbGVhbnVwKTsKKwlzY2hlZHVsZV93b3JrKCZ3ZGF0YS0+dGFzay51LnRrX3dvcmspOworfQorCisvKiBGSVhNRSBTVFVCIC0gbWFyayBpbnRlcnNlY3Rpb24gb2YgbGF5b3V0IGFuZCBwYWdlIGFzIGJhZCwgc28gaXMgbm90CisgKiB1c2VkIGFnYWluLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2JhZF9yZWFkKHZvaWQpCit7CisJcmV0dXJuOworfQorCisvKgorICogbWFwX2Jsb2NrOiAgbWFwIGEgcmVxdWVzdGVkIEkvMCBibG9jayAoaXNlY3QpIGludG8gYW4gb2Zmc2V0IGluIHRoZSBMVk0KKyAqIGJsb2NrX2RldmljZQorICovCitzdGF0aWMgdm9pZAorbWFwX2Jsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHNlY3Rvcl90IGlzZWN0LCBzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJlKQoreworCWRwcmludGsoIiVzIGVudGVyIGJlPSVwXG4iLCBfX2Z1bmNfXywgYmUpOworCisJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOworCWJoLT5iX2JkZXYgPSBiZS0+YmVfbWRldjsKKwliaC0+Yl9ibG9ja25yID0gKGlzZWN0IC0gYmUtPmJlX2Zfb2Zmc2V0ICsgYmUtPmJlX3Zfb2Zmc2V0KSA+PgorCSAgICAoYmUtPmJlX21kZXYtPmJkX2lub2RlLT5pX2Jsa2JpdHMgLSBTRUNUT1JfU0hJRlQpOworCisJZHByaW50aygiJXMgaXNlY3QgJWxsdSwgYmgtPmJfYmxvY2tuciAlbGQsIHVzaW5nIGJzaXplICVaZFxuIiwKKwkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpaXNlY3QsIChsb25nKWJoLT5iX2Jsb2NrbnIsCisJCWJoLT5iX3NpemUpOworCXJldHVybjsKK30KKworLyogR2l2ZW4gYW4gdW5tYXBwZWQgcGFnZSwgemVybyBpdCBvciByZWFkIGluIHBhZ2UgZm9yIENPVywgcGFnZSBpcyBsb2NrZWQKKyAqIGJ5IGNhbGxlci4KKyAqLworc3RhdGljIGludAoraW5pdF9wYWdlX2Zvcl93cml0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpjb3dfcmVhZCkKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlzZWN0b3JfdCBpc2VjdDsKKworCWRwcmludGsoIiVzIGVudGVyLCAlcFxuIiwgX19mdW5jX18sIHBhZ2UpOworCUJVR19PTihQYWdlVXB0b2RhdGUocGFnZSkpOworCWlmICghY293X3JlYWQpIHsKKwkJemVyb191c2VyX3NlZ21lbnQocGFnZSwgMCwgUEFHRV9TSVpFKTsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJYmggPSBhbGxvY19wYWdlX2J1ZmZlcnMocGFnZSwgUEFHRV9DQUNIRV9TSVpFLCAwKTsKKwlpZiAoIWJoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpc2VjdCA9IChzZWN0b3JfdCkgcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TRUNUT1JfU0hJRlQ7CisJbWFwX2Jsb2NrKGJoLCBpc2VjdCwgY293X3JlYWQpOworCWlmICghYmhfdXB0b2RhdGVfb3JfbG9jayhiaCkpCisJCXJldCA9IGJoX3N1Ym1pdF9yZWFkKGJoKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXA7CisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCitjbGVhbnVwOgorCWJsX3B1dF9leHRlbnQoY293X3JlYWQpOworCWlmIChiaCkKKwkJZnJlZV9idWZmZXJfaGVhZChiaCk7CisJaWYgKHJldCkgeworCQkvKiBOZWVkIHRvIG1hcmsgbGF5b3V0IHdpdGggYmFkIHJlYWQuLi5zaG91bGQgbm93CisJCSAqIGp1c3QgdXNlIG5mczQgZm9yIHJlYWRzIGFuZCB3cml0ZXMuCisJCSAqLworCQltYXJrX2JhZF9yZWFkKCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBuZnNfdHJ5X3N0YXR1cworYmxfd3JpdGVfcGFnZWxpc3Qoc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSwgaW50IHN5bmMpCit7CisJaW50IGksIHJldCwgbnBnX3plcm8sIHBnX2luZGV4LCBsYXN0ID0gMDsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUgPSBOVUxMLCAqY293X3JlYWQgPSBOVUxMOworCXNlY3Rvcl90IGlzZWN0LCBsYXN0X2lzZWN0ID0gMCwgZXh0ZW50X2xlbmd0aCA9IDA7CisJc3RydWN0IHBhcmFsbGVsX2lvICpwYXI7CisJbG9mZl90IG9mZnNldCA9IHdkYXRhLT5hcmdzLm9mZnNldDsKKwlzaXplX3QgY291bnQgPSB3ZGF0YS0+YXJncy5jb3VudDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gd2RhdGEtPmFyZ3MucGFnZXM7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBpbmRleDsKKwl1NjQgdGVtcDsKKwlpbnQgbnBnX3Blcl9ibG9jayA9CisJICAgIE5GU19TRVJWRVIod2RhdGEtPmlub2RlKS0+cG5mc19ibGtzaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisKKwlkcHJpbnRrKCIlcyBlbnRlciwgJVp1QCVsbGRcbiIsIF9fZnVuY19fLCBjb3VudCwgb2Zmc2V0KTsKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZGF0YS0+cGFnZXMgaXMgYSAoc2VxdWVudGlhbCkgbGlzdCBvZiBuZnNfcGFnZXMuCisJICogV2Ugd2FudCB0byB3cml0ZSBlYWNoLCBhbmQgaWYgdGhlcmUgaXMgYW4gZXJyb3Igc2V0IHBuZnNfZXJyb3IKKwkgKiB0byBoYXZlIGl0IHJlZG9uZSB1c2luZyBuZnMuCisJICovCisJcGFyID0gYWxsb2NfcGFyYWxsZWwod2RhdGEpOworCWlmICghcGFyKQorCQlyZXR1cm4gUE5GU19OT1RfQVRURU1QVEVEOworCXBhci0+Y2FsbF9vcHMgPSAqd2RhdGEtPm1kc19vcHM7CisJcGFyLT5jYWxsX29wcy5ycGNfY2FsbF9kb25lID0gYmxfcnBjX2RvX25vdGhpbmc7CisJcGFyLT5wbmZzX2NhbGxiYWNrID0gYmxfZW5kX3Bhcl9pb193cml0ZTsKKwkvKiBBdCB0aGlzIHBvaW50LCBoYXZlIHRvIGJlIG1vcmUgY2FyZWZ1bCB3aXRoIGVycm9yIGhhbmRsaW5nICovCisKKwlpc2VjdCA9IChzZWN0b3JfdCkgKChvZmZzZXQgJiAobG9uZylQQUdFX0NBQ0hFX01BU0spID4+IFNFQ1RPUl9TSElGVCk7CisJYmUgPSBibF9maW5kX2dldF9leHRlbnQoQkxLX0xTRUcyRVhUKHdkYXRhLT5sc2VnKSwgaXNlY3QsICZjb3dfcmVhZCk7CisJaWYgKCFiZSB8fCAhaXNfd3JpdGFibGUoYmUsIGlzZWN0KSkgeworCQlkcHJpbnRrKCIlcyBubyBtYXRjaGluZyBleHRlbnRzIVxuIiwgX19mdW5jX18pOworCQl3ZGF0YS0+cG5mc19lcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEZpcnN0IHBhZ2UgaW5zaWRlIElOVkFMSUQgZXh0ZW50ICovCisJaWYgKGJlLT5iZV9zdGF0ZSA9PSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSkgeworCQl0ZW1wID0gb2Zmc2V0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCW5wZ196ZXJvID0gZG9fZGl2KHRlbXAsIG5wZ19wZXJfYmxvY2spOworCQlpc2VjdCA9IChzZWN0b3JfdCkgKCgob2Zmc2V0IC0gbnBnX3plcm8gKiBQQUdFX0NBQ0hFX1NJWkUpICYKKwkJCQkgICAgIChsb25nKVBBR0VfQ0FDSEVfTUFTSykgPj4gU0VDVE9SX1NISUZUKTsKKwkJZXh0ZW50X2xlbmd0aCA9IGJlLT5iZV9sZW5ndGggLSAoaXNlY3QgLSBiZS0+YmVfZl9vZmZzZXQpOworCitmaWxsX2ludmFsaWRfZXh0OgorCQlkcHJpbnRrKCIlcyBuZWVkIHRvIHplcm8gJWQgcGFnZXNcbiIsIF9fZnVuY19fLCBucGdfemVybyk7CisJCWZvciAoO25wZ196ZXJvID4gMDsgbnBnX3plcm8tLSkgeworCQkJLyogcGFnZSByZWYgcmVsZWFzZWQgaW4gYmxfZW5kX2lvX3dyaXRlX3plcm8gKi8KKwkJCWluZGV4ID0gaXNlY3QgPj4gUEFHRV9DQUNIRV9TRUNUT1JfU0hJRlQ7CisJCQlkcHJpbnRrKCIlcyB6ZXJvICVkdGggcGFnZTogaW5kZXggJWx1IGlzZWN0ICVsbHVcbiIsCisJCQkJX19mdW5jX18sIG5wZ196ZXJvLCBpbmRleCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWlzZWN0KTsKKwkJCXBhZ2UgPQorCQkJICAgIGZpbmRfb3JfY3JlYXRlX3BhZ2Uod2RhdGEtPmlub2RlLT5pX21hcHBpbmcsIGluZGV4LAorCQkJCQkJR0ZQX05PRlMpOworCQkJaWYgKCFwYWdlKSB7CisJCQkJZHByaW50aygiJXMgb29tXG4iLCBfX2Z1bmNfXyk7CisJCQkJd2RhdGEtPnBuZnNfZXJyb3IgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQkvKiBQYWdlRGlydHk6IE90aGVyIHdpbGwgd3JpdGUgdGhpcyBvdXQKKwkJCSAqIFBhZ2VXcml0ZWJhY2s6IE90aGVyIGlzIHdyaXRpbmcgdGhpcyBvdXQKKwkJCSAqIFBhZ2VVcHRvZGF0ZTogSXQgd2FzIHJlYWQgYmVmb3JlCisJCQkgKiBzZWN0b3JfaW5pdGlhbGl6ZWQ6IGFscmVhZHkgd3JpdHRlbiBvdXQKKwkJCSAqLworCQkJaWYgKFBhZ2VEaXJ0eShwYWdlKSB8fCBQYWdlV3JpdGViYWNrKHBhZ2UpIHx8CisJCQkgICAgYmxfaXNfc2VjdG9yX2luaXQoYmUtPmJlX2ludmFsLCBpc2VjdCkpIHsKKwkJCQlwcmludF9wYWdlKHBhZ2UpOworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlnb3RvIG5leHRfcGFnZTsKKwkJCX0KKwkJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCQkJLyogTmV3IHBhZ2UsIHJlYWRpbiBvciB6ZXJvIGl0ICovCisJCQkJaW5pdF9wYWdlX2Zvcl93cml0ZShwYWdlLCBjb3dfcmVhZCk7CisJCQl9CisJCQlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKworCQkJcmV0ID0gYmxfbWFya19zZWN0b3JzX2luaXQoYmUtPmJlX2ludmFsLCBpc2VjdCwKKwkJCQkJCSAgICAgICBQQUdFX0NBQ0hFX1NFQ1RPUlMsCisJCQkJCQkgICAgICAgTlVMTCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJCWRwcmludGsoIiVzIGJsX21hcmtfc2VjdG9yc19pbml0IGZhaWwgJWRcbiIsCisJCQkJCV9fZnVuY19fLCByZXQpOworCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQkJd2RhdGEtPnBuZnNfZXJyb3IgPSByZXQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQliaW8gPSBibF9hZGRfcGFnZV90b19iaW8oYmlvLCBucGdfemVybywgV1JJVEUsCisJCQkJCQkgaXNlY3QsIHBhZ2UsIGJlLAorCQkJCQkJIGJsX2VuZF9pb193cml0ZV96ZXJvLCBwYXIpOworCQkJaWYgKElTX0VSUihiaW8pKSB7CisJCQkJd2RhdGEtPnBuZnNfZXJyb3IgPSBQVFJfRVJSKGJpbyk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiBiaV9lbmRfaW8gKi8KKwkJCW1hcmtfZXh0ZW50c193cml0dGVuKEJMS19MU0VHMkVYVCh3ZGF0YS0+bHNlZyksCisJCQkJCSAgICAgcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCwKKwkJCQkJICAgICBQQUdFX0NBQ0hFX1NJWkUpOworbmV4dF9wYWdlOgorCQkJaXNlY3QgKz0gUEFHRV9DQUNIRV9TRUNUT1JTOworCQkJZXh0ZW50X2xlbmd0aCAtPSBQQUdFX0NBQ0hFX1NFQ1RPUlM7CisJCX0KKwkJaWYgKGxhc3QpCisJCQlnb3RvIHdyaXRlX2RvbmU7CisJfQorCWJpbyA9IGJsX3N1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisKKwkvKiBNaWRkbGUgcGFnZXMgKi8KKwlwZ19pbmRleCA9IHdkYXRhLT5hcmdzLnBnYmFzZSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWZvciAoaSA9IHBnX2luZGV4OyBpIDwgd2RhdGEtPm5wYWdlczsgaSsrKSB7CisJCWlmICghZXh0ZW50X2xlbmd0aCkgeworCQkJLyogV2UndmUgdXNlZCB1cCB0aGUgcHJldmlvdXMgZXh0ZW50ICovCisJCQlibF9wdXRfZXh0ZW50KGJlKTsKKwkJCWJpbyA9IGJsX3N1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisJCQkvKiBHZXQgdGhlIG5leHQgb25lICovCisJCQliZSA9IGJsX2ZpbmRfZ2V0X2V4dGVudChCTEtfTFNFRzJFWFQod2RhdGEtPmxzZWcpLAorCQkJCQkgICAgIGlzZWN0LCBOVUxMKTsKKwkJCWlmICghYmUgfHwgIWlzX3dyaXRhYmxlKGJlLCBpc2VjdCkpIHsKKwkJCQl3ZGF0YS0+cG5mc19lcnJvciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlleHRlbnRfbGVuZ3RoID0gYmUtPmJlX2xlbmd0aCAtCisJCQkgICAgKGlzZWN0IC0gYmUtPmJlX2Zfb2Zmc2V0KTsKKwkJfQorCQlpZiAoYmUtPmJlX3N0YXRlID09IFBORlNfQkxPQ0tfSU5WQUxJRF9EQVRBKSB7CisJCQlyZXQgPSBibF9tYXJrX3NlY3RvcnNfaW5pdChiZS0+YmVfaW52YWwsIGlzZWN0LAorCQkJCQkJICAgICAgIFBBR0VfQ0FDSEVfU0VDVE9SUywKKwkJCQkJCSAgICAgICBOVUxMKTsKKwkJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQkJZHByaW50aygiJXMgYmxfbWFya19zZWN0b3JzX2luaXQgZmFpbCAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJldCk7CisJCQkJd2RhdGEtPnBuZnNfZXJyb3IgPSByZXQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJYmlvID0gYmxfYWRkX3BhZ2VfdG9fYmlvKGJpbywgd2RhdGEtPm5wYWdlcyAtIGksIFdSSVRFLAorCQkJCQkgaXNlY3QsIHBhZ2VzW2ldLCBiZSwKKwkJCQkJIGJsX2VuZF9pb193cml0ZSwgcGFyKTsKKwkJaWYgKElTX0VSUihiaW8pKSB7CisJCQl3ZGF0YS0+cG5mc19lcnJvciA9IFBUUl9FUlIoYmlvKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlzZWN0ICs9IFBBR0VfQ0FDSEVfU0VDVE9SUzsKKwkJbGFzdF9pc2VjdCA9IGlzZWN0OworCQlleHRlbnRfbGVuZ3RoIC09IFBBR0VfQ0FDSEVfU0VDVE9SUzsKKwl9CisKKwkvKiBMYXN0IHBhZ2UgaW5zaWRlIElOVkFMSUQgZXh0ZW50ICovCisJaWYgKGJlLT5iZV9zdGF0ZSA9PSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSkgeworCQliaW8gPSBibF9zdWJtaXRfYmlvKFdSSVRFLCBiaW8pOworCQl0ZW1wID0gbGFzdF9pc2VjdCA+PiBQQUdFX0NBQ0hFX1NFQ1RPUl9TSElGVDsKKwkJbnBnX3plcm8gPSBucGdfcGVyX2Jsb2NrIC0gZG9fZGl2KHRlbXAsIG5wZ19wZXJfYmxvY2spOworCQlpZiAobnBnX3plcm8gPCBucGdfcGVyX2Jsb2NrKSB7CisJCQlsYXN0ID0gMTsKKwkJCWdvdG8gZmlsbF9pbnZhbGlkX2V4dDsKKwkJfQorCX0KKword3JpdGVfZG9uZToKKwl3ZGF0YS0+cmVzLmNvdW50ID0gKGxhc3RfaXNlY3QgPDwgU0VDVE9SX1NISUZUKSAtIChvZmZzZXQpOworCWlmIChjb3VudCA8IHdkYXRhLT5yZXMuY291bnQpIHsKKwkJd2RhdGEtPnJlcy5jb3VudCA9IGNvdW50OworCX0KK291dDoKKwlibF9wdXRfZXh0ZW50KGJlKTsKKwlibF9zdWJtaXRfYmlvKFdSSVRFLCBiaW8pOworCXB1dF9wYXJhbGxlbChwYXIpOworCXJldHVybiBQTkZTX0FUVEVNUFRFRDsKK30KKworLyogRklYTUUgLSByYW5nZSBpZ25vcmVkICovCitzdGF0aWMgdm9pZAorcmVsZWFzZV9leHRlbnRzKHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsIHN0cnVjdCBwbmZzX2xheW91dF9yYW5nZSAqcmFuZ2UpCit7CisJaW50IGk7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZTsKKworCXNwaW5fbG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgRVhURU5UX0xJU1RTOyBpKyspIHsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZibC0+YmxfZXh0ZW50c1tpXSkpIHsKKwkJCWJlID0gbGlzdF9maXJzdF9lbnRyeSgmYmwtPmJsX2V4dGVudHNbaV0sCisJCQkJCSAgICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCwKKwkJCQkJICAgICAgYmVfbm9kZSk7CisJCQlsaXN0X2RlbCgmYmUtPmJlX25vZGUpOworCQkJYmxfcHV0X2V4dGVudChiZSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmJsLT5ibF9leHRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2ludmFsX21hcmtzKHN0cnVjdCBwbmZzX2ludmFsX21hcmtpbmdzICptYXJrcykKK3sKKwlzdHJ1Y3QgcG5mc19pbnZhbF90cmFja2luZyAqcG9zLCAqdGVtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRlbXAsICZtYXJrcy0+aW1fdHJlZS5tdHRfc3R1YiwgaXRfbGluaykgeworCQlsaXN0X2RlbCgmcG9zLT5pdF9saW5rKTsKKwkJa2ZyZWUocG9zKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBibF9mcmVlX2xheW91dF9oZHIoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pCit7CisJc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICpibCA9IEJMS19MTzJFWFQobG8pOworCisJZHByaW50aygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlyZWxlYXNlX2V4dGVudHMoYmwsIE5VTEwpOworCXJlbGVhc2VfaW52YWxfbWFya3MoJmJsLT5ibF9pbnZhbCk7CisJa2ZyZWUoYmwpOworfQorCitzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqYmxfYWxsb2NfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmw7CisKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWJsID0ga3phbGxvYyhzaXplb2YoKmJsKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIWJsKQorCQlyZXR1cm4gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmYmwtPmJsX2V4dF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYmwtPmJsX2V4dGVudHNbMF0pOworCUlOSVRfTElTVF9IRUFEKCZibC0+YmxfZXh0ZW50c1sxXSk7CisJSU5JVF9MSVNUX0hFQUQoJmJsLT5ibF9jb21taXQpOworCUlOSVRfTElTVF9IRUFEKCZibC0+YmxfY29tbWl0dGluZyk7CisJYmwtPmJsX2NvdW50ID0gMDsKKwlibC0+YmxfYmxvY2tzaXplID0gTkZTX1NFUlZFUihpbm9kZSktPnBuZnNfYmxrc2l6ZSA+PiBTRUNUT1JfU0hJRlQ7CisJQkxfSU5JVF9JTlZBTF9NQVJLUygmYmwtPmJsX2ludmFsLCBibC0+YmxfYmxvY2tzaXplKTsKKwlyZXR1cm4gJmJsLT5ibF9sYXlvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJsX2ZyZWVfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWtmcmVlKGxzZWcpOworfQorCisvKiBXZSBwcmV0dHkgbXVjaCBpZ25vcmUgbHNlZywgYW5kIHN0b3JlIGFsbCBkYXRhIGxheW91dCB3aWRlLCBzbyB3ZQorICogY2FuIGNvcnJlY3RseSBtZXJnZS4KKyAqLworc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpibF9hbGxvY19sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAorCQkJCQkJIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxnciwKKwkJCQkJCSBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWc7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJbHNlZyA9IGt6YWxsb2Moc2l6ZW9mKCpsc2VnKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIWxzZWcpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXN0YXR1cyA9IG5mczRfYmxrX3Byb2Nlc3NfbGF5b3V0Z2V0KGxvLCBsZ3IsIGdmcF9mbGFncyk7CisJaWYgKHN0YXR1cykgeworCQkvKiBXZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGZ1bGwtYmxvd24gYmxfZnJlZV9sc2VnLAorCQkgKiBzaW5jZSBvbiBlcnJvciBleHRlbnRzIHdlcmUgbm90IHRvdWNoZWQuCisJCSAqLworCQlrZnJlZShsc2VnKTsKKwkJcmV0dXJuIEVSUl9QVFIoc3RhdHVzKTsKKwl9CisJcmV0dXJuIGxzZWc7Cit9CisKK3N0YXRpYyB2b2lkCitibF9lbmNvZGVfbGF5b3V0Y29tbWl0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2FyZ3MgKmFyZykKK3sKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWVuY29kZV9wbmZzX2Jsb2NrX2xheW91dHVwZGF0ZShCTEtfTE8yRVhUKGxvKSwgeGRyLCBhcmcpOworfQorCitzdGF0aWMgdm9pZAorYmxfY2xlYW51cF9sYXlvdXRjb21taXQoc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2RhdGEgKmxjZGF0YSkKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyA9IE5GU19JKGxjZGF0YS0+YXJncy5pbm9kZSktPmxheW91dDsKKworCWRwcmludGsoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJY2xlYW5fcG5mc19ibG9ja19sYXlvdXR1cGRhdGUoQkxLX0xPMkVYVChsbyksICZsY2RhdGEtPmFyZ3MsIGxjZGF0YS0+cmVzLnN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYmxrX21vdW50aWQoc3RydWN0IGJsb2NrX21vdW50X2lkICptaWQpCit7CisJaWYgKG1pZCkgeworCQlzdHJ1Y3QgcG5mc19ibG9ja19kZXYgKmRldjsKKwkJc3Bpbl9sb2NrKCZtaWQtPmJtX2xvY2spOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1pZC0+Ym1fZGV2bGlzdCkpIHsKKwkJCWRldiA9IGxpc3RfZmlyc3RfZW50cnkoJm1pZC0+Ym1fZGV2bGlzdCwKKwkJCQkJICAgICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2RldiwKKwkJCQkJICAgICAgIGJtX25vZGUpOworCQkJbGlzdF9kZWwoJmRldi0+Ym1fbm9kZSk7CisJCQlibF9mcmVlX2Jsb2NrX2RldihkZXYpOworCQl9CisJCXNwaW5fdW5sb2NrKCZtaWQtPmJtX2xvY2spOworCQlrZnJlZShtaWQpOworCX0KK30KKworLyogVGhpcyBpcyBtb3N0bHkgY29waWVkIGZyb20gdGhlIGZpbGVsYXlvdXQncyBnZXRfZGV2aWNlX2luZm8gZnVuY3Rpb24uCisgKiBJdCBzZWVtcyBtdWNoIG9mIHRoaXMgc2hvdWxkIGJlIGF0IHRoZSBnZW5lcmljIHBuZnMgbGV2ZWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG5mc19ibG9ja19kZXYgKgorbmZzNF9ibGtfZ2V0X2RldmljZWluZm8oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgY29uc3Qgc3RydWN0IG5mc19maCAqZmgsCisJCQlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqZF9pZCkKK3sKKwlzdHJ1Y3QgcG5mc19kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcG5mc19ibG9ja19kZXYgKnJ2ID0gTlVMTDsKKwl1MzIgbWF4X3Jlc3Bfc3o7CisJaW50IG1heF9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlpbnQgaSwgcmM7CisKKwkvKgorCSAqIFVzZSB0aGUgc2Vzc2lvbiBtYXggcmVzcG9uc2Ugc2l6ZSBhcyB0aGUgYmFzaXMgZm9yIHNldHRpbmcKKwkgKiBHRVRERVZJQ0VJTkZPJ3MgbWF4Y291bnQKKwkgKi8KKwltYXhfcmVzcF9zeiA9IHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfc2Vzc2lvbi0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3o7CisJbWF4X3BhZ2VzID0gbWF4X3Jlc3Bfc3ogPj4gUEFHRV9TSElGVDsKKwlkcHJpbnRrKCIlcyBtYXhfcmVzcF9zeiAldSBtYXhfcGFnZXMgJWRcbiIsCisJCV9fZnVuY19fLCBtYXhfcmVzcF9zeiwgbWF4X3BhZ2VzKTsKKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfTk9GUyk7CisJaWYgKCFkZXYpIHsKKwkJZHByaW50aygiJXMga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcGFnZXMgPSBremFsbG9jKG1heF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX05PRlMpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCWtmcmVlKGRldik7CisJCXJldHVybiBOVUxMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9OT0ZTKTsKKwkJaWYgKCFwYWdlc1tpXSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbWVtY3B5KCZkZXYtPmRldl9pZCwgZF9pZCwgc2l6ZW9mKCpkX2lkKSk7CisJZGV2LT5sYXlvdXRfdHlwZSA9IExBWU9VVF9CTE9DS19WT0xVTUU7CisJZGV2LT5wYWdlcyA9IHBhZ2VzOworCWRldi0+cGdiYXNlID0gMDsKKwlkZXYtPnBnbGVuID0gUEFHRV9TSVpFICogbWF4X3BhZ2VzOworCWRldi0+bWluY291bnQgPSAwOworCisJZHByaW50aygiJXM6IGRldl9pZDogJXNcbiIsIF9fZnVuY19fLCBkZXYtPmRldl9pZC5kYXRhKTsKKwlyYyA9IG5mczRfcHJvY19nZXRkZXZpY2VpbmZvKHNlcnZlciwgZGV2KTsKKwlkcHJpbnRrKCIlcyBnZXRkZXZpY2UgaW5mbyByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKworCXJ2ID0gbmZzNF9ibGtfZGVjb2RlX2RldmljZShzZXJ2ZXIsIGRldik7Cisgb3V0X2ZyZWU6CisJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKQorCQlfX2ZyZWVfcGFnZShwYWdlc1tpXSk7CisJa2ZyZWUocGFnZXMpOworCWtmcmVlKGRldik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50CitibF9zZXRfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoKQoreworCXN0cnVjdCBibG9ja19tb3VudF9pZCAqYl9tdF9pZCA9IE5VTEw7CisJc3RydWN0IHBuZnNfZGV2aWNlbGlzdCAqZGxpc3QgPSBOVUxMOworCXN0cnVjdCBwbmZzX2Jsb2NrX2RldiAqYmRldjsKKwlMSVNUX0hFQUQoYmxvY2tfZGlza2xpc3QpOworCWludCBzdGF0dXMgPSAwLCBpOworCisJZHByaW50aygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCWlmIChzZXJ2ZXItPnBuZnNfYmxrc2l6ZSA9PSAwKSB7CisJCWRwcmludGsoIiVzIFNlcnZlciBkaWQgbm90IHJldHVybiBibGtzaXplXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwliX210X2lkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJsb2NrX21vdW50X2lkKSwgR0ZQX05PRlMpOworCWlmICghYl9tdF9pZCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisJLyogSW5pdGlhbGl6ZSBuZnM0IGJsb2NrIGxheW91dCBtb3VudCBpZCAqLworCXNwaW5fbG9ja19pbml0KCZiX210X2lkLT5ibV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmYl9tdF9pZC0+Ym1fZGV2bGlzdCk7CisKKwlkbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2RldmljZWxpc3QpLCBHRlBfTk9GUyk7CisJaWYgKCFkbGlzdCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisJZGxpc3QtPmVvZiA9IDA7CisJd2hpbGUgKCFkbGlzdC0+ZW9mKSB7CisJCXN0YXR1cyA9IG5mczRfcHJvY19nZXRkZXZpY2VsaXN0KHNlcnZlciwgZmgsIGRsaXN0KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gb3V0X2Vycm9yOworCQlkcHJpbnRrKCIlcyBHRVRERVZJQ0VMSVNUIG51bWRldnM9JWksIGVvZj0laVxuIiwKKwkJCV9fZnVuY19fLCBkbGlzdC0+bnVtX2RldnMsIGRsaXN0LT5lb2YpOworCQlmb3IgKGkgPSAwOyBpIDwgZGxpc3QtPm51bV9kZXZzOyBpKyspIHsKKwkJCWJkZXYgPSBuZnM0X2Jsa19nZXRfZGV2aWNlaW5mbyhzZXJ2ZXIsIGZoLAorCQkJCQkJICAgICAgICZkbGlzdC0+ZGV2X2lkW2ldKTsKKwkJCWlmICghYmRldikgeworCQkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQkJZ290byBvdXRfZXJyb3I7CisJCQl9CisJCQlzcGluX2xvY2soJmJfbXRfaWQtPmJtX2xvY2spOworCQkJbGlzdF9hZGQoJmJkZXYtPmJtX25vZGUsICZiX210X2lkLT5ibV9kZXZsaXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZiX210X2lkLT5ibV9sb2NrKTsKKwkJfQorCX0KKwlkcHJpbnRrKCIlcyBTVUNDRVNTXG4iLCBfX2Z1bmNfXyk7CisJc2VydmVyLT5wbmZzX2xkX2RhdGEgPSBiX210X2lkOworCisgb3V0X3JldHVybjoKKwlrZnJlZShkbGlzdCk7CisJcmV0dXJuIHN0YXR1czsKKworIG91dF9lcnJvcjoKKwlmcmVlX2Jsa19tb3VudGlkKGJfbXRfaWQpOworCWdvdG8gb3V0X3JldHVybjsKK30KKworc3RhdGljIGludAorYmxfY2xlYXJfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCit7CisJc3RydWN0IGJsb2NrX21vdW50X2lkICpiX210X2lkID0gc2VydmVyLT5wbmZzX2xkX2RhdGE7CisKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWZyZWVfYmxrX21vdW50aWQoYl9tdF9pZCk7CisJZHByaW50aygiJXMgUkVUVVJOU1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mc19wYWdlaW9fb3BzIGJsX3BnX3JlYWRfb3BzID0geworCS5wZ19pbml0ID0gcG5mc19nZW5lcmljX3BnX2luaXRfcmVhZCwKKwkucGdfdGVzdCA9IHBuZnNfZ2VuZXJpY19wZ190ZXN0LAorCS5wZ19kb2lvID0gcG5mc19nZW5lcmljX3BnX3JlYWRwYWdlcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzX3BhZ2Vpb19vcHMgYmxfcGdfd3JpdGVfb3BzID0geworCS5wZ19pbml0ID0gcG5mc19nZW5lcmljX3BnX2luaXRfd3JpdGUsCisJLnBnX3Rlc3QgPSBwbmZzX2dlbmVyaWNfcGdfdGVzdCwKKwkucGdfZG9pbyA9IHBuZnNfZ2VuZXJpY19wZ193cml0ZXBhZ2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dGRyaXZlcl90eXBlIGJsb2NrbGF5b3V0X3R5cGUgPSB7CisJLmlkCQkJCT0gTEFZT1VUX0JMT0NLX1ZPTFVNRSwKKwkubmFtZQkJCQk9ICJMQVlPVVRfQkxPQ0tfVk9MVU1FIiwKKwkucmVhZF9wYWdlbGlzdAkJCT0gYmxfcmVhZF9wYWdlbGlzdCwKKwkud3JpdGVfcGFnZWxpc3QJCQk9IGJsX3dyaXRlX3BhZ2VsaXN0LAorCS5hbGxvY19sYXlvdXRfaGRyCQk9IGJsX2FsbG9jX2xheW91dF9oZHIsCisJLmZyZWVfbGF5b3V0X2hkcgkJPSBibF9mcmVlX2xheW91dF9oZHIsCisJLmFsbG9jX2xzZWcJCQk9IGJsX2FsbG9jX2xzZWcsCisJLmZyZWVfbHNlZwkJCT0gYmxfZnJlZV9sc2VnLAorCS5lbmNvZGVfbGF5b3V0Y29tbWl0CQk9IGJsX2VuY29kZV9sYXlvdXRjb21taXQsCisJLmNsZWFudXBfbGF5b3V0Y29tbWl0CQk9IGJsX2NsZWFudXBfbGF5b3V0Y29tbWl0LAorCS5zZXRfbGF5b3V0ZHJpdmVyCQk9IGJsX3NldF9sYXlvdXRkcml2ZXIsCisJLmNsZWFyX2xheW91dGRyaXZlcgkJPSBibF9jbGVhcl9sYXlvdXRkcml2ZXIsCisJLnBnX3JlYWRfb3BzCQkJPSAmYmxfcGdfcmVhZF9vcHMsCisJLnBnX3dyaXRlX29wcwkJCT0gJmJsX3BnX3dyaXRlX29wcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzIGJsX3VwY2FsbF9vcHMgPSB7CisJLnVwY2FsbAkJPSBibF9waXBlX3VwY2FsbCwKKwkuZG93bmNhbGwJPSBibF9waXBlX2Rvd25jYWxsLAorCS5kZXN0cm95X21zZwk9IGJsX3BpcGVfZGVzdHJveV9tc2csCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZnM0YmxvY2tsYXlvdXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCB2ZnNtb3VudCAqbW50OworCXN0cnVjdCBwYXRoIHBhdGg7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzOiBORlN2NCBCbG9jayBMYXlvdXQgRHJpdmVyIFJlZ2lzdGVyaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBwbmZzX3JlZ2lzdGVyX2xheW91dGRyaXZlcigmYmxvY2tsYXlvdXRfdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZibF93cSk7CisKKwltbnQgPSBycGNfZ2V0X21vdW50KCk7CisJaWYgKElTX0VSUihtbnQpKSB7CisJCXJldCA9IFBUUl9FUlIobW50KTsKKwkJZ290byBvdXRfcmVtb3ZlOworCX0KKworCXJldCA9IHZmc19wYXRoX2xvb2t1cChtbnQtPm1udF9yb290LAorCQkJICAgICAgbW50LAorCQkJICAgICAgTkZTX1BJUEVfRElSTkFNRSwgMCwgJnBhdGgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlbW92ZTsKKworCWJsX2RldmljZV9waXBlID0gcnBjX21rcGlwZShwYXRoLmRlbnRyeSwgImJsb2NrbGF5b3V0IiwgTlVMTCwKKwkJCQkgICAgJmJsX3VwY2FsbF9vcHMsIDApOworCWlmIChJU19FUlIoYmxfZGV2aWNlX3BpcGUpKSB7CisJCXJldCA9IFBUUl9FUlIoYmxfZGV2aWNlX3BpcGUpOworCQlnb3RvIG91dF9yZW1vdmU7CisJfQorb3V0OgorCXJldHVybiByZXQ7CisKK291dF9yZW1vdmU6CisJcG5mc191bnJlZ2lzdGVyX2xheW91dGRyaXZlcigmYmxvY2tsYXlvdXRfdHlwZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mczRibG9ja2xheW91dF9leGl0KHZvaWQpCit7CisJZHByaW50aygiJXM6IE5GU3Y0IEJsb2NrIExheW91dCBEcml2ZXIgVW5yZWdpc3RlcmluZy4uLlxuIiwKKwkgICAgICAgX19mdW5jX18pOworCisJcG5mc191bnJlZ2lzdGVyX2xheW91dGRyaXZlcigmYmxvY2tsYXlvdXRfdHlwZSk7CisJcnBjX3VubGluayhibF9kZXZpY2VfcGlwZSk7Cit9CisKK01PRFVMRV9BTElBUygibmZzLWxheW91dHR5cGU0LTMiKTsKKworbW9kdWxlX2luaXQobmZzNGJsb2NrbGF5b3V0X2luaXQpOworbW9kdWxlX2V4aXQobmZzNGJsb2NrbGF5b3V0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmggYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjdkODI3Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiAgbGludXgvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmgKKyAqCisgKiAgTW9kdWxlIGZvciB0aGUgTkZTdjQuMSBwTkZTIGJsb2NrIGxheW91dCBkcml2ZXIuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBBbmR5IEFkYW1zb24gPGFuZHJvc0BjaXRpLnVtaWNoLmVkdT4KKyAqICBGcmVkIElzYW1hbiA8aWlzYW1hbkB1bWljaC5lZHU+CisgKgorICogcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSwgY29weSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYW5kCisgKiByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIGZvciBhbnkgcHVycG9zZSwKKyAqIHNvIGxvbmcgYXMgdGhlIG5hbWUgb2YgdGhlIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gaXMgbm90IHVzZWQgaW4KKyAqIGFueSBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbgorICogb2YgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIGF1dGhvcml6YXRpb24uICBpZgorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb3IgYW55IG90aGVyIGlkZW50aWZpY2F0aW9uIG9mIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBpcyBpbmNsdWRlZCBpbiBhbnkgY29weSBvZiBhbnkgcG9ydGlvbiBvZgorICogdGhpcyBzb2Z0d2FyZSwgdGhlbiB0aGUgZGlzY2xhaW1lciBiZWxvdyBtdXN0IGFsc28gYmUgaW5jbHVkZWQuCisgKgorICogdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcyBpcywgd2l0aG91dCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBhcyB0byBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0CisgKiB3YXJyYW50eSBieSB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGltcGxpZWQgd2FycmFudGllcyBvZgorICogbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHRoZSByZWdlbnRzCisgKiBvZiB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcywKKyAqIGluY2x1ZGluZyBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLAorICogd2l0aCByZXNwZWN0IHRvIGFueSBjbGFpbSBhcmlzaW5nIG91dCBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHVzZQorICogb2YgdGhlIHNvZnR3YXJlLCBldmVuIGlmIGl0IGhhcyBiZWVuIG9yIGlzIGhlcmVhZnRlciBhZHZpc2VkIG9mIHRoZQorICogcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICovCisjaWZuZGVmIEZTX05GU19ORlM0QkxPQ0tMQVlPVVRfSAorI2RlZmluZSBGU19ORlNfTkZTNEJMT0NLTEFZT1VUX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaD4KKworI2luY2x1ZGUgIi4uL3BuZnMuaCIKKworI2RlZmluZSBQQUdFX0NBQ0hFX1NFQ1RPUlMgKFBBR0VfQ0FDSEVfU0laRSA+PiBTRUNUT1JfU0hJRlQpCisjZGVmaW5lIFBBR0VfQ0FDSEVfU0VDVE9SX1NISUZUIChQQUdFX0NBQ0hFX1NISUZUIC0gU0VDVE9SX1NISUZUKQorCitzdHJ1Y3QgYmxvY2tfbW91bnRfaWQgeworCXNwaW5sb2NrX3QJCQlibV9sb2NrOyAgICAvKiBwcm90ZWN0cyBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAkJYm1fZGV2bGlzdDsgLyogaG9sZHMgcG5mc19ibG9ja19kZXYgKi8KK307CisKK3N0cnVjdCBwbmZzX2Jsb2NrX2RldiB7CisJc3RydWN0IGxpc3RfaGVhZAkJYm1fbm9kZTsKKwlzdHJ1Y3QgbmZzNF9kZXZpY2VpZAkJYm1fbWRldmlkOyAgICAvKiBhc3NvY2lhdGVkIGRldmlkICovCisJc3RydWN0IGJsb2NrX2RldmljZQkJKmJtX21kZXY7ICAgICAvKiBtZXRhIGRldmljZSBpdHNlbGYgKi8KK307CisKK2VudW0gZXhzdGF0ZTQgeworCVBORlNfQkxPQ0tfUkVBRFdSSVRFX0RBVEEJPSAwLAorCVBORlNfQkxPQ0tfUkVBRF9EQVRBCQk9IDEsCisJUE5GU19CTE9DS19JTlZBTElEX0RBVEEJCT0gMiwgLyogbWFwcGVkLCBidXQgZGF0YSBpcyBpbnZhbGlkICovCisJUE5GU19CTE9DS19OT05FX0RBVEEJCT0gMyAgLyogdW5tYXBwZWQsIGl0J3MgYSBob2xlICovCit9OworCisjZGVmaW5lIE1ZX01BWF9UQUdTICgxNSkgLyogdGFnIGJpdG51bXMgdXNlZCBtdXN0IGJlIGxlc3MgdGhhbiB0aGlzICovCisKK3N0cnVjdCBteV90cmVlIHsKKwlzZWN0b3JfdAkJbXR0X3N0ZXBfc2l6ZTsJLyogSW50ZXJuYWwgc2VjdG9yIGFsaWdubWVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbXR0X3N0dWI7IC8qIFNob3VsZCBiZSBhIHJhZGl4IHRyZWUgKi8KK307CisKK3N0cnVjdCBwbmZzX2ludmFsX21hcmtpbmdzIHsKKwlzcGlubG9ja190CWltX2xvY2s7CisJc3RydWN0IG15X3RyZWUJaW1fdHJlZTsJLyogU2VjdG9ycyB0aGF0IG5lZWQgTEFZT1VUQ09NTUlUICovCisJc2VjdG9yX3QJaW1fYmxvY2tfc2l6ZTsJLyogU2VydmVyIGJsb2Nrc2l6ZSBpbiBzZWN0b3JzICovCit9OworCitzdHJ1Y3QgcG5mc19pbnZhbF90cmFja2luZyB7CisJc3RydWN0IGxpc3RfaGVhZCBpdF9saW5rOworCWludAkJIGl0X3NlY3RvcjsKKwlpbnQJCSBpdF90YWdzOworfTsKKworLyogc2VjdG9yX3QgZmllbGRzIGFyZSBhbGwgaW4gNTEyLWJ5dGUgc2VjdG9ycyAqLworc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50IHsKKwlzdHJ1Y3Qga3JlZgliZV9yZWZjbnQ7CisJc3RydWN0IGxpc3RfaGVhZCBiZV9ub2RlOwkvKiBsaW5rIGludG8gbHNlZyBsaXN0ICovCisJc3RydWN0IG5mczRfZGV2aWNlaWQgYmVfZGV2aWQ7ICAvKiBGSVhNRTogY291bGQgdXNlIGRldmljZSBjYWNoZSBpbnN0ZWFkICovCisJc3RydWN0IGJsb2NrX2RldmljZSAqYmVfbWRldjsKKwlzZWN0b3JfdAliZV9mX29mZnNldDsJLyogdGhlIHN0YXJ0aW5nIG9mZnNldCBpbiB0aGUgZmlsZSAqLworCXNlY3Rvcl90CWJlX2xlbmd0aDsJLyogdGhlIHNpemUgb2YgdGhlIGV4dGVudCAqLworCXNlY3Rvcl90CWJlX3Zfb2Zmc2V0OwkvKiB0aGUgc3RhcnRpbmcgb2Zmc2V0IGluIHRoZSB2b2x1bWUgKi8KKwllbnVtIGV4c3RhdGU0CWJlX3N0YXRlOwkvKiB0aGUgc3RhdGUgb2YgdGhpcyBleHRlbnQgKi8KKwlzdHJ1Y3QgcG5mc19pbnZhbF9tYXJraW5ncyAqYmVfaW52YWw7IC8qIHRyYWNrcyBJTlZBTC0+UlcgdHJhbnNpdGlvbiAqLworfTsKKworLyogU2hvcnRlbmVkIGV4dGVudCB1c2VkIGJ5IExBWU9VVENPTU1JVCAqLworc3RydWN0IHBuZnNfYmxvY2tfc2hvcnRfZXh0ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJzZV9ub2RlOworCXN0cnVjdCBuZnM0X2RldmljZWlkIGJzZV9kZXZpZDsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpic2VfbWRldjsKKwlzZWN0b3JfdAlic2VfZl9vZmZzZXQ7CS8qIHRoZSBzdGFydGluZyBvZmZzZXQgaW4gdGhlIGZpbGUgKi8KKwlzZWN0b3JfdAlic2VfbGVuZ3RoOwkvKiB0aGUgc2l6ZSBvZiB0aGUgZXh0ZW50ICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK0JMX0lOSVRfSU5WQUxfTUFSS1Moc3RydWN0IHBuZnNfaW52YWxfbWFya2luZ3MgKm1hcmtzLCBzZWN0b3JfdCBibG9ja3NpemUpCit7CisJc3Bpbl9sb2NrX2luaXQoJm1hcmtzLT5pbV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFya3MtPmltX3RyZWUubXR0X3N0dWIpOworCW1hcmtzLT5pbV9ibG9ja19zaXplID0gYmxvY2tzaXplOworCW1hcmtzLT5pbV90cmVlLm10dF9zdGVwX3NpemUgPSBtaW4oKHNlY3Rvcl90KVBBR0VfQ0FDSEVfU0VDVE9SUywKKwkJCQkJICAgYmxvY2tzaXplKTsKK30KKworZW51bSBleHRlbnRjbGFzczQgeworCVJXX0VYVEVOVCAgICAgICA9IDAsIC8qIFJFQURXUlRFIGFuZCBJTlZBTCAqLworCVJPX0VYVEVOVCAgICAgICA9IDEsIC8qIFJFQUQgYW5kIE5PTkUgKi8KKwlFWFRFTlRfTElTVFMgICAgPSAyLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgYmxfY2hvb3NlX2xpc3QoZW51bSBleHN0YXRlNCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gUE5GU19CTE9DS19SRUFEX0RBVEEgfHwgc3RhdGUgPT0gUE5GU19CTE9DS19OT05FX0RBVEEpCisJCXJldHVybiBST19FWFRFTlQ7CisJZWxzZQorCQlyZXR1cm4gUldfRVhURU5UOworfQorCitzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgeworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgYmxfbGF5b3V0OworCXN0cnVjdCBwbmZzX2ludmFsX21hcmtpbmdzIGJsX2ludmFsOyAvKiB0cmFja3MgSU5WQUwtPlJXIHRyYW5zaXRpb24gKi8KKwlzcGlubG9ja190CQlibF9leHRfbG9jazsgICAvKiBQcm90ZWN0cyBsaXN0IG1hbmlwdWxhdGlvbiAqLworCXN0cnVjdCBsaXN0X2hlYWQJYmxfZXh0ZW50c1tFWFRFTlRfTElTVFNdOyAvKiBSIGFuZCBSVyBleHRlbnRzICovCisJc3RydWN0IGxpc3RfaGVhZAlibF9jb21taXQ7CS8qIE5lZWRzIGxheW91dCBjb21taXQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJsX2NvbW1pdHRpbmc7CS8qIExheW91dCBjb21taXR0aW5nICovCisJdW5zaWduZWQgaW50CQlibF9jb3VudDsJLyogZW50cmllcyBpbiBibF9jb21taXQgKi8KKwlzZWN0b3JfdAkJYmxfYmxvY2tzaXplOyAgLyogU2VydmVyIGJsb2Nrc2l6ZSBpbiBzZWN0b3JzICovCit9OworCisjZGVmaW5lIEJMS19JRChsbykgKChzdHJ1Y3QgYmxvY2tfbW91bnRfaWQgKikoTkZTX1NFUlZFUihsby0+cGxoX2lub2RlKS0+cG5mc19sZF9kYXRhKSkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgKgorQkxLX0xPMkVYVChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxvLCBzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQsIGJsX2xheW91dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICoKK0JMS19MU0VHMkVYVChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlyZXR1cm4gQkxLX0xPMkVYVChsc2VnLT5wbHNfbGF5b3V0KTsKK30KKworc3RydWN0IGJsX2Rldl9tc2cgeworCWludCBzdGF0dXM7CisJdWludDMyX3QgbWFqb3IsIG1pbm9yOworfTsKKworc3RydWN0IGJsX21zZ19oZHIgeworCXU4ICB0eXBlOworCXUxNiB0b3RhbGxlbjsgLyogbGVuZ3RoIG9mIGVudGlyZSBtZXNzYWdlLCBpbmNsdWRpbmcgaGRyIGl0c2VsZiAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmJsX2RldmljZV9waXBlOworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGJsX3dxOworCisjZGVmaW5lIEJMX0RFVklDRV9VTU9VTlQgICAgICAgICAgICAgICAweDAgLyogVW1vdW50LS1kZWxldGUgZGV2aWNlcyAqLworI2RlZmluZSBCTF9ERVZJQ0VfTU9VTlQgICAgICAgICAgICAgICAgMHgxIC8qIE1vdW50LS1jcmVhdGUgZGV2aWNlcyovCisjZGVmaW5lIEJMX0RFVklDRV9SRVFVRVNUX0lOSVQgICAgICAgICAweDAgLyogU3RhcnQgcmVxdWVzdCAqLworI2RlZmluZSBCTF9ERVZJQ0VfUkVRVUVTVF9QUk9DICAgICAgICAgMHgxIC8qIFVzZXIgbGV2ZWwgcHJvY2VzcyBzdWNjZWVkcyAqLworI2RlZmluZSBCTF9ERVZJQ0VfUkVRVUVTVF9FUlIgICAgICAgICAgMHgyIC8qIFVzZXIgbGV2ZWwgcHJvY2VzcyBmYWlscyAqLworCisvKiBibG9ja2xheW91dGRldi5jICovCitzc2l6ZV90IGJsX3BpcGVfdXBjYWxsKHN0cnVjdCBmaWxlICosIHN0cnVjdCBycGNfcGlwZV9tc2cgKiwKKwkJICAgICAgIGNoYXIgX191c2VyICosIHNpemVfdCk7Citzc2l6ZV90IGJsX3BpcGVfZG93bmNhbGwoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90KTsKK3ZvaWQgYmxfcGlwZV9kZXN0cm95X21zZyhzdHJ1Y3QgcnBjX3BpcGVfbXNnICopOworc3RydWN0IGJsb2NrX2RldmljZSAqbmZzNF9ibGtkZXZfZ2V0KGRldl90IGRldik7CitpbnQgbmZzNF9ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOworc3RydWN0IHBuZnNfYmxvY2tfZGV2ICpuZnM0X2Jsa19kZWNvZGVfZGV2aWNlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCisJCQkJCQlzdHJ1Y3QgcG5mc19kZXZpY2UgKmRldik7CitpbnQgbmZzNF9ibGtfcHJvY2Vzc19sYXlvdXRnZXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCQkJc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLCBnZnBfdCBnZnBfZmxhZ3MpOworCisvKiBibG9ja2xheW91dGRtLmMgKi8KK3ZvaWQgYmxfZnJlZV9ibG9ja19kZXYoc3RydWN0IHBuZnNfYmxvY2tfZGV2ICpiZGV2KTsKKworLyogZXh0ZW50cy5jICovCitzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKgorYmxfZmluZF9nZXRfZXh0ZW50KHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsIHNlY3Rvcl90IGlzZWN0LAorCQlzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKipjb3dfcmVhZCk7CitpbnQgYmxfbWFya19zZWN0b3JzX2luaXQoc3RydWN0IHBuZnNfaW52YWxfbWFya2luZ3MgKm1hcmtzLAorCQkJICAgICBzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IGxlbmd0aCwKKwkJCSAgICAgc2VjdG9yX3QgKipwYWdlcyk7Cit2b2lkIGJsX3B1dF9leHRlbnQoc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSk7CitzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJsX2FsbG9jX2V4dGVudCh2b2lkKTsKK2ludCBibF9pc19zZWN0b3JfaW5pdChzdHJ1Y3QgcG5mc19pbnZhbF9tYXJraW5ncyAqbWFya3MsIHNlY3Rvcl90IGlzZWN0KTsKK2ludCBlbmNvZGVfcG5mc19ibG9ja19sYXlvdXR1cGRhdGUoc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICpibCwKKwkJCQkgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnM0X2xheW91dGNvbW1pdF9hcmdzICphcmcpOwordm9pZCBjbGVhbl9wbmZzX2Jsb2NrX2xheW91dHVwZGF0ZShzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgKmJsLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnM0X2xheW91dGNvbW1pdF9hcmdzICphcmcsCisJCQkJICAgaW50IHN0YXR1cyk7CitpbnQgYmxfYWRkX21lcmdlX2V4dGVudChzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgKmJsLAorCQkJIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqbmV3KTsKK2ludCBibF9tYXJrX2Zvcl9jb21taXQoc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSwKKwkJCXNlY3Rvcl90IG9mZnNldCwgc2VjdG9yX3QgbGVuZ3RoKTsKKworI2VuZGlmIC8qIEZTX05GU19ORlM0QkxPQ0tMQVlPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0ZGV2LmMgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODNiMzkzCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0ZGV2LmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiAgbGludXgvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0ZGV2LmMKKyAqCisgKiAgRGV2aWNlIG9wZXJhdGlvbnMgZm9yIHRoZSBwbmZzIG5mczQgZmlsZSBsYXlvdXQgZHJpdmVyLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgTWljaGlnYW4uCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgQW5keSBBZGFtc29uIDxhbmRyb3NAY2l0aS51bWljaC5lZHU+CisgKiAgRnJlZCBJc2FtYW4gPGlpc2FtYW5AdW1pY2guZWR1PgorICoKKyAqIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UsIGNvcHksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGFuZAorICogcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcyBmb3IgYW55IHB1cnBvc2UsCisgKiBzbyBsb25nIGFzIHRoZSBuYW1lIG9mIHRoZSB1bml2ZXJzaXR5IG9mIG1pY2hpZ2FuIGlzIG5vdCB1c2VkIGluCisgKiBhbnkgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHVzZSBvciBkaXN0cmlidXRpb24KKyAqIG9mIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBhdXRob3JpemF0aW9uLiAgaWYKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIG9yIGFueSBvdGhlciBpZGVudGlmaWNhdGlvbiBvZiB0aGUKKyAqIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gaXMgaW5jbHVkZWQgaW4gYW55IGNvcHkgb2YgYW55IHBvcnRpb24gb2YKKyAqIHRoaXMgc29mdHdhcmUsIHRoZW4gdGhlIGRpc2NsYWltZXIgYmVsb3cgbXVzdCBhbHNvIGJlIGluY2x1ZGVkLgorICoKKyAqIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMgaXMsIHdpdGhvdXQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUKKyAqIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gYXMgdG8gaXRzIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLCBhbmQgd2l0aG91dAorICogd2FycmFudHkgYnkgdGhlIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YKKyAqIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICB0aGUgcmVnZW50cworICogb2YgdGhlIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMsCisgKiBpbmNsdWRpbmcgc3BlY2lhbCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKKyAqIHdpdGggcmVzcGVjdCB0byBhbnkgY2xhaW0gYXJpc2luZyBvdXQgb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSB1c2UKKyAqIG9mIHRoZSBzb2Z0d2FyZSwgZXZlbiBpZiBpdCBoYXMgYmVlbiBvciBpcyBoZXJlYWZ0ZXIgYWR2aXNlZCBvZiB0aGUKKyAqIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIF9fYnJlYWQgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCisjaW5jbHVkZSAiYmxvY2tsYXlvdXQuaCIKKworI2RlZmluZSBORlNEQkdfRkFDSUxJVFkgICAgICAgICBORlNEQkdfUE5GU19MRAorCitzdGF0aWMgaW50IGRlY29kZV9zZWN0b3JfbnVtYmVyKF9fYmUzMiAqKnJwLCBzZWN0b3JfdCAqc3ApCit7CisJdWludDY0X3QgczsKKworCSpycCA9IHhkcl9kZWNvZGVfaHlwZXIoKnJwLCAmcyk7CisJaWYgKHMgJiAweDFmZikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc2VjdG9yIG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisJKnNwID0gcyA+PiBTRUNUT1JfU0hJRlQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIE9wZW4gYSBibG9ja19kZXZpY2UgYnkgZGV2aWNlIG51bWJlci4gKi8KK3N0cnVjdCBibG9ja19kZXZpY2UgKm5mczRfYmxrZGV2X2dldChkZXZfdCBkZXYpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmQ7CisKKwlkcHJpbnRrKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWJkID0gYmxrZGV2X2dldF9ieV9kZXYoZGV2LCBGTU9ERV9SRUFELCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJkKSkKKwkJZ290byBmYWlsOworCXJldHVybiBiZDsKK2ZhaWw6CisJZHByaW50aygiJXMgZmFpbGVkIHRvIG9wZW4gZGV2aWNlIDogJWxkXG4iLAorCQkJX19mdW5jX18sIFBUUl9FUlIoYmQpKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGJsb2NrIGRldmljZQorICovCitpbnQgbmZzNF9ibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJZHByaW50aygiJXMgZm9yIGRldmljZSAlZDolZFxuIiwgX19mdW5jX18sIE1BSk9SKGJkZXYtPmJkX2RldiksCisJCQlNSU5PUihiZGV2LT5iZF9kZXYpKTsKKwlyZXR1cm4gYmxrZGV2X3B1dChiZGV2LCBGTU9ERV9SRUFEKTsKK30KKworLyoKKyAqIFNob3VsZG4ndCB0aGVyZSBiZSBhIHJwY19nZW5lcmljX3VwY2FsbCgpIHRvIGRvIHRoaXMgZm9yIHVzPworICovCitzc2l6ZV90IGJsX3BpcGVfdXBjYWxsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcnBjX3BpcGVfbXNnICptc2csCisJCSAgICAgICBjaGFyIF9fdXNlciAqZHN0LCBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgKmRhdGEgPSAoY2hhciAqKW1zZy0+ZGF0YSArIG1zZy0+Y29waWVkOworCXNpemVfdCBtbGVuID0gbWluKG1zZy0+bGVuIC0gbXNnLT5jb3BpZWQsIGJ1Zmxlbik7CisJdW5zaWduZWQgbG9uZyBsZWZ0OworCisJbGVmdCA9IGNvcHlfdG9fdXNlcihkc3QsIGRhdGEsIG1sZW4pOworCWlmIChsZWZ0ID09IG1sZW4pIHsKKwkJbXNnLT5lcnJubyA9IC1FRkFVTFQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW1sZW4gLT0gbGVmdDsKKwltc2ctPmNvcGllZCArPSBtbGVuOworCW1zZy0+ZXJybm8gPSAwOworCXJldHVybiBtbGVuOworfQorCitzdGF0aWMgc3RydWN0IGJsX2Rldl9tc2cgYmxfbW91bnRfcmVwbHk7CisKK3NzaXplX3QgYmxfcGlwZV9kb3duY2FsbChzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywKKwkJCSBzaXplX3QgbWxlbikKK3sKKwlpZiAobWxlbiAhPSBzaXplb2YgKHN0cnVjdCBibF9kZXZfbXNnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJsX21vdW50X3JlcGx5LCBzcmMsIG1sZW4pICE9IDApCisJCXJldHVybiAtRUZBVUxUOworCisJd2FrZV91cCgmYmxfd3EpOworCisJcmV0dXJuIG1sZW47Cit9CisKK3ZvaWQgYmxfcGlwZV9kZXN0cm95X21zZyhzdHJ1Y3QgcnBjX3BpcGVfbXNnICptc2cpCit7CisJaWYgKG1zZy0+ZXJybm8gPj0gMCkKKwkJcmV0dXJuOworCXdha2VfdXAoJmJsX3dxKTsKK30KKworLyoKKyAqIERlY29kZXMgcG5mc19ibG9ja19kZXZpY2VhZGRyNCB3aGljaCBpcyBYRFIgZW5jb2RlZCBpbiBkZXYtPmRldl9hZGRyX2J1Zi4KKyAqLworc3RydWN0IHBuZnNfYmxvY2tfZGV2ICoKK25mczRfYmxrX2RlY29kZV9kZXZpY2Uoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKKwkJICAgICAgIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2RldiAqcnYgPSBOVUxMOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkID0gTlVMTDsKKwlzdHJ1Y3QgcnBjX3BpcGVfbXNnIG1zZzsKKwlzdHJ1Y3QgYmxfbXNnX2hkciBibF9tc2cgPSB7CisJCS50eXBlID0gQkxfREVWSUNFX01PVU5ULAorCQkudG90YWxsZW4gPSBkZXYtPm1pbmNvdW50LAorCX07CisJdWludDhfdCAqZGF0YXB0cjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3cSwgY3VycmVudCk7CisJc3RydWN0IGJsX2Rldl9tc2cgKnJlcGx5ID0gJmJsX21vdW50X3JlcGx5OworCWludCBvZmZzZXQsIGxlbiwgaTsKKworCWRwcmludGsoIiVzIENSRUFUSU5HIFBJUEVGUyBNRVNTQUdFXG4iLCBfX2Z1bmNfXyk7CisJZHByaW50aygiJXM6IGRldmljZWlkOiAlcywgbWluY291bnQ6ICVkXG4iLCBfX2Z1bmNfXywgZGV2LT5kZXZfaWQuZGF0YSwKKwkJZGV2LT5taW5jb3VudCk7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5kYXRhID0ga3phbGxvYyhzaXplb2YoYmxfbXNnKSArIGRldi0+bWluY291bnQsIEdGUF9OT0ZTKTsKKwlpZiAoIW1zZy5kYXRhKSB7CisJCXJ2ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KG1zZy5kYXRhLCAmYmxfbXNnLCBzaXplb2YoYmxfbXNnKSk7CisJZGF0YXB0ciA9ICh1aW50OF90ICopIG1zZy5kYXRhOworCWxlbiA9IGRldi0+bWluY291bnQ7CisJb2Zmc2V0ID0gc2l6ZW9mKGJsX21zZyk7CisJZm9yIChpID0gMDsgbGVuID4gMDsgaSsrKSB7CisJCW1lbWNweSgmZGF0YXB0cltvZmZzZXRdLCBwYWdlX2FkZHJlc3MoZGV2LT5wYWdlc1tpXSksCisJCQkJbGVuIDwgUEFHRV9DQUNIRV9TSVpFID8gbGVuIDogUEFHRV9DQUNIRV9TSVpFKTsKKwkJbGVuIC09IFBBR0VfQ0FDSEVfU0laRTsKKwkJb2Zmc2V0ICs9IFBBR0VfQ0FDSEVfU0laRTsKKwl9CisJbXNnLmxlbiA9IHNpemVvZihibF9tc2cpICsgZGV2LT5taW5jb3VudDsKKworCWRwcmludGsoIiVzIENBTExJTkcgVVNFUlNQQUNFIERBRU1PTlxuIiwgX19mdW5jX18pOworCWFkZF93YWl0X3F1ZXVlKCZibF93cSwgJndxKTsKKwlpZiAocnBjX3F1ZXVlX3VwY2FsbChibF9kZXZpY2VfcGlwZS0+ZF9pbm9kZSwgJm1zZykgPCAwKSB7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZibF93cSwgJndxKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlKCk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZibF93cSwgJndxKTsKKworCWlmIChyZXBseS0+c3RhdHVzICE9IEJMX0RFVklDRV9SRVFVRVNUX1BST0MpIHsKKwkJZHByaW50aygiJXMgZmFpbGVkIHRvIG9wZW4gZGV2aWNlOiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXBseS0+c3RhdHVzKTsKKwkJcnYgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIG91dDsKKwl9CisKKwliZCA9IG5mczRfYmxrZGV2X2dldChNS0RFVihyZXBseS0+bWFqb3IsIHJlcGx5LT5taW5vcikpOworCWlmIChJU19FUlIoYmQpKSB7CisJCWRwcmludGsoIiVzIGZhaWxlZCB0byBvcGVuIGRldmljZSA6ICVsZFxuIiwKKwkJCV9fZnVuY19fLCBQVFJfRVJSKGJkKSk7CisJCWdvdG8gb3V0OworCX0KKworCXJ2ID0ga3phbGxvYyhzaXplb2YoKnJ2KSwgR0ZQX05PRlMpOworCWlmICghcnYpIHsKKwkJcnYgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwlydi0+Ym1fbWRldiA9IGJkOworCW1lbWNweSgmcnYtPmJtX21kZXZpZCwgJmRldi0+ZGV2X2lkLCBzaXplb2Yoc3RydWN0IG5mczRfZGV2aWNlaWQpKTsKKwlkcHJpbnRrKCIlcyBDcmVhdGVkIGRldmljZSAlcyB3aXRoIGJkX2Jsb2NrX3NpemUgJXVcbiIsCisJCV9fZnVuY19fLAorCQliZC0+YmRfZGlzay0+ZGlza19uYW1lLAorCQliZC0+YmRfYmxvY2tfc2l6ZSk7CisKK291dDoKKwlrZnJlZShtc2cuZGF0YSk7CisJcmV0dXJuIHJ2OworfQorCisvKiBNYXAgZGV2aWNlaWQgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciB0byBjb25zdHJ1Y3RlZCBibG9ja19kZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICp0cmFuc2xhdGVfZGV2aWQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCQkJCSAgICBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqcnYgPSBOVUxMOworCXN0cnVjdCBibG9ja19tb3VudF9pZCAqbWlkOworCXN0cnVjdCBwbmZzX2Jsb2NrX2RldiAqZGV2OworCisJZHByaW50aygiJXMgZW50ZXIsIGxvPSVwLCBpZD0lcFxuIiwgX19mdW5jX18sIGxvLCBpZCk7CisJbWlkID0gQkxLX0lEKGxvKTsKKwlzcGluX2xvY2soJm1pZC0+Ym1fbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZtaWQtPmJtX2Rldmxpc3QsIGJtX25vZGUpIHsKKwkJaWYgKG1lbWNtcChpZC0+ZGF0YSwgZGV2LT5ibV9tZGV2aWQuZGF0YSwKKwkJCSAgIE5GUzRfREVWSUNFSUQ0X1NJWkUpID09IDApIHsKKwkJCXJ2ID0gZGV2LT5ibV9tZGV2OworCQkJZ290byBvdXQ7CisJCX0KKwl9Cisgb3V0OgorCXNwaW5fdW5sb2NrKCZtaWQtPmJtX2xvY2spOworCWRwcmludGsoIiVzIHJldHVybmluZyAlcFxuIiwgX19mdW5jX18sIHJ2KTsKKwlyZXR1cm4gcnY7Cit9CisKKy8qIFRyYWNrcyBpbmZvIG5lZWRlZCB0byBlbnN1cmUgZXh0ZW50cyBpbiBsYXlvdXQgb2JleSBjb25zdHJhaW50cyBvZiBzcGVjICovCitzdHJ1Y3QgbGF5b3V0X3ZlcmlmaWNhdGlvbiB7CisJdTMyIG1vZGU7CS8qIFIgb3IgUlcgKi8KKwl1NjQgc3RhcnQ7CS8qIEV4cGVjdGVkIHN0YXJ0IG9mIG5leHQgbm9uLUNPVyBleHRlbnQgKi8KKwl1NjQgaW52YWw7CS8qIFN0YXJ0IG9mIElOVkFMIGNvdmVyYWdlICovCisJdTY0IGNvd3JlYWQ7CS8qIEVuZCBvZiBDT1cgcmVhZCBjb3ZlcmFnZSAqLworfTsKKworLyogVmVyaWZ5IHRoZSBleHRlbnQgbWVldHMgdGhlIGxheW91dCByZXF1aXJlbWVudHMgb2YgdGhlIHBuZnMtYmxvY2sgZHJhZnQsCisgKiBzZWN0aW9uIDIuMy4xLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9leHRlbnQoc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSwKKwkJCSBzdHJ1Y3QgbGF5b3V0X3ZlcmlmaWNhdGlvbiAqbHYpCit7CisJaWYgKGx2LT5tb2RlID09IElPTU9ERV9SRUFEKSB7CisJCWlmIChiZS0+YmVfc3RhdGUgPT0gUE5GU19CTE9DS19SRUFEV1JJVEVfREFUQSB8fAorCQkgICAgYmUtPmJlX3N0YXRlID09IFBORlNfQkxPQ0tfSU5WQUxJRF9EQVRBKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChiZS0+YmVfZl9vZmZzZXQgIT0gbHYtPnN0YXJ0KQorCQkJcmV0dXJuIC1FSU87CisJCWx2LT5zdGFydCArPSBiZS0+YmVfbGVuZ3RoOworCQlyZXR1cm4gMDsKKwl9CisJLyogbHYtPm1vZGUgPT0gSU9NT0RFX1JXICovCisJaWYgKGJlLT5iZV9zdGF0ZSA9PSBQTkZTX0JMT0NLX1JFQURXUklURV9EQVRBKSB7CisJCWlmIChiZS0+YmVfZl9vZmZzZXQgIT0gbHYtPnN0YXJ0KQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChsdi0+Y293cmVhZCA+IGx2LT5zdGFydCkKKwkJCXJldHVybiAtRUlPOworCQlsdi0+c3RhcnQgKz0gYmUtPmJlX2xlbmd0aDsKKwkJbHYtPmludmFsID0gbHYtPnN0YXJ0OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGJlLT5iZV9zdGF0ZSA9PSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSkgeworCQlpZiAoYmUtPmJlX2Zfb2Zmc2V0ICE9IGx2LT5zdGFydCkKKwkJCXJldHVybiAtRUlPOworCQlsdi0+c3RhcnQgKz0gYmUtPmJlX2xlbmd0aDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChiZS0+YmVfc3RhdGUgPT0gUE5GU19CTE9DS19SRUFEX0RBVEEpIHsKKwkJaWYgKGJlLT5iZV9mX29mZnNldCA+IGx2LT5zdGFydCkKKwkJCXJldHVybiAtRUlPOworCQlpZiAoYmUtPmJlX2Zfb2Zmc2V0IDwgbHYtPmludmFsKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChiZS0+YmVfZl9vZmZzZXQgPCBsdi0+Y293cmVhZCkKKwkJCXJldHVybiAtRUlPOworCQkvKiBJdCBsb29rcyBsaWtlIHlvdSBtaWdodCB3YW50IHRvIG1pbiB0aGlzIHdpdGggbHYtPnN0YXJ0LAorCQkgKiBidXQgeW91IHJlYWxseSBkb24ndC4KKwkJICovCisJCWx2LT5pbnZhbCA9IGx2LT5pbnZhbCArIGJlLT5iZV9sZW5ndGg7CisJCWx2LT5jb3dyZWFkID0gYmUtPmJlX2Zfb2Zmc2V0ICsgYmUtPmJlX2xlbmd0aDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtRUlPOworfQorCisvKiBYRFIgZGVjb2RlIHBuZnNfYmxvY2tfbGF5b3V0NCBzdHJ1Y3R1cmUgKi8KK2ludAorbmZzNF9ibGtfcHJvY2Vzc19sYXlvdXRnZXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCQkgICBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgKmJsID0gQkxLX0xPMkVYVChsbyk7CisJaW50IGksIHN0YXR1cyA9IC1FSU87CisJdWludDMyX3QgY291bnQ7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSA9IE5VTEwsICpzYXZlOworCXN0cnVjdCB4ZHJfc3RyZWFtIHN0cmVhbTsKKwlzdHJ1Y3QgeGRyX2J1ZiBidWY7CisJc3RydWN0IHBhZ2UgKnNjcmF0Y2g7CisJX19iZTMyICpwOworCXN0cnVjdCBsYXlvdXRfdmVyaWZpY2F0aW9uIGx2ID0geworCQkubW9kZSA9IGxnci0+cmFuZ2UuaW9tb2RlLAorCQkuc3RhcnQgPSBsZ3ItPnJhbmdlLm9mZnNldCA+PiBTRUNUT1JfU0hJRlQsCisJCS5pbnZhbCA9IGxnci0+cmFuZ2Uub2Zmc2V0ID4+IFNFQ1RPUl9TSElGVCwKKwkJLmNvd3JlYWQgPSBsZ3ItPnJhbmdlLm9mZnNldCA+PiBTRUNUT1JfU0hJRlQsCisJfTsKKwlMSVNUX0hFQUQoZXh0ZW50cyk7CisKKwlkcHJpbnRrKCItLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzY3JhdGNoID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl4ZHJfaW5pdF9kZWNvZGVfcGFnZXMoJnN0cmVhbSwgJmJ1ZiwgbGdyLT5sYXlvdXRwLT5wYWdlcywgbGdyLT5sYXlvdXRwLT5sZW4pOworCXhkcl9zZXRfc2NyYXRjaF9idWZmZXIoJnN0cmVhbSwgcGFnZV9hZGRyZXNzKHNjcmF0Y2gpLCBQQUdFX1NJWkUpOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZzdHJlYW0sIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X2VycjsKKworCWNvdW50ID0gYmUzMl90b19jcHVwKHArKyk7CisKKwlkcHJpbnRrKCIlcyBlbnRlciwgbnVtYmVyIG9mIGV4dGVudHMgJWlcbiIsIF9fZnVuY19fLCBjb3VudCk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZzdHJlYW0sICgyOCArIE5GUzRfREVWSUNFSUQ0X1NJWkUpICogY291bnQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X2VycjsKKworCS8qIERlY29kZSBpbmRpdmlkdWFsIGV4dGVudHMsIHB1dHRpbmcgdGhlbSBpbiB0ZW1wb3JhcnkKKwkgKiBzdGFnaW5nIGFyZWEgdW50aWwgd2hvbGUgbGF5b3V0IGlzIGRlY29kZWQgdG8gbWFrZSBlcnJvcgorCSAqIHJlY292ZXJ5IGVhc2llci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQliZSA9IGJsX2FsbG9jX2V4dGVudCgpOworCQlpZiAoIWJlKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCW1lbWNweSgmYmUtPmJlX2RldmlkLCBwLCBORlM0X0RFVklDRUlENF9TSVpFKTsKKwkJcCArPSBYRFJfUVVBRExFTihORlM0X0RFVklDRUlENF9TSVpFKTsKKwkJYmUtPmJlX21kZXYgPSB0cmFuc2xhdGVfZGV2aWQobG8sICZiZS0+YmVfZGV2aWQpOworCQlpZiAoIWJlLT5iZV9tZGV2KQorCQkJZ290byBvdXRfZXJyOworCisJCS8qIFRoZSBuZXh0IHRocmVlIHZhbHVlcyBhcmUgcmVhZCBpbiBhcyBieXRlcywKKwkJICogYnV0IHN0b3JlZCBhcyA1MTItYnl0ZSBzZWN0b3IgbGVuZ3RocworCQkgKi8KKwkJaWYgKGRlY29kZV9zZWN0b3JfbnVtYmVyKCZwLCAmYmUtPmJlX2Zfb2Zmc2V0KSA8IDApCisJCQlnb3RvIG91dF9lcnI7CisJCWlmIChkZWNvZGVfc2VjdG9yX251bWJlcigmcCwgJmJlLT5iZV9sZW5ndGgpIDwgMCkKKwkJCWdvdG8gb3V0X2VycjsKKwkJaWYgKGRlY29kZV9zZWN0b3JfbnVtYmVyKCZwLCAmYmUtPmJlX3Zfb2Zmc2V0KSA8IDApCisJCQlnb3RvIG91dF9lcnI7CisJCWJlLT5iZV9zdGF0ZSA9IGJlMzJfdG9fY3B1cChwKyspOworCQlpZiAoYmUtPmJlX3N0YXRlID09IFBORlNfQkxPQ0tfSU5WQUxJRF9EQVRBKQorCQkJYmUtPmJlX2ludmFsID0gJmJsLT5ibF9pbnZhbDsKKwkJaWYgKHZlcmlmeV9leHRlbnQoYmUsICZsdikpIHsKKwkJCWRwcmludGsoIiVzIHZlcmlmeSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZiZS0+YmVfbm9kZSwgJmV4dGVudHMpOworCX0KKwlpZiAobGdyLT5yYW5nZS5vZmZzZXQgKyBsZ3ItPnJhbmdlLmxlbmd0aCAhPQorCQkJbHYuc3RhcnQgPDwgU0VDVE9SX1NISUZUKSB7CisJCWRwcmludGsoIiVzIEZpbmFsIGxlbmd0aCBtaXNtYXRjaFxuIiwgX19mdW5jX18pOworCQliZSA9IE5VTEw7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJaWYgKGx2LnN0YXJ0IDwgbHYuY293cmVhZCkgeworCQlkcHJpbnRrKCIlcyBGaW5hbCB1bmNvdmVyZWQgQ09XIGV4dGVudFxuIiwgX19mdW5jX18pOworCQliZSA9IE5VTEw7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJLyogRXh0ZW50cyBkZWNvZGVkIHByb3Blcmx5LCBub3cgdHJ5IHRvIG1lcmdlIHRoZW0gaW4gdG8KKwkgKiBleGlzdGluZyBsYXlvdXQgZXh0ZW50cy4KKwkgKi8KKwlzcGluX2xvY2soJmJsLT5ibF9leHRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJlLCBzYXZlLCAmZXh0ZW50cywgYmVfbm9kZSkgeworCQlsaXN0X2RlbCgmYmUtPmJlX25vZGUpOworCQlzdGF0dXMgPSBibF9hZGRfbWVyZ2VfZXh0ZW50KGJsLCBiZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXNwaW5fdW5sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCQkJLyogVGhpcyBpcyBhIGZhaXJseSBjYXRhc3Ryb3BoaWMgZXJyb3IsIGFzIHRoZQorCQkJICogZW50aXJlIGxheW91dCBleHRlbnQgbGlzdHMgYXJlIG5vdyBjb3JydXB0ZWQuCisJCQkgKiBXZSBzaG91bGQgaGF2ZSBzb21lIHdheSB0byBkaXN0aW5ndWlzaCB0aGlzLgorCQkJICovCisJCQliZSA9IE5VTEw7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmJsLT5ibF9leHRfbG9jayk7CisJc3RhdHVzID0gMDsKKyBvdXQ6CisJX19mcmVlX3BhZ2Uoc2NyYXRjaCk7CisJZHByaW50aygiJXMgcmV0dXJucyAlaVxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKKworIG91dF9lcnI6CisJYmxfcHV0X2V4dGVudChiZSk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZleHRlbnRzKSkgeworCQliZSA9IGxpc3RfZmlyc3RfZW50cnkoJmV4dGVudHMsIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCwKKwkJCQkgICAgICBiZV9ub2RlKTsKKwkJbGlzdF9kZWwoJmJlLT5iZV9ub2RlKTsKKwkJYmxfcHV0X2V4dGVudChiZSk7CisJfQorCWdvdG8gb3V0OworfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0ZG0uYyBiL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1NWM3NQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dGRtLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgbGludXgvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0ZG0uYworICoKKyAqICBNb2R1bGUgZm9yIHRoZSBORlN2NC4xIHBORlMgYmxvY2sgbGF5b3V0IGRyaXZlci4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIE1pY2hpZ2FuLgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIEZyZWQgSXNhbWFuIDxpaXNhbWFuQHVtaWNoLmVkdT4KKyAqICBBbmR5IEFkYW1zb24gPGFuZHJvc0BjaXRpLnVtaWNoLmVkdT4KKyAqCisgKiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBhbmQKKyAqIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MgZm9yIGFueSBwdXJwb3NlLAorICogc28gbG9uZyBhcyB0aGUgbmFtZSBvZiB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBpcyBub3QgdXNlZCBpbgorICogYW55IGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uCisgKiBvZiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgYXV0aG9yaXphdGlvbi4gIGlmCisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBvciBhbnkgb3RoZXIgaWRlbnRpZmljYXRpb24gb2YgdGhlCisgKiB1bml2ZXJzaXR5IG9mIG1pY2hpZ2FuIGlzIGluY2x1ZGVkIGluIGFueSBjb3B5IG9mIGFueSBwb3J0aW9uIG9mCisgKiB0aGlzIHNvZnR3YXJlLCB0aGVuIHRoZSBkaXNjbGFpbWVyIGJlbG93IG11c3QgYWxzbyBiZSBpbmNsdWRlZC4KKyAqCisgKiB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLCB3aXRob3V0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlCisgKiB1bml2ZXJzaXR5IG9mIG1pY2hpZ2FuIGFzIHRvIGl0cyBmaXRuZXNzIGZvciBhbnkgcHVycG9zZSwgYW5kIHdpdGhvdXQKKyAqIHdhcnJhbnR5IGJ5IHRoZSB1bml2ZXJzaXR5IG9mIG1pY2hpZ2FuIG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mCisgKiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgdGhlIHJlZ2VudHMKKyAqIG9mIHRoZSB1bml2ZXJzaXR5IG9mIG1pY2hpZ2FuIHNoYWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzLAorICogaW5jbHVkaW5nIHNwZWNpYWwsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCisgKiB3aXRoIHJlc3BlY3QgdG8gYW55IGNsYWltIGFyaXNpbmcgb3V0IG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlCisgKiBvZiB0aGUgc29mdHdhcmUsIGV2ZW4gaWYgaXQgaGFzIGJlZW4gb3IgaXMgaGVyZWFmdGVyIGFkdmlzZWQgb2YgdGhlCisgKiBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+IC8qIGdlbmRpc2sgLSB1c2VkIGluIGEgZHByaW50ayovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKKyNpbmNsdWRlICJibG9ja2xheW91dC5oIgorCisjZGVmaW5lIE5GU0RCR19GQUNJTElUWSAgICAgICAgIE5GU0RCR19QTkZTX0xECisKK3N0YXRpYyB2b2lkIGRldl9yZW1vdmUoZGV2X3QgZGV2KQoreworCXN0cnVjdCBycGNfcGlwZV9tc2cgbXNnOworCXN0cnVjdCBibF9kZXZfbXNnIGJsX3Vtb3VudF9yZXF1ZXN0OworCXN0cnVjdCBibF9tc2dfaGRyIGJsX21zZyA9IHsKKwkJLnR5cGUgPSBCTF9ERVZJQ0VfVU1PVU5ULAorCQkudG90YWxsZW4gPSBzaXplb2YoYmxfdW1vdW50X3JlcXVlc3QpLAorCX07CisJdWludDhfdCAqZGF0YXB0cjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3cSwgY3VycmVudCk7CisKKwlkcHJpbnRrKCJFbnRlcmluZyAlc1xuIiwgX19mdW5jX18pOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwltc2cuZGF0YSA9IGt6YWxsb2MoMSArIHNpemVvZihibF91bW91bnRfcmVxdWVzdCksIEdGUF9OT0ZTKTsKKwlpZiAoIW1zZy5kYXRhKQorCQlnb3RvIG91dDsKKworCW1lbXNldCgmYmxfdW1vdW50X3JlcXVlc3QsIDAsIHNpemVvZihibF91bW91bnRfcmVxdWVzdCkpOworCWJsX3Vtb3VudF9yZXF1ZXN0Lm1ham9yID0gTUFKT1IoZGV2KTsKKwlibF91bW91bnRfcmVxdWVzdC5taW5vciA9IE1JTk9SKGRldik7CisKKwltZW1jcHkobXNnLmRhdGEsICZibF9tc2csIHNpemVvZihibF9tc2cpKTsKKwlkYXRhcHRyID0gKHVpbnQ4X3QgKikgbXNnLmRhdGE7CisJbWVtY3B5KCZkYXRhcHRyW3NpemVvZihibF9tc2cpXSwgJmJsX3Vtb3VudF9yZXF1ZXN0LCBzaXplb2YoYmxfdW1vdW50X3JlcXVlc3QpKTsKKwltc2cubGVuID0gc2l6ZW9mKGJsX21zZykgKyBibF9tc2cudG90YWxsZW47CisKKwlhZGRfd2FpdF9xdWV1ZSgmYmxfd3EsICZ3cSk7CisJaWYgKHJwY19xdWV1ZV91cGNhbGwoYmxfZGV2aWNlX3BpcGUtPmRfaW5vZGUsICZtc2cpIDwgMCkgeworCQlyZW1vdmVfd2FpdF9xdWV1ZSgmYmxfd3EsICZ3cSk7CisJCWdvdG8gb3V0OworCX0KKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZSgpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmYmxfd3EsICZ3cSk7CisKK291dDoKKwlrZnJlZShtc2cuZGF0YSk7Cit9CisKKy8qCisgKiBSZWxlYXNlIG1ldGEgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIG5mczRfYmxrX21ldGFkZXZfcmVsZWFzZShzdHJ1Y3QgcG5mc19ibG9ja19kZXYgKmJkZXYpCit7CisJaW50IHJ2OworCisJZHByaW50aygiJXMgUmVsZWFzaW5nXG4iLCBfX2Z1bmNfXyk7CisJcnYgPSBuZnM0X2Jsa2Rldl9wdXQoYmRldi0+Ym1fbWRldik7CisJaWYgKHJ2KQorCQlwcmludGsoS0VSTl9FUlIgIiVzIG5mczRfYmxrZGV2X3B1dCByZXR1cm5zICVkXG4iLAorCQkJCV9fZnVuY19fLCBydik7CisKKwlkZXZfcmVtb3ZlKGJkZXYtPmJtX21kZXYtPmJkX2Rldik7Cit9CisKK3ZvaWQgYmxfZnJlZV9ibG9ja19kZXYoc3RydWN0IHBuZnNfYmxvY2tfZGV2ICpiZGV2KQoreworCWlmIChiZGV2KSB7CisJCWlmIChiZGV2LT5ibV9tZGV2KSB7CisJCQlkcHJpbnRrKCIlcyBSZW1vdmluZyBETSBkZXZpY2U6ICVkOiVkXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCU1BSk9SKGJkZXYtPmJtX21kZXYtPmJkX2RldiksCisJCQkJTUlOT1IoYmRldi0+Ym1fbWRldi0+YmRfZGV2KSk7CisJCQluZnM0X2Jsa19tZXRhZGV2X3JlbGVhc2UoYmRldik7CisJCX0KKwkJa2ZyZWUoYmRldik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2V4dGVudHMuYyBiL2ZzL25mcy9ibG9ja2xheW91dC9leHRlbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmYTdiMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9ibG9ja2xheW91dC9leHRlbnRzLmMKQEAgLTAsMCArMSw5MzUgQEAKKy8qCisgKiAgbGludXgvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmgKKyAqCisgKiAgTW9kdWxlIGZvciB0aGUgTkZTdjQuMSBwTkZTIGJsb2NrIGxheW91dCBkcml2ZXIuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBNaWNoaWdhbi4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBBbmR5IEFkYW1zb24gPGFuZHJvc0BjaXRpLnVtaWNoLmVkdT4KKyAqICBGcmVkIElzYW1hbiA8aWlzYW1hbkB1bWljaC5lZHU+CisgKgorICogcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSwgY29weSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYW5kCisgKiByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIGZvciBhbnkgcHVycG9zZSwKKyAqIHNvIGxvbmcgYXMgdGhlIG5hbWUgb2YgdGhlIHVuaXZlcnNpdHkgb2YgbWljaGlnYW4gaXMgbm90IHVzZWQgaW4KKyAqIGFueSBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbgorICogb2YgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIGF1dGhvcml6YXRpb24uICBpZgorICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ugb3IgYW55IG90aGVyIGlkZW50aWZpY2F0aW9uIG9mIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBpcyBpbmNsdWRlZCBpbiBhbnkgY29weSBvZiBhbnkgcG9ydGlvbiBvZgorICogdGhpcyBzb2Z0d2FyZSwgdGhlbiB0aGUgZGlzY2xhaW1lciBiZWxvdyBtdXN0IGFsc28gYmUgaW5jbHVkZWQuCisgKgorICogdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcyBpcywgd2l0aG91dCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZQorICogdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBhcyB0byBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0CisgKiB3YXJyYW50eSBieSB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGltcGxpZWQgd2FycmFudGllcyBvZgorICogbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHRoZSByZWdlbnRzCisgKiBvZiB0aGUgdW5pdmVyc2l0eSBvZiBtaWNoaWdhbiBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcywKKyAqIGluY2x1ZGluZyBzcGVjaWFsLCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLAorICogd2l0aCByZXNwZWN0IHRvIGFueSBjbGFpbSBhcmlzaW5nIG91dCBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHVzZQorICogb2YgdGhlIHNvZnR3YXJlLCBldmVuIGlmIGl0IGhhcyBiZWVuIG9yIGlzIGhlcmVhZnRlciBhZHZpc2VkIG9mIHRoZQorICogcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICovCisKKyNpbmNsdWRlICJibG9ja2xheW91dC5oIgorI2RlZmluZSBORlNEQkdfRkFDSUxJVFkgICAgICAgICBORlNEQkdfUE5GU19MRAorCisvKiBCaXQgbnVtYmVycyAqLworI2RlZmluZSBFWFRFTlRfSU5JVElBTElaRUQgMAorI2RlZmluZSBFWFRFTlRfV1JJVFRFTiAgICAgMQorI2RlZmluZSBFWFRFTlRfSU5fQ09NTUlUICAgMgorI2RlZmluZSBJTlRFUk5BTF9FWElTVFMgICAgTVlfTUFYX1RBR1MKKyNkZWZpbmUgSU5URVJOQUxfTUFTSyAgICAgICgoMSA8PCBJTlRFUk5BTF9FWElTVFMpIC0gMSkKKworLyogUmV0dXJucyBsYXJnZXN0IHQ8PXMgcy50LiB0JWJhc2U9PTAgKi8KK3N0YXRpYyBpbmxpbmUgc2VjdG9yX3Qgbm9ybWFsaXplKHNlY3Rvcl90IHMsIGludCBiYXNlKQoreworCXNlY3Rvcl90IHRtcCA9IHM7IC8qIFNpbmNlIGRvX2RpdiBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KKwlyZXR1cm4gcyAtIGRvX2Rpdih0bXAsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHNlY3Rvcl90IG5vcm1hbGl6ZV91cChzZWN0b3JfdCBzLCBpbnQgYmFzZSkKK3sKKwlyZXR1cm4gbm9ybWFsaXplKHMgKyBiYXNlIC0gMSwgYmFzZSk7Cit9CisKKy8qIENvbXBsZXRlIHN0dWIgdXNpbmcgbGlzdCB3aGlsZSBkZXRlcm1pbmUgQVBJIHdhbnRlZCAqLworCisvKiBSZXR1cm5zIHRhZ3MsIG9yIG5lZ2F0aXZlICovCitzdGF0aWMgaW50MzJfdCBfZmluZF9lbnRyeShzdHJ1Y3QgbXlfdHJlZSAqdHJlZSwgdTY0IHMpCit7CisJc3RydWN0IHBuZnNfaW52YWxfdHJhY2tpbmcgKnBvczsKKworCWRwcmludGsoIiVzKCVsbHUpIGVudGVyXG4iLCBfX2Z1bmNfXywgcyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBvcywgJnRyZWUtPm10dF9zdHViLCBpdF9saW5rKSB7CisJCWlmIChwb3MtPml0X3NlY3RvciA+IHMpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAocG9zLT5pdF9zZWN0b3IgPT0gcykKKwkJCXJldHVybiBwb3MtPml0X3RhZ3MgJiBJTlRFUk5BTF9NQVNLOworCQllbHNlCisJCQlicmVhazsKKwl9CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBfaGFzX3RhZyhzdHJ1Y3QgbXlfdHJlZSAqdHJlZSwgdTY0IHMsIGludDMyX3QgdGFnKQoreworCWludDMyX3QgdGFnczsKKworCWRwcmludGsoIiVzKCVsbHUsICVpKSBlbnRlclxuIiwgX19mdW5jX18sIHMsIHRhZyk7CisJcyA9IG5vcm1hbGl6ZShzLCB0cmVlLT5tdHRfc3RlcF9zaXplKTsKKwl0YWdzID0gX2ZpbmRfZW50cnkodHJlZSwgcyk7CisJaWYgKCh0YWdzIDwgMCkgfHwgISh0YWdzICYgKDEgPDwgdGFnKSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKKy8qIENyZWF0ZXMgZW50cnkgd2l0aCB0YWcsIG9yIGlmIGVudHJ5IGFscmVhZHkgZXhpc3RzLCB1bmlvbnMgdGFnIHRvIGl0LgorICogSWYgc3RvcmFnZSBpcyBub3QgTlVMTCwgbmV3bHkgY3JlYXRlZCBlbnRyeSB3aWxsIHVzZSBpdC4KKyAqIFJldHVybnMgbnVtYmVyIG9mIGVudHJpZXMgYWRkZWQsIG9yIG5lZ2F0aXZlIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IF9hZGRfZW50cnkoc3RydWN0IG15X3RyZWUgKnRyZWUsIHU2NCBzLCBpbnQzMl90IHRhZywKKwkJICAgICAgc3RydWN0IHBuZnNfaW52YWxfdHJhY2tpbmcgKnN0b3JhZ2UpCit7CisJaW50IGZvdW5kID0gMDsKKwlzdHJ1Y3QgcG5mc19pbnZhbF90cmFja2luZyAqcG9zOworCisJZHByaW50aygiJXMoJWxsdSwgJWksICVwKSBlbnRlclxuIiwgX19mdW5jX18sIHMsIHRhZywgc3RvcmFnZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBvcywgJnRyZWUtPm10dF9zdHViLCBpdF9saW5rKSB7CisJCWlmIChwb3MtPml0X3NlY3RvciA+IHMpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAocG9zLT5pdF9zZWN0b3IgPT0gcykgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCWlmIChmb3VuZCkgeworCQlwb3MtPml0X3RhZ3MgfD0gKDEgPDwgdGFnKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJc3RydWN0IHBuZnNfaW52YWxfdHJhY2tpbmcgKm5ldzsKKwkJaWYgKHN0b3JhZ2UpCisJCQluZXcgPSBzdG9yYWdlOworCQllbHNlIHsKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfTk9GUyk7CisJCQlpZiAoIW5ldykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQluZXctPml0X3NlY3RvciA9IHM7CisJCW5ldy0+aXRfdGFncyA9ICgxIDw8IHRhZyk7CisJCWxpc3RfYWRkKCZuZXctPml0X2xpbmssICZwb3MtPml0X2xpbmspOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIFhYWFggUmVhbGx5IHdhbnQgb3B0aW9uIHRvIG5vdCBjcmVhdGUgKi8KKy8qIE92ZXIgcmFuZ2UsIHVuaW9ucyB0YWcgd2l0aCBleGlzdGluZyBlbnRyaWVzLCBlbHNlIGNyZWF0ZXMgZW50cnkgd2l0aCB0YWcgKi8KK3N0YXRpYyBpbnQgX3NldF9yYW5nZShzdHJ1Y3QgbXlfdHJlZSAqdHJlZSwgaW50MzJfdCB0YWcsIHU2NCBzLCB1NjQgbGVuZ3RoKQoreworCXU2NCBpOworCisJZHByaW50aygiJXMoJWksICVsbHUsICVsbHUpIGVudGVyXG4iLCBfX2Z1bmNfXywgdGFnLCBzLCBsZW5ndGgpOworCWZvciAoaSA9IG5vcm1hbGl6ZShzLCB0cmVlLT5tdHRfc3RlcF9zaXplKTsgaSA8IHMgKyBsZW5ndGg7CisJICAgICBpICs9IHRyZWUtPm10dF9zdGVwX3NpemUpCisJCWlmIChfYWRkX2VudHJ5KHRyZWUsIGksIHRhZywgTlVMTCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworLyogRW5zdXJlIHRoYXQgZnV0dXJlIG9wZXJhdGlvbnMgb24gZ2l2ZW4gcmFuZ2Ugb2YgdHJlZSB3aWxsIG5vdCBtYWxsb2MgKi8KK3N0YXRpYyBpbnQgX3ByZWxvYWRfcmFuZ2Uoc3RydWN0IG15X3RyZWUgKnRyZWUsIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgpCit7CisJdTY0IHN0YXJ0LCBlbmQsIHM7CisJaW50IGNvdW50LCBpLCB1c2VkID0gMCwgc3RhdHVzID0gLUVOT01FTTsKKwlzdHJ1Y3QgcG5mc19pbnZhbF90cmFja2luZyAqKnN0b3JhZ2U7CisKKwlkcHJpbnRrKCIlcyglbGx1LCAlbGx1KSBlbnRlclxuIiwgX19mdW5jX18sIG9mZnNldCwgbGVuZ3RoKTsKKwlzdGFydCA9IG5vcm1hbGl6ZShvZmZzZXQsIHRyZWUtPm10dF9zdGVwX3NpemUpOworCWVuZCA9IG5vcm1hbGl6ZV91cChvZmZzZXQgKyBsZW5ndGgsIHRyZWUtPm10dF9zdGVwX3NpemUpOworCWNvdW50ID0gKGludCkoZW5kIC0gc3RhcnQpIC8gKGludCl0cmVlLT5tdHRfc3RlcF9zaXplOworCisJLyogUHJlLW1hbGxvYyB3aGF0IG1lbW9yeSB3ZSBtaWdodCBuZWVkICovCisJc3RvcmFnZSA9IGttYWxsb2Moc2l6ZW9mKCpzdG9yYWdlKSAqIGNvdW50LCBHRlBfTk9GUyk7CisJaWYgKCFzdG9yYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdG9yYWdlW2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBuZnNfaW52YWxfdHJhY2tpbmcpLAorCQkJCSAgICAgR0ZQX05PRlMpOworCQlpZiAoIXN0b3JhZ2VbaV0pCisJCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKworCS8qIE5vdyBuZWVkIGxvY2sgLSBIT1c/Pz8gKi8KKworCWZvciAocyA9IHN0YXJ0OyBzIDwgZW5kOyBzICs9IHRyZWUtPm10dF9zdGVwX3NpemUpCisJCXVzZWQgKz0gX2FkZF9lbnRyeSh0cmVlLCBzLCBJTlRFUk5BTF9FWElTVFMsIHN0b3JhZ2VbdXNlZF0pOworCisJLyogVW5sb2NrIC0gSE9XPz8/ICovCisJc3RhdHVzID0gMDsKKworIG91dF9jbGVhbnVwOgorCWZvciAoaSA9IHVzZWQ7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghc3RvcmFnZVtpXSkKKwkJCWJyZWFrOworCQlrZnJlZShzdG9yYWdlW2ldKTsKKwl9CisJa2ZyZWUoc3RvcmFnZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgc2V0X25lZWRzX2luaXQoc2VjdG9yX3QgKmFycmF5LCBzZWN0b3JfdCBvZmZzZXQpCit7CisJc2VjdG9yX3QgKnAgPSBhcnJheTsKKworCWRwcmludGsoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJaWYgKCFwKQorCQlyZXR1cm47CisJd2hpbGUgKCpwIDwgb2Zmc2V0KQorCQlwKys7CisJaWYgKCpwID09IG9mZnNldCkKKwkJcmV0dXJuOworCWVsc2UgaWYgKCpwID09IH4wKSB7CisJCSpwKysgPSBvZmZzZXQ7CisJCSpwID0gfjA7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQlzZWN0b3JfdCAqc2F2ZSA9IHA7CisJCWRwcmludGsoIiVzIEFkZGluZyAlbGx1XG4iLCBfX2Z1bmNfXywgKHU2NClvZmZzZXQpOworCQl3aGlsZSAoKnAgIT0gfjApCisJCQlwKys7CisJCXArKzsKKwkJbWVtbW92ZShzYXZlICsgMSwgc2F2ZSwgKGNoYXIgKilwIC0gKGNoYXIgKilzYXZlKTsKKwkJKnNhdmUgPSBvZmZzZXQ7CisJCXJldHVybjsKKwl9Cit9CisKKy8qIFdlIGFyZSByZWx5aW5nIG9uIHBhZ2UgbG9jayB0byBzZXJpYWxpemUgdGhpcyAqLworaW50IGJsX2lzX3NlY3Rvcl9pbml0KHN0cnVjdCBwbmZzX2ludmFsX21hcmtpbmdzICptYXJrcywgc2VjdG9yX3QgaXNlY3QpCit7CisJaW50IHJ2OworCisJc3Bpbl9sb2NrKCZtYXJrcy0+aW1fbG9jayk7CisJcnYgPSBfaGFzX3RhZygmbWFya3MtPmltX3RyZWUsIGlzZWN0LCBFWFRFTlRfSU5JVElBTElaRUQpOworCXNwaW5fdW5sb2NrKCZtYXJrcy0+aW1fbG9jayk7CisJcmV0dXJuIHJ2OworfQorCisvKiBBc3N1bWUgc3RhcnQsIGVuZCBhbHJlYWR5IHNlY3RvciBhbGlnbmVkICovCitzdGF0aWMgaW50CitfcmFuZ2VfaGFzX3RhZyhzdHJ1Y3QgbXlfdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQzMl90IHRhZykKK3sKKwlzdHJ1Y3QgcG5mc19pbnZhbF90cmFja2luZyAqcG9zOworCXU2NCBleHBlY3QgPSAwOworCisJZHByaW50aygiJXMoJWxsdSwgJWxsdSwgJWkpIGVudGVyXG4iLCBfX2Z1bmNfXywgc3RhcnQsIGVuZCwgdGFnKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UocG9zLCAmdHJlZS0+bXR0X3N0dWIsIGl0X2xpbmspIHsKKwkJaWYgKHBvcy0+aXRfc2VjdG9yID49IGVuZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWV4cGVjdCkgeworCQkJaWYgKChwb3MtPml0X3NlY3RvciA9PSBlbmQgLSB0cmVlLT5tdHRfc3RlcF9zaXplKSAmJgorCQkJICAgIChwb3MtPml0X3RhZ3MgJiAoMSA8PCB0YWcpKSkgeworCQkJCWV4cGVjdCA9IHBvcy0+aXRfc2VjdG9yIC0gdHJlZS0+bXR0X3N0ZXBfc2l6ZTsKKwkJCQlpZiAocG9zLT5pdF9zZWN0b3IgPCB0cmVlLT5tdHRfc3RlcF9zaXplIHx8IGV4cGVjdCA8IHN0YXJ0KQorCQkJCQlyZXR1cm4gMTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJaWYgKHBvcy0+aXRfc2VjdG9yICE9IGV4cGVjdCB8fCAhKHBvcy0+aXRfdGFncyAmICgxIDw8IHRhZykpKQorCQkJcmV0dXJuIDA7CisJCWV4cGVjdCAtPSB0cmVlLT5tdHRfc3RlcF9zaXplOworCQlpZiAoZXhwZWN0IDwgc3RhcnQpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmFuZ2Vfd3JpdHRlbihzdHJ1Y3QgcG5mc19pbnZhbF9tYXJraW5ncyAqbWFya3MsCisJCQkgICAgc2VjdG9yX3Qgc3RhcnQsIHNlY3Rvcl90IGVuZCkKK3sKKwlpbnQgcnY7CisKKwlzcGluX2xvY2soJm1hcmtzLT5pbV9sb2NrKTsKKwlydiA9IF9yYW5nZV9oYXNfdGFnKCZtYXJrcy0+aW1fdHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX1dSSVRURU4pOworCXNwaW5fdW5sb2NrKCZtYXJrcy0+aW1fbG9jayk7CisJcmV0dXJuIHJ2OworfQorCisvKiBNYXJrcyBzZWN0b3JzIGluIFtvZmZlc3QsIG9mZnNldF9sZW5ndGgpIGFzIGhhdmluZyBiZWVuIGluaXRpYWxpemVkLgorICogQWxsIGxlbmd0aHMgYXJlIHN0ZXAtYWxpZ25lZCwgd2hlcmUgc3RlcCBpcyBtaW4ocGFnZXNpemUsIGJsb2Nrc2l6ZSkuCisgKiBOb3RlcyB3aGVyZSBwYXJ0aWFsIGJsb2NrIGlzIGluaXRpYWxpemVkLCBhbmQgaGVscHMgcHJlcGFyZSBpdCBmb3IKKyAqIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uIGxhdGVyLgorICovCisvKiBDdXJyZW50bHkgYXNzdW1lcyBvZmZzZXQgaXMgcGFnZS1hbGlnbmVkICovCitpbnQgYmxfbWFya19zZWN0b3JzX2luaXQoc3RydWN0IHBuZnNfaW52YWxfbWFya2luZ3MgKm1hcmtzLAorCQkJICAgICBzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IGxlbmd0aCwKKwkJCSAgICAgc2VjdG9yX3QgKipwYWdlcykKK3sKKwlzZWN0b3JfdCBzLCBzdGFydCwgZW5kOworCXNlY3Rvcl90ICphcnJheSA9IE5VTEw7IC8qIFBhZ2VzIHRvIG1hcmsgKi8KKworCWRwcmludGsoIiVzKG9mZnNldD0lbGx1LGxlbj0lbGx1KSBlbnRlclxuIiwKKwkJX19mdW5jX18sICh1NjQpb2Zmc2V0LCAodTY0KWxlbmd0aCk7CisJcyA9IG1heCgoc2VjdG9yX3QpIDMsCisJCTIgKiAobWFya3MtPmltX2Jsb2NrX3NpemUgLyAoUEFHRV9DQUNIRV9TRUNUT1JTKSkpOworCWRwcmludGsoIiVzIHNldCBtYXg9JWxsdVxuIiwgX19mdW5jX18sICh1NjQpcyk7CisJaWYgKHBhZ2VzKSB7CisJCWFycmF5ID0ga21hbGxvYyhzICogc2l6ZW9mKHNlY3Rvcl90KSwgR0ZQX05PRlMpOworCQlpZiAoIWFycmF5KQorCQkJZ290byBvdXRlcnI7CisJCWFycmF5WzBdID0gfjA7CisJfQorCisJc3RhcnQgPSBub3JtYWxpemUob2Zmc2V0LCBtYXJrcy0+aW1fYmxvY2tfc2l6ZSk7CisJZW5kID0gbm9ybWFsaXplX3VwKG9mZnNldCArIGxlbmd0aCwgbWFya3MtPmltX2Jsb2NrX3NpemUpOworCWlmIChfcHJlbG9hZF9yYW5nZSgmbWFya3MtPmltX3RyZWUsIHN0YXJ0LCBlbmQgLSBzdGFydCkpCisJCWdvdG8gb3V0ZXJyOworCisJc3Bpbl9sb2NrKCZtYXJrcy0+aW1fbG9jayk7CisKKwlmb3IgKHMgPSBub3JtYWxpemVfdXAoc3RhcnQsIFBBR0VfQ0FDSEVfU0VDVE9SUyk7CisJICAgICBzIDwgb2Zmc2V0OyBzICs9IFBBR0VfQ0FDSEVfU0VDVE9SUykgeworCQlkcHJpbnRrKCIlcyBwcmUtYXJlYSBwYWdlc1xuIiwgX19mdW5jX18pOworCQkvKiBQb3J0aW9uIG9mIHVzZWQgYmxvY2sgaXMgbm90IGluaXRpYWxpemVkICovCisJCWlmICghX2hhc190YWcoJm1hcmtzLT5pbV90cmVlLCBzLCBFWFRFTlRfSU5JVElBTElaRUQpKQorCQkJc2V0X25lZWRzX2luaXQoYXJyYXksIHMpOworCX0KKwlpZiAoX3NldF9yYW5nZSgmbWFya3MtPmltX3RyZWUsIEVYVEVOVF9JTklUSUFMSVpFRCwgb2Zmc2V0LCBsZW5ndGgpKQorCQlnb3RvIG91dF91bmxvY2s7CisJZm9yIChzID0gbm9ybWFsaXplX3VwKG9mZnNldCArIGxlbmd0aCwgUEFHRV9DQUNIRV9TRUNUT1JTKTsKKwkgICAgIHMgPCBlbmQ7IHMgKz0gUEFHRV9DQUNIRV9TRUNUT1JTKSB7CisJCWRwcmludGsoIiVzIHBvc3QtYXJlYSBwYWdlc1xuIiwgX19mdW5jX18pOworCQlpZiAoIV9oYXNfdGFnKCZtYXJrcy0+aW1fdHJlZSwgcywgRVhURU5UX0lOSVRJQUxJWkVEKSkKKwkJCXNldF9uZWVkc19pbml0KGFycmF5LCBzKTsKKwl9CisKKwlzcGluX3VubG9jaygmbWFya3MtPmltX2xvY2spOworCisJaWYgKHBhZ2VzKSB7CisJCWlmIChhcnJheVswXSA9PSB+MCkgeworCQkJa2ZyZWUoYXJyYXkpOworCQkJKnBhZ2VzID0gTlVMTDsKKwkJfSBlbHNlCisJCQkqcGFnZXMgPSBhcnJheTsKKwl9CisJcmV0dXJuIDA7CisKKyBvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZtYXJrcy0+aW1fbG9jayk7Cisgb3V0ZXJyOgorCWlmIChwYWdlcykgeworCQlrZnJlZShhcnJheSk7CisJCSpwYWdlcyA9IE5VTEw7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCisvKiBNYXJrcyBzZWN0b3JzIGluIFtvZmZlc3QsIG9mZnNldCtsZW5ndGgpIGFzIGhhdmluZyBiZWVuIHdyaXR0ZW4gdG8gZGlzay4KKyAqIEFsbCBsZW5ndGhzIHNob3VsZCBiZSBibG9jayBhbGlnbmVkLgorICovCitzdGF0aWMgaW50IG1hcmtfd3JpdHRlbl9zZWN0b3JzKHN0cnVjdCBwbmZzX2ludmFsX21hcmtpbmdzICptYXJrcywKKwkJCQlzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IGxlbmd0aCkKK3sKKwlpbnQgc3RhdHVzOworCisJZHByaW50aygiJXMob2Zmc2V0PSVsbHUsbGVuPSVsbHUpIGVudGVyXG4iLCBfX2Z1bmNfXywKKwkJKHU2NClvZmZzZXQsICh1NjQpbGVuZ3RoKTsKKwlzcGluX2xvY2soJm1hcmtzLT5pbV9sb2NrKTsKKwlzdGF0dXMgPSBfc2V0X3JhbmdlKCZtYXJrcy0+aW1fdHJlZSwgRVhURU5UX1dSSVRURU4sIG9mZnNldCwgbGVuZ3RoKTsKKwlzcGluX3VubG9jaygmbWFya3MtPmltX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Nob3J0X2V4dGVudChzdHJ1Y3QgcG5mc19ibG9ja19zaG9ydF9leHRlbnQgKmJlKQoreworCWRwcmludGsoIlBSSU5UIFNIT1JUIEVYVEVOVCBleHRlbnQgJXBcbiIsIGJlKTsKKwlpZiAoYmUpIHsKKwkJZHByaW50aygiICAgICAgICBiZV9mX29mZnNldCAlbGx1XG4iLCAodTY0KWJlLT5ic2VfZl9vZmZzZXQpOworCQlkcHJpbnRrKCIgICAgICAgIGJlX2xlbmd0aCAgICVsbHVcbiIsICh1NjQpYmUtPmJzZV9sZW5ndGgpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfY2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX3Nob3J0X2V4dGVudCAqYmU7CisJdW5zaWduZWQgaW50IGkgPSAwOworCisJaWZkZWJ1ZyhGQUNJTElUWSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiKioqKioqKioqKioqKioqKlxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICJFeHRlbnQgbGlzdCBsb29rcyBsaWtlOlxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmUsIGxpc3QsIGJzZV9ub2RlKSB7CisJCQlpKys7CisJCQlwcmludF9zaG9ydF9leHRlbnQoYmUpOworCQl9CisJCWlmIChpICE9IGNvdW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuXG5FeHBlY3RlZCAldSBlbnRyaWVzXG5cblxuIiwgY291bnQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKioqKioqKioqKioqKioqKlxuIik7CisJfQorfQorCisvKiBOb3RlOiBJbiB0aGVvcnksIHdlIHNob3VsZCBkbyBtb3JlIGNoZWNraW5nIHRoYXQgZGV2aWQncyBtYXRjaCBiZXR3ZWVuCisgKiBvbGQgYW5kIG5ldywgYnV0IGlmIHRoZXkgZG9uJ3QsIHRoZSBsaXN0cyBhcmUgdG9vIGNvcnJ1cHQgdG8gc2FsdmFnZSBhbnl3YXkuCisgKi8KKy8qIE5vdGUgdGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gYmxfYWRkX21lcmdlX2V4dGVudCAqLworc3RhdGljIHZvaWQgYWRkX3RvX2NvbW1pdGxpc3Qoc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICpibCwKKwkJCSAgICAgIHN0cnVjdCBwbmZzX2Jsb2NrX3Nob3J0X2V4dGVudCAqbmV3KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmNsaXN0ID0gJmJsLT5ibF9jb21taXQ7CisJc3RydWN0IHBuZnNfYmxvY2tfc2hvcnRfZXh0ZW50ICpvbGQsICpzYXZlOworCXNlY3Rvcl90IGVuZCA9IG5ldy0+YnNlX2Zfb2Zmc2V0ICsgbmV3LT5ic2VfbGVuZ3RoOworCisJZHByaW50aygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlwcmludF9zaG9ydF9leHRlbnQobmV3KTsKKwlwcmludF9jbGlzdChjbGlzdCwgYmwtPmJsX2NvdW50KTsKKwlibC0+YmxfY291bnQrKzsKKwkvKiBTY2FuIGZvciBwcm9wZXIgcGxhY2UgdG8gaW5zZXJ0LCBleHRlbmRpbmcgbmV3IHRvIHRoZSBsZWZ0CisJICogYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2xkLCBzYXZlLCBjbGlzdCwgYnNlX25vZGUpIHsKKwkJaWYgKG5ldy0+YnNlX2Zfb2Zmc2V0IDwgb2xkLT5ic2VfZl9vZmZzZXQpCisJCQlicmVhazsKKwkJaWYgKGVuZCA8PSBvbGQtPmJzZV9mX29mZnNldCArIG9sZC0+YnNlX2xlbmd0aCkgeworCQkJLyogUmFuZ2UgaXMgYWxyZWFkeSBpbiBsaXN0ICovCisJCQlibC0+YmxfY291bnQtLTsKKwkJCWtmcmVlKG5ldyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAobmV3LT5ic2VfZl9vZmZzZXQgPD0KKwkJCQlvbGQtPmJzZV9mX29mZnNldCArIG9sZC0+YnNlX2xlbmd0aCkgeworCQkJLyogbmV3IG92ZXJsYXBzIG9yIGFidXRzIGV4aXN0aW5nIGJlICovCisJCQlpZiAobmV3LT5ic2VfbWRldiA9PSBvbGQtPmJzZV9tZGV2KSB7CisJCQkJLyogZXh0ZW5kIG5ldyB0byBmdWxseSByZXBsYWNlIG9sZCAqLworCQkJCW5ldy0+YnNlX2xlbmd0aCArPSBuZXctPmJzZV9mX29mZnNldCAtCisJCQkJCQlvbGQtPmJzZV9mX29mZnNldDsKKwkJCQluZXctPmJzZV9mX29mZnNldCA9IG9sZC0+YnNlX2Zfb2Zmc2V0OworCQkJCWxpc3RfZGVsKCZvbGQtPmJzZV9ub2RlKTsKKwkJCQlibC0+YmxfY291bnQtLTsKKwkJCQlrZnJlZShvbGQpOworCQkJfQorCQl9CisJfQorCS8qIE5vdGUgdGhhdCBpZiB3ZSBuZXZlciBoaXQgdGhlIGFib3ZlIGJyZWFrLCBvbGQgd2lsbCBub3QgcG9pbnQgdG8gYQorCSAqIHZhbGlkIGV4dGVudC4gIEhvd2V2ZXIsIGluIHRoYXQgY2FzZSAmb2xkLT5ic2Vfbm9kZT09bGlzdC4KKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZuZXctPmJzZV9ub2RlLCAmb2xkLT5ic2Vfbm9kZSk7CisJLyogU2NhbiBmb3J3YXJkIGZvciBvdmVybGFwcy4gIElmIHdlIGZpbmQgYW55LCBleHRlbmQgbmV3IGFuZAorCSAqIHJlbW92ZSB0aGUgb3ZlcmxhcHBlZCBleHRlbnQuCisJICovCisJb2xkID0gbGlzdF9wcmVwYXJlX2VudHJ5KG5ldywgY2xpc3QsIGJzZV9ub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUob2xkLCBzYXZlLCBjbGlzdCwgYnNlX25vZGUpIHsKKwkJaWYgKGVuZCA8IG9sZC0+YnNlX2Zfb2Zmc2V0KQorCQkJYnJlYWs7CisJCS8qIG5ldyBvdmVybGFwcyBvciBhYnV0cyBvbGQgKi8KKwkJaWYgKG5ldy0+YnNlX21kZXYgPT0gb2xkLT5ic2VfbWRldikgeworCQkJaWYgKGVuZCA8IG9sZC0+YnNlX2Zfb2Zmc2V0ICsgb2xkLT5ic2VfbGVuZ3RoKSB7CisJCQkJLyogZXh0ZW5kIG5ldyB0byBmdWxseSBjb3ZlciBvbGQgKi8KKwkJCQllbmQgPSBvbGQtPmJzZV9mX29mZnNldCArIG9sZC0+YnNlX2xlbmd0aDsKKwkJCQluZXctPmJzZV9sZW5ndGggPSBlbmQgLSBuZXctPmJzZV9mX29mZnNldDsKKwkJCX0KKwkJCWxpc3RfZGVsKCZvbGQtPmJzZV9ub2RlKTsKKwkJCWJsLT5ibF9jb3VudC0tOworCQkJa2ZyZWUob2xkKTsKKwkJfQorCX0KKwlkcHJpbnRrKCIlczogYWZ0ZXIgbWVyZ2luZ1xuIiwgX19mdW5jX18pOworCXByaW50X2NsaXN0KGNsaXN0LCBibC0+YmxfY291bnQpOworfQorCisvKiBOb3RlIHRoZSByYW5nZSBkZXNjcmliZWQgYnkgb2Zmc2V0LCBsZW5ndGggaXMgZ3VhcmFudGVlZCB0byBiZSBjb250YWluZWQKKyAqIHdpdGhpbiBiZS4KKyAqLworaW50IGJsX21hcmtfZm9yX2NvbW1pdChzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJlLAorCQkgICAgc2VjdG9yX3Qgb2Zmc2V0LCBzZWN0b3JfdCBsZW5ndGgpCit7CisJc2VjdG9yX3QgbmV3X2VuZCwgZW5kID0gb2Zmc2V0ICsgbGVuZ3RoOworCXN0cnVjdCBwbmZzX2Jsb2NrX3Nob3J0X2V4dGVudCAqbmV3OworCXN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwgPSBjb250YWluZXJfb2YoYmUtPmJlX2ludmFsLAorCQkJCQkJICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCwKKwkJCQkJCSAgICBibF9pbnZhbCk7CisKKwluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX05PRlMpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1hcmtfd3JpdHRlbl9zZWN0b3JzKGJlLT5iZV9pbnZhbCwgb2Zmc2V0LCBsZW5ndGgpOworCS8qIFdlIHdhbnQgdG8gYWRkIHRoZSByYW5nZSB0byBjb21taXQgbGlzdCwgYnV0IGl0IG11c3QgYmUKKwkgKiBibG9jay1ub3JtYWxpemVkLCBhbmQgdmVyaWZpZWQgdGhhdCB0aGUgbm9ybWFsaXplZCByYW5nZSBoYXMKKwkgKiBiZWVuIGVudGlyZWx5IHdyaXR0ZW4gdG8gZGlzay4KKwkgKi8KKwluZXctPmJzZV9mX29mZnNldCA9IG9mZnNldDsKKwlvZmZzZXQgPSBub3JtYWxpemUob2Zmc2V0LCBibC0+YmxfYmxvY2tzaXplKTsKKwlpZiAob2Zmc2V0IDwgbmV3LT5ic2VfZl9vZmZzZXQpIHsKKwkJaWYgKGlzX3JhbmdlX3dyaXR0ZW4oYmUtPmJlX2ludmFsLCBvZmZzZXQsIG5ldy0+YnNlX2Zfb2Zmc2V0KSkKKwkJCW5ldy0+YnNlX2Zfb2Zmc2V0ID0gb2Zmc2V0OworCQllbHNlCisJCQluZXctPmJzZV9mX29mZnNldCA9IG9mZnNldCArIGJsLT5ibF9ibG9ja3NpemU7CisJfQorCW5ld19lbmQgPSBub3JtYWxpemVfdXAoZW5kLCBibC0+YmxfYmxvY2tzaXplKTsKKwlpZiAoZW5kIDwgbmV3X2VuZCkgeworCQlpZiAoaXNfcmFuZ2Vfd3JpdHRlbihiZS0+YmVfaW52YWwsIGVuZCwgbmV3X2VuZCkpCisJCQllbmQgPSBuZXdfZW5kOworCQllbHNlCisJCQllbmQgPSBuZXdfZW5kIC0gYmwtPmJsX2Jsb2Nrc2l6ZTsKKwl9CisJaWYgKGVuZCA8PSBuZXctPmJzZV9mX29mZnNldCkgeworCQlrZnJlZShuZXcpOworCQlyZXR1cm4gMDsKKwl9CisJbmV3LT5ic2VfbGVuZ3RoID0gZW5kIC0gbmV3LT5ic2VfZl9vZmZzZXQ7CisJbmV3LT5ic2VfZGV2aWQgPSBiZS0+YmVfZGV2aWQ7CisJbmV3LT5ic2VfbWRldiA9IGJlLT5iZV9tZGV2OworCisJc3Bpbl9sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCS8qIG5ldyB3aWxsIGJlIGZyZWVkLCBlaXRoZXIgYnkgYWRkX3RvX2NvbW1pdGxpc3QgaWYgaXQgZGVjaWRlcyBub3QKKwkgKiB0byB1c2UgaXQsIG9yIGFmdGVyIExBWU9VVENPTU1JVCB1c2VzIGl0IGluIHRoZSBjb21taXRsaXN0LgorCSAqLworCWFkZF90b19jb21taXRsaXN0KGJsLCBuZXcpOworCXNwaW5fdW5sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmludF9ibF9leHRlbnQoc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSkKK3sKKwlkcHJpbnRrKCJQUklOVCBFWFRFTlQgZXh0ZW50ICVwXG4iLCBiZSk7CisJaWYgKGJlKSB7CisJCWRwcmludGsoIiAgICAgICAgYmVfZl9vZmZzZXQgJWxsdVxuIiwgKHU2NCliZS0+YmVfZl9vZmZzZXQpOworCQlkcHJpbnRrKCIgICAgICAgIGJlX2xlbmd0aCAgICVsbHVcbiIsICh1NjQpYmUtPmJlX2xlbmd0aCk7CisJCWRwcmludGsoIiAgICAgICAgYmVfdl9vZmZzZXQgJWxsdVxuIiwgKHU2NCliZS0+YmVfdl9vZmZzZXQpOworCQlkcHJpbnRrKCIgICAgICAgIGJlX3N0YXRlICAgICVkXG4iLCBiZS0+YmVfc3RhdGUpOworCX0KK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfZXh0ZW50KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmU7CisKKwliZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQsIGJlX3JlZmNudCk7CisJZHByaW50aygiJXMgYmU9JXBcbiIsIF9fZnVuY19fLCBiZSk7CisJa2ZyZWUoYmUpOworfQorCit2b2lkCitibF9wdXRfZXh0ZW50KHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUpCit7CisJaWYgKGJlKSB7CisJCWRwcmludGsoIiVzIGVudGVyICVwICglaSlcbiIsIF9fZnVuY19fLCBiZSwKKwkJCWF0b21pY19yZWFkKCZiZS0+YmVfcmVmY250LnJlZmNvdW50KSk7CisJCWtyZWZfcHV0KCZiZS0+YmVfcmVmY250LCBkZXN0cm95X2V4dGVudCk7CisJfQorfQorCitzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJsX2FsbG9jX2V4dGVudCh2b2lkKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmU7CisKKwliZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCksIEdGUF9OT0ZTKTsKKwlpZiAoIWJlKQorCQlyZXR1cm4gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmYmUtPmJlX25vZGUpOworCWtyZWZfaW5pdCgmYmUtPmJlX3JlZmNudCk7CisJYmUtPmJlX2ludmFsID0gTlVMTDsKKwlyZXR1cm4gYmU7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2VsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZTsKKwlkcHJpbnRrKCIqKioqKioqKioqKioqKioqXG4iKTsKKwlkcHJpbnRrKCJFeHRlbnQgbGlzdCBsb29rcyBsaWtlOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShiZSwgbGlzdCwgYmVfbm9kZSkgeworCQlwcmludF9ibF9leHRlbnQoYmUpOworCX0KKwlkcHJpbnRrKCIqKioqKioqKioqKioqKioqXG4iKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2V4dGVudHNfY29uc2lzdGVudChzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKm9sZCwgc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpuZXcpCit7CisJLyogTm90ZSB0aGlzIGFzc3VtZXMgbmV3LT5iZV9mX29mZnNldCA+PSBvbGQtPmJlX2Zfb2Zmc2V0ICovCisJcmV0dXJuIChuZXctPmJlX3N0YXRlID09IG9sZC0+YmVfc3RhdGUpICYmCisJCSgobmV3LT5iZV9zdGF0ZSA9PSBQTkZTX0JMT0NLX05PTkVfREFUQSkgfHwKKwkJICgobmV3LT5iZV92X29mZnNldCAtIG9sZC0+YmVfdl9vZmZzZXQgPT0KKwkJICAgbmV3LT5iZV9mX29mZnNldCAtIG9sZC0+YmVfZl9vZmZzZXQpICYmCisJCSAgbmV3LT5iZV9tZGV2ID09IG9sZC0+YmVfbWRldikpOworfQorCisvKiBBZGRzIG5ldyB0byBhcHByb3ByaWF0ZSBsaXN0IGluIGJsLCBtb2RpZnlpbmcgbmV3IGFuZCByZW1vdmluZyBleGlzdGluZworICogZXh0ZW50cyBhcyBhcHByb3ByaWF0ZSB0byBkZWFsIHdpdGggb3ZlcmxhcHMuCisgKgorICogU2VlIGJsX2ZpbmRfZ2V0X2V4dGVudCBmb3IgbGlzdCBjb25zdHJhaW50cy4KKyAqCisgKiBSZWZjb3VudCBvbiBuZXcgaXMgYWxyZWFkeSBzZXQuICBJZiBlbmQgdXAgbm90IHVzaW5nIGl0LCBvciBlcnJvciBvdXQsCisgKiBuZWVkIHRvIHB1dCB0aGUgcmVmZXJlbmNlLgorICoKKyAqIGJsLT5ibF9leHRfbG9jayBpcyBoZWxkIGJ5IGNhbGxlci4KKyAqLworaW50CitibF9hZGRfbWVyZ2VfZXh0ZW50KHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsCisJCSAgICAgc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpuZXcpCit7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpiZSwgKnRtcDsKKwlzZWN0b3JfdCBlbmQgPSBuZXctPmJlX2Zfb2Zmc2V0ICsgbmV3LT5iZV9sZW5ndGg7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWRwcmludGsoIiVzIGVudGVyIHdpdGggYmU9JXBcbiIsIF9fZnVuY19fLCBuZXcpOworCXByaW50X2JsX2V4dGVudChuZXcpOworCWxpc3QgPSAmYmwtPmJsX2V4dGVudHNbYmxfY2hvb3NlX2xpc3QobmV3LT5iZV9zdGF0ZSldOworCXByaW50X2VsaXN0KGxpc3QpOworCisJLyogU2NhbiBmb3IgcHJvcGVyIHBsYWNlIHRvIGluc2VydCwgZXh0ZW5kaW5nIG5ldyB0byB0aGUgbGVmdAorCSAqIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoYmUsIHRtcCwgbGlzdCwgYmVfbm9kZSkgeworCQlpZiAobmV3LT5iZV9mX29mZnNldCA+PSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoKQorCQkJYnJlYWs7CisJCWlmIChuZXctPmJlX2Zfb2Zmc2V0ID49IGJlLT5iZV9mX29mZnNldCkgeworCQkJaWYgKGVuZCA8PSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoKSB7CisJCQkJLyogbmV3IGlzIGEgc3Vic2V0IG9mIGV4aXN0aW5nIGJlKi8KKwkJCQlpZiAoZXh0ZW50c19jb25zaXN0ZW50KGJlLCBuZXcpKSB7CisJCQkJCWRwcmludGsoIiVzOiBuZXcgaXMgc3Vic2V0LCBpZ25vcmluZ1xuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCQkJYmxfcHV0X2V4dGVudChuZXcpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiB8PC0tICAgYmUgICAtLT58CisJCQkJICogICAgICAgICAgfDwtLSAgIG5ldyAgIC0tPnwgKi8KKwkJCQlpZiAoZXh0ZW50c19jb25zaXN0ZW50KGJlLCBuZXcpKSB7CisJCQkJCS8qIGV4dGVuZCBuZXcgdG8gZnVsbHkgcmVwbGFjZSBiZSAqLworCQkJCQluZXctPmJlX2xlbmd0aCArPSBuZXctPmJlX2Zfb2Zmc2V0IC0KKwkJCQkJCWJlLT5iZV9mX29mZnNldDsKKwkJCQkJbmV3LT5iZV9mX29mZnNldCA9IGJlLT5iZV9mX29mZnNldDsKKwkJCQkJbmV3LT5iZV92X29mZnNldCA9IGJlLT5iZV92X29mZnNldDsKKwkJCQkJZHByaW50aygiJXM6IHJlbW92aW5nICVwXG4iLCBfX2Z1bmNfXywgYmUpOworCQkJCQlsaXN0X2RlbCgmYmUtPmJlX25vZGUpOworCQkJCQlibF9wdXRfZXh0ZW50KGJlKTsKKwkJCQl9IGVsc2UgeworCQkJCQlnb3RvIG91dF9lcnI7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKGVuZCA+PSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoKSB7CisJCQkvKiBuZXcgZXh0ZW50IG92ZXJsYXAgZXhpc3RpbmcgYmUgKi8KKwkJCWlmIChleHRlbnRzX2NvbnNpc3RlbnQoYmUsIG5ldykpIHsKKwkJCQkvKiBleHRlbmQgbmV3IHRvIGZ1bGx5IHJlcGxhY2UgYmUgKi8KKwkJCQlkcHJpbnRrKCIlczogcmVtb3ZpbmcgJXBcbiIsIF9fZnVuY19fLCBiZSk7CisJCQkJbGlzdF9kZWwoJmJlLT5iZV9ub2RlKTsKKwkJCQlibF9wdXRfZXh0ZW50KGJlKTsKKwkJCX0gZWxzZSB7CisJCQkJZ290byBvdXRfZXJyOworCQkJfQorCQl9IGVsc2UgaWYgKGVuZCA+IGJlLT5iZV9mX29mZnNldCkgeworCQkJLyogICAgICAgICAgIHw8LS0gICBiZSAgIC0tPnwKKwkJCSAqfDwtLSAgIG5ldyAgIC0tPnwgKi8KKwkJCWlmIChleHRlbnRzX2NvbnNpc3RlbnQobmV3LCBiZSkpIHsKKwkJCQkvKiBleHRlbmQgbmV3IHRvIGZ1bGx5IHJlcGxhY2UgYmUgKi8KKwkJCQluZXctPmJlX2xlbmd0aCArPSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoIC0KKwkJCQkJbmV3LT5iZV9mX29mZnNldCAtIG5ldy0+YmVfbGVuZ3RoOworCQkJCWRwcmludGsoIiVzOiByZW1vdmluZyAlcFxuIiwgX19mdW5jX18sIGJlKTsKKwkJCQlsaXN0X2RlbCgmYmUtPmJlX25vZGUpOworCQkJCWJsX3B1dF9leHRlbnQoYmUpOworCQkJfSBlbHNlIHsKKwkJCQlnb3RvIG91dF9lcnI7CisJCQl9CisJCX0KKwl9CisJLyogTm90ZSB0aGF0IGlmIHdlIG5ldmVyIGhpdCB0aGUgYWJvdmUgYnJlYWssIGJlIHdpbGwgbm90IHBvaW50IHRvIGEKKwkgKiB2YWxpZCBleHRlbnQuICBIb3dldmVyLCBpbiB0aGF0IGNhc2UgJmJlLT5iZV9ub2RlPT1saXN0LgorCSAqLworCWxpc3RfYWRkKCZuZXctPmJlX25vZGUsICZiZS0+YmVfbm9kZSk7CisJZHByaW50aygiJXM6IGluc2VydGluZyBuZXdcbiIsIF9fZnVuY19fKTsKKwlwcmludF9lbGlzdChsaXN0KTsKKwkvKiBGSVhNRSAtIFRoZSBwZXItbGlzdCBjb25zaXN0ZW5jeSBjaGVja3MgaGF2ZSBhbGwgYmVlbiBkb25lLAorCSAqIHNob3VsZCBub3cgY2hlY2sgY3Jvc3MtbGlzdCBjb25zaXN0ZW5jeS4KKwkgKi8KKwlyZXR1cm4gMDsKKworIG91dF9lcnI6CisJYmxfcHV0X2V4dGVudChuZXcpOworCXJldHVybiAtRUlPOworfQorCisvKiBSZXR1cm5zIGV4dGVudCwgb3IgTlVMTC4gIElmIGEgc2Vjb25kIFJFQUQgZXh0ZW50IGV4aXN0cywgaXQgaXMgcmV0dXJuZWQKKyAqIGluIGNvd19yZWFkLCBpZiBnaXZlbi4KKyAqCisgKiBUaGUgZXh0ZW50cyBhcmUga2VwdCBpbiB0d28gc2VwZXJhdGUgb3JkZXJlZCBsaXN0cywgb25lIGZvciBSRUFEIGFuZCBOT05FLAorICogb25lIGZvciBSRUFEV1JJVEUgYW5kIElOVkFMSUQuICBXaXRoaW4gZWFjaCBsaXN0LCB3ZSBhc3N1bWU6CisgKiAxLiBFeHRlbnRzIGFyZSBvcmRlcmVkIGJ5IGZpbGUgb2Zmc2V0LgorICogMi4gRm9yIGFueSBnaXZlbiBpc2VjdCwgdGhlcmUgaXMgYXQgbW9zdCBvbmUgZXh0ZW50cyB0aGF0IG1hdGNoZXMuCisgKi8KK3N0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqCitibF9maW5kX2dldF9leHRlbnQoc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICpibCwgc2VjdG9yX3QgaXNlY3QsCisJICAgIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqKmNvd19yZWFkKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsICpjb3csICpyZXQ7CisJaW50IGk7CisKKwlkcHJpbnRrKCIlcyBlbnRlciB3aXRoIGlzZWN0ICVsbHVcbiIsIF9fZnVuY19fLCAodTY0KWlzZWN0KTsKKwljb3cgPSByZXQgPSBOVUxMOworCXNwaW5fbG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgRVhURU5UX0xJU1RTOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGJlLCAmYmwtPmJsX2V4dGVudHNbaV0sIGJlX25vZGUpIHsKKwkJCWlmIChpc2VjdCA+PSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoKQorCQkJCWJyZWFrOworCQkJaWYgKGlzZWN0ID49IGJlLT5iZV9mX29mZnNldCkgeworCQkJCS8qIFdlIGhhdmUgZm91bmQgYW4gZXh0ZW50ICovCisJCQkJZHByaW50aygiJXMgR2V0ICVwICglaSlcbiIsIF9fZnVuY19fLCBiZSwKKwkJCQkJYXRvbWljX3JlYWQoJmJlLT5iZV9yZWZjbnQucmVmY291bnQpKTsKKwkJCQlrcmVmX2dldCgmYmUtPmJlX3JlZmNudCk7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IGJlOworCQkJCWVsc2UgaWYgKGJlLT5iZV9zdGF0ZSAhPSBQTkZTX0JMT0NLX1JFQURfREFUQSkKKwkJCQkJYmxfcHV0X2V4dGVudChiZSk7CisJCQkJZWxzZQorCQkJCQljb3cgPSBiZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocmV0ICYmCisJCSAgICAoIWNvd19yZWFkIHx8IHJldC0+YmVfc3RhdGUgIT0gUE5GU19CTE9DS19JTlZBTElEX0RBVEEpKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCWlmIChjb3dfcmVhZCkKKwkJKmNvd19yZWFkID0gY293OworCXByaW50X2JsX2V4dGVudChyZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNpbWlsYXIgdG8gYmxfZmluZF9nZXRfZXh0ZW50LCBidXQgY2FsbGVkIHdpdGggbG9jayBoZWxkLCBhbmQgaWdub3JlcyBjb3cgKi8KK3N0YXRpYyBzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKgorYmxfZmluZF9nZXRfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgcG5mc19ibG9ja19sYXlvdXQgKmJsLCBzZWN0b3JfdCBpc2VjdCkKK3sKKwlzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJlLCAqcmV0ID0gTlVMTDsKKwlpbnQgaTsKKworCWRwcmludGsoIiVzIGVudGVyIHdpdGggaXNlY3QgJWxsdVxuIiwgX19mdW5jX18sICh1NjQpaXNlY3QpOworCWZvciAoaSA9IDA7IGkgPCBFWFRFTlRfTElTVFM7IGkrKykgeworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShiZSwgJmJsLT5ibF9leHRlbnRzW2ldLCBiZV9ub2RlKSB7CisJCQlpZiAoaXNlY3QgPj0gYmUtPmJlX2Zfb2Zmc2V0ICsgYmUtPmJlX2xlbmd0aCkKKwkJCQlicmVhazsKKwkJCWlmIChpc2VjdCA+PSBiZS0+YmVfZl9vZmZzZXQpIHsKKwkJCQkvKiBXZSBoYXZlIGZvdW5kIGFuIGV4dGVudCAqLworCQkJCWRwcmludGsoIiVzIEdldCAlcCAoJWkpXG4iLCBfX2Z1bmNfXywgYmUsCisJCQkJCWF0b21pY19yZWFkKCZiZS0+YmVfcmVmY250LnJlZmNvdW50KSk7CisJCQkJa3JlZl9nZXQoJmJlLT5iZV9yZWZjbnQpOworCQkJCXJldCA9IGJlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXByaW50X2JsX2V4dGVudChyZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludAorZW5jb2RlX3BuZnNfYmxvY2tfbGF5b3V0dXBkYXRlKHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsCisJCQkgICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfYXJncyAqYXJnKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX3Nob3J0X2V4dGVudCAqbGNlLCAqc2F2ZTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCV9fYmUzMiAqcCwgKnhkcl9zdGFydDsKKworCWRwcmludGsoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJLyogQlVHIC0gY3JlYXRpb24gb2YgYmxfY29tbWl0IGlzIGJ1Z2d5IC0gbmVlZCB0byB3YWl0IGZvcgorCSAqIGVudGlyZSBibG9jayB0byBiZSBtYXJrZWQgV1JJVFRFTiBiZWZvcmUgaXQgY2FuIGJlIGFkZGVkLgorCSAqLworCXNwaW5fbG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwkvKiBXYW50IHRvIGFkanVzdCBmb3IgcG9zc2libGUgdHJ1bmNhdGUgKi8KKwkvKiBXZSBub3cgd2FudCB0byBhZGp1c3QgYXJndW1lbnQgcmFuZ2UgKi8KKworCS8qIFhEUiBlbmNvZGUgdGhlIHJhbmdlcyBmb3VuZCAqLworCXhkcl9zdGFydCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgOCk7CisJaWYgKCF4ZHJfc3RhcnQpCisJCWdvdG8gb3V0OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsY2UsIHNhdmUsICZibC0+YmxfY29tbWl0LCBic2Vfbm9kZSkgeworCQlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA3ICogNCArIHNpemVvZihsY2UtPmJzZV9kZXZpZC5kYXRhKSk7CisJCWlmICghcCkKKwkJCWJyZWFrOworCQlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgbGNlLT5ic2VfZGV2aWQuZGF0YSwgTkZTNF9ERVZJQ0VJRDRfU0laRSk7CisJCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGxjZS0+YnNlX2Zfb2Zmc2V0IDw8IFNFQ1RPUl9TSElGVCk7CisJCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGxjZS0+YnNlX2xlbmd0aCA8PCBTRUNUT1JfU0hJRlQpOworCQlwID0geGRyX2VuY29kZV9oeXBlcihwLCAwTEwpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoUE5GU19CTE9DS19SRUFEV1JJVEVfREFUQSk7CisJCWxpc3RfZGVsKCZsY2UtPmJzZV9ub2RlKTsKKwkJbGlzdF9hZGRfdGFpbCgmbGNlLT5ic2Vfbm9kZSwgJmJsLT5ibF9jb21taXR0aW5nKTsKKwkJYmwtPmJsX2NvdW50LS07CisJCWNvdW50Kys7CisJfQorCXhkcl9zdGFydFswXSA9IGNwdV90b19iZTMyKCh4ZHItPnAgLSB4ZHJfc3RhcnQgLSAxKSAqIDQpOworCXhkcl9zdGFydFsxXSA9IGNwdV90b19iZTMyKGNvdW50KTsKK291dDoKKwlzcGluX3VubG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwlkcHJpbnRrKCIlcyBmb3VuZCAlaSByYW5nZXNcbiIsIF9fZnVuY19fLCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBzZXRfdG9fcncgdGhhdCBpbml0aWFsaXplIGEgbmV3IGV4dGVudCAqLworc3RhdGljIHZvaWQKK19wcmVwX25ld19leHRlbnQoc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpuZXcsCisJCSBzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKm9yaWcsCisJCSBzZWN0b3JfdCBvZmZzZXQsIHNlY3Rvcl90IGxlbmd0aCwgaW50IHN0YXRlKQoreworCWtyZWZfaW5pdCgmbmV3LT5iZV9yZWZjbnQpOworCS8qIGRvbid0IG5lZWQgdG8gSU5JVF9MSVNUX0hFQUQoJm5ldy0+YmVfbm9kZSkgKi8KKwltZW1jcHkoJm5ldy0+YmVfZGV2aWQsICZvcmlnLT5iZV9kZXZpZCwgc2l6ZW9mKHN0cnVjdCBuZnM0X2RldmljZWlkKSk7CisJbmV3LT5iZV9tZGV2ID0gb3JpZy0+YmVfbWRldjsKKwluZXctPmJlX2Zfb2Zmc2V0ID0gb2Zmc2V0OworCW5ldy0+YmVfbGVuZ3RoID0gbGVuZ3RoOworCW5ldy0+YmVfdl9vZmZzZXQgPSBvcmlnLT5iZV92X29mZnNldCAtIG9yaWctPmJlX2Zfb2Zmc2V0ICsgb2Zmc2V0OworCW5ldy0+YmVfc3RhdGUgPSBzdGF0ZTsKKwluZXctPmJlX2ludmFsID0gb3JpZy0+YmVfaW52YWw7Cit9CisKKy8qIFRyaWVzIHRvIG1lcmdlIGJlIHdpdGggZXh0ZW50IGluIGZyb250IG9mIGl0IGluIGxpc3QuCisgKiBGcmVlcyBzdG9yYWdlIGlmIG5vdCB1c2VkLgorICovCitzdGF0aWMgc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICoKK19mcm9udF9tZXJnZShzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKmJlLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCSAgICAgc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpzdG9yYWdlKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqcHJldjsKKworCWlmICghc3RvcmFnZSkKKwkJZ290byBub19tZXJnZTsKKwlpZiAoJmJlLT5iZV9ub2RlID09IGhlYWQgfHwgYmUtPmJlX25vZGUucHJldiA9PSBoZWFkKQorCQlnb3RvIG5vX21lcmdlOworCXByZXYgPSBsaXN0X2VudHJ5KGJlLT5iZV9ub2RlLnByZXYsIHN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCwgYmVfbm9kZSk7CisJaWYgKChwcmV2LT5iZV9mX29mZnNldCArIHByZXYtPmJlX2xlbmd0aCAhPSBiZS0+YmVfZl9vZmZzZXQpIHx8CisJICAgICFleHRlbnRzX2NvbnNpc3RlbnQocHJldiwgYmUpKQorCQlnb3RvIG5vX21lcmdlOworCV9wcmVwX25ld19leHRlbnQoc3RvcmFnZSwgcHJldiwgcHJldi0+YmVfZl9vZmZzZXQsCisJCQkgcHJldi0+YmVfbGVuZ3RoICsgYmUtPmJlX2xlbmd0aCwgcHJldi0+YmVfc3RhdGUpOworCWxpc3RfcmVwbGFjZSgmcHJldi0+YmVfbm9kZSwgJnN0b3JhZ2UtPmJlX25vZGUpOworCWJsX3B1dF9leHRlbnQocHJldik7CisJbGlzdF9kZWwoJmJlLT5iZV9ub2RlKTsKKwlibF9wdXRfZXh0ZW50KGJlKTsKKwlyZXR1cm4gc3RvcmFnZTsKKworIG5vX21lcmdlOgorCWtmcmVlKHN0b3JhZ2UpOworCXJldHVybiBiZTsKK30KKworc3RhdGljIHU2NAorc2V0X3RvX3J3KHN0cnVjdCBwbmZzX2Jsb2NrX2xheW91dCAqYmwsIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgpCit7CisJdTY0IHJ2ID0gb2Zmc2V0ICsgbGVuZ3RoOworCXN0cnVjdCBwbmZzX2Jsb2NrX2V4dGVudCAqYmUsICplMSwgKmUyLCAqZTMsICpuZXcsICpvbGQ7CisJc3RydWN0IHBuZnNfYmxvY2tfZXh0ZW50ICpjaGlsZHJlblszXTsKKwlzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQgKm1lcmdlMSA9IE5VTEwsICptZXJnZTIgPSBOVUxMOworCWludCBpID0gMCwgajsKKworCWRwcmludGsoIiVzKCVsbHUsICVsbHUpXG4iLCBfX2Z1bmNfXywgb2Zmc2V0LCBsZW5ndGgpOworCS8qIENyZWF0ZSBzdG9yYWdlIGZvciB1cCB0byB0aHJlZSBuZXcgZXh0ZW50cyBlMSwgZTIsIGUzICovCisJZTEgPSBrbWFsbG9jKHNpemVvZigqZTEpLCBHRlBfQVRPTUlDKTsKKwllMiA9IGttYWxsb2Moc2l6ZW9mKCplMiksIEdGUF9BVE9NSUMpOworCWUzID0ga21hbGxvYyhzaXplb2YoKmUzKSwgR0ZQX0FUT01JQyk7CisJLyogQlVHIC0gd2UgYXJlIGlnbm9yaW5nIGFueSBmYWlsdXJlICovCisJaWYgKCFlMSB8fCAhZTIgfHwgIWUzKQorCQlnb3RvIG91dF9ub3NwbGl0OworCisJc3Bpbl9sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCWJlID0gYmxfZmluZF9nZXRfZXh0ZW50X2xvY2tlZChibCwgb2Zmc2V0KTsKKwlydiA9IGJlLT5iZV9mX29mZnNldCArIGJlLT5iZV9sZW5ndGg7CisJaWYgKGJlLT5iZV9zdGF0ZSAhPSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSkgeworCQlzcGluX3VubG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwkJZ290byBvdXRfbm9zcGxpdDsKKwl9CisJLyogQWRkIGUqIHRvIGNoaWxkcmVuLCBidW1waW5nIGUqJ3Mga3JlZnMgKi8KKwlpZiAoYmUtPmJlX2Zfb2Zmc2V0ICE9IG9mZnNldCkgeworCQlfcHJlcF9uZXdfZXh0ZW50KGUxLCBiZSwgYmUtPmJlX2Zfb2Zmc2V0LAorCQkJCSBvZmZzZXQgLSBiZS0+YmVfZl9vZmZzZXQsCisJCQkJIFBORlNfQkxPQ0tfSU5WQUxJRF9EQVRBKTsKKwkJY2hpbGRyZW5baSsrXSA9IGUxOworCQlwcmludF9ibF9leHRlbnQoZTEpOworCX0gZWxzZQorCQltZXJnZTEgPSBlMTsKKwlfcHJlcF9uZXdfZXh0ZW50KGUyLCBiZSwgb2Zmc2V0LAorCQkJIG1pbihsZW5ndGgsIGJlLT5iZV9mX29mZnNldCArIGJlLT5iZV9sZW5ndGggLSBvZmZzZXQpLAorCQkJIFBORlNfQkxPQ0tfUkVBRFdSSVRFX0RBVEEpOworCWNoaWxkcmVuW2krK10gPSBlMjsKKwlwcmludF9ibF9leHRlbnQoZTIpOworCWlmIChvZmZzZXQgKyBsZW5ndGggPCBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoKSB7CisJCV9wcmVwX25ld19leHRlbnQoZTMsIGJlLCBlMi0+YmVfZl9vZmZzZXQgKyBlMi0+YmVfbGVuZ3RoLAorCQkJCSBiZS0+YmVfZl9vZmZzZXQgKyBiZS0+YmVfbGVuZ3RoIC0KKwkJCQkgb2Zmc2V0IC0gbGVuZ3RoLAorCQkJCSBQTkZTX0JMT0NLX0lOVkFMSURfREFUQSk7CisJCWNoaWxkcmVuW2krK10gPSBlMzsKKwkJcHJpbnRfYmxfZXh0ZW50KGUzKTsKKwl9IGVsc2UKKwkJbWVyZ2UyID0gZTM7CisKKwkvKiBSZW1vdmUgYmUgZnJvbSBsaXN0LCBhbmQgaW5zZXJ0IHRoZSBlKiAqLworCS8qIFdlIGRvbid0IGdldCByZWZzIG9uIGUqLCBzaW5jZSB0aGlzIGxpc3QgaXMgdGhlIGJhc2UgcmVmZXJlbmNlCisJICogc2V0IHdoZW4gaW5pdCdlZC4KKwkgKi8KKwlpZiAoaSA8IDMpCisJCWNoaWxkcmVuW2ldID0gTlVMTDsKKwluZXcgPSBjaGlsZHJlblswXTsKKwlsaXN0X3JlcGxhY2UoJmJlLT5iZV9ub2RlLCAmbmV3LT5iZV9ub2RlKTsKKwlibF9wdXRfZXh0ZW50KGJlKTsKKwluZXcgPSBfZnJvbnRfbWVyZ2UobmV3LCAmYmwtPmJsX2V4dGVudHNbUldfRVhURU5UXSwgbWVyZ2UxKTsKKwlmb3IgKGogPSAxOyBqIDwgaTsgaisrKSB7CisJCW9sZCA9IG5ldzsKKwkJbmV3ID0gY2hpbGRyZW5bal07CisJCWxpc3RfYWRkKCZuZXctPmJlX25vZGUsICZvbGQtPmJlX25vZGUpOworCX0KKwlpZiAobWVyZ2UyKSB7CisJCS8qIFRoaXMgaXMgYSBIQUNLLCBzaG91bGQganVzdCBjcmVhdGUgYSBfYmFja19tZXJnZSBmdW5jdGlvbiAqLworCQluZXcgPSBsaXN0X2VudHJ5KG5ldy0+YmVfbm9kZS5uZXh0LAorCQkJCSBzdHJ1Y3QgcG5mc19ibG9ja19leHRlbnQsIGJlX25vZGUpOworCQluZXcgPSBfZnJvbnRfbWVyZ2UobmV3LCAmYmwtPmJsX2V4dGVudHNbUldfRVhURU5UXSwgbWVyZ2UyKTsKKwl9CisJc3Bpbl91bmxvY2soJmJsLT5ibF9leHRfbG9jayk7CisKKwkvKiBTaW5jZSB3ZSByZW1vdmVkIHRoZSBiYXNlIHJlZmVyZW5jZSBhYm92ZSwgYmUgaXMgbm93IHNjaGVkdWxlZCBmb3IKKwkgKiBkZXN0cnVjdGlvbi4KKwkgKi8KKwlibF9wdXRfZXh0ZW50KGJlKTsKKwlkcHJpbnRrKCIlcyByZXR1cm5zICVsbHUgYWZ0ZXIgc3BsaXRcbiIsIF9fZnVuY19fLCBydik7CisJcmV0dXJuIHJ2OworCisgb3V0X25vc3BsaXQ6CisJa2ZyZWUoZTEpOworCWtmcmVlKGUyKTsKKwlrZnJlZShlMyk7CisJZHByaW50aygiJXMgcmV0dXJucyAlbGx1IHdpdGhvdXQgc3BsaXR0aW5nXG4iLCBfX2Z1bmNfXywgcnYpOworCXJldHVybiBydjsKK30KKwordm9pZAorY2xlYW5fcG5mc19ibG9ja19sYXlvdXR1cGRhdGUoc3RydWN0IHBuZnNfYmxvY2tfbGF5b3V0ICpibCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2xheW91dGNvbW1pdF9hcmdzICphcmcsCisJCQkgICAgICBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBwbmZzX2Jsb2NrX3Nob3J0X2V4dGVudCAqbGNlLCAqc2F2ZTsKKworCWRwcmludGsoIiVzIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxjZSwgc2F2ZSwgJmJsLT5ibF9jb21taXR0aW5nLCBic2Vfbm9kZSkgeworCQlpZiAobGlrZWx5KCFzdGF0dXMpKSB7CisJCQl1NjQgb2Zmc2V0ID0gbGNlLT5ic2VfZl9vZmZzZXQ7CisJCQl1NjQgZW5kID0gb2Zmc2V0ICsgbGNlLT5ic2VfbGVuZ3RoOworCisJCQlkbyB7CisJCQkJb2Zmc2V0ID0gc2V0X3RvX3J3KGJsLCBvZmZzZXQsIGVuZCAtIG9mZnNldCk7CisJCQl9IHdoaWxlIChvZmZzZXQgPCBlbmQpOworCQkJbGlzdF9kZWwoJmxjZS0+YnNlX25vZGUpOworCisJCQlrZnJlZShsY2UpOworCQl9IGVsc2UgeworCQkJbGlzdF9kZWwoJmxjZS0+YnNlX25vZGUpOworCQkJc3Bpbl9sb2NrKCZibC0+YmxfZXh0X2xvY2spOworCQkJYWRkX3RvX2NvbW1pdGxpc3QoYmwsIGxjZSk7CisJCQlzcGluX3VubG9jaygmYmwtPmJsX2V4dF9sb2NrKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggYjI1NzM4My4uMDdkZjVmMSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTM4LDYgKzM4LDcgQEAKIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlIHsKIAlfX2JlMzIJCQlkcmNfc3RhdHVzOwogCXN0cnVjdCBuZnNfY2xpZW50CSpjbHA7CisJaW50CQkJc2xvdGlkOwogfTsKIAogc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9hcmcgewpAQCAtMTY2LDcgKzE2Nyw2IEBACiAJdm9pZCAqZHVtbXksIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpOwogCiBleHRlcm4gdm9pZCBuZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcyk7Ci1leHRlcm4gdm9pZCBuZnM0X2NiX3Rha2Vfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKIAogc3RydWN0IGNiX2RldmljZW5vdGlmeWl0ZW0gewogCXVpbnQzMl90CQljYmRfbm90aWZ5X3R5cGU7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA3NDc4MGY5Li40MzkyNmFkIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCS8qIE5vcm1hbCAqLwogCWlmIChsaWtlbHkoYXJncy0+Y3NhX3NlcXVlbmNlaWQgPT0gc2xvdC0+c2VxX25yICsgMSkpIHsKIAkJc2xvdC0+c2VxX25yKys7Ci0JCXJldHVybiBodG9ubChORlM0X09LKTsKKwkJZ290byBvdXRfb2s7CiAJfQogCiAJLyogUmVwbGF5ICovCkBAIC0zNjcsMTEgKzM2NywxNCBAQAogCS8qIFdyYXBhcm91bmQgKi8KIAlpZiAoYXJncy0+Y3NhX3NlcXVlbmNlaWQgPT0gMSAmJiAoc2xvdC0+c2VxX25yICsgMSkgPT0gMCkgewogCQlzbG90LT5zZXFfbnIgPSAxOwotCQlyZXR1cm4gaHRvbmwoTkZTNF9PSyk7CisJCWdvdG8gb3V0X29rOwogCX0KIAogCS8qIE1pc29yZGVyZWQgcmVxdWVzdCAqLwogCXJldHVybiBodG9ubChORlM0RVJSX1NFUV9NSVNPUkRFUkVEKTsKK291dF9vazoKKwl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgPSBhcmdzLT5jc2Ffc2xvdGlkOworCXJldHVybiBodG9ubChORlM0X09LKTsKIH0KIAogLyoKQEAgLTQzMywyNiArNDM2LDM3IEBACiAJCQkgICAgICBzdHJ1Y3QgY2Jfc2VxdWVuY2VyZXMgKnJlcywKIAkJCSAgICAgIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCiB7CisJc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsOwogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAJaW50IGk7CiAJX19iZTMyIHN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7CiAKLQljcHMtPmNscCA9IE5VTEw7Ci0KIAljbHAgPSBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChhcmdzLT5jc2FfYWRkciwgJmFyZ3MtPmNzYV9zZXNzaW9uaWQpOwogCWlmIChjbHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKKwl0YmwgPSAmY2xwLT5jbF9zZXNzaW9uLT5iY19zbG90X3RhYmxlOworCisJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCS8qIHN0YXRlIG1hbmFnZXIgaXMgcmVzZXR0aW5nIHRoZSBzZXNzaW9uICovCiAJaWYgKHRlc3RfYml0KE5GUzRfU0VTU0lPTl9EUkFJTklORywgJmNscC0+Y2xfc2Vzc2lvbi0+c2Vzc2lvbl9zdGF0ZSkpIHsKLQkJc3RhdHVzID0gTkZTNEVSUl9ERUxBWTsKKwkJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CisJCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfREVMQVkpOworCQkvKiBSZXR1cm4gTkZTNEVSUl9CQURTRVNTSU9OIGlmIHdlJ3JlIGRyYWluaW5nIHRoZSBzZXNzaW9uCisJCSAqIGluIG9yZGVyIHRvIHJlc2V0IGl0LgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKSkKKwkJCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7CiAJCWdvdG8gb3V0OwogCX0KIAogCXN0YXR1cyA9IHZhbGlkYXRlX3NlcWlkKCZjbHAtPmNsX3Nlc3Npb24tPmJjX3Nsb3RfdGFibGUsIGFyZ3MpOworCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCisJY3BzLT5zbG90aWQgPSBhcmdzLT5jc2Ffc2xvdGlkOworCiAJLyoKIAkgKiBDaGVjayBmb3IgcGVuZGluZyByZWZlcnJpbmcgY2FsbHMuICBJZiBhIG1hdGNoIGlzIGZvdW5kLCBhCiAJICogcmVsYXRlZCBjYWxsYmFjayB3YXMgcmVjZWl2ZWQgYmVmb3JlIHRoZSByZXNwb25zZSB0byB0aGUgb3JpZ2luYWwKQEAgLTQ2OSw3ICs0ODMsNiBAQAogCXJlcy0+Y3NyX3Nsb3RpZCA9IGFyZ3MtPmNzYV9zbG90aWQ7CiAJcmVzLT5jc3JfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCXJlcy0+Y3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7Ci0JbmZzNF9jYl90YWtlX3Nsb3QoY2xwKTsKIAogb3V0OgogCWNwcy0+Y2xwID0gY2xwOyAvKiBwdXQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCmluZGV4IGM2Yzg2YTcuLjkxOGFkNjQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja194ZHIuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKQEAgLTc1NCwyNiArNzU0LDE1IEBACiAJICogTGV0IHRoZSBzdGF0ZSBtYW5hZ2VyIGtub3cgY2FsbGJhY2sgcHJvY2Vzc2luZyBkb25lLgogCSAqIEEgc2luZ2xlIHNsb3QsIHNvIGhpZ2hlc3QgdXNlZCBzbG90aWQgaXMgZWl0aGVyIDAgb3IgLTEKIAkgKi8KLQl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQtLTsKKwl0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgPSAtMTsKIAluZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHNlc3Npb24pOwogCXNwaW5fdW5sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBuZnM0X2NiX2ZyZWVfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQorc3RhdGljIHZvaWQgbmZzNF9jYl9mcmVlX3Nsb3Qoc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcykKIHsKLQlpZiAoY2xwICYmIGNscC0+Y2xfc2Vzc2lvbikKLQkJbmZzNF9jYWxsYmFja19mcmVlX3Nsb3QoY2xwLT5jbF9zZXNzaW9uKTsKLX0KLQotLyogQSBzaW5nbGUgc2xvdCwgc28gaGlnaGVzdCB1c2VkIHNsb3RpZCBpcyBlaXRoZXIgMCBvciAtMSAqLwotdm9pZCBuZnM0X2NiX3Rha2Vfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCA9ICZjbHAtPmNsX3Nlc3Npb24tPmJjX3Nsb3RfdGFibGU7Ci0KLQlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0JdGJsLT5oaWdoZXN0X3VzZWRfc2xvdGlkKys7Ci0JQlVHX09OKHRibC0+aGlnaGVzdF91c2VkX3Nsb3RpZCAhPSAwKTsKLQlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKKwlpZiAoY3BzLT5zbG90aWQgIT0gLTEpCisJCW5mczRfY2FsbGJhY2tfZnJlZV9zbG90KGNwcy0+Y2xwLT5jbF9zZXNzaW9uKTsKIH0KIAogI2Vsc2UgLyogQ09ORklHX05GU19WNF8xICovCkBAIC03ODQsNyArNzczLDcgQEAKIAlyZXR1cm4gaHRvbmwoTkZTNEVSUl9NSU5PUl9WRVJTX01JU01BVENIKTsKIH0KIAotc3RhdGljIHZvaWQgbmZzNF9jYl9mcmVlX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3N0YXRpYyB2b2lkIG5mczRfY2JfZnJlZV9zbG90KHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCkBAIC04NjYsNiArODU1LDcgQEAKIAlzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSBjcHMgPSB7CiAJCS5kcmNfc3RhdHVzID0gMCwKIAkJLmNscCA9IE5VTEwsCisJCS5zbG90aWQgPSAtMSwKIAl9OwogCXVuc2lnbmVkIGludCBub3BzID0gMDsKIApAQCAtOTA2LDcgKzg5Niw3IEBACiAKIAkqaGRyX3Jlcy5zdGF0dXMgPSBzdGF0dXM7CiAJKmhkcl9yZXMubm9wcyA9IGh0b25sKG5vcHMpOwotCW5mczRfY2JfZnJlZV9zbG90KGNwcy5jbHApOworCW5mczRfY2JfZnJlZV9zbG90KCZjcHMpOwogCW5mc19wdXRfY2xpZW50KGNwcy5jbHApOwogCWRwcmludGsoIiVzOiBkb25lLCBzdGF0dXMgPSAldVxuIiwgX19mdW5jX18sIG50b2hsKHN0YXR1cykpOwogCXJldHVybiBycGNfc3VjY2VzczsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCAxOWVhN2Q5Li41ODMzZmJiIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkubnJ2ZXJzCQkJPSBBUlJBWV9TSVpFKG5mc192ZXJzaW9uKSwKIAkudmVyc2lvbgkJPSBuZnNfdmVyc2lvbiwKIAkuc3RhdHMJCQk9ICZuZnNfcnBjc3RhdCwKLQkucGlwZV9kaXJfbmFtZQkJPSAiL25mcyIsCisJLnBpcGVfZGlyX25hbWUJCT0gTkZTX1BJUEVfRElSTkFNRSwKIH07CiAKIHN0cnVjdCBycGNfc3RhdCBuZnNfcnBjc3RhdCA9IHsKQEAgLTkwNCw3ICs5MDQsOSBAQAogLyoKICAqIExvYWQgdXAgdGhlIHNlcnZlciByZWNvcmQgZnJvbSBpbmZvcm1hdGlvbiBnYWluZWQgaW4gYW4gZnNpbmZvIHJlY29yZAogICovCi1zdGF0aWMgdm9pZCBuZnNfc2VydmVyX3NldF9mc2luZm8oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19mc2luZm8gKmZzaW5mbykKK3N0YXRpYyB2b2lkIG5mc19zZXJ2ZXJfc2V0X2ZzaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJCSAgc3RydWN0IG5mc19maCAqbW50ZmgsCisJCQkJICBzdHJ1Y3QgbmZzX2ZzaW5mbyAqZnNpbmZvKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X3JwY19wYXlsb2FkOwogCkBAIC05MzQsNyArOTM2LDggQEAKIAlpZiAoc2VydmVyLT53c2l6ZSA+IE5GU19NQVhfRklMRV9JT19TSVpFKQogCQlzZXJ2ZXItPndzaXplID0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CiAJc2VydmVyLT53cGFnZXMgPSAoc2VydmVyLT53c2l6ZSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0Jc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHNlcnZlciwgZnNpbmZvLT5sYXlvdXR0eXBlKTsKKwlzZXJ2ZXItPnBuZnNfYmxrc2l6ZSA9IGZzaW5mby0+Ymxrc2l6ZTsKKwlzZXRfcG5mc19sYXlvdXRkcml2ZXIoc2VydmVyLCBtbnRmaCwgZnNpbmZvLT5sYXlvdXR0eXBlKTsKIAogCXNlcnZlci0+d3RtdWx0ID0gbmZzX2Jsb2NrX2JpdHMoZnNpbmZvLT53dG11bHQsIE5VTEwpOwogCkBAIC05ODAsNyArOTgzLDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dF9lcnJvcjsKIAotCW5mc19zZXJ2ZXJfc2V0X2ZzaW5mbyhzZXJ2ZXIsICZmc2luZm8pOworCW5mc19zZXJ2ZXJfc2V0X2ZzaW5mbyhzZXJ2ZXIsIG1udGZoLCAmZnNpbmZvKTsKIAogCS8qIEdldCBzb21lIGdlbmVyYWwgZmlsZSBzeXN0ZW0gaW5mbyAqLwogCWlmIChzZXJ2ZXItPm5hbWVsZW4gPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDU3ZjU3OGUuLmIyMzhkOTUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTEzNCwxOCArMTM0LDE5IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmZzX29wZW5fZGlyX2NvbnRleHQgKmFsbG9jX25mc19vcGVuX2Rpcl9jb250ZXh0KHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3N0YXRpYyBzdHJ1Y3QgbmZzX29wZW5fZGlyX2NvbnRleHQgKmFsbG9jX25mc19vcGVuX2Rpcl9jb250ZXh0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJc3RydWN0IG5mc19vcGVuX2Rpcl9jb250ZXh0ICpjdHg7CiAJY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwogCWlmIChjdHggIT0gTlVMTCkgewogCQljdHgtPmR1cGVkID0gMDsKKwkJY3R4LT5hdHRyX2dlbmNvdW50ID0gTkZTX0koZGlyKS0+YXR0cl9nZW5jb3VudDsKIAkJY3R4LT5kaXJfY29va2llID0gMDsKIAkJY3R4LT5kdXBfY29va2llID0gMDsKIAkJY3R4LT5jcmVkID0gZ2V0X3JwY2NyZWQoY3JlZCk7Ci0JfSBlbHNlCi0JCWN0eCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JcmV0dXJuIGN0eDsKKwkJcmV0dXJuIGN0eDsKKwl9CisJcmV0dXJuICBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfbmZzX29wZW5fZGlyX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2Rpcl9jb250ZXh0ICpjdHgpCkBAIC0xNzMsNyArMTc0LDcgQEAKIAljcmVkID0gcnBjX2xvb2t1cF9jcmVkKCk7CiAJaWYgKElTX0VSUihjcmVkKSkKIAkJcmV0dXJuIFBUUl9FUlIoY3JlZCk7Ci0JY3R4ID0gYWxsb2NfbmZzX29wZW5fZGlyX2NvbnRleHQoY3JlZCk7CisJY3R4ID0gYWxsb2NfbmZzX29wZW5fZGlyX2NvbnRleHQoaW5vZGUsIGNyZWQpOwogCWlmIChJU19FUlIoY3R4KSkgewogCQlyZXMgPSBQVFJfRVJSKGN0eCk7CiAJCWdvdG8gb3V0OwpAQCAtMzIzLDcgKzMyNCw2IEBACiB7CiAJbG9mZl90IGRpZmYgPSBkZXNjLT5maWxlLT5mX3BvcyAtIGRlc2MtPmN1cnJlbnRfaW5kZXg7CiAJdW5zaWduZWQgaW50IGluZGV4OwotCXN0cnVjdCBuZnNfb3Blbl9kaXJfY29udGV4dCAqY3R4ID0gZGVzYy0+ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGRpZmYgPCAwKQogCQlnb3RvIG91dF9lb2Y7CkBAIC0zMzYsNyArMzM2LDYgQEAKIAlpbmRleCA9ICh1bnNpZ25lZCBpbnQpZGlmZjsKIAkqZGVzYy0+ZGlyX2Nvb2tpZSA9IGFycmF5LT5hcnJheVtpbmRleF0uY29va2llOwogCWRlc2MtPmNhY2hlX2VudHJ5X2luZGV4ID0gaW5kZXg7Ci0JY3R4LT5kdXBlZCA9IDA7CiAJcmV0dXJuIDA7CiBvdXRfZW9mOgogCWRlc2MtPmVvZiA9IDE7CkBAIC0zNDksMTQgKzM0OCwzNCBAQAogCWludCBpOwogCWxvZmZfdCBuZXdfcG9zOwogCWludCBzdGF0dXMgPSAtRUFHQUlOOwotCXN0cnVjdCBuZnNfb3Blbl9kaXJfY29udGV4dCAqY3R4ID0gZGVzYy0+ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJZm9yIChpID0gMDsgaSA8IGFycmF5LT5zaXplOyBpKyspIHsKIAkJaWYgKGFycmF5LT5hcnJheVtpXS5jb29raWUgPT0gKmRlc2MtPmRpcl9jb29raWUpIHsKKwkJCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShkZXNjLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwkJCXN0cnVjdCBuZnNfb3Blbl9kaXJfY29udGV4dCAqY3R4ID0gZGVzYy0+ZmlsZS0+cHJpdmF0ZV9kYXRhOworCiAJCQluZXdfcG9zID0gZGVzYy0+Y3VycmVudF9pbmRleCArIGk7Ci0JCQlpZiAobmV3X3BvcyA8IGRlc2MtPmZpbGUtPmZfcG9zKSB7CisJCQlpZiAoY3R4LT5hdHRyX2dlbmNvdW50ICE9IG5mc2ktPmF0dHJfZ2VuY291bnQKKwkJCSAgICB8fCAobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiAoTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEEpKSkgeworCQkJCWN0eC0+ZHVwZWQgPSAwOworCQkJCWN0eC0+YXR0cl9nZW5jb3VudCA9IG5mc2ktPmF0dHJfZ2VuY291bnQ7CisJCQl9IGVsc2UgaWYgKG5ld19wb3MgPCBkZXNjLT5maWxlLT5mX3BvcykgeworCQkJCWlmIChjdHgtPmR1cGVkID4gMAorCQkJCSAgICAmJiBjdHgtPmR1cF9jb29raWUgPT0gKmRlc2MtPmRpcl9jb29raWUpIHsKKwkJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkgeworCQkJCQkJcHJfbm90aWNlKCJORlM6IGRpcmVjdG9yeSAlcy8lcyBjb250YWlucyBhIHJlYWRkaXIgbG9vcC4iCisJCQkJCQkJCSJQbGVhc2UgY29udGFjdCB5b3VyIHNlcnZlciB2ZW5kb3IuICAiCisJCQkJCQkJCSJUaGUgZmlsZTogJXMgaGFzIGR1cGxpY2F0ZSBjb29raWUgJWxsdVxuIiwKKwkJCQkJCQkJZGVzYy0+ZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKKwkJCQkJCQkJZGVzYy0+ZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCQkJCQlhcnJheS0+YXJyYXlbaV0uc3RyaW5nLm5hbWUsCisJCQkJCQkJCSpkZXNjLT5kaXJfY29va2llKTsKKwkJCQkJfQorCQkJCQlzdGF0dXMgPSAtRUxPT1A7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQljdHgtPmR1cF9jb29raWUgPSAqZGVzYy0+ZGlyX2Nvb2tpZTsKLQkJCQljdHgtPmR1cGVkID0gMTsKKwkJCQljdHgtPmR1cGVkID0gLTE7CiAJCQl9CiAJCQlkZXNjLT5maWxlLT5mX3BvcyA9IG5ld19wb3M7CiAJCQlkZXNjLT5jYWNoZV9lbnRyeV9pbmRleCA9IGk7CkBAIC0zNjgsNiArMzg3LDcgQEAKIAkJaWYgKCpkZXNjLT5kaXJfY29va2llID09IGFycmF5LT5sYXN0X2Nvb2tpZSkKIAkJCWRlc2MtPmVvZiA9IDE7CiAJfQorb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTc0MCwxOSArNzYwLDYgQEAKIAlzdHJ1Y3QgbmZzX2NhY2hlX2FycmF5ICphcnJheSA9IE5VTEw7CiAJc3RydWN0IG5mc19vcGVuX2Rpcl9jb250ZXh0ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoY3R4LT5kdXBlZCAhPSAwICYmIGN0eC0+ZHVwX2Nvb2tpZSA9PSAqZGVzYy0+ZGlyX2Nvb2tpZSkgewotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcl9ub3RpY2UoIk5GUzogZGlyZWN0b3J5ICVzLyVzIGNvbnRhaW5zIGEgcmVhZGRpciBsb29wLiAgIgotCQkJCSJQbGVhc2UgY29udGFjdCB5b3VyIHNlcnZlciB2ZW5kb3IuICAiCi0JCQkJIk9mZmVuZGluZyBjb29raWU6ICVsbHVcbiIsCi0JCQkJZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKLQkJCQlmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJKmRlc2MtPmRpcl9jb29raWUpOwotCQl9Ci0JCXJlcyA9IC1FTE9PUDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJYXJyYXkgPSBuZnNfcmVhZGRpcl9nZXRfYXJyYXkoZGVzYy0+cGFnZSk7CiAJaWYgKElTX0VSUihhcnJheSkpIHsKIAkJcmVzID0gUFRSX0VSUihhcnJheSk7CkBAIC03NzQsNiArNzgxLDggQEAKIAkJCSpkZXNjLT5kaXJfY29va2llID0gYXJyYXktPmFycmF5W2krMV0uY29va2llOwogCQllbHNlCiAJCQkqZGVzYy0+ZGlyX2Nvb2tpZSA9IGFycmF5LT5sYXN0X2Nvb2tpZTsKKwkJaWYgKGN0eC0+ZHVwZWQgIT0gMCkKKwkJCWN0eC0+ZHVwZWQgPSAxOwogCX0KIAlpZiAoYXJyYXktPmVvZl9pbmRleCA+PSAwKQogCQlkZXNjLT5lb2YgPSAxOwpAQCAtODA1LDYgKzgxNCw3IEBACiAJc3RydWN0IHBhZ2UJKnBhZ2UgPSBOVUxMOwogCWludAkJc3RhdHVzOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZXNjLT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBuZnNfb3Blbl9kaXJfY29udGV4dCAqY3R4ID0gZGVzYy0+ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJZGZwcmludGsoRElSQ0FDSEUsICJORlM6IHVuY2FjaGVkX3JlYWRkaXIoKSBzZWFyY2hpbmcgZm9yIGNvb2tpZSAlTHVcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSpkZXNjLT5kaXJfY29va2llKTsKQEAgLTgxOCw2ICs4MjgsNyBAQAogCWRlc2MtPnBhZ2VfaW5kZXggPSAwOwogCWRlc2MtPmxhc3RfY29va2llID0gKmRlc2MtPmRpcl9jb29raWU7CiAJZGVzYy0+cGFnZSA9IHBhZ2U7CisJY3R4LT5kdXBlZCA9IDA7CiAKIAlzdGF0dXMgPSBuZnNfcmVhZGRpcl94ZHJfdG9fYXJyYXkoZGVzYywgcGFnZSwgaW5vZGUpOwogCWlmIChzdGF0dXMgPCAwKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggZTQ5ZTczMS4uN2VmMjM5NyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC00MTUsNyArNDE1LDcgQEAKIH0KIAogaW50IG5mczNfcHJvY19zZXRfZGVmYXVsdF9hY2woc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCW1vZGVfdCBtb2RlKQorCQl1bW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqZGZhY2wsICphY2w7CiAJaW50IGVycm9yID0gMDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggMzgwNTNkOC4uODVmMTY5MCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNwcm9jLmMKKysrIGIvZnMvbmZzL25mczNwcm9jLmMKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkgaW50IGZsYWdzLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBuZnMzX2NyZWF0ZWRhdGEgKmRhdGE7Ci0JbW9kZV90IG1vZGUgPSBzYXR0ci0+aWFfbW9kZTsKKwl1bW9kZV90IG1vZGUgPSBzYXR0ci0+aWFfbW9kZTsKIAlpbnQgc3RhdHVzID0gLUVOT01FTTsKIAogCWRwcmludGsoIk5GUyBjYWxsICBjcmVhdGUgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtNTYyLDcgKzU2Miw3IEBACiBuZnMzX3Byb2NfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICpzYXR0cikKIHsKIAlzdHJ1Y3QgbmZzM19jcmVhdGVkYXRhICpkYXRhOwotCWludCBtb2RlID0gc2F0dHItPmlhX21vZGU7CisJdW1vZGVfdCBtb2RlID0gc2F0dHItPmlhX21vZGU7CiAJaW50IHN0YXR1cyA9IC1FTk9NRU07CiAKIAlkcHJpbnRrKCJORlMgY2FsbCAgbWtkaXIgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtNjgxLDcgKzY4MSw3IEBACiAJCWRldl90IHJkZXYpCiB7CiAJc3RydWN0IG5mczNfY3JlYXRlZGF0YSAqZGF0YTsKLQltb2RlX3QgbW9kZSA9IHNhdHRyLT5pYV9tb2RlOworCXVtb2RlX3QgbW9kZSA9IHNhdHRyLT5pYV9tb2RlOwogCWludCBzdGF0dXMgPSAtRU5PTUVNOwogCiAJZHByaW50aygiTkZTIGNhbGwgIG1rbm9kICVzICV1OiV1XG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBiL2ZzL25mcy9uZnM0X2ZzLmgKaW5kZXggMTkwOWVlOC4uM2U5M2U5YSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRfZnMuaAorKysgYi9mcy9uZnMvbmZzNF9mcy5oCkBAIC01Niw2ICs1Niw5IEBACiAJTkZTNF9TRVNTSU9OX0RSQUlOSU5HLAogfTsKIAorI2RlZmluZSBORlM0X1JFTkVXX1RJTUVPVVQJCTB4MDEKKyNkZWZpbmUgTkZTNF9SRU5FV19ERUxFR0FUSU9OX0NCCTB4MDIKKwogc3RydWN0IG5mczRfbWlub3JfdmVyc2lvbl9vcHMgewogCXUzMgltaW5vcl92ZXJzaW9uOwogCkBAIC0yMjUsNyArMjI4LDcgQEAKIH07CiAKIHN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyB7Ci0JaW50ICgqc2NoZWRfc3RhdGVfcmVuZXdhbCkoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOworCWludCAoKnNjaGVkX3N0YXRlX3JlbmV3YWwpKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqLCB1bnNpZ25lZCk7CiAJc3RydWN0IHJwY19jcmVkICogKCpnZXRfc3RhdGVfcmVuZXdhbF9jcmVkX2xvY2tlZCkoc3RydWN0IG5mc19jbGllbnQgKik7CiAJaW50ICgqcmVuZXdfbGVhc2UpKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKIH07CkBAIC0yMzcsOCArMjQwLDYgQEAKIGV4dGVybiBpbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICosIHUzMiwgdW5zaWduZWQgc2hvcnQsIHN0cnVjdCBycGNfY3JlZCAqLCBzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgKik7CiBleHRlcm4gaW50IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczRfcHJvY19leGNoYW5nZV9pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpOwotZXh0ZXJuIGludCBuZnM0X3Byb2NfYXN5bmNfcmVuZXcoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOwotZXh0ZXJuIGludCBuZnM0X3Byb2NfcmVuZXcoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOwogZXh0ZXJuIGludCBuZnM0X2luaXRfY2xpZW50aWQoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IHJwY19jcmVkICopOwogZXh0ZXJuIGludCBuZnM0MV9pbml0X2NsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsKIGV4dGVybiBpbnQgbmZzNF9kb19jbG9zZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGdmcF90IGdmcF9tYXNrLCBpbnQgd2FpdCwgYm9vbCByb2MpOwpAQCAtMzE4LDcgKzMxOSw3IEBACiBleHRlcm4gY29uc3QgdTMyIG5mczRfZmF0dHJfYml0bWFwWzJdOwogZXh0ZXJuIGNvbnN0IHUzMiBuZnM0X3N0YXRmc19iaXRtYXBbMl07CiBleHRlcm4gY29uc3QgdTMyIG5mczRfcGF0aGNvbmZfYml0bWFwWzJdOwotZXh0ZXJuIGNvbnN0IHUzMiBuZnM0X2ZzaW5mb19iaXRtYXBbMl07CitleHRlcm4gY29uc3QgdTMyIG5mczRfZnNpbmZvX2JpdG1hcFszXTsKIGV4dGVybiBjb25zdCB1MzIgbmZzNF9mc19sb2NhdGlvbnNfYml0bWFwWzJdOwogCiAvKiBuZnM0cmVuZXdkLmMgKi8KQEAgLTM0OSw2ICszNTAsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9zdGF0ZV9zZXRfbW9kZV9sb2NrZWQoc3RydWN0IG5mczRfc3RhdGUgKiwgZm1vZGVfdCk7CiBleHRlcm4gdm9pZCBuZnM0X3NjaGVkdWxlX2xlYXNlX3JlY292ZXJ5KHN0cnVjdCBuZnNfY2xpZW50ICopOwogZXh0ZXJuIHZvaWQgbmZzNF9zY2hlZHVsZV9zdGF0ZV9tYW5hZ2VyKHN0cnVjdCBuZnNfY2xpZW50ICopOworZXh0ZXJuIHZvaWQgbmZzNF9zY2hlZHVsZV9wYXRoX2Rvd25fcmVjb3Zlcnkoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiBleHRlcm4gdm9pZCBuZnM0X3NjaGVkdWxlX3N0YXRlaWRfcmVjb3ZlcnkoY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mczRfc3RhdGUgKik7CiBleHRlcm4gdm9pZCBuZnM0MV9oYW5kbGVfc2VxdWVuY2VfZmxhZ19lcnJvcnMoc3RydWN0IG5mc19jbGllbnQgKmNscCwgdTMyIGZsYWdzKTsKIGV4dGVybiB2b2lkIG5mczQxX2hhbmRsZV9yZWNhbGxfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKaW5kZXggYmU5M2E2Mi4uZTg5MTVkNCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCiAJcG5mc19zZXRfbGF5b3V0Y29tbWl0KHdkYXRhKTsKIAlkcHJpbnRrKCIlcyBpb25kZSAlbHUgcGxzX2VuZF9wb3MgJWx1XG4iLCBfX2Z1bmNfXywgd2RhdGEtPmlub2RlLT5pX2lubywKLQkJKHVuc2lnbmVkIGxvbmcpIHdkYXRhLT5sc2VnLT5wbHNfZW5kX3Bvcyk7CisJCSh1bnNpZ25lZCBsb25nKSBORlNfSSh3ZGF0YS0+aW5vZGUpLT5sYXlvdXQtPnBsaF9sd2IpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCAwNzk2MTRkLi40NzAwZmFlIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTQwLDEyICsxNDAsMTMgQEAKIAkwCiB9OwogCi1jb25zdCB1MzIgbmZzNF9mc2luZm9fYml0bWFwWzJdID0geyBGQVRUUjRfV09SRDBfTUFYRklMRVNJWkUKK2NvbnN0IHUzMiBuZnM0X2ZzaW5mb19iaXRtYXBbM10gPSB7IEZBVFRSNF9XT1JEMF9NQVhGSUxFU0laRQogCQkJfCBGQVRUUjRfV09SRDBfTUFYUkVBRAogCQkJfCBGQVRUUjRfV09SRDBfTUFYV1JJVEUKIAkJCXwgRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUsCiAJCQlGQVRUUjRfV09SRDFfVElNRV9ERUxUQQotCQkJfCBGQVRUUjRfV09SRDFfRlNfTEFZT1VUX1RZUEVTCisJCQl8IEZBVFRSNF9XT1JEMV9GU19MQVlPVVRfVFlQRVMsCisJCQlGQVRUUjRfV09SRDJfTEFZT1VUX0JMS1NJWkUKIH07CiAKIGNvbnN0IHUzMiBuZnM0X2ZzX2xvY2F0aW9uc19iaXRtYXBbMl0gPSB7CkBAIC0zMzczLDkgKzMzNzQsMTMgQEAKIAogCWlmICh0YXNrLT50a19zdGF0dXMgPCAwKSB7CiAJCS8qIFVubGVzcyB3ZSdyZSBzaHV0dGluZyBkb3duLCBzY2hlZHVsZSBzdGF0ZSByZWNvdmVyeSEgKi8KLQkJaWYgKHRlc3RfYml0KE5GU19DU19SRU5FV0QsICZjbHAtPmNsX3Jlc19zdGF0ZSkgIT0gMCkKKwkJaWYgKHRlc3RfYml0KE5GU19DU19SRU5FV0QsICZjbHAtPmNsX3Jlc19zdGF0ZSkgPT0gMCkKKwkJCXJldHVybjsKKwkJaWYgKHRhc2stPnRrX3N0YXR1cyAhPSBORlM0RVJSX0NCX1BBVEhfRE9XTikgewogCQkJbmZzNF9zY2hlZHVsZV9sZWFzZV9yZWNvdmVyeShjbHApOwotCQlyZXR1cm47CisJCQlyZXR1cm47CisJCX0KKwkJbmZzNF9zY2hlZHVsZV9wYXRoX2Rvd25fcmVjb3ZlcnkoY2xwKTsKIAl9CiAJZG9fcmVuZXdfbGVhc2UoY2xwLCB0aW1lc3RhbXApOwogfQpAQCAtMzM4NSw3ICszMzkwLDcgQEAKIAkucnBjX3JlbGVhc2UgPSBuZnM0X3JlbmV3X3JlbGVhc2UsCiB9OwogCi1pbnQgbmZzNF9wcm9jX2FzeW5jX3JlbmV3KHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKK3N0YXRpYyBpbnQgbmZzNF9wcm9jX2FzeW5jX3JlbmV3KHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgdW5zaWduZWQgcmVuZXdfZmxhZ3MpCiB7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jCT0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX1JFTkVXXSwKQEAgLTMzOTQsOSArMzM5OSwxMSBAQAogCX07CiAJc3RydWN0IG5mczRfcmVuZXdkYXRhICpkYXRhOwogCisJaWYgKHJlbmV3X2ZsYWdzID09IDApCisJCXJldHVybiAwOwogCWlmICghYXRvbWljX2luY19ub3RfemVybygmY2xwLT5jbF9jb3VudCkpCiAJCXJldHVybiAtRUlPOwotCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9OT0ZTKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkYXRhLT5jbGllbnQgPSBjbHA7CkBAIC0zNDA1LDcgKzM0MTIsNyBAQAogCQkJJm5mczRfcmVuZXdfb3BzLCBkYXRhKTsKIH0KIAotaW50IG5mczRfcHJvY19yZW5ldyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCitzdGF0aWMgaW50IG5mczRfcHJvY19yZW5ldyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jCT0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX1JFTkVXXSwKQEAgLTU1MDMsMTEgKzU1MTAsMTMgQEAKIAlyZXR1cm4gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogfQogCi1zdGF0aWMgaW50IG5mczQxX3Byb2NfYXN5bmNfc2VxdWVuY2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQorc3RhdGljIGludCBuZnM0MV9wcm9jX2FzeW5jX3NlcXVlbmNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgdW5zaWduZWQgcmVuZXdfZmxhZ3MpCiB7CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwogCWludCByZXQgPSAwOwogCisJaWYgKChyZW5ld19mbGFncyAmIE5GUzRfUkVORVdfVElNRU9VVCkgPT0gMCkKKwkJcmV0dXJuIDA7CiAJdGFzayA9IF9uZnM0MV9wcm9jX3NlcXVlbmNlKGNscCwgY3JlZCk7CiAJaWYgKElTX0VSUih0YXNrKSkKIAkJcmV0ID0gUFRSX0VSUih0YXNrKTsKQEAgLTU4MzQsNiArNTg0Myw1NCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qCisgKiBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBEYXRhIFNlcnZlciBkZXZpY2VzIGZyb20gdGhlIE1EUy4KKyAqLworc3RhdGljIGludCBfbmZzNF9nZXRkZXZpY2VsaXN0KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoLAorCQkJCSAgICBzdHJ1Y3QgcG5mc19kZXZpY2VsaXN0ICpkZXZsaXN0KQoreworCXN0cnVjdCBuZnM0X2dldGRldmljZWxpc3RfYXJncyBhcmdzID0geworCQkuZmggPSBmaCwKKwkJLmxheW91dGNsYXNzID0gc2VydmVyLT5wbmZzX2N1cnJfbGQtPmlkLAorCX07CisJc3RydWN0IG5mczRfZ2V0ZGV2aWNlbGlzdF9yZXMgcmVzID0geworCQkuZGV2bGlzdCA9IGRldmxpc3QsCisJfTsKKwlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0geworCQkucnBjX3Byb2MgPSAmbmZzNF9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfR0VUREVWSUNFTElTVF0sCisJCS5ycGNfYXJncCA9ICZhcmdzLAorCQkucnBjX3Jlc3AgPSAmcmVzLAorCX07CisJaW50IHN0YXR1czsKKworCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOworCXN0YXR1cyA9IG5mczRfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCBzZXJ2ZXIsICZtc2csICZhcmdzLnNlcV9hcmdzLAorCQkJCSZyZXMuc2VxX3JlcywgMCk7CisJZHByaW50aygiPC0tICVzIHN0YXR1cz0lZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG5mczRfcHJvY19nZXRkZXZpY2VsaXN0KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mc19maCAqZmgsCisJCQkgICAgc3RydWN0IHBuZnNfZGV2aWNlbGlzdCAqZGV2bGlzdCkKK3sKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCWludCBlcnI7CisKKwlkbyB7CisJCWVyciA9IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsCisJCQkJX25mczRfZ2V0ZGV2aWNlbGlzdChzZXJ2ZXIsIGZoLCBkZXZsaXN0KSwKKwkJCQkmZXhjZXB0aW9uKTsKKwl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOworCisJZHByaW50aygiJXM6IGVycj0lZCwgbnVtX2RldnM9JXVcbiIsIF9fZnVuY19fLAorCQllcnIsIGRldmxpc3QtPm51bV9kZXZzKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZnM0X3Byb2NfZ2V0ZGV2aWNlbGlzdCk7CisKIHN0YXRpYyBpbnQKIF9uZnM0X3Byb2NfZ2V0ZGV2aWNlaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKnBkZXYpCiB7CkBAIC01OTEyLDkgKzU5NjksMTYgQEAKIHN0YXRpYyB2b2lkIG5mczRfbGF5b3V0Y29tbWl0X3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgKnRtcDsKIAorCXBuZnNfY2xlYW51cF9sYXlvdXRjb21taXQoZGF0YSk7CiAJLyogTWF0Y2hlZCBieSByZWZlcmVuY2VzIGluIHBuZnNfc2V0X2xheW91dGNvbW1pdCAqLwotCXB1dF9sc2VnKGRhdGEtPmxzZWcpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2VnLCB0bXAsICZkYXRhLT5sc2VnX2xpc3QsIHBsc19sY19saXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmxzZWctPnBsc19sY19saXN0KTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlNfTFNFR19MQVlPVVRDT01NSVQsCisJCQkJICAgICAgICZsc2VnLT5wbHNfZmxhZ3MpKQorCQkJcHV0X2xzZWcobHNlZyk7CisJfQogCXB1dF9ycGNjcmVkKGRhdGEtPmNyZWQpOwogCWtmcmVlKGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggZGY4ZTdmMy4uZGM0ODRjMCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC02MCw2ICs2MCw3IEBACiAJc3RydWN0IHJwY19jcmVkICpjcmVkOwogCWxvbmcgbGVhc2U7CiAJdW5zaWduZWQgbG9uZyBsYXN0LCBub3c7CisJdW5zaWduZWQgcmVuZXdfZmxhZ3MgPSAwOwogCiAJb3BzID0gY2xwLT5jbF9tdm9wcy0+c3RhdGVfcmVuZXdhbF9vcHM7CiAJZHByaW50aygiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNfXyk7CkBAIC03MiwxOCArNzMsMjMgQEAKIAlsYXN0ID0gY2xwLT5jbF9sYXN0X3JlbmV3YWw7CiAJbm93ID0gamlmZmllczsKIAkvKiBBcmUgd2UgY2xvc2UgdG8gYSBsZWFzZSB0aW1lb3V0PyAqLwotCWlmICh0aW1lX2FmdGVyKG5vdywgbGFzdCArIGxlYXNlLzMpKSB7CisJaWYgKHRpbWVfYWZ0ZXIobm93LCBsYXN0ICsgbGVhc2UvMykpCisJCXJlbmV3X2ZsYWdzIHw9IE5GUzRfUkVORVdfVElNRU9VVDsKKwlpZiAobmZzX2RlbGVnYXRpb25zX3ByZXNlbnQoY2xwKSkKKwkJcmVuZXdfZmxhZ3MgfD0gTkZTNF9SRU5FV19ERUxFR0FUSU9OX0NCOworCisJaWYgKHJlbmV3X2ZsYWdzICE9IDApIHsKIAkJY3JlZCA9IG9wcy0+Z2V0X3N0YXRlX3JlbmV3YWxfY3JlZF9sb2NrZWQoY2xwKTsKIAkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJCWlmIChjcmVkID09IE5VTEwpIHsKLQkJCWlmICghbmZzX2RlbGVnYXRpb25zX3ByZXNlbnQoY2xwKSkgeworCQkJaWYgKCEocmVuZXdfZmxhZ3MgJiBORlM0X1JFTkVXX0RFTEVHQVRJT05fQ0IpKSB7CiAJCQkJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQluZnNfZXhwaXJlX2FsbF9kZWxlZ2F0aW9ucyhjbHApOwogCQl9IGVsc2UgewogCQkJLyogUXVldWUgYW4gYXN5bmNocm9ub3VzIFJFTkVXLiAqLwotCQkJb3BzLT5zY2hlZF9zdGF0ZV9yZW5ld2FsKGNscCwgY3JlZCk7CisJCQlvcHMtPnNjaGVkX3N0YXRlX3JlbmV3YWwoY2xwLCBjcmVkLCByZW5ld19mbGFncyk7CiAJCQlwdXRfcnBjY3JlZChjcmVkKTsKIAkJCWdvdG8gb3V0X2V4cDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IDcyYWI5N2UuLjM5OTE0YmUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTEwMzgsNiArMTAzOCwxMiBAQAogCW5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihjbHApOwogfQogCit2b2lkIG5mczRfc2NoZWR1bGVfcGF0aF9kb3duX3JlY292ZXJ5KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJbmZzX2hhbmRsZV9jYl9wYXRoZG93bihjbHApOworCW5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihjbHApOworfQorCiBzdGF0aWMgaW50IG5mczRfc3RhdGVfbWFya19yZWNsYWltX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGMxOTFhOWIuLjFkY2UxMmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtMTEzLDcgKzExMywxMSBAQAogI2RlZmluZSBlbmNvZGVfcmVzdG9yZWZoX21heHN6ICAob3BfZW5jb2RlX2hkcl9tYXhzeikKICNkZWZpbmUgZGVjb2RlX3Jlc3RvcmVmaF9tYXhzeiAgKG9wX2RlY29kZV9oZHJfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9mc2luZm9fbWF4c3oJKGVuY29kZV9nZXRhdHRyX21heHN6KQotI2RlZmluZSBkZWNvZGVfZnNpbmZvX21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6ICsgMTUpCisvKiBUaGUgNSBhY2NvdW50cyBmb3IgdGhlIFBORlMgYXR0cmlidXRlcywgYW5kIGFzc3VtZXMgdGhhdCBhdCBtb3N0IHRocmVlCisgKiBsYXlvdXQgdHlwZXMgd2lsbCBiZSByZXR1cm5lZC4KKyAqLworI2RlZmluZSBkZWNvZGVfZnNpbmZvX21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6ICsgXAorCQkJCSBuZnM0X2ZhdHRyX2JpdG1hcF9tYXhzeiArIDQgKyA4ICsgNSkKICNkZWZpbmUgZW5jb2RlX3JlbmV3X21heHN6CShvcF9lbmNvZGVfaGRyX21heHN6ICsgMykKICNkZWZpbmUgZGVjb2RlX3JlbmV3X21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6KQogI2RlZmluZSBlbmNvZGVfc2V0Y2xpZW50aWRfbWF4c3ogXApAQCAtMzE0LDYgKzMxOCwxNyBAQAogCQkJCVhEUl9RVUFETEVOKE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pICsgNSkKICNkZWZpbmUgZW5jb2RlX3JlY2xhaW1fY29tcGxldGVfbWF4c3oJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyA0KQogI2RlZmluZSBkZWNvZGVfcmVjbGFpbV9jb21wbGV0ZV9tYXhzegkob3BfZGVjb2RlX2hkcl9tYXhzeiArIDQpCisjZGVmaW5lIGVuY29kZV9nZXRkZXZpY2VsaXN0X21heHN6IChvcF9lbmNvZGVfaGRyX21heHN6ICsgNCArIFwKKwkJCQllbmNvZGVfdmVyaWZpZXJfbWF4c3opCisjZGVmaW5lIGRlY29kZV9nZXRkZXZpY2VsaXN0X21heHN6IChvcF9kZWNvZGVfaGRyX21heHN6ICsgXAorCQkJCTIgLyogbmZzX2Nvb2tpZTQgZ2Rscl9jb29raWUgKi8gKyBcCisJCQkJZGVjb2RlX3ZlcmlmaWVyX21heHN6IFwKKwkJCQkgIC8qIHZlcmlmaWVyNCBnZGxyX3ZlcmlmaWVyICovICsgXAorCQkJCTEgLyogZ2Rscl9kZXZpY2VpZF9saXN0IGNvdW50ICovICsgXAorCQkJCVhEUl9RVUFETEVOKE5GUzRfUE5GU19HRVRERVZMSVNUX01BWE5VTSAqIFwKKwkJCQkJICAgIE5GUzRfREVWSUNFSUQ0X1NJWkUpIFwKKwkJCQkgIC8qIGdkbHJfZGV2aWNlaWRfbGlzdCAqLyArIFwKKwkJCQkxIC8qIGJvb2wgZ2Rscl9lb2YgKi8pCiAjZGVmaW5lIGVuY29kZV9nZXRkZXZpY2VpbmZvX21heHN6IChvcF9lbmNvZGVfaGRyX21heHN6ICsgNCArIFwKIAkJCQlYRFJfUVVBRExFTihORlM0X0RFVklDRUlENF9TSVpFKSkKICNkZWZpbmUgZGVjb2RlX2dldGRldmljZWluZm9fbWF4c3ogKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBcCkBAIC03NDgsNiArNzYzLDE0IEBACiAjZGVmaW5lIE5GUzRfZGVjX3JlY2xhaW1fY29tcGxldGVfc3oJKGNvbXBvdW5kX2RlY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJCSBkZWNvZGVfc2VxdWVuY2VfbWF4c3ogKyBcCiAJCQkJCSBkZWNvZGVfcmVjbGFpbV9jb21wbGV0ZV9tYXhzeikKKyNkZWZpbmUgTkZTNF9lbmNfZ2V0ZGV2aWNlbGlzdF9zeiAoY29tcG91bmRfZW5jb2RlX2hkcl9tYXhzeiArIFwKKwkJCQllbmNvZGVfc2VxdWVuY2VfbWF4c3ogKyBcCisJCQkJZW5jb2RlX3B1dGZoX21heHN6ICsgXAorCQkJCWVuY29kZV9nZXRkZXZpY2VsaXN0X21heHN6KQorI2RlZmluZSBORlM0X2RlY19nZXRkZXZpY2VsaXN0X3N6IChjb21wb3VuZF9kZWNvZGVfaGRyX21heHN6ICsgXAorCQkJCWRlY29kZV9zZXF1ZW5jZV9tYXhzeiArIFwKKwkJCQlkZWNvZGVfcHV0ZmhfbWF4c3ogKyBcCisJCQkJZGVjb2RlX2dldGRldmljZWxpc3RfbWF4c3opCiAjZGVmaW5lIE5GUzRfZW5jX2dldGRldmljZWluZm9fc3ogKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyAgICBcCiAJCQkJZW5jb2RlX3NlcXVlbmNlX21heHN6ICtcCiAJCQkJZW5jb2RlX2dldGRldmljZWluZm9fbWF4c3opCkBAIC0xMTA0LDYgKzExMjcsMzUgQEAKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfZ2V0YXR0cl9tYXhzejsKIH0KIAorc3RhdGljIHZvaWQKK2VuY29kZV9nZXRhdHRyX3RocmVlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCSAgICAgdWludDMyX3QgYm0wLCB1aW50MzJfdCBibTEsIHVpbnQzMl90IGJtMiwKKwkJICAgICBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCit7CisJX19iZTMyICpwOworCisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE9QX0dFVEFUVFIpOworCWlmIChibTIpIHsKKwkJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNik7CisJCSpwKysgPSBjcHVfdG9fYmUzMigzKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGJtMCk7CisJCSpwKysgPSBjcHVfdG9fYmUzMihibTEpOworCQkqcCA9IGNwdV90b19iZTMyKGJtMik7CisJfSBlbHNlIGlmIChibTEpIHsKKwkJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxMik7CisJCSpwKysgPSBjcHVfdG9fYmUzMigyKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGJtMCk7CisJCSpwID0gY3B1X3RvX2JlMzIoYm0xKTsKKwl9IGVsc2UgeworCQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDgpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoMSk7CisJCSpwID0gY3B1X3RvX2JlMzIoYm0wKTsKKwl9CisJaGRyLT5ub3BzKys7CisJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2dldGF0dHJfbWF4c3o7Cit9CisKIHN0YXRpYyB2b2lkIGVuY29kZV9nZXRmYXR0cihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCB1MzIqIGJpdG1hc2ssIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKIAllbmNvZGVfZ2V0YXR0cl90d28oeGRyLCBiaXRtYXNrWzBdICYgbmZzNF9mYXR0cl9iaXRtYXBbMF0sCkBAIC0xMTEyLDggKzExNjQsMTEgQEAKIAogc3RhdGljIHZvaWQgZW5jb2RlX2ZzaW5mbyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCB1MzIqIGJpdG1hc2ssIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKLQllbmNvZGVfZ2V0YXR0cl90d28oeGRyLCBiaXRtYXNrWzBdICYgbmZzNF9mc2luZm9fYml0bWFwWzBdLAotCQkJICAgYml0bWFza1sxXSAmIG5mczRfZnNpbmZvX2JpdG1hcFsxXSwgaGRyKTsKKwllbmNvZGVfZ2V0YXR0cl90aHJlZSh4ZHIsCisJCQkgICAgIGJpdG1hc2tbMF0gJiBuZnM0X2ZzaW5mb19iaXRtYXBbMF0sCisJCQkgICAgIGJpdG1hc2tbMV0gJiBuZnM0X2ZzaW5mb19iaXRtYXBbMV0sCisJCQkgICAgIGJpdG1hc2tbMl0gJiBuZnM0X2ZzaW5mb19iaXRtYXBbMl0sCisJCQkgICAgIGhkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuY29kZV9mc19sb2NhdGlvbnMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3QgdTMyKiBiaXRtYXNrLCBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCkBAIC0xODU1LDYgKzE5MTAsMjYgQEAKIAogI2lmZGVmIENPTkZJR19ORlNfVjRfMQogc3RhdGljIHZvaWQKK2VuY29kZV9nZXRkZXZpY2VsaXN0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfZ2V0ZGV2aWNlbGlzdF9hcmdzICphcmdzLAorCQkgICAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKK3sKKwlfX2JlMzIgKnA7CisJbmZzNF92ZXJpZmllciBkdW1teSA9IHsKKwkJLmRhdGEgPSAiZHVtbW1tbXkiLAorCX07CisKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDIwKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfR0VUREVWSUNFTElTVCk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmxheW91dGNsYXNzKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoTkZTNF9QTkZTX0dFVERFVkxJU1RfTUFYTlVNKTsKKwl4ZHJfZW5jb2RlX2h5cGVyKHAsIDBVTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29va2llICovCisJZW5jb2RlX25mczRfdmVyaWZpZXIoeGRyLCAmZHVtbXkpOworCWhkci0+bm9wcysrOworCWhkci0+cmVwbGVuICs9IGRlY29kZV9nZXRkZXZpY2VsaXN0X21heHN6OworfQorCitzdGF0aWMgdm9pZAogZW5jb2RlX2dldGRldmljZWluZm8oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VpbmZvX2FyZ3MgKmFyZ3MsCiAJCSAgICAgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQpAQCAtMTkxNiw3ICsxOTkxLDcgQEAKIAkqcCsrID0gY3B1X3RvX2JlMzIoT1BfTEFZT1VUQ09NTUlUKTsKIAkvKiBPbmx5IHdob2xlIGZpbGUgbGF5b3V0cyAqLwogCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIDApOyAvKiBvZmZzZXQgKi8KLQlwID0geGRyX2VuY29kZV9oeXBlcihwLCBORlM0X01BWF9VSU5UNjQpOyAvKiBsZW5ndGggKi8KKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5sYXN0Ynl0ZXdyaXR0ZW4gKyAxKTsJLyogbGVuZ3RoICovCiAJKnArKyA9IGNwdV90b19iZTMyKDApOyAvKiByZWNsYWltICovCiAJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZ3MtPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwogCSpwKysgPSBjcHVfdG9fYmUzMigxKTsgLyogbmV3b2Zmc2V0ID0gVFJVRSAqLwpAQCAtMjYwNCw3ICsyNjc5LDcgQEAKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm5vcHMJPSAwLAogCX07Ci0JY29uc3QgdTMyIGxlYXNlX2JpdG1hcFsyXSA9IHsgRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUsIDAgfTsKKwljb25zdCB1MzIgbGVhc2VfYml0bWFwWzNdID0geyBGQVRUUjRfV09SRDBfTEVBU0VfVElNRSB9OwogCiAJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CiAJZW5jb2RlX3NldGNsaWVudGlkX2NvbmZpcm0oeGRyLCBhcmcsICZoZHIpOwpAQCAtMjc0OCw3ICsyODIzLDcgQEAKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKIAkJLm1pbm9ydmVyc2lvbiA9IG5mczRfeGRyX21pbm9ydmVyc2lvbigmYXJncy0+bGFfc2VxX2FyZ3MpLAogCX07Ci0JY29uc3QgdTMyIGxlYXNlX2JpdG1hcFsyXSA9IHsgRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUsIDAgfTsKKwljb25zdCB1MzIgbGVhc2VfYml0bWFwWzNdID0geyBGQVRUUjRfV09SRDBfTEVBU0VfVElNRSB9OwogCiAJZW5jb2RlX2NvbXBvdW5kX2hkcih4ZHIsIHJlcSwgJmhkcik7CiAJZW5jb2RlX3NlcXVlbmNlKHhkciwgJmFyZ3MtPmxhX3NlcV9hcmdzLCAmaGRyKTsKQEAgLTI3NzUsNiArMjg1MCwyNCBAQAogfQogCiAvKgorICogRW5jb2RlIEdFVERFVklDRUxJU1QgcmVxdWVzdAorICovCitzdGF0aWMgdm9pZCBuZnM0X3hkcl9lbmNfZ2V0ZGV2aWNlbGlzdChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwKKwkJCQkgICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgICAgc3RydWN0IG5mczRfZ2V0ZGV2aWNlbGlzdF9hcmdzICphcmdzKQoreworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0geworCQkubWlub3J2ZXJzaW9uID0gbmZzNF94ZHJfbWlub3J2ZXJzaW9uKCZhcmdzLT5zZXFfYXJncyksCisJfTsKKworCWVuY29kZV9jb21wb3VuZF9oZHIoeGRyLCByZXEsICZoZHIpOworCWVuY29kZV9zZXF1ZW5jZSh4ZHIsICZhcmdzLT5zZXFfYXJncywgJmhkcik7CisJZW5jb2RlX3B1dGZoKHhkciwgYXJncy0+ZmgsICZoZHIpOworCWVuY29kZV9nZXRkZXZpY2VsaXN0KHhkciwgYXJncywgJmhkcik7CisJZW5jb2RlX25vcHMoJmhkcik7Cit9CisKKy8qCiAgKiBFbmNvZGUgR0VUREVWSUNFSU5GTyByZXF1ZXN0CiAgKi8KIHN0YXRpYyB2b2lkIG5mczRfeGRyX2VuY19nZXRkZXZpY2VpbmZvKHN0cnVjdCBycGNfcnFzdCAqcmVxLApAQCAtMzAxMSwxNCArMzEwNCwxNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAlibWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAotCWJpdG1hcFswXSA9IGJpdG1hcFsxXSA9IDA7CisJYml0bWFwWzBdID0gYml0bWFwWzFdID0gYml0bWFwWzJdID0gMDsKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAoYm1sZW4gPDwgMikpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwogCWlmIChibWxlbiA+IDApIHsKIAkJYml0bWFwWzBdID0gYmUzMl90b19jcHVwKHArKyk7Ci0JCWlmIChibWxlbiA+IDEpCi0JCQliaXRtYXBbMV0gPSBiZTMyX3RvX2NwdXAocCk7CisJCWlmIChibWxlbiA+IDEpIHsKKwkJCWJpdG1hcFsxXSA9IGJlMzJfdG9fY3B1cChwKyspOworCQkJaWYgKGJtbGVuID4gMikKKwkJCQliaXRtYXBbMl0gPSBiZTMyX3RvX2NwdXAocCk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiBvdXRfb3ZlcmZsb3c6CkBAIC0zMDUwLDggKzMxNDYsOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfU1VQUE9SVEVEX0FUVFJTOwogCX0gZWxzZQotCQliaXRtYXNrWzBdID0gYml0bWFza1sxXSA9IDA7Ci0JZHByaW50aygiJXM6IGJpdG1hc2s9JTA4eDolMDh4XG4iLCBfX2Z1bmNfXywgYml0bWFza1swXSwgYml0bWFza1sxXSk7CisJCWJpdG1hc2tbMF0gPSBiaXRtYXNrWzFdID0gYml0bWFza1syXSA9IDA7CisJZHByaW50aygiJXM6IGJpdG1hc2s9JTA4eDolMDh4OiUwOHhcbiIsIF9fZnVuY19fLAorCQliaXRtYXNrWzBdLCBiaXRtYXNrWzFdLCBiaXRtYXNrWzJdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEwNSw3ICs0MjAyLDcgQEAKIHN0YXRpYyBpbnQgZGVjb2RlX3NlcnZlcl9jYXBzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X3NlcnZlcl9jYXBzX3JlcyAqcmVzKQogewogCV9fYmUzMiAqc2F2ZXA7Ci0JdWludDMyX3QgYXR0cmxlbiwgYml0bWFwWzJdID0gezB9OworCXVpbnQzMl90IGF0dHJsZW4sIGJpdG1hcFszXSA9IHswfTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKChzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfR0VUQVRUUikpICE9IDApCkBAIC00MTMxLDcgKzQyMjgsNyBAQAogc3RhdGljIGludCBkZWNvZGVfc3RhdGZzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZnNzdGF0ICpmc3N0YXQpCiB7CiAJX19iZTMyICpzYXZlcDsKLQl1aW50MzJfdCBhdHRybGVuLCBiaXRtYXBbMl0gPSB7MH07CisJdWludDMyX3QgYXR0cmxlbiwgYml0bWFwWzNdID0gezB9OwogCWludCBzdGF0dXM7CiAKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9HRVRBVFRSKSkgIT0gMCkKQEAgLTQxNjMsNyArNDI2MCw3IEBACiBzdGF0aWMgaW50IGRlY29kZV9wYXRoY29uZihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX3BhdGhjb25mICpwYXRoY29uZikKIHsKIAlfX2JlMzIgKnNhdmVwOwotCXVpbnQzMl90IGF0dHJsZW4sIGJpdG1hcFsyXSA9IHswfTsKKwl1aW50MzJfdCBhdHRybGVuLCBiaXRtYXBbM10gPSB7MH07CiAJaW50IHN0YXR1czsKIAogCWlmICgoc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0dFVEFUVFIpKSAhPSAwKQpAQCAtNDMwMyw3ICs0NDAwLDcgQEAKIHsKIAlfX2JlMzIgKnNhdmVwOwogCXVpbnQzMl90IGF0dHJsZW4sCi0JCSBiaXRtYXBbMl0gPSB7MH07CisJCSBiaXRtYXBbM10gPSB7MH07CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9HRVRBVFRSKTsKQEAgLTQzODksMTAgKzQ0ODYsMzIgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogVGhlIHByZWZlcmVkIGJsb2NrIHNpemUgZm9yIGxheW91dCBkaXJlY3RlZCBpbworICovCitzdGF0aWMgaW50IGRlY29kZV9hdHRyX2xheW91dF9ibGtzaXplKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsCisJCQkJICAgICAgdWludDMyX3QgKnJlcykKK3sKKwlfX2JlMzIgKnA7CisKKwlkcHJpbnRrKCIlczogYml0bWFwIGlzICV4XG4iLCBfX2Z1bmNfXywgYml0bWFwWzJdKTsKKwkqcmVzID0gMDsKKwlpZiAoYml0bWFwWzJdICYgRkFUVFI0X1dPUkQyX0xBWU9VVF9CTEtTSVpFKSB7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKSB7CisJCQlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkqcmVzID0gYmUzMl90b19jcHVwKHApOworCQliaXRtYXBbMl0gJj0gfkZBVFRSNF9XT1JEMl9MQVlPVVRfQkxLU0laRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZGVjb2RlX2ZzaW5mbyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZzaW5mbyAqZnNpbmZvKQogewogCV9fYmUzMiAqc2F2ZXA7Ci0JdWludDMyX3QgYXR0cmxlbiwgYml0bWFwWzJdOworCXVpbnQzMl90IGF0dHJsZW4sIGJpdG1hcFszXTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKChzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfR0VUQVRUUikpICE9IDApCkBAIC00NDIwLDYgKzQ1MzksOSBAQAogCXN0YXR1cyA9IGRlY29kZV9hdHRyX3BuZnN0eXBlKHhkciwgYml0bWFwLCAmZnNpbmZvLT5sYXlvdXR0eXBlKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8geGRyX2Vycm9yOworCXN0YXR1cyA9IGRlY29kZV9hdHRyX2xheW91dF9ibGtzaXplKHhkciwgYml0bWFwLCAmZnNpbmZvLT5ibGtzaXplKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIHhkcl9lcnJvcjsKIAogCXN0YXR1cyA9IHZlcmlmeV9hdHRyX2xlbih4ZHIsIHNhdmVwLCBhdHRybGVuKTsKIHhkcl9lcnJvcjoKQEAgLTQ4MzksNyArNDk2MSw3IEBACiB7CiAJX19iZTMyICpzYXZlcDsKIAl1aW50MzJfdCBhdHRybGVuLAotCQkgYml0bWFwWzJdID0gezB9OworCQkgYml0bWFwWzNdID0gezB9OwogCXN0cnVjdCBrdmVjICppb3YgPSByZXEtPnJxX3Jjdl9idWYuaGVhZDsKIAlpbnQgc3RhdHVzOwogCkBAIC01MjY4LDYgKzUzOTAsNTMgQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQorLyoKKyAqIFRPRE86IE5lZWQgdG8gaGFuZGxlIGNhc2Ugd2hlbiBFT0YgIT0gdHJ1ZTsKKyAqLworc3RhdGljIGludCBkZWNvZGVfZ2V0ZGV2aWNlbGlzdChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCXN0cnVjdCBwbmZzX2RldmljZWxpc3QgKnJlcykKK3sKKwlfX2JlMzIgKnA7CisJaW50IHN0YXR1cywgaTsKKwlzdHJ1Y3QgbmZzX3dyaXRldmVyZiB2ZXJmdGVtcDsKKworCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9HRVRERVZJQ0VMSVNUKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCArIDggKyA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKworCS8qIFRPRE86IFNraXAgY29va2llIGZvciBub3cgKi8KKwlwICs9IDI7CisKKwkvKiBSZWFkIHZlcmlmaWVyICovCisJcCA9IHhkcl9kZWNvZGVfb3BhcXVlX2ZpeGVkKHAsIHZlcmZ0ZW1wLnZlcmlmaWVyLCA4KTsKKworCXJlcy0+bnVtX2RldnMgPSBiZTMyX3RvX2NwdXAocCk7CisKKwlkcHJpbnRrKCIlczogbnVtX2RldiAlZFxuIiwgX19mdW5jX18sIHJlcy0+bnVtX2RldnMpOworCisJaWYgKHJlcy0+bnVtX2RldnMgPiBORlM0X1BORlNfR0VUREVWTElTVF9NQVhOVU0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyB0b28gbWFueSByZXN1bHQgZGV2X251bSAldVxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzLT5udW1fZGV2cyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsCisJCQkgICAgICByZXMtPm51bV9kZXZzICogTkZTNF9ERVZJQ0VJRDRfU0laRSArIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWZvciAoaSA9IDA7IGkgPCByZXMtPm51bV9kZXZzOyBpKyspCisJCXAgPSB4ZHJfZGVjb2RlX29wYXF1ZV9maXhlZChwLCByZXMtPmRldl9pZFtpXS5kYXRhLAorCQkJCQkgICAgTkZTNF9ERVZJQ0VJRDRfU0laRSk7CisJcmVzLT5lb2YgPSBiZTMyX3RvX2NwdXAocCk7CisJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQogCiBzdGF0aWMgaW50IGRlY29kZV9nZXRkZXZpY2VpbmZvKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2KQpAQCAtNTQzMCw2ICs1NTk5LDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0xBWU9VVENPTU1JVCk7CisJcmVzLT5zdGF0dXMgPSBzdGF0dXM7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtNjU0Miw2ICs2NzEyLDMyIEBACiB9CiAKIC8qCisgKiBEZWNvZGUgR0VUREVWSUNFTElTVCByZXNwb25zZQorICovCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19nZXRkZXZpY2VsaXN0KHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsCisJCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgICAgICBzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VsaXN0X3JlcyAqcmVzKQoreworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyOworCWludCBzdGF0dXM7CisKKwlkcHJpbnRrKCJlbmNvZGluZyBnZXRkZXZpY2VsaXN0IVxuIik7CisKKwlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIG91dDsKKwlzdGF0dXMgPSBkZWNvZGVfcHV0ZmgoeGRyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCXN0YXR1cyA9IGRlY29kZV9nZXRkZXZpY2VsaXN0KHhkciwgcmVzLT5kZXZsaXN0KTsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgogICogRGVjb2RlIEdFVERFVklORk8gcmVzcG9uc2UKICAqLwogc3RhdGljIGludCBuZnM0X3hkcl9kZWNfZ2V0ZGV2aWNlaW5mbyhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLApAQCAtNjcyMiw3ICs2OTE4LDcgQEAKIGludCBuZnM0X2RlY29kZV9kaXJlbnQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19lbnRyeSAqZW50cnksCiAJCSAgICAgICBpbnQgcGx1cykKIHsKLQl1aW50MzJfdCBiaXRtYXBbMl0gPSB7MH07CisJdWludDMyX3QgYml0bWFwWzNdID0gezB9OwogCXVpbnQzMl90IGxlbjsKIAlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCkBAIC02OTA4LDYgKzcxMDQsNyBAQAogCVBST0MoU0VDSU5GT19OT19OQU1FLAllbmNfc2VjaW5mb19ub19uYW1lLAlkZWNfc2VjaW5mb19ub19uYW1lKSwKIAlQUk9DKFRFU1RfU1RBVEVJRCwJZW5jX3Rlc3Rfc3RhdGVpZCwJZGVjX3Rlc3Rfc3RhdGVpZCksCiAJUFJPQyhGUkVFX1NUQVRFSUQsCWVuY19mcmVlX3N0YXRlaWQsCWRlY19mcmVlX3N0YXRlaWQpLAorCVBST0MoR0VUREVWSUNFTElTVCwJZW5jX2dldGRldmljZWxpc3QsCWRlY19nZXRkZXZpY2VsaXN0KSwKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9vYmpsYXlvdXQvb2JqaW9fb3NkLmMgYi9mcy9uZnMvb2JqbGF5b3V0L29iamlvX29zZC5jCmluZGV4IDkzODNjYTcuLmQwY2RhMTIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9vYmpsYXlvdXQvb2JqaW9fb3NkLmMKKysrIGIvZnMvbmZzL29iamxheW91dC9vYmppb19vc2QuYwpAQCAtNDc5LDcgKzQ3OSw2IEBACiAJZm9yIChpID0gMDsgaSA8ICBpb3MtPm51bWRldnM7IGkrKykgewogCQlzdHJ1Y3Qgb3NkX3NlbnNlX2luZm8gb3NpOwogCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gaW9zLT5wZXJfZGV2W2ldLm9yOwotCQl1bnNpZ25lZCBkZXY7CiAJCWludCByZXQ7CiAKIAkJaWYgKCFvcikKQEAgLTUwMCw5ICs0OTksOCBAQAogCiAJCQljb250aW51ZTsgLyogd2UgcmVjb3ZlcmVkICovCiAJCX0KLQkJZGV2ID0gaW9zLT5wZXJfZGV2W2ldLmRldjsKLQkJb2JqbGF5b3V0X2lvX3NldF9yZXN1bHQoJmlvcy0+b2xfc3RhdGUsIGRldiwKLQkJCQkJJmlvcy0+bGF5b3V0LT5jb21wc1tkZXZdLm9jX29iamVjdF9pZCwKKwkJb2JqbGF5b3V0X2lvX3NldF9yZXN1bHQoJmlvcy0+b2xfc3RhdGUsIGksCisJCQkJCSZpb3MtPmxheW91dC0+Y29tcHNbaV0ub2Nfb2JqZWN0X2lkLAogCQkJCQlvc2RfcHJpXzJfcG5mc19lcnIob3NpLm9zZF9lcnJfcHJpKSwKIAkJCQkJaW9zLT5wZXJfZGV2W2ldLm9mZnNldCwKIAkJCQkJaW9zLT5wZXJfZGV2W2ldLmxlbmd0aCwKQEAgLTU4OSwyMiArNTg3LDE5IEBACiB9CiAKIHN0YXRpYyBpbnQgX2FkZF9zdHJpcGVfdW5pdChzdHJ1Y3Qgb2JqaW9fc3RhdGUgKmlvcywgIHVuc2lnbmVkICpjdXJfcGcsCi0JCXVuc2lnbmVkIHBnYmFzZSwgc3RydWN0IF9vYmppb19wZXJfY29tcCAqcGVyX2RldiwgaW50IGN1cl9sZW4sCisJCXVuc2lnbmVkIHBnYmFzZSwgc3RydWN0IF9vYmppb19wZXJfY29tcCAqcGVyX2RldiwgaW50IGxlbiwKIAkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXVuc2lnbmVkIHBnID0gKmN1cl9wZzsKKwlpbnQgY3VyX2xlbiA9IGxlbjsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9CiAJCQlvc2RfcmVxdWVzdF9xdWV1ZShfaW9fb2QoaW9zLCBwZXJfZGV2LT5kZXYpKTsKIAotCXBlcl9kZXYtPmxlbmd0aCArPSBjdXJfbGVuOwotCiAJaWYgKHBlcl9kZXYtPmJpbyA9PSBOVUxMKSB7Ci0JCXVuc2lnbmVkIHN0cmlwZXMgPSBpb3MtPmxheW91dC0+bnVtX2NvbXBzIC8KLQkJCQkJCSAgICAgaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDE7Ci0JCXVuc2lnbmVkIHBhZ2VzX2luX3N0cmlwZSA9IHN0cmlwZXMgKgorCQl1bnNpZ25lZCBwYWdlc19pbl9zdHJpcGUgPSBpb3MtPmxheW91dC0+Z3JvdXBfd2lkdGggKgogCQkJCSAgICAgIChpb3MtPmxheW91dC0+c3RyaXBlX3VuaXQgLyBQQUdFX1NJWkUpOwogCQl1bnNpZ25lZCBiaW9fc2l6ZSA9IChpb3MtPm9sX3N0YXRlLm5yX3BhZ2VzICsgcGFnZXNfaW5fc3RyaXBlKSAvCi0JCQkJICAgIHN0cmlwZXM7CisJCQkJICAgIGlvcy0+bGF5b3V0LT5ncm91cF93aWR0aDsKIAogCQlpZiAoQklPX01BWF9QQUdFU19LTUFMTE9DIDwgYmlvX3NpemUpCiAJCQliaW9fc2l6ZSA9IEJJT19NQVhfUEFHRVNfS01BTExPQzsKQEAgLTYzMiw2ICs2MjcsNyBAQAogCX0KIAlCVUdfT04oY3VyX2xlbik7CiAKKwlwZXJfZGV2LT5sZW5ndGggKz0gbGVuOwogCSpjdXJfcGcgPSBwZzsKIAlyZXR1cm4gMDsKIH0KQEAgLTY1MCw3ICs2NDYsNyBAQAogCWludCByZXQgPSAwOwogCiAJd2hpbGUgKGxlbmd0aCkgewotCQlzdHJ1Y3QgX29iamlvX3Blcl9jb21wICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltkZXZdOworCQlzdHJ1Y3QgX29iamlvX3Blcl9jb21wICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltkZXYgLSBmaXJzdF9kZXZdOwogCQl1bnNpZ25lZCBjdXJfbGVuLCBwYWdlX29mZiA9IDA7CiAKIAkJaWYgKCFwZXJfZGV2LT5sZW5ndGgpIHsKQEAgLTY3MCw4ICs2NjYsOCBAQAogCQkJCWN1cl9sZW4gPSBzdHJpcGVfdW5pdDsKIAkJCX0KIAotCQkJaWYgKG1heF9jb21wIDwgZGV2KQotCQkJCW1heF9jb21wID0gZGV2OworCQkJaWYgKG1heF9jb21wIDwgZGV2IC0gZmlyc3RfZGV2KQorCQkJCW1heF9jb21wID0gZGV2IC0gZmlyc3RfZGV2OwogCQl9IGVsc2UgewogCQkJY3VyX2xlbiA9IHN0cmlwZV91bml0OwogCQl9CkBAIC04MDYsNyArODAyLDcgQEAKIAlzdHJ1Y3QgX29iamlvX3Blcl9jb21wICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CiAJdW5zaWduZWQgZGV2ID0gcGVyX2Rldi0+ZGV2OwogCXN0cnVjdCBwbmZzX29zZF9vYmplY3RfY3JlZCAqY3JlZCA9Ci0JCQkmaW9zLT5sYXlvdXQtPmNvbXBzW2Rldl07CisJCQkmaW9zLT5sYXlvdXQtPmNvbXBzW2N1cl9jb21wXTsKIAlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7CiAJCS5wYXJ0aXRpb24gPSBjcmVkLT5vY19vYmplY3RfaWQub2lkX3BhcnRpdGlvbl9pZCwKIAkJLmlkID0gY3JlZC0+b2Nfb2JqZWN0X2lkLm9pZF9vYmplY3RfaWQsCkBAIC05MDQsNyArOTAwLDcgQEAKIAlmb3IgKDsgY3VyX2NvbXAgPCBsYXN0X2NvbXA7ICsrY3VyX2NvbXAsICsrZGV2KSB7CiAJCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOwogCQlzdHJ1Y3QgcG5mc19vc2Rfb2JqZWN0X2NyZWQgKmNyZWQgPQotCQkJCQkmaW9zLT5sYXlvdXQtPmNvbXBzW2Rldl07CisJCQkJCSZpb3MtPmxheW91dC0+Y29tcHNbY3VyX2NvbXBdOwogCQlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7CiAJCQkucGFydGl0aW9uID0gY3JlZC0+b2Nfb2JqZWN0X2lkLm9pZF9wYXJ0aXRpb25faWQsCiAJCQkuaWQgPSBjcmVkLT5vY19vYmplY3RfaWQub2lkX29iamVjdF9pZCwKZGlmZiAtLWdpdCBhL2ZzL25mcy9vYmpsYXlvdXQvcG5mc19vc2RfeGRyX2NsaS5jIGIvZnMvbmZzL29iamxheW91dC9wbmZzX29zZF94ZHJfY2xpLmMKaW5kZXggMTZmYzc1OC4uYjM5MThmNyAxMDA2NDQKLS0tIGEvZnMvbmZzL29iamxheW91dC9wbmZzX29zZF94ZHJfY2xpLmMKKysrIGIvZnMvbmZzL29iamxheW91dC9wbmZzX29zZF94ZHJfY2xpLmMKQEAgLTE3MCw2ICsxNzAsOSBAQAogCXAgPSBfb3NkX3hkcl9kZWNvZGVfZGF0YV9tYXAocCwgJmxheW91dC0+b2xvX21hcCk7CiAJbGF5b3V0LT5vbG9fY29tcHNfaW5kZXggPSBiZTMyX3RvX2NwdXAocCsrKTsKIAlsYXlvdXQtPm9sb19udW1fY29tcHMgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlkcHJpbnRrKCIlczogb2xvX2NvbXBzX2luZGV4PSVkIG9sb19udW1fY29tcHM9JWRcbiIsIF9fZnVuY19fLAorCQlsYXlvdXQtPm9sb19jb21wc19pbmRleCwgbGF5b3V0LT5vbG9fbnVtX2NvbXBzKTsKKwogCWl0ZXItPnRvdGFsX2NvbXBzID0gbGF5b3V0LT5vbG9fbnVtX2NvbXBzOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggMzhlNTUwOC4uZTU1MGU4OCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC03Niw4ICs3NiwxMSBAQAogdm9pZAogdW5zZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MpCiB7Ci0JaWYgKG5mc3MtPnBuZnNfY3Vycl9sZCkKKwlpZiAobmZzcy0+cG5mc19jdXJyX2xkKSB7CisJCWlmIChuZnNzLT5wbmZzX2N1cnJfbGQtPmNsZWFyX2xheW91dGRyaXZlcikKKwkJCW5mc3MtPnBuZnNfY3Vycl9sZC0+Y2xlYXJfbGF5b3V0ZHJpdmVyKG5mc3MpOwogCQltb2R1bGVfcHV0KG5mc3MtPnBuZnNfY3Vycl9sZC0+b3duZXIpOworCX0KIAluZnNzLT5wbmZzX2N1cnJfbGQgPSBOVUxMOwogfQogCkBAIC04OCw3ICs5MSw4IEBACiAgKiBAaWQgbGF5b3V0IHR5cGUuIFplcm8gKGlsbGVnYWwgbGF5b3V0IHR5cGUpIGluZGljYXRlcyBwTkZTIG5vdCBpbiB1c2UuCiAgKi8KIHZvaWQKLXNldF9wbmZzX2xheW91dGRyaXZlcihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCB1MzIgaWQpCitzZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgY29uc3Qgc3RydWN0IG5mc19maCAqbW50ZmgsCisJCSAgICAgIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcG5mc19sYXlvdXRkcml2ZXJfdHlwZSAqbGRfdHlwZSA9IE5VTEw7CiAKQEAgLTExNSw2ICsxMTksMTMgQEAKIAkJZ290byBvdXRfbm9fZHJpdmVyOwogCX0KIAlzZXJ2ZXItPnBuZnNfY3Vycl9sZCA9IGxkX3R5cGU7CisJaWYgKGxkX3R5cGUtPnNldF9sYXlvdXRkcml2ZXIKKwkgICAgJiYgbGRfdHlwZS0+c2V0X2xheW91dGRyaXZlcihzZXJ2ZXIsIG1udGZoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbml0aWFsaXppbmcgcE5GUyBsYXlvdXQgZHJpdmVyICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgaWQpOworCQltb2R1bGVfcHV0KGxkX3R5cGUtPm93bmVyKTsKKwkJZ290byBvdXRfbm9fZHJpdmVyOworCX0KIAogCWRwcmludGsoIiVzOiBwTkZTIG1vZHVsZSBmb3IgJXUgc2V0XG4iLCBfX2Z1bmNfXywgaWQpOwogCXJldHVybjsKQEAgLTE5MCw2ICsyMDEsNyBAQAogcG5mc19mcmVlX2xheW91dF9oZHIoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pCiB7CiAJc3RydWN0IHBuZnNfbGF5b3V0ZHJpdmVyX3R5cGUgKmxkID0gTkZTX1NFUlZFUihsby0+cGxoX2lub2RlKS0+cG5mc19jdXJyX2xkOworCXB1dF9ycGNjcmVkKGxvLT5wbGhfbGNfY3JlZCk7CiAJcmV0dXJuIGxkLT5hbGxvY19sYXlvdXRfaGRyID8gbGQtPmZyZWVfbGF5b3V0X2hkcihsbykgOiBrZnJlZShsbyk7CiB9CiAKQEAgLTIyNCw2ICsyMzYsNyBAQAogaW5pdF9sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLCBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKIHsKIAlJTklUX0xJU1RfSEVBRCgmbHNlZy0+cGxzX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZsc2VnLT5wbHNfbGNfbGlzdCk7CiAJYXRvbWljX3NldCgmbHNlZy0+cGxzX3JlZmNvdW50LCAxKTsKIAlzbXBfbWIoKTsKIAlzZXRfYml0KE5GU19MU0VHX1ZBTElELCAmbHNlZy0+cGxzX2ZsYWdzKTsKQEAgLTgxNiw3ICs4MjksOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqCi1hbGxvY19pbml0X2xheW91dF9oZHIoc3RydWN0IGlub2RlICppbm8sIGdmcF90IGdmcF9mbGFncykKK2FsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubywKKwkJICAgICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCkBAIC04MjgsMTEgKzg0MywxNCBAQAogCUlOSVRfTElTVF9IRUFEKCZsby0+cGxoX3NlZ3MpOwogCUlOSVRfTElTVF9IRUFEKCZsby0+cGxoX2J1bGtfcmVjYWxsKTsKIAlsby0+cGxoX2lub2RlID0gaW5vOworCWxvLT5wbGhfbGNfY3JlZCA9IGdldF9ycGNjcmVkKGN0eC0+c3RhdGUtPm93bmVyLT5zb19jcmVkKTsKIAlyZXR1cm4gbG87CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKLXBuZnNfZmluZF9hbGxvY19sYXlvdXQoc3RydWN0IGlub2RlICppbm8sIGdmcF90IGdmcF9mbGFncykKK3BuZnNfZmluZF9hbGxvY19sYXlvdXQoc3RydWN0IGlub2RlICppbm8sCisJCSAgICAgICBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkgICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKm5ldyA9IE5VTEw7CkBAIC04NDcsNyArODY1LDcgQEAKIAkJCXJldHVybiBuZnNpLT5sYXlvdXQ7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubywgZ2ZwX2ZsYWdzKTsKKwluZXcgPSBhbGxvY19pbml0X2xheW91dF9oZHIoaW5vLCBjdHgsIGdmcF9mbGFncyk7CiAJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7CiAKIAlpZiAobGlrZWx5KG5mc2ktPmxheW91dCA9PSBOVUxMKSkJLyogV29uIHRoZSByYWNlPyAqLwpAQCAtOTQwLDcgKzk1OCw3IEBACiAJaWYgKCFwbmZzX2VuYWJsZWRfc2IoTkZTX1NFUlZFUihpbm8pKSkKIAkJcmV0dXJuIE5VTEw7CiAJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbG8gPSBwbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KGlubywgZ2ZwX2ZsYWdzKTsKKwlsbyA9IHBuZnNfZmluZF9hbGxvY19sYXlvdXQoaW5vLCBjdHgsIGdmcF9mbGFncyk7CiAJaWYgKGxvID09IE5VTEwpIHsKIAkJZHByaW50aygiJXMgRVJST1I6IGNhbid0IGdldCBwbmZzX2xheW91dF9oZHJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTM1MCwxNiArMTM2OCwxNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX3BnX3JlYWRwYWdlcyk7CiAKIC8qCi0gKiBDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgKHdob2xlIGZpbGUpIHdyaXRlIGxzZWcuCisgKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgUlcgc2VnbWVudHMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqcG5mc19saXN0X3dyaXRlX2xzZWcoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHBuZnNfbGlzdF93cml0ZV9sc2VnKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RwKQogewotCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCAqcnYgPSBOVUxMOworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShsc2VnLCAmTkZTX0koaW5vZGUpLT5sYXlvdXQtPnBsaF9zZWdzLCBwbHNfbGlzdCkKLQkJaWYgKGxzZWctPnBsc19yYW5nZS5pb21vZGUgPT0gSU9NT0RFX1JXKQotCQkJcnYgPSBsc2VnOwotCXJldHVybiBydjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxzZWcsICZORlNfSShpbm9kZSktPmxheW91dC0+cGxoX3NlZ3MsIHBsc19saXN0KSB7CisJCWlmIChsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlID09IElPTU9ERV9SVyAmJgorCQkgICAgdGVzdF9iaXQoTkZTX0xTRUdfTEFZT1VUQ09NTUlULCAmbHNlZy0+cGxzX2ZsYWdzKSkKKwkJCWxpc3RfYWRkKCZsc2VnLT5wbHNfbGNfbGlzdCwgbGlzdHApOworCX0KIH0KIAogdm9pZApAQCAtMTM3MSwxNyArMTM5MCwxOSBAQAogCiAJc3Bpbl9sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lOT19MQVlPVVRDT01NSVQsICZuZnNpLT5mbGFncykpIHsKLQkJLyogcmVmZXJlbmNlcyBtYXRjaGVkIGluIG5mczRfbGF5b3V0Y29tbWl0X3JlbGVhc2UgKi8KLQkJZ2V0X2xzZWcod2RhdGEtPmxzZWcpOwotCQl3ZGF0YS0+bHNlZy0+cGxzX2xjX2NyZWQgPQotCQkJZ2V0X3JwY2NyZWQod2RhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUtPm93bmVyLT5zb19jcmVkKTsKIAkJbWFya19hc19kaXJ0eSA9IHRydWU7CiAJCWRwcmludGsoIiVzOiBTZXQgbGF5b3V0Y29tbWl0IGZvciBpbm9kZSAlbHUgIiwKIAkJCV9fZnVuY19fLCB3ZGF0YS0+aW5vZGUtPmlfaW5vKTsKIAl9Ci0JaWYgKGVuZF9wb3MgPiB3ZGF0YS0+bHNlZy0+cGxzX2VuZF9wb3MpCi0JCXdkYXRhLT5sc2VnLT5wbHNfZW5kX3BvcyA9IGVuZF9wb3M7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE5GU19MU0VHX0xBWU9VVENPTU1JVCwgJndkYXRhLT5sc2VnLT5wbHNfZmxhZ3MpKSB7CisJCS8qIHJlZmVyZW5jZXMgbWF0Y2hlZCBpbiBuZnM0X2xheW91dGNvbW1pdF9yZWxlYXNlICovCisJCWdldF9sc2VnKHdkYXRhLT5sc2VnKTsKKwl9CisJaWYgKGVuZF9wb3MgPiBuZnNpLT5sYXlvdXQtPnBsaF9sd2IpCisJCW5mc2ktPmxheW91dC0+cGxoX2x3YiA9IGVuZF9wb3M7CiAJc3Bpbl91bmxvY2soJm5mc2ktPnZmc19pbm9kZS5pX2xvY2spOworCWRwcmludGsoIiVzOiBsc2VnICVwIGVuZF9wb3MgJWxsdVxuIiwKKwkJX19mdW5jX18sIHdkYXRhLT5sc2VnLCBuZnNpLT5sYXlvdXQtPnBsaF9sd2IpOwogCiAJLyogaWYgcG5mc19sYXlvdXRjb21taXRfaW5vZGUoKSBydW5zIGJldHdlZW4gaW5vZGUgbG9ja3MsIHRoZSBuZXh0IG9uZQogCSAqIHdpbGwgYmUgYSBub29wIGJlY2F1c2UgTkZTX0lOT19MQVlPVVRDT01NSVQgd2lsbCBub3QgYmUgc2V0ICovCkBAIC0xMzkwLDYgKzE0MTEsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBuZnNfc2V0X2xheW91dGNvbW1pdCk7CiAKK3ZvaWQgcG5mc19jbGVhbnVwX2xheW91dGNvbW1pdChzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TRVJWRVIoZGF0YS0+YXJncy5pbm9kZSk7CisKKwlpZiAobmZzcy0+cG5mc19jdXJyX2xkLT5jbGVhbnVwX2xheW91dGNvbW1pdCkKKwkJbmZzcy0+cG5mc19jdXJyX2xkLT5jbGVhbnVwX2xheW91dGNvbW1pdChkYXRhKTsKK30KKwogLyoKICAqIEZvciB0aGUgTEFZT1VUNF9ORlNWNF8xX0ZJTEVTIGxheW91dCB0eXBlLCBORlNfREFUQV9TWU5DIFdSSVRFcyBhbmQKICAqIE5GU19VTlNUQUJMRSBXUklURXMgd2l0aCBhIENPTU1JVCB0byBkYXRhIHNlcnZlcnMgbXVzdCBzdG9yZSBlbm91Z2gKQEAgLTE0MDMsOCArMTQzMiw2IEBACiB7CiAJc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2RhdGEgKmRhdGE7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZzsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CiAJbG9mZl90IGVuZF9wb3M7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTE0MjEsMzAgKzE0NDgsMjUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJmRhdGEtPmxzZWdfbGlzdCk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlNfSU5PX0xBWU9VVENPTU1JVCwgJm5mc2ktPmZsYWdzKSkgewogCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWtmcmVlKGRhdGEpOwogCQlnb3RvIG91dDsKIAl9Ci0JLyoKLQkgKiBDdXJyZW50bHkgb25seSBvbmUgKHdob2xlIGZpbGUpIHdyaXRlIGxzZWcgd2hpY2ggaXMgcmVmZXJlbmNlZAotCSAqIGluIHBuZnNfc2V0X2xheW91dGNvbW1pdCBhbmQgd2lsbCBiZSBmb3VuZC4KLQkgKi8KLQlsc2VnID0gcG5mc19saXN0X3dyaXRlX2xzZWcoaW5vZGUpOwogCi0JZW5kX3BvcyA9IGxzZWctPnBsc19lbmRfcG9zOwotCWNyZWQgPSBsc2VnLT5wbHNfbGNfY3JlZDsKLQlsc2VnLT5wbHNfZW5kX3BvcyA9IDA7Ci0JbHNlZy0+cGxzX2xjX2NyZWQgPSBOVUxMOworCXBuZnNfbGlzdF93cml0ZV9sc2VnKGlub2RlLCAmZGF0YS0+bHNlZ19saXN0KTsKKworCWVuZF9wb3MgPSBuZnNpLT5sYXlvdXQtPnBsaF9sd2I7CisJbmZzaS0+bGF5b3V0LT5wbGhfbHdiID0gMDsKIAogCW1lbWNweSgmZGF0YS0+YXJncy5zdGF0ZWlkLmRhdGEsIG5mc2ktPmxheW91dC0+cGxoX3N0YXRlaWQuZGF0YSwKIAkJc2l6ZW9mKG5mc2ktPmxheW91dC0+cGxoX3N0YXRlaWQuZGF0YSkpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAogCWRhdGEtPmFyZ3MuaW5vZGUgPSBpbm9kZTsKLQlkYXRhLT5sc2VnID0gbHNlZzsKLQlkYXRhLT5jcmVkID0gY3JlZDsKKwlkYXRhLT5jcmVkID0gZ2V0X3JwY2NyZWQobmZzaS0+bGF5b3V0LT5wbGhfbGNfY3JlZCk7CiAJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPmZhdHRyKTsKIAlkYXRhLT5hcmdzLmJpdG1hc2sgPSBORlNfU0VSVkVSKGlub2RlKS0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzazsKIAlkYXRhLT5yZXMuZmF0dHIgPSAmZGF0YS0+ZmF0dHI7CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5oIGIvZnMvbmZzL3BuZnMuaAppbmRleCAwNzg2NzBkLi4wMWNiZmQ1IDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5oCisrKyBiL2ZzL25mcy9wbmZzLmgKQEAgLTM2LDE2ICszNiwxNiBAQAogZW51bSB7CiAJTkZTX0xTRUdfVkFMSUQgPSAwLAkvKiBjbGVhcmVkIHdoZW4gbHNlZyBpcyByZWNhbGxlZC9yZXR1cm5lZCAqLwogCU5GU19MU0VHX1JPQywJCS8qIHJvYyBiaXQgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXIgKi8KKwlORlNfTFNFR19MQVlPVVRDT01NSVQsCS8qIGxheW91dGNvbW1pdCBiaXQgc2V0IGZvciBsYXlvdXRjb21taXQgKi8KIH07CiAKIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBsc19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcGxzX2xjX2xpc3Q7CiAJc3RydWN0IHBuZnNfbGF5b3V0X3JhbmdlIHBsc19yYW5nZTsKIAlhdG9taWNfdCBwbHNfcmVmY291bnQ7CiAJdW5zaWduZWQgbG9uZyBwbHNfZmxhZ3M7CiAJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqcGxzX2xheW91dDsKLQlzdHJ1Y3QgcnBjX2NyZWQJKnBsc19sY19jcmVkOyAvKiBMQVlPVVRDT01NSVQgY3JlZGVudGlhbCAqLwotCWxvZmZfdCBwbHNfZW5kX3BvczsgLyogTEFZT1VUQ09NTUlUIHdyaXRlIGVuZCAqLwogfTsKIAogZW51bSBwbmZzX3RyeV9zdGF0dXMgewpAQCAtODAsNiArODAsOSBAQAogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXVuc2lnbmVkIGZsYWdzOwogCisJaW50ICgqc2V0X2xheW91dGRyaXZlcikgKHN0cnVjdCBuZnNfc2VydmVyICosIGNvbnN0IHN0cnVjdCBuZnNfZmggKik7CisJaW50ICgqY2xlYXJfbGF5b3V0ZHJpdmVyKSAoc3RydWN0IG5mc19zZXJ2ZXIgKik7CisKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICogKCphbGxvY19sYXlvdXRfaGRyKSAoc3RydWN0IGlub2RlICppbm9kZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIAl2b2lkICgqZnJlZV9sYXlvdXRfaGRyKSAoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqKTsKIApAQCAtMTEwLDYgKzExMyw4IEBACiAJCQkJICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfbGF5b3V0cmV0dXJuX2FyZ3MgKmFyZ3MpOwogCisJdm9pZCAoKmNsZWFudXBfbGF5b3V0Y29tbWl0KSAoc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2RhdGEgKmRhdGEpOworCiAJdm9pZCAoKmVuY29kZV9sYXlvdXRjb21taXQpIChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwKIAkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfYXJncyAqYXJncyk7CkBAIC0xMjUsNiArMTMwLDggQEAKIAl1bnNpZ25lZCBsb25nCQlwbGhfYmxvY2tfbGdldHM7IC8qIGJsb2NrIExBWU9VVEdFVCBpZiA+MCAqLwogCXUzMgkJCXBsaF9iYXJyaWVyOyAvKiBpZ25vcmUgbG93ZXIgc2VxaWRzICovCiAJdW5zaWduZWQgbG9uZwkJcGxoX2ZsYWdzOworCWxvZmZfdAkJCXBsaF9sd2I7IC8qIGxhc3Qgd3JpdGUgYnl0ZSBmb3IgbGF5b3V0Y29tbWl0ICovCisJc3RydWN0IHJwY19jcmVkCQkqcGxoX2xjX2NyZWQ7IC8qIGxheW91dGNvbW1pdCBjcmVkICovCiAJc3RydWN0IGlub2RlCQkqcGxoX2lub2RlOwogfTsKIApAQCAtMTM3LDEwICsxNDQsMjEgQEAKIAl1bnNpZ25lZCBpbnQgIHBnbGVuOwogfTsKIAorI2RlZmluZSBORlM0X1BORlNfR0VUREVWTElTVF9NQVhOVU0gMTYKKworc3RydWN0IHBuZnNfZGV2aWNlbGlzdCB7CisJdW5zaWduZWQgaW50CQllb2Y7CisJdW5zaWduZWQgaW50CQludW1fZGV2czsKKwlzdHJ1Y3QgbmZzNF9kZXZpY2VpZAlkZXZfaWRbTkZTNF9QTkZTX0dFVERFVkxJU1RfTUFYTlVNXTsKK307CisKIGV4dGVybiBpbnQgcG5mc19yZWdpc3Rlcl9sYXlvdXRkcml2ZXIoc3RydWN0IHBuZnNfbGF5b3V0ZHJpdmVyX3R5cGUgKik7CiBleHRlcm4gdm9pZCBwbmZzX3VucmVnaXN0ZXJfbGF5b3V0ZHJpdmVyKHN0cnVjdCBwbmZzX2xheW91dGRyaXZlcl90eXBlICopOwogCiAvKiBuZnM0cHJvYy5jICovCitleHRlcm4gaW50IG5mczRfcHJvY19nZXRkZXZpY2VsaXN0KHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCisJCQkJICAgY29uc3Qgc3RydWN0IG5mc19maCAqZmgsCisJCQkJICAgc3RydWN0IHBuZnNfZGV2aWNlbGlzdCAqZGV2bGlzdCk7CiBleHRlcm4gaW50IG5mczRfcHJvY19nZXRkZXZpY2VpbmZvKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCiAJCQkJICAgc3RydWN0IHBuZnNfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBuZnM0X3Byb2NfbGF5b3V0Z2V0KHN0cnVjdCBuZnM0X2xheW91dGdldCAqbGdwKTsKQEAgLTE1Myw3ICsxNzEsNyBAQAogYm9vbCBwbmZzX3BhZ2Vpb19pbml0X3JlYWQoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBib29sIHBuZnNfcGFnZWlvX2luaXRfd3JpdGUoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIAotdm9pZCBzZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKiwgdTMyIGlkKTsKK3ZvaWQgc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICosIGNvbnN0IHN0cnVjdCBuZnNfZmggKiwgdTMyKTsKIHZvaWQgdW5zZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKik7CiB2b2lkIHBuZnNfZ2VuZXJpY19wZ19pbml0X3JlYWQoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqLCBzdHJ1Y3QgbmZzX3BhZ2UgKik7CiBpbnQgcG5mc19nZW5lcmljX3BnX3JlYWRwYWdlcyhzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjKTsKQEAgLTE3OSw2ICsxOTcsNyBAQAogdm9pZCBwbmZzX3JvY19zZXRfYmFycmllcihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyIGJhcnJpZXIpOwogYm9vbCBwbmZzX3JvY19kcmFpbihzdHJ1Y3QgaW5vZGUgKmlubywgdTMyICpiYXJyaWVyKTsKIHZvaWQgcG5mc19zZXRfbGF5b3V0Y29tbWl0KHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEpOwordm9pZCBwbmZzX2NsZWFudXBfbGF5b3V0Y29tbWl0KHN0cnVjdCBuZnM0X2xheW91dGNvbW1pdF9kYXRhICpkYXRhKTsKIGludCBwbmZzX2xheW91dGNvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHN5bmMpOwogaW50IF9wbmZzX3JldHVybl9sYXlvdXQoc3RydWN0IGlub2RlICopOwogaW50IHBuZnNfbGRfd3JpdGVfZG9uZShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKik7CkBAIC0zNjAsNyArMzc5LDggQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnMsIHUzMiBpZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG5mc19sYXlvdXRkcml2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnMsCisJCQkJCSBjb25zdCBzdHJ1Y3QgbmZzX2ZoICptbnRmaCwgdTMyIGlkKQogewogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGI5NjFjZWEuLjliN2RkNzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC0yMDM1LDkgKzIwMzUsNiBAQAogCQlzYi0+c19ibG9ja3NpemUgPSBuZnNfYmxvY2tfYml0cyhzZXJ2ZXItPndzaXplLAogCQkJCQkJICZzYi0+c19ibG9ja3NpemVfYml0cyk7CiAKLQlpZiAoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT0FDKQotCQlzYi0+c19mbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKLQogCXNiLT5zX2JkaSA9ICZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm87CiAKIAluZnNfc3VwZXJfc2V0X21heGJ5dGVzKHNiLCBzZXJ2ZXItPm1heGZpbGVzaXplKTsKQEAgLTIyNDksNiArMjI0NiwxMCBAQAogCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX1VOU0hBUkVEKQogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAorCS8qIC1vIG5vYWMgaW1wbGllcyAtbyBzeW5jICovCisJaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykKKwkJc2JfbW50ZGF0YS5tbnRmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCiAJcyA9IHNnZXQoZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKQEAgLTIzNjEsNiArMjM2MiwxMCBAQAogCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX1VOU0hBUkVEKQogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAorCS8qIC1vIG5vYWMgaW1wbGllcyAtbyBzeW5jICovCisJaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykKKwkJc2JfbW50ZGF0YS5tbnRmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCiAJcyA9IHNnZXQoJm5mc19mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewpAQCAtMjYyOCw2ICsyNjMzLDEwIEBACiAJaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlM0X01PVU5UX1VOU0hBUkVEKQogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAorCS8qIC1vIG5vYWMgaW1wbGllcyAtbyBzeW5jICovCisJaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9BQykKKwkJc2JfbW50ZGF0YS5tbnRmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCiAJcyA9IHNnZXQoJm5mczRfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKQEAgLTI5MTYsNiArMjkyNSwxMCBAQAogCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTNF9NT1VOVF9VTlNIQVJFRCkKIAkJY29tcGFyZV9zdXBlciA9IE5VTEw7CiAKKwkvKiAtbyBub2FjIGltcGxpZXMgLW8gc3luYyAqLworCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX05PQUMpCisJCXNiX21udGRhdGEubW50ZmxhZ3MgfD0gTVNfU1lOQ0hST05PVVM7CisKIAkvKiBHZXQgYSBzdXBlcmJsb2NrIC0gbm90ZSB0aGF0IHdlIG1heSBlbmQgdXAgc2hhcmluZyBvbmUgdGhhdCBhbHJlYWR5IGV4aXN0cyAqLwogCXMgPSBzZ2V0KCZuZnM0X2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKIAlpZiAoSVNfRVJSKHMpKSB7CkBAIC0zMDAzLDYgKzMwMTYsMTAgQEAKIAlpZiAoc2VydmVyLT5mbGFncyAmIE5GUzRfTU9VTlRfVU5TSEFSRUQpCiAJCWNvbXBhcmVfc3VwZXIgPSBOVUxMOwogCisJLyogLW8gbm9hYyBpbXBsaWVzIC1vIHN5bmMgKi8KKwlpZiAoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT0FDKQorCQlzYl9tbnRkYXRhLm1udGZsYWdzIHw9IE1TX1NZTkNIUk9OT1VTOworCiAJLyogR2V0IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQgYWxyZWFkeSBleGlzdHMgKi8KIAlzID0gc2dldCgmbmZzNF9mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBiMzliMzdmLi5jOWJkMmE2IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtOTU4LDcgKzk1OCw3IEBACiAJCWlmICghZGF0YSkKIAkJCWdvdG8gb3V0X2JhZDsKIAkJZGF0YS0+cGFnZXZlY1swXSA9IHBhZ2U7Ci0JCW5mc193cml0ZV9ycGNzZXR1cChyZXEsIGRhdGEsIHdzaXplLCBvZmZzZXQsIGRlc2MtPnBnX2lvZmxhZ3MpOworCQluZnNfd3JpdGVfcnBjc2V0dXAocmVxLCBkYXRhLCBsZW4sIG9mZnNldCwgZGVzYy0+cGdfaW9mbGFncyk7CiAJCWxpc3RfYWRkKCZkYXRhLT5saXN0LCByZXMpOwogCQlyZXF1ZXN0cysrOwogCQluYnl0ZXMgLT0gbGVuOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCA3ODNjNThkLi5hNzIxOTA3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hY2wuYworKysgYi9mcy9vY2ZzMi9hY2wuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CiAJCW5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTOwogCQlpZiAoYWNsKSB7Ci0JCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCQl1bW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCQkJcmV0ID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKIAlpbnQgcmV0ID0gMCwgcmV0MjsKLQltb2RlX3QgbW9kZTsKKwl1bW9kZV90IG1vZGU7CiAKIAlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKZGlmZiAtLWdpdCBhL2ZzL3Bvc2l4X2FjbC5jIGIvZnMvcG9zaXhfYWNsLmMKaW5kZXggZDQzNzI5YTcuLjEwMDI3YjQgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC0xNDksMTAgKzE0OSwxMCBAQAogICogZmlsZSBtb2RlIHBlcm1pc3Npb24gYml0cywgb3IgZWxzZSAxLiBSZXR1cm5zIC1FLi4uIG9uIGVycm9yLgogICovCiBpbnQKLXBvc2l4X2FjbF9lcXVpdl9tb2RlKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgbW9kZV90ICptb2RlX3ApCitwb3NpeF9hY2xfZXF1aXZfbW9kZShjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHVtb2RlX3QgKm1vZGVfcCkKIHsKIAljb25zdCBzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5ICpwYSwgKnBlOwotCW1vZGVfdCBtb2RlID0gMDsKKwl1bW9kZV90IG1vZGUgPSAwOwogCWludCBub3RfZXF1aXYgPSAwOwogCiAJRk9SRUFDSF9BQ0xfRU5UUlkocGEsIGFjbCwgcGUpIHsKQEAgLTE4OCw3ICsxODgsNyBAQAogICogQ3JlYXRlIGFuIEFDTCByZXByZXNlbnRpbmcgdGhlIGZpbGUgbW9kZSBwZXJtaXNzaW9uIGJpdHMgb2YgYW4gaW5vZGUuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgotcG9zaXhfYWNsX2Zyb21fbW9kZShtb2RlX3QgbW9kZSwgZ2ZwX3QgZmxhZ3MpCitwb3NpeF9hY2xfZnJvbV9tb2RlKHVtb2RlX3QgbW9kZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gcG9zaXhfYWNsX2FsbG9jKDMsIGZsYWdzKTsKIAlpZiAoIWFjbCkKQEAgLTI3OSwxMSArMjc5LDExIEBACiAgKiBzeXN0ZW0gY2FsbHMuIEFsbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBub3QgZ3JhbnRlZCBieSB0aGUgYWNsIGFyZSByZW1vdmVkLgogICogVGhlIHBlcm1pc3Npb25zIGluIHRoZSBhY2wgYXJlIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgbW9kZV9wIHBhcmFtZXRlci4KICAqLwotc3RhdGljIGludCBwb3NpeF9hY2xfY3JlYXRlX21hc3Eoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBtb2RlX3QgKm1vZGVfcCkKK3N0YXRpYyBpbnQgcG9zaXhfYWNsX2NyZWF0ZV9tYXNxKHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgdW1vZGVfdCAqbW9kZV9wKQogewogCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgKnBhLCAqcGU7CiAJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqZ3JvdXBfb2JqID0gTlVMTCwgKm1hc2tfb2JqID0gTlVMTDsKLQltb2RlX3QgbW9kZSA9ICptb2RlX3A7CisJdW1vZGVfdCBtb2RlID0gKm1vZGVfcDsKIAlpbnQgbm90X2VxdWl2ID0gMDsKIAogCS8qIGFzc2VydChhdG9taWNfcmVhZChhY2wtPmFfcmVmY291bnQpID09IDEpOyAqLwpAQCAtMzM2LDcgKzMzNiw3IEBACiAvKgogICogTW9kaWZ5IHRoZSBBQ0wgZm9yIHRoZSBjaG1vZCBzeXNjYWxsLgogICovCi1zdGF0aWMgaW50IHBvc2l4X2FjbF9jaG1vZF9tYXNxKHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgbW9kZV90IG1vZGUpCitzdGF0aWMgaW50IHBvc2l4X2FjbF9jaG1vZF9tYXNxKHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgdW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgKmdyb3VwX29iaiA9IE5VTEwsICptYXNrX29iaiA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbF9lbnRyeSAqcGEsICpwZTsKQEAgLTM4Miw3ICszODIsNyBAQAogfQogCiBpbnQKLXBvc2l4X2FjbF9jcmVhdGUoc3RydWN0IHBvc2l4X2FjbCAqKmFjbCwgZ2ZwX3QgZ2ZwLCBtb2RlX3QgKm1vZGVfcCkKK3Bvc2l4X2FjbF9jcmVhdGUoc3RydWN0IHBvc2l4X2FjbCAqKmFjbCwgZ2ZwX3QgZ2ZwLCB1bW9kZV90ICptb2RlX3ApCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoKmFjbCwgZ2ZwKTsKIAlpbnQgZXJyID0gLUVOT01FTTsKQEAgLTQwMCw3ICs0MDAsNyBAQAogRVhQT1JUX1NZTUJPTChwb3NpeF9hY2xfY3JlYXRlKTsKIAogaW50Ci1wb3NpeF9hY2xfY2htb2Qoc3RydWN0IHBvc2l4X2FjbCAqKmFjbCwgZ2ZwX3QgZ2ZwLCBtb2RlX3QgbW9kZSkKK3Bvc2l4X2FjbF9jaG1vZChzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsLCBnZnBfdCBnZnAsIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZSA9IHBvc2l4X2FjbF9jbG9uZSgqYWNsLCBnZnApOwogCWludCBlcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCAwOGUzZWNjLi41ZWIwMjA2IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTExOCw3ICsxMTE4LDcgQEAKIAkgKiBXYXJuIHRoYXQgL3Byb2MvcGlkL29vbV9hZGogaXMgZGVwcmVjYXRlZCwgc2VlCiAJICogRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0LgogCSAqLwotCVdBUk5fT05DRSgxLCAiJXMgKCVkKTogL3Byb2MvJWQvb29tX2FkaiBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIC9wcm9jLyVkL29vbV9zY29yZV9hZGogaW5zdGVhZC5cbiIsCisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICIlcyAoJWQpOiAvcHJvYy8lZC9vb21fYWRqIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgL3Byb2MvJWQvb29tX3Njb3JlX2FkaiBpbnN0ZWFkLlxuIiwKIAkJICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgdGFza19waWRfbnIodGFzayksCiAJCSAgdGFza19waWRfbnIodGFzaykpOwogCXRhc2stPnNpZ25hbC0+b29tX2FkaiA9IG9vbV9hZGp1c3Q7CkBAIC0xOTE5LDYgKzE5MTksMTQgQEAKIAkJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAkJZmlsZSA9IGZjaGVja19maWxlcyhmaWxlcywgZmQpOwogCQlpZiAoZmlsZSkgeworCQkJdW5zaWduZWQgaW50IGZfZmxhZ3M7CisJCQlzdHJ1Y3QgZmR0YWJsZSAqZmR0OworCisJCQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwkJCWZfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgfk9fQ0xPRVhFQzsKKwkJCWlmIChGRF9JU1NFVChmZCwgZmR0LT5jbG9zZV9vbl9leGVjKSkKKwkJCQlmX2ZsYWdzIHw9IE9fQ0xPRVhFQzsKKwogCQkJaWYgKHBhdGgpIHsKIAkJCQkqcGF0aCA9IGZpbGUtPmZfcGF0aDsKIAkJCQlwYXRoX2dldCgmZmlsZS0+Zl9wYXRoKTsKQEAgLTE5MjgsNyArMTkzNiw3IEBACiAJCQkJCSAicG9zOlx0JWxsaVxuIgogCQkJCQkgImZsYWdzOlx0MCVvXG4iLAogCQkJCQkgKGxvbmcgbG9uZykgZmlsZS0+Zl9wb3MsCi0JCQkJCSBmaWxlLT5mX2ZsYWdzKTsKKwkJCQkJIGZfZmxhZ3MpOwogCQkJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwogCQkJcHV0X2ZpbGVzX3N0cnVjdChmaWxlcyk7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9pbm9kZS5jIGIvZnMvcHN0b3JlL2lub2RlLmMKaW5kZXggOTc3ZWQyNy4uODkzYjk2MSAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL2lub2RlLmMKKysrIGIvZnMvcHN0b3JlL2lub2RlLmMKQEAgLTM5LDggKzM5LDkgQEAKICNkZWZpbmUJUFNUT1JFX05BTUVMRU4JNjQKIAogc3RydWN0IHBzdG9yZV9wcml2YXRlIHsKKwlzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaTsKKwllbnVtIHBzdG9yZV90eXBlX2lkIHR5cGU7CiAJdTY0CWlkOwotCWludAkoKmVyYXNlKSh1NjQpOwogCXNzaXplX3QJc2l6ZTsKIAljaGFyCWRhdGFbXTsKIH07CkBAIC03Myw3ICs3NCw3IEBACiB7CiAJc3RydWN0IHBzdG9yZV9wcml2YXRlICpwID0gZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAKLQlwLT5lcmFzZShwLT5pZCk7CisJcC0+cHNpLT5lcmFzZShwLT50eXBlLCBwLT5pZCwgcC0+cHNpKTsKIAogCXJldHVybiBzaW1wbGVfdW5saW5rKGRpciwgZGVudHJ5KTsKIH0KQEAgLTE3NSw4ICsxNzYsOCBAQAogICogU2V0IHRoZSBtdGltZSAmIGN0aW1lIHRvIHRoZSBkYXRlIHRoYXQgdGhpcyByZWNvcmQgd2FzIG9yaWdpbmFsbHkgc3RvcmVkLgogICovCiBpbnQgcHN0b3JlX21rZmlsZShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIGNoYXIgKnBzbmFtZSwgdTY0IGlkLAotCQkJICAgICAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsCi0JCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgdGltZSwgaW50ICgqZXJhc2UpKHU2NCkpCisJCSAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUsIHN0cnVjdCB0aW1lc3BlYyB0aW1lLAorCQkgIHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQogewogCXN0cnVjdCBkZW50cnkJCSpyb290ID0gcHN0b3JlX3NiLT5zX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeQkJKmRlbnRyeTsKQEAgLTE5Miw4ICsxOTMsOSBAQAogCXByaXZhdGUgPSBrbWFsbG9jKHNpemVvZiAqcHJpdmF0ZSArIHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdmF0ZSkKIAkJZ290byBmYWlsX2FsbG9jOworCXByaXZhdGUtPnR5cGUgPSB0eXBlOwogCXByaXZhdGUtPmlkID0gaWQ7Ci0JcHJpdmF0ZS0+ZXJhc2UgPSBlcmFzZTsKKwlwcml2YXRlLT5wc2kgPSBwc2k7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFBTVE9SRV9UWVBFX0RNRVNHOgpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL2ludGVybmFsLmggYi9mcy9wc3RvcmUvaW50ZXJuYWwuaAppbmRleCA4YzlmMjNlLi42MTFjMWIzIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvaW50ZXJuYWwuaAorKysgYi9mcy9wc3RvcmUvaW50ZXJuYWwuaApAQCAtMiw1ICsyLDUgQEAKIGV4dGVybiB2b2lkCXBzdG9yZV9nZXRfcmVjb3Jkcyh2b2lkKTsKIGV4dGVybiBpbnQJcHN0b3JlX21rZmlsZShlbnVtIHBzdG9yZV90eXBlX2lkLCBjaGFyICpwc25hbWUsIHU2NCBpZCwKIAkJCSAgICAgIGNoYXIgKmRhdGEsIHNpemVfdCBzaXplLAotCQkJICAgICAgc3RydWN0IHRpbWVzcGVjIHRpbWUsIGludCAoKmVyYXNlKSh1NjQpKTsKKwkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CiBleHRlcm4gaW50CXBzdG9yZV9pc19tb3VudGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3BsYXRmb3JtLmMgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwppbmRleCBmMmMzZmYyLi5jNTMwMGVjIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMzcsNiArMzcsOCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwc3RvcmVfbG9jayk7CiBzdGF0aWMgc3RydWN0IHBzdG9yZV9pbmZvICpwc2luZm87CiAKK3N0YXRpYyBjaGFyICpiYWNrZW5kOworCiAvKiBIb3cgbXVjaCBvZiB0aGUgY29uc29sZSBsb2cgdG8gc25hcHNob3QgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGttc2dfYnl0ZXMgPSAxMDI0MDsKIApAQCAtNjcsNyArNjksOCBAQAogCXVuc2lnbmVkIGxvbmcJc2l6ZSwgdG90YWwgPSAwOwogCWNoYXIJCSpkc3QsICp3aHk7CiAJdTY0CQlpZDsKLQlpbnQJCWhzaXplLCBwYXJ0ID0gMTsKKwlpbnQJCWhzaXplOworCXVuc2lnbmVkIGludAlwYXJ0ID0gMTsKIAogCWlmIChyZWFzb24gPCBBUlJBWV9TSVpFKHJlYXNvbl9zdHIpKQogCQl3aHkgPSByZWFzb25fc3RyW3JlYXNvbl07CkBAIC03OCw3ICs4MSw3IEBACiAJb29wc2NvdW50Kys7CiAJd2hpbGUgKHRvdGFsIDwga21zZ19ieXRlcykgewogCQlkc3QgPSBwc2luZm8tPmJ1ZjsKLQkJaHNpemUgPSBzcHJpbnRmKGRzdCwgIiVzIyVkIFBhcnQlZFxuIiwgd2h5LCBvb3BzY291bnQsIHBhcnQrKyk7CisJCWhzaXplID0gc3ByaW50Zihkc3QsICIlcyMlZCBQYXJ0JWRcbiIsIHdoeSwgb29wc2NvdW50LCBwYXJ0KTsKIAkJc2l6ZSA9IHBzaW5mby0+YnVmc2l6ZSAtIGhzaXplOwogCQlkc3QgKz0gaHNpemU7CiAKQEAgLTk0LDE0ICs5NywxNiBAQAogCQltZW1jcHkoZHN0LCBzMSArIHMxX3N0YXJ0LCBsMV9jcHkpOwogCQltZW1jcHkoZHN0ICsgbDFfY3B5LCBzMiArIHMyX3N0YXJ0LCBsMl9jcHkpOwogCi0JCWlkID0gcHNpbmZvLT53cml0ZShQU1RPUkVfVFlQRV9ETUVTRywgaHNpemUgKyBsMV9jcHkgKyBsMl9jcHkpOworCQlpZCA9IHBzaW5mby0+d3JpdGUoUFNUT1JFX1RZUEVfRE1FU0csIHBhcnQsCisJCQkJICAgaHNpemUgKyBsMV9jcHkgKyBsMl9jcHksIHBzaW5mbyk7CiAJCWlmIChyZWFzb24gPT0gS01TR19EVU1QX09PUFMgJiYgcHN0b3JlX2lzX21vdW50ZWQoKSkKIAkJCXBzdG9yZV9ta2ZpbGUoUFNUT1JFX1RZUEVfRE1FU0csIHBzaW5mby0+bmFtZSwgaWQsCiAJCQkJICAgICAgcHNpbmZvLT5idWYsIGhzaXplICsgbDFfY3B5ICsgbDJfY3B5LAotCQkJCSAgICAgIENVUlJFTlRfVElNRSwgcHNpbmZvLT5lcmFzZSk7CisJCQkJICAgICAgQ1VSUkVOVF9USU1FLCBwc2luZm8pOwogCQlsMSAtPSBsMV9jcHk7CiAJCWwyIC09IGwyX2NweTsKIAkJdG90YWwgKz0gbDFfY3B5ICsgbDJfY3B5OworCQlwYXJ0Kys7CiAJfQogCW11dGV4X3VubG9jaygmcHNpbmZvLT5idWZfbXV0ZXgpOwogfQpAQCAtMTI4LDYgKzEzMywxMiBAQAogCQlzcGluX3VubG9jaygmcHN0b3JlX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KKworCWlmIChiYWNrZW5kICYmIHN0cmNtcChiYWNrZW5kLCBwc2ktPm5hbWUpKSB7CisJCXNwaW5fdW5sb2NrKCZwc3RvcmVfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXBzaW5mbyA9IHBzaTsKIAlzcGluX3VubG9jaygmcHN0b3JlX2xvY2spOwogCkBAIC0xNjYsOSArMTc3LDkgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0Jd2hpbGUgKChzaXplID0gcHNpLT5yZWFkKCZpZCwgJnR5cGUsICZ0aW1lKSkgPiAwKSB7CisJd2hpbGUgKChzaXplID0gcHNpLT5yZWFkKCZpZCwgJnR5cGUsICZ0aW1lLCBwc2kpKSA+IDApIHsKIAkJaWYgKHBzdG9yZV9ta2ZpbGUodHlwZSwgcHNpLT5uYW1lLCBpZCwgcHNpLT5idWYsIChzaXplX3Qpc2l6ZSwKLQkJCQkgIHRpbWUsIHBzaS0+ZXJhc2UpKQorCQkJCSAgdGltZSwgcHNpKSkKIAkJCWZhaWxlZCsrOwogCX0KIAlwc2ktPmNsb3NlKHBzaSk7CkBAIC0xOTYsMTIgKzIwNywxNSBAQAogCiAJbXV0ZXhfbG9jaygmcHNpbmZvLT5idWZfbXV0ZXgpOwogCW1lbWNweShwc2luZm8tPmJ1ZiwgYnVmLCBzaXplKTsKLQlpZCA9IHBzaW5mby0+d3JpdGUodHlwZSwgc2l6ZSk7CisJaWQgPSBwc2luZm8tPndyaXRlKHR5cGUsIDAsIHNpemUsIHBzaW5mbyk7CiAJaWYgKHBzdG9yZV9pc19tb3VudGVkKCkpCiAJCXBzdG9yZV9ta2ZpbGUoUFNUT1JFX1RZUEVfRE1FU0csIHBzaW5mby0+bmFtZSwgaWQsIHBzaW5mby0+YnVmLAotCQkJICAgICAgc2l6ZSwgQ1VSUkVOVF9USU1FLCBwc2luZm8tPmVyYXNlKTsKKwkJCSAgICAgIHNpemUsIENVUlJFTlRfVElNRSwgcHNpbmZvKTsKIAltdXRleF91bmxvY2soJnBzaW5mby0+YnVmX211dGV4KTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocHN0b3JlX3dyaXRlKTsKKworbW9kdWxlX3BhcmFtKGJhY2tlbmQsIGNoYXJwLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYmFja2VuZCwgIlBzdG9yZSBiYWNrZW5kIHRvIHVzZSIpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwppbmRleCA3MzYyY2Y0Li42ZGEwMzk2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwpAQCAtMjcyLDEyICsyNzIsMTAgQEAKIAljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKIAkJbmFtZSA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1M7CiAJCWlmIChhY2wpIHsKLQkJCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKLQkJCWVycm9yID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CisJCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJmlub2RlLT5pX21vZGUpOwogCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQllbHNlIHsKLQkJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJCQlpZiAoZXJyb3IgPT0gMCkKIAkJCQkJYWNsID0gTlVMTDsKIAkJCX0KQEAgLTM1NCw4ICszNTIsNiBAQAogCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCiAJaWYgKGFjbCkgewotCQltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0KIAkJLyogQ29weSB0aGUgZGVmYXVsdCBBQ0wgdG8gdGhlIGRlZmF1bHQgQUNMIG9mIGEgbmV3IGRpcmVjdG9yeSAqLwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsCkBAIC0zNjYsMTIgKzM2MiwxMCBAQAogCiAJCS8qIE5vdyB3ZSByZWNvbmNpbGUgdGhlIG5ldyBBQ0wgYW5kIHRoZSBtb2RlLAogCQkgICBwb3RlbnRpYWxseSBtb2RpZnlpbmcgYm90aCAqLwotCQllcnIgPSBwb3NpeF9hY2xfY3JlYXRlKCZhY2wsIEdGUF9OT0ZTLCAmbW9kZSk7CisJCWVyciA9IHBvc2l4X2FjbF9jcmVhdGUoJmFjbCwgR0ZQX05PRlMsICZpbm9kZS0+aV9tb2RlKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCi0JCWlub2RlLT5pX21vZGUgPSBtb2RlOwotCiAJCS8qIElmIHdlIG5lZWQgYW4gQUNMLi4gKi8KIAkJaWYgKGVyciA+IDApCiAJCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKHRoLCBpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wpOwpkaWZmIC0tZ2l0IGEvZnMvc3RhY2suYyBiL2ZzL3N0YWNrLmMKaW5kZXggNGE2ZjdmNC4uYjRmMmFiNDggMTAwNjQ0Ci0tLSBhL2ZzL3N0YWNrLmMKKysrIGIvZnMvc3RhY2suYwpAQCAtMjksMTAgKzI5LDcgQEAKIAkgKgogCSAqIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hhdCBsb2NraW5nIGlzIHVzZWQgYXQgdGhlIGxvd2VyIGxldmVsOwogCSAqIGJ1dCBpZiBpdCdzIGEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHF1b3RhcywgaXQgd2lsbCBiZSB1c2luZwotCSAqIGlfbG9jayBhcyBpbiBpbm9kZV9hZGRfYnl0ZXMoKS4gIHRtcGZzIHVzZXMgb3RoZXIgbG9ja2luZywgYW5kCi0JICogaXRzIDMyLWJpdCBpcyAoanVzdCkgYWJsZSB0byBleGNlZWQgMlRCIGlfc2l6ZSB3aXRoIHRoZSBhaWQgb2YKLQkgKiBob2xlczsgYnV0IGl0cyBpX2Jsb2NrcyBjYW5ub3QgY2FycnkgaW50byB0aGUgdXBwZXIgbG9uZyB3aXRob3V0Ci0JICogYWxtb3N0IDJUQiBzd2FwIC0gbGV0J3MgaWdub3JlIHRoYXQgY2FzZS4KKwkgKiBpX2xvY2sgYXMgaW4gaW5vZGVfYWRkX2J5dGVzKCkuCiAJICovCiAJaWYgKHNpemVvZihpX2Jsb2NrcykgPiBzaXplb2YobG9uZykpCiAJCXNwaW5fbG9jaygmc3JjLT5pX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jCmluZGV4IDk2MTAzOTEuLmJhNTMxNmYgMTAwNjQ0Ci0tLSBhL2ZzL3N0YXQuYworKysgYi9mcy9zdGF0LmMKQEAgLTI3LDEyICsyNywxMiBAQAogCXN0YXQtPnVpZCA9IGlub2RlLT5pX3VpZDsKIAlzdGF0LT5naWQgPSBpbm9kZS0+aV9naWQ7CiAJc3RhdC0+cmRldiA9IGlub2RlLT5pX3JkZXY7CisJc3RhdC0+c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlzdGF0LT5hdGltZSA9IGlub2RlLT5pX2F0aW1lOwogCXN0YXQtPm10aW1lID0gaW5vZGUtPmlfbXRpbWU7CiAJc3RhdC0+Y3RpbWUgPSBpbm9kZS0+aV9jdGltZTsKLQlzdGF0LT5zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCXN0YXQtPmJsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKIAlzdGF0LT5ibGtzaXplID0gKDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJc3RhdC0+YmxvY2tzID0gaW5vZGUtPmlfYmxvY2tzOwogfQogCiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbGF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZGVidWcuaCBiL2ZzL3ViaWZzL2RlYnVnLmgKaW5kZXggNDUxNzRiNS4uZmViMzYxZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGVidWcuaAorKysgYi9mcy91Ymlmcy9kZWJ1Zy5oCkBAIC0zMzUsOSArMzM1LDkgQEAKICNkZWZpbmUgREJHS0VZKGtleSkgICgoY2hhciAqKShrZXkpKQogI2RlZmluZSBEQkdLRVkxKGtleSkgKChjaGFyICopKGtleSkpCiAKLSNkZWZpbmUgdWJpZnNfZGJnX21zZyhmbXQsIC4uLikgZG8geyAgICAgICAgICAgICAgIFwKLQlpZiAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlwcl9kZWJ1ZyhmbXQgIlxuIiwgIyNfX1ZBX0FSR1NfXyk7IFwKKyNkZWZpbmUgdWJpZnNfZGJnX21zZyhmbXQsIC4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlwcmludGsoS0VSTl9ERUJVRyBmbXQgIlxuIiwgIyNfX1ZBX0FSR1NfXyk7IFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgZGJnX2R1bXBfc3RhY2soKQpkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlCmluZGV4IDc1YmIzMTYuLjQyN2E0ZTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQorKysgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE2LDQ0ICsxNiw1MyBAQAogIyBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICMKIAotY2NmbGFncy15IDo9IC1JJChzcmMpIC1JJChzcmMpL2xpbnV4LTIuNgotY2NmbGFncy0kKENPTkZJR19YRlNfREVCVUcpICs9IC1nCitjY2ZsYWdzLXkgKz0gLUkkKHNyYykJCQkjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzCiAKLVhGU19MSU5VWCA6PSBsaW51eC0yLjYKK2NjZmxhZ3MtJChDT05GSUdfWEZTX0RFQlVHKSArPSAtZwogCiBvYmotJChDT05GSUdfWEZTX0ZTKQkJKz0geGZzLm8KIAoteGZzLXkJCQkJKz0gbGludXgtMi42L3hmc190cmFjZS5vCisjIHRoaXMgb25lIHNob3VsZCBiZSBjb21waWxlZCBmaXJzdCwgYXMgdGhlIHRyYWNpbmcgbWFjcm9zIGNhbiBlYXNpbHkgYmxvdyB1cAoreGZzLXkJCQkJKz0geGZzX3RyYWNlLm8KIAoteGZzLSQoQ09ORklHX1hGU19RVU9UQSkJCSs9ICQoYWRkcHJlZml4IHF1b3RhLywgXAotCQkJCSAgIHhmc19kcXVvdC5vIFwKLQkJCQkgICB4ZnNfZHF1b3RfaXRlbS5vIFwKLQkJCQkgICB4ZnNfdHJhbnNfZHF1b3QubyBcCi0JCQkJICAgeGZzX3FtX3N5c2NhbGxzLm8gXAotCQkJCSAgIHhmc19xbV9iaHYubyBcCi0JCQkJICAgeGZzX3FtLm8pCi14ZnMtJChDT05GSUdfWEZTX1FVT1RBKQkJKz0gbGludXgtMi42L3hmc19xdW90YW9wcy5vCisjIGhpZ2hsZXZlbCBjb2RlCit4ZnMteQkJCQkrPSB4ZnNfYW9wcy5vIFwKKwkJCQkgICB4ZnNfYml0Lm8gXAorCQkJCSAgIHhmc19idWYubyBcCisJCQkJICAgeGZzX2RmcmFnLm8gXAorCQkJCSAgIHhmc19kaXNjYXJkLm8gXAorCQkJCSAgIHhmc19lcnJvci5vIFwKKwkJCQkgICB4ZnNfZXhwb3J0Lm8gXAorCQkJCSAgIHhmc19maWxlLm8gXAorCQkJCSAgIHhmc19maWxlc3RyZWFtLm8gXAorCQkJCSAgIHhmc19mc29wcy5vIFwKKwkJCQkgICB4ZnNfZnNfc3Vici5vIFwKKwkJCQkgICB4ZnNfZ2xvYmFscy5vIFwKKwkJCQkgICB4ZnNfaWdldC5vIFwKKwkJCQkgICB4ZnNfaW9jdGwubyBcCisJCQkJICAgeGZzX2lvbWFwLm8gXAorCQkJCSAgIHhmc19pb3BzLm8gXAorCQkJCSAgIHhmc19pdGFibGUubyBcCisJCQkJICAgeGZzX21lc3NhZ2UubyBcCisJCQkJICAgeGZzX21ydV9jYWNoZS5vIFwKKwkJCQkgICB4ZnNfc3VwZXIubyBcCisJCQkJICAgeGZzX3N5bmMubyBcCisJCQkJICAgeGZzX3hhdHRyLm8gXAorCQkJCSAgIHhmc19yZW5hbWUubyBcCisJCQkJICAgeGZzX3J3Lm8gXAorCQkJCSAgIHhmc191dGlscy5vIFwKKwkJCQkgICB4ZnNfdm5vZGVvcHMubyBcCisJCQkJICAga21lbS5vIFwKKwkJCQkgICB1dWlkLm8KIAotaWZlcSAoJChDT05GSUdfWEZTX1FVT1RBKSx5KQoteGZzLSQoQ09ORklHX1BST0NfRlMpCQkrPSBxdW90YS94ZnNfcW1fc3RhdHMubwotZW5kaWYKLQoteGZzLSQoQ09ORklHX1hGU19SVCkJCSs9IHhmc19ydGFsbG9jLm8KLXhmcy0kKENPTkZJR19YRlNfUE9TSVhfQUNMKQkrPSAkKFhGU19MSU5VWCkveGZzX2FjbC5vCi14ZnMtJChDT05GSUdfUFJPQ19GUykJCSs9ICQoWEZTX0xJTlVYKS94ZnNfc3RhdHMubwoteGZzLSQoQ09ORklHX1NZU0NUTCkJCSs9ICQoWEZTX0xJTlVYKS94ZnNfc3lzY3RsLm8KLXhmcy0kKENPTkZJR19DT01QQVQpCQkrPSAkKFhGU19MSU5VWCkveGZzX2lvY3RsMzIubwotCi0KKyMgY29kZSBzaGFyZWQgd2l0aCBsaWJ4ZnMKIHhmcy15CQkJCSs9IHhmc19hbGxvYy5vIFwKIAkJCQkgICB4ZnNfYWxsb2NfYnRyZWUubyBcCiAJCQkJICAgeGZzX2F0dHIubyBcCiAJCQkJICAgeGZzX2F0dHJfbGVhZi5vIFwKLQkJCQkgICB4ZnNfYml0Lm8gXAogCQkJCSAgIHhmc19ibWFwLm8gXAogCQkJCSAgIHhmc19ibWFwX2J0cmVlLm8gXAogCQkJCSAgIHhmc19idHJlZS5vIFwKLQkJCQkgICB4ZnNfYnVmX2l0ZW0ubyBcCiAJCQkJICAgeGZzX2RhX2J0cmVlLm8gXAogCQkJCSAgIHhmc19kaXIyLm8gXAogCQkJCSAgIHhmc19kaXIyX2Jsb2NrLm8gXApAQCAtNjEsNDkgKzcwLDM3IEBACiAJCQkJICAgeGZzX2RpcjJfbGVhZi5vIFwKIAkJCQkgICB4ZnNfZGlyMl9ub2RlLm8gXAogCQkJCSAgIHhmc19kaXIyX3NmLm8gXAotCQkJCSAgIHhmc19lcnJvci5vIFwKLQkJCQkgICB4ZnNfZXh0ZnJlZV9pdGVtLm8gXAotCQkJCSAgIHhmc19maWxlc3RyZWFtLm8gXAotCQkJCSAgIHhmc19mc29wcy5vIFwKIAkJCQkgICB4ZnNfaWFsbG9jLm8gXAogCQkJCSAgIHhmc19pYWxsb2NfYnRyZWUubyBcCi0JCQkJICAgeGZzX2lnZXQubyBcCiAJCQkJICAgeGZzX2lub2RlLm8gXAotCQkJCSAgIHhmc19pbm9kZV9pdGVtLm8gXAotCQkJCSAgIHhmc19pb21hcC5vIFwKLQkJCQkgICB4ZnNfaXRhYmxlLm8gXAotCQkJCSAgIHhmc19kZnJhZy5vIFwKLQkJCQkgICB4ZnNfbG9nLm8gXAotCQkJCSAgIHhmc19sb2dfY2lsLm8gXAogCQkJCSAgIHhmc19sb2dfcmVjb3Zlci5vIFwKIAkJCQkgICB4ZnNfbW91bnQubyBcCi0JCQkJICAgeGZzX21ydV9jYWNoZS5vIFwKLQkJCQkgICB4ZnNfcmVuYW1lLm8gXAotCQkJCSAgIHhmc190cmFucy5vIFwKKwkJCQkgICB4ZnNfdHJhbnMubworCisjIGxvdy1sZXZlbCB0cmFuc2FjdGlvbi9sb2cgY29kZQoreGZzLXkJCQkJKz0geGZzX2xvZy5vIFwKKwkJCQkgICB4ZnNfbG9nX2NpbC5vIFwKKwkJCQkgICB4ZnNfYnVmX2l0ZW0ubyBcCisJCQkJICAgeGZzX2V4dGZyZWVfaXRlbS5vIFwKKwkJCQkgICB4ZnNfaW5vZGVfaXRlbS5vIFwKIAkJCQkgICB4ZnNfdHJhbnNfYWlsLm8gXAogCQkJCSAgIHhmc190cmFuc19idWYubyBcCiAJCQkJICAgeGZzX3RyYW5zX2V4dGZyZWUubyBcCiAJCQkJICAgeGZzX3RyYW5zX2lub2RlLm8gXAotCQkJCSAgIHhmc191dGlscy5vIFwKLQkJCQkgICB4ZnNfdm5vZGVvcHMubyBcCi0JCQkJICAgeGZzX3J3Lm8KIAotIyBPYmplY3RzIGluIGxpbnV4LwoteGZzLXkJCQkJKz0gJChhZGRwcmVmaXggJChYRlNfTElOVVgpLywgXAotCQkJCSAgIGttZW0ubyBcCi0JCQkJICAgeGZzX2FvcHMubyBcCi0JCQkJICAgeGZzX2J1Zi5vIFwKLQkJCQkgICB4ZnNfZGlzY2FyZC5vIFwKLQkJCQkgICB4ZnNfZXhwb3J0Lm8gXAotCQkJCSAgIHhmc19maWxlLm8gXAotCQkJCSAgIHhmc19mc19zdWJyLm8gXAotCQkJCSAgIHhmc19nbG9iYWxzLm8gXAotCQkJCSAgIHhmc19pb2N0bC5vIFwKLQkJCQkgICB4ZnNfaW9wcy5vIFwKLQkJCQkgICB4ZnNfbWVzc2FnZS5vIFwKLQkJCQkgICB4ZnNfc3VwZXIubyBcCi0JCQkJICAgeGZzX3N5bmMubyBcCi0JCQkJICAgeGZzX3hhdHRyLm8pCi0KLSMgT2JqZWN0cyBpbiBzdXBwb3J0LwoteGZzLXkJCQkJKz0gc3VwcG9ydC91dWlkLm8KKyMgb3B0aW9uYWwgZmVhdHVyZXMKK3hmcy0kKENPTkZJR19YRlNfUVVPVEEpCQkrPSB4ZnNfZHF1b3QubyBcCisJCQkJICAgeGZzX2RxdW90X2l0ZW0ubyBcCisJCQkJICAgeGZzX3RyYW5zX2RxdW90Lm8gXAorCQkJCSAgIHhmc19xbV9zeXNjYWxscy5vIFwKKwkJCQkgICB4ZnNfcW1fYmh2Lm8gXAorCQkJCSAgIHhmc19xbS5vIFwKKwkJCQkgICB4ZnNfcXVvdGFvcHMubworaWZlcSAoJChDT05GSUdfWEZTX1FVT1RBKSx5KQoreGZzLSQoQ09ORklHX1BST0NfRlMpCQkrPSB4ZnNfcW1fc3RhdHMubworZW5kaWYKK3hmcy0kKENPTkZJR19YRlNfUlQpCQkrPSB4ZnNfcnRhbGxvYy5vCit4ZnMtJChDT05GSUdfWEZTX1BPU0lYX0FDTCkJKz0geGZzX2FjbC5vCit4ZnMtJChDT05GSUdfUFJPQ19GUykJCSs9IHhmc19zdGF0cy5vCit4ZnMtJChDT05GSUdfU1lTQ1RMKQkJKz0geGZzX3N5c2N0bC5vCit4ZnMtJChDT05GSUdfQ09NUEFUKQkJKz0geGZzX2lvY3RsMzIubwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMgYi9mcy94ZnMva21lbS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L2ttZW0uYwpyZW5hbWUgdG8gZnMveGZzL2ttZW0uYwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmggYi9mcy94ZnMva21lbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L2ttZW0uaApyZW5hbWUgdG8gZnMveGZzL2ttZW0uaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9tcmxvY2suaCBiL2ZzL3hmcy9tcmxvY2suaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi9tcmxvY2suaApyZW5hbWUgdG8gZnMveGZzL21ybG9jay5oCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3RpbWUuaCBiL2ZzL3hmcy90aW1lLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYvdGltZS5oCnJlbmFtZSB0byBmcy94ZnMvdGltZS5oCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC91dWlkLmMgYi9mcy94ZnMvdXVpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvc3VwcG9ydC91dWlkLmMKcmVuYW1lIHRvIGZzL3hmcy91dWlkLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuaCBiL2ZzL3hmcy91dWlkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9zdXBwb3J0L3V1aWQuaApyZW5hbWUgdG8gZnMveGZzL3V1aWQuaApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmcy5oIGIvZnMveGZzL3hmcy5oCmluZGV4IDUzZWMzZWEuLmQ4YjExYjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnMuaAorKysgYi9mcy94ZnMveGZzLmgKQEAgLTI0LDUgKzI0LDYgQEAKICNkZWZpbmUgWEZTX0JVRl9MT0NLX1RSQUNLSU5HIDEKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgtMi42L3hmc19saW51eC5oPgorI2luY2x1ZGUgInhmc19saW51eC5oIgorCiAjZW5kaWYJLyogX19YRlNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hY2wuYyBiL2ZzL3hmcy94ZnNfYWNsLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfYWNsLmMKaW5kZXggNDRjZTUxNi4uYjZjNGIzNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL3hmc19hY2wuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXhmc19zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBtb2RlX3QgbW9kZSkKK3hmc19zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bW9kZV90IG1vZGUpCiB7CiAJaW50IGVycm9yID0gMDsKIApAQCAtMjY3LDcgKzI2Nyw3IEBACiBpbnQKIHhmc19pbmhlcml0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7Ci0JbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOworCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJaW50IGVycm9yID0gMCwgaW5oZXJpdCA9IDA7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAKIAlpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MpIHsKLQkJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOworCQl1bW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCQllcnJvciA9IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGFjbCwgJm1vZGUpOwogCiAJCWlmIChlcnJvciA8PSAwKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FjbC5oIGIvZnMveGZzL3hmc19hY2wuaAppbmRleCAyYzY1NmVmLi4zOTYzMmQ5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FjbC5oCisrKyBiL2ZzL3hmcy94ZnNfYWNsLmgKQEAgLTUxLDcgKzUxLDEwIEBACiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlcjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciB4ZnNfeGF0dHJfYWNsX2RlZmF1bHRfaGFuZGxlcjsKICNlbHNlCi0jIGRlZmluZSB4ZnNfZ2V0X2FjbChpbm9kZSwgdHlwZSkJCQlOVUxMCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NpeF9hY2wgKnhmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQoreworCXJldHVybiBOVUxMOworfQogIyBkZWZpbmUgeGZzX2luaGVyaXRfYWNsKGlub2RlLCBkZWZhdWx0X2FjbCkJCTAKICMgZGVmaW5lIHhmc19hY2xfY2htb2QoaW5vZGUpCQkJCTAKICMgZGVmaW5lIHBvc2l4X2FjbF9hY2Nlc3NfZXhpc3RzKGlub2RlKQkJCTAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWcuaCBiL2ZzL3hmcy94ZnNfYWcuaAppbmRleCA2NTMwNzY5Li40ODA1ZjAwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FnLmgKKysrIGIvZnMveGZzL3hmc19hZy5oCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qIGRpc2sgYmxvY2sgKHhmc19kYWRkcl90KSBpbiB0aGUgQUcgKi8KICNkZWZpbmUgWEZTX0FHRl9EQUREUihtcCkJKCh4ZnNfZGFkZHJfdCkoMSA8PCAobXApLT5tX3NlY3RiYl9sb2cpKQogI2RlZmluZQlYRlNfQUdGX0JMT0NLKG1wKQlYRlNfSERSX0JMT0NLKG1wLCBYRlNfQUdGX0RBRERSKG1wKSkKLSNkZWZpbmUJWEZTX0JVRl9UT19BR0YoYnApCSgoeGZzX2FnZl90ICopWEZTX0JVRl9QVFIoYnApKQorI2RlZmluZQlYRlNfQlVGX1RPX0FHRihicCkJKCh4ZnNfYWdmX3QgKikoKGJwKS0+Yl9hZGRyKSkKIAogZXh0ZXJuIGludCB4ZnNfcmVhZF9hZ2Yoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAogCQkJeGZzX2FnbnVtYmVyX3QgYWdubywgaW50IGZsYWdzLCBzdHJ1Y3QgeGZzX2J1ZiAqKmJwcCk7CkBAIC0xNTYsNyArMTU2LDcgQEAKIC8qIGRpc2sgYmxvY2sgKHhmc19kYWRkcl90KSBpbiB0aGUgQUcgKi8KICNkZWZpbmUgWEZTX0FHSV9EQUREUihtcCkJKCh4ZnNfZGFkZHJfdCkoMiA8PCAobXApLT5tX3NlY3RiYl9sb2cpKQogI2RlZmluZQlYRlNfQUdJX0JMT0NLKG1wKQlYRlNfSERSX0JMT0NLKG1wLCBYRlNfQUdJX0RBRERSKG1wKSkKLSNkZWZpbmUJWEZTX0JVRl9UT19BR0koYnApCSgoeGZzX2FnaV90ICopWEZTX0JVRl9QVFIoYnApKQorI2RlZmluZQlYRlNfQlVGX1RPX0FHSShicCkJKCh4ZnNfYWdpX3QgKikoKGJwKS0+Yl9hZGRyKSkKIAogZXh0ZXJuIGludCB4ZnNfcmVhZF9hZ2koc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfdHJhbnMgKnRwLAogCQkJCXhmc19hZ251bWJlcl90IGFnbm8sIHN0cnVjdCB4ZnNfYnVmICoqYnBwKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogI2RlZmluZSBYRlNfQUdGTF9EQUREUihtcCkJKCh4ZnNfZGFkZHJfdCkoMyA8PCAobXApLT5tX3NlY3RiYl9sb2cpKQogI2RlZmluZQlYRlNfQUdGTF9CTE9DSyhtcCkJWEZTX0hEUl9CTE9DSyhtcCwgWEZTX0FHRkxfREFERFIobXApKQogI2RlZmluZSBYRlNfQUdGTF9TSVpFKG1wKQkoKG1wKS0+bV9zYi5zYl9zZWN0c2l6ZSAvIHNpemVvZih4ZnNfYWdibG9ja190KSkKLSNkZWZpbmUJWEZTX0JVRl9UT19BR0ZMKGJwKQkoKHhmc19hZ2ZsX3QgKilYRlNfQlVGX1BUUihicCkpCisjZGVmaW5lCVhGU19CVUZfVE9fQUdGTChicCkJKCh4ZnNfYWdmbF90ICopKChicCktPmJfYWRkcikpCiAKIHR5cGVkZWYgc3RydWN0IHhmc19hZ2ZsIHsKIAlfX2JlMzIJCWFnZmxfYm5vWzFdOwkvKiBhY3R1YWxseSBYRlNfQUdGTF9TSVpFKG1wKSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5jIGIvZnMveGZzL3hmc19hbGxvYy5jCmluZGV4IDFlMDBiM2UuLmJkZDljYjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2FsbG9jLmMKQEAgLTQ1MSw4ICs0NTEsNyBAQAogCQkJWEZTX0ZTU19UT19CQihtcCwgMSksIDAsICZicCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JQVNTRVJUKGJwKTsKLQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKKwlBU1NFUlQoIXhmc19idWZfZ2V0ZXJyb3IoYnApKTsKIAlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoYnAsIEJfRlNfQUdGTCwgWEZTX0FHRkxfUkVGKTsKIAkqYnBwID0gYnA7CiAJcmV0dXJuIDA7CkBAIC0yMTE2LDcgKzIxMTUsNyBAQAogCWlmICghKmJwcCkKIAkJcmV0dXJuIDA7CiAKLQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoKmJwcCkpOworCUFTU0VSVCghKCpicHApLT5iX2Vycm9yKTsKIAlhZ2YgPSBYRlNfQlVGX1RPX0FHRigqYnBwKTsKIAogCS8qCkBAIC0yMTY4LDcgKzIxNjcsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKCEqYnBwKQogCQlyZXR1cm4gMDsKLQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoKmJwcCkpOworCUFTU0VSVCghKCpicHApLT5iX2Vycm9yKTsKIAogCWFnZiA9IFhGU19CVUZfVE9fQUdGKCpicHApOwogCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCnJlbmFtZSB0byBmcy94ZnMveGZzX2FvcHMuYwppbmRleCA2M2U5NzFlLi44YzM3ZGRlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL3hmc19hb3BzLmMKQEAgLTEzMDAsNiArMTMwMCw3IEBACiAJYm9vbAkJCWlzX2FzeW5jKQogewogCXN0cnVjdCB4ZnNfaW9lbmQJKmlvZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGlvZW5kLT5pb19pbm9kZTsKIAogCS8qCiAJICogYmxvY2tkZXZfZGlyZWN0X0lPIGNhbiByZXR1cm4gYW4gZXJyb3IgZXZlbiBhZnRlciB0aGUgSS9PCkBAIC0xMzMxLDcgKzEzMzIsNyBAQAogCX0KIAogCS8qIFhYWDogcHJvYmFibHkgc2hvdWxkIG1vdmUgaW50byB0aGUgcmVhbCBJL08gY29tcGxldGlvbiBoYW5kbGVyICovCi0JaW5vZGVfZGlvX2RvbmUoaW9lbmQtPmlvX2lub2RlKTsKKwlpbm9kZV9kaW9fZG9uZShpbm9kZSk7CiB9CiAKIFNUQVRJQyBzc2l6ZV90CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmggYi9mcy94ZnMveGZzX2FvcHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2FvcHMuaApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmMgYi9mcy94ZnMveGZzX2F0dHIuYwppbmRleCBjYmFlNDI0Li4xNjBiY2RjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuYworKysgYi9mcy94ZnMveGZzX2F0dHIuYwpAQCAtMjEyMSw4ICsyMTIxLDcgQEAKIAogCQlicCA9IHhmc19idWZfZ2V0KG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LAogCQkJCSBYQkZfTE9DSyB8IFhCRl9ET05UX0JMT0NLKTsKLQkJQVNTRVJUKGJwKTsKLQkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGJwKSk7CisJCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcihicCkpOwogCiAJCXRtcCA9ICh2YWx1ZWxlbiA8IFhGU19CVUZfU0laRShicCkpID8gdmFsdWVsZW4gOgogCQkJCQkJCVhGU19CVUZfU0laRShicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IGFiM2U1YzYuLjQ1MmEyOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0zMzgzLDggKzMzODMsNyBAQAogCQlBU1NFUlQoYXJncy5sZW4gPT0gMSk7CiAJCSpmaXJzdGJsb2NrID0gYXJncy5mc2JubzsKIAkJYnAgPSB4ZnNfYnRyZWVfZ2V0X2J1ZmwoYXJncy5tcCwgdHAsIGFyZ3MuZnNibm8sIDApOwotCQltZW1jcHkoKGNoYXIgKilYRlNfQlVGX1BUUihicCksIGlmcC0+aWZfdTEuaWZfZGF0YSwKLQkJCWlmcC0+aWZfYnl0ZXMpOworCQltZW1jcHkoYnAtPmJfYWRkciwgaWZwLT5pZl91MS5pZl9kYXRhLCBpZnAtPmlmX2J5dGVzKTsKIAkJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCAwLCBpZnAtPmlmX2J5dGVzIC0gMSk7CiAJCXhmc19ibWFwX2ZvcmtvZmZfcmVzZXQoYXJncy5tcCwgaXAsIHdoaWNoZm9yayk7CiAJCXhmc19pZGF0YV9yZWFsbG9jKGlwLCAtaWZwLT5pZl9ieXRlcywgd2hpY2hmb3JrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwppbmRleCBjYWJmNGI1Li4yYjlmZDM4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19idHJlZS5jCkBAIC0yNzUsOCArMjc1LDcgQEAKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CiAJCQluZXctPmJjX2J1ZnNbaV0gPSBicDsKLQkJCUFTU0VSVChicCk7Ci0JCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKKwkJCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcihicCkpOwogCQl9IGVsc2UKIAkJCW5ldy0+YmNfYnVmc1tpXSA9IE5VTEw7CiAJfQpAQCAtNDY3LDggKzQ2Niw3IEBACiAJQVNTRVJUKGZzYm5vICE9IE5VTExGU0JMT0NLKTsKIAlkID0gWEZTX0ZTQl9UT19EQUREUihtcCwgZnNibm8pOwogCWJwID0geGZzX3RyYW5zX2dldF9idWYodHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsIG1wLT5tX2JzaXplLCBsb2NrKTsKLQlBU1NFUlQoYnApOwotCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUihicCkpOworCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcihicCkpOwogCXJldHVybiBicDsKIH0KIApAQCAtNDkxLDggKzQ4OSw3IEBACiAJQVNTRVJUKGFnYm5vICE9IE5VTExBR0JMT0NLKTsKIAlkID0gWEZTX0FHQl9UT19EQUREUihtcCwgYWdubywgYWdibm8pOwogCWJwID0geGZzX3RyYW5zX2dldF9idWYodHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsIG1wLT5tX2JzaXplLCBsb2NrKTsKLQlBU1NFUlQoYnApOwotCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUihicCkpOworCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcihicCkpOwogCXJldHVybiBicDsKIH0KIApAQCAtNjMyLDcgKzYyOSw3IEBACiAJCQltcC0+bV9ic2l6ZSwgbG9jaywgJmJwKSkpIHsKIAkJcmV0dXJuIGVycm9yOwogCX0KLQlBU1NFUlQoIWJwIHx8ICFYRlNfQlVGX0dFVEVSUk9SKGJwKSk7CisJQVNTRVJUKCF4ZnNfYnVmX2dldGVycm9yKGJwKSk7CiAJaWYgKGJwKQogCQlYRlNfQlVGX1NFVF9WVFlQRV9SRUYoYnAsIEJfRlNfTUFQLCByZWZ2YWwpOwogCSpicHAgPSBicDsKQEAgLTk3Myw4ICs5NzAsNyBAQAogCSpicHAgPSB4ZnNfdHJhbnNfZ2V0X2J1ZihjdXItPmJjX3RwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLAogCQkJCSBtcC0+bV9ic2l6ZSwgZmxhZ3MpOwogCi0JQVNTRVJUKCpicHApOwotCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUigqYnBwKSk7CisJQVNTRVJUKCF4ZnNfYnVmX2dldGVycm9yKCpicHApKTsKIAogCSpibG9jayA9IFhGU19CVUZfVE9fQkxPQ0soKmJwcCk7CiAJcmV0dXJuIDA7CkBAIC0xMDA2LDggKzEwMDIsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JQVNTRVJUKCpicHAgIT0gTlVMTCk7Ci0JQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKCpicHApKTsKKwlBU1NFUlQoIXhmc19idWZfZ2V0ZXJyb3IoKmJwcCkpOwogCiAJeGZzX2J0cmVlX3NldF9yZWZzKGN1ciwgKmJwcCk7CiAJKmJsb2NrID0gWEZTX0JVRl9UT19CTE9DSygqYnBwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfYnRyZWUuaAppbmRleCA4ZDA1YTZhLi41YjI0MGRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19idHJlZS5oCkBAIC0yNjIsNyArMjYyLDcgQEAKIC8qCiAgKiBDb252ZXJ0IGZyb20gYnVmZmVyIHRvIGJ0cmVlIGJsb2NrIGhlYWRlci4KICAqLwotI2RlZmluZQlYRlNfQlVGX1RPX0JMT0NLKGJwKQkoKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sgKilYRlNfQlVGX1BUUihicCkpCisjZGVmaW5lCVhGU19CVUZfVE9fQkxPQ0soYnApCSgoc3RydWN0IHhmc19idHJlZV9ibG9jayAqKSgoYnApLT5iX2FkZHIpKQogCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy94ZnNfYnVmLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfYnVmLmMKaW5kZXggZDFmZTc0NS4uYzU3ODM2ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL3hmc19idWYuYwpAQCAtNTk2LDcgKzU5Niw3IEBACiAJYnAtPmJfZmxhZ3MgfD0gZmxhZ3MgJiAoWEJGX1JFQUQgfCBYQkZfQVNZTkMgfCBYQkZfUkVBRF9BSEVBRCk7CiAKIAlzdGF0dXMgPSB4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JaWYgKHN0YXR1cyB8fCBYRlNfQlVGX0lTRVJST1IoYnApIHx8IChmbGFncyAmIFhCRl9BU1lOQykpCisJaWYgKHN0YXR1cyB8fCBicC0+Yl9lcnJvciB8fCAoZmxhZ3MgJiBYQkZfQVNZTkMpKQogCQlyZXR1cm4gc3RhdHVzOwogCXJldHVybiB4ZnNfYnVmX2lvd2FpdChicCk7CiB9CkBAIC02NzksNyArNjc5LDYgQEAKIAkvKiBzZXQgdXAgdGhlIGJ1ZmZlciBmb3IgYSByZWFkIElPICovCiAJWEZTX0JVRl9TRVRfQUREUihicCwgZGFkZHIpOwogCVhGU19CVUZfUkVBRChicCk7Ci0JWEZTX0JVRl9CVVNZKGJwKTsKIAogCXhmc2Jkc3RyYXQobXAsIGJwKTsKIAllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKQEAgLTEwNjksNyArMTA2OCw3IEBACiAJLyoKIAkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZCwgd2UgYXJlbid0IGZsdXNoaW5nIGl0LgogCSAqLwotCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFSU8pOwogCiAJLyoKIAkgKiBXZSdyZSBjYWxsaW5nIHhmc19idWZfaW9lbmQsIHNvIGRlbGV0ZSBYQkZfRE9ORSBmbGFnLgpAQCAtMTA5NCw3ICsxMDkzLDcgQEAKIHhmc19iaW9lcnJvcl9yZWxzZSgKIAlzdHJ1Y3QgeGZzX2J1ZgkqYnApCiB7Ci0JaW50NjRfdAkJZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7CisJaW50NjRfdAkJZmwgPSBicC0+Yl9mbGFnczsKIAkvKgogCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgogCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KQEAgLTExMTUsNyArMTExNCw3IEBACiAJCSAqIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIG1hcmsgZXJyb3IgZm9yCiAJCSAqIEFTWU5DIGJ1ZmZlcnMuCiAJCSAqLwotCQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOworCQl4ZnNfYnVmX2lvZXJyb3IoYnAsIEVJTyk7CiAJCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7CiAJfSBlbHNlIHsKIAkJeGZzX2J1Zl9yZWxzZShicCk7CkBAIC0xMzI0LDcgKzEzMjMsNyBAQAogCXN0cnVjdCBwYWdlCQkqcGFnZTsKIAogCWlmIChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpCi0JCXJldHVybiBYRlNfQlVGX1BUUihicCkgKyBvZmZzZXQ7CisJCXJldHVybiBicC0+Yl9hZGRyICsgb2Zmc2V0OwogCiAJb2Zmc2V0ICs9IGJwLT5iX29mZnNldDsKIAlwYWdlID0gYnAtPmJfcGFnZXNbb2Zmc2V0ID4+IFBBR0VfU0hJRlRdOwpAQCAtMTQ4NCw3ICsxNDgzLDcgQEAKIAlpZiAoc2V0X2Jsb2Nrc2l6ZShidHAtPmJ0X2JkZXYsIHNlY3RvcnNpemUpKSB7CiAJCXhmc193YXJuKGJ0cC0+YnRfbW91bnQsCiAJCQkiQ2Fubm90IHNldF9ibG9ja3NpemUgdG8gJXUgb24gZGV2aWNlICVzXG4iLAotCQkJc2VjdG9yc2l6ZSwgWEZTX0JVRlRBUkdfTkFNRShidHApKTsKKwkJCXNlY3RvcnNpemUsIHhmc19idWZfdGFyZ2V0X25hbWUoYnRwKSk7CiAJCXJldHVybiBFSU5WQUw7CiAJfQogCkBAIC0xNjgxLDcgKzE2ODAsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgbiwgZHdxLCBiX2xpc3QpIHsKIAkJQVNTRVJUKGJwLT5iX2ZsYWdzICYgWEJGX0RFTFdSSSk7CiAKLQkJaWYgKCFYRlNfQlVGX0lTUElOTkVEKGJwKSAmJiB4ZnNfYnVmX3RyeWxvY2soYnApKSB7CisJCWlmICgheGZzX2J1Zl9pc3Bpbm5lZChicCkgJiYgeGZzX2J1Zl90cnlsb2NrKGJwKSkgewogCQkJaWYgKCFmb3JjZSAmJgogCQkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGJwLT5iX3F1ZXVldGltZSArIGFnZSkpIHsKIAkJCQl4ZnNfYnVmX3VubG9jayhicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaCBiL2ZzL3hmcy94ZnNfYnVmLmgKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfYnVmLmgKaW5kZXggNmE4M2I0Ni4uNjIwOTcyYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL3hmc19idWYuaApAQCAtMjI4LDExICsyMjgsMTUgQEAKIGV4dGVybiBpbnQgeGZzX2J1Zl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeGZzX2J1Zl90ZXJtaW5hdGUodm9pZCk7CiAKLSNkZWZpbmUgeGZzX2J1Zl90YXJnZXRfbmFtZSh0YXJnZXQpCVwKLQkoeyBjaGFyIF9fYltCREVWTkFNRV9TSVpFXTsgYmRldm5hbWUoKHRhcmdldCktPmJ0X2JkZXYsIF9fYik7IF9fYjsgfSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCit4ZnNfYnVmX3RhcmdldF9uYW1lKHN0cnVjdCB4ZnNfYnVmdGFyZyAqdGFyZ2V0KQoreworCXN0YXRpYyBjaGFyIF9fYltCREVWTkFNRV9TSVpFXTsKKworCXJldHVybiBiZGV2bmFtZSh0YXJnZXQtPmJ0X2JkZXYsIF9fYik7Cit9CiAKIAotI2RlZmluZSBYRlNfQlVGX0JGTEFHUyhicCkJKChicCktPmJfZmxhZ3MpCiAjZGVmaW5lIFhGU19CVUZfWkVST0ZMQUdTKGJwKSBcCiAJKChicCktPmJfZmxhZ3MgJj0gfihYQkZfUkVBRHxYQkZfV1JJVEV8WEJGX0FTWU5DfFhCRl9ERUxXUkl8IFwKIAkJCSAgICBYQkZfU1lOQ0lPfFhCRl9GVUF8WEJGX0ZMVVNIKSkKQEAgLTI1MSwyMyArMjU1LDE0IEBACiAjZGVmaW5lIFhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKQl4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKGJwKQogI2RlZmluZSBYRlNfQlVGX0lTREVMQVlXUklURShicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfREVMV1JJKQogCi0jZGVmaW5lIFhGU19CVUZfRVJST1IoYnAsbm8pCXhmc19idWZfaW9lcnJvcihicCxubykKLSNkZWZpbmUgWEZTX0JVRl9HRVRFUlJPUihicCkJeGZzX2J1Zl9nZXRlcnJvcihicCkKLSNkZWZpbmUgWEZTX0JVRl9JU0VSUk9SKGJwKQkoeGZzX2J1Zl9nZXRlcnJvcihicCkgPyAxIDogMCkKLQogI2RlZmluZSBYRlNfQlVGX0RPTkUoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9ET05FKQogI2RlZmluZSBYRlNfQlVGX1VORE9ORShicCkJKChicCktPmJfZmxhZ3MgJj0gflhCRl9ET05FKQogI2RlZmluZSBYRlNfQlVGX0lTRE9ORShicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfRE9ORSkKIAotI2RlZmluZSBYRlNfQlVGX0JVU1koYnApCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgWEZTX0JVRl9VTkJVU1koYnApCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgWEZTX0JVRl9JU0JVU1koYnApCSgxKQotCiAjZGVmaW5lIFhGU19CVUZfQVNZTkMoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9BU1lOQykKICNkZWZpbmUgWEZTX0JVRl9VTkFTWU5DKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX0FTWU5DKQogI2RlZmluZSBYRlNfQlVGX0lTQVNZTkMoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX0FTWU5DKQogCi0jZGVmaW5lIFhGU19CVUZfSE9MRChicCkJeGZzX2J1Zl9ob2xkKGJwKQogI2RlZmluZSBYRlNfQlVGX1JFQUQoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9SRUFEKQogI2RlZmluZSBYRlNfQlVGX1VOUkVBRChicCkJKChicCktPmJfZmxhZ3MgJj0gflhCRl9SRUFEKQogI2RlZmluZSBYRlNfQlVGX0lTUkVBRChicCkJKChicCktPmJfZmxhZ3MgJiBYQkZfUkVBRCkKQEAgLTI3NiwxMCArMjcxLDYgQEAKICNkZWZpbmUgWEZTX0JVRl9VTldSSVRFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX1dSSVRFKQogI2RlZmluZSBYRlNfQlVGX0lTV1JJVEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX1dSSVRFKQogCi0jZGVmaW5lIFhGU19CVUZfU0VUX1NUQVJUKGJwKQkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBYRlNfQlVGX1BUUihicCkJCQkoeGZzX2NhZGRyX3QpKChicCktPmJfYWRkcikKLSNkZWZpbmUgWEZTX0JVRl9TRVRfUFRSKGJwLCB2YWwsIGNudCkJeGZzX2J1Zl9hc3NvY2lhdGVfbWVtb3J5KGJwLCB2YWwsIGNudCkKICNkZWZpbmUgWEZTX0JVRl9BRERSKGJwKQkJKChicCktPmJfYm4pCiAjZGVmaW5lIFhGU19CVUZfU0VUX0FERFIoYnAsIGJubykJKChicCktPmJfYm4gPSAoeGZzX2RhZGRyX3QpKGJubykpCiAjZGVmaW5lIFhGU19CVUZfT0ZGU0VUKGJwKQkJKChicCktPmJfZmlsZV9vZmZzZXQpCkBAIC0yOTksMTQgKzI5MCwxMyBAQAogI2RlZmluZSBYRlNfQlVGX1NFVF9WVFlQRV9SRUYoYnAsIHR5cGUsIHJlZikJeGZzX2J1Zl9zZXRfcmVmKGJwLCByZWYpCiAjZGVmaW5lIFhGU19CVUZfU0VUX1ZUWVBFKGJwLCB0eXBlKQkJZG8geyB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFhGU19CVUZfSVNQSU5ORUQoYnApCWF0b21pY19yZWFkKCYoKGJwKS0+Yl9waW5fY291bnQpKQorc3RhdGljIGlubGluZSBpbnQgeGZzX2J1Zl9pc3Bpbm5lZChzdHJ1Y3QgeGZzX2J1ZiAqYnApCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZicC0+Yl9waW5fY291bnQpOworfQogCiAjZGVmaW5lIFhGU19CVUZfRklOSVNIX0lPV0FJVChicCkJY29tcGxldGUoJmJwLT5iX2lvd2FpdCk7CiAKLSNkZWZpbmUgWEZTX0JVRl9TRVRfVEFSR0VUKGJwLCB0YXJnZXQpCSgoYnApLT5iX3RhcmdldCA9ICh0YXJnZXQpKQotI2RlZmluZSBYRlNfQlVGX1RBUkdFVChicCkJCSgoYnApLT5iX3RhcmdldCkKLSNkZWZpbmUgWEZTX0JVRlRBUkdfTkFNRSh0YXJnZXQpCXhmc19idWZfdGFyZ2V0X25hbWUodGFyZ2V0KQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2J1Zl9yZWxzZSh4ZnNfYnVmX3QgKmJwKQogewogCXhmc19idWZfdW5sb2NrKGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA4ODQ5MjkxLi5jYWMyZWNmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC0xMjQsOSArMTI0LDkgQEAKIAogCWJwID0gYmlwLT5ibGlfYnVmOwogCUFTU0VSVChYRlNfQlVGX0NPVU5UKGJwKSA+IDApOwotCUFTU0VSVChYRlNfQlVGX1BUUihicCkgIT0gTlVMTCk7CisJQVNTRVJUKGJwLT5iX2FkZHIgIT0gTlVMTCk7CiAJb3JpZyA9IGJpcC0+YmxpX29yaWc7Ci0JYnVmZmVyID0gWEZTX0JVRl9QVFIoYnApOworCWJ1ZmZlciA9IGJwLT5iX2FkZHI7CiAJZm9yICh4ID0gMDsgeCA8IFhGU19CVUZfQ09VTlQoYnApOyB4KyspIHsKIAkJaWYgKG9yaWdbeF0gIT0gYnVmZmVyW3hdICYmICFidHN0KGJpcC0+YmxpX2xvZ2dlZCwgeCkpIHsKIAkJCXhmc19lbWVyZyhicC0+Yl9tb3VudCwKQEAgLTM3MSw3ICszNzEsNiBAQAogewogCXN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtCSpiaXAgPSBCVUZfSVRFTShsaXApOwogCi0JQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJpcC0+YmxpX2J1ZikpOwogCUFTU0VSVChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID4gMCk7CiAJQVNTRVJUKChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfTE9HR0VEKSB8fAogCSAgICAgICAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CkBAIC00NzksMTMgKzQ3OCwxMyBAQAogCXN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtCSpiaXAgPSBCVUZfSVRFTShsaXApOwogCXN0cnVjdCB4ZnNfYnVmCQkqYnAgPSBiaXAtPmJsaV9idWY7CiAKLQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJaWYgKHhmc19idWZfaXNwaW5uZWQoYnApKQogCQlyZXR1cm4gWEZTX0lURU1fUElOTkVEOwogCWlmICgheGZzX2J1Zl90cnlsb2NrKGJwKSkKIAkJcmV0dXJuIFhGU19JVEVNX0xPQ0tFRDsKIAogCS8qIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlci4gICovCi0JWEZTX0JVRl9IT0xEKGJwKTsKKwl4ZnNfYnVmX2hvbGQoYnApOwogCiAJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CiAJdHJhY2VfeGZzX2J1Zl9pdGVtX3RyeWxvY2soYmlwKTsKQEAgLTcyNiw3ICs3MjUsNyBAQAogCSAqIHRvIGhhdmUgbG9nZ2VkLgogCSAqLwogCWJpcC0+YmxpX29yaWcgPSAoY2hhciAqKWttZW1fYWxsb2MoWEZTX0JVRl9DT1VOVChicCksIEtNX1NMRUVQKTsKLQltZW1jcHkoYmlwLT5ibGlfb3JpZywgWEZTX0JVRl9QVFIoYnApLCBYRlNfQlVGX0NPVU5UKGJwKSk7CisJbWVtY3B5KGJpcC0+YmxpX29yaWcsIGJwLT5iX2FkZHIsIFhGU19CVUZfQ09VTlQoYnApKTsKIAliaXAtPmJsaV9sb2dnZWQgPSAoY2hhciAqKWttZW1femFsbG9jKFhGU19CVUZfQ09VTlQoYnApIC8gTkJCWSwgS01fU0xFRVApOwogI2VuZGlmCiAKQEAgLTg5NSw3ICs4OTQsNiBAQAogewogCXhmc19sb2dfaXRlbV90CSpoZWFkX2xpcDsKIAotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVCh4ZnNfYnVmX2lzbG9ja2VkKGJwKSk7CiAKIAlsaXAtPmxpX2NiID0gY2I7CkBAIC05NjAsNyArOTU4LDcgQEAKIAlzdGF0aWMgdWxvbmcJCWxhc3R0aW1lOwogCXN0YXRpYyB4ZnNfYnVmdGFyZ190CSpsYXN0dGFyZzsKIAotCWlmIChsaWtlbHkoIVhGU19CVUZfR0VURVJST1IoYnApKSkKKwlpZiAobGlrZWx5KCF4ZnNfYnVmX2dldGVycm9yKGJwKSkpCiAJCWdvdG8gZG9fY2FsbGJhY2tzOwogCiAJLyoKQEAgLTk3MywxNCArOTcxLDE0IEBACiAJCWdvdG8gZG9fY2FsbGJhY2tzOwogCX0KIAotCWlmIChYRlNfQlVGX1RBUkdFVChicCkgIT0gbGFzdHRhcmcgfHwKKwlpZiAoYnAtPmJfdGFyZ2V0ICE9IGxhc3R0YXJnIHx8CiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgKGxhc3R0aW1lICsgNSpIWikpKSB7CiAJCWxhc3R0aW1lID0gamlmZmllczsKIAkJeGZzX2FsZXJ0KG1wLCAiRGV2aWNlICVzOiBtZXRhZGF0YSB3cml0ZSBlcnJvciBibG9jayAweCVsbHgiLAotCQkJWEZTX0JVRlRBUkdfTkFNRShYRlNfQlVGX1RBUkdFVChicCkpLAorCQkJeGZzX2J1Zl90YXJnZXRfbmFtZShicC0+Yl90YXJnZXQpLAogCQkgICAgICAoX191aW50NjRfdClYRlNfQlVGX0FERFIoYnApKTsKIAl9Ci0JbGFzdHRhcmcgPSBYRlNfQlVGX1RBUkdFVChicCk7CisJbGFzdHRhcmcgPSBicC0+Yl90YXJnZXQ7CiAKIAkvKgogCSAqIElmIHRoZSB3cml0ZSB3YXMgYXN5bmNocm9ub3VzIHRoZW4gbm8gb25lIHdpbGwgYmUgbG9va2luZyBmb3IgdGhlCkBAIC05OTEsMTIgKzk4OSwxMSBAQAogCSAqIGFyb3VuZC4KIAkgKi8KIAlpZiAoWEZTX0JVRl9JU0FTWU5DKGJwKSkgewotCQlYRlNfQlVGX0VSUk9SKGJwLCAwKTsgLyogZXJybm8gb2YgMCB1bnNldHMgdGhlIGZsYWcgKi8KKwkJeGZzX2J1Zl9pb2Vycm9yKGJwLCAwKTsgLyogZXJybm8gb2YgMCB1bnNldHMgdGhlIGZsYWcgKi8KIAogCQlpZiAoIVhGU19CVUZfSVNTVEFMRShicCkpIHsKIAkJCVhGU19CVUZfREVMQVlXUklURShicCk7CiAJCQlYRlNfQlVGX0RPTkUoYnApOwotCQkJWEZTX0JVRl9TRVRfU1RBUlQoYnApOwogCQl9CiAJCUFTU0VSVChicC0+Yl9pb2RvbmUgIT0gTlVMTCk7CiAJCXRyYWNlX3hmc19idWZfaXRlbV9pb2RvbmVfYXN5bmMoYnAsIF9SRVRfSVBfKTsKQEAgLTEwMTMsNyArMTAxMCw2IEBACiAJWEZTX0JVRl9VTkRFTEFZV1JJVEUoYnApOwogCiAJdHJhY2VfeGZzX2J1Zl9lcnJvcl9yZWxzZShicCwgX1JFVF9JUF8pOwotCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7CiAKIGRvX2NhbGxiYWNrczoKIAl4ZnNfYnVmX2RvX2NhbGxiYWNrcyhicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKaW5kZXggNWJmY2I4Ny4uZWU5ZDU0MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMjA1MCw3ICsyMDUwLDcgQEAKIAkJY2FzZSAwOgogCQkJYnAgPSB4ZnNfdHJhbnNfZ2V0X2J1Zih0cmFucywgbXAtPm1fZGRldl90YXJncCwKIAkJCQltYXBwZWRibm8sIG5tYXBwZWQsIDApOwotCQkJZXJyb3IgPSBicCA/IFhGU19CVUZfR0VURVJST1IoYnApIDogWEZTX0VSUk9SKEVJTyk7CisJCQllcnJvciA9IGJwID8gYnAtPmJfZXJyb3IgOiBYRlNfRVJST1IoRUlPKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6CiAJCWNhc2UgMjoKQEAgLTIyNjgsNyArMjI2OCw3IEBACiAJCWRhYnVmLT5uYnVmID0gMTsKIAkJYnAgPSBicHNbMF07CiAJCWRhYnVmLT5iYmNvdW50ID0gKHNob3J0KUJUT0JCKFhGU19CVUZfQ09VTlQoYnApKTsKLQkJZGFidWYtPmRhdGEgPSBYRlNfQlVGX1BUUihicCk7CisJCWRhYnVmLT5kYXRhID0gYnAtPmJfYWRkcjsKIAkJZGFidWYtPmJwc1swXSA9IGJwOwogCX0gZWxzZSB7CiAJCWRhYnVmLT5uYnVmID0gbmJ1ZjsKQEAgLTIyNzksNyArMjI3OSw3IEBACiAJCWRhYnVmLT5kYXRhID0ga21lbV9hbGxvYyhCQlRPQihkYWJ1Zi0+YmJjb3VudCksIEtNX1NMRUVQKTsKIAkJZm9yIChpID0gb2ZmID0gMDsgaSA8IG5idWY7IGkrKywgb2ZmICs9IFhGU19CVUZfQ09VTlQoYnApKSB7CiAJCQlicCA9IGJwc1tpXTsKLQkJCW1lbWNweSgoY2hhciAqKWRhYnVmLT5kYXRhICsgb2ZmLCBYRlNfQlVGX1BUUihicCksCisJCQltZW1jcHkoKGNoYXIgKilkYWJ1Zi0+ZGF0YSArIG9mZiwgYnAtPmJfYWRkciwKIAkJCQlYRlNfQlVGX0NPVU5UKGJwKSk7CiAJCX0KIAl9CkBAIC0yMzAyLDggKzIzMDIsOCBAQAogCQlmb3IgKGkgPSBvZmYgPSAwOyBpIDwgZGFidWYtPm5idWY7CiAJCQkJaSsrLCBvZmYgKz0gWEZTX0JVRl9DT1VOVChicCkpIHsKIAkJCWJwID0gZGFidWYtPmJwc1tpXTsKLQkJCW1lbWNweShYRlNfQlVGX1BUUihicCksIChjaGFyICopZGFidWYtPmRhdGEgKyBvZmYsCi0JCQkJWEZTX0JVRl9DT1VOVChicCkpOworCQkJbWVtY3B5KGJwLT5iX2FkZHIsIGRhYnVmLT5kYXRhICsgb2ZmLAorCQkJCQkJWEZTX0JVRl9DT1VOVChicCkpOwogCQl9CiAJfQogfQpAQCAtMjM0MCw3ICsyMzQwLDcgQEAKIAogCUFTU0VSVChkYWJ1Zi0+bmJ1ZiAmJiBkYWJ1Zi0+ZGF0YSAmJiBkYWJ1Zi0+YmJjb3VudCAmJiBkYWJ1Zi0+YnBzWzBdKTsKIAlpZiAoZGFidWYtPm5idWYgPT0gMSkgewotCQlBU1NFUlQoZGFidWYtPmRhdGEgPT0gKHZvaWQgKilYRlNfQlVGX1BUUihkYWJ1Zi0+YnBzWzBdKSk7CisJCUFTU0VSVChkYWJ1Zi0+ZGF0YSA9PSBkYWJ1Zi0+YnBzWzBdLT5iX2FkZHIpOwogCQl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgZGFidWYtPmJwc1swXSwgZmlyc3QsIGxhc3QpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaW5vZGUuaCBiL2ZzL3hmcy94ZnNfZGlub2RlLmgKaW5kZXggZGZmYmE5Yi4uYTM3MjE2MyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2Rpbm9kZS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJYmUzMl90b19jcHUoKGRpcCktPmRpX25leHRlbnRzKSA6IFwKIAkJYmUxNl90b19jcHUoKGRpcCktPmRpX2FuZXh0ZW50cykpCiAKLSNkZWZpbmUJWEZTX0JVRl9UT19ESU5PREUoYnApCSgoeGZzX2Rpbm9kZV90ICopWEZTX0JVRl9QVFIoYnApKQorI2RlZmluZQlYRlNfQlVGX1RPX0RJTk9ERShicCkJKCh4ZnNfZGlub2RlX3QgKikoKGJwKS0+Yl9hZGRyKSkKIAogLyoKICAqIEZvciBibG9jayBhbmQgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZXMgdGhlIDMyYml0IGRldl90IGlzIHN0b3JlZCBhdCB0aGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYyBiL2ZzL3hmcy94ZnNfZGlzY2FyZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfZGlzY2FyZC5jCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmggYi9mcy94ZnMveGZzX2Rpc2NhcmQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfZGlzY2FyZC5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2Rpc2NhcmQuaApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jIGIvZnMveGZzL3hmc19kcXVvdC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19kcXVvdC5jCmluZGV4IDgzN2YzMTEuLmRiNjI5NTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYworKysgYi9mcy94ZnMveGZzX2RxdW90LmMKQEAgLTMxOCwxMCArMzE4LDkgQEAKIAlpbnQJCWN1cmlkLCBpOwogCiAJQVNTRVJUKHRwKTsKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoeGZzX2J1Zl9pc2xvY2tlZChicCkpOwogCi0JZCA9ICh4ZnNfZHFibGtfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwlkID0gYnAtPmJfYWRkcjsKIAogCS8qCiAJICogSUQgb2YgdGhlIGZpcnN0IGRxdW90IGluIHRoZSBibG9jayAtIGlkJ3MgYXJlIHplcm8gYmFzZWQuCkBAIC00MDMsNyArNDAyLDcgQEAKIAkJCSAgICAgICBkcXAtPnFfYmxrbm8sCiAJCQkgICAgICAgbXAtPm1fcXVvdGFpbmZvLT5xaV9kcWNodW5rbGVuLAogCQkJICAgICAgIDApOwotCWlmICghYnAgfHwgKGVycm9yID0gWEZTX0JVRl9HRVRFUlJPUihicCkpKQorCWlmICghYnAgfHwgKGVycm9yID0geGZzX2J1Zl9nZXRlcnJvcihicCkpKQogCQlnb3RvIGVycm9yMTsKIAkvKgogCSAqIE1ha2UgYSBjaHVuayBvZiBkcXVvdHMgb3V0IG9mIHRoaXMgYnVmZmVyIGFuZCBsb2cKQEAgLTUzNCwxMyArNTMzLDEyIEBACiAJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAl9CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoeGZzX2J1Zl9pc2xvY2tlZChicCkpOwogCiAJLyoKIAkgKiBjYWxjdWxhdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBkcXVvdCBpbnNpZGUgdGhlIGJ1ZmZlci4KIAkgKi8KLQlkZHEgPSAoc3RydWN0IHhmc19kaXNrX2RxdW90ICopKFhGU19CVUZfUFRSKGJwKSArIGRxcC0+cV9idWZvZmZzZXQpOworCWRkcSA9IGJwLT5iX2FkZHIgKyBkcXAtPnFfYnVmb2Zmc2V0OwogCiAJLyoKIAkgKiBBIHNpbXBsZSBzYW5pdHkgY2hlY2sgaW4gY2FzZSB3ZSBnb3QgYSBjb3JydXB0ZWQgZHF1b3QuLi4KQEAgLTU1Myw3ICs1NTEsNiBAQAogCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYnApOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQl9Ci0JCVhGU19CVUZfQlVTWShicCk7IC8qIFdlIGRpcnRpZWQgdGhpcyAqLwogCX0KIAogCSpPX2JwcCA9IGJwOwpAQCAtNjIyLDcgKzYxOSw2IEBACiAJICogdGhpcyBwYXJ0aWN1bGFyIGRxdW90IHdhcyByZXBhaXJlZC4gV2Ugc3RpbGwgYXJlbid0IGFmcmFpZCB0bwogCSAqIGJyZWxzZSBpdCBiZWNhdXNlIHdlIGhhdmUgdGhlIGNoYW5nZXMgaW5jb3JlLgogCSAqLwotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVCh4ZnNfYnVmX2lzbG9ja2VkKGJwKSk7CiAJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYnApOwogCkBAIC0xMjA0LDcgKzEyMDAsNyBAQAogCS8qCiAJICogQ2FsY3VsYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZHF1b3QgaW5zaWRlIHRoZSBidWZmZXIuCiAJICovCi0JZGRxcCA9IChzdHJ1Y3QgeGZzX2Rpc2tfZHF1b3QgKikoWEZTX0JVRl9QVFIoYnApICsgZHFwLT5xX2J1Zm9mZnNldCk7CisJZGRxcCA9IGJwLT5iX2FkZHIgKyBkcXAtPnFfYnVmb2Zmc2V0OwogCiAJLyoKIAkgKiBBIHNpbXBsZSBzYW5pdHkgY2hlY2sgaW4gY2FzZSB3ZSBnb3QgYSBjb3JydXB0ZWQgZHF1b3QuLgpAQCAtMTI0MCw3ICsxMjM2LDcgQEAKIAkgKiBJZiB0aGUgYnVmZmVyIGlzIHBpbm5lZCB0aGVuIHB1c2ggb24gdGhlIGxvZyBzbyB3ZSB3b24ndAogCSAqIGdldCBzdHVjayB3YWl0aW5nIGluIHRoZSB3cml0ZSBmb3IgdG9vIGxvbmcuCiAJICovCi0JaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CisJaWYgKHhmc19idWZfaXNwaW5uZWQoYnApKSB7CiAJCXRyYWNlX3hmc19kcWZsdXNoX2ZvcmNlKGRxcCk7CiAJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KQEAgLTE0NDcsNyArMTQ0Myw3IEBACiAJCWdvdG8gb3V0X2xvY2s7CiAKIAlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkKKwkJaWYgKHhmc19idWZfaXNwaW5uZWQoYnApKQogCQkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CiAJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOwogCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaCBiL2ZzL3hmcy94ZnNfZHF1b3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2RxdW90LmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jIGIvZnMveGZzL3hmc19kcXVvdF9pdGVtLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jCnJlbmFtZSB0byBmcy94ZnMveGZzX2RxdW90X2l0ZW0uYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmggYi9mcy94ZnMveGZzX2RxdW90X2l0ZW0uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfZHF1b3RfaXRlbS5oCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYyBiL2ZzL3hmcy94ZnNfZXhwb3J0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCnJlbmFtZSB0byBmcy94ZnMveGZzX2V4cG9ydC5jCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuaCBiL2ZzL3hmcy94ZnNfZXhwb3J0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2V4cG9ydC5oCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMveGZzX2ZpbGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCnJlbmFtZSB0byBmcy94ZnMveGZzX2ZpbGUuYwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jIGIvZnMveGZzL3hmc19mc19zdWJyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19mc19zdWJyLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2dsb2JhbHMuYyBiL2ZzL3hmcy94ZnNfZ2xvYmFscy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19nbG9iYWxzLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfZ2xvYmFscy5jCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCBkZDU2MjhiLi45ZjI0ZWMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTIwMiw4ICsyMDIsNyBAQAogCQlmYnVmID0geGZzX3RyYW5zX2dldF9idWYodHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsCiAJCQkJCSBtcC0+bV9ic2l6ZSAqIGJsa3NfcGVyX2NsdXN0ZXIsCiAJCQkJCSBYQkZfTE9DSyk7Ci0JCUFTU0VSVChmYnVmKTsKLQkJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGZidWYpKTsKKwkJQVNTRVJUKCF4ZnNfYnVmX2dldGVycm9yKGZidWYpKTsKIAogCQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCBpbm9kZXMgaW4gdGhpcyBidWZmZXIgYW5kIHRoZW4gbG9nIHRoZW0uCkBAIC0xNDg2LDcgKzE0ODUsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JQVNTRVJUKCpicHAgJiYgIVhGU19CVUZfR0VURVJST1IoKmJwcCkpOworCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcigqYnBwKSk7CiAJYWdpID0gWEZTX0JVRl9UT19BR0koKmJwcCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IDJmY2NhNGIuLjAyMzlhN2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI0NzMsNyArMjQ3Myw3IEBACiAJCWlmIChicC0+Yl9pb2RvbmUpIHsKIAkJCVhGU19CVUZfVU5ET05FKGJwKTsKIAkJCVhGU19CVUZfU1RBTEUoYnApOwotCQkJWEZTX0JVRl9FUlJPUihicCxFSU8pOworCQkJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFSU8pOwogCQkJeGZzX2J1Zl9pb2VuZChicCwgMCk7CiAJCX0gZWxzZSB7CiAJCQlYRlNfQlVGX1NUQUxFKGJwKTsKQEAgLTI1ODUsNyArMjU4NSw3IEBACiAJICogSWYgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgdGhlbiBwdXNoIG9uIHRoZSBsb2cgbm93IHNvIHdlIHdvbid0CiAJICogZ2V0IHN0dWNrIHdhaXRpbmcgaW4gdGhlIHdyaXRlIGZvciB0b28gbG9uZy4KIAkgKi8KLQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJaWYgKHhmc19idWZfaXNwaW5uZWQoYnApKQogCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jIGIvZnMveGZzL3hmc19pb2N0bC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCnJlbmFtZSB0byBmcy94ZnMveGZzX2lvY3RsLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmggYi9mcy94ZnMveGZzX2lvY3RsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfaW9jdGwuaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jIGIvZnMveGZzL3hmc19pb2N0bDMyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19pb2N0bDMyLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuaCBiL2ZzL3hmcy94ZnNfaW9jdGwzMi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfaW9jdGwzMi5oCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfaW9wcy5jCmluZGV4IGI5YzE3MmIuLjY3MzcwNGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMveGZzX2lvcHMuYwpAQCAtNzAsOSArNzAsOCBAQAogfQogCiAvKgotICogSWYgdGhlIGxpbnV4IGlub2RlIGlzIHZhbGlkLCBtYXJrIGl0IGRpcnR5LgotICogVXNlZCB3aGVuIGNvbW1pdHRpbmcgYSBkaXJ0eSBpbm9kZSBpbnRvIGEgdHJhbnNhY3Rpb24gc28gdGhhdAotICogdGhlIGlub2RlIHdpbGwgZ2V0IHdyaXR0ZW4gYmFjayBieSB0aGUgbGludXggY29kZQorICogSWYgdGhlIGxpbnV4IGlub2RlIGlzIHZhbGlkLCBtYXJrIGl0IGRpcnR5LCBlbHNlIG1hcmsgdGhlIGRpcnR5IHN0YXRlCisgKiBpbiB0aGUgWEZTIGlub2RlIHRvIG1ha2Ugc3VyZSB3ZSBwaWNrIGl0IHVwIHdoZW4gcmVjbGFpbWluZyB0aGUgaW5vZGUuCiAgKi8KIHZvaWQKIHhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoCkBAIC04Miw2ICs4MSwxMCBAQAogCiAJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9XSUxMX0ZSRUV8SV9GUkVFSU5HKSkpCiAJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJZWxzZSB7CisJCWJhcnJpZXIoKTsKKwkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOworCX0KIH0KIAogdm9pZApAQCAtOTIsNiArOTUsMTEgQEAKIAogCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfV0lMTF9GUkVFfElfRlJFRUlORykpKQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwllbHNlIHsKKwkJYmFycmllcigpOworCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CisJfQorCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmggYi9mcy94ZnMveGZzX2lvcHMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2lvcHMuaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaCBiL2ZzL3hmcy94ZnNfbGludXguaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCnJlbmFtZSB0byBmcy94ZnMveGZzX2xpbnV4LmgKaW5kZXggZDQyZjgxNC4uMWU4YTQ1ZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAorKysgYi9mcy94ZnMveGZzX2xpbnV4LmgKQEAgLTMyLDEzICszMiwxMiBAQAogIyBkZWZpbmUgWEZTX0JJR19JTlVNUwkwCiAjZW5kaWYKIAotI2luY2x1ZGUgPHhmc190eXBlcy5oPgorI2luY2x1ZGUgInhmc190eXBlcy5oIgogCi0jaW5jbHVkZSA8a21lbS5oPgotI2luY2x1ZGUgPG1ybG9jay5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLQotI2luY2x1ZGUgPHN1cHBvcnQvdXVpZC5oPgorI2luY2x1ZGUgImttZW0uaCIKKyNpbmNsdWRlICJtcmxvY2suaCIKKyNpbmNsdWRlICJ0aW1lLmgiCisjaW5jbHVkZSAidXVpZC5oIgogCiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTc4LDE0ICs3NywxNCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLSNpbmNsdWRlIDx4ZnNfdm5vZGUuaD4KLSNpbmNsdWRlIDx4ZnNfc3RhdHMuaD4KLSNpbmNsdWRlIDx4ZnNfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8eGZzX2lvcHMuaD4KLSNpbmNsdWRlIDx4ZnNfYW9wcy5oPgotI2luY2x1ZGUgPHhmc19zdXBlci5oPgotI2luY2x1ZGUgPHhmc19idWYuaD4KLSNpbmNsdWRlIDx4ZnNfbWVzc2FnZS5oPgorI2luY2x1ZGUgInhmc192bm9kZS5oIgorI2luY2x1ZGUgInhmc19zdGF0cy5oIgorI2luY2x1ZGUgInhmc19zeXNjdGwuaCIKKyNpbmNsdWRlICJ4ZnNfaW9wcy5oIgorI2luY2x1ZGUgInhmc19hb3BzLmgiCisjaW5jbHVkZSAieGZzX3N1cGVyLmgiCisjaW5jbHVkZSAieGZzX2J1Zi5oIgorI2luY2x1ZGUgInhmc19tZXNzYWdlLmgiCiAKICNpZmRlZiBfX0JJR19FTkRJQU4KICNkZWZpbmUgWEZTX05BVElWRV9IT1NUIDEKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDA2ZmY4NDMuLjNhOGQ0ZjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtODc4LDcgKzg3OCw3IEBACiAJLyoKIAkgKiBSYWNlIHRvIHNodXRkb3duIHRoZSBmaWxlc3lzdGVtIGlmIHdlIHNlZSBhbiBlcnJvci4KIAkgKi8KLQlpZiAoWEZTX1RFU1RfRVJST1IoKFhGU19CVUZfR0VURVJST1IoYnApKSwgbC0+bF9tcCwKKwlpZiAoWEZTX1RFU1RfRVJST1IoKHhmc19idWZfZ2V0ZXJyb3IoYnApKSwgbC0+bF9tcCwKIAkJCVhGU19FUlJUQUdfSU9ET05FX0lPRVJSLCBYRlNfUkFORE9NX0lPRE9ORV9JT0VSUikpIHsKIAkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfaW9kb25lIiwgbC0+bF9tcCwgYnAsIFhGU19CVUZfQUREUihicCkpOwogCQlYRlNfQlVGX1NUQUxFKGJwKTsKQEAgLTEwNTEsNyArMTA1MSw2IEBACiAJaWYgKCFicCkKIAkJZ290byBvdXRfZnJlZV9sb2c7CiAJYnAtPmJfaW9kb25lID0geGxvZ19pb2RvbmU7Ci0JQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJwKSk7CiAJQVNTRVJUKHhmc19idWZfaXNsb2NrZWQoYnApKTsKIAlsb2ctPmxfeGJ1ZiA9IGJwOwogCkBAIC0xMTA4LDcgKzExMDcsNiBAQAogCQlpY2xvZy0+aWNfY2FsbGJhY2tfdGFpbCA9ICYoaWNsb2ctPmljX2NhbGxiYWNrKTsKIAkJaWNsb2ctPmljX2RhdGFwID0gKGNoYXIgKilpY2xvZy0+aWNfZGF0YSArIGxvZy0+bF9pY2xvZ19oc2l6ZTsKIAotCQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koaWNsb2ctPmljX2JwKSk7CiAJCUFTU0VSVCh4ZnNfYnVmX2lzbG9ja2VkKGljbG9nLT5pY19icCkpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpY2xvZy0+aWNfZm9yY2Vfd2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmljbG9nLT5pY193cml0ZV93YWl0KTsKQEAgLTEyNDgsNyArMTI0Niw3IEBACiAJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2cgPSBicC0+Yl9mc3ByaXY7CiAKIAlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKSB7Ci0JCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCXhmc19idWZfaW9lcnJvcihicCwgRUlPKTsKIAkJWEZTX0JVRl9TVEFMRShicCk7CiAJCXhmc19idWZfaW9lbmQoYnAsIDApOwogCQkvKgpAQCAtMTM1NSw3ICsxMzUzLDYgQEAKIAlYRlNfQlVGX1NFVF9DT1VOVChicCwgY291bnQpOwogCWJwLT5iX2ZzcHJpdiA9IGljbG9nOwogCVhGU19CVUZfWkVST0ZMQUdTKGJwKTsKLQlYRlNfQlVGX0JVU1koYnApOwogCVhGU19CVUZfQVNZTkMoYnApOwogCWJwLT5iX2ZsYWdzIHw9IFhCRl9TWU5DSU87CiAKQEAgLTEzOTgsMTYgKzEzOTUsMTUgQEAKIAlpZiAoc3BsaXQpIHsKIAkJYnAgPSBpY2xvZy0+aWNfbG9nLT5sX3hidWY7CiAJCVhGU19CVUZfU0VUX0FERFIoYnAsIDApOwkgICAgIC8qIGxvZ2ljYWwgMCAqLwotCQlYRlNfQlVGX1NFVF9QVFIoYnAsICh4ZnNfY2FkZHJfdCkoKF9fcHNpbnRfdCkmKGljbG9nLT5pY19oZWFkZXIpKwotCQkJCQkgICAgKF9fcHNpbnRfdCljb3VudCksIHNwbGl0KTsKKwkJeGZzX2J1Zl9hc3NvY2lhdGVfbWVtb3J5KGJwLAorCQkJCShjaGFyICopJmljbG9nLT5pY19oZWFkZXIgKyBjb3VudCwgc3BsaXQpOwogCQlicC0+Yl9mc3ByaXYgPSBpY2xvZzsKIAkJWEZTX0JVRl9aRVJPRkxBR1MoYnApOwotCQlYRlNfQlVGX0JVU1koYnApOwogCQlYRlNfQlVGX0FTWU5DKGJwKTsKIAkJYnAtPmJfZmxhZ3MgfD0gWEJGX1NZTkNJTzsKIAkJaWYgKGxvZy0+bF9tcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQogCQkJYnAtPmJfZmxhZ3MgfD0gWEJGX0ZVQTsKLQkJZHB0ciA9IFhGU19CVUZfUFRSKGJwKTsKKwkJZHB0ciA9IGJwLT5iX2FkZHI7CiAJCS8qCiAJCSAqIEJ1bXAgdGhlIGN5Y2xlIG51bWJlcnMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggYmxvY2sKIAkJICogc2luY2UgdGhpcyBwYXJ0IG9mIHRoZSBidWZmZXIgaXMgYXQgdGhlIHN0YXJ0IG9mCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggMDUyYTJjMC4uYTE5OWRiYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJeGZzX2RhZGRyX3QJb2Zmc2V0ID0gYmxrX25vICYgKCh4ZnNfZGFkZHJfdClsb2ctPmxfc2VjdEJCc2l6ZSAtIDEpOwogCiAJQVNTRVJUKEJCVE9CKG9mZnNldCArIG5iYmxrcykgPD0gWEZTX0JVRl9TSVpFKGJwKSk7Ci0JcmV0dXJuIFhGU19CVUZfUFRSKGJwKSArIEJCVE9CKG9mZnNldCk7CisJcmV0dXJuIGJwLT5iX2FkZHIgKyBCQlRPQihvZmZzZXQpOwogfQogCiAKQEAgLTE3OCw5ICsxNzgsNyBAQAogCiAJWEZTX0JVRl9TRVRfQUREUihicCwgbG9nLT5sX2xvZ0JCc3RhcnQgKyBibGtfbm8pOwogCVhGU19CVUZfUkVBRChicCk7Ci0JWEZTX0JVRl9CVVNZKGJwKTsKIAlYRlNfQlVGX1NFVF9DT1VOVChicCwgQkJUT0IobmJibGtzKSk7Ci0JWEZTX0JVRl9TRVRfVEFSR0VUKGJwLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIAogCXhmc2Jkc3RyYXQobG9nLT5sX21wLCBicCk7CiAJZXJyb3IgPSB4ZnNfYnVmX2lvd2FpdChicCk7CkBAIC0yMjAsMTggKzIxOCwxOCBAQAogCXhmc19idWZfdAkqYnAsCiAJeGZzX2NhZGRyX3QJb2Zmc2V0KQogewotCXhmc19jYWRkcl90CW9yaWdfb2Zmc2V0ID0gWEZTX0JVRl9QVFIoYnApOworCXhmc19jYWRkcl90CW9yaWdfb2Zmc2V0ID0gYnAtPmJfYWRkcjsKIAlpbnQJCW9yaWdfbGVuID0gYnAtPmJfYnVmZmVyX2xlbmd0aDsKIAlpbnQJCWVycm9yLCBlcnJvcjI7CiAKLQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0LCBCQlRPQihuYmJsa3MpKTsKKwllcnJvciA9IHhmc19idWZfYXNzb2NpYXRlX21lbW9yeShicCwgb2Zmc2V0LCBCQlRPQihuYmJsa3MpKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgYmxrX25vLCBuYmJsa3MsIGJwKTsKIAogCS8qIG11c3QgcmVzZXQgYnVmZmVyIHBvaW50ZXIgZXZlbiBvbiBlcnJvciAqLwotCWVycm9yMiA9IFhGU19CVUZfU0VUX1BUUihicCwgb3JpZ19vZmZzZXQsIG9yaWdfbGVuKTsKKwllcnJvcjIgPSB4ZnNfYnVmX2Fzc29jaWF0ZV9tZW1vcnkoYnAsIG9yaWdfb2Zmc2V0LCBvcmlnX2xlbik7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJcmV0dXJuIGVycm9yMjsKQEAgLTI2NiwxMSArMjY0LDkgQEAKIAogCVhGU19CVUZfU0VUX0FERFIoYnAsIGxvZy0+bF9sb2dCQnN0YXJ0ICsgYmxrX25vKTsKIAlYRlNfQlVGX1pFUk9GTEFHUyhicCk7Ci0JWEZTX0JVRl9CVVNZKGJwKTsKLQlYRlNfQlVGX0hPTEQoYnApOworCXhmc19idWZfaG9sZChicCk7CiAJeGZzX2J1Zl9sb2NrKGJwKTsKIAlYRlNfQlVGX1NFVF9DT1VOVChicCwgQkJUT0IobmJibGtzKSk7Ci0JWEZTX0JVRl9TRVRfVEFSR0VUKGJwLCBsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwKTsKIAogCWlmICgoZXJyb3IgPSB4ZnNfYndyaXRlKGxvZy0+bF9tcCwgYnApKSkKIAkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfYndyaXRlIiwgbG9nLT5sX21wLApAQCAtMzYwLDcgKzM1Niw3IEBACiB4bG9nX3JlY292ZXJfaW9kb25lKAogCXN0cnVjdCB4ZnNfYnVmCSpicCkKIHsKLQlpZiAoWEZTX0JVRl9HRVRFUlJPUihicCkpIHsKKwlpZiAoYnAtPmJfZXJyb3IpIHsKIAkJLyoKIAkJICogV2UncmUgbm90IGdvaW5nIHRvIGJvdGhlciBhYm91dCByZXRyeWluZwogCQkgKiB0aGlzIGR1cmluZyByZWNvdmVyeS4gT25lIHN0cmlrZSEKQEAgLTEyNjIsNyArMTI1OCw3IEBACiAJCSAqLwogCQllYWxpZ24gPSByb3VuZF9kb3duKGVuZF9ibG9jaywgc2VjdGJiKTsKIAkJaWYgKGogPT0gMCAmJiAoc3RhcnRfYmxvY2sgKyBlbmRjb3VudCA+IGVhbGlnbikpIHsKLQkJCW9mZnNldCA9IFhGU19CVUZfUFRSKGJwKSArIEJCVE9CKGVhbGlnbiAtIHN0YXJ0X2Jsb2NrKTsKKwkJCW9mZnNldCA9IGJwLT5iX2FkZHIgKyBCQlRPQihlYWxpZ24gLSBzdGFydF9ibG9jayk7CiAJCQllcnJvciA9IHhsb2dfYnJlYWRfb2Zmc2V0KGxvZywgZWFsaWduLCBzZWN0YmIsCiAJCQkJCQkJYnAsIG9mZnNldCk7CiAJCQlpZiAoZXJyb3IpCkBAIC0yMTM1LDE1ICsyMTMxLDE2IEBACiAKIAlicCA9IHhmc19idWZfcmVhZChtcC0+bV9kZGV2X3RhcmdwLCBidWZfZi0+YmxmX2Jsa25vLCBidWZfZi0+YmxmX2xlbiwKIAkJCSAgYnVmX2ZsYWdzKTsKLQlpZiAoWEZTX0JVRl9JU0VSUk9SKGJwKSkgeworCWlmICghYnApCisJCXJldHVybiBYRlNfRVJST1IoRU5PTUVNKTsKKwllcnJvciA9IGJwLT5iX2Vycm9yOworCWlmIChlcnJvcikgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19yZWNvdmVyX2RvLi4ocmVhZCMxKSIsIG1wLAogCQkJCSAgYnAsIGJ1Zl9mLT5ibGZfYmxrbm8pOwotCQllcnJvciA9IFhGU19CVUZfR0VURVJST1IoYnApOwogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWVycm9yID0gMDsKIAlpZiAoYnVmX2YtPmJsZl9mbGFncyAmIFhGU19CTEZfSU5PREVfQlVGKSB7CiAJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2lub2RlX2J1ZmZlcihtcCwgaXRlbSwgYnAsIGJ1Zl9mKTsKIAl9IGVsc2UgaWYgKGJ1Zl9mLT5ibGZfZmxhZ3MgJgpAQCAtMjIyNywxNCArMjIyNCwxNyBAQAogCiAJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgaW5fZi0+aWxmX2Jsa25vLCBpbl9mLT5pbGZfbGVuLAogCQkJICBYQkZfTE9DSyk7Ci0JaWYgKFhGU19CVUZfSVNFUlJPUihicCkpIHsKKwlpZiAoIWJwKSB7CisJCWVycm9yID0gRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwllcnJvciA9IGJwLT5iX2Vycm9yOworCWlmIChlcnJvcikgewogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGxvZ19yZWNvdmVyX2RvLi4ocmVhZCMyKSIsIG1wLAogCQkJCSAgYnAsIGluX2YtPmlsZl9ibGtubyk7Ci0JCWVycm9yID0gWEZTX0JVRl9HRVRFUlJPUihicCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCQlnb3RvIGVycm9yOwogCX0KLQllcnJvciA9IDA7CiAJQVNTRVJUKGluX2YtPmlsZl9maWVsZHMgJiBYRlNfSUxPR19DT1JFKTsKIAlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsIGluX2YtPmlsZl9ib2Zmc2V0KTsKIApAQCAtMzQzNyw3ICszNDM3LDcgQEAKIAkJCS8qCiAJCQkgKiBDaGVjayBmb3IgaGVhZGVyIHdyYXBwaW5nIGFyb3VuZCBwaHlzaWNhbCBlbmQtb2YtbG9nCiAJCQkgKi8KLQkJCW9mZnNldCA9IFhGU19CVUZfUFRSKGhicCk7CisJCQlvZmZzZXQgPSBoYnAtPmJfYWRkcjsKIAkJCXNwbGl0X2hibGtzID0gMDsKIAkJCXdyYXBwZWRfaGJsa3MgPSAwOwogCQkJaWYgKGJsa19ubyArIGhibGtzIDw9IGxvZy0+bF9sb2dCQnNpemUpIHsKQEAgLTM0OTcsNyArMzQ5Nyw3IEBACiAJCQl9IGVsc2UgewogCQkJCS8qIFRoaXMgbG9nIHJlY29yZCBpcyBzcGxpdCBhY3Jvc3MgdGhlCiAJCQkJICogcGh5c2ljYWwgZW5kIG9mIGxvZyAqLwotCQkJCW9mZnNldCA9IFhGU19CVUZfUFRSKGRicCk7CisJCQkJb2Zmc2V0ID0gZGJwLT5iX2FkZHI7CiAJCQkJc3BsaXRfYmJsa3MgPSAwOwogCQkJCWlmIChibGtfbm8gIT0gbG9nLT5sX2xvZ0JCc2l6ZSkgewogCQkJCQkvKiBzb21lIGRhdGEgaXMgYmVmb3JlIHRoZSBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19tZXNzYWdlLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfbWVzc2FnZS5oCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggMDkyZTE2YS4uMDA4MTY1NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAKIAkJWEZTX0JVRl9VTkRFTEFZV1JJVEUoc2JwKTsKIAkJWEZTX0JVRl9XUklURShzYnApOwogCQlYRlNfQlVGX1VOQVNZTkMoc2JwKTsKLQkJQVNTRVJUKFhGU19CVUZfVEFSR0VUKHNicCkgPT0gbXAtPm1fZGRldl90YXJncCk7CisJCUFTU0VSVChzYnAtPmJfdGFyZ2V0ID09IG1wLT5tX2RkZXZfdGFyZ3ApOwogCQl4ZnNiZHN0cmF0KG1wLCBzYnApOwogCQllcnJvciA9IHhmc19idWZfaW93YWl0KHNicCk7CiAJCWlmIChlcnJvcikKQEAgLTE5MzgsNyArMTkzOCw3IEBACiAJCXhmc19idWZfbG9jayhicCk7CiAJfQogCi0JWEZTX0JVRl9IT0xEKGJwKTsKKwl4ZnNfYnVmX2hvbGQoYnApOwogCUFTU0VSVChYRlNfQlVGX0lTRE9ORShicCkpOwogCXJldHVybiBicDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy94ZnNfcW0uYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBmcy94ZnMvcXVvdGEveGZzX3FtLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcW0uYwppbmRleCA0NmU1NGFkLi45YTBhYTc2IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3hmc19xbS5jCkBAIC0xMjQwLDcgKzEyNDAsNyBAQAogCWRvX2RpdihqLCBzaXplb2YoeGZzX2RxYmxrX3QpKTsKIAlBU1NFUlQobXAtPm1fcXVvdGFpbmZvLT5xaV9kcXBlcmNodW5rID09IGopOwogI2VuZGlmCi0JZGRxID0gKHhmc19kaXNrX2RxdW90X3QgKilYRlNfQlVGX1BUUihicCk7CisJZGRxID0gYnAtPmJfYWRkcjsKIAlmb3IgKGogPSAwOyBqIDwgbXAtPm1fcXVvdGFpbmZvLT5xaV9kcXBlcmNodW5rOyBqKyspIHsKIAkJLyoKIAkJICogRG8gYSBzYW5pdHkgY2hlY2ssIGFuZCBpZiBuZWVkZWQsIHJlcGFpciB0aGUgZHFibGsuIERvbid0CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtLmggYi9mcy94ZnMveGZzX3FtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9xdW90YS94ZnNfcW0uaApyZW5hbWUgdG8gZnMveGZzL3hmc19xbS5oCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jIGIvZnMveGZzL3hmc19xbV9iaHYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19xbV9iaHYuYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zdGF0cy5jIGIvZnMveGZzL3hmc19xbV9zdGF0cy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvcXVvdGEveGZzX3FtX3N0YXRzLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcW1fc3RhdHMuYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zdGF0cy5oIGIvZnMveGZzL3hmc19xbV9zdGF0cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvcXVvdGEveGZzX3FtX3N0YXRzLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcW1fc3RhdHMuaApkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3hmc19xbV9zeXNjYWxscy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmggYi9mcy94ZnMveGZzX3F1b3RhX3ByaXYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcXVvdGFfcHJpdi5oCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL3hmc19xdW90YW9wcy5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKcmVuYW1lIHRvIGZzL3hmcy94ZnNfcXVvdGFvcHMuYwppbmRleCAyOWI5ZDY0Li43ZTc2ZjUzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGFvcHMuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAicXVvdGEveGZzX3FtLmgiCisjaW5jbHVkZSAieGZzX3FtLmgiCiAjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KIAogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuYyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCmluZGV4IDhmNzZmZGYuLjM1NTYxYTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxmbGFncyk7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCW1lbXNldChYRlNfQlVGX1BUUihicCksIDAsIG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSk7CisJCQltZW1zZXQoYnAtPmJfYWRkciwgMCwgbXAtPm1fc2Iuc2JfYmxvY2tzaXplKTsKIAkJCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgMCwgbXAtPm1fc2Iuc2JfYmxvY2tzaXplIC0gMSk7CiAJCQkvKgogCQkJICogQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4KQEAgLTg4Myw3ICs4ODMsNyBAQAogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQotCUFTU0VSVChicCAmJiAhWEZTX0JVRl9HRVRFUlJPUihicCkpOworCUFTU0VSVCgheGZzX2J1Zl9nZXRlcnJvcihicCkpOwogCSpicHAgPSBicDsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Myw3ICs5NDMsNyBAQAogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWJ1ZnAgPSAoeGZzX3J0d29yZF90ICopWEZTX0JVRl9QVFIoYnApOworCWJ1ZnAgPSBicC0+Yl9hZGRyOwogCS8qCiAJICogQ29tcHV0ZSB0aGUgc3RhcnRpbmcgd29yZCdzIGFkZHJlc3MsIGFuZCBzdGFydGluZyBiaXQuCiAJICovCkBAIC05OTQsNyArOTk0LDcgQEAKIAkJCWlmIChlcnJvcikgewogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KLQkJCWIgPSBidWZwID0gKHhmc19ydHdvcmRfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwkJCWIgPSBidWZwID0gYnAtPmJfYWRkcjsKIAkJCXdvcmQgPSAwOwogCQl9IGVsc2UgewogCQkJLyoKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQliID0gYnVmcCA9ICh4ZnNfcnR3b3JkX3QgKilYRlNfQlVGX1BUUihicCk7CisJCQliID0gYnVmcCA9IGJwLT5iX2FkZHI7CiAJCQl3b3JkID0gMDsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWJ1ZnAgPSAoeGZzX3J0d29yZF90ICopWEZTX0JVRl9QVFIoYnApOworCWJ1ZnAgPSBicC0+Yl9hZGRyOwogCS8qCiAJICogR2V0IHRoZSBmaXJzdCB3b3JkJ3MgaW5kZXggJiBwb2ludCB0byBpdC4KIAkgKi8KQEAgLTEyMTAsNyArMTIxMCw3IEBACiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQlidWZwID0gKHhmc19ydHdvcmRfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwkJCWJ1ZnAgPSBicC0+Yl9hZGRyOwogCQkJd29yZCA9IFhGU19CTE9DS1dNQVNLKG1wKTsKIAkJCWIgPSAmYnVmcFt3b3JkXTsKIAkJfSBlbHNlIHsKQEAgLTEyNTYsNyArMTI1Niw3IEBACiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQlidWZwID0gKHhmc19ydHdvcmRfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwkJCWJ1ZnAgPSBicC0+Yl9hZGRyOwogCQkJd29yZCA9IFhGU19CTE9DS1dNQVNLKG1wKTsKIAkJCWIgPSAmYnVmcFt3b3JkXTsKIAkJfSBlbHNlIHsKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAJaWYgKGVycm9yKSB7CiAJCXJldHVybiBlcnJvcjsKIAl9Ci0JYnVmcCA9ICh4ZnNfcnR3b3JkX3QgKilYRlNfQlVGX1BUUihicCk7CisJYnVmcCA9IGJwLT5iX2FkZHI7CiAJLyoKIAkgKiBHZXQgdGhlIGZpcnN0IHdvcmQncyBpbmRleCAmIHBvaW50IHRvIGl0LgogCSAqLwpAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAkJCWlmIChlcnJvcikgewogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KLQkJCWIgPSBidWZwID0gKHhmc19ydHdvcmRfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwkJCWIgPSBidWZwID0gYnAtPmJfYWRkcjsKIAkJCXdvcmQgPSAwOwogCQl9IGVsc2UgewogCQkJLyoKQEAgLTE0MjksNyArMTQyOSw3IEBACiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQliID0gYnVmcCA9ICh4ZnNfcnR3b3JkX3QgKilYRlNfQlVGX1BUUihicCk7CisJCQliID0gYnVmcCA9IGJwLT5iX2FkZHI7CiAJCQl3b3JkID0gMDsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCWlmIChlcnJvcikgewogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWJ1ZnAgPSAoeGZzX3J0d29yZF90ICopWEZTX0JVRl9QVFIoYnApOworCWJ1ZnAgPSBicC0+Yl9hZGRyOwogCS8qCiAJICogQ29tcHV0ZSB0aGUgc3RhcnRpbmcgd29yZCdzIGFkZHJlc3MsIGFuZCBzdGFydGluZyBiaXQuCiAJICovCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCQkJaWYgKGVycm9yKSB7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQotCQkJZmlyc3QgPSBiID0gYnVmcCA9ICh4ZnNfcnR3b3JkX3QgKilYRlNfQlVGX1BUUihicCk7CisJCQlmaXJzdCA9IGIgPSBidWZwID0gYnAtPmJfYWRkcjsKIAkJCXdvcmQgPSAwOwogCQl9IGVsc2UgewogCQkJLyoKQEAgLTE3MzQsNyArMTczNCw3IEBACiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQlmaXJzdCA9IGIgPSBidWZwID0gKHhmc19ydHdvcmRfdCAqKVhGU19CVUZfUFRSKGJwKTsKKwkJCWZpcnN0ID0gYiA9IGJ1ZnAgPSBicC0+Yl9hZGRyOwogCQkJd29yZCA9IDA7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtMTgzMiw4ICsxODMyLDggQEAKIAkgKi8KIAlzcCA9IFhGU19TVU1QVFIobXAsIGJwLCBzbyk7CiAJKnNwICs9IGRlbHRhOwotCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgKHVpbnQpKChjaGFyICopc3AgLSAoY2hhciAqKVhGU19CVUZfUFRSKGJwKSksCi0JCSh1aW50KSgoY2hhciAqKXNwIC0gKGNoYXIgKilYRlNfQlVGX1BUUihicCkgKyBzaXplb2YoKnNwKSAtIDEpKTsKKwl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgYnAsICh1aW50KSgoY2hhciAqKXNwIC0gKGNoYXIgKilicC0+Yl9hZGRyKSwKKwkJKHVpbnQpKChjaGFyICopc3AgLSAoY2hhciAqKWJwLT5iX2FkZHIgKyBzaXplb2YoKnNwKSAtIDEpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmggYi9mcy94ZnMveGZzX3J0YWxsb2MuaAppbmRleCAwOWUxZjRmLi5mN2YzYTM1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuaAorKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuaApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZQlYRlNfU1VNT0ZGU1RPQkxPQ0sobXAscykJXAogCSgoKHMpICogKHVpbnQpc2l6ZW9mKHhmc19zdW1pbmZvX3QpKSA+PiAobXApLT5tX3NiLnNiX2Jsb2NrbG9nKQogI2RlZmluZQlYRlNfU1VNUFRSKG1wLGJwLHNvKQlcCi0JKCh4ZnNfc3VtaW5mb190ICopKChjaGFyICopWEZTX0JVRl9QVFIoYnApICsgXAorCSgoeGZzX3N1bWluZm9fdCAqKSgoYnApLT5iX2FkZHIgKyBcCiAJCSgoKHNvKSAqICh1aW50KXNpemVvZih4ZnNfc3VtaW5mb190KSkgJiBYRlNfQkxPQ0tNQVNLKG1wKSkpKQogCiAjZGVmaW5lCVhGU19CSVRUT0JMT0NLKG1wLGJpKQkoKGJpKSA+PiAobXApLT5tX2Jsa2JpdF9sb2cpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmMgYi9mcy94ZnMveGZzX3J3LmMKaW5kZXggZDZkNmZkZi4uYzk2YThhMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5jCisrKyBiL2ZzL3hmcy94ZnNfcncuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAJeGZzX2FsZXJ0KG1wLAogCQkgIkkvTyBlcnJvciBvY2N1cnJlZDogbWV0YS1kYXRhIGRldiAlcyBibG9jayAweCVsbHgiCiAJCSAiICAgICAgIChcIiVzXCIpIGVycm9yICVkIGJ1ZiBjb3VudCAlemQiLAotCQlYRlNfQlVGVEFSR19OQU1FKFhGU19CVUZfVEFSR0VUKGJwKSksCisJCXhmc19idWZfdGFyZ2V0X25hbWUoYnAtPmJfdGFyZ2V0KSwKIAkJKF9fdWludDY0X3QpYmxrbm8sIGZ1bmMsCi0JCVhGU19CVUZfR0VURVJST1IoYnApLCBYRlNfQlVGX0NPVU5UKGJwKSk7CisJCWJwLT5iX2Vycm9yLCBYRlNfQlVGX0NPVU5UKGJwKSk7CiB9CiAKIC8qCkBAIC0xMzcsOCArMTM3LDggQEAKIAlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWJwKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JZXJyb3IgPSBYRlNfQlVGX0dFVEVSUk9SKGJwKTsKLQlpZiAoYnAgJiYgIWVycm9yICYmICFYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgeworCWVycm9yID0gYnAtPmJfZXJyb3I7CisJaWYgKCFlcnJvciAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKIAkJKmJwcCA9IGJwOwogCX0gZWxzZSB7CiAJCSpicHAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zYi5oIGIvZnMveGZzL3hmc19zYi5oCmluZGV4IDFlYjJiYTUuLmNiNmFlNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfc2IuaAorKysgYi9mcy94ZnMveGZzX3NiLmgKQEAgLTUwOSw3ICs1MDksNyBAQAogCiAjZGVmaW5lIFhGU19TQl9EQUREUgkJKCh4ZnNfZGFkZHJfdCkwKSAvKiBkYWRkciBpbiBmaWxlc3lzdGVtL2FnICovCiAjZGVmaW5lCVhGU19TQl9CTE9DSyhtcCkJWEZTX0hEUl9CTE9DSyhtcCwgWEZTX1NCX0RBRERSKQotI2RlZmluZSBYRlNfQlVGX1RPX1NCUChicCkJKCh4ZnNfZHNiX3QgKilYRlNfQlVGX1BUUihicCkpCisjZGVmaW5lIFhGU19CVUZfVE9fU0JQKGJwKQkoKHhmc19kc2JfdCAqKSgoYnApLT5iX2FkZHIpKQogCiAjZGVmaW5lCVhGU19IRFJfQkxPQ0sobXAsZCkJKCh4ZnNfYWdibG9ja190KVhGU19CQl9UT19GU0JUKG1wLGQpKQogI2RlZmluZQlYRlNfREFERFJfVE9fRlNCKG1wLGQpCVhGU19BR0JfVE9fRlNCKG1wLCBcCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdGF0cy5jIGIvZnMveGZzL3hmc19zdGF0cy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19zdGF0cy5jCnJlbmFtZSB0byBmcy94ZnMveGZzX3N0YXRzLmMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N0YXRzLmggYi9mcy94ZnMveGZzX3N0YXRzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX3N0YXRzLmgKcmVuYW1lIHRvIGZzL3hmcy94ZnNfc3RhdHMuaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCnJlbmFtZSB0byBmcy94ZnMveGZzX3N1cGVyLmMKaW5kZXggOWE3MmRkYS4uMjM2NmM1NCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMveGZzX3N1cGVyLmMKQEAgLTM1Niw2ICszNTYsOCBAQAogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RFTEFZTE9HOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCBNTlRPUFRfTk9ERUxBWUxPRykpIHsKIAkJCW1wLT5tX2ZsYWdzICY9IH5YRlNfTU9VTlRfREVMQVlMT0c7CisJCQl4ZnNfd2FybihtcCwKKwkibm9kZWxheWxvZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gTGludXggMy4zIik7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9ESVNDQVJEKSkgewogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0RJU0NBUkQ7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0RJU0NBUkQpKSB7CkBAIC04NzcsMzMgKzg3OSwxNyBAQAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwogCWludAkJCWVycm9yOwogCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfRlNZTkNfVFMpOwogCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19GU1lOQ19UU19MT0dfUkVTKG1wKSwgMCwgMCwgMCk7Ci0KIAlpZiAoZXJyb3IpIHsKIAkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCS8qIHdlIG5lZWQgdG8gcmV0dXJuIHdpdGggdGhlIGxvY2sgaG9sZCBzaGFyZWQgKi8KLQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAogCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JLyoKLQkgKiBOb3RlIC0gaXQncyBwb3NzaWJsZSB0aGF0IHdlIG1pZ2h0IGhhdmUgcHVzaGVkIG91cnNlbHZlcyBvdXQgb2YgdGhlCi0JICogd2F5IGR1cmluZyB0cmFuc19yZXNlcnZlIHdoaWNoIHdvdWxkIGZsdXNoIHRoZSBpbm9kZS4gIEJ1dCB0aGVyZSdzCi0JICogbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGlub2RlIGJ1ZmZlciBoYXMgYWN0dWFsbHkgZ29uZSBvdXQgeWV0IChpdCdzCi0JICogZGVsd3JpKS4gIFBsdXMgdGhlIGJ1ZmZlciBjb3VsZCBiZSBwaW5uZWQgYW55d2F5IGlmIGl0J3MgcGFydCBvZgotCSAqIGFuIGlub2RlIGluIGFub3RoZXIgcmVjZW50IHRyYW5zYWN0aW9uLiAgU28gd2UgcGxheSBpdCBzYWZlIGFuZAotCSAqIGZpcmUgb2ZmIHRoZSB0cmFuc2FjdGlvbiBhbnl3YXkuCi0JICovCi0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCk7CisJeGZzX3RyYW5zX2lqb2luX3JlZih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQl4ZnNfaWxvY2tfZGVtb3RlKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIDApOwogfQogCiBTVEFUSUMgaW50CkBAIC05MTgsNyArOTA0LDkgQEAKIAl0cmFjZV94ZnNfd3JpdGVfaW5vZGUoaXApOwogCiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CisJCXJldHVybiAtWEZTX0VSUk9SKEVJTyk7CisJaWYgKCFpcC0+aV91cGRhdGVfY29yZSkKKwkJcmV0dXJuIDA7CiAKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKIAkJLyoKQEAgLTkyOSwxMiArOTE3LDEwIEBACiAJCSAqIG9mIHN5bmNocm9ub3VzIGxvZyBmb2NlcyBkcmFtYXRpY2FsbHkuCiAJCSAqLwogCQl4ZnNfaW9lbmRfd2FpdChpcCk7Ci0JCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCWlmIChpcC0+aV91cGRhdGVfY29yZSkgewotCQkJZXJyb3IgPSB4ZnNfbG9nX2lub2RlKGlwKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KKwkJZXJyb3IgPSB4ZnNfbG9nX2lub2RlKGlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFdlIG1ha2UgdGhpcyBub24tYmxvY2tpbmcgaWYgdGhlIGlub2RlIGlzIGNvbnRlbmRlZCwgcmV0dXJuCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oIGIvZnMveGZzL3hmc19zdXBlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCnJlbmFtZSB0byBmcy94ZnMveGZzX3N1cGVyLmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy94ZnNfc3luYy5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19zeW5jLmMKaW5kZXggZTRjOTM4YS4uNDYwNGY5MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy94ZnNfc3luYy5jCkBAIC0zMzIsNyArMzMyLDcgQEAKIAkgKiBiZXR3ZWVuIHRoZXJlIGFuZCBoZXJlLgogCSAqLwogCWJwID0geGZzX2dldHNiKG1wLCAwKTsKLQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJaWYgKHhmc19idWZfaXNwaW5uZWQoYnApKQogCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAogCXJldHVybiB4ZnNfYndyaXRlKG1wLCBicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMveGZzX3N5bmMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCnJlbmFtZSB0byBmcy94ZnMveGZzX3N5bmMuaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmMgYi9mcy94ZnMveGZzX3N5c2N0bC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19zeXNjdGwuYwpyZW5hbWUgdG8gZnMveGZzL3hmc19zeXNjdGwuYwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmggYi9mcy94ZnMveGZzX3N5c2N0bC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc19zeXNjdGwuaApyZW5hbWUgdG8gZnMveGZzL3hmc19zeXNjdGwuaApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYyBiL2ZzL3hmcy94ZnNfdHJhY2UuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5jCnJlbmFtZSB0byBmcy94ZnMveGZzX3RyYWNlLmMKaW5kZXggODhkMjVkNC4uOTAxMGNlOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYworKysgYi9mcy94ZnMveGZzX3RyYWNlLmMKQEAgLTQzLDggKzQzLDggQEAKICNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKICNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKICNpbmNsdWRlICJ4ZnNfYW9wcy5oIgotI2luY2x1ZGUgInF1b3RhL3hmc19kcXVvdF9pdGVtLmgiCi0jaW5jbHVkZSAicXVvdGEveGZzX2RxdW90LmgiCisjaW5jbHVkZSAieGZzX2RxdW90X2l0ZW0uaCIKKyNpbmNsdWRlICJ4ZnNfZHF1b3QuaCIKICNpbmNsdWRlICJ4ZnNfbG9nX3JlY292ZXIuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oIGIvZnMveGZzL3hmc190cmFjZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCnJlbmFtZSB0byBmcy94ZnMveGZzX3RyYWNlLmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDQzMjMzZTkuLmMxNWFhMjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAgKiBTcGxpY2UgdGhlIGxvZyBpdGVtIGxpc3QgaW50byB0aGUgQUlMIGF0IHRoZSBnaXZlbiBMU04uIFdlIHNwbGljZSB0byB0aGUKICAqIHRhaWwgb2YgdGhlIGdpdmVuIExTTiB0byBtYWludGFpbiBpbnNlcnQgb3JkZXIgZm9yIHB1c2ggdHJhdmVyc2Fscy4gVGhlCiAgKiBjdXJzb3IgaXMgb3B0aW9uYWwsIGFsbG93aW5nIHJlcGVhdGVkIHVwZGF0ZXMgdG8gdGhlIHNhbWUgTFNOIHRvIGF2b2lkCi0gKiByZXBlYXRlZCB0cmF2ZXJzYWxzLgorICogcmVwZWF0ZWQgdHJhdmVyc2Fscy4gIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBsaXN0LgogICovCiBzdGF0aWMgdm9pZAogeGZzX2FpbF9zcGxpY2UoCkBAIC0zMDgsNTAgKzMwOCwzOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJKmxpc3QsCiAJeGZzX2xzbl90CQlsc24pCiB7Ci0Jc3RydWN0IHhmc19sb2dfaXRlbQkqbGlwID0gY3VyID8gY3VyLT5pdGVtIDogTlVMTDsKLQlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpuZXh0X2xpcDsKKwlzdHJ1Y3QgeGZzX2xvZ19pdGVtCSpsaXA7CisKKwlBU1NFUlQoIWxpc3RfZW1wdHkobGlzdCkpOwogCiAJLyoKLQkgKiBHZXQgYSBuZXcgY3Vyc29yIGlmIHdlIGRvbid0IGhhdmUgYSBwbGFjZWhvbGRlciBvciB0aGUgZXhpc3Rpbmcgb25lCi0JICogaGFzIGJlZW4gaW52YWxpZGF0ZWQuCisJICogVXNlIHRoZSBjdXJzb3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnNlcnRpb24gcG9pbnQgaWYgb25lIGlzCisJICogcHJvdmlkZWQuICBJZiBub3QsIG9yIGlmIHRoZSBvbmUgd2UgZ290IGlzIG5vdCB2YWxpZCwKKwkgKiBmaW5kIHRoZSBwbGFjZSBpbiB0aGUgQUlMIHdoZXJlIHRoZSBpdGVtcyBiZWxvbmcuCiAJICovCi0JaWYgKCFsaXAgfHwgKF9fcHNpbnRfdClsaXAgJiAxKSB7CisJbGlwID0gY3VyID8gY3VyLT5pdGVtIDogTlVMTDsKKwlpZiAoIWxpcCB8fCAoX19wc2ludF90KSBsaXAgJiAxKQogCQlsaXAgPSBfX3hmc190cmFuc19haWxfY3Vyc29yX2xhc3QoYWlscCwgbHNuKTsKIAotCQlpZiAoIWxpcCkgewotCQkJLyogVGhlIGxpc3QgaXMgZW1wdHksIHNvIGp1c3Qgc3BsaWNlIGFuZCByZXR1cm4uICAqLwotCQkJaWYgKGN1cikKLQkJCQljdXItPml0ZW0gPSBOVUxMOwotCQkJbGlzdF9zcGxpY2UobGlzdCwgJmFpbHAtPnhhX2FpbCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9CisJLyoKKwkgKiBJZiBhIGN1cnNvciBpcyBwcm92aWRlZCwgd2Uga25vdyB3ZSdyZSBwcm9jZXNzaW5nIHRoZSBBSUwKKwkgKiBpbiBsc24gb3JkZXIsIGFuZCBmdXR1cmUgaXRlbXMgdG8gYmUgc3BsaWNlZCBpbiB3aWxsCisJICogZm9sbG93IHRoZSBsYXN0IG9uZSBiZWluZyBpbnNlcnRlZCBub3cuICBVcGRhdGUgdGhlCisJICogY3Vyc29yIHRvIHBvaW50IHRvIHRoYXQgbGFzdCBpdGVtLCBub3cgd2hpbGUgd2UgaGF2ZSBhCisJICogcmVsaWFibGUgcG9pbnRlciB0byBpdC4KKwkgKi8KKwlpZiAoY3VyKQorCQljdXItPml0ZW0gPSBsaXN0X2VudHJ5KGxpc3QtPnByZXYsIHN0cnVjdCB4ZnNfbG9nX2l0ZW0sIGxpX2FpbCk7CiAKIAkvKgotCSAqIE91ciBjdXJzb3IgcG9pbnRzIHRvIHRoZSBpdGVtIHdlIHdhbnQgdG8gaW5zZXJ0IF9hZnRlcl8sIHNvIHdlIGhhdmUKLQkgKiB0byB1cGRhdGUgdGhlIGN1cnNvciB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IHdlIGFyZSBzcGxpY2luZwotCSAqIGluIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGZvciB0aGUgbmV4dCBzcGxpY2UuCi0JICogaS5lLiBiZWZvcmUgdGhlIHNwbGljZQotCSAqCi0JICogIGxzbiAtPiBsc24gLT4gbHNuICsgeCAtPiBsc24gKyB4IC4uLgotCSAqICAgICAgICAgIF4KLQkgKiAgICAgICAgICB8IGN1cnNvciBwb2ludHMgaGVyZQotCSAqCi0JICogQWZ0ZXIgdGhlIHNwbGljZSB3ZSBoYXZlOgotCSAqCi0JICogIGxzbiAtPiBsc24gLT4gbHNuIC0+IGxzbiAtPiAuLi4uIC0+IGxzbiAtPiBsc24gKyB4IC0+IGxzbiArIHggLi4uCi0JICogICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0JICogICAgICAgICAgfCBjdXJzb3IgcG9pbnRzIGhlcmUgICAgICAgICB8IG5lZWRzIHRvIG1vdmUgaGVyZQotCSAqCi0JICogU28gd2Ugc2V0IHRoZSBjdXJzb3IgdG8gdGhlIGxhc3QgaXRlbSBpbiB0aGUgbGlzdCB0byBiZSBzcGxpY2VkCi0JICogYmVmb3JlIHdlIGV4ZWN1dGUgdGhlIHNwbGljZSwgcmVzdWx0aW5nIGluIHRoZSBjdXJzb3IgcG9pbnRpbmcgdG8KLQkgKiB0aGUgY29ycmVjdCBpdGVtIGFmdGVyIHRoZSBzcGxpY2Ugb2NjdXJzLgorCSAqIEZpbmFsbHkgcGVyZm9ybSB0aGUgc3BsaWNlLiAgVW5sZXNzIHRoZSBBSUwgd2FzIGVtcHR5LAorCSAqIGxpcCBwb2ludHMgdG8gdGhlIGl0ZW0gaW4gdGhlIEFJTCBfYWZ0ZXJfIHdoaWNoIHRoZSBuZXcKKwkgKiBpdGVtcyBzaG91bGQgZ28uICBJZiBsaXAgaXMgbnVsbCB0aGUgQUlMIHdhcyBlbXB0eSwgc28KKwkgKiB0aGUgbmV3IGl0ZW1zIGdvIGF0IHRoZSBoZWFkIG9mIHRoZSBBSUwuCiAJICovCi0JaWYgKGN1cikgewotCQluZXh0X2xpcCA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHhmc19sb2dfaXRlbSwgbGlfYWlsKTsKLQkJY3VyLT5pdGVtID0gbmV4dF9saXA7Ci0JfQotCWxpc3Rfc3BsaWNlKGxpc3QsICZsaXAtPmxpX2FpbCk7CisJaWYgKGxpcCkKKwkJbGlzdF9zcGxpY2UobGlzdCwgJmxpcC0+bGlfYWlsKTsKKwllbHNlCisJCWxpc3Rfc3BsaWNlKGxpc3QsICZhaWxwLT54YV9haWwpOwogfQogCiAvKgpAQCAtNjgyLDYgKzY3MSw3IEBACiAJaW50CQkJaTsKIAlMSVNUX0hFQUQodG1wKTsKIAorCUFTU0VSVChucl9pdGVtcyA+IDApOwkJLyogTm90IHJlcXVpcmVkLCBidXQgdHJ1ZS4gKi8KIAltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaXRlbXM7IGkrKykgewpAQCAtNzAxLDcgKzY5MSw4IEBACiAJCWxpc3RfYWRkKCZsaXAtPmxpX2FpbCwgJnRtcCk7CiAJfQogCi0JeGZzX2FpbF9zcGxpY2UoYWlscCwgY3VyLCAmdG1wLCBsc24pOworCWlmICghbGlzdF9lbXB0eSgmdG1wKSkKKwkJeGZzX2FpbF9zcGxpY2UoYWlscCwgY3VyLCAmdG1wLCBsc24pOwogCiAJaWYgKCFtbGlwX2NoYW5nZWQpIHsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggMTU1ODRmYy4uMTM3ZTJiOSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC01NCw3ICs1NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsaWRwLCAmdHAtPnRfaXRlbXMsIGxpZF90cmFucykgewogCQlibGlwID0gKHN0cnVjdCB4ZnNfYnVmX2xvZ19pdGVtICopbGlkcC0+bGlkX2l0ZW07CiAJCWlmIChibGlwLT5ibGlfaXRlbS5saV90eXBlID09IFhGU19MSV9CVUYgJiYKLQkJICAgIFhGU19CVUZfVEFSR0VUKGJsaXAtPmJsaV9idWYpID09IHRhcmdldCAmJgorCQkgICAgYmxpcC0+YmxpX2J1Zi0+Yl90YXJnZXQgPT0gdGFyZ2V0ICYmCiAJCSAgICBYRlNfQlVGX0FERFIoYmxpcC0+YmxpX2J1ZikgPT0gYmxrbm8gJiYKIAkJICAgIFhGU19CVUZfQ09VTlQoYmxpcC0+YmxpX2J1ZikgPT0gbGVuKQogCQkJcmV0dXJuIGJsaXAtPmJsaV9idWY7CkBAIC04MCw3ICs4MCw2IEBACiB7CiAJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJpcDsKIAotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChicC0+Yl90cmFuc3AgPT0gTlVMTCk7CiAKIAkvKgpAQCAtMTk0LDcgKzE5Myw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUihicCkpOworCUFTU0VSVCghYnAtPmJfZXJyb3IpOwogCiAJX3hmc190cmFuc19iam9pbih0cCwgYnAsIDEpOwogCXRyYWNlX3hmc190cmFuc19nZXRfYnVmKGJwLT5iX2ZzcHJpdik7CkBAIC0yOTMsMTAgKzI5MiwxMCBAQAogCQkJcmV0dXJuIChmbGFncyAmIFhCRl9UUllMT0NLKSA/CiAJCQkJCUVBR0FJTiA6IFhGU19FUlJPUihFTk9NRU0pOwogCi0JCWlmIChYRlNfQlVGX0dFVEVSUk9SKGJwKSAhPSAwKSB7CisJCWlmIChicC0+Yl9lcnJvcikgeworCQkJZXJyb3IgPSBicC0+Yl9lcnJvcjsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfdHJhbnNfcmVhZF9idWYiLCBtcCwKIAkJCQkJICBicCwgYmxrbm8pOwotCQkJZXJyb3IgPSBYRlNfQlVGX0dFVEVSUk9SKGJwKTsKIAkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CkBAIC0zMzAsNyArMzI5LDcgQEAKIAkJQVNTRVJUKHhmc19idWZfaXNsb2NrZWQoYnApKTsKIAkJQVNTRVJUKGJwLT5iX3RyYW5zcCA9PSB0cCk7CiAJCUFTU0VSVChicC0+Yl9mc3ByaXYgIT0gTlVMTCk7Ci0JCUFTU0VSVCgoWEZTX0JVRl9JU0VSUk9SKGJwKSkgPT0gMCk7CisJCUFTU0VSVCghYnAtPmJfZXJyb3IpOwogCQlpZiAoIShYRlNfQlVGX0lTRE9ORShicCkpKSB7CiAJCQl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfaW8oYnAsIF9SRVRfSVBfKTsKIAkJCUFTU0VSVCghWEZTX0JVRl9JU0FTWU5DKGJwKSk7CkBAIC0zODYsMTAgKzM4NSw5IEBACiAJCXJldHVybiAoZmxhZ3MgJiBYQkZfVFJZTE9DSykgPwogCQkJCQkwIDogWEZTX0VSUk9SKEVOT01FTSk7CiAJfQotCWlmIChYRlNfQlVGX0dFVEVSUk9SKGJwKSAhPSAwKSB7Ci0JICAgIFhGU19CVUZfU1VQRVJfU1RBTEUoYnApOwotCQllcnJvciA9IFhGU19CVUZfR0VURVJST1IoYnApOwotCisJaWYgKGJwLT5iX2Vycm9yKSB7CisJCWVycm9yID0gYnAtPmJfZXJyb3I7CisJCVhGU19CVUZfU1VQRVJfU1RBTEUoYnApOwogCQl4ZnNfaW9lcnJvcl9hbGVydCgieGZzX3RyYW5zX3JlYWRfYnVmIiwgbXAsCiAJCQkJICBicCwgYmxrbm8pOwogCQlpZiAodHAtPnRfZmxhZ3MgJiBYRlNfVFJBTlNfRElSVFkpCkBAIC00MzAsNyArNDI4LDcgQEAKIAlpZiAoWEZTX0JVRl9JU1NUQUxFKGJwKSAmJiBYRlNfQlVGX0lTREVMQVlXUklURShicCkpCiAJCXhmc19ub3RpY2UobXAsICJhYm91dCB0byBwb3AgYXNzZXJ0LCBicCA9PSAweCVwIiwgYnApOwogI2VuZGlmCi0JQVNTRVJUKChYRlNfQlVGX0JGTEFHUyhicCkgJiAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKSAhPQorCUFTU0VSVCgoYnAtPmJfZmxhZ3MgJiAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKSAhPQogCQkJCSAgICAgKFhCRl9TVEFMRXxYQkZfREVMV1JJKSk7CiAKIAl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWZfc2h1dChicCwgX1JFVF9JUF8pOwpAQCAtNTgxLDcgKzU3OSw2IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAgPSBicC0+Yl9mc3ByaXY7CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoYmlwICE9IE5VTEwpOwogCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwpAQCAtNjAyLDcgKzU5OSw2IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAgPSBicC0+Yl9mc3ByaXY7CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoYmlwICE9IE5VTEwpOwogCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwpAQCAtNjMxLDcgKzYyNyw2IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAgPSBicC0+Yl9mc3ByaXY7CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoYmlwICE9IE5VTEwpOwogCUFTU0VSVCgoZmlyc3QgPD0gbGFzdCkgJiYgKGxhc3QgPCBYRlNfQlVGX0NPVU5UKGJwKSkpOwpAQCAtNzAyLDcgKzY5Nyw2IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAgPSBicC0+Yl9mc3ByaXY7CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoYmlwICE9IE5VTEwpOwogCUFTU0VSVChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID4gMCk7CkBAIC03NzQsNyArNzY4LDYgQEAKIHsKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCA9IGJwLT5iX2ZzcHJpdjsKIAotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChicC0+Yl90cmFuc3AgPT0gdHApOwogCUFTU0VSVChiaXAgIT0gTlVMTCk7CiAJQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKQEAgLTc5OCw3ICs3OTEsNiBAQAogewogCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwID0gYnAtPmJfZnNwcml2OwogCi0JQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJwKSk7CiAJQVNTRVJUKGJwLT5iX3RyYW5zcCA9PSB0cCk7CiAJQVNTRVJUKGJpcCAhPSBOVUxMKTsKIAlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+YmxpX3JlZmNvdW50KSA+IDApOwpAQCAtODIzLDcgKzgxNSw2IEBACiB7CiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXAgPSBicC0+Yl9mc3ByaXY7CiAKLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKIAlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRwKTsKIAlBU1NFUlQoYmlwICE9IE5VTEwpOwogCUFTU0VSVChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID4gMCk7CkBAIC04NTEsNyArODQyLDYgQEAKIHsKIAl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCA9IGJwLT5iX2ZzcHJpdjsKIAotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwogCUFTU0VSVChicC0+Yl90cmFuc3AgPT0gdHApOwogCUFTU0VSVChiaXAgIT0gTlVMTCk7CiAJQVNTRVJUKHR5cGUgPT0gWEZTX0JMRl9VRFFVT1RfQlVGIHx8CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMgYi9mcy94ZnMveGZzX3RyYW5zX2RxdW90LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwpyZW5hbWUgdG8gZnMveGZzL3hmc190cmFuc19kcXVvdC5jCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL3hmc192bm9kZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCnJlbmFtZSB0byBmcy94ZnMveGZzX3Zub2RlLmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCA5MzIyZTEzLi41MWZjNDI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC04Myw3ICs4Myw5IEBACiAKIAkJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgZCwgQlRPQkIoYnl0ZV9jbnQpLAogCQkJCSAgWEJGX0xPQ0sgfCBYQkZfTUFQUEVEIHwgWEJGX0RPTlRfQkxPQ0spOwotCQllcnJvciA9IFhGU19CVUZfR0VURVJST1IoYnApOworCQlpZiAoIWJwKQorCQkJcmV0dXJuIFhGU19FUlJPUihFTk9NRU0pOworCQllcnJvciA9IGJwLT5iX2Vycm9yOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4ZnNfcmVhZGxpbmsiLAogCQkJCSAgaXAtPmlfbW91bnQsIGJwLCBYRlNfQlVGX0FERFIoYnApKTsKQEAgLTk0LDcgKzk2LDcgQEAKIAkJCWJ5dGVfY250ID0gcGF0aGxlbjsKIAkJcGF0aGxlbiAtPSBieXRlX2NudDsKIAotCQltZW1jcHkobGluaywgWEZTX0JVRl9QVFIoYnApLCBieXRlX2NudCk7CisJCW1lbWNweShsaW5rLCBicC0+Yl9hZGRyLCBieXRlX2NudCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwogCX0KIApAQCAtMTY0OCwxMyArMTY1MCwxMyBAQAogCQkJYnl0ZV9jbnQgPSBYRlNfRlNCX1RPX0IobXAsIG12YWxbbl0uYnJfYmxvY2tjb3VudCk7CiAJCQlicCA9IHhmc190cmFuc19nZXRfYnVmKHRwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLAogCQkJCQkgICAgICAgQlRPQkIoYnl0ZV9jbnQpLCAwKTsKLQkJCUFTU0VSVChicCAmJiAhWEZTX0JVRl9HRVRFUlJPUihicCkpOworCQkJQVNTRVJUKCF4ZnNfYnVmX2dldGVycm9yKGJwKSk7CiAJCQlpZiAocGF0aGxlbiA8IGJ5dGVfY250KSB7CiAJCQkJYnl0ZV9jbnQgPSBwYXRobGVuOwogCQkJfQogCQkJcGF0aGxlbiAtPSBieXRlX2NudDsKIAotCQkJbWVtY3B5KFhGU19CVUZfUFRSKGJwKSwgY3VyX2NodW5rLCBieXRlX2NudCk7CisJCQltZW1jcHkoYnAtPmJfYWRkciwgY3VyX2NodW5rLCBieXRlX2NudCk7CiAJCQljdXJfY2h1bmsgKz0gYnl0ZV9jbnQ7CiAKIAkJCXhmc190cmFuc19sb2dfYnVmKHRwLCBicCwgMCwgYnl0ZV9jbnQgLSAxKTsKQEAgLTE5OTksNyArMjAwMSw3IEBACiAJCQkJCSAgbXAsIGJwLCBYRlNfQlVGX0FERFIoYnApKTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1lbXNldChYRlNfQlVGX1BUUihicCkgKworCQltZW1zZXQoYnAtPmJfYWRkciArCiAJCQkob2Zmc2V0IC0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLmJyX3N0YXJ0b2ZmKSksCiAJCSAgICAgIDAsIGxhc3RvZmZzZXQgLSBvZmZzZXQgKyAxKTsKIAkJWEZTX0JVRl9VTkRPTkUoYnApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYyBiL2ZzL3hmcy94ZnNfeGF0dHIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYwpyZW5hbWUgdG8gZnMveGZzL3hmc194YXR0ci5jCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKaW5kZXggMzA5MDQ3MS4uZTQ5YzM2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaApAQCAtMTI4LDcgKzEyOCw3IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX2RvY2tfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2hvdHBsdWdfZG9ja19kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLAotCQkJCQlzdHJ1Y3QgYWNwaV9kb2NrX29wcyAqb3BzLAorCQkJCQljb25zdCBzdHJ1Y3QgYWNwaV9kb2NrX29wcyAqb3BzLAogCQkJCQl2b2lkICpjb250ZXh0KTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfaG90cGx1Z19kb2NrX2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCAyZWQwYTg0Li5mNTU0YTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIEN1cnJlbnQgQUNQSUNBIHN1YnN5c3RlbSB2ZXJzaW9uIGluIFlZWVlNTUREIGZvcm1hdCAqLwogCi0jZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDExMDQxMworI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAxMTA2MjMKIAogI2luY2x1ZGUgImFjdHlwZXMuaCIKICNpbmNsdWRlICJhY3RibC5oIgpAQCAtNjksNiArNjksNyBAQAogZXh0ZXJuIHUzMiBhY3BpX2dibF9lbmFibGVfYW1sX2RlYnVnX29iamVjdDsKIGV4dGVybiB1OCBhY3BpX2dibF9jb3B5X2RzZHRfbG9jYWxseTsKIGV4dGVybiB1OCBhY3BpX2dibF90cnVuY2F0ZV9pb19hZGRyZXNzZXM7CitleHRlcm4gdTggYWNwaV9nYmxfZGlzYWJsZV9hdXRvX3JlcGFpcjsKIAogZXh0ZXJuIHUzMiBhY3BpX2N1cnJlbnRfZ3BlX2NvdW50OwogZXh0ZXJuIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgYWNwaV9nYmxfRkFEVDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hcGVpLmggYi9pbmNsdWRlL2FjcGkvYXBlaS5oCmluZGV4IGU2N2I1MjMuLjUxYTUyN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hcGVpLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FwZWkuaApAQCAtMTgsNiArMTgsMTEgQEAKIAogZXh0ZXJuIGludCBoZXN0X2Rpc2FibGU7CiBleHRlcm4gaW50IGVyc3RfZGlzYWJsZTsKKyNpZmRlZiBDT05GSUdfQUNQSV9BUEVJX0dIRVMKK2V4dGVybiBpbnQgZ2hlc19kaXNhYmxlOworI2Vsc2UKKyNkZWZpbmUgZ2hlc19kaXNhYmxlIDEKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FDUElfQVBFSQogdm9pZCBfX2luaXQgYWNwaV9oZXN0X2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggYmE0OTI4Yy4uNjcwNTVmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMzM3LDcgKzMzNyw3IEBACiAKIC8qIGluIHByb2Nlc3Nvcl90aGVybWFsLmMgKi8KIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfbGltaXRfaW5mbyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKLWV4dGVybiBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgcHJvY2Vzc29yX2Nvb2xpbmdfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyBwcm9jZXNzb3JfY29vbGluZ19vcHM7CiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiB2b2lkIGFjcGlfdGhlcm1hbF9jcHVmcmVxX2luaXQodm9pZCk7CiB2b2lkIGFjcGlfdGhlcm1hbF9jcHVmcmVxX2V4aXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaAppbmRleCBmYjJkNjNmLi5hZWE5ZTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmgKQEAgLTM5LDcgKzM5LDcgQEAKIH0pCiAKICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZykJCQkJCQlcCi0oewlzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7CQkJCQlcCisoewljb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7CQkJCQlcCiAJc3RydWN0IHBnbGlzdF9kYXRhICpfX3BnZGF0ID0gTk9ERV9EQVRBKHBhZ2VfdG9fbmlkKF9fcGcpKTsJXAogCSh1bnNpZ25lZCBsb25nKShfX3BnIC0gX19wZ2RhdC0+bm9kZV9tZW1fbWFwKSArCQkJXAogCSBfX3BnZGF0LT5ub2RlX3N0YXJ0X3BmbjsJCQkJCVwKQEAgLTU3LDcgKzU3LDcgQEAKICAqIHNlY3Rpb25baV0uc2VjdGlvbl9tZW1fbWFwID09IG1lbV9tYXAncyBhZGRyZXNzIC0gc3RhcnRfcGZuOwogICovCiAjZGVmaW5lIF9fcGFnZV90b19wZm4ocGcpCQkJCQlcCi0oewlzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7CQkJCVwKKyh7CWNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTsJCQkJXAogCWludCBfX3NlYyA9IHBhZ2VfdG9fc2VjdGlvbihfX3BnKTsJCQlcCiAJKHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTsJXAogfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCmluZGV4IDRmNzY5NTkzLi5mNGMzOGQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC0xNDMsNyArMTQzLDcgQEAKIAogLyogZnMvbmZzY3RsLmMgKi8KICNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIDQyCi1fX1NDX0NPTVAoX19OUl9uZnNzZXJ2Y3RsLCBzeXNfbmZzc2VydmN0bCwgY29tcGF0X3N5c19uZnNzZXJ2Y3RsKQorX19TWVNDQUxMKF9fTlJfbmZzc2VydmN0bCwgc3lzX25pX3N5c2NhbGwpCiAKIC8qIGZzL29wZW4uYyAqLwogI2RlZmluZSBfX05SMzI2NF9zdGF0ZnMgNDMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDMzZDEyZjguLjQ0MzM1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMjA1LDYgKzIwNSw4IEBACiAJZW51bSBzdWJwaXhlbF9vcmRlciBzdWJwaXhlbF9vcmRlcjsKIAl1MzIgY29sb3JfZm9ybWF0czsKIAorCXU4IGNlYV9yZXY7CisKIAljaGFyICpyYXdfZWRpZDsgLyogaWYgYW55ICovCiB9OwogCkBAIC04MDIsNiArODA0LDcgQEAKIGV4dGVybiBpbnQgZHJtX2FkZF9tb2Rlc19ub2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSk7CiAKK2V4dGVybiBpbnQgZHJtX2VkaWRfaGVhZGVyX2lzX3ZhbGlkKGNvbnN0IHU4ICpyYXdfZWRpZCk7CiBleHRlcm4gYm9vbCBkcm1fZWRpZF9pc192YWxpZChzdHJ1Y3QgZWRpZCAqZWRpZCk7CiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGVfZmluZF9kbXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgaW50IGhzaXplLCBpbnQgdnNpemUsIGludCBmcmVzaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAppbmRleCBjNGQ2ZGJmLi4yOGMwZDExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKQEAgLTIzNyw3ICsyMzcsNyBAQAogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fR0VUX0FQRVJUVVJFCURSTV9JT1IgIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0dFVF9BUEVSVFVSRSwgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfYXBlcnR1cmUpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9QSVBFX0ZST01fQ1JUQ19JRCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1BJUEVfRlJPTV9DUlRDX0lELCBzdHJ1Y3QgZHJtX2k5MTVfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fTUFEVklTRQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX01BRFZJU0UsIHN0cnVjdCBkcm1faTkxNV9nZW1fbWFkdmlzZSkKLSNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lPQ1RMX0k5MTVfT1ZFUkxBWV9BVFRSUywgc3RydWN0IGRybV9pbnRlbF9vdmVybGF5X3B1dF9pbWFnZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfT1ZFUkxBWV9QVVRfSU1BR0UsIHN0cnVjdCBkcm1faW50ZWxfb3ZlcmxheV9wdXRfaW1hZ2UpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X09WRVJMQVlfQVRUUlMJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X09WRVJMQVlfQVRUUlMsIHN0cnVjdCBkcm1faW50ZWxfb3ZlcmxheV9hdHRycykKIAogLyogQWxsb3cgZHJpdmVycyB0byBzdWJtaXQgYmF0Y2hidWZmZXJzIGRpcmVjdGx5IHRvIGhhcmR3YXJlLCByZWx5aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IDFkZWIyYTcuLjYwMDFiNGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtMjM4LDcgKzIzOCw2IEBACiBleHRlcm4gaW50IHBucGFjcGlfZGlzYWJsZWQ7CiAKICNkZWZpbmUgUFhNX0lOVkFMCSgtMSkKLSNkZWZpbmUgTklEX0lOVkFMCSgtMSkKIAogaW50IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMpOwogCkBAIC0yODAsNiArMjc5LDggQEAKICNkZWZpbmUgT1NDX1NCX0NQVUhQX09TVF9TVVBQT1JUCTgKICNkZWZpbmUgT1NDX1NCX0FQRUlfU1VQUE9SVAkJMTYKIAorZXh0ZXJuIGJvb2wgb3NjX3NiX2FwZWlfc3VwcG9ydF9hY2tlZDsKKwogLyogUENJIGRlZmluZWQgX09TQyBiaXRzICovCiAvKiBfT1NDIERXMSBEZWZpbml0aW9uIChPUyBTdXBwb3J0IEZpZWxkcykgKi8KICNkZWZpbmUgT1NDX0VYVF9QQ0lfQ09ORklHX1NVUFBPUlQJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWVyLmggYi9pbmNsdWRlL2xpbnV4L2Flci5oCmluZGV4IDg0MTRkZTIuLjU0NGFiZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9hZXIuaApAQCAtNTEsNSArNTEsOCBAQAogCiBleHRlcm4gdm9pZCBjcGVyX3ByaW50X2Flcihjb25zdCBjaGFyICpwcmVmaXgsIGludCBjcGVyX3NldmVyaXR5LAogCQkJICAgc3RydWN0IGFlcl9jYXBhYmlsaXR5X3JlZ3MgKmFlcik7CitleHRlcm4gaW50IGNwZXJfc2V2ZXJpdHlfdG9fYWVyKGludCBjcGVyX3NldmVyaXR5KTsKK2V4dGVybiB2b2lkIGFlcl9yZWNvdmVyX3F1ZXVlKGludCBkb21haW4sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCBzZXZlcml0eSk7CiAjZW5kaWYgLy9fQUVSX0hfCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9wbDA4eC5oIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDh4LmgKaW5kZXggMzExMTM4NS4uZTZlMjhmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDh4LmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDh4LmgKQEAgLTE3Miw4ICsxNzIsMTEgQEAKIAlpbnQgcGh5Y2hhbl9ob2xkOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwogCWNoYXIgKm5hbWU7Ci0Jc3RydWN0IHBsMDh4X2NoYW5uZWxfZGF0YSAqY2Q7Ci0JZG1hX2FkZHJfdCBydW50aW1lX2FkZHI7CisJY29uc3Qgc3RydWN0IHBsMDh4X2NoYW5uZWxfZGF0YSAqY2Q7CisJZG1hX2FkZHJfdCBzcmNfYWRkcjsKKwlkbWFfYWRkcl90IGRzdF9hZGRyOworCXUzMiBzcmNfY2N0bDsKKwl1MzIgZHN0X2NjdGw7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JcnVudGltZV9kaXJlY3Rpb247CiAJZG1hX2Nvb2tpZV90IGxjOwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZF9saXN0OwpAQCAtMjAyLDcgKzIwNSw3IEBACiAgKiBAbWVtX2J1c2VzOiBidXNlcyB3aGljaCBtZW1vcnkgY2FuIGJlIGFjY2Vzc2VkIGZyb206IFBMMDhYX0FIQjEgfCBQTDA4WF9BSEIyCiAgKi8KIHN0cnVjdCBwbDA4eF9wbGF0Zm9ybV9kYXRhIHsKLQlzdHJ1Y3QgcGwwOHhfY2hhbm5lbF9kYXRhICpzbGF2ZV9jaGFubmVsczsKKwljb25zdCBzdHJ1Y3QgcGwwOHhfY2hhbm5lbF9kYXRhICpzbGF2ZV9jaGFubmVsczsKIAl1bnNpZ25lZCBpbnQgbnVtX3NsYXZlX2NoYW5uZWxzOwogCXN0cnVjdCBwbDA4eF9jaGFubmVsX2RhdGEgbWVtY3B5X2NoYW5uZWw7CiAJaW50ICgqZ2V0X3NpZ25hbCkoc3RydWN0IHBsMDh4X2RtYV9jaGFuICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iYXNpY19tbWlvX2dwaW8uaCBiL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmgKaW5kZXggOTg5OTljZjEuLmZlYjkxMjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmgKQEAgLTYzLDE1ICs2MywxMCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBiZ3Bpb19jaGlwLCBnYyk7CiB9CiAKLWludCBfX2RldmV4aXQgYmdwaW9fcmVtb3ZlKHN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MpOwotaW50IF9fZGV2aW5pdCBiZ3Bpb19pbml0KHN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MsCi0JCQkgc3RydWN0IGRldmljZSAqZGV2LAotCQkJIHVuc2lnbmVkIGxvbmcgc3osCi0JCQkgdm9pZCBfX2lvbWVtICpkYXQsCi0JCQkgdm9pZCBfX2lvbWVtICpzZXQsCi0JCQkgdm9pZCBfX2lvbWVtICpjbHIsCi0JCQkgdm9pZCBfX2lvbWVtICpkaXJvdXQsCi0JCQkgdm9pZCBfX2lvbWVtICpkaXJpbiwKLQkJCSBib29sIGJpZ19lbmRpYW4pOworaW50IGJncGlvX3JlbW92ZShzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjKTsKK2ludCBiZ3Bpb19pbml0KHN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBzeiwgdm9pZCBfX2lvbWVtICpkYXQsIHZvaWQgX19pb21lbSAqc2V0LAorCSAgICAgICB2b2lkIF9faW9tZW0gKmNsciwgdm9pZCBfX2lvbWVtICpkaXJvdXQsIHZvaWQgX19pb21lbSAqZGlyaW4sCisJICAgICAgIGJvb2wgYmlnX2VuZGlhbik7CiAKICNlbmRpZiAvKiBfX0JBU0lDX01NSU9fR1BJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaAppbmRleCAzYmFjNDRjLi43YWQ2MzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0bWFwLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogZXh0ZXJuIHZvaWQgYml0bWFwX2NvcHlfbGUodm9pZCAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7CiBleHRlcm4gaW50IGJpdG1hcF9vcmRfdG9fcG9zKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IG4sIGludCBiaXRzKTsKIAorI2RlZmluZSBCSVRNQVBfRklSU1RfV09SRF9NQVNLKHN0YXJ0KSAofjBVTCA8PCAoKHN0YXJ0KSAlIEJJVFNfUEVSX0xPTkcpKQogI2RlZmluZSBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpCQkJCQlcCiAoCQkJCQkJCQkJXAogCSgobmJpdHMpICUgQklUU19QRVJfTE9ORykgPwkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKaW5kZXggNjM5NTY5Mi4uMzJmMDA3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCkBAIC0xMjUsNyArMTI1LDExIEBACiAJX19SRVFfU1lOQywJCS8qIHJlcXVlc3QgaXMgc3luYyAoc3luYyB3cml0ZSBvciByZWFkKSAqLwogCV9fUkVRX01FVEEsCQkvKiBtZXRhZGF0YSBpbyByZXF1ZXN0ICovCiAJX19SRVFfRElTQ0FSRCwJCS8qIHJlcXVlc3QgdG8gZGlzY2FyZCBzZWN0b3JzICovCisJX19SRVFfU0VDVVJFLAkJLyogc2VjdXJlIGRpc2NhcmQgKHVzZWQgd2l0aCBfX1JFUV9ESVNDQVJEKSAqLworCiAJX19SRVFfTk9JRExFLAkJLyogZG9uJ3QgYW50aWNpcGF0ZSBtb3JlIElPIGFmdGVyIHRoaXMgb25lICovCisJX19SRVFfRlVBLAkJLyogZm9yY2VkIHVuaXQgYWNjZXNzICovCisJX19SRVFfRkxVU0gsCQkvKiByZXF1ZXN0IGZvciBjYWNoZSBmbHVzaCAqLwogCiAJLyogYmlvIG9ubHkgZmxhZ3MgKi8KIAlfX1JFUV9SQUhFQUQsCQkvKiByZWFkIGFoZWFkLCBjYW4gZmFpbCBhbnl0aW1lICovCkBAIC0xMzUsNyArMTM5LDYgQEAKIAkvKiByZXF1ZXN0IG9ubHkgZmxhZ3MgKi8KIAlfX1JFUV9TT1JURUQsCQkvKiBlbGV2YXRvciBrbm93cyBhYm91dCB0aGlzIHJlcXVlc3QgKi8KIAlfX1JFUV9TT0ZUQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgaW9zY2hlZHVsZXIgKi8KLQlfX1JFUV9GVUEsCQkvKiBmb3JjZWQgdW5pdCBhY2Nlc3MgKi8KIAlfX1JFUV9OT01FUkdFLAkJLyogZG9uJ3QgdG91Y2ggdGhpcyBmb3IgbWVyZ2luZyAqLwogCV9fUkVRX1NUQVJURUQsCQkvKiBkcml2ZSBhbHJlYWR5IG1heSBoYXZlIHN0YXJ0ZWQgdGhpcyBvbmUgKi8KIAlfX1JFUV9ET05UUFJFUCwJCS8qIGRvbid0IGNhbGwgcHJlcCBmb3IgdGhpcyBvbmUgKi8KQEAgLTE0NiwxMSArMTQ5LDkgQEAKIAlfX1JFUV9QUkVFTVBULAkJLyogc2V0IGZvciAiaWRlX3ByZWVtcHQiIHJlcXVlc3RzICovCiAJX19SRVFfQUxMT0NFRCwJCS8qIHJlcXVlc3QgY2FtZSBmcm9tIG91ciBhbGxvYyBwb29sICovCiAJX19SRVFfQ09QWV9VU0VSLAkvKiBjb250YWlucyBjb3BpZXMgb2YgdXNlciBwYWdlcyAqLwotCV9fUkVRX0ZMVVNILAkJLyogcmVxdWVzdCBmb3IgY2FjaGUgZmx1c2ggKi8KIAlfX1JFUV9GTFVTSF9TRVEsCS8qIHJlcXVlc3QgZm9yIGZsdXNoIHNlcXVlbmNlICovCiAJX19SRVFfSU9fU1RBVCwJCS8qIGFjY291bnQgSS9PIHN0YXQgKi8KIAlfX1JFUV9NSVhFRF9NRVJHRSwJLyogbWVyZ2Ugb2YgZGlmZmVyZW50IHR5cGVzLCBmYWlsIHNlcGFyYXRlbHkgKi8KLQlfX1JFUV9TRUNVUkUsCQkvKiBzZWN1cmUgZGlzY2FyZCAodXNlZCB3aXRoIF9fUkVRX0RJU0NBUkQpICovCiAJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDBlNjdjNDUuLjg0YjE1ZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMzAsNiArMzAsNyBAQAogc3RydWN0IGJsa190cmFjZTsKIHN0cnVjdCByZXF1ZXN0Owogc3RydWN0IHNnX2lvX2hkcjsKK3N0cnVjdCBic2dfam9iOwogCiAjZGVmaW5lIEJMS0RFVl9NSU5fUlEJNAogI2RlZmluZSBCTEtERVZfTUFYX1JRCTEyOAkvKiBEZWZhdWx0IG1heGltdW0gKi8KQEAgLTExNyw2ICsxMTgsNyBAQAogCQlzdHJ1Y3QgewogCQkJdW5zaWduZWQgaW50CQlzZXE7CiAJCQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJCQlycV9lbmRfaW9fZm4JCSpzYXZlZF9lbmRfaW87CiAJCX0gZmx1c2g7CiAJfTsKIApAQCAtMjA5LDYgKzIxMSw3IEBACiB0eXBlZGVmIHZvaWQgKHNvZnRpcnFfZG9uZV9mbikoc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIGludCAoZG1hX2RyYWluX25lZWRlZF9mbikoc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIGludCAobGxkX2J1c3lfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Cit0eXBlZGVmIGludCAoYnNnX2pvYl9mbikgKHN0cnVjdCBic2dfam9iICopOwogCiBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gewogCUJMS19FSF9OT1RfSEFORExFRCwKQEAgLTM3NSw2ICszNzgsOCBAQAogCXN0cnVjdCBtdXRleAkJc3lzZnNfbG9jazsKIAogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfQlNHKQorCWJzZ19qb2JfZm4JCSpic2dfam9iX2ZuOworCWludAkJCWJzZ19qb2Jfc2l6ZTsKIAlzdHJ1Y3QgYnNnX2NsYXNzX2RldmljZSBic2dfZGV2OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDhjN2MyZGUuLjhlOWU0YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTQsNyArMTQsNyBAQAogZW51bSBibGt0cmFjZV9jYXQgewogCUJMS19UQ19SRUFECT0gMSA8PCAwLAkvKiByZWFkcyAqLwogCUJMS19UQ19XUklURQk9IDEgPDwgMSwJLyogd3JpdGVzICovCi0JQkxLX1RDX0JBUlJJRVIJPSAxIDw8IDIsCS8qIGJhcnJpZXIgKi8KKwlCTEtfVENfRkxVU0gJPSAxIDw8IDIsCS8qIGZsdXNoICovCiAJQkxLX1RDX1NZTkMJPSAxIDw8IDMsCS8qIHN5bmMgSU8gKi8KIAlCTEtfVENfU1lOQ0lPCT0gQkxLX1RDX1NZTkMsCiAJQkxLX1RDX1FVRVVFCT0gMSA8PCA0LAkvKiBxdWV1ZWluZy9tZXJnaW5nICovCkBAIC0yOCw4ICsyOCw5IEBACiAJQkxLX1RDX01FVEEJPSAxIDw8IDEyLAkvKiBtZXRhZGF0YSAqLwogCUJMS19UQ19ESVNDQVJECT0gMSA8PCAxMywJLyogZGlzY2FyZCByZXF1ZXN0cyAqLwogCUJMS19UQ19EUlZfREFUQQk9IDEgPDwgMTQsCS8qIGJpbmFyeSBwZXItZHJpdmVyIGRhdGEgKi8KKwlCTEtfVENfRlVBCT0gMSA8PCAxNSwJLyogZnVhIHJlcXVlc3RzICovCiAKLQlCTEtfVENfRU5ECT0gMSA8PCAxNSwJLyogb25seSAxNi1iaXRzLCByZW1pbmRlciAqLworCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiB3ZSd2ZSBydW4gb3V0IG9mIGJpdHMhICovCiB9OwogCiAjZGVmaW5lIEJMS19UQ19TSElGVAkJKDE2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2ctbGliLmggYi9pbmNsdWRlL2xpbnV4L2JzZy1saWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTVhYjhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ic2ctbGliLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBCU0cgaGVscGVyIGxpYnJhcnkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICAgSmFtZXMgU21hcnQsIEVtdWxleCBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAxMSAgIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDExICAgTWlrZSBDaHJpc3RpZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworI2lmbmRlZiBfQkxLX0JTR18KKyNkZWZpbmUgX0JMS19CU0dfCisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKworc3RydWN0IHJlcXVlc3Q7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHNjYXR0ZXJsaXN0Oworc3RydWN0IHJlcXVlc3RfcXVldWU7CisKK3N0cnVjdCBic2dfYnVmZmVyIHsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW47CisJaW50IHNnX2NudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3Q7Cit9OworCitzdHJ1Y3QgYnNnX2pvYiB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisKKwkvKiBUcmFuc3BvcnQvZHJpdmVyIHNwZWNpZmljIHJlcXVlc3QvcmVwbHkgc3RydWN0cyAqLworCXZvaWQgKnJlcXVlc3Q7CisJdm9pZCAqcmVwbHk7CisKKwl1bnNpZ25lZCBpbnQgcmVxdWVzdF9sZW47CisJdW5zaWduZWQgaW50IHJlcGx5X2xlbjsKKwkvKgorCSAqIE9uIGVudHJ5IDogcmVwbHlfbGVuIGluZGljYXRlcyB0aGUgYnVmZmVyIHNpemUgYWxsb2NhdGVkIGZvcgorCSAqIHRoZSByZXBseS4KKwkgKgorCSAqIFVwb24gY29tcGxldGlvbiA6IHRoZSBtZXNzYWdlIGhhbmRsZXIgbXVzdCBzZXQgcmVwbHlfbGVuCisJICogIHRvIGluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgcmVwbHkgdG8gYmUgcmV0dXJuZWQgdG8gdGhlCisJICogIGNhbGxlci4KKwkgKi8KKworCS8qIERNQSBwYXlsb2FkcyBmb3IgdGhlIHJlcXVlc3QvcmVzcG9uc2UgKi8KKwlzdHJ1Y3QgYnNnX2J1ZmZlciByZXF1ZXN0X3BheWxvYWQ7CisJc3RydWN0IGJzZ19idWZmZXIgcmVwbHlfcGF5bG9hZDsKKworCXZvaWQgKmRkX2RhdGE7CQkvKiBVc2VkIGZvciBkcml2ZXItc3BlY2lmaWMgc3RvcmFnZSAqLworfTsKKwordm9pZCBic2dfam9iX2RvbmUoc3RydWN0IGJzZ19qb2IgKmpvYiwgaW50IHJlc3VsdCwKKwkJICB1bnNpZ25lZCBpbnQgcmVwbHlfcGF5bG9hZF9yY3ZfbGVuKTsKK2ludCBic2dfc2V0dXBfcXVldWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwKKwkJICAgIGJzZ19qb2JfZm4gKmpvYl9mbiwgaW50IGRkX2pvYl9zaXplKTsKK3ZvaWQgYnNnX3JlcXVlc3RfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwordm9pZCBic2dfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKK3ZvaWQgYnNnX2dvb3NlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaAppbmRleCA4Nzc5NDA1Li5jNmU3NTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTQzOCw3ICs0MzgsNiBAQAogCQkJCSBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqdHNwLAogCQkJCSBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICpzaWdtYXNrLAogCQkJCSBjb21wYXRfc2l6ZV90IHNpZ3NldHNpemUpOwotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfbmZzc2VydmN0bChpbnQgY21kLCB2b2lkICpub3R1c2VkLCB2b2lkICpub3R1c2VkMik7CiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zaWduYWxmZDQoaW50IHVmZCwKIAkJCQkgICAgIGNvbnN0IGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnNpZ21hc2ssCiAJCQkJICAgICBjb21wYXRfc2l6ZV90IHNpZ3NldHNpemUsIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAppbmRleCAwYzY5YWQ4Li4zYzljNTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogCWNvbm5lY3Rvci5oCiAgKiAKLSAqIDIwMDQtMjAwNSBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CisgKiAyMDA0LTIwMDUgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmggYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAppbmRleCAzNjcxOWVhLi5iNTE2MjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaApAQCAtMTIyLDYgKzEyMiw4IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0NQVV9JRExFCitleHRlcm4gdm9pZCBkaXNhYmxlX2NwdWlkbGUodm9pZCk7CitleHRlcm4gaW50IGNwdWlkbGVfaWRsZV9jYWxsKHZvaWQpOwogCiBleHRlcm4gaW50IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2KTsKIHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqY3B1aWRsZV9nZXRfZHJpdmVyKHZvaWQpOwpAQCAtMTM1LDYgKzEzNyw4IEBACiBleHRlcm4gdm9pZCBjcHVpZGxlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KTsKIAogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2NwdWlkbGUodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBjcHVpZGxlX2lkbGVfY2FsbCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2KQoge3JldHVybiAtRU5PREVWOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDQ4ZTgyYWYuLjQwMzA4OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0yNjUsMTAgKzI2NSwxMSBAQAogLyoqCiAgKiBjdXJyZW50X2NyZWQgLSBBY2Nlc3MgdGhlIGN1cnJlbnQgdGFzaydzIHN1YmplY3RpdmUgY3JlZGVudGlhbHMKICAqCi0gKiBBY2Nlc3MgdGhlIHN1YmplY3RpdmUgY3JlZGVudGlhbHMgb2YgdGhlIGN1cnJlbnQgdGFzay4KKyAqIEFjY2VzcyB0aGUgc3ViamVjdGl2ZSBjcmVkZW50aWFscyBvZiB0aGUgY3VycmVudCB0YXNrLiAgUkNVLXNhZmUsCisgKiBzaW5jZSBub2JvZHkgZWxzZSBjYW4gbW9kaWZ5IGl0LgogICovCiAjZGVmaW5lIGN1cnJlbnRfY3JlZCgpIFwKLQkoY3VycmVudC0+Y3JlZCkKKwlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN1cnJlbnQtPmNyZWQsIDEpCiAKIC8qKgogICogX190YXNrX2NyZWQgLSBBY2Nlc3MgYSB0YXNrJ3Mgb2JqZWN0aXZlIGNyZWRlbnRpYWxzCkBAIC0zMDYsOCArMzA3LDggQEAKICNkZWZpbmUgZ2V0X2N1cnJlbnRfdXNlcigpCQkJCVwKICh7CQkJCQkJCVwKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKl9fdTsJCQlcCi0Jc3RydWN0IGNyZWQgKl9fY3JlZDsJCQkJXAotCV9fY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBjdXJyZW50X2NyZWQoKTsJXAorCWNvbnN0IHN0cnVjdCBjcmVkICpfX2NyZWQ7CQkJXAorCV9fY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwkJCVwKIAlfX3UgPSBnZXRfdWlkKF9fY3JlZC0+dXNlcik7CQkJXAogCV9fdTsJCQkJCQlcCiB9KQpAQCAtMzIxLDggKzMyMiw4IEBACiAjZGVmaW5lIGdldF9jdXJyZW50X2dyb3VwcygpCQkJCVwKICh7CQkJCQkJCVwKIAlzdHJ1Y3QgZ3JvdXBfaW5mbyAqX19ncm91cHM7CQkJXAotCXN0cnVjdCBjcmVkICpfX2NyZWQ7CQkJCVwKLQlfX2NyZWQgPSAoc3RydWN0IGNyZWQgKikgY3VycmVudF9jcmVkKCk7CVwKKwljb25zdCBzdHJ1Y3QgY3JlZCAqX19jcmVkOwkJCVwKKwlfX2NyZWQgPSBjdXJyZW50X2NyZWQoKTsJCQlcCiAJX19ncm91cHMgPSBnZXRfZ3JvdXBfaW5mbyhfX2NyZWQtPmdyb3VwX2luZm8pOwlcCiAJX19ncm91cHM7CQkJCQlcCiB9KQpAQCAtMzQxLDcgKzM0Miw3IEBACiAKICNkZWZpbmUgY3VycmVudF9jcmVkX3h4eCh4eHgpCQkJXAogKHsJCQkJCQlcCi0JY3VycmVudC0+Y3JlZC0+eHh4OwkJCVwKKwljdXJyZW50X2NyZWQoKS0+eHh4OwkJCVwKIH0pCiAKICNkZWZpbmUgY3VycmVudF91aWQoKQkJKGN1cnJlbnRfY3JlZF94eHgodWlkKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3J5cHRvaGFzaC5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG9oYXNoLmgKaW5kZXggZWM3OGE0Yi4uMmNkOWYxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG9oYXNoLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcnlwdG9oYXNoLmgKQEAgLTMsMTEgKzMsMTYgQEAKIAogI2RlZmluZSBTSEFfRElHRVNUX1dPUkRTIDUKICNkZWZpbmUgU0hBX01FU1NBR0VfQllURVMgKDUxMiAvKmJpdHMqLyAvIDgpCi0jZGVmaW5lIFNIQV9XT1JLU1BBQ0VfV09SRFMgODAKKyNkZWZpbmUgU0hBX1dPUktTUEFDRV9XT1JEUyAxNgogCiB2b2lkIHNoYV9pbml0KF9fdTMyICpidWYpOwogdm9pZCBzaGFfdHJhbnNmb3JtKF9fdTMyICpkaWdlc3QsIGNvbnN0IGNoYXIgKmRhdGEsIF9fdTMyICpXKTsKIAorI2RlZmluZSBNRDVfRElHRVNUX1dPUkRTIDQKKyNkZWZpbmUgTUQ1X01FU1NBR0VfQllURVMgNjQKKwordm9pZCBtZDVfdHJhbnNmb3JtKF9fdTMyICpoYXNoLCBfX3UzMiBjb25zdCAqaW4pOworCiBfX3UzMiBoYWxmX21kNF90cmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpbls4XSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggZDM3ZDJhNy4uNjIxNTdjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xODAsMTIgKzE4MCwxMiBAQAogICovCiAKIC8qIGRfZmxhZ3MgZW50cmllcyAqLwotI2RlZmluZSBEQ0FDSEVfQVVUT0ZTX1BFTkRJTkcgMHgwMDAxICAgIC8qIGF1dG9mczogInVuZGVyIGNvbnN0cnVjdGlvbiIgKi8KLSNkZWZpbmUgRENBQ0hFX05GU0ZTX1JFTkFNRUQgIDB4MDAwMgotICAgICAvKiB0aGlzIGRlbnRyeSBoYXMgYmVlbiAic2lsbHkgcmVuYW1lZCIgYW5kIGhhcyB0byBiZSBkZWxldGVkIG9uIHRoZSBsYXN0Ci0gICAgICAqIGRwdXQoKSAqLworI2RlZmluZSBEQ0FDSEVfT1BfSEFTSAkJMHgwMDAxCisjZGVmaW5lIERDQUNIRV9PUF9DT01QQVJFCTB4MDAwMgorI2RlZmluZSBEQ0FDSEVfT1BfUkVWQUxJREFURQkweDAwMDQKKyNkZWZpbmUgRENBQ0hFX09QX0RFTEVURQkweDAwMDgKIAotI2RlZmluZQlEQ0FDSEVfRElTQ09OTkVDVEVECTB4MDAwNAorI2RlZmluZQlEQ0FDSEVfRElTQ09OTkVDVEVECTB4MDAxMAogICAgICAvKiBUaGlzIGRlbnRyeSBpcyBwb3NzaWJseSBub3QgY3VycmVudGx5IGNvbm5lY3RlZCB0byB0aGUgZGNhY2hlIHRyZWUsIGluCiAgICAgICAqIHdoaWNoIGNhc2UgaXRzIHBhcmVudCB3aWxsIGVpdGhlciBiZSBpdHNlbGYsIG9yIHdpbGwgaGF2ZSB0aGlzIGZsYWcgYXMKICAgICAgICogd2VsbC4gIG5mc2Qgd2lsbCBub3QgdXNlIGEgZGVudHJ5IHdpdGggdGhpcyBiaXQgc2V0LCBidXQgd2lsbCBmaXJzdApAQCAtMTk2LDIyICsxOTYsMTggQEAKICAgICAgICogZGVudHJ5IGludG8gcGxhY2UgYW5kIHJldHVybiB0aGF0IGRlbnRyeSByYXRoZXIgdGhhbiB0aGUgcGFzc2VkIG9uZSwKICAgICAgICogdHlwaWNhbGx5IHVzaW5nIGRfc3BsaWNlX2FsaWFzLiAqLwogCi0jZGVmaW5lIERDQUNIRV9SRUZFUkVOQ0VECTB4MDAwOCAgLyogUmVjZW50bHkgdXNlZCwgZG9uJ3QgZGlzY2FyZC4gKi8KLSNkZWZpbmUgRENBQ0hFX1JDVUFDQ0VTUwkweDAwMTAJLyogRW50cnkgaGFzIGV2ZXIgYmVlbiBSQ1UtdmlzaWJsZSAqLwotI2RlZmluZSBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCAweDAwMjAKLSAgICAgLyogUGFyZW50IGlub2RlIGlzIHdhdGNoZWQgYnkgaW5vdGlmeSAqLwotCi0jZGVmaW5lIERDQUNIRV9DT09LSUUJCTB4MDA0MAkvKiBGb3IgdXNlIGJ5IGRjb29raWUgc3Vic3lzdGVtICovCi0jZGVmaW5lIERDQUNIRV9GU05PVElGWV9QQVJFTlRfV0FUQ0hFRCAweDAwODAKLSAgICAgLyogUGFyZW50IGlub2RlIGlzIHdhdGNoZWQgYnkgc29tZSBmc25vdGlmeSBsaXN0ZW5lciAqLworI2RlZmluZSBEQ0FDSEVfUkVGRVJFTkNFRAkweDAwMjAgIC8qIFJlY2VudGx5IHVzZWQsIGRvbid0IGRpc2NhcmQuICovCisjZGVmaW5lIERDQUNIRV9SQ1VBQ0NFU1MJMHgwMDQwCS8qIEVudHJ5IGhhcyBldmVyIGJlZW4gUkNVLXZpc2libGUgKi8KIAogI2RlZmluZSBEQ0FDSEVfQ0FOVF9NT1VOVAkweDAxMDAKICNkZWZpbmUgRENBQ0hFX0dFTk9DSURFCQkweDAyMDAKIAotI2RlZmluZSBEQ0FDSEVfT1BfSEFTSAkJMHgxMDAwCi0jZGVmaW5lIERDQUNIRV9PUF9DT01QQVJFCTB4MjAwMAotI2RlZmluZSBEQ0FDSEVfT1BfUkVWQUxJREFURQkweDQwMDAKLSNkZWZpbmUgRENBQ0hFX09QX0RFTEVURQkweDgwMDAKKyNkZWZpbmUgRENBQ0hFX05GU0ZTX1JFTkFNRUQJMHgxMDAwCisgICAgIC8qIHRoaXMgZGVudHJ5IGhhcyBiZWVuICJzaWxseSByZW5hbWVkIiBhbmQgaGFzIHRvIGJlIGRlbGV0ZWQgb24gdGhlIGxhc3QKKyAgICAgICogZHB1dCgpICovCisjZGVmaW5lIERDQUNIRV9DT09LSUUJCTB4MjAwMAkvKiBGb3IgdXNlIGJ5IGRjb29raWUgc3Vic3lzdGVtICovCisjZGVmaW5lIERDQUNIRV9GU05PVElGWV9QQVJFTlRfV0FUQ0hFRCAweDQwMDAKKyAgICAgLyogUGFyZW50IGlub2RlIGlzIHdhdGNoZWQgYnkgc29tZSBmc25vdGlmeSBsaXN0ZW5lciAqLwogCiAjZGVmaW5lIERDQUNIRV9NT1VOVEVECQkweDEwMDAwCS8qIGlzIGEgbW91bnRwb2ludCAqLwogI2RlZmluZSBEQ0FDSEVfTkVFRF9BVVRPTU9VTlQJMHgyMDAwMAkvKiBoYW5kbGUgYXV0b21vdW50IG9uIHRoaXMgZGlyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IDQ0MjdlMDQuLjNmYTFmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0yMDgsNiArMjA4LDQ5IEBACiBpbnQgZG1fcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdCk7CiB2b2lkIGRtX3VucmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdCk7CiAKKy8qCisgKiBUYXJnZXQgYXJndW1lbnQgcGFyc2luZy4KKyAqLworc3RydWN0IGRtX2FyZ19zZXQgeworCXVuc2lnbmVkIGFyZ2M7CisJY2hhciAqKmFyZ3Y7Cit9OworCisvKgorICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgb2YgYSBudW1lcmljIGFyZ3VtZW50LCB0b2dldGhlciB3aXRoCisgKiB0aGUgZXJyb3IgbWVzc2FnZSB0byB1c2UgaWYgdGhlIG51bWJlciBpcyBmb3VuZCB0byBiZSBvdXRzaWRlIHRoYXQgcmFuZ2UuCisgKi8KK3N0cnVjdCBkbV9hcmcgeworCXVuc2lnbmVkIG1pbjsKKwl1bnNpZ25lZCBtYXg7CisJY2hhciAqZXJyb3I7Cit9OworCisvKgorICogVmFsaWRhdGUgdGhlIG5leHQgYXJndW1lbnQsIGVpdGhlciByZXR1cm5pbmcgaXQgYXMgKnZhbHVlIG9yLCBpZiBpbnZhbGlkLAorICogcmV0dXJuaW5nIC1FSU5WQUwgYW5kIHNldHRpbmcgKmVycm9yLgorICovCitpbnQgZG1fcmVhZF9hcmcoc3RydWN0IGRtX2FyZyAqYXJnLCBzdHJ1Y3QgZG1fYXJnX3NldCAqYXJnX3NldCwKKwkJdW5zaWduZWQgKnZhbHVlLCBjaGFyICoqZXJyb3IpOworCisvKgorICogUHJvY2VzcyB0aGUgbmV4dCBhcmd1bWVudCBhcyB0aGUgc3RhcnQgb2YgYSBncm91cCBjb250YWluaW5nIGJldHdlZW4KKyAqIGFyZy0+bWluIGFuZCBhcmctPm1heCBmdXJ0aGVyIGFyZ3VtZW50cy4gRWl0aGVyIHJldHVybiB0aGUgc2l6ZSBhcworICogKm51bV9hcmdzIG9yLCBpZiBpbnZhbGlkLCByZXR1cm4gLUVJTlZBTCBhbmQgc2V0ICplcnJvci4KKyAqLworaW50IGRtX3JlYWRfYXJnX2dyb3VwKHN0cnVjdCBkbV9hcmcgKmFyZywgc3RydWN0IGRtX2FyZ19zZXQgKmFyZ19zZXQsCisJCSAgICAgIHVuc2lnbmVkICpudW1fYXJncywgY2hhciAqKmVycm9yKTsKKworLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCBhcmd1bWVudCBhbmQgc2hpZnQgdG8gdGhlIG5leHQuCisgKi8KK2NvbnN0IGNoYXIgKmRtX3NoaWZ0X2FyZyhzdHJ1Y3QgZG1fYXJnX3NldCAqYXMpOworCisvKgorICogTW92ZSB0aHJvdWdoIG51bV9hcmdzIGFyZ3VtZW50cy4KKyAqLwordm9pZCBkbV9jb25zdW1lX2FyZ3Moc3RydWN0IGRtX2FyZ19zZXQgKmFzLCB1bnNpZ25lZCBudW1fYXJncyk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBtYXBwZWQgZGV2aWNlcy4KICAqIERyb3AgdGhlIHJlZmVyZW5jZSB3aXRoIGRtX3B1dCB3aGVuIHlvdSBmaW5pc2ggd2l0aCB0aGUgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDM3MDg0NTUuLjBjYjhlZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI2Nyw5ICsyNjcsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTIwCisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMjEKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDExLTAyLTAyKSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDExLTA3LTA2KSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0ta2NvcHlkLmggYi9pbmNsdWRlL2xpbnV4L2RtLWtjb3B5ZC5oCmluZGV4IDI5OGQ1ODcuLjVlNTQ0NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0ta2NvcHlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1rY29weWQuaApAQCAtNDIsNSArNDIsMjAgQEAKIAkJICAgdW5zaWduZWQgbnVtX2Rlc3RzLCBzdHJ1Y3QgZG1faW9fcmVnaW9uICpkZXN0cywKIAkJICAgdW5zaWduZWQgZmxhZ3MsIGRtX2tjb3B5ZF9ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpOwogCisvKgorICogUHJlcGFyZSBhIGNhbGxiYWNrIGFuZCBzdWJtaXQgaXQgdmlhIHRoZSBrY29weWQgdGhyZWFkLgorICoKKyAqIGRtX2tjb3B5ZF9wcmVwYXJlX2NhbGxiYWNrIGFsbG9jYXRlcyBhIGNhbGxiYWNrIHN0cnVjdHVyZSBhbmQgcmV0dXJucyBpdC4KKyAqIEl0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICogVGhlIHJldHVybmVkIHZhbHVlIHNob3VsZCBiZSBwYXNzZWQgaW50byBkbV9rY29weWRfZG9fY2FsbGJhY2suCisgKgorICogZG1fa2NvcHlkX2RvX2NhbGxiYWNrIHN1Ym1pdHMgdGhlIGNhbGxiYWNrLgorICogSXQgbWF5IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorICogVGhlIGNhbGxiYWNrIGlzIGlzc3VlZCBmcm9tIHRoZSBrY29weWQgdGhyZWFkLgorICovCit2b2lkICpkbV9rY29weWRfcHJlcGFyZV9jYWxsYmFjayhzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqa2MsCisJCQkJIGRtX2tjb3B5ZF9ub3RpZnlfZm4gZm4sIHZvaWQgKmNvbnRleHQpOwordm9pZCBkbV9rY29weWRfZG9fY2FsbGJhY2sodm9pZCAqam9iLCBpbnQgcmVhZF9lcnIsIHVuc2lnbmVkIGxvbmcgd3JpdGVfZXJyKTsKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfTElOVVhfRE1fS0NPUFlEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCmluZGV4IGZlYzY2YmQuLmQ0N2JjY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaApAQCAtNjcsNyArNjcsNyBAQAogCiAKIHR5cGVkZWYKLXN0cnVjdCBhdWRpb19rYXJhb2tleyAgLyogaWYgVm9jYWwxIG9yIFZvY2FsMiBhcmUgbm9uLXplcm8sIHRoZXkgZ2V0IG1peGVkICAqLworc3RydWN0IGF1ZGlvX2thcmFva2UgeyAgLyogaWYgVm9jYWwxIG9yIFZvY2FsMiBhcmUgbm9uLXplcm8sIHRoZXkgZ2V0IG1peGVkICAqLwogCWludCB2b2NhbDE7ICAgIC8qIGludG8gbGVmdCBhbmQgcmlnaHQgdCBhdCA3MCUgZWFjaCAqLwogCWludCB2b2NhbDI7ICAgIC8qIGlmIGJvdGgsIFZvY2FsMSBhbmQgVm9jYWwyIGFyZSBub24temVybywgVm9jYWwxIGdldHMqLwogCWludCBtZWxvZHk7ICAgIC8qIG1peGVkIGludG8gdGhlIGxlZnQgY2hhbm5lbCBhbmQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IGVjMjU3MjYuLjIzNjJhMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BzdG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yMzIsNiArMjMzLDkgQEAKICNkZWZpbmUgVVZfU1lTVEVNX1RBQkxFX0dVSUQgXAogICAgIEVGSV9HVUlEKCAgMHgzYjEzYTdkNCwgMHg2MzNlLCAweDExZGQsIDB4OTMsIDB4ZWMsIDB4ZGEsIDB4MjUsIDB4NTYsIDB4ZDgsIDB4OTUsIDB4OTMgKQogCisjZGVmaW5lIExJTlVYX0VGSV9DUkFTSF9HVUlEIFwKKyAgICBFRklfR1VJRCggIDB4Y2ZjOGZjNzksIDB4YmUyZSwgMHg0ZGRjLCAweDk3LCAweGYwLCAweDlmLCAweDk4LCAweGJmLCAweGUyLCAweDk4LCAweGEwICkKKwogdHlwZWRlZiBzdHJ1Y3QgewogCWVmaV9ndWlkX3QgZ3VpZDsKIAl1bnNpZ25lZCBsb25nIHRhYmxlOwpAQCAtNDU4LDYgKzQ2Miw4IEBACiAJc3RydWN0IGtzZXQgKmtzZXQ7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKm5ld192YXIsICpkZWxfdmFyOwogCWNvbnN0IHN0cnVjdCBlZml2YXJfb3BlcmF0aW9ucyAqb3BzOworCXN0cnVjdCBlZml2YXJfZW50cnkgKndhbGtfZW50cnk7CisJc3RydWN0IHBzdG9yZV9pbmZvIGVmaV9wc3RvcmVfaW5mbzsKIH07CiAKIGludCByZWdpc3Rlcl9lZml2YXJzKHN0cnVjdCBlZml2YXJzICplZml2YXJzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYXVsdC1pbmplY3QuaCBiL2luY2x1ZGUvbGludXgvZmF1bHQtaW5qZWN0LmgKaW5kZXggM2ZmMDYwYS4uYzZmOTk2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYXVsdC1pbmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZhdWx0LWluamVjdC5oCkBAIC0yNSwxMCArMjUsNiBAQAogCXVuc2lnbmVkIGxvbmcgcmVqZWN0X2VuZDsKIAogCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0KLSNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCi0Jc3RydWN0IGRlbnRyeSAqZGlyOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIEZBVUxUX0FUVFJfSU5JVElBTElaRVIgewkJCQlcCkBAIC00NSwxOSArNDEsMTUgQEAKIAogI2lmZGVmIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMKIAotaW50IGluaXRfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0ciwgY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cik7CitzdHJ1Y3QgZGVudHJ5ICpmYXVsdF9jcmVhdGVfZGVidWdmc19hdHRyKGNvbnN0IGNoYXIgKm5hbWUsCisJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBmYXVsdF9hdHRyICphdHRyKTsKIAogI2Vsc2UgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyAqLwogCi1zdGF0aWMgaW5saW5lIGludCBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIsCi0JCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cihjb25zdCBjaGFyICpuYW1lLAorCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cikKIHsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cikKLXsKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBmMjNiY2I3Li5jMmJkNjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC03MzgsMjIgKzczOCw1NCBAQAogc3RydWN0IHBvc2l4X2FjbDsKICNkZWZpbmUgQUNMX05PVF9DQUNIRUQgKCh2b2lkICopKC0xKSkKIAorI2RlZmluZSBJT1BfRkFTVFBFUk0JMHgwMDAxCisjZGVmaW5lIElPUF9MT09LVVAJMHgwMDAyCisjZGVmaW5lIElPUF9OT0ZPTExPVwkweDAwMDQKKworLyoKKyAqIEtlZXAgbW9zdGx5IHJlYWQtb25seSBhbmQgb2Z0ZW4gYWNjZXNzZWQgKGVzcGVjaWFsbHkgZm9yCisgKiB0aGUgUkNVIHBhdGggbG9va3VwIGFuZCAnc3RhdCcgZGF0YSkgZmllbGRzIGF0IHRoZSBiZWdpbm5pbmcKKyAqIG9mIHRoZSAnc3RydWN0IGlub2RlJworICovCiBzdHJ1Y3QgaW5vZGUgewotCS8qIFJDVSBwYXRoIGxvb2t1cCB0b3VjaGVzIGZvbGxvd2luZzogKi8KIAl1bW9kZV90CQkJaV9tb2RlOworCXVuc2lnbmVkIHNob3J0CQlpX29wZmxhZ3M7CiAJdWlkX3QJCQlpX3VpZDsKIAlnaWRfdAkJCWlfZ2lkOworCXVuc2lnbmVkIGludAkJaV9mbGFnczsKKworI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKKwlzdHJ1Y3QgcG9zaXhfYWNsCSppX2FjbDsKKwlzdHJ1Y3QgcG9zaXhfYWNsCSppX2RlZmF1bHRfYWNsOworI2VuZGlmCisKIAljb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucwkqaV9vcDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKmlfc2I7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKmlfbWFwcGluZzsKIAotCXNwaW5sb2NrX3QJCWlfbG9jazsJLyogaV9ibG9ja3MsIGlfYnl0ZXMsIG1heWJlIGlfc2l6ZSAqLwotCXVuc2lnbmVkIGludAkJaV9mbGFnczsKLQl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOwogI2lmZGVmIENPTkZJR19TRUNVUklUWQogCXZvaWQJCQkqaV9zZWN1cml0eTsKICNlbmRpZgotCXN0cnVjdCBtdXRleAkJaV9tdXRleDsKIAorCS8qIFN0YXQgZGF0YSwgbm90IGFjY2Vzc2VkIGZyb20gcGF0aCB3YWxraW5nICovCisJdW5zaWduZWQgbG9uZwkJaV9pbm87CisJdW5zaWduZWQgaW50CQlpX25saW5rOworCWRldl90CQkJaV9yZGV2OworCWxvZmZfdAkJCWlfc2l6ZTsKKwlzdHJ1Y3QgdGltZXNwZWMJCWlfYXRpbWU7CisJc3RydWN0IHRpbWVzcGVjCQlpX210aW1lOworCXN0cnVjdCB0aW1lc3BlYwkJaV9jdGltZTsKKwl1bnNpZ25lZCBpbnQJCWlfYmxrYml0czsKKwlibGtjbnRfdAkJaV9ibG9ja3M7CisKKyNpZmRlZiBfX05FRURfSV9TSVpFX09SREVSRUQKKwlzZXFjb3VudF90CQlpX3NpemVfc2VxY291bnQ7CisjZW5kaWYKKworCS8qIE1pc2MgKi8KKwl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOworCXNwaW5sb2NrX3QJCWlfbG9jazsJLyogaV9ibG9ja3MsIGlfYnl0ZXMsIG1heWJlIGlfc2l6ZSAqLworCXN0cnVjdCBtdXRleAkJaV9tdXRleDsKIAogCXVuc2lnbmVkIGxvbmcJCWRpcnRpZWRfd2hlbjsJLyogamlmZmllcyBvZiBmaXJzdCBkaXJ0eWluZyAqLwogCkBAIC03NjUsMjUgKzc5NywxMiBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkCWlfZGVudHJ5OwogCQlzdHJ1Y3QgcmN1X2hlYWQJCWlfcmN1OwogCX07Ci0JdW5zaWduZWQgbG9uZwkJaV9pbm87CiAJYXRvbWljX3QJCWlfY291bnQ7Ci0JdW5zaWduZWQgaW50CQlpX25saW5rOwotCWRldl90CQkJaV9yZGV2OwotCXVuc2lnbmVkIGludAkJaV9ibGtiaXRzOwogCXU2NAkJCWlfdmVyc2lvbjsKLQlsb2ZmX3QJCQlpX3NpemU7Ci0jaWZkZWYgX19ORUVEX0lfU0laRV9PUkRFUkVECi0Jc2VxY291bnRfdAkJaV9zaXplX3NlcWNvdW50OwotI2VuZGlmCi0Jc3RydWN0IHRpbWVzcGVjCQlpX2F0aW1lOwotCXN0cnVjdCB0aW1lc3BlYwkJaV9tdGltZTsKLQlzdHJ1Y3QgdGltZXNwZWMJCWlfY3RpbWU7Ci0JYmxrY250X3QJCWlfYmxvY2tzOwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGlfYnl0ZXM7CiAJYXRvbWljX3QJCWlfZGlvX2NvdW50OwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMJKmlfZm9wOwkvKiBmb3JtZXIgLT5pX29wLT5kZWZhdWx0X2ZpbGVfb3BzICovCiAJc3RydWN0IGZpbGVfbG9jawkqaV9mbG9jazsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqaV9tYXBwaW5nOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCWlfZGF0YTsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAlzdHJ1Y3QgZHF1b3QJCSppX2RxdW90W01BWFFVT1RBU107CkBAIC04MDYsMTAgKzgyNSw2IEBACiAJYXRvbWljX3QJCWlfcmVhZGNvdW50OyAvKiBzdHJ1Y3QgZmlsZXMgb3BlbiBSTyAqLwogI2VuZGlmCiAJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsKLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCi0Jc3RydWN0IHBvc2l4X2FjbAkqaV9hY2w7Ci0Jc3RydWN0IHBvc2l4X2FjbAkqaV9kZWZhdWx0X2FjbDsKLSNlbmRpZgogCXZvaWQJCQkqaV9wcml2YXRlOyAvKiBmcyBvciBkZXZpY2UgcHJpdmF0ZSBwb2ludGVyICovCiB9OwogCkBAIC0yMzAzLDYgKzIzMTgsMTEgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ2V0X2xvY2tlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGluc2VydF9pbm9kZV9sb2NrZWQ0KHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCBpbnQgKCp0ZXN0KShzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKSwgdm9pZCAqKTsKIGV4dGVybiBpbnQgaW5zZXJ0X2lub2RlX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKik7CisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK2V4dGVybiB2b2lkIGxvY2tkZXBfYW5ub3RhdGVfaW5vZGVfbXV0ZXhfa2V5KHN0cnVjdCBpbm9kZSAqaW5vZGUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IH07CisjZW5kaWYKIGV4dGVybiB2b2lkIHVubG9ja19uZXdfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBnZXRfbmV4dF9pbm8odm9pZCk7CiAKQEAgLTIzMTcsMTEgKzIzMzcsMTggQEAKIGV4dGVybiBpbnQgZmlsZV9yZW1vdmVfc3VpZChzdHJ1Y3QgZmlsZSAqKTsKIAogZXh0ZXJuIHZvaWQgX19pbnNlcnRfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyBoYXNodmFsKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCV9faW5zZXJ0X2lub2RlX2hhc2goaW5vZGUsIGlub2RlLT5pX2lubyk7CiB9CisKK2V4dGVybiB2b2lkIF9fcmVtb3ZlX2lub2RlX2hhc2goc3RydWN0IGlub2RlICopOworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9pbm9kZV9oYXNoKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKCFpbm9kZV91bmhhc2hlZChpbm9kZSkpCisJCV9fcmVtb3ZlX2lub2RlX2hhc2goaW5vZGUpOworfQorCiBleHRlcm4gdm9pZCBpbm9kZV9zYl9saXN0X2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogI2lmZGVmIENPTkZJR19CTE9DSwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdXNlLmggYi9pbmNsdWRlL2xpbnV4L2Z1c2UuaAppbmRleCBkNDY0ZGU1Li40NjRjZmY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z1c2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1c2UuaApAQCAtNDcsNiArNDcsOSBAQAogICogIC0gRlVTRV9JT0NUTF9VTlJFU1RSSUNURUQgc2hhbGwgbm93IHJldHVybiB3aXRoIGFycmF5IG9mICdzdHJ1Y3QKICAqICAgIGZ1c2VfaW9jdGxfaW92ZWMnIGluc3RlYWQgb2YgYW1iaWd1b3VzICdzdHJ1Y3QgaW92ZWMnCiAgKiAgLSBhZGQgRlVTRV9JT0NUTF8zMkJJVCBmbGFnCisgKgorICogNy4xNworICogIC0gYWRkIEZVU0VfRkxPQ0tfTE9DS1MgYW5kIEZVU0VfUkVMRUFTRV9GTE9DS19VTkxPQ0sKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9GVVNFX0gKQEAgLTc4LDcgKzgxLDcgQEAKICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3CiAKIC8qKiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGludGVyZmFjZSAqLwotI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDE2CisjZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMTcKIAogLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovCiAjZGVmaW5lIEZVU0VfUk9PVF9JRCAxCkBAIC0xNTMsOCArMTU2LDEwIEBACiAvKioKICAqIElOSVQgcmVxdWVzdC9yZXBseSBmbGFncwogICoKKyAqIEZVU0VfUE9TSVhfTE9DS1M6IHJlbW90ZSBsb2NraW5nIGZvciBQT1NJWCBmaWxlIGxvY2tzCiAgKiBGVVNFX0VYUE9SVF9TVVBQT1JUOiBmaWxlc3lzdGVtIGhhbmRsZXMgbG9va3VwcyBvZiAiLiIgYW5kICIuLiIKICAqIEZVU0VfRE9OVF9NQVNLOiBkb24ndCBhcHBseSB1bWFzayB0byBmaWxlIG1vZGUgb24gY3JlYXRlIG9wZXJhdGlvbnMKKyAqIEZVU0VfRkxPQ0tfTE9DS1M6IHJlbW90ZSBsb2NraW5nIGZvciBCU0Qgc3R5bGUgZmlsZSBsb2NrcwogICovCiAjZGVmaW5lIEZVU0VfQVNZTkNfUkVBRAkJKDEgPDwgMCkKICNkZWZpbmUgRlVTRV9QT1NJWF9MT0NLUwkoMSA8PCAxKQpAQCAtMTYzLDYgKzE2OCw3IEBACiAjZGVmaW5lIEZVU0VfRVhQT1JUX1NVUFBPUlQJKDEgPDwgNCkKICNkZWZpbmUgRlVTRV9CSUdfV1JJVEVTCQkoMSA8PCA1KQogI2RlZmluZSBGVVNFX0RPTlRfTUFTSwkJKDEgPDwgNikKKyNkZWZpbmUgRlVTRV9GTE9DS19MT0NLUwkoMSA8PCAxMCkKIAogLyoqCiAgKiBDVVNFIElOSVQgcmVxdWVzdC9yZXBseSBmbGFncwpAQCAtMTc1LDYgKzE4MSw3IEBACiAgKiBSZWxlYXNlIGZsYWdzCiAgKi8KICNkZWZpbmUgRlVTRV9SRUxFQVNFX0ZMVVNICSgxIDw8IDApCisjZGVmaW5lIEZVU0VfUkVMRUFTRV9GTE9DS19VTkxPQ0sJKDEgPDwgMSkKIAogLyoqCiAgKiBHZXRhdHRyIGZsYWdzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L2dlbmFsbG9jLmgKaW5kZXggNWJiZWJkYS4uNWU5OGVlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuYWxsb2MuaApAQCAtMSw4ICsxLDI2IEBACiAvKgotICogQmFzaWMgZ2VuZXJhbCBwdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFuYWdpbmcgc3BlY2lhbCBwdXJwb3NlIG1lbW9yeQotICogbm90IG1hbmFnZWQgYnkgdGhlIHJlZ3VsYXIga21hbGxvYy9rZnJlZSBpbnRlcmZhY2UuCi0gKiBVc2VzIGZvciB0aGlzIGluY2x1ZGVzIG9uLWRldmljZSBzcGVjaWFsIG1lbW9yeSwgdW5jYWNoZWQgbWVtb3J5Ci0gKiBldGMuCisgKiBCYXNpYyBnZW5lcmFsIHB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYW5hZ2luZyBzcGVjaWFsIHB1cnBvc2UKKyAqIG1lbW9yeSwgZm9yIGV4YW1wbGUsIG1lbW9yeSB0aGF0IGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSByZWd1bGFyCisgKiBrbWFsbG9jL2tmcmVlIGludGVyZmFjZS4gIFVzZXMgZm9yIHRoaXMgaW5jbHVkZXMgb24tZGV2aWNlIHNwZWNpYWwKKyAqIG1lbW9yeSwgdW5jYWNoZWQgbWVtb3J5IGV0Yy4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIHVzZSB0aGUgYWxsb2NhdG9yIGluIE5NSSBoYW5kbGVycyBhbmQgb3RoZXIgc3BlY2lhbAorICogdW5ibG9ja2FibGUgY29udGV4dHMgdGhhdCBjb3VsZCBvdGhlcndpc2UgZGVhZGxvY2sgb24gbG9ja3MuICBUaGlzCisgKiBpcyBpbXBsZW1lbnRlZCBieSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucyBhbmQgcmV0cmllcyBvbiBhbnkKKyAqIGNvbmZsaWN0cy4gIFRoZSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB0aGVyZSBtYXkgYmUgbGl2ZWxvY2tzIGluCisgKiBleHRyZW1lIGNhc2VzLiAgRm9yIGJldHRlciBzY2FsYWJpbGl0eSwgb25lIGFsbG9jYXRvciBjYW4gYmUgdXNlZAorICogZm9yIGVhY2ggQ1BVLgorICoKKyAqIFRoZSBsb2NrbGVzcyBvcGVyYXRpb24gb25seSB3b3JrcyBpZiB0aGVyZSBpcyBlbm91Z2ggbWVtb3J5CisgKiBhdmFpbGFibGUuICBJZiBuZXcgbWVtb3J5IGlzIGFkZGVkIHRvIHRoZSBwb29sIGEgbG9jayBoYXMgdG8gYmUKKyAqIHN0aWxsIHRha2VuLiAgU28gYW55IHVzZXIgcmVseWluZyBvbiBsb2NrbGVzc25lc3MgaGFzIHRvIGVuc3VyZQorICogdGhhdCBzdWZmaWNpZW50IG1lbW9yeSBpcyBwcmVhbGxvY2F0ZWQuCisgKgorICogVGhlIGJhc2ljIGF0b21pYyBvcGVyYXRpb24gb2YgdGhpcyBhbGxvY2F0b3IgaXMgY21weGNoZyBvbiBsb25nLgorICogT24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGhhdmUgTk1JLXNhZmUgY21weGNoZyBpbXBsZW1lbnRhdGlvbiwKKyAqIHRoZSBhbGxvY2F0b3IgY2FuIE5PVCBiZSB1c2VkIGluIE5NSSBoYW5kbGVyLiAgU28gY29kZSB1c2VzIHRoZQorICogYWxsb2NhdG9yIGluIE5NSSBoYW5kbGVyIHNob3VsZCBkZXBlbmQgb24KKyAqIENPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRy4KICAqCiAgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKICAqIFZlcnNpb24gMi4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCkBAIC0xNSw3ICszMyw3IEBACiAgKiAgR2VuZXJhbCBwdXJwb3NlIHNwZWNpYWwgbWVtb3J5IHBvb2wgZGVzY3JpcHRvci4KICAqLwogc3RydWN0IGdlbl9wb29sIHsKLQlyd2xvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNodW5rczsJLyogbGlzdCBvZiBjaHVua3MgaW4gdGhpcyBwb29sICovCiAJaW50IG1pbl9hbGxvY19vcmRlcjsJCS8qIG1pbmltdW0gYWxsb2NhdGlvbiBvcmRlciAqLwogfTsKQEAgLTI0LDggKzQyLDggQEAKICAqICBHZW5lcmFsIHB1cnBvc2Ugc3BlY2lhbCBtZW1vcnkgcG9vbCBjaHVuayBkZXNjcmlwdG9yLgogICovCiBzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmsgewotCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHRfY2h1bms7CS8qIG5leHQgY2h1bmsgaW4gcG9vbCAqLworCWF0b21pY190IGF2YWlsOwogCXBoeXNfYWRkcl90IHBoeXNfYWRkcjsJCS8qIHBoeXNpY2FsIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgbWVtb3J5IGNodW5rICovCiAJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOwkvKiBzdGFydGluZyBhZGRyZXNzIG9mIG1lbW9yeSBjaHVuayAqLwogCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHI7CQkvKiBlbmRpbmcgYWRkcmVzcyBvZiBtZW1vcnkgY2h1bmsgKi8KQEAgLTU2LDQgKzc0LDggQEAKIGV4dGVybiB2b2lkIGdlbl9wb29sX2Rlc3Ryb3koc3RydWN0IGdlbl9wb29sICopOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2VuX3Bvb2xfYWxsb2Moc3RydWN0IGdlbl9wb29sICosIHNpemVfdCk7CiBleHRlcm4gdm9pZCBnZW5fcG9vbF9mcmVlKHN0cnVjdCBnZW5fcG9vbCAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgZ2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoc3RydWN0IGdlbl9wb29sICosCisJdm9pZCAoKikoc3RydWN0IGdlbl9wb29sICosIHN0cnVjdCBnZW5fcG9vbF9jaHVuayAqLCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIHNpemVfdCBnZW5fcG9vbF9hdmFpbChzdHJ1Y3QgZ2VuX3Bvb2wgKik7CitleHRlcm4gc2l6ZV90IGdlbl9wb29sX3NpemUoc3RydWN0IGdlbl9wb29sICopOwogI2VuZGlmIC8qIF9fR0VOQUxMT0NfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCBjYjQwODkyLi4zYTc2ZmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTkyLDcgKzkyLDcgQEAKICAqLwogI2RlZmluZSBfX0dGUF9OT1RSQUNLX0ZBTFNFX1BPU0lUSVZFIChfX0dGUF9OT1RSQUNLKQogCi0jZGVmaW5lIF9fR0ZQX0JJVFNfU0hJRlQgMjMJLyogUm9vbSBmb3IgMjMgX19HRlBfRk9PIGJpdHMgKi8KKyNkZWZpbmUgX19HRlBfQklUU19TSElGVCAyNAkvKiBSb29tIGZvciBOIF9fR0ZQX0ZPTyBiaXRzICovCiAjZGVmaW5lIF9fR0ZQX0JJVFNfTUFTSyAoKF9fZm9yY2UgZ2ZwX3QpKCgxIDw8IF9fR0ZQX0JJVFNfU0hJRlQpIC0gMSkpCiAKIC8qIFRoaXMgZXF1YWxzIDAsIGJ1dCB1c2UgY29uc3RhbnRzIGluIGNhc2UgdGhleSBldmVyIGNoYW5nZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXNoLmggYi9pbmNsdWRlL2xpbnV4L2hhc2guaAppbmRleCAwNmQyNWMxLi5iODA1MDZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hhc2guaAorKysgYi9pbmNsdWRlL2xpbnV4L2hhc2guaApAQCAtNjMsNyArNjMsNyBAQAogCXJldHVybiBoYXNoID4+ICgzMiAtIGJpdHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGFzaF9wdHIodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBoYXNoX3B0cihjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBiaXRzKQogewogCXJldHVybiBoYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpcHRyLCBiaXRzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRyLmggYi9pbmNsdWRlL2xpbnV4L2lkci5oCmluZGV4IDEzYTgwMWYuLjI1NTQ5MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZHIuaApAQCAtMTQ2LDYgKzE0NiwxMCBAQAogdm9pZCBpZGFfZGVzdHJveShzdHJ1Y3QgaWRhICppZGEpOwogdm9pZCBpZGFfaW5pdChzdHJ1Y3QgaWRhICppZGEpOwogCitpbnQgaWRhX3NpbXBsZV9nZXQoc3RydWN0IGlkYSAqaWRhLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQsCisJCSAgIGdmcF90IGdmcF9tYXNrKTsKK3ZvaWQgaWRhX3NpbXBsZV9yZW1vdmUoc3RydWN0IGlkYSAqaWRhLCB1bnNpZ25lZCBpbnQgaWQpOworCiB2b2lkIF9faW5pdCBpZHJfaW5pdF9jYWNoZSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fSURSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDA2ODc4NGUuLmE2MzdlNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTQzOCw2ICs0MzgsOCBAQAogI2RlZmluZSBLRVlfV0lNQVgJCTI0NgogI2RlZmluZSBLRVlfUkZLSUxMCQkyNDcJLyogS2V5IHRoYXQgY29udHJvbHMgYWxsIHJhZGlvcyAqLwogCisjZGVmaW5lIEtFWV9NSUNNVVRFCQkyNDgJLyogTXV0ZSAvIHVubXV0ZSB0aGUgbWljcm9waG9uZSAqLworCiAvKiBDb2RlIDI1NSBpcyByZXNlcnZlZCBmb3Igc3BlY2lhbCBuZWVkcyBvZiBBVCBrZXlib2FyZCBkcml2ZXIgKi8KIAogI2RlZmluZSBCVE5fTUlTQwkJMHgxMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IGMyZWJmZTYuLjlkNTdhNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaApAQCAtMTYyLDYgKzE2Miw3IEBACiAJCQkJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90LAogCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCksCiAJCQkgICAgIHZvaWQgKmFsaWduZl9kYXRhKTsKK3N0cnVjdCByZXNvdXJjZSAqbG9va3VwX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0KTsKIGludCBhZGp1c3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJICAgIHJlc291cmNlX3NpemVfdCBzaXplKTsKIHJlc291cmNlX3NpemVfdCByZXNvdXJjZV9hbGlnbm1lbnQoc3RydWN0IHJlc291cmNlICpyZXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggODdhMDZmMy4uNTk1MTczMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC01NDcsNyArNTQ4LDE1IEBACiAJcmV0dXJuIGQtPm1zaV9kZXNjOwogfQogCi1pbnQgaXJxX2FsbG9jX2Rlc2NzKGludCBpcnEsIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgY250LCBpbnQgbm9kZSk7CitpbnQgX19pcnFfYWxsb2NfZGVzY3MoaW50IGlycSwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBjbnQsIGludCBub2RlLAorCQlzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9hbGxvY19kZXNjcyhpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IGNudCwKKwkJaW50IG5vZGUpCit7CisJcmV0dXJuIF9faXJxX2FsbG9jX2Rlc2NzKGlycSwgZnJvbSwgY250LCBub2RlLCBUSElTX01PRFVMRSk7Cit9CisKIHZvaWQgaXJxX2ZyZWVfZGVzY3ModW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNudCk7CiBpbnQgaXJxX3Jlc2VydmVfaXJxcyh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IGNudCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxZGVzYy5oIGIvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKaW5kZXggMmQ5MjFiMy4uMTUwMTM0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKQEAgLTY2LDYgKzY2LDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqZGlyOwogI2VuZGlmCisJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCWNvbnN0IGNoYXIJCSpuYW1lOwogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IGQwODdjMmUuLjM4ZjMwN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC0xMzI5LDEyICsxMzI5LDYgQEAKICNkZWZpbmUgQlVGRkVSX1RSQUNFMihiaCwgYmgyLCBpbmZvKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgSkJVRkZFUl9UUkFDRShqaCwgaW5mbykJZG8ge30gd2hpbGUgKDApCiAKLS8qIAotICogamJkMl9kZXZfdG9fbmFtZSBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gdXNlZCBieSB0aGUgamJkMiBhbmQgZXh0NCAKLSAqIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFwIGEgZGV2X3QgdG8gYSBkZXZpY2UgbmFtZS4KLSAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKmpiZDJfZGV2X3RvX25hbWUoZGV2X3QgZGV2aWNlKTsKLQogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9MSU5VWF9KQkQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9rY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3ZWRhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgva2NvbmZpZy5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX19MSU5VWF9LQ09ORklHX0gKKyNkZWZpbmUgX19MSU5VWF9LQ09ORklHX0gKKworI2luY2x1ZGUgPGdlbmVyYXRlZC9hdXRvY29uZi5oPgorCisvKgorICogSGVscGVyIG1hY3JvcyB0byB1c2UgQ09ORklHXyBvcHRpb25zIGluIEMgZXhwcmVzc2lvbnMuIE5vdGUgdGhhdAorICogdGhlc2Ugb25seSB3b3JrIHdpdGggYm9vbGVhbiBhbmQgdHJpc3RhdGUgb3B0aW9ucy4KKyAqLworCisvKgorICogSVNfRU5BQkxFRChDT05GSUdfRk9PKSBldmFsdWF0ZXMgdG8gMSBpZiBDT05GSUdfRk9PIGlzIHNldCB0byAneScgb3IgJ20nLAorICogMCBvdGhlcndpc2UuCisgKgorICovCisjZGVmaW5lIElTX0VOQUJMRUQob3B0aW9uKSBcCisJKF9fZW5hYmxlZF8gIyMgb3B0aW9uIHx8IF9fZW5hYmxlZF8gIyMgb3B0aW9uICMjIF9NT0RVTEUpCisKKy8qCisgKiBJU19CVUlMVElOKENPTkZJR19GT08pIGV2YWx1YXRlcyB0byAxIGlmIENPTkZJR19GT08gaXMgc2V0IHRvICd5JywgMAorICogb3RoZXJ3aXNlLiBGb3IgYm9vbGVhbiBvcHRpb25zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAqIElTX0VOQUJMRUQoQ09ORklHX0ZPTykuCisgKi8KKyNkZWZpbmUgSVNfQlVJTFRJTihvcHRpb24pIF9fZW5hYmxlZF8gIyMgb3B0aW9uCisKKy8qCisgKiBJU19NT0RVTEUoQ09ORklHX0ZPTykgZXZhbHVhdGVzIHRvIDEgaWYgQ09ORklHX0ZPTyBpcyBzZXQgdG8gJ20nLCAwCisgKiBvdGhlcndpc2UuCisgKi8KKyNkZWZpbmUgSVNfTU9EVUxFKG9wdGlvbikgX19lbmFibGVkXyAjIyBvcHRpb24gIyMgX01PRFVMRQorCisjZW5kaWYgLyogX19MSU5VWF9LQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGxpc3QuaCBiL2luY2x1ZGUvbGludXgvbGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBjOGI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9sbGlzdC5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIExMSVNUX0gKKyNkZWZpbmUgTExJU1RfSAorLyoKKyAqIExvY2stbGVzcyBOVUxMIHRlcm1pbmF0ZWQgc2luZ2xlIGxpbmtlZCBsaXN0CisgKgorICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHByb2R1Y2VycyBhbmQgbXVsdGlwbGUgY29uc3VtZXJzLCBsbGlzdF9hZGQKKyAqIGNhbiBiZSB1c2VkIGluIHByb2R1Y2VycyBhbmQgbGxpc3RfZGVsX2FsbCBjYW4gYmUgdXNlZCBpbgorICogY29uc3VtZXJzLiAgVGhleSBjYW4gd29yayBzaW11bHRhbmVvdXNseSB3aXRob3V0IGxvY2suICBCdXQKKyAqIGxsaXN0X2RlbF9maXJzdCBjYW4gbm90IGJlIHVzZWQgaGVyZS4gIEJlY2F1c2UgbGxpc3RfZGVsX2ZpcnN0CisgKiBkZXBlbmRzIG9uIGxpc3QtPmZpcnN0LT5uZXh0IGRvZXMgbm90IGNoYW5nZWQgaWYgbGlzdC0+Zmlyc3QgaXMgbm90CisgKiBjaGFuZ2VkIGR1cmluZyBpdHMgb3BlcmF0aW9uLCBidXQgbGxpc3RfZGVsX2ZpcnN0LCBsbGlzdF9hZGQsCisgKiBsbGlzdF9hZGQgKG9yIGxsaXN0X2RlbF9hbGwsIGxsaXN0X2FkZCwgbGxpc3RfYWRkKSBzZXF1ZW5jZSBpbgorICogYW5vdGhlciBjb25zdW1lciBtYXkgdmlvbGF0ZSB0aGF0LgorICoKKyAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcm9kdWNlcnMgYW5kIG9uZSBjb25zdW1lciwgbGxpc3RfYWRkIGNhbiBiZQorICogdXNlZCBpbiBwcm9kdWNlcnMgYW5kIGxsaXN0X2RlbF9hbGwgb3IgbGxpc3RfZGVsX2ZpcnN0IGNhbiBiZSB1c2VkCisgKiBpbiB0aGUgY29uc3VtZXIuCisgKgorICogVGhpcyBjYW4gYmUgc3VtbWFyaXplZCBhcyBmb2xsb3c6CisgKgorICogICAgICAgICAgIHwgICBhZGQgICAgfCBkZWxfZmlyc3QgfCAgZGVsX2FsbAorICogYWRkICAgICAgIHwgICAgLSAgICAgfCAgICAgLSAgICAgfCAgICAgLQorICogZGVsX2ZpcnN0IHwgICAgICAgICAgfCAgICAgTCAgICAgfCAgICAgTAorICogZGVsX2FsbCAgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgLQorICoKKyAqIFdoZXJlICItIiBzdGFuZHMgZm9yIG5vIGxvY2sgaXMgbmVlZGVkLCB3aGlsZSAiTCIgc3RhbmRzIGZvciBsb2NrCisgKiBpcyBuZWVkZWQuCisgKgorICogVGhlIGxpc3QgZW50cmllcyBkZWxldGVkIHZpYSBsbGlzdF9kZWxfYWxsIGNhbiBiZSB0cmF2ZXJzZWQgd2l0aAorICogdHJhdmVyc2luZyBmdW5jdGlvbiBzdWNoIGFzIGxsaXN0X2Zvcl9lYWNoIGV0Yy4gIEJ1dCB0aGUgbGlzdAorICogZW50cmllcyBjYW4gbm90IGJlIHRyYXZlcnNlZCBzYWZlbHkgYmVmb3JlIGRlbGV0ZWQgZnJvbSB0aGUgbGlzdC4KKyAqIFRoZSBvcmRlciBvZiBkZWxldGVkIGVudHJpZXMgaXMgZnJvbSB0aGUgbmV3ZXN0IHRvIHRoZSBvbGRlc3QgYWRkZWQKKyAqIG9uZS4gIElmIHlvdSB3YW50IHRvIHRyYXZlcnNlIGZyb20gdGhlIG9sZGVzdCB0byB0aGUgbmV3ZXN0LCB5b3UKKyAqIG11c3QgcmV2ZXJzZSB0aGUgb3JkZXIgYnkgeW91cnNlbGYgYmVmb3JlIHRyYXZlcnNpbmcuCisgKgorICogVGhlIGJhc2ljIGF0b21pYyBvcGVyYXRpb24gb2YgdGhpcyBsaXN0IGlzIGNtcHhjaGcgb24gbG9uZy4gIE9uCisgKiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBOTUktc2FmZSBjbXB4Y2hnIGltcGxlbWVudGF0aW9uLCB0aGUKKyAqIGxpc3QgY2FuIE5PVCBiZSB1c2VkIGluIE5NSSBoYW5kbGVyLiAgU28gY29kZSB1c2VzIHRoZSBsaXN0IGluIE5NSQorICogaGFuZGxlciBzaG91bGQgZGVwZW5kIG9uIENPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRy4KKyAqLworCitzdHJ1Y3QgbGxpc3RfaGVhZCB7CisJc3RydWN0IGxsaXN0X25vZGUgKmZpcnN0OworfTsKKworc3RydWN0IGxsaXN0X25vZGUgeworCXN0cnVjdCBsbGlzdF9ub2RlICpuZXh0OworfTsKKworI2RlZmluZSBMTElTVF9IRUFEX0lOSVQobmFtZSkJeyBOVUxMIH0KKyNkZWZpbmUgTExJU1RfSEVBRChuYW1lKQlzdHJ1Y3QgbGxpc3RfaGVhZCBuYW1lID0gTExJU1RfSEVBRF9JTklUKG5hbWUpCisKKy8qKgorICogaW5pdF9sbGlzdF9oZWFkIC0gaW5pdGlhbGl6ZSBsb2NrLWxlc3MgbGlzdCBoZWFkCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbG9jay1sZXNzIGxpc3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfbGxpc3RfaGVhZChzdHJ1Y3QgbGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlsaXN0LT5maXJzdCA9IE5VTEw7Cit9CisKKy8qKgorICogbGxpc3RfZW50cnkgLSBnZXQgdGhlIHN0cnVjdCBvZiB0aGlzIGVudHJ5CisgKiBAcHRyOgl0aGUgJnN0cnVjdCBsbGlzdF9ub2RlIHBvaW50ZXIuCisgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxsaXN0X25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGxpc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpCQlcCisJY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorCisvKioKKyAqIGxsaXN0X2Zvcl9lYWNoIC0gaXRlcmF0ZSBvdmVyIHNvbWUgZGVsZXRlZCBlbnRyaWVzIG9mIGEgbG9jay1sZXNzIGxpc3QKKyAqIEBwb3M6CXRoZSAmc3RydWN0IGxsaXN0X25vZGUgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IKKyAqIEBub2RlOgl0aGUgZmlyc3QgZW50cnkgb2YgZGVsZXRlZCBsaXN0IGVudHJpZXMKKyAqCisgKiBJbiBnZW5lcmFsLCBzb21lIGVudHJpZXMgb2YgdGhlIGxvY2stbGVzcyBsaXN0IGNhbiBiZSB0cmF2ZXJzZWQKKyAqIHNhZmVseSBvbmx5IGFmdGVyIGJlaW5nIGRlbGV0ZWQgZnJvbSBsaXN0LCBzbyBzdGFydCB3aXRoIGFuIGVudHJ5CisgKiBpbnN0ZWFkIG9mIGxpc3QgaGVhZC4KKyAqCisgKiBJZiBiZWluZyB1c2VkIG9uIGVudHJpZXMgZGVsZXRlZCBmcm9tIGxvY2stbGVzcyBsaXN0IGRpcmVjdGx5LCB0aGUKKyAqIHRyYXZlcnNlIG9yZGVyIGlzIGZyb20gdGhlIG5ld2VzdCB0byB0aGUgb2xkZXN0IGFkZGVkIGVudHJ5LiAgSWYKKyAqIHlvdSB3YW50IHRvIHRyYXZlcnNlIGZyb20gdGhlIG9sZGVzdCB0byB0aGUgbmV3ZXN0LCB5b3UgbXVzdAorICogcmV2ZXJzZSB0aGUgb3JkZXIgYnkgeW91cnNlbGYgYmVmb3JlIHRyYXZlcnNpbmcuCisgKi8KKyNkZWZpbmUgbGxpc3RfZm9yX2VhY2gocG9zLCBub2RlKQkJCVwKKwlmb3IgKChwb3MpID0gKG5vZGUpOyBwb3M7IChwb3MpID0gKHBvcyktPm5leHQpCisKKy8qKgorICogbGxpc3RfZm9yX2VhY2hfZW50cnkgLSBpdGVyYXRlIG92ZXIgc29tZSBkZWxldGVkIGVudHJpZXMgb2YgbG9jay1sZXNzIGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBub2RlOgl0aGUgZmlzdCBlbnRyeSBvZiBkZWxldGVkIGxpc3QgZW50cmllcy4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsbGlzdF9ub2RlIHdpdGggdGhlIHN0cnVjdC4KKyAqCisgKiBJbiBnZW5lcmFsLCBzb21lIGVudHJpZXMgb2YgdGhlIGxvY2stbGVzcyBsaXN0IGNhbiBiZSB0cmF2ZXJzZWQKKyAqIHNhZmVseSBvbmx5IGFmdGVyIGJlaW5nIHJlbW92ZWQgZnJvbSBsaXN0LCBzbyBzdGFydCB3aXRoIGFuIGVudHJ5CisgKiBpbnN0ZWFkIG9mIGxpc3QgaGVhZC4KKyAqCisgKiBJZiBiZWluZyB1c2VkIG9uIGVudHJpZXMgZGVsZXRlZCBmcm9tIGxvY2stbGVzcyBsaXN0IGRpcmVjdGx5LCB0aGUKKyAqIHRyYXZlcnNlIG9yZGVyIGlzIGZyb20gdGhlIG5ld2VzdCB0byB0aGUgb2xkZXN0IGFkZGVkIGVudHJ5LiAgSWYKKyAqIHlvdSB3YW50IHRvIHRyYXZlcnNlIGZyb20gdGhlIG9sZGVzdCB0byB0aGUgbmV3ZXN0LCB5b3UgbXVzdAorICogcmV2ZXJzZSB0aGUgb3JkZXIgYnkgeW91cnNlbGYgYmVmb3JlIHRyYXZlcnNpbmcuCisgKi8KKyNkZWZpbmUgbGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBub2RlLCBtZW1iZXIpCQkJCVwKKwlmb3IgKChwb3MpID0gbGxpc3RfZW50cnkoKG5vZGUpLCB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKTsJXAorCSAgICAgJihwb3MpLT5tZW1iZXIgIT0gTlVMTDsJCQkJCVwKKwkgICAgIChwb3MpID0gbGxpc3RfZW50cnkoKHBvcyktPm1lbWJlci5uZXh0LCB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKSkKKworLyoqCisgKiBsbGlzdF9lbXB0eSAtIHRlc3RzIHdoZXRoZXIgYSBsb2NrLWxlc3MgbGlzdCBpcyBlbXB0eQorICogQGhlYWQ6CXRoZSBsaXN0IHRvIHRlc3QKKyAqCisgKiBOb3QgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZSBvciB1cCB0byBkYXRlLiAgSnVzdCBhIHF1aWNrIHdheSB0bworICogdGVzdCB3aGV0aGVyIHRoZSBsaXN0IGlzIGVtcHR5IHdpdGhvdXQgZGVsZXRpbmcgc29tZXRoaW5nIGZyb20gdGhlCisgKiBsaXN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBsbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlyZXR1cm4gQUNDRVNTX09OQ0UoaGVhZC0+Zmlyc3QpID09IE5VTEw7Cit9CisKK3ZvaWQgbGxpc3RfYWRkKHN0cnVjdCBsbGlzdF9ub2RlICpuZXcsIHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkKTsKK3ZvaWQgbGxpc3RfYWRkX2JhdGNoKHN0cnVjdCBsbGlzdF9ub2RlICpuZXdfZmlyc3QsIHN0cnVjdCBsbGlzdF9ub2RlICpuZXdfbGFzdCwKKwkJICAgICBzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZCk7CitzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxpc3RfZGVsX2ZpcnN0KHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkKTsKK3N0cnVjdCBsbGlzdF9ub2RlICpsbGlzdF9kZWxfYWxsKHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkKTsKKyNlbmRpZiAvKiBMTElTVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvb3AuaCBiL2luY2x1ZGUvbGludXgvbG9vcC5oCmluZGV4IDY2YzE5NGUuLjY4M2Q2OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9vcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9vcC5oCkBAIC02NCw3ICs2NCw2IEBACiAKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqbG9fcXVldWU7CiAJc3RydWN0IGdlbmRpc2sJCSpsb19kaXNrOwotCXN0cnVjdCBsaXN0X2hlYWQJbG9fbGlzdDsKIH07CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCkBAIC0xNjEsNCArMTYwLDggQEAKICNkZWZpbmUgTE9PUF9DSEFOR0VfRkQJCTB4NEMwNgogI2RlZmluZSBMT09QX1NFVF9DQVBBQ0lUWQkweDRDMDcKIAorLyogL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlICovCisjZGVmaW5lIExPT1BfQ1RMX0FERAkJMHg0QzgwCisjZGVmaW5lIExPT1BfQ1RMX1JFTU9WRQkJMHg0QzgxCisjZGVmaW5lIExPT1BfQ1RMX0dFVF9GUkVFCTB4NEM4MgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGI5NjYwMDcuLjM0M2JkNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0zOSwxNiArMzksNiBAQAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCiAJCQkJCWludCBhY3RpdmUsIGludCBmaWxlKTsKIAotc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07IC8qIHNjYW5lbmQgbWVtb3J5IGNncm91cCAqLwotCXN0cnVjdCBtZW1fY2dyb3VwICpyb290OyAvKiBzY2FuIHRhcmdldCBoaWVyYXJjaHkgcm9vdCAqLwotCWludCBjb250ZXh0OwkJLyogc2Nhbm5pbmcgY29udGV4dCAoc2VlIG1lbWNvbnRyb2wuYykgKi8KLQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWRbMl07IC8qIHRoZSBudW1iZXIgb2Ygc2Nhbm5lZCBwYWdlcyAqLwotCXVuc2lnbmVkIGxvbmcgbnJfcm90YXRlZFsyXTsgLyogdGhlIG51bWJlciBvZiByb3RhdGVkIHBhZ2VzICovCi0JdW5zaWduZWQgbG9uZyBucl9mcmVlZFsyXTsgLyogdGhlIG51bWJlciBvZiBmcmVlZCBwYWdlcyAqLwotCXVuc2lnbmVkIGxvbmcgZWxhcHNlZDsgLyogbnNlYyBvZiB0aW1lIGVsYXBzZWQgd2hpbGUgc2Nhbm5pbmcgKi8KLX07Ci0KICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogLyoKICAqIEFsbCAiY2hhcmdlIiBmdW5jdGlvbnMgd2l0aCBnZnBfbWFzayBzaG91bGQgdXNlIEdGUF9LRVJORUwgb3IKQEAgLTg2LDggKzc2LDYgQEAKIAogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gaW50IG1lbV9jZ3JvdXBfc2htZW1fY2hhcmdlX2ZhbGxiYWNrKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcF9tYXNrKTsKIAogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrKTsKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKQEAgLTEyOSwxNSArMTE3LDYgQEAKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCQkgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKLQkJCQkJCSAgc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgKnJlYyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlX3pvbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKLQkJCQkJCXN0cnVjdCB6b25lICp6b25lLAotCQkJCQkJc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgKnJlYywKLQkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpOwotCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUAogZXh0ZXJuIGludCBkb19zd2FwX2FjY291bnQ7CiAjZW5kaWYKQEAgLTIyNSwxMiArMjA0LDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zaG1lbV9jaGFyZ2VfZmFsbGJhY2soc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2FkZF9scnVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGxydSkKIHsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FhdDI4NzAuaCBiL2luY2x1ZGUvbGludXgvbWZkL2FhdDI4NzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMxNmMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYWF0Mjg3MC5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC9tZmQvYWF0Mjg3MC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBOVklESUEgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IEppbiBQYXJrIDxqaW55b3VuZ3BAbnZpZGlhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9BQVQyODcwX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfQUFUMjg3MF9ICisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKy8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQUFUMjg3MF9CTF9DSF9FTgkweDAwCisjZGVmaW5lIEFBVDI4NzBfQkxNCQkweDAxCisjZGVmaW5lIEFBVDI4NzBfQkxTCQkweDAyCisjZGVmaW5lIEFBVDI4NzBfQkwxCQkweDAzCisjZGVmaW5lIEFBVDI4NzBfQkwyCQkweDA0CisjZGVmaW5lIEFBVDI4NzBfQkwzCQkweDA1CisjZGVmaW5lIEFBVDI4NzBfQkw0CQkweDA2CisjZGVmaW5lIEFBVDI4NzBfQkw1CQkweDA3CisjZGVmaW5lIEFBVDI4NzBfQkw2CQkweDA4CisjZGVmaW5lIEFBVDI4NzBfQkw3CQkweDA5CisjZGVmaW5lIEFBVDI4NzBfQkw4CQkweDBBCisjZGVmaW5lIEFBVDI4NzBfRkxSCQkweDBCCisjZGVmaW5lIEFBVDI4NzBfRk0JCTB4MEMKKyNkZWZpbmUgQUFUMjg3MF9GUwkJMHgwRAorI2RlZmluZSBBQVQyODcwX0FMU19DRkcwCTB4MEUKKyNkZWZpbmUgQUFUMjg3MF9BTFNfQ0ZHMQkweDBGCisjZGVmaW5lIEFBVDI4NzBfQUxTX0NGRzIJMHgxMAorI2RlZmluZSBBQVQyODcwX0FNQgkJMHgxMQorI2RlZmluZSBBQVQyODcwX0FMUzAJCTB4MTIKKyNkZWZpbmUgQUFUMjg3MF9BTFMxCQkweDEzCisjZGVmaW5lIEFBVDI4NzBfQUxTMgkJMHgxNAorI2RlZmluZSBBQVQyODcwX0FMUzMJCTB4MTUKKyNkZWZpbmUgQUFUMjg3MF9BTFM0CQkweDE2CisjZGVmaW5lIEFBVDI4NzBfQUxTNQkJMHgxNworI2RlZmluZSBBQVQyODcwX0FMUzYJCTB4MTgKKyNkZWZpbmUgQUFUMjg3MF9BTFM3CQkweDE5CisjZGVmaW5lIEFBVDI4NzBfQUxTOAkJMHgxQQorI2RlZmluZSBBQVQyODcwX0FMUzkJCTB4MUIKKyNkZWZpbmUgQUFUMjg3MF9BTFNBCQkweDFDCisjZGVmaW5lIEFBVDI4NzBfQUxTQgkJMHgxRAorI2RlZmluZSBBQVQyODcwX0FMU0MJCTB4MUUKKyNkZWZpbmUgQUFUMjg3MF9BTFNECQkweDFGCisjZGVmaW5lIEFBVDI4NzBfQUxTRQkJMHgyMAorI2RlZmluZSBBQVQyODcwX0FMU0YJCTB4MjEKKyNkZWZpbmUgQUFUMjg3MF9TVUJfU0VUCQkweDIyCisjZGVmaW5lIEFBVDI4NzBfU1VCX0NUUkwJMHgyMworI2RlZmluZSBBQVQyODcwX0xET19BQgkJMHgyNAorI2RlZmluZSBBQVQyODcwX0xET19DRAkJMHgyNQorI2RlZmluZSBBQVQyODcwX0xET19FTgkJMHgyNgorI2RlZmluZSBBQVQyODcwX1JFR19OVU0JCTB4MjcKKworLyogRGV2aWNlIElEcyAqLworZW51bSBhYXQyODcwX2lkIHsKKwlBQVQyODcwX0lEX0JMLAorCUFBVDI4NzBfSURfTERPQSwKKwlBQVQyODcwX0lEX0xET0IsCisJQUFUMjg3MF9JRF9MRE9DLAorCUFBVDI4NzBfSURfTERPRAorfTsKKworLyogQmFja2xpZ2h0IGNoYW5uZWxzICovCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0gxCQkweDAxCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0gyCQkweDAyCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0gzCQkweDA0CisjZGVmaW5lIEFBVDI4NzBfQkxfQ0g0CQkweDA4CisjZGVmaW5lIEFBVDI4NzBfQkxfQ0g1CQkweDEwCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0g2CQkweDIwCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0g3CQkweDQwCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0g4CQkweDgwCisjZGVmaW5lIEFBVDI4NzBfQkxfQ0hfQUxMCTB4RkYKKworLyogQmFja2xpZ2h0IGN1cnJlbnQgbWFnbml0dWRlIChtQSkgKi8KK2VudW0gYWF0Mjg3MF9jdXJyZW50IHsKKwlBQVQyODcwX0NVUlJFTlRfMF80NSA9IDEsCisJQUFUMjg3MF9DVVJSRU5UXzBfOTAsCisJQUFUMjg3MF9DVVJSRU5UXzFfODAsCisJQUFUMjg3MF9DVVJSRU5UXzJfNzAsCisJQUFUMjg3MF9DVVJSRU5UXzNfNjAsCisJQUFUMjg3MF9DVVJSRU5UXzRfNTAsCisJQUFUMjg3MF9DVVJSRU5UXzVfNDAsCisJQUFUMjg3MF9DVVJSRU5UXzZfMzAsCisJQUFUMjg3MF9DVVJSRU5UXzdfMjAsCisJQUFUMjg3MF9DVVJSRU5UXzhfMTAsCisJQUFUMjg3MF9DVVJSRU5UXzlfMDAsCisJQUFUMjg3MF9DVVJSRU5UXzlfOTAsCisJQUFUMjg3MF9DVVJSRU5UXzEwXzgsCisJQUFUMjg3MF9DVVJSRU5UXzExXzcsCisJQUFUMjg3MF9DVVJSRU5UXzEyXzYsCisJQUFUMjg3MF9DVVJSRU5UXzEzXzUsCisJQUFUMjg3MF9DVVJSRU5UXzE0XzQsCisJQUFUMjg3MF9DVVJSRU5UXzE1XzMsCisJQUFUMjg3MF9DVVJSRU5UXzE2XzIsCisJQUFUMjg3MF9DVVJSRU5UXzE3XzEsCisJQUFUMjg3MF9DVVJSRU5UXzE4XzAsCisJQUFUMjg3MF9DVVJSRU5UXzE4XzksCisJQUFUMjg3MF9DVVJSRU5UXzE5XzgsCisJQUFUMjg3MF9DVVJSRU5UXzIwXzcsCisJQUFUMjg3MF9DVVJSRU5UXzIxXzYsCisJQUFUMjg3MF9DVVJSRU5UXzIyXzUsCisJQUFUMjg3MF9DVVJSRU5UXzIzXzQsCisJQUFUMjg3MF9DVVJSRU5UXzI0XzMsCisJQUFUMjg3MF9DVVJSRU5UXzI1XzIsCisJQUFUMjg3MF9DVVJSRU5UXzI2XzEsCisJQUFUMjg3MF9DVVJSRU5UXzI3XzAsCisJQUFUMjg3MF9DVVJSRU5UXzI3XzkKK307CisKK3N0cnVjdCBhYXQyODcwX3JlZ2lzdGVyIHsKKwlib29sIHJlYWRhYmxlOworCWJvb2wgd3JpdGVhYmxlOworCXU4IHZhbHVlOworfTsKKworc3RydWN0IGFhdDI4NzBfZGF0YSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKKwlzdHJ1Y3QgYWF0Mjg3MF9yZWdpc3RlciAqcmVnX2NhY2hlOyAvKiByZWdpc3RlciBjYWNoZSAqLworCWludCBlbl9waW47IC8qIGVuYWJsZSBHUElPIHBpbiAoaWYgPCAwLCBpZ25vcmUgdGhpcyB2YWx1ZSkgKi8KKwlib29sIGlzX2VuYWJsZTsKKworCS8qIGluaXQgYW5kIHVuaW5pdCBmb3IgcGxhdGZvcm0gc3BlY2lmaWVkICovCisJaW50ICgqaW5pdCkoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCk7CisJdm9pZCAoKnVuaW5pdCkoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCk7CisKKwkvKiBpMmMgaW8gZnVuY250aW9ucyAqLworCWludCAoKnJlYWQpKHN0cnVjdCBhYXQyODcwX2RhdGEgKmFhdDI4NzAsIHU4IGFkZHIsIHU4ICp2YWwpOworCWludCAoKndyaXRlKShzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwLCB1OCBhZGRyLCB1OCB2YWwpOworCWludCAoKnVwZGF0ZSkoc3RydWN0IGFhdDI4NzBfZGF0YSAqYWF0Mjg3MCwgdTggYWRkciwgdTggbWFzaywgdTggdmFsKTsKKworCS8qIGZvciBkZWJ1Z2ZzICovCisJc3RydWN0IGRlbnRyeSAqZGVudHJ5X3Jvb3Q7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5X3JlZzsKK307CisKK3N0cnVjdCBhYXQyODcwX3N1YmRldl9pbmZvIHsKKwlpbnQgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICpwbGF0Zm9ybV9kYXRhOworfTsKKworc3RydWN0IGFhdDI4NzBfcGxhdGZvcm1fZGF0YSB7CisJaW50IGVuX3BpbjsgLyogZW5hYmxlIEdQSU8gcGluIChpZiA8IDAsIGlnbm9yZSB0aGlzIHZhbHVlKSAqLworCisJc3RydWN0IGFhdDI4NzBfc3ViZGV2X2luZm8gKnN1YmRldnM7CisJaW50IG51bV9zdWJkZXZzOworCisJLyogaW5pdCBhbmQgdW5pbml0IGZvciBwbGF0Zm9ybSBzcGVjaWZpZWQgKi8KKwlpbnQgKCppbml0KShzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwKTsKKwl2b2lkICgqdW5pbml0KShzdHJ1Y3QgYWF0Mjg3MF9kYXRhICphYXQyODcwKTsKK307CisKK3N0cnVjdCBhYXQyODcwX2JsX3BsYXRmb3JtX2RhdGEgeworCS8qIGJhY2tsaWdodCBjaGFubmVscywgZGVmYXVsdCBpcyBBQVQyODcwX0JMX0NIX0FMTCAqLworCWludCBjaGFubmVsczsKKwkvKiBiYWNrbGlnaHQgY3VycmVudCBtYWduaXR1ZGUsIGRlZmF1bHQgaXMgQUFUMjg3MF9DVVJSRU5UXzI3XzkgKi8KKwlpbnQgbWF4X2N1cnJlbnQ7CisJLyogbWF4aW11bSBicmlnaHRuZXNzLCBkZWZhdWx0IGlzIDI1NSAqLworCWludCBtYXhfYnJpZ2h0bmVzczsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX01GRF9BQVQyODcwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2FiODUwMC5oIGIvaW5jbHVkZS9saW51eC9tZmQvYWI4NTAwLmgKaW5kZXggYjMxODQzMC4uODM4YzZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYWI4NTAwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvYWI4NTAwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgQUI4NTAwX0lOVEVSUlVQVAkweEUKICNkZWZpbmUgQUI4NTAwX1JUQwkJMHhGCiAjZGVmaW5lIEFCODUwMF9NSVNDCQkweDEwCisjZGVmaW5lIEFCODUwMF9ERVZFTE9QTUVOVAkweDExCiAjZGVmaW5lIEFCODUwMF9ERUJVRwkJMHgxMgogI2RlZmluZSBBQjg1MDBfUFJPRF9URVNUCTB4MTMKICNkZWZpbmUgQUI4NTAwX09UUF9FTVVMCQkweDE1CkBAIC03NCwxMyArNzUsNiBAQAogI2RlZmluZSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMjFEQl9GCTM3CiAjZGVmaW5lIEFCODUwMF9JTlRfQUNDX0RFVEVDVF8yMURCX1IJMzgKICNkZWZpbmUgQUI4NTAwX0lOVF9HUF9TV19BRENfQ09OVl9FTkQJMzkKLSNkZWZpbmUgQUI4NTAwX0lOVF9BQ0NfREVURUNUXzFEQl9GCTMzCi0jZGVmaW5lIEFCODUwMF9JTlRfQUNDX0RFVEVDVF8xREJfUgkzNAotI2RlZmluZSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMjJEQl9GCTM1Ci0jZGVmaW5lIEFCODUwMF9JTlRfQUNDX0RFVEVDVF8yMkRCX1IJMzYKLSNkZWZpbmUgQUI4NTAwX0lOVF9BQ0NfREVURUNUXzIxREJfRgkzNwotI2RlZmluZSBBQjg1MDBfSU5UX0FDQ19ERVRFQ1RfMjFEQl9SCTM4Ci0jZGVmaW5lIEFCODUwMF9JTlRfR1BfU1dfQURDX0NPTlZfRU5ECTM5CiAjZGVmaW5lIEFCODUwMF9JTlRfR1BJTzZSCQk0MAogI2RlZmluZSBBQjg1MDBfSU5UX0dQSU83UgkJNDEKICNkZWZpbmUgQUI4NTAwX0lOVF9HUElPOFIJCTQyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg4OTk3LmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXg4OTk3LmgKaW5kZXggNjA5MzFkMC4uMGJiZDEzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvbWF4ODk5Ny5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDg5OTcuaApAQCAtMTA3LDExICsxMDcsMTYgQEAKIAl1bnNpZ25lZCBpbnQgYnVjazVfdm9sdGFnZVs4XTsKIAlib29sIGJ1Y2s1X2dwaW9kdnM7CiAKKwkvKiAtLS0tIENoYXJnZXIgY29udHJvbCAtLS0tICovCisJLyogZW9jIHN0YW5kcyBmb3IgJ2VuZCBvZiBjaGFyZ2UnICovCisJaW50IGVvY19tQTsgLyogNTAgfiAyMDBtQSBieSAxMG1BIHN0ZXAgKi8KKwkvKiBjaGFyZ2UgRnVsbCBUaW1lb3V0ICovCisJaW50IHRpbWVvdXQ7IC8qIDAgKG5vIHRpbWVvdXQpLCA1LCA2LCA3IGhvdXJzICovCisKIAkvKiBNVUlDOiBOb3QgaW1wbGVtZW50ZWQgKi8KIAkvKiBIQVBUSUM6IE5vdCBpbXBsZW1lbnRlZCAqLwogCS8qIFJUQzogTm90IGltcGxlbWVudGVkICovCiAJLyogRmxhc2g6IE5vdCBpbXBsZW1lbnRlZCAqLwotCS8qIENoYXJnZXIgY29udHJvbDogTm90IGltcGxlbWVudGVkICovCiB9OwogCiAjZW5kaWYgLyogX19MSU5VWF9NRkRfTUFYODk5OF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg4OTk4LmggYi9pbmNsdWRlL2xpbnV4L21mZC9tYXg4OTk4LmgKaW5kZXggNjFkYWExNi4uZjRmMGRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvbWF4ODk5OC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL21heDg5OTguaApAQCAtODcsNiArODcsMTUgQEAKICAqIEB3YWtldXA6IEFsbG93IHRvIHdha2UgdXAgZnJvbSBzdXNwZW5kCiAgKiBAcnRjX2RlbGF5OiBMUDM5NzQgUlRDIGNoaXAgYnVnIHRoYXQgcmVxdWlyZXMgZGVsYXkgYWZ0ZXIgYSByZWdpc3RlcgogICogd3JpdGUgYmVmb3JlIHJlYWRpbmcgaXQuCisgKiBAZW9jOiBFbmQgb2YgQ2hhcmdlIExldmVsIGluIHBlcmNlbnQ6IDEwJSB+IDQ1JSBieSA1JSBzdGVwCisgKiAgIElmIGl0IGVxdWFscyAwLCBsZWF2ZSBpdCB1bmNoYW5nZWQuCisgKiAgIE90aGVyd2lzZSwgaXQgaXMgYSBpbnZhbGlkIHZhbHVlLgorICogQHJlc3RhcnQ6IFJlc3RhcnQgTGV2ZWwgaW4gbVY6IDEwMCwgMTUwLCAyMDAsIGFuZCAtMSBmb3IgZGlzYWJsZS4KKyAqICAgSWYgaXQgZXF1YWxzIDAsIGxlYXZlIGl0IHVuY2hhbmdlZC4KKyAqICAgT3RoZXJ3aXNlLCBpdCBpcyBhIGludmFsaWQgdmFsdWUuCisgKiBAdGltZW91dDogRnVsbCBUaW1lb3V0IGluIGhvdXJzOiA1LCA2LCA3LCBhbmQgLTEgZm9yIGRpc2FibGUuCisgKiAgIElmIGl0IGVxdWFscyAwLCBsZWF2ZSBpdCB1bmNoYW5nZWQuCisgKiAgIE90aGVyd2lzZSwgbGVhdmUgaXQgdW5jaGFuZ2VkLgogICovCiBzdHJ1Y3QgbWF4ODk5OF9wbGF0Zm9ybV9kYXRhIHsKIAlzdHJ1Y3QgbWF4ODk5OF9yZWd1bGF0b3JfZGF0YQkqcmVndWxhdG9yczsKQEAgLTEwNyw2ICsxMTYsOSBAQAogCWludAkJCQlidWNrMl9kZWZhdWx0X2lkeDsKIAlib29sCQkJCXdha2V1cDsKIAlib29sCQkJCXJ0Y19kZWxheTsKKwlpbnQJCQkJZW9jOworCWludAkJCQlyZXN0YXJ0OworCWludAkJCQl0aW1lb3V0OwogfTsKIAogI2VuZGlmIC8qICBfX0xJTlVYX01GRF9NQVg4OTk4X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3N0bXBlLmggYi9pbmNsdWRlL2xpbnV4L21mZC9zdG1wZS5oCmluZGV4IGU3NjJjMjcuLmJlMWFmN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3N0bXBlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaApAQCAtNTcsNiArNTcsNyBAQAogICogQGlycV9sb2NrOiBJUlEgYnVzIGxvY2sKICAqIEBkZXY6IGRldmljZSwgbW9zdGx5IGZvciBkZXZfZGJnKCkKICAqIEBpMmM6IGkyYyBjbGllbnQKKyAqIEBwYXJ0bnVtOiBwYXJ0IG51bWJlcgogICogQHZhcmlhbnQ6IHRoZSBkZXRlY3RlZCBTVE1QRSBtb2RlbCBudW1iZXIKICAqIEByZWdzOiBsaXN0IG9mIGFkZHJlc3NlcyBvZiByZWdpc3RlcnMgd2hpY2ggYXJlIGF0IGRpZmZlcmVudCBhZGRyZXNzZXMgb24KICAqCSAgZGlmZmVyZW50IHZhcmlhbnRzLiAgSW5kZXhlZCBieSBvbmUgb2YgU1RNUEVfSURYXyouCkBAIC0xMjEsNiArMTIyLDggQEAKICAqIEBub3JlcXVlc3RfbWFzazogYml0bWFzayBzcGVjaWZ5aW5nIHdoaWNoIEdQSU9zIHNob3VsZCBfbm90XyBiZQogICoJCSAgICByZXF1ZXN0YWJsZSBkdWUgdG8gZGlmZmVyZW50IHVzYWdlIChlLmcuIHRvdWNoLCBrZXlwYWQpCiAgKgkJICAgIFNUTVBFX0dQSU9fTk9SRVFfKiBtYWNyb3MgY2FuIGJlIHVzZWQgaGVyZS4KKyAqIEBzZXR1cDogYm9hcmQgc3BlY2lmaWMgc2V0dXAgY2FsbGJhY2suCisgKiBAcmVtb3ZlOiBib2FyZCBzcGVjaWZpYyByZW1vdmUgY2FsbGJhY2sKICAqLwogc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSB7CiAJaW50IGdwaW9fYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RwczY1OTEwLmggYi9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTkxMC5oCmluZGV4IDczNTcyYzYuLjgyYjRjODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RwczY1OTEwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU5MTAuaApAQCAtNzkxLDYgKzc5MSw3IEBACiB2b2lkIHRwczY1OTEwX2dwaW9faW5pdChzdHJ1Y3QgdHBzNjU5MTAgKnRwczY1OTEwLCBpbnQgZ3Bpb19iYXNlKTsKIGludCB0cHM2NTkxMF9pcnFfaW5pdChzdHJ1Y3QgdHBzNjU5MTAgKnRwczY1OTEwLCBpbnQgaXJxLAogCQlzdHJ1Y3QgdHBzNjU5MTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworaW50IHRwczY1OTEwX2lycV9leGl0KHN0cnVjdCB0cHM2NTkxMCAqdHBzNjU5MTApOwogCiBzdGF0aWMgaW5saW5lIGludCB0cHM2NTkxMF9jaGlwX2lkKHN0cnVjdCB0cHM2NTkxMCAqdHBzNjU5MTApCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90cHM2NTkxMi5oIGIvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU5MTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNlYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU5MTIuaApAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIHRwczY1OTEyLmggIC0tICBUSSBUUFM2NTkxeAorICoKKyAqIENvcHlyaWdodCAyMDExIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqCisgKiBBdXRob3I6IE1hcmdhcml0YSBPbGF5YSA8bWFnaUBzbGltbG9naWMuY28udWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfVFBTNjU5MTJfSAorI2RlZmluZSBfX0xJTlVYX01GRF9UUFM2NTkxMl9ICisKKy8qIFRQUyByZWd1bGF0b3IgdHlwZSBsaXN0ICovCisjZGVmaW5lIFJFR1VMQVRPUl9MRE8JCTAKKyNkZWZpbmUgUkVHVUxBVE9SX0RDREMJCTEKKworLyoKKyAqIExpc3Qgb2YgcmVnaXN0ZXJzIGZvciBUUFM2NTkxMgorICovCisKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzFfQ1RSTAkJMHgwMAorI2RlZmluZSBUUFM2NTkxMl9EQ0RDMl9DVFJMCQkweDAxCisjZGVmaW5lIFRQUzY1OTEyX0RDREMzX0NUUkwJCTB4MDIKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzRfQ1RSTAkJMHgwMworI2RlZmluZSBUUFM2NTkxMl9EQ0RDMV9PUAkJMHgwNAorI2RlZmluZSBUUFM2NTkxMl9EQ0RDMV9BVlMJCTB4MDUKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzFfTElNSVQJCTB4MDYKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzJfT1AJCTB4MDcKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzJfQVZTCQkweDA4CisjZGVmaW5lIFRQUzY1OTEyX0RDREMyX0xJTUlUCQkweDA5CisjZGVmaW5lIFRQUzY1OTEyX0RDREMzX09QCQkweDBBCisjZGVmaW5lIFRQUzY1OTEyX0RDREMzX0FWUwkJMHgwQgorI2RlZmluZSBUUFM2NTkxMl9EQ0RDM19MSU1JVAkJMHgwQworI2RlZmluZSBUUFM2NTkxMl9EQ0RDNF9PUAkJMHgwRAorI2RlZmluZSBUUFM2NTkxMl9EQ0RDNF9BVlMJCTB4MEUKKyNkZWZpbmUgVFBTNjU5MTJfRENEQzRfTElNSVQJCTB4MEYKKyNkZWZpbmUgVFBTNjU5MTJfTERPMV9PUAkJMHgxMAorI2RlZmluZSBUUFM2NTkxMl9MRE8xX0FWUwkJMHgxMQorI2RlZmluZSBUUFM2NTkxMl9MRE8xX0xJTUlUCQkweDEyCisjZGVmaW5lIFRQUzY1OTEyX0xETzJfT1AJCTB4MTMKKyNkZWZpbmUgVFBTNjU5MTJfTERPMl9BVlMJCTB4MTQKKyNkZWZpbmUgVFBTNjU5MTJfTERPMl9MSU1JVAkJMHgxNQorI2RlZmluZSBUUFM2NTkxMl9MRE8zX09QCQkweDE2CisjZGVmaW5lIFRQUzY1OTEyX0xETzNfQVZTCQkweDE3CisjZGVmaW5lIFRQUzY1OTEyX0xETzNfTElNSVQJCTB4MTgKKyNkZWZpbmUgVFBTNjU5MTJfTERPNF9PUAkJMHgxOQorI2RlZmluZSBUUFM2NTkxMl9MRE80X0FWUwkJMHgxQQorI2RlZmluZSBUUFM2NTkxMl9MRE80X0xJTUlUCQkweDFCCisjZGVmaW5lIFRQUzY1OTEyX0xETzUJCQkweDFDCisjZGVmaW5lIFRQUzY1OTEyX0xETzYJCQkweDFECisjZGVmaW5lIFRQUzY1OTEyX0xETzcJCQkweDFFCisjZGVmaW5lIFRQUzY1OTEyX0xETzgJCQkweDFGCisjZGVmaW5lIFRQUzY1OTEyX0xETzkJCQkweDIwCisjZGVmaW5lIFRQUzY1OTEyX0xETzEwCQkJMHgyMQorI2RlZmluZSBUUFM2NTkxMl9USFJNCQkJMHgyMgorI2RlZmluZSBUUFM2NTkxMl9DTEszMk9VVAkJMHgyMworI2RlZmluZSBUUFM2NTkxMl9ERVZDVFJMCQkweDI0CisjZGVmaW5lIFRQUzY1OTEyX0RFVkNUUkwyCQkweDI1CisjZGVmaW5lIFRQUzY1OTEyX0kyQ19TUElfQ0ZHCQkweDI2CisjZGVmaW5lIFRQUzY1OTEyX0tFRVBfT04JCTB4MjcKKyNkZWZpbmUgVFBTNjU5MTJfS0VFUF9PTjIJCTB4MjgKKyNkZWZpbmUgVFBTNjU5MTJfU0VUX09GRjEJCTB4MjkKKyNkZWZpbmUgVFBTNjU5MTJfU0VUX09GRjIJCTB4MkEKKyNkZWZpbmUgVFBTNjU5MTJfREVGX1ZPTFQJCTB4MkIKKyNkZWZpbmUgVFBTNjU5MTJfREVGX1ZPTFRfTUFQUElORwkweDJDCisjZGVmaW5lIFRQUzY1OTEyX0RJU0NIQVJHRQkJMHgyRAorI2RlZmluZSBUUFM2NTkxMl9ESVNDSEFSR0UyCQkweDJFCisjZGVmaW5lIFRQUzY1OTEyX0VOMV9TRVQxCQkweDJGCisjZGVmaW5lIFRQUzY1OTEyX0VOMV9TRVQyCQkweDMwCisjZGVmaW5lIFRQUzY1OTEyX0VOMl9TRVQxCQkweDMxCisjZGVmaW5lIFRQUzY1OTEyX0VOMl9TRVQyCQkweDMyCisjZGVmaW5lIFRQUzY1OTEyX0VOM19TRVQxCQkweDMzCisjZGVmaW5lIFRQUzY1OTEyX0VOM19TRVQyCQkweDM0CisjZGVmaW5lIFRQUzY1OTEyX0VONF9TRVQxCQkweDM1CisjZGVmaW5lIFRQUzY1OTEyX0VONF9TRVQyCQkweDM2CisjZGVmaW5lIFRQUzY1OTEyX1BHT09ECQkJMHgzNworI2RlZmluZSBUUFM2NTkxMl9QR09PRDIJCQkweDM4CisjZGVmaW5lIFRQUzY1OTEyX0lOVF9TVFMJCTB4MzkKKyNkZWZpbmUgVFBTNjU5MTJfSU5UX01TSwkJMHgzQQorI2RlZmluZSBUUFM2NTkxMl9JTlRfU1RTMgkJMHgzQgorI2RlZmluZSBUUFM2NTkxMl9JTlRfTVNLMgkJMHgzQworI2RlZmluZSBUUFM2NTkxMl9JTlRfU1RTMwkJMHgzRAorI2RlZmluZSBUUFM2NTkxMl9JTlRfTVNLMwkJMHgzRQorI2RlZmluZSBUUFM2NTkxMl9JTlRfU1RTNAkJMHgzRgorI2RlZmluZSBUUFM2NTkxMl9JTlRfTVNLNAkJMHg0MAorI2RlZmluZSBUUFM2NTkxMl9HUElPMQkJCTB4NDEKKyNkZWZpbmUgVFBTNjU5MTJfR1BJTzIJCQkweDQyCisjZGVmaW5lIFRQUzY1OTEyX0dQSU8zCQkJMHg0MworI2RlZmluZSBUUFM2NTkxMl9HUElPNAkJCTB4NDQKKyNkZWZpbmUgVFBTNjU5MTJfR1BJTzUJCQkweDQ1CisjZGVmaW5lIFRQUzY1OTEyX1ZNT04JCQkweDQ2CisjZGVmaW5lIFRQUzY1OTEyX0xFREFfQ1RSTDEJCTB4NDcKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQV9DVFJMMgkJMHg0OAorI2RlZmluZSBUUFM2NTkxMl9MRURBX0NUUkwzCQkweDQ5CisjZGVmaW5lIFRQUzY1OTEyX0xFREFfQ1RSTDQJCTB4NEEKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQV9DVFJMNQkJMHg0QgorI2RlZmluZSBUUFM2NTkxMl9MRURBX0NUUkw2CQkweDRDCisjZGVmaW5lIFRQUzY1OTEyX0xFREFfQ1RSTDcJCTB4NEQKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQV9DVFJMOAkJMHg0RQorI2RlZmluZSBUUFM2NTkxMl9MRURCX0NUUkwxCQkweDRGCisjZGVmaW5lIFRQUzY1OTEyX0xFREJfQ1RSTDIJCTB4NTAKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQl9DVFJMMwkJMHg1MQorI2RlZmluZSBUUFM2NTkxMl9MRURCX0NUUkw0CQkweDUyCisjZGVmaW5lIFRQUzY1OTEyX0xFREJfQ1RSTDUJCTB4NTMKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQl9DVFJMNgkJMHg1NAorI2RlZmluZSBUUFM2NTkxMl9MRURCX0NUUkw3CQkweDU1CisjZGVmaW5lIFRQUzY1OTEyX0xFREJfQ1RSTDgJCTB4NTYKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQ19DVFJMMQkJMHg1NworI2RlZmluZSBUUFM2NTkxMl9MRURDX0NUUkwyCQkweDU4CisjZGVmaW5lIFRQUzY1OTEyX0xFRENfQ1RSTDMJCTB4NTkKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQ19DVFJMNAkJMHg1QQorI2RlZmluZSBUUFM2NTkxMl9MRURDX0NUUkw1CQkweDVCCisjZGVmaW5lIFRQUzY1OTEyX0xFRENfQ1RSTDYJCTB4NUMKKyNkZWZpbmUgVFBTNjU5MTJfTEVEQ19DVFJMNwkJMHg1RAorI2RlZmluZSBUUFM2NTkxMl9MRURDX0NUUkw4CQkweDVFCisjZGVmaW5lIFRQUzY1OTEyX0xFRF9SQU1QX1VQX1RJTUUJMHg1RgorI2RlZmluZSBUUFM2NTkxMl9MRURfUkFNUF9ET1dOX1RJTUUJMHg2MAorI2RlZmluZSBUUFM2NTkxMl9MRURfU0VRX0VOCQkweDYxCisjZGVmaW5lIFRQUzY1OTEyX0xPQURTV0lUQ0gJCTB4NjIKKyNkZWZpbmUgVFBTNjU5MTJfU1BBUkUJCQkweDYzCisjZGVmaW5lIFRQUzY1OTEyX1ZFUk5VTQkJCTB4NjQKKyNkZWZpbmUgVFBTNjU5MVhfTUFYX1JFR0lTVEVSCQkweDY0CisKKy8qIElSUSBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUFM2NTkxMl9JUlFfUFdSSE9MRF9GCQkwCisjZGVmaW5lIFRQUzY1OTEyX0lSUV9WTU9OCQkxCisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QV1JPTgkJMgorI2RlZmluZSBUUFM2NTkxMl9JUlFfUFdST05fTFAJCTMKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX1BXUkhPTERfUgkJNAorI2RlZmluZSBUUFM2NTkxMl9JUlFfSE9URElFCQk1CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPMV9SCQk2CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPMV9GCQk3CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPMl9SCQk4CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPMl9GCQk5CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPM19SCQkxMAorI2RlZmluZSBUUFM2NTkxMl9JUlFfR1BJTzNfRgkJMTEKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX0dQSU80X1IJCTEyCisjZGVmaW5lIFRQUzY1OTEyX0lSUV9HUElPNF9GCQkxMworI2RlZmluZSBUUFM2NTkxMl9JUlFfR1BJTzVfUgkJMTQKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX0dQSU81X0YJCTE1CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QR09PRF9EQ0RDMQkxNgorI2RlZmluZSBUUFM2NTkxMl9JUlFfUEdPT0RfRENEQzIJMTcKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX1BHT09EX0RDREMzCTE4CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QR09PRF9EQ0RDNAkxOQorI2RlZmluZSBUUFM2NTkxMl9JUlFfUEdPT0RfTERPMQkJMjAKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX1BHT09EX0xETzIJCTIxCisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QR09PRF9MRE8zCQkyMgorI2RlZmluZSBUUFM2NTkxMl9JUlFfUEdPT0RfTERPNAkJMjMKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX1BHT09EX0xETzUJCTI0CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QR09PRF9MRE82CQkyNQorI2RlZmluZSBUUFM2NTkxMl9JUlFfUEdPT0RfTERPNwkJMjYKKyNkZWZpbmUgVFBTNjU5MTJfSVJRX1BHT09EX0xEMDgJCTI3CisjZGVmaW5lIFRQUzY1OTEyX0lSUV9QR09PRF9MRE85CQkyOAorI2RlZmluZSBUUFM2NTkxMl9JUlFfUEdPT0RfTERPMTAJMjkKKworI2RlZmluZSBUUFM2NTkxMl9OVU1fSVJRCQkzMAorCisvKiBHUElPIDEgYW5kIDIgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgR1BJT19TTEVFUF9NQVNLCQkJMHg4MAorI2RlZmluZSBHUElPX1NMRUVQX1NISUZUCQk3CisjZGVmaW5lIEdQSU9fREVCX01BU0sJCQkweDEwCisjZGVmaW5lIEdQSU9fREVCX1NISUZUCQkJNAorI2RlZmluZSBHUElPX0NGR19NQVNLCQkJMHgwNAorI2RlZmluZSBHUElPX0NGR19TSElGVAkJCTIKKyNkZWZpbmUgR1BJT19TVFNfTUFTSwkJCTB4MDIKKyNkZWZpbmUgR1BJT19TVFNfU0hJRlQJCQkxCisjZGVmaW5lIEdQSU9fU0VUX01BU0sJCQkweDAxCisjZGVmaW5lIEdQSU9fU0VUX1NISUZUCQkJMAorCisvKiBHUElPIDMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgR1BJTzNfU0xFRVBfTUFTSwkJMHg4MAorI2RlZmluZSBHUElPM19TTEVFUF9TSElGVAkJNworI2RlZmluZSBHUElPM19TRUxfTUFTSwkJCTB4NDAKKyNkZWZpbmUgR1BJTzNfU0VMX1NISUZUCQkJNgorI2RlZmluZSBHUElPM19PREVOX01BU0sJCQkweDIwCisjZGVmaW5lIEdQSU8zX09ERU5fU0hJRlQJCTUKKyNkZWZpbmUgR1BJTzNfREVCX01BU0sJCQkweDEwCisjZGVmaW5lIEdQSU8zX0RFQl9TSElGVAkJCTQKKyNkZWZpbmUgR1BJTzNfUERFTl9NQVNLCQkJMHgwOAorI2RlZmluZSBHUElPM19QREVOX1NISUZUCQkzCisjZGVmaW5lIEdQSU8zX0NGR19NQVNLCQkJMHgwNAorI2RlZmluZSBHUElPM19DRkdfU0hJRlQJCQkyCisjZGVmaW5lIEdQSU8zX1NUU19NQVNLCQkJMHgwMgorI2RlZmluZSBHUElPM19TVFNfU0hJRlQJCQkxCisjZGVmaW5lIEdQSU8zX1NFVF9NQVNLCQkJMHgwMQorI2RlZmluZSBHUElPM19TRVRfU0hJRlQJCQkwCisKKy8qIEdQSU8gNCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBHUElPNF9TTEVFUF9NQVNLCQkweDgwCisjZGVmaW5lIEdQSU80X1NMRUVQX1NISUZUCQk3CisjZGVmaW5lIEdQSU80X1NFTF9NQVNLCQkJMHg0MAorI2RlZmluZSBHUElPNF9TRUxfU0hJRlQJCQk2CisjZGVmaW5lIEdQSU80X09ERU5fTUFTSwkJCTB4MjAKKyNkZWZpbmUgR1BJTzRfT0RFTl9TSElGVAkJNQorI2RlZmluZSBHUElPNF9ERUJfTUFTSwkJCTB4MTAKKyNkZWZpbmUgR1BJTzRfREVCX1NISUZUCQkJNAorI2RlZmluZSBHUElPNF9QREVOX01BU0sJCQkweDA4CisjZGVmaW5lIEdQSU80X1BERU5fU0hJRlQJCTMKKyNkZWZpbmUgR1BJTzRfQ0ZHX01BU0sJCQkweDA0CisjZGVmaW5lIEdQSU80X0NGR19TSElGVAkJCTIKKyNkZWZpbmUgR1BJTzRfU1RTX01BU0sJCQkweDAyCisjZGVmaW5lIEdQSU80X1NUU19TSElGVAkJCTEKKyNkZWZpbmUgR1BJTzRfU0VUX01BU0sJCQkweDAxCisjZGVmaW5lIEdQSU80X1NFVF9TSElGVAkJCTAKKworLyogUmVnaXN0ZXIgVEhFUk0gICgweDgwKSByZWdpc3Rlci5SZWdpc3RlckRlc2NyaXB0aW9uICovCisjZGVmaW5lIFRIRVJNX1RIRVJNX0hEX01BU0sJCTB4MjAKKyNkZWZpbmUgVEhFUk1fVEhFUk1fSERfU0hJRlQJCTUKKyNkZWZpbmUgVEhFUk1fVEhFUk1fVFNfTUFTSwkJMHgxMAorI2RlZmluZSBUSEVSTV9USEVSTV9UU19TSElGVAkJNAorI2RlZmluZSBUSEVSTV9USEVSTV9IRFNFTF9NQVNLCQkweDBDCisjZGVmaW5lIFRIRVJNX1RIRVJNX0hEU0VMX1NISUZUCQkyCisjZGVmaW5lIFRIRVJNX1JTVkQxX01BU0sJCTB4MDIKKyNkZWZpbmUgVEhFUk1fUlNWRDFfU0hJRlQJCTEKKyNkZWZpbmUgVEhFUk1fVEhFUk1fU1RBVEVfTUFTSwkJMHgwMQorI2RlZmluZSBUSEVSTV9USEVSTV9TVEFURV9TSElGVAkJMAorCisvKiBSZWdpc3RlciBEQ0RDQ1RSTDEgcmVnaXN0ZXIuUmVnaXN0ZXJEZXNjcmlwdGlvbiAqLworI2RlZmluZSBEQ0RDQ1RSTF9WQ09OX0VOQUJMRV9NQVNLCTB4ODAKKyNkZWZpbmUgRENEQ0NUUkxfVkNPTl9FTkFCTEVfU0hJRlQJNworI2RlZmluZSBEQ0RDQ1RSTF9WQ09OX1JBTkdFMV9NQVNLCTB4NDAKKyNkZWZpbmUgRENEQ0NUUkxfVkNPTl9SQU5HRTFfU0hJRlQJNgorI2RlZmluZSBEQ0RDQ1RSTF9WQ09OX1JBTkdFMF9NQVNLCTB4MjAKKyNkZWZpbmUgRENEQ0NUUkxfVkNPTl9SQU5HRTBfU0hJRlQJNQorI2RlZmluZSBEQ0RDQ1RSTF9UU1RFUDJfTUFTSwkJMHgxMAorI2RlZmluZSBEQ0RDQ1RSTF9UU1RFUDJfU0hJRlQJCTQKKyNkZWZpbmUgRENEQ0NUUkxfVFNURVAxX01BU0sJCTB4MDgKKyNkZWZpbmUgRENEQ0NUUkxfVFNURVAxX1NISUZUCQkzCisjZGVmaW5lIERDRENDVFJMX1RTVEVQMF9NQVNLCQkweDA0CisjZGVmaW5lIERDRENDVFJMX1RTVEVQMF9TSElGVAkJMgorI2RlZmluZSBEQ0RDQ1RSTF9EQ0RDMV9NT0RFX01BU0sJMHgwMgorI2RlZmluZSBEQ0RDQ1RSTF9EQ0RDMV9NT0RFX1NISUZUCTEKKworLyogUmVnaXN0ZXIgRENEQ0NUUkwyIGFuZCBEQ0RDQ1RSTDMgcmVnaXN0ZXIuUmVnaXN0ZXJEZXNjcmlwdGlvbiAqLworI2RlZmluZSBEQ0RDQ1RSTF9UU1RFUDJfTUFTSwkJMHgxMAorI2RlZmluZSBEQ0RDQ1RSTF9UU1RFUDJfU0hJRlQJCTQKKyNkZWZpbmUgRENEQ0NUUkxfVFNURVAxX01BU0sJCTB4MDgKKyNkZWZpbmUgRENEQ0NUUkxfVFNURVAxX1NISUZUCQkzCisjZGVmaW5lIERDRENDVFJMX1RTVEVQMF9NQVNLCQkweDA0CisjZGVmaW5lIERDRENDVFJMX1RTVEVQMF9TSElGVAkJMgorI2RlZmluZSBEQ0RDQ1RSTF9EQ0RDX01PREVfTUFTSwkJMHgwMgorI2RlZmluZSBEQ0RDQ1RSTF9EQ0RDX01PREVfU0hJRlQJMQorI2RlZmluZSBEQ0RDQ1RSTF9SU1ZEMF9NQVNLCQkweDAxCisjZGVmaW5lIERDRENDVFJMX1JTVkQwX1NISUZUCQkwCisKKy8qIFJlZ2lzdGVyIERDRENDVFJMNCByZWdpc3Rlci5SZWdpc3RlckRlc2NyaXB0aW9uICovCisjZGVmaW5lIERDRENDVFJMX1JBTVBfVElNRV9NQVNLCQkweDAxCisjZGVmaW5lIERDRENDVFJMX1JBTVBfVElNRV9TSElGVAkwCisKKy8qIFJlZ2lzdGVyIERDREN4X0FWUyAqLworI2RlZmluZSBEQ0RDX0FWU19FTkFCTEVfTUFTSwkJMHg4MAorI2RlZmluZSBEQ0RDX0FWU19FTkFCTEVfU0hJRlQJCTcKKyNkZWZpbmUgRENEQ19BVlNfRUNPX01BU0sJCTB4NDAKKyNkZWZpbmUgRENEQ19BVlNfRUNPX1NISUZUCQk2CisKKy8qIFJlZ2lzdGVyIERDREN4X0xJTUlUICovCisjZGVmaW5lIERDRENfTElNSVRfUkFOR0VfTUFTSwkJMHhDMAorI2RlZmluZSBEQ0RDX0xJTUlUX1JBTkdFX1NISUZUCQk2CisjZGVmaW5lIERDRENfTElNSVRfTUFYX1NFTF9NQVNLCQkweDNGCisjZGVmaW5lIERDRENfTElNSVRfTUFYX1NFTF9TSElGVAkwCisKKy8qKgorICogc3RydWN0IHRwczY1OTEyX2JvYXJkCisgKiBCb2FyZCBwbGF0Zm9ybSBkYXQgbWF5IGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSByZWd1bGF0b3JzLgorICovCitzdHJ1Y3QgdHBzNjU5MTJfYm9hcmQgeworCWludCBpc19kY2RjMV9hdnM7CisJaW50IGlzX2RjZGMyX2F2czsKKwlpbnQgaXNfZGNkYzNfYXZzOworCWludCBpc19kY2RjNF9hdnM7CisJaW50IGlycTsKKwlpbnQgaXJxX2Jhc2U7CisJaW50IGdwaW9fYmFzZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqdHBzNjU5MTJfcG1pY19pbml0X2RhdGE7Cit9OworCisvKioKKyAqIHN0cnVjdCB0cHM2NTkxMiAtIHRwczY1OTEyIHN1Yi1kcml2ZXIgY2hpcCBhY2Nlc3Mgcm91dGluZXMKKyAqLworCitzdHJ1Y3QgdHBzNjU5MTIgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwkvKiBmb3IgcmVhZC93cml0ZSBhY2NlcyAqLworCXN0cnVjdCBtdXRleCBpb19tdXRleDsKKworCS8qIEZvciBkZXZpY2UgSU8gaW50ZXJmYWNlczogSTJDIG9yIFNQSSAqLworCXZvaWQgKmNvbnRyb2xfZGF0YTsKKworCWludCAoKnJlYWQpKHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIsIHU4IHJlZywgaW50IHNpemUsIHZvaWQgKmRlc3QpOworCWludCAoKndyaXRlKShzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsIGludCBzaXplLCB2b2lkICpzcmMpOworCisJLyogQ2xpZW50IGRldmljZXMgKi8KKwlzdHJ1Y3QgdHBzNjU5MTJfcG1pYyAqcG1pYzsKKworCS8qIEdQSU8gSGFuZGxpbmcgKi8KKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW87CisKKwkvKiBJUlEgSGFuZGxpbmcgKi8KKwlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7CisJaW50IGNoaXBfaXJxOworCWludCBpcnFfYmFzZTsKKwlpbnQgaXJxX251bTsKKwl1MzIgaXJxX21hc2s7Cit9OworCitzdHJ1Y3QgdHBzNjU5MTJfcGxhdGZvcm1fZGF0YSB7CisJaW50IGlycTsKKwlpbnQgaXJxX2Jhc2U7Cit9OworCit1bnNpZ25lZCBpbnQgdHBzX2NoaXAodm9pZCk7CisKK2ludCB0cHM2NTkxMl9zZXRfYml0cyhzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsIHU4IG1hc2spOworaW50IHRwczY1OTEyX2NsZWFyX2JpdHMoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMiwgdTggcmVnLCB1OCBtYXNrKTsKK2ludCB0cHM2NTkxMl9yZWdfcmVhZChzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcpOworaW50IHRwczY1OTEyX3JlZ193cml0ZShzdHJ1Y3QgdHBzNjU5MTIgKnRwczY1OTEyLCB1OCByZWcsIHU4IHZhbCk7CitpbnQgdHBzNjU5MTJfZGV2aWNlX2luaXQoc3RydWN0IHRwczY1OTEyICp0cHM2NTkxMik7Cit2b2lkIHRwczY1OTEyX2RldmljZV9leGl0KHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIpOworaW50IHRwczY1OTEyX2lycV9pbml0KHN0cnVjdCB0cHM2NTkxMiAqdHBzNjU5MTIsIGludCBpcnEsCisJCQlzdHJ1Y3QgdHBzNjU5MTJfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjZW5kaWYgLyogIF9fTElOVVhfTUZEX1RQUzY1OTEyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvY29yZS5oCmluZGV4IDBkNTE1ZWUuLjhkZGE4ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaApAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyoKICAqIFJlZ2lzdGVyIHZhbHVlcy4KQEAgLTIzNCw5ICsyMzUsMTExIEBACiAjZGVmaW5lIFdNODMxWF9PTl9QSU5fVE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE9OX1BJTl9UTyAtIFsxOjBdICovCiAjZGVmaW5lIFdNODMxWF9PTl9QSU5fVE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE9OX1BJTl9UTyAtIFsxOjBdICovCiAKKy8qCisgKiBSMTY1MjggKDB4NDA5MCkgLSBDbG9jayBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDTEtPVVRfRU5BICovCisjZGVmaW5lIFdNODMxWF9DTEtPVVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENMS09VVF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0NMS09VVF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQ0xLT1VUX0VOQSAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtPVVRfRU5BICovCisjZGVmaW5lIFdNODMxWF9DTEtPVVRfT0QgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIENMS09VVF9PRCAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX09EX01BU0sgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBDTEtPVVRfT0QgKi8KKyNkZWZpbmUgV004MzFYX0NMS09VVF9PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQ0xLT1VUX09EICovCisjZGVmaW5lIFdNODMxWF9DTEtPVVRfT0RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS09VVF9PRCAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwNzAwICAvKiBDTEtPVVRfU0xPVCAtIFsxMDo4XSAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBDTEtPVVRfU0xPVCAtIFsxMDo4XSAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NMT1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBDTEtPVVRfU0xPVCAtIFsxMDo4XSAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NMUFNMT1RfTUFTSyAgICAgICAgICAgICAgMHgwMDcwICAvKiBDTEtPVVRfU0xQU0xPVCAtIFs2OjRdICovCisjZGVmaW5lIFdNODMxWF9DTEtPVVRfU0xQU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgIDQgIC8qIENMS09VVF9TTFBTTE9UIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004MzFYX0NMS09VVF9TTFBTTE9UX1dJRFRIICAgICAgICAgICAgICAgICAgMyAgLyogQ0xLT1VUX1NMUFNMT1QgLSBbNjo0XSAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDTEtPVVRfU1JDICovCisjZGVmaW5lIFdNODMxWF9DTEtPVVRfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENMS09VVF9TUkMgKi8KKyNkZWZpbmUgV004MzFYX0NMS09VVF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ0xLT1VUX1NSQyAqLworI2RlZmluZSBXTTgzMVhfQ0xLT1VUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtPVVRfU1JDICovCisKKy8qCisgKiBSMTY1MjkgKDB4NDA5MSkgLSBDbG9jayBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9JTkggICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBYVEFMX0lOSCAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9JTkhfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBYVEFMX0lOSCAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9JTkhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBYVEFMX0lOSCAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9JTkhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBYVEFMX0lOSCAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBYVEFMX0VOQSAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBYVEFMX0VOQSAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBYVEFMX0VOQSAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBYVEFMX0VOQSAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9CS1VQRU5BICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBYVEFMX0JLVVBFTkEgKi8KKyNkZWZpbmUgV004MzFYX1hUQUxfQktVUEVOQV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogWFRBTF9CS1VQRU5BICovCisjZGVmaW5lIFdNODMxWF9YVEFMX0JLVVBFTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIgIC8qIFhUQUxfQktVUEVOQSAqLworI2RlZmluZSBXTTgzMVhfWFRBTF9CS1VQRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBYVEFMX0JLVVBFTkEgKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9BVVRPICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRkxMX0FVVE8gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9BVVRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRkxMX0FVVE8gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9BVVRPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogRkxMX0FVVE8gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9BVVRPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0FVVE8gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9BVVRPX0ZSRVFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRkxMX0FVVE9fRlJFUSAtIFsyOjBdICovCisjZGVmaW5lIFdNODMxWF9GTExfQVVUT19GUkVRX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9BVVRPX0ZSRVEgLSBbMjowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0FVVE9fRlJFUV9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfQVVUT19GUkVRIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxNjUzMCAoMHg0MDkyKSAtIEZMTCBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTgzMVhfRkxMX0ZSQUMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfRlJBQyAqLworI2RlZmluZSBXTTgzMVhfRkxMX0ZSQUNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfRlJBQyAqLworI2RlZmluZSBXTTgzMVhfRkxMX0ZSQUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBGTExfRlJBQyAqLworI2RlZmluZSBXTTgzMVhfRkxMX0ZSQUNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJBQyAqLworI2RlZmluZSBXTTgzMVhfRkxMX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTgzMVhfRkxMX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTgzMVhfRkxMX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTgzMVhfRkxMX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODMxWF9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCisKKy8qCisgKiBSMTY1MzEgKDB4NDA5MykgLSBGTEwgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0YwMCAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTgzMVhfRkxMX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODMxWF9GTExfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9DVFJMX1JBVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDA3MCAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODMxWF9GTExfQ1RSTF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0NUUkxfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9GUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODMxWF9GTExfRlJBVElPX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0ZSQVRJT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxNjUzMiAoMHg0MDk0KSAtIEZMTCBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTgzMVhfRkxMX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfSyAtIFsxNTowXSAqLworCisvKgorICogUjE2NTMzICgweDQwOTUpIC0gRkxMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODMxWF9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODMxWF9GTExfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODMxWF9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODMxWF9GTExfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBGTExfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSMTY1MzQgKDB4NDA5NikgLSBGTEwgQ29udHJvbCA1CisgKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9DTEtfUkVGX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9DTEtfUkVGX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9DTEtfUkVGX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0NMS19SRUZfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004MzFYX0ZMTF9DTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMX0NMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTgzMVhfRkxMX0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODMxWF9GTExfQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9DTEtfU1JDIC0gWzE6MF0gKi8KKwogc3RydWN0IHJlZ3VsYXRvcl9kZXY7CiAKICNkZWZpbmUgV004MzFYX05VTV9JUlFfUkVHUyA1CisjZGVmaW5lIFdNODMxWF9OVU1fR1BJT19SRUdTIDE2CiAKIGVudW0gd204MzF4X3BhcmVudCB7CiAJV004MzEwID0gMHg4MzEwLApAQCAtMjQ4LDYgKzM1MSwxMiBAQAogCVdNODMyNiA9IDB4ODMyNiwKIH07CiAKK3N0cnVjdCB3bTgzMXg7CitlbnVtIHdtODMxeF9hdXhhZGM7CisKK3R5cGVkZWYgaW50ICgqd204MzF4X2F1eGFkY19yZWFkX2ZuKShzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsCisJCQkJICAgICBlbnVtIHdtODMxeF9hdXhhZGMgaW5wdXQpOworCiBzdHJ1Y3Qgd204MzF4IHsKIAlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKIApAQCAtMjYxLDcgKzM3MCw3IEBACiAKIAlpbnQgaXJxOyAgLyogT3VyIGNoaXAgSVJRICovCiAJc3RydWN0IG11dGV4IGlycV9sb2NrOwotCXVuc2lnbmVkIGludCBpcnFfYmFzZTsKKwlpbnQgaXJxX2Jhc2U7CiAJaW50IGlycV9tYXNrc19jdXJbV004MzFYX05VTV9JUlFfUkVHU107ICAgLyogQ3VycmVudGx5IGFjdGl2ZSB2YWx1ZSAqLwogCWludCBpcnFfbWFza3NfY2FjaGVbV004MzFYX05VTV9JUlFfUkVHU107IC8qIENhY2hlZCBoYXJkd2FyZSB2YWx1ZSAqLwogCkBAIC0yNzIsOCArMzgxLDEzIEBACiAKIAlpbnQgbnVtX2dwaW87CiAKKwkvKiBVc2VkIGJ5IHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBjb2RlIHRvIHBvc3Qgd3JpdGVzICovCisJaW50IGdwaW9fdXBkYXRlW1dNODMxWF9OVU1fR1BJT19SRUdTXTsKKwogCXN0cnVjdCBtdXRleCBhdXhhZGNfbG9jazsKLQlzdHJ1Y3QgY29tcGxldGlvbiBhdXhhZGNfZG9uZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1eGFkY19wZW5kaW5nOworCXUxNiBhdXhhZGNfYWN0aXZlOworCXdtODMxeF9hdXhhZGNfcmVhZF9mbiBhdXhhZGNfcmVhZDsKIAogCS8qIFRoZSBXTTgzMXggaGFzIGEgc2VjdXJpdHkga2V5IGJsb2NraW5nIGFjY2VzcyB0byBjZXJ0YWluCiAJICogcmVnaXN0ZXJzLiAgVGhlIG11dGV4IGlzIHRha2VuIGJ5IHRoZSBhY2Nlc3NvcnMgZm9yIGxvY2tpbmcKQEAgLTMwMCw1ICs0MTQsNiBAQAogaW50IHdtODMxeF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgpOwogaW50IHdtODMxeF9pcnFfaW5pdChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGludCBpcnEpOwogdm9pZCB3bTgzMXhfaXJxX2V4aXQoc3RydWN0IHdtODMxeCAqd204MzF4KTsKK3ZvaWQgd204MzF4X2F1eGFkY19pbml0KHN0cnVjdCB3bTgzMXggKndtODMxeCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaAppbmRleCBmZjQyZDcwLi4wYmEyNDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaApAQCAtMTIwLDYgKzEyMCw5IEBACiAJLyoqIFB1dCB0aGUgL0lSUSBsaW5lIGludG8gQ01PUyBtb2RlICovCiAJYm9vbCBpcnFfY21vczsKIAorCS8qKiBEaXNhYmxlIHRoZSB0b3VjaHNjcmVlbiAqLworCWJvb2wgZGlzYWJsZV90b3VjaDsKKwogCWludCBpcnFfYmFzZTsKIAlpbnQgZ3Bpb19iYXNlOwogCWludCBncGlvX2RlZmF1bHRzW1dNODMxWF9HUElPX05VTV07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCmluZGV4IDE4ZmQxMzAuLmMzMDliMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIEJUUkZTX01JTk9SCQkyMzQKICNkZWZpbmUgQVVUT0ZTX01JTk9SCQkyMzUKICNkZWZpbmUgTUFQUEVSX0NUUkxfTUlOT1IJMjM2CisjZGVmaW5lIExPT1BfQ1RSTF9NSU5PUgkJMjM3CiAjZGVmaW5lIE1JU0NfRFlOQU1JQ19NSU5PUgkyNTUKIAogc3RydWN0IGRldmljZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAzMTcyYTFjLi43NDM4MDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC02ODUsNyArNjg1LDcgQEAKIAlwYWdlLT5mbGFncyB8PSAoc2VjdGlvbiAmIFNFQ1RJT05TX01BU0spIDw8IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX3RvX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV90b19zZWN0aW9uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiAocGFnZS0+ZmxhZ3MgPj4gU0VDVElPTlNfUEdTSElGVCkgJiBTRUNUSU9OU19NQVNLOwogfQpAQCAtNzIwLDcgKzcyMCw3IEBACiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqbG93bWVtX3BhZ2VfYWRkcmVzcyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gX192YShQRk5fUEhZUyhwYWdlX3RvX3Bmbigoc3RydWN0IHBhZ2UgKilwYWdlKSkpOworCXJldHVybiBfX3ZhKFBGTl9QSFlTKHBhZ2VfdG9fcGZuKHBhZ2UpKSk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiAhZGVmaW5lZChXQU5UX1BBR0VfVklSVFVBTCkKQEAgLTczNyw3ICs3MzcsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBU0hFRF9QQUdFX1ZJUlRVQUwpCi12b2lkICpwYWdlX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCAqcGFnZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTsKIHZvaWQgc2V0X3BhZ2VfYWRkcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqdmlydHVhbCk7CiB2b2lkIHBhZ2VfYWRkcmVzc19pbml0KHZvaWQpOwogI2VuZGlmCkBAIC05NjIsNiArOTYyLDggQEAKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gaW50IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmbGFncyk7CitleHRlcm4gaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfbW1fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLApAQCAtOTcxLDYgKzk3MywxNCBAQAogCUJVRygpOwogCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CitzdGF0aWMgaW5saW5lIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MpCit7CisJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiBpZiB0aGVyZSdzIG5vIE1NVSAqLworCUJVRygpOworCXJldHVybiAtRUZBVUxUOworfQogI2VuZGlmCiAKIGV4dGVybiBpbnQgbWFrZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpOwpAQCAtOTg4LDggKzk5OCw2IEBACiBpbnQgZ2V0X3VzZXJfcGFnZXNfZmFzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsIGludCB3cml0ZSwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMpOwogc3RydWN0IHBhZ2UgKmdldF9kdW1wX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MpOwogCiBleHRlcm4gaW50IHRyeV90b19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKiBwYWdlLCBnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gdm9pZCBkb19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwpAQCAtMTYwMCw2ICsxNjA4LDcgQEAKIH07CiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IHRyYXBubyk7CiBleHRlcm4gaW50IF9fbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IHRyYXBubywgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKIGV4dGVybiBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX2Vhcmx5X2tpbGw7CiBleHRlcm4gaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCAwMjc5MzVjLi43NzRiODk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0zMCwyMyArMzAsNjEgQEAKICAqIG1vbWVudC4gTm90ZSB0aGF0IHdlIGhhdmUgbm8gd2F5IHRvIHRyYWNrIHdoaWNoIHRhc2tzIGFyZSB1c2luZwogICogYSBwYWdlLCB0aG91Z2ggaWYgaXQgaXMgYSBwYWdlY2FjaGUgcGFnZSwgcm1hcCBzdHJ1Y3R1cmVzIGNhbiB0ZWxsIHVzCiAgKiB3aG8gaXMgbWFwcGluZyBpdC4KKyAqCisgKiBUaGUgb2JqZWN0cyBpbiBzdHJ1Y3QgcGFnZSBhcmUgb3JnYW5pemVkIGluIGRvdWJsZSB3b3JkIGJsb2NrcyBpbgorICogb3JkZXIgdG8gYWxsb3dzIHVzIHRvIHVzZSBhdG9taWMgZG91YmxlIHdvcmQgb3BlcmF0aW9ucyBvbiBwb3J0aW9ucworICogb2Ygc3RydWN0IHBhZ2UuIFRoYXQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBieSBzbHViIGJ1dCB0aGUgYXJyYW5nZW1lbnQKKyAqIGFsbG93cyB0aGUgdXNlIG9mIGF0b21pYyBkb3VibGUgd29yZCBvcGVyYXRpb25zIG9uIHRoZSBmbGFncy9tYXBwaW5nCisgKiBhbmQgbHJ1IGxpc3QgcG9pbnRlcnMgYWxzby4KICAqLwogc3RydWN0IHBhZ2UgeworCS8qIEZpcnN0IGRvdWJsZSB3b3JkIGJsb2NrICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIEF0b21pYyBmbGFncywgc29tZSBwb3NzaWJseQogCQkJCQkgKiB1cGRhdGVkIGFzeW5jaHJvbm91c2x5ICovCi0JYXRvbWljX3QgX2NvdW50OwkJLyogVXNhZ2UgY291bnQsIHNlZSBiZWxvdy4gKi8KLQl1bmlvbiB7Ci0JCWF0b21pY190IF9tYXBjb3VudDsJLyogQ291bnQgb2YgcHRlcyBtYXBwZWQgaW4gbW1zLAotCQkJCQkgKiB0byBzaG93IHdoZW4gcGFnZSBpcyBtYXBwZWQKLQkJCQkJICogJiBsaW1pdCByZXZlcnNlIG1hcCBzZWFyY2hlcy4KKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCisJCQkJCSAqIGlub2RlIGFkZHJlc3Nfc3BhY2UsIG9yIE5VTEwuCisJCQkJCSAqIElmIHBhZ2UgbWFwcGVkIGFzIGFub255bW91cworCQkJCQkgKiBtZW1vcnksIGxvdyBiaXQgaXMgc2V0LCBhbmQKKwkJCQkJICogaXQgcG9pbnRzIHRvIGFub25fdm1hIG9iamVjdDoKKwkJCQkJICogc2VlIFBBR0VfTUFQUElOR19BTk9OIGJlbG93LgogCQkJCQkgKi8KLQkJc3RydWN0IHsJCS8qIFNMVUIgKi8KLQkJCXUxNiBpbnVzZTsKLQkJCXUxNiBvYmplY3RzOworCS8qIFNlY29uZCBkb3VibGUgd29yZCAqLworCXN0cnVjdCB7CisJCXVuaW9uIHsKKwkJCXBnb2ZmX3QgaW5kZXg7CQkvKiBPdXIgb2Zmc2V0IHdpdGhpbiBtYXBwaW5nLiAqLworCQkJdm9pZCAqZnJlZWxpc3Q7CQkvKiBzbHViIGZpcnN0IGZyZWUgb2JqZWN0ICovCisJCX07CisKKwkJdW5pb24geworCQkJLyogVXNlZCBmb3IgY21weGNoZ19kb3VibGUgaW4gc2x1YiAqLworCQkJdW5zaWduZWQgbG9uZyBjb3VudGVyczsKKworCQkJc3RydWN0IHsKKworCQkJCXVuaW9uIHsKKwkJCQkJYXRvbWljX3QgX21hcGNvdW50OwkvKiBDb3VudCBvZiBwdGVzIG1hcHBlZCBpbiBtbXMsCisJCQkJCQkJICogdG8gc2hvdyB3aGVuIHBhZ2UgaXMgbWFwcGVkCisJCQkJCQkJICogJiBsaW1pdCByZXZlcnNlIG1hcCBzZWFyY2hlcy4KKwkJCQkJCQkgKi8KKworCQkJCQlzdHJ1Y3QgeworCQkJCQkJdW5zaWduZWQgaW51c2U6MTY7CisJCQkJCQl1bnNpZ25lZCBvYmplY3RzOjE1OworCQkJCQkJdW5zaWduZWQgZnJvemVuOjE7CisJCQkJCX07CisJCQkJfTsKKwkJCQlhdG9taWNfdCBfY291bnQ7CQkvKiBVc2FnZSBjb3VudCwgc2VlIGJlbG93LiAqLworCQkJfTsKIAkJfTsKIAl9OworCisJLyogVGhpcmQgZG91YmxlIHdvcmQgYmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIFBhZ2VvdXQgbGlzdCwgZWcuIGFjdGl2ZV9saXN0CisJCQkJCSAqIHByb3RlY3RlZCBieSB6b25lLT5scnVfbG9jayAhCisJCQkJCSAqLworCisJLyogUmVtYWluZGVyIGlzIG5vdCBkb3VibGUgd29yZCBhbGlnbmVkICovCiAJdW5pb24gewotCSAgICBzdHJ1Y3QgewogCQl1bnNpZ25lZCBsb25nIHByaXZhdGU7CQkvKiBNYXBwaW5nLXByaXZhdGUgb3BhcXVlIGRhdGE6CiAJCQkJCSAJICogdXN1YWxseSB1c2VkIGZvciBidWZmZXJfaGVhZHMKIAkJCQkJCSAqIGlmIFBhZ2VQcml2YXRlIHNldDsgdXNlZCBmb3IKQEAgLTU0LDI3ICs5MiwxMyBAQAogCQkJCQkJICogaW5kaWNhdGVzIG9yZGVyIGluIHRoZSBidWRkeQogCQkJCQkJICogc3lzdGVtIGlmIFBHX2J1ZGR5IGlzIHNldC4KIAkJCQkJCSAqLwotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCi0JCQkJCQkgKiBpbm9kZSBhZGRyZXNzX3NwYWNlLCBvciBOVUxMLgotCQkJCQkJICogSWYgcGFnZSBtYXBwZWQgYXMgYW5vbnltb3VzCi0JCQkJCQkgKiBtZW1vcnksIGxvdyBiaXQgaXMgc2V0LCBhbmQKLQkJCQkJCSAqIGl0IHBvaW50cyB0byBhbm9uX3ZtYSBvYmplY3Q6Ci0JCQkJCQkgKiBzZWUgUEFHRV9NQVBQSU5HX0FOT04gYmVsb3cuCi0JCQkJCQkgKi8KLQkgICAgfTsKICNpZiBVU0VfU1BMSVRfUFRMT0NLUwotCSAgICBzcGlubG9ja190IHB0bDsKKwkJc3BpbmxvY2tfdCBwdGw7CiAjZW5kaWYKLQkgICAgc3RydWN0IGttZW1fY2FjaGUgKnNsYWI7CS8qIFNMVUI6IFBvaW50ZXIgdG8gc2xhYiAqLwotCSAgICBzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsJLyogQ29tcG91bmQgdGFpbCBwYWdlcyAqLworCQlzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYjsJLyogU0xVQjogUG9pbnRlciB0byBzbGFiICovCisJCXN0cnVjdCBwYWdlICpmaXJzdF9wYWdlOwkvKiBDb21wb3VuZCB0YWlsIHBhZ2VzICovCiAJfTsKLQl1bmlvbiB7Ci0JCXBnb2ZmX3QgaW5kZXg7CQkvKiBPdXIgb2Zmc2V0IHdpdGhpbiBtYXBwaW5nLiAqLwotCQl2b2lkICpmcmVlbGlzdDsJCS8qIFNMVUI6IGZyZWVsaXN0IHJlcS4gc2xhYiBsb2NrICovCi0JfTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIFBhZ2VvdXQgbGlzdCwgZWcuIGFjdGl2ZV9saXN0Ci0JCQkJCSAqIHByb3RlY3RlZCBieSB6b25lLT5scnVfbG9jayAhCi0JCQkJCSAqLworCiAJLyoKIAkgKiBPbiBtYWNoaW5lcyB3aGVyZSBhbGwgUkFNIGlzIG1hcHBlZCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLAogCSAqIHdlIGNhbiBzaW1wbHkgY2FsY3VsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIE9uIG1hY2hpbmVzIHdpdGgKQEAgLTEwMCw3ICsxMjQsMTYgQEAKIAkgKi8KIAl2b2lkICpzaGFkb3c7CiAjZW5kaWYKLX07Cit9CisvKgorICogSWYgYW5vdGhlciBzdWJzeXN0ZW0gc3RhcnRzIHVzaW5nIHRoZSBkb3VibGUgd29yZCBwYWlyaW5nIGZvciBhdG9taWMKKyAqIG9wZXJhdGlvbnMgb24gc3RydWN0IHBhZ2UgdGhlbiBpdCBtdXN0IGNoYW5nZSB0aGUgI2lmIHRvIGVuc3VyZQorICogcHJvcGVyIGFsaWdubWVudCBvZiB0aGUgcGFnZSBzdHJ1Y3QuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TTFVCKSAmJiBkZWZpbmVkKENPTkZJR19DTVBYQ0hHX0xPQ0FMKQorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDIqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpCisjZW5kaWYKKzsKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fbm9jYXN0IHZtX2ZsYWdzX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCAwZjgzODU4Li4xZDA5NTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC01Niw4ICs1Niw2IEBACiAjZGVmaW5lIE1NQ19USU1JTkdfVUhTX1NEUjEwNAk0CiAjZGVmaW5lIE1NQ19USU1JTkdfVUhTX0REUjUwCTUKIAotCXVuc2lnbmVkIGNoYXIJZGRyOwkJCS8qIGR1YWwgZGF0YSByYXRlIHVzZWQgKi8KLQogI2RlZmluZSBNTUNfU0RSX01PREUJCTAKICNkZWZpbmUgTU1DXzFfMlZfRERSX01PREUJMQogI2RlZmluZSBNTUNfMV84Vl9ERFJfTU9ERQkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCmluZGV4IDJlMTdjNWQuLjE4MDU0MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIE1BWF9MSU5LUyAzMgkJCiAKIHN0cnVjdCBzb2NrYWRkcl9ubCB7Ci0Jc2FfZmFtaWx5X3QJbmxfZmFtaWx5OwkvKiBBRl9ORVRMSU5LCSovCisJX19rZXJuZWxfc2FfZmFtaWx5X3QJbmxfZmFtaWx5OwkvKiBBRl9ORVRMSU5LCSovCiAJdW5zaWduZWQgc2hvcnQJbmxfcGFkOwkJLyogemVybwkJKi8KIAlfX3UzMgkJbmxfcGlkOwkJLyogcG9ydCBJRAkqLwogICAgICAgIAlfX3UzMgkJbmxfZ3JvdXBzOwkvKiBtdWx0aWNhc3QgZ3JvdXBzIG1hc2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzLmggYi9pbmNsdWRlL2xpbnV4L25mcy5oCmluZGV4IGYzODc5MTkuLjhjNmVlNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnMuaApAQCAtMjksNiArMjksOCBAQAogI2RlZmluZSBORlNfTU5UX1ZFUlNJT04JCTEKICNkZWZpbmUgTkZTX01OVDNfVkVSU0lPTgkzCiAKKyNkZWZpbmUgTkZTX1BJUEVfRElSTkFNRSAiL25mcyIKKwogLyoKICAqIE5GUyBzdGF0cy4gVGhlIGdvb2QgdGhpbmcgd2l0aCB0aGVzZSB2YWx1ZXMgaXMgdGhhdCBORlN2MyBlcnJvcnMgYXJlCiAgKiBhIHN1cGVyc2V0IG9mIE5GU3YyIGVycm9ycyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIE5GU0VSUl9XRkxVU0ggd2hpY2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggYTNjNGJjOC4uNzZmOTllOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTU2Niw2ICs1NjYsNyBAQAogCU5GU1BST0M0X0NMTlRfU0VDSU5GT19OT19OQU1FLAogCU5GU1BST0M0X0NMTlRfVEVTVF9TVEFURUlELAogCU5GU1BST0M0X0NMTlRfRlJFRV9TVEFURUlELAorCU5GU1BST0M0X0NMTlRfR0VUREVWSUNFTElTVCwKIH07CiAKIC8qIG5mczQxIHR5cGVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCA4YjU3OWJlLi5lYWFjNzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTk5LDkgKzk5LDEwIEBACiAKIHN0cnVjdCBuZnNfb3Blbl9kaXJfY29udGV4dCB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkOworCXVuc2lnbmVkIGxvbmcgYXR0cl9nZW5jb3VudDsKIAlfX3U2NCBkaXJfY29va2llOwogCV9fdTY0IGR1cF9jb29raWU7Ci0JaW50IGR1cGVkOworCXNpZ25lZCBjaGFyIGR1cGVkOwogfTsKIAogLyoKQEAgLTU2OCwxMiArNTY5LDEyIEBACiBleHRlcm4gaW50IG5mczNfcHJvY19zZXRhY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCiAJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKTsKIGV4dGVybiBpbnQgbmZzM19wcm9jX3NldF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJbW9kZV90IG1vZGUpOworCQl1bW9kZV90IG1vZGUpOwogZXh0ZXJuIHZvaWQgbmZzM19mb3JnZXRfY2FjaGVkX2FjbHMoc3RydWN0IGlub2RlICppbm9kZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbmZzM19wcm9jX3NldF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICBtb2RlX3QgbW9kZSkKKwkJCQkJICAgIHVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDUwYTY2MWYuLmI1NDc5ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMTMxLDggKzEzMSw5IEBACiAJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOwkvKiBzdXBlcmJsb2NrIGNvb2tpZSAqLwogI2VuZGlmCiAKKwl1MzIJCQlwbmZzX2Jsa3NpemU7CS8qIGxheW91dF9ibGtzaXplIGF0dHIgKi8KICNpZmRlZiBDT05GSUdfTkZTX1Y0Ci0JdTMyCQkJYXR0cl9iaXRtYXNrWzJdOy8qIFY0IGJpdG1hc2sgcmVwcmVzZW50aW5nIHRoZSBzZXQKKwl1MzIJCQlhdHRyX2JpdG1hc2tbM107LyogVjQgYml0bWFzayByZXByZXNlbnRpbmcgdGhlIHNldAogCQkJCQkJICAgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQgb24gdGhpcwogCQkJCQkJICAgZmlsZXN5c3RlbSAqLwogCXUzMgkJCWNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2tbMl07CkBAIC0xNDUsNiArMTQ2LDcgQEAKIAkJCQkJCSAgIGZpbGVzeXN0ZW0gKi8KIAlzdHJ1Y3QgcG5mc19sYXlvdXRkcml2ZXJfdHlwZSAgKnBuZnNfY3Vycl9sZDsgLyogQWN0aXZlIGxheW91dCBkcml2ZXIgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJcm9jX3JwY3dhaXRxOworCXZvaWQJCQkqcG5mc19sZF9kYXRhOwkvKiBwZXIgbW91bnQgcG9pbnQgZGF0YSAqLwogCiAJLyogdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBuZnNfY2xpZW50LT5jbF9sb2NrICovCiAJc3RydWN0IHJiX3Jvb3QJCXN0YXRlX293bmVyczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggNWIxMTU5NS4uYWJkNjE1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTEyMiw2ICsxMjIsNyBAQAogCXN0cnVjdCB0aW1lc3BlYwkJdGltZV9kZWx0YTsgLyogc2VydmVyIHRpbWUgZ3JhbnVsYXJpdHkgKi8KIAlfX3UzMgkJCWxlYXNlX3RpbWU7IC8qIGluIHNlY29uZHMgKi8KIAlfX3UzMgkJCWxheW91dHR5cGU7IC8qIHN1cHBvcnRlZCBwbmZzIGxheW91dCBkcml2ZXIgKi8KKwlfX3UzMgkJCWJsa3NpemU7IC8qIHByZWZlcnJlZCBwbmZzIGlvIGJsb2NrIHNpemUgKi8KIH07CiAKIHN0cnVjdCBuZnNfZnNzdGF0IHsKQEAgLTIzNSw2ICsyMzYsMTcgQEAKIAlnZnBfdCBnZnBfZmxhZ3M7CiB9OwogCitzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VsaXN0X2FyZ3MgeworCWNvbnN0IHN0cnVjdCBuZnNfZmggKmZoOworCXUzMiBsYXlvdXRjbGFzczsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzIHNlcV9hcmdzOworfTsKKworc3RydWN0IG5mczRfZ2V0ZGV2aWNlbGlzdF9yZXMgeworCXN0cnVjdCBwbmZzX2RldmljZWxpc3QgKmRldmxpc3Q7CisJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzIHNlcV9yZXM7Cit9OworCiBzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VpbmZvX2FyZ3MgewogCXN0cnVjdCBwbmZzX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzIHNlcV9hcmdzOwpAQCAtMjU3LDEyICsyNjksMTMgQEAKIAlzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cjsKIAljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyBzZXFfcmVzOworCWludCBzdGF0dXM7CiB9OwogCiBzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfZGF0YSB7CiAJc3RydWN0IHJwY190YXNrIHRhc2s7CiAJc3RydWN0IG5mc19mYXR0ciBmYXR0cjsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxzZWdfbGlzdDsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CiAJc3RydWN0IG5mczRfbGF5b3V0Y29tbWl0X2FyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfcmVzIHJlczsKQEAgLTc2MCw2ICs3NzMsMTEgQEAKIAlzdHJ1Y3QgcG9zaXhfYWNsICoJYWNsX2RlZmF1bHQ7CiB9OwogCitzdHJ1Y3QgbmZzNF9zdHJpbmcgeworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciAqZGF0YTsKK307CisKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiAKIHR5cGVkZWYgdTY0IGNsaWVudGlkNDsKQEAgLTk0MywxOCArOTYxLDEzIEBACiB9OwogCiBzdHJ1Y3QgbmZzNF9zZXJ2ZXJfY2Fwc19yZXMgewotCXUzMgkJCQlhdHRyX2JpdG1hc2tbMl07CisJdTMyCQkJCWF0dHJfYml0bWFza1szXTsKIAl1MzIJCQkJYWNsX2JpdG1hc2s7CiAJdTMyCQkJCWhhc19saW5rczsKIAl1MzIJCQkJaGFzX3N5bWxpbmtzOwogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcwlzZXFfcmVzOwogfTsKIAotc3RydWN0IG5mczRfc3RyaW5nIHsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWNoYXIgKmRhdGE7Ci19OwotCiAjZGVmaW5lIE5GUzRfUEFUSE5BTUVfTUFYQ09NUE9ORU5UUyA1MTIKIHN0cnVjdCBuZnM0X3BhdGhuYW1lIHsKIAl1bnNpZ25lZCBpbnQgbmNvbXBvbmVudHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggYmQ3MTZmOC4uOTE4MGRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtMTk2LDEyICsxOTYsMTMgQEAKIAkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSBpbnQgKmxlbnApOwogZXh0ZXJuIGludCBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCSAgICAgIGNoYXIgKnByb3BuYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAogCQkJCSAgICAgIHUzMiAqb3V0X3ZhbHVlcywKIAkJCQkgICAgICBzaXplX3Qgc3opOwogCi1leHRlcm4gaW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNoYXIgKnByb3BuYW1lLAotCQkJCQljb25zdCBjaGFyICoqb3V0X3N0cmluZyk7CitleHRlcm4gaW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICAgY29uc3QgY2hhciAqcHJvcG5hbWUsCisJCQkJICAgY29uc3QgY2hhciAqKm91dF9zdHJpbmcpOwogZXh0ZXJuIGludCBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwKIAkJCQkgICBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKTsKQEAgLTI0MiwyMSArMjQzLDMwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJY2hhciAqcHJvcG5hbWUsIHUzMiAqb3V0X3ZhbHVlcywgc2l6ZV90IHN6KQorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAorCQkJCQkgICAgIHUzMiAqb3V0X3ZhbHVlcywgc2l6ZV90IHN6KQogewogCXJldHVybiAtRU5PU1lTOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCWNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICoqb3V0X3N0cmluZykKKwkJCQkJICBjb25zdCBjaGFyICpwcm9wbmFtZSwKKwkJCQkJICBjb25zdCBjaGFyICoqb3V0X3N0cmluZykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpvZl9nZXRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJaW50ICpsZW5wKQoreworCXJldHVybiBOVUxMOworfQorCiAjZW5kaWYgLyogQ09ORklHX09GICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJICAgICAgIGNoYXIgKnByb3BuYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCQkgICAgICAgdTMyICpvdXRfdmFsdWUpCiB7CiAJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5wLCBwcm9wbmFtZSwgb3V0X3ZhbHVlLCAxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKaW5kZXggYWVjODAyNS4uNTIyODBhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKQEAgLTU3LDYgKzU3LDggQEAKIGV4dGVybiB2b2lkIG9mX2dwaW9jaGlwX2FkZChzdHJ1Y3QgZ3Bpb19jaGlwICpnYyk7CiBleHRlcm4gdm9pZCBvZl9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IGdwaW9fY2hpcCAqZ2MpOwogZXh0ZXJuIHN0cnVjdCBncGlvX2NoaXAgKm9mX25vZGVfdG9fZ3Bpb2NoaXAoc3RydWN0IGRldmljZV9ub2RlICpucCk7CitleHRlcm4gaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCWNvbnN0IHZvaWQgKmdwaW9fc3BlYywgdTMyICpmbGFncyk7CiAKICNlbHNlIC8qIENPTkZJR19PRl9HUElPICovCiAKQEAgLTcyLDYgKzc0LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9mX2dwaW9fc2ltcGxlX3hsYXRlKHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCSAgICAgICBjb25zdCB2b2lkICpncGlvX3NwZWMsIHUzMiAqZmxhZ3MpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBvZl9ncGlvY2hpcF9hZGQoc3RydWN0IGdwaW9fY2hpcCAqZ2MpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG9mX2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYykgeyB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggM2U1YTFiMS4uZTkwYTY3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTEyNCw5ICsxMjQsNiBAQAogCiAJLyogU0xPQiAqLwogCVBHX3Nsb2JfZnJlZSA9IFBHX3ByaXZhdGUsCi0KLQkvKiBTTFVCICovCi0JUEdfc2x1Yl9mcm96ZW4gPSBQR19hY3RpdmUsCiB9OwogCiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSApAQCAtMjEyLDggKzIwOSw2IEBACiAKIF9fUEFHRUZMQUcoU2xvYkZyZWUsIHNsb2JfZnJlZSkKIAotX19QQUdFRkxBRyhTbHViRnJvemVuLCBzbHViX2Zyb3plbikKLQogLyoKICAqIFByaXZhdGUgcGFnZSBtYXJraW5ncyB0aGF0IG1heSBiZSB1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtIHRoYXQgb3ducyB0aGUgcGFnZQogICogZm9yIGl0cyBvd24gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzYTU2MjZkLi44YzIzMGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTI1MSw3ICsyNTEsOCBAQAogCXU4CQlyZXZpc2lvbjsJLyogUENJIHJldmlzaW9uLCBsb3cgYnl0ZSBvZiBjbGFzcyB3b3JkICovCiAJdTgJCWhkcl90eXBlOwkvKiBQQ0kgaGVhZGVyIHR5cGUgKGBtdWx0aScgZmxhZyBtYXNrZWQgb3V0KSAqLwogCXU4CQlwY2llX2NhcDsJLyogUENJLUUgY2FwYWJpbGl0eSBvZmZzZXQgKi8KLQl1OAkJcGNpZV90eXBlOwkvKiBQQ0ktRSBkZXZpY2UvcG9ydCB0eXBlICovCisJdTgJCXBjaWVfdHlwZTo0OwkvKiBQQ0ktRSBkZXZpY2UvcG9ydCB0eXBlICovCisJdTgJCXBjaWVfbXBzczozOwkvKiBQQ0ktRSBNYXggUGF5bG9hZCBTaXplIFN1cHBvcnRlZCAqLwogCXU4CQlyb21fYmFzZV9yZWc7CS8qIHdoaWNoIGNvbmZpZyByZWdpc3RlciBjb250cm9scyB0aGUgUk9NICovCiAJdTgJCXBpbjsgIAkJLyogd2hpY2ggaW50ZXJydXB0IHBpbiB0aGlzIGRldmljZSB1c2VzICovCiAKQEAgLTYxNyw2ICs2MTgsMTYgQEAKIC8qIHRoZXNlIGV4dGVybmFsIGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiBQQ0kgc3VwcG9ydCBpcyBlbmFibGVkICovCiAjaWZkZWYgQ09ORklHX1BDSQogCitleHRlcm4gdm9pZCBwY2llX2J1c19jb25maWd1cmVfc2V0dGluZ3Moc3RydWN0IHBjaV9idXMgKmJ1cywgdTggc21wc3MpOworCitlbnVtIHBjaWVfYnVzX2NvbmZpZ190eXBlcyB7CisJUENJRV9CVVNfUEVSRk9STUFOQ0UsCisJUENJRV9CVVNfU0FGRSwKKwlQQ0lFX0JVU19QRUVSMlBFRVIsCit9OworCitleHRlcm4gZW51bSBwY2llX2J1c19jb25maWdfdHlwZXMgcGNpZV9idXNfY29uZmlnOworCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZTsKIAogLyogRG8gTk9UIGRpcmVjdGx5IGFjY2VzcyB0aGVzZSB0d28gdmFyaWFibGVzLCB1bmxlc3MgeW91IGFyZSBhcmNoIHNwZWNpZmljIHBjaQpAQCAtNzk2LDEwICs4MDcsMTMgQEAKIGludCBwY2l4X3NldF9tbXJiYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbW1yYmMpOwogaW50IHBjaWVfZ2V0X3JlYWRycShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2llX3NldF9yZWFkcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJxKTsKK2ludCBwY2llX2dldF9tcHMoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgcGNpZV9zZXRfbXBzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtcHMpOwogaW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pOwogaW50IF9fbXVzdF9jaGVjayBwY2lfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpKTsKK2ludCBfX211c3RfY2hlY2sgcGNpX3JlYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpLCByZXNvdXJjZV9zaXplX3QgYWRkX3NpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbik7CiBpbnQgcGNpX3NlbGVjdF9iYXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCiAvKiBST00gY29udHJvbCByZWxhdGVkIHJvdXRpbmVzICovCkBAIC04NDMsOCArODU3LDggQEAKIHZvaWQgcGNpX2Rpc2FibGVfaWRvKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CiAKIGVudW0gcGNpX29iZmZfc2lnbmFsX3R5cGUgewotCVBDSV9FWFBfT0JGRl9TSUdOQUxfTDAsCi0JUENJX0VYUF9PQkZGX1NJR05BTF9BTFdBWVMsCisJUENJX0VYUF9PQkZGX1NJR05BTF9MMCA9IDAsCisJUENJX0VYUF9PQkZGX1NJR05BTF9BTFdBWVMgPSAxLAogfTsKIGludCBwY2lfZW5hYmxlX29iZmYoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSBwY2lfb2JmZl9zaWduYWxfdHlwZSk7CiB2b2lkIHBjaV9kaXNhYmxlX29iZmYoc3RydWN0IHBjaV9kZXYgKmRldik7CkBAIC04NzksNyArODkzLDcgQEAKIHZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqKTsKIGludCBwY2lfZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgbWFzayk7CiB2b2lkIHBjaV9maXh1cF9pcnFzKHU4ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCAqKSwKLQkJICAgIGludCAoKikoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSk7CisJCSAgICBpbnQgKCopKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1OCkpOwogI2RlZmluZSBIQVZFX1BDSV9SRVFfUkVHSU9OUwkyCiBpbnQgX19tdXN0X2NoZWNrIHBjaV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKiwgY29uc3QgY2hhciAqKTsKIGludCBfX211c3RfY2hlY2sgcGNpX3JlcXVlc3RfcmVnaW9uc19leGNsdXNpdmUoc3RydWN0IHBjaV9kZXYgKiwgY29uc3QgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYjAwYzRlYy4uYWU5NmJiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTI3MDksNiArMjcwOSwxNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUJMHgzYTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNV8zNDAwX1NFUklFU19MUENfTUlOCTB4M2IwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfTFBDX01BWAkweDNiMWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQjAJMHgzYzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkIxCTB4M2MyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CMgkweDNjMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQjMJMHgzYzIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkI0CTB4M2MyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CNQkweDNjMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQjYJMHgzYzI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkI3CTB4M2MyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05COAkweDNjMmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQjkJMHgzYzJmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkIJMHg0MDJmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8xNgkweDY1ZjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81MTAwXzIxCTB4NjVmNQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCAyNDViYWZkLi5jODE2MDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtOTQ0LDggKzk0NCwxMCBAQAogCiBleHRlcm4gaW50IHBlcmZfbnVtX2NvdW50ZXJzKHZvaWQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnBlcmZfcG11X25hbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotZXh0ZXJuIHZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKK2V4dGVybiB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtMTA1OSwxNyArMTA2MSwyMCBAQAogCiBleHRlcm4gc3RydWN0IGp1bXBfbGFiZWxfa2V5IHBlcmZfc2NoZWRfZXZlbnRzOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCWlmIChzdGF0aWNfYnJhbmNoKCZwZXJmX3NjaGVkX2V2ZW50cykpCi0JCV9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2spOworCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihwcmV2LCB0YXNrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewogCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCBOVUxMLCAwKTsKIAotCV9fcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCh0YXNrLCBuZXh0KTsKKwlpZiAoc3RhdGljX2JyYW5jaCgmcGVyZl9zY2hlZF9ldmVudHMpKQorCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCk7CiB9CiAKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CkBAIC0xMTM5LDEwICsxMTQ0LDExIEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCQkJeyB9CitwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQkJCXsgfQorcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oIGIvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oCmluZGV4IGVlYzNiYWUuLjhmYzdkZDFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcnNvbmFsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJzb25hbGl0eS5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBUaGVzZSBvY2N1cHkgdGhlIHRvcCB0aHJlZSBieXRlcy4KICAqLwogZW51bSB7CisJVU5BTUUyNgk9ICAgICAgICAgICAgICAgMHgwMDIwMDAwLAogCUFERFJfTk9fUkFORE9NSVpFID0gCTB4MDA0MDAwMCwJLyogZGlzYWJsZSByYW5kb21pemF0aW9uIG9mIFZBIHNwYWNlICovCiAJRkRQSUNfRlVOQ1BUUlMgPQkweDAwODAwMDAsCS8qIHVzZXJzcGFjZSBmdW5jdGlvbiBwdHJzIHBvaW50IHRvIGRlc2NyaXB0b3JzCiAJCQkJCQkgKiAoc2lnbmFsIGhhbmRsaW5nKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL250Y190aGVybWlzdG9yLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbnRjX3RoZXJtaXN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQyODYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL250Y190aGVybWlzdG9yLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIG50Y190aGVybWlzdG9yLmggLSBOVEMgVGhlcm1pc3RvcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBNeXVuZ0pvbyBIYW0gPG15dW5nam9vLmhhbUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX0xJTlVYX05UQ19ICisjZGVmaW5lIF9MSU5VWF9OVENfSAorCitlbnVtIG50Y190aGVybWlzdG9yX3R5cGUgeworCVRZUEVfTkNQWFhXQjQ3MywKKwlUWVBFX05DUFhYV0wzMzMsCit9OworCitzdHJ1Y3QgbnRjX3RoZXJtaXN0b3JfcGxhdGZvcm1fZGF0YSB7CisJLyoKKwkgKiBPbmUgKG5vdCBib3RoKSBvZiByZWFkX3VWIGFuZCByZWFkX29obSBzaG91bGQgYmUgcHJvdmlkZWQgYW5kIG9ubHkKKwkgKiBvbmUgb2YgdGhlIHR3byBzaG91bGQgYmUgcHJvdmlkZWQuCisJICogQm90aCBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBuZWdhdGl2ZSB2YWx1ZSBmb3IgYW4gZXJyb3IgY2FzZS4KKwkgKgorCSAqIHB1bGx1cF91ViwgcHVsbHVwX29obSwgcHVsbGRvd25fb2htLCBhbmQgY29ubmVjdCBhcmUgcmVxdWlyZWQgdG8gdXNlCisJICogcmVhZF91VigpCisJICoKKwkgKiBIb3cgdG8gc2V0dXAgcHVsbHVwX29obSwgcHVsbGRvd25fb2htLCBhbmQgY29ubmVjdCBpcworCSAqIGRlc2NyaWJlZCBhdCBEb2N1bWVudGF0aW9uL2h3bW9uL250YworCSAqCisJICogcHVsbHVwL2Rvd25fb2htOiAwIGZvciBpbmZpbml0ZSAvIG5vdC1jb25uZWN0ZWQKKwkgKi8KKwlpbnQgKCpyZWFkX3VWKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgcHVsbHVwX3VWOworCisJdW5zaWduZWQgaW50IHB1bGx1cF9vaG07CisJdW5zaWduZWQgaW50IHB1bGxkb3duX29obTsKKwllbnVtIHsgTlRDX0NPTk5FQ1RFRF9QT1NJVElWRSwgTlRDX0NPTk5FQ1RFRF9HUk9VTkQgfSBjb25uZWN0OworCisJaW50ICgqcmVhZF9vaG0pKHZvaWQpOworfTsKKworI2VuZGlmIC8qIF9MSU5VWF9OVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaCBiL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKaW5kZXggMjEwOTdjYi4uZjllYzE3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCkBAIC03Miw4ICs3Miw2IEBACiBleHRlcm4gdm9pZCBwbV9nZW5wZF9pbml0KHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQsCiAJCQkgIHN0cnVjdCBkZXZfcG93ZXJfZ292ZXJub3IgKmdvdiwgYm9vbCBpc19vZmYpOwogZXh0ZXJuIGludCBwbV9nZW5wZF9wb3dlcm9uKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQpOwotZXh0ZXJuIHZvaWQgcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkKHZvaWQpOwotZXh0ZXJuIHZvaWQgZ2VucGRfcXVldWVfcG93ZXJfb2ZmX3dvcmsoc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcG1fZ2VucGRfYWRkX2RldmljZShzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkLAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTEwMSw4ICs5OSwxNCBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQotc3RhdGljIGlubGluZSB2b2lkIHBtX2dlbnBkX3Bvd2Vyb2ZmX3VudXNlZCh2b2lkKSB7fQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX1JVTlRJTUUKK2V4dGVybiB2b2lkIGdlbnBkX3F1ZXVlX3Bvd2VyX29mZl93b3JrKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQpOworZXh0ZXJuIHZvaWQgcG1fZ2VucGRfcG93ZXJvZmZfdW51c2VkKHZvaWQpOworI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5wZF9xdWV1ZV9wb3dlcl9vZmZfd29yayhzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdwZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9nZW5wZF9wb3dlcm9mZl91bnVzZWQodm9pZCkge30KICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1BNX0RPTUFJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAppbmRleCA5YTUzYjk5Li5iNzY4MTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIF9fTElOVVhfUE9TSVhfQUNMX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiAjZGVmaW5lIEFDTF9VTkRFRklORURfSUQJKC0xKQogCkBAIC0zOCw3ICszOSwxMCBAQAogfTsKIAogc3RydWN0IHBvc2l4X2FjbCB7Ci0JYXRvbWljX3QJCWFfcmVmY291bnQ7CisJdW5pb24geworCQlhdG9taWNfdAkJYV9yZWZjb3VudDsKKwkJc3RydWN0IHJjdV9oZWFkCQlhX3JjdTsKKwl9OwogCXVuc2lnbmVkIGludAkJYV9jb3VudDsKIAlzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5CWFfZW50cmllc1swXTsKIH07CkBAIC02NSw3ICs2OSw3IEBACiBwb3NpeF9hY2xfcmVsZWFzZShzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJaWYgKGFjbCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2wtPmFfcmVmY291bnQpKQotCQlrZnJlZShhY2wpOworCQlrZnJlZV9yY3UoYWNsLCBhX3JjdSk7CiB9CiAKIApAQCAtNzUsMjkgKzc5LDMxIEBACiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2FsbG9jKGludCwgZ2ZwX3QpOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfdmFsaWQoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqKTsKIGV4dGVybiBpbnQgcG9zaXhfYWNsX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgaW50KTsKLWV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfZnJvbV9tb2RlKG1vZGVfdCwgZ2ZwX3QpOwotZXh0ZXJuIGludCBwb3NpeF9hY2xfZXF1aXZfbW9kZShjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICosIG1vZGVfdCAqKTsKLWV4dGVybiBpbnQgcG9zaXhfYWNsX2NyZWF0ZShzdHJ1Y3QgcG9zaXhfYWNsICoqLCBnZnBfdCwgbW9kZV90ICopOwotZXh0ZXJuIGludCBwb3NpeF9hY2xfY2htb2Qoc3RydWN0IHBvc2l4X2FjbCAqKiwgZ2ZwX3QsIG1vZGVfdCk7CitleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2Zyb21fbW9kZSh1bW9kZV90LCBnZnBfdCk7CitleHRlcm4gaW50IHBvc2l4X2FjbF9lcXVpdl9tb2RlKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgdW1vZGVfdCAqKTsKK2V4dGVybiBpbnQgcG9zaXhfYWNsX2NyZWF0ZShzdHJ1Y3QgcG9zaXhfYWNsICoqLCBnZnBfdCwgdW1vZGVfdCAqKTsKK2V4dGVybiBpbnQgcG9zaXhfYWNsX2NobW9kKHN0cnVjdCBwb3NpeF9hY2wgKiosIGdmcF90LCB1bW9kZV90KTsKIAogZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKmdldF9wb3NpeF9hY2woc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gaW50IHNldF9wb3NpeF9hY2woc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IHBvc2l4X2FjbCAqKTsKIAogI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2l4X2FjbCAqZ2V0X2NhY2hlZF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NpeF9hY2wgKiphY2xfYnlfdHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgcG9zaXhfYWNsICoqcCwgKmFjbDsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKLQkJcCA9ICZpbm9kZS0+aV9hY2w7Ci0JCWJyZWFrOworCQlyZXR1cm4gJmlub2RlLT5pX2FjbDsKIAljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6Ci0JCXAgPSAmaW5vZGUtPmlfZGVmYXVsdF9hY2w7Ci0JCWJyZWFrOworCQlyZXR1cm4gJmlub2RlLT5pX2RlZmF1bHRfYWNsOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlCVUcoKTsKIAl9Ci0JYWNsID0gQUNDRVNTX09OQ0UoKnApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NpeF9hY2wgKmdldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKipwID0gYWNsX2J5X3R5cGUoaW5vZGUsIHR5cGUpOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IEFDQ0VTU19PTkNFKCpwKTsKIAlpZiAoYWNsKSB7CiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWFjbCA9ICpwOwpAQCAtMTA4LDQxICsxMTQsMjAgQEAKIAlyZXR1cm4gYWNsOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuZWdhdGl2ZV9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zaXhfYWNsICpnZXRfY2FjaGVkX2FjbF9yY3Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqKnAsICphY2w7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6Ci0JCXAgPSAmaW5vZGUtPmlfYWNsOwotCQlicmVhazsKLQljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6Ci0JCXAgPSAmaW5vZGUtPmlfZGVmYXVsdF9hY2w7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQlhY2wgPSBBQ0NFU1NfT05DRSgqcCk7Ci0JaWYgKGFjbCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZSgqYWNsX2J5X3R5cGUoaW5vZGUsIHR5cGUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jYWNoZWRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBpbnQgdHlwZSwKIAkJCQkgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKIHsKLQlzdHJ1Y3QgcG9zaXhfYWNsICpvbGQgPSBOVUxMOworCXN0cnVjdCBwb3NpeF9hY2wgKipwID0gYWNsX2J5X3R5cGUoaW5vZGUsIHR5cGUpOworCXN0cnVjdCBwb3NpeF9hY2wgKm9sZDsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgotCQlvbGQgPSBpbm9kZS0+aV9hY2w7Ci0JCWlub2RlLT5pX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKLQkJYnJlYWs7Ci0JY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgotCQlvbGQgPSBpbm9kZS0+aV9kZWZhdWx0X2FjbDsKLQkJaW5vZGUtPmlfZGVmYXVsdF9hY2wgPSBwb3NpeF9hY2xfZHVwKGFjbCk7Ci0JCWJyZWFrOwotCX0KKwlvbGQgPSAqcDsKKwlyY3VfYXNzaWduX3BvaW50ZXIoKnAsIHBvc2l4X2FjbF9kdXAoYWNsKSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWlmIChvbGQgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXBvc2l4X2FjbF9yZWxlYXNlKG9sZCk7CkBAIC0xNTAsMTggKzEzNSwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9yZ2V0X2NhY2hlZF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqb2xkID0gTlVMTDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICoqcCA9IGFjbF9ieV90eXBlKGlub2RlLCB0eXBlKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICpvbGQ7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKLQkJb2xkID0gaW5vZGUtPmlfYWNsOwotCQlpbm9kZS0+aV9hY2wgPSBBQ0xfTk9UX0NBQ0hFRDsKLQkJYnJlYWs7Ci0JY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgotCQlvbGQgPSBpbm9kZS0+aV9kZWZhdWx0X2FjbDsKLQkJaW5vZGUtPmlfZGVmYXVsdF9hY2wgPSBBQ0xfTk9UX0NBQ0hFRDsKLQkJYnJlYWs7Ci0JfQorCW9sZCA9ICpwOworCSpwID0gQUNMX05PVF9DQUNIRUQ7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWlmIChvbGQgIT0gQUNMX05PVF9DQUNIRUQpCiAJCXBvc2l4X2FjbF9yZWxlYXNlKG9sZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyL2JxMjB6NzUuaCBiL2luY2x1ZGUvbGludXgvcG93ZXIvYnEyMHo3NS5oCmluZGV4IGIwODQzYjYuLjEzOThlYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXIvYnEyMHo3NS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXIvYnEyMHo3NS5oCkBAIC0yOSwxMSArMjksMTQgQEAKICAqIEBiYXR0ZXJ5X2RldGVjdDoJCUdQSU8gd2hpY2ggaXMgdXNlZCB0byBkZXRlY3QgYmF0dGVyeSBwcmVzZW5jZQogICogQGJhdHRlcnlfZGV0ZWN0X3ByZXNlbnQ6CWdwaW8gc3RhdGUgd2hlbiBiYXR0ZXJ5IGlzIHByZXNlbnQgKDAgLyAxKQogICogQGkyY19yZXRyeV9jb3VudDoJCSMgb2YgdGltZXMgdG8gcmV0cnkgb24gaTJjIElPIGZhaWx1cmUKKyAqIEBwb2xsX3JldHJ5X2NvdW50OgkJIyBvZiB0aW1lcyB0byByZXRyeSBsb29raW5nIGZvciBuZXcgc3RhdHVzIGFmdGVyCisgKgkJCQlleHRlcm5hbCBjaGFuZ2Ugbm90aWZpY2F0aW9uCiAgKi8KIHN0cnVjdCBicTIwejc1X3BsYXRmb3JtX2RhdGEgewogCWludCBiYXR0ZXJ5X2RldGVjdDsKIAlpbnQgYmF0dGVyeV9kZXRlY3RfcHJlc2VudDsKIAlpbnQgaTJjX3JldHJ5X2NvdW50OworCWludCBwb2xsX3JldHJ5X2NvdW50OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyL21heDE3MDQyX2JhdHRlcnkuaCBiL2luY2x1ZGUvbGludXgvcG93ZXIvbWF4MTcwNDJfYmF0dGVyeS5oCmluZGV4IDc5OTVkZWIuLmZlOTkyMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXIvbWF4MTcwNDJfYmF0dGVyeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXIvbWF4MTcwNDJfYmF0dGVyeS5oCkBAIC0yMyw4ICsyMyw5OSBAQAogI2lmbmRlZiBfX01BWDE3MDQyX0JBVFRFUllfSF8KICNkZWZpbmUgX19NQVgxNzA0Ml9CQVRURVJZX0hfCiAKKyNkZWZpbmUgTUFYMTcwNDJfU1RBVFVTX0JhdHRBYnNlbnQJKDEgPDwgMykKKyNkZWZpbmUgTUFYMTcwNDJfQkFUVEVSWV9GVUxMCSgxMDApCisjZGVmaW5lIE1BWDE3MDQyX0RFRkFVTFRfU05TX1JFU0lTVE9SCSgxMDAwMCkKKworZW51bSBtYXgxNzA0Ml9yZWdpc3RlciB7CisJTUFYMTcwNDJfU1RBVFVTCQk9IDB4MDAsCisJTUFYMTcwNDJfVkFMUlRfVGgJPSAweDAxLAorCU1BWDE3MDQyX1RBTFJUX1RoCT0gMHgwMiwKKwlNQVgxNzA0Ml9TQUxSVF9UaAk9IDB4MDMsCisJTUFYMTcwNDJfQXRSYXRlCQk9IDB4MDQsCisJTUFYMTcwNDJfUmVwQ2FwCQk9IDB4MDUsCisJTUFYMTcwNDJfUmVwU09DCQk9IDB4MDYsCisJTUFYMTcwNDJfQWdlCQk9IDB4MDcsCisJTUFYMTcwNDJfVEVNUAkJPSAweDA4LAorCU1BWDE3MDQyX1ZDRUxMCQk9IDB4MDksCisJTUFYMTcwNDJfQ3VycmVudAk9IDB4MEEsCisJTUFYMTcwNDJfQXZnQ3VycmVudAk9IDB4MEIsCisJTUFYMTcwNDJfUXJlc2lkdWFsCT0gMHgwQywKKwlNQVgxNzA0Ml9TT0MJCT0gMHgwRCwKKwlNQVgxNzA0Ml9BdlNPQwkJPSAweDBFLAorCU1BWDE3MDQyX1JlbUNhcAkJPSAweDBGLAorCU1BWDE3NDAyX0Z1bGxDQVAJPSAweDEwLAorCU1BWDE3MDQyX1RURQkJPSAweDExLAorCU1BWDE3MDQyX1ZfZW1wdHkJPSAweDEyLAorCisJTUFYMTcwNDJfUlNMT1cJCT0gMHgxNCwKKworCU1BWDE3MDQyX0F2Z1RBCQk9IDB4MTYsCisJTUFYMTcwNDJfQ3ljbGVzCQk9IDB4MTcsCisJTUFYMTcwNDJfRGVzaWduQ2FwCT0gMHgxOCwKKwlNQVgxNzA0Ml9BdmdWQ0VMTAk9IDB4MTksCisJTUFYMTcwNDJfTWluTWF4VGVtcAk9IDB4MUEsCisJTUFYMTcwNDJfTWluTWF4Vm9sdAk9IDB4MUIsCisJTUFYMTcwNDJfTWluTWF4Q3Vycgk9IDB4MUMsCisJTUFYMTcwNDJfQ09ORklHCQk9IDB4MUQsCisJTUFYMTcwNDJfSUNIR1Rlcm0JPSAweDFFLAorCU1BWDE3MDQyX0F2Q2FwCQk9IDB4MUYsCisJTUFYMTcwNDJfTWFuTmFtZQk9IDB4MjAsCisJTUFYMTcwNDJfRGV2TmFtZQk9IDB4MjEsCisJTUFYMTcwNDJfRGV2Q2hlbQk9IDB4MjIsCisKKwlNQVgxNzA0Ml9UZW1wTm9tCT0gMHgyNCwKKwlNQVgxNzA0Ml9UZW1wQ29sZAk9IDB4MjUsCisJTUFYMTcwNDJfVGVtcEhvdAk9IDB4MjYsCisJTUFYMTcwNDJfQUlOCQk9IDB4MjcsCisJTUFYMTcwNDJfTGVhcm5DRkcJPSAweDI4LAorCU1BWDE3MDQyX1NIRlRDRkcJPSAweDI5LAorCU1BWDE3MDQyX1JlbGF4Q0ZHCT0gMHgyQSwKKwlNQVgxNzA0Ml9NaXNjQ0ZHCT0gMHgyQiwKKwlNQVgxNzA0Ml9UR0FJTgkJPSAweDJDLAorCU1BeDE3MDQyX1RPRkYJCT0gMHgyRCwKKwlNQVgxNzA0Ml9DR0FJTgkJPSAweDJFLAorCU1BWDE3MDQyX0NPRkYJCT0gMHgyRiwKKworCU1BWDE3MDQyX1FfZW1wdHkJPSAweDMzLAorCU1BWDE3MDQyX1RfZW1wdHkJPSAweDM0LAorCisJTUFYMTcwNDJfUkNPTVAwCQk9IDB4MzgsCisJTUFYMTcwNDJfVGVtcENvCQk9IDB4MzksCisJTUFYMTcwNDJfUngJCT0gMHgzQSwKKwlNQVgxNzA0Ml9UX2VtcHR5MAk9IDB4M0IsCisJTUFYMTcwNDJfVGFza1BlcmlvZAk9IDB4M0MsCisJTUFYMTcwNDJfRlNUQVQJCT0gMHgzRCwKKworCU1BWDE3MDQyX1NIRE5USU1FUgk9IDB4M0YsCisKKwlNQVgxNzA0Ml9WRlJlbUNhcAk9IDB4NEEsCisKKwlNQVgxNzA0Ml9RSAkJPSAweDRELAorCU1BWDE3MDQyX1FMCQk9IDB4NEUsCit9OworCisvKgorICogdXNlZCBmb3Igc2V0dGluZyBhIHJlZ2lzdGVyIHRvIGEgZGVzaXJlZCB2YWx1ZQorICogYWRkciA6IGFkZHJlc3MgZm9yIGEgcmVnaXN0ZXIKKyAqIGRhdGEgOiBzZXR0aW5nIHZhbHVlIGZvciB0aGUgcmVnaXN0ZXIKKyAqLworc3RydWN0IG1heDE3MDQyX3JlZ19kYXRhIHsKKwl1OCBhZGRyOworCXUxNiBkYXRhOworfTsKKwogc3RydWN0IG1heDE3MDQyX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBtYXgxNzA0Ml9yZWdfZGF0YSAqaW5pdF9kYXRhOworCWludCBudW1faW5pdF9kYXRhOyAvKiBOdW1iZXIgb2YgZW50aWVzIGluIGluaXRfZGF0YSBhcnJheSAqLwogCWJvb2wgZW5hYmxlX2N1cnJlbnRfc2Vuc2U7CisKKwkvKgorCSAqIFJfc25zIGluIG1pY3JvLW9obXMuCisJICogZGVmYXVsdCAxMDAwMCAoaWYgcl9zbnMgPSAwKSBhcyBpdCBpcyB0aGUgcmVjb21tZW5kZWQgdmFsdWUgYnkKKwkgKiB0aGUgZGF0YXNoZWV0IGFsdGhvdWdoIGl0IGNhbiBiZSBjaGFuZ2VkIGJ5IGJvYXJkIGRlc2lnbmVycy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcl9zbnM7CiB9OwogCiAjZW5kaWYgLyogX19NQVgxNzA0Ml9CQVRURVJZX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oIGIvaW5jbHVkZS9saW51eC9wc3RvcmUuaAppbmRleCAyNDU1ZWYyLi5jYzAzYmJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHN0b3JlLmgKQEAgLTM4LDkgKzM4LDEyIEBACiAJaW50CQkoKm9wZW4pKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKIAlpbnQJCSgqY2xvc2UpKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKIAlzc2l6ZV90CQkoKnJlYWQpKHU2NCAqaWQsIGVudW0gcHN0b3JlX3R5cGVfaWQgKnR5cGUsCi0JCQlzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpOwotCXU2NAkJKCp3cml0ZSkoZW51bSBwc3RvcmVfdHlwZV9pZCB0eXBlLCBzaXplX3Qgc2l6ZSk7Ci0JaW50CQkoKmVyYXNlKSh1NjQgaWQpOworCQkJc3RydWN0IHRpbWVzcGVjICp0aW1lLCBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CisJdTY0CQkoKndyaXRlKShlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHVuc2lnbmVkIGludCBwYXJ0LAorCQkJc2l6ZV90IHNpemUsIHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKKwlpbnQJCSgqZXJhc2UpKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgdTY0IGlkLAorCQkJc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworCXZvaWQJCSpkYXRhOwogfTsKIAogI2lmZGVmIENPTkZJR19QU1RPUkUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHdtX2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKaW5kZXggNWUzZTI1YS4uNjNkMmRmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wd21fYmFja2xpZ2h0LmgKQEAgLTE0LDYgKzE0LDcgQEAKIAl1bnNpZ25lZCBpbnQgcHdtX3BlcmlvZF9uczsKIAlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCWludCAoKm5vdGlmeSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcyk7CisJdm9pZCAoKm5vdGlmeV9hZnRlcikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcyk7CiAJdm9pZCAoKmV4aXQpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqY2hlY2tfZmIpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKaW5kZXggMjMyNDFjMi4uOWQ0NTM5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKQEAgLTM5LDcgKzM5LDE1IEBACiAgKiB3aGVuIGl0IGlzIHNocnVuaywgYmVmb3JlIHdlIHJjdSBmcmVlIHRoZSBub2RlLiBTZWUgc2hyaW5rIGNvZGUgZm9yCiAgKiBkZXRhaWxzLgogICovCi0jZGVmaW5lIFJBRElYX1RSRUVfSU5ESVJFQ1RfUFRSCTEKKyNkZWZpbmUgUkFESVhfVFJFRV9JTkRJUkVDVF9QVFIJCTEKKy8qCisgKiBBIGNvbW1vbiB1c2Ugb2YgdGhlIHJhZGl4IHRyZWUgaXMgdG8gc3RvcmUgcG9pbnRlcnMgdG8gc3RydWN0IHBhZ2VzOworICogYnV0IHNobWVtL3RtcGZzIG5lZWRzIGFsc28gdG8gc3RvcmUgc3dhcCBlbnRyaWVzIGluIHRoZSBzYW1lIHRyZWU6CisgKiB0aG9zZSBhcmUgbWFya2VkIGFzIGV4Y2VwdGlvbmFsIGVudHJpZXMgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KKyAqIEVYQ0VQVElPTkFMX0VOVFJZIHRlc3RzIHRoZSBiaXQsIEVYQ0VQVElPTkFMX1NISUZUIHNoaWZ0cyBjb250ZW50IHBhc3QgaXQuCisgKi8KKyNkZWZpbmUgUkFESVhfVFJFRV9FWENFUFRJT05BTF9FTlRSWQkyCisjZGVmaW5lIFJBRElYX1RSRUVfRVhDRVBUSU9OQUxfU0hJRlQJMgogCiAjZGVmaW5lIHJhZGl4X3RyZWVfaW5kaXJlY3RfdG9fcHRyKHB0cikgXAogCXJhZGl4X3RyZWVfaW5kaXJlY3RfdG9fcHRyKCh2b2lkIF9fZm9yY2UgKikocHRyKSkKQEAgLTE3NCw2ICsxODIsMjggQEAKIH0KIAogLyoqCisgKiByYWRpeF90cmVlX2V4Y2VwdGlvbmFsX2VudHJ5CS0gcmFkaXhfdHJlZV9kZXJlZl9zbG90IGdhdmUgZXhjZXB0aW9uYWwgZW50cnk/CisgKiBAYXJnOgl2YWx1ZSByZXR1cm5lZCBieSByYWRpeF90cmVlX2RlcmVmX3Nsb3QKKyAqIFJldHVybnM6CTAgaWYgd2VsbC1hbGlnbmVkIHBvaW50ZXIsIG5vbi0wIGlmIGV4Y2VwdGlvbmFsIGVudHJ5LgorICovCitzdGF0aWMgaW5saW5lIGludCByYWRpeF90cmVlX2V4Y2VwdGlvbmFsX2VudHJ5KHZvaWQgKmFyZykKK3sKKwkvKiBOb3QgdW5saWtlbHkgYmVjYXVzZSByYWRpeF90cmVlX2V4Y2VwdGlvbiBvZnRlbiB0ZXN0ZWQgZmlyc3QgKi8KKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXJnICYgUkFESVhfVFJFRV9FWENFUFRJT05BTF9FTlRSWTsKK30KKworLyoqCisgKiByYWRpeF90cmVlX2V4Y2VwdGlvbgktIHJhZGl4X3RyZWVfZGVyZWZfc2xvdCByZXR1cm5lZCBlaXRoZXIgZXhjZXB0aW9uPworICogQGFyZzoJdmFsdWUgcmV0dXJuZWQgYnkgcmFkaXhfdHJlZV9kZXJlZl9zbG90CisgKiBSZXR1cm5zOgkwIGlmIHdlbGwtYWxpZ25lZCBwb2ludGVyLCBub24tMCBpZiBlaXRoZXIga2luZCBvZiBleGNlcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X3RyZWVfZXhjZXB0aW9uKHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gdW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpYXJnICYKKwkJKFJBRElYX1RSRUVfSU5ESVJFQ1RfUFRSIHwgUkFESVhfVFJFRV9FWENFUFRJT05BTF9FTlRSWSkpOworfQorCisvKioKICAqIHJhZGl4X3RyZWVfcmVwbGFjZV9zbG90CS0gcmVwbGFjZSBpdGVtIGluIGEgc2xvdAogICogQHBzbG90Oglwb2ludGVyIHRvIHNsb3QsIHJldHVybmVkIGJ5IHJhZGl4X3RyZWVfbG9va3VwX3Nsb3QKICAqIEBpdGVtOgluZXcgaXRlbSB0byBzdG9yZSBpbiB0aGUgc2xvdC4KQEAgLTE5NCw4ICsyMjQsOCBAQAogdW5zaWduZWQgaW50CiByYWRpeF90cmVlX2dhbmdfbG9va3VwKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsIHZvaWQgKipyZXN1bHRzLAogCQkJdW5zaWduZWQgbG9uZyBmaXJzdF9pbmRleCwgdW5zaWduZWQgaW50IG1heF9pdGVtcyk7Ci11bnNpZ25lZCBpbnQKLXJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfc2xvdChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB2b2lkICoqKnJlc3VsdHMsCit1bnNpZ25lZCBpbnQgcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF9zbG90KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCQl2b2lkICoqKnJlc3VsdHMsIHVuc2lnbmVkIGxvbmcgKmluZGljZXMsCiAJCQl1bnNpZ25lZCBsb25nIGZpcnN0X2luZGV4LCB1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zKTsKIHVuc2lnbmVkIGxvbmcgcmFkaXhfdHJlZV9uZXh0X2hvbGUoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIG1heF9zY2FuKTsKQEAgLTIyMiw2ICsyNTIsNyBAQAogCQl1bnNpZ25lZCBsb25nIG5yX3RvX3RhZywKIAkJdW5zaWduZWQgaW50IGZyb210YWcsIHVuc2lnbmVkIGludCB0b3RhZyk7CiBpbnQgcmFkaXhfdHJlZV90YWdnZWQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdW5zaWduZWQgaW50IHRhZyk7Cit1bnNpZ25lZCBsb25nIHJhZGl4X3RyZWVfbG9jYXRlX2l0ZW0oc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqaXRlbSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYWRpeF90cmVlX3ByZWxvYWRfZW5kKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oIGIvaW5jbHVkZS9saW51eC9yYW5kb20uaAppbmRleCBjZTI5YTA0Li5kMTMwNTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKQEAgLTU3LDE4ICs1Nyw2IEBACiBleHRlcm4gdm9pZCBnZXRfcmFuZG9tX2J5dGVzKHZvaWQgKmJ1ZiwgaW50IG5ieXRlcyk7CiB2b2lkIGdlbmVyYXRlX3JhbmRvbV91dWlkKHVuc2lnbmVkIGNoYXIgdXVpZF9vdXRbMTZdKTsKIAotZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcF9pZChfX2JlMzIgZGFkZHIpOwotZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcHY2X2lkKGNvbnN0IF9fYmUzMiBkYWRkcls0XSk7Ci1leHRlcm4gdTMyIHNlY3VyZV9pcHY0X3BvcnRfZXBoZW1lcmFsKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQpOwotZXh0ZXJuIHUzMiBzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX2JlMzIgKnNhZGRyLCBjb25zdCBfX2JlMzIgKmRhZGRyLAotCQkJCSAgICAgIF9fYmUxNiBkcG9ydCk7Ci1leHRlcm4gX191MzIgc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJCV9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKLWV4dGVybiBfX3UzMiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiAqc2FkZHIsIF9fYmUzMiAqZGFkZHIsCi0JCQkJCSAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpOwotZXh0ZXJuIHU2NCBzZWN1cmVfZGNjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCi0JCQkJICAgICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKLQogI2lmbmRlZiBNT0RVTEUKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhbmRvbV9mb3BzLCB1cmFuZG9tX2ZvcHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDllODdjMWMuLmI0Nzc3MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMTIyLDYgKzEyMiw5IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSB7CiAJY29uc3QgY2hhciAqc3VwcGx5OwogCXN0cnVjdCByZWd1bGF0b3IgKmNvbnN1bWVyOworCisJLyogcHJpdmF0ZTogSW50ZXJuYWwgdXNlICovCisJaW50IHJldDsKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDZjNDMzYjguLjFhODBiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0xODgsMTggKzE4OCwxNiBAQAogCiAJLyogbGlzdHMgd2UgYmVsb25nIHRvICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBsaXN0IG9mIGFsbCByZWd1bGF0b3JzICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzbGlzdDsgLyogbGlzdCBvZiBzdXBwbGllZCByZWd1bGF0b3JzICovCiAKIAkvKiBsaXN0cyB3ZSBvd24gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvbnN1bWVyX2xpc3Q7IC8qIGNvbnN1bWVycyB3ZSBzdXBwbHkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHN1cHBseV9saXN0OyAvKiByZWd1bGF0b3JzIHdlIHN1cHBseSAqLwogCiAJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbm90aWZpZXI7CiAJc3RydWN0IG11dGV4IG11dGV4OyAvKiBjb25zdW1lciBsb2NrICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJc3RydWN0IGRldmljZSBkZXY7CiAJc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzOwotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpzdXBwbHk7CS8qIGZvciB0cmVlICovCisJc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5OwkvKiBmb3IgdHJlZSAqLwogCiAJdm9pZCAqcmVnX2RhdGE7CQkvKiByZWd1bGF0b3JfZGV2IGRhdGEgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oIGIvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oCmluZGV4IDkwMjZiMzAuLjIxODE2OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmgKQEAgLTM2LDEyICszNiwxMiBAQAogI2RlZmluZSAgUklPX1BFRl9QUk9DRVNTT1IJCTB4MjAwMDAwMDAJLyogW0ldIFByb2Nlc3NvciAqLwogI2RlZmluZSAgUklPX1BFRl9TV0lUQ0gJCQkweDEwMDAwMDAwCS8qIFtJXSBTd2l0Y2ggKi8KICNkZWZpbmUgIFJJT19QRUZfTVVMVElQT1JUCQkweDA4MDAwMDAwCS8qIFtWSSwgMi4xXSBNdWx0aXBvcnQgKi8KLSNkZWZpbmUgIFJJT19QRUZfSU5CX01CT1gJCTB4MDBmMDAwMDAJLyogW0lJXSBNYWlsYm94ZXMgKi8KLSNkZWZpbmUgIFJJT19QRUZfSU5CX01CT1gwCQkweDAwODAwMDAwCS8qIFtJSV0gTWFpbGJveCAwICovCi0jZGVmaW5lICBSSU9fUEVGX0lOQl9NQk9YMQkJMHgwMDQwMDAwMAkvKiBbSUldIE1haWxib3ggMSAqLwotI2RlZmluZSAgUklPX1BFRl9JTkJfTUJPWDIJCTB4MDAyMDAwMDAJLyogW0lJXSBNYWlsYm94IDIgKi8KLSNkZWZpbmUgIFJJT19QRUZfSU5CX01CT1gzCQkweDAwMTAwMDAwCS8qIFtJSV0gTWFpbGJveCAzICovCi0jZGVmaW5lICBSSU9fUEVGX0lOQl9ET09SQkVMTAkJMHgwMDA4MDAwMAkvKiBbSUldIERvb3JiZWxscyAqLworI2RlZmluZSAgUklPX1BFRl9JTkJfTUJPWAkJMHgwMGYwMDAwMAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveGVzICovCisjZGVmaW5lICBSSU9fUEVGX0lOQl9NQk9YMAkJMHgwMDgwMDAwMAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveCAwICovCisjZGVmaW5lICBSSU9fUEVGX0lOQl9NQk9YMQkJMHgwMDQwMDAwMAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveCAxICovCisjZGVmaW5lICBSSU9fUEVGX0lOQl9NQk9YMgkJMHgwMDIwMDAwMAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveCAyICovCisjZGVmaW5lICBSSU9fUEVGX0lOQl9NQk9YMwkJMHgwMDEwMDAwMAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveCAzICovCisjZGVmaW5lICBSSU9fUEVGX0lOQl9ET09SQkVMTAkJMHgwMDA4MDAwMAkvKiBbSUksIDw9IDEuMl0gRG9vcmJlbGxzICovCiAjZGVmaW5lICBSSU9fUEVGX0VYVF9SVAkJCTB4MDAwMDAyMDAJLyogW0lJSSwgMS4zXSBFeHRlbmRlZCByb3V0ZSB0YWJsZSBzdXBwb3J0ICovCiAjZGVmaW5lICBSSU9fUEVGX1NURF9SVAkJCTB4MDAwMDAxMDAJLyogW0lJSSwgMS4zXSBTdGFuZGFyZCByb3V0ZSB0YWJsZSBzdXBwb3J0ICovCiAjZGVmaW5lICBSSU9fUEVGX0NUTFMJCQkweDAwMDAwMDEwCS8qIFtJSUldIENUTFMgKi8KQEAgLTEwMiw3ICsxMDIsNyBAQAogI2RlZmluZQlSSU9fU1dJVENIX1JUX0xJTUlUCTB4MzQJLyogW0lJSSwgMS4zXSBTd2l0Y2ggUm91dGUgVGFibGUgRGVzdGluYXRpb24gSUQgTGltaXQgQ0FSICovCiAjZGVmaW5lCSBSSU9fUlRfTUFYX0RFU1RJRAkJMHgwMDAwZmZmZgogCi0jZGVmaW5lIFJJT19NQk9YX0NTUgkJMHg0MAkvKiBbSUldIE1haWxib3ggQ1NSICovCisjZGVmaW5lIFJJT19NQk9YX0NTUgkJMHg0MAkvKiBbSUksIDw9IDEuMl0gTWFpbGJveCBDU1IgKi8KICNkZWZpbmUgIFJJT19NQk9YMF9BVkFJTAkJMHg4MDAwMDAwMAkvKiBbSUldIE1ib3ggMCBhdmFpbCAqLwogI2RlZmluZSAgUklPX01CT1gwX0ZVTEwJCQkweDQwMDAwMDAwCS8qIFtJSV0gTWJveCAwIGZ1bGwgKi8KICNkZWZpbmUgIFJJT19NQk9YMF9FTVBUWQkJMHgyMDAwMDAwMAkvKiBbSUldIE1ib3ggMCBlbXB0eSAqLwpAQCAtMTI4LDggKzEyOCw4IEBACiAjZGVmaW5lICBSSU9fTUJPWDNfRkFJTAkJCTB4MDAwMDAwMDgJLyogW0lJXSBNYm94IDMgZmFpbCAqLwogI2RlZmluZSAgUklPX01CT1gzX0VSUk9SCQkweDAwMDAwMDA0CS8qIFtJSV0gTWJveCAzIGVycm9yICovCiAKLSNkZWZpbmUgUklPX1dSSVRFX1BPUlRfQ1NSCTB4NDQJLyogW0ldIFdyaXRlIFBvcnQgQ1NSICovCi0jZGVmaW5lIFJJT19ET09SQkVMTF9DU1IJMHg0NAkvKiBbSUldIERvb3JiZWxsIENTUiAqLworI2RlZmluZSBSSU9fV1JJVEVfUE9SVF9DU1IJMHg0NAkvKiBbSSwgPD0gMS4yXSBXcml0ZSBQb3J0IENTUiAqLworI2RlZmluZSBSSU9fRE9PUkJFTExfQ1NSCTB4NDQJLyogW0lJLCA8PSAxLjJdIERvb3JiZWxsIENTUiAqLwogI2RlZmluZSAgUklPX0RPT1JCRUxMX0FWQUlMCQkweDgwMDAwMDAwCS8qIFtJSV0gRG9vcmJlbGwgYXZhaWwgKi8KICNkZWZpbmUgIFJJT19ET09SQkVMTF9GVUxMCQkweDQwMDAwMDAwCS8qIFtJSV0gRG9vcmJlbGwgZnVsbCAqLwogI2RlZmluZSAgUklPX0RPT1JCRUxMX0VNUFRZCQkweDIwMDAwMDAwCS8qIFtJSV0gRG9vcmJlbGwgZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IGIyN2ViZWEuLjkzZjRkMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtOTcsNiArOTcsOSBAQAogI2RlZmluZSBSVENfQUYgMHgyMAkvKiBBbGFybSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgUlRDX1VGIDB4MTAJLyogVXBkYXRlIGludGVycnVwdCBmb3IgMUh6IFJUQyAqLwogCisKKyNkZWZpbmUgUlRDX01BWF9GUkVRCTgxOTIKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMjBiMDNiZi4uNGFjMmMwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTc2Nyw2ICsxNzY3LDcgQEAKICNkZWZpbmUgUEZfRFVNUENPUkUJMHgwMDAwMDIwMAkvKiBkdW1wZWQgY29yZSAqLwogI2RlZmluZSBQRl9TSUdOQUxFRAkweDAwMDAwNDAwCS8qIGtpbGxlZCBieSBhIHNpZ25hbCAqLwogI2RlZmluZSBQRl9NRU1BTExPQwkweDAwMDAwODAwCS8qIEFsbG9jYXRpbmcgbWVtb3J5ICovCisjZGVmaW5lIFBGX05QUk9DX0VYQ0VFREVEIDB4MDAwMDEwMDAJLyogc2V0X3VzZXIgbm90aWNlZCB0aGF0IFJMSU1JVF9OUFJPQyB3YXMgZXhjZWVkZWQgKi8KICNkZWZpbmUgUEZfVVNFRF9NQVRICTB4MDAwMDIwMDAJLyogaWYgdW5zZXQgdGhlIGZwdSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgKi8KICNkZWZpbmUgUEZfRlJFRVpJTkcJMHgwMDAwNDAwMAkvKiBmcmVlemUgaW4gcHJvZ3Jlc3MuIGRvIG5vdCBhY2NvdW50IHRvIGxvYWQgKi8KICNkZWZpbmUgUEZfTk9GUkVFWkUJMHgwMDAwODAwMAkvKiB0aGlzIHRocmVhZCBzaG91bGQgbm90IGJlIGZyb3plbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaAppbmRleCBhMmFmYzlmLi44YmZmZTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaApAQCAtOCw2ICs4LDggQEAKICAqIEdlbmVyaWMgaGVhZGVyIGZvciBTdXBlckggU0NJKEYpICh1c2VkIGJ5IHNoL3NoNjQvaDgzMDAgYW5kIHJlbGF0ZWQgcGFydHMpCiAgKi8KIAorI2RlZmluZSBTQ0l4X05PVF9TVVBQT1JURUQJKC0xKQorCiBlbnVtIHsKIAlTQ0JSUl9BTEdPXzEsCQkvKiAoKGNsayArIDE2ICogYnBzKSAvICgxNiAqIGJwcykgLSAxKSAqLwogCVNDQlJSX0FMR09fMiwJCS8qICgoY2xrICsgMTYgKiBicHMpIC8gKDMyICogYnBzKSAtIDEpICovCkBAIC0yNSw2ICsyNywyOCBAQAogI2RlZmluZSBTQ1NDUl9DS0UxCSgxIDw8IDEpCiAjZGVmaW5lIFNDU0NSX0NLRTAJKDEgPDwgMCkKIAorLyogU0N4U1IgU0NJICovCisjZGVmaW5lIFNDSV9URFJFICAweDgwCisjZGVmaW5lIFNDSV9SRFJGICAweDQwCisjZGVmaW5lIFNDSV9PUkVSICAweDIwCisjZGVmaW5lIFNDSV9GRVIgICAweDEwCisjZGVmaW5lIFNDSV9QRVIgICAweDA4CisjZGVmaW5lIFNDSV9URU5EICAweDA0CisKKyNkZWZpbmUgU0NJX0RFRkFVTFRfRVJST1JfTUFTSyAoU0NJX1BFUiB8IFNDSV9GRVIpCisKKy8qIFNDeFNSIFNDSUYgKi8KKyNkZWZpbmUgU0NJRl9FUiAgICAweDAwODAKKyNkZWZpbmUgU0NJRl9URU5EICAweDAwNDAKKyNkZWZpbmUgU0NJRl9UREZFICAweDAwMjAKKyNkZWZpbmUgU0NJRl9CUksgICAweDAwMTAKKyNkZWZpbmUgU0NJRl9GRVIgICAweDAwMDgKKyNkZWZpbmUgU0NJRl9QRVIgICAweDAwMDQKKyNkZWZpbmUgU0NJRl9SREYgICAweDAwMDIKKyNkZWZpbmUgU0NJRl9EUiAgICAweDAwMDEKKworI2RlZmluZSBTQ0lGX0RFRkFVTFRfRVJST1JfTUFTSyAoU0NJRl9QRVIgfCBTQ0lGX0ZFUiB8IFNDSUZfRVIgfCBTQ0lGX0JSSykKKwogLyogT2Zmc2V0cyBpbnRvIHRoZSBzY2lfcG9ydC0+aXJxcyBhcnJheSAqLwogZW51bSB7CiAJU0NJeF9FUklfSVJRLApAQCAtMzIsNiArNTYsMjQgQEAKIAlTQ0l4X1RYSV9JUlEsCiAJU0NJeF9CUklfSVJRLAogCVNDSXhfTlJfSVJRUywKKworCVNDSXhfTVVYX0lSUSA9IFNDSXhfTlJfSVJRUywJLyogc3BlY2lhbCBjYXNlICovCit9OworCitlbnVtIHsKKwlTQ0l4X1BST0JFX1JFR1RZUEUsCisKKwlTQ0l4X1NDSV9SRUdUWVBFLAorCVNDSXhfSVJEQV9SRUdUWVBFLAorCVNDSXhfU0NJRkFfUkVHVFlQRSwKKwlTQ0l4X1NDSUZCX1JFR1RZUEUsCisJU0NJeF9TSDNfU0NJRl9SRUdUWVBFLAorCVNDSXhfU0g0X1NDSUZfUkVHVFlQRSwKKwlTQ0l4X1NINF9TQ0lGX05PX1NDU1BUUl9SRUdUWVBFLAorCVNDSXhfU0g0X1NDSUZfRklGT0RBVEFfUkVHVFlQRSwKKwlTQ0l4X1NINzcwNV9TQ0lGX1JFR1RZUEUsCisKKwlTQ0l4X05SX1JFR1RZUEVTLAogfTsKIAogI2RlZmluZSBTQ0l4X0lSUV9NVVhFRChpcnEpCQlcCkBAIC00Miw4ICs4NCwyOSBAQAogCVtTQ0l4X0JSSV9JUlFdCT0gKGlycSksCVwKIH0KIAorI2RlZmluZSBTQ0l4X0lSUV9JU19NVVhFRChwb3J0KQkJCVwKKwkoKHBvcnQpLT5jZmctPmlycXNbU0NJeF9FUklfSVJRXSA9PQlcCisJIChwb3J0KS0+Y2ZnLT5pcnFzW1NDSXhfUlhJX0lSUV0pIHx8CVwKKwkoKHBvcnQpLT5jZmctPmlycXNbU0NJeF9FUklfSVJRXSAmJglcCisJICEocG9ydCktPmNmZy0+aXJxc1tTQ0l4X1JYSV9JUlFdKQorLyoKKyAqIFNDSSByZWdpc3RlciBzdWJzZXQgY29tbW9uIGZvciBhbGwgcG9ydCB0eXBlcy4KKyAqIE5vdCBhbGwgcmVnaXN0ZXJzIHdpbGwgZXhpc3Qgb24gYWxsIHBhcnRzLgorICovCitlbnVtIHsKKwlTQ1NNUiwgU0NCUlIsIFNDU0NSLCBTQ3hTUiwKKwlTQ0ZDUiwgU0NGRFIsIFNDeFREUiwgU0N4UkRSLAorCVNDTFNSLCBTQ1RGRFIsIFNDUkZEUiwgU0NTUFRSLAorCisJU0NJeF9OUl9SRUdTLAorfTsKKwogc3RydWN0IGRldmljZTsKIAorc3RydWN0IHBsYXRfc2NpX3BvcnRfb3BzIHsKKwl2b2lkICgqaW5pdF9waW5zKShzdHJ1Y3QgdWFydF9wb3J0ICosIHVuc2lnbmVkIGludCBjZmxhZyk7Cit9OworCiAvKgogICogUGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEgc3RydWN0CiAgKi8KQEAgLTU2LDYgKzExOSwxOCBAQAogCXVuc2lnbmVkIGludAlzY2Jycl9hbGdvX2lkOwkJLyogU0NCUlIgY2FsY3VsYXRpb24gYWxnbyAqLwogCXVuc2lnbmVkIGludAlzY3NjcjsJCQkvKiBTQ1NDUiBpbml0aWFsaXphdGlvbiAqLwogCisJLyoKKwkgKiBQbGF0Zm9ybSBvdmVycmlkZXMgaWYgbmVjZXNzYXJ5LCBkZWZhdWx0cyBvdGhlcndpc2UuCisJICovCisJaW50CQlvdmVycnVuX2JpdDsKKwl1bnNpZ25lZCBpbnQJZXJyb3JfbWFzazsKKworCWludAkJcG9ydF9yZWc7CisJdW5zaWduZWQgY2hhcglyZWdzaGlmdDsKKwl1bnNpZ25lZCBjaGFyCXJlZ3R5cGU7CisKKwlzdHJ1Y3QgcGxhdF9zY2lfcG9ydF9vcHMJKm9wczsKKwogCXN0cnVjdCBkZXZpY2UJKmRtYV9kZXY7CiAKIAl1bnNpZ25lZCBpbnQJZG1hX3NsYXZlX3R4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9jbGsuaCBiL2luY2x1ZGUvbGludXgvc2hfY2xrLmgKaW5kZXggOWE1MmY3Mi4uM2NjZjE4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaF9jbGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2Nsay5oCkBAIC0xNDcsNCArMTQ3LDggQEAKIGludCBzaF9jbGtfZGl2Nl9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIpOwogaW50IHNoX2Nsa19kaXY2X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBucik7CiAKKyNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfREVWX0lEKF9pZCwgX2NsaykgeyAuZGV2X2lkID0gX2lkLCAuY2xrID0gX2NsayB9CisjZGVmaW5lIENMS0RFVl9JQ0tfSUQoX2NpZCwgX2RpZCwgX2NsaykgeyAuY29uX2lkID0gX2NpZCwgLmRldl9pZCA9IF9kaWQsIC5jbGsgPSBfY2xrIH0KKwogI2VuZGlmIC8qIF9fU0hfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaF9kbWEuaCBiL2luY2x1ZGUvbGludXgvc2hfZG1hLmgKaW5kZXggYjA4Y2Q0ZS4uY2IyZGQxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaF9kbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2RtYS5oCkBAIC02Miw2ICs2MiwxMiBAQAogCWNvbnN0IHVuc2lnbmVkIGludCAqdHNfc2hpZnQ7CiAJaW50IHRzX3NoaWZ0X251bTsKIAl1MTYgZG1hb3JfaW5pdDsKKwl1bnNpZ25lZCBpbnQgY2hjcl9vZmZzZXQ7CisJdTMyIGNoY3JfaWVfYml0OworCisJdW5zaWduZWQgaW50IGRtYW9yX2lzXzMyYml0OjE7CisJdW5zaWduZWQgaW50IG5lZWRzX3RlbmRfc2V0OjE7CisJdW5zaWduZWQgaW50IG5vX2RtYXJzOjE7CiB9OwogCiAvKiBETUEgcmVnaXN0ZXIgKi8KQEAgLTcxLDYgKzc3LDggQEAKICNkZWZpbmUgQ0hDUgkweDBDCiAjZGVmaW5lIERNQU9SCTB4NDAKIAorI2RlZmluZSBURU5ECTB4MTggLyogVVNCLURNQUMgKi8KKwogLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAogI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htLmggYi9pbmNsdWRlL2xpbnV4L3NobS5oCmluZGV4IDdkMjdmZmQuLjkyODA4YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaG0uaApAQCAtOTUsNiArOTUsOSBAQAogCXBpZF90CQkJc2htX2NwcmlkOwogCXBpZF90CQkJc2htX2xwcmlkOwogCXN0cnVjdCB1c2VyX3N0cnVjdAkqbWxvY2tfdXNlcjsKKworCS8qIFRoZSB0YXNrIGNyZWF0ZWQgdGhlIHNobSBvYmplY3QuICBOVUxMIGlmIHRoZSB0YXNrIGlzIGRlYWQuICovCisJc3RydWN0IHRhc2tfc3RydWN0CSpzaG1fY3JlYXRvcjsKIH07CiAKIC8qIHNobV9tb2RlIHVwcGVyIGJ5dGUgZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAppbmRleCBhYTA4ZmE4Li45MjkxYWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCkBAIC04LDIyICs4LDE1IEBACiAKIC8qIGlub2RlIGluLWtlcm5lbCBkYXRhICovCiAKLSNkZWZpbmUgU0hNRU1fTlJfRElSRUNUIDE2Ci0KLSNkZWZpbmUgU0hNRU1fU1lNTElOS19JTkxJTkVfTEVOIChTSE1FTV9OUl9ESVJFQ1QgKiBzaXplb2Yoc3dwX2VudHJ5X3QpKQotCiBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7CiAJc3BpbmxvY2tfdAkJbG9jazsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAl1bnNpZ25lZCBsb25nCQlhbGxvY2VkOwkvKiBkYXRhIHBhZ2VzIGFsbG9jZWQgdG8gZmlsZSAqLwotCXVuc2lnbmVkIGxvbmcJCXN3YXBwZWQ7CS8qIHN1YnRvdGFsIGFzc2lnbmVkIHRvIHN3YXAgKi8KLQl1bnNpZ25lZCBsb25nCQluZXh0X2luZGV4OwkvKiBoaWdoZXN0IGFsbG9jZWQgaW5kZXggKyAxICovCi0Jc3RydWN0IHNoYXJlZF9wb2xpY3kJcG9saWN5OwkJLyogTlVNQSBtZW1vcnkgYWxsb2MgcG9saWN5ICovCi0Jc3RydWN0IHBhZ2UJCSppX2luZGlyZWN0OwkvKiB0b3AgaW5kaXJlY3QgYmxvY2tzIHBhZ2UgKi8KIAl1bmlvbiB7Ci0JCXN3cF9lbnRyeV90CWlfZGlyZWN0W1NITUVNX05SX0RJUkVDVF07IC8qIGZpcnN0IGJsb2NrcyAqLwotCQljaGFyCQlpbmxpbmVfc3ltbGlua1tTSE1FTV9TWU1MSU5LX0lOTElORV9MRU5dOworCQl1bnNpZ25lZCBsb25nCXN3YXBwZWQ7CS8qIHN1YnRvdGFsIGFzc2lnbmVkIHRvIHN3YXAgKi8KKwkJY2hhcgkJKnN5bWxpbms7CS8qIHVuc3dhcHBhYmxlIHNob3J0IHN5bWxpbmsgKi8KIAl9OworCXN0cnVjdCBzaGFyZWRfcG9saWN5CXBvbGljeTsJCS8qIE5VTUEgbWVtb3J5IGFsbG9jIHBvbGljeSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc3dhcGxpc3Q7CS8qIGNoYWluIG9mIG1heWJlcyBvbiBzd2FwICovCiAJc3RydWN0IGxpc3RfaGVhZAl4YXR0cl9saXN0OwkvKiBsaXN0IG9mIHNobWVtX3hhdHRyICovCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CkBAIC00OSw3ICs0Miw3IEBACiAvKgogICogRnVuY3Rpb25zIGluIG1tL3NobWVtLmMgY2FsbGVkIGRpcmVjdGx5IGZyb20gZWxzZXdoZXJlOgogICovCi1leHRlcm4gaW50IGluaXRfdG1wZnModm9pZCk7CitleHRlcm4gaW50IHNobWVtX2luaXQodm9pZCk7CiBleHRlcm4gaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCk7CiBleHRlcm4gc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJbG9mZl90IHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtNTksOCArNTIsNiBAQAogCQkJCQlwZ29mZl90IGluZGV4LCBnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gdm9pZCBzaG1lbV90cnVuY2F0ZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpOwogZXh0ZXJuIGludCBzaG1lbV91bnVzZShzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9nZXRfc2htZW1fdGFyZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgcGdvZmYsCi0JCQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHN3cF9lbnRyeV90ICplbnQpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzaG1lbV9yZWFkX21hcHBpbmdfcGFnZSgKIAkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCA0YjM1YzA2Li5mNThkNjQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0yNCw2ICsyNCw3IEBACiAJQUxMT0NfRlJPTV9QQVJUSUFMLAkvKiBDcHUgc2xhYiBhY3F1aXJlZCBmcm9tIHBhcnRpYWwgbGlzdCAqLwogCUFMTE9DX1NMQUIsCQkvKiBDcHUgc2xhYiBhY3F1aXJlZCBmcm9tIHBhZ2UgYWxsb2NhdG9yICovCiAJQUxMT0NfUkVGSUxMLAkJLyogUmVmaWxsIGNwdSBzbGFiIGZyb20gc2xhYiBmcmVlbGlzdCAqLworCUFMTE9DX05PREVfTUlTTUFUQ0gsCS8qIFN3aXRjaGluZyBjcHUgc2xhYiAqLwogCUZSRUVfU0xBQiwJCS8qIFNsYWIgZnJlZWQgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yICovCiAJQ1BVU0xBQl9GTFVTSCwJCS8qIEFiYW5kb25pbmcgb2YgdGhlIGNwdSBzbGFiICovCiAJREVBQ1RJVkFURV9GVUxMLAkvKiBDcHUgc2xhYiB3YXMgZnVsbCB3aGVuIGRlYWN0aXZhdGVkICovCkBAIC0zMSw4ICszMiwxMCBAQAogCURFQUNUSVZBVEVfVE9fSEVBRCwJLyogQ3B1IHNsYWIgd2FzIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHBhcnRpYWxzICovCiAJREVBQ1RJVkFURV9UT19UQUlMLAkvKiBDcHUgc2xhYiB3YXMgbW92ZWQgdG8gdGhlIHRhaWwgb2YgcGFydGlhbHMgKi8KIAlERUFDVElWQVRFX1JFTU9URV9GUkVFUywvKiBTbGFiIGNvbnRhaW5lZCByZW1vdGVseSBmcmVlZCBvYmplY3RzICovCisJREVBQ1RJVkFURV9CWVBBU1MsCS8qIEltcGxpY2l0IGRlYWN0aXZhdGlvbiAqLwogCU9SREVSX0ZBTExCQUNLLAkJLyogTnVtYmVyIG9mIHRpbWVzIGZhbGxiYWNrIHdhcyBuZWNlc3NhcnkgKi8KIAlDTVBYQ0hHX0RPVUJMRV9DUFVfRkFJTCwvKiBGYWlsdXJlIG9mIHRoaXNfY3B1X2NtcHhjaGdfZG91YmxlICovCisJQ01QWENIR19ET1VCTEVfRkFJTCwJLyogTnVtYmVyIG9mIHRpbWVzIHRoYXQgY21weGNoZyBkb3VibGUgZGlkIG5vdCBtYXRjaCAqLwogCU5SX1NMVUJfU1RBVF9JVEVNUyB9OwogCiBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggZTE3ZjgyMi4uZDBlNzdmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC04LDggKzgsMTAgQEAKICNkZWZpbmUgX0tfU1NfQUxJR05TSVpFCShfX2FsaWdub2ZfXyAoc3RydWN0IHNvY2thZGRyICopKQogCQkJCS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRlc2lyZWQgYWxpZ25tZW50ICovCiAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfc2FfZmFtaWx5X3Q7CisKIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIHsKLQl1bnNpZ25lZCBzaG9ydAlzc19mYW1pbHk7CQkvKiBhZGRyZXNzIGZhbWlseSAqLworCV9fa2VybmVsX3NhX2ZhbWlseV90CXNzX2ZhbWlseTsJCS8qIGFkZHJlc3MgZmFtaWx5ICovCiAJLyogRm9sbG93aW5nIGZpZWxkKHMpIGFyZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyAqLwogCWNoYXIJCV9fZGF0YVtfS19TU19NQVhTSVpFIC0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV07CiAJCQkJLyogc3BhY2UgdG8gYWNoaWV2ZSBkZXNpcmVkIHNpemUsICovCkBAIC0zNSw3ICszNyw3IEBACiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwogI2VuZGlmCiAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJc2FfZmFtaWx5X3Q7Cit0eXBlZGVmIF9fa2VybmVsX3NhX2ZhbWlseV90CXNhX2ZhbWlseV90OwogCiAvKgogICoJMTAwMy4xZyByZXF1aXJlcyBzYV9mYW1pbHlfdCBhbmQgdGhhdCBzYV9kYXRhIGlzIGNoYXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDE0ZDYyNDkuLmM3MWY4NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0yNTIsNiArMjUyLDEyIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiAJCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKIGV4dGVybiBpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSwgaW50IGZpbGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJCQkJICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZV96b25lKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkJCQlnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCisJCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7CiBleHRlcm4gaW50IHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaCBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCmluZGV4IGNkNDJlMzAuLjIxODlkM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCkBAIC0xLDMgKzEsOCBAQAorI2lmbmRlZiBfTElOVVhfU1dBUE9QU19ICisjZGVmaW5lIF9MSU5VWF9TV0FQT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KKwogLyoKICAqIHN3YXBjYWNoZSBwYWdlcyBhcmUgc3RvcmVkIGluIHRoZSBzd2FwcGVyX3NwYWNlIHJhZGl4IHRyZWUuICBXZSB3YW50IHRvCiAgKiBnZXQgZ29vZCBwYWNraW5nIGRlbnNpdHkgaW4gdGhhdCB0cmVlLCBzbyB0aGUgaW5kZXggc2hvdWxkIGJlIGRlbnNlIGluCkBAIC03Niw2ICs4MSwyMiBAQAogCXJldHVybiBfX3N3cF9lbnRyeV90b19wdGUoYXJjaF9lbnRyeSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcmFkaXhfdG9fc3dwX2VudHJ5KHZvaWQgKmFyZykKK3sKKwlzd3BfZW50cnlfdCBlbnRyeTsKKworCWVudHJ5LnZhbCA9ICh1bnNpZ25lZCBsb25nKWFyZyA+PiBSQURJWF9UUkVFX0VYQ0VQVElPTkFMX1NISUZUOworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpzd3BfdG9fcmFkaXhfZW50cnkoc3dwX2VudHJ5X3QgZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCXZhbHVlID0gZW50cnkudmFsIDw8IFJBRElYX1RSRUVfRVhDRVBUSU9OQUxfU0hJRlQ7CisJcmV0dXJuICh2b2lkICopKHZhbHVlIHwgUkFESVhfVFJFRV9FWENFUFRJT05BTF9FTlRSWSk7Cit9CisKICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCiBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgd3JpdGUpCiB7CkBAIC0xNjksMyArMTkwLDUgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDhjMDNiOTguLjFmZjBlYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTcwMiw5ICs3MDIsNiBAQAogYXNtbGlua2FnZSBsb25nIHN5c19zeXNpbmZvKHN0cnVjdCBzeXNpbmZvIF9fdXNlciAqaW5mbyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3N5c2ZzKGludCBvcHRpb24sCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpOwotYXNtbGlua2FnZSBsb25nIHN5c19uZnNzZXJ2Y3RsKGludCBjbWQsCi0JCQkJc3RydWN0IG5mc2N0bF9hcmcgX191c2VyICphcmcsCi0JCQkJdm9pZCBfX3VzZXIgKnJlcyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbik7CiBhc21saW5rYWdlIGxvbmcgc3lzX3VzZWxpYihjb25zdCBjaGFyIF9fdXNlciAqbGlicmFyeSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX25pX3N5c2NhbGwodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCmluZGV4IGQzZWM4OWYuLjQ3YjRhMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC04NSwyMiArODUsNiBAQAogCQkJCSgobG9uZyl0LTI3MzIrNSkvMTAgOiAoKGxvbmcpdC0yNzMyLTUpLzEwKQogI2RlZmluZSBDRUxTSVVTX1RPX0tFTFZJTih0KQkoKHQpKjEwKzI3MzIpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19USEVSTUFMX0hXTU9OKQotLyogdGhlcm1hbCB6b25lIGRldmljZXMgd2l0aCB0aGUgc2FtZSB0eXBlIHNoYXJlIG9uZSBod21vbiBkZXZpY2UgKi8KLXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSB7Ci0JY2hhciB0eXBlW1RIRVJNQUxfTkFNRV9MRU5HVEhdOwotCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKLQlpbnQgY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0el9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLX07Ci0KLXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgewotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7Ci0JY2hhciBuYW1lWzE2XTsKLX07Ci0jZW5kaWYKLQogc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgewogCWludCBpZDsKIAljaGFyIHR5cGVbVEhFUk1BTF9OQU1FX0xFTkdUSF07CkBAIC0xMjAsMTIgKzEwNCw2IEBACiAJc3RydWN0IG11dGV4IGxvY2s7CS8qIHByb3RlY3QgY29vbGluZyBkZXZpY2VzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsX3F1ZXVlOwotI2lmIGRlZmluZWQoQ09ORklHX1RIRVJNQUxfSFdNT04pCi0Jc3RydWN0IGxpc3RfaGVhZCBod21vbl9ub2RlOwotCXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqaHdtb247Ci0Jc3RydWN0IHRoZXJtYWxfaHdtb25fYXR0ciB0ZW1wX2lucHV0OwkvKiBod21vbiBzeXMgYXR0ciAqLwotCXN0cnVjdCB0aGVybWFsX2h3bW9uX2F0dHIgdGVtcF9jcml0OwkvKiBod21vbiBzeXMgYXR0ciAqLwotI2VuZGlmCiB9OwogLyogQWRkaW5nIGV2ZW50IG5vdGlmaWNhdGlvbiBzdXBwb3J0IGVsZW1lbnRzICovCiAjZGVmaW5lIFRIRVJNQUxfR0VOTF9GQU1JTFlfTkFNRSAgICAgICAgICAgICAgICAidGhlcm1hbF9ldmVudCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlfd2lsaW5rX3N0LmggYi9pbmNsdWRlL2xpbnV4L3RpX3dpbGlua19zdC5oCmluZGV4IGIwMDRlNTUuLjJlZjQzODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlfd2lsaW5rX3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC90aV93aWxpbmtfc3QuaApAQCAtNDEwLDcgKzQxMCwyOCBAQAogCXUxNiBwbGVuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qIHBsYXRmb3JtIGRhdGEgKi8KKy8qKgorICogc3RydWN0IHRpX3N0X3BsYXRfZGF0YSAtIHBsYXRmb3JtIGRhdGEgc2hhcmVkIGJldHdlZW4gU1QgZHJpdmVyIGFuZAorICoJcGxhdGZvcm0gc3BlY2lmaWMgYm9hcmQgZmlsZSB3aGljaCBhZGRzIHRoZSBTVCBkZXZpY2UuCisgKiBAbnNodXRkb3duX2dwaW86IEhvc3QncyBHUElPIGxpbmUgdG8gd2hpY2ggY2hpcCdzIEJUX0VOIGlzIGNvbm5lY3RlZC4KKyAqIEBkZXZfbmFtZTogVGhlIFVBUlQvVFRZIG5hbWUgdG8gd2hpY2ggY2hpcCBpcyBpbnRlcmZhY2VkLiAoZWc6IC9kZXYvdHR5UzEpCisgKiBAZmxvd19jbnRybDogU2hvdWxkIGFsd2F5cyBiZSAxLCBzaW5jZSBVQVJUJ3MgQ1RTL1JUUyBpcyB1c2VkIGZvciBQTQorICoJcHVycG9zZXMuCisgKiBAYmF1ZF9yYXRlOiBUaGUgYmF1ZCByYXRlIHN1cHBvcnRlZCBieSB0aGUgSG9zdCBVQVJUIGNvbnRyb2xsZXIsIHRoaXMgd2lsbAorICoJYmUgc2hhcmVkIGFjcm9zcyB3aXRoIHRoZSBjaGlwIHZpYSBhIEhDSSBWUyBjb21tYW5kIGZyb20gVXNlci1TcGFjZSBJbml0CisgKglNZ3IgYXBwbGljYXRpb24uCisgKiBAc3VzcGVuZDoKKyAqIEByZXN1bWU6IGxlZ2FjeSBQTSByb3V0aW5lcyBob29rZWQgdG8gcGxhdGZvcm0gc3BlY2lmaWMgYm9hcmQgZmlsZSwgc28gYXMKKyAqCXRvIHRha2UgY2hpcC1ob3N0IGludGVyZmFjZSBzcGVjaWZpYyBhY3Rpb24uCisgKiBAY2hpcF9lbmFibGU6CisgKiBAY2hpcF9kaXNhYmxlOiBQbGF0Zm9ybS9JbnRlcmZhY2Ugc3BlY2lmaWMgbXV4IG1vZGUgc2V0dGluZywgR1BJTworICoJY29uZmlndXJpbmcsIEhvc3Qgc2lkZSBQTSBkaXNhYmxpbmcgZXRjLi4gY2FuIGJlIGRvbmUgaGVyZS4KKyAqIEBjaGlwX2FzbGVlcDoKKyAqIEBjaGlwX2F3YWtlOiBDaGlwIHNwZWNpZmljIGRlZXAgc2xlZXAgc3RhdGVzIGlzIGNvbW11bmljYXRlZCB0byBIb3N0CisgKglzcGVjaWZpYyBib2FyZC14eC5jIHRvIHRha2UgYWN0aW9ucyBzdWNoIGFzIGN1dCBVQVJUIGNsb2NrcyB3aGVuIGNoaXAKKyAqCWFzbGVlcCBvciBydW4gaG9zdCBmYXN0ZXIgd2hlbiBjaGlwIGF3YWtlIGV0Yy4uCisgKgorICovCiBzdHJ1Y3QgdGlfc3RfcGxhdF9kYXRhIHsKIAlsb25nIG5zaHV0ZG93bl9ncGlvOwogCXVuc2lnbmVkIGNoYXIgZGV2X25hbWVbVUFSVF9ERVZfTkFNRV9MRU5dOyAvKiB1YXJ0IG5hbWUgKi8KQEAgLTQxOCw2ICs0MzksMTAgQEAKIAl1bnNpZ25lZCBsb25nIGJhdWRfcmF0ZTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCWludCAoKmNoaXBfZW5hYmxlKSAoc3RydWN0IGtpbV9kYXRhX3MgKik7CisJaW50ICgqY2hpcF9kaXNhYmxlKSAoc3RydWN0IGtpbV9kYXRhX3MgKik7CisJaW50ICgqY2hpcF9hc2xlZXApIChzdHJ1Y3Qga2ltX2RhdGFfcyAqKTsKKwlpbnQgKCpjaGlwX2F3YWtlKSAoc3RydWN0IGtpbV9kYXRhX3MgKik7CiB9OwogCiAjZW5kaWYgLyogVElfV0lMSU5LX1NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IDQ0YmMwYzUuLjVmMmVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtNDIxLDYgKzQyMSw4IEBACiBleHRlcm4gdm9pZCB0dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gdm9pZCB0dHlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgdHR5X2RvX3Jlc2l6ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgd2luc2l6ZSAqd3MpOworZXh0ZXJuIHZvaWQgdHR5X2RyaXZlcl9yZW1vdmVfdHR5KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCisJCQkJICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHR0eV9zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHR0eV9mcmVlX3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IGlzX2N1cnJlbnRfcGdycF9vcnBoYW5lZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggOWRlZWFjOC4uZWNkYWViOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTQ3LDYgKzQ3LDkgQEAKICAqCiAgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UKICAqCWlzIGNsb3NlZCBmb3IgdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuCisgKglOb3RlIHRoYXQgdHR5X3NodXRkb3duKCkgaXMgbm90IGNhbGxlZCBpZiBvcHMtPnNodXRkb3duIGlzIGRlZmluZWQuCisgKglUaGlzIG1lYW5zIG9uZSBpcyByZXNwb25zaWJsZSB0byB0YWtlIGNhcmUgb2YgY2FsbGluZyBvcHMtPnJlbW92ZSAoZS5nLgorICoJdmlhIHR0eV9kcml2ZXJfcmVtb3ZlX3R0eSkgYW5kIHJlbGVhc2luZyB0dHktPnRlcm1pb3MuCiAgKgogICoKICAqIHZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA4YTRjMzA5Li5mY2EyNGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTM3Niw3ICszNzYsMTYgQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01KUEVHICAgIHY0bDJfZm91cmNjKCdNJywgJ0onLCAnUCcsICdHJykgLyogTW90aW9uLUpQRUcgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBFRyAgICAgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdFJywgJ0cnKSAvKiBKRklGIEpQRUcgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9EViAgICAgICB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpIC8qIDEzOTQgICAgICAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykgLyogTVBFRy0xLzIvNCAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80IE11bHRpcGxleGVkICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0ICAgICB2NGwyX2ZvdXJjYygnSCcsICcyJywgJzYnLCAnNCcpIC8qIEgyNjQgd2l0aCBzdGFydCBjb2RlcyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfSDI2NF9OT19TQyB2NGwyX2ZvdXJjYygnQScsICdWJywgJ0MnLCAnMScpIC8qIEgyNjQgd2l0aG91dCBzdGFydCBjb2RlcyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfSDI2MyAgICAgdjRsMl9mb3VyY2MoJ0gnLCAnMicsICc2JywgJzMnKSAvKiBIMjYzICAgICAgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMSAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnMScpIC8qIE1QRUctMSBFUyAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcyICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICcyJykgLyogTVBFRy0yIEVTICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRzQgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdHJywgJzQnKSAvKiBNUEVHLTQgRVMgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9YVklEICAgICB2NGwyX2ZvdXJjYygnWCcsICdWJywgJ0knLCAnRCcpIC8qIFh2aWQgICAgICAgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfRyB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnRycpIC8qIFNNUFRFIDQyMU0gQW5uZXggRyBjb21wbGlhbnQgc3RyZWFtICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfTCB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnTCcpIC8qIFNNUFRFIDQyMU0gQW5uZXggTCBjb21wbGlhbnQgc3RyZWFtICovCiAKIC8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8qIGNwaWExIFlVViAqLwpAQCAtNDAyLDYgKzQxMSw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9DSVRfWVlWWVVZIHY0bDJfZm91cmNjKCdDJywgJ0knLCAnVCcsICdWJykgLyogb25lIGxpbmUgb2YgWSB0aGVuIDEgbGluZSBvZiBWWVVZICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9LT05JQ0E0MjAgIHY0bDJfZm91cmNjKCdLJywgJ08nLCAnTicsICdJJykgLyogWVVWNDIwIHBsYW5hciBpbiBibG9ja3Mgb2YgMjU2IHBpeGVscyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBHTAl2NGwyX2ZvdXJjYygnSicsICdQJywgJ0cnLCAnTCcpIC8qIEpQRUctTGl0ZSAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0U0MDEgICAgICB2NGwyX2ZvdXJjYygnUycsICc0JywgJzAnLCAnMScpIC8qIHNlNDAxIGphbmdndSBjb21wcmVzc2VkIHJnYiAqLwogCiAvKgogICoJRiBPIFIgTSBBIFQgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KQEAgLTEwMjYsNiArMTAzNiw3IEBACiAjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAJLyogTVBFRy1jb21wcmVzc2lvbiBjb250cm9scyAqLwogI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIDB4MDA5YTAwMDAJLyogQ2FtZXJhIGNsYXNzIGNvbnRyb2xzICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19GTV9UWCAweDAwOWIwMDAwCS8qIEZNIE1vZHVsYXRvciBjb250cm9sIGNsYXNzICovCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19GTEFTSCAweDAwOWMwMDAwCS8qIENhbWVyYSBmbGFzaCBjb250cm9scyAqLwogCiAjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICAgICAgCSAgKDB4MGZmZmZmZmYpCiAjZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgICAgKChpZCkgJiAweDBmZmYwMDAwVUwpCkBAIC0xMDM5LDYgKzEwNTAsNyBAQAogCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCAgICAgPSA1LAogCVY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgICAgPSA2LAogCVY0TDJfQ1RSTF9UWVBFX1NUUklORyAgICAgICAgPSA3LAorCVY0TDJfQ1RSTF9UWVBFX0JJVE1BU0sgICAgICAgPSA4LAogfTsKIAogLyogIFVzZWQgaW4gdGhlIFZJRElPQ19RVUVSWUNUUkwgaW9jdGwgZm9yIHF1ZXJ5aW5nIGNvbnRyb2xzICovCkBAIC0xMTQ0LDE0ICsxMTU2LDE5IEBACiAjZGVmaW5lIFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18xCQkJKFY0TDJfQ0lEX0JBU0UrMzcpCiAjZGVmaW5lIFY0TDJfQ0lEX0lMTFVNSU5BVE9SU18yCQkJKFY0TDJfQ0lEX0JBU0UrMzgpCiAKKyNkZWZpbmUgVjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX0NBUFRVUkUJKFY0TDJfQ0lEX0JBU0UrMzkpCisjZGVmaW5lIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9PVVRQVVQJCShWNEwyX0NJRF9CQVNFKzQwKQorCiAvKiBsYXN0IENJRCArIDEgKi8KLSNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzM5KQorI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrNDEpCisKKy8qIE1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlciBuZWVkZSBieSB0aGUgZGV2aWNlICovCiAKIC8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ0xBU1MgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKIAotLyogIE1QRUcgc3RyZWFtcyAqLworLyogIE1QRUcgc3RyZWFtcywgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgc3RyZWFtcyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSswKQogZW51bSB2NGwyX21wZWdfc3RyZWFtX3R5cGUgewogCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUyAgID0gMCwgLyogTVBFRy0yIHByb2dyYW0gc3RyZWFtICovCkBAIC0xMTczLDcgKzExOTAsNyBAQAogCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWID0gMSwgIC8qIFZCSSBpbiBwcml2YXRlIHBhY2tldHMsIElWVFYgZm9ybWF0ICovCiB9OwogCi0vKiAgTVBFRyBhdWRpbyAqLworLyogIE1QRUcgYXVkaW8gY29udHJvbHMgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgc3RyZWFtcyAgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRIAkoVjRMMl9DSURfTVBFR19CQVNFKzEwMCkKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXEgewogCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKQEAgLTEyODksNyArMTMwNiw3IEBACiAJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEsgPSAxOCwKIH07CiAKLS8qICBNUEVHIHZpZGVvICovCisvKiAgTVBFRyB2aWRlbyBjb250cm9scyBzcGVjaWZpYyB0byBtdWx0aXBsZXhlZCBzdHJlYW1zICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkcgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwMCkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nIHsKIAlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xICAgICA9IDAsCkBAIC0xMzE3LDYgKzEzMzQsMTQxIEBACiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwOSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTApCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVYgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIxMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX1NMSUNFX0lOVEVSRkFDRQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9NUEVHNF9ERUJMT0NLX0ZJTFRFUgkoVjRMMl9DSURfTVBFR19CQVNFKzIxMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19DWUNMSUNfSU5UUkFfUkVGUkVTSF9NQgkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSEVBREVSX01PREUJCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTYpCitlbnVtIHY0bDJfbXBlZ192aWRlb19oZWFkZXJfbW9kZSB7CisJVjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX1NFUEFSQVRFCQkJPSAwLAorCVY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9KT0lORURfV0lUSF8xU1RfRlJBTUUJPSAxLAorCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01BWF9SRUZfUElDCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTcpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTUJfUkNfRU5BQkxFCQkoVjRMMl9DSURfTVBFR19CQVNFKzIxOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX01CCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyMSkKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX211bHRpX3NsaWNlX21vZGUgeworCVY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRQkJPSAwLAorCVY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX01CCQk9IDEsCisJVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NJQ0VfTU9ERV9NQVhfQllURVMJPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WQlZfU0laRQkJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjIyKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfSV9GUkFNRV9RUAkJKFY0TDJfQ0lEX01QRUdfQkFTRSszMDApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19QX0ZSQU1FX1FQCQkoVjRMMl9DSURfTVBFR19CQVNFKzMwMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX0JfRlJBTUVfUVAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzAyKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfTUlOX1FQCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszMDMpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NQVhfUVAJCQkoVjRMMl9DSURfTVBFR19CQVNFKzMwNCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfRlJBTUVfUVAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzUwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUF9GUkFNRV9RUAkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9CX0ZSQU1FX1FQCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1MikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01JTl9RUAkJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzUzKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUFYX1FQCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1NSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0NQQl9TSVpFCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1NikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTcpCitlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2VudHJvcHlfbW9kZSB7CisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFX0NBVkxDCT0gMCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREVfQ0FCQUMJPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9ECQkoVjRMMl9DSURfTVBFR19CQVNFKzM1OCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xFVkVMCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTkpCitlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIHsKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzAJPSAwLAorCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFCCT0gMSwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzEJPSAyLAorCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMgk9IDMsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8zCT0gNCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzAJPSA1LAorCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMQk9IDYsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8yCT0gNywKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzAJPSA4LAorCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMQk9IDksCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18yCT0gMTAsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wCT0gMTEsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8xCT0gMTIsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8yCT0gMTMsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8wCT0gMTQsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8xCT0gMTUsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQUxQSEEJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9CRVRBCShWNEwyX0NJRF9NUEVHX0JBU0UrMzYxKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERQkoVjRMMl9DSURfTVBFR19CQVNFKzM2MikKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfbG9vcF9maWx0ZXJfbW9kZSB7CisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9FTkFCTEVECQkJCT0gMCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVECQkJCT0gMSwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZCT0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFCQkoVjRMMl9DSURfTVBFR19CQVNFKzM2MykKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfcHJvZmlsZSB7CisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9CQVNFTElORQkJCT0gMCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FCT0gMSwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX01BSU4JCQk9IDIsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9FWFRFTkRFRAkJCT0gMywKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0gJCQk9IDQsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzEwCQkJPSA1LAorCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjIJCQk9IDYsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9QUkVESUNUSVZFCT0gNywKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTBfSU5UUkEJCT0gOCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyX0lOVFJBCQk9IDksCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9JTlRSQQkJPSAxMCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NBVkxDXzQ0NF9JTlRSQQkJPSAxMSwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0JBU0VMSU5FCQk9IDEyLAorCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSAkJPSAxMywKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0hfSU5UUkEJPSAxNCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdICQk9IDE1LAorCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTVVMVElWSUVXX0hJR0gJCT0gMTYsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfSEVJR0hUCShWNEwyX0NJRF9NUEVHX0JBU0UrMzY0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfV0lEVEgJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjYpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQwkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjcpCitlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Z1aV9zYXJfaWRjIHsKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19VTlNQRUNJRklFRAk9IDAsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMXgxCQk9IDEsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTJ4MTEJCT0gMiwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMQkJPSAzLAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2eDExCQk9IDQsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNDB4MzMJCT0gNSwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yNHgxMQkJPSA2LAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzIweDExCQk9IDcsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMzJ4MTEJCT0gOCwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ184MHgzMwkJPSA5LAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE4eDExCQk9IDEwLAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE1eDExCQk9IDExLAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzY0eDMzCQk9IDEyLAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2MHg5OQkJPSAxMywKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180eDMJCT0gMTQsCisJVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyCQk9IDE1LAorCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzJ4MQkJPSAxNiwKKwlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19FWFRFTkRFRAk9IDE3LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9JX0ZSQU1FX1FQCShWNEwyX0NJRF9NUEVHX0JBU0UrNDAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BfRlJBTUVfUVAJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfQl9GUkFNRV9RUAkoVjRMMl9DSURfTVBFR19CQVNFKzQwMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NSU5fUVAJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDMpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUFYX1FQCShWNEwyX0NJRF9NUEVHX0JBU0UrNDA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMCQkoVjRMMl9DSURfTVBFR19CQVNFKzQwNSkKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X2xldmVsIHsKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMAk9IDAsCisJVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzBCCT0gMSwKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMQk9IDIsCisJVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzIJPSAzLAorCVY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8zCT0gNCwKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfM0IJPSA1LAorCVY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF80CT0gNiwKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNQk9IDcsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEUJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDYpCitlbnVtIHY0bDJfbXBlZ192aWRlb19tcGVnNF9wcm9maWxlIHsKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9TSU1QTEUJCQkJPSAwLAorCVY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX1NJTVBMRQkJCT0gMSwKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9DT1JFCQkJCT0gMiwKKwlWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9TSU1QTEVfU0NBTEFCTEUJCQk9IDMsCisJVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQURWQU5DRURfQ09ESU5HX0VGRklDSUVOQ1kJPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9RUEVMCQkoVjRMMl9DSURfTVBFR19CQVNFKzQwNykKIAogLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgc3BlY2lmaWMgdG8gdGhlIENYMjM0MXggZHJpdmVyIGFzIGRlZmluZWQgYnkgVjRMMiAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSAJCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMDAwKQpAQCAtMTM1OSw2ICsxNTExLDMzIEBACiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFMgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMSkKIAorLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgc3BlY2lmaWMgdG8gdGhlIFNhbXN1bmcgTUZDIDUuMSBkcml2ZXIgYXMgZGVmaW5lZCBieSBWNEwyICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRQkJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDExMDApCisKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSswKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZX0VOQUJMRQkoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsyKQorZW51bSB2NGwyX21wZWdfbWZjNTFfdmlkZW9fZnJhbWVfc2tpcF9tb2RlIHsKKwlWNEwyX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFX0RJU0FCTEVECQk9IDAsCisJVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9MRVZFTF9MSU1JVAk9IDEsCisJVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9CVUZfTElNSVQJCT0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRQkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMykKK2VudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZvcmNlX2ZyYW1lX3R5cGUgeworCVY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0RJU0FCTEVECQk9IDAsCisJVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfSV9GUkFNRQkJPSAxLAorCVY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX05PVF9DT0RFRAk9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkcJCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkdfWVVWCQkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklUCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1JDX1JFQUNUSU9OX0NPRUZGCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfQUNUSVZJVFkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19EQVJLCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NNT09USAkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NUQVRJQwkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X05VTV9SRUZfUElDX0ZPUl9QCQkoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzU0KQorCiAvKiAgQ2FtZXJhIGNsYXNzIGNvbnRyb2wgSURzICovCiAjZGVmaW5lIFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFIAkoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1MgCQkoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDEpCkBAIC0xNDI3LDYgKzE2MDYsNDEgQEAKICNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTAkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCiAjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTE0KQogCisvKiBGbGFzaCBhbmQgcHJpdmFjeSAoaW5kaWNhdG9yKSBsaWdodCBjb250cm9scyAqLworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFCQkoVjRMMl9DVFJMX0NMQVNTX0ZMQVNIIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0NMQVNTCQkJKFY0TDJfQ1RSTF9DTEFTU19GTEFTSCB8IDEpCisKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfTEVEX01PREUJCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDEpCitlbnVtIHY0bDJfZmxhc2hfbGVkX21vZGUgeworCVY0TDJfRkxBU0hfTEVEX01PREVfTk9ORSwKKwlWNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNILAorCVY0TDJfRkxBU0hfTEVEX01PREVfVE9SQ0gsCit9OworCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TT1VSQ0UJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMikKK2VudW0gdjRsMl9mbGFzaF9zdHJvYmVfc291cmNlIHsKKwlWNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfU09GVFdBUkUsCisJVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX0VYVEVSTkFMLAorfTsKKworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkUJCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDMpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVE9QCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDQpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVEFUVVMJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNSkKKworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9USU1FT1VUCQkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA2KQorI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9JTlRFTlNJVFkJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNykKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfVE9SQ0hfSU5URU5TSVRZCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDgpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0lORElDQVRPUl9JTlRFTlNJVFkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA5KQorCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0ZBVUxUCQkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMCkKKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0UJCSgxIDw8IDApCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfVElNRU9VVAkJKDEgPDwgMSkKKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFCSgxIDw8IDIpCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfU0hPUlRfQ0lSQ1VJVAkJKDEgPDwgMykKKworI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DSEFSR0UJCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDExKQorI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9SRUFEWQkJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTIpCisKIC8qCiAgKglUIFUgTiBJIE4gRwogICovCkBAIC0xNzkxLDYgKzIwMDUsNyBAQAogI2RlZmluZSBWNEwyX0VWRU5UX0FMTAkJCQkwCiAjZGVmaW5lIFY0TDJfRVZFTlRfVlNZTkMJCQkxCiAjZGVmaW5lIFY0TDJfRVZFTlRfRU9TCQkJCTIKKyNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMCQkJCTMKICNkZWZpbmUgVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJUCQkweDA4MDAwMDAwCiAKIC8qIFBheWxvYWQgZm9yIFY0TDJfRVZFTlRfVlNZTkMgKi8KQEAgLTE3OTksMjEgKzIwMTQsNDYgQEAKIAlfX3U4IGZpZWxkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qIFBheWxvYWQgZm9yIFY0TDJfRVZFTlRfQ1RSTCAqLworI2RlZmluZSBWNEwyX0VWRU5UX0NUUkxfQ0hfVkFMVUUJCSgxIDw8IDApCisjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9GTEFHUwkJKDEgPDwgMSkKKworc3RydWN0IHY0bDJfZXZlbnRfY3RybCB7CisJX191MzIgY2hhbmdlczsKKwlfX3UzMiB0eXBlOworCXVuaW9uIHsKKwkJX19zMzIgdmFsdWU7CisJCV9fczY0IHZhbHVlNjQ7CisJfTsKKwlfX3UzMiBmbGFnczsKKwlfX3MzMiBtaW5pbXVtOworCV9fczMyIG1heGltdW07CisJX19zMzIgc3RlcDsKKwlfX3MzMiBkZWZhdWx0X3ZhbHVlOworfTsKKwogc3RydWN0IHY0bDJfZXZlbnQgewogCV9fdTMyCQkJCXR5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgdjRsMl9ldmVudF92c3luYyB2c3luYzsKKwkJc3RydWN0IHY0bDJfZXZlbnRfY3RybAljdHJsOwogCQlfX3U4CQkJZGF0YVs2NF07CiAJfSB1OwogCV9fdTMyCQkJCXBlbmRpbmc7CiAJX191MzIJCQkJc2VxdWVuY2U7CiAJc3RydWN0IHRpbWVzcGVjCQkJdGltZXN0YW1wOwotCV9fdTMyCQkJCXJlc2VydmVkWzldOworCV9fdTMyCQkJCWlkOworCV9fdTMyCQkJCXJlc2VydmVkWzhdOwogfTsKIAorI2RlZmluZSBWNEwyX0VWRU5UX1NVQl9GTF9TRU5EX0lOSVRJQUwJCSgxIDw8IDApCisjZGVmaW5lIFY0TDJfRVZFTlRfU1VCX0ZMX0FMTE9XX0ZFRURCQUNLCSgxIDw8IDEpCisKIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiB7CiAJX191MzIJCQkJdHlwZTsKLQlfX3UzMgkJCQlyZXNlcnZlZFs3XTsKKwlfX3UzMgkJCQlpZDsKKwlfX3UzMgkJCQlmbGFnczsKKwlfX3UzMgkJCQlyZXNlcnZlZFs1XTsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCBmMWJmYTEyZS4uMmI4OTYzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC0xMiwxNSArMTIsNiBAQAogICoKICAqCSh0aHJlc2ggLSB0aHJlc2gvRElSVFlfRlVMTF9TQ09QRSwgdGhyZXNoKQogICoKLSAqIFRoZSAxLzE2IHJlZ2lvbiBhYm92ZSB0aGUgZ2xvYmFsIGRpcnR5IGxpbWl0IHdpbGwgYmUgcHV0IHRvIG1heGltdW0gcGF1c2VzOgotICoKLSAqCShsaW1pdCwgbGltaXQgKyBsaW1pdC9ESVJUWV9NQVhQQVVTRV9BUkVBKQotICoKLSAqIFRoZSAxLzE2IHJlZ2lvbiBhYm92ZSB0aGUgbWF4LXBhdXNlIHJlZ2lvbiwgZGlydHkgZXhjZWVkZWQgYmRpJ3Mgd2lsbCBiZSBwdXQKLSAqIHRvIGxvb3BzOgotICoKLSAqCShsaW1pdCArIGxpbWl0L0RJUlRZX01BWFBBVVNFX0FSRUEsIGxpbWl0ICsgbGltaXQvRElSVFlfUEFTU0dPT0RfQVJFQSkKLSAqCiAgKiBGdXJ0aGVyIGJleW9uZCwgYWxsIGRpcnRpZXIgdGFza3Mgd2lsbCBlbnRlciBhIGxvb3Agd2FpdGluZyAocG9zc2libHkgbG9uZwogICogdGltZSkgZm9yIHRoZSBkaXJ0eSBwYWdlcyB0byBkcm9wLCB1bmxlc3Mgd3JpdHRlbiBlbm91Z2ggcGFnZXMuCiAgKgpAQCAtMzEsOCArMjIsNiBAQAogICovCiAjZGVmaW5lIERJUlRZX1NDT1BFCQk4CiAjZGVmaW5lIERJUlRZX0ZVTExfU0NPUEUJKERJUlRZX1NDT1BFIC8gMikKLSNkZWZpbmUgRElSVFlfTUFYUEFVU0VfQVJFQQkJMTYKLSNkZWZpbmUgRElSVFlfUEFTU0dPT0RfQVJFQQkJOAogCiAvKgogICogNE1CIG1pbmltYWwgd3JpdGUgY2h1bmsgc2l6ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9hZHAxNjUzLmggYi9pbmNsdWRlL21lZGlhL2FkcDE2NTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGExYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9hZHAxNjUzLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBpbmNsdWRlL21lZGlhL2FkcDE2NTMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0tMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IFNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVzQG1heHdlbGwucmVzZWFyY2gubm9raWEuY29tPgorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqCVNha2FyaSBBaWx1cyA8c2FrYXJpLmFpbHVzQG1heHdlbGwucmVzZWFyY2gubm9raWEuY29tPgorICoJVHV1a2thIFRvaXZvbmVuIDx0dXVra2F0NzZAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBRFAxNjUzX0gKKyNkZWZpbmUgQURQMTY1M19ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorCisjZGVmaW5lIEFEUDE2NTNfTkFNRQkJCQkiYWRwMTY1MyIKKyNkZWZpbmUgQURQMTY1M19JMkNfQUREUgkJCSgweDYwID4+IDEpCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIEFEUDE2NTNfUkVHX09VVF9TRUwJCQkweDAwCisjZGVmaW5lIEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfVE9SQ0hfTUlOCTB4MDEKKyNkZWZpbmUgQURQMTY1M19SRUdfT1VUX1NFTF9IUExFRF9UT1JDSF9NQVgJMHgwYgorI2RlZmluZSBBRFAxNjUzX1JFR19PVVRfU0VMX0hQTEVEX0ZMQVNIX01JTgkweDBjCisjZGVmaW5lIEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfRkxBU0hfTUFYCTB4MWYKKyNkZWZpbmUgQURQMTY1M19SRUdfT1VUX1NFTF9IUExFRF9TSElGVAkJMworI2RlZmluZSBBRFAxNjUzX1JFR19PVVRfU0VMX0lMRURfTUFYCQkweDA3CisjZGVmaW5lIEFEUDE2NTNfUkVHX09VVF9TRUxfSUxFRF9TSElGVAkJMAorCisjZGVmaW5lIEFEUDE2NTNfUkVHX0NPTkZJRwkJCTB4MDEKKyNkZWZpbmUgQURQMTY1M19SRUdfQ09ORklHX1RNUl9DRkcJCSgxIDw8IDQpCisjZGVmaW5lIEFEUDE2NTNfUkVHX0NPTkZJR19UTVJfU0VUX01BWAkJMHgwZgorI2RlZmluZSBBRFAxNjUzX1JFR19DT05GSUdfVE1SX1NFVF9TSElGVAkwCisKKyNkZWZpbmUgQURQMTY1M19SRUdfU1dfU1RST0JFCQkJMHgwMgorI2RlZmluZSBBRFAxNjUzX1JFR19TV19TVFJPQkVfU1dfU1RST0JFCQkoMSA8PCAwKQorCisjZGVmaW5lIEFEUDE2NTNfUkVHX0ZBVUxUCQkJMHgwMworI2RlZmluZSBBRFAxNjUzX1JFR19GQVVMVF9GTFRfU0NQCQkoMSA8PCAzKQorI2RlZmluZSBBRFAxNjUzX1JFR19GQVVMVF9GTFRfT1QJCSgxIDw8IDIpCisjZGVmaW5lIEFEUDE2NTNfUkVHX0ZBVUxUX0ZMVF9UTVIJCSgxIDw8IDEpCisjZGVmaW5lIEFEUDE2NTNfUkVHX0ZBVUxUX0ZMVF9PVgkJKDEgPDwgMCkKKworI2RlZmluZSBBRFAxNjUzX0lORElDQVRPUl9JTlRFTlNJVFlfTUlOCQkwCisjZGVmaW5lIEFEUDE2NTNfSU5ESUNBVE9SX0lOVEVOU0lUWV9TVEVQCTI1MDAKKyNkZWZpbmUgQURQMTY1M19JTkRJQ0FUT1JfSU5URU5TSVRZX01BWAkJXAorCShBRFAxNjUzX1JFR19PVVRfU0VMX0lMRURfTUFYICogQURQMTY1M19JTkRJQ0FUT1JfSU5URU5TSVRZX1NURVApCisjZGVmaW5lIEFEUDE2NTNfSU5ESUNBVE9SX0lOVEVOU0lUWV91QV9UT19SRUcoYSkgXAorCSgoYSkgLyBBRFAxNjUzX0lORElDQVRPUl9JTlRFTlNJVFlfU1RFUCkKKyNkZWZpbmUgQURQMTY1M19JTkRJQ0FUT1JfSU5URU5TSVRZX1JFR19UT191QShhKSBcCisJKChhKSAqIEFEUDE2NTNfSU5ESUNBVE9SX0lOVEVOU0lUWV9TVEVQKQorCisjZGVmaW5lIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX0JBU0UJCTM1CisjZGVmaW5lIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX1NURVAJCTE1CisjZGVmaW5lIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX01JTgkJCQkJXAorCShBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9CQVNFCQkJCQlcCisJICsgQURQMTY1M19SRUdfT1VUX1NFTF9IUExFRF9GTEFTSF9NSU4gKiBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9TVEVQKQorI2RlZmluZSBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9NQVgJCQlcCisJKEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX01JTiArCQkJXAorCSAoQURQMTY1M19SRUdfT1VUX1NFTF9IUExFRF9GTEFTSF9NQVggLQkJXAorCSAgQURQMTY1M19SRUdfT1VUX1NFTF9IUExFRF9GTEFTSF9NSU4gKyAxKSAqCVwKKwkgQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfU1RFUCkKKworI2RlZmluZSBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9tQV9UT19SRUcoYSkJCQkJXAorCSgoYSkgPCBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9CQVNFID8gMCA6CQkJXAorCSAoKChhKSAtIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX0JBU0UpIC8gQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfU1RFUCkpCisjZGVmaW5lIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX1JFR19UT19tQShhKQkJXAorCSgoYSkgKiBBRFAxNjUzX0ZMQVNIX0lOVEVOU0lUWV9TVEVQICsgQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfQkFTRSkKKworI2RlZmluZSBBRFAxNjUzX1RPUkNIX0lOVEVOU0lUWV9NSU4JCQkJCVwKKwkoQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfQkFTRQkJCQkJXAorCSArIEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfVE9SQ0hfTUlOICogQURQMTY1M19GTEFTSF9JTlRFTlNJVFlfU1RFUCkKKyNkZWZpbmUgQURQMTY1M19UT1JDSF9JTlRFTlNJVFlfTUFYCQkJXAorCShBRFAxNjUzX1RPUkNIX0lOVEVOU0lUWV9NSU4gKwkJCVwKKwkgKEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfVE9SQ0hfTUFYIC0JCVwKKwkgIEFEUDE2NTNfUkVHX09VVF9TRUxfSFBMRURfVE9SQ0hfTUlOICsgMSkgKglcCisJIEFEUDE2NTNfRkxBU0hfSU5URU5TSVRZX1NURVApCisKK3N0cnVjdCBhZHAxNjUzX3BsYXRmb3JtX2RhdGEgeworCWludCAoKnBvd2VyKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgb24pOworCisJdTMyIG1heF9mbGFzaF90aW1lb3V0OwkJLyogZmxhc2ggbGlnaHQgdGltZW91dCBpbiB1cyAqLworCXUzMiBtYXhfZmxhc2hfaW50ZW5zaXR5OwkvKiBsZWQgaW50ZW5zaXR5LCBmbGFzaCBtb2RlICovCisJdTMyIG1heF90b3JjaF9pbnRlbnNpdHk7CS8qIGxlZCBpbnRlbnNpdHksIHRvcmNoIG1vZGUgKi8KKwl1MzIgbWF4X2luZGljYXRvcl9pbnRlbnNpdHk7CS8qIGluZGljYXRvciBsZWQgaW50ZW5zaXR5ICovCit9OworCisjZGVmaW5lIHRvX2FkcDE2NTNfZmxhc2goc2QpCWNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkcDE2NTNfZmxhc2gsIHN1YmRldikKKworc3RydWN0IGFkcDE2NTNfZmxhc2ggeworCXN0cnVjdCB2NGwyX3N1YmRldiBzdWJkZXY7CisJc3RydWN0IGFkcDE2NTNfcGxhdGZvcm1fZGF0YSAqcGxhdGZvcm1fZGF0YTsKKworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsczsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpsZWRfbW9kZTsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpmbGFzaF90aW1lb3V0OworCXN0cnVjdCB2NGwyX2N0cmwgKmZsYXNoX2ludGVuc2l0eTsKKwlzdHJ1Y3QgdjRsMl9jdHJsICp0b3JjaF9pbnRlbnNpdHk7CisJc3RydWN0IHY0bDJfY3RybCAqaW5kaWNhdG9yX2ludGVuc2l0eTsKKworCXN0cnVjdCBtdXRleCBwb3dlcl9sb2NrOworCWludCBwb3dlcl9jb3VudDsKKwlpbnQgZmF1bHQ7Cit9OworCisjZW5kaWYgLyogQURQMTY1M19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2F0bWVsLWlzaS5oIGIvaW5jbHVkZS9tZWRpYS9hdG1lbC1pc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNlY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9hdG1lbC1pc2kuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgQXRtZWwgSW1hZ2UgU2Vuc29yIEludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXRtZWwgQ29ycG9yYXRpb24KKyAqIEpvc2ggV3UsIDxqb3NoLnd1QGF0bWVsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBwcmV2aW91cyB3b3JrIGJ5IExhcnMgSGFyaW5nLCA8bGFycy5oYXJpbmdAYXRtZWwuY29tPgorICogYW5kIFNlZGppIEdhb3Vhb3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVRNRUxfSVNJX0hfXworI2RlZmluZSBfX0FUTUVMX0lTSV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIElTSV9WMiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIElTSV9DRkcxCQkJCTB4MDAwMAorI2RlZmluZSBJU0lfQ0ZHMgkJCQkweDAwMDQKKyNkZWZpbmUgSVNJX1BTSVpFCQkJCTB4MDAwOAorI2RlZmluZSBJU0lfUERFQ0YJCQkJMHgwMDBjCisjZGVmaW5lIElTSV9ZMlJfU0VUMAkJCQkweDAwMTAKKyNkZWZpbmUgSVNJX1kyUl9TRVQxCQkJCTB4MDAxNAorI2RlZmluZSBJU0lfUjJZX1NFVDAJCQkJMHgwMDE4CisjZGVmaW5lIElTSV9SMllfU0VUMQkJCQkweDAwMUMKKyNkZWZpbmUgSVNJX1IyWV9TRVQyCQkJCTB4MDAyMAorI2RlZmluZSBJU0lfQ1RSTAkJCQkweDAwMjQKKyNkZWZpbmUgSVNJX1NUQVRVUwkJCQkweDAwMjgKKyNkZWZpbmUgSVNJX0lOVEVOCQkJCTB4MDAyQworI2RlZmluZSBJU0lfSU5URElTCQkJCTB4MDAzMAorI2RlZmluZSBJU0lfSU5UTUFTSwkJCQkweDAwMzQKKyNkZWZpbmUgSVNJX0RNQV9DSEVSCQkJCTB4MDAzOAorI2RlZmluZSBJU0lfRE1BX0NIRFIJCQkJMHgwMDNDCisjZGVmaW5lIElTSV9ETUFfQ0hTUgkJCQkweDAwNDAKKyNkZWZpbmUgSVNJX0RNQV9QX0FERFIJCQkJMHgwMDQ0CisjZGVmaW5lIElTSV9ETUFfUF9DVFJMCQkJCTB4MDA0OAorI2RlZmluZSBJU0lfRE1BX1BfRFNDUgkJCQkweDAwNEMKKyNkZWZpbmUgSVNJX0RNQV9DX0FERFIJCQkJMHgwMDUwCisjZGVmaW5lIElTSV9ETUFfQ19DVFJMCQkJCTB4MDA1NAorI2RlZmluZSBJU0lfRE1BX0NfRFNDUgkJCQkweDAwNTgKKworLyogQml0ZmllbGRzIGluIENGRzEgKi8KKyNkZWZpbmUgSVNJX0NGRzFfSFNZTkNfUE9MX0FDVElWRV9MT1cJCSgxIDw8IDIpCisjZGVmaW5lIElTSV9DRkcxX1ZTWU5DX1BPTF9BQ1RJVkVfTE9XCQkoMSA8PCAzKQorI2RlZmluZSBJU0lfQ0ZHMV9QSVhDTEtfUE9MX0FDVElWRV9GQUxMSU5HCSgxIDw8IDQpCisjZGVmaW5lIElTSV9DRkcxX0VNQl9TWU5DCQkJKDEgPDwgNikKKyNkZWZpbmUgSVNJX0NGRzFfQ1JDX1NZTkMJCQkoMSA8PCA3KQorLyogQ29uc3RhbnRzIGZvciBGUkFURShJU0lfVjIpICovCisjZGVmaW5lCQlJU0lfQ0ZHMV9GUkFURV9DQVBUVVJFX0FMTAkoMCA8PCA4KQorI2RlZmluZQkJSVNJX0NGRzFfRlJBVEVfRElWXzIJCSgxIDw8IDgpCisjZGVmaW5lCQlJU0lfQ0ZHMV9GUkFURV9ESVZfMwkJKDIgPDwgOCkKKyNkZWZpbmUJCUlTSV9DRkcxX0ZSQVRFX0RJVl80CQkoMyA8PCA4KQorI2RlZmluZQkJSVNJX0NGRzFfRlJBVEVfRElWXzUJCSg0IDw8IDgpCisjZGVmaW5lCQlJU0lfQ0ZHMV9GUkFURV9ESVZfNgkJKDUgPDwgOCkKKyNkZWZpbmUJCUlTSV9DRkcxX0ZSQVRFX0RJVl83CQkoNiA8PCA4KQorI2RlZmluZQkJSVNJX0NGRzFfRlJBVEVfRElWXzgJCSg3IDw8IDgpCisjZGVmaW5lIElTSV9DRkcxX0RJU0NSCQkJCSgxIDw8IDExKQorI2RlZmluZSBJU0lfQ0ZHMV9GVUxMX01PREUJCQkoMSA8PCAxMikKKworLyogQml0ZmllbGRzIGluIENGRzIgKi8KKyNkZWZpbmUgSVNJX0NGRzJfR1JBWVNDQUxFCQkJKDEgPDwgMTMpCisvKiBDb25zdGFudHMgZm9yIFlDQ19TV0FQKElTSV9WMikgKi8KKyNkZWZpbmUJCUlTSV9DRkcyX1lDQ19TV0FQX0RFRkFVTFQJKDAgPDwgMjgpCisjZGVmaW5lCQlJU0lfQ0ZHMl9ZQ0NfU1dBUF9NT0RFXzEJKDEgPDwgMjgpCisjZGVmaW5lCQlJU0lfQ0ZHMl9ZQ0NfU1dBUF9NT0RFXzIJKDIgPDwgMjgpCisjZGVmaW5lCQlJU0lfQ0ZHMl9ZQ0NfU1dBUF9NT0RFXzMJKDMgPDwgMjgpCisjZGVmaW5lIElTSV9DRkcyX0lNX1ZTSVpFX09GRlNFVAkJMAorI2RlZmluZSBJU0lfQ0ZHMl9JTV9IU0laRV9PRkZTRVQJCTE2CisjZGVmaW5lIElTSV9DRkcyX0lNX1ZTSVpFX01BU0sJCSgweDdGRiA8PCBJU0lfQ0ZHMl9JTV9WU0laRV9PRkZTRVQpCisjZGVmaW5lIElTSV9DRkcyX0lNX0hTSVpFX01BU0sJCSgweDdGRiA8PCBJU0lfQ0ZHMl9JTV9IU0laRV9PRkZTRVQpCisKKy8qIEJpdGZpZWxkcyBpbiBDVFJMICovCisvKiBBbHNvIHVzaW5nIGluIFNSKElTSV9WMikgKi8KKyNkZWZpbmUgSVNJX0NUUkxfRU4JCQkJKDEgPDwgMCkKKyNkZWZpbmUgSVNJX0NUUkxfQ0RDCQkJCSgxIDw8IDgpCisvKiBBbHNvIHVzaW5nIGluIFNSL0lFUi9JRFIvSU1SKElTSV9WMikgKi8KKyNkZWZpbmUgSVNJX0NUUkxfRElTCQkJCSgxIDw8IDEpCisjZGVmaW5lIElTSV9DVFJMX1NSU1QJCQkJKDEgPDwgMikKKworLyogQml0ZmllbGRzIGluIFNSICovCisjZGVmaW5lIElTSV9TUl9TSVAJCQkJKDEgPDwgMTkpCisvKiBBbHNvIHVzaW5nIGluIFNSL0lFUi9JRFIvSU1SICovCisjZGVmaW5lIElTSV9TUl9WU1lOQwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgSVNJX1NSX1BYRlJfRE9ORQkJCSgxIDw8IDE2KQorI2RlZmluZSBJU0lfU1JfQ1hGUl9ET05FCQkJKDEgPDwgMTcpCisjZGVmaW5lIElTSV9TUl9QX09WUgkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgSVNJX1NSX0NfT1ZSCQkJCSgxIDw8IDI1KQorI2RlZmluZSBJU0lfU1JfQ1JDX0VSUgkJCQkoMSA8PCAyNikKKyNkZWZpbmUgSVNJX1NSX0ZSX09WUgkJCQkoMSA8PCAyNykKKworLyogQml0ZmllbGRzIGluIERNQV9DX0NUUkwgJiBpbiBETUFfUF9DVFJMICovCisjZGVmaW5lIElTSV9ETUFfQ1RSTF9GRVRDSAkJCSgxIDw8IDApCisjZGVmaW5lIElTSV9ETUFfQ1RSTF9XQgkJCQkoMSA8PCAxKQorI2RlZmluZSBJU0lfRE1BX0NUUkxfSUVOCQkJKDEgPDwgMikKKyNkZWZpbmUgSVNJX0RNQV9DVFJMX0RPTkUJCQkoMSA8PCAzKQorCisvKiBCaXRmaWVsZHMgaW4gRE1BX0NIU1IvQ0hFUi9DSERSICovCisjZGVmaW5lIElTSV9ETUFfQ0hTUl9QX0NICQkJKDEgPDwgMCkKKyNkZWZpbmUgSVNJX0RNQV9DSFNSX0NfQ0gJCQkoMSA8PCAxKQorCisvKiBEZWZpbml0aW9uIGZvciBpc2lfcGxhdGZvcm1fZGF0YSAqLworI2RlZmluZSBJU0lfREFUQVdJRFRIXzgJCQkJMHgwMQorI2RlZmluZSBJU0lfREFUQVdJRFRIXzEwCQkJMHgwMgorCitzdHJ1Y3QgaXNpX3BsYXRmb3JtX2RhdGEgeworCXU4IGhhc19lbWJfc3luYzsKKwl1OCBlbWJfY3JjX3N5bmM7CisJdTggaHN5bmNfYWN0X2xvdzsKKwl1OCB2c3luY19hY3RfbG93OworCXU4IHBjbGtfYWN0X2ZhbGxpbmc7CisJdTggaXNpX2Z1bGxfbW9kZTsKKwl1MzIgZGF0YV93aWR0aF9mbGFnczsKKwkvKiBVc2luZyBmb3IgSVNJX0NGRzEgKi8KKwl1MzIgZnJhdGU7Cit9OworCisjZW5kaWYgLyogX19BVE1FTF9JU0lfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZS5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjExZmIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmUuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX1ZQQkVfSAorI2RlZmluZSBfVlBCRV9ICisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGJlX29zZC5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV92ZW5jLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cGJlX3R5cGVzLmg+CisKKy8qIE9TRCBjb25maWd1cmF0aW9uIGluZm8gKi8KK3N0cnVjdCBvc2RfY29uZmlnX2luZm8geworCWNoYXIgbW9kdWxlX25hbWVbMzJdOworfTsKKworc3RydWN0IHZwYmVfb3V0cHV0IHsKKwlzdHJ1Y3QgdjRsMl9vdXRwdXQgb3V0cHV0OworCS8qCisJICogSWYgb3V0cHV0IGNhcGFiaWxpdGllcyBpbmNsdWRlIGR2X3ByZXNldCwgbGlzdCBzdXBwb3J0ZWQgcHJlc2V0cworCSAqIGJlbG93CisJICovCisJY2hhciAqc3ViZGV2X25hbWU7CisJLyoKKwkgKiBkZWZ1YWx0X21vZGUgaWRlbnRpZmllcyB0aGUgZGVmYXVsdCB0aW1pbmdzIHNldCBhdCB0aGUgdmVuYyBvcgorCSAqIGV4dGVybmFsIGVuY29kZXIuCisJICovCisJY2hhciAqZGVmYXVsdF9tb2RlOworCS8qCisJICogRmllbGRzIGJlbG93IGFyZSB1c2VkIGZvciBzdXBwb3J0aW5nIG11bHRpcGxlIG1vZGVzLiBGb3IgZXhhbXBsZSwKKwkgKiBMQ0QgcGFuZWwgbWlnaHQgc3VwcG9ydCBkaWZmZXJlbnQgbW9kZXMgYW5kIHRoZXkgYXJlIGxpc3RlZCBoZXJlLgorCSAqIFNpbWlsYXJseSBmb3Igc3VwcG9ydGluZyBleHRlcm5hbCBlbmNvZGVycywgbGNkIGNvbnRyb2xsZXIgcG9ydAorCSAqIHJlcXVpcmVzIGEgc2V0IG9mIG5vbi1zdGFuZGFyZCB0aW1pbmcgdmFsdWVzIHRvIGJlIGxpc3RlZCBoZXJlIGZvcgorCSAqIGVhY2ggc3VwcG9ydGVkIG1vZGUgc2luY2UgdmVuYyBpcyB1c2VkIGluIG5vbi1zdGFuZGFyZCB0aW1pbmcgbW9kZQorCSAqIGZvciBpbnRlcmZhY2luZyB3aXRoIGV4dGVybmFsIGVuY29kZXIgc2ltaWxhciB0byBjb25maWd1cmluZyBsY2QKKwkgKiBwYW5lbCB0aW1pbmdzCisJICovCisJdW5zaWduZWQgaW50IG51bV9tb2RlczsKKwlzdHJ1Y3QgdnBiZV9lbmNfbW9kZV9pbmZvICptb2RlczsKKwkvKgorCSAqIEJ1cyBjb25maWd1cmF0aW9uIGdvZXMgaGVyZSBmb3IgZXh0ZXJuYWwgZW5jb2RlcnMuIFNvbWUgZW5jb2RlcnMKKwkgKiBtYXkgcmVxdWlyZSBtdWx0aXBsZSBpbnRlcmZhY2UgdHlwZXMgZm9yIGVhY2ggb2YgdGhlIG91dHB1dC4gRm9yCisJICogZXhhbXBsZSwgU0QgbW9kZXMgd291bGQgdXNlIFlDQzggd2hlcmUgYXMgSEQgbW9kZSB3b3VsZCB1c2UgWUNDMTYuCisJICogTm90IHN1cmUgaWYgdGhpcyBpcyBuZWVkZWQgb24gYSBwZXIgbW9kZSBiYXNpcyBpbnN0ZWFkIG9mIHBlcgorCSAqIG91dHB1dCBiYXNpcy4gSWYgcGVyIG1vZGUgaXMgbmVlZGVkLCB3ZSBtYXkgaGF2ZSB0byBtb3ZlIHRoaXMgdG8KKwkgKiBtb2RlX2luZm8gc3RydWN0dXJlCisJICovCit9OworCisvKiBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gaW5mbyAqLworc3RydWN0IGVuY29kZXJfY29uZmlnX2luZm8geworCWNoYXIgbW9kdWxlX25hbWVbMzJdOworCS8qIElzIHRoaXMgYW4gaTJjIGRldmljZSA/ICovCisJdW5zaWduZWQgaW50IGlzX2kyYzoxOworCS8qIGkyYyBzdWJkZXZpY2UgYm9hcmQgaW5mbyAqLworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOworfTsKKworLyogc3RydWN0dXJlIGZvciBkZWZpbmluZyB2cGJlIGRpc3BsYXkgc3Vic3lzdGVtIGNvbXBvbmVudHMgKi8KK3N0cnVjdCB2cGJlX2NvbmZpZyB7CisJY2hhciBtb2R1bGVfbmFtZVszMl07CisJLyogaTJjIGJ1cyBhZGFwdGVyIG5vICovCisJaW50IGkyY19hZGFwdGVyX2lkOworCXN0cnVjdCBvc2RfY29uZmlnX2luZm8gb3NkOworCXN0cnVjdCBlbmNvZGVyX2NvbmZpZ19pbmZvIHZlbmM7CisJLyogZXh0ZXJuYWwgZW5jb2RlciBpbmZvcm1hdGlvbiBnb2VzIGhlcmUgKi8KKwlpbnQgbnVtX2V4dF9lbmNvZGVyczsKKwlzdHJ1Y3QgZW5jb2Rlcl9jb25maWdfaW5mbyAqZXh0X2VuY29kZXJzOworCWludCBudW1fb3V0cHV0czsKKwkvKiBPcmRlciBpcyB2ZW5jIG91dHB1dHMgZm9sbG93ZWQgYnkgTENEIGFuZCB0aGVuIGV4dGVybmFsIGVuY29kZXJzICovCisJc3RydWN0IHZwYmVfb3V0cHV0ICpvdXRwdXRzOworfTsKKworc3RydWN0IHZwYmVfZGV2aWNlOworCitzdHJ1Y3QgdnBiZV9kZXZpY2Vfb3BzIHsKKwkvKiBjcm9wIGNhcCBmb3IgdGhlIGRpc3BsYXkgKi8KKwlpbnQgKCpnX2Nyb3BjYXApKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCk7CisKKwkvKiBFbnVtZXJhdGUgdGhlIG91dHB1dHMgKi8KKwlpbnQgKCplbnVtX291dHB1dHMpKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgICAgc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwdXQpOworCisJLyogU2V0IG91dHB1dCB0byB0aGUgZ2l2ZW4gaW5kZXggKi8KKwlpbnQgKCpzZXRfb3V0cHV0KShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkJIGludCBpbmRleCk7CisKKwkvKiBHZXQgY3VycmVudCBvdXRwdXQgKi8KKwl1bnNpZ25lZCBpbnQgKCpnZXRfb3V0cHV0KShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2KTsKKworCS8qIFNldCBEViBwcmVzZXQgYXQgY3VycmVudCBvdXRwdXQgKi8KKwlpbnQgKCpzX2R2X3ByZXNldCkoc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2RldiwKKwkJCSAgIHN0cnVjdCB2NGwyX2R2X3ByZXNldCAqZHZfcHJlc2V0KTsKKworCS8qIEdldCBEViBwcmVzZXRzIHN1cHBvcnRlZCBhdCB0aGUgb3V0cHV0ICovCisJaW50ICgqZ19kdl9wcmVzZXQpKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKmR2X3ByZXNldCk7CisKKwkvKiBFbnVtZXJhdGUgdGhlIERWIFByZXNldHMgc3VwcG9ydGVkIGF0IHRoZSBvdXRwdXQgKi8KKwlpbnQgKCplbnVtX2R2X3ByZXNldHMpKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgKnByZXNldF9pbmZvKTsKKworCS8qIFNldCBzdGQgYXQgdGhlIG91dHB1dCAqLworCWludCAoKnNfc3RkKShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LCB2NGwyX3N0ZF9pZCAqc3RkX2lkKTsKKworCS8qIEdldCB0aGUgY3VycmVudCBzdGQgYXQgdGhlIG91dHB1dCAqLworCWludCAoKmdfc3RkKShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LCB2NGwyX3N0ZF9pZCAqc3RkX2lkKTsKKworCS8qIGluaXRpYWxpemUgdGhlIGRldmljZSAqLworCWludCAoKmluaXRpYWxpemUpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2Rldik7CisKKwkvKiBEZS1pbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KKwl2b2lkICgqZGVpbml0aWFsaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYpOworCisJLyogR2V0IHRoZSBjdXJyZW50IG1vZGUgaW5mbyAqLworCWludCAoKmdldF9tb2RlX2luZm8pKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYsCisJCQkgICAgIHN0cnVjdCB2cGJlX2VuY19tb2RlX2luZm8qKTsKKworCS8qCisJICogU2V0IHRoZSBjdXJyZW50IG1vZGUgaW4gdGhlIGVuY29kZXIuIEFsdGVybmF0ZSB3YXkgb2Ygc2V0dGluZworCSAqIHN0YW5kYXJkIG9yIERWIHByZXNldCBvciBjdXN0b20gdGltaW5ncyBpbiB0aGUgZW5jb2RlcgorCSAqLworCWludCAoKnNldF9tb2RlKShzdHJ1Y3QgdnBiZV9kZXZpY2UgKnZwYmVfZGV2LAorCQkJc3RydWN0IHZwYmVfZW5jX21vZGVfaW5mbyopOworCS8qIFBvd2VyIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyAqLworCWludCAoKnN1c3BlbmQpKHN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXYpOworCWludCAoKnJlc3VtZSkoc3RydWN0IHZwYmVfZGV2aWNlICp2cGJlX2Rldik7Cit9OworCisvKiBzdHJ1Y3QgZm9yIHZwYmUgZGV2aWNlICovCitzdHJ1Y3QgdnBiZV9kZXZpY2UgeworCS8qIFY0bDIgZGV2aWNlICovCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCS8qIHZwYmUgZGlzcGF5IGNvbnRyb2xsZXIgY2ZnICovCisJc3RydWN0IHZwYmVfY29uZmlnICpjZmc7CisJLyogcGFyZW50IGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKnBkZXY7CisJLyogZXh0ZXJuYWwgZW5jb2RlciB2NGwyIHN1YiBkZXZpY2VzICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICoqZW5jb2RlcnM7CisJLyogY3VycmVudCBlbmNvZGVyIGluZGV4ICovCisJaW50IGN1cnJlbnRfc2RfaW5kZXg7CisJc3RydWN0IG11dGV4IGxvY2s7CisJLyogZGV2aWNlIGluaXRpYWxpemVkICovCisJaW50IGluaXRpYWxpemVkOworCS8qIHZwYmUgZGFjIGNsb2NrICovCisJc3RydWN0IGNsayAqZGFjX2NsazsKKwkvKiBvc2RfZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3Qgb3NkX3N0YXRlICpvc2RfZGV2aWNlOworCS8qCisJICogZmllbGRzIGJlbG93IGFyZSBhY2Nlc3NlZCBieSB1c2VycyBvZiB2cGJlX2RldmljZS4gTm90IHRoZQorCSAqIG9uZXMgYWJvdmUKKwkgKi8KKworCS8qIGN1cnJlbnQgb3V0cHV0ICovCisJaW50IGN1cnJlbnRfb3V0X2luZGV4OworCS8qIGxvY2sgdXNlZCBieSBjYWxsZXIgdG8gZG8gYXRvbWljIG9wZXJhdGlvbiBvbiB2cGJlIGRldmljZSAqLworCS8qIGN1cnJlbnQgdGltaW5ncyBzZXQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgdnBiZV9lbmNfbW9kZV9pbmZvIGN1cnJlbnRfdGltaW5nczsKKwkvKiB2ZW5jIHN1YiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnZlbmM7CisJLyogZGV2aWNlIG9wZXJhdGlvbnMgYmVsb3cgKi8KKwlzdHJ1Y3QgdnBiZV9kZXZpY2Vfb3BzIG9wczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmVfZGlzcGxheS5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmVfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjZiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV9kaXNwbGF5LmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIFZQQkVfRElTUExBWV9ICisjZGVmaW5lIFZQQkVfRElTUExBWV9ICisKKy8qIEhlYWRlciBmaWxlcyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV90eXBlcy5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV9vc2QuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwYmUuaD4KKworI2RlZmluZSBWUEJFX0RJU1BMQVlfTUFYX0RFVklDRVMgMgorCitlbnVtIHZwYmVfZGlzcGxheV9kZXZpY2VfaWQgeworCVZQQkVfRElTUExBWV9ERVZJQ0VfMCwKKwlWUEJFX0RJU1BMQVlfREVWSUNFXzEKK307CisKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX0RSVl9OQU1FCSJ2cGJlLWRpc3BsYXkiCisKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX01BSk9SX1JFTEVBU0UgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX01JTk9SX1JFTEVBU0UgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX0JVSUxEICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX1ZFUlNJT05fQ09ERSAoKFZQQkVfRElTUExBWV9NQUpPUl9SRUxFQVNFIDw8IDE2KSB8IFwKKwkoVlBCRV9ESVNQTEFZX01JTk9SX1JFTEVBU0UgPDwgOCkgIHwgXAorCVZQQkVfRElTUExBWV9CVUlMRCkKKworI2RlZmluZSBWUEJFX0RJU1BMQVlfVkFMSURfRklFTEQoZmllbGQpICAgKChWNEwyX0ZJRUxEX05PTkUgPT0gZmllbGQpIHx8IFwKKwkgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB8fCAoVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID09IGZpZWxkKSkKKworLyogRXhwIHJhdGlvIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgY29uc3RhbnRzICovCisjZGVmaW5lIFZQQkVfRElTUExBWV9IX0VYUF9SQVRJT19OCTkKKyNkZWZpbmUgVlBCRV9ESVNQTEFZX0hfRVhQX1JBVElPX0QJOAorI2RlZmluZSBWUEJFX0RJU1BMQVlfVl9FWFBfUkFUSU9fTgk2CisjZGVmaW5lIFZQQkVfRElTUExBWV9WX0VYUF9SQVRJT19ECTUKKworLyogWm9vbSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKyNkZWZpbmUgVlBCRV9ESVNQTEFZX1pPT01fNFgJNAorI2RlZmluZSBWUEJFX0RJU1BMQVlfWk9PTV8yWAkyCisKKy8qIFN0cnVjdHVyZXMgKi8KK3N0cnVjdCBkaXNwbGF5X2xheWVyX2luZm8geworCWludCBlbmFibGU7CisJLyogTGF5ZXIgSUQgdXNlZCBieSBEaXNwbGF5IE1hbmFnZXIgKi8KKwllbnVtIG9zZF9sYXllciBpZDsKKwlzdHJ1Y3Qgb3NkX2xheWVyX2NvbmZpZyBjb25maWc7CisJZW51bSBvc2Rfem9vbV9mYWN0b3IgaF96b29tOworCWVudW0gb3NkX3pvb21fZmFjdG9yIHZfem9vbTsKKwllbnVtIG9zZF9oX2V4cF9yYXRpbyBoX2V4cDsKKwllbnVtIG9zZF92X2V4cF9yYXRpbyB2X2V4cDsKK307CisKKy8qIHZwYmUgZGlzcGxheSBvYmplY3Qgc3RydWN0dXJlICovCitzdHJ1Y3QgdnBiZV9sYXllciB7CisJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gZmJ1ZmZlcnMgKi8KKwl1bnNpZ25lZCBpbnQgbnVtYnVmZmVyczsKKwkvKiBQb2ludGVyIHRvIHRoZSB2cGJlX2Rpc3BsYXkgKi8KKwlzdHJ1Y3QgdnBiZV9kaXNwbGF5ICpkaXNwX2RldjsKKwkvKiBQb2ludGVyIHBvaW50aW5nIHRvIGN1cnJlbnQgdjRsMl9idWZmZXIgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpjdXJfZnJtOworCS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gbmV4dCB2NGwyX2J1ZmZlciAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKm5leHRfZnJtOworCS8qIHZpZGVvYnVmIHNwZWNpZmljIHBhcmFtZXRlcnMKKwkgKiBCdWZmZXIgcXVldWUgdXNlZCBpbiB2aWRlby1idWYKKwkgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgYnVmZmVyX3F1ZXVlOworCS8qIFF1ZXVlIG9mIGZpbGxlZCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9xdWV1ZTsKKwkvKiBVc2VkIGluIHZpZGVvLWJ1ZiAqLworCXNwaW5sb2NrX3QgaXJxbG9jazsKKwkvKiBWNGwyIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwkvKiBJZGVudGlmaWVzIHZpZGVvIGRldmljZSBmb3IgdGhpcyBsYXllciAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmlkZW9fZGV2OworCS8qIFRoaXMgZmllbGQga2VlcHMgdHJhY2sgb2YgdHlwZSBvZiBidWZmZXIgZXhjaGFuZ2UgbWVjaGFuaXNtIHVzZXIKKwkgKiBoYXMgc2VsZWN0ZWQKKwkgKi8KKwllbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsKKwkvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2Ygc3RhdGUgb2YgdGhlIHByaW9yaXR5ICovCisJc3RydWN0IHY0bDJfcHJpb19zdGF0ZSBwcmlvOworCS8qIFVzZWQgdG8gc3RvcmUgcGl4ZWwgZm9ybWF0ICovCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXhfZm10OworCWVudW0gdjRsMl9maWVsZCBidWZfZmllbGQ7CisJLyogVmlkZW8gbGF5ZXIgY29uZmlndXJhdGlvbiBwYXJhbXMgKi8KKwlzdHJ1Y3QgZGlzcGxheV9sYXllcl9pbmZvIGxheWVyX2luZm87CisJLyogdnBiZSBzcGVjaWZpYyBwYXJhbWV0ZXJzCisJICogZW5hYmxlIHdpbmRvdyBmb3IgZGlzcGxheQorCSAqLworCXVuc2lnbmVkIGNoYXIgd2luZG93X2VuYWJsZTsKKwkvKiBudW1iZXIgb2Ygb3BlbiBpbnN0YW5jZXMgb2YgdGhlIGxheWVyICovCisJdW5zaWduZWQgaW50IHVzcnM7CisJLyogbnVtYmVyIG9mIHVzZXJzIHBlcmZvcm1pbmcgSU8gKi8KKwl1bnNpZ25lZCBpbnQgaW9fdXNyczsKKwkvKiBJbmRpY2F0ZXMgaWQgb2YgdGhlIGZpZWxkIHdoaWNoIGlzIGJlaW5nIGRpc3BsYXllZCAqLworCXVuc2lnbmVkIGludCBmaWVsZF9pZDsKKwkvKiBJbmRpY2F0ZXMgd2hldGhlciBzdHJlYW1pbmcgc3RhcnRlZCAqLworCXVuc2lnbmVkIGNoYXIgc3RhcnRlZDsKKwkvKiBJZGVudGlmaWVzIGRldmljZSBvYmplY3QgKi8KKwllbnVtIHZwYmVfZGlzcGxheV9kZXZpY2VfaWQgZGV2aWNlX2lkOworCS8qIGZhY2lsaXRhdGlvbiBvZiBpb2N0bCBvcHMgbG9jayBieSB2NGwyKi8KKwlzdHJ1Y3QgbXV0ZXggb3BzbG9jazsKKwl1OCBsYXllcl9maXJzdF9pbnQ7Cit9OworCisvKiB2cGJlIGRldmljZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB2cGJlX2Rpc3BsYXkgeworCS8qIGxheWVyIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwkvKiBsb2NrIGZvciBpc3IgdXBkYXRlcyB0byBidWYgbGF5ZXJzKi8KKwlzcGlubG9ja190IGRtYV9xdWV1ZV9sb2NrOworCS8qIEMtUGxhbmUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgeS1wbGFuZSAqLworCXVuc2lnbmVkIGludCBjYmNyX29mc3Q7CisJc3RydWN0IHZwYmVfbGF5ZXIgKmRldltWUEJFX0RJU1BMQVlfTUFYX0RFVklDRVNdOworCXN0cnVjdCB2cGJlX2RldmljZSAqdnBiZV9kZXY7CisJc3RydWN0IG9zZF9zdGF0ZSAqb3NkX2RldmljZTsKK307CisKKy8qIEZpbGUgaGFuZGxlIHN0cnVjdHVyZSAqLworc3RydWN0IHZwYmVfZmggeworCS8qIHZwYmUgZGV2aWNlIHN0cnVjdHVyZSAqLworCXN0cnVjdCB2cGJlX2Rpc3BsYXkgKmRpc3BfZGV2OworCS8qIHBvaW50ZXIgdG8gbGF5ZXIgb2JqZWN0IGZvciBvcGVuZWQgZGV2aWNlICovCisJc3RydWN0IHZwYmVfbGF5ZXIgKmxheWVyOworCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgZmlsZSBoYW5kbGUgaXMgZG9pbmcgSU8gKi8KKwl1bnNpZ25lZCBjaGFyIGlvX2FsbG93ZWQ7CisJLyogVXNlZCB0byBrZWVwIHRyYWNrIHByaW9yaXR5IG9mIHRoaXMgaW5zdGFuY2UgKi8KKwllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsKK307CisKK3N0cnVjdCBidWZfY29uZmlnX3BhcmFtcyB7CisJdW5zaWduZWQgY2hhciBtaW5fbnVtYnVmZmVyczsKKwl1bnNpZ25lZCBjaGFyIG51bWJ1ZmZlcnNbVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTXTsKKwl1bnNpZ25lZCBpbnQgbWluX2J1ZnNpemVbVlBCRV9ESVNQTEFZX01BWF9ERVZJQ0VTXTsKKwl1bnNpZ25lZCBpbnQgbGF5ZXJfYnVmc2l6ZVtWUEJFX0RJU1BMQVlfTUFYX0RFVklDRVNdOworfTsKKworI2VuZGlmCS8qIFZQQkVfRElTUExBWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV9vc2QuaCBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGJlX29zZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTM5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV9vc2QuaApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQ29weXJpZ2h0IChDKSAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBbmR5IExvd2UgKGFsb3dlQG12aXN0YS5jb20pLCBNb250YVZpc3RhIFNvZnR3YXJlCisgKiAtIEluaXRpYWwgdmVyc2lvbgorICogTXVyYWxpIEthcmljaGVyaSAobWthcmljaGVyaUBnbWFpbC5jb20pLCBUZXhhcyBJbnN0cnVtZW50cyBMdGQuCisgKiAtIHBvcnRlZCB0byBzdWIgZGV2aWNlIGludGVyZmFjZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaWZuZGVmIF9PU0RfSAorI2RlZmluZSBfT1NEX0gKKworI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV90eXBlcy5oPgorCisjZGVmaW5lIFZQQkVfT1NEX1NVQkRFVl9OQU1FICJ2cGJlLW9zZCIKKworLyoqCisgKiBlbnVtIG9zZF9sYXllcgorICogQFdJTl9PU0QwOiBPbi1TY3JlZW4gRGlzcGxheSBXaW5kb3cgMAorICogQFdJTl9WSUQwOiBWaWRlbyBXaW5kb3cgMAorICogQFdJTl9PU0QxOiBPbi1TY3JlZW4gRGlzcGxheSBXaW5kb3cgMQorICogQFdJTl9WSUQxOiBWaWRlbyBXaW5kb3cgMQorICoKKyAqIERlc2NyaXB0aW9uOgorICogQW4gZW51bWVyYXRpb24gb2YgdGhlIG9zZCBkaXNwbGF5IGxheWVycy4KKyAqLworZW51bSBvc2RfbGF5ZXIgeworCVdJTl9PU0QwLAorCVdJTl9WSUQwLAorCVdJTl9PU0QxLAorCVdJTl9WSUQxLAorfTsKKworLyoqCisgKiBlbnVtIG9zZF93aW5fbGF5ZXIKKyAqIEBPU0RXSU5fT1NEMDogT24tU2NyZWVuIERpc3BsYXkgV2luZG93IDAKKyAqIEBPU0RXSU5fT1NEMTogT24tU2NyZWVuIERpc3BsYXkgV2luZG93IDEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFuIGVudW1lcmF0aW9uIG9mIHRoZSBPU0QgV2luZG93IGxheWVycy4KKyAqLworZW51bSBvc2Rfd2luX2xheWVyIHsKKwlPU0RXSU5fT1NEMCwKKwlPU0RXSU5fT1NEMSwKK307CisKKy8qKgorICogZW51bSBvc2RfcGl4X2Zvcm1hdAorICogQFBJWEZNVF8xQlBQOiAxLWJpdC1wZXItcGl4ZWwgYml0bWFwCisgKiBAUElYRk1UXzJCUFA6IDItYml0cy1wZXItcGl4ZWwgYml0bWFwCisgKiBAUElYRk1UXzRCUFA6IDQtYml0cy1wZXItcGl4ZWwgYml0bWFwCisgKiBAUElYRk1UXzhCUFA6IDgtYml0cy1wZXItcGl4ZWwgYml0bWFwCisgKiBAUElYRk1UX1JHQjU2NTogMTYtYml0cy1wZXItcGl4ZWwgUkdCNTY1CisgKiBAUElYRk1UX1lDYkNySTogWVVWIDQ6MjoyCisgKiBAUElYRk1UX1JHQjg4ODogMjQtYml0cy1wZXItcGl4ZWwgUkdCODg4CisgKiBAUElYRk1UX1lDckNiSTogWVVWIDQ6MjoyIHdpdGggY2hyb21hIHN3YXAKKyAqIEBQSVhGTVRfTlYxMjogWVVWIDQ6MjowIHBsYW5hcgorICogQFBJWEZNVF9PU0RfQVRUUjogT1NEIEF0dHJpYnV0ZSBXaW5kb3cgcGl4ZWwgZm9ybWF0ICg0YnBwKQorICoKKyAqIERlc2NyaXB0aW9uOgorICogQW4gZW51bWVyYXRpb24gb2YgdGhlIERhVmluY2kgcGl4ZWwgZm9ybWF0cy4KKyAqLworZW51bSBvc2RfcGl4X2Zvcm1hdCB7CisJUElYRk1UXzFCUFAgPSAwLAorCVBJWEZNVF8yQlBQLAorCVBJWEZNVF80QlBQLAorCVBJWEZNVF84QlBQLAorCVBJWEZNVF9SR0I1NjUsCisJUElYRk1UX1lDYkNySSwKKwlQSVhGTVRfUkdCODg4LAorCVBJWEZNVF9ZQ3JDYkksCisJUElYRk1UX05WMTIsCisJUElYRk1UX09TRF9BVFRSLAorfTsKKworLyoqCisgKiBlbnVtIG9zZF9oX2V4cF9yYXRpbworICogQEhfRVhQX09GRjogbm8gZXhwYW5zaW9uICgxLzEpCisgKiBASF9FWFBfOV9PVkVSXzg6IDkvOCBleHBhbnNpb24gcmF0aW8KKyAqIEBIX0VYUF8zX09WRVJfMjogMy8yIGV4cGFuc2lvbiByYXRpbworICoKKyAqIERlc2NyaXB0aW9uOgorICogQW4gZW51bWVyYXRpb24gb2YgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIGV4cGFuc2lvbiByYXRpb3MuCisgKi8KK2VudW0gb3NkX2hfZXhwX3JhdGlvIHsKKwlIX0VYUF9PRkYsCisJSF9FWFBfOV9PVkVSXzgsCisJSF9FWFBfM19PVkVSXzIsCit9OworCisvKioKKyAqIGVudW0gb3NkX3ZfZXhwX3JhdGlvCisgKiBAVl9FWFBfT0ZGOiBubyBleHBhbnNpb24gKDEvMSkKKyAqIEBWX0VYUF82X09WRVJfNTogNi81IGV4cGFuc2lvbiByYXRpbworICoKKyAqIERlc2NyaXB0aW9uOgorICogQW4gZW51bWVyYXRpb24gb2YgdGhlIGF2YWlsYWJsZSB2ZXJ0aWNhbCBleHBhbnNpb24gcmF0aW9zLgorICovCitlbnVtIG9zZF92X2V4cF9yYXRpbyB7CisJVl9FWFBfT0ZGLAorCVZfRVhQXzZfT1ZFUl81LAorfTsKKworLyoqCisgKiBlbnVtIG9zZF96b29tX2ZhY3RvcgorICogQFpPT01fWDE6IG5vIHpvb20gKHgxKQorICogQFpPT01fWDI6IHgyIHpvb20KKyAqIEBaT09NX1g0OiB4NCB6b29tCisgKgorICogRGVzY3JpcHRpb246CisgKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHpvb20gZmFjdG9ycy4KKyAqLworZW51bSBvc2Rfem9vbV9mYWN0b3IgeworCVpPT01fWDEsCisJWk9PTV9YMiwKKwlaT09NX1g0LAorfTsKKworLyoqCisgKiBlbnVtIG9zZF9jbHV0CisgKiBAUk9NX0NMVVQ6IFJPTSBDTFVUCisgKiBAUkFNX0NMVVQ6IFJBTSBDTFVUCisgKgorICogRGVzY3JpcHRpb246CisgKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIENvbG9yIExvb2t1cCBUYWJsZXMgKENMVVRzKS4KKyAqLworZW51bSBvc2RfY2x1dCB7CisJUk9NX0NMVVQsCisJUkFNX0NMVVQsCit9OworCisvKioKKyAqIGVudW0gb3NkX3JvbV9jbHV0CisgKiBAUk9NX0NMVVQwOiBNYWNpbnRvc2ggQ0xVVAorICogQFJPTV9DTFVUMTogQ0xVVCBmcm9tIERNMjcwIGFuZCBwcmlvciBkZXZpY2VzCisgKgorICogRGVzY3JpcHRpb246CisgKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgUk9NIENvbG9yIExvb2t1cCBUYWJsZSAoQ0xVVCkgb3B0aW9ucy4KKyAqLworZW51bSBvc2Rfcm9tX2NsdXQgeworCVJPTV9DTFVUMCwKKwlST01fQ0xVVDEsCit9OworCisvKioKKyAqIGVudW0gb3NkX2JsZW5kaW5nX2ZhY3RvcgorICogQE9TRF8wX1ZJRF84OiBPU0QgcGl4ZWxzIGFyZSBmdWxseSB0cmFuc3BhcmVudAorICogQE9TRF8xX1ZJRF83OiBPU0QgcGl4ZWxzIGNvbnRyaWJ1dGUgMS84LCB2aWRlbyBwaXhlbHMgY29udHJpYnV0ZSA3LzgKKyAqIEBPU0RfMl9WSURfNjogT1NEIHBpeGVscyBjb250cmlidXRlIDIvOCwgdmlkZW8gcGl4ZWxzIGNvbnRyaWJ1dGUgNi84CisgKiBAT1NEXzNfVklEXzU6IE9TRCBwaXhlbHMgY29udHJpYnV0ZSAzLzgsIHZpZGVvIHBpeGVscyBjb250cmlidXRlIDUvOAorICogQE9TRF80X1ZJRF80OiBPU0QgcGl4ZWxzIGNvbnRyaWJ1dGUgNC84LCB2aWRlbyBwaXhlbHMgY29udHJpYnV0ZSA0LzgKKyAqIEBPU0RfNV9WSURfMzogT1NEIHBpeGVscyBjb250cmlidXRlIDUvOCwgdmlkZW8gcGl4ZWxzIGNvbnRyaWJ1dGUgMy84CisgKiBAT1NEXzZfVklEXzI6IE9TRCBwaXhlbHMgY29udHJpYnV0ZSA2LzgsIHZpZGVvIHBpeGVscyBjb250cmlidXRlIDIvOAorICogQE9TRF84X1ZJRF8wOiBPU0QgcGl4ZWxzIGFyZSBmdWxseSBvcGFxdWUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFuIGVudW1lcmF0aW9uIG9mIHRoZSBEYVZpbmNpIHBpeGVsIGJsZW5kaW5nIGZhY3RvciBvcHRpb25zLgorICovCitlbnVtIG9zZF9ibGVuZGluZ19mYWN0b3IgeworCU9TRF8wX1ZJRF84LAorCU9TRF8xX1ZJRF83LAorCU9TRF8yX1ZJRF82LAorCU9TRF8zX1ZJRF81LAorCU9TRF80X1ZJRF80LAorCU9TRF81X1ZJRF8zLAorCU9TRF82X1ZJRF8yLAorCU9TRF84X1ZJRF8wLAorfTsKKworLyoqCisgKiBlbnVtIG9zZF9ibGlua19pbnRlcnZhbAorICogQEJMSU5LX1gxOiBibGluayBpbnRlcnZhbCBpcyAxIHZlcnRpY2FsIHJlZnJlc2ggY3ljbGUKKyAqIEBCTElOS19YMjogYmxpbmsgaW50ZXJ2YWwgaXMgMiB2ZXJ0aWNhbCByZWZyZXNoIGN5Y2xlcworICogQEJMSU5LX1gzOiBibGluayBpbnRlcnZhbCBpcyAzIHZlcnRpY2FsIHJlZnJlc2ggY3ljbGVzCisgKiBAQkxJTktfWDQ6IGJsaW5rIGludGVydmFsIGlzIDQgdmVydGljYWwgcmVmcmVzaCBjeWNsZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFuIGVudW1lcmF0aW9uIG9mIHRoZSBEYVZpbmNpIHBpeGVsIGJsaW5raW5nIGludGVydmFsIG9wdGlvbnMuCisgKi8KK2VudW0gb3NkX2JsaW5rX2ludGVydmFsIHsKKwlCTElOS19YMSwKKwlCTElOS19YMiwKKwlCTElOS19YMywKKwlCTElOS19YNCwKK307CisKKy8qKgorICogZW51bSBvc2RfY3Vyc29yX2hfd2lkdGgKKyAqIEBIX1dJRFRIXzE6IGhvcml6b250YWwgbGluZSB3aWR0aCBpcyAxIHBpeGVsCisgKiBASF9XSURUSF80OiBob3Jpem9udGFsIGxpbmUgd2lkdGggaXMgNCBwaXhlbHMKKyAqIEBIX1dJRFRIXzg6IGhvcml6b250YWwgbGluZSB3aWR0aCBpcyA4IHBpeGVscworICogQEhfV0lEVEhfMTI6IGhvcml6b250YWwgbGluZSB3aWR0aCBpcyAxMiBwaXhlbHMKKyAqIEBIX1dJRFRIXzE2OiBob3Jpem9udGFsIGxpbmUgd2lkdGggaXMgMTYgcGl4ZWxzCisgKiBASF9XSURUSF8yMDogaG9yaXpvbnRhbCBsaW5lIHdpZHRoIGlzIDIwIHBpeGVscworICogQEhfV0lEVEhfMjQ6IGhvcml6b250YWwgbGluZSB3aWR0aCBpcyAyNCBwaXhlbHMKKyAqIEBIX1dJRFRIXzI4OiBob3Jpem9udGFsIGxpbmUgd2lkdGggaXMgMjggcGl4ZWxzCisgKi8KK2VudW0gb3NkX2N1cnNvcl9oX3dpZHRoIHsKKwlIX1dJRFRIXzEsCisJSF9XSURUSF80LAorCUhfV0lEVEhfOCwKKwlIX1dJRFRIXzEyLAorCUhfV0lEVEhfMTYsCisJSF9XSURUSF8yMCwKKwlIX1dJRFRIXzI0LAorCUhfV0lEVEhfMjgsCit9OworCisvKioKKyAqIGVudW0gZGF2aW5jaV9jdXJzb3Jfdl93aWR0aAorICogQFZfV0lEVEhfMTogdmVydGljYWwgbGluZSB3aWR0aCBpcyAxIGxpbmUKKyAqIEBWX1dJRFRIXzI6IHZlcnRpY2FsIGxpbmUgd2lkdGggaXMgMiBsaW5lcworICogQFZfV0lEVEhfNDogdmVydGljYWwgbGluZSB3aWR0aCBpcyA0IGxpbmVzCisgKiBAVl9XSURUSF82OiB2ZXJ0aWNhbCBsaW5lIHdpZHRoIGlzIDYgbGluZXMKKyAqIEBWX1dJRFRIXzg6IHZlcnRpY2FsIGxpbmUgd2lkdGggaXMgOCBsaW5lcworICogQFZfV0lEVEhfMTA6IHZlcnRpY2FsIGxpbmUgd2lkdGggaXMgMTAgbGluZXMKKyAqIEBWX1dJRFRIXzEyOiB2ZXJ0aWNhbCBsaW5lIHdpZHRoIGlzIDEyIGxpbmVzCisgKiBAVl9XSURUSF8xNDogdmVydGljYWwgbGluZSB3aWR0aCBpcyAxNCBsaW5lcworICovCitlbnVtIG9zZF9jdXJzb3Jfdl93aWR0aCB7CisJVl9XSURUSF8xLAorCVZfV0lEVEhfMiwKKwlWX1dJRFRIXzQsCisJVl9XSURUSF82LAorCVZfV0lEVEhfOCwKKwlWX1dJRFRIXzEwLAorCVZfV0lEVEhfMTIsCisJVl9XSURUSF8xNCwKK307CisKKy8qKgorICogc3RydWN0IG9zZF9jdXJzb3JfY29uZmlnCisgKiBAeHNpemU6IGhvcml6b250YWwgc2l6ZSBpbiBwaXhlbHMKKyAqIEB5c2l6ZTogdmVydGljYWwgc2l6ZSBpbiBsaW5lcworICogQHhwb3M6IGhvcml6b250YWwgb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGRpc3BsYXkKKyAqIEB5cG9zOiB2ZXJ0aWNhbCBvZmZzZXQgaW4gbGluZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBkaXNwbGF5CisgKiBAaW50ZXJsYWNlZDogTm9uLXplcm8gaWYgdGhlIGRpc3BsYXkgaXMgaW50ZXJsYWNlZCwgb3IgemVybyBvdGhlcndpc2UKKyAqIEBoX3dpZHRoOiBob3Jpem9udGFsIGxpbmUgd2lkdGgKKyAqIEB2X3dpZHRoOiB2ZXJ0aWNhbCBsaW5lIHdpZHRoCisgKiBAY2x1dDogdGhlIENMVVQgc2VsZWN0b3IgKFJPTSBvciBSQU0pIGZvciB0aGUgY3Vyc29yIGNvbG9yCisgKiBAY2x1dF9pbmRleDogYW4gaW5kZXggaW50byB0aGUgQ0xVVCBmb3IgdGhlIGN1cnNvciBjb2xvcgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIG9mIHRoZSBoYXJkd2FyZQorICogcmVjdGFuZ3VsYXIgY3Vyc29yLgorICovCitzdHJ1Y3Qgb3NkX2N1cnNvcl9jb25maWcgeworCXVuc2lnbmVkIHhzaXplOworCXVuc2lnbmVkIHlzaXplOworCXVuc2lnbmVkIHhwb3M7CisJdW5zaWduZWQgeXBvczsKKwlpbnQgaW50ZXJsYWNlZDsKKwllbnVtIG9zZF9jdXJzb3JfaF93aWR0aCBoX3dpZHRoOworCWVudW0gb3NkX2N1cnNvcl92X3dpZHRoIHZfd2lkdGg7CisJZW51bSBvc2RfY2x1dCBjbHV0OworCXVuc2lnbmVkIGNoYXIgY2x1dF9pbmRleDsKK307CisKKy8qKgorICogc3RydWN0IG9zZF9sYXllcl9jb25maWcKKyAqIEBwaXhmbXQ6IHBpeGVsIGZvcm1hdAorICogQGxpbmVfbGVuZ3RoOiBvZmZzZXQgaW4gYnl0ZXMgYmV0d2VlbiBzdGFydCBvZiBlYWNoIGxpbmUgaW4gbWVtb3J5CisgKiBAeHNpemU6IG51bWJlciBvZiBob3Jpem9udGFsIHBpeGVscyBkaXNwbGF5ZWQgcGVyIGxpbmUKKyAqIEB5c2l6ZTogbnVtYmVyIG9mIGxpbmVzIGRpc3BsYXllZAorICogQHhwb3M6IGhvcml6b250YWwgb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGRpc3BsYXkKKyAqIEB5cG9zOiB2ZXJ0aWNhbCBvZmZzZXQgaW4gbGluZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBkaXNwbGF5CisgKiBAaW50ZXJsYWNlZDogTm9uLXplcm8gaWYgdGhlIGRpc3BsYXkgaXMgaW50ZXJsYWNlZCwgb3IgemVybyBvdGhlcndpc2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBvZiBhbiBPbi1TY3JlZW4gRGlzcGxheQorICogKE9TRCkgb3IgdmlkZW8gbGF5ZXIgcmVsYXRlZCB0byBob3cgdGhlIGltYWdlIGlzIHN0b3JlZCBpbiBtZW1vcnkuCisgKiBAbGluZV9sZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBjYWNoZSBsaW5lIHNpemUgKDMyIGJ5dGVzKS4KKyAqLworc3RydWN0IG9zZF9sYXllcl9jb25maWcgeworCWVudW0gb3NkX3BpeF9mb3JtYXQgcGl4Zm10OworCXVuc2lnbmVkIGxpbmVfbGVuZ3RoOworCXVuc2lnbmVkIHhzaXplOworCXVuc2lnbmVkIHlzaXplOworCXVuc2lnbmVkIHhwb3M7CisJdW5zaWduZWQgeXBvczsKKwlpbnQgaW50ZXJsYWNlZDsKK307CisKKy8qIHBhcmFtZXRlcnMgdGhhdCBhcHBseSBvbiBhIHBlci13aW5kb3cgKE9TRCBvciB2aWRlbykgYmFzaXMgKi8KK3N0cnVjdCBvc2Rfd2luZG93X3N0YXRlIHsKKwlpbnQgaXNfYWxsb2NhdGVkOworCWludCBpc19lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgZmJfYmFzZV9waHlzOworCWVudW0gb3NkX3pvb21fZmFjdG9yIGhfem9vbTsKKwllbnVtIG9zZF96b29tX2ZhY3RvciB2X3pvb207CisJc3RydWN0IG9zZF9sYXllcl9jb25maWcgbGNvbmZpZzsKK307CisKKy8qIHBhcmFtZXRlcnMgdGhhdCBhcHBseSBvbiBhIHBlci1PU0Qtd2luZG93IGJhc2lzICovCitzdHJ1Y3Qgb3NkX29zZHdpbl9zdGF0ZSB7CisJZW51bSBvc2RfY2x1dCBjbHV0OworCWVudW0gb3NkX2JsZW5kaW5nX2ZhY3RvciBibGVuZDsKKwlpbnQgY29sb3JrZXlfYmxlbmRpbmc7CisJdW5zaWduZWQgY29sb3JrZXk7CisJaW50IHJlYzYwMV9hdHRlbnVhdGlvbjsKKwkvKiBpbmRleCBpcyBwaXhlbCB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgcGFsZXR0ZV9tYXBbMTZdOworfTsKKworLyogaGFyZHdhcmUgcmVjdGFuZ3VsYXIgY3Vyc29yIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBvc2RfY3Vyc29yX3N0YXRlIHsKKwlpbnQgaXNfZW5hYmxlZDsKKwlzdHJ1Y3Qgb3NkX2N1cnNvcl9jb25maWcgY29uZmlnOworfTsKKworc3RydWN0IG9zZF9zdGF0ZTsKKworc3RydWN0IHZwYmVfb3NkX29wcyB7CisJaW50ICgqaW5pdGlhbGl6ZSkoc3RydWN0IG9zZF9zdGF0ZSAqc2QpOworCWludCAoKnJlcXVlc3RfbGF5ZXIpKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllcik7CisJdm9pZCAoKnJlbGVhc2VfbGF5ZXIpKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllcik7CisJaW50ICgqZW5hYmxlX2xheWVyKShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIsCisJCQkgICAgaW50IG90aGVyd2luKTsKKwl2b2lkICgqZGlzYWJsZV9sYXllcikoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyKTsKKwlpbnQgKCpzZXRfbGF5ZXJfY29uZmlnKShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIsCisJCQkJc3RydWN0IG9zZF9sYXllcl9jb25maWcgKmxjb25maWcpOworCXZvaWQgKCpnZXRfbGF5ZXJfY29uZmlnKShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwgZW51bSBvc2RfbGF5ZXIgbGF5ZXIsCisJCQkJIHN0cnVjdCBvc2RfbGF5ZXJfY29uZmlnICpsY29uZmlnKTsKKwl2b2lkICgqc3RhcnRfbGF5ZXIpKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBlbnVtIG9zZF9sYXllciBsYXllciwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGZiX2Jhc2VfcGh5cywKKwkJCSAgICB1bnNpZ25lZCBsb25nIGNiY3Jfb2ZzdCk7CisJdm9pZCAoKnNldF9sZWZ0X21hcmdpbikoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiB2YWwpOworCXZvaWQgKCpzZXRfdG9wX21hcmdpbikoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIHUzMiB2YWwpOworCXZvaWQgKCpzZXRfaW50ZXJwb2xhdGlvbl9maWx0ZXIpKHN0cnVjdCBvc2Rfc3RhdGUgKnNkLCBpbnQgZmlsdGVyKTsKKwlpbnQgKCpzZXRfdmlkX2V4cGFuc2lvbikoc3RydWN0IG9zZF9zdGF0ZSAqc2QsCisJCQkJCWVudW0gb3NkX2hfZXhwX3JhdGlvIGhfZXhwLAorCQkJCQllbnVtIG9zZF92X2V4cF9yYXRpbyB2X2V4cCk7CisJdm9pZCAoKmdldF92aWRfZXhwYW5zaW9uKShzdHJ1Y3Qgb3NkX3N0YXRlICpzZCwKKwkJCQkJZW51bSBvc2RfaF9leHBfcmF0aW8gKmhfZXhwLAorCQkJCQllbnVtIG9zZF92X2V4cF9yYXRpbyAqdl9leHApOworCXZvaWQgKCpzZXRfem9vbSkoc3RydWN0IG9zZF9zdGF0ZSAqc2QsIGVudW0gb3NkX2xheWVyIGxheWVyLAorCQkJCWVudW0gb3NkX3pvb21fZmFjdG9yIGhfem9vbSwKKwkJCQllbnVtIG9zZF96b29tX2ZhY3RvciB2X3pvb20pOworfTsKKworc3RydWN0IG9zZF9zdGF0ZSB7CisJZW51bSB2cGJlX3ZlcnNpb24gdnBiZV90eXBlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZG1hX2FkZHJfdCBvc2RfYmFzZV9waHlzOworCXVuc2lnbmVkIGxvbmcgb3NkX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBvc2Rfc2l6ZTsKKwkvKiAxLS0+dGhlIGlzciB3aWxsIHRvZ2dsZSB0aGUgVklEMCBwaW5nLXBvbmcgYnVmZmVyICovCisJaW50IHBpbmdwb25nOworCWludCBpbnRlcnBvbGF0aW9uX2ZpbHRlcjsKKwlpbnQgZmllbGRfaW52ZXJzaW9uOworCWVudW0gb3NkX2hfZXhwX3JhdGlvIG9zZF9oX2V4cDsKKwllbnVtIG9zZF92X2V4cF9yYXRpbyBvc2Rfdl9leHA7CisJZW51bSBvc2RfaF9leHBfcmF0aW8gdmlkX2hfZXhwOworCWVudW0gb3NkX3ZfZXhwX3JhdGlvIHZpZF92X2V4cDsKKwllbnVtIG9zZF9jbHV0IGJhY2tnX2NsdXQ7CisJdW5zaWduZWQgYmFja2dfY2x1dF9pbmRleDsKKwllbnVtIG9zZF9yb21fY2x1dCByb21fY2x1dDsKKwlpbnQgaXNfYmxpbmtpbmc7CisJLyogYXR0cmlidXRlIHdpbmRvdyBibGlua2luZyBlbmFibGVkICovCisJZW51bSBvc2RfYmxpbmtfaW50ZXJ2YWwgYmxpbms7CisJLyogWUNiQ3JJIG9yIFlDckNiSSAqLworCWVudW0gb3NkX3BpeF9mb3JtYXQgeWNfcGl4Zm10OworCS8qIGNvbHVtbnMgYXJlIFksIENiLCBDciAqLworCXVuc2lnbmVkIGNoYXIgY2x1dF9yYW1bMjU2XVszXTsKKwlzdHJ1Y3Qgb3NkX2N1cnNvcl9zdGF0ZSBjdXJzb3I7CisJLyogT1NEMCwgVklEMCwgT1NEMSwgVklEMSAqLworCXN0cnVjdCBvc2Rfd2luZG93X3N0YXRlIHdpbls0XTsKKwkvKiBPU0QwLCBPU0QxICovCisJc3RydWN0IG9zZF9vc2R3aW5fc3RhdGUgb3Nkd2luWzJdOworCS8qIE9TRCBkZXZpY2UgT3BlcmF0aW9ucyAqLworCXN0cnVjdCB2cGJlX29zZF9vcHMgb3BzOworfTsKKworc3RydWN0IG9zZF9wbGF0Zm9ybV9kYXRhIHsKKwllbnVtIHZwYmVfdmVyc2lvbiB2cGJlX3R5cGU7CisJaW50ICBmaWVsZF9pbnZfd2FfZW5hYmxlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV90eXBlcy5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjdmNTUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwYmVfdHlwZXMuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfVlBCRV9UWVBFU19ICisjZGVmaW5lIF9WUEJFX1RZUEVTX0gKKworZW51bSB2cGJlX3ZlcnNpb24geworCVZQQkVfVkVSU0lPTl8xID0gMSwKKwlWUEJFX1ZFUlNJT05fMiwKKwlWUEJFX1ZFUlNJT05fMywKK307CisKKy8qIHZwYmVfdGltaW5nX3R5cGUgLSBUaW1pbmcgdHlwZXMgdXNlZCBpbiB2cGJlIGRldmljZSAqLworZW51bSB2cGJlX2VuY190aW1pbmdzX3R5cGUgeworCVZQQkVfRU5DX1NURCA9IDB4MSwKKwlWUEJFX0VOQ19EVl9QUkVTRVQgPSAweDIsCisJVlBCRV9FTkNfQ1VTVE9NX1RJTUlOR1MgPSAweDQsCisJLyogVXNlZCB3aGVuIHNldCB0aW1pbmdzIHRocm91Z2ggRkIgZGV2aWNlIGludGVyZmFjZSAqLworCVZQQkVfRU5DX1RJTUlOR1NfSU5WQUxJRCA9IDB4OCwKK307CisKK3VuaW9uIHZwYmVfdGltaW5ncyB7CisJdjRsMl9zdGRfaWQgc3RkX2lkOworCXVuc2lnbmVkIGludCBkdl9wcmVzZXQ7Cit9OworCisvKgorICogc3RydWN0IHZwYmVfZW5jX21vZGVfaW5mbworICogQG5hbWU6IHB0ciB0byBuYW1lIHN0cmluZyBvZiB0aGUgc3RhbmRhcmQsICJOVFNDIiwgIlBBTCIgZXRjCisgKiBAc3RkOiBzdGFuZGFyZCBvciBub24tc3RhbmRhcmQgbW9kZS4gMSAtIHN0YW5kYXJkLCAwIC0gbm9uc3RhbmRhcmQKKyAqIEBpbnRlcmxhY2VkOiAxIC0gaW50ZXJsYWNlZCwgMCAtIG5vbiBpbnRlcmxhY2VkL3Byb2dyZXNzaXZlCisgKiBAeHJlczogeCBvciBob3Jpem9udGFsIHJlc29sdXRpb24gb2YgdGhlIGRpc3BsYXkKKyAqIEB5cmVzOiB5IG9yIHZlcnRpY2FsIHJlc29sdXRpb24gb2YgdGhlIGRpc3BsYXkKKyAqIEBmcHM6IGZyYW1lIHBlciBzZWNvbmQKKyAqIEBsZWZ0X21hcmdpbjogbGVmdCBtYXJnaW4gb2YgdGhlIGRpc3BsYXkKKyAqIEByaWdodF9tYXJnaW46IHJpZ2h0IG1hcmdpbiBvZiB0aGUgZGlzcGxheQorICogQHVwcGVyX21hcmdpbjogdXBwZXIgbWFyZ2luIG9mIHRoZSBkaXNwbGF5CisgKiBAbG93ZXJfbWFyZ2luOiBsb3dlciBtYXJnaW4gb2YgdGhlIGRpc3BsYXkKKyAqIEBoc3luY19sZW46IGgtc3luYyBsZW5ndGgKKyAqIEB2c3luY19sZW46IHYtc3luYyBsZW5ndGgKKyAqIEBmbGFnczogYml0IGZpZWxkOiBiaXQgdXNhZ2UgaXMgZG9jdW1lbnRlZCBiZWxvdworICoKKyAqIERlc2NyaXB0aW9uOgorICogIFN0cnVjdHVyZSBob2xkaW5nIHRpbWluZyBhbmQgcmVzb2x1dGlvbiBpbmZvcm1hdGlvbiBvZiBhIHN0YW5kYXJkLgorICogVXNlZCBieSB2cGJlX2RldmljZSB0byBzZXQgcmVxdWlyZWQgbm9uLXN0YW5kYXJkIHRpbWluZyBpbiB0aGUKKyAqIHZlbmMgd2hlbiBsY2QgY29udHJvbGxlciBvdXRwdXQgaXMgY29ubmVjdGVkIHRvIGEgZXh0ZXJuYWwgZW5jb2Rlci4KKyAqIEEgdGFibGUgb2YgdGltaW5ncyBpcyBtYWludGFpbmVkIGluIHZwYmUgZGV2aWNlIHRvIHNldCB0aGlzIGluCisgKiB2ZW5jIHdoZW4gZXh0ZXJuYWwgZW5jb2RlciBpcyBjb25uZWN0ZWQgdG8gbGNkIGNvbnRyb2xsZXIgb3V0cHV0LgorICogRW5jb2RlciBtYXkgcHJvdmlkZSBhIGdfZHZfdGltaW5ncygpIEFQSSB0byBvdmVycmlkZSB0aGVzZSB2YWx1ZXMKKyAqIGFzIG5lZWRlZC4KKyAqCisgKiAgTm90ZXMKKyAqICAtLS0tLS0KKyAqICBpZl90eXBlIHNob3VsZCBiZSB1c2VkIG9ubHkgYnkgZW5jb2RlciBtYW5hZ2VyIGFuZCBlbmNvZGVyLgorICogIGZsYWdzIHVzYWdlCisgKiAgICAgYjAgKExTQikgLSBoc3luYyBwb2xhcml0eSwgMCAtIG5lZ2F0aXZlLCAxIC0gcG9zaXRpdmUKKyAqICAgICBiMSAgICAgICAtIHZzeW5jIHBvbGFyaXR5LCAwIC0gbmVnYXRpdmUsIDEgLSBwb3NpdGl2ZQorICogICAgIGIyICAgICAgIC0gZmllbGQgaWQgcG9sYXJpdHksIDAgLSBuZWdhdGl2ZSwgMSAgLSBwb3NpdGl2ZQorICovCitzdHJ1Y3QgdnBiZV9lbmNfbW9kZV9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyICpuYW1lOworCWVudW0gdnBiZV9lbmNfdGltaW5nc190eXBlIHRpbWluZ3NfdHlwZTsKKwl1bmlvbiB2cGJlX3RpbWluZ3MgdGltaW5nczsKKwl1bnNpZ25lZCBpbnQgaW50ZXJsYWNlZDsKKwl1bnNpZ25lZCBpbnQgeHJlczsKKwl1bnNpZ25lZCBpbnQgeXJlczsKKwlzdHJ1Y3QgdjRsMl9mcmFjdCBhc3BlY3Q7CisJc3RydWN0IHY0bDJfZnJhY3QgZnBzOworCXVuc2lnbmVkIGludCBsZWZ0X21hcmdpbjsKKwl1bnNpZ25lZCBpbnQgcmlnaHRfbWFyZ2luOworCXVuc2lnbmVkIGludCB1cHBlcl9tYXJnaW47CisJdW5zaWduZWQgaW50IGxvd2VyX21hcmdpbjsKKwl1bnNpZ25lZCBpbnQgaHN5bmNfbGVuOworCXVuc2lnbmVkIGludCB2c3luY19sZW47CisJdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV92ZW5jLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBiZV92ZW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2YzIwNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGJlX3ZlbmMuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfVlBCRV9WRU5DX0gKKyNkZWZpbmUgX1ZQQkVfVkVOQ19ICisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBiZV90eXBlcy5oPgorCisjZGVmaW5lIFZQQkVfVkVOQ19TVUJERVZfTkFNRSAidnBiZS12ZW5jIgorCisvKiB2ZW5jIGV2ZW50cyAqLworI2RlZmluZSBWRU5DX0VORF9PRl9GUkFNRQlCSVQoMCkKKyNkZWZpbmUgVkVOQ19GSVJTVF9GSUVMRAlCSVQoMSkKKyNkZWZpbmUgVkVOQ19TRUNPTkRfRklFTEQJQklUKDIpCisKK3N0cnVjdCB2ZW5jX3BsYXRmb3JtX2RhdGEgeworCWVudW0gdnBiZV92ZXJzaW9uIHZlbmNfdHlwZTsKKwlpbnQgKCpzZXR1cF9jbG9jaykoZW51bSB2cGJlX2VuY190aW1pbmdzX3R5cGUgdHlwZSwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlKTsKKwkvKiBOdW1iZXIgb2YgTENEIG91dHB1dHMgc3VwcG9ydGVkICovCisJaW50IG51bV9sY2Rfb3V0cHV0czsKK307CisKK2VudW0gdmVuY19pb2N0bHMgeworCVZFTkNfR0VUX0ZMRCA9IDEsCit9OworCisvKiBleHBvcnRlZCBmdW5jdGlvbnMgKi8KK3N0cnVjdCB2NGwyX3N1YmRldiAqdmVuY19zdWJfZGV2X2luaXQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJY29uc3QgY2hhciAqdmVuY19uYW1lKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9tbXAtY2FtZXJhLmggYi9pbmNsdWRlL21lZGlhL21tcC1jYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjExOTYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9tbXAtY2FtZXJhLmgKQEAgLTAsMCArMSw5IEBACisvKgorICogSW5mb3JtYXRpb24gZm9yIHRoZSBNYXJ2ZWxsIEFybWFkYSBNTVAgY2FtZXJhCisgKi8KKworc3RydWN0IG1tcF9jYW1lcmFfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaTJjX2RldmljZTsKKwlpbnQgc2Vuc29yX3Bvd2VyX2dwaW87CisJaW50IHNlbnNvcl9yZXNldF9ncGlvOworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmggYi9pbmNsdWRlL21lZGlhL292NzY3MC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5oCnJlbmFtZSB0byBpbmNsdWRlL21lZGlhL292NzY3MC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3JjLWNvcmUuaCBiL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oCmluZGV4IDYwNTM2YzcuLmIxZjE5YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvcmMtY29yZS5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlpbnQJCQkJKCpzX3R4X2NhcnJpZXIpKHN0cnVjdCByY19kZXYgKmRldiwgdTMyIGNhcnJpZXIpOwogCWludAkJCQkoKnNfdHhfZHV0eV9jeWNsZSkoc3RydWN0IHJjX2RldiAqZGV2LCB1MzIgZHV0eV9jeWNsZSk7CiAJaW50CQkJCSgqc19yeF9jYXJyaWVyX3JhbmdlKShzdHJ1Y3QgcmNfZGV2ICpkZXYsIHUzMiBtaW4sIHUzMiBtYXgpOwotCWludAkJCQkoKnR4X2lyKShzdHJ1Y3QgcmNfZGV2ICpkZXYsIGludCAqdHhidWYsIHUzMiBuKTsKKwlpbnQJCQkJKCp0eF9pcikoc3RydWN0IHJjX2RldiAqZGV2LCB1bnNpZ25lZCAqdHhidWYsIHVuc2lnbmVkIG4pOwogCXZvaWQJCQkJKCpzX2lkbGUpKHN0cnVjdCByY19kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogCWludAkJCQkoKnNfbGVhcm5pbmdfbW9kZSkoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgZW5hYmxlKTsKIAlpbnQJCQkJKCpzX2NhcnJpZXJfcmVwb3J0KSAoc3RydWN0IHJjX2RldiAqZGV2LCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvcmMtbWFwLmggYi9pbmNsdWRlL21lZGlhL3JjLW1hcC5oCmluZGV4IDRlMTQwOWUuLjE3Yzk3NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvcmMtbWFwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaApAQCAtMTgsMTIgKzE4LDEzIEBACiAjZGVmaW5lIFJDX1RZUEVfSlZDCSgxICA8PCAzKQkvKiBKVkMgcHJvdG9jb2wgKi8KICNkZWZpbmUgUkNfVFlQRV9TT05ZCSgxICA8PCA0KQkvKiBTb255MTIvMTUvMjAgcHJvdG9jb2wgKi8KICNkZWZpbmUgUkNfVFlQRV9SQzVfU1oJKDEgIDw8IDUpCS8qIFJDNSB2YXJpYW50IHVzZWQgYnkgU3RyZWFtemFwICovCisjZGVmaW5lIFJDX1RZUEVfTUNFX0tCRAkoMSAgPDwgMjkpCS8qIFJDNi1pc2ggTUNFIGtleWJvYXJkL21vdXNlICovCiAjZGVmaW5lIFJDX1RZUEVfTElSQwkoMSAgPDwgMzApCS8qIFBhc3MgcmF3IElSIHRvIGxpcmMgdXNlcnNwYWNlICovCiAjZGVmaW5lIFJDX1RZUEVfT1RIRVIJKDF1IDw8IDMxKQogCiAjZGVmaW5lIFJDX1RZUEVfQUxMIChSQ19UWVBFX1JDNSB8IFJDX1RZUEVfTkVDICB8IFJDX1RZUEVfUkM2ICB8IFwKIAkJICAgICBSQ19UWVBFX0pWQyB8IFJDX1RZUEVfU09OWSB8IFJDX1RZUEVfTElSQyB8IFwKLQkJICAgICBSQ19UWVBFX1JDNV9TWiB8IFJDX1RZUEVfT1RIRVIpCisJCSAgICAgUkNfVFlQRV9SQzVfU1ogfCBSQ19UWVBFX01DRV9LQkQgfCBSQ19UWVBFX09USEVSKQogCiBzdHJ1Y3QgcmNfbWFwX3RhYmxlIHsKIAl1MzIJc2NhbmNvZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaCBiL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oCmluZGV4IDgwMzQ2YTYuLjQ4NDEzYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oCkBAIC03LDEwICs3LDE4IEBACiAjZGVmaW5lIFNIX0NFVV9GTEFHX1ZTWU5DX0xPVwkJKDEgPDwgMykgLyogZGVmYXVsdCBIaWdoIGlmIHBvc3NpYmxlICovCiAKIHN0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgcmVzb3VyY2U7CisKK3N0cnVjdCBzaF9tb2JpbGVfY2V1X2NvbXBhbmlvbiB7CisJdTMyCQludW1fcmVzb3VyY2VzOworCXN0cnVjdCByZXNvdXJjZQkqcmVzb3VyY2U7CisJaW50CQlpZDsKKwl2b2lkCQkqcGxhdGZvcm1fZGF0YTsKK307CiAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRldmljZSAqY3NpMl9kZXY7CisJc3RydWN0IHNoX21vYmlsZV9jZXVfY29tcGFuaW9uICpjc2kyOwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9DRVVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jc2kyLmggYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jc2kyLmgKaW5kZXggNGQyNjE1MS4uYzU4NmM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY3NpMi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NzaTIuaApAQCAtMTEsNiArMTEsOCBAQAogI2lmbmRlZiBTSF9NSVBJX0NTSQogI2RlZmluZSBTSF9NSVBJX0NTSQogCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCiBlbnVtIHNoX2NzaTJfcGh5IHsKIAlTSF9DU0kyX1BIWV9NQUlOLAogCVNIX0NTSTJfUEhZX1NVQiwKQEAgLTMzLDE0ICszNSwxNCBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CS8qIGNsaWVudCBwbGF0Zm9ybSBkZXZpY2UgKi8KIH07CiAKK3N0cnVjdCB2NGwyX2RldmljZTsKKwogc3RydWN0IHNoX2NzaTJfcGRhdGEgewogCWVudW0gc2hfY3NpMl90eXBlIHR5cGU7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXN0cnVjdCBzaF9jc2kyX2NsaWVudF9jb25maWcgKmNsaWVudHM7CiAJaW50IG51bV9jbGllbnRzOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlOwotc3RydWN0IHY0bDJfZGV2aWNlOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggMjM4YmQzMy4uNzU4Mjk1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTIwLDE0ICsyMCwxNSBAQAogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBzb2NfY2FtZXJhX2J1c190eXBlOwotCiBzdHJ1Y3QgZmlsZTsKK3N0cnVjdCBzb2NfY2FtZXJhX2xpbms7CiAKIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBkZXZpY2UgZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmxpbms7CiAJc3RydWN0IGRldmljZSAqcGRldjsJCS8qIFBsYXRmb3JtIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsJCS8qIENhbWVyYSBob3N0IGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgKmNvbnRyb2w7CQkvKiBFLmcuLCB0aGUgaTJjIGNsaWVudCAqLwogCXMzMiB1c2VyX3dpZHRoOwogCXMzMiB1c2VyX2hlaWdodDsKIAl1MzIgYnl0ZXNwZXJsaW5lOwkJLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCkBAIC02Niw4ICs2Nyw2IEBACiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50ICgqYWRkKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJdm9pZCAoKnJlbW92ZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBwbV9tZXNzYWdlX3QpOwotCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCS8qCiAJICogLmdldF9mb3JtYXRzKCkgaXMgY2FsbGVkIGZvciBlYWNoIGNsaWVudCBkZXZpY2UgZm9ybWF0LCBidXQKIAkgKiAucHV0X2Zvcm1hdHMoKSBpcyBvbmx5IGNhbGxlZCBvbmNlLiBGdXJ0aGVyLCBpZiBhbnkgb2YgdGhlIGNhbGxzIHRvCkBAIC0xMDksMTIgKzEwOCw2IEBACiAjZGVmaW5lIFNPQ0FNX1NFTlNPUl9JTlZFUlRfSFNZTkMJKDEgPDwgMikKICNkZWZpbmUgU09DQU1fU0VOU09SX0lOVkVSVF9WU1lOQwkoMSA8PCAzKQogI2RlZmluZSBTT0NBTV9TRU5TT1JfSU5WRVJUX0RBVEEJKDEgPDwgNCkKLSNkZWZpbmUgU09DQU1fTUlQSV8xTEFORQkJKDEgPDwgNSkKLSNkZWZpbmUgU09DQU1fTUlQSV8yTEFORQkJKDEgPDwgNikKLSNkZWZpbmUgU09DQU1fTUlQSV8zTEFORQkJKDEgPDwgNykKLSNkZWZpbmUgU09DQU1fTUlQSV80TEFORQkJKDEgPDwgOCkKLSNkZWZpbmUgU09DQU1fTUlQSQkoU09DQU1fTUlQSV8xTEFORSB8IFNPQ0FNX01JUElfMkxBTkUgfCBcCi0JCQlTT0NBTV9NSVBJXzNMQU5FIHwgU09DQU1fTUlQSV80TEFORSkKIAogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGE7CkBAIC0xMzQsMTEgKzEyNywxMSBAQAogCWludCBudW1fcmVndWxhdG9yczsKIAogCS8qCi0JICogRm9yIG5vbi1JMkMgZGV2aWNlcyBwbGF0Zm9ybSBwbGF0Zm9ybSBoYXMgdG8gcHJvdmlkZSBtZXRob2RzIHRvCi0JICogYWRkIGEgZGV2aWNlIHRvIHRoZSBzeXN0ZW0gYW5kIHRvIHJlbW92ZQorCSAqIEZvciBub24tSTJDIGRldmljZXMgcGxhdGZvcm0gaGFzIHRvIHByb3ZpZGUgbWV0aG9kcyB0byBhZGQgYSBkZXZpY2UKKwkgKiB0byB0aGUgc3lzdGVtIGFuZCB0byByZW1vdmUgaXQKIAkgKi8KLQlpbnQgKCphZGRfZGV2aWNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICosIHN0cnVjdCBkZXZpY2UgKik7Ci0Jdm9pZCAoKmRlbF9kZXZpY2UpKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CisJaW50ICgqYWRkX2RldmljZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworCXZvaWQgKCpkZWxfZGV2aWNlKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJLyogT3B0aW9uYWwgY2FsbGJhY2tzIHRvIHBvd2VyIG9uIG9yIG9mZiBhbmQgcmVzZXQgdGhlIHNlbnNvciAqLwogCWludCAoKnBvd2VyKShzdHJ1Y3QgZGV2aWNlICosIGludCk7CiAJaW50ICgqcmVzZXQpKHN0cnVjdCBkZXZpY2UgKik7CkBAIC0xNTIsMTIgKzE0NSw2IEBACiAJdm9pZCAoKmZyZWVfYnVzKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICopOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKnRvX3NvY19jYW1lcmFfZGV2KAotCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlLCBkZXYpOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKnRvX3NvY19jYW1lcmFfaG9zdCgKIAljb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xNjksMTMgKzE1NiwxMyBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICp0b19zb2NfY2FtZXJhX2xpbmsoCiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0JcmV0dXJuIGljZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIGljZC0+bGluazsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp0b19zb2NfY2FtZXJhX2NvbnRyb2woCiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0JcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmaWNkLT5kZXYpOworCXJldHVybiBpY2QtPmNvbnRyb2w7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHY0bDJfc3ViZGV2ICpzb2NfY2FtZXJhX3RvX3N1YmRldigKQEAgLTIwNywxMSArMTk0LDggQEAKIH07CiAKIHN0cnVjdCBzb2NfY2FtZXJhX29wcyB7Ci0JaW50ICgqc3VzcGVuZCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJdW5zaWduZWQgbG9uZyAoKnF1ZXJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKLQlpbnQgKCplbnVtX2lucHV0KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfaW5wdXQgKik7CiAJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjb250cm9sczsKIAlpbnQgbnVtX2NvbnRyb2xzOwogfTsKQEAgLTI3MCw2ICsyNTQsMTIgQEAKICNkZWZpbmUgU09DQU1fUENMS19TQU1QTEVfRkFMTElORwkoMSA8PCAxMykKICNkZWZpbmUgU09DQU1fREFUQV9BQ1RJVkVfSElHSAkJKDEgPDwgMTQpCiAjZGVmaW5lIFNPQ0FNX0RBVEFfQUNUSVZFX0xPVwkJKDEgPDwgMTUpCisjZGVmaW5lIFNPQ0FNX01JUElfMUxBTkUJCSgxIDw8IDE2KQorI2RlZmluZSBTT0NBTV9NSVBJXzJMQU5FCQkoMSA8PCAxNykKKyNkZWZpbmUgU09DQU1fTUlQSV8zTEFORQkJKDEgPDwgMTgpCisjZGVmaW5lIFNPQ0FNX01JUElfNExBTkUJCSgxIDw8IDE5KQorI2RlZmluZSBTT0NBTV9NSVBJCShTT0NBTV9NSVBJXzFMQU5FIHwgU09DQU1fTUlQSV8yTEFORSB8IFwKKwkJCVNPQ0FNX01JUElfM0xBTkUgfCBTT0NBTV9NSVBJXzRMQU5FKQogCiAjZGVmaW5lIFNPQ0FNX0RBVEFXSURUSF9NQVNLIChTT0NBTV9EQVRBV0lEVEhfNCB8IFNPQ0FNX0RBVEFXSURUSF84IHwgXAogCQkJICAgICAgU09DQU1fREFUQVdJRFRIXzkgfCBTT0NBTV9EQVRBV0lEVEhfMTAgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCmluZGV4IDZkN2E0ZmQuLjc0ZjBmYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCkBAIC0yMSw3ICsyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQ7CiAJdW5zaWduZWQgbG9uZyBidXNfcGFyYW07Ci0Jc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOwogCWludCAoKnNldF9jYXB0dXJlKShzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvLCBpbnQgZW5hYmxlKTsKIH07CiAKQEAgLTMwLDggKzMwLDcgQEAKIAkqcGRldiA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fYWRkKGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKLQkJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgaW5saW5lIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2FkZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoqcGRldiwKIAkJCQkJICBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpwbGluaywKIAkJCQkJICB2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqZGV2KSwKQEAgLTQwLDcgKzM5LDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICppbmZvID0gcGxpbmstPnByaXY7CiAJaW50IHJldDsKIAotCWlmIChpY2wgIT0gcGxpbmspCisJaWYgKGljZC0+bGluayAhPSBwbGluaykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKnBkZXYpCkBAIC01MCw3ICs0OSw3IEBACiAJaWYgKCEqcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpbmZvLT5kZXYgPSBkZXY7CisJaW5mby0+aWNkID0gaWNkOwogCiAJKCpwZGV2KS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvOwogCSgqcGRldiktPmRldi5yZWxlYXNlID0gcmVsZWFzZTsKQEAgLTU5LDE3ICs1OCwxNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCXBsYXRmb3JtX2RldmljZV9wdXQoKnBkZXYpOwogCQkqcGRldiA9IE5VTEw7Ci0JCWluZm8tPmRldiA9IE5VTEw7CisJCWluZm8tPmljZCA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNvY19jYW1lcmFfcGxhdGZvcm1fZGVsKGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2NfY2FtZXJhX3BsYXRmb3JtX2RlbChjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkJICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQkJICAgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfbGluayAqcGxpbmspCiB7Ci0JaWYgKGljbCAhPSBwbGluayB8fCAhcGRldikKKwlpZiAoaWNkLT5saW5rICE9IHBsaW5rIHx8ICFwZGV2KQogCQlyZXR1cm47CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdGltYl9yYWRpby5oIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKaW5kZXggYTU5YTg0OC4uYTQwYTZhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90aW1iX3JhZGlvLmgKQEAgLTIzLDEzICsyMyw4IEBACiAKIHN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgewogCWludCBpMmNfYWRhcHRlcjsgLyogSTJDIGFkYXB0ZXIgd2hlcmUgdGhlIHR1bmVyIGFuZCBkc3AgYXJlIGF0dGFjaGVkICovCi0Jc3RydWN0IHsKLQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvOwotCX0gdHVuZXI7Ci0Jc3RydWN0IHsKLQkJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7Ci0JCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbzsKLQl9IGRzcDsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKnR1bmVyOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZHNwOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggOTYzZTMzNC4uODljMjkwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTI3LDYgKzEyNyw4IEBACiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzMJNzgKICNkZWZpbmUgVFVORVJfUEhJTElQU19GTTEyMTZNSzUJCTc5CiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRlExMjE2TE1FX01LMwk4MAkvKiBBY3RpdmUgbG9vcHRocm91Z2gsIG5vIEZNICovCisjZGVmaW5lIFRVTkVSX1hDNDAwMAkJCTgxCS8qIFhjZWl2ZSBTaWxpY29uIFR1bmVyICovCisKICNkZWZpbmUgVFVORVJfUEFSVFNOSUNfUFRJXzVORjA1CTgxCiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfQ1UxMjE2TCAgICAgICAgICAgODIKICNkZWZpbmUgVFVORVJfTlhQX1REQTE4MjcxCQk4MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKaW5kZXggYjNlZGI2Ny4uNjNmZDlkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCkBAIC03Niw2ICs3Niw3IEBACiAJVjRMMl9JREVOVF9PVjY2NTAgPSAyNTgsCiAJVjRMMl9JREVOVF9PVjI2NDAgPSAyNTksCiAJVjRMMl9JREVOVF9PVjk3NDAgPSAyNjAsCisJVjRMMl9JREVOVF9PVjU2NDIgPSAyNjEsCiAKIAkvKiBtb2R1bGUgc2FhNzE0NjogcmVzZXJ2ZWQgcmFuZ2UgMzAwLTMwOSAqLwogCVY0TDJfSURFTlRfU0FBNzE0NiA9IDMwMCwKQEAgLTE4NSw4ICsxODYsOSBAQAogCS8qIG1vZHVsZSB3bTg3NzU6IGp1c3QgaWRlbnQgODc3NSAqLwogCVY0TDJfSURFTlRfV004Nzc1ID0gODc3NSwKIAotCS8qIG1vZHVsZSBjYWZlX2NjaWMsIGp1c3QgaWRlbnQgODgwMSAqLworCS8qIE1hcnZlbGwgY29udHJvbGxlcnMgc3RhcnRpbmcgYXQgODgwMSAqLwogCVY0TDJfSURFTlRfQ0FGRSA9IDg4MDEsCisJVjRMMl9JREVOVF9BUk1BREE2MTAgPSA4ODAyLAogCiAJLyogQUtNIEFLODgxMy9BSzg4MTQgKi8KIAlWNEwyX0lERU5UX0FLODgxMyA9IDg4MTMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY3RybHMuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCmluZGV4IDk3ZDA2MzguLjEzZmU0ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oCkBAIC0yNyw5ICsyNywxMiBAQAogCiAvKiBmb3J3YXJkIHJlZmVyZW5jZXMgKi8KIHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlcjsKK3N0cnVjdCB2NGwyX2N0cmxfaGVscGVyOwogc3RydWN0IHY0bDJfY3RybDsKIHN0cnVjdCB2aWRlb19kZXZpY2U7CiBzdHJ1Y3QgdjRsMl9zdWJkZXY7CitzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50Oworc3RydWN0IHY0bDJfZmg7CiAKIC8qKiBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAtIFRoZSBjb250cm9sIG9wZXJhdGlvbnMgdGhhdCB0aGUgZHJpdmVyIGhhcyB0byBwcm92aWRlLgogICAqIEBnX3ZvbGF0aWxlX2N0cmw6IEdldCBhIG5ldyB2YWx1ZSBmb3IgdGhpcyBjb250cm9sLiBHZW5lcmFsbHkgb25seSByZWxldmFudApAQCAtNTEsNiArNTQsNyBAQAogCiAvKiogc3RydWN0IHY0bDJfY3RybCAtIFRoZSBjb250cm9sIHN0cnVjdHVyZS4KICAgKiBAbm9kZToJVGhlIGxpc3Qgbm9kZS4KKyAgKiBAZXZfc3ViczoJVGhlIGxpc3Qgb2YgY29udHJvbCBldmVudCBzdWJzY3JpcHRpb25zLgogICAqIEBoYW5kbGVyOglUaGUgaGFuZGxlciB0aGF0IG93bnMgdGhlIGNvbnRyb2wuCiAgICogQGNsdXN0ZXI6CVBvaW50IHRvIHN0YXJ0IG9mIGNsdXN0ZXIgYXJyYXkuCiAgICogQG5jb250cm9sczoJTnVtYmVyIG9mIGNvbnRyb2xzIGluIGNsdXN0ZXIgYXJyYXkuCkBAIC02NSw2ICs2OSwxNSBAQAogICAqCQljb250cm9sJ3MgY3VycmVudCB2YWx1ZSBjYW5ub3QgYmUgY2FjaGVkIGFuZCBuZWVkcyB0byBiZQogICAqCQlyZXRyaWV2ZWQgdGhyb3VnaCB0aGUgZ192b2xhdGlsZV9jdHJsIG9wLiBEcml2ZXJzIGNhbiBzZXQKICAgKgkJdGhpcyBmbGFnLgorICAqIEBpc19hdXRvOiAgIElmIHNldCwgdGhlbiB0aGlzIGNvbnRyb2wgc2VsZWN0cyB3aGV0aGVyIHRoZSBvdGhlciBjbHVzdGVyCisgICoJCW1lbWJlcnMgYXJlIGluICdhdXRvbWF0aWMnIG1vZGUgb3IgJ21hbnVhbCcgbW9kZS4gVGhpcyBpcworICAqCQl1c2VkIGZvciBhdXRvZ2Fpbi9nYWluIHR5cGUgY2x1c3RlcnMuIERyaXZlcnMgc2hvdWxkIG5ldmVyCisgICoJCXNldCB0aGlzIGZsYWcgZGlyZWN0bHkuCisgICogQG1hbnVhbF9tb2RlX3ZhbHVlOiBJZiB0aGUgaXNfYXV0byBmbGFnIGlzIHNldCwgdGhlbiB0aGlzIGlzIHRoZSB2YWx1ZQorICAqCQlvZiB0aGUgYXV0byBjb250cm9sIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGF0IGNvbnRyb2wgaXMgaW4KKyAgKgkJbWFudWFsIG1vZGUuIFNvIGlmIHRoZSB2YWx1ZSBvZiB0aGUgYXV0byBjb250cm9sIGVxdWFscyB0aGlzCisgICoJCXZhbHVlLCB0aGVuIHRoZSB3aG9sZSBjbHVzdGVyIGlzIGluIG1hbnVhbCBtb2RlLiBEcml2ZXJzIHNob3VsZAorICAqCQluZXZlciBzZXQgdGhpcyBmbGFnIGRpcmVjdGx5LgogICAqIEBvcHM6CVRoZSBjb250cm9sIG9wcy4KICAgKiBAaWQ6CVRoZSBjb250cm9sIElELgogICAqIEBuYW1lOglUaGUgY29udHJvbCBuYW1lLgpAQCAtOTcsNiArMTEwLDcgQEAKIHN0cnVjdCB2NGwyX2N0cmwgewogCS8qIEFkbWluaXN0cmF0aXZlIGZpZWxkcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2X3N1YnM7CiAJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoYW5kbGVyOwogCXN0cnVjdCB2NGwyX2N0cmwgKipjbHVzdGVyOwogCXVuc2lnbmVkIG5jb250cm9sczsKQEAgLTEwNSw2ICsxMTksOCBAQAogCXVuc2lnbmVkIGludCBpc19uZXc6MTsKIAl1bnNpZ25lZCBpbnQgaXNfcHJpdmF0ZToxOwogCXVuc2lnbmVkIGludCBpc192b2xhdGlsZToxOworCXVuc2lnbmVkIGludCBpc19hdXRvOjE7CisJdW5zaWduZWQgaW50IG1hbnVhbF9tb2RlX3ZhbHVlOjg7CiAKIAljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzOwogCXUzMiBpZDsKQEAgLTEzNCw2ICsxNTAsNyBAQAogICAqIEBub2RlOglMaXN0IG5vZGUgZm9yIHRoZSBzb3J0ZWQgbGlzdC4KICAgKiBAbmV4dDoJU2luZ2xlLWxpbmsgbGlzdCBub2RlIGZvciB0aGUgaGFzaC4KICAgKiBAY3RybDoJVGhlIGFjdHVhbCBjb250cm9sIGluZm9ybWF0aW9uLgorICAqIEBoZWxwZXI6CVBvaW50ZXIgdG8gaGVscGVyIHN0cnVjdC4gVXNlZCBpbnRlcm5hbGx5IGluIHByZXBhcmVfZXh0X2N0cmxzKCkuCiAgICoKICAgKiBFYWNoIGNvbnRyb2wgaGFuZGxlciBoYXMgYSBsaXN0IG9mIHRoZXNlIHJlZnMuIFRoZSBsaXN0X2hlYWQgaXMgdXNlZCB0bwogICAqIGtlZXAgYSBzb3J0ZWQtYnktY29udHJvbC1JRCBsaXN0IG9mIGFsbCBjb250cm9scywgd2hpbGUgdGhlIG5leHQgcG9pbnRlcgpAQCAtMTQzLDYgKzE2MCw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXN0cnVjdCB2NGwyX2N0cmxfcmVmICpuZXh0OwogCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7CisJc3RydWN0IHY0bDJfY3RybF9oZWxwZXIgKmhlbHBlcjsKIH07CiAKIC8qKiBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgLSBUaGUgY29udHJvbCBoYW5kbGVyIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUKQEAgLTM2Myw2ICszODEsNDAgQEAKIHZvaWQgdjRsMl9jdHJsX2NsdXN0ZXIodW5zaWduZWQgbmNvbnRyb2xzLCBzdHJ1Y3QgdjRsMl9jdHJsICoqY29udHJvbHMpOwogCiAKKy8qKiB2NGwyX2N0cmxfYXV0b19jbHVzdGVyKCkgLSBNYXJrIGFsbCBjb250cm9scyBpbiB0aGUgY2x1c3RlciBhcyBiZWxvbmdpbmcgdG8KKyAgKiB0aGF0IGNsdXN0ZXIgYW5kIHNldCBpdCB1cCBmb3IgYXV0b2Zvby9mb28tdHlwZSBoYW5kbGluZy4KKyAgKiBAbmNvbnRyb2xzOglUaGUgbnVtYmVyIG9mIGNvbnRyb2xzIGluIHRoaXMgY2x1c3Rlci4KKyAgKiBAY29udHJvbHM6CVRoZSBjbHVzdGVyIGNvbnRyb2wgYXJyYXkgb2Ygc2l6ZSBAbmNvbnRyb2xzLiBUaGUgZmlyc3QgY29udHJvbAorICAqCQltdXN0IGJlIHRoZSAnYXV0bycgY29udHJvbCAoZS5nLiBhdXRvZ2FpbiwgYXV0b2V4cG9zdXJlLCBldGMuKQorICAqIEBtYW51YWxfdmFsOiBUaGUgdmFsdWUgZm9yIHRoZSBmaXJzdCBjb250cm9sIGluIHRoZSBjbHVzdGVyIHRoYXQgZXF1YWxzIHRoZQorICAqCQltYW51YWwgc2V0dGluZy4KKyAgKiBAc2V0X3ZvbGF0aWxlOiBJZiB0cnVlLCB0aGVuIGFsbCBjb250cm9scyBleGNlcHQgdGhlIGZpcnN0IGF1dG8gY29udHJvbCB3aWxsCisgICoJCWhhdmUgaXNfdm9sYXRpbGUgc2V0IHRvIHRydWUuIElmIGZhbHNlLCB0aGVuIGlzX3ZvbGF0aWxlIHdpbGwgbm90CisgICoJCWJlIHRvdWNoZWQuCisgICoKKyAgKiBVc2UgZm9yIGNvbnRyb2wgZ3JvdXBzIHdoZXJlIG9uZSBjb250cm9sIHNlbGVjdHMgc29tZSBhdXRvbWF0aWMgZmVhdHVyZSBhbmQKKyAgKiB0aGUgb3RoZXIgY29udHJvbHMgYXJlIG9ubHkgYWN0aXZlIHdoZW5ldmVyIHRoZSBhdXRvbWF0aWMgZmVhdHVyZSBpcyB0dXJuZWQKKyAgKiBvZmYgKG1hbnVhbCBtb2RlKS4gVHlwaWNhbCBleGFtcGxlczogYXV0b2dhaW4gdnMgZ2FpbiwgYXV0by13aGl0ZWJhbGFuY2UgdnMKKyAgKiByZWQgYW5kIGJsdWUgYmFsYW5jZSwgZXRjLgorICAqCisgICogVGhlIGJlaGF2aW9yIG9mIHN1Y2ggY29udHJvbHMgaXMgYXMgZm9sbG93czoKKyAgKgorICAqIFdoZW4gdGhlIGF1dG9mb28gY29udHJvbCBpcyBzZXQgdG8gYXV0b21hdGljLCB0aGVuIGFueSBtYW51YWwgY29udHJvbHMKKyAgKiBhcmUgc2V0IHRvIGluYWN0aXZlIGFuZCBhbnkgcmVhZHMgd2lsbCBjYWxsIGdfdm9sYXRpbGVfY3RybCAoaWYgdGhlIGNvbnRyb2wKKyAgKiB3YXMgbWFya2VkIHZvbGF0aWxlKS4KKyAgKgorICAqIFdoZW4gdGhlIGF1dG9mb28gY29udHJvbCBpcyBzZXQgdG8gbWFudWFsLCB0aGVuIGFueSBtYW51YWwgY29udHJvbHMgd2lsbAorICAqIGJlIG1hcmtlZCBhY3RpdmUsIGFuZCBhbnkgcmVhZHMgd2lsbCBqdXN0IHJldHVybiB0aGUgY3VycmVudCB2YWx1ZSB3aXRob3V0CisgICogZ29pbmcgdGhyb3VnaCBnX3ZvbGF0aWxlX2N0cmwuCisgICoKKyAgKiBJbiBhZGRpdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIGZsYWcKKyAgKiBvbiB0aGUgYXV0b2ZvbyBjb250cm9sIGFuZCBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSBvbiB0aGUgZm9vIGNvbnRyb2wocykKKyAgKiBpZiBhdXRvZm9vIGlzIGluIGF1dG8gbW9kZS4KKyAgKi8KK3ZvaWQgdjRsMl9jdHJsX2F1dG9fY2x1c3Rlcih1bnNpZ25lZCBuY29udHJvbHMsIHN0cnVjdCB2NGwyX2N0cmwgKipjb250cm9scywKKwkJCXU4IG1hbnVhbF92YWwsIGJvb2wgc2V0X3ZvbGF0aWxlKTsKKworCiAvKiogdjRsMl9jdHJsX2ZpbmQoKSAtIEZpbmQgYSBjb250cm9sIHdpdGggdGhlIGdpdmVuIElELgogICAqIEBoZGw6CVRoZSBjb250cm9sIGhhbmRsZXIuCiAgICogQGlkOglUaGUgY29udHJvbCBJRCB0byBmaW5kLgpAQCAtMzc5LDkgKzQzMSw5IEBACiAgICogVGhpcyBzZXRzIG9yIGNsZWFycyB0aGUgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgZmxhZyBhdG9taWNhbGx5LgogICAqIERvZXMgbm90aGluZyBpZiBAY3RybCA9PSBOVUxMLgogICAqIFRoaXMgd2lsbCB1c3VhbGx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc19jdHJsIG9wLgorICAqIFRoZSBWNEwyX0VWRU5UX0NUUkwgZXZlbnQgd2lsbCBiZSBnZW5lcmF0ZWQgYWZ0ZXJ3YXJkcy4KICAgKgotICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRyb2wgaGFuZGxlcgotICAqIGlzIGxvY2tlZCBvciBub3QuCisgICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNvbnRyb2wgaGFuZGxlciBpcyBsb2NrZWQuCiAgICovCiB2b2lkIHY0bDJfY3RybF9hY3RpdmF0ZShzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLCBib29sIGFjdGl2ZSk7CiAKQEAgLTM5MSwxMSArNDQzLDEyIEBACiAgICoKICAgKiBUaGlzIHNldHMgb3IgY2xlYXJzIHRoZSBWNEwyX0NUUkxfRkxBR19HUkFCQkVEIGZsYWcgYXRvbWljYWxseS4KICAgKiBEb2VzIG5vdGhpbmcgaWYgQGN0cmwgPT0gTlVMTC4KKyAgKiBUaGUgVjRMMl9FVkVOVF9DVFJMIGV2ZW50IHdpbGwgYmUgZ2VuZXJhdGVkIGFmdGVyd2FyZHMuCiAgICogVGhpcyB3aWxsIHVzdWFsbHkgYmUgY2FsbGVkIHdoZW4gc3RhcnRpbmcgb3Igc3RvcHBpbmcgc3RyZWFtaW5nIGluIHRoZQogICAqIGRyaXZlci4KICAgKgotICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRyb2wgaGFuZGxlcgotICAqIGlzIGxvY2tlZCBvciBub3QuCisgICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNvbnRyb2wgaGFuZGxlciBpcyBub3QgbG9ja2VkIGFuZCB3aWxsCisgICogdGFrZSB0aGUgbG9jayBpdHNlbGYuCiAgICovCiB2b2lkIHY0bDJfY3RybF9ncmFiKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIGJvb2wgZ3JhYmJlZCk7CiAKQEAgLTQ0MCwxNSArNDkzLDIyIEBACiAgICovCiBpbnQgdjRsMl9jdHJsX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLCBzMzIgdmFsKTsKIAorLyogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBjb250cm9sIGV2ZW50cy4gKi8KK3ZvaWQgdjRsMl9jdHJsX2FkZF9ldmVudChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLAorCQlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXYpOwordm9pZCB2NGwyX2N0cmxfZGVsX2V2ZW50KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsCisJCXN0cnVjdCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgKnNldik7CiAKIC8qIEhlbHBlcnMgZm9yIGlvY3RsX29wcy4gSWYgaGRsID09IE5VTEwgdGhlbiB0aGV5IHdpbGwgYWxsIHJldHVybiAtRUlOVkFMLiAqLwogaW50IHY0bDJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKTsKIGludCB2NGwyX3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CiBpbnQgdjRsMl9nX2N0cmwoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOwotaW50IHY0bDJfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCB2NGwyX3NfY3RybChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CiBpbnQgdjRsMl9nX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKTsKIGludCB2NGwyX3RyeV9leHRfY3RybHMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYyk7Ci1pbnQgdjRsMl9zX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKTsKK2ludCB2NGwyX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2ZoICpmaCwgc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMpOwogCiAvKiBIZWxwZXJzIGZvciBzdWJkZXZpY2VzLiBJZiB0aGUgYXNzb2NpYXRlZCBjdHJsX2hhbmRsZXIgPT0gTlVMTCB0aGVuIHRoZXkKICAgIHdpbGwgYWxsIHJldHVybiAtRUlOVkFMLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWV2ZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZXZlbnQuaAppbmRleCAzYjg2MTc3Li41ZjE0ZTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZXZlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZXZlbnQuaApAQCAtMjksMzkgKzI5LDk1IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCisvKgorICogT3ZlcnZpZXc6CisgKgorICogRXZlbnRzIGFyZSBzdWJzY3JpYmVkIHBlci1maWxlaGFuZGxlLiBBbiBldmVudCBzcGVjaWZpY2F0aW9uIGNvbnNpc3RzIG9mIGEKKyAqIHR5cGUgYW5kIGlzIG9wdGlvbmFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIG9iamVjdCBpZGVudGlmaWVkIHRocm91Z2ggdGhlCisgKiAnaWQnIGZpZWxkLiBTbyBhbiBldmVudCBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZSAodHlwZSwgaWQpIHR1cGxlLgorICoKKyAqIFRoZSB2NGwyLWZoIHN0cnVjdCBoYXMgYSBsaXN0IG9mIHN1YnNjcmliZWQgZXZlbnRzLiBUaGUgdjRsMl9zdWJzY3JpYmVkX2V2ZW50CisgKiBzdHJ1Y3QgaXMgYWRkZWQgdG8gdGhhdCBsaXN0LCBvbmUgZm9yIGV2ZXJ5IHN1YnNjcmliZWQgZXZlbnQuCisgKgorICogRWFjaCB2NGwyX3N1YnNjcmliZWRfZXZlbnQgc3RydWN0IGVuZHMgd2l0aCBhbiBhcnJheSBvZiB2NGwyX2tldmVudCBzdHJ1Y3RzLgorICogVGhpcyBhcnJheSAocmluZ2J1ZmZlciwgcmVhbGx5KSBpcyB1c2VkIHRvIHN0b3JlIGFueSBldmVudHMgcmFpc2VkIGJ5IHRoZQorICogZHJpdmVyLiBUaGUgdjRsMl9rZXZlbnQgc3RydWN0IGxpbmtzIGludG8gdGhlICdhdmFpbGFibGUnIGxpc3Qgb2YgdGhlCisgKiB2NGwyX2ZoIHN0cnVjdCBzbyBWSURJT0NfRFFFVkVOVCB3aWxsIGtub3cgd2hpY2ggZXZlbnQgdG8gZGVxdWV1ZSBmaXJzdC4KKyAqCisgKiBGaW5hbGx5LCBpZiB0aGUgZXZlbnQgc3Vic2NyaXB0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgb2JqZWN0CisgKiBzdWNoIGFzIGEgVjRMMiBjb250cm9sLCB0aGVuIHRoYXQgb2JqZWN0IG5lZWRzIHRvIGtub3cgYWJvdXQgdGhhdCBhcyB3ZWxsCisgKiBzbyB0aGF0IGFuIGV2ZW50IGNhbiBiZSByYWlzZWQgYnkgdGhhdCBvYmplY3QuIFNvIHRoZSAnbm9kZScgZmllbGQgY2FuCisgKiBiZSB1c2VkIHRvIGxpbmsgdGhlIHY0bDJfc3Vic2NyaWJlZF9ldmVudCBzdHJ1Y3QgaW50byBhIGxpc3Qgb2YgdGhhdAorICogb2JqZWN0LgorICoKKyAqIFNvIHRvIHN1bW1hcml6ZToKKyAqCisgKiBzdHJ1Y3QgdjRsMl9maCBoYXMgdHdvIGxpc3RzOiBvbmUgb2YgdGhlIHN1YnNjcmliZWQgZXZlbnRzLCBhbmQgb25lIG9mIHRoZQorICogcGVuZGluZyBldmVudHMuCisgKgorICogc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCBoYXMgYSByaW5nYnVmZmVyIG9mIHJhaXNlZCAocGVuZGluZykgZXZlbnRzIG9mCisgKiB0aGF0IHBhcnRpY3VsYXIgdHlwZS4KKyAqCisgKiBJZiBzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIG9iamVjdCwgdGhlbgorICogdGhhdCBvYmplY3Qgd2lsbCBoYXZlIGFuIGludGVybmFsIGxpc3Qgb2Ygc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCBzbworICogaXQga25vd3Mgd2hvIHN1YnNjcmliZWQgYW4gZXZlbnQgdG8gdGhhdCBvYmplY3QuCisgKi8KKwogc3RydWN0IHY0bDJfZmg7CitzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50Owogc3RydWN0IHZpZGVvX2RldmljZTsKIAorLyoqIHN0cnVjdCB2NGwyX2tldmVudCAtIEludGVybmFsIGtlcm5lbCBldmVudCBzdHJ1Y3QuCisgICogQGxpc3Q6CUxpc3Qgbm9kZSBmb3IgdGhlIHY0bDJfZmgtPmF2YWlsYWJsZSBsaXN0LgorICAqIEBzZXY6CVBvaW50ZXIgdG8gcGFyZW50IHY0bDJfc3Vic2NyaWJlZF9ldmVudC4KKyAgKiBAZXZlbnQ6CVRoZSBldmVudCBpdHNlbGYuCisgICovCiBzdHJ1Y3QgdjRsMl9rZXZlbnQgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgdjRsMl9zdWJzY3JpYmVkX2V2ZW50ICpzZXY7CiAJc3RydWN0IHY0bDJfZXZlbnQJZXZlbnQ7CiB9OwogCisvKiogc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCAtIEludGVybmFsIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzdWJzY3JpYmVkIGV2ZW50LgorICAqIEBsaXN0OglMaXN0IG5vZGUgZm9yIHRoZSB2NGwyX2ZoLT5zdWJzY3JpYmVkIGxpc3QuCisgICogQHR5cGU6CUV2ZW50IHR5cGUuCisgICogQGlkOglBc3NvY2lhdGVkIG9iamVjdCBJRCAoZS5nLiBjb250cm9sIElEKS4gMCBpZiB0aGVyZSBpc24ndCBhbnkuCisgICogQGZsYWdzOglDb3B5IG9mIHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uLT5mbGFncy4KKyAgKiBAZmg6CUZpbGVoYW5kbGUgdGhhdCBzdWJzY3JpYmVkIHRvIHRoaXMgZXZlbnQuCisgICogQG5vZGU6CUxpc3Qgbm9kZSB0aGF0IGhvb2tzIGludG8gdGhlIG9iamVjdCdzIGV2ZW50IGxpc3QgKGlmIHRoZXJlIGlzIG9uZSkuCisgICogQHJlcGxhY2U6CU9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgY2FuIHJlcGxhY2UgZXZlbnQgJ29sZCcgd2l0aCBldmVudCAnbmV3Jy4KKyAgKiBAbWVyZ2U6CU9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgY2FuIG1lcmdlIGV2ZW50ICdvbGQnIGludG8gZXZlbnQgJ25ldycuCisgICogQGVsZW1zOglUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBldmVudHMgYXJyYXkuCisgICogQGZpcnN0OglUaGUgaW5kZXggb2YgdGhlIGV2ZW50cyBjb250YWluaW5nIHRoZSBvbGRlc3QgYXZhaWxhYmxlIGV2ZW50LgorICAqIEBpbl91c2U6CVRoZSBudW1iZXIgb2YgcXVldWVkIGV2ZW50cy4KKyAgKiBAZXZlbnRzOglBbiBhcnJheSBvZiBAZWxlbXMgZXZlbnRzLgorICAqLwogc3RydWN0IHY0bDJfc3Vic2NyaWJlZF9ldmVudCB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXUzMgkJCXR5cGU7CisJdTMyCQkJaWQ7CisJdTMyCQkJZmxhZ3M7CisJc3RydWN0IHY0bDJfZmgJCSpmaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJdm9pZAkJCSgqcmVwbGFjZSkoc3RydWN0IHY0bDJfZXZlbnQgKm9sZCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfZXZlbnQgKm5ldyk7CisJdm9pZAkJCSgqbWVyZ2UpKGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpvbGQsCisJCQkJCSBzdHJ1Y3QgdjRsMl9ldmVudCAqbmV3KTsKKwl1bnNpZ25lZAkJZWxlbXM7CisJdW5zaWduZWQJCWZpcnN0OworCXVuc2lnbmVkCQlpbl91c2U7CisJc3RydWN0IHY0bDJfa2V2ZW50CWV2ZW50c1tdOwogfTsKIAotc3RydWN0IHY0bDJfZXZlbnRzIHsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwotCXN0cnVjdCBsaXN0X2hlYWQJc3Vic2NyaWJlZDsgLyogU3Vic2NyaWJlZCBldmVudHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWU7IC8qIEV2ZW50cyByZWFkeSBmb3IgdXNlICovCi0Jc3RydWN0IGxpc3RfaGVhZAlhdmFpbGFibGU7IC8qIERlcXVldWVhYmxlIGV2ZW50ICovCi0JdW5zaWduZWQgaW50CQluYXZhaWxhYmxlOwotCXVuc2lnbmVkIGludAkJbmFsbG9jYXRlZDsgLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBldmVudHMgKi8KLQl1MzIJCQlzZXF1ZW5jZTsKLX07Ci0KLWludCB2NGwyX2V2ZW50X2luaXQoc3RydWN0IHY0bDJfZmggKmZoKTsKLWludCB2NGwyX2V2ZW50X2FsbG9jKHN0cnVjdCB2NGwyX2ZoICpmaCwgdW5zaWduZWQgaW50IG4pOwotdm9pZCB2NGwyX2V2ZW50X2ZyZWUoc3RydWN0IHY0bDJfZmggKmZoKTsKIGludCB2NGwyX2V2ZW50X2RlcXVldWUoc3RydWN0IHY0bDJfZmggKmZoLCBzdHJ1Y3QgdjRsMl9ldmVudCAqZXZlbnQsCiAJCSAgICAgICBpbnQgbm9uYmxvY2tpbmcpOwogdm9pZCB2NGwyX2V2ZW50X3F1ZXVlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGNvbnN0IHN0cnVjdCB2NGwyX2V2ZW50ICpldik7Cit2b2lkIHY0bDJfZXZlbnRfcXVldWVfZmgoc3RydWN0IHY0bDJfZmggKmZoLCBjb25zdCBzdHJ1Y3QgdjRsMl9ldmVudCAqZXYpOwogaW50IHY0bDJfZXZlbnRfcGVuZGluZyhzdHJ1Y3QgdjRsMl9maCAqZmgpOwogaW50IHY0bDJfZXZlbnRfc3Vic2NyaWJlKHN0cnVjdCB2NGwyX2ZoICpmaCwKLQkJCSBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24gKnN1Yik7CisJCQkgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uICpzdWIsIHVuc2lnbmVkIGVsZW1zKTsKIGludCB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlKHN0cnVjdCB2NGwyX2ZoICpmaCwKIAkJCSAgIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiAqc3ViKTsKK3ZvaWQgdjRsMl9ldmVudF91bnN1YnNjcmliZV9hbGwoc3RydWN0IHY0bDJfZmggKmZoKTsKIAogI2VuZGlmIC8qIFY0TDJfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWZoLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZmguaAppbmRleCAwMjA2YWE1Li41MjUxM2MyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZmguaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZmguaApAQCAtMjksMTMgKzI5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlOwotc3RydWN0IHY0bDJfZXZlbnRzOworc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyOwogCiBzdHJ1Y3QgdjRsMl9maCB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZkZXY7Ci0Jc3RydWN0IHY0bDJfZXZlbnRzICAgICAgKmV2ZW50czsgLyogZXZlbnRzLCBwZW5kaW5nIGFuZCBzdWJzY3JpYmVkICovCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpjdHJsX2hhbmRsZXI7CiAJZW51bSB2NGwyX3ByaW9yaXR5CXByaW87CisKKwkvKiBFdmVudHMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCXN0cnVjdCBsaXN0X2hlYWQJc3Vic2NyaWJlZDsgLyogU3Vic2NyaWJlZCBldmVudHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWF2YWlsYWJsZTsgLyogRGVxdWV1ZWFibGUgZXZlbnQgKi8KKwl1bnNpZ25lZCBpbnQJCW5hdmFpbGFibGU7CisJdTMyCQkJc2VxdWVuY2U7CiB9OwogCiAvKgpAQCAtNDQsNyArNTEsNyBAQAogICogZnJvbSBkcml2ZXIncyB2NGwyX2ZpbGVfb3BlcmF0aW9ucy0+b3BlbigpIGhhbmRsZXIgaWYgdGhlIGRyaXZlcgogICogdXNlcyB2NGwyX2ZoLgogICovCi1pbnQgdjRsMl9maF9pbml0KHN0cnVjdCB2NGwyX2ZoICpmaCwgc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7Cit2b2lkIHY0bDJfZmhfaW5pdChzdHJ1Y3QgdjRsMl9maCAqZmgsIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwogLyoKICAqIEFkZCB0aGUgZmggdG8gdGhlIGxpc3Qgb2YgZmlsZSBoYW5kbGVzIG9uIGEgdmlkZW9fZGV2aWNlLiBUaGUgZmlsZQogICogaGFuZGxlIG11c3QgYmUgaW5pdGlhbGlzZWQgZmlyc3QuCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItbWVkaWFidXMuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1tZWRpYWJ1cy5oCmluZGV4IDk3MWM3ZmEuLjYxMTQwMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1tZWRpYWJ1cy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1tZWRpYWJ1cy5oCkBAIC0xMyw2ICsxMyw2OSBAQAogCiAjaW5jbHVkZSA8bGludXgvdjRsMi1tZWRpYWJ1cy5oPgogCisvKiBQYXJhbGxlbCBmbGFncyAqLworLyoKKyAqIENhbiB0aGUgY2xpZW50IHJ1biBpbiBtYXN0ZXIgb3IgaW4gc2xhdmUgbW9kZS4gQnkgIk1hc3RlciBtb2RlIiBhbiBvcGVyYXRpb24KKyAqIG1vZGUgaXMgbWVhbnQsIHdoZW4gdGhlIGNsaWVudCAoZS5nLiwgYSBjYW1lcmEgc2Vuc29yKSBpcyBwcm9kdWNpbmcKKyAqIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHN5bmNocm9uaXNhdGlvbi4gSW4gIlNsYXZlIG1vZGUiIHRoZSBob3N0IGlzCisgKiBwcm92aWRpbmcgdGhlc2Ugc2lnbmFscyB0byB0aGUgc2xhdmUuCisgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX01BU1RFUgkJCSgxIDw8IDApCisjZGVmaW5lIFY0TDJfTUJVU19TTEFWRQkJCQkoMSA8PCAxKQorLyogV2hpY2ggc2lnbmFsIHBvbGFyaXRpZXMgaXQgc3VwcG9ydHMgKi8KKy8qIE5vdGU6IGluIEJULjY1NiBtb2RlIEhTWU5DIGFuZCBWU1lOQyBhcmUgdW51c2VkICovCisjZGVmaW5lIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgMikKKyNkZWZpbmUgVjRMMl9NQlVTX0hTWU5DX0FDVElWRV9MT1cJCSgxIDw8IDMpCisjZGVmaW5lIFY0TDJfTUJVU19WU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgNCkKKyNkZWZpbmUgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cJCSgxIDw8IDUpCisjZGVmaW5lIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9SSVNJTkcJCSgxIDw8IDYpCisjZGVmaW5lIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9GQUxMSU5HCQkoMSA8PCA3KQorI2RlZmluZSBWNEwyX01CVVNfREFUQV9BQ1RJVkVfSElHSAkJKDEgPDwgOCkKKyNkZWZpbmUgVjRMMl9NQlVTX0RBVEFfQUNUSVZFX0xPVwkJKDEgPDwgOSkKKworLyogU2VyaWFsIGZsYWdzICovCisvKiBIb3cgbWFueSBsYW5lcyB0aGUgY2xpZW50IGNhbiB1c2UgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfMV9MQU5FCQkJKDEgPDwgMCkKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfMl9MQU5FCQkJKDEgPDwgMSkKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfM19MQU5FCQkJKDEgPDwgMikKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfNF9MQU5FCQkJKDEgPDwgMykKKy8qIE9uIHdoaWNoIGNoYW5uZWxzIGl0IGNhbiBzZW5kIHZpZGVvIGRhdGEgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfQ0hBTk5FTF8wCQkoMSA8PCA0KQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl9DSEFOTkVMXzEJCSgxIDw8IDUpCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMgkJKDEgPDwgNikKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfQ0hBTk5FTF8zCQkoMSA8PCA3KQorLyogRG9lcyBpdCBzdXBwb3J0IG9ubHkgY29udGludW91cyBvciBhbHNvIG5vbi1jb250aW51b3VzIGNsb2NrIG1vZGUgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfQ09OVElOVU9VU19DTE9DSwkJKDEgPDwgOCkKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfTk9OQ09OVElOVU9VU19DTE9DSwkoMSA8PCA5KQorCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyX0xBTkVTCQkoVjRMMl9NQlVTX0NTSTJfMV9MQU5FIHwgVjRMMl9NQlVTX0NTSTJfMl9MQU5FIHwgXAorCQkJCQkgVjRMMl9NQlVTX0NTSTJfM19MQU5FIHwgVjRMMl9NQlVTX0NTSTJfNF9MQU5FKQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl9DSEFOTkVMUwkJKFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMCB8IFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMSB8IFwKKwkJCQkJIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMiB8IFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMykKKworLyoqCisgKiB2NGwyX21idXNfdHlwZSAtIG1lZGlhIGJ1cyB0eXBlCisgKiBAVjRMMl9NQlVTX1BBUkFMTEVMOglwYXJhbGxlbCBpbnRlcmZhY2Ugd2l0aCBoc3luYyBhbmQgdnN5bmMKKyAqIEBWNEwyX01CVVNfQlQ2NTY6CXBhcmFsbGVsIGludGVyZmFjZSB3aXRoIGVtYmVkZGVkIHN5bmNocm9uaXNhdGlvbiwgY2FuCisgKgkJCWFsc28gYmUgdXNlZCBmb3IgQlQuMTEyMAorICogQFY0TDJfTUJVU19DU0kyOglNSVBJIENTSS0yIHNlcmlhbCBpbnRlcmZhY2UKKyAqLworZW51bSB2NGwyX21idXNfdHlwZSB7CisJVjRMMl9NQlVTX1BBUkFMTEVMLAorCVY0TDJfTUJVU19CVDY1NiwKKwlWNEwyX01CVVNfQ1NJMiwKK307CisKKy8qKgorICogdjRsMl9tYnVzX2NvbmZpZyAtIG1lZGlhIGJ1cyBjb25maWd1cmF0aW9uCisgKiBAdHlwZToJaW46IGludGVyZmFjZSB0eXBlCisgKiBAZmxhZ3M6CWluIC8gb3V0OiBjb25maWd1cmF0aW9uIGZsYWdzLCBkZXBlbmRpbmcgb24gQHR5cGUKKyAqLworc3RydWN0IHY0bDJfbWJ1c19jb25maWcgeworCWVudW0gdjRsMl9tYnVzX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCiBzdGF0aWMgaW5saW5lIHZvaWQgdjRsMl9maWxsX3BpeF9mb3JtYXQoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4X2ZtdCwKIAkJCQljb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCAyODg0ZTNlLi4yNTdkYTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0yMjksNiArMjI5LDEyIEBACiAgICBzX3N0ZF9vdXRwdXQ6IHNldCB2NGwyX3N0ZF9pZCBmb3IgdmlkZW8gT1VUUFVUIGRldmljZXMuIFRoaXMgaXMgaWdub3JlZCBieQogCXZpZGVvIGlucHV0IGRldmljZXMuCiAKKyAgIGdfc3RkX291dHB1dDogZ2V0IGN1cnJlbnQgc3RhbmRhcmQgZm9yIHZpZGVvIE9VVFBVVCBkZXZpY2VzLiBUaGlzIGlzIGlnbm9yZWQKKwlieSB2aWRlbyBpbnB1dCBkZXZpY2VzLgorCisgICBnX3R2bm9ybXNfb3V0cHV0OiBnZXQgdjRsMl9zdGRfaWQgd2l0aCBhbGwgc3RhbmRhcmRzIHN1cHBvcnRlZCBieSB2aWRlbworCU9VVFBVVCBkZXZpY2UuIFRoaXMgaXMgaWdub3JlZCBieSB2aWRlbyBpbnB1dCBkZXZpY2VzLgorCiAgICBzX2NyeXN0YWxfZnJlcTogc2V0cyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjcnlzdGFsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCiAJY2xvY2tzIGluIEh6LiBBbiBleHRyYSBmbGFncyBmaWVsZCBhbGxvd3MgZGV2aWNlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KIAlyZWdhcmRpbmcgY2xvY2sgZnJlcXVlbmN5IGRpdmlkZXJzLCBldGMuIElmIG5vdCB1c2VkLCB0aGVuIHNldCBmbGFncwpAQCAtMjQzLDYgKzI0OSw4IEBACiAgICBzX2R2X3ByZXNldDogc2V0IGR2IChEaWdpdGFsIFZpZGVvKSBwcmVzZXQgaW4gdGhlIHN1YiBkZXZpY2UuIFNpbWlsYXIgdG8KIAlzX3N0ZCgpCiAKKyAgIGdfZHZfcHJlc2V0OiBnZXQgY3VycmVudCBkdiAoRGlnaXRhbCBWaWRlbykgcHJlc2V0IGluIHRoZSBzdWIgZGV2aWNlLgorCiAgICBxdWVyeV9kdl9wcmVzZXQ6IHF1ZXJ5IGR2IHByZXNldCBpbiB0aGUgc3ViIGRldmljZS4gVGhpcyBpcyBzaW1pbGFyIHRvCiAJcXVlcnlzdGQoKQogCkBAIC0yNTksMTIgKzI2NywyMCBAQAogICAgdHJ5X21idXNfZm10OiB0cnkgdG8gc2V0IGEgcGl4ZWwgZm9ybWF0IG9uIGEgdmlkZW8gZGF0YSBzb3VyY2UKIAogICAgc19tYnVzX2ZtdDogc2V0IGEgcGl4ZWwgZm9ybWF0IG9uIGEgdmlkZW8gZGF0YSBzb3VyY2UKKworICAgZ19tYnVzX2NvbmZpZzogZ2V0IHN1cHBvcnRlZCBtZWRpYWJ1cyBjb25maWd1cmF0aW9ucworCisgICBzX21idXNfY29uZmlnOiBzZXQgYSBjZXJ0YWluIG1lZGlhYnVzIGNvbmZpZ3VyYXRpb24uIFRoaXMgb3BlcmF0aW9uIGlzIGFkZGVkCisJZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzb2MtY2FtZXJhIGRyaXZlcnMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBuZXcKKwlzb2Z0d2FyZS4KICAqLwogc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB7CiAJaW50ICgqc19yb3V0aW5nKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgaW5wdXQsIHUzMiBvdXRwdXQsIHUzMiBjb25maWcpOwogCWludCAoKnNfY3J5c3RhbF9mcmVxKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSwgdTMyIGZsYWdzKTsKIAlpbnQgKCpzX3N0ZF9vdXRwdXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCk7CisJaW50ICgqZ19zdGRfb3V0cHV0KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKTsKIAlpbnQgKCpxdWVyeXN0ZCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCk7CisJaW50ICgqZ190dm5vcm1zX291dHB1dCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCk7CiAJaW50ICgqZ19pbnB1dF9zdGF0dXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKTsKIAlpbnQgKCpzX3N0cmVhbSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSk7CiAJaW50ICgqY3JvcGNhcCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2MpOwpAQCAtMjgyLDYgKzI5OCw4IEBACiAJCQlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCAqcHJlc2V0KTsKIAlpbnQgKCpzX2R2X3ByZXNldCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcHJlc2V0KTsKKwlpbnQgKCpnX2R2X3ByZXNldCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXN0cnVjdCB2NGwyX2R2X3ByZXNldCAqcHJlc2V0KTsKIAlpbnQgKCpxdWVyeV9kdl9wcmVzZXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnByZXNldCk7CiAJaW50ICgqc19kdl90aW1pbmdzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLApAQCAtMjk4LDYgKzMxNiwxMCBAQAogCQkJICAgIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZtdCk7CiAJaW50ICgqc19tYnVzX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KTsKKwlpbnQgKCpnX21idXNfY29uZmlnKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyAqY2ZnKTsKKwlpbnQgKCpzX21idXNfY29uZmlnKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyAqY2ZnKTsKIH07CiAKIC8qCkBAIC01MTMsOCArNTM1LDYgQEAKIAl2b2lkICpob3N0X3ByaXY7CiAJLyogc3ViZGV2IGRldmljZSBub2RlICovCiAJc3RydWN0IHZpZGVvX2RldmljZSBkZXZub2RlOwotCS8qIG51bWJlciBvZiBldmVudHMgdG8gYmUgYWxsb2NhdGVkIG9uIG9wZW4gKi8KLQl1bnNpZ25lZCBpbnQgbmV2ZW50czsKIH07CiAKICNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KGVudCkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvOXAuaCBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKaW5kZXggMzQyZGNmMS4uYTYzMjZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvOXAuaAorKysgYi9pbmNsdWRlL25ldC85cC85cC5oCkBAIC0yODgsNiArMjg4LDM1IEBACiAJUDlfRE1TRVRWVFggPSAweDAwMDEwMDAwLAogfTsKIAorLyogOXAyMDAwLkwgb3BlbiBmbGFncyAqLworI2RlZmluZSBQOV9ET1RMX1JET05MWSAgICAgICAgMDAwMDAwMDAKKyNkZWZpbmUgUDlfRE9UTF9XUk9OTFkgICAgICAgIDAwMDAwMDAxCisjZGVmaW5lIFA5X0RPVExfUkRXUiAgICAgICAgICAwMDAwMDAwMgorI2RlZmluZSBQOV9ET1RMX05PQUNDRVNTICAgICAgMDAwMDAwMDMKKyNkZWZpbmUgUDlfRE9UTF9DUkVBVEUgICAgICAgIDAwMDAwMTAwCisjZGVmaW5lIFA5X0RPVExfRVhDTCAgICAgICAgICAwMDAwMDIwMAorI2RlZmluZSBQOV9ET1RMX05PQ1RUWSAgICAgICAgMDAwMDA0MDAKKyNkZWZpbmUgUDlfRE9UTF9UUlVOQyAgICAgICAgIDAwMDAxMDAwCisjZGVmaW5lIFA5X0RPVExfQVBQRU5EICAgICAgICAwMDAwMjAwMAorI2RlZmluZSBQOV9ET1RMX05PTkJMT0NLICAgICAgMDAwMDQwMDAKKyNkZWZpbmUgUDlfRE9UTF9EU1lOQyAgICAgICAgIDAwMDEwMDAwCisjZGVmaW5lIFA5X0RPVExfRkFTWU5DICAgICAgICAwMDAyMDAwMAorI2RlZmluZSBQOV9ET1RMX0RJUkVDVCAgICAgICAgMDAwNDAwMDAKKyNkZWZpbmUgUDlfRE9UTF9MQVJHRUZJTEUgICAgIDAwMTAwMDAwCisjZGVmaW5lIFA5X0RPVExfRElSRUNUT1JZICAgICAwMDIwMDAwMAorI2RlZmluZSBQOV9ET1RMX05PRk9MTE9XICAgICAgMDA0MDAwMDAKKyNkZWZpbmUgUDlfRE9UTF9OT0FUSU1FICAgICAgIDAxMDAwMDAwCisjZGVmaW5lIFA5X0RPVExfQ0xPRVhFQyAgICAgICAwMjAwMDAwMAorI2RlZmluZSBQOV9ET1RMX1NZTkMgICAgICAgICAgMDQwMDAwMDAKKworLyogOXAyMDAwLkwgYXQgZmxhZ3MgKi8KKyNkZWZpbmUgUDlfRE9UTF9BVF9SRU1PVkVESVIJCTB4MjAwCisKKy8qIDlwMjAwMC5MIGxvY2sgdHlwZSAqLworI2RlZmluZSBQOV9MT0NLX1RZUEVfUkRMQ0sgMAorI2RlZmluZSBQOV9MT0NLX1RZUEVfV1JMQ0sgMQorI2RlZmluZSBQOV9MT0NLX1RZUEVfVU5MQ0sgMgorCiAvKioKICAqIGVudW0gcDlfcWlkX3QgLSBRSUQgdHlwZXMKICAqIEBQOV9RVERJUjogZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBkMTdmNDdmLi40MDFkNzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTE3NDQsNiArMTc0NCw4IEBACiAgKglieSBkZWZhdWx0IGZvciBwZXJtX2FkZHIuIEluIHRoaXMgY2FzZSwgdGhlIG1hc2sgc2hvdWxkIGJlIHNldCB0bwogICoJYWxsLXplcm9lcy4gSW4gdGhpcyBjYXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGV2aWNlIGNhbiBoYW5kbGUKICAqCXRoZSBzYW1lIG51bWJlciBvZiBhcmJpdHJhcnkgTUFDIGFkZHJlc3Nlcy4KKyAqIEByZWdpc3RlcmVkOiBwcm90ZWN0cyAtPnJlc3VtZSBhbmQgLT5zdXNwZW5kIHN5c2ZzIGNhbGxiYWNrcyBhZ2FpbnN0CisgKgl1bnJlZ2lzdGVyIGhhcmR3YXJlCiAgKiBAZGVidWdmc2RpcjogZGVidWdmcyBkaXJlY3RvcnkgdXNlZCBmb3IgdGhpcyB3aXBoeSwgd2lsbCBiZSByZW5hbWVkCiAgKglhdXRvbWF0aWNhbGx5IG9uIHdpcGh5IHJlbmFtZXMKICAqIEBkZXY6ICh2aXJ0dWFsKSBzdHJ1Y3QgZGV2aWNlIGZvciB0aGlzIHdpcGh5CkBAIC0xODY1LDYgKzE4NjcsOSBAQAogCSAqIHlvdSBuZWVkIHVzZSBzZXRfd2lwaHlfZGV2KCkgKHNlZSBiZWxvdykgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIAorCS8qIHByb3RlY3RzIC0+cmVzdW1lLCAtPnN1c3BlbmQgc3lzZnMgY2FsbGJhY2tzIGFnYWluc3QgdW5yZWdpc3RlciBodyAqLworCWJvb2wgcmVnaXN0ZXJlZDsKKwogCS8qIGRpciBpbiBkZWJ1Z2ZzOiBpZWVlODAyMTEvPHdpcGh5bmFtZT4gKi8KIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggM2I5Mzg3NC4uOTgwODg3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaApAQCAtOCw3ICs4LDcgQEAKICAqIGhhdmUgY2hvc2VuIHRvIGFkb3B0IHRoZSBwcm90b2NvbCBhbmQgb3ZlciB0aGUgeWVhcnMgaXQgaGFzIGJlY29tZSBhCiAgKiBkZS1mYWN0byBzdGFuZGFyZCBmb3IgbGFiZWxlZCBuZXR3b3JraW5nLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggMjllMjU1Ny4uMTNkNTA3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTM3LDcgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlfbWV0cmljczsKIAl1bnNpZ25lZCBsb25nCQlleHBpcmVzOwogCXN0cnVjdCBkc3RfZW50cnkJKnBhdGg7Ci0Jc3RydWN0IG5laWdoYm91cgkqX25laWdoYm91cjsKKwlzdHJ1Y3QgbmVpZ2hib3VyIF9fcmN1CSpfbmVpZ2hib3VyOwogI2lmZGVmIENPTkZJR19YRlJNCiAJc3RydWN0IHhmcm1fc3RhdGUJKnhmcm07CiAjZWxzZQpAQCAtODgsMTIgKzg4LDE3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoYm91ciAqZHN0X2dldF9uZWlnaGJvdXIoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewotCXJldHVybiBkc3QtPl9uZWlnaGJvdXI7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShkc3QtPl9uZWlnaGJvdXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaGJvdXIgKmRzdF9nZXRfbmVpZ2hib3VyX3JhdyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9yYXcoZHN0LT5fbmVpZ2hib3VyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRzdF9zZXRfbmVpZ2hib3VyKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCiB7Ci0JZHN0LT5fbmVpZ2hib3VyID0gbmVpZ2g7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRzdC0+X25laWdoYm91ciwgbmVpZ2gpOwogfQogCiBleHRlcm4gdTMyICpkc3RfY293X21ldHJpY3NfZ2VuZXJpYyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHVuc2lnbmVkIGxvbmcgb2xkKTsKQEAgLTM4Miw4ICszODcsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfY29uZmlybShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7CiAJaWYgKGRzdCkgewotCQlzdHJ1Y3QgbmVpZ2hib3VyICpuID0gZHN0X2dldF9uZWlnaGJvdXIoZHN0KTsKKwkJc3RydWN0IG5laWdoYm91ciAqbjsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCW4gPSBkc3RfZ2V0X25laWdoYm91cihkc3QpOwogCQluZWlnaF9jb25maXJtKG4pOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggY2FhZmY1Zi4uYjg5N2Q2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTIzOCw3ICsyMzgsNyBAQAogewogCV9fdTggZmxhZ3MgPSAwOwogCi0JaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKKwlpZiAoaW5ldF9zayhzayktPnRyYW5zcGFyZW50IHx8IGluZXRfc2soc2spLT5oZHJpbmNsKQogCQlmbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQzsKIAlpZiAoc2stPnNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKQogCQlmbGFncyB8PSBGTE9XSV9GTEFHX1BSRUNPV19NRVRSSUNTOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaCBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKaW5kZXggZjIxYTE2ZS4uZjY3NDQwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCkBAIC00LDcgKzQsNyBAQAogICogVGhlIE5ldExhYmVsIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yawogICogcHJvdG9jb2xzIHN1Y2ggYXMgQ0lQU08gYW5kIFJJUFNPLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NlY3VyZV9zZXEuaCBiL2luY2x1ZGUvbmV0L3NlY3VyZV9zZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdmNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvc2VjdXJlX3NlcS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX05FVF9TRUNVUkVfU0VRCisjZGVmaW5lIF9ORVRfU0VDVVJFX1NFUQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcF9pZChfX2JlMzIgZGFkZHIpOworZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcHY2X2lkKGNvbnN0IF9fYmUzMiBkYWRkcls0XSk7CitleHRlcm4gdTMyIHNlY3VyZV9pcHY0X3BvcnRfZXBoZW1lcmFsKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQpOworZXh0ZXJuIHUzMiBzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX2JlMzIgKnNhZGRyLCBjb25zdCBfX2JlMzIgKmRhZGRyLAorCQkJCSAgICAgIF9fYmUxNiBkcG9ydCk7CitleHRlcm4gX191MzIgc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJCV9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKK2V4dGVybiBfX3UzMiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiAqc2FkZHIsIF9fYmUzMiAqZGFkZHIsCisJCQkJCSAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpOworZXh0ZXJuIHU2NCBzZWN1cmVfZGNjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJICAgICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKK2V4dGVybiB1NjQgc2VjdXJlX2RjY3B2Nl9zZXF1ZW5jZV9udW1iZXIoX19iZTMyICpzYWRkciwgX19iZTMyICpkYWRkciwKKwkJCQkJIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKKworI2VuZGlmIC8qIF9ORVRfU0VDVVJFX1NFUSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmggYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAppbmRleCA2M2U1YjhmLi4wMGRiZmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaApAQCAtOTUsNiArOTUsMTUgQEAKIAkucHJvZF9pZCA9IHsgKHYxKSwgTlVMTCwgTlVMTCwgTlVMTCB9LCBcCiAJLnByb2RfaWRfaGFzaCA9IHsgKHZoMSksIDAsIDAsIDAgfSwgfQogCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX1BST0RfSUQzKG1hbmYsIGNhcmQsIHYzLCB2aDMpIHsgXAorCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfTUFORl9JRHwgXAorCQkJUENNQ0lBX0RFVl9JRF9NQVRDSF9DQVJEX0lEfCBcCisJCQlQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQzLCBcCisJLm1hbmZfaWQgPSAobWFuZiksIFwKKwkuY2FyZF9pZCA9IChjYXJkKSwgXAorCS5wcm9kX2lkID0geyBOVUxMLCBOVUxMLCAodjMpLCBOVUxMIH0sIFwKKwkucHJvZF9pZF9oYXNoID0geyAwLCAwLCAodmgzKSwgMCB9LCB9CisKIAogLyogbXVsdGktZnVuY3Rpb24gZGV2aWNlcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmNfZnJhbWUuaCBiL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCmluZGV4IDRhZDAyMDQuLjgyMjVkODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oCkBAIC03OCw3ICs3OCw2IEBACiB9OwogCiBzdHJ1Y3QgZmNvZV9yY3ZfaW5mbyB7Ci0Jc3RydWN0IHBhY2tldF90eXBlICAqcHR5cGU7CiAJc3RydWN0IGZjX2xwb3J0CSpmcl9kZXY7CS8qIHRyYW5zcG9ydCBsYXllciBwcml2YXRlIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgZmNfc2VxCSpmcl9zZXE7CS8qIGZvciB1c2Ugd2l0aCBleGNoYW5nZSBtYW5hZ2VyICovCiAJc3RydWN0IGZjX2ZjcF9wa3QgKmZyX2ZzcDsJLyogZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZjcCBJL08gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9vc2Rfb3JlLmggYi9pbmNsdWRlL3Njc2kvb3NkX29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YzVlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Njc2kvb3NkX29yZS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExCisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIFB1YmxpYyBEZWNsYXJhdGlvbnMgb2YgdGhlIE9SRSBBUEkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT1JFIChPYmplY3QgUmFpZCBFbmdpbmUpIGxpYnJhcnkuCisgKgorICogT1JFIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gKEdQTCB2MikKKyAqCisgKiBPUkUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoZSBPUkU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpZm5kZWYgX19PUkVfSF9fCisjZGVmaW5lIF9fT1JFX0hfXworCisjaW5jbHVkZSA8c2NzaS9vc2RfaW5pdGlhdG9yLmg+CisjaW5jbHVkZSA8c2NzaS9vc2RfYXR0cmlidXRlcy5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BuZnNfb3NkX3hkci5oPgorCitzdHJ1Y3Qgb3JlX2NvbXAgeworCXN0cnVjdCBvc2Rfb2JqX2lkCW9iajsKKwl1OAkJCWNyZWRbT1NEX0NBUF9MRU5dOworfTsKKworc3RydWN0IG9yZV9sYXlvdXQgeworCS8qIE91ciB3YXkgb2YgbG9va2luZyBhdCB0aGUgZGF0YV9tYXAgKi8KKwl1bnNpZ25lZCBzdHJpcGVfdW5pdDsKKwl1bnNpZ25lZCBtaXJyb3JzX3AxOworCisJdW5zaWduZWQgZ3JvdXBfd2lkdGg7CisJdTY0CSBncm91cF9kZXB0aDsKKwl1bnNpZ25lZCBncm91cF9jb3VudDsKK307CisKK3N0cnVjdCBvcmVfY29tcG9uZW50cyB7CisJdW5zaWduZWQJbnVtZGV2czsJCS8qIE51bSBvZiBkZXZpY2VzIGluIGFycmF5ICAgICovCisJLyogSWYgQHNpbmdsZV9jb21wID09IEVDX1NJTkdMRV9DT01QLCBAY29tcHMgcG9pbnRzIHRvIGEgc2luZ2xlCisJICogY29tcG9uZW50LiBlbHNlIHRoZXJlIGFyZSBAbnVtZGV2cyBjb21wb25lbnRzCisJICovCisJZW51bSBFQ19DT01QX1VTQUdFIHsKKwkJRUNfU0lOR0xFX0NPTVAgPSAwLCBFQ19NVUxUUExFX0NPTVBTID0gMHhmZmZmZmZmZgorCX0JCXNpbmdsZV9jb21wOworCXN0cnVjdCBvcmVfY29tcAkqY29tcHM7CisJc3RydWN0IG9zZF9kZXYJKipvZHM7CQkJLyogb3NkX2RldiBhcnJheSAgICAgICAgICAgICAgKi8KK307CisKK3N0cnVjdCBvcmVfaW9fc3RhdGU7Cit0eXBlZGVmIHZvaWQgKCpvcmVfaW9fZG9uZV9mbikoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB2b2lkICpwcml2YXRlKTsKKworc3RydWN0IG9yZV9pb19zdGF0ZSB7CisJc3RydWN0IGtyZWYJCWtyZWY7CisKKwl2b2lkCQkJKnByaXZhdGU7CisJb3JlX2lvX2RvbmVfZm4JZG9uZTsKKworCXN0cnVjdCBvcmVfbGF5b3V0CSpsYXlvdXQ7CisJc3RydWN0IG9yZV9jb21wb25lbnRzCSpjb21wczsKKworCS8qIEdsb2JhbCByZWFkL3dyaXRlIElPKi8KKwlsb2ZmX3QJCQlvZmZzZXQ7CisJdW5zaWduZWQgbG9uZwkJbGVuZ3RoOworCXZvaWQJCQkqa2Vybl9idWZmOworCisJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CisJdW5zaWduZWQJCW5yX3BhZ2VzOworCXVuc2lnbmVkCQlwZ2Jhc2U7CisJdW5zaWduZWQJCXBhZ2VzX2NvbnN1bWVkOworCisJLyogQXR0cmlidXRlcyAqLworCXVuc2lnbmVkCQlpbl9hdHRyX2xlbjsKKwlzdHJ1Y3Qgb3NkX2F0dHIJCSppbl9hdHRyOworCXVuc2lnbmVkCQlvdXRfYXR0cl9sZW47CisJc3RydWN0IG9zZF9hdHRyCQkqb3V0X2F0dHI7CisKKwlib29sCQkJcmVhZGluZzsKKworCS8qIFZhcmlhYmxlIGFycmF5IG9mIHNpemUgbnVtZGV2cyAqLworCXVuc2lnbmVkIG51bWRldnM7CisJc3RydWN0IG9yZV9wZXJfZGV2X3N0YXRlIHsKKwkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwkJc3RydWN0IGJpbyAqYmlvOworCQlsb2ZmX3Qgb2Zmc2V0OworCQl1bnNpZ25lZCBsZW5ndGg7CisJCXVuc2lnbmVkIGRldjsKKwl9IHBlcl9kZXZbXTsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgb3JlX2lvX3N0YXRlX3NpemUodW5zaWduZWQgbnVtZGV2cykKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBvcmVfaW9fc3RhdGUpICsKKwkJc2l6ZW9mKHN0cnVjdCBvcmVfcGVyX2Rldl9zdGF0ZSkgKiBudW1kZXZzOworfQorCisvKiBvcmUuYyAqLworaW50IG9yZV9nZXRfcndfc3RhdGUoc3RydWN0IG9yZV9sYXlvdXQgKmxheW91dCwgc3RydWN0IG9yZV9jb21wb25lbnRzICpjb21wcywKKwkJICAgICBib29sIGlzX3JlYWRpbmcsIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsCisJCSAgICAgc3RydWN0IG9yZV9pb19zdGF0ZSAqKmlvcyk7CitpbnQgb3JlX2dldF9pb19zdGF0ZShzdHJ1Y3Qgb3JlX2xheW91dCAqbGF5b3V0LCBzdHJ1Y3Qgb3JlX2NvbXBvbmVudHMgKmNvbXBzLAorCQkgICAgIHN0cnVjdCBvcmVfaW9fc3RhdGUgKippb3MpOwordm9pZCBvcmVfcHV0X2lvX3N0YXRlKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcyk7CisKK2ludCBvcmVfY2hlY2tfaW8oc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zLCB1NjQgKnJlc2lkKTsKKworaW50IG9yZV9jcmVhdGUoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKTsKK2ludCBvcmVfcmVtb3ZlKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcyk7CitpbnQgb3JlX3dyaXRlKHN0cnVjdCBvcmVfaW9fc3RhdGUgKmlvcyk7CitpbnQgb3JlX3JlYWQoc3RydWN0IG9yZV9pb19zdGF0ZSAqaW9zKTsKK2ludCBvcmVfdHJ1bmNhdGUoc3RydWN0IG9yZV9sYXlvdXQgKmxheW91dCwgc3RydWN0IG9yZV9jb21wb25lbnRzICpjb21wcywKKwkJIHU2NCBzaXplKTsKKworaW50IGV4dHJhY3RfYXR0cl9mcm9tX2lvcyhzdHJ1Y3Qgb3JlX2lvX3N0YXRlICppb3MsIHN0cnVjdCBvc2RfYXR0ciAqYXR0cik7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKaW5kZXggZDJlYTExMi4uNzI2ZTk0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmgKQEAgLTIzLDggKzIzLDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCiAjZGVmaW5lIFRFQTU3NVhfRk1JRgkxMDcwMAogCkBAIC00MiwxOCArNDIsMjAgQEAKIH07CiAKIHN0cnVjdCBzbmRfdGVhNTc1eCB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CS8qIHZpZGVvIGRldmljZSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmQ7CQkvKiB2aWRlbyBkZXZpY2UgKi8KIAlib29sIHRlYTU3NTk7CQkJLyogNTc1OSBjaGlwIGlzIHByZXNlbnQgKi8KIAlib29sIG11dGU7CQkJLyogRGV2aWNlIGlzIG11dGVkPyAqLwogCWJvb2wgc3RlcmVvOwkJCS8qIHJlY2VpdmluZyBzdGVyZW8gKi8KIAlib29sIHR1bmVkOwkJCS8qIHR1bmVkIHRvIGEgc3RhdGlvbiAqLwogCXVuc2lnbmVkIGludCB2YWw7CQkvKiBodyB2YWx1ZSAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsJCS8qIGZyZXF1ZW5jeSAqLwotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwkJLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlICovCisJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCBzbmRfdGVhNTc1eF9vcHMgKm9wczsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJdTggY2FyZFszMl07CiAJdTggYnVzX2luZm9bMzJdOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7CisJaW50ICgqZXh0X2luaXQpKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKIH07CiAKIGludCBzbmRfdGVhNTc1eF9pbml0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGx2MzIwYWljM3guaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwYWljM3guaAppbmRleCA5OWUwMzA4Li5mZmQ5YmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGFpYzN4LmgKKysrIGIvaW5jbHVkZS9zb3VuZC90bHYzMjBhaWMzeC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFBsYXRmb3JtIGRhdGEgZm9yIFRleGFzIEluc3RydW1lbnRzIFRMVjMyMEFJQzN4IGNvZGVjCiAgKgotICogQXV0aG9yOiBKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+CisgKiBBdXRob3I6IEphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAYml0bWVyLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTE1LmggYi9pbmNsdWRlL3NvdW5kL3dtODk5Ni5oCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIGluY2x1ZGUvc291bmQvd204OTE1LmgKcmVuYW1lIHRvIGluY2x1ZGUvc291bmQvd204OTk2LmgKaW5kZXggNTgxN2Q3Ni4uZWE0ZDg4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93bTg5MTUuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dtODk5Ni5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L3NvdW5kL3dtODkxNS5oIC0tIFBsYXRmb3JtIGRhdGEgZm9yIFdNODkxNQorICogbGludXgvc291bmQvd204OTk2LmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV004OTk2CiAgKgogICogQ29weXJpZ2h0IDIwMTEgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCiAgKgpAQCAtOCwxNCArOCwxNCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2lmbmRlZiBfX0xJTlVYX1NORF9XTTg5MDNfSAotI2RlZmluZSBfX0xJTlVYX1NORF9XTTg5MDNfSAorI2lmbmRlZiBfX0xJTlVYX1NORF9XTTg5OTZfSAorI2RlZmluZSBfX0xJTlVYX1NORF9XTTg5OTZfSAogCi1lbnVtIHdtODkxNV9pbm1vZGUgewotCVdNODkxNV9ESUZGRVJSRU5USUFMXzEgPSAwLCAgIC8qIElOMXhQIC0gSU4xeE4gKi8KLQlXTTg5MTVfSU5WRVJUSU5HID0gMSwgICAgICAgICAvKiBJTjF4TiAqLwotCVdNODkxNV9OT05fSU5WRVJUSU5HID0gMiwgICAgIC8qIElOMXhQICovCi0JV004OTE1X0RJRkZFUkVOVElBTF8yID0gMywgICAgLyogSU4yeFAgLSBJTjJ4UCAqLworZW51bSB3bTg5OTZfaW5tb2RlIHsKKwlXTTg5OTZfRElGRkVSUkVOVElBTF8xID0gMCwgICAvKiBJTjF4UCAtIElOMXhOICovCisJV004OTk2X0lOVkVSVElORyA9IDEsICAgICAgICAgLyogSU4xeE4gKi8KKwlXTTg5OTZfTk9OX0lOVkVSVElORyA9IDIsICAgICAvKiBJTjF4UCAqLworCVdNODk5Nl9ESUZGRVJFTlRJQUxfMiA9IDMsICAgIC8qIElOMnhQIC0gSU4yeFAgKi8KIH07CiAKIC8qKgpAQCAtMjUsMjMgKzI1LDIzIEBACiAgKiBDb25maWd1cmF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBSZVR1bmUgTW9iaWxlCiAgKiBjb250cm9sIHBhbmVsIGluIFdJU0NFIC0gc2VlIGh0dHA6Ly93d3cud29sZnNvbm1pY3JvLmNvbS93aXNjZS8KICAqLwotc3RydWN0IHdtODkxNV9yZXR1bmVfbW9iaWxlX2NvbmZpZyB7CitzdHJ1Y3Qgd204OTk2X3JldHVuZV9tb2JpbGVfY29uZmlnIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCByYXRlOwogCXUxNiByZWdzWzIwXTsKIH07CiAKLSNkZWZpbmUgV004OTE1X1NFVF9ERUZBVUxUIDB4MTAwMDAKKyNkZWZpbmUgV004OTk2X1NFVF9ERUZBVUxUIDB4MTAwMDAKIAotc3RydWN0IHdtODkxNV9wZGF0YSB7CitzdHJ1Y3Qgd204OTk2X3BkYXRhIHsKIAlpbnQgaXJxX2ZsYWdzOyAgLyoqIFNldCBJUlEgdHJpZ2dlciBmbGFnczsgZGVmYXVsdCBhY3RpdmUgbG93ICovCiAKIAlpbnQgbGRvX2VuYTsgIC8qKiBHUElPIGZvciBMRE8xOyAtMSBmb3Igbm9uZSAqLwogCiAJaW50IG1pY2RldF9kZWY7ICAvKiogRGVmYXVsdCBNSUNERVRfU1JDL0hQMUZCX1NSQy9NSUNEX0JJQVMgKi8KIAotCWVudW0gd204OTE1X2lubW9kZSBpbmxfbW9kZTsKLQllbnVtIHdtODkxNV9pbm1vZGUgaW5yX21vZGU7CisJZW51bSB3bTg5OTZfaW5tb2RlIGlubF9tb2RlOworCWVudW0gd204OTk2X2lubW9kZSBpbnJfbW9kZTsKIAogCXUzMiBzcGttdXRlX3NlcTsgIC8qKiBWYWx1ZSBmb3IgcmVnaXN0ZXIgMHg4MDIgKi8KIApAQCAtNDksNyArNDksNyBAQAogCXUzMiBncGlvX2RlZmF1bHRbNV07CiAKIAlpbnQgbnVtX3JldHVuZV9tb2JpbGVfY2ZnczsKLQlzdHJ1Y3Qgd204OTE1X3JldHVuZV9tb2JpbGVfY29uZmlnICpyZXR1bmVfbW9iaWxlX2NmZ3M7CisJc3RydWN0IHdtODk5Nl9yZXR1bmVfbW9iaWxlX2NvbmZpZyAqcmV0dW5lX21vYmlsZV9jZmdzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmgKaW5kZXggMmRlOGZlOS4uMTI2YzY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaApAQCAtMjcsNiArMjcsMTIgQEAKIAlpbnQgKCp0cGdfY2hlY2tfZGVtb19tb2RlX2NhY2hlKShzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICopOwogCWludCAoKnRwZ19jaGVja19kZW1vX21vZGVfd3JpdGVfcHJvdGVjdCkoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqKTsKIAlpbnQgKCp0cGdfY2hlY2tfcHJvZF9tb2RlX3dyaXRlX3Byb3RlY3QpKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKik7CisJLyoKKwkgKiBPcHRpb25hbGx5IHVzZWQgYnkgZmFicmljcyB0byBhbGxvdyBkZW1vLW1vZGUgbG9naW4sIGJ1dCBub3QKKwkgKiBleHBvc2UgYW55IFRQRyBMVU5zLCBhbmQgcmV0dXJuICdub3QgY29ubmVjdGVkJyBpbiBzdGFuZGFyZAorCSAqIGlucXVpcnkgcmVzcG9uc2UKKwkgKi8KKwlpbnQgKCp0cGdfY2hlY2tfZGVtb19tb2RlX2xvZ2luX29ubHkpKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKik7CiAJc3RydWN0IHNlX25vZGVfYWNsICooKnRwZ19hbGxvY19mYWJyaWNfYWNsKSgKIAkJCQkJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqKTsKIAl2b2lkICgqdHBnX3JlbGVhc2VfZmFicmljX2FjbCkoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggYmYzNjY1NC4uMDVjNWU2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAorI2RlZmluZSBSV0JTX0xFTgk4CisKIERFQ0xBUkVfRVZFTlRfQ0xBU1MoYmxvY2tfcnFfd2l0aF9lcnJvciwKIAogCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLApAQCAtMTksNyArMjEsNyBAQAogCQlfX2ZpZWxkKCAgc2VjdG9yX3QsCXNlY3RvcgkJCSkKIAkJX19maWVsZCggIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCQkpCiAJCV9fZmllbGQoICBpbnQsCQllcnJvcnMJCQkpCi0JCV9fYXJyYXkoICBjaGFyLAkJcndicywJNgkJKQorCQlfX2FycmF5KCAgY2hhciwJCXJ3YnMsCVJXQlNfTEVOCSkKIAkJX19keW5hbWljX2FycmF5KCBjaGFyLAljbWQsCWJsa19jbWRfYnVmX2xlbihycSkJKQogCSksCiAKQEAgLTEwNCw3ICsxMDYsNyBAQAogCQlfX2ZpZWxkKCAgc2VjdG9yX3QsCXNlY3RvcgkJCSkKIAkJX19maWVsZCggIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCQkpCiAJCV9fZmllbGQoICB1bnNpZ25lZCBpbnQsCWJ5dGVzCQkJKQotCQlfX2FycmF5KCAgY2hhciwJCXJ3YnMsCTYJCSkKKwkJX19hcnJheSggIGNoYXIsCQlyd2JzLAlSV0JTX0xFTgkpCiAJCV9fYXJyYXkoICBjaGFyLCAgICAgICAgIGNvbW0sICAgVEFTS19DT01NX0xFTiAgICkKIAkJX19keW5hbWljX2FycmF5KCBjaGFyLAljbWQsCWJsa19jbWRfYnVmX2xlbihycSkJKQogCSksCkBAIC0xODMsNyArMTg1LDcgQEAKIAkJX19maWVsZCggZGV2X3QsCQlkZXYJCQkpCiAJCV9fZmllbGQoIHNlY3Rvcl90LAlzZWN0b3IJCQkpCiAJCV9fZmllbGQoIHVuc2lnbmVkIGludCwJbnJfc2VjdG9yCQkpCi0JCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CQkpCisJCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAlSV0JTX0xFTgkpCiAJCV9fYXJyYXkoIGNoYXIsCQljb21tLAlUQVNLX0NPTU1fTEVOCSkKIAkpLAogCkBAIC0yMjIsNyArMjI0LDcgQEAKIAkJX19maWVsZCggc2VjdG9yX3QsCXNlY3RvcgkJKQogCQlfX2ZpZWxkKCB1bnNpZ25lZCwJbnJfc2VjdG9yCSkKIAkJX19maWVsZCggaW50LAkJZXJyb3IJCSkKLQkJX19hcnJheSggY2hhciwJCXJ3YnMsCTYJKQorCQlfX2FycmF5KCBjaGFyLAkJcndicywJUldCU19MRU4pCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtMjQ5LDcgKzI1MSw3IEBACiAJCV9fZmllbGQoIGRldl90LAkJZGV2CQkJKQogCQlfX2ZpZWxkKCBzZWN0b3JfdCwJc2VjdG9yCQkJKQogCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkJKQotCQlfX2FycmF5KCBjaGFyLAkJcndicywJNgkJKQorCQlfX2FycmF5KCBjaGFyLAkJcndicywJUldCU19MRU4JKQogCQlfX2FycmF5KCBjaGFyLAkJY29tbSwJVEFTS19DT01NX0xFTgkpCiAJKSwKIApAQCAtMzIxLDcgKzMyMyw3IEBACiAJCV9fZmllbGQoIGRldl90LAkJZGV2CQkJKQogCQlfX2ZpZWxkKCBzZWN0b3JfdCwJc2VjdG9yCQkJKQogCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkJKQotCQlfX2FycmF5KCBjaGFyLAkJcndicywJNgkJKQorCQlfX2FycmF5KCBjaGFyLAkJcndicywJUldCU19MRU4JKQogCQlfX2FycmF5KCBjaGFyLAkJY29tbSwJVEFTS19DT01NX0xFTgkpCiAgICAgICAgICksCiAKQEAgLTQ1Niw3ICs0NTgsNyBAQAogCQlfX2ZpZWxkKCBkZXZfdCwJCWRldgkJCQkpCiAJCV9fZmllbGQoIHNlY3Rvcl90LAlzZWN0b3IJCQkJKQogCQlfX2ZpZWxkKCBzZWN0b3JfdCwJbmV3X3NlY3RvcgkJCSkKLQkJX19hcnJheSggY2hhciwJCXJ3YnMsCQk2CQkpCisJCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAkJUldCU19MRU4JKQogCQlfX2FycmF5KCBjaGFyLAkJY29tbSwJCVRBU0tfQ09NTV9MRU4JKQogCSksCiAKQEAgLTQ5OCw3ICs1MDAsNyBAQAogCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkpCiAJCV9fZmllbGQoIGRldl90LAkJb2xkX2RldgkJKQogCQlfX2ZpZWxkKCBzZWN0b3JfdCwJb2xkX3NlY3RvcgkpCi0JCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CSkKKwkJX19hcnJheSggY2hhciwJCXJ3YnMsCVJXQlNfTEVOKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTU0Miw3ICs1NDQsNyBAQAogCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkpCiAJCV9fZmllbGQoIGRldl90LAkJb2xkX2RldgkJKQogCQlfX2ZpZWxkKCBzZWN0b3JfdCwJb2xkX3NlY3RvcgkpCi0JCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CSkKKwkJX19hcnJheSggY2hhciwJCXJ3YnMsCVJXQlNfTEVOKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAppbmRleCA2MzYzMTkzLi5iNTBhNTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCkBAIC0yMyw3ICsyMyw3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKIAkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKLQkJX19maWVsZCgJdW1vZGVfdCwgbW9kZQkJCSkKKwkJX19maWVsZCgJX191MTYsIG1vZGUJCQkpCiAJCV9fZmllbGQoCXVpZF90LAl1aWQJCQkpCiAJCV9fZmllbGQoCWdpZF90LAlnaWQJCQkpCiAJCV9fZmllbGQoCV9fdTY0LCBibG9ja3MJCQkpCkBAIC01Miw3ICs1Miw3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKIAkJX19maWVsZCgJaW5vX3QsCWRpcgkJCSkKLQkJX19maWVsZCgJdW1vZGVfdCwgbW9kZQkJCSkKKwkJX19maWVsZCgJX191MTYsIG1vZGUJCQkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtNzUsNyArNzUsNyBAQAogCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQogCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQogCQlfX2ZpZWxkKAlpbm9fdCwJZGlyCQkJKQotCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJbW9kZQkJCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC03MjUsNyArNzI1LDcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQogCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQotCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJbW9kZQkJCSkKIAkJX19maWVsZCgJX191NjQsCWJsb2NrCQkJKQogCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAljb3VudAkJKQogCQlfX2ZpZWxkKAlpbnQsCWZsYWdzCQkJKQpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQogCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQotCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJbW9kZQkJCSkKIAkJX19maWVsZCgJaW50LAlpc19tZXRhZGF0YQkJKQogCQlfX2ZpZWxkKAlfX3U2NCwJYmxvY2sJCQkpCiAJKSwKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKIAkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKLQkJX19maWVsZCgJdW1vZGVfdCwgbW9kZQkJCSkKKwkJX19maWVsZCgJX191MTYsCW1vZGUJCQkpCiAJCV9fZmllbGQoCV9fdTY0LAlpX2Jsb2NrcwkJKQogCQlfX2ZpZWxkKAlpbnQsCXVzZWRfYmxvY2tzCQkpCiAJCV9fZmllbGQoCWludCwJcmVzZXJ2ZWRfZGF0YV9ibG9ja3MJKQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQogCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQotCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwgIG1vZGUJCQkpCiAJCV9fZmllbGQoCV9fdTY0LAlpX2Jsb2NrcwkJKQogCQlfX2ZpZWxkKAlpbnQsCW1kX25lZWRlZAkJKQogCQlfX2ZpZWxkKAlpbnQsCXJlc2VydmVkX2RhdGFfYmxvY2tzCSkKQEAgLTExMTAsNyArMTExMCw3IEBACiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKIAkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKLQkJX19maWVsZCgJdW1vZGVfdCwgbW9kZQkJCSkKKwkJX19maWVsZCgJX191MTYsICBtb2RlCQkJKQogCQlfX2ZpZWxkKAlfX3U2NCwJaV9ibG9ja3MJCSkKIAkJX19maWVsZCgJaW50LAlmcmVlZF9ibG9ja3MJCSkKIAkJX19maWVsZCgJaW50LAlyZXNlcnZlZF9kYXRhX2Jsb2NrcwkpCkBAIC0xNTE4LDYgKzE1MTgsNzcgQEAKIAkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vKQogKTsKIAorVFJBQ0VfRVZFTlQoZXh0NF9qb3VybmFsX3N0YXJ0LAorCVRQX1BST1RPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuYmxvY2tzLCB1bnNpZ25lZCBsb25nIElQKSwKKworCVRQX0FSR1Moc2IsIG5ibG9ja3MsIElQKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCSAgaW50LCAJbmJsb2NrcwkJCSkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLAlpcAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkgPSBzYi0+c19kZXY7CisJCV9fZW50cnktPm5ibG9ja3MgPSBuYmxvY2tzOworCQlfX2VudHJ5LT5pcAkgPSBJUDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgbmJsb2NrcyAlZCBjYWxsZXIgJXBGIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPm5ibG9ja3MsICh2b2lkICopX19lbnRyeS0+aXApCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKGV4dDRfX3RyaW0sCisJVFBfUFJPVE8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJIGV4dDRfZ3JvdXBfdCBncm91cCwKKwkJIGV4dDRfZ3JwYmxrX3Qgc3RhcnQsCisJCSBleHQ0X2dycGJsa190IGxlbiksCisKKwlUUF9BUkdTKHNiLCBncm91cCwgc3RhcnQsIGxlbiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCWRldl9tYWpvcgkJKQorCQlfX2ZpZWxkKAlpbnQsCWRldl9taW5vcgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCWdyb3VwCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXN0YXJ0CQkJKQorCQlfX2ZpZWxkKAlpbnQsCWxlbgkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldl9tYWpvcgk9IE1BSk9SKHNiLT5zX2Rldik7CisJCV9fZW50cnktPmRldl9taW5vcgk9IE1JTk9SKHNiLT5zX2Rldik7CisJCV9fZW50cnktPmdyb3VwCQk9IGdyb3VwOworCQlfX2VudHJ5LT5zdGFydAkJPSBzdGFydDsKKwkJX19lbnRyeS0+bGVuCQk9IGxlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgZ3JvdXAgJXUsIHN0YXJ0ICVkLCBsZW4gJWQiLAorCQkgIF9fZW50cnktPmRldl9tYWpvciwgX19lbnRyeS0+ZGV2X21pbm9yLAorCQkgIF9fZW50cnktPmdyb3VwLCBfX2VudHJ5LT5zdGFydCwgX19lbnRyeS0+bGVuKQorKTsKKworREVGSU5FX0VWRU5UKGV4dDRfX3RyaW0sIGV4dDRfdHJpbV9leHRlbnQsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkgZXh0NF9ncm91cF90IGdyb3VwLAorCQkgZXh0NF9ncnBibGtfdCBzdGFydCwKKwkJIGV4dDRfZ3JwYmxrX3QgbGVuKSwKKworCVRQX0FSR1Moc2IsIGdyb3VwLCBzdGFydCwgbGVuKQorKTsKKworREVGSU5FX0VWRU5UKGV4dDRfX3RyaW0sIGV4dDRfdHJpbV9hbGxfZnJlZSwKKworCVRQX1BST1RPKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCSBleHQ0X2dyb3VwX3QgZ3JvdXAsCisJCSBleHQ0X2dycGJsa190IHN0YXJ0LAorCQkgZXh0NF9ncnBibGtfdCBsZW4pLAorCisJVFBfQVJHUyhzYiwgZ3JvdXAsIHN0YXJ0LCBsZW4pCispOworCiAjZW5kaWYgLyogX1RSQUNFX0VYVDRfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCBiZjE2NTQ1Li43NTk2NDQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC0yNiw4ICsyNiw4IEBACiAJCV9fZW50cnktPnJlc3VsdAkJPSByZXN1bHQ7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIHJlc3VsdCAlZCIsCi0JCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT5yZXN1bHQpCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgcmVzdWx0ICVkIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT5yZXN1bHQpCiApOwogCiBERUNMQVJFX0VWRU5UX0NMQVNTKGpiZDJfY29tbWl0LApAQCAtNDgsOSArNDgsOSBAQAogCQlfX2VudHJ5LT50cmFuc2FjdGlvbgk9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF90aWQ7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIHRyYW5zYWN0aW9uICVkIHN5bmMgJWQiLAotCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dHJhbnNhY3Rpb24sCi0JCSAgX19lbnRyeS0+c3luY19jb21taXQpCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgdHJhbnNhY3Rpb24gJWQgc3luYyAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT50cmFuc2FjdGlvbiwgX19lbnRyeS0+c3luY19jb21taXQpCiApOwogCiBERUZJTkVfRVZFTlQoamJkMl9jb21taXQsIGpiZDJfc3RhcnRfY29tbWl0LApAQCAtMTAwLDkgKzEwMCw5IEBACiAJCV9fZW50cnktPmhlYWQJCT0gam91cm5hbC0+al90YWlsX3NlcXVlbmNlOwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyB0cmFuc2FjdGlvbiAlZCBzeW5jICVkIGhlYWQgJWQiLAotCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dHJhbnNhY3Rpb24sCi0JCSAgX19lbnRyeS0+c3luY19jb21taXQsIF9fZW50cnktPmhlYWQpCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgdHJhbnNhY3Rpb24gJWQgc3luYyAlZCBoZWFkICVkIiwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAorCQkgIF9fZW50cnktPnRyYW5zYWN0aW9uLCBfX2VudHJ5LT5zeW5jX2NvbW1pdCwgX19lbnRyeS0+aGVhZCkKICk7CiAKIFRSQUNFX0VWRU5UKGpiZDJfc3VibWl0X2lub2RlX2RhdGEsCkBAIC0xMjAsOCArMTIwLDkgQEAKIAkJX19lbnRyeS0+aW5vCT0gaW5vZGUtPmlfaW5vOwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8pCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgaW5vICVsdSIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoamJkMl9ydW5fc3RhdHMsCkBAIC0xNTYsOSArMTU3LDkgQEAKIAkJX19lbnRyeS0+YmxvY2tzX2xvZ2dlZAk9IHN0YXRzLT5yc19ibG9ja3NfbG9nZ2VkOwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyB0aWQgJWx1IHdhaXQgJXUgcnVubmluZyAldSBsb2NrZWQgJXUgZmx1c2hpbmcgJXUgIgorCVRQX3ByaW50aygiZGV2ICVkLCVkIHRpZCAlbHUgd2FpdCAldSBydW5uaW5nICV1IGxvY2tlZCAldSBmbHVzaGluZyAldSAiCiAJCSAgImxvZ2dpbmcgJXUgaGFuZGxlX2NvdW50ICV1IGJsb2NrcyAldSBibG9ja3NfbG9nZ2VkICV1IiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRpZCwKKwkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT50aWQsCiAJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT53YWl0KSwKIAkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPnJ1bm5pbmcpLAogCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+bG9ja2VkKSwKQEAgLTE5Miw5ICsxOTMsOSBAQAogCQlfX2VudHJ5LT5kcm9wcGVkCT0gc3RhdHMtPmNzX2Ryb3BwZWQ7CiAJKSwKIAotCVRQX3ByaW50aygiZGV2ICVzIHRpZCAlbHUgY2hwX3RpbWUgJXUgZm9yY2VkX3RvX2Nsb3NlICV1ICIKKwlUUF9wcmludGsoImRldiAlZCwlZCB0aWQgJWx1IGNocF90aW1lICV1IGZvcmNlZF90b19jbG9zZSAldSAiCiAJCSAgIndyaXR0ZW4gJXUgZHJvcHBlZCAldSIsCi0JCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCBfX2VudHJ5LT50aWQsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAogCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+Y2hwX3RpbWUpLAogCQkgIF9fZW50cnktPmZvcmNlZF90b19jbG9zZSwgX19lbnRyeS0+d3JpdHRlbiwgX19lbnRyeS0+ZHJvcHBlZCkKICk7CkBAIC0yMjIsOSArMjIzLDEwIEBACiAJCV9fZW50cnktPmZyZWVkCQk9IGZyZWVkOwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBmcm9tICV1IHRvICV1IG9mZnNldCAlbHUgZnJlZWQgJWx1IiwKLQkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRhaWxfc2VxdWVuY2UsCi0JCSAgX19lbnRyeS0+Zmlyc3RfdGlkLCBfX2VudHJ5LT5ibG9ja19uciwgX19lbnRyeS0+ZnJlZWQpCisJVFBfcHJpbnRrKCJkZXYgJWQsJWQgZnJvbSAldSB0byAldSBvZmZzZXQgJWx1IGZyZWVkICVsdSIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT50YWlsX3NlcXVlbmNlLCBfX2VudHJ5LT5maXJzdF90aWQsCisJCSAgX19lbnRyeS0+YmxvY2tfbnIsIF9fZW50cnktPmZyZWVkKQogKTsKIAogI2VuZGlmIC8qIF9UUkFDRV9KQkQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vb21hcGRzcy5oIGIvaW5jbHVkZS92aWRlby9vbWFwZHNzLmgKaW5kZXggODkyYjk3Zi4uM2I1NWVmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9vbWFwZHNzLmgKKysrIGIvaW5jbHVkZS92aWRlby9vbWFwZHNzLmgKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBESVNQQ19JUlFfRlJBTUVET05FCQkoMSA8PCAwKQogI2RlZmluZSBESVNQQ19JUlFfVlNZTkMJCQkoMSA8PCAxKQpAQCAtMTM2LDEyICsxMzQsNiBAQAogCU9NQVBfRFNTX0RJU1BMQVlfQ0FQX1RFQVJfRUxJTQkJPSAxIDw8IDEsCiB9OwogCi1lbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHsKLQlPTUFQX0RTU19VUERBVEVfRElTQUJMRUQgPSAwLAotCU9NQVBfRFNTX1VQREFURV9BVVRPLAotCU9NQVBfRFNTX1VQREFURV9NQU5VQUwsCi19OwotCiBlbnVtIG9tYXBfZHNzX2Rpc3BsYXlfc3RhdGUgewogCU9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQgPSAwLAogCU9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFLApAQCAtMjQ2LDcgKzIzOCw3IEBACiAKIC8qIEJvYXJkIHNwZWNpZmljIGRhdGEgKi8KIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIHsKLQlpbnQgKCpnZXRfbGFzdF9vZmZfb25fdHJhbnNhY3Rpb25faWQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqZGV2KTsKIAlpbnQgbnVtX2RldmljZXM7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqKmRldmljZXM7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGVmYXVsdF9kZXZpY2U7CkBAIC0yNjYsOCArMjU4LDYgQEAKIHN0cnVjdCBvbWFwX2Rpc3BsYXlfcGxhdGZvcm1fZGF0YSB7CiAJc3RydWN0IG9tYXBfZHNzX2JvYXJkX2luZm8gKmJvYXJkX2RhdGE7CiAJLyogVE9ETzogQWRkaXRpb25hbCBtZW1iZXJzIHRvIGJlIGFkZGVkIHdoZW4gUE0gaXMgY29uc2lkZXJlZCAqLwotCi0JYm9vbCAoKm9wdF9jbG9ja19hdmFpbGFibGUpKGNvbnN0IGNoYXIgKmNsa19yb2xlKTsKIH07CiAKIHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgewpAQCAtMzAwLDYgKzI5MCwxMiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3Mgb21hcF9kc3NfbnRzY190aW1pbmdzOwogI2VuZGlmCiAKK3N0cnVjdCBvbWFwX2Rzc19jcHJfY29lZnMgeworCXMxNiByciwgcmcsIHJiOworCXMxNiBnciwgZ2csIGdiOworCXMxNiBiciwgYmcsIGJiOworfTsKKwogc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvIHsKIAlib29sIGVuYWJsZWQ7CiAKQEAgLTM1OSw2ICszNTUsOSBAQAogCWJvb2wgdHJhbnNfZW5hYmxlZDsKIAogCWJvb2wgYWxwaGFfZW5hYmxlZDsKKworCWJvb2wgY3ByX2VuYWJsZTsKKwlzdHJ1Y3Qgb21hcF9kc3NfY3ByX2NvZWZzIGNwcl9jb2VmczsKIH07CiAKIHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciB7CkBAIC01MjYsMTEgKzUyNSw2IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5KTsKIAlpbnQgKCpydW5fdGVzdCkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSwgaW50IHRlc3QpOwogCi0JaW50ICgqc2V0X3VwZGF0ZV9tb2RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlKTsKLQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKSgKLQkJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KIAlpbnQgKCp1cGRhdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKIAkJCSAgICAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCk7CiAJaW50ICgqc3luYykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggZDcyMTFmYS4uOWM1MWVlNyAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTM2OSw5ICszNjksMTIgQEAKIAlpbml0X2lkbGVfYm9vdHVwX3Rhc2soY3VycmVudCk7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCXNjaGVkdWxlKCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7CisKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSBjYW4gZW5hYmxlIHVzZXIgbW9kZSBoZWxwZXIgZnVuY3Rpb25hbGl0eSAqLworCXVzZXJtb2RlaGVscGVyX2VuYWJsZSgpOwogCiAJLyogQ2FsbCBpbnRvIGNwdV9pZGxlIHdpdGggcHJlZW1wdCBkaXNhYmxlZCAqLworCXByZWVtcHRfZGlzYWJsZSgpOwogCWNwdV9pZGxlKCk7CiB9CiAKQEAgLTcxNSw3ICs3MTgsNyBAQAogewogCWNwdXNldF9pbml0X3NtcCgpOwogCXVzZXJtb2RlaGVscGVyX2luaXQoKTsKLQlpbml0X3RtcGZzKCk7CisJc2htZW1faW5pdCgpOwogCWRyaXZlcl9pbml0KCk7CiAJaW5pdF9pcnFfcHJvYygpOwogCWRvX2N0b3JzKCk7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggM2Y1YjE0My4uMDJlY2YyYyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMTA1LDkgKzEwNSwxNiBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19pbml0IHNobV9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaXBjX25zX2luaXQodm9pZCkKIHsKIAlzaG1faW5pdF9ucygmaW5pdF9pcGNfbnMpOworCXJldHVybiAwOworfQorCitwdXJlX2luaXRjYWxsKGlwY19uc19pbml0KTsKKwordm9pZCBfX2luaXQgc2htX2luaXQgKHZvaWQpCit7CiAJaXBjX2luaXRfcHJvY19pbnRlcmZhY2UoInN5c3ZpcGMvc2htIiwKICNpZiBCSVRTX1BFUl9MT05HIDw9IDMyCiAJCQkJIiAgICAgICBrZXkgICAgICBzaG1pZCBwZXJtcyAgICAgICBzaXplICBjcGlkICBscGlkIG5hdHRjaCAgIHVpZCAgIGdpZCAgY3VpZCAgY2dpZCAgICAgIGF0aW1lICAgICAgZHRpbWUgICAgICBjdGltZSAgICAgICAgcnNzICAgICAgIHN3YXBcbiIsCkBAIC0xMzEsNiArMTM4LDEyIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3Qgc2htaWRfa2VybmVsLCBzaG1fcGVybSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG1fbG9ja19ieV9wdHIoc3RydWN0IHNobWlkX2tlcm5lbCAqaXBjcCkKK3sKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3Bpbl9sb2NrKCZpcGNwLT5zaG1fcGVybS5sb2NrKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaG1fbG9ja19jaGVjayhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCiAJCQkJCQlpbnQgaWQpCiB7CkBAIC0yMzEsNzYgKzI0NCw4MCBAQAogCXVwX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CiB9CiAKKy8qIENhbGxlZCB3aXRoIG5zLT5zaG1faWRzKG5zKS5yd19tdXRleCBsb2NrZWQgKi8KIHN0YXRpYyBpbnQgc2htX3RyeV9kZXN0cm95X2N1cnJlbnQoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpucyA9IGRhdGE7Ci0Jc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwID0gc2htX2xvY2sobnMsIGlkKTsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IHA7CisJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKIAotCWlmIChJU19FUlIoc2hwKSkKKwlpZiAoc2hwLT5zaG1fY3JlYXRvciAhPSBjdXJyZW50KQogCQlyZXR1cm4gMDsKIAotCWlmIChzaHAtPnNobV9jcHJpZCAhPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKSB7Ci0JCXNobV91bmxvY2soc2hwKTsKLQkJcmV0dXJuIDA7Ci0JfQorCS8qCisJICogTWFyayBpdCBhcyBvcnBoYW5lZCB0byBkZXN0cm95IHRoZSBzZWdtZW50IHdoZW4KKwkgKiBrZXJuZWwuc2htX3JtaWRfZm9yY2VkIGlzIGNoYW5nZWQuCisJICogSXQgaXMgbm9vcCBpZiB0aGUgZm9sbG93aW5nIHNobV9tYXlfZGVzdHJveSgpIHJldHVybnMgdHJ1ZS4KKwkgKi8KKwlzaHAtPnNobV9jcmVhdG9yID0gTlVMTDsKIAotCWlmIChzaG1fbWF5X2Rlc3Ryb3kobnMsIHNocCkpCisJLyoKKwkgKiBEb24ndCBldmVuIHRyeSB0byBkZXN0cm95IGl0LiAgSWYgc2htX3JtaWRfZm9yY2VkPTAgYW5kIElQQ19STUlECisJICogaXMgbm90IHNldCwgaXQgc2hvdWxkbid0IGJlIGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlpZiAoIW5zLT5zaG1fcm1pZF9mb3JjZWQpCisJCXJldHVybiAwOworCisJaWYgKHNobV9tYXlfZGVzdHJveShucywgc2hwKSkgeworCQlzaG1fbG9ja19ieV9wdHIoc2hwKTsKIAkJc2htX2Rlc3Ryb3kobnMsIHNocCk7Ci0JZWxzZQotCQlzaG1fdW5sb2NrKHNocCk7CisJfQogCXJldHVybiAwOwogfQogCisvKiBDYWxsZWQgd2l0aCBucy0+c2htX2lkcyhucykucndfbXV0ZXggbG9ja2VkICovCiBzdGF0aWMgaW50IHNobV90cnlfZGVzdHJveV9vcnBoYW5lZChpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zID0gZGF0YTsKLQlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHAgPSBzaG1fbG9jayhucywgaWQpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQotCWlmIChJU19FUlIoc2hwKSkKLQkJcmV0dXJuIDA7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AgPSBwOworCXN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocCA9IGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3Qgc2htaWRfa2VybmVsLCBzaG1fcGVybSk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gZGVzdHJveSBzZWdtZW50cyB3aXRob3V0IHVzZXJzIGFuZCB3aXRoIGFscmVhZHkKIAkgKiBleGl0J2VkIG9yaWdpbmF0aW5nIHByb2Nlc3MuCiAJICoKLQkgKiBYWFg6IHRoZSBvcmlnaW5hdGluZyBwcm9jZXNzIG1heSBleGlzdCBpbiBhbm90aGVyIHBpZCBuYW1lc3BhY2UuCisJICogQXMgc2hwLT4qIGFyZSBjaGFuZ2VkIHVuZGVyIHJ3X211dGV4LCBpdCdzIHNhZmUgdG8gc2tpcCBzaHAgbG9ja2luZy4KIAkgKi8KLQl0YXNrID0gZmluZF90YXNrX2J5X3ZwaWQoc2hwLT5zaG1fY3ByaWQpOwotCWlmICh0YXNrICE9IE5VTEwpIHsKLQkJc2htX3VubG9jayhzaHApOworCWlmIChzaHAtPnNobV9jcmVhdG9yICE9IE5VTEwpCiAJCXJldHVybiAwOwotCX0KIAotCWlmIChzaG1fbWF5X2Rlc3Ryb3kobnMsIHNocCkpCisJaWYgKHNobV9tYXlfZGVzdHJveShucywgc2hwKSkgeworCQlzaG1fbG9ja19ieV9wdHIoc2hwKTsKIAkJc2htX2Rlc3Ryb3kobnMsIHNocCk7Ci0JZWxzZQotCQlzaG1fdW5sb2NrKHNocCk7CisJfQogCXJldHVybiAwOwogfQogCiB2b2lkIHNobV9kZXN0cm95X29ycGhhbmVkKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucykKIHsKIAlkb3duX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7Ci0JaWRyX2Zvcl9lYWNoKCZzaG1faWRzKG5zKS5pcGNzX2lkciwgJnNobV90cnlfZGVzdHJveV9vcnBoYW5lZCwgbnMpOworCWlmIChzaG1faWRzKG5zKS5pbl91c2UpCisJCWlkcl9mb3JfZWFjaCgmc2htX2lkcyhucykuaXBjc19pZHIsICZzaG1fdHJ5X2Rlc3Ryb3lfb3JwaGFuZWQsIG5zKTsKIAl1cF93cml0ZSgmc2htX2lkcyhucykucndfbXV0ZXgpOwogfQogCiAKIHZvaWQgZXhpdF9zaG0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBuc3Byb3h5ICpuc3AgPSB0YXNrLT5uc3Byb3h5OwotCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpuczsKKwlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMgPSB0YXNrLT5uc3Byb3h5LT5pcGNfbnM7CiAKLQlpZiAoIW5zcCkKLQkJcmV0dXJuOwotCW5zID0gbnNwLT5pcGNfbnM7Ci0JaWYgKCFucyB8fCAhbnMtPnNobV9ybWlkX2ZvcmNlZCkKKwlpZiAoc2htX2lkcyhucykuaW5fdXNlID09IDApCiAJCXJldHVybjsKIAogCS8qIERlc3Ryb3kgYWxsIGFscmVhZHkgY3JlYXRlZCBzZWdtZW50cywgYnV0IG5vdCBtYXBwZWQgeWV0ICovCiAJZG93bl93cml0ZSgmc2htX2lkcyhucykucndfbXV0ZXgpOwotCWlkcl9mb3JfZWFjaCgmc2htX2lkcyhucykuaXBjc19pZHIsICZzaG1fdHJ5X2Rlc3Ryb3lfY3VycmVudCwgbnMpOworCWlmIChzaG1faWRzKG5zKS5pbl91c2UpCisJCWlkcl9mb3JfZWFjaCgmc2htX2lkcyhucykuaXBjc19pZHIsICZzaG1fdHJ5X2Rlc3Ryb3lfY3VycmVudCwgbnMpOwogCXVwX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CiB9CiAKQEAgLTQ5NCw2ICs1MTEsNyBAQAogCXNocC0+c2htX3NlZ3N6ID0gc2l6ZTsKIAlzaHAtPnNobV9uYXR0Y2ggPSAwOwogCXNocC0+c2htX2ZpbGUgPSBmaWxlOworCXNocC0+c2htX2NyZWF0b3IgPSBjdXJyZW50OwogCS8qCiAJICogc2htaWQgZ2V0cyByZXBvcnRlZCBhcyAiaW5vZGUjIiBpbiAvcHJvYy9waWQvbWFwcy4KIAkgKiBwcm9jLXBzIHRvb2xzIHVzZSB0aGlzLiBDaGFuZ2luZyB0aGlzIHdpbGwgYnJlYWsgdGhlbS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCBkMDY0NjdmLi5lY2E1OTVlIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiAJICAgIGt0aHJlYWQubyB3YWl0Lm8ga2ZpZm8ubyBzeXNfbmkubyBwb3NpeC1jcHUtdGltZXJzLm8gbXV0ZXgubyBcCiAJICAgIGhydGltZXIubyByd3NlbS5vIG5zcHJveHkubyBzcmN1Lm8gc2VtYXBob3JlLm8gXAogCSAgICBub3RpZmllci5vIGtzeXNmcy5vIHBtX3Fvc19wYXJhbXMubyBzY2hlZF9jbG9jay5vIGNyZWQubyBcCi0JICAgIGFzeW5jLm8gcmFuZ2UubyBqdW1wX2xhYmVsLm8KKwkgICAgYXN5bmMubyByYW5nZS5vCiBvYmoteSArPSBncm91cHMubwogCiBpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCkBAIC0xMDcsNiArMTA3LDcgQEAKIG9iai0kKENPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUikgKz0gdXNlci1yZXR1cm4tbm90aWZpZXIubwogb2JqLSQoQ09ORklHX1BBREFUQSkgKz0gcGFkYXRhLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKSArPSBjcmFzaF9kdW1wLm8KK29iai0kKENPTkZJR19KVU1QX0xBQkVMKSArPSBqdW1wX2xhYmVsLm8KIAogaWZuZXEgKCQoQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUikseSkKICMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgPGFsYW5AbGludXhjYXJlLmNvbS5hdT4sIHRoZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBpcwpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbXBhdC5jIGIva2VybmVsL2NvbXBhdC5jCmluZGV4IDYxNmM3ODEuLmUyNDM1ZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb21wYXQuYworKysgYi9rZXJuZWwvY29tcGF0LmMKQEAgLTE1OCw2ICsxNTgsNyBAQAogCQkJX19wdXRfdXNlcih0cy0+dHZfc2VjLCAmY3RzLT50dl9zZWMpIHx8CiAJCQlfX3B1dF91c2VyKHRzLT50dl9uc2VjLCAmY3RzLT50dl9uc2VjKSkgPyAtRUZBVUxUIDogMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF9jb21wYXRfdGltZXNwZWMpOwogCiBzdGF0aWMgbG9uZyBjb21wYXRfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3JlZC5jIGIva2VybmVsL2NyZWQuYwppbmRleCAxNzRmYTg0Li44ZWYzMWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvY3JlZC5jCisrKyBiL2tlcm5lbC9jcmVkLmMKQEAgLTUwOCwxMCArNTA4LDggQEAKIAkJa2V5X2ZzZ2lkX2NoYW5nZWQodGFzayk7CiAKIAkvKiBkbyBpdAotCSAqIC0gV2hhdCBpZiBhIHByb2Nlc3Mgc2V0cmV1aWQoKSdzIGFuZCB0aGlzIGJyaW5ncyB0aGUKLQkgKiAgIG5ldyB1aWQgb3ZlciBoaXMgTlBST0MgcmxpbWl0PyAgV2UgY2FuIGNoZWNrIHRoaXMgbm93Ci0JICogICBjaGVhcGx5IHdpdGggdGhlIG5ldyB1aWQgY2FjaGUsIHNvIGlmIGl0IG1hdHRlcnMKLQkgKiAgIHdlIHNob3VsZCBiZSBjaGVja2luZyBmb3IgaXQuICAtRGF2ZU0KKwkgKiBSTElNSVRfTlBST0MgbGltaXRzIG9uIHVzZXItPnByb2Nlc3NlcyBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkCisJICogaW4gc2V0X3VzZXIoKS4KIAkgKi8KIAlhbHRlcl9jcmVkX3N1YnNjcmliZXJzKG5ldywgMik7CiAJaWYgKG5ldy0+dXNlciAhPSBvbGQtPnVzZXIpCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcvZ2Ric3R1Yi5jIGIva2VybmVsL2RlYnVnL2dkYnN0dWIuYwppbmRleCBhMTFkYjk1Li4zNDg3MjQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcvZ2Ric3R1Yi5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9nZGJzdHViLmMKQEAgLTQyLDYgKzQyLDggQEAKIC8qIE91ciBJL08gYnVmZmVycy4gKi8KIHN0YXRpYyBjaGFyCQkJcmVtY29tX2luX2J1ZmZlcltCVUZNQVhdOwogc3RhdGljIGNoYXIJCQlyZW1jb21fb3V0X2J1ZmZlcltCVUZNQVhdOworc3RhdGljIGludAkJCWdkYnN0dWJfdXNlX3ByZXZfaW5fYnVmOworc3RhdGljIGludAkJCWdkYnN0dWJfcHJldl9pbl9idWZfcG9zOwogCiAvKiBTdG9yYWdlIGZvciB0aGUgcmVnaXN0ZXJzLCBpbiBHREIgZm9ybWF0LiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcJCWdkYl9yZWdzWyhOVU1SRUdCWVRFUyArCkBAIC01OCw2ICs2MCwxMyBAQAogCWludCByZXQgPSAtMTsKIAlpbnQgaTsKIAorCWlmICh1bmxpa2VseShnZGJzdHViX3VzZV9wcmV2X2luX2J1ZikpIHsKKwkJaWYgKGdkYnN0dWJfcHJldl9pbl9idWZfcG9zIDwgZ2Ric3R1Yl91c2VfcHJldl9pbl9idWYpCisJCQlyZXR1cm4gcmVtY29tX2luX2J1ZmZlcltnZGJzdHViX3ByZXZfaW5fYnVmX3BvcysrXTsKKwkJZWxzZQorCQkJZ2Ric3R1Yl91c2VfcHJldl9pbl9idWYgPSAwOworCX0KKwogCS8qIHBvbGwgYW55IGFkZGl0aW9uYWwgSS9PIGludGVyZmFjZXMgdGhhdCBhcmUgZGVmaW5lZCAqLwogCXdoaWxlIChyZXQgPCAwKQogCQlmb3IgKGkgPSAwOyBrZGJfcG9sbF9mdW5jc1tpXSAhPSBOVUxMOyBpKyspIHsKQEAgLTEwOSw3ICsxMTgsNiBAQAogCQkJYnVmZmVyW2NvdW50XSA9IGNoOwogCQkJY291bnQgPSBjb3VudCArIDE7CiAJCX0KLQkJYnVmZmVyW2NvdW50XSA9IDA7CiAKIAkJaWYgKGNoID09ICcjJykgewogCQkJeG1pdGNzdW0gPSBoZXhfdG9fYmluKGdkYnN0dWJfcmVhZF93YWl0KCkpIDw8IDQ7CkBAIC0xMjQsNiArMTMyLDcgQEAKIAkJCWlmIChkYmdfaW9fb3BzLT5mbHVzaCkKIAkJCQlkYmdfaW9fb3BzLT5mbHVzaCgpOwogCQl9CisJCWJ1ZmZlcltjb3VudF0gPSAwOwogCX0gd2hpbGUgKGNoZWNrc3VtICE9IHhtaXRjc3VtKTsKIH0KIApAQCAtMTA4MiwxMiArMTA5MSwxMSBAQAogCWNhc2UgJ2MnOgogCQlzdHJjcHkocmVtY29tX2luX2J1ZmZlciwgY21kKTsKIAkJcmV0dXJuIDA7Ci0JY2FzZSAnPyc6Ci0JCWdkYl9jbWRfc3RhdHVzKGtzKTsKLQkJYnJlYWs7Ci0JY2FzZSAnXDAnOgotCQlzdHJjcHkocmVtY29tX291dF9idWZmZXIsICIiKTsKLQkJYnJlYWs7CisJY2FzZSAnJCc6CisJCXN0cmNweShyZW1jb21faW5fYnVmZmVyLCBjbWQpOworCQlnZGJzdHViX3VzZV9wcmV2X2luX2J1ZiA9IHN0cmxlbihyZW1jb21faW5fYnVmZmVyKTsKKwkJZ2Ric3R1Yl9wcmV2X2luX2J1Zl9wb3MgPSAwOworCQlyZXR1cm4gMDsKIAl9CiAJZGJnX2lvX29wcy0+d3JpdGVfY2hhcignKycpOwogCXB1dF9wYWNrZXQocmVtY29tX291dF9idWZmZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2RlYnVnL2tkYi9rZGJfYnQuYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2J0LmMKaW5kZXggMmY2MmZlOC4uNzE3OWVhYyAxMDA2NDQKLS0tIGEva2VybmVsL2RlYnVnL2tkYi9rZGJfYnQuYworKysgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9idC5jCkBAIC0xMTIsOSArMTEyLDggQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJbG9uZyBvZmZzZXQ7CiAKLQlrZGJnZXRpbnRlbnYoIkJUQVJHUyIsICZhcmdjb3VudCk7CS8qIEFyZ3VtZW50cyB0byBwcmludCAqLwotCWtkYmdldGludGVudigiQlRBUFJPTVBUIiwgJmJ0YXByb21wdCk7CS8qIFByb21wdCBhZnRlciBlYWNoCi0JCQkJCQkgKiBwcm9jIGluIGJ0YSAqLworCS8qIFByb21wdCBhZnRlciBlYWNoIHByb2MgaW4gYnRhICovCisJa2RiZ2V0aW50ZW52KCJCVEFQUk9NUFQiLCAmYnRhcHJvbXB0KTsKIAogCWlmIChzdHJjbXAoYXJndlswXSwgImJ0YSIpID09IDApIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2NtZHMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9jbWRzCmluZGV4IDU2Yzg4ZTQuLjk4MzRhZDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2NtZHMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfY21kcwpAQCAtMTgsMTYgKzE4LDEyIEBACiBlbmRlZmNtZAogCiBkZWZjbWQgZHVtcGFsbCAiIiAiRmlyc3QgbGluZSBkZWJ1Z2dpbmciCi0gIHNldCBCVFNZTUFSRyAxCi0gIHNldCBCVEFSR1MgOQogICBwaWQgUgogICAtZHVtcGNvbW1vbgogICAtYnRhCiBlbmRlZmNtZAogCiBkZWZjbWQgZHVtcGNwdSAiIiAiU2FtZSBhcyBkdW1wYWxsIGJ1dCBvbmx5IHRhc2tzIG9uIGNwdXMiCi0gIHNldCBCVFNZTUFSRyAxCi0gIHNldCBCVEFSR1MgOQogICBwaWQgUgogICAtZHVtcGNvbW1vbgogICAtYnRjCmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9kZWJ1Z2dlci5jIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfZGVidWdnZXIuYwppbmRleCBkZDBiMWI3Li5kOWNhOWFhIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9kZWJ1Z2dlci5jCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2RlYnVnZ2VyLmMKQEAgLTMwLDYgKzMwLDggQEAKIGludCBrZGJfcG9sbF9pZHggPSAxOwogRVhQT1JUX1NZTUJPTF9HUEwoa2RiX3BvbGxfaWR4KTsKIAorc3RhdGljIHN0cnVjdCBrZ2RiX3N0YXRlICprZGJfa3M7CisKIGludCBrZGJfc3R1YihzdHJ1Y3Qga2dkYl9zdGF0ZSAqa3MpCiB7CiAJaW50IGVycm9yID0gMDsKQEAgLTM5LDYgKzQxLDcgQEAKIAlrZGJfZGJ0cmFwX3QgZGJfcmVzdWx0ID0gS0RCX0RCX05PQlBUOwogCWludCBpOwogCisJa2RiX2tzID0ga3M7CiAJaWYgKEtEQl9TVEFURShSRUVOVFJZKSkgewogCQlyZWFzb24gPSBLREJfUkVBU09OX1NXSVRDSDsKIAkJS0RCX1NUQVRFX0NMRUFSKFJFRU5UUlkpOwpAQCAtMTIzLDIwICsxMjYsOCBAQAogCUtEQl9TVEFURV9DTEVBUihQQUdFUik7CiAJa2RibmVhcnN5bV9jbGVhbnVwKCk7CiAJaWYgKGVycm9yID09IEtEQl9DTURfS0dEQikgewotCQlpZiAoS0RCX1NUQVRFKERPSU5HX0tHREIpIHx8IEtEQl9TVEFURShET0lOR19LR0RCMikpIHsKLQkvKgotCSAqIFRoaXMgaW50ZWZhY2UgZ2x1ZSB3aGljaCBhbGxvd3Mga2RiIHRvIHRyYW5zaXRpb24gaW4gaW50bwotCSAqIHRoZSBnZGIgc3R1Yi4gIEluIG9yZGVyIHRvIGRvIHRoaXMgdGhlICc/JyBvciAnJyBnZGIgc2VyaWFsCi0JICogcGFja2V0IHJlc3BvbnNlIGlzIHByb2Nlc3NlZCBoZXJlLiAgQW5kIHRoZW4gY29udHJvbCBpcwotCSAqIHBhc3NlZCB0byB0aGUgZ2Ric3R1Yi4KLQkgKi8KLQkJCWlmIChLREJfU1RBVEUoRE9JTkdfS0dEQikpCi0JCQkJZ2Ric3R1Yl9zdGF0ZShrcywgIj8iKTsKLQkJCWVsc2UKLQkJCQlnZGJzdHViX3N0YXRlKGtzLCAiIik7CisJCWlmIChLREJfU1RBVEUoRE9JTkdfS0dEQikpCiAJCQlLREJfU1RBVEVfQ0xFQVIoRE9JTkdfS0dEQik7Ci0JCQlLREJfU1RBVEVfQ0xFQVIoRE9JTkdfS0dEQjIpOwotCQl9CiAJCXJldHVybiBEQkdfUEFTU19FVkVOVDsKIAl9CiAJa2RiX2JwX2luc3RhbGwoa3MtPmxpbnV4X3JlZ3MpOwpAQCAtMTY2LDMgKzE1Nyw3IEBACiAJcmV0dXJuIGtnZGJfaW5mb1trcy0+Y3B1XS5yZXRfc3RhdGU7CiB9CiAKK3ZvaWQga2RiX2dkYl9zdGF0ZV9wYXNzKGNoYXIgKmJ1ZikKK3sKKwlnZGJzdHViX3N0YXRlKGtkYl9rcywgYnVmKTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2lvLmMgYi9rZXJuZWwvZGVidWcva2RiL2tkYl9pby5jCmluZGV4IDk2ZmRhYWMuLjQ4MDJlYjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX2lvLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfaW8uYwpAQCAtMzEsMTUgKzMxLDIxIEBACiAKIGludCBrZGJfdHJhcF9wcmludGs7CiAKLXN0YXRpYyB2b2lkIGtnZGJfdHJhbnNpdGlvbl9jaGVjayhjaGFyICpidWZmZXIpCitzdGF0aWMgaW50IGtnZGJfdHJhbnNpdGlvbl9jaGVjayhjaGFyICpidWZmZXIpCiB7Ci0JaW50IHNsZW4gPSBzdHJsZW4oYnVmZmVyKTsKLQlpZiAoc3RybmNtcChidWZmZXIsICIkPyMzZiIsIHNsZW4pICE9IDAgJiYKLQkgICAgc3RybmNtcChidWZmZXIsICIkcVN1cHBvcnRlZCMzNyIsIHNsZW4pICE9IDAgJiYKLQkgICAgc3RybmNtcChidWZmZXIsICIrJHFTdXBwb3J0ZWQjMzciLCBzbGVuKSAhPSAwKSB7CisJaWYgKGJ1ZmZlclswXSAhPSAnKycgJiYgYnVmZmVyWzBdICE9ICckJykgewogCQlLREJfU1RBVEVfU0VUKEtHREJfVFJBTlMpOwogCQlrZGJfcHJpbnRmKCIlcyIsIGJ1ZmZlcik7CisJfSBlbHNlIHsKKwkJaW50IHNsZW4gPSBzdHJsZW4oYnVmZmVyKTsKKwkJaWYgKHNsZW4gPiAzICYmIGJ1ZmZlcltzbGVuIC0gM10gPT0gJyMnKSB7CisJCQlrZGJfZ2RiX3N0YXRlX3Bhc3MoYnVmZmVyKTsKKwkJCXN0cmNweShidWZmZXIsICJrZ2RiIik7CisJCQlLREJfU1RBVEVfU0VUKERPSU5HX0tHREIpOworCQkJcmV0dXJuIDE7CisJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQga2RiX3JlYWRfZ2V0X2tleShjaGFyICpidWZmZXIsIHNpemVfdCBidWZzaXplKQpAQCAtMjUxLDYgKzI1NywxMCBAQAogCWNhc2UgMTM6IC8qIGVudGVyICovCiAJCSpsYXN0Y2hhcisrID0gJ1xuJzsKIAkJKmxhc3RjaGFyKysgPSAnXDAnOworCQlpZiAoIUtEQl9TVEFURShLR0RCX1RSQU5TKSkgeworCQkJS0RCX1NUQVRFX1NFVChLR0RCX1RSQU5TKTsKKwkJCWtkYl9wcmludGYoIiVzIiwgYnVmZmVyKTsKKwkJfQogCQlrZGJfcHJpbnRmKCJcbiIpOwogCQlyZXR1cm4gYnVmZmVyOwogCWNhc2UgNDogLyogRGVsICovCkBAIC0zODIsMjIgKzM5MiwyNiBAQAogCQkJCSAqIHByaW50ZWQgY2hhcmFjdGVycyBpZiB3ZSB0aGluayB0aGF0CiAJCQkJICoga2dkYiBpcyBjb25uZWN0aW5nLCB1bnRpbCB0aGUgY2hlY2sKIAkJCQkgKiBmYWlscyAqLwotCQkJCWlmICghS0RCX1NUQVRFKEtHREJfVFJBTlMpKQotCQkJCQlrZ2RiX3RyYW5zaXRpb25fY2hlY2soYnVmZmVyKTsKLQkJCQllbHNlCisJCQkJaWYgKCFLREJfU1RBVEUoS0dEQl9UUkFOUykpIHsKKwkJCQkJaWYgKGtnZGJfdHJhbnNpdGlvbl9jaGVjayhidWZmZXIpKQorCQkJCQkJcmV0dXJuIGJ1ZmZlcjsKKwkJCQl9IGVsc2UgewogCQkJCQlrZGJfcHJpbnRmKCIlYyIsIGtleSk7CisJCQkJfQogCQkJfQogCQkJLyogU3BlY2lhbCBlc2NhcGUgdG8ga2dkYiAqLwogCQkJaWYgKGxhc3RjaGFyIC0gYnVmZmVyID49IDUgJiYKIAkJCSAgICBzdHJjbXAobGFzdGNoYXIgLSA1LCAiJD8jM2YiKSA9PSAwKSB7CisJCQkJa2RiX2dkYl9zdGF0ZV9wYXNzKGxhc3RjaGFyIC0gNSk7CiAJCQkJc3RyY3B5KGJ1ZmZlciwgImtnZGIiKTsKIAkJCQlLREJfU1RBVEVfU0VUKERPSU5HX0tHREIpOwogCQkJCXJldHVybiBidWZmZXI7CiAJCQl9Ci0JCQlpZiAobGFzdGNoYXIgLSBidWZmZXIgPj0gMTQgJiYKLQkJCSAgICBzdHJjbXAobGFzdGNoYXIgLSAxNCwgIiRxU3VwcG9ydGVkIzM3IikgPT0gMCkgeworCQkJaWYgKGxhc3RjaGFyIC0gYnVmZmVyID49IDExICYmCisJCQkgICAgc3RyY21wKGxhc3RjaGFyIC0gMTEsICIkcVN1cHBvcnRlZCIpID09IDApIHsKKwkJCQlrZGJfZ2RiX3N0YXRlX3Bhc3MobGFzdGNoYXIgLSAxMSk7CiAJCQkJc3RyY3B5KGJ1ZmZlciwgImtnZGIiKTsKLQkJCQlLREJfU1RBVEVfU0VUKERPSU5HX0tHREIyKTsKKwkJCQlLREJfU1RBVEVfU0VUKERPSU5HX0tHREIpOwogCQkJCXJldHVybiBidWZmZXI7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYwppbmRleCBiZTE0Nzc5Li42Mzc4NmU3IDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCkBAIC0xNDUsNyArMTQ1LDYgQEAKICNlbmRpZgogICJSQURJWD0xNiIsCiAgIk1EQ09VTlQ9OCIsCQkJLyogbGluZXMgb2YgbWQgb3V0cHV0ICovCi0gIkJUQVJHUz05IiwJCQkvKiA5IHBvc3NpYmxlIGFyZ3MgaW4gYnQgKi8KICBLREJfUExBVEZPUk1fRU5WLAogICJEVEFCQ09VTlQ9MzAiLAogICJOT1NFQ1Q9MSIsCkBAIC0xNzIsNiArMTcxLDcgQEAKICAoY2hhciAqKTAsCiAgKGNoYXIgKikwLAogIChjaGFyICopMCwKKyAoY2hhciAqKTAsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50IF9fbmVudiA9IChzaXplb2YoX19lbnYpIC8gc2l6ZW9mKGNoYXIgKikpOwpAQCAtMTM4Niw3ICsxMzg2LDcgQEAKIAkJfQogCiAJCWlmIChyZXN1bHQgPT0gS0RCX0NNRF9LR0RCKSB7Ci0JCQlpZiAoIShLREJfU1RBVEUoRE9JTkdfS0dEQikgfHwgS0RCX1NUQVRFKERPSU5HX0tHREIyKSkpCisJCQlpZiAoIUtEQl9TVEFURShET0lOR19LR0RCKSkKIAkJCQlrZGJfcHJpbnRmKCJFbnRlcmluZyBwbGVhc2UgYXR0YWNoIGRlYnVnZ2VyICIKIAkJCQkJICAgIm9yIHVzZSAkRCM0NCsgb3IgJDMjMzNcbiIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvZGVidWcva2RiL2tkYl9wcml2YXRlLmggYi9rZXJuZWwvZGVidWcva2RiL2tkYl9wcml2YXRlLmgKaW5kZXggMzVkNjllZC4uZTM4MWQxMCAxMDA2NDQKLS0tIGEva2VybmVsL2RlYnVnL2tkYi9rZGJfcHJpdmF0ZS5oCisrKyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX3ByaXZhdGUuaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBLREJfQ01EX1NTCSgtMTAwMykKICNkZWZpbmUgS0RCX0NNRF9TU0IJKC0xMDA0KQogI2RlZmluZSBLREJfQ01EX0tHREIgKC0xMDA1KQotI2RlZmluZSBLREJfQ01EX0tHREIyICgtMTAwNikKIAogLyogSW50ZXJuYWwgZGVidWcgZmxhZ3MgKi8KICNkZWZpbmUgS0RCX0RFQlVHX0ZMQUdfQlAJMHgwMDAyCS8qIEJyZWFrcG9pbnQgc3Vic3lzdGVtIGRlYnVnICovCkBAIC0xNDYsNyArMTQ1LDYgQEAKIAkJCQkJCSAqIGtleWJvYXJkIG9uIHRoaXMgY3B1ICovCiAjZGVmaW5lIEtEQl9TVEFURV9LRVhFQwkJMHgwMDA0MDAwMAkvKiBrZXhlYyBpc3N1ZWQgKi8KICNkZWZpbmUgS0RCX1NUQVRFX0RPSU5HX0tHREIJMHgwMDA4MDAwMAkvKiBrZ2RiIGVudGVyIG5vdyBpc3N1ZWQgKi8KLSNkZWZpbmUgS0RCX1NUQVRFX0RPSU5HX0tHREIyCTB4MDAxMDAwMDAJLyoga2dkYiBlbnRlciBub3cgaXNzdWVkICovCiAjZGVmaW5lIEtEQl9TVEFURV9LR0RCX1RSQU5TCTB4MDAyMDAwMDAJLyogVHJhbnNpdGlvbiB0byBrZ2RiICovCiAjZGVmaW5lIEtEQl9TVEFURV9BUkNICQkweGZmMDAwMDAwCS8qIFJlc2VydmVkIGZvciBhcmNoCiAJCQkJCQkgKiBzcGVjaWZpYyB1c2UgKi8KQEAgLTIxOCw2ICsyMTYsNyBAQAogZXh0ZXJuIHZvaWQga2RiX3NlbmRfc2lnX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbyk7CiBleHRlcm4gdm9pZCBrZGJfbWVtaW5mb19wcm9jX3Nob3codm9pZCk7CiBleHRlcm4gY2hhciAqa2RiX2dldHN0cihjaGFyICosIHNpemVfdCwgY2hhciAqKTsKK2V4dGVybiB2b2lkIGtkYl9nZGJfc3RhdGVfcGFzcyhjaGFyICpidWYpOwogCiAvKiBEZWZpbmVzIGZvciBrZGJfc3ltYm9sX3ByaW50ICovCiAjZGVmaW5lIEtEQl9TUF9TUEFDRUIJMHgwMDAxCQkvKiBTcGFjZSBiZWZvcmUgc3RyaW5nICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGI4Nzg1ZTIuLjBmODU3NzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC0zOTksMTQgKzM5OSw1NCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2dyb3VwX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlwZXJmX2Nncm91cF9zd2l0Y2godGFzaywgUEVSRl9DR1JPVVBfU1dPVVQpOworCXN0cnVjdCBwZXJmX2Nncm91cCAqY2dycDE7CisJc3RydWN0IHBlcmZfY2dyb3VwICpjZ3JwMiA9IE5VTEw7CisKKwkvKgorCSAqIHdlIGNvbWUgaGVyZSB3aGVuIHdlIGtub3cgcGVyZl9jZ3JvdXBfZXZlbnRzID4gMAorCSAqLworCWNncnAxID0gcGVyZl9jZ3JvdXBfZnJvbV90YXNrKHRhc2spOworCisJLyoKKwkgKiBuZXh0IGlzIE5VTEwgd2hlbiBjYWxsZWQgZnJvbSBwZXJmX2V2ZW50X2VuYWJsZV9vbl9leGVjKCkKKwkgKiB0aGF0IHdpbGwgc3lzdGVtYXRpY2FsbHkgY2F1c2UgYSBjZ3JvdXBfc3dpdGNoKCkKKwkgKi8KKwlpZiAobmV4dCkKKwkJY2dycDIgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sobmV4dCk7CisKKwkvKgorCSAqIG9ubHkgc2NoZWR1bGUgb3V0IGN1cnJlbnQgY2dyb3VwIGV2ZW50cyBpZiB3ZSBrbm93CisJICogdGhhdCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IGNncm91cC4gT3RoZXJ3aXNlLAorCSAqIGRvIG5vIHRvdWNoIHRoZSBjZ3JvdXAgZXZlbnRzLgorCSAqLworCWlmIChjZ3JwMSAhPSBjZ3JwMikKKwkJcGVyZl9jZ3JvdXBfc3dpdGNoKHRhc2ssIFBFUkZfQ0dST1VQX1NXT1VUKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2dyb3VwX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2Nncm91cF9zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlwZXJmX2Nncm91cF9zd2l0Y2godGFzaywgUEVSRl9DR1JPVVBfU1dJTik7CisJc3RydWN0IHBlcmZfY2dyb3VwICpjZ3JwMTsKKwlzdHJ1Y3QgcGVyZl9jZ3JvdXAgKmNncnAyID0gTlVMTDsKKworCS8qCisJICogd2UgY29tZSBoZXJlIHdoZW4gd2Uga25vdyBwZXJmX2Nncm91cF9ldmVudHMgPiAwCisJICovCisJY2dycDEgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2sodGFzayk7CisKKwkvKiBwcmV2IGNhbiBuZXZlciBiZSBOVUxMICovCisJY2dycDIgPSBwZXJmX2Nncm91cF9mcm9tX3Rhc2socHJldik7CisKKwkvKgorCSAqIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBpbiBjZ3JvdXAgZXZlbnRzIGlmIHdlIGFyZSBjaGFuZ2luZworCSAqIGNncm91cCBkdXJpbmcgY3R4c3cuIENncm91cCBldmVudHMgd2VyZSBub3Qgc2NoZWR1bGVkCisJICogb3V0IG9mIGN0eHN3IG91dCBpZiB0aGF0IHdhcyBub3QgdGhlIGNhc2UuCisJICovCisJaWYgKGNncnAxICE9IGNncnAyKQorCQlwZXJmX2Nncm91cF9zd2l0Y2godGFzaywgUEVSRl9DR1JPVVBfU1dJTik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfY2dyb3VwX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCkBAIC01MTgsMTEgKzU1OCwxMyBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jZ3JvdXBfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2Nncm91cF9zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2dyb3VwX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogfQogCkBAIC0xOTg4LDcgKzIwMzAsNyBAQAogCSAqIGNncm91cCBldmVudCBhcmUgc3lzdGVtLXdpZGUgbW9kZSBvbmx5CiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZfX2dldF9jcHVfdmFyKHBlcmZfY2dyb3VwX2V2ZW50cykpKQotCQlwZXJmX2Nncm91cF9zY2hlZF9vdXQodGFzayk7CisJCXBlcmZfY2dyb3VwX3NjaGVkX291dCh0YXNrLCBuZXh0KTsKIH0KIAogc3RhdGljIHZvaWQgdGFza19jdHhfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKQEAgLTIxNTMsNyArMjE5NSw4IEBACiAgKiBhY2Nlc3NpbmcgdGhlIGV2ZW50IGNvbnRyb2wgcmVnaXN0ZXIuIElmIGEgTk1JIGhpdHMsIHRoZW4gaXQgd2lsbAogICoga2VlcCB0aGUgZXZlbnQgcnVubmluZy4KICAqLwotdm9pZCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit2b2lkIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwogCWludCBjdHhuOwpAQCAtMjE3MSw3ICsyMjE0LDcgQEAKIAkgKiBjZ3JvdXAgZXZlbnQgYXJlIHN5c3RlbS13aWRlIG1vZGUgb25seQogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmX19nZXRfY3B1X3ZhcihwZXJmX2Nncm91cF9ldmVudHMpKSkKLQkJcGVyZl9jZ3JvdXBfc2NoZWRfaW4odGFzayk7CisJCXBlcmZfY2dyb3VwX3NjaGVkX2luKHByZXYsIHRhc2spOwogfQogCiBzdGF0aWMgdTY0IHBlcmZfY2FsY3VsYXRlX3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCBuc2VjLCB1NjQgY291bnQpCkBAIC0yNDI3LDcgKzI0NzAsNyBAQAogCSAqIGN0eHN3aW4gY2dyb3VwIGV2ZW50cyB3aGljaCBhcmUgYWxyZWFkeSBzY2hlZHVsZWQKIAkgKiBpbi4KIAkgKi8KLQlwZXJmX2Nncm91cF9zY2hlZF9vdXQoY3VycmVudCk7CisJcGVyZl9jZ3JvdXBfc2NoZWRfb3V0KGN1cnJlbnQsIE5VTEwpOwogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAl0YXNrX2N0eF9zY2hlZF9vdXQoY3R4KTsKQEAgLTMzNTMsOCArMzM5Niw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNhbGNfdGltZXJfdmFsdWVzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKLQkJCQl1NjQgKnJ1bm5pbmcsCi0JCQkJdTY0ICplbmFibGVkKQorCQkJCXU2NCAqZW5hYmxlZCwKKwkJCQl1NjQgKnJ1bm5pbmcpCiB7CiAJdTY0IG5vdywgY3R4X3RpbWU7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGU3Y2VhY2EuLjhlNmI2ZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTExMSw2ICsxMTExLDcgQEAKIAkJICAgIHAtPnJlYWxfY3JlZC0+dXNlciAhPSBJTklUX1VTRVIpCiAJCQlnb3RvIGJhZF9mb3JrX2ZyZWU7CiAJfQorCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9OUFJPQ19FWENFRURFRDsKIAogCXJldHZhbCA9IGNvcHlfY3JlZHMocCwgY2xvbmVfZmxhZ3MpOwogCWlmIChyZXR2YWwgPCAwKQpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCAwYTMwODk3Li4xMWNiZTA1IDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMjE4LDYgKzIxOCw4IEBACiAgKiBAdWFkZHI6CXZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKICAqIEBmc2hhcmVkOgkwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKICAqIEBrZXk6CWFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KKyAqIEBydzoJCW1hcHBpbmcgbmVlZHMgdG8gYmUgcmVhZC93cml0ZSAodmFsdWVzOiBWRVJJRllfUkVBRCwKKyAqICAgICAgICAgICAgICBWRVJJRllfV1JJVEUpCiAgKgogICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgMAogICogVGhlIGtleSB3b3JkcyBhcmUgc3RvcmVkIGluICprZXkgb24gc3VjY2Vzcy4KQEAgLTIyOSwxMiArMjMxLDEyIEBACiAgKiBsb2NrX3BhZ2UoKSBtaWdodCBzbGVlcCwgdGhlIGNhbGxlciBzaG91bGQgbm90IGhvbGQgYSBzcGlubG9jay4KICAqLwogc3RhdGljIGludAotZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KQorZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBpbnQgcncpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpdWFkZHI7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgKnBhZ2VfaGVhZDsKLQlpbnQgZXJyOworCWludCBlcnIsIHJvID0gMDsKIAogCS8qCiAJICogVGhlIGZ1dGV4IGFkZHJlc3MgbXVzdCBiZSAibmF0dXJhbGx5IiBhbGlnbmVkLgpAQCAtMjYyLDggKzI2NCwxOCBAQAogCiBhZ2FpbjoKIAllcnIgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHJlc3MsIDEsIDEsICZwYWdlKTsKKwkvKgorCSAqIElmIHdyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQgKGVnLiBGVVRFWF9XQUlUKSwgdHJ5CisJICogYW5kIGdldCByZWFkLW9ubHkgYWNjZXNzLgorCSAqLworCWlmIChlcnIgPT0gLUVGQVVMVCAmJiBydyA9PSBWRVJJRllfUkVBRCkgeworCQllcnIgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHJlc3MsIDEsIDAsICZwYWdlKTsKKwkJcm8gPSAxOworCX0KIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IDA7CiAKICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlwYWdlX2hlYWQgPSBwYWdlOwpAQCAtMzA1LDYgKzMxNywxMyBAQAogCWlmICghcGFnZV9oZWFkLT5tYXBwaW5nKSB7CiAJCXVubG9ja19wYWdlKHBhZ2VfaGVhZCk7CiAJCXB1dF9wYWdlKHBhZ2VfaGVhZCk7CisJCS8qCisJCSogWkVST19QQUdFIHBhZ2VzIGRvbid0IGhhdmUgYSBtYXBwaW5nLiBBdm9pZCBhIGJ1c3kgbG9vcAorCQkqIHRyeWluZyB0byBmaW5kIG9uZS4gUlcgbWFwcGluZyB3b3VsZCBoYXZlIENPVydkIChhbmQgdGh1cworCQkqIGhhdmUgYSBtYXBwaW5nKSBzbyB0aGlzIHBhZ2UgaXMgUk8gYW5kIHdvbid0IGV2ZXIgY2hhbmdlLgorCQkqLworCQlpZiAoKHBhZ2VfaGVhZCA9PSBaRVJPX1BBR0UoYWRkcmVzcykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC0zMTYsNiArMzM1LDE1IEBACiAJICogdGhlIG9iamVjdCBub3QgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzcy4KIAkgKi8KIAlpZiAoUGFnZUFub24ocGFnZV9oZWFkKSkgeworCQkvKgorCQkgKiBBIFJPIGFub255bW91cyBwYWdlIHdpbGwgbmV2ZXIgY2hhbmdlIGFuZCB0aHVzIGRvZXNuJ3QgbWFrZQorCQkgKiBzZW5zZSBmb3IgZnV0ZXggb3BlcmF0aW9ucy4KKwkJICovCisJCWlmIChybykgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJa2V5LT5ib3RoLm9mZnNldCB8PSBGVVRfT0ZGX01NU0hBUkVEOyAvKiByZWYgdGFrZW4gb24gbW0gKi8KIAkJa2V5LT5wcml2YXRlLm1tID0gbW07CiAJCWtleS0+cHJpdmF0ZS5hZGRyZXNzID0gYWRkcmVzczsKQEAgLTMyNyw5ICszNTUsMTAgQEAKIAogCWdldF9mdXRleF9rZXlfcmVmcyhrZXkpOwogCitvdXQ6CiAJdW5sb2NrX3BhZ2UocGFnZV9oZWFkKTsKIAlwdXRfcGFnZShwYWdlX2hlYWQpOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfZnV0ZXhfa2V5KHVuaW9uIGZ1dGV4X2tleSAqa2V5KQpAQCAtOTQwLDcgKzk2OSw3IEBACiAJaWYgKCFiaXRzZXQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5LCBWRVJJRllfUkVBRCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXQ7CiAKQEAgLTk4NiwxMCArMTAxNSwxMCBAQAogCWludCByZXQsIG9wX3JldDsKIAogcmV0cnk6Ci0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5MSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjEsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5MSwgVkVSSUZZX1JFQUQpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTIpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTIsIFZFUklGWV9XUklURSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcHV0X2tleTE7CiAKQEAgLTEyNDMsMTAgKzEyNzIsMTEgQEAKIAkJcGlfc3RhdGUgPSBOVUxMOwogCX0KIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTEpOworCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIxLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleTEsIFZFUklGWV9SRUFEKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkyKTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkyLAorCQkJICAgIHJlcXVldWVfcGkgPyBWRVJJRllfV1JJVEUgOiBWRVJJRllfUkVBRCk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfcHV0X2tleTE7CiAKQEAgLTE3OTAsNyArMTgyMCw3IEBACiAJICogd2hpbGUgdGhlIHN5c2NhbGwgZXhlY3V0ZXMuCiAJICovCiByZXRyeToKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJnEtPmtleSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZxLT5rZXksIFZFUklGWV9SRUFEKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xOTQxLDcgKzE5NzEsNyBAQAogCX0KIAogcmV0cnk6Ci0JcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZxLmtleSk7CisJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkciwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZxLmtleSwgVkVSSUZZX1dSSVRFKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMjA2MCw3ICsyMDkwLDcgQEAKIAlpZiAoKHV2YWwgJiBGVVRFWF9USURfTUFTSykgIT0gdnBpZCkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJldCA9IGdldF9mdXRleF9rZXkodWFkZHIsIGZsYWdzICYgRkxBR1NfU0hBUkVELCAma2V5KTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmbGFncyAmIEZMQUdTX1NIQVJFRCwgJmtleSwgVkVSSUZZX1dSSVRFKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMjI0OSw3ICsyMjc5LDcgQEAKIAlkZWJ1Z19ydF9tdXRleF9pbml0X3dhaXRlcigmcnRfd2FpdGVyKTsKIAlydF93YWl0ZXIudGFzayA9IE5VTEw7CiAKLQlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkyKTsKKwlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMiwgZmxhZ3MgJiBGTEFHU19TSEFSRUQsICZrZXkyLCBWRVJJRllfV1JJVEUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwppbmRleCAzYTJjYWI0Li5lMzg1NDRkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlnYy0+bWFza19jYWNoZSA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CiAKIAlmb3IgKGkgPSBnYy0+aXJxX2Jhc2U7IG1zazsgbXNrID4+PSAxLCBpKyspIHsKLQkJaWYgKCFtc2sgJiAweDAxKQorCQlpZiAoIShtc2sgJiAweDAxKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChmbGFncyAmIElSUV9HQ19JTklUX05FU1RFRF9MT0NLKQpAQCAtMzAxLDcgKzMwMSw3IEBACiAJcmF3X3NwaW5fdW5sb2NrKCZnY19sb2NrKTsKIAogCWZvciAoOyBtc2s7IG1zayA+Pj0gMSwgaSsrKSB7Ci0JCWlmICghbXNrICYgMHgwMSkKKwkJaWYgKCEobXNrICYgMHgwMSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBSZW1vdmUgaGFuZGxlciBmaXJzdC4gVGhhdCB3aWxsIG1hc2sgdGhlIGlycSBsaW5lICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRlc2MuYyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCmluZGV4IDRjNjBhNTAuLjAzOWI4ODkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCkBAIC03MCw3ICs3MCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBkZXNjX25vZGUoc3RydWN0IGlycV9kZXNjICpkZXNjKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZGVzY19zZXRfZGVmYXVsdHModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgbm9kZSkKK3N0YXRpYyB2b2lkIGRlc2Nfc2V0X2RlZmF1bHRzKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IG5vZGUsCisJCXN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWludCBjcHU7CiAKQEAgLTg2LDYgKzg3LDcgQEAKIAlkZXNjLT5pcnFfY291bnQgPSAwOwogCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKIAlkZXNjLT5uYW1lID0gTlVMTDsKKwlkZXNjLT5vd25lciA9IG93bmVyOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCSpwZXJfY3B1X3B0cihkZXNjLT5rc3RhdF9pcnFzLCBjcHUpID0gMDsKIAlkZXNjX3NtcF9pbml0KGRlc2MsIG5vZGUpOwpAQCAtMTI4LDcgKzEzMCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9tYXNrcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpIHsgfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgKmFsbG9jX2Rlc2MoaW50IGlycSwgaW50IG5vZGUpCitzdGF0aWMgc3RydWN0IGlycV9kZXNjICphbGxvY19kZXNjKGludCBpcnEsIGludCBub2RlLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTDsKQEAgLTE0Nyw3ICsxNDksNyBAQAogCXJhd19zcGluX2xvY2tfaW5pdCgmZGVzYy0+bG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2MtPmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKIAotCWRlc2Nfc2V0X2RlZmF1bHRzKGlycSwgZGVzYywgbm9kZSk7CisJZGVzY19zZXRfZGVmYXVsdHMoaXJxLCBkZXNjLCBub2RlLCBvd25lcik7CiAKIAlyZXR1cm4gZGVzYzsKIApAQCAtMTczLDEzICsxNzUsMTQgQEAKIAlrZnJlZShkZXNjKTsKIH0KIAotc3RhdGljIGludCBhbGxvY19kZXNjcyh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjbnQsIGludCBub2RlKQorc3RhdGljIGludCBhbGxvY19kZXNjcyh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjbnQsIGludCBub2RlLAorCQkgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7Ci0JCWRlc2MgPSBhbGxvY19kZXNjKHN0YXJ0ICsgaSwgbm9kZSk7CisJCWRlc2MgPSBhbGxvY19kZXNjKHN0YXJ0ICsgaSwgbm9kZSwgb3duZXIpOwogCQlpZiAoIWRlc2MpCiAJCQlnb3RvIGVycjsKIAkJbXV0ZXhfbG9jaygmc3BhcnNlX2lycV9sb2NrKTsKQEAgLTIyNyw3ICsyMzAsNyBAQAogCQlucl9pcnFzID0gaW5pdGNudDsKIAogCWZvciAoaSA9IDA7IGkgPCBpbml0Y250OyBpKyspIHsKLQkJZGVzYyA9IGFsbG9jX2Rlc2MoaSwgbm9kZSk7CisJCWRlc2MgPSBhbGxvY19kZXNjKGksIG5vZGUsIE5VTEwpOwogCQlzZXRfYml0KGksIGFsbG9jYXRlZF9pcnFzKTsKIAkJaXJxX2luc2VydF9kZXNjKGksIGRlc2MpOwogCX0KQEAgLTI2MSw3ICsyNjQsNyBAQAogCQlhbGxvY19tYXNrcygmZGVzY1tpXSwgR0ZQX0tFUk5FTCwgbm9kZSk7CiAJCXJhd19zcGluX2xvY2tfaW5pdCgmZGVzY1tpXS5sb2NrKTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2NbaV0ubG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwotCQlkZXNjX3NldF9kZWZhdWx0cyhpLCAmZGVzY1tpXSwgbm9kZSk7CisJCWRlc2Nfc2V0X2RlZmF1bHRzKGksICZkZXNjW2ldLCBub2RlLCBOVUxMKTsKIAl9CiAJcmV0dXJuIGFyY2hfZWFybHlfaXJxX2luaXQoKTsKIH0KQEAgLTI3Niw4ICsyNzksMTYgQEAKIAlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2Rlc2NzKHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGNudCwgaW50IG5vZGUpCitzdGF0aWMgaW5saW5lIGludCBhbGxvY19kZXNjcyh1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBjbnQsIGludCBub2RlLAorCQkJICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2Moc3RhcnQgKyBpKTsKKworCQlkZXNjLT5vd25lciA9IG93bmVyOworCX0KIAlyZXR1cm4gc3RhcnQ7CiB9CiAKQEAgLTMzMywxMSArMzQ0LDEzIEBACiAgKiBAZnJvbToJU3RhcnQgdGhlIHNlYXJjaCBmcm9tIHRoaXMgaXJxIG51bWJlcgogICogQGNudDoJTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGlycXMgdG8gYWxsb2NhdGUuCiAgKiBAbm9kZToJUHJlZmVycmVkIG5vZGUgb24gd2hpY2ggdGhlIGlycSBkZXNjcmlwdG9yIHNob3VsZCBiZSBhbGxvY2F0ZWQKKyAqIEBvd25lcjoJT3duaW5nIG1vZHVsZSAoY2FuIGJlIE5VTEwpCiAgKgogICogUmV0dXJucyB0aGUgZmlyc3QgaXJxIG51bWJlciBvciBlcnJvciBjb2RlCiAgKi8KIGludCBfX3JlZgotaXJxX2FsbG9jX2Rlc2NzKGludCBpcnEsIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgY250LCBpbnQgbm9kZSkKK19faXJxX2FsbG9jX2Rlc2NzKGludCBpcnEsIHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgY250LCBpbnQgbm9kZSwKKwkJICBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKIAlpbnQgc3RhcnQsIHJldDsKIApAQCAtMzY2LDEzICszNzksMTMgQEAKIAogCWJpdG1hcF9zZXQoYWxsb2NhdGVkX2lycXMsIHN0YXJ0LCBjbnQpOwogCW11dGV4X3VubG9jaygmc3BhcnNlX2lycV9sb2NrKTsKLQlyZXR1cm4gYWxsb2NfZGVzY3Moc3RhcnQsIGNudCwgbm9kZSk7CisJcmV0dXJuIGFsbG9jX2Rlc2NzKHN0YXJ0LCBjbnQsIG5vZGUsIG93bmVyKTsKIAogZXJyOgogCW11dGV4X3VubG9jaygmc3BhcnNlX2lycV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2FsbG9jX2Rlc2NzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faXJxX2FsbG9jX2Rlc2NzKTsKIAogLyoqCiAgKiBpcnFfcmVzZXJ2ZV9pcnFzIC0gbWFyayBpcnFzIGFsbG9jYXRlZApAQCAtNDQwLDcgKzQ1Myw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCWRlc2Nfc2V0X2RlZmF1bHRzKGlycSwgZGVzYywgZGVzY19ub2RlKGRlc2MpKTsKKwlkZXNjX3NldF9kZWZhdWx0cyhpcnEsIGRlc2MsIGRlc2Nfbm9kZShkZXNjKSwgTlVMTCk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMGE3ODQwYWUuLjliOTU2ZmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtODgzLDYgKzg4Myw4IEBACiAKIAlpZiAoZGVzYy0+aXJxX2RhdGEuY2hpcCA9PSAmbm9faXJxX2NoaXApCiAJCXJldHVybiAtRU5PU1lTOworCWlmICghdHJ5X21vZHVsZV9nZXQoZGVzYy0+b3duZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAkvKgogCSAqIFNvbWUgZHJpdmVycyBsaWtlIHNlcmlhbC5jIHVzZSByZXF1ZXN0X2lycSgpIGhlYXZpbHksCiAJICogc28gd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhCkBAIC05MDYsOCArOTA4LDEwIEBACiAJICovCiAJbmVzdGVkID0gaXJxX3NldHRpbmdzX2lzX25lc3RlZF90aHJlYWQoZGVzYyk7CiAJaWYgKG5lc3RlZCkgewotCQlpZiAoIW5ldy0+dGhyZWFkX2ZuKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghbmV3LT50aHJlYWRfZm4pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9tcHV0OworCQl9CiAJCS8qCiAJCSAqIFJlcGxhY2UgdGhlIHByaW1hcnkgaGFuZGxlciB3aGljaCB3YXMgcHJvdmlkZWQgZnJvbQogCQkgKiB0aGUgZHJpdmVyIGZvciBub24gbmVzdGVkIGludGVycnVwdCBoYW5kbGluZyBieSB0aGUKQEAgLTkyOSw4ICs5MzMsMTAgQEAKIAogCQl0ID0ga3RocmVhZF9jcmVhdGUoaXJxX3RocmVhZCwgbmV3LCAiaXJxLyVkLSVzIiwgaXJxLAogCQkJCSAgIG5ldy0+bmFtZSk7Ci0JCWlmIChJU19FUlIodCkpCi0JCQlyZXR1cm4gUFRSX0VSUih0KTsKKwkJaWYgKElTX0VSUih0KSkgeworCQkJcmV0ID0gUFRSX0VSUih0KTsKKwkJCWdvdG8gb3V0X21wdXQ7CisJCX0KIAkJLyoKIAkJICogV2Uga2VlcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIHN0cnVjdCBldmVuIGlmCiAJCSAqIHRoZSB0aHJlYWQgZGllcyB0byBhdm9pZCB0aGF0IHRoZSBpbnRlcnJ1cHQgY29kZQpAQCAtMTA5NSw2ICsxMTAxLDggQEAKIAkJCWt0aHJlYWRfc3RvcCh0KTsKIAkJcHV0X3Rhc2tfc3RydWN0KHQpOwogCX0KK291dF9tcHV0OgorCW1vZHVsZV9wdXQoZGVzYy0+b3duZXIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMDMsNiArMTIxMSw3IEBACiAJCXB1dF90YXNrX3N0cnVjdChhY3Rpb24tPnRocmVhZCk7CiAJfQogCisJbW9kdWxlX3B1dChkZXNjLT5vd25lcik7CiAJcmV0dXJuIGFjdGlvbjsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggNDc2MTNkZi4uZGRjNzY0NCAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKICAqICh1c2VkIGZvciBwcmV2ZW50aW5nIHVzZXIgbGFuZCBwcm9jZXNzZXMgZnJvbSBiZWluZyBjcmVhdGVkIGFmdGVyIHRoZSB1c2VyCiAgKiBsYW5kIGhhcyBiZWVuIGZyb3plbiBkdXJpbmcgYSBzeXN0ZW0td2lkZSBoaWJlcm5hdGlvbiBvciBzdXNwZW5kIG9wZXJhdGlvbikuCiAgKi8KLXN0YXRpYyBpbnQgdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQ7CitzdGF0aWMgaW50IHVzZXJtb2RlaGVscGVyX2Rpc2FibGVkID0gMTsKIAogLyogTnVtYmVyIG9mIGhlbHBlcnMgcnVubmluZyAqLwogc3RhdGljIGF0b21pY190IHJ1bm5pbmdfaGVscGVycyA9IEFUT01JQ19JTklUKDApOwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMzk1NmY1MS4uOTFkNjdjZSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0yNDY4LDcgKzI0NjgsNyBAQAogCiAJCUJVR19PTih1c2FnZV9iaXQgPj0gTE9DS19VU0FHRV9TVEFURVMpOwogCi0JCWlmIChobG9ja19jbGFzcyhobG9jayktPmtleSA9PSAmX19sb2NrZGVwX25vX3ZhbGlkYXRlX18pCisJCWlmIChobG9ja19jbGFzcyhobG9jayktPmtleSA9PSBfX2xvY2tkZXBfbm9fdmFsaWRhdGVfXy5zdWJrZXlzKQogCQkJY29udGludWU7CiAKIAkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIHVzYWdlX2JpdCkpCkBAIC0yNDg1LDIzICsyNDg1LDkgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCi0JaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04odW5saWtlbHkoZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkKSkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShjdXJyLT5oYXJkaXJxc19lbmFibGVkKSkgewotCQkvKgotCQkgKiBOZWl0aGVyIGlycSBub3IgcHJlZW1wdGlvbiBhcmUgZGlzYWJsZWQgaGVyZQotCQkgKiBzbyB0aGlzIGlzIHJhY3kgYnkgbmF0dXJlIGJ1dCBsb3Npbmcgb25lIGhpdAotCQkgKiBpbiBhIHN0YXQgaXMgbm90IGEgYmlnIGRlYWwuCi0JCSAqLwotCQlfX2RlYnVnX2F0b21pY19pbmMocmVkdW5kYW50X2hhcmRpcnFzX29uKTsKLQkJcmV0dXJuOwotCX0KIAkvKiB3ZSdsbCBkbyBhbiBPRkYgLT4gT04gdHJhbnNpdGlvbjogKi8KIAljdXJyLT5oYXJkaXJxc19lbmFibGVkID0gMTsKIAotCWlmIChERUJVR19MT0NLU19XQVJOX09OKGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dCkpCi0JCXJldHVybjsKIAkvKgogCSAqIFdlIGFyZSBnb2luZyB0byB0dXJuIGhhcmRpcnFzIG9uLCBzbyBzZXQgdGhlCiAJICogdXNhZ2UgYml0IGZvciBhbGwgaGVsZCBsb2NrczoKQEAgLTI1MjksOSArMjUxNSwyNSBAQAogCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MgfHwgY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQogCQlyZXR1cm47CiAKKwlpZiAodW5saWtlbHkoY3VycmVudC0+aGFyZGlycXNfZW5hYmxlZCkpIHsKKwkJLyoKKwkJICogTmVpdGhlciBpcnEgbm9yIHByZWVtcHRpb24gYXJlIGRpc2FibGVkIGhlcmUKKwkJICogc28gdGhpcyBpcyByYWN5IGJ5IG5hdHVyZSBidXQgbG9zaW5nIG9uZSBoaXQKKwkJICogaW4gYSBzdGF0IGlzIG5vdCBhIGJpZyBkZWFsLgorCQkgKi8KKwkJX19kZWJ1Z19hdG9taWNfaW5jKHJlZHVuZGFudF9oYXJkaXJxc19vbik7CisJCXJldHVybjsKKwl9CisKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKIAkJcmV0dXJuOwogCisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04odW5saWtlbHkoZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkKSkpCisJCXJldHVybjsKKworCWlmIChERUJVR19MT0NLU19XQVJOX09OKGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dCkpCisJCXJldHVybjsKKwogCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMTsKIAlfX3RyYWNlX2hhcmRpcnFzX29uX2NhbGxlcihpcCk7CiAJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOwpAQCAtMjg3MiwxMCArMjg3NCw3IEBACiB2b2lkIGxvY2tkZXBfaW5pdF9tYXAoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwgaW50IHN1YmNsYXNzKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpKyspCi0JCWxvY2stPmNsYXNzX2NhY2hlW2ldID0gTlVMTDsKKwltZW1zZXQobG9jaywgMCwgc2l6ZW9mKCpsb2NrKSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJbG9jay0+Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTMxMTIsNyArMzExMSwxMyBAQAogCQlpZiAoIWNsYXNzKQogCQkJY2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7CiAKLQkJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWNsYXNzKSkKKwkJLyoKKwkJICogSWYgbG9va191cF9sb2NrX2NsYXNzKCkgZmFpbGVkIHRvIGZpbmQgYSBjbGFzcywgd2UncmUgdHJ5aW5nCisJCSAqIHRvIHRlc3QgaWYgd2UgaG9sZCBhIGxvY2sgdGhhdCBoYXMgbmV2ZXIgeWV0IGJlZW4gYWNxdWlyZWQuCisJCSAqIENsZWFybHkgaWYgdGhlIGxvY2sgaGFzbid0IGJlZW4gYWNxdWlyZWQgX2V2ZXJfLCB3ZSdyZSBub3QKKwkJICogaG9sZGluZyBpdCBlaXRoZXIsIHNvIHJlcG9ydCBmYWlsdXJlLgorCQkgKi8KKwkJaWYgKCFjbGFzcykKIAkJCXJldHVybiAwOwogCiAJCWlmIChERUJVR19MT0NLU19XQVJOX09OKCFobG9jay0+bmVzdF9sb2NrKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggYjE5MTRjYjkuLjM3NDRjNTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0yMzEsMyArMjMxLDcgQEAKIGNvbmZpZyBQTV9HRU5FUklDX0RPTUFJTlMKIAlib29sCiAJZGVwZW5kcyBvbiBQTQorCitjb25maWcgUE1fR0VORVJJQ19ET01BSU5TX1JVTlRJTUUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBQTV9SVU5USU1FICYmIFBNX0dFTkVSSUNfRE9NQUlOUwpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDM3ZGZmMzQuLjI4YTQwZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTMxOCw4ICszMTgsMTAgQEAKIAkJCXJldHVybiAwOwogCQkvKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBhY2NlcHQgQ0FQX1NZU19BRE1JTiB0b28sIHdpdGggYSB3YXJuaW5nICovCiAJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCQlXQVJOX09OQ0UoMSwgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgotCQkJCSAiYnV0IG5vIENBUF9TWVNMT0cgKGRlcHJlY2F0ZWQpLlxuIik7CisJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzICglZCk6ICIKKwkJCQkgIkF0dGVtcHQgdG8gYWNjZXNzIHN5c2xvZyB3aXRoIENBUF9TWVNfQURNSU4gIgorCQkJCSAiYnV0IG5vIENBUF9TWVNMT0cgKGRlcHJlY2F0ZWQpLlxuIiwKKwkJCQkgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTE2MDIsNyArMTYwNCw3IEBACiAJc3RydWN0IGNvbnNvbGUgKmNvbjsKIAogCWZvcl9lYWNoX2NvbnNvbGUoY29uKSB7Ci0JCWlmIChjb24tPmZsYWdzICYgQ09OX0JPT1QpIHsKKwkJaWYgKCFrZWVwX2Jvb3Rjb24gJiYgY29uLT5mbGFncyAmIENPTl9CT09UKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJ0dXJuIG9mZiBib290IGNvbnNvbGUgJXMlZFxuIiwKIAkJCQljb24tPm5hbWUsIGNvbi0+aW5kZXgpOwogCQkJdW5yZWdpc3Rlcl9jb25zb2xlKGNvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IDNmZjQwMTcuLjNiM2NlZGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC01NTMsNiArNTUzLDI3IEBACiAKIEVYUE9SVF9TWU1CT0woYWxsb2NhdGVfcmVzb3VyY2UpOwogCisvKioKKyAqIGxvb2t1cF9yZXNvdXJjZSAtIGZpbmQgYW4gZXhpc3RpbmcgcmVzb3VyY2UgYnkgYSByZXNvdXJjZSBzdGFydCBhZGRyZXNzCisgKiBAcm9vdDogcm9vdCByZXNvdXJjZSBkZXNjcmlwdG9yCisgKiBAc3RhcnQ6IHJlc291cmNlIHN0YXJ0IGFkZHJlc3MKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVzb3VyY2UgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgKi8KK3N0cnVjdCByZXNvdXJjZSAqbG9va3VwX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVhZF9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKwlmb3IgKHJlcyA9IHJvb3QtPmNoaWxkOyByZXM7IHJlcyA9IHJlcy0+c2libGluZykgeworCQlpZiAocmVzLT5zdGFydCA9PSBzdGFydCkKKwkJCWJyZWFrOworCX0KKwlyZWFkX3VubG9jaygmcmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCiAvKgogICogSW5zZXJ0IGEgcmVzb3VyY2UgaW50byB0aGUgcmVzb3VyY2UgdHJlZS4gSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIE5VTEwsCiAgKiBvdGhlcndpc2UgcmV0dXJuIHRoZSBjb25mbGljdGluZyByZXNvdXJjZSAoY29tcGFyZSB0byBfX3JlcXVlc3RfcmVzb3VyY2UoKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggY2NhY2RiZC4uZWM1ZjQ3MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTMwNjUsNyArMzA2NSw3IEBACiAjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAjZW5kaWYgLyogX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVyAqLwotCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyZW50KTsKKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4ocHJldiwgY3VycmVudCk7CiAjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVwogCWxvY2FsX2lycV9lbmFibGUoKTsKICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXICovCkBAIC00Mjc5LDkgKzQyNzksOSBAQAogfQogCiAvKgotICogc2NoZWR1bGUoKSBpcyB0aGUgbWFpbiBzY2hlZHVsZXIgZnVuY3Rpb24uCisgKiBfX3NjaGVkdWxlKCkgaXMgdGhlIG1haW4gc2NoZWR1bGVyIGZ1bmN0aW9uLgogICovCi1hc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19zY2hlZCBfX3NjaGVkdWxlKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nICpzd2l0Y2hfY291bnQ7CkBAIC00MzIyLDE2ICs0MzIyLDYgQEAKIAkJCQlpZiAodG9fd2FrZXVwKQogCQkJCQl0cnlfdG9fd2FrZV91cF9sb2NhbCh0b193YWtldXApOwogCQkJfQotCi0JCQkvKgotCQkJICogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIGFuZCB3ZSBoYXZlIHBsdWdnZWQgSU8KLQkJCSAqIHF1ZXVlZCwgbWFrZSBzdXJlIHRvIHN1Ym1pdCBpdCB0byBhdm9pZCBkZWFkbG9ja3MuCi0JCQkgKi8KLQkJCWlmIChibGtfbmVlZHNfZmx1c2hfcGx1ZyhwcmV2KSkgewotCQkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwotCQkJCWJsa19zY2hlZHVsZV9mbHVzaF9wbHVnKHByZXYpOwotCQkJCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLQkJCX0KIAkJfQogCQlzd2l0Y2hfY291bnQgPSAmcHJldi0+bnZjc3c7CiAJfQpAQCAtNDM2OSw2ICs0MzU5LDI2IEBACiAJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQlnb3RvIG5lZWRfcmVzY2hlZDsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX3N1Ym1pdF93b3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICghdHNrLT5zdGF0ZSkKKwkJcmV0dXJuOworCS8qCisJICogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIGFuZCB3ZSBoYXZlIHBsdWdnZWQgSU8gcXVldWVkLAorCSAqIG1ha2Ugc3VyZSB0byBzdWJtaXQgaXQgdG8gYXZvaWQgZGVhZGxvY2tzLgorCSAqLworCWlmIChibGtfbmVlZHNfZmx1c2hfcGx1Zyh0c2spKQorCQlibGtfc2NoZWR1bGVfZmx1c2hfcGx1Zyh0c2spOworfQorCithc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlzY2hlZF9zdWJtaXRfd29yayh0c2spOworCV9fc2NoZWR1bGUoKTsKK30KIEVYUE9SVF9TWU1CT0woc2NoZWR1bGUpOwogCiAjaWZkZWYgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIKQEAgLTQ0MzUsNyArNDQ0NSw3IEBACiAKIAlkbyB7CiAJCWFkZF9wcmVlbXB0X2NvdW50X25vdHJhY2UoUFJFRU1QVF9BQ1RJVkUpOwotCQlzY2hlZHVsZSgpOworCQlfX3NjaGVkdWxlKCk7CiAJCXN1Yl9wcmVlbXB0X2NvdW50X25vdHJhY2UoUFJFRU1QVF9BQ1RJVkUpOwogCiAJCS8qCkBAIC00NDYzLDcgKzQ0NzMsNyBAQAogCWRvIHsKIAkJYWRkX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXNjaGVkdWxlKCk7CisJCV9fc2NoZWR1bGUoKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJc3ViX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOwogCkBAIC01NTg4LDcgKzU1OTgsNyBAQAogc3RhdGljIHZvaWQgX19jb25kX3Jlc2NoZWQodm9pZCkKIHsKIAlhZGRfcHJlZW1wdF9jb3VudChQUkVFTVBUX0FDVElWRSk7Ci0Jc2NoZWR1bGUoKTsKKwlfX3NjaGVkdWxlKCk7CiAJc3ViX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOwogfQogCkBAIC03NDQzLDYgKzc0NTMsNyBAQAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSAqcGVyX2NwdV9wdHIoc2RkLT5zZCwgaik7CiAJCQlpZiAoc2QgJiYgKHNkLT5mbGFncyAmIFNEX09WRVJMQVApKQogCQkJCWZyZWVfc2NoZWRfZ3JvdXBzKHNkLT5ncm91cHMsIDApOworCQkJa2ZyZWUoKnBlcl9jcHVfcHRyKHNkZC0+c2QsIGopKTsKIAkJCWtmcmVlKCpwZXJfY3B1X3B0cihzZGQtPnNnLCBqKSk7CiAJCQlrZnJlZSgqcGVyX2NwdV9wdHIoc2RkLT5zZ3AsIGopKTsKIAkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGExMDFiYTMuLjE4ZWUxZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTQ0LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC91c2VyX25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSA8bGludXgva21zZ19kdW1wLmg+CisvKiBNb3ZlIHNvbWV3aGVyZSBlbHNlIHRvIGF2b2lkIHJlY29tcGlsaW5nPyAqLworI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjIxLDExICs2MjUsMTggQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAorCS8qCisJICogV2UgZG9uJ3QgZmFpbCBpbiBjYXNlIG9mIE5QUk9DIGxpbWl0IGV4Y2VzcyBoZXJlIGJlY2F1c2UgdG9vIG1hbnkKKwkgKiBwb29ybHkgd3JpdHRlbiBwcm9ncmFtcyBkb24ndCBjaGVjayBzZXQqdWlkKCkgcmV0dXJuIGNvZGUsIGFzc3VtaW5nCisJICogaXQgbmV2ZXIgZmFpbHMgaWYgY2FsbGVkIGJ5IHJvb3QuICBXZSBtYXkgc3RpbGwgZW5mb3JjZSBOUFJPQyBsaW1pdAorCSAqIGZvciBwcm9ncmFtcyBkb2luZyBzZXQqdWlkKCkrZXhlY3ZlKCkgYnkgaGFybWxlc3NseSBkZWZlcnJpbmcgdGhlCisJICogZmFpbHVyZSB0byB0aGUgZXhlY3ZlKCkgc3RhZ2UuCisJICovCiAJaWYgKGF0b21pY19yZWFkKCZuZXdfdXNlci0+cHJvY2Vzc2VzKSA+PSBybGltaXQoUkxJTUlUX05QUk9DKSAmJgotCQkJbmV3X3VzZXIgIT0gSU5JVF9VU0VSKSB7Ci0JCWZyZWVfdWlkKG5ld191c2VyKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQorCQkJbmV3X3VzZXIgIT0gSU5JVF9VU0VSKQorCQljdXJyZW50LT5mbGFncyB8PSBQRl9OUFJPQ19FWENFRURFRDsKKwllbHNlCisJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9OUFJPQ19FWENFRURFRDsKIAogCWZyZWVfdWlkKG5ldy0+dXNlcik7CiAJbmV3LT51c2VyID0gbmV3X3VzZXI7CkBAIC0xMTU0LDYgKzExNjUsMzQgQEAKICNkZWZpbmUgb3ZlcnJpZGVfYXJjaGl0ZWN0dXJlKG5hbWUpCTAKICNlbmRpZgogCisvKgorICogV29yayBhcm91bmQgYnJva2VuIHByb2dyYW1zIHRoYXQgY2Fubm90IGhhbmRsZSAiTGludXggMy4wIi4KKyAqIEluc3RlYWQgd2UgbWFwIDMueCB0byAyLjYuNDAreCwgc28gZS5nLiAzLjAgd291bGQgYmUgMi42LjQwCisgKi8KK3N0YXRpYyBpbnQgb3ZlcnJpZGVfcmVsZWFzZShjaGFyIF9fdXNlciAqcmVsZWFzZSwgaW50IGxlbikKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyIGJ1ZltsZW5dOworCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgVU5BTUUyNikgeworCQljaGFyICpyZXN0ID0gVVRTX1JFTEVBU0U7CisJCWludCBuZG90cyA9IDA7CisJCXVuc2lnbmVkIHY7CisKKwkJd2hpbGUgKCpyZXN0KSB7CisJCQlpZiAoKnJlc3QgPT0gJy4nICYmICsrbmRvdHMgPj0gMykKKwkJCQlicmVhazsKKwkJCWlmICghaXNkaWdpdCgqcmVzdCkgJiYgKnJlc3QgIT0gJy4nKQorCQkJCWJyZWFrOworCQkJcmVzdCsrOworCQl9CisJCXYgPSAoKExJTlVYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYpICsgNDA7CisJCXNucHJpbnRmKGJ1ZiwgbGVuLCAiMi42LiV1JXMiLCB2LCByZXN0KTsKKwkJcmV0ID0gY29weV90b191c2VyKHJlbGVhc2UsIGJ1ZiwgbGVuKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogU1lTQ0FMTF9ERUZJTkUxKG5ld3VuYW1lLCBzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICosIG5hbWUpCiB7CiAJaW50IGVycm5vID0gMDsKQEAgLTExNjMsNiArMTIwMiw4IEBACiAJCWVycm5vID0gLUVGQVVMVDsKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAorCWlmICghZXJybm8gJiYgb3ZlcnJpZGVfcmVsZWFzZShuYW1lLT5yZWxlYXNlLCBzaXplb2YobmFtZS0+cmVsZWFzZSkpKQorCQllcnJubyA9IC1FRkFVTFQ7CiAJaWYgKCFlcnJubyAmJiBvdmVycmlkZV9hcmNoaXRlY3R1cmUobmFtZSkpCiAJCWVycm5vID0gLUVGQVVMVDsKIAlyZXR1cm4gZXJybm87CkBAIC0xMTg0LDYgKzEyMjUsOCBAQAogCQllcnJvciA9IC1FRkFVTFQ7CiAJdXBfcmVhZCgmdXRzX3NlbSk7CiAKKwlpZiAoIWVycm9yICYmIG92ZXJyaWRlX3JlbGVhc2UobmFtZS0+cmVsZWFzZSwgc2l6ZW9mKG5hbWUtPnJlbGVhc2UpKSkKKwkJZXJyb3IgPSAtRUZBVUxUOwogCWlmICghZXJyb3IgJiYgb3ZlcnJpZGVfYXJjaGl0ZWN0dXJlKG5hbWUpKQogCQllcnJvciA9IC1FRkFVTFQ7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTIxOCw2ICsxMjYxLDggQEAKIAogCWlmICghZXJyb3IgJiYgb3ZlcnJpZGVfYXJjaGl0ZWN0dXJlKG5hbWUpKQogCQllcnJvciA9IC1FRkFVTFQ7CisJaWYgKCFlcnJvciAmJiBvdmVycmlkZV9yZWxlYXNlKG5hbWUtPnJlbGVhc2UsIHNpemVvZihuYW1lLT5yZWxlYXNlKSkpCisJCWVycm9yID0gLUVGQVVMVDsKIAlyZXR1cm4gZXJyb3IgPyAtRUZBVUxUIDogMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c19uaS5jIGIva2VybmVsL3N5c19uaS5jCmluZGV4IDYyY2JjODguLmE5YTVkZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNfbmkuYworKysgYi9rZXJuZWwvc3lzX25pLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotY29uZF9zeXNjYWxsKHN5c19uZnNzZXJ2Y3RsKTsKIGNvbmRfc3lzY2FsbChzeXNfcXVvdGFjdGwpOwogY29uZF9zeXNjYWxsKHN5czMyX3F1b3RhY3RsKTsKIGNvbmRfc3lzY2FsbChzeXNfYWNjdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwppbmRleCAzYjhlMDI4Li5lOGJmZmJlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCisrKyBiL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgIi4uL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5c2N0bC5oIgorI2luY2x1ZGUgIi4uL2ZzL3hmcy94ZnNfc3lzY3RsLmgiCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bmV0L2lwX3ZzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggNGU0OTMyYS4uMzYyZGE2NSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSAiLi4vZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmgiCisjaW5jbHVkZSAiLi4vZnMveGZzL3hmc19zeXNjdGwuaCIKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC90YXNrc3RhdHMuYyBiL2tlcm5lbC90YXNrc3RhdHMuYwppbmRleCBkMWRiMjg4Li5lMTljZTE0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGFza3N0YXRzLmMKKysrIGIva2VybmVsL3Rhc2tzdGF0cy5jCkBAIC0yOTEsMzAgKzI5MSwyOCBAQAogCWlmICghY3B1bWFza19zdWJzZXQobWFzaywgY3B1X3Bvc3NpYmxlX21hc2spKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXMgPSBOVUxMOwogCWlmIChpc2FkZCA9PSBSRUdJU1RFUikgewogCQlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7Ci0JCQlpZiAoIXMpCi0JCQkJcyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGxpc3RlbmVyKSwKLQkJCQkJCSBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjcHUpKTsKKwkJCXMgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lciksCisJCQkJCUdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOwogCQkJaWYgKCFzKQogCQkJCWdvdG8gY2xlYW51cDsKKwogCQkJcy0+cGlkID0gcGlkOwotCQkJSU5JVF9MSVNUX0hFQUQoJnMtPmxpc3QpOwogCQkJcy0+dmFsaWQgPSAxOwogCiAJCQlsaXN0ZW5lcnMgPSAmcGVyX2NwdShsaXN0ZW5lcl9hcnJheSwgY3B1KTsKIAkJCWRvd25fd3JpdGUoJmxpc3RlbmVycy0+c2VtKTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzMiwgdG1wLCAmbGlzdGVuZXJzLT5saXN0LCBsaXN0KSB7Ci0JCQkJaWYgKHMyLT5waWQgPT0gcGlkKQotCQkJCQlnb3RvIG5leHRfY3B1OworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzMiwgJmxpc3RlbmVycy0+bGlzdCwgbGlzdCkgeworCQkJCWlmIChzMi0+cGlkID09IHBpZCAmJiBzMi0+dmFsaWQpCisJCQkJCWdvdG8gZXhpc3RzOwogCQkJfQogCQkJbGlzdF9hZGQoJnMtPmxpc3QsICZsaXN0ZW5lcnMtPmxpc3QpOwogCQkJcyA9IE5VTEw7Ci1uZXh0X2NwdToKK2V4aXN0czoKIAkJCXVwX3dyaXRlKCZsaXN0ZW5lcnMtPnNlbSk7CisJCQlrZnJlZShzKTsgLyogbm9wIGlmIE5VTEwgKi8KIAkJfQotCQlrZnJlZShzKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9hbGFybXRpbWVyLmMgYi9rZXJuZWwvdGltZS9hbGFybXRpbWVyLmMKaW5kZXggNTlmMzY5Zi4uZWE1ZTFhOSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvYWxhcm10aW1lci5jCisrKyBiL2tlcm5lbC90aW1lL2FsYXJtdGltZXIuYwpAQCAtNDQxLDYgKzQ0MSw4IEBACiBzdGF0aWMgdm9pZCBhbGFybV90aW1lcl9nZXQoc3RydWN0IGtfaXRpbWVyICp0aW1yLAogCQkJCXN0cnVjdCBpdGltZXJzcGVjICpjdXJfc2V0dGluZykKIHsKKwltZW1zZXQoY3VyX3NldHRpbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXRpbWVyc3BlYykpOworCiAJY3VyX3NldHRpbmctPml0X2ludGVydmFsID0KIAkJCWt0aW1lX3RvX3RpbWVzcGVjKHRpbXItPml0LmFsYXJtdGltZXIucGVyaW9kKTsKIAljdXJfc2V0dGluZy0+aXRfdmFsdWUgPQpAQCAtNDc5LDExICs0ODEsMTcgQEAKIAlpZiAoIXJ0Y2RldikKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAotCS8qIFNhdmUgb2xkIHZhbHVlcyAqLwotCW9sZF9zZXR0aW5nLT5pdF9pbnRlcnZhbCA9Ci0JCQlrdGltZV90b190aW1lc3BlYyh0aW1yLT5pdC5hbGFybXRpbWVyLnBlcmlvZCk7Ci0Jb2xkX3NldHRpbmctPml0X3ZhbHVlID0KLQkJCWt0aW1lX3RvX3RpbWVzcGVjKHRpbXItPml0LmFsYXJtdGltZXIubm9kZS5leHBpcmVzKTsKKwkvKgorCSAqIFhYWCBIQUNLISBDdXJyZW50bHkgd2UgY2FuIERPUyBhIHN5c3RlbSBpZiB0aGUgaW50ZXJ2YWwKKwkgKiBwZXJpb2Qgb24gYWxhcm10aW1lcnMgaXMgdG9vIHNtYWxsLiBDYXAgdGhlIGludGVydmFsIGhlcmUKKwkgKiB0byAxMDB1cyBhbmQgc29sdmUgdGhpcyBwcm9wZXJseSBpbiBhIGZ1dHVyZSBwYXRjaCEgLWpzdHVsdHoKKwkgKi8KKwlpZiAoKG5ld19zZXR0aW5nLT5pdF9pbnRlcnZhbC50dl9zZWMgPT0gMCkgJiYKKwkJCShuZXdfc2V0dGluZy0+aXRfaW50ZXJ2YWwudHZfbnNlYyA8IDEwMDAwMCkpCisJCW5ld19zZXR0aW5nLT5pdF9pbnRlcnZhbC50dl9uc2VjID0gMTAwMDAwOworCisJaWYgKG9sZF9zZXR0aW5nKQorCQlhbGFybV90aW1lcl9nZXQodGltciwgb2xkX3NldHRpbmcpOwogCiAJLyogSWYgdGhlIHRpbWVyIHdhcyBhbHJlYWR5IHNldCwgY2FuY2VsIGl0ICovCiAJYWxhcm1fY2FuY2VsKCZ0aW1yLT5pdC5hbGFybXRpbWVyKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9LY29uZmlnIGIva2VybmVsL3RyYWNlL0tjb25maWcKaW5kZXggMmFkMzllNS4uY2QzMTM0NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTgyLDcgKzgyLDcgQEAKIAkgIHBvd2VyOnBvd2VyX2ZyZXF1ZW5jeQogCSAgVGhpcyBpcyBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkKIAkgIGFuZCB3aWxsIHZhbmlzaCBhZnRlciA1IGtlcm5lbCBpdGVyYXRpb25zLAotCSAgbmFtZWx5IDIuNi40MS4KKwkgIG5hbWVseSAzLjEuCiAKIGNvbmZpZyBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAlib29sCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDY5NTdhYTIuLjdjOTEwYTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0yMDYsNiArMjA2LDggQEAKIAl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBSQUhFQUQpOwogCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIE1FVEEpOwogCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIERJU0NBUkQpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEZMVVNIKTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBGVUEpOwogCiAJcGlkID0gdHNrLT5waWQ7CiAJaWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSkKQEAgLTEwNTQsNiArMTA1Niw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmICh0YyAmIEJMS19UQ19GTFVTSCkKKwkJcndic1tpKytdID0gJ0YnOworCiAJaWYgKHRjICYgQkxLX1RDX0RJU0NBUkQpCiAJCXJ3YnNbaSsrXSA9ICdEJzsKIAllbHNlIGlmICh0YyAmIEJMS19UQ19XUklURSkKQEAgLTEwNjMsMTAgKzEwNjgsMTAgQEAKIAllbHNlCiAJCXJ3YnNbaSsrXSA9ICdOJzsKIAorCWlmICh0YyAmIEJMS19UQ19GVUEpCisJCXJ3YnNbaSsrXSA9ICdGJzsKIAlpZiAodGMgJiBCTEtfVENfQUhFQUQpCiAJCXJ3YnNbaSsrXSA9ICdBJzsKLQlpZiAodGMgJiBCTEtfVENfQkFSUklFUikKLQkJcndic1tpKytdID0gJ0InOwogCWlmICh0YyAmIEJMS19UQ19TWU5DKQogCQlyd2JzW2krK10gPSAnUyc7CiAJaWYgKHRjICYgQkxLX1RDX01FVEEpCkBAIC0xMTMyLDcgKzExMzcsNyBAQAogCiBzdGF0aWMgaW50IGJsa19sb2dfYWN0aW9uX2NsYXNzaWMoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpCiB7Ci0JY2hhciByd2JzWzZdOworCWNoYXIgcndic1tSV0JTX0xFTl07CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzICA9IGl0ZXItPnRzOwogCXVuc2lnbmVkIGxvbmcgbnNlY19yZW0gPSBkb19kaXYodHMsIE5TRUNfUEVSX1NFQyk7CiAJdW5zaWduZWQgc2VjcwkgICAgICAgPSAodW5zaWduZWQgbG9uZyl0czsKQEAgLTExNDgsNyArMTE1Myw3IEBACiAKIHN0YXRpYyBpbnQgYmxrX2xvZ19hY3Rpb24oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QpCiB7Ci0JY2hhciByd2JzWzZdOworCWNoYXIgcndic1tSV0JTX0xFTl07CiAJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLT5lbnQpOwogCiAJZmlsbF9yd2JzKHJ3YnMsIHQpOwpAQCAtMTU2MSw3ICsxNTY2LDcgQEAKIH0gbWFza19tYXBzW10gPSB7CiAJeyBCTEtfVENfUkVBRCwJCSJyZWFkIgkJfSwKIAl7IEJMS19UQ19XUklURSwJCSJ3cml0ZSIJCX0sCi0JeyBCTEtfVENfQkFSUklFUiwJImJhcnJpZXIiCX0sCisJeyBCTEtfVENfRkxVU0gsCQkiZmx1c2giCQl9LAogCXsgQkxLX1RDX1NZTkMsCQkic3luYyIJCX0sCiAJeyBCTEtfVENfUVVFVUUsCQkicXVldWUiCQl9LAogCXsgQkxLX1RDX1JFUVVFVUUsCSJyZXF1ZXVlIgl9LApAQCAtMTU3Myw2ICsxNTc4LDcgQEAKIAl7IEJMS19UQ19NRVRBLAkJIm1ldGEiCQl9LAogCXsgQkxLX1RDX0RJU0NBUkQsCSJkaXNjYXJkIgl9LAogCXsgQkxLX1RDX0RSVl9EQVRBLAkiZHJ2X2RhdGEiCX0sCisJeyBCTEtfVENfRlVBLAkJImZ1YSIJCX0sCiB9OwogCiBzdGF0aWMgaW50IGJsa190cmFjZV9zdHIybWFzayhjb25zdCBjaGFyICpzdHIpCkBAIC0xNzg4LDYgKzE3OTQsOSBAQAogewogCWludCBpID0gMDsKIAorCWlmIChydyAmIFJFUV9GTFVTSCkKKwkJcndic1tpKytdID0gJ0YnOworCiAJaWYgKHJ3ICYgV1JJVEUpCiAJCXJ3YnNbaSsrXSA9ICdXJzsKIAllbHNlIGlmIChydyAmIFJFUV9ESVNDQVJEKQpAQCAtMTc5Nyw2ICsxODA2LDggQEAKIAllbHNlCiAJCXJ3YnNbaSsrXSA9ICdOJzsKIAorCWlmIChydyAmIFJFUV9GVUEpCisJCXJ3YnNbaSsrXSA9ICdGJzsKIAlpZiAocncgJiBSRVFfUkFIRUFEKQogCQlyd2JzW2krK10gPSAnQSc7CiAJaWYgKHJ3ICYgUkVRX1NZTkMpCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMjVmYjFiMC4uMTc4M2FhYiAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMjQxMiw4ICsyNDEyLDEzIEBACiAKIAlmb3JfZWFjaF9jd3FfY3B1KGNwdSwgd3EpIHsKIAkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOworCQlib29sIGRyYWluZWQ7CiAKLQkJaWYgKCFjd3EtPm5yX2FjdGl2ZSAmJiBsaXN0X2VtcHR5KCZjd3EtPmRlbGF5ZWRfd29ya3MpKQorCQlzcGluX2xvY2tfaXJxKCZjd3EtPmdjd3EtPmxvY2spOworCQlkcmFpbmVkID0gIWN3cS0+bnJfYWN0aXZlICYmIGxpc3RfZW1wdHkoJmN3cS0+ZGVsYXllZF93b3Jrcyk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5nY3dxLT5sb2NrKTsKKworCQlpZiAoZHJhaW5lZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgrK2ZsdXNoX2NudCA9PSAxMCB8fApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAzMmYzZTVhLi42YzY5NWZmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMjc2LDQgKzI3Niw3IEBACiAJICBzbyBpdHMgY2FsY3VsYXRpb25zIGFyZSBpbiBmaXhlZCBwb2ludC4gTW9kdWxlcyBjYW4gc2VsZWN0IHRoaXMKIAkgIHdoZW4gdGhleSByZXF1aXJlIHRoaXMgZnVuY3Rpb24uIE1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjb3JkaWMuCiAKK2NvbmZpZyBMTElTVAorCWJvb2wKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDg5MmY0ZTIuLjNmNWJjNmQgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTEwLDkgKzEwLDkgQEAKIGxpYi15IDo9IGN0eXBlLm8gc3RyaW5nLm8gdnNwcmludGYubyBjbWRsaW5lLm8gXAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIHRpbWVycXVldWUub1wKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAotCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCisJIHNoYTEubyBtZDUubyBpcnFfcmVncy5vIHJlY2lwcm9jYWxfZGl2Lm8gYXJndl9zcGxpdC5vIFwKIAkgcHJvcG9ydGlvbnMubyBwcmlvX2hlYXAubyByYXRlbGltaXQubyBzaG93X21lbS5vIFwKLQkgaXNfc2luZ2xlX3RocmVhZGVkLm8gcGxpc3QubyBkZWNvbXByZXNzLm8gZmluZF9uZXh0X2JpdC5vCisJIGlzX3NpbmdsZV90aHJlYWRlZC5vIHBsaXN0Lm8gZGVjb21wcmVzcy5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCkBAIC0yMiw3ICsyMiw3IEBACiBvYmoteSArPSBiY2QubyBkaXY2NC5vIHNvcnQubyBwYXJzZXIubyBoYWxmbWQ0Lm8gZGVidWdfbG9ja3MubyByYW5kb20zMi5vIFwKIAkgYnVzdF9zcGlubG9ja3MubyBoZXhkdW1wLm8ga2FzcHJpbnRmLm8gYml0bWFwLm8gc2NhdHRlcmxpc3QubyBcCiAJIHN0cmluZ19oZWxwZXJzLm8gZ2NkLm8gbGNtLm8gbGlzdF9zb3J0Lm8gdXVpZC5vIGZsZXhfYXJyYXkubyBcCi0JIGJzZWFyY2gubyBmaW5kX2xhc3RfYml0Lm8KKwkgYnNlYXJjaC5vIGZpbmRfbGFzdF9iaXQubyBmaW5kX25leHRfYml0Lm8KIG9iai15ICs9IGtzdHJ0b3gubwogb2JqLSQoQ09ORklHX1RFU1RfS1NUUlRPWCkgKz0gdGVzdC1rc3RydG94Lm8KIApAQCAtMTE1LDYgKzExNSw4IEBACiAKIG9iai0kKENPTkZJR19DT1JESUMpICs9IGNvcmRpYy5vCiAKK29iai0kKENPTkZJR19MTElTVCkgKz0gbGxpc3QubworCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCiAKZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAzN2VmNGIwLi4yZjQ0MTJlIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC0yNzEsOCArMjcxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woX19iaXRtYXBfd2VpZ2h0KTsKIAotI2RlZmluZSBCSVRNQVBfRklSU1RfV09SRF9NQVNLKHN0YXJ0KSAofjBVTCA8PCAoKHN0YXJ0KSAlIEJJVFNfUEVSX0xPTkcpKQotCiB2b2lkIGJpdG1hcF9zZXQodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc3RhcnQsIGludCBucikKIHsKIAl1bnNpZ25lZCBsb25nICpwID0gbWFwICsgQklUX1dPUkQoc3RhcnQpOwpkaWZmIC0tZ2l0IGEvbGliL2ZhdWx0LWluamVjdC5jIGIvbGliL2ZhdWx0LWluamVjdC5jCmluZGV4IDI1NzdiMTIuLmYxOTNiNzcgMTAwNjQ0Ci0tLSBhL2xpYi9mYXVsdC1pbmplY3QuYworKysgYi9saWIvZmF1bHQtaW5qZWN0LmMKQEAgLTE5NywyMSArMTk3LDE1IEBACiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCB2YWx1ZSwgJmZvcHNfYXRvbWljX3QpOwogfQogCi12b2lkIGNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0cikKLXsKLQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYXR0ci0+ZGlyKTsKLX0KLQotaW50IGluaXRfZmF1bHRfYXR0cl9kZW50cmllcyhzdHJ1Y3QgZmF1bHRfYXR0ciAqYXR0ciwgY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBkZW50cnkgKmZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIoY29uc3QgY2hhciAqbmFtZSwKKwkJCXN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGZhdWx0X2F0dHIgKmF0dHIpCiB7CiAJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiB8IFNfSVdVU1I7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwogCi0JZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIE5VTEwpOworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBwYXJlbnQpOwogCWlmICghZGlyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWF0dHItPmRpciA9IGRpcjsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoIWRlYnVnZnNfY3JlYXRlX3VsKCJwcm9iYWJpbGl0eSIsIG1vZGUsIGRpciwgJmF0dHItPnByb2JhYmlsaXR5KSkKIAkJZ290byBmYWlsOwpAQCAtMjQzLDExICsyMzcsMTEgQEAKIAogI2VuZGlmIC8qIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVIgKi8KIAotCXJldHVybiAwOworCXJldHVybiBkaXI7CiBmYWlsOgotCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhdHRyLT5kaXIpOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkaXIpOwogCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9saWIvZ2VuYWxsb2MuYyBiL2xpYi9nZW5hbGxvYy5jCmluZGV4IDU3N2RkZjguLmYzNTJjYzQgMTAwNjQ0Ci0tLSBhL2xpYi9nZW5hbGxvYy5jCisrKyBiL2xpYi9nZW5hbGxvYy5jCkBAIC0xLDggKzEsMjYgQEAKIC8qCi0gKiBCYXNpYyBnZW5lcmFsIHB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYW5hZ2luZyBzcGVjaWFsIHB1cnBvc2UgbWVtb3J5Ci0gKiBub3QgbWFuYWdlZCBieSB0aGUgcmVndWxhciBrbWFsbG9jL2tmcmVlIGludGVyZmFjZS4KLSAqIFVzZXMgZm9yIHRoaXMgaW5jbHVkZXMgb24tZGV2aWNlIHNwZWNpYWwgbWVtb3J5LCB1bmNhY2hlZCBtZW1vcnkKLSAqIGV0Yy4KKyAqIEJhc2ljIGdlbmVyYWwgcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbmFnaW5nIHNwZWNpYWwgcHVycG9zZQorICogbWVtb3J5LCBmb3IgZXhhbXBsZSwgbWVtb3J5IHRoYXQgaXMgbm90IG1hbmFnZWQgYnkgdGhlIHJlZ3VsYXIKKyAqIGttYWxsb2Mva2ZyZWUgaW50ZXJmYWNlLiAgVXNlcyBmb3IgdGhpcyBpbmNsdWRlcyBvbi1kZXZpY2Ugc3BlY2lhbAorICogbWVtb3J5LCB1bmNhY2hlZCBtZW1vcnkgZXRjLgorICoKKyAqIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBhbGxvY2F0b3IgaW4gTk1JIGhhbmRsZXJzIGFuZCBvdGhlciBzcGVjaWFsCisgKiB1bmJsb2NrYWJsZSBjb250ZXh0cyB0aGF0IGNvdWxkIG90aGVyd2lzZSBkZWFkbG9jayBvbiBsb2Nrcy4gIFRoaXMKKyAqIGlzIGltcGxlbWVudGVkIGJ5IHVzaW5nIGF0b21pYyBvcGVyYXRpb25zIGFuZCByZXRyaWVzIG9uIGFueQorICogY29uZmxpY3RzLiAgVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHRoZXJlIG1heSBiZSBsaXZlbG9ja3MgaW4KKyAqIGV4dHJlbWUgY2FzZXMuICBGb3IgYmV0dGVyIHNjYWxhYmlsaXR5LCBvbmUgYWxsb2NhdG9yIGNhbiBiZSB1c2VkCisgKiBmb3IgZWFjaCBDUFUuCisgKgorICogVGhlIGxvY2tsZXNzIG9wZXJhdGlvbiBvbmx5IHdvcmtzIGlmIHRoZXJlIGlzIGVub3VnaCBtZW1vcnkKKyAqIGF2YWlsYWJsZS4gIElmIG5ldyBtZW1vcnkgaXMgYWRkZWQgdG8gdGhlIHBvb2wgYSBsb2NrIGhhcyB0byBiZQorICogc3RpbGwgdGFrZW4uICBTbyBhbnkgdXNlciByZWx5aW5nIG9uIGxvY2tsZXNzbmVzcyBoYXMgdG8gZW5zdXJlCisgKiB0aGF0IHN1ZmZpY2llbnQgbWVtb3J5IGlzIHByZWFsbG9jYXRlZC4KKyAqCisgKiBUaGUgYmFzaWMgYXRvbWljIG9wZXJhdGlvbiBvZiB0aGlzIGFsbG9jYXRvciBpcyBjbXB4Y2hnIG9uIGxvbmcuCisgKiBPbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBOTUktc2FmZSBjbXB4Y2hnIGltcGxlbWVudGF0aW9uLAorICogdGhlIGFsbG9jYXRvciBjYW4gTk9UIGJlIHVzZWQgaW4gTk1JIGhhbmRsZXIuICBTbyBjb2RlIHVzZXMgdGhlCisgKiBhbGxvY2F0b3IgaW4gTk1JIGhhbmRsZXIgc2hvdWxkIGRlcGVuZCBvbgorICogQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHLgogICoKICAqIENvcHlyaWdodCAyMDA1IChDKSBKZXMgU29yZW5zZW4gPGplc0B0cmFpbmVkLW1vbmtleS5vcmc+CiAgKgpAQCAtMTMsOCArMzEsMTA5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9nZW5hbGxvYy5oPgogCitzdGF0aWMgaW50IHNldF9iaXRzX2xsKHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbWFza190b19zZXQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwsIG52YWw7CisKKwludmFsID0gKmFkZHI7CisJZG8geworCQl2YWwgPSBudmFsOworCQlpZiAodmFsICYgbWFza190b19zZXQpCisJCQlyZXR1cm4gLUVCVVNZOworCQljcHVfcmVsYXgoKTsKKwl9IHdoaWxlICgobnZhbCA9IGNtcHhjaGcoYWRkciwgdmFsLCB2YWwgfCBtYXNrX3RvX3NldCkpICE9IHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGVhcl9iaXRzX2xsKHVuc2lnbmVkIGxvbmcgKmFkZHIsIHVuc2lnbmVkIGxvbmcgbWFza190b19jbGVhcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbnZhbDsKKworCW52YWwgPSAqYWRkcjsKKwlkbyB7CisJCXZhbCA9IG52YWw7CisJCWlmICgodmFsICYgbWFza190b19jbGVhcikgIT0gbWFza190b19jbGVhcikKKwkJCXJldHVybiAtRUJVU1k7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChudmFsID0gY21weGNoZyhhZGRyLCB2YWwsIHZhbCAmIH5tYXNrX3RvX2NsZWFyKSkgIT0gdmFsKTsKKworCXJldHVybiAwOworfQorCisvKgorICogYml0bWFwX3NldF9sbCAtIHNldCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24KKyAqIEBtYXA6IHBvaW50ZXIgdG8gYSBiaXRtYXAKKyAqIEBzdGFydDogYSBiaXQgcG9zaXRpb24gaW4gQG1hcAorICogQG5yOiBudW1iZXIgb2YgYml0cyB0byBzZXQKKyAqCisgKiBTZXQgQG5yIGJpdHMgc3RhcnQgZnJvbSBAc3RhcnQgaW4gQG1hcCBsb2NrLWxlc3NseS4gU2V2ZXJhbCB1c2VycworICogY2FuIHNldC9jbGVhciB0aGUgc2FtZSBiaXRtYXAgc2ltdWx0YW5lb3VzbHkgd2l0aG91dCBsb2NrLiBJZiB0d28KKyAqIHVzZXJzIHNldCB0aGUgc2FtZSBiaXQsIG9uZSB1c2VyIHdpbGwgcmV0dXJuIHJlbWFpbiBiaXRzLCBvdGhlcndpc2UKKyAqIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IGJpdG1hcF9zZXRfbGwodW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc3RhcnQsIGludCBucikKK3sKKwl1bnNpZ25lZCBsb25nICpwID0gbWFwICsgQklUX1dPUkQoc3RhcnQpOworCWNvbnN0IGludCBzaXplID0gc3RhcnQgKyBucjsKKwlpbnQgYml0c190b19zZXQgPSBCSVRTX1BFUl9MT05HIC0gKHN0YXJ0ICUgQklUU19QRVJfTE9ORyk7CisJdW5zaWduZWQgbG9uZyBtYXNrX3RvX3NldCA9IEJJVE1BUF9GSVJTVF9XT1JEX01BU0soc3RhcnQpOworCisJd2hpbGUgKG5yIC0gYml0c190b19zZXQgPj0gMCkgeworCQlpZiAoc2V0X2JpdHNfbGwocCwgbWFza190b19zZXQpKQorCQkJcmV0dXJuIG5yOworCQluciAtPSBiaXRzX3RvX3NldDsKKwkJYml0c190b19zZXQgPSBCSVRTX1BFUl9MT05HOworCQltYXNrX3RvX3NldCA9IH4wVUw7CisJCXArKzsKKwl9CisJaWYgKG5yKSB7CisJCW1hc2tfdG9fc2V0ICY9IEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhzaXplKTsKKwkJaWYgKHNldF9iaXRzX2xsKHAsIG1hc2tfdG9fc2V0KSkKKwkJCXJldHVybiBucjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGJpdG1hcF9jbGVhcl9sbCAtIGNsZWFyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbgorICogQG1hcDogcG9pbnRlciB0byBhIGJpdG1hcAorICogQHN0YXJ0OiBhIGJpdCBwb3NpdGlvbiBpbiBAbWFwCisgKiBAbnI6IG51bWJlciBvZiBiaXRzIHRvIHNldAorICoKKyAqIENsZWFyIEBuciBiaXRzIHN0YXJ0IGZyb20gQHN0YXJ0IGluIEBtYXAgbG9jay1sZXNzbHkuIFNldmVyYWwgdXNlcnMKKyAqIGNhbiBzZXQvY2xlYXIgdGhlIHNhbWUgYml0bWFwIHNpbXVsdGFuZW91c2x5IHdpdGhvdXQgbG9jay4gSWYgdHdvCisgKiB1c2VycyBjbGVhciB0aGUgc2FtZSBiaXQsIG9uZSB1c2VyIHdpbGwgcmV0dXJuIHJlbWFpbiBiaXRzLAorICogb3RoZXJ3aXNlIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IGJpdG1hcF9jbGVhcl9sbCh1bnNpZ25lZCBsb25nICptYXAsIGludCBzdGFydCwgaW50IG5yKQoreworCXVuc2lnbmVkIGxvbmcgKnAgPSBtYXAgKyBCSVRfV09SRChzdGFydCk7CisJY29uc3QgaW50IHNpemUgPSBzdGFydCArIG5yOworCWludCBiaXRzX3RvX2NsZWFyID0gQklUU19QRVJfTE9ORyAtIChzdGFydCAlIEJJVFNfUEVSX0xPTkcpOworCXVuc2lnbmVkIGxvbmcgbWFza190b19jbGVhciA9IEJJVE1BUF9GSVJTVF9XT1JEX01BU0soc3RhcnQpOworCisJd2hpbGUgKG5yIC0gYml0c190b19jbGVhciA+PSAwKSB7CisJCWlmIChjbGVhcl9iaXRzX2xsKHAsIG1hc2tfdG9fY2xlYXIpKQorCQkJcmV0dXJuIG5yOworCQluciAtPSBiaXRzX3RvX2NsZWFyOworCQliaXRzX3RvX2NsZWFyID0gQklUU19QRVJfTE9ORzsKKwkJbWFza190b19jbGVhciA9IH4wVUw7CisJCXArKzsKKwl9CisJaWYgKG5yKSB7CisJCW1hc2tfdG9fY2xlYXIgJj0gQklUTUFQX0xBU1RfV09SRF9NQVNLKHNpemUpOworCQlpZiAoY2xlYXJfYml0c19sbChwLCBtYXNrX3RvX2NsZWFyKSkKKwkJCXJldHVybiBucjsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogLyoqCiAgKiBnZW5fcG9vbF9jcmVhdGUgLSBjcmVhdGUgYSBuZXcgc3BlY2lhbCBtZW1vcnkgcG9vbApAQCAtMzAsNyArMTQ5LDcgQEAKIAogCXBvb2wgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBnZW5fcG9vbCksIEdGUF9LRVJORUwsIG5pZCk7CiAJaWYgKHBvb2wgIT0gTlVMTCkgewotCQlyd2xvY2tfaW5pdCgmcG9vbC0+bG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZwb29sLT5sb2NrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmNodW5rcyk7CiAJCXBvb2wtPm1pbl9hbGxvY19vcmRlciA9IG1pbl9hbGxvY19vcmRlcjsKIAl9CkBAIC02MywxNCArMTgyLDE0IEBACiAJaWYgKHVubGlrZWx5KGNodW5rID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNwaW5fbG9ja19pbml0KCZjaHVuay0+bG9jayk7CiAJY2h1bmstPnBoeXNfYWRkciA9IHBoeXM7CiAJY2h1bmstPnN0YXJ0X2FkZHIgPSB2aXJ0OwogCWNodW5rLT5lbmRfYWRkciA9IHZpcnQgKyBzaXplOworCWF0b21pY19zZXQoJmNodW5rLT5hdmFpbCwgc2l6ZSk7CiAKLQl3cml0ZV9sb2NrKCZwb29sLT5sb2NrKTsKLQlsaXN0X2FkZCgmY2h1bmstPm5leHRfY2h1bmssICZwb29sLT5jaHVua3MpOwotCXdyaXRlX3VubG9jaygmcG9vbC0+bG9jayk7CisJc3Bpbl9sb2NrKCZwb29sLT5sb2NrKTsKKwlsaXN0X2FkZF9yY3UoJmNodW5rLT5uZXh0X2NodW5rLCAmcG9vbC0+Y2h1bmtzKTsKKwlzcGluX3VubG9jaygmcG9vbC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg1LDE5ICsyMDQsMTkgQEAKICAqLwogcGh5c19hZGRyX3QgZ2VuX3Bvb2xfdmlydF90b19waHlzKHN0cnVjdCBnZW5fcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKl9jaHVuazsKIAlzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmsgKmNodW5rOworCXBoeXNfYWRkcl90IHBhZGRyID0gLTE7CiAKLQlyZWFkX2xvY2soJnBvb2wtPmxvY2spOwotCWxpc3RfZm9yX2VhY2goX2NodW5rLCAmcG9vbC0+Y2h1bmtzKSB7Ci0JCWNodW5rID0gbGlzdF9lbnRyeShfY2h1bmssIHN0cnVjdCBnZW5fcG9vbF9jaHVuaywgbmV4dF9jaHVuayk7Ci0KLQkJaWYgKGFkZHIgPj0gY2h1bmstPnN0YXJ0X2FkZHIgJiYgYWRkciA8IGNodW5rLT5lbmRfYWRkcikKLQkJCXJldHVybiBjaHVuay0+cGh5c19hZGRyICsgYWRkciAtIGNodW5rLT5zdGFydF9hZGRyOworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjaHVuaywgJnBvb2wtPmNodW5rcywgbmV4dF9jaHVuaykgeworCQlpZiAoYWRkciA+PSBjaHVuay0+c3RhcnRfYWRkciAmJiBhZGRyIDwgY2h1bmstPmVuZF9hZGRyKSB7CisJCQlwYWRkciA9IGNodW5rLT5waHlzX2FkZHIgKyAoYWRkciAtIGNodW5rLT5zdGFydF9hZGRyKTsKKwkJCWJyZWFrOworCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZwb29sLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiAtMTsKKwlyZXR1cm4gcGFkZHI7CiB9CiBFWFBPUlRfU1lNQk9MKGdlbl9wb29sX3ZpcnRfdG9fcGh5cyk7CiAKQEAgLTExNSw3ICsyMzQsNiBAQAogCWludCBvcmRlciA9IHBvb2wtPm1pbl9hbGxvY19vcmRlcjsKIAlpbnQgYml0LCBlbmRfYml0OwogCi0KIAlsaXN0X2Zvcl9lYWNoX3NhZmUoX2NodW5rLCBfbmV4dF9jaHVuaywgJnBvb2wtPmNodW5rcykgewogCQljaHVuayA9IGxpc3RfZW50cnkoX2NodW5rLCBzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmssIG5leHRfY2h1bmspOwogCQlsaXN0X2RlbCgmY2h1bmstPm5leHRfY2h1bmspOwpAQCAtMTM3LDQ0ICsyNTUsNTAgQEAKICAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcG9vbAogICoKICAqIEFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHNwZWNpZmllZCBwb29sLgotICogVXNlcyBhIGZpcnN0LWZpdCBhbGdvcml0aG0uCisgKiBVc2VzIGEgZmlyc3QtZml0IGFsZ29yaXRobS4gQ2FuIG5vdCBiZSB1c2VkIGluIE5NSSBoYW5kbGVyIG9uCisgKiBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgTk1JLXNhZmUgY21weGNoZyBpbXBsZW1lbnRhdGlvbi4KICAqLwogdW5zaWduZWQgbG9uZyBnZW5fcG9vbF9hbGxvYyhzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKl9jaHVuazsKIAlzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmsgKmNodW5rOwotCXVuc2lnbmVkIGxvbmcgYWRkciwgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKIAlpbnQgb3JkZXIgPSBwb29sLT5taW5fYWxsb2Nfb3JkZXI7Ci0JaW50IG5iaXRzLCBzdGFydF9iaXQsIGVuZF9iaXQ7CisJaW50IG5iaXRzLCBzdGFydF9iaXQgPSAwLCBlbmRfYml0LCByZW1haW47CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCisJQlVHX09OKGluX25taSgpKTsKKyNlbmRpZgogCiAJaWYgKHNpemUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAluYml0cyA9IChzaXplICsgKDFVTCA8PCBvcmRlcikgLSAxKSA+PiBvcmRlcjsKLQotCXJlYWRfbG9jaygmcG9vbC0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaChfY2h1bmssICZwb29sLT5jaHVua3MpIHsKLQkJY2h1bmsgPSBsaXN0X2VudHJ5KF9jaHVuaywgc3RydWN0IGdlbl9wb29sX2NodW5rLCBuZXh0X2NodW5rKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2h1bmssICZwb29sLT5jaHVua3MsIG5leHRfY2h1bmspIHsKKwkJaWYgKHNpemUgPiBhdG9taWNfcmVhZCgmY2h1bmstPmF2YWlsKSkKKwkJCWNvbnRpbnVlOwogCiAJCWVuZF9iaXQgPSAoY2h1bmstPmVuZF9hZGRyIC0gY2h1bmstPnN0YXJ0X2FkZHIpID4+IG9yZGVyOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjaHVuay0+bG9jaywgZmxhZ3MpOwotCQlzdGFydF9iaXQgPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYShjaHVuay0+Yml0cywgZW5kX2JpdCwgMCwKLQkJCQkJCW5iaXRzLCAwKTsKLQkJaWYgKHN0YXJ0X2JpdCA+PSBlbmRfYml0KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaHVuay0+bG9jaywgZmxhZ3MpOworcmV0cnk6CisJCXN0YXJ0X2JpdCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVhKGNodW5rLT5iaXRzLCBlbmRfYml0LAorCQkJCQkJICAgICAgIHN0YXJ0X2JpdCwgbmJpdHMsIDApOworCQlpZiAoc3RhcnRfYml0ID49IGVuZF9iaXQpCiAJCQljb250aW51ZTsKKwkJcmVtYWluID0gYml0bWFwX3NldF9sbChjaHVuay0+Yml0cywgc3RhcnRfYml0LCBuYml0cyk7CisJCWlmIChyZW1haW4pIHsKKwkJCXJlbWFpbiA9IGJpdG1hcF9jbGVhcl9sbChjaHVuay0+Yml0cywgc3RhcnRfYml0LAorCQkJCQkJIG5iaXRzIC0gcmVtYWluKTsKKwkJCUJVR19PTihyZW1haW4pOworCQkJZ290byByZXRyeTsKIAkJfQogCiAJCWFkZHIgPSBjaHVuay0+c3RhcnRfYWRkciArICgodW5zaWduZWQgbG9uZylzdGFydF9iaXQgPDwgb3JkZXIpOwotCi0JCWJpdG1hcF9zZXQoY2h1bmstPmJpdHMsIHN0YXJ0X2JpdCwgbmJpdHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaHVuay0+bG9jaywgZmxhZ3MpOwotCQlyZWFkX3VubG9jaygmcG9vbC0+bG9jayk7Ci0JCXJldHVybiBhZGRyOworCQlzaXplID0gbmJpdHMgPDwgb3JkZXI7CisJCWF0b21pY19zdWIoc2l6ZSwgJmNodW5rLT5hdmFpbCk7CisJCWJyZWFrOwogCX0KLQlyZWFkX3VubG9jaygmcG9vbC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGFkZHI7CiB9CiBFWFBPUlRfU1lNQk9MKGdlbl9wb29sX2FsbG9jKTsKIApAQCAtMTg0LDMzICszMDgsOTUgQEAKICAqIEBhZGRyOiBzdGFydGluZyBhZGRyZXNzIG9mIG1lbW9yeSB0byBmcmVlIGJhY2sgdG8gcG9vbAogICogQHNpemU6IHNpemUgaW4gYnl0ZXMgb2YgbWVtb3J5IHRvIGZyZWUKICAqCi0gKiBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHNwZWNpYWwgbWVtb3J5IGJhY2sgdG8gdGhlIHNwZWNpZmllZCBwb29sLgorICogRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzcGVjaWFsIG1lbW9yeSBiYWNrIHRvIHRoZSBzcGVjaWZpZWQKKyAqIHBvb2wuICBDYW4gbm90IGJlIHVzZWQgaW4gTk1JIGhhbmRsZXIgb24gYXJjaGl0ZWN0dXJlcyB3aXRob3V0CisgKiBOTUktc2FmZSBjbXB4Y2hnIGltcGxlbWVudGF0aW9uLgogICovCiB2b2lkIGdlbl9wb29sX2ZyZWUoc3RydWN0IGdlbl9wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKl9jaHVuazsKIAlzdHJ1Y3QgZ2VuX3Bvb2xfY2h1bmsgKmNodW5rOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9yZGVyID0gcG9vbC0+bWluX2FsbG9jX29yZGVyOwotCWludCBiaXQsIG5iaXRzOworCWludCBzdGFydF9iaXQsIG5iaXRzLCByZW1haW47CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCisJQlVHX09OKGluX25taSgpKTsKKyNlbmRpZgogCiAJbmJpdHMgPSAoc2l6ZSArICgxVUwgPDwgb3JkZXIpIC0gMSkgPj4gb3JkZXI7Ci0KLQlyZWFkX2xvY2soJnBvb2wtPmxvY2spOwotCWxpc3RfZm9yX2VhY2goX2NodW5rLCAmcG9vbC0+Y2h1bmtzKSB7Ci0JCWNodW5rID0gbGlzdF9lbnRyeShfY2h1bmssIHN0cnVjdCBnZW5fcG9vbF9jaHVuaywgbmV4dF9jaHVuayk7Ci0KKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2h1bmssICZwb29sLT5jaHVua3MsIG5leHRfY2h1bmspIHsKIAkJaWYgKGFkZHIgPj0gY2h1bmstPnN0YXJ0X2FkZHIgJiYgYWRkciA8IGNodW5rLT5lbmRfYWRkcikgewogCQkJQlVHX09OKGFkZHIgKyBzaXplID4gY2h1bmstPmVuZF9hZGRyKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaHVuay0+bG9jaywgZmxhZ3MpOwotCQkJYml0ID0gKGFkZHIgLSBjaHVuay0+c3RhcnRfYWRkcikgPj4gb3JkZXI7Ci0JCQl3aGlsZSAobmJpdHMtLSkKLQkJCQlfX2NsZWFyX2JpdChiaXQrKywgY2h1bmstPmJpdHMpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2h1bmstPmxvY2ssIGZsYWdzKTsKLQkJCWJyZWFrOworCQkJc3RhcnRfYml0ID0gKGFkZHIgLSBjaHVuay0+c3RhcnRfYWRkcikgPj4gb3JkZXI7CisJCQlyZW1haW4gPSBiaXRtYXBfY2xlYXJfbGwoY2h1bmstPmJpdHMsIHN0YXJ0X2JpdCwgbmJpdHMpOworCQkJQlVHX09OKHJlbWFpbik7CisJCQlzaXplID0gbmJpdHMgPDwgb3JkZXI7CisJCQlhdG9taWNfYWRkKHNpemUsICZjaHVuay0+YXZhaWwpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm47CiAJCX0KIAl9Ci0JQlVHX09OKG5iaXRzID4gMCk7Ci0JcmVhZF91bmxvY2soJnBvb2wtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTChnZW5fcG9vbF9mcmVlKTsKKworLyoqCisgKiBnZW5fcG9vbF9mb3JfZWFjaF9jaHVuayAtIGNhbGwgZnVuYyBmb3IgZXZlcnkgY2h1bmsgb2YgZ2VuZXJpYyBtZW1vcnkgcG9vbAorICogQHBvb2w6CXRoZSBnZW5lcmljIG1lbW9yeSBwb29sCisgKiBAZnVuYzoJZnVuYyB0byBjYWxsCisgKiBAZGF0YToJYWRkaXRpb25hbCBkYXRhIHVzZWQgYnkgQGZ1bmMKKyAqCisgKiBDYWxsIEBmdW5jIGZvciBldmVyeSBjaHVuayBvZiBnZW5lcmljIG1lbW9yeSBwb29sLiAgVGhlIEBmdW5jIGlzCisgKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIGhlbGQuCisgKi8KK3ZvaWQgZ2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmsoc3RydWN0IGdlbl9wb29sICpwb29sLAorCXZvaWQgKCpmdW5jKShzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2wsIHN0cnVjdCBnZW5fcG9vbF9jaHVuayAqY2h1bmssIHZvaWQgKmRhdGEpLAorCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdlbl9wb29sX2NodW5rICpjaHVuazsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjaHVuaywgJihwb29sKS0+Y2h1bmtzLCBuZXh0X2NodW5rKQorCQlmdW5jKHBvb2wsIGNodW5rLCBkYXRhKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woZ2VuX3Bvb2xfZm9yX2VhY2hfY2h1bmspOworCisvKioKKyAqIGdlbl9wb29sX2F2YWlsIC0gZ2V0IGF2YWlsYWJsZSBmcmVlIHNwYWNlIG9mIHRoZSBwb29sCisgKiBAcG9vbDogcG9vbCB0byBnZXQgYXZhaWxhYmxlIGZyZWUgc3BhY2UKKyAqCisgKiBSZXR1cm4gYXZhaWxhYmxlIGZyZWUgc3BhY2Ugb2YgdGhlIHNwZWNpZmllZCBwb29sLgorICovCitzaXplX3QgZ2VuX3Bvb2xfYXZhaWwoc3RydWN0IGdlbl9wb29sICpwb29sKQoreworCXN0cnVjdCBnZW5fcG9vbF9jaHVuayAqY2h1bms7CisJc2l6ZV90IGF2YWlsID0gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjaHVuaywgJnBvb2wtPmNodW5rcywgbmV4dF9jaHVuaykKKwkJYXZhaWwgKz0gYXRvbWljX3JlYWQoJmNodW5rLT5hdmFpbCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGF2YWlsOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2VuX3Bvb2xfYXZhaWwpOworCisvKioKKyAqIGdlbl9wb29sX3NpemUgLSBnZXQgc2l6ZSBpbiBieXRlcyBvZiBtZW1vcnkgbWFuYWdlZCBieSB0aGUgcG9vbAorICogQHBvb2w6IHBvb2wgdG8gZ2V0IHNpemUKKyAqCisgKiBSZXR1cm4gc2l6ZSBpbiBieXRlcyBvZiBtZW1vcnkgbWFuYWdlZCBieSB0aGUgcG9vbC4KKyAqLworc2l6ZV90IGdlbl9wb29sX3NpemUoc3RydWN0IGdlbl9wb29sICpwb29sKQoreworCXN0cnVjdCBnZW5fcG9vbF9jaHVuayAqY2h1bms7CisJc2l6ZV90IHNpemUgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNodW5rLCAmcG9vbC0+Y2h1bmtzLCBuZXh0X2NodW5rKQorCQlzaXplICs9IGNodW5rLT5lbmRfYWRkciAtIGNodW5rLT5zdGFydF9hZGRyOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBzaXplOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2VuX3Bvb2xfc2l6ZSk7CmRpZmYgLS1naXQgYS9saWIvaWRyLmMgYi9saWIvaWRyLmMKaW5kZXggZTE1NTAyZS4uZGIwNDBjZSAxMDA2NDQKLS0tIGEvbGliL2lkci5jCisrKyBiL2xpYi9pZHIuYwpAQCAtMzQsOCArMzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlkcl9sYXllcl9jYWNoZTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2ltcGxlX2lkYV9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBpZHJfbGF5ZXIgKmdldF9mcm9tX2ZyZWVfbGlzdChzdHJ1Y3QgaWRyICppZHApCiB7CkBAIC05MjYsNiArOTI4LDcxIEBACiBFWFBPUlRfU1lNQk9MKGlkYV9kZXN0cm95KTsKIAogLyoqCisgKiBpZGFfc2ltcGxlX2dldCAtIGdldCBhIG5ldyBpZC4KKyAqIEBpZGE6IHRoZSAoaW5pdGlhbGl6ZWQpIGlkYS4KKyAqIEBzdGFydDogdGhlIG1pbmltdW0gaWQgKGluY2x1c2l2ZSwgPCAweDgwMDAwMDApCisgKiBAZW5kOiB0aGUgbWF4aW11bSBpZCAoZXhjbHVzaXZlLCA8IDB4ODAwMDAwMCBvciAwKQorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncworICoKKyAqIEFsbG9jYXRlcyBhbiBpZCBpbiB0aGUgcmFuZ2Ugc3RhcnQgPD0gaWQgPCBlbmQsIG9yIHJldHVybnMgLUVOT1NQQy4KKyAqIE9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIHJldHVybnMgLUVOT01FTS4KKyAqCisgKiBVc2UgaWRhX3NpbXBsZV9yZW1vdmUoKSB0byBnZXQgcmlkIG9mIGFuIGlkLgorICovCitpbnQgaWRhX3NpbXBsZV9nZXQoc3RydWN0IGlkYSAqaWRhLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQsCisJCSAgIGdmcF90IGdmcF9tYXNrKQoreworCWludCByZXQsIGlkOworCXVuc2lnbmVkIGludCBtYXg7CisKKwlCVUdfT04oKGludClzdGFydCA8IDApOworCUJVR19PTigoaW50KWVuZCA8IDApOworCisJaWYgKGVuZCA9PSAwKQorCQltYXggPSAweDgwMDAwMDAwOworCWVsc2UgeworCQlCVUdfT04oZW5kIDwgc3RhcnQpOworCQltYXggPSBlbmQgLSAxOworCX0KKworYWdhaW46CisJaWYgKCFpZGFfcHJlX2dldChpZGEsIGdmcF9tYXNrKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJnNpbXBsZV9pZGFfbG9jayk7CisJcmV0ID0gaWRhX2dldF9uZXdfYWJvdmUoaWRhLCBzdGFydCwgJmlkKTsKKwlpZiAoIXJldCkgeworCQlpZiAoaWQgPiBtYXgpIHsKKwkJCWlkYV9yZW1vdmUoaWRhLCBpZCk7CisJCQlyZXQgPSAtRU5PU1BDOworCQl9IGVsc2UgeworCQkJcmV0ID0gaWQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnNpbXBsZV9pZGFfbG9jayk7CisKKwlpZiAodW5saWtlbHkocmV0ID09IC1FQUdBSU4pKQorCQlnb3RvIGFnYWluOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWRhX3NpbXBsZV9nZXQpOworCisvKioKKyAqIGlkYV9zaW1wbGVfcmVtb3ZlIC0gcmVtb3ZlIGFuIGFsbG9jYXRlZCBpZC4KKyAqIEBpZGE6IHRoZSAoaW5pdGlhbGl6ZWQpIGlkYS4KKyAqIEBpZDogdGhlIGlkIHJldHVybmVkIGJ5IGlkYV9zaW1wbGVfZ2V0LgorICovCit2b2lkIGlkYV9zaW1wbGVfcmVtb3ZlKHN0cnVjdCBpZGEgKmlkYSwgdW5zaWduZWQgaW50IGlkKQoreworCUJVR19PTigoaW50KWlkIDwgMCk7CisJc3Bpbl9sb2NrKCZzaW1wbGVfaWRhX2xvY2spOworCWlkYV9yZW1vdmUoaWRhLCBpZCk7CisJc3Bpbl91bmxvY2soJnNpbXBsZV9pZGFfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGlkYV9zaW1wbGVfcmVtb3ZlKTsKKworLyoqCiAgKiBpZGFfaW5pdCAtIGluaXRpYWxpemUgaWRhIGhhbmRsZQogICogQGlkYToJaWRhIGhhbmRsZQogICoKZGlmZiAtLWdpdCBhL2xpYi9sbGlzdC5jIGIvbGliL2xsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0NDU3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9sbGlzdC5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogTG9jay1sZXNzIE5VTEwgdGVybWluYXRlZCBzaW5nbGUgbGlua2VkIGxpc3QKKyAqCisgKiBUaGUgYmFzaWMgYXRvbWljIG9wZXJhdGlvbiBvZiB0aGlzIGxpc3QgaXMgY21weGNoZyBvbiBsb25nLiAgT24KKyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBoYXZlIE5NSS1zYWZlIGNtcHhjaGcgaW1wbGVtZW50YXRpb24sIHRoZQorICogbGlzdCBjYW4gTk9UIGJlIHVzZWQgaW4gTk1JIGhhbmRsZXIuICBTbyBjb2RlIHVzZXMgdGhlIGxpc3QgaW4gTk1JCisgKiBoYW5kbGVyIHNob3VsZCBkZXBlbmQgb24gQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHLgorICoKKyAqIENvcHlyaWdodCAyMDEwLDIwMTEgSW50ZWwgQ29ycC4KKyAqICAgQXV0aG9yOiBIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9sbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisvKioKKyAqIGxsaXN0X2FkZCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzoJbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbG9jay1sZXNzIGxpc3QKKyAqLwordm9pZCBsbGlzdF9hZGQoc3RydWN0IGxsaXN0X25vZGUgKm5ldywgc3RydWN0IGxsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxsaXN0X25vZGUgKmVudHJ5LCAqb2xkX2VudHJ5OworCisjaWZuZGVmIENPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRworCUJVR19PTihpbl9ubWkoKSk7CisjZW5kaWYKKworCWVudHJ5ID0gaGVhZC0+Zmlyc3Q7CisJZG8geworCQlvbGRfZW50cnkgPSBlbnRyeTsKKwkJbmV3LT5uZXh0ID0gZW50cnk7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChlbnRyeSA9IGNtcHhjaGcoJmhlYWQtPmZpcnN0LCBvbGRfZW50cnksIG5ldykpICE9IG9sZF9lbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsbGlzdF9hZGQpOworCisvKioKKyAqIGxsaXN0X2FkZF9iYXRjaCAtIGFkZCBzZXZlcmFsIGxpbmtlZCBlbnRyaWVzIGluIGJhdGNoCisgKiBAbmV3X2ZpcnN0OglmaXJzdCBlbnRyeSBpbiBiYXRjaCB0byBiZSBhZGRlZAorICogQG5ld19sYXN0OglsYXN0IGVudHJ5IGluIGJhdGNoIHRvIGJlIGFkZGVkCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbG9jay1sZXNzIGxpc3QKKyAqLwordm9pZCBsbGlzdF9hZGRfYmF0Y2goc3RydWN0IGxsaXN0X25vZGUgKm5ld19maXJzdCwgc3RydWN0IGxsaXN0X25vZGUgKm5ld19sYXN0LAorCQkgICAgIHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsbGlzdF9ub2RlICplbnRyeSwgKm9sZF9lbnRyeTsKKworI2lmbmRlZiBDT05GSUdfQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKKwlCVUdfT04oaW5fbm1pKCkpOworI2VuZGlmCisKKwllbnRyeSA9IGhlYWQtPmZpcnN0OworCWRvIHsKKwkJb2xkX2VudHJ5ID0gZW50cnk7CisJCW5ld19sYXN0LT5uZXh0ID0gZW50cnk7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChlbnRyeSA9IGNtcHhjaGcoJmhlYWQtPmZpcnN0LCBvbGRfZW50cnksIG5ld19maXJzdCkpICE9IG9sZF9lbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsbGlzdF9hZGRfYmF0Y2gpOworCisvKioKKyAqIGxsaXN0X2RlbF9maXJzdCAtIGRlbGV0ZSB0aGUgZmlyc3QgZW50cnkgb2YgbG9jay1sZXNzIGxpc3QKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsb2NrLWxlc3MgbGlzdAorICoKKyAqIElmIGxpc3QgaXMgZW1wdHksIHJldHVybiBOVUxMLCBvdGhlcndpc2UsIHJldHVybiB0aGUgZmlyc3QgZW50cnkKKyAqIGRlbGV0ZWQsIHRoaXMgaXMgdGhlIG5ld2VzdCBhZGRlZCBvbmUuCisgKgorICogT25seSBvbmUgbGxpc3RfZGVsX2ZpcnN0IHVzZXIgY2FuIGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aAorICogbXVsdGlwbGUgbGxpc3RfYWRkIHVzZXJzIHdpdGhvdXQgbG9jay4gIEJlY2F1c2Ugb3RoZXJ3aXNlCisgKiBsbGlzdF9kZWxfZmlyc3QsIGxsaXN0X2FkZCwgbGxpc3RfYWRkIChvciBsbGlzdF9kZWxfYWxsLCBsbGlzdF9hZGQsCisgKiBsbGlzdF9hZGQpIHNlcXVlbmNlIGluIGFub3RoZXIgdXNlciBtYXkgY2hhbmdlIEBoZWFkLT5maXJzdC0+bmV4dCwKKyAqIGJ1dCBrZWVwIEBoZWFkLT5maXJzdC4gIElmIG11bHRpcGxlIGNvbnN1bWVycyBhcmUgbmVlZGVkLCBwbGVhc2UKKyAqIHVzZSBsbGlzdF9kZWxfYWxsIG9yIHVzZSBsb2NrIGJldHdlZW4gY29uc3VtZXJzLgorICovCitzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxpc3RfZGVsX2ZpcnN0KHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsbGlzdF9ub2RlICplbnRyeSwgKm9sZF9lbnRyeSwgKm5leHQ7CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCisJQlVHX09OKGluX25taSgpKTsKKyNlbmRpZgorCisJZW50cnkgPSBoZWFkLT5maXJzdDsKKwlkbyB7CisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCW9sZF9lbnRyeSA9IGVudHJ5OworCQluZXh0ID0gZW50cnktPm5leHQ7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChlbnRyeSA9IGNtcHhjaGcoJmhlYWQtPmZpcnN0LCBvbGRfZW50cnksIG5leHQpKSAhPSBvbGRfZW50cnkpOworCisJcmV0dXJuIGVudHJ5OworfQorRVhQT1JUX1NZTUJPTF9HUEwobGxpc3RfZGVsX2ZpcnN0KTsKKworLyoqCisgKiBsbGlzdF9kZWxfYWxsIC0gZGVsZXRlIGFsbCBlbnRyaWVzIGZyb20gbG9jay1sZXNzIGxpc3QKKyAqIEBoZWFkOgl0aGUgaGVhZCBvZiBsb2NrLWxlc3MgbGlzdCB0byBkZWxldGUgYWxsIGVudHJpZXMKKyAqCisgKiBJZiBsaXN0IGlzIGVtcHR5LCByZXR1cm4gTlVMTCwgb3RoZXJ3aXNlLCBkZWxldGUgYWxsIGVudHJpZXMgYW5kCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5LiAgVGhlIG9yZGVyIG9mIGVudHJpZXMKKyAqIGRlbGV0ZWQgaXMgZnJvbSB0aGUgbmV3ZXN0IHRvIHRoZSBvbGRlc3QgYWRkZWQgb25lLgorICovCitzdHJ1Y3QgbGxpc3Rfbm9kZSAqbGxpc3RfZGVsX2FsbChzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZCkKK3sKKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCisJQlVHX09OKGluX25taSgpKTsKKyNlbmRpZgorCisJcmV0dXJuIHhjaGcoJmhlYWQtPmZpcnN0LCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxsaXN0X2RlbF9hbGwpOwpkaWZmIC0tZ2l0IGEvbGliL21kNS5jIGIvbGliL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzcxODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbWQ1LmMKQEAgLTAsMCArMSw5NSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KKworI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCisjZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCisjZGVmaW5lIEY0KHgsIHksIHopCSh5IF4gKHggfCB+eikpCisKKyNkZWZpbmUgTUQ1U1RFUChmLCB3LCB4LCB5LCB6LCBpbiwgcykgXAorCSh3ICs9IGYoeCwgeSwgeikgKyBpbiwgdyA9ICh3PDxzIHwgdz4+KDMyLXMpKSArIHgpCisKK3ZvaWQgbWQ1X3RyYW5zZm9ybShfX3UzMiAqaGFzaCwgX191MzIgY29uc3QgKmluKQoreworCXUzMiBhLCBiLCBjLCBkOworCisJYSA9IGhhc2hbMF07CisJYiA9IGhhc2hbMV07CisJYyA9IGhhc2hbMl07CisJZCA9IGhhc2hbM107CisKKwlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZDc2YWE0NzgsIDcpOworCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzFdICsgMHhlOGM3Yjc1NiwgMTIpOworCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyNDIwNzBkYiwgMTcpOworCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzNdICsgMHhjMWJkY2VlZSwgMjIpOworCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNTdjMGZhZiwgNyk7CisJTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bNV0gKyAweDQ3ODdjNjJhLCAxMik7CisJTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGE4MzA0NjEzLCAxNyk7CisJTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bN10gKyAweGZkNDY5NTAxLCAyMik7CisJTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDY5ODA5OGQ4LCA3KTsKKwlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpbls5XSArIDB4OGI0NGY3YWYsIDEyKTsKKwlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZmY1YmIxLCAxNyk7CisJTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTFdICsgMHg4OTVjZDdiZSwgMjIpOworCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NmI5MDExMjIsIDcpOworCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzEzXSArIDB4ZmQ5ODcxOTMsIDEyKTsKKwlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsxNF0gKyAweGE2Nzk0MzhlLCAxNyk7CisJTUQ1U1RFUChGMSwgYiwgYywgZCwgYSwgaW5bMTVdICsgMHg0OWI0MDgyMSwgMjIpOworCisJTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bMV0gKyAweGY2MWUyNTYyLCA1KTsKKwlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpbls2XSArIDB4YzA0MGIzNDAsIDkpOworCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzExXSArIDB4MjY1ZTVhNTEsIDE0KTsKKwlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpblswXSArIDB4ZTliNmM3YWEsIDIwKTsKKwlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls1XSArIDB4ZDYyZjEwNWQsIDUpOworCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzEwXSArIDB4MDI0NDE0NTMsIDkpOworCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4ZDhhMWU2ODEsIDE0KTsKKwlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls0XSArIDB4ZTdkM2ZiYzgsIDIwKTsKKwlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4MjFlMWNkZTYsIDUpOworCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzE0XSArIDB4YzMzNzA3ZDYsIDkpOworCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhmNGQ1MGQ4NywgMTQpOworCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzhdICsgMHg0NTVhMTRlZCwgMjApOworCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4YTllM2U5MDUsIDUpOworCU1ENVNURVAoRjIsIGQsIGEsIGIsIGMsIGluWzJdICsgMHhmY2VmYTNmOCwgOSk7CisJTUQ1U1RFUChGMiwgYywgZCwgYSwgYiwgaW5bN10gKyAweDY3NmYwMmQ5LCAxNCk7CisJTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMTJdICsgMHg4ZDJhNGM4YSwgMjApOworCisJTUQ1U1RFUChGMywgYSwgYiwgYywgZCwgaW5bNV0gKyAweGZmZmEzOTQyLCA0KTsKKwlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpbls4XSArIDB4ODc3MWY2ODEsIDExKTsKKwlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDZkOWQ2MTIyLCAxNik7CisJTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTRdICsgMHhmZGU1MzgwYywgMjMpOworCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhhNGJlZWE0NCwgNCk7CisJTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bNF0gKyAweDRiZGVjZmE5LCAxMSk7CisJTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bN10gKyAweGY2YmI0YjYwLCAxNik7CisJTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMTBdICsgMHhiZWJmYmM3MCwgMjMpOworCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzEzXSArIDB4Mjg5YjdlYzYsIDQpOworCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzBdICsgMHhlYWExMjdmYSwgMTEpOworCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzNdICsgMHhkNGVmMzA4NSwgMTYpOworCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzZdICsgMHgwNDg4MWQwNSwgMjMpOworCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzldICsgMHhkOWQ0ZDAzOSwgNCk7CisJTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bMTJdICsgMHhlNmRiOTllNSwgMTEpOworCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzE1XSArIDB4MWZhMjdjZjgsIDE2KTsKKwlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpblsyXSArIDB4YzRhYzU2NjUsIDIzKTsKKworCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzBdICsgMHhmNDI5MjI0NCwgNik7CisJTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bN10gKyAweDQzMmFmZjk3LCAxMCk7CisJTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhYjk0MjNhNywgMTUpOworCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzVdICsgMHhmYzkzYTAzOSwgMjEpOworCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzEyXSArIDB4NjU1YjU5YzMsIDYpOworCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzNdICsgMHg4ZjBjY2M5MiwgMTApOworCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzEwXSArIDB4ZmZlZmY0N2QsIDE1KTsKKwlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxXSArIDB4ODU4NDVkZDEsIDIxKTsKKwlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpbls4XSArIDB4NmZhODdlNGYsIDYpOworCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzE1XSArIDB4ZmUyY2U2ZTAsIDEwKTsKKwlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpbls2XSArIDB4YTMwMTQzMTQsIDE1KTsKKwlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpblsxM10gKyAweDRlMDgxMWExLCAyMSk7CisJTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bNF0gKyAweGY3NTM3ZTgyLCA2KTsKKwlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxMV0gKyAweGJkM2FmMjM1LCAxMCk7CisJTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bMl0gKyAweDJhZDdkMmJiLCAxNSk7CisJTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bOV0gKyAweGViODZkMzkxLCAyMSk7CisKKwloYXNoWzBdICs9IGE7CisJaGFzaFsxXSArPSBiOworCWhhc2hbMl0gKz0gYzsKKwloYXNoWzNdICs9IGQ7Cit9CitFWFBPUlRfU1lNQk9MKG1kNV90cmFuc2Zvcm0pOwpkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggN2VhMmUwMy4uYTJmOWRhNSAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC04MjMsOCArODIzLDggQEAKIEVYUE9SVF9TWU1CT0wocmFkaXhfdHJlZV9wcmV2X2hvbGUpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1fX2xvb2t1cChzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpzbG90LCB2b2lkICoqKnJlc3VsdHMsIHVuc2lnbmVkIGxvbmcgaW5kZXgsCi0JdW5zaWduZWQgaW50IG1heF9pdGVtcywgdW5zaWduZWQgbG9uZyAqbmV4dF9pbmRleCkKK19fbG9va3VwKHN0cnVjdCByYWRpeF90cmVlX25vZGUgKnNsb3QsIHZvaWQgKioqcmVzdWx0cywgdW5zaWduZWQgbG9uZyAqaW5kaWNlcywKKwl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zLCB1bnNpZ25lZCBsb25nICpuZXh0X2luZGV4KQogewogCXVuc2lnbmVkIGludCBucl9mb3VuZCA9IDA7CiAJdW5zaWduZWQgaW50IHNoaWZ0LCBoZWlnaHQ7CkBAIC04NTcsMTIgKzg1NywxNiBAQAogCiAJLyogQm90dG9tIGxldmVsOiBncmFiIHNvbWUgaXRlbXMgKi8KIAlmb3IgKGkgPSBpbmRleCAmIFJBRElYX1RSRUVfTUFQX01BU0s7IGkgPCBSQURJWF9UUkVFX01BUF9TSVpFOyBpKyspIHsKLQkJaW5kZXgrKzsKIAkJaWYgKHNsb3QtPnNsb3RzW2ldKSB7Ci0JCQlyZXN1bHRzW25yX2ZvdW5kKytdID0gJihzbG90LT5zbG90c1tpXSk7Ci0JCQlpZiAobnJfZm91bmQgPT0gbWF4X2l0ZW1zKQorCQkJcmVzdWx0c1tucl9mb3VuZF0gPSAmKHNsb3QtPnNsb3RzW2ldKTsKKwkJCWlmIChpbmRpY2VzKQorCQkJCWluZGljZXNbbnJfZm91bmRdID0gaW5kZXg7CisJCQlpZiAoKytucl9mb3VuZCA9PSBtYXhfaXRlbXMpIHsKKwkJCQlpbmRleCsrOwogCQkJCWdvdG8gb3V0OworCQkJfQogCQl9CisJCWluZGV4Kys7CiAJfQogb3V0OgogCSpuZXh0X2luZGV4ID0gaW5kZXg7CkBAIC05MTgsOCArOTIyLDggQEAKIAogCQlpZiAoY3VyX2luZGV4ID4gbWF4X2luZGV4KQogCQkJYnJlYWs7Ci0JCXNsb3RzX2ZvdW5kID0gX19sb29rdXAobm9kZSwgKHZvaWQgKioqKXJlc3VsdHMgKyByZXQsIGN1cl9pbmRleCwKLQkJCQkJbWF4X2l0ZW1zIC0gcmV0LCAmbmV4dF9pbmRleCk7CisJCXNsb3RzX2ZvdW5kID0gX19sb29rdXAobm9kZSwgKHZvaWQgKioqKXJlc3VsdHMgKyByZXQsIE5VTEwsCisJCQkJY3VyX2luZGV4LCBtYXhfaXRlbXMgLSByZXQsICZuZXh0X2luZGV4KTsKIAkJbnJfZm91bmQgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgc2xvdHNfZm91bmQ7IGkrKykgewogCQkJc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqc2xvdDsKQEAgLTk0NCw2ICs5NDgsNyBAQAogICoJcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF9zbG90IC0gcGVyZm9ybSBtdWx0aXBsZSBzbG90IGxvb2t1cCBvbiByYWRpeCB0cmVlCiAgKglAcm9vdDoJCXJhZGl4IHRyZWUgcm9vdAogICoJQHJlc3VsdHM6CXdoZXJlIHRoZSByZXN1bHRzIG9mIHRoZSBsb29rdXAgYXJlIHBsYWNlZAorICoJQGluZGljZXM6CXdoZXJlIHRoZWlyIGluZGljZXMgc2hvdWxkIGJlIHBsYWNlZCAoYnV0IHVzdWFsbHkgTlVMTCkKICAqCUBmaXJzdF9pbmRleDoJc3RhcnQgdGhlIGxvb2t1cCBmcm9tIHRoaXMga2V5CiAgKglAbWF4X2l0ZW1zOglwbGFjZSB1cCB0byB0aGlzIG1hbnkgaXRlbXMgYXQgKnJlc3VsdHMKICAqCkBAIC05NTgsNyArOTYzLDggQEAKICAqCXByb3RlY3Rpb24sIHJhZGl4X3RyZWVfZGVyZWZfc2xvdCBtYXkgZmFpbCByZXF1aXJpbmcgYSByZXRyeS4KICAqLwogdW5zaWduZWQgaW50Ci1yYWRpeF90cmVlX2dhbmdfbG9va3VwX3Nsb3Qoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqKipyZXN1bHRzLAorcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF9zbG90KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCQl2b2lkICoqKnJlc3VsdHMsIHVuc2lnbmVkIGxvbmcgKmluZGljZXMsCiAJCQl1bnNpZ25lZCBsb25nIGZpcnN0X2luZGV4LCB1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X2luZGV4OwpAQCAtOTc0LDYgKzk4MCw4IEBACiAJCWlmIChmaXJzdF9pbmRleCA+IDApCiAJCQlyZXR1cm4gMDsKIAkJcmVzdWx0c1swXSA9ICh2b2lkICoqKSZyb290LT5ybm9kZTsKKwkJaWYgKGluZGljZXMpCisJCQlpbmRpY2VzWzBdID0gMDsKIAkJcmV0dXJuIDE7CiAJfQogCW5vZGUgPSBpbmRpcmVjdF90b19wdHIobm9kZSk7CkBAIC05ODcsOCArOTk1LDkgQEAKIAogCQlpZiAoY3VyX2luZGV4ID4gbWF4X2luZGV4KQogCQkJYnJlYWs7Ci0JCXNsb3RzX2ZvdW5kID0gX19sb29rdXAobm9kZSwgcmVzdWx0cyArIHJldCwgY3VyX2luZGV4LAotCQkJCQltYXhfaXRlbXMgLSByZXQsICZuZXh0X2luZGV4KTsKKwkJc2xvdHNfZm91bmQgPSBfX2xvb2t1cChub2RlLCByZXN1bHRzICsgcmV0LAorCQkJCWluZGljZXMgPyBpbmRpY2VzICsgcmV0IDogTlVMTCwKKwkJCQljdXJfaW5kZXgsIG1heF9pdGVtcyAtIHJldCwgJm5leHRfaW5kZXgpOwogCQlyZXQgKz0gc2xvdHNfZm91bmQ7CiAJCWlmIChuZXh0X2luZGV4ID09IDApCiAJCQlicmVhazsKQEAgLTExOTQsNiArMTIwMyw5OCBAQAogfQogRVhQT1JUX1NZTUJPTChyYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZ19zbG90KTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NITUVNKSAmJiBkZWZpbmVkKENPTkZJR19TV0FQKQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBjb25kX3Jlc2NoZWQoKSAqLworCisvKgorICogVGhpcyBsaW5lYXIgc2VhcmNoIGlzIGF0IHByZXNlbnQgb25seSB1c2VmdWwgdG8gc2htZW1fdW51c2VfaW5vZGUoKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19sb2NhdGUoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqc2xvdCwgdm9pZCAqaXRlbSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgKmZvdW5kX2luZGV4KQoreworCXVuc2lnbmVkIGludCBzaGlmdCwgaGVpZ2h0OworCXVuc2lnbmVkIGxvbmcgaTsKKworCWhlaWdodCA9IHNsb3QtPmhlaWdodDsKKwlzaGlmdCA9IChoZWlnaHQtMSkgKiBSQURJWF9UUkVFX01BUF9TSElGVDsKKworCWZvciAoIDsgaGVpZ2h0ID4gMTsgaGVpZ2h0LS0pIHsKKwkJaSA9IChpbmRleCA+PiBzaGlmdCkgJiBSQURJWF9UUkVFX01BUF9NQVNLOworCQlmb3IgKDs7KSB7CisJCQlpZiAoc2xvdC0+c2xvdHNbaV0gIT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCWluZGV4ICY9IH4oKDFVTCA8PCBzaGlmdCkgLSAxKTsKKwkJCWluZGV4ICs9IDFVTCA8PCBzaGlmdDsKKwkJCWlmIChpbmRleCA9PSAwKQorCQkJCWdvdG8gb3V0OwkvKiAzMi1iaXQgd3JhcGFyb3VuZCAqLworCQkJaSsrOworCQkJaWYgKGkgPT0gUkFESVhfVFJFRV9NQVBfU0laRSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCisJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOworCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90LT5zbG90c1tpXSk7CisJCWlmIChzbG90ID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCb3R0b20gbGV2ZWw6IGNoZWNrIGl0ZW1zICovCisJZm9yIChpID0gMDsgaSA8IFJBRElYX1RSRUVfTUFQX1NJWkU7IGkrKykgeworCQlpZiAoc2xvdC0+c2xvdHNbaV0gPT0gaXRlbSkgeworCQkJKmZvdW5kX2luZGV4ID0gaW5kZXggKyBpOworCQkJaW5kZXggPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaW5kZXggKz0gUkFESVhfVFJFRV9NQVBfU0laRTsKK291dDoKKwlyZXR1cm4gaW5kZXg7Cit9CisKKy8qKgorICoJcmFkaXhfdHJlZV9sb2NhdGVfaXRlbSAtIHNlYXJjaCB0aHJvdWdoIHJhZGl4IHRyZWUgZm9yIGl0ZW0KKyAqCUByb290OgkJcmFkaXggdHJlZSByb290CisgKglAaXRlbToJCWl0ZW0gdG8gYmUgZm91bmQKKyAqCisgKglSZXR1cm5zIGluZGV4IHdoZXJlIGl0ZW0gd2FzIGZvdW5kLCBvciAtMSBpZiBub3QgZm91bmQuCisgKglDYWxsZXIgbXVzdCBob2xkIG5vIGxvY2sgKHNpbmNlIHRoaXMgdGltZS1jb25zdW1pbmcgZnVuY3Rpb24gbmVlZHMKKyAqCXRvIGJlIHByZWVtcHRpYmxlKSwgYW5kIG11c3QgY2hlY2sgYWZ0ZXJ3YXJkcyBpZiBpdGVtIGlzIHN0aWxsIHRoZXJlLgorICovCit1bnNpZ25lZCBsb25nIHJhZGl4X3RyZWVfbG9jYXRlX2l0ZW0oc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqaXRlbSkKK3sKKwlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlOworCXVuc2lnbmVkIGxvbmcgbWF4X2luZGV4OworCXVuc2lnbmVkIGxvbmcgY3VyX2luZGV4ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZvdW5kX2luZGV4ID0gLTE7CisKKwlkbyB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocm9vdC0+cm5vZGUpOworCQlpZiAoIXJhZGl4X3RyZWVfaXNfaW5kaXJlY3RfcHRyKG5vZGUpKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWlmIChub2RlID09IGl0ZW0pCisJCQkJZm91bmRfaW5kZXggPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlub2RlID0gaW5kaXJlY3RfdG9fcHRyKG5vZGUpOworCQltYXhfaW5kZXggPSByYWRpeF90cmVlX21heGluZGV4KG5vZGUtPmhlaWdodCk7CisJCWlmIChjdXJfaW5kZXggPiBtYXhfaW5kZXgpCisJCQlicmVhazsKKworCQljdXJfaW5kZXggPSBfX2xvY2F0ZShub2RlLCBpdGVtLCBjdXJfaW5kZXgsICZmb3VuZF9pbmRleCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQljb25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxlIChjdXJfaW5kZXggIT0gMCAmJiBjdXJfaW5kZXggPD0gbWF4X2luZGV4KTsKKworCXJldHVybiBmb3VuZF9pbmRleDsKK30KKyNlbHNlCit1bnNpZ25lZCBsb25nIHJhZGl4X3RyZWVfbG9jYXRlX2l0ZW0oc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqaXRlbSkKK3sKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogQ09ORklHX1NITUVNICYmIENPTkZJR19TV0FQICovCiAKIC8qKgogICoJcmFkaXhfdHJlZV9zaHJpbmsgICAgLSAgICBzaHJpbmsgaGVpZ2h0IG9mIGEgcmFkaXggdHJlZSB0byBtaW5pbWFsCmRpZmYgLS1naXQgYS9saWIvc2hhMS5jIGIvbGliL3NoYTEuYwppbmRleCA0YzQ1ZmQ1Li4xZGU1MDlhIDEwMDY0NAotLS0gYS9saWIvc2hhMS5jCisrKyBiL2xpYi9zaGExLmMKQEAgLTEsMzEgKzEsNzMgQEAKIC8qCi0gKiBTSEEgdHJhbnNmb3JtIGFsZ29yaXRobSwgb3JpZ2luYWxseSB0YWtlbiBmcm9tIGNvZGUgd3JpdHRlbiBieQotICogUGV0ZXIgR3V0bWFubiwgYW5kIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGJhc2VkIG9uIHRoZSBnaXQgU0hBMSBpbXBsZW1lbnRhdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvaGFzaC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotLyogVGhlIFNIQSBmKCktZnVuY3Rpb25zLiAgKi8KKy8qCisgKiBJZiB5b3UgaGF2ZSAzMiByZWdpc3RlcnMgb3IgbW9yZSwgdGhlIGNvbXBpbGVyIGNhbiAoYW5kIHNob3VsZCkKKyAqIHRyeSB0byBjaGFuZ2UgdGhlIGFycmF5W10gYWNjZXNzZXMgaW50byByZWdpc3RlcnMuIEhvd2V2ZXIsIG9uCisgKiBtYWNoaW5lcyB3aXRoIGxlc3MgdGhhbiB+MjUgcmVnaXN0ZXJzLCB0aGF0IHdvbid0IHJlYWxseSB3b3JrLAorICogYW5kIGF0IGxlYXN0IGdjYyB3aWxsIG1ha2UgYW4gdW5ob2x5IG1lc3Mgb2YgaXQuCisgKgorICogU28gdG8gYXZvaWQgdGhhdCBtZXNzIHdoaWNoIGp1c3Qgc2xvd3MgdGhpbmdzIGRvd24sIHdlIGZvcmNlCisgKiB0aGUgc3RvcmVzIHRvIG1lbW9yeSB0byBhY3R1YWxseSBoYXBwZW4gKHdlIG1pZ2h0IGJlIGJldHRlciBvZmYKKyAqIHdpdGggYSAnVyh0KT0odmFsKTthc20oIiI6IittIiAoVyh0KSknIHRoZXJlIGluc3RlYWQsIGFzCisgKiBzdWdnZXN0ZWQgYnkgQXJ0dXIgU2thd2luYSAtIHRoYXQgd2lsbCBhbHNvIG1ha2UgZ2NjIHVuYWJsZSB0bworICogdHJ5IHRvIGRvIHRoZSBzaWxseSAib3B0aW1pemUgYXdheSBsb2FkcyIgcGFydCBiZWNhdXNlIGl0IHdvbid0CisgKiBzZWUgd2hhdCB0aGUgdmFsdWUgd2lsbCBiZSkuCisgKgorICogQmVuIEhlcnJlbnNjaG1pZHQgcmVwb3J0cyB0aGF0IG9uIFBQQywgdGhlIEMgdmVyc2lvbiBjb21lcyBjbG9zZQorICogdG8gdGhlIG9wdGltaXplZCBhc20gd2l0aCB0aGlzIChpZSBvbiBQUEMgeW91IGRvbid0IHdhbnQgdGhhdAorICogJ3ZvbGF0aWxlJywgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgcmVnaXN0ZXJzKS4KKyAqCisgKiBPbiBBUk0gd2UgZ2V0IHRoZSBiZXN0IGNvZGUgZ2VuZXJhdGlvbiBieSBmb3JjaW5nIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICogYmV0d2VlbiBlYWNoIFNIQV9ST1VORCwgb3RoZXJ3aXNlIGdjYyBoYXBwaWx5IGdldCB3aWxkIHdpdGggc3BpbGxpbmcgYW5kCisgKiB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBzaW1wbHkgZXhwbG9kZSBhbmQgcGVyZm9ybWFuY2UgZ29lcyBkb3duIHRoZSBkcmFpbi4KKyAqLwogCi0jZGVmaW5lIGYxKHgseSx6KSAgICh6IF4gKHggJiAoeSBeIHopKSkJCS8qIHggPyB5IDogeiAqLwotI2RlZmluZSBmMih4LHkseikgICAoeCBeIHkgXiB6KQkJCS8qIFhPUiAqLwotI2RlZmluZSBmMyh4LHkseikgICAoKHggJiB5KSArICh6ICYgKHggXiB5KSkpCS8qIG1ham9yaXR5ICovCisjaWZkZWYgQ09ORklHX1g4NgorICAjZGVmaW5lIHNldFcoeCwgdmFsKSAoKih2b2xhdGlsZSBfX3UzMiAqKSZXKHgpID0gKHZhbCkpCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUk0pCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIGRvIHsgVyh4KSA9ICh2YWwpOyBfX2FzbV9fKCIiOjo6Im1lbW9yeSIpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyAgI2RlZmluZSBzZXRXKHgsIHZhbCkgKFcoeCkgPSAodmFsKSkKKyNlbmRpZgogCi0vKiBUaGUgU0hBIE15c3RlcmlvdXMgQ29uc3RhbnRzICovCisvKiBUaGlzICJyb2xscyIgb3ZlciB0aGUgNTEyLWJpdCBhcnJheSAqLworI2RlZmluZSBXKHgpIChhcnJheVsoeCkmMTVdKQogCi0jZGVmaW5lIEsxICAweDVBODI3OTk5TAkJCS8qIFJvdW5kcyAgMC0xOTogc3FydCgyKSAqIDJeMzAgKi8KLSNkZWZpbmUgSzIgIDB4NkVEOUVCQTFMCQkJLyogUm91bmRzIDIwLTM5OiBzcXJ0KDMpICogMl4zMCAqLwotI2RlZmluZSBLMyAgMHg4RjFCQkNEQ0wJCQkvKiBSb3VuZHMgNDAtNTk6IHNxcnQoNSkgKiAyXjMwICovCi0jZGVmaW5lIEs0ICAweENBNjJDMUQ2TAkJCS8qIFJvdW5kcyA2MC03OTogc3FydCgxMCkgKiAyXjMwICovCisvKgorICogV2hlcmUgZG8gd2UgZ2V0IHRoZSBzb3VyY2UgZnJvbT8gVGhlIGZpcnN0IDE2IGl0ZXJhdGlvbnMgZ2V0IGl0IGZyb20KKyAqIHRoZSBpbnB1dCBkYXRhLCB0aGUgbmV4dCBtaXggaXQgZnJvbSB0aGUgNTEyLWJpdCBhcnJheS4KKyAqLworI2RlZmluZSBTSEFfU1JDKHQpIGdldF91bmFsaWduZWRfYmUzMigoX191MzIgKilkYXRhICsgdCkKKyNkZWZpbmUgU0hBX01JWCh0KSByb2wzMihXKHQrMTMpIF4gVyh0KzgpIF4gVyh0KzIpIF4gVyh0KSwgMSkKKworI2RlZmluZSBTSEFfUk9VTkQodCwgaW5wdXQsIGZuLCBjb25zdGFudCwgQSwgQiwgQywgRCwgRSkgZG8geyBcCisJX191MzIgVEVNUCA9IGlucHV0KHQpOyBzZXRXKHQsIFRFTVApOyBcCisJRSArPSBURU1QICsgcm9sMzIoQSw1KSArIChmbikgKyAoY29uc3RhbnQpOyBcCisJQiA9IHJvcjMyKEIsIDIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRfMF8xNSh0LCBBLCBCLCBDLCBELCBFKSAgU0hBX1JPVU5EKHQsIFNIQV9TUkMsICgoKENeRCkmQileRCkgLCAweDVhODI3OTk5LCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF8xNl8xOSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKCgoQ15EKSZCKV5EKSAsIDB4NWE4Mjc5OTksIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzIwXzM5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoQl5DXkQpICwgMHg2ZWQ5ZWJhMSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNDBfNTkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsICgoQiZDKSsoRCYoQl5DKSkpICwgMHg4ZjFiYmNkYywgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNjBfNzkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsIChCXkNeRCkgLCAgMHhjYTYyYzFkNiwgQSwgQiwgQywgRCwgRSApCiAKIC8qKgogICogc2hhX3RyYW5zZm9ybSAtIHNpbmdsZSBibG9jayBTSEExIHRyYW5zZm9ybQogICoKICAqIEBkaWdlc3Q6IDE2MCBiaXQgZGlnZXN0IHRvIHVwZGF0ZQogICogQGRhdGE6ICAgNTEyIGJpdHMgb2YgZGF0YSB0byBoYXNoCi0gKiBAVzogICAgICA4MCB3b3JkcyBvZiB3b3Jrc3BhY2UgKHNlZSBub3RlKQorICogQGFycmF5OiAgMTYgd29yZHMgb2Ygd29ya3NwYWNlIChzZWUgbm90ZSkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIFNIQTEgZGlnZXN0IGZvciBhIHNpbmdsZSA1MTItYml0IGJsb2NrLgogICogQmUgd2FybmVkLCBpdCBkb2VzIG5vdCBoYW5kbGUgcGFkZGluZyBhbmQgbWVzc2FnZSBkaWdlc3QsIGRvIG5vdApAQCAtMzYsNDcgKzc4LDExMSBAQAogICogdG8gY2xlYXIgdGhlIHdvcmtzcGFjZS4gVGhpcyBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIgdG8gYXZvaWQKICAqIHVubmVjZXNzYXJ5IGNsZWFycyBiZXR3ZWVuIGNoYWluZWQgaGFzaGluZyBvcGVyYXRpb25zLgogICovCi12b2lkIHNoYV90cmFuc2Zvcm0oX191MzIgKmRpZ2VzdCwgY29uc3QgY2hhciAqaW4sIF9fdTMyICpXKQordm9pZCBzaGFfdHJhbnNmb3JtKF9fdTMyICpkaWdlc3QsIGNvbnN0IGNoYXIgKmRhdGEsIF9fdTMyICphcnJheSkKIHsKLQlfX3UzMiBhLCBiLCBjLCBkLCBlLCB0LCBpOworCV9fdTMyIEEsIEIsIEMsIEQsIEU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJV1tpXSA9IGJlMzJfdG9fY3B1KCgoY29uc3QgX19iZTMyICopaW4pW2ldKTsKKwlBID0gZGlnZXN0WzBdOworCUIgPSBkaWdlc3RbMV07CisJQyA9IGRpZ2VzdFsyXTsKKwlEID0gZGlnZXN0WzNdOworCUUgPSBkaWdlc3RbNF07CiAKLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQkJV1tpKzE2XSA9IHJvbDMyKFdbaSsxM10gXiBXW2krOF0gXiBXW2krMl0gXiBXW2ldLCAxKTsKKwkvKiBSb3VuZCAxIC0gaXRlcmF0aW9ucyAwLTE2IHRha2UgdGhlaXIgaW5wdXQgZnJvbSAnZGF0YScgKi8KKwlUXzBfMTUoIDAsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSggMSwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KCAyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoIDMsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSggNCwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KCA1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoIDYsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSggNywgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KCA4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoIDksIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSgxMCwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KDExLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoMTIsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSgxMywgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KDE0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoMTUsIEEsIEIsIEMsIEQsIEUpOwogCi0JYSA9IGRpZ2VzdFswXTsKLQliID0gZGlnZXN0WzFdOwotCWMgPSBkaWdlc3RbMl07Ci0JZCA9IGRpZ2VzdFszXTsKLQllID0gZGlnZXN0WzRdOworCS8qIFJvdW5kIDEgLSB0YWlsLiBJbnB1dCBmcm9tIDUxMi1iaXQgbWl4aW5nIGFycmF5ICovCisJVF8xNl8xOSgxNiwgRSwgQSwgQiwgQywgRCk7CisJVF8xNl8xOSgxNywgRCwgRSwgQSwgQiwgQyk7CisJVF8xNl8xOSgxOCwgQywgRCwgRSwgQSwgQik7CisJVF8xNl8xOSgxOSwgQiwgQywgRCwgRSwgQSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQl0ID0gZjEoYiwgYywgZCkgKyBLMSArIHJvbDMyKGEsIDUpICsgZSArIFdbaV07Ci0JCWUgPSBkOyBkID0gYzsgYyA9IHJvbDMyKGIsIDMwKTsgYiA9IGE7IGEgPSB0OwotCX0KKwkvKiBSb3VuZCAyICovCisJVF8yMF8zOSgyMCwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgyMSwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgyMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgyMywgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgyNCwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgyNSwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgyNiwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgyNywgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgyOCwgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgyOSwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgzMCwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgzMSwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgzMiwgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgzMywgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgzNCwgQiwgQywgRCwgRSwgQSk7CisJVF8yMF8zOSgzNSwgQSwgQiwgQywgRCwgRSk7CisJVF8yMF8zOSgzNiwgRSwgQSwgQiwgQywgRCk7CisJVF8yMF8zOSgzNywgRCwgRSwgQSwgQiwgQyk7CisJVF8yMF8zOSgzOCwgQywgRCwgRSwgQSwgQik7CisJVF8yMF8zOSgzOSwgQiwgQywgRCwgRSwgQSk7CiAKLQlmb3IgKDsgaSA8IDQwOyBpICsrKSB7Ci0JCXQgPSBmMihiLCBjLCBkKSArIEsyICsgcm9sMzIoYSwgNSkgKyBlICsgV1tpXTsKLQkJZSA9IGQ7IGQgPSBjOyBjID0gcm9sMzIoYiwgMzApOyBiID0gYTsgYSA9IHQ7Ci0JfQorCS8qIFJvdW5kIDMgKi8KKwlUXzQwXzU5KDQwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDQ1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQ2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQ3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQ4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDUwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDUxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDUyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDUzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDU1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDU2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDU3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDU4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU5LCBCLCBDLCBELCBFLCBBKTsKIAotCWZvciAoOyBpIDwgNjA7IGkgKyspIHsKLQkJdCA9IGYzKGIsIGMsIGQpICsgSzMgKyByb2wzMihhLCA1KSArIGUgKyBXW2ldOwotCQllID0gZDsgZCA9IGM7IGMgPSByb2wzMihiLCAzMCk7IGIgPSBhOyBhID0gdDsKLQl9CisJLyogUm91bmQgNCAqLworCVRfNjBfNzkoNjAsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNjEsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNjIsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNjMsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNjQsIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNjUsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNjYsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNjcsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNjgsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNjksIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNzAsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNzEsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNzIsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNzMsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNzQsIEIsIEMsIEQsIEUsIEEpOworCVRfNjBfNzkoNzUsIEEsIEIsIEMsIEQsIEUpOworCVRfNjBfNzkoNzYsIEUsIEEsIEIsIEMsIEQpOworCVRfNjBfNzkoNzcsIEQsIEUsIEEsIEIsIEMpOworCVRfNjBfNzkoNzgsIEMsIEQsIEUsIEEsIEIpOworCVRfNjBfNzkoNzksIEIsIEMsIEQsIEUsIEEpOwogCi0JZm9yICg7IGkgPCA4MDsgaSArKykgewotCQl0ID0gZjIoYiwgYywgZCkgKyBLNCArIHJvbDMyKGEsIDUpICsgZSArIFdbaV07Ci0JCWUgPSBkOyBkID0gYzsgYyA9IHJvbDMyKGIsIDMwKTsgYiA9IGE7IGEgPSB0OwotCX0KLQotCWRpZ2VzdFswXSArPSBhOwotCWRpZ2VzdFsxXSArPSBiOwotCWRpZ2VzdFsyXSArPSBjOwotCWRpZ2VzdFszXSArPSBkOwotCWRpZ2VzdFs0XSArPSBlOworCWRpZ2VzdFswXSArPSBBOworCWRpZ2VzdFsxXSArPSBCOworCWRpZ2VzdFsyXSArPSBDOworCWRpZ2VzdFszXSArPSBEOworCWRpZ2VzdFs0XSArPSBFOwogfQogRVhQT1JUX1NZTUJPTChzaGFfdHJhbnNmb3JtKTsKIApAQCAtOTIsNCArMTk4LDMgQEAKIAlidWZbM10gPSAweDEwMzI1NDc2OwogCWJ1Zls0XSA9IDB4YzNkMmUxZjA7CiB9Ci0KZGlmZiAtLWdpdCBhL21tL2ZhaWxzbGFiLmMgYi9tbS9mYWlsc2xhYi5jCmluZGV4IDFjZTU4YzIuLjBkZDdiOGYgMTAwNjQ0Ci0tLSBhL21tL2ZhaWxzbGFiLmMKKysrIGIvbW0vZmFpbHNsYWIuYwpAQCAtMzQsMjMgKzM0LDIzIEBACiAjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUwogc3RhdGljIGludCBfX2luaXQgZmFpbHNsYWJfZGVidWdmc19pbml0KHZvaWQpCiB7CisJc3RydWN0IGRlbnRyeSAqZGlyOwogCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lXVVNSOwotCWludCBlcnI7CiAKLQllcnIgPSBpbml0X2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIsICJmYWlsc2xhYiIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJZGlyID0gZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cigiZmFpbHNsYWIiLCBOVUxMLCAmZmFpbHNsYWIuYXR0cik7CisJaWYgKElTX0VSUihkaXIpKQorCQlyZXR1cm4gUFRSX0VSUihkaXIpOwogCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpZ25vcmUtZ2ZwLXdhaXQiLCBtb2RlLCBmYWlsc2xhYi5hdHRyLmRpciwKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2Jvb2woImlnbm9yZS1nZnAtd2FpdCIsIG1vZGUsIGRpciwKIAkJCQkmZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0KSkKIAkJZ290byBmYWlsOwotCWlmICghZGVidWdmc19jcmVhdGVfYm9vbCgiY2FjaGUtZmlsdGVyIiwgbW9kZSwgZmFpbHNsYWIuYXR0ci5kaXIsCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJjYWNoZS1maWx0ZXIiLCBtb2RlLCBkaXIsCiAJCQkJJmZhaWxzbGFiLmNhY2hlX2ZpbHRlcikpCiAJCWdvdG8gZmFpbDsKIAogCXJldHVybiAwOwogZmFpbDoKLQljbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIpOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkaXIpOwogCiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggODY3ZDQwMi4uNzc3MTg3MSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4gLyogZm9yIEJVR19PTighaW5fYXRvbWljKCkpIG9ubHkgKi8KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+IC8qIGZvciBwYWdlX2lzX2ZpbGVfY2FjaGUoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2NsZWFuY2FjaGUuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC00NjIsNiArNDYxLDcgQEAKIAlpbnQgZXJyb3I7CiAKIAlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCVZNX0JVR19PTihQYWdlU3dhcEJhY2tlZChwYWdlKSk7CiAKIAllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLAogCQkJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spOwpAQCAtNDc5LDggKzQ3OSw2IEBACiAJCWlmIChsaWtlbHkoIWVycm9yKSkgewogCQkJbWFwcGluZy0+bnJwYWdlcysrOwogCQkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwotCQkJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQotCQkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9TSE1FTSk7CiAJCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CiAJCX0gZWxzZSB7CiAJCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKQEAgLTUwMiwyMiArNTAwLDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBTcGxpY2VfcmVhZCBhbmQgcmVhZGFoZWFkIGFkZCBzaG1lbS90bXBmcyBwYWdlcyBpbnRvIHRoZSBwYWdlIGNhY2hlCi0JICogYmVmb3JlIHNobWVtX3JlYWRwYWdlIGhhcyBhIGNoYW5jZSB0byBtYXJrIHRoZW0gYXMgU3dhcEJhY2tlZDogdGhleQotCSAqIG5lZWQgdG8gZ28gb24gdGhlIGFub24gbHJ1IGJlbG93LCBhbmQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UKLQkgKiAoY2FsbGVkIGluIGFkZF90b19wYWdlX2NhY2hlKSBuZWVkcyB0byBrbm93IHdoZXJlIHRoZXkncmUgZ29pbmcgdG9vLgotCSAqLwotCWlmIChtYXBwaW5nX2NhcF9zd2FwX2JhY2tlZChtYXBwaW5nKSkKLQkJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7Ci0KIAlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKLQlpZiAocmV0ID09IDApIHsKLQkJaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkKLQkJCWxydV9jYWNoZV9hZGRfZmlsZShwYWdlKTsKLQkJZWxzZQotCQkJbHJ1X2NhY2hlX2FkZF9hbm9uKHBhZ2UpOwotCX0KKwlpZiAocmV0ID09IDApCisJCWxydV9jYWNoZV9hZGRfZmlsZShwYWdlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KTsKQEAgLTcxNCw5ICs2OTksMTYgQEAKIAkJcGFnZSA9IHJhZGl4X3RyZWVfZGVyZWZfc2xvdChwYWdlcCk7CiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQlnb3RvIG91dDsKLQkJaWYgKHJhZGl4X3RyZWVfZGVyZWZfcmV0cnkocGFnZSkpCi0JCQlnb3RvIHJlcGVhdDsKLQorCQlpZiAocmFkaXhfdHJlZV9leGNlcHRpb24ocGFnZSkpIHsKKwkJCWlmIChyYWRpeF90cmVlX2RlcmVmX3JldHJ5KHBhZ2UpKQorCQkJCWdvdG8gcmVwZWF0OworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgc2htZW0vdG1wZnMgbXVzdCBiZSBzdG9yaW5nIGEgc3dhcCBlbnRyeQorCQkJICogaGVyZSBhcyBhbiBleGNlcHRpb25hbCBlbnRyeTogc28gcmV0dXJuIGl0IHdpdGhvdXQKKwkJCSAqIGF0dGVtcHRpbmcgdG8gcmFpc2UgcGFnZSBjb3VudC4KKwkJCSAqLworCQkJZ290byBvdXQ7CisJCX0KIAkJaWYgKCFwYWdlX2NhY2hlX2dldF9zcGVjdWxhdGl2ZShwYWdlKSkKIAkJCWdvdG8gcmVwZWF0OwogCkBAIC03NTMsNyArNzQ1LDcgQEAKIAogcmVwZWF0OgogCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIG9mZnNldCk7Ci0JaWYgKHBhZ2UpIHsKKwlpZiAocGFnZSAmJiAhcmFkaXhfdHJlZV9leGNlcHRpb24ocGFnZSkpIHsKIAkJbG9ja19wYWdlKHBhZ2UpOwogCQkvKiBIYXMgdGhlIHBhZ2UgYmVlbiB0cnVuY2F0ZWQ/ICovCiAJCWlmICh1bmxpa2VseShwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpKSB7CkBAIC04MzUsMTMgKzgyNywxNCBAQAogewogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCByZXQ7Ci0JdW5zaWduZWQgaW50IG5yX2ZvdW5kOworCXVuc2lnbmVkIGludCBucl9mb3VuZCwgbnJfc2tpcDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIHJlc3RhcnQ6CiAJbnJfZm91bmQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3Nsb3QoJm1hcHBpbmctPnBhZ2VfdHJlZSwKLQkJCQkodm9pZCAqKiopcGFnZXMsIHN0YXJ0LCBucl9wYWdlcyk7CisJCQkJKHZvaWQgKioqKXBhZ2VzLCBOVUxMLCBzdGFydCwgbnJfcGFnZXMpOwogCXJldCA9IDA7CisJbnJfc2tpcCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5yX2ZvdW5kOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiByZXBlYXQ6CkBAIC04NDksMTMgKzg0MiwyMyBAQAogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogVGhpcyBjYW4gb25seSB0cmlnZ2VyIHdoZW4gdGhlIGVudHJ5IGF0IGluZGV4IDAgbW92ZXMgb3V0Ci0JCSAqIG9mIG9yIGJhY2sgdG8gdGhlIHJvb3Q6IG5vbmUgeWV0IGdvdHRlbiwgc2FmZSB0byByZXN0YXJ0LgotCQkgKi8KLQkJaWYgKHJhZGl4X3RyZWVfZGVyZWZfcmV0cnkocGFnZSkpIHsKLQkJCVdBUk5fT04oc3RhcnQgfCBpKTsKLQkJCWdvdG8gcmVzdGFydDsKKwkJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uKHBhZ2UpKSB7CisJCQlpZiAocmFkaXhfdHJlZV9kZXJlZl9yZXRyeShwYWdlKSkgeworCQkJCS8qCisJCQkJICogVHJhbnNpZW50IGNvbmRpdGlvbiB3aGljaCBjYW4gb25seSB0cmlnZ2VyCisJCQkJICogd2hlbiBlbnRyeSBhdCBpbmRleCAwIG1vdmVzIG91dCBvZiBvciBiYWNrCisJCQkJICogdG8gcm9vdDogbm9uZSB5ZXQgZ290dGVuLCBzYWZlIHRvIHJlc3RhcnQuCisJCQkJICovCisJCQkJV0FSTl9PTihzdGFydCB8IGkpOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIHNobWVtL3RtcGZzIG11c3QgYmUgc3RvcmluZyBhIHN3YXAgZW50cnkKKwkJCSAqIGhlcmUgYXMgYW4gZXhjZXB0aW9uYWwgZW50cnk6IHNvIHNraXAgb3ZlciBpdCAtCisJCQkgKiB3ZSBvbmx5IHJlYWNoIHRoaXMgZnJvbSBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoKS4KKwkJCSAqLworCQkJbnJfc2tpcCsrOworCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAoIXBhZ2VfY2FjaGVfZ2V0X3NwZWN1bGF0aXZlKHBhZ2UpKQpAQCAtODc1LDcgKzg3OCw3IEBACiAJICogSWYgYWxsIGVudHJpZXMgd2VyZSByZW1vdmVkIGJlZm9yZSB3ZSBjb3VsZCBzZWN1cmUgdGhlbSwKIAkgKiB0cnkgYWdhaW4sIGJlY2F1c2UgY2FsbGVycyBzdG9wIHRyeWluZyBvbmNlIDAgaXMgcmV0dXJuZWQuCiAJICovCi0JaWYgKHVubGlrZWx5KCFyZXQgJiYgbnJfZm91bmQpKQorCWlmICh1bmxpa2VseSghcmV0ICYmIG5yX2ZvdW5kID4gbnJfc2tpcCkpCiAJCWdvdG8gcmVzdGFydDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTAzLDcgKzkwNiw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogcmVzdGFydDoKIAlucl9mb3VuZCA9IHJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfc2xvdCgmbWFwcGluZy0+cGFnZV90cmVlLAotCQkJCSh2b2lkICoqKilwYWdlcywgaW5kZXgsIG5yX3BhZ2VzKTsKKwkJCQkodm9pZCAqKiopcGFnZXMsIE5VTEwsIGluZGV4LCBucl9wYWdlcyk7CiAJcmV0ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfZm91bmQ7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTkxMiwxMiArOTE1LDIyIEBACiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBUaGlzIGNhbiBvbmx5IHRyaWdnZXIgd2hlbiB0aGUgZW50cnkgYXQgaW5kZXggMCBtb3ZlcyBvdXQKLQkJICogb2Ygb3IgYmFjayB0byB0aGUgcm9vdDogbm9uZSB5ZXQgZ290dGVuLCBzYWZlIHRvIHJlc3RhcnQuCi0JCSAqLwotCQlpZiAocmFkaXhfdHJlZV9kZXJlZl9yZXRyeShwYWdlKSkKLQkJCWdvdG8gcmVzdGFydDsKKwkJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uKHBhZ2UpKSB7CisJCQlpZiAocmFkaXhfdHJlZV9kZXJlZl9yZXRyeShwYWdlKSkgeworCQkJCS8qCisJCQkJICogVHJhbnNpZW50IGNvbmRpdGlvbiB3aGljaCBjYW4gb25seSB0cmlnZ2VyCisJCQkJICogd2hlbiBlbnRyeSBhdCBpbmRleCAwIG1vdmVzIG91dCBvZiBvciBiYWNrCisJCQkJICogdG8gcm9vdDogbm9uZSB5ZXQgZ290dGVuLCBzYWZlIHRvIHJlc3RhcnQuCisJCQkJICovCisJCQkJZ290byByZXN0YXJ0OworCQkJfQorCQkJLyoKKwkJCSAqIE90aGVyd2lzZSwgc2htZW0vdG1wZnMgbXVzdCBiZSBzdG9yaW5nIGEgc3dhcCBlbnRyeQorCQkJICogaGVyZSBhcyBhbiBleGNlcHRpb25hbCBlbnRyeTogc28gc3RvcCBsb29raW5nIGZvcgorCQkJICogY29udGlndW91cyBwYWdlcy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KIAogCQlpZiAoIXBhZ2VfY2FjaGVfZ2V0X3NwZWN1bGF0aXZlKHBhZ2UpKQogCQkJZ290byByZXBlYXQ7CkBAIC05NzcsMTIgKzk5MCwyMSBAQAogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogVGhpcyBjYW4gb25seSB0cmlnZ2VyIHdoZW4gdGhlIGVudHJ5IGF0IGluZGV4IDAgbW92ZXMgb3V0Ci0JCSAqIG9mIG9yIGJhY2sgdG8gdGhlIHJvb3Q6IG5vbmUgeWV0IGdvdHRlbiwgc2FmZSB0byByZXN0YXJ0LgotCQkgKi8KLQkJaWYgKHJhZGl4X3RyZWVfZGVyZWZfcmV0cnkocGFnZSkpCi0JCQlnb3RvIHJlc3RhcnQ7CisJCWlmIChyYWRpeF90cmVlX2V4Y2VwdGlvbihwYWdlKSkgeworCQkJaWYgKHJhZGl4X3RyZWVfZGVyZWZfcmV0cnkocGFnZSkpIHsKKwkJCQkvKgorCQkJCSAqIFRyYW5zaWVudCBjb25kaXRpb24gd2hpY2ggY2FuIG9ubHkgdHJpZ2dlcgorCQkJCSAqIHdoZW4gZW50cnkgYXQgaW5kZXggMCBtb3ZlcyBvdXQgb2Ygb3IgYmFjaworCQkJCSAqIHRvIHJvb3Q6IG5vbmUgeWV0IGdvdHRlbiwgc2FmZSB0byByZXN0YXJ0LgorCQkJCSAqLworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJCS8qCisJCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIG5ldmVyIHVzZWQgb24gYSBzaG1lbS90bXBmcworCQkJICogbWFwcGluZywgc28gYSBzd2FwIGVudHJ5IHdvbid0IGJlIGZvdW5kIGhlcmUuCisJCQkgKi8KKwkJCUJVRygpOworCQl9CiAKIAkJaWYgKCFwYWdlX2NhY2hlX2dldF9zcGVjdWxhdGl2ZShwYWdlKSkKIAkJCWdvdG8gcmVwZWF0OwpkaWZmIC0tZ2l0IGEvbW0vaGlnaG1lbS5jIGIvbW0vaGlnaG1lbS5jCmluZGV4IDY5MzM5NGQuLjVlZjY3MmMgMTAwNjQ0Ci0tLSBhL21tL2hpZ2htZW0uYworKysgYi9tbS9oaWdobWVtLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsJCQkvKiBQcm90ZWN0IHRoaXMgYnVja2V0J3MgbGlzdCAqLwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIHBhZ2VfYWRkcmVzc19odGFibGVbMTw8UEFfSEFTSF9PUkRFUl07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZV9hZGRyZXNzX3Nsb3QgKnBhZ2Vfc2xvdChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBzdHJ1Y3QgcGFnZV9hZGRyZXNzX3Nsb3QgKnBhZ2Vfc2xvdChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gJnBhZ2VfYWRkcmVzc19odGFibGVbaGFzaF9wdHIocGFnZSwgUEFfSEFTSF9PUkRFUildOwogfQpAQCAtMzM3LDcgKzMzNyw3IEBACiAgKgogICogUmV0dXJucyB0aGUgcGFnZSdzIHZpcnR1YWwgYWRkcmVzcy4KICAqLwotdm9pZCAqcGFnZV9hZGRyZXNzKHN0cnVjdCBwYWdlICpwYWdlKQordm9pZCAqcGFnZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqcmV0OwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDVmODRkMjMuLjM1MDg3NzcgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CkBAIC0yMDUsNTAgKzIwNCw2IEBACiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfb29tX25vdGlmeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIAotZW51bSB7Ci0JU0NBTl9CWV9MSU1JVCwKLQlTQ0FOX0JZX1NZU1RFTSwKLQlOUl9TQ0FOX0NPTlRFWFQsCi0JU0NBTl9CWV9TSFJJTkssCS8qIG5vdCByZWNvcmRlZCBub3cgKi8KLX07Ci0KLWVudW0gewotCVNDQU4sCi0JU0NBTl9BTk9OLAotCVNDQU5fRklMRSwKLQlST1RBVEUsCi0JUk9UQVRFX0FOT04sCi0JUk9UQVRFX0ZJTEUsCi0JRlJFRUQsCi0JRlJFRURfQU5PTiwKLQlGUkVFRF9GSUxFLAotCUVMQVBTRUQsCi0JTlJfU0NBTlNUQVRTLAotfTsKLQotc3RydWN0IHNjYW5zdGF0IHsKLQlzcGlubG9ja190CWxvY2s7Ci0JdW5zaWduZWQgbG9uZwlzdGF0c1tOUl9TQ0FOX0NPTlRFWFRdW05SX1NDQU5TVEFUU107Ci0JdW5zaWduZWQgbG9uZwlyb290c3RhdHNbTlJfU0NBTl9DT05URVhUXVtOUl9TQ0FOU1RBVFNdOwotfTsKLQotY29uc3QgY2hhciAqc2NhbnN0YXRfc3RyaW5nW05SX1NDQU5TVEFUU10gPSB7Ci0JInNjYW5uZWRfcGFnZXMiLAotCSJzY2FubmVkX2Fub25fcGFnZXMiLAotCSJzY2FubmVkX2ZpbGVfcGFnZXMiLAotCSJyb3RhdGVkX3BhZ2VzIiwKLQkicm90YXRlZF9hbm9uX3BhZ2VzIiwKLQkicm90YXRlZF9maWxlX3BhZ2VzIiwKLQkiZnJlZWRfcGFnZXMiLAotCSJmcmVlZF9hbm9uX3BhZ2VzIiwKLQkiZnJlZWRfZmlsZV9wYWdlcyIsCi0JImVsYXBzZWRfbnMiLAotfTsKLSNkZWZpbmUgU0NBTlNUQVRfV09SRF9MSU1JVAkiX2J5X2xpbWl0IgotI2RlZmluZSBTQ0FOU1RBVF9XT1JEX1NZU1RFTQkiX2J5X3N5c3RlbSIKLSNkZWZpbmUgU0NBTlNUQVRfV09SRF9ISUVSQVJDSFkJIl91bmRlcl9oaWVyYXJjaHkiCi0KLQogLyoKICAqIFRoZSBtZW1vcnkgY29udHJvbGxlciBkYXRhIHN0cnVjdHVyZS4gVGhlIG1lbW9yeSBjb250cm9sbGVyIGNvbnRyb2xzIGJvdGgKICAqIHBhZ2UgY2FjaGUgYW5kIFJTUyBwZXIgY2dyb3VwLiBXZSB3b3VsZCBldmVudHVhbGx5IGxpa2UgdG8gcHJvdmlkZQpAQCAtMzE0LDggKzI2OSw3IEBACiAKIAkvKiBGb3Igb29tIG5vdGlmaWVyIGV2ZW50IGZkICovCiAJc3RydWN0IGxpc3RfaGVhZCBvb21fbm90aWZ5OwotCS8qIEZvciByZWNvcmRpbmcgTFJVLXNjYW4gc3RhdGlzdGljcyAqLwotCXN0cnVjdCBzY2Fuc3RhdCBzY2Fuc3RhdDsKKwogCS8qCiAJICogU2hvdWxkIHdlIG1vdmUgY2hhcmdlcyBvZiBhIHRhc2sgd2hlbiBhIHRhc2sgaXMgbW92ZWQgaW50byB0aGlzCiAJICogbWVtX2Nncm91cCA/IEFuZCB3aGF0IHR5cGUgb2YgY2hhcmdlcyBzaG91bGQgd2UgbW92ZSA/CkBAIC0xNjc5LDQ0ICsxNjMzLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVjb3JkX3NjYW5zdGF0KHVuc2lnbmVkIGxvbmcgKnN0YXRzLAotCQkJICAgc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgKnJlYykKLXsKLQotCXN0YXRzW1NDQU5dICs9IHJlYy0+bnJfc2Nhbm5lZFswXSArIHJlYy0+bnJfc2Nhbm5lZFsxXTsKLQlzdGF0c1tTQ0FOX0FOT05dICs9IHJlYy0+bnJfc2Nhbm5lZFswXTsKLQlzdGF0c1tTQ0FOX0ZJTEVdICs9IHJlYy0+bnJfc2Nhbm5lZFsxXTsKLQotCXN0YXRzW1JPVEFURV0gKz0gcmVjLT5ucl9yb3RhdGVkWzBdICsgcmVjLT5ucl9yb3RhdGVkWzFdOwotCXN0YXRzW1JPVEFURV9BTk9OXSArPSByZWMtPm5yX3JvdGF0ZWRbMF07Ci0Jc3RhdHNbUk9UQVRFX0ZJTEVdICs9IHJlYy0+bnJfcm90YXRlZFsxXTsKLQotCXN0YXRzW0ZSRUVEXSArPSByZWMtPm5yX2ZyZWVkWzBdICsgcmVjLT5ucl9mcmVlZFsxXTsKLQlzdGF0c1tGUkVFRF9BTk9OXSArPSByZWMtPm5yX2ZyZWVkWzBdOwotCXN0YXRzW0ZSRUVEX0ZJTEVdICs9IHJlYy0+bnJfZnJlZWRbMV07Ci0KLQlzdGF0c1tFTEFQU0VEXSArPSByZWMtPmVsYXBzZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVjb3JkX3NjYW5zdGF0KHN0cnVjdCBtZW1jZ19zY2FucmVjb3JkICpyZWMpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKLQlpbnQgY29udGV4dCA9IHJlYy0+Y29udGV4dDsKLQotCWlmIChjb250ZXh0ID49IE5SX1NDQU5fQ09OVEVYVCkKLQkJcmV0dXJuOwotCi0JbWVtID0gcmVjLT5tZW07Ci0Jc3Bpbl9sb2NrKCZtZW0tPnNjYW5zdGF0LmxvY2spOwotCV9fbWVtX2Nncm91cF9yZWNvcmRfc2NhbnN0YXQobWVtLT5zY2Fuc3RhdC5zdGF0c1tjb250ZXh0XSwgcmVjKTsKLQlzcGluX3VubG9jaygmbWVtLT5zY2Fuc3RhdC5sb2NrKTsKLQotCW1lbSA9IHJlYy0+cm9vdDsKLQlzcGluX2xvY2soJm1lbS0+c2NhbnN0YXQubG9jayk7Ci0JX19tZW1fY2dyb3VwX3JlY29yZF9zY2Fuc3RhdChtZW0tPnNjYW5zdGF0LnJvb3RzdGF0c1tjb250ZXh0XSwgcmVjKTsKLQlzcGluX3VubG9jaygmbWVtLT5zY2Fuc3RhdC5sb2NrKTsKLX0KLQogLyoKICAqIFNjYW4gdGhlIGhpZXJhcmNoeSBpZiBuZWVkZWQgdG8gcmVjbGFpbSBtZW1vcnkuIFdlIHJlbWVtYmVyIHRoZSBsYXN0IGNoaWxkCiAgKiB3ZSByZWNsYWltZWQgZnJvbSwgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgcGVuYWxpemluZyBvbmUgY2hpbGQgZXh0ZW5zaXZlbHkKQEAgLTE3NDEsOSArMTY1Nyw4IEBACiAJYm9vbCBub3N3YXAgPSByZWNsYWltX29wdGlvbnMgJiBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCWJvb2wgc2hyaW5rID0gcmVjbGFpbV9vcHRpb25zICYgTUVNX0NHUk9VUF9SRUNMQUlNX1NIUklOSzsKIAlib29sIGNoZWNrX3NvZnQgPSByZWNsYWltX29wdGlvbnMgJiBNRU1fQ0dST1VQX1JFQ0xBSU1fU09GVDsKLQlzdHJ1Y3QgbWVtY2dfc2NhbnJlY29yZCByZWM7CiAJdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0JdW5zaWduZWQgbG9uZyBzY2FubmVkOworCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAogCWV4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZyb290X21lbS0+cmVzKSA+PiBQQUdFX1NISUZUOwogCkBAIC0xNzUxLDE1ICsxNjY2LDYgQEAKIAlpZiAoIWNoZWNrX3NvZnQgJiYgIXNocmluayAmJiByb290X21lbS0+bWVtc3dfaXNfbWluaW11bSkKIAkJbm9zd2FwID0gdHJ1ZTsKIAotCWlmIChzaHJpbmspCi0JCXJlYy5jb250ZXh0ID0gU0NBTl9CWV9TSFJJTks7Ci0JZWxzZSBpZiAoY2hlY2tfc29mdCkKLQkJcmVjLmNvbnRleHQgPSBTQ0FOX0JZX1NZU1RFTTsKLQllbHNlCi0JCXJlYy5jb250ZXh0ID0gU0NBTl9CWV9MSU1JVDsKLQotCXJlYy5yb290ID0gcm9vdF9tZW07Ci0KIAl3aGlsZSAoMSkgewogCQl2aWN0aW0gPSBtZW1fY2dyb3VwX3NlbGVjdF92aWN0aW0ocm9vdF9tZW0pOwogCQlpZiAodmljdGltID09IHJvb3RfbWVtKSB7CkBAIC0xODAwLDIzICsxNzA2LDE0IEBACiAJCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyZWMubWVtID0gdmljdGltOwotCQlyZWMubnJfc2Nhbm5lZFswXSA9IDA7Ci0JCXJlYy5ucl9zY2FubmVkWzFdID0gMDsKLQkJcmVjLm5yX3JvdGF0ZWRbMF0gPSAwOwotCQlyZWMubnJfcm90YXRlZFsxXSA9IDA7Ci0JCXJlYy5ucl9mcmVlZFswXSA9IDA7Ci0JCXJlYy5ucl9mcmVlZFsxXSA9IDA7Ci0JCXJlYy5lbGFwc2VkID0gMDsKIAkJLyogd2UgdXNlIHN3YXBwaW5lc3Mgb2YgbG9jYWwgY2dyb3VwICovCiAJCWlmIChjaGVja19zb2Z0KSB7CiAJCQlyZXQgPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlX3pvbmUodmljdGltLCBnZnBfbWFzaywKLQkJCQlub3N3YXAsIHpvbmUsICZyZWMsICZzY2FubmVkKTsKLQkJCSp0b3RhbF9zY2FubmVkICs9IHNjYW5uZWQ7CisJCQkJbm9zd2FwLCB6b25lLCAmbnJfc2Nhbm5lZCk7CisJCQkqdG90YWxfc2Nhbm5lZCArPSBucl9zY2FubmVkOwogCQl9IGVsc2UKIAkJCXJldCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXModmljdGltLCBnZnBfbWFzaywKLQkJCQkJCW5vc3dhcCwgJnJlYyk7Ci0JCW1lbV9jZ3JvdXBfcmVjb3JkX3NjYW5zdGF0KCZyZWMpOworCQkJCQkJbm9zd2FwKTsKIAkJY3NzX3B1dCgmdmljdGltLT5jc3MpOwogCQkvKgogCQkgKiBBdCBzaHJpbmtpbmcgdXNhZ2UsIHdlIGNhbid0IGNoZWNrIHdlIHNob3VsZCBzdG9wIGhlcmUgb3IKQEAgLTE4NDIsMjkgKzE3MzksMjMgQEAKICAqLwogc3RhdGljIGJvb2wgbWVtX2Nncm91cF9vb21fbG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewotCWludCBsb2NrX2NvdW50ID0gLTE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKml0ZXIsICpmYWlsZWQgPSBOVUxMOwogCWJvb2wgY29uZCA9IHRydWU7CiAKIAlmb3JfZWFjaF9tZW1fY2dyb3VwX3RyZWVfY29uZChpdGVyLCBtZW0sIGNvbmQpIHsKLQkJYm9vbCBsb2NrZWQgPSBpdGVyLT5vb21fbG9jazsKLQotCQlpdGVyLT5vb21fbG9jayA9IHRydWU7Ci0JCWlmIChsb2NrX2NvdW50ID09IC0xKQotCQkJbG9ja19jb3VudCA9IGl0ZXItPm9vbV9sb2NrOwotCQllbHNlIGlmIChsb2NrX2NvdW50ICE9IGxvY2tlZCkgeworCQlpZiAoaXRlci0+b29tX2xvY2spIHsKIAkJCS8qCiAJCQkgKiB0aGlzIHN1YnRyZWUgb2Ygb3VyIGhpZXJhcmNoeSBpcyBhbHJlYWR5IGxvY2tlZAogCQkJICogc28gd2UgY2Fubm90IGdpdmUgYSBsb2NrLgogCQkJICovCi0JCQlsb2NrX2NvdW50ID0gMDsKIAkJCWZhaWxlZCA9IGl0ZXI7CiAJCQljb25kID0gZmFsc2U7Ci0JCX0KKwkJfSBlbHNlCisJCQlpdGVyLT5vb21fbG9jayA9IHRydWU7CiAJfQogCiAJaWYgKCFmYWlsZWQpCi0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIE9LLCB3ZSBmYWlsZWQgdG8gbG9jayB0aGUgd2hvbGUgc3VidHJlZSBzbyB3ZSBoYXZlIHRvIGNsZWFuIHVwCkBAIC0xODc4LDggKzE3NjksNyBAQAogCQl9CiAJCWl0ZXItPm9vbV9sb2NrID0gZmFsc2U7CiAJfQotZG9uZToKLQlyZXR1cm4gbG9ja19jb3VudDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC0yMDkyLDYgKzE5ODIsNyBAQAogI2RlZmluZSBGTFVTSElOR19DQUNIRURfQ0hBUkdFCSgwKQogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwLCBtZW1jZ19zdG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwogCiAvKgogICogVHJ5IHRvIGNvbnN1bWUgc3RvY2tlZCBjaGFyZ2Ugb24gdGhpcyBjcHUuIElmIHN1Y2Nlc3MsIG9uZSBwYWdlIGlzIGNvbnN1bWVkCkBAIC0yMTY5LDEzICsyMDYwLDcgQEAKIAogCS8qIE5vdGlmeSBvdGhlciBjcHVzIHRoYXQgc3lzdGVtLXdpZGUgImRyYWluIiBpcyBydW5uaW5nICovCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JLyoKLQkgKiBHZXQgYSBoaW50IGZvciBhdm9pZGluZyBkcmFpbmluZyBjaGFyZ2VzIG9uIHRoZSBjdXJyZW50IGNwdSwKLQkgKiB3aGljaCBtdXN0IGJlIGV4aGF1c3RlZCBieSBvdXIgY2hhcmdpbmcuICBJdCBpcyBub3QgcmVxdWlyZWQgdGhhdAotCSAqIHRoaXMgYmUgYSBwcmVjaXNlIGNoZWNrLCBzbyB3ZSB1c2UgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBpbnN0ZWFkIG9mCi0JICogZ2V0Y3B1KCkvcHV0Y3B1KCkuCi0JICovCi0JY3VyY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwljdXJjcHUgPSBnZXRfY3B1KCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2sgPSAmcGVyX2NwdShtZW1jZ19zdG9jaywgY3B1KTsKIAkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKQEAgLTIxOTIsMTQgKzIwNzcsMTQgQEAKIAkJCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgJnN0b2NrLT53b3JrKTsKIAkJfQogCX0KKwlwdXRfY3B1KCk7CiAKIAlpZiAoIXN5bmMpCiAJCWdvdG8gb3V0OwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IG1lbWNnX3N0b2NrX3BjcCAqc3RvY2sgPSAmcGVyX2NwdShtZW1jZ19zdG9jaywgY3B1KTsKLQkJaWYgKG1lbV9jZ3JvdXBfc2FtZV9vcl9zdWJ0cmVlKHJvb3RfbWVtLCBzdG9jay0+Y2FjaGVkKSAmJgotCQkJCXRlc3RfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsICZzdG9jay0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRSwgJnN0b2NrLT5mbGFncykpCiAJCQlmbHVzaF93b3JrKCZzdG9jay0+d29yayk7CiAJfQogb3V0OgpAQCAtMjIxNCwxNCArMjA5OSwyMiBAQAogICovCiBzdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfYXN5bmMoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQogeworCS8qCisJICogSWYgc29tZW9uZSBjYWxscyBkcmFpbmluZywgYXZvaWQgYWRkaW5nIG1vcmUga3dvcmtlciBydW5zLgorCSAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmcGVyY3B1X2NoYXJnZV9tdXRleCkpCisJCXJldHVybjsKIAlkcmFpbl9hbGxfc3RvY2socm9vdF9tZW0sIGZhbHNlKTsKKwltdXRleF91bmxvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwogfQogCiAvKiBUaGlzIGlzIGEgc3luY2hyb25vdXMgZHJhaW4gaW50ZXJmYWNlLiAqLwogc3RhdGljIHZvaWQgZHJhaW5fYWxsX3N0b2NrX3N5bmMoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtKQogewogCS8qIGNhbGxlZCB3aGVuIGZvcmNlX2VtcHR5IGlzIGNhbGxlZCAqLworCW11dGV4X2xvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpOwogCWRyYWluX2FsbF9zdG9jayhyb290X21lbSwgdHJ1ZSk7CisJbXV0ZXhfdW5sb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KTsKIH0KIAogLyoKQEAgLTI4NzMsMzAgKzI3NjYsNiBAQAogCQlyZXR1cm4gMDsKIAlpZiAoUGFnZUNvbXBvdW5kKHBhZ2UpKQogCQlyZXR1cm4gMDsKLQkvKgotCSAqIENvcm5lciBjYXNlIGhhbmRsaW5nLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGFkZF90b19wYWdlX2NhY2hlKCkKLQkgKiBpbiB1c3VhbC4gQnV0IHNvbWUgRlMgKHNobWVtKSBwcmVjaGFyZ2VzIHRoaXMgcGFnZSBiZWZvcmUgY2FsbGluZyBpdAotCSAqIGFuZCBjYWxsIGFkZF90b19wYWdlX2NhY2hlKCkgd2l0aCBHRlBfTk9XQUlULgotCSAqCi0JICogRm9yIEdGUF9OT1dBSVQgY2FzZSwgdGhlIHBhZ2UgbWF5IGJlIHByZS1jaGFyZ2VkIGJlZm9yZSBjYWxsaW5nCi0JICogYWRkX3RvX3BhZ2VfY2FjaGUoKS4gKFNlZSBzaG1lbS5jKSBjaGVjayBpdCBoZXJlIGFuZCBhdm9pZCB0byBjYWxsCi0JICogY2hhcmdlIHR3aWNlLiAoSXQgd29ya3MgYnV0IGhhcyB0byBwYXkgYSBiaXQgbGFyZ2VyIGNvc3QuKQotCSAqIEFuZCB3aGVuIHRoZSBwYWdlIGlzIFN3YXBDYWNoZSwgaXQgc2hvdWxkIHRha2Ugc3dhcCBpbmZvcm1hdGlvbgotCSAqIGludG8gYWNjb3VudC4gVGhpcyBpcyB1bmRlciBsb2NrX3BhZ2UoKSBub3cuCi0JICovCi0JaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkgewotCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCi0JCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlpZiAoIXBjKQotCQkJcmV0dXJuIDA7Ci0JCWxvY2tfcGFnZV9jZ3JvdXAocGMpOwotCQlpZiAoUGFnZUNncm91cFVzZWQocGMpKSB7Ci0JCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKLQl9CiAKIAlpZiAodW5saWtlbHkoIW1tKSkKIAkJbW0gPSAmaW5pdF9tbTsKQEAgLTM0ODYsMzEgKzMzNTUsNiBAQAogCWNncm91cF9yZWxlYXNlX2FuZF93YWtldXBfcm1kaXIoJm1lbS0+Y3NzKTsKIH0KIAotLyoKLSAqIEEgY2FsbCB0byB0cnkgdG8gc2hyaW5rIG1lbW9yeSB1c2FnZSBvbiBjaGFyZ2UgZmFpbHVyZSBhdCBzaG1lbSdzIHN3YXBpbi4KLSAqIENhbGxpbmcgaGllcmFyY2hpY2FsX3JlY2xhaW0gaXMgbm90IGVub3VnaCBiZWNhdXNlIHdlIHNob3VsZCB1cGRhdGUKLSAqIGxhc3Rfb29tX2ppZmZpZXMgdG8gcHJldmVudCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSBmcm9tIGludm9raW5nIGdsb2JhbCBPT00uCi0gKiBNb3Jlb3ZlciBjb25zaWRlcmluZyBoaWVyYXJjaHksIHdlIHNob3VsZCByZWNsYWltIGZyb20gdGhlIG1lbV9vdmVyX2xpbWl0LAotICogbm90IGZyb20gdGhlIG1lbWNnIHdoaWNoIHRoaXMgcGFnZSB3b3VsZCBiZSBjaGFyZ2VkIHRvLgotICogdHJ5X2NoYXJnZV9zd2FwaW4gZG9lcyBhbGwgb2YgdGhlc2Ugd29ya3MgcHJvcGVybHkuCi0gKi8KLWludCBtZW1fY2dyb3VwX3NobWVtX2NoYXJnZV9mYWxsYmFjayhzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCSAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSAgICBnZnBfdCBnZnBfbWFzaykKLXsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOwotCWludCByZXQ7Ci0KLQlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwaW4obW0sIHBhZ2UsIGdmcF9tYXNrLCAmbWVtKTsKLQlpZiAoIXJldCkKLQkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlX3N3YXBpbihtZW0pOyAvKiBpdCBkb2VzICFtZW0gY2hlY2sgKi8KLQotCXJldHVybiByZXQ7Ci19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfVk0KIHN0YXRpYyBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cF91c2VkKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzkwOCwxOCArMzc1MiwxNCBAQAogCS8qIHRyeSB0byBmcmVlIGFsbCBwYWdlcyBpbiB0aGlzIGNncm91cCAqLwogCXNocmluayA9IDE7CiAJd2hpbGUgKG5yX3JldHJpZXMgJiYgbWVtLT5yZXMudXNhZ2UgPiAwKSB7Ci0JCXN0cnVjdCBtZW1jZ19zY2FucmVjb3JkIHJlYzsKIAkJaW50IHByb2dyZXNzOwogCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmV0ID0gLUVJTlRSOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJcmVjLmNvbnRleHQgPSBTQ0FOX0JZX1NIUklOSzsKLQkJcmVjLm1lbSA9IG1lbTsKLQkJcmVjLnJvb3QgPSBtZW07CiAJCXByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW0sIEdGUF9LRVJORUwsCi0JCQkJCQlmYWxzZSwgJnJlYyk7CisJCQkJCQlmYWxzZSk7CiAJCWlmICghcHJvZ3Jlc3MpIHsKIAkJCW5yX3JldHJpZXMtLTsKIAkJCS8qIG1heWJlIHNvbWUgd3JpdGViYWNrIGlzIG5lY2Vzc2FyeSAqLwpAQCAtNDc2Myw1NCArNDYwMyw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KIAotc3RhdGljIGludCBtZW1fY2dyb3VwX3Ztc2Nhbl9zdGF0X3JlYWQoc3RydWN0IGNncm91cCAqY2dycCwKLQkJCQlzdHJ1Y3QgY2Z0eXBlICpjZnQsCi0JCQkJc3RydWN0IGNncm91cF9tYXBfY2IgKmNiKQotewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JwKTsKLQljaGFyIHN0cmluZ1s2NF07Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfU0NBTlNUQVRTOyBpKyspIHsKLQkJc3RyY3B5KHN0cmluZywgc2NhbnN0YXRfc3RyaW5nW2ldKTsKLQkJc3RyY2F0KHN0cmluZywgU0NBTlNUQVRfV09SRF9MSU1JVCk7Ci0JCWNiLT5maWxsKGNiLCBzdHJpbmcsICBtZW0tPnNjYW5zdGF0LnN0YXRzW1NDQU5fQllfTElNSVRdW2ldKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfU0NBTlNUQVRTOyBpKyspIHsKLQkJc3RyY3B5KHN0cmluZywgc2NhbnN0YXRfc3RyaW5nW2ldKTsKLQkJc3RyY2F0KHN0cmluZywgU0NBTlNUQVRfV09SRF9TWVNURU0pOwotCQljYi0+ZmlsbChjYiwgc3RyaW5nLCAgbWVtLT5zY2Fuc3RhdC5zdGF0c1tTQ0FOX0JZX1NZU1RFTV1baV0pOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBOUl9TQ0FOU1RBVFM7IGkrKykgewotCQlzdHJjcHkoc3RyaW5nLCBzY2Fuc3RhdF9zdHJpbmdbaV0pOwotCQlzdHJjYXQoc3RyaW5nLCBTQ0FOU1RBVF9XT1JEX0xJTUlUKTsKLQkJc3RyY2F0KHN0cmluZywgU0NBTlNUQVRfV09SRF9ISUVSQVJDSFkpOwotCQljYi0+ZmlsbChjYiwgc3RyaW5nLCAgbWVtLT5zY2Fuc3RhdC5yb290c3RhdHNbU0NBTl9CWV9MSU1JVF1baV0pOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTlJfU0NBTlNUQVRTOyBpKyspIHsKLQkJc3RyY3B5KHN0cmluZywgc2NhbnN0YXRfc3RyaW5nW2ldKTsKLQkJc3RyY2F0KHN0cmluZywgU0NBTlNUQVRfV09SRF9TWVNURU0pOwotCQlzdHJjYXQoc3RyaW5nLCBTQ0FOU1RBVF9XT1JEX0hJRVJBUkNIWSk7Ci0JCWNiLT5maWxsKGNiLCBzdHJpbmcsICBtZW0tPnNjYW5zdGF0LnJvb3RzdGF0c1tTQ0FOX0JZX1NZU1RFTV1baV0pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2V0X3Ztc2Nhbl9zdGF0KHN0cnVjdCBjZ3JvdXAgKmNncnAsCi0JCQkJdW5zaWduZWQgaW50IGV2ZW50KQotewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JwKTsKLQotCXNwaW5fbG9jaygmbWVtLT5zY2Fuc3RhdC5sb2NrKTsKLQltZW1zZXQoJm1lbS0+c2NhbnN0YXQuc3RhdHMsIDAsIHNpemVvZihtZW0tPnNjYW5zdGF0LnN0YXRzKSk7Ci0JbWVtc2V0KCZtZW0tPnNjYW5zdGF0LnJvb3RzdGF0cywgMCwgc2l6ZW9mKG1lbS0+c2NhbnN0YXQucm9vdHN0YXRzKSk7Ci0Jc3Bpbl91bmxvY2soJm1lbS0+c2NhbnN0YXQubG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9maWxlc1tdID0gewogCXsKIAkJLm5hbWUgPSAidXNhZ2VfaW5fYnl0ZXMiLApAQCAtNDg4MSwxMSArNDY3Myw2IEBACiAJCS5tb2RlID0gU19JUlVHTywKIAl9LAogI2VuZGlmCi0JewotCQkubmFtZSA9ICJ2bXNjYW5fc3RhdCIsCi0JCS5yZWFkX21hcCA9IG1lbV9jZ3JvdXBfdm1zY2FuX3N0YXRfcmVhZCwKLQkJLnRyaWdnZXIgPSBtZW1fY2dyb3VwX3Jlc2V0X3Ztc2Nhbl9zdGF0LAotCX0sCiB9OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUApAQCAtNTE0OSw3ICs0OTM2LDYgQEAKIAlhdG9taWNfc2V0KCZtZW0tPnJlZmNudCwgMSk7CiAJbWVtLT5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUgPSAwOwogCW11dGV4X2luaXQoJm1lbS0+dGhyZXNob2xkc19sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmbWVtLT5zY2Fuc3RhdC5sb2NrKTsKIAlyZXR1cm4gJm1lbS0+Y3NzOwogZnJlZV9vdXQ6CiAJX19tZW1fY2dyb3VwX2ZyZWUobWVtKTsKQEAgLTUzMzAsMTUgKzUxMTYsMTcgQEAKIAkJcGdvZmYgPSBwdGVfdG9fcGdvZmYocHRlbnQpOwogCiAJLyogcGFnZSBpcyBtb3ZlZCBldmVuIGlmIGl0J3Mgbm90IFJTUyBvZiB0aGlzIHRhc2socGFnZS1mYXVsdGVkKS4gKi8KLQlpZiAoIW1hcHBpbmdfY2FwX3N3YXBfYmFja2VkKG1hcHBpbmcpKSB7IC8qIG5vcm1hbCBmaWxlICovCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIHBnb2ZmKTsKLQl9IGVsc2UgeyAvKiBzaG1lbS90bXBmcyBmaWxlLiB3ZSBzaG91bGQgdGFrZSBhY2NvdW50IG9mIHN3YXAgdG9vLiAqLwotCQlzd3BfZW50cnlfdCBlbnQ7Ci0JCW1lbV9jZ3JvdXBfZ2V0X3NobWVtX3RhcmdldChpbm9kZSwgcGdvZmYsICZwYWdlLCAmZW50KTsKLQkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCWVudHJ5LT52YWwgPSBlbnQudmFsOwotCX0KKwlwYWdlID0gZmluZF9nZXRfcGFnZShtYXBwaW5nLCBwZ29mZik7CiAKKyNpZmRlZiBDT05GSUdfU1dBUAorCS8qIHNobWVtL3RtcGZzIG1heSByZXBvcnQgcGFnZSBvdXQgb24gc3dhcDogYWNjb3VudCBmb3IgdGhhdCB0b28uICovCisJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uYWxfZW50cnkocGFnZSkpIHsKKwkJc3dwX2VudHJ5X3Qgc3dhcCA9IHJhZGl4X3RvX3N3cF9lbnRyeShwYWdlKTsKKwkJaWYgKGRvX3N3YXBfYWNjb3VudCkKKwkJCSplbnRyeSA9IHN3YXA7CisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKCZzd2FwcGVyX3NwYWNlLCBzd2FwLnZhbCk7CisJfQorI2VuZGlmCiAJcmV0dXJuIHBhZ2U7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IDc0MGM0ZjUuLjJiNDNiYTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHkgPSAwOwpAQCAtMTE3OCw2ICsxMTc5LDk3IEBACiAJX19tZW1vcnlfZmFpbHVyZShwZm4sIHRyYXBubywgMCk7CiB9CiAKKyNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUgk0CisjZGVmaW5lIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRQkoMSA8PCBNRU1PUllfRkFJTFVSRV9GSUZPX09SREVSKQorCitzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgcGZuOworCWludCB0cmFwbm87CisJaW50IGZsYWdzOworfTsKKworc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSB7CisJREVDTEFSRV9LRklGTyhmaWZvLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnksCisJCSAgICAgIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRSk7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9jcHUsIG1lbW9yeV9mYWlsdXJlX2NwdSk7CisKKy8qKgorICogbWVtb3J5X2ZhaWx1cmVfcXVldWUgLSBTY2hlZHVsZSBoYW5kbGluZyBtZW1vcnkgZmFpbHVyZSBvZiBhIHBhZ2UuCisgKiBAcGZuOiBQYWdlIE51bWJlciBvZiB0aGUgY29ycnVwdGVkIHBhZ2UKKyAqIEB0cmFwbm86IFRyYXAgbnVtYmVyIHJlcG9ydGVkIGluIHRoZSBzaWduYWwgdG8gdXNlciBzcGFjZS4KKyAqIEBmbGFnczogRmxhZ3MgZm9yIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBlcnJvciBoYW5kbGVyCisgKiB3aGVuIGl0IGRldGVjdHMgaGFyZHdhcmUgbWVtb3J5IGNvcnJ1cHRpb24gb2YgYSBwYWdlLiBJdCBzY2hlZHVsZXMKKyAqIHRoZSByZWNvdmVyaW5nIG9mIGVycm9yIHBhZ2UsIGluY2x1ZGluZyBkcm9wcGluZyBwYWdlcywga2lsbGluZworICogcHJvY2Vzc2VzIGV0Yy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IG9mIHVzZSBmb3IgY29ycnVwdGlvbnMgdGhhdAorICogaGFwcGVuIG91dHNpZGUgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQgKGUuZy4gd2hlbgorICogZGV0ZWN0ZWQgYnkgYSBiYWNrZ3JvdW5kIHNjcnViYmVyKQorICoKKyAqIENhbiBydW4gaW4gSVJRIGNvbnRleHQuCisgKi8KK3ZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCB0cmFwbm8sIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7CisJdW5zaWduZWQgbG9uZyBwcm9jX2ZsYWdzOworCXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHsKKwkJLnBmbiA9CQlwZm4sCisJCS50cmFwbm8gPQl0cmFwbm8sCisJCS5mbGFncyA9CWZsYWdzLAorCX07CisKKwltZl9jcHUgPSAmZ2V0X2NwdV92YXIobWVtb3J5X2ZhaWx1cmVfY3B1KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZfY3B1LT5sb2NrLCBwcm9jX2ZsYWdzKTsKKwlpZiAoa2ZpZm9fcHV0KCZtZl9jcHUtPmZpZm8sICZlbnRyeSkpCisJCXNjaGVkdWxlX3dvcmtfb24oc21wX3Byb2Nlc3Nvcl9pZCgpLCAmbWZfY3B1LT53b3JrKTsKKwllbHNlCisJCXByX2VycigiTWVtb3J5IGZhaWx1cmU6IGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHF1ZXVpbmcgbWVtb3J5IGZhaWx1cmUgYXQgMHglI2x4XG4iLAorCQkgICAgICAgcGZuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZl9jcHUtPmxvY2ssIHByb2NfZmxhZ3MpOworCXB1dF9jcHVfdmFyKG1lbW9yeV9mYWlsdXJlX2NwdSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZV9xdWV1ZSk7CisKK3N0YXRpYyB2b2lkIG1lbW9yeV9mYWlsdXJlX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSAqbWZfY3B1OworCXN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSBlbnRyeSA9IHsgMCwgfTsKKwl1bnNpZ25lZCBsb25nIHByb2NfZmxhZ3M7CisJaW50IGdvdHRlbjsKKworCW1mX2NwdSA9ICZfX2dldF9jcHVfdmFyKG1lbW9yeV9mYWlsdXJlX2NwdSk7CisJZm9yICg7OykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWZfY3B1LT5sb2NrLCBwcm9jX2ZsYWdzKTsKKwkJZ290dGVuID0ga2ZpZm9fZ2V0KCZtZl9jcHUtPmZpZm8sICZlbnRyeSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mX2NwdS0+bG9jaywgcHJvY19mbGFncyk7CisJCWlmICghZ290dGVuKQorCQkJYnJlYWs7CisJCV9fbWVtb3J5X2ZhaWx1cmUoZW50cnkucGZuLCBlbnRyeS50cmFwbm8sIGVudHJ5LmZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1lbW9yeV9mYWlsdXJlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1ICptZl9jcHU7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJbWZfY3B1ID0gJnBlcl9jcHUobWVtb3J5X2ZhaWx1cmVfY3B1LCBjcHUpOworCQlzcGluX2xvY2tfaW5pdCgmbWZfY3B1LT5sb2NrKTsKKwkJSU5JVF9LRklGTyhtZl9jcHUtPmZpZm8pOworCQlJTklUX1dPUksoJm1mX2NwdS0+d29yaywgbWVtb3J5X2ZhaWx1cmVfd29ya19mdW5jKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2NvcmVfaW5pdGNhbGwobWVtb3J5X2ZhaWx1cmVfaW5pdCk7CisKIC8qKgogICogdW5wb2lzb25fbWVtb3J5IC0gVW5wb2lzb24gYSBwcmV2aW91c2x5IHBvaXNvbmVkIHBhZ2UKICAqIEBwZm46IFBhZ2UgbnVtYmVyIG9mIHRoZSB0byBiZSB1bnBvaXNvbmVkIHBhZ2UKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggOGI1NzE3My4uOWM1MWY5ZiAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTYzNiw3ICs2MzYsNiBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldjsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gMDsKLQlwZ29mZl90IHBnb2ZmOwogCXVuc2lnbmVkIGxvbmcgdm1zdGFydDsKIAl1bnNpZ25lZCBsb25nIHZtZW5kOwogCkBAIC02NDksOSArNjQ4LDkgQEAKIAkJdm1zdGFydCA9IG1heChzdGFydCwgdm1hLT52bV9zdGFydCk7CiAJCXZtZW5kICAgPSBtaW4oZW5kLCB2bWEtPnZtX2VuZCk7CiAKLQkJcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmICsgKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpOwogCQlwcmV2ID0gdm1hX21lcmdlKG1tLCBwcmV2LCB2bXN0YXJ0LCB2bWVuZCwgdm1hLT52bV9mbGFncywKLQkJCQkgIHZtYS0+YW5vbl92bWEsIHZtYS0+dm1fZmlsZSwgcGdvZmYsIG5ld19wb2wpOworCQkJCSAgdm1hLT5hbm9uX3ZtYSwgdm1hLT52bV9maWxlLCB2bWEtPnZtX3Bnb2ZmLAorCQkJCSAgbmV3X3BvbCk7CiAJCWlmIChwcmV2KSB7CiAJCQl2bWEgPSBwcmV2OwogCQkJbmV4dCA9IHZtYS0+dm1fbmV4dDsKQEAgLTE0MTIsNyArMTQxMSw5IEBACiAJZXJyID0gc3lzX2dldF9tZW1wb2xpY3kocG9saWN5LCBubSwgbnJfYml0cysxLCBhZGRyLCBmbGFncyk7CiAKIAlpZiAoIWVyciAmJiBubWFzaykgewotCQllcnIgPSBjb3B5X2Zyb21fdXNlcihibSwgbm0sIGFsbG9jX3NpemUpOworCQl1bnNpZ25lZCBsb25nIGNvcHlfc2l6ZTsKKwkJY29weV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgc2l6ZW9mKGJtKSwgYWxsb2Nfc2l6ZSk7CisJCWVyciA9IGNvcHlfZnJvbV91c2VyKGJtLCBubSwgY29weV9zaXplKTsKIAkJLyogZW5zdXJlIGVudGlyZSBiaXRtYXAgaXMgemVyb2VkICovCiAJCWVyciB8PSBjbGVhcl91c2VyKG5tYXNrLCBBTElHTihtYXhub2RlLTEsIDgpIC8gOCk7CiAJCWVyciB8PSBjb21wYXRfcHV0X2JpdG1hcChubWFzaywgYm0sIG5yX2JpdHMpOwpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IGE0ZTZiOWQuLjYzNmE4NjggMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYworKysgYi9tbS9taW5jb3JlLmMKQEAgLTY5LDEyICs2OSwxNSBAQAogCSAqIGZpbGUgd2lsbCBub3QgZ2V0IGEgc3dwX2VudHJ5X3QgaW4gaXRzIHB0ZSwgYnV0IHJhdGhlciBpdCBpcyBsaWtlCiAJICogYW55IG90aGVyIGZpbGUgbWFwcGluZyAoaWUuIG1hcmtlZCAhcHJlc2VudCBhbmQgZmF1bHRlZCBpbiB3aXRoCiAJICogdG1wZnMncyAuZmF1bHQpLiBTbyBzd2FwcGVkIG91dCB0bXBmcyBtYXBwaW5ncyBhcmUgdGVzdGVkIGhlcmUuCi0JICoKLQkgKiBIb3dldmVyIHdoZW4gdG1wZnMgbW92ZXMgdGhlIHBhZ2UgZnJvbSBwYWdlY2FjaGUgYW5kIGludG8gc3dhcGNhY2hlLAotCSAqIGl0IGlzIHN0aWxsIGluIGNvcmUsIGJ1dCB0aGUgZmluZF9nZXRfcGFnZSBiZWxvdyB3b24ndCBmaW5kIGl0LgotCSAqIE5vIGJpZyBkZWFsLCBidXQgbWFrZSBhIG5vdGUgb2YgaXQuCiAJICovCiAJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgcGdvZmYpOworI2lmZGVmIENPTkZJR19TV0FQCisJLyogc2htZW0vdG1wZnMgbWF5IHJldHVybiBzd2FwOiBhY2NvdW50IGZvciBzd2FwY2FjaGUgcGFnZSB0b28uICovCisJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uYWxfZW50cnkocGFnZSkpIHsKKwkJc3dwX2VudHJ5X3Qgc3dhcCA9IHJhZGl4X3RvX3N3cF9lbnRyeShwYWdlKTsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoJnN3YXBwZXJfc3BhY2UsIHN3YXAudmFsKTsKKwl9CisjZW5kaWYKIAlpZiAocGFnZSkgewogCQlwcmVzZW50ID0gUGFnZVVwdG9kYXRlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBlYWZmZjg5Li42MjYzMDNiIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJdW5zaWduZWQgaW50IHBvaW50czsKIAotCQlpZiAoIXAtPm1tKQorCQlpZiAocC0+ZXhpdF9zdGF0ZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAob29tX3Vua2lsbGFibGVfdGFzayhwLCBtZW0sIG5vZGVtYXNrKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzE5LDYgKzMxOSw4IEBACiAJCSAqLwogCQlpZiAodGVzdF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX01FTURJRSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtMVVMKTsKKwkJaWYgKCFwLT5tbSkKKwkJCWNvbnRpbnVlOwogCiAJCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcpIHsKIAkJCS8qCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBkMTk2MDc0Li4wZTMwOWNkIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTc1NCwyMSArNzU0LDEwIEBACiAJCSAqIDIwMG1zIGlzIHR5cGljYWxseSBtb3JlIHRoYW4gZW5vdWdoIHRvIGN1cmIgaGVhdnkgZGlydGllcnM7CiAJCSAqIChiKSB0aGUgcGF1c2UgdGltZSBsaW1pdCBtYWtlcyB0aGUgZGlydGllcnMgbW9yZSByZXNwb25zaXZlLgogCQkgKi8KLQkJaWYgKG5yX2RpcnR5IDwgZGlydHlfdGhyZXNoICsKLQkJCSAgICAgICBkaXJ0eV90aHJlc2ggLyBESVJUWV9NQVhQQVVTRV9BUkVBICYmCisJCWlmIChucl9kaXJ0eSA8IGRpcnR5X3RocmVzaCAmJgorCQkgICAgYmRpX2RpcnR5IDwgKHRhc2tfYmRpX3RocmVzaCArIGJkaV90aHJlc2gpIC8gMiAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lICsgTUFYX1BBVVNFKSkKIAkJCWJyZWFrOwotCQkvKgotCQkgKiBwYXNzLWdvb2QgYXJlYS4gV2hlbiBzb21lIGJkaSBnZXRzIGJsb2NrZWQgKGVnLiBORlMgc2VydmVyCi0JCSAqIG5vdCByZXNwb25kaW5nKSwgb3Igd3JpdGUgYmFuZHdpZHRoIGRyb3BwZWQgZHJhbWF0aWNhbGx5IGR1ZQotCQkgKiB0byBjb25jdXJyZW50IHJlYWRzLCBvciBkaXJ0eSB0aHJlc2hvbGQgc3VkZGVubHkgZHJvcHBlZCBhbmQKLQkJICogdGhlIGRpcnR5IHBhZ2VzIGNhbm5vdCBiZSBicm91Z2h0IGRvd24gYW55dGltZSBzb29uIChlZy4gb24KLQkJICogc2xvdyBVU0Igc3RpY2spLCBhdCBsZWFzdCBsZXQgZ28gb2YgdGhlIGdvb2QgYmRpJ3MuCi0JCSAqLwotCQlpZiAobnJfZGlydHkgPCBkaXJ0eV90aHJlc2ggKwotCQkJICAgICAgIGRpcnR5X3RocmVzaCAvIERJUlRZX1BBU1NHT09EX0FSRUEgJiYKLQkJICAgIGJkaV9kaXJ0eSA8IGJkaV90aHJlc2gpCi0JCQlicmVhazsKIAogCQkvKgogCQkgKiBJbmNyZWFzZSB0aGUgZGVsYXkgZm9yIGVhY2ggbG9vcCwgdXAgdG8gb3VyIHByZXZpb3VzCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMWRiY2Y4OC4uNmU4ZWNiNiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTQwOSwxNCArMTQwOSwxMSBAQAogewogCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lXVVNSOwogCXN0cnVjdCBkZW50cnkgKmRpcjsKLQlpbnQgZXJyOwogCi0JZXJyID0gaW5pdF9mYXVsdF9hdHRyX2RlbnRyaWVzKCZmYWlsX3BhZ2VfYWxsb2MuYXR0ciwKLQkJCQkgICAgICAgImZhaWxfcGFnZV9hbGxvYyIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlkaXIgPSBmYWlsX3BhZ2VfYWxsb2MuYXR0ci5kaXI7CisJZGlyID0gZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cigiZmFpbF9wYWdlX2FsbG9jIiwgTlVMTCwKKwkJCQkJJmZhaWxfcGFnZV9hbGxvYy5hdHRyKTsKKwlpZiAoSVNfRVJSKGRpcikpCisJCXJldHVybiBQVFJfRVJSKGRpcik7CiAKIAlpZiAoIWRlYnVnZnNfY3JlYXRlX2Jvb2woImlnbm9yZS1nZnAtd2FpdCIsIG1vZGUsIGRpciwKIAkJCQkmZmFpbF9wYWdlX2FsbG9jLmlnbm9yZV9nZnBfd2FpdCkpCkBAIC0xNDMwLDcgKzE0MjcsNyBAQAogCiAJcmV0dXJuIDA7CiBmYWlsOgotCWNsZWFudXBfZmF1bHRfYXR0cl9kZW50cmllcygmZmFpbF9wYWdlX2FsbG9jLmF0dHIpOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkaXIpOwogCiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1Y2MyMWY4Li4zMmY2NzYzIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTYsNyArNiw4IEBACiAgKgkJIDIwMDAtMjAwMSBDaHJpc3RvcGggUm9obGFuZAogICoJCSAyMDAwLTIwMDEgU0FQIEFHCiAgKgkJIDIwMDIgUmVkIEhhdCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBIdWdoIERpY2tpbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMSBIdWdoIERpY2tpbnMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1IFZFUklUQVMgU29mdHdhcmUgQ29ycG9yYXRpb24uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCiAgKgpAQCAtMjgsNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50OwpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BsaWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CkBAIC02Myw0MyArNjUsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0vKgotICogVGhlIG1heGltdW0gc2l6ZSBvZiBhIHNobWVtL3RtcGZzIGZpbGUgaXMgbGltaXRlZCBieSB0aGUgbWF4aW11bSBzaXplIG9mCi0gKiBpdHMgdHJpcGxlLWluZGlyZWN0IHN3YXAgdmVjdG9yIC0gc2VlIGlsbHVzdHJhdGlvbiBhdCBzaG1lbV9zd3BfZW50cnkoKS4KLSAqCi0gKiBXaXRoIDRrQiBwYWdlIHNpemUsIG1heGltdW0gZmlsZSBzaXplIGlzIGp1c3Qgb3ZlciAyVEIgb24gYSAzMi1iaXQga2VybmVsLAotICogYnV0IG9uZSBlaWdodGggb2YgdGhhdCBvbiBhIDY0LWJpdCBrZXJuZWwuICBXaXRoIDhrQiBwYWdlIHNpemUsIG1heGltdW0KLSAqIGZpbGUgc2l6ZSBpcyBqdXN0IG92ZXIgNFRCIG9uIGEgNjQtYml0IGtlcm5lbCwgYnV0IDE2VEIgb24gYSAzMi1iaXQga2VybmVsLAotICogTUFYX0xGU19GSUxFU0laRSBiZWluZyB0aGVuIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBzd2FwIHZlY3RvciBsYXlvdXQuCi0gKgotICogV2UgdXNlIC8gYW5kICogaW5zdGVhZCBvZiBzaGlmdHMgaW4gdGhlIGRlZmluaXRpb25zIGJlbG93LCBzbyB0aGF0IHRoZSBzd2FwCi0gKiB2ZWN0b3IgY2FuIGJlIHRlc3RlZCB3aXRoIHNtYWxsIGV2ZW4gdmFsdWVzIChlLmcuIDIwKSBmb3IgRU5UUklFU19QRVJfUEFHRS4KLSAqLwotI2RlZmluZSBFTlRSSUVTX1BFUl9QQUdFIChQQUdFX0NBQ0hFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotI2RlZmluZSBFTlRSSUVTX1BFUl9QQUdFUEFHRSAoKHVuc2lnbmVkIGxvbmcgbG9uZylFTlRSSUVTX1BFUl9QQUdFKkVOVFJJRVNfUEVSX1BBR0UpCi0KLSNkZWZpbmUgU0hNU1dQX01BWF9JTkRFWCAoU0hNRU1fTlJfRElSRUNUICsgKEVOVFJJRVNfUEVSX1BBR0VQQUdFLzIpICogKEVOVFJJRVNfUEVSX1BBR0UrMSkpCi0jZGVmaW5lIFNITVNXUF9NQVhfQllURVMgKFNITVNXUF9NQVhfSU5ERVggPDwgUEFHRV9DQUNIRV9TSElGVCkKLQotI2RlZmluZSBTSE1FTV9NQVhfQllURVMgIG1pbl90KHVuc2lnbmVkIGxvbmcgbG9uZywgU0hNU1dQX01BWF9CWVRFUywgTUFYX0xGU19GSUxFU0laRSkKLSNkZWZpbmUgU0hNRU1fTUFYX0lOREVYICAoKHVuc2lnbmVkIGxvbmcpKChTSE1FTV9NQVhfQllURVMrMSkgPj4gUEFHRV9DQUNIRV9TSElGVCkpCi0KICNkZWZpbmUgQkxPQ0tTX1BFUl9QQUdFICAoUEFHRV9DQUNIRV9TSVpFLzUxMikKICNkZWZpbmUgVk1fQUNDVChzaXplKSAgICAoUEFHRV9DQUNIRV9BTElHTihzaXplKSA+PiBQQUdFX1NISUZUKQogCi0vKiBpbmZvLT5mbGFncyBuZWVkcyBWTV9mbGFncyB0byBoYW5kbGUgcGFnZWluL3RydW5jYXRlIHJhY2VzIGVmZmljaWVudGx5ICovCi0jZGVmaW5lIFNITUVNX1BBR0VJTgkgVk1fUkVBRAotI2RlZmluZSBTSE1FTV9UUlVOQ0FURQkgVk1fV1JJVEUKLQotLyogRGVmaW5pdGlvbiB0byBsaW1pdCBzaG1lbV90cnVuY2F0ZSdzIHN0ZXBzIGJldHdlZW4gY29uZF9yZXNjaGVkcyAqLwotI2RlZmluZSBMQVRFTkNZX0xJTUlUCSA2NAotCiAvKiBQcmV0ZW5kIHRoYXQgZWFjaCBlbnRyeSBpcyBvZiB0aGlzIHNpemUgaW4gZGlyZWN0b3J5J3MgaV9zaXplICovCiAjZGVmaW5lIEJPR09fRElSRU5UX1NJWkUgMjAKIAorLyogU3ltbGluayB1cCB0byB0aGlzIHNpemUgaXMga21hbGxvYydlZCBpbnN0ZWFkIG9mIHVzaW5nIGEgc3dhcHBhYmxlIHBhZ2UgKi8KKyNkZWZpbmUgU0hPUlRfU1lNTElOS19MRU4gMTI4CisKIHN0cnVjdCBzaG1lbV94YXR0ciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBhbmNob3JlZCBieSBzaG1lbV9pbm9kZV9pbmZvLT54YXR0cl9saXN0ICovCiAJY2hhciAqbmFtZTsJCS8qIHhhdHRyIG5hbWUgKi8KQEAgLTEwNyw3ICs4Myw3IEBACiAJY2hhciB2YWx1ZVswXTsKIH07CiAKLS8qIEZsYWcgYWxsb2NhdGlvbiByZXF1aXJlbWVudHMgdG8gc2htZW1fZ2V0cGFnZSBhbmQgc2htZW1fc3dwX2FsbG9jICovCisvKiBGbGFnIGFsbG9jYXRpb24gcmVxdWlyZW1lbnRzIHRvIHNobWVtX2dldHBhZ2UgKi8KIGVudW0gc2dwX3R5cGUgewogCVNHUF9SRUFELAkvKiBkb24ndCBleGNlZWQgaV9zaXplLCBkb24ndCBhbGxvY2F0ZSBwYWdlICovCiAJU0dQX0NBQ0hFLAkvKiBkb24ndCBleGNlZWQgaV9zaXplLCBtYXkgYWxsb2NhdGUgcGFnZSAqLwpAQCAtMTM3LDU2ICsxMTMsNiBAQAogCQkJbWFwcGluZ19nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nKSwgZmF1bHRfdHlwZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNobWVtX2Rpcl9hbGxvYyhnZnBfdCBnZnBfbWFzaykKLXsKLQkvKgotCSAqIFRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIEVOVFJJRVNfUEVSX1BBR0UsIGFuZCB0aGUgdXNlIG9mCi0JICogQkxPQ0tTX1BFUl9QQUdFIG9uIGluZGlyZWN0IHBhZ2VzLCBhc3N1bWUgUEFHRV9DQUNIRV9TSVpFOgotCSAqIG1pZ2h0IGJlIHJlY29uc2lkZXJlZCBpZiBpdCBldmVyIGRpdmVyZ2VzIGZyb20gUEFHRV9TSVpFLgotCSAqCi0JICogTW9iaWxpdHkgZmxhZ3MgYXJlIG1hc2tlZCBvdXQgYXMgc3dhcCB2ZWN0b3JzIGNhbm5vdCBtb3ZlCi0JICovCi0JcmV0dXJuIGFsbG9jX3BhZ2VzKChnZnBfbWFzayAmIH5HRlBfTU9WQUJMRV9NQVNLKSB8IF9fR0ZQX1pFUk8sCi0JCQkJUEFHRV9DQUNIRV9TSElGVC1QQUdFX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNobWVtX2Rpcl9mcmVlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCV9fZnJlZV9wYWdlcyhwYWdlLCBQQUdFX0NBQ0hFX1NISUZULVBBR0VfU0hJRlQpOwotfQotCi1zdGF0aWMgc3RydWN0IHBhZ2UgKipzaG1lbV9kaXJfbWFwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXJldHVybiAoc3RydWN0IHBhZ2UgKiopa21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fZGlyX3VubWFwKHN0cnVjdCBwYWdlICoqZGlyKQotewotCWt1bm1hcF9hdG9taWMoZGlyLCBLTV9VU0VSMCk7Ci19Ci0KLXN0YXRpYyBzd3BfZW50cnlfdCAqc2htZW1fc3dwX21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gKHN3cF9lbnRyeV90ICopa21hcF9hdG9taWMocGFnZSwgS01fVVNFUjEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fc3dwX2JhbGFuY2VfdW5tYXAodm9pZCkKLXsKLQkvKgotCSAqIFdoZW4gcGFzc2luZyBhIHBvaW50ZXIgdG8gYW4gaV9kaXJlY3QgZW50cnksIHRvIGNvZGUgd2hpY2gKLQkgKiBhbHNvIGhhbmRsZXMgaW5kaXJlY3QgZW50cmllcyBhbmQgc28gd2lsbCBzaG1lbV9zd3BfdW5tYXAsCi0JICogd2UgbXVzdCBhcnJhbmdlIGZvciB0aGUgcHJlZW1wdCBjb3VudCB0byByZW1haW4gaW4gYmFsYW5jZS4KLQkgKiBXaGF0IGttYXBfYXRvbWljIG9mIGEgbG93bWVtIHBhZ2UgZG9lcyBkZXBlbmRzIG9uIGNvbmZpZwotCSAqIGFuZCBhcmNoaXRlY3R1cmUsIHNvIHByZXRlbmQgdG8ga21hcF9hdG9taWMgc29tZSBsb3dtZW0gcGFnZS4KLQkgKi8KLQkodm9pZCkga21hcF9hdG9taWMoWkVST19QQUdFKDApLCBLTV9VU0VSMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzaG1lbV9zd3BfdW5tYXAoc3dwX2VudHJ5X3QgKmVudHJ5KQotewotCWt1bm1hcF9hdG9taWMoZW50cnksIEtNX1VTRVIxKTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqU0hNRU1fU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKQEAgLTI0NCwxNSArMTcwLDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoc2htZW1fc3dhcGxpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAKLXN0YXRpYyB2b2lkIHNobWVtX2ZyZWVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgcGFnZXMpCi17Ci0Jc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKLQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpbmZvLT51c2VkX2Jsb2NrcywgLXBhZ2VzKTsKLQkJaW5vZGUtPmlfYmxvY2tzIC09IHBhZ2VzKkJMT0NLU19QRVJfUEFHRTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc2htZW1fcmVzZXJ2ZV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7CkBAIC0yNzksNyArMTk2LDcgQEAKIH0KIAogLyoqCi0gKiBzaG1lbV9yZWNhbGNfaW5vZGUgLSByZWNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhbiBpbm9kZQorICogc2htZW1fcmVjYWxjX2lub2RlIC0gcmVjYWxjdWxhdGUgdGhlIGJsb2NrIHVzYWdlIG9mIGFuIGlub2RlCiAgKiBAaW5vZGU6IGlub2RlIHRvIHJlY2FsYwogICoKICAqIFdlIGhhdmUgdG8gY2FsY3VsYXRlIHRoZSBmcmVlIGJsb2NrcyBzaW5jZSB0aGUgbW0gY2FuIGRyb3AKQEAgLTI5Nyw0NzQgKzIxNCwyOTcgQEAKIAogCWZyZWVkID0gaW5mby0+YWxsb2NlZCAtIGluZm8tPnN3YXBwZWQgLSBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzOwogCWlmIChmcmVlZCA+IDApIHsKKwkJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKKwkJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykKKwkJCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpbmZvLT51c2VkX2Jsb2NrcywgLWZyZWVkKTsKIAkJaW5mby0+YWxsb2NlZCAtPSBmcmVlZDsKKwkJaW5vZGUtPmlfYmxvY2tzIC09IGZyZWVkICogQkxPQ0tTX1BFUl9QQUdFOwogCQlzaG1lbV91bmFjY3RfYmxvY2tzKGluZm8tPmZsYWdzLCBmcmVlZCk7Ci0JCXNobWVtX2ZyZWVfYmxvY2tzKGlub2RlLCBmcmVlZCk7CiAJfQogfQogCi0vKioKLSAqIHNobWVtX3N3cF9lbnRyeSAtIGZpbmQgdGhlIHN3YXAgdmVjdG9yIHBvc2l0aW9uIGluIHRoZSBpbmZvIHN0cnVjdHVyZQotICogQGluZm86ICBpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGlub2RlCi0gKiBAaW5kZXg6IGluZGV4IG9mIHRoZSBwYWdlIHRvIGZpbmQKLSAqIEBwYWdlOiAgb3B0aW9uYWwgcGFnZSB0byBhZGQgdG8gdGhlIHN0cnVjdHVyZS4gSGFzIHRvIGJlIHByZXNldCB0bwotICogICAgICAgICBhbGwgemVyb3MKLSAqCi0gKiBJZiB0aGVyZSBpcyBubyBzcGFjZSBhbGxvY2F0ZWQgeWV0IGl0IHdpbGwgcmV0dXJuIE5VTEwgd2hlbgotICogcGFnZSBpcyBOVUxMLCBlbHNlIGl0IHdpbGwgdXNlIHRoZSBwYWdlIGZvciB0aGUgbmVlZGVkIGJsb2NrLAotICogc2V0dGluZyBpdCB0byBOVUxMIG9uIHJldHVybiB0byBpbmRpY2F0ZSB0aGF0IGl0IGhhcyBiZWVuIHVzZWQuCi0gKgotICogVGhlIHN3YXAgdmVjdG9yIGlzIG9yZ2FuaXplZCB0aGUgZm9sbG93aW5nIHdheToKLSAqCi0gKiBUaGVyZSBhcmUgU0hNRU1fTlJfRElSRUNUIGVudHJpZXMgZGlyZWN0bHkgc3RvcmVkIGluIHRoZQotICogc2htZW1faW5vZGVfaW5mbyBzdHJ1Y3R1cmUuIFNvIHNtYWxsIGZpbGVzIGRvIG5vdCBuZWVkIGFuIGFkZGlvbmFsCi0gKiBhbGxvY2F0aW9uLgotICoKLSAqIEZvciBwYWdlcyB3aXRoIGluZGV4ID4gU0hNRU1fTlJfRElSRUNUIHRoZXJlIGlzIHRoZSBwb2ludGVyCi0gKiBpX2luZGlyZWN0IHdoaWNoIHBvaW50cyB0byBhIHBhZ2Ugd2hpY2ggaG9sZHMgaW4gdGhlIGZpcnN0IGhhbGYKLSAqIGRvdWJseSBpbmRpcmVjdCBibG9ja3MsIGluIHRoZSBzZWNvbmQgaGFsZiB0cmlwbGUgaW5kaXJlY3QgYmxvY2tzOgotICoKLSAqIEZvciBhbiBhcnRpZmljaWFsIEVOVFJJRVNfUEVSX1BBR0UgPSA0IHRoaXMgd291bGQgbGVhZCB0byB0aGUKLSAqIGZvbGxvd2luZyBsYXlvdXQgKGZvciBTSE1FTV9OUl9ESVJFQ1QgPT0gMTYpOgotICoKLSAqIGlfaW5kaXJlY3QgLT4gZGlyIC0tPiAxNi0xOQotICogCSAgICAgIHwJICAgICArLT4gMjAtMjMKLSAqIAkgICAgICB8Ci0gKiAJICAgICAgKy0tPmRpcjIgLS0+IDI0LTI3Ci0gKiAJICAgICAgfAkgICAgICAgKy0+IDI4LTMxCi0gKiAJICAgICAgfAkgICAgICAgKy0+IDMyLTM1Ci0gKiAJICAgICAgfAkgICAgICAgKy0+IDM2LTM5Ci0gKiAJICAgICAgfAotICogCSAgICAgICstLT5kaXIzIC0tPiA0MC00MwotICogCSAgICAgICAJICAgICAgICstPiA0NC00NwotICogCSAgICAgIAkgICAgICAgKy0+IDQ4LTUxCi0gKiAJICAgICAgCSAgICAgICArLT4gNTItNTUKKy8qCisgKiBSZXBsYWNlIGl0ZW0gZXhwZWN0ZWQgaW4gcmFkaXggdHJlZSBieSBhIG5ldyBpdGVtLCB3aGlsZSBob2xkaW5nIHRyZWUgbG9jay4KICAqLwotc3RhdGljIHN3cF9lbnRyeV90ICpzaG1lbV9zd3BfZW50cnkoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHN0cnVjdCBwYWdlICoqcGFnZSkKK3N0YXRpYyBpbnQgc2htZW1fcmFkaXhfdHJlZV9yZXBsYWNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJcGdvZmZfdCBpbmRleCwgdm9pZCAqZXhwZWN0ZWQsIHZvaWQgKnJlcGxhY2VtZW50KQogewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCXN0cnVjdCBwYWdlICoqZGlyOwotCXN0cnVjdCBwYWdlICpzdWJkaXI7CisJdm9pZCAqKnBzbG90OworCXZvaWQgKml0ZW0gPSBOVUxMOwogCi0JaWYgKGluZGV4IDwgU0hNRU1fTlJfRElSRUNUKSB7Ci0JCXNobWVtX3N3cF9iYWxhbmNlX3VubWFwKCk7Ci0JCXJldHVybiBpbmZvLT5pX2RpcmVjdCtpbmRleDsKLQl9Ci0JaWYgKCFpbmZvLT5pX2luZGlyZWN0KSB7Ci0JCWlmIChwYWdlKSB7Ci0JCQlpbmZvLT5pX2luZGlyZWN0ID0gKnBhZ2U7Ci0JCQkqcGFnZSA9IE5VTEw7CisJVk1fQlVHX09OKCFleHBlY3RlZCk7CisJcHNsb3QgPSByYWRpeF90cmVlX2xvb2t1cF9zbG90KCZtYXBwaW5nLT5wYWdlX3RyZWUsIGluZGV4KTsKKwlpZiAocHNsb3QpCisJCWl0ZW0gPSByYWRpeF90cmVlX2RlcmVmX3Nsb3RfcHJvdGVjdGVkKHBzbG90LAorCQkJCQkJCSZtYXBwaW5nLT50cmVlX2xvY2spOworCWlmIChpdGVtICE9IGV4cGVjdGVkKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlpZiAocmVwbGFjZW1lbnQpCisJCXJhZGl4X3RyZWVfcmVwbGFjZV9zbG90KHBzbG90LCByZXBsYWNlbWVudCk7CisJZWxzZQorCQlyYWRpeF90cmVlX2RlbGV0ZSgmbWFwcGluZy0+cGFnZV90cmVlLCBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IGVycm9yIGlmIGV4cGVjdGVkIGl0ZW0gaGFzIGdvbmUuCisgKi8KK3N0YXRpYyBpbnQgc2htZW1fYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICAgcGdvZmZfdCBpbmRleCwgZ2ZwX3QgZ2ZwLCB2b2lkICpleHBlY3RlZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlWTV9CVUdfT04oIVBhZ2VTd2FwQmFja2VkKHBhZ2UpKTsKKworCWlmICghZXhwZWN0ZWQpCisJCWVycm9yID0gcmFkaXhfdHJlZV9wcmVsb2FkKGdmcCAmIEdGUF9SRUNMQUlNX01BU0spOworCWlmICghZXJyb3IpIHsKKwkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisJCXBhZ2UtPm1hcHBpbmcgPSBtYXBwaW5nOworCQlwYWdlLT5pbmRleCA9IGluZGV4OworCisJCXNwaW5fbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJCWlmICghZXhwZWN0ZWQpCisJCQllcnJvciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZtYXBwaW5nLT5wYWdlX3RyZWUsCisJCQkJCQkJaW5kZXgsIHBhZ2UpOworCQllbHNlCisJCQllcnJvciA9IHNobWVtX3JhZGl4X3RyZWVfcmVwbGFjZShtYXBwaW5nLCBpbmRleCwKKwkJCQkJCQlleHBlY3RlZCwgcGFnZSk7CisJCWlmICghZXJyb3IpIHsKKwkJCW1hcHBpbmctPm5ycGFnZXMrKzsKKwkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKKwkJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9TSE1FTSk7CisJCQlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJCX0gZWxzZSB7CisJCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQotCQlyZXR1cm4gTlVMTDsJCQkvKiBuZWVkIGFub3RoZXIgcGFnZSAqLworCQlpZiAoIWV4cGVjdGVkKQorCQkJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwogCX0KKwlpZiAoZXJyb3IpCisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CiAKLQlpbmRleCAtPSBTSE1FTV9OUl9ESVJFQ1Q7Ci0Jb2Zmc2V0ID0gaW5kZXggJSBFTlRSSUVTX1BFUl9QQUdFOwotCWluZGV4IC89IEVOVFJJRVNfUEVSX1BBR0U7Ci0JZGlyID0gc2htZW1fZGlyX21hcChpbmZvLT5pX2luZGlyZWN0KTsKKy8qCisgKiBMaWtlIGRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUsIGJ1dCBzdWJzdGl0dXRlcyBzd2FwIGZvciBwYWdlLgorICovCitzdGF0aWMgdm9pZCBzaG1lbV9kZWxldGVfZnJvbV9wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpyYWRzd2FwKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlpbnQgZXJyb3I7CiAKLQlpZiAoaW5kZXggPj0gRU5UUklFU19QRVJfUEFHRS8yKSB7Ci0JCWluZGV4IC09IEVOVFJJRVNfUEVSX1BBR0UvMjsKLQkJZGlyICs9IEVOVFJJRVNfUEVSX1BBR0UvMiArIGluZGV4L0VOVFJJRVNfUEVSX1BBR0U7Ci0JCWluZGV4ICU9IEVOVFJJRVNfUEVSX1BBR0U7Ci0JCXN1YmRpciA9ICpkaXI7Ci0JCWlmICghc3ViZGlyKSB7Ci0JCQlpZiAocGFnZSkgewotCQkJCSpkaXIgPSAqcGFnZTsKLQkJCQkqcGFnZSA9IE5VTEw7CisJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwllcnJvciA9IHNobWVtX3JhZGl4X3RyZWVfcmVwbGFjZShtYXBwaW5nLCBwYWdlLT5pbmRleCwgcGFnZSwgcmFkc3dhcCk7CisJcGFnZS0+bWFwcGluZyA9IE5VTEw7CisJbWFwcGluZy0+bnJwYWdlcy0tOworCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX1BBR0VTKTsKKwlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfU0hNRU0pOworCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJQlVHX09OKGVycm9yKTsKK30KKworLyoKKyAqIExpa2UgZmluZF9nZXRfcGFnZXMsIGJ1dCBjb2xsZWN0aW5nIHN3YXAgZW50cmllcyBhcyB3ZWxsIGFzIHBhZ2VzLgorICovCitzdGF0aWMgdW5zaWduZWQgc2htZW1fZmluZF9nZXRfcGFnZXNfYW5kX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCXBnb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGludCBucl9wYWdlcywKKwkJCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgcGdvZmZfdCAqaW5kaWNlcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCXVuc2lnbmVkIGludCBucl9mb3VuZDsKKworCXJjdV9yZWFkX2xvY2soKTsKK3Jlc3RhcnQ6CisJbnJfZm91bmQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3Nsb3QoJm1hcHBpbmctPnBhZ2VfdHJlZSwKKwkJCQkodm9pZCAqKiopcGFnZXMsIGluZGljZXMsIHN0YXJ0LCBucl9wYWdlcyk7CisJcmV0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZm91bmQ7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKK3JlcGVhdDoKKwkJcGFnZSA9IHJhZGl4X3RyZWVfZGVyZWZfc2xvdCgodm9pZCAqKilwYWdlc1tpXSk7CisJCWlmICh1bmxpa2VseSghcGFnZSkpCisJCQljb250aW51ZTsKKwkJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uKHBhZ2UpKSB7CisJCQlpZiAocmFkaXhfdHJlZV9kZXJlZl9yZXRyeShwYWdlKSkKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQkvKgorCQkJICogT3RoZXJ3aXNlLCB3ZSBtdXN0IGJlIHN0b3JpbmcgYSBzd2FwIGVudHJ5CisJCQkgKiBoZXJlIGFzIGFuIGV4Y2VwdGlvbmFsIGVudHJ5OiBzbyByZXR1cm4gaXQKKwkJCSAqIHdpdGhvdXQgYXR0ZW1wdGluZyB0byByYWlzZSBwYWdlIGNvdW50LgorCQkJICovCisJCQlnb3RvIGV4cG9ydDsKKwkJfQorCQlpZiAoIXBhZ2VfY2FjaGVfZ2V0X3NwZWN1bGF0aXZlKHBhZ2UpKQorCQkJZ290byByZXBlYXQ7CisKKwkJLyogSGFzIHRoZSBwYWdlIG1vdmVkPyAqLworCQlpZiAodW5saWtlbHkocGFnZSAhPSAqKCh2b2lkICoqKXBhZ2VzW2ldKSkpIHsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CitleHBvcnQ6CisJCWluZGljZXNbcmV0XSA9IGluZGljZXNbaV07CisJCXBhZ2VzW3JldF0gPSBwYWdlOworCQlyZXQrKzsKKwl9CisJaWYgKHVubGlrZWx5KCFyZXQgJiYgbnJfZm91bmQpKQorCQlnb3RvIHJlc3RhcnQ7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlbW92ZSBzd2FwIGVudHJ5IGZyb20gcmFkaXggdHJlZSwgZnJlZSB0aGUgc3dhcCBhbmQgaXRzIHBhZ2UgY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgc2htZW1fZnJlZV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJICAgcGdvZmZfdCBpbmRleCwgdm9pZCAqcmFkc3dhcCkKK3sKKwlpbnQgZXJyb3I7CisKKwlzcGluX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCWVycm9yID0gc2htZW1fcmFkaXhfdHJlZV9yZXBsYWNlKG1hcHBpbmcsIGluZGV4LCByYWRzd2FwLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJaWYgKCFlcnJvcikKKwkJZnJlZV9zd2FwX2FuZF9jYWNoZShyYWRpeF90b19zd3BfZW50cnkocmFkc3dhcCkpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFBhZ2V2ZWMgbWF5IGNvbnRhaW4gc3dhcCBlbnRyaWVzLCBzbyBzaHVmZmxlIHVwIHBhZ2VzIGJlZm9yZSByZWxlYXNpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHNobWVtX3BhZ2V2ZWNfcmVsZWFzZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CisJCWlmICghcmFkaXhfdHJlZV9leGNlcHRpb25hbF9lbnRyeShwYWdlKSkKKwkJCXB2ZWMtPnBhZ2VzW2orK10gPSBwYWdlOworCX0KKwlwdmVjLT5uciA9IGo7CisJcGFnZXZlY19yZWxlYXNlKHB2ZWMpOworfQorCisvKgorICogUmVtb3ZlIHJhbmdlIG9mIHBhZ2VzIGFuZCBzd2FwIGVudHJpZXMgZnJvbSByYWRpeCB0cmVlLCBhbmQgZnJlZSB0aGVtLgorICovCit2b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOworCXBnb2ZmX3Qgc3RhcnQgPSAobHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwl1bnNpZ25lZCBwYXJ0aWFsID0gbHN0YXJ0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXBnb2ZmX3QgZW5kID0gKGxlbmQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlwZ29mZl90IGluZGljZXNbUEFHRVZFQ19TSVpFXTsKKwlsb25nIG5yX3N3YXBzX2ZyZWVkID0gMDsKKwlwZ29mZl90IGluZGV4OworCWludCBpOworCisJQlVHX09OKChsZW5kICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKSAhPSAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpOworCisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwlpbmRleCA9IHN0YXJ0OworCXdoaWxlIChpbmRleCA8PSBlbmQpIHsKKwkJcHZlYy5uciA9IHNobWVtX2ZpbmRfZ2V0X3BhZ2VzX2FuZF9zd2FwKG1hcHBpbmcsIGluZGV4LAorCQkJbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClQQUdFVkVDX1NJWkUgLSAxKSArIDEsCisJCQkJCQkJcHZlYy5wYWdlcywgaW5kaWNlcyk7CisJCWlmICghcHZlYy5ucikKKwkJCWJyZWFrOworCQltZW1fY2dyb3VwX3VuY2hhcmdlX3N0YXJ0KCk7CisJCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KCZwdmVjKTsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CisKKwkJCWluZGV4ID0gaW5kaWNlc1tpXTsKKwkJCWlmIChpbmRleCA+IGVuZCkKKwkJCQlicmVhazsKKworCQkJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uYWxfZW50cnkocGFnZSkpIHsKKwkJCQlucl9zd2Fwc19mcmVlZCArPSAhc2htZW1fZnJlZV9zd2FwKG1hcHBpbmcsCisJCQkJCQkJCWluZGV4LCBwYWdlKTsKKwkJCQljb250aW51ZTsKIAkJCX0KLQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwotCQkJcmV0dXJuIE5VTEw7CQkvKiBuZWVkIGFub3RoZXIgcGFnZSAqLworCisJCQlpZiAoIXRyeWxvY2tfcGFnZShwYWdlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwYWdlLT5tYXBwaW5nID09IG1hcHBpbmcpIHsKKwkJCQlWTV9CVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CisJCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKKwkJCX0KKwkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9Ci0JCXNobWVtX2Rpcl91bm1hcChkaXIpOwotCQlkaXIgPSBzaG1lbV9kaXJfbWFwKHN1YmRpcik7CisJCXNobWVtX3BhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKCk7CisJCWNvbmRfcmVzY2hlZCgpOworCQlpbmRleCsrOwogCX0KIAotCWRpciArPSBpbmRleDsKLQlzdWJkaXIgPSAqZGlyOwotCWlmICghc3ViZGlyKSB7Ci0JCWlmICghcGFnZSB8fCAhKHN1YmRpciA9ICpwYWdlKSkgewotCQkJc2htZW1fZGlyX3VubWFwKGRpcik7Ci0JCQlyZXR1cm4gTlVMTDsJCS8qIG5lZWQgYSBwYWdlICovCisJaWYgKHBhcnRpYWwpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCQlzaG1lbV9nZXRwYWdlKGlub2RlLCBzdGFydCAtIDEsICZwYWdlLCBTR1BfUkVBRCwgTlVMTCk7CisJCWlmIChwYWdlKSB7CisJCQl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBwYXJ0aWFsLCBQQUdFX0NBQ0hFX1NJWkUpOworCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJfQotCQkqZGlyID0gc3ViZGlyOwotCQkqcGFnZSA9IE5VTEw7CiAJfQotCXNobWVtX2Rpcl91bm1hcChkaXIpOwotCXJldHVybiBzaG1lbV9zd3BfbWFwKHN1YmRpcikgKyBvZmZzZXQ7Ci19CiAKLXN0YXRpYyB2b2lkIHNobWVtX3N3cF9zZXQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHN3cF9lbnRyeV90ICplbnRyeSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLQlsb25nIGluY2RlYyA9IHZhbHVlPyAxOiAtMTsKLQotCWVudHJ5LT52YWwgPSB2YWx1ZTsKLQlpbmZvLT5zd2FwcGVkICs9IGluY2RlYzsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpKGVudHJ5IC0gaW5mby0+aV9kaXJlY3QpID49IFNITUVNX05SX0RJUkVDVCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGttYXBfYXRvbWljX3RvX3BhZ2UoZW50cnkpOwotCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSArIGluY2RlYyk7Ci0JfQotfQotCi0vKioKLSAqIHNobWVtX3N3cF9hbGxvYyAtIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIHN3YXAgZW50cnkgZm9yIHRoZSBwYWdlLgotICogQGluZm86CWluZm8gc3RydWN0dXJlIGZvciB0aGUgaW5vZGUKLSAqIEBpbmRleDoJaW5kZXggb2YgdGhlIHBhZ2UgdG8gZmluZAotICogQHNncDoJY2hlY2sgYW5kIHJlY2hlY2sgaV9zaXplPyBza2lwIGFsbG9jYXRpb24/Ci0gKiBAZ2ZwOglnZnAgbWFzayB0byB1c2UgZm9yIGFueSBwYWdlIGFsbG9jYXRpb24KLSAqCi0gKiBJZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QsIGFsbG9jYXRlIGl0LgotICovCi1zdGF0aWMgc3dwX2VudHJ5X3QgKnNobWVtX3N3cF9hbGxvYyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnApCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9ICZpbmZvLT52ZnNfaW5vZGU7Ci0Jc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0Jc3dwX2VudHJ5X3QgKmVudHJ5OwotCi0JaWYgKHNncCAhPSBTR1BfV1JJVEUgJiYKLQkgICAgKChsb2ZmX3QpIGluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpID49IGlfc2l6ZV9yZWFkKGlub2RlKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQl3aGlsZSAoIShlbnRyeSA9IHNobWVtX3N3cF9lbnRyeShpbmZvLCBpbmRleCwgJnBhZ2UpKSkgewotCQlpZiAoc2dwID09IFNHUF9SRUFEKQotCQkJcmV0dXJuIHNobWVtX3N3cF9tYXAoWkVST19QQUdFKDApKTsKLQkJLyoKLQkJICogVGVzdCB1c2VkX2Jsb2NrcyBhZ2FpbnN0IDEgbGVzcyBtYXhfYmxvY2tzLCBzaW5jZSB3ZSBoYXZlIDEgZGF0YQotCQkgKiBwYWdlIChhbmQgcGVyaGFwcyBpbmRpcmVjdCBpbmRleCBwYWdlcykgeWV0IHRvIGFsbG9jYXRlOgotCQkgKiBhIHdhc3RlIHRvIGFsbG9jYXRlIGluZGV4IGlmIHdlIGNhbm5vdCBhbGxvY2F0ZSBkYXRhLgotCQkgKi8KLQkJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykgewotCQkJaWYgKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsCi0JCQkJCQlzYmluZm8tPm1heF9ibG9ja3MgLSAxKSA+PSAwKQotCQkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwotCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKLQkJCWlub2RlLT5pX2Jsb2NrcyArPSBCTE9DS1NfUEVSX1BBR0U7CisJaW5kZXggPSBzdGFydDsKKwlmb3IgKCA7IDsgKSB7CisJCWNvbmRfcmVzY2hlZCgpOworCQlwdmVjLm5yID0gc2htZW1fZmluZF9nZXRfcGFnZXNfYW5kX3N3YXAobWFwcGluZywgaW5kZXgsCisJCQltaW4oZW5kIC0gaW5kZXgsIChwZ29mZl90KVBBR0VWRUNfU0laRSAtIDEpICsgMSwKKwkJCQkJCQlwdmVjLnBhZ2VzLCBpbmRpY2VzKTsKKwkJaWYgKCFwdmVjLm5yKSB7CisJCQlpZiAoaW5kZXggPT0gc3RhcnQpCisJCQkJYnJlYWs7CisJCQlpbmRleCA9IHN0YXJ0OworCQkJY29udGludWU7CiAJCX0KLQotCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCXBhZ2UgPSBzaG1lbV9kaXJfYWxsb2MoZ2ZwKTsKLQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQotCQlpZiAoIXBhZ2UpIHsKLQkJCXNobWVtX2ZyZWVfYmxvY2tzKGlub2RlLCAxKTsKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCQl9Ci0JCWlmIChzZ3AgIT0gU0dQX1dSSVRFICYmCi0JCSAgICAoKGxvZmZfdCkgaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCQllbnRyeSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWlmIChpbmRleCA9PSBzdGFydCAmJiBpbmRpY2VzWzBdID4gZW5kKSB7CisJCQlzaG1lbV9wYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGluZm8tPm5leHRfaW5kZXggPD0gaW5kZXgpCi0JCQlpbmZvLT5uZXh0X2luZGV4ID0gaW5kZXggKyAxOwotCX0KLQlpZiAocGFnZSkgewotCQkvKiBhbm90aGVyIHRhc2sgZ2F2ZSBpdHMgcGFnZSwgb3IgdHJ1bmNhdGVkIHRoZSBmaWxlICovCi0JCXNobWVtX2ZyZWVfYmxvY2tzKGlub2RlLCAxKTsKLQkJc2htZW1fZGlyX2ZyZWUocGFnZSk7Ci0JfQotCWlmIChpbmZvLT5uZXh0X2luZGV4IDw9IGluZGV4ICYmICFJU19FUlIoZW50cnkpKQotCQlpbmZvLT5uZXh0X2luZGV4ID0gaW5kZXggKyAxOwotCXJldHVybiBlbnRyeTsKLX0KKwkJbWVtX2Nncm91cF91bmNoYXJnZV9zdGFydCgpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwogCi0vKioKLSAqIHNobWVtX2ZyZWVfc3dwIC0gZnJlZSBzb21lIHN3YXAgZW50cmllcyBpbiBhIGRpcmVjdG9yeQotICogQGRpcjogICAgICAgIHBvaW50ZXIgdG8gdGhlIGRpcmVjdG9yeQotICogQGVkaXI6ICAgICAgIHBvaW50ZXIgYWZ0ZXIgbGFzdCBlbnRyeSBvZiB0aGUgZGlyZWN0b3J5Ci0gKiBAcHVuY2hfbG9jazogcG9pbnRlciB0byBzcGlubG9jayB3aGVuIG5lZWRlZCBmb3IgdGhlIGhvbGVwdW5jaCBjYXNlCi0gKi8KLXN0YXRpYyBpbnQgc2htZW1fZnJlZV9zd3Aoc3dwX2VudHJ5X3QgKmRpciwgc3dwX2VudHJ5X3QgKmVkaXIsCi0JCQkJCQlzcGlubG9ja190ICpwdW5jaF9sb2NrKQotewotCXNwaW5sb2NrX3QgKnB1bmNoX3VubG9jayA9IE5VTEw7Ci0Jc3dwX2VudHJ5X3QgKnB0cjsKLQlpbnQgZnJlZWQgPSAwOworCQkJaW5kZXggPSBpbmRpY2VzW2ldOworCQkJaWYgKGluZGV4ID4gZW5kKQorCQkJCWJyZWFrOwogCi0JZm9yIChwdHIgPSBkaXI7IHB0ciA8IGVkaXI7IHB0cisrKSB7Ci0JCWlmIChwdHItPnZhbCkgewotCQkJaWYgKHVubGlrZWx5KHB1bmNoX2xvY2spKSB7Ci0JCQkJcHVuY2hfdW5sb2NrID0gcHVuY2hfbG9jazsKLQkJCQlwdW5jaF9sb2NrID0gTlVMTDsKLQkJCQlzcGluX2xvY2socHVuY2hfdW5sb2NrKTsKLQkJCQlpZiAoIXB0ci0+dmFsKQotCQkJCQljb250aW51ZTsKKwkJCWlmIChyYWRpeF90cmVlX2V4Y2VwdGlvbmFsX2VudHJ5KHBhZ2UpKSB7CisJCQkJbnJfc3dhcHNfZnJlZWQgKz0gIXNobWVtX2ZyZWVfc3dhcChtYXBwaW5nLAorCQkJCQkJCQlpbmRleCwgcGFnZSk7CisJCQkJY29udGludWU7CiAJCQl9Ci0JCQlmcmVlX3N3YXBfYW5kX2NhY2hlKCpwdHIpOwotCQkJKnB0ciA9IChzd3BfZW50cnlfdCl7MH07Ci0JCQlmcmVlZCsrOwotCQl9Ci0JfQotCWlmIChwdW5jaF91bmxvY2spCi0JCXNwaW5fdW5sb2NrKHB1bmNoX3VubG9jayk7Ci0JcmV0dXJuIGZyZWVkOwotfQogCi1zdGF0aWMgaW50IHNobWVtX21hcF9hbmRfZnJlZV9zd3Aoc3RydWN0IHBhZ2UgKnN1YmRpciwgaW50IG9mZnNldCwKLQkJaW50IGxpbWl0LCBzdHJ1Y3QgcGFnZSAqKipkaXIsIHNwaW5sb2NrX3QgKnB1bmNoX2xvY2spCi17Ci0Jc3dwX2VudHJ5X3QgKnB0cjsKLQlpbnQgZnJlZWQgPSAwOwotCi0JcHRyID0gc2htZW1fc3dwX21hcChzdWJkaXIpOwotCWZvciAoOyBvZmZzZXQgPCBsaW1pdDsgb2Zmc2V0ICs9IExBVEVOQ1lfTElNSVQpIHsKLQkJaW50IHNpemUgPSBsaW1pdCAtIG9mZnNldDsKLQkJaWYgKHNpemUgPiBMQVRFTkNZX0xJTUlUKQotCQkJc2l6ZSA9IExBVEVOQ1lfTElNSVQ7Ci0JCWZyZWVkICs9IHNobWVtX2ZyZWVfc3dwKHB0citvZmZzZXQsIHB0citvZmZzZXQrc2l6ZSwKLQkJCQkJCQlwdW5jaF9sb2NrKTsKLQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKLQkJCWlmICgqZGlyKSB7Ci0JCQkJc2htZW1fZGlyX3VubWFwKCpkaXIpOwotCQkJCSpkaXIgPSBOVUxMOworCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJaWYgKHBhZ2UtPm1hcHBpbmcgPT0gbWFwcGluZykgeworCQkJCVZNX0JVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKKwkJCQl0cnVuY2F0ZV9pbm9kZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOwogCQkJfQotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlwdHIgPSBzaG1lbV9zd3BfbWFwKHN1YmRpcik7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQotCX0KLQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKLQlyZXR1cm4gZnJlZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNobWVtX2ZyZWVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgZnJlZWQgPSAwOwotCi0JZG8gewotCQlwYWdlID0gY29udGFpbmVyX29mKG5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJc2htZW1fZGlyX2ZyZWUocGFnZSk7Ci0JCWZyZWVkKys7Ci0JCWlmIChmcmVlZCA+PSBMQVRFTkNZX0xJTUlUKSB7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJCWZyZWVkID0gMDsKLQkJfQotCX0gd2hpbGUgKG5leHQpOwotfQotCi12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKLXsKLQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwotCXVuc2lnbmVkIGxvbmcgaWR4OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGxpbWl0OwotCXVuc2lnbmVkIGxvbmcgc3RhZ2U7Ci0JdW5zaWduZWQgbG9uZyBkaXJvZmY7Ci0Jc3RydWN0IHBhZ2UgKipkaXI7Ci0Jc3RydWN0IHBhZ2UgKnRvcGRpcjsKLQlzdHJ1Y3QgcGFnZSAqbWlkZGlyOwotCXN0cnVjdCBwYWdlICpzdWJkaXI7Ci0Jc3dwX2VudHJ5X3QgKnB0cjsKLQlMSVNUX0hFQUQocGFnZXNfdG9fZnJlZSk7Ci0JbG9uZyBucl9wYWdlc190b19mcmVlID0gMDsKLQlsb25nIG5yX3N3YXBzX2ZyZWVkID0gMDsKLQlpbnQgb2Zmc2V0OwotCWludCBmcmVlZDsKLQlpbnQgcHVuY2hfaG9sZTsKLQlzcGlubG9ja190ICpuZWVkc19sb2NrOwotCXNwaW5sb2NrX3QgKnB1bmNoX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyB1cHBlcl9saW1pdDsKLQotCXRydW5jYXRlX2lub2RlX3BhZ2VzX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBlbmQpOwotCi0JaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKLQlpZHggPSAoc3RhcnQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCWlmIChpZHggPj0gaW5mby0+bmV4dF9pbmRleCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQlpbmZvLT5mbGFncyB8PSBTSE1FTV9UUlVOQ0FURTsKLQlpZiAobGlrZWx5KGVuZCA9PSAobG9mZl90KSAtMSkpIHsKLQkJbGltaXQgPSBpbmZvLT5uZXh0X2luZGV4OwotCQl1cHBlcl9saW1pdCA9IFNITUVNX01BWF9JTkRFWDsKLQkJaW5mby0+bmV4dF9pbmRleCA9IGlkeDsKLQkJbmVlZHNfbG9jayA9IE5VTEw7Ci0JCXB1bmNoX2hvbGUgPSAwOwotCX0gZWxzZSB7Ci0JCWlmIChlbmQgKyAxID49IGlub2RlLT5pX3NpemUpIHsJLyogd2UgbWF5IGZyZWUgYSBsaXR0bGUgbW9yZSAqLwotCQkJbGltaXQgPSAoaW5vZGUtPmlfc2l6ZSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+Ci0JCQkJCQkJUEFHRV9DQUNIRV9TSElGVDsKLQkJCXVwcGVyX2xpbWl0ID0gU0hNRU1fTUFYX0lOREVYOwotCQl9IGVsc2UgewotCQkJbGltaXQgPSAoZW5kICsgMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQkJCXVwcGVyX2xpbWl0ID0gbGltaXQ7Ci0JCX0KLQkJbmVlZHNfbG9jayA9ICZpbmZvLT5sb2NrOwotCQlwdW5jaF9ob2xlID0gMTsKLQl9Ci0KLQl0b3BkaXIgPSBpbmZvLT5pX2luZGlyZWN0OwotCWlmICh0b3BkaXIgJiYgaWR4IDw9IFNITUVNX05SX0RJUkVDVCAmJiAhcHVuY2hfaG9sZSkgewotCQlpbmZvLT5pX2luZGlyZWN0ID0gTlVMTDsKLQkJbnJfcGFnZXNfdG9fZnJlZSsrOwotCQlsaXN0X2FkZCgmdG9wZGlyLT5scnUsICZwYWdlc190b19mcmVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCi0JaWYgKGluZm8tPnN3YXBwZWQgJiYgaWR4IDwgU0hNRU1fTlJfRElSRUNUKSB7Ci0JCXB0ciA9IGluZm8tPmlfZGlyZWN0OwotCQlzaXplID0gbGltaXQ7Ci0JCWlmIChzaXplID4gU0hNRU1fTlJfRElSRUNUKQotCQkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKLQkJbnJfc3dhcHNfZnJlZWQgPSBzaG1lbV9mcmVlX3N3cChwdHIraWR4LCBwdHIrc2l6ZSwgbmVlZHNfbG9jayk7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgbm8gaW5kaXJlY3QgYmxvY2tzIG9yIHdlIGFyZSBwdW5jaGluZyBhIGhvbGUKLQkgKiBiZWxvdyBpbmRpcmVjdCBibG9ja3MsIG5vdGhpbmcgdG8gYmUgZG9uZS4KLQkgKi8KLQlpZiAoIXRvcGRpciB8fCBsaW1pdCA8PSBTSE1FTV9OUl9ESVJFQ1QpCi0JCWdvdG8gZG9uZTI7Ci0KLQkvKgotCSAqIFRoZSB0cnVuY2F0aW9uIGNhc2UgaGFzIGFscmVhZHkgZHJvcHBlZCBpbmZvLT5sb2NrLCBhbmQgd2UncmUgc2FmZQotCSAqIGJlY2F1c2UgaV9zaXplIGFuZCBuZXh0X2luZGV4IGhhdmUgYWxyZWFkeSBiZWVuIGxvd2VyZWQsIHByZXZlbnRpbmcKLQkgKiBhY2Nlc3MgYmV5b25kLiAgQnV0IGluIHRoZSBwdW5jaF9ob2xlIGNhc2UsIHdlIHN0aWxsIG5lZWQgdG8gdGFrZQotCSAqIHRoZSBsb2NrIHdoZW4gdXBkYXRpbmcgdGhlIHN3YXAgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlCi0JICogcmFjaW5nIGFjY2Vzc2VzIGJ5IHNobWVtX2dldHBhZ2UoU0dQX0NBQ0hFKSwgc2htZW1fdW51c2VfaW5vZGUgb3IKLQkgKiBzaG1lbV93cml0ZXBhZ2UuICBIb3dldmVyLCB3aGVuZXZlciB3ZSBmaW5kIHdlIGNhbiByZW1vdmUgYSB3aG9sZQotCSAqIGRpcmVjdG9yeSBwYWdlIChub3QgYXQgdGhlIG1pc2FsaWduZWQgc3RhcnQgb3IgZW5kIG9mIHRoZSByYW5nZSksCi0JICogd2UgZmlyc3QgTlVMTGlmeSBpdHMgcG9pbnRlciBpbiB0aGUgbGV2ZWwgYWJvdmUsIGFuZCB0aGVuIGhhdmUgbm8KLQkgKiBuZWVkIHRvIHRha2UgdGhlIGxvY2sgd2hlbiB1cGRhdGluZyBpdHMgY29udGVudHM6IG5lZWRzX2xvY2sgYW5kCi0JICogcHVuY2hfbG9jayAoZWl0aGVyIHBvaW50aW5nIHRvIGluZm8tPmxvY2sgb3IgTlVMTCkgbWFuYWdlIHRoaXMuCi0JICovCi0KLQl1cHBlcl9saW1pdCAtPSBTSE1FTV9OUl9ESVJFQ1Q7Ci0JbGltaXQgLT0gU0hNRU1fTlJfRElSRUNUOwotCWlkeCA9IChpZHggPiBTSE1FTV9OUl9ESVJFQ1QpPyAoaWR4IC0gU0hNRU1fTlJfRElSRUNUKTogMDsKLQlvZmZzZXQgPSBpZHggJSBFTlRSSUVTX1BFUl9QQUdFOwotCWlkeCAtPSBvZmZzZXQ7Ci0KLQlkaXIgPSBzaG1lbV9kaXJfbWFwKHRvcGRpcik7Ci0Jc3RhZ2UgPSBFTlRSSUVTX1BFUl9QQUdFUEFHRS8yOwotCWlmIChpZHggPCBFTlRSSUVTX1BFUl9QQUdFUEFHRS8yKSB7Ci0JCW1pZGRpciA9IHRvcGRpcjsKLQkJZGlyb2ZmID0gaWR4L0VOVFJJRVNfUEVSX1BBR0U7Ci0JfSBlbHNlIHsKLQkJZGlyICs9IEVOVFJJRVNfUEVSX1BBR0UvMjsKLQkJZGlyICs9IChpZHggLSBFTlRSSUVTX1BFUl9QQUdFUEFHRS8yKS9FTlRSSUVTX1BFUl9QQUdFUEFHRTsKLQkJd2hpbGUgKHN0YWdlIDw9IGlkeCkKLQkJCXN0YWdlICs9IEVOVFJJRVNfUEVSX1BBR0VQQUdFOwotCQltaWRkaXIgPSAqZGlyOwotCQlpZiAoKmRpcikgewotCQkJZGlyb2ZmID0gKChpZHggLSBFTlRSSUVTX1BFUl9QQUdFUEFHRS8yKSAlCi0JCQkJRU5UUklFU19QRVJfUEFHRVBBR0UpIC8gRU5UUklFU19QRVJfUEFHRTsKLQkJCWlmICghZGlyb2ZmICYmICFvZmZzZXQgJiYgdXBwZXJfbGltaXQgPj0gc3RhZ2UpIHsKLQkJCQlpZiAobmVlZHNfbG9jaykgewotCQkJCQlzcGluX2xvY2sobmVlZHNfbG9jayk7Ci0JCQkJCSpkaXIgPSBOVUxMOwotCQkJCQlzcGluX3VubG9jayhuZWVkc19sb2NrKTsKLQkJCQkJbmVlZHNfbG9jayA9IE5VTEw7Ci0JCQkJfSBlbHNlCi0JCQkJCSpkaXIgPSBOVUxMOwotCQkJCW5yX3BhZ2VzX3RvX2ZyZWUrKzsKLQkJCQlsaXN0X2FkZCgmbWlkZGlyLT5scnUsICZwYWdlc190b19mcmVlKTsKLQkJCX0KLQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwotCQkJZGlyID0gc2htZW1fZGlyX21hcChtaWRkaXIpOwotCQl9IGVsc2UgewotCQkJZGlyb2ZmID0gMDsKLQkJCW9mZnNldCA9IDA7Ci0JCQlpZHggPSBzdGFnZTsKLQkJfQotCX0KLQotCWZvciAoOyBpZHggPCBsaW1pdDsgaWR4ICs9IEVOVFJJRVNfUEVSX1BBR0UsIGRpcm9mZisrKSB7Ci0JCWlmICh1bmxpa2VseShpZHggPT0gc3RhZ2UpKSB7Ci0JCQlzaG1lbV9kaXJfdW5tYXAoZGlyKTsKLQkJCWRpciA9IHNobWVtX2Rpcl9tYXAodG9wZGlyKSArCi0JCQkgICAgRU5UUklFU19QRVJfUEFHRS8yICsgaWR4L0VOVFJJRVNfUEVSX1BBR0VQQUdFOwotCQkJd2hpbGUgKCEqZGlyKSB7Ci0JCQkJZGlyKys7Ci0JCQkJaWR4ICs9IEVOVFJJRVNfUEVSX1BBR0VQQUdFOwotCQkJCWlmIChpZHggPj0gbGltaXQpCi0JCQkJCWdvdG8gZG9uZTE7Ci0JCQl9Ci0JCQlzdGFnZSA9IGlkeCArIEVOVFJJRVNfUEVSX1BBR0VQQUdFOwotCQkJbWlkZGlyID0gKmRpcjsKLQkJCWlmIChwdW5jaF9ob2xlKQotCQkJCW5lZWRzX2xvY2sgPSAmaW5mby0+bG9jazsKLQkJCWlmICh1cHBlcl9saW1pdCA+PSBzdGFnZSkgewotCQkJCWlmIChuZWVkc19sb2NrKSB7Ci0JCQkJCXNwaW5fbG9jayhuZWVkc19sb2NrKTsKLQkJCQkJKmRpciA9IE5VTEw7Ci0JCQkJCXNwaW5fdW5sb2NrKG5lZWRzX2xvY2spOwotCQkJCQluZWVkc19sb2NrID0gTlVMTDsKLQkJCQl9IGVsc2UKLQkJCQkJKmRpciA9IE5VTEw7Ci0JCQkJbnJfcGFnZXNfdG9fZnJlZSsrOwotCQkJCWxpc3RfYWRkKCZtaWRkaXItPmxydSwgJnBhZ2VzX3RvX2ZyZWUpOwotCQkJfQotCQkJc2htZW1fZGlyX3VubWFwKGRpcik7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJCWRpciA9IHNobWVtX2Rpcl9tYXAobWlkZGlyKTsKLQkJCWRpcm9mZiA9IDA7Ci0JCX0KLQkJcHVuY2hfbG9jayA9IG5lZWRzX2xvY2s7Ci0JCXN1YmRpciA9IGRpcltkaXJvZmZdOwotCQlpZiAoc3ViZGlyICYmICFvZmZzZXQgJiYgdXBwZXJfbGltaXQtaWR4ID49IEVOVFJJRVNfUEVSX1BBR0UpIHsKLQkJCWlmIChuZWVkc19sb2NrKSB7Ci0JCQkJc3Bpbl9sb2NrKG5lZWRzX2xvY2spOwotCQkJCWRpcltkaXJvZmZdID0gTlVMTDsKLQkJCQlzcGluX3VubG9jayhuZWVkc19sb2NrKTsKLQkJCQlwdW5jaF9sb2NrID0gTlVMTDsKLQkJCX0gZWxzZQotCQkJCWRpcltkaXJvZmZdID0gTlVMTDsKLQkJCW5yX3BhZ2VzX3RvX2ZyZWUrKzsKLQkJCWxpc3RfYWRkKCZzdWJkaXItPmxydSwgJnBhZ2VzX3RvX2ZyZWUpOwotCQl9Ci0JCWlmIChzdWJkaXIgJiYgcGFnZV9wcml2YXRlKHN1YmRpcikgLyogaGFzIHN3YXAgZW50cmllcyAqLykgewotCQkJc2l6ZSA9IGxpbWl0IC0gaWR4OwotCQkJaWYgKHNpemUgPiBFTlRSSUVTX1BFUl9QQUdFKQotCQkJCXNpemUgPSBFTlRSSUVTX1BFUl9QQUdFOwotCQkJZnJlZWQgPSBzaG1lbV9tYXBfYW5kX2ZyZWVfc3dwKHN1YmRpciwKLQkJCQkJb2Zmc2V0LCBzaXplLCAmZGlyLCBwdW5jaF9sb2NrKTsKLQkJCWlmICghZGlyKQotCQkJCWRpciA9IHNobWVtX2Rpcl9tYXAobWlkZGlyKTsKLQkJCW5yX3N3YXBzX2ZyZWVkICs9IGZyZWVkOwotCQkJaWYgKG9mZnNldCB8fCBwdW5jaF9sb2NrKSB7Ci0JCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQlzZXRfcGFnZV9wcml2YXRlKHN1YmRpciwKLQkJCQkJcGFnZV9wcml2YXRlKHN1YmRpcikgLSBmcmVlZCk7Ci0JCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQkJfSBlbHNlCi0JCQkJQlVHX09OKHBhZ2VfcHJpdmF0ZShzdWJkaXIpICE9IGZyZWVkKTsKLQkJfQotCQlvZmZzZXQgPSAwOwotCX0KLWRvbmUxOgotCXNobWVtX2Rpcl91bm1hcChkaXIpOwotZG9uZTI6Ci0JaWYgKGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgJiYgKGluZm8tPmZsYWdzICYgU0hNRU1fUEFHRUlOKSkgewotCQkvKgotCQkgKiBDYWxsIHRydW5jYXRlX2lub2RlX3BhZ2VzIGFnYWluOiByYWNpbmcgc2htZW1fdW51c2VfaW5vZGUKLQkJICogbWF5IGhhdmUgc3dpenpsZWQgYSBwYWdlIGluIGZyb20gc3dhcCBzaW5jZQotCQkgKiB0cnVuY2F0ZV9wYWdlY2FjaGUgb3IgZ2VuZXJpY19kZWxldGVfaW5vZGUgZGlkIGl0LCBiZWZvcmUgd2UKLQkJICogbG93ZXJlZCBuZXh0X2luZGV4LiAgQWxzbywgdGhvdWdoIHNobWVtX2dldHBhZ2UgY2hlY2tzCi0JCSAqIGlfc2l6ZSBiZWZvcmUgYWRkaW5nIHRvIGNhY2hlLCBubyByZWNoZWNrIGFmdGVyOiBzbyBmaXggdGhlCi0JCSAqIG5hcnJvdyB3aW5kb3cgdGhlcmUgdG9vLgotCQkgKi8KLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CisJCXNobWVtX3BhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfZW5kKCk7CisJCWluZGV4Kys7CiAJfQogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQlpbmZvLT5mbGFncyAmPSB+U0hNRU1fVFJVTkNBVEU7CiAJaW5mby0+c3dhcHBlZCAtPSBucl9zd2Fwc19mcmVlZDsKLQlpZiAobnJfcGFnZXNfdG9fZnJlZSkKLQkJc2htZW1fZnJlZV9ibG9ja3MoaW5vZGUsIG5yX3BhZ2VzX3RvX2ZyZWUpOwogCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCi0JLyoKLQkgKiBFbXB0eSBzd2FwIHZlY3RvciBkaXJlY3RvcnkgcGFnZXMgdG8gYmUgZnJlZWQ/Ci0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZwYWdlc190b19mcmVlKSkgewotCQlwYWdlc190b19mcmVlLnByZXYtPm5leHQgPSBOVUxMOwotCQlzaG1lbV9mcmVlX3BhZ2VzKHBhZ2VzX3RvX2ZyZWUubmV4dCk7Ci0JfQorCWlub2RlLT5pX2N0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzaG1lbV90cnVuY2F0ZV9yYW5nZSk7CiAKQEAgLTc4MCwzNyArNTIwLDcgQEAKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpKSB7CiAJCWxvZmZfdCBvbGRzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAkJbG9mZl90IG5ld3NpemUgPSBhdHRyLT5pYV9zaXplOwotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAKLQkJaWYgKG5ld3NpemUgPCBvbGRzaXplKSB7Ci0JCQkvKgotCQkJICogSWYgdHJ1bmNhdGluZyBkb3duIHRvIGEgcGFydGlhbCBwYWdlLCB0aGVuCi0JCQkgKiBpZiB0aGF0IHBhZ2UgaXMgYWxyZWFkeSBhbGxvY2F0ZWQsIGhvbGQgaXQKLQkJCSAqIGluIG1lbW9yeSB1bnRpbCB0aGUgdHJ1bmNhdGlvbiBpcyBvdmVyLCBzbwotCQkJICogdHJ1bmNhdGVfcGFydGlhbF9wYWdlIGNhbm5vdCBtaXNzIGl0IHdlcmUKLQkJCSAqIGl0IGFzc2lnbmVkIHRvIHN3YXAuCi0JCQkgKi8KLQkJCWlmIChuZXdzaXplICYgKFBBR0VfQ0FDSEVfU0laRS0xKSkgewotCQkJCSh2b2lkKSBzaG1lbV9nZXRwYWdlKGlub2RlLAotCQkJCQluZXdzaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQsCi0JCQkJCQkmcGFnZSwgU0dQX1JFQUQsIE5VTEwpOwotCQkJCWlmIChwYWdlKQotCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBSZXNldCBTSE1FTV9QQUdFSU4gZmxhZyBzbyB0aGF0IHNobWVtX3RydW5jYXRlIGNhbgotCQkJICogZGV0ZWN0IGlmIGFueSBwYWdlcyBtaWdodCBoYXZlIGJlZW4gYWRkZWQgdG8gY2FjaGUKLQkJCSAqIGFmdGVyIHRydW5jYXRlX2lub2RlX3BhZ2VzLiAgQnV0IHdlIG5lZWRuJ3QgYm90aGVyCi0JCQkgKiBpZiBpdCdzIGJlaW5nIGZ1bGx5IHRydW5jYXRlZCB0byB6ZXJvLWxlbmd0aDogdGhlCi0JCQkgKiBucnBhZ2VzIGNoZWNrIGlzIGVmZmljaWVudCBlbm91Z2ggaW4gdGhhdCBjYXNlLgotCQkJICovCi0JCQlpZiAobmV3c2l6ZSkgewotCQkJCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7Ci0JCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQlpbmZvLT5mbGFncyAmPSB+U0hNRU1fUEFHRUlOOwotCQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCX0KLQkJfQogCQlpZiAobmV3c2l6ZSAhPSBvbGRzaXplKSB7CiAJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpOwogCQkJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTgyMiw4ICs1MzIsNiBAQAogCQkJLyogdW5tYXAgYWdhaW4gdG8gcmVtb3ZlIHJhY2lseSBDT1dlZCBwcml2YXRlIHBhZ2VzICovCiAJCQl1bm1hcF9tYXBwaW5nX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIGhvbGViZWdpbiwgMCwgMSk7CiAJCX0KLQkJaWYgKHBhZ2UpCi0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQogCiAJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKQEAgLTg0OCw3ICs1NTYsOCBAQAogCQkJbGlzdF9kZWxfaW5pdCgmaW5mby0+c3dhcGxpc3QpOwogCQkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAJCX0KLQl9CisJfSBlbHNlCisJCWtmcmVlKGluZm8tPnN5bWxpbmspOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhhdHRyLCBueGF0dHIsICZpbmZvLT54YXR0cl9saXN0LCBsaXN0KSB7CiAJCWtmcmVlKHhhdHRyLT5uYW1lKTsKQEAgLTg1OSwxMDYgKzU2OCwyNyBAQAogCWVuZF93cml0ZWJhY2soaW5vZGUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaG1lbV9maW5kX3N3cChzd3BfZW50cnlfdCBlbnRyeSwgc3dwX2VudHJ5X3QgKmRpciwgc3dwX2VudHJ5X3QgKmVkaXIpCisvKgorICogSWYgc3dhcCBmb3VuZCBpbiBpbm9kZSwgZnJlZSBpdCBhbmQgbW92ZSBwYWdlIGZyb20gc3dhcGNhY2hlIHRvIGZpbGVjYWNoZS4KKyAqLworc3RhdGljIGludCBzaG1lbV91bnVzZV9pbm9kZShzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywKKwkJCSAgICAgc3dwX2VudHJ5X3Qgc3dhcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3dwX2VudHJ5X3QgKnB0cjsKLQotCWZvciAocHRyID0gZGlyOyBwdHIgPCBlZGlyOyBwdHIrKykgewotCQlpZiAocHRyLT52YWwgPT0gZW50cnkudmFsKQotCQkJcmV0dXJuIHB0ciAtIGRpcjsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IHNobWVtX3VudXNlX2lub2RlKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7Ci0JdW5zaWduZWQgbG9uZyBpZHg7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGxvbmcgbGltaXQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFnZTsKLQlzdHJ1Y3QgcGFnZSAqKmRpcjsKLQlzdHJ1Y3QgcGFnZSAqc3ViZGlyOwotCXN3cF9lbnRyeV90ICpwdHI7Ci0JaW50IG9mZnNldDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGluZm8tPnZmc19pbm9kZS5pX21hcHBpbmc7CisJdm9pZCAqcmFkc3dhcDsKKwlwZ29mZl90IGluZGV4OwogCWludCBlcnJvcjsKIAotCWlkeCA9IDA7Ci0JcHRyID0gaW5mby0+aV9kaXJlY3Q7Ci0Jc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQlpZiAoIWluZm8tPnN3YXBwZWQpIHsKLQkJbGlzdF9kZWxfaW5pdCgmaW5mby0+c3dhcGxpc3QpOwotCQlnb3RvIGxvc3QyOwotCX0KLQlsaW1pdCA9IGluZm8tPm5leHRfaW5kZXg7Ci0Jc2l6ZSA9IGxpbWl0OwotCWlmIChzaXplID4gU0hNRU1fTlJfRElSRUNUKQotCQlzaXplID0gU0hNRU1fTlJfRElSRUNUOwotCW9mZnNldCA9IHNobWVtX2ZpbmRfc3dwKGVudHJ5LCBwdHIsIHB0citzaXplKTsKLQlpZiAob2Zmc2V0ID49IDApIHsKLQkJc2htZW1fc3dwX2JhbGFuY2VfdW5tYXAoKTsKLQkJZ290byBmb3VuZDsKLQl9Ci0JaWYgKCFpbmZvLT5pX2luZGlyZWN0KQotCQlnb3RvIGxvc3QyOwotCi0JZGlyID0gc2htZW1fZGlyX21hcChpbmZvLT5pX2luZGlyZWN0KTsKLQlzdGFnZSA9IFNITUVNX05SX0RJUkVDVCArIEVOVFJJRVNfUEVSX1BBR0VQQUdFLzI7Ci0KLQlmb3IgKGlkeCA9IFNITUVNX05SX0RJUkVDVDsgaWR4IDwgbGltaXQ7IGlkeCArPSBFTlRSSUVTX1BFUl9QQUdFLCBkaXIrKykgewotCQlpZiAodW5saWtlbHkoaWR4ID09IHN0YWdlKSkgewotCQkJc2htZW1fZGlyX3VubWFwKGRpci0xKTsKLQkJCWlmIChjb25kX3Jlc2NoZWRfbG9jaygmaW5mby0+bG9jaykpIHsKLQkJCQkvKiBjaGVjayBpdCBoYXMgbm90IGJlZW4gdHJ1bmNhdGVkICovCi0JCQkJaWYgKGxpbWl0ID4gaW5mby0+bmV4dF9pbmRleCkgewotCQkJCQlsaW1pdCA9IGluZm8tPm5leHRfaW5kZXg7Ci0JCQkJCWlmIChpZHggPj0gbGltaXQpCi0JCQkJCQlnb3RvIGxvc3QyOwotCQkJCX0KLQkJCX0KLQkJCWRpciA9IHNobWVtX2Rpcl9tYXAoaW5mby0+aV9pbmRpcmVjdCkgKwotCQkJICAgIEVOVFJJRVNfUEVSX1BBR0UvMiArIGlkeC9FTlRSSUVTX1BFUl9QQUdFUEFHRTsKLQkJCXdoaWxlICghKmRpcikgewotCQkJCWRpcisrOwotCQkJCWlkeCArPSBFTlRSSUVTX1BFUl9QQUdFUEFHRTsKLQkJCQlpZiAoaWR4ID49IGxpbWl0KQotCQkJCQlnb3RvIGxvc3QxOwotCQkJfQotCQkJc3RhZ2UgPSBpZHggKyBFTlRSSUVTX1BFUl9QQUdFUEFHRTsKLQkJCXN1YmRpciA9ICpkaXI7Ci0JCQlzaG1lbV9kaXJfdW5tYXAoZGlyKTsKLQkJCWRpciA9IHNobWVtX2Rpcl9tYXAoc3ViZGlyKTsKLQkJfQotCQlzdWJkaXIgPSAqZGlyOwotCQlpZiAoc3ViZGlyICYmIHBhZ2VfcHJpdmF0ZShzdWJkaXIpKSB7Ci0JCQlwdHIgPSBzaG1lbV9zd3BfbWFwKHN1YmRpcik7Ci0JCQlzaXplID0gbGltaXQgLSBpZHg7Ci0JCQlpZiAoc2l6ZSA+IEVOVFJJRVNfUEVSX1BBR0UpCi0JCQkJc2l6ZSA9IEVOVFJJRVNfUEVSX1BBR0U7Ci0JCQlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKLQkJCWlmIChvZmZzZXQgPj0gMCkgewotCQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwotCQkJCXB0ciA9IHNobWVtX3N3cF9tYXAoc3ViZGlyKTsKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQl9Ci0JfQotbG9zdDE6Ci0Jc2htZW1fZGlyX3VubWFwKGRpci0xKTsKLWxvc3QyOgotCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQlyZXR1cm4gMDsKLWZvdW5kOgotCWlkeCArPSBvZmZzZXQ7Ci0JcHRyICs9IG9mZnNldDsKKwlyYWRzd2FwID0gc3dwX3RvX3JhZGl4X2VudHJ5KHN3YXApOworCWluZGV4ID0gcmFkaXhfdHJlZV9sb2NhdGVfaXRlbSgmbWFwcGluZy0+cGFnZV90cmVlLCByYWRzd2FwKTsKKwlpZiAoaW5kZXggPT0gLTEpCisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBNb3ZlIF9oZWFkXyB0byBzdGFydCBzZWFyY2ggZm9yIG5leHQgZnJvbSBoZXJlLgogCSAqIEJ1dCBiZSBjYXJlZnVsOiBzaG1lbV9ldmljdF9pbm9kZSBjaGVja3MgbGlzdF9lbXB0eSB3aXRob3V0IHRha2luZwogCSAqIG11dGV4LCBhbmQgdGhlcmUncyBhbiBpbnN0YW50IGluIGxpc3RfbW92ZV90YWlsIHdoZW4gaW5mby0+c3dhcGxpc3QKLQkgKiB3b3VsZCBhcHBlYXIgZW1wdHksIGlmIGl0IHdlcmUgdGhlIG9ubHkgb25lIG9uIHNobWVtX3N3YXBsaXN0LiAgV2UKLQkgKiBjb3VsZCBhdm9pZCBkb2luZyBpdCBpZiBpbm9kZSBOVUxMOyBvciB1c2UgdGhpcyBtaW5vciBvcHRpbWl6YXRpb24uCisJICogd291bGQgYXBwZWFyIGVtcHR5LCBpZiBpdCB3ZXJlIHRoZSBvbmx5IG9uZSBvbiBzaG1lbV9zd2FwbGlzdC4KIAkgKi8KIAlpZiAoc2htZW1fc3dhcGxpc3QubmV4dCAhPSAmaW5mby0+c3dhcGxpc3QpCiAJCWxpc3RfbW92ZV90YWlsKCZzaG1lbV9zd2FwbGlzdCwgJmluZm8tPnN3YXBsaXN0KTsKQEAgLTk2OCwyOSArNTk4LDM0IEBACiAJICogYnV0IGFsc28gdG8gaG9sZCB1cCBzaG1lbV9ldmljdF9pbm9kZSgpOiBzbyBpbm9kZSBjYW5ub3QgYmUgZnJlZWQKIAkgKiBiZW5lYXRoIHVzIChwYWdlbG9jayBkb2Vzbid0IGhlbHAgdW50aWwgdGhlIHBhZ2UgaXMgaW4gcGFnZWNhY2hlKS4KIAkgKi8KLQltYXBwaW5nID0gaW5mby0+dmZzX2lub2RlLmlfbWFwcGluZzsKLQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLCBpZHgsIEdGUF9OT1dBSVQpOworCWVycm9yID0gc2htZW1fYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgaW5kZXgsCisJCQkJCQlHRlBfTk9XQUlULCByYWRzd2FwKTsKIAkvKiB3aGljaCBkb2VzIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZSBvbiBlcnJvciAqLwogCiAJaWYgKGVycm9yICE9IC1FTk9NRU0pIHsKKwkJLyoKKwkJICogVHJ1bmNhdGlvbiBhbmQgZXZpY3Rpb24gdXNlIGZyZWVfc3dhcF9hbmRfY2FjaGUoKSwgd2hpY2gKKwkJICogb25seSBkb2VzIHRyeWxvY2sgcGFnZTogaWYgd2UgcmFjZWQsIGJlc3QgY2xlYW4gdXAgaGVyZS4KKwkJICovCiAJCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQlpbmZvLT5mbGFncyB8PSBTSE1FTV9QQUdFSU47Ci0JCXNobWVtX3N3cF9zZXQoaW5mbywgcHRyLCAwKTsKLQkJc3dhcF9mcmVlKGVudHJ5KTsKKwkJaWYgKCFlcnJvcikgeworCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCWluZm8tPnN3YXBwZWQtLTsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXN3YXBfZnJlZShzd2FwKTsKKwkJfQogCQllcnJvciA9IDE7CS8qIG5vdCBhbiBlcnJvciwgYnV0IGVudHJ5IHdhcyBmb3VuZCAqLwogCX0KLQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKLQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJcmV0dXJuIGVycm9yOwogfQogCiAvKgotICogc2htZW1fdW51c2UoKSBzZWFyY2ggZm9yIGFuIGV2ZW50dWFsbHkgc3dhcHBlZCBvdXQgc2htZW0gcGFnZS4KKyAqIFNlYXJjaCB0aHJvdWdoIHN3YXBwZWQgaW5vZGVzIHRvIGZpbmQgYW5kIHJlcGxhY2Ugc3dhcCBieSBwYWdlLgogICovCi1pbnQgc2htZW1fdW51c2Uoc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKQoraW50IHNobWVtX3VudXNlKHN3cF9lbnRyeV90IHN3YXAsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKnRoaXMsICpuZXh0OwogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwogCWludCBmb3VuZCA9IDA7CiAJaW50IGVycm9yOwpAQCAtOTk5LDMyICs2MzQsMjUgQEAKIAkgKiBDaGFyZ2UgcGFnZSB1c2luZyBHRlBfS0VSTkVMIHdoaWxlIHdlIGNhbiB3YWl0LCBiZWZvcmUgdGFraW5nCiAJICogdGhlIHNobWVtX3N3YXBsaXN0X211dGV4IHdoaWNoIG1pZ2h0IGhvbGQgdXAgc2htZW1fd3JpdGVwYWdlKCkuCiAJICogQ2hhcmdlZCBiYWNrIHRvIHRoZSB1c2VyIChub3QgdG8gY2FsbGVyKSB3aGVuIHN3YXAgYWNjb3VudCBpcyB1c2VkLgotCSAqIGFkZF90b19wYWdlX2NhY2hlKCkgd2lsbCBiZSBjYWxsZWQgd2l0aCBHRlBfTk9XQUlULgogCSAqLwogCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sIEdGUF9LRVJORUwpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JLyoKLQkgKiBUcnkgdG8gcHJlbG9hZCB3aGlsZSB3ZSBjYW4gd2FpdCwgdG8gbm90IG1ha2UgYSBoYWJpdCBvZgotCSAqIGRyYWluaW5nIGF0b21pYyByZXNlcnZlczsgYnV0IGRvbid0IGxhdGNoIG9uIHRvIHRoaXMgY3B1LAotCSAqIGl0J3Mgb2theSBpZiBzb21ldGltZXMgd2UgZ2V0IHJlc2NoZWR1bGVkIGFmdGVyIHRoaXMuCi0JICovCi0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIHVuY2hhcmdlOwotCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwkvKiBObyByYWRpeF90cmVlX3ByZWxvYWQ6IHN3YXAgZW50cnkga2VlcHMgYSBwbGFjZSBmb3IgcGFnZSBpbiB0cmVlICovCiAKIAltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG5leHQsICZzaG1lbV9zd2FwbGlzdCkgewotCQlpbmZvID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc3dhcGxpc3QpOwotCQlmb3VuZCA9IHNobWVtX3VudXNlX2lub2RlKGluZm8sIGVudHJ5LCBwYWdlKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUodGhpcywgbmV4dCwgJnNobWVtX3N3YXBsaXN0KSB7CisJCWluZm8gPSBsaXN0X2VudHJ5KHRoaXMsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzd2FwbGlzdCk7CisJCWlmIChpbmZvLT5zd2FwcGVkKQorCQkJZm91bmQgPSBzaG1lbV91bnVzZV9pbm9kZShpbmZvLCBzd2FwLCBwYWdlKTsKKwkJZWxzZQorCQkJbGlzdF9kZWxfaW5pdCgmaW5mby0+c3dhcGxpc3QpOwogCQljb25kX3Jlc2NoZWQoKTsKIAkJaWYgKGZvdW5kKQogCQkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCi11bmNoYXJnZToKIAlpZiAoIWZvdW5kKQogCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAJaWYgKGZvdW5kIDwgMCkKQEAgLTEwNDEsMTAgKzY2OSwxMCBAQAogc3RhdGljIGludCBzaG1lbV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwotCXN3cF9lbnRyeV90ICplbnRyeSwgc3dhcDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKLQl1bnNpZ25lZCBsb25nIGluZGV4OwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3dwX2VudHJ5X3Qgc3dhcDsKKwlwZ29mZl90IGluZGV4OwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAltYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKQEAgLTEwNzMsNTAgKzcwMSwzMiBAQAogCiAJLyoKIAkgKiBBZGQgaW5vZGUgdG8gc2htZW1fdW51c2UoKSdzIGxpc3Qgb2Ygc3dhcHBlZC1vdXQgaW5vZGVzLAotCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQotCSAqIG11dGV4IHdoaWxlIGhvbGRpbmcgc3BpbmxvY2ssIGFuZCBtdXN0IGRvIHNvIGJlZm9yZSB0aGUgcGFnZQotCSAqIGlzIG1vdmVkIHRvIHN3YXAgY2FjaGUsIHdoZW4gaXRzIHBhZ2Vsb2NrIG5vIGxvbmdlciBwcm90ZWN0cworCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVmb3JlIHRoZSBwYWdlIGlzCisJICogbW92ZWQgdG8gc3dhcCBjYWNoZSwgd2hlbiBpdHMgcGFnZWxvY2sgbm8gbG9uZ2VyIHByb3RlY3RzCiAJICogdGhlIGlub2RlIGZyb20gZXZpY3Rpb24uICBCdXQgZG9uJ3QgdW5sb2NrIHRoZSBtdXRleCB1bnRpbAotCSAqIHdlJ3ZlIHRha2VuIHRoZSBzcGlubG9jaywgYmVjYXVzZSBzaG1lbV91bnVzZV9pbm9kZSgpIHdpbGwKLQkgKiBwcnVuZSBhICFzd2FwcGVkIGlub2RlIGZyb20gdGhlIHN3YXBsaXN0IHVuZGVyIGJvdGggbG9ja3MuCisJICogd2UndmUgaW5jcmVtZW50ZWQgc3dhcHBlZCwgYmVjYXVzZSBzaG1lbV91bnVzZV9pbm9kZSgpIHdpbGwKKwkgKiBwcnVuZSBhICFzd2FwcGVkIGlub2RlIGZyb20gdGhlIHN3YXBsaXN0IHVuZGVyIHRoaXMgbXV0ZXguCiAJICovCiAJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCiAJCWxpc3RfYWRkX3RhaWwoJmluZm8tPnN3YXBsaXN0LCAmc2htZW1fc3dhcGxpc3QpOwogCi0Jc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQltdXRleF91bmxvY2soJnNobWVtX3N3YXBsaXN0X211dGV4KTsKLQotCWlmIChpbmRleCA+PSBpbmZvLT5uZXh0X2luZGV4KSB7Ci0JCUJVR19PTighKGluZm8tPmZsYWdzICYgU0hNRU1fVFJVTkNBVEUpKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCWVudHJ5ID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIGluZGV4LCBOVUxMKTsKLQlpZiAoZW50cnktPnZhbCkgewotCQlXQVJOX09OX09OQ0UoMSk7CS8qIFN0aWxsIGhhcHBlbnM/IFRlbGwgdXMgYWJvdXQgaXQhICovCi0JCWZyZWVfc3dhcF9hbmRfY2FjaGUoKmVudHJ5KTsKLQkJc2htZW1fc3dwX3NldChpbmZvLCBlbnRyeSwgMCk7Ci0JfQotCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7Ci0KIAlpZiAoYWRkX3RvX3N3YXBfY2FjaGUocGFnZSwgc3dhcCwgR0ZQX0FUT01JQykgPT0gMCkgewotCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwotCQlzaG1lbV9zd3Bfc2V0KGluZm8sIGVudHJ5LCBzd2FwLnZhbCk7Ci0JCXNobWVtX3N3cF91bm1hcChlbnRyeSk7CiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CisJCXNobWVtX2RlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSwgc3dwX3RvX3JhZGl4X2VudHJ5KHN3YXApKTsKKworCQlzcGluX2xvY2soJmluZm8tPmxvY2spOworCQlpbmZvLT5zd2FwcGVkKys7CisJCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCQltdXRleF91bmxvY2soJnNobWVtX3N3YXBsaXN0X211dGV4KTsKIAkJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKIAkJc3dhcF93cml0ZXBhZ2UocGFnZSwgd2JjKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKLXVubG9jazoKLQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JLyoKLQkgKiBhZGRfdG9fc3dhcF9jYWNoZSgpIGRvZXNuJ3QgcmV0dXJuIC1FRVhJU1QsIHNvIHdlIGNhbiBzYWZlbHkKLQkgKiBjbGVhciBTV0FQX0hBU19DQUNIRSBmbGFnLgotCSAqLworCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCXN3YXBjYWNoZV9mcmVlKHN3YXAsIE5VTEwpOwogcmVkaXJ0eToKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKQEAgLTExNTMsMzUgKzc2MywzMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19UTVBGUyAqLwogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNobWVtX3N3YXBpbihzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgaWR4KQorc3RhdGljIHN0cnVjdCBwYWdlICpzaG1lbV9zd2FwaW4oc3dwX2VudHJ5X3Qgc3dhcCwgZ2ZwX3QgZ2ZwLAorCQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHBnb2ZmX3QgaW5kZXgpCiB7CiAJc3RydWN0IG1lbXBvbGljeSBtcG9sLCAqc3BvbDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgcHZtYTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXNwb2wgPSBtcG9sX2NvbmRfY29weSgmbXBvbCwKLQkJCQltcG9sX3NoYXJlZF9wb2xpY3lfbG9va3VwKCZpbmZvLT5wb2xpY3ksIGlkeCkpOworCQkJbXBvbF9zaGFyZWRfcG9saWN5X2xvb2t1cCgmaW5mby0+cG9saWN5LCBpbmRleCkpOwogCiAJLyogQ3JlYXRlIGEgcHNldWRvIHZtYSB0aGF0IGp1c3QgY29udGFpbnMgdGhlIHBvbGljeSAqLwogCXB2bWEudm1fc3RhcnQgPSAwOwotCXB2bWEudm1fcGdvZmYgPSBpZHg7CisJcHZtYS52bV9wZ29mZiA9IGluZGV4OwogCXB2bWEudm1fb3BzID0gTlVMTDsKIAlwdm1hLnZtX3BvbGljeSA9IHNwb2w7Ci0JcGFnZSA9IHN3YXBpbl9yZWFkYWhlYWQoZW50cnksIGdmcCwgJnB2bWEsIDApOwotCXJldHVybiBwYWdlOworCXJldHVybiBzd2FwaW5fcmVhZGFoZWFkKHN3YXAsIGdmcCwgJnB2bWEsIDApOwogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKnNobWVtX2FsbG9jX3BhZ2UoZ2ZwX3QgZ2ZwLAotCQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHVuc2lnbmVkIGxvbmcgaWR4KQorCQkJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8sIHBnb2ZmX3QgaW5kZXgpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0IHB2bWE7CiAKIAkvKiBDcmVhdGUgYSBwc2V1ZG8gdm1hIHRoYXQganVzdCBjb250YWlucyB0aGUgcG9saWN5ICovCiAJcHZtYS52bV9zdGFydCA9IDA7Ci0JcHZtYS52bV9wZ29mZiA9IGlkeDsKKwlwdm1hLnZtX3Bnb2ZmID0gaW5kZXg7CiAJcHZtYS52bV9vcHMgPSBOVUxMOwotCXB2bWEudm1fcG9saWN5ID0gbXBvbF9zaGFyZWRfcG9saWN5X2xvb2t1cCgmaW5mby0+cG9saWN5LCBpZHgpOworCXB2bWEudm1fcG9saWN5ID0gbXBvbF9zaGFyZWRfcG9saWN5X2xvb2t1cCgmaW5mby0+cG9saWN5LCBpbmRleCk7CiAKIAkvKgogCSAqIGFsbG9jX3BhZ2Vfdm1hKCkgd2lsbCBkcm9wIHRoZSBzaGFyZWQgcG9saWN5IHJlZmVyZW5jZQpAQCAtMTE5MCwxOSArNzk4LDE5IEBACiB9CiAjZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KICNpZmRlZiBDT05GSUdfVE1QRlMKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaG1lbV9zaG93X21wb2woc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBtZW1wb2xpY3kgKnApCitzdGF0aWMgaW5saW5lIHZvaWQgc2htZW1fc2hvd19tcG9sKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKQogewogfQogI2VuZGlmIC8qIENPTkZJR19UTVBGUyAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzaG1lbV9zd2FwaW4oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwKLQkJCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIGlkeCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnNobWVtX3N3YXBpbihzd3BfZW50cnlfdCBzd2FwLCBnZnBfdCBnZnAsCisJCQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywgcGdvZmZfdCBpbmRleCkKIHsKLQlyZXR1cm4gc3dhcGluX3JlYWRhaGVhZChlbnRyeSwgZ2ZwLCBOVUxMLCAwKTsKKwlyZXR1cm4gc3dhcGluX3JlYWRhaGVhZChzd2FwLCBnZnAsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpzaG1lbV9hbGxvY19wYWdlKGdmcF90IGdmcCwKLQkJCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIGlkeCkKKwkJCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBwZ29mZl90IGluZGV4KQogewogCXJldHVybiBhbGxvY19wYWdlKGdmcCk7CiB9CkBAIC0xMjIyLDI0MyArODMwLDE5MCBAQAogICogdm0uIElmIHdlIHN3YXAgaXQgaW4gd2UgbWFyayBpdCBkaXJ0eSBzaW5jZSB3ZSBhbHNvIGZyZWUgdGhlIHN3YXAKICAqIGVudHJ5IHNpbmNlIGEgcGFnZSBjYW5ub3QgbGl2ZSBpbiBib3RoIHRoZSBzd2FwIGFuZCBwYWdlIGNhY2hlCiAgKi8KLXN0YXRpYyBpbnQgc2htZW1fZ2V0cGFnZV9nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpZHgsCitzdGF0aWMgaW50IHNobWVtX2dldHBhZ2VfZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJc3RydWN0IHBhZ2UgKipwYWdlcCwgZW51bSBzZ3BfdHlwZSBzZ3AsIGdmcF90IGdmcCwgaW50ICpmYXVsdF90eXBlKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKLQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOworCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOwogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IHBhZ2UgKnByZWFsbG9jX3BhZ2UgPSBOVUxMOwotCXN3cF9lbnRyeV90ICplbnRyeTsKIAlzd3BfZW50cnlfdCBzd2FwOwogCWludCBlcnJvcjsKLQlpbnQgcmV0OworCWludCBvbmNlID0gMDsKIAotCWlmIChpZHggPj0gU0hNRU1fTUFYX0lOREVYKQorCWlmIChpbmRleCA+IChNQVhfTEZTX0ZJTEVTSVpFID4+IFBBR0VfQ0FDSEVfU0hJRlQpKQogCQlyZXR1cm4gLUVGQklHOwogcmVwZWF0OgotCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpZHgpOwotCWlmIChwYWdlKSB7CisJc3dhcC52YWwgPSAwOworCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJaWYgKHJhZGl4X3RyZWVfZXhjZXB0aW9uYWxfZW50cnkocGFnZSkpIHsKKwkJc3dhcCA9IHJhZGl4X3RvX3N3cF9lbnRyeShwYWdlKTsKKwkJcGFnZSA9IE5VTEw7CisJfQorCisJaWYgKHNncCAhPSBTR1BfV1JJVEUgJiYKKwkgICAgKChsb2ZmX3QpaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWYgKHBhZ2UgfHwgKHNncCA9PSBTR1BfUkVBRCAmJiAhc3dhcC52YWwpKSB7CiAJCS8qCiAJCSAqIE9uY2Ugd2UgY2FuIGdldCB0aGUgcGFnZSBsb2NrLCBpdCBtdXN0IGJlIHVwdG9kYXRlOgogCQkgKiBpZiB0aGVyZSB3ZXJlIGFuIGVycm9yIGluIHJlYWRpbmcgYmFjayBmcm9tIHN3YXAsCiAJCSAqIHRoZSBwYWdlIHdvdWxkIG5vdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmaWxlY2FjaGUuCiAJCSAqLwotCQlCVUdfT04oIVBhZ2VVcHRvZGF0ZShwYWdlKSk7Ci0JCWdvdG8gZG9uZTsKKwkJQlVHX09OKHBhZ2UgJiYgIVBhZ2VVcHRvZGF0ZShwYWdlKSk7CisJCSpwYWdlcCA9IHBhZ2U7CisJCXJldHVybiAwOwogCX0KIAogCS8qCi0JICogVHJ5IHRvIHByZWxvYWQgd2hpbGUgd2UgY2FuIHdhaXQsIHRvIG5vdCBtYWtlIGEgaGFiaXQgb2YKLQkgKiBkcmFpbmluZyBhdG9taWMgcmVzZXJ2ZXM7IGJ1dCBkb24ndCBsYXRjaCBvbiB0byB0aGlzIGNwdS4KKwkgKiBGYXN0IGNhY2hlIGxvb2t1cCBkaWQgbm90IGZpbmQgaXQ6CisJICogYnJpbmcgaXQgYmFjayBmcm9tIHN3YXAgb3IgYWxsb2NhdGUuCiAJICovCi0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwICYgR0ZQX1JFQ0xBSU1fTUFTSyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7Ci0KLQlpZiAoc2dwICE9IFNHUF9SRUFEICYmICFwcmVhbGxvY19wYWdlKSB7Ci0JCXByZWFsbG9jX3BhZ2UgPSBzaG1lbV9hbGxvY19wYWdlKGdmcCwgaW5mbywgaWR4KTsKLQkJaWYgKHByZWFsbG9jX3BhZ2UpIHsKLQkJCVNldFBhZ2VTd2FwQmFja2VkKHByZWFsbG9jX3BhZ2UpOwotCQkJaWYgKG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHByZWFsbG9jX3BhZ2UsCi0JCQkJCWN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKSkgewotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwcmVhbGxvY19wYWdlKTsKLQkJCQlwcmVhbGxvY19wYWdlID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0Jc2htZW1fcmVjYWxjX2lub2RlKGlub2RlKTsKLQllbnRyeSA9IHNobWVtX3N3cF9hbGxvYyhpbmZvLCBpZHgsIHNncCwgZ2ZwKTsKLQlpZiAoSVNfRVJSKGVudHJ5KSkgewotCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCWVycm9yID0gUFRSX0VSUihlbnRyeSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlzd2FwID0gKmVudHJ5OworCWluZm8gPSBTSE1FTV9JKGlub2RlKTsKKwlzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0+aV9zYik7CiAKIAlpZiAoc3dhcC52YWwpIHsKIAkJLyogTG9vayBpdCB1cCBhbmQgcmVhZCBpdCBpbi4uICovCiAJCXBhZ2UgPSBsb29rdXBfc3dhcF9jYWNoZShzd2FwKTsKIAkJaWYgKCFwYWdlKSB7Ci0JCQlzaG1lbV9zd3BfdW5tYXAoZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCQkJLyogaGVyZSB3ZSBhY3R1YWxseSBkbyB0aGUgaW8gKi8KIAkJCWlmIChmYXVsdF90eXBlKQogCQkJCSpmYXVsdF90eXBlIHw9IFZNX0ZBVUxUX01BSk9SOwotCQkJcGFnZSA9IHNobWVtX3N3YXBpbihzd2FwLCBnZnAsIGluZm8sIGlkeCk7CisJCQlwYWdlID0gc2htZW1fc3dhcGluKHN3YXAsIGdmcCwgaW5mbywgaW5kZXgpOwogCQkJaWYgKCFwYWdlKSB7Ci0JCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQllbnRyeSA9IHNobWVtX3N3cF9hbGxvYyhpbmZvLCBpZHgsIHNncCwgZ2ZwKTsKLQkJCQlpZiAoSVNfRVJSKGVudHJ5KSkKLQkJCQkJZXJyb3IgPSBQVFJfRVJSKGVudHJ5KTsKLQkJCQllbHNlIHsKLQkJCQkJaWYgKGVudHJ5LT52YWwgPT0gc3dhcC52YWwpCi0JCQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCQkJfQotCQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCWdvdG8gb3V0OwotCQkJCWdvdG8gcmVwZWF0OworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KLQkJCXdhaXRfb25fcGFnZV9sb2NrZWQocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQlnb3RvIHJlcGVhdDsKIAkJfQogCiAJCS8qIFdlIGhhdmUgdG8gZG8gdGhpcyB3aXRoIHBhZ2UgbG9ja2VkIHRvIHByZXZlbnQgcmFjZXMgKi8KLQkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpIHsKLQkJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJZ290byByZXBlYXQ7Ci0JCX0KLQkJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpIHsKLQkJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQlnb3RvIHJlcGVhdDsKLQkJfQorCQlsb2NrX3BhZ2UocGFnZSk7CiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCQlzaG1lbV9zd3BfdW5tYXAoZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQllcnJvciA9IC1FSU87Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CisKKwkJLyogU29tZW9uZSBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgaXQgZm9yIHVzICovCisJCWlmIChwYWdlLT5tYXBwaW5nKSB7CisJCQlpZiAocGFnZS0+bWFwcGluZyA9PSBtYXBwaW5nICYmCisJCQkgICAgcGFnZS0+aW5kZXggPT0gaW5kZXgpCisJCQkJZ290byBkb25lOworCQkJZXJyb3IgPSAtRUVYSVNUOworCQkJZ290byBmYWlsZWQ7CiAJCX0KIAotCQllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLAotCQkJCQkJIGlkeCwgR0ZQX05PV0FJVCk7Ci0JCWlmIChlcnJvcikgewotCQkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKLQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCWlmIChlcnJvciA9PSAtRU5PTUVNKSB7Ci0JCQkJLyoKLQkJCQkgKiByZWNsYWltIGZyb20gcHJvcGVyIG1lbW9yeSBjZ3JvdXAgYW5kCi0JCQkJICogY2FsbCBtZW1jZydzIE9PTSBpZiBuZWVkZWQuCi0JCQkJICovCi0JCQkJZXJyb3IgPSBtZW1fY2dyb3VwX3NobWVtX2NoYXJnZV9mYWxsYmFjaygKLQkJCQkJCXBhZ2UsIGN1cnJlbnQtPm1tLCBnZnApOwotCQkJCWlmIChlcnJvcikgewotCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9Ci0JCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCWdvdG8gcmVwZWF0OwotCQl9CisJCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sCisJCQkJCQlnZnAgJiBHRlBfUkVDTEFJTV9NQVNLKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gc2htZW1fYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgaW5kZXgsCisJCQkJCQlnZnAsIHN3cF90b19yYWRpeF9lbnRyeShzd2FwKSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZmFpbGVkOwogCi0JCWluZm8tPmZsYWdzIHw9IFNITUVNX1BBR0VJTjsKLQkJc2htZW1fc3dwX3NldChpbmZvLCBlbnRyeSwgMCk7Ci0JCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CisJCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJCWluZm8tPnN3YXBwZWQtLTsKKwkJc2htZW1fcmVjYWxjX2lub2RlKGlub2RlKTsKIAkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlzd2FwX2ZyZWUoc3dhcCk7CiAKLQl9IGVsc2UgaWYgKHNncCA9PSBTR1BfUkVBRCkgewotCQlzaG1lbV9zd3BfdW5tYXAoZW50cnkpOwotCQlwYWdlID0gZmluZF9nZXRfcGFnZShtYXBwaW5nLCBpZHgpOwotCQlpZiAocGFnZSAmJiAhdHJ5bG9ja19wYWdlKHBhZ2UpKSB7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJZ290byByZXBlYXQ7CisJfSBlbHNlIHsKKwkJaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7CisJCQllcnJvciA9IC1FTk9TUEM7CisJCQlnb3RvIGZhaWxlZDsKIAkJfQotCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0KLQl9IGVsc2UgaWYgKHByZWFsbG9jX3BhZ2UpIHsKLQkJc2htZW1fc3dwX3VubWFwKGVudHJ5KTsKLQkJc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7CiAJCQlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywKLQkJCQkJCXNiaW5mby0+bWF4X2Jsb2NrcykgPj0gMCB8fAotCQkJICAgIHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQotCQkJCWdvdG8gbm9zcGFjZTsKKwkJCQkJCXNiaW5mby0+bWF4X2Jsb2NrcykgPj0gMCkgeworCQkJCWVycm9yID0gLUVOT1NQQzsKKwkJCQlnb3RvIHVuYWNjdDsKKwkJCX0KIAkJCXBlcmNwdV9jb3VudGVyX2luYygmc2JpbmZvLT51c2VkX2Jsb2Nrcyk7Ci0JCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwotCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQotCQkJZ290byBub3NwYWNlOwotCi0JCXBhZ2UgPSBwcmVhbGxvY19wYWdlOwotCQlwcmVhbGxvY19wYWdlID0gTlVMTDsKLQotCQllbnRyeSA9IHNobWVtX3N3cF9hbGxvYyhpbmZvLCBpZHgsIHNncCwgZ2ZwKTsKLQkJaWYgKElTX0VSUihlbnRyeSkpCi0JCQllcnJvciA9IFBUUl9FUlIoZW50cnkpOwotCQllbHNlIHsKLQkJCXN3YXAgPSAqZW50cnk7Ci0JCQlzaG1lbV9zd3BfdW5tYXAoZW50cnkpOwotCQl9Ci0JCXJldCA9IGVycm9yIHx8IHN3YXAudmFsOwotCQlpZiAocmV0KQotCQkJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOwotCQllbHNlCi0JCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKLQkJCQkJCWlkeCwgR0ZQX05PV0FJVCk7Ci0JCS8qCi0JCSAqIEF0IGFkZF90b19wYWdlX2NhY2hlX2xydSgpIGZhaWx1cmUsCi0JCSAqIHVuY2hhcmdlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5LgotCQkgKi8KLQkJaWYgKHJldCkgewotCQkJc2htZW1fdW5hY2N0X2Jsb2NrcyhpbmZvLT5mbGFncywgMSk7Ci0JCQlzaG1lbV9mcmVlX2Jsb2Nrcyhpbm9kZSwgMSk7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXQ7Ci0JCQlnb3RvIHJlcGVhdDsKIAkJfQogCi0JCWluZm8tPmZsYWdzIHw9IFNITUVNX1BBR0VJTjsKKwkJcGFnZSA9IHNobWVtX2FsbG9jX3BhZ2UoZ2ZwLCBpbmZvLCBpbmRleCk7CisJCWlmICghcGFnZSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBkZWN1c2VkOworCQl9CisKKwkJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisJCV9fc2V0X3BhZ2VfbG9ja2VkKHBhZ2UpOworCQllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLAorCQkJCQkJZ2ZwICYgR0ZQX1JFQ0xBSU1fTUFTSyk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IHNobWVtX2FkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIGluZGV4LAorCQkJCQkJZ2ZwLCBOVUxMKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBkZWN1c2VkOworCQlscnVfY2FjaGVfYWRkX2Fub24ocGFnZSk7CisKKwkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAkJaW5mby0+YWxsb2NlZCsrOworCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOworCQlzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUpOwogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKIAkJY2xlYXJfaGlnaHBhZ2UocGFnZSk7CiAJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCWlmIChzZ3AgPT0gU0dQX0RJUlRZKQogCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0KLQl9IGVsc2UgewotCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CiAJfQogZG9uZToKLQkqcGFnZXAgPSBwYWdlOwotCWVycm9yID0gMDsKLW91dDoKLQlpZiAocHJlYWxsb2NfcGFnZSkgewotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocHJlYWxsb2NfcGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwcmVhbGxvY19wYWdlKTsKKwkvKiBQZXJoYXBzIHRoZSBmaWxlIGhhcyBiZWVuIHRydW5jYXRlZCBzaW5jZSB3ZSBjaGVja2VkICovCisJaWYgKHNncCAhPSBTR1BfV1JJVEUgJiYKKwkgICAgKChsb2ZmX3QpaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuIGVycm9yOworCSpwYWdlcCA9IHBhZ2U7CisJcmV0dXJuIDA7CiAKLW5vc3BhY2U6CiAJLyoKLQkgKiBQZXJoYXBzIHRoZSBwYWdlIHdhcyBicm91Z2h0IGluIGZyb20gc3dhcCBiZXR3ZWVuIGZpbmRfbG9ja19wYWdlCi0JICogYW5kIHRha2luZyBpbmZvLT5sb2NrPyAgV2UgYWxsb3cgZm9yIHRoYXQgYXQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1LAotCSAqIGJ1dCBtdXN0IGFsc28gYXZvaWQgcmVwb3J0aW5nIGEgc3B1cmlvdXMgRU5PU1BDIHdoaWxlIHdvcmtpbmcgb24gYQotCSAqIGZ1bGwgdG1wZnMuCisJICogRXJyb3IgcmVjb3ZlcnkuCiAJICovCi0JcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKK3RydW5jOgorCUNsZWFyUGFnZURpcnR5KHBhZ2UpOworCWRlbGV0ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5hbGxvY2VkLS07CisJaW5vZGUtPmlfYmxvY2tzIC09IEJMT0NLU19QRVJfUEFHRTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CitkZWN1c2VkOgorCWlmIChzYmluZm8tPm1heF9ibG9ja3MpCisJCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpbmZvLT51c2VkX2Jsb2NrcywgLTEpOwordW5hY2N0OgorCXNobWVtX3VuYWNjdF9ibG9ja3MoaW5mby0+ZmxhZ3MsIDEpOworZmFpbGVkOgorCWlmIChzd2FwLnZhbCAmJiBlcnJvciAhPSAtRUlOVkFMKSB7CisJCXN0cnVjdCBwYWdlICp0ZXN0ID0gZmluZF9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJCWlmICh0ZXN0ICYmICFyYWRpeF90cmVlX2V4Y2VwdGlvbmFsX2VudHJ5KHRlc3QpKQorCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHRlc3QpOworCQkvKiBIYXZlIGFub3RoZXIgdHJ5IGlmIHRoZSBlbnRyeSBoYXMgY2hhbmdlZCAqLworCQlpZiAodGVzdCAhPSBzd3BfdG9fcmFkaXhfZW50cnkoc3dhcCkpCisJCQllcnJvciA9IC1FRVhJU1Q7CisJfQogCWlmIChwYWdlKSB7CisJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfQorCWlmIChlcnJvciA9PSAtRU5PU1BDICYmICFvbmNlKyspIHsKKwkJaW5mbyA9IFNITUVNX0koaW5vZGUpOworCQlzcGluX2xvY2soJmluZm8tPmxvY2spOworCQlzaG1lbV9yZWNhbGNfaW5vZGUoaW5vZGUpOworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCWdvdG8gcmVwZWF0OwogCX0KLQllcnJvciA9IC1FTk9TUEM7Ci0JZ290byBvdXQ7CisJaWYgKGVycm9yID09IC1FRVhJU1QpCisJCWdvdG8gcmVwZWF0OworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCkBAIC0xNDY3LDkgKzEwMjIsNiBAQAogCWludCBlcnJvcjsKIAlpbnQgcmV0ID0gVk1fRkFVTFRfTE9DS0VEOwogCi0JaWYgKCgobG9mZl90KXZtZi0+cGdvZmYgPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwotCiAJZXJyb3IgPSBzaG1lbV9nZXRwYWdlKGlub2RlLCB2bWYtPnBnb2ZmLCAmdm1mLT5wYWdlLCBTR1BfQ0FDSEUsICZyZXQpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuICgoZXJyb3IgPT0gLUVOT01FTSkgPyBWTV9GQVVMVF9PT00gOiBWTV9GQVVMVF9TSUdCVVMpOwpAQCAtMTQ4MiwyMCArMTAzNCwyMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX05VTUEKLXN0YXRpYyBpbnQgc2htZW1fc2V0X3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1lbXBvbGljeSAqbmV3KQorc3RhdGljIGludCBzaG1lbV9zZXRfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sKQogewotCXN0cnVjdCBpbm9kZSAqaSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlyZXR1cm4gbXBvbF9zZXRfc2hhcmVkX3BvbGljeSgmU0hNRU1fSShpKS0+cG9saWN5LCB2bWEsIG5ldyk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlyZXR1cm4gbXBvbF9zZXRfc2hhcmVkX3BvbGljeSgmU0hNRU1fSShpbm9kZSktPnBvbGljeSwgdm1hLCBtcG9sKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtZW1wb2xpY3kgKnNobWVtX2dldF9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBpbm9kZSAqaSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQl1bnNpZ25lZCBsb25nIGlkeDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXBnb2ZmX3QgaW5kZXg7CiAKLQlpZHggPSAoKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSArIHZtYS0+dm1fcGdvZmY7Ci0JcmV0dXJuIG1wb2xfc2hhcmVkX3BvbGljeV9sb29rdXAoJlNITUVNX0koaSktPnBvbGljeSwgaWR4KTsKKwlpbmRleCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsgdm1hLT52bV9wZ29mZjsKKwlyZXR1cm4gbXBvbF9zaGFyZWRfcG9saWN5X2xvb2t1cCgmU0hNRU1fSShpbm9kZSktPnBvbGljeSwgaW5kZXgpOwogfQogI2VuZGlmCiAKQEAgLTE1OTMsNyArMTE0NSw3IEBACiAKICNpZmRlZiBDT05GSUdfVE1QRlMKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbmxpbmVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBpbnQKIHNobWVtX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTE2MjYsNyArMTE3OCw4IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCXVuc2lnbmVkIGxvbmcgaW5kZXgsIG9mZnNldDsKKwlwZ29mZl90IGluZGV4OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCWVudW0gc2dwX3R5cGUgc2dwID0gU0dQX1JFQUQ7CiAKIAkvKgpAQCAtMTY0Miw3ICsxMTk1LDggQEAKIAogCWZvciAoOzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCQl1bnNpZ25lZCBsb25nIGVuZF9pbmRleCwgbnIsIHJldDsKKwkJcGdvZmZfdCBlbmRfaW5kZXg7CisJCXVuc2lnbmVkIGxvbmcgbnIsIHJldDsKIAkJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAogCQllbmRfaW5kZXggPSBpX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTE4ODAsOCArMTQzNCw5IEBACiAJYnVmLT5mX25hbWVsZW4gPSBOQU1FX01BWDsKIAlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7CiAJCWJ1Zi0+Zl9ibG9ja3MgPSBzYmluZm8tPm1heF9ibG9ja3M7Ci0JCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWUgPQotCQkJCXNiaW5mby0+bWF4X2Jsb2NrcyAtIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpbmZvLT51c2VkX2Jsb2Nrcyk7CisJCWJ1Zi0+Zl9iYXZhaWwgPQorCQlidWYtPmZfYmZyZWUgID0gc2JpbmZvLT5tYXhfYmxvY2tzIC0KKwkJCQlwZXJjcHVfY291bnRlcl9zdW0oJnNiaW5mby0+dXNlZF9ibG9ja3MpOwogCX0KIAlpZiAoc2JpbmZvLT5tYXhfaW5vZGVzKSB7CiAJCWJ1Zi0+Zl9maWxlcyA9IHNiaW5mby0+bWF4X2lub2RlczsKQEAgLTIwNTUsMTAgKzE2MTAsMTMgQEAKIAogCWluZm8gPSBTSE1FTV9JKGlub2RlKTsKIAlpbm9kZS0+aV9zaXplID0gbGVuLTE7Ci0JaWYgKGxlbiA8PSBTSE1FTV9TWU1MSU5LX0lOTElORV9MRU4pIHsKLQkJLyogZG8gaXQgaW5saW5lICovCi0JCW1lbWNweShpbmZvLT5pbmxpbmVfc3ltbGluaywgc3ltbmFtZSwgbGVuKTsKLQkJaW5vZGUtPmlfb3AgPSAmc2htZW1fc3ltbGlua19pbmxpbmVfb3BlcmF0aW9uczsKKwlpZiAobGVuIDw9IFNIT1JUX1NZTUxJTktfTEVOKSB7CisJCWluZm8tPnN5bWxpbmsgPSBrbWVtZHVwKHN5bW5hbWUsIGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghaW5mby0+c3ltbGluaykgeworCQkJaXB1dChpbm9kZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpbm9kZS0+aV9vcCA9ICZzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnM7CiAJfSBlbHNlIHsKIAkJZXJyb3IgPSBzaG1lbV9nZXRwYWdlKGlub2RlLCAwLCAmcGFnZSwgU0dQX1dSSVRFLCBOVUxMKTsKIAkJaWYgKGVycm9yKSB7CkBAIC0yMDgxLDE3ICsxNjM5LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICpzaG1lbV9mb2xsb3dfbGlua19pbmxpbmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyB2b2lkICpzaG1lbV9mb2xsb3dfc2hvcnRfc3ltbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCW5kX3NldF9saW5rKG5kLCBTSE1FTV9JKGRlbnRyeS0+ZF9pbm9kZSktPmlubGluZV9zeW1saW5rKTsKKwluZF9zZXRfbGluayhuZCwgU0hNRU1fSShkZW50cnktPmRfaW5vZGUpLT5zeW1saW5rKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKnNobWVtX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCWludCByZXMgPSBzaG1lbV9nZXRwYWdlKGRlbnRyeS0+ZF9pbm9kZSwgMCwgJnBhZ2UsIFNHUF9SRUFELCBOVUxMKTsKLQluZF9zZXRfbGluayhuZCwgcmVzID8gRVJSX1BUUihyZXMpIDoga21hcChwYWdlKSk7CisJaW50IGVycm9yID0gc2htZW1fZ2V0cGFnZShkZW50cnktPmRfaW5vZGUsIDAsICZwYWdlLCBTR1BfUkVBRCwgTlVMTCk7CisJbmRfc2V0X2xpbmsobmQsIGVycm9yID8gRVJSX1BUUihlcnJvcikgOiBrbWFwKHBhZ2UpKTsKIAlpZiAocGFnZSkKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIHBhZ2U7CkBAIC0yMjAyLDcgKzE3NjAsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpzaG1lbV94YXR0cl9oYW5kbGVyc1tdID0gewogI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKIAkmZ2VuZXJpY19hY2xfYWNjZXNzX2hhbmRsZXIsCkBAIC0yMzMyLDkgKzE4ODksOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19UTVBGU19YQVRUUiAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbmxpbmVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKLQkuZm9sbG93X2xpbmsJPSBzaG1lbV9mb2xsb3dfbGlua19pbmxpbmUsCisJLmZvbGxvd19saW5rCT0gc2htZW1fZm9sbG93X3Nob3J0X3N5bWxpbmssCiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSCiAJLnNldHhhdHRyCT0gc2htZW1fc2V0eGF0dHIsCiAJLmdldHhhdHRyCT0gc2htZW1fZ2V0eGF0dHIsCkBAIC0yNTM0LDggKzIwOTEsNyBAQAogCWlmIChjb25maWcubWF4X2lub2RlcyA8IGlub2RlcykKIAkJZ290byBvdXQ7CiAJLyoKLQkgKiBUaG9zZSB0ZXN0cyBhbHNvIGRpc2FsbG93IGxpbWl0ZWQtPnVubGltaXRlZCB3aGlsZSBhbnkgYXJlIGluCi0JICogdXNlLCBzbyBpX2Jsb2NrcyB3aWxsIGFsd2F5cyBiZSB6ZXJvIHdoZW4gbWF4X2Jsb2NrcyBpcyB6ZXJvOworCSAqIFRob3NlIHRlc3RzIGRpc2FsbG93IGxpbWl0ZWQtPnVubGltaXRlZCB3aGlsZSBhbnkgYXJlIGluIHVzZTsKIAkgKiBidXQgd2UgbXVzdCBzZXBhcmF0ZWx5IGRpc2FsbG93IHVubGltaXRlZC0+bGltaXRlZCwgYmVjYXVzZQogCSAqIGluIHRoYXQgY2FzZSB3ZSBoYXZlIG5vIHJlY29yZCBvZiBob3cgbXVjaCBpcyBhbHJlYWR5IGluIHVzZS4KIAkgKi8KQEAgLTI2MjcsNyArMjE4Myw3IEBACiAJCWdvdG8gZmFpbGVkOwogCXNiaW5mby0+ZnJlZV9pbm9kZXMgPSBzYmluZm8tPm1heF9pbm9kZXM7CiAKLQlzYi0+c19tYXhieXRlcyA9IFNITUVNX01BWF9CWVRFUzsKKwlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKIAlzYi0+c19tYWdpYyA9IFRNUEZTX01BR0lDOwpAQCAtMjY2MiwxNCArMjIxOCwxNCBAQAogCiBzdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICpwOwotCXAgPSAoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKilrbWVtX2NhY2hlX2FsbG9jKHNobWVtX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwKQorCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvOworCWluZm8gPSBrbWVtX2NhY2hlX2FsbG9jKHNobWVtX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gJnAtPnZmc19pbm9kZTsKKwlyZXR1cm4gJmluZm8tPnZmc19pbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgc2htZW1faV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCitzdGF0aWMgdm9pZCBzaG1lbV9kZXN0cm95X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9yY3UpOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOwpAQCAtMjY3OCwyOSArMjIzNCwyNiBAQAogCiBzdGF0aWMgdm9pZCBzaG1lbV9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaWYgKChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKSB7Ci0JCS8qIG9ubHkgc3RydWN0IGlub2RlIGlzIHZhbGlkIGlmIGl0J3MgYW4gaW5saW5lIHN5bWxpbmsgKi8KKwlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpCiAJCW1wb2xfZnJlZV9zaGFyZWRfcG9saWN5KCZTSE1FTV9JKGlub2RlKS0+cG9saWN5KTsKLQl9Ci0JY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgc2htZW1faV9jYWxsYmFjayk7CisJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgc2htZW1fZGVzdHJveV9jYWxsYmFjayk7CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pCitzdGF0aWMgdm9pZCBzaG1lbV9pbml0X2lub2RlKHZvaWQgKmZvbykKIHsKLQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqcCA9IChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqKSBmb287Ci0KLQlpbm9kZV9pbml0X29uY2UoJnAtPnZmc19pbm9kZSk7CisJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBmb287CisJaW5vZGVfaW5pdF9vbmNlKCZpbmZvLT52ZnNfaW5vZGUpOwogfQogCi1zdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQorc3RhdGljIGludCBzaG1lbV9pbml0X2lub2RlY2FjaGUodm9pZCkKIHsKIAlzaG1lbV9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2htZW1faW5vZGVfY2FjaGUiLAogCQkJCXNpemVvZihzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyksCi0JCQkJMCwgU0xBQl9QQU5JQywgaW5pdF9vbmNlKTsKKwkJCQkwLCBTTEFCX1BBTklDLCBzaG1lbV9pbml0X2lub2RlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCitzdGF0aWMgdm9pZCBzaG1lbV9kZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koc2htZW1faW5vZGVfY2FjaGVwKTsKIH0KQEAgLTI3OTcsMjEgKzIzNTAsMjAgQEAKICNlbmRpZgogfTsKIAotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqc2htZW1fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gbW91bnRfbm9kZXYoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIHNobWVtX2ZpbGxfc3VwZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdG1wZnNfZnNfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzaG1lbV9mc190eXBlID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidG1wZnMiLAogCS5tb3VudAkJPSBzaG1lbV9tb3VudCwKIAkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAogfTsKIAotaW50IF9faW5pdCBpbml0X3RtcGZzKHZvaWQpCitpbnQgX19pbml0IHNobWVtX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTI4MTksMTggKzIzNzEsMTggQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0NDsKIAotCWVycm9yID0gaW5pdF9pbm9kZWNhY2hlKCk7CisJZXJyb3IgPSBzaG1lbV9pbml0X2lub2RlY2FjaGUoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0MzsKIAotCWVycm9yID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmdG1wZnNfZnNfdHlwZSk7CisJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZzaG1lbV9mc190eXBlKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgdG1wZnNcbiIpOwogCQlnb3RvIG91dDI7CiAJfQogCi0Jc2htX21udCA9IHZmc19rZXJuX21vdW50KCZ0bXBmc19mc190eXBlLCBNU19OT1VTRVIsCi0JCQkJdG1wZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTsKKwlzaG1fbW50ID0gdmZzX2tlcm5fbW91bnQoJnNobWVtX2ZzX3R5cGUsIE1TX05PVVNFUiwKKwkJCQkgc2htZW1fZnNfdHlwZS5uYW1lLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHNobV9tbnQpKSB7CiAJCWVycm9yID0gUFRSX0VSUihzaG1fbW50KTsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3Qga2Vybl9tb3VudCB0bXBmc1xuIik7CkBAIC0yODM5LDkgKzIzOTEsOSBAQAogCXJldHVybiAwOwogCiBvdXQxOgotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmdG1wZnNfZnNfdHlwZSk7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZzaG1lbV9mc190eXBlKTsKIG91dDI6Ci0JZGVzdHJveV9pbm9kZWNhY2hlKCk7CisJc2htZW1fZGVzdHJveV9pbm9kZWNhY2hlKCk7CiBvdXQzOgogCWJkaV9kZXN0cm95KCZzaG1lbV9iYWNraW5nX2Rldl9pbmZvKTsKIG91dDQ6CkBAIC0yODQ5LDQ1ICsyNDAxLDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgotLyoqCi0gKiBtZW1fY2dyb3VwX2dldF9zaG1lbV90YXJnZXQgLSBmaW5kIGEgcGFnZSBvciBlbnRyeSBhc3NpZ25lZCB0byB0aGUgc2htZW0gZmlsZQotICogQGlub2RlOiB0aGUgaW5vZGUgdG8gYmUgc2VhcmNoZWQKLSAqIEBwZ29mZjogdGhlIG9mZnNldCB0byBiZSBzZWFyY2hlZAotICogQHBhZ2VwOiB0aGUgcG9pbnRlciBmb3IgdGhlIGZvdW5kIHBhZ2UgdG8gYmUgc3RvcmVkCi0gKiBAZW50OiB0aGUgcG9pbnRlciBmb3IgdGhlIGZvdW5kIHN3YXAgZW50cnkgdG8gYmUgc3RvcmVkCi0gKgotICogSWYgYSBwYWdlIGlzIGZvdW5kLCByZWZjb3VudCBvZiBpdCBpcyBpbmNyZW1lbnRlZC4gQ2FsbGVycyBzaG91bGQgaGFuZGxlCi0gKiB0aGVzZSByZWZjb3VudC4KLSAqLwotdm9pZCBtZW1fY2dyb3VwX2dldF9zaG1lbV90YXJnZXQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBwZ29mZiwKLQkJCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgc3dwX2VudHJ5X3QgKmVudCkKLXsKLQlzd3BfZW50cnlfdCBlbnRyeSA9IHsgLnZhbCA9IDAgfSwgKnB0cjsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0Jc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKLQotCWlmICgocGdvZmYgPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0JcHRyID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIHBnb2ZmLCBOVUxMKTsKLSNpZmRlZiBDT05GSUdfU1dBUAotCWlmIChwdHIgJiYgcHRyLT52YWwpIHsKLQkJZW50cnkudmFsID0gcHRyLT52YWw7Ci0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKCZzd2FwcGVyX3NwYWNlLCBlbnRyeS52YWwpOwotCX0gZWxzZQotI2VuZGlmCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIHBnb2ZmKTsKLQlpZiAocHRyKQotCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKLQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci1vdXQ6Ci0JKnBhZ2VwID0gcGFnZTsKLQkqZW50ID0gZW50cnk7Ci19Ci0jZW5kaWYKLQogI2Vsc2UgLyogIUNPTkZJR19TSE1FTSAqLwogCiAvKgpAQCAtMjkwMSwyMyArMjQxNCwyMyBAQAogCiAjaW5jbHVkZSA8bGludXgvcmFtZnMuaD4KIAotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHRtcGZzX2ZzX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgc2htZW1fZnNfdHlwZSA9IHsKIAkubmFtZQkJPSAidG1wZnMiLAogCS5tb3VudAkJPSByYW1mc19tb3VudCwKIAkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAogfTsKIAotaW50IF9faW5pdCBpbml0X3RtcGZzKHZvaWQpCitpbnQgX19pbml0IHNobWVtX2luaXQodm9pZCkKIHsKLQlCVUdfT04ocmVnaXN0ZXJfZmlsZXN5c3RlbSgmdG1wZnNfZnNfdHlwZSkgIT0gMCk7CisJQlVHX09OKHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnNobWVtX2ZzX3R5cGUpICE9IDApOwogCi0Jc2htX21udCA9IGtlcm5fbW91bnQoJnRtcGZzX2ZzX3R5cGUpOworCXNobV9tbnQgPSBrZXJuX21vdW50KCZzaG1lbV9mc190eXBlKTsKIAlCVUdfT04oSVNfRVJSKHNobV9tbnQpKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgc2htZW1fdW51c2Uoc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKQoraW50IHNobWVtX3VudXNlKHN3cF9lbnRyeV90IHN3YXAsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiAwOwogfQpAQCAtMjkyNyw0MyArMjQ0MCwxNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHNobWVtX3RydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCkKK3ZvaWQgc2htZW1fdHJ1bmNhdGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpCiB7Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXNfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgbHN0YXJ0LCBsZW5kKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNobWVtX3RydW5jYXRlX3JhbmdlKTsKIAotI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCi0vKioKLSAqIG1lbV9jZ3JvdXBfZ2V0X3NobWVtX3RhcmdldCAtIGZpbmQgYSBwYWdlIG9yIGVudHJ5IGFzc2lnbmVkIHRvIHRoZSBzaG1lbSBmaWxlCi0gKiBAaW5vZGU6IHRoZSBpbm9kZSB0byBiZSBzZWFyY2hlZAotICogQHBnb2ZmOiB0aGUgb2Zmc2V0IHRvIGJlIHNlYXJjaGVkCi0gKiBAcGFnZXA6IHRoZSBwb2ludGVyIGZvciB0aGUgZm91bmQgcGFnZSB0byBiZSBzdG9yZWQKLSAqIEBlbnQ6IHRoZSBwb2ludGVyIGZvciB0aGUgZm91bmQgc3dhcCBlbnRyeSB0byBiZSBzdG9yZWQKLSAqCi0gKiBJZiBhIHBhZ2UgaXMgZm91bmQsIHJlZmNvdW50IG9mIGl0IGlzIGluY3JlbWVudGVkLiBDYWxsZXJzIHNob3VsZCBoYW5kbGUKLSAqIHRoZXNlIHJlZmNvdW50LgotICovCi12b2lkIG1lbV9jZ3JvdXBfZ2V0X3NobWVtX3RhcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IHBnb2ZmLAotCQkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCBzd3BfZW50cnlfdCAqZW50KQotewotCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKLQotCWlmICgocGdvZmYgPDwgUEFHRV9DQUNIRV9TSElGVCkgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlnb3RvIG91dDsKLQlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBwZ29mZik7Ci1vdXQ6Ci0JKnBhZ2VwID0gcGFnZTsKLQkqZW50ID0gKHN3cF9lbnRyeV90KXsgLnZhbCA9IDAgfTsKLX0KLSNlbmRpZgotCiAjZGVmaW5lIHNobWVtX3ZtX29wcwkJCQlnZW5lcmljX2ZpbGVfdm1fb3BzCiAjZGVmaW5lIHNobWVtX2ZpbGVfb3BlcmF0aW9ucwkJCXJhbWZzX2ZpbGVfb3BlcmF0aW9ucwogI2RlZmluZSBzaG1lbV9nZXRfaW5vZGUoc2IsIGRpciwgbW9kZSwgZGV2LCBmbGFncykJcmFtZnNfZ2V0X2lub2RlKHNiLCBkaXIsIG1vZGUsIGRldikKICNkZWZpbmUgc2htZW1fYWNjdF9zaXplKGZsYWdzLCBzaXplKQkJMAogI2RlZmluZSBzaG1lbV91bmFjY3Rfc2l6ZShmbGFncywgc2l6ZSkJCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBTSE1FTV9NQVhfQllURVMJCQkJTUFYX0xGU19GSUxFU0laRQogCiAjZW5kaWYgLyogQ09ORklHX1NITUVNICovCiAKQEAgLTI5ODcsNyArMjQ3NCw3IEBACiAJaWYgKElTX0VSUihzaG1fbW50KSkKIAkJcmV0dXJuICh2b2lkICopc2htX21udDsKIAotCWlmIChzaXplIDwgMCB8fCBzaXplID4gU0hNRU1fTUFYX0JZVEVTKQorCWlmIChzaXplIDwgMCB8fCBzaXplID4gTUFYX0xGU19GSUxFU0laRSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKIAlpZiAoc2htZW1fYWNjdF9zaXplKGZsYWdzLCBzaXplKSkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAxZTUyM2VkLi42ZDkwYTA5IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC02MjIsNiArNjIyLDUxIEBACiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG9uX3NsYWJfbDNfa2V5Owogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBvbl9zbGFiX2FsY19rZXk7CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVidWdvYmpfbDNfa2V5Oworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBkZWJ1Z29ial9hbGNfa2V5OworCitzdGF0aWMgdm9pZCBzbGFiX3NldF9sb2NrX2NsYXNzZXMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsM19rZXksIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqYWxjX2tleSwKKwkJaW50IHEpCit7CisJc3RydWN0IGFycmF5X2NhY2hlICoqYWxjOworCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKKwlpbnQgcjsKKworCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbcV07CisJaWYgKCFsMykKKwkJcmV0dXJuOworCisJbG9ja2RlcF9zZXRfY2xhc3MoJmwzLT5saXN0X2xvY2ssIGwzX2tleSk7CisJYWxjID0gbDMtPmFsaWVuOworCS8qCisJICogRklYTUU6IFRoaXMgY2hlY2sgZm9yIEJBRF9BTElFTl9NQUdJQworCSAqIHNob3VsZCBnbyBhd2F5IHdoZW4gY29tbW9uIHNsYWIgY29kZSBpcyB0YXVnaHQgdG8KKwkgKiB3b3JrIGV2ZW4gd2l0aG91dCBhbGllbiBjYWNoZXMuCisJICogQ3VycmVudGx5LCBub24gTlVNQSBjb2RlIHJldHVybnMgQkFEX0FMSUVOX01BR0lDCisJICogZm9yIGFsbG9jX2FsaWVuX2NhY2hlLAorCSAqLworCWlmICghYWxjIHx8ICh1bnNpZ25lZCBsb25nKWFsYyA9PSBCQURfQUxJRU5fTUFHSUMpCisJCXJldHVybjsKKwlmb3JfZWFjaF9ub2RlKHIpIHsKKwkJaWYgKGFsY1tyXSkKKwkJCWxvY2tkZXBfc2V0X2NsYXNzKCZhbGNbcl0tPmxvY2ssIGFsY19rZXkpOworCX0KK30KKworc3RhdGljIHZvaWQgc2xhYl9zZXRfZGVidWdvYmpfbG9ja19jbGFzc2VzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgaW50IG5vZGUpCit7CisJc2xhYl9zZXRfbG9ja19jbGFzc2VzKGNhY2hlcCwgJmRlYnVnb2JqX2wzX2tleSwgJmRlYnVnb2JqX2FsY19rZXksIG5vZGUpOworfQorCitzdGF0aWMgdm9pZCBzbGFiX3NldF9kZWJ1Z29ial9sb2NrX2NsYXNzZXMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKK3sKKwlpbnQgbm9kZTsKKworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpCisJCXNsYWJfc2V0X2RlYnVnb2JqX2xvY2tfY2xhc3Nlc19ub2RlKGNhY2hlcCwgbm9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIGluaXRfbm9kZV9sb2NrX2tleXMoaW50IHEpCiB7CiAJc3RydWN0IGNhY2hlX3NpemVzICpzID0gbWFsbG9jX3NpemVzOwpAQCAtNjMwLDI5ICs2NzUsMTQgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChzID0gbWFsbG9jX3NpemVzOyBzLT5jc19zaXplICE9IFVMT05HX01BWDsgcysrKSB7Ci0JCXN0cnVjdCBhcnJheV9jYWNoZSAqKmFsYzsKIAkJc3RydWN0IGttZW1fbGlzdDMgKmwzOwotCQlpbnQgcjsKIAogCQlsMyA9IHMtPmNzX2NhY2hlcC0+bm9kZWxpc3RzW3FdOwogCQlpZiAoIWwzIHx8IE9GRl9TTEFCKHMtPmNzX2NhY2hlcCkpCiAJCQljb250aW51ZTsKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJmwzLT5saXN0X2xvY2ssICZvbl9zbGFiX2wzX2tleSk7Ci0JCWFsYyA9IGwzLT5hbGllbjsKLQkJLyoKLQkJICogRklYTUU6IFRoaXMgY2hlY2sgZm9yIEJBRF9BTElFTl9NQUdJQwotCQkgKiBzaG91bGQgZ28gYXdheSB3aGVuIGNvbW1vbiBzbGFiIGNvZGUgaXMgdGF1Z2h0IHRvCi0JCSAqIHdvcmsgZXZlbiB3aXRob3V0IGFsaWVuIGNhY2hlcy4KLQkJICogQ3VycmVudGx5LCBub24gTlVNQSBjb2RlIHJldHVybnMgQkFEX0FMSUVOX01BR0lDCi0JCSAqIGZvciBhbGxvY19hbGllbl9jYWNoZSwKLQkJICovCi0JCWlmICghYWxjIHx8ICh1bnNpZ25lZCBsb25nKWFsYyA9PSBCQURfQUxJRU5fTUFHSUMpCi0JCQljb250aW51ZTsKLQkJZm9yX2VhY2hfbm9kZShyKSB7Ci0JCQlpZiAoYWxjW3JdKQotCQkJCWxvY2tkZXBfc2V0X2NsYXNzKCZhbGNbcl0tPmxvY2ssCi0JCQkJCSZvbl9zbGFiX2FsY19rZXkpOwotCQl9CisKKwkJc2xhYl9zZXRfbG9ja19jbGFzc2VzKHMtPmNzX2NhY2hlcCwgJm9uX3NsYWJfbDNfa2V5LAorCQkJCSZvbl9zbGFiX2FsY19rZXksIHEpOwogCX0KIH0KIApAQCAtNjcxLDYgKzcwMSwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfbG9ja19rZXlzKHZvaWQpCiB7CiB9CisKK3N0YXRpYyB2b2lkIHNsYWJfc2V0X2RlYnVnb2JqX2xvY2tfY2xhc3Nlc19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBub2RlKQoreworfQorCitzdGF0aWMgdm9pZCBzbGFiX3NldF9kZWJ1Z29ial9sb2NrX2NsYXNzZXMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKK3sKK30KICNlbmRpZgogCiAvKgpAQCAtMTI2NCw2ICsxMzAyLDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKIAkJa2ZyZWUoc2hhcmVkKTsKIAkJZnJlZV9hbGllbl9jYWNoZShhbGllbik7CisJCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9ERUJVR19PQkpFQ1RTKQorCQkJc2xhYl9zZXRfZGVidWdvYmpfbG9ja19jbGFzc2VzX25vZGUoY2FjaGVwLCBub2RlKTsKIAl9CiAJaW5pdF9ub2RlX2xvY2tfa2V5cyhub2RlKTsKIApAQCAtMTYyNiw2ICsxNjY2LDkgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwogCisJLyogQW5ub3RhdGUgc2xhYiBmb3IgbG9ja2RlcCAtLSBhbm5vdGF0ZSB0aGUgbWFsbG9jIGNhY2hlcyAqLworCWluaXRfbG9ja19rZXlzKCk7CisKIAkvKiA2KSByZXNpemUgdGhlIGhlYWQgYXJyYXlzIHRvIHRoZWlyIGZpbmFsIHNpemVzICovCiAJbXV0ZXhfbG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpCkBAIC0xNjM2LDkgKzE2NzksNiBAQAogCS8qIERvbmUhICovCiAJZ19jcHVjYWNoZV91cCA9IEZVTEw7CiAKLQkvKiBBbm5vdGF0ZSBzbGFiIGZvciBsb2NrZGVwIC0tIGFubm90YXRlIHRoZSBtYWxsb2MgY2FjaGVzICovCi0JaW5pdF9sb2NrX2tleXMoKTsKLQogCS8qCiAJICogUmVnaXN0ZXIgYSBjcHUgc3RhcnR1cCBub3RpZmllciBjYWxsYmFjayB0aGF0IGluaXRpYWxpemVzCiAJICogY3B1X2NhY2hlX2dldCBmb3IgYWxsIG5ldyBjcHVzCkBAIC0yNDI2LDYgKzI0NjYsMTYgQEAKIAkJZ290byBvb3BzOwogCX0KIAorCWlmIChmbGFncyAmIFNMQUJfREVCVUdfT0JKRUNUUykgeworCQkvKgorCQkgKiBXb3VsZCBkZWFkbG9jayB0aHJvdWdoIHNsYWJfZGVzdHJveSgpLT5jYWxsX3JjdSgpLT4KKwkJICogZGVidWdfb2JqZWN0X2FjdGl2YXRlKCktPmttZW1fY2FjaGVfYWxsb2MoKS4KKwkJICovCisJCVdBUk5fT05fT05DRShmbGFncyAmIFNMQUJfREVTVFJPWV9CWV9SQ1UpOworCisJCXNsYWJfc2V0X2RlYnVnb2JqX2xvY2tfY2xhc3NlcyhjYWNoZXApOworCX0KKwogCS8qIGNhY2hlIHNldHVwIGNvbXBsZXRlZCwgbGluayBpdCBpbnRvIHRoZSBsaXN0ICovCiAJbGlzdF9hZGQoJmNhY2hlcC0+bmV4dCwgJmNhY2hlX2NoYWluKTsKIG9vcHM6CkBAIC0zNDAzLDcgKzM0NTMsNyBAQAogCWNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYmVmb3JlKGNhY2hlcCwgZmxhZ3MpOwogCWxvY2FsX2lycV9zYXZlKHNhdmVfZmxhZ3MpOwogCi0JaWYgKG5vZGVpZCA9PSAtMSkKKwlpZiAobm9kZWlkID09IE5VTUFfTk9fTk9ERSkKIAkJbm9kZWlkID0gc2xhYl9ub2RlOwogCiAJaWYgKHVubGlrZWx5KCFjYWNoZXAtPm5vZGVsaXN0c1tub2RlaWRdKSkgewpAQCAtMzkzNCw3ICszOTg0LDcgQEAKIAogc3RydWN0IGNjdXBkYXRlX3N0cnVjdCB7CiAJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKLQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKm5ld1tOUl9DUFVTXTsKKwlzdHJ1Y3QgYXJyYXlfY2FjaGUgKm5ld1swXTsKIH07CiAKIHN0YXRpYyB2b2lkIGRvX2NjdXBkYXRlX2xvY2FsKHZvaWQgKmluZm8pCkBAIC0zOTU2LDcgKzQwMDYsOCBAQAogCXN0cnVjdCBjY3VwZGF0ZV9zdHJ1Y3QgKm5ldzsKIAlpbnQgaTsKIAotCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXcpLCBnZnApOworCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXcpICsgbnJfY3B1X2lkcyAqIHNpemVvZihzdHJ1Y3QgYXJyYXlfY2FjaGUgKiksCisJCSAgICAgIGdmcCk7CiAJaWYgKCFuZXcpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZjhmNWU4ZS4uOWY2NjJkNyAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMiwxMCArMiwxMSBAQAogICogU0xVQjogQSBzbGFiIGFsbG9jYXRvciB0aGF0IGxpbWl0cyBjYWNoZSBsaW5lIHVzZSBpbnN0ZWFkIG9mIHF1ZXVpbmcKICAqIG9iamVjdHMgaW4gcGVyIGNwdSBhbmQgcGVyIG5vZGUgbGlzdHMuCiAgKgotICogVGhlIGFsbG9jYXRvciBzeW5jaHJvbml6ZXMgdXNpbmcgcGVyIHNsYWIgbG9ja3MgYW5kIG9ubHkKLSAqIHVzZXMgYSBjZW50cmFsaXplZCBsb2NrIHRvIG1hbmFnZSBhIHBvb2wgb2YgcGFydGlhbCBzbGFicy4KKyAqIFRoZSBhbGxvY2F0b3Igc3luY2hyb25pemVzIHVzaW5nIHBlciBzbGFiIGxvY2tzIG9yIGF0b21pYyBvcGVyYXRpb3MKKyAqIGFuZCBvbmx5IHVzZXMgYSBjZW50cmFsaXplZCBsb2NrIHRvIG1hbmFnZSBhIHBvb2wgb2YgcGFydGlhbCBzbGFicy4KICAqCiAgKiAoQykgMjAwNyBTR0ksIENocmlzdG9waCBMYW1ldGVyCisgKiAoQykgMjAxMSBMaW51eCBGb3VuZGF0aW9uLCBDaHJpc3RvcGggTGFtZXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMzMsMTUgKzM0LDI3IEBACiAKIC8qCiAgKiBMb2NrIG9yZGVyOgotICogICAxLiBzbGFiX2xvY2socGFnZSkKLSAqICAgMi4gc2xhYi0+bGlzdF9sb2NrCisgKiAgIDEuIHNsdWJfbG9jayAoR2xvYmFsIFNlbWFwaG9yZSkKKyAqICAgMi4gbm9kZS0+bGlzdF9sb2NrCisgKiAgIDMuIHNsYWJfbG9jayhwYWdlKSAoT25seSBvbiBzb21lIGFyY2hlcyBhbmQgZm9yIGRlYnVnZ2luZykKICAqCi0gKiAgIFRoZSBzbGFiX2xvY2sgcHJvdGVjdHMgb3BlcmF0aW9ucyBvbiB0aGUgb2JqZWN0IG9mIGEgcGFydGljdWxhcgotICogICBzbGFiIGFuZCBpdHMgbWV0YWRhdGEgaW4gdGhlIHBhZ2Ugc3RydWN0LiBJZiB0aGUgc2xhYiBsb2NrCi0gKiAgIGhhcyBiZWVuIHRha2VuIHRoZW4gbm8gYWxsb2NhdGlvbnMgbm9yIGZyZWVzIGNhbiBiZSBwZXJmb3JtZWQKLSAqICAgb24gdGhlIG9iamVjdHMgaW4gdGhlIHNsYWIgbm9yIGNhbiB0aGUgc2xhYiBiZSBhZGRlZCBvciByZW1vdmVkCi0gKiAgIGZyb20gdGhlIHBhcnRpYWwgb3IgZnVsbCBsaXN0cyBzaW5jZSB0aGlzIHdvdWxkIG1lYW4gbW9kaWZ5aW5nCi0gKiAgIHRoZSBwYWdlX3N0cnVjdCBvZiB0aGUgc2xhYi4KKyAqICAgc2x1Yl9sb2NrCisgKgorICogICBUaGUgcm9sZSBvZiB0aGUgc2x1Yl9sb2NrIGlzIHRvIHByb3RlY3QgdGhlIGxpc3Qgb2YgYWxsIHRoZSBzbGFicworICogICBhbmQgdG8gc3luY2hyb25pemUgbWFqb3IgbWV0YWRhdGEgY2hhbmdlcyB0byBzbGFiIGNhY2hlIHN0cnVjdHVyZXMuCisgKgorICogICBUaGUgc2xhYl9sb2NrIGlzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIGFuZCBvbiBhcmNoZXMgdGhhdCBkbyBub3QKKyAqICAgaGF2ZSB0aGUgYWJpbGl0eSB0byBkbyBhIGNtcHhjaGdfZG91YmxlLiBJdCBvbmx5IHByb3RlY3RzIHRoZSBzZWNvbmQKKyAqICAgZG91YmxlIHdvcmQgaW4gdGhlIHBhZ2Ugc3RydWN0LiBNZWFuaW5nCisgKglBLiBwYWdlLT5mcmVlbGlzdAktPiBMaXN0IG9mIG9iamVjdCBmcmVlIGluIGEgcGFnZQorICoJQi4gcGFnZS0+Y291bnRlcnMJLT4gQ291bnRlcnMgb2Ygb2JqZWN0cworICoJQy4gcGFnZS0+ZnJvemVuCQktPiBmcm96ZW4gc3RhdGUKKyAqCisgKiAgIElmIGEgc2xhYiBpcyBmcm96ZW4gdGhlbiBpdCBpcyBleGVtcHQgZnJvbSBsaXN0IG1hbmFnZW1lbnQuIEl0IGlzIG5vdAorICogICBvbiBhbnkgbGlzdC4gVGhlIHByb2Nlc3NvciB0aGF0IGZyb3plIHRoZSBzbGFiIGlzIHRoZSBvbmUgd2hvIGNhbgorICogICBwZXJmb3JtIGxpc3Qgb3BlcmF0aW9ucyBvbiB0aGUgcGFnZS4gT3RoZXIgcHJvY2Vzc29ycyBtYXkgcHV0IG9iamVjdHMKKyAqICAgb250byB0aGUgZnJlZWxpc3QgYnV0IHRoZSBwcm9jZXNzb3IgdGhhdCBmcm96ZSB0aGUgc2xhYiBpcyB0aGUgb25seQorICogICBvbmUgdGhhdCBjYW4gcmV0cmlldmUgdGhlIG9iamVjdHMgZnJvbSB0aGUgcGFnZSdzIGZyZWVsaXN0LgogICoKICAqICAgVGhlIGxpc3RfbG9jayBwcm90ZWN0cyB0aGUgcGFydGlhbCBhbmQgZnVsbCBsaXN0IG9uIGVhY2ggbm9kZSBhbmQKICAqICAgdGhlIHBhcnRpYWwgc2xhYiBjb3VudGVyLiBJZiB0YWtlbiB0aGVuIG5vIG5ldyBzbGFicyBtYXkgYmUgYWRkZWQgb3IKQEAgLTU0LDIwICs2Nyw2IEBACiAgKiAgIHNsYWJzLCBvcGVyYXRpb25zIGNhbiBjb250aW51ZSB3aXRob3V0IGFueSBjZW50cmFsaXplZCBsb2NrLiBGLmUuCiAgKiAgIGFsbG9jYXRpbmcgYSBsb25nIHNlcmllcyBvZiBvYmplY3RzIHRoYXQgZmlsbCB1cCBzbGFicyBkb2VzIG5vdCByZXF1aXJlCiAgKiAgIHRoZSBsaXN0IGxvY2suCi0gKgotICogICBUaGUgbG9jayBvcmRlciBpcyBzb21ldGltZXMgaW52ZXJ0ZWQgd2hlbiB3ZSBhcmUgdHJ5aW5nIHRvIGdldCBhIHNsYWIKLSAqICAgb2ZmIGEgbGlzdC4gV2UgdGFrZSB0aGUgbGlzdF9sb2NrIGFuZCB0aGVuIGxvb2sgZm9yIGEgcGFnZSBvbiB0aGUgbGlzdAotICogICB0byB1c2UuIFdoaWxlIHdlIGRvIHRoYXQgb2JqZWN0cyBpbiB0aGUgc2xhYnMgbWF5IGJlIGZyZWVkLiBXZSBjYW4KLSAqICAgb25seSBvcGVyYXRlIG9uIHRoZSBzbGFiIGlmIHdlIGhhdmUgYWxzbyB0YWtlbiB0aGUgc2xhYl9sb2NrLiBTbyB3ZSB1c2UKLSAqICAgYSBzbGFiX3RyeWxvY2soKSBvbiB0aGUgc2xhYi4gSWYgdHJ5bG9jayB3YXMgc3VjY2Vzc2Z1bCB0aGVuIG5vIGZyZWVzCi0gKiAgIGNhbiBvY2N1ciBhbnltb3JlIGFuZCB3ZSBjYW4gdXNlIHRoZSBzbGFiIGZvciBhbGxvY2F0aW9ucyBldGMuIElmIHRoZQotICogICBzbGFiX3RyeWxvY2soKSBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gZnJlZXMgYXJlIGluIHByb2dyZXNzIGluIHRoZSBzbGFiIGFuZAotICogICB3ZSBtdXN0IHN0YXkgYXdheSBmcm9tIGl0IGZvciBhIHdoaWxlIHNpbmNlIHdlIG1heSBjYXVzZSBhIGJvdW5jaW5nCi0gKiAgIGNhY2hlbGluZSBpZiB3ZSB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jay4gU28gZ28gb250byB0aGUgbmV4dCBzbGFiLgotICogICBJZiBhbGwgcGFnZXMgYXJlIGJ1c3kgdGhlbiB3ZSBtYXkgYWxsb2NhdGUgYSBuZXcgc2xhYiBpbnN0ZWFkIG9mIHJldXNpbmcKLSAqICAgYSBwYXJ0aWFsIHNsYWIuIEEgbmV3IHNsYWIgaGFzIG5vIG9uZSBvcGVyYXRpbmcgb24gaXQgYW5kIHRodXMgdGhlcmUgaXMKLSAqICAgbm8gZGFuZ2VyIG9mIGNhY2hlbGluZSBjb250ZW50aW9uLgotICoKICAqICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgZHVyaW5nIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbiBvcmRlciB0bwogICogICBtYWtlIHRoZSBzbGFiIGFsbG9jYXRvciBzYWZlIHRvIHVzZSBpbiB0aGUgY29udGV4dCBvZiBhbiBpcnEuIEluIGFkZGl0aW9uCiAgKiAgIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzb3IgZG9lcyBub3QgY2hhbmdlCkBAIC0xMzIsNiArMTMxLDkgQEAKIC8qIEVuYWJsZSB0byB0ZXN0IHJlY292ZXJ5IGZyb20gc2xhYiBjb3JydXB0aW9uIG9uIGJvb3QgKi8KICN1bmRlZiBTTFVCX1JFU0lMSUVOQ1lfVEVTVAogCisvKiBFbmFibGUgdG8gbG9nIGNtcHhjaGcgZmFpbHVyZXMgKi8KKyN1bmRlZiBTTFVCX0RFQlVHX0NNUFhDSEcKKwogLyoKICAqIE1pbmludW0gbnVtYmVyIG9mIHBhcnRpYWwgc2xhYnMuIFRoZXNlIHdpbGwgYmUgbGVmdCBvbiB0aGUgcGFydGlhbAogICogbGlzdHMgZXZlbiBpZiB0aGV5IGFyZSBlbXB0eS4ga21lbV9jYWNoZV9zaHJpbmsgbWF5IHJlY2xhaW0gdGhlbS4KQEAgLTE2NywxMCArMTY5LDExIEBACiAKICNkZWZpbmUgT09fU0hJRlQJMTYKICNkZWZpbmUgT09fTUFTSwkJKCgxIDw8IE9PX1NISUZUKSAtIDEpCi0jZGVmaW5lIE1BWF9PQkpTX1BFUl9QQUdFCTY1NTM1IC8qIHNpbmNlIHBhZ2Uub2JqZWN0cyBpcyB1MTYgKi8KKyNkZWZpbmUgTUFYX09CSlNfUEVSX1BBR0UJMzI3NjcgLyogc2luY2UgcGFnZS5vYmplY3RzIGlzIHUxNSAqLwogCiAvKiBJbnRlcm5hbCBTTFVCIGZsYWdzICovCiAjZGVmaW5lIF9fT0JKRUNUX1BPSVNPTgkJMHg4MDAwMDAwMFVMIC8qIFBvaXNvbiBvYmplY3QgKi8KKyNkZWZpbmUgX19DTVBYQ0hHX0RPVUJMRQkweDQwMDAwMDAwVUwgLyogVXNlIGNtcHhjaGdfZG91YmxlICovCiAKIHN0YXRpYyBpbnQga21lbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlKTsKIApAQCAtMzQzLDExICszNDYsOTkgQEAKIAlyZXR1cm4geC54ICYgT09fTUFTSzsKIH0KIAorLyoKKyAqIFBlciBzbGFiIGxvY2tpbmcgdXNpbmcgdGhlIHBhZ2Vsb2NrCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzbGFiX2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJYml0X3NwaW5fbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzbGFiX3VubG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2JpdF9zcGluX3VubG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7Cit9CisKKy8qIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCAoZm9yIHRoZSBmYWxsYmFjayBjb2RlIHRvIHdvcmsgcmlnaHQpICovCitzdGF0aWMgaW5saW5lIGJvb2wgX19jbXB4Y2hnX2RvdWJsZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdm9pZCAqZnJlZWxpc3Rfb2xkLCB1bnNpZ25lZCBsb25nIGNvdW50ZXJzX29sZCwKKwkJdm9pZCAqZnJlZWxpc3RfbmV3LCB1bnNpZ25lZCBsb25nIGNvdW50ZXJzX25ldywKKwkJY29uc3QgY2hhciAqbikKK3sKKwlWTV9CVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfRE9VQkxFCisJaWYgKHMtPmZsYWdzICYgX19DTVBYQ0hHX0RPVUJMRSkgeworCQlpZiAoY21weGNoZ19kb3VibGUoJnBhZ2UtPmZyZWVsaXN0LAorCQkJZnJlZWxpc3Rfb2xkLCBjb3VudGVyc19vbGQsCisJCQlmcmVlbGlzdF9uZXcsIGNvdW50ZXJzX25ldykpCisJCXJldHVybiAxOworCX0gZWxzZQorI2VuZGlmCisJeworCQlzbGFiX2xvY2socGFnZSk7CisJCWlmIChwYWdlLT5mcmVlbGlzdCA9PSBmcmVlbGlzdF9vbGQgJiYgcGFnZS0+Y291bnRlcnMgPT0gY291bnRlcnNfb2xkKSB7CisJCQlwYWdlLT5mcmVlbGlzdCA9IGZyZWVsaXN0X25ldzsKKwkJCXBhZ2UtPmNvdW50ZXJzID0gY291bnRlcnNfbmV3OworCQkJc2xhYl91bmxvY2socGFnZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzbGFiX3VubG9jayhwYWdlKTsKKwl9CisKKwljcHVfcmVsYXgoKTsKKwlzdGF0KHMsIENNUFhDSEdfRE9VQkxFX0ZBSUwpOworCisjaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXM6IGNtcHhjaGcgZG91YmxlIHJlZG8gIiwgbiwgcy0+bmFtZSk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY21weGNoZ19kb3VibGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXZvaWQgKmZyZWVsaXN0X29sZCwgdW5zaWduZWQgbG9uZyBjb3VudGVyc19vbGQsCisJCXZvaWQgKmZyZWVsaXN0X25ldywgdW5zaWduZWQgbG9uZyBjb3VudGVyc19uZXcsCisJCWNvbnN0IGNoYXIgKm4pCit7CisjaWZkZWYgQ09ORklHX0NNUFhDSEdfRE9VQkxFCisJaWYgKHMtPmZsYWdzICYgX19DTVBYQ0hHX0RPVUJMRSkgeworCQlpZiAoY21weGNoZ19kb3VibGUoJnBhZ2UtPmZyZWVsaXN0LAorCQkJZnJlZWxpc3Rfb2xkLCBjb3VudGVyc19vbGQsCisJCQlmcmVlbGlzdF9uZXcsIGNvdW50ZXJzX25ldykpCisJCXJldHVybiAxOworCX0gZWxzZQorI2VuZGlmCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJc2xhYl9sb2NrKHBhZ2UpOworCQlpZiAocGFnZS0+ZnJlZWxpc3QgPT0gZnJlZWxpc3Rfb2xkICYmIHBhZ2UtPmNvdW50ZXJzID09IGNvdW50ZXJzX29sZCkgeworCQkJcGFnZS0+ZnJlZWxpc3QgPSBmcmVlbGlzdF9uZXc7CisJCQlwYWdlLT5jb3VudGVycyA9IGNvdW50ZXJzX25ldzsKKwkJCXNsYWJfdW5sb2NrKHBhZ2UpOworCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc2xhYl91bmxvY2socGFnZSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwljcHVfcmVsYXgoKTsKKwlzdGF0KHMsIENNUFhDSEdfRE9VQkxFX0ZBSUwpOworCisjaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXM6IGNtcHhjaGcgZG91YmxlIHJlZG8gIiwgbiwgcy0+bmFtZSk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIC8qCiAgKiBEZXRlcm1pbmUgYSBtYXAgb2Ygb2JqZWN0IGluIHVzZSBvbiBhIHBhZ2UuCiAgKgotICogU2xhYiBsb2NrIG9yIG5vZGUgbGlzdGxvY2sgbXVzdCBiZSBoZWxkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBwYWdlIGRvZXMKKyAqIE5vZGUgbGlzdGxvY2sgbXVzdCBiZSBoZWxkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBwYWdlIGRvZXMKICAqIG5vdCB2YW5pc2ggZnJvbSB1bmRlciB1cy4KICAqLwogc3RhdGljIHZvaWQgZ2V0X21hcChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgKm1hcCkKQEAgLTYxMCw3ICs3MDEsNyBAQAogCQlyZXR1cm4gY2hlY2tfYnl0ZXM4KHN0YXJ0LCB2YWx1ZSwgYnl0ZXMpOwogCiAJdmFsdWU2NCA9IHZhbHVlIHwgdmFsdWUgPDwgOCB8IHZhbHVlIDw8IDE2IHwgdmFsdWUgPDwgMjQ7Ci0JdmFsdWU2NCA9IHZhbHVlNjQgfCB2YWx1ZTY0IDw8IDMyOworCXZhbHVlNjQgPSAodmFsdWU2NCAmIDB4ZmZmZmZmZmYpIHwgdmFsdWU2NCA8PCAzMjsKIAlwcmVmaXggPSA4IC0gKCh1bnNpZ25lZCBsb25nKXN0YXJ0KSAlIDg7CiAKIAlpZiAocHJlZml4KSB7CkBAIC04MzgsMTAgKzkyOSwxMSBAQAogc3RhdGljIGludCBvbl9mcmVlbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKnNlYXJjaCkKIHsKIAlpbnQgbnIgPSAwOwotCXZvaWQgKmZwID0gcGFnZS0+ZnJlZWxpc3Q7CisJdm9pZCAqZnA7CiAJdm9pZCAqb2JqZWN0ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1heF9vYmplY3RzOwogCisJZnAgPSBwYWdlLT5mcmVlbGlzdDsKIAl3aGlsZSAoZnAgJiYgbnIgPD0gcGFnZS0+b2JqZWN0cykgewogCQlpZiAoZnAgPT0gc2VhcmNoKQogCQkJcmV0dXJuIDE7CkBAIC05NDYsMjYgKzEwMzgsMjcgQEAKIAogLyoKICAqIFRyYWNraW5nIG9mIGZ1bGx5IGFsbG9jYXRlZCBzbGFicyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICoKKyAqIGxpc3RfbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KLXN0YXRpYyB2b2lkIGFkZF9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIHZvaWQgYWRkX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsCisJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3Bpbl9sb2NrKCZuLT5saXN0X2xvY2spOwotCWxpc3RfYWRkKCZwYWdlLT5scnUsICZuLT5mdWxsKTsKLQlzcGluX3VubG9jaygmbi0+bGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX2Z1bGwoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm47Ci0KIAlpZiAoIShzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCiAJCXJldHVybjsKIAotCW4gPSBnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSk7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm4tPmZ1bGwpOworfQogCi0Jc3Bpbl9sb2NrKCZuLT5saXN0X2xvY2spOworLyoKKyAqIGxpc3RfbG9jayBtdXN0IGJlIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoIShzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCisJCXJldHVybjsKKwogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCXNwaW5fdW5sb2NrKCZuLT5saXN0X2xvY2spOwogfQogCiAvKiBUcmFja2luZyBvZiB0aGUgbnVtYmVyIG9mIHNsYWJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KQEAgLTEwMjEsMTEgKzExMTQsNiBAQAogCWlmICghY2hlY2tfc2xhYihzLCBwYWdlKSkKIAkJZ290byBiYWQ7CiAKLQlpZiAoIW9uX2ZyZWVsaXN0KHMsIHBhZ2UsIG9iamVjdCkpIHsKLQkJb2JqZWN0X2VycihzLCBwYWdlLCBvYmplY3QsICJPYmplY3QgYWxyZWFkeSBhbGxvY2F0ZWQiKTsKLQkJZ290byBiYWQ7Ci0JfQotCiAJaWYgKCFjaGVja192YWxpZF9wb2ludGVyKHMsIHBhZ2UsIG9iamVjdCkpIHsKIAkJb2JqZWN0X2VycihzLCBwYWdlLCBvYmplY3QsICJGcmVlbGlzdCBQb2ludGVyIGNoZWNrIGZhaWxzIik7CiAJCWdvdG8gYmFkOwpAQCAtMTA1OCw2ICsxMTQ2LDEyIEBACiBzdGF0aWMgbm9pbmxpbmUgaW50IGZyZWVfZGVidWdfcHJvY2Vzc2luZyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpvYmplY3QsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc2xhYl9sb2NrKHBhZ2UpOworCiAJaWYgKCFjaGVja19zbGFiKHMsIHBhZ2UpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTEwNzIsNyArMTE2Niw3IEBACiAJfQogCiAJaWYgKCFjaGVja19vYmplY3QocywgcGFnZSwgb2JqZWN0LCBTTFVCX1JFRF9BQ1RJVkUpKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAKIAlpZiAodW5saWtlbHkocyAhPSBwYWdlLT5zbGFiKSkgewogCQlpZiAoIVBhZ2VTbGFiKHBhZ2UpKSB7CkBAIC0xMDg5LDE4ICsxMTgzLDE5IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQkvKiBTcGVjaWFsIGRlYnVnIGFjdGl2aXRpZXMgZm9yIGZyZWVpbmcgb2JqZWN0cyAqLwotCWlmICghUGFnZVNsdWJGcm96ZW4ocGFnZSkgJiYgIXBhZ2UtPmZyZWVsaXN0KQotCQlyZW1vdmVfZnVsbChzLCBwYWdlKTsKIAlpZiAocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpCiAJCXNldF90cmFjayhzLCBvYmplY3QsIFRSQUNLX0ZSRUUsIGFkZHIpOwogCXRyYWNlKHMsIHBhZ2UsIG9iamVjdCwgMCk7CiAJaW5pdF9vYmplY3Qocywgb2JqZWN0LCBTTFVCX1JFRF9JTkFDVElWRSk7Ci0JcmV0dXJuIDE7CisJcmMgPSAxOworb3V0OgorCXNsYWJfdW5sb2NrKHBhZ2UpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcmM7CiAKIGZhaWw6CiAJc2xhYl9maXgocywgIk9iamVjdCBhdCAweCVwIG5vdCBmcmVlZCIsIG9iamVjdCk7Ci0JcmV0dXJuIDA7CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfZGVidWcoY2hhciAqc3RyKQpAQCAtMTIwMCw3ICsxMjk1LDkgQEAKIAkJCXsgcmV0dXJuIDE7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQl2b2lkICpvYmplY3QsIHU4IHZhbCkgeyByZXR1cm4gMTsgfQotc3RhdGljIGlubGluZSB2b2lkIGFkZF9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4sIHN0cnVjdCBwYWdlICpwYWdlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGFkZF9mdWxsKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAorCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZnVsbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpIHt9CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga21lbV9jYWNoZV9mbGFncyh1bnNpZ25lZCBsb25nIG9ianNpemUsCiAJdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqbmFtZSwKIAl2b2lkICgqY3Rvcikodm9pZCAqKSkKQEAgLTEyNTIsNiArMTM0OSwxMSBAQAogCXN0cnVjdCBrbWVtX2NhY2hlX29yZGVyX29iamVjdHMgb28gPSBzLT5vbzsKIAlnZnBfdCBhbGxvY19nZnA7CiAKKwlmbGFncyAmPSBnZnBfYWxsb3dlZF9tYXNrOworCisJaWYgKGZsYWdzICYgX19HRlBfV0FJVCkKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCiAJZmxhZ3MgfD0gcy0+YWxsb2NmbGFnczsKIAogCS8qCkBAIC0xMjY4LDEyICsxMzcwLDE3IEBACiAJCSAqIFRyeSBhIGxvd2VyIG9yZGVyIGFsbG9jIGlmIHBvc3NpYmxlCiAJCSAqLwogCQlwYWdlID0gYWxsb2Nfc2xhYl9wYWdlKGZsYWdzLCBub2RlLCBvbyk7Ci0JCWlmICghcGFnZSkKLQkJCXJldHVybiBOVUxMOwogCi0JCXN0YXQocywgT1JERVJfRkFMTEJBQ0spOworCQlpZiAocGFnZSkKKwkJCXN0YXQocywgT1JERVJfRkFMTEJBQ0spOwogCX0KIAorCWlmIChmbGFncyAmIF9fR0ZQX1dBSVQpCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCiAJaWYgKGttZW1jaGVja19lbmFibGVkCiAJCSYmICEocy0+ZmxhZ3MgJiAoU0xBQl9OT1RSQUNLIHwgREVCVUdfREVGQVVMVF9GTEFHUykpKSB7CiAJCWludCBwYWdlcyA9IDEgPDwgb29fb3JkZXIob28pOwpAQCAtMTM0MSw2ICsxNDQ4LDcgQEAKIAogCXBhZ2UtPmZyZWVsaXN0ID0gc3RhcnQ7CiAJcGFnZS0+aW51c2UgPSAwOworCXBhZ2UtPmZyb3plbiA9IDE7CiBvdXQ6CiAJcmV0dXJuIHBhZ2U7CiB9CkBAIC0xNDE4LDc3ICsxNTI2LDg3IEBACiB9CiAKIC8qCi0gKiBQZXIgc2xhYiBsb2NraW5nIHVzaW5nIHRoZSBwYWdlbG9jaworICogTWFuYWdlbWVudCBvZiBwYXJ0aWFsbHkgYWxsb2NhdGVkIHNsYWJzLgorICoKKyAqIGxpc3RfbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzbGFiX2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JYml0X3NwaW5fbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7Ci19Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzbGFiX3VubG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlfX2JpdF9zcGluX3VubG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7Ci19Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHNsYWJfdHJ5bG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpbnQgcmMgPSAxOwotCi0JcmMgPSBiaXRfc3Bpbl90cnlsb2NrKFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBNYW5hZ2VtZW50IG9mIHBhcnRpYWxseSBhbGxvY2F0ZWQgc2xhYnMKLSAqLwotc3RhdGljIHZvaWQgYWRkX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAogCQkJCXN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdGFpbCkKIHsKLQlzcGluX2xvY2soJm4tPmxpc3RfbG9jayk7CiAJbi0+bnJfcGFydGlhbCsrOwogCWlmICh0YWlsKQogCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZuLT5wYXJ0aWFsKTsKIAllbHNlCiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZuLT5wYXJ0aWFsKTsKLQlzcGluX3VubG9jaygmbi0+bGlzdF9sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKKy8qCisgKiBsaXN0X2xvY2sgbXVzdCBiZSBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiwKIAkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJbi0+bnJfcGFydGlhbC0tOwogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0Jc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKLQotCXNwaW5fbG9jaygmbi0+bGlzdF9sb2NrKTsKLQlfX3JlbW92ZV9wYXJ0aWFsKG4sIHBhZ2UpOwotCXNwaW5fdW5sb2NrKCZuLT5saXN0X2xvY2spOwotfQotCiAvKgotICogTG9jayBzbGFiIGFuZCByZW1vdmUgZnJvbSB0aGUgcGFydGlhbCBsaXN0LgorICogTG9jayBzbGFiLCByZW1vdmUgZnJvbSB0aGUgcGFydGlhbCBsaXN0IGFuZCBwdXQgdGhlIG9iamVjdCBpbnRvIHRoZQorICogcGVyIGNwdSBmcmVlbGlzdC4KICAqCiAgKiBNdXN0IGhvbGQgbGlzdF9sb2NrLgogICovCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2FuZF9mcmVlemVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLAotCQkJCQkJCXN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGlubGluZSBpbnQgYWNxdWlyZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpZiAoc2xhYl90cnlsb2NrKHBhZ2UpKSB7Ci0JCV9fcmVtb3ZlX3BhcnRpYWwobiwgcGFnZSk7Ci0JCV9fU2V0UGFnZVNsdWJGcm96ZW4ocGFnZSk7CisJdm9pZCAqZnJlZWxpc3Q7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyczsKKwlzdHJ1Y3QgcGFnZSBuZXc7CisKKwkvKgorCSAqIFphcCB0aGUgZnJlZWxpc3QgYW5kIHNldCB0aGUgZnJvemVuIGJpdC4KKwkgKiBUaGUgb2xkIGZyZWVsaXN0IGlzIHRoZSBsaXN0IG9mIG9iamVjdHMgZm9yIHRoZQorCSAqIHBlciBjcHUgYWxsb2NhdGlvbiBsaXN0LgorCSAqLworCWRvIHsKKwkJZnJlZWxpc3QgPSBwYWdlLT5mcmVlbGlzdDsKKwkJY291bnRlcnMgPSBwYWdlLT5jb3VudGVyczsKKwkJbmV3LmNvdW50ZXJzID0gY291bnRlcnM7CisJCW5ldy5pbnVzZSA9IHBhZ2UtPm9iamVjdHM7CisKKwkJVk1fQlVHX09OKG5ldy5mcm96ZW4pOworCQluZXcuZnJvemVuID0gMTsKKworCX0gd2hpbGUgKCFfX2NtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKKwkJCWZyZWVsaXN0LCBjb3VudGVycywKKwkJCU5VTEwsIG5ldy5jb3VudGVycywKKwkJCSJsb2NrIGFuZCBmcmVlemUiKSk7CisKKwlyZW1vdmVfcGFydGlhbChuLCBwYWdlKTsKKworCWlmIChmcmVlbGlzdCkgeworCQkvKiBQb3B1bGF0ZSB0aGUgcGVyIGNwdSBmcmVlbGlzdCAqLworCQl0aGlzX2NwdV93cml0ZShzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIGZyZWVsaXN0KTsKKwkJdGhpc19jcHVfd3JpdGUocy0+Y3B1X3NsYWItPnBhZ2UsIHBhZ2UpOworCQl0aGlzX2NwdV93cml0ZShzLT5jcHVfc2xhYi0+bm9kZSwgcGFnZV90b19uaWQocGFnZSkpOwogCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTbGFiIHBhZ2UgY2FtZSBmcm9tIHRoZSB3cm9uZyBsaXN0LiBObyBvYmplY3QgdG8gYWxsb2NhdGUKKwkJICogZnJvbS4gUHV0IGl0IG9udG8gdGhlIGNvcnJlY3QgbGlzdCBhbmQgY29udGludWUgcGFydGlhbAorCQkgKiBzY2FuLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJTTFVCOiAlcyA6IFBhZ2Ugd2l0aG91dCBhdmFpbGFibGUgb2JqZWN0cyBvbiIKKwkJCSIgcGFydGlhbCBsaXN0XG4iLCBzLT5uYW1lKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgogICogVHJ5IHRvIGFsbG9jYXRlIGEgcGFydGlhbCBzbGFiIGZyb20gYSBzcGVjaWZpYyBub2RlLgogICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9wYXJ0aWFsX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X3BhcnRpYWxfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCQkJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTUwMyw3ICsxNjIxLDcgQEAKIAogCXNwaW5fbG9jaygmbi0+bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZuLT5wYXJ0aWFsLCBscnUpCi0JCWlmIChsb2NrX2FuZF9mcmVlemVfc2xhYihuLCBwYWdlKSkKKwkJaWYgKGFjcXVpcmVfc2xhYihzLCBuLCBwYWdlKSkKIAkJCWdvdG8gb3V0OwogCXBhZ2UgPSBOVUxMOwogb3V0OgpAQCAtMTU1NCw3ICsxNjcyLDcgQEAKIAogCQlpZiAobiAmJiBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIGZsYWdzKSAmJgogCQkJCW4tPm5yX3BhcnRpYWwgPiBzLT5taW5fcGFydGlhbCkgewotCQkJcGFnZSA9IGdldF9wYXJ0aWFsX25vZGUobik7CisJCQlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShzLCBuKTsKIAkJCWlmIChwYWdlKSB7CiAJCQkJcHV0X21lbXNfYWxsb3dlZCgpOwogCQkJCXJldHVybiBwYWdlOwpAQCAtMTU3NCw2MCArMTY5MiwxMyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBzZWFyY2hub2RlID0gKG5vZGUgPT0gTlVNQV9OT19OT0RFKSA/IG51bWFfbm9kZV9pZCgpIDogbm9kZTsKIAotCXBhZ2UgPSBnZXRfcGFydGlhbF9ub2RlKGdldF9ub2RlKHMsIHNlYXJjaG5vZGUpKTsKKwlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShzLCBnZXRfbm9kZShzLCBzZWFyY2hub2RlKSk7CiAJaWYgKHBhZ2UgfHwgbm9kZSAhPSBOVU1BX05PX05PREUpCiAJCXJldHVybiBwYWdlOwogCiAJcmV0dXJuIGdldF9hbnlfcGFydGlhbChzLCBmbGFncyk7CiB9CiAKLS8qCi0gKiBNb3ZlIGEgcGFnZSBiYWNrIHRvIHRoZSBsaXN0cy4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzbGFiIGxvY2sgaGVsZC4KLSAqCi0gKiBPbiBleGl0IHRoZSBzbGFiIGxvY2sgd2lsbCBoYXZlIGJlZW4gZHJvcHBlZC4KLSAqLwotc3RhdGljIHZvaWQgdW5mcmVlemVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB0YWlsKQotCV9fcmVsZWFzZXMoYml0bG9jaykKLXsKLQlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gZ2V0X25vZGUocywgcGFnZV90b19uaWQocGFnZSkpOwotCi0JX19DbGVhclBhZ2VTbHViRnJvemVuKHBhZ2UpOwotCWlmIChwYWdlLT5pbnVzZSkgewotCi0JCWlmIChwYWdlLT5mcmVlbGlzdCkgewotCQkJYWRkX3BhcnRpYWwobiwgcGFnZSwgdGFpbCk7Ci0JCQlzdGF0KHMsIHRhaWwgPyBERUFDVElWQVRFX1RPX1RBSUwgOiBERUFDVElWQVRFX1RPX0hFQUQpOwotCQl9IGVsc2UgewotCQkJc3RhdChzLCBERUFDVElWQVRFX0ZVTEwpOwotCQkJaWYgKGttZW1fY2FjaGVfZGVidWcocykgJiYgKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKSkKLQkJCQlhZGRfZnVsbChuLCBwYWdlKTsKLQkJfQotCQlzbGFiX3VubG9jayhwYWdlKTsKLQl9IGVsc2UgewotCQlzdGF0KHMsIERFQUNUSVZBVEVfRU1QVFkpOwotCQlpZiAobi0+bnJfcGFydGlhbCA8IHMtPm1pbl9wYXJ0aWFsKSB7Ci0JCQkvKgotCQkJICogQWRkaW5nIGFuIGVtcHR5IHNsYWIgdG8gdGhlIHBhcnRpYWwgc2xhYnMgaW4gb3JkZXIKLQkJCSAqIHRvIGF2b2lkIHBhZ2UgYWxsb2NhdG9yIG92ZXJoZWFkLiBUaGlzIHNsYWIgbmVlZHMKLQkJCSAqIHRvIGNvbWUgYWZ0ZXIgdGhlIG90aGVyIHNsYWJzIHdpdGggb2JqZWN0cyBpbgotCQkJICogc28gdGhhdCB0aGUgb3RoZXJzIGdldCBmaWxsZWQgZmlyc3QuIFRoYXQgd2F5IHRoZQotCQkJICogc2l6ZSBvZiB0aGUgcGFydGlhbCBsaXN0IHN0YXlzIHNtYWxsLgotCQkJICoKLQkJCSAqIGttZW1fY2FjaGVfc2hyaW5rIGNhbiByZWNsYWltIGFueSBlbXB0eSBzbGFicyBmcm9tCi0JCQkgKiB0aGUgcGFydGlhbCBsaXN0LgotCQkJICovCi0JCQlhZGRfcGFydGlhbChuLCBwYWdlLCAxKTsKLQkJCXNsYWJfdW5sb2NrKHBhZ2UpOwotCQl9IGVsc2UgewotCQkJc2xhYl91bmxvY2socGFnZSk7Ci0JCQlzdGF0KHMsIEZSRUVfU0xBQik7Ci0JCQlkaXNjYXJkX3NsYWIocywgcGFnZSk7Ci0JCX0KLQl9Ci19Ci0KICNpZmRlZiBDT05GSUdfUFJFRU1QVAogLyoKICAqIENhbGN1bGF0ZSB0aGUgbmV4dCBnbG9iYWxseSB1bmlxdWUgdHJhbnNhY3Rpb24gZm9yIGRpc2FtYmlndWlhdGlvbgpAQCAtMTY5Nyw0MiArMTc2OCwxNjEgQEAKIC8qCiAgKiBSZW1vdmUgdGhlIGNwdSBzbGFiCiAgKi8KKworLyoKKyAqIFJlbW92ZSB0aGUgY3B1IHNsYWIKKyAqLwogc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCi0JX19yZWxlYXNlcyhiaXRsb2NrKQogeworCWVudW0gc2xhYl9tb2RlcyB7IE1fTk9ORSwgTV9QQVJUSUFMLCBNX0ZVTEwsIE1fRlJFRSB9OwogCXN0cnVjdCBwYWdlICpwYWdlID0gYy0+cGFnZTsKLQlpbnQgdGFpbCA9IDE7CisJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbiA9IGdldF9ub2RlKHMsIHBhZ2VfdG9fbmlkKHBhZ2UpKTsKKwlpbnQgbG9jayA9IDA7CisJZW51bSBzbGFiX21vZGVzIGwgPSBNX05PTkUsIG0gPSBNX05PTkU7CisJdm9pZCAqZnJlZWxpc3Q7CisJdm9pZCAqbmV4dGZyZWU7CisJaW50IHRhaWwgPSAwOworCXN0cnVjdCBwYWdlIG5ldzsKKwlzdHJ1Y3QgcGFnZSBvbGQ7CiAKLQlpZiAocGFnZS0+ZnJlZWxpc3QpCisJaWYgKHBhZ2UtPmZyZWVsaXN0KSB7CiAJCXN0YXQocywgREVBQ1RJVkFURV9SRU1PVEVfRlJFRVMpOwotCS8qCi0JICogTWVyZ2UgY3B1IGZyZWVsaXN0IGludG8gc2xhYiBmcmVlbGlzdC4gVHlwaWNhbGx5IHdlIGdldCBoZXJlCi0JICogYmVjYXVzZSBib3RoIGZyZWVsaXN0cyBhcmUgZW1wdHkuIFNvIHRoaXMgaXMgdW5saWtlbHkKLQkgKiB0byBvY2N1ci4KLQkgKi8KLQl3aGlsZSAodW5saWtlbHkoYy0+ZnJlZWxpc3QpKSB7Ci0JCXZvaWQgKipvYmplY3Q7Ci0KLQkJdGFpbCA9IDA7CS8qIEhvdCBvYmplY3RzLiBQdXQgdGhlIHNsYWIgZmlyc3QgKi8KLQotCQkvKiBSZXRyaWV2ZSBvYmplY3QgZnJvbSBjcHVfZnJlZWxpc3QgKi8KLQkJb2JqZWN0ID0gYy0+ZnJlZWxpc3Q7Ci0JCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIGMtPmZyZWVsaXN0KTsKLQotCQkvKiBBbmQgcHV0IG9udG8gdGhlIHJlZ3VsYXIgZnJlZWxpc3QgKi8KLQkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgcGFnZS0+ZnJlZWxpc3QpOwotCQlwYWdlLT5mcmVlbGlzdCA9IG9iamVjdDsKLQkJcGFnZS0+aW51c2UtLTsKKwkJdGFpbCA9IDE7CiAJfQotCWMtPnBhZ2UgPSBOVUxMOworCiAJYy0+dGlkID0gbmV4dF90aWQoYy0+dGlkKTsKLQl1bmZyZWV6ZV9zbGFiKHMsIHBhZ2UsIHRhaWwpOworCWMtPnBhZ2UgPSBOVUxMOworCWZyZWVsaXN0ID0gYy0+ZnJlZWxpc3Q7CisJYy0+ZnJlZWxpc3QgPSBOVUxMOworCisJLyoKKwkgKiBTdGFnZSBvbmU6IEZyZWUgYWxsIGF2YWlsYWJsZSBwZXIgY3B1IG9iamVjdHMgYmFjaworCSAqIHRvIHRoZSBwYWdlIGZyZWVsaXN0IHdoaWxlIGl0IGlzIHN0aWxsIGZyb3plbi4gTGVhdmUgdGhlCisJICogbGFzdCBvbmUuCisJICoKKwkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHRha2UgdGhlIGxpc3QtPmxvY2sgYmVjYXVzZSB0aGUgcGFnZQorCSAqIGlzIHN0aWxsIGZyb3plbi4KKwkgKi8KKwl3aGlsZSAoZnJlZWxpc3QgJiYgKG5leHRmcmVlID0gZ2V0X2ZyZWVwb2ludGVyKHMsIGZyZWVsaXN0KSkpIHsKKwkJdm9pZCAqcHJpb3I7CisJCXVuc2lnbmVkIGxvbmcgY291bnRlcnM7CisKKwkJZG8geworCQkJcHJpb3IgPSBwYWdlLT5mcmVlbGlzdDsKKwkJCWNvdW50ZXJzID0gcGFnZS0+Y291bnRlcnM7CisJCQlzZXRfZnJlZXBvaW50ZXIocywgZnJlZWxpc3QsIHByaW9yKTsKKwkJCW5ldy5jb3VudGVycyA9IGNvdW50ZXJzOworCQkJbmV3LmludXNlLS07CisJCQlWTV9CVUdfT04oIW5ldy5mcm96ZW4pOworCisJCX0gd2hpbGUgKCFfX2NtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKKwkJCXByaW9yLCBjb3VudGVycywKKwkJCWZyZWVsaXN0LCBuZXcuY291bnRlcnMsCisJCQkiZHJhaW4gcGVyY3B1IGZyZWVsaXN0IikpOworCisJCWZyZWVsaXN0ID0gbmV4dGZyZWU7CisJfQorCisJLyoKKwkgKiBTdGFnZSB0d286IEVuc3VyZSB0aGF0IHRoZSBwYWdlIGlzIHVuZnJvemVuIHdoaWxlIHRoZQorCSAqIGxpc3QgcHJlc2VuY2UgcmVmbGVjdHMgdGhlIGFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cworCSAqIGR1cmluZyB1bmZyZWV6ZS4KKwkgKgorCSAqIFdlIHNldHVwIHRoZSBsaXN0IG1lbWJlcnNoaXAgYW5kIHRoZW4gcGVyZm9ybSBhIGNtcHhjaGcKKwkgKiB3aXRoIHRoZSBjb3VudC4gSWYgdGhlcmUgaXMgYSBtaXNtYXRjaCB0aGVuIHRoZSBwYWdlCisJICogaXMgbm90IHVuZnJvemVuIGJ1dCB0aGUgcGFnZSBpcyBvbiB0aGUgd3JvbmcgbGlzdC4KKwkgKgorCSAqIFRoZW4gd2UgcmVzdGFydCB0aGUgcHJvY2VzcyB3aGljaCBtYXkgaGF2ZSB0byByZW1vdmUKKwkgKiB0aGUgcGFnZSBmcm9tIHRoZSBsaXN0IHRoYXQgd2UganVzdCBwdXQgaXQgb24gYWdhaW4KKwkgKiBiZWNhdXNlIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2xhYiBtYXkgaGF2ZQorCSAqIGNoYW5nZWQuCisJICovCityZWRvOgorCisJb2xkLmZyZWVsaXN0ID0gcGFnZS0+ZnJlZWxpc3Q7CisJb2xkLmNvdW50ZXJzID0gcGFnZS0+Y291bnRlcnM7CisJVk1fQlVHX09OKCFvbGQuZnJvemVuKTsKKworCS8qIERldGVybWluZSB0YXJnZXQgc3RhdGUgb2YgdGhlIHNsYWIgKi8KKwluZXcuY291bnRlcnMgPSBvbGQuY291bnRlcnM7CisJaWYgKGZyZWVsaXN0KSB7CisJCW5ldy5pbnVzZS0tOworCQlzZXRfZnJlZXBvaW50ZXIocywgZnJlZWxpc3QsIG9sZC5mcmVlbGlzdCk7CisJCW5ldy5mcmVlbGlzdCA9IGZyZWVsaXN0OworCX0gZWxzZQorCQluZXcuZnJlZWxpc3QgPSBvbGQuZnJlZWxpc3Q7CisKKwluZXcuZnJvemVuID0gMDsKKworCWlmICghbmV3LmludXNlICYmIG4tPm5yX3BhcnRpYWwgPiBzLT5taW5fcGFydGlhbCkKKwkJbSA9IE1fRlJFRTsKKwllbHNlIGlmIChuZXcuZnJlZWxpc3QpIHsKKwkJbSA9IE1fUEFSVElBTDsKKwkJaWYgKCFsb2NrKSB7CisJCQlsb2NrID0gMTsKKwkJCS8qCisJCQkgKiBUYWtpbmcgdGhlIHNwaW5sb2NrIHJlbW92ZXMgdGhlIHBvc3NpYmxpdHkKKwkJCSAqIHRoYXQgYWNxdWlyZV9zbGFiKCkgd2lsbCBzZWUgYSBzbGFiIHBhZ2UgdGhhdAorCQkJICogaXMgZnJvemVuCisJCQkgKi8KKwkJCXNwaW5fbG9jaygmbi0+bGlzdF9sb2NrKTsKKwkJfQorCX0gZWxzZSB7CisJCW0gPSBNX0ZVTEw7CisJCWlmIChrbWVtX2NhY2hlX2RlYnVnKHMpICYmICFsb2NrKSB7CisJCQlsb2NrID0gMTsKKwkJCS8qCisJCQkgKiBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBzY2FubmluZyBvZiBmdWxsCisJCQkgKiBzbGFicyBmcm9tIGRpYWdub3N0aWMgZnVuY3Rpb25zIHdpbGwgbm90IHNlZQorCQkJICogYW55IGZyb3plbiBzbGFicy4KKwkJCSAqLworCQkJc3Bpbl9sb2NrKCZuLT5saXN0X2xvY2spOworCQl9CisJfQorCisJaWYgKGwgIT0gbSkgeworCisJCWlmIChsID09IE1fUEFSVElBTCkKKworCQkJcmVtb3ZlX3BhcnRpYWwobiwgcGFnZSk7CisKKwkJZWxzZSBpZiAobCA9PSBNX0ZVTEwpCisKKwkJCXJlbW92ZV9mdWxsKHMsIHBhZ2UpOworCisJCWlmIChtID09IE1fUEFSVElBTCkgeworCisJCQlhZGRfcGFydGlhbChuLCBwYWdlLCB0YWlsKTsKKwkJCXN0YXQocywgdGFpbCA/IERFQUNUSVZBVEVfVE9fVEFJTCA6IERFQUNUSVZBVEVfVE9fSEVBRCk7CisKKwkJfSBlbHNlIGlmIChtID09IE1fRlVMTCkgeworCisJCQlzdGF0KHMsIERFQUNUSVZBVEVfRlVMTCk7CisJCQlhZGRfZnVsbChzLCBuLCBwYWdlKTsKKworCQl9CisJfQorCisJbCA9IG07CisJaWYgKCFfX2NtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKKwkJCQlvbGQuZnJlZWxpc3QsIG9sZC5jb3VudGVycywKKwkJCQluZXcuZnJlZWxpc3QsIG5ldy5jb3VudGVycywKKwkJCQkidW5mcmVlemluZyBzbGFiIikpCisJCWdvdG8gcmVkbzsKKworCWlmIChsb2NrKQorCQlzcGluX3VubG9jaygmbi0+bGlzdF9sb2NrKTsKKworCWlmIChtID09IE1fRlJFRSkgeworCQlzdGF0KHMsIERFQUNUSVZBVEVfRU1QVFkpOworCQlkaXNjYXJkX3NsYWIocywgcGFnZSk7CisJCXN0YXQocywgRlJFRV9TTEFCKTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCiB7CiAJc3RhdChzLCBDUFVTTEFCX0ZMVVNIKTsKLQlzbGFiX2xvY2soYy0+cGFnZSk7CiAJZGVhY3RpdmF0ZV9zbGFiKHMsIGMpOwogfQogCkBAIC0xODYxLDYgKzIwNTEsOCBAQAogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGFnZSBuZXc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTg3OSw3MiArMjA3MSw5NyBAQAogCWlmICghcGFnZSkKIAkJZ290byBuZXdfc2xhYjsKIAotCXNsYWJfbG9jayhwYWdlKTsKLQlpZiAodW5saWtlbHkoIW5vZGVfbWF0Y2goYywgbm9kZSkpKQotCQlnb3RvIGFub3RoZXJfc2xhYjsKKwlpZiAodW5saWtlbHkoIW5vZGVfbWF0Y2goYywgbm9kZSkpKSB7CisJCXN0YXQocywgQUxMT0NfTk9ERV9NSVNNQVRDSCk7CisJCWRlYWN0aXZhdGVfc2xhYihzLCBjKTsKKwkJZ290byBuZXdfc2xhYjsKKwl9CisKKwlzdGF0KHMsIEFMTE9DX1NMT1dQQVRIKTsKKworCWRvIHsKKwkJb2JqZWN0ID0gcGFnZS0+ZnJlZWxpc3Q7CisJCWNvdW50ZXJzID0gcGFnZS0+Y291bnRlcnM7CisJCW5ldy5jb3VudGVycyA9IGNvdW50ZXJzOworCQlWTV9CVUdfT04oIW5ldy5mcm96ZW4pOworCisJCS8qCisJCSAqIElmIHRoZXJlIGlzIG5vIG9iamVjdCBsZWZ0IHRoZW4gd2UgdXNlIHRoaXMgbG9vcCB0bworCQkgKiBkZWFjdGl2YXRlIHRoZSBzbGFiIHdoaWNoIGlzIHNpbXBsZSBzaW5jZSBubyBvYmplY3RzCisJCSAqIGFyZSBsZWZ0IGluIHRoZSBzbGFiIGFuZCB0aGVyZWZvcmUgd2UgZG8gbm90IG5lZWQgdG8KKwkJICogcHV0IHRoZSBwYWdlIGJhY2sgb250byB0aGUgcGFydGlhbCBsaXN0LgorCQkgKgorCQkgKiBJZiB0aGVyZSBhcmUgb2JqZWN0cyBsZWZ0IHRoZW4gd2UgcmV0cmlldmUgdGhlbQorCQkgKiBhbmQgdXNlIHRoZW0gdG8gcmVmaWxsIHRoZSBwZXIgY3B1IHF1ZXVlLgorCQkqLworCisJCW5ldy5pbnVzZSA9IHBhZ2UtPm9iamVjdHM7CisJCW5ldy5mcm96ZW4gPSBvYmplY3QgIT0gTlVMTDsKKworCX0gd2hpbGUgKCFfX2NtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKKwkJCW9iamVjdCwgY291bnRlcnMsCisJCQlOVUxMLCBuZXcuY291bnRlcnMsCisJCQkiX19zbGFiX2FsbG9jIikpOworCisJaWYgKHVubGlrZWx5KCFvYmplY3QpKSB7CisJCWMtPnBhZ2UgPSBOVUxMOworCQlzdGF0KHMsIERFQUNUSVZBVEVfQllQQVNTKTsKKwkJZ290byBuZXdfc2xhYjsKKwl9CiAKIAlzdGF0KHMsIEFMTE9DX1JFRklMTCk7CiAKIGxvYWRfZnJlZWxpc3Q6Ci0Jb2JqZWN0ID0gcGFnZS0+ZnJlZWxpc3Q7Ci0JaWYgKHVubGlrZWx5KCFvYmplY3QpKQotCQlnb3RvIGFub3RoZXJfc2xhYjsKLQlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKLQkJZ290byBkZWJ1ZzsKLQorCVZNX0JVR19PTighcGFnZS0+ZnJvemVuKTsKIAljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOwotCXBhZ2UtPmludXNlID0gcGFnZS0+b2JqZWN0czsKLQlwYWdlLT5mcmVlbGlzdCA9IE5VTEw7Ci0KLQlzbGFiX3VubG9jayhwYWdlKTsKIAljLT50aWQgPSBuZXh0X3RpZChjLT50aWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlzdGF0KHMsIEFMTE9DX1NMT1dQQVRIKTsKIAlyZXR1cm4gb2JqZWN0OwogCi1hbm90aGVyX3NsYWI6Ci0JZGVhY3RpdmF0ZV9zbGFiKHMsIGMpOwotCiBuZXdfc2xhYjoKIAlwYWdlID0gZ2V0X3BhcnRpYWwocywgZ2ZwZmxhZ3MsIG5vZGUpOwogCWlmIChwYWdlKSB7CiAJCXN0YXQocywgQUxMT0NfRlJPTV9QQVJUSUFMKTsKLQkJYy0+bm9kZSA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwotCQljLT5wYWdlID0gcGFnZTsKKwkJb2JqZWN0ID0gYy0+ZnJlZWxpc3Q7CisKKwkJaWYgKGttZW1fY2FjaGVfZGVidWcocykpCisJCQlnb3RvIGRlYnVnOwogCQlnb3RvIGxvYWRfZnJlZWxpc3Q7CiAJfQogCi0JZ2ZwZmxhZ3MgJj0gZ2ZwX2FsbG93ZWRfbWFzazsKLQlpZiAoZ2ZwZmxhZ3MgJiBfX0dGUF9XQUlUKQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KIAlwYWdlID0gbmV3X3NsYWIocywgZ2ZwZmxhZ3MsIG5vZGUpOwogCi0JaWYgKGdmcGZsYWdzICYgX19HRlBfV0FJVCkKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQogCWlmIChwYWdlKSB7CiAJCWMgPSBfX3RoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7Ci0JCXN0YXQocywgQUxMT0NfU0xBQik7CiAJCWlmIChjLT5wYWdlKQogCQkJZmx1c2hfc2xhYihzLCBjKTsKIAotCQlzbGFiX2xvY2socGFnZSk7Ci0JCV9fU2V0UGFnZVNsdWJGcm96ZW4ocGFnZSk7CisJCS8qCisJCSAqIE5vIG90aGVyIHJlZmVyZW5jZSB0byB0aGUgcGFnZSB5ZXQgc28gd2UgY2FuCisJCSAqIG11Y2sgYXJvdW5kIHdpdGggaXQgZnJlZWx5IHdpdGhvdXQgY21weGNoZworCQkgKi8KKwkJb2JqZWN0ID0gcGFnZS0+ZnJlZWxpc3Q7CisJCXBhZ2UtPmZyZWVsaXN0ID0gTlVMTDsKKwkJcGFnZS0+aW51c2UgPSBwYWdlLT5vYmplY3RzOworCisJCXN0YXQocywgQUxMT0NfU0xBQik7CiAJCWMtPm5vZGUgPSBwYWdlX3RvX25pZChwYWdlKTsKIAkJYy0+cGFnZSA9IHBhZ2U7CisKKwkJaWYgKGttZW1fY2FjaGVfZGVidWcocykpCisJCQlnb3RvIGRlYnVnOwogCQlnb3RvIGxvYWRfZnJlZWxpc3Q7CiAJfQogCWlmICghKGdmcGZsYWdzICYgX19HRlBfTk9XQVJOKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCXNsYWJfb3V0X29mX21lbW9yeShzLCBnZnBmbGFncywgbm9kZSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBOVUxMOwotZGVidWc6Ci0JaWYgKCFhbGxvY19kZWJ1Z19wcm9jZXNzaW5nKHMsIHBhZ2UsIG9iamVjdCwgYWRkcikpCi0JCWdvdG8gYW5vdGhlcl9zbGFiOwogCi0JcGFnZS0+aW51c2UrKzsKLQlwYWdlLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOworZGVidWc6CisJaWYgKCFvYmplY3QgfHwgIWFsbG9jX2RlYnVnX3Byb2Nlc3NpbmcocywgcGFnZSwgb2JqZWN0LCBhZGRyKSkKKwkJZ290byBuZXdfc2xhYjsKKworCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CiAJZGVhY3RpdmF0ZV9zbGFiKHMsIGMpOwogCWMtPnBhZ2UgPSBOVUxMOwogCWMtPm5vZGUgPSBOVU1BX05PX05PREU7CkBAIC0yMDk2LDUyICsyMzEzLDg5IEBACiB7CiAJdm9pZCAqcHJpb3I7CiAJdm9pZCAqKm9iamVjdCA9ICh2b2lkICopeDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB3YXNfZnJvemVuOworCWludCBpbnVzZTsKKwlzdHJ1Y3QgcGFnZSBuZXc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyczsKKwlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzbGFiX2xvY2socGFnZSk7CiAJc3RhdChzLCBGUkVFX1NMT1dQQVRIKTsKIAogCWlmIChrbWVtX2NhY2hlX2RlYnVnKHMpICYmICFmcmVlX2RlYnVnX3Byb2Nlc3NpbmcocywgcGFnZSwgeCwgYWRkcikpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJcmV0dXJuOwogCi0JcHJpb3IgPSBwYWdlLT5mcmVlbGlzdDsKLQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBwcmlvcik7Ci0JcGFnZS0+ZnJlZWxpc3QgPSBvYmplY3Q7Ci0JcGFnZS0+aW51c2UtLTsKKwlkbyB7CisJCXByaW9yID0gcGFnZS0+ZnJlZWxpc3Q7CisJCWNvdW50ZXJzID0gcGFnZS0+Y291bnRlcnM7CisJCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIHByaW9yKTsKKwkJbmV3LmNvdW50ZXJzID0gY291bnRlcnM7CisJCXdhc19mcm96ZW4gPSBuZXcuZnJvemVuOworCQluZXcuaW51c2UtLTsKKwkJaWYgKCghbmV3LmludXNlIHx8ICFwcmlvcikgJiYgIXdhc19mcm96ZW4gJiYgIW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSk7CisJCQkvKgorCQkJICogU3BlY3VsYXRpdmVseSBhY3F1aXJlIHRoZSBsaXN0X2xvY2suCisJCQkgKiBJZiB0aGUgY21weGNoZyBkb2VzIG5vdCBzdWNjZWVkIHRoZW4gd2UgbWF5CisJCQkgKiBkcm9wIHRoZSBsaXN0X2xvY2sgd2l0aG91dCBhbnkgcHJvY2Vzc2luZy4KKwkJCSAqCisJCQkgKiBPdGhlcndpc2UgdGhlIGxpc3RfbG9jayB3aWxsIHN5bmNocm9uaXplIHdpdGgKKwkJCSAqIG90aGVyIHByb2Nlc3NvcnMgdXBkYXRpbmcgdGhlIGxpc3Qgb2Ygc2xhYnMuCisJCQkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkJfQorCQlpbnVzZSA9IG5ldy5pbnVzZTsKIAotCWlmICh1bmxpa2VseShQYWdlU2x1YkZyb3plbihwYWdlKSkpIHsKLQkJc3RhdChzLCBGUkVFX0ZST1pFTik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CisJfSB3aGlsZSAoIWNtcHhjaGdfZG91YmxlX3NsYWIocywgcGFnZSwKKwkJcHJpb3IsIGNvdW50ZXJzLAorCQlvYmplY3QsIG5ldy5jb3VudGVycywKKwkJIl9fc2xhYl9mcmVlIikpOwogCi0JaWYgKHVubGlrZWx5KCFwYWdlLT5pbnVzZSkpCi0JCWdvdG8gc2xhYl9lbXB0eTsKKwlpZiAobGlrZWx5KCFuKSkgeworICAgICAgICAgICAgICAgIC8qCisJCSAqIFRoZSBsaXN0IGxvY2sgd2FzIG5vdCB0YWtlbiB0aGVyZWZvcmUgbm8gbGlzdAorCQkgKiBhY3Rpdml0eSBjYW4gYmUgbmVjZXNzYXJ5LgorCQkgKi8KKyAgICAgICAgICAgICAgICBpZiAod2FzX2Zyb3plbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQocywgRlJFRV9GUk9aRU4pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAJLyoKLQkgKiBPYmplY3RzIGxlZnQgaW4gdGhlIHNsYWIuIElmIGl0IHdhcyBub3Qgb24gdGhlIHBhcnRpYWwgbGlzdCBiZWZvcmUKLQkgKiB0aGVuIGFkZCBpdC4KKwkgKiB3YXNfZnJvemVuIG1heSBoYXZlIGJlZW4gc2V0IGFmdGVyIHdlIGFjcXVpcmVkIHRoZSBsaXN0X2xvY2sgaW4KKwkgKiBhbiBlYXJsaWVyIGxvb3AuIFNvIHdlIG5lZWQgdG8gY2hlY2sgaXQgaGVyZSBhZ2Fpbi4KIAkgKi8KLQlpZiAodW5saWtlbHkoIXByaW9yKSkgewotCQlhZGRfcGFydGlhbChnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSksIHBhZ2UsIDEpOwotCQlzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpOwotCX0KKwlpZiAod2FzX2Zyb3plbikKKwkJc3RhdChzLCBGUkVFX0ZST1pFTik7CisJZWxzZSB7CisJCWlmICh1bmxpa2VseSghaW51c2UgJiYgbi0+bnJfcGFydGlhbCA+IHMtPm1pbl9wYXJ0aWFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc2xhYl9lbXB0eTsKIAotb3V0X3VubG9jazoKLQlzbGFiX3VubG9jayhwYWdlKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCS8qCisJCSAqIE9iamVjdHMgbGVmdCBpbiB0aGUgc2xhYi4gSWYgaXQgd2FzIG5vdCBvbiB0aGUgcGFydGlhbCBsaXN0IGJlZm9yZQorCQkgKiB0aGVuIGFkZCBpdC4KKwkJICovCisJCWlmICh1bmxpa2VseSghcHJpb3IpKSB7CisJCQlyZW1vdmVfZnVsbChzLCBwYWdlKTsKKwkJCWFkZF9wYXJ0aWFsKG4sIHBhZ2UsIDApOworCQkJc3RhdChzLCBGUkVFX0FERF9QQVJUSUFMKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuLT5saXN0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CiAKIHNsYWJfZW1wdHk6CiAJaWYgKHByaW9yKSB7CiAJCS8qCi0JCSAqIFNsYWIgc3RpbGwgb24gdGhlIHBhcnRpYWwgbGlzdC4KKwkJICogU2xhYiBvbiB0aGUgcGFydGlhbCBsaXN0LgogCQkgKi8KLQkJcmVtb3ZlX3BhcnRpYWwocywgcGFnZSk7CisJCXJlbW92ZV9wYXJ0aWFsKG4sIHBhZ2UpOwogCQlzdGF0KHMsIEZSRUVfUkVNT1ZFX1BBUlRJQUwpOwotCX0KLQlzbGFiX3VubG9jayhwYWdlKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfSBlbHNlCisJCS8qIFNsYWIgbXVzdCBiZSBvbiB0aGUgZnVsbCBsaXN0ICovCisJCXJlbW92ZV9mdWxsKHMsIHBhZ2UpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbi0+bGlzdF9sb2NrLCBmbGFncyk7CiAJc3RhdChzLCBGUkVFX1NMQUIpOwogCWRpc2NhcmRfc2xhYihzLCBwYWdlKTsKIH0KQEAgLTI0MTUsNyArMjY2OSw2IEBACiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGttZW1fY2FjaGVfbm9kZS0+c2l6ZSA8IHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlKSk7CiAKQEAgLTI0MzMsNiArMjY4Niw3IEBACiAJQlVHX09OKCFuKTsKIAlwYWdlLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihrbWVtX2NhY2hlX25vZGUsIG4pOwogCXBhZ2UtPmludXNlKys7CisJcGFnZS0+ZnJvemVuID0gMDsKIAlrbWVtX2NhY2hlX25vZGUtPm5vZGVbbm9kZV0gPSBuOwogI2lmZGVmIENPTkZJR19TTFVCX0RFQlVHCiAJaW5pdF9vYmplY3Qoa21lbV9jYWNoZV9ub2RlLCBuLCBTTFVCX1JFRF9BQ1RJVkUpOwpAQCAtMjQ0MSwxNCArMjY5NSw3IEBACiAJaW5pdF9rbWVtX2NhY2hlX25vZGUobiwga21lbV9jYWNoZV9ub2RlKTsKIAlpbmNfc2xhYnNfbm9kZShrbWVtX2NhY2hlX25vZGUsIG5vZGUsIHBhZ2UtPm9iamVjdHMpOwogCi0JLyoKLQkgKiBsb2NrZGVwIHJlcXVpcmVzIGNvbnNpc3RlbnQgaXJxIHVzYWdlIGZvciBlYWNoIGxvY2sKLQkgKiBzbyBldmVuIHRob3VnaCB0aGVyZSBjYW5ub3QgYmUgYSByYWNlIHRoaXMgZWFybHkgaW4KLQkgKiB0aGUgYm9vdCBzZXF1ZW5jZSwgd2Ugc3RpbGwgZGlzYWJsZSBpcnFzLgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlhZGRfcGFydGlhbChuLCBwYWdlLCAwKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfa21lbV9jYWNoZV9ub2RlcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKQEAgLTI2NTQsNiArMjkwMSwxMiBAQAogCQl9CiAJfQogCisjaWZkZWYgQ09ORklHX0NNUFhDSEdfRE9VQkxFCisJaWYgKHN5c3RlbV9oYXNfY21weGNoZ19kb3VibGUoKSAmJiAocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX0ZMQUdTKSA9PSAwKQorCQkvKiBFbmFibGUgZmFzdCBtb2RlICovCisJCXMtPmZsYWdzIHw9IF9fQ01QWENIR19ET1VCTEU7CisjZW5kaWYKKwogCS8qCiAJICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKIAkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KQEAgLTI3MjYsNyArMjk3OSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm4tPmxpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBoLCAmbi0+cGFydGlhbCwgbHJ1KSB7CiAJCWlmICghcGFnZS0+aW51c2UpIHsKLQkJCV9fcmVtb3ZlX3BhcnRpYWwobiwgcGFnZSk7CisJCQlyZW1vdmVfcGFydGlhbChuLCBwYWdlKTsKIAkJCWRpc2NhcmRfc2xhYihzLCBwYWdlKTsKIAkJfSBlbHNlIHsKIAkJCWxpc3Rfc2xhYl9vYmplY3RzKHMsIHBhZ2UsCkBAIC0zMDk0LDE0ICszMzQ3LDggQEAKIAkJICogbGlzdF9sb2NrLiBwYWdlLT5pbnVzZSBoZXJlIGlzIHRoZSB1cHBlciBsaW1pdC4KIAkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0LCAmbi0+cGFydGlhbCwgbHJ1KSB7Ci0JCQlpZiAoIXBhZ2UtPmludXNlICYmIHNsYWJfdHJ5bG9jayhwYWdlKSkgewotCQkJCS8qCi0JCQkJICogTXVzdCBob2xkIHNsYWIgbG9jayBoZXJlIGJlY2F1c2Ugc2xhYl9mcmVlCi0JCQkJICogbWF5IGhhdmUgZnJlZWQgdGhlIGxhc3Qgb2JqZWN0IGFuZCBiZQotCQkJCSAqIHdhaXRpbmcgdG8gcmVsZWFzZSB0aGUgc2xhYi4KLQkJCQkgKi8KLQkJCQlfX3JlbW92ZV9wYXJ0aWFsKG4sIHBhZ2UpOwotCQkJCXNsYWJfdW5sb2NrKHBhZ2UpOworCQkJaWYgKCFwYWdlLT5pbnVzZSkgeworCQkJCXJlbW92ZV9wYXJ0aWFsKG4sIHBhZ2UpOwogCQkJCWRpc2NhcmRfc2xhYihzLCBwYWdlKTsKIAkJCX0gZWxzZSB7CiAJCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsCkBAIC0zNjg5LDEyICszOTM2LDkgQEAKIHN0YXRpYyB2b2lkIHZhbGlkYXRlX3NsYWJfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCQl1bnNpZ25lZCBsb25nICptYXApCiB7Ci0JaWYgKHNsYWJfdHJ5bG9jayhwYWdlKSkgewotCQl2YWxpZGF0ZV9zbGFiKHMsIHBhZ2UsIG1hcCk7Ci0JCXNsYWJfdW5sb2NrKHBhZ2UpOwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJTTFVCICVzOiBTa2lwcGVkIGJ1c3kgc2xhYiAweCVwXG4iLAotCQkJcy0+bmFtZSwgcGFnZSk7CisJc2xhYl9sb2NrKHBhZ2UpOworCXZhbGlkYXRlX3NsYWIocywgcGFnZSwgbWFwKTsKKwlzbGFiX3VubG9jayhwYWdlKTsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9zbGFiX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsCkBAIC00MzQyLDggKzQ1ODYsMTAgQEAKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW5ndGgpCiB7CiAJcy0+ZmxhZ3MgJj0gflNMQUJfREVCVUdfRlJFRTsKLQlpZiAoYnVmWzBdID09ICcxJykKKwlpZiAoYnVmWzBdID09ICcxJykgeworCQlzLT5mbGFncyAmPSB+X19DTVBYQ0hHX0RPVUJMRTsKIAkJcy0+ZmxhZ3MgfD0gU0xBQl9ERUJVR19GUkVFOworCX0KIAlyZXR1cm4gbGVuZ3RoOwogfQogU0xBQl9BVFRSKHNhbml0eV9jaGVja3MpOwpAQCAtNDM1Nyw4ICs0NjAzLDEwIEBACiAJCQkJCQkJc2l6ZV90IGxlbmd0aCkKIHsKIAlzLT5mbGFncyAmPSB+U0xBQl9UUkFDRTsKLQlpZiAoYnVmWzBdID09ICcxJykKKwlpZiAoYnVmWzBdID09ICcxJykgeworCQlzLT5mbGFncyAmPSB+X19DTVBYQ0hHX0RPVUJMRTsKIAkJcy0+ZmxhZ3MgfD0gU0xBQl9UUkFDRTsKKwl9CiAJcmV0dXJuIGxlbmd0aDsKIH0KIFNMQUJfQVRUUih0cmFjZSk7CkBAIC00Mzc1LDggKzQ2MjMsMTAgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXMtPmZsYWdzICY9IH5TTEFCX1JFRF9aT05FOwotCWlmIChidWZbMF0gPT0gJzEnKQorCWlmIChidWZbMF0gPT0gJzEnKSB7CisJCXMtPmZsYWdzICY9IH5fX0NNUFhDSEdfRE9VQkxFOwogCQlzLT5mbGFncyB8PSBTTEFCX1JFRF9aT05FOworCX0KIAljYWxjdWxhdGVfc2l6ZXMocywgLTEpOwogCXJldHVybiBsZW5ndGg7CiB9CkBAIC00Mzk0LDggKzQ2NDQsMTAgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXMtPmZsYWdzICY9IH5TTEFCX1BPSVNPTjsKLQlpZiAoYnVmWzBdID09ICcxJykKKwlpZiAoYnVmWzBdID09ICcxJykgeworCQlzLT5mbGFncyAmPSB+X19DTVBYQ0hHX0RPVUJMRTsKIAkJcy0+ZmxhZ3MgfD0gU0xBQl9QT0lTT047CisJfQogCWNhbGN1bGF0ZV9zaXplcyhzLCAtMSk7CiAJcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTQ0MTMsOCArNDY2NSwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJcy0+ZmxhZ3MgJj0gflNMQUJfU1RPUkVfVVNFUjsKLQlpZiAoYnVmWzBdID09ICcxJykKKwlpZiAoYnVmWzBdID09ICcxJykgeworCQlzLT5mbGFncyAmPSB+X19DTVBYQ0hHX0RPVUJMRTsKIAkJcy0+ZmxhZ3MgfD0gU0xBQl9TVE9SRV9VU0VSOworCX0KIAljYWxjdWxhdGVfc2l6ZXMocywgLTEpOwogCXJldHVybiBsZW5ndGg7CiB9CkBAIC00NTc5LDYgKzQ4MzMsNyBAQAogU1RBVF9BVFRSKEFMTE9DX0ZST01fUEFSVElBTCwgYWxsb2NfZnJvbV9wYXJ0aWFsKTsKIFNUQVRfQVRUUihBTExPQ19TTEFCLCBhbGxvY19zbGFiKTsKIFNUQVRfQVRUUihBTExPQ19SRUZJTEwsIGFsbG9jX3JlZmlsbCk7CitTVEFUX0FUVFIoQUxMT0NfTk9ERV9NSVNNQVRDSCwgYWxsb2Nfbm9kZV9taXNtYXRjaCk7CiBTVEFUX0FUVFIoRlJFRV9TTEFCLCBmcmVlX3NsYWIpOwogU1RBVF9BVFRSKENQVVNMQUJfRkxVU0gsIGNwdXNsYWJfZmx1c2gpOwogU1RBVF9BVFRSKERFQUNUSVZBVEVfRlVMTCwgZGVhY3RpdmF0ZV9mdWxsKTsKQEAgLTQ1ODYsNyArNDg0MSwxMCBAQAogU1RBVF9BVFRSKERFQUNUSVZBVEVfVE9fSEVBRCwgZGVhY3RpdmF0ZV90b19oZWFkKTsKIFNUQVRfQVRUUihERUFDVElWQVRFX1RPX1RBSUwsIGRlYWN0aXZhdGVfdG9fdGFpbCk7CiBTVEFUX0FUVFIoREVBQ1RJVkFURV9SRU1PVEVfRlJFRVMsIGRlYWN0aXZhdGVfcmVtb3RlX2ZyZWVzKTsKK1NUQVRfQVRUUihERUFDVElWQVRFX0JZUEFTUywgZGVhY3RpdmF0ZV9ieXBhc3MpOwogU1RBVF9BVFRSKE9SREVSX0ZBTExCQUNLLCBvcmRlcl9mYWxsYmFjayk7CitTVEFUX0FUVFIoQ01QWENIR19ET1VCTEVfQ1BVX0ZBSUwsIGNtcHhjaGdfZG91YmxlX2NwdV9mYWlsKTsKK1NUQVRfQVRUUihDTVBYQ0hHX0RPVUJMRV9GQUlMLCBjbXB4Y2hnX2RvdWJsZV9mYWlsKTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc2xhYl9hdHRyc1tdID0gewpAQCAtNDYzNiw2ICs0ODk0LDcgQEAKIAkmYWxsb2NfZnJvbV9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmYWxsb2Nfc2xhYl9hdHRyLmF0dHIsCiAJJmFsbG9jX3JlZmlsbF9hdHRyLmF0dHIsCisJJmFsbG9jX25vZGVfbWlzbWF0Y2hfYXR0ci5hdHRyLAogCSZmcmVlX3NsYWJfYXR0ci5hdHRyLAogCSZjcHVzbGFiX2ZsdXNoX2F0dHIuYXR0ciwKIAkmZGVhY3RpdmF0ZV9mdWxsX2F0dHIuYXR0ciwKQEAgLTQ2NDMsNyArNDkwMiwxMCBAQAogCSZkZWFjdGl2YXRlX3RvX2hlYWRfYXR0ci5hdHRyLAogCSZkZWFjdGl2YXRlX3RvX3RhaWxfYXR0ci5hdHRyLAogCSZkZWFjdGl2YXRlX3JlbW90ZV9mcmVlc19hdHRyLmF0dHIsCisJJmRlYWN0aXZhdGVfYnlwYXNzX2F0dHIuYXR0ciwKIAkmb3JkZXJfZmFsbGJhY2tfYXR0ci5hdHRyLAorCSZjbXB4Y2hnX2RvdWJsZV9mYWlsX2F0dHIuYXR0ciwKKwkmY21weGNoZ19kb3VibGVfY3B1X2ZhaWxfYXR0ci5hdHRyLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZBSUxTTEFCCiAJJmZhaWxzbGFiX2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDFiOGMzMzkuLjE3YmMyMjQgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMTkyNCwyMCArMTkyNCwyNCBAQAogCiAJLyoKIAkgKiBGaW5kIG91dCBob3cgbWFueSBwYWdlcyBhcmUgYWxsb3dlZCBmb3IgYSBzaW5nbGUgc3dhcAotCSAqIGRldmljZS4gVGhlcmUgYXJlIHR3byBsaW1pdGluZyBmYWN0b3JzOiAxKSB0aGUgbnVtYmVyIG9mCi0JICogYml0cyBmb3IgdGhlIHN3YXAgb2Zmc2V0IGluIHRoZSBzd3BfZW50cnlfdCB0eXBlIGFuZAotCSAqIDIpIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgYSBzd2FwIHB0ZSBhcyBkZWZpbmVkIGJ5Ci0JICogdGhlIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBJbiBvcmRlciB0byBmaW5kIHRoZQotCSAqIGxhcmdlc3QgcG9zc2libGUgYml0IG1hc2sgYSBzd2FwIGVudHJ5IHdpdGggc3dhcCB0eXBlIDAKKwkgKiBkZXZpY2UuIFRoZXJlIGFyZSB0aHJlZSBsaW1pdGluZyBmYWN0b3JzOiAxKSB0aGUgbnVtYmVyCisJICogb2YgYml0cyBmb3IgdGhlIHN3YXAgb2Zmc2V0IGluIHRoZSBzd3BfZW50cnlfdCB0eXBlLCBhbmQKKwkgKiAyKSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIHN3YXAgcHRlIGFzIGRlZmluZWQgYnkgdGhlCisJICogdGhlIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLCBhbmQgMykgdGhlIG51bWJlciBvZiBmcmVlIGJpdHMKKwkgKiBpbiBhbiBleGNlcHRpb25hbCByYWRpeF90cmVlIGVudHJ5LiBJbiBvcmRlciB0byBmaW5kIHRoZQorCSAqIGxhcmdlc3QgcG9zc2libGUgYml0IG1hc2ssIGEgc3dhcCBlbnRyeSB3aXRoIHN3YXAgdHlwZSAwCiAJICogYW5kIHN3YXAgb2Zmc2V0IH4wVUwgaXMgY3JlYXRlZCwgZW5jb2RlZCB0byBhIHN3YXAgcHRlLAotCSAqIGRlY29kZWQgdG8gYSBzd3BfZW50cnlfdCBhZ2FpbiBhbmQgZmluYWxseSB0aGUgc3dhcAorCSAqIGRlY29kZWQgdG8gYSBzd3BfZW50cnlfdCBhZ2FpbiwgYW5kIGZpbmFsbHkgdGhlIHN3YXAKIAkgKiBvZmZzZXQgaXMgZXh0cmFjdGVkLiBUaGlzIHdpbGwgbWFzayBhbGwgdGhlIGJpdHMgZnJvbQogCSAqIHRoZSBpbml0aWFsIH4wVUwgbWFzayB0aGF0IGNhbid0IGJlIGVuY29kZWQgaW4gZWl0aGVyCiAJICogdGhlIHN3cF9lbnRyeV90IG9yIHRoZSBhcmNoaXRlY3R1cmUgZGVmaW5pdGlvbiBvZiBhCi0JICogc3dhcCBwdGUuCisJICogc3dhcCBwdGUuICBUaGVuIHRoZSBzYW1lIGlzIGRvbmUgZm9yIGEgcmFkaXhfdHJlZSBlbnRyeS4KIAkgKi8KIAltYXhwYWdlcyA9IHN3cF9vZmZzZXQocHRlX3RvX3N3cF9lbnRyeSgKLQkJCXN3cF9lbnRyeV90b19wdGUoc3dwX2VudHJ5KDAsIH4wVUwpKSkpICsgMTsKKwkJCXN3cF9lbnRyeV90b19wdGUoc3dwX2VudHJ5KDAsIH4wVUwpKSkpOworCW1heHBhZ2VzID0gc3dwX29mZnNldChyYWRpeF90b19zd3BfZW50cnkoCisJCQlzd3BfdG9fcmFkaXhfZW50cnkoc3dwX2VudHJ5KDAsIG1heHBhZ2VzKSkpKSArIDE7CisKIAlpZiAobWF4cGFnZXMgPiBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UpIHsKIAkJbWF4cGFnZXMgPSBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UgKyAxOwogCQkvKiBwLT5tYXggaXMgYW4gdW5zaWduZWQgaW50OiBkb24ndCBvdmVyZmxvdyBpdCAqLwpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggMjMyZWIyNy4uYjQwYWM2ZCAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0zMzYsNiArMzM2LDE0IEBACiAJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CiAJaW50IGk7CiAKKwkvKgorCSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gbWF5IGdldCBjYWxsZWQgb24gYSBzaG1lbS90bXBmcyBtYXBwaW5nOgorCSAqIHBhZ2V2ZWNfbG9va3VwKCkgbWlnaHQgdGhlbiByZXR1cm4gMCBwcmVtYXR1cmVseSAoYmVjYXVzZSBpdAorCSAqIGdvdCBhIGdhbmdmdWwgb2Ygc3dhcCBlbnRyaWVzKTsgYnV0IGl0J3MgaGFyZGx5IHdvcnRoIHdvcnJ5aW5nCisJICogYWJvdXQgLSBpdCBjYW4gcmFyZWx5IGhhdmUgYW55dGhpbmcgdG8gZnJlZSBmcm9tIHN1Y2ggYSBtYXBwaW5nCisJICogKG1vc3QgcGFnZXMgYXJlIGRpcnR5KSwgYW5kIGFscmVhZHkgc2tpcHMgb3ZlciBhbnkgZGlmZmljdWx0aWVzLgorCSAqLworCiAJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKIAl3aGlsZSAoaW5kZXggPD0gZW5kICYmIHBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBpbmRleCwKIAkJCW1pbihlbmQgLSBpbmRleCwgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFIC0gMSkgKyAxKSkgewpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IDQ2NDYyMWQuLjUwMTZmMTkgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTcyNSw5ICs3MjUsMTAgQEAKICNkZWZpbmUgVk1BUF9CQk1BUF9CSVRTX01JTgkoVk1BUF9NQVhfQUxMT0MqMikKICNkZWZpbmUgVk1BUF9NSU4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpIC8qIGNhbid0IHVzZSBtaW4oKSAqLwogI2RlZmluZSBWTUFQX01BWCh4LCB5KQkJKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkgLyogY2FuJ3QgdXNlIG1heCgpICovCi0jZGVmaW5lIFZNQVBfQkJNQVBfQklUUwkJVk1BUF9NSU4oVk1BUF9CQk1BUF9CSVRTX01BWCwJCVwKLQkJCQkJVk1BUF9NQVgoVk1BUF9CQk1BUF9CSVRTX01JTiwJXAotCQkJCQkJVk1BTExPQ19QQUdFUyAvIE5SX0NQVVMgLyAxNikpCisjZGVmaW5lIFZNQVBfQkJNQVBfQklUUwkJXAorCQlWTUFQX01JTihWTUFQX0JCTUFQX0JJVFNfTUFYLAlcCisJCVZNQVBfTUFYKFZNQVBfQkJNQVBfQklUU19NSU4sCVwKKwkJCVZNQUxMT0NfUEFHRVMgLyByb3VuZHVwX3Bvd19vZl90d28oTlJfQ1BVUykgLyAxNikpCiAKICNkZWZpbmUgVk1BUF9CTE9DS19TSVpFCQkoVk1BUF9CQk1BUF9CSVRTICogUEFHRV9TSVpFKQogCkBAIC0yMTM5LDYgKzIxNDAsMTQgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyoKKwkgKiBJZiB0aGUgYWxsb2NhdGVkIGFkZHJlc3Mgc3BhY2UgaXMgcGFzc2VkIHRvIGEgaHlwZXJjYWxsCisJICogYmVmb3JlIGJlaW5nIHVzZWQgdGhlbiB3ZSBjYW5ub3QgcmVseSBvbiBhIHBhZ2UgZmF1bHQgdG8KKwkgKiB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMuICBTbyBzeW5jIGFsbCB0aGUgcGFnZQorCSAqIHRhYmxlcyBoZXJlLgorCSAqLworCXZtYWxsb2Nfc3luY19hbGwoKTsKKwogCXJldHVybiBhcmVhOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2Nfdm1fYXJlYSk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDdlZjY5MTIuLmI1NTY5OWMgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xMDUsNyArMTA1LDYgQEAKIAogCS8qIFdoaWNoIGNncm91cCBkbyB3ZSByZWNsYWltIGZyb20gKi8KIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKLQlzdHJ1Y3QgbWVtY2dfc2NhbnJlY29yZCAqbWVtY2dfcmVjb3JkOwogCiAJLyoKIAkgKiBOb2RlbWFzayBvZiBub2RlcyBhbGxvd2VkIGJ5IHRoZSBjYWxsZXIuIElmIE5VTEwsIGFsbCBub2RlcwpAQCAtMTM0OSw4ICsxMzQ4LDYgQEAKIAkJCWludCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAkJCWludCBudW1wYWdlcyA9IGhwYWdlX25yX3BhZ2VzKHBhZ2UpOwogCQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfcm90YXRlZFtmaWxlXSArPSBudW1wYWdlczsKLQkJCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCi0JCQkJc2MtPm1lbWNnX3JlY29yZC0+bnJfcm90YXRlZFtmaWxlXSArPSBudW1wYWdlczsKIAkJfQogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CkBAIC0xMzk0LDEwICsxMzkxLDYgQEAKIAogCXJlY2xhaW1fc3RhdC0+cmVjZW50X3NjYW5uZWRbMF0gKz0gKm5yX2Fub247CiAJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFsxXSArPSAqbnJfZmlsZTsKLQlpZiAoIXNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKSB7Ci0JCXNjLT5tZW1jZ19yZWNvcmQtPm5yX3NjYW5uZWRbMF0gKz0gKm5yX2Fub247Ci0JCXNjLT5tZW1jZ19yZWNvcmQtPm5yX3NjYW5uZWRbMV0gKz0gKm5yX2ZpbGU7Ci0JfQogfQogCiAvKgpAQCAtMTUxMSw5ICsxNTA0LDYgQEAKIAkJbnJfcmVjbGFpbWVkICs9IHNocmlua19wYWdlX2xpc3QoJnBhZ2VfbGlzdCwgem9uZSwgc2MpOwogCX0KIAotCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCi0JCXNjLT5tZW1jZ19yZWNvcmQtPm5yX2ZyZWVkW2ZpbGVdICs9IG5yX3JlY2xhaW1lZDsKLQogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCiAJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9TVEVBTCwgbnJfcmVjbGFpbWVkKTsKQEAgLTE2MTMsOCArMTYwMyw2IEBACiAJfQogCiAJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFtmaWxlXSArPSBucl90YWtlbjsKLQlpZiAoIXNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQotCQlzYy0+bWVtY2dfcmVjb3JkLT5ucl9zY2FubmVkW2ZpbGVdICs9IG5yX3Rha2VuOwogCiAJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1JFRklMTCwgem9uZSwgcGdzY2FubmVkKTsKIAlpZiAoZmlsZSkKQEAgLTE2NjYsOCArMTY1NCw2IEBACiAJICogZ2V0X3NjYW5fcmF0aW8uCiAJICovCiAJcmVjbGFpbV9zdGF0LT5yZWNlbnRfcm90YXRlZFtmaWxlXSArPSBucl9yb3RhdGVkOwotCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCi0JCXNjLT5tZW1jZ19yZWNvcmQtPm5yX3JvdGF0ZWRbZmlsZV0gKz0gbnJfcm90YXRlZDsKIAogCW1vdmVfYWN0aXZlX3BhZ2VzX3RvX2xydSh6b25lLCAmbF9hY3RpdmUsCiAJCQkJCQlMUlVfQUNUSVZFICsgZmlsZSAqIExSVV9GSUxFKTsKQEAgLTE4MDgsMjMgKzE3OTQsMTUgQEAKIAl1NjQgZnJhY3Rpb25bMl0sIGRlbm9taW5hdG9yOwogCWVudW0gbHJ1X2xpc3QgbDsKIAlpbnQgbm9zd2FwID0gMDsKLQlpbnQgZm9yY2Vfc2NhbiA9IDA7CisJYm9vbCBmb3JjZV9zY2FuID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9mb3JjZV9zY2FuWzJdOwogCi0KLQlhbm9uICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKLQkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9BTk9OKTsKLQlmaWxlICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0ZJTEUpICsKLQkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKLQotCWlmICgoKGFub24gKyBmaWxlKSA+PiBwcmlvcml0eSkgPCBTV0FQX0NMVVNURVJfTUFYKSB7Ci0JCS8qIGtzd2FwZCBkb2VzIHpvbmUgYmFsYW5jaW5nIGFuZCBuZWVkIHRvIHNjYW4gdGhpcyB6b25lICovCi0JCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSAmJiBjdXJyZW50X2lzX2tzd2FwZCgpKQotCQkJZm9yY2Vfc2NhbiA9IDE7Ci0JCS8qIG1lbWNnIG1heSBoYXZlIHNtYWxsIGxpbWl0IGFuZCBuZWVkIHRvIGF2b2lkIHByaW9yaXR5IGRyb3AgKi8KLQkJaWYgKCFzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKLQkJCWZvcmNlX3NjYW4gPSAxOwotCX0KKwkvKiBrc3dhcGQgZG9lcyB6b25lIGJhbGFuY2luZyBhbmQgbmVlZHMgdG8gc2NhbiB0aGlzIHpvbmUgKi8KKwlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykgJiYgY3VycmVudF9pc19rc3dhcGQoKSkKKwkJZm9yY2Vfc2NhbiA9IHRydWU7CisJLyogbWVtY2cgbWF5IGhhdmUgc21hbGwgbGltaXQgYW5kIG5lZWQgdG8gYXZvaWQgcHJpb3JpdHkgZHJvcCAqLworCWlmICghc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCisJCWZvcmNlX3NjYW4gPSB0cnVlOwogCiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gcGFnZXMuICovCiAJaWYgKCFzYy0+bWF5X3N3YXAgfHwgKG5yX3N3YXBfcGFnZXMgPD0gMCkpIHsKQEAgLTE4MzcsNiArMTgxNSwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlhbm9uICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0FOT04pICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9BTk9OKTsKKwlmaWxlICA9IHpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfQUNUSVZFX0ZJTEUpICsKKwkJem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIExSVV9JTkFDVElWRV9GSUxFKTsKKwogCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgewogCQlmcmVlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKIAkJLyogSWYgd2UgaGF2ZSB2ZXJ5IGZldyBwYWdlIGNhY2hlIHBhZ2VzLApAQCAtMjI2OCwxMCArMjI1MSw5IEBACiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIAogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlX3pvbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAotCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwKLQkJCQkJc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgKnJlYywKLQkJCQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCkKKwkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKKwkJCQkJCXN0cnVjdCB6b25lICp6b25lLAorCQkJCQkJdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCkKIHsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkubnJfc2Nhbm5lZCA9IDAsCkBAIC0yMjgxLDkgKzIyNjMsNyBAQAogCQkubWF5X3N3YXAgPSAhbm9zd2FwLAogCQkub3JkZXIgPSAwLAogCQkubWVtX2Nncm91cCA9IG1lbSwKLQkJLm1lbWNnX3JlY29yZCA9IHJlYywKIAl9OwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKIAogCXNjLmdmcF9tYXNrID0gKGdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSykgfAogCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICYgfkdGUF9SRUNMQUlNX01BU0spOwpAQCAtMjI5Miw3ICsyMjcyLDYgQEAKIAkJCQkJCSAgICAgIHNjLm1heV93cml0ZXBhZ2UsCiAJCQkJCQkgICAgICBzYy5nZnBfbWFzayk7CiAKLQlzdGFydCA9IHNjaGVkX2Nsb2NrKCk7CiAJLyoKIAkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKIAkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KQEAgLTIzMDEsMjUgKzIyODAsMTkgQEAKIAkgKiB0aGUgcHJpb3JpdHkgYW5kIG1ha2UgaXQgemVyby4KIAkgKi8KIAlzaHJpbmtfem9uZSgwLCB6b25lLCAmc2MpOwotCWVuZCA9IHNjaGVkX2Nsb2NrKCk7Ci0KLQlpZiAocmVjKQotCQlyZWMtPmVsYXBzZWQgKz0gZW5kIC0gc3RhcnQ7Ci0JKnNjYW5uZWQgPSBzYy5ucl9zY2FubmVkOwogCiAJdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQpOwogCisJKm5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkOwogCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7CiB9CiAKIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCiAJCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCQkgICBib29sIG5vc3dhcCwKLQkJCQkJICAgc3RydWN0IG1lbWNnX3NjYW5yZWNvcmQgKnJlYykKKwkJCQkJICAgYm9vbCBub3N3YXApCiB7CiAJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDsKIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IG5pZDsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKQEAgLTIzMjgsNyArMjMwMSw2IEBACiAJCS5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCwKIAkJLm9yZGVyID0gMCwKIAkJLm1lbV9jZ3JvdXAgPSBtZW1fY29udCwKLQkJLm1lbWNnX3JlY29yZCA9IHJlYywKIAkJLm5vZGVtYXNrID0gTlVMTCwgLyogd2UgZG9uJ3QgY2FyZSB0aGUgcGxhY2VtZW50ICovCiAJCS5nZnBfbWFzayA9IChnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spIHwKIAkJCQkoR0ZQX0hJR0hVU0VSX01PVkFCTEUgJiB+R0ZQX1JFQ0xBSU1fTUFTSyksCkBAIC0yMzM3LDcgKzIzMDksNiBAQAogCQkuZ2ZwX21hc2sgPSBzYy5nZnBfbWFzaywKIAl9OwogCi0Jc3RhcnQgPSBzY2hlZF9jbG9jaygpOwogCS8qCiAJICogVW5saWtlIGRpcmVjdCByZWNsYWltIHZpYSBhbGxvY19wYWdlcygpLCBtZW1jZydzIHJlY2xhaW0gZG9lc24ndAogCSAqIHRha2UgY2FyZSBvZiBmcm9tIHdoZXJlIHdlIGdldCBwYWdlcy4gU28gdGhlIG5vZGUgd2hlcmUgd2Ugc3RhcnQgdGhlCkBAIC0yMzUyLDkgKzIzMjMsNiBAQAogCQkJCQkgICAgc2MuZ2ZwX21hc2spOwogCiAJbnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsICZzYywgJnNocmluayk7Ci0JZW5kID0gc2NoZWRfY2xvY2soKTsKLQlpZiAocmVjKQotCQlyZWMtPmVsYXBzZWQgKz0gZW5kIC0gc3RhcnQ7CiAKIAl0cmFjZV9tbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQobnJfcmVjbGFpbWVkKTsKIApAQCAtMjUyOSw2ICsyNDk3LDkgQEAKIAkJCQkJaGlnaF93bWFya19wYWdlcyh6b25lKSwgMCwgMCkpIHsKIAkJCQllbmRfem9uZSA9IGk7CiAJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCS8qIElmIGJhbGFuY2VkLCBjbGVhciB0aGUgY29uZ2VzdGVkIGZsYWcgKi8KKwkJCQl6b25lX2NsZWFyX2ZsYWcoem9uZSwgWk9ORV9DT05HRVNURUQpOwogCQkJfQogCQl9CiAJCWlmIChpIDwgMCkKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggMjBjMThiNy4uZDUyYjEzZCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTY1OSw3ICs2NTksNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSB8fCBkZWZpbmVkKENPTkZJR19TWVNGUykKKyNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSB8fCBkZWZpbmVkKENPTkZJR19TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfTlVNQSkKICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKICNkZWZpbmUgVEVYVF9GT1JfRE1BKHh4KSB4eCAiX2RtYSIsCiAjZWxzZQpAQCAtNzg4LDcgKzc4OCw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfVk1fRVZFTlRTX0NPVU5URVJTICovCiB9OwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTIHx8IENPTkZJR19TWVNGUyAqLworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTIHx8IENPTkZJR19TWVNGUyB8fCBDT05GSUdfTlVNQSAqLwogCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDVmMjdmOGUuLmYxZjJmN2IgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQAogCWlmICh1bmxpa2VseSghc2tiKSkKIAkJZ290byBlcnJfZnJlZTsKIAorCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJcmV0dXJuIHNrYjsKIAogZXJyX2ZyZWU6CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKaW5kZXggMTc1YjUxMy4uZTMxNzU4MyAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMjYzLDcgKzI2Myw2IEBACiB7CiAJaW50IGluLCBvdXQsIGlucCwgb3V0cDsKIAlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSBjbGllbnQtPnRyYW5zOwotCWNoYXIgKnJkYXRhID0gKGNoYXIgKilyZXEtPnJjK3NpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc2l6ZV90IHBkYXRhX29mZiA9IDA7CiAJc3RydWN0IHRyYW5zX3JwYWdlX2luZm8gKnJwaW5mbyA9IE5VTEw7CkBAIC0zNDYsNyArMzQ1LDggQEAKIAkJICogQXJyYW5nZSBpbiBzdWNoIGEgd2F5IHRoYXQgc2VydmVyIHBsYWNlcyBoZWFkZXIgaW4gdGhlCiAJCSAqIGFsbG9jZWQgbWVtb3J5IGFuZCBwYXlsb2FkIG9udG8gdGhlIHVzZXIgYnVmZmVyLgogCQkgKi8KLQkJaW5wID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0sIHJkYXRhLCAxMSk7CisJCWlucCA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgb3V0LAorCQkJCSAgIFZJUlRRVUVVRV9OVU0sIHJlcS0+cmMtPnNkYXRhLCAxMSk7CiAJCS8qCiAJCSAqIFJ1bm5pbmcgZXhlY3V0YWJsZXMgaW4gdGhlIGZpbGVzeXN0ZW0gbWF5IHJlc3VsdCBpbgogCQkgKiBhIHJlYWQgcmVxdWVzdCB3aXRoIGtlcm5lbCBidWZmZXIgYXMgb3Bwb3NlZCB0byB1c2VyIGJ1ZmZlci4KQEAgLTM2Niw4ICszNjYsOCBAQAogCQl9CiAJCWluICs9IGlucDsKIAl9IGVsc2UgewotCQlpbiA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgb3V0LCBWSVJUUVVFVUVfTlVNLCByZGF0YSwKLQkJCQlyZXEtPnJjLT5jYXBhY2l0eSk7CisJCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0sCisJCQkJICByZXEtPnJjLT5zZGF0YSwgcmVxLT5yYy0+Y2FwYWNpdHkpOwogCX0KIAogCWVyciA9IHZpcnRxdWV1ZV9hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgcmVxLT50Yyk7CkBAIC01OTIsNyArNTkyLDE0IEBACiAJLmNsb3NlID0gcDlfdmlydGlvX2Nsb3NlLAogCS5yZXF1ZXN0ID0gcDlfdmlydGlvX3JlcXVlc3QsCiAJLmNhbmNlbCA9IHA5X3ZpcnRpb19jYW5jZWwsCi0JLm1heHNpemUgPSBQQUdFX1NJWkUqVklSVFFVRVVFX05VTSwKKworCS8qCisJICogV2UgbGVhdmUgb25lIGVudHJ5IGZvciBpbnB1dCBhbmQgb25lIGVudHJ5IGZvciByZXNwb25zZQorCSAqIGhlYWRlcnMuIFdlIGFsc28gc2tpcCBvbmUgbW9yZSBlbnRyeSB0byBhY2NvbW9kYXRlLCBhZGRyZXNzCisJICogdGhhdCBhcmUgbm90IGF0IHBhZ2UgYm91bmRhcnksIHRoYXQgY2FuIHJlc3VsdCBpbiBhbiBleHRyYQorCSAqIHBhZ2UgaW4gemVybyBjb3B5LgorCSAqLworCS5tYXhzaXplID0gUEFHRV9TSVpFICogKFZJUlRRVUVVRV9OVU0gLSAzKSwKIAkucHJlZiA9IFA5X1RSQU5TX1BSRUZfUEFZTE9BRF9TRVAsCiAJLmRlZiA9IDAsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCAyMjUyYzIwLi5kMDcyMjNjIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTI0Miw4ICsyNDIsNiBAQAogCQlpZiAoYnJkZXYtPnBheWxvYWQgPT0gcF9icmlkZ2VkKSB7CiAJCQlza2JfcHVzaChza2IsIDIpOwogCQkJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgMik7Ci0JCX0gZWxzZSB7IC8qIHBfcm91dGVkICovCi0JCQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsKIAkJfQogCX0KIAlza2JfZGVidWcoc2tiKTsKQEAgLTU2MCwxMiArNTU4LDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnF1ZXVlLCBza2IsIHRtcCkgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwkJYnIyNjg0X3B1c2goYXRtdmNjLCBza2IpOworCQlkZXYgPSBza2ItPmRldjsKIAogCQlkZXYtPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOwogCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMtLTsKLQotCQlicjI2ODRfcHVzaChhdG12Y2MsIHNrYik7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBuZXRkZXYgY2FycmllciBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggOGFkZDliNC4uMTE3ZTBkMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC00OTQsOSArNDk0LDggQEAKIAlCVF9EQkcoInNrICVwIiwgc2spOwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoc2stPnNrX3N0YXRlICE9IHN0YXRlKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJaWYgKCF0aW1lbykgewogCQkJZXJyID0gLUVJTlBST0dSRVNTOwogCQkJYnJlYWs7CkBAIC01MTAsMTIgKzUwOSwxMyBAQAogCQlyZWxlYXNlX3NvY2soc2spOwogCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOwogCQlsb2NrX3NvY2soc2spOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCWVyciA9IHNvY2tfZXJyb3Ioc2spOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oIGIvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaAppbmRleCA4ZTZjMDYxLi5lN2VlNTMxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXVuc2lnbmVkIGludCAgcm9sZTsKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYXRvbWljX3QgICAgICB0ZXJtaW5hdGU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCiAJc3RydWN0IGV0aGhkciBlaDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IGNhMzlmY2YuLmQ5ZWRmZTggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtNDg0LDkgKzQ4NCwxMSBAQAogCiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAorCQlpZiAoYXRvbWljX3JlYWQoJnMtPnRlcm1pbmF0ZSkpCisJCQlicmVhazsKIAkJLyogUlggKi8KIAkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewogCQkJc2tiX29ycGhhbihza2IpOwpAQCAtNTA0LDcgKzUwNiw3IEBACiAKIAkJc2NoZWR1bGUoKTsKIAl9Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CiAKIAkvKiBDbGVhbnVwIHNlc3Npb24gKi8KQEAgLTY0MCw5ICs2NDIsMTAgQEAKIAlkb3duX3JlYWQoJmJuZXBfc2Vzc2lvbl9zZW0pOwogCiAJcyA9IF9fYm5lcF9nZXRfc2Vzc2lvbihyZXEtPmRzdCk7Ci0JaWYgKHMpCi0JCWt0aHJlYWRfc3RvcChzLT50YXNrKTsKLQllbHNlCisJaWYgKHMpIHsKKwkJYXRvbWljX2luYygmcy0+dGVybWluYXRlKTsKKwkJd2FrZV91cF9wcm9jZXNzKHMtPnRhc2spOworCX0gZWxzZQogCQllcnIgPSAtRU5PRU5UOwogCiAJdXBfcmVhZCgmYm5lcF9zZXNzaW9uX3NlbSk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwppbmRleCAwNDBmNjdiLi41MGYwZDEzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKQEAgLTM4Niw3ICszODYsOCBAQAogCiAJY2FwaV9jdHJfZG93bihjdHJsKTsKIAotCWt0aHJlYWRfc3RvcChzZXNzaW9uLT50YXNrKTsKKwlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOworCXdha2VfdXBfcHJvY2VzcyhzZXNzaW9uLT50YXNrKTsKIH0KIAogc3RhdGljIHZvaWQgY210cF9yZWdpc3Rlcl9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY3RybCwgX191MTYgYXBwbCwgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgKnJwKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaCBiL25ldC9ibHVldG9vdGgvY210cC9jbXRwLmgKaW5kZXggZGI0M2I1NC4uYzMyNjM4ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY210cC5oCkBAIC04MSw2ICs4MSw3IEBACiAKIAljaGFyIG5hbWVbQlROQU1TSVpdOwogCisJYXRvbWljX3QgdGVybWluYXRlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwppbmRleCBjNWIxMWFmLi41MjFiYWE0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKQEAgLTI5Miw5ICsyOTIsMTEgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKKwkJaWYgKGF0b21pY19yZWFkKCZzZXNzaW9uLT50ZXJtaW5hdGUpKQorCQkJYnJlYWs7CiAJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKQogCQkJYnJlYWs7CiAKQEAgLTMwNyw3ICszMDksNyBAQAogCiAJCXNjaGVkdWxlKCk7CiAJfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwogCiAJZG93bl93cml0ZSgmY210cF9zZXNzaW9uX3NlbSk7CkBAIC0zODAsMTYgKzM4MiwxNyBAQAogCiAJaWYgKCEoc2Vzc2lvbi0+ZmxhZ3MgJiAoMSA8PCBDTVRQX0xPT1BCQUNLKSkpIHsKIAkJZXJyID0gY210cF9hdHRhY2hfZGV2aWNlKHNlc3Npb24pOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZGV0YWNoOworCQlpZiAoZXJyIDwgMCkgeworCQkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKKwkJCXdha2VfdXBfcHJvY2VzcyhzZXNzaW9uLT50YXNrKTsKKwkJCXVwX3dyaXRlKCZjbXRwX3Nlc3Npb25fc2VtKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAl1cF93cml0ZSgmY210cF9zZXNzaW9uX3NlbSk7CiAJcmV0dXJuIDA7CiAKLWRldGFjaDoKLQljbXRwX2RldGFjaF9kZXZpY2Uoc2Vzc2lvbik7Ci0KIHVubGluazoKIAlfX2NtdHBfdW5saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKQEAgLTQxNCw3ICs0MTcsOCBAQAogCQlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPnRyYW5zbWl0KTsKIAogCQkvKiBTdG9wIHNlc3Npb24gdGhyZWFkICovCi0JCWt0aHJlYWRfc3RvcChzZXNzaW9uLT50YXNrKTsKKwkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKKwkJd2FrZV91cF9wcm9jZXNzKHNlc3Npb24tPnRhc2spOwogCX0gZWxzZQogCQllcnIgPSAtRU5PRU5UOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKaW5kZXggZWMwYmMzZi4uNTY5NDNhZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwpAQCAtMTIwOSw3ICsxMjA5LDYgQEAKIAogCUJUX0VSUigiJXMgY29tbWFuZCB0eCB0aW1lb3V0IiwgaGRldi0+bmFtZSk7CiAJYXRvbWljX3NldCgmaGRldi0+Y21kX2NudCwgMSk7Ci0JY2xlYXJfYml0KEhDSV9SRVNFVCwgJmhkZXYtPmZsYWdzKTsKIAl0YXNrbGV0X3NjaGVkdWxlKCZoZGV2LT5jbWRfdGFzayk7CiB9CiAKQEAgLTEzMjcsNyArMTMyNiw3IEBACiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZGFkZHJfbGlzdCksIEdGUF9LRVJORUwpOwogCWlmICghZW50cnkpIHsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMjQwOCw3ICsyNDA3LDEwIEBACiAJCWlmIChoZGV2LT5zZW50X2NtZCkgewogCQkJYXRvbWljX2RlYygmaGRldi0+Y21kX2NudCk7CiAJCQloY2lfc2VuZF9mcmFtZShza2IpOwotCQkJbW9kX3RpbWVyKCZoZGV2LT5jbWRfdGltZXIsCisJCQlpZiAodGVzdF9iaXQoSENJX1JFU0VULCAmaGRldi0+ZmxhZ3MpKQorCQkJCWRlbF90aW1lcigmaGRldi0+Y21kX3RpbWVyKTsKKwkJCWVsc2UKKwkJCQltb2RfdGltZXIoJmhkZXYtPmNtZF90aW1lciwKIAkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhDSV9DTURfVElNRU9VVCkpOwogCQl9IGVsc2UgewogCQkJc2tiX3F1ZXVlX2hlYWQoJmhkZXYtPmNtZF9xLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggNDNiNGMyZC4uZmI2OGYzNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC03NjQsNiArNzY0LDcgQEAKIAogCXVwX3dyaXRlKCZoaWRwX3Nlc3Npb25fc2VtKTsKIAorCWtmcmVlKHNlc3Npb24tPnJkX2RhdGEpOwogCWtmcmVlKHNlc3Npb24pOwogCXJldHVybiAwOwogfQpAQCAtODQxLDcgKzg0Miw4IEBACiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWhjaV9jb25uX3B1dF9kZXZpY2Uoc2Vzc2lvbi0+Y29ubik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwkJc2Vzc2lvbi0+aW5wdXQgPSBOVUxMOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTA0NCw4ICsxMDQ2LDEyIEBACiAJfQogCiAJZXJyID0gaGlkX2FkZF9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJfYWRkX2RldmljZTsKKwlpZiAoZXJyIDwgMCkgeworCQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOworCQl3YWtlX3VwX3Byb2Nlc3Moc2Vzc2lvbi0+dGFzayk7CisJCXVwX3dyaXRlKCZoaWRwX3Nlc3Npb25fc2VtKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlpZiAoc2Vzc2lvbi0+aW5wdXQpIHsKIAkJaGlkcF9zZW5kX2N0cmxfbWVzc2FnZShzZXNzaW9uLApAQCAtMTA1OSwxMiArMTA2NSw2IEBACiAJdXBfd3JpdGUoJmhpZHBfc2Vzc2lvbl9zZW0pOwogCXJldHVybiAwOwogCi1lcnJfYWRkX2RldmljZToKLQloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKLQlzZXNzaW9uLT5oaWQgPSBOVUxMOwotCWF0b21pY19pbmMoJnNlc3Npb24tPnRlcm1pbmF0ZSk7Ci0Jd2FrZV91cF9wcm9jZXNzKHNlc3Npb24tPnRhc2spOwotCiB1bmxpbms6CiAJaGlkcF9kZWxfdGltZXIoc2Vzc2lvbik7CiAKQEAgLTEwOTAsNyArMTA5MCw2IEBACiBmYWlsZWQ6CiAJdXBfd3JpdGUoJmhpZHBfc2Vzc2lvbl9zZW0pOwogCi0JaW5wdXRfZnJlZV9kZXZpY2Uoc2Vzc2lvbi0+aW5wdXQpOwogCWtmcmVlKHNlc3Npb24pOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCmluZGV4IDMyMDRiYTguLmIzYmRiNDggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCkBAIC0xMTU5LDkgKzExNTksOCBAQAogCWludCB0aW1lbyA9IEhaLzU7CiAKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoKGNoYW4tPnVuYWNrZWRfZnJhbWVzID4gMCAmJiBjaGFuLT5jb25uKSkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAoY2hhbi0+dW5hY2tlZF9mcmFtZXMgPiAwICYmIGNoYW4tPmNvbm4pIHsKIAkJaWYgKCF0aW1lbykKIAkJCXRpbWVvID0gSFovNTsKIApAQCAtMTE3Myw2ICsxMTcyLDcgQEAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKIAkJbG9ja19zb2NrKHNrKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQllcnIgPSBzb2NrX2Vycm9yKHNrKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggNWMzNmIzZS4uNjFmMWY2MiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTIzNSwzOSArMjM1LDM5IEBACiAKIAlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKLQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewotCQllcnIgPSAtRUJBREZEOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmIE9fTk9OQkxPQ0spOwogCiAJQlRfREJHKCJzayAlcCB0aW1lbyAlbGQiLCBzaywgdGltZW8pOwogCiAJLyogV2FpdCBmb3IgYW4gaW5jb21pbmcgY29ubmVjdGlvbi4gKHdha2Utb25lKS4gKi8KIAlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoc2tfc2xlZXAoc2spLCAmd2FpdCk7Ci0Jd2hpbGUgKCEobnNrID0gYnRfYWNjZXB0X2RlcXVldWUoc2ssIG5ld3NvY2spKSkgeworCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghdGltZW8pIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlbGVhc2Vfc29jayhzayk7Ci0JCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7Ci0JCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewogCQkJZXJyID0gLUVCQURGRDsKIAkJCWJyZWFrOwogCQl9CiAKKwkJbnNrID0gYnRfYWNjZXB0X2RlcXVldWUoc2ssIG5ld3NvY2spOworCQlpZiAobnNrKQorCQkJYnJlYWs7CisKKwkJaWYgKCF0aW1lbykgeworCQkJZXJyID0gLUVBR0FJTjsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQllcnIgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOwogCQkJYnJlYWs7CiAJCX0KKworCQlyZWxlYXNlX3NvY2soc2spOworCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOworCQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwogCiAJaWYgKGVycikKQEAgLTk5Myw3ICs5OTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZidF9zayhzayktPmFjY2VwdF9xKTsKIAogCXNrLT5za19kZXN0cnVjdCA9IGwyY2FwX3NvY2tfZGVzdHJ1Y3Q7Ci0Jc2stPnNrX3NuZHRpbWVvID0gbXNlY3NfdG9famlmZmllcyhMMkNBUF9DT05OX1RJTUVPVVQpOworCXNrLT5za19zbmR0aW1lbyA9IEwyQ0FQX0NPTk5fVElNRU9VVDsKIAogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19aQVBQRUQpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggNTc1OWJiNy4uNWJhM2Y2ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNjIsNyArNjIsNiBAQAogI2RlZmluZSByZmNvbW1fbG9jaygpCW11dGV4X2xvY2soJnJmY29tbV9tdXRleCkKICNkZWZpbmUgcmZjb21tX3VubG9jaygpCW11dGV4X3VubG9jaygmcmZjb21tX211dGV4KQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZmNvbW1fZXZlbnQ7CiAKIHN0YXRpYyBMSVNUX0hFQUQoc2Vzc2lvbl9saXN0KTsKIApAQCAtMTIwLDcgKzExOSw2IEBACiB7CiAJaWYgKCFyZmNvbW1fdGhyZWFkKQogCQlyZXR1cm47Ci0Jc2V0X2JpdChSRkNPTU1fU0NIRURfV0FLRVVQLCAmcmZjb21tX2V2ZW50KTsKIAl3YWtlX3VwX3Byb2Nlc3MocmZjb21tX3RocmVhZCk7CiB9CiAKQEAgLTIwMzgsMTkgKzIwMzYsMTggQEAKIAogCXJmY29tbV9hZGRfbGlzdGVuZXIoQkRBRERSX0FOWSk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghdGVzdF9iaXQoUkZDT01NX1NDSEVEX1dBS0VVUCwgJnJmY29tbV9ldmVudCkpIHsKLQkJCS8qIE5vIHBlbmRpbmcgZXZlbnRzLiBMZXQncyBzbGVlcC4KLQkJCSAqIEluY29taW5nIGNvbm5lY3Rpb25zIGFuZCBkYXRhIHdpbGwgd2FrZSB1cyB1cC4gKi8KLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CiAKIAkJLyogUHJvY2VzcyBzdHVmZiAqLwotCQljbGVhcl9iaXQoUkZDT01NX1NDSEVEX1dBS0VVUCwgJnJmY29tbV9ldmVudCk7CiAJCXJmY29tbV9wcm9jZXNzX3Nlc3Npb25zKCk7CisKKwkJc2NoZWR1bGUoKTsKIAl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJcmZjb21tX2tpbGxfbGlzdGVuZXIoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IDhmMDFlNmIuLjQ4MjcyMmIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTQ4NSwxMSArNDg1LDYgQEAKIAogCWxvY2tfc29jayhzayk7CiAKLQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewotCQllcnIgPSAtRUJBREZEOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKQEAgLTUwMSwyOCArNDk2LDMzIEBACiAKIAkvKiBXYWl0IGZvciBhbiBpbmNvbWluZyBjb25uZWN0aW9uLiAod2FrZS1vbmUpLiAqLwogCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoIShuc2sgPSBidF9hY2NlcHRfZGVxdWV1ZShzaywgbmV3c29jaykpKSB7CisJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKCF0aW1lbykgewotCQkJZXJyID0gLUVBR0FJTjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKLQkJbG9ja19zb2NrKHNrKTsKIAogCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewogCQkJZXJyID0gLUVCQURGRDsKIAkJCWJyZWFrOwogCQl9CiAKKwkJbnNrID0gYnRfYWNjZXB0X2RlcXVldWUoc2ssIG5ld3NvY2spOworCQlpZiAobnNrKQorCQkJYnJlYWs7CisKKwkJaWYgKCF0aW1lbykgeworCQkJZXJyID0gLUVBR0FJTjsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQllcnIgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOwogCQkJYnJlYWs7CiAJCX0KKworCQlyZWxlYXNlX3NvY2soc2spOworCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOworCQlsb2NrX3NvY2soc2spOwogCX0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKIAogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3Njby5jIGIvbmV0L2JsdWV0b290aC9zY28uYwppbmRleCA0YzM2MjFiLi44MjcwZjA1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3Njby5jCisrKyBiL25ldC9ibHVldG9vdGgvc2NvLmMKQEAgLTU2NCwzOSArNTY0LDM5IEBACiAKIAlsb2NrX3NvY2soc2spOwogCi0JaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKLQkJZXJyID0gLUVCQURGRDsKLQkJZ290byBkb25lOwotCX0KLQogCXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJiBPX05PTkJMT0NLKTsKIAogCUJUX0RCRygic2sgJXAgdGltZW8gJWxkIiwgc2ssIHRpbWVvKTsKIAogCS8qIFdhaXQgZm9yIGFuIGluY29taW5nIGNvbm5lY3Rpb24uICh3YWtlLW9uZSkuICovCiAJYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwotCXdoaWxlICghKGNoID0gYnRfYWNjZXB0X2RlcXVldWUoc2ssIG5ld3NvY2spKSkgeworCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghdGltZW8pIHsKLQkJCWVyciA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCi0JCXJlbGVhc2Vfc29jayhzayk7Ci0JCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7Ci0JCWxvY2tfc29jayhzayk7CiAKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKIAkJCWVyciA9IC1FQkFERkQ7CiAJCQlicmVhazsKIAkJfQogCisJCWNoID0gYnRfYWNjZXB0X2RlcXVldWUoc2ssIG5ld3NvY2spOworCQlpZiAoY2gpCisJCQlicmVhazsKKworCQlpZiAoIXRpbWVvKSB7CisJCQllcnIgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWVyciA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiAJCQlicmVhazsKIAkJfQorCisJCXJlbGVhc2Vfc29jayhzayk7CisJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CisJCWxvY2tfc29jayhzayk7CiAJfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwogCiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCAzMTc2ZTJlLi5lNzM4MTU0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0yMzEsNiArMjMxLDcgQEAKIGludCBicl9hZGRfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCByZXM7CiAKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfYnJpZGdlKSwgbmFtZSwKIAkJCSAgIGJyX2Rldl9zZXR1cCk7CkBAIC0yNDAsNyArMjQxLDEwIEBACiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKLQlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKHJlcykKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwlyZXR1cm4gcmVzOwogfQogCiBpbnQgYnJfZGVsX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC00MTcsNiArNDIxLDcgQEAKIGludCBicl9kZWxfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJYm9vbCBjaGFuZ2VkX2FkZHI7CiAKIAlwID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOwogCWlmICghcCB8fCBwLT5iciAhPSBicikKQEAgLTQyNSw5ICs0MzAsMTIgQEAKIAlkZWxfbmJwKHApOwogCiAJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7Ci0JYnJfc3RwX3JlY2FsY3VsYXRlX2JyaWRnZV9pZChicik7CisJY2hhbmdlZF9hZGRyID0gYnJfc3RwX3JlY2FsY3VsYXRlX2JyaWRnZV9pZChicik7CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAorCWlmIChjaGFuZ2VkX2FkZHIpCisJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFQUREUiwgYnItPmRldik7CisKIAluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGJyLT5kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCAyZDg1Y2E3Li45OTVjYmUwIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmg7Ci0Jc3RydWN0IGljbXA2aGRyICppY21wNmg7CisJdTggaWNtcDZfdHlwZTsKIAl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGxlbjsKIAlpbnQgb2Zmc2V0OwpAQCAtMTUwMiw5ICsxNTAyLDkgQEAKIAlfX3NrYl9wdWxsKHNrYjIsIG9mZnNldCk7CiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiMik7CiAKLQlpY21wNmggPSBpY21wNl9oZHIoc2tiMik7CisJaWNtcDZfdHlwZSA9IGljbXA2X2hkcihza2IyKS0+aWNtcDZfdHlwZTsKIAotCXN3aXRjaCAoaWNtcDZoLT5pY21wNl90eXBlKSB7CisJc3dpdGNoIChpY21wNl90eXBlKSB7CiAJY2FzZSBJQ01QVjZfTUdNX1FVRVJZOgogCWNhc2UgSUNNUFY2X01HTV9SRVBPUlQ6CiAJY2FzZSBJQ01QVjZfTUdNX1JFRFVDVElPTjoKQEAgLTE1MjAsMTYgKzE1MjAsMjMgQEAKIAkJZXJyID0gcHNrYl90cmltX3Jjc3VtKHNrYjIsIGxlbik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKKwkJZXJyID0gLUVJTlZBTDsKIAl9CiAKKwlpcDZoID0gaXB2Nl9oZHIoc2tiMik7CisKIAlzd2l0Y2ggKHNrYjItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCWlmICghY3N1bV9mb2xkKHNrYjItPmNzdW0pKQorCQlpZiAoIWNzdW1faXB2Nl9tYWdpYygmaXA2aC0+c2FkZHIsICZpcDZoLT5kYWRkciwgc2tiMi0+bGVuLAorCQkJCQlJUFBST1RPX0lDTVBWNiwgc2tiMi0+Y3N1bSkpCiAJCQlicmVhazsKIAkJLypGQUxMVEhST1VHSCovCiAJY2FzZSBDSEVDS1NVTV9OT05FOgotCQlza2IyLT5jc3VtID0gMDsKLQkJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IyKSkKKwkJc2tiMi0+Y3N1bSA9IH5jc3VtX3VuZm9sZChjc3VtX2lwdjZfbWFnaWMoJmlwNmgtPnNhZGRyLAorCQkJCQkJCSZpcDZoLT5kYWRkciwKKwkJCQkJCQlza2IyLT5sZW4sCisJCQkJCQkJSVBQUk9UT19JQ01QVjYsIDApKTsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYjIpKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTM3LDcgKzE1NDQsNyBAQAogCiAJQlJfSU5QVVRfU0tCX0NCKHNrYiktPmlnbXAgPSAxOwogCi0Jc3dpdGNoIChpY21wNmgtPmljbXA2X3R5cGUpIHsKKwlzd2l0Y2ggKGljbXA2X3R5cGUpIHsKIAljYXNlIElDTVBWNl9NR01fUkVQT1JUOgogCSAgICB7CiAJCXN0cnVjdCBtbGRfbXNnICptbGQ7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwppbmRleCA2NTQ1ZWU5Li5hNzZiNjIxIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCisrKyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKQEAgLTM0LDYgKzM0LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOworCWJvb2wgY2hhbmdlZF9hZGRyOwogCWludCBlcnI7CiAKIAkvKiByZWdpc3RlciBvZiBicmlkZ2UgY29tcGxldGVkLCBhZGQgc3lzZnMgZW50cmllcyAqLwpAQCAtNTcsOCArNTgsMTIgQEAKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKIAkJYnJfZmRiX2NoYW5nZWFkZHIocCwgZGV2LT5kZXZfYWRkcik7Ci0JCWJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoYnIpOworCQljaGFuZ2VkX2FkZHIgPSBicl9zdHBfcmVjYWxjdWxhdGVfYnJpZGdlX2lkKGJyKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKworCQlpZiAoY2hhbmdlZF9hZGRyKQorCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBici0+ZGV2KTsKKwogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0NIQU5HRToKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDJiNWNhMWEuLjU4NjRjYzQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTE5OCw3ICsxMTk4LDggQEAKIAogCWlmICh0YWJsZS0+Y2hlY2sgJiYgdGFibGUtPmNoZWNrKG5ld2luZm8sIHRhYmxlLT52YWxpZF9ob29rcykpIHsKIAkJQlVHUFJJTlQoIlRoZSB0YWJsZSBkb2Vzbid0IGxpa2UgaXRzIG93biBpbml0aWFsIGRhdGEsIGxvbFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfY2hhaW5zdGFjazsKIAl9CiAKIAl0YWJsZS0+cHJpdmF0ZSA9IG5ld2luZm87CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tc2dwb29sLmMgYi9uZXQvY2VwaC9tc2dwb29sLmMKaW5kZXggZDVmMmQ5Ny4uMWY0Y2IzMCAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbXNncG9vbC5jCisrKyBiL25ldC9jZXBoL21zZ3Bvb2wuYwpAQCAtNywyNyArNywzNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2VwaC9tc2dwb29sLmg+CiAKLXN0YXRpYyB2b2lkICphbGxvY19mbihnZnBfdCBnZnBfbWFzaywgdm9pZCAqYXJnKQorc3RhdGljIHZvaWQgKm1zZ3Bvb2xfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgY2VwaF9tc2dwb29sICpwb29sID0gYXJnOwotCXZvaWQgKnA7CisJc3RydWN0IGNlcGhfbXNnICptc2c7CiAKLQlwID0gY2VwaF9tc2dfbmV3KDAsIHBvb2wtPmZyb250X2xlbiwgZ2ZwX21hc2spOwotCWlmICghcCkKLQkJcHJfZXJyKCJtc2dwb29sICVzIGFsbG9jIGZhaWxlZFxuIiwgcG9vbC0+bmFtZSk7Ci0JcmV0dXJuIHA7CisJbXNnID0gY2VwaF9tc2dfbmV3KDAsIHBvb2wtPmZyb250X2xlbiwgZ2ZwX21hc2spOworCWlmICghbXNnKSB7CisJCWRvdXQoIm1zZ3Bvb2xfYWxsb2MgJXMgZmFpbGVkXG4iLCBwb29sLT5uYW1lKTsKKwl9IGVsc2UgeworCQlkb3V0KCJtc2dwb29sX2FsbG9jICVzICVwXG4iLCBwb29sLT5uYW1lLCBtc2cpOworCQltc2ctPnBvb2wgPSBwb29sOworCX0KKwlyZXR1cm4gbXNnOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2ZuKHZvaWQgKmVsZW1lbnQsIHZvaWQgKmFyZykKK3N0YXRpYyB2b2lkIG1zZ3Bvb2xfZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICphcmcpCiB7Ci0JY2VwaF9tc2dfcHV0KGVsZW1lbnQpOworCXN0cnVjdCBjZXBoX21zZ3Bvb2wgKnBvb2wgPSBhcmc7CisJc3RydWN0IGNlcGhfbXNnICptc2cgPSBlbGVtZW50OworCisJZG91dCgibXNncG9vbF9yZWxlYXNlICVzICVwXG4iLCBwb29sLT5uYW1lLCBtc2cpOworCW1zZy0+cG9vbCA9IE5VTEw7CisJY2VwaF9tc2dfcHV0KG1zZyk7CiB9CiAKIGludCBjZXBoX21zZ3Bvb2xfaW5pdChzdHJ1Y3QgY2VwaF9tc2dwb29sICpwb29sLAogCQkgICAgICBpbnQgZnJvbnRfbGVuLCBpbnQgc2l6ZSwgYm9vbCBibG9ja2luZywgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlkb3V0KCJtc2dwb29sICVzIGluaXRcbiIsIG5hbWUpOwogCXBvb2wtPmZyb250X2xlbiA9IGZyb250X2xlbjsKLQlwb29sLT5wb29sID0gbWVtcG9vbF9jcmVhdGUoc2l6ZSwgYWxsb2NfZm4sIGZyZWVfZm4sIHBvb2wpOworCXBvb2wtPnBvb2wgPSBtZW1wb29sX2NyZWF0ZShzaXplLCBtc2dwb29sX2FsbG9jLCBtc2dwb29sX2ZyZWUsIHBvb2wpOwogCWlmICghcG9vbC0+cG9vbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcG9vbC0+bmFtZSA9IG5hbWU7CkBAIC0zNiwxNCArNDYsMTcgQEAKIAogdm9pZCBjZXBoX21zZ3Bvb2xfZGVzdHJveShzdHJ1Y3QgY2VwaF9tc2dwb29sICpwb29sKQogeworCWRvdXQoIm1zZ3Bvb2wgJXMgZGVzdHJveVxuIiwgcG9vbC0+bmFtZSk7CiAJbWVtcG9vbF9kZXN0cm95KHBvb2wtPnBvb2wpOwogfQogCiBzdHJ1Y3QgY2VwaF9tc2cgKmNlcGhfbXNncG9vbF9nZXQoc3RydWN0IGNlcGhfbXNncG9vbCAqcG9vbCwKIAkJCQkgIGludCBmcm9udF9sZW4pCiB7CisJc3RydWN0IGNlcGhfbXNnICptc2c7CisKIAlpZiAoZnJvbnRfbGVuID4gcG9vbC0+ZnJvbnRfbGVuKSB7Ci0JCXByX2VycigibXNncG9vbF9nZXQgcG9vbCAlcyBuZWVkIGZyb250ICVkLCBwb29sIHNpemUgaXMgJWRcbiIsCisJCWRvdXQoIm1zZ3Bvb2xfZ2V0ICVzIG5lZWQgZnJvbnQgJWQsIHBvb2wgc2l6ZSBpcyAlZFxuIiwKIAkJICAgICAgIHBvb2wtPm5hbWUsIGZyb250X2xlbiwgcG9vbC0+ZnJvbnRfbGVuKTsKIAkJV0FSTl9PTigxKTsKIApAQCAtNTEsMTQgKzY0LDE5IEBACiAJCXJldHVybiBjZXBoX21zZ19uZXcoMCwgZnJvbnRfbGVuLCBHRlBfTk9GUyk7CiAJfQogCi0JcmV0dXJuIG1lbXBvb2xfYWxsb2MocG9vbC0+cG9vbCwgR0ZQX05PRlMpOworCW1zZyA9IG1lbXBvb2xfYWxsb2MocG9vbC0+cG9vbCwgR0ZQX05PRlMpOworCWRvdXQoIm1zZ3Bvb2xfZ2V0ICVzICVwXG4iLCBwb29sLT5uYW1lLCBtc2cpOworCXJldHVybiBtc2c7CiB9CiAKIHZvaWQgY2VwaF9tc2dwb29sX3B1dChzdHJ1Y3QgY2VwaF9tc2dwb29sICpwb29sLCBzdHJ1Y3QgY2VwaF9tc2cgKm1zZykKIHsKKwlkb3V0KCJtc2dwb29sX3B1dCAlcyAlcFxuIiwgcG9vbC0+bmFtZSwgbXNnKTsKKwogCS8qIHJlc2V0IG1zZyBmcm9udF9sZW47IHVzZXIgbWF5IGhhdmUgY2hhbmdlZCBpdCAqLwogCW1zZy0+ZnJvbnQuaW92X2xlbiA9IHBvb2wtPmZyb250X2xlbjsKIAltc2ctPmhkci5mcm9udF9sZW4gPSBjcHVfdG9fbGUzMihwb29sLT5mcm9udF9sZW4pOwogCiAJa3JlZl9pbml0KCZtc2ctPmtyZWYpOyAgLyogcmV0YWtlIHNpbmdsZSByZWYgKi8KKwltZW1wb29sX2ZyZWUobXNnLCBwb29sLT5wb29sKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jZXBoL29zZF9jbGllbnQuYyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwppbmRleCBjZTMxMGVlLi4xNjgzNmE3IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMKKysrIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCkBAIC02ODUsNiArNjg1LDE4IEBACiAJcHV0X29zZChvc2QpOwogfQogCitzdGF0aWMgdm9pZCByZW1vdmVfYWxsX29zZHMoc3RydWN0IGNlcGhfb3NkX2NsaWVudCAqb3NkYykKK3sKKwlkb3V0KCJfX3JlbW92ZV9vbGRfb3NkcyAlcFxuIiwgb3NkYyk7CisJbXV0ZXhfbG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7CisJd2hpbGUgKCFSQl9FTVBUWV9ST09UKCZvc2RjLT5vc2RzKSkgeworCQlzdHJ1Y3QgY2VwaF9vc2QgKm9zZCA9IHJiX2VudHJ5KHJiX2ZpcnN0KCZvc2RjLT5vc2RzKSwKKwkJCQkJCXN0cnVjdCBjZXBoX29zZCwgb19ub2RlKTsKKwkJX19yZW1vdmVfb3NkKG9zZGMsIG9zZCk7CisJfQorCW11dGV4X3VubG9jaygmb3NkYy0+cmVxdWVzdF9tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fbW92ZV9vc2RfdG9fbHJ1KHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsCiAJCQkgICAgICBzdHJ1Y3QgY2VwaF9vc2QgKm9zZCkKIHsKQEAgLTcwMSwxNCArNzEzLDE0IEBACiAJCWxpc3RfZGVsX2luaXQoJm9zZC0+b19vc2RfbHJ1KTsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlX29sZF9vc2RzKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMsIGludCByZW1vdmVfYWxsKQorc3RhdGljIHZvaWQgcmVtb3ZlX29sZF9vc2RzKHN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMpCiB7CiAJc3RydWN0IGNlcGhfb3NkICpvc2QsICpub3NkOwogCiAJZG91dCgiX19yZW1vdmVfb2xkX29zZHMgJXBcbiIsIG9zZGMpOwogCW11dGV4X2xvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvc2QsIG5vc2QsICZvc2RjLT5vc2RfbHJ1LCBvX29zZF9scnUpIHsKLQkJaWYgKCFyZW1vdmVfYWxsICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIG9zZC0+bHJ1X3R0bCkpCisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvc2QtPmxydV90dGwpKQogCQkJYnJlYWs7CiAJCV9fcmVtb3ZlX29zZChvc2RjLCBvc2QpOwogCX0KQEAgLTc1MSw2ICs3NjMsNyBAQAogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBjZXBoX29zZCAqb3NkID0gTlVMTDsKIAorCWRvdXQoIl9faW5zZXJ0X29zZCAlcCBvc2QlZFxuIiwgbmV3LCBuZXctPm9fb3NkKTsKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCW9zZCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNlcGhfb3NkLCBvX25vZGUpOwpAQCAtMTE0NCw3ICsxMTU3LDcgQEAKIAogCWRvdXQoIm9zZHMgdGltZW91dFxuIik7CiAJZG93bl9yZWFkKCZvc2RjLT5tYXBfc2VtKTsKLQlyZW1vdmVfb2xkX29zZHMob3NkYywgMCk7CisJcmVtb3ZlX29sZF9vc2RzKG9zZGMpOwogCXVwX3JlYWQoJm9zZGMtPm1hcF9zZW0pOwogCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZvc2RjLT5vc2RzX3RpbWVvdXRfd29yaywKQEAgLTE4NjIsOCArMTg3NSw3IEBACiAJCWNlcGhfb3NkbWFwX2Rlc3Ryb3kob3NkYy0+b3NkbWFwKTsKIAkJb3NkYy0+b3NkbWFwID0gTlVMTDsKIAl9Ci0JcmVtb3ZlX29sZF9vc2RzKG9zZGMsIDEpOwotCVdBUk5fT04oIVJCX0VNUFRZX1JPT1QoJm9zZGMtPm9zZHMpKTsKKwlyZW1vdmVfYWxsX29zZHMob3NkYyk7CiAJbWVtcG9vbF9kZXN0cm95KG9zZGMtPnJlcV9tZW1wb29sKTsKIAljZXBoX21zZ3Bvb2xfZGVzdHJveSgmb3NkYy0+bXNncG9vbF9vcCk7CiAJY2VwaF9tc2dwb29sX2Rlc3Ryb3koJm9zZGMtPm1zZ3Bvb2xfb3BfcmVwbHkpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCA4YTA0ZGQyLi4wZDM1N2IxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogb2JqLXkgOj0gc29jay5vIHJlcXVlc3Rfc29jay5vIHNrYnVmZi5vIGlvdmVjLm8gZGF0YWdyYW0ubyBzdHJlYW0ubyBzY20ubyBcCi0JIGdlbl9zdGF0cy5vIGdlbl9lc3RpbWF0b3IubyBuZXRfbmFtZXNwYWNlLm8KKwkgZ2VuX3N0YXRzLm8gZ2VuX2VzdGltYXRvci5vIG5ldF9uYW1lc3BhY2UubyBzZWN1cmVfc2VxLm8KIAogb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm8KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCA4ZmFiOWIwLi4xMzM0ZDdlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMTMxOSwxMSArMTMxOSwxNSBAQAogCiAJCWlmICh0ZGlmIDw9IDApIHsKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwogCQkJX19za2JfdW5saW5rKHNrYiwgJnRibC0+cHJveHlfcXVldWUpOwotCQkJaWYgKHRibC0+cHJveHlfcmVkbyAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCQlpZiAodGJsLT5wcm94eV9yZWRvICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCQl0YmwtPnByb3h5X3JlZG8oc2tiKTsKLQkJCWVsc2UKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCX0gZWxzZSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CisJCQl9CiAKIAkJCWRldl9wdXQoZGV2KTsKIAkJfSBlbHNlIGlmICghc2NoZWRfbmV4dCB8fCB0ZGlmIDwgc2NoZWRfbmV4dCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCBhZGY4NGRkLi41MjYyMjUxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC01NTgsMTMgKzU1OCwxNCBAQAogCWlmIChza2Jfc2hhcmVkKHNrYikpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCWdvdG8gb3V0OworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJaWYgKGlwaC0+aWhsIDwgNSB8fCBpcGgtPnZlcnNpb24gIT0gNCkKIAkJZ290byBvdXQ7CiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaXBoLT5paGwqNCkpCiAJCWdvdG8gb3V0OworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJaWYgKGlwX2Zhc3RfY3N1bSgodTggKilpcGgsIGlwaC0+aWhsKSAhPSAwKQogCQlnb3RvIG91dDsKIApAQCAtNTc5LDYgKzU4MCw3IEBACiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpCiAJCWdvdG8gb3V0OwogCisJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmMKaW5kZXggNGMxZWYwMi4uODExYjUzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2NtLmMKKysrIGIvbmV0L2NvcmUvc2NtLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQkJCQlnb3RvIGVycm9yOwogCiAJCQkJY3JlZC0+dWlkID0gY3JlZC0+ZXVpZCA9IHAtPmNyZWRzLnVpZDsKLQkJCQljcmVkLT5naWQgPSBjcmVkLT5lZ2lkID0gcC0+Y3JlZHMudWlkOworCQkJCWNyZWQtPmdpZCA9IGNyZWQtPmVnaWQgPSBwLT5jcmVkcy5naWQ7CiAJCQkJcHV0X2NyZWQocC0+Y3JlZCk7CiAJCQkJcC0+Y3JlZCA9IGNyZWQ7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zZWN1cmVfc2VxLmMgYi9uZXQvY29yZS9zZWN1cmVfc2VxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzMjlkNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL3NlY3VyZV9zZXEuYwpAQCAtMCwwICsxLDE4NCBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPG5ldC9zZWN1cmVfc2VxLmg+CisKK3N0YXRpYyB1MzIgbmV0X3NlY3JldFtNRDVfTUVTU0FHRV9CWVRFUyAvIDRdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RhdGljIGludCBfX2luaXQgbmV0X3NlY3JldF9pbml0KHZvaWQpCit7CisJZ2V0X3JhbmRvbV9ieXRlcyhuZXRfc2VjcmV0LCBzaXplb2YobmV0X3NlY3JldCkpOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChuZXRfc2VjcmV0X2luaXQpOworCitzdGF0aWMgdTMyIHNlcV9zY2FsZSh1MzIgc2VxKQoreworCS8qCisJICoJQXMgY2xvc2UgYXMgcG9zc2libGUgdG8gUkZDIDc5Mywgd2hpY2gKKwkgKglzdWdnZXN0cyB1c2luZyBhIDI1MCBrSHogY2xvY2suCisJICoJRnVydGhlciByZWFkaW5nIHNob3dzIHRoaXMgYXNzdW1lcyAyIE1iL3MgbmV0d29ya3MuCisJICoJRm9yIDEwIE1iL3MgRXRoZXJuZXQsIGEgMSBNSHogY2xvY2sgaXMgYXBwcm9wcmlhdGUuCisJICoJRm9yIDEwIEdiL3MgRXRoZXJuZXQsIGEgMSBHSHogY2xvY2sgc2hvdWxkIGJlIG9rLCBidXQKKwkgKgl3ZSBhbHNvIG5lZWQgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gc28gdGhhdCB0aGUgdTMyIHNlcQorCSAqCW92ZXJsYXBzIGxlc3MgdGhhbiBvbmUgdGltZSBwZXIgTVNMICgyIG1pbnV0ZXMpLgorCSAqCUNob29zaW5nIGEgY2xvY2sgb2YgNjQgbnMgcGVyaW9kIGlzIE9LLiAocGVyaW9kIG9mIDI3NCBzKQorCSAqLworCXJldHVybiBzZXEgKyAoa3RpbWVfdG9fbnMoa3RpbWVfZ2V0X3JlYWwoKSkgPj4gNik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK19fdTMyIHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIoX19iZTMyICpzYWRkciwgX19iZTMyICpkYWRkciwKKwkJCQkgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCkKK3sKKwl1MzIgc2VjcmV0W01ENV9NRVNTQUdFX0JZVEVTIC8gNF07CisJdTMyIGhhc2hbTUQ1X0RJR0VTVF9XT1JEU107CisJdTMyIGk7CisKKwltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlzZWNyZXRbaV0gPSBuZXRfc2VjcmV0W2ldICsgZGFkZHJbaV07CisJc2VjcmV0WzRdID0gbmV0X3NlY3JldFs0XSArCisJCSgoKF9fZm9yY2UgdTE2KXNwb3J0IDw8IDE2KSArIChfX2ZvcmNlIHUxNilkcG9ydCk7CisJZm9yIChpID0gNTsgaSA8IE1ENV9NRVNTQUdFX0JZVEVTIC8gNDsgaSsrKQorCQlzZWNyZXRbaV0gPSBuZXRfc2VjcmV0W2ldOworCisJbWQ1X3RyYW5zZm9ybShoYXNoLCBzZWNyZXQpOworCisJcmV0dXJuIHNlcV9zY2FsZShoYXNoWzBdKTsKK30KK0VYUE9SVF9TWU1CT0woc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcik7CisKK3UzMiBzZWN1cmVfaXB2Nl9wb3J0X2VwaGVtZXJhbChjb25zdCBfX2JlMzIgKnNhZGRyLCBjb25zdCBfX2JlMzIgKmRhZGRyLAorCQkJICAgICAgIF9fYmUxNiBkcG9ydCkKK3sKKwl1MzIgc2VjcmV0W01ENV9NRVNTQUdFX0JZVEVTIC8gNF07CisJdTMyIGhhc2hbTUQ1X0RJR0VTVF9XT1JEU107CisJdTMyIGk7CisKKwltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlzZWNyZXRbaV0gPSBuZXRfc2VjcmV0W2ldICsgKF9fZm9yY2UgdTMyKSBkYWRkcltpXTsKKwlzZWNyZXRbNF0gPSBuZXRfc2VjcmV0WzRdICsgKF9fZm9yY2UgdTMyKWRwb3J0OworCWZvciAoaSA9IDU7IGkgPCBNRDVfTUVTU0FHRV9CWVRFUyAvIDQ7IGkrKykKKwkJc2VjcmV0W2ldID0gbmV0X3NlY3JldFtpXTsKKworCW1kNV90cmFuc2Zvcm0oaGFzaCwgc2VjcmV0KTsKKworCXJldHVybiBoYXNoWzBdOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSU5FVAorX191MzIgc2VjdXJlX2lwX2lkKF9fYmUzMiBkYWRkcikKK3sKKwl1MzIgaGFzaFtNRDVfRElHRVNUX1dPUkRTXTsKKworCWhhc2hbMF0gPSAoX19mb3JjZSBfX3UzMikgZGFkZHI7CisJaGFzaFsxXSA9IG5ldF9zZWNyZXRbMTNdOworCWhhc2hbMl0gPSBuZXRfc2VjcmV0WzE0XTsKKwloYXNoWzNdID0gbmV0X3NlY3JldFsxNV07CisKKwltZDVfdHJhbnNmb3JtKGhhc2gsIG5ldF9zZWNyZXQpOworCisJcmV0dXJuIGhhc2hbMF07Cit9CisKK19fdTMyIHNlY3VyZV9pcHY2X2lkKGNvbnN0IF9fYmUzMiBkYWRkcls0XSkKK3sKKwlfX3UzMiBoYXNoWzRdOworCisJbWVtY3B5KGhhc2gsIGRhZGRyLCAxNik7CisJbWQ1X3RyYW5zZm9ybShoYXNoLCBuZXRfc2VjcmV0KTsKKworCXJldHVybiBoYXNoWzBdOworfQorCitfX3UzMiBzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcihfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJCQkgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpCit7CisJdTMyIGhhc2hbTUQ1X0RJR0VTVF9XT1JEU107CisKKwloYXNoWzBdID0gKF9fZm9yY2UgdTMyKXNhZGRyOworCWhhc2hbMV0gPSAoX19mb3JjZSB1MzIpZGFkZHI7CisJaGFzaFsyXSA9ICgoX19mb3JjZSB1MTYpc3BvcnQgPDwgMTYpICsgKF9fZm9yY2UgdTE2KWRwb3J0OworCWhhc2hbM10gPSBuZXRfc2VjcmV0WzE1XTsKKworCW1kNV90cmFuc2Zvcm0oaGFzaCwgbmV0X3NlY3JldCk7CisKKwlyZXR1cm4gc2VxX3NjYWxlKGhhc2hbMF0pOworfQorCit1MzIgc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCkKK3sKKwl1MzIgaGFzaFtNRDVfRElHRVNUX1dPUkRTXTsKKworCWhhc2hbMF0gPSAoX19mb3JjZSB1MzIpc2FkZHI7CisJaGFzaFsxXSA9IChfX2ZvcmNlIHUzMilkYWRkcjsKKwloYXNoWzJdID0gKF9fZm9yY2UgdTMyKWRwb3J0IF4gbmV0X3NlY3JldFsxNF07CisJaGFzaFszXSA9IG5ldF9zZWNyZXRbMTVdOworCisJbWQ1X3RyYW5zZm9ybShoYXNoLCBuZXRfc2VjcmV0KTsKKworCXJldHVybiBoYXNoWzBdOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9EQ0NQKSB8fCBkZWZpbmVkKENPTkZJR19JUF9EQ0NQX01PRFVMRSkKK3U2NCBzZWN1cmVfZGNjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpCit7CisJdTMyIGhhc2hbTUQ1X0RJR0VTVF9XT1JEU107CisJdTY0IHNlcTsKKworCWhhc2hbMF0gPSAoX19mb3JjZSB1MzIpc2FkZHI7CisJaGFzaFsxXSA9IChfX2ZvcmNlIHUzMilkYWRkcjsKKwloYXNoWzJdID0gKChfX2ZvcmNlIHUxNilzcG9ydCA8PCAxNikgKyAoX19mb3JjZSB1MTYpZHBvcnQ7CisJaGFzaFszXSA9IG5ldF9zZWNyZXRbMTVdOworCisJbWQ1X3RyYW5zZm9ybShoYXNoLCBuZXRfc2VjcmV0KTsKKworCXNlcSA9IGhhc2hbMF0gfCAoKCh1NjQpaGFzaFsxXSkgPDwgMzIpOworCXNlcSArPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKTsKKwlzZXEgJj0gKDF1bGwgPDwgNDgpIC0gMTsKKworCXJldHVybiBzZXE7Cit9CitFWFBPUlRfU1lNQk9MKHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3U2NCBzZWN1cmVfZGNjcHY2X3NlcXVlbmNlX251bWJlcihfX2JlMzIgKnNhZGRyLCBfX2JlMzIgKmRhZGRyLAorCQkJCSAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQpCit7CisJdTMyIHNlY3JldFtNRDVfTUVTU0FHRV9CWVRFUyAvIDRdOworCXUzMiBoYXNoW01ENV9ESUdFU1RfV09SRFNdOworCXU2NCBzZXE7CisJdTMyIGk7CisKKwltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlzZWNyZXRbaV0gPSBuZXRfc2VjcmV0W2ldICsgZGFkZHJbaV07CisJc2VjcmV0WzRdID0gbmV0X3NlY3JldFs0XSArCisJCSgoKF9fZm9yY2UgdTE2KXNwb3J0IDw8IDE2KSArIChfX2ZvcmNlIHUxNilkcG9ydCk7CisJZm9yIChpID0gNTsgaSA8IE1ENV9NRVNTQUdFX0JZVEVTIC8gNDsgaSsrKQorCQlzZWNyZXRbaV0gPSBuZXRfc2VjcmV0W2ldOworCisJbWQ1X3RyYW5zZm9ybShoYXNoLCBzZWNyZXQpOworCisJc2VxID0gaGFzaFswXSB8ICgoKHU2NCloYXNoWzFdKSA8PCAzMik7CisJc2VxICs9IGt0aW1lX3RvX25zKGt0aW1lX2dldF9yZWFsKCkpOworCXNlcSAmPSAoMXVsbCA8PCA0OCkgLSAxOworCisJcmV0dXJuIHNlcTsKK30KK0VYUE9SVF9TWU1CT0woc2VjdXJlX2RjY3B2Nl9zZXF1ZW5jZV9udW1iZXIpOworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMmJlZGE4Mi4uMjcwMDJkZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTEzNjksOCArMTM2OSwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChfX3Bza2JfcHVsbF90YWlsKTsKIAotLyogQ29weSBzb21lIGRhdGEgYml0cyBmcm9tIHNrYiB0byBrZXJuZWwgYnVmZmVyLiAqLwotCisvKioKKyAqCXNrYl9jb3B5X2JpdHMgLSBjb3B5IGJpdHMgZnJvbSBza2IgdG8ga2VybmVsIGJ1ZmZlcgorICoJQHNrYjogc291cmNlIHNrYgorICoJQG9mZnNldDogb2Zmc2V0IGluIHNvdXJjZQorICoJQHRvOiBkZXN0aW5hdGlvbiBidWZmZXIKKyAqCUBsZW46IG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKgorICoJQ29weSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBzb3VyY2Ugc2tiIHRvIHRoZQorICoJZGVzdGluYXRpb24gYnVmZmVyLgorICoKKyAqCUNBVVRJT04gISA6CisgKgkJSWYgaXRzIHByb3RvdHlwZSBpcyBldmVyIGNoYW5nZWQsCisgKgkJY2hlY2sgYXJjaC97Kn0vbmV0L3sqfS5TIGZpbGVzLAorICoJCXNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIEJQRiBhc3NlbWJseSBjb2RlLgorICovCiBpbnQgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB2b2lkICp0bywgaW50IGxlbikKIHsKIAlpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IDhjMzZhZGYuLjMzMjYzOWIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyNpbmNsdWRlIDxuZXQvc2VjdXJlX3NlcS5oPgogCiAjaW5jbHVkZSAiYWNrdmVjLmgiCiAjaW5jbHVkZSAiY2NpZC5oIgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IDhkYzQzNDguLmI3NGY3NjEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvdHJhbnNwX3Y2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CisjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KIAogI2luY2x1ZGUgImRjY3AuaCIKICNpbmNsdWRlICJpcHY2LmgiCkBAIC02OSwxMyArNzAsNyBAQAogCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjZfY3N1bV9maW5pc2goc2tiLCAmbnAtPnNhZGRyLCAmbnAtPmRhZGRyKTsKIH0KIAotc3RhdGljIGlubGluZSBfX3UzMiBzZWN1cmVfZGNjcHY2X3NlcXVlbmNlX251bWJlcihfX2JlMzIgKnNhZGRyLCBfX2JlMzIgKmRhZGRyLAotCQkJCQkJICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCAgICkKLXsKLQlyZXR1cm4gc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihzYWRkciwgZGFkZHIsIHNwb3J0LCBkcG9ydCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX191MzIgZGNjcF92Nl9pbml0X3NlcXVlbmNlKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIF9fdTY0IGRjY3BfdjZfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBzZWN1cmVfZGNjcHY2X3NlcXVlbmNlX251bWJlcihpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzIsCiAJCQkJCSAgICAgaXB2Nl9oZHIoc2tiKS0+c2FkZHIuczZfYWRkcjMyLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IGYxZDI3ZjYuLmQ1NzcxOTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCQkJYnJlYWs7CiAJCWZvciAoaT0wOyBpPG5zcmNzOyBpKyspIHsKIAkJCS8qIHNraXAgaW5hY3RpdmUgZmlsdGVycyAqLwotCQkJaWYgKHBtYy0+c2Zjb3VudFtNQ0FTVF9JTkNMVURFXSB8fAorCQkJaWYgKHBzZi0+c2ZfY291bnRbTUNBU1RfSU5DTFVERV0gfHwKIAkJCSAgICBwbWMtPnNmY291bnRbTUNBU1RfRVhDTFVERV0gIT0KIAkJCSAgICBwc2YtPnNmX2NvdW50W01DQVNUX0VYQ0xVREVdKQogCQkJCWNvbnRpbnVlOwpAQCAtMTcxOCw3ICsxNzE4LDcgQEAKIAogCQlwbWMtPnNmY291bnRbc2Ztb2RlXS0tOwogCQlmb3IgKGo9MDsgajxpOyBqKyspCi0JCQkodm9pZCkgaXBfbWNfZGVsMV9zcmMocG1jLCBzZm1vZGUsICZwc2ZzcmNbaV0pOworCQkJKHZvaWQpIGlwX21jX2RlbDFfc3JjKHBtYywgc2Ztb2RlLCAmcHNmc3JjW2pdKTsKIAl9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLT5zZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCQlzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwppbmRleCAzYzAzNjlhLi45ODRlYzY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9zZWN1cmVfc2VxLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0cGVlci5jIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwppbmRleCBlMzgyMTM4Li44NmYxM2M2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRwZWVyLmg+CisjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KIAogLyoKICAqICBUaGVvcnkgb2Ygb3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggY2NhYWE4NS4uOGM2NTYzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEyMiw2ICsxMjIsNyBAQAogCW5ld3NrYi0+cGt0X3R5cGUgPSBQQUNLRVRfTE9PUEJBQ0s7CiAJbmV3c2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAlXQVJOX09OKCFza2JfZHN0KG5ld3NrYikpOworCXNrYl9kc3RfZm9yY2UobmV3c2tiKTsKIAluZXRpZl9yeF9uaShuZXdza2IpOwogCXJldHVybiAwOwogfQpAQCAtMjA0LDkgKzIwNSwxNSBAQAogCQlza2IgPSBza2IyOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKIAluZWlnaCA9IGRzdF9nZXRfbmVpZ2hib3VyKGRzdCk7Ci0JaWYgKG5laWdoKQotCQlyZXR1cm4gbmVpZ2hfb3V0cHV0KG5laWdoLCBza2IpOworCWlmIChuZWlnaCkgeworCQlpbnQgcmVzID0gbmVpZ2hfb3V0cHV0KG5laWdoLCBza2IpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gcmVzOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJpcF9maW5pc2hfb3V0cHV0MjogTm8gaGVhZGVyIGNhY2hlIGFuZCBubyBuZWlnaGJvdXIhXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGFiMGM5ZWYuLjg5MDVlOTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKKwkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlpbnQgdmFsOwpAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAogCQltc2cubXNnX2NvbnRyb2wgPSBvcHR2YWw7CiAJCW1zZy5tc2dfY29udHJvbGxlbiA9IGxlbjsKLQkJbXNnLm1zZ19mbGFncyA9IDA7CisJCW1zZy5tc2dfZmxhZ3MgPSBmbGFnczsKIAogCQlpZiAoaW5ldC0+Y21zZ19mbGFncyAmIElQX0NNU0dfUEtUSU5GTykgewogCQkJc3RydWN0IGluX3BrdGluZm8gaW5mbzsKQEAgLTEyOTQsNyArMTI5NCw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRvX2lwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJZXJyID0gZG9faXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAwKTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJLyogd2UgbmVlZCB0byBleGNsdWRlIGFsbCBwb3NzaWJsZSBFTk9QUk9UT09QVHMgZXhjZXB0IGRlZmF1bHQgY2FzZSAqLwogCWlmIChlcnIgPT0gLUVOT1BST1RPT1BUICYmIG9wdG5hbWUgIT0gSVBfUEtUT1BUSU9OUyAmJgpAQCAtMTMyNyw3ICsxMzI3LDggQEAKIAkJcmV0dXJuIGNvbXBhdF9tY19nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCiAJCQlpcF9nZXRzb2Nrb3B0KTsKIAotCWVyciA9IGRvX2lwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJZXJyID0gZG9faXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLAorCQlNU0dfQ01TR19DT01QQVQpOwogCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCS8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKaW5kZXggMmU5N2UzZS4uOTI5YjI3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKQEAgLTE4LDE3ICsxOCwxNSBAQAogCXN0cnVjdCBydGFibGUgKnJ0OwogCXN0cnVjdCBmbG93aTQgZmw0ID0ge307CiAJX19iZTMyIHNhZGRyID0gaXBoLT5zYWRkcjsKLQlfX3U4IGZsYWdzID0gMDsKKwlfX3U4IGZsYWdzID0gc2tiLT5zayA/IGluZXRfc2tfZmxvd2lfZmxhZ3Moc2tiLT5zaykgOiAwOwogCXVuc2lnbmVkIGludCBoaF9sZW47CiAKLQlpZiAoIXNrYi0+c2sgJiYgYWRkcl90eXBlICE9IFJUTl9MT0NBTCkgewotCQlpZiAoYWRkcl90eXBlID09IFJUTl9VTlNQRUMpCi0JCQlhZGRyX3R5cGUgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHNhZGRyKTsKLQkJaWYgKGFkZHJfdHlwZSA9PSBSVE5fTE9DQUwgfHwgYWRkcl90eXBlID09IFJUTl9VTklDQVNUKQotCQkJZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7Ci0JCWVsc2UKLQkJCXNhZGRyID0gMDsKLQl9CisJaWYgKGFkZHJfdHlwZSA9PSBSVE5fVU5TUEVDKQorCQlhZGRyX3R5cGUgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHNhZGRyKTsKKwlpZiAoYWRkcl90eXBlID09IFJUTl9MT0NBTCB8fCBhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QpCisJCWZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDOworCWVsc2UKKwkJc2FkZHIgPSAwOwogCiAJLyogc29tZSBub24tc3RhbmRhcmQgaGFja3MgbGlrZSBpcHRfUkVKRUNULmM6c2VuZF9yZXNldCgpIGNhbiBjYXVzZQogCSAqIHBhY2tldHMgd2l0aCBmb3JlaWduIHNhZGRyIHRvIGFwcGVhciBvbiB0aGUgTkZfSU5FVF9MT0NBTF9PVVQgaG9vay4KQEAgLTM4LDcgKzM2LDcgQEAKIAlmbDQuZmxvd2k0X3RvcyA9IFJUX1RPUyhpcGgtPnRvcyk7CiAJZmw0LmZsb3dpNF9vaWYgPSBza2ItPnNrID8gc2tiLT5zay0+c2tfYm91bmRfZGV2X2lmIDogMDsKIAlmbDQuZmxvd2k0X21hcmsgPSBza2ItPm1hcms7Ci0JZmw0LmZsb3dpNF9mbGFncyA9IHNrYi0+c2sgPyBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrYi0+c2spIDogZmxhZ3M7CisJZmw0LmZsb3dpNF9mbGFncyA9IGZsYWdzOwogCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOwogCWlmIChJU19FUlIocnQpKQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2NvbW1vbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19jb21tb24uYwppbmRleCAzZTYxZmFmLi5mNTJkNDFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2NvbW1vbi5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fY29tbW9uLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDE0NTdhY2IuLjYxNzE0YmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC01NjMsNyArNTYzLDggQEAKIAlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgaXBjLm9pZiwgc2stPnNrX21hcmssIHRvcywKIAkJCSAgIFJUX1NDT1BFX1VOSVZFUlNFLAogCQkJICAgaW5ldC0+aGRyaW5jbCA/IElQUFJPVE9fUkFXIDogc2stPnNrX3Byb3RvY29sLAotCQkJICAgRkxPV0lfRkxBR19DQU5fU0xFRVAsIGRhZGRyLCBzYWRkciwgMCwgMCk7CisJCQkgICBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSB8IEZMT1dJX0ZMQUdfQ0FOX1NMRUVQLAorCQkJICAgZGFkZHIsIHNhZGRyLCAwLCAwKTsKIAogCWlmICghaW5ldC0+aGRyaW5jbCkgewogCQllcnIgPSByYXdfcHJvYmVfcHJvdG9fb3B0KCZmbDQsIG1zZyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAxNzMwNjg5Li4wNzUyMTJlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bmV0L2F0bWNsaXAuaD4KKyNpbmNsdWRlIDxuZXQvc2VjdXJlX3NlcS5oPgogCiAjZGVmaW5lIFJUX0ZMX1RPUyhvbGRmbHA0KSBcCiAgICAgKCh1MzIpKG9sZGZscDQtPmZsb3dpNF90b3MgJiAoSVBUT1NfUlRfTUFTSyB8IFJUT19PTkxJTkspKSkKQEAgLTcyMSw3ICs3MjIsNyBAQAogewogCXJldHVybiAoKCgoX19mb3JjZSB1MzIpcnQxLT5ydF9rZXlfZHN0IF4gKF9fZm9yY2UgdTMyKXJ0Mi0+cnRfa2V5X2RzdCkgfAogCQkoKF9fZm9yY2UgdTMyKXJ0MS0+cnRfa2V5X3NyYyBeIChfX2ZvcmNlIHUzMilydDItPnJ0X2tleV9zcmMpIHwKLQkJKHJ0MS0+cnRfaWlmIF4gcnQyLT5ydF9paWYpKSA9PSAwKTsKKwkJKHJ0MS0+cnRfcm91dGVfaWlmIF4gcnQyLT5ydF9yb3V0ZV9paWYpKSA9PSAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9rZXlzKHN0cnVjdCBydGFibGUgKnJ0MSwgc3RydWN0IHJ0YWJsZSAqcnQyKQpAQCAtNzMwLDggKzczMSw4IEBACiAJCSgoX19mb3JjZSB1MzIpcnQxLT5ydF9rZXlfc3JjIF4gKF9fZm9yY2UgdTMyKXJ0Mi0+cnRfa2V5X3NyYykgfAogCQkocnQxLT5ydF9tYXJrIF4gcnQyLT5ydF9tYXJrKSB8CiAJCShydDEtPnJ0X2tleV90b3MgXiBydDItPnJ0X2tleV90b3MpIHwKLQkJKHJ0MS0+cnRfb2lmIF4gcnQyLT5ydF9vaWYpIHwKLQkJKHJ0MS0+cnRfaWlmIF4gcnQyLT5ydF9paWYpKSA9PSAwOworCQkocnQxLT5ydF9yb3V0ZV9paWYgXiBydDItPnJ0X3JvdXRlX2lpZikgfAorCQkocnQxLT5ydF9vaWYgXiBydDItPnJ0X29pZikpID09IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfbmV0bnMoc3RydWN0IHJ0YWJsZSAqcnQxLCBzdHJ1Y3QgcnRhYmxlICpydDIpCkBAIC0xNjI4LDE2ICsxNjI5LDE4IEBACiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSBkc3Q7CiAJX19iZTMyIG9yaWdfZ3cgPSBydC0+cnRfZ2F0ZXdheTsKLQlzdHJ1Y3QgbmVpZ2hib3VyICpuOworCXN0cnVjdCBuZWlnaGJvdXIgKm4sICpvbGRfbjsKIAogCWRzdF9jb25maXJtKCZydC0+ZHN0KTsKIAotCW5laWdoX3JlbGVhc2UoZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpKTsKLQlkc3Rfc2V0X25laWdoYm91cigmcnQtPmRzdCwgTlVMTCk7Ci0KIAlydC0+cnRfZ2F0ZXdheSA9IHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQ7Ci0JcnRfYmluZF9uZWlnaGJvdXIocnQpOwotCW4gPSBkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCk7CisKKwluID0gaXB2NF9uZWlnaF9sb29rdXAoJnJ0LT5kc3QsICZydC0+cnRfZ2F0ZXdheSk7CisJaWYgKElTX0VSUihuKSkKKwkJcmV0dXJuIFBUUl9FUlIobik7CisJb2xkX24gPSB4Y2hnKCZydC0+ZHN0Ll9uZWlnaGJvdXIsIG4pOworCWlmIChvbGRfbikKKwkJbmVpZ2hfcmVsZWFzZShvbGRfbik7CiAJaWYgKCFuIHx8ICEobi0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkgewogCQlpZiAobikKIAkJCW5laWdoX2V2ZW50X3NlbmQobiwgTlVMTCk7CkBAIC0yMzE3LDggKzIzMjAsNyBAQAogCSAgICAgcnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0aC0+ZHN0LnJ0X25leHQpKSB7CiAJCWlmICgoKChfX2ZvcmNlIHUzMilydGgtPnJ0X2tleV9kc3QgXiAoX19mb3JjZSB1MzIpZGFkZHIpIHwKIAkJICAgICAoKF9fZm9yY2UgdTMyKXJ0aC0+cnRfa2V5X3NyYyBeIChfX2ZvcmNlIHUzMilzYWRkcikgfAotCQkgICAgIChydGgtPnJ0X2lpZiBeIGlpZikgfAotCQkgICAgIHJ0aC0+cnRfb2lmIHwKKwkJICAgICAocnRoLT5ydF9yb3V0ZV9paWYgXiBpaWYpIHwKIAkJICAgICAocnRoLT5ydF9rZXlfdG9zIF4gdG9zKSkgPT0gMCAmJgogCQkgICAgcnRoLT5ydF9tYXJrID09IHNrYi0+bWFyayAmJgogCQkgICAgbmV0X2VxKGRldl9uZXQocnRoLT5kc3QuZGV2KSwgbmV0KSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3luY29va2llcy5jIGIvbmV0L2lwdjQvc3luY29va2llcy5jCmluZGV4IDkyYmI5NDMuLjNiYzVjOGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCWludCBtc3M7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJX191OCByY3Zfd3NjYWxlOwotCWJvb2wgZWNuX29rOworCWJvb2wgZWNuX29rID0gZmFsc2U7CiAKIAlpZiAoIXN5c2N0bF90Y3Bfc3luY29va2llcyB8fCAhdGgtPmFjayB8fCB0aC0+cnN0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDk1NWI4ZTYuLjFjMTJiOGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPG5ldC90aW1ld2FpdF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZG1hLmg+CisjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBhNTU1MDBjLi5mMDEyZWJkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTY1Niw3ICs2NTYsNyBAQAogCSAqIGxheWVyIGFkZHJlc3Mgb2Ygb3VyIG5leGhvcCByb3V0ZXIKIAkgKi8KIAotCWlmIChkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCkgPT0gTlVMTCkKKwlpZiAoZHN0X2dldF9uZWlnaGJvdXJfcmF3KCZydC0+ZHN0KSA9PSBOVUxMKQogCQlpZmEtPmZsYWdzICY9IH5JRkFfRl9PUFRJTUlTVElDOwogCiAJaWZhLT5pZGV2ID0gaWRldjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2RhdGFncmFtLmMgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCmluZGV4IDE2NTYwMzMuLjllZjE4MzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwpAQCAtMzMsNiArMzMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfbWFwcGVkX2FkZHJfYW55KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSkKK3sKKwlyZXR1cm4gKGlwdjZfYWRkcl92NG1hcHBlZChhKSAmJiAoYS0+czZfYWRkcjMyWzNdID09IDApKTsKK30KKwogaW50IGlwNl9kYXRhZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbjYJKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB1YWRkcjsKQEAgLTEwMiwxMCArMTA3LDEyIEBACiAKIAkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChpbmV0LT5pbmV0X2RhZGRyLCAmbnAtPmRhZGRyKTsKIAotCQlpZiAoaXB2Nl9hZGRyX2FueSgmbnAtPnNhZGRyKSkKKwkJaWYgKGlwdjZfYWRkcl9hbnkoJm5wLT5zYWRkcikgfHwKKwkJICAgIGlwdjZfbWFwcGVkX2FkZHJfYW55KCZucC0+c2FkZHIpKQogCQkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChpbmV0LT5pbmV0X3NhZGRyLCAmbnAtPnNhZGRyKTsKIAotCQlpZiAoaXB2Nl9hZGRyX2FueSgmbnAtPnJjdl9zYWRkcikpIHsKKwkJaWYgKGlwdjZfYWRkcl9hbnkoJm5wLT5yY3Zfc2FkZHIpIHx8CisJCSAgICBpcHY2X21hcHBlZF9hZGRyX2FueSgmbnAtPnJjdl9zYWRkcikpIHsKIAkJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoaW5ldC0+aW5ldF9yY3Zfc2FkZHIsCiAJCQkJCSAgICAgICAmbnAtPnJjdl9zYWRkcik7CiAJCQlpZiAoc2stPnNrX3Byb3QtPnJlaGFzaCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwppbmRleCBiNTMxOTcyLi43M2YxYTAwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfaGFzaHRhYmxlcy5oPgogI2luY2x1ZGUgPG5ldC9pbmV0Nl9oYXNodGFibGVzLmg+CisjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KIAogaW50IF9faW5ldDZfaGFzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IDU0YTQ2NzguLjMyMGQ5MWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTE0NTUsNyArMTQ1NSw3IEBACiAJCQlSVDZfVFJBQ0UoImFnaW5nIGNsb25lICVwXG4iLCBydCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSBpZiAoKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0dBVEVXQVkpICYmCi0JCQkgICAoIShkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCktPmZsYWdzICYgTlRGX1JPVVRFUikpKSB7CisJCQkgICAoIShkc3RfZ2V0X25laWdoYm91cl9yYXcoJnJ0LT5kc3QpLT5mbGFncyAmIE5URl9ST1VURVIpKSkgewogCQkJUlQ2X1RSQUNFKCJwdXJnaW5nIHJvdXRlICVwIHZpYSBub24tcm91dGVyIGJ1dCBnYXRld2F5XG4iLAogCQkJCSAgcnQpOwogCQkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDMyZTUzMzkuLjRjODgyY2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTEzNSwxMCArMTM1LDE1IEBACiAJCQkJc2tiLT5sZW4pOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKIAluZWlnaCA9IGRzdF9nZXRfbmVpZ2hib3VyKGRzdCk7Ci0JaWYgKG5laWdoKQotCQlyZXR1cm4gbmVpZ2hfb3V0cHV0KG5laWdoLCBza2IpOworCWlmIChuZWlnaCkgeworCQlpbnQgcmVzID0gbmVpZ2hfb3V0cHV0KG5laWdoLCBza2IpOwogCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gcmVzOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlJUDZfSU5DX1NUQVRTX0JIKGRldl9uZXQoZHN0LT5kZXYpLAogCQkJIGlwNl9kc3RfaWRldihkc3QpLCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC05NzUsMTIgKzk4MCwxNCBAQAogCSAqIGRzdCBlbnRyeSBhbmQgcmVwbGFjZSBpdCBpbnN0ZWFkIHdpdGggdGhlCiAJICogZHN0IGVudHJ5IG9mIHRoZSBuZXh0aG9wIHJvdXRlcgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAluID0gZHN0X2dldF9uZWlnaGJvdXIoKmRzdCk7CiAJaWYgKG4gJiYgIShuLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpKSB7CiAJCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDsKIAkJc3RydWN0IGZsb3dpNiBmbF9ndzY7CiAJCWludCByZWRpcmVjdDsKIAorCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWZwID0gaXB2Nl9nZXRfaWZhZGRyKG5ldCwgJmZsNi0+c2FkZHIsCiAJCQkJICAgICAgKCpkc3QpLT5kZXYsIDEpOwogCkBAIC0xMDAwLDYgKzEwMDcsOCBAQAogCQkJaWYgKChlcnIgPSAoKmRzdCktPmVycm9yKSkKIAkJCQlnb3RvIG91dF9lcnJfcmVsZWFzZTsKIAkJfQorCX0gZWxzZSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggOWNiMTkxZS4uMTQ3ZWRlMzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogfQogCiBzdGF0aWMgaW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCisJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlpbnQgbGVuOwpAQCAtOTYyLDcgKzk2Miw3IEBACiAKIAkJbXNnLm1zZ19jb250cm9sID0gb3B0dmFsOwogCQltc2cubXNnX2NvbnRyb2xsZW4gPSBsZW47Ci0JCW1zZy5tc2dfZmxhZ3MgPSAwOworCQltc2cubXNnX2ZsYWdzID0gZmxhZ3M7CiAKIAkJbG9ja19zb2NrKHNrKTsKIAkJc2tiID0gbnAtPnBrdG9wdGlvbnM7CkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogCWlmKGxldmVsICE9IFNPTF9JUFY2KQogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCi0JZXJyID0gZG9faXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCWVyciA9IGRvX2lwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLCAwKTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJLyogd2UgbmVlZCB0byBleGNsdWRlIGFsbCBwb3NzaWJsZSBFTk9QUk9UT09QVHMgZXhjZXB0IGRlZmF1bHQgY2FzZSAqLwogCWlmIChlcnIgPT0gLUVOT1BST1RPT1BUICYmIG9wdG5hbWUgIT0gSVBWNl8yMjkyUEtUT1BUSU9OUykgewpAQCAtMTI2NCw3ICsxMjY0LDggQEAKIAkJcmV0dXJuIGNvbXBhdF9tY19nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCiAJCQlpcHY2X2dldHNvY2tvcHQpOwogCi0JZXJyID0gZG9faXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCWVyciA9IGRvX2lwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLAorCQkJCSBNU0dfQ01TR19DT01QQVQpOwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAkvKiB3ZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHBvc3NpYmxlIEVOT1BST1RPT1BUcyBleGNlcHQgZGVmYXVsdCBjYXNlICovCiAJaWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgJiYgb3B0bmFtZSAhPSBJUFY2XzIyOTJQS1RPUFRJT05TKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCAzZTZlYmNkLi5lZTc4MzlmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTEwNTksNyArMTA1OSw3IEBACiAJCQlicmVhazsKIAkJZm9yIChpPTA7IGk8bnNyY3M7IGkrKykgewogCQkJLyogc2tpcCBpbmFjdGl2ZSBmaWx0ZXJzICovCi0JCQlpZiAocG1jLT5tY2Ffc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSB8fAorCQkJaWYgKHBzZi0+c2ZfY291bnRbTUNBU1RfSU5DTFVERV0gfHwKIAkJCSAgICBwbWMtPm1jYV9zZmNvdW50W01DQVNUX0VYQ0xVREVdICE9CiAJCQkgICAgcHNmLT5zZl9jb3VudFtNQ0FTVF9FWENMVURFXSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGU4OTg3ZGEuLjllNjllYjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYKIHN0YXRpYyB2b2lkIHJ0Nl9wcm9iZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogewotCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gcnQgPyBkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCkgOiBOVUxMOworCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCS8qCiAJICogT2theSwgdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGFwcHJvcHJpYXRlCiAJICogZm9yIG5vdywgaG93ZXZlciwgd2UgbmVlZCB0byBjaGVjayBpZiBpdApAQCAtMzczLDggKzM3MywxMCBAQAogCSAqIFJvdXRlciBSZWFjaGFiaWxpdHkgUHJvYmUgTVVTVCBiZSByYXRlLWxpbWl0ZWQKIAkgKiB0byBubyBtb3JlIHRoYW4gb25lIHBlciBtaW51dGUuCiAJICovCisJcmN1X3JlYWRfbG9jaygpOworCW5laWdoID0gcnQgPyBkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCkgOiBOVUxMOwogCWlmICghbmVpZ2ggfHwgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCXJlYWRfbG9ja19iaCgmbmVpZ2gtPmxvY2spOwogCWlmICghKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbmVpZ2gtPnVwZGF0ZWQgKyBydC0+cnQ2aV9pZGV2LT5jbmYucnRyX3Byb2JlX2ludGVydmFsKSkgewpAQCAtMzg3LDggKzM4OSwxMSBAQAogCQl0YXJnZXQgPSAoc3RydWN0IGluNl9hZGRyICopJm5laWdoLT5wcmltYXJ5X2tleTsKIAkJYWRkcmNvbmZfYWRkcl9zb2xpY3RfbXVsdCh0YXJnZXQsICZtY2FkZHIpOwogCQluZGlzY19zZW5kX25zKHJ0LT5ydDZpX2RldiwgTlVMTCwgdGFyZ2V0LCAmbWNhZGRyLCBOVUxMKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyZWFkX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOworCX0KK291dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQ2X3Byb2JlKHN0cnVjdCBydDZfaW5mbyAqcnQpCkBAIC00MTIsOCArNDE3LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0Nl9jaGVja19uZWlnaChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogewotCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpOworCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCWludCBtOworCisJcmN1X3JlYWRfbG9jaygpOworCW5laWdoID0gZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpOwogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1AgfHwKIAkgICAgIShydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSkKIAkJbSA9IDE7CkBAIC00MzAsNiArNDM4LDcgQEAKIAkJcmVhZF91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKIAl9IGVsc2UKIAkJbSA9IDA7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIG07CiB9CiAKQEAgLTc2OSw3ICs3NzgsNyBAQAogCQlydC0+cnQ2aV9kc3QucGxlbiA9IDEyODsKIAkJcnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX0NBQ0hFOwogCQlydC0+ZHN0LmZsYWdzIHw9IERTVF9IT1NUOwotCQlkc3Rfc2V0X25laWdoYm91cigmcnQtPmRzdCwgbmVpZ2hfY2xvbmUoZHN0X2dldF9uZWlnaGJvdXIoJm9ydC0+ZHN0KSkpOworCQlkc3Rfc2V0X25laWdoYm91cigmcnQtPmRzdCwgbmVpZ2hfY2xvbmUoZHN0X2dldF9uZWlnaGJvdXJfcmF3KCZvcnQtPmRzdCkpKTsKIAl9CiAJcmV0dXJuIHJ0OwogfQpAQCAtODAzLDcgKzgxMiw3IEBACiAJZHN0X2hvbGQoJnJ0LT5kc3QpOwogCXJlYWRfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCi0JaWYgKCFkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCkgJiYgIShydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1ApKQorCWlmICghZHN0X2dldF9uZWlnaGJvdXJfcmF3KCZydC0+ZHN0KSAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpCiAJCW5ydCA9IHJ0Nl9hbGxvY19jb3cocnQsICZmbDYtPmRhZGRyLCAmZmw2LT5zYWRkcik7CiAJZWxzZSBpZiAoIShydC0+ZHN0LmZsYWdzICYgRFNUX0hPU1QpKQogCQlucnQgPSBydDZfYWxsb2NfY2xvbmUocnQsICZmbDYtPmRhZGRyKTsKQEAgLTE1ODcsNyArMTU5Niw3IEBACiAJZHN0X2NvbmZpcm0oJnJ0LT5kc3QpOwogCiAJLyogRHVwbGljYXRlIHJlZGlyZWN0OiBzaWxlbnRseSBpZ25vcmUuICovCi0JaWYgKG5laWdoID09IGRzdF9nZXRfbmVpZ2hib3VyKCZydC0+ZHN0KSkKKwlpZiAobmVpZ2ggPT0gZHN0X2dldF9uZWlnaGJvdXJfcmF3KCZydC0+ZHN0KSkKIAkJZ290byBvdXQ7CiAKIAlucnQgPSBpcDZfcnRfY29weShydCwgZGVzdCk7CkBAIC0xNjgyLDcgKzE2OTEsNyBAQAogCSAgIDEuIEl0IGlzIGNvbm5lY3RlZCByb3V0ZS4gQWN0aW9uOiBDT1cKIAkgICAyLiBJdCBpcyBnYXRld2F5ZWQgcm91dGUgb3IgTk9ORVhUSE9QIHJvdXRlLiBBY3Rpb246IGNsb25lIGl0LgogCSAqLwotCWlmICghZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKKwlpZiAoIWRzdF9nZXRfbmVpZ2hib3VyX3JhdygmcnQtPmRzdCkgJiYgIShydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1ApKQogCQlucnQgPSBydDZfYWxsb2NfY293KHJ0LCBkYWRkciwgc2FkZHIpOwogCWVsc2UKIAkJbnJ0ID0gcnQ2X2FsbG9jX2Nsb25lKHJ0LCBkYWRkcik7CkBAIC0yMzI2LDYgKzIzMzUsNyBAQAogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCWxvbmcgZXhwaXJlczsKIAl1MzIgdGFibGU7CisJc3RydWN0IG5laWdoYm91ciAqbjsKIAogCWlmIChwcmVmaXgpIHsJLyogdXNlciB3YW50cyBwcmVmaXggcm91dGVzIG9ubHkgKi8KIAkJaWYgKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfUFJFRklYX1JUKSkgewpAQCAtMjQxNCw4ICsyNDI0LDExIEBACiAJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIGRzdF9tZXRyaWNzX3B0cigmcnQtPmRzdCkpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAoZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpKQotCQlOTEFfUFVUKHNrYiwgUlRBX0dBVEVXQVksIDE2LCAmZHN0X2dldF9uZWlnaGJvdXIoJnJ0LT5kc3QpLT5wcmltYXJ5X2tleSk7CisJcmN1X3JlYWRfbG9jaygpOworCW4gPSBkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCk7CisJaWYgKG4pCisJCU5MQV9QVVQoc2tiLCBSVEFfR0FURVdBWSwgMTYsICZuLT5wcmltYXJ5X2tleSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAocnQtPmRzdC5kZXYpCiAJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX09JRiwgcnQtPnJ0NmlfZGV2LT5pZmluZGV4KTsKQEAgLTI2MDgsMTIgKzI2MjEsMTQgQEAKICNlbHNlCiAJc2VxX3B1dHMobSwgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwICIpOwogI2VuZGlmCisJcmN1X3JlYWRfbG9jaygpOwogCW4gPSBkc3RfZ2V0X25laWdoYm91cigmcnQtPmRzdCk7CiAJaWYgKG4pIHsKIAkJc2VxX3ByaW50ZihtLCAiJXBpNiIsIG4tPnByaW1hcnlfa2V5KTsKIAl9IGVsc2UgewogCQlzZXFfcHV0cyhtLCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJc2VxX3ByaW50ZihtLCAiICUwOHggJTA4eCAlMDh4ICUwOHggJThzXG4iLAogCQkgICBydC0+cnQ2aV9tZXRyaWMsIGF0b21pY19yZWFkKCZydC0+ZHN0Ll9fcmVmY250KSwKIAkJICAgcnQtPmRzdC5fX3VzZSwgcnQtPnJ0NmlfZmxhZ3MsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IDA3YmYxMDguLjAwYjE1YWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCisrKyBiL25ldC9pcHY2L3NpdC5jCkBAIC02NzIsNiArNjcyLDkgQEAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSkKIAkJZ290byB0eF9lcnJvcjsKIAorCWlmICh0b3MgPT0gMSkKKwkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZChpcGg2KTsKKwogCS8qIElTQVRBUCAoUkZDNDIxNCkgLSBtdXN0IGNvbWUgYmVmb3JlIDZ0bzQgKi8KIAlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0lTQVRBUCkgewogCQlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggODlkNWJmOC4uYWM4Mzg5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJaW50IG1zczsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJX191OCByY3Zfd3NjYWxlOwotCWJvb2wgZWNuX29rOworCWJvb2wgZWNuX29rID0gZmFsc2U7CiAKIAlpZiAoIXN5c2N0bF90Y3Bfc3luY29va2llcyB8fCAhdGgtPmFjayB8fCB0aC0+cnN0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDc4YWE1MzQuLmQxZmI2M2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPG5ldC90aW1ld2FpdF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGRtYS5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgorI2luY2x1ZGUgPG5ldC9zZWN1cmVfc2VxLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCA4NjZmMjY5Li5hY2I0NDIzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTEwMTIsNyArMTAxMiw2IEBACiAJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPnJlY29uZmlnX2ZpbHRlcik7CiAKIAlpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhsb2NhbCk7Ci0Jc3RhX2luZm9fc3RvcChsb2NhbCk7CiAJcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7CiAKIAlpZiAoc2tiX3F1ZXVlX2xlbigmbG9jYWwtPnNrYl9xdWV1ZSkgfHwKQEAgLTEwMjQsNiArMTAyMyw3IEBACiAKIAlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CisJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKIAlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOwogCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IGJlNDNmZDguLjJiNzcxZGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTM3NzEsNiArMzc3MSw3IEBACiB2b2lkIGlwX3ZzX2NvbnRyb2xfY2xlYW51cCh2b2lkKQogewogCUVudGVyRnVuY3Rpb24oMik7CisJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX3ZzX2RzdF9ub3RpZmllcik7CiAJaXBfdnNfZ2VubF91bnJlZ2lzdGVyKCk7CiAJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJTGVhdmVGdW5jdGlvbigyKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwppbmRleCA1YjQ2NmNkLi44NGQwZmQ0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCkBAIC0zMTIsNiArMzEyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIE5GX1NUT0xFTjoKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL01ha2VmaWxlIGIvbmV0L25ldGxhYmVsL01ha2VmaWxlCmluZGV4IGVhNzUwZTkuLmQyNzMyZmMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9NYWtlZmlsZQorKysgYi9uZXQvbmV0bGFiZWwvTWFrZWZpbGUKQEAgLTEsOCArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtLgogIwotIyBGZWIgOSwgMjAwNiwgUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+Ci0jCiAKICMgYmFzZSBvYmplY3RzCiBvYmoteQk6PSBuZXRsYWJlbF91c2VyLm8gbmV0bGFiZWxfa2FwaS5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jCmluZGV4IGMwNTE5MTMuLjk2Yjc0OWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jCkBAIC02LDcgKzYsNyBAQAogICogc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrIHByb3RvY29scyBzdWNoCiAgKiBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAppbmRleCAyYjk2NDRlLi5mZGJjMWQyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaApAQCAtNiw3ICs2LDcgQEAKICAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAogICogYXMgQ0lQU08gYW5kIFJJUFNPLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKaW5kZXggZGQ1M2EzNi4uNmJmODc4MyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKQEAgLTUsNyArNSw3IEBACiAgKiBOZXRMYWJlbCBzeXN0ZW0gbWFuYWdlcyBzdGF0aWMgYW5kIGR5bmFtaWMgbGFiZWwgbWFwcGluZ3MgZm9yIG5ldHdvcmsKICAqIHByb3RvY29scyBzdWNoIGFzIENJUFNPIGFuZCBSSVBTTy4KICAqCi0gKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgorICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsQHBhdWwtbW9vcmUuY29tPgogICoKICAqLwogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5oCmluZGV4IGFmN2YzMzUuLmQyNGQ3NzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5oCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5oCkBAIC01LDcgKzUsNyBAQAogICogTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrCiAgKiBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKaW5kZXggMmFhOTc1ZTUuLjdkODA4M2MgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwpAQCAtNiw3ICs2LDcgQEAKICAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAogICogYXMgQ0lQU08gYW5kIFJJUFNPLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oCmluZGV4IDAyNjFkZGEuLmJmY2MwZjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guaApAQCAtNiw3ICs2LDcgQEAKICAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAogICogYXMgQ0lQU08gYW5kIFJJUFNPLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCmluZGV4IGI1MjhkZDkuLjljMjRkZTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwpAQCAtNSw3ICs1LDcgQEAKICAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAogICogYXMgQ0lQU08gYW5kIFJJUFNPLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKQEAgLTM0MSwxMSArMzQxLDExIEBACiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmIChlbnRyeSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZW50cnk7CiAJaWYgKGRvbWFpbiAhPSBOVUxMKSB7CiAJCWVudHJ5LT5kb21haW4gPSBrc3RyZHVwKGRvbWFpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlbnRyeS0+ZG9tYWluID09IE5VTEwpCi0JCQlnb3RvIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZTsKKwkJCWdvdG8gb3V0X2RvbWFpbjsKIAl9CiAKIAlpZiAoYWRkciA9PSBOVUxMICYmIG1hc2sgPT0gTlVMTCkgewpAQCAtMzU0LDEzICszNTQsMTMgQEAKIAl9IGVsc2UgaWYgKGFkZHIgIT0gTlVMTCAmJiBtYXNrICE9IE5VTEwpIHsKIAkJYWRkcm1hcCA9IGt6YWxsb2Moc2l6ZW9mKCphZGRybWFwKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChhZGRybWFwID09IE5VTEwpCi0JCQlnb3RvIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZTsKKwkJCWdvdG8gb3V0X2FkZHJtYXA7CiAJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0NCk7CiAJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0Nik7CiAKIAkJYWRkcmluZm8gPSBremFsbG9jKHNpemVvZigqYWRkcmluZm8pLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGFkZHJpbmZvID09IE5VTEwpCi0JCQlnb3RvIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZTsKKwkJCWdvdG8gb3V0X2FkZHJpbmZvOwogCQlhZGRyaW5mby0+dHlwZV9kZWYuY2lwc292NCA9IGRvaV9kZWY7CiAJCWFkZHJpbmZvLT50eXBlID0gTkVUTEJMX05MVFlQRV9DSVBTT1Y0OwogCQlhZGRyaW5mby0+bGlzdC5hZGRyID0gYWRkci0+c19hZGRyICYgbWFzay0+c19hZGRyOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJCWVudHJ5LT50eXBlID0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUOwogCX0gZWxzZSB7CiAJCXJldF92YWwgPSAtRUlOVkFMOwotCQlnb3RvIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZTsKKwkJZ290byBvdXRfYWRkcm1hcDsKIAl9CiAKIAlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksIGF1ZGl0X2luZm8pOwpAQCAtMzg0LDExICszODQsMTUgQEAKIAlyZXR1cm4gMDsKIAogY2ZnX2NpcHNvdjRfbWFwX2FkZF9mYWlsdXJlOgotCWNpcHNvX3Y0X2RvaV9wdXRkZWYoZG9pX2RlZik7Ci0Ja2ZyZWUoZW50cnktPmRvbWFpbik7Ci0Ja2ZyZWUoZW50cnkpOwotCWtmcmVlKGFkZHJtYXApOwogCWtmcmVlKGFkZHJpbmZvKTsKK291dF9hZGRyaW5mbzoKKwlrZnJlZShhZGRybWFwKTsKK291dF9hZGRybWFwOgorCWtmcmVlKGVudHJ5LT5kb21haW4pOworb3V0X2RvbWFpbjoKKwlrZnJlZShlbnRyeSk7CitvdXRfZW50cnk6CisJY2lwc29fdjRfZG9pX3B1dGRlZihkb2lfZGVmKTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKaW5kZXggZGZmOGEwOC4uYmZhNTU1OCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCkBAIC01LDcgKzUsNyBAQAogICogTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrCiAgKiBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmgKaW5kZXggOGRiMzdmNC4uNWE5ZjMxYyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5oCkBAIC01LDcgKzUsNyBAQAogICogTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrCiAgKiBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCmluZGV4IGYxZWNmODQuLmU2ZTgyMzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBOZXRMYWJlbCBzeXN0ZW0uICBUaGUgTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsCiAgKiBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5oCmluZGV4IDBiYzhkYzMuLjcwMGFmNDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmgKQEAgLTUsNyArNSw3IEBACiAgKiBOZXRMYWJlbCBzeXN0ZW0uICBUaGUgTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsCiAgKiBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMKaW5kZXggYTNmZDc1YS4uOWZhZTYzZiAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jCkBAIC01LDcgKzUsNyBAQAogICogTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrCiAgKiBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgKaW5kZXggZjRmYzRjOS4uODE5Njk3OCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oCkBAIC01LDcgKzUsNyBAQAogICogTmV0TGFiZWwgc3lzdGVtIG1hbmFnZXMgc3RhdGljIGFuZCBkeW5hbWljIGxhYmVsIG1hcHBpbmdzIGZvciBuZXR3b3JrCiAgKiBwcm90b2NvbHMgc3VjaCBhcyBDSVBTTyBhbmQgUklQU08uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYyBiL25ldC9zY2hlZC9hY3RfbWlycmVkLmMKaW5kZXggMTAyZmMyMS4uZTA1MTM5OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9taXJyZWQuYworKysgYi9uZXQvc2NoZWQvYWN0X21pcnJlZC5jCkBAIC0xOTYsOCArMTk2LDcgQEAKIAogCXNrYjItPnNrYl9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKIAlza2IyLT5kZXYgPSBkZXY7Ci0JZGV2X3F1ZXVlX3htaXQoc2tiMik7Ci0JZXJyID0gMDsKKwllcnIgPSBkZXZfcXVldWVfeG1pdChza2IyKTsKIAogb3V0OgogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggMmEzMThmMi4uYjVkNTZhMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAJZm9yIChwcmlvID0gMDsgcHJpbyA8IHEtPmJhbmRzOyBwcmlvKyspIHsKIAkJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1twcmlvXTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKHFkaXNjKTsKIAkJaWYgKHNrYikgewogCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggNDUzNmVlNi4uNGY1NTEwZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuYworKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCkBAIC00MTAsNyArNDEwLDEyIEBACiAJLyogUmV0dXJuIENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIG9ubHkgaWYgd2UgZHJvcHBlZCBhIHBhY2tldAogCSAqIGZyb20gdGhpcyBmbG93LgogCSAqLwotCXJldHVybiAocWxlbiAhPSBzbG90LT5xbGVuKSA/IE5FVF9YTUlUX0NOIDogTkVUX1hNSVRfU1VDQ0VTUzsKKwlpZiAocWxlbiAhPSBzbG90LT5xbGVuKQorCQlyZXR1cm4gTkVUX1hNSVRfQ047CisKKwkvKiBBcyB3ZSBkcm9wcGVkIGEgcGFja2V0LCBiZXR0ZXIgbGV0IHVwcGVyIHN0YWNrIGtub3cgdGhpcyAqLworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihzY2gsIDEpOworCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGIxY2JiY2QuLmZmZTkyY2EgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTE4NzEsOCArMTg3MSwxNCBAQAogI2RlZmluZSBDT01QQVRfTkFNRUxFTihtc2cpCUNPTVBBVF9NU0cobXNnLCBtc2dfbmFtZWxlbikKICNkZWZpbmUgQ09NUEFUX0ZMQUdTKG1zZykJQ09NUEFUX01TRyhtc2csIG1zZ19mbGFncykKIAorc3RydWN0IHVzZWRfYWRkcmVzcyB7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbmFtZTsKKwl1bnNpZ25lZCBpbnQgbmFtZV9sZW47Cit9OworCiBzdGF0aWMgaW50IF9fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciBfX3VzZXIgKm1zZywKLQkJCSBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBmbGFncywgaW50IG5vc2VjKQorCQkJIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGZsYWdzLAorCQkJIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcykKIHsKIAlzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKm1zZ19jb21wYXQgPQogCSAgICAoc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICopbXNnOwpAQCAtMTk1Myw4ICsxOTU5LDMwIEBACiAKIAlpZiAoc29jay0+ZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCW1zZ19zeXMtPm1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7Ci0JZXJyID0gKG5vc2VjID8gc29ja19zZW5kbXNnX25vc2VjIDogc29ja19zZW5kbXNnKShzb2NrLCBtc2dfc3lzLAotCQkJCQkJCSAgdG90YWxfbGVuKTsKKwkvKgorCSAqIElmIHRoaXMgaXMgc2VuZG1tc2coKSBhbmQgY3VycmVudCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHNhbWUgYXMKKwkgKiBwcmV2aW91c2x5IHN1Y2NlZWRlZCBhZGRyZXNzLCBvbWl0IGFza2luZyBMU00ncyBkZWNpc2lvbi4KKwkgKiB1c2VkX2FkZHJlc3MtPm5hbWVfbGVuIGlzIGluaXRpYWxpemVkIHRvIFVJTlRfTUFYIHNvIHRoYXQgdGhlIGZpcnN0CisJICogZGVzdGluYXRpb24gYWRkcmVzcyBuZXZlciBtYXRjaGVzLgorCSAqLworCWlmICh1c2VkX2FkZHJlc3MgJiYgbXNnX3N5cy0+bXNnX25hbWUgJiYKKwkgICAgdXNlZF9hZGRyZXNzLT5uYW1lX2xlbiA9PSBtc2dfc3lzLT5tc2dfbmFtZWxlbiAmJgorCSAgICAhbWVtY21wKCZ1c2VkX2FkZHJlc3MtPm5hbWUsIG1zZ19zeXMtPm1zZ19uYW1lLAorCQkgICAgdXNlZF9hZGRyZXNzLT5uYW1lX2xlbikpIHsKKwkJZXJyID0gc29ja19zZW5kbXNnX25vc2VjKHNvY2ssIG1zZ19zeXMsIHRvdGFsX2xlbik7CisJCWdvdG8gb3V0X2ZyZWVjdGw7CisJfQorCWVyciA9IHNvY2tfc2VuZG1zZyhzb2NrLCBtc2dfc3lzLCB0b3RhbF9sZW4pOworCS8qCisJICogSWYgdGhpcyBpcyBzZW5kbW1zZygpIGFuZCBzZW5kaW5nIHRvIGN1cnJlbnQgZGVzdGluYXRpb24gYWRkcmVzcyB3YXMKKwkgKiBzdWNjZXNzZnVsLCByZW1lbWJlciBpdC4KKwkgKi8KKwlpZiAodXNlZF9hZGRyZXNzICYmIGVyciA+PSAwKSB7CisJCXVzZWRfYWRkcmVzcy0+bmFtZV9sZW4gPSBtc2dfc3lzLT5tc2dfbmFtZWxlbjsKKwkJaWYgKG1zZ19zeXMtPm1zZ19uYW1lKQorCQkJbWVtY3B5KCZ1c2VkX2FkZHJlc3MtPm5hbWUsIG1zZ19zeXMtPm1zZ19uYW1lLAorCQkJICAgICAgIHVzZWRfYWRkcmVzcy0+bmFtZV9sZW4pOworCX0KIAogb3V0X2ZyZWVjdGw6CiAJaWYgKGN0bF9idWYgIT0gY3RsKQpAQCAtMTk3OSw3ICsyMDA3LDcgQEAKIAlpZiAoIXNvY2spCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gX19zeXNfc2VuZG1zZyhzb2NrLCBtc2csICZtc2dfc3lzLCBmbGFncywgMCk7CisJZXJyID0gX19zeXNfc2VuZG1zZyhzb2NrLCBtc2csICZtc2dfc3lzLCBmbGFncywgTlVMTCk7CiAKIAlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKQEAgLTE5OTgsNiArMjAyNiwxMCBAQAogCXN0cnVjdCBtbXNnaGRyIF9fdXNlciAqZW50cnk7CiAJc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqY29tcGF0X2VudHJ5OwogCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKKwlzdHJ1Y3QgdXNlZF9hZGRyZXNzIHVzZWRfYWRkcmVzczsKKworCWlmICh2bGVuID4gVUlPX01BWElPVikKKwkJdmxlbiA9IFVJT19NQVhJT1Y7CiAKIAlkYXRhZ3JhbXMgPSAwOwogCkBAIC0yMDA1LDI3ICsyMDM3LDIyIEBACiAJaWYgKCFzb2NrKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc29ja19lcnJvcihzb2NrLT5zayk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfcHV0OwotCisJdXNlZF9hZGRyZXNzLm5hbWVfbGVuID0gVUlOVF9NQVg7CiAJZW50cnkgPSBtbXNnOwogCWNvbXBhdF9lbnRyeSA9IChzdHJ1Y3QgY29tcGF0X21tc2doZHIgX191c2VyICopbW1zZzsKKwllcnIgPSAwOwogCiAJd2hpbGUgKGRhdGFncmFtcyA8IHZsZW4pIHsKLQkJLyoKLQkJICogTm8gbmVlZCB0byBhc2sgTFNNIGZvciBtb3JlIHRoYW4gdGhlIGZpcnN0IGRhdGFncmFtLgotCQkgKi8KIAkJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSB7CiAJCQllcnIgPSBfX3N5c19zZW5kbXNnKHNvY2ssIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWNvbXBhdF9lbnRyeSwKLQkJCQkJICAgICZtc2dfc3lzLCBmbGFncywgZGF0YWdyYW1zKTsKKwkJCQkJICAgICZtc2dfc3lzLCBmbGFncywgJnVzZWRfYWRkcmVzcyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJCWVyciA9IF9fcHV0X3VzZXIoZXJyLCAmY29tcGF0X2VudHJ5LT5tc2dfbGVuKTsKIAkJCSsrY29tcGF0X2VudHJ5OwogCQl9IGVsc2UgewogCQkJZXJyID0gX19zeXNfc2VuZG1zZyhzb2NrLCAoc3RydWN0IG1zZ2hkciBfX3VzZXIgKillbnRyeSwKLQkJCQkJICAgICZtc2dfc3lzLCBmbGFncywgZGF0YWdyYW1zKTsKKwkJCQkJICAgICZtc2dfc3lzLCBmbGFncywgJnVzZWRfYWRkcmVzcyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJCWVyciA9IHB1dF91c2VyKGVyciwgJmVudHJ5LT5tc2dfbGVuKTsKQEAgLTIwMzcsMzAgKzIwNjQsMTIgQEAKIAkJKytkYXRhZ3JhbXM7CiAJfQogCi1vdXRfcHV0OgogCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwogCi0JaWYgKGVyciA9PSAwKQorCS8qIFdlIG9ubHkgcmV0dXJuIGFuIGVycm9yIGlmIG5vIGRhdGFncmFtcyB3ZXJlIGFibGUgdG8gYmUgc2VudCAqLworCWlmIChkYXRhZ3JhbXMgIT0gMCkKIAkJcmV0dXJuIGRhdGFncmFtczsKIAotCWlmIChkYXRhZ3JhbXMgIT0gMCkgewotCQkvKgotCQkgKiBXZSBtYXkgc2VuZCBsZXNzIGVudHJpZXMgdGhhbiByZXF1ZXN0ZWQgKHZsZW4pIGlmIHRoZQotCQkgKiBzb2NrIGlzIG5vbiBibG9ja2luZy4uLgotCQkgKi8KLQkJaWYgKGVyciAhPSAtRUFHQUlOKSB7Ci0JCQkvKgotCQkJICogLi4uIG9yIGlmIHNlbmRtc2cgcmV0dXJucyBhbiBlcnJvciBhZnRlciB3ZQotCQkJICogc2VuZCBzb21lIGRhdGFncmFtcywgd2hlcmUgd2UgcmVjb3JkIHRoZQotCQkJICogZXJyb3IgdG8gcmV0dXJuIG9uIHRoZSBuZXh0IGNhbGwgb3IgaWYgdGhlCi0JCQkgKiBhcHAgYXNrcyBhYm91dCBpdCB1c2luZyBnZXRzb2Nrb3B0KFNPX0VSUk9SKS4KLQkJCSAqLwotCQkJc29jay0+c2stPnNrX2VyciA9IC1lcnI7Ci0JCX0KLQotCQlyZXR1cm4gZGF0YWdyYW1zOwotCX0KLQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggOWI2YTRkMS4uZjQzODVlNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTE4Nyw2ICsxODcsNyBAQAogLyoqCiAgKiB4cHJ0X3Jlc2VydmVfeHBydCAtIHNlcmlhbGl6ZSB3cml0ZSBhY2Nlc3MgdG8gdHJhbnNwb3J0cwogICogQHRhc2s6IHRhc2sgdGhhdCBpcyByZXF1ZXN0aW5nIGFjY2VzcyB0byB0aGUgdHJhbnNwb3J0CisgKiBAeHBydDogcG9pbnRlciB0byB0aGUgdGFyZ2V0IHRyYW5zcG9ydAogICoKICAqIFRoaXMgcHJldmVudHMgbWl4aW5nIHRoZSBwYXlsb2FkIG9mIHNlcGFyYXRlIHJlcXVlc3RzLCBhbmQgcHJldmVudHMKICAqIHRyYW5zcG9ydCBjb25uZWN0cyBmcm9tIGNvbGxpZGluZyB3aXRoIHdyaXRlcy4gIE5vIGNvbmdlc3Rpb24gY29udHJvbApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggNjQ1NDM3Yy4uYzE0ODY1MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC02MTYsNiArNjE2LDkgQEAKIAlpZiAocmVzKQogCQlnb3RvIG91dF9ybV9kZXY7CiAKKwlydG5sX2xvY2soKTsKKwlyZGV2LT53aXBoeS5yZWdpc3RlcmVkID0gdHJ1ZTsKKwlydG5sX3VubG9jaygpOwogCXJldHVybiAwOwogCiBvdXRfcm1fZGV2OgpAQCAtNjQ3LDYgKzY1MCwxMCBAQAogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKKwlydG5sX2xvY2soKTsKKwlyZGV2LT53aXBoeS5yZWdpc3RlcmVkID0gZmFsc2U7CisJcnRubF91bmxvY2soKTsKKwogCXJma2lsbF91bnJlZ2lzdGVyKHJkZXYtPnJma2lsbCk7CiAKIAkvKiBwcm90ZWN0IHRoZSBkZXZpY2UgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMjhkMmFhMS4uZTgzZTdmZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0zNDY0LDcgKzM0NjQsNyBAQAogCQkJCSAgICB0bXApIHsKIAkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IG5sYV90eXBlKGF0dHIpOwogCi0JCQlpZiAoYmFuZCA8IDAgfHwgYmFuZCA+IElFRUU4MDIxMV9OVU1fQkFORFMpIHsKKwkJCWlmIChiYW5kIDwgMCB8fCBiYW5kID49IElFRUU4MDIxMV9OVU1fQkFORFMpIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCmluZGV4IGM2ZTRjYTYuLmZmNTc0NTkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zeXNmcy5jCisrKyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCkBAIC05Myw3ICs5Myw4IEBACiAKIAlpZiAocmRldi0+b3BzLT5zdXNwZW5kKSB7CiAJCXJ0bmxfbG9jaygpOwotCQlyZXQgPSByZGV2LT5vcHMtPnN1c3BlbmQoJnJkZXYtPndpcGh5LCByZGV2LT53b3dsYW4pOworCQlpZiAocmRldi0+d2lwaHkucmVnaXN0ZXJlZCkKKwkJCXJldCA9IHJkZXYtPm9wcy0+c3VzcGVuZCgmcmRldi0+d2lwaHksIHJkZXYtPndvd2xhbik7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJfQogCkBAIC0xMTIsNyArMTEzLDggQEAKIAogCWlmIChyZGV2LT5vcHMtPnJlc3VtZSkgewogCQlydG5sX2xvY2soKTsKLQkJcmV0ID0gcmRldi0+b3BzLT5yZXN1bWUoJnJkZXYtPndpcGh5KTsKKwkJaWYgKHJkZXYtPndpcGh5LnJlZ2lzdGVyZWQpCisJCQlyZXQgPSByZGV2LT5vcHMtPnJlc3VtZSgmcmRldi0+d2lwaHkpOwogCQlydG5sX3VubG9jaygpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA1ODA2NGQ5Li43OTFhYjJlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uYworKysgYi9uZXQveGZybS94ZnJtX2FsZ28uYwpAQCAtNDYyLDggKzQ2Miw4IEBACiAJLmRlc2MgPSB7CiAJCS5zYWRiX2FsZ19pZCA9IFNBREJfWF9FQUxHX0FFU0NUUiwKIAkJLnNhZGJfYWxnX2l2bGVuCT0gOCwKLQkJLnNhZGJfYWxnX21pbmJpdHMgPSAxMjgsCi0JCS5zYWRiX2FsZ19tYXhiaXRzID0gMjU2CisJCS5zYWRiX2FsZ19taW5iaXRzID0gMTYwLAorCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI4OAogCX0KIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDlkNzYxYzkuLjNkZmM0NzEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTI1NzQsNyArMjU3NCw4IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJJGNhc3QgPSAkY2FzdDI7CiAJCQkJfQotCQkJCVdBUk4oIiRjYWxsKCkgc2hvdWxkIHByb2JhYmx5IGJlICR7Y2FsbH1fdCgkY2FzdCwgJGFyZzEsICRhcmcyKVxuIiAuICRoZXJlY3Vycik7CisJCQkJV0FSTigiTUlOTUFYIiwKKwkJCQkgICAgICIkY2FsbCgpIHNob3VsZCBwcm9iYWJseSBiZSAke2NhbGx9X3QoJGNhc3QsICRhcmcxLCAkYXJnMilcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCmluZGV4IGViMmYxZTYuLjQ1OTRmMzMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKKysrIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbApAQCAtMTM4OSw3ICsxMzg5LDcgQEAKIAl3YXJuKCIkUDogTm8gc3VwcG9ydGVkIFZDUyBmb3VuZC4gIEFkZCAtLW5vZ2l0IHRvIG9wdGlvbnM/XG4iKTsKIAl3YXJuKCJVc2luZyBhIGdpdCByZXBvc2l0b3J5IHByb2R1Y2VzIGJldHRlciByZXN1bHRzLlxuIik7CiAJd2FybigiVHJ5IExpbnVzIFRvcnZhbGRzJyBsYXRlc3QgZ2l0IHJlcG9zaXRvcnkgdXNpbmc6XG4iKTsKLQl3YXJuKCJnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXRcbiIpOworCXdhcm4oImdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0XG4iKTsKIAkkcHJpbnRlZF9ub3ZjcyA9IDE7CiAgICAgfQogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDBiNDI3NmMuLjgyZDJlYjIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTE3MCw4ICsxNzAsOCBAQAogbmNvbmYtb2JqcyAgICAgOj0gbmNvbmYubyB6Y29uZi50YWIubyBuY29uZi5ndWkubwoga3hnZXR0ZXh0LW9ianMJOj0ga3hnZXR0ZXh0Lm8gemNvbmYudGFiLm8KIHFjb25mLWN4eG9ianMJOj0gcWNvbmYubwotcWNvbmYtb2Jqcwk6PSBrY29uZmlnX2xvYWQubyB6Y29uZi50YWIubwotZ2NvbmYtb2Jqcwk6PSBnY29uZi5vIGtjb25maWdfbG9hZC5vIHpjb25mLnRhYi5vCitxY29uZi1vYmpzCTo9IHpjb25mLnRhYi5vCitnY29uZi1vYmpzCTo9IGdjb25mLm8gemNvbmYudGFiLm8KIAogaG9zdHByb2dzLXkgOj0gY29uZgogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlob3N0cHJvZ3MteSArPSBnY29uZgogZW5kaWYKIAotY2xlYW4tZmlsZXMJOj0gbGtjX2RlZnMuaCBxY29uZi5tb2MgLnRtcF9xdGNoZWNrIC50bXBfZ3RrY2hlY2sKK2NsZWFuLWZpbGVzCTo9IHFjb25mLm1vYyAudG1wX3F0Y2hlY2sgLnRtcF9ndGtjaGVjawogY2xlYW4tZmlsZXMJKz0gemNvbmYudGFiLmMgemNvbmYubGV4LmMgemNvbmYuaGFzaC5jIGdjb25mLmdsYWRlLmgKIGNsZWFuLWZpbGVzICAgICArPSBtY29uZiBxY29uZiBnY29uZiBuY29uZgogY2xlYW4tZmlsZXMgICAgICs9IGNvbmZpZy5wb3QgbGludXgucG90CkBAIC0yMjYsMTIgKzIyNiwxMiBAQAogTEVYX1BSRUZJWF96Y29uZgk6PSB6Y29uZgogWUFDQ19QUkVGSVhfemNvbmYJOj0gemNvbmYKIAotSE9TVExPQURMSUJFU19xY29uZgk9ICQoS0NfUVRfTElCUykgLWxkbAotSE9TVENYWEZMQUdTX3Fjb25mLm8JPSAkKEtDX1FUX0NGTEFHUykgLUQgTEtDX0RJUkVDVF9MSU5LCitIT1NUTE9BRExJQkVTX3Fjb25mCT0gJChLQ19RVF9MSUJTKQorSE9TVENYWEZMQUdTX3Fjb25mLm8JPSAkKEtDX1FUX0NGTEFHUykKIAotSE9TVExPQURMSUJFU19nY29uZgk9IGBwa2ctY29uZmlnIC0tbGlicyBndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJnbGFkZS0yLjBgIC1sZGwKK0hPU1RMT0FETElCRVNfZ2NvbmYJPSBgcGtnLWNvbmZpZyAtLWxpYnMgZ3RrKy0yLjAgZ21vZHVsZS0yLjAgbGliZ2xhZGUtMi4wYAogSE9TVENGTEFHU19nY29uZi5vCT0gYHBrZy1jb25maWcgLS1jZmxhZ3MgZ3RrKy0yLjAgZ21vZHVsZS0yLjAgbGliZ2xhZGUtMi4wYCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC1EIExLQ19ESVJFQ1RfTElOSworICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLW1pc3NpbmctcHJvdG90eXBlcwogCiBIT1NUTE9BRExJQkVTX21jb25mICAgPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtbGRmbGFncyAkKEhPU1RDQykpCiAKQEAgLTMyMSwxOCArMzIxLDExIEBACiAKICQob2JqKS96Y29uZi50YWIubzogJChvYmopL3pjb25mLmxleC5jICQob2JqKS96Y29uZi5oYXNoLmMKIAotJChvYmopL2tjb25maWdfbG9hZC5vOiAkKG9iaikvbGtjX2RlZnMuaAotCi0kKG9iaikvcWNvbmYubzogJChvYmopL3Fjb25mLm1vYyAkKG9iaikvbGtjX2RlZnMuaAotCi0kKG9iaikvZ2NvbmYubzogJChvYmopL2xrY19kZWZzLmgKKyQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNvbmYubW9jCiAKICQob2JqKS8lLm1vYzogJChzcmMpLyUuaAogCSQoS0NfUVRfTU9DKSAtaSAkPCAtbyAkQAogCi0kKG9iaikvbGtjX2RlZnMuaDogJChzcmMpL2xrY19wcm90by5oCi0JJChRKXNlZCA8ICQ8ID4gJEAgJ3MvUChcKFteLF0qXCksLiovI2RlZmluZSBcMSAoXCpcMV9wKS8nCi0KICMgRXh0cmFjdCBnY29uZiBtZW51IGl0ZW1zIGZvciBJMThOIHN1cHBvcnQKICQob2JqKS9nY29uZi5nbGFkZS5oOiAkKG9iaikvZ2NvbmYuZ2xhZGUKIAkkKFEpaW50bHRvb2wtZXh0cmFjdCAtLXR5cGU9Z2V0dGV4dC9nbGFkZSAtLXNyY2Rpcj0kKHNyY3RyZWUpIFwKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDAwNmFkODEuLmYyMDhmOTAgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMTQsMTEgKzE0LDExIEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCi0jZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCiBzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsKIHN0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgeGZnZXRzKGNoYXIgKnN0ciwgaW50IHNpemUsIEZJTEUgKmluKTsKIAogZW51bSBpbnB1dF9tb2RlIHsKIAlvbGRhc2tjb25maWcsCkBAIC0zNSw4ICszNSw2IEBACiAJb2xkbm9jb25maWcsCiB9IGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7CiAKLWNoYXIgKmRlZmNvbmZpZ19maWxlOwotCiBzdGF0aWMgaW50IGluZGVudCA9IDE7CiBzdGF0aWMgaW50IHZhbGlkX3N0ZGluID0gMTsKIHN0YXRpYyBpbnQgc3luY19rY29uZmlnOwpAQCAtMTA2LDYgKzEwNCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQljaGVja19zdGRpbigpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIG9sZGFza2NvbmZpZzoKIAkJZmZsdXNoKHN0ZG91dCk7CiAJCXhmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKQEAgLTE1MCw2ICsxNDksNyBAQAogCQkJCWRlZiA9IE5VTEw7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJZGVmYXVsdDoKIAkJCWxpbmVbc3RybGVuKGxpbmUpLTFdID0gMDsKIAkJCWRlZiA9IGxpbmU7CkBAIC0zMDQsNiArMzA0LDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNoZWNrX3N0ZGluKCk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBvbGRhc2tjb25maWc6CiAJCQlmZmx1c2goc3Rkb3V0KTsKIAkJCXhmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsKQEAgLTM2OSw2ICszNzAsNyBAQAogCQkJCWNoZWNrX2NvbmYobWVudSk7CiAJCQkJcmV0dXJuOwogCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgUF9DT01NRU5UOgogCQkJcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOwogCQkJaWYgKHByb21wdCkKQEAgLTQ1NiwxMCArNDU4LDMwIEBACiAJe05VTEwsIDAsIE5VTEwsIDB9CiB9OwogCitzdGF0aWMgdm9pZCBjb25mX3VzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCisJcHJpbnRmKCJVc2FnZTogJXMgW29wdGlvbl0gPGtjb25maWctZmlsZT5cbiIsIHByb2duYW1lKTsKKwlwcmludGYoIltvcHRpb25dIGlzIF9vbmVfIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKKwlwcmludGYoIiAgLS1saXN0bmV3Y29uZmlnICAgICAgICAgTGlzdCBuZXcgb3B0aW9uc1xuIik7CisJcHJpbnRmKCIgIC0tb2xkYXNrY29uZmlnICAgICAgICAgIFN0YXJ0IGEgbmV3IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW1cbiIpOworCXByaW50ZigiICAtLW9sZGNvbmZpZyAgICAgICAgICAgICBVcGRhdGUgYSBjb25maWd1cmF0aW9uIHVzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlXG4iKTsKKwlwcmludGYoIiAgLS1zaWxlbnRvbGRjb25maWcgICAgICAgU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHNcbiIpOworCXByaW50ZigiICAtLW9sZG5vY29uZmlnICAgICAgICAgICBTYW1lIGFzIHNpbGVudG9sZGNvbmZpZyBidXQgc2V0IG5ldyBzeW1ib2xzIHRvIG5vXG4iKTsKKwlwcmludGYoIiAgLS1kZWZjb25maWcgPGZpbGU+ICAgICAgTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZGVmaW5lZCBpbiA8ZmlsZT5cbiIpOworCXByaW50ZigiICAtLXNhdmVkZWZjb25maWcgPGZpbGU+ICBTYXZlIHRoZSBtaW5pbWFsIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byA8ZmlsZT5cbiIpOworCXByaW50ZigiICAtLWFsbG5vY29uZmlnICAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG5vXG4iKTsKKwlwcmludGYoIiAgLS1hbGx5ZXNjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCB5ZXNcbiIpOworCXByaW50ZigiICAtLWFsbG1vZGNvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG1vZFxuIik7CisJcHJpbnRmKCIgIC0tYWxsZGVmY29uZmlnICAgICAgICAgIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdFxuIik7CisJcHJpbnRmKCIgIC0tcmFuZGNvbmZpZyAgICAgICAgICAgIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zXG4iKTsKK30KKwogaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiB7CisJY29uc3QgY2hhciAqcHJvZ25hbWUgPSBhdlswXTsKIAlpbnQgb3B0OwotCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZSwgKmRlZmNvbmZpZ19maWxlID0gTlVMTCAvKiBnY2MgdW5pbml0ICovOwogCXN0cnVjdCBzdGF0IHRtcHN0YXQ7CiAKIAlzZXRsb2NhbGUoTENfQUxMLCAiIik7CkBAIC00OTEsMTQgKzUxMywyNCBAQAogCQkJc3JhbmQoc2VlZCk7CiAJCQlicmVhazsKIAkJfQorCQljYXNlIG9sZGFza2NvbmZpZzoKKwkJY2FzZSBvbGRjb25maWc6CisJCWNhc2UgYWxsbm9jb25maWc6CisJCWNhc2UgYWxseWVzY29uZmlnOgorCQljYXNlIGFsbG1vZGNvbmZpZzoKKwkJY2FzZSBhbGxkZWZjb25maWc6CisJCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwkJY2FzZSBvbGRub2NvbmZpZzoKKwkJCWJyZWFrOwogCQljYXNlICc/JzoKLQkJCWZwcmludGYoc3RkZXJyLCBfKCJTZWUgUkVBRE1FIGZvciB1c2FnZSBpbmZvXG4iKSk7CisJCQljb25mX3VzYWdlKHByb2duYW1lKTsKIAkJCWV4aXQoMSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAlpZiAoYWMgPT0gb3B0aW5kKSB7CiAJCXByaW50ZihfKCIlczogS2NvbmZpZyBmaWxlIG1pc3NpbmdcbiIpLCBhdlswXSk7CisJCWNvbmZfdXNhZ2UocHJvZ25hbWUpOwogCQlleGl0KDEpOwogCX0KIAluYW1lID0gYXZbb3B0aW5kXTsKQEAgLTY0MSwxMyArNjczLDExIEBACiAJfQogCXJldHVybiAwOwogfQorCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgZmdldHMoKSBieSBKZWFuIFNhY3Jlbi4KICAqLwotdm9pZCB4ZmdldHMoc3RyLCBzaXplLCBpbikKLQljaGFyICpzdHI7Ci0JaW50IHNpemU7Ci0JRklMRSAqaW47Cit2b2lkIHhmZ2V0cyhjaGFyICpzdHIsIGludCBzaXplLCBGSUxFICppbikKIHsKIAlpZiAoZmdldHMoc3RyLCBzaXplLCBpbikgPT0gTlVMTCkKIAkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIGluIHJlYWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggMmJhZmQ5YS4uNTliNjY3YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTcsMTMgKzcsMTMgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAogc3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtMTI4LDYgKzEyOCw3IEBACiAJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKIAkJCWJyZWFrOwogCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgU19CT09MRUFOOgogCQlpZiAocFswXSA9PSAneScpIHsKIAkJCXN5bS0+ZGVmW2RlZl0udHJpID0geWVzOwpAQCAtMTQwLDcgKzE0MSw3IEBACiAJCQlicmVhazsKIAkJfQogCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwgcCwgc3ltLT5uYW1lKTsKLQkJYnJlYWs7CisJCXJldHVybiAxOwogCWNhc2UgU19PVEhFUjoKIAkJaWYgKCpwICE9ICciJykgewogCQkJZm9yIChwMiA9IHA7ICpwMiAmJiAhaXNzcGFjZSgqcDIpOyBwMisrKQpAQCAtMTQ4LDYgKzE0OSw3IEBACiAJCQlzeW0tPnR5cGUgPSBTX1NUUklORzsKIAkJCWdvdG8gZG9uZTsKIAkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFNfU1RSSU5HOgogCQlpZiAoKnArKyAhPSAnIicpCiAJCQlicmVhazsKQEAgLTE2Miw2ICsxNjQsNyBAQAogCQkJY29uZl93YXJuaW5nKCJpbnZhbGlkIHN0cmluZyBmb3VuZCIpOwogCQkJcmV0dXJuIDE7CiAJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBTX0lOVDoKIAljYXNlIFNfSEVYOgogCWRvbmU6CkBAIC0yMzcsNiArMjQwLDcgQEAKIAkJY2FzZSBTX1NUUklORzoKIAkJCWlmIChzeW0tPmRlZltkZWZdLnZhbCkKIAkJCQlmcmVlKHN5bS0+ZGVmW2RlZl0udmFsKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQlkZWZhdWx0OgogCQkJc3ltLT5kZWZbZGVmXS52YWwgPSBOVUxMOwogCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKQEAgLTM2Myw2ICszNjcsNyBAQAogCQkJCQlicmVhazsKIAkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKIAkJCQkJZ290byBzeW1fb2s7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCQlkZWZhdWx0OgogCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vyci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCiAJCQkJCWdvdG8gc3ltX29rOwpAQCAtNDE3LDY0ICs0MjIsMjAyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFdyaXRlIGEgU19TVFJJTkcgKi8KLXN0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3RyaW5nKGJvb2wgaGVhZGVyZmlsZSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgRklMRSAqb3V0KQorLyoKKyAqIEtjb25maWcgY29uZmlndXJhdGlvbiBwcmludGVyCisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXN1bHRpbmcgY29uZmlndXJhdGlvbiBhZnRlcgorICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBgZGVmY29uZmlnJyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkKKyAqIHBhc3NpbmcgYSBub24tTlVMTCBhcmd1bWVudCB0byB0aGUgcHJpbnRlci4KKyAqCisgKi8KK3N0YXRpYyB2b2lkCitrY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQogewotCWludCBsOwotCWlmIChoZWFkZXJmaWxlKQotCQlmcHJpbnRmKG91dCwgIiNkZWZpbmUgJXMlcyBcIiIsIENPTkZJR18sIG5hbWUpOwotCWVsc2UKLQkJZnByaW50ZihvdXQsICIlcyVzPVwiIiwgQ09ORklHXywgbmFtZSk7Ci0KLQl3aGlsZSAoMSkgewotCQlsID0gc3RyY3NwbihzdHIsICJcIlxcIik7Ci0JCWlmIChsKSB7Ci0JCQl4ZndyaXRlKHN0ciwgbCwgMSwgb3V0KTsKLQkJCXN0ciArPSBsOwotCQl9Ci0JCWlmICghKnN0cikKLQkJCWJyZWFrOwotCQlmcHJpbnRmKG91dCwgIlxcJWMiLCAqc3RyKyspOwotCX0KLQlmcHV0cygiXCJcbiIsIG91dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSwgRklMRSAqb3V0LCBib29sIHdyaXRlX25vKQotewotCWNvbnN0IGNoYXIgKnN0cjsKIAogCXN3aXRjaCAoc3ltLT50eXBlKSB7CiAJY2FzZSBTX0JPT0xFQU46CiAJY2FzZSBTX1RSSVNUQVRFOgotCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgewotCQljYXNlIG5vOgotCQkJaWYgKHdyaXRlX25vKQotCQkJCWZwcmludGYob3V0LCAiIyAlcyVzIGlzIG5vdCBzZXRcbiIsCisJCWlmICgqdmFsdWUgPT0gJ24nKSB7CisJCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOworCisJCQlpZiAoIXNraXBfdW5zZXQpCisJCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4iLAogCQkJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgbW9kOgotCQkJZnByaW50ZihvdXQsICIlcyVzPW1cbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7Ci0JCQlicmVhazsKLQkJY2FzZSB5ZXM6Ci0JCQlmcHJpbnRmKG91dCwgIiVzJXM9eVxuIiwgQ09ORklHXywgc3ltLT5uYW1lKTsKLQkJCWJyZWFrOworCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK2tjb25maWdfcHJpbnRfY29tbWVudChGSUxFICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFyICpwID0gdmFsdWU7CisJc2l6ZV90IGw7CisKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcbiIpOworCQlmcHJpbnRmKGZwLCAiIyIpOworCQlpZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsKKwkJCWZ3cml0ZShwLCBsLCAxLCBmcCk7CisJCQlwICs9IGw7CisJCX0KKwkJZnByaW50ZihmcCwgIlxuIik7CisJCWlmICgqcCsrID09ICdcMCcpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGtjb25maWdfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IGtjb25maWdfcHJpbnRfc3ltYm9sLAorCS5wcmludF9jb21tZW50ID0ga2NvbmZpZ19wcmludF9jb21tZW50LAorfTsKKworLyoKKyAqIEhlYWRlciBwcmludGVyCisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBgaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCcgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK2hlYWRlcl9wcmludF9zeW1ib2woRklMRSAqZnAsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOiB7CisJCWNvbnN0IGNoYXIgKnN1ZmZpeCA9ICIiOworCisJCXN3aXRjaCAoKnZhbHVlKSB7CisJCWNhc2UgJ24nOgorCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3VmZml4ID0gIl9NT0RVTEUiOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKGZwLCAiI2RlZmluZSAlcyVzJXMgMVxuIiwKKwkJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHN1ZmZpeCk7CisJCX0KKwkJLyoKKwkJICogR2VuZXJhdGUgdGhlIF9fZW5hYmxlZF9DT05GSUdfKiBhbmQKKwkJICogX19lbmFibGVkX0NPTkZJR18qX01PRFVMRSBtYWNyb3MgZm9yIHVzZSBieSB0aGUKKwkJICogSVNfe0VOQUJMRUQsQlVJTFRJTixNT0RVTEV9IG1hY3Jvcy4gVGhlIF9NT0RVTEUgdmFyaWFudCBpcworCQkgKiBnZW5lcmF0ZWQgZXZlbiBmb3IgYm9vbGVhbnMgc28gdGhhdCB0aGUgSVNfRU5BQkxFRCgpIG1hY3JvCisJCSAqIHdvcmtzLgorCQkgKi8KKwkJZnByaW50ZihmcCwgIiNkZWZpbmUgX19lbmFibGVkXyIgQ09ORklHXyAiJXMgJWRcbiIsCisJCQkJc3ltLT5uYW1lLCAoKnZhbHVlID09ICd5JykpOworCQlmcHJpbnRmKGZwLCAiI2RlZmluZSBfX2VuYWJsZWRfIiBDT05GSUdfICIlc19NT0RVTEUgJWRcbiIsCisJCQkJc3ltLT5uYW1lLCAoKnZhbHVlID09ICdtJykpOworCQlicmVhazsKKwl9CisJY2FzZSBTX0hFWDogeworCQljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKworCQlpZiAodmFsdWVbMF0gIT0gJzAnIHx8ICh2YWx1ZVsxXSAhPSAneCcgJiYgdmFsdWVbMV0gIT0gJ1gnKSkKKwkJCXByZWZpeCA9ICIweCI7CisJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXMlc1xuIiwKKwkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgcHJlZml4LCB2YWx1ZSk7CisJCWJyZWFrOworCX0KIAljYXNlIFNfU1RSSU5HOgotCQljb25mX3dyaXRlX3N0cmluZyhmYWxzZSwgc3ltLT5uYW1lLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBvdXQpOwotCQlicmVhazsKLQljYXNlIFNfSEVYOgogCWNhc2UgU19JTlQ6Ci0JCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0JCWZwcmludGYob3V0LCAiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQlmcHJpbnRmKGZwLCAiI2RlZmluZSAlcyVzICVzXG4iLAorCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCB2YWx1ZSk7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCitzdGF0aWMgdm9pZAoraGVhZGVyX3ByaW50X2NvbW1lbnQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCit7CisJY29uc3QgY2hhciAqcCA9IHZhbHVlOworCXNpemVfdCBsOworCisJZnByaW50ZihmcCwgIi8qXG4iKTsKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcbiIpOworCQlmcHJpbnRmKGZwLCAiICoiKTsKKwkJaWYgKGwpIHsKKwkJCWZwcmludGYoZnAsICIgIik7CisJCQlmd3JpdGUocCwgbCwgMSwgZnApOworCQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAsICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAnKQorCQkJYnJlYWs7CisJfQorCWZwcmludGYoZnAsICIgKi9cbiIpOworfQorCitzdGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciBoZWFkZXJfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IGhlYWRlcl9wcmludF9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBoZWFkZXJfcHJpbnRfY29tbWVudCwKK307CisKKy8qCisgKiBUcmlzdGF0ZSBwcmludGVyCisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBgaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29uZicgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3RyaXN0YXRlX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmICp2YWx1ZSAhPSAnbicpCisJCWZwcmludGYoZnAsICIlcyVzPSVjXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIChjaGFyKXRvdXBwZXIoKnZhbHVlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIHRyaXN0YXRlX3ByaW50ZXJfY2IgPQoreworCS5wcmludF9zeW1ib2wgPSB0cmlzdGF0ZV9wcmludF9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsCit9OworCitzdGF0aWMgdm9pZCBjb25mX3dyaXRlX3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkJICAgICAgc3RydWN0IGNvbmZfcHJpbnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpCit7CisJY29uc3QgY2hhciAqc3RyOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKIAljYXNlIFNfT1RIRVI6CiAJY2FzZSBTX1VOS05PV046CiAJCWJyZWFrOworCWNhc2UgU19TVFJJTkc6CisJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCXN0ciA9IHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKHN0cik7CisJCXByaW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsKKwkJZnJlZSgodm9pZCAqKXN0cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCXByaW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitjb25mX3dyaXRlX2hlYWRpbmcoRklMRSAqZnAsIHN0cnVjdCBjb25mX3ByaW50ZXIgKnByaW50ZXIsIHZvaWQgKnByaW50ZXJfYXJnKQoreworCWNoYXIgYnVmWzI1Nl07CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCSAgICAiXG4iCisJICAgICJBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC5cbiIKKwkgICAgIiVzXG4iLAorCSAgICByb290bWVudS5wcm9tcHQtPnRleHQpOworCisJcHJpbnRlci0+cHJpbnRfY29tbWVudChmcCwgYnVmLCBwcmludGVyX2FyZyk7Cit9CisKIC8qCiAgKiBXcml0ZSBvdXQgYSBtaW5pbWFsIGNvbmZpZy4KICAqIEFsbCB2YWx1ZXMgdGhhdCBoYXMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNraXBwZWQgYXMgdGhpcyBpcyByZWR1bmRhbnQuCkBAIC01MzEsNyArNjc0LDcgQEAKIAkJCQkJCWdvdG8gbmV4dF9tZW51OwogCQkJCX0KIAkJCX0KLQkJCWNvbmZfd3JpdGVfc3ltYm9sKHN5bSwgb3V0LCB0cnVlKTsKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKIAkJfQogbmV4dF9tZW51OgogCQlpZiAobWVudS0+bGlzdCAhPSBOVUxMKSB7CkBAIC01OTYsMTEgKzczOSw3IEBACiAJaWYgKCFvdXQpCiAJCXJldHVybiAxOwogCi0JZnByaW50ZihvdXQsIF8oIiNcbiIKLQkJICAgICAgICIjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0XG4iCi0JCSAgICAgICAiIyAlc1xuIgotCQkgICAgICAgIiNcbiIpLAotCQkgICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJY29uZl93cml0ZV9oZWFkaW5nKG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7CiAKIAlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkKIAkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOwpAQCAtNjIxLDggKzc2MCw4IEBACiAJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKIAkJCQlnb3RvIG5leHQ7CiAJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7Ci0JCQkvKiBXcml0ZSBjb25maWcgc3ltYm9sIHRvIGZpbGUgKi8KLQkJCWNvbmZfd3JpdGVfc3ltYm9sKHN5bSwgb3V0LCB0cnVlKTsKKworCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOwogCQl9CiAKIG5leHQ6CkBAIC03NzEsNyArOTEwLDYgQEAKIGludCBjb25mX3dyaXRlX2F1dG9jb25mKHZvaWQpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCWNvbnN0IGNoYXIgKnN0cjsKIAljb25zdCBjaGFyICpuYW1lOwogCUZJTEUgKm91dCwgKnRyaXN0YXRlLCAqb3V0X2g7CiAJaW50IGk7CkBAIC04MDAsNjggKzkzOCwyMyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlmcHJpbnRmKG91dCwgIiNcbiIKLQkJICAgICAiIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdFxuIgotCQkgICAgICIjICVzXG4iCi0JCSAgICAgIiNcbiIsCi0JCSAgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKLQlmcHJpbnRmKHRyaXN0YXRlLCAiI1xuIgotCQkJICAiIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAtIGRvIG5vdCBlZGl0XG4iCi0JCQkgICJcbiIpOwotCWZwcmludGYob3V0X2gsICIvKlxuIgotCQkgICAgICAgIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIEMgY29uZmlnOiBkb24ndCBlZGl0XG4iCi0JCSAgICAgICAiICogJXNcbiIKLQkJICAgICAgICIgKi9cbiIsCi0JCSAgICAgICByb290bWVudS5wcm9tcHQtPnRleHQpOworCWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCisJY29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgTlVMTCk7CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7CiAKIAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CiAJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CiAJCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCiAJCQljb250aW51ZTsKIAotCQkvKiB3cml0ZSBzeW1ib2wgdG8gY29uZmlnIGZpbGUgKi8KLQkJY29uZl93cml0ZV9zeW1ib2woc3ltLCBvdXQsIGZhbHNlKTsKKwkJLyogd3JpdGUgc3ltYm9sIHRvIGF1dG8uY29uZiwgdHJpc3RhdGUgYW5kIGhlYWRlciBmaWxlcyAqLworCQljb25mX3dyaXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgKHZvaWQgKikxKTsKIAotCQkvKiB1cGRhdGUgYXV0b2NvbmYgYW5kIHRyaXN0YXRlIGZpbGVzICovCi0JCXN3aXRjaCAoc3ltLT50eXBlKSB7Ci0JCWNhc2UgU19CT09MRUFOOgotCQljYXNlIFNfVFJJU1RBVEU6Ci0JCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgewotCQkJY2FzZSBubzoKLQkJCQlicmVhazsKLQkJCWNhc2UgbW9kOgotCQkJCWZwcmludGYodHJpc3RhdGUsICIlcyVzPU1cbiIsCi0JCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSk7Ci0JCQkJZnByaW50ZihvdXRfaCwgIiNkZWZpbmUgJXMlc19NT0RVTEUgMVxuIiwKLQkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgeWVzOgotCQkJCWlmIChzeW0tPnR5cGUgPT0gU19UUklTVEFURSkKLQkJCQkJZnByaW50Zih0cmlzdGF0ZSwiJXMlcz1ZXG4iLAotCQkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKLQkJCQlmcHJpbnRmKG91dF9oLCAiI2RlZmluZSAlcyVzIDFcbiIsCi0JCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTX1NUUklORzoKLQkJCWNvbmZfd3JpdGVfc3RyaW5nKHRydWUsIHN5bS0+bmFtZSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgb3V0X2gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU19IRVg6Ci0JCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQkJaWYgKHN0clswXSAhPSAnMCcgfHwgKHN0clsxXSAhPSAneCcgJiYgc3RyWzFdICE9ICdYJykpIHsKLQkJCQlmcHJpbnRmKG91dF9oLCAiI2RlZmluZSAlcyVzIDB4JXNcbiIsCi0JCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgc3RyKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJY2FzZSBTX0lOVDoKLQkJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0JCQlmcHJpbnRmKG91dF9oLCAiI2RlZmluZSAlcyVzICVzXG4iLAotCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgc3RyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KKwkJY29uZl93cml0ZV9zeW1ib2wodHJpc3RhdGUsIHN5bSwgJnRyaXN0YXRlX3ByaW50ZXJfY2IsICh2b2lkICopMSk7CisKKwkJY29uZl93cml0ZV9zeW1ib2wob3V0X2gsIHN5bSwgJmhlYWRlcl9wcmludGVyX2NiLCBOVUxMKTsKIAl9CiAJZmNsb3NlKG91dCk7CiAJZmNsb3NlKHRyaXN0YXRlKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9leHByLmMgYi9zY3JpcHRzL2tjb25maWcvZXhwci5jCmluZGV4IDAwMTAwMzQuLjI5MGNlNDEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9leHByLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2V4cHIuYwpAQCAtNywxNSArNywxMyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCiAjZGVmaW5lIERFQlVHX0VYUFIJMAogCiBzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXN0cnVjdCBleHByICplID0gbWFsbG9jKHNpemVvZigqZSkpOwotCW1lbXNldChlLCAwLCBzaXplb2YoKmUpKTsKKwlzdHJ1Y3QgZXhwciAqZSA9IGNhbGxvYygxLCBzaXplb2YoKmUpKTsKIAllLT50eXBlID0gRV9TWU1CT0w7CiAJZS0+bGVmdC5zeW0gPSBzeW07CiAJcmV0dXJuIGU7CkBAIC0yMyw4ICsyMSw3IEBACiAKIHN0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpCiB7Ci0Jc3RydWN0IGV4cHIgKmUgPSBtYWxsb2Moc2l6ZW9mKCplKSk7Ci0JbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCXN0cnVjdCBleHByICplID0gY2FsbG9jKDEsIHNpemVvZigqZSkpOwogCWUtPnR5cGUgPSB0eXBlOwogCWUtPmxlZnQuZXhwciA9IGNlOwogCXJldHVybiBlOwpAQCAtMzIsOCArMjksNyBAQAogCiBzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY190d28oZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCiB7Ci0Jc3RydWN0IGV4cHIgKmUgPSBtYWxsb2Moc2l6ZW9mKCplKSk7Ci0JbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCXN0cnVjdCBleHByICplID0gY2FsbG9jKDEsIHNpemVvZigqZSkpOwogCWUtPnR5cGUgPSB0eXBlOwogCWUtPmxlZnQuZXhwciA9IGUxOwogCWUtPnJpZ2h0LmV4cHIgPSBlMjsKQEAgLTQyLDggKzM4LDcgQEAKIAogc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfY29tcChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3RydWN0IHN5bWJvbCAqczIpCiB7Ci0Jc3RydWN0IGV4cHIgKmUgPSBtYWxsb2Moc2l6ZW9mKCplKSk7Ci0JbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCXN0cnVjdCBleHByICplID0gY2FsbG9jKDEsIHNpemVvZigqZSkpOwogCWUtPnR5cGUgPSB0eXBlOwogCWUtPmxlZnQuc3ltID0gczE7CiAJZS0+cmlnaHQuc3ltID0gczI7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvZXhwci5oIGIvc2NyaXB0cy9rY29uZmlnL2V4cHIuaAppbmRleCAxNmJmYWUyLi44MGZjZTU3IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvZXhwci5oCisrKyBiL3NjcmlwdHMva2NvbmZpZy9leHByLmgKQEAgLTE3Miw4ICsxNzIsNiBAQAogI2RlZmluZSBNRU5VX0NIQU5HRUQJCTB4MDAwMQogI2RlZmluZSBNRU5VX1JPT1QJCTB4MDAwMgogCi0jaWZuZGVmIFNXSUcKLQogZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CiBleHRlcm4gc3RydWN0IGZpbGUgKmN1cnJlbnRfZmlsZTsKIHN0cnVjdCBmaWxlICpsb29rdXBfZmlsZShjb25zdCBjaGFyICpuYW1lKTsKQEAgLTIxOCw3ICsyMTYsNiBAQAogewogCXJldHVybiBlICYmIChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pOwogfQotI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2djb25mLmMgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwppbmRleCBhMTFkNWY3Li45ZjQ0MzgwIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuYwpAQCAtMjg1LDggKzI4NSw2IEBACiBzdGF0aWMgdm9pZCByZW5kZXJlcl9lZGl0ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNlbGwsCiAJCQkgICAgY29uc3QgZ2NoYXIgKiBwYXRoX3N0cmluZywKIAkJCSAgICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIHZvaWQgcmVuZGVyZXJfdG9nZ2xlZChHdGtDZWxsUmVuZGVyZXJUb2dnbGUgKiBjZWxscmVuZGVyZXJ0b2dnbGUsCi0JCQkgICAgIGdjaGFyICogYXJnMSwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKIAogdm9pZCBpbml0X3JpZ2h0X3RyZWUodm9pZCkKIHsKQEAgLTMyMCw4ICszMTgsNiBAQAogCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9CVE5JTkMsCiAJCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsCiAJCQkJCSAgICAicmFkaW8iLCBDT0xfQlROUkFELCBOVUxMKTsKLQkvKmdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QocmVuZGVyZXIpLCAidG9nZ2xlZCIsCi0JICAgR19DQUxMQkFDSyhyZW5kZXJlcl90b2dnbGVkKSwgTlVMTCk7ICovCiAJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOwogCWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKIAkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKQEAgLTg4OCwzNSArODg0LDYgQEAKIAkJZGlzcGxheV90cmVlX3BhcnQoKTsJLy9maXhtZToga2VlcCBleHAvY29sbAogfQogCi1zdGF0aWMgdm9pZCByZW5kZXJlcl90b2dnbGVkKEd0a0NlbGxSZW5kZXJlclRvZ2dsZSAqIGNlbGwsCi0JCQkgICAgIGdjaGFyICogcGF0aF9zdHJpbmcsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtUcmVlUGF0aCAqcGF0aCwgKnNlbF9wYXRoID0gTlVMTDsKLQlHdGtUcmVlSXRlciBpdGVyLCBzZWxfaXRlcjsKLQlHdGtUcmVlU2VsZWN0aW9uICpzZWw7Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci0KLQlwYXRoID0gZ3RrX3RyZWVfcGF0aF9uZXdfZnJvbV9zdHJpbmcocGF0aF9zdHJpbmcpOwotCWlmICghZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCkpCi0JCXJldHVybjsKLQotCXNlbCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpKTsKLQlpZiAoZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChzZWwsIE5VTEwsICZzZWxfaXRlcikpCi0JCXNlbF9wYXRoID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X3BhdGgobW9kZWwyLCAmc2VsX2l0ZXIpOwotCWlmICghc2VsX3BhdGgpCi0JCWdvdG8gb3V0MTsKLQlpZiAoZ3RrX3RyZWVfcGF0aF9jb21wYXJlKHBhdGgsIHNlbF9wYXRoKSkKLQkJZ290byBvdXQyOwotCi0JZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOwotCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7Ci0KLSAgICAgIG91dDI6Ci0JZ3RrX3RyZWVfcGF0aF9mcmVlKHNlbF9wYXRoKTsKLSAgICAgIG91dDE6Ci0JZ3RrX3RyZWVfcGF0aF9mcmVlKHBhdGgpOwotfQotCiBzdGF0aWMgZ2ludCBjb2x1bW4yaW5kZXgoR3RrVHJlZVZpZXdDb2x1bW4gKiBjb2x1bW4pCiB7CiAJZ2ludCBpOwpAQCAtMTE3Miw2ICsxMTM5LDcgQEAKIAkJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKIAkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKIAkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFNfVFJJU1RBVEU6CiAJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKIAkJc3dpdGNoICh2YWwpIHsKQEAgLTE1MDYsMTAgKzE0NzQsNiBAQAogCWNoYXIgKmVudjsKIAlnY2hhciAqZ2xhZGVfZmlsZTsKIAotI2lmbmRlZiBMS0NfRElSRUNUX0xJTksKLQlrY29uZmlnX2xvYWQoKTsKLSNlbmRpZgotCiAJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKIAliaW5kX3RleHRkb21haW5fY29kZXNldChQQUNLQUdFLCAiVVRGLTgiKTsKIAl0ZXh0ZG9tYWluKFBBQ0tBR0UpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2tjb25maWdfbG9hZC5jIGIvc2NyaXB0cy9rY29uZmlnL2tjb25maWdfbG9hZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmRjYWFkLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMva2NvbmZpZy9rY29uZmlnX2xvYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJsa2MuaCIKLQotI2RlZmluZSBQKG5hbWUsdHlwZSxhcmcpCXR5cGUgKCpuYW1lICMjIF9wKSBhcmcKLSNpbmNsdWRlICJsa2NfcHJvdG8uaCIKLSN1bmRlZiBQCi0KLXZvaWQga2NvbmZpZ19sb2FkKHZvaWQpCi17Ci0Jdm9pZCAqaGFuZGxlOwotCWNoYXIgKmVycm9yOwotCi0JaGFuZGxlID0gZGxvcGVuKCIuL2xpYmtjb25maWcuc28iLCBSVExEX0xBWlkpOwotCWlmICghaGFuZGxlKSB7Ci0JCWhhbmRsZSA9IGRsb3BlbigiLi9zY3JpcHRzL2tjb25maWcvbGlia2NvbmZpZy5zbyIsIFJUTERfTEFaWSk7Ci0JCWlmICghaGFuZGxlKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBkbGVycm9yKCkpOwotCQkJZXhpdCgxKTsKLQkJfQotCX0KLQotI2RlZmluZSBQKG5hbWUsdHlwZSxhcmcpCQkJXAotewkJCQkJCVwKLQluYW1lICMjIF9wID0gZGxzeW0oaGFuZGxlLCAjbmFtZSk7CVwKLSAgICAgICAgaWYgKChlcnJvciA9IGRsZXJyb3IoKSkpICB7CQlcCi0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgZXJyb3IpOwlcCi0JCWV4aXQoMSk7CQkJXAotCX0JCQkJCVwKLX0KLSNpbmNsdWRlICJsa2NfcHJvdG8uaCIKLSN1bmRlZiBQCi19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcva3hnZXR0ZXh0LmMgYi9zY3JpcHRzL2tjb25maWcva3hnZXR0ZXh0LmMKaW5kZXggZTlkOGU3OS4uMjg1ODczOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2t4Z2V0dGV4dC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9reGdldHRleHQuYwpAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAogc3RhdGljIGNoYXIgKmVzY2FwZShjb25zdCBjaGFyKiB0ZXh0LCBjaGFyICpiZiwgaW50IGxlbikKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9sa2MuaCBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaAppbmRleCBmMzRhMGE5Li5iNjMzYmRiIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbGtjLmgKKysrIGIvc2NyaXB0cy9rY29uZmlnL2xrYy5oCkBAIC0yMSwxMiArMjEsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIExLQ19ESVJFQ1RfTElOSwogI2RlZmluZSBQKG5hbWUsdHlwZSxhcmcpCWV4dGVybiB0eXBlIG5hbWUgYXJnCi0jZWxzZQotI2luY2x1ZGUgImxrY19kZWZzLmgiCi0jZGVmaW5lIFAobmFtZSx0eXBlLGFyZykJZXh0ZXJuIHR5cGUgKCpuYW1lICMjIF9wKSBhcmcKLSNlbmRpZgogI2luY2x1ZGUgImxrY19wcm90by5oIgogI3VuZGVmIFAKIApAQCAtNzksOSArNzQsNiBAQAogaW50IHpjb25mX2xpbmVubyh2b2lkKTsKIGNvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCk7CiAKLS8qIGNvbmYuYyAqLwotdm9pZCB4ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pOwotCiAvKiBjb25mZGF0YS5jICovCiBjb25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpOwogY29uc3QgY2hhciAqY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKHZvaWQpOwpAQCAtOTAsNiArODIsMTEgQEAKIHZvaWQgc3ltX2FkZF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsKIHZvaWQgY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGVudW0gY29uZl9kZWZfbW9kZSBtb2RlKTsKIAorc3RydWN0IGNvbmZfcHJpbnRlciB7CisJdm9pZCAoKnByaW50X3N5bWJvbCkoRklMRSAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKwl2b2lkICgqcHJpbnRfY29tbWVudCkoRklMRSAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7Cit9OworCiAvKiBjb25mZGF0YS5jIGFuZCBleHByLmMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZndyaXRlKGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBGSUxFICpvdXQpCiB7CkBAIC05Nyw5ICs5NCw2IEBACiAJCWZwcmludGYoc3RkZXJyLCAiXG5FcnJvciBpbiB3cml0aW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7CiB9CiAKLS8qIGtjb25maWdfbG9hZC5jICovCi12b2lkIGtjb25maWdfbG9hZCh2b2lkKTsKLQogLyogbWVudS5jICovCiB2b2lkIF9tZW51X2luaXQodm9pZCk7CiB2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oIGIvc2NyaXB0cy9rY29uZmlnL2xrY19wcm90by5oCmluZGV4IDE3MzQyZmUuLjQ3ZmU5YzMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sa2NfcHJvdG8uaAorKysgYi9zY3JpcHRzL2tjb25maWcvbGtjX3Byb3RvLmgKQEAgLTMxLDYgKzMxLDcgQEAKIFAoc3ltX2xvb2t1cCxzdHJ1Y3Qgc3ltYm9sICosKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykpOwogUChzeW1fZmluZCxzdHJ1Y3Qgc3ltYm9sICosKGNvbnN0IGNoYXIgKm5hbWUpKTsKIFAoc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUsY29uc3QgY2hhciAqLChjb25zdCBjaGFyICppbikpOworUChzeW1fZXNjYXBlX3N0cmluZ192YWx1ZSwgY29uc3QgY2hhciAqLChjb25zdCBjaGFyICppbikpOwogUChzeW1fcmVfc2VhcmNoLHN0cnVjdCBzeW1ib2wgKiosKGNvbnN0IGNoYXIgKnBhdHRlcm4pKTsKIFAoc3ltX3R5cGVfbmFtZSxjb25zdCBjaGFyICosKGVudW0gc3ltYm9sX3R5cGUgdHlwZSkpOwogUChzeW1fY2FsY192YWx1ZSx2b2lkLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9tY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKaW5kZXggZDQzM2M3YS4uODIwZDJiNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL21jb25mLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKICNpbmNsdWRlICJseGRpYWxvZy9kaWFsb2cuaCIKIApAQCAtODQ1LDYgKzg0NCw3IEBACiAJCQkJIlxuXG4iKSk7CiAJCQlyZXR1cm4gMTsKIAkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIC0xOgogCQlwcmludGYoXygiXG5cbiIKIAkJCSIqKiogRW5kIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYyBiL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKaW5kZXggNWZkZjEwZC4uZDY2MDA4NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL21lbnUuYworKysgYi9zY3JpcHRzL2tjb25maWcvbWVudS5jCkBAIC0zLDEwICszLDExIEBACiAgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KICAqLwogCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgbm9oZWxwX3RleHRbXSA9IE5fKApAQCAtMzUwLDcgKzM1MSw3IEBACiAJCQlsYXN0X21lbnUtPm5leHQgPSBOVUxMOwogCQl9CiAKLQkJc3ltLT5kaXJfZGVwLmV4cHIgPSBwYXJlbnQtPmRlcDsKKwkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+ZGlyX2RlcC5leHByLCBwYXJlbnQtPmRlcCk7CiAJfQogCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKIAkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNlKHN5bSkgJiYKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9uY29uZi5jIGIvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKaW5kZXggNDg4ZGQ3NC4uMzljYTFmMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL25jb25mLmMKQEAgLTcsNyArNyw3IEBACiAgKi8KICNkZWZpbmUgX0dOVV9TT1VSQ0UKICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCisKICNpbmNsdWRlICJsa2MuaCIKICNpbmNsdWRlICJuY29uZi5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CkBAIC0xMDY3LDcgKzEwNjcsNiBAQAogCXN0cnVjdCBtZW51ICpzdWJtZW51ID0gMDsKIAljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBtZW51ICphY3RpdmVfbWVudSA9IE5VTEw7CiAJaW50IHJlczsKIAlpbnQgY3VycmVudF9pbmRleCA9IDA7CiAJaW50IGxhc3RfdG9wX3JvdyA9IDA7CkBAIC0xMTUyLDEzICsxMTUxLDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXN1Ym1lbnUgPSAoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCk7Ci0JCWFjdGl2ZV9tZW51ID0gKHN0cnVjdCBtZW51ICopaXRlbV9kYXRhKCk7CiAJCWlmICghc3VibWVudSB8fCAhbWVudV9pc192aXNpYmxlKHN1Ym1lbnUpKQogCQkJY29udGludWU7Ci0JCWlmIChzdWJtZW51KQotCQkJc3ltID0gc3VibWVudS0+c3ltOwotCQllbHNlCi0JCQlzeW0gPSBOVUxMOworCQlzeW0gPSBzdWJtZW51LT5zeW07CiAKIAkJc3dpdGNoIChyZXMpIHsKIAkJY2FzZSAnICc6CkBAIC0xMjIyLDIwICsxMjE3LDEzIEBACiAKIHN0YXRpYyB2b2lkIHNob3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKIHsKLQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOworCXN0cnVjdCBnc3RyIGhlbHA7CiAKLQlpZiAobWVudSAmJiBtZW51LT5zeW0gJiYgbWVudV9oYXNfaGVscChtZW51KSkgewotCQlpZiAobWVudS0+c3ltLT5uYW1lKSB7Ci0JCQlzdHJfcHJpbnRmKCZoZWxwLCAiJXMlczpcblxuIiwgQ09ORklHXywgbWVudS0+c3ltLT5uYW1lKTsKLQkJCXN0cl9hcHBlbmQoJmhlbHAsIF8obWVudV9nZXRfaGVscChtZW51KSkpOwotCQkJc3RyX2FwcGVuZCgmaGVscCwgIlxuIik7Ci0JCQlnZXRfc3ltYm9sX3N0cigmaGVscCwgbWVudS0+c3ltKTsKLQkJfSBlbHNlIHsKLQkJCXN0cl9hcHBlbmQoJmhlbHAsIF8obWVudV9nZXRfaGVscChtZW51KSkpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RyX2FwcGVuZCgmaGVscCwgbm9oZWxwX3RleHQpOwotCX0KKwlpZiAoIW1lbnUpCisJCXJldHVybjsKKworCWhlbHAgPSBzdHJfbmV3KCk7CisJbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOwogCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywgXyhtZW51X2dldF9wcm9tcHQobWVudSkpLCBzdHJfZ2V0KCZoZWxwKSk7CiAJc3RyX2ZyZWUoJmhlbHApOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjIGIvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCmluZGV4IGMyNzk2YjguLmRmMjc0ZmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYworKysgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKQEAgLTE0NzgsMTAgKzE0NzgsMTMgQEAKIAlDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxsKCk7CiB9CiAKLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZyh2b2lkKQorYm9vbCBDb25maWdNYWluV2luZG93OjpzYXZlQ29uZmlnKHZvaWQpCiB7Ci0JaWYgKGNvbmZfd3JpdGUoTlVMTCkpCisJaWYgKGNvbmZfd3JpdGUoTlVMTCkpIHsKIAkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIF8oIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24hIikpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOwogfQogCiB2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNhdmVDb25maWdBcyh2b2lkKQpAQCAtMTY0Miw3ICsxNjQ1LDExIEBACiAJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6Q2FuY2VsLCBfKCJDYW5jZWwgRXhpdCIpKTsKIAlzd2l0Y2ggKG1iLmV4ZWMoKSkgewogCWNhc2UgUU1lc3NhZ2VCb3g6OlllczoKLQkJc2F2ZUNvbmZpZygpOworCQlpZiAoc2F2ZUNvbmZpZygpKQorCQkJZS0+YWNjZXB0KCk7CisJCWVsc2UKKwkJCWUtPmlnbm9yZSgpOworCQlicmVhazsKIAljYXNlIFFNZXNzYWdlQm94OjpObzoKIAkJZS0+YWNjZXB0KCk7CiAJCWJyZWFrOwpAQCAtMTc0NSwxMCArMTc1Miw2IEBACiAJYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsKIAl0ZXh0ZG9tYWluKFBBQ0tBR0UpOwogCi0jaWZuZGVmIExLQ19ESVJFQ1RfTElOSwotCWtjb25maWdfbG9hZCgpOwotI2VuZGlmCi0KIAlwcm9nbmFtZSA9IGF2WzBdOwogCWNvbmZpZ0FwcCA9IG5ldyBRQXBwbGljYXRpb24oYWMsIGF2KTsKIAlpZiAoYWMgPiAxICYmIGF2WzFdWzBdID09ICctJykgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmggYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuaAppbmRleCA5MTY3N2Q5Li4zNzE1YjNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuaAorKysgYi9zY3JpcHRzL2tjb25maWcvcWNvbmYuaApAQCAtMzExLDcgKzMxMSw3IEBACiAJdm9pZCBsaXN0Rm9jdXNDaGFuZ2VkKHZvaWQpOwogCXZvaWQgZ29CYWNrKHZvaWQpOwogCXZvaWQgbG9hZENvbmZpZyh2b2lkKTsKLQl2b2lkIHNhdmVDb25maWcodm9pZCk7CisJYm9vbCBzYXZlQ29uZmlnKHZvaWQpOwogCXZvaWQgc2F2ZUNvbmZpZ0FzKHZvaWQpOwogCXZvaWQgc2VhcmNoQ29uZmlnKHZvaWQpOwogCXZvaWQgc2hvd1NpbmdsZVZpZXcodm9pZCk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMgYi9zY3JpcHRzL2tjb25maWcvc3ltYm9sLmMKaW5kZXggYTc5NmM5NS4uMDcxZjAwYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3N5bWJvbC5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9zeW1ib2wuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlIDxyZWdleC5oPgogI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAKLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCiAKIHN0cnVjdCBzeW1ib2wgc3ltYm9sX3llcyA9IHsKQEAgLTc1MSw3ICs3NTAsOCBAQAogCQljYXNlIG5vOgogCQkJcmV0dXJuICJuIjsKIAkJY2FzZSBtb2Q6Ci0JCQlyZXR1cm4gIm0iOworCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQkJcmV0dXJuIChtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pID8gIm4iIDogIm0iOwogCQljYXNlIHllczoKIAkJCXJldHVybiAieSI7CiAJCX0KQEAgLTg5Myw2ICs4OTMsNDkgQEAKIAlyZXR1cm4gcmVzOwogfQogCitjb25zdCBjaGFyICpzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbikKK3sKKwljb25zdCBjaGFyICpwOworCXNpemVfdCByZXNsZW47CisJY2hhciAqcmVzOworCXNpemVfdCBsOworCisJcmVzbGVuID0gc3RybGVuKGluKSArIHN0cmxlbigiXCJcIiIpICsgMTsKKworCXAgPSBpbjsKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJlYWs7CisKKwkJcmVzbGVuKys7CisJCXArKzsKKwl9CisKKwlyZXMgPSBtYWxsb2MocmVzbGVuKTsKKwlyZXNbMF0gPSAnXDAnOworCisJc3RyY2F0KHJlcywgIlwiIik7CisKKwlwID0gaW47CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOworCQlzdHJuY2F0KHJlcywgcCwgbCk7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJlYWs7CisKKwkJc3RyY2F0KHJlcywgIlxcIik7CisJCXN0cm5jYXQocmVzLCBwKyssIDEpOworCX0KKworCXN0cmNhdChyZXMsICJcIiIpOworCXJldHVybiByZXM7Cit9CisKIHN0cnVjdCBzeW1ib2wgKipzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltLCAqKnN5bV9hcnIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3V0aWwuYyBiL3NjcmlwdHMva2NvbmZpZy91dGlsLmMKaW5kZXggNjMzMGNjOC4uZDBiOGIyMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL3V0aWwuYworKysgYi9zY3JpcHRzL2tjb25maWcvdXRpbC5jCkBAIC01LDYgKzUsOCBAQAogICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCiAgKi8KIAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgImxrYy5oIgogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYubCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCmluZGV4IGRkZWU1ZmMuLjAwZjlkM2EgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCiAKICNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmxleC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZAppbmRleCA5MDZjMDk5Li5jMzJiMWE0IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZApAQCAtNzc2LDcgKzc3Niw2IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCiAKICNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAppbmRleCAyMTFlMWEyLi5mNjM2MTQxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZApAQCAtODcsNyArODcsNiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLnkgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQppbmRleCBjMzhjYzVhLi44NjRkYTA3IDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYueQorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYueQpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKICNpbmNsdWRlICJsa2MuaCIKIAogI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGEzODMxNmIuLjI2NmEyMjkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgogICoJCQkgICAgPGRnb2VkZGVsQHRydXN0ZWRjcy5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqCVBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhpdGFjaGkgU29mdHdhcmUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCiAgKgkJICAgICAgIFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgogICoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRpZi5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGlmLmgKaW5kZXggY2UyM2VkZC4uNDNkNTA3MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGlmLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGlmLmgKQEAgLTgsNyArOCw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIFJlZCBIYXQsIEluYy4sIEphbWVzIE1vcnJpcyA8am1vcnJpc0ByZWRoYXQuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiAgICAgICAgICAgICAgICAgICAgUGF1bCBNb29yZSwgPHBhdWwubW9vcmVAaHAuY29tPgorICogICAgICAgICAgICAgICAgICAgIFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAppbmRleCBjZjJmNjI4Li44YzU5YjhmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTRUxpbnV4IGludGVyZmFjZSB0byB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtCiAgKgotICogQXV0aG9yIDogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRub2RlLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bm9kZS5oCmluZGV4IDFiOTQ0NTAuLmRmN2E1ZWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRub2RlLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldG5vZGUuaApAQCAtNiw3ICs2LDcgQEAKICAqIG5lZWRlZCB0byByZWR1Y2UgdGhlIGxvb2t1cCBvdmVyaGVhZCBzaW5jZSBtb3N0IG9mIHRoZXNlIHF1ZXJpZXMgaGFwcGVuIG9uCiAgKiBhIHBlci1wYWNrZXQgYmFzaXMuCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldHBvcnQuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRwb3J0LmgKaW5kZXggODk5MTc1Mi4uNGQ5NjViOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldHBvcnQuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0cG9ydC5oCkBAIC01LDcgKzUsNyBAQAogICogbWFwcGluZyBpcyBtYWludGFpbmVkIGFzIHBhcnQgb2YgdGhlIG5vcm1hbCBwb2xpY3kgYnV0IGEgZmFzdCBjYWNoZSBpcwogICogbmVlZGVkIHRvIHJlZHVjZSB0aGUgbG9va3VwIG92ZXJoZWFkLgogICoKLSAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0aWYuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0aWYuYwppbmRleCA1OGNjNDgxLi4zMjZmMjJjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGlmLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRpZi5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBSZWQgSGF0LCBJbmMuLCBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICoJCSAgICAgIFBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgorICoJCSAgICAgIFBhdWwgTW9vcmUgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCmluZGV4IGMzYmYzZWQuLmRhNGI4YjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKQEAgLTQsNyArNCw3IEBACiAgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBnbHVlIHRvIHRpZSBOZXRMYWJlbCBpbnRvIHRoZSBTRUxpbnV4CiAgKiBzdWJzeXN0ZW0uCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRub2RlLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYwppbmRleCA4YjY5MWE4Li4zYmY0NmFiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldG5vZGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIG5lZWRlZCB0byByZWR1Y2UgdGhlIGxvb2t1cCBvdmVyaGVhZCBzaW5jZSBtb3N0IG9mIHRoZXNlIHF1ZXJpZXMgaGFwcGVuIG9uCiAgKiBhIHBlci1wYWNrZXQgYmFzaXMuCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgIm5ldGlmIiBjb25jZXB0IG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5CiAgKiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0cG9ydC5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRwb3J0LmMKaW5kZXggYWU3NmUyOS4uMGI2MmJkMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9uZXRwb3J0LmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRwb3J0LmMKQEAgLTUsNyArNSw3IEBACiAgKiBtYXBwaW5nIGlzIG1haW50YWluZWQgYXMgcGFydCBvZiB0aGUgbm9ybWFsIHBvbGljeSBidXQgYSBmYXN0IGNhY2hlIGlzCiAgKiBuZWVkZWQgdG8gcmVkdWNlIHRoZSBsb29rdXAgb3ZlcmhlYWQuCiAgKgotICogQXV0aG9yOiBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKiBUaGlzIGNvZGUgaXMgaGVhdmlseSBiYXNlZCBvbiB0aGUgIm5ldGlmIiBjb25jZXB0IG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5CiAgKiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IGRlNzkwMGUuLjU1ZDkyY2IgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKglBZGRlZCBjb25kaXRpb25hbCBwb2xpY3kgbGFuZ3VhZ2UgZXh0ZW5zaW9ucwogICoKLSAqICBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWwubW9vcmVAaHAuY29tPgorICogIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgcG9saWN5IGNhcGFiaWxpdHkgYml0bWFwCiAgKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCBkNDI5NTFmLi4zMGYxMTliIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtNCw3ICs0LDcgQEAKICAqIEF1dGhvciA6IFN0ZXBoZW4gU21hbGxleSwgPHNkc0BlcG9jaC5uY3NjLm1pbD4KICAqLwogLyoKLSAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CisgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogICAgICBBZGRlZCBzdXBwb3J0IHRvIGltcG9ydC9leHBvcnQgdGhlIE5ldExhYmVsIGNhdGVnb3J5IGJpdG1hcAogICoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCmluZGV4IGU5NjE3NDIuLmZiZjljNTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwpAQCAtMTEsNyArMTEsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KICAqLwogLyoKLSAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CisgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogICAgICBBZGRlZCBzdXBwb3J0IHRvIGltcG9ydC9leHBvcnQgdGhlIE1MUyBsYWJlbCBmcm9tIE5ldExhYmVsCiAgKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKaW5kZXggMDM3YmY5ZC4uZTQzNjllMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgogICovCiAvKgotICogVXBkYXRlZDogSGV3bGV0dC1QYWNrYXJkIDxwYXVsLm1vb3JlQGhwLmNvbT4KKyAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bEBwYXVsLW1vb3JlLmNvbT4KICAqCiAgKglBZGRlZCBzdXBwb3J0IHRvIGltcG9ydC9leHBvcnQgdGhlIE1MUyBsYWJlbCBmcm9tIE5ldExhYmVsCiAgKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGQyNDZhY2EuLjIzODFkMGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqCiAgKglBZGRlZCBjb25kaXRpb25hbCBwb2xpY3kgbGFuZ3VhZ2UgZXh0ZW5zaW9ucwogICoKLSAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CisgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgcG9saWN5IGNhcGFiaWxpdHkgYml0bWFwCiAgKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IDk3M2UwMGUuLmY2OTE3YmMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqCiAgKglBZGRlZCBjb25kaXRpb25hbCBwb2xpY3kgbGFuZ3VhZ2UgZXh0ZW5zaW9ucwogICoKLSAqIFVwZGF0ZWQ6IEhld2xldHQtUGFja2FyZCA8cGF1bC5tb29yZUBocC5jb20+CisgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWxAcGF1bC1tb29yZS5jb20+CiAgKgogICogICAgICBBZGRlZCBzdXBwb3J0IGZvciBOZXRMYWJlbAogICogICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgcG9saWN5IGNhcGFiaWxpdHkgYml0bWFwCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGYzNzVlYjIuLmI5YzVlMTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05LDcgKzksNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FzZXkgU2NoYXVmbGVyIDxjYXNleUBzY2hhdWZsZXItY2EuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwOSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgotICogICAgICAgICAgICAgICAgUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiAgICAgICAgICAgICAgICBQYXVsIE1vb3JlIDxwYXVsQHBhdWwtbW9vcmUuY29tPgogICogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKaW5kZXggYzg0MzljZjIuLjJlNDNhZWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uYworKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKQEAgLTcxMCw4ICs3MTAsMTAgQEAKIAkJICAgICAgaGVhZC0+ci5pbmRleCsrKQogCQkJaWYgKG5zLT5wcm9maWxlX3B0cltoZWFkLT5yLmluZGV4XSkKIAkJCQlicmVhazsKLQkJaWYgKGhlYWQtPnIuaW5kZXggPT0gVE9NT1lPX01BWF9QUk9GSUxFUykKKwkJaWYgKGhlYWQtPnIuaW5kZXggPT0gVE9NT1lPX01BWF9QUk9GSUxFUykgeworCQkJaGVhZC0+ci5lb2YgPSB0cnVlOwogCQkJcmV0dXJuOworCQl9CiAJCWhlYWQtPnIuc3RlcCsrOwogCQlicmVhazsKIAljYXNlIDI6CkBAIC03MjMsNiArNzI1LDcgQEAKIAkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LUNPTU1FTlQ9IiwgaW5kZXgpOwogCQkJdG9tb3lvX3NldF9zdHJpbmcoaGVhZCwgY29tbWVudCA/IGNvbW1lbnQtPm5hbWUgOiAiIik7CiAJCQl0b21veW9fc2V0X2xmKGhlYWQpOworCQkJdG9tb3lvX3ByaW50X25hbWVzcGFjZShoZWFkKTsKIAkJCXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LVBSRUZFUkVOQ0U9eyAiLCBpbmRleCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9QUkVGOyBpKyspCiAJCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXM9JXUgIiwKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKaW5kZXggM2ZkMWE3ZS4uNTUyYjk3YSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKKysrIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKQEAgLTEwNzMsMTAgKzEwNzMsMTAgQEAKIAlzZGV2LT5wY21pZCA9IC0xOwogCWxpc3RfZGVsKCZsZGV2LT5saXN0KTsKIAlsYXlvdXRzX2xpc3RfaXRlbXMtLTsKKwlrZnJlZShsZGV2KTsKICBvdXRub2RldjoKICAJb2Zfbm9kZV9wdXQoc291bmQpOwogIAlsYXlvdXRfZGV2aWNlID0gTlVMTDsKLSAJa2ZyZWUobGRldik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2NvbXBhdC5jIGIvc291bmQvY29yZS9wY21fY29tcGF0LmMKaW5kZXggNWZiMmUyOC4uOTFjZGY5NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fY29tcGF0LmMKKysrIGIvc291bmQvY29yZS9wY21fY29tcGF0LmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCQkJa2ZyZWUoYnVmcyk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlidWZzW2NoXSA9IGNvbXBhdF9wdHIocHRyKTsKKwkJYnVmc1tpXSA9IGNvbXBhdF9wdHIocHRyKTsKIAkJYnVmcHRyKys7CiAJfQogCWlmIChkaXIgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggODZkMGNhZi4uNjJlOTBiOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTE3NjEsNiArMTc2MSwxMCBAQAogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsID0gMDsKIAlsb25nIHdhaXRfdGltZSwgdG91dDsKIAorCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCWFkZF93YWl0X3F1ZXVlKCZydW50aW1lLT50c2xlZXAsICZ3YWl0KTsKKwogCWlmIChydW50aW1lLT5ub19wZXJpb2Rfd2FrZXVwKQogCQl3YWl0X3RpbWUgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKIAllbHNlIHsKQEAgLTE3NzEsMTYgKzE3NzUsMzIgQEAKIAkJfQogCQl3YWl0X3RpbWUgPSBtc2Vjc190b19qaWZmaWVzKHdhaXRfdGltZSAqIDEwMDApOwogCX0KLQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnRzbGVlcCwgJndhaXQpOworCiAJZm9yICg7OykgewogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWVyciA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjaGVjayBpZiBzcGFjZSBiZWNhbWUgYXZhaWxhYmxlIGFscmVhZHkKKwkJICogKGFuZCB0aHVzIHRoZSB3YWtldXAgaGFwcGVuZWQgYWxyZWFkeSkgZmlyc3QgdG8gY2xvc2UKKwkJICogdGhlIHJhY2Ugb2Ygc3BhY2UgYWxyZWFkeSBoYXZpbmcgYmVjb21lIGF2YWlsYWJsZS4KKwkJICogVGhpcyBjaGVjayBtdXN0IGhhcHBlbiBhZnRlciBiZWVuIGFkZGVkIHRvIHRoZSB3YWl0cXVldWUKKwkJICogYW5kIGhhdmluZyBjdXJyZW50IHN0YXRlIGJlIElOVEVSUlVQVElCTEUuCisJCSAqLworCQlpZiAoaXNfcGxheWJhY2spCisJCQlhdmFpbCA9IHNuZF9wY21fcGxheWJhY2tfYXZhaWwocnVudGltZSk7CisJCWVsc2UKKwkJCWF2YWlsID0gc25kX3BjbV9jYXB0dXJlX2F2YWlsKHJ1bnRpbWUpOworCQlpZiAoYXZhaWwgPj0gcnVudGltZS0+dHdha2UpCisJCQlicmVhazsKIAkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCQl0b3V0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHdhaXRfdGltZSk7CisKKwkJdG91dCA9IHNjaGVkdWxlX3RpbWVvdXQod2FpdF90aW1lKTsKKwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzd2l0Y2ggKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUpIHsKIAkJY2FzZSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEOgogCQkJZXJyID0gLUVTVFJQSVBFOwpAQCAtMTgwNiwxNCArMTgyNiw5IEBACiAJCQllcnIgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGlzX3BsYXliYWNrKQotCQkJYXZhaWwgPSBzbmRfcGNtX3BsYXliYWNrX2F2YWlsKHJ1bnRpbWUpOwotCQllbHNlCi0JCQlhdmFpbCA9IHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKTsKLQkJaWYgKGF2YWlsID49IHJ1bnRpbWUtPnR3YWtlKQotCQkJYnJlYWs7CiAJfQogIF9lbmRsb29wOgorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnRzbGVlcCwgJndhaXQpOwogCSphdmFpbHAgPSBhdmFpbDsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9ydGN0aW1lci5jIGIvc291bmQvY29yZS9ydGN0aW1lci5jCmluZGV4IDA4NTFjZDEuLmU4NWU3MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcnRjdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3J0Y3RpbWVyLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdGltZXIuYyBiL3NvdW5kL2NvcmUvdGltZXIuYwppbmRleCA3YzFjYmYwLi42N2ViZjFjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3RpbWVyLmMKKysrIGIvc291bmQvY29yZS90aW1lci5jCkBAIC0zMjgsNiArMzI4LDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJfSBlbHNlIHsKIAkJdGltZXIgPSB0aW1lcmktPnRpbWVyOworCQlpZiAoc25kX0JVR19PTighdGltZXIpKQorCQkJZ290byBvdXQ7CiAJCS8qIHdhaXQsIHVudGlsIHRoZSBhY3RpdmUgY2FsbGJhY2sgaXMgZmluaXNoZWQgKi8KIAkJc3Bpbl9sb2NrX2lycSgmdGltZXItPmxvY2spOwogCQl3aGlsZSAodGltZXJpLT5mbGFncyAmIFNORFJWX1RJTUVSX0lGTEdfQ0FMTEJBQ0spIHsKQEAgLTM1Myw2ICszNTUsNyBAQAogCQl9CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCX0KKyBvdXQ6CiAJaWYgKHRpbWVyaS0+cHJpdmF0ZV9mcmVlKQogCQl0aW1lcmktPnByaXZhdGVfZnJlZSh0aW1lcmkpOwogCWtmcmVlKHRpbWVyaS0+b3duZXIpOwpAQCAtNTMxLDYgKzUzNCw4IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJdGltZXIgPSB0aW1lcmktPnRpbWVyOworCWlmICghdGltZXIpCisJCXJldHVybiAtRUlOVkFMOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lci0+bG9jaywgZmxhZ3MpOwogCXRpbWVyaS0+Y3RpY2tzID0gdGltZXJpLT50aWNrczsKIAl0aW1lcmktPnB0aWNrcyA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwppbmRleCA0ODMxODAwLi40ODRhMzViIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKQEAgLTIyLDExICsyMiwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8c291bmQvdGVhNTc1eC10dW5lci5oPgogCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwpAQCAtNjIsMTcgKzYyLDYgQEAKICNkZWZpbmUgVEVBNTc1WF9CSVRfRFVNTVkJKDE8PDE1KQkJLyogYnVmZmVyICovCiAjZGVmaW5lIFRFQTU3NVhfQklUX0ZSRVFfTUFTSwkweDdmZmYKIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0KLX07Ci0KIC8qCiAgKiBsb3dsZXZlbCBwYXJ0CiAgKi8KQEAgLTI2Niw4MyArMjU1LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3N0YXRpYyBpbnQgdGVhNTc1eF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHNuZF90ZWE1NzV4LCBjdHJsX2hhbmRsZXIpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSB0ZWEtPm11dGU7CisJCXRlYS0+bXV0ZSA9IGN0cmwtPnZhbDsKKwkJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKIAkJcmV0dXJuIDA7CiAJfQorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlpZiAodGVhLT5tdXRlICE9IGN0cmwtPnZhbHVlKSB7Ci0JCQl0ZWEtPm11dGUgPSBjdHJsLT52YWx1ZTsKLQkJCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKLXsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdGVhLT5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQljbGVhcl9iaXQoMCwgJnRlYS0+aW5fdXNlKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0ZWE1NzV4X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9yZWxlYXNlLAotCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisJLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0ZWE1NzV4X2lvY3RsX29wcyA9IHsKQEAgLTM1MSwyMCArMjgwLDE5IEBACiAJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAogCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKIAkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCi0JLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIAkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAogCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCi0JLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0ZWE1NzV4X3JhZGlvID0gewogCS5uYW1lICAgICAgICAgICA9ICJ0ZWE1NzV4LXR1bmVyIiwKIAkuZm9wcyAgICAgICAgICAgPSAmdGVhNTc1eF9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnRlYTU3NXhfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyB0ZWE1NzV4X2N0cmxfb3BzID0geworCS5zX2N0cmwgPSB0ZWE1NzV4X3NfY3RybCwKIH07CiAKIC8qCkBAIC0zNzMsNyArMzAxLDYgQEAKIGludCBzbmRfdGVhNTc1eF9pbml0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQogewogCWludCByZXR2YWw7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdGVhNTc1eF9yYWRpb19pbnN0OwogCiAJdGVhLT5tdXRlID0gMTsKIApAQCAtMzgxLDQzICszMDgsNDkgQEAKIAlpZiAoc25kX3RlYTU3NXhfcmVhZCh0ZWEpICE9IDB4NTVBQSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl0ZWEtPmluX3VzZSA9IDA7CiAJdGVhLT52YWwgPSBURUE1NzVYX0JJVF9CQU5EX0ZNIHwgVEVBNTc1WF9CSVRfU0VBUkNIXzEwXzQwOwogCXRlYS0+ZnJlcSA9IDkwNTAwICogMTY7CQkvKiA5MC41TWh6IGRlZmF1bHQgKi8KKwlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwogCi0JdGVhNTc1eF9yYWRpb19pbnN0ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHRlYTU3NXhfcmFkaW9faW5zdCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidGVhNTc1eC10dW5lcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJdGVhLT52ZCA9IHRlYTU3NXhfcmFkaW87CisJdmlkZW9fc2V0X2RydmRhdGEoJnRlYS0+dmQsIHRlYSk7CisJbXV0ZXhfaW5pdCgmdGVhLT5tdXRleCk7CisJdGVhLT52ZC5sb2NrID0gJnRlYS0+bXV0ZXg7CiAKLQltZW1jcHkodGVhNTc1eF9yYWRpb19pbnN0LCAmdGVhNTc1eF9yYWRpbywgc2l6ZW9mKHRlYTU3NXhfcmFkaW8pKTsKLQotCXN0cmNweSh0ZWE1NzV4X3JhZGlvLm5hbWUsIHRlYS0+dGVhNTc1OSA/Ci0JCQkJICAgIlRFQTU3NTkgcmFkaW8iIDogIlRFQTU3NTcgcmFkaW8iKTsKLQotCXZpZGVvX3NldF9kcnZkYXRhKHRlYTU3NXhfcmFkaW9faW5zdCwgdGVhKTsKLQotCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh0ZWE1NzV4X3JhZGlvX2luc3QsCi0JCQkJICAgICAgIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7CisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmdGVhLT5jdHJsX2hhbmRsZXIsIDEpOworCXRlYS0+dmQuY3RybF9oYW5kbGVyID0gJnRlYS0+Y3RybF9oYW5kbGVyOworCXY0bDJfY3RybF9uZXdfc3RkKCZ0ZWEtPmN0cmxfaGFuZGxlciwgJnRlYTU3NXhfY3RybF9vcHMsIFY0TDJfQ0lEX0FVRElPX01VVEUsIDAsIDEsIDEsIDEpOworCXJldHZhbCA9IHRlYS0+Y3RybF9oYW5kbGVyLmVycm9yOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKLQkJa2ZyZWUodGVhNTc1eF9yYWRpb19pbnN0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCBpbml0aWFsaXplIGNvbnRyb2xzXG4iKTsKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmdGVhLT5jdHJsX2hhbmRsZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7Ci0JdGVhLT52ZCA9IHRlYTU3NXhfcmFkaW9faW5zdDsKKwlpZiAodGVhLT5leHRfaW5pdCkgeworCQlyZXR2YWwgPSB0ZWEtPmV4dF9pbml0KHRlYSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnRlYS0+Y3RybF9oYW5kbGVyKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmdGVhLT5jdHJsX2hhbmRsZXIpOworCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmdGVhLT5jdHJsX2hhbmRsZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXJldHVybiAwOwogfQogCiB2b2lkIHNuZF90ZWE1NzV4X2V4aXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7Ci0JaWYgKHRlYS0+dmQpIHsKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodGVhLT52ZCk7Ci0JCXRlYS0+dmQgPSBOVUxMOwotCX0KKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdGVhLT52ZCk7CisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmdGVhLT5jdHJsX2hhbmRsZXIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX3RlYTU3NXhfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wYXMyX3BjbS5jIGIvc291bmQvb3NzL3BhczJfcGNtLmMKaW5kZXggOGY3ZDE3NS4uNmYxM2FiNCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3BhczJfcGNtLmMKKysrIGIvc291bmQvb3NzL3BhczJfcGNtLmMKQEAgLTYzLDEzICs2MywxMyBAQAogCiAJaWYgKHBjbV9jaGFubmVscyAmIDIpCiAJewotCQlmb28gPSAoKENMT0NLX1RJQ0tfUkFURSAvIDIpICsgKGFyZyAvIDIpKSAvIGFyZzsKLQkJYXJnID0gKChDTE9DS19USUNLX1JBVEUgLyAyKSArIChmb28gLyAyKSkgLyBmb287CisJCWZvbyA9ICgoUElUX1RJQ0tfUkFURSAvIDIpICsgKGFyZyAvIDIpKSAvIGFyZzsKKwkJYXJnID0gKChQSVRfVElDS19SQVRFIC8gMikgKyAoZm9vIC8gMikpIC8gZm9vOwogCX0KIAllbHNlCiAJewotCQlmb28gPSAoQ0xPQ0tfVElDS19SQVRFICsgKGFyZyAvIDIpKSAvIGFyZzsKLQkJYXJnID0gKENMT0NLX1RJQ0tfUkFURSArIChmb28gLyAyKSkgLyBmb287CisJCWZvbyA9IChQSVRfVElDS19SQVRFICsgKGFyZyAvIDIpKSAvIGFyZzsKKwkJYXJnID0gKFBJVF9USUNLX1JBVEUgKyAoZm9vIC8gMikpIC8gZm9vOwogCX0KIAogCXBjbV9zcGVlZCA9IGFyZzsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCA5YjgwMGNlLi4yZmMwNjI0IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC02NzMsNyArNjczLDggQEAKIAogCWlmIChwc3NfY2Ryb21fcG9ydCA9PSAtMSkgewkvKiBJZiBjZHJvbSBwb3J0IGVuYWJsYXRpb24gd2Fzbid0IHJlcXVlc3RlZCAqLwogCQlwcmludGsoS0VSTl9JTkZPICJQU1M6IENEUk9NIHBvcnQgbm90IGVuYWJsZWQuXG4iKTsKLQl9IGVsc2UgaWYgKGNoZWNrX3JlZ2lvbihwc3NfY2Ryb21fcG9ydCwgMikpIHsKKwl9IGVsc2UgaWYgKCFyZXF1ZXN0X3JlZ2lvbihwc3NfY2Ryb21fcG9ydCwgMiwgIlBTUyBDRFJPTSIpKSB7CisJCXBzc19jZHJvbV9wb3J0ID0gLTE7CiAJCXByaW50ayhLRVJOX0VSUiAiUFNTOiBDRFJPTSBJL08gcG9ydCBjb25mbGljdC5cbiIpOwogCX0gZWxzZSB7CiAJCXNldF9pb19iYXNlKGRldmMsIENPTkZfQ0RST00sIHBzc19jZHJvbV9wb3J0KTsKQEAgLTEyMzIsNyArMTIzMyw4IEBACiAJCWlmKHBzc21wdSkKIAkJCXVubG9hZF9wc3NfbXB1KCZjZmdfbXB1KTsKIAkJdW5sb2FkX3BzcygmY2ZnKTsKLQl9CisJfSBlbHNlIGlmIChwc3NfY2Ryb21fcG9ydCAhPSAtMSkKKwkJcmVsZWFzZV9yZWdpb24ocHNzX2Nkcm9tX3BvcnQsIDIpOwogCiAJaWYoIXBzc19rZWVwX3NldHRpbmdzKQkvKiBLZWVwIGhhcmR3YXJlIHNldHRpbmdzIGlmIGFza2VkICovCiAJewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCBlOTBkMTAzLi44ODE2ODA0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMSw1ICsxLDEwIEBACiAjIEFMU0EgUENJIGRyaXZlcnMKIAorY29uZmlnIFNORF9URUE1NzVYCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFNORF9GTTgwMV9URUE1NzVYX0JPT0wgfHwgU05EX0VTMTk2OF9SQURJTyB8fCBSQURJT19TRjE2Rk1SMgorCWRlZmF1bHQgU05EX0ZNODAxIHx8IFNORF9FUzE5NjggfHwgUkFESU9fU0YxNkZNUjIKKwogbWVudWNvbmZpZyBTTkRfUENJCiAJYm9vbCAiUENJIHNvdW5kIGRldmljZXMiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTU2MywxMSArNTY4LDYgQEAKIAkgIEZNODAxIGNoaXAgd2l0aCBhIFRFQTU3NTcgdHVuZXIgKE1lZGlhRm9ydGUgU0YyNTYtUENTLCBTRjI1Ni1QQ1AgYW5kCiAJICBTRjY0LVBDUikgaW50byB0aGUgc25kLWZtODAxIGRyaXZlci4KIAotY29uZmlnIFNORF9URUE1NzVYCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFNORF9GTTgwMV9URUE1NzVYX0JPT0wgfHwgU05EX0VTMTk2OF9SQURJTwotCWRlZmF1bHQgU05EX0ZNODAxIHx8IFNORF9FUzE5NjgKLQogc291cmNlICJzb3VuZC9wY2kvaGRhL0tjb25maWciCiAKIGNvbmZpZyBTTkRfSERTUApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCmluZGV4IDIwMGM5YTEuLmE4NzJkMGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKQEAgLTE5MDksNiArMTkwOSw3IEBACiAJMHgxMDNjMDk0NCwgLyogSFAgbmM2MjIwICovCiAJMHgxMDNjMDkzNCwgLyogSFAgbmM4MjIwICovCiAJMHgxMDNjMDA2ZCwgLyogSFAgbng5MTA1ICovCisJMHgxMDNjMzAwZCwgLyogSFAgQ29tcGFxIGRjNTEwMCBTRkYoUFQwMDNBVykgKi8KIAkweDE3MzQwMDg4LCAvKiBGU0MgU2NlbmljLVcgKi8KIAkwIC8qIGVuZCAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5jCmluZGV4IDY1YjdjYTEuLmJkNDc1MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYwpAQCAtNjMxLDEzICs2MzEsMTIgQEAKIAlpZiAoIXBfY2FjaGUpCiAJCXJldHVybiBOVUxMOwogCi0JcF9jYWNoZS0+cF9pbmZvID0KLQkJa21hbGxvYyhzaXplb2YoKnBfY2FjaGUtPnBfaW5mbykgKiBjb250cm9sX2NvdW50LCBHRlBfS0VSTkVMKTsKKwlwX2NhY2hlLT5wX2luZm8gPSBremFsbG9jKHNpemVvZigqcF9jYWNoZS0+cF9pbmZvKSAqIGNvbnRyb2xfY291bnQsCisJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXBfY2FjaGUtPnBfaW5mbykgewogCQlrZnJlZShwX2NhY2hlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChwX2NhY2hlLT5wX2luZm8sIDAsIHNpemVvZigqcF9jYWNoZS0+cF9pbmZvKSAqIGNvbnRyb2xfY291bnQpOwogCXBfY2FjaGUtPmNhY2hlX3NpemVfaW5fYnl0ZXMgPSBzaXplX2luX2J5dGVzOwogCXBfY2FjaGUtPmNvbnRyb2xfY291bnQgPSBjb250cm9sX2NvdW50OwogCXBfY2FjaGUtPnBfY2FjaGUgPSBwX2RzcF9jb250cm9sX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYwppbmRleCAzYTdhZmEzLi43MWQzMmM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCkBAIC00Myw2ICs0Myw3IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IG9zX2RhdGE7CiAJc3RydWN0IGNvZGVfaGVhZGVyIGhlYWRlcjsKIAljaGFyIGZ3X25hbWVbMjBdOworCXNob3J0IGVycl9yZXQgPSBIUElfRVJST1JfRFNQX0ZJTEVfTk9UX0ZPVU5EOwogCWludCBlcnI7CiAKIAlzcHJpbnRmKGZ3X25hbWUsICJhc2locGkvZHNwJTA0eC5iaW4iLCBhZGFwdGVyKTsKQEAgLTg1LDggKzg2LDEwIEBACiAKIAlIUElfREVCVUdfTE9HKERFQlVHLCAiZHNwIGNvZGUgJXMgb3BlbmVkXG4iLCBmd19uYW1lKTsKIAlkc3BfY29kZS0+cHZ0ID0ga21hbGxvYyhzaXplb2YoKmRzcF9jb2RlLT5wdnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRzcF9jb2RlLT5wdnQpCi0JCXJldHVybiBIUElfRVJST1JfTUVNT1JZX0FMTE9DOworCWlmICghZHNwX2NvZGUtPnB2dCkgeworCQllcnJfcmV0ID0gSFBJX0VSUk9SX01FTU9SWV9BTExPQzsKKwkJZ290byBlcnJvcjI7CisJfQogCiAJZHNwX2NvZGUtPnB2dC0+ZGV2ID0gZGV2OwogCWRzcF9jb2RlLT5wdnQtPmZpcm13YXJlID0gZmlybXdhcmU7CkBAIC05OSw3ICsxMDIsNyBAQAogCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogZXJyb3IxOgogCWRzcF9jb2RlLT5ibG9ja19sZW5ndGggPSAwOwotCXJldHVybiBIUElfRVJST1JfRFNQX0ZJTEVfTk9UX0ZPVU5EOworCXJldHVybiBlcnJfcmV0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwppbmRleCA5NjgzZjg0Li5hMzI1MDJlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwpAQCAtMTc3LDE2ICsxNzcsMjEgQEAKIAl9IGVsc2UgewogCQl1MTYgX191c2VyICpwdHIgPSBOVUxMOwogCQl1MzIgc2l6ZSA9IDA7Ci0KKwkJdTMyIGFkYXB0ZXJfcHJlc2VudDsKIAkJLyogLTE9bm8gZGF0YSAwPXJlYWQgZnJvbSB1c2VyIG1lbSwgMT13cml0ZSB0byB1c2VyIG1lbSAqLwogCQlpbnQgd3JmbGFnID0gLTE7Ci0JCXUzMiBhZGFwdGVyID0gaG0tPmguYWRhcHRlcl9pbmRleDsKLQkJc3RydWN0IGhwaV9hZGFwdGVyICpwYSA9ICZhZGFwdGVyc1thZGFwdGVyXTsKKwkJc3RydWN0IGhwaV9hZGFwdGVyICpwYTsKIAotCQlpZiAoKGFkYXB0ZXIgPj0gSFBJX01BWF9BREFQVEVSUykgfHwgKCFwYS0+dHlwZSkpIHsKLQkJCWhwaV9pbml0X3Jlc3BvbnNlKCZoci0+cjAsIEhQSV9PQkpfQURBUFRFUiwKLQkJCQlIUElfQURBUFRFUl9PUEVOLAotCQkJCUhQSV9FUlJPUl9CQURfQURBUFRFUl9OVU1CRVIpOworCQlpZiAoaG0tPmguYWRhcHRlcl9pbmRleCA8IEhQSV9NQVhfQURBUFRFUlMpIHsKKwkJCXBhID0gJmFkYXB0ZXJzW2htLT5oLmFkYXB0ZXJfaW5kZXhdOworCQkJYWRhcHRlcl9wcmVzZW50ID0gcGEtPnR5cGU7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyX3ByZXNlbnQgPSAwOworCQl9CisKKwkJaWYgKCFhZGFwdGVyX3ByZXNlbnQpIHsKKwkJCWhwaV9pbml0X3Jlc3BvbnNlKCZoci0+cjAsIGhtLT5oLm9iamVjdCwKKwkJCQlobS0+aC5mdW5jdGlvbiwgSFBJX0VSUk9SX0JBRF9BREFQVEVSX05VTUJFUik7CiAKIAkJCXVuY29waWVkX2J5dGVzID0KIAkJCQljb3B5X3RvX3VzZXIocHVociwgaHIsIHNpemVvZihoci0+aCkpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggZTRkNzZhMi4uNTc5ZmMwZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0yNjI1LDE2ICsyNjI1LDE5IEBACiAJaW50IGVycjsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCWlmICghZW5hYmxlW2Rldl0pIHsKIAkJZGV2Kys7Ci0JCXJldHVybiAtRU5PRU5UOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKIAl9CiAKIAllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVpGMzMyOCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBenRlY2ggQVpGMzMyOCAoUENJMTY4KSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9hbGMyNjhfcXVpcmtzLmMgYi9zb3VuZC9wY2kvaGRhL2FsYzI2OF9xdWlya3MuYwppbmRleCBiZTU4YmYyLi4yZTU4NzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2FsYzI2OF9xdWlya3MuYworKysgYi9zb3VuZC9wY2kvaGRhL2FsYzI2OF9xdWlya3MuYwpAQCAtNDc2LDggKzQ3Niw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjY4X3ByZXNldHNbXSA9IHsKIAlbQUxDMjY3X1FVQU5UQV9JTDFdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIsCi0JCQkgICAgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2N19xdWFudGFfaWwxX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTQ5Miw4ICs0OTIsOCBAQAogCQkuaW5pdF9ob29rID0gYWxjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OF8zU1RdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjhfYmFzZV9taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAotCQkJICAgIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2OF9iYXNlX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2OF9kYWNfbmlkcywKQEAgLTUwNyw4ICs1MDcsOCBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2OF9jYXB0dXJlX3NvdXJjZSwKIAl9LAogCVtBTEMyNjhfVE9TSElCQV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OF90b3NoaWJhX21peGVyLCBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCi0JCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY4X3Rvc2hpYmFfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfdG9zaGliYV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC01MjUsOCArNTI1LDggQEAKIAkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfQUNFUl0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX21peGVyLCBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCi0JCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC01NDMsOCArNTQzLDggQEAKIAkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfQUNFUl9ETUlDXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfZG1pY19taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAotCQkJICAgIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX2RtaWNfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC01NjEsOSArNTYxLDggQEAKIAkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfQUNFUl9BU1BJUkVfT05FXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfYXNwaXJlX29uZV9taXhlciwKLQkJCSAgICBhbGMyNjhfYmVlcF9taXhlciwKLQkJCSAgICBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX21peGVyLCBhbGMyNjhfYmVlcF9taXhlcn0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtNTc5LDggKzU3OCw4IEBACiAJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY4X0RFTExdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjhfZGVsbF9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIsCi0JCQkgICAgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY4X2RlbGxfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyLAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY4X2RlbGxfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtNTk2LDggKzU5NSw4IEBACiAJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjY4X1pFUFRPXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY4X2Jhc2VfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciwKLQkJCSAgICBhbGMyNjhfYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjhfYmFzZV9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF90b3NoaWJhX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTYxNiw3ICs2MTUsOCBAQAogCX0sCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCVtBTEMyNjhfVEVTVF0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OF90ZXN0X21peGVyLCBhbGMyNjhfY2FwdHVyZV9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjhfdGVzdF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY4X2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfdm9sdW1lX2luaXRfdmVyYnMsCiAJCQkJYWxjMjY4X2JlZXBfaW5pdF92ZXJicyB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9hbGMyNjlfcXVpcmtzLmMgYi9zb3VuZC9wY2kvaGRhL2FsYzI2OV9xdWlya3MuYwppbmRleCAxNGZkY2YyLi41YWMwZTIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2FsYzI2OV9xdWlya3MuYworKysgYi9zb3VuZC9wY2kvaGRhL2FsYzI2OV9xdWlya3MuYwpAQCAtNTMxLDE3ICs1MzEsMTAgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY5MywgIkFTVVMgRjUwTiIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmEzLCAiQVNVUyBGNVEiLCBBTEMyNjlfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzIzLCAiQVNVUyBQODAiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc0MywgIkFTVVMgVTgwIiwgQUxDMjY5X0FNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg4MywgIkFTVVMgRjgxU2UiLCBBTEMyNjlfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxYSwgIkFTVVMgRWVlcGMgUDkwMSIsCi0JCSAgICAgIEFMQzI2OV9ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzOTgsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfRE1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODNjZSwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDcxLCAiU29ueSBWQUlPIiwgQUxDMjY5X0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0NzUsICJMaWZlYm9vayBJQ0g5TS1iYXNlZCIsIEFMQzI2OV9MSUZFQk9PSyksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MTc3OCwgIlF1YW50YSBPTjEiLCBBTEMyNjlfRE1JQyksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwppbmRleCAzZTc4NTBjLi5mM2FlZmVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKQEAgLTU3OSw5ICs1NzksMTMgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlyZWN1cnNpdmUrKzsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW1zOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHR5cGUgPSBnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIGNvbm5baV0pKTsKKwkJaWYgKHR5cGUgPT0gQUNfV0lEX1BJTiB8fCB0eXBlID09IEFDX1dJRF9BVURfT1VUKQorCQkJY29udGludWU7CiAJCWlmIChzbmRfaGRhX2dldF9jb25uX2luZGV4KGNvZGVjLCBjb25uW2ldLCBuaWQsIHJlY3Vyc2l2ZSkgPj0gMCkKIAkJCXJldHVybiBpOworCX0KIAlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2dldF9jb25uX2luZGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKaW5kZXggMjhjZTE3ZC4uYzM0ZjczMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKQEAgLTE0NCwyNSArMTQ0LDE3IEBACiAJU05EUlZfUENNX1JBVEVfMTkyMDAwLAkvKiA3OiAxOTIwMDBIeiAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgaGRtaV9nZXRfZWxkX2J5dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfZ2V0X2VsZF9kYXRhKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCQlpbnQgYnl0ZV9pbmRleCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCUFDX1ZFUkJfR0VUX0hETUlfRUxERCwgYnl0ZV9pbmRleCk7Ci0KICNpZmRlZiBCRV9QQVJBTk9JRAogCXByaW50ayhLRVJOX0lORk8gIkhETUk6IEVMRCBkYXRhIGJ5dGUgJWQ6IDB4JXhcbiIsIGJ5dGVfaW5kZXgsIHZhbCk7CiAjZW5kaWYKLQotCWlmICgodmFsICYgQUNfRUxERF9FTERfVkFMSUQpID09IDApIHsKLQkJc25kX3ByaW50ZChLRVJOX0lORk8gIkhETUk6IGludmFsaWQgRUxEIGRhdGEgYnl0ZSAlZFxuIiwKLQkJCQkJCQkJYnl0ZV9pbmRleCk7Ci0JCXZhbCA9IDA7Ci0JfQotCi0JcmV0dXJuIHZhbCAmIEFDX0VMRERfRUxEX0RBVEE7CisJcmV0dXJuIHZhbDsKIH0KIAogI2RlZmluZSBHUkFCX0JJVFMoYnVmLCBieXRlLCBsb3diaXQsIGJpdHMpIAkJXApAQCAtMzQ0LDExICszMzYsMjYgQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQlidWZbaV0gPSBoZG1pX2dldF9lbGRfYnl0ZShjb2RlYywgbmlkLCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSBoZG1pX2dldF9lbGRfZGF0YShjb2RlYywgbmlkLCBpKTsKKwkJaWYgKCEodmFsICYgQUNfRUxERF9FTERfVkFMSUQpKSB7CisJCQlpZiAoIWkpIHsKKwkJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTworCQkJCQkgICAiSERNSTogaW52YWxpZCBFTEQgZGF0YVxuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJc25kX3ByaW50ZChLRVJOX0lORk8KKwkJCQkgICJIRE1JOiBpbnZhbGlkIEVMRCBkYXRhIGJ5dGUgJWRcbiIsIGkpOworCQkJdmFsID0gMDsKKwkJfSBlbHNlCisJCQl2YWwgJj0gQUNfRUxERF9FTERfREFUQTsKKwkJYnVmW2ldID0gdmFsOworCX0KIAogCXJldCA9IGhkbWlfdXBkYXRlX2VsZChlbGQsIGJ1Ziwgc2l6ZSk7CiAKK2Vycm9yOgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCmluZGV4IDQ3ZDZmZmMuLmM0NWYzZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwpAQCAtMzc1LDcgKzM3NSw3IEBACiBzdGF0aWMgaGRhX25pZF90IGdldF9hZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCiAJCQkgdW5zaWduZWQgaW50ICppZHhwKQogewotCWludCBpOworCWludCBpLCBpZHg7CiAJaGRhX25pZF90IG5pZDsKIAogCW5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7CkBAIC0zODQsOSArMzg0LDExIEBACiAJCXR5cGUgPSBnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIG5pZCkpOwogCQlpZiAodHlwZSAhPSBBQ19XSURfQVVEX0lOKQogCQkJY29udGludWU7Ci0JCSppZHhwID0gc25kX2hkYV9nZXRfY29ubl9pbmRleChjb2RlYywgbmlkLCBwaW4sIGZhbHNlKTsKLQkJaWYgKCppZHhwID49IDApCisJCWlkeCA9IHNuZF9oZGFfZ2V0X2Nvbm5faW5kZXgoY29kZWMsIG5pZCwgcGluLCBmYWxzZSk7CisJCWlmIChpZHggPj0gMCkgeworCQkJKmlkeHAgPSBpZHg7CiAJCQlyZXR1cm4gbmlkOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTMzLDcgKzUzNSw3IEBACiAJCSAgICAgIGludCBpbmRleCwgdW5zaWduZWQgaW50IHB2YWwsIGludCBkaXIsCiAJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY3RscCkKIHsKLQljaGFyIHRtcFszMl07CisJY2hhciB0bXBbNDRdOwogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGtuZXcgPQogCQlIREFfQ09ERUNfVk9MVU1FX0lEWCh0bXAsIGluZGV4LCAwLCAwLCBIREFfT1VUUFVUKTsKIAlrbmV3LnByaXZhdGVfdmFsdWUgPSBwdmFsOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDUwMmZjOTQuLjc2OTZkMDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTMzNDgsNiArMzM0OCw4IEBACiAKICNkZWZpbmUgTUFYX0FVVE9fREFDUwk1CiAKKyNkZWZpbmUgREFDX1NMQVZFX0ZMQUcJMHg4MDAwCS8qIGZpbGxlZCBkYWMgaXMgYSBzbGF2ZSAqLworCiAvKiBmaWxsIGFuYWxvZyBEQUMgbGlzdCBmcm9tIHRoZSB3aWRnZXQgdHJlZSAqLwogc3RhdGljIGludCBmaWxsX2N4X2F1dG9fZGFjcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90ICpkYWNzKQogewpAQCAtMzM3MCwxNiArMzM3MiwyNiBAQAogLyogZmlsbCBwaW5fZGFjX3BhaXIgbGlzdCBmcm9tIHRoZSBwaW4gYW5kIGRhYyBsaXN0ICovCiBzdGF0aWMgaW50IGZpbGxfZGFjc19mb3JfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90ICpwaW5zLAogCQkJICAgICAgaW50IG51bV9waW5zLCBoZGFfbmlkX3QgKmRhY3MsIGludCAqcmVzdCwKLQkJCSAgICAgIHN0cnVjdCBwaW5fZGFjX3BhaXIgKmZpbGxlZCwgaW50IHR5cGUpCisJCQkgICAgICBzdHJ1Y3QgcGluX2RhY19wYWlyICpmaWxsZWQsIGludCBudW1zLCAKKwkJCSAgICAgIGludCB0eXBlKQogewotCWludCBpLCBudW1zOworCWludCBpLCBzdGFydCA9IG51bXM7CiAKLQludW1zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcGluczsgaSsrLCBudW1zKyspIHsKIAkJZmlsbGVkW251bXNdLnBpbiA9IHBpbnNbaV07CiAJCWZpbGxlZFtudW1zXS50eXBlID0gdHlwZTsKIAkJZmlsbGVkW251bXNdLmRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgcGluc1tpXSwgZGFjcywgcmVzdCk7Ci0JCW51bXMrKzsKKwkJaWYgKGZpbGxlZFtudW1zXS5kYWMpIAorCQkJY29udGludWU7CisJCWlmIChmaWxsZWRbc3RhcnRdLmRhYyAmJiBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgcGluc1tpXSwgZmlsbGVkW3N0YXJ0XS5kYWMpID49IDApIHsKKwkJCWZpbGxlZFtudW1zXS5kYWMgPSBmaWxsZWRbc3RhcnRdLmRhYyB8IERBQ19TTEFWRV9GTEFHOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGZpbGxlZFswXS5kYWMgJiYgZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHBpbnNbaV0sIGZpbGxlZFswXS5kYWMpID49IDApIHsKKwkJCWZpbGxlZFtudW1zXS5kYWMgPSBmaWxsZWRbMF0uZGFjIHwgREFDX1NMQVZFX0ZMQUc7CisJCQljb250aW51ZTsKKwkJfQorCQlzbmRfcHJpbnRkZCgiRmFpbGVkIHRvIGZpbmQgYSBEQUMgZm9yIHBpbiAweCV4IiwgcGluc1tpXSk7CiAJfQogCXJldHVybiBudW1zOwogfQpAQCAtMzM5NSwxOSArMzQwNywxOSBAQAogCXJlc3QgPSBmaWxsX2N4X2F1dG9fZGFjcyhjb2RlYywgZGFjcyk7CiAJLyogcGFyc2UgYWxsIGFuYWxvZyBvdXRwdXQgcGlucyAqLwogCW51bXMgPSBmaWxsX2RhY3NfZm9yX3BpbnMoY29kZWMsIGNmZy0+bGluZV9vdXRfcGlucywgY2ZnLT5saW5lX291dHMsCi0JCQkJICBkYWNzLCAmcmVzdCwgc3BlYy0+ZGFjX2luZm8sCi0JCQkJICBBVVRPX1BJTl9MSU5FX09VVCk7Ci0JbnVtcyArPSBmaWxsX2RhY3NfZm9yX3BpbnMoY29kZWMsIGNmZy0+aHBfcGlucywgY2ZnLT5ocF9vdXRzLAotCQkJCSAgZGFjcywgJnJlc3QsIHNwZWMtPmRhY19pbmZvICsgbnVtcywKLQkJCQkgIEFVVE9fUElOX0hQX09VVCk7Ci0JbnVtcyArPSBmaWxsX2RhY3NfZm9yX3BpbnMoY29kZWMsIGNmZy0+c3BlYWtlcl9waW5zLCBjZmctPnNwZWFrZXJfb3V0cywKLQkJCQkgIGRhY3MsICZyZXN0LCBzcGVjLT5kYWNfaW5mbyArIG51bXMsCi0JCQkJICBBVVRPX1BJTl9TUEVBS0VSX09VVCk7CisJCQkgIGRhY3MsICZyZXN0LCBzcGVjLT5kYWNfaW5mbywgMCwKKwkJCSAgQVVUT19QSU5fTElORV9PVVQpOworCW51bXMgPSBmaWxsX2RhY3NfZm9yX3BpbnMoY29kZWMsIGNmZy0+aHBfcGlucywgY2ZnLT5ocF9vdXRzLAorCQkJICBkYWNzLCAmcmVzdCwgc3BlYy0+ZGFjX2luZm8sIG51bXMsCisJCQkgIEFVVE9fUElOX0hQX09VVCk7CisJbnVtcyA9IGZpbGxfZGFjc19mb3JfcGlucyhjb2RlYywgY2ZnLT5zcGVha2VyX3BpbnMsIGNmZy0+c3BlYWtlcl9vdXRzLAorCQkJICBkYWNzLCAmcmVzdCwgc3BlYy0+ZGFjX2luZm8sIG51bXMsCisJCQkgIEFVVE9fUElOX1NQRUFLRVJfT1VUKTsKIAlzcGVjLT5kYWNfaW5mb19maWxsZWQgPSBudW1zOwogCS8qIGZpbGwgbXVsdGlvdXQgc3RydWN0ICovCiAJZm9yIChpID0gMDsgaSA8IG51bXM7IGkrKykgewogCQloZGFfbmlkX3QgZGFjID0gc3BlYy0+ZGFjX2luZm9baV0uZGFjOwotCQlpZiAoIWRhYykKKwkJaWYgKCFkYWMgfHwgKGRhYyAmIERBQ19TTEFWRV9GTEFHKSkKIAkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKHNwZWMtPmRhY19pbmZvW2ldLnR5cGUpIHsKIAkJY2FzZSBBVVRPX1BJTl9MSU5FX09VVDoKQEAgLTM4NjIsNyArMzg3NCw3IEBACiAJfQogCWlmIChpbXV4LT5udW1faXRlbXMgPj0gMiAmJiBjZmctPm51bV9pbnB1dHMgPT0gaW11eC0+bnVtX2l0ZW1zKQogCQljeF9hdXRvX2NoZWNrX2F1dG9fbWljKGNvZGVjKTsKLQlpZiAoaW11eC0+bnVtX2l0ZW1zID4gMSAmJiAhc3BlYy0+YXV0b19taWMpIHsKKwlpZiAoaW11eC0+bnVtX2l0ZW1zID4gMSkgewogCQlmb3IgKGkgPSAxOyBpIDwgaW11eC0+bnVtX2l0ZW1zOyBpKyspIHsKIAkJCWlmIChzcGVjLT5pbXV4X2luZm9baV0uYWRjICE9IHNwZWMtPmltdXhfaW5mb1swXS5hZGMpIHsKIAkJCQlzcGVjLT5hZGNfc3dpdGNoaW5nID0gMTsKQEAgLTQwMzUsNiArNDA0Nyw4IEBACiAJCW5pZCA9IHNwZWMtPmRhY19pbmZvW2ldLmRhYzsKIAkJaWYgKCFuaWQpCiAJCQluaWQgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXTsKKwkJZWxzZSBpZiAobmlkICYgREFDX1NMQVZFX0ZMQUcpCisJCQluaWQgJj0gfkRBQ19TTEFWRV9GTEFHOwogCQlzZWxlY3RfY29ubmVjdGlvbihjb2RlYywgc3BlYy0+ZGFjX2luZm9baV0ucGluLCBuaWQpOwogCX0KIAlpZiAoc3BlYy0+YXV0b19tdXRlKSB7CkBAIC00MTY3LDkgKzQxODEsMTEgQEAKIAkJCSAgICAgaGRhX25pZF90IHBpbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGlkeCkKIHsKIAl1bnNpZ25lZCBpbnQgY2FwczsKLQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIGRhYywgSERBX09VVFBVVCk7Ci0JaWYgKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKQotCQlyZXR1cm4gY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBkYWMsIG5hbWUsIGlkeCk7CisJaWYgKGRhYyAmJiAhKGRhYyAmIERBQ19TTEFWRV9GTEFHKSkgeworCQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIGRhYywgSERBX09VVFBVVCk7CisJCWlmIChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykKKwkJCXJldHVybiBjeF9hdXRvX2FkZF9wYl92b2x1bWUoY29kZWMsIGRhYywgbmFtZSwgaWR4KTsKKwl9CiAJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBwaW4sIEhEQV9PVVRQVVQpOwogCWlmIChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykKIAkJcmV0dXJuIGN4X2F1dG9fYWRkX3BiX3ZvbHVtZShjb2RlYywgcGluLCBuYW1lLCBpZHgpOwpAQCAtNDE5MSw4ICs0MjA3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+ZGFjX2luZm9fZmlsbGVkOyBpKyspIHsKIAkJY29uc3QgY2hhciAqbGFiZWw7CiAJCWludCBpZHgsIHR5cGU7Ci0JCWlmICghc3BlYy0+ZGFjX2luZm9baV0uZGFjKQotCQkJY29udGludWU7CisJCWhkYV9uaWRfdCBkYWMgPSBzcGVjLT5kYWNfaW5mb1tpXS5kYWM7CiAJCXR5cGUgPSBzcGVjLT5kYWNfaW5mb1tpXS50eXBlOwogCQlpZiAodHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCkKIAkJCXR5cGUgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGU7CkBAIC00MjExLDcgKzQyMjYsNyBAQAogCQkJaWR4ID0gbnVtX3NwaysrOwogCQkJYnJlYWs7CiAJCX0KLQkJZXJyID0gdHJ5X2FkZF9wYl92b2x1bWUoY29kZWMsIHNwZWMtPmRhY19pbmZvW2ldLmRhYywKKwkJZXJyID0gdHJ5X2FkZF9wYl92b2x1bWUoY29kZWMsIGRhYywKIAkJCQkJc3BlYy0+ZGFjX2luZm9baV0ucGluLAogCQkJCQlsYWJlbCwgaWR4KTsKIAkJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGUxMjVjNjAuLjdjYWJkNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC01NjUsMTEgKzU2NSwxMSBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0JaWYgKCFzcGVjLT5hdXRvbXV0ZSkKLQkJcmV0dXJuOwogCXNwZWMtPmphY2tfcHJlc2VudCA9CiAJCWRldGVjdF9qYWNrcyhjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpLAogCQkJICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpOworCWlmICghc3BlYy0+YXV0b211dGUpCisJCXJldHVybjsKIAl1cGRhdGVfc3BlYWtlcnMoY29kZWMpOwogfQogCkBAIC01NzgsMTEgKzU3OCwxMSBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0JaWYgKCFzcGVjLT5hdXRvbXV0ZSB8fCAhc3BlYy0+ZGV0ZWN0X2xpbmUpCi0JCXJldHVybjsKIAlzcGVjLT5saW5lX2phY2tfcHJlc2VudCA9CiAJCWRldGVjdF9qYWNrcyhjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnMpLAogCQkJICAgICBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnMpOworCWlmICghc3BlYy0+YXV0b211dGUgfHwgIXNwZWMtPmRldGVjdF9saW5lKQorCQlyZXR1cm47CiAJdXBkYXRlX3NwZWFrZXJzKGNvZGVjKTsKIH0KIApAQCAtMTc4NCw2ICsxNzg0LDcgQEAKIAkiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLAogCSJNb25vIFBsYXliYWNrIFZvbHVtZSIsCiAJIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsCisJIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwsCiB9OwogCkBAIC0xNzk4LDYgKzE3OTksNyBAQAogCSJNb25vIFBsYXliYWNrIFN3aXRjaCIsCiAJIklFQzk1OCBQbGF5YmFjayBTd2l0Y2giLAogCSJMaW5lLU91dCBQbGF5YmFjayBTd2l0Y2giLAorCSJQQ00gUGxheWJhY2sgU3dpdGNoIiwKIAlOVUxMLAogfTsKIApAQCAtMzA4MSwxNiArMzA4MywyMiBAQAogc3RhdGljIHZvaWQgYWxjX2F1dG9faW5pdF9leHRyYV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IHBpbjsKKwloZGFfbmlkX3QgcGluLCBkYWM7CiAKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JaWYgKHBpbikKLQkJYWxjX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwKLQkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKKwlpZiAocGluKSB7CisJCWRhYyA9IHNwZWMtPm11bHRpb3V0LmhwX25pZDsKKwkJaWYgKCFkYWMpCisJCQlkYWMgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXTsKKwkJYWxjX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgZGFjKTsKKwl9CiAJcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07Ci0JaWYgKHBpbikKLQkJYWxjX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsCi0JCQkJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0pOworCWlmIChwaW4pIHsKKwkJZGFjID0gc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXTsKKwkJaWYgKCFkYWMpCisJCQlkYWMgPSBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXTsKKwkJYWxjX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsIGRhYyk7CisJfQogfQogCiAvKgpAQCAtNDQ4NCw2ICs0NDkyLDIyIEBACiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlOwogfQogCitzdGF0aWMgdm9pZCBhbGMyNjlfZml4dXBfc3RlcmVvX2RtaWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCit7CisJaW50IGNvZWY7CisKKwlpZiAoYWN0aW9uICE9IEFMQ19GSVhVUF9BQ1RfSU5JVCkKKwkJcmV0dXJuOworCS8qIFRoZSBkaWdpdGFsLW1pYyB1bml0IHNlbmRzIFBETSAoZGlmZmVyZW50aWFsIHNpZ25hbCkgaW5zdGVhZCBvZgorCSAqIHRoZSBzdGFuZGFyZCBQQ00sIHRodXMgeW91IGNhbid0IHJlY29yZCBhIHZhbGlkIG1vbm8gc3RyZWFtIGFzIGlzLgorCSAqIEJlbG93IGlzIGEgd29ya2Fyb3VuZCBzcGVjaWZpYyB0byBBTEMyNjkgdG8gY29udHJvbCB0aGUgZG1pYworCSAqIHNpZ25hbCBzb3VyY2UgYXMgbW9uby4KKwkgKi8KKwljb2VmID0gYWxjX3JlYWRfY29lZl9pZHgoY29kZWMsIDB4MDcpOworCWFsY193cml0ZV9jb2VmX2lkeChjb2RlYywgMHgwNywgY29lZiB8IDB4ODApOworfQorCiBlbnVtIHsKIAlBTEMyNjlfRklYVVBfU09OWV9WQUlPLAogCUFMQzI3NV9GSVhVUF9TT05ZX1ZBSU9fR1BJTzIsCkBAIC00NDk0LDYgKzQ1MTgsNyBAQAogCUFMQzI3NV9GSVhVUF9TT05ZX0hXRVEsCiAJQUxDMjcxX0ZJWFVQX0RNSUMsCiAJQUxDMjY5X0ZJWFVQX1BDTV80NEssCisJQUxDMjY5X0ZJWFVQX1NURVJFT19ETUlDLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjMjY5X2ZpeHVwc1tdID0gewpAQCAtNDU1NiwxMCArNDU4MSwxOSBAQAogCQkudHlwZSA9IEFMQ19GSVhVUF9GVU5DLAogCQkudi5mdW5jID0gYWxjMjY5X2ZpeHVwX3BjbV80NGssCiAJfSwKKwlbQUxDMjY5X0ZJWFVQX1NURVJFT19ETUlDXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsYzI2OV9maXh1cF9zdGVyZW9fZG1pYywKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxYTEzLCAiQXN1cyBHNzNKdyIsIEFMQzI2OV9GSVhVUF9BU1VTX0c3M0pXKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0ZJWFVQX1NURVJFT19ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiQVNVUyBQOTAxIiwgQUxDMjY5X0ZJWFVQX1NURVJFT19ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBTMTAxIiwgQUxDMjY5X0ZJWFVQX1NURVJFT19ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4Mzk4LCAiQVNVUyBQMTAwNSIsIEFMQzI2OV9GSVhVUF9TVEVSRU9fRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODNjZSwgIkFTVVMgUDEwMDUiLCBBTEMyNjlfRklYVVBfU1RFUkVPX0RNSUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzMsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9WQUlPX0dQSU8yKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDdiLCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA4NCwgIlNvbnkgVkFJTyIsIEFMQzI3NV9GSVhVUF9TT05ZX0hXRVEpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IGFhMzc2YjUuLjUxNDViNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTY3Myw2ICs2NzMsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogc3RhdGljIGludCBzdGFjX3ZyZWZvdXRfc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQloZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgbmV3X3ZyZWYpCiB7CkBAIC02OTYsNiArNjk3LDcgQEAKIAogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzkyeHhfdnJlZl9zZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCWhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBuZXdfdnJlZikKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IDg0ZDg3OTguLjRlYmZiZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMjA4NCw3ICsyMDg0LDcgQEAKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgbmlkX3BhdGggKnBhdGg7CiAJYm9vbCBjaGVja19kYWM7Ci0JaGRhX25pZF90IHBpbiwgZGFjOworCWhkYV9uaWRfdCBwaW4sIGRhYyA9IDA7CiAJaW50IGVycjsKIAogCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggYWYxMzBlZS4uNDkzZTM5NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC01MjEsNiArNTIxLDcgQEAKICNkZWZpbmUgSERTUE1fRE1BX0FSRUFfS0lMT0JZVEVTIChIRFNQTV9ETUFfQVJFQV9CWVRFUy8xMDI0KQogCiAvKiByZXZpc2lvbnMgPj0gMjMwIGluZGljYXRlIEFFUzMyIGNhcmQgKi8KKyNkZWZpbmUgSERTUE1fTUFESV9BTkNJRU5UX1JFVgkyMDQKICNkZWZpbmUgSERTUE1fTUFESV9PTERfUkVWCTIwNwogI2RlZmluZSBIRFNQTV9NQURJX1JFVgkJMjEwCiAjZGVmaW5lIEhEU1BNX1JBWURBVF9SRVYJMjExCkBAIC0xMjE3LDYgKzEyMTgsMjIgQEAKIAkJCQlyYXRlID0gMDsKIAkJCQlicmVhazsKIAkJCX0KKworCQkJLyogUVMgYW5kIERTIHJhdGVzIG5vcm1hbGx5IGNhbiBub3QgYmUgZGV0ZWN0ZWQKKwkJCSAqIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNhcmQuIE9ubHkgZXhjZXB0aW9uIGlzIE1BREkKKwkJCSAqIGluIDk2ayBmcmFtZSBtb2RlLgorCQkJICoKKwkJCSAqIFNvIGlmIHdlIHJlYWQgU1MgdmFsdWVzICgzMiAuLiA0OGspLCBjaGVjayBmb3IKKwkJCSAqIHVzZXItcHJvdmlkZWQgRFMvUVMgYml0cyBpbiB0aGUgY29udHJvbCByZWdpc3RlcgorCQkJICogYW5kIG11bHRpcGx5IHRoZSBiYXNlIGZyZXF1ZW5jeSBhY2NvcmRpbmdseS4KKwkJCSAqLworCQkJaWYgKHJhdGUgPD0gNDgwMDApIHsKKwkJCQlpZiAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9RdWFkU3BlZWQpCisJCQkJCXJhdGUgKj0gNDsKKwkJCQllbHNlIGlmIChoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmCisJCQkJCQlIRFNQTV9Eb3VibGVTcGVlZCkKKwkJCQkJcmF0ZSAqPSAyOworCQkJfQogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEzMjIsNiArMTMzOSwxMCBAQAogCQlicmVhazsKIAljYXNlIE1BRElmYWNlOgogCQlmcmVxX2NvbnN0ID0gMTMxMDcyMDAwMDAwMDAwVUxMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfQlVHKCk7CisJCXJldHVybiAwOwogCX0KIAogCXJldHVybiBkaXZfdTY0KGZyZXFfY29uc3QsIHBlcmlvZCk7CkBAIC0xMzM5LDE2ICsxMzYwLDE5IEBACiAKIAlzd2l0Y2ggKGhkc3BtLT5pb190eXBlKSB7CiAJY2FzZSBNQURJZmFjZToKLQkgIG4gPSAxMzEwNzIwMDAwMDAwMDBVTEw7ICAvKiAxMjUgTUh6ICovCi0JICBicmVhazsKKwkJbiA9IDEzMTA3MjAwMDAwMDAwMFVMTDsgIC8qIDEyNSBNSHogKi8KKwkJYnJlYWs7CiAJY2FzZSBNQURJOgogCWNhc2UgQUVTMzI6Ci0JICBuID0gMTEwMDY5MzEzNDMzNjI0VUxMOyAgLyogMTA1IE1IeiAqLwotCSAgYnJlYWs7CisJCW4gPSAxMTAwNjkzMTM0MzM2MjRVTEw7ICAvKiAxMDUgTUh6ICovCisJCWJyZWFrOwogCWNhc2UgUmF5REFUOgogCWNhc2UgQUlPOgotCSAgbiA9IDEwNDg1NzYwMDAwMDAwMFVMTDsgIC8qIDEwMCBNSHogKi8KLQkgIGJyZWFrOworCQluID0gMTA0ODU3NjAwMDAwMDAwVUxMOyAgLyogMTAwIE1IeiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbmRfQlVHKCk7CisJCXJldHVybjsKIAl9CiAKIAluID0gZGl2X3U2NChuLCByYXRlKTsKQEAgLTM0MTUsNiArMzQzOSw5MSBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKyNkZWZpbmUgSERTUE1fTUFESV9TUEVFRE1PREUoeG5hbWUsIHhpbmRleCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkuaW5kZXggPSB4aW5kZXgsIFwKKwkuaW5mbyA9IHNuZF9oZHNwbV9pbmZvX21hZGlfc3BlZWRtb2RlLCBcCisJLmdldCA9IHNuZF9oZHNwbV9nZXRfbWFkaV9zcGVlZG1vZGUsIFwKKwkucHV0ID0gc25kX2hkc3BtX3B1dF9tYWRpX3NwZWVkbW9kZSBcCit9CisKK3N0YXRpYyBpbnQgaGRzcG1fbWFkaV9zcGVlZG1vZGUoc3RydWN0IGhkc3BtICpoZHNwbSkKK3sKKwlpZiAoaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJiBIRFNQTV9RdWFkU3BlZWQpCisJCXJldHVybiAyOworCWlmIChoZHNwbS0+Y29udHJvbF9yZWdpc3RlciAmIEhEU1BNX0RvdWJsZVNwZWVkKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZHNwbV9zZXRfbWFkaV9zcGVlZG1vZGUoc3RydWN0IGhkc3BtICpoZHNwbSwgaW50IG1vZGUpCit7CisJaGRzcG0tPmNvbnRyb2xfcmVnaXN0ZXIgJj0gfihIRFNQTV9Eb3VibGVTcGVlZCB8IEhEU1BNX1F1YWRTcGVlZCk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX0RvdWJsZVNwZWVkOworCQlicmVhazsKKwljYXNlIDI6CisJCWhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IEhEU1BNX1F1YWRTcGVlZDsKKwkJYnJlYWs7CisJfQorCWhkc3BtX3dyaXRlKGhkc3BtLCBIRFNQTV9jb250cm9sUmVnaXN0ZXIsIGhkc3BtLT5jb250cm9sX3JlZ2lzdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9pbmZvX21hZGlfc3BlZWRtb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0YXRpYyBjaGFyICp0ZXh0c1tdID0geyAiU2luZ2xlIiwgIkRvdWJsZSIsICJRdWFkIiB9OworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDM7CisKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcykKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9CisJCSAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9nZXRfbWFkaV9zcGVlZG1vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXNwaW5fbG9ja19pcnEoJmhkc3BtLT5sb2NrKTsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gaGRzcG1fbWFkaV9zcGVlZG1vZGUoaGRzcG0pOworCXNwaW5fdW5sb2NrX2lycSgmaGRzcG0tPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9oZHNwbV9wdXRfbWFkaV9zcGVlZG1vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkc3BtICpoZHNwbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlOworCWludCB2YWw7CisKKwlpZiAoIXNuZF9oZHNwbV91c2VfaXNfZXhjbHVzaXZlKGhkc3BtKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpZiAodmFsIDwgMCkKKwkJdmFsID0gMDsKKwlpZiAodmFsID4gMikKKwkJdmFsID0gMjsKKwlzcGluX2xvY2tfaXJxKCZoZHNwbS0+bG9jayk7CisJY2hhbmdlID0gdmFsICE9IGhkc3BtX21hZGlfc3BlZWRtb2RlKGhkc3BtKTsKKwloZHNwbV9zZXRfbWFkaV9zcGVlZG1vZGUoaGRzcG0sIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZoZHNwbS0+bG9jayk7CisJcmV0dXJuIGNoYW5nZTsKK30KIAogI2RlZmluZSBIRFNQTV9NSVhFUih4bmFtZSwgeGluZGV4KSBcCiB7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX0hXREVQLCBcCkBAIC00Mjg5LDcgKzQzOTgsOCBAQAogCUhEU1BNX1RYXzY0KCJUWCA2NCBjaGFubmVscyBtb2RlIiwgMCksCiAJSERTUE1fQ19UTVMoIkNsZWFyIFRyYWNrIE1hcmtlciIsIDApLAogCUhEU1BNX1NBRkVfTU9ERSgiU2FmZSBNb2RlIiwgMCksCi0JSERTUE1fSU5QVVRfU0VMRUNUKCJJbnB1dCBTZWxlY3QiLCAwKQorCUhEU1BNX0lOUFVUX1NFTEVDVCgiSW5wdXQgU2VsZWN0IiwgMCksCisJSERTUE1fTUFESV9TUEVFRE1PREUoIk1BREkgU3BlZWQgTW9kZSIsIDApCiB9OwogCiAKQEAgLTQzMDIsNyArNDQxMiw4IEBACiAJSERTUE1fU1lOQ19DSEVDSygiTUFESSBTeW5jQ2hlY2siLCAwKSwKIAlIRFNQTV9UWF82NCgiVFggNjQgY2hhbm5lbHMgbW9kZSIsIDApLAogCUhEU1BNX0NfVE1TKCJDbGVhciBUcmFjayBNYXJrZXIiLCAwKSwKLQlIRFNQTV9TQUZFX01PREUoIlNhZmUgTW9kZSIsIDApCisJSERTUE1fU0FGRV9NT0RFKCJTYWZlIE1vZGUiLCAwKSwKKwlIRFNQTV9NQURJX1NQRUVETU9ERSgiTUFESSBTcGVlZCBNb2RlIiwgMCkKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaGRzcG1fY29udHJvbHNfYWlvW10gPSB7CkBAIC02MzgxLDYgKzY0OTIsNyBAQAogCXN3aXRjaCAoaGRzcG0tPmZpcm13YXJlX3JldikgewogCWNhc2UgSERTUE1fTUFESV9SRVY6CiAJY2FzZSBIRFNQTV9NQURJX09MRF9SRVY6CisJY2FzZSBIRFNQTV9NQURJX0FOQ0lFTlRfUkVWOgogCQloZHNwbS0+aW9fdHlwZSA9IE1BREk7CiAJCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIE1BREkiOwogCQloZHNwbS0+bWlkaVBvcnRzID0gMzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5M3guYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5M3guYwppbmRleCBkNjY1MWMwLi41OTU2NTg0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTN4LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTkzeC5jCkBAIC01Niw3ICs1Niw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKIAljYXNlIDQ4MDAwOgotCQljbGsgPSAxMjI4ODAwMDsKKwkJY2xrID0gMjQ1NzYwMDA7CiAJCWJyZWFrOwogCX0KIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMCIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ImFkMTkzeC1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKLQkJLmNvZGVjX25hbWUgPSAiYWQxOTN4LjUiLAorCQkuY29kZWNfbmFtZSA9ICJzcGkwLjUiLAogCQkub3BzID0gJmJmNXh4X2FkMTkzeF9vcHMsCiAJfSwKIAl7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4xIiwKIAkJLmNvZGVjX2RhaV9uYW1lID0iYWQxOTN4LWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJiZmluLXRkbS1wY20tYXVkaW8iLAotCQkuY29kZWNfbmFtZSA9ICJhZDE5M3guNSIsCisJCS5jb2RlY19uYW1lID0gInNwaTAuNSIsCiAJCS5vcHMgPSAmYmY1eHhfYWQxOTN4X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCAzNzliMmUzLi42NjVkOTI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC03OCw3ICs3OCw2IEBACiAJc2VsZWN0IFNORF9TT0NfV004OTAwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODkwMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDQgaWYgSTJDCi0Jc2VsZWN0IFNORF9TT0NfV004OTE1IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk0MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NTUgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTYwIGlmIEkyQwpAQCAtOTUsNiArOTQsNyBAQAogCXNlbGVjdCBTTkRfU09DX1dNODk5MyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5OTQgaWYgTUZEX1dNODk5NAogCXNlbGVjdCBTTkRfU09DX1dNODk5NSBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCisJc2VsZWN0IFNORF9TT0NfV004OTk2IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNOTA4MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTkwOTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV005NzA1IGlmIFNORF9TT0NfQUM5N19CVVMKQEAgLTMyOSw5ICszMjksNiBAQAogY29uZmlnIFNORF9TT0NfV004OTA0CiAJdHJpc3RhdGUKIAotY29uZmlnIFNORF9TT0NfV004OTE1Ci0JdHJpc3RhdGUKLQogY29uZmlnIFNORF9TT0NfV004OTQwCiAgICAgICAgIHRyaXN0YXRlCiAKQEAgLTM4MCw2ICszNzcsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTk1CiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTk2CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV005MDgxCiAJdHJpc3RhdGUKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggZGE5OTkwZi4uNTExOWE3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC02Myw3ICs2Myw3IEBACiBzbmQtc29jLXdtODkwMC1vYmpzIDo9IHdtODkwMC5vCiBzbmQtc29jLXdtODkwMy1vYmpzIDo9IHdtODkwMy5vCiBzbmQtc29jLXdtODkwNC1vYmpzIDo9IHdtODkwNC5vCi1zbmQtc29jLXdtODkxNS1vYmpzIDo9IHdtODkxNS5vCitzbmQtc29jLXdtODk5Ni1vYmpzIDo9IHdtODk5Ni5vCiBzbmQtc29jLXdtODk0MC1vYmpzIDo9IHdtODk0MC5vCiBzbmQtc29jLXdtODk1NS1vYmpzIDo9IHdtODk1NS5vCiBzbmQtc29jLXdtODk2MC1vYmpzIDo9IHdtODk2MC5vCkBAIC0xNjAsNyArMTYwLDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMCkJKz0gc25kLXNvYy13bTg5MDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTAzKQkrPSBzbmQtc29jLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDQpCSs9IHNuZC1zb2Mtd204OTA0Lm8KLW9iai0kKENPTkZJR19TTkRfU09DX1dNODkxNSkJKz0gc25kLXNvYy13bTg5MTUubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTk2KQkrPSBzbmQtc29jLXdtODk5Ni5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NDApCSs9IHNuZC1zb2Mtd204OTQwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk1NSkJKz0gc25kLXNvYy13bTg5NTUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTYwKQkrPSBzbmQtc29jLXdtODk2MC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYwppbmRleCAyMzc0Y2E1Li5lZWRiNmY1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmMKQEAgLTI3LDExICsyNyw2IEBACiAJaW50IHN5c2NsazsKIH07CiAKLS8qIGFkMTkzeCByZWdpc3RlciBjYWNoZSAmIGRlZmF1bHQgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KLXN0YXRpYyBjb25zdCB1OCBhZDE5M3hfcmVnW0FEMTkzWF9OVU1fUkVHU10gPSB7Ci0JMCwgMCwgMCwgMCwgMCwgMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMCwgMCwgMCwKLX07Ci0KIC8qCiAgKiBBRDE5M1ggdm9sdW1lL211dGUvZGUtZW1waGFzaXMgZXRjLiBjb250cm9scwogICovCkBAIC0zMDcsNyArMzAyLDggQEAKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5M1hfUExMX0NMS19DVFJMMCwgcmVnKTsKIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTNYX0RBQ19DVFJMMik7Ci0JcmVnID0gKHJlZyAmICh+QUQxOTNYX0RBQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKKwlyZWcgPSAocmVnICYgKH5BRDE5M1hfREFDX1dPUkRfTEVOX01BU0spKQorCQl8ICh3b3JkX2xlbiA8PCBBRDE5M1hfREFDX1dPUkRfTEVOX1NIRlQpOwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzWF9EQUNfQ1RSTDIsIHJlZyk7CiAKIAlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzWF9BRENfQ1RSTDEpOwpAQCAtMzg5LDkgKzM4NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9hZDE5M3ggPSB7CiAJLnByb2JlID0gCWFkMTkzeF9wcm9iZSwKLQkucmVnX2NhY2hlX2RlZmF1bHQgPSBhZDE5M3hfcmVnLAotCS5yZWdfY2FjaGVfc2l6ZSA9IEFEMTkzWF9OVU1fUkVHUywKLQkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5oIGIvc291bmQvc29jL2NvZGVjcy9hZDE5M3guaAppbmRleCA5NzQ3YjU0Li5jY2NjMmU4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmgKQEAgLTM0LDcgKzM0LDggQEAKICNkZWZpbmUgQUQxOTNYX0RBQ19MRUZUX0hJR0ggICAgKDEgPDwgMykKICNkZWZpbmUgQUQxOTNYX0RBQ19CQ0xLX0lOViAgICAgKDEgPDwgNykKICNkZWZpbmUgQUQxOTNYX0RBQ19DVFJMMiAgICAgICAgMHg4MDQKLSNkZWZpbmUgQUQxOTNYX0RBQ19XT1JEX0xFTl9NQVNLCTB4QworI2RlZmluZSBBRDE5M1hfREFDX1dPUkRfTEVOX1NIRlQgICAgICAgIDMKKyNkZWZpbmUgQUQxOTNYX0RBQ19XT1JEX0xFTl9NQVNLICAgICAgICAweDE4CiAjZGVmaW5lIEFEMTkzWF9EQUNfTUFTVEVSX01VVEUgIDEKICNkZWZpbmUgQUQxOTNYX0RBQ19DSE5MX01VVEUgICAgMHg4MDUKICNkZWZpbmUgQUQxOTNYX0RBQ0wxX01VVEUgICAgICAgMApAQCAtNjMsNyArNjQsNyBAQAogI2RlZmluZSBBRDE5M1hfQURDX0NUUkwxICAgICAgICAweDgwZgogI2RlZmluZSBBRDE5M1hfQURDX1NFUkZNVF9NQVNLCQkweDYwCiAjZGVmaW5lIEFEMTkzWF9BRENfU0VSRk1UX1NURVJFTwkoMCA8PCA1KQotI2RlZmluZSBBRDE5M1hfQURDX1NFUkZNVF9URE0JCSgxIDw8IDIpCisjZGVmaW5lIEFEMTkzWF9BRENfU0VSRk1UX1RETQkJKDEgPDwgNSkKICNkZWZpbmUgQUQxOTNYX0FEQ19TRVJGTVRfQVVYCQkoMiA8PCA1KQogI2RlZmluZSBBRDE5M1hfQURDX1dPUkRfTEVOX01BU0sJMHgzCiAjZGVmaW5lIEFEMTkzWF9BRENfQ1RSTDIgICAgICAgIDB4ODEwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKaW5kZXggNzYyNThmMi4uN2U0MDY2ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYwpAQCAtMzMsNzMgKzMzLDMxIEBACiAjZGVmaW5lIFNHVEw1MDAwX0RBUF9SRUdfT0ZGU0VUCTB4MDEwMAogI2RlZmluZSBTR1RMNTAwMF9NQVhfUkVHX09GRlNFVAkweDAxM0EKIAotLyogZGVmYXVsdCB2YWx1ZSBvZiBzZ3RsNTAwMCByZWdpc3RlcnMgZXhjZXB0IERBUCAqLwotc3RhdGljIGNvbnN0IHUxNiBzZ3RsNTAwMF9yZWdzW1NHVEw1MDAwX01BWF9SRUdfT0ZGU0VUID4+IDFdID0gIHsKLQkweGEwMTEsIC8qIDB4MDAwMCwgQ0hJUF9JRC4gMTEgc3RhbmQgZm9yIHJldmlzb24gMTcgKi8KLQkweDAwMDAsIC8qIDB4MDAwMiwgQ0hJUF9ESUdfUE9XRVIuICovCi0JMHgwMDA4LCAvKiAweDAwMDQsIENISVBfQ0tMX0NUUkwgKi8KLQkweDAwMTAsIC8qIDB4MDAwNiwgQ0hJUF9JMlNfQ1RSTCAqLwotCTB4MDAwMCwgLyogMHgwMDA4LCByZXNlcnZlZCAqLwotCTB4MDAwOCwgLyogMHgwMDBBLCBDSElQX1NTU19DVFJMICovCi0JMHgwMDAwLCAvKiAweDAwMEMsIHJlc2VydmVkICovCi0JMHgwMjBjLCAvKiAweDAwMEUsIENISVBfQURDREFDX0NUUkwgKi8KLQkweDNjM2MsIC8qIDB4MDAxMCwgQ0hJUF9EQUNfVk9MICovCi0JMHgwMDAwLCAvKiAweDAwMTIsIHJlc2VydmVkICovCi0JMHgwMTVmLCAvKiAweDAwMTQsIENISVBfUEFEX1NUUkVOR1RIICovCi0JMHgwMDAwLCAvKiAweDAwMTYsIHJlc2VydmVkICovCi0JMHgwMDAwLCAvKiAweDAwMTgsIHJlc2VydmVkICovCi0JMHgwMDAwLCAvKiAweDAwMUEsIHJlc2VydmVkICovCi0JMHgwMDAwLCAvKiAweDAwMUUsIHJlc2VydmVkICovCi0JMHgwMDAwLCAvKiAweDAwMjAsIENISVBfQU5BX0FEQ19DVFJMICovCi0JMHgxODE4LCAvKiAweDAwMjIsIENISVBfQU5BX0hQX0NUUkwgKi8KLQkweDAxMTEsIC8qIDB4MDAyNCwgQ0hJUF9BTk5fQ1RSTCAqLwotCTB4MDAwMCwgLyogMHgwMDI2LCBDSElQX0xJTlJFR19DVFJMICovCi0JMHgwMDAwLCAvKiAweDAwMjgsIENISVBfUkVGX0NUUkwgKi8KLQkweDAwMDAsIC8qIDB4MDAyQSwgQ0hJUF9NSUNfQ1RSTCAqLwotCTB4MDAwMCwgLyogMHgwMDJDLCBDSElQX0xJTkVfT1VUX0NUUkwgKi8KLQkweDA0MDQsIC8qIDB4MDAyRSwgQ0hJUF9MSU5FX09VVF9WT0wgKi8KLQkweDcwNjAsIC8qIDB4MDAzMCwgQ0hJUF9BTkFfUE9XRVIgKi8KLQkweDUwMDAsIC8qIDB4MDAzMiwgQ0hJUF9QTExfQ1RSTCAqLwotCTB4MDAwMCwgLyogMHgwMDM0LCBDSElQX0NMS19UT1BfQ1RSTCAqLwotCTB4MDAwMCwgLyogMHgwMDM2LCBDSElQX0FOQV9TVEFUVVMgKi8KLQkweDAwMDAsIC8qIDB4MDAzOCwgcmVzZXJ2ZWQgKi8KLQkweDAwMDAsIC8qIDB4MDAzQSwgQ0hJUF9BTkFfVEVTVDIgKi8KLQkweDAwMDAsIC8qIDB4MDAzQywgQ0hJUF9TSE9SVF9DVFJMICovCi0JMHgwMDAwLCAvKiByZXNlcnZlZCAqLwotfTsKLQotLyogZGVmYXVsdCB2YWx1ZSBvZiBkYXAgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3QgdTE2IHNndGw1MDAwX2RhcF9yZWdzW10gPSB7Ci0JMHgwMDAwLCAvKiAweDAxMDAsIERBUF9DT05UUk9MICovCi0JMHgwMDAwLCAvKiAweDAxMDIsIERBUF9QRVEgKi8KLQkweDAwNDAsIC8qIDB4MDEwNCwgREFQX0JBU1NfRU5IQU5DRSAqLwotCTB4MDUxZiwgLyogMHgwMTA2LCBEQVBfQkFTU19FTkhBTkNFX0NUUkwgKi8KLQkweDAwMDAsIC8qIDB4MDEwOCwgREFQX0FVRElPX0VRICovCi0JMHgwMDQwLCAvKiAweDAxMEEsIERBUF9TR1RMX1NVUlJPVU5EICovCi0JMHgwMDAwLCAvKiAweDAxMEMsIERBUF9GSUxURVJfQ09FRl9BQ0NFU1MgKi8KLQkweDAwMDAsIC8qIDB4MDEwRSwgREFQX0NPRUZfV1JfQjBfTVNCICovCi0JMHgwMDAwLCAvKiAweDAxMTAsIERBUF9DT0VGX1dSX0IwX0xTQiAqLwotCTB4MDAwMCwgLyogMHgwMTEyLCByZXNlcnZlZCAqLwotCTB4MDAwMCwgLyogMHgwMTE0LCByZXNlcnZlZCAqLwotCTB4MDAyZiwgLyogMHgwMTE2LCBEQVBfQVVESU9fRVFfQkFTU19CQU5EMCAqLwotCTB4MDAyZiwgLyogMHgwMTE4LCBEQVBfQVVESU9fRVFfQkFORDAgKi8KLQkweDAwMmYsIC8qIDB4MDExQSwgREFQX0FVRElPX0VRX0JBTkQyICovCi0JMHgwMDJmLCAvKiAweDAxMUMsIERBUF9BVURJT19FUV9CQU5EMyAqLwotCTB4MDAyZiwgLyogMHgwMTFFLCBEQVBfQVVESU9fRVFfVFJFQkxFX0JBTkQ0ICovCi0JMHg4MDAwLCAvKiAweDAxMjAsIERBUF9NQUlOX0NIQU4gKi8KLQkweDAwMDAsIC8qIDB4MDEyMiwgREFQX01JWF9DSEFOICovCi0JMHgwNTEwLCAvKiAweDAxMjQsIERBUF9BVkNfQ1RSTCAqLwotCTB4MTQ3MywgLyogMHgwMTI2LCBEQVBfQVZDX1RIUkVTSE9MRCAqLwotCTB4MDAyOCwgLyogMHgwMTI4LCBEQVBfQVZDX0FUVEFDSyAqLwotCTB4MDA1MCwgLyogMHgwMTJBLCBEQVBfQVZDX0RFQ0FZICovCi0JMHgwMDAwLCAvKiAweDAxMkMsIERBUF9DT0VGX1dSX0IxX01TQiAqLwotCTB4MDAwMCwgLyogMHgwMTJFLCBEQVBfQ09FRl9XUl9CMV9MU0IgKi8KLQkweDAwMDAsIC8qIDB4MDEzMCwgREFQX0NPRUZfV1JfQjJfTVNCICovCi0JMHgwMDAwLCAvKiAweDAxMzIsIERBUF9DT0VGX1dSX0IyX0xTQiAqLwotCTB4MDAwMCwgLyogMHgwMTM0LCBEQVBfQ09FRl9XUl9BMV9NU0IgKi8KLQkweDAwMDAsIC8qIDB4MDEzNiwgREFQX0NPRUZfV1JfQTFfTFNCICovCi0JMHgwMDAwLCAvKiAweDAxMzgsIERBUF9DT0VGX1dSX0EyX01TQiAqLwotCTB4MDAwMCwgLyogMHgwMTNBLCBEQVBfQ09FRl9XUl9BMl9MU0IgKi8KKy8qIGRlZmF1bHQgdmFsdWUgb2Ygc2d0bDUwMDAgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTE2IHNndGw1MDAwX3JlZ3NbU0dUTDUwMDBfTUFYX1JFR19PRkZTRVRdID0gIHsKKwlbU0dUTDUwMDBfQ0hJUF9DTEtfQ1RSTF0gPSAweDAwMDgsCisJW1NHVEw1MDAwX0NISVBfSTJTX0NUUkxdID0gMHgwMDEwLAorCVtTR1RMNTAwMF9DSElQX1NTU19DVFJMXSA9IDB4MDAwOCwKKwlbU0dUTDUwMDBfQ0hJUF9EQUNfVk9MXSA9IDB4M2MzYywKKwlbU0dUTDUwMDBfQ0hJUF9QQURfU1RSRU5HVEhdID0gMHgwMTVmLAorCVtTR1RMNTAwMF9DSElQX0FOQV9IUF9DVFJMXSA9IDB4MTgxOCwKKwlbU0dUTDUwMDBfQ0hJUF9BTkFfQ1RSTF0gPSAweDAxMTEsCisJW1NHVEw1MDAwX0NISVBfTElORV9PVVRfVk9MXSA9IDB4MDQwNCwKKwlbU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVJdID0gMHg3MDYwLAorCVtTR1RMNTAwMF9DSElQX1BMTF9DVFJMXSA9IDB4NTAwMCwKKwlbU0dUTDUwMDBfREFQX0JBU1NfRU5IQU5DRV0gPSAweDAwNDAsCisJW1NHVEw1MDAwX0RBUF9CQVNTX0VOSEFOQ0VfQ1RSTF0gPSAweDA1MWYsCisJW1NHVEw1MDAwX0RBUF9TVVJST1VORF0gPSAweDAwNDAsCisJW1NHVEw1MDAwX0RBUF9FUV9CQVNTX0JBTkQwXSA9IDB4MDAyZiwKKwlbU0dUTDUwMDBfREFQX0VRX0JBU1NfQkFORDFdID0gMHgwMDJmLAorCVtTR1RMNTAwMF9EQVBfRVFfQkFTU19CQU5EMl0gPSAweDAwMmYsCisJW1NHVEw1MDAwX0RBUF9FUV9CQVNTX0JBTkQzXSA9IDB4MDAyZiwKKwlbU0dUTDUwMDBfREFQX0VRX0JBU1NfQkFORDRdID0gMHgwMDJmLAorCVtTR1RMNTAwMF9EQVBfTUFJTl9DSEFOXSA9IDB4ODAwMCwKKwlbU0dUTDUwMDBfREFQX0FWQ19DVFJMXSA9IDB4MDUxMCwKKwlbU0dUTDUwMDBfREFQX0FWQ19USFJFU0hPTERdID0gMHgxNDczLAorCVtTR1RMNTAwMF9EQVBfQVZDX0FUVEFDS10gPSAweDAwMjgsCisJW1NHVEw1MDAwX0RBUF9BVkNfREVDQVldID0gMHgwMDUwLAogfTsKIAogLyogcmVndWxhdG9yIHN1cHBsaWVzIGZvciBzZ3RsNTAwMCwgVkRERCBpcyBhbiBvcHRpb25hbCBleHRlcm5hbCBzdXBwbHkgKi8KQEAgLTEwMjMsMTIgKzk4MSwxMCBAQAogc3RhdGljIGludCBzZ3RsNTAwMF9yZXN0b3JlX3JlZ3Moc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWludCBpOwotCWludCByZWd1bGFyX3JlZ3MgPSBTR1RMNTAwMF9DSElQX1NIT1JUX0NUUkwgPj4gMTsKKwl1MTYgcmVnOwogCiAJLyogcmVzdG9yZSByZWd1bGFyIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCByZWd1bGFyX3JlZ3M7IGkrKykgewotCQlpbnQgcmVnID0gaSA8PCAxOworCWZvciAocmVnID0gMDsgcmVnIDw9IFNHVEw1MDAwX0NISVBfU0hPUlRfQ1RSTDsgcmVnICs9IDIpIHsKIAogCQkvKiB0aGlzIHJlZ3MgZGVwZW5kcyBvbiB0aGUgb3RoZXJzICovCiAJCWlmIChyZWcgPT0gU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIgfHwKQEAgLTEwMzgsMzUgKzk5NCwzMSBAQAogCQkJcmVnID09IFNHVEw1MDAwX0NISVBfQ0xLX0NUUkwpCiAJCQljb250aW51ZTsKIAotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIGNhY2hlW2ldKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCBjYWNoZVtyZWddKTsKIAl9CiAKIAkvKiByZXN0b3JlIGRhcCByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSBTR1RMNTAwMF9EQVBfUkVHX09GRlNFVCA+PiAxOwotCQkJaSA8IFNHVEw1MDAwX01BWF9SRUdfT0ZGU0VUID4+IDE7IGkrKykgewotCQlpbnQgcmVnID0gaSA8PCAxOwotCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgY2FjaGVbaV0pOwotCX0KKwlmb3IgKHJlZyA9IFNHVEw1MDAwX0RBUF9SRUdfT0ZGU0VUOyByZWcgPCBTR1RMNTAwMF9NQVhfUkVHX09GRlNFVDsgcmVnICs9IDIpCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgY2FjaGVbcmVnXSk7CiAKIAkvKgogCSAqIHJlc3RvcmUgcG93ZXIgYW5kIG90aGVyIHJlZ3MgYWNjb3JkaW5nCiAJICogdG8gc2V0X3Bvd2VyKCkgYW5kIHNldF9jbG9jaygpCiAJICovCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9MSU5SRUdfQ1RSTCwKLQkJCWNhY2hlW1NHVEw1MDAwX0NISVBfTElOUkVHX0NUUkwgPj4gMV0pOworCQkJY2FjaGVbU0dUTDUwMDBfQ0hJUF9MSU5SRUdfQ1RSTF0pOwogCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCi0JCQljYWNoZVtTR1RMNTAwMF9DSElQX0FOQV9QT1dFUiA+PiAxXSk7CisJCQljYWNoZVtTR1RMNTAwMF9DSElQX0FOQV9QT1dFUl0pOwogCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9DTEtfQ1RSTCwKLQkJCWNhY2hlW1NHVEw1MDAwX0NISVBfQ0xLX0NUUkwgPj4gMV0pOworCQkJY2FjaGVbU0dUTDUwMDBfQ0hJUF9DTEtfQ1RSTF0pOwogCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9SRUZfQ1RSTCwKLQkJCWNhY2hlW1NHVEw1MDAwX0NISVBfUkVGX0NUUkwgPj4gMV0pOworCQkJY2FjaGVbU0dUTDUwMDBfQ0hJUF9SRUZfQ1RSTF0pOwogCiAJc25kX3NvY193cml0ZShjb2RlYywgU0dUTDUwMDBfQ0hJUF9MSU5FX09VVF9DVFJMLAotCQkJY2FjaGVbU0dUTDUwMDBfQ0hJUF9MSU5FX09VVF9DVFJMID4+IDFdKTsKKwkJCWNhY2hlW1NHVEw1MDAwX0NISVBfTElORV9PVVRfQ1RSTF0pOwogCXJldHVybiAwOwogfQogCkBAIC0xNDU0LDE2ICsxNDA2LDYgQEAKIAlpZiAoIXNndGw1MDAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qCi0JICogY29weSBEQVAgZGVmYXVsdCB2YWx1ZXMgdG8gZGVmYXVsdCB2YWx1ZSBhcnJheS4KLQkgKiBzZ3RsNTAwMCByZWdpc3RlciBzcGFjZSBoYXMgYSBiaWcgaG9sZSwgbWVyZ2UgaXQKLQkgKiBhdCBpbml0IHBoYXNlIG1ha2VzIGxpZmUgZWFzeS4KLQkgKiBGSVhNRTogc2hvdWxkIHdlIGRyb3AgJ2NvbnN0JyBvZiBzZ3RsNTAwMF9yZWdzPwotCSAqLwotCW1lbWNweSgodm9pZCAqKSgmc2d0bDUwMDBfcmVnc1swXSArIChTR1RMNTAwMF9EQVBfUkVHX09GRlNFVCA+PiAxKSksCi0JCQlzZ3RsNTAwMF9kYXBfcmVncywKLQkJCVNHVEw1MDAwX01BWF9SRUdfT0ZGU0VUIC0gU0dUTDUwMDBfREFQX1JFR19PRkZTRVQpOwotCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgc2d0bDUwMDApOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5jIGIvc291bmQvc29jL2NvZGVjcy9zdGEzMnguYwppbmRleCA0MDlkODlkLi5mYmQ3ZWI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhMzJ4LmMKQEAgLTg1Nyw2ICs4NTcsNyBAQAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LCAmc3RhMzJ4X2NvZGVjLCAmc3RhMzJ4X2RhaSwgMSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjICglZClcbiIsIHJldCk7CisJCWtmcmVlKHN0YTMyeCk7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwppbmRleCAzOGYzOGZkLi5kMDAwM2NjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKQEAgLTc3OCwxMSArNzc4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCB3bTg3NTBfc3BpX2lkc1tdID0geworCXsgIndtODc1MCIsIDAgfSwKKwl7ICJ3bTg5ODciLCAwIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCB3bTg3NTBfc3BpX2lkcyk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTBfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJ3bTg3NTAtY29kZWMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAorCS5pZF90YWJsZQk9IHdtODc1MF9zcGlfaWRzLAogCS5wcm9iZQkJPSB3bTg3NTBfc3BpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUwX3NwaV9yZW1vdmUpLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IDQzZTNkNzYuLjRhZDhlYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtMjA0Niw4ICsyMDQ2LDEzIEBACiAvKiBwb3dlciBkb3duIGNoaXAgKi8KIHN0YXRpYyBpbnQgd204OTAzX3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IHdtODkwM19wcml2ICp3bTg5MDMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwogCXdtODkwM19mcmVlX2dwaW8oY29kZWMpOwogCXdtODkwM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJaWYgKHdtODkwMy0+aXJxKQorCQlmcmVlX2lycSh3bTg5MDMtPmlycSwgY29kZWMpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjNiYWE5Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTk1ICswLDAgQEAKLS8qCi0gKiB3bTg5MTUuYyAtIFdNODkxNSBhdWRpbyBjb2RlYyBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgMjAxMSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9nY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC90bHYuaD4KLSNpbmNsdWRlIDx0cmFjZS9ldmVudHMvYXNvYy5oPgotCi0jaW5jbHVkZSA8c291bmQvd204OTE1Lmg+Ci0jaW5jbHVkZSAid204OTE1LmgiCi0KLSNkZWZpbmUgV004OTE1X0FJRlMgMgotCi0jZGVmaW5lIEhQT1VUMUwgMQotI2RlZmluZSBIUE9VVDFSIDIKLSNkZWZpbmUgSFBPVVQyTCA0Ci0jZGVmaW5lIEhQT1VUMlIgOAotCi0jZGVmaW5lIFdNODkxNV9OVU1fU1VQUExJRVMgNAotc3RhdGljIGNvbnN0IGNoYXIgKndtODkxNV9zdXBwbHlfbmFtZXNbV004OTE1X05VTV9TVVBQTElFU10gPSB7Ci0JIkRCVkREIiwKLQkiQVZERDEiLAotCSJBVkREMiIsCi0JIkNQVkREIiwKLX07Ci0KLXN0cnVjdCB3bTg5MTVfcHJpdiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCi0JaW50IGxkbzFlbmE7Ci0KLQlpbnQgc3lzY2xrOwotCWludCBzeXNjbGtfc3JjOwotCi0JaW50IGZsbF9zcmM7Ci0JaW50IGZsbF9mcmVmOwotCWludCBmbGxfZm91dDsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGZsbF9sb2NrOwotCi0JdTE2IGRjc19wZW5kaW5nOwotCXN0cnVjdCBjb21wbGV0aW9uIGRjc19kb25lOwotCi0JdTE2IGhwb3V0X2VuYTsKLQl1MTYgaHBvdXRfcGVuZGluZzsKLQotCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODkxNV9OVU1fU1VQUExJRVNdOwotCXN0cnVjdCBub3RpZmllcl9ibG9jayBkaXNhYmxlX25iW1dNODkxNV9OVU1fU1VQUExJRVNdOwotCi0Jc3RydWN0IHdtODkxNV9wZGF0YSBwZGF0YTsKLQotCWludCByeF9yYXRlW1dNODkxNV9BSUZTXTsKLQlpbnQgYmNsa19yYXRlW1dNODkxNV9BSUZTXTsKLQotCS8qIFBsYXRmb3JtIGRlcGVuZGFudCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KLQlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7Ci0JY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7Ci0JaW50IHJldHVuZV9tb2JpbGVfY2ZnWzJdOwotCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07Ci0KLQlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOwotCWJvb2wgZGV0ZWN0aW5nOwotCWJvb2wgamFja19taWM7Ci0Jd204OTE1X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiOwotCi0jaWZkZWYgQ09ORklHX0dQSU9MSUIKLQlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKLSNlbmRpZgotfTsKLQotLyogV2UgY2FuJ3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGJsb2NrIGZvciBtb3JlIHRoYW4gb25lIHN1cHBseSBhbmQKLSAqIHRoZXJlJ3Mgbm8gd2F5IEkgY2FuIHNlZSB0byBnZXQgZnJvbSBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsZXIKLSAqIGV4Y2VwdCBjb250YWluZXJfb2YoKS4KLSAqLwotI2RlZmluZSBXTTg5MTVfUkVHVUxBVE9SX0VWRU5UKG4pIFwKLXN0YXRpYyBpbnQgd204OTE1X3JlZ3VsYXRvcl9ldmVudF8jI24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgXAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQlcCi17IFwKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHdtODkxNV9wcml2LCBcCi0JCQkJCQkgIGRpc2FibGVfbmJbbl0pOyBcCi0JaWYgKGV2ZW50ICYgUkVHVUxBVE9SX0VWRU5UX0RJU0FCTEUpIHsgXAotCQl3bTg5MTUtPmNvZGVjLT5jYWNoZV9zeW5jID0gMTsgXAotCX0gXAotCXJldHVybiAwOyBcCi19Ci0KLVdNODkxNV9SRUdVTEFUT1JfRVZFTlQoMCkKLVdNODkxNV9SRUdVTEFUT1JfRVZFTlQoMSkKLVdNODkxNV9SRUdVTEFUT1JfRVZFTlQoMikKLVdNODkxNV9SRUdVTEFUT1JfRVZFTlQoMykKLQotc3RhdGljIGNvbnN0IHUxNiB3bTg5MTVfcmVnW1dNODkxNV9NQVhfUkVHSVNURVJdID0gewotCVtXTTg5MTVfU09GVFdBUkVfUkVTRVRdID0gMHg4OTE1LAotCVtXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF83XSA9IDB4MTAsCi0JW1dNODkxNV9EQUMxX0hQT1VUMV9WT0xVTUVdID0gMHg4OCwKLQlbV004OTE1X0RBQzJfSFBPVVQyX1ZPTFVNRV0gPSAweDg4LAotCVtXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRV0gPSAweDJjMCwKLQlbV004OTE1X0RBQzFfUklHSFRfVk9MVU1FXSA9IDB4MmMwLAotCVtXTTg5MTVfREFDMl9MRUZUX1ZPTFVNRV0gPSAweDJjMCwKLQlbV004OTE1X0RBQzJfUklHSFRfVk9MVU1FXSA9IDB4MmMwLAotCVtXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRV0gPSAweDgwLAotCVtXTTg5MTVfT1VUUFVUMV9SSUdIVF9WT0xVTUVdID0gMHg4MCwKLQlbV004OTE1X09VVFBVVDJfTEVGVF9WT0xVTUVdID0gMHg4MCwKLQlbV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FXSA9IDB4ODAsCi0JW1dNODkxNV9NSUNCSUFTXzFdID0gMHgzOSwKLQlbV004OTE1X01JQ0JJQVNfMl0gPSAweDM5LAotCVtXTTg5MTVfTERPXzFdID0gMHgzLAotCVtXTTg5MTVfTERPXzJdID0gMHgxMywKLQlbV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xXSA9IDB4NCwKLQlbV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMV0gPSAweDIwLAotCVtXTTg5MTVfTUlDX0RFVEVDVF8xXSA9IDB4NzYwMCwKLQlbV004OTE1X01JQ19ERVRFQ1RfMl0gPSAweGJmLAotCVtXTTg5MTVfQ0hBUkdFX1BVTVBfMV0gPSAweDFmMjUsCi0JW1dNODkxNV9DSEFSR0VfUFVNUF8yXSA9IDB4YWIxOSwKLQlbV004OTE1X0RDX1NFUlZPXzVdID0gMHgyYTJhLAotCVtXTTg5MTVfQ09OVFJPTF9JTlRFUkZBQ0VfMV0gPSAweDgwMDQsCi0JW1dNODkxNV9DTE9DS0lOR18xXSA9IDB4MTAsCi0JW1dNODkxNV9BSUZfUkFURV0gPSAweDgzLAotCVtXTTg5MTVfRkxMX0NPTlRST0xfNF0gPSAweDVkYzAsCi0JW1dNODkxNV9GTExfQ09OVFJPTF81XSA9IDB4Yzg0LAotCVtXTTg5MTVfRkxMX0VGU18yXSA9IDB4MiwKLQlbV004OTE1X0FJRjFfVFhfTFJDTEtfMV0gPSAweDgwLAotCVtXTTg5MTVfQUlGMV9UWF9MUkNMS18yXSA9IDB4OCwKLQlbV004OTE1X0FJRjFfUlhfTFJDTEtfMV0gPSAweDgwLAotCVtXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xXSA9IDB4MTgxOCwKLQlbV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT05dID0gMHgxODE4LAotCVtXTTg5MTVfQUlGMVRYX1RFU1RdID0gMHg3LAotCVtXTTg5MTVfQUlGMl9UWF9MUkNMS18xXSA9IDB4ODAsCi0JW1dNODkxNV9BSUYyX1RYX0xSQ0xLXzJdID0gMHg4LAotCVtXTTg5MTVfQUlGMl9SWF9MUkNMS18xXSA9IDB4ODAsCi0JW1dNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzFdID0gMHgxODE4LAotCVtXTTg5MTVfQUlGMlJYX0RBVEFfQ09ORklHVVJBVElPTl0gPSAweDE4MTgsCi0JW1dNODkxNV9BSUYyVFhfVEVTVF0gPSAweDEsCi0JW1dNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FXSA9IDB4YzAsCi0JW1dNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRV0gPSAweGMwLAotCVtXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAotCVtXTTg5MTVfRFNQMV9SWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKLQlbV004OTE1X0RTUDFfVFhfRklMVEVSU10gPSAweDIwMDAsCi0JW1dNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMV0gPSAweDIwMCwKLQlbV004OTE1X0RTUDFfUlhfRklMVEVSU18yXSA9IDB4MTAsCi0JW1dNODkxNV9EU1AxX0RSQ18xXSA9IDB4OTgsCi0JW1dNODkxNV9EU1AxX0RSQ18yXSA9IDB4ODQ1LAotCVtXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xXSA9IDB4NjMxOCwKLQlbV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMl0gPSAweDYzMDAsCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9BXSA9IDB4ZmNhLAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfQl0gPSAweDQwMCwKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX1BHXSA9IDB4ZDgsCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9BXSA9IDB4MWViNSwKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0JdID0gMHhmMTQ1LAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQ10gPSAweGI3NSwKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX1BHXSA9IDB4MWM1LAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQV0gPSAweDFjNTgsCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19CXSA9IDB4ZjM3MywKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0NdID0gMHhhNTQsCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19QR10gPSAweDU1OCwKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0FdID0gMHgxNjhlLAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQl0gPSAweGY4MjksCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9DXSA9IDB4N2FkLAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfUEddID0gMHgxMTAzLAotCVtXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfQV0gPSAweDU2NCwKLQlbV004OTE1X0RTUDFfUlhfRVFfQkFORF81X0JdID0gMHg1NTksCi0JW1dNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9QR10gPSAweDQwMDAsCi0JW1dNODkxNV9EU1AyX1RYX0xFRlRfVk9MVU1FXSA9IDB4YzAsCi0JW1dNODkxNV9EU1AyX1RYX1JJR0hUX1ZPTFVNRV0gPSAweGMwLAotCVtXTTg5MTVfRFNQMl9SWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAotCVtXTTg5MTVfRFNQMl9SWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKLQlbV004OTE1X0RTUDJfVFhfRklMVEVSU10gPSAweDIwMDAsCi0JW1dNODkxNV9EU1AyX1JYX0ZJTFRFUlNfMV0gPSAweDIwMCwKLQlbV004OTE1X0RTUDJfUlhfRklMVEVSU18yXSA9IDB4MTAsCi0JW1dNODkxNV9EU1AyX0RSQ18xXSA9IDB4OTgsCi0JW1dNODkxNV9EU1AyX0RSQ18yXSA9IDB4ODQ1LAotCVtXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xXSA9IDB4NjMxOCwKLQlbV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMl0gPSAweDYzMDAsCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9BXSA9IDB4ZmNhLAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQl0gPSAweDQwMCwKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX1BHXSA9IDB4ZDgsCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9BXSA9IDB4MWViNSwKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0JdID0gMHhmMTQ1LAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQ10gPSAweGI3NSwKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX1BHXSA9IDB4MWM1LAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQV0gPSAweDFjNTgsCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19CXSA9IDB4ZjM3MywKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0NdID0gMHhhNTQsCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19QR10gPSAweDU1OCwKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0FdID0gMHgxNjhlLAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQl0gPSAweGY4MjksCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9DXSA9IDB4N2FkLAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfUEddID0gMHgxMTAzLAotCVtXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQV0gPSAweDU2NCwKLQlbV004OTE1X0RTUDJfUlhfRVFfQkFORF81X0JdID0gMHg1NTksCi0JW1dNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9QR10gPSAweDQwMDAsCi0JW1dNODkxNV9PVkVSU0FNUExJTkddID0gMHhkLAotCVtXTTg5MTVfU0lERVRPTkVdID0gMHgxMDQwLAotCVtXTTg5MTVfR1BJT18xXSA9IDB4YTEwMSwKLQlbV004OTE1X0dQSU9fMl0gPSAweGExMDEsCi0JW1dNODkxNV9HUElPXzNdID0gMHhhMTAxLAotCVtXTTg5MTVfR1BJT180XSA9IDB4YTEwMSwKLQlbV004OTE1X0dQSU9fNV0gPSAweGExMDEsCi0JW1dNODkxNV9QVUxMX0NPTlRST0xfMl0gPSAweDE0MCwKLQlbV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLXSA9IDB4MWYsCi0JW1dNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTS10gPSAweDFlY2YsCi0JW1dNODkxNV9SSUdIVF9QRE1fU1BFQUtFUl0gPSAweDEsCi0JW1dNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFXSA9IDB4NjksCi0JW1dNODkxNV9QRE1fU1BFQUtFUl9WT0xVTUVdID0gMHg2NiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8wXSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xXSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zXSA9IDB4NiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80XSA9IDB4NDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNV0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNl0gPSAweGYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfN10gPSAweDYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfOF0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfOV0gPSAweDMsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTBdID0gMHgxMDQsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTJdID0gMHg2MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xM10gPSAweDExLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0XSA9IDB4NDAxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2XSA9IDB4NTAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTddID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4XSA9IDB4MTAwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwXSA9IDB4NTEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjFdID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyXSA9IDB4MTA0LAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzXSA9IDB4YSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNF0gPSAweDYwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1XSA9IDB4M2IsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjZdID0gMHg1MDIsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjddID0gMHgxMDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjhdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNDBdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNTJdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU2XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82MF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNjRdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY1XSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82N10gPSAweDYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNjhdID0gMHg0MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl82OV0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzBdID0gMHhmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzcxXSA9IDB4NiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl83Ml0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzNdID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc0XSA9IDB4MTA0LAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc2XSA9IDB4NjAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNzddID0gMHgxMSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl83OF0gPSAweDQwMSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84MF0gPSAweDUwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzgxXSA9IDB4MywKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84Ml0gPSAweDEwMCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl84NF0gPSAweDYwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg1XSA9IDB4M2IsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODZdID0gMHg1MDIsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODddID0gMHgxMDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfODhdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkyXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl85Nl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTAwXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDRdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwOF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTEyXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTZdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyMF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTI0XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjhdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyOV0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTMxXSA9IDB4NiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzJdID0gMHg0MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzNdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzNF0gPSAweGYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTM1XSA9IDB4NiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzZdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzN10gPSAweDMsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTM4XSA9IDB4MTA2LAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MF0gPSAweDYxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MV0gPSAweDExLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0Ml0gPSAweDQwMSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDRdID0gMHg1MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDVdID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0Nl0gPSAweDEwMiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDhdID0gMHg1MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDldID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1MF0gPSAweDEwNiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTFdID0gMHhhLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1Ml0gPSAweDYxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1M10gPSAweDNiLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1NF0gPSAweDUwMiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTVdID0gMHgxMDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTU2XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjBdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2NF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTY4XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzJdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3Nl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTgwXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODRdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4OF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTkyXSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTNdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5NV0gPSAweDYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTk2XSA9IDB4NDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMTk3XSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOThdID0gMHhmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5OV0gPSAweDYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjAwXSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDFdID0gMHgzLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwMl0gPSAweDEwNiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDRdID0gMHg2MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDVdID0gMHgxMSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDZdID0gMHg0MDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjA4XSA9IDB4NTAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjA5XSA9IDB4MywKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTBdID0gMHgxMDIsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjEyXSA9IDB4NjEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjEzXSA9IDB4M2IsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjE0XSA9IDB4NTAyLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxNV0gPSAweDEwMCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTZdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyMF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjI0XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjhdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzMl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjM2XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDBdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0NF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ4XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTJdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1Nl0gPSAweDYwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1OF0gPSAweDYwMSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjBdID0gMHg1MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjJdID0gMHgxMDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjY0XSA9IDB4MSwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjZdID0gMHgxMDQsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjY3XSA9IDB4MTAwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2OF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjcyXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzZdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4MF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjg0XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODhdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5Ml0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMjk2XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDBdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwNF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzA4XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTJdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxNl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzIwXSA9IDB4NjEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzIyXSA9IDB4NjAxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNF0gPSAweDUwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNl0gPSAweDEwMiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjhdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzMF0gPSAweDEwNiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzFdID0gMHgxMDAsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzMyXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzZdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0MF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ0XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDhdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1Ml0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzU2XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjBdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2NF0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzY4XSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzJdID0gMHgyZmZmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3Nl0gPSAweDJmZmYsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzgwXSA9IDB4MmZmZiwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODRdID0gMHg2MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODZdID0gMHg2MDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzg4XSA9IDB4NjEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfMzkwXSA9IDB4NjAxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5Ml0gPSAweDUwLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5NF0gPSAweDMwMCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTZdID0gMHgxLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5OF0gPSAweDMwNCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDBdID0gMHg0MCwKLQlbV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDJdID0gMHhmLAotCVtXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwNF0gPSAweDEsCi0JW1dNODkxNV9XUklURV9TRVFVRU5DRVJfNDA3XSA9IDB4MTAwLAotfTsKLQotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGlucGdhX3RsdiwgMCwgMTAwLCAwKTsKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0zNjAwLCAxNTAsIDApOwotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNzIwMCwgNzUsIDEpOwotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF9kaWdpdGFsX3RsdiwgLTEyMDAsIDE1MCwgMCk7Ci1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTkwMCwgNzUsIDApOwotc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNwa190bHYsIC05MDAsIDE1MCwgMCk7Ci1zdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX2hwZl90ZXh0W10gPSB7Ci0JIjIuOWtIeiIsICIxLjVrSHoiLCAiNzM1SHoiLCAiNDAzSHoiLCAiMTk2SHoiLCAiOThIeiIsICI0OUh6IgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZV9ocGYgPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfU0lERVRPTkUsIDcsIDYsIHNpZGV0b25lX2hwZl90ZXh0KTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmhwZl9tb2RlX3RleHRbXSA9IHsKLQkiSGlGaSIsICJDdXN0b20iLCAiVm9pY2UiCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDF0eF9ocGZfbW9kZSA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODkxNV9EU1AxX1RYX0ZJTFRFUlMsIDMsIDMsIGhwZl9tb2RlX3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJ0eF9ocGZfbW9kZSA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODkxNV9EU1AyX1RYX0ZJTFRFUlMsIDMsIDMsIGhwZl9tb2RlX3RleHQpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqaHBmX2N1dG9mZl90ZXh0W10gPSB7Ci0JIjUwSHoiLCAiNzVIeiIsICIxMDBIeiIsICIxNTBIeiIsICIyMDBIeiIsICIzMDBIeiIsICI0MDBIeiIKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHNwMXR4X2hwZl9jdXRvZmYgPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfRFNQMV9UWF9GSUxURVJTLCAwLCA3LCBocGZfY3V0b2ZmX3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJ0eF9ocGZfY3V0b2ZmID0KLQlTT0NfRU5VTV9TSU5HTEUoV004OTE1X0RTUDJfVFhfRklMVEVSUywgMCwgNywgaHBmX2N1dG9mZl90ZXh0KTsKLQotc3RhdGljIHZvaWQgd204OTE1X3NldF9yZXR1bmVfbW9iaWxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGJsb2NrKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0Jc3RydWN0IHdtODkxNV9wZGF0YSAqcGRhdGEgPSAmd204OTE1LT5wZGF0YTsKLQlpbnQgYmFzZSwgYmVzdCwgYmVzdF92YWwsIHNhdmUsIGksIGNmZywgaWZhY2U7Ci0KLQlpZiAoIXdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoYmxvY2spIHsKLQljYXNlIDA6Ci0JCWJhc2UgPSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xOwotCQlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84KSAmCi0JCSAgICBXTTg5MTVfRFNQMVJYX1NSQykKLQkJCWlmYWNlID0gMTsKLQkJZWxzZQotCQkJaWZhY2UgPSAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWJhc2UgPSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18yOwotCQlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84KSAmCi0JCSAgICBXTTg5MTVfRFNQMlJYX1NSQykKLQkJCWlmYWNlID0gMTsKLQkJZWxzZQotCQkJaWZhY2UgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JLyogRmluZCB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbmZpZ3VyYXRpb24KLQkgKiB3aXRoIHRoZSBuZWFyZXN0IHNhbXBsZSByYXRlLiAqLwotCWNmZyA9IHdtODkxNS0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOwotCWJlc3QgPSAwOwotCWJlc3RfdmFsID0gSU5UX01BWDsKLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgewotCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKLQkJCSAgIHdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0c1tjZmddKSA9PSAwICYmCi0JCSAgICBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCi0JCQktIHdtODkxNS0+cnhfcmF0ZVtpZmFjZV0pIDwgYmVzdF92YWwpIHsKLQkJCWJlc3QgPSBpOwotCQkJYmVzdF92YWwgPSBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCi0JCQkJICAgICAgIC0gd204OTE1LT5yeF9yYXRlW2lmYWNlXSk7Ci0JCX0KLQl9Ci0KLQlkZXZfZGJnKGNvZGVjLT5kZXYsICJSZVR1bmUgTW9iaWxlICVkICVzLyVkSHogZm9yICVkSHogc2FtcGxlIHJhdGVcbiIsCi0JCWJsb2NrLAotCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLm5hbWUsCi0JCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmF0ZSwKLQkJd204OTE1LT5yeF9yYXRlW2lmYWNlXSk7Ci0KLQkvKiBUaGUgRVEgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSByZWNvbmZpZ3VyaW5nIGl0LCByZW1lbWJlciB0aGUKLQkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIAotCSAqLwotCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIGJhc2UpOwotCXNhdmUgJj0gV004OTE1X0RTUDFSWF9FUV9FTkE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3MpOyBpKyspCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UgKyBpLCAweGZmZmYsCi0JCQkJICAgIHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmVnc1tpXSk7Ci0KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlLCBXTTg5MTVfRFNQMVJYX0VRX0VOQSwgc2F2ZSk7Ci19Ci0KLS8qIElja3kgYXMgaGVsbCBidXQgc2F2ZXMgY29kZSBkdXBsaWNhdGlvbiAqLwotc3RhdGljIGludCB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpZiAoc3RyY21wKG5hbWUsICJEU1AxIEVRIE1vZGUiKSA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAoc3RyY21wKG5hbWUsICJEU1AyIEVRIE1vZGUiKSA9PSAwKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCB3bTg5MTVfcHV0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXN0cnVjdCB3bTg5MTVfcGRhdGEgKnBkYXRhID0gJndtODkxNS0+cGRhdGE7Ci0JaW50IGJsb2NrID0gd204OTE1X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGtjb250cm9sLT5pZC5uYW1lKTsKLQlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQotCWlmIChibG9jayA8IDApCi0JCXJldHVybiBibG9jazsKLQotCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZncykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3bTg5MTUtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXSA9IHZhbHVlOwotCi0Jd204OTE1X3NldF9yZXR1bmVfbW9iaWxlKGNvZGVjLCBibG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg5MTVfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCWludCBibG9jayA9IHdtODkxNV9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhrY29udHJvbC0+aWQubmFtZSk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTE1LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja107Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkxNV9zbmRfY29udHJvbHNbXSA9IHsKLVNPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004OTE1X0xFRlRfTElORV9JTlBVVF9WT0xVTUUsCi0JCSBXTTg5MTVfUklHSFRfTElORV9JTlBVVF9WT0xVTUUsIDAsIDMxLCAwLCBpbnBnYV90bHYpLAotU09DX0RPVUJMRV9SKCJDYXB0dXJlIFpDIFN3aXRjaCIsIFdNODkxNV9MRUZUX0xJTkVfSU5QVVRfVk9MVU1FLAotCSAgICAgV004OTE1X1JJR0hUX0xJTkVfSU5QVVRfVk9MVU1FLCA1LCAxLCAwKSwKLQotU09DX0RPVUJMRV9UTFYoIkRBQzEgU2lkZXRvbmUgVm9sdW1lIiwgV004OTE1X0RBQzFfTUlYRVJfVk9MVU1FUywKLQkgICAgICAgMCwgNSwgMjQsIDAsIHNpZGV0b25lX3RsdiksCi1TT0NfRE9VQkxFX1RMVigiREFDMiBTaWRldG9uZSBWb2x1bWUiLCBXTTg5MTVfREFDMl9NSVhFUl9WT0xVTUVTLAotCSAgICAgICAwLCA1LCAyNCwgMCwgc2lkZXRvbmVfdGx2KSwKLVNPQ19TSU5HTEUoIlNpZGV0b25lIExQRiBTd2l0Y2giLCBXTTg5MTVfU0lERVRPTkUsIDEyLCAxLCAwKSwKLVNPQ19FTlVNKCJTaWRldG9uZSBIUEYgQ3V0LW9mZiIsIHNpZGV0b25lX2hwZiksCi1TT0NfU0lOR0xFKCJTaWRldG9uZSBIUEYgU3dpdGNoIiwgV004OTE1X1NJREVUT05FLCA2LCAxLCAwKSwKLQotU09DX0RPVUJMRV9SX1RMVigiRFNQMSBDYXB0dXJlIFZvbHVtZSIsIFdNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FLAotCQkgV004OTE1X0RTUDFfVFhfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAotU09DX0RPVUJMRV9SX1RMVigiRFNQMiBDYXB0dXJlIFZvbHVtZSIsIFdNODkxNV9EU1AyX1RYX0xFRlRfVk9MVU1FLAotCQkgV004OTE1X0RTUDJfVFhfUklHSFRfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAotCi1TT0NfU0lOR0xFKCJEU1AxIENhcHR1cmUgTm90Y2ggRmlsdGVyIFN3aXRjaCIsIFdNODkxNV9EU1AxX1RYX0ZJTFRFUlMsCi0JICAgMTMsIDEsIDApLAotU09DX0RPVUJMRSgiRFNQMSBDYXB0dXJlIEhQRiBTd2l0Y2giLCBXTTg5MTVfRFNQMV9UWF9GSUxURVJTLCAxMiwgMTEsIDEsIDApLAotU09DX0VOVU0oIkRTUDEgQ2FwdHVyZSBIUEYgTW9kZSIsIGRzcDF0eF9ocGZfbW9kZSksCi1TT0NfRU5VTSgiRFNQMSBDYXB0dXJlIEhQRiBDdXRvZmYiLCBkc3AxdHhfaHBmX2N1dG9mZiksCi0KLVNPQ19TSU5HTEUoIkRTUDIgQ2FwdHVyZSBOb3RjaCBGaWx0ZXIgU3dpdGNoIiwgV004OTE1X0RTUDJfVFhfRklMVEVSUywKLQkgICAxMywgMSwgMCksCi1TT0NfRE9VQkxFKCJEU1AyIENhcHR1cmUgSFBGIFN3aXRjaCIsIFdNODkxNV9EU1AyX1RYX0ZJTFRFUlMsIDEyLCAxMSwgMSwgMCksCi1TT0NfRU5VTSgiRFNQMiBDYXB0dXJlIEhQRiBNb2RlIiwgZHNwMnR4X2hwZl9tb2RlKSwKLVNPQ19FTlVNKCJEU1AyIENhcHR1cmUgSFBGIEN1dG9mZiIsIGRzcDJ0eF9ocGZfY3V0b2ZmKSwKLQotU09DX0RPVUJMRV9SX1RMVigiRFNQMSBQbGF5YmFjayBWb2x1bWUiLCBXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRSwKLQkJIFdNODkxNV9EU1AxX1JYX1JJR0hUX1ZPTFVNRSwgMSwgMTEyLCAwLCBkaWdpdGFsX3RsdiksCi1TT0NfU0lOR0xFKCJEU1AxIFBsYXliYWNrIFN3aXRjaCIsIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMSwgOSwgMSwgMSksCi0KLVNPQ19ET1VCTEVfUl9UTFYoIkRTUDIgUGxheWJhY2sgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfTEVGVF9WT0xVTUUsCi0JCSBXTTg5MTVfRFNQMl9SWF9SSUdIVF9WT0xVTUUsIDEsIDExMiwgMCwgZGlnaXRhbF90bHYpLAotU09DX1NJTkdMRSgiRFNQMiBQbGF5YmFjayBTd2l0Y2giLCBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzEsIDksIDEsIDEpLAotCi1TT0NfRE9VQkxFX1JfVExWKCJEQUMxIFZvbHVtZSIsIFdNODkxNV9EQUMxX0xFRlRfVk9MVU1FLAotCQkgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FLCAxLCAxMTIsIDAsIGRpZ2l0YWxfdGx2KSwKLVNPQ19ET1VCTEVfUigiREFDMSBTd2l0Y2giLCBXTTg5MTVfREFDMV9MRUZUX1ZPTFVNRSwKLQkgICAgIFdNODkxNV9EQUMxX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCi0KLVNPQ19ET1VCTEVfUl9UTFYoIkRBQzIgVm9sdW1lIiwgV004OTE1X0RBQzJfTEVGVF9WT0xVTUUsCi0JCSBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUUsIDEsIDExMiwgMCwgZGlnaXRhbF90bHYpLAotU09DX0RPVUJMRV9SKCJEQUMyIFN3aXRjaCIsIFdNODkxNV9EQUMyX0xFRlRfVk9MVU1FLAotCSAgICAgV004OTE1X0RBQzJfUklHSFRfVk9MVU1FLCA5LCAxLCAxKSwKLQotU09DX1NJTkdMRSgiU3BlYWtlciBIaWdoIFBlcmZvcm1hbmNlIFN3aXRjaCIsIFdNODkxNV9PVkVSU0FNUExJTkcsIDMsIDEsIDApLAotU09DX1NJTkdMRSgiRE1JQyBIaWdoIFBlcmZvcm1hbmNlIFN3aXRjaCIsIFdNODkxNV9PVkVSU0FNUExJTkcsIDIsIDEsIDApLAotU09DX1NJTkdMRSgiQURDIEhpZ2ggUGVyZm9ybWFuY2UgU3dpdGNoIiwgV004OTE1X09WRVJTQU1QTElORywgMSwgMSwgMCksCi1TT0NfU0lOR0xFKCJEQUMgSGlnaCBQZXJmb3JtYW5jZSBTd2l0Y2giLCBXTTg5MTVfT1ZFUlNBTVBMSU5HLCAwLCAxLCAwKSwKLQotU09DX1NJTkdMRSgiREFDIFNvZnQgTXV0ZSBTd2l0Y2giLCBXTTg5MTVfREFDX1NPRlRNVVRFLCAxLCAxLCAwKSwKLVNPQ19TSU5HTEUoIkRBQyBTbG93IFNvZnQgTXV0ZSBTd2l0Y2giLCBXTTg5MTVfREFDX1NPRlRNVVRFLCAwLCAxLCAwKSwKLQotU09DX0RPVUJMRV9UTFYoIkRpZ2l0YWwgT3V0cHV0IDEgVm9sdW1lIiwgV004OTE1X0RBQzFfSFBPVVQxX1ZPTFVNRSwgMCwgNCwKLQkgICAgICAgOCwgMCwgb3V0X2RpZ2l0YWxfdGx2KSwKLVNPQ19ET1VCTEVfVExWKCJEaWdpdGFsIE91dHB1dCAyIFZvbHVtZSIsIFdNODkxNV9EQUMyX0hQT1VUMl9WT0xVTUUsIDAsIDQsCi0JICAgICAgIDgsIDAsIG91dF9kaWdpdGFsX3RsdiksCi0KLVNPQ19ET1VCTEVfUl9UTFYoIk91dHB1dCAxIFZvbHVtZSIsIFdNODkxNV9PVVRQVVQxX0xFRlRfVk9MVU1FLAotCQkgV004OTE1X09VVFBVVDFfUklHSFRfVk9MVU1FLCAwLCAxMiwgMCwgb3V0X3RsdiksCi1TT0NfRE9VQkxFX1IoIk91dHB1dCAxIFpDIFN3aXRjaCIsICBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRSwKLQkgICAgIFdNODkxNV9PVVRQVVQxX1JJR0hUX1ZPTFVNRSwgNywgMSwgMCksCi0KLVNPQ19ET1VCTEVfUl9UTFYoIk91dHB1dCAyIFZvbHVtZSIsIFdNODkxNV9PVVRQVVQyX0xFRlRfVk9MVU1FLAotCQkgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FLCAwLCAxMiwgMCwgb3V0X3RsdiksCi1TT0NfRE9VQkxFX1IoIk91dHB1dCAyIFpDIFN3aXRjaCIsICBXTTg5MTVfT1VUUFVUMl9MRUZUX1ZPTFVNRSwKLQkgICAgIFdNODkxNV9PVVRQVVQyX1JJR0hUX1ZPTFVNRSwgNywgMSwgMCksCi0KLVNPQ19ET1VCTEVfVExWKCJTcGVha2VyIFZvbHVtZSIsIFdNODkxNV9QRE1fU1BFQUtFUl9WT0xVTUUsIDAsIDQsIDgsIDAsCi0JICAgICAgIHNwa190bHYpLAotU09DX0RPVUJMRV9SKCJTcGVha2VyIFN3aXRjaCIsIFdNODkxNV9MRUZUX1BETV9TUEVBS0VSLAotCSAgICAgV004OTE1X1JJR0hUX1BETV9TUEVBS0VSLCAzLCAxLCAxKSwKLVNPQ19ET1VCTEVfUigiU3BlYWtlciBaQyBTd2l0Y2giLCBXTTg5MTVfTEVGVF9QRE1fU1BFQUtFUiwKLQkgICAgIFdNODkxNV9SSUdIVF9QRE1fU1BFQUtFUiwgMiwgMSwgMCksCi0KLVNPQ19TSU5HTEUoIkRTUDEgRVEgU3dpdGNoIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgMCwgMSwgMCksCi1TT0NfU0lOR0xFKCJEU1AyIEVRIFN3aXRjaCIsIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzEsIDAsIDEsIDApLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkxNV9lcV9jb250cm9sc1tdID0gewotU09DX1NJTkdMRV9UTFYoIkRTUDEgRVEgQjEgVm9sdW1lIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAotCSAgICAgICBlcV90bHYpLAotU09DX1NJTkdMRV9UTFYoIkRTUDEgRVEgQjIgVm9sdW1lIiwgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCi0JICAgICAgIGVxX3RsdiksCi1TT0NfU0lOR0xFX1RMVigiRFNQMSBFUSBCMyBWb2x1bWUiLCBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xLCAxLCAzMSwgMCwKLQkgICAgICAgZXFfdGx2KSwKLVNPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEI0IFZvbHVtZSIsIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKLQkgICAgICAgZXFfdGx2KSwKLVNPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEI1IFZvbHVtZSIsIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAotCSAgICAgICBlcV90bHYpLAotCi1TT0NfU0lOR0xFX1RMVigiRFNQMiBFUSBCMSBWb2x1bWUiLCBXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCi0JICAgICAgIGVxX3RsdiksCi1TT0NfU0lOR0xFX1RMVigiRFNQMiBFUSBCMiBWb2x1bWUiLCBXTTg5MTVfRFNQMl9SWF9FUV9HQUlOU18xLCA2LCAzMSwgMCwKLQkgICAgICAgZXFfdGx2KSwKLVNPQ19TSU5HTEVfVExWKCJEU1AyIEVRIEIzIFZvbHVtZSIsIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAotCSAgICAgICBlcV90bHYpLAotU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjQgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAotCSAgICAgICBlcV90bHYpLAotU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjUgVm9sdW1lIiwgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCi0JICAgICAgIGVxX3RsdiksCi19OwotCi1zdGF0aWMgaW50IGNwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKLXsKLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCW1zbGVlcCg1KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJtdl9zaG9ydF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKLQkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCi17Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKLQotCS8qIFJlY29yZCB3aGljaCBvdXRwdXRzIHdlIGVuYWJsZWQgKi8KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKLQkJd204OTE1LT5ocG91dF9wZW5kaW5nICY9IH53LT5zaGlmdDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKLQkJd204OTE1LT5ocG91dF9wZW5kaW5nIHw9IHctPnNoaWZ0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhaXRfZm9yX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTE2IG1hc2spCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoY29kZWMtPmRldik7Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgaSwgcmV0OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDIwMDsKLQotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkxNV9EQ19TRVJWT18yLCBtYXNrKTsKLQotCS8qIFVzZSB0aGUgaW50ZXJydXB0IGlmIHBvc3NpYmxlICovCi0JZG8gewotCQlpZiAoaTJjLT5pcnEpIHsKLQkJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndtODkxNS0+ZGNzX2RvbmUsCi0JCQkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcygyMDApKTsKLQkJCWlmICh0aW1lb3V0ID09IDApCi0JCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiREMgc2Vydm8gdGltZWQgb3V0XG4iKTsKLQotCQl9IGVsc2UgewotCQkJbXNsZWVwKDEpOwotCQkJaWYgKC0taSkgewotCQkJCXRpbWVvdXQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfRENfU0VSVk9fMik7Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIHN0YXRlOiAleFxuIiwgcmV0KTsKLQl9IHdoaWxlIChyZXQgJiBtYXNrKTsKLQotCWlmICh0aW1lb3V0ID09IDApCi0JCWRldl9lcnIoY29kZWMtPmRldiwgIkRDIHNlcnZvIHRpbWVkIG91dCBmb3IgJXhcbiIsIG1hc2spOwotCWVsc2UKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gY29tcGxldGUgZm9yICV4XG4iLCBtYXNrKTsKLX0KLQotc3RhdGljIHZvaWQgd204OTE1X3NlcV9ub3RpZmllcihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCi0JCQkJZW51bSBzbmRfc29jX2RhcG1fdHlwZSBldmVudCwgaW50IHN1YnNlcSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb250YWluZXJfb2YoZGFwbSwKLQkJCQkJCSAgIHN0cnVjdCBzbmRfc29jX2NvZGVjLCBkYXBtKTsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXUxNiB2YWwsIG1hc2s7Ci0KLQkvKiBDb21wbGV0ZSBhbnkgcGVuZGluZyBEQyBzZXJ2byBzdGFydHMgKi8KLQlpZiAod204OTE1LT5kY3NfcGVuZGluZykgewotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTdGFydGluZyBEQyBzZXJ2byBmb3IgJXhcbiIsCi0JCQl3bTg5MTUtPmRjc19wZW5kaW5nKTsKLQotCQkvKiBUcmlnZ2VyIGEgc3RhcnR1cCBzZXF1ZW5jZSAqLwotCQl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYywgd204OTE1LT5kY3NfcGVuZGluZwotCQkJCSAgICAgICAgIDw8IFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQpOwotCi0JCXdtODkxNS0+ZGNzX3BlbmRpbmcgPSAwOwotCX0KLQotCWlmICh3bTg5MTUtPmhwb3V0X3BlbmRpbmcgIT0gd204OTE1LT5ocG91dF9lbmEpIHsKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQXBwbHlpbmcgUk1WX1NIT1JUcyAleC0+JXhcbiIsCi0JCQl3bTg5MTUtPmhwb3V0X2VuYSwgd204OTE1LT5ocG91dF9wZW5kaW5nKTsKLQotCQl2YWwgPSAwOwotCQltYXNrID0gMDsKLQkJaWYgKHdtODkxNS0+aHBvdXRfcGVuZGluZyAmIEhQT1VUMUwpIHsKLQkJCXZhbCB8PSBXTTg5MTVfSFBPVVQxTF9STVZfU0hPUlQ7Ci0JCQltYXNrIHw9IFdNODkxNV9IUE9VVDFMX1JNVl9TSE9SVDsKLQkJfSBlbHNlIHsKLQkJCW1hc2sgfD0gV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUIHwKLQkJCQlXTTg5MTVfSFBPVVQxTF9PVVRQIHwKLQkJCQlXTTg5MTVfSFBPVVQxTF9ETFk7Ci0JCX0KLQotCQlpZiAod204OTE1LT5ocG91dF9wZW5kaW5nICYgSFBPVVQxUikgewotCQkJdmFsIHw9IFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVDsKLQkJCW1hc2sgfD0gV004OTE1X0hQT1VUMVJfUk1WX1NIT1JUOwotCQl9IGVsc2UgewotCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQxUl9STVZfU0hPUlQgfAotCQkJCVdNODkxNV9IUE9VVDFSX09VVFAgfAotCQkJCVdNODkxNV9IUE9VVDFSX0RMWTsKLQkJfQotCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCBtYXNrLCB2YWwpOwotCi0JCXZhbCA9IDA7Ci0JCW1hc2sgPSAwOwotCQlpZiAod204OTE1LT5ocG91dF9wZW5kaW5nICYgSFBPVVQyTCkgewotCQkJdmFsIHw9IFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVDsKLQkJCW1hc2sgfD0gV004OTE1X0hQT1VUMkxfUk1WX1NIT1JUOwotCQl9IGVsc2UgewotCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQyTF9STVZfU0hPUlQgfAotCQkJCVdNODkxNV9IUE9VVDJMX09VVFAgfAotCQkJCVdNODkxNV9IUE9VVDJMX0RMWTsKLQkJfQotCi0JCWlmICh3bTg5MTUtPmhwb3V0X3BlbmRpbmcgJiBIUE9VVDJSKSB7Ci0JCQl2YWwgfD0gV004OTE1X0hQT1VUMlJfUk1WX1NIT1JUOwotCQkJbWFzayB8PSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlQ7Ci0JCX0gZWxzZSB7Ci0JCQltYXNrIHw9IFdNODkxNV9IUE9VVDJSX1JNVl9TSE9SVCB8Ci0JCQkJV004OTE1X0hQT1VUMlJfT1VUUCB8Ci0JCQkJV004OTE1X0hQT1VUMlJfRExZOwotCQl9Ci0KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FOQUxPR1VFX0hQXzIsIG1hc2ssIHZhbCk7Ci0KLQkJd204OTE1LT5ocG91dF9lbmEgPSB3bTg5MTUtPmhwb3V0X3BlbmRpbmc7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRjc19zdGFydChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKLQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCXdtODkxNS0+ZGNzX3BlbmRpbmcgfD0gMSA8PCB3LT5zaGlmdDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0gewotCSJJTjEiLCAiSU4yIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGVmdF9zaWRldG9uZV9lbnVtID0KLQlTT0NfRU5VTV9TSU5HTEUoV004OTE1X1NJREVUT05FLCAwLCAyLCBzaWRldG9uZV90ZXh0KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxlZnRfc2lkZXRvbmUgPQotCVNPQ19EQVBNX0VOVU0oIkxlZnQgU2lkZXRvbmUiLCBsZWZ0X3NpZGV0b25lX2VudW0pOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHJpZ2h0X3NpZGV0b25lX2VudW0gPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfU0lERVRPTkUsIDEsIDIsIHNpZGV0b25lX3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmlnaHRfc2lkZXRvbmUgPQotCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFNpZGV0b25lIiwgcmlnaHRfc2lkZXRvbmVfZW51bSk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzcGtfdGV4dFtdID0gewotCSJEQUMxTCIsICJEQUMxUiIsICJEQUMyTCIsICJEQUMyUiIKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc3BrbF9lbnVtID0KLQlTT0NfRU5VTV9TSU5HTEUoV004OTE1X0xFRlRfUERNX1NQRUFLRVIsIDAsIDQsIHNwa190ZXh0KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwa2xfbXV4ID0KLQlTT0NfREFQTV9FTlVNKCJTUEtMIiwgc3BrbF9lbnVtKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzcGtyX2VudW0gPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUklHSFRfUERNX1NQRUFLRVIsIDAsIDQsIHNwa190ZXh0KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNwa3JfbXV4ID0KLQlTT0NfREFQTV9FTlVNKCJTUEtSIiwgc3Brcl9lbnVtKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRzcDFyeF90ZXh0W10gPSB7Ci0JIkFJRjEiLCAiQUlGMiIKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHNwMXJ4X2VudW0gPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84LCAwLCAyLCBkc3AxcnhfdGV4dCk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AxcnggPQotCVNPQ19EQVBNX0VOVU0oIkRTUDFSWCIsIGRzcDFyeF9lbnVtKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRzcDJyeF90ZXh0W10gPSB7Ci0JICJBSUYyIiwgIkFJRjEiCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDJyeF9lbnVtID0KLQlTT0NfRU5VTV9TSU5HTEUoV004OTE1X1BPV0VSX01BTkFHRU1FTlRfOCwgNCwgMiwgZHNwMnJ4X3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMnJ4ID0KLQlTT0NfREFQTV9FTlVNKCJEU1AyUlgiLCBkc3AycnhfZW51bSk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICphaWYydHhfdGV4dFtdID0gewotCSJEU1AyIiwgIkRTUDEiLCAiQUlGMSIKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmMnR4X2VudW0gPQotCVNPQ19FTlVNX1NJTkdMRShXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF84LCA2LCAzLCBhaWYydHhfdGV4dCk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYydHggPQotCVNPQ19EQVBNX0VOVU0oIkFJRjJUWCIsIGFpZjJ0eF9lbnVtKTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmlubXV4X3RleHRbXSA9IHsKLQkiQURDIiwgIkRNSUMxIiwgIkRNSUMyIgotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBpbjFfZW51bSA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDAsIDMsIGlubXV4X3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4xX211eCA9Ci0JU09DX0RBUE1fRU5VTSgiSU4xIE11eCIsIGluMV9lbnVtKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBpbjJfZW51bSA9Ci0JU09DX0VOVU1fU0lOR0xFKFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDQsIDMsIGlubXV4X3RleHQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4yX211eCA9Ci0JU09DX0RBUE1fRU5VTSgiSU4yIE11eCIsIGluMl9lbnVtKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzJyX21peFtdID0gewotU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAotCQk1LCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAotCQk0LCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiRFNQMiBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLCAxLCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiRFNQMSBTd2l0Y2giLCBXTTg5MTVfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLCAwLCAxLCAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMybF9taXhbXSA9IHsKLVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAotCQk1LCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5MTVfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCi0JCTQsIDEsIDApLAotU09DX0RBUE1fU0lOR0xFKCJEU1AyIFN3aXRjaCIsIFdNODkxNV9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywgMSwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkRTUDEgU3dpdGNoIiwgV004OTE1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLCAwLCAxLCAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMxcl9taXhbXSA9IHsKLVNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKLQkJNSwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKLQkJNCwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkRTUDIgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywgMSwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkRTUDEgU3dpdGNoIiwgV004OTE1X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMWxfbWl4W10gPSB7Ci1TT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODkxNV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKLQkJNSwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTE1X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAotCQk0LCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiRFNQMiBTd2l0Y2giLCBXTTg5MTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsIDEsIDEsIDApLAotU09DX0RBUE1fU0lOR0xFKCJEU1AxIFN3aXRjaCIsIFdNODkxNV9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMXR4bFtdID0gewotU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTE1X0RTUDFfVFhfTEVGVF9NSVhFUl9ST1VUSU5HLAotCQkxLCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODkxNV9EU1AxX1RYX0xFRlRfTUlYRVJfUk9VVElORywKLQkJMCwgMSwgMCksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMXR4cltdID0gewotU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTE1X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORywKLQkJMSwgMSwgMCksCi1TT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg5MTVfRFNQMV9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HLAotCQkwLCAxLCAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AydHhsW10gPSB7Ci1TT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBXTTg5MTVfRFNQMl9UWF9MRUZUX01JWEVSX1JPVVRJTkcsCi0JCTEsIDEsIDApLAotU09DX0RBUE1fU0lOR0xFKCJEQUMgU3dpdGNoIiwgV004OTE1X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HLAotCQkwLCAxLCAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkc3AydHhyW10gPSB7Ci1TT0NfREFQTV9TSU5HTEUoIklOMSBTd2l0Y2giLCBXTTg5MTVfRFNQMl9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HLAotCQkxLCAxLCAwKSwKLVNPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODkxNV9EU1AyX1RYX1JJR0hUX01JWEVSX1JPVVRJTkcsCi0JCTAsIDEsIDApLAotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTE1X2RhcG1fd2lkZ2V0c1tdID0gewotU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFMTiIpLAotU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFMUCIpLAotU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSTiIpLAotU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSUCIpLAotCi1TTkRfU09DX0RBUE1fSU5QVVQoIklOMkxOIiksCi1TTkRfU09DX0RBUE1fSU5QVVQoIklOMkxQIiksCi1TTkRfU09DX0RBUE1fSU5QVVQoIklOMlJOIiksCi1TTkRfU09DX0RBUE1fSU5QVVQoIklOMlJQIiksCi0KLVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKLVNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKLQotU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJTWVNDTEsiLCAxLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJTWVNEU1BDTEsiLCAyLCBXTTg5MTVfQ0xPQ0tJTkdfMSwgMSwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fU1VQUExZX1MoIkFJRkNMSyIsIDIsIFdNODkxNV9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9TVVBQTFlfUygiQ2hhcmdlIFB1bXAiLCAyLCBXTTg5MTVfQ0hBUkdFX1BVTVBfMSwgMTUsIDAsIGNwX2V2ZW50LAotCQkgICAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAotCi1TTkRfU09DX0RBUE1fU1VQUExZKCJMRE8yIiwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQjIiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8xLCA5LCAwKSwKLVNORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCMSIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDgsIDApLAotCi1TTkRfU09DX0RBUE1fUEdBKCJJTjFMIFBHQSIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzIsIDUsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQSgiSU4xUiBQR0EiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA0LCAwLCBOVUxMLCAwKSwKLQotU05EX1NPQ19EQVBNX01VWCgiSU4xTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZpbjFfbXV4KSwKLVNORF9TT0NfREFQTV9NVVgoIklOMVIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaW4xX211eCksCi1TTkRfU09DX0RBUE1fTVVYKCJJTjJMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmluMl9tdXgpLAotU05EX1NPQ19EQVBNX01VWCgiSU4yUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZpbjJfbXV4KSwKLQotU05EX1NPQ19EQVBNX1BHQSgiSU4xTCIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDIsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQSgiSU4xUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDMsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQSgiSU4yTCIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDYsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQSgiSU4yUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDcsIDAsIE5VTEwsIDApLAotCi1TTkRfU09DX0RBUE1fU1VQUExZKCJETUlDMiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzcsIDksIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1JQzEiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF83LCA4LCAwLCBOVUxMLCAwKSwKLQotU05EX1NPQ19EQVBNX0FEQygiRE1JQzJMIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgNSwgMCksCi1TTkRfU09DX0RBUE1fQURDKCJETUlDMlIiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCA0LCAwKSwKLVNORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDMsIDApLAotU05EX1NPQ19EQVBNX0FEQygiRE1JQzFSIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgMiwgMCksCi0KLVNORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKLVNORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKLQotU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxlZnRfc2lkZXRvbmUpLAotU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZyaWdodF9zaWRldG9uZSksCi0KLVNORF9TT0NfREFQTV9BSUZfSU4oIkRTUDJSWEwiLCBOVUxMLCAwLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zLCAxMSwgMCksCi1TTkRfU09DX0RBUE1fQUlGX0lOKCJEU1AyUlhSIiwgTlVMTCwgMSwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMywgMTAsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYTCIsIE5VTEwsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYUiIsIE5VTEwsIDEsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDApLAotCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWEwiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCwKLQkJICAgZHNwMnR4bCwgQVJSQVlfU0laRShkc3AydHhsKSksCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWFIiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxMCwgMCwKLQkJICAgZHNwMnR4ciwgQVJSQVlfU0laRShkc3AydHhyKSksCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRTUDFUWEwiLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwLAotCQkgICBkc3AxdHhsLCBBUlJBWV9TSVpFKGRzcDF0eGwpKSwKLVNORF9TT0NfREFQTV9NSVhFUigiRFNQMVRYUiIsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDAsCi0JCSAgIGRzcDF0eHIsIEFSUkFZX1NJWkUoZHNwMXR4cikpLAotCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkgICBkYWMybF9taXgsIEFSUkFZX1NJWkUoZGFjMmxfbWl4KSksCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkgICBkYWMycl9taXgsIEFSUkFZX1NJWkUoZGFjMnJfbWl4KSksCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkgICBkYWMxbF9taXgsIEFSUkFZX1NJWkUoZGFjMWxfbWl4KSksCi1TTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAotCQkgICBkYWMxcl9taXgsIEFSUkFZX1NJWkUoZGFjMXJfbWl4KSksCi0KLVNORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCi1TTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAotU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKLVNORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCi0KLVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDEiLCAiQUlGMiBQbGF5YmFjayIsIDEsCi0JCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDAiLCAiQUlGMiBQbGF5YmFjayIsIDIsCi0JCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKLQotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMlRYMSIsICJBSUYyIENhcHR1cmUiLCAxLAotCQkgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgOSwgMCksCi1TTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyVFgwIiwgIkFJRjIgQ2FwdHVyZSIsIDIsCi0JCSAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCA4LCAwKSwKLQotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNSIsICJBSUYxIFBsYXliYWNrIiwgNSwKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDUsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNCIsICJBSUYxIFBsYXliYWNrIiwgNCwKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDQsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMyIsICJBSUYxIFBsYXliYWNrIiwgMywKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDMsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMiIsICJBSUYxIFBsYXliYWNrIiwgMiwKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDIsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMSIsICJBSUYxIFBsYXliYWNrIiwgMSwKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDApLAotU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMCIsICJBSUYxIFBsYXliYWNrIiwgMCwKLQkJICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDApLAotCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYNSIsICJBSUYxIENhcHR1cmUiLCA1LAotCQkgICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzYsIDUsIDApLAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDQiLCAiQUlGMSBDYXB0dXJlIiwgNCwKLQkJICAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCA0LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgzIiwgIkFJRjEgQ2FwdHVyZSIsIDMsCi0JCSAgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgMCksCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYMiIsICJBSUYxIENhcHR1cmUiLCAyLAotCQkgICAgIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDEiLCAiQUlGMSBDYXB0dXJlIiwgMSwKLQkJICAgICBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAwKSwKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgwIiwgIkFJRjEgQ2FwdHVyZSIsIDAsCi0JCSAgICAgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMCksCi0KLS8qIFdlIHJvdXRlIGFzIHN0ZXJlbyBwYWlycyBzbyBkZWZpbmUgc29tZSBkdW1teSB3aWRnZXRzIHRvIHNxdWFzaAotICogdGhpbmdzIGRvd24gZm9yIG5vdy4gIFJYQSA9IDAsMSwgUlhCID0gMiwzIGFuZCBzbyBvbiAqLwotU05EX1NPQ19EQVBNX1BHQSgiQUlGMVJYQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBKCJBSUYxUlhCIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0EoIkFJRjFSWEMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQSgiQUlGMlJYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0EoIkRTUDJUWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCi0KLVNORF9TT0NfREFQTV9NVVgoIkRTUDFSWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRzcDFyeCksCi1TTkRfU09DX0RBUE1fTVVYKCJEU1AyUlgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkc3AycngpLAotU05EX1NPQ19EQVBNX01VWCgiQUlGMlRYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMnR4KSwKLQotU05EX1NPQ19EQVBNX01VWCgiU1BLTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNwa2xfbXV4KSwKLVNORF9TT0NfREFQTV9NVVgoIlNQS1IiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzcGtyX211eCksCi1TTkRfU09DX0RBUE1fUEdBKCJTUEtMIFBHQSIsIFdNODkxNV9MRUZUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0EoIlNQS1IgUEdBIiwgV004OTE1X1JJR0hUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKLQotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMIFBHQSIsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDcsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX0RMWSIsIDEsIFdNODkxNV9BTkFMT0dVRV9IUF8yLCA1LCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyTF9EQ1MiLCAyLCBXTTg5MTVfRENfU0VSVk9fMSwgMiwgMCwgZGNzX3N0YXJ0LAotCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX09VVFAiLCAzLCBXTTg5MTVfQU5BTE9HVUVfSFBfMiwgNiwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMkxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDJMLCAwLAotCQkgICBybXZfc2hvcnRfZXZlbnQsCi0JCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAotCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlIgUEdBIiwgMCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwgNiwgMCxOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9ETFkiLCAxLCBXTTg5MTVfQU5BTE9HVUVfSFBfMiwgMSwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlJfRENTIiwgMiwgV004OTE1X0RDX1NFUlZPXzEsIDMsIDAsIGRjc19zdGFydCwKLQkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9PVVRQIiwgMywgV004OTE1X0FOQUxPR1VFX0hQXzIsIDIsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJSX1JNVl9TSE9SVCIsIDMsIFNORF9TT0NfTk9QTSwgSFBPVVQyUiwgMCwKLQkJICAgcm12X3Nob3J0X2V2ZW50LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKLQotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMIFBHQSIsIDAsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsIDUsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX0RMWSIsIDEsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCA1LCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxTF9EQ1MiLCAyLCBXTTg5MTVfRENfU0VSVk9fMSwgMCwgMCwgZGNzX3N0YXJ0LAotCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX09VVFAiLCAzLCBXTTg5MTVfQU5BTE9HVUVfSFBfMSwgNiwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMUxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDFMLCAwLAotCQkgICBybXZfc2hvcnRfZXZlbnQsCi0JCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAotCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVIgUEdBIiwgMCwgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwgNCwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfRExZIiwgMSwgV004OTE1X0FOQUxPR1VFX0hQXzEsIDEsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFSX0RDUyIsIDIsIFdNODkxNV9EQ19TRVJWT18xLCAxLCAwLCBkY3Nfc3RhcnQsCi0JCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfT1VUUCIsIDMsIFdNODkxNV9BTkFMT0dVRV9IUF8xLCAyLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxUl9STVZfU0hPUlQiLCAzLCBTTkRfU09DX05PUE0sIEhQT1VUMVIsIDAsCi0JCSAgIHJtdl9zaG9ydF9ldmVudCwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCi0KLVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMUwiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMVIiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMkwiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMlIiKSwKLVNORF9TT0NfREFQTV9PVVRQVVQoIlNQS0RBVCIpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTE1X2RhcG1fcm91dGVzW10gPSB7Ci0JeyAiQUlGQ0xLIiwgTlVMTCwgIlNZU0NMSyIgfSwKLQl7ICJTWVNEU1BDTEsiLCBOVUxMLCAiU1lTQ0xLIiB9LAotCXsgIkNoYXJnZSBQdW1wIiwgTlVMTCwgIlNZU0NMSyIgfSwKLQotCXsgIk1JQ0IxIiwgTlVMTCwgIkxETzIiIH0sCi0JeyAiTUlDQjIiLCBOVUxMLCAiTERPMiIgfSwKLQotCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxOIiB9LAotCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxQIiB9LAotCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxOIiB9LAotCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxQIiB9LAotCi0JeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUk4iIH0sCi0JeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUlAiIH0sCi0JeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUk4iIH0sCi0JeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUlAiIH0sCi0KLQl7ICJBRENMIiwgTlVMTCwgIklOMUwgUEdBIiB9LAotCi0JeyAiQURDUiIsIE5VTEwsICJJTjFSIFBHQSIgfSwKLQotCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKLQl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCi0JeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAotCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKLQotCXsgIkRNSUMyTCIsIE5VTEwsICJETUlDMiIgfSwKLQl7ICJETUlDMlIiLCBOVUxMLCAiRE1JQzIiIH0sCi0JeyAiRE1JQzFMIiwgTlVMTCwgIkRNSUMxIiB9LAotCXsgIkRNSUMxUiIsIE5VTEwsICJETUlDMSIgfSwKLQotCXsgIklOMUwgTXV4IiwgIkFEQyIsICJBRENMIiB9LAotCXsgIklOMUwgTXV4IiwgIkRNSUMxIiwgIkRNSUMxTCIgfSwKLQl7ICJJTjFMIE11eCIsICJETUlDMiIsICJETUlDMkwiIH0sCi0KLQl7ICJJTjFSIE11eCIsICJBREMiLCAiQURDUiIgfSwKLQl7ICJJTjFSIE11eCIsICJETUlDMSIsICJETUlDMVIiIH0sCi0JeyAiSU4xUiBNdXgiLCAiRE1JQzIiLCAiRE1JQzJSIiB9LAotCi0JeyAiSU4yTCBNdXgiLCAiQURDIiwgIkFEQ0wiIH0sCi0JeyAiSU4yTCBNdXgiLCAiRE1JQzEiLCAiRE1JQzFMIiB9LAotCXsgIklOMkwgTXV4IiwgIkRNSUMyIiwgIkRNSUMyTCIgfSwKLQotCXsgIklOMlIgTXV4IiwgIkFEQyIsICJBRENSIiB9LAotCXsgIklOMlIgTXV4IiwgIkRNSUMxIiwgIkRNSUMxUiIgfSwKLQl7ICJJTjJSIE11eCIsICJETUlDMiIsICJETUlDMlIiIH0sCi0KLQl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMSIsICJJTjFMIE11eCIgfSwKLQl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMiIsICJJTjJMIE11eCIgfSwKLQotCXsgIlJpZ2h0IFNpZGV0b25lIiwgIklOMSIsICJJTjFSIE11eCIgfSwKLQl7ICJSaWdodCBTaWRldG9uZSIsICJJTjIiLCAiSU4yUiBNdXgiIH0sCi0KLQl7ICJEU1AxVFhMIiwgIklOMSBTd2l0Y2giLCAiSU4xTCBNdXgiIH0sCi0JeyAiRFNQMVRYUiIsICJJTjEgU3dpdGNoIiwgIklOMVIgTXV4IiB9LAotCi0JeyAiRFNQMlRYTCIsICJJTjEgU3dpdGNoIiwgIklOMkwgTXV4IiB9LAotCXsgIkRTUDJUWFIiLCAiSU4xIFN3aXRjaCIsICJJTjJSIE11eCIgfSwKLQotCXsgIkFJRjFUWDAiLCBOVUxMLCAiRFNQMVRYTCIgfSwKLQl7ICJBSUYxVFgxIiwgTlVMTCwgIkRTUDFUWFIiIH0sCi0JeyAiQUlGMVRYMiIsIE5VTEwsICJEU1AyVFhMIiB9LAotCXsgIkFJRjFUWDMiLCBOVUxMLCAiRFNQMlRYUiIgfSwKLQl7ICJBSUYxVFg0IiwgTlVMTCwgIkFJRjJSWDAiIH0sCi0JeyAiQUlGMVRYNSIsIE5VTEwsICJBSUYyUlgxIiB9LAotCi0JeyAiQUlGMVJYMCIsIE5VTEwsICJBSUZDTEsiIH0sCi0JeyAiQUlGMVJYMSIsIE5VTEwsICJBSUZDTEsiIH0sCi0JeyAiQUlGMVJYMiIsIE5VTEwsICJBSUZDTEsiIH0sCi0JeyAiQUlGMVJYMyIsIE5VTEwsICJBSUZDTEsiIH0sCi0JeyAiQUlGMVJYNCIsIE5VTEwsICJBSUZDTEsiIH0sCi0JeyAiQUlGMVJYNSIsIE5VTEwsICJBSUZDTEsiIH0sCi0KLQl7ICJBSUYyUlgwIiwgTlVMTCwgIkFJRkNMSyIgfSwKLQl7ICJBSUYyUlgxIiwgTlVMTCwgIkFJRkNMSyIgfSwKLQotCXsgIkRTUDFSWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDFSWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDJSWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDJSWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDFUWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDFUWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDJUWEwiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCXsgIkRTUDJUWFIiLCBOVUxMLCAiU1lTRFNQQ0xLIiB9LAotCi0JeyAiQUlGMVJYQSIsIE5VTEwsICJBSUYxUlgwIiB9LAotCXsgIkFJRjFSWEEiLCBOVUxMLCAiQUlGMVJYMSIgfSwKLQl7ICJBSUYxUlhCIiwgTlVMTCwgIkFJRjFSWDIiIH0sCi0JeyAiQUlGMVJYQiIsIE5VTEwsICJBSUYxUlgzIiB9LAotCXsgIkFJRjFSWEMiLCBOVUxMLCAiQUlGMVJYNCIgfSwKLQl7ICJBSUYxUlhDIiwgTlVMTCwgIkFJRjFSWDUiIH0sCi0KLQl7ICJBSUYyUlgiLCBOVUxMLCAiQUlGMlJYMCIgfSwKLQl7ICJBSUYyUlgiLCBOVUxMLCAiQUlGMlJYMSIgfSwKLQotCXsgIkFJRjJUWCIsICJEU1AyIiwgIkRTUDJUWCIgfSwKLQl7ICJBSUYyVFgiLCAiRFNQMSIsICJEU1AxUlgiIH0sCi0JeyAiQUlGMlRYIiwgIkFJRjEiLCAiQUlGMVJYQyIgfSwKLQotCXsgIkRTUDFSWEwiLCBOVUxMLCAiRFNQMVJYIiB9LAotCXsgIkRTUDFSWFIiLCBOVUxMLCAiRFNQMVJYIiB9LAotCXsgIkRTUDJSWEwiLCBOVUxMLCAiRFNQMlJYIiB9LAotCXsgIkRTUDJSWFIiLCBOVUxMLCAiRFNQMlJYIiB9LAotCi0JeyAiRFNQMlRYIiwgTlVMTCwgIkRTUDJUWEwiIH0sCi0JeyAiRFNQMlRYIiwgTlVMTCwgIkRTUDJUWFIiIH0sCi0KLQl7ICJEU1AxUlgiLCAiQUlGMSIsICJBSUYxUlhBIiB9LAotCXsgIkRTUDFSWCIsICJBSUYyIiwgIkFJRjJSWCIgfSwKLQotCXsgIkRTUDJSWCIsICJBSUYxIiwgIkFJRjFSWEIiIH0sCi0JeyAiRFNQMlJYIiwgIkFJRjIiLCAiQUlGMlJYIiB9LAotCi0JeyAiREFDMkwgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYTCIgfSwKLQl7ICJEQUMyTCBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhMIiB9LAotCXsgIkRBQzJMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKLQl7ICJEQUMyTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAotCi0JeyAiREFDMlIgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYUiIgfSwKLQl7ICJEQUMyUiBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhSIiB9LAotCXsgIkRBQzJSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKLQl7ICJEQUMyUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAotCi0JeyAiREFDMUwgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYTCIgfSwKLQl7ICJEQUMxTCBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhMIiB9LAotCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKLQl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAotCi0JeyAiREFDMVIgTWl4ZXIiLCAiRFNQMiBTd2l0Y2giLCAiRFNQMlJYUiIgfSwKLQl7ICJEQUMxUiBNaXhlciIsICJEU1AxIFN3aXRjaCIsICJEU1AxUlhSIiB9LAotCXsgIkRBQzFSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKLQl7ICJEQUMxUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAotCi0JeyAiREFDMUwiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCi0JeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCi0JeyAiREFDMkwiLCBOVUxMLCAiREFDMkwgTWl4ZXIiIH0sCi0JeyAiREFDMlIiLCBOVUxMLCAiREFDMlIgTWl4ZXIiIH0sCi0KLQl7ICJIUE9VVDJMIFBHQSIsIE5VTEwsICJDaGFyZ2UgUHVtcCIgfSwKLQl7ICJIUE9VVDJMIFBHQSIsIE5VTEwsICJEQUMyTCIgfSwKLQl7ICJIUE9VVDJMX0RMWSIsIE5VTEwsICJIUE9VVDJMIFBHQSIgfSwKLQl7ICJIUE9VVDJMX0RDUyIsIE5VTEwsICJIUE9VVDJMX0RMWSIgfSwKLQl7ICJIUE9VVDJMX09VVFAiLCBOVUxMLCAiSFBPVVQyTF9EQ1MiIH0sCi0JeyAiSFBPVVQyTF9STVZfU0hPUlQiLCBOVUxMLCAiSFBPVVQyTF9PVVRQIiB9LAotCi0JeyAiSFBPVVQyUiBQR0EiLCBOVUxMLCAiQ2hhcmdlIFB1bXAiIH0sCi0JeyAiSFBPVVQyUiBQR0EiLCBOVUxMLCAiREFDMlIiIH0sCi0JeyAiSFBPVVQyUl9ETFkiLCBOVUxMLCAiSFBPVVQyUiBQR0EiIH0sCi0JeyAiSFBPVVQyUl9EQ1MiLCBOVUxMLCAiSFBPVVQyUl9ETFkiIH0sCi0JeyAiSFBPVVQyUl9PVVRQIiwgTlVMTCwgIkhQT1VUMlJfRENTIiB9LAotCXsgIkhQT1VUMlJfUk1WX1NIT1JUIiwgTlVMTCwgIkhQT1VUMlJfT1VUUCIgfSwKLQotCXsgIkhQT1VUMUwgUEdBIiwgTlVMTCwgIkNoYXJnZSBQdW1wIiB9LAotCXsgIkhQT1VUMUwgUEdBIiwgTlVMTCwgIkRBQzFMIiB9LAotCXsgIkhQT1VUMUxfRExZIiwgTlVMTCwgIkhQT1VUMUwgUEdBIiB9LAotCXsgIkhQT1VUMUxfRENTIiwgTlVMTCwgIkhQT1VUMUxfRExZIiB9LAotCXsgIkhQT1VUMUxfT1VUUCIsIE5VTEwsICJIUE9VVDFMX0RDUyIgfSwKLQl7ICJIUE9VVDFMX1JNVl9TSE9SVCIsIE5VTEwsICJIUE9VVDFMX09VVFAiIH0sCi0KLQl7ICJIUE9VVDFSIFBHQSIsIE5VTEwsICJDaGFyZ2UgUHVtcCIgfSwKLQl7ICJIUE9VVDFSIFBHQSIsIE5VTEwsICJEQUMxUiIgfSwKLQl7ICJIUE9VVDFSX0RMWSIsIE5VTEwsICJIUE9VVDFSIFBHQSIgfSwKLQl7ICJIUE9VVDFSX0RDUyIsIE5VTEwsICJIUE9VVDFSX0RMWSIgfSwKLQl7ICJIUE9VVDFSX09VVFAiLCBOVUxMLCAiSFBPVVQxUl9EQ1MiIH0sCi0JeyAiSFBPVVQxUl9STVZfU0hPUlQiLCBOVUxMLCAiSFBPVVQxUl9PVVRQIiB9LAotCi0JeyAiSFBPVVQyTCIsIE5VTEwsICJIUE9VVDJMX1JNVl9TSE9SVCIgfSwKLQl7ICJIUE9VVDJSIiwgTlVMTCwgIkhQT1VUMlJfUk1WX1NIT1JUIiB9LAotCXsgIkhQT1VUMUwiLCBOVUxMLCAiSFBPVVQxTF9STVZfU0hPUlQiIH0sCi0JeyAiSFBPVVQxUiIsIE5VTEwsICJIUE9VVDFSX1JNVl9TSE9SVCIgfSwKLQotCXsgIlNQS0wiLCAiREFDMUwiLCAiREFDMUwiIH0sCi0JeyAiU1BLTCIsICJEQUMxUiIsICJEQUMxUiIgfSwKLQl7ICJTUEtMIiwgIkRBQzJMIiwgIkRBQzJMIiB9LAotCXsgIlNQS0wiLCAiREFDMlIiLCAiREFDMlIiIH0sCi0KLQl7ICJTUEtSIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAotCXsgIlNQS1IiLCAiREFDMVIiLCAiREFDMVIiIH0sCi0JeyAiU1BLUiIsICJEQUMyTCIsICJEQUMyTCIgfSwKLQl7ICJTUEtSIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAotCi0JeyAiU1BLTCBQR0EiLCBOVUxMLCAiU1BLTCIgfSwKLQl7ICJTUEtSIFBHQSIsIE5VTEwsICJTUEtSIiB9LAotCi0JeyAiU1BLREFUIiwgTlVMTCwgIlNQS0wgUEdBIiB9LAotCXsgIlNQS0RBVCIsIE5VTEwsICJTUEtSIFBHQSIgfSwKLX07Ci0KLXN0YXRpYyBpbnQgd204OTE1X3JlYWRhYmxlX3JlZ2lzdGVyKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlZykKLXsKLQkvKiBEdWUgdG8gdGhlIHNwYXJzZW5lc3Mgb2YgdGhlIHJlZ2lzdGVyIG1hcCB0aGUgY29tcGlsZXIKLQkgKiBvdXRwdXQgZnJvbSBhbiBleHBsaWNpdCBzd2l0Y2ggc3RhdGVtZW50IGVuZHMgdXAgYmVpbmcgbXVjaAotCSAqIG1vcmUgZWZmaWNpZW50IHRoYW4gYSB0YWJsZS4KLQkgKi8KLQlzd2l0Y2ggKHJlZykgewotCWNhc2UgV004OTE1X1NPRlRXQVJFX1JFU0VUOgotCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMToKLQljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzI6Ci0JY2FzZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF8zOgotCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNDoKLQljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzU6Ci0JY2FzZSBXTTg5MTVfUE9XRVJfTUFOQUdFTUVOVF82OgotCWNhc2UgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNzoKLQljYXNlIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzg6Ci0JY2FzZSBXTTg5MTVfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9SSUdIVF9MSU5FX0lOUFVUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9MSU5FX0lOUFVUX0NPTlRST0w6Ci0JY2FzZSBXTTg5MTVfREFDMV9IUE9VVDFfVk9MVU1FOgotCWNhc2UgV004OTE1X0RBQzJfSFBPVVQyX1ZPTFVNRToKLQljYXNlIFdNODkxNV9EQUMxX0xFRlRfVk9MVU1FOgotCWNhc2UgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FOgotCWNhc2UgV004OTE1X0RBQzJfTEVGVF9WT0xVTUU6Ci0JY2FzZSBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUU6Ci0JY2FzZSBXTTg5MTVfT1VUUFVUMV9MRUZUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9PVVRQVVQxX1JJR0hUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9PVVRQVVQyX0xFRlRfVk9MVU1FOgotCWNhc2UgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FOgotCWNhc2UgV004OTE1X01JQ0JJQVNfMToKLQljYXNlIFdNODkxNV9NSUNCSUFTXzI6Ci0JY2FzZSBXTTg5MTVfTERPXzE6Ci0JY2FzZSBXTTg5MTVfTERPXzI6Ci0JY2FzZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzE6Ci0JY2FzZSBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzI6Ci0JY2FzZSBXTTg5MTVfSEVBRFBIT05FX0RFVEVDVF8xOgotCWNhc2UgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMjoKLQljYXNlIFdNODkxNV9NSUNfREVURUNUXzE6Ci0JY2FzZSBXTTg5MTVfTUlDX0RFVEVDVF8yOgotCWNhc2UgV004OTE1X01JQ19ERVRFQ1RfMzoKLQljYXNlIFdNODkxNV9DSEFSR0VfUFVNUF8xOgotCWNhc2UgV004OTE1X0NIQVJHRV9QVU1QXzI6Ci0JY2FzZSBXTTg5MTVfRENfU0VSVk9fMToKLQljYXNlIFdNODkxNV9EQ19TRVJWT18yOgotCWNhc2UgV004OTE1X0RDX1NFUlZPXzM6Ci0JY2FzZSBXTTg5MTVfRENfU0VSVk9fNToKLQljYXNlIFdNODkxNV9EQ19TRVJWT182OgotCWNhc2UgV004OTE1X0RDX1NFUlZPXzc6Ci0JY2FzZSBXTTg5MTVfRENfU0VSVk9fUkVBREJBQ0tfMDoKLQljYXNlIFdNODkxNV9BTkFMT0dVRV9IUF8xOgotCWNhc2UgV004OTE1X0FOQUxPR1VFX0hQXzI6Ci0JY2FzZSBXTTg5MTVfQ0hJUF9SRVZJU0lPTjoKLQljYXNlIFdNODkxNV9DT05UUk9MX0lOVEVSRkFDRV8xOgotCWNhc2UgV004OTE1X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzE6Ci0JY2FzZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMjoKLQljYXNlIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMToKLQljYXNlIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMjoKLQljYXNlIFdNODkxNV9DTE9DS0lOR18xOgotCWNhc2UgV004OTE1X0NMT0NLSU5HXzI6Ci0JY2FzZSBXTTg5MTVfQUlGX1JBVEU6Ci0JY2FzZSBXTTg5MTVfRkxMX0NPTlRST0xfMToKLQljYXNlIFdNODkxNV9GTExfQ09OVFJPTF8yOgotCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzM6Ci0JY2FzZSBXTTg5MTVfRkxMX0NPTlRST0xfNDoKLQljYXNlIFdNODkxNV9GTExfQ09OVFJPTF81OgotCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzY6Ci0JY2FzZSBXTTg5MTVfRkxMX0VGU18xOgotCWNhc2UgV004OTE1X0ZMTF9FRlNfMjoKLQljYXNlIFdNODkxNV9BSUYxX0NPTlRST0w6Ci0JY2FzZSBXTTg5MTVfQUlGMV9CQ0xLOgotCWNhc2UgV004OTE1X0FJRjFfVFhfTFJDTEtfMToKLQljYXNlIFdNODkxNV9BSUYxX1RYX0xSQ0xLXzI6Ci0JY2FzZSBXTTg5MTVfQUlGMV9SWF9MUkNMS18xOgotCWNhc2UgV004OTE1X0FJRjFfUlhfTFJDTEtfMjoKLQljYXNlIFdNODkxNV9BSUYxVFhfREFUQV9DT05GSUdVUkFUSU9OXzE6Ci0JY2FzZSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8yOgotCWNhc2UgV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMVJYX01PTk9fQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYxVFhfVEVTVDoKLQljYXNlIFdNODkxNV9BSUYyX0NPTlRST0w6Ci0JY2FzZSBXTTg5MTVfQUlGMl9CQ0xLOgotCWNhc2UgV004OTE1X0FJRjJfVFhfTFJDTEtfMToKLQljYXNlIFdNODkxNV9BSUYyX1RYX0xSQ0xLXzI6Ci0JY2FzZSBXTTg5MTVfQUlGMl9SWF9MUkNMS18xOgotCWNhc2UgV004OTE1X0FJRjJfUlhfTFJDTEtfMjoKLQljYXNlIFdNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzE6Ci0JY2FzZSBXTTg5MTVfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8yOgotCWNhc2UgV004OTE1X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMlRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjJUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKLQljYXNlIFdNODkxNV9BSUYyUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMlJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OOgotCWNhc2UgV004OTE1X0FJRjJSWF9NT05PX0NPTkZJR1VSQVRJT046Ci0JY2FzZSBXTTg5MTVfQUlGMlRYX1RFU1Q6Ci0JY2FzZSBXTTg5MTVfRFNQMV9UWF9MRUZUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0xFRlRfVk9MVU1FOgotCWNhc2UgV004OTE1X0RTUDFfUlhfUklHSFRfVk9MVU1FOgotCWNhc2UgV004OTE1X0RTUDFfVFhfRklMVEVSUzoKLQljYXNlIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMjoKLQljYXNlIFdNODkxNV9EU1AxX0RSQ18xOgotCWNhc2UgV004OTE1X0RTUDFfRFJDXzI6Ci0JY2FzZSBXTTg5MTVfRFNQMV9EUkNfMzoKLQljYXNlIFdNODkxNV9EU1AxX0RSQ180OgotCWNhc2UgV004OTE1X0RTUDFfRFJDXzU6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18xOgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfR0FJTlNfMjoKLQljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9BOgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX0I6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfUEc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9COgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0M6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfUEc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19COgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0M6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfUEc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9COgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0M6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfUEc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfQToKLQljYXNlIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9COgotCWNhc2UgV004OTE1X0RTUDFfUlhfRVFfQkFORF81X1BHOgotCWNhc2UgV004OTE1X0RTUDJfVFhfTEVGVF9WT0xVTUU6Ci0JY2FzZSBXTTg5MTVfRFNQMl9UWF9SSUdIVF9WT0xVTUU6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9MRUZUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9EU1AyX1JYX1JJR0hUX1ZPTFVNRToKLQljYXNlIFdNODkxNV9EU1AyX1RYX0ZJTFRFUlM6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzE6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzI6Ci0JY2FzZSBXTTg5MTVfRFNQMl9EUkNfMToKLQljYXNlIFdNODkxNV9EU1AyX0RSQ18yOgotCWNhc2UgV004OTE1X0RTUDJfRFJDXzM6Ci0JY2FzZSBXTTg5MTVfRFNQMl9EUkNfNDoKLQljYXNlIFdNODkxNV9EU1AyX0RSQ181OgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMToKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzI6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQToKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9COgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX1BHOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0E6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQjoKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9DOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX1BHOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0E6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQjoKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19DOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX1BHOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0E6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQjoKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9DOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X1BHOgotCWNhc2UgV004OTE1X0RTUDJfUlhfRVFfQkFORF81X0E6Ci0JY2FzZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQjoKLQljYXNlIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9QRzoKLQljYXNlIFdNODkxNV9EQUMxX01JWEVSX1ZPTFVNRVM6Ci0JY2FzZSBXTTg5MTVfREFDMV9MRUZUX01JWEVSX1JPVVRJTkc6Ci0JY2FzZSBXTTg5MTVfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HOgotCWNhc2UgV004OTE1X0RBQzJfTUlYRVJfVk9MVU1FUzoKLQljYXNlIFdNODkxNV9EQUMyX0xFRlRfTUlYRVJfUk9VVElORzoKLQljYXNlIFdNODkxNV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9UWF9MRUZUX01JWEVSX1JPVVRJTkc6Ci0JY2FzZSBXTTg5MTVfRFNQMV9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HOgotCWNhc2UgV004OTE1X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HOgotCWNhc2UgV004OTE1X0RTUDJfVFhfUklHSFRfTUlYRVJfUk9VVElORzoKLQljYXNlIFdNODkxNV9EU1BfVFhfTUlYRVJfU0VMRUNUOgotCWNhc2UgV004OTE1X0RBQ19TT0ZUTVVURToKLQljYXNlIFdNODkxNV9PVkVSU0FNUExJTkc6Ci0JY2FzZSBXTTg5MTVfU0lERVRPTkU6Ci0JY2FzZSBXTTg5MTVfR1BJT18xOgotCWNhc2UgV004OTE1X0dQSU9fMjoKLQljYXNlIFdNODkxNV9HUElPXzM6Ci0JY2FzZSBXTTg5MTVfR1BJT180OgotCWNhc2UgV004OTE1X0dQSU9fNToKLQljYXNlIFdNODkxNV9QVUxMX0NPTlRST0xfMToKLQljYXNlIFdNODkxNV9QVUxMX0NPTlRST0xfMjoKLQljYXNlIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzE6Ci0JY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yOgotCWNhc2UgV004OTE1X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzI6Ci0JY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18xX01BU0s6Ci0JY2FzZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0s6Ci0JY2FzZSBXTTg5MTVfSU5URVJSVVBUX0NPTlRST0w6Ci0JY2FzZSBXTTg5MTVfTEVGVF9QRE1fU1BFQUtFUjoKLQljYXNlIFdNODkxNV9SSUdIVF9QRE1fU1BFQUtFUjoKLQljYXNlIFdNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFOgotCWNhc2UgV004OTE1X1BETV9TUEVBS0VSX1ZPTFVNRToKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHdtODkxNV92b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZWcpCi17Ci0Jc3dpdGNoIChyZWcpIHsKLQljYXNlIFdNODkxNV9TT0ZUV0FSRV9SRVNFVDoKLQljYXNlIFdNODkxNV9DSElQX1JFVklTSU9OOgotCWNhc2UgV004OTE1X0xET18xOgotCWNhc2UgV004OTE1X0xET18yOgotCWNhc2UgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMToKLQljYXNlIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzI6Ci0JY2FzZSBXTTg5MTVfSU5URVJSVVBUX1JBV19TVEFUVVNfMjoKLQljYXNlIFdNODkxNV9EQ19TRVJWT19SRUFEQkFDS18wOgotCWNhc2UgV004OTE1X0RDX1NFUlZPXzI6Ci0JY2FzZSBXTTg5MTVfRENfU0VSVk9fNjoKLQljYXNlIFdNODkxNV9EQ19TRVJWT183OgotCWNhc2UgV004OTE1X0ZMTF9DT05UUk9MXzY6Ci0JY2FzZSBXTTg5MTVfTUlDX0RFVEVDVF8zOgotCWNhc2UgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMToKLQljYXNlIFdNODkxNV9IRUFEUEhPTkVfREVURUNUXzI6Ci0JCXJldHVybiAxOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCB3bTg5MTVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MTVfU09GVFdBUkVfUkVTRVQsIDB4ODkxNSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQgYmNsa19kaXZzW10gPSB7Ci0JMSwgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAyNCwgMzIsIDQ4LCA2NCwgOTYKLX07Ci0KLXN0YXRpYyB2b2lkIHdtODkxNV91cGRhdGVfYmNsayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgYWlmLCBiZXN0LCBjdXJfdmFsLCBiY2xrX3JhdGUsIGJjbGtfcmVnLCBpOwotCi0JLyogRG9uJ3QgYm90aGVyIGlmIHdlJ3JlIGluIGEgbG93IGZyZXF1ZW5jeSBpZGxlIG1vZGUgdGhhdAotCSAqIGNhbid0IHN1cHBvcnQgYXVkaW8uCi0JICovCi0JaWYgKHdtODkxNS0+c3lzY2xrIDwgNjQwMDApCi0JCXJldHVybjsKLQotCWZvciAoYWlmID0gMDsgYWlmIDwgV004OTE1X0FJRlM7IGFpZisrKSB7Ci0JCXN3aXRjaCAoYWlmKSB7Ci0JCWNhc2UgMDoKLQkJCWJjbGtfcmVnID0gV004OTE1X0FJRjFfQkNMSzsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQliY2xrX3JlZyA9IFdNODkxNV9BSUYyX0JDTEs7Ci0JCQlicmVhazsKLQkJfQotCi0JCWJjbGtfcmF0ZSA9IHdtODkxNS0+YmNsa19yYXRlW2FpZl07Ci0KLQkJLyogUGljayBhIGRpdmlzb3IgZm9yIEJDTEsgYXMgY2xvc2UgYXMgd2UgY2FuIGdldCB0byBpZGVhbCAqLwotCQliZXN0ID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNsa19kaXZzKTsgaSsrKSB7Ci0JCQljdXJfdmFsID0gKHdtODkxNS0+c3lzY2xrIC8gYmNsa19kaXZzW2ldKSAtIGJjbGtfcmF0ZTsKLQkJCWlmIChjdXJfdmFsIDwgMCkgLyogQkNMSyB0YWJsZSBpcyBzb3J0ZWQgKi8KLQkJCQlicmVhazsKLQkJCWJlc3QgPSBpOwotCQl9Ci0JCWJjbGtfcmF0ZSA9IHdtODkxNS0+c3lzY2xrIC8gYmNsa19kaXZzW2Jlc3RdOwotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyBCQ0xLX0RJViAlZCBmb3IgYWN0dWFsIEJDTEsgJWRIelxuIiwKLQkJCWJjbGtfZGl2c1tiZXN0XSwgYmNsa19yYXRlKTsKLQotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiY2xrX3JlZywKLQkJCQkgICAgV004OTE1X0FJRjFfQkNMS19ESVZfTUFTSywgYmVzdCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHdtODkxNV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJldDsKLQotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJYnJlYWs7Ci0KLQljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgotCQlpZiAoY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgewotCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSwKLQkJCQkJICAgIFdNODkxNV9CR19FTkEsIFdNODkxNV9CR19FTkEpOwotCQkJbXNsZWVwKDIpOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewotCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksCi0JCQkJCQkgICAgd204OTE1LT5zdXBwbGllcyk7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCi0JCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwKLQkJCQkJcmV0KTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQlpZiAod204OTE1LT5wZGF0YS5sZG9fZW5hID49IDApIHsKLQkJCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5MTUtPnBkYXRhLmxkb19lbmEsCi0JCQkJCQkJMSk7Ci0JCQkJbXNsZWVwKDUpOwotCQkJfQotCi0JCQljb2RlYy0+Y2FjaGVfb25seSA9IGZhbHNlOwotCQkJc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjKTsKLQkJfQotCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9QT1dFUl9NQU5BR0VNRU5UXzEsCi0JCQkJICAgIFdNODkxNV9CR19FTkEsIDApOwotCQlicmVhazsKLQotCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJY29kZWMtPmNhY2hlX29ubHkgPSB0cnVlOwotCQlpZiAod204OTE1LT5wZGF0YS5sZG9fZW5hID49IDApCi0JCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5MTUtPnBkYXRhLmxkb19lbmEsIDApOwotCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksCi0JCQkJICAgICAgIHdtODkxNS0+c3VwcGxpZXMpOwotCQlicmVhazsKLQl9Ci0KLQljb2RlYy0+ZGFwbS5iaWFzX2xldmVsID0gbGV2ZWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg5MTVfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCWludCBhaWZjdHJsID0gMDsKLQlpbnQgYmNsayA9IDA7Ci0JaW50IGxyY2xrX3R4ID0gMDsKLQlpbnQgbHJjbGtfcnggPSAwOwotCWludCBhaWZjdHJsX3JlZywgYmNsa19yZWcsIGxyY2xrX3R4X3JlZywgbHJjbGtfcnhfcmVnOwotCi0Jc3dpdGNoIChkYWktPmlkKSB7Ci0JY2FzZSAwOgotCQlhaWZjdHJsX3JlZyA9IFdNODkxNV9BSUYxX0NPTlRST0w7Ci0JCWJjbGtfcmVnID0gV004OTE1X0FJRjFfQkNMSzsKLQkJbHJjbGtfdHhfcmVnID0gV004OTE1X0FJRjFfVFhfTFJDTEtfMjsKLQkJbHJjbGtfcnhfcmVnID0gV004OTE1X0FJRjFfUlhfTFJDTEtfMjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlhaWZjdHJsX3JlZyA9IFdNODkxNV9BSUYyX0NPTlRST0w7Ci0JCWJjbGtfcmVnID0gV004OTE1X0FJRjJfQkNMSzsKLQkJbHJjbGtfdHhfcmVnID0gV004OTE1X0FJRjJfVFhfTFJDTEtfMjsKLQkJbHJjbGtfcnhfcmVnID0gV004OTE1X0FJRjJfUlhfTFJDTEtfMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgotCQliY2xrIHw9IFdNODkxNV9BSUYxX0JDTEtfSU5WOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgotCQlscmNsa190eCB8PSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0lOVjsKLQkJbHJjbGtfcnggfD0gV004OTE1X0FJRjFSWF9MUkNMS19JTlY7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6Ci0JCWJjbGsgfD0gV004OTE1X0FJRjFfQkNMS19JTlY7Ci0JCWxyY2xrX3R4IHw9IFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WOwotCQlscmNsa19yeCB8PSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOVjsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgotCQlscmNsa190eCB8PSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFI7Ci0JCWxyY2xrX3J4IHw9IFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgotCQliY2xrIHw9IFdNODkxNV9BSUYxX0JDTEtfTVNUUjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgotCQliY2xrIHw9IFdNODkxNV9BSUYxX0JDTEtfTVNUUjsKLQkJbHJjbGtfdHggfD0gV004OTE1X0FJRjFUWF9MUkNMS19NU1RSOwotCQlscmNsa19yeCB8PSBXTTg5MTVfQUlGMVJYX0xSQ0xLX01TVFI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgotCQlhaWZjdHJsIHw9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQlhaWZjdHJsIHw9IDI7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQlhaWZjdHJsIHw9IDM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZmN0cmxfcmVnLCBXTTg5MTVfQUlGMV9GTVRfTUFTSywgYWlmY3RybCk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmNsa19yZWcsCi0JCQkgICAgV004OTE1X0FJRjFfQkNMS19JTlYgfCBXTTg5MTVfQUlGMV9CQ0xLX01TVFIsCi0JCQkgICAgYmNsayk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfdHhfcmVnLAotCQkJICAgIFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WIHwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFIsCi0JCQkgICAgbHJjbGtfdHgpOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGxyY2xrX3J4X3JlZywKLQkJCSAgICBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOViB8Ci0JCQkgICAgV004OTE1X0FJRjFSWF9MUkNMS19NU1RSLAotCQkJICAgIGxyY2xrX3J4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgaW50IGRzcF9kaXZzW10gPSB7Ci0JNDgwMDAsIDMyMDAwLCAxNjAwMCwgODAwMAotfTsKLQotc3RhdGljIGludCB3bTg5MTVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgYml0cywgaSwgYmNsa19yYXRlOwotCWludCBhaWZkYXRhID0gMDsKLQlpbnQgbHJjbGsgPSAwOwotCWludCBkc3AgPSAwOwotCWludCBhaWZkYXRhX3JlZywgbHJjbGtfcmVnLCBkc3Bfc2hpZnQ7Ci0KLQlzd2l0Y2ggKGRhaS0+aWQpIHsKLQljYXNlIDA6Ci0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIHx8Ci0JCSAgICAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfR1BJT18xKSkgJiBXTTg5MTVfR1AxX0ZOX01BU0spIHsKLQkJCWFpZmRhdGFfcmVnID0gV004OTE1X0FJRjFSWF9EQVRBX0NPTkZJR1VSQVRJT047Ci0JCQlscmNsa19yZWcgPSBXTTg5MTVfQUlGMV9SWF9MUkNMS18xOwotCQl9IGVsc2UgewotCQkJYWlmZGF0YV9yZWcgPSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xOwotCQkJbHJjbGtfcmVnID0gV004OTE1X0FJRjFfVFhfTFJDTEtfMTsKLQkJfQotCQlkc3Bfc2hpZnQgPSAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIHx8Ci0JCSAgICAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfR1BJT18yKSkgJiBXTTg5MTVfR1AyX0ZOX01BU0spIHsKLQkJCWFpZmRhdGFfcmVnID0gV004OTE1X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT047Ci0JCQlscmNsa19yZWcgPSBXTTg5MTVfQUlGMl9SWF9MUkNMS18xOwotCQl9IGVsc2UgewotCQkJYWlmZGF0YV9yZWcgPSBXTTg5MTVfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8xOwotCQkJbHJjbGtfcmVnID0gV004OTE1X0FJRjJfVFhfTFJDTEtfMTsKLQkJfQotCQlkc3Bfc2hpZnQgPSBXTTg5MTVfRFNQMl9ESVZfU0hJRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliY2xrX3JhdGUgPSBzbmRfc29jX3BhcmFtc190b19iY2xrKHBhcmFtcyk7Ci0JaWYgKGJjbGtfcmF0ZSA8IDApIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgQkNMSyByYXRlOiAlZFxuIiwgYmNsa19yYXRlKTsKLQkJcmV0dXJuIGJjbGtfcmF0ZTsKLQl9Ci0KLQl3bTg5MTUtPmJjbGtfcmF0ZVtkYWktPmlkXSA9IGJjbGtfcmF0ZTsKLQl3bTg5MTUtPnJ4X3JhdGVbZGFpLT5pZF0gPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0JLyogTmVlZHMgbG9va2luZyBhdCBmb3IgVERNICovCi0JYml0cyA9IHNuZF9wY21fZm9ybWF0X3dpZHRoKHBhcmFtc19mb3JtYXQocGFyYW1zKSk7Ci0JaWYgKGJpdHMgPCAwKQotCQlyZXR1cm4gYml0czsKLQlhaWZkYXRhIHw9IChiaXRzIDw8IFdNODkxNV9BSUYxVFhfV0xfU0hJRlQpIHwgYml0czsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzcF9kaXZzKTsgaSsrKSB7Ci0JCWlmIChkc3BfZGl2c1tpXSA9PSBwYXJhbXNfcmF0ZShwYXJhbXMpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IEFSUkFZX1NJWkUoZHNwX2RpdnMpKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIHNhbXBsZSByYXRlICVkSHpcbiIsCi0JCQlwYXJhbXNfcmF0ZShwYXJhbXMpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRzcCB8PSBpIDw8IGRzcF9zaGlmdDsKLQotCXdtODkxNV91cGRhdGVfYmNsayhjb2RlYyk7Ci0KLQlscmNsayA9IGJjbGtfcmF0ZSAvIHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0JZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIExSQ0xLIHJhdGUgJWQgZm9yIGFjdHVhbCBMUkNMSyAlZEh6XG4iLAotCQlscmNsaywgYmNsa19yYXRlIC8gbHJjbGspOwotCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmZGF0YV9yZWcsCi0JCQkgICAgV004OTE1X0FJRjFUWF9XTF9NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX1NMT1RfTEVOX01BU0ssCi0JCQkgICAgYWlmZGF0YSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgbHJjbGtfcmVnLCBXTTg5MTVfQUlGMVJYX1JBVEVfTUFTSywKLQkJCSAgICBscmNsayk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18yLAotCQkJICAgIFdNODkxNV9EU1AxX0RJVl9TSElGVCA8PCBkc3Bfc2hpZnQsIGRzcCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg5MTVfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKLQkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCWludCBsZmNsayA9IDA7Ci0JaW50IHJhdGVkaXYgPSAwOwotCWludCBzcmM7Ci0JaW50IG9sZDsKLQotCWlmIChmcmVxID09IHdtODkxNS0+c3lzY2xrICYmIGNsa19pZCA9PSB3bTg5MTUtPnN5c2Nsa19zcmMpCi0JCXJldHVybiAwOwotCi0JLyogRGlzYWJsZSBTWVNDTEsgd2hpbGUgd2UgcmVjb25maWd1cmUgKi8KLQlvbGQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSkgJiBXTTg5MTVfU1lTQ0xLX0VOQTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEsCi0JCQkgICAgV004OTE1X1NZU0NMS19FTkEsIDApOwotCi0Jc3dpdGNoIChjbGtfaWQpIHsKLQljYXNlIFdNODkxNV9TWVNDTEtfTUNMSzE6Ci0JCXdtODkxNS0+c3lzY2xrID0gZnJlcTsKLQkJc3JjID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBXTTg5MTVfU1lTQ0xLX01DTEsyOgotCQl3bTg5MTUtPnN5c2NsayA9IGZyZXE7Ci0JCXNyYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgV004OTE1X1NZU0NMS19GTEw6Ci0JCXdtODkxNS0+c3lzY2xrID0gZnJlcTsKLQkJc3JjID0gMjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgY2xvY2sgc291cmNlICVkXG4iLCBjbGtfaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHdtODkxNS0+c3lzY2xrKSB7Ci0JY2FzZSA2MTQ0MDAwOgotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGX1JBVEUsCi0JCQkJICAgIFdNODkxNV9TWVNDTEtfUkFURSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgMjQ1NzYwMDA6Ci0JCXJhdGVkaXYgPSBXTTg5MTVfU1lTQ0xLX0RJVjsKLQljYXNlIDEyMjg4MDAwOgotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGX1JBVEUsCi0JCQkJICAgIFdNODkxNV9TWVNDTEtfUkFURSwgV004OTE1X1NZU0NMS19SQVRFKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjAwMDoKLQljYXNlIDMyNzY4OgotCQlsZmNsayA9IFdNODkxNV9MRkNMS19FTkE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl93YXJuKGNvZGVjLT5kZXYsICJVbnN1cHBvcnRlZCBjbG9jayByYXRlICVkSHpcbiIsCi0JCQkgd204OTE1LT5zeXNjbGspOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl3bTg5MTVfdXBkYXRlX2JjbGsoY29kZWMpOwotCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xLAotCQkJICAgIFdNODkxNV9TWVNDTEtfU1JDX01BU0sgfCBXTTg5MTVfU1lTQ0xLX0RJVl9NQVNLLAotCQkJICAgIHNyYyA8PCBXTTg5MTVfU1lTQ0xLX1NSQ19TSElGVCB8IHJhdGVkaXYpOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9DTE9DS0lOR18xLCBXTTg5MTVfTEZDTEtfRU5BLCBsZmNsayk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xLAotCQkJICAgIFdNODkxNV9TWVNDTEtfRU5BLCBvbGQpOwotCi0Jd204OTE1LT5zeXNjbGtfc3JjID0gY2xrX2lkOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBfZmxsX2RpdiB7Ci0JdTE2IGZsbF9mcmF0aW87Ci0JdTE2IGZsbF9vdXRkaXY7Ci0JdTE2IGZsbF9yZWZjbGtfZGl2OwotCXUxNiBmbGxfbG9vcF9nYWluOwotCXUxNiBmbGxfcmVmX2ZyZXE7Ci0JdTE2IG47Ci0JdTE2IHRoZXRhOwotCXUxNiBsYW1iZGE7Ci19OwotCi1zdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgbWluOwotCXVuc2lnbmVkIGludCBtYXg7Ci0JdTE2IGZsbF9mcmF0aW87Ci0JaW50IHJhdGlvOwotfSBmbGxfZnJhdGlvc1tdID0gewotCXsgICAgICAgMCwgICAgNjQwMDAsIDQsIDE2IH0sCi0JeyAgIDY0MDAwLCAgIDEyODAwMCwgMywgIDggfSwKLQl7ICAxMjgwMDAsICAgMjU2MDAwLCAyLCAgNCB9LAotCXsgIDI1NjAwMCwgIDEwMDAwMDAsIDEsICAyIH0sCi0JeyAxMDAwMDAwLCAxMzUwMDAwMCwgMCwgIDEgfSwKLX07Ci0KLXN0YXRpYyBpbnQgZmxsX2ZhY3RvcnMoc3RydWN0IF9mbGxfZGl2ICpmbGxfZGl2LCB1bnNpZ25lZCBpbnQgRnJlZiwKLQkJICAgICAgIHVuc2lnbmVkIGludCBGb3V0KQotewotCXVuc2lnbmVkIGludCB0YXJnZXQ7Ci0JdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBpbnQgZnJhdGlvLCBnY2RfZmxsOwotCWludCBpOwotCi0JLyogRnJlZiBtdXN0IGJlIDw9MTMuNU1IeiAqLwotCWRpdiA9IDE7Ci0JZmxsX2Rpdi0+ZmxsX3JlZmNsa19kaXYgPSAwOwotCXdoaWxlICgoRnJlZiAvIGRpdikgPiAxMzUwMDAwMCkgewotCQlkaXYgKj0gMjsKLQkJZmxsX2Rpdi0+ZmxsX3JlZmNsa19kaXYrKzsKLQotCQlpZiAoZGl2ID4gOCkgewotCQkJcHJfZXJyKCJDYW4ndCBzY2FsZSAlZE1IeiBpbnB1dCBkb3duIHRvIDw9MTMuNU1IelxuIiwKLQkJCSAgICAgICBGcmVmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoIkZMTCBGcmVmPSV1IEZvdXQ9JXVcbiIsIEZyZWYsIEZvdXQpOwotCi0JLyogQXBwbHkgdGhlIGRpdmlzaW9uIGZvciBvdXIgcmVtYWluaW5nIGNhbGN1bGF0aW9ucyAqLwotCUZyZWYgLz0gZGl2OwotCi0JaWYgKEZyZWYgPj0gMzAwMDAwMCkKLQkJZmxsX2Rpdi0+ZmxsX2xvb3BfZ2FpbiA9IDU7Ci0JZWxzZQotCQlmbGxfZGl2LT5mbGxfbG9vcF9nYWluID0gMDsKLQotCWlmIChGcmVmID49IDQ4MDAwKQotCQlmbGxfZGl2LT5mbGxfcmVmX2ZyZXEgPSAwOwotCWVsc2UKLQkJZmxsX2Rpdi0+ZmxsX3JlZl9mcmVxID0gMTsKLQotCS8qIEZ2Y28gc2hvdWxkIGJlIDkwLTEwME1IejsgZG9uJ3QgY2hlY2sgdGhlIHVwcGVyIGJvdW5kICovCi0JZGl2ID0gMjsKLQl3aGlsZSAoRm91dCAqIGRpdiA8IDkwMDAwMDAwKSB7Ci0JCWRpdisrOwotCQlpZiAoZGl2ID4gNjQpIHsKLQkJCXByX2VycigiVW5hYmxlIHRvIGZpbmQgRkxMX09VVERJViBmb3IgRm91dD0ldUh6XG4iLAotCQkJICAgICAgIEZvdXQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JdGFyZ2V0ID0gRm91dCAqIGRpdjsKLQlmbGxfZGl2LT5mbGxfb3V0ZGl2ID0gZGl2IC0gMTsKLQotCXByX2RlYnVnKCJGTEwgRnZjbz0lZEh6XG4iLCB0YXJnZXQpOwotCi0JLyogRmluZCBhbiBhcHByb3ByYWl0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgewotCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKLQkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOwotCQkJZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0ucmF0aW87Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKGZsbF9mcmF0aW9zKSkgewotCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9GUkFUSU8gZm9yIEZyZWY9JXVIelxuIiwgRnJlZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZsbF9kaXYtPm4gPSB0YXJnZXQgLyAoZnJhdGlvICogRnJlZik7Ci0KLQlpZiAodGFyZ2V0ICUgRnJlZiA9PSAwKSB7Ci0JCWZsbF9kaXYtPnRoZXRhID0gMDsKLQkJZmxsX2Rpdi0+bGFtYmRhID0gMDsKLQl9IGVsc2UgewotCQlnY2RfZmxsID0gZ2NkKHRhcmdldCwgZnJhdGlvICogRnJlZik7Ci0KLQkJZmxsX2Rpdi0+dGhldGEgPSAodGFyZ2V0IC0gKGZsbF9kaXYtPm4gKiBmcmF0aW8gKiBGcmVmKSkKLQkJCS8gZ2NkX2ZsbDsKLQkJZmxsX2Rpdi0+bGFtYmRhID0gKGZyYXRpbyAqIEZyZWYpIC8gZ2NkX2ZsbDsKLQl9Ci0KLQlwcl9kZWJ1ZygiRkxMIE49JXggVEhFVEE9JXggTEFNQkRBPSV4XG4iLAotCQkgZmxsX2Rpdi0+biwgZmxsX2Rpdi0+dGhldGEsIGZsbF9kaXYtPmxhbWJkYSk7Ci0JcHJfZGVidWcoIkZMTF9GUkFUSU89JXggRkxMX09VVERJVj0leCBGTExfUkVGQ0xLX0RJVj0leFxuIiwKLQkJIGZsbF9kaXYtPmZsbF9mcmF0aW8sIGZsbF9kaXYtPmZsbF9vdXRkaXYsCi0JCSBmbGxfZGl2LT5mbGxfcmVmY2xrX2Rpdik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg5MTVfc2V0X2ZsbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBmbGxfaWQsIGludCBzb3VyY2UsCi0JCQkgIHVuc2lnbmVkIGludCBGcmVmLCB1bnNpZ25lZCBpbnQgRm91dCkKLXsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGNvZGVjLT5kZXYpOwotCXN0cnVjdCBfZmxsX2RpdiBmbGxfZGl2OwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0LCByZWc7Ci0KLQkvKiBBbnkgY2hhbmdlPyAqLwotCWlmIChzb3VyY2UgPT0gd204OTE1LT5mbGxfc3JjICYmIEZyZWYgPT0gd204OTE1LT5mbGxfZnJlZiAmJgotCSAgICBGb3V0ID09IHdtODkxNS0+ZmxsX2ZvdXQpCi0JCXJldHVybiAwOwotCi0JaWYgKEZvdXQgPT0gMCkgewotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgZGlzYWJsZWRcbiIpOwotCi0JCXdtODkxNS0+ZmxsX2ZyZWYgPSAwOwotCQl3bTg5MTUtPmZsbF9mb3V0ID0gMDsKLQotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRkxMX0NPTlRST0xfMSwKLQkJCQkgICAgV004OTE1X0ZMTF9FTkEsIDApOwotCi0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGZsbF9mYWN0b3JzKCZmbGxfZGl2LCBGcmVmLCBGb3V0KTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlzd2l0Y2ggKHNvdXJjZSkgewotCWNhc2UgV004OTE1X0ZMTF9NQ0xLMToKLQkJcmVnID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBXTTg5MTVfRkxMX01DTEsyOgotCQlyZWcgPSAxOwotCQlicmVhazsKLQljYXNlIFdNODkxNV9GTExfREFDTFJDTEsxOgotCQlyZWcgPSAyOwotCQlicmVhazsKLQljYXNlIFdNODkxNV9GTExfQkNMSzE6Ci0JCXJlZyA9IDM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gRkxMIHNvdXJjZSAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmVnIHw9IGZsbF9kaXYuZmxsX3JlZmNsa19kaXYgPDwgV004OTE1X0ZMTF9SRUZDTEtfRElWX1NISUZUOwotCXJlZyB8PSBmbGxfZGl2LmZsbF9yZWZfZnJlcSA8PCBXTTg5MTVfRkxMX1JFRl9GUkVRX1NISUZUOwotCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0ZMTF9DT05UUk9MXzUsCi0JCQkgICAgV004OTE1X0ZMTF9SRUZDTEtfRElWX01BU0sgfCBXTTg5MTVfRkxMX1JFRl9GUkVRIHwKLQkJCSAgICBXTTg5MTVfRkxMX1JFRkNMS19TUkNfTUFTSywgcmVnKTsKLQotCXJlZyA9IDA7Ci0JaWYgKGZsbF9kaXYudGhldGEgfHwgZmxsX2Rpdi5sYW1iZGEpCi0JCXJlZyB8PSBXTTg5MTVfRkxMX0VGU19FTkEgfCAoMyA8PCBXTTg5MTVfRkxMX0xGU1JfU0VMX1NISUZUKTsKLQllbHNlCi0JCXJlZyB8PSAxIDw8IFdNODkxNV9GTExfTEZTUl9TRUxfU0hJRlQ7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0ZMTF9FRlNfMiwgcmVnKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF8yLAotCQkJICAgIFdNODkxNV9GTExfT1VURElWX01BU0sgfAotCQkJICAgIFdNODkxNV9GTExfRlJBVElPX01BU0ssCi0JCQkgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5MTVfRkxMX09VVERJVl9TSElGVCkgfAotCQkJICAgIChmbGxfZGl2LmZsbF9mcmF0aW8pKTsKLQotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF8zLCBmbGxfZGl2LnRoZXRhKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9GTExfQ09OVFJPTF80LAotCQkJICAgIFdNODkxNV9GTExfTl9NQVNLIHwgV004OTE1X0ZMTF9MT09QX0dBSU5fTUFTSywKLQkJCSAgICAoZmxsX2Rpdi5uIDw8IFdNODkxNV9GTExfTl9TSElGVCkgfAotCQkJICAgIGZsbF9kaXYuZmxsX2xvb3BfZ2Fpbik7Ci0KLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MTVfRkxMX0VGU18xLCBmbGxfZGl2LmxhbWJkYSk7Ci0KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRkxMX0NPTlRST0xfMSwKLQkJCSAgICBXTTg5MTVfRkxMX0VOQSwgV004OTE1X0ZMTF9FTkEpOwotCi0JLyogVGhlIEZMTCBzdXBwb3J0cyBsaXZlIHJlY29uZmlndXJhdGlvbiAtIGtpY2sgdGhhdCBpbiBjYXNlIHdlIHdlcmUKLQkgKiBhbHJlYWR5IGVuYWJsZWQuCi0JICovCi0Jc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0ZMTF9DT05UUk9MXzYsIFdNODkxNV9GTExfU1dJVENIX0NMSyk7Ci0KLQkvKiBXYWl0IGZvciB0aGUgRkxMIHRvIGxvY2ssIHVzaW5nIHRoZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KLQlpZiAoRnJlZiA+IDEwMDAwMDApCi0JCXRpbWVvdXQgPSB1c2Vjc190b19qaWZmaWVzKDMwMCk7Ci0JZWxzZQotCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyKTsKLQotCS8qIEFsbG93IHN1YnN0YW50aWFsbHkgbG9uZ2VyIGlmIHdlJ3ZlIGFjdHVhbGx5IGdvdCB0aGUgSVJRICovCi0JaWYgKGkyYy0+aXJxKQotCQl0aW1lb3V0ICo9IDEwMDA7Ci0KLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndtODkxNS0+ZmxsX2xvY2ssIHRpbWVvdXQpOwotCi0JaWYgKHJldCA9PSAwICYmIGkyYy0+aXJxKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBGTExcbiIpOwotCQlyZXQgPSAtRVRJTUVET1VUOwotCX0gZWxzZSB7Ci0JCXJldCA9IDA7Ci0JfQotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGNvbmZpZ3VyZWQgZm9yICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOwotCi0Jd204OTE1LT5mbGxfZnJlZiA9IEZyZWY7Ci0Jd204OTE1LT5mbGxfZm91dCA9IEZvdXQ7Ci0Jd204OTE1LT5mbGxfc3JjID0gc291cmNlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19HUElPTElCCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg5MTVfcHJpdiAqZ3Bpb190b193bTg5MTUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTg5MTVfcHJpdiwgZ3Bpb19jaGlwKTsKLX0KLQotc3RhdGljIHZvaWQgd204OTE1X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gZ3Bpb190b193bTg5MTUoY2hpcCk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTE1LT5jb2RlYzsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9HUElPXzEgKyBvZmZzZXQsCi0JCQkgICAgV004OTE1X0dQMV9MVkwsICEhdmFsdWUgPDwgV004OTE1X0dQMV9MVkxfU0hJRlQpOwotfQotCi1zdGF0aWMgaW50IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gZ3Bpb190b193bTg5MTUoY2hpcCk7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTE1LT5jb2RlYzsKLQlpbnQgdmFsOwotCi0JdmFsID0gKDEgPDwgV004OTE1X0dQMV9GTl9TSElGVCkgfCAoISF2YWx1ZSA8PCBXTTg5MTVfR1AxX0xWTF9TSElGVCk7Ci0KLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0dQSU9fMSArIG9mZnNldCwKLQkJCQkgICBXTTg5MTVfR1AxX0ZOX01BU0sgfCBXTTg5MTVfR1AxX0RJUiB8Ci0JCQkJICAgV004OTE1X0dQMV9MVkwsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgd204OTE1X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGdwaW9fdG9fd204OTE1KGNoaXApOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdtODkxNS0+Y29kZWM7Ci0JaW50IHJldDsKLQotCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0dQSU9fMSArIG9mZnNldCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gKHJldCAmIFdNODkxNV9HUDFfTFZMKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBncGlvX3RvX3dtODkxNShjaGlwKTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3bTg5MTUtPmNvZGVjOwotCi0JcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9HUElPXzEgKyBvZmZzZXQsCi0JCQkJICAgV004OTE1X0dQMV9GTl9NQVNLIHwgV004OTE1X0dQMV9ESVIsCi0JCQkJICAgKDEgPDwgV004OTE1X0dQMV9GTl9TSElGVCkgfAotCQkJCSAgICgxIDw8IFdNODkxNV9HUDFfRElSX1NISUZUKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHdtODkxNV90ZW1wbGF0ZV9jaGlwID0gewotCS5sYWJlbAkJCT0gIndtODkxNSIsCi0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuZGlyZWN0aW9uX291dHB1dAk9IHdtODkxNV9ncGlvX2RpcmVjdGlvbl9vdXQsCi0JLnNldAkJCT0gd204OTE1X2dwaW9fc2V0LAotCS5kaXJlY3Rpb25faW5wdXQJPSB3bTg5MTVfZ3Bpb19kaXJlY3Rpb25faW4sCi0JLmdldAkJCT0gd204OTE1X2dwaW9fZ2V0LAotCS5jYW5fc2xlZXAJCT0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdtODkxNV9pbml0X2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJldDsKLQotCXdtODkxNS0+Z3Bpb19jaGlwID0gd204OTE1X3RlbXBsYXRlX2NoaXA7Ci0Jd204OTE1LT5ncGlvX2NoaXAubmdwaW8gPSA1OwotCXdtODkxNS0+Z3Bpb19jaGlwLmRldiA9IGNvZGVjLT5kZXY7Ci0KLQlpZiAod204OTE1LT5wZGF0YS5ncGlvX2Jhc2UpCi0JCXdtODkxNS0+Z3Bpb19jaGlwLmJhc2UgPSB3bTg5MTUtPnBkYXRhLmdwaW9fYmFzZTsKLQllbHNlCi0JCXdtODkxNS0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKLQotCXJldCA9IGdwaW9jaGlwX2FkZCgmd204OTE1LT5ncGlvX2NoaXApOwotCWlmIChyZXQgIT0gMCkKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBHUElPczogJWRcbiIsIHJldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdtODkxNV9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJldDsKLQotCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204OTE1LT5ncGlvX2NoaXApOwotCWlmIChyZXQgIT0gMCkKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSBHUElPczogJWRcbiIsIHJldCk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgd204OTE1X2luaXRfZ3BpbyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdtODkxNV9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotfQotI2VuZGlmCi0KLS8qKgotICogd204OTE1X2RldGVjdCAtIEVuYWJsZSBkZWZhdWx0IFdNODkxNSBqYWNrIGRldGVjdGlvbgotICoKLSAqIFRoZSBXTTg5MTUgaGFzIGFkdmFuY2VkIGFjY2Vzc29yeSBkZXRlY3Rpb24gc3VwcG9ydCBmb3IgaGVhZHNldHMuCi0gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpbnRlZ3JhdGVzCi0gKiB0aGUgbWFqb3JpdHkgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IHdpdGggbWluaW1hbCB1c2VyIGNvbmZpZ3VyYXRpb24uCi0gKgotICogVGhpcyB3aWxsIGRldGVjdCBoZWFkc2V0LCBoZWFkcGhvbmUgYW5kIHNob3J0IGNpcmN1aXQgYnV0dG9uIGFuZAotICogd2lsbCBhbHNvIGRldGVjdCBpbnZlcnRlZCBtaWNyb3Bob25lIGdyb3VuZCBjb25uZWN0aW9ucyBhbmQgdXBkYXRlCi0gKiB0aGUgcG9sYXJpdHkgb2YgdGhlIGNvbm5lY3Rpb25zLgotICovCi1pbnQgd204OTE1X2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCi0JCSAgd204OTE1X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0KLQl3bTg5MTUtPmphY2sgPSBqYWNrOwotCXdtODkxNS0+ZGV0ZWN0aW5nID0gdHJ1ZTsKLQl3bTg5MTUtPnBvbGFyaXR5X2NiID0gcG9sYXJpdHlfY2I7Ci0KLQlpZiAod204OTE1LT5wb2xhcml0eV9jYikKLQkJd204OTE1LT5wb2xhcml0eV9jYihjb2RlYywgMCk7Ci0KLQkvKiBDbGVhciBkaXNjYXJnZSB0byBhdm9pZCBub2lzZSBkdXJpbmcgZGV0ZWN0aW9uICovCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X01JQ0JJQVNfMSwKLQkJCSAgICBXTTg5MTVfTUlDQjFfRElTQ0gsIDApOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNCSUFTXzIsCi0JCQkgICAgV004OTE1X01JQ0IyX0RJU0NILCAwKTsKLQotCS8qIExETzIgcG93ZXJzIHRoZSBtaWNyb3Bob25lcywgU1lTQ0xLIGNsb2NrcyBkZXRlY3Rpb24gKi8KLQlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJMRE8yIik7Ci0Jc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiU1lTQ0xLIik7Ci0KLQkvKiBXZSBzdGFydCBvZmYganVzdCBlbmFibGluZyBtaWNyb3Bob25lIGRldGVjdGlvbiAtIGV2ZW4gYQotCSAqIHBsYWluIGhlYWRwaG9uZSB3aWxsIHRyaWdnZXIgZGV0ZWN0aW9uLgotCSAqLwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzEsCi0JCQkgICAgV004OTE1X01JQ0RfRU5BLCBXTTg5MTVfTUlDRF9FTkEpOwotCi0JLyogU2xvd2VzdCBkZXRlY3Rpb24gcmF0ZSwgZ2l2ZXMgZGVib3VuY2UgZm9yIGluaXRpYWwgZGV0ZWN0aW9uICovCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X01JQ19ERVRFQ1RfMSwKLQkJCSAgICBXTTg5MTVfTUlDRF9SQVRFX01BU0ssCi0JCQkgICAgV004OTE1X01JQ0RfUkFURV9NQVNLKTsKLQotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCB3ZSdyZSBvZmYgKi8KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18yX01BU0ssCi0JCQkgICAgV004OTE1X0lNX01JQ0RfRUlOVCwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODkxNV9kZXRlY3QpOwotCi1zdGF0aWMgdm9pZCB3bTg5MTVfbWljZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgdmFsLCByZWc7Ci0KLQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzMpOwotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljcm9waG9uZSBldmVudDogJXhcbiIsIHZhbCk7Ci0KLQlpZiAoISh2YWwgJiBXTTg5MTVfTUlDRF9WQUxJRCkpIHsKLQkJZGV2X3dhcm4oY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0aW9uIHN0YXRlIGludmFsaWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogTm8gYWNjZXNzb3J5LCByZXNldCBldmVyeXRoaW5nIGFuZCByZXBvcnQgcmVtb3ZhbCAqLwotCWlmICghKHZhbCAmIFdNODkxNV9NSUNEX1NUUykpIHsKLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSmFjayByZW1vdmFsIGRldGVjdGVkXG4iKTsKLQkJd204OTE1LT5qYWNrX21pYyA9IGZhbHNlOwotCQl3bTg5MTUtPmRldGVjdGluZyA9IHRydWU7Ci0JCXNuZF9zb2NfamFja19yZXBvcnQod204OTE1LT5qYWNrLCAwLAotCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzApOwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfTUlDX0RFVEVDVF8xLAotCQkJCSAgICBXTTg5MTVfTUlDRF9SQVRFX01BU0ssCi0JCQkJICAgIFdNODkxNV9NSUNEX1JBVEVfTUFTSyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBJZiB0aGUgbWVhc3VyZW1lbnQgaXMgdmVyeSBoaWdoIHdlJ3ZlIGdvdCBhIG1pY3JvcGhvbmUgYnV0Ci0JICogZG8gYSBsaXR0bGUgZGVib3VuY2UgdG8gYWNjb3VudCBmb3IgbWVjaGFuaWNhbCBpc3N1ZXMuCi0JICovCi0JaWYgKHZhbCAmIDB4NDAwKSB7Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOwotCQlzbmRfc29jX2phY2tfcmVwb3J0KHdtODkxNS0+amFjaywgU05EX0pBQ0tfSEVBRFNFVCwKLQkJCQkgICAgU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8wKTsKLQkJd204OTE1LT5qYWNrX21pYyA9IHRydWU7Ci0JCXdtODkxNS0+ZGV0ZWN0aW5nID0gZmFsc2U7Ci0KLQkJLyogSW5jcmVhc2UgcG9sbCByYXRlIHRvIGdpdmUgYmV0dGVyIHJlc3BvbnNpdmVuZXNzCi0JCSAqIGZvciBidXR0b25zICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzEsCi0JCQkJICAgIFdNODkxNV9NSUNEX1JBVEVfTUFTSywKLQkJCQkgICAgNSA8PCBXTTg5MTVfTUlDRF9SQVRFX1NISUZUKTsKLQl9Ci0KLQkvKiBJZiB3ZSBkZXRlY3RlZCBhIGxvd2VyIGltcGVkZW5jZSBkdXJpbmcgaW5pdGlhbCBzdGFydHVwCi0JICogdGhlbiB3ZSBwcm9iYWJseSBoYXZlIHRoZSB3cm9uZyBwb2xhcml0eSwgZmxpcCBpdC4gIERvbid0Ci0JICogZG8gdGhpcyBmb3IgdGhlIGxvd2VzdCBpbXBlZGVuY2VzIHRvIHNwZWVkIHVwIGRldGVjdGlvbiBvZgotCSAqIHBsYWluIGhlYWRwaG9uZXMuCi0JICovCi0JaWYgKHdtODkxNS0+ZGV0ZWN0aW5nICYmICh2YWwgJiAweDNmMCkpIHsKLQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzIpOwotCQlyZWcgXj0gV004OTE1X0hQT1VUMUZCX1NSQyB8IFdNODkxNV9NSUNEX1NSQyB8Ci0JCQlXTTg5MTVfTUlDRF9CSUFTX1NSQzsKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yLAotCQkJCSAgICBXTTg5MTVfSFBPVVQxRkJfU1JDIHwgV004OTE1X01JQ0RfU1JDIHwKLQkJCQkgICAgV004OTE1X01JQ0RfQklBU19TUkMsIHJlZyk7Ci0KLQkJaWYgKHdtODkxNS0+cG9sYXJpdHlfY2IpCi0JCQl3bTg5MTUtPnBvbGFyaXR5X2NiKGNvZGVjLAotCQkJCQkgICAgKHJlZyAmIFdNODkxNV9NSUNEX1NSQykgIT0gMCk7Ci0KLQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IG1pY3JvcGhvbmUgcG9sYXJpdHkgdG8gJWRcbiIsCi0JCQkocmVnICYgV004OTE1X01JQ0RfU1JDKSAhPSAwKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JLyogRG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBidXR0b25zLCBqdXN0IHJlcG9ydCBhbnkgbG93Ci0JICogaW1wZWRlbmNlIGFzIEJUTl8wLgotCSAqLwotCWlmICh2YWwgJiAweDNmYykgewotCQlpZiAod204OTE1LT5qYWNrX21pYykgewotCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljIGJ1dHRvbiBkZXRlY3RlZFxuIik7Ci0JCQlzbmRfc29jX2phY2tfcmVwb3J0KHdtODkxNS0+amFjaywKLQkJCQkJICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMCwKLQkJCQkJICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIZWFkcGhvbmUgZGV0ZWN0ZWRcbiIpOwotCQkJc25kX3NvY19qYWNrX3JlcG9ydCh3bTg5MTUtPmphY2ssCi0JCQkJCSAgICBTTkRfSkFDS19IRUFEUEhPTkUsCi0JCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwKLQkJCQkJICAgIFNORF9KQUNLX0JUTl8wKTsKLQotCQkJLyogSW5jcmVhc2UgdGhlIGRldGVjdGlvbiByYXRlIGEgYml0IGZvcgotCQkJICogcmVzcG9uc2l2ZW5lc3MuCi0JCQkgKi8KLQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9NSUNfREVURUNUXzEsCi0JCQkJCSAgICBXTTg5MTVfTUlDRF9SQVRFX01BU0ssCi0JCQkJCSAgICA3IDw8IFdNODkxNV9NSUNEX1JBVEVfU0hJRlQpOwotCi0JCQl3bTg5MTUtPmRldGVjdGluZyA9IGZhbHNlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd204OTE1X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhdGE7Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlpbnQgaXJxX3ZhbDsKLQotCWlycV92YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkxNV9JTlRFUlJVUFRfU1RBVFVTXzIpOwotCWlmIChpcnFfdmFsIDwgMCkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJUlEgc3RhdHVzOiAlZFxuIiwKLQkJCWlycV92YWwpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCWlycV92YWwgJj0gfnNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLKTsKLQotCWlmIChpcnFfdmFsICYgKFdNODkxNV9EQ1NfRE9ORV8wMV9FSU5UIHwgV004OTE1X0RDU19ET05FXzIzX0VJTlQpKSB7Ci0JCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIElSUVxuIik7Ci0JCWNvbXBsZXRlKCZ3bTg5MTUtPmRjc19kb25lKTsKLQl9Ci0KLQlpZiAoaXJxX3ZhbCAmIFdNODkxNV9GSUZPU19FUlJfRUlOVCkKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGlnaXRhbCBjb3JlIEZJRk8gZXJyb3JcbiIpOwotCi0JaWYgKGlycV92YWwgJiBXTTg5MTVfRkxMX0xPQ0tfRUlOVCkgewotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgbG9ja2VkXG4iKTsKLQkJY29tcGxldGUoJndtODkxNS0+ZmxsX2xvY2spOwotCX0KLQotCWlmIChpcnFfdmFsICYgV004OTE1X01JQ0RfRUlOVCkKLQkJd204OTE1X21pY2QoY29kZWMpOwotCi0JaWYgKGlycV92YWwpIHsKLQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMiwgaXJxX3ZhbCk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0gZWxzZSB7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3bTg5MTVfZWRnZV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKLQlpcnFyZXR1cm5fdCB2YWw7Ci0KLQlkbyB7Ci0JCXZhbCA9IHdtODkxNV9pcnEoaXJxLCBkYXRhKTsKLQkJaWYgKHZhbCAhPSBJUlFfTk9ORSkKLQkJCXJldCA9IHZhbDsKLQl9IHdoaWxlICh2YWwgIT0gSVJRX05PTkUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd204OTE1X3JldHVuZV9tb2JpbGVfcGRhdGEoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0Jc3RydWN0IHdtODkxNV9wZGF0YSAqcGRhdGEgPSAmd204OTE1LT5wZGF0YTsKLQotCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNvbnRyb2xzW10gPSB7Ci0JCVNPQ19FTlVNX0VYVCgiRFNQMSBFUSBNb2RlIiwKLQkJCSAgICAgd204OTE1LT5yZXR1bmVfbW9iaWxlX2VudW0sCi0JCQkgICAgIHdtODkxNV9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAotCQkJICAgICB3bTg5MTVfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCi0JCVNPQ19FTlVNX0VYVCgiRFNQMiBFUSBNb2RlIiwKLQkJCSAgICAgd204OTE1LT5yZXR1bmVfbW9iaWxlX2VudW0sCi0JCQkgICAgIHdtODkxNV9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAotCQkJICAgICB3bTg5MTVfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCi0JfTsKLQlpbnQgcmV0LCBpLCBqOwotCWNvbnN0IGNoYXIgKip0OwotCi0JLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJIGJ1dCB0aGUgbnVtYmVyCi0JICogb2YgdGV4dHMgaXMgbGlrZWx5IHRvIGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mCi0JICogY29uZmlndXJhdGlvbnMgZHVlIHRvIHRoZSBzYW1wbGUgcmF0ZSBkZXBlbmRlbmN5IG9mIHRoZQotCSAqIGNvbmZpZ3VyYXRpb25zLiAqLwotCXdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgPSAwOwotCXdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IHdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7IGorKykgewotCQkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCi0JCQkJICAgd204OTE1LT5yZXR1bmVfbW9iaWxlX3RleHRzW2pdKSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGogIT0gd204OTE1LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEV4cGFuZCB0aGUgYXJyYXkuLi4gKi8KLQkJdCA9IGtyZWFsbG9jKHdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0cywKLQkJCSAgICAgc2l6ZW9mKGNoYXIgKikgKiAKLQkJCSAgICAgKHdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMgKyAxKSwKLQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICh0ID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQkvKiAuLi5zdG9yZSB0aGUgbmV3IGVudHJ5Li4uICovCi0JCXRbd204OTE1LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0c10gPSAKLQkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZTsKLQotCQkvKiAuLi5hbmQgcmVtZW1iZXIgdGhlIG5ldyB2ZXJzaW9uLiAqLwotCQl3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKys7Ci0JCXdtODkxNS0+cmV0dW5lX21vYmlsZV90ZXh0cyA9IHQ7Ci0JfQotCi0JZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQWxsb2NhdGVkICVkIHVuaXF1ZSBSZVR1bmUgTW9iaWxlIG5hbWVzXG4iLAotCQl3bTg5MTUtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKTsKLQotCXdtODkxNS0+cmV0dW5lX21vYmlsZV9lbnVtLm1heCA9IHdtODkxNS0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7Ci0Jd204OTE1LT5yZXR1bmVfbW9iaWxlX2VudW0udGV4dHMgPSB3bTg5MTUtPnJldHVuZV9tb2JpbGVfdGV4dHM7Ci0KLQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgY29udHJvbHMsIEFSUkFZX1NJWkUoY29udHJvbHMpKTsKLQlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoY29kZWMtPmRldiwKLQkJCSJGYWlsZWQgdG8gYWRkIFJlVHVuZSBNb2JpbGUgY29udHJvbHM6ICVkXG4iLCByZXQpOwotfQotCi1zdGF0aWMgaW50IHdtODkxNV9wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGNvZGVjLT5kZXYpOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQlpbnQgaSwgaXJxX2ZsYWdzOwotCi0Jd204OTE1LT5jb2RlYyA9IGNvZGVjOwotCi0JaW5pdF9jb21wbGV0aW9uKCZ3bTg5MTUtPmRjc19kb25lKTsKLQlpbml0X2NvbXBsZXRpb24oJndtODkxNS0+ZmxsX2xvY2spOwotCi0JZGFwbS0+aWRsZV9iaWFzX29mZiA9IHRydWU7Ci0JZGFwbS0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7Ci0KLQlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgMTYsIDE2LCBTTkRfU09DX0kyQyk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyk7IGkrKykKLQkJd204OTE1LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5MTVfc3VwcGx5X25hbWVzW2ldOwotCi0JcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksCi0JCQkJIHdtODkxNS0+c3VwcGxpZXMpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXdtODkxNS0+ZGlzYWJsZV9uYlswXS5ub3RpZmllcl9jYWxsID0gd204OTE1X3JlZ3VsYXRvcl9ldmVudF8wOwotCXdtODkxNS0+ZGlzYWJsZV9uYlsxXS5ub3RpZmllcl9jYWxsID0gd204OTE1X3JlZ3VsYXRvcl9ldmVudF8xOwotCXdtODkxNS0+ZGlzYWJsZV9uYlsyXS5ub3RpZmllcl9jYWxsID0gd204OTE1X3JlZ3VsYXRvcl9ldmVudF8yOwotCXdtODkxNS0+ZGlzYWJsZV9uYlszXS5ub3RpZmllcl9jYWxsID0gd204OTE1X3JlZ3VsYXRvcl9ldmVudF8zOwotCi0JLyogVGhpcyBzaG91bGQgcmVhbGx5IGJlIG1vdmVkIGludG8gdGhlIHJlZ3VsYXRvciBjb3JlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyk7IGkrKykgewotCQlyZXQgPSByZWd1bGF0b3JfcmVnaXN0ZXJfbm90aWZpZXIod204OTE1LT5zdXBwbGllc1tpXS5jb25zdW1lciwKLQkJCQkJCSAgJndtODkxNS0+ZGlzYWJsZV9uYltpXSk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAotCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yIG5vdGlmaWVyOiAlZFxuIiwKLQkJCQlyZXQpOwotCQl9Ci0JfQotCi0JcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksCi0JCQkJICAgIHdtODkxNS0+c3VwcGxpZXMpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfZ2V0OwotCX0KLQotCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPj0gMCkgewotCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5MTUtPnBkYXRhLmxkb19lbmEsIDEpOwotCQltc2xlZXAoNSk7Ci0JfQotCi0JcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfU09GVFdBUkVfUkVTRVQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIElEIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfZW5hYmxlOwotCX0KLQlpZiAocmV0ICE9IDB4ODkxNSkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJEZXZpY2UgaXMgbm90IGEgV004OTE1LCBJRCAleFxuIiwgcmV0KTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfZW5hYmxlOwotCX0KLQotCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0NISVBfUkVWSVNJT04pOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIGRldmljZSByZXZpc2lvbjogJWRcbiIsCi0JCQlyZXQpOwotCQlnb3RvIGVycl9lbmFibGU7Ci0JfQotCQotCWRldl9pbmZvKGNvZGVjLT5kZXYsICJyZXZpc2lvbiAlY1xuIiwKLQkJIChyZXQgJiBXTTg5MTVfQ0hJUF9SRVZfTUFTSykgKyAnQScpOwotCi0JaWYgKHdtODkxNS0+cGRhdGEubGRvX2VuYSA+PSAwKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHdtODkxNS0+cGRhdGEubGRvX2VuYSwgMCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gd204OTE1X3Jlc2V0KGNvZGVjKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7Ci0JCQlnb3RvIGVycl9lbmFibGU7Ci0JCX0KLQl9Ci0KLQljb2RlYy0+Y2FjaGVfb25seSA9IHRydWU7Ci0KLQkvKiBBcHBseSBwbGF0Zm9ybSBkYXRhIHNldHRpbmdzICovCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0xJTkVfSU5QVVRfQ09OVFJPTCwKLQkJCSAgICBXTTg5MTVfSU5MX01PREVfTUFTSyB8IFdNODkxNV9JTlJfTU9ERV9NQVNLLAotCQkJICAgIHdtODkxNS0+cGRhdGEuaW5sX21vZGUgPDwgV004OTE1X0lOTF9NT0RFX1NISUZUIHwKLQkJCSAgICB3bTg5MTUtPnBkYXRhLmlucl9tb2RlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkxNS0+cGRhdGEuZ3Bpb19kZWZhdWx0KTsgaSsrKSB7Ci0JCWlmICghd204OTE1LT5wZGF0YS5ncGlvX2RlZmF1bHRbaV0pCi0JCQljb250aW51ZTsKLQotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MTVfR1BJT18xICsgaSwKLQkJCSAgICAgIHdtODkxNS0+cGRhdGEuZ3Bpb19kZWZhdWx0W2ldICYgMHhmZmZmKTsKLQl9Ci0KLQlpZiAod204OTE1LT5wZGF0YS5zcGttdXRlX3NlcSkKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X1BETV9TUEVBS0VSX01VVEVfU0VRVUVOQ0UsCi0JCQkJICAgIFdNODkxNV9TUEtfTVVURV9FTkRJQU4gfAotCQkJCSAgICBXTTg5MTVfU1BLX01VVEVfU0VRMV9NQVNLLAotCQkJCSAgICB3bTg5MTUtPnBkYXRhLnNwa211dGVfc2VxKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BQ0NFU1NPUllfREVURUNUX01PREVfMiwKLQkJCSAgICBXTTg5MTVfTUlDRF9CSUFTX1NSQyB8IFdNODkxNV9IUE9VVDFGQl9TUkMgfAotCQkJICAgIFdNODkxNV9NSUNEX1NSQywgd204OTE1LT5wZGF0YS5taWNkZXRfZGVmKTsKLQotCS8qIExhdGNoIHZvbHVtZSB1cGRhdGUgYml0cyAqLwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9MRUZUX0xJTkVfSU5QVVRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9JTjFfVlUsIFdNODkxNV9JTjFfVlUpOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9SSUdIVF9MSU5FX0lOUFVUX1ZPTFVNRSwKLQkJCSAgICBXTTg5MTVfSU4xX1ZVLCBXTTg5MTVfSU4xX1ZVKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EQUMxX0xFRlRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EQUMxX1ZVLCBXTTg5MTVfREFDMV9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EQUMxX1ZVLCBXTTg5MTVfREFDMV9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RBQzJfTEVGVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RBQzJfVlUsIFdNODkxNV9EQUMyX1ZVKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfREFDMl9SSUdIVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RBQzJfVlUsIFdNODkxNV9EQUMyX1ZVKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9PVVRQVVQxX0xFRlRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EQUMxX1ZVLCBXTTg5MTVfREFDMV9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X09VVFBVVDFfUklHSFRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EQUMxX1ZVLCBXTTg5MTVfREFDMV9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X09VVFBVVDJfTEVGVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RBQzJfVlUsIFdNODkxNV9EQUMyX1ZVKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfT1VUUFVUMl9SSUdIVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RBQzJfVlUsIFdNODkxNV9EQUMyX1ZVKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EU1AxVFhfVlUsIFdNODkxNV9EU1AxVFhfVlUpOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9EU1AxX1RYX1JJR0hUX1ZPTFVNRSwKLQkJCSAgICBXTTg5MTVfRFNQMVRYX1ZVLCBXTTg5MTVfRFNQMVRYX1ZVKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMl9UWF9MRUZUX1ZPTFVNRSwKLQkJCSAgICBXTTg5MTVfRFNQMlRYX1ZVLCBXTTg5MTVfRFNQMlRYX1ZVKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMl9UWF9SSUdIVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RTUDJUWF9WVSwgV004OTE1X0RTUDJUWF9WVSk7Ci0KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMV9SWF9MRUZUX1ZPTFVNRSwKLQkJCSAgICBXTTg5MTVfRFNQMVJYX1ZVLCBXTTg5MTVfRFNQMVJYX1ZVKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfRFNQMV9SWF9SSUdIVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RTUDFSWF9WVSwgV004OTE1X0RTUDFSWF9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDJfUlhfTEVGVF9WT0xVTUUsCi0JCQkgICAgV004OTE1X0RTUDJSWF9WVSwgV004OTE1X0RTUDJSWF9WVSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0RTUDJfUlhfUklHSFRfVk9MVU1FLAotCQkJICAgIFdNODkxNV9EU1AyUlhfVlUsIFdNODkxNV9EU1AyUlhfVlUpOwotCi0JLyogTm8gc3VwcG9ydCBjdXJyZW50bHkgZm9yIHRoZSB1bmRlcmNsb2NrZWQgVERNIG1vZGVzIGFuZAotCSAqIHBpY2sgYSBkZWZhdWx0IFRETSBsYXlvdXQgd2l0aCBlYWNoIGNoYW5uZWwgcGFpciB3b3JraW5nIHdpdGgKLQkgKiBzbG90cyAwIGFuZCAxLiAqLwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMF9TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYxUlhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAotCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjFfU0xPVFNfTUFTSyB8Ci0JCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMV9TVEFSVF9TTE9UX01BU0ssCi0JCQkgICAgMSA8PCBXTTg5MTVfQUlGMVJYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFSWF9DSEFOTkVMXzJfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4yX1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjFSWF9DSEFOMl9TTE9UU19TSElGVCB8IDApOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8zX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjFSWF9DSEFOM19TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYxUlhfQ0hBTjNfU0xPVFNfU0hJRlQgfCAxKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfNF9DT05GSUdVUkFUSU9OLAotCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjRfU0xPVFNfTUFTSyB8Ci0JCQkgICAgV004OTE1X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCi0JCQkgICAgMSA8PCBXTTg5MTVfQUlGMVJYX0NIQU40X1NMT1RTX1NISUZUIHwgMCk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFSWF9DSEFOTkVMXzVfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMVJYX0NIQU41X1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjFSWF9DSEFONV9TTE9UU19TSElGVCB8IDEpOwotCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjJSWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMlJYX0NIQU4wX1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjJSWF9DSEFOMF9TTE9UU19TSElGVCB8IDApOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYyUlhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjJSWF9DSEFOMV9TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYyUlhfQ0hBTjFfU0xPVFNfU0hJRlQgfCAxKTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMF9TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYxVFhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAotCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjFfU0xPVFNfTUFTSyB8Ci0JCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCi0JCQkgICAgMSA8PCBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFUWF9DSEFOTkVMXzJfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4yX1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjFUWF9DSEFOMl9TTE9UU19TSElGVCB8IDApOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8zX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjFUWF9DSEFOM19TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYxVFhfQ0hBTjNfU0xPVFNfU0hJRlQgfCAxKTsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfNF9DT05GSUdVUkFUSU9OLAotCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjRfU0xPVFNfTUFTSyB8Ci0JCQkgICAgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCi0JCQkgICAgMSA8PCBXTTg5MTVfQUlGMVRYX0NIQU40X1NMT1RTX1NISUZUIHwgMCk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjFUWF9DSEFOTkVMXzVfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMVRYX0NIQU41X1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjFUWF9DSEFONV9TTE9UU19TSElGVCB8IDEpOwotCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTE1X0FJRjJUWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTiwKLQkJCSAgICBXTTg5MTVfQUlGMlRYX0NIQU4wX1NMT1RTX01BU0sgfAotCQkJICAgIFdNODkxNV9BSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAotCQkJICAgIDEgPDwgV004OTE1X0FJRjJUWF9DSEFOMF9TTE9UU19TSElGVCB8IDApOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT04sCi0JCQkgICAgV004OTE1X0FJRjJUWF9DSEFOMV9TTE9UU19NQVNLIHwKLQkJCSAgICBXTTg5MTVfQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSywKLQkJCSAgICAxIDw8IFdNODkxNV9BSUYxVFhfQ0hBTjFfU0xPVFNfU0hJRlQgfCAxKTsKLQotCWlmICh3bTg5MTUtPnBkYXRhLm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCi0JCXdtODkxNV9yZXR1bmVfbW9iaWxlX3BkYXRhKGNvZGVjKTsKLQllbHNlCi0JCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MTVfZXFfY29udHJvbHMsCi0JCQkJICAgICBBUlJBWV9TSVpFKHdtODkxNV9lcV9jb250cm9scykpOwotCi0JLyogSWYgdGhlIFRYIExSQ0xLIHBpbnMgYXJlIG5vdCBpbiBMUkNMSyBtb2RlIGNvbmZpZ3VyZSB0aGUKLQkgKiBBSUZzIHRvIHNvdXJjZSB0aGVpciBjbG9ja3MgZnJvbSB0aGUgUlggTFJDTEtzLgotCSAqLwotCWlmICgoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfR1BJT18xKSkpCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYxX1RYX0xSQ0xLXzIsCi0JCQkJICAgIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERSwKLQkJCQkgICAgV004OTE1X0FJRjFUWF9MUkNMS19NT0RFKTsKLQotCWlmICgoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfR1BJT18yKSkpCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUYyX1RYX0xSQ0xLXzIsCi0JCQkJICAgIFdNODkxNV9BSUYyVFhfTFJDTEtfTU9ERSwKLQkJCQkgICAgV004OTE1X0FJRjJUWF9MUkNMS19NT0RFKTsKLQotCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MTUtPnN1cHBsaWVzKSwgd204OTE1LT5zdXBwbGllcyk7Ci0KLQl3bTg5MTVfaW5pdF9ncGlvKGNvZGVjKTsKLQotCWlmIChpMmMtPmlycSkgewotCQlpZiAod204OTE1LT5wZGF0YS5pcnFfZmxhZ3MpCi0JCQlpcnFfZmxhZ3MgPSB3bTg5MTUtPnBkYXRhLmlycV9mbGFnczsKLQkJZWxzZQotCQkJaXJxX2ZsYWdzID0gSVJRRl9UUklHR0VSX0xPVzsKLQotCQlpcnFfZmxhZ3MgfD0gSVJRRl9PTkVTSE9UOwotCi0JCWlmIChpcnFfZmxhZ3MgJiAoSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HKSkKLQkJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGkyYy0+aXJxLCBOVUxMLAotCQkJCQkJICAgd204OTE1X2VkZ2VfaXJxLAotCQkJCQkJICAgaXJxX2ZsYWdzLCAid204OTE1IiwgY29kZWMpOwotCQllbHNlCi0JCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpMmMtPmlycSwgTlVMTCwgd204OTE1X2lycSwKLQkJCQkJCSAgIGlycV9mbGFncywgIndtODkxNSIsIGNvZGVjKTsKLQotCQlpZiAocmV0ID09IDApIHsKLQkJCS8qIFVubWFzayB0aGUgaW50ZXJydXB0ICovCi0JCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MTVfSU5URVJSVVBUX0NPTlRST0wsCi0JCQkJCSAgICBXTTg5MTVfSU1fSVJRLCAwKTsKLQotCQkJLyogRW5hYmxlIGVycm9yIHJlcG9ydGluZyBhbmQgREMgc2Vydm8gc3RhdHVzICovCi0JCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAotCQkJCQkgICAgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLLAotCQkJCQkgICAgV004OTE1X0lNX0RDU19ET05FXzIzX0VJTlQgfAotCQkJCQkgICAgV004OTE1X0lNX0RDU19ET05FXzAxX0VJTlQgfAotCQkJCQkgICAgV004OTE1X0lNX0ZMTF9MT0NLX0VJTlQgfAotCQkJCQkgICAgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5ULAotCQkJCQkgICAgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLAotCQkJCXJldCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2VuYWJsZToKLQlpZiAod204OTE1LT5wZGF0YS5sZG9fZW5hID49IDApCi0JCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHdtODkxNS0+cGRhdGEubGRvX2VuYSwgMCk7Ci0KLQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksIHdtODkxNS0+c3VwcGxpZXMpOwotZXJyX2dldDoKLQlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyksIHdtODkxNS0+c3VwcGxpZXMpOwotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd204OTE1X3JlbW92ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHdtODkxNV9wcml2ICp3bTg5MTUgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChjb2RlYy0+ZGV2KTsKLQlpbnQgaTsKLQotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9JTlRFUlJVUFRfQ09OVFJPTCwKLQkJCSAgICBXTTg5MTVfSU1fSVJRLCBXTTg5MTVfSU1fSVJRKTsKLQotCWlmIChpMmMtPmlycSkKLQkJZnJlZV9pcnEoaTJjLT5pcnEsIGNvZGVjKTsKLQotCXdtODkxNV9mcmVlX2dwaW8oY29kZWMpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTE1LT5zdXBwbGllcyk7IGkrKykKLQkJcmVndWxhdG9yX3VucmVnaXN0ZXJfbm90aWZpZXIod204OTE1LT5zdXBwbGllc1tpXS5jb25zdW1lciwKLQkJCQkJICAgICAgJndtODkxNS0+ZGlzYWJsZV9uYltpXSk7Ci0JcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkxNS0+c3VwcGxpZXMpLCB3bTg5MTUtPnN1cHBsaWVzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204OTE1ID0gewotCS5wcm9iZSA9CXdtODkxNV9wcm9iZSwKLQkucmVtb3ZlID0Jd204OTE1X3JlbW92ZSwKLQkuc2V0X2JpYXNfbGV2ZWwgPSB3bTg5MTVfc2V0X2JpYXNfbGV2ZWwsCi0JLnNlcV9ub3RpZmllciA9IHdtODkxNV9zZXFfbm90aWZpZXIsCi0JLnJlZ19jYWNoZV9zaXplID0gV004OTE1X01BWF9SRUdJU1RFUiArIDEsCi0JLnJlZ193b3JkX3NpemUgPSBzaXplb2YodTE2KSwKLQkucmVnX2NhY2hlX2RlZmF1bHQgPSB3bTg5MTVfcmVnLAotCS52b2xhdGlsZV9yZWdpc3RlciA9IHdtODkxNV92b2xhdGlsZV9yZWdpc3RlciwKLQkucmVhZGFibGVfcmVnaXN0ZXIgPSB3bTg5MTVfcmVhZGFibGVfcmVnaXN0ZXIsCi0JLmNvbXByZXNzX3R5cGUgPSBTTkRfU09DX1JCVFJFRV9DT01QUkVTU0lPTiwKLQkuY29udHJvbHMgPSB3bTg5MTVfc25kX2NvbnRyb2xzLAotCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKHdtODkxNV9zbmRfY29udHJvbHMpLAotCS5kYXBtX3dpZGdldHMgPSB3bTg5MTVfZGFwbV93aWRnZXRzLAotCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg5MTVfZGFwbV93aWRnZXRzKSwKLQkuZGFwbV9yb3V0ZXMgPSB3bTg5MTVfZGFwbV9yb3V0ZXMsCi0JLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUod204OTE1X2RhcG1fcm91dGVzKSwKLQkuc2V0X3BsbCA9IHdtODkxNV9zZXRfZmxsLAotfTsKLQotI2RlZmluZSBXTTg5MTVfUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8XAotCQkgICAgICBTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwKQotI2RlZmluZSBXTTg5MTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCi0JCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8XAotCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODkxNV9kYWlfb3BzID0gewotCS5zZXRfZm10ID0gd204OTE1X3NldF9mbXQsCi0JLmh3X3BhcmFtcyA9IHdtODkxNV9od19wYXJhbXMsCi0JLnNldF9zeXNjbGsgPSB3bTg5MTVfc2V0X3N5c2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODkxNV9kYWlbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIndtODkxNS1haWYxIiwKLQkJLnBsYXliYWNrID0gewotCQkJLnN0cmVhbV9uYW1lID0gIkFJRjEgUGxheWJhY2siLAotCQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCQkuY2hhbm5lbHNfbWF4ID0gNiwKLQkJCS5yYXRlcyA9IFdNODkxNV9SQVRFUywKLQkJCS5mb3JtYXRzID0gV004OTE1X0ZPUk1BVFMsCi0JCX0sCi0JCS5jYXB0dXJlID0gewotCQkJIC5zdHJlYW1fbmFtZSA9ICJBSUYxIENhcHR1cmUiLAotCQkJIC5jaGFubmVsc19taW4gPSAxLAotCQkJIC5jaGFubmVsc19tYXggPSA2LAotCQkJIC5yYXRlcyA9IFdNODkxNV9SQVRFUywKLQkJCSAuZm9ybWF0cyA9IFdNODkxNV9GT1JNQVRTLAotCQkgfSwKLQkJLm9wcyA9ICZ3bTg5MTVfZGFpX29wcywKLQl9LAotCXsKLQkJLm5hbWUgPSAid204OTE1LWFpZjIiLAotCQkucGxheWJhY2sgPSB7Ci0JCQkuc3RyZWFtX25hbWUgPSAiQUlGMiBQbGF5YmFjayIsCi0JCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJCS5jaGFubmVsc19tYXggPSAyLAotCQkJLnJhdGVzID0gV004OTE1X1JBVEVTLAotCQkJLmZvcm1hdHMgPSBXTTg5MTVfRk9STUFUUywKLQkJfSwKLQkJLmNhcHR1cmUgPSB7Ci0JCQkgLnN0cmVhbV9uYW1lID0gIkFJRjIgQ2FwdHVyZSIsCi0JCQkgLmNoYW5uZWxzX21pbiA9IDEsCi0JCQkgLmNoYW5uZWxzX21heCA9IDIsCi0JCQkgLnJhdGVzID0gV004OTE1X1JBVEVTLAotCQkJIC5mb3JtYXRzID0gV004OTE1X0ZPUk1BVFMsCi0JCSB9LAotCQkub3BzID0gJndtODkxNV9kYWlfb3BzLAotCX0sCi19OwotCi1zdGF0aWMgX19kZXZpbml0IGludCB3bTg5MTVfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCB3bTg5MTVfcHJpdiAqd204OTE1OwotCWludCByZXQ7Ci0KLQl3bTg5MTUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTE1X3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAod204OTE1ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTE1KTsKLQotCWlmIChkZXZfZ2V0X3BsYXRkYXRhKCZpMmMtPmRldikpCi0JCW1lbWNweSgmd204OTE1LT5wZGF0YSwgZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpLAotCQkgICAgICAgc2l6ZW9mKHdtODkxNS0+cGRhdGEpKTsKLQotCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPiAwKSB7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUod204OTE1LT5wZGF0YS5sZG9fZW5hLAotCQkJCSAgICAgICBHUElPRl9PVVRfSU5JVF9MT1csICJXTTg5MTUgRU5BIik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQ6ICVkXG4iLAotCQkJCXdtODkxNS0+cGRhdGEubGRvX2VuYSwgcmV0KTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfQotCi0JcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCi0JCQkJICAgICAmc29jX2NvZGVjX2Rldl93bTg5MTUsIHdtODkxNV9kYWksCi0JCQkJICAgICBBUlJBWV9TSVpFKHdtODkxNV9kYWkpKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZ3BpbzsKLQotCXJldHVybiByZXQ7Ci0KLWVycl9ncGlvOgotCWlmICh3bTg5MTUtPnBkYXRhLmxkb19lbmEgPiAwKQotCQlncGlvX2ZyZWUod204OTE1LT5wZGF0YS5sZG9fZW5hKTsKLWVycjoKLQlrZnJlZSh3bTg5MTUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTE1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgd204OTE1X3ByaXYgKndtODkxNSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7Ci0JaWYgKHdtODkxNS0+cGRhdGEubGRvX2VuYSA+IDApCi0JCWdwaW9fZnJlZSh3bTg5MTUtPnBkYXRhLmxkb19lbmEpOwotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODkxNV9pMmNfaWRbXSA9IHsKLQl7ICJ3bTg5MTUiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODkxNV9pMmNfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204OTE1X2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAid204OTE1IiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUgPSAgICB3bTg5MTVfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODkxNV9pMmNfcmVtb3ZlKSwKLQkuaWRfdGFibGUgPSB3bTg5MTVfaTJjX2lkLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgd204OTE1X21vZGluaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODkxNV9pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004OTE1IEkyQyBkcml2ZXI6ICVkXG4iLAotCQkgICAgICAgcmV0KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotbW9kdWxlX2luaXQod204OTE1X21vZGluaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgd204OTE1X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmd204OTE1X2kyY19kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQod204OTE1X2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTE1IGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwZmZkNy4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcxNyArMCwwIEBACi0vKgotICogd204OTE1LmggLSBXTTg5MTUgYXVkaW8gY29kZWMgaW50ZXJmYWNlCi0gKgotICogQ29weXJpZ2h0IDIwMTEgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBfV004OTE1X0gKLSNkZWZpbmUgX1dNODkxNV9ICi0KLSNkZWZpbmUgV004OTE1X1NZU0NMS19NQ0xLMSAxCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfTUNMSzIgMgotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0ZMTCAgIDMKLQotI2RlZmluZSBXTTg5MTVfRkxMX01DTEsxICAgICAgMQotI2RlZmluZSBXTTg5MTVfRkxMX01DTEsyICAgICAgMgotI2RlZmluZSBXTTg5MTVfRkxMX0RBQ0xSQ0xLMSAgMwotI2RlZmluZSBXTTg5MTVfRkxMX0JDTEsxICAgICAgNAotCi10eXBlZGVmIHZvaWQgKCp3bTg5MTVfcG9sYXJpdHlfZm4pKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvbGFyaXR5KTsKLQotaW50IHdtODkxNV9kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLAotCQkgIHdtODkxNV9wb2xhcml0eV9mbiBwb2xhcml0eV9jYik7Ci0KLS8qCi0gKiBSZWdpc3RlciB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgV004OTE1X1NPRlRXQVJFX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNCAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNSAgICAgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNiAgICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfNyAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUgV004OTE1X1BPV0VSX01BTkFHRU1FTlRfOCAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgV004OTE1X0xFRlRfTElORV9JTlBVVF9WT0xVTUUgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgV004OTE1X1JJR0hUX0xJTkVfSU5QVVRfVk9MVU1FICAgICAgICAgIDB4MTEKLSNkZWZpbmUgV004OTE1X0xJTkVfSU5QVVRfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MTIKLSNkZWZpbmUgV004OTE1X0RBQzFfSFBPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MTUKLSNkZWZpbmUgV004OTE1X0RBQzJfSFBPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MTYKLSNkZWZpbmUgV004OTE1X0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MTgKLSNkZWZpbmUgV004OTE1X0RBQzFfUklHSFRfVk9MVU1FICAgICAgICAgICAgICAgIDB4MTkKLSNkZWZpbmUgV004OTE1X0RBQzJfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MUEKLSNkZWZpbmUgV004OTE1X0RBQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAgICAgIDB4MUIKLSNkZWZpbmUgV004OTE1X09VVFBVVDFfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUMKLSNkZWZpbmUgV004OTE1X09VVFBVVDFfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4MUQKLSNkZWZpbmUgV004OTE1X09VVFBVVDJfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUUKLSNkZWZpbmUgV004OTE1X09VVFBVVDJfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4MUYKLSNkZWZpbmUgV004OTE1X01JQ0JJQVNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgV004OTE1X01JQ0JJQVNfMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEKLSNkZWZpbmUgV004OTE1X0xET18xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgKLSNkZWZpbmUgV004OTE1X0xET18yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKLSNkZWZpbmUgV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xICAgICAgICAgIDB4MzAKLSNkZWZpbmUgV004OTE1X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yICAgICAgICAgIDB4MzEKLSNkZWZpbmUgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMSAgICAgICAgICAgICAgIDB4MzQKLSNkZWZpbmUgV004OTE1X0hFQURQSE9ORV9ERVRFQ1RfMiAgICAgICAgICAgICAgIDB4MzUKLSNkZWZpbmUgV004OTE1X01JQ19ERVRFQ1RfMSAgICAgICAgICAgICAgICAgICAgIDB4MzgKLSNkZWZpbmUgV004OTE1X01JQ19ERVRFQ1RfMiAgICAgICAgICAgICAgICAgICAgIDB4MzkKLSNkZWZpbmUgV004OTE1X01JQ19ERVRFQ1RfMyAgICAgICAgICAgICAgICAgICAgIDB4M0EKLSNkZWZpbmUgV004OTE1X0NIQVJHRV9QVU1QXzEgICAgICAgICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgV004OTE1X0NIQVJHRV9QVU1QXzIgICAgICAgICAgICAgICAgICAgIDB4NDEKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzEgICAgICAgICAgICAgICAgICAgICAgIDB4NTAKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NTEKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTIKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NTQKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzYgICAgICAgICAgICAgICAgICAgICAgIDB4NTUKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPXzcgICAgICAgICAgICAgICAgICAgICAgIDB4NTYKLSNkZWZpbmUgV004OTE1X0RDX1NFUlZPX1JFQURCQUNLXzAgICAgICAgICAgICAgIDB4NTcKLSNkZWZpbmUgV004OTE1X0FOQUxPR1VFX0hQXzEgICAgICAgICAgICAgICAgICAgIDB4NjAKLSNkZWZpbmUgV004OTE1X0FOQUxPR1VFX0hQXzIgICAgICAgICAgICAgICAgICAgIDB4NjEKLSNkZWZpbmUgV004OTE1X0NISVBfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgIDB4MTAwCi0jZGVmaW5lIFdNODkxNV9DT05UUk9MX0lOVEVSRkFDRV8xICAgICAgICAgICAgICAweDEwMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMSAgICAgICAgICAgMHgxMTAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzIgICAgICAgICAgIDB4MTExCi0jZGVmaW5lIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgICAweDIwMAotI2RlZmluZSBXTTg5MTVfQUlGX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgMHgyMDEKLSNkZWZpbmUgV004OTE1X0NMT0NLSU5HXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4Ci0jZGVmaW5lIFdNODkxNV9DTE9DS0lOR18yICAgICAgICAgICAgICAgICAgICAgICAweDIwOQotI2RlZmluZSBXTTg5MTVfQUlGX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTAKLSNkZWZpbmUgV004OTE1X0ZMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4MjIwCi0jZGVmaW5lIFdNODkxNV9GTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDIyMQotI2RlZmluZSBXTTg5MTVfRkxMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHgyMjIKLSNkZWZpbmUgV004OTE1X0ZMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4MjIzCi0jZGVmaW5lIFdNODkxNV9GTExfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgICAweDIyNAotI2RlZmluZSBXTTg5MTVfRkxMX0NPTlRST0xfNiAgICAgICAgICAgICAgICAgICAgMHgyMjUKLSNkZWZpbmUgV004OTE1X0ZMTF9FRlNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI2Ci0jZGVmaW5lIFdNODkxNV9GTExfRUZTXzIgICAgICAgICAgICAgICAgICAgICAgICAweDIyNwotI2RlZmluZSBXTTg5MTVfQUlGMV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgzMDAKLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAxCi0jZGVmaW5lIFdNODkxNV9BSUYxX1RYX0xSQ0xLXzEgICAgICAgICAgICAgICAgICAweDMwMgotI2RlZmluZSBXTTg5MTVfQUlGMV9UWF9MUkNMS18yICAgICAgICAgICAgICAgICAgMHgzMDMKLSNkZWZpbmUgV004OTE1X0FJRjFfUlhfTFJDTEtfMSAgICAgICAgICAgICAgICAgIDB4MzA0Ci0jZGVmaW5lIFdNODkxNV9BSUYxX1JYX0xSQ0xLXzIgICAgICAgICAgICAgICAgICAweDMwNQotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xICAgICAgMHgzMDYKLSNkZWZpbmUgV004OTE1X0FJRjFUWF9EQVRBX0NPTkZJR1VSQVRJT05fMiAgICAgIDB4MzA3Ci0jZGVmaW5lIFdNODkxNV9BSUYxUlhfREFUQV9DT05GSUdVUkFUSU9OICAgICAgICAweDMwOAotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OICAgMHgzMDkKLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiAgIDB4MzBBCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04gICAweDMwQgotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OICAgMHgzMEMKLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiAgIDB4MzBECi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04gICAweDMwRQotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OICAgMHgzMEYKLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiAgIDB4MzEwCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04gICAweDMxMQotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OICAgMHgzMTIKLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiAgIDB4MzEzCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04gICAweDMxNAotI2RlZmluZSBXTTg5MTVfQUlGMVJYX01PTk9fQ09ORklHVVJBVElPTiAgICAgICAgMHgzMTUKLSNkZWZpbmUgV004OTE1X0FJRjFUWF9URVNUICAgICAgICAgICAgICAgICAgICAgIDB4MzFBCi0jZGVmaW5lIFdNODkxNV9BSUYyX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDMyMAotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgzMjEKLSNkZWZpbmUgV004OTE1X0FJRjJfVFhfTFJDTEtfMSAgICAgICAgICAgICAgICAgIDB4MzIyCi0jZGVmaW5lIFdNODkxNV9BSUYyX1RYX0xSQ0xLXzIgICAgICAgICAgICAgICAgICAweDMyMwotI2RlZmluZSBXTTg5MTVfQUlGMl9SWF9MUkNMS18xICAgICAgICAgICAgICAgICAgMHgzMjQKLSNkZWZpbmUgV004OTE1X0FJRjJfUlhfTFJDTEtfMiAgICAgICAgICAgICAgICAgIDB4MzI1Ci0jZGVmaW5lIFdNODkxNV9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzEgICAgICAweDMyNgotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8yICAgICAgMHgzMjcKLSNkZWZpbmUgV004OTE1X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT04gICAgICAgIDB4MzI4Ci0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04gICAweDMyOQotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OICAgMHgzMkEKLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTiAgIDB4MzJCCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT04gICAweDMyQwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX01PTk9fQ09ORklHVVJBVElPTiAgICAgICAgMHgzMkQKLSNkZWZpbmUgV004OTE1X0FJRjJUWF9URVNUICAgICAgICAgICAgICAgICAgICAgIDB4MzJGCi0jZGVmaW5lIFdNODkxNV9EU1AxX1RYX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAweDQwMAotI2RlZmluZSBXTTg5MTVfRFNQMV9UWF9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgMHg0MDEKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4NDAyCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAweDQwMwotI2RlZmluZSBXTTg5MTVfRFNQMV9UWF9GSUxURVJTICAgICAgICAgICAgICAgICAgMHg0MTAKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRklMVEVSU18xICAgICAgICAgICAgICAgIDB4NDIwCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0ZJTFRFUlNfMiAgICAgICAgICAgICAgICAweDQyMQotI2RlZmluZSBXTTg5MTVfRFNQMV9EUkNfMSAgICAgICAgICAgICAgICAgICAgICAgMHg0NDAKLSNkZWZpbmUgV004OTE1X0RTUDFfRFJDXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NDQxCi0jZGVmaW5lIFdNODkxNV9EU1AxX0RSQ18zICAgICAgICAgICAgICAgICAgICAgICAweDQ0MgotI2RlZmluZSBXTTg5MTVfRFNQMV9EUkNfNCAgICAgICAgICAgICAgICAgICAgICAgMHg0NDMKLSNkZWZpbmUgV004OTE1X0RTUDFfRFJDXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NDQ0Ci0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0dBSU5TXzEgICAgICAgICAgICAgICAweDQ4MAotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9HQUlOU18yICAgICAgICAgICAgICAgMHg0ODEKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8xX0EgICAgICAgICAgICAgIDB4NDgyCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMV9CICAgICAgICAgICAgICAweDQ4MwotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzFfUEcgICAgICAgICAgICAgMHg0ODQKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX0EgICAgICAgICAgICAgIDB4NDg1Ci0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfMl9CICAgICAgICAgICAgICAweDQ4NgotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzJfQyAgICAgICAgICAgICAgMHg0ODcKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8yX1BHICAgICAgICAgICAgIDB4NDg4Ci0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19BICAgICAgICAgICAgICAweDQ4OQotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzNfQiAgICAgICAgICAgICAgMHg0OEEKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF8zX0MgICAgICAgICAgICAgIDB4NDhCCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfM19QRyAgICAgICAgICAgICAweDQ4QwotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfQSAgICAgICAgICAgICAgMHg0OEQKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF80X0IgICAgICAgICAgICAgIDB4NDhFCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNF9DICAgICAgICAgICAgICAweDQ4RgotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzRfUEcgICAgICAgICAgICAgMHg0OTAKLSNkZWZpbmUgV004OTE1X0RTUDFfUlhfRVFfQkFORF81X0EgICAgICAgICAgICAgIDB4NDkxCi0jZGVmaW5lIFdNODkxNV9EU1AxX1JYX0VRX0JBTkRfNV9CICAgICAgICAgICAgICAweDQ5MgotI2RlZmluZSBXTTg5MTVfRFNQMV9SWF9FUV9CQU5EXzVfUEcgICAgICAgICAgICAgMHg0OTMKLSNkZWZpbmUgV004OTE1X0RTUDJfVFhfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4NTAwCi0jZGVmaW5lIFdNODkxNV9EU1AyX1RYX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAweDUwMQotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHg1MDIKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4NTAzCi0jZGVmaW5lIFdNODkxNV9EU1AyX1RYX0ZJTFRFUlMgICAgICAgICAgICAgICAgICAweDUxMAotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9GSUxURVJTXzEgICAgICAgICAgICAgICAgMHg1MjAKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRklMVEVSU18yICAgICAgICAgICAgICAgIDB4NTIxCi0jZGVmaW5lIFdNODkxNV9EU1AyX0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAweDU0MAotI2RlZmluZSBXTTg5MTVfRFNQMl9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgMHg1NDEKLSNkZWZpbmUgV004OTE1X0RTUDJfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTQyCi0jZGVmaW5lIFdNODkxNV9EU1AyX0RSQ180ICAgICAgICAgICAgICAgICAgICAgICAweDU0MwotI2RlZmluZSBXTTg5MTVfRFNQMl9EUkNfNSAgICAgICAgICAgICAgICAgICAgICAgMHg1NDQKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfR0FJTlNfMSAgICAgICAgICAgICAgIDB4NTgwCi0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0dBSU5TXzIgICAgICAgICAgICAgICAweDU4MQotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzFfQSAgICAgICAgICAgICAgMHg1ODIKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8xX0IgICAgICAgICAgICAgIDB4NTgzCi0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMV9QRyAgICAgICAgICAgICAweDU4NAotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfQSAgICAgICAgICAgICAgMHg1ODUKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8yX0IgICAgICAgICAgICAgIDB4NTg2Ci0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfMl9DICAgICAgICAgICAgICAweDU4NwotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzJfUEcgICAgICAgICAgICAgMHg1ODgKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX0EgICAgICAgICAgICAgIDB4NTg5Ci0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfM19CICAgICAgICAgICAgICAweDU4QQotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzNfQyAgICAgICAgICAgICAgMHg1OEIKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF8zX1BHICAgICAgICAgICAgIDB4NThDCi0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9BICAgICAgICAgICAgICAweDU4RAotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzRfQiAgICAgICAgICAgICAgMHg1OEUKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF80X0MgICAgICAgICAgICAgIDB4NThGCi0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNF9QRyAgICAgICAgICAgICAweDU5MAotI2RlZmluZSBXTTg5MTVfRFNQMl9SWF9FUV9CQU5EXzVfQSAgICAgICAgICAgICAgMHg1OTEKLSNkZWZpbmUgV004OTE1X0RTUDJfUlhfRVFfQkFORF81X0IgICAgICAgICAgICAgIDB4NTkyCi0jZGVmaW5lIFdNODkxNV9EU1AyX1JYX0VRX0JBTkRfNV9QRyAgICAgICAgICAgICAweDU5MwotI2RlZmluZSBXTTg5MTVfREFDMV9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDAKLSNkZWZpbmUgV004OTE1X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjAxCi0jZGVmaW5lIFdNODkxNV9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwMgotI2RlZmluZSBXTTg5MTVfREFDMl9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDMKLSNkZWZpbmUgV004OTE1X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjA0Ci0jZGVmaW5lIFdNODkxNV9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwNQotI2RlZmluZSBXTTg5MTVfRFNQMV9UWF9MRUZUX01JWEVSX1JPVVRJTkcgICAgICAgMHg2MDYKLSNkZWZpbmUgV004OTE1X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORyAgICAgIDB4NjA3Ci0jZGVmaW5lIFdNODkxNV9EU1AyX1RYX0xFRlRfTUlYRVJfUk9VVElORyAgICAgICAweDYwOAotI2RlZmluZSBXTTg5MTVfRFNQMl9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HICAgICAgMHg2MDkKLSNkZWZpbmUgV004OTE1X0RTUF9UWF9NSVhFUl9TRUxFQ1QgICAgICAgICAgICAgIDB4NjBBCi0jZGVmaW5lIFdNODkxNV9EQUNfU09GVE1VVEUgICAgICAgICAgICAgICAgICAgICAweDYxMAotI2RlZmluZSBXTTg5MTVfT1ZFUlNBTVBMSU5HICAgICAgICAgICAgICAgICAgICAgMHg2MjAKLSNkZWZpbmUgV004OTE1X1NJREVUT05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIxCi0jZGVmaW5lIFdNODkxNV9HUElPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMAotI2RlZmluZSBXTTg5MTVfR1BJT18yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDEKLSNkZWZpbmUgV004OTE1X0dQSU9fMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAyCi0jZGVmaW5lIFdNODkxNV9HUElPXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMwotI2RlZmluZSBXTTg5MTVfR1BJT181ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDQKLSNkZWZpbmUgV004OTE1X1BVTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4NzIwCi0jZGVmaW5lIFdNODkxNV9QVUxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDcyMQotI2RlZmluZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18xICAgICAgICAgICAgICAgMHg3MzAKLSNkZWZpbmUgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMiAgICAgICAgICAgICAgIDB4NzMxCi0jZGVmaW5lIFdNODkxNV9JTlRFUlJVUFRfUkFXX1NUQVRVU18yICAgICAgICAgICAweDczMgotI2RlZmluZSBXTTg5MTVfSU5URVJSVVBUX1NUQVRVU18xX01BU0sgICAgICAgICAgMHg3MzgKLSNkZWZpbmUgV004OTE1X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLICAgICAgICAgIDB4NzM5Ci0jZGVmaW5lIFdNODkxNV9JTlRFUlJVUFRfQ09OVFJPTCAgICAgICAgICAgICAgICAweDc0MAotI2RlZmluZSBXTTg5MTVfTEVGVF9QRE1fU1BFQUtFUiAgICAgICAgICAgICAgICAgMHg4MDAKLSNkZWZpbmUgV004OTE1X1JJR0hUX1BETV9TUEVBS0VSICAgICAgICAgICAgICAgIDB4ODAxCi0jZGVmaW5lIFdNODkxNV9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFICAgICAgICAweDgwMgotI2RlZmluZSBXTTg5MTVfUERNX1NQRUFLRVJfVk9MVU1FICAgICAgICAgICAgICAgMHg4MDMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8wICAgICAgICAgICAgICAgIDB4MzAwMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHgzMDAxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDMwMDIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zICAgICAgICAgICAgICAgIDB4MzAwMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQgICAgICAgICAgICAgICAgMHgzMDA0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNSAgICAgICAgICAgICAgICAweDMwMDUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82ICAgICAgICAgICAgICAgIDB4MzAwNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzcgICAgICAgICAgICAgICAgMHgzMDA3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOCAgICAgICAgICAgICAgICAweDMwMDgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85ICAgICAgICAgICAgICAgIDB4MzAwOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwICAgICAgICAgICAgICAgMHgzMDBBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTEgICAgICAgICAgICAgICAweDMwMEIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMiAgICAgICAgICAgICAgIDB4MzAwQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzICAgICAgICAgICAgICAgMHgzMDBECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQgICAgICAgICAgICAgICAweDMwMEUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNSAgICAgICAgICAgICAgIDB4MzAwRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2ICAgICAgICAgICAgICAgMHgzMDEwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTcgICAgICAgICAgICAgICAweDMwMTEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOCAgICAgICAgICAgICAgIDB4MzAxMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5ICAgICAgICAgICAgICAgMHgzMDEzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjAgICAgICAgICAgICAgICAweDMwMTQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMSAgICAgICAgICAgICAgIDB4MzAxNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyICAgICAgICAgICAgICAgMHgzMDE2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjMgICAgICAgICAgICAgICAweDMwMTcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNCAgICAgICAgICAgICAgIDB4MzAxOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1ICAgICAgICAgICAgICAgMHgzMDE5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjYgICAgICAgICAgICAgICAweDMwMUEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNyAgICAgICAgICAgICAgIDB4MzAxQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4ICAgICAgICAgICAgICAgMHgzMDFDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjkgICAgICAgICAgICAgICAweDMwMUQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMCAgICAgICAgICAgICAgIDB4MzAxRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxICAgICAgICAgICAgICAgMHgzMDFGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzIgICAgICAgICAgICAgICAweDMwMjAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMyAgICAgICAgICAgICAgIDB4MzAyMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0ICAgICAgICAgICAgICAgMHgzMDIyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzUgICAgICAgICAgICAgICAweDMwMjMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNiAgICAgICAgICAgICAgIDB4MzAyNAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3ICAgICAgICAgICAgICAgMHgzMDI1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzggICAgICAgICAgICAgICAweDMwMjYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOSAgICAgICAgICAgICAgIDB4MzAyNwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwICAgICAgICAgICAgICAgMHgzMDI4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDEgICAgICAgICAgICAgICAweDMwMjkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MiAgICAgICAgICAgICAgIDB4MzAyQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzICAgICAgICAgICAgICAgMHgzMDJCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQgICAgICAgICAgICAgICAweDMwMkMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NSAgICAgICAgICAgICAgIDB4MzAyRAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2ICAgICAgICAgICAgICAgMHgzMDJFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDcgICAgICAgICAgICAgICAweDMwMkYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OCAgICAgICAgICAgICAgIDB4MzAzMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5ICAgICAgICAgICAgICAgMHgzMDMxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTAgICAgICAgICAgICAgICAweDMwMzIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MSAgICAgICAgICAgICAgIDB4MzAzMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUyICAgICAgICAgICAgICAgMHgzMDM0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTMgICAgICAgICAgICAgICAweDMwMzUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81NCAgICAgICAgICAgICAgIDB4MzAzNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU1ICAgICAgICAgICAgICAgMHgzMDM3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTYgICAgICAgICAgICAgICAweDMwMzgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81NyAgICAgICAgICAgICAgIDB4MzAzOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzU4ICAgICAgICAgICAgICAgMHgzMDNBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTkgICAgICAgICAgICAgICAweDMwM0IKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82MCAgICAgICAgICAgICAgIDB4MzAzQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzYxICAgICAgICAgICAgICAgMHgzMDNECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjIgICAgICAgICAgICAgICAweDMwM0UKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82MyAgICAgICAgICAgICAgIDB4MzAzRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY0ICAgICAgICAgICAgICAgMHgzMDQwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjUgICAgICAgICAgICAgICAweDMwNDEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82NiAgICAgICAgICAgICAgIDB4MzA0MgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzY3ICAgICAgICAgICAgICAgMHgzMDQzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNjggICAgICAgICAgICAgICAweDMwNDQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl82OSAgICAgICAgICAgICAgIDB4MzA0NQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzcwICAgICAgICAgICAgICAgMHgzMDQ2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzEgICAgICAgICAgICAgICAweDMwNDcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83MiAgICAgICAgICAgICAgIDB4MzA0OAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzczICAgICAgICAgICAgICAgMHgzMDQ5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzQgICAgICAgICAgICAgICAweDMwNEEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83NSAgICAgICAgICAgICAgIDB4MzA0QgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc2ICAgICAgICAgICAgICAgMHgzMDRDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNzcgICAgICAgICAgICAgICAweDMwNEQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl83OCAgICAgICAgICAgICAgIDB4MzA0RQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzc5ICAgICAgICAgICAgICAgMHgzMDRGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODAgICAgICAgICAgICAgICAweDMwNTAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84MSAgICAgICAgICAgICAgIDB4MzA1MQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzgyICAgICAgICAgICAgICAgMHgzMDUyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODMgICAgICAgICAgICAgICAweDMwNTMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84NCAgICAgICAgICAgICAgIDB4MzA1NAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg1ICAgICAgICAgICAgICAgMHgzMDU1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODYgICAgICAgICAgICAgICAweDMwNTYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl84NyAgICAgICAgICAgICAgIDB4MzA1NwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzg4ICAgICAgICAgICAgICAgMHgzMDU4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfODkgICAgICAgICAgICAgICAweDMwNTkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85MCAgICAgICAgICAgICAgIDB4MzA1QQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzkxICAgICAgICAgICAgICAgMHgzMDVCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTIgICAgICAgICAgICAgICAweDMwNUMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85MyAgICAgICAgICAgICAgIDB4MzA1RAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzk0ICAgICAgICAgICAgICAgMHgzMDVFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTUgICAgICAgICAgICAgICAweDMwNUYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85NiAgICAgICAgICAgICAgIDB4MzA2MAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzk3ICAgICAgICAgICAgICAgMHgzMDYxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfOTggICAgICAgICAgICAgICAweDMwNjIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl85OSAgICAgICAgICAgICAgIDB4MzA2MwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwMCAgICAgICAgICAgICAgMHgzMDY0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTAxICAgICAgICAgICAgICAweDMwNjUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDIgICAgICAgICAgICAgIDB4MzA2NgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwMyAgICAgICAgICAgICAgMHgzMDY3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTA0ICAgICAgICAgICAgICAweDMwNjgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDUgICAgICAgICAgICAgIDB4MzA2OQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwNiAgICAgICAgICAgICAgMHgzMDZBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTA3ICAgICAgICAgICAgICAweDMwNkIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMDggICAgICAgICAgICAgIDB4MzA2QwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEwOSAgICAgICAgICAgICAgMHgzMDZECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTEwICAgICAgICAgICAgICAweDMwNkUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTEgICAgICAgICAgICAgIDB4MzA2RgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExMiAgICAgICAgICAgICAgMHgzMDcwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTEzICAgICAgICAgICAgICAweDMwNzEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTQgICAgICAgICAgICAgIDB4MzA3MgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExNSAgICAgICAgICAgICAgMHgzMDczCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTE2ICAgICAgICAgICAgICAweDMwNzQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMTcgICAgICAgICAgICAgIDB4MzA3NQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzExOCAgICAgICAgICAgICAgMHgzMDc2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTE5ICAgICAgICAgICAgICAweDMwNzcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjAgICAgICAgICAgICAgIDB4MzA3OAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyMSAgICAgICAgICAgICAgMHgzMDc5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTIyICAgICAgICAgICAgICAweDMwN0EKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjMgICAgICAgICAgICAgIDB4MzA3QgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyNCAgICAgICAgICAgICAgMHgzMDdDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTI1ICAgICAgICAgICAgICAweDMwN0QKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjYgICAgICAgICAgICAgIDB4MzA3RQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEyNyAgICAgICAgICAgICAgMHgzMDdGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTI4ICAgICAgICAgICAgICAweDMwODAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMjkgICAgICAgICAgICAgIDB4MzA4MQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzMCAgICAgICAgICAgICAgMHgzMDgyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTMxICAgICAgICAgICAgICAweDMwODMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzIgICAgICAgICAgICAgIDB4MzA4NAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzMyAgICAgICAgICAgICAgMHgzMDg1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTM0ICAgICAgICAgICAgICAweDMwODYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzUgICAgICAgICAgICAgIDB4MzA4NwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzNiAgICAgICAgICAgICAgMHgzMDg4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTM3ICAgICAgICAgICAgICAweDMwODkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xMzggICAgICAgICAgICAgIDB4MzA4QQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzEzOSAgICAgICAgICAgICAgMHgzMDhCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQwICAgICAgICAgICAgICAweDMwOEMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDEgICAgICAgICAgICAgIDB4MzA4RAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0MiAgICAgICAgICAgICAgMHgzMDhFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQzICAgICAgICAgICAgICAweDMwOEYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDQgICAgICAgICAgICAgIDB4MzA5MAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0NSAgICAgICAgICAgICAgMHgzMDkxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQ2ICAgICAgICAgICAgICAweDMwOTIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNDcgICAgICAgICAgICAgIDB4MzA5MwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE0OCAgICAgICAgICAgICAgMHgzMDk0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTQ5ICAgICAgICAgICAgICAweDMwOTUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTAgICAgICAgICAgICAgIDB4MzA5NgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1MSAgICAgICAgICAgICAgMHgzMDk3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTUyICAgICAgICAgICAgICAweDMwOTgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTMgICAgICAgICAgICAgIDB4MzA5OQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1NCAgICAgICAgICAgICAgMHgzMDlBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTU1ICAgICAgICAgICAgICAweDMwOUIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTYgICAgICAgICAgICAgIDB4MzA5QwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE1NyAgICAgICAgICAgICAgMHgzMDlECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTU4ICAgICAgICAgICAgICAweDMwOUUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNTkgICAgICAgICAgICAgIDB4MzA5RgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2MCAgICAgICAgICAgICAgMHgzMEEwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTYxICAgICAgICAgICAgICAweDMwQTEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjIgICAgICAgICAgICAgIDB4MzBBMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2MyAgICAgICAgICAgICAgMHgzMEEzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTY0ICAgICAgICAgICAgICAweDMwQTQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjUgICAgICAgICAgICAgIDB4MzBBNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2NiAgICAgICAgICAgICAgMHgzMEE2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTY3ICAgICAgICAgICAgICAweDMwQTcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNjggICAgICAgICAgICAgIDB4MzBBOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE2OSAgICAgICAgICAgICAgMHgzMEE5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTcwICAgICAgICAgICAgICAweDMwQUEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzEgICAgICAgICAgICAgIDB4MzBBQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3MiAgICAgICAgICAgICAgMHgzMEFDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTczICAgICAgICAgICAgICAweDMwQUQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzQgICAgICAgICAgICAgIDB4MzBBRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3NSAgICAgICAgICAgICAgMHgzMEFGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTc2ICAgICAgICAgICAgICAweDMwQjAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xNzcgICAgICAgICAgICAgIDB4MzBCMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE3OCAgICAgICAgICAgICAgMHgzMEIyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTc5ICAgICAgICAgICAgICAweDMwQjMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODAgICAgICAgICAgICAgIDB4MzBCNAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4MSAgICAgICAgICAgICAgMHgzMEI1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTgyICAgICAgICAgICAgICAweDMwQjYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODMgICAgICAgICAgICAgIDB4MzBCNwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4NCAgICAgICAgICAgICAgMHgzMEI4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTg1ICAgICAgICAgICAgICAweDMwQjkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODYgICAgICAgICAgICAgIDB4MzBCQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE4NyAgICAgICAgICAgICAgMHgzMEJCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTg4ICAgICAgICAgICAgICAweDMwQkMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xODkgICAgICAgICAgICAgIDB4MzBCRAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5MCAgICAgICAgICAgICAgMHgzMEJFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTkxICAgICAgICAgICAgICAweDMwQkYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTIgICAgICAgICAgICAgIDB4MzBDMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5MyAgICAgICAgICAgICAgMHgzMEMxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTk0ICAgICAgICAgICAgICAweDMwQzIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTUgICAgICAgICAgICAgIDB4MzBDMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5NiAgICAgICAgICAgICAgMHgzMEM0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMTk3ICAgICAgICAgICAgICAweDMwQzUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8xOTggICAgICAgICAgICAgIDB4MzBDNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzE5OSAgICAgICAgICAgICAgMHgzMEM3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjAwICAgICAgICAgICAgICAweDMwQzgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDEgICAgICAgICAgICAgIDB4MzBDOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwMiAgICAgICAgICAgICAgMHgzMENBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjAzICAgICAgICAgICAgICAweDMwQ0IKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDQgICAgICAgICAgICAgIDB4MzBDQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwNSAgICAgICAgICAgICAgMHgzMENECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjA2ICAgICAgICAgICAgICAweDMwQ0UKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMDcgICAgICAgICAgICAgIDB4MzBDRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIwOCAgICAgICAgICAgICAgMHgzMEQwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjA5ICAgICAgICAgICAgICAweDMwRDEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTAgICAgICAgICAgICAgIDB4MzBEMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxMSAgICAgICAgICAgICAgMHgzMEQzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjEyICAgICAgICAgICAgICAweDMwRDQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTMgICAgICAgICAgICAgIDB4MzBENQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxNCAgICAgICAgICAgICAgMHgzMEQ2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjE1ICAgICAgICAgICAgICAweDMwRDcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTYgICAgICAgICAgICAgIDB4MzBEOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIxNyAgICAgICAgICAgICAgMHgzMEQ5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjE4ICAgICAgICAgICAgICAweDMwREEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMTkgICAgICAgICAgICAgIDB4MzBEQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyMCAgICAgICAgICAgICAgMHgzMERDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjIxICAgICAgICAgICAgICAweDMwREQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjIgICAgICAgICAgICAgIDB4MzBERQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyMyAgICAgICAgICAgICAgMHgzMERGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjI0ICAgICAgICAgICAgICAweDMwRTAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjUgICAgICAgICAgICAgIDB4MzBFMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyNiAgICAgICAgICAgICAgMHgzMEUyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjI3ICAgICAgICAgICAgICAweDMwRTMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMjggICAgICAgICAgICAgIDB4MzBFNAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIyOSAgICAgICAgICAgICAgMHgzMEU1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjMwICAgICAgICAgICAgICAweDMwRTYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzEgICAgICAgICAgICAgIDB4MzBFNwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzMiAgICAgICAgICAgICAgMHgzMEU4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjMzICAgICAgICAgICAgICAweDMwRTkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzQgICAgICAgICAgICAgIDB4MzBFQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzNSAgICAgICAgICAgICAgMHgzMEVCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjM2ICAgICAgICAgICAgICAweDMwRUMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yMzcgICAgICAgICAgICAgIDB4MzBFRAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzIzOCAgICAgICAgICAgICAgMHgzMEVFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjM5ICAgICAgICAgICAgICAweDMwRUYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDAgICAgICAgICAgICAgIDB4MzBGMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0MSAgICAgICAgICAgICAgMHgzMEYxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQyICAgICAgICAgICAgICAweDMwRjIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDMgICAgICAgICAgICAgIDB4MzBGMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0NCAgICAgICAgICAgICAgMHgzMEY0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ1ICAgICAgICAgICAgICAweDMwRjUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDYgICAgICAgICAgICAgIDB4MzBGNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI0NyAgICAgICAgICAgICAgMHgzMEY3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjQ4ICAgICAgICAgICAgICAweDMwRjgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNDkgICAgICAgICAgICAgIDB4MzBGOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1MCAgICAgICAgICAgICAgMHgzMEZBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjUxICAgICAgICAgICAgICAweDMwRkIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTIgICAgICAgICAgICAgIDB4MzBGQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1MyAgICAgICAgICAgICAgMHgzMEZECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjU0ICAgICAgICAgICAgICAweDMwRkUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTUgICAgICAgICAgICAgIDB4MzBGRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1NiAgICAgICAgICAgICAgMHgzMTAwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjU3ICAgICAgICAgICAgICAweDMxMDEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNTggICAgICAgICAgICAgIDB4MzEwMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI1OSAgICAgICAgICAgICAgMHgzMTAzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjYwICAgICAgICAgICAgICAweDMxMDQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjEgICAgICAgICAgICAgIDB4MzEwNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2MiAgICAgICAgICAgICAgMHgzMTA2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjYzICAgICAgICAgICAgICAweDMxMDcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjQgICAgICAgICAgICAgIDB4MzEwOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2NSAgICAgICAgICAgICAgMHgzMTA5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjY2ICAgICAgICAgICAgICAweDMxMEEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNjcgICAgICAgICAgICAgIDB4MzEwQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI2OCAgICAgICAgICAgICAgMHgzMTBDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjY5ICAgICAgICAgICAgICAweDMxMEQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzAgICAgICAgICAgICAgIDB4MzEwRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3MSAgICAgICAgICAgICAgMHgzMTBGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjcyICAgICAgICAgICAgICAweDMxMTAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzMgICAgICAgICAgICAgIDB4MzExMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3NCAgICAgICAgICAgICAgMHgzMTEyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjc1ICAgICAgICAgICAgICAweDMxMTMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzYgICAgICAgICAgICAgIDB4MzExNAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI3NyAgICAgICAgICAgICAgMHgzMTE1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjc4ICAgICAgICAgICAgICAweDMxMTYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yNzkgICAgICAgICAgICAgIDB4MzExNwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4MCAgICAgICAgICAgICAgMHgzMTE4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjgxICAgICAgICAgICAgICAweDMxMTkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODIgICAgICAgICAgICAgIDB4MzExQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4MyAgICAgICAgICAgICAgMHgzMTFCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjg0ICAgICAgICAgICAgICAweDMxMUMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODUgICAgICAgICAgICAgIDB4MzExRAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4NiAgICAgICAgICAgICAgMHgzMTFFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjg3ICAgICAgICAgICAgICAweDMxMUYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yODggICAgICAgICAgICAgIDB4MzEyMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI4OSAgICAgICAgICAgICAgMHgzMTIxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjkwICAgICAgICAgICAgICAweDMxMjIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTEgICAgICAgICAgICAgIDB4MzEyMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5MiAgICAgICAgICAgICAgMHgzMTI0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjkzICAgICAgICAgICAgICAweDMxMjUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTQgICAgICAgICAgICAgIDB4MzEyNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5NSAgICAgICAgICAgICAgMHgzMTI3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjk2ICAgICAgICAgICAgICAweDMxMjgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8yOTcgICAgICAgICAgICAgIDB4MzEyOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzI5OCAgICAgICAgICAgICAgMHgzMTJBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMjk5ICAgICAgICAgICAgICAweDMxMkIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDAgICAgICAgICAgICAgIDB4MzEyQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwMSAgICAgICAgICAgICAgMHgzMTJECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzAyICAgICAgICAgICAgICAweDMxMkUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDMgICAgICAgICAgICAgIDB4MzEyRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwNCAgICAgICAgICAgICAgMHgzMTMwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzA1ICAgICAgICAgICAgICAweDMxMzEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDYgICAgICAgICAgICAgIDB4MzEzMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMwNyAgICAgICAgICAgICAgMHgzMTMzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzA4ICAgICAgICAgICAgICAweDMxMzQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMDkgICAgICAgICAgICAgIDB4MzEzNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxMCAgICAgICAgICAgICAgMHgzMTM2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzExICAgICAgICAgICAgICAweDMxMzcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTIgICAgICAgICAgICAgIDB4MzEzOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxMyAgICAgICAgICAgICAgMHgzMTM5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzE0ICAgICAgICAgICAgICAweDMxM0EKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTUgICAgICAgICAgICAgIDB4MzEzQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxNiAgICAgICAgICAgICAgMHgzMTNDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzE3ICAgICAgICAgICAgICAweDMxM0QKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMTggICAgICAgICAgICAgIDB4MzEzRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMxOSAgICAgICAgICAgICAgMHgzMTNGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzIwICAgICAgICAgICAgICAweDMxNDAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjEgICAgICAgICAgICAgIDB4MzE0MQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyMiAgICAgICAgICAgICAgMHgzMTQyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzIzICAgICAgICAgICAgICAweDMxNDMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjQgICAgICAgICAgICAgIDB4MzE0NAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyNSAgICAgICAgICAgICAgMHgzMTQ1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzI2ICAgICAgICAgICAgICAweDMxNDYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMjcgICAgICAgICAgICAgIDB4MzE0NwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMyOCAgICAgICAgICAgICAgMHgzMTQ4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzI5ICAgICAgICAgICAgICAweDMxNDkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzAgICAgICAgICAgICAgIDB4MzE0QQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzMSAgICAgICAgICAgICAgMHgzMTRCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzMyICAgICAgICAgICAgICAweDMxNEMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzMgICAgICAgICAgICAgIDB4MzE0RAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzNCAgICAgICAgICAgICAgMHgzMTRFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzM1ICAgICAgICAgICAgICAweDMxNEYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzYgICAgICAgICAgICAgIDB4MzE1MAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzMzNyAgICAgICAgICAgICAgMHgzMTUxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzM4ICAgICAgICAgICAgICAweDMxNTIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zMzkgICAgICAgICAgICAgIDB4MzE1MwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0MCAgICAgICAgICAgICAgMHgzMTU0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQxICAgICAgICAgICAgICAweDMxNTUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDIgICAgICAgICAgICAgIDB4MzE1NgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0MyAgICAgICAgICAgICAgMHgzMTU3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ0ICAgICAgICAgICAgICAweDMxNTgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDUgICAgICAgICAgICAgIDB4MzE1OQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0NiAgICAgICAgICAgICAgMHgzMTVBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzQ3ICAgICAgICAgICAgICAweDMxNUIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNDggICAgICAgICAgICAgIDB4MzE1QwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM0OSAgICAgICAgICAgICAgMHgzMTVECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzUwICAgICAgICAgICAgICAweDMxNUUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTEgICAgICAgICAgICAgIDB4MzE1RgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1MiAgICAgICAgICAgICAgMHgzMTYwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzUzICAgICAgICAgICAgICAweDMxNjEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTQgICAgICAgICAgICAgIDB4MzE2MgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1NSAgICAgICAgICAgICAgMHgzMTYzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzU2ICAgICAgICAgICAgICAweDMxNjQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNTcgICAgICAgICAgICAgIDB4MzE2NQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM1OCAgICAgICAgICAgICAgMHgzMTY2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzU5ICAgICAgICAgICAgICAweDMxNjcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjAgICAgICAgICAgICAgIDB4MzE2OAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2MSAgICAgICAgICAgICAgMHgzMTY5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzYyICAgICAgICAgICAgICAweDMxNkEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjMgICAgICAgICAgICAgIDB4MzE2QgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2NCAgICAgICAgICAgICAgMHgzMTZDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzY1ICAgICAgICAgICAgICAweDMxNkQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjYgICAgICAgICAgICAgIDB4MzE2RQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM2NyAgICAgICAgICAgICAgMHgzMTZGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzY4ICAgICAgICAgICAgICAweDMxNzAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNjkgICAgICAgICAgICAgIDB4MzE3MQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3MCAgICAgICAgICAgICAgMHgzMTcyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzcxICAgICAgICAgICAgICAweDMxNzMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzIgICAgICAgICAgICAgIDB4MzE3NAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3MyAgICAgICAgICAgICAgMHgzMTc1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzc0ICAgICAgICAgICAgICAweDMxNzYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzUgICAgICAgICAgICAgIDB4MzE3NwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3NiAgICAgICAgICAgICAgMHgzMTc4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzc3ICAgICAgICAgICAgICAweDMxNzkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zNzggICAgICAgICAgICAgIDB4MzE3QQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM3OSAgICAgICAgICAgICAgMHgzMTdCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzgwICAgICAgICAgICAgICAweDMxN0MKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODEgICAgICAgICAgICAgIDB4MzE3RAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4MiAgICAgICAgICAgICAgMHgzMTdFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzgzICAgICAgICAgICAgICAweDMxN0YKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODQgICAgICAgICAgICAgIDB4MzE4MAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4NSAgICAgICAgICAgICAgMHgzMTgxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzg2ICAgICAgICAgICAgICAweDMxODIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zODcgICAgICAgICAgICAgIDB4MzE4MwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM4OCAgICAgICAgICAgICAgMHgzMTg0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzg5ICAgICAgICAgICAgICAweDMxODUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTAgICAgICAgICAgICAgIDB4MzE4NgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5MSAgICAgICAgICAgICAgMHgzMTg3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzkyICAgICAgICAgICAgICAweDMxODgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTMgICAgICAgICAgICAgIDB4MzE4OQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5NCAgICAgICAgICAgICAgMHgzMThBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzk1ICAgICAgICAgICAgICAweDMxOEIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTYgICAgICAgICAgICAgIDB4MzE4QwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzM5NyAgICAgICAgICAgICAgMHgzMThECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfMzk4ICAgICAgICAgICAgICAweDMxOEUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl8zOTkgICAgICAgICAgICAgIDB4MzE4RgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwMCAgICAgICAgICAgICAgMHgzMTkwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDAxICAgICAgICAgICAgICAweDMxOTEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDIgICAgICAgICAgICAgIDB4MzE5MgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwMyAgICAgICAgICAgICAgMHgzMTkzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDA0ICAgICAgICAgICAgICAweDMxOTQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDUgICAgICAgICAgICAgIDB4MzE5NQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwNiAgICAgICAgICAgICAgMHgzMTk2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDA3ICAgICAgICAgICAgICAweDMxOTcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MDggICAgICAgICAgICAgIDB4MzE5OAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQwOSAgICAgICAgICAgICAgMHgzMTk5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDEwICAgICAgICAgICAgICAweDMxOUEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTEgICAgICAgICAgICAgIDB4MzE5QgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxMiAgICAgICAgICAgICAgMHgzMTlDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDEzICAgICAgICAgICAgICAweDMxOUQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTQgICAgICAgICAgICAgIDB4MzE5RQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxNSAgICAgICAgICAgICAgMHgzMTlGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDE2ICAgICAgICAgICAgICAweDMxQTAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MTcgICAgICAgICAgICAgIDB4MzFBMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQxOCAgICAgICAgICAgICAgMHgzMUEyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDE5ICAgICAgICAgICAgICAweDMxQTMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjAgICAgICAgICAgICAgIDB4MzFBNAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyMSAgICAgICAgICAgICAgMHgzMUE1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDIyICAgICAgICAgICAgICAweDMxQTYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjMgICAgICAgICAgICAgIDB4MzFBNwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyNCAgICAgICAgICAgICAgMHgzMUE4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDI1ICAgICAgICAgICAgICAweDMxQTkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjYgICAgICAgICAgICAgIDB4MzFBQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQyNyAgICAgICAgICAgICAgMHgzMUFCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDI4ICAgICAgICAgICAgICAweDMxQUMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MjkgICAgICAgICAgICAgIDB4MzFBRAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzMCAgICAgICAgICAgICAgMHgzMUFFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDMxICAgICAgICAgICAgICAweDMxQUYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzIgICAgICAgICAgICAgIDB4MzFCMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzMyAgICAgICAgICAgICAgMHgzMUIxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDM0ICAgICAgICAgICAgICAweDMxQjIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzUgICAgICAgICAgICAgIDB4MzFCMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzNiAgICAgICAgICAgICAgMHgzMUI0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDM3ICAgICAgICAgICAgICAweDMxQjUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80MzggICAgICAgICAgICAgIDB4MzFCNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQzOSAgICAgICAgICAgICAgMHgzMUI3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQwICAgICAgICAgICAgICAweDMxQjgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDEgICAgICAgICAgICAgIDB4MzFCOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0MiAgICAgICAgICAgICAgMHgzMUJBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQzICAgICAgICAgICAgICAweDMxQkIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDQgICAgICAgICAgICAgIDB4MzFCQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0NSAgICAgICAgICAgICAgMHgzMUJECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQ2ICAgICAgICAgICAgICAweDMxQkUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NDcgICAgICAgICAgICAgIDB4MzFCRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ0OCAgICAgICAgICAgICAgMHgzMUMwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDQ5ICAgICAgICAgICAgICAweDMxQzEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTAgICAgICAgICAgICAgIDB4MzFDMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1MSAgICAgICAgICAgICAgMHgzMUMzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDUyICAgICAgICAgICAgICAweDMxQzQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTMgICAgICAgICAgICAgIDB4MzFDNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1NCAgICAgICAgICAgICAgMHgzMUM2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDU1ICAgICAgICAgICAgICAweDMxQzcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTYgICAgICAgICAgICAgIDB4MzFDOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ1NyAgICAgICAgICAgICAgMHgzMUM5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDU4ICAgICAgICAgICAgICAweDMxQ0EKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NTkgICAgICAgICAgICAgIDB4MzFDQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2MCAgICAgICAgICAgICAgMHgzMUNDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDYxICAgICAgICAgICAgICAweDMxQ0QKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjIgICAgICAgICAgICAgIDB4MzFDRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2MyAgICAgICAgICAgICAgMHgzMUNGCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDY0ICAgICAgICAgICAgICAweDMxRDAKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjUgICAgICAgICAgICAgIDB4MzFEMQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2NiAgICAgICAgICAgICAgMHgzMUQyCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDY3ICAgICAgICAgICAgICAweDMxRDMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NjggICAgICAgICAgICAgIDB4MzFENAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ2OSAgICAgICAgICAgICAgMHgzMUQ1Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDcwICAgICAgICAgICAgICAweDMxRDYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzEgICAgICAgICAgICAgIDB4MzFENwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3MiAgICAgICAgICAgICAgMHgzMUQ4Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDczICAgICAgICAgICAgICAweDMxRDkKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzQgICAgICAgICAgICAgIDB4MzFEQQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3NSAgICAgICAgICAgICAgMHgzMURCCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDc2ICAgICAgICAgICAgICAweDMxREMKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80NzcgICAgICAgICAgICAgIDB4MzFERAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ3OCAgICAgICAgICAgICAgMHgzMURFCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDc5ICAgICAgICAgICAgICAweDMxREYKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODAgICAgICAgICAgICAgIDB4MzFFMAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4MSAgICAgICAgICAgICAgMHgzMUUxCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDgyICAgICAgICAgICAgICAweDMxRTIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODMgICAgICAgICAgICAgIDB4MzFFMwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4NCAgICAgICAgICAgICAgMHgzMUU0Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDg1ICAgICAgICAgICAgICAweDMxRTUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODYgICAgICAgICAgICAgIDB4MzFFNgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ4NyAgICAgICAgICAgICAgMHgzMUU3Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDg4ICAgICAgICAgICAgICAweDMxRTgKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80ODkgICAgICAgICAgICAgIDB4MzFFOQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5MCAgICAgICAgICAgICAgMHgzMUVBCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDkxICAgICAgICAgICAgICAweDMxRUIKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTIgICAgICAgICAgICAgIDB4MzFFQwotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5MyAgICAgICAgICAgICAgMHgzMUVECi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDk0ICAgICAgICAgICAgICAweDMxRUUKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTUgICAgICAgICAgICAgIDB4MzFFRgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5NiAgICAgICAgICAgICAgMHgzMUYwCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNDk3ICAgICAgICAgICAgICAweDMxRjEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl80OTggICAgICAgICAgICAgIDB4MzFGMgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzQ5OSAgICAgICAgICAgICAgMHgzMUYzCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTAwICAgICAgICAgICAgICAweDMxRjQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDEgICAgICAgICAgICAgIDB4MzFGNQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwMiAgICAgICAgICAgICAgMHgzMUY2Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTAzICAgICAgICAgICAgICAweDMxRjcKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDQgICAgICAgICAgICAgIDB4MzFGOAotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwNSAgICAgICAgICAgICAgMHgzMUY5Ci0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTA2ICAgICAgICAgICAgICAweDMxRkEKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MDcgICAgICAgICAgICAgIDB4MzFGQgotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUwOCAgICAgICAgICAgICAgMHgzMUZDCi0jZGVmaW5lIFdNODkxNV9XUklURV9TRVFVRU5DRVJfNTA5ICAgICAgICAgICAgICAweDMxRkQKLSNkZWZpbmUgV004OTE1X1dSSVRFX1NFUVVFTkNFUl81MTAgICAgICAgICAgICAgIDB4MzFGRQotI2RlZmluZSBXTTg5MTVfV1JJVEVfU0VRVUVOQ0VSXzUxMSAgICAgICAgICAgICAgMHgzMUZGCi0KLSNkZWZpbmUgV004OTE1X1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDcwNgotI2RlZmluZSBXTTg5MTVfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzMUZGCi0KLS8qCi0gKiBGaWVsZCBEZWZpbml0aW9ucy4KLSAqLwotCi0vKgotICogUjAgKDB4MDApIC0gU29mdHdhcmUgUmVzZXQKLSAqLwotI2RlZmluZSBXTTg5MTVfU1dfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfU1dfUkVTRVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfU1dfUkVTRVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLwotCi0vKgotICogUjEgKDB4MDEpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUNCMl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDQjJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JQ0IyX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IxX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlDQjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JQ0IxX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSUNCMV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IxX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1VUMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1VUMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9CR19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJHX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQkdfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCR19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0JHX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9CR19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJHX0VOQSAqLwotCi0vKgotICogUjIgKDB4MDIpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfT1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X09QQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE9QQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfT1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUENMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0lOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU5MX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfSU5MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9JTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0lOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9JTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0lOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSU5SX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfSU5SX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRU5BICovCi0KLS8qCi0gKiBSMyAoMHgwMykgLSBQb3dlciBNYW5hZ2VtZW50ICgzKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERNSUMyTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRE1JQzJMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRE1JQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBETUlDMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMyTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRE1JQzJSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRE1JQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETUlDMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERNSUMyUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRE1JQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBETUlDMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERNSUMxTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRE1JQzFMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRE1JQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERNSUMxUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQzFSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRE1JQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBETUlDMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9ETUlDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMxUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9FTkEgKi8KLQotLyoKLSAqIFI0ICgweDA0KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDQpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9FTkEgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMlJYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX0VOQV9NQVNLICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyUlhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjFfRU5BX1NISUZUICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJSWF9DSEFOMV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlJYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0VOQSAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyUlhfQ0hBTjBfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfRU5BX01BU0sgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJSWF9DSEFOMF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogQUlGMlJYX0NIQU4wX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjVfRU5BICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFSWF9DSEFONV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMVJYX0NIQU41X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X0VOQV9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxUlhfQ0hBTjVfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjVfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFONV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9FTkEgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMVJYX0NIQU40X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0VOQV9NQVNLICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxUlhfQ0hBTjRfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfRU5BX1NISUZUICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFSWF9DSEFONF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU40X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4zX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxUlhfQ0hBTjNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFSWF9DSEFOM19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4zX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4zX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfRU5BICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFSWF9DSEFOMl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0NIQU4yX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX0VOQV9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxUlhfQ0hBTjJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMV9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxUlhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxUlhfQ0hBTjBfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfRU5BX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9DSEFOMF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4wX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjBfRU5BICovCi0KLS8qCi0gKiBSNSAoMHgwNSkgLSBQb3dlciBNYW5hZ2VtZW50ICg1KQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQzJMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfREFDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUMyTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfREFDMlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUMyUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQzJSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfREFDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQzFMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfREFDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfREFDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX0VOQSAqLwotCi0vKgotICogUjYgKDB4MDYpIC0gUG93ZXIgTWFuYWdlbWVudCAoNikKLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyVFhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJUWF9DSEFOMV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogQUlGMlRYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJUWF9DSEFOMF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMlRYX0NIQU4wX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBBSUYyVFhfQ0hBTjBfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9DSEFOMF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9FTkEgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMVRYX0NIQU41X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X0VOQV9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxVFhfQ0hBTjVfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjVfRU5BX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFUWF9DSEFONV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU41X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0VOQSAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxVFhfQ0hBTjRfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfRU5BX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFUWF9DSEFONF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogQUlGMVRYX0NIQU40X0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjRfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfRU5BICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9DSEFOM19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVRYX0NIQU4zX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4zX0VOQV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOM19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9FTkEgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYX0NIQU4yX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFhfQ0hBTjJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjJfRU5BX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFUWF9DSEFOMl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4yX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWF9DSEFOMV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4xX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9DSEFOMF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYX0NIQU4wX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjBfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMF9FTkEgKi8KLQotLyoKLSAqIFI3ICgweDA3KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDcpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyX0ZOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRE1JQzJfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRE1JQzJfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogRE1JQzJfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMyX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxX0ZOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRE1JQzFfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRE1JQzFfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRE1JQzFfRk4gKi8KLSNkZWZpbmUgV004OTE1X0RNSUMxX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzFfRk4gKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJSX0VOQSAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQURDX0RNSUNfRFNQMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AyUl9FTkFfTUFTSyAgICAgICAgICAweDAwODAgIC8qIEFEQ19ETUlDX0RTUDJSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMlJfRU5BX1NISUZUICAgICAgICAgICAgICA3ICAvKiBBRENfRE1JQ19EU1AyUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJSX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDX0RNSUNfRFNQMlJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AyTF9FTkEgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFEQ19ETUlDX0RTUDJMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMkxfRU5BX01BU0sgICAgICAgICAgMHgwMDQwICAvKiBBRENfRE1JQ19EU1AyTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDJMX0VOQV9TSElGVCAgICAgICAgICAgICAgNiAgLyogQURDX0RNSUNfRFNQMkxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AyTF9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQ19ETUlDX0RTUDJMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfU1JDMl9NQVNLICAgICAgICAgICAgICAgMHgwMDMwICAvKiBBRENfRE1JQ19TUkMyIC0gWzU6NF0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX1NSQzJfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDX0RNSUNfU1JDMiAtIFs1OjRdICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19TUkMyX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19ETUlDX1NSQzIgLSBbNTo0XSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMVJfRU5BICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBRENfRE1JQ19EU1AxUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDFSX0VOQV9NQVNLICAgICAgICAgIDB4MDAwOCAgLyogQURDX0RNSUNfRFNQMVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AxUl9FTkFfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIEFEQ19ETUlDX0RTUDFSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBRENfRE1JQ19EU1AxUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDFMX0VOQSAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0RNSUNfRFNQMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19EU1AxTF9FTkFfTUFTSyAgICAgICAgICAweDAwMDQgIC8qIEFEQ19ETUlDX0RTUDFMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfRFNQMUxfRU5BX1NISUZUICAgICAgICAgICAgICAyICAvKiBBRENfRE1JQ19EU1AxTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX0RTUDFMX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDX0RNSUNfRFNQMUxfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BRENfRE1JQ19TUkMxX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFEQ19ETUlDX1NSQzEgLSBbMTowXSAqLwotI2RlZmluZSBXTTg5MTVfQURDX0RNSUNfU1JDMV9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBRENfRE1JQ19TUkMxIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ19ETUlDX1NSQzFfV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0RNSUNfU1JDMSAtIFsxOjBdICovCi0KLS8qCi0gKiBSOCAoMHgwOCkgLSBQb3dlciBNYW5hZ2VtZW50ICg4KQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIEFJRjJUWF9TUkMgLSBbNzo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBBSUYyVFhfU1JDIC0gWzc6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMlRYX1NSQyAtIFs3OjZdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJSWF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMlJYX1NSQyAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyUlhfU1JDICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYX1NSQyAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhfU1JDICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX1NSQyAqLwotCi0vKgotICogUjE2ICgweDEwKSAtIExlZnQgTGluZSBJbnB1dCBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xX1ZVICovCi0jZGVmaW5lIFdNODkxNV9JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0lOMUxfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTF9aQyAqLwotI2RlZmluZSBXTTg5MTVfSU4xTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMX1pDICovCi0jZGVmaW5lIFdNODkxNV9JTjFMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfWkMgKi8KLSNkZWZpbmUgV004OTE1X0lOMUxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTF9aQyAqLwotI2RlZmluZSBXTTg5MTVfSU4xTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCi0jZGVmaW5lIFdNODkxNV9JTjFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KLSNkZWZpbmUgV004OTE1X0lOMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xTF9WT0wgLSBbNDowXSAqLwotCi0vKgotICogUjE3ICgweDExKSAtIFJpZ2h0IExpbmUgSW5wdXQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0lOMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xX1ZVICovCi0jZGVmaW5lIFdNODkxNV9JTjFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfSU4xX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0lOMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xX1ZVICovCi0jZGVmaW5lIFdNODkxNV9JTjFSX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMVJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0lOMVJfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xUl9aQyAqLwotI2RlZmluZSBXTTg5MTVfSU4xUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFSX1pDICovCi0jZGVmaW5lIFdNODkxNV9JTjFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0lOMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4xUl9WT0wgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfSU4xUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCi0jZGVmaW5lIFdNODkxNV9JTjFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KLQotLyoKLSAqIFIxOCAoMHgxMikgLSBMaW5lIElucHV0IENvbnRyb2wKLSAqLwotI2RlZmluZSBXTTg5MTVfSU5MX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBJTkxfTU9ERSAtIFszOjJdICovCi0jZGVmaW5lIFdNODkxNV9JTkxfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElOTF9NT0RFIC0gWzM6Ml0gKi8KLSNkZWZpbmUgV004OTE1X0lOTF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU5MX01PREUgLSBbMzoyXSAqLwotI2RlZmluZSBXTTg5MTVfSU5SX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBJTlJfTU9ERSAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9JTlJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOUl9NT0RFIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X0lOUl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU5SX01PREUgLSBbMTowXSAqLwotCi0vKgotICogUjIxICgweDE1KSAtIERBQzEgSFBPVVQxIFZvbHVtZQotICovCi0jZGVmaW5lIFdNODkxNV9EQUMxUl9IUE9VVDFSX1ZPTF9NQVNLICAgICAgICAgICAweDAwRjAgIC8qIERBQzFSX0hQT1VUMVJfVk9MIC0gWzc6NF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX0hQT1VUMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgNCAgLyogREFDMVJfSFBPVVQxUl9WT0wgLSBbNzo0XSAqLwotI2RlZmluZSBXTTg5MTVfREFDMVJfSFBPVVQxUl9WT0xfV0lEVEggICAgICAgICAgICAgICA0ICAvKiBEQUMxUl9IUE9VVDFSX1ZPTCAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAweDAwMEYgIC8qIERBQzFMX0hQT1VUMUxfVk9MIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFMX0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgMCAgLyogREFDMUxfSFBPVVQxTF9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfREFDMUxfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICA0ICAvKiBEQUMxTF9IUE9VVDFMX1ZPTCAtIFszOjBdICovCi0KLS8qCi0gKiBSMjIgKDB4MTYpIC0gREFDMiBIUE9VVDIgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX0hQT1VUMlJfVk9MX01BU0sgICAgICAgICAgIDB4MDBGMCAgLyogREFDMlJfSFBPVVQyUl9WT0wgLSBbNzo0XSAqLwotI2RlZmluZSBXTTg5MTVfREFDMlJfSFBPVVQyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBEQUMyUl9IUE9VVDJSX1ZPTCAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9EQUMyUl9IUE9VVDJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzJSX0hQT1VUMlJfVk9MIC0gWzc6NF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJMX0hQT1VUMkxfVk9MX01BU0sgICAgICAgICAgIDB4MDAwRiAgLyogREFDMkxfSFBPVVQyTF9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfREFDMkxfSFBPVVQyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQUMyTF9IUE9VVDJMX1ZPTCAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9IUE9VVDJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzJMX0hQT1VUMkxfVk9MIC0gWzM6MF0gKi8KLQotLyoKLSAqIFIyNCAoMHgxOCkgLSBEQUMxIExlZnQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMUxfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMUxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxTF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzFMX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQUMxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMjUgKDB4MTkpIC0gREFDMSBSaWdodCBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfREFDMVJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMxUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFSX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMVJfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMVJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KLQotLyoKLSAqIFIyNiAoMHgxQSkgLSBEQUMyIExlZnQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMkxfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzJMX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMkxfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQUMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMjcgKDB4MUIpIC0gREFDMiBSaWdodCBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfREFDMlJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMyUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJSX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMlJfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfREFDMlJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KLQotLyoKLSAqIFIyOCAoMHgxQykgLSBPdXRwdXQxIExlZnQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9aQyAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEhQT1VUMUxfVk9MIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxTF9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9VVDFMX1ZPTCAtIFszOjBdICovCi0KLS8qCi0gKiBSMjkgKDB4MUQpIC0gT3V0cHV0MSBSaWdodCBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMVJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMVJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxUl9aQyAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDFSX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQxUl9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDFSX1ZPTCAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMVJfVk9MIC0gWzM6MF0gKi8KLQotLyoKLSAqIFIzMCAoMHgxRSkgLSBPdXRwdXQyIExlZnQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RBQzJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMl9WVSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDJMX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMkxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQyTF9aQyAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJMX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEhQT1VUMkxfVk9MIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQyTF9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9VVDJMX1ZPTCAtIFszOjBdICovCi0KLS8qCi0gKiBSMzEgKDB4MUYpIC0gT3V0cHV0MiBSaWdodCBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLwotI2RlZmluZSBXTTg5MTVfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMlJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyUl9aQyAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDJSX1pDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfWkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQyUl9WT0wgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDJSX1ZPTCAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMlJfVk9MIC0gWzM6MF0gKi8KLQotLyoKLSAqIFIzMiAoMHgyMCkgLSBNSUNCSUFTICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMV9SQVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JQ0IxX1JBVEUgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IxX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjFfUkFURSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBNSUNCMV9SQVRFICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX1JBVEUgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IxX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDQjFfTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMV9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQ0IxX01PREUgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IxX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBFICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9ESVNDSCAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9ESVNDSCAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCMV9ESVNDSCAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9ESVNDSCAqLwotCi0vKgotICogUjMzICgweDIxKSAtIE1JQ0JJQVMgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X01JQ0IyX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjJfUkFURSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjJfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBNSUNCMl9SQVRFICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JQ0IyX1JBVEUgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IyX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfUkFURSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMl9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IyX01PREUgKi8KLSNkZWZpbmUgV004OTE1X01JQ0IyX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDQjJfTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfTUlDQjJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEUgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IyX0RJU0NIICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IyX0RJU0NIICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0IyX0RJU0NIICovCi0jZGVmaW5lIFdNODkxNV9NSUNCMl9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0RJU0NIICovCi0KLS8qCi0gKiBSNDAgKDB4MjgpIC0gTERPIDEKLSAqLwotI2RlZmluZSBXTTg5MTVfTERPMV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMRE8xX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0xETzFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTERPMV9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9MRE8xX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzFfTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfTERPMV9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0xETzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0xETzFfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0xETzFfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0xETzFfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMV9ESVNDSCAqLwotI2RlZmluZSBXTTg5MTVfTERPMV9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX0RJU0NIICovCi0jZGVmaW5lIFdNODkxNV9MRE8xX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzFfRElTQ0ggKi8KLSNkZWZpbmUgV004OTE1X0xETzFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9ESVNDSCAqLwotCi0vKgotICogUjQxICgweDI5KSAtIExETyAyCi0gKi8KLSNkZWZpbmUgV004OTE1X0xETzJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTERPMl9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExETzJfTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfTERPMl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8yX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0xETzJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUUgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzJfRElTQ0ggKi8KLSNkZWZpbmUgV004OTE1X0xETzJfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMl9ESVNDSCAqLwotI2RlZmluZSBXTTg5MTVfTERPMl9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8yX0RJU0NIICovCi0jZGVmaW5lIFdNODkxNV9MRE8yX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRElTQ0ggKi8KLQotLyoKLSAqIFI0OCAoMHgzMCkgLSBBY2Nlc3NvcnkgRGV0ZWN0IE1vZGUgMQotICovCi0jZGVmaW5lIFdNODkxNV9KRF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEpEX01PREUgLSBbMTowXSAqLwotI2RlZmluZSBXTTg5MTVfSkRfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBKRF9NT0RFIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X0pEX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSkRfTU9ERSAtIFsxOjBdICovCi0KLS8qCi0gKiBSNDkgKDB4MzEpIC0gQWNjZXNzb3J5IERldGVjdCBNb2RlIDIKLSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxRkJfU1JDICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFGQl9TUkMgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUZCX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQxRkJfU1JDICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFGQl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQT1VUMUZCX1NSQyAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxRkJfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFGQl9TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TUkMgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9CSUFTX1NSQyAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9CSUFTX1NSQ19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX0JJQVNfU1JDICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0JJQVNfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfQklBU19TUkMgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfQklBU19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9CSUFTX1NSQyAqLwotCi0vKgotICogUjUyICgweDM0KSAtIEhlYWRwaG9uZSBEZXRlY3QgMQotICovCi0jZGVmaW5lIFdNODkxNV9IUF9IT0xEVElNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwRTAgIC8qIEhQX0hPTERUSU1FIC0gWzc6NV0gKi8KLSNkZWZpbmUgV004OTE1X0hQX0hPTERUSU1FX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBfSE9MRFRJTUUgLSBbNzo1XSAqLwotI2RlZmluZSBXTTg5MTVfSFBfSE9MRFRJTUVfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBIUF9IT0xEVElNRSAtIFs3OjVdICovCi0jZGVmaW5lIFdNODkxNV9IUF9DTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEhQX0NMS19ESVYgLSBbNDozXSAqLwotI2RlZmluZSBXTTg5MTVfSFBfQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBIUF9DTEtfRElWIC0gWzQ6M10gKi8KLSNkZWZpbmUgV004OTE1X0hQX0NMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBfQ0xLX0RJViAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9IUF9TVEVQX1NJWkUgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQX1NURVBfU0laRSAqLwotI2RlZmluZSBXTTg5MTVfSFBfU1RFUF9TSVpFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUF9TVEVQX1NJWkUgKi8KLSNkZWZpbmUgV004OTE1X0hQX1NURVBfU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfU1RFUF9TSVpFICovCi0jZGVmaW5lIFdNODkxNV9IUF9TVEVQX1NJWkVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX1NURVBfU0laRSAqLwotI2RlZmluZSBXTTg5MTVfSFBfUE9MTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUF9QT0xMICovCi0jZGVmaW5lIFdNODkxNV9IUF9QT0xMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQX1BPTEwgKi8KLSNkZWZpbmUgV004OTE1X0hQX1BPTExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBfUE9MTCAqLwotI2RlZmluZSBXTTg5MTVfSFBfUE9MTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9QT0xMICovCi0KLS8qCi0gKiBSNTMgKDB4MzUpIC0gSGVhZHBob25lIERldGVjdCAyCi0gKi8KLSNkZWZpbmUgV004OTE1X0hQX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBfRE9ORSAqLwotI2RlZmluZSBXTTg5MTVfSFBfRE9ORV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUF9ET05FICovCi0jZGVmaW5lIFdNODkxNV9IUF9ET05FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQX0RPTkUgKi8KLSNkZWZpbmUgV004OTE1X0hQX0RPTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfRE9ORSAqLwotI2RlZmluZSBXTTg5MTVfSFBfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBIUF9MVkwgLSBbNjowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUF9MVkwgLSBbNjowXSAqLwotI2RlZmluZSBXTTg5MTVfSFBfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUF9MVkwgLSBbNjowXSAqLwotCi0vKgotICogUjU2ICgweDM4KSAtIE1pYyBEZXRlY3QgMQotICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0JJQVNfU1RBUlRUSU1FX01BU0sgICAgICAgICAweEYwMDAgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0JJQVNfU1RBUlRUSU1FX1NISUZUICAgICAgICAgICAgMTIgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0JJQVNfU1RBUlRUSU1FX1dJRFRIICAgICAgICAgICAgIDQgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIE1JQ0RfUkFURSAtIFsxMTo4XSAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSUNEX1JBVEUgLSBbMTE6OF0gKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDRF9SQVRFIC0gWzExOjhdICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0RCVElNRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfREJUSU1FICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0RCVElNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfREJUSU1FICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0RCVElNRV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfREJUSU1FICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0RCVElNRV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfREJUSU1FICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRU5BICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRU5BICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfRU5BICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfRU5BICovCi0KLS8qCi0gKiBSNTcgKDB4MzkpIC0gTWljIERldGVjdCAyCi0gKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfTFZMX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfTFZMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfTFZMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KLQotLyoKLSAqIFI1OCAoMHgzQSkgLSBNaWMgRGV0ZWN0IDMKLSAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwN0ZDICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNEX1ZBTElEICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1ZBTElEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfVkFMSUQgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfVkFMSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9WQUxJRCAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9WQUxJRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1ZBTElEICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfU1RTICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1NUU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfU1RTICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfU1RTICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfU1RTICovCi0KLS8qCi0gKiBSNjQgKDB4NDApIC0gQ2hhcmdlIFB1bXAgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0NQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRU5BICovCi0jZGVmaW5lIFdNODkxNV9DUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDUF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0NQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRU5BICovCi0KLS8qCi0gKiBSNjUgKDB4NDEpIC0gQ2hhcmdlIFB1bXAgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0NQX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRElTQ0ggKi8KLSNkZWZpbmUgV004OTE1X0NQX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRElTQ0ggKi8KLSNkZWZpbmUgV004OTE1X0NQX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQ1BfRElTQ0ggKi8KLSNkZWZpbmUgV004OTE1X0NQX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRElTQ0ggKi8KLQotLyoKLSAqIFI4MCAoMHg1MCkgLSBEQyBTZXJ2byAoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzMgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzNfTUFTSyAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzNfU0hJRlQgICAgICAgICAgICAgICAgICAzICAvKiBEQ1NfRU5BX0NIQU5fMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzNfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzIgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzJfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzJfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEQ1NfRU5BX0NIQU5fMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLwotCi0vKgotICogUjgxICgweDUxKSAtIERDIFNlcnZvICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfM19NQVNLICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfM19TSElGVCAgICAgICAgICAgICAgMTUgIC8qIERDU19UUklHX1NJTkdMRV8zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMiAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMl9NQVNLICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMl9TSElGVCAgICAgICAgICAgICAgMTQgIC8qIERDU19UUklHX1NJTkdMRV8yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMSAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMV9NQVNLICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMV9TSElGVCAgICAgICAgICAgICAgMTMgIC8qIERDU19UUklHX1NJTkdMRV8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMCAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMF9NQVNLICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMF9TSElGVCAgICAgICAgICAgICAgMTIgIC8qIERDU19UUklHX1NJTkdMRV8wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TSU5HTEVfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMyAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfM19NQVNLICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfM19TSElGVCAgICAgICAgICAgICAgMTEgIC8qIERDU19UUklHX1NFUklFU18zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMiAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMl9NQVNLICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMl9TSElGVCAgICAgICAgICAgICAgMTAgIC8qIERDU19UUklHX1NFUklFU18yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMSAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMV9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMV9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERDU19UUklHX1NFUklFU18xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIERDU19UUklHX1NFUklFU18wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TRVJJRVNfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzMgICAgICAgICAgICAgICAweDAwODAgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8zX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KLSNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfM19TSElGVCAgICAgICAgICAgICAgNyAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzNfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8yICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KLSNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMl9NQVNLICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzJfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8yX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KLSNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMSAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzFfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KLSNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMV9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KLSNkZWZpbmUgV004OTE1X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVFJJR19TVEFSVFVQXzBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzMgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzNfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzNfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzIgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzJfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzJfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzEgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzFfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzBfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzBfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLwotCi0vKgotICogUjgyICgweDUyKSAtIERDIFNlcnZvICgzKQotICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVElNRVJfUEVSSU9EXzIzX01BU0sgICAgICAgICAweDBGMDAgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19USU1FUl9QRVJJT0RfMjNfU0hJRlQgICAgICAgICAgICAgOCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RJTUVSX1BFUklPRF8yM19XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfVElNRVJfUEVSSU9EXzAxX01BU0sgICAgICAgICAweDAwMEYgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1RJTUVSX1BFUklPRF8wMV9TSElGVCAgICAgICAgICAgICAwICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19USU1FUl9QRVJJT0RfMDFfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCi0KLS8qCi0gKiBSODQgKDB4NTQpIC0gREMgU2Vydm8gKDUpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19TRVJJRVNfTk9fMjNfTUFTSyAgICAgICAgICAgIDB4N0YwMCAgLyogRENTX1NFUklFU19OT18yMyAtIFsxNDo4XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1NFUklFU19OT18yM19TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzE0OjhdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfU0VSSUVTX05PXzIzX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbMTQ6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19TRVJJRVNfTk9fMDFfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KLQotLyoKLSAqIFI4NSAoMHg1NSkgLSBEQyBTZXJ2byAoNikKLSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfM19NQVNLICAgICAgICAgICAgMHhGRjAwICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8zX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzNfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMl9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8yX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLwotCi0vKgotICogUjg2ICgweDU2KSAtIERDIFNlcnZvICg3KQotICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8xX01BU0sgICAgICAgICAgICAweEZGMDAgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzFfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX1ZBTF8wX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9WQUxfMF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfVkFMXzBfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCi0KLS8qCi0gKiBSODcgKDB4NTcpIC0gREMgU2Vydm8gUmVhZGJhY2sgMAotICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgICAgICAgICAgICAweDBGMDAgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19DQUxfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0NBTF9DT01QTEVURV9XSURUSCAgICAgICAgICAgICAgICA0ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfREFDX1dSX0NPTVBMRVRFX01BU0sgICAgICAgICAweDAwRjAgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RBQ19XUl9DT01QTEVURV9TSElGVCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19EQUNfV1JfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfU1RBUlRVUF9DT01QTEVURV9NQVNLICAgICAgICAweDAwMEYgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RDU19TVEFSVFVQX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgMCAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfRENTX1NUQVJUVVBfQ09NUExFVEVfV0lEVEggICAgICAgICAgICA0ICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCi0KLS8qCi0gKiBSOTYgKDB4NjApIC0gQW5hbG9ndWUgSFAgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQxTF9PVVRQICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxTF9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX09VVFAgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMUxfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9PVVRQICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMUxfRExZICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFMX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfRExZICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMVJfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFSX09VVFAgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMVJfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBPVVQxUl9PVVRQICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDFSX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQxUl9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLwotCi0vKgotICogUjk3ICgweDYxKSAtIEFuYWxvZ3VlIEhQICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMkxfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDJMX09VVFAgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMkxfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQyTF9PVVRQICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJMX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDJMX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDJMX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBIUE9VVDJMX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyTF9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJMX0RMWSAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDJSX09VVFAgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQyUl9PVVRQICovCi0jZGVmaW5lIFdNODkxNV9IUE9VVDJSX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQT1VUMlJfT1VUUCAqLwotI2RlZmluZSBXTTg5MTVfSFBPVVQyUl9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX09VVFAgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQyUl9ETFkgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQyUl9ETFkgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9ETFkgKi8KLSNkZWZpbmUgV004OTE1X0hQT1VUMlJfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9ETFkgKi8KLQotLyoKLSAqIFIyNTYgKDB4MTAwKSAtIENoaXAgUmV2aXNpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQ0hJUF9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBDSElQX1JFViAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9DSElQX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0NISVBfUkVWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0hJUF9SRVYgLSBbMzowXSAqLwotCi0vKgotICogUjI1NyAoMHgxMDEpIC0gQ29udHJvbCBJbnRlcmZhY2UgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FVVE9fSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KLSNkZWZpbmUgV004OTE1X0FVVE9fSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KLSNkZWZpbmUgV004OTE1X0FVVE9fSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQVVUT19JTkMgKi8KLSNkZWZpbmUgV004OTE1X0FVVE9fSU5DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT19JTkMgKi8KLQotLyoKLSAqIFIyNzIgKDB4MTEwKSAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIFdTRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLwotI2RlZmluZSBXTTg5MTVfV1NFUV9BQk9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBXU0VRX0FCT1JUICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0FCT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQUJPUlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLwotI2RlZmluZSBXTTg5MTVfV1NFUV9TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfU1RBUlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9TVEFSVCAqLwotI2RlZmluZSBXTTg5MTVfV1NFUV9TVEFSVF9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzY6MF0gKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfU1RBUlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNjowXSAqLwotCi0vKgotICogUjI3MyAoMHgxMTEpIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9CVVNZICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfQlVTWSAqLwotI2RlZmluZSBXTTg5MTVfV1NFUV9CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0JVU1kgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfQlVTWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9CVVNZICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0NVUlJFTlRfSU5ERVhfTUFTSyAgICAgICAgICAweDAwN0YgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0NVUlJFTlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgIDcgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCi0KLS8qCi0gKiBSNTEyICgweDIwMCkgLSBBSUYgQ2xvY2tpbmcgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X1NZU0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogU1lTQ0xLX1NSQyAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNZU0NMS19TUkMgLSBbNDozXSAqLwotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTWVNDTEtfU1JDIC0gWzQ6M10gKi8KLSNkZWZpbmUgV004OTE1X1NZU0NMS19JTlYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU1lTQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTWVNDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNZU0NMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X1NZU0NMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTWVNDTEtfRElWICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0NMS19ESVYgKi8KLSNkZWZpbmUgV004OTE1X1NZU0NMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0RJViAqLwotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfRElWICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NZU0NMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfU1lTQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTWVNDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19FTkEgKi8KLQotLyoKLSAqIFI1MTMgKDB4MjAxKSAtIEFJRiBDbG9ja2luZyAoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMl9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBEU1AyX0RJViAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJfRElWIC0gWzQ6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMl9ESVYgLSBbNDozXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMV9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBEU1AxX0RJViAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFfRElWIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMV9ESVYgLSBbMTowXSAqLwotCi0vKgotICogUjUyMCAoMHgyMDgpIC0gQ2xvY2tpbmcgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0xGQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEZDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9MRkNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExGQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfTEZDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRkNMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0xGQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEZDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFRPQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBUT0NMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogVE9DTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9UT0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUZDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUZDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRkNMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRkNMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9TWVNEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0RTUENMS19FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NZU0RTUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTRFNQQ0xLX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfU1lTRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNEU1BDTEtfRU5BICovCi0jZGVmaW5lIFdNODkxNV9TWVNEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0RTUENMS19FTkEgKi8KLQotLyoKLSAqIFI1MjEgKDB4MjA5KSAtIENsb2NraW5nICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9UT0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3MDAgIC8qIFRPQ0xLX0RJViAtIFsxMDo4XSAqLwotI2RlZmluZSBXTTg5MTVfVE9DTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBUT0NMS19ESVYgLSBbMTA6OF0gKi8KLSNkZWZpbmUgV004OTE1X1RPQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogVE9DTEtfRElWIC0gWzEwOjhdICovCi0jZGVmaW5lIFdNODkxNV9EQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9EQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9EQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9PUENMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCi0jZGVmaW5lIFdNODkxNV9PUENMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCi0jZGVmaW5lIFdNODkxNV9PUENMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCi0KLS8qCi0gKiBSNTI4ICgweDIxMCkgLSBBSUYgUmF0ZQotICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfUkFURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19SQVRFICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19SQVRFICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNZU0NMS19SQVRFICovCi0jZGVmaW5lIFdNODkxNV9TWVNDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19SQVRFICovCi0KLS8qCi0gKiBSNTQ0ICgweDIyMCkgLSBGTEwgQ29udHJvbCAoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCi0jZGVmaW5lIFdNODkxNV9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCi0KLS8qCi0gKiBSNTQ1ICgweDIyMSkgLSBGTEwgQ29udHJvbCAoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCi0jZGVmaW5lIFdNODkxNV9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCi0jZGVmaW5lIFdNODkxNV9GTExfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLwotCi0vKgotICogUjU0NiAoMHgyMjIpIC0gRkxMIENvbnRyb2wgKDMpCi0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9USEVUQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMX1RIRVRBIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9GTExfVEhFVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9USEVUQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX1RIRVRBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfVEhFVEEgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFI1NDcgKDB4MjIzKSAtIEZMTCBDb250cm9sICg0KQotICovCi0jZGVmaW5lIFdNODkxNV9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCi0jZGVmaW5lIFdNODkxNV9GTExfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9OIC0gWzE0OjVdICovCi0jZGVmaW5lIFdNODkxNV9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCi0jZGVmaW5lIFdNODkxNV9GTExfTE9PUF9HQUlOX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTF9MT09QX0dBSU4gLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0xPT1BfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfTE9PUF9HQUlOIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MT09QX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0xPT1BfR0FJTiAtIFszOjBdICovCi0KLS8qCi0gKiBSNTQ4ICgweDIyNCkgLSBGTEwgQ29udHJvbCAoNSkKLSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ09fVkFMX01BU0sgICAgICAgICAgICAgMHgxRjgwICAvKiBGTExfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCi0jZGVmaW5lIFdNODkxNV9GTExfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ08gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ09fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTExfRlJDX05DTyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0ZSQ19OQ09fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJDX05DTyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX1JFRkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTExfUkVGQ0xLX0RJViAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9SRUZDTEtfRElWIC0gWzQ6M10gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRkNMS19ESVYgLSBbNDozXSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX1JFRl9GUkVRICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfUkVGX0ZSRVEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9SRUZfRlJFUV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX1JFRl9GUkVRICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGX0ZSRVFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZfRlJFUSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX1JFRl9GUkVRX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfUkVGX0ZSRVEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9SRUZDTEtfU1JDX01BU0sgICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMX1JFRkNMS19TUkMgLSBbMTowXSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX1JFRkNMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBGTExfUkVGQ0xLX1NSQyAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KLQotLyoKLSAqIFI1NDkgKDB4MjI1KSAtIEZMTCBDb250cm9sICg2KQotICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX1NSQ19TVFNfTUFTSyAgICAgICAgICAweDAwMEMgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX1NSQ19TVFNfU0hJRlQgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCi0jZGVmaW5lIFdNODkxNV9GTExfUkVGQ0xLX1NSQ19TVFNfV0lEVEggICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCi0jZGVmaW5lIFdNODkxNV9GTExfU1dJVENIX0NMSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCi0jZGVmaW5lIFdNODkxNV9GTExfU1dJVENIX0NMS19NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCi0jZGVmaW5lIFdNODkxNV9GTExfU1dJVENIX0NMS19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCi0jZGVmaW5lIFdNODkxNV9GTExfU1dJVENIX0NMS19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCi0KLS8qCi0gKiBSNTUwICgweDIyNikgLSBGTEwgRUZTIDEKLSAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0xBTUJEQV9NQVNLICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfTEFNQkRBIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9GTExfTEFNQkRBX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9MQU1CREEgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MQU1CREFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMX0xBTUJEQSAtIFsxNTowXSAqLwotCi0vKgotICogUjU1MSAoMHgyMjcpIC0gRkxMIEVGUyAyCi0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MRlNSX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MRlNSX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MRlNSX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9FRlNfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VGU19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9FRlNfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VGU19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9FRlNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VGU19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9FRlNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0VGU19FTkEgKi8KLQotLyoKLSAqIFI3NjggKDB4MzAwKSAtIEFJRjEgQ29udHJvbAotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX1RSSSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX1RSSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFJRjFfRk1UIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMV9GTVQgLSBbMTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMV9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxX0ZNVCAtIFsxOjBdICovCi0KLS8qCi0gKiBSNzY5ICgweDMwMSkgLSBBSUYxIEJDTEsKLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxX0JDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFfQkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMV9CQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0JDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfRlJDICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFfQkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19GUkNfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMV9CQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxX0JDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfQkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19NU1RSICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19NU1RSX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9CQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFfQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQUlGMV9CQ0xLX0RJViAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxX0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFfQkNMS19ESVYgLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMV9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxX0JDTEtfRElWIC0gWzM6MF0gKi8KLQotLyoKLSAqIFI3NzAgKDB4MzAyKSAtIEFJRjEgVFggTFJDTEsoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLwotCi0vKgotICogUjc3MSAoMHgzMDMpIC0gQUlGMSBUWCBMUkNMSygyKQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERSAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERV9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERV9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfTU9ERV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWF9MUkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxVFhfTFJDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19GUkMgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYX0xSQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfTFJDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9MUkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0xSQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFIgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFJfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0xSQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLwotCi0vKgotICogUjc3MiAoMHgzMDQpIC0gQUlGMSBSWCBMUkNMSygxKQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCi0KLS8qCi0gKiBSNzczICgweDMwNSkgLSBBSUYxIFJYIExSQ0xLKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19JTlYgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfTFJDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFSWF9MUkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxUlhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9MUkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0xSQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUiAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUl9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfTFJDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCi0KLS8qCi0gKiBSNzc0ICgweDMwNikgLSBBSUYxVFggRGF0YSBDb25maWd1cmF0aW9uICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAweEZGMDAgIC8qIEFJRjFUWF9XTCAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxVFhfV0wgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVRYX1dMIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfU0xPVF9MRU5fTUFTSyAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfU0xPVF9MRU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfU0xPVF9MRU5fV0lEVEggICAgICAgICAgICAgICAgIDggIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCi0KLS8qCi0gKiBSNzc1ICgweDMwNykgLSBBSUYxVFggRGF0YSBDb25maWd1cmF0aW9uICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfREFUX1RSSSAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfREFUX1RSSV9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfREFUX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9EQVRfVFJJICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfREFUX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCi0KLS8qCi0gKiBSNzc2ICgweDMwOCkgLSBBSUYxUlggRGF0YSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9XTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkYwMCAgLyogQUlGMVJYX1dMIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFSWF9XTCAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxUlhfV0wgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9TTE9UX0xFTl9NQVNLICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9TTE9UX0xFTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9TTE9UX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLQotLyoKLSAqIFI3NzcgKDB4MzA5KSAtIEFJRjFUWCBDaGFubmVsIDAgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0KLS8qCi0gKiBSNzc4ICgweDMwQSkgLSBBSUYxVFggQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotCi0vKgotICogUjc3OSAoMHgzMEIpIC0gQUlGMVRYIENoYW5uZWwgMiBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOMl9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI3ODAgKDB4MzBDKSAtIEFJRjFUWCBDaGFubmVsIDMgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFOM19TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0KLS8qCi0gKiBSNzgxICgweDMwRCkgLSBBSUYxVFggQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU40X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLwotCi0vKgotICogUjc4MiAoMHgzMEUpIC0gQUlGMVRYIENoYW5uZWwgNSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWF9DSEFONV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYX0NIQU41X1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI3ODMgKDB4MzBGKSAtIEFJRjFSWCBDaGFubmVsIDAgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0KLS8qCi0gKiBSNzg0ICgweDMxMCkgLSBBSUYxUlggQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotCi0vKgotICogUjc4NSAoMHgzMTEpIC0gQUlGMVJYIENoYW5uZWwgMiBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI3ODYgKDB4MzEyKSAtIEFJRjFSWCBDaGFubmVsIDMgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOM19TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0KLS8qCi0gKiBSNzg3ICgweDMxMykgLSBBSUYxUlggQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLwotCi0vKgotICogUjc4OCAoMHgzMTQpIC0gQUlGMVJYIENoYW5uZWwgNSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU41X1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI3ODkgKDB4MzE1KSAtIEFJRjFSWCBNb25vIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X01PTk9fTU9ERSAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfQ0hBTjRfTU9OT19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjRfTU9OT19NT0RFX01BU0sgICAgICAweDAwMDQgIC8qIEFJRjFSWF9DSEFONF9NT05PX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFONF9NT05PX01PREVfU0hJRlQgICAgICAgICAgMiAgLyogQUlGMVJYX0NIQU40X01PTk9fTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU40X01PTk9fTU9ERV9XSURUSCAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjRfTU9OT19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfTU9OT19NT0RFICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9DSEFOMl9NT05PX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMl9NT05PX01PREVfTUFTSyAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0NIQU4yX01PTk9fTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4yX01PTk9fTU9ERV9TSElGVCAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjJfTU9OT19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjJfTU9OT19NT0RFX1dJRFRIICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMl9NT05PX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9NT05PX01PREUgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVJYX0NIQU4wX01PTk9fTU9ERV9NQVNLICAgICAgMHgwMDAxICAvKiBBSUYxUlhfQ0hBTjBfTU9OT19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYxUlhfQ0hBTjBfTU9OT19NT0RFX1NISUZUICAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFOMF9NT05PX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFSWF9DSEFOMF9NT05PX01PREVfV0lEVEggICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAqLwotCi0vKgotICogUjc5NCAoMHgzMUEpIC0gQUlGMVRYIFRlc3QKLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYNDVfRElUSEVSX0VOQSAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFg0NV9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFg0NV9ESVRIRVJfRU5BX01BU0sgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWDQ1X0RJVEhFUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWDQ1X0RJVEhFUl9FTkFfU0hJRlQgICAgICAgICAgICAgMiAgLyogQUlGMVRYNDVfRElUSEVSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYNDVfRElUSEVSX0VOQV9XSURUSCAgICAgICAgICAgICAxICAvKiBBSUYxVFg0NV9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFgyM19ESVRIRVJfRU5BICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWDIzX0RJVEhFUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWDIzX0RJVEhFUl9FTkFfTUFTSyAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYMjNfRElUSEVSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYMjNfRElUSEVSX0VOQV9TSElGVCAgICAgICAgICAgICAxICAvKiBBSUYxVFgyM19ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFgyM19ESVRIRVJfRU5BX1dJRFRIICAgICAgICAgICAgIDEgIC8qIEFJRjFUWDIzX0RJVEhFUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWDAxX0RJVEhFUl9FTkEgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYMDFfRElUSEVSX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMVRYMDFfRElUSEVSX0VOQV9NQVNLICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFgwMV9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYxVFgwMV9ESVRIRVJfRU5BX1NISUZUICAgICAgICAgICAgIDAgIC8qIEFJRjFUWDAxX0RJVEhFUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0FJRjFUWDAxX0RJVEhFUl9FTkFfV0lEVEggICAgICAgICAgICAgMSAgLyogQUlGMVRYMDFfRElUSEVSX0VOQSAqLwotCi0vKgotICogUjgwMCAoMHgzMjApIC0gQUlGMiBDb250cm9sCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMl9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMl9GTVQgLSBbMTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyX0ZNVCAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJfRk1UIC0gWzE6MF0gKi8KLQotLyoKLSAqIFI4MDEgKDB4MzIxKSAtIEFJRjIgQkNMSwotICovCi0jZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjJfQkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMl9CQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYyX0JDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfQkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19GUkMgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMl9CQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyX0JDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJfQkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9CQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX01TVFIgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX0JDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX01TVFJfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX0JDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyX0JDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0JDTEtfTVNUUiAqLwotI2RlZmluZSBXTTg5MTVfQUlGMl9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBSUYyX0JDTEtfRElWIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMl9CQ0xLX0RJViAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJfQkNMS19ESVYgLSBbMzowXSAqLwotCi0vKgotICogUjgwMiAoMHgzMjIpIC0gQUlGMiBUWCBMUkNMSygxKQotICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCi0KLS8qCi0gKiBSODAzICgweDMyMykgLSBBSUYyIFRYIExSQ0xLKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NT0RFICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NT0RFX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NT0RFX1NISUZUICAgICAgICAgICAgICAgMyAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19NT0RFX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19JTlYgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMlRYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyVFhfTFJDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJUWF9MUkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyVFhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJUWF9MUkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfTVNUUiAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfTVNUUl9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfTFJDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCi0KLS8qCi0gKiBSODA0ICgweDMyNCkgLSBBSUYyIFJYIExSQ0xLKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KLQotLyoKLSAqIFI4MDUgKDB4MzI1KSAtIEFJRjIgUlggTFJDTEsoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyUlhfTFJDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJSWF9MUkNMS19JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMlJYX0xSQ0xLX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfTFJDTEtfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfRlJDICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJSWF9MUkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19GUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMlJYX0xSQ0xLX0ZSQyAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfTFJDTEtfRlJDICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfTFJDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9MUkNMS19GUkMgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19NU1RSICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19NU1RSX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9MUkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KLQotLyoKLSAqIFI4MDYgKDB4MzI2KSAtIEFJRjJUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9XTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkYwMCAgLyogQUlGMlRYX1dMIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJUWF9XTCAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyVFhfV0wgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9TTE9UX0xFTl9NQVNLICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9TTE9UX0xFTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9TTE9UX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KLQotLyoKLSAqIFI4MDcgKDB4MzI3KSAtIEFJRjJUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9EQVRfVFJJICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9EQVRfVFJJX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9EQVRfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX0RBVF9UUkkgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9EQVRfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KLQotLyoKLSAqIFI4MDggKDB4MzI4KSAtIEFJRjJSWCBEYXRhIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX1dMX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRjAwICAvKiBBSUYyUlhfV0wgLSBbMTU6OF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlJYX1dMIC0gWzE1OjhdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJSWF9XTCAtIFsxNTo4XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX1NMT1RfTEVOX01BU0sgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX1NMT1RfTEVOX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX1NMT1RfTEVOX1dJRFRIICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLwotCi0vKgotICogUjgwOSAoMHgzMjkpIC0gQUlGMlRYIENoYW5uZWwgMCBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI4MTAgKDB4MzJBKSAtIEFJRjJUWCBDaGFubmVsIDEgQ29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjJUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJUWF9DSEFOMV9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0KLS8qCi0gKiBSODExICgweDMyQikgLSBBSUYyUlggQ2hhbm5lbCAwIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjJSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotCi0vKgotICogUjgxMiAoMHgzMkMpIC0gQUlGMlJYIENoYW5uZWwgMSBDb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjJSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KLQotLyoKLSAqIFI4MTMgKDB4MzJEKSAtIEFJRjJSWCBNb25vIENvbmZpZ3VyYXRpb24KLSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX01PTk9fTU9ERSAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyUlhfQ0hBTjBfTU9OT19NT0RFICovCi0jZGVmaW5lIFdNODkxNV9BSUYyUlhfQ0hBTjBfTU9OT19NT0RFX01BU0sgICAgICAweDAwMDEgIC8qIEFJRjJSWF9DSEFOMF9NT05PX01PREUgKi8KLSNkZWZpbmUgV004OTE1X0FJRjJSWF9DSEFOMF9NT05PX01PREVfU0hJRlQgICAgICAgICAgMCAgLyogQUlGMlJYX0NIQU4wX01PTk9fTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfQUlGMlJYX0NIQU4wX01PTk9fTU9ERV9XSURUSCAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfTU9OT19NT0RFICovCi0KLS8qCi0gKiBSODE1ICgweDMyRikgLSBBSUYyVFggVGVzdAotICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfRElUSEVSX0VOQSAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfRElUSEVSX0VOQV9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfRElUSEVSX0VOQV9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCi0jZGVmaW5lIFdNODkxNV9BSUYyVFhfRElUSEVSX0VOQV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCi0KLS8qCi0gKiBSMTAyNCAoMHg0MDApIC0gRFNQMSBUWCBMZWZ0IFZvbHVtZQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxVFhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AxVFhMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFUWExfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVRYTF9WT0wgLSBbNzowXSAqLwotCi0vKgotICogUjEwMjUgKDB4NDAxKSAtIERTUDEgVFggUmlnaHQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFUWFJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYUl9WT0wgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhSX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMTAyNiAoMHg0MDIpIC0gRFNQMSBSWCBMZWZ0IFZvbHVtZQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AxUlhMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWExfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYTF9WT0wgLSBbNzowXSAqLwotCi0vKgotICogUjEwMjcgKDB4NDAzKSAtIERTUDEgUlggUmlnaHQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFSWFJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9WT0wgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhSX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMTA0MCAoMHg0MTApIC0gRFNQMSBUWCBGaWx0ZXJzCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9ORiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMVRYX05GICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfTkZfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERTUDFUWF9ORiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYX05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEU1AxVFhfTkYgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9ORl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYX05GICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDFUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDFUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERTUDFUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDFUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDFUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDFUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfSFBGX01PREVfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfSFBGX01PREVfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfSFBGX01PREVfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAweDAwMDcgIC8qIERTUDFUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWF9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYX0hQRl9DVVQgLSBbMjowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBEU1AxVFhfSFBGX0NVVCAtIFsyOjBdICovCi0KLS8qCi0gKiBSMTA1NiAoMHg0MjApIC0gRFNQMSBSWCBGaWx0ZXJzICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTU9OTyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTU9OT19NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERTUDFSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURVJBVEUgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDFSWF9NVVRFUkFURSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AxUlhfTVVURVJBVEUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX01VVEVSQVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NVVRFUkFURSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AxUlhfVU5NVVRFX1JBTVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRFNQMVJYX1VOTVVURV9SQU1QICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERTUDFSWF9VTk1VVEVfUkFNUCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfVU5NVVRFX1JBTVAgKi8KLQotLyoKLSAqIFIxMDU3ICgweDQyMSkgLSBEU1AxIFJYIEZpbHRlcnMgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4M0UwMCAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYXzNEX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYXzNEX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfM0RfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWF8zRF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYXzNEX0VOQSAqLwotCi0vKgotICogUjEwODggKDB4NDQwKSAtIERTUDEgRFJDICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfUk1TX01BU0sgICAgICAgICAweEY4MDAgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAgMTEgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgIDUgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfUEtfTUFTSyAgICAgICAgICAweDA2MDAgIC8qIERTUDFEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgICA5ICAvKiBEU1AxRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfTU9ERSAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfTU9ERV9NQVNLICAgICAgICAweDAwODAgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgIDcgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVQgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDFEUkNfU0lHX0RFVCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX01BU0sgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMURSQ19TSUdfREVUICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfU0lHX0RFVCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9FTkEgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAgMHgwMDIwICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AxRFJDX1FSICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDFEUkNfUVIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMURSQ19RUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxRFJDX1FSICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FOVElDTElQICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTUDFEUkNfQU5USUNMSVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfQU5USUNMSVBfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMURSQ19BTlRJQ0xJUCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBEU1AxRFJDX0FOVElDTElQICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfQU5USUNMSVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9EUkNfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMVJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9EUkNfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMVJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMVJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWExfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMVRYTF9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDFUWExfRFJDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBEU1AxVFhMX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWExfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYTF9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFUWFJfRFJDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVRYUl9EUkNfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxVFhSX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFUWFJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYUl9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxVFhSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfRFJDX0VOQSAqLwotCi0vKgotICogUjEwODkgKDB4NDQxKSAtIERTUDEgRFJDICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FUS19NQVNLICAgICAgICAgICAgICAgICAweDFFMDAgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0RDWV9NQVNLICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIERTUDFEUkNfRENZIC0gWzg6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19EQ1kgLSBbODo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AxRFJDX0RDWSAtIFs4OjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMUMgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0KLS8qCi0gKiBSMTA5MCAoMHg0NDIpIC0gRFNQMSBEUkMgKDMpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfTUlOR0FJTl9NQVNLICAgICAgICAgIDB4RjAwMCAgLyogRFNQMURSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgIDEyICAvKiBEU1AxRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgIDQgIC8qIERTUDFEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfTkdfRVhQX01BU0sgICAgICAgICAgICAgIDB4MEMwMCAgLyogRFNQMURSQ19OR19FWFAgLSBbMTE6MTBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDFEUkNfTkdfRVhQIC0gWzExOjEwXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBEU1AxRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfVEhSX01BU0sgICAgICAgICAgICAgIDB4MDMwMCAgLyogRFNQMURSQ19RUl9USFIgLSBbOTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxRFJDX1FSX1RIUiAtIFs5OjhdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfUVJfVEhSIC0gWzk6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfUVJfRENZX01BU0sgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFNQMURSQ19RUl9EQ1kgLSBbNzo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBEU1AxRFJDX1FSX0RDWSAtIFs3OjZdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfUVJfRENZIC0gWzc6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAzOCAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KLQotLyoKLSAqIFIxMDkxICgweDQ0MykgLSBEU1AxIERSQyAoNCkKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFX0lQX01BU0sgICAgICAgICAgICAgMHgwN0UwICAvKiBEU1AxRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFX0lQIC0gWzEwOjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIERTUDFEUkNfS05FRV9JUCAtIFsxMDo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFX09QX01BU0sgICAgICAgICAgICAgMHgwMDFGICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLwotCi0vKgotICogUjEwOTIgKDB4NDQ0KSAtIERTUDEgRFJDICg1KQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX0lQX01BU0sgICAgICAgICAgICAweDAzRTAgIC8qIERTUDFEUkNfS05FRTJfSVAgLSBbOTo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFMl9JUCAtIFs5OjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX0tORUUyX09QX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIERTUDFEUkNfS05FRTJfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFMl9PUCAtIFs0OjBdICovCi0KLS8qCi0gKiBSMTE1MiAoMHg0ODApIC0gRFNQMSBSWCBFUSBHYWlucyAoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AxUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMVJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgMHgwMDNFICAvKiBEU1AxUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhfRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWF9FUV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfRVFfRU5BICovCi0KLS8qCi0gKiBSMTE1MyAoMHg0ODEpIC0gRFNQMSBSWCBFUSBHYWlucyAoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AxUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMVJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotCi0vKgotICogUjExNTQgKDB4NDgyKSAtIERTUDEgUlggRVEgQmFuZCAxIEEKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotCi0vKgotICogUjExNTUgKDB4NDgzKSAtIERTUDEgUlggRVEgQmFuZCAxIEIKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotCi0vKgotICogUjExNTYgKDB4NDg0KSAtIERTUDEgUlggRVEgQmFuZCAxIFBHCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IxX1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CMV9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTU3ICgweDQ4NSkgLSBEU1AxIFJYIEVRIEJhbmQgMiBBCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTU4ICgweDQ4NikgLSBEU1AxIFJYIEVRIEJhbmQgMiBCCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTU5ICgweDQ4NykgLSBEU1AxIFJYIEVRIEJhbmQgMiBDCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTYwICgweDQ4OCkgLSBEU1AxIFJYIEVRIEJhbmQgMiBQRwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CMl9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX1BHIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTE2MSAoMHg0ODkpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTE2MiAoMHg0OEEpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQgotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTE2MyAoMHg0OEIpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTE2NCAoMHg0OEMpIC0gRFNQMSBSWCBFUSBCYW5kIDMgUEcKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IzX1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19QRyAtIFsxNTowXSAqLwotCi0vKgotICogUjExNjUgKDB4NDhEKSAtIERTUDEgUlggRVEgQmFuZCA0IEEKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotCi0vKgotICogUjExNjYgKDB4NDhFKSAtIERTUDEgUlggRVEgQmFuZCA0IEIKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotCi0vKgotICogUjExNjcgKDB4NDhGKSAtIERTUDEgUlggRVEgQmFuZCA0IEMKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotCi0vKgotICogUjExNjggKDB4NDkwKSAtIERTUDEgUlggRVEgQmFuZCA0IFBHCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I0X1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNF9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTY5ICgweDQ5MSkgLSBEU1AxIFJYIEVRIEJhbmQgNSBBCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTcwICgweDQ5MikgLSBEU1AxIFJYIEVRIEJhbmQgNSBCCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxMTcxICgweDQ5MykgLSBEU1AxIFJYIEVRIEJhbmQgNSBQRwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CNV9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X1BHIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTI4MCAoMHg1MDApIC0gRFNQMiBUWCBMZWZ0IFZvbHVtZQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyVFhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AyVFhMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJUWExfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlRYTF9WT0wgLSBbNzowXSAqLwotCi0vKgotICogUjEyODEgKDB4NTAxKSAtIERTUDIgVFggUmlnaHQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJUWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJUWFJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYUl9WT0wgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhSX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMTI4MiAoMHg1MDIpIC0gRFNQMiBSWCBMZWZ0IFZvbHVtZQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AyUlhMX1ZPTCAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWExfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlJYTF9WT0wgLSBbNzowXSAqLwotCi0vKgotICogUjEyODMgKDB4NTAzKSAtIERTUDIgUlggUmlnaHQgVm9sdW1lCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF9WVSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhfVlUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX1ZVICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJSWFJfVk9MIC0gWzc6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYUl9WT0wgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhSX1ZPTCAtIFs3OjBdICovCi0KLS8qCi0gKiBSMTI5NiAoMHg1MTApIC0gRFNQMiBUWCBGaWx0ZXJzCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9ORiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMlRYX05GICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfTkZfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERTUDJUWF9ORiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYX05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEU1AyVFhfTkYgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9ORl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYX05GICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERTUDJUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWExfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfSFBGICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfSFBGX01PREVfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfSFBGX01PREVfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfSFBGX01PREVfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAweDAwMDcgIC8qIERTUDJUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWF9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYX0hQRl9DVVQgLSBbMjowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBEU1AyVFhfSFBGX0NVVCAtIFsyOjBdICovCi0KLS8qCi0gKiBSMTMxMiAoMHg1MjApIC0gRFNQMiBSWCBGaWx0ZXJzICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDJSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDJSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDJSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTU9OTyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTU9OT19NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERTUDJSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NT05PICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURVJBVEUgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDJSWF9NVVRFUkFURSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AyUlhfTVVURVJBVEUgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX01VVEVSQVRFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NVVRFUkFURSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AyUlhfVU5NVVRFX1JBTVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRFNQMlJYX1VOTVVURV9SQU1QICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERTUDJSWF9VTk1VVEVfUkFNUCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfVU5NVVRFX1JBTVAgKi8KLQotLyoKLSAqIFIxMzEzICgweDUyMSkgLSBEU1AyIFJYIEZpbHRlcnMgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4M0UwMCAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYXzNEX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYXzNEX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfM0RfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJSWF8zRF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYXzNEX0VOQSAqLwotCi0vKgotICogUjEzNDQgKDB4NTQwKSAtIERTUDIgRFJDICgxKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfUk1TX01BU0sgICAgICAgICAweEY4MDAgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAgMTEgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgIDUgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfUEtfTUFTSyAgICAgICAgICAweDA2MDAgIC8qIERTUDJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgICA5ICAvKiBEU1AyRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfTkdfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfTU9ERSAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfTU9ERV9NQVNLICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgIDcgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVQgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDJEUkNfU0lHX0RFVCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX01BU0sgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AyRFJDX1NJR19ERVQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMkRSQ19TSUdfREVUICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9FTkEgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAgMHgwMDIwICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AyRFJDX1FSICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJEUkNfUVIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMkRSQ19RUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyRFJDX1FSICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FOVElDTElQICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTUDJEUkNfQU5USUNMSVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfQU5USUNMSVBfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMkRSQ19BTlRJQ0xJUCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBEU1AyRFJDX0FOVElDTElQICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfQU5USUNMSVAgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9EUkNfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMlJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9EUkNfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMlJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMlJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWExfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlRYTF9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJUWExfRFJDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBEU1AyVFhMX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWExfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYTF9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJUWFJfRFJDX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlRYUl9EUkNfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AyVFhSX0RSQ19FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJUWFJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYUl9EUkNfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyVFhSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfRFJDX0VOQSAqLwotCi0vKgotICogUjEzNDUgKDB4NTQxKSAtIERTUDIgRFJDICgyKQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FUS19NQVNLICAgICAgICAgICAgICAgICAweDFFMDAgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0RDWV9NQVNLICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIERTUDJEUkNfRENZIC0gWzg6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19EQ1kgLSBbODo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyRFJDX0RDWSAtIFs4OjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMUMgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCi0KLS8qCi0gKiBSMTM0NiAoMHg1NDIpIC0gRFNQMiBEUkMgKDMpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfTUlOR0FJTl9NQVNLICAgICAgICAgIDB4RjAwMCAgLyogRFNQMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgIDEyICAvKiBEU1AyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgIDQgIC8qIERTUDJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfTkdfRVhQX01BU0sgICAgICAgICAgICAgIDB4MEMwMCAgLyogRFNQMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJEUkNfTkdfRVhQIC0gWzExOjEwXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBEU1AyRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfVEhSX01BU0sgICAgICAgICAgICAgIDB4MDMwMCAgLyogRFNQMkRSQ19RUl9USFIgLSBbOTo4XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyRFJDX1FSX1RIUiAtIFs5OjhdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfUVJfRENZX01BU0sgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFNQMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBEU1AyRFJDX1FSX0RDWSAtIFs3OjZdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAzOCAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KLQotLyoKLSAqIFIxMzQ3ICgweDU0MykgLSBEU1AyIERSQyAoNCkKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFX0lQX01BU0sgICAgICAgICAgICAgMHgwN0UwICAvKiBEU1AyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFX0lQIC0gWzEwOjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIERTUDJEUkNfS05FRV9JUCAtIFsxMDo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFX09QX01BU0sgICAgICAgICAgICAgMHgwMDFGICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLwotCi0vKgotICogUjEzNDggKDB4NTQ0KSAtIERTUDIgRFJDICg1KQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX0lQX01BU0sgICAgICAgICAgICAweDAzRTAgIC8qIERTUDJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFMl9JUCAtIFs5OjVdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX0tORUUyX09QX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIERTUDJEUkNfS05FRTJfT1AgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AyRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFMl9PUCAtIFs0OjBdICovCi0KLS8qCi0gKiBSMTQwOCAoMHg1ODApIC0gRFNQMiBSWCBFUSBHYWlucyAoMSkKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AyUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMlJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgMHgwMDNFICAvKiBEU1AyUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AyUlhfRVFfRU5BICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJSWF9FUV9FTkEgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0VOQSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfRVFfRU5BICovCi0KLS8qCi0gKiBSMTQwOSAoMHg1ODEpIC0gRFNQMiBSWCBFUSBHYWlucyAoMikKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AyUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMlJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLwotCi0vKgotICogUjE0MTAgKDB4NTgyKSAtIERTUDIgUlggRVEgQmFuZCAxIEEKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MTEgKDB4NTgzKSAtIERTUDIgUlggRVEgQmFuZCAxIEIKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MTIgKDB4NTg0KSAtIERTUDIgUlggRVEgQmFuZCAxIFBHCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IxX1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CMV9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDEzICgweDU4NSkgLSBEU1AyIFJYIEVRIEJhbmQgMiBBCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDE0ICgweDU4NikgLSBEU1AyIFJYIEVRIEJhbmQgMiBCCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDE1ICgweDU4NykgLSBEU1AyIFJYIEVRIEJhbmQgMiBDCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDE2ICgweDU4OCkgLSBEU1AyIFJYIEVRIEJhbmQgMiBQRwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CMl9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX1BHIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTQxNyAoMHg1ODkpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQQotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTQxOCAoMHg1OEEpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQgotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTQxOSAoMHg1OEIpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTQyMCAoMHg1OEMpIC0gRFNQMiBSWCBFUSBCYW5kIDMgUEcKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IzX1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19QRyAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MjEgKDB4NThEKSAtIERTUDIgUlggRVEgQmFuZCA0IEEKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MjIgKDB4NThFKSAtIERTUDIgUlggRVEgQmFuZCA0IEIKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MjMgKDB4NThGKSAtIERTUDIgUlggRVEgQmFuZCA0IEMKLSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLwotCi0vKgotICogUjE0MjQgKDB4NTkwKSAtIERTUDIgUlggRVEgQmFuZCA0IFBHCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I0X1BHIC0gWzE1OjBdICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNF9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDI1ICgweDU5MSkgLSBEU1AyIFJYIEVRIEJhbmQgNSBBCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDI2ICgweDU5MikgLSBEU1AyIFJYIEVRIEJhbmQgNSBCCi0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KLQotLyoKLSAqIFIxNDI3ICgweDU5MykgLSBEU1AyIFJYIEVRIEJhbmQgNSBQRwotICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CNV9QRyAtIFsxNTowXSAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X1BHIC0gWzE1OjBdICovCi0KLS8qCi0gKiBSMTUzNiAoMHg2MDApIC0gREFDMSBNaXhlciBWb2x1bWVzCi0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDNFMCAgLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCi0jZGVmaW5lIFdNODkxNV9BRENSX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMV9WT0wgLSBbOTo1XSAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQzFfVk9MIC0gWzk6NV0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxRiAgLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCi0jZGVmaW5lIFdNODkxNV9BRENMX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfREFDMV9WT0wgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENMX0RBQzFfVk9MIC0gWzQ6MF0gKi8KLQotLyoKLSAqIFIxNTM3ICgweDYwMSkgLSBEQUMxIExlZnQgTWl4ZXIgUm91dGluZwotICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMUwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxTCAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzFMICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMUwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxTCAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMxTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFMICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMUwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMxTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMxTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhMX1RPX0RBQzFMICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzFMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMUwgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWExfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYTF9UT19EQUMxTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzFMICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzFMICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWExfVE9fREFDMUwgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMUxfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMxTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhMX1RPX0RBQzFMICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfVE9fREFDMUwgKi8KLQotLyoKLSAqIFIxNTM4ICgweDYwMikgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKLSAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFSICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMVIgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMxUiAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzFSICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzFSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMVIgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxUiAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzFSICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMVIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMVIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYUl9UT19EQUMxUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMxUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzFSICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfVE9fREFDMVIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMxUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhSX1RPX0RBQzFSICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMVIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWFJfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9UT19EQUMxUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhSX1RPX0RBQzFSICovCi0KLS8qCi0gKiBSMTUzOSAoMHg2MDMpIC0gREFDMiBNaXhlciBWb2x1bWVzCi0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfREFDMl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDNFMCAgLyogQURDUl9EQUMyX1ZPTCAtIFs5OjVdICovCi0jZGVmaW5lIFdNODkxNV9BRENSX0RBQzJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQzJfVk9MIC0gWzk6NV0gKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfREFDMl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxRiAgLyogQURDTF9EQUMyX1ZPTCAtIFs0OjBdICovCi0jZGVmaW5lIFdNODkxNV9BRENMX0RBQzJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENMX0RBQzJfVk9MIC0gWzQ6MF0gKi8KLQotLyoKLSAqIFIxNTQwICgweDYwNCkgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZwotICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMkwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMkxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyTCAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzJMICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMkwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMkwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyTCAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJMICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMkwgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMyTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMyTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhMX1RPX0RBQzJMICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhMX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMkwgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWExfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYTF9UT19EQUMyTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzJMICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzJMICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWExfVE9fREFDMkwgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWExfVE9fREFDMkxfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMyTCAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhMX1RPX0RBQzJMICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfVE9fREFDMkwgKi8KLQotLyoKLSAqIFIxNTQxICgweDYwNSkgLSBEQUMyIFJpZ2h0IE1peGVyIFJvdXRpbmcKLSAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJSICovCi0jZGVmaW5lIFdNODkxNV9BRENSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMlIgKi8KLSNkZWZpbmUgV004OTE1X0FEQ1JfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMyUiAqLwotI2RlZmluZSBXTTg5MTVfQURDUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzJSICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMlIgKi8KLSNkZWZpbmUgV004OTE1X0FEQ0xfVE9fREFDMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyUiAqLwotI2RlZmluZSBXTTg5MTVfQURDTF9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzJSICovCi0jZGVmaW5lIFdNODkxNV9BRENMX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMlIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMlIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYUl9UT19EQUMyUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMlJYUl9UT19EQUMyUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzJSICovCi0jZGVmaW5lIFdNODkxNV9EU1AyUlhSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfVE9fREFDMlIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJSWFJfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMyUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhSX1RPX0RBQzJSICovCi0jZGVmaW5lIFdNODkxNV9EU1AxUlhSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMlIgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFSWFJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9UT19EQUMyUiAqLwotI2RlZmluZSBXTTg5MTVfRFNQMVJYUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhSX1RPX0RBQzJSICovCi0KLS8qCi0gKiBSMTU0MiAoMHg2MDYpIC0gRFNQMSBUWCBMZWZ0IE1peGVyIFJvdXRpbmcKLSAqLwotI2RlZmluZSBXTTg5MTVfQURDMUxfVE9fRFNQMVRYTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMxTF9UT19EU1AxVFhMICovCi0jZGVmaW5lIFdNODkxNV9BREMxTF9UT19EU1AxVFhMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFMX1RPX0RTUDFUWEwgKi8KLSNkZWZpbmUgV004OTE1X0FEQzFMX1RPX0RTUDFUWExfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQURDMUxfVE9fRFNQMVRYTCAqLwotI2RlZmluZSBXTTg5MTVfQURDMUxfVE9fRFNQMVRYTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBREMxTF9UT19EU1AxVFhMICovCi0jZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDFUWEwgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMVRYTCAqLwotI2RlZmluZSBXTTg5MTVfREFDTF9UT19EU1AxVFhMX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNMX1RPX0RTUDFUWEwgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMVRYTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9UT19EU1AxVFhMICovCi0jZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDFUWExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fRFNQMVRYTCAqLwotCi0vKgotICogUjE1NDMgKDB4NjA3KSAtIERTUDEgVFggUmlnaHQgTWl4ZXIgUm91dGluZwotICovCi0jZGVmaW5lIFdNODkxNV9BREMxUl9UT19EU1AxVFhSICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFSX1RPX0RTUDFUWFIgKi8KLSNkZWZpbmUgV004OTE1X0FEQzFSX1RPX0RTUDFUWFJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMVJfVE9fRFNQMVRYUiAqLwotI2RlZmluZSBXTTg5MTVfQURDMVJfVE9fRFNQMVRYUl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMxUl9UT19EU1AxVFhSICovCi0jZGVmaW5lIFdNODkxNV9BREMxUl9UT19EU1AxVFhSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzFSX1RPX0RTUDFUWFIgKi8KLSNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMVRYUiAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AxVFhSICovCi0jZGVmaW5lIFdNODkxNV9EQUNSX1RPX0RTUDFUWFJfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfVE9fRFNQMVRYUiAqLwotI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AxVFhSX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1RPX0RTUDFUWFIgKi8KLSNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMVRYUl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9UT19EU1AxVFhSICovCi0KLS8qCi0gKiBSMTU0NCAoMHg2MDgpIC0gRFNQMiBUWCBMZWZ0IE1peGVyIFJvdXRpbmcKLSAqLwotI2RlZmluZSBXTTg5MTVfQURDMkxfVE9fRFNQMlRYTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMyTF9UT19EU1AyVFhMICovCi0jZGVmaW5lIFdNODkxNV9BREMyTF9UT19EU1AyVFhMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJMX1RPX0RTUDJUWEwgKi8KLSNkZWZpbmUgV004OTE1X0FEQzJMX1RPX0RTUDJUWExfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQURDMkxfVE9fRFNQMlRYTCAqLwotI2RlZmluZSBXTTg5MTVfQURDMkxfVE9fRFNQMlRYTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBREMyTF9UT19EU1AyVFhMICovCi0jZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDJUWEwgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMlRYTCAqLwotI2RlZmluZSBXTTg5MTVfREFDTF9UT19EU1AyVFhMX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNMX1RPX0RTUDJUWEwgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xfVE9fRFNQMlRYTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9UT19EU1AyVFhMICovCi0jZGVmaW5lIFdNODkxNV9EQUNMX1RPX0RTUDJUWExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fRFNQMlRYTCAqLwotCi0vKgotICogUjE1NDUgKDB4NjA5KSAtIERTUDIgVFggUmlnaHQgTWl4ZXIgUm91dGluZwotICovCi0jZGVmaW5lIFdNODkxNV9BREMyUl9UT19EU1AyVFhSICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJSX1RPX0RTUDJUWFIgKi8KLSNkZWZpbmUgV004OTE1X0FEQzJSX1RPX0RTUDJUWFJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMlJfVE9fRFNQMlRYUiAqLwotI2RlZmluZSBXTTg5MTVfQURDMlJfVE9fRFNQMlRYUl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMyUl9UT19EU1AyVFhSICovCi0jZGVmaW5lIFdNODkxNV9BREMyUl9UT19EU1AyVFhSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzJSX1RPX0RTUDJUWFIgKi8KLSNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMlRYUiAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AyVFhSICovCi0jZGVmaW5lIFdNODkxNV9EQUNSX1RPX0RTUDJUWFJfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfVE9fRFNQMlRYUiAqLwotI2RlZmluZSBXTTg5MTVfREFDUl9UT19EU1AyVFhSX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1RPX0RTUDJUWFIgKi8KLSNkZWZpbmUgV004OTE1X0RBQ1JfVE9fRFNQMlRYUl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9UT19EU1AyVFhSICovCi0KLS8qCi0gKiBSMTU0NiAoMHg2MEEpIC0gRFNQIFRYIE1peGVyIFNlbGVjdAotICovCi0jZGVmaW5lIFdNODkxNV9EQUNfVE9fRFNQVFhfU1JDICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19UT19EU1BUWF9TUkMgKi8KLSNkZWZpbmUgV004OTE1X0RBQ19UT19EU1BUWF9TUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX1RPX0RTUFRYX1NSQyAqLwotI2RlZmluZSBXTTg5MTVfREFDX1RPX0RTUFRYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQUNfVE9fRFNQVFhfU1JDICovCi0jZGVmaW5lIFdNODkxNV9EQUNfVE9fRFNQVFhfU1JDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQ19UT19EU1BUWF9TUkMgKi8KLQotLyoKLSAqIFIxNTUyICgweDYxMCkgLSBEQUMgU29mdG11dGUKLSAqLwotI2RlZmluZSBXTTg5MTVfREFDX1NPRlRNVVRFTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNfU09GVE1VVEVNT0RFICovCi0jZGVmaW5lIFdNODkxNV9EQUNfU09GVE1VVEVNT0RFX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ19TT0ZUTVVURU1PREVfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogREFDX1NPRlRNVVRFTU9ERSAqLwotI2RlZmluZSBXTTg5MTVfREFDX1NPRlRNVVRFTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUNfU09GVE1VVEVNT0RFICovCi0jZGVmaW5lIFdNODkxNV9EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19NVVRFUkFURSAqLwotI2RlZmluZSBXTTg5MTVfREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfTVVURVJBVEUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX01VVEVSQVRFICovCi0jZGVmaW5lIFdNODkxNV9EQUNfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFUkFURSAqLwotCi0vKgotICogUjE1NjggKDB4NjIwKSAtIE92ZXJzYW1wbGluZwotICovCi0jZGVmaW5lIFdNODkxNV9TUEtfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS19PU1IxMjggKi8KLSNkZWZpbmUgV004OTE1X1NQS19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLX09TUjEyOCAqLwotI2RlZmluZSBXTTg5MTVfU1BLX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtfT1NSMTI4ICovCi0jZGVmaW5lIFdNODkxNV9TUEtfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS19PU1IxMjggKi8KLSNkZWZpbmUgV004OTE1X0RNSUNfT1NSNjQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQ19PU1I2NCAqLwotI2RlZmluZSBXTTg5MTVfRE1JQ19PU1I2NF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBETUlDX09TUjY0ICovCi0jZGVmaW5lIFdNODkxNV9ETUlDX09TUjY0X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERNSUNfT1NSNjQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNfT1NSNjRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ19PU1I2NCAqLwotI2RlZmluZSBXTTg5MTVfQURDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENfT1NSMTI4ICovCi0jZGVmaW5lIFdNODkxNV9BRENfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19PU1IxMjggKi8KLSNkZWZpbmUgV004OTE1X0FEQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX09TUjEyOCAqLwotI2RlZmluZSBXTTg5MTVfQURDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCi0jZGVmaW5lIFdNODkxNV9EQUNfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19PU1IxMjggKi8KLSNkZWZpbmUgV004OTE1X0RBQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX09TUjEyOCAqLwotI2RlZmluZSBXTTg5MTVfREFDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNfT1NSMTI4ICovCi0jZGVmaW5lIFdNODkxNV9EQUNfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19PU1IxMjggKi8KLQotLyoKLSAqIFIxNTY5ICgweDYyMSkgLSBTaWRldG9uZQotICovCi0jZGVmaW5lIFdNODkxNV9TVF9MUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNUX0xQRiAqLwotI2RlZmluZSBXTTg5MTVfU1RfTFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTVF9MUEYgKi8KLSNkZWZpbmUgV004OTE1X1NUX0xQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogU1RfTFBGICovCi0jZGVmaW5lIFdNODkxNV9TVF9MUEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUX0xQRiAqLwotI2RlZmluZSBXTTg5MTVfU1RfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMzgwICAvKiBTVF9IUEZfQ1VUIC0gWzk6N10gKi8KLSNkZWZpbmUgV004OTE1X1NUX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1RfSFBGX0NVVCAtIFs5OjddICovCi0jZGVmaW5lIFdNODkxNV9TVF9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLwotI2RlZmluZSBXTTg5MTVfU1RfSFBGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTVF9IUEYgKi8KLSNkZWZpbmUgV004OTE1X1NUX0hQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1RfSFBGICovCi0jZGVmaW5lIFdNODkxNV9TVF9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNUX0hQRiAqLwotI2RlZmluZSBXTTg5MTVfU1RfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVF9IUEYgKi8KLSNkZWZpbmUgV004OTE1X1NUUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1RSX1NFTCAqLwotI2RlZmluZSBXTTg5MTVfU1RSX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTVFJfU0VMICovCi0jZGVmaW5lIFdNODkxNV9TVFJfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUUl9TRUwgKi8KLSNkZWZpbmUgV004OTE1X1NUUl9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RSX1NFTCAqLwotI2RlZmluZSBXTTg5MTVfU1RMX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTVExfU0VMICovCi0jZGVmaW5lIFdNODkxNV9TVExfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNUTF9TRUwgKi8KLSNkZWZpbmUgV004OTE1X1NUTF9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1RMX1NFTCAqLwotI2RlZmluZSBXTTg5MTVfU1RMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVExfU0VMICovCi0KLS8qCi0gKiBSMTc5MiAoMHg3MDApIC0gR1BJTyAxCi0gKi8KLSNkZWZpbmUgV004OTE1X0dQMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AxX0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDFfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDFfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQMV9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1AxX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AxX1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQMV9QVSAqLwotI2RlZmluZSBXTTg5MTVfR1AxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AxX1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQMV9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1AxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDFfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMV9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AxX1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1AxX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDFfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDFfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMV9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AxX09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1AxX09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDFfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDFfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQMV9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDFfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AxX0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDFfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQMV9EQiAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AxX0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDFfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDFfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQMV9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDFfRk4gLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDFfRk4gLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfR1AxX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDFfRk4gLSBbMzowXSAqLwotCi0vKgotICogUjE3OTMgKDB4NzAxKSAtIEdQSU8gMgotICovCi0jZGVmaW5lIFdNODkxNV9HUDJfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQMl9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AyX0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1AyX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUDJfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDJfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AyX1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQMl9QVSAqLwotI2RlZmluZSBXTTg5MTVfR1AyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUDJfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQMl9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1AyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1AyX1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1AyX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDJfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDJfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMl9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1AyX1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1AyX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDJfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQMl9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AyX09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1AyX09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDJfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDJfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AyX0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDJfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQMl9EQiAqLwotI2RlZmluZSBXTTg5MTVfR1AyX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUDJfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDJfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQMl9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AyX0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1AyX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUDJfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDJfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0dQMl9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0dQMl9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KLQotLyoKLSAqIFIxNzk0ICgweDcwMikgLSBHUElPIDMKLSAqLwotI2RlZmluZSBXTTg5MTVfR1AzX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDNfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDNfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQM19ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQM19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogR1AzX0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1AzX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQM19QVSAqLwotI2RlZmluZSBXTTg5MTVfR1AzX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDNfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQM19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogR1AzX1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19QVSAqLwotI2RlZmluZSBXTTg5MTVfR1AzX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDNfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AzX1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQM19QRCAqLwotI2RlZmluZSBXTTg5MTVfR1AzX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AzX1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1AzX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDNfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDNfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQM19QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQM19QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1AzX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDNfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDNfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQM19PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQM19PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1AzX09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1AzX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDNfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQM19EQiAqLwotI2RlZmluZSBXTTg5MTVfR1AzX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDNfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQM19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1AzX0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDNfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19EQiAqLwotI2RlZmluZSBXTTg5MTVfR1AzX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDNfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDNfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQM19MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQM19MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1AzX0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1AzX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDNfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQM19GTiAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9HUDNfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQM19GTiAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9HUDNfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQM19GTiAtIFszOjBdICovCi0KLS8qCi0gKiBSMTc5NSAoMHg3MDMpIC0gR1BJTyA0Ci0gKi8KLSNkZWZpbmUgV004OTE1X0dQNF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1A0X0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDRfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDRfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQNF9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1A0X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDRfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1A0X1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQNF9QVSAqLwotI2RlZmluZSBXTTg5MTVfR1A0X1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1A0X1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQNF9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1A0X1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDRfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDRfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQNF9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1A0X1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1A0X1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDRfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNF9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1A0X09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1A0X09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDRfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDRfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQNF9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDRfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A0X0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQNF9EQiAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A0X0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDRfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDRfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQNF9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDRfRk4gLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDRfRk4gLSBbMzowXSAqLwotI2RlZmluZSBXTTg5MTVfR1A0X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDRfRk4gLSBbMzowXSAqLwotCi0vKgotICogUjE3OTYgKDB4NzA0KSAtIEdQSU8gNQotICovCi0jZGVmaW5lIFdNODkxNV9HUDVfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQNV9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1A1X0RJUiAqLwotI2RlZmluZSBXTTg5MTVfR1A1X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUDVfRElSICovCi0jZGVmaW5lIFdNODkxNV9HUDVfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9ESVIgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1A1X1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDVfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQNV9QVSAqLwotI2RlZmluZSBXTTg5MTVfR1A1X1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUDVfUFUgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X1BVICovCi0jZGVmaW5lIFdNODkxNV9HUDVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQNV9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1A1X1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDVfUEQgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1A1X1BEICovCi0jZGVmaW5lIFdNODkxNV9HUDVfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9QRCAqLwotI2RlZmluZSBXTTg5MTVfR1A1X1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDVfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDVfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQNV9QT0wgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1A1X1BPTCAqLwotI2RlZmluZSBXTTg5MTVfR1A1X1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfUE9MICovCi0jZGVmaW5lIFdNODkxNV9HUDVfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQNV9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1A1X09QX0NGRyAqLwotI2RlZmluZSBXTTg5MTVfR1A1X09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDVfT1BfQ0ZHICovCi0jZGVmaW5lIFdNODkxNV9HUDVfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9PUF9DRkcgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A1X0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDVfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQNV9EQiAqLwotI2RlZmluZSBXTTg5MTVfR1A1X0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUDVfREIgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0RCICovCi0jZGVmaW5lIFdNODkxNV9HUDVfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQNV9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A1X0xWTCAqLwotI2RlZmluZSBXTTg5MTVfR1A1X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUDVfTFZMICovCi0jZGVmaW5lIFdNODkxNV9HUDVfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9MVkwgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0dQNV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X0dQNV9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KLQotLyoKLSAqIFIxODI0ICgweDcyMCkgLSBQdWxsIENvbnRyb2wgKDEpCi0gKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQyX1BEICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ0RBVDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQyX1BEX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ0RBVDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogRE1JQ0RBVDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ0RBVDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQxX1BEICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRE1JQ0RBVDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQxX1BEX01BU0sgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRE1JQ0RBVDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogRE1JQ0RBVDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RNSUNEQVQxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ0RBVDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogTUNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMSzJfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMSzJfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUNMSzJfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzJfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTUNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X01DTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDFfUFUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMV9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDREFUMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVQxX1BVICovCi0jZGVmaW5lIFdNODkxNV9EQUNEQVQxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERBQ0RBVDFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMV9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDREFUMV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQxX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNEQVQxX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVDFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREFDREFUMV9QRCAqLwotI2RlZmluZSBXTTg5MTVfREFDREFUMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVQxX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xSQ0xLMV9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTFJDTEsxX1BVICovCi0jZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xSQ0xLMV9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsxX1BEICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMUkNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsxX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNMUkNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ0xSQ0xLMV9QRCAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUFUgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMSzFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0JDTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUEQgKi8KLQotLyoKLSAqIFIxODI1ICgweDcyMSkgLSBQdWxsIENvbnRyb2wgKDIpCi0gKi8KLSNkZWZpbmUgV004OTE1X0xETzFFTkFfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTERPMUVOQV9QRCAqLwotI2RlZmluZSBXTTg5MTVfTERPMUVOQV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRE8xRU5BX1BEICovCi0jZGVmaW5lIFdNODkxNV9MRE8xRU5BX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExETzFFTkFfUEQgKi8KLSNkZWZpbmUgV004OTE1X0xETzFFTkFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMUVOQV9QRCAqLwotI2RlZmluZSBXTTg5MTVfQUREUl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBRERSX1BEICovCi0jZGVmaW5lIFdNODkxNV9BRERSX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFERFJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0FERFJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogQUREUl9QRCAqLwotI2RlZmluZSBXTTg5MTVfQUREUl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRERSX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNEQVQyX1BVICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVDJfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMl9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDREFUMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQUNEQVQyX1BVICovCi0jZGVmaW5lIFdNODkxNV9EQUNEQVQyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVDJfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUMl9QRCAqLwotI2RlZmluZSBXTTg5MTVfREFDREFUMl9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQyX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNEQVQyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERBQ0RBVDJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0RBVDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMl9QRCAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BVICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMl9QVV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTFJDTEsyX1BVICovCi0jZGVmaW5lIFdNODkxNV9EQUNMUkNMSzJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0xSQ0xLMl9QVSAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzJfUFUgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMl9QRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsyX1BEICovCi0jZGVmaW5lIFdNODkxNV9EQUNMUkNMSzJfUERfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0xSQ0xLMl9QRCAqLwotI2RlZmluZSBXTTg5MTVfREFDTFJDTEsyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNMUkNMSzJfUEQgKi8KLSNkZWZpbmUgV004OTE1X0RBQ0xSQ0xLMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDTEsyX1BEICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsyX1BVICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsyX1BVICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BVICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BVICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsyX1BEICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsyX1BEICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEsyX1BEICovCi0jZGVmaW5lIFdNODkxNV9CQ0xLMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BEICovCi0KLS8qCi0gKiBSMTg0MCAoMHg3MzApIC0gSW50ZXJydXB0IFN0YXR1cyAxCi0gKi8KLSNkZWZpbmUgV004OTE1X0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1A1X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogR1A0X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQNF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogR1AzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0dQMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0VJTlQgKi8KLQotLyoKLSAqIFIxODQxICgweDczMSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIKLSAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMjNfRUlOVCAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfRE9ORV8yM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19FSU5UX01BU0sgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RDU19ET05FXzIzX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAxMiAgLyogRENTX0RPTkVfMjNfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMjNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRE9ORV8yM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9FSU5UICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19ET05FXzAxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RDU19ET05FXzAxX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX0RPTkVfMDFfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDExICAvKiBEQ1NfRE9ORV8wMV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzAxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDIwMCAgLyogRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgNyAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgNiAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9TV19DTEtfRE9ORV9FSU5UICAgICAgICAgICAgIDB4MDAwOCAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9TV19DTEtfRE9ORV9FSU5UX01BU0sgICAgICAgIDB4MDAwOCAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9TV19DTEtfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgMyAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9TV19DTEtfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSFBfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUF9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0hQX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBfRE9ORV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9IUF9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX0RPTkVfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSFBfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9NSUNEX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfTUlDRF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNEX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X01JQ0RfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9FSU5UICovCi0KLS8qCi0gKiBSMTg0MiAoMHg3MzIpIC0gSW50ZXJydXB0IFJhdyBTdGF0dXMgMgotICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19TVFMgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMjNfU1RTX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfRE9ORV8yM19TVFMgKi8KLSNkZWZpbmUgV004OTE1X0RDU19ET05FXzIzX1NUU19TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogRENTX0RPTkVfMjNfU1RTICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8yM19TVFNfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzIzX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMDFfU1RTICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KLSNkZWZpbmUgV004OTE1X0RDU19ET05FXzAxX1NUU19NQVNLICAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX0RPTkVfMDFfU1RTICovCi0jZGVmaW5lIFdNODkxNV9EQ1NfRE9ORV8wMV9TVFNfU0hJRlQgICAgICAgICAgICAgICAgMTEgIC8qIERDU19ET05FXzAxX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRENTX0RPTkVfMDFfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfV1NFUV9ET05FX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBXU0VRX0RPTkVfU1RTICovCi0jZGVmaW5lIFdNODkxNV9XU0VRX0RPTkVfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIFdTRVFfRE9ORV9TVFMgKi8KLSNkZWZpbmUgV004OTE1X1dTRVFfRE9ORV9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9ET05FX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBGSUZPU19FUlJfU1RTICovCi0jZGVmaW5lIFdNODkxNV9GSUZPU19FUlJfU1RTX01BU0sgICAgICAgICAgICAgICAweDAyMDAgIC8qIEZJRk9TX0VSUl9TVFMgKi8KLSNkZWZpbmUgV004OTE1X0ZJRk9TX0VSUl9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgOSAgLyogRklGT1NfRVJSX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRklGT1NfRVJSX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGSUZPU19FUlJfU1RTICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfU1RTICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9TVFMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDJEUkNfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRFNQMkRSQ19TSUdfREVUX1NUU19TSElGVCAgICAgICAgICAgICA3ICAvKiBEU1AyRFJDX1NJR19ERVRfU1RTICovCi0jZGVmaW5lIFdNODkxNV9EU1AyRFJDX1NJR19ERVRfU1RTX1dJRFRIICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVF9TVFMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9TVFMgICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRFNQMURSQ19TSUdfREVUX1NUU19NQVNLICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVRfU1RTICovCi0jZGVmaW5lIFdNODkxNV9EU1AxRFJDX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgIDYgIC8qIERTUDFEUkNfU0lHX0RFVF9TVFMgKi8KLSNkZWZpbmUgV004OTE1X0RTUDFEUkNfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19TVFMgKi8KLSNkZWZpbmUgV004OTE1X0ZMTF9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfU1RTICovCi0jZGVmaW5lIFdNODkxNV9GTExfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX1NUUyAqLwotI2RlZmluZSBXTTg5MTVfRkxMX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19TVFMgKi8KLQotLyoKLSAqIFIxODQ4ICgweDczOCkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzawotICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDVfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQNV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDVfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQNV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIElNX0dQNV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQNV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQNF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDRfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQNF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIElNX0dQNF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQNF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0dQM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDNfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0dQM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElNX0dQM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0dQMl9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0dQMl9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMl9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMl9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0dQMV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0dQMV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElNX0dQMV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9HUDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMV9FSU5UICovCi0KLS8qCi0gKiBSMTg0OSAoMHg3MzkpIC0gSW50ZXJydXB0IFN0YXR1cyAyIE1hc2sKLSAqLwotI2RlZmluZSBXTTg5MTVfSU1fRENTX0RPTkVfMjNfRUlOVCAgICAgICAgICAgICAgMHgxMDAwICAvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8yM19FSU5UX01BU0sgICAgICAgICAweDEwMDAgIC8qIElNX0RDU19ET05FXzIzX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RDU19ET05FXzIzX0VJTlRfU0hJRlQgICAgICAgICAgICAxMiAgLyogSU1fRENTX0RPTkVfMjNfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fRENTX0RPTkVfMjNfRUlOVF9XSURUSCAgICAgICAgICAgICAxICAvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8wMV9FSU5UICAgICAgICAgICAgICAweDA4MDAgIC8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RDU19ET05FXzAxX0VJTlRfTUFTSyAgICAgICAgIDB4MDgwMCAgLyogSU1fRENTX0RPTkVfMDFfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fRENTX0RPTkVfMDFfRUlOVF9TSElGVCAgICAgICAgICAgIDExICAvKiBJTV9EQ1NfRE9ORV8wMV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9EQ1NfRE9ORV8wMV9FSU5UX1dJRFRIICAgICAgICAgICAgIDEgIC8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgIDB4MDQwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX1dTRVFfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAxMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5UX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAgOSAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgIDB4MDA4MCAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDA4MCAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgNyAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgIDB4MDA0MCAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDA0MCAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgNiAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UICAgICAgICAgIDB4MDAwOCAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX01BU0sgICAgIDB4MDAwOCAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX1NISUZUICAgICAgICAgMyAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fSFBfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9IUF9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX0hQX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fSFBfRE9ORV9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9IUF9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEgIC8qIElNX0hQX0RPTkVfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fSFBfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9IUF9ET05FX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX01JQ0RfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDRF9FSU5UICovCi0jZGVmaW5lIFdNODkxNV9JTV9NSUNEX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX01JQ0RfRUlOVCAqLwotI2RlZmluZSBXTTg5MTVfSU1fTUlDRF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBJTV9NSUNEX0VJTlQgKi8KLSNkZWZpbmUgV004OTE1X0lNX01JQ0RfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDRF9FSU5UICovCi0KLS8qCi0gKiBSMTg1NiAoMHg3NDApIC0gSW50ZXJydXB0IENvbnRyb2wKLSAqLwotI2RlZmluZSBXTTg5MTVfSU1fSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9JUlEgKi8KLSNkZWZpbmUgV004OTE1X0lNX0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fSVJRICovCi0jZGVmaW5lIFdNODkxNV9JTV9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElNX0lSUSAqLwotI2RlZmluZSBXTTg5MTVfSU1fSVJRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9JUlEgKi8KLQotLyoKLSAqIFIyMDQ4ICgweDgwMCkgLSBMZWZ0IFBETSBTcGVha2VyCi0gKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLTF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9TUEtMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS0xfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfU1BLTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtMX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9TUEtMX01VVEVfWkMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS0xfTVVURV9aQyAqLwotI2RlZmluZSBXTTg5MTVfU1BLTF9NVVRFX1pDX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTUEtMX01VVEVfWkMgKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfTVVURV9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLTF9NVVRFX1pDICovCi0jZGVmaW5lIFdNODkxNV9TUEtMX01VVEVfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0xfTVVURV9aQyAqLwotI2RlZmluZSBXTTg5MTVfU1BLTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtMX1NSQyAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9TUEtMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS0xfU1JDIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLTF9TUkMgLSBbMTowXSAqLwotCi0vKgotICogUjIwNDkgKDB4ODAxKSAtIFJpZ2h0IFBETSBTcGVha2VyCi0gKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9FTkEgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9TUEtSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS1JfTVVURSAqLwotI2RlZmluZSBXTTg5MTVfU1BLUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtSX01VVEUgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9NVVRFICovCi0jZGVmaW5lIFdNODkxNV9TUEtSX01VVEVfWkMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS1JfTVVURV9aQyAqLwotI2RlZmluZSBXTTg5MTVfU1BLUl9NVVRFX1pDX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTUEtSX01VVEVfWkMgKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfTVVURV9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLUl9NVVRFX1pDICovCi0jZGVmaW5lIFdNODkxNV9TUEtSX01VVEVfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS1JfTVVURV9aQyAqLwotI2RlZmluZSBXTTg5MTVfU1BLUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtSX1NSQyAtIFsxOjBdICovCi0jZGVmaW5lIFdNODkxNV9TUEtSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS1JfU1JDIC0gWzE6MF0gKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLUl9TUkMgLSBbMTowXSAqLwotCi0vKgotICogUjIwNTAgKDB4ODAyKSAtIFBETSBTcGVha2VyIE11dGUgU2VxdWVuY2UKLSAqLwotI2RlZmluZSBXTTg5MTVfU1BLX01VVEVfRU5ESUFOICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtfTVVURV9FTkRJQU4gKi8KLSNkZWZpbmUgV004OTE1X1NQS19NVVRFX0VORElBTl9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLX01VVEVfRU5ESUFOICovCi0jZGVmaW5lIFdNODkxNV9TUEtfTVVURV9FTkRJQU5fU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIFNQS19NVVRFX0VORElBTiAqLwotI2RlZmluZSBXTTg5MTVfU1BLX01VVEVfRU5ESUFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBTUEtfTVVURV9FTkRJQU4gKi8KLSNkZWZpbmUgV004OTE1X1NQS19NVVRFX1NFUTFfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogU1BLX01VVEVfU0VRMSAtIFs3OjBdICovCi0jZGVmaW5lIFdNODkxNV9TUEtfTVVURV9TRVExX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS19NVVRFX1NFUTEgLSBbNzowXSAqLwotI2RlZmluZSBXTTg5MTVfU1BLX01VVEVfU0VRMV9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtfTVVURV9TRVExIC0gWzc6MF0gKi8KLQotLyoKLSAqIFIyMDUxICgweDgwMykgLSBQRE0gU3BlYWtlciBWb2x1bWUKLSAqLwotI2RlZmluZSBXTTg5MTVfU1BLUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEYwICAvKiBTUEtSX1ZPTCAtIFs3OjRdICovCi0jZGVmaW5lIFdNODkxNV9TUEtSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFNQS1JfVk9MIC0gWzc6NF0gKi8KLSNkZWZpbmUgV004OTE1X1NQS1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLUl9WT0wgLSBbNzo0XSAqLwotI2RlZmluZSBXTTg5MTVfU1BLTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBTUEtMX1ZPTCAtIFszOjBdICovCi0jZGVmaW5lIFdNODkxNV9TUEtMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS0xfVk9MIC0gWzM6MF0gKi8KLSNkZWZpbmUgV004OTE1X1NQS0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLTF9WT0wgLSBbMzowXSAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCmluZGV4IDYwZDc0MGUuLjE3MjU1NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwpAQCAtMjIyMSw2ICsyMjIxLDggQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKIAkJaWYgKGZsbCkgeworCQkJdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJndtODk2Mi0+ZmxsX2xvY2spOworCiAJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjJfRkxMX0NPTlRST0xfMSwKIAkJCQkJICAgIFdNODk2Ml9GTExfRU5BLCBXTTg5NjJfRkxMX0VOQSk7CiAJCQlpZiAod204OTYyLT5pcnEpIHsKQEAgLTI5MjcsMTAgKzI5MjksNiBAQAogCQkJCQkgICAgV004OTYyX0JJQVNfRU5BIHwgMHgxODApOwogCiAJCQltc2xlZXAoNSk7Ci0KLQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2Ml9DTE9DS0lORzIsCi0JCQkJCSAgICBXTTg5NjJfQ0xLUkVHX09WRCwKLQkJCQkJICAgIFdNODk2Ml9DTEtSRUdfT1ZEKTsKIAkJfQogCiAJCS8qIFZNSUQgMioyNTBrICovCkBAIC0zMjg4LDYgKzMyODYsOCBAQAogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2Ml9GTExfQ09OVFJPTF83LCBmbGxfZGl2LmxhbWJkYSk7CiAJc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX0ZMTF9DT05UUk9MXzgsIGZsbF9kaXYubik7CiAKKwl0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmd204OTYyLT5mbGxfbG9jayk7CisKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjJfRkxMX0NPTlRST0xfMSwKIAkJCSAgICBXTTg5NjJfRkxMX0ZSQUMgfCBXTTg5NjJfRkxMX1JFRkNMS19TUkNfTUFTSyB8CiAJCQkgICAgV004OTYyX0ZMTF9FTkEsIGZsbDEpOwpAQCAtMzg2OCw2ICszODY4LDEwIEBACiAJICovCiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYyX0NMT0NLSU5HMiwgV004OTYyX1NZU0NMS19FTkEsIDApOwogCisJLyogRW5zdXJlIHdlIGhhdmUgc29mdCBjb250cm9sIG92ZXIgYWxsIHJlZ2lzdGVycyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2Ml9DTE9DS0lORzIsCisJCQkgICAgV004OTYyX0NMS1JFR19PVkQsIFdNODk2Ml9DTEtSRUdfT1ZEKTsKKwogCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5NjItPnN1cHBsaWVzKSwgd204OTYyLT5zdXBwbGllcyk7CiAKIAlpZiAocGRhdGEpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDA5ZTY4MGEuLmIzOTNmOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMjk4MSw2ICsyOTgxLDcgQEAKIAkJCXdtODk5NC0+aHVicy5kY3NfcmVhZGJhY2tfbW9kZSA9IDE7CiAJCQlicmVhazsKIAkJfQorCQlicmVhazsKIAogCWNhc2UgV004OTU4OgogCQl3bTg5OTQtPmh1YnMuZGNzX3JlYWRiYWNrX21vZGUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTYuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkYjlkMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmMKQEAgLTAsMCArMSwzMDAyIEBACisvKgorICogd204OTk2LmMgLSBXTTg5OTYgYXVkaW8gY29kZWMgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IDIwMTEgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2Fzb2MuaD4KKworI2luY2x1ZGUgPHNvdW5kL3dtODk5Ni5oPgorI2luY2x1ZGUgIndtODk5Ni5oIgorCisjZGVmaW5lIFdNODk5Nl9BSUZTIDIKKworI2RlZmluZSBIUE9VVDFMIDEKKyNkZWZpbmUgSFBPVVQxUiAyCisjZGVmaW5lIEhQT1VUMkwgNAorI2RlZmluZSBIUE9VVDJSIDgKKworI2RlZmluZSBXTTg5OTZfTlVNX1NVUFBMSUVTIDQKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5OTZfc3VwcGx5X25hbWVzW1dNODk5Nl9OVU1fU1VQUExJRVNdID0geworCSJEQlZERCIsCisJIkFWREQxIiwKKwkiQVZERDIiLAorCSJDUFZERCIsCit9OworCitzdHJ1Y3Qgd204OTk2X3ByaXYgeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCWludCBsZG8xZW5hOworCisJaW50IHN5c2NsazsKKwlpbnQgc3lzY2xrX3NyYzsKKworCWludCBmbGxfc3JjOworCWludCBmbGxfZnJlZjsKKwlpbnQgZmxsX2ZvdXQ7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiBmbGxfbG9jazsKKworCXUxNiBkY3NfcGVuZGluZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkY3NfZG9uZTsKKworCXUxNiBocG91dF9lbmE7CisJdTE2IGhwb3V0X3BlbmRpbmc7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg5OTZfTlVNX1NVUFBMSUVTXTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGlzYWJsZV9uYltXTTg5OTZfTlVNX1NVUFBMSUVTXTsKKworCXN0cnVjdCB3bTg5OTZfcGRhdGEgcGRhdGE7CisKKwlpbnQgcnhfcmF0ZVtXTTg5OTZfQUlGU107CisJaW50IGJjbGtfcmF0ZVtXTTg5OTZfQUlGU107CisKKwkvKiBQbGF0Zm9ybSBkZXBlbmRhbnQgUmVUdW5lIG1vYmlsZSBjb25maWd1cmF0aW9uICovCisJaW50IG51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCWNvbnN0IGNoYXIgKipyZXR1bmVfbW9iaWxlX3RleHRzOworCWludCByZXR1bmVfbW9iaWxlX2NmZ1syXTsKKwlzdHJ1Y3Qgc29jX2VudW0gcmV0dW5lX21vYmlsZV9lbnVtOworCisJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKKwlib29sIGRldGVjdGluZzsKKwlib29sIGphY2tfbWljOworCXdtODk5Nl9wb2xhcml0eV9mbiBwb2xhcml0eV9jYjsKKworI2lmZGVmIENPTkZJR19HUElPTElCCisJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CisjZW5kaWYKK307CisKKy8qIFdlIGNhbid0IHVzZSB0aGUgc2FtZSBub3RpZmllciBibG9jayBmb3IgbW9yZSB0aGFuIG9uZSBzdXBwbHkgYW5kCisgKiB0aGVyZSdzIG5vIHdheSBJIGNhbiBzZWUgdG8gZ2V0IGZyb20gYSBjYWxsYmFjayB0byB0aGUgY2FsbGVyCisgKiBleGNlcHQgY29udGFpbmVyX29mKCkuCisgKi8KKyNkZWZpbmUgV004OTk2X1JFR1VMQVRPUl9FVkVOVChuKSBcCitzdGF0aWMgaW50IHdtODk5Nl9yZWd1bGF0b3JfZXZlbnRfIyNuKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIFwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkJXAoreyBcCisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCB3bTg5OTZfcHJpdiwgXAorCQkJCQkJICBkaXNhYmxlX25iW25dKTsgXAorCWlmIChldmVudCAmIFJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFKSB7IFwKKwkJd204OTk2LT5jb2RlYy0+Y2FjaGVfc3luYyA9IDE7IFwKKwl9IFwKKwlyZXR1cm4gMDsgXAorfQorCitXTTg5OTZfUkVHVUxBVE9SX0VWRU5UKDApCitXTTg5OTZfUkVHVUxBVE9SX0VWRU5UKDEpCitXTTg5OTZfUkVHVUxBVE9SX0VWRU5UKDIpCitXTTg5OTZfUkVHVUxBVE9SX0VWRU5UKDMpCisKK3N0YXRpYyBjb25zdCB1MTYgd204OTk2X3JlZ1tXTTg5OTZfTUFYX1JFR0lTVEVSXSA9IHsKKwlbV004OTk2X1NPRlRXQVJFX1JFU0VUXSA9IDB4ODk5NiwKKwlbV004OTk2X1BPV0VSX01BTkFHRU1FTlRfN10gPSAweDEwLAorCVtXTTg5OTZfREFDMV9IUE9VVDFfVk9MVU1FXSA9IDB4ODgsCisJW1dNODk5Nl9EQUMyX0hQT1VUMl9WT0xVTUVdID0gMHg4OCwKKwlbV004OTk2X0RBQzFfTEVGVF9WT0xVTUVdID0gMHgyYzAsCisJW1dNODk5Nl9EQUMxX1JJR0hUX1ZPTFVNRV0gPSAweDJjMCwKKwlbV004OTk2X0RBQzJfTEVGVF9WT0xVTUVdID0gMHgyYzAsCisJW1dNODk5Nl9EQUMyX1JJR0hUX1ZPTFVNRV0gPSAweDJjMCwKKwlbV004OTk2X09VVFBVVDFfTEVGVF9WT0xVTUVdID0gMHg4MCwKKwlbV004OTk2X09VVFBVVDFfUklHSFRfVk9MVU1FXSA9IDB4ODAsCisJW1dNODk5Nl9PVVRQVVQyX0xFRlRfVk9MVU1FXSA9IDB4ODAsCisJW1dNODk5Nl9PVVRQVVQyX1JJR0hUX1ZPTFVNRV0gPSAweDgwLAorCVtXTTg5OTZfTUlDQklBU18xXSA9IDB4MzksCisJW1dNODk5Nl9NSUNCSUFTXzJdID0gMHgzOSwKKwlbV004OTk2X0xET18xXSA9IDB4MywKKwlbV004OTk2X0xET18yXSA9IDB4MTMsCisJW1dNODk5Nl9BQ0NFU1NPUllfREVURUNUX01PREVfMV0gPSAweDQsCisJW1dNODk5Nl9IRUFEUEhPTkVfREVURUNUXzFdID0gMHgyMCwKKwlbV004OTk2X01JQ19ERVRFQ1RfMV0gPSAweDc2MDAsCisJW1dNODk5Nl9NSUNfREVURUNUXzJdID0gMHhiZiwKKwlbV004OTk2X0NIQVJHRV9QVU1QXzFdID0gMHgxZjI1LAorCVtXTTg5OTZfQ0hBUkdFX1BVTVBfMl0gPSAweGFiMTksCisJW1dNODk5Nl9EQ19TRVJWT181XSA9IDB4MmEyYSwKKwlbV004OTk2X0NPTlRST0xfSU5URVJGQUNFXzFdID0gMHg4MDA0LAorCVtXTTg5OTZfQ0xPQ0tJTkdfMV0gPSAweDEwLAorCVtXTTg5OTZfQUlGX1JBVEVdID0gMHg4MywKKwlbV004OTk2X0ZMTF9DT05UUk9MXzRdID0gMHg1ZGMwLAorCVtXTTg5OTZfRkxMX0NPTlRST0xfNV0gPSAweGM4NCwKKwlbV004OTk2X0ZMTF9FRlNfMl0gPSAweDIsCisJW1dNODk5Nl9BSUYxX1RYX0xSQ0xLXzFdID0gMHg4MCwKKwlbV004OTk2X0FJRjFfVFhfTFJDTEtfMl0gPSAweDgsCisJW1dNODk5Nl9BSUYxX1JYX0xSQ0xLXzFdID0gMHg4MCwKKwlbV004OTk2X0FJRjFUWF9EQVRBX0NPTkZJR1VSQVRJT05fMV0gPSAweDE4MTgsCisJW1dNODk5Nl9BSUYxUlhfREFUQV9DT05GSUdVUkFUSU9OXSA9IDB4MTgxOCwKKwlbV004OTk2X0FJRjFUWF9URVNUXSA9IDB4NywKKwlbV004OTk2X0FJRjJfVFhfTFJDTEtfMV0gPSAweDgwLAorCVtXTTg5OTZfQUlGMl9UWF9MUkNMS18yXSA9IDB4OCwKKwlbV004OTk2X0FJRjJfUlhfTFJDTEtfMV0gPSAweDgwLAorCVtXTTg5OTZfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8xXSA9IDB4MTgxOCwKKwlbV004OTk2X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT05dID0gMHgxODE4LAorCVtXTTg5OTZfQUlGMlRYX1RFU1RdID0gMHgxLAorCVtXTTg5OTZfRFNQMV9UWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5OTZfRFNQMV9UWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTk2X0RTUDFfUlhfTEVGVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTk2X0RTUDFfUlhfUklHSFRfVk9MVU1FXSA9IDB4YzAsCisJW1dNODk5Nl9EU1AxX1RYX0ZJTFRFUlNdID0gMHgyMDAwLAorCVtXTTg5OTZfRFNQMV9SWF9GSUxURVJTXzFdID0gMHgyMDAsCisJW1dNODk5Nl9EU1AxX1JYX0ZJTFRFUlNfMl0gPSAweDEwLAorCVtXTTg5OTZfRFNQMV9EUkNfMV0gPSAweDk4LAorCVtXTTg5OTZfRFNQMV9EUkNfMl0gPSAweDg0NSwKKwlbV004OTk2X0RTUDFfUlhfRVFfR0FJTlNfMV0gPSAweDYzMTgsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzJdID0gMHg2MzAwLAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzFfQV0gPSAweGZjYSwKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF8xX0JdID0gMHg0MDAsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMV9QR10gPSAweGQ4LAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzJfQV0gPSAweDFlYjUsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMl9CXSA9IDB4ZjE0NSwKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF8yX0NdID0gMHhiNzUsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMl9QR10gPSAweDFjNSwKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF8zX0FdID0gMHgxYzU4LAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzNfQl0gPSAweGYzNzMsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfM19DXSA9IDB4YTU0LAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzNfUEddID0gMHg1NTgsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNF9BXSA9IDB4MTY4ZSwKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF80X0JdID0gMHhmODI5LAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzRfQ10gPSAweDdhZCwKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF80X1BHXSA9IDB4MTEwMywKKwlbV004OTk2X0RTUDFfUlhfRVFfQkFORF81X0FdID0gMHg1NjQsCisJW1dNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNV9CXSA9IDB4NTU5LAorCVtXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzVfUEddID0gMHg0MDAwLAorCVtXTTg5OTZfRFNQMl9UWF9MRUZUX1ZPTFVNRV0gPSAweGMwLAorCVtXTTg5OTZfRFNQMl9UWF9SSUdIVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTk2X0RTUDJfUlhfTEVGVF9WT0xVTUVdID0gMHhjMCwKKwlbV004OTk2X0RTUDJfUlhfUklHSFRfVk9MVU1FXSA9IDB4YzAsCisJW1dNODk5Nl9EU1AyX1RYX0ZJTFRFUlNdID0gMHgyMDAwLAorCVtXTTg5OTZfRFNQMl9SWF9GSUxURVJTXzFdID0gMHgyMDAsCisJW1dNODk5Nl9EU1AyX1JYX0ZJTFRFUlNfMl0gPSAweDEwLAorCVtXTTg5OTZfRFNQMl9EUkNfMV0gPSAweDk4LAorCVtXTTg5OTZfRFNQMl9EUkNfMl0gPSAweDg0NSwKKwlbV004OTk2X0RTUDJfUlhfRVFfR0FJTlNfMV0gPSAweDYzMTgsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0dBSU5TXzJdID0gMHg2MzAwLAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzFfQV0gPSAweGZjYSwKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF8xX0JdID0gMHg0MDAsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMV9QR10gPSAweGQ4LAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzJfQV0gPSAweDFlYjUsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMl9CXSA9IDB4ZjE0NSwKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF8yX0NdID0gMHhiNzUsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMl9QR10gPSAweDFjNSwKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF8zX0FdID0gMHgxYzU4LAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzNfQl0gPSAweGYzNzMsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfM19DXSA9IDB4YTU0LAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzNfUEddID0gMHg1NTgsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNF9BXSA9IDB4MTY4ZSwKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF80X0JdID0gMHhmODI5LAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzRfQ10gPSAweDdhZCwKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF80X1BHXSA9IDB4MTEwMywKKwlbV004OTk2X0RTUDJfUlhfRVFfQkFORF81X0FdID0gMHg1NjQsCisJW1dNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNV9CXSA9IDB4NTU5LAorCVtXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzVfUEddID0gMHg0MDAwLAorCVtXTTg5OTZfT1ZFUlNBTVBMSU5HXSA9IDB4ZCwKKwlbV004OTk2X1NJREVUT05FXSA9IDB4MTA0MCwKKwlbV004OTk2X0dQSU9fMV0gPSAweGExMDEsCisJW1dNODk5Nl9HUElPXzJdID0gMHhhMTAxLAorCVtXTTg5OTZfR1BJT18zXSA9IDB4YTEwMSwKKwlbV004OTk2X0dQSU9fNF0gPSAweGExMDEsCisJW1dNODk5Nl9HUElPXzVdID0gMHhhMTAxLAorCVtXTTg5OTZfUFVMTF9DT05UUk9MXzJdID0gMHgxNDAsCisJW1dNODk5Nl9JTlRFUlJVUFRfU1RBVFVTXzFfTUFTS10gPSAweDFmLAorCVtXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18yX01BU0tdID0gMHgxZWNmLAorCVtXTTg5OTZfUklHSFRfUERNX1NQRUFLRVJdID0gMHgxLAorCVtXTTg5OTZfUERNX1NQRUFLRVJfTVVURV9TRVFVRU5DRV0gPSAweDY5LAorCVtXTTg5OTZfUERNX1NQRUFLRVJfVk9MVU1FXSA9IDB4NjYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMF0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMV0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfM10gPSAweDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNF0gPSAweDQwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzVdID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzZdID0gMHhmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzddID0gMHg2LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzhdID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzldID0gMHgzLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwXSA9IDB4MTA0LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEyXSA9IDB4NjAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTNdID0gMHgxMSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNF0gPSAweDQwMSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNl0gPSAweDUwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE3XSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOF0gPSAweDEwMCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMF0gPSAweDUxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxXSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMl0gPSAweDEwNCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yM10gPSAweGEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjRdID0gMHg2MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNV0gPSAweDNiLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2XSA9IDB4NTAyLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI3XSA9IDB4MTAwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzZdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNDhdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUyXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl81Nl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNjBdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzY0XSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl82NV0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNjddID0gMHg2LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzY4XSA9IDB4NDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNjldID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzcwXSA9IDB4ZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl83MV0gPSAweDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNzJdID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzczXSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl83NF0gPSAweDEwNCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl83Nl0gPSAweDYwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzc3XSA9IDB4MTEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNzhdID0gMHg0MDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfODBdID0gMHg1MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl84MV0gPSAweDMsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfODJdID0gMHgxMDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfODRdID0gMHg2MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl84NV0gPSAweDNiLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzg2XSA9IDB4NTAyLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzg3XSA9IDB4MTAwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzg4XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl85Ml0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfOTZdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwMF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTA0XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMDhdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzExMl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTE2XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjBdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEyNF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTI4XSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjldID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzMV0gPSAweDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTMyXSA9IDB4NDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTMzXSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMzRdID0gMHhmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzNV0gPSAweDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTM2XSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMzddID0gMHgzLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzOF0gPSAweDEwNiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDBdID0gMHg2MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDFdID0gMHgxMSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDJdID0gMHg0MDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ0XSA9IDB4NTAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ1XSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDZdID0gMHgxMDIsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ4XSA9IDB4NTEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ5XSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTBdID0gMHgxMDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTUxXSA9IDB4YSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTJdID0gMHg2MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTNdID0gMHgzYiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTRdID0gMHg1MDIsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTU1XSA9IDB4MTAwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE1Nl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTYwXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNjRdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2OF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTcyXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNzZdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE4MF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTg0XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xODhdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5Ml0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTkzXSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOTVdID0gMHg2LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5Nl0gPSAweDQwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5N10gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMTk4XSA9IDB4ZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOTldID0gMHg2LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwMF0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjAxXSA9IDB4MywKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMDJdID0gMHgxMDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjA0XSA9IDB4NjEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjA1XSA9IDB4MTEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjA2XSA9IDB4NDAxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwOF0gPSAweDUwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwOV0gPSAweDMsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjEwXSA9IDB4MTAyLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxMl0gPSAweDYxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxM10gPSAweDNiLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxNF0gPSAweDUwMiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMTVdID0gMHgxMDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjE2XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMjBdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyNF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjI4XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMzJdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIzNl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjQwXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNDRdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI0OF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjUyXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNTZdID0gMHg2MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNThdID0gMHg2MDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjYwXSA9IDB4NTAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjYyXSA9IDB4MTAwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2NF0gPSAweDEsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjY2XSA9IDB4MTA0LAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2N10gPSAweDEwMCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNjhdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI3Ml0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjc2XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yODBdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4NF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMjg4XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yOTJdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI5Nl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzAwXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMDRdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMwOF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzEyXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMTZdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMyMF0gPSAweDYxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMyMl0gPSAweDYwMSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMjRdID0gMHg1MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMjZdID0gMHgxMDIsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzI4XSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMzBdID0gMHgxMDYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzMxXSA9IDB4MTAwLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMzMl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzM2XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNDBdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0NF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzQ4XSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNTJdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM1Nl0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzYwXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNjRdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM2OF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzcyXSA9IDB4MmZmZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNzZdID0gMHgyZmZmLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM4MF0gPSAweDJmZmYsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzg0XSA9IDB4NjAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzg2XSA9IDB4NjAxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM4OF0gPSAweDYxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM5MF0gPSAweDYwMSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTJdID0gMHg1MCwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTRdID0gMHgzMDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfMzk2XSA9IDB4MSwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOThdID0gMHgzMDQsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNDAwXSA9IDB4NDAsCisJW1dNODk5Nl9XUklURV9TRVFVRU5DRVJfNDAyXSA9IDB4ZiwKKwlbV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MDRdID0gMHgxLAorCVtXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwN10gPSAweDEwMCwKK307CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnBnYV90bHYsIDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc2lkZXRvbmVfdGx2LCAtMzYwMCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfZGlnaXRhbF90bHYsIC0xMjAwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC05MDAsIDc1LCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzcGtfdGx2LCAtOTAwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVxX3RsdiwgLTEyMDAsIDEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWRldG9uZV9ocGZfdGV4dFtdID0geworCSIyLjlrSHoiLCAiMS41a0h6IiwgIjczNUh6IiwgIjQwM0h6IiwgIjE5Nkh6IiwgIjk4SHoiLCAiNDlIeiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmVfaHBmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X1NJREVUT05FLCA3LCA3LCBzaWRldG9uZV9ocGZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpocGZfbW9kZV90ZXh0W10gPSB7CisJIkhpRmkiLCAiQ3VzdG9tIiwgIlZvaWNlIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkc3AxdHhfaHBmX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTZfRFNQMV9UWF9GSUxURVJTLCAzLCAzLCBocGZfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkc3AydHhfaHBmX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTZfRFNQMl9UWF9GSUxURVJTLCAzLCAzLCBocGZfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhwZl9jdXRvZmZfdGV4dFtdID0geworCSI1MEh6IiwgIjc1SHoiLCAiMTAwSHoiLCAiMTUwSHoiLCAiMjAwSHoiLCAiMzAwSHoiLCAiNDAwSHoiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDF0eF9ocGZfY3V0b2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X0RTUDFfVFhfRklMVEVSUywgMCwgNywgaHBmX2N1dG9mZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkc3AydHhfaHBmX2N1dG9mZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5Nl9EU1AyX1RYX0ZJTFRFUlMsIDAsIDcsIGhwZl9jdXRvZmZfdGV4dCk7CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9zZXRfcmV0dW5lX21vYmlsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBibG9jaykKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTZfcGRhdGEgKnBkYXRhID0gJndtODk5Ni0+cGRhdGE7CisJaW50IGJhc2UsIGJlc3QsIGJlc3RfdmFsLCBzYXZlLCBpLCBjZmcsIGlmYWNlOworCisJaWYgKCF3bTg5OTYtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJsb2NrKSB7CisJY2FzZSAwOgorCQliYXNlID0gV004OTk2X0RTUDFfUlhfRVFfR0FJTlNfMTsKKwkJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfOCkgJgorCQkgICAgV004OTk2X0RTUDFSWF9TUkMpCisJCQlpZmFjZSA9IDE7CisJCWVsc2UKKwkJCWlmYWNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQliYXNlID0gV004OTk2X0RTUDFfUlhfRVFfR0FJTlNfMjsKKwkJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfOCkgJgorCQkgICAgV004OTk2X0RTUDJSWF9TUkMpCisJCQlpZmFjZSA9IDE7CisJCWVsc2UKKwkJCWlmYWNlID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCS8qIEZpbmQgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb25maWd1cmF0aW9uCisJICogd2l0aCB0aGUgbmVhcmVzdCBzYW1wbGUgcmF0ZS4gKi8KKwljZmcgPSB3bTg5OTYtPnJldHVuZV9tb2JpbGVfY2ZnW2Jsb2NrXTsKKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkgICB3bTg5OTYtPnJldHVuZV9tb2JpbGVfdGV4dHNbY2ZnXSkgPT0gMCAmJgorCQkgICAgYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJLSB3bTg5OTYtPnJ4X3JhdGVbaWZhY2VdKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJCSAgICAgICAtIHdtODk5Ni0+cnhfcmF0ZVtpZmFjZV0pOworCQl9CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUmVUdW5lIE1vYmlsZSAlZCAlcy8lZEh6IGZvciAlZEh6IHNhbXBsZSByYXRlXG4iLAorCQlibG9jaywKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5uYW1lLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJhdGUsCisJCXdtODk5Ni0+cnhfcmF0ZVtpZmFjZV0pOworCisJLyogVGhlIEVRIHdpbGwgYmUgZGlzYWJsZWQgd2hpbGUgcmVjb25maWd1cmluZyBpdCwgcmVtZW1iZXIgdGhlCisJICogY3VycmVudCBjb25maWd1cmF0aW9uLiAKKwkgKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBiYXNlKTsKKwlzYXZlICY9IFdNODk5Nl9EU1AxUlhfRVFfRU5BOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yZWdzKTsgaSsrKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlICsgaSwgMHhmZmZmLAorCQkJCSAgICBwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJlZ3NbaV0pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmFzZSwgV004OTk2X0RTUDFSWF9FUV9FTkEsIHNhdmUpOworfQorCisvKiBJY2t5IGFzIGhlbGwgYnV0IHNhdmVzIGNvZGUgZHVwbGljYXRpb24gKi8KK3N0YXRpYyBpbnQgd204OTk2X2dldF9yZXR1bmVfbW9iaWxlX2Jsb2NrKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiRFNQMSBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcChuYW1lLCAiRFNQMiBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3Qgd204OTk2X3BkYXRhICpwZGF0YSA9ICZ3bTg5OTYtPnBkYXRhOworCWludCBibG9jayA9IHdtODk5Nl9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhrY29udHJvbC0+aWQubmFtZSk7CisJaW50IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoYmxvY2sgPCAwKQorCQlyZXR1cm4gYmxvY2s7CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTk2LT5yZXR1bmVfbW9iaWxlX2NmZ1tibG9ja10gPSB2YWx1ZTsKKworCXdtODk5Nl9zZXRfcmV0dW5lX21vYmlsZShjb2RlYywgYmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X2dldF9yZXR1bmVfbW9iaWxlX2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgYmxvY2sgPSB3bTg5OTZfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soa2NvbnRyb2wtPmlkLm5hbWUpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5Ni0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTZfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJDYXB0dXJlIFZvbHVtZSIsIFdNODk5Nl9MRUZUX0xJTkVfSU5QVVRfVk9MVU1FLAorCQkgV004OTk2X1JJR0hUX0xJTkVfSU5QVVRfVk9MVU1FLCAwLCAzMSwgMCwgaW5wZ2FfdGx2KSwKK1NPQ19ET1VCTEVfUigiQ2FwdHVyZSBaQyBTd2l0Y2giLCBXTTg5OTZfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRSwKKwkgICAgIFdNODk5Nl9SSUdIVF9MSU5FX0lOUFVUX1ZPTFVNRSwgNSwgMSwgMCksCisKK1NPQ19ET1VCTEVfVExWKCJEQUMxIFNpZGV0b25lIFZvbHVtZSIsIFdNODk5Nl9EQUMxX01JWEVSX1ZPTFVNRVMsCisJICAgICAgIDAsIDUsIDI0LCAwLCBzaWRldG9uZV90bHYpLAorU09DX0RPVUJMRV9UTFYoIkRBQzIgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk2X0RBQzJfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgMCwgNSwgMjQsIDAsIHNpZGV0b25lX3RsdiksCitTT0NfU0lOR0xFKCJTaWRldG9uZSBMUEYgU3dpdGNoIiwgV004OTk2X1NJREVUT05FLCAxMiwgMSwgMCksCitTT0NfRU5VTSgiU2lkZXRvbmUgSFBGIEN1dC1vZmYiLCBzaWRldG9uZV9ocGYpLAorU09DX1NJTkdMRSgiU2lkZXRvbmUgSFBGIFN3aXRjaCIsIFdNODk5Nl9TSURFVE9ORSwgNiwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRTUDEgQ2FwdHVyZSBWb2x1bWUiLCBXTTg5OTZfRFNQMV9UWF9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5Nl9EU1AxX1RYX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkRTUDIgQ2FwdHVyZSBWb2x1bWUiLCBXTTg5OTZfRFNQMl9UWF9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5Nl9EU1AyX1RYX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX1NJTkdMRSgiRFNQMSBDYXB0dXJlIE5vdGNoIEZpbHRlciBTd2l0Y2giLCBXTTg5OTZfRFNQMV9UWF9GSUxURVJTLAorCSAgIDEzLCAxLCAwKSwKK1NPQ19ET1VCTEUoIkRTUDEgQ2FwdHVyZSBIUEYgU3dpdGNoIiwgV004OTk2X0RTUDFfVFhfRklMVEVSUywgMTIsIDExLCAxLCAwKSwKK1NPQ19FTlVNKCJEU1AxIENhcHR1cmUgSFBGIE1vZGUiLCBkc3AxdHhfaHBmX21vZGUpLAorU09DX0VOVU0oIkRTUDEgQ2FwdHVyZSBIUEYgQ3V0b2ZmIiwgZHNwMXR4X2hwZl9jdXRvZmYpLAorCitTT0NfU0lOR0xFKCJEU1AyIENhcHR1cmUgTm90Y2ggRmlsdGVyIFN3aXRjaCIsIFdNODk5Nl9EU1AyX1RYX0ZJTFRFUlMsCisJICAgMTMsIDEsIDApLAorU09DX0RPVUJMRSgiRFNQMiBDYXB0dXJlIEhQRiBTd2l0Y2giLCBXTTg5OTZfRFNQMl9UWF9GSUxURVJTLCAxMiwgMTEsIDEsIDApLAorU09DX0VOVU0oIkRTUDIgQ2FwdHVyZSBIUEYgTW9kZSIsIGRzcDJ0eF9ocGZfbW9kZSksCitTT0NfRU5VTSgiRFNQMiBDYXB0dXJlIEhQRiBDdXRvZmYiLCBkc3AydHhfaHBmX2N1dG9mZiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRTUDEgUGxheWJhY2sgVm9sdW1lIiwgV004OTk2X0RTUDFfUlhfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTZfRFNQMV9SWF9SSUdIVF9WT0xVTUUsIDEsIDExMiwgMCwgZGlnaXRhbF90bHYpLAorU09DX1NJTkdMRSgiRFNQMSBQbGF5YmFjayBTd2l0Y2giLCBXTTg5OTZfRFNQMV9SWF9GSUxURVJTXzEsIDksIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJEU1AyIFBsYXliYWNrIFZvbHVtZSIsIFdNODk5Nl9EU1AyX1JYX0xFRlRfVk9MVU1FLAorCQkgV004OTk2X0RTUDJfUlhfUklHSFRfVk9MVU1FLCAxLCAxMTIsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19TSU5HTEUoIkRTUDIgUGxheWJhY2sgU3dpdGNoIiwgV004OTk2X0RTUDJfUlhfRklMVEVSU18xLCA5LCAxLCAxKSwKKworU09DX0RPVUJMRV9SX1RMVigiREFDMSBWb2x1bWUiLCBXTTg5OTZfREFDMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5Nl9EQUMxX1JJR0hUX1ZPTFVNRSwgMSwgMTEyLCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1IoIkRBQzEgU3dpdGNoIiwgV004OTk2X0RBQzFfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTZfREFDMV9SSUdIVF9WT0xVTUUsIDksIDEsIDEpLAorCitTT0NfRE9VQkxFX1JfVExWKCJEQUMyIFZvbHVtZSIsIFdNODk5Nl9EQUMyX0xFRlRfVk9MVU1FLAorCQkgV004OTk2X0RBQzJfUklHSFRfVk9MVU1FLCAxLCAxMTIsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUigiREFDMiBTd2l0Y2giLCBXTTg5OTZfREFDMl9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODk5Nl9EQUMyX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCisKK1NPQ19TSU5HTEUoIlNwZWFrZXIgSGlnaCBQZXJmb3JtYW5jZSBTd2l0Y2giLCBXTTg5OTZfT1ZFUlNBTVBMSU5HLCAzLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkRNSUMgSGlnaCBQZXJmb3JtYW5jZSBTd2l0Y2giLCBXTTg5OTZfT1ZFUlNBTVBMSU5HLCAyLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkFEQyBIaWdoIFBlcmZvcm1hbmNlIFN3aXRjaCIsIFdNODk5Nl9PVkVSU0FNUExJTkcsIDEsIDEsIDApLAorU09DX1NJTkdMRSgiREFDIEhpZ2ggUGVyZm9ybWFuY2UgU3dpdGNoIiwgV004OTk2X09WRVJTQU1QTElORywgMCwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkRBQyBTb2Z0IE11dGUgU3dpdGNoIiwgV004OTk2X0RBQ19TT0ZUTVVURSwgMSwgMSwgMCksCitTT0NfU0lOR0xFKCJEQUMgU2xvdyBTb2Z0IE11dGUgU3dpdGNoIiwgV004OTk2X0RBQ19TT0ZUTVVURSwgMCwgMSwgMCksCisKK1NPQ19ET1VCTEVfVExWKCJEaWdpdGFsIE91dHB1dCAxIFZvbHVtZSIsIFdNODk5Nl9EQUMxX0hQT1VUMV9WT0xVTUUsIDAsIDQsCisJICAgICAgIDgsIDAsIG91dF9kaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1RMVigiRGlnaXRhbCBPdXRwdXQgMiBWb2x1bWUiLCBXTTg5OTZfREFDMl9IUE9VVDJfVk9MVU1FLCAwLCA0LAorCSAgICAgICA4LCAwLCBvdXRfZGlnaXRhbF90bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJPdXRwdXQgMSBWb2x1bWUiLCBXTTg5OTZfT1VUUFVUMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5Nl9PVVRQVVQxX1JJR0hUX1ZPTFVNRSwgMCwgMTIsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJPdXRwdXQgMSBaQyBTd2l0Y2giLCAgV004OTk2X09VVFBVVDFfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTZfT1VUUFVUMV9SSUdIVF9WT0xVTUUsIDcsIDEsIDApLAorCitTT0NfRE9VQkxFX1JfVExWKCJPdXRwdXQgMiBWb2x1bWUiLCBXTTg5OTZfT1VUUFVUMl9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5Nl9PVVRQVVQyX1JJR0hUX1ZPTFVNRSwgMCwgMTIsIDAsIG91dF90bHYpLAorU09DX0RPVUJMRV9SKCJPdXRwdXQgMiBaQyBTd2l0Y2giLCAgV004OTk2X09VVFBVVDJfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTZfT1VUUFVUMl9SSUdIVF9WT0xVTUUsIDcsIDEsIDApLAorCitTT0NfRE9VQkxFX1RMVigiU3BlYWtlciBWb2x1bWUiLCBXTTg5OTZfUERNX1NQRUFLRVJfVk9MVU1FLCAwLCA0LCA4LCAwLAorCSAgICAgICBzcGtfdGx2KSwKK1NPQ19ET1VCTEVfUigiU3BlYWtlciBTd2l0Y2giLCBXTTg5OTZfTEVGVF9QRE1fU1BFQUtFUiwKKwkgICAgIFdNODk5Nl9SSUdIVF9QRE1fU1BFQUtFUiwgMywgMSwgMSksCitTT0NfRE9VQkxFX1IoIlNwZWFrZXIgWkMgU3dpdGNoIiwgV004OTk2X0xFRlRfUERNX1NQRUFLRVIsCisJICAgICBXTTg5OTZfUklHSFRfUERNX1NQRUFLRVIsIDIsIDEsIDApLAorCitTT0NfU0lOR0xFKCJEU1AxIEVRIFN3aXRjaCIsIFdNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiRFNQMiBFUSBTd2l0Y2giLCBXTTg5OTZfRFNQMl9SWF9FUV9HQUlOU18xLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTZfZXFfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEIxIFZvbHVtZSIsIFdNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzEsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AxIEVRIEIyIFZvbHVtZSIsIFdNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzEsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRTUDEgRVEgQjMgVm9sdW1lIiwgV004OTk2X0RTUDFfUlhfRVFfR0FJTlNfMSwgMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRFNQMSBFUSBCNCBWb2x1bWUiLCBXTTg5OTZfRFNQMV9SWF9FUV9HQUlOU18yLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRFNQMSBFUSBCNSBWb2x1bWUiLCBXTTg5OTZfRFNQMV9SWF9FUV9HQUlOU18yLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjEgVm9sdW1lIiwgV004OTk2X0RTUDJfUlhfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkRTUDIgRVEgQjIgVm9sdW1lIiwgV004OTk2X0RTUDJfUlhfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRFNQMiBFUSBCMyBWb2x1bWUiLCBXTTg5OTZfRFNQMl9SWF9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AyIEVRIEI0IFZvbHVtZSIsIFdNODk5Nl9EU1AyX1JYX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEU1AyIEVRIEI1IFZvbHVtZSIsIFdNODk5Nl9EU1AyX1JYX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorfTsKKworc3RhdGljIGludCBjcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQltc2xlZXAoNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybXZfc2hvcnRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisKKwkvKiBSZWNvcmQgd2hpY2ggb3V0cHV0cyB3ZSBlbmFibGVkICovCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXdtODk5Ni0+aHBvdXRfcGVuZGluZyAmPSB+dy0+c2hpZnQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXdtODk5Ni0+aHBvdXRfcGVuZGluZyB8PSB3LT5zaGlmdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9kY19zZXJ2byhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUxNiBtYXNrKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGNvZGVjLT5kZXYpOworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAyMDA7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTZfRENfU0VSVk9fMiwgbWFzayk7CisKKwkvKiBVc2UgdGhlIGludGVycnVwdCBpZiBwb3NzaWJsZSAqLworCWRvIHsKKwkJaWYgKGkyYy0+aXJxKSB7CisJCQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3bTg5OTYtPmRjc19kb25lLAorCQkJCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSk7CisJCQlpZiAodGltZW91dCA9PSAwKQorCQkJCWRldl9lcnIoY29kZWMtPmRldiwgIkRDIHNlcnZvIHRpbWVkIG91dFxuIik7CisKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWlmICgtLWkpIHsKKwkJCQl0aW1lb3V0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0RDX1NFUlZPXzIpOworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2byBzdGF0ZTogJXhcbiIsIHJldCk7CisJfSB3aGlsZSAocmV0ICYgbWFzayk7CisKKwlpZiAodGltZW91dCA9PSAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJEQyBzZXJ2byB0aW1lZCBvdXQgZm9yICV4XG4iLCBtYXNrKTsKKwllbHNlCisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIGNvbXBsZXRlIGZvciAleFxuIiwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9zZXFfbm90aWZpZXIoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAorCQkJCWVudW0gc25kX3NvY19kYXBtX3R5cGUgZXZlbnQsIGludCBzdWJzZXEpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29udGFpbmVyX29mKGRhcG0sCisJCQkJCQkgICBzdHJ1Y3Qgc25kX3NvY19jb2RlYywgZGFwbSk7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1MTYgdmFsLCBtYXNrOworCisJLyogQ29tcGxldGUgYW55IHBlbmRpbmcgREMgc2Vydm8gc3RhcnRzICovCisJaWYgKHdtODk5Ni0+ZGNzX3BlbmRpbmcpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU3RhcnRpbmcgREMgc2Vydm8gZm9yICV4XG4iLAorCQkJd204OTk2LT5kY3NfcGVuZGluZyk7CisKKwkJLyogVHJpZ2dlciBhIHN0YXJ0dXAgc2VxdWVuY2UgKi8KKwkJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMsIHdtODk5Ni0+ZGNzX3BlbmRpbmcKKwkJCQkgICAgICAgICA8PCBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8wX1NISUZUKTsKKworCQl3bTg5OTYtPmRjc19wZW5kaW5nID0gMDsKKwl9CisKKwlpZiAod204OTk2LT5ocG91dF9wZW5kaW5nICE9IHdtODk5Ni0+aHBvdXRfZW5hKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkFwcGx5aW5nIFJNVl9TSE9SVHMgJXgtPiV4XG4iLAorCQkJd204OTk2LT5ocG91dF9lbmEsIHdtODk5Ni0+aHBvdXRfcGVuZGluZyk7CisKKwkJdmFsID0gMDsKKwkJbWFzayA9IDA7CisJCWlmICh3bTg5OTYtPmhwb3V0X3BlbmRpbmcgJiBIUE9VVDFMKSB7CisJCQl2YWwgfD0gV004OTk2X0hQT1VUMUxfUk1WX1NIT1JUOworCQkJbWFzayB8PSBXTTg5OTZfSFBPVVQxTF9STVZfU0hPUlQ7CisJCX0gZWxzZSB7CisJCQltYXNrIHw9IFdNODk5Nl9IUE9VVDFMX1JNVl9TSE9SVCB8CisJCQkJV004OTk2X0hQT1VUMUxfT1VUUCB8CisJCQkJV004OTk2X0hQT1VUMUxfRExZOworCQl9CisKKwkJaWYgKHdtODk5Ni0+aHBvdXRfcGVuZGluZyAmIEhQT1VUMVIpIHsKKwkJCXZhbCB8PSBXTTg5OTZfSFBPVVQxUl9STVZfU0hPUlQ7CisJCQltYXNrIHw9IFdNODk5Nl9IUE9VVDFSX1JNVl9TSE9SVDsKKwkJfSBlbHNlIHsKKwkJCW1hc2sgfD0gV004OTk2X0hQT1VUMVJfUk1WX1NIT1JUIHwKKwkJCQlXTTg5OTZfSFBPVVQxUl9PVVRQIHwKKwkJCQlXTTg5OTZfSFBPVVQxUl9ETFk7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQU5BTE9HVUVfSFBfMSwgbWFzaywgdmFsKTsKKworCQl2YWwgPSAwOworCQltYXNrID0gMDsKKwkJaWYgKHdtODk5Ni0+aHBvdXRfcGVuZGluZyAmIEhQT1VUMkwpIHsKKwkJCXZhbCB8PSBXTTg5OTZfSFBPVVQyTF9STVZfU0hPUlQ7CisJCQltYXNrIHw9IFdNODk5Nl9IUE9VVDJMX1JNVl9TSE9SVDsKKwkJfSBlbHNlIHsKKwkJCW1hc2sgfD0gV004OTk2X0hQT1VUMkxfUk1WX1NIT1JUIHwKKwkJCQlXTTg5OTZfSFBPVVQyTF9PVVRQIHwKKwkJCQlXTTg5OTZfSFBPVVQyTF9ETFk7CisJCX0KKworCQlpZiAod204OTk2LT5ocG91dF9wZW5kaW5nICYgSFBPVVQyUikgeworCQkJdmFsIHw9IFdNODk5Nl9IUE9VVDJSX1JNVl9TSE9SVDsKKwkJCW1hc2sgfD0gV004OTk2X0hQT1VUMlJfUk1WX1NIT1JUOworCQl9IGVsc2UgeworCQkJbWFzayB8PSBXTTg5OTZfSFBPVVQyUl9STVZfU0hPUlQgfAorCQkJCVdNODk5Nl9IUE9VVDJSX09VVFAgfAorCQkJCVdNODk5Nl9IUE9VVDJSX0RMWTsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BTkFMT0dVRV9IUF8yLCBtYXNrLCB2YWwpOworCisJCXdtODk5Ni0+aHBvdXRfZW5hID0gd204OTk2LT5ocG91dF9wZW5kaW5nOworCX0KK30KKworc3RhdGljIGludCBkY3Nfc3RhcnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEody0+Y29kZWMpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQl3bTg5OTYtPmRjc19wZW5kaW5nIHw9IDEgPDwgdy0+c2hpZnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNpZGV0b25lX3RleHRbXSA9IHsKKwkiSU4xIiwgIklOMiIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxlZnRfc2lkZXRvbmVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5Nl9TSURFVE9ORSwgMCwgMiwgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsZWZ0X3NpZGV0b25lID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IFNpZGV0b25lIiwgbGVmdF9zaWRldG9uZV9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaWdodF9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X1NJREVUT05FLCAxLCAyLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpZ2h0X3NpZGV0b25lID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBTaWRldG9uZSIsIHJpZ2h0X3NpZGV0b25lX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqc3BrX3RleHRbXSA9IHsKKwkiREFDMUwiLCAiREFDMVIiLCAiREFDMkwiLCAiREFDMlIiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNwa2xfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5Nl9MRUZUX1BETV9TUEVBS0VSLCAwLCA0LCBzcGtfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGtsX211eCA9CisJU09DX0RBUE1fRU5VTSgiU1BLTCIsIHNwa2xfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc3Brcl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X1JJR0hUX1BETV9TUEVBS0VSLCAwLCA0LCBzcGtfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGtyX211eCA9CisJU09DX0RBUE1fRU5VTSgiU1BLUiIsIHNwa3JfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkc3AxcnhfdGV4dFtdID0geworCSJBSUYxIiwgIkFJRjIiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRzcDFyeF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X1BPV0VSX01BTkFHRU1FTlRfOCwgMCwgMiwgZHNwMXJ4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMXJ4ID0KKwlTT0NfREFQTV9FTlVNKCJEU1AxUlgiLCBkc3AxcnhfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkc3AycnhfdGV4dFtdID0geworCSAiQUlGMiIsICJBSUYxIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkc3AycnhfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzgsIDQsIDIsIGRzcDJyeF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRzcDJyeCA9CisJU09DX0RBUE1fRU5VTSgiRFNQMlJYIiwgZHNwMnJ4X2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmMnR4X3RleHRbXSA9IHsKKwkiRFNQMiIsICJEU1AxIiwgIkFJRjEiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjJ0eF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk2X1BPV0VSX01BTkFHRU1FTlRfOCwgNiwgMywgYWlmMnR4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMnR4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUYyVFgiLCBhaWYydHhfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICppbm11eF90ZXh0W10gPSB7CisJIkFEQyIsICJETUlDMSIsICJETUlDMiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaW4xX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF83LCAwLCAzLCBpbm11eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGluMV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIklOMSBNdXgiLCBpbjFfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaW4yX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF83LCA0LCAzLCBpbm11eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGluMl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIklOMiBNdXgiLCBpbjJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMycl9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk2X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk2X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDIgU3dpdGNoIiwgV004OTk2X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDEgU3dpdGNoIiwgV004OTk2X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMmxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5Nl9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk2X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiRFNQMiBTd2l0Y2giLCBXTTg5OTZfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEU1AxIFN3aXRjaCIsIFdNODk5Nl9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMXJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5Nl9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5Nl9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEU1AyIFN3aXRjaCIsIFdNODk5Nl9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEU1AxIFN3aXRjaCIsIFdNODk5Nl9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzFsX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTZfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5Nl9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRTUDIgU3dpdGNoIiwgV004OTk2X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLCAxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiRFNQMSBTd2l0Y2giLCBXTTg5OTZfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRzcDF0eGxbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIFdNODk5Nl9EU1AxX1RYX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg5OTZfRFNQMV9UWF9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRzcDF0eHJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiSU4xIFN3aXRjaCIsIFdNODk5Nl9EU1AxX1RYX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMgU3dpdGNoIiwgV004OTk2X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMnR4bFtdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTk2X0RTUDJfVFhfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODk5Nl9EU1AyX1RYX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNwMnR4cltdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjEgU3dpdGNoIiwgV004OTk2X0RTUDJfVFhfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg5OTZfRFNQMl9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5Nl9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xTE4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xTFAiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUk4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUlAiKSwKKworU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJMTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJMUCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJSTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjJSUCIpLAorCitTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMxREFUIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkRNSUMyREFUIiksCisKK1NORF9TT0NfREFQTV9TVVBQTFlfUygiU1lTQ0xLIiwgMSwgV004OTk2X0FJRl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFlfUygiU1lTRFNQQ0xLIiwgMiwgV004OTk2X0NMT0NLSU5HXzEsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJBSUZDTEsiLCAyLCBXTTg5OTZfQ0xPQ0tJTkdfMSwgMiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fU1VQUExZX1MoIkNoYXJnZSBQdW1wIiwgMiwgV004OTk2X0NIQVJHRV9QVU1QXzEsIDE1LCAwLCBjcF9ldmVudCwKKwkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiTERPMiIsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzIsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0IyIiwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMSwgOSwgMCksCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQjEiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8xLCA4LCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiSU4xTCBQR0EiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8yLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIklOMVIgUEdBIiwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMiwgNCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIklOMUwgTXV4IiwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNywgMiwgMCwgJmluMV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiSU4xUiBNdXgiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF83LCAzLCAwLCAmaW4xX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJJTjJMIE11eCIsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzcsIDYsIDAsICZpbjJfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIklOMlIgTXV4IiwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNywgNywgMCwgJmluMl9tdXgpLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJETUlDMiIsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzcsIDksIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiRE1JQzEiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF83LCA4LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiRE1JQzJMIiwgTlVMTCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMywgNSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMlIiLCBOVUxMLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8zLCA0LCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMxTCIsIE5VTEwsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzMsIDMsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzFSIiwgTlVMTCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMywgMiwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxlZnRfc2lkZXRvbmUpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZyaWdodF9zaWRldG9uZSksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkRTUDJSWEwiLCBOVUxMLCAwLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8zLCAxMSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJEU1AyUlhSIiwgTlVMTCwgMSwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMywgMTAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYTCIsIE5VTEwsIDAsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiRFNQMVJYUiIsIE5VTEwsIDEsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDApLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWEwiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCwKKwkJICAgZHNwMnR4bCwgQVJSQVlfU0laRShkc3AydHhsKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDJUWFIiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF81LCAxMCwgMCwKKwkJICAgZHNwMnR4ciwgQVJSQVlfU0laRShkc3AydHhyKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRTUDFUWEwiLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwLAorCQkgICBkc3AxdHhsLCBBUlJBWV9TSVpFKGRzcDF0eGwpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiRFNQMVRYUiIsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzUsIDgsIDAsCisJCSAgIGRzcDF0eHIsIEFSUkFZX1NJWkUoZHNwMXR4cikpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMybF9taXgsIEFSUkFZX1NJWkUoZGFjMmxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMycl9taXgsIEFSUkFZX1NJWkUoZGFjMnJfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxbF9taXgsIEFSUkFZX1NJWkUoZGFjMWxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxcl9taXgsIEFSUkFZX1NJWkUoZGFjMXJfbWl4KSksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDEiLCAiQUlGMiBQbGF5YmFjayIsIDEsCisJCSAgICBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjJSWDAiLCAiQUlGMiBQbGF5YmFjayIsIDIsCisJCSAgICBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF80LCA4LCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMlRYMSIsICJBSUYyIENhcHR1cmUiLCAxLAorCQkgICAgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNiwgOSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyVFgwIiwgIkFJRjIgQ2FwdHVyZSIsIDIsCisJCSAgICBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF82LCA4LCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNSIsICJBSUYxIFBsYXliYWNrIiwgNSwKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDUsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYNCIsICJBSUYxIFBsYXliYWNrIiwgNCwKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDQsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMyIsICJBSUYxIFBsYXliYWNrIiwgMywKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDMsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMiIsICJBSUYxIFBsYXliYWNrIiwgMiwKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMSIsICJBSUYxIFBsYXliYWNrIiwgMSwKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMVJYMCIsICJBSUYxIFBsYXliYWNrIiwgMCwKKwkJICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYNSIsICJBSUYxIENhcHR1cmUiLCA1LAorCQkgICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzYsIDUsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDQiLCAiQUlGMSBDYXB0dXJlIiwgNCwKKwkJICAgICBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF82LCA0LCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgzIiwgIkFJRjEgQ2FwdHVyZSIsIDMsCisJCSAgICAgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNiwgMywgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMVRYMiIsICJBSUYxIENhcHR1cmUiLCAyLAorCQkgICAgIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzYsIDIsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFUWDEiLCAiQUlGMSBDYXB0dXJlIiwgMSwKKwkJICAgICBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxVFgwIiwgIkFJRjEgQ2FwdHVyZSIsIDAsCisJCSAgICAgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNiwgMCwgMCksCisKKy8qIFdlIHJvdXRlIGFzIHN0ZXJlbyBwYWlycyBzbyBkZWZpbmUgc29tZSBkdW1teSB3aWRnZXRzIHRvIHNxdWFzaAorICogdGhpbmdzIGRvd24gZm9yIG5vdy4gIFJYQSA9IDAsMSwgUlhCID0gMiwzIGFuZCBzbyBvbiAqLworU05EX1NPQ19EQVBNX1BHQSgiQUlGMVJYQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJBSUYxUlhCIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkFJRjFSWEMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiQUlGMlJYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkRTUDJUWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkRTUDFSWCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRzcDFyeCksCitTTkRfU09DX0RBUE1fTVVYKCJEU1AyUlgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkc3AycngpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGMlRYIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMnR4KSwKKworU05EX1NPQ19EQVBNX01VWCgiU1BLTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNwa2xfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlNQS1IiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzcGtyX211eCksCitTTkRfU09DX0RBUE1fUEdBKCJTUEtMIFBHQSIsIFdNODk5Nl9MRUZUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlNQS1IgUEdBIiwgV004OTk2X1JJR0hUX1BETV9TUEVBS0VSLCA0LCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMIFBHQSIsIDAsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzEsIDcsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX0RMWSIsIDEsIFdNODk5Nl9BTkFMT0dVRV9IUF8yLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyTF9EQ1MiLCAyLCBXTTg5OTZfRENfU0VSVk9fMSwgMiwgMCwgZGNzX3N0YXJ0LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJMX09VVFAiLCAzLCBXTTg5OTZfQU5BTE9HVUVfSFBfMiwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMkxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDJMLCAwLAorCQkgICBybXZfc2hvcnRfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlIgUEdBIiwgMCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMSwgNiwgMCxOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9ETFkiLCAxLCBXTTg5OTZfQU5BTE9HVUVfSFBfMiwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMlJfRENTIiwgMiwgV004OTk2X0RDX1NFUlZPXzEsIDMsIDAsIGRjc19zdGFydCwKKwkJICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQyUl9PVVRQIiwgMywgV004OTk2X0FOQUxPR1VFX0hQXzIsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDJSX1JNVl9TSE9SVCIsIDMsIFNORF9TT0NfTk9QTSwgSFBPVVQyUiwgMCwKKwkJICAgcm12X3Nob3J0X2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMIFBHQSIsIDAsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzEsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX0RMWSIsIDEsIFdNODk5Nl9BTkFMT0dVRV9IUF8xLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxTF9EQ1MiLCAyLCBXTTg5OTZfRENfU0VSVk9fMSwgMCwgMCwgZGNzX3N0YXJ0LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFMX09VVFAiLCAzLCBXTTg5OTZfQU5BTE9HVUVfSFBfMSwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMUxfUk1WX1NIT1JUIiwgMywgU05EX1NPQ19OT1BNLCBIUE9VVDFMLCAwLAorCQkgICBybXZfc2hvcnRfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVIgUEdBIiwgMCwgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMSwgNCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfRExZIiwgMSwgV004OTk2X0FOQUxPR1VFX0hQXzEsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUE9VVDFSX0RDUyIsIDIsIFdNODk5Nl9EQ19TRVJWT18xLCAxLCAwLCBkY3Nfc3RhcnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQT1VUMVJfT1VUUCIsIDMsIFdNODk5Nl9BTkFMT0dVRV9IUF8xLCAyLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBPVVQxUl9STVZfU0hPUlQiLCAzLCBTTkRfU09DX05PUE0sIEhQT1VUMVIsIDAsCisJCSAgIHJtdl9zaG9ydF9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMUwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMVIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMkwiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkhQT1VUMlIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS0RBVCIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk2X2RhcG1fcm91dGVzW10gPSB7CisJeyAiQUlGQ0xLIiwgTlVMTCwgIlNZU0NMSyIgfSwKKwl7ICJTWVNEU1BDTEsiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIkNoYXJnZSBQdW1wIiwgTlVMTCwgIlNZU0NMSyIgfSwKKworCXsgIk1JQ0IxIiwgTlVMTCwgIkxETzIiIH0sCisJeyAiTUlDQjIiLCBOVUxMLCAiTERPMiIgfSwKKworCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxOIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMkxQIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxOIiB9LAorCXsgIklOMUwgUEdBIiwgTlVMTCwgIklOMUxQIiB9LAorCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUk4iIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4yUlAiIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUk4iIH0sCisJeyAiSU4xUiBQR0EiLCBOVUxMLCAiSU4xUlAiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIklOMUwgUEdBIiB9LAorCisJeyAiQURDUiIsIE5VTEwsICJJTjFSIFBHQSIgfSwKKworCXsgIkRNSUMxTCIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiRE1JQzFEQVQiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJETUlDMkRBVCIgfSwKKworCXsgIkRNSUMyTCIsIE5VTEwsICJETUlDMiIgfSwKKwl7ICJETUlDMlIiLCBOVUxMLCAiRE1JQzIiIH0sCisJeyAiRE1JQzFMIiwgTlVMTCwgIkRNSUMxIiB9LAorCXsgIkRNSUMxUiIsIE5VTEwsICJETUlDMSIgfSwKKworCXsgIklOMUwgTXV4IiwgIkFEQyIsICJBRENMIiB9LAorCXsgIklOMUwgTXV4IiwgIkRNSUMxIiwgIkRNSUMxTCIgfSwKKwl7ICJJTjFMIE11eCIsICJETUlDMiIsICJETUlDMkwiIH0sCisKKwl7ICJJTjFSIE11eCIsICJBREMiLCAiQURDUiIgfSwKKwl7ICJJTjFSIE11eCIsICJETUlDMSIsICJETUlDMVIiIH0sCisJeyAiSU4xUiBNdXgiLCAiRE1JQzIiLCAiRE1JQzJSIiB9LAorCisJeyAiSU4yTCBNdXgiLCAiQURDIiwgIkFEQ0wiIH0sCisJeyAiSU4yTCBNdXgiLCAiRE1JQzEiLCAiRE1JQzFMIiB9LAorCXsgIklOMkwgTXV4IiwgIkRNSUMyIiwgIkRNSUMyTCIgfSwKKworCXsgIklOMlIgTXV4IiwgIkFEQyIsICJBRENSIiB9LAorCXsgIklOMlIgTXV4IiwgIkRNSUMxIiwgIkRNSUMxUiIgfSwKKwl7ICJJTjJSIE11eCIsICJETUlDMiIsICJETUlDMlIiIH0sCisKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMSIsICJJTjFMIE11eCIgfSwKKwl7ICJMZWZ0IFNpZGV0b25lIiwgIklOMiIsICJJTjJMIE11eCIgfSwKKworCXsgIlJpZ2h0IFNpZGV0b25lIiwgIklOMSIsICJJTjFSIE11eCIgfSwKKwl7ICJSaWdodCBTaWRldG9uZSIsICJJTjIiLCAiSU4yUiBNdXgiIH0sCisKKwl7ICJEU1AxVFhMIiwgIklOMSBTd2l0Y2giLCAiSU4xTCBNdXgiIH0sCisJeyAiRFNQMVRYUiIsICJJTjEgU3dpdGNoIiwgIklOMVIgTXV4IiB9LAorCisJeyAiRFNQMlRYTCIsICJJTjEgU3dpdGNoIiwgIklOMkwgTXV4IiB9LAorCXsgIkRTUDJUWFIiLCAiSU4xIFN3aXRjaCIsICJJTjJSIE11eCIgfSwKKworCXsgIkFJRjFUWDAiLCBOVUxMLCAiRFNQMVRYTCIgfSwKKwl7ICJBSUYxVFgxIiwgTlVMTCwgIkRTUDFUWFIiIH0sCisJeyAiQUlGMVRYMiIsIE5VTEwsICJEU1AyVFhMIiB9LAorCXsgIkFJRjFUWDMiLCBOVUxMLCAiRFNQMlRYUiIgfSwKKwl7ICJBSUYxVFg0IiwgTlVMTCwgIkFJRjJSWDAiIH0sCisJeyAiQUlGMVRYNSIsIE5VTEwsICJBSUYyUlgxIiB9LAorCisJeyAiQUlGMVJYMCIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMSIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMiIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYMyIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYNCIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMVJYNSIsIE5VTEwsICJBSUZDTEsiIH0sCisKKwl7ICJBSUYyUlgwIiwgTlVMTCwgIkFJRkNMSyIgfSwKKwl7ICJBSUYyUlgxIiwgTlVMTCwgIkFJRkNMSyIgfSwKKworCXsgIkFJRjFUWDAiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCXsgIkFJRjFUWDEiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCXsgIkFJRjFUWDIiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCXsgIkFJRjFUWDMiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCXsgIkFJRjFUWDQiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCXsgIkFJRjFUWDUiLCBOVUxMLCAiQUlGQ0xLIiB9LAorCisJeyAiQUlGMlRYMCIsIE5VTEwsICJBSUZDTEsiIH0sCisJeyAiQUlGMlRYMSIsIE5VTEwsICJBSUZDTEsiIH0sCisKKwl7ICJEU1AxUlhMIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AxUlhSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AyUlhMIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AyUlhSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AxVFhMIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AxVFhSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AyVFhMIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKwl7ICJEU1AyVFhSIiwgTlVMTCwgIlNZU0RTUENMSyIgfSwKKworCXsgIkFJRjFSWEEiLCBOVUxMLCAiQUlGMVJYMCIgfSwKKwl7ICJBSUYxUlhBIiwgTlVMTCwgIkFJRjFSWDEiIH0sCisJeyAiQUlGMVJYQiIsIE5VTEwsICJBSUYxUlgyIiB9LAorCXsgIkFJRjFSWEIiLCBOVUxMLCAiQUlGMVJYMyIgfSwKKwl7ICJBSUYxUlhDIiwgTlVMTCwgIkFJRjFSWDQiIH0sCisJeyAiQUlGMVJYQyIsIE5VTEwsICJBSUYxUlg1IiB9LAorCisJeyAiQUlGMlJYIiwgTlVMTCwgIkFJRjJSWDAiIH0sCisJeyAiQUlGMlJYIiwgTlVMTCwgIkFJRjJSWDEiIH0sCisKKwl7ICJBSUYyVFgiLCAiRFNQMiIsICJEU1AyVFgiIH0sCisJeyAiQUlGMlRYIiwgIkRTUDEiLCAiRFNQMVJYIiB9LAorCXsgIkFJRjJUWCIsICJBSUYxIiwgIkFJRjFSWEMiIH0sCisKKwl7ICJEU1AxUlhMIiwgTlVMTCwgIkRTUDFSWCIgfSwKKwl7ICJEU1AxUlhSIiwgTlVMTCwgIkRTUDFSWCIgfSwKKwl7ICJEU1AyUlhMIiwgTlVMTCwgIkRTUDJSWCIgfSwKKwl7ICJEU1AyUlhSIiwgTlVMTCwgIkRTUDJSWCIgfSwKKworCXsgIkRTUDJUWCIsIE5VTEwsICJEU1AyVFhMIiB9LAorCXsgIkRTUDJUWCIsIE5VTEwsICJEU1AyVFhSIiB9LAorCisJeyAiRFNQMVJYIiwgIkFJRjEiLCAiQUlGMVJYQSIgfSwKKwl7ICJEU1AxUlgiLCAiQUlGMiIsICJBSUYyUlgiIH0sCisKKwl7ICJEU1AyUlgiLCAiQUlGMSIsICJBSUYxUlhCIiB9LAorCXsgIkRTUDJSWCIsICJBSUYyIiwgIkFJRjJSWCIgfSwKKworCXsgIkRBQzJMIE1peGVyIiwgIkRTUDIgU3dpdGNoIiwgIkRTUDJSWEwiIH0sCisJeyAiREFDMkwgTWl4ZXIiLCAiRFNQMSBTd2l0Y2giLCAiRFNQMVJYTCIgfSwKKwl7ICJEQUMyTCBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisJeyAiREFDMkwgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzJSIE1peGVyIiwgIkRTUDIgU3dpdGNoIiwgIkRTUDJSWFIiIH0sCisJeyAiREFDMlIgTWl4ZXIiLCAiRFNQMSBTd2l0Y2giLCAiRFNQMVJYUiIgfSwKKwl7ICJEQUMyUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisJeyAiREFDMlIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzFMIE1peGVyIiwgIkRTUDIgU3dpdGNoIiwgIkRTUDJSWEwiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiRFNQMSBTd2l0Y2giLCAiRFNQMVJYTCIgfSwKKwl7ICJEQUMxTCBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzFSIE1peGVyIiwgIkRTUDIgU3dpdGNoIiwgIkRTUDJSWFIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiRFNQMSBTd2l0Y2giLCAiRFNQMVJYUiIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKworCXsgIkRBQzFMIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkRBQzFSIE1peGVyIiB9LAorCXsgIkRBQzJMIiwgTlVMTCwgIkRBQzJMIE1peGVyIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkRBQzJSIE1peGVyIiB9LAorCisJeyAiSFBPVVQyTCBQR0EiLCBOVUxMLCAiQ2hhcmdlIFB1bXAiIH0sCisJeyAiSFBPVVQyTCBQR0EiLCBOVUxMLCAiREFDMkwiIH0sCisJeyAiSFBPVVQyTF9ETFkiLCBOVUxMLCAiSFBPVVQyTCBQR0EiIH0sCisJeyAiSFBPVVQyTF9EQ1MiLCBOVUxMLCAiSFBPVVQyTF9ETFkiIH0sCisJeyAiSFBPVVQyTF9PVVRQIiwgTlVMTCwgIkhQT1VUMkxfRENTIiB9LAorCXsgIkhQT1VUMkxfUk1WX1NIT1JUIiwgTlVMTCwgIkhQT1VUMkxfT1VUUCIgfSwKKworCXsgIkhQT1VUMlIgUEdBIiwgTlVMTCwgIkNoYXJnZSBQdW1wIiB9LAorCXsgIkhQT1VUMlIgUEdBIiwgTlVMTCwgIkRBQzJSIiB9LAorCXsgIkhQT1VUMlJfRExZIiwgTlVMTCwgIkhQT1VUMlIgUEdBIiB9LAorCXsgIkhQT1VUMlJfRENTIiwgTlVMTCwgIkhQT1VUMlJfRExZIiB9LAorCXsgIkhQT1VUMlJfT1VUUCIsIE5VTEwsICJIUE9VVDJSX0RDUyIgfSwKKwl7ICJIUE9VVDJSX1JNVl9TSE9SVCIsIE5VTEwsICJIUE9VVDJSX09VVFAiIH0sCisKKwl7ICJIUE9VVDFMIFBHQSIsIE5VTEwsICJDaGFyZ2UgUHVtcCIgfSwKKwl7ICJIUE9VVDFMIFBHQSIsIE5VTEwsICJEQUMxTCIgfSwKKwl7ICJIUE9VVDFMX0RMWSIsIE5VTEwsICJIUE9VVDFMIFBHQSIgfSwKKwl7ICJIUE9VVDFMX0RDUyIsIE5VTEwsICJIUE9VVDFMX0RMWSIgfSwKKwl7ICJIUE9VVDFMX09VVFAiLCBOVUxMLCAiSFBPVVQxTF9EQ1MiIH0sCisJeyAiSFBPVVQxTF9STVZfU0hPUlQiLCBOVUxMLCAiSFBPVVQxTF9PVVRQIiB9LAorCisJeyAiSFBPVVQxUiBQR0EiLCBOVUxMLCAiQ2hhcmdlIFB1bXAiIH0sCisJeyAiSFBPVVQxUiBQR0EiLCBOVUxMLCAiREFDMVIiIH0sCisJeyAiSFBPVVQxUl9ETFkiLCBOVUxMLCAiSFBPVVQxUiBQR0EiIH0sCisJeyAiSFBPVVQxUl9EQ1MiLCBOVUxMLCAiSFBPVVQxUl9ETFkiIH0sCisJeyAiSFBPVVQxUl9PVVRQIiwgTlVMTCwgIkhQT1VUMVJfRENTIiB9LAorCXsgIkhQT1VUMVJfUk1WX1NIT1JUIiwgTlVMTCwgIkhQT1VUMVJfT1VUUCIgfSwKKworCXsgIkhQT1VUMkwiLCBOVUxMLCAiSFBPVVQyTF9STVZfU0hPUlQiIH0sCisJeyAiSFBPVVQyUiIsIE5VTEwsICJIUE9VVDJSX1JNVl9TSE9SVCIgfSwKKwl7ICJIUE9VVDFMIiwgTlVMTCwgIkhQT1VUMUxfUk1WX1NIT1JUIiB9LAorCXsgIkhQT1VUMVIiLCBOVUxMLCAiSFBPVVQxUl9STVZfU0hPUlQiIH0sCisKKwl7ICJTUEtMIiwgIkRBQzFMIiwgIkRBQzFMIiB9LAorCXsgIlNQS0wiLCAiREFDMVIiLCAiREFDMVIiIH0sCisJeyAiU1BLTCIsICJEQUMyTCIsICJEQUMyTCIgfSwKKwl7ICJTUEtMIiwgIkRBQzJSIiwgIkRBQzJSIiB9LAorCisJeyAiU1BLUiIsICJEQUMxTCIsICJEQUMxTCIgfSwKKwl7ICJTUEtSIiwgIkRBQzFSIiwgIkRBQzFSIiB9LAorCXsgIlNQS1IiLCAiREFDMkwiLCAiREFDMkwiIH0sCisJeyAiU1BLUiIsICJEQUMyUiIsICJEQUMyUiIgfSwKKworCXsgIlNQS0wgUEdBIiwgTlVMTCwgIlNQS0wiIH0sCisJeyAiU1BLUiBQR0EiLCBOVUxMLCAiU1BLUiIgfSwKKworCXsgIlNQS0RBVCIsIE5VTEwsICJTUEtMIFBHQSIgfSwKKwl7ICJTUEtEQVQiLCBOVUxMLCAiU1BLUiBQR0EiIH0sCit9OworCitzdGF0aWMgaW50IHdtODk5Nl9yZWFkYWJsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJLyogRHVlIHRvIHRoZSBzcGFyc2VuZXNzIG9mIHRoZSByZWdpc3RlciBtYXAgdGhlIGNvbXBpbGVyCisJICogb3V0cHV0IGZyb20gYW4gZXhwbGljaXQgc3dpdGNoIHN0YXRlbWVudCBlbmRzIHVwIGJlaW5nIG11Y2gKKwkgKiBtb3JlIGVmZmljaWVudCB0aGFuIGEgdGFibGUuCisJICovCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFdNODk5Nl9TT0ZUV0FSRV9SRVNFVDoKKwljYXNlIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzE6CisJY2FzZSBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8yOgorCWNhc2UgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMzoKKwljYXNlIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzQ6CisJY2FzZSBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF81OgorCWNhc2UgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNjoKKwljYXNlIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzc6CisJY2FzZSBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF84OgorCWNhc2UgV004OTk2X0xFRlRfTElORV9JTlBVVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfUklHSFRfTElORV9JTlBVVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfTElORV9JTlBVVF9DT05UUk9MOgorCWNhc2UgV004OTk2X0RBQzFfSFBPVVQxX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9EQUMyX0hQT1VUMl9WT0xVTUU6CisJY2FzZSBXTTg5OTZfREFDMV9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9EQUMxX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9EQUMyX0xFRlRfVk9MVU1FOgorCWNhc2UgV004OTk2X0RBQzJfUklHSFRfVk9MVU1FOgorCWNhc2UgV004OTk2X09VVFBVVDFfTEVGVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfT1VUUFVUMV9SSUdIVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfT1VUUFVUMl9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9PVVRQVVQyX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9NSUNCSUFTXzE6CisJY2FzZSBXTTg5OTZfTUlDQklBU18yOgorCWNhc2UgV004OTk2X0xET18xOgorCWNhc2UgV004OTk2X0xET18yOgorCWNhc2UgV004OTk2X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xOgorCWNhc2UgV004OTk2X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yOgorCWNhc2UgV004OTk2X0hFQURQSE9ORV9ERVRFQ1RfMToKKwljYXNlIFdNODk5Nl9IRUFEUEhPTkVfREVURUNUXzI6CisJY2FzZSBXTTg5OTZfTUlDX0RFVEVDVF8xOgorCWNhc2UgV004OTk2X01JQ19ERVRFQ1RfMjoKKwljYXNlIFdNODk5Nl9NSUNfREVURUNUXzM6CisJY2FzZSBXTTg5OTZfQ0hBUkdFX1BVTVBfMToKKwljYXNlIFdNODk5Nl9DSEFSR0VfUFVNUF8yOgorCWNhc2UgV004OTk2X0RDX1NFUlZPXzE6CisJY2FzZSBXTTg5OTZfRENfU0VSVk9fMjoKKwljYXNlIFdNODk5Nl9EQ19TRVJWT18zOgorCWNhc2UgV004OTk2X0RDX1NFUlZPXzU6CisJY2FzZSBXTTg5OTZfRENfU0VSVk9fNjoKKwljYXNlIFdNODk5Nl9EQ19TRVJWT183OgorCWNhc2UgV004OTk2X0RDX1NFUlZPX1JFQURCQUNLXzA6CisJY2FzZSBXTTg5OTZfQU5BTE9HVUVfSFBfMToKKwljYXNlIFdNODk5Nl9BTkFMT0dVRV9IUF8yOgorCWNhc2UgV004OTk2X0NISVBfUkVWSVNJT046CisJY2FzZSBXTTg5OTZfQ09OVFJPTF9JTlRFUkZBQ0VfMToKKwljYXNlIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfQ1RSTF8xOgorCWNhc2UgV004OTk2X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzI6CisJY2FzZSBXTTg5OTZfQUlGX0NMT0NLSU5HXzE6CisJY2FzZSBXTTg5OTZfQUlGX0NMT0NLSU5HXzI6CisJY2FzZSBXTTg5OTZfQ0xPQ0tJTkdfMToKKwljYXNlIFdNODk5Nl9DTE9DS0lOR18yOgorCWNhc2UgV004OTk2X0FJRl9SQVRFOgorCWNhc2UgV004OTk2X0ZMTF9DT05UUk9MXzE6CisJY2FzZSBXTTg5OTZfRkxMX0NPTlRST0xfMjoKKwljYXNlIFdNODk5Nl9GTExfQ09OVFJPTF8zOgorCWNhc2UgV004OTk2X0ZMTF9DT05UUk9MXzQ6CisJY2FzZSBXTTg5OTZfRkxMX0NPTlRST0xfNToKKwljYXNlIFdNODk5Nl9GTExfQ09OVFJPTF82OgorCWNhc2UgV004OTk2X0ZMTF9FRlNfMToKKwljYXNlIFdNODk5Nl9GTExfRUZTXzI6CisJY2FzZSBXTTg5OTZfQUlGMV9DT05UUk9MOgorCWNhc2UgV004OTk2X0FJRjFfQkNMSzoKKwljYXNlIFdNODk5Nl9BSUYxX1RYX0xSQ0xLXzE6CisJY2FzZSBXTTg5OTZfQUlGMV9UWF9MUkNMS18yOgorCWNhc2UgV004OTk2X0FJRjFfUlhfTFJDTEtfMToKKwljYXNlIFdNODk5Nl9BSUYxX1JYX0xSQ0xLXzI6CisJY2FzZSBXTTg5OTZfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xOgorCWNhc2UgV004OTk2X0FJRjFUWF9EQVRBX0NPTkZJR1VSQVRJT05fMjoKKwljYXNlIFdNODk5Nl9BSUYxUlhfREFUQV9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjFUWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfMl9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjFUWF9DSEFOTkVMXzNfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF80X0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfNV9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjFSWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfMl9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjFSWF9DSEFOTkVMXzNfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF80X0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfNV9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjFSWF9NT05PX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMVRYX1RFU1Q6CisJY2FzZSBXTTg5OTZfQUlGMl9DT05UUk9MOgorCWNhc2UgV004OTk2X0FJRjJfQkNMSzoKKwljYXNlIFdNODk5Nl9BSUYyX1RYX0xSQ0xLXzE6CisJY2FzZSBXTTg5OTZfQUlGMl9UWF9MUkNMS18yOgorCWNhc2UgV004OTk2X0FJRjJfUlhfTFJDTEtfMToKKwljYXNlIFdNODk5Nl9BSUYyX1JYX0xSQ0xLXzI6CisJY2FzZSBXTTg5OTZfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8xOgorCWNhc2UgV004OTk2X0FJRjJUWF9EQVRBX0NPTkZJR1VSQVRJT05fMjoKKwljYXNlIFdNODk5Nl9BSUYyUlhfREFUQV9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjJUWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYyVFhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT046CisJY2FzZSBXTTg5OTZfQUlGMlJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjJSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTjoKKwljYXNlIFdNODk5Nl9BSUYyUlhfTU9OT19DT05GSUdVUkFUSU9OOgorCWNhc2UgV004OTk2X0FJRjJUWF9URVNUOgorCWNhc2UgV004OTk2X0RTUDFfVFhfTEVGVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfRFNQMV9UWF9SSUdIVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9MRUZUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9EU1AxX1JYX1JJR0hUX1ZPTFVNRToKKwljYXNlIFdNODk5Nl9EU1AxX1RYX0ZJTFRFUlM6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9GSUxURVJTXzE6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9GSUxURVJTXzI6CisJY2FzZSBXTTg5OTZfRFNQMV9EUkNfMToKKwljYXNlIFdNODk5Nl9EU1AxX0RSQ18yOgorCWNhc2UgV004OTk2X0RTUDFfRFJDXzM6CisJY2FzZSBXTTg5OTZfRFNQMV9EUkNfNDoKKwljYXNlIFdNODk5Nl9EU1AxX0RSQ181OgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfR0FJTlNfMToKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzI6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzFfQToKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMV9COgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF8xX1BHOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF8yX0E6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzJfQjoKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMl9DOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF8yX1BHOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF8zX0E6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzNfQjoKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfM19DOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF8zX1BHOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF80X0E6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzRfQjoKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNF9DOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF80X1BHOgorCWNhc2UgV004OTk2X0RTUDFfUlhfRVFfQkFORF81X0E6CisJY2FzZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzVfQjoKKwljYXNlIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNV9QRzoKKwljYXNlIFdNODk5Nl9EU1AyX1RYX0xFRlRfVk9MVU1FOgorCWNhc2UgV004OTk2X0RTUDJfVFhfUklHSFRfVk9MVU1FOgorCWNhc2UgV004OTk2X0RTUDJfUlhfTEVGVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9SSUdIVF9WT0xVTUU6CisJY2FzZSBXTTg5OTZfRFNQMl9UWF9GSUxURVJTOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRklMVEVSU18xOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRklMVEVSU18yOgorCWNhc2UgV004OTk2X0RTUDJfRFJDXzE6CisJY2FzZSBXTTg5OTZfRFNQMl9EUkNfMjoKKwljYXNlIFdNODk5Nl9EU1AyX0RSQ18zOgorCWNhc2UgV004OTk2X0RTUDJfRFJDXzQ6CisJY2FzZSBXTTg5OTZfRFNQMl9EUkNfNToKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0dBSU5TXzE6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9HQUlOU18yOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRVFfQkFORF8xX0E6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzFfQjoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMV9QRzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMl9BOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRVFfQkFORF8yX0I6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzJfQzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMl9QRzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfM19BOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRVFfQkFORF8zX0I6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzNfQzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfM19QRzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNF9BOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRVFfQkFORF80X0I6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzRfQzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNF9QRzoKKwljYXNlIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNV9BOgorCWNhc2UgV004OTk2X0RTUDJfUlhfRVFfQkFORF81X0I6CisJY2FzZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzVfUEc6CisJY2FzZSBXTTg5OTZfREFDMV9NSVhFUl9WT0xVTUVTOgorCWNhc2UgV004OTk2X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTk2X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORzoKKwljYXNlIFdNODk5Nl9EQUMyX01JWEVSX1ZPTFVNRVM6CisJY2FzZSBXTTg5OTZfREFDMl9MRUZUX01JWEVSX1JPVVRJTkc6CisJY2FzZSBXTTg5OTZfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTk2X0RTUDFfVFhfTEVGVF9NSVhFUl9ST1VUSU5HOgorCWNhc2UgV004OTk2X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORzoKKwljYXNlIFdNODk5Nl9EU1AyX1RYX0xFRlRfTUlYRVJfUk9VVElORzoKKwljYXNlIFdNODk5Nl9EU1AyX1RYX1JJR0hUX01JWEVSX1JPVVRJTkc6CisJY2FzZSBXTTg5OTZfRFNQX1RYX01JWEVSX1NFTEVDVDoKKwljYXNlIFdNODk5Nl9EQUNfU09GVE1VVEU6CisJY2FzZSBXTTg5OTZfT1ZFUlNBTVBMSU5HOgorCWNhc2UgV004OTk2X1NJREVUT05FOgorCWNhc2UgV004OTk2X0dQSU9fMToKKwljYXNlIFdNODk5Nl9HUElPXzI6CisJY2FzZSBXTTg5OTZfR1BJT18zOgorCWNhc2UgV004OTk2X0dQSU9fNDoKKwljYXNlIFdNODk5Nl9HUElPXzU6CisJY2FzZSBXTTg5OTZfUFVMTF9DT05UUk9MXzE6CisJY2FzZSBXTTg5OTZfUFVMTF9DT05UUk9MXzI6CisJY2FzZSBXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18xOgorCWNhc2UgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMjoKKwljYXNlIFdNODk5Nl9JTlRFUlJVUFRfUkFXX1NUQVRVU18yOgorCWNhc2UgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLOgorCWNhc2UgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLOgorCWNhc2UgV004OTk2X0lOVEVSUlVQVF9DT05UUk9MOgorCWNhc2UgV004OTk2X0xFRlRfUERNX1NQRUFLRVI6CisJY2FzZSBXTTg5OTZfUklHSFRfUERNX1NQRUFLRVI6CisJY2FzZSBXTTg5OTZfUERNX1NQRUFLRVJfTVVURV9TRVFVRU5DRToKKwljYXNlIFdNODk5Nl9QRE1fU1BFQUtFUl9WT0xVTUU6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCB3bTg5OTZfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5OTZfU09GVFdBUkVfUkVTRVQ6CisJY2FzZSBXTTg5OTZfQ0hJUF9SRVZJU0lPTjoKKwljYXNlIFdNODk5Nl9MRE9fMToKKwljYXNlIFdNODk5Nl9MRE9fMjoKKwljYXNlIFdNODk5Nl9JTlRFUlJVUFRfU1RBVFVTXzE6CisJY2FzZSBXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18yOgorCWNhc2UgV004OTk2X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzI6CisJY2FzZSBXTTg5OTZfRENfU0VSVk9fUkVBREJBQ0tfMDoKKwljYXNlIFdNODk5Nl9EQ19TRVJWT18yOgorCWNhc2UgV004OTk2X0RDX1NFUlZPXzY6CisJY2FzZSBXTTg5OTZfRENfU0VSVk9fNzoKKwljYXNlIFdNODk5Nl9GTExfQ09OVFJPTF82OgorCWNhc2UgV004OTk2X01JQ19ERVRFQ1RfMzoKKwljYXNlIFdNODk5Nl9IRUFEUEhPTkVfREVURUNUXzE6CisJY2FzZSBXTTg5OTZfSEVBRFBIT05FX0RFVEVDVF8yOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTk2X1NPRlRXQVJFX1JFU0VULCAweDg5MTUpOworfQorCitzdGF0aWMgY29uc3QgaW50IGJjbGtfZGl2c1tdID0geworCTEsIDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMjQsIDMyLCA0OCwgNjQsIDk2Cit9OworCitzdGF0aWMgdm9pZCB3bTg5OTZfdXBkYXRlX2JjbGsoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGFpZiwgYmVzdCwgY3VyX3ZhbCwgYmNsa19yYXRlLCBiY2xrX3JlZywgaTsKKworCS8qIERvbid0IGJvdGhlciBpZiB3ZSdyZSBpbiBhIGxvdyBmcmVxdWVuY3kgaWRsZSBtb2RlIHRoYXQKKwkgKiBjYW4ndCBzdXBwb3J0IGF1ZGlvLgorCSAqLworCWlmICh3bTg5OTYtPnN5c2NsayA8IDY0MDAwKQorCQlyZXR1cm47CisKKwlmb3IgKGFpZiA9IDA7IGFpZiA8IFdNODk5Nl9BSUZTOyBhaWYrKykgeworCQlzd2l0Y2ggKGFpZikgeworCQljYXNlIDA6CisJCQliY2xrX3JlZyA9IFdNODk5Nl9BSUYxX0JDTEs7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYmNsa19yZWcgPSBXTTg5OTZfQUlGMl9CQ0xLOworCQkJYnJlYWs7CisJCX0KKworCQliY2xrX3JhdGUgPSB3bTg5OTYtPmJjbGtfcmF0ZVthaWZdOworCisJCS8qIFBpY2sgYSBkaXZpc29yIGZvciBCQ0xLIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gaWRlYWwgKi8KKwkJYmVzdCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJjbGtfZGl2cyk7IGkrKykgeworCQkJY3VyX3ZhbCA9ICh3bTg5OTYtPnN5c2NsayAvIGJjbGtfZGl2c1tpXSkgLSBiY2xrX3JhdGU7CisJCQlpZiAoY3VyX3ZhbCA8IDApIC8qIEJDTEsgdGFibGUgaXMgc29ydGVkICovCisJCQkJYnJlYWs7CisJCQliZXN0ID0gaTsKKwkJfQorCQliY2xrX3JhdGUgPSB3bTg5OTYtPnN5c2NsayAvIGJjbGtfZGl2c1tiZXN0XTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgQkNMS19ESVYgJWQgZm9yIGFjdHVhbCBCQ0xLICVkSHpcbiIsCisJCQliY2xrX2RpdnNbYmVzdF0sIGJjbGtfcmF0ZSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYmNsa19yZWcsCisJCQkJICAgIFdNODk5Nl9BSUYxX0JDTEtfRElWX01BU0ssIGJlc3QpOworCX0KK30KKworc3RhdGljIGludCB3bTg5OTZfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJaWYgKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJCSAgICBXTTg5OTZfQkdfRU5BLCBXTTg5OTZfQkdfRU5BKTsKKwkJCW1zbGVlcCgyKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLAorCQkJCQkJICAgIHdtODk5Ni0+c3VwcGxpZXMpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsCisJCQkJCXJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJaWYgKHdtODk5Ni0+cGRhdGEubGRvX2VuYSA+PSAwKSB7CisJCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAod204OTk2LT5wZGF0YS5sZG9fZW5hLAorCQkJCQkJCTEpOworCQkJCW1zbGVlcCg1KTsKKwkJCX0KKworCQkJY29kZWMtPmNhY2hlX29ubHkgPSBmYWxzZTsKKwkJCXNuZF9zb2NfY2FjaGVfc3luYyhjb2RlYyk7CisJCX0KKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTZfQkdfRU5BLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCWNvZGVjLT5jYWNoZV9vbmx5ID0gdHJ1ZTsKKwkJaWYgKHdtODk5Ni0+cGRhdGEubGRvX2VuYSA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAod204OTk2LT5wZGF0YS5sZG9fZW5hLCAwKTsKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg5OTYtPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmRhcG0uYmlhc19sZXZlbCA9IGxldmVsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlpbnQgYWlmY3RybCA9IDA7CisJaW50IGJjbGsgPSAwOworCWludCBscmNsa190eCA9IDA7CisJaW50IGxyY2xrX3J4ID0gMDsKKwlpbnQgYWlmY3RybF9yZWcsIGJjbGtfcmVnLCBscmNsa190eF9yZWcsIGxyY2xrX3J4X3JlZzsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgMDoKKwkJYWlmY3RybF9yZWcgPSBXTTg5OTZfQUlGMV9DT05UUk9MOworCQliY2xrX3JlZyA9IFdNODk5Nl9BSUYxX0JDTEs7CisJCWxyY2xrX3R4X3JlZyA9IFdNODk5Nl9BSUYxX1RYX0xSQ0xLXzI7CisJCWxyY2xrX3J4X3JlZyA9IFdNODk5Nl9BSUYxX1JYX0xSQ0xLXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYWlmY3RybF9yZWcgPSBXTTg5OTZfQUlGMl9DT05UUk9MOworCQliY2xrX3JlZyA9IFdNODk5Nl9BSUYyX0JDTEs7CisJCWxyY2xrX3R4X3JlZyA9IFdNODk5Nl9BSUYyX1RYX0xSQ0xLXzI7CisJCWxyY2xrX3J4X3JlZyA9IFdNODk5Nl9BSUYyX1JYX0xSQ0xLXzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJYmNsayB8PSBXTTg5OTZfQUlGMV9CQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJbHJjbGtfdHggfD0gV004OTk2X0FJRjFUWF9MUkNMS19JTlY7CisJCWxyY2xrX3J4IHw9IFdNODk5Nl9BSUYxUlhfTFJDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQliY2xrIHw9IFdNODk5Nl9BSUYxX0JDTEtfSU5WOworCQlscmNsa190eCB8PSBXTTg5OTZfQUlGMVRYX0xSQ0xLX0lOVjsKKwkJbHJjbGtfcnggfD0gV004OTk2X0FJRjFSWF9MUkNMS19JTlY7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJbHJjbGtfdHggfD0gV004OTk2X0FJRjFUWF9MUkNMS19NU1RSOworCQlscmNsa19yeCB8PSBXTTg5OTZfQUlGMVJYX0xSQ0xLX01TVFI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJYmNsayB8PSBXTTg5OTZfQUlGMV9CQ0xLX01TVFI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYmNsayB8PSBXTTg5OTZfQUlGMV9CQ0xLX01TVFI7CisJCWxyY2xrX3R4IHw9IFdNODk5Nl9BSUYxVFhfTFJDTEtfTVNUUjsKKwkJbHJjbGtfcnggfD0gV004OTk2X0FJRjFSWF9MUkNMS19NU1RSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWlmY3RybCB8PSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmY3RybCB8PSAyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmY3RybCB8PSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBhaWZjdHJsX3JlZywgV004OTk2X0FJRjFfRk1UX01BU0ssIGFpZmN0cmwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJjbGtfcmVnLAorCQkJICAgIFdNODk5Nl9BSUYxX0JDTEtfSU5WIHwgV004OTk2X0FJRjFfQkNMS19NU1RSLAorCQkJICAgIGJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGxyY2xrX3R4X3JlZywKKwkJCSAgICBXTTg5OTZfQUlGMVRYX0xSQ0xLX0lOViB8CisJCQkgICAgV004OTk2X0FJRjFUWF9MUkNMS19NU1RSLAorCQkJICAgIGxyY2xrX3R4KTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBscmNsa19yeF9yZWcsCisJCQkgICAgV004OTk2X0FJRjFSWF9MUkNMS19JTlYgfAorCQkJICAgIFdNODk5Nl9BSUYxUlhfTFJDTEtfTVNUUiwKKwkJCSAgICBscmNsa19yeCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGludCBkc3BfZGl2c1tdID0geworCTQ4MDAwLCAzMjAwMCwgMTYwMDAsIDgwMDAKK307CisKK3N0YXRpYyBpbnQgd204OTk2X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGJpdHMsIGksIGJjbGtfcmF0ZTsKKwlpbnQgYWlmZGF0YSA9IDA7CisJaW50IGxyY2xrID0gMDsKKwlpbnQgZHNwID0gMDsKKwlpbnQgYWlmZGF0YV9yZWcsIGxyY2xrX3JlZywgZHNwX3NoaWZ0OworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAwOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0dQSU9fMSkpICYgV004OTk2X0dQMV9GTl9NQVNLKSB7CisJCQlhaWZkYXRhX3JlZyA9IFdNODk5Nl9BSUYxUlhfREFUQV9DT05GSUdVUkFUSU9OOworCQkJbHJjbGtfcmVnID0gV004OTk2X0FJRjFfUlhfTFJDTEtfMTsKKwkJfSBlbHNlIHsKKwkJCWFpZmRhdGFfcmVnID0gV004OTk2X0FJRjFUWF9EQVRBX0NPTkZJR1VSQVRJT05fMTsKKwkJCWxyY2xrX3JlZyA9IFdNODk5Nl9BSUYxX1RYX0xSQ0xLXzE7CisJCX0KKwkJZHNwX3NoaWZ0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyB8fAorCQkgICAgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0dQSU9fMikpICYgV004OTk2X0dQMl9GTl9NQVNLKSB7CisJCQlhaWZkYXRhX3JlZyA9IFdNODk5Nl9BSUYyUlhfREFUQV9DT05GSUdVUkFUSU9OOworCQkJbHJjbGtfcmVnID0gV004OTk2X0FJRjJfUlhfTFJDTEtfMTsKKwkJfSBlbHNlIHsKKwkJCWFpZmRhdGFfcmVnID0gV004OTk2X0FJRjJUWF9EQVRBX0NPTkZJR1VSQVRJT05fMTsKKwkJCWxyY2xrX3JlZyA9IFdNODk5Nl9BSUYyX1RYX0xSQ0xLXzE7CisJCX0KKwkJZHNwX3NoaWZ0ID0gV004OTk2X0RTUDJfRElWX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmNsa19yYXRlID0gc25kX3NvY19wYXJhbXNfdG9fYmNsayhwYXJhbXMpOworCWlmIChiY2xrX3JhdGUgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIEJDTEsgcmF0ZTogJWRcbiIsIGJjbGtfcmF0ZSk7CisJCXJldHVybiBiY2xrX3JhdGU7CisJfQorCisJd204OTk2LT5iY2xrX3JhdGVbZGFpLT5pZF0gPSBiY2xrX3JhdGU7CisJd204OTk2LT5yeF9yYXRlW2RhaS0+aWRdID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCS8qIE5lZWRzIGxvb2tpbmcgYXQgZm9yIFRETSAqLworCWJpdHMgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWlmIChiaXRzIDwgMCkKKwkJcmV0dXJuIGJpdHM7CisJYWlmZGF0YSB8PSAoYml0cyA8PCBXTTg5OTZfQUlGMVRYX1dMX1NISUZUKSB8IGJpdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc3BfZGl2cyk7IGkrKykgeworCQlpZiAoZHNwX2RpdnNbaV0gPT0gcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRzcF9kaXZzKSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbnN1cHBvcnRlZCBzYW1wbGUgcmF0ZSAlZEh6XG4iLAorCQkJcGFyYW1zX3JhdGUocGFyYW1zKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkc3AgfD0gaSA8PCBkc3Bfc2hpZnQ7CisKKwl3bTg5OTZfdXBkYXRlX2JjbGsoY29kZWMpOworCisJbHJjbGsgPSBiY2xrX3JhdGUgLyBwYXJhbXNfcmF0ZShwYXJhbXMpOworCWRldl9kYmcoZGFpLT5kZXYsICJVc2luZyBMUkNMSyByYXRlICVkIGZvciBhY3R1YWwgTFJDTEsgJWRIelxuIiwKKwkJbHJjbGssIGJjbGtfcmF0ZSAvIGxyY2xrKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZmRhdGFfcmVnLAorCQkJICAgIFdNODk5Nl9BSUYxVFhfV0xfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjFUWF9TTE9UX0xFTl9NQVNLLAorCQkJICAgIGFpZmRhdGEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGxyY2xrX3JlZywgV004OTk2X0FJRjFSWF9SQVRFX01BU0ssCisJCQkgICAgbHJjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUZfQ0xPQ0tJTkdfMiwKKwkJCSAgICBXTTg5OTZfRFNQMV9ESVZfU0hJRlQgPDwgZHNwX3NoaWZ0LCBkc3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgbGZjbGsgPSAwOworCWludCByYXRlZGl2ID0gMDsKKwlpbnQgc3JjOworCWludCBvbGQ7CisKKwlpZiAoZnJlcSA9PSB3bTg5OTYtPnN5c2NsayAmJiBjbGtfaWQgPT0gd204OTk2LT5zeXNjbGtfc3JjKQorCQlyZXR1cm4gMDsKKworCS8qIERpc2FibGUgU1lTQ0xLIHdoaWxlIHdlIHJlY29uZmlndXJlICovCisJb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTZfQUlGX0NMT0NLSU5HXzEpICYgV004OTk2X1NZU0NMS19FTkE7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRl9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5Nl9TWVNDTEtfRU5BLCAwKTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5OTZfU1lTQ0xLX01DTEsxOgorCQl3bTg5OTYtPnN5c2NsayA9IGZyZXE7CisJCXNyYyA9IDA7CisJCWJyZWFrOworCWNhc2UgV004OTk2X1NZU0NMS19NQ0xLMjoKKwkJd204OTk2LT5zeXNjbGsgPSBmcmVxOworCQlzcmMgPSAxOworCQlicmVhazsKKwljYXNlIFdNODk5Nl9TWVNDTEtfRkxMOgorCQl3bTg5OTYtPnN5c2NsayA9IGZyZXE7CisJCXNyYyA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIGNsb2NrIHNvdXJjZSAlZFxuIiwgY2xrX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoICh3bTg5OTYtPnN5c2NsaykgeworCWNhc2UgNjE0NDAwMDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRl9SQVRFLAorCQkJCSAgICBXTTg5OTZfU1lTQ0xLX1JBVEUsIDApOworCQlicmVhazsKKwljYXNlIDI0NTc2MDAwOgorCQlyYXRlZGl2ID0gV004OTk2X1NZU0NMS19ESVY7CisJY2FzZSAxMjI4ODAwMDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRl9SQVRFLAorCQkJCSAgICBXTTg5OTZfU1lTQ0xLX1JBVEUsIFdNODk5Nl9TWVNDTEtfUkFURSk7CisJCWJyZWFrOworCWNhc2UgMzIwMDA6CisJY2FzZSAzMjc2ODoKKwkJbGZjbGsgPSBXTTg5OTZfTEZDTEtfRU5BOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgY2xvY2sgcmF0ZSAlZEh6XG4iLAorCQkJIHdtODk5Ni0+c3lzY2xrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204OTk2X3VwZGF0ZV9iY2xrKGNvZGVjKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUZfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTZfU1lTQ0xLX1NSQ19NQVNLIHwgV004OTk2X1NZU0NMS19ESVZfTUFTSywKKwkJCSAgICBzcmMgPDwgV004OTk2X1NZU0NMS19TUkNfU0hJRlQgfCByYXRlZGl2KTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQ0xPQ0tJTkdfMSwgV004OTk2X0xGQ0xLX0VOQSwgbGZjbGspOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUZfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTZfU1lTQ0xLX0VOQSwgb2xkKTsKKworCXdtODk5Ni0+c3lzY2xrX3NyYyA9IGNsa19pZDsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgX2ZsbF9kaXYgeworCXUxNiBmbGxfZnJhdGlvOworCXUxNiBmbGxfb3V0ZGl2OworCXUxNiBmbGxfcmVmY2xrX2RpdjsKKwl1MTYgZmxsX2xvb3BfZ2FpbjsKKwl1MTYgZmxsX3JlZl9mcmVxOworCXUxNiBuOworCXUxNiB0aGV0YTsKKwl1MTYgbGFtYmRhOworfTsKKworc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IG1pbjsKKwl1bnNpZ25lZCBpbnQgbWF4OworCXUxNiBmbGxfZnJhdGlvOworCWludCByYXRpbzsKK30gZmxsX2ZyYXRpb3NbXSA9IHsKKwl7ICAgICAgIDAsICAgIDY0MDAwLCA0LCAxNiB9LAorCXsgICA2NDAwMCwgICAxMjgwMDAsIDMsICA4IH0sCisJeyAgMTI4MDAwLCAgIDI1NjAwMCwgMiwgIDQgfSwKKwl7ICAyNTYwMDAsICAxMDAwMDAwLCAxLCAgMiB9LAorCXsgMTAwMDAwMCwgMTM1MDAwMDAsIDAsICAxIH0sCit9OworCitzdGF0aWMgaW50IGZsbF9mYWN0b3JzKHN0cnVjdCBfZmxsX2RpdiAqZmxsX2RpdiwgdW5zaWduZWQgaW50IEZyZWYsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwl1bnNpZ25lZCBpbnQgdGFyZ2V0OworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGZyYXRpbywgZ2NkX2ZsbDsKKwlpbnQgaTsKKworCS8qIEZyZWYgbXVzdCBiZSA8PTEzLjVNSHogKi8KKwlkaXYgPSAxOworCWZsbF9kaXYtPmZsbF9yZWZjbGtfZGl2ID0gMDsKKwl3aGlsZSAoKEZyZWYgLyBkaXYpID4gMTM1MDAwMDApIHsKKwkJZGl2ICo9IDI7CisJCWZsbF9kaXYtPmZsbF9yZWZjbGtfZGl2Kys7CisKKwkJaWYgKGRpdiA+IDgpIHsKKwkJCXByX2VycigiQ2FuJ3Qgc2NhbGUgJWRNSHogaW5wdXQgZG93biB0byA8PTEzLjVNSHpcbiIsCisJCQkgICAgICAgRnJlZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJGTEwgRnJlZj0ldSBGb3V0PSV1XG4iLCBGcmVmLCBGb3V0KTsKKworCS8qIEFwcGx5IHRoZSBkaXZpc2lvbiBmb3Igb3VyIHJlbWFpbmluZyBjYWxjdWxhdGlvbnMgKi8KKwlGcmVmIC89IGRpdjsKKworCWlmIChGcmVmID49IDMwMDAwMDApCisJCWZsbF9kaXYtPmZsbF9sb29wX2dhaW4gPSA1OworCWVsc2UKKwkJZmxsX2Rpdi0+ZmxsX2xvb3BfZ2FpbiA9IDA7CisKKwlpZiAoRnJlZiA+PSA0ODAwMCkKKwkJZmxsX2Rpdi0+ZmxsX3JlZl9mcmVxID0gMDsKKwllbHNlCisJCWZsbF9kaXYtPmZsbF9yZWZfZnJlcSA9IDE7CisKKwkvKiBGdmNvIHNob3VsZCBiZSA5MC0xMDBNSHo7IGRvbid0IGNoZWNrIHRoZSB1cHBlciBib3VuZCAqLworCWRpdiA9IDI7CisJd2hpbGUgKEZvdXQgKiBkaXYgPCA5MDAwMDAwMCkgeworCQlkaXYrKzsKKwkJaWYgKGRpdiA+IDY0KSB7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9PVVRESVYgZm9yIEZvdXQ9JXVIelxuIiwKKwkJCSAgICAgICBGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRhcmdldCA9IEZvdXQgKiBkaXY7CisJZmxsX2Rpdi0+ZmxsX291dGRpdiA9IGRpdiAtIDE7CisKKwlwcl9kZWJ1ZygiRkxMIEZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKKworCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKKwkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CisJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKKwkJCWZyYXRpbyA9IGZsbF9mcmF0aW9zW2ldLnJhdGlvOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShmbGxfZnJhdGlvcykpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfRlJBVElPIGZvciBGcmVmPSV1SHpcbiIsIEZyZWYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmbGxfZGl2LT5uID0gdGFyZ2V0IC8gKGZyYXRpbyAqIEZyZWYpOworCisJaWYgKHRhcmdldCAlIEZyZWYgPT0gMCkgeworCQlmbGxfZGl2LT50aGV0YSA9IDA7CisJCWZsbF9kaXYtPmxhbWJkYSA9IDA7CisJfSBlbHNlIHsKKwkJZ2NkX2ZsbCA9IGdjZCh0YXJnZXQsIGZyYXRpbyAqIEZyZWYpOworCisJCWZsbF9kaXYtPnRoZXRhID0gKHRhcmdldCAtIChmbGxfZGl2LT5uICogZnJhdGlvICogRnJlZikpCisJCQkvIGdjZF9mbGw7CisJCWZsbF9kaXYtPmxhbWJkYSA9IChmcmF0aW8gKiBGcmVmKSAvIGdjZF9mbGw7CisJfQorCisJcHJfZGVidWcoIkZMTCBOPSV4IFRIRVRBPSV4IExBTUJEQT0leFxuIiwKKwkJIGZsbF9kaXYtPm4sIGZsbF9kaXYtPnRoZXRhLCBmbGxfZGl2LT5sYW1iZGEpOworCXByX2RlYnVnKCJGTExfRlJBVElPPSV4IEZMTF9PVVRESVY9JXggRkxMX1JFRkNMS19ESVY9JXhcbiIsCisJCSBmbGxfZGl2LT5mbGxfZnJhdGlvLCBmbGxfZGl2LT5mbGxfb3V0ZGl2LAorCQkgZmxsX2Rpdi0+ZmxsX3JlZmNsa19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X3NldF9mbGwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZmxsX2lkLCBpbnQgc291cmNlLAorCQkJICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChjb2RlYy0+ZGV2KTsKKwlzdHJ1Y3QgX2ZsbF9kaXYgZmxsX2RpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCwgcmVnOworCisJLyogQW55IGNoYW5nZT8gKi8KKwlpZiAoc291cmNlID09IHdtODk5Ni0+ZmxsX3NyYyAmJiBGcmVmID09IHdtODk5Ni0+ZmxsX2ZyZWYgJiYKKwkgICAgRm91dCA9PSB3bTg5OTYtPmZsbF9mb3V0KQorCQlyZXR1cm4gMDsKKworCWlmIChGb3V0ID09IDApIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGRpc2FibGVkXG4iKTsKKworCQl3bTg5OTYtPmZsbF9mcmVmID0gMDsKKwkJd204OTk2LT5mbGxfZm91dCA9IDA7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0ZMTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODk5Nl9GTExfRU5BLCAwKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSBmbGxfZmFjdG9ycygmZmxsX2RpdiwgRnJlZiwgRm91dCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFdNODk5Nl9GTExfTUNMSzE6CisJCXJlZyA9IDA7CisJCWJyZWFrOworCWNhc2UgV004OTk2X0ZMTF9NQ0xLMjoKKwkJcmVnID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTZfRkxMX0RBQ0xSQ0xLMToKKwkJcmVnID0gMjsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTZfRkxMX0JDTEsxOgorCQlyZWcgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEZMTCBzb3VyY2UgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZyB8PSBmbGxfZGl2LmZsbF9yZWZjbGtfZGl2IDw8IFdNODk5Nl9GTExfUkVGQ0xLX0RJVl9TSElGVDsKKwlyZWcgfD0gZmxsX2Rpdi5mbGxfcmVmX2ZyZXEgPDwgV004OTk2X0ZMTF9SRUZfRlJFUV9TSElGVDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9GTExfQ09OVFJPTF81LAorCQkJICAgIFdNODk5Nl9GTExfUkVGQ0xLX0RJVl9NQVNLIHwgV004OTk2X0ZMTF9SRUZfRlJFUSB8CisJCQkgICAgV004OTk2X0ZMTF9SRUZDTEtfU1JDX01BU0ssIHJlZyk7CisKKwlyZWcgPSAwOworCWlmIChmbGxfZGl2LnRoZXRhIHx8IGZsbF9kaXYubGFtYmRhKQorCQlyZWcgfD0gV004OTk2X0ZMTF9FRlNfRU5BIHwgKDMgPDwgV004OTk2X0ZMTF9MRlNSX1NFTF9TSElGVCk7CisJZWxzZQorCQlyZWcgfD0gMSA8PCBXTTg5OTZfRkxMX0xGU1JfU0VMX1NISUZUOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5Nl9GTExfRUZTXzIsIHJlZyk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfRkxMX0NPTlRST0xfMiwKKwkJCSAgICBXTTg5OTZfRkxMX09VVERJVl9NQVNLIHwKKwkJCSAgICBXTTg5OTZfRkxMX0ZSQVRJT19NQVNLLAorCQkJICAgIChmbGxfZGl2LmZsbF9vdXRkaXYgPDwgV004OTk2X0ZMTF9PVVRESVZfU0hJRlQpIHwKKwkJCSAgICAoZmxsX2Rpdi5mbGxfZnJhdGlvKSk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTZfRkxMX0NPTlRST0xfMywgZmxsX2Rpdi50aGV0YSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfRkxMX0NPTlRST0xfNCwKKwkJCSAgICBXTTg5OTZfRkxMX05fTUFTSyB8IFdNODk5Nl9GTExfTE9PUF9HQUlOX01BU0ssCisJCQkgICAgKGZsbF9kaXYubiA8PCBXTTg5OTZfRkxMX05fU0hJRlQpIHwKKwkJCSAgICBmbGxfZGl2LmZsbF9sb29wX2dhaW4pOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTk2X0ZMTF9FRlNfMSwgZmxsX2Rpdi5sYW1iZGEpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgY29tcGxldGlvbnMgKGVnLCBmcm9tIGZhaWxlZCBzdGFydHVwcykgKi8KKwl0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmd204OTk2LT5mbGxfbG9jayk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5OTZfRkxMX0VOQSwgV004OTk2X0ZMTF9FTkEpOworCisJLyogVGhlIEZMTCBzdXBwb3J0cyBsaXZlIHJlY29uZmlndXJhdGlvbiAtIGtpY2sgdGhhdCBpbiBjYXNlIHdlIHdlcmUKKwkgKiBhbHJlYWR5IGVuYWJsZWQuCisJICovCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTk2X0ZMTF9DT05UUk9MXzYsIFdNODk5Nl9GTExfU1dJVENIX0NMSyk7CisKKwkvKiBXYWl0IGZvciB0aGUgRkxMIHRvIGxvY2ssIHVzaW5nIHRoZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUgKi8KKwlpZiAoRnJlZiA+IDEwMDAwMDApCisJCXRpbWVvdXQgPSB1c2Vjc190b19qaWZmaWVzKDMwMCk7CisJZWxzZQorCQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyKTsKKworCS8qIEFsbG93IHN1YnN0YW50aWFsbHkgbG9uZ2VyIGlmIHdlJ3ZlIGFjdHVhbGx5IGdvdCB0aGUgSVJRICovCisJaWYgKGkyYy0+aXJxKQorCQl0aW1lb3V0ICo9IDEwMDA7CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndtODk5Ni0+ZmxsX2xvY2ssIHRpbWVvdXQpOworCisJaWYgKHJldCA9PSAwICYmIGkyYy0+aXJxKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBGTExcbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IDA7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGNvbmZpZ3VyZWQgZm9yICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOworCisJd204OTk2LT5mbGxfZnJlZiA9IEZyZWY7CisJd204OTk2LT5mbGxfZm91dCA9IEZvdXQ7CisJd204OTk2LT5mbGxfc3JjID0gc291cmNlOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19HUElPTElCCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg5OTZfcHJpdiAqZ3Bpb190b193bTg5OTYoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTg5OTZfcHJpdiwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIHZvaWQgd204OTk2X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gZ3Bpb190b193bTg5OTYoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTk2LT5jb2RlYzsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9HUElPXzEgKyBvZmZzZXQsCisJCQkgICAgV004OTk2X0dQMV9MVkwsICEhdmFsdWUgPDwgV004OTk2X0dQMV9MVkxfU0hJRlQpOworfQorCitzdGF0aWMgaW50IHdtODk5Nl9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gZ3Bpb190b193bTg5OTYoY2hpcCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd204OTk2LT5jb2RlYzsKKwlpbnQgdmFsOworCisJdmFsID0gKDEgPDwgV004OTk2X0dQMV9GTl9TSElGVCkgfCAoISF2YWx1ZSA8PCBXTTg5OTZfR1AxX0xWTF9TSElGVCk7CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0dQSU9fMSArIG9mZnNldCwKKwkJCQkgICBXTTg5OTZfR1AxX0ZOX01BU0sgfCBXTTg5OTZfR1AxX0RJUiB8CisJCQkJICAgV004OTk2X0dQMV9MVkwsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk2X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IGdwaW9fdG9fd204OTk2KGNoaXApOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdtODk5Ni0+Y29kZWM7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0dQSU9fMSArIG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gKHJldCAmIFdNODk5Nl9HUDFfTFZMKSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODk5Nl9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBncGlvX3RvX3dtODk5NihjaGlwKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3bTg5OTYtPmNvZGVjOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9HUElPXzEgKyBvZmZzZXQsCisJCQkJICAgV004OTk2X0dQMV9GTl9NQVNLIHwgV004OTk2X0dQMV9ESVIsCisJCQkJICAgKDEgPDwgV004OTk2X0dQMV9GTl9TSElGVCkgfAorCQkJCSAgICgxIDw8IFdNODk5Nl9HUDFfRElSX1NISUZUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHdtODk5Nl90ZW1wbGF0ZV9jaGlwID0geworCS5sYWJlbAkJCT0gIndtODk5NiIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHdtODk5Nl9ncGlvX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gd204OTk2X2dwaW9fc2V0LAorCS5kaXJlY3Rpb25faW5wdXQJPSB3bTg5OTZfZ3Bpb19kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gd204OTk2X2dwaW9fZ2V0LAorCS5jYW5fc2xlZXAJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9pbml0X2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXdtODk5Ni0+Z3Bpb19jaGlwID0gd204OTk2X3RlbXBsYXRlX2NoaXA7CisJd204OTk2LT5ncGlvX2NoaXAubmdwaW8gPSA1OworCXdtODk5Ni0+Z3Bpb19jaGlwLmRldiA9IGNvZGVjLT5kZXY7CisKKwlpZiAod204OTk2LT5wZGF0YS5ncGlvX2Jhc2UpCisJCXdtODk5Ni0+Z3Bpb19jaGlwLmJhc2UgPSB3bTg5OTYtPnBkYXRhLmdwaW9fYmFzZTsKKwllbHNlCisJCXdtODk5Ni0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmd204OTk2LT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBHUElPczogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204OTk2LT5ncGlvX2NoaXApOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSBHUElPczogJWRcbiIsIHJldCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgd204OTk2X2luaXRfZ3BpbyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9mcmVlX2dwaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworfQorI2VuZGlmCisKKy8qKgorICogd204OTk2X2RldGVjdCAtIEVuYWJsZSBkZWZhdWx0IFdNODk5NiBqYWNrIGRldGVjdGlvbgorICoKKyAqIFRoZSBXTTg5OTYgaGFzIGFkdmFuY2VkIGFjY2Vzc29yeSBkZXRlY3Rpb24gc3VwcG9ydCBmb3IgaGVhZHNldHMuCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpbnRlZ3JhdGVzCisgKiB0aGUgbWFqb3JpdHkgb2YgdGhpcyBmdW5jdGlvbmFsaXR5IHdpdGggbWluaW1hbCB1c2VyIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyB3aWxsIGRldGVjdCBoZWFkc2V0LCBoZWFkcGhvbmUgYW5kIHNob3J0IGNpcmN1aXQgYnV0dG9uIGFuZAorICogd2lsbCBhbHNvIGRldGVjdCBpbnZlcnRlZCBtaWNyb3Bob25lIGdyb3VuZCBjb25uZWN0aW9ucyBhbmQgdXBkYXRlCisgKiB0aGUgcG9sYXJpdHkgb2YgdGhlIGNvbm5lY3Rpb25zLgorICovCitpbnQgd204OTk2X2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssCisJCSAgd204OTk2X3BvbGFyaXR5X2ZuIHBvbGFyaXR5X2NiKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl3bTg5OTYtPmphY2sgPSBqYWNrOworCXdtODk5Ni0+ZGV0ZWN0aW5nID0gdHJ1ZTsKKwl3bTg5OTYtPnBvbGFyaXR5X2NiID0gcG9sYXJpdHlfY2I7CisKKwlpZiAod204OTk2LT5wb2xhcml0eV9jYikKKwkJd204OTk2LT5wb2xhcml0eV9jYihjb2RlYywgMCk7CisKKwkvKiBDbGVhciBkaXNjYXJnZSB0byBhdm9pZCBub2lzZSBkdXJpbmcgZGV0ZWN0aW9uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X01JQ0JJQVNfMSwKKwkJCSAgICBXTTg5OTZfTUlDQjFfRElTQ0gsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9NSUNCSUFTXzIsCisJCQkgICAgV004OTk2X01JQ0IyX0RJU0NILCAwKTsKKworCS8qIExETzIgcG93ZXJzIHRoZSBtaWNyb3Bob25lcywgU1lTQ0xLIGNsb2NrcyBkZXRlY3Rpb24gKi8KKwlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbigmY29kZWMtPmRhcG0sICJMRE8yIik7CisJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiU1lTQ0xLIik7CisKKwkvKiBXZSBzdGFydCBvZmYganVzdCBlbmFibGluZyBtaWNyb3Bob25lIGRldGVjdGlvbiAtIGV2ZW4gYQorCSAqIHBsYWluIGhlYWRwaG9uZSB3aWxsIHRyaWdnZXIgZGV0ZWN0aW9uLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9NSUNfREVURUNUXzEsCisJCQkgICAgV004OTk2X01JQ0RfRU5BLCBXTTg5OTZfTUlDRF9FTkEpOworCisJLyogU2xvd2VzdCBkZXRlY3Rpb24gcmF0ZSwgZ2l2ZXMgZGVib3VuY2UgZm9yIGluaXRpYWwgZGV0ZWN0aW9uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X01JQ19ERVRFQ1RfMSwKKwkJCSAgICBXTTg5OTZfTUlDRF9SQVRFX01BU0ssCisJCQkgICAgV004OTk2X01JQ0RfUkFURV9NQVNLKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCB3ZSdyZSBvZmYgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18yX01BU0ssCisJCQkgICAgV004OTk2X0lNX01JQ0RfRUlOVCwgMCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5Nl9kZXRlY3QpOworCitzdGF0aWMgdm9pZCB3bTg5OTZfbWljZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgdmFsLCByZWc7CisKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5Nl9NSUNfREVURUNUXzMpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljcm9waG9uZSBldmVudDogJXhcbiIsIHZhbCk7CisKKwlpZiAoISh2YWwgJiBXTTg5OTZfTUlDRF9WQUxJRCkpIHsKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0aW9uIHN0YXRlIGludmFsaWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTm8gYWNjZXNzb3J5LCByZXNldCBldmVyeXRoaW5nIGFuZCByZXBvcnQgcmVtb3ZhbCAqLworCWlmICghKHZhbCAmIFdNODk5Nl9NSUNEX1NUUykpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiSmFjayByZW1vdmFsIGRldGVjdGVkXG4iKTsKKwkJd204OTk2LT5qYWNrX21pYyA9IGZhbHNlOworCQl3bTg5OTYtPmRldGVjdGluZyA9IHRydWU7CisJCXNuZF9zb2NfamFja19yZXBvcnQod204OTk2LT5qYWNrLCAwLAorCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfQlROXzApOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfTUlDX0RFVEVDVF8xLAorCQkJCSAgICBXTTg5OTZfTUlDRF9SQVRFX01BU0ssCisJCQkJICAgIFdNODk5Nl9NSUNEX1JBVEVfTUFTSyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGUgbWVhc3VyZW1lbnQgaXMgdmVyeSBoaWdoIHdlJ3ZlIGdvdCBhIG1pY3JvcGhvbmUgYnV0CisJICogZG8gYSBsaXR0bGUgZGVib3VuY2UgdG8gYWNjb3VudCBmb3IgbWVjaGFuaWNhbCBpc3N1ZXMuCisJICovCisJaWYgKHZhbCAmIDB4NDAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIk1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOworCQlzbmRfc29jX2phY2tfcmVwb3J0KHdtODk5Ni0+amFjaywgU05EX0pBQ0tfSEVBRFNFVCwKKwkJCQkgICAgU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8wKTsKKwkJd204OTk2LT5qYWNrX21pYyA9IHRydWU7CisJCXdtODk5Ni0+ZGV0ZWN0aW5nID0gZmFsc2U7CisKKwkJLyogSW5jcmVhc2UgcG9sbCByYXRlIHRvIGdpdmUgYmV0dGVyIHJlc3BvbnNpdmVuZXNzCisJCSAqIGZvciBidXR0b25zICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9NSUNfREVURUNUXzEsCisJCQkJICAgIFdNODk5Nl9NSUNEX1JBVEVfTUFTSywKKwkJCQkgICAgNSA8PCBXTTg5OTZfTUlDRF9SQVRFX1NISUZUKTsKKwl9CisKKwkvKiBJZiB3ZSBkZXRlY3RlZCBhIGxvd2VyIGltcGVkZW5jZSBkdXJpbmcgaW5pdGlhbCBzdGFydHVwCisJICogdGhlbiB3ZSBwcm9iYWJseSBoYXZlIHRoZSB3cm9uZyBwb2xhcml0eSwgZmxpcCBpdC4gIERvbid0CisJICogZG8gdGhpcyBmb3IgdGhlIGxvd2VzdCBpbXBlZGVuY2VzIHRvIHNwZWVkIHVwIGRldGVjdGlvbiBvZgorCSAqIHBsYWluIGhlYWRwaG9uZXMuCisJICovCisJaWYgKHdtODk5Ni0+ZGV0ZWN0aW5nICYmICh2YWwgJiAweDNmMCkpIHsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTZfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzIpOworCQlyZWcgXj0gV004OTk2X0hQT1VUMUZCX1NSQyB8IFdNODk5Nl9NSUNEX1NSQyB8CisJCQlXTTg5OTZfTUlDRF9CSUFTX1NSQzsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yLAorCQkJCSAgICBXTTg5OTZfSFBPVVQxRkJfU1JDIHwgV004OTk2X01JQ0RfU1JDIHwKKwkJCQkgICAgV004OTk2X01JQ0RfQklBU19TUkMsIHJlZyk7CisKKwkJaWYgKHdtODk5Ni0+cG9sYXJpdHlfY2IpCisJCQl3bTg5OTYtPnBvbGFyaXR5X2NiKGNvZGVjLAorCQkJCQkgICAgKHJlZyAmIFdNODk5Nl9NSUNEX1NSQykgIT0gMCk7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IG1pY3JvcGhvbmUgcG9sYXJpdHkgdG8gJWRcbiIsCisJCQkocmVnICYgV004OTk2X01JQ0RfU1JDKSAhPSAwKTsKKworCQlyZXR1cm47CisJfQorCisJLyogRG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBidXR0b25zLCBqdXN0IHJlcG9ydCBhbnkgbG93CisJICogaW1wZWRlbmNlIGFzIEJUTl8wLgorCSAqLworCWlmICh2YWwgJiAweDNmYykgeworCQlpZiAod204OTk2LT5qYWNrX21pYykgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTWljIGJ1dHRvbiBkZXRlY3RlZFxuIik7CisJCQlzbmRfc29jX2phY2tfcmVwb3J0KHdtODk5Ni0+amFjaywKKwkJCQkJICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMCwKKwkJCQkJICAgIFNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19CVE5fMCk7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJIZWFkcGhvbmUgZGV0ZWN0ZWRcbiIpOworCQkJc25kX3NvY19qYWNrX3JlcG9ydCh3bTg5OTYtPmphY2ssCisJCQkJCSAgICBTTkRfSkFDS19IRUFEUEhPTkUsCisJCQkJCSAgICBTTkRfSkFDS19IRUFEU0VUIHwKKwkJCQkJICAgIFNORF9KQUNLX0JUTl8wKTsKKworCQkJLyogSW5jcmVhc2UgdGhlIGRldGVjdGlvbiByYXRlIGEgYml0IGZvcgorCQkJICogcmVzcG9uc2l2ZW5lc3MuCisJCQkgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9NSUNfREVURUNUXzEsCisJCQkJCSAgICBXTTg5OTZfTUlDRF9SQVRFX01BU0ssCisJCQkJCSAgICA3IDw8IFdNODk5Nl9NSUNEX1JBVEVfU0hJRlQpOworCisJCQl3bTg5OTYtPmRldGVjdGluZyA9IGZhbHNlOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204OTk2X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhdGE7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgaXJxX3ZhbDsKKworCWlycV92YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5Nl9JTlRFUlJVUFRfU1RBVFVTXzIpOworCWlmIChpcnFfdmFsIDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJUlEgc3RhdHVzOiAlZFxuIiwKKwkJCWlycV92YWwpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWlycV92YWwgJj0gfnNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5Nl9JTlRFUlJVUFRfU1RBVFVTXzIsIGlycV92YWwpOworCisJaWYgKGlycV92YWwgJiAoV004OTk2X0RDU19ET05FXzAxX0VJTlQgfCBXTTg5OTZfRENTX0RPTkVfMjNfRUlOVCkpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiREMgc2Vydm8gSVJRXG4iKTsKKwkJY29tcGxldGUoJndtODk5Ni0+ZGNzX2RvbmUpOworCX0KKworCWlmIChpcnFfdmFsICYgV004OTk2X0ZJRk9TX0VSUl9FSU5UKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJEaWdpdGFsIGNvcmUgRklGTyBlcnJvclxuIik7CisKKwlpZiAoaXJxX3ZhbCAmIFdNODk5Nl9GTExfTE9DS19FSU5UKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBsb2NrZWRcbiIpOworCQljb21wbGV0ZSgmd204OTk2LT5mbGxfbG9jayk7CisJfQorCisJaWYgKGlycV92YWwgJiBXTTg5OTZfTUlDRF9FSU5UKQorCQl3bTg5OTZfbWljZChjb2RlYyk7CisKKwlpZiAoaXJxX3ZhbCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCWVsc2UKKwkJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204OTk2X2VkZ2VfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisJaXJxcmV0dXJuX3QgdmFsOworCisJZG8geworCQl2YWwgPSB3bTg5OTZfaXJxKGlycSwgZGF0YSk7CisJCWlmICh2YWwgIT0gSVJRX05PTkUpCisJCQlyZXQgPSB2YWw7CisJfSB3aGlsZSAodmFsICE9IElSUV9OT05FKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5Nl9yZXR1bmVfbW9iaWxlX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCB3bTg5OTZfcGRhdGEgKnBkYXRhID0gJndtODk5Ni0+cGRhdGE7CisKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQlTT0NfRU5VTV9FWFQoIkRTUDEgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5Ni0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTZfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk2X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCQlTT0NfRU5VTV9FWFQoIkRTUDIgRVEgTW9kZSIsCisJCQkgICAgIHdtODk5Ni0+cmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTZfZ2V0X3JldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk2X3B1dF9yZXR1bmVfbW9iaWxlX2VudW0pLAorCX07CisJaW50IHJldCwgaSwgajsKKwljb25zdCBjaGFyICoqdDsKKworCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSBidXQgdGhlIG51bWJlcgorCSAqIG9mIHRleHRzIGlzIGxpa2VseSB0byBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyYXRpb25zIGR1ZSB0byB0aGUgc2FtcGxlIHJhdGUgZGVwZW5kZW5jeSBvZiB0aGUKKwkgKiBjb25maWd1cmF0aW9ucy4gKi8KKwl3bTg5OTYtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzID0gMDsKKwl3bTg5OTYtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3bTg5OTYtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOyBqKyspIHsKKwkJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJCSAgIHdtODk5Ni0+cmV0dW5lX21vYmlsZV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IHdtODk5Ni0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCQljb250aW51ZTsKKworCQkvKiBFeHBhbmQgdGhlIGFycmF5Li4uICovCisJCXQgPSBrcmVhbGxvYyh3bTg5OTYtPnJldHVuZV9tb2JpbGVfdGV4dHMsCisJCQkgICAgIHNpemVvZihjaGFyICopICogCisJCQkgICAgICh3bTg5OTYtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogLi4uc3RvcmUgdGhlIG5ldyBlbnRyeS4uLiAqLworCQl0W3dtODk5Ni0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHNdID0gCisJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWU7CisKKwkJLyogLi4uYW5kIHJlbWVtYmVyIHRoZSBuZXcgdmVyc2lvbi4gKi8KKwkJd204OTk2LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cysrOworCQl3bTg5OTYtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSB0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkFsbG9jYXRlZCAlZCB1bmlxdWUgUmVUdW5lIE1vYmlsZSBuYW1lc1xuIiwKKwkJd204OTk2LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyk7CisKKwl3bTg5OTYtPnJldHVuZV9tb2JpbGVfZW51bS5tYXggPSB3bTg5OTYtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCXdtODk5Ni0+cmV0dW5lX21vYmlsZV9lbnVtLnRleHRzID0gd204OTk2LT5yZXR1bmVfbW9iaWxlX3RleHRzOworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGNvbnRyb2xzLCBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkiRmFpbGVkIHRvIGFkZCBSZVR1bmUgTW9iaWxlIGNvbnRyb2xzOiAlZFxuIiwgcmV0KTsKK30KKworc3RhdGljIGludCB3bTg5OTZfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChjb2RlYy0+ZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CisJaW50IGksIGlycV9mbGFnczsKKworCXdtODk5Ni0+Y29kZWMgPSBjb2RlYzsKKworCWluaXRfY29tcGxldGlvbigmd204OTk2LT5kY3NfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZ3bTg5OTYtPmZsbF9sb2NrKTsKKworCWRhcG0tPmlkbGVfYmlhc19vZmYgPSB0cnVlOworCWRhcG0tPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDE2LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpOyBpKyspCisJCXdtODk5Ni0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTk2X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLAorCQkJCSB3bTg5OTYtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5OTYtPmRpc2FibGVfbmJbMF0ubm90aWZpZXJfY2FsbCA9IHdtODk5Nl9yZWd1bGF0b3JfZXZlbnRfMDsKKwl3bTg5OTYtPmRpc2FibGVfbmJbMV0ubm90aWZpZXJfY2FsbCA9IHdtODk5Nl9yZWd1bGF0b3JfZXZlbnRfMTsKKwl3bTg5OTYtPmRpc2FibGVfbmJbMl0ubm90aWZpZXJfY2FsbCA9IHdtODk5Nl9yZWd1bGF0b3JfZXZlbnRfMjsKKwl3bTg5OTYtPmRpc2FibGVfbmJbM10ubm90aWZpZXJfY2FsbCA9IHdtODk5Nl9yZWd1bGF0b3JfZXZlbnRfMzsKKworCS8qIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBtb3ZlZCBpbnRvIHRoZSByZWd1bGF0b3IgY29yZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpOyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9yX3JlZ2lzdGVyX25vdGlmaWVyKHdtODk5Ni0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJCQkgICZ3bTg5OTYtPmRpc2FibGVfbmJbaV0pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciBub3RpZmllcjogJWRcbiIsCisJCQkJcmV0KTsKKwkJfQorCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5OTYtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlpZiAod204OTk2LT5wZGF0YS5sZG9fZW5hID49IDApIHsKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAod204OTk2LT5wZGF0YS5sZG9fZW5hLCAxKTsKKwkJbXNsZWVwKDUpOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X1NPRlRXQVJFX1JFU0VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRCByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJaWYgKHJldCAhPSAweDg5MTUpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNODk5NiwgSUQgJXhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5Nl9DSElQX1JFVklTSU9OKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBkZXZpY2UgcmV2aXNpb246ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwkKKwlkZXZfaW5mbyhjb2RlYy0+ZGV2LCAicmV2aXNpb24gJWNcbiIsCisJCSAocmV0ICYgV004OTk2X0NISVBfUkVWX01BU0spICsgJ0EnKTsKKworCWlmICh3bTg5OTYtPnBkYXRhLmxkb19lbmEgPj0gMCkgeworCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5OTYtPnBkYXRhLmxkb19lbmEsIDApOworCX0gZWxzZSB7CisJCXJldCA9IHdtODk5Nl9yZXNldChjb2RlYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQkJZ290byBlcnJfZW5hYmxlOworCQl9CisJfQorCisJY29kZWMtPmNhY2hlX29ubHkgPSB0cnVlOworCisJLyogQXBwbHkgcGxhdGZvcm0gZGF0YSBzZXR0aW5ncyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9MSU5FX0lOUFVUX0NPTlRST0wsCisJCQkgICAgV004OTk2X0lOTF9NT0RFX01BU0sgfCBXTTg5OTZfSU5SX01PREVfTUFTSywKKwkJCSAgICB3bTg5OTYtPnBkYXRhLmlubF9tb2RlIDw8IFdNODk5Nl9JTkxfTU9ERV9TSElGVCB8CisJCQkgICAgd204OTk2LT5wZGF0YS5pbnJfbW9kZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5OTYtPnBkYXRhLmdwaW9fZGVmYXVsdCk7IGkrKykgeworCQlpZiAoIXdtODk5Ni0+cGRhdGEuZ3Bpb19kZWZhdWx0W2ldKQorCQkJY29udGludWU7CisKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTk2X0dQSU9fMSArIGksCisJCQkgICAgICB3bTg5OTYtPnBkYXRhLmdwaW9fZGVmYXVsdFtpXSAmIDB4ZmZmZik7CisJfQorCisJaWYgKHdtODk5Ni0+cGRhdGEuc3BrbXV0ZV9zZXEpCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFLAorCQkJCSAgICBXTTg5OTZfU1BLX01VVEVfRU5ESUFOIHwKKwkJCQkgICAgV004OTk2X1NQS19NVVRFX1NFUTFfTUFTSywKKwkJCQkgICAgd204OTk2LT5wZGF0YS5zcGttdXRlX3NlcSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUNDRVNTT1JZX0RFVEVDVF9NT0RFXzIsCisJCQkgICAgV004OTk2X01JQ0RfQklBU19TUkMgfCBXTTg5OTZfSFBPVVQxRkJfU1JDIHwKKwkJCSAgICBXTTg5OTZfTUlDRF9TUkMsIHdtODk5Ni0+cGRhdGEubWljZGV0X2RlZik7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfTEVGVF9MSU5FX0lOUFVUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfSU4xX1ZVLCBXTTg5OTZfSU4xX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfUklHSFRfTElORV9JTlBVVF9WT0xVTUUsCisJCQkgICAgV004OTk2X0lOMV9WVSwgV004OTk2X0lOMV9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfREFDMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfREFDMV9WVSwgV004OTk2X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9EQUMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfREFDMV9WVSwgV004OTk2X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9EQUMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EQUMyX1ZVLCBXTTg5OTZfREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0RBQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EQUMyX1ZVLCBXTTg5OTZfREFDMl9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfT1VUUFVUMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfREFDMV9WVSwgV004OTk2X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9PVVRQVVQxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfREFDMV9WVSwgV004OTk2X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9PVVRQVVQyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EQUMyX1ZVLCBXTTg5OTZfREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X09VVFBVVDJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EQUMyX1ZVLCBXTTg5OTZfREFDMl9WVSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfRFNQMV9UWF9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfRFNQMVRYX1ZVLCBXTTg5OTZfRFNQMVRYX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfRFNQMV9UWF9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk2X0RTUDFUWF9WVSwgV004OTk2X0RTUDFUWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0RTUDJfVFhfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk2X0RTUDJUWF9WVSwgV004OTk2X0RTUDJUWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0RTUDJfVFhfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EU1AyVFhfVlUsIFdNODk5Nl9EU1AyVFhfVlUpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0RTUDFfUlhfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk2X0RTUDFSWF9WVSwgV004OTk2X0RTUDFSWF9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0RTUDFfUlhfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EU1AxUlhfVlUsIFdNODk5Nl9EU1AxUlhfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9EU1AyX1JYX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5Nl9EU1AyUlhfVlUsIFdNODk5Nl9EU1AyUlhfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9EU1AyX1JYX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTZfRFNQMlJYX1ZVLCBXTTg5OTZfRFNQMlJYX1ZVKTsKKworCS8qIE5vIHN1cHBvcnQgY3VycmVudGx5IGZvciB0aGUgdW5kZXJjbG9ja2VkIFRETSBtb2RlcyBhbmQKKwkgKiBwaWNrIGEgZGVmYXVsdCBURE0gbGF5b3V0IHdpdGggZWFjaCBjaGFubmVsIHBhaXIgd29ya2luZyB3aXRoCisJICogc2xvdHMgMCBhbmQgMS4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMVJYX0NIQU4wX1NMT1RTX1NISUZUIHwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5OTZfQUlGMVJYX0NIQU4xX1NMT1RTX01BU0sgfAorCQkJICAgIFdNODk5Nl9BSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTk2X0FJRjFSWF9DSEFOMV9TTE9UU19TSElGVCB8IDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjFSWF9DSEFOMl9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYxUlhfQ0hBTjJfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMVJYX0NIQU4zX1NMT1RTX1NISUZUIHwgMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5OTZfQUlGMVJYX0NIQU40X1NMT1RTX01BU0sgfAorCQkJICAgIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTk2X0FJRjFSWF9DSEFONF9TTE9UU19TSElGVCB8IDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjFSWF9DSEFONV9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYxUlhfQ0hBTjVfU0xPVFNfU0hJRlQgfCAxKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYyUlhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjJSWF9DSEFOMF9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYyUlhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMlJYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYyUlhfQ0hBTjFfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjJSWF9DSEFOMV9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMlJYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMVRYX0NIQU4wX1NMT1RTX1NISUZUIHwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5OTZfQUlGMVRYX0NIQU4xX1NMT1RTX01BU0sgfAorCQkJICAgIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTk2X0FJRjFUWF9DSEFOMV9TTE9UU19TSElGVCB8IDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjFUWF9DSEFOMl9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYxVFhfQ0hBTjJfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMVRYX0NIQU4zX1NMT1RTX1NISUZUIHwgMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiwKKwkJCSAgICBXTTg5OTZfQUlGMVRYX0NIQU40X1NMT1RTX01BU0sgfAorCQkJICAgIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLLAorCQkJICAgIDEgPDwgV004OTk2X0FJRjFUWF9DSEFONF9TTE9UU19TSElGVCB8IDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjFUWF9DSEFONV9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYxVFhfQ0hBTjVfU0xPVFNfU0hJRlQgfCAxKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5Nl9BSUYyVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04sCisJCQkgICAgV004OTk2X0FJRjJUWF9DSEFOMF9TTE9UU19NQVNLIHwKKwkJCSAgICBXTTg5OTZfQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSywKKwkJCSAgICAxIDw8IFdNODk5Nl9BSUYyVFhfQ0hBTjBfU0xPVFNfU0hJRlQgfCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OLAorCQkJICAgIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU0xPVFNfTUFTSyB8CisJCQkgICAgV004OTk2X0FJRjJUWF9DSEFOMV9TVEFSVF9TTE9UX01BU0ssCisJCQkgICAgMSA8PCBXTTg5OTZfQUlGMVRYX0NIQU4xX1NMT1RTX1NISUZUIHwgMSk7CisKKwlpZiAod204OTk2LT5wZGF0YS5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQl3bTg5OTZfcmV0dW5lX21vYmlsZV9wZGF0YShjb2RlYyk7CisJZWxzZQorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTk2X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTZfZXFfY29udHJvbHMpKTsKKworCS8qIElmIHRoZSBUWCBMUkNMSyBwaW5zIGFyZSBub3QgaW4gTFJDTEsgbW9kZSBjb25maWd1cmUgdGhlCisJICogQUlGcyB0byBzb3VyY2UgdGhlaXIgY2xvY2tzIGZyb20gdGhlIFJYIExSQ0xLcy4KKwkgKi8KKwlpZiAoKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0dQSU9fMSkpKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMV9UWF9MUkNMS18yLAorCQkJCSAgICBXTTg5OTZfQUlGMVRYX0xSQ0xLX01PREUsCisJCQkJICAgIFdNODk5Nl9BSUYxVFhfTFJDTEtfTU9ERSk7CisKKwlpZiAoKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk2X0dQSU9fMikpKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfQUlGMl9UWF9MUkNMS18yLAorCQkJCSAgICBXTTg5OTZfQUlGMlRYX0xSQ0xLX01PREUsCisJCQkJICAgIFdNODk5Nl9BSUYyVFhfTFJDTEtfTU9ERSk7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTk2LT5zdXBwbGllcyksIHdtODk5Ni0+c3VwcGxpZXMpOworCisJd204OTk2X2luaXRfZ3Bpbyhjb2RlYyk7CisKKwlpZiAoaTJjLT5pcnEpIHsKKwkJaWYgKHdtODk5Ni0+cGRhdGEuaXJxX2ZsYWdzKQorCQkJaXJxX2ZsYWdzID0gd204OTk2LT5wZGF0YS5pcnFfZmxhZ3M7CisJCWVsc2UKKwkJCWlycV9mbGFncyA9IElSUUZfVFJJR0dFUl9MT1c7CisKKwkJaXJxX2ZsYWdzIHw9IElSUUZfT05FU0hPVDsKKworCQlpZiAoaXJxX2ZsYWdzICYgKElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORykpCisJCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpMmMtPmlycSwgTlVMTCwKKwkJCQkJCSAgIHdtODk5Nl9lZGdlX2lycSwKKwkJCQkJCSAgIGlycV9mbGFncywgIndtODk5NiIsIGNvZGVjKTsKKwkJZWxzZQorCQkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaTJjLT5pcnEsIE5VTEwsIHdtODk5Nl9pcnEsCisJCQkJCQkgICBpcnFfZmxhZ3MsICJ3bTg5OTYiLCBjb2RlYyk7CisKKwkJaWYgKHJldCA9PSAwKSB7CisJCQkvKiBVbm1hc2sgdGhlIGludGVycnVwdCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk2X0lOVEVSUlVQVF9DT05UUk9MLAorCQkJCQkgICAgV004OTk2X0lNX0lSUSwgMCk7CisKKwkJCS8qIEVuYWJsZSBlcnJvciByZXBvcnRpbmcgYW5kIERDIHNlcnZvIHN0YXR1cyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywKKwkJCQkJICAgIFdNODk5Nl9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTSywKKwkJCQkJICAgIFdNODk5Nl9JTV9EQ1NfRE9ORV8yM19FSU5UIHwKKwkJCQkJICAgIFdNODk5Nl9JTV9EQ1NfRE9ORV8wMV9FSU5UIHwKKwkJCQkJICAgIFdNODk5Nl9JTV9GTExfTE9DS19FSU5UIHwKKwkJCQkJICAgIFdNODk5Nl9JTV9GSUZPU19FUlJfRUlOVCwKKwkJCQkJICAgIDApOworCQl9IGVsc2UgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwKKwkJCQlyZXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJaWYgKHdtODk5Ni0+cGRhdGEubGRvX2VuYSA+PSAwKQorCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh3bTg5OTYtPnBkYXRhLmxkb19lbmEsIDApOworCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLCB3bTg5OTYtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpLCB3bTg5OTYtPnN1cHBsaWVzKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODk5Nl9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5OTZfcHJpdiAqd204OTk2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHRvX2kyY19jbGllbnQoY29kZWMtPmRldik7CisJaW50IGk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTZfSU5URVJSVVBUX0NPTlRST0wsCisJCQkgICAgV004OTk2X0lNX0lSUSwgV004OTk2X0lNX0lSUSk7CisKKwlpZiAoaTJjLT5pcnEpCisJCWZyZWVfaXJxKGkyYy0+aXJxLCBjb2RlYyk7CisKKwl3bTg5OTZfZnJlZV9ncGlvKGNvZGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5Ni0+c3VwcGxpZXMpOyBpKyspCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyX25vdGlmaWVyKHdtODk5Ni0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJCSAgICAgICZ3bTg5OTYtPmRpc2FibGVfbmJbaV0pOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5OTYtPnN1cHBsaWVzKSwgd204OTk2LT5zdXBwbGllcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3dtODk5NiA9IHsKKwkucHJvYmUgPQl3bTg5OTZfcHJvYmUsCisJLnJlbW92ZSA9CXdtODk5Nl9yZW1vdmUsCisJLnNldF9iaWFzX2xldmVsID0gd204OTk2X3NldF9iaWFzX2xldmVsLAorCS5zZXFfbm90aWZpZXIgPSB3bTg5OTZfc2VxX25vdGlmaWVyLAorCS5yZWdfY2FjaGVfc2l6ZSA9IFdNODk5Nl9NQVhfUkVHSVNURVIgKyAxLAorCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCisJLnJlZ19jYWNoZV9kZWZhdWx0ID0gd204OTk2X3JlZywKKwkudm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5OTZfdm9sYXRpbGVfcmVnaXN0ZXIsCisJLnJlYWRhYmxlX3JlZ2lzdGVyID0gd204OTk2X3JlYWRhYmxlX3JlZ2lzdGVyLAorCS5jb21wcmVzc190eXBlID0gU05EX1NPQ19SQlRSRUVfQ09NUFJFU1NJT04sCisJLmNvbnRyb2xzID0gd204OTk2X3NuZF9jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRSh3bTg5OTZfc25kX2NvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gd204OTk2X2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUod204OTk2X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gd204OTk2X2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHdtODk5Nl9kYXBtX3JvdXRlcyksCisJLnNldF9wbGwgPSB3bTg5OTZfc2V0X2ZsbCwKK307CisKKyNkZWZpbmUgV004OTk2X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfFwKKwkJICAgICAgU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKKyNkZWZpbmUgV004OTk2X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5OTZfZGFpX29wcyA9IHsKKwkuc2V0X2ZtdCA9IHdtODk5Nl9zZXRfZm10LAorCS5od19wYXJhbXMgPSB3bTg5OTZfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrID0gd204OTk2X3NldF9zeXNjbGssCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB3bTg5OTZfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJ3bTg5OTYtYWlmMSIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYxIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDYsCisJCQkucmF0ZXMgPSBXTTg5OTZfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5Nl9GT1JNQVRTLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCSAuc3RyZWFtX25hbWUgPSAiQUlGMSBDYXB0dXJlIiwKKwkJCSAuY2hhbm5lbHNfbWluID0gMSwKKwkJCSAuY2hhbm5lbHNfbWF4ID0gNiwKKwkJCSAucmF0ZXMgPSBXTTg5OTZfUkFURVMsCisJCQkgLmZvcm1hdHMgPSBXTTg5OTZfRk9STUFUUywKKwkJIH0sCisJCS5vcHMgPSAmd204OTk2X2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIndtODk5Ni1haWYyIiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjIgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5Nl9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk2X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJIC5zdHJlYW1fbmFtZSA9ICJBSUYyIENhcHR1cmUiLAorCQkJIC5jaGFubmVsc19taW4gPSAxLAorCQkJIC5jaGFubmVsc19tYXggPSAyLAorCQkJIC5yYXRlcyA9IFdNODk5Nl9SQVRFUywKKwkJCSAuZm9ybWF0cyA9IFdNODk5Nl9GT1JNQVRTLAorCQkgfSwKKwkJLm9wcyA9ICZ3bTg5OTZfZGFpX29wcywKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTk2X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NjsKKwlpbnQgcmV0OworCisJd204OTk2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk5Nl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODk5NiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk5Nik7CisKKwlpZiAoZGV2X2dldF9wbGF0ZGF0YSgmaTJjLT5kZXYpKQorCQltZW1jcHkoJndtODk5Ni0+cGRhdGEsIGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KSwKKwkJICAgICAgIHNpemVvZih3bTg5OTYtPnBkYXRhKSk7CisKKwlpZiAod204OTk2LT5wZGF0YS5sZG9fZW5hID4gMCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3Rfb25lKHdtODk5Ni0+cGRhdGEubGRvX2VuYSwKKwkJCQkgICAgICAgR1BJT0ZfT1VUX0lOSVRfTE9XLCAiV004OTk2IEVOQSIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPICVkOiAlZFxuIiwKKwkJCQl3bTg5OTYtPnBkYXRhLmxkb19lbmEsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoJmkyYy0+ZGV2LAorCQkJCSAgICAgJnNvY19jb2RlY19kZXZfd204OTk2LCB3bTg5OTZfZGFpLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5OTZfZGFpKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2dwaW87CisKKwlyZXR1cm4gcmV0OworCitlcnJfZ3BpbzoKKwlpZiAod204OTk2LT5wZGF0YS5sZG9fZW5hID4gMCkKKwkJZ3Bpb19mcmVlKHdtODk5Ni0+cGRhdGEubGRvX2VuYSk7CitlcnI6CisJa2ZyZWUod204OTk2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODk5Nl9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODk5Nl9wcml2ICp3bTg5OTYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYpOworCWlmICh3bTg5OTYtPnBkYXRhLmxkb19lbmEgPiAwKQorCQlncGlvX2ZyZWUod204OTk2LT5wZGF0YS5sZG9fZW5hKTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5OTZfaTJjX2lkW10gPSB7CisJeyAid204OTk2IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5OTZfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk5Nl9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODk5NiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTk2X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5OTZfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTk2X2kyY19pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODk5Nl9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5OTZfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIFdNODk5NiBJMkMgZHJpdmVyOiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHdtODk5Nl9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk5Nl9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJndtODk5Nl9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk5Nl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODk5NiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTYuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkZTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmgKQEAgLTAsMCArMSwzNzE3IEBACisvKgorICogd204OTk2LmggLSBXTTg5OTYgYXVkaW8gY29kZWMgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IDIwMTEgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfV004OTk2X0gKKyNkZWZpbmUgX1dNODk5Nl9ICisKKyNkZWZpbmUgV004OTk2X1NZU0NMS19NQ0xLMSAxCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfTUNMSzIgMgorI2RlZmluZSBXTTg5OTZfU1lTQ0xLX0ZMTCAgIDMKKworI2RlZmluZSBXTTg5OTZfRkxMX01DTEsxICAgICAgMQorI2RlZmluZSBXTTg5OTZfRkxMX01DTEsyICAgICAgMgorI2RlZmluZSBXTTg5OTZfRkxMX0RBQ0xSQ0xLMSAgMworI2RlZmluZSBXTTg5OTZfRkxMX0JDTEsxICAgICAgNAorCit0eXBlZGVmIHZvaWQgKCp3bTg5OTZfcG9sYXJpdHlfZm4pKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHBvbGFyaXR5KTsKKworaW50IHdtODk5Nl9kZXRlY3Qoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLAorCQkgIHdtODk5Nl9wb2xhcml0eV9mbiBwb2xhcml0eV9jYik7CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTk2X1NPRlRXQVJFX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNCAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNSAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNiAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfNyAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004OTk2X1BPV0VSX01BTkFHRU1FTlRfOCAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004OTk2X0xFRlRfTElORV9JTlBVVF9WT0xVTUUgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004OTk2X1JJR0hUX0xJTkVfSU5QVVRfVk9MVU1FICAgICAgICAgIDB4MTEKKyNkZWZpbmUgV004OTk2X0xJTkVfSU5QVVRfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004OTk2X0RBQzFfSFBPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004OTk2X0RBQzJfSFBPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgV004OTk2X0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgV004OTk2X0RBQzFfUklHSFRfVk9MVU1FICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgV004OTk2X0RBQzJfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MUEKKyNkZWZpbmUgV004OTk2X0RBQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAgICAgIDB4MUIKKyNkZWZpbmUgV004OTk2X09VVFBVVDFfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgV004OTk2X09VVFBVVDFfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4MUQKKyNkZWZpbmUgV004OTk2X09VVFBVVDJfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgV004OTk2X09VVFBVVDJfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgV004OTk2X01JQ0JJQVNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV004OTk2X01JQ0JJQVNfMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgV004OTk2X0xET18xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004OTk2X0xET18yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004OTk2X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8xICAgICAgICAgIDB4MzAKKyNkZWZpbmUgV004OTk2X0FDQ0VTU09SWV9ERVRFQ1RfTU9ERV8yICAgICAgICAgIDB4MzEKKyNkZWZpbmUgV004OTk2X0hFQURQSE9ORV9ERVRFQ1RfMSAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgV004OTk2X0hFQURQSE9ORV9ERVRFQ1RfMiAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgV004OTk2X01JQ19ERVRFQ1RfMSAgICAgICAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgV004OTk2X01JQ19ERVRFQ1RfMiAgICAgICAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgV004OTk2X01JQ19ERVRFQ1RfMyAgICAgICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004OTk2X0NIQVJHRV9QVU1QXzEgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV004OTk2X0NIQVJHRV9QVU1QXzIgICAgICAgICAgICAgICAgICAgIDB4NDEKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzEgICAgICAgICAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NTQKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzYgICAgICAgICAgICAgICAgICAgICAgIDB4NTUKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPXzcgICAgICAgICAgICAgICAgICAgICAgIDB4NTYKKyNkZWZpbmUgV004OTk2X0RDX1NFUlZPX1JFQURCQUNLXzAgICAgICAgICAgICAgIDB4NTcKKyNkZWZpbmUgV004OTk2X0FOQUxPR1VFX0hQXzEgICAgICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgV004OTk2X0FOQUxPR1VFX0hQXzIgICAgICAgICAgICAgICAgICAgIDB4NjEKKyNkZWZpbmUgV004OTk2X0NISVBfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIFdNODk5Nl9DT05UUk9MX0lOVEVSRkFDRV8xICAgICAgICAgICAgICAweDEwMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMSAgICAgICAgICAgMHgxMTAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzIgICAgICAgICAgIDB4MTExCisjZGVmaW5lIFdNODk5Nl9BSUZfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgICAweDIwMAorI2RlZmluZSBXTTg5OTZfQUlGX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgV004OTk2X0NMT0NLSU5HXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4CisjZGVmaW5lIFdNODk5Nl9DTE9DS0lOR18yICAgICAgICAgICAgICAgICAgICAgICAweDIwOQorI2RlZmluZSBXTTg5OTZfQUlGX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTAKKyNkZWZpbmUgV004OTk2X0ZMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4MjIwCisjZGVmaW5lIFdNODk5Nl9GTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDIyMQorI2RlZmluZSBXTTg5OTZfRkxMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHgyMjIKKyNkZWZpbmUgV004OTk2X0ZMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4MjIzCisjZGVmaW5lIFdNODk5Nl9GTExfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgICAweDIyNAorI2RlZmluZSBXTTg5OTZfRkxMX0NPTlRST0xfNiAgICAgICAgICAgICAgICAgICAgMHgyMjUKKyNkZWZpbmUgV004OTk2X0ZMTF9FRlNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI2CisjZGVmaW5lIFdNODk5Nl9GTExfRUZTXzIgICAgICAgICAgICAgICAgICAgICAgICAweDIyNworI2RlZmluZSBXTTg5OTZfQUlGMV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgzMDAKKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAxCisjZGVmaW5lIFdNODk5Nl9BSUYxX1RYX0xSQ0xLXzEgICAgICAgICAgICAgICAgICAweDMwMgorI2RlZmluZSBXTTg5OTZfQUlGMV9UWF9MUkNMS18yICAgICAgICAgICAgICAgICAgMHgzMDMKKyNkZWZpbmUgV004OTk2X0FJRjFfUlhfTFJDTEtfMSAgICAgICAgICAgICAgICAgIDB4MzA0CisjZGVmaW5lIFdNODk5Nl9BSUYxX1JYX0xSQ0xLXzIgICAgICAgICAgICAgICAgICAweDMwNQorI2RlZmluZSBXTTg5OTZfQUlGMVRYX0RBVEFfQ09ORklHVVJBVElPTl8xICAgICAgMHgzMDYKKyNkZWZpbmUgV004OTk2X0FJRjFUWF9EQVRBX0NPTkZJR1VSQVRJT05fMiAgICAgIDB4MzA3CisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfREFUQV9DT05GSUdVUkFUSU9OICAgICAgICAweDMwOAorI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OICAgMHgzMDkKKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiAgIDB4MzBBCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04gICAweDMwQgorI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OICAgMHgzMEMKKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiAgIDB4MzBECisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04gICAweDMwRQorI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfMF9DT05GSUdVUkFUSU9OICAgMHgzMEYKKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOTkVMXzFfQ09ORklHVVJBVElPTiAgIDB4MzEwCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF8yX0NPTkZJR1VSQVRJT04gICAweDMxMQorI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU5ORUxfM19DT05GSUdVUkFUSU9OICAgMHgzMTIKKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOTkVMXzRfQ09ORklHVVJBVElPTiAgIDB4MzEzCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTk5FTF81X0NPTkZJR1VSQVRJT04gICAweDMxNAorI2RlZmluZSBXTTg5OTZfQUlGMVJYX01PTk9fQ09ORklHVVJBVElPTiAgICAgICAgMHgzMTUKKyNkZWZpbmUgV004OTk2X0FJRjFUWF9URVNUICAgICAgICAgICAgICAgICAgICAgIDB4MzFBCisjZGVmaW5lIFdNODk5Nl9BSUYyX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDMyMAorI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgzMjEKKyNkZWZpbmUgV004OTk2X0FJRjJfVFhfTFJDTEtfMSAgICAgICAgICAgICAgICAgIDB4MzIyCisjZGVmaW5lIFdNODk5Nl9BSUYyX1RYX0xSQ0xLXzIgICAgICAgICAgICAgICAgICAweDMyMworI2RlZmluZSBXTTg5OTZfQUlGMl9SWF9MUkNMS18xICAgICAgICAgICAgICAgICAgMHgzMjQKKyNkZWZpbmUgV004OTk2X0FJRjJfUlhfTFJDTEtfMiAgICAgICAgICAgICAgICAgIDB4MzI1CisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfREFUQV9DT05GSUdVUkFUSU9OXzEgICAgICAweDMyNgorI2RlZmluZSBXTTg5OTZfQUlGMlRYX0RBVEFfQ09ORklHVVJBVElPTl8yICAgICAgMHgzMjcKKyNkZWZpbmUgV004OTk2X0FJRjJSWF9EQVRBX0NPTkZJR1VSQVRJT04gICAgICAgIDB4MzI4CisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTk5FTF8wX0NPTkZJR1VSQVRJT04gICAweDMyOQorI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU5ORUxfMV9DT05GSUdVUkFUSU9OICAgMHgzMkEKKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOTkVMXzBfQ09ORklHVVJBVElPTiAgIDB4MzJCCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTk5FTF8xX0NPTkZJR1VSQVRJT04gICAweDMyQworI2RlZmluZSBXTTg5OTZfQUlGMlJYX01PTk9fQ09ORklHVVJBVElPTiAgICAgICAgMHgzMkQKKyNkZWZpbmUgV004OTk2X0FJRjJUWF9URVNUICAgICAgICAgICAgICAgICAgICAgIDB4MzJGCisjZGVmaW5lIFdNODk5Nl9EU1AxX1RYX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSBXTTg5OTZfRFNQMV9UWF9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgMHg0MDEKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4NDAyCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAweDQwMworI2RlZmluZSBXTTg5OTZfRFNQMV9UWF9GSUxURVJTICAgICAgICAgICAgICAgICAgMHg0MTAKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRklMVEVSU18xICAgICAgICAgICAgICAgIDB4NDIwCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0ZJTFRFUlNfMiAgICAgICAgICAgICAgICAweDQyMQorI2RlZmluZSBXTTg5OTZfRFNQMV9EUkNfMSAgICAgICAgICAgICAgICAgICAgICAgMHg0NDAKKyNkZWZpbmUgV004OTk2X0RTUDFfRFJDXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NDQxCisjZGVmaW5lIFdNODk5Nl9EU1AxX0RSQ18zICAgICAgICAgICAgICAgICAgICAgICAweDQ0MgorI2RlZmluZSBXTTg5OTZfRFNQMV9EUkNfNCAgICAgICAgICAgICAgICAgICAgICAgMHg0NDMKKyNkZWZpbmUgV004OTk2X0RTUDFfRFJDXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NDQ0CisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0dBSU5TXzEgICAgICAgICAgICAgICAweDQ4MAorI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9HQUlOU18yICAgICAgICAgICAgICAgMHg0ODEKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF8xX0EgICAgICAgICAgICAgIDB4NDgyCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMV9CICAgICAgICAgICAgICAweDQ4MworI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzFfUEcgICAgICAgICAgICAgMHg0ODQKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF8yX0EgICAgICAgICAgICAgIDB4NDg1CisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfMl9CICAgICAgICAgICAgICAweDQ4NgorI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzJfQyAgICAgICAgICAgICAgMHg0ODcKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF8yX1BHICAgICAgICAgICAgIDB4NDg4CisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfM19BICAgICAgICAgICAgICAweDQ4OQorI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzNfQiAgICAgICAgICAgICAgMHg0OEEKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF8zX0MgICAgICAgICAgICAgIDB4NDhCCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfM19QRyAgICAgICAgICAgICAweDQ4QworI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzRfQSAgICAgICAgICAgICAgMHg0OEQKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF80X0IgICAgICAgICAgICAgIDB4NDhFCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNF9DICAgICAgICAgICAgICAweDQ4RgorI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzRfUEcgICAgICAgICAgICAgMHg0OTAKKyNkZWZpbmUgV004OTk2X0RTUDFfUlhfRVFfQkFORF81X0EgICAgICAgICAgICAgIDB4NDkxCisjZGVmaW5lIFdNODk5Nl9EU1AxX1JYX0VRX0JBTkRfNV9CICAgICAgICAgICAgICAweDQ5MgorI2RlZmluZSBXTTg5OTZfRFNQMV9SWF9FUV9CQU5EXzVfUEcgICAgICAgICAgICAgMHg0OTMKKyNkZWZpbmUgV004OTk2X0RTUDJfVFhfTEVGVF9WT0xVTUUgICAgICAgICAgICAgIDB4NTAwCisjZGVmaW5lIFdNODk5Nl9EU1AyX1RYX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAweDUwMQorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgMHg1MDIKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfUklHSFRfVk9MVU1FICAgICAgICAgICAgIDB4NTAzCisjZGVmaW5lIFdNODk5Nl9EU1AyX1RYX0ZJTFRFUlMgICAgICAgICAgICAgICAgICAweDUxMAorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9GSUxURVJTXzEgICAgICAgICAgICAgICAgMHg1MjAKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRklMVEVSU18yICAgICAgICAgICAgICAgIDB4NTIxCisjZGVmaW5lIFdNODk5Nl9EU1AyX0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAweDU0MAorI2RlZmluZSBXTTg5OTZfRFNQMl9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgMHg1NDEKKyNkZWZpbmUgV004OTk2X0RTUDJfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTQyCisjZGVmaW5lIFdNODk5Nl9EU1AyX0RSQ180ICAgICAgICAgICAgICAgICAgICAgICAweDU0MworI2RlZmluZSBXTTg5OTZfRFNQMl9EUkNfNSAgICAgICAgICAgICAgICAgICAgICAgMHg1NDQKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfR0FJTlNfMSAgICAgICAgICAgICAgIDB4NTgwCisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0dBSU5TXzIgICAgICAgICAgICAgICAweDU4MQorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzFfQSAgICAgICAgICAgICAgMHg1ODIKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF8xX0IgICAgICAgICAgICAgIDB4NTgzCisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMV9QRyAgICAgICAgICAgICAweDU4NAorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzJfQSAgICAgICAgICAgICAgMHg1ODUKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF8yX0IgICAgICAgICAgICAgIDB4NTg2CisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfMl9DICAgICAgICAgICAgICAweDU4NworI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzJfUEcgICAgICAgICAgICAgMHg1ODgKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF8zX0EgICAgICAgICAgICAgIDB4NTg5CisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfM19CICAgICAgICAgICAgICAweDU4QQorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzNfQyAgICAgICAgICAgICAgMHg1OEIKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF8zX1BHICAgICAgICAgICAgIDB4NThDCisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNF9BICAgICAgICAgICAgICAweDU4RAorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzRfQiAgICAgICAgICAgICAgMHg1OEUKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF80X0MgICAgICAgICAgICAgIDB4NThGCisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNF9QRyAgICAgICAgICAgICAweDU5MAorI2RlZmluZSBXTTg5OTZfRFNQMl9SWF9FUV9CQU5EXzVfQSAgICAgICAgICAgICAgMHg1OTEKKyNkZWZpbmUgV004OTk2X0RTUDJfUlhfRVFfQkFORF81X0IgICAgICAgICAgICAgIDB4NTkyCisjZGVmaW5lIFdNODk5Nl9EU1AyX1JYX0VRX0JBTkRfNV9QRyAgICAgICAgICAgICAweDU5MworI2RlZmluZSBXTTg5OTZfREFDMV9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDAKKyNkZWZpbmUgV004OTk2X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjAxCisjZGVmaW5lIFdNODk5Nl9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwMgorI2RlZmluZSBXTTg5OTZfREFDMl9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDMKKyNkZWZpbmUgV004OTk2X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjA0CisjZGVmaW5lIFdNODk5Nl9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwNQorI2RlZmluZSBXTTg5OTZfRFNQMV9UWF9MRUZUX01JWEVSX1JPVVRJTkcgICAgICAgMHg2MDYKKyNkZWZpbmUgV004OTk2X0RTUDFfVFhfUklHSFRfTUlYRVJfUk9VVElORyAgICAgIDB4NjA3CisjZGVmaW5lIFdNODk5Nl9EU1AyX1RYX0xFRlRfTUlYRVJfUk9VVElORyAgICAgICAweDYwOAorI2RlZmluZSBXTTg5OTZfRFNQMl9UWF9SSUdIVF9NSVhFUl9ST1VUSU5HICAgICAgMHg2MDkKKyNkZWZpbmUgV004OTk2X0RTUF9UWF9NSVhFUl9TRUxFQ1QgICAgICAgICAgICAgIDB4NjBBCisjZGVmaW5lIFdNODk5Nl9EQUNfU09GVE1VVEUgICAgICAgICAgICAgICAgICAgICAweDYxMAorI2RlZmluZSBXTTg5OTZfT1ZFUlNBTVBMSU5HICAgICAgICAgICAgICAgICAgICAgMHg2MjAKKyNkZWZpbmUgV004OTk2X1NJREVUT05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIxCisjZGVmaW5lIFdNODk5Nl9HUElPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMAorI2RlZmluZSBXTTg5OTZfR1BJT18yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDEKKyNkZWZpbmUgV004OTk2X0dQSU9fMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAyCisjZGVmaW5lIFdNODk5Nl9HUElPXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMworI2RlZmluZSBXTTg5OTZfR1BJT181ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDQKKyNkZWZpbmUgV004OTk2X1BVTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4NzIwCisjZGVmaW5lIFdNODk5Nl9QVUxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDcyMQorI2RlZmluZSBXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18xICAgICAgICAgICAgICAgMHg3MzAKKyNkZWZpbmUgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMiAgICAgICAgICAgICAgIDB4NzMxCisjZGVmaW5lIFdNODk5Nl9JTlRFUlJVUFRfUkFXX1NUQVRVU18yICAgICAgICAgICAweDczMgorI2RlZmluZSBXTTg5OTZfSU5URVJSVVBUX1NUQVRVU18xX01BU0sgICAgICAgICAgMHg3MzgKKyNkZWZpbmUgV004OTk2X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLICAgICAgICAgIDB4NzM5CisjZGVmaW5lIFdNODk5Nl9JTlRFUlJVUFRfQ09OVFJPTCAgICAgICAgICAgICAgICAweDc0MAorI2RlZmluZSBXTTg5OTZfTEVGVF9QRE1fU1BFQUtFUiAgICAgICAgICAgICAgICAgMHg4MDAKKyNkZWZpbmUgV004OTk2X1JJR0hUX1BETV9TUEVBS0VSICAgICAgICAgICAgICAgIDB4ODAxCisjZGVmaW5lIFdNODk5Nl9QRE1fU1BFQUtFUl9NVVRFX1NFUVVFTkNFICAgICAgICAweDgwMgorI2RlZmluZSBXTTg5OTZfUERNX1NQRUFLRVJfVk9MVU1FICAgICAgICAgICAgICAgMHg4MDMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8wICAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHgzMDAxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDMwMDIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zICAgICAgICAgICAgICAgIDB4MzAwMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQgICAgICAgICAgICAgICAgMHgzMDA0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNSAgICAgICAgICAgICAgICAweDMwMDUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl82ICAgICAgICAgICAgICAgIDB4MzAwNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzcgICAgICAgICAgICAgICAgMHgzMDA3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfOCAgICAgICAgICAgICAgICAweDMwMDgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl85ICAgICAgICAgICAgICAgIDB4MzAwOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwICAgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTEgICAgICAgICAgICAgICAweDMwMEIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMiAgICAgICAgICAgICAgIDB4MzAwQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzICAgICAgICAgICAgICAgMHgzMDBECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQgICAgICAgICAgICAgICAweDMwMEUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNSAgICAgICAgICAgICAgIDB4MzAwRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2ICAgICAgICAgICAgICAgMHgzMDEwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTcgICAgICAgICAgICAgICAweDMwMTEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOCAgICAgICAgICAgICAgIDB4MzAxMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5ICAgICAgICAgICAgICAgMHgzMDEzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjAgICAgICAgICAgICAgICAweDMwMTQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMSAgICAgICAgICAgICAgIDB4MzAxNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyICAgICAgICAgICAgICAgMHgzMDE2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjMgICAgICAgICAgICAgICAweDMwMTcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNCAgICAgICAgICAgICAgIDB4MzAxOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI1ICAgICAgICAgICAgICAgMHgzMDE5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjYgICAgICAgICAgICAgICAweDMwMUEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNyAgICAgICAgICAgICAgIDB4MzAxQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4ICAgICAgICAgICAgICAgMHgzMDFDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjkgICAgICAgICAgICAgICAweDMwMUQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMCAgICAgICAgICAgICAgIDB4MzAxRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMxICAgICAgICAgICAgICAgMHgzMDFGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzIgICAgICAgICAgICAgICAweDMwMjAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMyAgICAgICAgICAgICAgIDB4MzAyMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0ICAgICAgICAgICAgICAgMHgzMDIyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzUgICAgICAgICAgICAgICAweDMwMjMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNiAgICAgICAgICAgICAgIDB4MzAyNAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM3ICAgICAgICAgICAgICAgMHgzMDI1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzggICAgICAgICAgICAgICAweDMwMjYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOSAgICAgICAgICAgICAgIDB4MzAyNworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwICAgICAgICAgICAgICAgMHgzMDI4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDEgICAgICAgICAgICAgICAweDMwMjkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MiAgICAgICAgICAgICAgIDB4MzAyQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQzICAgICAgICAgICAgICAgMHgzMDJCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDQgICAgICAgICAgICAgICAweDMwMkMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NSAgICAgICAgICAgICAgIDB4MzAyRAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ2ICAgICAgICAgICAgICAgMHgzMDJFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDcgICAgICAgICAgICAgICAweDMwMkYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80OCAgICAgICAgICAgICAgIDB4MzAzMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ5ICAgICAgICAgICAgICAgMHgzMDMxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTAgICAgICAgICAgICAgICAweDMwMzIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81MSAgICAgICAgICAgICAgIDB4MzAzMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUyICAgICAgICAgICAgICAgMHgzMDM0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTMgICAgICAgICAgICAgICAweDMwMzUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81NCAgICAgICAgICAgICAgIDB4MzAzNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzU1ICAgICAgICAgICAgICAgMHgzMDM3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTYgICAgICAgICAgICAgICAweDMwMzgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81NyAgICAgICAgICAgICAgIDB4MzAzOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzU4ICAgICAgICAgICAgICAgMHgzMDNBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTkgICAgICAgICAgICAgICAweDMwM0IKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl82MCAgICAgICAgICAgICAgIDB4MzAzQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzYxICAgICAgICAgICAgICAgMHgzMDNECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNjIgICAgICAgICAgICAgICAweDMwM0UKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl82MyAgICAgICAgICAgICAgIDB4MzAzRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzY0ICAgICAgICAgICAgICAgMHgzMDQwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNjUgICAgICAgICAgICAgICAweDMwNDEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl82NiAgICAgICAgICAgICAgIDB4MzA0MgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzY3ICAgICAgICAgICAgICAgMHgzMDQzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNjggICAgICAgICAgICAgICAweDMwNDQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl82OSAgICAgICAgICAgICAgIDB4MzA0NQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzcwICAgICAgICAgICAgICAgMHgzMDQ2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNzEgICAgICAgICAgICAgICAweDMwNDcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl83MiAgICAgICAgICAgICAgIDB4MzA0OAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzczICAgICAgICAgICAgICAgMHgzMDQ5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNzQgICAgICAgICAgICAgICAweDMwNEEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl83NSAgICAgICAgICAgICAgIDB4MzA0QgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzc2ICAgICAgICAgICAgICAgMHgzMDRDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNzcgICAgICAgICAgICAgICAweDMwNEQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl83OCAgICAgICAgICAgICAgIDB4MzA0RQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzc5ICAgICAgICAgICAgICAgMHgzMDRGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfODAgICAgICAgICAgICAgICAweDMwNTAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl84MSAgICAgICAgICAgICAgIDB4MzA1MQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzgyICAgICAgICAgICAgICAgMHgzMDUyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfODMgICAgICAgICAgICAgICAweDMwNTMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl84NCAgICAgICAgICAgICAgIDB4MzA1NAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzg1ICAgICAgICAgICAgICAgMHgzMDU1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfODYgICAgICAgICAgICAgICAweDMwNTYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl84NyAgICAgICAgICAgICAgIDB4MzA1NworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzg4ICAgICAgICAgICAgICAgMHgzMDU4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfODkgICAgICAgICAgICAgICAweDMwNTkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl85MCAgICAgICAgICAgICAgIDB4MzA1QQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzkxICAgICAgICAgICAgICAgMHgzMDVCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfOTIgICAgICAgICAgICAgICAweDMwNUMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl85MyAgICAgICAgICAgICAgIDB4MzA1RAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzk0ICAgICAgICAgICAgICAgMHgzMDVFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfOTUgICAgICAgICAgICAgICAweDMwNUYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl85NiAgICAgICAgICAgICAgIDB4MzA2MAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzk3ICAgICAgICAgICAgICAgMHgzMDYxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfOTggICAgICAgICAgICAgICAweDMwNjIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl85OSAgICAgICAgICAgICAgIDB4MzA2MworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwMCAgICAgICAgICAgICAgMHgzMDY0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTAxICAgICAgICAgICAgICAweDMwNjUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMDIgICAgICAgICAgICAgIDB4MzA2NgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwMyAgICAgICAgICAgICAgMHgzMDY3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTA0ICAgICAgICAgICAgICAweDMwNjgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMDUgICAgICAgICAgICAgIDB4MzA2OQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwNiAgICAgICAgICAgICAgMHgzMDZBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTA3ICAgICAgICAgICAgICAweDMwNkIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMDggICAgICAgICAgICAgIDB4MzA2QworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEwOSAgICAgICAgICAgICAgMHgzMDZECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTEwICAgICAgICAgICAgICAweDMwNkUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMTEgICAgICAgICAgICAgIDB4MzA2RgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzExMiAgICAgICAgICAgICAgMHgzMDcwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTEzICAgICAgICAgICAgICAweDMwNzEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMTQgICAgICAgICAgICAgIDB4MzA3MgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzExNSAgICAgICAgICAgICAgMHgzMDczCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTE2ICAgICAgICAgICAgICAweDMwNzQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMTcgICAgICAgICAgICAgIDB4MzA3NQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzExOCAgICAgICAgICAgICAgMHgzMDc2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTE5ICAgICAgICAgICAgICAweDMwNzcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjAgICAgICAgICAgICAgIDB4MzA3OAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEyMSAgICAgICAgICAgICAgMHgzMDc5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTIyICAgICAgICAgICAgICAweDMwN0EKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjMgICAgICAgICAgICAgIDB4MzA3QgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEyNCAgICAgICAgICAgICAgMHgzMDdDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTI1ICAgICAgICAgICAgICAweDMwN0QKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjYgICAgICAgICAgICAgIDB4MzA3RQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEyNyAgICAgICAgICAgICAgMHgzMDdGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTI4ICAgICAgICAgICAgICAweDMwODAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMjkgICAgICAgICAgICAgIDB4MzA4MQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzMCAgICAgICAgICAgICAgMHgzMDgyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTMxICAgICAgICAgICAgICAweDMwODMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMzIgICAgICAgICAgICAgIDB4MzA4NAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzMyAgICAgICAgICAgICAgMHgzMDg1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTM0ICAgICAgICAgICAgICAweDMwODYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMzUgICAgICAgICAgICAgIDB4MzA4NworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzNiAgICAgICAgICAgICAgMHgzMDg4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTM3ICAgICAgICAgICAgICAweDMwODkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xMzggICAgICAgICAgICAgIDB4MzA4QQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzEzOSAgICAgICAgICAgICAgMHgzMDhCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQwICAgICAgICAgICAgICAweDMwOEMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDEgICAgICAgICAgICAgIDB4MzA4RAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE0MiAgICAgICAgICAgICAgMHgzMDhFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQzICAgICAgICAgICAgICAweDMwOEYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDQgICAgICAgICAgICAgIDB4MzA5MAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE0NSAgICAgICAgICAgICAgMHgzMDkxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ2ICAgICAgICAgICAgICAweDMwOTIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNDcgICAgICAgICAgICAgIDB4MzA5MworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE0OCAgICAgICAgICAgICAgMHgzMDk0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTQ5ICAgICAgICAgICAgICAweDMwOTUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTAgICAgICAgICAgICAgIDB4MzA5NgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE1MSAgICAgICAgICAgICAgMHgzMDk3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTUyICAgICAgICAgICAgICAweDMwOTgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTMgICAgICAgICAgICAgIDB4MzA5OQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE1NCAgICAgICAgICAgICAgMHgzMDlBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTU1ICAgICAgICAgICAgICAweDMwOUIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTYgICAgICAgICAgICAgIDB4MzA5QworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE1NyAgICAgICAgICAgICAgMHgzMDlECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTU4ICAgICAgICAgICAgICAweDMwOUUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNTkgICAgICAgICAgICAgIDB4MzA5RgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2MCAgICAgICAgICAgICAgMHgzMEEwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTYxICAgICAgICAgICAgICAweDMwQTEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNjIgICAgICAgICAgICAgIDB4MzBBMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2MyAgICAgICAgICAgICAgMHgzMEEzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTY0ICAgICAgICAgICAgICAweDMwQTQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNjUgICAgICAgICAgICAgIDB4MzBBNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2NiAgICAgICAgICAgICAgMHgzMEE2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTY3ICAgICAgICAgICAgICAweDMwQTcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNjggICAgICAgICAgICAgIDB4MzBBOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE2OSAgICAgICAgICAgICAgMHgzMEE5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTcwICAgICAgICAgICAgICAweDMwQUEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNzEgICAgICAgICAgICAgIDB4MzBBQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE3MiAgICAgICAgICAgICAgMHgzMEFDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTczICAgICAgICAgICAgICAweDMwQUQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNzQgICAgICAgICAgICAgIDB4MzBBRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE3NSAgICAgICAgICAgICAgMHgzMEFGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTc2ICAgICAgICAgICAgICAweDMwQjAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xNzcgICAgICAgICAgICAgIDB4MzBCMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE3OCAgICAgICAgICAgICAgMHgzMEIyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTc5ICAgICAgICAgICAgICAweDMwQjMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xODAgICAgICAgICAgICAgIDB4MzBCNAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE4MSAgICAgICAgICAgICAgMHgzMEI1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTgyICAgICAgICAgICAgICAweDMwQjYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xODMgICAgICAgICAgICAgIDB4MzBCNworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE4NCAgICAgICAgICAgICAgMHgzMEI4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTg1ICAgICAgICAgICAgICAweDMwQjkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xODYgICAgICAgICAgICAgIDB4MzBCQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE4NyAgICAgICAgICAgICAgMHgzMEJCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTg4ICAgICAgICAgICAgICAweDMwQkMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xODkgICAgICAgICAgICAgIDB4MzBCRAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5MCAgICAgICAgICAgICAgMHgzMEJFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTkxICAgICAgICAgICAgICAweDMwQkYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOTIgICAgICAgICAgICAgIDB4MzBDMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5MyAgICAgICAgICAgICAgMHgzMEMxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTk0ICAgICAgICAgICAgICAweDMwQzIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOTUgICAgICAgICAgICAgIDB4MzBDMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5NiAgICAgICAgICAgICAgMHgzMEM0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMTk3ICAgICAgICAgICAgICAweDMwQzUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8xOTggICAgICAgICAgICAgIDB4MzBDNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzE5OSAgICAgICAgICAgICAgMHgzMEM3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjAwICAgICAgICAgICAgICAweDMwQzgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMDEgICAgICAgICAgICAgIDB4MzBDOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwMiAgICAgICAgICAgICAgMHgzMENBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjAzICAgICAgICAgICAgICAweDMwQ0IKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMDQgICAgICAgICAgICAgIDB4MzBDQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwNSAgICAgICAgICAgICAgMHgzMENECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjA2ICAgICAgICAgICAgICAweDMwQ0UKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMDcgICAgICAgICAgICAgIDB4MzBDRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIwOCAgICAgICAgICAgICAgMHgzMEQwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjA5ICAgICAgICAgICAgICAweDMwRDEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMTAgICAgICAgICAgICAgIDB4MzBEMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxMSAgICAgICAgICAgICAgMHgzMEQzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjEyICAgICAgICAgICAgICAweDMwRDQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMTMgICAgICAgICAgICAgIDB4MzBENQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxNCAgICAgICAgICAgICAgMHgzMEQ2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjE1ICAgICAgICAgICAgICAweDMwRDcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMTYgICAgICAgICAgICAgIDB4MzBEOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIxNyAgICAgICAgICAgICAgMHgzMEQ5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjE4ICAgICAgICAgICAgICAweDMwREEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMTkgICAgICAgICAgICAgIDB4MzBEQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyMCAgICAgICAgICAgICAgMHgzMERDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjIxICAgICAgICAgICAgICAweDMwREQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMjIgICAgICAgICAgICAgIDB4MzBERQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyMyAgICAgICAgICAgICAgMHgzMERGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjI0ICAgICAgICAgICAgICAweDMwRTAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMjUgICAgICAgICAgICAgIDB4MzBFMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyNiAgICAgICAgICAgICAgMHgzMEUyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjI3ICAgICAgICAgICAgICAweDMwRTMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMjggICAgICAgICAgICAgIDB4MzBFNAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIyOSAgICAgICAgICAgICAgMHgzMEU1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjMwICAgICAgICAgICAgICAweDMwRTYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMzEgICAgICAgICAgICAgIDB4MzBFNworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIzMiAgICAgICAgICAgICAgMHgzMEU4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjMzICAgICAgICAgICAgICAweDMwRTkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMzQgICAgICAgICAgICAgIDB4MzBFQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIzNSAgICAgICAgICAgICAgMHgzMEVCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjM2ICAgICAgICAgICAgICAweDMwRUMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yMzcgICAgICAgICAgICAgIDB4MzBFRAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzIzOCAgICAgICAgICAgICAgMHgzMEVFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjM5ICAgICAgICAgICAgICAweDMwRUYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNDAgICAgICAgICAgICAgIDB4MzBGMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI0MSAgICAgICAgICAgICAgMHgzMEYxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjQyICAgICAgICAgICAgICAweDMwRjIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNDMgICAgICAgICAgICAgIDB4MzBGMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI0NCAgICAgICAgICAgICAgMHgzMEY0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjQ1ICAgICAgICAgICAgICAweDMwRjUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNDYgICAgICAgICAgICAgIDB4MzBGNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI0NyAgICAgICAgICAgICAgMHgzMEY3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjQ4ICAgICAgICAgICAgICAweDMwRjgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNDkgICAgICAgICAgICAgIDB4MzBGOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI1MCAgICAgICAgICAgICAgMHgzMEZBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjUxICAgICAgICAgICAgICAweDMwRkIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNTIgICAgICAgICAgICAgIDB4MzBGQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI1MyAgICAgICAgICAgICAgMHgzMEZECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjU0ICAgICAgICAgICAgICAweDMwRkUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNTUgICAgICAgICAgICAgIDB4MzBGRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI1NiAgICAgICAgICAgICAgMHgzMTAwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjU3ICAgICAgICAgICAgICAweDMxMDEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNTggICAgICAgICAgICAgIDB4MzEwMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI1OSAgICAgICAgICAgICAgMHgzMTAzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjYwICAgICAgICAgICAgICAweDMxMDQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNjEgICAgICAgICAgICAgIDB4MzEwNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2MiAgICAgICAgICAgICAgMHgzMTA2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjYzICAgICAgICAgICAgICAweDMxMDcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNjQgICAgICAgICAgICAgIDB4MzEwOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2NSAgICAgICAgICAgICAgMHgzMTA5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjY2ICAgICAgICAgICAgICAweDMxMEEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNjcgICAgICAgICAgICAgIDB4MzEwQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI2OCAgICAgICAgICAgICAgMHgzMTBDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjY5ICAgICAgICAgICAgICAweDMxMEQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNzAgICAgICAgICAgICAgIDB4MzEwRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI3MSAgICAgICAgICAgICAgMHgzMTBGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjcyICAgICAgICAgICAgICAweDMxMTAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNzMgICAgICAgICAgICAgIDB4MzExMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI3NCAgICAgICAgICAgICAgMHgzMTEyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjc1ICAgICAgICAgICAgICAweDMxMTMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNzYgICAgICAgICAgICAgIDB4MzExNAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI3NyAgICAgICAgICAgICAgMHgzMTE1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjc4ICAgICAgICAgICAgICAweDMxMTYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yNzkgICAgICAgICAgICAgIDB4MzExNworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4MCAgICAgICAgICAgICAgMHgzMTE4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjgxICAgICAgICAgICAgICAweDMxMTkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yODIgICAgICAgICAgICAgIDB4MzExQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4MyAgICAgICAgICAgICAgMHgzMTFCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjg0ICAgICAgICAgICAgICAweDMxMUMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yODUgICAgICAgICAgICAgIDB4MzExRAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4NiAgICAgICAgICAgICAgMHgzMTFFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjg3ICAgICAgICAgICAgICAweDMxMUYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yODggICAgICAgICAgICAgIDB4MzEyMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI4OSAgICAgICAgICAgICAgMHgzMTIxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjkwICAgICAgICAgICAgICAweDMxMjIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yOTEgICAgICAgICAgICAgIDB4MzEyMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI5MiAgICAgICAgICAgICAgMHgzMTI0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjkzICAgICAgICAgICAgICAweDMxMjUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yOTQgICAgICAgICAgICAgIDB4MzEyNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI5NSAgICAgICAgICAgICAgMHgzMTI3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjk2ICAgICAgICAgICAgICAweDMxMjgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8yOTcgICAgICAgICAgICAgIDB4MzEyOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzI5OCAgICAgICAgICAgICAgMHgzMTJBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMjk5ICAgICAgICAgICAgICAweDMxMkIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMDAgICAgICAgICAgICAgIDB4MzEyQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMwMSAgICAgICAgICAgICAgMHgzMTJECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzAyICAgICAgICAgICAgICAweDMxMkUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMDMgICAgICAgICAgICAgIDB4MzEyRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMwNCAgICAgICAgICAgICAgMHgzMTMwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzA1ICAgICAgICAgICAgICAweDMxMzEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMDYgICAgICAgICAgICAgIDB4MzEzMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMwNyAgICAgICAgICAgICAgMHgzMTMzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzA4ICAgICAgICAgICAgICAweDMxMzQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMDkgICAgICAgICAgICAgIDB4MzEzNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMxMCAgICAgICAgICAgICAgMHgzMTM2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzExICAgICAgICAgICAgICAweDMxMzcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMTIgICAgICAgICAgICAgIDB4MzEzOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMxMyAgICAgICAgICAgICAgMHgzMTM5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzE0ICAgICAgICAgICAgICAweDMxM0EKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMTUgICAgICAgICAgICAgIDB4MzEzQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMxNiAgICAgICAgICAgICAgMHgzMTNDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzE3ICAgICAgICAgICAgICAweDMxM0QKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMTggICAgICAgICAgICAgIDB4MzEzRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMxOSAgICAgICAgICAgICAgMHgzMTNGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzIwICAgICAgICAgICAgICAweDMxNDAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMjEgICAgICAgICAgICAgIDB4MzE0MQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMyMiAgICAgICAgICAgICAgMHgzMTQyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzIzICAgICAgICAgICAgICAweDMxNDMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMjQgICAgICAgICAgICAgIDB4MzE0NAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMyNSAgICAgICAgICAgICAgMHgzMTQ1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzI2ICAgICAgICAgICAgICAweDMxNDYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMjcgICAgICAgICAgICAgIDB4MzE0NworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMyOCAgICAgICAgICAgICAgMHgzMTQ4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzI5ICAgICAgICAgICAgICAweDMxNDkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMzAgICAgICAgICAgICAgIDB4MzE0QQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMzMSAgICAgICAgICAgICAgMHgzMTRCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzMyICAgICAgICAgICAgICAweDMxNEMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMzMgICAgICAgICAgICAgIDB4MzE0RAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMzNCAgICAgICAgICAgICAgMHgzMTRFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzM1ICAgICAgICAgICAgICAweDMxNEYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMzYgICAgICAgICAgICAgIDB4MzE1MAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzMzNyAgICAgICAgICAgICAgMHgzMTUxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzM4ICAgICAgICAgICAgICAweDMxNTIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zMzkgICAgICAgICAgICAgIDB4MzE1MworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0MCAgICAgICAgICAgICAgMHgzMTU0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzQxICAgICAgICAgICAgICAweDMxNTUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNDIgICAgICAgICAgICAgIDB4MzE1NgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0MyAgICAgICAgICAgICAgMHgzMTU3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzQ0ICAgICAgICAgICAgICAweDMxNTgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNDUgICAgICAgICAgICAgIDB4MzE1OQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0NiAgICAgICAgICAgICAgMHgzMTVBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzQ3ICAgICAgICAgICAgICAweDMxNUIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNDggICAgICAgICAgICAgIDB4MzE1QworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM0OSAgICAgICAgICAgICAgMHgzMTVECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzUwICAgICAgICAgICAgICAweDMxNUUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNTEgICAgICAgICAgICAgIDB4MzE1RgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM1MiAgICAgICAgICAgICAgMHgzMTYwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzUzICAgICAgICAgICAgICAweDMxNjEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNTQgICAgICAgICAgICAgIDB4MzE2MgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM1NSAgICAgICAgICAgICAgMHgzMTYzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzU2ICAgICAgICAgICAgICAweDMxNjQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNTcgICAgICAgICAgICAgIDB4MzE2NQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM1OCAgICAgICAgICAgICAgMHgzMTY2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzU5ICAgICAgICAgICAgICAweDMxNjcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNjAgICAgICAgICAgICAgIDB4MzE2OAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM2MSAgICAgICAgICAgICAgMHgzMTY5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzYyICAgICAgICAgICAgICAweDMxNkEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNjMgICAgICAgICAgICAgIDB4MzE2QgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM2NCAgICAgICAgICAgICAgMHgzMTZDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzY1ICAgICAgICAgICAgICAweDMxNkQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNjYgICAgICAgICAgICAgIDB4MzE2RQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM2NyAgICAgICAgICAgICAgMHgzMTZGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzY4ICAgICAgICAgICAgICAweDMxNzAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNjkgICAgICAgICAgICAgIDB4MzE3MQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM3MCAgICAgICAgICAgICAgMHgzMTcyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzcxICAgICAgICAgICAgICAweDMxNzMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNzIgICAgICAgICAgICAgIDB4MzE3NAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM3MyAgICAgICAgICAgICAgMHgzMTc1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzc0ICAgICAgICAgICAgICAweDMxNzYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNzUgICAgICAgICAgICAgIDB4MzE3NworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM3NiAgICAgICAgICAgICAgMHgzMTc4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzc3ICAgICAgICAgICAgICAweDMxNzkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zNzggICAgICAgICAgICAgIDB4MzE3QQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM3OSAgICAgICAgICAgICAgMHgzMTdCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzgwICAgICAgICAgICAgICAweDMxN0MKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zODEgICAgICAgICAgICAgIDB4MzE3RAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM4MiAgICAgICAgICAgICAgMHgzMTdFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzgzICAgICAgICAgICAgICAweDMxN0YKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zODQgICAgICAgICAgICAgIDB4MzE4MAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM4NSAgICAgICAgICAgICAgMHgzMTgxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzg2ICAgICAgICAgICAgICAweDMxODIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zODcgICAgICAgICAgICAgIDB4MzE4MworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM4OCAgICAgICAgICAgICAgMHgzMTg0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzg5ICAgICAgICAgICAgICAweDMxODUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTAgICAgICAgICAgICAgIDB4MzE4NgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM5MSAgICAgICAgICAgICAgMHgzMTg3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzkyICAgICAgICAgICAgICAweDMxODgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTMgICAgICAgICAgICAgIDB4MzE4OQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM5NCAgICAgICAgICAgICAgMHgzMThBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzk1ICAgICAgICAgICAgICAweDMxOEIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTYgICAgICAgICAgICAgIDB4MzE4QworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzM5NyAgICAgICAgICAgICAgMHgzMThECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfMzk4ICAgICAgICAgICAgICAweDMxOEUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl8zOTkgICAgICAgICAgICAgIDB4MzE4RgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwMCAgICAgICAgICAgICAgMHgzMTkwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDAxICAgICAgICAgICAgICAweDMxOTEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MDIgICAgICAgICAgICAgIDB4MzE5MgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwMyAgICAgICAgICAgICAgMHgzMTkzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDA0ICAgICAgICAgICAgICAweDMxOTQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MDUgICAgICAgICAgICAgIDB4MzE5NQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwNiAgICAgICAgICAgICAgMHgzMTk2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDA3ICAgICAgICAgICAgICAweDMxOTcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MDggICAgICAgICAgICAgIDB4MzE5OAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQwOSAgICAgICAgICAgICAgMHgzMTk5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDEwICAgICAgICAgICAgICAweDMxOUEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MTEgICAgICAgICAgICAgIDB4MzE5QgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQxMiAgICAgICAgICAgICAgMHgzMTlDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDEzICAgICAgICAgICAgICAweDMxOUQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MTQgICAgICAgICAgICAgIDB4MzE5RQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQxNSAgICAgICAgICAgICAgMHgzMTlGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDE2ICAgICAgICAgICAgICAweDMxQTAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MTcgICAgICAgICAgICAgIDB4MzFBMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQxOCAgICAgICAgICAgICAgMHgzMUEyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDE5ICAgICAgICAgICAgICAweDMxQTMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MjAgICAgICAgICAgICAgIDB4MzFBNAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQyMSAgICAgICAgICAgICAgMHgzMUE1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDIyICAgICAgICAgICAgICAweDMxQTYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MjMgICAgICAgICAgICAgIDB4MzFBNworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQyNCAgICAgICAgICAgICAgMHgzMUE4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDI1ICAgICAgICAgICAgICAweDMxQTkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MjYgICAgICAgICAgICAgIDB4MzFBQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQyNyAgICAgICAgICAgICAgMHgzMUFCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDI4ICAgICAgICAgICAgICAweDMxQUMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MjkgICAgICAgICAgICAgIDB4MzFBRAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQzMCAgICAgICAgICAgICAgMHgzMUFFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDMxICAgICAgICAgICAgICAweDMxQUYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MzIgICAgICAgICAgICAgIDB4MzFCMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQzMyAgICAgICAgICAgICAgMHgzMUIxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDM0ICAgICAgICAgICAgICAweDMxQjIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MzUgICAgICAgICAgICAgIDB4MzFCMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQzNiAgICAgICAgICAgICAgMHgzMUI0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDM3ICAgICAgICAgICAgICAweDMxQjUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80MzggICAgICAgICAgICAgIDB4MzFCNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQzOSAgICAgICAgICAgICAgMHgzMUI3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDQwICAgICAgICAgICAgICAweDMxQjgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NDEgICAgICAgICAgICAgIDB4MzFCOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ0MiAgICAgICAgICAgICAgMHgzMUJBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDQzICAgICAgICAgICAgICAweDMxQkIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NDQgICAgICAgICAgICAgIDB4MzFCQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ0NSAgICAgICAgICAgICAgMHgzMUJECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDQ2ICAgICAgICAgICAgICAweDMxQkUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NDcgICAgICAgICAgICAgIDB4MzFCRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ0OCAgICAgICAgICAgICAgMHgzMUMwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDQ5ICAgICAgICAgICAgICAweDMxQzEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NTAgICAgICAgICAgICAgIDB4MzFDMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ1MSAgICAgICAgICAgICAgMHgzMUMzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDUyICAgICAgICAgICAgICAweDMxQzQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NTMgICAgICAgICAgICAgIDB4MzFDNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ1NCAgICAgICAgICAgICAgMHgzMUM2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDU1ICAgICAgICAgICAgICAweDMxQzcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NTYgICAgICAgICAgICAgIDB4MzFDOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ1NyAgICAgICAgICAgICAgMHgzMUM5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDU4ICAgICAgICAgICAgICAweDMxQ0EKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NTkgICAgICAgICAgICAgIDB4MzFDQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ2MCAgICAgICAgICAgICAgMHgzMUNDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDYxICAgICAgICAgICAgICAweDMxQ0QKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NjIgICAgICAgICAgICAgIDB4MzFDRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ2MyAgICAgICAgICAgICAgMHgzMUNGCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDY0ICAgICAgICAgICAgICAweDMxRDAKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NjUgICAgICAgICAgICAgIDB4MzFEMQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ2NiAgICAgICAgICAgICAgMHgzMUQyCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDY3ICAgICAgICAgICAgICAweDMxRDMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NjggICAgICAgICAgICAgIDB4MzFENAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ2OSAgICAgICAgICAgICAgMHgzMUQ1CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDcwICAgICAgICAgICAgICAweDMxRDYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NzEgICAgICAgICAgICAgIDB4MzFENworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ3MiAgICAgICAgICAgICAgMHgzMUQ4CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDczICAgICAgICAgICAgICAweDMxRDkKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NzQgICAgICAgICAgICAgIDB4MzFEQQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ3NSAgICAgICAgICAgICAgMHgzMURCCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDc2ICAgICAgICAgICAgICAweDMxREMKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80NzcgICAgICAgICAgICAgIDB4MzFERAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ3OCAgICAgICAgICAgICAgMHgzMURFCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDc5ICAgICAgICAgICAgICAweDMxREYKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80ODAgICAgICAgICAgICAgIDB4MzFFMAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ4MSAgICAgICAgICAgICAgMHgzMUUxCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDgyICAgICAgICAgICAgICAweDMxRTIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80ODMgICAgICAgICAgICAgIDB4MzFFMworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ4NCAgICAgICAgICAgICAgMHgzMUU0CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDg1ICAgICAgICAgICAgICAweDMxRTUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80ODYgICAgICAgICAgICAgIDB4MzFFNgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ4NyAgICAgICAgICAgICAgMHgzMUU3CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDg4ICAgICAgICAgICAgICAweDMxRTgKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80ODkgICAgICAgICAgICAgIDB4MzFFOQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ5MCAgICAgICAgICAgICAgMHgzMUVBCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDkxICAgICAgICAgICAgICAweDMxRUIKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80OTIgICAgICAgICAgICAgIDB4MzFFQworI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ5MyAgICAgICAgICAgICAgMHgzMUVECisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDk0ICAgICAgICAgICAgICAweDMxRUUKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80OTUgICAgICAgICAgICAgIDB4MzFFRgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ5NiAgICAgICAgICAgICAgMHgzMUYwCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNDk3ICAgICAgICAgICAgICAweDMxRjEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl80OTggICAgICAgICAgICAgIDB4MzFGMgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzQ5OSAgICAgICAgICAgICAgMHgzMUYzCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTAwICAgICAgICAgICAgICAweDMxRjQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81MDEgICAgICAgICAgICAgIDB4MzFGNQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUwMiAgICAgICAgICAgICAgMHgzMUY2CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTAzICAgICAgICAgICAgICAweDMxRjcKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81MDQgICAgICAgICAgICAgIDB4MzFGOAorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUwNSAgICAgICAgICAgICAgMHgzMUY5CisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTA2ICAgICAgICAgICAgICAweDMxRkEKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81MDcgICAgICAgICAgICAgIDB4MzFGQgorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUwOCAgICAgICAgICAgICAgMHgzMUZDCisjZGVmaW5lIFdNODk5Nl9XUklURV9TRVFVRU5DRVJfNTA5ICAgICAgICAgICAgICAweDMxRkQKKyNkZWZpbmUgV004OTk2X1dSSVRFX1NFUVVFTkNFUl81MTAgICAgICAgICAgICAgIDB4MzFGRQorI2RlZmluZSBXTTg5OTZfV1JJVEVfU0VRVUVOQ0VSXzUxMSAgICAgICAgICAgICAgMHgzMUZGCisKKyNkZWZpbmUgV004OTk2X1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDcwNgorI2RlZmluZSBXTTg5OTZfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzMUZGCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjAgKDB4MDApIC0gU29mdHdhcmUgUmVzZXQKKyAqLworI2RlZmluZSBXTTg5OTZfU1dfUkVTRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfU1dfUkVTRVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfU1dfUkVTRVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBTV19SRVNFVCAtIFsxNTowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfTUlDQjJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IxX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IxX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9CR19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJHX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQkdfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCR19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0JHX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9CR19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJHX0VOQSAqLworCisvKgorICogUjIgKDB4MDIpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKKyAqLworI2RlZmluZSBXTTg5OTZfT1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X09QQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfT1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0lOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTZfSU5MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9JTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0lOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTZfSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9JTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0lOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTZfSU5SX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRU5BICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBQb3dlciBNYW5hZ2VtZW50ICgzKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRE1JQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRE1JQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRE1JQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRE1JQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRE1JQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9ETUlDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9FTkEgKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDQpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9FTkEgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMlJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4xX0VOQV9NQVNLICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTjFfRU5BX1NISUZUICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJSWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0VOQSAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyUlhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTjBfRU5BX01BU0sgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJSWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogQUlGMlJYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjVfRU5BICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFSWF9DSEFONV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMVJYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU41X0VOQV9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxUlhfQ0hBTjVfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjVfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFONV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONF9FTkEgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMVJYX0NIQU40X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X0VOQV9NQVNLICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxUlhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjRfRU5BX1NISUZUICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFSWF9DSEFONF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU40X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4zX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxUlhfQ0hBTjNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFSWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOM19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4zX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4zX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjJfRU5BICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFSWF9DSEFOMl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4yX0VOQV9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxUlhfQ0hBTjJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMV9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxUlhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjFfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4wX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxUlhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfRU5BX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4wX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjBfRU5BICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBQb3dlciBNYW5hZ2VtZW50ICg1KQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERTUDJUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfREFDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfREFDMlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfREFDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfREFDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfREFDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX0VOQSAqLworCisvKgorICogUjYgKDB4MDYpIC0gUG93ZXIgTWFuYWdlbWVudCAoNikKKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogQUlGMlRYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJUWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMlRYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBBSUYyVFhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9FTkEgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMVRYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU41X0VOQV9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxVFhfQ0hBTjVfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjVfRU5BX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFUWF9DSEFONV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU41X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0VOQSAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxVFhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjRfRU5BX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFUWF9DSEFONF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogQUlGMVRYX0NIQU40X0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjRfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfRU5BICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOM19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMVRYX0NIQU4zX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4zX0VOQV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOM19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9FTkEgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4yX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFhfQ0hBTjJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjJfRU5BX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFUWF9DSEFOMl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4yX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjFfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWF9DSEFOMV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4xX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9DSEFOMF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYX0NIQU4wX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4wX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjBfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMF9FTkEgKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDcpCisgKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyX0ZOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRE1JQzJfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRE1JQzJfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogRE1JQzJfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMyX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxX0ZOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRE1JQzFfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRE1JQzFfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRE1JQzFfRk4gKi8KKyNkZWZpbmUgV004OTk2X0RNSUMxX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzFfRk4gKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDJSX0VOQSAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQURDX0RNSUNfRFNQMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19EU1AyUl9FTkFfTUFTSyAgICAgICAgICAweDAwODAgIC8qIEFEQ19ETUlDX0RTUDJSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfRFNQMlJfRU5BX1NISUZUICAgICAgICAgICAgICA3ICAvKiBBRENfRE1JQ19EU1AyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDJSX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDX0RNSUNfRFNQMlJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19EU1AyTF9FTkEgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFEQ19ETUlDX0RTUDJMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfRFNQMkxfRU5BX01BU0sgICAgICAgICAgMHgwMDQwICAvKiBBRENfRE1JQ19EU1AyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDJMX0VOQV9TSElGVCAgICAgICAgICAgICAgNiAgLyogQURDX0RNSUNfRFNQMkxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19EU1AyTF9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQ19ETUlDX0RTUDJMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfU1JDMl9NQVNLICAgICAgICAgICAgICAgMHgwMDMwICAvKiBBRENfRE1JQ19TUkMyIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX1NSQzJfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDX0RNSUNfU1JDMiAtIFs1OjRdICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19TUkMyX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19ETUlDX1NSQzIgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfRFNQMVJfRU5BICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBRENfRE1JQ19EU1AxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDFSX0VOQV9NQVNLICAgICAgICAgIDB4MDAwOCAgLyogQURDX0RNSUNfRFNQMVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19EU1AxUl9FTkFfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIEFEQ19ETUlDX0RTUDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfRFNQMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBRENfRE1JQ19EU1AxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDFMX0VOQSAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0RNSUNfRFNQMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19EU1AxTF9FTkFfTUFTSyAgICAgICAgICAweDAwMDQgIC8qIEFEQ19ETUlDX0RTUDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfRFNQMUxfRU5BX1NISUZUICAgICAgICAgICAgICAyICAvKiBBRENfRE1JQ19EU1AxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX0RTUDFMX0VOQV9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDX0RNSUNfRFNQMUxfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BRENfRE1JQ19TUkMxX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFEQ19ETUlDX1NSQzEgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTZfQURDX0RNSUNfU1JDMV9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBRENfRE1JQ19TUkMxIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FEQ19ETUlDX1NSQzFfV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0RNSUNfU1JDMSAtIFsxOjBdICovCisKKy8qCisgKiBSOCAoMHgwOCkgLSBQb3dlciBNYW5hZ2VtZW50ICg4KQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIEFJRjJUWF9TUkMgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBBSUYyVFhfU1JDIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMlRYX1NSQyAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJSWF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRFNQMlJYX1NSQyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyUlhfU1JDICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYX1NSQyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhfU1JDICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX1NSQyAqLworCisvKgorICogUjE2ICgweDEwKSAtIExlZnQgTGluZSBJbnB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5Nl9JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTZfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0lOMUxfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTZfSU4xTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5Nl9JTjFMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk2X0lOMUxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTZfSU4xTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5Nl9JTjFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk2X0lOMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xTF9WT0wgLSBbNDowXSAqLworCisvKgorICogUjE3ICgweDExKSAtIFJpZ2h0IExpbmUgSW5wdXQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0lOMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5Nl9JTjFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTZfSU4xX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0lOMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5Nl9JTjFSX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0lOMVJfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTZfSU4xUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5Nl9JTjFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0lOMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4xUl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfSU4xUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5Nl9JTjFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxOCAoMHgxMikgLSBMaW5lIElucHV0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5OTZfSU5MX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBJTkxfTU9ERSAtIFszOjJdICovCisjZGVmaW5lIFdNODk5Nl9JTkxfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElOTF9NT0RFIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTk2X0lOTF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU5MX01PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTZfSU5SX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBJTlJfTU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9JTlJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOUl9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X0lOUl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU5SX01PREUgLSBbMTowXSAqLworCisvKgorICogUjIxICgweDE1KSAtIERBQzEgSFBPVVQxIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5Nl9EQUMxUl9IUE9VVDFSX1ZPTF9NQVNLICAgICAgICAgICAweDAwRjAgIC8qIERBQzFSX0hQT1VUMVJfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX0hQT1VUMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgNCAgLyogREFDMVJfSFBPVVQxUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTZfREFDMVJfSFBPVVQxUl9WT0xfV0lEVEggICAgICAgICAgICAgICA0ICAvKiBEQUMxUl9IUE9VVDFSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAweDAwMEYgIC8qIERBQzFMX0hQT1VUMUxfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzFMX0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgMCAgLyogREFDMUxfSFBPVVQxTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfREFDMUxfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICA0ICAvKiBEQUMxTF9IUE9VVDFMX1ZPTCAtIFszOjBdICovCisKKy8qCisgKiBSMjIgKDB4MTYpIC0gREFDMiBIUE9VVDIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX0hQT1VUMlJfVk9MX01BU0sgICAgICAgICAgIDB4MDBGMCAgLyogREFDMlJfSFBPVVQyUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTZfREFDMlJfSFBPVVQyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBEQUMyUl9IUE9VVDJSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9EQUMyUl9IUE9VVDJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzJSX0hQT1VUMlJfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzJMX0hQT1VUMkxfVk9MX01BU0sgICAgICAgICAgIDB4MDAwRiAgLyogREFDMkxfSFBPVVQyTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfREFDMkxfSFBPVVQyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQUMyTF9IUE9VVDJMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9IUE9VVDJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDQgIC8qIERBQzJMX0hQT1VUMkxfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIyNCAoMHgxOCkgLSBEQUMxIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMUxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQUMxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gREFDMSBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfREFDMVJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMxUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMVJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBEQUMyIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQUMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gREFDMiBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfREFDMlJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMyUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTZfREFDMlJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RBQzJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyOCAoMHgxQykgLSBPdXRwdXQxIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEhQT1VUMUxfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9VVDFMX1ZPTCAtIFszOjBdICovCisKKy8qCisgKiBSMjkgKDB4MUQpIC0gT3V0cHV0MSBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMVJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQxUl9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDFSX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMVJfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIzMCAoMHgxRSkgLSBPdXRwdXQyIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDJMX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMkxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQyTF9aQyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJMX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEhQT1VUMkxfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQyTF9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9VVDJMX1ZPTCAtIFszOjBdICovCisKKy8qCisgKiBSMzEgKDB4MUYpIC0gT3V0cHV0MiBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTZfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMlJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQyUl9aQyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDJSX1pDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMlJfWkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogSFBPVVQyUl9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVDJSX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMlJfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIzMiAoMHgyMCkgLSBNSUNCSUFTICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMV9SQVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JQ0IxX1JBVEUgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IxX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjFfUkFURSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBNSUNCMV9SQVRFICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX1JBVEUgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IxX01PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDQjFfTU9ERSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMV9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQ0IxX01PREUgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IxX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfTU9ERSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBFICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUNCMV9MVkwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTZfTUlDQjFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9ESVNDSCAqLworCisvKgorICogUjMzICgweDIxKSAtIE1JQ0JJQVMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IyX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjJfUkFURSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjJfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBNSUNCMl9SQVRFICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JQ0IyX1JBVEUgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IyX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfUkFURSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMl9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IyX01PREUgKi8KKyNkZWZpbmUgV004OTk2X01JQ0IyX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDQjJfTU9ERSAqLworI2RlZmluZSBXTTg5OTZfTUlDQjJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEUgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0IyX0xWTCAtIFszOjFdICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5Nl9NSUNCMl9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0RJU0NIICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gTERPIDEKKyAqLworI2RlZmluZSBXTTg5OTZfTERPMV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMRE8xX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0xETzFfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTERPMV9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9MRE8xX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzFfTU9ERSAqLworI2RlZmluZSBXTTg5OTZfTERPMV9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0xETzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0xETzFfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0xETzFfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTERPMV9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0xETzFfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTZfTERPMV9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX0RJU0NIICovCisjZGVmaW5lIFdNODk5Nl9MRE8xX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk2X0xETzFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9ESVNDSCAqLworCisvKgorICogUjQxICgweDI5KSAtIExETyAyCisgKi8KKyNkZWZpbmUgV004OTk2X0xETzJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExETzJfTU9ERSAqLworI2RlZmluZSBXTTg5OTZfTERPMl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8yX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0xETzJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUUgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExETzJfVlNFTCAtIFs0OjFdICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk2X0xETzJfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTZfTERPMl9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8yX0RJU0NIICovCisjZGVmaW5lIFdNODk5Nl9MRE8yX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRElTQ0ggKi8KKworLyoKKyAqIFI0OCAoMHgzMCkgLSBBY2Nlc3NvcnkgRGV0ZWN0IE1vZGUgMQorICovCisjZGVmaW5lIFdNODk5Nl9KRF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEpEX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTZfSkRfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBKRF9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X0pEX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSkRfTU9ERSAtIFsxOjBdICovCisKKy8qCisgKiBSNDkgKDB4MzEpIC0gQWNjZXNzb3J5IERldGVjdCBNb2RlIDIKKyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxRkJfU1JDICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFGQl9TUkMgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUZCX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQxRkJfU1JDICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFGQl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQT1VUMUZCX1NSQyAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxRkJfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFGQl9TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDRF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfQklBU19TUkMgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9CSUFTX1NSQyAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9CSUFTX1NSQ19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNEX0JJQVNfU1JDICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0JJQVNfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfQklBU19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9CSUFTX1NSQyAqLworCisvKgorICogUjUyICgweDM0KSAtIEhlYWRwaG9uZSBEZXRlY3QgMQorICovCisjZGVmaW5lIFdNODk5Nl9IUF9IT0xEVElNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwRTAgIC8qIEhQX0hPTERUSU1FIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004OTk2X0hQX0hPTERUSU1FX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBfSE9MRFRJTUUgLSBbNzo1XSAqLworI2RlZmluZSBXTTg5OTZfSFBfSE9MRFRJTUVfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBIUF9IT0xEVElNRSAtIFs3OjVdICovCisjZGVmaW5lIFdNODk5Nl9IUF9DTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEhQX0NMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTZfSFBfQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBIUF9DTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk2X0hQX0NMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBfQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9IUF9TVEVQX1NJWkUgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQX1NURVBfU0laRSAqLworI2RlZmluZSBXTTg5OTZfSFBfU1RFUF9TSVpFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUF9TVEVQX1NJWkUgKi8KKyNkZWZpbmUgV004OTk2X0hQX1NURVBfU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfU1RFUF9TSVpFICovCisjZGVmaW5lIFdNODk5Nl9IUF9TVEVQX1NJWkVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX1NURVBfU0laRSAqLworI2RlZmluZSBXTTg5OTZfSFBfUE9MTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUF9QT0xMICovCisjZGVmaW5lIFdNODk5Nl9IUF9QT0xMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQX1BPTEwgKi8KKyNkZWZpbmUgV004OTk2X0hQX1BPTExfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBfUE9MTCAqLworI2RlZmluZSBXTTg5OTZfSFBfUE9MTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9QT0xMICovCisKKy8qCisgKiBSNTMgKDB4MzUpIC0gSGVhZHBob25lIERldGVjdCAyCisgKi8KKyNkZWZpbmUgV004OTk2X0hQX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBfRE9ORSAqLworI2RlZmluZSBXTTg5OTZfSFBfRE9ORV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUF9ET05FICovCisjZGVmaW5lIFdNODk5Nl9IUF9ET05FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQX0RPTkUgKi8KKyNkZWZpbmUgV004OTk2X0hQX0RPTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBfRE9ORSAqLworI2RlZmluZSBXTTg5OTZfSFBfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBIUF9MVkwgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTZfSFBfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUF9MVkwgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTZfSFBfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBIUF9MVkwgLSBbNjowXSAqLworCisvKgorICogUjU2ICgweDM4KSAtIE1pYyBEZXRlY3QgMQorICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0JJQVNfU1RBUlRUSU1FX01BU0sgICAgICAgICAweEYwMDAgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0JJQVNfU1RBUlRUSU1FX1NISUZUICAgICAgICAgICAgMTIgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0JJQVNfU1RBUlRUSU1FX1dJRFRIICAgICAgICAgICAgIDQgIC8qIE1JQ0RfQklBU19TVEFSVFRJTUUgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIE1JQ0RfUkFURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSUNEX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDRF9SQVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0RCVElNRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfREJUSU1FICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0RCVElNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfREJUSU1FICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0RCVElNRV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfREJUSU1FICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0RCVElNRV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfREJUSU1FICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRU5BICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRU5BICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfRU5BICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfRU5BICovCisKKy8qCisgKiBSNTcgKDB4MzkpIC0gTWljIERldGVjdCAyCisgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfTFZMX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfTFZMX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfTFZMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlDRF9MVkxfU0VMIC0gWzc6MF0gKi8KKworLyoKKyAqIFI1OCAoMHgzQSkgLSBNaWMgRGV0ZWN0IDMKKyAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwN0ZDICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNSUNEX0xWTCAtIFsxMDoyXSAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1ZBTElEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RfVkFMSUQgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfVkFMSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9WQUxJRCAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9WQUxJRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX1ZBTElEICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfU1RTICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1NUU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfU1RTICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0RfU1RTICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfU1RTICovCisKKy8qCisgKiBSNjQgKDB4NDApIC0gQ2hhcmdlIFB1bXAgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0NQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODk5Nl9DUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0NQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRU5BICovCisKKy8qCisgKiBSNjUgKDB4NDEpIC0gQ2hhcmdlIFB1bXAgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0NQX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk2X0NQX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk2X0NQX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQ1BfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk2X0NQX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRElTQ0ggKi8KKworLyoKKyAqIFI4MCAoMHg1MCkgLSBEQyBTZXJ2byAoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzMgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzNfTUFTSyAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzNfU0hJRlQgICAgICAgICAgICAgICAgICAzICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzNfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzIgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzJfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzJfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTZfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjgxICgweDUxKSAtIERDIFNlcnZvICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfM19NQVNLICAgICAgICAgICAweDgwMDAgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfM19TSElGVCAgICAgICAgICAgICAgMTUgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMiAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMl9NQVNLICAgICAgICAgICAweDQwMDAgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMl9TSElGVCAgICAgICAgICAgICAgMTQgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMSAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMV9NQVNLICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMV9TSElGVCAgICAgICAgICAgICAgMTMgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMCAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMF9NQVNLICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMF9TSElGVCAgICAgICAgICAgICAgMTIgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TSU5HTEVfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMyAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfM19NQVNLICAgICAgICAgICAweDA4MDAgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfM19TSElGVCAgICAgICAgICAgICAgMTEgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfM19XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMiAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMl9NQVNLICAgICAgICAgICAweDA0MDAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMl9TSElGVCAgICAgICAgICAgICAgMTAgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMSAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMV9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMV9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TRVJJRVNfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzMgICAgICAgICAgICAgICAweDAwODAgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8zX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTk2X0RDU19UUklHX1NUQVJUVVBfM19TSElGVCAgICAgICAgICAgICAgNyAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzNfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8yICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTk2X0RDU19UUklHX1NUQVJUVVBfMl9NQVNLICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzJfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8yX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTk2X0RDU19UUklHX1NUQVJUVVBfMSAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzFfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTk2X0RDU19UUklHX1NUQVJUVVBfMV9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTk2X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVFJJR19TVEFSVFVQXzBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzMgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzNfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzNfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMyAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzIgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzJfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzJfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMiAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzEgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzFfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzBfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzBfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTZfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworCisvKgorICogUjgyICgweDUyKSAtIERDIFNlcnZvICgzKQorICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVElNRVJfUEVSSU9EXzIzX01BU0sgICAgICAgICAweDBGMDAgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19USU1FUl9QRVJJT0RfMjNfU0hJRlQgICAgICAgICAgICAgOCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RJTUVSX1BFUklPRF8yM19XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfVElNRVJfUEVSSU9EXzAxX01BU0sgICAgICAgICAweDAwMEYgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfRENTX1RJTUVSX1BFUklPRF8wMV9TSElGVCAgICAgICAgICAgICAwICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19USU1FUl9QRVJJT0RfMDFfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisKKy8qCisgKiBSODQgKDB4NTQpIC0gREMgU2Vydm8gKDUpCisgKi8KKyNkZWZpbmUgV004OTk2X0RDU19TRVJJRVNfTk9fMjNfTUFTSyAgICAgICAgICAgIDB4N0YwMCAgLyogRENTX1NFUklFU19OT18yMyAtIFsxNDo4XSAqLworI2RlZmluZSBXTTg5OTZfRENTX1NFUklFU19OT18yM19TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzE0OjhdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfU0VSSUVTX05PXzIzX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbMTQ6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19TRVJJRVNfTk9fMDFfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTZfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKworLyoKKyAqIFI4NSAoMHg1NSkgLSBEQyBTZXJ2byAoNikKKyAqLworI2RlZmluZSBXTTg5OTZfRENTX0RBQ19XUl9WQUxfM19NQVNLICAgICAgICAgICAgMHhGRjAwICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfREFDX1dSX1ZBTF8zX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19EQUNfV1JfVkFMXzNfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfRENTX0RBQ19XUl9WQUxfMl9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19EQUNfV1JfVkFMXzJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfREFDX1dSX1ZBTF8yX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworCisvKgorICogUjg2ICgweDU2KSAtIERDIFNlcnZvICg3KQorICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfREFDX1dSX1ZBTF8xX01BU0sgICAgICAgICAgICAweEZGMDAgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19EQUNfV1JfVkFMXzFfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfREFDX1dSX1ZBTF8wX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfRENTX0RBQ19XUl9WQUxfMF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19EQUNfV1JfVkFMXzBfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisKKy8qCisgKiBSODcgKDB4NTcpIC0gREMgU2Vydm8gUmVhZGJhY2sgMAorICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgICAgICAgICAgICAweDBGMDAgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19DQUxfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTZfRENTX0NBTF9DT01QTEVURV9XSURUSCAgICAgICAgICAgICAgICA0ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfREFDX1dSX0NPTVBMRVRFX01BU0sgICAgICAgICAweDAwRjAgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTZfRENTX0RBQ19XUl9DT01QTEVURV9TSElGVCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19EQUNfV1JfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfU1RBUlRVUF9DT01QTEVURV9NQVNLICAgICAgICAweDAwMEYgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RDU19TVEFSVFVQX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgMCAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfRENTX1NUQVJUVVBfQ09NUExFVEVfV0lEVEggICAgICAgICAgICA0ICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisKKy8qCisgKiBSOTYgKDB4NjApIC0gQW5hbG9ndWUgSFAgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxTF9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMUxfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFMX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMVJfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDFSX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQxUl9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLworCisvKgorICogUjk3ICgweDYxKSAtIEFuYWxvZ3VlIEhQICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDJMX09VVFAgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMkxfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQyTF9PVVRQICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJMX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMkxfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDJMX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDJMX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBIUE9VVDJMX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyTF9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJMX0RMWSAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQyUl9PVVRQICovCisjZGVmaW5lIFdNODk5Nl9IUE9VVDJSX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQT1VUMlJfT1VUUCAqLworI2RlZmluZSBXTTg5OTZfSFBPVVQyUl9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDJSX09VVFAgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQyUl9ETFkgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQyUl9ETFkgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9ETFkgKi8KKyNkZWZpbmUgV004OTk2X0hQT1VUMlJfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyUl9ETFkgKi8KKworLyoKKyAqIFIyNTYgKDB4MTAwKSAtIENoaXAgUmV2aXNpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQ0hJUF9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBDSElQX1JFViAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9DSElQX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0NISVBfUkVWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0hJUF9SRVYgLSBbMzowXSAqLworCisvKgorICogUjI1NyAoMHgxMDEpIC0gQ29udHJvbCBJbnRlcmZhY2UgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0FVVE9fSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk2X0FVVE9fSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk2X0FVVE9fSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk2X0FVVE9fSU5DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT19JTkMgKi8KKworLyoKKyAqIFIyNzIgKDB4MTEwKSAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5OTZfV1NFUV9BQk9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0FCT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTZfV1NFUV9TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTZfV1NFUV9TVEFSVF9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfU1RBUlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNjowXSAqLworCisvKgorICogUjI3MyAoMHgxMTEpIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTZfV1NFUV9CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfQlVTWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0NVUlJFTlRfSU5ERVhfTUFTSyAgICAgICAgICAweDAwN0YgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0NVUlJFTlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgIDcgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisKKy8qCisgKiBSNTEyICgweDIwMCkgLSBBSUYgQ2xvY2tpbmcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X1NZU0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogU1lTQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNZU0NMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTZfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTWVNDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk2X1NZU0NMS19JTlYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU1lTQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfU1lTQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTWVNDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNZU0NMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X1NZU0NMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfU1lTQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTWVNDTEtfRElWICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0NMS19ESVYgKi8KKyNkZWZpbmUgV004OTk2X1NZU0NMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTZfU1lTQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfRElWICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NZU0NMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfU1lTQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTWVNDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19FTkEgKi8KKworLyoKKyAqIFI1MTMgKDB4MjAxKSAtIEFJRiBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMl9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBEU1AyX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMV9ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBEU1AxX0RJViAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFfRElWIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMV9ESVYgLSBbMTowXSAqLworCisvKgorICogUjUyMCAoMHgyMDgpIC0gQ2xvY2tpbmcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0xGQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEZDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9MRkNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExGQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfTEZDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0xGQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEZDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9UT0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUZDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUZDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRkNMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRkNMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9TWVNEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NZU0RTUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTZfU1lTRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5Nl9TWVNEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0RTUENMS19FTkEgKi8KKworLyoKKyAqIFI1MjEgKDB4MjA5KSAtIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9UT0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDA3MDAgIC8qIFRPQ0xLX0RJViAtIFsxMDo4XSAqLworI2RlZmluZSBXTTg5OTZfVE9DTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBUT0NMS19ESVYgLSBbMTA6OF0gKi8KKyNkZWZpbmUgV004OTk2X1RPQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5Nl9EQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9EQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9EQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERCQ0xLX0RJViAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9PUENMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5Nl9PUENMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5Nl9PUENMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE9QQ0xLX0RJViAtIFsyOjBdICovCisKKy8qCisgKiBSNTI4ICgweDIxMCkgLSBBSUYgUmF0ZQorICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfUkFURSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19SQVRFICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19SQVRFICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNZU0NMS19SQVRFICovCisjZGVmaW5lIFdNODk5Nl9TWVNDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19SQVRFICovCisKKy8qCisgKiBSNTQ0ICgweDIyMCkgLSBGTEwgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfRkxMX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRkxMX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRkxMX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRkxMX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODk5Nl9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCisKKy8qCisgKiBSNTQ1ICgweDIyMSkgLSBGTEwgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTZfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5Nl9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5Nl9GTExfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjU0NiAoMHgyMjIpIC0gRkxMIENvbnRyb2wgKDMpCisgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9USEVUQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMX1RIRVRBIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9GTExfVEhFVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9USEVUQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRkxMX1RIRVRBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfVEhFVEEgLSBbMTU6MF0gKi8KKworLyoKKyAqIFI1NDcgKDB4MjIzKSAtIEZMTCBDb250cm9sICg0KQorICovCisjZGVmaW5lIFdNODk5Nl9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5Nl9GTExfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5Nl9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5Nl9GTExfTE9PUF9HQUlOX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTF9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfRkxMX0xPT1BfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MT09QX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0xPT1BfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSNTQ4ICgweDIyNCkgLSBGTEwgQ29udHJvbCAoNSkKKyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQ19OQ09fVkFMX01BU0sgICAgICAgICAgICAgMHgxRjgwICAvKiBGTExfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5Nl9GTExfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQ19OQ08gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQ19OQ09fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0ZSQ19OQ09fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTZfRkxMX1JFRkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTExfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9SRUZDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTZfRkxMX1JFRl9GUkVRICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9SRUZfRlJFUV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX1JFRl9GUkVRICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGX0ZSRVFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZfRlJFUSAqLworI2RlZmluZSBXTTg5OTZfRkxMX1JFRl9GUkVRX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9SRUZDTEtfU1JDX01BU0sgICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMX1JFRkNMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTZfRkxMX1JFRkNMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBGTExfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFI1NDkgKDB4MjI1KSAtIEZMTCBDb250cm9sICg2KQorICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGQ0xLX1NSQ19TVFNfTUFTSyAgICAgICAgICAweDAwMEMgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGQ0xLX1NSQ19TVFNfU0hJRlQgICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCisjZGVmaW5lIFdNODk5Nl9GTExfUkVGQ0xLX1NSQ19TVFNfV0lEVEggICAgICAgICAgICAgIDIgIC8qIEZMTF9SRUZDTEtfU1JDX1NUUyAtIFszOjJdICovCisjZGVmaW5lIFdNODk5Nl9GTExfU1dJVENIX0NMSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCisjZGVmaW5lIFdNODk5Nl9GTExfU1dJVENIX0NMS19NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCisjZGVmaW5lIFdNODk5Nl9GTExfU1dJVENIX0NMS19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCisjZGVmaW5lIFdNODk5Nl9GTExfU1dJVENIX0NMS19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9TV0lUQ0hfQ0xLICovCisKKy8qCisgKiBSNTUwICgweDIyNikgLSBGTEwgRUZTIDEKKyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0xBTUJEQV9NQVNLICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfTEFNQkRBIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9GTExfTEFNQkRBX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9MQU1CREEgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MQU1CREFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMX0xBTUJEQSAtIFsxNTowXSAqLworCisvKgorICogUjU1MSAoMHgyMjcpIC0gRkxMIEVGUyAyCisgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MRlNSX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MRlNSX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MRlNSX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0xGU1JfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9FRlNfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VGU19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9FRlNfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VGU19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9FRlNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VGU19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9FRlNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0VGU19FTkEgKi8KKworLyoKKyAqIFI3NjggKDB4MzAwKSAtIEFJRjEgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX1RSSSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX1RSSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFJRjFfRk1UIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMV9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMV9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxX0ZNVCAtIFsxOjBdICovCisKKy8qCisgKiBSNzY5ICgweDMwMSkgLSBBSUYxIEJDTEsKKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMV9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX0JDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMV9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX0JDTEtfRlJDICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFfQkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19GUkNfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMV9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMV9CQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxX0JDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX0JDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfQkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19NU1RSICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19NU1RSX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMV9CQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9CQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFfQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQUlGMV9CQ0xLX0RJViAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxX0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFfQkNMS19ESVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMV9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxX0JDTEtfRElWIC0gWzM6MF0gKi8KKworLyoKKyAqIFI3NzAgKDB4MzAyKSAtIEFJRjEgVFggTFJDTEsoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYxVFhfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjc3MSAoMHgzMDMpIC0gQUlGMSBUWCBMUkNMSygyKQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfTU9ERSAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfTU9ERV9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfTU9ERV9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfTU9ERV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxVFhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9MUkNMS19GUkMgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfTFJDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9MUkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVRYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX01TVFIgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX01TVFJfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0xSQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxVFhfTFJDTEtfTVNUUiAqLworCisvKgorICogUjc3MiAoMHgzMDQpIC0gQUlGMSBSWCBMUkNMSygxKQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFSWF9SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzczICgweDMwNSkgLSBBSUYxIFJYIExSQ0xLKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9MUkNMS19JTlYgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMVJYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFSWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxUlhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMVJYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxUlhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfTVNUUiAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfTVNUUl9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfTFJDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9MUkNMS19NU1RSICovCisKKy8qCisgKiBSNzc0ICgweDMwNikgLSBBSUYxVFggRGF0YSBDb25maWd1cmF0aW9uICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAweEZGMDAgIC8qIEFJRjFUWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxVFhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVRYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfU0xPVF9MRU5fTUFTSyAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfU0xPVF9MRU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfU0xPVF9MRU5fV0lEVEggICAgICAgICAgICAgICAgIDggIC8qIEFJRjFUWF9TTE9UX0xFTiAtIFs3OjBdICovCisKKy8qCisgKiBSNzc1ICgweDMwNykgLSBBSUYxVFggRGF0YSBDb25maWd1cmF0aW9uICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfREFUX1RSSSAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfREFUX1RSSV9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfREFUX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFUWF9EQVRfVFJJICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfREFUX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9EQVRfVFJJICovCisKKy8qCisgKiBSNzc2ICgweDMwOCkgLSBBSUYxUlggRGF0YSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9XTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkYwMCAgLyogQUlGMVJYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFSWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxUlhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9TTE9UX0xFTl9NQVNLICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9TTE9UX0xFTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9TTE9UX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMVJYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NzcgKDB4MzA5KSAtIEFJRjFUWCBDaGFubmVsIDAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4wX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzc4ICgweDMwQSkgLSBBSUYxVFggQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjFfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc3OSAoMHgzMEIpIC0gQUlGMVRYIENoYW5uZWwgMiBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOMl9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4yX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjJfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODAgKDB4MzBDKSAtIEFJRjFUWCBDaGFubmVsIDMgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFUWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFUWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFUWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFOM19TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU4zX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzgxICgweDMwRCkgLSBBSUYxVFggQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxVFhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxVFhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU40X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjRfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFUWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4MiAoMHgzMEUpIC0gQUlGMVRYIENoYW5uZWwgNSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVRYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVRYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWF9DSEFONV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVRYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYX0NIQU41X1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFhfQ0hBTjVfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFUWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODMgKDB4MzBGKSAtIEFJRjFSWCBDaGFubmVsIDAgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMF9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFOMF9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMF9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4wX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzg0ICgweDMxMCkgLSBBSUYxUlggQ2hhbm5lbCAxIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjFfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjFfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjFfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjFfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMV9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4NSAoMHgzMTEpIC0gQUlGMVJYIENoYW5uZWwgMiBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4yX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4yX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU4yX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4yX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjJfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOMl9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODYgKDB4MzEyKSAtIEFJRjFSWCBDaGFubmVsIDMgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOM19EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOM19TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjFSWF9DSEFOM19TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjFSWF9DSEFOM19TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOM19TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4zX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjNfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSNzg3ICgweDMxMykgLSBBSUYxUlggQ2hhbm5lbCA0IENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjRfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjRfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYxUlhfQ0hBTjRfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjRfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFONF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU40X1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjc4OCAoMHgzMTQpIC0gQUlGMVJYIENoYW5uZWwgNSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU41X0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU41X1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMVJYX0NIQU41X1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMVJYX0NIQU41X1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU41X1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjVfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjFSWF9DSEFONV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3ODkgKDB4MzE1KSAtIEFJRjFSWCBNb25vIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X01PTk9fTU9ERSAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxUlhfQ0hBTjRfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjRfTU9OT19NT0RFX01BU0sgICAgICAweDAwMDQgIC8qIEFJRjFSWF9DSEFONF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFONF9NT05PX01PREVfU0hJRlQgICAgICAgICAgMiAgLyogQUlGMVJYX0NIQU40X01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU40X01PTk9fTU9ERV9XSURUSCAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjRfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjJfTU9OT19NT0RFICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFSWF9DSEFOMl9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMl9NT05PX01PREVfTUFTSyAgICAgIDB4MDAwMiAgLyogQUlGMVJYX0NIQU4yX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4yX01PTk9fTU9ERV9TSElGVCAgICAgICAgICAxICAvKiBBSUYxUlhfQ0hBTjJfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjJfTU9OT19NT0RFX1dJRFRIICAgICAgICAgIDEgIC8qIEFJRjFSWF9DSEFOMl9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMF9NT05PX01PREUgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVJYX0NIQU4wX01PTk9fTU9ERV9NQVNLICAgICAgMHgwMDAxICAvKiBBSUYxUlhfQ0hBTjBfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYxUlhfQ0hBTjBfTU9OT19NT0RFX1NISUZUICAgICAgICAgIDAgIC8qIEFJRjFSWF9DSEFOMF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFSWF9DSEFOMF9NT05PX01PREVfV0lEVEggICAgICAgICAgMSAgLyogQUlGMVJYX0NIQU4wX01PTk9fTU9ERSAqLworCisvKgorICogUjc5NCAoMHgzMUEpIC0gQUlGMVRYIFRlc3QKKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYNDVfRElUSEVSX0VOQSAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxVFg0NV9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFg0NV9ESVRIRVJfRU5BX01BU0sgICAgICAgICAweDAwMDQgIC8qIEFJRjFUWDQ1X0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWDQ1X0RJVEhFUl9FTkFfU0hJRlQgICAgICAgICAgICAgMiAgLyogQUlGMVRYNDVfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYNDVfRElUSEVSX0VOQV9XSURUSCAgICAgICAgICAgICAxICAvKiBBSUYxVFg0NV9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFgyM19ESVRIRVJfRU5BICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFUWDIzX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWDIzX0RJVEhFUl9FTkFfTUFTSyAgICAgICAgIDB4MDAwMiAgLyogQUlGMVRYMjNfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYMjNfRElUSEVSX0VOQV9TSElGVCAgICAgICAgICAgICAxICAvKiBBSUYxVFgyM19ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFgyM19ESVRIRVJfRU5BX1dJRFRIICAgICAgICAgICAgIDEgIC8qIEFJRjFUWDIzX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWDAxX0RJVEhFUl9FTkEgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMVRYMDFfRElUSEVSX0VOQSAqLworI2RlZmluZSBXTTg5OTZfQUlGMVRYMDFfRElUSEVSX0VOQV9NQVNLICAgICAgICAgMHgwMDAxICAvKiBBSUYxVFgwMV9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYxVFgwMV9ESVRIRVJfRU5BX1NISUZUICAgICAgICAgICAgIDAgIC8qIEFJRjFUWDAxX0RJVEhFUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0FJRjFUWDAxX0RJVEhFUl9FTkFfV0lEVEggICAgICAgICAgICAgMSAgLyogQUlGMVRYMDFfRElUSEVSX0VOQSAqLworCisvKgorICogUjgwMCAoMHgzMjApIC0gQUlGMiBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMl9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJfRk1UIC0gWzE6MF0gKi8KKworLyoKKyAqIFI4MDEgKDB4MzIxKSAtIEFJRjIgQkNMSworICovCisjZGVmaW5lIFdNODk5Nl9BSUYyX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfQkNMS19GUkMgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMl9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyX0JDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYyX0JDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJfQkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfQkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9CQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX01TVFIgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX01TVFJfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX01TVFJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0JDTEtfTVNUUiAqLworI2RlZmluZSBXTTg5OTZfQUlGMl9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBSUYyX0JDTEtfRElWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMl9CQ0xLX0RJViAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJfQkNMS19ESVYgLSBbMzowXSAqLworCisvKgorICogUjgwMiAoMHgzMjIpIC0gQUlGMiBUWCBMUkNMSygxKQorICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjJUWF9SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSODAzICgweDMyMykgLSBBSUYyIFRYIExSQ0xLKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19NT0RFICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19NT0RFX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19NT0RFX1NISUZUICAgICAgICAgICAgICAgMyAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19NT0RFX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19JTlYgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMlRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyVFhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJUWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJUWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyVFhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfTVNUUiAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfTVNUUl9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfTVNUUl9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfTFJDTEtfTVNUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9MUkNMS19NU1RSICovCisKKy8qCisgKiBSODA0ICgweDMyNCkgLSBBSUYyIFJYIExSQ0xLKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMlJYX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI4MDUgKDB4MzI1KSAtIEFJRjIgUlggTFJDTEsoMikKKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJSWF9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMlJYX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfTFJDTEtfRlJDICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19GUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMlJYX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyUlhfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfTFJDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJSWF9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19NU1RSICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19NU1RSX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19NU1RSX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9MUkNMS19NU1RSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMlJYX0xSQ0xLX01TVFIgKi8KKworLyoKKyAqIFI4MDYgKDB4MzI2KSAtIEFJRjJUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9XTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4RkYwMCAgLyogQUlGMlRYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJUWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyVFhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9TTE9UX0xFTl9NQVNLICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9TTE9UX0xFTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9TTE9UX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlRYX1NMT1RfTEVOIC0gWzc6MF0gKi8KKworLyoKKyAqIFI4MDcgKDB4MzI3KSAtIEFJRjJUWCBEYXRhIENvbmZpZ3VyYXRpb24gKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9EQVRfVFJJICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9EQVRfVFJJX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9EQVRfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMlRYX0RBVF9UUkkgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9EQVRfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMlRYX0RBVF9UUkkgKi8KKworLyoKKyAqIFI4MDggKDB4MzI4KSAtIEFJRjJSWCBEYXRhIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX1dMX01BU0sgICAgICAgICAgICAgICAgICAgMHhGRjAwICAvKiBBSUYyUlhfV0wgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMlJYX1dMIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJSWF9XTCAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX1NMT1RfTEVOX01BU0sgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX1NMT1RfTEVOX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX1NMT1RfTEVOX1dJRFRIICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyUlhfU0xPVF9MRU4gLSBbNzowXSAqLworCisvKgorICogUjgwOSAoMHgzMjkpIC0gQUlGMlRYIENoYW5uZWwgMCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMlRYX0NIQU4wX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4wX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMlRYX0NIQU4wX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMF9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU4wX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjBfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI4MTAgKDB4MzJBKSAtIEFJRjJUWCBDaGFubmVsIDEgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfREFUX0lOViAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfREFUX0lOVl9NQVNLICAgICAgICAweDgwMDAgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfREFUX0lOVl9TSElGVCAgICAgICAgICAgMTUgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfREFUX0lOVl9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9DSEFOMV9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19NQVNLICAgICAgICAweDdFMDAgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU1BBQ0lOR19XSURUSCAgICAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMV9TUEFDSU5HIC0gWzE0OjldICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU0xPVFNfTUFTSyAgICAgICAgICAweDAxQzAgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU0xPVFNfU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU0xPVFNfV0lEVEggICAgICAgICAgICAgIDMgIC8qIEFJRjJUWF9DSEFOMV9TTE9UUyAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVF9NQVNLICAgICAweDAwM0YgIC8qIEFJRjJUWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJUWF9DSEFOMV9TVEFSVF9TTE9UX1NISUZUICAgICAgICAgMCAgLyogQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlRYX0NIQU4xX1NUQVJUX1NMT1RfV0lEVEggICAgICAgICA2ICAvKiBBSUYyVFhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisKKy8qCisgKiBSODExICgweDMyQikgLSBBSUYyUlggQ2hhbm5lbCAwIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0RBVF9JTlYgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0RBVF9JTlZfTUFTSyAgICAgICAgMHg4MDAwICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0RBVF9JTlZfU0hJRlQgICAgICAgICAgIDE1ICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NQQUNJTkdfTUFTSyAgICAgICAgMHg3RTAwICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NQQUNJTkdfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NQQUNJTkdfV0lEVEggICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjBfU1BBQ0lORyAtIFsxNDo5XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NMT1RTX01BU0sgICAgICAgICAgMHgwMUMwICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NMT1RTX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NMT1RTX1dJRFRIICAgICAgICAgICAgICAzICAvKiBBSUYyUlhfQ0hBTjBfU0xPVFMgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1RfTUFTSyAgICAgMHgwMDNGICAvKiBBSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTjBfU1RBUlRfU0xPVF9TSElGVCAgICAgICAgIDAgIC8qIEFJRjJSWF9DSEFOMF9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMF9TVEFSVF9TTE9UX1dJRFRIICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4wX1NUQVJUX1NMT1QgLSBbNTowXSAqLworCisvKgorICogUjgxMiAoMHgzMkMpIC0gQUlGMlJYIENoYW5uZWwgMSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9EQVRfSU5WICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9EQVRfSU5WX01BU0sgICAgICAgIDB4ODAwMCAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9EQVRfSU5WX1NISUZUICAgICAgICAgICAxNSAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMlJYX0NIQU4xX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TUEFDSU5HX01BU0sgICAgICAgIDB4N0UwMCAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TUEFDSU5HX1NISUZUICAgICAgICAgICAgOSAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TUEFDSU5HX1dJRFRIICAgICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4xX1NQQUNJTkcgLSBbMTQ6OV0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TTE9UU19NQVNLICAgICAgICAgIDB4MDFDMCAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TTE9UU19TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TTE9UU19XSURUSCAgICAgICAgICAgICAgMyAgLyogQUlGMlJYX0NIQU4xX1NMT1RTIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMV9TVEFSVF9TTE9UX01BU0sgICAgIDB4MDAzRiAgLyogQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1QgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4xX1NUQVJUX1NMT1RfU0hJRlQgICAgICAgICAwICAvKiBBSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTjFfU1RBUlRfU0xPVF9XSURUSCAgICAgICAgIDYgIC8qIEFJRjJSWF9DSEFOMV9TVEFSVF9TTE9UIC0gWzU6MF0gKi8KKworLyoKKyAqIFI4MTMgKDB4MzJEKSAtIEFJRjJSWCBNb25vIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX01PTk9fTU9ERSAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyUlhfQ0hBTjBfTU9OT19NT0RFICovCisjZGVmaW5lIFdNODk5Nl9BSUYyUlhfQ0hBTjBfTU9OT19NT0RFX01BU0sgICAgICAweDAwMDEgIC8qIEFJRjJSWF9DSEFOMF9NT05PX01PREUgKi8KKyNkZWZpbmUgV004OTk2X0FJRjJSWF9DSEFOMF9NT05PX01PREVfU0hJRlQgICAgICAgICAgMCAgLyogQUlGMlJYX0NIQU4wX01PTk9fTU9ERSAqLworI2RlZmluZSBXTTg5OTZfQUlGMlJYX0NIQU4wX01PTk9fTU9ERV9XSURUSCAgICAgICAgICAxICAvKiBBSUYyUlhfQ0hBTjBfTU9OT19NT0RFICovCisKKy8qCisgKiBSODE1ICgweDMyRikgLSBBSUYyVFggVGVzdAorICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfRElUSEVSX0VOQSAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfRElUSEVSX0VOQV9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfRElUSEVSX0VOQV9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCisjZGVmaW5lIFdNODk5Nl9BSUYyVFhfRElUSEVSX0VOQV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJUWF9ESVRIRVJfRU5BICovCisKKy8qCisgKiBSMTAyNCAoMHg0MDApIC0gRFNQMSBUWCBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxVFhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AxVFhMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFUWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVRYTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMjUgKDB4NDAxKSAtIERTUDEgVFggUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFUWFJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxVFhSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNiAoMHg0MDIpIC0gRFNQMSBSWCBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AxUlhMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMVJYTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMjcgKDB4NDAzKSAtIERTUDEgUlggUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDFSWFJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxUlhSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTA0MCAoMHg0MTApIC0gRFNQMSBUWCBGaWx0ZXJzCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9ORiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMVRYX05GICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfTkZfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERTUDFUWF9ORiAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYX05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEU1AxVFhfTkYgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9ORl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYX05GICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDFUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDFUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERTUDFUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDFUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDFUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDFUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfSFBGX01PREVfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfSFBGX01PREVfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfSFBGX01PREVfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDFUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAweDAwMDcgIC8qIERTUDFUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWF9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYX0hQRl9DVVQgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBEU1AxVFhfSFBGX0NVVCAtIFsyOjBdICovCisKKy8qCisgKiBSMTA1NiAoMHg0MjApIC0gRFNQMSBSWCBGaWx0ZXJzICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDFSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTU9OTyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTU9OT19NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERTUDFSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURVJBVEUgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDFSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AxUlhfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AxUlhfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRFNQMVJYX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERTUDFSWF9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfVU5NVVRFX1JBTVAgKi8KKworLyoKKyAqIFIxMDU3ICgweDQyMSkgLSBEU1AxIFJYIEZpbHRlcnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF8zRF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4M0UwMCAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF8zRF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF8zRF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMVJYXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYXzNEX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AxUlhfM0RfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFSWF8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYXzNEX0VOQSAqLworCisvKgorICogUjEwODggKDB4NDQwKSAtIERTUDEgRFJDICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfUk1TX01BU0sgICAgICAgICAweEY4MDAgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAgMTEgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgIDUgIC8qIERTUDFEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfUEtfTUFTSyAgICAgICAgICAweDA2MDAgIC8qIERTUDFEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgICA5ICAvKiBEU1AxRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAgMiAgLyogRFNQMURSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDFEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDFEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfTU9ERSAgICAgICAgICAgICAweDAwODAgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfTU9ERV9NQVNLICAgICAgICAweDAwODAgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgIDcgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVQgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDFEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19TSUdfREVUX01BU0sgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMURSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9PUF9FTkEgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAgMHgwMDIwICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AxRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AxRFJDX1FSICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1FSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDFEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMURSQ19RUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxRFJDX1FSICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0FOVElDTElQICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTUDFEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfQU5USUNMSVBfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMURSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBEU1AxRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9EUkNfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMVJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9EUkNfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMVJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMVJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWExfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMVRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDFUWExfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBEU1AxVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWExfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMVRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFUWFJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVRYUl9EUkNfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxVFhSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFUWFJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVRYUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxVFhSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDFUWFJfRFJDX0VOQSAqLworCisvKgorICogUjEwODkgKDB4NDQxKSAtIERTUDEgRFJDICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0FUS19NQVNLICAgICAgICAgICAgICAgICAweDFFMDAgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDFEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0RDWV9NQVNLICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIERTUDFEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AxRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMUMgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIERTUDFEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfTUFYR0FJTiAtIFsxOjBdICovCisKKy8qCisgKiBSMTA5MCAoMHg0NDIpIC0gRFNQMSBEUkMgKDMpCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfTkdfTUlOR0FJTl9NQVNLICAgICAgICAgIDB4RjAwMCAgLyogRFNQMURSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgIDEyICAvKiBEU1AxRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgIDQgIC8qIERTUDFEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfTkdfRVhQX01BU0sgICAgICAgICAgICAgIDB4MEMwMCAgLyogRFNQMURSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDFEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBEU1AxRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfUVJfVEhSX01BU0sgICAgICAgICAgICAgIDB4MDMwMCAgLyogRFNQMURSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AxRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfUVJfRENZX01BU0sgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFNQMURSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBEU1AxRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDFEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAzOCAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMURSQ19MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMDkxICgweDQ0MykgLSBEU1AxIERSQyAoNCkKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFX0lQX01BU0sgICAgICAgICAgICAgMHgwN0UwICAvKiBEU1AxRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIERTUDFEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFX09QX01BU0sgICAgICAgICAgICAgMHgwMDFGICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUVfT1AgLSBbNDowXSAqLworCisvKgorICogUjEwOTIgKDB4NDQ0KSAtIERTUDEgRFJDICg1KQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0tORUUyX0lQX01BU0sgICAgICAgICAgICAweDAzRTAgIC8qIERTUDFEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBEU1AxRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX0tORUUyX09QX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIERTUDFEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMURSQ19LTkVFMl9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTE1MiAoMHg0ODApIC0gRFNQMSBSWCBFUSBHYWlucyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AxUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMVJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgMHgwMDNFICAvKiBEU1AxUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMVJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhfRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWF9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhfRVFfRU5BICovCisKKy8qCisgKiBSMTE1MyAoMHg0ODEpIC0gRFNQMSBSWCBFUSBHYWlucyAoMikKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AxUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMVJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDFSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AxUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworCisvKgorICogUjExNTQgKDB4NDgyKSAtIERTUDEgUlggRVEgQmFuZCAxIEEKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNTUgKDB4NDgzKSAtIERTUDEgUlggRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNTYgKDB4NDg0KSAtIERTUDEgUlggRVEgQmFuZCAxIFBHCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU3ICgweDQ4NSkgLSBEU1AxIFJYIEVRIEJhbmQgMiBBCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU4ICgweDQ4NikgLSBEU1AxIFJYIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU5ICgweDQ4NykgLSBEU1AxIFJYIEVRIEJhbmQgMiBDCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYwICgweDQ4OCkgLSBEU1AxIFJYIEVRIEJhbmQgMiBQRworICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MSAoMHg0ODkpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MiAoMHg0OEEpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQgorICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MyAoMHg0OEIpIC0gRFNQMSBSWCBFUSBCYW5kIDMgQworICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NCAoMHg0OEMpIC0gRFNQMSBSWCBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDFSWF9FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjUgKDB4NDhEKSAtIERTUDEgUlggRVEgQmFuZCA0IEEKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNjYgKDB4NDhFKSAtIERTUDEgUlggRVEgQmFuZCA0IEIKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNjcgKDB4NDhGKSAtIERTUDEgUlggRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjggKDB4NDkwKSAtIERTUDEgUlggRVEgQmFuZCA0IFBHCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDFSWF9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AxUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY5ICgweDQ5MSkgLSBEU1AxIFJYIEVRIEJhbmQgNSBBCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTcwICgweDQ5MikgLSBEU1AxIFJYIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTcxICgweDQ5MykgLSBEU1AxIFJYIEVRIEJhbmQgNSBQRworICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDFSWF9FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMVJYX0VRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTI4MCAoMHg1MDApIC0gRFNQMiBUWCBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyVFhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AyVFhMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJUWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlRYTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyODEgKDB4NTAxKSAtIERTUDIgVFggUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJUWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJUWFJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyVFhSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MiAoMHg1MDIpIC0gRFNQMiBSWCBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEU1AyUlhMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWExfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogRFNQMlJYTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyODMgKDB4NTAzKSAtIERTUDIgUlggUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJSWF9WVSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhfVlUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX1ZVICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERTUDJSWFJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyUlhSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI5NiAoMHg1MTApIC0gRFNQMiBUWCBGaWx0ZXJzCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9ORiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRFNQMlRYX05GICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfTkZfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERTUDJUWF9ORiAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYX05GX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEU1AyVFhfTkYgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9ORl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYX05GICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERTUDJUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERTUDJUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWExfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0hQRiAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0hQRl9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERTUDJUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERTUDJUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfSFBGICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfSFBGX01PREVfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfSFBGX01PREVfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfSFBGX01PREVfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDJUWF9IUEZfTU9ERSAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAweDAwMDcgIC8qIERTUDJUWF9IUEZfQ1VUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWF9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYX0hQRl9DVVQgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBEU1AyVFhfSFBGX0NVVCAtIFsyOjBdICovCisKKy8qCisgKiBSMTMxMiAoMHg1MjApIC0gRFNQMiBSWCBGaWx0ZXJzICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDJSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERTUDJSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDJSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTU9OTyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTU9OT19NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERTUDJSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NT05PICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURVJBVEUgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERTUDJSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AyUlhfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AyUlhfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRFNQMlJYX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERTUDJSWF9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfVU5NVVRFX1JBTVAgKi8KKworLyoKKyAqIFIxMzEzICgweDUyMSkgLSBEU1AyIFJYIEZpbHRlcnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF8zRF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4M0UwMCAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF8zRF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF8zRF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRFNQMlJYXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYXzNEX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEU1AyUlhfM0RfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJSWF8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYXzNEX0VOQSAqLworCisvKgorICogUjEzNDQgKDB4NTQwKSAtIERTUDIgRFJDICgxKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfUk1TX01BU0sgICAgICAgICAweEY4MDAgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAgMTEgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgIDUgIC8qIERTUDJEUkNfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfUEtfTUFTSyAgICAgICAgICAweDA2MDAgIC8qIERTUDJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgICA5ICAvKiBEU1AyRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAgMiAgLyogRFNQMkRSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIERTUDJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIERTUDJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfTkdfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfTU9ERSAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfTU9ERV9NQVNLICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgIDcgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVQgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERTUDJEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19TSUdfREVUX01BU0sgICAgICAgICAgICAgMHgwMDQwICAvKiBEU1AyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogRFNQMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9PUF9FTkEgICAgICAgICAgICAgMHgwMDIwICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAgMHgwMDIwICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgICAxICAvKiBEU1AyRFJDX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEU1AyRFJDX1FSICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1FSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERTUDJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFNQMkRSQ19RUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyRFJDX1FSICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0FOVElDTElQICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTUDJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfQU5USUNMSVBfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogRFNQMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBEU1AyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9EUkNfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMlJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9EUkNfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFNQMlJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogRFNQMlJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWExfRFJDX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJUWExfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBEU1AyVFhMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWExfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogRFNQMlRYTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJUWFJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlRYUl9EUkNfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AyVFhSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJUWFJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlRYUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyVFhSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERTUDJUWFJfRFJDX0VOQSAqLworCisvKgorICogUjEzNDUgKDB4NTQxKSAtIERTUDIgRFJDICgyKQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0FUS19NQVNLICAgICAgICAgICAgICAgICAweDFFMDAgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERTUDJEUkNfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0RDWV9NQVNLICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIERTUDJEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBEU1AyRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMUMgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIERTUDJEUkNfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfTUFYR0FJTiAtIFsxOjBdICovCisKKy8qCisgKiBSMTM0NiAoMHg1NDIpIC0gRFNQMiBEUkMgKDMpCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfTkdfTUlOR0FJTl9NQVNLICAgICAgICAgIDB4RjAwMCAgLyogRFNQMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgIDEyICAvKiBEU1AyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgIDQgIC8qIERTUDJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfTkdfRVhQX01BU0sgICAgICAgICAgICAgIDB4MEMwMCAgLyogRFNQMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAgMTAgIC8qIERTUDJEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBEU1AyRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfUVJfVEhSX01BU0sgICAgICAgICAgICAgIDB4MDMwMCAgLyogRFNQMkRSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBEU1AyRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfUVJfRENZX01BU0sgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFNQMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBEU1AyRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIERTUDJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAzOCAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDAwNyAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogRFNQMkRSQ19MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMzQ3ICgweDU0MykgLSBEU1AyIERSQyAoNCkKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFX0lQX01BU0sgICAgICAgICAgICAgMHgwN0UwICAvKiBEU1AyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIERTUDJEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFX09QX01BU0sgICAgICAgICAgICAgMHgwMDFGICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUVfT1AgLSBbNDowXSAqLworCisvKgorICogUjEzNDggKDB4NTQ0KSAtIERTUDIgRFJDICg1KQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0tORUUyX0lQX01BU0sgICAgICAgICAgICAweDAzRTAgIC8qIERTUDJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBEU1AyRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX0tORUUyX09QX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIERTUDJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AyRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogRFNQMkRSQ19LTkVFMl9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTQwOCAoMHg1ODApIC0gRFNQMiBSWCBFUSBHYWlucyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AyUlhfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMlJYX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgMHgwMDNFICAvKiBEU1AyUlhfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWF9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CM19HQUlOX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogRFNQMlJYX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AyUlhfRVFfRU5BICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDJSWF9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhfRVFfRU5BICovCisKKy8qCisgKiBSMTQwOSAoMHg1ODEpIC0gRFNQMiBSWCBFUSBHYWlucyAoMikKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgMHhGODAwICAvKiBEU1AyUlhfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAxMSAgLyogRFNQMlJYX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIERTUDJSWF9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgMHgwN0MwICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICA1ICAvKiBEU1AyUlhfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworCisvKgorICogUjE0MTAgKDB4NTgyKSAtIERTUDIgUlggRVEgQmFuZCAxIEEKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MTEgKDB4NTgzKSAtIERTUDIgUlggRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MTIgKDB4NTg0KSAtIERTUDIgUlggRVEgQmFuZCAxIFBHCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDEzICgweDU4NSkgLSBEU1AyIFJYIEVRIEJhbmQgMiBBCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE0ICgweDU4NikgLSBEU1AyIFJYIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE1ICgweDU4NykgLSBEU1AyIFJYIEVRIEJhbmQgMiBDCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE2ICgweDU4OCkgLSBEU1AyIFJYIEVRIEJhbmQgMiBQRworICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxNyAoMHg1ODkpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxOCAoMHg1OEEpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQgorICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQl9NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxOSAoMHg1OEIpIC0gRFNQMiBSWCBFUSBCYW5kIDMgQworICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMCAoMHg1OEMpIC0gRFNQMiBSWCBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CM19QR19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIERTUDJSWF9FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjEgKDB4NThEKSAtIERTUDIgUlggRVEgQmFuZCA0IEEKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MjIgKDB4NThFKSAtIERTUDIgUlggRVEgQmFuZCA0IEIKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MjMgKDB4NThGKSAtIERTUDIgUlggRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0NfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjQgKDB4NTkwKSAtIERTUDIgUlggRVEgQmFuZCA0IFBHCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERTUDJSWF9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBEU1AyUlhfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI1ICgweDU5MSkgLSBEU1AyIFJYIEVRIEJhbmQgNSBBCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9BX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI2ICgweDU5MikgLSBEU1AyIFJYIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9CX01BU0sgICAgICAgICAgICAgIDB4RkZGRiAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI3ICgweDU5MykgLSBEU1AyIFJYIEVRIEJhbmQgNSBQRworICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIERTUDJSWF9FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEU1AyUlhfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogRFNQMlJYX0VRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUzNiAoMHg2MDApIC0gREFDMSBNaXhlciBWb2x1bWVzCisgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDNFMCAgLyogQURDUl9EQUMxX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5Nl9BRENSX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMV9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTZfQURDUl9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQzFfVk9MIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxRiAgLyogQURDTF9EQUMxX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5Nl9BRENMX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfREFDMV9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfQURDTF9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENMX0RBQzFfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNTM3ICgweDYwMSkgLSBEQUMxIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzFMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfVE9fREFDMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTZfQURDTF9UT19EQUMxTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYTF9UT19EQUMxTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX1RPX0RBQzFMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWExfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX1RPX0RBQzFMICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWExfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWExfVE9fREFDMUxfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfVE9fREFDMUwgKi8KKworLyoKKyAqIFIxNTM4ICgweDYwMikgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzFSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTZfQURDTF9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWFJfVE9fREFDMVIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYUl9UT19EQUMxUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWFJfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWFJfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhSX1RPX0RBQzFSICovCisKKy8qCisgKiBSMTUzOSAoMHg2MDMpIC0gREFDMiBNaXhlciBWb2x1bWVzCisgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfREFDMl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDNFMCAgLyogQURDUl9EQUMyX1ZPTCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5Nl9BRENSX0RBQzJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMl9WT0wgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTZfQURDUl9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQzJfVk9MIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfREFDMl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxRiAgLyogQURDTF9EQUMyX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5Nl9BRENMX0RBQzJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfREFDMl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTZfQURDTF9EQUMyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENMX0RBQzJfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNTQwICgweDYwNCkgLSBEQUMyIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzJMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfVE9fREFDMkxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMkwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTZfQURDTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYTF9UT19EQUMyTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhMX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERTUDJSWExfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWExfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AyUlhMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX1RPX0RBQzJMICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWExfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWExfVE9fREFDMkxfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogRFNQMVJYTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEU1AxUlhMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERTUDFSWExfVE9fREFDMkwgKi8KKworLyoKKyAqIFIxNTQxICgweDYwNSkgLSBEQUMyIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5Nl9BRENSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk2X0FEQ1JfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTZfQURDUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk2X0FEQ0xfVE9fREFDMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTZfQURDTF9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5Nl9BRENMX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWFJfVE9fREFDMlIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRFNQMlJYUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMlJYUl9UT19EQUMyUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBEU1AyUlhSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5Nl9EU1AyUlhSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIERTUDJSWFJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJSWFJfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRFNQMlJYUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU1AxUlhSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5Nl9EU1AxUlhSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERTUDFSWFJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFSWFJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRFNQMVJYUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTZfRFNQMVJYUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEU1AxUlhSX1RPX0RBQzJSICovCisKKy8qCisgKiBSMTU0MiAoMHg2MDYpIC0gRFNQMSBUWCBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTZfQURDMUxfVE9fRFNQMVRYTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMxTF9UT19EU1AxVFhMICovCisjZGVmaW5lIFdNODk5Nl9BREMxTF9UT19EU1AxVFhMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFMX1RPX0RTUDFUWEwgKi8KKyNkZWZpbmUgV004OTk2X0FEQzFMX1RPX0RTUDFUWExfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQURDMUxfVE9fRFNQMVRYTCAqLworI2RlZmluZSBXTTg5OTZfQURDMUxfVE9fRFNQMVRYTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBREMxTF9UT19EU1AxVFhMICovCisjZGVmaW5lIFdNODk5Nl9EQUNMX1RPX0RTUDFUWEwgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMVRYTCAqLworI2RlZmluZSBXTTg5OTZfREFDTF9UT19EU1AxVFhMX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNMX1RPX0RTUDFUWEwgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xfVE9fRFNQMVRYTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9UT19EU1AxVFhMICovCisjZGVmaW5lIFdNODk5Nl9EQUNMX1RPX0RTUDFUWExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fRFNQMVRYTCAqLworCisvKgorICogUjE1NDMgKDB4NjA3KSAtIERTUDEgVFggUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5Nl9BREMxUl9UT19EU1AxVFhSICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFSX1RPX0RTUDFUWFIgKi8KKyNkZWZpbmUgV004OTk2X0FEQzFSX1RPX0RTUDFUWFJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMVJfVE9fRFNQMVRYUiAqLworI2RlZmluZSBXTTg5OTZfQURDMVJfVE9fRFNQMVRYUl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMxUl9UT19EU1AxVFhSICovCisjZGVmaW5lIFdNODk5Nl9BREMxUl9UT19EU1AxVFhSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzFSX1RPX0RTUDFUWFIgKi8KKyNkZWZpbmUgV004OTk2X0RBQ1JfVE9fRFNQMVRYUiAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AxVFhSICovCisjZGVmaW5lIFdNODk5Nl9EQUNSX1RPX0RTUDFUWFJfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfVE9fRFNQMVRYUiAqLworI2RlZmluZSBXTTg5OTZfREFDUl9UT19EU1AxVFhSX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1RPX0RTUDFUWFIgKi8KKyNkZWZpbmUgV004OTk2X0RBQ1JfVE9fRFNQMVRYUl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9UT19EU1AxVFhSICovCisKKy8qCisgKiBSMTU0NCAoMHg2MDgpIC0gRFNQMiBUWCBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTZfQURDMkxfVE9fRFNQMlRYTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMyTF9UT19EU1AyVFhMICovCisjZGVmaW5lIFdNODk5Nl9BREMyTF9UT19EU1AyVFhMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJMX1RPX0RTUDJUWEwgKi8KKyNkZWZpbmUgV004OTk2X0FEQzJMX1RPX0RTUDJUWExfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQURDMkxfVE9fRFNQMlRYTCAqLworI2RlZmluZSBXTTg5OTZfQURDMkxfVE9fRFNQMlRYTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBREMyTF9UT19EU1AyVFhMICovCisjZGVmaW5lIFdNODk5Nl9EQUNMX1RPX0RTUDJUWEwgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fRFNQMlRYTCAqLworI2RlZmluZSBXTTg5OTZfREFDTF9UT19EU1AyVFhMX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNMX1RPX0RTUDJUWEwgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xfVE9fRFNQMlRYTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9UT19EU1AyVFhMICovCisjZGVmaW5lIFdNODk5Nl9EQUNMX1RPX0RTUDJUWExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fRFNQMlRYTCAqLworCisvKgorICogUjE1NDUgKDB4NjA5KSAtIERTUDIgVFggUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5Nl9BREMyUl9UT19EU1AyVFhSICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJSX1RPX0RTUDJUWFIgKi8KKyNkZWZpbmUgV004OTk2X0FEQzJSX1RPX0RTUDJUWFJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMlJfVE9fRFNQMlRYUiAqLworI2RlZmluZSBXTTg5OTZfQURDMlJfVE9fRFNQMlRYUl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBREMyUl9UT19EU1AyVFhSICovCisjZGVmaW5lIFdNODk5Nl9BREMyUl9UT19EU1AyVFhSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFEQzJSX1RPX0RTUDJUWFIgKi8KKyNkZWZpbmUgV004OTk2X0RBQ1JfVE9fRFNQMlRYUiAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19EU1AyVFhSICovCisjZGVmaW5lIFdNODk5Nl9EQUNSX1RPX0RTUDJUWFJfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfVE9fRFNQMlRYUiAqLworI2RlZmluZSBXTTg5OTZfREFDUl9UT19EU1AyVFhSX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1RPX0RTUDJUWFIgKi8KKyNkZWZpbmUgV004OTk2X0RBQ1JfVE9fRFNQMlRYUl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9UT19EU1AyVFhSICovCisKKy8qCisgKiBSMTU0NiAoMHg2MEEpIC0gRFNQIFRYIE1peGVyIFNlbGVjdAorICovCisjZGVmaW5lIFdNODk5Nl9EQUNfVE9fRFNQVFhfU1JDICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19UT19EU1BUWF9TUkMgKi8KKyNkZWZpbmUgV004OTk2X0RBQ19UT19EU1BUWF9TUkNfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX1RPX0RTUFRYX1NSQyAqLworI2RlZmluZSBXTTg5OTZfREFDX1RPX0RTUFRYX1NSQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQUNfVE9fRFNQVFhfU1JDICovCisjZGVmaW5lIFdNODk5Nl9EQUNfVE9fRFNQVFhfU1JDX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQ19UT19EU1BUWF9TUkMgKi8KKworLyoKKyAqIFIxNTUyICgweDYxMCkgLSBEQUMgU29mdG11dGUKKyAqLworI2RlZmluZSBXTTg5OTZfREFDX1NPRlRNVVRFTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5Nl9EQUNfU09GVE1VVEVNT0RFX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ19TT0ZUTVVURU1PREVfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogREFDX1NPRlRNVVRFTU9ERSAqLworI2RlZmluZSBXTTg5OTZfREFDX1NPRlRNVVRFTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5Nl9EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTZfREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5Nl9EQUNfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFUkFURSAqLworCisvKgorICogUjE1NjggKDB4NjIwKSAtIE92ZXJzYW1wbGluZworICovCisjZGVmaW5lIFdNODk5Nl9TUEtfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk2X1NQS19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTZfU1BLX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5Nl9TUEtfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk2X0RNSUNfT1NSNjQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQ19PU1I2NCAqLworI2RlZmluZSBXTTg5OTZfRE1JQ19PU1I2NF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBETUlDX09TUjY0ICovCisjZGVmaW5lIFdNODk5Nl9ETUlDX09TUjY0X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERNSUNfT1NSNjQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNfT1NSNjRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ19PU1I2NCAqLworI2RlZmluZSBXTTg5OTZfQURDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5Nl9BRENfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk2X0FEQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTZfQURDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5Nl9EQUNfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk2X0RBQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTZfREFDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5Nl9EQUNfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19PU1IxMjggKi8KKworLyoKKyAqIFIxNTY5ICgweDYyMSkgLSBTaWRldG9uZQorICovCisjZGVmaW5lIFdNODk5Nl9TVF9MUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTZfU1RfTFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTVF9MUEYgKi8KKyNkZWZpbmUgV004OTk2X1NUX0xQRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogU1RfTFBGICovCisjZGVmaW5lIFdNODk5Nl9TVF9MUEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUX0xQRiAqLworI2RlZmluZSBXTTg5OTZfU1RfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMzgwICAvKiBTVF9IUEZfQ1VUIC0gWzk6N10gKi8KKyNkZWZpbmUgV004OTk2X1NUX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1RfSFBGX0NVVCAtIFs5OjddICovCisjZGVmaW5lIFdNODk5Nl9TVF9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTZfU1RfSFBGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTk2X1NUX0hQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1RfSFBGICovCisjZGVmaW5lIFdNODk5Nl9TVF9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTZfU1RfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTk2X1NUUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTZfU1RSX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODk5Nl9TVFJfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk2X1NUUl9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTZfU1RMX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTVExfU0VMICovCisjZGVmaW5lIFdNODk5Nl9TVExfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNUTF9TRUwgKi8KKyNkZWZpbmUgV004OTk2X1NUTF9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1RMX1NFTCAqLworI2RlZmluZSBXTTg5OTZfU1RMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVExfU0VMICovCisKKy8qCisgKiBSMTc5MiAoMHg3MDApIC0gR1BJTyAxCisgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AxX0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1AxX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDFfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDFfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQMV9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1AxX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AxX1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQMV9QVSAqLworI2RlZmluZSBXTTg5OTZfR1AxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQMV9QRCAqLworI2RlZmluZSBXTTg5OTZfR1AxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDFfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMV9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AxX1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1AxX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDFfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDFfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMV9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AxX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1AxX09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDFfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDFfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQMV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1AxX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AxX0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDFfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQMV9EQiAqLworI2RlZmluZSBXTTg5OTZfR1AxX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDFfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AxX0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1AxX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDFfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDFfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQMV9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1AxX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDFfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfR1AxX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDFfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfR1AxX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDFfRk4gLSBbMzowXSAqLworCisvKgorICogUjE3OTMgKDB4NzAxKSAtIEdQSU8gMgorICovCisjZGVmaW5lIFdNODk5Nl9HUDJfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQMl9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1AyX0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1AyX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUDJfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDJfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQMl9QVSAqLworI2RlZmluZSBXTTg5OTZfR1AyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUDJfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQMl9QRCAqLworI2RlZmluZSBXTTg5OTZfR1AyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1AyX1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9QRCAqLworI2RlZmluZSBXTTg5OTZfR1AyX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDJfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDJfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMl9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1AyX1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1AyX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDJfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDJfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AyX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1AyX09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDJfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDJfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1AyX0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDJfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQMl9EQiAqLworI2RlZmluZSBXTTg5OTZfR1AyX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUDJfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDJfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQMl9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1AyX0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1AyX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUDJfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDJfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0dQMl9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0dQMl9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1AyX0ZOIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNzk0ICgweDcwMikgLSBHUElPIDMKKyAqLworI2RlZmluZSBXTTg5OTZfR1AzX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDNfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDNfRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQM19ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQM19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogR1AzX0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1AzX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQM19QVSAqLworI2RlZmluZSBXTTg5OTZfR1AzX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDNfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQM19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogR1AzX1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19QVSAqLworI2RlZmluZSBXTTg5OTZfR1AzX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDNfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1AzX1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQM19QRCAqLworI2RlZmluZSBXTTg5OTZfR1AzX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AzX1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1AzX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDNfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDNfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQM19QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQM19QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1AzX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDNfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDNfT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQM19PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQM19PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1AzX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1AzX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDNfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQM19EQiAqLworI2RlZmluZSBXTTg5OTZfR1AzX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDNfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQM19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1AzX0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDNfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19EQiAqLworI2RlZmluZSBXTTg5OTZfR1AzX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDNfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDNfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQM19MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQM19MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1AzX0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1AzX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDNfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDNfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQM19GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9HUDNfRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQM19GTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9HUDNfRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQM19GTiAtIFszOjBdICovCisKKy8qCisgKiBSMTc5NSAoMHg3MDMpIC0gR1BJTyA0CisgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1A0X0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1A0X0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUDRfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDRfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQNF9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1A0X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUDRfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1A0X1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQNF9QVSAqLworI2RlZmluZSBXTTg5OTZfR1A0X1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQNF9QRCAqLworI2RlZmluZSBXTTg5OTZfR1A0X1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUDRfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDRfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQNF9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1A0X1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1A0X1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUDRfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNF9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1A0X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1A0X09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDRfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDRfT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQNF9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1A0X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A0X0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQNF9EQiAqLworI2RlZmluZSBXTTg5OTZfR1A0X0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDRfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A0X0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1A0X0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUDRfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDRfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQNF9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1A0X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUDRfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfR1A0X0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUDRfRk4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTZfR1A0X0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUDRfRk4gLSBbMzowXSAqLworCisvKgorICogUjE3OTYgKDB4NzA0KSAtIEdQSU8gNQorICovCisjZGVmaW5lIFdNODk5Nl9HUDVfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQNV9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1A1X0RJUiAqLworI2RlZmluZSBXTTg5OTZfR1A1X0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUDVfRElSICovCisjZGVmaW5lIFdNODk5Nl9HUDVfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9ESVIgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDVfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQNV9QVSAqLworI2RlZmluZSBXTTg5OTZfR1A1X1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUDVfUFUgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X1BVICovCisjZGVmaW5lIFdNODk5Nl9HUDVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQNV9QRCAqLworI2RlZmluZSBXTTg5OTZfR1A1X1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUDVfUEQgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1A1X1BEICovCisjZGVmaW5lIFdNODk5Nl9HUDVfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9QRCAqLworI2RlZmluZSBXTTg5OTZfR1A1X1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDVfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDVfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQNV9QT0wgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1A1X1BPTCAqLworI2RlZmluZSBXTTg5OTZfR1A1X1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDVfUE9MICovCisjZGVmaW5lIFdNODk5Nl9HUDVfT1BfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQNV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9PUF9DRkdfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1A1X09QX0NGRyAqLworI2RlZmluZSBXTTg5OTZfR1A1X09QX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDVfT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5Nl9HUDVfT1BfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A1X0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDVfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQNV9EQiAqLworI2RlZmluZSBXTTg5OTZfR1A1X0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUDVfREIgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0RCICovCisjZGVmaW5lIFdNODk5Nl9HUDVfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQNV9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A1X0xWTCAqLworI2RlZmluZSBXTTg5OTZfR1A1X0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUDVfTFZMICovCisjZGVmaW5lIFdNODk5Nl9HUDVfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9MVkwgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0dQNV9GTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X0dQNV9GTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1A1X0ZOIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxODI0ICgweDcyMCkgLSBQdWxsIENvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQyX1BEICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQyX1BEX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQxX1BEICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRE1JQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQxX1BEX01BU0sgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRE1JQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogRE1JQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RNSUNEQVQxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogTUNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsyX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTUNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X01DTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDFfUFUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDREFUMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5Nl9EQUNEQVQxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDREFUMV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNEQVQxX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTZfREFDREFUMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNMUkNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xSQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xSQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5Nl9EQUNMUkNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xSQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsxX1BEICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xSQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNMUkNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0JDTEsxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMSzFfUEQgKi8KKworLyoKKyAqIFIxODI1ICgweDcyMSkgLSBQdWxsIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk2X0xETzFFTkFfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTZfTERPMUVOQV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODk5Nl9MRE8xRU5BX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExETzFFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk2X0xETzFFTkFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTZfQUREUl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBRERSX1BEICovCisjZGVmaW5lIFdNODk5Nl9BRERSX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFERFJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0FERFJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogQUREUl9QRCAqLworI2RlZmluZSBXTTg5OTZfQUREUl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRERSX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNEQVQyX1BVICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVDJfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMl9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDREFUMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQUNEQVQyX1BVICovCisjZGVmaW5lIFdNODk5Nl9EQUNEQVQyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVDJfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDJfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTZfREFDREFUMl9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNEQVQyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERBQ0RBVDJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0RBVDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsyX1BVICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xSQ0xLMl9QVV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTFJDTEsyX1BVICovCisjZGVmaW5lIFdNODk5Nl9EQUNMUkNMSzJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0xSQ0xLMl9QVSAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsyX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzJfUFUgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xSQ0xLMl9QRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsyX1BEICovCisjZGVmaW5lIFdNODk5Nl9EQUNMUkNMSzJfUERfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0xSQ0xLMl9QRCAqLworI2RlZmluZSBXTTg5OTZfREFDTFJDTEsyX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNMUkNMSzJfUEQgKi8KKyNkZWZpbmUgV004OTk2X0RBQ0xSQ0xLMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDTEsyX1BEICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsyX1BVICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsyX1BVICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BVICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BVICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsyX1BEICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsyX1BEICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEsyX1BEICovCisjZGVmaW5lIFdNODk5Nl9CQ0xLMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsyX1BEICovCisKKy8qCisgKiBSMTg0MCAoMHg3MzApIC0gSW50ZXJydXB0IFN0YXR1cyAxCisgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQNF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0dQMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQxICgweDczMSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIKKyAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMjNfRUlOVCAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8yM19FSU5UX01BU0sgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RDU19ET05FXzIzX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAxMiAgLyogRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMjNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8wMV9FSU5UICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RDU19ET05FXzAxX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDExICAvKiBEQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8wMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZJRk9TX0VSUl9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDIwMCAgLyogRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgNyAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgNiAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9TV19DTEtfRE9ORV9FSU5UICAgICAgICAgICAgIDB4MDAwOCAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9TV19DTEtfRE9ORV9FSU5UX01BU0sgICAgICAgIDB4MDAwOCAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9TV19DTEtfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgMyAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9TV19DTEtfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgMSAgLyogRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSFBfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0hQX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9IUF9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSFBfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDRF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9NSUNEX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfTUlDRF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X01JQ0RfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9FSU5UICovCisKKy8qCisgKiBSMTg0MiAoMHg3MzIpIC0gSW50ZXJydXB0IFJhdyBTdGF0dXMgMgorICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8yM19TVFMgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19ET05FXzIzX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMjNfU1RTX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfRE9ORV8yM19TVFMgKi8KKyNkZWZpbmUgV004OTk2X0RDU19ET05FXzIzX1NUU19TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogRENTX0RPTkVfMjNfU1RTICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8yM19TVFNfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FXzIzX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMDFfU1RTICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk2X0RDU19ET05FXzAxX1NUU19NQVNLICAgICAgICAgICAgIDB4MDgwMCAgLyogRENTX0RPTkVfMDFfU1RTICovCisjZGVmaW5lIFdNODk5Nl9EQ1NfRE9ORV8wMV9TVFNfU0hJRlQgICAgICAgICAgICAgICAgMTEgIC8qIERDU19ET05FXzAxX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRENTX0RPTkVfMDFfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRE9ORV8wMV9TVFMgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTZfV1NFUV9ET05FX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5Nl9XU0VRX0RPTkVfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk2X1dTRVFfRE9ORV9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRklGT1NfRVJSX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODk5Nl9GSUZPU19FUlJfU1RTX01BU0sgICAgICAgICAgICAgICAweDAyMDAgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTk2X0ZJRk9TX0VSUl9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgOSAgLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRklGT1NfRVJSX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfU1RTICAgICAgICAgICAgICAweDAwODAgIC8qIERTUDJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDJEUkNfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgIDB4MDA4MCAgLyogRFNQMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRFNQMkRSQ19TSUdfREVUX1NUU19TSElGVCAgICAgICAgICAgICA3ICAvKiBEU1AyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5Nl9EU1AyRFJDX1NJR19ERVRfU1RTX1dJRFRIICAgICAgICAgICAgIDEgIC8qIERTUDJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9TVFMgICAgICAgICAgICAgIDB4MDA0MCAgLyogRFNQMURSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRFNQMURSQ19TSUdfREVUX1NUU19NQVNLICAgICAgICAgMHgwMDQwICAvKiBEU1AxRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5Nl9EU1AxRFJDX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgIDYgIC8qIERTUDFEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk2X0RTUDFEUkNfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAgMSAgLyogRFNQMURSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk2X0ZMTF9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5Nl9GTExfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTZfRkxMX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19TVFMgKi8KKworLyoKKyAqIFIxODQ4ICgweDczOCkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzaworICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDVfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDVfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQNV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQNF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDRfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQNF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIElNX0dQNF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQNF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0dQM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDNfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0dQM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElNX0dQM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMl9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0dQMV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0dQMV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElNX0dQMV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9HUDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMV9FSU5UICovCisKKy8qCisgKiBSMTg0OSAoMHg3MzkpIC0gSW50ZXJydXB0IFN0YXR1cyAyIE1hc2sKKyAqLworI2RlZmluZSBXTTg5OTZfSU1fRENTX0RPTkVfMjNfRUlOVCAgICAgICAgICAgICAgMHgxMDAwICAvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9EQ1NfRE9ORV8yM19FSU5UX01BU0sgICAgICAgICAweDEwMDAgIC8qIElNX0RDU19ET05FXzIzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RDU19ET05FXzIzX0VJTlRfU0hJRlQgICAgICAgICAgICAxMiAgLyogSU1fRENTX0RPTkVfMjNfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fRENTX0RPTkVfMjNfRUlOVF9XSURUSCAgICAgICAgICAgICAxICAvKiBJTV9EQ1NfRE9ORV8yM19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9EQ1NfRE9ORV8wMV9FSU5UICAgICAgICAgICAgICAweDA4MDAgIC8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RDU19ET05FXzAxX0VJTlRfTUFTSyAgICAgICAgIDB4MDgwMCAgLyogSU1fRENTX0RPTkVfMDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fRENTX0RPTkVfMDFfRUlOVF9TSElGVCAgICAgICAgICAgIDExICAvKiBJTV9EQ1NfRE9ORV8wMV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9EQ1NfRE9ORV8wMV9FSU5UX1dJRFRIICAgICAgICAgICAgIDEgIC8qIElNX0RDU19ET05FXzAxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgIDB4MDQwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX1dTRVFfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAxMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZJRk9TX0VSUl9FSU5UX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAgOSAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgIDB4MDA4MCAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDA4MCAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgNyAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDJEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRFNQMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgIDB4MDA0MCAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDA0MCAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgNiAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0RTUDFEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRFNQMURSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UICAgICAgICAgIDB4MDAwOCAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX01BU0sgICAgIDB4MDAwOCAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX1NISUZUICAgICAgICAgMyAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9TV19DTEtfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fRkxMX1NXX0NMS19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fSFBfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9IUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX0hQX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fSFBfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9IUF9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEgIC8qIElNX0hQX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fSFBfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9IUF9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX01JQ0RfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDRF9FSU5UICovCisjZGVmaW5lIFdNODk5Nl9JTV9NSUNEX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX01JQ0RfRUlOVCAqLworI2RlZmluZSBXTTg5OTZfSU1fTUlDRF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBJTV9NSUNEX0VJTlQgKi8KKyNkZWZpbmUgV004OTk2X0lNX01JQ0RfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDRF9FSU5UICovCisKKy8qCisgKiBSMTg1NiAoMHg3NDApIC0gSW50ZXJydXB0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5OTZfSU1fSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk2X0lNX0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fSVJRICovCisjZGVmaW5lIFdNODk5Nl9JTV9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElNX0lSUSAqLworI2RlZmluZSBXTTg5OTZfSU1fSVJRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9JUlEgKi8KKworLyoKKyAqIFIyMDQ4ICgweDgwMCkgLSBMZWZ0IFBETSBTcGVha2VyCisgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLTF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9TUEtMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS0xfTVVURSAqLworI2RlZmluZSBXTTg5OTZfU1BLTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtMX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9TUEtMX01VVEVfWkMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS0xfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTZfU1BLTF9NVVRFX1pDX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTUEtMX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfTVVURV9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLTF9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5Nl9TUEtMX01VVEVfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0xfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTZfU1BLTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtMX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9TUEtMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS0xfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLTF9TUkMgLSBbMTowXSAqLworCisvKgorICogUjIwNDkgKDB4ODAxKSAtIFJpZ2h0IFBETSBTcGVha2VyCisgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9FTkEgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9TUEtSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS1JfTVVURSAqLworI2RlZmluZSBXTTg5OTZfU1BLUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtSX01VVEUgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9NVVRFICovCisjZGVmaW5lIFdNODk5Nl9TUEtSX01VVEVfWkMgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNQS1JfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTZfU1BLUl9NVVRFX1pDX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTUEtSX01VVEVfWkMgKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfTVVURV9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLUl9NVVRFX1pDICovCisjZGVmaW5lIFdNODk5Nl9TUEtSX01VVEVfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS1JfTVVURV9aQyAqLworI2RlZmluZSBXTTg5OTZfU1BLUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtSX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5Nl9TUEtSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS1JfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLUl9TUkMgLSBbMTowXSAqLworCisvKgorICogUjIwNTAgKDB4ODAyKSAtIFBETSBTcGVha2VyIE11dGUgU2VxdWVuY2UKKyAqLworI2RlZmluZSBXTTg5OTZfU1BLX01VVEVfRU5ESUFOICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtfTVVURV9FTkRJQU4gKi8KKyNkZWZpbmUgV004OTk2X1NQS19NVVRFX0VORElBTl9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLX01VVEVfRU5ESUFOICovCisjZGVmaW5lIFdNODk5Nl9TUEtfTVVURV9FTkRJQU5fU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIFNQS19NVVRFX0VORElBTiAqLworI2RlZmluZSBXTTg5OTZfU1BLX01VVEVfRU5ESUFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBTUEtfTVVURV9FTkRJQU4gKi8KKyNkZWZpbmUgV004OTk2X1NQS19NVVRFX1NFUTFfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogU1BLX01VVEVfU0VRMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5Nl9TUEtfTVVURV9TRVExX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS19NVVRFX1NFUTEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTZfU1BLX01VVEVfU0VRMV9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtfTVVURV9TRVExIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyMDUxICgweDgwMykgLSBQRE0gU3BlYWtlciBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTZfU1BLUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEYwICAvKiBTUEtSX1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5Nl9TUEtSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFNQS1JfVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk2X1NQS1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLUl9WT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTZfU1BLTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBTUEtMX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5Nl9TUEtMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS0xfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk2X1NQS0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLTF9WT0wgLSBbMzowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggNGNjMmQ1Ni4uZTc2M2M1NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTQ0MCw5ICs0NDAsOCBAQAogCQlyZWcgfD0gV004OTkzX0hQT1VUMUxfRExZIHwgV004OTkzX0hQT1VUMVJfRExZOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwgcmVnKTsKIAotCQkvKiBTbWFsbGVzdCBzdXBwb3J0ZWQgdXBkYXRlIGludGVydmFsICovCiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18xLAotCQkJCSAgICBXTTg5OTNfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLLCAxKTsKKwkJCQkgICAgV004OTkzX0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSywgMCk7CiAKIAkJY2FsaWJyYXRlX2RjX3NlcnZvKGNvZGVjKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtaTJzLmMgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYwppbmRleCA1NmVmYTBjLi4wOTk2MTRlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYwpAQCAtMzg1LDE0ICszODUsMTQgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCSAgICAgICBwZGV2LT5uYW1lKTsKIAlpZiAoIWluZm8tPm1lbSkgewogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5yZWdzID0gaW9yZW1hcChpbmZvLT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGluZm8tPm1lbSkpOwpAQCAtNDM1LDYgKzQzNSw3IEBACiAJaW91bm1hcChpbmZvLT5yZWdzKTsKIGZhaWxfcmVsZWFzZV9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaW5mby0+bWVtKSk7CitmYWlsX2ZyZWVfaW5mbzoKIAlrZnJlZShpbmZvKTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggNzMyMjA4Yy4uY2I1MDU5OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTg3OSwxMCArODc5LDEyIEBACiAJCSAqIGFzc3VtZSB0aGF0IGRldmljZV9ub2RlIHBvaW50ZXJzIGFyZSBhIHZhbGlkIGNvbXBhcmlzb24uCiAJCSAqLwogCQlucCA9IG9mX3BhcnNlX3BoYW5kbGUoc3NpX25wLCAiZnNsLHBsYXliYWNrLWRtYSIsIDApOworCQlvZl9ub2RlX3B1dChucCk7CiAJCWlmIChucCA9PSBkbWFfY2hhbm5lbF9ucCkKIAkJCXJldHVybiBzc2lfbnA7CiAKIAkJbnAgPSBvZl9wYXJzZV9waGFuZGxlKHNzaV9ucCwgImZzbCxjYXB0dXJlLWRtYSIsIDApOworCQlvZl9ub2RlX3B1dChucCk7CiAJCWlmIChucCA9PSBkbWFfY2hhbm5lbF9ucCkKIAkJCXJldHVybiBzc2lfbnA7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX2RtYS5jIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX2RtYS5jCmluZGV4IGZkMGRjNDYuLjVjNmMyNDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9kbWEuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfZG1hLmMKQEAgLTM2OSw3ICszNjksNyBAQAogCS5wY21fZnJlZQk9ICZwc2NfZG1hX2ZyZWUsCiB9OwogCi1zdGF0aWMgaW50IG1wYzUyMDBfaHBjZF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgbXBjNTIwMF9ocGNkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogewogCXBoeXNfYWRkcl90IGZpZm87CiAJc3RydWN0IHBzY19kbWEgKnBzY19kbWE7CkBAIC00ODcsNyArNDg3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1wYzUyMDBfaHBjZF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCitzdGF0aWMgaW50IG1wYzUyMDBfaHBjZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHBzY19kbWEgKnBzY19kbWEgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCkBAIC01MTksNyArNTE5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzUyMDBfaHBjZF9vZl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG1wYzUyMDBfaHBjZF9wcm9iZSwKIAkucmVtb3ZlCQk9IG1wYzUyMDBfaHBjZF9yZW1vdmUsCi0JLmRldiA9IHsKKwkuZHJpdmVyID0gewogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCQk9ICJtcGM1MjAwLXBjbS1hdWRpbyIsCiAJCS5vZl9tYXRjaF90YWJsZSAgICA9IG1wYzUyMDBfaHBjZF9tYXRjaCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMgYi9zb3VuZC9zb2MvZnNsL21wYzg2MTBfaHBjZC5jCmluZGV4IGExOTI5NzkuLjM1OGYwYmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjODYxMF9ocGNkLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM4NjEwX2hwY2QuYwpAQCAtMzQ1LDggKzM0NSwxMCBAQAogCX0KIAogCW1hY2hpbmVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGM4NjEwX2hwY2RfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghbWFjaGluZV9kYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIW1hY2hpbmVfZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2FsbG9jOworCX0KIAogCW1hY2hpbmVfZGF0YS0+ZGFpWzBdLmNwdV9kYWlfbmFtZSA9IGRldl9uYW1lKCZzc2lfcGRldi0+ZGV2KTsKIAltYWNoaW5lX2RhdGEtPmRhaVswXS5vcHMgPSAmbXBjODYxMF9ocGNkX29wczsKQEAgLTQ5NCw3ICs0OTYsNyBAQAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc291bmRfZGV2aWNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIGRldmljZSBhZGQgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBlcnJvcl9zb3VuZDsKIAl9CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHNvdW5kX2RldmljZSk7CiAKQEAgLTUwMiwxNCArNTA0LDEyIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyb3Jfc291bmQ6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc291bmRfZGV2aWNlKTsKIGVycm9yOgotCW9mX25vZGVfcHV0KGNvZGVjX25wKTsKLQotCWlmIChzb3VuZF9kZXZpY2UpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNvdW5kX2RldmljZSk7Ci0KIAlrZnJlZShtYWNoaW5lX2RhdGEpOwotCitlcnJvcl9hbGxvYzoKKwlvZl9ub2RlX3B1dChjb2RlY19ucCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9wMTAyMl9kcy5jIGIvc291bmQvc29jL2ZzbC9wMTAyMl9kcy5jCmluZGV4IDhmYTRkNWYuLmZjYjg2MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvcDEwMjJfZHMuYworKysgYi9zb3VuZC9zb2MvZnNsL3AxMDIyX2RzLmMKQEAgLTI5Nyw4ICsyOTcsMTAgQEAKIAkgKiBkYWktPnBsYXRmb3JtIG5hbWUgc2hvdWxkIGFscmVhZHkgcG9pbnQgdG8gYW4gYWxsb2NhdGVkIGJ1ZmZlci4KIAkgKi8KIAlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRtYV9jaGFubmVsX25wLCAwLCAmcmVzKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJb2Zfbm9kZV9wdXQoZG1hX2NoYW5uZWxfbnApOwogCQlyZXR1cm4gcmV0OworCX0KIAlzbnByaW50ZigoY2hhciAqKWRhaS0+cGxhdGZvcm1fbmFtZSwgREFJX05BTUVfU0laRSwgIiVsbHguJXMiLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLnN0YXJ0LCBkbWFfY2hhbm5lbF9ucC0+bmFtZSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwppbmRleCAzMDljNTllLi43OTQ1NjI1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWZpcS5jCkBAIC0yNDAsNyArMjQwLDYgQEAKIAogc3RhdGljIGludCBpbXhfcGNtX2ZpcV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfcGNtICpwY20gPSBydGQtPnBjbTsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jCmluZGV4IGEzM2ZjNTEuLmQwYmNmM2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1pMnMuYworKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtaTJzLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCWlmICghcHJpdi0+bWVtKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyX2FsbG9jOwogCX0KIAogCXByaXYtPmlvID0gaW9yZW1hcChwcml2LT5tZW0tPnN0YXJ0LCBTWl8xNkspOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwppbmRleCAzMGZlMGQwLi4wYWE0NzVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJfQogCiAJLyogU2V0IGNvZGVjIGJpYXMgbGV2ZWwgKi8KLQlhbXNfZGVsdGFfc2V0X2JpYXNfbGV2ZWwoY2FyZCwgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCWFtc19kZWx0YV9zZXRfYmlhc19sZXZlbChjYXJkLCBkYXBtLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBBZGQgaG9vayBzd2l0Y2ggLSBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBjb2RlYyBmcm9tIHVzZXJzcGFjZQogCSAqIGV2ZW4gaWYgbGluZSBkaXNjaXBsaW5lIGZhaWxzICovCkBAIC02NDksNyArNjQ5LDkgQEAKIAkJCWFtc19kZWx0YV9ob29rX3N3aXRjaF9ncGlvcyk7CiAKIAkvKiBLZWVwIG1vZGVtIHBvd2VyIG9uICovCi0JYW1zX2RlbHRhX3NldF9iaWFzX2xldmVsKCZhbXNfZGVsdGFfYXVkaW9fY2FyZCwgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCWFtc19kZWx0YV9zZXRfYmlhc19sZXZlbCgmYW1zX2RlbHRhX2F1ZGlvX2NhcmQsCisJCQkJICZhbXNfZGVsdGFfYXVkaW9fY2FyZC5ydGRbMF0uY29kZWMtPmRhcG0sCisJCQkJIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGN4MjA0NDJfcGxhdGZvcm1fZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhbXNfZGVsdGFfYXVkaW9fcGxhdGZvcm1fZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL244MTAuYyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwppbmRleCA4M2QyMTNiLi42MmUyOTJmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMKKysrIGIvc291bmQvc29jL29tYXAvbjgxMC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGpobmlrdWxhQGdtYWlsLmNvbT4KKyAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAYml0bWVyLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNDAyLDYgKzQwMiw2IEBACiBtb2R1bGVfaW5pdChuODEwX3NvY19pbml0KTsKIG1vZHVsZV9leGl0KG44MTBfc29jX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE5va2lhIE44MTAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCAwN2I3NzIzLi5lYmNjMmQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGpobmlrdWxhQGdtYWlsLmNvbT4KKyAqIENvbnRhY3Q6IEphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAYml0bWVyLmNvbT4KICAqICAgICAgICAgIFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNzgwLDYgKzc4MCw2IEBACiB9CiBtb2R1bGVfZXhpdChzbmRfb21hcF9tY2JzcF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiSmFya2tvIE5pa3VsYSA8amhuaWt1bGFAZ21haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSmFya2tvIE5pa3VsYSA8amFya2tvLm5pa3VsYUBiaXRtZXIuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIEkyUyBTb0MgSW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKaW5kZXggOWE3ZGVkZC4uNjVjZGU5ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+CisgKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+CiAgKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCmluZGV4IGIyZjU3NTEuLjliNWM4OGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+CisgKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+CiAgKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQzNiw2ICs0MzYsNiBAQAogfQogbW9kdWxlX2V4aXQoc25kX29tYXBfcGNtX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgUENNIERNQSBtb2R1bGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCmluZGV4IGEwZWQxZGIuLmY5NWZlMzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqaG5pa3VsYUBnbWFpbC5jb20+CisgKiBDb250YWN0OiBKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+CiAgKiAgICAgICAgICBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3J4NTEuYyBiL3NvdW5kL3NvYy9vbWFwL3J4NTEuYwppbmRleCAwYWFlOTk4Li44OTMzMDBhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKKysrIGIvc291bmQvc29jL29tYXAvcng1MS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIENvbnRhY3Q6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZhbHVzaUB0aS5jb20+CiAgKiAgICAgICAgICBFZHVhcmRvIFZhbGVudGluIDxlZHVhcmRvLnZhbGVudGluQG5va2lhLmNvbT4KLSAqICAgICAgICAgIEphcmtrbyBOaWt1bGEgPGpobmlrdWxhQGdtYWlsLmNvbT4KKyAqICAgICAgICAgIEphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAYml0bWVyLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZyBiL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKaW5kZXggNTRiMGU0Yi4uNjVmOTgwZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnCkBAIC0xODMsOCArMTgzLDkgQEAKIAl0cmlzdGF0ZSAiQXVkaW8gc3VwcG9ydCBmb3IgV29sZnNvbiBTcGV5c2lkZSIKIAlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiBNQUNIX1dMRl9DUkFHR182NDEwCiAJc2VsZWN0IFNORF9TQU1TVU5HX0kyUwotCXNlbGVjdCBTTkRfU09DX1dNODkxNQorCXNlbGVjdCBTTkRfU09DX1dNODk5NgogCXNlbGVjdCBTTkRfU09DX1dNOTA4MQorCXNlbGVjdCBTTkRfU09DX1dNMTI1MF9FVjEKIAogY29uZmlnIFNORF9TT0NfU1BFWVNJREVfV004OTYyCiAJdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIFdvbGZzb24gU3BleXNpZGUgd2l0aCBXTTg5NjIiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCmluZGV4IDllYjNiMTIuLjg1MDlkM2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCkBAIC0xLDUgKzEsNiBAQAogIyBTM2MyNFhYIFBsYXRmb3JtIFN1cHBvcnQKIHNuZC1zb2MtczNjMjR4eC1vYmpzIDo9IGRtYS5vCitzbmQtc29jLWlkbWEtb2JqcyA6PSBpZG1hLm8KIHNuZC1zb2MtczNjMjR4eC1pMnMtb2JqcyA6PSBzM2MyNHh4LWkycy5vCiBzbmQtc29jLXMzYzI0MTItaTJzLW9ianMgOj0gczNjMjQxMi1pMnMubwogc25kLXNvYy1hYzk3LW9ianMgOj0gYWM5Ny5vCkBAIC0xNiw2ICsxNyw3IEBACiBvYmotJChDT05GSUdfU05EX1NBTVNVTkdfU1BESUYpICs9IHNuZC1zb2Mtc2Ftc3VuZy1zcGRpZi5vCiBvYmotJChDT05GSUdfU05EX1NBTVNVTkdfUENNKSArPSBzbmQtc29jLXBjbS5vCiBvYmotJChDT05GSUdfU05EX1NBTVNVTkdfSTJTKSArPSBzbmQtc29jLWkycy5vCitvYmotJChDT05GSUdfU05EX1NBTVNVTkdfSTJTKSArPSBzbmQtc29jLWlkbWEubwogCiAjIFMzQzI0WFggTWFjaGluZSBTdXBwb3J0CiBzbmQtc29jLWppdmUtd204NzUwLW9ianMgOj0gaml2ZV93bTg3NTAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jIGIvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jCmluZGV4IDI0MWY1NWQuLmM2YzY1ODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9oMTk0MF91ZGExMzgwLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8c291bmQvc29jLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pZG1hLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9pZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZTA3NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2lkbWEuYwpAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIHNvdW5kL3NvYy9zYW1zdW5nL2lkbWEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBJMlMwJ3MgSW50ZXJuYWwgRE1BIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJpMnMuaCIKKyNpbmNsdWRlICJpZG1hLmgiCisjaW5jbHVkZSAiZG1hLmgiCisjaW5jbHVkZSAiaTJzLXJlZ3MuaCIKKworI2RlZmluZSBTVF9SVU5OSU5HCQkoMTw8MCkKKyNkZWZpbmUgU1RfT1BFTkVECQkoMTw8MSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGlkbWFfaGFyZHdhcmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCSAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSAgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkgICAgU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkgICAgU05EUlZfUENNX0lORk9fUkVTVU1FLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkgICAgU05EUlZfUENNX0ZNVEJJVF9VMTZfTEUgfAorCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAorCQkgICAgU05EUlZfUENNX0ZNVEJJVF9VMjRfTEUgfAorCQkgICAgU05EUlZfUENNX0ZNVEJJVF9VOCB8CisJCSAgICBTTkRSVl9QQ01fRk1UQklUX1M4LAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gTUFYX0lETUFfQlVGRkVSLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gTUFYX0lETUFfUEVSSU9ELAorCS5wZXJpb2RzX21pbiA9IDEsCisJLnBlcmlvZHNfbWF4ID0gMiwKK307CisKK3N0cnVjdCBpZG1hX2N0cmwgeworCXNwaW5sb2NrX3QJbG9jazsKKwlpbnQJCXN0YXRlOworCWRtYV9hZGRyX3QJc3RhcnQ7CisJZG1hX2FkZHJfdAlwb3M7CisJZG1hX2FkZHJfdAllbmQ7CisJZG1hX2FkZHJfdAlwZXJpb2Q7CisJZG1hX2FkZHJfdAlwZXJpb2RzejsKKwl2b2lkCQkqdG9rZW47CisJdm9pZAkJKCpjYikodm9pZCAqZHQsIGludCBieXRlc194ZmVyKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWRtYV9pbmZvIHsKKwlzcGlubG9ja190CWxvY2s7CisJdm9pZAkJIF9faW9tZW0gICpyZWdzOworCWRtYV9hZGRyX3QJbHBfdHhfYWRkcjsKK30gaWRtYTsKKworc3RhdGljIHZvaWQgaWRtYV9nZXRwb3MoZG1hX2FkZHJfdCAqc3JjKQoreworCSpzcmMgPSBpZG1hLmxwX3R4X2FkZHIgKworCQkocmVhZGwoaWRtYS5yZWdzICsgSTJTVFJOQ05UKSAmIDB4ZmZmZmZmKSAqIDQ7Cit9CisKK3N0YXRpYyBpbnQgaWRtYV9lbnF1ZXVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2soJnBydGQtPmxvY2spOworCXBydGQtPnRva2VuID0gKHZvaWQgKikgc3Vic3RyZWFtOworCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKKworCS8qIEludGVybmFsIERNQSBMZXZlbDAgSW50ZXJydXB0IEFkZHJlc3MgKi8KKwl2YWwgPSBpZG1hLmxwX3R4X2FkZHIgKyBwcnRkLT5wZXJpb2RzejsKKwl3cml0ZWwodmFsLCBpZG1hLnJlZ3MgKyBJMlNMVkwwQUREUik7CisKKwkvKiBTdGFydCBhZGRyZXNzMCBvZiBJMlMgaW50ZXJuYWwgRE1BIG9wZXJhdGlvbi4gKi8KKwl2YWwgPSBpZG1hLmxwX3R4X2FkZHI7CisJd3JpdGVsKHZhbCwgaWRtYS5yZWdzICsgSTJTU1RSMCk7CisKKwkvKgorCSAqIFRyYW5zZmVyIGJsb2NrIHNpemUgZm9yIEkyUyBpbnRlcm5hbCBETUEuCisJICogU2hvdWxkIGRlY2lkZSB0cmFuc2ZlciBzaXplIGJlZm9yZSBzdGFydCBkbWEgb3BlcmF0aW9uCisJICovCisJdmFsID0gcmVhZGwoaWRtYS5yZWdzICsgSTJTU0laRSk7CisJdmFsICY9IH4oSTJTU0laRV9UUk5NU0sgPDwgSTJTU0laRV9TSElGVCk7CisJdmFsIHw9ICgoKHJ1bnRpbWUtPmRtYV9ieXRlcyA+PiAyKSAmCisJCQlJMlNTSVpFX1RSTk1TSykgPDwgSTJTU0laRV9TSElGVCk7CisJd3JpdGVsKHZhbCwgaWRtYS5yZWdzICsgSTJTU0laRSk7CisKKwl2YWwgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNBSEIpOworCXZhbCB8PSBBSEJfSU5URU5MVkwwOworCXdyaXRlbCh2YWwsIGlkbWEucmVncyArIEkyU0FIQik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRtYV9zZXRjYWxsYmsoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJdm9pZCAoKmNiKSh2b2lkICosIGludCkpCit7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKwlwcnRkLT5jYiA9IGNiOworCXNwaW5fdW5sb2NrKCZwcnRkLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaWRtYV9jb250cm9sKGludCBvcCkKK3sKKwl1MzIgdmFsID0gcmVhZGwoaWRtYS5yZWdzICsgSTJTQUhCKTsKKworCXNwaW5fbG9jaygmaWRtYS5sb2NrKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIExQQU1fRE1BX1NUQVJUOgorCQl2YWwgfD0gKEFIQl9JTlRFTkxWTDAgfCBBSEJfRE1BRU4pOworCQlicmVhazsKKwljYXNlIExQQU1fRE1BX1NUT1A6CisJCXZhbCAmPSB+KEFIQl9JTlRFTkxWTDAgfCBBSEJfRE1BRU4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGluX3VubG9jaygmaWRtYS5sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlbCh2YWwsIGlkbWEucmVncyArIEkyU0FIQik7CisJc3Bpbl91bmxvY2soJmlkbWEubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbWFfZG9uZSh2b2lkICppZCwgaW50IGJ5dGVzX3hmZXIpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBpZDsKKwlzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAocHJ0ZCAmJiAocHJ0ZC0+c3RhdGUgJiBTVF9SVU5OSU5HKSkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGlkbWFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBtb2QgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNNT0QpOworCXUzMiBhaGIgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNBSEIpOworCisJYWhiIHw9IChBSEJfRE1BUkxEIHwgQUhCX0lOVE1BU0spOworCW1vZCB8PSBNT0RfVFhTX0lETUE7CisJd3JpdGVsKGFoYiwgaWRtYS5yZWdzICsgSTJTQUhCKTsKKwl3cml0ZWwobW9kLCBpZG1hLnJlZ3MgKyBJMlNNT0QpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisKKwlwcnRkLT5zdGFydCA9IHBydGQtPnBvcyA9IHJ1bnRpbWUtPmRtYV9hZGRyOworCXBydGQtPnBlcmlvZCA9IHBhcmFtc19wZXJpb2RzKHBhcmFtcyk7CisJcHJ0ZC0+cGVyaW9kc3ogPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CisJcHJ0ZC0+ZW5kID0gcnVudGltZS0+ZG1hX2FkZHIgKyBydW50aW1lLT5kbWFfYnl0ZXM7CisKKwlpZG1hX3NldGNhbGxiayhzdWJzdHJlYW0sIGlkbWFfZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZG1hX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkbWFfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlwcnRkLT5wb3MgPSBwcnRkLT5zdGFydDsKKworCS8qIGZsdXNoIHRoZSBETUEgY2hhbm5lbCAqLworCWlkbWFfY29udHJvbChMUEFNX0RNQV9TVE9QKTsKKwlpZG1hX2VucXVldWUoc3Vic3RyZWFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkbWFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJnBydGQtPmxvY2spOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJcHJ0ZC0+c3RhdGUgfD0gU1RfUlVOTklORzsKKwkJaWRtYV9jb250cm9sKExQQU1fRE1BX1NUQVJUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJcHJ0ZC0+c3RhdGUgJj0gflNUX1JVTk5JTkc7CisJCWlkbWFfY29udHJvbChMUEFNX0RNQV9TVE9QKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9jaygmcHJ0ZC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKKwlpZG1hX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaWRtYV9jdHJsICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWRtYV9hZGRyX3Qgc3JjOworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJc3Bpbl9sb2NrKCZwcnRkLT5sb2NrKTsKKworCWlkbWFfZ2V0cG9zKCZzcmMpOworCXJlcyA9IHNyYyAtIHBydGQtPnN0YXJ0OworCisJc3Bpbl91bmxvY2soJnBydGQtPmxvY2spOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlcyk7Cit9CisKK3N0YXRpYyBpbnQgaWRtYV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyBzaXplLCBvZmZzZXQ7CisJaW50IHJldDsKKworCS8qIEZyb20gc25kX3BjbV9saWJfbW1hcF9pb21lbSAqLworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKwlzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCW9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlyZXQgPSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAorCQkJKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KSA+PiBQQUdFX1NISUZULAorCQkJc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90IGlpc19pcnEoaW50IGlycW5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZCA9IChzdHJ1Y3QgaWRtYV9jdHJsICopZGV2X2lkOworCXUzMiBpaXNjb24sIGlpc2FoYiwgdmFsLCBhZGRyOworCisJaWlzYWhiICA9IHJlYWRsKGlkbWEucmVncyArIEkyU0FIQik7CisJaWlzY29uICA9IHJlYWRsKGlkbWEucmVncyArIEkyU0NPTik7CisKKwl2YWwgPSAoaWlzYWhiICYgQUhCX0xWTDBJTlQpID8gQUhCX0NMUkxWTDBJTlQgOiAwOworCisJaWYgKHZhbCkgeworCQlpaXNhaGIgfD0gdmFsOworCQl3cml0ZWwoaWlzYWhiLCBpZG1hLnJlZ3MgKyBJMlNBSEIpOworCisJCWFkZHIgPSByZWFkbChpZG1hLnJlZ3MgKyBJMlNMVkwwQUREUikgLSBpZG1hLmxwX3R4X2FkZHI7CisJCWFkZHIgKz0gcHJ0ZC0+cGVyaW9kc3o7CisJCWFkZHIgJT0gKHBydGQtPmVuZCAtIHBydGQtPnN0YXJ0KTsKKwkJYWRkciArPSBpZG1hLmxwX3R4X2FkZHI7CisKKwkJd3JpdGVsKGFkZHIsIGlkbWEucmVncyArIEkyU0xWTDBBRERSKTsKKworCQlpZiAocHJ0ZC0+Y2IpCisJCQlwcnRkLT5jYihwcnRkLT50b2tlbiwgcHJ0ZC0+cGVyaW9kKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaWRtYV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZDsKKwlpbnQgcmV0OworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZpZG1hX2hhcmR3YXJlKTsKKworCXBydGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRtYV9jdHJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBydGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfSTJTMCwgaWlzX2lycSwgMCwgImkycyIsIHBydGQpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiZmFpbCB0byBjbGFpbSBpMnMgaXJxICwgcmV0ID0gJWRcbiIsIHJldCk7CisJCWtmcmVlKHBydGQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNwaW5fbG9ja19pbml0KCZwcnRkLT5sb2NrKTsKKworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHBydGQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZG1hX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlkbWFfY3RybCAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWZyZWVfaXJxKElSUV9JMlMwLCBwcnRkKTsKKworCWlmICghcHJ0ZCkKKwkJcHJfZXJyKCJpZG1hX2Nsb3NlIGNhbGxlZCB3aXRoIHBydGQgPT0gTlVMTFxuIik7CisKKwlrZnJlZShwcnRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGlkbWFfb3BzID0geworCS5vcGVuCQk9IGlkbWFfb3BlbiwKKwkuY2xvc2UJCT0gaWRtYV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLnRyaWdnZXIJPSBpZG1hX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBpZG1hX3BvaW50ZXIsCisJLm1tYXAJCT0gaWRtYV9tbWFwLAorCS5od19wYXJhbXMJPSBpZG1hX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGlkbWFfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGlkbWFfcHJlcGFyZSwKK307CisKK3N0YXRpYyB2b2lkIGlkbWFfZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmOworCisJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbTsKKwlpZiAoIXN1YnN0cmVhbSkKKwkJcmV0dXJuOworCisJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuOworCisJaW91bm1hcChidWYtPmFyZWEpOworCisJYnVmLT5hcmVhID0gTlVMTDsKKwlidWYtPmFkZHIgPSAwOworfQorCitzdGF0aWMgaW50IHByZWFsbG9jYXRlX2lkbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CisJYnVmLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJLyogQXNzaWduIFBDTSBidWZmZXIgcG9pbnRlcnMgKi8KKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUzsKKwlidWYtPmFkZHIgPSBpZG1hLmxwX3R4X2FkZHI7CisJYnVmLT5ieXRlcyA9IGlkbWFfaGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKKwlidWYtPmFyZWEgPSAodW5zaWduZWQgY2hhciAqKWlvcmVtYXAoYnVmLT5hZGRyLCBidWYtPmJ5dGVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IGlkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBpbnQgaWRtYV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOworCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jcHVfZGFpOworCXN0cnVjdCBzbmRfcGNtICpwY20gPSBydGQtPnBjbTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZpZG1hX21hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworCWlmIChkYWktPmRyaXZlci0+cGxheWJhY2suY2hhbm5lbHNfbWluKQorCQlyZXQgPSBwcmVhbGxvY2F0ZV9pZG1hX2J1ZmZlcihwY20sCisJCQkJU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGlkbWFfcmVnX2FkZHJfaW5pdCh2b2lkICpyZWdzLCBkbWFfYWRkcl90IGFkZHIpCit7CisJc3Bpbl9sb2NrX2luaXQoJmlkbWEubG9jayk7CisJaWRtYS5yZWdzID0gcmVnczsKKwlpZG1hLmxwX3R4X2FkZHIgPSBhZGRyOworfQorCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgYXNvY19pZG1hX3BsYXRmb3JtID0geworCS5vcHMgPSAmaWRtYV9vcHMsCisJLnBjbV9uZXcgPSBpZG1hX25ldywKKwkucGNtX2ZyZWUgPSBpZG1hX2ZyZWUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhc29jX2lkbWFfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2LCAmYXNvY19pZG1hX3BsYXRmb3JtKTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYXNvY19pZG1hX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXNvY19pZG1hX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzYW1zdW5nLWlkbWEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlID0gYXNvY19pZG1hX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhc29jX2lkbWFfcGxhdGZvcm1fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFzb2NfaWRtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXNvY19pZG1hX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChhc29jX2lkbWFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhc29jX2lkbWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhc29jX2lkbWFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFzb2NfaWRtYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoLCA8amFzc2lzaW5naGJyYXJAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIEFTb0MgSURNQSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2lkbWEuaCBiL3NvdW5kL3NvYy9zYW1zdW5nL2lkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI3MzIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaWRtYS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBzb3VuZC9zb2Mvc2Ftc3VuZy9pZG1hLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfU0FNU1VOR19JRE1BX0hfCisjZGVmaW5lIF9fU05EX1NPQ19TQU1TVU5HX0lETUFfSF8KKworZXh0ZXJuIHZvaWQgaWRtYV9yZWdfYWRkcl9pbml0KHZvaWQgKnJlZ3MsIGRtYV9hZGRyX3QgYWRkcik7CisKKy8qIGRtYV9zdGF0ZSAqLworI2RlZmluZSBMUEFNX0RNQV9TVE9QCTAKKyNkZWZpbmUgTFBBTV9ETUFfU1RBUlQJMQorCisjZGVmaW5lIE1BWF9JRE1BX1BFUklPRCAoMTI4ICogMTAyNCkKKyNkZWZpbmUgTUFYX0lETUFfQlVGRkVSICgxNjAgKiAxMDI0KQorCisjZW5kaWYgLyogX19TTkRfU09DX1NBTVNVTkdfSURNQV9IXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMKaW5kZXggM2I1M2FkNS4uMTRlYjZlYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9qaXZlX3dtODc1MC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkuY3B1X2RhaV9uYW1lCT0gInMzYzI0MTItaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUwLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lCT0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lCT0gIndtODc1MC1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lCT0gIndtODc1MC1jb2RlYy4wLTAwMWEiLAogCS5pbml0CQk9IGppdmVfd204NzUwX2luaXQsCiAJLm9wcwkJPSAmaml2ZV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3J4MTk1MF91ZGExMzgwLmMKaW5kZXggMWU1NzRhNS4uYmM4YzE2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9yeDE5NTBfdWRhMTM4MC5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZXlzaWRlLmMKaW5kZXggZDZkZWU0ZC4uNTkwZTkyNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc3BleXNpZGUuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGV5c2lkZS5jCkBAIC0xNCwxMCArMTQsMTAgQEAKICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0jaW5jbHVkZSAiLi4vY29kZWNzL3dtODkxNS5oIgorI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5OTYuaCIKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205MDgxLmgiCiAKLSNkZWZpbmUgV004OTE1X0hQU0VMX0dQSU8gMjE0CisjZGVmaW5lIFdNODk5Nl9IUFNFTF9HUElPIDIxNAogCiBzdGF0aWMgaW50IHNwZXlzaWRlX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCiAJCQkJICAgc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLApAQCAtMzEsMTIgKzMxLDEyIEBACiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODkxNV9TWVNDTEtfTUNMSzIsCisJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5OTZfU1lTQ0xLX01DTEsyLAogCQkJCQkgICAgIDMyNzY4LCBTTkRfU09DX0NMT0NLX0lOKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg5MTVfRkxMX01DTEsyLAorCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004OTk2X0ZMTF9NQ0xLMiwKIAkJCQkJICAwLCAwLCAwKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByX2VycigiRmFpbGVkIHRvIHN0b3AgRkxMXG4iKTsKQEAgLTY1LDcgKzY1LDcgQEAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlpZiAoY2FyZC0+ZGFwbS5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19TVEFOREJZKSB7CiAJCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgMCwKLQkJCQkJCSAgV004OTE1X0ZMTF9NQ0xLMiwKKwkJCQkJCSAgV004OTk2X0ZMTF9NQ0xLMiwKIAkJCQkJCSAgMzI3NjgsIDQ4MDAwICogMjU2KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQgRkxMXG4iKTsKQEAgLTczLDcgKzczLDcgQEAKIAkJCX0KIAogCQkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksCi0JCQkJCQkgICAgIFdNODkxNV9TWVNDTEtfRkxMLAorCQkJCQkJICAgICBXTTg5OTZfU1lTQ0xLX0ZMTCwKIAkJCQkJCSAgICAgNDgwMDAgKiAyNTYsCiAJCQkJCQkgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOwogCQkJaWYgKHJldCA8IDApCkBAIC0xNDksMjYgKzE0OSwyNiBAQAogCQkJCSAgaW50IHBvbGFyaXR5KQogewogCXNwZXlzaWRlX2phY2tfcG9sYXJpdHkgPSAhcG9sYXJpdHk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFdNODkxNV9IUFNFTF9HUElPLCBzcGV5c2lkZV9qYWNrX3BvbGFyaXR5KTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoV004OTk2X0hQU0VMX0dQSU8sIHNwZXlzaWRlX2phY2tfcG9sYXJpdHkpOwogCiAJLyogUmUtcnVuIERBUE0gdG8gbWFrZSBzdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IG1pYyBiaWFzICovCiAJc25kX3NvY19kYXBtX3N5bmMoJmNvZGVjLT5kYXBtKTsKIH0KIAotc3RhdGljIGludCBzcGV5c2lkZV93bTg5MTVfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQorc3RhdGljIGludCBzcGV5c2lkZV93bTg5OTZfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKIAlpbnQgcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhkYWksIFdNODkxNV9TWVNDTEtfTUNMSzIsIDMyNzY4LCAwKTsKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGRhaSwgV004OTk2X1NZU0NMS19NQ0xLMiwgMzI3NjgsIDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KFdNODkxNV9IUFNFTF9HUElPLCAiSFBfU0VMIik7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFdNODk5Nl9IUFNFTF9HUElPLCAiSFBfU0VMIik7CiAJaWYgKHJldCAhPSAwKQogCQlwcl9lcnIoIkZhaWxlZCB0byByZXF1ZXN0IEhQX1NFTCBHUElPOiAlZFxuIiwgcmV0KTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoV004OTE1X0hQU0VMX0dQSU8sIHNwZXlzaWRlX2phY2tfcG9sYXJpdHkpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChXTTg5OTZfSFBTRUxfR1BJTywgc3BleXNpZGVfamFja19wb2xhcml0eSk7CiAKIAlyZXQgPSBzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiSGVhZHNldCIsCiAJCQkgICAgICAgU05EX0pBQ0tfSEVBRFNFVCB8IFNORF9KQUNLX0JUTl8wLApAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXdtODkxNV9kZXRlY3QoY29kZWMsICZzcGV5c2lkZV9oZWFkc2V0LCBzcGV5c2lkZV9zZXRfcG9sYXJpdHkpOworCXdtODk5Nl9kZXRlY3QoY29kZWMsICZzcGV5c2lkZV9oZWFkc2V0LCBzcGV5c2lkZV9zZXRfcG9sYXJpdHkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDUsMTYgKzIwNSwxNiBAQAogCQkubmFtZSA9ICJDUFUiLAogCQkuc3RyZWFtX25hbWUgPSAiQ1BVIiwKIAkJLmNwdV9kYWlfbmFtZSA9ICJzYW1zdW5nLWkycy4wIiwKLQkJLmNvZGVjX2RhaV9uYW1lID0gIndtODkxNS1haWYxIiwKKwkJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5Ni1haWYxIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JCS5jb2RlY19uYW1lID0gIndtODkxNS4xLTAwMWEiLAotCQkuaW5pdCA9IHNwZXlzaWRlX3dtODkxNV9pbml0LAorCQkuY29kZWNfbmFtZSA9ICJ3bTg5OTYuMS0wMDFhIiwKKwkJLmluaXQgPSBzcGV5c2lkZV93bTg5OTZfaW5pdCwKIAkJLm9wcyA9ICZzcGV5c2lkZV9vcHMsCiAJfSwKIAl7CiAJCS5uYW1lID0gIkJhc2ViYW5kIiwKIAkJLnN0cmVhbV9uYW1lID0gIkJhc2ViYW5kIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJ3bTg5MTUtYWlmMiIsCisJCS5jcHVfZGFpX25hbWUgPSAid204OTk2LWFpZjIiLAogCQkuY29kZWNfZGFpX25hbWUgPSAid20xMjUwLWV2MSIsCiAJCS5jb2RlY19uYW1lID0gIndtMTI1MC1ldjEuMS0wMDI3IiwKIAkJLm9wcyA9ICZzcGV5c2lkZV9vcHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zcGV5c2lkZV93bTg5NjIuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZXlzaWRlX3dtODk2Mi5jCmluZGV4IDhhYzQyYmYuLjcyNTM1ZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3NwZXlzaWRlX3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NwZXlzaWRlX3dtODk2Mi5jCkBAIC0yMyw2ICsyMyw5IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOwogCWludCByZXQ7CiAKKwlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQlpZiAoZGFwbS0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgewpAQCAtMzcsNyArNDAsNyBAQAogCQkJCQkJICAgICA0NDEwMCAqIDI1NiwKIAkJCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CiAJCQlpZiAocmV0IDwgMCkgewotCQkJCXByX2VycigiRmFpbGVkIHRvIHNldCBTWVNDTEs6ICVkXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBzZXQgU1lTQ0xLOiAlZFxuIiwgcmV0KTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CkBAIC01Nyw2ICs2MCw5IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOwogCWludCByZXQ7CiAKKwlpZiAoZGFwbS0+ZGV2ICE9IGNvZGVjX2RhaS0+ZGV2KQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTYyX1NZU0NMS19NQ0xLLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IGQ5ZjhhZGUuLjIwYjdmM2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTIwMywxNCArMjAzLDE0IEBACiAJCXJibm9kZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBzbmRfc29jX3JidHJlZV9ub2RlLCBub2RlKTsKIAkJZm9yIChpID0gMDsgaSA8IHJibm9kZS0+YmxrbGVuOyArK2kpIHsKIAkJCXJlZ3RtcCA9IHJibm9kZS0+YmFzZV9yZWcgKyBpOwotCQkJV0FSTl9PTihjb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIgJiYKLQkJCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIHJlZ3RtcCkpOwogCQkJdmFsID0gc25kX3NvY19yYnRyZWVfZ2V0X3JlZ2lzdGVyKHJibm9kZSwgaSk7CiAJCQlkZWYgPSBzbmRfc29jX2dldF9jYWNoZV92YWwoY29kZWMtPnJlZ19kZWZfY29weSwgaSwKIAkJCQkJCSAgICByYm5vZGUtPndvcmRfc2l6ZSk7CiAJCQlpZiAodmFsID09IGRlZikKIAkJCQljb250aW51ZTsKIAorCQkJV0FSTl9PTighc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3Rlcihjb2RlYywgcmVndG1wKSk7CisKIAkJCWNvZGVjLT5jYWNoZV9ieXBhc3MgPSAxOwogCQkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgcmVndG1wLCB2YWwpOwogCQkJY29kZWMtPmNhY2hlX2J5cGFzcyA9IDA7CkBAIC01NjMsOCArNTYzLDcgQEAKIAogCWx6b19ibG9ja3MgPSBjb2RlYy0+cmVnX2NhY2hlOwogCWZvcl9lYWNoX3NldF9iaXQoaSwgbHpvX2Jsb2Nrc1swXS0+c3luY19ibXAsIGx6b19ibG9ja3NbMF0tPnN5bmNfYm1wX25iaXRzKSB7Ci0JCVdBUk5fT04oY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyICYmCi0JCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIGkpKTsKKwkJV0FSTl9PTighc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3Rlcihjb2RlYywgaSkpOwogCQlyZXQgPSBzbmRfc29jX2NhY2hlX3JlYWQoY29kZWMsIGksICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTgyMyw4ICs4MjIsNiBAQAogCiAJY29kZWNfZHJ2ID0gY29kZWMtPmRyaXZlcjsKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWNfZHJ2LT5yZWdfY2FjaGVfc2l6ZTsgKytpKSB7Ci0JCVdBUk5fT04oY29kZWMtPndyaXRhYmxlX3JlZ2lzdGVyICYmCi0JCQljb2RlYy0+d3JpdGFibGVfcmVnaXN0ZXIoY29kZWMsIGkpKTsKIAkJcmV0ID0gc25kX3NvY19jYWNoZV9yZWFkKGNvZGVjLCBpLCAmdmFsKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC04MzIsNiArODI5LDkgQEAKIAkJCWlmIChzbmRfc29jX2dldF9jYWNoZV92YWwoY29kZWMtPnJlZ19kZWZfY29weSwKIAkJCQkJCSAgaSwgY29kZWNfZHJ2LT5yZWdfd29yZF9zaXplKSA9PSB2YWwpCiAJCQkJY29udGludWU7CisKKwkJV0FSTl9PTighc25kX3NvY19jb2RlY193cml0YWJsZV9yZWdpc3Rlcihjb2RlYywgaSkpOworCiAJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA4M2FkOGNhLi5kMmVmMDE0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTYzMyw3ICsxNjMzLDcgQEAKIAlpZiAoY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyKQogCQlyZXR1cm4gY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpOwogCWVsc2UKLQkJcmV0dXJuIDA7CisJCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY19yZWFkYWJsZV9yZWdpc3Rlcik7CiAKQEAgLTE2NTEsNyArMTY1MSw3IEBACiAJaWYgKGNvZGVjLT53cml0YWJsZV9yZWdpc3RlcikKIAkJcmV0dXJuIGNvZGVjLT53cml0YWJsZV9yZWdpc3Rlcihjb2RlYywgcmVnKTsKIAllbHNlCi0JCXJldHVybiAwOworCQlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfY29kZWNfd3JpdGFibGVfcmVnaXN0ZXIpOwogCkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogCiAJaWYgKHByZWZpeCkgewogCQluYW1lX2xlbiA9IHN0cmxlbihsb25nX25hbWUpICsgc3RybGVuKHByZWZpeCkgKyAyOwotCQluYW1lID0ga21hbGxvYyhuYW1lX2xlbiwgR0ZQX0FUT01JQyk7CisJCW5hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFuYW1lKQogCQkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggN2UxNTkxNC4uZDY3YzYzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTI3NjMsNyArMjc2Myw3IEBACiAKIC8qKgogICogc25kX3NvY19kYXBtX2ZyZWUgLSBmcmVlIGRhcG0gcmVzb3VyY2VzCi0gKiBAY2FyZDogU29DIGRldmljZQorICogQGRhcG06IERBUE0gY29udGV4dAogICoKICAqIEZyZWUgYWxsIGRhcG0gd2lkZ2V0cyBhbmQgcmVzb3VyY2VzLgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWlvLmMgYi9zb3VuZC9zb2Mvc29jLWlvLmMKaW5kZXggY2NhNDkwYy4uYTYyZjdkZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1pby5jCisrKyBiL3NvdW5kL3NvYy9zb2MtaW8uYwpAQCAtMjA1LDYgKzIwNSwyNSBAQAogI2RlZmluZSBzbmRfc29jXzE2XzhfcmVhZF9pMmMgTlVMTAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzhfcmVhZF9zcGkoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJY29uc3QgdTE2IHJlZyA9IGNwdV90b19iZTE2KHIgfCAweDEwMCk7CisJdTggZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZyZWcsIDIsICZkYXRhLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGRhdGE7Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzE2XzhfcmVhZF9zcGkgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBpbnQgc25kX3NvY18xNl84X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKIAkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKQEAgLTI5NSw2ICszMTQsNyBAQAogCWludCAoKndyaXRlKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCpyZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogCXVuc2lnbmVkIGludCAoKmkyY19yZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOworCXVuc2lnbmVkIGludCAoKnNwaV9yZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOwogfSBpb190eXBlc1tdID0gewogCXsKIAkJLmFkZHJfYml0cyA9IDQsIC5kYXRhX2JpdHMgPSAxMiwKQEAgLTMxOCw2ICszMzgsNyBAQAogCQkuYWRkcl9iaXRzID0gMTYsIC5kYXRhX2JpdHMgPSA4LAogCQkud3JpdGUgPSBzbmRfc29jXzE2Xzhfd3JpdGUsCiAJCS5pMmNfcmVhZCA9IHNuZF9zb2NfMTZfOF9yZWFkX2kyYywKKwkJLnNwaV9yZWFkID0gc25kX3NvY18xNl84X3JlYWRfc3BpLAogCX0sCiAJewogCQkuYWRkcl9iaXRzID0gMTYsIC5kYXRhX2JpdHMgPSAxNiwKQEAgLTM4Myw2ICs0MDQsOCBAQAogI2lmZGVmIENPTkZJR19TUElfTUFTVEVSCiAJCWNvZGVjLT5od193cml0ZSA9IGRvX3NwaV93cml0ZTsKICNlbmRpZgorCQlpZiAoaW9fdHlwZXNbaV0uc3BpX3JlYWQpCisJCQljb2RlYy0+aHdfcmVhZCA9IGlvX3R5cGVzW2ldLnNwaV9yZWFkOwogCiAJCWNvZGVjLT5jb250cm9sX2RhdGEgPSBjb250YWluZXJfb2YoY29kZWMtPmRldiwKIAkJCQkJCSAgIHN0cnVjdCBzcGlfZGV2aWNlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1qYWNrLmMgYi9zb3VuZC9zb2Mvc29jLWphY2suYwppbmRleCA3YzE3Yjk4Li5mYTMxZDljIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWphY2suYworKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKIAlzbmRfc29jX2RhcG1fc3luYyhkYXBtKTsKIAotCXNuZF9qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCBzdGF0dXMpOworCXNuZF9qYWNrX3JlcG9ydChqYWNrLT5qYWNrLCBqYWNrLT5zdGF0dXMpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJCQkJCSAgICAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCQkgICAgICBncGlvc1tpXS5uYW1lLAogCQkJCQkgICAgICAmZ3Bpb3NbaV0pOwotCQlpZiAocmV0KQorCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChncGlvc1tpXS53YWtlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLXBjbS5jIGIvc291bmQvc29jL3NvYy1wY20uYwppbmRleCBiNTc1OTM5Li4yODc5Yzg4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtcGNtLmMKQEAgLTI5MCw2ICsyOTAsOSBAQAogCWNvZGVjX2RhaS0+YWN0aXZlLS07CiAJY29kZWMtPmFjdGl2ZS0tOwogCisJaWYgKCFjcHVfZGFpLT5hY3RpdmUgJiYgIWNvZGVjX2RhaS0+YWN0aXZlKQorCQlydGQtPnJhdGUgPSAwOworCiAJLyogTXV0aW5nIHRoZSBEQUMgc3VwcHJlc3NlcyBhcnRpZmFjdHMgY2F1c2VkIGR1cmluZyBkaWdpdGFsCiAJICogc2h1dGRvd24sIGZvciBleGFtcGxlIGZyb20gc3RvcHBpbmcgY2xvY2tzLgogCSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3BjbS5jIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3BjbS5jCmluZGV4IGZmODZlNWUuLmM3Y2ZkOTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9wY20uYworKysgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfcGNtLmMKQEAgLTMwOSw5ICszMDksMTQgQEAKIAogc3RhdGljIHZvaWQgdGVncmFfcGNtX2RlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQogewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKIAorCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwlpZiAoIXN1YnN0cmVhbSkKKwkJcmV0dXJuOworCisJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKIAlpZiAoIWJ1Zi0+YXJlYSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvdGVncmFfd204OTAzLmMgYi9zb3VuZC9zb2MvdGVncmEvdGVncmFfd204OTAzLmMKaW5kZXggYTQyZTlhYy4uYmUyN2YxZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV93bTg5MDMuYwpAQCAtNTYsNiArNTYsNyBAQAogI2RlZmluZSBHUElPX0hQX01VVEUgICAgQklUKDEpCiAjZGVmaW5lIEdQSU9fSU5UX01JQ19FTiBCSVQoMikKICNkZWZpbmUgR1BJT19FWFRfTUlDX0VOIEJJVCgzKQorI2RlZmluZSBHUElPX0hQX0RFVCAgICAgQklUKDQpCiAKIHN0cnVjdCB0ZWdyYV93bTg5MDMgewogCXN0cnVjdCB0ZWdyYV9hc29jX3V0aWxzX2RhdGEgdXRpbF9kYXRhOwpAQCAtMzA0LDYgKzMwNSw3IEBACiAJCXNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJnRlZ3JhX3dtODkwM19ocF9qYWNrLAogCQkJCQkxLAogCQkJCQkmdGVncmFfd204OTAzX2hwX2phY2tfZ3Bpbyk7CisJCW1hY2hpbmUtPmdwaW9fcmVxdWVzdGVkIHw9IEdQSU9fSFBfREVUOwogCX0KIAogCXNuZF9zb2NfamFja19uZXcoY29kZWMsICJNaWMgSmFjayIsIFNORF9KQUNLX01JQ1JPUEhPTkUsCkBAIC0zMTcsNyArMzE5LDcgQEAKIAlzbmRfc29jX2RhcG1fZm9yY2VfZW5hYmxlX3BpbihkYXBtLCAiTWljIEJpYXMiKTsKIAogCS8qIEZJWE1FOiBDYWxjdWxhdGUgYXV0b21hdGljYWxseSBiYXNlZCBvbiBEQVBNIHJvdXRlcz8gKi8KLQlpZiAoIW1hY2hpbmVfaXNfaGFybW9ueSgpICYmICFtYWNoaW5lX2lzX3ZlbnRhbmEoKSkKKwlpZiAoIW1hY2hpbmVfaXNfaGFybW9ueSgpKQogCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFMIik7CiAJaWYgKCFtYWNoaW5lX2lzX3NlYWJvYXJkKCkgJiYgIW1hY2hpbmVfaXNfYWVibCgpKQogCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjFSIik7CkBAIC0zOTMsNyArMzk1LDcgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKIAlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgbWFjaGluZSk7CiAKLQlpZiAobWFjaGluZV9pc19oYXJtb255KCkgfHwgbWFjaGluZV9pc192ZW50YW5hKCkpIHsKKwlpZiAobWFjaGluZV9pc19oYXJtb255KCkpIHsKIAkJY2FyZC0+ZGFwbV9yb3V0ZXMgPSBoYXJtb255X2F1ZGlvX21hcDsKIAkJY2FyZC0+bnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShoYXJtb255X2F1ZGlvX21hcCk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NlYWJvYXJkKCkpIHsKQEAgLTQyOSwxMCArNDMxLDEwIEBACiAJc3RydWN0IHRlZ3JhX3dtODkwMyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKIAlzdHJ1Y3QgdGVncmFfd204OTAzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gbWFjaGluZS0+cGRhdGE7CiAKLQlzbmRfc29jX3VucmVnaXN0ZXJfY2FyZChjYXJkKTsKLQotCXRlZ3JhX2Fzb2NfdXRpbHNfZmluaSgmbWFjaGluZS0+dXRpbF9kYXRhKTsKLQorCWlmIChtYWNoaW5lLT5ncGlvX3JlcXVlc3RlZCAmIEdQSU9fSFBfREVUKQorCQlzbmRfc29jX2phY2tfZnJlZV9ncGlvcygmdGVncmFfd204OTAzX2hwX2phY2ssCisJCQkJCTEsCisJCQkJCSZ0ZWdyYV93bTg5MDNfaHBfamFja19ncGlvKTsKIAlpZiAobWFjaGluZS0+Z3Bpb19yZXF1ZXN0ZWQgJiBHUElPX0VYVF9NSUNfRU4pCiAJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19leHRfbWljX2VuKTsKIAlpZiAobWFjaGluZS0+Z3Bpb19yZXF1ZXN0ZWQgJiBHUElPX0lOVF9NSUNfRU4pCkBAIC00NDEsNiArNDQzLDExIEBACiAJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19ocF9tdXRlKTsKIAlpZiAobWFjaGluZS0+Z3Bpb19yZXF1ZXN0ZWQgJiBHUElPX1NQS1JfRU4pCiAJCWdwaW9fZnJlZShwZGF0YS0+Z3Bpb19zcGtyX2VuKTsKKwltYWNoaW5lLT5ncGlvX3JlcXVlc3RlZCA9IDA7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfY2FyZChjYXJkKTsKKworCXRlZ3JhX2Fzb2NfdXRpbHNfZmluaSgmbWFjaGluZS0+dXRpbF9kYXRhKTsKIAogCWtmcmVlKG1hY2hpbmUpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdHh4OS90eHg5YWNsYy5jIGIvc291bmQvc29jL3R4eDkvdHh4OWFjbGMuYwppbmRleCAzNGFhOTcyLi4zZGU5OWFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdHh4OS90eHg5YWNsYy5jCisrKyBiL3NvdW5kL3NvYy90eHg5L3R4eDlhY2xjLmMKQEAgLTI5MCw2ICsyOTAsNyBAQAogCiBzdGF0aWMgaW50IHR4eDlhY2xjX3BjbV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gcnRkLT5jcHVfZGFpOwogCXN0cnVjdCBzbmRfcGNtICpwY20gPSBydGQtPnBjbTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRhaS0+cGxhdGZvcm0tPmRldik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCmluZGV4IGQwZDQ5M2MuLjJjZjg3ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jCkBAIC0xMzksOCArMTM5LDEyIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTl9VUkJTOyBpKyspIHsKIAkJdXNiX2tpbGxfdXJiKGRldi0+ZGF0YV91cmJzX2luW2ldKTsKLQkJdXNiX2tpbGxfdXJiKGRldi0+ZGF0YV91cmJzX291dFtpXSk7CisKKwkJaWYgKHRlc3RfYml0KGksICZkZXYtPm91dHVyYl9hY3RpdmVfbWFzaykpCisJCQl1c2Jfa2lsbF91cmIoZGV2LT5kYXRhX3VyYnNfb3V0W2ldKTsKIAl9CisKKwlkZXYtPm91dHVyYl9hY3RpdmVfbWFzayA9IDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3VzYl9jYWlhcV9zdWJzdHJlYW1fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTYxMiw4ICs2MTYsOSBAQAogewogCXN0cnVjdCBzbmRfdXNiX2NhaWFxX2NiX2luZm8gKmluZm8gPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldjsKLQlzdHJ1Y3QgdXJiICpvdXQ7Ci0JaW50IGZyYW1lLCBsZW4sIHNlbmRfaXQgPSAwLCBvdXRmcmFtZSA9IDA7CisJc3RydWN0IHVyYiAqb3V0ID0gTlVMTDsKKwlpbnQgaSwgZnJhbWUsIGxlbiwgc2VuZF9pdCA9IDAsIG91dGZyYW1lID0gMDsKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKIAogCWlmICh1cmItPnN0YXR1cyB8fCAhaW5mbykKIAkJcmV0dXJuOwpAQCAtNjIzLDcgKzYyOCwxNyBAQAogCWlmICghZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybjsKIAotCW91dCA9IGRldi0+ZGF0YV91cmJzX291dFtpbmZvLT5pbmRleF07CisJLyogZmluZCBhbiB1bnVzZWQgb3V0cHV0IHVyYiB0aGF0IGlzIHVudXNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBOX1VSQlM7IGkrKykKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaSwgJmRldi0+b3V0dXJiX2FjdGl2ZV9tYXNrKSA9PSAwKSB7CisJCQlvdXQgPSBkZXYtPmRhdGFfdXJic19vdXRbaV07CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFvdXQpIHsKKwkJbG9nKCJVbmFibGUgdG8gZmluZCBhbiBvdXRwdXQgdXJiIHRvIHVzZVxuIik7CisJCWdvdG8gcmVxdWV1ZTsKKwl9CiAKIAkvKiByZWFkIHRoZSByZWNlbnRseSByZWNlaXZlZCBwYWNrZXQgYW5kIHNlbmQgYmFjayBvbmUgd2hpY2ggaGFzCiAJICogdGhlIHNhbWUgbGF5b3V0ICovCkBAIC02MzQsNyArNjQ5LDggQEAKIAkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0uYWN0dWFsX2xlbmd0aDsKIAkJb3V0LT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0ubGVuZ3RoID0gbGVuOwogCQlvdXQtPmlzb19mcmFtZV9kZXNjW291dGZyYW1lXS5hY3R1YWxfbGVuZ3RoID0gMDsKLQkJb3V0LT5pc29fZnJhbWVfZGVzY1tvdXRmcmFtZV0ub2Zmc2V0ID0gQllURVNfUEVSX0ZSQU1FICogZnJhbWU7CisJCW91dC0+aXNvX2ZyYW1lX2Rlc2Nbb3V0ZnJhbWVdLm9mZnNldCA9IG9mZnNldDsKKwkJb2Zmc2V0ICs9IGxlbjsKIAogCQlpZiAobGVuID4gMCkgewogCQkJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKQEAgLTY1MCwxMSArNjY2LDE1IEBACiAJfQogCiAJaWYgKHNlbmRfaXQpIHsKLQkJb3V0LT5udW1iZXJfb2ZfcGFja2V0cyA9IEZSQU1FU19QRVJfVVJCOworCQlvdXQtPm51bWJlcl9vZl9wYWNrZXRzID0gb3V0ZnJhbWU7CiAJCW91dC0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CiAJCXVzYl9zdWJtaXRfdXJiKG91dCwgR0ZQX0FUT01JQyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHNuZF91c2JfY2FpYXFfY2JfaW5mbyAqb2luZm8gPSBvdXQtPmNvbnRleHQ7CisJCWNsZWFyX2JpdChvaW5mby0+aW5kZXgsICZkZXYtPm91dHVyYl9hY3RpdmVfbWFzayk7CiAJfQogCityZXF1ZXVlOgogCS8qIHJlLXN1Ym1pdCBpbmJvdW5kIHVyYiAqLwogCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IEZSQU1FU19QRVJfVVJCOyBmcmFtZSsrKSB7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnJhbWVdLm9mZnNldCA9IEJZVEVTX1BFUl9GUkFNRSAqIGZyYW1lOwpAQCAtNjc2LDYgKzY5Niw4IEBACiAJCWRldi0+b3V0cHV0X3J1bm5pbmcgPSAxOwogCQl3YWtlX3VwKCZkZXYtPnByZXBhcmVfd2FpdF9xdWV1ZSk7CiAJfQorCisJY2xlYXJfYml0KGluZm8tPmluZGV4LCAmZGV2LT5vdXR1cmJfYWN0aXZlX21hc2spOwogfQogCiBzdGF0aWMgc3RydWN0IHVyYiAqKmFsbG9jX3VyYnMoc3RydWN0IHNuZF91c2JfY2FpYXFkZXYgKmRldiwgaW50IGRpciwgaW50ICpyZXQpCkBAIC04MjcsNiArODQ5LDkgQEAKIAlpZiAoIWRldi0+ZGF0YV9jYl9pbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWRldi0+b3V0dXJiX2FjdGl2ZV9tYXNrID0gMDsKKwlCVUlMRF9CVUdfT04oTl9VUkJTID4gKHNpemVvZihkZXYtPm91dHVyYl9hY3RpdmVfbWFzaykgKiA4KSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgTl9VUkJTOyBpKyspIHsKIAkJZGV2LT5kYXRhX2NiX2luZm9baV0uZGV2ID0gZGV2OwogCQlkZXYtPmRhdGFfY2JfaW5mb1tpXS5pbmRleCA9IGk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmggYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmgKaW5kZXggYjJiMzEwMS4uM2Y5YzYzMyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuaApAQCAtOTYsNiArOTYsNyBAQAogCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljLCB3YXJuZWQ7CiAJY2hhciAqYXVkaW9faW5fYnVmLCAqYXVkaW9fb3V0X2J1ZjsKIAl1bnNpZ25lZCBpbnQgc2FtcGxlcmF0ZXMsIGJwcDsKKwl1bnNpZ25lZCBsb25nIG91dHVyYl9hY3RpdmVfbWFzazsKIAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3ViX3BsYXliYWNrW01BWF9TVFJFQU1TXTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1Yl9jYXB0dXJlW01BWF9TVFJFQU1TXTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9pbnB1dC5jIGIvc291bmQvdXNiL2NhaWFxL2lucHV0LmMKaW5kZXggNDQzMmVmNy4uYTIxMzgxMyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2lucHV0LmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2lucHV0LmMKQEAgLTMwLDcgKzMwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBrZXljb2RlX3JrMltdID0gIHsgS0VZXzEsIEtFWV8yLCBLRVlfMywgS0VZXzQsCiAJCQkJCSBLRVlfNSwgS0VZXzYsIEtFWV83IH07CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQga2V5Y29kZV9yazNbXSA9ICB7IEtFWV8xLCBLRVlfMiwgS0VZXzMsIEtFWV80LAotCQkJCQkgS0VZXzUsIEtFWV82LCBLRVlfNywgS0VZXzUsIEtFWV82IH07CisJCQkJCSBLRVlfNSwgS0VZXzYsIEtFWV83LCBLRVlfOCwgS0VZXzkgfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleWNvZGVfa29yZVtdID0gewogCUtFWV9GTl9GMSwgICAgICAvKiAibWVudSIgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2VuZHBvaW50LmMgYi9zb3VuZC91c2IvZW5kcG9pbnQuYwppbmRleCA3YzBkMjFlLi43ZDQ2ZTQ4IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvZW5kcG9pbnQuYworKysgYi9zb3VuZC91c2IvZW5kcG9pbnQuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoKChwcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSAmJiAoZm10LT5iTGVuZ3RoIDwgOCkpIHx8Ci0JCSAgICAoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzIpICYmIChmbXQtPmJMZW5ndGggIT0gNikpKSB7CisJCSAgICAoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzIpICYmIChmbXQtPmJMZW5ndGggPCA2KSkpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfRk9STUFUX1RZUEUgZGVzY1xuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21peGVyLmMgYi9zb3VuZC91c2IvbWl4ZXIuYwppbmRleCBjMjJmYTc2Li5jZGQxOWQ3IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWl4ZXIuYworKysgYi9zb3VuZC91c2IvbWl4ZXIuYwpAQCAtMTUyLDYgKzE1Miw3IEBACiAJaWYgKHAgJiYgcC0+ZEIpIHsKIAkJY3ZhbC0+ZEJtaW4gPSBwLT5kQi0+bWluOwogCQljdmFsLT5kQm1heCA9IHAtPmRCLT5tYXg7CisJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAl9CiB9CiAKQEAgLTEwOTIsNyArMTA5Myw3IEBACiAJCQkJIiBTd2l0Y2giIDogIiBWb2x1bWUiKTsKIAkJaWYgKGNvbnRyb2wgPT0gVUFDX0ZVX1ZPTFVNRSkgewogCQkJY2hlY2tfbWFwcGVkX2RCKG1hcCwgY3ZhbCk7Ci0JCQlpZiAoY3ZhbC0+ZEJtaW4gPCBjdmFsLT5kQm1heCkgeworCQkJaWYgKGN2YWwtPmRCbWluIDwgY3ZhbC0+ZEJtYXggfHwgIWN2YWwtPmluaXRpYWxpemVkKSB7CiAJCQkJa2N0bC0+dGx2LmMgPSBtaXhlcl92b2xfdGx2OwogCQkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKIAkJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKQEAgLTExOTEsNiArMTE5MiwxMSBAQAogCiAJaWYgKHN0YXRlLT5taXhlci0+cHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSkgewogCQljc2l6ZSA9IGhkci0+YkNvbnRyb2xTaXplOworCQlpZiAoIWNzaXplKSB7CisJCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6ICIKKwkJCQkgICAgImludmFsaWQgYkNvbnRyb2xTaXplID09IDBcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQljaGFubmVscyA9IChoZHItPmJMZW5ndGggLSA3KSAvIGNzaXplIC0gMTsKIAkJYm1hQ29udHJvbHMgPSBoZHItPmJtYUNvbnRyb2xzOwogCX0gZWxzZSB7CkBAIC0xOTM0LDE1ICsxOTQwLDEzIEBACiAJc3RydWN0IG1peGVyX2J1aWxkIHN0YXRlOwogCWludCBlcnI7CiAJY29uc3Qgc3RydWN0IHVzYm1peF9jdGxfbWFwICptYXA7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmOwogCXZvaWQgKnA7CiAKLQlob3N0aWYgPSBtaXhlci0+Y2hpcC0+Y3RybF9pbnRmOwogCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOwogCXN0YXRlLmNoaXAgPSBtaXhlci0+Y2hpcDsKIAlzdGF0ZS5taXhlciA9IG1peGVyOwotCXN0YXRlLmJ1ZmZlciA9IGhvc3RpZi0+ZXh0cmE7Ci0Jc3RhdGUuYnVmbGVuID0gaG9zdGlmLT5leHRyYWxlbjsKKwlzdGF0ZS5idWZmZXIgPSBtaXhlci0+aG9zdGlmLT5leHRyYTsKKwlzdGF0ZS5idWZsZW4gPSBtaXhlci0+aG9zdGlmLT5leHRyYWxlbjsKIAogCS8qIGNoZWNrIHRoZSBtYXBwaW5nIHRhYmxlICovCiAJZm9yIChtYXAgPSB1c2JtaXhfY3RsX21hcHM7IG1hcC0+aWQ7IG1hcCsrKSB7CkBAIC0xOTU1LDcgKzE5NTksOCBAQAogCX0KIAogCXAgPSBOVUxMOwotCXdoaWxlICgocCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RpZi0+ZXh0cmEsIGhvc3RpZi0+ZXh0cmFsZW4sIHAsIFVBQ19PVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChwID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MobWl4ZXItPmhvc3RpZi0+ZXh0cmEsIG1peGVyLT5ob3N0aWYtPmV4dHJhbGVuLAorCQkJCQkgICAgcCwgVUFDX09VVFBVVF9URVJNSU5BTCkpICE9IE5VTEwpIHsKIAkJaWYgKG1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSB7CiAJCQlzdHJ1Y3QgdWFjMV9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvciAqZGVzYyA9IHA7CiAKQEAgLTIxNjIsMTcgKzIxNjcsMTUgQEAKIC8qIGNyZWF0ZSB0aGUgaGFuZGxlciBmb3IgdGhlIG9wdGlvbmFsIHN0YXR1cyBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KIHN0YXRpYyBpbnQgc25kX3VzYl9taXhlcl9zdGF0dXNfY3JlYXRlKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKIHsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWY7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKIAl2b2lkICp0cmFuc2Zlcl9idWZmZXI7CiAJaW50IGJ1ZmZlcl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IGVwbnVtOwogCi0JaG9zdGlmID0gbWl4ZXItPmNoaXAtPmN0cmxfaW50ZjsKIAkvKiB3ZSBuZWVkIG9uZSBpbnRlcnJ1cHQgaW5wdXQgZW5kcG9pbnQgKi8KLQlpZiAoZ2V0X2lmYWNlX2Rlc2MoaG9zdGlmKS0+Yk51bUVuZHBvaW50cyA8IDEpCisJaWYgKGdldF9pZmFjZV9kZXNjKG1peGVyLT5ob3N0aWYpLT5iTnVtRW5kcG9pbnRzIDwgMSkKIAkJcmV0dXJuIDA7Ci0JZXAgPSBnZXRfZW5kcG9pbnQoaG9zdGlmLCAwKTsKKwllcCA9IGdldF9lbmRwb2ludChtaXhlci0+aG9zdGlmLCAwKTsKIAlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZXApIHx8ICF1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXApKQogCQlyZXR1cm4gMDsKIApAQCAtMjIwMiw3ICsyMjA1LDYgQEAKIAl9OwogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2U7CiAJaW50IGVycjsKIAogCXN0cmNweShjaGlwLT5jYXJkLT5taXhlcm5hbWUsICJVU0IgTWl4ZXIiKTsKQEAgLTIyMTksOCArMjIyMSw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWhvc3RfaWZhY2UgPSAmdXNiX2lmbnVtX3RvX2lmKGNoaXAtPmRldiwgY3RybGlmKS0+YWx0c2V0dGluZ1swXTsKLQlzd2l0Y2ggKGdldF9pZmFjZV9kZXNjKGhvc3RfaWZhY2UpLT5iSW50ZXJmYWNlUHJvdG9jb2wpIHsKKwltaXhlci0+aG9zdGlmID0gJnVzYl9pZm51bV90b19pZihjaGlwLT5kZXYsIGN0cmxpZiktPmFsdHNldHRpbmdbMF07CisJc3dpdGNoIChnZXRfaWZhY2VfZGVzYyhtaXhlci0+aG9zdGlmKS0+YkludGVyZmFjZVByb3RvY29sKSB7CiAJY2FzZSBVQUNfVkVSU0lPTl8xOgogCWRlZmF1bHQ6CiAJCW1peGVyLT5wcm90b2NvbCA9IFVBQ19WRVJTSU9OXzE7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuaCBiL3NvdW5kL3VzYi9taXhlci5oCmluZGV4IGFlMWExNGQuLjgxYjJkOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5oCisrKyBiL3NvdW5kL3VzYi9taXhlci5oCkBAIC0zLDYgKzMsNyBAQAogCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CiAJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXA7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1bnNpZ25lZCBpbnQgaWdub3JlX2N0bF9lcnJvcjsKIAlzdHJ1Y3QgdXJiICp1cmI7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmggYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKaW5kZXggZGJhMGI3Zi4uYTQyZTNlZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCisrKyBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaApAQCAtMTcwNyw2ICsxNzA3LDQwIEBACiAJCX0KIAl9CiB9LAoreworCVVTQl9ERVZJQ0UoMHgwNTgyLCAweDAxMzApLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkvKiAudmVuZG9yX25hbWUgPSAiQk9TUyIsICovCisJCS8qIC5wcm9kdWN0X25hbWUgPSAiTUlDUk8gQlItODAiLCAqLworCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0NPTVBPU0lURSwKKwkJLmRhdGEgPSAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmtbXSkgeworCQkJeworCQkJCS5pZm51bSA9IDAsCisJCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IDEsCisJCQkJLnR5cGUgPSBRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UKKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gMiwKKwkJCQkudHlwZSA9IFFVSVJLX0FVRElPX1NUQU5EQVJEX0lOVEVSRkFDRQorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAzLAorCQkJCS50eXBlID0gUVVJUktfTUlESV9GSVhFRF9FTkRQT0lOVCwKKwkJCQkuZGF0YSA9ICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbykgeworCQkJCQkub3V0X2NhYmxlcyA9IDB4MDAwMSwKKwkJCQkJLmluX2NhYmxlcyAgPSAweDAwMDEKKwkJCQl9CisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKwl9Cit9LAogCiAvKiBHdWlsbGVtb3QgZGV2aWNlcyAqLwogewpAQCAtMjQxNyw2ICsyNDUxLDEyIEBACiAJLmlkUHJvZHVjdCA9IDB4MTAyMCwKIH0sCiAKKy8qIEtlaXRoTWNNaWxsZW4gU3RyaW5ncG9ydCAqLworeworCVVTQl9ERVZJQ0UoMHgxZjM4LCAweDAwMDEpLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCit9LAorCiAvKiBNaWRpdGVjaCBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDQ3NTIsIDB4MDAxMSksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggNzc3NjJjOS4uODFlMDdkOCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3VzYl9jbTYyMDZfYm9vdF9xdWlyayhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewotCWludCBlcnIsIHJlZzsKKwlpbnQgZXJyICA9IDAsIHJlZzsKIAlpbnQgdmFsW10gPSB7MHgyMDA0LCAweDMwMDAsIDB4ZjgwMCwgMHgxNDNmLCAweDAwMDAsIDB4MzAwMH07CiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IEFSUkFZX1NJWkUodmFsKTsgcmVnKyspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDU2ZDYyZDMuLjNiOGY3YjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTgxLDkgKzE4MSw5IEBACiAKICQoT1VUUFVUKXB5dGhvbi9wZXJmLnNvOiAkKFBZUkZfT0JKUykKIAkkKFFVSUVUX0dFTilDRkxBR1M9JyQoQkFTSUNfQ0ZMQUdTKScgJChQWVRIT05fV09SRCkgdXRpbC9zZXR1cC5weSBcCi0JICAtLXF1aWV0IGJ1aWxkX2V4dCBcCi0JICAtLWJ1aWxkLWxpYj0nJChPVVRQVVQpcHl0aG9uJyBcCi0JICAtLWJ1aWxkLXRlbXA9JyQoT1VUUFVUKXB5dGhvbi90ZW1wJworCSAgLS1xdWlldCBidWlsZF9leHQ7IFwKKwlta2RpciAtcCAkKE9VVFBVVClweXRob24gJiYgXAorCWNwICQoUFlUSE9OX0VYVEJVSUxEX0xJQilwZXJmLnNvICQoT1VUUFVUKXB5dGhvbi8KICMKICMgTm8gUGVybCBzY3JpcHRzIHJpZ2h0IG5vdzoKICMKQEAgLTUwOSw5ICs1MDksMTMgQEAKIAogICBQWVRIT05fV09SRCA6PSAkKGNhbGwgc2hlbGwtd29yZGlmeSwkKFBZVEhPTikpCiAKLSAgcHl0aG9uLWNsZWFuIDo9ICQoUFlUSE9OX1dPUkQpIHV0aWwvc2V0dXAucHkgY2xlYW4gXAotICAgIC0tYnVpbGQtbGliPSckKE9VVFBVVClweXRob24nIFwKLSAgICAtLWJ1aWxkLXRlbXA9JyQoT1VUUFVUKXB5dGhvbi90ZW1wJworICAjIHB5dGhvbiBleHRlbnNpb24gYnVpbGQgZGlyZWN0b3JpZXMKKyAgUFlUSE9OX0VYVEJVSUxEICAgICA6PSAkKE9VVFBVVClweXRob25fZXh0X2J1aWxkLworICBQWVRIT05fRVhUQlVJTERfTElCIDo9ICQoUFlUSE9OX0VYVEJVSUxEKWxpYi8KKyAgUFlUSE9OX0VYVEJVSUxEX1RNUCA6PSAkKFBZVEhPTl9FWFRCVUlMRCl0bXAvCisgIGV4cG9ydCBQWVRIT05fRVhUQlVJTERfTElCIFBZVEhPTl9FWFRCVUlMRF9UTVAKKworICBweXRob24tY2xlYW4gOj0gcm0gLXJmICQoUFlUSE9OX0VYVEJVSUxEKSAkKE9VVFBVVClweXRob24vcGVyZi5zbwogCiAgIGlmZGVmIE5PX0xJQlBZVEhPTgogICAgICQoY2FsbCBkaXNhYmxlLXB5dGhvbikKQEAgLTg2OCw2ICs4NzIsOSBAQAogCSQoSU5TVEFMTCkgc2NyaXB0cy9weXRob24vKi5weSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24nCiAJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi9iaW4vKiAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9weXRob24vYmluJwogCitpbnN0YWxsLXB5dGhvbl9leHQ6CisJJChQWVRIT05fV09SRCkgdXRpbC9zZXR1cC5weSAtLXF1aWV0IGluc3RhbGwgLS1yb290PScvJChERVNURElSX1NRKScKKwogaW5zdGFsbC1kb2M6CiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwKIApAQCAtODk1LDcgKzkwMiw3IEBACiAjIyMgQ2xlYW5pbmcgcnVsZXMKIAogY2xlYW46Ci0JJChSTSkgJChPVVRQVVQpeyoubywqLyoubywqLyovKi5vLCovKi8qLyoubywkKExJQl9GSUxFKSxwZXJmLWFyY2hpdmV9CisJJChSTSkgJChMSUJfT0JKUykgJChCVUlMVElOX09CSlMpICQoTElCX0ZJTEUpICQoT1VUUFVUKXBlcmYtYXJjaGl2ZSAkKE9VVFBVVClwZXJmLm8gJChMQU5HX0JJTkRJTkdTKQogCSQoUk0pICQoQUxMX1BST0dSQU1TKSBwZXJmCiAJJChSTSkgKi5zcGVjICoucHljICoucHlvICovKi5weWMgKi8qLnB5byAkKE9VVFBVVCljb21tb24tY21kcy5oIFRBR1MgdGFncyBjc2NvcGUqCiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uLyBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL2R3YXJmLXJlZ3MuYyBiL3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC9kd2FyZi1yZWdzLmMKaW5kZXggZmZmNjQ1MC4uZThkNWM1NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL2R3YXJmLXJlZ3MuYworKysgYi90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvZHdhcmYtcmVncy5jCkBAIC04LDcgKzgsMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZm5kZWYgX19VQ0xJQkNfXwogI2luY2x1ZGUgPGxpYmlvLmg+CisjZW5kaWYKICNpbmNsdWRlIDxkd2FyZi1yZWdzLmg+CiAKIHN0cnVjdCBwdF9yZWdzX2R3YXJmbnVtIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMgYi90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCmluZGV4IDlhYzA1YWEuLjg5OTA4MGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwpAQCAtOTQyLDEwICs5NDIsMTAgQEAKIAkiLWYiLAogCSItbSIsICIxMDI0IiwKIAkiLWMiLCAiMSIsCi0JIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlOnIiLAotCSItZSIsICJsb2NrOmxvY2tfYWNxdWlyZWQ6ciIsCi0JIi1lIiwgImxvY2s6bG9ja19jb250ZW5kZWQ6ciIsCi0JIi1lIiwgImxvY2s6bG9ja19yZWxlYXNlOnIiLAorCSItZSIsICJsb2NrOmxvY2tfYWNxdWlyZSIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlZCIsCisJIi1lIiwgImxvY2s6bG9ja19jb250ZW5kZWQiLAorCSItZSIsICJsb2NrOmxvY2tfcmVsZWFzZSIsCiB9OwogCiBzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IDVmMmE1YzcuLjcxMGFlM2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0xMzQsMTAgKzEzNCwxOCBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKHN0cikKLQkJcmV0ID0gcGFyc2VfbGluZV9yYW5nZV9kZXNjKHN0ciwgJnBhcmFtcy5saW5lX3JhbmdlKTsKLQlJTklUX0xJU1RfSEVBRCgmcGFyYW1zLmxpbmVfcmFuZ2UubGluZV9saXN0KTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIDA7CisKKwlpZiAocGFyYW1zLnNob3dfbGluZXMpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogbW9yZSB0aGFuIG9uZSAtLWxpbmUgb3B0aW9ucyBhcmUiCisJCQkgICAiIGRldGVjdGVkLiBPbmx5IHRoZSBmaXJzdCBvbmUgaXMgdmFsaWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcGFyYW1zLnNob3dfbGluZXMgPSB0cnVlOworCXJldCA9IHBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhzdHIsICZwYXJhbXMubGluZV9yYW5nZSk7CisJSU5JVF9MSVNUX0hFQUQoJnBhcmFtcy5saW5lX3JhbmdlLmxpbmVfbGlzdCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDgwZGM1YjcuLjZiMDUxOWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlIDxzY2hlZC5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKLSNkZWZpbmUgRkQoZSwgeCwgeSkgKCooaW50ICopeHlhcnJheV9fZW50cnkoZS0+ZmQsIHgsIHkpKQotCiBlbnVtIHdyaXRlX21vZGVfdCB7CiAJV1JJVEVfRk9SQ0UsCiAJV1JJVEVfQVBQRU5ECkBAIC00Nyw3ICs0NSw3IEBACiBzdGF0aWMgaW50CQkJb3V0cHV0Owogc3RhdGljIGludAkJCXBpcGVfb3V0cHV0CQkJPSAgICAgIDA7CiBzdGF0aWMgY29uc3QgY2hhcgkJKm91dHB1dF9uYW1lCQkJPSBOVUxMOwotc3RhdGljIGludAkJCWdyb3VwCQkJCT0gICAgICAwOworc3RhdGljIGJvb2wJCQlncm91cAkJCQk9ICBmYWxzZTsKIHN0YXRpYyBpbnQJCQlyZWFsdGltZV9wcmlvCQkJPSAgICAgIDA7CiBzdGF0aWMgYm9vbAkJCW5vZGVsYXkJCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCXJhd19zYW1wbGVzCQkJPSAgZmFsc2U7CkBAIC00MzgsNyArNDM2LDYgQEAKIAogc3RhdGljIGludCBfX2NtZF9yZWNvcmQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotCWludCBpOwogCXN0cnVjdCBzdGF0IHN0OwogCWludCBmbGFnczsKIAlpbnQgZXJyOwpAQCAtNjgyLDcgKzY3OSw2IEBACiAKIAlmb3IgKDs7KSB7CiAJCWludCBoaXRzID0gc2FtcGxlczsKLQkJaW50IHRocmVhZDsKIAogCQltbWFwX3JlYWRfYWxsKCk7CiAKQEAgLTY5MywxOSArNjg5LDggQEAKIAkJCXdha2luZysrOwogCQl9CiAKLQkJaWYgKGRvbmUpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBldnNlbF9saXN0LT5jcHVzLT5ucjsgaSsrKSB7Ci0JCQkJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKLQotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZXZzZWxfbGlzdC0+ZW50cmllcywgbm9kZSkgewotCQkJCQlmb3IgKHRocmVhZCA9IDA7Ci0JCQkJCQl0aHJlYWQgPCBldnNlbF9saXN0LT50aHJlYWRzLT5ucjsKLQkJCQkJCXRocmVhZCsrKQotCQkJCQkJaW9jdGwoRkQocG9zLCBpLCB0aHJlYWQpLAotCQkJCQkJCVBFUkZfRVZFTlRfSU9DX0RJU0FCTEUpOwotCQkJCX0KLQkJCX0KLQkJfQorCQlpZiAoZG9uZSkKKwkJCXBlcmZfZXZsaXN0X19kaXNhYmxlKGV2c2VsX2xpc3QpOwogCX0KIAogCWlmIChxdWlldCB8fCBzaWduciA9PSBTSUdVU1IxKQpAQCAtNzY4LDYgKzc1Myw4IEBACiAJCSAgICAiY2hpbGQgdGFza3MgZG8gbm90IGluaGVyaXQgY291bnRlcnMiKSwKIAlPUFRfVUlOVEVHRVIoJ0YnLCAiZnJlcSIsICZ1c2VyX2ZyZXEsICJwcm9maWxlIGF0IHRoaXMgZnJlcXVlbmN5IiksCiAJT1BUX1VJTlRFR0VSKCdtJywgIm1tYXAtcGFnZXMiLCAmbW1hcF9wYWdlcywgIm51bWJlciBvZiBtbWFwIGRhdGEgcGFnZXMiKSwKKwlPUFRfQk9PTEVBTigwLCAiZ3JvdXAiLCAmZ3JvdXAsCisJCSAgICAicHV0IHRoZSBjb3VudGVycyBpbnRvIGEgY291bnRlciBncm91cCIpLAogCU9QVF9CT09MRUFOKCdnJywgImNhbGwtZ3JhcGgiLCAmY2FsbF9ncmFwaCwKIAkJICAgICJkbyBjYWxsLWdyYXBoIChzdGFjayBjaGFpbi9iYWNrdHJhY2UpIHJlY29yZGluZyIpLAogCU9QVF9JTkNSKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCBmODU0ZWZkLi5kN2ZmMjc3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0xNjIsMjMgKzE2MiwyMiBAQAogewogCWlmICghKHNlbGYtPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfQ0FMTENIQUlOKSkgewogCQlpZiAoc29ydF9faGFzX3BhcmVudCkgewotCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtLXNvcnQgcGFyZW50LCBidXQgbm8iCi0JCQkJCSIgY2FsbGNoYWluIGRhdGEuIERpZCB5b3UgY2FsbCIKLQkJCQkJIiBwZXJmIHJlY29yZCB3aXRob3V0IC1nP1xuIik7CisJCQl1aV9fd2FybmluZygiU2VsZWN0ZWQgLS1zb3J0IHBhcmVudCwgYnV0IG5vICIKKwkJCQkgICAgImNhbGxjaGFpbiBkYXRhLiBEaWQgeW91IGNhbGwgIgorCQkJCSAgICAiJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgewotCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtZyBidXQgbm8gY2FsbGNoYWluIGRhdGEuIgotCQkJCQkiIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCB3aXRob3V0IgotCQkJCQkiIC1nP1xuIik7CisJCQl1aV9fd2FybmluZygiU2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiBEaWQgIgorCQkJCSAgICAieW91IGNhbGwgJ3BlcmYgcmVjb3JkJyB3aXRob3V0IC1nP1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9IGVsc2UgaWYgKCFkb250X3VzZV9jYWxsY2hhaW5zICYmIGNhbGxjaGFpbl9wYXJhbS5tb2RlICE9IENIQUlOX05PTkUgJiYKIAkJICAgIXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCXN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4gPSB0cnVlOwogCQkJaWYgKGNhbGxjaGFpbl9yZWdpc3Rlcl9wYXJhbSgmY2FsbGNoYWluX3BhcmFtKSA8IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHJlZ2lzdGVyIGNhbGxjaGFpbiIKLQkJCQkJCSIgcGFyYW1zXG4iKTsKKwkJCQl1aV9fd2FybmluZygiQ2FuJ3QgcmVnaXN0ZXIgY2FsbGNoYWluICIKKwkJCQkJICAgICJwYXJhbXMuXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IGRjZmU4ODcuLjUxNzc5NjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xNjM3LDIzICsxNjM3LDI5IEBACiAJLm9yZGVyZWRfc2FtcGxlcwk9IHRydWUsCiB9OwogCi1zdGF0aWMgaW50IHJlYWRfZXZlbnRzKHZvaWQpCitzdGF0aWMgdm9pZCByZWFkX2V2ZW50cyhib29sIGRlc3Ryb3ksIHN0cnVjdCBwZXJmX3Nlc3Npb24gKipwc2Vzc2lvbikKIHsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksCiAJCQkJCQkJIDAsIGZhbHNlLCAmZXZlbnRfb3BzKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZGllKCJObyBNZW1vcnkiKTsKIAogCWlmIChwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKSB7CiAJCWVyciA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CisJCWlmIChlcnIpCisJCQlkaWUoIkZhaWxlZCB0byBwcm9jZXNzIGV2ZW50cywgZXJyb3IgJWQiLCBlcnIpOworCiAJCW5yX2V2ZW50cyAgICAgID0gc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfZXZlbnRzWzBdOwogCQlucl9sb3N0X2V2ZW50cyA9IHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3Q7CiAJCW5yX2xvc3RfY2h1bmtzID0gc2Vzc2lvbi0+aGlzdHMuc3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX0xPU1RdOwogCX0KIAotCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOwotCXJldHVybiBlcnI7CisJaWYgKGRlc3Ryb3kpCisJCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOworCisJaWYgKHBzZXNzaW9uKQorCQkqcHNlc3Npb24gPSBzZXNzaW9uOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9iYWRfZXZlbnRzKHZvaWQpCkBAIC0xNjg5LDkgKzE2OTUsMTAgQEAKIHN0YXRpYyB2b2lkIF9fY21kX2xhdCh2b2lkKQogewogCXN0cnVjdCByYl9ub2RlICpuZXh0OworCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CiAKIAlzZXR1cF9wYWdlcigpOwotCXJlYWRfZXZlbnRzKCk7CisJcmVhZF9ldmVudHMoZmFsc2UsICZzZXNzaW9uKTsKIAlzb3J0X2xhdCgpOwogCiAJcHJpbnRmKCJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwpAQCAtMTcxNyw2ICsxNzI0LDcgQEAKIAlwcmludF9iYWRfZXZlbnRzKCk7CiAJcHJpbnRmKCJcbiIpOwogCisJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2Vfc2NoZWRfaGFuZGxlciBtYXBfb3BzICA9IHsKQEAgLTE3MzEsNyArMTczOSw3IEBACiAJbWF4X2NwdSA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpOwogCiAJc2V0dXBfcGFnZXIoKTsKLQlyZWFkX2V2ZW50cygpOworCXJlYWRfZXZlbnRzKHRydWUsIE5VTEwpOwogCXByaW50X2JhZF9ldmVudHMoKTsKIH0KIApAQCAtMTc0NCw3ICsxNzUyLDcgQEAKIAogCXRlc3RfY2FsaWJyYXRpb25zKCk7CiAKLQlyZWFkX2V2ZW50cygpOworCXJlYWRfZXZlbnRzKHRydWUsIE5VTEwpOwogCiAJcHJpbnRmKCJucl9ydW5fZXZlbnRzOiAgICAgICAgJWxkXG4iLCBucl9ydW5fZXZlbnRzKTsKIAlwcmludGYoIm5yX3NsZWVwX2V2ZW50czogICAgICAlbGRcbiIsIG5yX3NsZWVwX2V2ZW50cyk7CkBAIC0xNzY5LDcgKzE3NzcsNyBAQAogCiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2NoZWRfdXNhZ2VbXSA9IHsKLQkicGVyZiBzY2hlZCBbPG9wdGlvbnM+XSB7cmVjb3JkfGxhdGVuY3l8bWFwfHJlcGxheXx0cmFjZX0iLAorCSJwZXJmIHNjaGVkIFs8b3B0aW9ucz5dIHtyZWNvcmR8bGF0ZW5jeXxtYXB8cmVwbGF5fHNjcmlwdH0iLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IDFhZDA0Y2UuLjVkZWIxN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiBzdGF0aWMgY29uc3QgY2hhcgkJKmNwdV9saXN0Owogc3RhdGljIGNvbnN0IGNoYXIJCSpjc3Zfc2VwCQkJPSBOVUxMOwogc3RhdGljIGJvb2wJCQljc3Zfb3V0cHV0CQkJPSBmYWxzZTsKK3N0YXRpYyBib29sCQkJZ3JvdXAJCQkJPSBmYWxzZTsKIAogc3RhdGljIHZvbGF0aWxlIGludCBkb25lID0gMDsKIApAQCAtMjgwLDE0ICsyODEsMTQgQEAKIAlhdHRyLT5pbmhlcml0ID0gIW5vX2luaGVyaXQ7CiAKIAlpZiAoc3lzdGVtX3dpZGUpCi0JCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGV2c2VsX2xpc3QtPmNwdXMsIGZhbHNlKTsKKwkJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX2NwdShldnNlbCwgZXZzZWxfbGlzdC0+Y3B1cywgZ3JvdXApOwogCiAJaWYgKHRhcmdldF9waWQgPT0gLTEgJiYgdGFyZ2V0X3RpZCA9PSAtMSkgewogCQlhdHRyLT5kaXNhYmxlZCA9IDE7CiAJCWF0dHItPmVuYWJsZV9vbl9leGVjID0gMTsKIAl9CiAKLQlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCBldnNlbF9saXN0LT50aHJlYWRzLCBmYWxzZSk7CisJcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgZXZzZWxfbGlzdC0+dGhyZWFkcywgZ3JvdXApOwogfQogCiAvKgpAQCAtMTA0Myw2ICsxMDQ0LDggQEAKIAkJICAgICJzdGF0IGV2ZW50cyBvbiBleGlzdGluZyB0aHJlYWQgaWQiKSwKIAlPUFRfQk9PTEVBTignYScsICJhbGwtY3B1cyIsICZzeXN0ZW1fd2lkZSwKIAkJICAgICJzeXN0ZW0td2lkZSBjb2xsZWN0aW9uIGZyb20gYWxsIENQVXMiKSwKKwlPUFRfQk9PTEVBTignZycsICJncm91cCIsICZncm91cCwKKwkJICAgICJwdXQgdGhlIGNvdW50ZXJzIGludG8gYSBjb3VudGVyIGdyb3VwIiksCiAJT1BUX0JPT0xFQU4oJ2MnLCAic2NhbGUiLCAmc2NhbGUsCiAJCSAgICAic2NhbGUvbm9ybWFsaXplIGNvdW50ZXJzIiksCiAJT1BUX0lOQ1IoJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jIGIvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jCmluZGV4IGUwMmQ3OGMuLmZlMDI5MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jb25maWcuYworKysgYi90b29scy9wZXJmL3V0aWwvY29uZmlnLmMKQEAgLTM5OSw3ICszOTksNiBAQAogaW50IHBlcmZfY29uZmlnKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQogewogCWludCByZXQgPSAwLCBmb3VuZCA9IDA7Ci0JY2hhciAqcmVwb19jb25maWcgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmhvbWUgPSBOVUxMOwogCiAJLyogU2V0dGluZyAkUEVSRl9DT05GSUcgbWFrZXMgcGVyZiByZWFkIF9vbmx5XyB0aGUgZ2l2ZW4gY29uZmlnIGZpbGUuICovCkBAIC00MTQsMTkgKzQxMywzMiBAQAogCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKIAlpZiAocGVyZl9jb25maWdfZ2xvYmFsKCkgJiYgaG9tZSkgewogCQljaGFyICp1c2VyX2NvbmZpZyA9IHN0cmR1cChta3BhdGgoIiVzLy5wZXJmY29uZmlnIiwgaG9tZSkpOwotCQlpZiAoIWFjY2Vzcyh1c2VyX2NvbmZpZywgUl9PSykpIHsKLQkJCXJldCArPSBwZXJmX2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnLCBkYXRhKTsKLQkJCWZvdW5kICs9IDE7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmICh1c2VyX2NvbmZpZyA9PSBOVUxMKSB7CisJCQl3YXJuaW5nKCJOb3QgZW5vdWdoIG1lbW9yeSB0byBwcm9jZXNzICVzLy5wZXJmY29uZmlnLCAiCisJCQkJImlnbm9yaW5nIGl0LiIsIGhvbWUpOworCQkJZ290byBvdXQ7CiAJCX0KKworCQlpZiAoc3RhdCh1c2VyX2NvbmZpZywgJnN0KSA8IDApCisJCQlnb3RvIG91dF9mcmVlOworCisJCWlmIChzdC5zdF91aWQgJiYgKHN0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7CisJCQl3YXJuaW5nKCJGaWxlICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdCwgIgorCQkJCSJpZ25vcmluZyBpdC4iLCB1c2VyX2NvbmZpZyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJaWYgKCFzdC5zdF9zaXplKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlyZXQgKz0gcGVyZl9jb25maWdfZnJvbV9maWxlKGZuLCB1c2VyX2NvbmZpZywgZGF0YSk7CisJCWZvdW5kICs9IDE7CitvdXRfZnJlZToKIAkJZnJlZSh1c2VyX2NvbmZpZyk7CiAJfQotCi0JcmVwb19jb25maWcgPSBwZXJmX3BhdGhkdXAoImNvbmZpZyIpOwotCWlmICghYWNjZXNzKHJlcG9fY29uZmlnLCBSX09LKSkgewotCQlyZXQgKz0gcGVyZl9jb25maWdfZnJvbV9maWxlKGZuLCByZXBvX2NvbmZpZywgZGF0YSk7Ci0JCWZvdW5kICs9IDE7Ci0JfQotCWZyZWUocmVwb19jb25maWcpOworb3V0OgogCWlmIChmb3VuZCA9PSAwKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kd2FyZi1hdXguYyBiL3Rvb2xzL3BlcmYvdXRpbC9kd2FyZi1hdXguYwppbmRleCBmZGRmNDBmLi5lZTUxZTliIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZHdhcmYtYXV4LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2R3YXJmLWF1eC5jCkBAIC05Niw2ICs5NiwzOSBAQAogCXJldHVybiAqbGluZW5vID86IC1FTk9FTlQ7CiB9CiAKK3N0YXRpYyBpbnQgX19kaWVfZmluZF9pbmxpbmVfY2IoRHdhcmZfRGllICpkaWVfbWVtLCB2b2lkICpkYXRhKTsKKworLyoqCisgKiBjdV93YWxrX2Z1bmN0aW9uc19hdCAtIFdhbGsgb24gZnVuY3Rpb24gRElFcyBhdCBnaXZlbiBhZGRyZXNzCisgKiBAY3VfZGllOiBBIENVIERJRQorICogQGFkZHI6IEFuIGFkZHJlc3MKKyAqIEBjYWxsYmFjazogQSBjYWxsYmFjayB3aGljaCBjYWxsZWQgd2l0aCBmb3VuZCBESUVzCisgKiBAZGF0YTogQSB1c2VyIGRhdGEKKyAqCisgKiBXYWxrIG9uIGZ1bmN0aW9uIERJRXMgYXQgZ2l2ZW4gQGFkZHIgaW4gQGN1X2RpZS4gUGFzc2VkIERJRXMKKyAqIHNob3VsZCBiZSBzdWJwcm9ncmFtIG9yIGlubGluZWQtc3Vicm91dGluZXMuCisgKi8KK2ludCBjdV93YWxrX2Z1bmN0aW9uc19hdChEd2FyZl9EaWUgKmN1X2RpZSwgRHdhcmZfQWRkciBhZGRyLAorCQkgICAgaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKQoreworCUR3YXJmX0RpZSBkaWVfbWVtOworCUR3YXJmX0RpZSAqc2NfZGllOworCWludCByZXQgPSAtRU5PRU5UOworCisJLyogSW5saW5lZCBmdW5jdGlvbiBjb3VsZCBiZSByZWN1cnNpdmUuIFRyYWNlIGl0IHVudGlsIGZhaWwgKi8KKwlmb3IgKHNjX2RpZSA9IGRpZV9maW5kX3JlYWxmdW5jKGN1X2RpZSwgYWRkciwgJmRpZV9tZW0pOworCSAgICAgc2NfZGllICE9IE5VTEw7CisJICAgICBzY19kaWUgPSBkaWVfZmluZF9jaGlsZChzY19kaWUsIF9fZGllX2ZpbmRfaW5saW5lX2NiLCAmYWRkciwKKwkJCQkgICAgICZkaWVfbWVtKSkgeworCQlyZXQgPSBjYWxsYmFjayhzY19kaWUsIGRhdGEpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKKworfQorCiAvKioKICAqIGRpZV9jb21wYXJlX25hbWUgLSBDb21wYXJlIGRpZW5hbWUgYW5kIHRuYW1lCiAgKiBAZHdfZGllOiBhIERJRQpAQCAtMTk4LDYgKzIzMSwxOSBAQAogCXJldHVybiAwOwogfQogCisvKiBHZXQgYXR0cmlidXRlIGFuZCB0cmFuc2xhdGUgaXQgYXMgYSBzZGF0YSAqLworc3RhdGljIGludCBkaWVfZ2V0X2F0dHJfc2RhdGEoRHdhcmZfRGllICp0cF9kaWUsIHVuc2lnbmVkIGludCBhdHRyX25hbWUsCisJCQkgICAgICBEd2FyZl9Td29yZCAqcmVzdWx0KQoreworCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOworCisJaWYgKGR3YXJmX2F0dHIodHBfZGllLCBhdHRyX25hbWUsICZhdHRyKSA9PSBOVUxMIHx8CisJICAgIGR3YXJmX2Zvcm1zZGF0YSgmYXR0ciwgcmVzdWx0KSAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIGRpZV9pc19zaWduZWRfdHlwZSAtIENoZWNrIHdoZXRoZXIgYSB0eXBlIERJRSBpcyBzaWduZWQgb3Igbm90CiAgKiBAdHBfZGllOiBhIERJRSBvZiBhIHR5cGUKQEAgLTI1MCw2ICsyOTYsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogR2V0IHRoZSBjYWxsIGZpbGUgaW5kZXggbnVtYmVyIGluIENVIERJRSAqLworc3RhdGljIGludCBkaWVfZ2V0X2NhbGxfZmlsZW5vKER3YXJmX0RpZSAqaW5fZGllKQoreworCUR3YXJmX1N3b3JkIGlkeDsKKworCWlmIChkaWVfZ2V0X2F0dHJfc2RhdGEoaW5fZGllLCBEV19BVF9jYWxsX2ZpbGUsICZpZHgpID09IDApCisJCXJldHVybiAoaW50KWlkeDsKKwllbHNlCisJCXJldHVybiAtRU5PRU5UOworfQorCisvKiBHZXQgdGhlIGRlY2xhcmVkIGZpbGUgaW5kZXggbnVtYmVyIGluIENVIERJRSAqLworc3RhdGljIGludCBkaWVfZ2V0X2RlY2xfZmlsZW5vKER3YXJmX0RpZSAqcGRpZSkKK3sKKwlEd2FyZl9Td29yZCBpZHg7CisKKwlpZiAoZGllX2dldF9hdHRyX3NkYXRhKHBkaWUsIERXX0FUX2RlY2xfZmlsZSwgJmlkeCkgPT0gMCkKKwkJcmV0dXJuIChpbnQpaWR4OworCWVsc2UKKwkJcmV0dXJuIC1FTk9FTlQ7Cit9CisKKy8qKgorICogZGllX2dldF9jYWxsX2ZpbGUgLSBHZXQgY2FsbHNpdGUgZmlsZSBuYW1lIG9mIGlubGluZWQgZnVuY3Rpb24gaW5zdGFuY2UKKyAqIEBpbl9kaWU6IGEgRElFIG9mIGFuIGlubGluZWQgZnVuY3Rpb24gaW5zdGFuY2UKKyAqCisgKiBHZXQgY2FsbC1zaXRlIGZpbGUgbmFtZSBvZiBAaW5fZGllLiBUaGlzIG1lYW5zIGZyb20gd2hpY2ggZmlsZSB0aGUgaW5saW5lCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK2NvbnN0IGNoYXIgKmRpZV9nZXRfY2FsbF9maWxlKER3YXJmX0RpZSAqaW5fZGllKQoreworCUR3YXJmX0RpZSBjdV9kaWU7CisJRHdhcmZfRmlsZXMgKmZpbGVzOworCWludCBpZHg7CisKKwlpZHggPSBkaWVfZ2V0X2NhbGxfZmlsZW5vKGluX2RpZSk7CisJaWYgKGlkeCA8IDAgfHwgIWR3YXJmX2RpZWN1KGluX2RpZSwgJmN1X2RpZSwgTlVMTCwgTlVMTCkgfHwKKwkgICAgZHdhcmZfZ2V0c3JjZmlsZXMoJmN1X2RpZSwgJmZpbGVzLCBOVUxMKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkd2FyZl9maWxlc3JjKGZpbGVzLCBpZHgsIE5VTEwsIE5VTEwpOworfQorCisKIC8qKgogICogZGllX2ZpbmRfY2hpbGQgLSBHZW5lcmljIERJRSBzZWFyY2ggZnVuY3Rpb24gaW4gRElFIHRyZWUKICAqIEBydF9kaWU6IGEgcm9vdCBESUUKQEAgLTM3NCw5ICs0NjQsNzggQEAKIAlyZXR1cm4gZGllX21lbTsKIH0KIAorc3RydWN0IF9faW5zdGFuY2Vfd2Fsa19wYXJhbSB7CisJdm9pZCAgICAqYWRkcjsKKwlpbnQJKCpjYWxsYmFjaykoRHdhcmZfRGllICosIHZvaWQgKik7CisJdm9pZCAgICAqZGF0YTsKKwlpbnQJcmV0dmFsOworfTsKKworc3RhdGljIGludCBfX2RpZV93YWxrX2luc3RhbmNlc19jYihEd2FyZl9EaWUgKmluc3QsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IF9faW5zdGFuY2Vfd2Fsa19wYXJhbSAqaXdwID0gZGF0YTsKKwlEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisJRHdhcmZfRGllIG9yaWdpbl9tZW07CisJRHdhcmZfQXR0cmlidXRlICphdHRyOworCUR3YXJmX0RpZSAqb3JpZ2luOworCWludCB0bXA7CisKKwlhdHRyID0gZHdhcmZfYXR0cihpbnN0LCBEV19BVF9hYnN0cmFjdF9vcmlnaW4sICZhdHRyX21lbSk7CisJaWYgKGF0dHIgPT0gTlVMTCkKKwkJcmV0dXJuIERJRV9GSU5EX0NCX0NPTlRJTlVFOworCisJb3JpZ2luID0gZHdhcmZfZm9ybXJlZl9kaWUoYXR0ciwgJm9yaWdpbl9tZW0pOworCWlmIChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW4tPmFkZHIgIT0gaXdwLT5hZGRyKQorCQlyZXR1cm4gRElFX0ZJTkRfQ0JfQ09OVElOVUU7CisKKwkvKiBJZ25vcmUgcmVkdW5kYW50IGluc3RhbmNlcyAqLworCWlmIChkd2FyZl90YWcoaW5zdCkgPT0gRFdfVEFHX2lubGluZWRfc3Vicm91dGluZSkgeworCQlkd2FyZl9kZWNsX2xpbmUob3JpZ2luLCAmdG1wKTsKKwkJaWYgKGRpZV9nZXRfY2FsbF9saW5lbm8oaW5zdCkgPT0gdG1wKSB7CisJCQl0bXAgPSBkaWVfZ2V0X2RlY2xfZmlsZW5vKG9yaWdpbik7CisJCQlpZiAoZGllX2dldF9jYWxsX2ZpbGVubyhpbnN0KSA9PSB0bXApCisJCQkJcmV0dXJuIERJRV9GSU5EX0NCX0NPTlRJTlVFOworCQl9CisJfQorCisJaXdwLT5yZXR2YWwgPSBpd3AtPmNhbGxiYWNrKGluc3QsIGl3cC0+ZGF0YSk7CisKKwlyZXR1cm4gKGl3cC0+cmV0dmFsKSA/IERJRV9GSU5EX0NCX0VORCA6IERJRV9GSU5EX0NCX0NPTlRJTlVFOworfQorCisvKioKKyAqIGRpZV93YWxrX2luc3RhbmNlcyAtIFdhbGsgb24gaW5zdGFuY2VzIG9mIGdpdmVuIERJRQorICogQG9yX2RpZTogYW4gYWJzdHJhY3Qgb3JpZ2luYWwgRElFCisgKiBAY2FsbGJhY2s6IGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdpdGggaW5zdGFuY2UgRElFCisgKiBAZGF0YTogdXNlciBkYXRhCisgKgorICogV2FsayBvbiB0aGUgaW5zdGFuY2VzIG9mIGdpdmUgQGluX2RpZS4gQGluX2RpZSBtdXN0IGJlIGFuIGlubGluZWQgZnVuY3Rpb24KKyAqIGRlY2xhcnRpb24uIFRoaXMgcmV0dXJucyB0aGUgcmV0dXJuIHZhbHVlIG9mIEBjYWxsYmFjayBpZiBpdCByZXR1cm5zCisgKiBub24temVybyB2YWx1ZSwgb3IgLUVOT0VOVCBpZiB0aGVyZSBpcyBubyBpbnN0YW5jZS4KKyAqLworaW50IGRpZV93YWxrX2luc3RhbmNlcyhEd2FyZl9EaWUgKm9yX2RpZSwgaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqLCB2b2lkICopLAorCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlEd2FyZl9EaWUgY3VfZGllOworCUR3YXJmX0RpZSBkaWVfbWVtOworCXN0cnVjdCBfX2luc3RhbmNlX3dhbGtfcGFyYW0gaXdwID0geworCQkuYWRkciA9IG9yX2RpZS0+YWRkciwKKwkJLmNhbGxiYWNrID0gY2FsbGJhY2ssCisJCS5kYXRhID0gZGF0YSwKKwkJLnJldHZhbCA9IC1FTk9FTlQsCisJfTsKKworCWlmIChkd2FyZl9kaWVjdShvcl9kaWUsICZjdV9kaWUsIE5VTEwsIE5VTEwpID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJZGllX2ZpbmRfY2hpbGQoJmN1X2RpZSwgX19kaWVfd2Fsa19pbnN0YW5jZXNfY2IsICZpd3AsICZkaWVfbWVtKTsKKworCXJldHVybiBpd3AucmV0dmFsOworfQorCiAvKiBMaW5lIHdhbGtlciBpbnRlcm5hbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgX19saW5lX3dhbGtfcGFyYW0gewotCWNvbnN0IGNoYXIgKmZuYW1lOworCWJvb2wgcmVjdXJzaXZlOwogCWxpbmVfd2Fsa19jYWxsYmFja190IGNhbGxiYWNrOwogCXZvaWQgKmRhdGE7CiAJaW50IHJldHZhbDsKQEAgLTM4NSwzOSArNTQ0LDU2IEBACiBzdGF0aWMgaW50IF9fZGllX3dhbGtfZnVuY2xpbmVzX2NiKER3YXJmX0RpZSAqaW5fZGllLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBfX2xpbmVfd2Fsa19wYXJhbSAqbHcgPSBkYXRhOwotCUR3YXJmX0FkZHIgYWRkcjsKKwlEd2FyZl9BZGRyIGFkZHIgPSAwOworCWNvbnN0IGNoYXIgKmZuYW1lOwogCWludCBsaW5lbm87CiAKIAlpZiAoZHdhcmZfdGFnKGluX2RpZSkgPT0gRFdfVEFHX2lubGluZWRfc3Vicm91dGluZSkgeworCQlmbmFtZSA9IGRpZV9nZXRfY2FsbF9maWxlKGluX2RpZSk7CiAJCWxpbmVubyA9IGRpZV9nZXRfY2FsbF9saW5lbm8oaW5fZGllKTsKLQkJaWYgKGxpbmVubyA+IDAgJiYgZHdhcmZfZW50cnlwYyhpbl9kaWUsICZhZGRyKSA9PSAwKSB7Ci0JCQlsdy0+cmV0dmFsID0gbHctPmNhbGxiYWNrKGx3LT5mbmFtZSwgbGluZW5vLCBhZGRyLAotCQkJCQkJICBsdy0+ZGF0YSk7CisJCWlmIChmbmFtZSAmJiBsaW5lbm8gPiAwICYmIGR3YXJmX2VudHJ5cGMoaW5fZGllLCAmYWRkcikgPT0gMCkgeworCQkJbHctPnJldHZhbCA9IGx3LT5jYWxsYmFjayhmbmFtZSwgbGluZW5vLCBhZGRyLCBsdy0+ZGF0YSk7CiAJCQlpZiAobHctPnJldHZhbCAhPSAwKQogCQkJCXJldHVybiBESUVfRklORF9DQl9FTkQ7CiAJCX0KIAl9Ci0JcmV0dXJuIERJRV9GSU5EX0NCX1NJQkxJTkc7CisJaWYgKCFsdy0+cmVjdXJzaXZlKQorCQkvKiBEb24ndCBuZWVkIHRvIHNlYXJjaCByZWN1cnNpdmVseSAqLworCQlyZXR1cm4gRElFX0ZJTkRfQ0JfU0lCTElORzsKKworCWlmIChhZGRyKSB7CisJCWZuYW1lID0gZHdhcmZfZGVjbF9maWxlKGluX2RpZSk7CisJCWlmIChmbmFtZSAmJiBkd2FyZl9kZWNsX2xpbmUoaW5fZGllLCAmbGluZW5vKSA9PSAwKSB7CisJCQlsdy0+cmV0dmFsID0gbHctPmNhbGxiYWNrKGZuYW1lLCBsaW5lbm8sIGFkZHIsIGx3LT5kYXRhKTsKKwkJCWlmIChsdy0+cmV0dmFsICE9IDApCisJCQkJcmV0dXJuIERJRV9GSU5EX0NCX0VORDsKKwkJfQorCX0KKworCS8qIENvbnRpbnVlIHRvIHNlYXJjaCBuZXN0ZWQgaW5saW5lZCBmdW5jdGlvbiBjYWxsLXNpdGVzICovCisJcmV0dXJuIERJRV9GSU5EX0NCX0NPTlRJTlVFOwogfQogCiAvKiBXYWxrIG9uIGxpbmVzIG9mIGJsb2NrcyBpbmNsdWRlZCBpbiBnaXZlbiBESUUgKi8KLXN0YXRpYyBpbnQgX19kaWVfd2Fsa19mdW5jbGluZXMoRHdhcmZfRGllICpzcF9kaWUsCitzdGF0aWMgaW50IF9fZGllX3dhbGtfZnVuY2xpbmVzKER3YXJmX0RpZSAqc3BfZGllLCBib29sIHJlY3Vyc2l2ZSwKIAkJCQlsaW5lX3dhbGtfY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgX19saW5lX3dhbGtfcGFyYW0gbHcgPSB7CisJCS5yZWN1cnNpdmUgPSByZWN1cnNpdmUsCiAJCS5jYWxsYmFjayA9IGNhbGxiYWNrLAogCQkuZGF0YSA9IGRhdGEsCiAJCS5yZXR2YWwgPSAwLAogCX07CiAJRHdhcmZfRGllIGRpZV9tZW07CiAJRHdhcmZfQWRkciBhZGRyOworCWNvbnN0IGNoYXIgKmZuYW1lOwogCWludCBsaW5lbm87CiAKIAkvKiBIYW5kbGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gbGluZSAqLwotCWx3LmZuYW1lID0gZHdhcmZfZGVjbF9maWxlKHNwX2RpZSk7Ci0JaWYgKGx3LmZuYW1lICYmIGR3YXJmX2RlY2xfbGluZShzcF9kaWUsICZsaW5lbm8pID09IDAgJiYKKwlmbmFtZSA9IGR3YXJmX2RlY2xfZmlsZShzcF9kaWUpOworCWlmIChmbmFtZSAmJiBkd2FyZl9kZWNsX2xpbmUoc3BfZGllLCAmbGluZW5vKSA9PSAwICYmCiAJICAgIGR3YXJmX2VudHJ5cGMoc3BfZGllLCAmYWRkcikgPT0gMCkgewotCQlsdy5yZXR2YWwgPSBjYWxsYmFjayhsdy5mbmFtZSwgbGluZW5vLCBhZGRyLCBkYXRhKTsKKwkJbHcucmV0dmFsID0gY2FsbGJhY2soZm5hbWUsIGxpbmVubywgYWRkciwgZGF0YSk7CiAJCWlmIChsdy5yZXR2YWwgIT0gMCkKIAkJCWdvdG8gZG9uZTsKIAl9CkBAIC00MzAsNyArNjA2LDcgQEAKIHsKIAlzdHJ1Y3QgX19saW5lX3dhbGtfcGFyYW0gKmx3ID0gZGF0YTsKIAotCWx3LT5yZXR2YWwgPSBfX2RpZV93YWxrX2Z1bmNsaW5lcyhzcF9kaWUsIGx3LT5jYWxsYmFjaywgbHctPmRhdGEpOworCWx3LT5yZXR2YWwgPSBfX2RpZV93YWxrX2Z1bmNsaW5lcyhzcF9kaWUsIHRydWUsIGx3LT5jYWxsYmFjaywgbHctPmRhdGEpOwogCWlmIChsdy0+cmV0dmFsICE9IDApCiAJCXJldHVybiBEV0FSRl9DQl9BQk9SVDsKIApAQCAtNDM5LDcgKzYxNSw3IEBACiAKIC8qKgogICogZGllX3dhbGtfbGluZXMgLSBXYWxrIG9uIGxpbmVzIGluc2lkZSBnaXZlbiBESUUKLSAqIEBydF9kaWU6IGEgcm9vdCBESUUgKENVIG9yIHN1YnByb2dyYW0pCisgKiBAcnRfZGllOiBhIHJvb3QgRElFIChDVSwgc3VicHJvZ3JhbSBvciBpbmxpbmVkX3N1YnJvdXRpbmUpCiAgKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHJvdXRpbmUKICAqIEBkYXRhOiB1c2VyIGRhdGEKICAqCkBAIC00NjAsMTIgKzYzNiwxMiBAQAogCXNpemVfdCBubGluZXMsIGk7CiAKIAkvKiBHZXQgdGhlIENVIGRpZSAqLwotCWlmIChkd2FyZl90YWcocnRfZGllKSA9PSBEV19UQUdfc3VicHJvZ3JhbSkKKwlpZiAoZHdhcmZfdGFnKHJ0X2RpZSkgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdCkKIAkJY3VfZGllID0gZHdhcmZfZGllY3UocnRfZGllLCAmZGllX21lbSwgTlVMTCwgTlVMTCk7CiAJZWxzZQogCQljdV9kaWUgPSBydF9kaWU7CiAJaWYgKCFjdV9kaWUpIHsKLQkJcHJfZGVidWcyKCJGYWlsZWQgdG8gZ2V0IENVIGZyb20gc3VicHJvZ3JhbVxuIik7CisJCXByX2RlYnVnMigiRmFpbGVkIHRvIGdldCBDVSBmcm9tIGdpdmVuIERJRS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUwOSw3ICs2ODUsMTEgQEAKIAkgKiBzdWJyb3V0aW5lcy4gV2UgaGF2ZSB0byBjaGVjayBmdW5jdGlvbnMgbGlzdCBvciBnaXZlbiBmdW5jdGlvbi4KIAkgKi8KIAlpZiAocnRfZGllICE9IGN1X2RpZSkKLQkJcmV0ID0gX19kaWVfd2Fsa19mdW5jbGluZXMocnRfZGllLCBjYWxsYmFjaywgZGF0YSk7CisJCS8qCisJCSAqIERvbid0IG5lZWQgd2FsayBmdW5jdGlvbnMgcmVjdXJzaXZlbHksIGJlY2F1c2UgbmVzdGVkCisJCSAqIGlubGluZWQgZnVuY3Rpb25zIGRvbid0IGhhdmUgbGluZXMgb2YgdGhlIHNwZWNpZmllZCBESUUuCisJCSAqLworCQlyZXQgPSBfX2RpZV93YWxrX2Z1bmNsaW5lcyhydF9kaWUsIGZhbHNlLCBjYWxsYmFjaywgZGF0YSk7CiAJZWxzZSB7CiAJCXN0cnVjdCBfX2xpbmVfd2Fsa19wYXJhbSBwYXJhbSA9IHsKIAkJCS5jYWxsYmFjayA9IGNhbGxiYWNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2R3YXJmLWF1eC5oIGIvdG9vbHMvcGVyZi91dGlsL2R3YXJmLWF1eC5oCmluZGV4IGJjM2IyMTEuLjZjZTE3MTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kd2FyZi1hdXguaAorKysgYi90b29scy9wZXJmL3V0aWwvZHdhcmYtYXV4LmgKQEAgLTM0LDEyICszNCwxOSBAQAogZXh0ZXJuIGludCBjdV9maW5kX2xpbmVpbmZvKER3YXJmX0RpZSAqY3VkaWUsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICBjb25zdCBjaGFyICoqZm5hbWUsIGludCAqbGluZW5vKTsKIAorLyogV2FsayBvbiBmdW5jaXRvbnMgYXQgZ2l2ZW4gYWRkcmVzcyAqLworZXh0ZXJuIGludCBjdV93YWxrX2Z1bmN0aW9uc19hdChEd2FyZl9EaWUgKmN1X2RpZSwgRHdhcmZfQWRkciBhZGRyLAorCQkJaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKTsKKwogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwogZXh0ZXJuIGJvb2wgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgKmR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpOwogCiAvKiBHZXQgY2FsbHNpdGUgbGluZSBudW1iZXIgb2YgaW5saW5lLWZ1bmN0aW9uIGluc3RhbmNlICovCiBleHRlcm4gaW50IGRpZV9nZXRfY2FsbF9saW5lbm8oRHdhcmZfRGllICppbl9kaWUpOwogCisvKiBHZXQgY2FsbHNpdGUgZmlsZSBuYW1lIG9mIGlubGluZWQgZnVuY3Rpb24gaW5zdGFuY2UgKi8KK2V4dGVybiBjb25zdCBjaGFyICpkaWVfZ2V0X2NhbGxfZmlsZShEd2FyZl9EaWUgKmluX2RpZSk7CisKIC8qIEdldCB0eXBlIGRpZSAqLwogZXh0ZXJuIER3YXJmX0RpZSAqZGllX2dldF90eXBlKER3YXJmX0RpZSAqdnJfZGllLCBEd2FyZl9EaWUgKmRpZV9tZW0pOwogCkBAIC03Myw2ICs4MCwxMCBAQAogZXh0ZXJuIER3YXJmX0RpZSAqZGllX2ZpbmRfaW5saW5lZnVuYyhEd2FyZl9EaWUgKnNwX2RpZSwgRHdhcmZfQWRkciBhZGRyLAogCQkJCSAgICAgIER3YXJmX0RpZSAqZGllX21lbSk7CiAKKy8qIFdhbGsgb24gdGhlIGluc3RhbmNlcyBvZiBnaXZlbiBESUUgKi8KK2V4dGVybiBpbnQgZGllX3dhbGtfaW5zdGFuY2VzKER3YXJmX0RpZSAqaW5fZGllLAorCQkJICAgICAgaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKTsKKwogLyogV2Fsa2VyIG9uIGxpbmVzIChOb3RlOiBsaW5lIG51bWJlciB3aWxsIG5vdCBiZSBzb3J0ZWQpICovCiB0eXBlZGVmIGludCAoKiBsaW5lX3dhbGtfY2FsbGJhY2tfdCkgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZW5vLAogCQkJCSAgICAgIER3YXJmX0FkZHIgYWRkciwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggYjAyMWVhOS4uYzEyYmQ0NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtODUsMTAgKzg1LDMyIEBACiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAogCWlmIChldnNlbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKworCS8qIHVzZSBzdHJkdXAoKSBiZWNhdXNlIGZyZWUoZXZzZWwpIGFzc3VtZXMgbmFtZSBpcyBhbGxvY2F0ZWQgKi8KKwlldnNlbC0+bmFtZSA9IHN0cmR1cCgiY3ljbGVzIik7CisJaWYgKCFldnNlbC0+bmFtZSkKKwkJZ290byBlcnJvcl9mcmVlOwogCiAJcGVyZl9ldmxpc3RfX2FkZChldmxpc3QsIGV2c2VsKTsKIAlyZXR1cm4gMDsKK2Vycm9yX2ZyZWU6CisJcGVyZl9ldnNlbF9fZGVsZXRlKGV2c2VsKTsKK2Vycm9yOgorCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHBlcmZfZXZsaXN0X19kaXNhYmxlKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCWludCBjcHUsIHRocmVhZDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBldmxpc3QtPmNwdXMtPm5yOyBjcHUrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykKKwkJCQlpb2N0bChGRChwb3MsIGNwdSwgdGhyZWFkKSwgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSk7CisJCX0KKwl9CiB9CiAKIGludCBwZXJmX2V2bGlzdF9fYWxsb2NfcG9sbGZkKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCmluZGV4IGIyYjg2MjMuLmNlODVhZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKQEAgLTUzLDYgKzUzLDggQEAKIGludCBwZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHBhZ2VzLCBib29sIG92ZXJ3cml0ZSk7CiB2b2lkIHBlcmZfZXZsaXN0X19tdW5tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogCit2b2lkIHBlcmZfZXZsaXN0X19kaXNhYmxlKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKKwogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZsaXN0X19zZXRfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKIAkJCQkJIHN0cnVjdCBjcHVfbWFwICpjcHVzLAogCQkJCQkgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKaW5kZXggY2IyOTU5YS4uYjZjMWFkMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwpAQCAtMTg5LDggKzE4OSw4IEBACiAJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMpCiB7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpyZWFsbmFtZSwgKmZpbGVuYW1lID0gbWFsbG9jKHNpemUpLAotCSAgICAgKmxpbmtuYW1lID0gbWFsbG9jKHNpemUpLCAqdGFyZ2V0bmFtZTsKKwljaGFyICpyZWFsbmFtZSwgKmZpbGVuYW1lID0gemFsbG9jKHNpemUpLAorCSAgICAgKmxpbmtuYW1lID0gemFsbG9jKHNpemUpLCAqdGFyZ2V0bmFtZTsKIAlpbnQgbGVuLCBlcnIgPSAtMTsKIAogCWlmIChpc19rYWxsc3ltcykgewpAQCAtMjU0LDggKzI1NCw4IEBACiBpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpCiB7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKLQljaGFyICpmaWxlbmFtZSA9IG1hbGxvYyhzaXplKSwKLQkgICAgICpsaW5rbmFtZSA9IG1hbGxvYyhzaXplKTsKKwljaGFyICpmaWxlbmFtZSA9IHphbGxvYyhzaXplKSwKKwkgICAgICpsaW5rbmFtZSA9IHphbGxvYyhzaXplKTsKIAlpbnQgZXJyID0gLTE7CiAKIAlpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQpAQCAtNzI2LDcgKzcyNiwxNiBAQAogCQkJcmV0dXJuIC0xOwogCiAJCWJldi5oZWFkZXIgPSBvbGRfYmV2LmhlYWRlcjsKLQkJYmV2LnBpZAkgICA9IDA7CisKKwkJLyoKKwkJICogQXMgdGhlIHBpZCBpcyB0aGUgbWlzc2luZyB2YWx1ZSwgd2UgbmVlZCB0byBmaWxsCisJCSAqIGl0IHByb3Blcmx5LiBUaGUgaGVhZGVyLm1pc2MgdmFsdWUgZ2l2ZSB1cyBuaWNlIGhpbnQuCisJCSAqLworCQliZXYucGlkCT0gSE9TVF9LRVJORUxfSUQ7CisJCWlmIChiZXYuaGVhZGVyLm1pc2MgPT0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSIHx8CisJCSAgICBiZXYuaGVhZGVyLm1pc2MgPT0gUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUwpCisJCQliZXYucGlkCT0gREVGQVVMVF9HVUVTVF9LRVJORUxfSUQ7CisKIAkJbWVtY3B5KGJldi5idWlsZF9pZCwgb2xkX2Jldi5idWlsZF9pZCwgc2l6ZW9mKGJldi5idWlsZF9pZCkpOwogCQlfX2V2ZW50X3Byb2Nlc3NfYnVpbGRfaWQoJmJldiwgZmlsZW5hbWUsIHNlc3Npb24pOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCA3OTFmOWRkLi41NDc2MjhlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTUsNyArNSw5IEBACiAjZGVmaW5lIF9fYWx3YXlzX2lubGluZQlpbmxpbmUKICNlbmRpZgogI2RlZmluZSBfX3VzZXIKKyNpZm5kZWYgX19hdHRyaWJ1dGVfY29uc3RfXwogI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCisjZW5kaWYKIAogI2RlZmluZSBfX3VzZWQJCV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggNGVhN2UxOS4uOTI4OTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNjk3LDcgKzY5NywxMSBAQAogCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAluID0gaGV4MnU2NChzdHIgKyAxLCAmY29uZmlnKTsKIAlpZiAobiA+IDApIHsKLQkJKnN0cnAgPSBzdHIgKyBuICsgMTsKKwkJY29uc3QgY2hhciAqZW5kID0gc3RyICsgbiArIDE7CisJCWlmICgqZW5kICE9ICdcMCcgJiYgKmVuZCAhPSAnLCcgJiYgKmVuZCAhPSAnOicpCisJCQlyZXR1cm4gRVZUX0ZBSUxFRDsKKworCQkqc3RycCA9IGVuZDsKIAkJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9SQVc7CiAJCWF0dHItPmNvbmZpZyA9IGNvbmZpZzsKIAkJcmV0dXJuIEVWVF9IQU5ETEVEOwpAQCAtMTA5Nyw2ICsxMTAxLDQgQEAKIAlwcmludGYoIlxuIik7CiAKIAlwcmludF90cmFjZXBvaW50X2V2ZW50cyhOVUxMLCBOVUxMKTsKLQotCWV4aXQoMTI5KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggYjgyZDU0Zi4uMWM3YmZhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTE4MjAsMTEgKzE4MjAsMTUgQEAKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JdGV2LT5wb2ludC5tb2R1bGUgPSBzdHJkdXAobW9kdWxlKTsKLQlpZiAodGV2LT5wb2ludC5tb2R1bGUgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOworCisJaWYgKG1vZHVsZSkgeworCQl0ZXYtPnBvaW50Lm1vZHVsZSA9IHN0cmR1cChtb2R1bGUpOworCQlpZiAodGV2LT5wb2ludC5tb2R1bGUgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KIAl9CisKIAl0ZXYtPnBvaW50Lm9mZnNldCA9IHBldi0+cG9pbnQub2Zmc2V0OwogCXRldi0+cG9pbnQucmV0cHJvYmUgPSBwZXYtPnBvaW50LnJldHByb2JlOwogCXRldi0+bmFyZ3MgPSBwZXYtPm5hcmdzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCmluZGV4IDNlNDRhM2UuLjU1NWZjMzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKQEAgLTYxMiwxMiArNjEyLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogRmluZCBhIHZhcmlhYmxlIGluIGEgc3VicHJvZ3JhbSBkaWUgKi8KLXN0YXRpYyBpbnQgZmluZF92YXJpYWJsZShEd2FyZl9EaWUgKnNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCisvKiBGaW5kIGEgdmFyaWFibGUgaW4gYSBzY29wZSBESUUgKi8KK3N0YXRpYyBpbnQgZmluZF92YXJpYWJsZShEd2FyZl9EaWUgKnNjX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7Ci0JRHdhcmZfRGllIHZyX2RpZSwgKnNjb3BlczsKKwlEd2FyZl9EaWUgdnJfZGllOwogCWNoYXIgYnVmWzMyXSwgKnB0cjsKLQlpbnQgcmV0LCBuc2NvcGVzOworCWludCByZXQgPSAwOwogCiAJaWYgKCFpc19jX3Zhcm5hbWUocGYtPnB2YXItPnZhcikpIHsKIAkJLyogQ29weSByYXcgcGFyYW1ldGVycyAqLwpAQCAtNjUyLDMwICs2NTIsMTYgQEAKIAlpZiAocGYtPnR2YXItPm5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcl9kZWJ1ZygiU2VhcmNoaW5nICclcycgdmFyaWFibGUgaW4gY29udGV4dC5cbiIsCi0JCSBwZi0+cHZhci0+dmFyKTsKKwlwcl9kZWJ1ZygiU2VhcmNoaW5nICclcycgdmFyaWFibGUgaW4gY29udGV4dC5cbiIsIHBmLT5wdmFyLT52YXIpOwogCS8qIFNlYXJjaCBjaGlsZCBkaWUgZm9yIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycy4gKi8KLQlpZiAoZGllX2ZpbmRfdmFyaWFibGVfYXQoc3BfZGllLCBwZi0+cHZhci0+dmFyLCBwZi0+YWRkciwgJnZyX2RpZSkpCi0JCXJldCA9IGNvbnZlcnRfdmFyaWFibGUoJnZyX2RpZSwgcGYpOwotCWVsc2UgewotCQkvKiBTZWFyY2ggdXBwZXIgY2xhc3MgKi8KLQkJbnNjb3BlcyA9IGR3YXJmX2dldHNjb3Blc19kaWUoc3BfZGllLCAmc2NvcGVzKTsKLQkJd2hpbGUgKG5zY29wZXMtLSA+IDEpIHsKLQkJCXByX2RlYnVnKCJTZWFyY2hpbmcgdmFyaWFibGVzIGluICVzXG4iLAotCQkJCSBkd2FyZl9kaWVuYW1lKCZzY29wZXNbbnNjb3Blc10pKTsKLQkJCS8qIFdlIHNob3VsZCBjaGVjayB0aGlzIHNjb3BlLCBzbyBnaXZlIGR1bW15IGFkZHJlc3MgKi8KLQkJCWlmIChkaWVfZmluZF92YXJpYWJsZV9hdCgmc2NvcGVzW25zY29wZXNdLAotCQkJCQkJIHBmLT5wdmFyLT52YXIsIDAsCi0JCQkJCQkgJnZyX2RpZSkpIHsKLQkJCQlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlKCZ2cl9kaWUsIHBmKTsKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQl9Ci0JCWlmIChzY29wZXMpCi0JCQlmcmVlKHNjb3Blcyk7Ci0JCXJldCA9IC1FTk9FTlQ7CisJaWYgKCFkaWVfZmluZF92YXJpYWJsZV9hdChzY19kaWUsIHBmLT5wdmFyLT52YXIsIHBmLT5hZGRyLCAmdnJfZGllKSkgeworCQkvKiBTZWFyY2ggYWdhaW4gaW4gZ2xvYmFsIHZhcmlhYmxlcyAqLworCQlpZiAoIWRpZV9maW5kX3ZhcmlhYmxlX2F0KCZwZi0+Y3VfZGllLCBwZi0+cHZhci0+dmFyLCAwLCAmdnJfZGllKSkKKwkJCXJldCA9IC1FTk9FTlQ7CiAJfQotZm91bmQ6CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlKCZ2cl9kaWUsIHBmKTsKKwogCWlmIChyZXQgPCAwKQogCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uXG4iLAogCQkJICAgcGYtPnB2YXItPnZhcik7CkBAIC03MTgsMjYgKzcwNCwzMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsIHByb2JlX2ZpbmRlciBjYWxsYmFjayB3aXRoIHJlYWwgc3VicHJvZ3JhbSBESUUgKi8KLXN0YXRpYyBpbnQgY2FsbF9wcm9iZV9maW5kZXIoRHdhcmZfRGllICpzcF9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorLyogQ2FsbCBwcm9iZV9maW5kZXIgY2FsbGJhY2sgd2l0aCBzY29wZSBESUUgKi8KK3N0YXRpYyBpbnQgY2FsbF9wcm9iZV9maW5kZXIoRHdhcmZfRGllICpzY19kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewotCUR3YXJmX0RpZSBkaWVfbWVtOwogCUR3YXJmX0F0dHJpYnV0ZSBmYl9hdHRyOwogCXNpemVfdCBub3BzOwogCWludCByZXQ7CiAKLQkvKiBJZiBubyByZWFsIHN1YnByb2dyYW0sIGZpbmQgYSByZWFsIG9uZSAqLwotCWlmICghc3BfZGllIHx8IGR3YXJmX3RhZyhzcF9kaWUpICE9IERXX1RBR19zdWJwcm9ncmFtKSB7Ci0JCXNwX2RpZSA9IGRpZV9maW5kX3JlYWxmdW5jKCZwZi0+Y3VfZGllLCBwZi0+YWRkciwgJmRpZV9tZW0pOwotCQlpZiAoIXNwX2RpZSkgeworCWlmICghc2NfZGllKSB7CisJCXByX2VycigiQ2FsbGVyIG11c3QgcGFzcyBhIHNjb3BlIERJRS4gUHJvZ3JhbSBlcnJvci5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBub3QgYSByZWFsIHN1YnByb2dyYW0sIGZpbmQgYSByZWFsIG9uZSAqLworCWlmIChkd2FyZl90YWcoc2NfZGllKSAhPSBEV19UQUdfc3VicHJvZ3JhbSkgeworCQlpZiAoIWRpZV9maW5kX3JlYWxmdW5jKCZwZi0+Y3VfZGllLCBwZi0+YWRkciwgJnBmLT5zcF9kaWUpKSB7CiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCBwcm9iZSBwb2ludCBpbiBhbnkgIgogCQkJCSAgICJmdW5jdGlvbnMuXG4iKTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9Ci0JfQorCX0gZWxzZQorCQltZW1jcHkoJnBmLT5zcF9kaWUsIHNjX2RpZSwgc2l6ZW9mKER3YXJmX0RpZSkpOwogCi0JLyogR2V0IHRoZSBmcmFtZSBiYXNlIGF0dHJpYnV0ZS9vcHMgKi8KLQlkd2FyZl9hdHRyKHNwX2RpZSwgRFdfQVRfZnJhbWVfYmFzZSwgJmZiX2F0dHIpOworCS8qIEdldCB0aGUgZnJhbWUgYmFzZSBhdHRyaWJ1dGUvb3BzIGZyb20gc3VicHJvZ3JhbSAqLworCWR3YXJmX2F0dHIoJnBmLT5zcF9kaWUsIERXX0FUX2ZyYW1lX2Jhc2UsICZmYl9hdHRyKTsKIAlyZXQgPSBkd2FyZl9nZXRsb2NhdGlvbl9hZGRyKCZmYl9hdHRyLCBwZi0+YWRkciwgJnBmLT5mYl9vcHMsICZub3BzLCAxKTsKIAlpZiAocmV0IDw9IDAgfHwgbm9wcyA9PSAwKSB7CiAJCXBmLT5mYl9vcHMgPSBOVUxMOwpAQCAtNzU1LDcgKzc0NSw3IEBACiAJfQogCiAJLyogQ2FsbCBmaW5kZXIncyBjYWxsYmFjayBoYW5kbGVyICovCi0JcmV0ID0gcGYtPmNhbGxiYWNrKHNwX2RpZSwgcGYpOworCXJldCA9IHBmLT5jYWxsYmFjayhzY19kaWUsIHBmKTsKIAogCS8qICpwZi0+ZmJfb3BzIHdpbGwgYmUgY2FjaGVkIGluIGxpYmR3LiBEb24ndCBmcmVlIGl0LiAqLwogCXBmLT5mYl9vcHMgPSBOVUxMOwpAQCAtNzYzLDE3ICs3NTMsODIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgZmluZF9zY29wZV9wYXJhbSB7CisJY29uc3QgY2hhciAqZnVuY3Rpb247CisJY29uc3QgY2hhciAqZmlsZTsKKwlpbnQgbGluZTsKKwlpbnQgZGlmZjsKKwlEd2FyZl9EaWUgKmRpZV9tZW07CisJYm9vbCBmb3VuZDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9iZXN0X3Njb3BlX2NiKER3YXJmX0RpZSAqZm5fZGllLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBmaW5kX3Njb3BlX3BhcmFtICpmc3AgPSBkYXRhOworCWNvbnN0IGNoYXIgKmZpbGU7CisJaW50IGxubzsKKworCS8qIFNraXAgaWYgZGVjbGFyZWQgZmlsZSBuYW1lIGRvZXMgbm90IG1hdGNoICovCisJaWYgKGZzcC0+ZmlsZSkgeworCQlmaWxlID0gZHdhcmZfZGVjbF9maWxlKGZuX2RpZSk7CisJCWlmICghZmlsZSB8fCBzdHJjbXAoZnNwLT5maWxlLCBmaWxlKSAhPSAwKQorCQkJcmV0dXJuIDA7CisJfQorCS8qIElmIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGdpdmVuLCB0aGF0J3Mgd2hhdCB1c2VyIGV4cGVjdHMgKi8KKwlpZiAoZnNwLT5mdW5jdGlvbikgeworCQlpZiAoZGllX2NvbXBhcmVfbmFtZShmbl9kaWUsIGZzcC0+ZnVuY3Rpb24pKSB7CisJCQltZW1jcHkoZnNwLT5kaWVfbWVtLCBmbl9kaWUsIHNpemVvZihEd2FyZl9EaWUpKTsKKwkJCWZzcC0+Zm91bmQgPSB0cnVlOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQkvKiBXaXRoIHRoZSBsaW5lIG51bWJlciwgZmluZCB0aGUgbmVhcmVzdCBkZWNsYXJlZCBESUUgKi8KKwkJZHdhcmZfZGVjbF9saW5lKGZuX2RpZSwgJmxubyk7CisJCWlmIChsbm8gPCBmc3AtPmxpbmUgJiYgZnNwLT5kaWZmID4gZnNwLT5saW5lIC0gbG5vKSB7CisJCQkvKiBLZWVwIGEgY2FuZGlkYXRlIGFuZCBjb250aW51ZSAqLworCQkJZnNwLT5kaWZmID0gZnNwLT5saW5lIC0gbG5vOworCQkJbWVtY3B5KGZzcC0+ZGllX21lbSwgZm5fZGllLCBzaXplb2YoRHdhcmZfRGllKSk7CisJCQlmc3AtPmZvdW5kID0gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogRmluZCBhbiBhcHByb3ByaWF0ZSBzY29wZSBmaXRzIHRvIGdpdmVuIGNvbmRpdGlvbnMgKi8KK3N0YXRpYyBEd2FyZl9EaWUgKmZpbmRfYmVzdF9zY29wZShzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZiwgRHdhcmZfRGllICpkaWVfbWVtKQoreworCXN0cnVjdCBmaW5kX3Njb3BlX3BhcmFtIGZzcCA9IHsKKwkJLmZ1bmN0aW9uID0gcGYtPnBldi0+cG9pbnQuZnVuY3Rpb24sCisJCS5maWxlID0gcGYtPmZuYW1lLAorCQkubGluZSA9IHBmLT5sbm8sCisJCS5kaWZmID0gSU5UX01BWCwKKwkJLmRpZV9tZW0gPSBkaWVfbWVtLAorCQkuZm91bmQgPSBmYWxzZSwKKwl9OworCisJY3Vfd2Fsa19mdW5jdGlvbnNfYXQoJnBmLT5jdV9kaWUsIHBmLT5hZGRyLCBmaW5kX2Jlc3Rfc2NvcGVfY2IsICZmc3ApOworCisJcmV0dXJuIGZzcC5mb3VuZCA/IGRpZV9tZW0gOiBOVUxMOworfQorCiBzdGF0aWMgaW50IHByb2JlX3BvaW50X2xpbmVfd2Fsa2VyKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZW5vLAogCQkJCSAgIER3YXJmX0FkZHIgYWRkciwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZiA9IGRhdGE7CisJRHdhcmZfRGllICpzY19kaWUsIGRpZV9tZW07CiAJaW50IHJldDsKIAogCWlmIChsaW5lbm8gIT0gcGYtPmxubyB8fCBzdHJ0YWlsY21wKGZuYW1lLCBwZi0+Zm5hbWUpICE9IDApCiAJCXJldHVybiAwOwogCiAJcGYtPmFkZHIgPSBhZGRyOwotCXJldCA9IGNhbGxfcHJvYmVfZmluZGVyKE5VTEwsIHBmKTsKKwlzY19kaWUgPSBmaW5kX2Jlc3Rfc2NvcGUocGYsICZkaWVfbWVtKTsKKwlpZiAoIXNjX2RpZSkgeworCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCBzY29wZSBvZiBwcm9iZSBwb2ludC5cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBjYWxsX3Byb2JlX2ZpbmRlcihzY19kaWUsIHBmKTsKIAogCS8qIENvbnRpbnVlIGlmIG5vIGVycm9yLCBiZWNhdXNlIHRoZSBsaW5lIHdpbGwgYmUgaW4gaW5saW5lIGZ1bmN0aW9uICovCiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwpAQCAtODI3LDYgKzg4Miw3IEBACiAJCQkJICAgRHdhcmZfQWRkciBhZGRyLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwcm9iZV9maW5kZXIgKnBmID0gZGF0YTsKKwlEd2FyZl9EaWUgKnNjX2RpZSwgZGllX21lbTsKIAlpbnQgcmV0OwogCiAJaWYgKCFsaW5lX2xpc3RfX2hhc19saW5lKCZwZi0+bGNhY2hlLCBsaW5lbm8pIHx8CkBAIC04MzYsNyArODkyLDE0IEBACiAJcHJfZGVidWcoIlByb2JlIGxpbmUgZm91bmQ6IGxpbmU6JWQgYWRkcjoweCVsbHhcbiIsCiAJCSBsaW5lbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CiAJcGYtPmFkZHIgPSBhZGRyOwotCXJldCA9IGNhbGxfcHJvYmVfZmluZGVyKE5VTEwsIHBmKTsKKwlwZi0+bG5vID0gbGluZW5vOworCXNjX2RpZSA9IGZpbmRfYmVzdF9zY29wZShwZiwgJmRpZV9tZW0pOworCWlmICghc2NfZGllKSB7CisJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBmaW5kIHNjb3BlIG9mIHByb2JlIHBvaW50LlxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldCA9IGNhbGxfcHJvYmVfZmluZGVyKHNjX2RpZSwgcGYpOwogCiAJLyoKIAkgKiBDb250aW51ZSBpZiBubyBlcnJvciwgYmVjYXVzZSB0aGUgbGF6eSBwYXR0ZXJuIHdpbGwgbWF0Y2gKQEAgLTg2MSw0MiArOTI0LDM5IEBACiAJcmV0dXJuIGRpZV93YWxrX2xpbmVzKHNwX2RpZSwgcHJvYmVfcG9pbnRfbGF6eV93YWxrZXIsIHBmKTsKIH0KIAotLyogQ2FsbGJhY2sgcGFyYW1ldGVyIHdpdGggcmV0dXJuIHZhbHVlICovCi1zdHJ1Y3QgZHdhcmZfY2FsbGJhY2tfcGFyYW0gewotCXZvaWQgKmRhdGE7Ci0JaW50IHJldHZhbDsKLX07Ci0KIHN0YXRpYyBpbnQgcHJvYmVfcG9pbnRfaW5saW5lX2NiKER3YXJmX0RpZSAqaW5fZGllLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBkd2FyZl9jYWxsYmFja19wYXJhbSAqcGFyYW0gPSBkYXRhOwotCXN0cnVjdCBwcm9iZV9maW5kZXIgKnBmID0gcGFyYW0tPmRhdGE7CisJc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSBkYXRhOwogCXN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCA9ICZwZi0+cGV2LT5wb2ludDsKIAlEd2FyZl9BZGRyIGFkZHI7CisJaW50IHJldDsKIAogCWlmIChwcC0+bGF6eV9saW5lKQotCQlwYXJhbS0+cmV0dmFsID0gZmluZF9wcm9iZV9wb2ludF9sYXp5KGluX2RpZSwgcGYpOworCQlyZXQgPSBmaW5kX3Byb2JlX3BvaW50X2xhenkoaW5fZGllLCBwZik7CiAJZWxzZSB7CiAJCS8qIEdldCBwcm9iZSBhZGRyZXNzICovCiAJCWlmIChkd2FyZl9lbnRyeXBjKGluX2RpZSwgJmFkZHIpICE9IDApIHsKIAkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgZW50cnkgYWRkcmVzcyBvZiAlcy5cbiIsCiAJCQkJICAgZHdhcmZfZGllbmFtZShpbl9kaWUpKTsKLQkJCXBhcmFtLT5yZXR2YWwgPSAtRU5PRU5UOwotCQkJcmV0dXJuIERXQVJGX0NCX0FCT1JUOworCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAkJcGYtPmFkZHIgPSBhZGRyOwogCQlwZi0+YWRkciArPSBwcC0+b2Zmc2V0OwogCQlwcl9kZWJ1ZygiZm91bmQgaW5saW5lIGFkZHI6IDB4JWp4XG4iLAogCQkJICh1aW50bWF4X3QpcGYtPmFkZHIpOwogCi0JCXBhcmFtLT5yZXR2YWwgPSBjYWxsX3Byb2JlX2ZpbmRlcihpbl9kaWUsIHBmKTsKLQkJaWYgKHBhcmFtLT5yZXR2YWwgPCAwKQotCQkJcmV0dXJuIERXQVJGX0NCX0FCT1JUOworCQlyZXQgPSBjYWxsX3Byb2JlX2ZpbmRlcihpbl9kaWUsIHBmKTsKIAl9CiAKLQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisJcmV0dXJuIHJldDsKIH0KIAorLyogQ2FsbGJhY2sgcGFyYW1ldGVyIHdpdGggcmV0dXJuIHZhbHVlIGZvciBsaWJkdyAqLworc3RydWN0IGR3YXJmX2NhbGxiYWNrX3BhcmFtIHsKKwl2b2lkICpkYXRhOworCWludCByZXR2YWw7Cit9OworCiAvKiBTZWFyY2ggZnVuY3Rpb24gZnJvbSBmdW5jdGlvbiBuYW1lICovCiBzdGF0aWMgaW50IHByb2JlX3BvaW50X3NlYXJjaF9jYihEd2FyZl9EaWUgKnNwX2RpZSwgdm9pZCAqZGF0YSkKIHsKQEAgLTkzMywxNCArOTkzLDEwIEBACiAJCQkvKiBUT0RPOiBDaGVjayB0aGUgYWRkcmVzcyBpbiB0aGlzIGZ1bmN0aW9uICovCiAJCQlwYXJhbS0+cmV0dmFsID0gY2FsbF9wcm9iZV9maW5kZXIoc3BfZGllLCBwZik7CiAJCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgZHdhcmZfY2FsbGJhY2tfcGFyYW0gX3BhcmFtID0gey5kYXRhID0gKHZvaWQgKilwZiwKLQkJCQkJCSAgICAgIC5yZXR2YWwgPSAwfTsKKwl9IGVsc2UKIAkJLyogSW5saW5lZCBmdW5jdGlvbjogc2VhcmNoIGluc3RhbmNlcyAqLwotCQlkd2FyZl9mdW5jX2lubGluZV9pbnN0YW5jZXMoc3BfZGllLCBwcm9iZV9wb2ludF9pbmxpbmVfY2IsCi0JCQkJCSAgICAmX3BhcmFtKTsKLQkJcGFyYW0tPnJldHZhbCA9IF9wYXJhbS5yZXR2YWw7Ci0JfQorCQlwYXJhbS0+cmV0dmFsID0gZGllX3dhbGtfaW5zdGFuY2VzKHNwX2RpZSwKKwkJCQkJcHJvYmVfcG9pbnRfaW5saW5lX2NiLCAodm9pZCAqKXBmKTsKIAogCXJldHVybiBEV0FSRl9DQl9BQk9SVDsgLyogRXhpdDsgbm8gc2FtZSBzeW1ib2wgaW4gdGhpcyBDVS4gKi8KIH0KQEAgLTEwNjAsNyArMTExNiw3IEBACiB9CiAKIC8qIEFkZCBhIGZvdW5kIHByb2JlIHBvaW50IGludG8gdHJhY2UgZXZlbnQgbGlzdCAqLwotc3RhdGljIGludCBhZGRfcHJvYmVfdHJhY2VfZXZlbnQoRHdhcmZfRGllICpzcF9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIGludCBhZGRfcHJvYmVfdHJhY2VfZXZlbnQoRHdhcmZfRGllICpzY19kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCXN0cnVjdCB0cmFjZV9ldmVudF9maW5kZXIgKnRmID0KIAkJCWNvbnRhaW5lcl9vZihwZiwgc3RydWN0IHRyYWNlX2V2ZW50X2ZpbmRlciwgcGYpOwpAQCAtMTA3NSw4ICsxMTMxLDkgQEAKIAl9CiAJdGV2ID0gJnRmLT50ZXZzW3RmLT5udGV2cysrXTsKIAotCXJldCA9IGNvbnZlcnRfdG9fdHJhY2VfcG9pbnQoc3BfZGllLCBwZi0+YWRkciwgcGYtPnBldi0+cG9pbnQucmV0cHJvYmUsCi0JCQkJICAgICAmdGV2LT5wb2ludCk7CisJLyogVHJhY2UgcG9pbnQgc2hvdWxkIGJlIGNvbnZlcnRlZCBmcm9tIHN1YnByb2dyYW0gRElFICovCisJcmV0ID0gY29udmVydF90b190cmFjZV9wb2ludCgmcGYtPnNwX2RpZSwgcGYtPmFkZHIsCisJCQkJICAgICBwZi0+cGV2LT5wb2ludC5yZXRwcm9iZSwgJnRldi0+cG9pbnQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDkxLDcgKzExNDgsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBwZi0+cGV2LT5uYXJnczsgaSsrKSB7CiAJCXBmLT5wdmFyID0gJnBmLT5wZXYtPmFyZ3NbaV07CiAJCXBmLT50dmFyID0gJnRldi0+YXJnc1tpXTsKLQkJcmV0ID0gZmluZF92YXJpYWJsZShzcF9kaWUsIHBmKTsKKwkJLyogVmFyaWFibGUgc2hvdWxkIGJlIGZvdW5kIGZyb20gc2NvcGUgRElFICovCisJCXJldCA9IGZpbmRfdmFyaWFibGUoc2NfZGllLCBwZik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTE1OSwxMyArMTIxNywxMyBAQAogfQogCiAvKiBBZGQgYSBmb3VuZCB2YXJzIGludG8gYXZhaWxhYmxlIHZhcmlhYmxlcyBsaXN0ICovCi1zdGF0aWMgaW50IGFkZF9hdmFpbGFibGVfdmFycyhEd2FyZl9EaWUgKnNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgaW50IGFkZF9hdmFpbGFibGVfdmFycyhEd2FyZl9EaWUgKnNjX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7CiAJc3RydWN0IGF2YWlsYWJsZV92YXJfZmluZGVyICphZiA9CiAJCQljb250YWluZXJfb2YocGYsIHN0cnVjdCBhdmFpbGFibGVfdmFyX2ZpbmRlciwgcGYpOwogCXN0cnVjdCB2YXJpYWJsZV9saXN0ICp2bDsKLQlEd2FyZl9EaWUgZGllX21lbSwgKnNjb3BlcyA9IE5VTEw7Ci0JaW50IHJldCwgbnNjb3BlczsKKwlEd2FyZl9EaWUgZGllX21lbTsKKwlpbnQgcmV0OwogCiAJLyogQ2hlY2sgbnVtYmVyIG9mIHRldnMgKi8KIAlpZiAoYWYtPm52bHMgPT0gYWYtPm1heF92bHMpIHsKQEAgLTExNzQsOCArMTIzMiw5IEBACiAJfQogCXZsID0gJmFmLT52bHNbYWYtPm52bHMrK107CiAKLQlyZXQgPSBjb252ZXJ0X3RvX3RyYWNlX3BvaW50KHNwX2RpZSwgcGYtPmFkZHIsIHBmLT5wZXYtPnBvaW50LnJldHByb2JlLAotCQkJCSAgICAgJnZsLT5wb2ludCk7CisJLyogVHJhY2UgcG9pbnQgc2hvdWxkIGJlIGNvbnZlcnRlZCBmcm9tIHN1YnByb2dyYW0gRElFICovCisJcmV0ID0gY29udmVydF90b190cmFjZV9wb2ludCgmcGYtPnNwX2RpZSwgcGYtPmFkZHIsCisJCQkJICAgICBwZi0+cGV2LT5wb2ludC5yZXRwcm9iZSwgJnZsLT5wb2ludCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTExODcsMTkgKzEyNDYsMTQgQEAKIAlpZiAodmwtPnZhcnMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJYWYtPmNoaWxkID0gdHJ1ZTsKLQlkaWVfZmluZF9jaGlsZChzcF9kaWUsIGNvbGxlY3RfdmFyaWFibGVzX2NiLCAodm9pZCAqKWFmLCAmZGllX21lbSk7CisJZGllX2ZpbmRfY2hpbGQoc2NfZGllLCBjb2xsZWN0X3ZhcmlhYmxlc19jYiwgKHZvaWQgKilhZiwgJmRpZV9tZW0pOwogCiAJLyogRmluZCBleHRlcm5hbCB2YXJpYWJsZXMgKi8KIAlpZiAoIWFmLT5leHRlcm5zKQogCQlnb3RvIG91dDsKIAkvKiBEb24ndCBuZWVkIHRvIHNlYXJjaCBjaGlsZCBESUUgZm9yIGV4dGVybnMuICovCiAJYWYtPmNoaWxkID0gZmFsc2U7Ci0JbnNjb3BlcyA9IGR3YXJmX2dldHNjb3Blc19kaWUoc3BfZGllLCAmc2NvcGVzKTsKLQl3aGlsZSAobnNjb3Blcy0tID4gMSkKLQkJZGllX2ZpbmRfY2hpbGQoJnNjb3Blc1tuc2NvcGVzXSwgY29sbGVjdF92YXJpYWJsZXNfY2IsCi0JCQkgICAgICAgKHZvaWQgKilhZiwgJmRpZV9tZW0pOwotCWlmIChzY29wZXMpCi0JCWZyZWUoc2NvcGVzKTsKKwlkaWVfZmluZF9jaGlsZCgmcGYtPmN1X2RpZSwgY29sbGVjdF92YXJpYWJsZXNfY2IsICh2b2lkICopYWYsICZkaWVfbWVtKTsKIAogb3V0OgogCWlmIChzdHJsaXN0X19lbXB0eSh2bC0+dmFycykpIHsKQEAgLTEzOTEsMTAgKzE0NDUsMTQgQEAKIAogc3RhdGljIGludCBsaW5lX3JhbmdlX2lubGluZV9jYihEd2FyZl9EaWUgKmluX2RpZSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgZHdhcmZfY2FsbGJhY2tfcGFyYW0gKnBhcmFtID0gZGF0YTsKKwlmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZShpbl9kaWUsIGRhdGEpOwogCi0JcGFyYW0tPnJldHZhbCA9IGZpbmRfbGluZV9yYW5nZV9ieV9saW5lKGluX2RpZSwgcGFyYW0tPmRhdGEpOwotCXJldHVybiBEV0FSRl9DQl9BQk9SVDsJLyogTm8gbmVlZCB0byBmaW5kIG90aGVyIGluc3RhbmNlcyAqLworCS8qCisJICogV2UgaGF2ZSB0byBjaGVjayBhbGwgaW5zdGFuY2VzIG9mIGlubGluZWQgZnVuY3Rpb24sIGJlY2F1c2UKKwkgKiBzb21lIGV4ZWN1dGlvbiBwYXRocyBjYW4gYmUgb3B0aW1pemVkIG91dCBkZXBlbmRzIG9uIHRoZQorCSAqIGZ1bmN0aW9uIGFyZ3VtZW50IG9mIGluc3RhbmNlcworCSAqLworCXJldHVybiAwOwogfQogCiAvKiBTZWFyY2ggZnVuY3Rpb24gZnJvbSBmdW5jdGlvbiBuYW1lICovCkBAIC0xNDIyLDE1ICsxNDgwLDEwIEBACiAJCXByX2RlYnVnKCJOZXcgbGluZSByYW5nZTogJWQgdG8gJWRcbiIsIGxmLT5sbm9fcywgbGYtPmxub19lKTsKIAkJbHItPnN0YXJ0ID0gbGYtPmxub19zOwogCQlsci0+ZW5kID0gbGYtPmxub19lOwotCQlpZiAoZHdhcmZfZnVuY19pbmxpbmUoc3BfZGllKSkgewotCQkJc3RydWN0IGR3YXJmX2NhbGxiYWNrX3BhcmFtIF9wYXJhbTsKLQkJCV9wYXJhbS5kYXRhID0gKHZvaWQgKilsZjsKLQkJCV9wYXJhbS5yZXR2YWwgPSAwOwotCQkJZHdhcmZfZnVuY19pbmxpbmVfaW5zdGFuY2VzKHNwX2RpZSwKLQkJCQkJCSAgICBsaW5lX3JhbmdlX2lubGluZV9jYiwKLQkJCQkJCSAgICAmX3BhcmFtKTsKLQkJCXBhcmFtLT5yZXR2YWwgPSBfcGFyYW0ucmV0dmFsOwotCQl9IGVsc2UKKwkJaWYgKGR3YXJmX2Z1bmNfaW5saW5lKHNwX2RpZSkpCisJCQlwYXJhbS0+cmV0dmFsID0gZGllX3dhbGtfaW5zdGFuY2VzKHNwX2RpZSwKKwkJCQkJCWxpbmVfcmFuZ2VfaW5saW5lX2NiLCBsZik7CisJCWVsc2UKIAkJCXBhcmFtLT5yZXR2YWwgPSBmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZShzcF9kaWUsIGxmKTsKIAkJcmV0dXJuIERXQVJGX0NCX0FCT1JUOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAppbmRleCBjNDc4YjQyLi4xMTMyYzhmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC01Nyw3ICs1Nyw3IEBACiAJc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQJKnBldjsJCS8qIFRhcmdldCBwcm9iZSBldmVudCAqLwogCiAJLyogQ2FsbGJhY2sgd2hlbiBhIHByb2JlIHBvaW50IGlzIGZvdW5kICovCi0JaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZik7CisJaW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSAqc2NfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZik7CiAKIAkvKiBGb3IgZnVuY3Rpb24gc2VhcmNoaW5nICovCiAJaW50CQkJbG5vOwkJLyogTGluZSBudW1iZXIgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwppbmRleCA4ZTBiNWEzLi5jYmM4ZjIxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCkBAIC0xODcsMTYgKzE4NywxMTkgQEAKIAkudHBfcmVwcgk9IChyZXByZnVuYylweXJmX3Rocm90dGxlX2V2ZW50X19yZXByLAogfTsKIAorc3RhdGljIGNoYXIgcHlyZl9sb3N0X2V2ZW50X19kb2NbXSA9IFB5RG9jX1NUUigicGVyZiBsb3N0IGV2ZW50IG9iamVjdC4iKTsKKworc3RhdGljIFB5TWVtYmVyRGVmIHB5cmZfbG9zdF9ldmVudF9fbWVtYmVyc1tdID0geworCXNhbXBsZV9tZW1iZXJzCisJbWVtYmVyX2RlZihsb3N0X2V2ZW50LCBpZCwgVF9VTE9OR0xPTkcsICJldmVudCBpZCIpLAorCW1lbWJlcl9kZWYobG9zdF9ldmVudCwgbG9zdCwgVF9VTE9OR0xPTkcsICJudW1iZXIgb2YgbG9zdCBldmVudHMiKSwKKwl7IC5uYW1lID0gTlVMTCwgfSwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqcHlyZl9sb3N0X2V2ZW50X19yZXByKHN0cnVjdCBweXJmX2V2ZW50ICpwZXZlbnQpCit7CisJUHlPYmplY3QgKnJldDsKKwljaGFyICpzOworCisJaWYgKGFzcHJpbnRmKCZzLCAieyB0eXBlOiBsb3N0LCBpZDogJSMiIFBSSXg2NCAiLCAiCisJCQkgImxvc3Q6ICUjIiBQUkl4NjQgIiB9IiwKKwkJICAgICBwZXZlbnQtPmV2ZW50Lmxvc3QuaWQsIHBldmVudC0+ZXZlbnQubG9zdC5sb3N0KSA8IDApIHsKKwkJcmV0ID0gUHlFcnJfTm9NZW1vcnkoKTsKKwl9IGVsc2UgeworCQlyZXQgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKHMpOworCQlmcmVlKHMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IHB5cmZfbG9zdF9ldmVudF9fdHlwZSA9IHsKKwlQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKwkudHBfbmFtZQk9ICJwZXJmLmxvc3RfZXZlbnQiLAorCS50cF9iYXNpY3NpemUJPSBzaXplb2Yoc3RydWN0IHB5cmZfZXZlbnQpLAorCS50cF9mbGFncwk9IFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0JBU0VUWVBFLAorCS50cF9kb2MJCT0gcHlyZl9sb3N0X2V2ZW50X19kb2MsCisJLnRwX21lbWJlcnMJPSBweXJmX2xvc3RfZXZlbnRfX21lbWJlcnMsCisJLnRwX3JlcHIJPSAocmVwcmZ1bmMpcHlyZl9sb3N0X2V2ZW50X19yZXByLAorfTsKKworc3RhdGljIGNoYXIgcHlyZl9yZWFkX2V2ZW50X19kb2NbXSA9IFB5RG9jX1NUUigicGVyZiByZWFkIGV2ZW50IG9iamVjdC4iKTsKKworc3RhdGljIFB5TWVtYmVyRGVmIHB5cmZfcmVhZF9ldmVudF9fbWVtYmVyc1tdID0geworCXNhbXBsZV9tZW1iZXJzCisJbWVtYmVyX2RlZihyZWFkX2V2ZW50LCBwaWQsIFRfVUlOVCwgImV2ZW50IHBpZCIpLAorCW1lbWJlcl9kZWYocmVhZF9ldmVudCwgdGlkLCBUX1VJTlQsICJldmVudCB0aWQiKSwKKwl7IC5uYW1lID0gTlVMTCwgfSwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqcHlyZl9yZWFkX2V2ZW50X19yZXByKHN0cnVjdCBweXJmX2V2ZW50ICpwZXZlbnQpCit7CisJcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoInsgdHlwZTogcmVhZCwgcGlkOiAldSwgdGlkOiAldSB9IiwKKwkJCQkgICBwZXZlbnQtPmV2ZW50LnJlYWQucGlkLAorCQkJCSAgIHBldmVudC0+ZXZlbnQucmVhZC50aWQpOworCS8qCisgCSAqIEZJWE1FOiByZXR1cm4gdGhlIGFycmF5IG9mIHJlYWQgdmFsdWVzLAorIAkgKiBtYWtpbmcgdGhpcyBtZXRob2QgdXNlZnVsIDstKQorIAkgKi8KK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBweXJmX3JlYWRfZXZlbnRfX3R5cGUgPSB7CisJUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisJLnRwX25hbWUJPSAicGVyZi5yZWFkX2V2ZW50IiwKKwkudHBfYmFzaWNzaXplCT0gc2l6ZW9mKHN0cnVjdCBweXJmX2V2ZW50KSwKKwkudHBfZmxhZ3MJPSBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19CQVNFVFlQRSwKKwkudHBfZG9jCQk9IHB5cmZfcmVhZF9ldmVudF9fZG9jLAorCS50cF9tZW1iZXJzCT0gcHlyZl9yZWFkX2V2ZW50X19tZW1iZXJzLAorCS50cF9yZXByCT0gKHJlcHJmdW5jKXB5cmZfcmVhZF9ldmVudF9fcmVwciwKK307CisKK3N0YXRpYyBjaGFyIHB5cmZfc2FtcGxlX2V2ZW50X19kb2NbXSA9IFB5RG9jX1NUUigicGVyZiBzYW1wbGUgZXZlbnQgb2JqZWN0LiIpOworCitzdGF0aWMgUHlNZW1iZXJEZWYgcHlyZl9zYW1wbGVfZXZlbnRfX21lbWJlcnNbXSA9IHsKKwlzYW1wbGVfbWVtYmVycworCW1lbWJlcl9kZWYocGVyZl9ldmVudF9oZWFkZXIsIHR5cGUsIFRfVUlOVCwgImV2ZW50IHR5cGUiKSwKKwl7IC5uYW1lID0gTlVMTCwgfSwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqcHlyZl9zYW1wbGVfZXZlbnRfX3JlcHIoc3RydWN0IHB5cmZfZXZlbnQgKnBldmVudCkKK3sKKwlQeU9iamVjdCAqcmV0OworCWNoYXIgKnM7CisKKwlpZiAoYXNwcmludGYoJnMsICJ7IHR5cGU6IHNhbXBsZSB9IikgPCAwKSB7CisJCXJldCA9IFB5RXJyX05vTWVtb3J5KCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhzKTsKKwkJZnJlZShzKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBweXJmX3NhbXBsZV9ldmVudF9fdHlwZSA9IHsKKwlQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKwkudHBfbmFtZQk9ICJwZXJmLnNhbXBsZV9ldmVudCIsCisJLnRwX2Jhc2ljc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcHlyZl9ldmVudCksCisJLnRwX2ZsYWdzCT0gUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfQkFTRVRZUEUsCisJLnRwX2RvYwkJPSBweXJmX3NhbXBsZV9ldmVudF9fZG9jLAorCS50cF9tZW1iZXJzCT0gcHlyZl9zYW1wbGVfZXZlbnRfX21lbWJlcnMsCisJLnRwX3JlcHIJPSAocmVwcmZ1bmMpcHlyZl9zYW1wbGVfZXZlbnRfX3JlcHIsCit9OworCiBzdGF0aWMgaW50IHB5cmZfZXZlbnRfX3NldHVwX3R5cGVzKHZvaWQpCiB7CiAJaW50IGVycjsKIAlweXJmX21tYXBfZXZlbnRfX3R5cGUudHBfbmV3ID0KIAlweXJmX3Rhc2tfZXZlbnRfX3R5cGUudHBfbmV3ID0KIAlweXJmX2NvbW1fZXZlbnRfX3R5cGUudHBfbmV3ID0KKwlweXJmX2xvc3RfZXZlbnRfX3R5cGUudHBfbmV3ID0KKwlweXJmX3JlYWRfZXZlbnRfX3R5cGUudHBfbmV3ID0KKwlweXJmX3NhbXBsZV9ldmVudF9fdHlwZS50cF9uZXcgPQogCXB5cmZfdGhyb3R0bGVfZXZlbnRfX3R5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CiAJZXJyID0gUHlUeXBlX1JlYWR5KCZweXJmX21tYXBfZXZlbnRfX3R5cGUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDsKKwllcnIgPSBQeVR5cGVfUmVhZHkoJnB5cmZfbG9zdF9ldmVudF9fdHlwZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OwogCWVyciA9IFB5VHlwZV9SZWFkeSgmcHlyZl90YXNrX2V2ZW50X190eXBlKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0yMDYsMjAgKzMwOSwyNiBAQAogCWVyciA9IFB5VHlwZV9SZWFkeSgmcHlyZl90aHJvdHRsZV9ldmVudF9fdHlwZSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OworCWVyciA9IFB5VHlwZV9SZWFkeSgmcHlyZl9yZWFkX2V2ZW50X190eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJZXJyID0gUHlUeXBlX1JlYWR5KCZweXJmX3NhbXBsZV9ldmVudF9fdHlwZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0Owogb3V0OgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKnB5cmZfZXZlbnRfX3R5cGVbXSA9IHsKIAlbUEVSRl9SRUNPUkRfTU1BUF0JID0gJnB5cmZfbW1hcF9ldmVudF9fdHlwZSwKLQlbUEVSRl9SRUNPUkRfTE9TVF0JID0gJnB5cmZfbW1hcF9ldmVudF9fdHlwZSwKKwlbUEVSRl9SRUNPUkRfTE9TVF0JID0gJnB5cmZfbG9zdF9ldmVudF9fdHlwZSwKIAlbUEVSRl9SRUNPUkRfQ09NTV0JID0gJnB5cmZfY29tbV9ldmVudF9fdHlwZSwKIAlbUEVSRl9SRUNPUkRfRVhJVF0JID0gJnB5cmZfdGFza19ldmVudF9fdHlwZSwKIAlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICZweXJmX3Rocm90dGxlX2V2ZW50X190eXBlLAogCVtQRVJGX1JFQ09SRF9VTlRIUk9UVExFXSA9ICZweXJmX3Rocm90dGxlX2V2ZW50X190eXBlLAogCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAmcHlyZl90YXNrX2V2ZW50X190eXBlLAotCVtQRVJGX1JFQ09SRF9SRUFEXQkgPSAmcHlyZl9tbWFwX2V2ZW50X190eXBlLAotCVtQRVJGX1JFQ09SRF9TQU1QTEVdCSA9ICZweXJmX21tYXBfZXZlbnRfX3R5cGUsCisJW1BFUkZfUkVDT1JEX1JFQURdCSA9ICZweXJmX3JlYWRfZXZlbnRfX3R5cGUsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0JID0gJnB5cmZfc2FtcGxlX2V2ZW50X190eXBlLAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICpweXJmX2V2ZW50X19uZXcodW5pb24gcGVyZl9ldmVudCAqZXZlbnQpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2V0dXAucHkgYi90b29scy9wZXJmL3V0aWwvc2V0dXAucHkKaW5kZXggYmJjOTgyZi4uOTVkMzcwMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NldHVwLnB5CisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXR1cC5weQpAQCAtMyw5ICszLDI3IEBACiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCiBmcm9tIG9zIGltcG9ydCBnZXRlbnYKIAorZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQgICBpbXBvcnQgYnVpbGRfZXh0ICAgYXMgX2J1aWxkX2V4dAorZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYiBpbXBvcnQgaW5zdGFsbF9saWIgYXMgX2luc3RhbGxfbGliCisKK2NsYXNzIGJ1aWxkX2V4dChfYnVpbGRfZXh0KToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgX2J1aWxkX2V4dC5maW5hbGl6ZV9vcHRpb25zKHNlbGYpCisgICAgICAgIHNlbGYuYnVpbGRfbGliICA9IGJ1aWxkX2xpYgorICAgICAgICBzZWxmLmJ1aWxkX3RlbXAgPSBidWlsZF90bXAKKworY2xhc3MgaW5zdGFsbF9saWIoX2luc3RhbGxfbGliKToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgX2luc3RhbGxfbGliLmZpbmFsaXplX29wdGlvbnMoc2VsZikKKyAgICAgICAgc2VsZi5idWlsZF9kaXIgPSBidWlsZF9saWIKKworCiBjZmxhZ3MgPSBbJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywgJy1Xbm8td3JpdGUtc3RyaW5ncyddCiBjZmxhZ3MgKz0gZ2V0ZW52KCdDRkxBR1MnLCAnJykuc3BsaXQoKQogCitidWlsZF9saWIgPSBnZXRlbnYoJ1BZVEhPTl9FWFRCVUlMRF9MSUInKQorYnVpbGRfdG1wID0gZ2V0ZW52KCdQWVRIT05fRVhUQlVJTERfVE1QJykKKwogcGVyZiA9IEV4dGVuc2lvbigncGVyZicsCiAJCSAgc291cmNlcyA9IFsndXRpbC9weXRob24uYycsICd1dGlsL2N0eXBlLmMnLCAndXRpbC9ldmxpc3QuYycsCiAJCQkgICAgICd1dGlsL2V2c2VsLmMnLCAndXRpbC9jcHVtYXAuYycsICd1dGlsL3RocmVhZF9tYXAuYycsCkBAIC0yMSw0ICszOSw1IEBACiAgICAgICBhdXRob3JfZW1haWw9J2FjbWVAcmVkaGF0LmNvbScsCiAgICAgICBsaWNlbnNlPSdHUEx2MicsCiAgICAgICB1cmw9J2h0dHA6Ly9wZXJmLndpa2kua2VybmVsLm9yZycsCi0gICAgICBleHRfbW9kdWxlcz1bcGVyZl0pCisgICAgICBleHRfbW9kdWxlcz1bcGVyZl0sCisgICAgICBjbWRjbGFzcz17J2J1aWxkX2V4dCc6IGJ1aWxkX2V4dCwgJ2luc3RhbGxfbGliJzogaW5zdGFsbF9saWJ9KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGVlYzE5NjMuLjQ2OWMwMjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTE1MDQsNiArMTUwNCwxNyBAQAogCWRzby0+YWRqdXN0X3N5bWJvbHMgPSAwOwogCiAJaWYgKHN0cm5jbXAoZHNvLT5uYW1lLCAiL3RtcC9wZXJmLSIsIDEwKSA9PSAwKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmIChsc3RhdChkc28tPm5hbWUsICZzdCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChzdC5zdF91aWQgJiYgKHN0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7CisJCQlwcl93YXJuaW5nKCJGaWxlICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdCwgIgorCQkJCSJpZ25vcmluZyBpdC5cbiIsIGRzby0+bmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwogCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoZHNvLCBtYXAsIGZpbHRlcik7CiAJCWRzby0+c3ltdGFiX3R5cGUgPSByZXQgPiAwID8gU1lNVEFCX19KQVZBX0pJVCA6CiAJCQkJCSAgICAgIFNZTVRBQl9fTk9UX0ZPVU5EOwpAQCAtMjE3MCwyNyArMjE4MSwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHN0cnVjdCBkc28qCitkc29fX2tlcm5lbF9maW5kbmV3KHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgY29uc3QgY2hhciAqc2hvcnRfbmFtZSwgaW50IGRzb190eXBlKQogewotCXN0cnVjdCBkc28gKmRzbyA9IGRzb19fbmV3KG5hbWUgPzogIltrZXJuZWwua2FsbHN5bXNdIik7CisJLyoKKwkgKiBUaGUga2VybmVsIGRzbyBjb3VsZCBiZSBjcmVhdGVkIGJ5IGJ1aWxkX2lkIHByb2Nlc3NpbmcuCisJICovCisJc3RydWN0IGRzbyAqZHNvID0gX19kc29zX19maW5kbmV3KCZtYWNoaW5lLT5rZXJuZWxfZHNvcywgbmFtZSk7CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8gcnVuIHRoaXMgaW4gYWxsIGNhc2VzLCBzaW5jZSBkdXJpbmcgdGhlIGJ1aWxkX2lkCisJICogcHJvY2Vzc2luZyB3ZSBoYWQgbm8gaWRlYSB0aGlzIHdhcyB0aGUga2VybmVsIGRzby4KKwkgKi8KIAlpZiAoZHNvICE9IE5VTEwpIHsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShkc28sICJba2VybmVsXSIpOwotCQlkc28tPmtlcm5lbCA9IERTT19UWVBFX0tFUk5FTDsKLQl9Ci0KLQlyZXR1cm4gZHNvOwotfQotCi1zdGF0aWMgc3RydWN0IGRzbyAqZHNvX19uZXdfZ3Vlc3Rfa2VybmVsKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAotCQkJCQljb25zdCBjaGFyICpuYW1lKQotewotCWNoYXIgYmZbUEFUSF9NQVhdOwotCXN0cnVjdCBkc28gKmRzbyA9IGRzb19fbmV3KG5hbWUgPzogbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIGJmLAotCQkJCQkJCSAgICAgIHNpemVvZihiZikpKTsKLQlpZiAoZHNvICE9IE5VTEwpIHsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShkc28sICJbZ3Vlc3Qua2VybmVsXSIpOwotCQlkc28tPmtlcm5lbCA9IERTT19UWVBFX0dVRVNUX0tFUk5FTDsKKwkJZHNvX19zZXRfc2hvcnRfbmFtZShkc28sIHNob3J0X25hbWUpOworCQlkc28tPmtlcm5lbCA9IGRzb190eXBlOwogCX0KIAogCXJldHVybiBkc287CkBAIC0yMjA4LDI0ICsyMjE0LDM2IEBACiAJCWRzby0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBkc28gKm1hY2hpbmVfX2NyZWF0ZV9rZXJuZWwoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCitzdGF0aWMgc3RydWN0IGRzbyAqbWFjaGluZV9fZ2V0X2tlcm5lbChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAljb25zdCBjaGFyICp2bWxpbnV4X25hbWUgPSBOVUxMOwogCXN0cnVjdCBkc28gKmtlcm5lbDsKIAogCWlmIChtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKSB7CiAJCXZtbGludXhfbmFtZSA9IHN5bWJvbF9jb25mLnZtbGludXhfbmFtZTsKLQkJa2VybmVsID0gZHNvX19uZXdfa2VybmVsKHZtbGludXhfbmFtZSk7CisJCWlmICghdm1saW51eF9uYW1lKQorCQkJdm1saW51eF9uYW1lID0gIltrZXJuZWwua2FsbHN5bXNdIjsKKworCQlrZXJuZWwgPSBkc29fX2tlcm5lbF9maW5kbmV3KG1hY2hpbmUsIHZtbGludXhfbmFtZSwKKwkJCQkJICAgICAiW2tlcm5lbF0iLAorCQkJCQkgICAgIERTT19UWVBFX0tFUk5FTCk7CiAJfSBlbHNlIHsKKwkJY2hhciBiZltQQVRIX01BWF07CisKIAkJaWYgKG1hY2hpbmVfX2lzX2RlZmF1bHRfZ3Vlc3QobWFjaGluZSkpCiAJCQl2bWxpbnV4X25hbWUgPSBzeW1ib2xfY29uZi5kZWZhdWx0X2d1ZXN0X3ZtbGludXhfbmFtZTsKLQkJa2VybmVsID0gZHNvX19uZXdfZ3Vlc3Rfa2VybmVsKG1hY2hpbmUsIHZtbGludXhfbmFtZSk7CisJCWlmICghdm1saW51eF9uYW1lKQorCQkJdm1saW51eF9uYW1lID0gbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIGJmLAorCQkJCQkJCSAgc2l6ZW9mKGJmKSk7CisKKwkJa2VybmVsID0gZHNvX19rZXJuZWxfZmluZG5ldyhtYWNoaW5lLCB2bWxpbnV4X25hbWUsCisJCQkJCSAgICAgIltndWVzdC5rZXJuZWxdIiwKKwkJCQkJICAgICBEU09fVFlQRV9HVUVTVF9LRVJORUwpOwogCX0KIAotCWlmIChrZXJuZWwgIT0gTlVMTCkgeworCWlmIChrZXJuZWwgIT0gTlVMTCAmJiAoIWtlcm5lbC0+aGFzX2J1aWxkX2lkKSkKIAkJZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKGtlcm5lbCwgbWFjaGluZSk7Ci0JCWRzb3NfX2FkZCgmbWFjaGluZS0+a2VybmVsX2Rzb3MsIGtlcm5lbCk7Ci0JfQorCiAJcmV0dXJuIGtlcm5lbDsKIH0KIApAQCAtMjMyOSw3ICsyMzQ3LDcgQEAKIAogaW50IG1hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKLQlzdHJ1Y3QgZHNvICprZXJuZWwgPSBtYWNoaW5lX19jcmVhdGVfa2VybmVsKG1hY2hpbmUpOworCXN0cnVjdCBkc28gKmtlcm5lbCA9IG1hY2hpbmVfX2dldF9rZXJuZWwobWFjaGluZSk7CiAKIAlpZiAoa2VybmVsID09IE5VTEwgfHwKIAkgICAgX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZSwga2VybmVsKSA8IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggMzI1ZWUzNi4uNGYzNzdkOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMTU1LDcgKzE1NSw2IEBACiB9OwogCiBzdHJ1Y3QgZHNvICpkc29fX25ldyhjb25zdCBjaGFyICpuYW1lKTsKLXN0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19kZWxldGUoc3RydWN0IGRzbyAqZHNvKTsKIAogaW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy90b3AuYyBiL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy90b3AuYwppbmRleCA1YTA2NTM4Li44ODQwM2NmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvdG9wLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL3RvcC5jCkBAIC0yMDgsNiArMjA4LDUgQEAKIAkJfSwKIAl9OwogCi0JdWlfaGVscGxpbmVfX3B1c2goIlByZXNzIDwtIG9yIEVTQyB0byBleGl0Iik7CiAJcmV0dXJuIHBlcmZfdG9wX2Jyb3dzZXJfX3J1bigmYnJvd3Nlcik7CiB9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci8uZ2l0aWdub3JlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTgzZGQyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIyIEBACisubGlicworbGliY3B1cG93ZXIuc28KK2xpYmNwdXBvd2VyLnNvLjAKK2xpYmNwdXBvd2VyLnNvLjAuMC4wCitidWlsZC9jY2R2CitjcHVmcmVxLWluZm8KK2NwdWZyZXEtc2V0CitjcHVmcmVxLWFwZXJmCitsaWIvLmxpYnMKK2xpYi9jcHVmcmVxLmxvCitsaWIvY3B1ZnJlcS5vCitsaWIvcHJvYy5sbworbGliL3Byb2MubworbGliL3N5c2ZzLmxvCitsaWIvc3lzZnMubworcG8vY3B1cG93ZXJ1dGlscy5wb3QKK3BvLyouZ21vCit1dGlscy9jcHVmcmVxLWluZm8ubwordXRpbHMvY3B1ZnJlcS1zZXQubwordXRpbHMvY3B1ZnJlcS1hcGVyZi5vCitjcHVwb3dlcgorYmVuY2gvY3B1ZnJlcS1iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGEwM2FjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwyODAgQEAKKyMgTWFrZWZpbGUgZm9yIGNwdXBvd2VyCisjCisjIENvcHlyaWdodCAoQykgMjAwNSwyMDA2IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KKyMKKyMgQmFzZWQgbGFyZ2VseSBvbiB0aGUgTWFrZWZpbGUgZm9yIHVkZXYgYnk6CisjCisjIENvcHlyaWdodCAoQykgMjAwMywyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjIC0tLSBDT05GSUdVUkFUSU9OIEJFR0lOIC0tLQorCisjIFNldCB0aGUgZm9sbG93aW5nIHRvIGB0cnVlJyB0byBtYWtlIGEgdW5zdHJpcHBlZCwgdW5vcHRpbWl6ZWQKKyMgYmluYXJ5LiBMZWF2ZSB0aGlzIHNldCB0byBgZmFsc2UnIGZvciBwcm9kdWN0aW9uIHVzZS4KK0RFQlVHID89CXRydWUKKworIyBtYWtlIHRoZSBidWlsZCBzaWxlbnQuIFNldCB0aGlzIHRvIHNvbWV0aGluZyBlbHNlIHRvIG1ha2UgaXQgbm9pc3kgYWdhaW4uCitWID89CQlmYWxzZQorCisjIEludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgKG91dHB1dCBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzKS4KKyMgUmVxdWlyZXMgZ2V0dGV4dC4KK05MUyA/PQkJdHJ1ZQorCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICd0cnVlJyB0byBidWlsZC9pbnN0YWxsIHRoZQorIyBjcHVmcmVxLWJlbmNoIGJlbmNobWFya2luZyB0b29sCitDUFVGUkVRX0JFTkNIID89IHRydWUKKworIyBQcmVmaXggdG8gdGhlIGRpcmVjdG9yaWVzIHdlJ3JlIGluc3RhbGxpbmcgdG8KK0RFU1RESVIgPz0KKworIyAtLS0gQ09ORklHVVJBVElPTiBFTkQgLS0tCisKKworCisjIFBhY2thZ2UtcmVsYXRlZCBkZWZpbml0aW9ucy4gRGlzdHJpYnV0aW9ucyBjYW4gbW9kaWZ5IHRoZSB2ZXJzaW9uCisjIGFuZCBfc2hvdWxkXyBtb2RpZnkgdGhlIFBBQ0tBR0VfQlVHUkVQT1JUIGRlZmluaXRpb24KKworVkVSU0lPTj0JCQkkKHNoZWxsIC4vdXRpbHMvdmVyc2lvbi1nZW4uc2gpCitMSUJfTUFKPQkJCTAuMC4wCitMSUJfTUlOPQkJCTAKKworUEFDS0FHRSA9CQkJY3B1cG93ZXIKK1BBQ0tBR0VfQlVHUkVQT1JUID0JCWNwdWZyZXFAdmdlci5rZXJuZWwub3JnCitMQU5HVUFHRVMgPSAJCQlkZSBmciBpdCBjcyBwdAorCisKKyMgRGlyZWN0b3J5IGRlZmluaXRpb25zLiBUaGVzZSBhcmUgZGVmYXVsdCBhbmQgbW9zdCBwcm9iYWJseQorIyBkbyBub3QgbmVlZCB0byBiZSBjaGFuZ2VkLiBQbGVhc2Ugbm90ZSB0aGF0IERFU1RESVIgaXMKKyMgYWRkZWQgaW4gZnJvbnQgb2YgYW55IG9mIHRoZW0KKworYmluZGlyID89CS91c3IvYmluCitzYmluZGlyID89CS91c3Ivc2JpbgorbWFuZGlyID89CS91c3IvbWFuCitpbmNsdWRlZGlyID89CS91c3IvaW5jbHVkZQorbGliZGlyID89CS91c3IvbGliCitsb2NhbGVkaXIgPz0JL3Vzci9zaGFyZS9sb2NhbGUKK2RvY2RpciA/PSAgICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy9jcHVwb3dlcgorY29uZmRpciA/PSAgICAgIC9ldGMvCisKKyMgVG9vbGNoYWluOiB3aGF0IHRvb2xzIGRvIHdlIHVzZSwgYW5kIHdoYXQgb3B0aW9ucyBkbyB0aGV5IG5lZWQ6CisKK0NQID0gY3AgLWZwUgorSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKK0lOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KK0lOU1RBTExfREFUQSAgPSAke0lOU1RBTEx9IC1tIDY0NAorSU5TVEFMTF9TQ1JJUFQgPSAke0lOU1RBTExfUFJPR1JBTX0KKworIyBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBjcm9zcyBjb21waWxlciwgeW91IG1heSB3YW50IHRvIHNldCB0aGlzCisjIHRvIHNvbWV0aGluZyBtb3JlIGludGVyZXN0aW5nLCBsaWtlICJhcm0tbGludXgtIi4gIElmIHlvdSB3YW50CisjIHRvIGNvbXBpbGUgdnMgdUNsaWJjLCB0aGF0IGNhbiBiZSBkb25lIGhlcmUgYXMgd2VsbC4KK0NST1NTID0gIy91c3IvaTM4Ni1saW51eC11Y2xpYmMvdXNyL2Jpbi9pMzg2LXVjbGliYy0KK0NDID0gJChDUk9TUylnY2MKK0xEID0gJChDUk9TUylnY2MKK0FSID0gJChDUk9TUylhcgorU1RSSVAgPSAkKENST1NTKXN0cmlwCitSQU5MSUIgPSAkKENST1NTKXJhbmxpYgorSE9TVENDID0gZ2NjCisKKworIyBOb3cgd2Ugc2V0IHVwIHRoZSBidWlsZCBzeXN0ZW0KKyMKKworIyBzZXQgdXAgUFdEIHNvIHRoYXQgb2xkZXIgdmVyc2lvbnMgb2YgbWFrZSB3aWxsIHdvcmsgd2l0aCBvdXIgYnVpbGQuCitQV0QgPSAkKHNoZWxsIHB3ZCkKKworR01PX0ZJTEVTID0gJHtzaGVsbCBmb3IgSExBTkcgaW4gJHtMQU5HVUFHRVN9OyBkbyBlY2hvIHBvLyQkSExBTkcuZ21vOyBkb25lO30KKworZXhwb3J0IENST1NTIENDIEFSIFNUUklQIFJBTkxJQiBDRkxBR1MgTERGTEFHUyBMSUJfT0JKUworCisjIGNoZWNrIGlmIGNvbXBpbGVyIG9wdGlvbiBpcyBzdXBwb3J0ZWQKK2NjLXN1cHBvcnRzID0gJHtzaGVsbCBpZiAkKENDKSAkezF9IC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gZWNobyAiJCgxKSI7IGZpO30KKworIyB1c2UgJy1Pcycgb3B0aW1pemF0aW9uIGlmIGF2YWlsYWJsZSwgZWxzZSB1c2UgLU8yCitPUFRJTUlaQVRJT04gOj0gJChjYWxsIGNjLXN1cHBvcnRzLC1PcywtTzIpCisKK1dBUk5JTkdTIDo9IC1XYWxsIC1XY2hhci1zdWJzY3JpcHRzIC1XcG9pbnRlci1hcml0aCAtV3NpZ24tY29tcGFyZQorV0FSTklOR1MgKz0gJChjYWxsIGNjLXN1cHBvcnRzLC1Xbm8tcG9pbnRlci1zaWduKQorV0FSTklOR1MgKz0gJChjYWxsIGNjLXN1cHBvcnRzLC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KQorV0FSTklOR1MgKz0gLVdzaGFkb3cKKworQ0ZMQUdTICs9IC1EVkVSU0lPTj1cIiQoVkVSU0lPTilcIiAtRFBBQ0tBR0U9XCIkKFBBQ0tBR0UpXCIgXAorCQktRFBBQ0tBR0VfQlVHUkVQT1JUPVwiJChQQUNLQUdFX0JVR1JFUE9SVClcIiAtRF9HTlVfU09VUkNFCisKK1VUSUxfT0JKUyA9ICB1dGlscy9oZWxwZXJzL2FtZC5vIHV0aWxzL2hlbHBlcnMvdG9wb2xvZ3kubyB1dGlscy9oZWxwZXJzL21zci5vIFwKKwl1dGlscy9oZWxwZXJzL3N5c2ZzLm8gdXRpbHMvaGVscGVycy9taXNjLm8gdXRpbHMvaGVscGVycy9jcHVpZC5vIFwKKwl1dGlscy9oZWxwZXJzL3BjaS5vIHV0aWxzL2hlbHBlcnMvYml0bWFzay5vIFwKKwl1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUubyB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUubyBcCisJdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5vIHV0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLm8gXAorCXV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLm8gdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IubyBcCisJdXRpbHMvY3B1cG93ZXIubyB1dGlscy9jcHVmcmVxLWluZm8ubyB1dGlscy9jcHVmcmVxLXNldC5vIFwKKwl1dGlscy9jcHVwb3dlci1zZXQubyB1dGlscy9jcHVwb3dlci1pbmZvLm8gdXRpbHMvY3B1aWRsZS1pbmZvLm8KKworVVRJTF9IRUFERVJTID0gdXRpbHMvaGVscGVycy9oZWxwZXJzLmggdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCBcCisJdXRpbHMvaGVscGVycy9iaXRtYXNrLmggXAorCXV0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmggdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuZGVmCisKK1VUSUxfU1JDIDo9ICQoVVRJTF9PQkpTOi5vPS5jKQorCitMSUJfSEVBREVSUyA9IAlsaWIvY3B1ZnJlcS5oIGxpYi9zeXNmcy5oCitMSUJfU1JDID0gCWxpYi9jcHVmcmVxLmMgbGliL3N5c2ZzLmMKK0xJQl9PQkpTID0gCWxpYi9jcHVmcmVxLm8gbGliL3N5c2ZzLm8KKworQ0ZMQUdTICs9CS1waXBlCisKK2lmZXEgKCQoc3RyaXAgJChOTFMpKSx0cnVlKQorCUlOU1RBTExfTkxTICs9IGluc3RhbGwtZ21vCisJQ09NUElMRV9OTFMgKz0gY3JlYXRlLWdtbworCUNGTEFHUyArPSAtRE5MUworZW5kaWYKKworaWZlcSAoJChzdHJpcCAkKENQVUZSRVFfQkVOQ0gpKSx0cnVlKQorCUlOU1RBTExfQkVOQ0ggKz0gaW5zdGFsbC1iZW5jaAorCUNPTVBJTEVfQkVOQ0ggKz0gY29tcGlsZS1iZW5jaAorZW5kaWYKKworQ0ZMQUdTICs9ICQoV0FSTklOR1MpCisKK2lmZXEgKCQoc3RyaXAgJChWKSksZmFsc2UpCisJUVVJRVQ9QAorCUVDSE89QGVjaG8KK2Vsc2UKKwlRVUlFVD0KKwlFQ0hPPUBcIworZW5kaWYKK2V4cG9ydCBRVUlFVCBFQ0hPCisKKyMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKK2lmZXEgKCQoc3RyaXAgJChERUJVRykpLHRydWUpCisJQ0ZMQUdTICs9IC1PMSAtZyAtRERFQlVHCisJU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKK2Vsc2UKKwlDRkxBR1MgKz0gJChPUFRJTUlaQVRJT04pIC1mb21pdC1mcmFtZS1wb2ludGVyCisJU1RSSVBDTUQgPSAkKFNUUklQKSAtcyAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQKK2VuZGlmCisKKworIyB0aGUgYWN0dWFsIG1ha2UgcnVsZXMKKworYWxsOiBsaWJjcHVwb3dlciBjcHVwb3dlciAkKENPTVBJTEVfTkxTKSAkKENPTVBJTEVfQkVOQ0gpCisKK2xpYi8lLm86ICQoTElCX1NSQykgJChMSUJfSEVBREVSUykKKwkkKEVDSE8pICIgIENDICAgICAgIiAkQAorCSQoUVVJRVQpICQoQ0MpICQoQ0ZMQUdTKSAtZlBJQyAtbyAkQCAtYyBsaWIvJCouYworCitsaWJjcHVwb3dlci5zby4kKExJQl9NQUopOiAkKExJQl9PQkpTKQorCSQoRUNITykgIiAgTEQgICAgICAiICRACisJJChRVUlFVCkgJChDQykgLXNoYXJlZCAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCisJCS1XbCwtc29uYW1lLGxpYmNwdXBvd2VyLnNvLiQoTElCX01JTikgJChMSUJfT0JKUykKKwlAbG4gLXNmICRAIGxpYmNwdXBvd2VyLnNvCisJQGxuIC1zZiAkQCBsaWJjcHVwb3dlci5zby4kKExJQl9NSU4pCisKK2xpYmNwdXBvd2VyOiBsaWJjcHVwb3dlci5zby4kKExJQl9NQUopCisKKyMgTGV0IGFsbCAubyBmaWxlcyBkZXBlbmQgb24gaXRzIC5jIGZpbGUgYW5kIGFsbCBoZWFkZXJzCisjIE1pZ2h0IGJlIHdvcnRoIHRvIHB1dCB0aGlzIGludG8gdXRpbHMvTWFrZWZpbGUgYXQgc29tZSBwb2ludCBvZiB0aW1lCiskKFVUSUxfT0JKUyk6ICQoVVRJTF9IRUFERVJTKQorCisuYy5vOgorCSQoRUNITykgIiAgQ0MgICAgICAiICRACisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpIC1JLi9saWIgLUkgLi91dGlscyAtbyAkQCAtYyAkKi5jCisKK2NwdXBvd2VyOiAkKFVUSUxfT0JKUykgbGliY3B1cG93ZXIuc28uJChMSUJfTUFKKQorCSQoRUNITykgIiAgQ0MgICAgICAiICRACisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWxjcHVwb3dlciAtbHJ0IC1scGNpIC1MLiAtbyAkQCAkKFVUSUxfT0JKUykKKwkkKFFVSUVUKSAkKFNUUklQQ01EKSAkQAorCitwby8kKFBBQ0tBR0UpLnBvdDogJChVVElMX1NSQykKKwkkKEVDSE8pICIgIEdFVFRFWFQgIiAkQAorCSQoUVVJRVQpIHhnZXR0ZXh0IC0tZGVmYXVsdC1kb21haW49JChQQUNLQUdFKSAtLWFkZC1jb21tZW50cyBcCisJCS0ta2V5d29yZD1fIC0ta2V5d29yZD1OXyAkKFVUSUxfU1JDKSAmJiBcCisJdGVzdCAtZiAkKFBBQ0tBR0UpLnBvICYmIFwKKwltdiAtZiAkKFBBQ0tBR0UpLnBvIHBvLyQoUEFDS0FHRSkucG90CisKK3BvLyUuZ21vOiBwby8lLnBvCisJJChFQ0hPKSAiICBNU0dGTVQgICIgJEAKKwkkKFFVSUVUKSBtc2dmbXQgLW8gJEAgcG8vJCoucG8KKworY3JlYXRlLWdtbzogJHtHTU9fRklMRVN9CisKK3VwZGF0ZS1wbzogcG8vJChQQUNLQUdFKS5wb3QKKwkkKEVDSE8pICIgIE1TR01SRyAgIiAkQAorCSQoUVVJRVQpIEBmb3IgSExBTkcgaW4gJChMQU5HVUFHRVMpOyBkbyBcCisJCWVjaG8gLW4gIlVwZGF0aW5nICQkSExBTkcgIjsgXAorCQlpZiBtc2dtZXJnZSBwby8kJEhMQU5HLnBvIHBvLyQoUEFDS0FHRSkucG90IC1vIFwKKwkJICAgcG8vJCRITEFORy5uZXcucG87IHRoZW4gXAorCQkJbXYgLWYgcG8vJCRITEFORy5uZXcucG8gcG8vJCRITEFORy5wbzsgXAorCQllbHNlIFwKKwkJCWVjaG8gIm1zZ21lcmdlIGZvciAkJEhMQU5HIGZhaWxlZCEiOyBcCisJCQlybSAtZiBwby8kJEhMQU5HLm5ldy5wbzsgXAorCQlmaTsgXAorCWRvbmU7CisKK2NvbXBpbGUtYmVuY2g6IGxpYmNwdXBvd2VyLnNvLiQoTElCX01BSikKKwlAVj0kKFYpIGNvbmZkaXI9JChjb25mZGlyKSAkKE1BS0UpIC1DIGJlbmNoCisKK2NsZWFuOgorCS1maW5kIC4gXCggLW5vdCAtdHlwZSBkIFwpIC1hbmQgXCggLW5hbWUgJyp+JyAtbyAtbmFtZSAnKi5bb2FzXScgXCkgLXR5cGUgZiAtcHJpbnQgXAorCSB8IHhhcmdzIHJtIC1mCisJLXJtIC1mICQoVVRJTF9CSU5TKQorCS1ybSAtZiAkKElETEVfT0JKUykKKwktcm0gLWYgY3B1cG93ZXIKKwktcm0gLWYgbGliY3B1cG93ZXIuc28qCisJLXJtIC1yZiBwby8qLmdtbyBwby8qLnBvdAorCSQoTUFLRSkgLUMgYmVuY2ggY2xlYW4KKworCitpbnN0YWxsLWxpYjoKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2xpYmRpcn0KKwkkKENQKSBsaWJjcHVwb3dlci5zbyogJChERVNURElSKSR7bGliZGlyfS8KKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2luY2x1ZGVkaXJ9CisJJChJTlNUQUxMX0RBVEEpIGxpYi9jcHVmcmVxLmggJChERVNURElSKSR7aW5jbHVkZWRpcn0vY3B1ZnJlcS5oCisKK2luc3RhbGwtdG9vbHM6CisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJHtiaW5kaXJ9CisJJChJTlNUQUxMX1BST0dSQU0pIGNwdXBvd2VyICQoREVTVERJUikke2JpbmRpcn0KKworaW5zdGFsbC1tYW46CisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItc2V0LjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLXNldC4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1pbmZvLjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLWluZm8uMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItbW9uaXRvci4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1tb25pdG9yLjEKKworaW5zdGFsbC1nbW86CisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJHtsb2NhbGVkaXJ9CisJZm9yIEhMQU5HIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCQllY2hvICckKElOU1RBTExfREFUQSkgLUQgcG8vJCRITEFORy5nbW8gJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vJzsgXAorCQkkKElOU1RBTExfREFUQSkgLUQgcG8vJCRITEFORy5nbW8gJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vOyBcCisJZG9uZTsKKworaW5zdGFsbC1iZW5jaDoKKwlAI0RFU1RESVIgbXVzdCBiZSBzZXQgZnJvbSBvdXRzaWRlIHRvIHN1cnZpdmUKKwlAc2JpbmRpcj0kKHNiaW5kaXIpIGJpbmRpcj0kKGJpbmRpcikgZG9jZGlyPSQoZG9jZGlyKSBjb25mZGlyPSQoY29uZmRpcikgJChNQUtFKSAtQyBiZW5jaCBpbnN0YWxsCisKK2luc3RhbGw6IGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuICQoSU5TVEFMTF9OTFMpICQoSU5TVEFMTF9CRU5DSCkKKwordW5pbnN0YWxsOgorCS0gcm0gLWYgJChERVNURElSKSR7bGliZGlyfS9saWJjcHVwb3dlci4qCisJLSBybSAtZiAkKERFU1RESVIpJHtpbmNsdWRlZGlyfS9jcHVmcmVxLmgKKwktIHJtIC1mICQoREVTVERJUikke2JpbmRpcn0vdXRpbHMvY3B1cG93ZXIKKwktIHJtIC1mICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVmcmVxLXNldC4xCisJLSBybSAtZiAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1ZnJlcS1pbmZvLjEKKwktIGZvciBITEFORyBpbiAkKExBTkdVQUdFUyk7IGRvIFwKKwkJcm0gLWYgJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vOyBcCisJICBkb25lOworCisuUEhPTlk6IGFsbCB1dGlscyBsaWJjcHVwb3dlciB1cGRhdGUtcG8gY3JlYXRlLWdtbyBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuIGluc3RhbGwtZ21vIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9SRUFETUUgYi90b29scy9wb3dlci9jcHVwb3dlci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZDRjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRQpAQCAtMCwwICsxLDQ5IEBACitUaGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UgKGhvbWVwYWdlOiAKK2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2NwdWZyZXEvY3B1ZnJlcXV0aWxzLmh0bWwgKSAKK2NvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CisKK3JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKK09uIHg4NiBwY2l1dGlscyBpcyBuZWVkZWQgYXQgcnVudGltZSAoLWxwY2kpLgorRm9yIGNvbXBpbGF0aW9uIHBjaXV0aWxzLWRldmVsIChwY2kvcGNpLmgpIGFuZCBhIGdjYyB2ZXJzaW9uCitwcm92aWRpbmcgY3B1aWQuaCBpcyBuZWVkZWQuCitGb3IgYm90aCBpdCdzIG5vdCBleHBsaWNpdGx5IGNoZWNrZWQgZm9yICh5ZXQpLgorCisKK2xpYmNwdWZyZXEKKy0tLS0tLS0tLS0KKworImxpYmNwdWZyZXEiIGlzIGEgbGlicmFyeSB3aGljaCBvZmZlcnMgYSB1bmlmaWVkIGFjY2VzcyBtZXRob2QgZm9yIHVzZXJzcGFjZQordG9vbHMgYW5kIHByb2dyYW1zIHRvIHRoZSBjcHVmcmVxIGNvcmUgYW5kIGRyaXZlcnMgaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhpcworYWxsb3dzIGZvciBjb2RlIHJlZHVjdGlvbiBpbiB1c2Vyc3BhY2UgdG9vbHMsIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YKK3RoZSBpbnRlcmFjdGlvbiB0byB0aGUgY3B1ZnJlcSBjb3JlLCBhbmQgc3VwcG9ydCBmb3IgYm90aCB0aGUgc3lzZnMgYW5kIHByb2MKK2ludGVyZmFjZXMgW2RlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uLCBzZWUgYmVsb3ddLgorCisKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbWFrZQorc3UKK21ha2UgaW5zdGFsbAorCitzaG91bGQgc3VmZmljZSBvbiBtb3N0IHN5c3RlbXMuIEl0IGJ1aWxkcyBkZWZhdWx0IGxpYmNwdWZyZXEsCitjcHVmcmVxLXNldCBhbmQgY3B1ZnJlcS1pbmZvIGZpbGVzIGFuZCBpbnN0YWxscyB0aGVtIGluIC91c3IvbGliIGFuZAorL3Vzci9iaW4sIHJlc3BlY3RpdmVseS4gSWYgeW91IHdhbnQgdG8gc2V0IHVwIHRoZSBwYXRocyBkaWZmZXJlbnRseSBhbmQvb3IKK3dhbnQgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIHRvIHlvdXIgc3BlY2lmaWMgbmVlZHMsIHlvdSBuZWVkIHRvIG9wZW4KKyJNYWtlZmlsZSIgd2l0aCBhbiBlZGl0b3Igb2YgeW91ciBjaG9pY2UgYW5kIGVkaXQgdGhlIGJsb2NrIG1hcmtlZAorQ09ORklHVVJBVElPTi4KKworCitUSEFOS1MKKy0tLS0tLQorTWFueSB0aGFua3MgdG8gTWF0dGlhIERvbmdpbGkgd2hvIHdyb3RlIHRoZSBhdXRvdG9vbGl6YXRpb24gYW5kCitsaWJ0b29saXphdGlvbiwgdGhlIG1hbnBhZ2VzIGFuZCB0aGUgaXRhbGlhbiBsYW5ndWFnZSBmaWxlIGZvciBjcHVmcmVxdXRpbHM7Cit0byBEYXZlIEpvbmVzIGZvciBoaXMgZmVlZGJhY2sgYW5kIGhpcyBkdW1wX3BzYiB0b29sOyB0byBCcnVubyBEdWNyb3QgZm9yIGhpcworcG93ZXJub3ctazgtZGVjb2RlIGFuZCBpbnRlbF9nc2ljIHRvb2xzIGFzIHdlbGwgYXMgdGhlIGZyZW5jaCBsYW5ndWFnZSBmaWxlOworYW5kIHRvIHZhcmlvdXMgb3RoZXJzIGNvbW1lbnRpbmcgb24gdGhlIHByZXZpb3VzIChwcmUtKXJlbGVhc2VzIG9mIAorY3B1ZnJlcXV0aWxzLgorCisKKyAgICAgICAgRG9taW5payBCcm9kb3dza2kKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1RvRG8gYi90b29scy9wb3dlci9jcHVwb3dlci9Ub0RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NGI3OGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9Ub0RvCkBAIC0wLDAgKzEsMTEgQEAKK1RvRG9zIHNvcnRlZCBieSBwcmlvcml0eToKKworLSBVc2UgYml0bWFzayBmdW5jdGlvbnMgdG8gcGFyc2UgQ1BVIHRvcG9sb2d5IG1vcmUgcm9idXN0CisgIChjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyBpc3N1ZXMgb24gQU1EKQorLSBUcnkgdG8gcmVhZCBvdXQgYm9vc3Qgc3RhdGVzIGFuZCBmcmVxdWVuY2llcyBvbiBJbnRlbAorLSBBZGp1c3QgUkVBRE1FCistIFNvbWV3aGVyZSBzYXcgdGhlIGFiaWxpdHkgdG8gcmVhZCBwb3dlciBjb25zdW1wdGlvbiBvZgorICBSQU0gZnJvbSBIVyBvbiBJbnRlbCBTYW5keUJyaWRnZSAtPiBhbm90aGVyIG1vbml0b3I/CistIEFkZCBhbm90aGVyIGMxZSBkZWJ1ZyBpZGxlIG1vbml0b3IKKyAgLT4gSXMgYnkgZGVzaWduIHJhY3kgd2l0aCBCSU9TLCBidXQgY291bGQgYmUgYWRkZWQKKyAgICAgd2l0aCBhIC0tZm9yY2Ugb3B0aW9uIGFuZCBzb21lICJiZSBjYXJlZnVsIiBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY3NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvTWFrZWZpbGUKQEAgLTAsMCArMSwyOSBAQAorTElCUyA9IC1MLi4vIC1sbSAtbGNwdXBvd2VyCisKK09CSlMgPSBtYWluLm8gcGFyc2UubyBzeXN0ZW0ubyBiZW5jaG1hcmsubworQ0ZMQUdTICs9IC1EX0dOVV9TT1VSQ0UgLUkuLi9saWIgLURERUZBVUxUX0NPTkZJR19GSUxFPVwiJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmZcIgorCislLm8gOiAlLmMKKwkkKEVDSE8pICIgIENDICAgICAgIiAkQAorCSQoUVVJRVQpICQoQ0MpIC1jICQoQ0ZMQUdTKSAkPCAtbyAkQAorCitjcHVmcmVxLWJlbmNoOiAkKE9CSlMpCisJJChFQ0hPKSAiICBDQyAgICAgICIgJEAKKwkkKFFVSUVUKSAkKENDKSAtbyAkQCAkKENGTEFHUykgJChPQkpTKSAkKExJQlMpCisKK2FsbDogY3B1ZnJlcS1iZW5jaAorCitpbnN0YWxsOgorCW1rZGlyIC1wICQoREVTVERJUikvJChzYmluZGlyKQorCW1rZGlyIC1wICQoREVTVERJUikvJChiaW5kaXIpCisJbWtkaXIgLXAgJChERVNURElSKS8kKGRvY2RpcikKKwlta2RpciAtcCAkKERFU1RESVIpLyQoY29uZmRpcikKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoICQoREVTVERJUikvJChzYmluZGlyKS9jcHVmcmVxLWJlbmNoCisJaW5zdGFsbCAtbSA3NTUgY3B1ZnJlcS1iZW5jaF9wbG90LnNoICQoREVTVERJUikvJChiaW5kaXIpL2NwdWZyZXEtYmVuY2hfcGxvdC5zaAorCWluc3RhbGwgLW0gNjQ0IFJFQURNRS1CRU5DSCAkKERFU1RESVIpLyQoZG9jZGlyKS9SRUFETUUtQkVOQ0gKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoX3NjcmlwdC5zaCAkKERFU1RESVIpLyQoZG9jZGlyKS9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaAorCWluc3RhbGwgLW0gNjQ0IGV4YW1wbGUuY2ZnICQoREVTVERJUikvJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmYKKworY2xlYW46CisJcm0gLWYgKi5vCisJcm0gLWYgY3B1ZnJlcS1iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNIIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTNlYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9SRUFETUUtQkVOQ0gKQEAgLTAsMCArMSwxMjQgQEAKK1RoaXMgaXMgY3B1ZnJlcS1iZW5jaCwgYSBtaWNyb2JlbmNobWFyayBmb3IgdGhlIGNwdWZyZXEgZnJhbWV3b3JrLgorCitQdXJwb3NlCis9PT09PT09CisKK1doYXQgaXMgdGhpcyBiZW5jaG1hcmsgZm9yOgorICAtIElkZW50aWZ5IHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgbG9zcyB3aGVuIGRvaW5nIGR5bmFtaWMgZnJlcXVlbmN5CisgICAgc2NhbGluZyB1c2luZyBMaW51eCBrZXJuZWwgZ292ZXJub3JzCisgIC0gSWRlbnRpZnkgYXZlcmFnZSByZWFjdGlvbiB0aW1lIG9mIGEgZ292ZXJub3IgdG8gQ1BVIGxvYWQgY2hhbmdlcworICAtIChTdHJlc3MpIFRlc3Rpbmcgd2hldGhlciBhIGNwdWZyZXEgbG93IGxldmVsIGRyaXZlciBvciBnb3Zlcm5vciB3b3JrcworICAgIGFzIGV4cGVjdGVkCisgIC0gSWRlbnRpZnkgY3B1ZnJlcSByZWxhdGVkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGJldHdlZW4ga2VybmVscworICAtIFBvc3NpYmx5IFJlYWwgdGltZSBwcmlvcml0eSB0ZXN0aW5nPyAtPiB3aGF0IGhhcHBlbnMgaWYgdGhlcmUgYXJlCisgICAgcHJvY2Vzc2VzIHdpdGggYSBoaWdoZXIgcHJpbyB0aGFuIHRoZSBnb3Zlcm5vcidzIGtlcm5lbCB0aHJlYWQKKyAgLSAuLi4KKworV2hhdCB0aGlzIGJlbmNobWFyayBkb2VzICpub3QqIGNvdmVyOgorICAtIFBvd2VyIHNhdmluZyByZWxhdGVkIHJlZ3Jlc3Npb25zIChJbiBmYWN0IGFzIGJldHRlciB0aGUgcGVyZm9ybWFuY2UKKyAgICB0aHJvdWdocHV0IGlzLCB0aGUgd29yc2UgdGhlIHBvd2VyIHNhdmluZ3Mgd2lsbCBiZSwgYnV0IHRoZSBmaXJzdCBzaG91bGQKKyAgICBtb3N0bHkgY291bnQgbW9yZS4uLikKKyAgLSBSZWFsIHdvcmxkICh3b3JrbG9hZHMpCisKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CisKK2NwdWZyZXEtYmVuY2ggaGVscHMgdG8gdGVzdCB0aGUgY29uZGl0aW9uIG9mIGEgZ2l2ZW4gY3B1ZnJlcSBnb3Zlcm5vci4KK0ZvciB0aGF0IHB1cnBvc2UsIGl0IGNvbXBhcmVzIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciB0byBhIGNvbmZpZ3VyZWQKK3Bvd2Vyc2F2ZSBtb2R1bGUuCisKKworSG93IGl0IHdvcmtzCis9PT09PT09PT09PT0KK1lvdSBjYW4gc3BlY2lmeSBsb2FkICgxMDAlIENQVSBsb2FkKSBhbmQgc2xlZXAgKDAlIENQVSBsb2FkKSB0aW1lcyBpbiB1cyB3aGljaAord2lsbCBiZSBydW4gWCB0aW1lIGluIGEgcm93IChjeWNsZXMpOgorCisgICAgICAgICBzbGVlcD0yNTAwMAorICAgICAgICAgbG9hZD0yNTAwMAorICAgICAgICAgY3ljbGVzPTIwCisKK1RoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgY3JlYXRlIDI1bXMgbG9hZC9zbGVlcCB0dXJucywKK3JlcGVhdGVkIDIwIHRpbWVzLgorCitBZGRpbmcgdGhpczoKKyAgICAgICAgIHNsZWVwX3N0ZXA9MjUwMDAKKyAgICAgICAgIGxvYWRfc3RlcD0yNTAwMAorICAgICAgICAgcm91bmRzPTUKK1dpbGwgaW5jcmVhc2UgbG9hZCBhbmQgc2xlZXAgdGltZSBieSAyNW1zIDUgdGltZXMuCitUb2dldGhlciB5b3UgZ2V0IGZvbGxvd2luZyB0ZXN0OgorMjVtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorNTBtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorLi4KKzEwMG1zIGxvYWQvc2xlZXAgdGltZSByZXBlYXRlZCAyMCB0aW1lcyAoY3ljbGVzKS4KKworRmlyc3QgaXQgaXMgY2FsaWJyYXRlZCBob3cgbG9uZyBhIHNwZWNpZmljIENQVSBpbnRlbnNpdmUgY2FsY3VsYXRpb24KK3Rha2VzIG9uIHRoaXMgbWFjaGluZSBhbmQgbmVlZHMgdG8gYmUgcnVuIGluIGEgbG9vcCB1c2luZyB0aGUgcGVyZm9ybWFuY2UKK2dvdmVybm9yLgorVGhlbiB0aGUgYWJvdmUgdGVzdCBydW5zIGFyZSBwcm9jZXNzZWQgdXNpbmcgdGhlIHBlcmZvcm1hbmNlIGdvdmVybm9yCithbmQgdGhlIGdvdmVybm9yIHRvIHRlc3QuIFRoZSB0aW1lIHRoZSBjYWxjdWxhdGlvbiByZWFsbHkgbmVlZGVkCit3aXRoIHRoZSBkeW5hbWljIGZyZXEgc2NhbGluZyBnb3Zlcm5vciBpcyBjb21wYXJlZCB3aXRoIHRoZSB0aW1lIG5lZWRlZAorb24gZnVsbCBwZXJmb3JtYW5jZSBhbmQgeW91IGdldCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBsb3NzLgorCisKK0V4YW1wbGUgb2YgZXhwZWN0ZWQgcmVzdWx0cyB3aXRoIG9uZGVtYW5kIGdvdmVybm9yOgorCitUaGlzIHNob3dzIGV4cGVjdGVkIHJlc3VsdHMgb2YgdGhlIGZpcnN0IHR3byB0ZXN0IHJ1biByb3VuZHMgZnJvbQorYWJvdmUgY29uZmlnLCB5b3UgdGhlcmUgaGF2ZToKKworMTAwJSBDUFUgbG9hZCAobG9hZCkgfCAwICUgQ1BVIGxvYWQgKHNsZWVwKSAgfCByb3VuZAorICAgMjUgbXMgICAgICAgICAgICAgfCAgICAyNSBtcyAgICAgICAgICAgICAgfCAgIDEKKyAgIDUwIG1zICAgICAgICAgICAgIHwgICAgNTAgbXMgICAgICAgICAgICAgIHwgICAyCisKK0ZvciBleGFtcGxlIGlmIG9uZGVtYW5kIGdvdmVybm9yIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIDUwbXMKK3NhbXBsaW5nIHJhdGUgeW91IGdldDoKKworSW4gcm91bmQgMSwgb25kZW1hbmQgc2hvdWxkIGhhdmUgcmF0aGVyIHN0YXRpYyA1MCUgbG9hZCBhbmQgcHJvYmFibHkKK3dvbid0IGV2ZXIgc3dpdGNoIHVwIChhcyBsb25nIGFzIHVwX3RocmVzaG9sZCBpcyBhYm92ZSkuCisKK0luIHJvdW5kIDIsIGlmIHRoZSBvbmRlbWFuZCBzYW1wbGluZyB0aW1lcyBleGFjdGx5IG1hdGNoIHRoZSBsb2FkL3NsZWVwCit0cmlnZ2VyIG9mIHRoZSBjcHVmcmVxLWJlbmNoLCB5b3Ugd2lsbCBzZWUgbm8gcGVyZm9ybWFuY2UgbG9zcyAoY29tcGFyZSB3aXRoCitiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDEpKToKKworQnV0IGlmIG9uZGVtYW5kIGFsd2F5cyBraWNrcyBpbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb2FkIHNsZWVwIGN5Y2xlcywgaXQKK3dpbGwgYWx3YXlzIHNlZSA1MCUgbG9hZHMgYW5kIHlvdSBnZXQgd29yc3QgcGVyZm9ybWFuY2UgaW1wYWN0IG5ldmVyCitzd2l0Y2hpbmcgdXAgKGNvbXBhcmUgd2l0aCBiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDIpKTo6CisKKyAgICAgIDUwICAgICA1MCAgIDUwICAgNTBtcyAtPnRpbWUKK2xvYWQgLS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18CisgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorc2xlZXAgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tCisgICAgfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0gIG9uZGVtYW5kIHNhbXBsaW5nICgxKQorICAgICAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgICBsb2FkIHNlZW4gYnkgb25kZW1hbmQoJSkKKyAgICAgICB8LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0gICBvbmRlbWFuZCBzYW1wbGluZyAoMikKKyAgICAgIDUwICAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICAgICAgbG9hZCBzZWVuIGJ5IG9uZGVtYW5kKCUpCisKK1lvdSBjYW4gZWFzaWx5IHRlc3QgYWxsIGtpbmQgb2YgbG9hZC9zbGVlcCB0aW1lcyBhbmQgY2hlY2sgd2hldGhlciB5b3VyCitnb3Zlcm5vciBpbiBhdmVyYWdlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQuCisKKworVG9EbworPT09PQorCitQcm92aWRlIGEgZ251cGxvdCB1dGlsaXR5IHNjcmlwdCBmb3IgZWFzeSBnZW5lcmF0aW9uIG9mIHBsb3RzIHRvIHByZXNlbnQKK3RoZSBvdXRjb21lIG5pY2VseS4KKworCitjcHVmcmVxLWJlbmNoIENvbW1hbmQgVXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorLWwsIC0tbG9hZD08bG9uZyBpbnQ+ICAgICAgICAgICBpbml0aWFsIGxvYWQgdGltZSBpbiB1cworLXMsIC0tc2xlZXA9PGxvbmcgaW50PiAgICAgICAgICBpbml0aWFsIHNsZWVwIHRpbWUgaW4gdXMKKy14LCAtLWxvYWQtc3RlcD08bG9uZyBpbnQ+ICAgICAgdGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzCisteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD4gICAgIHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXMKKy1jLCAtLWNwdT08dW5zaWduZWQgaW50PiAgICAgICAgQ1BVIE51bWJlciB0byB1c2UsIHN0YXJ0aW5nIGF0IDAKKy1wLCAtLXByaW89PHByaW9yaXR5PiAgICAgICAgICAgc2NoZWR1bGVyIHByaW9yaXR5LCBISUdILCBMT1cgb3IgREVGQVVMVAorLWcsIC0tZ292ZXJub3I9PGdvdmVybm9yPiAgICAgICBjcHVmcmVxIGdvdmVybm9yIHRvIHRlc3QKKy1uLCAtLWN5Y2xlcz08aW50PiAgICAgICAgICAgICAgbG9hZC9zbGVlcCBjeWNsZXMgdG8gZ2V0IGFuIGF2YXJhZ2UgdmFsdWUgdG8gY29tcGFyZQorLXIsIC0tcm91bmRzPGludD4gICAgICAgICAgICAgICBsb2FkL3NsZWVwIHJvdW5kcworLWYsIC0tZmlsZT08Y29uZmlnZmlsZT4gICAgICAgICBjb25maWcgZmlsZSB0byB1c2UKKy1vLCAtLW91dHB1dD08ZGlyPiAgICAgICAgICAgICAgb3V0cHV0IGRpciwgbXVzdCBleGlzdAorLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgICB2ZXJib3NlIG91dHB1dCBvbi9vZmYKKworRHVlIHRvIHRoZSBoaWdoIHByaW9yaXR5LCB0aGUgYXBwbGljYXRpb24gbWF5IG5vdCBiZSByZXNwb25zaWJsZSBmb3Igc29tZSB0aW1lLgorQWZ0ZXIgdGhlIGJlbmNobWFyaywgdGhlIGxvZ2ZpbGUgaXMgc2F2ZWQgaW4gT1VUUFVURElSL2JlbmNobWFya19USU1FU1RBTVAubG9nCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiMWM0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jCkBAIC0wLDAgKzEsMTk0IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImJlbmNobWFyay5oIgorCisvKiBQcmludCBvdXQgcHJvZ3Jlc3MgaWYgd2UgbG9nIGludG8gYSBmaWxlICovCisjZGVmaW5lIHNob3dfcHJvZ3Jlc3ModG90YWxfdGltZSwgcHJvZ3Jlc3NfdGltZSkJXAoraWYgKGNvbmZpZy0+b3V0cHV0ICE9IHN0ZG91dCkgewkJCQlcCisJZnByaW50ZihzdGRvdXQsICJQcm9ncmVzczogJTAybHUgJSVcciIsCQlcCisJCShwcm9ncmVzc190aW1lICogMTAwKSAvIHRvdGFsX3RpbWUpOwlcCisJZmZsdXNoKHN0ZG91dCk7CQkJCQlcCit9CisKKy8qKgorICogY29tcHV0ZSBob3cgbWFueSByb3VuZHMgb2YgY2FsY3VsYXRpb24gd2Ugc2hvdWxkIGRvCisgKiB0byBnZXQgdGhlIGdpdmVuIGxvYWQgdGltZQorICoKKyAqIEBwYXJhbSBsb2FkIGFpbWVkIGxvYWQgdGltZSBpbiDCtXMKKyAqCisgKiBAcmV0dmFsIHJvdW5kcyBvZiBjYWxjdWxhdGlvbgorICoqLworCit1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3RpbWVzcGFjZShsb25nIGxvYWQsIHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwlpbnQgaTsKKwlsb25nIGxvbmcgbm93LCB0aGVuOworCXVuc2lnbmVkIGludCBlc3RpbWF0ZWQgPSBHQVVHRUNPVU5UOworCXVuc2lnbmVkIGludCByb3VuZHMgPSAwOworCXVuc2lnbmVkIGludCB0aW1lZCA9IDA7CisKKwlpZiAoY29uZmlnLT52ZXJib3NlKQorCQlwcmludGYoImNhbGlicmF0aW5nIGxvYWQgb2YgJWxpdXMsIHBsZWFzZSB3YWl0Li4uXG4iLCBsb2FkKTsKKworCS8qIGdldCB0aGUgaW5pdGlhbCBjYWxjdWxhdGlvbiB0aW1lIGZvciBhIHNwZWNpZmljIG51bWJlciBvZiByb3VuZHMgKi8KKwlub3cgPSBnZXRfdGltZSgpOworCVJPVU5EUyhlc3RpbWF0ZWQpOworCXRoZW4gPSBnZXRfdGltZSgpOworCisJdGltZWQgPSAodW5zaWduZWQgaW50KSh0aGVuIC0gbm93KTsKKworCS8qIGFwcHJveGltYXRpb24gb2YgdGhlIHdhbnRlZCBsb2FkIHRpbWUgYnkgY29tcGFyaW5nIHdpdGggdGhlCisJICogaW5pdGlhbCBjYWxjdWxhdGlvbiB0aW1lICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyb3VuZHMgPSAodW5zaWduZWQgaW50KShsb2FkICogZXN0aW1hdGVkIC8gdGltZWQpOworCQlkcHJpbnRmKCJjYWxpYnJhdGluZyB3aXRoICV1IHJvdW5kc1xuIiwgcm91bmRzKTsKKwkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJUk9VTkRTKHJvdW5kcyk7CisJCXRoZW4gPSBnZXRfdGltZSgpOworCisJCXRpbWVkID0gKHVuc2lnbmVkIGludCkodGhlbiAtIG5vdyk7CisJCWVzdGltYXRlZCA9IHJvdW5kczsKKwl9CisJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJcHJpbnRmKCJjYWxpYnJhdGlvbiBkb25lXG4iKTsKKworCXJldHVybiBlc3RpbWF0ZWQ7Cit9CisKKy8qKgorICogYmVuY2htYXJrCisgKiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBzbGVlcCBhbiBsb2FkIHRpbWUgd2l0aCB0aGUgcGVyZm9ybWFuY2UKKyAqIGdvdmVybm9yIGFuZCBjb21wYXJlcyB0aGUgdXNlZCB0aW1lIGZvciBzYW1lIGNhbGN1bGF0aW9ucyBkb25lCisgKiB3aXRoIHRoZSBjb25maWd1cmVkIHBvd2Vyc2F2ZSBnb3Zlcm5vcgorICoKKyAqIEBwYXJhbSBjb25maWcgY29uZmlnIHZhbHVlcyBmb3IgdGhlIGJlbmNobWFyaworICoKKyAqKi8KKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCBfcm91bmQsIGN5Y2xlOworCWxvbmcgbG9uZyBub3csIHRoZW47CisJbG9uZyBzbGVlcF90aW1lID0gMCwgbG9hZF90aW1lID0gMDsKKwlsb25nIHBlcmZvcm1hbmNlX3RpbWUgPSAwLCBwb3dlcnNhdmVfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IGNhbGN1bGF0aW9uczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUgPSAwLCBwcm9ncmVzc190aW1lID0gMDsKKworCXNsZWVwX3RpbWUgPSBjb25maWctPnNsZWVwOworCWxvYWRfdGltZSA9IGNvbmZpZy0+bG9hZDsKKworCS8qIEZvciB0aGUgcHJvZ3Jlc3MgYmFyICovCisJZm9yIChfcm91bmQgPSAxOyBfcm91bmQgPD0gY29uZmlnLT5yb3VuZHM7IF9yb3VuZCsrKQorCQl0b3RhbF90aW1lICs9IF9yb3VuZCAqIChjb25maWctPnNsZWVwICsgY29uZmlnLT5sb2FkKTsKKwl0b3RhbF90aW1lICo9IDI7IC8qIHBvd2Vyc2F2ZSBhbmQgcGVyZm9ybWFuY2UgY3ljbGVzICovCisKKwlmb3IgKF9yb3VuZCA9IDA7IF9yb3VuZCA8IGNvbmZpZy0+cm91bmRzOyBfcm91bmQrKykgeworCQlwZXJmb3JtYW5jZV90aW1lID0gMExMOworCQlwb3dlcnNhdmVfdGltZSA9IDBMTDsKKworCQlzaG93X3Byb2dyZXNzKHRvdGFsX3RpbWUsIHByb2dyZXNzX3RpbWUpOworCisJCS8qIHNldCB0aGUgY3B1ZnJlcSBnb3Zlcm5vciB0byAicGVyZm9ybWFuY2UiIHdoaWNoIGRpc2FibGVzCisJCSAqIFAtU3RhdGUgc3dpdGNoaW5nLiAqLworCQlpZiAoc2V0X2NwdWZyZXFfZ292ZXJub3IoInBlcmZvcm1hbmNlIiwgY29uZmlnLT5jcHUpICE9IDApCisJCQlyZXR1cm47CisKKwkJLyogY2FsaWJyYXRlIHRoZSBjYWxjdWxhdGlvbiB0aW1lLiB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uCisJCSAqIF9yb3VuZHMgc2hvdWxkIHByb2R1Y2UgYSBsb2FkIHdoaWNoIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQKKwkJICogbG9hZCB0aW1lICovCisJCWNhbGN1bGF0aW9ucyA9IGNhbGN1bGF0ZV90aW1lc3BhY2UobG9hZF90aW1lLCBjb25maWcpOworCisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoIl9yb3VuZCAlaTogZG9pbmcgJXUgY3ljbGVzIHdpdGggJXUgY2FsY3VsYXRpb25zIgorCQkJICAgICAgICIgZm9yICVsaXVzXG4iLCBfcm91bmQgKyAxLCBjb25maWctPmN5Y2xlcywKKwkJCSAgICAgICBjYWxjdWxhdGlvbnMsIGxvYWRfdGltZSk7CisKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiV1ICVsaSAlbGkgIiwKKwkJCV9yb3VuZCwgbG9hZF90aW1lLCBzbGVlcF90aW1lKTsKKworCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJhdmFyYWdlOiAlbGl1cywgcnBzOiVsaVxuIiwKKwkJCQlsb2FkX3RpbWUgLyBjYWxjdWxhdGlvbnMsCisJCQkJMTAwMDAwMCAqIGNhbGN1bGF0aW9ucyAvIGxvYWRfdGltZSk7CisKKwkJLyogZG8gc29tZSBzbGVlcC9sb2FkIGN5Y2xlcyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciAqLworCQlmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb25maWctPmN5Y2xlczsgY3ljbGUrKykgeworCQkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJCXVzbGVlcChzbGVlcF90aW1lKTsKKwkJCVJPVU5EUyhjYWxjdWxhdGlvbnMpOworCQkJdGhlbiA9IGdldF90aW1lKCk7CisJCQlwZXJmb3JtYW5jZV90aW1lICs9IHRoZW4gLSBub3cgLSBzbGVlcF90aW1lOworCQkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCQlwcmludGYoInBlcmZvcm1hbmNlIGN5Y2xlIHRvb2sgJWxpdXMsICIKKwkJCQkJInNsZWVwOiAlbGl1cywgIgorCQkJCQkibG9hZDogJWxpdXMsIHJvdW5kczogJXVcbiIsCisJCQkJCShsb25nKSh0aGVuIC0gbm93KSwgc2xlZXBfdGltZSwKKwkJCQkJbG9hZF90aW1lLCBjYWxjdWxhdGlvbnMpOworCQl9CisJCWZwcmludGYoY29uZmlnLT5vdXRwdXQsICIlbGkgIiwKKwkJCXBlcmZvcm1hbmNlX3RpbWUgLyBjb25maWctPmN5Y2xlcyk7CisKKwkJcHJvZ3Jlc3NfdGltZSArPSBzbGVlcF90aW1lICsgbG9hZF90aW1lOworCQlzaG93X3Byb2dyZXNzKHRvdGFsX3RpbWUsIHByb2dyZXNzX3RpbWUpOworCisJCS8qIHNldCB0aGUgcG93ZXJzYXZlIGdvdmVybm9yIHdoaWNoIGFjdGl2YXRlcyBQLVN0YXRlIHN3aXRjaGluZworCQkgKiBhZ2FpbiAqLworCQlpZiAoc2V0X2NwdWZyZXFfZ292ZXJub3IoY29uZmlnLT5nb3Zlcm5vciwgY29uZmlnLT5jcHUpICE9IDApCisJCQlyZXR1cm47CisKKwkJLyogYWdhaW4sIGRvIHNvbWUgc2xlZXAvbG9hZCBjeWNsZXMgd2l0aCB0aGUKKwkJICogcG93ZXJzYXZlIGdvdmVybm9yICovCisJCWZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvbmZpZy0+Y3ljbGVzOyBjeWNsZSsrKSB7CisJCQlub3cgPSBnZXRfdGltZSgpOworCQkJdXNsZWVwKHNsZWVwX3RpbWUpOworCQkJUk9VTkRTKGNhbGN1bGF0aW9ucyk7CisJCQl0aGVuID0gZ2V0X3RpbWUoKTsKKwkJCXBvd2Vyc2F2ZV90aW1lICs9IHRoZW4gLSBub3cgLSBzbGVlcF90aW1lOworCQkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCQlwcmludGYoInBvd2Vyc2F2ZSBjeWNsZSB0b29rICVsaXVzLCAiCisJCQkJCSJzbGVlcDogJWxpdXMsICIKKwkJCQkJImxvYWQ6ICVsaXVzLCByb3VuZHM6ICV1XG4iLAorCQkJCQkobG9uZykodGhlbiAtIG5vdyksIHNsZWVwX3RpbWUsCisJCQkJCWxvYWRfdGltZSwgY2FsY3VsYXRpb25zKTsKKwkJfQorCisJCXByb2dyZXNzX3RpbWUgKz0gc2xlZXBfdGltZSArIGxvYWRfdGltZTsKKworCQkvKiBjb21wYXJlIHRoZSBhdmFyYWdlIHNsZWVwL2xvYWQgY3ljbGVzICAqLworCQlmcHJpbnRmKGNvbmZpZy0+b3V0cHV0LCAiJWxpICIsCisJCQlwb3dlcnNhdmVfdGltZSAvIGNvbmZpZy0+Y3ljbGVzKTsKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiUuM2ZcbiIsCisJCQlwZXJmb3JtYW5jZV90aW1lICogMTAwLjAgLyBwb3dlcnNhdmVfdGltZSk7CisJCWZmbHVzaChjb25maWctPm91dHB1dCk7CisKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigicGVyZm9ybWFuY2UgaXMgYXQgJS4yZiUlXG4iLAorCQkJCXBlcmZvcm1hbmNlX3RpbWUgKiAxMDAuMCAvIHBvd2Vyc2F2ZV90aW1lKTsKKworCQlzbGVlcF90aW1lICs9IGNvbmZpZy0+c2xlZXBfc3RlcDsKKwkJbG9hZF90aW1lICs9IGNvbmZpZy0+bG9hZF9zdGVwOworCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkN2Y1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogbG9hZCBsb29wLCB0aGlzIHNjaG91bGQgdGFrZSBhYm91dCAxIHRvIDJtcyB0byBjb21wbGV0ZSAqLworI2RlZmluZSBST1VORFMoeCkge3Vuc2lnbmVkIGludCByY250OwkJCSAgICAgICBcCisJCWZvciAocmNudCA9IDA7IHJjbnQgPCB4KjEwMDA7IHJjbnQrKykgeyBcCisJCQkodm9pZCkoKChpbnQpKHBvdyhyY250LCByY250KSAqIFwKKwkJCQkgICAgICBzcXJ0KHJjbnQqNzIzMDk3MCkpIF4gNzIzMDcxNikgXiBcCisJCQkJICAgICAgKGludClhdGFuMihyY250LCByY250KSk7CSAgICAgICBcCisJCX0gfQkJCQkJCQlcCisKKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2ZjI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogaW5pdGlhbCBsb29wIGNvdW50IGZvciB0aGUgbG9hZCBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBHQVVHRUNPVU5UCTE1MDAKKworLyogZGVmYXVsdCBzY2hlZHVsaW5nIHBvbGljeSBTQ0hFRF9PVEhFUiAqLworI2RlZmluZSBTQ0hFRFVMRVIJU0NIRURfT1RIRVIKKworI2RlZmluZSBQUklPUklUWV9ERUZBVUxUIDAKKyNkZWZpbmUgUFJJT1JJVFlfSElHSAkgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChTQ0hFRFVMRVIpCisjZGVmaW5lIFBSSU9SSVRZX0xPVwkgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihTQ0hFRFVMRVIpCisKKy8qIGVuYWJsZSBmdXJ0aGVyIGRlYnVnIG1lc3NhZ2VzICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZHByaW50ZiBwcmludGYKKyNlbHNlCisjZGVmaW5lIGRwcmludGYoLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9wbG90LnNoIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9wbG90LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDAyMWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3Bsb3Quc2gKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIEF1dGhvci9Db3B5cmlnaHQoYyk6IDIwMDksIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorCisjIEhlbHBlciBzY3JpcHQgdG8gZWFzaWx5IGNyZWF0ZSBuaWNlIHBsb3RzIG9mIHlvdXIgY3B1ZnJlcS1iZW5jaCByZXN1bHRzCisKK2Rpcj1gbWt0ZW1wIC1kYAorb3V0cHV0X2ZpbGU9ImNwdWZyZXEtYmVuY2gucG5nIgorZ2xvYmFsX3RpdGxlPSJjcHVmcmVxLWJlbmNoIHBsb3QiCitwaWN0dXJlX3R5cGU9ImpwZWciCitmaWxlWzBdPSIiCisKK2Z1bmN0aW9uIHVzYWdlKCkKK3sKKyAgICBlY2hvICJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggW09QVElPTlNdIGxvZ2ZpbGUgW21lYXN1cmVfdGl0bGVdIFtsb2dmaWxlIFttZWFzdXJlX3RpdGxlXV0gLi4uXSIKKyAgICBlY2hvCisgICAgZWNobyAiT3B0aW9ucyIKKyAgICBlY2hvICIgICAtbyBvdXRwdXRfZmlsZSIKKyAgICBlY2hvICIgICAtdCBnbG9iYWxfdGl0bGUiCisgICAgZWNobyAiICAgLXAgcGljdHVyZV90eXBlIFtqcGVnfGdpZnxwbmd8cG9zdHNjcmlwdHwuLi5dIgorICAgIGV4aXQgMQorfQorCitpZiBbICQjIC1lcSAwIF07dGhlbgorCWVjaG8gIk5vIGJlbmNobWFyayByZXN1bHRzIGZpbGUgcHJvdmlkZWQiCisJZWNobworCXVzYWdlCitmaQorCit3aGlsZSBnZXRvcHRzIG86dDpwOiBuYW1lIDsgZG8KKyAgICBjYXNlICRuYW1lIGluCisJbykKKwkgICAgb3V0cHV0X2ZpbGU9IiRPUFRBUkciLiRwaWN0dXJlX3R5cGUKKwkgICAgOzsKKwl0KQorCSAgICBnbG9iYWxfdGl0bGU9IiRPUFRBUkciCisJICAgIDs7CisJcCkKKwkgICAgcGljdHVyZV90eXBlPSIkT1BUQVJHIgorCSAgICA7OworICAgICAgICA/KQorCSAgICB1c2FnZQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKCRPUFRJTkQgLTEpKQorCitwbG90cz0wCit3aGlsZSBbICIkMSIgXTtkbworICAgIGlmIFsgISAtZiAiJDEiIF07dGhlbgorCWVjaG8gIkZpbGUgJDEgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKyAgICBmaQorICAgIGZpbGVbJHBsb3RzXT0iJDEiCisgICAgdGl0bGVbJHBsb3RzXT0iJDIiCisgICAgIyBlY2hvICJGaWxlOiAke2ZpbGVbJHBsb3RzXX0gLSAke3RpdGxlW3Bsb3RzXX0iCisgICAgc2hpZnQ7c2hpZnQKKyAgICBwbG90cz0kKChwbG90cyArIDEpKQorZG9uZQorCitlY2hvICJzZXQgdGVybWluYWwgJHBpY3R1cmVfdHlwZSIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCBvdXRwdXQgXCIkb3V0cHV0X2ZpbGVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB0aXRsZSBcIiRnbG9iYWxfdGl0bGVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB4bGFiZWwgXCJzbGVlcC9sb2FkIHRpbWVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB5bGFiZWwgXCJQZXJmb3JtYW5jZSAoJSlcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKworZm9yKChwbG90PTA7cGxvdDwkcGxvdHM7cGxvdCsrKSk7ZG8KKworICAgICMgU2FuaXR5IGNoZWNrCisgICAgIyMjIyMjIEkgYW0gdG8gZHVtcCB0byBnZXQgdGhpcyByZWRpcmVjdGVkIHRvIHN0ZGVyci9zdGRvdXQgaW4gb25lIGF3ayBjYWxsLi4uICMjIyMjCisgICAgY2F0ICR7ZmlsZVskcGxvdF19IHxncmVwIC12ICJeIyIgfGF3ayAne2lmICgkMiAhPSAkMykgcHJpbnRmKCJFcnJvciBpbiBtZWFzdXJlICVkOkxvYWQgdGltZSAlcyBkb2VzIG5vdCBlcXVhbCBzbGVlcCB0aW1lICVzLCBwbG90IHdpbGwgbm90IGJlIGNvcnJlY3RcbiIsICQxLCAkMiwgJDMpOyBFUlI9MX0nCisgICAgIyMjIyMjIEkgYW0gdG8gZHVtcCB0byBnZXQgdGhpcyByZWRpcmVjdGVkIGluIG9uZSBhd2sgY2FsbC4uLiAjIyMjIworCisgICAgIyBQYXJzZSBvdXQgbG9hZCB0aW1lICh3aGljaCBtdXN0IGJlIGVxdWFsIHRvIHNsZWVwIHRpbWUgZm9yIGEgcGxvdCksIGRpdmlkZSBpdCBieSAxMDAwCisgICAgIyB0byBnZXQgbXMgYW5kIHBhcnNlIG91dCB0aGUgcGVyZm9ybWFuY2UgaW4gcGVyY2VudGFnZSBhbmQgd3JpdGUgaXQgdG8gYSB0ZW1wIGZpbGUgZm9yIHBsb3R0aW5nCisgICAgY2F0ICR7ZmlsZVskcGxvdF19IHxncmVwIC12ICJeIyIgfGF3ayAne3ByaW50ZiAiJWx1ICUuMWZcbiIsJDIvMTAwMCwgJDZ9JyA+JGRpci9kYXRhXyRwbG90CisKKyAgICBpZiBbICRwbG90IC1lcSAwIF07dGhlbgorCWVjaG8gLW4gInBsb3QgIiA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorICAgIGZpCisgICAgZWNobyAtbiAiXCIkZGlyL2RhdGFfJHBsb3RcIiB0aXRsZSBcIiR7dGl0bGVbJHBsb3RdfVwiIHdpdGggbGluZXMiID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisgICAgaWYgWyAkKCgkcGxvdCArIDEpKSAtbmUgJHBsb3RzIF07dGhlbgorCWVjaG8gLW4gIiwgIiA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorICAgIGZpCitkb25lCitlY2hvID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisKK2dudXBsb3QgJGRpci9wbG90X3NjcmlwdC5ncGwKK3JtIC1yICRkaXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjBkMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXV0aG9yL0NvcHlyaWdodChjKTogMjAwOSwgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisKKyMgT25kZW1hbmQgdXBfdGhyZXNob2xkIGFuZCBzYW1wbGluZyByYXRlIHRlc3Qgc2NyaXB0IGZvciBjcHVmcmVxLWJlbmNoCisjIG1pcmNvYmVuY2htYXJrLgorIyBNb2RpZnkgdGhlIGdlbmVyYWwgdmFyaWFibGVzIGF0IHRoZSB0b3Agb3IgZXh0ZW5kIG9yIGNvcHkgb3V0IHBhcnRzCisjIGlmIHlvdSB3YW50IHRvIHRlc3Qgb3RoZXIgdGhpbmdzCisjCisKKyMgRGVmYXVsdCB3aXRoIGxhdGVzdCBrZXJuZWxzIGlzIDk1LCBiZWZvcmUgbWljcm8gYWNjb3VudCBwYXRjaGVzCisjIGl0IHdhcyA4MCwgY21wLiB3aXRoIGdpdCBjb21taXQgODA4MDA5MTMxMDQ2YjYyYWM0MzRkYmM3OTYKK1VQX1RIUkVTSE9MRD0iNjAgODAgOTUiCisjIERlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCB0aGUgSFcgc2FtcGxpbmcgcmF0ZSBjb3VsZCBiZSByZXN0cmljdGVkCisjIGFuZCBjYW5ub3QgYmUgc2V0IHRoYXQgbG93Li4uCisjIEUuZy4gYmVmb3JlIGdpdCBjb21taXQgY2VmOTYxNWE4NTNlYmM0OTcyMDg0Zjcgb25lIGNvdWxkIG9ubHkgc2V0CisjIG1pbiBzYW1wbGluZyByYXRlIG9mIDgwMDAwIGlmIENPTkZJR19IWj0yNTAKK1NBTVBMSU5HX1JBVEU9IjIwMDAwIDgwMDAwIgorCitmdW5jdGlvbiBtZWFzdXJlKCkKK3sKKyAgICBsb2NhbCAtaSB1cF90aHJlc2hvbGRfc2V0CisgICAgbG9jYWwgLWkgc2FtcGxpbmdfcmF0ZV9zZXQKKworICAgIGZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCWZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJICAgICMgU2V0IHZhbHVlcyBpbiBzeXNmcworCSAgICBlY2hvICR1cF90aHJlc2hvbGQgPi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9vbmRlbWFuZC91cF90aHJlc2hvbGQKKwkgICAgZWNobyAkc2FtcGxpbmdfcmF0ZSA+L3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL29uZGVtYW5kL3NhbXBsaW5nX3JhdGUKKwkgICAgdXBfdGhyZXNob2xkX3NldD0kKGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvdXBfdGhyZXNob2xkKQorCSAgICBzYW1wbGluZ19yYXRlX3NldD0kKGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvc2FtcGxpbmdfcmF0ZSkKKworCSAgICAjIFZlcmlmeSBzZXQgdmFsdWVzIGluIHN5c2ZzCisJICAgIGlmIFsgJHt1cF90aHJlc2hvbGRfc2V0fSAtZXEgJHt1cF90aHJlc2hvbGR9IF07dGhlbgorCQllY2hvICJ1cF90aHJlc2hvbGQ6ICR1cF90aHJlc2hvbGQsIHNldCBpbiBzeXNmczogJHt1cF90aHJlc2hvbGRfc2V0fSIKKwkgICAgZWxzZQorCQllY2hvICJXQVJOSU5HOiBUcmllZCB0byBzZXQgdXBfdGhyZXNob2xkOiAkdXBfdGhyZXNob2xkLCBzZXQgaW4gc3lzZnM6ICR7dXBfdGhyZXNob2xkX3NldH0iCisJICAgIGZpCisJICAgIGlmIFsgJHtzYW1wbGluZ19yYXRlX3NldH0gLWVxICR7c2FtcGxpbmdfcmF0ZX0gXTt0aGVuCisJCWVjaG8gInNhbXBsaW5nX3JhdGU6ICRzYW1wbGluZ19yYXRlLCBzZXQgaW4gc3lzZnM6ICR7c2FtcGxpbmdfcmF0ZV9zZXR9IgorCSAgICBlbHNlCisJCWVjaG8gIldBUk5JTkc6IFRyaWVkIHRvIHNldCBzYW1wbGluZ19yYXRlOiAkc2FtcGxpbmdfcmF0ZSwgc2V0IGluIHN5c2ZzOiAke3NhbXBsaW5nX3JhdGVfc2V0fSIKKwkgICAgZmkKKworCSAgICAjIEJlbmNobWFyaworCSAgICBjcHVmcmVxLWJlbmNoIC1vIC92YXIvbG9nL2NwdWZyZXEtYmVuY2gvdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX0KKwlkb25lCisgICAgZG9uZQorfQorCitmdW5jdGlvbiBjcmVhdGVfcGxvdHMoKQoreworICAgIGxvY2FsIGNvbW1hbmQKKworICAgIGZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCWNvbW1hbmQ9ImNwdWZyZXEtYmVuY2hfcGxvdC5zaCAtbyBcInNhbXBsaW5nX3JhdGVfJHtTQU1QTElOR19SQVRFfV91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9XCIgLXQgXCJPbmRlbWFuZCBzYW1wbGluZ19yYXRlOiAke1NBTVBMSU5HX1JBVEV9IGNvbXBhcmlzb24gLSBVcF90aHJlc2hvbGQ6ICR1cF90aHJlc2hvbGQgJVwiIgorCWZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJICAgIGNvbW1hbmQ9IiR7Y29tbWFuZH0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfS8qIFwic2FtcGxpbmdfcmF0ZSA9ICRzYW1wbGluZ19yYXRlXCIiCisJZG9uZQorCWVjaG8gJGNvbW1hbmQKKwlldmFsICIkY29tbWFuZCIKKwllY2hvCisgICAgZG9uZQorCisgICAgZm9yIHNhbXBsaW5nX3JhdGUgaW4gJFNBTVBMSU5HX1JBVEU7ZG8KKwljb21tYW5kPSJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggLW8gXCJ1cF90aHJlc2hvbGRfJHtVUF9USFJFU0hPTER9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfVwiIC10IFwiT25kZW1hbmQgdXBfdGhyZXNob2xkOiAke1VQX1RIUkVTSE9MRH0gJSBjb21wYXJpc29uIC0gc2FtcGxpbmdfcmF0ZTogJHNhbXBsaW5nX3JhdGVcIiIKKwlmb3IgdXBfdGhyZXNob2xkIGluICRVUF9USFJFU0hPTEQ7ZG8KKwkgICAgY29tbWFuZD0iJHtjb21tYW5kfSAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoL3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9LyogXCJ1cF90aHJlc2hvbGQgPSAkdXBfdGhyZXNob2xkXCIiCisJZG9uZQorCWVjaG8gJGNvbW1hbmQKKwlldmFsICIkY29tbWFuZCIKKwllY2hvCisgICAgZG9uZQorCisgICAgY29tbWFuZD0iY3B1ZnJlcS1iZW5jaF9wbG90LnNoIC1vIFwidXBfdGhyZXNob2xkXyR7VVBfVEhSRVNIT0xEfV9zYW1wbGluZ19yYXRlXyR7U0FNUExJTkdfUkFURX1cIiAtdCBcIk9uZGVtYW5kIHVwX3RocmVzaG9sZDogJHtVUF9USFJFU0hPTER9IGFuZCBzYW1wbGluZ19yYXRlICR7U0FNUExJTkdfUkFURX0gY29tcGFyaXNvblwiIgorICAgIGZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJZm9yIHVwX3RocmVzaG9sZCBpbiAkVVBfVEhSRVNIT0xEO2RvCisJICAgIGNvbW1hbmQ9IiR7Y29tbWFuZH0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfS8qIFwidXBfdGhyZXNob2xkID0gJHVwX3RocmVzaG9sZCAtIHNhbXBsaW5nX3JhdGUgPSAkc2FtcGxpbmdfcmF0ZVwiIgorCWRvbmUKKyAgICBkb25lCisgICAgZWNobyAiJGNvbW1hbmQiCisgICAgZXZhbCAiJGNvbW1hbmQiCit9CisKK21lYXN1cmUKK2NyZWF0ZV9wbG90cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2V4YW1wbGUuY2ZnIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvZXhhbXBsZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxZjY0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2V4YW1wbGUuY2ZnCkBAIC0wLDAgKzEsMTEgQEAKK3NsZWVwID0gNTAwMDAKK2xvYWQgPSA1MDAwMAorY3B1ID0gMAorcHJpb3JpdHkgPSBMT1cKK291dHB1dCA9IC92YXIvbG9nL2NwdWZyZXEtYmVuY2gKK3NsZWVwX3N0ZXAgPSA1MDAwMAorbG9hZF9zdGVwID0gNTAwMDAKK2N5Y2xlcyA9IDIwCityb3VuZHMgPSA0MAordmVyYm9zZSA9IDAKK2dvdmVybm9yID0gb25kZW1hbmQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL21haW4uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkxMDMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvbWFpbi5jCkBAIC0wLDAgKzEsMjAyIEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJeyJvdXRwdXQiLAkxLAkwLAknbyd9LAorCXsic2xlZXAiLAkxLAkwLAkncyd9LAorCXsibG9hZCIsCTEsCTAsCSdsJ30sCisJeyJ2ZXJib3NlIiwJMCwJMCwJJ3YnfSwKKwl7ImNwdSIsCQkxLAkwLAknYyd9LAorCXsiZ292ZXJub3IiLAkxLAkwLAknZyd9LAorCXsicHJpbyIsCTEsCTAsCSdwJ30sCisJeyJmaWxlIiwJMSwJMCwJJ2YnfSwKKwl7ImN5Y2xlcyIsCTEsCTAsCSduJ30sCisJeyJyb3VuZHMiLAkxLAkwLAkncid9LAorCXsibG9hZC1zdGVwIiwJMSwJMCwJJ3gnfSwKKwl7InNsZWVwLXN0ZXAiLAkxLAkwLAkneSd9LAorCXsiaGVscCIsCTAsCTAsCSdoJ30sCisJezAsIDAsIDAsIDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIHVzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYWdlKCkKK3sKKwlwcmludGYoInVzYWdlOiAuL2JlbmNoXG4iKTsKKwlwcmludGYoIk9wdGlvbnM6XG4iKTsKKwlwcmludGYoIiAtbCwgLS1sb2FkPTxsb25nIGludD5cdFx0aW5pdGlhbCBsb2FkIHRpbWUgaW4gdXNcbiIpOworCXByaW50ZigiIC1zLCAtLXNsZWVwPTxsb25nIGludD5cdFx0aW5pdGlhbCBzbGVlcCB0aW1lIGluIHVzXG4iKTsKKwlwcmludGYoIiAteCwgLS1sb2FkLXN0ZXA9PGxvbmcgaW50Plx0dGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzXG4iKTsKKwlwcmludGYoIiAteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD5cdHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXNcbiIpOworCXByaW50ZigiIC1jLCAtLWNwdT08Y3B1ICM+XHRcdFx0Q1BVIE5yLiB0byB1c2UsIHN0YXJ0aW5nIGF0IDBcbiIpOworCXByaW50ZigiIC1wLCAtLXByaW89PHByaW9yaXR5Plx0XHRcdHNjaGVkdWxlciBwcmlvcml0eSwgSElHSCwgTE9XIG9yIERFRkFVTFRcbiIpOworCXByaW50ZigiIC1nLCAtLWdvdmVybm9yPTxnb3Zlcm5vcj5cdFx0Y3B1ZnJlcSBnb3Zlcm5vciB0byB0ZXN0XG4iKTsKKwlwcmludGYoIiAtbiwgLS1jeWNsZXM9PGludD5cdFx0XHRsb2FkL3NsZWVwIGN5Y2xlc1xuIik7CisJcHJpbnRmKCIgLXIsIC0tcm91bmRzPGludD5cdFx0XHRsb2FkL3NsZWVwIHJvdW5kc1xuIik7CisJcHJpbnRmKCIgLWYsIC0tZmlsZT08Y29uZmlnZmlsZT5cdFx0Y29uZmlnIGZpbGUgdG8gdXNlXG4iKTsKKwlwcmludGYoIiAtbywgLS1vdXRwdXQ9PGRpcj5cdFx0XHRvdXRwdXQgcGF0aC4gRmlsZW5hbWUgd2lsbCBiZSBPVVRQVVRQQVRIL2JlbmNobWFya19USU1FU1RBTVAubG9nXG4iKTsKKwlwcmludGYoIiAtdiwgLS12ZXJib3NlXHRcdFx0XHR2ZXJib3NlIG91dHB1dCBvbi9vZmZcbiIpOworCXByaW50ZigiIC1oLCAtLWhlbHBcdFx0XHRcdFByaW50IHRoaXMgaGVscCBzY3JlZW5cbiIpOworCWV4aXQoMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgbWFpbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjOworCWludCBvcHRpb25faW5kZXggPSAwOworCXN0cnVjdCBjb25maWcgKmNvbmZpZyA9IE5VTEw7CisKKwljb25maWcgPSBwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCk7CisKKwlpZiAoY29uZmlnID09IE5VTEwpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwl3aGlsZSAoMSkgeworCQljID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJoZzpvOnM6bDp2YzpwOmY6bjpyOng6eToiLAorCQkJCWxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCk7CisJCWlmIChjID09IC0xKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ28nOgorCQkJaWYgKGNvbmZpZy0+b3V0cHV0ICE9IE5VTEwpCisJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKworCQkJY29uZmlnLT5vdXRwdXQgPSBwcmVwYXJlX291dHB1dChvcHRhcmcpOworCisJCQlpZiAoY29uZmlnLT5vdXRwdXQgPT0gTlVMTCkKKwkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJCQlkcHJpbnRmKCJ1c2VyIG91dHB1dCBwYXRoIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPnNsZWVwKTsKKwkJCWRwcmludGYoInVzZXIgc2xlZXAgdGltZSAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5sb2FkKTsKKwkJCWRwcmludGYoInVzZXIgbG9hZCB0aW1lIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+Y3B1KTsKKwkJCWRwcmludGYoInVzZXIgY3B1IC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJc3RybmNweShjb25maWctPmdvdmVybm9yLCBvcHRhcmcsIDE0KTsKKwkJCWRwcmludGYoInVzZXIgZ292ZXJub3IgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlpZiAoc3RyaW5nX3RvX3ByaW8ob3B0YXJnKSAhPSBTQ0hFRF9FUlIpIHsKKwkJCQljb25maWctPnByaW8gPSBzdHJpbmdfdG9fcHJpbyhvcHRhcmcpOworCQkJCWRwcmludGYoInVzZXIgcHJpbyAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbmZpZyAhPSBOVUxMKSB7CisJCQkJCWlmIChjb25maWctPm91dHB1dCAhPSBOVUxMKQorCQkJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKwkJCQkJZnJlZShjb25maWcpOworCQkJCX0KKwkJCQl1c2FnZSgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+Y3ljbGVzKTsKKwkJCWRwcmludGYoInVzZXIgY3ljbGVzIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+cm91bmRzKTsKKwkJCWRwcmludGYoInVzZXIgcm91bmRzIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPmxvYWRfc3RlcCk7CisJCQlkcHJpbnRmKCJ1c2VyIGxvYWRfc3RlcCAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5zbGVlcF9zdGVwKTsKKwkJCWRwcmludGYoInVzZXIgc2xlZXBfc3RlcCAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChwcmVwYXJlX2NvbmZpZyhvcHRhcmcsIGNvbmZpZykpCisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCWNvbmZpZy0+dmVyYm9zZSA9IDE7CisJCQlkcHJpbnRmKCJ2ZXJib3NlIG91dHB1dCBlbmFibGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCWRlZmF1bHQ6CisJCQlpZiAoY29uZmlnICE9IE5VTEwpIHsKKwkJCQlpZiAoY29uZmlnLT5vdXRwdXQgIT0gTlVMTCkKKwkJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKwkJCQlmcmVlKGNvbmZpZyk7CisJCQl9CisJCQl1c2FnZSgpOworCQl9CisJfQorCisJaWYgKGNvbmZpZy0+dmVyYm9zZSkgeworCQlwcmludGYoInN0YXJ0aW5nIGJlbmNobWFyayB3aXRoIHBhcmFtZXRlcnM6XG4iKTsKKwkJcHJpbnRmKCJjb25maWc6XG5cdCIKKwkJICAgICAgICJzbGVlcD0lbGlcblx0IgorCQkgICAgICAgImxvYWQ9JWxpXG5cdCIKKwkJICAgICAgICJzbGVlcF9zdGVwPSVsaVxuXHQiCisJCSAgICAgICAibG9hZF9zdGVwPSVsaVxuXHQiCisJCSAgICAgICAiY3B1PSV1XG5cdCIKKwkJICAgICAgICJjeWNsZXM9JXVcblx0IgorCQkgICAgICAgInJvdW5kcz0ldVxuXHQiCisJCSAgICAgICAiZ292ZXJub3I9JXNcblxuIiwKKwkJICAgICAgIGNvbmZpZy0+c2xlZXAsCisJCSAgICAgICBjb25maWctPmxvYWQsCisJCSAgICAgICBjb25maWctPnNsZWVwX3N0ZXAsCisJCSAgICAgICBjb25maWctPmxvYWRfc3RlcCwKKwkJICAgICAgIGNvbmZpZy0+Y3B1LAorCQkgICAgICAgY29uZmlnLT5jeWNsZXMsCisJCSAgICAgICBjb25maWctPnJvdW5kcywKKwkJICAgICAgIGNvbmZpZy0+Z292ZXJub3IpOworCX0KKworCXByZXBhcmVfdXNlcihjb25maWcpOworCXByZXBhcmVfc3lzdGVtKGNvbmZpZyk7CisJc3RhcnRfYmVuY2htYXJrKGNvbmZpZyk7CisKKwlpZiAoY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KQorCQlmY2xvc2UoY29uZmlnLT5vdXRwdXQpOworCisJZnJlZShjb25maWcpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzYmJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworLyoqCisgKiBjb252ZXJ0cyBwcmlvcml0eSBzdHJpbmcgdG8gcHJpb3JpdHkKKyAqCisgKiBAcGFyYW0gc3RyIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBzY2hlZHVsZXIgcHJpb3JpdHkKKyAqCisgKiBAcmV0dmFsIHByaW9yaXR5CisgKiBAcmV0dmFsIFNDSEVEX0VSUiB3aGVuIHRoZSBwcmlvcml0eSBkb2Vzbid0IGV4aXQKKyAqKi8KKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoc3RybmNhc2VjbXAoImhpZ2giLCBzdHIsIHN0cmxlbihzdHIpKSA9PSAwKQorCQlyZXR1cm4gIFNDSEVEX0hJR0g7CisJZWxzZSBpZiAoc3RybmNhc2VjbXAoImRlZmF1bHQiLCBzdHIsIHN0cmxlbihzdHIpKSA9PSAwKQorCQlyZXR1cm4gU0NIRURfREVGQVVMVDsKKwllbHNlIGlmIChzdHJuY2FzZWNtcCgibG93Iiwgc3RyLCBzdHJsZW4oc3RyKSkgPT0gMCkKKwkJcmV0dXJuIFNDSEVEX0xPVzsKKwllbHNlCisJCXJldHVybiBTQ0hFRF9FUlI7Cit9CisKKy8qKgorICogY3JlYXRlIGFuZCBvcGVuIGxvZ2ZpbGUKKyAqCisgKiBAcGFyYW0gZGlyIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgbG9nZmlsZSBzaG91bGQgYmUgY3JlYXRlZAorICoKKyAqIEByZXR2YWwgbG9nZmlsZSBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIE5VTEwgd2hlbiB0aGUgZmlsZSBjYW4ndCBiZSBjcmVhdGVkCisgKiovCisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJRklMRSAqb3V0cHV0ID0gTlVMTDsKKwlpbnQgbGVuOworCWNoYXIgKmZpbGVuYW1lOworCXN0cnVjdCB1dHNuYW1lIHN5c2RhdGE7CisJRElSICpkaXI7CisKKwlkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCWlmIChkaXIgPT0gTlVMTCkgeworCQlpZiAobWtkaXIoZGlybmFtZSwgMDc1NSkpIHsKKwkJCXBlcnJvcigibWtkaXIiKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IENhbm5vdCBjcmVhdGUgZGlyICVzXG4iLAorCQkJCWRpcm5hbWUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlsZW4gPSBzdHJsZW4oZGlybmFtZSkgKyAzMDsKKwlmaWxlbmFtZSA9IG1hbGxvYyhzaXplb2YoY2hhcikgKiBsZW4pOworCisJaWYgKHVuYW1lKCZzeXNkYXRhKSA9PSAwKSB7CisJCWxlbiArPSBzdHJsZW4oc3lzZGF0YS5ub2RlbmFtZSkgKyBzdHJsZW4oc3lzZGF0YS5yZWxlYXNlKTsKKwkJZmlsZW5hbWUgPSByZWFsbG9jKGZpbGVuYW1lLCBzaXplb2YoY2hhcikgKiBsZW4pOworCisJCWlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisJCQlwZXJyb3IoInJlYWxsb2MiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc25wcmludGYoZmlsZW5hbWUsIGxlbiAtIDEsICIlcy9iZW5jaG1hcmtfJXNfJXNfJWxpLmxvZyIsCisJCQlkaXJuYW1lLCBzeXNkYXRhLm5vZGVuYW1lLCBzeXNkYXRhLnJlbGVhc2UsIHRpbWUoTlVMTCkpOworCX0gZWxzZSB7CisJCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4gLSAxLCAiJXMvYmVuY2htYXJrXyVsaS5sb2ciLAorCQkJZGlybmFtZSwgdGltZShOVUxMKSk7CisJfQorCisJZHByaW50ZigibG9naWxlbmFtZTogJXNcbiIsIGZpbGVuYW1lKTsKKworCW91dHB1dCA9IGZvcGVuKGZpbGVuYW1lLCAidysiKTsKKwlpZiAob3V0cHV0ID09IE5VTEwpIHsKKwkJcGVycm9yKCJmb3BlbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gb3BlbiBsb2dmaWxlXG4iKTsKKwl9CisKKwlmcHJpbnRmKHN0ZG91dCwgIkxvZ2ZpbGU6ICVzXG4iLCBmaWxlbmFtZSk7CisKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcHJpbnRmKG91dHB1dCwgIiNyb3VuZCBsb2FkIHNsZWVwIHBlcmZvcm1hbmNlIHBvd2Vyc2F2ZSBwZXJjZW50YWdlXG4iKTsKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKioKKyAqIHJldHVybnMgdGhlIGRlZmF1bHQgY29uZmlnCisgKgorICogQHJldHZhbCBkZWZhdWx0IGNvbmZpZyBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIE5VTEwgd2hlbiB0aGUgb3V0cHV0IGZpbGUgY2FuJ3QgYmUgY3JlYXRlZAorICoqLworCitzdHJ1Y3QgY29uZmlnICpwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCkKK3sKKwlzdHJ1Y3QgY29uZmlnICpjb25maWcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWcpKTsKKworCWRwcmludGYoImxvYWRpbmcgZGVmYXVsdHNcbiIpOworCisJY29uZmlnLT5zbGVlcCA9IDUwMDAwMDsKKwljb25maWctPmxvYWQgPSA1MDAwMDA7CisJY29uZmlnLT5zbGVlcF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+bG9hZF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+Y3ljbGVzID0gNTsKKwljb25maWctPnJvdW5kcyA9IDUwOworCWNvbmZpZy0+Y3B1ID0gMDsKKwljb25maWctPnByaW8gPSBTQ0hFRF9ISUdIOworCWNvbmZpZy0+dmVyYm9zZSA9IDA7CisJc3RybmNweShjb25maWctPmdvdmVybm9yLCAib25kZW1hbmQiLCA4KTsKKworCWNvbmZpZy0+b3V0cHV0ID0gc3Rkb3V0OworCisjaWZkZWYgREVGQVVMVF9DT05GSUdfRklMRQorCWlmIChwcmVwYXJlX2NvbmZpZyhERUZBVUxUX0NPTkZJR19GSUxFLCBjb25maWcpKQorCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCXJldHVybiBjb25maWc7Cit9CisKKy8qKgorICogcGFyc2VzIGNvbmZpZyBmaWxlIGFuZCByZXR1cm5zIHRoZSBjb25maWcgdG8gdGhlIGNhbGxlcgorICoKKyAqIEBwYXJhbSBwYXRoIGNvbmZpZyBmaWxlIG5hbWUKKyAqCisgKiBAcmV0dmFsIDEgb24gZXJyb3IKKyAqIEByZXR2YWwgMCBvbiBzdWNjZXNzCisgKiovCisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJc2l6ZV90IGxlbiA9IDA7CisJY2hhciAqb3B0LCAqdmFsLCAqbGluZSA9IE5VTEw7CisJRklMRSAqY29uZmlnZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7CisKKwlpZiAoY29uZmlnID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogY29uZmlnIGlzIE5VTExcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoY29uZmlnZmlsZSA9PSBOVUxMKSB7CisJCXBlcnJvcigiZm9wZW4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5hYmxlIHRvIHJlYWQgY29uZmlnZmlsZVxuIik7CisJCWZyZWUoY29uZmlnKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZsZW4sIGNvbmZpZ2ZpbGUpICE9IC0xKSB7CisJCWlmIChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWNvbnRpbnVlOworCisJCXNzY2FuZihsaW5lLCAiJWFzID0gJWFzIiwgJm9wdCwgJnZhbCk7CisKKwkJZHByaW50ZigicGFyc2luZzogJXMgLT4gJXNcbiIsIG9wdCwgdmFsKTsKKworCQlpZiAoc3RybmNtcCgic2xlZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiVsaSIsICZjb25maWctPnNsZWVwKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIlbGkiLCAmY29uZmlnLT5sb2FkKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkX3N0ZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiVsaSIsICZjb25maWctPmxvYWRfc3RlcCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgic2xlZXBfc3RlcCIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXBfc3RlcCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgiY3ljbGVzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPmN5Y2xlcyk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgicm91bmRzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPnJvdW5kcyk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgidmVyYm9zZSIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT52ZXJib3NlKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJvdXRwdXQiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJY29uZmlnLT5vdXRwdXQgPSBwcmVwYXJlX291dHB1dCh2YWwpOyAKKworCQllbHNlIGlmIChzdHJuY21wKCJjcHUiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiV1IiwgJmNvbmZpZy0+Y3B1KTsKKworCQllbHNlIGlmIChzdHJuY21wKCJnb3Zlcm5vciIsIG9wdCwgMTQpID09IDApCisJCQlzdHJuY3B5KGNvbmZpZy0+Z292ZXJub3IsIHZhbCwgMTQpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInByaW9yaXR5Iiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgeworCQkJaWYgKHN0cmluZ190b19wcmlvKHZhbCkgIT0gU0NIRURfRVJSKQorCQkJCWNvbmZpZy0+cHJpbyA9IHN0cmluZ190b19wcmlvKHZhbCk7CisJCX0KKwl9CisKKwlmcmVlKGxpbmUpOworCWZyZWUob3B0KTsKKwlmcmVlKHZhbCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGM2MzIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogc3RydWN0IHRoYXQgaG9sZHMgdGhlIHJlcXVpcmVkIGNvbmZpZyBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgY29uZmlnCit7CisJbG9uZyBzbGVlcDsJCS8qIHNsZWVwIHRpbWUgaW4gwrVzICovCisJbG9uZyBsb2FkOwkJLyogbG9hZCB0aW1lIGluIMK1cyAqLworCWxvbmcgc2xlZXBfc3RlcDsJLyogdGltZSB2YWx1ZSB3aGljaCBjaGFuZ2VzIHRoZQorCQkJCSAqIHNsZWVwIHRpbWUgYWZ0ZXIgZXZlcnkgcm91bmQgaW4gwrVzICovCisJbG9uZyBsb2FkX3N0ZXA7CQkvKiB0aW1lIHZhbHVlIHdoaWNoIGNoYW5nZXMgdGhlCisJCQkJICogbG9hZCB0aW1lIGFmdGVyIGV2ZXJ5IHJvdW5kIGluIMK1cyAqLworCXVuc2lnbmVkIGludCBjeWNsZXM7CS8qIGNhbGN1bGF0aW9uIGN5Y2xlcyB3aXRoIHRoZSBzYW1lIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCByb3VuZHM7CS8qIGNhbGN1bGF0aW9uIHJvdW5kcyB3aXRoIGl0ZXJhdGVkIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCBjcHU7CS8qIGNwdSBmb3Igd2hpY2ggdGhlIGFmZmluaXR5IGlzIHNldCAqLworCWNoYXIgZ292ZXJub3JbMTVdOwkvKiBjcHVmcmVxIGdvdmVybm9yICovCisJZW51bSBzY2hlZF9wcmlvCQkvKiBwb3NzaWJsZSBzY2hlZHVsZXIgcHJpb3JpdGllcyAqLworCXsKKwkJU0NIRURfRVJSID0gLTEsCisJCVNDSEVEX0hJR0gsCisJCVNDSEVEX0RFRkFVTFQsCisJCVNDSEVEX0xPVworCX0gcHJpbzsKKworCXVuc2lnbmVkIGludCB2ZXJib3NlOwkvKiB2ZXJib3NlIG91dHB1dCAqLworCUZJTEUgKm91dHB1dDsJCS8qIGxvZ2ZpbGUgKi8KKwljaGFyICpvdXRwdXRfZmlsZW5hbWU7CS8qIGxvZ2ZpbGUgbmFtZSwgbXVzdCBiZSBmcmVlZCBhdCB0aGUgZW5kCisJCQkJICAgaWYgb3V0cHV0ICE9IE5VTEwgYW5kIG91dHB1dCAhPSBzdGRvdXQqLworfTsKKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cik7CisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcik7CisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOworc3RydWN0IGNvbmZpZyAqcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpOworCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYwpAQCAtMCwwICsxLDE5MSBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworLyoqCisgKiByZXR1cm5zIHRpbWUgc2luY2UgZXBvY2ggaW4gwrVzCisgKgorICogQHJldHZhbCB0aW1lCisgKiovCisKK2xvbmcgbG9uZyBpbnQgZ2V0X3RpbWUoKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworCXJldHVybiAobG9uZyBsb25nIGludCkobm93LnR2X3NlYyAqIDEwMDAwMDBMTCArIG5vdy50dl91c2VjKTsKK30KKworLyoqCisgKiBzZXRzIHRoZSBjcHVmcmVxIGdvdmVybm9yCisgKgorICogQHBhcmFtIGdvdmVybm9yIGNwdWZyZXEgZ292ZXJub3IgbmFtZQorICogQHBhcmFtIGNwdSBjcHUgZm9yIHdoaWNoIHRoZSBnb3Zlcm5vciBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgd2hlbiBmYWlsZWQKKyAqKi8KKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCisJZHByaW50Zigic2V0ICVzIGFzIGNwdWZyZXEgZ292ZXJub3JcbiIsIGdvdmVybm9yKTsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSAhPSAwKSB7CisJCXBlcnJvcigiY3B1ZnJlcV9jcHVfZXhpc3RzIik7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNwdSAldSBkb2VzIG5vdCBleGlzdFxuIiwgY3B1KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcikgIT0gMCkgeworCQlwZXJyb3IoImNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vciIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gc2V0ICVzIGdvdmVybm9yXG4iLCBnb3Zlcm5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXRzIGNwdSBhZmZpbml0eSBmb3IgdGhlIHByb2Nlc3MKKyAqCisgKiBAcGFyYW0gY3B1IGNwdSMgdG8gd2hpY2ggdGhlIGFmZmluaXR5IHNob3VsZCBiZSBzZXQKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIGFmZmluaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X2NwdV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNwdV9zZXRfdCBjcHVzZXQ7CisKKwlDUFVfWkVSTygmY3B1c2V0KTsKKwlDUFVfU0VUKGNwdSwgJmNwdXNldCk7CisKKwlkcHJpbnRmKCJzZXQgYWZmaW5pdHkgdG8gY3B1ICMldVxuIiwgY3B1KTsKKworCWlmIChzY2hlZF9zZXRhZmZpbml0eShnZXRwaWQoKSwgc2l6ZW9mKGNwdV9zZXRfdCksICZjcHVzZXQpIDwgMCkgeworCQlwZXJyb3IoInNjaGVkX3NldGFmZmluaXR5Iik7CisJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogdW5hYmxlIHRvIHNldCBjcHUgYWZmaW5pdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2V0cyB0aGUgcHJvY2VzcyBwcmlvcml0eSBwYXJhbWV0ZXIKKyAqCisgKiBAcGFyYW0gcHJpb3JpdHkgcHJpb3JpdHkgdmFsdWUKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIHByaW9yaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X3Byb2Nlc3NfcHJpb3JpdHkoaW50IHByaW9yaXR5KQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworCWRwcmludGYoInNldCBzY2hlZHVsZXIgcHJpb3JpdHkgdG8gJWlcbiIsIHByaW9yaXR5KTsKKworCXBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisKKwlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyKDAsIFNDSEVEVUxFUiwgJnBhcmFtKSA8IDApIHsKKwkJcGVycm9yKCJzY2hlZF9zZXRzY2hlZHVsZXIiKTsKKwkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiB1bmFibGUgdG8gc2V0IHNjaGVkdWxlciBwcmlvcml0eVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBub3RpZmllcyB0aGUgdXNlciB0aGF0IHRoZSBiZW5jaG1hcmsgbWF5IHJ1biBzb21lIHRpbWUKKyAqCisgKiBAcGFyYW0gY29uZmlnIGJlbmNobWFyayBjb25maWcgdmFsdWVzCisgKgorICoqLworCit2b2lkIHByZXBhcmVfdXNlcihjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvYWRfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IHJvdW5kOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgY29uZmlnLT5yb3VuZHM7IHJvdW5kKyspIHsKKwkJc2xlZXBfdGltZSArPSAgMiAqIGNvbmZpZy0+Y3ljbGVzICoKKwkJCShjb25maWctPnNsZWVwICsgY29uZmlnLT5zbGVlcF9zdGVwICogcm91bmQpOworCQlsb2FkX3RpbWUgKz0gMiAqIGNvbmZpZy0+Y3ljbGVzICoKKwkJCShjb25maWctPmxvYWQgKyBjb25maWctPmxvYWRfc3RlcCAqIHJvdW5kKSArCisJCQkoY29uZmlnLT5sb2FkICsgY29uZmlnLT5sb2FkX3N0ZXAgKiByb3VuZCAqIDQpOworCX0KKworCWlmIChjb25maWctPnZlcmJvc2UgfHwgY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KQorCQlwcmludGYoImFwcHJveC4gdGVzdCBkdXJhdGlvbjogJWltXG4iLAorCQkgICAgICAgKGludCkoKHNsZWVwX3RpbWUgKyBsb2FkX3RpbWUpIC8gNjAwMDAwMDApKTsKK30KKworLyoqCisgKiBzZXRzIHVwIHRoZSBjcHUgYWZmaW5pdHkgYW5kIHNjaGVkdWxlciBwcmlvcml0eQorICoKKyAqIEBwYXJhbSBjb25maWcgYmVuY2htYXJrIGNvbmZpZyB2YWx1ZXMKKyAqCisgKiovCisKK3ZvaWQgcHJlcGFyZV9zeXN0ZW0oY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCWlmIChjb25maWctPnZlcmJvc2UpCisJCXByaW50Zigic2V0IGNwdSBhZmZpbml0eSB0byBjcHUgIyV1XG4iLCBjb25maWctPmNwdSk7CisKKwlzZXRfY3B1X2FmZmluaXR5KGNvbmZpZy0+Y3B1KTsKKworCXN3aXRjaCAoY29uZmlnLT5wcmlvKSB7CisJY2FzZSBTQ0hFRF9ISUdIOgorCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJoaWdoIHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0hJR0gpOworCQlicmVhazsKKwljYXNlIFNDSEVEX0xPVzoKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigibG93IHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0xPVyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoImRlZmF1bHQgcHJpb3JpdHkgY29uZGl0aW9uIHJlcXVlc3RlZFxuIik7CisKKwkJc2V0X3Byb2Nlc3NfcHJpb3JpdHkoUFJJT1JJVFlfREVGQVVMVCk7CisJfQorfQorCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGM4NTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI5IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJwYXJzZS5oIgorCitsb25nIGxvbmcgZ2V0X3RpbWUoKTsKKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KTsKK2ludCBzZXRfY3B1X2FmZmluaXR5KHVuc2lnbmVkIGludCBjcHUpOworaW50IHNldF9wcm9jZXNzX3ByaW9yaXR5KGludCBwcmlvcml0eSk7CisKK3ZvaWQgcHJlcGFyZV91c2VyKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7Cit2b2lkIHByZXBhcmVfc3lzdGVtKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhjYzFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACitkZWZhdWx0OiBhbGwKKworY2VudHJpbm8tZGVjb2RlOiBjZW50cmluby1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjZW50cmluby1kZWNvZGUgY2VudHJpbm8tZGVjb2RlLmMKKworZHVtcF9wc2I6IGR1bXBfcHNiLmMKKwkkKENDKSAkKENGTEFHUykgLW8gZHVtcF9wc2IgZHVtcF9wc2IuYworCitpbnRlbF9nc2ljOiBpbnRlbF9nc2ljLmMKKwkkKENDKSAkKENGTEFHUykgLW8gaW50ZWxfZ3NpYyAtbGxybWkgaW50ZWxfZ3NpYy5jCisKK3Bvd2Vybm93LWs4LWRlY29kZTogcG93ZXJub3ctazgtZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gcG93ZXJub3ctazgtZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZS5jCisKK2FsbDogY2VudHJpbm8tZGVjb2RlIGR1bXBfcHNiIGludGVsX2dzaWMgcG93ZXJub3ctazgtZGVjb2RlCisKK2NsZWFuOgorCXJtIC1yZiBjZW50cmluby1kZWNvZGUgZHVtcF9wc2IgaW50ZWxfZ3NpYyBwb3dlcm5vdy1rOC1kZWNvZGUKKworLlBIT05ZOiBhbGwgZGVmYXVsdCBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9jZW50cmluby1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMjRjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgKEMpIDIwMDMgLSAyMDA0ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBKZXJlbXkgRml0emhhcmRpbmdlLgorICoKKyAqIFVTQUdFOiBzaW1wbHkgcnVuIGl0IHRvIGRlY29kZSB0aGUgY3VycmVudCBzZXR0aW5ncyBvbiBDUFUgMCwKKyAqCSAgb3IgcGFzcyB0aGUgQ1BVIG51bWJlciBhcyBhcmd1bWVudCwgb3IgcGFzcyB0aGUgTVNSIGNvbnRlbnQKKyAqCSAgYXMgYXJndW1lbnQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVCTMyCisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJMHgxOTgKKworc3RhdGljIGludCByZG1zcih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbXNyLAorCQkgdW5zaWduZWQgaW50ICpsbywgdW5zaWduZWQgaW50ICpoaSkKK3sKKwlpbnQgZmQ7CisJY2hhciBmaWxlWzIwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXR2YWwgPSAtMTsKKworCSpsbyA9ICpoaSA9IDA7CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBlcnIxOworCisJc3ByaW50ZihmaWxlLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkKKwkJZ290byBlcnIxOworCisJaWYgKGxzZWVrKGZkLCBtc3IsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnIyOworCisJaWYgKHJlYWQoZmQsICZ2YWwsIDgpICE9IDgpCisJCWdvdG8gZXJyMjsKKworCSpsbyA9ICh1aW50MzJfdCApKHZhbCAmIDB4ZmZmZmZmZmZ1bGwpOworCSpoaSA9ICh1aW50MzJfdCApKHZhbD4+MzIgJiAweGZmZmZmZmZmdWxsKTsKKworCXJldHZhbCA9IDA7CitlcnIyOgorCWNsb3NlKGZkKTsKK2VycjE6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlICh1bnNpZ25lZCBpbnQgbXNyKQoreworCXVuc2lnbmVkIGludCBtdWx0aXBsaWVyOworCXVuc2lnbmVkIGludCBtdjsKKworCW11bHRpcGxpZXIgPSAoKG1zciA+PiA4KSAmIDB4RkYpOworCisJbXYgPSAoKChtc3IgJiAweEZGKSAqIDE2KSArIDcwMCk7CisKKwlwcmludGYoIjB4JXggbWVhbnMgbXVsdGlwbGllciAlZCBAICVkIG1WXG4iLCBtc3IsIG11bHRpcGxpZXIsIG12KTsKK30KKworc3RhdGljIGludCBkZWNvZGVfbGl2ZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBsbywgaGk7CisJaW50IGVycjsKKworCWVyciA9IHJkbXNyKGNwdSwgTVNSX0lBMzJfUEVSRl9TVEFUVVMsICZsbywgJmhpKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRmKCJjYW4ndCBnZXQgTVNSX0lBMzJfUEVSRl9TVEFUVVMgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwkJcHJpbnRmKCJQb3NzaWJsZSB0cm91YmxlOiB5b3UgZG9uJ3QgcnVuIGFuIEVuaGFuY2VkIFNwZWVkU3RlcCBjYXBhYmxlIGNwdVxuIik7CisJCXByaW50Zigib3IgeW91IGFyZSBub3Qgcm9vdCwgb3IgdGhlIG1zciBkcml2ZXIgaXMgbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlkZWNvZGUobG8pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGNwdSwgbW9kZSA9IDA7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZSB7CisJCWNwdSA9IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCk7CisJCWlmIChjcHUgPj0gTUNQVSkKKwkJCW1vZGUgPSAxOworCX0KKworCWlmIChtb2RlKQorCQlkZWNvZGUoY3B1KTsKKwllbHNlCisJCWRlY29kZV9saXZlKGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZhNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9kdW1wX3BzYi5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogZHVtcF9wc2IuIChjKSAyMDA0LCBEYXZlIEpvbmVzLCBSZWQgSGF0IEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2RlZmluZSBMRU4gKDB4MTAwMDAwIC0gMHhjMDAwMCkKKyNkZWZpbmUgT0ZGU0VUICgweGMwMDAwKQorCisjaWZuZGVmIF9fcGFja2VkCisjZGVmaW5lIF9fcGFja2VkIF9fYXR0cmlidXRlKChwYWNrZWQpKQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHJlbGV2YW50OworCitzdGF0aWMgY29uc3QgaW50IGZpZF90b19tdWx0WzMyXSA9IHsKKwkxMTAsIDExNSwgMTIwLCAxMjUsIDUwLCA1NSwgNjAsIDY1LAorCTcwLCA3NSwgODAsIDg1LCA5MCwgOTUsIDEwMCwgMTA1LAorCTMwLCAxOTAsIDQwLCAyMDAsIDEzMCwgMTM1LCAxNDAsIDIxMCwKKwkxNTAsIDIyNSwgMTYwLCAxNjUsIDE3MCwgMTgwLCAtMSwgLTEsCit9OworCitzdGF0aWMgY29uc3QgaW50IHZpZF90b192b2x0YWdlWzMyXSA9IHsKKwkyMDAwLCAxOTUwLCAxOTAwLCAxODUwLCAxODAwLCAxNzUwLCAxNzAwLCAxNjUwLAorCTE2MDAsIDE1NTAsIDE1MDAsIDE0NTAsIDE0MDAsIDEzNTAsIDEzMDAsIDAsCisJMTI3NSwgMTI1MCwgMTIyNSwgMTIwMCwgMTE3NSwgMTE1MCwgMTEyNSwgMTEwMCwKKwkxMDc1LCAxMDUwLCAxMDI0LCAxMDAwLCA5NzUsIDk1MCwgOTI1LCAwLAorfTsKKworc3RydWN0IHBzYl9oZWFkZXIgeworCWNoYXIgc2lnbmF0dXJlWzEwXTsKKwl1X2NoYXIgdmVyc2lvbjsKKwl1X2NoYXIgZmxhZ3M7CisJdV9zaG9ydCBzZXR0bGluZ3RpbWU7CisJdV9jaGFyIHJlczE7CisJdV9jaGFyIG51bXBzdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwc3RfaGVhZGVyIHsKKwl1X2ludDMyX3QgY3B1aWQ7CisJdV9jaGFyIGZzYjsKKwl1X2NoYXIgbWF4ZmlkOworCXVfY2hhciBzdGFydHZpZDsKKwl1X2NoYXIgbnVtcHN0YXRlczsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyB1X2ludCBmc2I7CitzdGF0aWMgdV9pbnQgc2d0YzsKKworc3RhdGljIGludAorZGVjb2RlX3BzdChjaGFyICpwLCBpbnQgbnBzdGF0ZXMpCit7CisJaW50IGk7CisJaW50IGZyZXEsIGZpZCwgdmlkOworCisJZm9yIChpID0gMDsgaSA8IG5wc3RhdGVzOyArK2kpIHsKKwkJZmlkID0gKnArKzsKKwkJdmlkID0gKnArKzsKKwkJZnJlcSA9IDEwMCAqIGZpZF90b19tdWx0W2ZpZF0gKiBmc2I7CisKKwkJcHJpbnRmKCIgICAlMmQgJThka0h6ICBGSUQgJTAyeCAoJTJkLiUwMWQpICBWSUQgJTAyeCAoJTRkbVYpXG4iLAorCQkgICAgICAgaSwKKwkJICAgICAgIGZyZXEsCisJCSAgICAgICBmaWQsIGZpZF90b19tdWx0W2ZpZF0vMTAsIGZpZF90b19tdWx0W2ZpZF0lMTAsCisJCSAgICAgICB2aWQsIHZpZF90b192b2x0YWdlW3ZpZF0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMKK3ZvaWQgZGVjb2RlX3BzYihjaGFyICpwLCBpbnQgbnVtcHN0KQoreworCWludCBpOworCXN0cnVjdCBwc2JfaGVhZGVyICpwc2I7CisJc3RydWN0IHBzdF9oZWFkZXIgKnBzdDsKKworCXBzYiA9IChzdHJ1Y3QgcHNiX2hlYWRlciopIHA7CisKKwlpZiAocHNiLT52ZXJzaW9uICE9IDB4MTIpCisJCXJldHVybjsKKworCXByaW50ZigiUFNCIHZlcnNpb246ICVoaHggZmxhZ3M6ICVoaHggc2V0dGxpbmcgdGltZSAlaGh1dXMgcmVzMSAlaGh4IG51bSBwc3QgJWhodVxuIiwKKwkJCXBzYi0+dmVyc2lvbiwKKwkJCXBzYi0+ZmxhZ3MsCisJCQlwc2ItPnNldHRsaW5ndGltZSwKKwkJCXBzYi0+cmVzMSwKKwkJCXBzYi0+bnVtcHN0KTsKKwlzZ3RjID0gcHNiLT5zZXR0bGluZ3RpbWUgKiAxMDA7CisKKwlpZiAoc2d0YyA8IDEwMDAwKQorCQlzZ3RjID0gMTAwMDA7CisKKwlwID0gKChjaGFyICopIHBzYikgKyBzaXplb2Yoc3RydWN0IHBzYl9oZWFkZXIpOworCisJaWYgKG51bXBzdCA8IDApCisJCW51bXBzdCA9IHBzYi0+bnVtcHN0OworCWVsc2UKKwkJcHJpbnRmKCJPdmVycmlkaW5nIG51bWJlciBvZiBwc3QgOiVkXG4iLCBudW1wc3QpOworCisJZm9yIChpID0gMDsgaSA8IG51bXBzdDsgaSsrKSB7CisJCXBzdCA9IChzdHJ1Y3QgcHN0X2hlYWRlciopIHA7CisKKwkJaWYgKHJlbGV2YW50ICE9IDApIHsKKwkJCWlmIChyZWxldmFudCE9IHBzdC0+Y3B1aWQpCisJCQkJZ290byBuZXh0X29uZTsKKwkJfQorCisJCXByaW50ZigiICBQU1QgJWQgIGNwdWlkICUuM3ggZnNiICVoaHUgbWZpZCAlaGh4IHN2aWQgJWhoeCBudW1iZXJzdGF0ZXMgJWhodVxuIiwKKwkJCQlpKzEsCisJCQkJcHN0LT5jcHVpZCwKKwkJCQlwc3QtPmZzYiwKKwkJCQlwc3QtPm1heGZpZCwKKwkJCQlwc3QtPnN0YXJ0dmlkLAorCQkJCXBzdC0+bnVtcHN0YXRlcyk7CisKKwkJZnNiID0gcHN0LT5mc2I7CisJCWRlY29kZV9wc3QocCArIHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlciksIHBzdC0+bnVtcHN0YXRlcyk7CisKK25leHRfb25lOgorCQlwICs9IHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlcikgKyAyKnBzdC0+bnVtcHN0YXRlczsKKwl9CisKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJey5uYW1lID0gIm51bXBzdCIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkuZmxhZz1OVUxMLCAudmFsPSduJ30sCit9OworCit2b2lkIHByaW50X2hlbHAodm9pZCkKK3sKKwlwcmludGYgKCJVc2FnZTogZHVtcF9wc2IgW29wdGlvbnNdXG4iKTsKKwlwcmludGYgKCJPcHRpb25zOlxuIik7CisJcHJpbnRmICgiICAtbiwgLS1udW1wc3QgICAgIFNldCBudW1iZXIgb2YgUFNUIHRhYmxlcyB0byBzY2FuXG4iKTsKKwlwcmludGYgKCIgIC1yLCAtLXJlbGV2YW50ICAgT25seSBkaXNwbGF5IFBTVHMgcmVsZXZhbnQgdG8gY3B1aWQgTlxuIik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBmZDsKKwlpbnQgbnVtcHN0PS0xOworCWludCByZXQ9MCwgY29udD0xOworCWNoYXIgKm1lbSA9IE5VTEw7CisJY2hhciAqcDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhyOm46IiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpeworCQljYXNlICc/JzoKKwkJY2FzZSAnaCc6CisJCQlwcmludF9oZWxwKCk7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXJlbGV2YW50ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbnVtcHN0ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlKGNvbnQpOworCisJZmQgPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50ZiAoIkNvdWxkbid0IG9wZW4gL2Rldi9tZW0uIEFyZSB5b3Ugcm9vdD9cbiIpOworCQlleGl0KDEpOworCX0KKworCW1lbSA9IG1tYXAobWVtLCAweDEwMDAwMCAtIDB4YzAwMDAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDB4YzAwMDApOworCWNsb3NlKGZkKTsKKworCWZvciAocCA9IG1lbTsgcCAtIG1lbSA8IExFTjsgcCs9MTYpIHsKKwkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsIDEwKSA9PSAwKSB7CisJCQlkZWNvZGVfcHNiKHAsIG51bXBzdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11bm1hcChtZW0sIExFTik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvaW50ZWxfZ3NpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjUyOTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogIChDKSAyMDAzICBCcnVubyBEdWNyb3QKKyAqICAoQykgMjAwNCAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZvdW5kIGluCisgKiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2lzdC5oIGFuZCBsaW51eC9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bHJtaS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlzdHJ1Y3QgTFJNSV9yZWdzCXI7CisJaW50CQkJcmV0dmFsOworCisJaWYgKCFMUk1JX2luaXQoKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CisKKwlyLmVheCA9IDB4MDAwMEU5ODA7CisJci5lZHggPSAweDQ3NTM0OTQzOworCisJcmV0dmFsID0gTFJNSV9pbnQoMHgxNSwgJnIpOworCisJaWYgKCFyZXR2YWwpIHsKKwkJcHJpbnRmKCJGYWlsZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyLmVheCA9PSAweDQ3NTM0OTQzKSB7CisJCXByaW50ZigiQklPUyBzdXBwb3J0cyBHU0lDIGNhbGw6XG4iKTsKKwkJcHJpbnRmKCJcdHNpZ25hdHVyZTogJWMlYyVjJWNcbiIsCisJCSAgICAgICAoci5lYXggPj4gMjQpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCA+PiAxNikgJiAweGZmLAorCQkgICAgICAgKHIuZWF4ID4+IDgpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCkgJiAweGZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgcG9ydCA9IDB4JS40eFxuIiwKKwkJICAgICAgIHIuZWJ4ICYgMHhmZmZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgPSAgICAgIDB4JS40eFxuIiwKKwkJICAgICAgIChyLmVieCA+PiAxNikgJiAweGZmZmYpOworCQlwcmludGYoIlx0ZXZlbnQgcG9ydCA9ICAgMHglLjh4XG4iLCByLmVjeCk7CisJCXByaW50ZigiXHRmbGFncyA9ICAgICAgICAweCUuOHhcbiIsIHIuZWR4KTsKKwkJaWYgKCgoci5lYnggPj4gMTYpICYgMHhmZmZmKSAhPSAweDgyKSB7CisJCQlwcmludGYoIm5vbi1kZWZhdWx0IGNvbW1hbmQgdmFsdWUuIElmIHNwZWVkc3RlcC1zbWkgIgorCQkJICAgICAgICJkb2Vzbid0IHdvcmsgb3V0IG9mIHRoZSBib3gsXG55b3UgbWF5IHdhbnQgdG8gIgorCQkJICAgICAgICJ0cnkgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIGJ5IHBhc3NpbmcgIgorCQkJICAgICAgICJzbWlfY21kPTB4ODIgdG8gdGhlIG1vZHVsZVxuIE9OIFlPVVIgT1dOICIKKwkJCSAgICAgICAiUklTSy5cbiIpOworCQl9CisJCWlmICgoci5lYnggJiAweGZmZmYpICE9IDB4YjIpIHsKKwkJCXByaW50Zigibm9uLWRlZmF1bHQgY29tbWFuZCBwb3J0LiBJZiBzcGVlZHN0ZXAtc21pICIKKwkJCSAgICAgICAiZG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94LFxueW91IG1heSB3YW50IHRvICIKKwkJCSAgICAgICAidHJ5IG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBieSBwYXNzaW5nICIKKwkJCSAgICAgICAic21pX3BvcnQ9MHg4MiB0byB0aGUgbW9kdWxlXG4gT04gWU9VUiBPV04gIgorCQkJICAgICAgICJSSVNLLlxuIik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoIkJJT1MgRE9FUyBOT1Qgc3VwcG9ydCBHU0lDIGNhbGwuICBEdW1waW5nIHJlZ2lzdGVycyBhbnl3YXk6XG4iKTsKKwkJcHJpbnRmKCJlYXggPSAweCUuOHhcbiIsIHIuZWF4KTsKKwkJcHJpbnRmKCJlYnggPSAweCUuOHhcbiIsIHIuZWJ4KTsKKwkJcHJpbnRmKCJlY3ggPSAweCUuOHhcbiIsIHIuZWN4KTsKKwkJcHJpbnRmKCJlZHggPSAweCUuOHhcbiIsIHIuZWR4KTsKKwkJcHJpbnRmKCJOb3RlIGFsc28gdGhhdCBzb21lIEJJT1MgZG8gbm90IHN1cHBvcnQgdGhlIGluaXRpYWwgIgorCQkgICAgICAgIkdTSUMgY2FsbCwgYnV0IHRoZSBuZXdlclxuc3BlZWVkc3RlcC1zbWkgZHJpdmVyIG1heSAiCisJCSAgICAgICAid29yay5cbkZvciB0aGlzLCB5b3UgbmVlZCB0byBwYXNzIHNvbWUgYXJndW1lbnRzIHRvICIKKwkJICAgICAgICJ0aGUgc3BlZWRzdGVwLXNtaSBkcml2ZXI6XG4iKTsKKwkJcHJpbnRmKCJcdHNtaV9jbWQ9MHg/PyBzbWlfcG9ydD0weD8/IHNtaV9zaWc9MVxuIik7CisJCXByaW50ZigiXG5VbmZvcnR1bmF0ZWx5LCB5b3UgaGF2ZSB0byBrbm93IHdoYXQgZXhhY3RseSBhcmUgIgorCQkgICAgICAgInNtaV9jbWQgYW5kIHNtaV9wb3J0LCBhbmQgdGhpc1xuaXMgc3lzdGVtICIKKwkJICAgICAgICJkZXBlbmRhbnQuXG4iKTsKKwl9CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhhNmIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogIChDKSAyMDA0IEJydW5vIER1Y3JvdCA8ZHVjcm90QHBvdXBpbm91Lm9yZz4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworICogYW5kIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFBhdWwgRGV2cmllbmR0CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVIDMyCisKKyNkZWZpbmUgTVNSX0ZJRFZJRF9TVEFUVVMJMHhjMDAxMDA0MgorCisjZGVmaW5lIE1TUl9TX0hJX0NVUlJFTlRfVklECTB4MDAwMDAwMWYKKyNkZWZpbmUgTVNSX1NfTE9fQ1VSUkVOVF9GSUQJMHgwMDAwMDAzZgorCitzdGF0aWMgaW50IGdldF9maWR2aWQodWludDMyX3QgY3B1LCB1aW50MzJfdCAqZmlkLCB1aW50MzJfdCAqdmlkKQoreworCWludCBlcnIgPSAxOworCXVpbnQ2NF90IG1zciA9IDA7CisJaW50IGZkOworCWNoYXIgZmlsZVsyMF07CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBvdXQ7CisKKwlzcHJpbnRmKGZpbGUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCisJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwlsc2VlayhmZCwgTVNSX0ZJRFZJRF9TVEFUVVMsIFNFRUtfQ1VSKTsKKwlpZiAocmVhZChmZCwgJm1zciwgOCkgIT0gOCkKKwkJZ290byBlcnIxOworCisJKmZpZCA9ICgodWludDMyX3QgKShtc3IgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19MT19DVVJSRU5UX0ZJRDsKKwkqdmlkID0gKCh1aW50MzJfdCApKG1zcj4+MzIgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19ISV9DVVJSRU5UX1ZJRDsKKwllcnIgPSAwOworZXJyMToKKwljbG9zZShmZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworCisvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KK3N0YXRpYyB1aW50MzJfdCBmaW5kX2ZyZXFfZnJvbV9maWQodWludDMyX3QgZmlkKQoreworCXJldHVybiA4MDAgKyAoZmlkICogMTAwKTsKK30KKworLyogUmV0dXJuIGEgdm9sdGFnZSBpbiBtaWxpVm9sdHMsIGdpdmVuIGFuIGlucHV0IHZpZCAqLworc3RhdGljIHVpbnQzMl90IGZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh1aW50MzJfdCB2aWQpCit7CisJcmV0dXJuIDE1NTAtdmlkKjI1OworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgZXJyOworCWludCBjcHU7CisJdWludDMyX3QgZmlkLCB2aWQ7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZQorCQljcHUgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworCisJZXJyID0gZ2V0X2ZpZHZpZChjcHUsICZmaWQsICZ2aWQpOworCisJaWYgKGVycikgeworCQlwcmludGYoImNhbid0IGdldCBmaWQsIHZpZCBmcm9tIE1TUlxuIik7CisJCXByaW50ZigiUG9zc2libGUgdHJvdWJsZTogeW91IGRvbid0IHJ1biBhIHBvd2Vybm93LWs4IGNhcGFibGUgY3B1XG4iKTsKKwkJcHJpbnRmKCJvciB5b3UgYXJlIG5vdCByb290LCBvciB0aGUgbXNyIGRyaXZlciBpcyBub3QgcHJlc2VudFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJCisJcHJpbnRmKCJjcHUgJWQgY3VycmVudGx5IGF0ICVkIE1IeiBhbmQgJWQgbVZcbiIsCisJCQljcHUsCisJCQlmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKSwKKwkJCWZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh2aWQpKTsKKwkKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIxNDZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK29iai1tCTo9CisKK0tESVIJOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitQV0QJCTo9ICQoc2hlbGwgcHdkKQorS01JU0MgICA6PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvY3B1ZnJlcXV0aWxzLworCitpZmVxICgiJChDT05GSUdfWDg2X1RTQykiLCAieSIpCisgIG9iai1tCSArPSBjcHVmcmVxLXRlc3RfdHNjLm8KK2VuZGlmCisKK2RlZmF1bHQ6CisJJChNQUtFKSAtQyAkKEtESVIpIE09JChQV0QpCisKK2NsZWFuOgorCS0gcm0gLXJmICoubyAqLmtvIC50bXAtdmVyc2lvbnMgLiouY21kIC4qLm1vZC4qICoubW9kLmMKKwktIHJtIC1yZiAudG1wX3ZlcnNpb25zKiBNb2R1bGUuc3ltdmVycyBtb2R1bGVzLm9yZGVyCisKK2luc3RhbGw6IGRlZmF1bHQKKwlpbnN0YWxsIC1kICQoS01JU0MpCisJaW5zdGFsbCAtbSA2NDQgLWMgKi5rbyAkKEtNSVNDKQorCS9zYmluL2RlcG1vZCAtYQorCithbGw6CWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9jcHVmcmVxLXRlc3RfdHNjLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2FjZTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogdGVzdCBtb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgVFNDLWJhc2VkIGRlbGF5IHJvdXRpbmUgY29udGludWVzCisgKiB0byB3b3JrIHByb3Blcmx5IGFmdGVyIGNwdWZyZXEgdHJhbnNpdGlvbnMuIE5lZWRzIEFDUEkgdG8gd29yaworICogcHJvcGVybHkuCisgKgorICogQmFzZWQgcGFydGx5IG9uIHRoZSBQb3dlciBNYW5hZ2VtZW50IFRpbWVyIChQTVRNUikgY29kZSB0byBiZSBmb3VuZAorICogaW4gYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfcG0uYyBvbiByZWNlbnQgMi42LiBrZXJuZWxzLCBlc3BlY2lhbGx5CisgKiBjb2RlIHdyaXR0ZW4gYnkgSm9obiBTdHVsdHouIFRoZSByZWFkX3BtdG1yIGZ1bmN0aW9uIHdhcyBjb3BpZWQgdmVyYmF0aW0KKyAqIGZyb20gdGhhdCBmaWxlLgorICoKKyAqIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpCisgKgorICogVG8gdXNlOgorICogMS4pIHBhc3MgY2xvY2s9dHNjIHRvIHRoZSBrZXJuZWwgb24geW91ciBib290bG9hZGVyCisgKiAyLikgbW9kcHJvYmUgdGhpcyBtb2R1bGUgKGl0J2xsIGZhaWwpCisgKiAzLikgY2hhbmdlIENQVSBmcmVxdWVuY3kKKyAqIDQuKSBtb2Rwcm9iZSB0aGlzIG1vZHVsZSBhZ2FpbgorICogNS4pIGlmIHRoZSB0aGlyZCB2YWx1ZSwgImRpZmZfcG10bXIiLCBjaGFuZ2VzIGJldHdlZW4gMi4gYW5kIDQuLCB0aGUKKyAqICAgICBUU0MtYmFzZWQgZGVsYXkgcm91dGluZSBvbiB0aGUgTGludXgga2VybmVsIGRvZXMgbm90IGNvcnJlY3RseQorICogICAgIGhhbmRsZSB0aGUgY3B1ZnJlcSB0cmFuc2l0aW9uLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8KKyAqICAgICBjcHVmcmVxQHZnZXIua2VybmVsLm9yZworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisKK3N0YXRpYyBpbnQgcG1fdG1yX2lvcG9ydCA9IDA7CisKKy8qaGVscGVyIGZ1bmN0aW9uIHRvIHNhZmVseSByZWFkIGFjcGkgcG0gdGltZXNvdXJjZSovCitzdGF0aWMgdTMyIHJlYWRfcG10bXIodm9pZCkKK3sKKwl1MzIgdjE9MCx2Mj0wLHYzPTA7CisJLyogSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBiZWNhdXNlIG9mIHZhcmlvdXMgYnJva2VuCisJICogY2hpcHNldHMgKElDSDQsIFBJSVg0IGFuZCBQSUlYNEUpIHdoZXJlIHRoZSBBQ1BJIFBNIHRpbWUKKwkgKiBzb3VyY2UgaXMgbm90IGxhdGNoZWQsIHNvIHlvdSBtdXN0IHJlYWQgaXQgbXVsdGlwbGUKKwkgKiB0aW1lcyB0byBpbnN1cmUgYSBzYWZlIHZhbHVlIGlzIHJlYWQuCisJICovCisJZG8geworCQl2MSA9IGlubChwbV90bXJfaW9wb3J0KTsKKwkJdjIgPSBpbmwocG1fdG1yX2lvcG9ydCk7CisJCXYzID0gaW5sKHBtX3Rtcl9pb3BvcnQpOworCX0gd2hpbGUgKCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCisJCSB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSk7CisKKwkvKiBtYXNrIHRoZSBvdXRwdXQgdG8gMjQgYml0cyAqLworCXJldHVybiAodjIgJiAweEZGRkZGRik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfdGVzdF90c2Modm9pZCkKK3sKKwl1MzIgbm93LCB0aGVuLCBkaWZmOworCXU2NCBub3dfdHNjLCB0aGVuX3RzYywgZGlmZl90c2M7CisJaW50IGk7CisKKwkvKiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBlZCBpcyBjb3BpZWQgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKwkgICBvZiBMaW51eCB2Mi42LjI1LiAqLworCisJLyogZGV0ZWN0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQUNQSSBQTSBUaW1lciAqLworCWlmIChhY3BpX2dibF9GQURULmhlYWRlci5yZXZpc2lvbiA+PSBGQURUMl9SRVZJU0lPTl9JRCkgeworCQkvKiBGQURUIHJldi4gMiAqLworCQlpZiAoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suc3BhY2VfaWQgIT0KKwkJICAgIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykKKwkJCXJldHVybiAwOworCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzOworCQkvKgorCQkgKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wCisJCSAqIGZpZWxkcywgc28gd2UgbXVzdCBzZWxlY3RpdmVseSBleHBhbmQgVjEuMCBmaWVsZHMgaWYgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgorCSAJICovCisJCWlmICghcG1fdG1yX2lvcG9ydCkKKwkJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0gZWxzZSB7CisJCS8qIEZBRFQgcmV2LiAxICovCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJzdGFydC0tPiBcbiIpOworCXRoZW4gPSByZWFkX3BtdG1yKCk7CisgICAgICAgIHJkdHNjbGwodGhlbl90c2MpOworCWZvciAoaT0wO2k8MjA7aSsrKSB7CisJCW1kZWxheSgxMDApOworCQlub3cgPSByZWFkX3BtdG1yKCk7CisJCXJkdHNjbGwobm93X3RzYyk7CisJCWRpZmYgPSAobm93IC0gdGhlbikgJiAweEZGRkZGRjsKKwkJZGlmZl90c2MgPSBub3dfdHNjIC0gdGhlbl90c2M7CisJCXByaW50ayhLRVJOX0RFQlVHICJ0MTogJTA4dSB0MjogJTA4dSBkaWZmX3BtdG1yOiAlMDh1IGRpZmZfdHNjOiAlMDE2bGx1XG4iLCB0aGVuLCBub3csIGRpZmYsIGRpZmZfdHNjKTsKKwkJdGhlbiA9IG5vdzsKKwkJdGhlbl90c2MgPSBub3dfdHNjOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiPC0tIGVuZCBcbiIpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9ub25lKHZvaWQpCit7CisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdChjcHVmcmVxX3Rlc3RfdHNjKQorbW9kdWxlX2V4aXQoY3B1ZnJlcV9ub25lKQorCisKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZlcmlmeSB0aGUgVFNDIGNwdWZyZXEgbm90aWZpZXIgd29ya2luZyBjb3JyZWN0bHkgLS0gbmVlZHMgQUNQSS1lbmFibGVkIHN5c3RlbSIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI2MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK2RlZmF1bHQ6IGFsbAorCitjZW50cmluby1kZWNvZGU6IC4uL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJDwKKworcG93ZXJub3ctazgtZGVjb2RlOiAuLi9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vICRAICQ8CisKK2FsbDogY2VudHJpbm8tZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZQorCitjbGVhbjoKKwlybSAtcmYgY2VudHJpbm8tZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZQorCisuUEhPTlk6IGFsbCBkZWZhdWx0IGNsZWFuCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTYxMTAxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJzeXNmcy5oIgorCitpbnQgY3B1ZnJlcV9jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdV9leGlzdHMoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9rZXJuZWwoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworfQorCitpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgbG9uZyAqbWluLAorCQkJCXVuc2lnbmVkIGxvbmcgKm1heCkKK3sKKwlpZiAoKCFtaW4pIHx8ICghbWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyhjcHUsIG1pbiwgbWF4KTsKK30KKworY2hhciAqY3B1ZnJlcV9nZXRfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2RyaXZlcihjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2RyaXZlcihjaGFyICpwdHIpCit7CisJaWYgKCFwdHIpCisJCXJldHVybjsKKwlmcmVlKHB0cik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3BvbGljeShjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAoKCFwb2xpY3kpIHx8ICghcG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybjsKKworCWZyZWUocG9saWN5LT5nb3Zlcm5vcik7CisJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7CisJZnJlZShwb2xpY3kpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkCisJCQkJCQkJCWludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlpZiAodG1wLT5nb3Zlcm5vcikKKwkJCWZyZWUodG1wLT5nb3Zlcm5vcik7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisJCQkJKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqYW55KQoreworCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoYW55KTsKK30KKworCitpbnQgY3B1ZnJlcV9zZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCWlmICghcG9saWN5IHx8ICEocG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c2ZzX3NldF9mcmVxX3BvbGljeShjcHUsIHBvbGljeSk7Cit9CisKKworaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSkKK3sKKwlyZXR1cm4gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21pbihjcHUsIG1pbl9mcmVxKTsKK30KKworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKQoreworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWF4KGNwdSwgbWF4X2ZyZXEpOworfQorCisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpCit7CisJaWYgKCghZ292ZXJub3IpIHx8IChzdHJsZW4oZ292ZXJub3IpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcik7Cit9CisKK2ludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KQoreworCXJldHVybiBzeXNmc19zZXRfZnJlcXVlbmN5KGNwdSwgdGFyZ2V0X2ZyZXF1ZW5jeSk7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICpjcHVmcmVxX2dldF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3N0YXRzKGNwdSwgdG90YWxfdGltZSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfc3RhdHMoc3RydWN0IGNwdWZyZXFfc3RhdHMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9ucyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9ucyhjcHUpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhZThlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiAgY3B1ZnJlcS5oIC0gZGVmaW5pdGlvbnMgZm9yIGxpYmNwdWZyZXEKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0NQVUZSRVFfSAorI2RlZmluZSBfQ1BVRlJFUV9IIDEKKworc3RydWN0IGNwdWZyZXFfcG9saWN5IHsKKwl1bnNpZ25lZCBsb25nIG1pbjsKKwl1bnNpZ25lZCBsb25nIG1heDsKKwljaGFyICpnb3Zlcm5vcjsKK307CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgeworCWNoYXIgKmdvdmVybm9yOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgeworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0OworfTsKKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzIHsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVfaW5fc3RhdGU7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmZpcnN0OworfTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIHJldHVybnMgMCBpZiB0aGUgc3BlY2lmaWVkIENQVSBpcyBwcmVzZW50IChpdCBkb2Vzbid0IHNheQorICogd2hldGhlciBpdCBpcyBvbmxpbmUhKSwgYW5kIGFuIGVycm9yIHZhbHVlIGlmIG5vdC4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogZGV0ZXJtaW5lIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeQorICogLSBfa2VybmVsIHZhcmlhbnQgbWVhbnMga2VybmVsJ3Mgb3BpbmlvbiBvZiBDUFUgZnJlcXVlbmN5CisgKiAtIF9oYXJkd2FyZSB2YXJpYW50IG1lYW5zIGFjdHVhbCBoYXJkd2FyZSBDUFUgZnJlcXVlbmN5LAorICogICAgd2hpY2ggaXMgb25seSBhdmFpbGFibGUgdG8gcm9vdC4KKyAqCisgKiByZXR1cm5zIDAgb24gZmFpbHVyZSwgZWxzZSBmcmVxdWVuY3kgaW4ga0h6LgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpOworCisjZGVmaW5lIGNwdWZyZXFfZ2V0KGNwdSkgY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVIHRyYW5zaXRpb24gbGF0ZW5jeQorICoKKyAqIHJldHVybnMgMCBvbiBmYWlsdXJlLCBlbHNlIHRyYW5zaXRpb24gbGF0ZW5jeSBpbiAxMF4oLTkpIHMgPSBuYW5vc2Vjb25kcworICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CisKKworLyogZGV0ZXJtaW5lIGhhcmR3YXJlIENQVSBmcmVxdWVuY3kgbGltaXRzCisgKgorICogVGhlc2UgbWF5IGJlIGxpbWl0ZWQgZnVydGhlciBieSB0aGVybWFsLCBlbmVyZ3kgb3Igb3RoZXIKKyAqIGNvbnNpZGVyYXRpb25zIGJ5IGNwdWZyZXEgcG9saWN5IG5vdGlmaWVycyBpbiB0aGUga2VybmVsLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgbG9uZyAqbWluLAorCQkJCXVuc2lnbmVkIGxvbmcgKm1heCk7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgZHJpdmVyIHVzZWQKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2RyaXZlciB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIGNoYXIgKmNwdWZyZXFfZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfZHJpdmVyKGNoYXIgKnB0cik7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgcG9saWN5IGN1cnJlbnRseSB1c2VkCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9wb2xpY3kgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCisKKy8qIGRldGVybWluZSBDUFVmcmVxIGdvdmVybm9ycyBjdXJyZW50bHkgYXZhaWxhYmxlCisgKgorICogbWF5IGJlIG1vZGlmaWVkIGJ5IG1vZHByb2JlJ2luZyBvciBybW1vZCdpbmcgb3RoZXIgZ292ZXJub3JzLiBQbGVhc2UKKyAqIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMKKyAqIGFmdGVyIHVzZS4KKyAqLworCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycygKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIENQVSBmcmVxdWVuY3kgc3RhdGVzIGF2YWlsYWJsZQorICoKKyAqIE9ubHkgcHJlc2VudCBvbiBfc29tZV8gLT50YXJnZXQoKSBjcHVmcmVxIGRyaXZlcnMuIEZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcworICogb25seS4gUGxlYXNlIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nCisgKiBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMgYWZ0ZXIgdXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMKKypjcHVmcmVxX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcygKKwkJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIGFmZmVjdGVkIENQVXMKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkCisJCQkJCQkJaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSByZWxhdGVkIENQVXMKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZAorCQkJCQkJCWludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSBzdGF0cyBmb3IgY3B1ZnJlcSBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgaW4gYWxsIGtlcm5lbCB2ZXJzaW9ucyBvciBjb25maWd1cmF0aW9ucy4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfc3RhdHMgKmNwdWZyZXFfZ2V0X3N0YXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqdG90YWxfdGltZSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X3N0YXRzKHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworCisKKy8qIHNldCBuZXcgY3B1ZnJlcSBwb2xpY3kKKyAqCisgKiBUcmllcyB0byBzZXQgdGhlIHBhc3NlZCBwb2xpY3kgYXMgbmV3IHBvbGljeSBhcyBjbG9zZSBhcyBwb3NzaWJsZSwKKyAqIGJ1dCByZXN1bHRzIG1heSBkaWZmZXIgZGVwZW5kaW5nIGUuZy4gb24gZ292ZXJub3JzIGJlaW5nIGF2YWlsYWJsZS4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfc2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisKKworLyogbW9kaWZ5IGEgcG9saWN5IGJ5IG9ubHkgY2hhbmdpbmcgbWluL21heCBmcmVxIG9yIGdvdmVybm9yCisgKgorICogRG9lcyBub3QgY2hlY2sgd2hldGhlciByZXN1bHQgaXMgd2hhdCB3YXMgaW50ZW5kZWQuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpOworCisKKy8qIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeQorICoKKyAqIERvZXMgb25seSB3b3JrIGlmIHVzZXJzcGFjZSBnb3Zlcm5vciBjYW4gYmUgdXNlZCBhbmQgbm8gZXh0ZXJuYWwKKyAqIGludGVyZmVyZW5jZSAob3RoZXIgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBvciB0byBzZXQvbW9kaWZ5X3BvbGljeSkKKyAqIG9jY3Vycy4gQWxzbyBkb2VzIG5vdCB3b3JrIG9uIC0+cmFuZ2UoKSBjcHVmcmVxIGRyaXZlcnMuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQl1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0NQVUZSRVFfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA3MTNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKworI2RlZmluZSBQQVRIX1RPX0NQVSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvIgorI2RlZmluZSBNQVhfTElORV9MRU4gNDA5NgorI2RlZmluZSBTWVNGU19QQVRIX01BWCAyNTUKKworCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IGZkOworCXNzaXplX3QgbnVtcmVhZDsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmIChudW1yZWFkIDwgMSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Cit9CisKKworLyogQ1BVRlJFUSBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGZpbGUgZnJvbSAvc3lzIGludG8gZ2l2ZW4gYnVmZmVyICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKwlyZXR1cm4gc3lzZnNfcmVhZF9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuKTsKK30KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIGEgbmV3IHZhbHVlIHRvIGEgL3N5cyBmaWxlICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfd3JpdGVfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJaW50IGZkOworCXNzaXplX3QgbnVtd3JpdGU7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gMDsKKworCW51bXdyaXRlID0gd3JpdGUoZmQsIHZhbHVlLCBsZW4pOworCWlmIChudW13cml0ZSA8IDEpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkgbnVtd3JpdGU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIG51bWVyaWMgdmFsdWUgKi8KKworZW51bSBjcHVmcmVxX3ZhbHVlIHsKKwlDUFVJTkZPX0NVUl9GUkVRLAorCUNQVUlORk9fTUlOX0ZSRVEsCisJQ1BVSU5GT19NQVhfRlJFUSwKKwlDUFVJTkZPX0xBVEVOQ1ksCisJU0NBTElOR19DVVJfRlJFUSwKKwlTQ0FMSU5HX01JTl9GUkVRLAorCVNDQUxJTkdfTUFYX0ZSRVEsCisJU1RBVFNfTlVNX1RSQU5TSVRJT05TLAorCU1BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3ZhbHVlX2ZpbGVzW01BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVNdID0geworCVtDUFVJTkZPX0NVUl9GUkVRXSA9ICJjcHVpbmZvX2N1cl9mcmVxIiwKKwlbQ1BVSU5GT19NSU5fRlJFUV0gPSAiY3B1aW5mb19taW5fZnJlcSIsCisJW0NQVUlORk9fTUFYX0ZSRVFdID0gImNwdWluZm9fbWF4X2ZyZXEiLAorCVtDUFVJTkZPX0xBVEVOQ1ldICA9ICJjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSIsCisJW1NDQUxJTkdfQ1VSX0ZSRVFdID0gInNjYWxpbmdfY3VyX2ZyZXEiLAorCVtTQ0FMSU5HX01JTl9GUkVRXSA9ICJzY2FsaW5nX21pbl9mcmVxIiwKKwlbU0NBTElOR19NQVhfRlJFUV0gPSAic2NhbGluZ19tYXhfZnJlcSIsCisJW1NUQVRTX05VTV9UUkFOU0lUSU9OU10gPSAic3RhdHMvdG90YWxfdHJhbnMiCit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJIGVudW0gY3B1ZnJlcV92YWx1ZSB3aGljaCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9WQUxVRV9SRUFEX0ZJTEVTKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgY3B1ZnJlcV92YWx1ZV9maWxlc1t3aGljaF0sCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCisJaWYgKGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBzdHJpbmcgKi8KKworZW51bSBjcHVmcmVxX3N0cmluZyB7CisJU0NBTElOR19EUklWRVIsCisJU0NBTElOR19HT1ZFUk5PUiwKKwlNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3N0cmluZ19maWxlc1tNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVNdID0geworCVtTQ0FMSU5HX0RSSVZFUl0gPSAic2NhbGluZ19kcml2ZXIiLAorCVtTQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKK307CisKKworc3RhdGljIGNoYXIgKnN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJICAgZW51bSBjcHVmcmVxX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCBjcHVmcmVxX3N0cmluZ19maWxlc1t3aGljaF0sCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpOworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogd3JpdGUgYWNjZXNzICovCisKK2VudW0gY3B1ZnJlcV93cml0ZSB7CisJV1JJVEVfU0NBTElOR19NSU5fRlJFUSwKKwlXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCVdSSVRFX1NDQUxJTkdfR09WRVJOT1IsCisJV1JJVEVfU0NBTElOR19TRVRfU1BFRUQsCisJTUFYX0NQVUZSRVFfV1JJVEVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3dyaXRlX2ZpbGVzW01BWF9DUFVGUkVRX1dSSVRFX0ZJTEVTXSA9IHsKKwlbV1JJVEVfU0NBTElOR19NSU5fRlJFUV0gPSAic2NhbGluZ19taW5fZnJlcSIsCisJW1dSSVRFX1NDQUxJTkdfTUFYX0ZSRVFdID0gInNjYWxpbmdfbWF4X2ZyZXEiLAorCVtXUklURV9TQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKKwlbV1JJVEVfU0NBTElOR19TRVRfU1BFRURdID0gInNjYWxpbmdfc2V0c3BlZWQiLAorfTsKKworc3RhdGljIGludCBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgZW51bSBjcHVmcmVxX3dyaXRlIHdoaWNoLAorCQkJCQkgY29uc3QgY2hhciAqbmV3X3ZhbHVlLCBzaXplX3QgbGVuKQoreworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9XUklURV9GSUxFUykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3lzZnNfY3B1ZnJlcV93cml0ZV9maWxlKGNwdSwgY3B1ZnJlcV93cml0ZV9maWxlc1t3aGljaF0sCisJCQkJCW5ld192YWx1ZSwgbGVuKSAhPSBsZW4pCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9OworCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19MQVRFTkNZKTsKK30KKworaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWluLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWF4KQoreworCWlmICgoIW1pbikgfHwgKCFtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSptaW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX01JTl9GUkVRKTsKKwlpZiAoISptaW4pCisJCXJldHVybiAtRU5PREVWOworCisJKm1heCA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fTUFYX0ZSRVEpOworCWlmICghKm1heCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworY2hhciAqc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcoY3B1LCBTQ0FMSU5HX0RSSVZFUik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisKKwlwb2xpY3kgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gTlVMTDsKKworCXBvbGljeS0+Z292ZXJub3IgPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfc3RyaW5nKGNwdSwgU0NBTElOR19HT1ZFUk5PUik7CisJaWYgKCFwb2xpY3ktPmdvdmVybm9yKSB7CisJCWZyZWUocG9saWN5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXBvbGljeS0+bWluID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19NSU5fRlJFUSk7CisJcG9saWN5LT5tYXggPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01BWF9GUkVRKTsKKwlpZiAoKCFwb2xpY3ktPm1pbikgfHwgKCFwb2xpY3ktPm1heCkpIHsKKwkJZnJlZShwb2xpY3ktPmdvdmVybm9yKTsKKwkJZnJlZShwb2xpY3kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICoKK3N5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsICJzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMiLAorCQkJCWxpbmVidWYsIHNpemVvZihsaW5lYnVmKSk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXBvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChsaW5lYnVmW2ldID09ICcgJyB8fCBsaW5lYnVmW2ldID09ICdcbicpIHsKKwkJCWlmIChpIC0gcG9zIDwgMikKKwkJCQljb250aW51ZTsKKwkJCWlmIChjdXJyZW50KSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YoKmN1cnJlbnQpKTsKKwkJCQlpZiAoIWN1cnJlbnQtPm5leHQpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YoKmZpcnN0KSk7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQljdXJyZW50LT5nb3Zlcm5vciA9IG1hbGxvYyhpIC0gcG9zICsgMSk7CisJCQlpZiAoIWN1cnJlbnQtPmdvdmVybm9yKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQltZW1jcHkoY3VycmVudC0+Z292ZXJub3IsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJY3VycmVudC0+Z292ZXJub3JbaSAtIHBvc10gPSAnXDAnOworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKGZpcnN0KSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJaWYgKGZpcnN0LT5nb3Zlcm5vcikKKwkJCWZyZWUoZmlyc3QtPmdvdmVybm9yKTsKKwkJZnJlZShmaXJzdCk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICoKK3N5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgInNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwKKwkJCQlsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobGluZWJ1ZltpXSA9PSAnICcgfHwgbGluZWJ1ZltpXSA9PSAnXG4nKSB7CisJCQlpZiAoaSAtIHBvcyA8IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoaSAtIHBvcyA+PSBTWVNGU19QQVRIX01BWCkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlmIChjdXJyZW50KSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YoKmN1cnJlbnQpKTsKKwkJCQlpZiAoIWN1cnJlbnQtPm5leHQpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YoKmZpcnN0KSk7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQltZW1jcHkob25lX3ZhbHVlLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCW9uZV92YWx1ZVtpIC0gcG9zXSA9ICdcMCc7CisJCQlpZiAoc3NjYW5mKG9uZV92YWx1ZSwgIiVsdSIsICZjdXJyZW50LT5mcmVxdWVuY3kpICE9IDEpCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqc3lzZnNfZ2V0X2NwdV9saXN0KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkJY29uc3QgY2hhciAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgZmlsZSwgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcG9zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgPT0gbGVuIHx8IGxpbmVidWZbaV0gPT0gJyAnIHx8IGxpbmVidWZbaV0gPT0gJ1xuJykgeworCQkJaWYgKGkgLSBwb3MgIDwgMSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpIC0gcG9zID49IFNZU0ZTX1BBVEhfTUFYKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWYgKGN1cnJlbnQpIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZigqY3VycmVudCkpOworCQkJCWlmICghY3VycmVudC0+bmV4dCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKHNpemVvZigqZmlyc3QpKTsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCW1lbWNweShvbmVfdmFsdWUsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJb25lX3ZhbHVlW2kgLSBwb3NdID0gJ1wwJzsKKworCQkJaWYgKHNzY2FuZihvbmVfdmFsdWUsICIldSIsICZjdXJyZW50LT5jcHUpICE9IDEpCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9jcHVfbGlzdChjcHUsICJhZmZlY3RlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKnN5c2ZzX2dldF9mcmVxX3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfY3B1X2xpc3QoY3B1LCAicmVsYXRlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICpzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIG9uZV92YWx1ZVtTWVNGU19QQVRIX01BWF07CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCAic3RhdHMvdGltZV9pbl9zdGF0ZSIsCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJKnRvdGFsX3RpbWUgPSAwOworCXBvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpID09IHN0cmxlbihsaW5lYnVmKSB8fCBsaW5lYnVmW2ldID09ICdcbicpCXsKKwkJCWlmIChpIC0gcG9zIDwgMikKKwkJCQljb250aW51ZTsKKwkJCWlmICgoaSAtIHBvcykgPj0gU1lTRlNfUEFUSF9NQVgpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZiAoY3VycmVudCkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKCpjdXJyZW50KSk7CisJCQkJaWYgKCFjdXJyZW50LT5uZXh0KQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2Moc2l6ZW9mKCpmaXJzdCkpOworCQkJCWlmICghZmlyc3QpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJbWVtY3B5KG9uZV92YWx1ZSwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQlvbmVfdmFsdWVbaSAtIHBvc10gPSAnXDAnOworCQkJaWYgKHNzY2FuZihvbmVfdmFsdWUsICIlbHUgJWxsdSIsCisJCQkJCSZjdXJyZW50LT5mcmVxdWVuY3ksCisJCQkJCSZjdXJyZW50LT50aW1lX2luX3N0YXRlKSAhPSAyKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQkqdG90YWxfdGltZSA9ICp0b3RhbF90aW1lICsgY3VycmVudC0+dGltZV9pbl9zdGF0ZTsKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNUQVRTX05VTV9UUkFOU0lUSU9OUyk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2dvdihjaGFyICpuZXdfZ292LCBjaGFyICpwYXNzZWRfZ292KQoreworCXVuc2lnbmVkIGludCBpLCBqID0gMDsKKworCWlmICghcGFzc2VkX2dvdiB8fCAoc3RybGVuKHBhc3NlZF9nb3YpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkobmV3X2dvdiwgcGFzc2VkX2dvdiwgMjApOworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCWlmIChqKSB7CisJCQluZXdfZ292W2ldID0gJ1wwJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobmV3X2dvdltpXSA+PSAnYScpICYmIChuZXdfZ292W2ldIDw9ICd6JykpCisJCQljb250aW51ZTsKKworCQlpZiAoKG5ld19nb3ZbaV0gPj0gJ0EnKSAmJiAobmV3X2dvdltpXSA8PSAnWicpKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJy0nKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ18nKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ1wwJykgeworCQkJaiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbmV3X2dvdlsxOV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKQoreworCWNoYXIgbmV3X2dvdltTWVNGU19QQVRIX01BWF07CisKKwlpZiAoIWdvdmVybm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2ZXJpZnlfZ292KG5ld19nb3YsIGdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIG5ld19nb3YsIHN0cmxlbihuZXdfZ292KSk7Cit9OworCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKQoreworCWNoYXIgdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYodmFsdWUsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgbWF4X2ZyZXEpOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwkJCQkJICAgICB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7Cit9OworCisKK2ludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpCit7CisJY2hhciB2YWx1ZVtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50Zih2YWx1ZSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBtaW5fZnJlcSk7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01JTl9GUkVRLAorCQkJCQkgICAgIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKK307CisKKworaW50IHN5c2ZzX3NldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljaGFyIG1pbltTWVNGU19QQVRIX01BWF07CisJY2hhciBtYXhbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgZ292W1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgb2xkX21pbjsKKwlpbnQgd3JpdGVfbWF4X2ZpcnN0OworCisJaWYgKCFwb2xpY3kgfHwgIShwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocG9saWN5LT5tYXggPCBwb2xpY3ktPm1pbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmVyaWZ5X2dvdihnb3YsIHBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKG1pbiwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBwb2xpY3ktPm1pbik7CisJc25wcmludGYobWF4LCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIHBvbGljeS0+bWF4KTsKKworCW9sZF9taW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01JTl9GUkVRKTsKKwl3cml0ZV9tYXhfZmlyc3QgPSAob2xkX21pbiAmJiAocG9saWN5LT5tYXggPCBvbGRfbWluKSA/IDAgOiAxKTsKKworCWlmICh3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUlOX0ZSRVEsIG1pbiwKKwkJCQkJICAgIHN0cmxlbihtaW4pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIGdvdiwgc3RybGVuKGdvdikpOworfQorCitpbnQgc3lzZnNfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wgPSBzeXNmc19nZXRfZnJlcV9wb2xpY3koY3B1KTsKKwljaGFyIHVzZXJzcGFjZV9nb3ZbXSA9ICJ1c2Vyc3BhY2UiOworCWNoYXIgZnJlcVtTWVNGU19QQVRIX01BWF07CisJaW50IHJldDsKKworCWlmICghcG9sKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzdHJuY21wKHBvbC0+Z292ZXJub3IsIHVzZXJzcGFjZV9nb3YsIDkpICE9IDApIHsKKwkJcmV0ID0gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKGNwdSwgdXNlcnNwYWNlX2dvdik7CisJCWlmIChyZXQpIHsKKwkJCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCisJc25wcmludGYoZnJlcSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCB0YXJnZXRfZnJlcXVlbmN5KTsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfU0VUX1NQRUVELAorCQkJCQkgICAgIGZyZXEsIHN0cmxlbihmcmVxKSk7Cit9CisKKy8qIENQVUZSRVEgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBzeXNmc19jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJY2hhciBmaWxlW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS8iLCBjcHUpOworCisJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDApCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSA/IDAgOiAtRU5PU1lTOworfQorCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2YTVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEdlbmVyYWwgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogQ1BVZnJlcSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nICptaW4sIHVuc2lnbmVkIGxvbmcgKm1heCk7CitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKnN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMoCisJdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKAorCXVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKnN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXMoCisJdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqc3lzZnNfZ2V0X2ZyZXFfcmVsYXRlZF9jcHVzKAorCXVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIGludCBzeXNmc19zZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBtaW5fZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBtYXhfZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcik7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMQpAQCAtMCwwICsxLDc2IEBACisuVEggImNwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvIiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1cG93ZXIgZnJlcXVlbmN5XC1pbmZvIFwtIFV0aWxpdHkgdG8gcmV0cmlldmUgY3B1ZnJlcSBrZXJuZWwgaW5mb3JtYXRpb24KKy5TSCAiU1lOVEFYIgorLkxQIAorY3B1cG93ZXIgWyBcLWMgY3B1bGlzdCBdIGZyZXF1ZW5jeVwtaW5mbyBbXGZJb3B0aW9uc1xmUF0KKy5TSCAiREVTQ1JJUFRJT04iCisuTFAgCitBIHNtYWxsIHRvb2wgd2hpY2ggcHJpbnRzIG91dCBjcHVmcmVxIGluZm9ybWF0aW9uIGhlbHBmdWwgdG8gZGV2ZWxvcGVycyBhbmQgaW50ZXJlc3RlZCB1c2Vycy4KKy5TSCAiT1BUSU9OUyIKKy5MUCAKKy5UUCAgCitcZkJcLWVcZlIgXGZCXC1cLWRlYnVnXGZSCitQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uLgorLlRQICAKK1xmQlwtZlxmUiBcZkJcLVwtZnJlcVxmUgorR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmcgdG8gdGhlIGNwdWZyZXEgY29yZS4KKy5UUCAgCitcZkJcLXdcZlIgXGZCXC1cLWh3ZnJlcVxmUgorR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpLgorLlRQICAKK1xmQlwtbFxmUiBcZkJcLVwtaHdsaW1pdHNcZlIKK0RldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5IGFsbG93ZWQuCisuVFAgIAorXGZCXC1kXGZSIFxmQlwtXC1kcml2ZXJcZlIKK0RldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyLgorLlRQICAKK1xmQlwtcFxmUiBcZkJcLVwtcG9saWN5XGZSCitHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeS4KKy5UUCAgCitcZkJcLWdcZlIgXGZCXC1cLWdvdmVybm9yc1xmUgorRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMuCisuVFAgIAorXGZCXC1hXGZSIFxmQlwtXC1yZWxhdGVkXC1jcHVzXGZSCitEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeS4KKy5UUCAgCitcZkJcLWFcZlIgXGZCXC1cLWFmZmVjdGVkXC1jcHVzXGZSCitEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZS4KKy5UUCAgCitcZkJcLXNcZlIgXGZCXC1cLXN0YXRzXGZSCitTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlLgorLlRQICAKK1xmQlwteVxmUiBcZkJcLVwtbGF0ZW5jeVxmUgorRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgY2hhbmdlcy4KKy5UUCAgCitcZkJcLW9cZlIgXGZCXC1cLXByb2NcZlIKK1ByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvY3B1ZnJlcSBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzLgorLlRQICAKK1xmQlwtbVxmUiBcZkJcLVwtaHVtYW5cZlIKK2h1bWFuXC1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSBcLWYsIFwtdywgXC1zIGFuZCBcLXkgcGFyYW1ldGVycy4KKy5UUCAgCitcZkJcLWhcZlIgXGZCXC1cLWhlbHBcZlIKK1ByaW50cyBvdXQgdGhlIGhlbHAgc2NyZWVuLgorLlNIICJSRU1BUktTIgorLkxQIAorQnkgZGVmYXVsdCBvbmx5IHZhbHVlcyBvZiBjb3JlIHplcm8gYXJlIGRpc3BsYXllZC4gSG93IHRvIGRpc3BsYXkgc2V0dGluZ3Mgb2YKK290aGVyIGNvcmVzIGlzIGRlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4KKy5MUCAKK1lvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb2YgdGhlIG91dHB1dCBzcGVjaWZpYyBvcHRpb25zIFwtbyBcLWUgXC1hIFwtZyBcLXAgXC1kIFwtbCBcLXcgXC1mIFwteS4KKy5MUCAKK1lvdSBhbHNvIGNhbid0IHNwZWNpZnkgdGhlIFwtbyBvcHRpb24gY29tYmluZWQgd2l0aCB0aGUgXC1jIG9wdGlvbi4KKy5TSCAiRklMRVMiCisubmYgCitcZkkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWZyZXEvXGZQICAKK1xmSS9wcm9jL2NwdWZyZXFcZlAgKGRlcHJlY2F0ZWQpIAorXGZJL3Byb2Mvc3lzL2NwdS9cZlAgKGRlcHJlY2F0ZWQpCisuZmkgCisuU0ggIkFVVEhPUlMiCisubmYKK0RvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4gXC0gYXV0aG9yIAorTWF0dGlhIERvbmdpbGk8bWFsYXR0aWFAZ21haWwuY29tPiBcLSBmaXJzdCBhdXRvbGlidG9vbGl6YXRpb24KKy5maQorLlNIICJTRUUgQUxTTyIKKy5MUCAKK2NwdXBvd2VyXC1mcmVxdWVuY3lcLXNldCgxKSwgY3B1cG93ZXIoMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NWY0NjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xCkBAIC0wLDAgKzEsNTQgQEAKKy5USCAiY3B1cG93ZXItZnJlcWVuY3ktc2V0IiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1cG93ZXIgZnJlcXVlbmN5XC1zZXQgXC0gQSBzbWFsbCB0b29sIHdoaWNoIGFsbG93cyB0byBtb2RpZnkgY3B1ZnJlcSBzZXR0aW5ncy4KKy5TSCAiU1lOVEFYIgorLkxQIAorY3B1cG93ZXIgWyBcLWMgY3B1IF0gZnJlcXVlbmN5XC1zZXQgW1xmSW9wdGlvbnNcZlBdCisuU0ggIkRFU0NSSVBUSU9OIgorLkxQIAorY3B1cG93ZXIgZnJlcXVlbmN5XC1zZXQgYWxsb3dzIHlvdSB0byBtb2RpZnkgY3B1ZnJlcSBzZXR0aW5ncyB3aXRob3V0IGhhdmluZyB0byB0eXBlIGUuZy4gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX3NldF9zcGVlZCIgYWxsIHRoZSB0aW1lLgorLlNIICJPUFRJT05TIgorLkxQIAorLlRQIAorXGZCXC1kXGZSIFxmQlwtXC1taW5cZlIgPEZSRVE+CituZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC11XGZSIFxmQlwtXC1tYXhcZlIgPEZSRVE+CituZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC1nXGZSIFxmQlwtXC1nb3Zlcm5vclxmUiA8R09WPgorbmV3IGNwdWZyZXEgZ292ZXJub3IuCisuVFAgCitcZkJcLWZcZlIgXGZCXC1cLWZyZXFcZlIgPEZSRVE+CitzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2UgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWQuCisuVFAgCitcZkJcLXJcZlIgXGZCXC1cLXJlbGF0ZWRcZlIKK21vZGlmeSBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzIGF0IHRoZSBzYW1lIHRpbWUKKy5UUCAKK1xmQlwtaFxmUiBcZkJcLVwtaGVscFxmUgorUHJpbnRzIG91dCB0aGUgaGVscCBzY3JlZW4uCisuU0ggIlJFTUFSS1MiCisuTFAgCitCeSBkZWZhdWx0IHZhbHVlcyBhcmUgYXBwbGllZCBvbiBhbGwgY29yZXMuIEhvdyB0byBtb2RpZnkgc2luZ2xlIGNvcmUKK2NvbmZpZ3VyYXRpb25zIGlzIGRlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4KKy5MUCAKK1RoZSBcLWYgRlJFUSwgXC1cLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHBhcmFtZXRlci4KKy5MUCAKK0ZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHogYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2UgKGZyZXF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLgorLkxQIAorT24gTGludXgga2VybmVscyB1cCB0byAyLjYuMjksIHRoZSBcLXIgb3IgXC1cLXJlbGF0ZWQgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisuU0ggIkZJTEVTIiAKKy5uZgorXGZJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL1xmUCAgCitcZkkvcHJvYy9jcHVmcmVxXGZQIChkZXByZWNhdGVkKSAKK1xmSS9wcm9jL3N5cy9jcHUvXGZQIChkZXByZWNhdGVkKQorLmZpIAorLlNIICJBVVRIT1JTIgorLm5mIAorRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiBcLSBhdXRob3IgCitNYXR0aWEgRG9uZ2lsaTxtYWxhdHRpYUBnbWFpbC5jb20+IFwtIGZpcnN0IGF1dG9saWJ0b29saXphdGlvbgorLmZpCisuU0ggIlNFRSBBTFNPIgorLkxQIAorY3B1cG93ZXJcLWZyZXF1ZW5jeVwtaW5mbygxKSwgY3B1cG93ZXIoMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1pbmZvLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTIxMTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCkBAIC0wLDAgKzEsMTkgQEAKKy5USCBDUFVQT1dFUlwtSU5GTyAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLWluZm8gXC0gU2hvd3MgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQga2VybmVsIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBpbmZvIFsgXC1iIF0gWyBcLXMgXSBbIFwtbSBdCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgaW5mbyBcZlAgc2hvd3Mga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIHByb2Nlc3NvciBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK29mIGNvcmUgemVybyBhcmUgZGlzcGxheWVkIG9ubHkuIGNwdXBvd2VyIC0tY3B1IGFsbCBjcHVpbmZvIHdpbGwgc2hvdyB0aGUKK3NldHRpbmdzIG9mIGFsbCBjb3Jlcywgc2VlIGNwdXBvd2VyKDEpIGhvdyB0byBjaG9vc2Ugc3BlY2lmaWMgY29yZXMuCisKKy5TSCAiU0VFIEFMU08iCitPcHRpb25zIGFyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGluOgorCitjcHVwb3dlcigxKSwgY3B1cG93ZXItc2V0KDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItbW9uaXRvci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNmYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpAQCAtMCwwICsxLDE3OSBAQAorLlRIIENQVVBPV0VSXC1NT05JVE9SICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtbW9uaXRvciBcLSBSZXBvcnQgcHJvY2Vzc29yIGZyZXF1ZW5jeSBhbmQgaWRsZSBzdGF0aXN0aWNzCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgIlwtbCIKKworLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCIFsgIlwtbSA8bW9uMT4sIiBbICI8bW9uMj4sLi4uIiBdIF0KKy5SQiBbICJcLWkgc2Vjb25kcyIgXQorLmJyCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgWyAiXC1tIDxtb24xPiwiIFsgIjxtb24yPiwuLi4iIF0gXQorLlJCIGNvbW1hbmQKKy5icgorLlNIIERFU0NSSVBUSU9OCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCByZXBvcnRzIHByb2Nlc3NvciB0b3BvbG9neSwgZnJlcXVlbmN5IGFuZCBpZGxlIHBvd2VyCitzdGF0ZSBzdGF0aXN0aWNzLiBFaXRoZXIgXGZCY29tbWFuZFxmUCBpcyBmb3JrZWQgYW5kCitzdGF0aXN0aWNzIGFyZSBwcmludGVkIHVwb24gaXRzIGNvbXBsZXRpb24sIG9yIHN0YXRpc3RpY3MgYXJlIHByaW50ZWQgcGVyaW9kaWNhbGx5LgorCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCBpbXBsZW1lbnRzIGluZGVwZW5kZW50IHByb2Nlc3NvciBzbGVlcCBzdGF0ZSBhbmQKK2ZyZXF1ZW5jeSBjb3VudGVycy4gU29tZSBhcmUgcmV0cmlldmVkIGZyb20ga2VybmVsIHN0YXRpc3RpY3MsIHNvbWUgYXJlCitkaXJlY3RseSByZWFkaW5nIG91dCBoYXJkd2FyZSByZWdpc3RlcnMuIFVzZSBcLWwgdG8gZ2V0IGFuIG92ZXJ2aWV3IHdoaWNoIGFyZQorc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLgorCisuU0ggT3B0aW9ucworLlBQCitcLWwKKy5SUyA0CitMaXN0IGF2YWlsYWJsZSBtb25pdG9ycyBvbiB5b3VyIHN5c3RlbS4gQWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IGVhY2ggbW9uaXRvcgorYXJlIHNob3duOgorLlJTIDIKKy5JUCBcKGJ1CitUaGUgbmFtZSBpbiBxdW90YXRpb24gbWFya3Mgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgXC1tIHBhcmFtZXRlci4KKy5JUCBcKGJ1CitUaGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjb3VudGVycyB0aGUgbW9uaXRvciBzdXBwb3J0cyBpbiBicmFja2V0cy4KKy5JUCBcKGJ1CitUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGUgY291bnRlcnMgbWlnaHQgb3ZlcmZsb3csIGR1ZSB0bworaW1wbGVtZW50YXRpb24gY29uc3RyYWludHMuCisuSVAgXChidQorVGhlIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBjb3VudGVyIGFuZCBpdHMgcHJvY2Vzc29yIGhpZXJhcmNoeSBsZXZlbAorY292ZXJhZ2UgaW4gc3F1YXJlIGJyYWNrZXRzOgorLlJTIDQKKy5JUCBcKGJ1CitbVF0gXC0+IFRocmVhZAorLklQIFwoYnUKK1tDXSBcLT4gQ29yZQorLklQIFwoYnUKK1tQXSBcLT4gUHJvY2Vzc29yIFBhY2thZ2UgKFNvY2tldCkKKy5JUCBcKGJ1CitbTV0gXC0+IE1hY2hpbmUvUGxhdGZvcm0gd2lkZSBjb3VudGVyCisuUkUKKy5SRQorLlJFCisuUFAKK1wtbSA8bW9uMT4sPG1vbjI+LC4uLgorLlJTIDQKK09ubHkgZGlzcGxheSBzcGVjaWZpYyBtb25pdG9ycy4gVXNlIHRoZSBtb25pdG9yIHN0cmluZyhzKSBwcm92aWRlZCBieSBcLWwgb3B0aW9uLgorLlJFCisuUFAKK1wtaSBzZWNvbmRzCisuUlMgNAorTWVhc3VyZSBpbnRlcnZhbGwuCisuUkUKKy5QUAorY29tbWFuZAorLlJTIDQKK01lYXN1cmUgaWRsZSBhbmQgZnJlcXVlbmN5IGNoYXJhY3RlcmlzdGljcyBvZiBhbiBhcmJpdHJhcnkgY29tbWFuZC93b3JrbG9hZC4KK1RoZSBleGVjdXRhYmxlIFxmQmNvbW1hbmRcZlAgaXMgZm9ya2VkIGFuZCB1cG9uIGl0cyBleGl0LCBzdGF0aXN0aWNzIGdhdGhlcmVkIHNpbmNlIGl0IHdhcworZm9ya2VkIGFyZSBkaXNwbGF5ZWQuCisuUkUKKy5QUAorXC12CisuUlMgNAorSW5jcmVhc2UgdmVyYm9zaXR5IGlmIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkIHdpdGggdGhlIERFQlVHIG9wdGlvbiBzZXQuCisuUkUKKworLlNIIE1PTklUT1IgREVTQ1JJUFRJT05TCisuU1MgIklkbGVfU3RhdHMiCitTaG93cyBzdGF0aXN0aWNzIG9mIHRoZSBjcHVpZGxlIGtlcm5lbCBzdWJzeXN0ZW0uIFZhbHVlcyBhcmUgcmV0cmlldmVkIGZyb20KKy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1aWRsZS9zdGF0ZSovLgorVGhlIGtlcm5lbCB1cGRhdGVzIHRoZXNlIHZhbHVlcyBldmVyeSB0aW1lIGFuIGlkbGUgc3RhdGUgaXMgZW50ZXJlZCBvcgorbGVmdC4gVGhlcmVmb3JlIHRoZXJlIGNhbiBiZSBzb21lIGluYWNjdXJhY3kgd2hlbiBjb3JlcyBhcmUgaW4gYW4gaWRsZQorc3RhdGUgZm9yIHNvbWUgdGltZSB3aGVuIHRoZSBtZWFzdXJlIHN0YXJ0cyBvciBlbmRzLiBJbiB3b3JzdCBjYXNlIGl0IGNhbiBoYXBwZW4KK3RoYXQgb25lIGNvcmUgc3RheWVkIGluIGFuIGlkbGUgc3RhdGUgZm9yIHRoZSB3aG9sZSBtZWFzdXJlIHRpbWUgYW5kIHRoZSBpZGxlCitzdGF0ZSB1c2FnZSB0aW1lIGFzIGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwgZGlkIG5vdCBnZXQgdXBkYXRlZC4gSW4gdGhpcyBjYXNlCithIHN0YXRlIHJlc2lkZW5jeSBvZiAwIHBlcmNlbnQgaXMgc2hvd24gd2hpbGUgaXQgd2FzIDEwMC4KKworLlNTICJNcGVyZiIKK1RoZSBuYW1lIGNvbWVzIGZyb20gdGhlIGFwZXJmL21wZXJmIChhdmVyYWdlIGFuZCBtYXhpbXVtKSBNU1IgcmVnaXN0ZXJzIHVzZWQKK3doaWNoIGFyZSBhdmFpbGFibGUgb24gcmVjZW50IFg4NiBwcm9jZXNzb3JzLiBJdCBzaG93cyB0aGUgYXZlcmFnZSBmcmVxdWVuY3kKKyhpbmNsdWRpbmcgYm9vc3QgZnJlcXVlbmNpZXMpLgorVGhlIGZhY3QgdGhhdCBvbiBhbGwgcmVjZW50IGhhcmR3YXJlIHRoZSBtcGVyZiB0aW1lciBzdG9wcyB0aWNraW5nIGluIGFueSBpZGxlCitzdGF0ZSBpdCBpcyBhbHNvIHVzZWQgdG8gc2hvdyBDMCAocHJvY2Vzc29yIGlzIGFjdGl2ZSkgYW5kIEN4IChwcm9jZXNzb3IgaXMgaW4KK2FueSBzbGVlcCBzdGF0ZSkgdGltZXMuIFRoZXNlIGNvdW50ZXJzIGRvIG5vdCBoYXZlIHRoZSBpbmFjY3VyYWN5IHJlc3RyaWN0aW9ucwordGhlICJJZGxlX1N0YXRzIiBjb3VudGVycyBtYXkgc2hvdy4KK01heSB3b3JrIHBvb3JseSBvbiBMaW51eC0yLjYuMjAgdGhyb3VnaCAyLjYuMjksIGFzIHRoZSBcZkJhY3BpLWNwdWZyZXEgXGZQCitrZXJuZWwgZnJlcXVlbmN5IGRyaXZlciBwZXJpb2RpY2FsbHkgY2xlYXJlZCBhcGVyZi9tcGVyZiByZWdpc3RlcnMgaW4gdGhvc2UKK2tlcm5lbHMuCisKKy5TUyAiTmVoYWxlbSIgIlNhbmR5QnJpZGdlIgorSW50ZWwgQ29yZSBhbmQgUGFja2FnZSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RocmVhZHMgKGh5cGVydGhyZWFkZWQgY29yZXMpIG1heSBub3QgYmUgYWJsZSB0byBlbnRlciBkZWVwZXIgY29yZSBzdGF0ZXMgaWYKK2l0cyBzaWJsaW5nIGlzIHV0aWxpemVkLgorRGVlcGVzdCBwYWNrYWdlIHNsZWVwIHN0YXRlcyBtYXkgaW4gcmVhbGl0eSBzaG93IHVwIGFzIG1hY2hpbmUvcGxhdGZvcm0gd2lkZQorc2xlZXAgc3RhdGVzIGFuZCBjYW4gb25seSBiZSBlbnRlcmVkIGlmIGFsbCBjb3JlcyBhcmUgaWRsZS4gTG9vayB1cCBJbnRlbAorbWFudWFscyAoc29tZSBhcmUgcHJvdmlkZWQgaW4gdGhlIFJlZmVyZW5jZXMgc2VjdGlvbikgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworLlNTICJPbnRhcmlvIiAiTGlhbm8iCitBTUQgbGFwdG9wIGFuZCBkZXNrdG9wIHByb2Nlc3NvciAoZmFtaWx5IDEyaCBhbmQgMTRoKSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RoZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIHZpYSBQQ0kgYW5kIHRoZXJlZm9yZSBjYW4gc3RpbGwgYmUgcmVhZCBvdXQgd2hpbGUKK2NvcmVzIGhhdmUgYmVlbiBvZmZsaW5lZC4KKworVGhlcmUgaXMgb25lIHNwZWNpYWwgY291bnRlcjogTkJQMSAoTm9ydGggQnJpZGdlIFAxKS4KK1RoaXMgb25lIGFsd2F5cyByZXR1cm5zIDAgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIE5vcnRoIEJyaWRnZSBQMQorcG93ZXIgc3RhdGUgZ290IGVudGVyZWQgYXQgbGVhc3Qgb25jZSBkdXJpbmcgbWVhc3VyZSB0aW1lLgorQmVpbmcgYWJsZSB0byBlbnRlciBOQlAxIHN0YXRlIGFsc28gZGVwZW5kcyBvbiBncmFwaGljcyBwb3dlciBtYW5hZ2VtZW50LgorVGhlcmVmb3JlIHRoaXMgY291bnRlciBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgZ3JhcGhpY3MnIGRyaXZlcgorcG93ZXIgbWFuYWdlbWVudCBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgorCisuU0ggRVhBTVBMRVMKKworY3B1cG93ZXIgbW9uaXRvciAtbCIgbWF5IHNob3c6CisuUlMgNAorTW9uaXRvciAiTXBlcmYiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgOTIyMDAwMDAwIHMKKworICAgLi4uCisKK01vbml0b3IgIklkbGVfU3RhdHMiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgNDI5NDk2NzI5NSBzCisKKyAgIC4uLgorCisuUkUKK2NwdXBvd2VyIG1vbml0b3IgXC1tICJJZGxlX1N0YXRzLE1wZXJmIiBzY3AgL3RtcC90ZXN0IC9uZnMvdG1wCisKK01vbml0b3IgdGhlIHNjcCBjb21tYW5kLCBzaG93IGJvdGggTXBlcmYgYW5kIElkbGVfU3RhdHMgc3RhdGVzIGNvdW50ZXIKK3N0YXRpc3RpY3MsIGJ1dCBpbiBleGNoYW5nZWQgb3JkZXIuCisKKworCisuUkUKK0JlIGNhcmVmdWwgdGhhdCB0aGUgdHlwaWNhbCBjb21tYW5kIHRvIGZ1bGx5IHV0aWxpemUgb25lIENQVSBieSBkb2luZzoKKworY3B1cG93ZXIgbW9uaXRvciBjYXQgL2Rldi96ZXJvID4vZGV2L251bGwKKworRG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCwgYmVjYXVzZSB0aGUgbWVhc3VyZWQgb3V0cHV0IGlzIHJlZGlyZWN0ZWQgdG8KKy9kZXYvbnVsbC4gVGhpcyBjb3VsZCBnZXQgd29ya2Fyb3VuZGVkIGJ5IHB1dHRpbmcgdGhlIGxpbmUgaW50byBhbiBvd24sIHRpbnkKK3NoZWxsIHNjcmlwdC4gSGl0IENUUkxcLWMgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kIGFuZCBnZXQgdGhlIG1lYXN1cmUgb3V0cHV0CitkaXNwbGF5ZWQuCisKKy5TSCBSRUZFUkVOQ0VTCisiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcuKAmXMgR3VpZGUgKEJLREcpIGZvciBBTUQgRmFtaWx5IDE0aCBQcm9jZXNzb3JzIgoraHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMxNzAucGRmCisKKyJJbnRlbMKuIFR1cmJvIEJvb3N0IFRlY2hub2xvZ3kKK2luIEludGVswq4gQ29yZeKEoiBNaWNyb2FyY2hpdGVjdHVyZSAoTmVoYWxlbSkgQmFzZWQgUHJvY2Vzc29ycyIKK2h0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL3Byb2Nlc3Nvci9hcHBsbm90cy8zMjAzNTQucGRmCisKKyJJbnRlbMKuIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAorVm9sdW1lIDNCOiBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUiCitodHRwOi8vd3d3LmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscworCisuU0ggRklMRVMKKy50YQorLm5mCisvZGV2L2NwdS8qL21zcgorL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVpZGxlL3N0YXRlKi8uCisuZmkKKworLlNIICJTRUUgQUxTTyIKK3Bvd2VydG9wKDgpLCBtc3IoNCksIHZtc3RhdCg4KQorLlBQCisuU0ggQVVUSE9SUworLm5mCitXcml0dGVuIGJ5IFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CisKK05laGFsZW0sIFNhbmR5QnJpZGdlIG1vbml0b3JzIGFuZCBjb21tYW5kIHBhc3NpbmcKK2Jhc2VkIG9uIHR1cmJvc3RhdC44IGZyb20gTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTU0YTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItc2V0LjEKQEAgLTAsMCArMSwxMDMgQEAKKy5USCBDUFVQT1dFUlwtU0VUICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtc2V0IFwtIFNldCBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCBrZXJuZWwgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIHNldCBbIFwtYiBWQUwgXSBbIFwtcyBWQUwgXSBbIFwtbSBWQUwgXQorCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgc2V0IFxmUCBzZXRzIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBkaXJlY3RseSBhY2Nlc3NlcyBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK2FyZSBhcHBsaWVkIG9uIGFsbCBjb3Jlcy4gSG93IHRvIG1vZGlmeSBzaW5nbGUgY29yZSBjb25maWd1cmF0aW9ucyBpcworZGVzY3JpYmVkIGluIHRoZSBjcHVwb3dlcigxKSBtYW5wYWdlIGluIHRoZSBcLVwtY3B1IG9wdGlvbiBzZWN0aW9uLiBXaGV0aGVyIGFuCitvcHRpb24gYWZmZWN0cyB0aGUgd2hvbGUgc3lzdGVtIG9yIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY29yZXMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgT3B0aW9ucyBzZWN0aW9ucy4KKworVXNlIFxmQmNwdXBvd2VyIGluZm8gXGZQIHRvIHJlYWQgb3V0IGN1cnJlbnQgc2V0dGluZ3MgYW5kIHdoZXRoZXIgdGhleSBhcmUKK3N1cHBvcnRlZCBvbiB0aGUgc3lzdGVtIGF0IGFsbC4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1cLXBlcmYtYmlhcywgXC1iCisuUlMgNAorU2V0cyBhIHJlZ2lzdGVyIG9uIHN1cHBvcnRlZCBJbnRlbCBwcm9jZXNzb3JlIHdoaWNoIGFsbG93cyBzb2Z0d2FyZSB0byBjb252ZXkKK2l0cyBwb2xpY3kgZm9yIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHBlcmZvcm1hbmNlIHZlcnN1cyBlbmVyZ3kgc2F2aW5ncyB0bwordGhlICBwcm9jZXNzb3IuCisKK1RoZSByYW5nZSBvZiB2YWxpZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQorcGVyZm9ybWFuY2UgYW5kIDE1IGlzIG1heGltdW0gZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoZSBwcm9jZXNzb3IgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluIG1vZGVsLXNwZWNpZmljIHdheXMKK3doZW4gaXQgbXVzdCBzZWxlY3QgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZAorZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoaXMgcG9saWN5IGhpbnQgZG9lcyBub3Qgc3VwZXJzZWRlIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBzdGF0ZXMKKyhQLXN0YXRlcykgb3IgQ1BVIElkbGUgcG93ZXIgc3RhdGVzIChDLXN0YXRlcyksIGJ1dCBhbGxvd3MKK3NvZnR3YXJlIHRvIGhhdmUgaW5mbHVlbmNlIHdoZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSB1bmFibGUKK3RvIGV4cHJlc3MgYSBwcmVmZXJlbmNlLgorCitGb3IgZXhhbXBsZSwgdGhpcyBzZXR0aW5nIG1heSB0ZWxsIHRoZSBoYXJkd2FyZSBob3cKK2FnZ3Jlc3NpdmVseSBvciBjb25zZXJ2YXRpdmVseSB0byBjb250cm9sIGZyZXF1ZW5jeQoraW4gdGhlICJ0dXJibyByYW5nZSIgYWJvdmUgdGhlIGV4cGxpY2l0bHkgT1MtY29udHJvbGxlZAorUC1zdGF0ZSBmcmVxdWVuY3kgcmFuZ2UuICBJdCBtYXkgYWxzbyB0ZWxsIHRoZSBoYXJkd2FyZQoraG93IGFnZ3Jlc3NpdmVseSBpdCBzaG91bGQgZW50ZXIgdGhlIE9TIHJlcXVlc3RlZCBDLXN0YXRlcy4KKworVGhpcyBvcHRpb24gY2FuIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCBjb3JlcyBvbmx5IHZpYSB0aGUgXC1cLWNwdSBvcHRpb24sCitjcHVwb3dlcigxKS4KKworU2V0dGluZyB0aGUgcGVyZm9ybWFuY2UgYmlhcyB2YWx1ZSBvbiBvbmUgQ1BVIGNhbiBtb2RpZnkgdGhlIHNldHRpbmcgb24KK3JlbGF0ZWQgQ1BVcyBhcyB3ZWxsIChmb3IgZXhhbXBsZSBhbGwgQ1BVcyBvbiBvbmUgc29ja2V0KSwgYmVjYXVzZSBvZgoraGFyZHdhcmUgcmVzdHJpY3Rpb25zLgorVXNlIFxmQmNwdXBvd2VyIC1jIGFsbCBpbmZvIC1iXGZQIHRvIHZlcmlmeS4KKworVGhpcyBvcHRpb25zIG5lZWRzIHRoZSBtc3Iga2VybmVsIGRyaXZlciAoQ09ORklHX1g4Nl9NU1IpIGxvYWRlZC4KKy5SRQorLlBQCitcLVwtc2NoZWRcLW1jLCAgXC1tIFsgVkFMIF0KKy5SRQorXC1cLXNjaGVkXC1zbXQsIFwtcyBbIFZBTCBdCisuUlMgNAorXC1cLXNjaGVkXC1tYyB1dGlsaXplcyBjb3JlcyBpbiBvbmUgcHJvY2Vzc29yIHBhY2thZ2Uvc29ja2V0IGZpcnN0IGJlZm9yZQorcHJvY2Vzc2VzIGFyZSBzY2hlZHVsZWQgdG8gb3RoZXIgcHJvY2Vzc29yIHBhY2thZ2VzL3NvY2tldHMuCisKK1wtXC1zY2hlZFwtc210IHV0aWxpemVzIHRocmVhZCBzaWJsaW5ncyBvZiBvbmUgcHJvY2Vzc29yIGNvcmUgZmlyc3QgYmVmb3JlCitwcm9jZXNzZXMgYXJlIHNjaGVkdWxlZCB0byBvdGhlciBjb3Jlcy4KKworVGhlIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiBhbmQgcGVyZm9ybWFuY2UgKHBvc2l0aXYgb3IgbmVnYXRpdikgaGVhdmlseQorZGVwZW5kcyBvbiBwcm9jZXNzb3Igc3VwcG9ydCBmb3IgZGVlcCBzbGVlcCBzdGF0ZXMsIGZyZXF1ZW5jeSBzY2FsaW5nIGFuZAorZnJlcXVlbmN5IGJvb3N0IG1vZGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBvdGhlciB0aHJlYWQgc2libGluZ3MKK2FuZCBwcm9jZXNzb3IgY29yZXMuCisKK1Rha2VuIG92ZXIgZnJvbSBrZXJuZWwgZG9jdW1lbnRhdGlvbjoKKworQWRqdXN0IHRoZSBrZXJuZWwncyBtdWx0aS1jb3JlIHNjaGVkdWxlciBzdXBwb3J0LgorCitQb3NzaWJsZSB2YWx1ZXMgYXJlOgorLlJTIDIKKzAgLSBObyBwb3dlciBzYXZpbmcgbG9hZCBiYWxhbmNlIChkZWZhdWx0IHZhbHVlKQorCisxIC0gRmlsbCBvbmUgdGhyZWFkL2NvcmUvcGFja2FnZSBmaXJzdCBmb3IgbG9uZyBydW5uaW5nIHRocmVhZHMKKworMiAtIEFsc28gYmlhcyB0YXNrIHdha2V1cHMgdG8gc2VtaS1pZGxlIGNwdSBwYWNrYWdlIGZvciBwb3dlcgorc2F2aW5ncworLlJFCisKK3NjaGVkX21jX3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfTUMsIHdoaWNoIGlzCitpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfU01ULCB3aGljaAoraXMgaXRzZWxmIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisKK1RoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCit0aGF0IG9uZSBmaWxlIG1heSBiZSBwcmVzZW50IHdpdGhvdXQgdGhlIG90aGVyLgorCisuU0ggIlNFRSBBTFNPIgorY3B1cG93ZXItaW5mbygxKSwgY3B1cG93ZXItbW9uaXRvcigxKSwgcG93ZXJ0b3AoMSkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorXC1cLXBlcmZcLWJpYXMgcGFydHMgd3JpdHRlbiBieSBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CitUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY3NDFkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEKQEAgLTAsMCArMSw3MiBAQAorLlRIIENQVVBPV0VSICIxIiAiMDcvMDMvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlciBcLSBTaG93cyBhbmQgc2V0cyBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCB2YWx1ZXMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIFsgXC1jIGNwdWxpc3QgXSA8Y29tbWFuZD4gW0FSR1NdCisKKy5CIGNwdXBvd2VyIFwtdnxcLVwtdmVyc2lvbgorCisuQiBjcHVwb3dlciBcLWh8XC1cLWhlbHAKKworLlNIIERFU0NSSVBUSU9OCitcZkJjcHVwb3dlciBcZlAgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIHRvIGV4YW1pbmUgYW5kIHR1bmUgcG93ZXIgc2F2aW5nCityZWxhdGVkIGZlYXR1cmVzIG9mIHlvdXIgcHJvY2Vzc29yLgorCitUaGUgbWFucGFnZXMgb2YgdGhlIGNvbW1hbmRzIChjcHVwb3dlclwtPGNvbW1hbmQ+KDEpKSBwcm92aWRlIGRldGFpbGVkCitkZXNjcmlwdGlvbnMgb2Ygc3VwcG9ydGVkIGZlYXR1cmVzLiBSdW4gXGZCY3B1cG93ZXIgaGVscFxmUCB0byBnZXQgYW4gb3ZlcnZpZXcKK29mIHN1cHBvcnRlZCBjb21tYW5kcy4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1cLWhlbHAsIFwtaAorLlJTIDQKK1Nob3dzIHN1cHBvcnRlZCBjb21tYW5kcyBhbmQgZ2VuZXJhbCB1c2FnZS4KKy5SRQorLlBQCitcLVwtY3B1IGNwdWxpc3QsICBcLWMgY3B1bGlzdAorLlJTIDQKK09ubHkgc2hvdyBvciBzZXQgdmFsdWVzIGZvciBzcGVjaWZpYyBjb3Jlcy4KK1RoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGNvbW1hbmRzLCBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiB0aGUKK21hbnBhZ2VzIG9mIHRoZSBjb21tYW5kcy4KKworU29tZSBjb21tYW5kcyBhY2Nlc3MgYWxsIGNvcmVzICh0eXBpY2FsbHkgdGhlICpcLXNldCBjb21tYW5kcyksIHNvbWUgb25seQordGhlIGZpcnN0IGNvcmUgKHR5cGljYWxseSB0aGUgKlwtaW5mbyBjb21tYW5kcykgYnkgZGVmYXVsdC4KKworVGhlIHN5bnRheCBmb3IgPGNwdWxpc3Q+IGlzIGJhc2VkIG9uIGhvdyB0aGUga2VybmVsIGV4cG9ydHMgQ1BVIGJpdG1hc2tzIHZpYQorc3lzZnMgZmlsZXMuIFNvbWUgZXhhbXBsZXM6CisuUlMgNAorLlRQIDE2CitJbnB1dAorRXF1aXZhbGVudCB0bworLlRQCithbGwKK2FsbCBjb3JlcworLlRQCiswXC0zCiswLDEsMiwzCisuVFAKKzBcLTc6MgorMCwyLDQsNgorLlRQCisxLDMsNS03CisxLDMsNSw2LDcKKy5UUAorMFwtMzoyLDhcLTE1OjQKKzAsMiw4LDEyCQorLlJFCisuUkUKKy5QUAorXC1cLXZlcnNpb24sICBcLXYKKy5SUyA0CitQcmludCB0aGUgcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uIG51bWJlci4KKworLlNIICJTRUUgQUxTTyIKK2NwdXBvd2VyLXNldCgxKSwgY3B1cG93ZXItaW5mbygxKSwgY3B1cG93ZXItaWRsZSgxKSwKK2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQoMSksIGNwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvKDEpLCBjcHVwb3dlci1tb25pdG9yKDEpLAorcG93ZXJ0b3AoMSkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorXC1cLXBlcmZcLWJpYXMgcGFydHMgd3JpdHRlbiBieSBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CitUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vY3MucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9jcy5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjIyYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vY3MucG8KQEAgLTAsMCArMSw5NDQgQEAKKyMgdHJhbnNsYXRpb24gb2YgY3MucG8gdG8gQ3plY2gKKyMgQ3plY2ggdHJhbnNsYXRpb24gZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIEN6ZWNoIG1lc3NhZ2VzIGZvciBjcHVmcmVxdXRpbHMuCisjIENvcHlyaWdodCAoQykgMjAwNyBrYXZvbAorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjCisjIEthcmVsIFZvbG7DvSA8a2F2b2xAc2V6bmFtLmN6PiwgMjAwNywgMjAwOC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNzXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA2LTExIDE2OjI2KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEthcmVsIFZvbG7DvSA8a2F2b2xAc2V6bmFtLmN6PlxuIgorIkxhbmd1YWdlLVRlYW06IEN6ZWNoIDxkaXNrdXplQGxpc3RzLmwxMG4uY3o+XG4iCisiTGFuZ3VhZ2U6IGNzXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiAgbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xKSA/IDAgOiAobj49MiAmJiBuPD00KSA/IDEgOiAyO1xuIgorIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiIgorIkNoeWJ5IHYgcHJvZ3JhbXUgcHJvc8OtbSBobGFzdGUgbmEgJXMgKGFuZ2xpY2t5KS5cbiIKKyJDaHlieSB2IHDFmWVrbGFkdSBwcm9zw61tIGhsYXN0ZSBuYSBrYXZvbEBzZXpuYW0uY3ogKMSNZXNreSA7LSlcbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIk5lbHplIHpqaXN0aXQgcG/EjWV0IENQVSAoJXM6ICVzKSwgcMWZZWRwb2tsw6Fkw6Egc2UgMS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgIG1pbmltw6FsbsOtIGZyZWt2ZW5jZSBDUFUgLSBtYXhpbcOhbG7DrSBmcmVrdmVuY2UgQ1BVIC0gIHJlZ3Vsw6F0b3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgb3ZsYWRhxI06ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBwcm8gdGVudG8gQ1BVIG5lbsOtIGFrdGl2bsOtIMW+w6FkbsO9IHpuw6Ftw70gb3ZsYWRhxI0gY3B1ZnJlcVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgb3ZsYWRhxI06ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFUsIGt0ZXLDqSBtdXPDrSBtxJtuaXQgZnJla3ZlbmNpIHrDoXJvdmXFiDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVLCBrdGVyw6kgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYg6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBoYXJkd2Fyb3bDqSBtZXplOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBkb3N0dXBuw6kgZnJla3ZlbmNlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIGRvc3R1cG7DqSByZWd1bMOhdG9yeTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIHNvdcSNYXNuw6EgdGFrdGlrYTogZnJla3ZlbmNlIGJ5IG3Em2xhIGLDvXQgbWV6aSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGEgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiAgUmVndWzDoXRvciBcIiVzXCIgbcWvxb5lIHJvemhvZG5vdXQgamFrb3UgZnJla3ZlbmNpIHBvdcW+w610XG4iCisiICAgICAgICAgICAgICAgICAgICB2IHTEm2NodG8gbWV6w61jaC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBzb3XEjWFzbsOhIGZyZWt2ZW5jZSBDUFUgamUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiICAoemppxaF0xJtubyBoYXJkd2Fyb3bDvW0gdm9sw6Fuw61tKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIHN0YXRpc3Rpa2EgY3B1ZnJlcTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVcW+aXTDrTogY3B1ZnJlcS1pbmZvIFtwxZllcMOtbmHEjWVdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIlDFmWVww61uYcSNZTpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgVnlww63FoWUgbGFkaWPDrSBpbmZvcm1hY2VcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIGZyZWt2ZW5jaSwgbmEga3RlcsOpIENQVSBixJvFvsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBwb2RsZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gZnJla3ZlbmNpLCBuYSBrdGVyw6kgQ1BVIGLEm8W+w61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHogaGFyZHdhcmUgKGRvc3R1cG7DqSBqZW4gdcW+aXZhdGVsaSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIFpqaXN0w60gbWluaW3DoWxuw60gYSBtYXhpbcOhbG7DrSBkb3N0dXBub3UgZnJla3ZlbmNpIENQVSAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgWmppc3TDrSBha3Rpdm7DrSBvdmxhZGHEjSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSB0YWt0aWt1IGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgWmppc3TDrSBkb3N0dXBuw6kgcmVndWzDoXRvcnkgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgWmppc3TDrSwga3RlcsOpIENQVSBtdXPDrSBtxJtuaXQgZnJla3ZlbmNpIHrDoXJvdmXFiCAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgWmppc3TDrSwga3RlcsOpIENQVSBtdXPDrSBtxJtuaXQgZnJla3ZlbmNpIHrDoXJvdmXFiCAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiICAtcywgLS1zdGF0cyAgICAgICAgICBab2JyYXrDrSBzdGF0aXN0aWt1IGNwdWZyZXEsIGplLWxpIGRvc3R1cG7DoVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgWmppc3TDrSBtaW5pbcOhbG7DrSBhIG1heGltw6FsbsOtIGRvc3R1cG5vdSBmcmVrdmVuY2kgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBWeXDDrcWhZSBpbmZvcm1hY2UgdmUgZm9ybcOhdHUsIGpha8O9IHBvdcW+w612YWxvIHJvemhyYW7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgL3Byb2MvY3B1ZnJlcSB2IGtlcm5lbGVjaCDFmWFkeSAyLjQgYSDEjWFzbsOpIDIuNlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIFbDvXN0dXAgcGFyYW1ldHLFryAtZiwgLXcgYSAtcyB2IOKAnmxpZG1pIMSNaXRlbG7DqW3igJwgIgorImZvcm3DoXR1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgVnlww63FoWUgdHV0byBuw6Fwb3bEm2R1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIk5lbsOtLWxpIHphZMOhbiDFvsOhZG7DvSBwYXJhbWV0ciBuZWJvIGplLWxpIHphZMOhbiBwb3V6ZSBwxZllcMOtbmHEjSAtYywgLS1jcHUsICIKKyJqc291XG4iCisidnlwc8OhbnkgbGFkaWPDrSBpbmZvcm1hY2UsIGNvxb4gbcWvxb5lIGLDvXQgdcW+aXRlxI1uw6kgbmFwxZnDrWtsYWQgcMWZaSBobMOhxaFlbsOtIGNoeWIuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIk5lbsOtLWxpIHDFmWkgcG91xb5pdMOtIHDFmWVww61uYcSNxa8gb3puYcSNZW7DvWNoICogemFkw6FuIHBhcmFtZXRyIC1jIG5lYm8gLS1jcHUsXG4iCisicMWZZWRwb2tsw6Fkw6Egc2UgamVobyBob2Rub3RhIDAuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIlphZGFuw70gcGFyYW1ldHIgbmVtxa/FvmUgYsO9dCBwb3XFvml0IHrDoXJvdmXFiCBzIHDFmWVww61uYcSNZW0gLWMgbmVibyAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJOZWx6ZSB6YWRhdCB2w61jZSBuZcW+IGplZGVuIHBhcmFtZXRyIC1jIG5lYm8gLS1jcHVcbiIKKyJhbmVibyB2w61jZSBuZcW+IGplZGVuIHBhcmFtZXRyIHVyxI11asOtY8OtIHbDvXN0dXBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgIm5lcGxhdG7DvSBuZWJvIG5lem7DoW3DvSBwYXJhbWV0clxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAibmVsemUgYW5hbHl6b3ZhdCBDUFUgJWQsIHZ5cGFkw6EgdG8sIMW+ZSBuZW7DrSBwxZnDrXRvbWVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5enVqaSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVxb5pdMOtOiBjcHVmcmVxLXNldCBbcMWZZXDDrW5hxI1lXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgTm92w6EgbmVqbmnFvsWhw60gZnJla3ZlbmNlLCBrdGVyb3UgbcWvxb5lIHJlZ3Vsw6F0b3IgIgorInZ5YnJhdFxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgTm92w6EgbmVqdnnFocWhw60gZnJla3ZlbmNlLCBrdGVyb3UgbcWvxb5lIHJlZ3Vsw6F0b3IgIgorInp2b2xpdFxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9ycyBHT1YgIE5vdsO9IHJlZ3Vsw6F0b3IgY3B1ZnJlcVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgRnJla3ZlbmNlLCBrdGVyw6EgbcOhIGLDvXQgbmFzdGF2ZW5hLiBWecW+YWR1amUsIGFieSAiCisiYnlsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgdiBqw6FkxZllIG5haHLDoW4gcmVndWzDoXRvciDigJp1c2Vyc3BhY2XigJguXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgVnlww63FoWUgdHV0byBuw6Fwb3bEm2R1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIk5lbsOtLWxpIHDFmWkgcG91xb5pdMOtIHDFmWVww61uYcSNxa8gb3puYcSNZW7DvWNoICogemFkw6FuIHBhcmFtZXRyIC1jIG5lYm8gLS1jcHUsXG4iCisicMWZZWRwb2tsw6Fkw6Egc2UgamVobyBob2Rub3RhIDAuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJQb3puw6Fta3k6XG4iCisiMS4gVnluZWNow6Fuw60gcGFyYW1ldHJ1IC1jIG5lYm8gLS1jcHUgamUgZWt2aXZhbGVudG7DrSBqZWhvIG5hc3RhdmVuw60gbmEgMFxuIgorIjIuIFDFmWVww61uYcSNIC1mIG5lYm8gLS1mcmVxIG5lbcWvxb5lIGLDvXQgcG91xb5pdCB6w6Fyb3ZlxYggcyDFvsOhZG7DvW0gamluw71tIHZ5am1hIC0iCisiY1xuIgorIiAgIG5lYm8gLS1jcHVcbiIKKyIzLiBGcmVrdmVuY2UgKEZSRVEpIG1vaG91IGLDvXQgemFkw6FueSB2IEh6LCBrSHogKHbDvWNob3rDrSksIE1IeiwgR0h6IG5lYm8gVEh6XG4iCisiICAgcMWZaXBvamVuw61tIG7DoXp2dSBqZWRub3RreSBiZXogbWV6ZXJ5IG1lemkgxI3DrXNsZW0gYSBqZWRub3Rrb3VcbiIKKyIgICAoRlJFUSB2IGtIeiA9XiBIeiAqIDAsMDAxID0gXiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJDaHliYSBwxZlpIG5hc3Rhdm92w6Fuw60gbm92w71jaCBob2Rub3QuIE9idnlrbMOpIHByb2Jsw6lteTpcbiIKKyItIE3DoXRlIHBhdMWZacSNbsOhIGFkbWluaXN0csOhdG9yc2vDoSBwcsOhdmE/IChyb290PylcbiIKKyItIEplIHBvxb5hZG92YW7DvSByZWd1bMOhdG9yIGRvc3R1cG7DvSB2IGrDoWTFmWU/IChtb2Rwcm9iZT8pXG4iCisiLSBTbmHFvsOtdGUgc2UgbmFzdGF2aXQgbmVwbGF0bm91IHRha3Rpa3U/XG4iCisiLSBTbmHFvsOtdGUgc2UgbmFzdGF2aXQgdXLEjWl0b3UgZnJla3ZlbmNpLCBhbGUgbmVuw60gZG9zdHVwbsO9XG4iCisiICByZWd1bMOhdG9yIOKAmnVzZXJzcGFjZeKAmCwgbmFwxZnDrWtsYWQgcHJvdG/FvmUgbmVuw60gbmFocsOhbiB2IGrDoWTFmWUsXG4iCisiICBuZWJvIG5lbHplIG5hIHRvbXRvIGhhcmR3YXJlIG5hc3Rhdml0IHVyxI1pdG91IGZyZWt2ZW5jaT9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAibmV6bsOhbcO9IG5lYm8gbmVwb2Rwb3JvdmFuw70gQ1BVP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJwxZllcMOtbmHEjSAtZi8tLWZyZXEgbmVtxa/FvmUgYsO9dCBwb3XFvml0IHrDoXJvdmXFiFxuIgorInMgcMWZZXDDrW5hxI1lbSAtZC8tLW1pbiwgLXUvLS1tYXggbmVibyAtZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiTXVzw60gYsO9dCB6YWTDoW4gYWxlc3BvxYggamVkZW4gcMWZZXDDrW5hxI1cbiIKKyItZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCBuZWJvIC1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSB0YWt0aWt1IGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXp1amkgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgZG9zdHVwbsOpIGZyZWt2ZW5jZTogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG92bGFkYcSNOiAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVcW+aXTDrTogY3B1ZnJlcS1pbmZvIFtwxZllcMOtbmHEjWVdXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgVnlww63FoWUgbGFkaWPDrSBpbmZvcm1hY2VcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBWeXDDrcWhZSBpbmZvcm1hY2UgdmUgZm9ybcOhdHUsIGpha8O9IHBvdcW+w612YWxvIHJvemhyYW7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgL3Byb2MvY3B1ZnJlcSB2IGtlcm5lbGVjaCDFmWFkeSAyLjQgYSDEjWFzbsOpIDIuNlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJOZWx6ZSB6YWRhdCB2w61jZSBuZcW+IGplZGVuIHBhcmFtZXRyIC1jIG5lYm8gLS1jcHVcbiIKKyJhbmVibyB2w61jZSBuZcW+IGplZGVuIHBhcmFtZXRyIHVyxI11asOtY8OtIHbDvXN0dXBcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgxIzDrXNsbyBDUFUsIG8ga3RlcsOpbSBzZSBtYWrDrSB6amlzdGl0IGluZm9ybWFjZVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIMSMw61zbG8gQ1BVIHBybyBrdGVyw70gc2UgbcOhIHByb3bDqXN0IG5hc3RhdmVuw60gIgorI34gImNwdWZyZXFcbiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2RlLnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZGUucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjMDllNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2RlLnBvCkBAIC0wLDAgKzEsOTYxIEBACisjIEdlcm1hbiB0cmFuc2xhdGlvbnMgZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIEdlcm1hbiBtZXNzYWdlcyBmb3IgY3B1ZnJlcXV0aWxzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNwdWZyZXF1dGlscyAwMDZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDgtMDggMTc6MTgrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOT05FXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiQml0dGUgbWVsZGVuIFNpZSBGZWhsZXIgYW4gJXMuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICIiCisiS29ubnRlIG5pY2h0IGRpZSBBbnphaGwgZGVyIENQVXMgaGVyYXVzZmluZGVuICglcyA6ICVzKSwgbmVobWUgZGFoZXIgMSBhbi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICBtaW5pbWFsZSBDUFUtVGFrdGZyZXEuIC0gIG1heGltYWxlIENQVS1UYWt0ZnJlcS4gLSAgUmVnbGVyICBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgVHJlaWJlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIGtlaW4gb2RlciBuaWNodCBiZXN0aW1tYmFyZXIgY3B1ZnJlcS1UcmVpYmVyIGFrdGl2XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBUcmVpYmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBGb2xnZW5kZSBDUFVzIGxhdWZlbiBtaXQgZGVyIGdsZWljaGVuIEhhcmR3YXJlLVRha3RmcmVxdWVuejogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBEaWUgVGFrdGZyZXF1ZW56IGZvbGdlbmRlciBDUFVzIHdlcmRlbiBwZXIgU29mdHdhcmUga29vcmRpbmllcnQ6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiICBNYXhpbWFsZSBEYXVlciBlaW5lcyBUYWt0ZnJlcXVlbnp3ZWNoc2VsczogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBIYXJkd2FyZWJlZGluZ3RlIEdyZW56ZW4gZGVyIFRha3RmcmVxdWVuejogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgbfZnbGljaGUgVGFrdGZyZXF1ZW56ZW46ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgbfZnbGljaGUgUmVnbGVyOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgbW9tZW50YW5lIFRha3RpazogZGllIEZyZXF1ZW56IHNvbGwgaW5uZXJoYWxiICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgdW5kICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyIgIGxpZWdlbi4gRGVyIFJlZ2xlciBcIiVzXCIga2FubiBmcmVpIGVudHNjaGVpZGVuLFxuIgorIiAgICAgICAgICAgICAgICAgICAgd2VsY2hlIFRha3RmcmVxdWVueiBpbm5lcmhhbGIgZGllc2VyIEdyZW56ZSB2ZXJ3ZW5kZXQgIgorIndpcmQuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgbW9tZW50YW5lIFRha3RmcmVxdWVueiBpc3QgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiICAodmVyaWZpemllcnQgZHVyY2ggTmFjaGZyYWdlIGJlaSBkZXIgSGFyZHdhcmUpIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgU3RhdGlzdGlrOiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIkF1ZnJ1ZjogY3B1ZnJlcS1pbmZvIFtPcHRpb25lbl1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3B0aW9uZW46XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIiCisiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBFcnpldWd0IGRldGFpbGxpZXJ0ZSBJbmZvcm1hdGlvbmVuLCBoaWxmcmVpY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHp1bSBBdWZzcPxyZW4gdm9uIEZlaGxlcm5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgRmluZGV0IGRpZSBtb21lbnRhbmUgQ1BVLVRha3RmcnF1ZW56IGhlcmF1cyAobmFjaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgTWVpbnVuZyBkZXMgQmV0cmllYnNzeXN0ZW1zKSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgRmluZGV0IGRpZSBtb21lbnRhbmUgQ1BVLVRha3RmcmVxdWVueiBoZXJhdXNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICh2ZXJpZml6aWVydCBkdXJjaCBOYWNoZnJhZ2UgYmVpIGRlciBIYXJkd2FyZSlcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIFtudXIgZGVyIEFkbWluaXN0cmF0b3Iga2FubiBkaWVzIHR1bl0gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBGaW5kZXQgZGllIG1pbmltYWxlIHVuZCBtYXhpbWFsZSBUYWt0ZnJlcXVlbnogaGVyYXVzICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiICAtZCwgLS1kcml2ZXIgICAgICAgICBGaW5kZXQgZGVuIG1vbWVudGFuZW4gVHJlaWJlciBoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgRmluZGV0IGRpZSBtb21lbnRhbmUgVGFrdGlrIGhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBFcnpldWd0IGVpbmUgTGlzdGUgbWl0IHZlcmb8Z2JhcmVuIFJlZ2xlcm4gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRmluZGV0IGhlcmF1cywgd2VsY2hlIENQVXMgbWl0IGRlcnNlbGJlbiAiCisicGh5c2lrYWxpc2NoZW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIFRha3RmcmVxdWVueiBsYXVmZW4gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRmluZGV0IGhlcmF1cywgdm9uIHdlbGNoZW4gQ1BVcyBkaWUgVGFrdGZyZXF1ZW56ICIKKyJkdXJjaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUga29vcmRpbmllcnQgd2VyZGVuIG11c3MgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIgIC1zLCAtLXN0YXRzICAgICAgICAgIFplaWd0LCBzb2Zlcm4gbfZnbGljaCwgU3RhdGlzdGlrZW4g/GJlciBjcHVmcmVxIGFuLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBGaW5kZXQgZGllIG1heGltYWxlIERhdWVyIGVpbmVzIFRha3RmcmVxdWVuendlY2hzZWxzICIKKyJoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgRXJ6ZXVndCBJbmZvcm1hdGlvbmVuIGluIGVpbmVtIORobmxpY2hlbSBGb3JtYXQgenUgIgorImRlbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGVyIC9wcm9jL2NwdWZyZXEtRGF0ZWkgaW4gMi40LiB1bmQgZnL8aGVuIDIuNi5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbC1WZXJzaW9uZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIEZvcm1hdGllcnQgVGFrdGZyZXF1ZW56LSB1bmQgWmVpdGRhdWVyYW5nYWJlbiBpbiAiCisiYmVzc2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBsZXNiYXJlciBGb3JtIChNSHosIEdIejsgdXMsIG1zKVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIEdpYnQgZGllc2UgS3VyevxiZXJzaWNodCBhdXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiU29mZXJuIGtlaW4gYW5kZXJlciBQYXJhbWV0ZXIgYWxzICctYywgLS1jcHUnIGFuZ2VnZWJlbiB3aXJkLCBsaWVmZXJ0ICIKKyJkaWVzZXNcbiIKKyJQcm9ncmFtbSBJbmZvcm1hdGlvbmVuLCBkaWUgei5CLiB6dW0gQmVyaWNodGVuIHZvbiBGZWhsZXJuIG78dHpsaWNoIHNpbmQuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIkJlaSBkZW4gbWl0ICogbWFya2llcnRlbiBQYXJhbWV0ZXJuIHdpcmQgJy0tY3B1IDAnIGFuZ2Vub21tZW4sIHNvd2VpdCBuaWNodFxuIgorIm1pdHRlbHMgLWMgb2RlciAtLWNwdSBldHdhcyBhbmRlcmVzIGFuZ2VnZWJlbiB3aXJkXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIkRpZXNlIE9wdGlvbiBrYW5uIG5pY2h0IG1pdCBkZXIgLS1jcHUtT3B0aW9uIGtvbWJpbmllcnQgd2VyZGVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk1hbiBrYW5uIG5pY2h0IG1laHIgYWxzIGVpbmVuIC0tY3B1LVBhcmFtZXRlciB1bmQvb2RlciBtZWhyIGFscyBlaW5lblxuIgorImluZm9ybWF0aW9uc3NwZXppZmlzY2hlbiBQYXJhbWV0ZXIgZ2xlaWNoemVpdGlnIGFuZ2ViZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgInVuYmVrYW5udGVyIG9kZXIgZmFsc2NoZXIgUGFyYW1ldGVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICIiCisiS29ubnRlIG5pY2h0IGRpZSBDUFUgJWQgYW5hbHlzaWVyZW4sIGRhIHNpZSAoc2NoZWluYmFyPykgbmljaHQgZXhpc3RpZXJ0LlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNpZXJlIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIkF1ZnJ1ZjogY3B1ZnJlcS1zZXQgW09wdGlvbmVuXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV1ZSBtaW5pbWFsZSBUYWt0ZnJlcXVlbnosIGRpZSBkZXIgUmVnbGVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVzd+RobGVuIGRhcmZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldWUgbWF4aW1hbGUgVGFrdGZyZXF1ZW56LCBkaWUgZGVyIFJlZ2xlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1c3fkaGxlbiBkYXJmXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3JzIEdPViAgd2VjaHNsZSB6dSBSZWdsZXIgR09WXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzZXR6ZSBleGFrdGUgVGFrdGZyZXF1ZW56LiBCZW72dGlndCBkZW4gUmVnbGVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJzcGFjZScuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU2V0emUgV2VydGUgZvxyIGFsbGUgQ1BVcywgZGVyZW4gVGFrdGZyZXF1ZW56XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmViZWRpbmd0IGlkZW50aXNjaCBpc3QuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgR2lidCBkaWVzZSBLdXJ6/GJlcnNpY2h0IGF1c1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIiIKKyJCZWkgZGVuIG1pdCAqIG1hcmtpZXJ0ZW4gUGFyYW1ldGVybiB3aXJkICctLWNwdSAwJyBhbmdlbm9tbWVuLCBzb3dlaXQgbmljaHRcbiIKKyJtaXR0ZWxzIC1jIG9kZXIgLS1jcHUgZXR3YXMgYW5kZXJlcyBhbmdlZ2ViZW4gd2lyZFxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiSGlud2Vpc2U6XG4iCisiMS4gU29mZXJuIGtlaW4gLWMgb2RlciAtLWNwdS1QYXJhbWV0ZXIgYW5nZWdlYmVuIGlzdCwgd2lyZCAnLS1jcHUgMCdcbiIKKyIgICBhbmdlbm9tbWVuXG4iCisiMi4gRGVyIFBhcmFtZXRlciAtZiBiencuIC0tZnJlcSBrYW5uIG1pdCBrZWluZW0gYW5kZXJlbiBhbHMgZGVtIFBhcmFtZXRlclxuIgorIiAgIC1jIGJ6dy4gLS1jcHUga29tYmluaWVydCB3ZXJkZW5cbiIKKyIzLiBGUkVRdWVuemVuIGv2bm5lbiBpbiBIeiwga0h6IChTdGFuZGFyZCksIE1IeiwgR0h6IG9kZXIgVEh6IGVpbmdlZ2ViZW5cbiIKKyIgICB3ZXJkZW4sIGluZGVtIGRlciBXZXJ0IHVuZCB1bm1pdHRlbGJhciBhbnNjaGxpZd9lbmQgKG9obmUgTGVlcnplaWNoZW4hKVxuIgorIiAgIGRpZSBFaW5oZWl0IGFuZ2VnZWJlbiB3ZXJkZW4uIChCc3A6IDFHSHogKVxuIgorIiAgIChGUkVRdWVueiBpbiBrSHogPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkJlaW0gRWluc3RlbGxlbiBpc3QgZWluIEZlaGxlciBhdWZnZXRyZXRlbi4gVHlwaXNjaGUgRmVobGVycXVlbGxlbiBzaW5kOlxuIgorIi0gbmljaHQgYXVzcmVpY2hlbmRlIFJlY2h0ZSAoQWRtaW5pc3RyYXRvcilcbiIKKyItIGRlciBSZWdsZXIgaXN0IG5pY2h0IHZlcmb8Z2JhciBiencuIG5pY2h0IGdlbGFkZW5cbiIKKyItIGRpZSBhbmdlZ2ViZW5lIFRha3RpayBpc3QgaW5rb3JyZWt0XG4iCisiLSBlaW5lIHNwZXppZmlzY2hlIEZyZXF1ZW56IHd1cmRlIGFuZ2VnZWJlbiwgYWJlciBkZXIgUmVnbGVyICd1c2Vyc3BhY2UnXG4iCisiICBrYW5uIGVudHdlZGVyIGhhcmR3YXJlYmVkaW5ndCBuaWNodCBnZW51dHp0IHdlcmRlbiBvZGVyIGlzdCBuaWNodCBnZWxhZGVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgInVuYmVrYW5udGUgb2RlciBuaWNodCByZWdlbGJhcmUgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIkRlciAtZiBiencuIC0tZnJlcS1QYXJhbWV0ZXIga2FubiBuaWNodCBtaXQgZGVuIFBhcmFtZXRlcm4gLWQvLS1taW4sIC11Ly0tIgorIm1heFxuIgorIm9kZXIgLWcvLS1nb3Zlcm5vciBrb21iaW5pZXJ0IHdlcmRlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIkVzIG11c3MgbWluZGVzdGVucyBlaW4gUGFyYW1ldGVyIGF1cyAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCBvZGVyXG4iCisiLWcvLS1nb3Zlcm5vciBhbmdlZ2ViZW4gd2VyZGVuLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgRmluZGV0IGRpZSBtb21lbnRhbmUgVGFrdGlrIGhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5c2llcmUgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgbfZnbGljaGUgVGFrdGZyZXF1ZW56ZW46ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBUcmVpYmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiICBNYXhpbWFsZSBEYXVlciBlaW5lcyBUYWt0ZnJlcXVlbnp3ZWNoc2VsczogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIkF1ZnJ1ZjogY3B1ZnJlcS1pbmZvIFtPcHRpb25lbl1cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiIgorIiAgLWUsIC0tZGVidWcgICAgICAgICAgRXJ6ZXVndCBkZXRhaWxsaWVydGUgSW5mb3JtYXRpb25lbiwgaGlsZnJlaWNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB6dW0gQXVmc3D8cmVuIHZvbiBGZWhsZXJuXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgRXJ6ZXVndCBJbmZvcm1hdGlvbmVuIGluIGVpbmVtIORobmxpY2hlbSBGb3JtYXQgenUgIgorImRlbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGVyIC9wcm9jL2NwdWZyZXEtRGF0ZWkgaW4gMi40LiB1bmQgZnL8aGVuIDIuNi5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbC1WZXJzaW9uZW5cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTWFuIGthbm4gbmljaHQgbWVociBhbHMgZWluZW4gLS1jcHUtUGFyYW1ldGVyIHVuZC9vZGVyIG1laHIgYWxzIGVpbmVuXG4iCisiaW5mb3JtYXRpb25zc3BlemlmaXNjaGVuIFBhcmFtZXRlciBnbGVpY2h6ZWl0aWcgYW5nZWJlblxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBOdW1tZXIgZGVyIENQVSwg/GJlciBkaWUgSW5mb3JtYXRpb25lbiAiCisjfiAiaGVyYXVzZ2VmdW5kZW4gd2VyZGVuIHNvbGxlblxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIE51bW1lciBkZXIgQ1BVLCBkZXJlbiBUYWt0ZnJlcXVlbnotIgorI34gIkVpbnN0ZWxsdW5nXG4iCisjfiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VyZGVuIHNvbGxcbiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2ZyLnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1YWQyMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2ZyLnBvCkBAIC0wLDAgKzEsOTQ3IEBACisjIEZyZW5jaCB0cmFuc2xhdGlvbnMgZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwNCBUSEUgUEFDS0FHRSdTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIyBEdWNyb3QgQnJ1bm8gPGR1Y3JvdEBwb3VwaW5vdS5vcmc+LCAyMDA0LgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNwdWZyZXF1dGlscyAwLjEtcHJlMlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0xMS0xNyAxNTo1MysxMDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCcnVubyBEdWNyb3QgPGR1Y3JvdEBwb3VwaW5vdS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTk9ORVxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIlZldWlsbGV6IHJhcHBvcnRleiBsZXMgZXJyZXVycyBldCBsZXMgYm9ndWVzIOAgJXMsIHMnaWwgdm91cyBwbGFpdC5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIkTpdGVybWluYXRpb24gZHUgbm9tYnJlIGRlIENQVXMgKCVzIDogJXMpIGltcG9zc2libGUuICBBc3N1bWUgMVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgRnLpcXVlbmNlIENQVSBtaW5pbWFsZSAtIEZy6XF1ZW5jZSBDUFUgbWF4aW1hbGUgIC0gculndWxhdGV1clxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBwaWxvdGUgOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgcGFzIGRlIHBpbG90ZXMgY3B1ZnJlcSByZWNvbm51IHBvdXIgY2UgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBwaWxvdGUgOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZSBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgbGltaXRhdGlvbiBtYXTpcmllbGxlIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgcGxhZ2UgZGUgZnLpcXVlbmNlIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBy6Wd1bGF0ZXVycyBkaXNwb25pYmxlcyA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICB0YWN0aXF1ZSBhY3R1ZWxsZSA6IGxhIGZy6XF1ZW5jZSBkb2l0IOp0cmUgY29tcHJpc2UgZW50cmUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiBldCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiTGUgculndWxhdGV1ciBcIiVzXCIgZXN0IGxpYnJlIGRlIGNob2lzaXIgbGEgdml0ZXNzZVxuIgorIiAgICAgICAgICAgICAgICAgIGRhbnMgY2V0dGUgcGxhZ2UgZGUgZnLpcXVlbmNlcy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBsYSBmculxdWVuY2UgYWN0dWVsbGUgZGUgY2UgQ1BVIGVzdCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgKHbpcmlmaekgcGFyIHVuIGFwcGVsIGRpcmVjdCBkdSBtYXTpcmllbCkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBkZXMgc3RhdGlzdGlxdWUgY29uY2VybmFudCBjcHVmcmVxOiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzYWdlIDogY3B1ZnJlcS1pbmZvIFtvcHRpb25zXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcHRpb25zIDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgQWZmaWNoZXIgbGVzIGluZm9ybWF0aW9ucyBkZSBk6WJvZ3VhZ2VcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgT2J0ZW5pciBsYSBmculxdWVuY2UgYWN0dWVsbGUgZHUgQ1BVIHNlbG9uIGxlIHBvaW50XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkZSB2dWUgZHUgY29ldXIgZHUgc3lzdOhtZSBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBPYnRlbmlyIGxhIGZy6XF1ZW5jZSBhY3R1ZWxsZSBkdSBDUFUgZGlyZWN0ZW1lbnQgcGFyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBsZSBtYXTpcmllbCAoZG9pdCDqdHJlIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgQWZmaWNoZSBsZXMgZnLpcXVlbmNlcyBtaW5pbWFsZXMgZXQgbWF4aW1hbGVzIGR1IENQVSAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgQWZmaWNoZSBsZSBwaWxvdGUgY3B1ZnJlcSB1dGlsaXPpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEFmZmljaGUgbGEgdGFjdGlxdWUgYWN0dWVsbGUgZGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiIgorIiAgLWcsIC0tZ292ZXJub3JzICAgICAgQWZmaWNoZSBsZXMgculndWxhdGV1cnMgZGlzcG9uaWJsZXMgZGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgIEFmZmljaGUgcXVlbHMgc29udCBsZXMgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICAgQWZmaWNoZSBxdWVscyBzb250IGxlcyBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiIKKyIgIC1zLCAtLXN0YXRzICAgICAgICAgIEluZGlxdWUgZGVzIHN0YXRpc3RpcXVlcyBjb25jZXJuYW50IGNwdWZyZXEsIHNpXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkaXNwb25pYmxlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgQWZmaWNoZSBsZXMgZnLpcXVlbmNlcyBtaW5pbWFsZXMgZXQgbWF4aW1hbGVzIGR1IENQVSAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgQWZmaWNoZSBsZXMgaW5mb3JtYXRpb25zIGVuIHV0aWxpc2FudCBsJ2ludGVyZmFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZm91cm5pZSBwYXIgL3Byb2MvY3B1ZnJlcSwgcHLpc2VudGUgZGFucyBsZXMgIgorInZlcnNpb25zXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZXQgbGVzIGFuY2llbm5lcyB2ZXJzaW9ucyAyLjYgZHUgbm95YXVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICAgYWZmaWNoZSBkYW5zIHVuIGZvcm1hdCBsaXNpYmxlIHBvdXIgdW4gaHVtYWluXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgcG91ciBsZXMgb3B0aW9ucyAtZiwgLXcgZXQgLXMgKE1IeiwgR0h6KVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIGFmZmljaGUgbCdhaWRlLW3pbW9pcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiUGFyIGTpZmF1dCwgbGVzIGluZm9ybWF0aW9ucyBkZSBk6WJvZ3VhZ2Ugc2Vyb250IGFmZmljaOllcyBzaSBhdWN1blxuIgorImFyZ3VtZW50LCBvdSBiaWVuIHNpIHNldWxlbWVudCBsJ2FyZ3VtZW50IC1jICgtLWNwdSkgZXN0IGRvbm7pLCBhZmluIGRlXG4iCisiZmFjaWxpdGVyIGxlcyByYXBwb3J0cyBkZSBib2d1ZXMgcGFyIGV4ZW1wbGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICJMZXMgYXJndW1lbnRzIGF2ZWMgdW4gKiB1dGlsaXNlcm9udCBsZSBDUFUgMCBzaSAtYyAoLS1jcHUpIGVzdCBvbWlzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIkNldHRlIG9wdGlvbiBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiT24gbmUgcGV1dCBpbmRpcXVlciBwbHVzIGQndW4gcGFyYW3odHJlIC0tY3B1LCB0b3V0IGNvbW1lIGwnb24gbmUgcGV1dFxuIgorInNw6WNpZmllciBwbHVzIGQndW4gYXJndW1lbnQgZGUgZm9ybWF0YWdlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJvcHRpb24gaW52YWxpZGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgImFuYWx5c2UgZHUgQ1BVICVkIGltcG9zc2libGUgcHVpc3F1J2lsIG5lIHNlbWJsZSBwYXMg6nRyZSBwculzZW50XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5c2UgZHUgQ1BVICVkIDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlVzYWdlIDogY3B1ZnJlcS1zZXQgW29wdGlvbnNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICAgbm91dmVsbGUgZnLpcXVlbmNlIG1pbmltYWxlIGR1IENQVSDgIHV0aWxpc2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhciBsZSBy6Wd1bGF0ZXVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICAgbm91dmVsbGUgZnLpcXVlbmNlIG1heGltYWxlIGR1IENQVSDgIHV0aWxpc2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhciBsZSBy6Wd1bGF0ZXVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgYWN0aXZlIGxlIHLpZ3VsYXRldXIgR09WXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBmaXhlIGxhIGZy6XF1ZW5jZSBkdSBwcm9jZXNzZXVyIOAgRlJFUS4gSWwgZmF1dFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZSBsZSBy6Wd1bGF0ZXVyIKsgdXNlcnNwYWNlILsgc29pdCBkaXNwb25pYmxlIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGFjdGl26S5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBhZmZpY2hlIGwnYWlkZS1t6W1vaXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiTGVzIGFyZ3VtZW50cyBhdmVjIHVuICogdXRpbGlzZXJvbnQgbGUgQ1BVIDAgc2kgLWMgKC0tY3B1KSBlc3Qgb21pc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiUmVtYXJxdWUgOlxuIgorIjEuIExlIENQVSBudW3pcm8gMCBzZXJhIHV0aWxpc+kgcGFyIGTpZmF1dCBzaSAtYyAob3UgLS1jcHUpIGVzdCBvbWlzIDtcbiIKKyIyLiBsJ2FyZ3VtZW50IC1mIEZSRVEgKG91IC0tZnJlcSBGUkVRKSBuZSBwZXV0IOp0cmUgdXRpbGlz6SBxdSdhdmVjIC0tY3B1IDtcbiIKKyIzLiBvbiBwb3VycmEgcHLpY2lzZXIgbCd1bml06SBkZXMgZnLpcXVlbmNlcyBlbiBwb3N0Zml4YW50IHNhbnMgYXVjdW5lICIKKyJlc3BhY2VcbiIKKyIgICBsZXMgdmFsZXVycyBwYXIgaHosIGtIeiAocGFyIGTpZmF1dCksIE1IeiwgR0h6IG91IFRIelxuIgorIiAgIChrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiRW4gYWp1c3RhbnQgbGVzIG5vdXZlYXV4IHBhcmFt6HRyZXMsIHVuZSBlcnJldXIgZXN0IGFwcGFydWUuIExlcyBzb3VyY2VzXG4iCisiZCdlcnJldXIgdHlwaXF1ZSBzb250IDpcbiIKKyItIGRyb2l0IGQnYWRtaW5pc3RyYXRpb24gaW5zdWZmaXNhbnQgKOp0ZXMtdm91cyByb290ID8pIDtcbiIKKyItIGxlIHLpZ3VsYXRldXIgY2hvaXNpIG4nZXN0IHBhcyBkaXNwb25pYmxlLCBvdSBiaWVuIG4nZXN0IHBhcyBkaXNwb25pYmxlICIKKyJlblxuIgorIiAgdGFudCBxdWUgbW9kdWxlIG5veWF1IDtcbiIKKyItIGxhIHRhY3RpcXVlIG4nZXN0IHBhcyBkaXNwb25pYmxlIDtcbiIKKyItIHZvdXMgdm91bGV6IHV0aWxpc2VyIGwnb3B0aW9uIC1mLy0tZnJlcSwgbWFpcyBsZSBy6Wd1bGF0ZXVyIKsgdXNlcnNwYWNlILtcbiIKKyIgIG4nZXN0IHBhcyBkaXNwb25pYmxlLCBwYXIgZXhlbXBsZSBwYXJjZSBxdWUgbGUgbWF06XJpZWwgbmUgbGUgc3VwcG9ydGVcbiIKKyIgIHBhcywgb3UgYmllbiBuJ2VzdCB0b3V0IHNpbXBsZW1lbnQgcGFzIGNoYXJn6S5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAiQ1BVIGluY29ubnUgb3Ugbm9uIHN1cHBvcnTpID9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisibCdvcHRpb24gLWYvLS1mcmVxIGVzdCBpbmNvbXBhdGlibGUgYXZlYyBsZXMgb3B0aW9ucyAtZC8tLW1pbiwgLXUvLS1tYXggZXRcbiIKKyItZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiTCd1biBkZSBjZXMgcGFyYW3odHJlcyBlc3Qgb2JsaWdhdG9pcmUgOiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCBldFxuIgorIi1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEFmZmljaGUgbGEgdGFjdGlxdWUgYWN0dWVsbGUgZGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5c2UgZHUgQ1BVICVkIDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIHBsYWdlIGRlIGZy6XF1ZW5jZSA6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBwaWxvdGUgOiAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNhZ2UgOiBjcHVmcmVxLWluZm8gW29wdGlvbnNdXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgQWZmaWNoZXIgbGVzIGluZm9ybWF0aW9ucyBkZSBk6WJvZ3VhZ2VcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBBZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZW4gdXRpbGlzYW50IGwnaW50ZXJmYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBmb3VybmllIHBhciAvcHJvYy9jcHVmcmVxLCBwculzZW50ZSBkYW5zIGxlcyAiCisidmVyc2lvbnNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBldCBsZXMgYW5jaWVubmVzIHZlcnNpb25zIDIuNiBkdSBub3lhdVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJPbiBuZSBwZXV0IGluZGlxdWVyIHBsdXMgZCd1biBwYXJhbeh0cmUgLS1jcHUsIHRvdXQgY29tbWUgbCdvbiBuZSBwZXV0XG4iCisic3DpY2lmaWVyIHBsdXMgZCd1biBhcmd1bWVudCBkZSBmb3JtYXRhZ2VcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgTnVt6XJvIGR1IENQVSBwb3VyIGxlcXVlbCBsJ2luZm9ybWF0aW9uIHNlcmEgIgorI34gImFmZmljaOllXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVt6XJvIGR1IENQVSDgIHByZW5kcmUgZW4gY29tcHRlIHBvdXIgbGVzXG4iCisjfiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlbWVudHNcbiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2l0LnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vaXQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwYzRkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2l0LnBvCkBAIC0wLDAgKzEsOTYxIEBACisjIEl0YWxpYW4gdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjIE1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBnbWFpbC5jb20+LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAuM1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wOC0xNSAxMjowMCswOTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IE5PTkVcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiUGVyIGZhdm9yZSwgY29tdW5pY2FyZSBlcnJvcmkgZSBtYWxmdW56aW9uYW1lbnRpIGEgJXMuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBpbCBudW1lcm8gZGkgQ1BVICglczogJXMpLCBhc3N1bW8gc2lhIDFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICBmcmVxdWVuemEgbWluaW1hIENQVSAgIC0gIGZyZXF1ZW56YSBtYXNzaW1hIENQVSAgLSAgZ2VzdG9yZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBtb2R1bG8gJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIG5lc3N1biBtb2R1bG8gbyBtb2R1bG8gY3B1ZnJlcSBzY29ub3NjaXV0byBwZXIgcXVlc3RhIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgbW9kdWxvICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVSBjaGUgb3BlcmFubyBhbGxhIHN0ZXNzYSBmcmVxdWVuemEgaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVIGNoZSDDqCBuZWNlc3NhcmlvIHNpYW5vIGNvb3JkaW5hdGUgZGFsIHNvZnR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiAgbGF0ZW56YSBtYXNzaW1hIGR1cmFudGUgbGEgdHJhbnNpemlvbmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgbGltaXRpIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBmcmVxdWVuemUgZGlzcG9uaWJpbGk6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgZ2VzdG9yaSBkaXNwb25pYmlsaTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIGdlc3RvcmUgYXR0dWFsZTogbGEgZnJlcXVlbnphIGRldmUgbWFudGVuZXJzaSB0cmEgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiBlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyIgSWwgZ2VzdG9yZSBcIiVzXCIgcHXDsiBkZWNpZGVyZSBxdWFsZSB2ZWxvY2l0w6AgdXNhcmVcbiIKKyIgICAgICAgICAgICAgICAgICBpbiBxdWVzdG8gaW50ZXJ2YWxsby5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBsYSBmcmVxdWVuemEgYXR0dWFsZSBkZWxsYSBDUFUgw6ggIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiIChvdHRlbnV0YSBkYSB1bmEgY2hpYW1hdGEgZGlyZXR0YSBhbGwnaGFyZHdhcmUpIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiBzdGF0aXN0aWNoZSBjcHVmcmVxOiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcHppb25pXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcHppb25pOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYXppb25pIGRpIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIE1vc3RyYSBsYSBmcmVxdWVuemEgYXR0dWFsZSBkZWxsYSBDUFUgc2Vjb25kb1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaWwgbW9kdWxvIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIE1vc3RyYSBsYSBmcmVxdWVuemEgYXR0dWFsZSBkZWxsYSBDUFUgbGVnZ2VuZG9sYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGFsbCdoYXJkd2FyZSAoZGlzcG9uaWJpbGUgc29sbyBwZXIgbCd1dGVudGUgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmEgbGUgZnJlcXVlbnplIG1pbmltYSBlIG1hc3NpbWEgcG9zc2liaWxpIHBlciAiCisibGEgQ1BVICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIiCisiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmEgaWwgbW9kdWxvIGNwdWZyZXEgZGVsIGtlcm5lbCBpbiB1c28gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiIKKyIgIC1wLCAtLXBvbGljeSAgICAgICAgIE1vc3RyYSBpbCBnZXN0b3JlIGNwdWZyZXEgYXR0dWFsbWVudGUgaW4gdXNvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluYSBpIGdlc3RvcmkgY3B1ZnJlcSBkaXNwb25pYmlsaSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmEgcXVhbGkgQ1BVIG9wZXJhbm8gYWxsYSBzdGVzc2EgZnJlcXVlbnphICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluYSBxdWFsaSBDUFUgZGV2b25vIGF2ZXJlIGxhIGZyZXF1ZW56YVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0YSBkYWwgc29mdHdhcmUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgTW9zdHJhIGxlIHN0YXRpc3RpY2hlIHNlIGRpc3BvbmliaWxpXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluYSBsYSBsYXRlbnphIG1hc3NpbWEgZHVyYW50ZSBpIGNhbWJpIGRpICIKKyJmcmVxdWVuemEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgU3RhbXBhIGxlIGluZm9ybWF6aW9uaSBjb21lIHNlIHByb3Zlbmlzc2VybyBkYWxsYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNjaWEgY3B1ZnJlcSAvcHJvYy8gcHJlc2VudGUgbmVpIGtlcm5lbFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGVkIGkgcHJpbWkgMi42XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBmb3JtYXR0YSBsJ291dHB1dCBkZWxsZSBvcHppb25pIC1mLCAtdywgLXMgZSAteSBpbiAiCisibWFuaWVyYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbGVnZ2liaWxlIGRhIHVuIGVzc2VyZSB1bWFub1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFN0YW1wYSBxdWVzdGEgc2NoZXJtYXRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlNlIG5vbiB2aWVuZSBzcGVjaWZpY2F0YSBuZXNzdW5hIG9wemlvbmUgbyB2aWVuZSBzcGVjaWZpY2F0YSBzb2xvIGwnb3B6aW9uZSAtIgorImMsIC0tY3B1LFxuIgorImxlIGluZm9ybWF6aW9uaSBkaSBkZWJ1ZyBwZXIgY3B1ZnJlcSBzYXJhbm5vIHV0aWxpIGFkIGVzZW1waW8gYSByaXBvcnRhcmUgaSAiCisiYnVnLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJQZXIgbGUgb3B6aW9uaSBzZWduYWxhdGUgY29uICosIG9tZXR0ZXJlIGwnb3B6aW9uZSAtYyBvIC0tY3B1IMOoIGNvbWUgIgorInNwZWNpZmljYXJsYVxuIgorImNvbiBpbCB2YWxvcmUgMFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTCdvcHppb25lIHNwZWNpZmljYXRhIGEgcXVlc3RvIHByb2dyYW1tYSBub24gcHXDsiBlc3NlcmUgY29tYmluYXRhIGNvbiAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJOb24gw6ggcG9zc2liaWxlIHNwZWNpZmljYXJlIHBpw7kgZGkgdW5hIHZvbHRhIGwnb3B6aW9uZSAtLWNwdSBlL29cbiIKKyJzcGVjaWZpY2FyZSBwacO5IGRpIHVuIHBhcmFtZXRybyBkaSBvdXRwdXQgc3BlY2lmaWNvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJvcHppb25lIHNjb25vc2NpdXRhIG8gbm9uIHZhbGlkYVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYW5hbGl6emFyZSBsYSBDUFUgJWQgcG9pY2jDqSBub24gc2VtYnJhIGVzc2VyZSBwcmVzZW50ZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNpIGRlbGxhIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1zZXQgW29wemlvbmldXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBsYSBudW92YSBmcmVxdWVuemEgbWluaW1hIGNoZSBpbCBnZXN0b3JlIGNwdWZyZXEgIgorInB1w7Igc2NlZ2xpZXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBsYSBudW92YSBmcmVxdWVuemEgbWFzc2ltYSBjaGUgaWwgZ2VzdG9yZSBjcHVmcmVxICIKKyJwdcOyIHNjZWdsaWVyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG51b3ZvIGdlc3RvcmUgY3B1ZnJlcVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWNhIGxhIGZyZXF1ZW56YSBhIGN1aSBpbXBvc3RhcmUgbGEgQ1BVLlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIMOIIG5lY2Vzc2FyaW8gY2hlIGlsIGdlc3RvcmUgdXNlcnNwYWNlIHNpYSAiCisiZGlzcG9uaWJpbGUgZSBjYXJpY2F0b1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIE1vZGlmaWNhIHR1dHRlIGxlIENQVSBjb29yZGluYXRlIGRhbGwnaGFyZHdhcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBTdGFtcGEgcXVlc3RhIHNjaGVybWF0YVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIiIKKyJQZXIgbGUgb3B6aW9uaSBzZWduYWxhdGUgY29uICosIG9tZXR0ZXJlIGwnb3B6aW9uZSAtYyBvIC0tY3B1IMOoIGNvbWUgIgorInNwZWNpZmljYXJsYVxuIgorImNvbiBpbCB2YWxvcmUgMFxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiTm90ZTpcbiIKKyIxLiBPbWV0dGVyZSBsJ29wemlvbmUgLWMgbyAtLWNwdSDDqCBlcXVpdmFsZW50ZSBhIGltcG9zdGFybG8gYSAwXG4iCisiMi4gbCdvcHppb25lIC1mIEZSRVEsIC0tZnJlcSBGUkVRIG5vbiBwdcOyIGVzc2VyZSBzcGVjaWZpY2F0YSBjb24gYWx0cmUgIgorIm9wemlvbmlcbiIKKyIgICBhZCBlY2NlemlvbmUgZGVsbCdvcHppb25lIC1jIENQVSBvIC0tY3B1IENQVVxuIgorIjMuIGxlIEZSRVF1ZW56ZSBwb3Nzb25vIGVzc2VyZSBzcGVjdWZpY2F0ZSBpbiAgSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCAiCisib3IgVEh6XG4iCisiICAgcG9zdHBvbmVuZG8gbCd1bml0w6AgZGkgbWlzdXJhIGFsIHZhbG9yZSBzZW56YSBuZXNzdW5vIHNwYXppbyBmcmEgbG9yb1xuIgorIiAgIChGUkVRdWVuemEgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIlNpIHNvbm8gdmVyaWZpY2F0aSBkZWdsaSBlcnJvcmkgaW1wb3N0YW5kbyBpIG51b3ZpIHZhbG9yaS5cbiIKKyJBbGN1bmkgZXJyb3JpIGNvbXVuaSBwb3Nzb25vIGVzc2VyZTpcbiIKKyItIEhhaSBpIG5lY2Vzc2FyaSBkaXJpdHRpIGRpIGFtbWluaXN0cmF6aW9uZT8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSWwgZ2VzdG9yZSBjaGUgaGFpIHJpY2hpZXN0byDDqCBkaXNwb25pYmlsZSBlIGNhcmljYXRvP1xuIgorIi0gU3RhaSBwcm92YW5kbyBhZCBpbXBvc3RhcmUgdW5hIHBvbGl0aWNhIGRpIGdlc3Rpb25lIG5vbiB2YWxpZGE/XG4iCisiLSBTdGFpIHByb3ZhbmRvIGEgaW1wb3N0YXJlIHVuYSBzcGVjaWZpY2EgZnJlcXVlbnphIG1hIGlsIGdlc3RvcmVcbiIKKyIgIHVzZXJzcGFjZSBub24gw6ggZGlzcG9uaWJpbGUsIHBlciBlc2VtcGlvIGEgY2F1c2EgZGVsbCdoYXJkd2FyZVxuIgorIiAgY2hlIG5vbiBzdXBwb3J0YSBmcmVxdWVuemUgZmlzc2UgbyBhIGNhdXNhIGRlbCBmYXR0byBjaGVcbiIKKyIgIGlsIGdlc3RvcmUgdXNlcnNwYWNlIG5vbiDDqCBjYXJpY2F0bz9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAiQ1BVIGVycmF0YSwgc2Nvbm9zY2l1dGEgbyBub24gZ2VzdGl0YT9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisibCdvcHppb25lIC1mLy0tZnJlcSBub24gcHXDsiB2ZW5pcmUgY29tYmluYXRhIGNvbiBpIHBhcmFtZXRyaVxuIgorIiAtZC8tLW1pbiwgLXUvLS1tYXggbyAtZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiQWxtZW5vIHVuYSBkZWxsZSBvcHppb25pIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBlIC1nLy0tZ292ZXJub3JcbiIKKyJkZXZlIGVzc2VyZSBzcGVjaWZpY2F0YVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKyIgIC1wLCAtLXBvbGljeSAgICAgICAgIE1vc3RyYSBpbCBnZXN0b3JlIGNwdWZyZXEgYXR0dWFsbWVudGUgaW4gdXNvICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzaSBkZWxsYSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBmcmVxdWVuemUgZGlzcG9uaWJpbGk6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBtb2R1bG8gJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiAgbGF0ZW56YSBtYXNzaW1hIGR1cmFudGUgbGEgdHJhbnNpemlvbmU6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3B6aW9uaV1cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYXppb25pIGRpIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgU3RhbXBhIGxlIGluZm9ybWF6aW9uaSBjb21lIHNlIHByb3Zlbmlzc2VybyBkYWxsYVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNjaWEgY3B1ZnJlcSAvcHJvYy8gcHJlc2VudGUgbmVpIGtlcm5lbFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGVkIGkgcHJpbWkgMi42XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgc3BlY2lmaWNhcmUgcGnDuSBkaSB1bmEgdm9sdGEgbCdvcHppb25lIC0tY3B1IGUvb1xuIgorInNwZWNpZmljYXJlIHBpw7kgZGkgdW4gcGFyYW1ldHJvIGRpIG91dHB1dCBzcGVjaWZpY29cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgTnVtZXJvIGRpIENQVSBwZXIgbGEgcXVhbGUgb3R0ZW5lcmUgbGUgIgorI34gImluZm9ybWF6aW9uaVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWVybyBkaSBDUFUgcGVyIGxhIHF1YWxlIG1vZGlmaWNhcmUgbGUgIgorI34gImltcG9zdGF6aW9uaVxuIgorCisjLCBmdXp6eQorI34gbXNnaWQgIiAgQ1BVcyB3aGljaCBjb29yZGluYXRlIHNvZnR3YXJlIGZyZXF1ZW5jeSByZXF1aXJlbWVudHM6ICIKKyN+IG1zZ3N0ciAiIgorI34gIiAgQ1BVIHBlciBsZSBxdWFsaSBlYCBuZWNlc3NhcmlvIGNhbWJpYXJlIGxhIGZyZXF1ZW56YSAiCisjfiAiY29udGVtcG9yYW5lYW1lbnRlOiAiCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9wdC5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL3B0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGY1MjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9wdC5wbwpAQCAtMCwwICsxLDk1NyBAQAorIyBCcmF6aWxpYW4gUG9ydHVndWVzZSB0cmFuc2xhdGlvbnMgZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwOCBUSEUgY3B1ZnJlcXV0aWxzJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjIENsYXVkaW8gRWR1YXJkbyA8Y2xhdWRpb2VkZHlAZ21haWwuY29tPiwgMjAwOS4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNwdWZyZXF1dGlscyAwMDRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDYtMTQgMjI6MTYtMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQ2xhdWRpbyBFZHVhcmRvIDxjbGF1ZGlvZWRkeUBnbWFpbC5jb20+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiUmVwb3J0ZSBlcnJvcyBlIGJ1Z3MgcGFyYSAlcywgcG9yIGZhdm9yLlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvbnRhciBvIG7Dum1lcm8gZGUgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmRvIDFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgICBmcmVxdcOqbmNpYSBtw61uaW5hIGRvIENQVSAgLSAgZnJlcXXDqm5jaWEgbcOheGltYSBkbyBDUFUgIC0gICIKKyJyZWd1bGFkb3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgZHJpdmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgbmVuaHVtIG91IGRyaXZlciBkbyBjcHVmcmVxIGRlY29uaGVjaWRvIGVzdMOhIGF0aXZvIG5lc3NlIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgZHJpdmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFVzIHF1ZSByb2RhbSBuYSBtZXNtYSBmcmVxdcOqbmNpYSBkZSBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFVzIHF1ZSBwcmVjaXNhbSB0ZXIgc3VhcyBmcmVxdcOqbmNpYXMgY29vcmRlbmFkYXMgcG9yIHNvZnR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiAgbWFpb3IgbGF0w6puY2lhIGRlIHRyYW5zacOnw6NvOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGxpbWl0ZXMgZG8gaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIG7DrXZlaXMgZGUgZnJlcXXDqm5jaWEgZGlzcG9uw612ZWlzOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIHJlZ3VsYWRvcmVzIGRvIGNwdWZyZXEgZGlzcG9uw612ZWlzOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgcG9sw610aWNhIGRlIGZyZXF1w6puY2lhIGF0dWFsIGRldmUgZXN0YXIgZW50cmUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiBlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJPIHJlZ3VsYWRvciBcIiVzXCIgZGV2ZSBkZWNpZGlyIHF1YWwgdmVsb2NpZGFkZSB1c2FyXG4iCisiICAgICAgICAgICAgICAgICAgZGVudHJvIGRlc3NlIGxpbWl0ZS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBmcmVxdcOqbmNpYSBhdHVhbCBkbyBDUFUgw6kgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiIChkZWNsYXJhZG8gcG9yIGNoYW1hZGEgYW8gaGFyZHdhcmUpIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgc3RhdHVzIGRvIGNwdWZyZXE6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcMOnw7Vlc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3DDp8O1ZXM6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZGUgZGVidWdcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgT2J0ZW0gYSBmcmVxdcOqbmNpYSBuYSBxdWFsIG8gQ1BVIHJvZGEgbm8gbW9tZW50bywgZGUgIgorImFjb3Jkb1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29tIG8gbsO6Y2xlbyBkbyBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBPYnRlbSBhIGZyZXF1w6puY2lhIG5hIHF1YWwgbyBDUFUgZXN0w6Egb3BlcmFuZG8gbm8gIgorIm1vbWVudG8sXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBhdHJhdsOpcyBkZSBsZWl0dXJhIG5vIGhhcmR3YXJlIChkaXNwb27DrXZlbCBzb21lbnRlICIKKyJwYXJhIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5hIGEgZnJlcXXDqm5jaWEgbcOtbmltYSBlIG3DoXhpbWEgZG8gQ1BVICIKKyJwZXJtaXRpZGEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiIKKyIgIC1kLCAgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmEgbyBkcml2ZXIgZG8ga2VybmVsIGRvIGNwdWZyZXEgdXNhZG8gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiIKKyItLXAsIC0tcG9saWN5ICAgICAgICAgT2J0ZW0gYSBwb2zDrXRpY2EgZG8gY3B1ZnJlcSBlbSB1c28gbm8gbW9tZW50byAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiIgorIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5hIHJlZ3VsYWRvcmVzIGRvIGNwdWZyZXEgZGlzcG9uw612ZWlzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluYSBxdWFpcyBDUFVzIHJvZGFtIG5hIG1lc21hIGZyZXF1w6puY2lhIGRlICIKKyJoYXJkd2FyZSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmEgcXVhaXMgQ1BVcyBwcmVjaXNhbSB0ZXIgc3VhcyBmcmVxdcOqbmNpYXNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkZW5hZGFzIHBvciBzb2Z0d2FyZSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiICAtcywgLS1zdGF0cyAgICAgICAgICBNb3N0cmEgZXN0YXTDrXN0aWNhcyBkbyBjcHVmcmVxIHNlIGRpc3BvbsOtdmVpc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmEgYSBsYXTDqm5jaWEgbcOheGltYSBuYXMgdHJvY2FzIGRlIGZyZXF1w6puY2lhICIKKyJkbyBDUFUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkbyB0aXBvIHByb3ZpZGEgcGVsYSBpbnRlcmZhY2UgLyIKKyJwcm9jL2NwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGVtIGtlcm5lbHMgMi40LiBlIG1haXMgcmVjZW50ZXMgMi42XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBzYcOtZGEgbGVnw612ZWwgcGFyYSBodW1hbm9zIHBhcmEgb3MgcGFyw6JtZXRyb3MgLWYsIC13LCAiCisiLXMgZSAteVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgLWgsIC0taGVscCAgICAgICAgICAgSW1wcmltZSBlc3NhIHRlbGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiU2UgbmVuaHVtIGFyZ3VtZW50byBvdSBzb21lbnRlIG8gcGFyw6JtZXRybyAtYywgLS1jcHUgw6kgZGFkbywgaW5mb3JtYcOnw6NvIGRlICIKKyJkZWJ1ZyBzb2JyZVxuIgorIm8gY3B1ZnJlcSDDqSBtb3N0cmFkYSwgbyBxdWUgw6kgw7p0aWwgcG9yIGV4ZW1wbG8gcGFyYSByZXBvcnRhciBidWdzLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJQYXJhIG9zIGFyZ3VtZW50b3MgbWFyY2Fkb3MgY29tICosIG9taXRpciBvIGFyZ3VtZW50byAtYyBvdSAtLWNwdSDDqVxuIgorImVxdWl2YWxlbnRlIGEgc2V0w6EtbG8gY29tbyB6ZXJvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJPIGFyZ3VtZW50byB1c2FkbyBwcmEgZXNzYSBmZXJyYW1lbnRhIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSB1bSAiCisiYXJndW1lbnRvIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIlZvY8OqIG7Do28gcG9kZSBlc3BlY2lmaWNhciBtYWlzIGRvIHF1ZSB1bSBwYXLDom1ldHJvIC0tY3B1IGUvb3VcbiIKKyJtYWlzIGRvIHF1ZSB1bSBhcmd1bWVudG8gZGUgc2HDrWRhIGVzcGVjw61maWNvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJhcmd1bWVudG8gaW52w6FsaWRvIG91IGRlc2NvbmhlY2lkb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorIm7Do28gZm9pIHBvc3PDrXZlbCBhbmFsaXNhciBvIENQVSAlIGrDoSBxdWUgbyBtZXNtbyBwYXJlY2UgbsOjbyBlc3RhciBwcmVzZW50ZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNhbmRvIG8gQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLXNldCBbb3DDp8O1ZXNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBub3ZhIGZyZXF1w6puY2lhIG3DrW5pbWEgZG8gQ1BVIHF1ZSBvIHJlZ3VsYWRvciAiCisiZGV2ZSBzZWxlY2lvbmFyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBub3ZhIGZyZXF1w6puY2lhIG3DoXhpbWEgZG8gQ1BVIHF1ZSBvIHJlZ3VsYWRvciAiCisiZGV2ZSBlc2NvbGhlclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5vdm8gcmVndWxhZG9yIGRvIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIGZyZXF1w6puY2lhIGVzcGVjw61maWNhIHBhcmEgc2VyIHNldGFkYS4gTmVjZXNzaXRhICIKKyJxdWUgbyByZWd1bGFkb3IgZW1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBuw612ZWwgZGUgdXN1w6FyaW8gZXN0ZWphIGRpc3BvbsOtdmVsIGUgY2FycmVnYWRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgTW9kaWZpY2EgdG9kb3Mgb3MgQ1BVcyByZWxhY2lvbmFkb3MgYW8gaGFyZHdhcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgLWgsIC0taGVscCAgICAgICAgICAgTW9zdHJhIGVzc2EgdGVsYVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIiIKKyJQYXJhIG9zIGFyZ3VtZW50b3MgbWFyY2Fkb3MgY29tICosIG9taXRpciBvIGFyZ3VtZW50byAtYyBvdSAtLWNwdSDDqVxuIgorImVxdWl2YWxlbnRlIGEgc2V0w6EtbG8gY29tbyB6ZXJvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJOb3RhczpcbiIKKyIxLiBPbWl0aXIgbyBhcmd1bWVudG8gLWMgb3IgLS1jcHUgw6kgZXF1aXZhbGVudGUgYSBzZXTDoS1sbyBjb21vIHplcm9cbiIKKyIyLiBPIHBhcsOibWV0cm8gLWYgRlJFUSwgLS1mcmVxIEZSRVEgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIHF1YWxxdWVyICIKKyJvdXRybyBwYXLDom1ldHJvXG4iCisiICAgZXhjZXRvIGNvbSBvIHBhcsOibWV0cm8gLWMgQ1BVLCAtLWNwdSBDUFVcbiIKKyIzLiBGUkVRdcOqbmNpYXMgcG9kZW0gc2VyIHVzYWRhcyBlbSBIeiwga0h6IChwYWRyw6NvKSwgTUh6LCBHSHosIG8gVEh6XG4iCisiICAgY29sb2NhbmRvIG8gbm9tZSBkZXNlamFkbyBkYSB1bmlkYWRlIGFww7NzIG8gdmFsb3IsIHNlbSBxdWFscXVlciBlc3Bhw6dvXG4iCisiICAgKEZSRVF1w6puY2lhIGVtIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJFcnJvIGFvIHNldGFyIG5vdm9zIHZhbG9yZXMuIEVycm9zIGNvbXVuczpcbiIKKyItIFZvY8OqIHRlbSBkaXJlaXRvcyBhZG1pbmlzdHJhdGl2b3MgbmVjZXNzw6FyaW9zPyAoc3VwZXItdXN1w6FyaW8/KVxuIgorIi0gTyByZWd1bGFkb3IgcXVlIHZvY8OqIHJlcXVlc2l0b3UgZXN0w6EgZGlzcG9uw612ZWwgZSBmb2kgXCJtb2Rwcm9iZWRcIj9cbiIKKyItIFRlbnRhbmRvIHNldGFyIHVtYSBwb2zDrXRpY2EgaW52w6FsaWRhP1xuIgorIi0gVGVudGFuZG8gc2V0YXIgdW1hIGZyZXF1w6puY2lhIGVzcGVjw61maWNhLCBtYXMgbyByZWd1bGFkb3IgZW0gbsOtdmVsIGRlICIKKyJ1c3XDoXJpbyBuw6NvIGVzdMOhIGRpc3BvbsOtdmVsLFxuIgorIiAgIHBvciBleGVtcGxvIGRldmlkbyBhbyBoYXJkd2FyZSBxdWUgbsOjbyBwb2RlIHNlciBzZXRhZG8gcHJhIHVtYSBmcmVxdcOqbmNpYSAiCisiZXNwZWPDrWZpY2FcbiIKKyIgICBvdSBwb3JxdWUgbyByZWd1bGFkb3IgZW0gbsOtdmVsIGRlIHVzdcOhcmlvIG7Do28gZm9pIGNhcnJlZ2Fkbz9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAiQ1BVIGVycmFkbywgZGVzY29uaGVjaWRvIG91IGluZXNwZXJhZG8/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIm8gcGFyw6JtZXRybyAtZi8tLWZyZXEgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIG9zIHBhcsOibWV0cm9zIC1kLy0tbWluLCAtIgorInUvLS1tYXggb3VcbiIKKyItZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiUGVsbyBtZW5vcyB1bSBwYXLDom1ldHJvIGVudHJlIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBlXG4iCisiLWcvLS1nb3Zlcm5vciBkZXZlIHNlciB1c2Fkb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKyItLXAsIC0tcG9saWN5ICAgICAgICAgT2J0ZW0gYSBwb2zDrXRpY2EgZG8gY3B1ZnJlcSBlbSB1c28gbm8gbW9tZW50byAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2FuZG8gbyBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBuw612ZWlzIGRlIGZyZXF1w6puY2lhIGRpc3BvbsOtdmVpczogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIGRyaXZlcjogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiAgbWFpb3IgbGF0w6puY2lhIGRlIHRyYW5zacOnw6NvOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29ww6fDtWVzXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZGUgZGVidWdcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRvIHRpcG8gcHJvdmlkYSBwZWxhIGludGVyZmFjZSAvIgorInByb2MvY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZW0ga2VybmVscyAyLjQuIGUgbWFpcyByZWNlbnRlcyAyLjZcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiVm9jw6ogbsOjbyBwb2RlIGVzcGVjaWZpY2FyIG1haXMgZG8gcXVlIHVtIHBhcsOibWV0cm8gLS1jcHUgZS9vdVxuIgorIm1haXMgZG8gcXVlIHVtIGFyZ3VtZW50byBkZSBzYcOtZGEgZXNwZWPDrWZpY29cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgbsO6bWVybyBkbyBDUFUgc29icmUgbyBxdWFsIGFzIGluZm9yw6fDtWVzIGRldmVtIHNlciAiCisjfiAiZGV0ZXJtaW5hZGFzXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbsO6bWVybyBkbyBDUFUgb25kZSBhcyBjb25maWd1cmHDp8O1ZXMgZG8gY3B1ZnJlcSAiCisjfiAidsOjbyBzZXIgbW9kaWZpY2FkYXNcbiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2J1aWx0aW4uaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2J1aWx0aW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA0OTZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvYnVpbHRpbi5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgQlVJTFRJTl9ICisjZGVmaW5lIEJVSUxUSU5fSAorCitleHRlcm4gaW50IGNtZF9zZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX2ZyZXFfc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9mcmVxX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX2lkbGVfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfbW9uaXRvcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtaW5mby5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5NTNjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtaW5mby5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlICJjcHVmcmVxLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKKyNkZWZpbmUgTElORV9MRU4gMTAKKworc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9jcHVzKHZvaWQpCit7CisJRklMRSAqZnA7CisJY2hhciB2YWx1ZVtMSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGNwdW5yID0gMDsKKworCWZwID0gZm9wZW4oIi9wcm9jL3N0YXQiLCAiciIpOworCWlmICghZnApIHsKKwkJcHJpbnRmKF8oIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIiksICIvcHJvYy9zdGF0Iiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKCFmZW9mKGZwKSkgeworCQlpZiAoIWZnZXRzKHZhbHVlLCBMSU5FX0xFTiwgZnApKQorCQkJY29udGludWU7CisJCXZhbHVlW0xJTkVfTEVOIC0gMV0gPSAnXDAnOworCQlpZiAoc3RybGVuKHZhbHVlKSA8IChMSU5FX0xFTiAtIDIpKQorCQkJY29udGludWU7CisJCWlmIChzdHJzdHIodmFsdWUsICJjcHUgIikpCisJCQljb250aW51ZTsKKwkJaWYgKHNzY2FuZih2YWx1ZSwgImNwdSVkICIsICZjcHVucikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1bnIgPiByZXQpCisJCQlyZXQgPSBjcHVucjsKKwl9CisJZmNsb3NlKGZwKTsKKworCS8qIGNwdSBjb3VudCBzdGFydHMgZnJvbSAwLCBvbiBlcnJvciByZXR1cm4gMSAoVVApICovCisJcmV0dXJuIHJldCArIDE7Cit9CisKKworc3RhdGljIHZvaWQgcHJvY19jcHVmcmVxX291dHB1dCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHUsIG5yX2NwdXM7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IG1pbl9wY3RnID0gMDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BjdGcgPSAwOworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7CisKKwlwcmludGYoXygiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIikpOworCisJbnJfY3B1cyA9IGNvdW50X2NwdXMoKTsKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdXM7IGNwdSsrKSB7CisJCXBvbGljeSA9IGNwdWZyZXFfZ2V0X3BvbGljeShjcHUpOworCQlpZiAoIXBvbGljeSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHMoY3B1LCAmbWluLCAmbWF4KSkgeworCQkJbWF4ID0gMDsKKwkJfSBlbHNlIHsKKwkJCW1pbl9wY3RnID0gKHBvbGljeS0+bWluICogMTAwKSAvIG1heDsKKwkJCW1heF9wY3RnID0gKHBvbGljeS0+bWF4ICogMTAwKSAvIG1heDsKKwkJfQorCQlwcmludGYoIkNQVSUzZCAgICAlOWx1IGtIeiAoJTNkICUlKSAgLSAgJTlsdSBrSHogKCUzZCAlJSkgIC0gICVzXG4iLAorCQkJY3B1ICwgcG9saWN5LT5taW4sIG1heCA/IG1pbl9wY3RnIDogMCwgcG9saWN5LT5tYXgsCisJCQltYXggPyBtYXhfcGN0ZyA6IDAsIHBvbGljeS0+Z292ZXJub3IpOworCisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3BlZWQodW5zaWduZWQgbG9uZyBzcGVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChzcGVlZCA+IDEwMDAwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDAwMDsKKwkJaWYgKHRtcCA+PSA1MDAwKQorCQkJc3BlZWQgKz0gMTAwMDA7CisJCXByaW50ZigiJXUuJTAydSBHSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQvMTAwMDAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKHNwZWVkJTEwMDAwMDApLzEwMDAwKSk7CisJfSBlbHNlIGlmIChzcGVlZCA+IDEwMDAwMCkgeworCQl0bXAgPSBzcGVlZCAlIDEwMDA7CisJCWlmICh0bXAgPj0gNTAwKQorCQkJc3BlZWQgKz0gMTAwMDsKKwkJcHJpbnRmKCIldSBNSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQgLyAxMDAwKSk7CisJfSBlbHNlIGlmIChzcGVlZCA+IDEwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDA7CisJCWlmICh0bXAgPj0gNTApCisJCQlzcGVlZCArPSAxMDA7CisJCXByaW50ZigiJXUuJTAxdSBNSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQvMTAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKHNwZWVkJTEwMDApLzEwMCkpOworCX0gZWxzZQorCQlwcmludGYoIiVsdSBrSHoiLCBzcGVlZCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2R1cmF0aW9uKHVuc2lnbmVkIGxvbmcgZHVyYXRpb24pCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoZHVyYXRpb24gPiAxMDAwMDAwKSB7CisJCXRtcCA9IGR1cmF0aW9uICUgMTAwMDA7CisJCWlmICh0bXAgPj0gNTAwMCkKKwkJCWR1cmF0aW9uICs9IDEwMDAwOworCQlwcmludGYoIiV1LiUwMnUgbXMiLCAoKHVuc2lnbmVkIGludCkgZHVyYXRpb24vMTAwMDAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKGR1cmF0aW9uJTEwMDAwMDApLzEwMDAwKSk7CisJfSBlbHNlIGlmIChkdXJhdGlvbiA+IDEwMDAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDA7CisJCWlmICh0bXAgPj0gNTAwKQorCQkJZHVyYXRpb24gKz0gMTAwMDsKKwkJcHJpbnRmKCIldSB1cyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbiAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCWR1cmF0aW9uICs9IDEwMDsKKwkJcHJpbnRmKCIldS4lMDF1IHVzIiwgKCh1bnNpZ25lZCBpbnQpIGR1cmF0aW9uLzEwMDApLAorCQkJKCh1bnNpZ25lZCBpbnQpIChkdXJhdGlvbiUxMDAwKS8xMDApKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbHUgbnMiLCBkdXJhdGlvbik7CisKKwlyZXR1cm47Cit9CisKKy8qIC0tYm9vc3QgLyAtYiAqLworCitzdGF0aWMgaW50IGdldF9ib29zdF9tb2RlKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHN1cHBvcnQsIGFjdGl2ZSwgYl9zdGF0ZXMgPSAwLCByZXQsIHBzdGF0ZV9ubywgaTsKKwkvKiBUb0RvOiBNYWtlIHRoaXMgbW9yZSBnbG9iYWwgKi8KKwl1bnNpZ25lZCBsb25nIHBzdGF0ZXNbTUFYX0hXX1BTVEFURVNdID0gezAsfTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiAwOworCisJcmV0ID0gY3B1ZnJlcV9oYXNfYm9vc3Rfc3VwcG9ydChjcHUsICZzdXBwb3J0LCAmYWN0aXZlLCAmYl9zdGF0ZXMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRmKF8oIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIgorCQkJCSIgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIpLCBjcHUpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKwkgICBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKwkgICBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKwkgICAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorCSovCisKKwlwcmludGYoXygiICBib29zdCBzdGF0ZSBzdXBwb3J0OlxuIikpOworCisJcHJpbnRmKF8oIiAgICBTdXBwb3J0ZWQ6ICVzXG4iKSwgc3VwcG9ydCA/IF8oInllcyIpIDogXygibm8iKSk7CisJcHJpbnRmKF8oIiAgICBBY3RpdmU6ICVzXG4iKSwgYWN0aXZlID8gXygieWVzIikgOiBfKCJubyIpKTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5ID49IDB4MTApIHsKKwkJcmV0ID0gZGVjb2RlX3BzdGF0ZXMoY3B1LCBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHksIGJfc3RhdGVzLAorCQkJCSAgICAgcHN0YXRlcywgJnBzdGF0ZV9ubyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXByaW50ZihfKCIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIiksIGJfc3RhdGVzKTsKKwkJcHJpbnRmKF8oIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iKSwgcHN0YXRlX25vKTsKKwkJZm9yIChpID0gMDsgaSA8IHBzdGF0ZV9ubzsgaSsrKSB7CisJCQlpZiAoaSA8IGJfc3RhdGVzKQorCQkJCXByaW50ZihfKCIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpIgorCQkJCQkgIlxuIiksIGksIHBzdGF0ZXNbaV0pOworCQkJZWxzZQorCQkJCXByaW50ZihfKCIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIiksCisJCQkJICAgICAgIGkgLSBiX3N0YXRlcywgcHN0YXRlc1tpXSk7CisJCX0KKwl9IGVsc2UgaWYgKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfSEFTX1RVUkJPX1JBVElPKSB7CisJCWRvdWJsZSBiY2xrOworCQl1bnNpZ25lZCBsb25nIGxvbmcgaW50ZWxfdHVyYm9fcmF0aW8gPSAwOworCQl1bnNpZ25lZCBpbnQgcmF0aW87CisKKwkJLyogQW55IHdheSB0byBhdXRvZGV0ZWN0IHRoaXMgPyAqLworCQlpZiAoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9JU19TTkIpCisJCQliY2xrID0gMTAwLjAwOworCQllbHNlCisJCQliY2xrID0gMTMzLjMzOworCQlpbnRlbF90dXJib19yYXRpbyA9IG1zcl9pbnRlbF9nZXRfdHVyYm9fcmF0aW8oY3B1KTsKKwkJZHByaW50ICgiICAgIFJhdGlvOiAweCVsbHggLSBiY2xrOiAlZlxuIiwKKwkJCWludGVsX3R1cmJvX3JhdGlvLCBiY2xrKTsKKworCQlyYXRpbyA9IChpbnRlbF90dXJib19yYXRpbyA+PiAyNCkgJiAweEZGOworCQlpZiAocmF0aW8pCisJCQlwcmludGYoXygiICAgICUuMGYgTUh6IG1heCB0dXJibyA0IGFjdGl2ZSBjb3Jlc1xuIiksCisJCQkgICAgICAgcmF0aW8gKiBiY2xrKTsKKworCQlyYXRpbyA9IChpbnRlbF90dXJib19yYXRpbyA+PiAxNikgJiAweEZGOworCQlpZiAocmF0aW8pCisJCQlwcmludGYoXygiICAgICUuMGYgTUh6IG1heCB0dXJibyAzIGFjdGl2ZSBjb3Jlc1xuIiksCisJCQkgICAgICAgcmF0aW8gKiBiY2xrKTsKKworCQlyYXRpbyA9IChpbnRlbF90dXJib19yYXRpbyA+PiA4KSAmIDB4RkY7CisJCWlmIChyYXRpbykKKwkJCXByaW50ZihfKCIgICAgJS4wZiBNSHogbWF4IHR1cmJvIDIgYWN0aXZlIGNvcmVzXG4iKSwKKwkJCSAgICAgICByYXRpbyAqIGJjbGspOworCisJCXJhdGlvID0gKGludGVsX3R1cmJvX3JhdGlvID4+IDApICYgMHhGRjsKKwkJaWYgKHJhdGlvKQorCQkJcHJpbnRmKF8oIiAgICAlLjBmIE1IeiBtYXggdHVyYm8gMSBhY3RpdmUgY29yZXNcbiIpLAorCQkJICAgICAgIHJhdGlvICogYmNsayk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19vdXRwdXRfb25lKHVuc2lnbmVkIGludCBjcHUpCit7CisJY2hhciAqZHJpdmVyOworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXM7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmcmVxczsKKwl1bnNpZ25lZCBsb25nIG1pbiwgbWF4LCBmcmVxX2tlcm5lbCwgZnJlcV9oYXJkd2FyZTsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RyYW5zLCBsYXRlbmN5OworCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF90aW1lOworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmdvdmVybm9yczsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHM7CisKKwlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCXJldHVybjsKKworCWZyZXFfa2VybmVsID0gY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKwlmcmVxX2hhcmR3YXJlID0gY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworCisJZHJpdmVyID0gY3B1ZnJlcV9nZXRfZHJpdmVyKGNwdSk7CisJaWYgKCFkcml2ZXIpIHsKKwkJcHJpbnRmKF8oIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIpKTsKKwl9IGVsc2UgeworCQlwcmludGYoXygiICBkcml2ZXI6ICVzXG4iKSwgZHJpdmVyKTsKKwkJY3B1ZnJlcV9wdXRfZHJpdmVyKGRyaXZlcik7CisJfQorCisJY3B1cyA9IGNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyhjcHUpOworCWlmIChjcHVzKSB7CisJCXByaW50ZihfKCIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIikpOworCQl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQkJcHJpbnRmKCIlZCAiLCBjcHVzLT5jcHUpOworCQkJY3B1cyA9IGNwdXMtPm5leHQ7CisJCX0KKwkJcHJpbnRmKCIlZFxuIiwgY3B1cy0+Y3B1KTsKKwkJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCX0KKworCWNwdXMgPSBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJaWYgKGNwdXMpIHsKKwkJcHJpbnRmKF8oIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiKSk7CisJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJfQorCQlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCQljcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKGNwdXMpOworCX0KKworCWxhdGVuY3kgPSBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3koY3B1KTsKKwlpZiAobGF0ZW5jeSkgeworCQlwcmludGYoXygiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIikpOworCQlwcmludF9kdXJhdGlvbihsYXRlbmN5KTsKKwkJcHJpbnRmKCIuXG4iKTsKKwl9CisKKwlpZiAoIShjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHMoY3B1LCAmbWluLCAmbWF4KSkpIHsKKwkJcHJpbnRmKF8oIiAgaGFyZHdhcmUgbGltaXRzOiAiKSk7CisJCXByaW50X3NwZWVkKG1pbik7CisJCXByaW50ZigiIC0gIik7CisJCXByaW50X3NwZWVkKG1heCk7CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlmcmVxcyA9IGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhjcHUpOworCWlmIChmcmVxcykgeworCQlwcmludGYoXygiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiKSk7CisJCXdoaWxlIChmcmVxcy0+bmV4dCkgeworCQkJcHJpbnRfc3BlZWQoZnJlcXMtPmZyZXF1ZW5jeSk7CisJCQlwcmludGYoIiwgIik7CisJCQlmcmVxcyA9IGZyZXFzLT5uZXh0OworCQl9CisJCXByaW50X3NwZWVkKGZyZXFzLT5mcmVxdWVuY3kpOworCQlwcmludGYoIlxuIik7CisJCWNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhmcmVxcyk7CisJfQorCisJZ292ZXJub3JzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCWlmIChnb3Zlcm5vcnMpIHsKKwkJcHJpbnRmKF8oIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiKSk7CisJCXdoaWxlIChnb3Zlcm5vcnMtPm5leHQpIHsKKwkJCXByaW50ZigiJXMsICIsIGdvdmVybm9ycy0+Z292ZXJub3IpOworCQkJZ292ZXJub3JzID0gZ292ZXJub3JzLT5uZXh0OworCQl9CisJCXByaW50ZigiJXNcbiIsIGdvdmVybm9ycy0+Z292ZXJub3IpOworCQljcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKGdvdmVybm9ycyk7CisJfQorCisJcG9saWN5ID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaWYgKHBvbGljeSkgeworCQlwcmludGYoXygiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIikpOworCQlwcmludF9zcGVlZChwb2xpY3ktPm1pbik7CisJCXByaW50ZihfKCIgYW5kICIpKTsKKwkJcHJpbnRfc3BlZWQocG9saWN5LT5tYXgpOworCisJCXByaW50ZigiLlxuICAgICAgICAgICAgICAgICAgIik7CisJCXByaW50ZihfKCJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSIKKwkJICAgICAgICIgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iKSwKKwkJICAgICAgIHBvbGljeS0+Z292ZXJub3IpOworCQljcHVmcmVxX3B1dF9wb2xpY3kocG9saWN5KTsKKwl9CisKKwlpZiAoZnJlcV9rZXJuZWwgfHwgZnJlcV9oYXJkd2FyZSkgeworCQlwcmludGYoXygiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIikpOworCQlpZiAoZnJlcV9oYXJkd2FyZSkgeworCQkJcHJpbnRfc3BlZWQoZnJlcV9oYXJkd2FyZSk7CisJCQlwcmludGYoXygiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIpKTsKKwkJfSBlbHNlCisJCQlwcmludF9zcGVlZChmcmVxX2tlcm5lbCk7CisJCXByaW50ZigiLlxuIik7CisJfQorCXN0YXRzID0gY3B1ZnJlcV9nZXRfc3RhdHMoY3B1LCAmdG90YWxfdGltZSk7CisJaWYgKHN0YXRzKSB7CisJCXByaW50ZihfKCIgIGNwdWZyZXEgc3RhdHM6ICIpKTsKKwkJd2hpbGUgKHN0YXRzKSB7CisJCQlwcmludF9zcGVlZChzdGF0cy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiOiUuMmYlJSIsICgxMDAuMCAqIHN0YXRzLT50aW1lX2luX3N0YXRlKSAvIHRvdGFsX3RpbWUpOworCQkJc3RhdHMgPSBzdGF0cy0+bmV4dDsKKwkJCWlmIChzdGF0cykKKwkJCQlwcmludGYoIiwgIik7CisJCX0KKwkJY3B1ZnJlcV9wdXRfc3RhdHMoc3RhdHMpOworCQl0b3RhbF90cmFucyA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKGNwdSk7CisJCWlmICh0b3RhbF90cmFucykKKwkJCXByaW50ZigiICAoJWx1KVxuIiwgdG90YWxfdHJhbnMpOworCQllbHNlCisJCQlwcmludGYoIlxuIik7CisJfQorCWdldF9ib29zdF9tb2RlKGNwdSk7CisKK30KKworLyogLS1mcmVxIC8gLWYgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKQoreworCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKGNwdSk7CisJaWYgKCFmcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaHVtYW4pIHsKKwkJcHJpbnRfc3BlZWQoZnJlcSk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbHVcbiIsIGZyZXEpOworCXJldHVybiAwOworfQorCisKKy8qIC0taHdmcmVxIC8gLXcgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pCit7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh1bWFuKSB7CisJCXByaW50X3NwZWVkKGZyZXEpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBmcmVxKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1od2xpbWl0cyAvIC1sICovCisKK3N0YXRpYyBpbnQgZ2V0X2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7CisJaWYgKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVsdSAlbHVcbiIsIG1pbiwgbWF4KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1kcml2ZXIgLyAtZCAqLworCitzdGF0aWMgaW50IGdldF9kcml2ZXIodW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyICpkcml2ZXIgPSBjcHVmcmVxX2dldF9kcml2ZXIoY3B1KTsKKwlpZiAoIWRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJpbnRmKCIlc1xuIiwgZHJpdmVyKTsKKwljcHVmcmVxX3B1dF9kcml2ZXIoZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1wb2xpY3kgLyAtcCAqLworCitzdGF0aWMgaW50IGdldF9wb2xpY3kodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfZ2V0X3BvbGljeShjcHUpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVsdSAlbHUgJXNcbiIsIHBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5nb3Zlcm5vcik7CisJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbGljeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tZ292ZXJub3JzIC8gLWcgKi8KKworc3RhdGljIGludCBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmdvdmVybm9ycyA9CisJCWNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKKwlpZiAoIWdvdmVybm9ycykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoZ292ZXJub3JzLT5uZXh0KSB7CisJCXByaW50ZigiJXMgIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCWdvdmVybm9ycyA9IGdvdmVybm9ycy0+bmV4dDsKKwl9CisJcHJpbnRmKCIlc1xuIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycyhnb3Zlcm5vcnMpOworCXJldHVybiAwOworfQorCisKKy8qIC0tYWZmZWN0ZWQtY3B1cyAgLyAtYSAqLworCitzdGF0aWMgaW50IGdldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3B1cyA9IGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXMoY3B1KTsKKwlpZiAoIWNwdXMpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJcHJpbnRmKCIlZCAiLCBjcHVzLT5jcHUpOworCQljcHVzID0gY3B1cy0+bmV4dDsKKwl9CisJcHJpbnRmKCIlZFxuIiwgY3B1cy0+Y3B1KTsKKwljcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKGNwdXMpOworCXJldHVybiAwOworfQorCisvKiAtLXJlbGF0ZWQtY3B1cyAgLyAtciAqLworCitzdGF0aWMgaW50IGdldF9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKCFjcHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJY3B1cyA9IGNwdXMtPm5leHQ7CisJfQorCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCXJldHVybiAwOworfQorCisvKiAtLXN0YXRzIC8gLXMgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pCit7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90cmFucyA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKGNwdSk7CisJdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3RpbWU7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzID0gY3B1ZnJlcV9nZXRfc3RhdHMoY3B1LCAmdG90YWxfdGltZSk7CisJd2hpbGUgKHN0YXRzKSB7CisJCWlmIChodW1hbikgeworCQkJcHJpbnRfc3BlZWQoc3RhdHMtPmZyZXF1ZW5jeSk7CisJCQlwcmludGYoIjolLjJmJSUiLAorCQkJCSgxMDAuMCAqIHN0YXRzLT50aW1lX2luX3N0YXRlKSAvIHRvdGFsX3RpbWUpOworCQl9IGVsc2UKKwkJCXByaW50ZigiJWx1OiVsbHUiLAorCQkJCXN0YXRzLT5mcmVxdWVuY3ksIHN0YXRzLT50aW1lX2luX3N0YXRlKTsKKwkJc3RhdHMgPSBzdGF0cy0+bmV4dDsKKwkJaWYgKHN0YXRzKQorCQkJcHJpbnRmKCIsICIpOworCX0KKwljcHVmcmVxX3B1dF9zdGF0cyhzdGF0cyk7CisJaWYgKHRvdGFsX3RyYW5zKQorCQlwcmludGYoIiAgKCVsdSlcbiIsIHRvdGFsX3RyYW5zKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1sYXRlbmN5IC8gLXkgKi8KKworc3RhdGljIGludCBnZXRfbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pCit7CisJdW5zaWduZWQgbG9uZyBsYXRlbmN5ID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KGNwdSk7CisJaWYgKCFsYXRlbmN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChodW1hbikgeworCQlwcmludF9kdXJhdGlvbihsYXRlbmN5KTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgbGF0ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsgLm5hbWUgPSAiZGVidWciLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2UnfSwKKwl7IC5uYW1lID0gImJvb3N0IiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdiJ30sCisJeyAubmFtZSA9ICJmcmVxIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdmJ30sCisJeyAubmFtZSA9ICJod2ZyZXEiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3cnfSwKKwl7IC5uYW1lID0gImh3bGltaXRzIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdsJ30sCisJeyAubmFtZSA9ICJkcml2ZXIiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2QnfSwKKwl7IC5uYW1lID0gInBvbGljeSIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAncCd9LAorCXsgLm5hbWUgPSAiZ292ZXJub3JzIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdnJ30sCisJeyAubmFtZSA9ICJyZWxhdGVkLWNwdXMiLCAuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAncid9LAorCXsgLm5hbWUgPSAiYWZmZWN0ZWQtY3B1cyIsLmhhc19hcmcgPSBub19hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2EnfSwKKwl7IC5uYW1lID0gInN0YXRzIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdzJ30sCisJeyAubmFtZSA9ICJsYXRlbmN5IiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICd5J30sCisJeyAubmFtZSA9ICJwcm9jIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdvJ30sCisJeyAubmFtZSA9ICJodW1hbiIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAnbSd9LAorCXsgfSwKK307CisKK2ludCBjbWRfZnJlcV9pbmZvKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwlpbnQgcmV0ID0gMCwgY29udCA9IDE7CisJdW5zaWduZWQgaW50IGNwdSA9IDA7CisJdW5zaWduZWQgaW50IGh1bWFuID0gMDsKKwlpbnQgb3V0cHV0X3BhcmFtID0gMDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIm9lZndsZHBncmFzbXliIiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnYic6CisJCWNhc2UgJ28nOgorCQljYXNlICdhJzoKKwkJY2FzZSAncic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdwJzoKKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2wnOgorCQljYXNlICd3JzoKKwkJY2FzZSAnZic6CisJCWNhc2UgJ2UnOgorCQljYXNlICdzJzoKKwkJY2FzZSAneSc6CisJCQlpZiAob3V0cHV0X3BhcmFtKSB7CisJCQkJb3V0cHV0X3BhcmFtID0gLTE7CisJCQkJY29udCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvdXRwdXRfcGFyYW0gPSByZXQ7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoaHVtYW4pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWh1bWFuID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCX0gd2hpbGUgKGNvbnQpOworCisJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwljYXNlICdvJzoKKwkJaWYgKCFiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKSB7CisJCQlwcmludGYoXygiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgIgorCQkJCSAiY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgYXJndW1lbnRcbiIpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgMDoKKwkJb3V0cHV0X3BhcmFtID0gJ2UnOworCX0KKworCXJldCA9IDA7CisKKwkvKiBEZWZhdWx0IGlzOiBzaG93IG91dHB1dCBvZiBDUFUgMCBvbmx5ICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0Yml0KGNwdXNfY2hvc2VuLCAwKTsKKworCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAtMToKKwkJcHJpbnRmKF8oIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorCQkgICAgICAgIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJz8nOgorCQlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJ28nOgorCQlwcm9jX2NwdWZyZXFfb3V0cHV0KCk7CisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJfQorCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpIHsKKwkJCXByaW50ZihfKCJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIiksIGNwdSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoXygiYW5hbHl6aW5nIENQVSAlZDpcbiIpLCBjcHUpOworCisJCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJCWNhc2UgJ2InOgorCQkJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWRlYnVnX291dHB1dF9vbmUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCXJldCA9IGdldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZXQgPSBnZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlyZXQgPSBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcmV0ID0gZ2V0X3BvbGljeShjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJcmV0ID0gZ2V0X2RyaXZlcihjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJcmV0ID0gZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJcmV0ID0gZ2V0X2ZyZXFfaGFyZHdhcmUoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlyZXQgPSBnZXRfZnJlcV9rZXJuZWwoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlyZXQgPSBnZXRfZnJlcV9zdGF0cyhjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCXJldCA9IGdldF9sYXRlbmN5KGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE1MzllCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1zZXQuYwpAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlICJjcHVmcmVxLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKyNkZWZpbmUgTk9STV9GUkVRX0xFTiAzMgorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWUgPSAibWluIiwJLmhhc19hcmcgPSByZXF1aXJlZF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2QnfSwKKwl7IC5uYW1lID0gIm1heCIsCS5oYXNfYXJnID0gcmVxdWlyZWRfYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICd1J30sCisJeyAubmFtZSA9ICJnb3Zlcm5vciIsCS5oYXNfYXJnID0gcmVxdWlyZWRfYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdnJ30sCisJeyAubmFtZSA9ICJmcmVxIiwJLmhhc19hcmcgPSByZXF1aXJlZF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2YnfSwKKwl7IC5uYW1lID0gInJlbGF0ZWQiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsPSdyJ30sCisJeyB9LAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfZXJyb3Iodm9pZCkKK3sKKwlwcmludGYoXygiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorCQkJIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorCQkJIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisJCQkiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorCQkJIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgYXZhaWxhYmxlLFxuIgorCQkJIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljIGZyZXF1ZW5jeVxuIgorCQkJIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iKSk7Cit9OworCitzdHJ1Y3QgZnJlcV91bml0cyB7CisJY2hhcgkJKnN0cl91bml0OworCWludAkJcG93ZXJfb2ZfdGVuOworfTsKKworY29uc3Qgc3RydWN0IGZyZXFfdW5pdHMgZGVmX3VuaXRzW10gPSB7CisJeyJoeiIsIC0zfSwKKwl7ImtoeiIsIDB9LCAvKiBkZWZhdWx0ICovCisJeyJtaHoiLCAzfSwKKwl7ImdoeiIsIDZ9LAorCXsidGh6IiwgOX0sCisJe05VTEwsIDB9Cit9OworCitzdGF0aWMgdm9pZCBwcmludF91bmtub3duX2FyZyh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RyaW5nX3RvX2ZyZXF1ZW5jeShjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciBub3JtYWxpemVkW05PUk1fRlJFUV9MRU5dOworCWNvbnN0IHN0cnVjdCBmcmVxX3VuaXRzICp1bml0OworCWNvbnN0IGNoYXIgKnNjYW47CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgcG93ZXIgPSAwLCBtYXRjaF9jb3VudCA9IDAsIGksIGNwLCBwYWQ7CisKKwl3aGlsZSAoKnN0ciA9PSAnMCcpCisJCXN0cisrOworCisJZm9yIChzY2FuID0gc3RyOyBpc2RpZ2l0KCpzY2FuKSB8fCAqc2NhbiA9PSAnLic7IHNjYW4rKykgeworCQlpZiAoKnNjYW4gPT0gJy4nICYmIG1hdGNoX2NvdW50ID09IDApCisJCQltYXRjaF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCpzY2FuID09ICcuJyAmJiBtYXRjaF9jb3VudCA9PSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpzY2FuKSB7CisJCW1hdGNoX2NvdW50ID0gMDsKKwkJZm9yICh1bml0ID0gZGVmX3VuaXRzOyB1bml0LT5zdHJfdW5pdDsgdW5pdCsrKSB7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBzY2FuW2ldICYmIHRvbG93ZXIoc2NhbltpXSkgPT0gdW5pdC0+c3RyX3VuaXRbaV07CisJCQkgICAgICsraSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzY2FuW2ldKQorCQkJCWNvbnRpbnVlOworCQkJbWF0Y2hfY291bnQrKzsKKwkJCXBvd2VyID0gdW5pdC0+cG93ZXJfb2ZfdGVuOworCQl9CisJCWlmIChtYXRjaF9jb3VudCAhPSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogY291bnQgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgY29waWVkICovCisJZm9yIChjcCA9IDA7IGlzZGlnaXQoc3RyW2NwXSk7IGNwKyspCisJCWNvbnRpbnVlOworCisJaWYgKHN0cltjcF0gPT0gJy4nKSB7CisJCXdoaWxlIChwb3dlciA+IC0xICYmIGlzZGlnaXQoc3RyW2NwKzFdKSkKKwkJCWNwKyssIHBvd2VyLS07CisJfQorCWlmIChwb3dlciA+PSAtMSkJLyogbm90IGVub3VnaCA9PiBwYWQgKi8KKwkJcGFkID0gcG93ZXIgKyAxOworCWVsc2UJCQkvKiB0byBtdWNoID0+IHN0cmlwICovCisJCXBhZCA9IDAsIGNwICs9IHBvd2VyICsgMTsKKwkvKiBjaGVjayBib3VuZHMgKi8KKwlpZiAoY3AgPD0gMCB8fCBjcCArIHBhZCA+IE5PUk1fRlJFUV9MRU4gLSAxKQorCQlyZXR1cm4gMDsKKworCS8qIGNvcHkgZGlnaXRzICovCisJZm9yIChpID0gMDsgaSA8IGNwOyBpKyssIHN0cisrKSB7CisJCWlmICgqc3RyID09ICcuJykKKwkJCXN0cisrOworCQlub3JtYWxpemVkW2ldID0gKnN0cjsKKwl9CisJLyogYW5kIHBhZCAqLworCWZvciAoOyBpIDwgY3AgKyBwYWQ7IGkrKykKKwkJbm9ybWFsaXplZFtpXSA9ICcwJzsKKworCS8qIHJvdW5kIHVwLCBkb3duID8gKi8KKwltYXRjaF9jb3VudCA9IChub3JtYWxpemVkW2ktMV0gPj0gJzUnKTsKKwkvKiBhbmQgZHJvcCB0aGUgZGVjaW1hbCBwYXJ0ICovCisJbm9ybWFsaXplZFtpLTFdID0gMDsgLyogY3AgPiAwICYmIHBhZCA+PSAwID09PiBpID4gMCAqLworCisJLyogZmluYWwgY29udmVyc2lvbiAoYW5kIGFwcGx5aW5nIHJvdW5kaW5nKSAqLworCWVycm5vID0gMDsKKwlmcmVxID0gc3RydG91bChub3JtYWxpemVkLCAmZW5kLCAxMCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gMDsKKwllbHNlIHsKKwkJaWYgKG1hdGNoX2NvdW50ICYmIGZyZXEgIT0gVUxPTkdfTUFYKQorCQkJZnJlcSsrOworCQlyZXR1cm4gZnJlcTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fbmV3X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9sID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaW50IHJldDsKKworCWlmICghY3VyX3BvbCkgeworCQlwcmludGYoXygid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZXdfcG9sLT5taW4pCisJCW5ld19wb2wtPm1pbiA9IGN1cl9wb2wtPm1pbjsKKworCWlmICghbmV3X3BvbC0+bWF4KQorCQluZXdfcG9sLT5tYXggPSBjdXJfcG9sLT5tYXg7CisKKwlpZiAoIW5ld19wb2wtPmdvdmVybm9yKQorCQluZXdfcG9sLT5nb3Zlcm5vciA9IGN1cl9wb2wtPmdvdmVybm9yOworCisJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KGNwdSwgbmV3X3BvbCk7CisKKwljcHVmcmVxX3B1dF9wb2xpY3koY3VyX3BvbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgZG9fb25lX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wsCisJCXVuc2lnbmVkIGxvbmcgZnJlcSwgdW5zaWduZWQgaW50IHBjKQoreworCXN3aXRjaCAocGMpIHsKKwljYXNlIDA6CisJCXJldHVybiBjcHVmcmVxX3NldF9mcmVxdWVuY3koY3B1LCBmcmVxKTsKKworCWNhc2UgMToKKwkJLyogaWYgb25seSBvbmUgdmFsdWUgb2YgYSBwb2xpY3kgaXMgdG8gYmUgY2hhbmdlZCwgd2UgY2FuCisJCSAqIHVzZSBhICJmYXN0IHBhdGgiLgorCQkgKi8KKwkJaWYgKG5ld19wb2wtPm1pbikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKGNwdSwgbmV3X3BvbC0+bWluKTsKKwkJZWxzZSBpZiAobmV3X3BvbC0+bWF4KQorCQkJcmV0dXJuIGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgoY3B1LCBuZXdfcG9sLT5tYXgpOworCQllbHNlIGlmIChuZXdfcG9sLT5nb3Zlcm5vcikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LAorCQkJCQkJCW5ld19wb2wtPmdvdmVybm9yKTsKKworCWRlZmF1bHQ6CisJCS8qIHNsb3cgcGF0aCAqLworCQlyZXR1cm4gZG9fbmV3X3BvbGljeShjcHUsIG5ld19wb2wpOworCX0KK30KKworaW50IGNtZF9mcmVxX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJaW50IHJldCA9IDAsIGNvbnQgPSAxOworCWludCBkb3VibGVfcGFybSA9IDAsIHJlbGF0ZWQgPSAwLCBwb2xpY3ljaGFuZ2UgPSAwOworCXVuc2lnbmVkIGxvbmcgZnJlcSA9IDA7CisJY2hhciBnb3ZbMjBdOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgbmV3X3BvbCA9IHsKKwkJLm1pbiA9IDAsCisJCS5tYXggPSAwLAorCQkuZ292ZXJub3IgPSBOVUxMLAorCX07CisKKwkvKiBwYXJhbWV0ZXIgcGFyc2luZyAqLworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImQ6dTpnOmY6ciIsIHNldF9vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlwcmludF91bmtub3duX2FyZygpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWlmIChyZWxhdGVkKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlyZWxhdGVkKys7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlpZiAobmV3X3BvbC5taW4pCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJbmV3X3BvbC5taW4gPSBzdHJpbmdfdG9fZnJlcXVlbmN5KG9wdGFyZyk7CisJCQlpZiAobmV3X3BvbC5taW4gPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAndSc6CisJCQlpZiAobmV3X3BvbC5tYXgpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJbmV3X3BvbC5tYXggPSBzdHJpbmdfdG9fZnJlcXVlbmN5KG9wdGFyZyk7CisJCQlpZiAobmV3X3BvbC5tYXggPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAoZnJlcSkKKwkJCQlkb3VibGVfcGFybSsrOworCQkJZnJlcSA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChmcmVxID09IDApIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKG5ld19wb2wuZ292ZXJub3IpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXBvbGljeWNoYW5nZSsrOworCQkJaWYgKChzdHJsZW4ob3B0YXJnKSA8IDMpIHx8IChzdHJsZW4ob3B0YXJnKSA+IDE4KSkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoKHNzY2FuZihvcHRhcmcsICIlcyIsIGdvdikpICE9IDEpIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJbmV3X3BvbC5nb3Zlcm5vciA9IGdvdjsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoY29udCk7CisKKwkvKiBwYXJhbWV0ZXIgY2hlY2tpbmcgKi8KKwlpZiAoZG91YmxlX3Bhcm0pIHsKKwkJcHJpbnRmKCJ0aGUgc2FtZSBwYXJhbWV0ZXIgd2FzIHBhc3NlZCBtb3JlIHRoYW4gb25jZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmcmVxICYmIHBvbGljeWNoYW5nZSkgeworCQlwcmludGYoXygidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisJCQkJIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWZyZXEgJiYgIXBvbGljeWNoYW5nZSkgeworCQlwcmludGYoXygiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorCQkJCSItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERlZmF1bHQgaXM6IHNldCBhbGwgQ1BVcyAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGFsbChjcHVzX2Nob3Nlbik7CisKKwkvKiBBbHNvIHNldCBmcmVxdWVuY3kgc2V0dGluZ3MgZm9yIHJlbGF0ZWQgQ1BVcyBpZiAtciBpcyBwYXNzZWQgKi8KKwlpZiAocmVsYXRlZCkgeworCQlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCQkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCQkJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3B1czsKKworCQkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQkJY29udGludWU7CisKKwkJCWNwdXMgPSBjcHVmcmVxX2dldF9yZWxhdGVkX2NwdXMoY3B1KTsKKwkJCWlmICghY3B1cykKKwkJCQlicmVhazsKKwkJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIGNwdXMtPmNwdSk7CisJCQkJY3B1cyA9IGNwdXMtPm5leHQ7CisJCQl9CisJCQljcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoY3B1cyk7CisJCX0KKwl9CisKKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlwcmludGYoXygiU2V0dGluZyBjcHU6ICVkXG4iKSwgY3B1KTsKKwkJcmV0ID0gZG9fb25lX2NwdShjcHUsICZuZXdfcG9sLCBmcmVxLCBwb2xpY3ljaGFuZ2UpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcHJpbnRfZXJyb3IoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWlkbGUtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjgyNjcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqICAoQykgMjAxMCAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworI2RlZmluZSBMSU5FX0xFTiAxMAorCitzdGF0aWMgdm9pZCBjcHVpZGxlX2NwdV9vdXRwdXQodW5zaWduZWQgaW50IGNwdSwgaW50IHZlcmJvc2UpCit7CisJaW50IGlkbGVzdGF0ZXMsIGlkbGVzdGF0ZTsKKwljaGFyICp0bXA7CisKKwlwcmludGYoXyAoIkFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCWlkbGVzdGF0ZXMgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KGNwdSk7CisJaWYgKGlkbGVzdGF0ZXMgPT0gMCkgeworCQlwcmludGYoXygiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIiksIGNwdSk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKGlkbGVzdGF0ZXMgPD0gMCkgeworCQlwcmludGYoXygiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIiksIGNwdSk7CisJCXJldHVybjsKKwl9CisJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlcyAtIDEpOworCWlmICghdG1wKSB7CisJCXByaW50ZihfKCJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iKSwKKwkJICAgICAgIGlkbGVzdGF0ZXMgLSAxKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZihfKCJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iKSwgaWRsZXN0YXRlcyk7CisKKwlwcmludGYoXygiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIpKTsKKwlmb3IgKGlkbGVzdGF0ZSA9IDE7IGlkbGVzdGF0ZSA8IGlkbGVzdGF0ZXM7IGlkbGVzdGF0ZSsrKSB7CisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZShjcHUsIGlkbGVzdGF0ZSk7CisJCWlmICghdG1wKQorCQkJY29udGludWU7CisJCXByaW50ZigiICVzIiwgdG1wKTsKKwkJZnJlZSh0bXApOworCX0KKwlwcmludGYoIlxuIik7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCWZvciAoaWRsZXN0YXRlID0gMTsgaWRsZXN0YXRlIDwgaWRsZXN0YXRlczsgaWRsZXN0YXRlKyspIHsKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlKTsKKwkJaWYgKCF0bXApCisJCQljb250aW51ZTsKKwkJcHJpbnRmKCIlczpcbiIsIHRtcCk7CisJCWZyZWUodG1wKTsKKworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2MoY3B1LCBpZGxlc3RhdGUpOworCQlpZiAoIXRtcCkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoXygiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iKSwgdG1wKTsKKwkJZnJlZSh0bXApOworCisJCXByaW50ZihfKCJMYXRlbmN5OiAlbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KGNwdSwgaWRsZXN0YXRlKSk7CisJCXByaW50ZihfKCJVc2FnZTogJWx1XG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UoY3B1LCBpZGxlc3RhdGUpKTsKKwkJcHJpbnRmKF8oIkR1cmF0aW9uOiAlbGx1XG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIGlkbGVzdGF0ZSkpOworCX0KKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNwdWlkbGVfZ2VuZXJhbF9vdXRwdXQodm9pZCkKK3sKKwljaGFyICp0bXA7CisKKwl0bXAgPSBzeXNmc19nZXRfY3B1aWRsZV9kcml2ZXIoKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIikpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIkNQVWlkbGUgZHJpdmVyOiAlc1xuIiksIHRtcCk7CisJZnJlZSh0bXApOworCisJdG1wID0gc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3IoKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIpLCB0bXApOworCWZyZWUodG1wKTsKK30KKworc3RhdGljIHZvaWQgcHJvY19jcHVpZGxlX2NwdV9vdXRwdXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlsb25nIG1heF9hbGxvd2VkX2NzdGF0ZSA9IDIwMDAwMDAwMDA7CisJaW50IGNzdGF0ZXMsIGNzdGF0ZTsKKworCWNzdGF0ZXMgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KGNwdSk7CisJaWYgKGNzdGF0ZXMgPT0gMCkgeworCQkvKgorCQkgKiBHbyBvbiBhbmQgcHJpbnQgc2FtZSB1c2VsZXNzIGluZm8gYXMgeW91J2Qgc2VlIHdpdGgKKwkJICogY2F0IC9wcm9jL2FjcGkvcHJvY2Vzc29yLy4uL3Bvd2VyCisJCSAqCXByaW50ZihfKCJDUFUgJXU6IE5vIEMtc3RhdGVzIGF2YWlsYWJsZVxuIiksIGNwdSk7CisJCSAqCXJldHVybjsKKwkJICovCisJfSBlbHNlIGlmIChjc3RhdGVzIDw9IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIpLCBjcHUpOworCQlyZXR1cm47CisJfQorCS8qIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOyAqLworCisJcHJpbnRmKF8oImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIikpOworCXByaW50ZihfKCJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iKSwgY3N0YXRlcy0xKTsKKwlwcmludGYoXygibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iKSwgbWF4X2FsbG93ZWRfY3N0YXRlKTsKKwlwcmludGYoXygic3RhdGVzOlx0XG4iKSk7CisJZm9yIChjc3RhdGUgPSAxOyBjc3RhdGUgPCBjc3RhdGVzOyBjc3RhdGUrKykgeworCQlwcmludGYoXygiICAgIEMlZDogICAgICAgICAgICAgICAgICAiCisJCQkgInR5cGVbQyVkXSAiKSwgY3N0YXRlLCBjc3RhdGUpOworCQlwcmludGYoXygicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIikpOworCQlwcmludGYoXygibGF0ZW5jeVslMDNsdV0gIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3koY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oInVzYWdlWyUwOGx1XSAiKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UoY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oImR1cmF0aW9uWyUwMjBMdV0gXG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIGNzdGF0ZSkpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJeyAubmFtZSA9ICJzaWxlbnQiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAncyd9LAorCXsgLm5hbWUgPSAicHJvYyIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdvJ30sCisJeyB9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNwdWlkbGVfZXhpdChpbnQgZmFpbCkKK3sKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfaWRsZV9pbmZvKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwlpbnQgcmV0ID0gMCwgY29udCA9IDEsIG91dHB1dF9wYXJhbSA9IDAsIHZlcmJvc2UgPSAxOworCXVuc2lnbmVkIGludCBjcHUgPSAwOworCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAib3MiLCBpbmZvX29wdHMsIE5VTEwpOworCQlpZiAocmV0ID09IC0xKQorCQkJYnJlYWs7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJz8nOgorCQkJb3V0cHV0X3BhcmFtID0gJz8nOworCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQl2ZXJib3NlID0gMDsKKwkJCWJyZWFrOworCQljYXNlIC0xOgorCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAnbyc6CisJCQlpZiAob3V0cHV0X3BhcmFtKSB7CisJCQkJb3V0cHV0X3BhcmFtID0gLTE7CisJCQkJY29udCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlvdXRwdXRfcGFyYW0gPSByZXQ7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKGNvbnQpOworCisJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwljYXNlIC0xOgorCQlwcmludGYoXygiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAiCisJCQkgIm91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwljYXNlICc/JzoKKwkJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBEZWZhdWx0IGlzOiBzaG93IG91dHB1dCBvZiBDUFUgMCBvbmx5ICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0Yml0KGNwdXNfY2hvc2VuLCAwKTsKKworCWlmIChvdXRwdXRfcGFyYW0gPT0gMCkKKwkJY3B1aWRsZV9nZW5lcmFsX291dHB1dCgpOworCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCisJCWNhc2UgJ28nOgorCQkJcHJvY19jcHVpZGxlX2NwdV9vdXRwdXQoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlwcmludGYoIlxuIik7CisJCQljcHVpZGxlX2NwdV9vdXRwdXQoY3B1LCB2ZXJib3NlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2ODYzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqICAoQykgMjAxMSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZSA9ICJwZXJmLWJpYXMiLAkuaGFzX2FyZyA9IG9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnYid9LAorCXsgLm5hbWUgPSAic2NoZWQtbWMiLAkuaGFzX2FyZyA9IG9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnbSd9LAorCXsgLm5hbWUgPSAic2NoZWQtc210IiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3MnfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF93cm9uZ19hcmdfZXhpdCh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWludCBzY2hlZF9tYzoxOworCQkJaW50IHNjaGVkX3NtdDoxOworCQkJaW50IHBlcmZfYmlhczoxOworCQl9OworCQlpbnQgcGFyYW1zOworCX0gcGFyYW1zID0ge307CisJaW50IHJldCA9IDA7CisKKwlzZXRsb2NhbGUoTENfQUxMLCAiIik7CisJdGV4dGRvbWFpbihQQUNLQUdFKTsKKworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibXNiIiwgc2V0X29wdHMsIE5VTEwpKSAhPSAtMSkgeworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlICdiJzoKKwkJCWlmIChwYXJhbXMucGVyZl9iaWFzKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBhcmFtcy5zY2hlZF9tYyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAocGFyYW1zLnNjaGVkX3NtdCkKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKQorCQlwYXJhbXMucGFyYW1zID0gMHg3OworCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisKKwlpZiAocGFyYW1zLnNjaGVkX21jKSB7CisJCXJldCA9IHN5c2ZzX2dldF9zY2hlZCgibWMiKTsKKwkJcHJpbnRmKF8oIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0KKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19nZXRfc2NoZWQoInNtdCIpOworCQlwcmludGYoXygiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0KKworCS8qIEFkZCBtb3JlIHBlciBjcHUgb3B0aW9ucyBoZXJlICovCisJaWYgKCFwYXJhbXMucGVyZl9iaWFzKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBhcmFtcy5wZXJmX2JpYXMpIHsKKwkJaWYgKCFydW5fYXNfcm9vdCkgeworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDA7CisJCQlwcmludGYoXygiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iKSk7CisJCX0gZWxzZSBpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUykpIHsKKwkJCXByaW50ZihfKCJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIgorCQkJCSAiIGJpYXMgc2V0dGluZ1xuIikpOworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDA7CisJCX0KKwl9CisKKwkvKiBsb29wIG92ZXIgQ1BVcyAqLworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKworCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKF8oImFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX2dldF9wZXJmX2JpYXMoY3B1KTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRmKF8oIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIikpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKF8oInBlcmYtYmlhczogJWRcbiIpLCByZXQpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGRlMzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICAoQykgMjAxMSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZSA9ICJwZXJmLWJpYXMiLAkuaGFzX2FyZyA9IG9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnYid9LAorCXsgLm5hbWUgPSAic2NoZWQtbWMiLAkuaGFzX2FyZyA9IG9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnbSd9LAorCXsgLm5hbWUgPSAic2NoZWQtc210IiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3MnfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF93cm9uZ19hcmdfZXhpdCh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfc2V0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IHNjaGVkX21jOjE7CisJCQlpbnQgc2NoZWRfc210OjE7CisJCQlpbnQgcGVyZl9iaWFzOjE7CisJCX07CisJCWludCBwYXJhbXM7CisJfSBwYXJhbXM7CisJaW50IHNjaGVkX21jID0gMCwgc2NoZWRfc210ID0gMCwgcGVyZl9iaWFzID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJcGFyYW1zLnBhcmFtcyA9IDA7CisJLyogcGFyYW1ldGVyIHBhcnNpbmcgKi8KKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJtOnM6YjoiLAorCQkJCQkJc2V0X29wdHMsIE5VTEwpKSAhPSAtMSkgeworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlICdiJzoKKwkJCWlmIChwYXJhbXMucGVyZl9iaWFzKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwZXJmX2JpYXMgPSBhdG9pKG9wdGFyZyk7CisJCQlpZiAocGVyZl9iaWFzIDwgMCB8fCBwZXJmX2JpYXMgPiAxNSkgeworCQkJCXByaW50ZihfKCItLXBlcmYtYmlhcyBwYXJhbSBvdXQgIgorCQkJCQkgIm9mIHJhbmdlIFswLSVkXVxuIiksIDE1KTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAocGFyYW1zLnNjaGVkX21jKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlzY2hlZF9tYyA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChzY2hlZF9tYyA8IDAgfHwgc2NoZWRfbWMgPiAyKSB7CisJCQkJcHJpbnRmKF8oIi0tc2NoZWQtbWMgcGFyYW0gb3V0ICIKKwkJCQkJICJvZiByYW5nZSBbMC0lZF1cbiIpLCAyKTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnNjaGVkX21jID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfc210KQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlzY2hlZF9zbXQgPSBhdG9pKG9wdGFyZyk7CisJCQlpZiAoc2NoZWRfc210IDwgMCB8fCBzY2hlZF9zbXQgPiAyKSB7CisJCQkJcHJpbnRmKF8oIi0tc2NoZWQtc210IHBhcmFtIG91dCAiCisJCQkJCSAib2YgcmFuZ2UgWzAtJWRdXG4iKSwgMik7CisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCX0KKwkJCXBhcmFtcy5zY2hlZF9zbXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQl9CisJfTsKKworCWlmICghcGFyYW1zLnBhcmFtcykKKwkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKworCWlmIChwYXJhbXMuc2NoZWRfbWMpIHsKKwkJcmV0ID0gc3lzZnNfc2V0X3NjaGVkKCJtYyIsIHNjaGVkX21jKTsKKwkJaWYgKHJldCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iKSwKKwkJCQkocmV0ID09IC1FTk9ERVYpID8gIm5vdCBzdXBwb3J0ZWQiIDogIiIpOworCX0KKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19zZXRfc2NoZWQoInNtdCIsIHNjaGVkX3NtdCk7CisJCWlmIChyZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIpLAorCQkJCShyZXQgPT0gLUVOT0RFVikgPyAibm90IHN1cHBvcnRlZCIgOiAiIik7CisJfQorCisJLyogRGVmYXVsdCBpczogc2V0IGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX3NldF9wZXJmX2JpYXMoY3B1LCBwZXJmX2JpYXMpOworCQkJaWYgKHJldCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyAiCisJCQkJCQkgICJ2YWx1ZSBvbiBDUFUgJWRcbiIpLCBjcHUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJlZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIElkZWFzIHRha2VuIG92ZXIgZnJvbSB0aGUgcGVyZiB1c2Vyc3BhY2UgdG9vbCAoaW5jbHVkZWQgaW4gdGhlIExpbnVzCisgKiAga2VybmVsIGdpdCByZXBvKTogc3ViY29tbWFuZCBidWlsdGlucyBhbmQgcGFyYW0gcGFyc2luZy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCitzdHJ1Y3QgY21kX3N0cnVjdCB7CisJY29uc3QgY2hhciAqY21kOworCWludCAoKm1haW4pKGludCwgY29uc3QgY2hhciAqKik7CisJaW50IG5lZWRzX3Jvb3Q7Cit9OworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisKK3N0YXRpYyBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworLyogR2xvYmFsIGNwdV9pbmZvIG9iamVjdCBhdmFpbGFibGUgZm9yIGFsbCBiaW5hcmllcworICogSW5mbyBvbmx5IHJldHJpZXZlZCBmcm9tIENQVSAwCisgKgorICogVmFsdWVzIHdpbGwgYmUgemVyby91bmtub3duIG9uIG5vbiBYODYgYXJjaHMKKyAqLworc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIGNwdXBvd2VyX2NwdV9pbmZvOworaW50IHJ1bl9hc19yb290OworLyogQWZmZWN0ZWQgY3B1cyBjaG9zZW4gYnkgLWMvLS1jcHUgcGFyYW0gKi8KK3N0cnVjdCBiaXRtYXNrICpjcHVzX2Nob3NlbjsKKworI2lmZGVmIERFQlVHCitpbnQgYmVfdmVyYm9zZTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpOworCitzdGF0aWMgc3RydWN0IGNtZF9zdHJ1Y3QgY29tbWFuZHNbXSA9IHsKKwl7ICJmcmVxdWVuY3ktaW5mbyIsCWNtZF9mcmVxX2luZm8sCTAJfSwKKwl7ICJmcmVxdWVuY3ktc2V0IiwJY21kX2ZyZXFfc2V0LAkxCX0sCisJeyAiaWRsZS1pbmZvIiwJCWNtZF9pZGxlX2luZm8sCTAJfSwKKwl7ICJzZXQiLAkJY21kX3NldCwJMQl9LAorCXsgImluZm8iLAkJY21kX2luZm8sCTAJfSwKKwl7ICJtb25pdG9yIiwJCWNtZF9tb25pdG9yLAkwCX0sCisJeyAiaGVscCIsCQljbWRfaGVscCwJMAl9LAorCS8qCXsgImJlbmNoIiwJY21kX2JlbmNoLAkxCX0sICovCit9OworCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKyNpZmRlZiBERUJVRworCXByaW50ZihfKCJVc2FnZTpcdGNwdXBvd2VyIFstZHwtLWRlYnVnXSBbLWN8LS1jcHUgY3B1bGlzdCBdIDxjb21tYW5kPiBbPGFyZ3M+XVxuIikpOworI2Vsc2UKKwlwcmludGYoXygiVXNhZ2U6XHRjcHVwb3dlciBbLWN8LS1jcHUgY3B1bGlzdCBdIDxjb21tYW5kPiBbPGFyZ3M+XVxuIikpOworI2VuZGlmCisJcHJpbnRmKF8oIlN1cHBvcnRlZCBjb21tYW5kcyBhcmU6XG4iKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspCisJCXByaW50ZigiXHQlc1xuIiwgY29tbWFuZHNbaV0uY21kKTsKKwlwcmludGYoXygiXG5Ob3QgYWxsIGNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iKSk7CisJcHJpbnRmKF8oIlxuVXNlICdjcHVwb3dlciBoZWxwIDxjb21tYW5kPicgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgY29tbWFuZHMuXG4iKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfbWFuX3BhZ2UoY29uc3QgY2hhciAqc3VicGFnZSkKK3sKKwlpbnQgbGVuOworCWNoYXIgKnBhZ2U7CisKKwlsZW4gPSAxMDsgLyogZW5vdWdoIGZvciAiY3B1cG93ZXItIiAqLworCWlmIChzdWJwYWdlICE9IE5VTEwpCisJCWxlbiArPSBzdHJsZW4oc3VicGFnZSk7CisKKwlwYWdlID0gbWFsbG9jKGxlbik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwcmludGYocGFnZSwgImNwdXBvd2VyIik7CisJaWYgKChzdWJwYWdlICE9IE5VTEwpICYmIHN0cmNtcChzdWJwYWdlLCAiaGVscCIpKSB7CisJCXN0cmNhdChwYWdlLCAiLSIpOworCQlzdHJjYXQocGFnZSwgc3VicGFnZSk7CisJfQorCisJZXhlY2xwKCJtYW4iLCAibWFuIiwgcGFnZSwgTlVMTCk7CisKKwkvKiBzaG91bGQgbm90IGJlIHJlYWNoZWQgKi8KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaWYgKGFyZ2MgPiAxKSB7CisJCXByaW50X21hbl9wYWdlKGFyZ3ZbMV0pOyAvKiBleGl0cyB3aXRoaW4gZXhlY2xwKCkgKi8KKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlwcmludF9oZWxwKCk7CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lkKQoreworCXByaW50ZihQQUNLQUdFICIgIiBWRVJTSU9OICJcbiIpOworCXByaW50ZihfKCJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb3B0aW9ucyhpbnQgKmFyZ2MsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgcmV0LCB4LCBuZXdfYXJnYyA9IDA7CisKKwlpZiAoKmFyZ2MgPCAxKQorCQlyZXR1cm47CisKKwlmb3IgKHggPSAwOyAgeCA8ICphcmdjICYmICgoKmFyZ3YpW3hdKVswXSA9PSAnLSc7IHgrKykgeworCQljb25zdCBjaGFyICpwYXJhbSA9ICgqYXJndilbeF07CisJCWlmICghc3RyY21wKHBhcmFtLCAiLWgiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1oZWxwIikpIHsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWMiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1jcHUiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCXByaW50X2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgoKmFyZ3YpW3grMV0sICJhbGwiKSkKKwkJCQliaXRtYXNrX3NldGFsbChjcHVzX2Nob3Nlbik7CisJCQllbHNlIHsKKwkJCQlyZXQgPSBiaXRtYXNrX3BhcnNlbGlzdCgKKwkJCQkJCSgqYXJndilbeCsxXSwgY3B1c19jaG9zZW4pOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBwYXJzaW5nIGNwdSAiCisJCQkJCQkJICAibGlzdFxuIikpOworCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQkJfQorCQkJfQorCQkJeCArPSAxOworCQkJLyogQ3V0IG91dCBwYXJhbTogY3B1cG93ZXIgLWMgMSBpbmZvIC0+IGNwdXBvd2VyIGluZm8gKi8KKwkJCW5ld19hcmdjICs9IDI7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLXYiKSB8fAorCQkJIXN0cmNtcChwYXJhbSwgIi0tdmVyc2lvbiIpKSB7CisJCQlwcmludF92ZXJzaW9uKCk7CisJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisjaWZkZWYgREVCVUcKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWQiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1kZWJ1ZyIpKSB7CisJCQliZV92ZXJib3NlID0gMTsKKwkJCW5ld19hcmdjKys7CisJCQljb250aW51ZTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJXNcbiIsIHBhcmFtKTsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwkqYXJnYyAtPSBuZXdfYXJnYzsKKwkqYXJndiArPSBuZXdfYXJnYzsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICpjbWQ7CisJdW5zaWduZWQgaW50IGksIHJldDsKKworCWNwdXNfY2hvc2VuID0gYml0bWFza19hbGxvYyhzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKSk7CisKKwlhcmdjLS07CisJYXJndiArPSAxOworCisJaGFuZGxlX29wdGlvbnMoJmFyZ2MsICZhcmd2KTsKKworCWNtZCA9IGFyZ3ZbMF07CisKKwlpZiAoYXJnYyA8IDEpIHsKKwkJcHJpbnRfaGVscCgpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJLyogVHVybiAicGVyZiBjbWQgLS1oZWxwIiBpbnRvICJwZXJmIGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlnZXRfY3B1X2luZm8oMCwgJmNwdXBvd2VyX2NwdV9pbmZvKTsKKwlydW5fYXNfcm9vdCA9ICFnZXR1aWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKSB7CisJCXN0cnVjdCBjbWRfc3RydWN0ICpwID0gY29tbWFuZHMgKyBpOworCQlpZiAoc3RyY21wKHAtPmNtZCwgY21kKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJ1bl9hc19yb290ICYmIHAtPm5lZWRzX3Jvb3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgIgorCQkJCQkgICJwcml2aWxlZ2VzXG4iKSwgY21kKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJcmV0ID0gcC0+bWFpbihhcmdjLCBhcmd2KTsKKwkJaWYgKGNwdXNfY2hvc2VuKQorCQkJYml0bWFza19mcmVlKGNwdXNfY2hvc2VuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRfaGVscCgpOworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2FtZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q1NjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpAQCAtMCwwICsxLDEzNyBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworI2RlZmluZSBNU1JfQU1EX1BTVEFURV9TVEFUVVMJMHhjMDAxMDA2MworI2RlZmluZSBNU1JfQU1EX1BTVEFURQkJMHhjMDAxMDA2NAorI2RlZmluZSBNU1JfQU1EX1BTVEFURV9MSU1JVAkweGMwMDEwMDYxCisKK3VuaW9uIG1zcl9wc3RhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGZpZDo2OworCQl1bnNpZ25lZCBkaWQ6MzsKKwkJdW5zaWduZWQgdmlkOjc7CisJCXVuc2lnbmVkIHJlczE6NjsKKwkJdW5zaWduZWQgbmJkaWQ6MTsKKwkJdW5zaWduZWQgcmVzMjoyOworCQl1bnNpZ25lZCBuYnZpZDo3OworCQl1bnNpZ25lZCBpZGR2YWw6ODsKKwkJdW5zaWduZWQgaWRkZGl2OjI7CisJCXVuc2lnbmVkIHJlczM6MjE7CisJCXVuc2lnbmVkIGVuOjE7CisJfSBiaXRzOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Cit9OworCitzdGF0aWMgaW50IGdldF9kaWQoaW50IGZhbWlseSwgdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGUpCit7CisJaW50IHQ7CisKKwlpZiAoZmFtaWx5ID09IDB4MTIpCisJCXQgPSBwc3RhdGUudmFsICYgMHhmOworCWVsc2UKKwkJdCA9IHBzdGF0ZS5iaXRzLmRpZDsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50IGdldF9jb2YoaW50IGZhbWlseSwgdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGUpCit7CisJaW50IHQ7CisJaW50IGZpZCwgZGlkOworCisJZGlkID0gZ2V0X2RpZChmYW1pbHksIHBzdGF0ZSk7CisKKwl0ID0gMHgxMDsKKwlmaWQgPSBwc3RhdGUuYml0cy5maWQ7CisJaWYgKGZhbWlseSA9PSAweDExKQorCQl0ID0gMHg4OworCisJcmV0dXJuICgxMDAgKiAoZmlkICsgdCkpID4+IGRpZDsKK30KKworLyogTmVlZHM6CisgKiBjcHUgICAgICAgICAgLT4gdGhlIGNwdSB0aGF0IGdldHMgZXZhbHVhdGVkCisgKiBjcHVfZmFtaWx5ICAgLT4gVGhlIGNwdSdzIGZhbWlseSAoMHgxMCwgMHgxMiwuLi4pCisgKiBib290c19zdGF0ZXMgLT4gaG93IG11Y2ggYm9vc3Qgc3RhdGVzIHRoZSBtYWNoaW5lcyBzdXBwb3J0CisgKgorICogRmlsbHMgdXA6CisgKiBwc3RhdGVzIC0+IGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzaXplIE1BWF9IV19QU1RBVEVTCisgKiAgICAgICAgICAgIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvcy4KKyAqICAgICAgICAgICAgQWxsIGF2YWlsYWJsZSAgSFcgcHN0YXRlcyAoaW5jbHVkaW5nIGJvb3N0IHN0YXRlcykKKyAqIG5vICAgICAgLT4gYW1vdW50IG9mIHBzdGF0ZXMgYWJvdmUgYXJyYXkgZ290IGZpbGxlZCB1cCB3aXRoCisgKgorICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAqLworaW50IGRlY29kZV9wc3RhdGVzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBjcHVfZmFtaWx5LAorCQkgICBpbnQgYm9vc3Rfc3RhdGVzLCB1bnNpZ25lZCBsb25nICpwc3RhdGVzLCBpbnQgKm5vKQoreworCWludCBpLCBwc21heCwgcHNjdXI7CisJdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKworCS8qIE9ubHkgcmVhZCBvdXQgZnJlcXVlbmNpZXMgZnJvbSBIVyB3aGVuIENQVSBtaWdodCBiZSBib29zdGFibGUKKwkgICB0byBrZWVwIHRoZSBjb2RlIGFzIHNob3J0IGFuZCBjbGVhbiBhcyBwb3NzaWJsZS4KKwkgICBPdGhlcndpc2UgZnJlcXVlbmNpZXMgYXJlIGV4cG9ydGVkIHZpYSBBQ1BJIHRhYmxlcy4KKwkqLworCWlmIChjcHVfZmFtaWx5IDwgMHgxMCB8fCBjcHVfZmFtaWx5ID09IDB4MTQpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX21zcihjcHUsIE1TUl9BTURfUFNUQVRFX0xJTUlULCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNtYXggPSAodmFsID4+IDQpICYgMHg3OworCisJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEVfU1RBVFVTLCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNjdXIgPSB2YWwgJiAweDc7CisKKwlwc2N1ciArPSBib29zdF9zdGF0ZXM7CisJcHNtYXggKz0gYm9vc3Rfc3RhdGVzOworCWZvciAoaSA9IDA7IGkgPD0gcHNtYXg7IGkrKykgeworCQlpZiAoaSA+PSBNQVhfSFdfUFNUQVRFUykgeworCQkJZnByaW50ZihzdGRlcnIsICJIVyBwc3RhdGVzIFslZF0gZXhjZWVkaW5nIG1heCBbJWRdXG4iLAorCQkJCXBzbWF4LCBNQVhfSFdfUFNUQVRFUyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEUgKyBpLCAmcHN0YXRlLnZhbCkpCisJCQlyZXR1cm4gLTE7CisJCXBzdGF0ZXNbaV0gPSBnZXRfY29mKGNwdV9mYW1pbHksIHBzdGF0ZSk7CisJfQorCSpubyA9IGk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhbWRfcGNpX2dldF9udW1fYm9vc3Rfc3RhdGVzKGludCAqYWN0aXZlLCBpbnQgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcGNpX2FjY2VzcyAqcGNpX2FjYzsKKwlpbnQgdmVuZG9yX2lkID0gMHgxMDIyOworCWludCBib29zdF9kZXZfaWRzWzRdID0gezB4MTIwNCwgMHgxNjA0LCAweDE3MDQsIDB9OworCXN0cnVjdCBwY2lfZGV2ICpkZXZpY2U7CisJdWludDhfdCB2YWwgPSAwOworCisJKmFjdGl2ZSA9ICpzdGF0ZXMgPSAwOworCisJZGV2aWNlID0gcGNpX2FjY19pbml0KCZwY2lfYWNjLCB2ZW5kb3JfaWQsIGJvb3N0X2Rldl9pZHMpOworCisJaWYgKGRldmljZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbCA9IHBjaV9yZWFkX2J5dGUoZGV2aWNlLCAweDE1Yyk7CisJaWYgKHZhbCAmIDMpCisJCSphY3RpdmUgPSAxOworCWVsc2UKKwkJKmFjdGl2ZSA9IDA7CisJKnN0YXRlcyA9ICh2YWwgPj4gMikgJiA3OworCisJcGNpX2NsZWFudXAocGNpX2FjYyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA3NGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMKQEAgLTAsMCArMSwyOTIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8aGVscGVycy9iaXRtYXNrLmg+CisKKy8qIEhvdyBtYW55IGJpdHMgaW4gYW4gdW5zaWduZWQgbG9uZyAqLworI2RlZmluZSBiaXRzcGVybG9uZyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworLyogaG93bWFueShhLGIpIDogaG93IG1hbnkgZWxlbWVudHMgb2Ygc2l6ZSBiIG5lZWRlZCB0byBob2xkIGFsbCBvZiBhICovCisjZGVmaW5lIGhvd21hbnkoeCwgeSkgKCgoeCkrKCh5KS0xKSkvKHkpKQorCisvKiBIb3cgbWFueSBsb25ncyBpbiBtYXNrIG9mIG4gYml0cyAqLworI2RlZmluZSBsb25nc3BlcmJpdHMobikgaG93bWFueShuLCBiaXRzcGVybG9uZykKKworI2RlZmluZSBtYXgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIGBzdHJ1Y3QgYml0bWFzayAqYAorICovCisKKy8qIEFsbG9jYXRlIGEgbmV3IGBzdHJ1Y3QgYml0bWFza2Agd2l0aCBhIHNpemUgb2YgbiBiaXRzICovCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19hbGxvYyh1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgYml0bWFzayAqYm1wOworCisJYm1wID0gbWFsbG9jKHNpemVvZigqYm1wKSk7CisJaWYgKGJtcCA9PSAwKQorCQlyZXR1cm4gMDsKKwlibXAtPnNpemUgPSBuOworCWJtcC0+bWFza3AgPSBjYWxsb2MobG9uZ3NwZXJiaXRzKG4pLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChibXAtPm1hc2twID09IDApIHsKKwkJZnJlZShibXApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGJtcDsKK30KKworLyogRnJlZSBgc3RydWN0IGJpdG1hc2tgICovCit2b2lkIGJpdG1hc2tfZnJlZShzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWlmIChibXAgPT0gMCkKKwkJcmV0dXJuOworCWZyZWUoYm1wLT5tYXNrcCk7CisJYm1wLT5tYXNrcCA9ICh1bnNpZ25lZCBsb25nICopMHhkZWFkY2RlZjsgIC8qIGRvdWJsZSBmcmVlIHRyaXB3aXJlICovCisJZnJlZShibXApOworfQorCisvKgorICogVGhlIHJvdXRpbmVzIF9nZXRiaXQoKSBhbmQgX3NldGJpdCgpIGFyZSB0aGUgb25seQorICogcm91dGluZXMgdGhhdCBhY3R1YWxseSB1bmRlcnN0YW5kIHRoZSBsYXlvdXQgb2YgYm1wLT5tYXNrcFtdLgorICoKKyAqIE9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgdGhpcyBjb3VsZCBzaW1wbHkgYmUgYW4gYXJyYXkgb2YKKyAqIGJ5dGVzLiAgQnV0IHRoZSBrZXJuZWwgbGF5b3V0IG9mIGJpdG1hc2tzIF9pc18gdmlzaWJsZSB0byB1c2Vyc3BhY2UKKyAqIHZpYSB0aGUgc2NoZWRfKHNldC9nZXQpYWZmaW5pdHkgY2FsbHMgaW4gTGludXggMi42LCBhbmQgb24gYmlnCisgKiBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgaXQgaXMgcGFpbmZ1bGx5IG9idmlvdXMgdGhhdCB0aGlzIGlzIGFuCisgKiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncy4KKyAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlICgwIG9yIDEpIG9mIGJpdCBuIGluIGJpdG1hc2sgYm1wICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9nZXRiaXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IG4pCit7CisJaWYgKG4gPCBibXAtPnNpemUpCisJCXJldHVybiAoYm1wLT5tYXNrcFtuL2JpdHNwZXJsb25nXSA+PiAobiAlIGJpdHNwZXJsb25nKSkgJiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBiaXQgbiBpbiBiaXRtYXNrIGJtcCB0byB2YWx1ZSB2ICgwIG9yIDEpICovCitzdGF0aWMgdm9pZCBfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgdikKK3sKKwlpZiAobiA8IGJtcC0+c2l6ZSkgeworCQlpZiAodikKKwkJCWJtcC0+bWFza3Bbbi9iaXRzcGVybG9uZ10gfD0gMVVMIDw8IChuICUgYml0c3BlcmxvbmcpOworCQllbHNlCisJCQlibXAtPm1hc2twW24vYml0c3BlcmxvbmddICY9CisJCQkJfigxVUwgPDwgKG4gJSBiaXRzcGVybG9uZykpOworCX0KK30KKworLyoKKyAqIFdoZW4gcGFyc2luZyBiaXRtYXNrIGxpc3RzLCBvbmx5IGFsbG93IG51bWJlcnMsIHNlcGFyYXRlZCBieSBvbmUKKyAqIG9mIHRoZSBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgcGFyYW1ldGVyICdzcmV0JyBpcyB0aGUgcmV0dXJuIGZyb20gYSBzc2NhbmYgIiV1JWMiLiAgSXQgaXMKKyAqIC0xIGlmIHRoZSBzc2NhbmYgaW5wdXQgc3RyaW5nIHdhcyBlbXB0eS4gIEl0IGlzIDAgaWYgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgaW4gdGhlIHNzY2FuZiBpbnB1dCBzdHJpbmcgd2FzIG5vdCBhIGRlY2ltYWwgbnVtYmVyLgorICogSXQgaXMgMSBpZiB0aGUgdW5zaWduZWQgbnVtYmVyIG1hdGNoaW5nIHRoZSAiJXUiIHdhcyB0aGUgZW5kIG9mIHRoZQorICogaW5wdXQgc3RyaW5nLiAgSXQgaXMgMiBpZiBvbmUgb3IgbW9yZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZm9sbG93ZWQKKyAqIHRoZSBtYXRjaGVkIHVuc2lnbmVkIG51bWJlci4gIElmIGl0IGlzIDIsIHRoZW4gJ25leHRjJyBpcyB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIG51bWJlci4gIFRoZSBwYXJhbWV0ZXIgJ29rX25leHRfY2hhcnMnCisgKiBpcyB0aGUgbnVsLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgbWFzayB0ZXJtIGp1c3Qgc2Nhbm5lZCB3YXMgb2sgaWYgYW5kIG9ubHkgaWYgZWl0aGVyIHRoZSBudW1iZXJzCisgKiBtYXRjaGluZyB0aGUgJXUgd2VyZSBhbGwgb2YgdGhlIGlucHV0IG9yIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbgorICogdGhlIGlucHV0IHBhc3QgdGhlIG51bWJlcnMgd2FzIG9uZSBvZiB0aGUgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl93YXNfb2soaW50IHNyZXQsIGNoYXIgbmV4dGMsIGNvbnN0IGNoYXIgKm9rX25leHRfY2hhcnMpCit7CisJcmV0dXJuIHNyZXQgPT0gMSB8fAorCQkoc3JldCA9PSAyICYmIHN0cmNocihva19uZXh0X2NoYXJzLCBuZXh0YykgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpuZXh0dG9rZW4oY29uc3QgY2hhciAqcSwgIGludCBzZXApCit7CisJaWYgKHEpCisJCXEgPSBzdHJjaHIocSwgc2VwKTsKKwlpZiAocSkKKwkJcSsrOworCXJldHVybiBxOworfQorCisvKiBTZXQgYSBzaW5nbGUgYml0IGkgaW4gYml0bWFzayAqLworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKQoreworCV9zZXRiaXQoYm1wLCBpLCAxKTsKKwlyZXR1cm4gYm1wOworfQorCisvKiBTZXQgYWxsIGJpdHMgaW4gYml0bWFzazogYm1wID0gfjAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJX3NldGJpdChibXAsIGksIDEpOworCXJldHVybiBibXA7Cit9CisKKy8qIENsZWFyIGFsbCBiaXRzIGluIGJpdG1hc2s6IGJtcCA9IDAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2NsZWFyYWxsKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlfc2V0Yml0KGJtcCwgaSwgMCk7CisJcmV0dXJuIGJtcDsKK30KKworLyogVHJ1ZSBpZiBhbGwgYml0cyBhcmUgY2xlYXIgKi8KK2ludCBiaXRtYXNrX2lzYWxsY2xlYXIoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYm1wLT5zaXplOyBpKyspCisJCWlmIChfZ2V0Yml0KGJtcCwgaSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogVHJ1ZSBpZiBzcGVjaWZpZWQgYml0IGkgaXMgc2V0ICovCitpbnQgYml0bWFza19pc2JpdHNldChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlyZXR1cm4gX2dldGJpdChibXAsIGkpOworfQorCisvKiBOdW1iZXIgb2YgbG93ZXN0IHNldCBiaXQgKG1pbikgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJcmV0dXJuIGJpdG1hc2tfbmV4dChibXAsIDApOworfQorCisvKiBOdW1iZXIgb2YgaGlnaGVzdCBzZXQgYml0IChtYXgpICovCit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG0gPSBibXAtPnNpemU7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlpZiAoX2dldGJpdChibXAsIGkpKQorCQkJbSA9IGk7CisJcmV0dXJuIG07Cit9CisKKy8qIE51bWJlciBvZiBuZXh0IHNldCBiaXQgYXQgb3IgYWJvdmUgZ2l2ZW4gYml0IGkgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX25leHQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpCit7CisJdW5zaWduZWQgaW50IG47CisJZm9yIChuID0gaTsgbiA8IGJtcC0+c2l6ZTsgbisrKQorCQlpZiAoX2dldGJpdChibXAsIG4pKQorCQkJYnJlYWs7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzIGFuZCByYW5nZXMgb2YgbnVtYmVycywKKyAqIHdpdGggb3B0aW9uYWwgJzoldScgc3RyaWRlcyBtb2RpZnlpbmcgcmFuZ2VzLCBpbnRvIHByb3ZpZGVkIGJpdG1hc2suCisgKiBTb21lIGV4YW1wbGVzIG9mIGlucHV0IGxpc3RzIGFuZCB0aGVpciBlcXVpdmFsZW50IHNpbXBsZSBsaXN0OgorICoJSW5wdXQJCUVxdWl2YWxlbnQgdG8KKyAqCTAtMwkJMCwxLDIsMworICoJMC03OjIJCTAsMiw0LDYKKyAqCTEsMyw1LTcJCTEsMyw1LDYsNworICoJMC0zOjIsOC0xNTo0CTAsMiw4LDEyCisgKi8KK2ludCBiaXRtYXNrX3BhcnNlbGlzdChjb25zdCBjaGFyICpidWYsIHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJY29uc3QgY2hhciAqcCwgKnE7CisKKwliaXRtYXNrX2NsZWFyYWxsKGJtcCk7CisKKwlxID0gYnVmOworCXdoaWxlIChwID0gcSwgcSA9IG5leHR0b2tlbihxLCAnLCcpLCBwKSB7CisJCXVuc2lnbmVkIGludCBhOwkJLyogYmVnaW4gb2YgcmFuZ2UgKi8KKwkJdW5zaWduZWQgaW50IGI7CQkvKiBlbmQgb2YgcmFuZ2UgKi8KKwkJdW5zaWduZWQgaW50IHM7CQkvKiBzdHJpZGUgKi8KKwkJY29uc3QgY2hhciAqYzEsICpjMjsJLyogbmV4dCB0b2tlbnMgYWZ0ZXIgJy0nIG9yICcsJyAqLworCQljaGFyIG5leHRjOwkJLyogY2hhciBhZnRlciBzc2NhbmYgJXUgbWF0Y2ggKi8KKwkJaW50IHNyZXQ7CQkvKiBzc2NhbmYgcmV0dXJuIChudW1iZXIgb2YgbWF0Y2hlcykgKi8KKworCQlzcmV0ID0gc3NjYW5mKHAsICIldSVjIiwgJmEsICZuZXh0Yyk7CisJCWlmICghc2Nhbl93YXNfb2soc3JldCwgbmV4dGMsICIsLSIpKQorCQkJZ290byBlcnI7CisJCWIgPSBhOworCQlzID0gMTsKKwkJYzEgPSBuZXh0dG9rZW4ocCwgJy0nKTsKKwkJYzIgPSBuZXh0dG9rZW4ocCwgJywnKTsKKwkJaWYgKGMxICE9IE5VTEwgJiYgKGMyID09IE5VTEwgfHwgYzEgPCBjMikpIHsKKwkJCXNyZXQgPSBzc2NhbmYoYzEsICIldSVjIiwgJmIsICZuZXh0Yyk7CisJCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLDoiKSkKKwkJCQlnb3RvIGVycjsKKwkJCWMxID0gbmV4dHRva2VuKGMxLCAnOicpOworCQkJaWYgKGMxICE9IE5VTEwgJiYgKGMyID09IE5VTEwgfHwgYzEgPCBjMikpIHsKKwkJCQlzcmV0ID0gc3NjYW5mKGMxLCAiJXUlYyIsICZzLCAmbmV4dGMpOworCQkJCWlmICghc2Nhbl93YXNfb2soc3JldCwgbmV4dGMsICIsIikpCisJCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJCWlmICghKGEgPD0gYikpCisJCQlnb3RvIGVycjsKKwkJaWYgKGIgPj0gYm1wLT5zaXplKQorCQkJZ290byBlcnI7CisJCXdoaWxlIChhIDw9IGIpIHsKKwkJCV9zZXRiaXQoYm1wLCBhLCAxKTsKKwkJCWEgKz0gczsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK2VycjoKKwliaXRtYXNrX2NsZWFyYWxsKGJtcCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogZW1pdChidWYsIGJ1ZmxlbiwgcmJvdCwgcnRvcCwgbGVuKQorICoKKyAqIEhlbHBlciByb3V0aW5lIGZvciBiaXRtYXNrX2Rpc3BsYXlsaXN0KCkuICBXcml0ZSBkZWNpbWFsIG51bWJlcgorICogb3IgcmFuZ2UgdG8gYnVmK2xlbiwgc3VwcHJlc3Npbmcgb3V0cHV0IHBhc3QgYnVmK2J1Zmxlbiwgd2l0aCBvcHRpb25hbAorICogY29tbWEtcHJlZml4LiAgUmV0dXJuIGxlbiBvZiB3aGF0IHdvdWxkIGJlIHdyaXR0ZW4gdG8gYnVmLCBpZiBpdAorICogYWxsIGZpdC4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBlbWl0KGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHJib3QsIGludCBydG9wLCBpbnQgbGVuKQoreworCWlmIChsZW4gPiAwKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiwiKTsKKwlpZiAocmJvdCA9PSBydG9wKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiVkIiwgcmJvdCk7CisJZWxzZQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiVkLSVkIiwKKwkJCQlyYm90LCBydG9wKTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogV3JpdGUgZGVjaW1hbCBsaXN0IHJlcHJlc2VudGF0aW9uIG9mIGJtcCB0byBidWYuCisgKgorICogT3V0cHV0IGZvcm1hdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlY2ltYWwgbnVtYmVycyBhbmQKKyAqIHJhbmdlcy4gIENvbnNlY3V0aXZlbHkgc2V0IGJpdHMgYXJlIHNob3duIGFzIHR3byBoeXBoZW4tc2VwYXJhdGVkCisgKiBkZWNpbWFsIG51bWJlcnMsIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBiaXQgbnVtYmVycyBzZXQgaW4KKyAqIHRoZSByYW5nZS4gIE91dHB1dCBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb3JtYXQKKyAqIGFjY2VwdGVkIGFzIGlucHV0IGJ5IGJpdG1hcF9wYXJzZWxpc3QoKS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZCBiZQorICogZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJywgYXMKKyAqIHBlciBJU08gQzk5LgorICovCisKK2ludCBiaXRtYXNrX2Rpc3BsYXlsaXN0KGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwlpbnQgbGVuID0gMDsKKwkvKiBjdXJyZW50IGJpdCBpcyAnY3VyJywgbW9zdCByZWNlbnRseSBzZWVuIHJhbmdlIGlzIFtyYm90LCBydG9wXSAqLworCXVuc2lnbmVkIGludCBjdXIsIHJib3QsIHJ0b3A7CisKKwlpZiAoYnVmbGVuID4gMCkKKwkJKmJ1ZiA9IDA7CisJcmJvdCA9IGN1ciA9IGJpdG1hc2tfZmlyc3QoYm1wKTsKKwl3aGlsZSAoY3VyIDwgYm1wLT5zaXplKSB7CisJCXJ0b3AgPSBjdXI7CisJCWN1ciA9IGJpdG1hc2tfbmV4dChibXAsIGN1cisxKTsKKwkJaWYgKGN1ciA+PSBibXAtPnNpemUgfHwgY3VyID4gcnRvcCArIDEpIHsKKwkJCWxlbiA9IGVtaXQoYnVmLCBidWZsZW4sIHJib3QsIHJ0b3AsIGxlbik7CisJCQlyYm90ID0gY3VyOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjg5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfQklUTUFTS19fCisjZGVmaW5lIF9fQ1BVUE9XRVJfQklUTUFTS19fCisKKy8qIFRha2VuIG92ZXIgZnJvbSBsaWJiaXRtYXNrLCBhIHByb2plY3QgaW5pdGlhdGVkIGZyb20gc2dpOgorICogVXJsOiAgICAgICAgICAgIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9jcHVzZXRzLworICogVW5mb3J0dW5hdGVseSBpdCdzIG5vdCB2ZXJ5IHdpZGVzcHJlYWQsIHRoZXJlZm9yZSByZWxldmFudCBwYXJ0cyBhcmUKKyAqIHBhc3RlZCBoZXJlLgorICovCisKK3N0cnVjdCBiaXRtYXNrIHsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nICptYXNrcDsKK307CisKK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2FsbG9jKHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgYml0bWFza19mcmVlKHN0cnVjdCBiaXRtYXNrICpibXApOworCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRiaXQoc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0YWxsKHN0cnVjdCBiaXRtYXNrICpibXApOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfY2xlYXJhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOwordW5zaWduZWQgaW50IGJpdG1hc2tfbmV4dChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSk7Cit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworaW50IGJpdG1hc2tfaXNhbGxjbGVhcihjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKTsKK2ludCBiaXRtYXNrX2lzYml0c2V0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKTsKKworaW50IGJpdG1hc2tfcGFyc2VsaXN0KGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IGJpdG1hc2sgKmJtcCk7CitpbnQgYml0bWFza19kaXNwbGF5bGlzdChjaGFyICpidWYsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworCisKKworI2VuZGlmIC8qX19DUFVQT1dFUl9CSVRNQVNLX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY4OTVkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jCkBAIC0wLDAgKzEsMTc2IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVfdmVuZG9yX3RhYmxlW1g4Nl9WRU5ET1JfTUFYXSA9IHsKKwkiVW5rbm93biIsICJHZW51aW5lSW50ZWwiLCAiQXV0aGVudGljQU1EIiwKK307CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKy8qIGZyb20gZ2NjICovCisjaW5jbHVkZSA8Y3B1aWQuaD4KKworLyoKKyAqIENQVUlEIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBzaW5nbGUgZGF0dW0KKyAqCisgKiBEZWZpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VbYWJjZF14KHVuc2lnbmVkIGludCBvcCkKKyAqLworI2RlZmluZSBjcHVpZF9mdW5jKHJlZykJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY3B1aWRfIyNyZWcodW5zaWduZWQgaW50IG9wKQlcCisJewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwkJXAorCV9fY3B1aWQob3AsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CQlcCisJcmV0dXJuIHJlZzsJCQkJCVwKKwl9CitjcHVpZF9mdW5jKGVheCk7CitjcHVpZF9mdW5jKGVieCk7CitjcHVpZF9mdW5jKGVjeCk7CitjcHVpZF9mdW5jKGVkeCk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICoKKyAqIFRCRDogU2hvdWxkIHRoZXJlIGJlIGEgY3B1aWQgYWx0ZXJuYXRpdmUgZm9yIHRoaXMgaWYgL3Byb2MgaXMgbm90IG1vdW50ZWQ/CisgKi8KK2ludCBnZXRfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvICpjcHVfaW5mbykKK3sKKwlGSUxFICpmcDsKKwljaGFyIHZhbHVlWzY0XTsKKwl1bnNpZ25lZCBpbnQgcHJvYywgeDsKKwl1bnNpZ25lZCBpbnQgdW5rbm93biA9IDB4ZmZmZmZmOworCXVuc2lnbmVkIGludCBjcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsOworCisJaW50IHJldCA9IC1FSU5WQUw7CisKKwljcHVfaW5mby0+dmVuZG9yCQk9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKKwljcHVfaW5mby0+ZmFtaWx5CQk9IHVua25vd247CisJY3B1X2luZm8tPm1vZGVsCQkJPSB1bmtub3duOworCWNwdV9pbmZvLT5zdGVwcGluZwkJPSB1bmtub3duOworCWNwdV9pbmZvLT5jYXBzCQkJPSAwOworCisJZnAgPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC1FSU87CisKKwl3aGlsZSAoIWZlb2YoZnApKSB7CisJCWlmICghZmdldHModmFsdWUsIDY0LCBmcCkpCisJCQljb250aW51ZTsKKwkJdmFsdWVbNjMgLSAxXSA9ICdcMCc7CisKKwkJaWYgKCFzdHJuY21wKHZhbHVlLCAicHJvY2Vzc29yXHQ6ICIsIDEyKSkKKwkJCXNzY2FuZih2YWx1ZSwgInByb2Nlc3Nvclx0OiAldSIsICZwcm9jKTsKKworCQlpZiAocHJvYyAhPSBjcHUpCisJCQljb250aW51ZTsKKworCQkvKiBHZXQgQ1BVIHZlbmRvciAqLworCQlpZiAoIXN0cm5jbXAodmFsdWUsICJ2ZW5kb3JfaWQiLCA5KSkgeworCQkJZm9yICh4ID0gMTsgeCA8IFg4Nl9WRU5ET1JfTUFYOyB4KyspIHsKKwkJCQlpZiAoc3Ryc3RyKHZhbHVlLCBjcHVfdmVuZG9yX3RhYmxlW3hdKSkKKwkJCQkJY3B1X2luZm8tPnZlbmRvciA9IHg7CisJCQl9CisJCS8qIEdldCBDUFUgZmFtaWx5LCBldGMuICovCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJjcHUgZmFtaWx5XHQ6ICIsIDEzKSkgeworCQkJc3NjYW5mKHZhbHVlLCAiY3B1IGZhbWlseVx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5mYW1pbHkpOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAibW9kZWxcdFx0OiAiLCA5KSkgeworCQkJc3NjYW5mKHZhbHVlLCAibW9kZWxcdFx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5tb2RlbCk7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJzdGVwcGluZ1x0OiAiLCAxMCkpIHsKKwkJCXNzY2FuZih2YWx1ZSwgInN0ZXBwaW5nXHQ6ICV1IiwKKwkJCSAgICAgICAmY3B1X2luZm8tPnN0ZXBwaW5nKTsKKworCQkJLyogRXhpdCAtPiBhbGwgdmFsdWVzIG11c3QgaGF2ZSBiZWVuIHNldCAqLworCQkJaWYgKGNwdV9pbmZvLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9VTktOT1dOIHx8CisJCQkgICAgY3B1X2luZm8tPmZhbWlseSA9PSB1bmtub3duIHx8CisJCQkgICAgY3B1X2luZm8tPm1vZGVsID09IHVua25vd24gfHwKKwkJCSAgICBjcHVfaW5mby0+c3RlcHBpbmcgPT0gdW5rbm93bikgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXQgPSAtRU5PREVWOworb3V0OgorCWZjbG9zZShmcCk7CisJLyogR2V0IHNvbWUgdXNlZnVsIENQVSBjYXBhYmlsaXRpZXMgZnJvbSBjcHVpZCAqLworCWlmIChjcHVfaW5mby0+dmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdV9pbmZvLT52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIHJldDsKKworCWNwdWlkX2xldmVsCT0gY3B1aWRfZWF4KDApOworCWV4dF9jcHVpZF9sZXZlbAk9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKKworCS8qIEludmFyaWFudCBUU0MgKi8KKwlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkgICAgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDgpKSkKKwkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lOVl9UU0M7CisKKwkvKiBBcGVyZi9NcGVyZiByZWdpc3RlcnMgc3VwcG9ydCAqLworCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAweDEpKQorCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQVBFUkY7CisKKwkvKiBBTUQgQm9vc3Qgc3RhdGUgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXIgKi8KKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgeworCQlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkJICAgIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA5KSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQU1EX0NCUDsKKwl9CisKKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmCisJCSAgICAoY3B1aWRfZWF4KDYpICYgKDEgPDwgMSkpKQorCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lOVEVMX0lEQTsKKwl9CisKKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCS8qIEludGVsJ3MgcGVyZi1iaWFzIE1TUiBzdXBwb3J0ICovCisJCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAoMSA8PCAzKSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTOworCisJCS8qIEludGVsJ3MgVHVyYm8gUmF0aW8gTGltaXQgc3VwcG9ydCAqLworCQlpZiAoY3B1X2luZm8tPmZhbWlseSA9PSA2KSB7CisJCQlzd2l0Y2ggKGNwdV9pbmZvLT5tb2RlbCkgeworCQkJY2FzZSAweDFBOgkvKiBDb3JlIGk3LCBYZW9uIDU1MDAgc2VyaWVzCisJCQkJCSAqIEJsb29tZmllbGQsIEdhaW5zdG93biBOSE0tRVAKKwkJCQkJICovCisJCQljYXNlIDB4MUU6CS8qIENvcmUgaTcgYW5kIGk1IFByb2Nlc3NvcgorCQkJCQkgKiBDbGFya3NmaWVsZCwgTHlubmZpZWxkLCBKYXNwZXIgRm9yZXN0CisJCQkJCSAqLworCQkJY2FzZSAweDFGOgkvKiBDb3JlIGk3IGFuZCBpNSBQcm9jZXNzb3IgLSBOZWhhbGVtICovCisJCQljYXNlIDB4MjU6CS8qIFdlc3RtZXJlIENsaWVudAorCQkJCQkgKiBDbGFya2RhbGUsIEFycmFuZGFsZQorCQkJCQkgKi8KKwkJCWNhc2UgMHgyQzoJLyogV2VzdG1lcmUgRVAgLSBHdWxmdG93biAqLworCQkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU87CisJCQljYXNlIDB4MkE6CS8qIFNOQiAqLworCQkJY2FzZSAweDJEOgkvKiBTTkIgWGVvbiAqLworCQkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU87CisJCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lTX1NOQjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgyRToJLyogTmVoYWxlbS1FWCBYZW9uIC0gQmVja3RvbiAqLworCQkJY2FzZSAweDJGOgkvKiBXZXN0bWVyZS1FWCBYZW9uIC0gRWFnbGV0b24gKi8KKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKglwcmludGYoIklEOiAldSAtIEV4dGlkOiAweCV4IC0gQ2FwczogMHglbGx4XG4iLAorCQljcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsLCBjcHVfaW5mby0+Y2Fwcyk7CisJKi8KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzQ3ZTczCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIE1pc2NlbGxhbmVvdXMgaGVscGVycyB3aGljaCBkbyBub3QgZml0IG9yIGFyZSB3b3J0aAorICogdG8gcHV0IGludG8gc2VwYXJhdGUgaGVhZGVycworICovCisKKyNpZm5kZWYgX19DUFVQT1dFUlVUSUxTX0hFTFBFUlNfXworI2RlZmluZSBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fCisKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBOTFMKKworI2RlZmluZSBfKFN0cmluZykgZ2V0dGV4dChTdHJpbmcpCisjaWZuZGVmIGdldHRleHRfbm9vcAorI2RlZmluZSBnZXR0ZXh0X25vb3AoU3RyaW5nKSBTdHJpbmcKKyNlbmRpZgorI2RlZmluZSBOXyhTdHJpbmcpIGdldHRleHRfbm9vcChTdHJpbmcpCisKKyNlbHNlIC8qICFOTFMgKi8KKworI2RlZmluZSBfKFN0cmluZykgU3RyaW5nCisjZGVmaW5lIE5fKFN0cmluZykgU3RyaW5nCisKKyNlbmRpZgorLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBydW5fYXNfcm9vdDsKK2V4dGVybiBzdHJ1Y3QgYml0bWFzayAqY3B1c19jaG9zZW47CisKKy8qIEdsb2JhbCB2ZXJib3NlICgtZCkgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGRlZmluZSBERUJVRyB2aWEgZ2xvYmFsIE1ha2VmaWxlIHZhcmlhYmxlCisgKiBEZWJ1ZyBvdXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIGRvOgorICogY3B1cG93ZXIgbW9uaXRvciAyPi90bXAvZGVidWcKKyAqIHRvIHNwbGl0IGRlYnVnIG91dHB1dCBhd2F5IGZyb20gbm9ybWFsIG91dHB1dAorKi8KKyNpZmRlZiBERUJVRworZXh0ZXJuIGludCBiZV92ZXJib3NlOworCisjZGVmaW5lIGRwcmludChmbXQsIC4uLikgewkJCQkJXAorCQlpZiAoYmVfdmVyYm9zZSkgewkJCQlcCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAiIGZtdCwJCVwKKwkJCQlfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXyk7CVwKKwkJfQkJCQkJCVwKKwl9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRwcmludChjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CisjZW5kaWYKK2V4dGVybiBpbnQgYmVfdmVyYm9zZTsKKy8qIEdsb2JhbCB2ZXJib3NlICgtdikgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gY3B1cG93ZXJfY3B1X3ZlbmRvciB7WDg2X1ZFTkRPUl9VTktOT1dOID0gMCwgWDg2X1ZFTkRPUl9JTlRFTCwKKwkJCSAgWDg2X1ZFTkRPUl9BTUQsIFg4Nl9WRU5ET1JfTUFYfTsKKworI2RlZmluZSBDUFVQT1dFUl9DQVBfSU5WX1RTQwkJMHgwMDAwMDAwMQorI2RlZmluZSBDUFVQT1dFUl9DQVBfQVBFUkYJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0FNRF9DQlAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUwkJMHgwMDAwMDAwOAorI2RlZmluZSBDUFVQT1dFUl9DQVBfSEFTX1RVUkJPX1JBVElPCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0lTX1NOQgkJMHgwMDAwMDAxMQorI2RlZmluZSBDUFVQT1dFUl9DQVBfSU5URUxfSURBCQkweDAwMDAwMDEyCisKKyNkZWZpbmUgTUFYX0hXX1BTVEFURVMgMTAKKworc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIHsKKwllbnVtIGNwdXBvd2VyX2NwdV92ZW5kb3IgdmVuZG9yOworCXVuc2lnbmVkIGludCBmYW1pbHk7CisJdW5zaWduZWQgaW50IG1vZGVsOworCXVuc2lnbmVkIGludCBzdGVwcGluZzsKKwkvKiBDUFUgY2FwYWJpbGl0aWVzIHJlYWQgb3V0IGZyb20gY3B1aWQgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FwczsKK307CisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICogT25seSB1c2VkIG9uIHg4NiwgYmVsb3cgZ2xvYmFsJ3Mgc3RydWN0IHZhbHVlcyBhcmUgemVyby91bmtub3duIG9uCisgKiBvdGhlciBhcmNocworICovCitleHRlcm4gaW50IGdldF9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gKmNwdV9pbmZvKTsKK2V4dGVybiBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1cG93ZXJfY3B1X2luZm87CisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5IHBhcnNpbmcgKioqKioqKioqKioqKioqKioqLworc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IHsKKwkvKiBBbW91bnQgb2YgQ1BVIGNvcmVzLCBwYWNrYWdlcyBhbmQgdGhyZWFkcyBwZXIgY29yZSBpbiB0aGUgc3lzdGVtICovCisJdW5zaWduZWQgaW50IGNvcmVzOworCXVuc2lnbmVkIGludCBwa2dzOworCXVuc2lnbmVkIGludCB0aHJlYWRzOyAvKiBwZXIgY29yZSAqLworCisJLyogQXJyYXkgZ2V0cyBtYWxsb2NhdGVkIHdpdGggY29yZXMgZW50cmllcywgaG9sZGluZyBwZXIgY29yZSBpbmZvICovCisJc3RydWN0IHsKKwkJaW50IHBrZzsKKwkJaW50IGNvcmU7CisJCWludCBjcHU7CisKKwkJLyogZmxhZ3MgKi8KKwkJdW5zaWduZWQgaW50IGlzX29ubGluZToxOworCX0gKmNvcmVfaW5mbzsKK307CisKK2V4dGVybiBpbnQgZ2V0X2NwdV90b3BvbG9neShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgKmNwdV90b3ApOworZXh0ZXJuIHZvaWQgY3B1X3RvcG9sb2d5X3JlbGVhc2Uoc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IGNwdV90b3ApOworLyogQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeSBwYXJzaW5nICoqKioqKioqKioqKioqKioqKi8KKworLyogWDg2IE9OTFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisKKy8qIFJlYWQvV3JpdGUgbXNyICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaW50IHJlYWRfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsKTsKK2V4dGVybiBpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpOworCitleHRlcm4gaW50IG1zcl9pbnRlbF9zZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCB2YWwpOworZXh0ZXJuIGludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbXNyX2ludGVsX2dldF90dXJib19yYXRpbyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogUmVhZC9Xcml0ZSBtc3IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gaW50IGFtZF9wY2lfZ2V0X251bV9ib29zdF9zdGF0ZXMoaW50ICphY3RpdmUsIGludCAqc3RhdGVzKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2FjY19pbml0KHN0cnVjdCBwY2lfYWNjZXNzICoqcGFjYywgaW50IHZlbmRvcl9pZCwKKwkJCQkgICAgaW50ICpkZXZfaWRzKTsKKworLyogUENJIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFNRCBIVyBwc3RhdGUgZGVjb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgZGVjb2RlX3BzdGF0ZXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGNwdV9mYW1pbHksCisJCQkgIGludCBib29zdF9zdGF0ZXMsIHVuc2lnbmVkIGxvbmcgKnBzdGF0ZXMsIGludCAqbm8pOworCisvKiBBTUQgSFcgcHN0YXRlIGRlY29kaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LAorCQkJCSAgICAgaW50ICphY3RpdmUsIGludCAqIHN0YXRlcyk7CisvKgorICogQ1BVSUQgZnVuY3Rpb25zIHJldHVybmluZyBhIHNpbmdsZSBkYXR1bQorICovCit1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWN4KHVuc2lnbmVkIGludCBvcCk7Cit1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVkIGludCBvcCk7CisKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogWDg2IE9OTFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZGVjb2RlX3BzdGF0ZXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGNwdV9mYW1pbHksCisJCQkJIGludCBib29zdF9zdGF0ZXMsIHVuc2lnbmVkIGxvbmcgKnBzdGF0ZXMsCisJCQkJIGludCAqbm8pCit7IHJldHVybiAtMTsgfTsKKworc3RhdGljIGlubGluZSBpbnQgcmVhZF9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmFsKQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIGludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KQoreyByZXR1cm4gLTE7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBtc3JfaW50ZWxfZ2V0X3R1cmJvX3JhdGlvKHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiAwOyB9OworCisvKiBSZWFkL1dyaXRlIG1zciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUsIGludCAqc3VwcG9ydCwKKwkJCQkJICAgIGludCAqYWN0aXZlLCBpbnQgKiBzdGF0ZXMpCit7IHJldHVybiAtMTsgfQorCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCisKKyNlbmRpZiAvKiBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21pc2MuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDkyNDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21pc2MuYwpAQCAtMCwwICsxLDI3IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKK2ludCBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUsIGludCAqc3VwcG9ydCwgaW50ICphY3RpdmUsCisJCQlpbnQgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1X2luZm87CisJaW50IHJldDsKKworCSpzdXBwb3J0ID0gKmFjdGl2ZSA9ICpzdGF0ZXMgPSAwOworCisJcmV0ID0gZ2V0X2NwdV9pbmZvKDAsICZjcHVfaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0FNRF9DQlApIHsKKwkJKnN1cHBvcnQgPSAxOworCQlhbWRfcGNpX2dldF9udW1fYm9vc3Rfc3RhdGVzKGFjdGl2ZSwgc3RhdGVzKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnN1cHBvcnQgPSAxOworCX0gZWxzZSBpZiAoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9JTlRFTF9JREEpCisJCSpzdXBwb3J0ID0gKmFjdGl2ZSA9IDE7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21zci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTRiMjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21zci5jCkBAIC0wLDAgKzEsMTE1IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qIEludGVsIHNwZWNpZmljIE1TUnMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFUwkJMHgxYTAKKyNkZWZpbmUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUwkweDFiMAorI2RlZmluZSBNU1JfTkVIQUxFTV9UVVJCT19SQVRJT19MSU1JVAkweDFhZAorCisvKgorICogcmVhZF9tc3IKKyAqCisgKiBXaWxsIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUuCisgKiBQb3NzaWJsZSBlcnJubyB2YWx1ZXMgY291bGQgYmU6CisgKiBFRkFVTFQgLUlmIHRoZSByZWFkL3dyaXRlIGRpZCBub3QgZnVsbHkgY29tcGxldGUKKyAqIEVJTyAgICAtSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IE1TUnMKKyAqIEVOWElPICAtSWYgdGhlIENQVSBkb2VzIG5vdCBleGlzdAorICovCisKK2ludCByZWFkX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlpbnQgZmQ7CisJY2hhciBtc3JfZmlsZV9uYW1lWzY0XTsKKworCXNwcmludGYobXNyX2ZpbGVfbmFtZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKG1zcl9maWxlX25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGxzZWVrKGZkLCBpZHgsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnI7CisJaWYgKHJlYWQoZmQsIHZhbCwgc2l6ZW9mICp2YWwpICE9IHNpemVvZiAqdmFsKQorCQlnb3RvIGVycjsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7CisgZXJyOgorCWNsb3NlKGZkKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiB3cml0ZV9tc3IKKyAqCisgKiBXaWxsIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUuCisgKiBQb3NzaWJsZSBlcnJubyB2YWx1ZXMgY291bGQgYmU6CisgKiBFRkFVTFQgLUlmIHRoZSByZWFkL3dyaXRlIGRpZCBub3QgZnVsbHkgY29tcGxldGUKKyAqIEVJTyAgICAtSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IE1TUnMKKyAqIEVOWElPICAtSWYgdGhlIENQVSBkb2VzIG5vdCBleGlzdAorICovCitpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJaW50IGZkOworCWNoYXIgbXNyX2ZpbGVfbmFtZVs2NF07CisKKwlzcHJpbnRmKG1zcl9maWxlX25hbWUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCWZkID0gb3Blbihtc3JfZmlsZV9uYW1lLCBPX1dST05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChsc2VlayhmZCwgaWR4LCBTRUVLX0NVUikgPT0gLTEpCisJCWdvdG8gZXJyOworCWlmICh3cml0ZShmZCwgJnZhbCwgc2l6ZW9mIHZhbCkgIT0gc2l6ZW9mIHZhbCkKKwkJZ290byBlcnI7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworIGVycjoKKwljbG9zZShmZCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgbXNyX2ludGVsX2dldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gdmFsOworfQorCitpbnQgbXNyX2ludGVsX3NldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSB3cml0ZV9tc3IoY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBtc3JfaW50ZWxfZ2V0X3R1cmJvX3JhdGlvKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU8pKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9ORUhBTEVNX1RVUkJPX1JBVElPX0xJTUlULCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiB2YWw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMmViNmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3BjaS5jCkBAIC0wLDAgKzEsNDQgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxoZWxwZXJzL2hlbHBlcnMuaD4KKworLyoKKyAqIHBjaV9hY2NfaW5pdAorICoKKyAqIFBDSSBhY2Nlc3MgaGVscGVyIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiBsaWJwY2kKKyAqCisgKiAqKnBhY2MgOiBpZiBhIHZhbGlkIHBjaV9kZXYgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgKnBhY2MgbXVzdCBiZSBwYXNzZWQgdG8gcGNpX2FjY19jbGVhbnVwIHRvIGZyZWUgaXQKKyAqCisgKiB2ZW5kb3JfaWQgOiB0aGUgcGNpIHZlbmRvciBpZCBtYXRjaGluZyB0aGUgcGNpIGRldmljZSB0byBhY2Nlc3MKKyAqIGRldl9pZHMgOiAgIGRldmljZSBpZHMgbWF0Y2hpbmcgdGhlIHBjaSBkZXZpY2UgdG8gYWNjZXNzCisgKgorICogUmV0dXJucyA6CisgKiBzdHJ1Y3QgcGNpX2RldiB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHBjaV97cmVhZCx3cml0ZX1fKiBmdW5jdGlvbnMKKyAqICAgICAgICAgICAgICAgIHRvIGFjY2VzcyB0aGUgUENJIGNvbmZpZyBzcGFjZSBvZiBtYXRjaGluZyBwY2kgZGV2aWNlcworICovCitzdHJ1Y3QgcGNpX2RldiAqcGNpX2FjY19pbml0KHN0cnVjdCBwY2lfYWNjZXNzICoqcGFjYywgaW50IHZlbmRvcl9pZCwKKwkJCQkgICAgaW50ICpkZXZfaWRzKQoreworCXN0cnVjdCBwY2lfZmlsdGVyIGZpbHRlcl9uYl9saW5rID0geyAtMSwgLTEsIC0xLCAtMSwgdmVuZG9yX2lkLCAwfTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlOworCXVuc2lnbmVkIGludCBpOworCisJKnBhY2MgPSBwY2lfYWxsb2MoKTsKKwlpZiAoKnBhY2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwY2lfaW5pdCgqcGFjYyk7CisJcGNpX3NjYW5fYnVzKCpwYWNjKTsKKworCWZvciAoaSA9IDA7IGRldl9pZHNbaV0gIT0gMDsgaSsrKSB7CisJCWZpbHRlcl9uYl9saW5rLmRldmljZSA9IGRldl9pZHNbaV07CisJCWZvciAoZGV2aWNlID0gKCpwYWNjKS0+ZGV2aWNlczsgZGV2aWNlOyBkZXZpY2UgPSBkZXZpY2UtPm5leHQpIHsKKwkJCWlmIChwY2lfZmlsdGVyX21hdGNoKCZmaWx0ZXJfbmJfbGluaywgZGV2aWNlKSkKKwkJCQlyZXR1cm4gZGV2aWNlOworCQl9CisJfQorCXBjaV9jbGVhbnVwKCpwYWNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNDMwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqICAoQykgMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBub3ZlbGwuY29tPiBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisKK3Vuc2lnbmVkIGludCBzeXNmc19yZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWludCBmZDsKKwlzc2l6ZV90IG51bXJlYWQ7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAobnVtcmVhZCA8IDEpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3dyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuKQoreworCWludCBmZDsKKwlzc2l6ZV90IG51bXdyaXRlOworCisJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAwOworCisJbnVtd3JpdGUgPSB3cml0ZShmZCwgdmFsdWUsIGxlbik7CisJaWYgKG51bXdyaXRlIDwgMSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKwljbG9zZShmZCk7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXdyaXRlOworfQorCisvKgorICogRGV0ZWN0IHdoZXRoZXIgYSBDUFUgaXMgb25saW5lCisgKgorICogUmV0dXJuczoKKyAqICAgICAxIC0+IGlmIENQVSBpcyBvbmxpbmUKKyAqICAgICAwIC0+IGlmIENQVSBpcyBvZmZsaW5lCisgKiAgICAgbmVnYXRpdmUgZXJybm8gdmFsdWVzIGluIGVycm9yIGNhc2UKKyAqLworaW50IHN5c2ZzX2lzX2NwdV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCWludCBmZDsKKwlzc2l6ZV90IG51bXJlYWQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdSV1IiwgY3B1KTsKKworCWlmIChzdGF0KHBhdGgsICZzdGF0YnVmKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICoga2VybmVsIHdpdGhvdXQgQ09ORklHX0hPVFBMVUdfQ1BVCisJICogLT4gY3B1WCBkaXJlY3RvcnkgZXhpc3RzLCBidXQgbm90IGNwdVgvb25saW5lIGZpbGUKKwkgKi8KKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9vbmxpbmUiLCBjcHUpOworCWlmIChzdGF0KHBhdGgsICZzdGF0YnVmKSAhPSAwKQorCQlyZXR1cm4gMTsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gLWVycm5vOworCisJbnVtcmVhZCA9IHJlYWQoZmQsIGxpbmVidWYsIE1BWF9MSU5FX0xFTiAtIDEpOworCWlmIChudW1yZWFkIDwgMSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAtRUlPOworCX0KKwlsaW5lYnVmW251bXJlYWRdID0gJ1wwJzsKKwljbG9zZShmZCk7CisKKwl2YWx1ZSA9IHN0cnRvdWxsKGxpbmVidWYsICZlbmRwLCAwKTsKKwlpZiAodmFsdWUgPiAxIHx8IHZhbHVlIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIENQVWlkbGUgaWRsZXN0YXRlIHNwZWNpZmljIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvY3B1aWRsZS8gYWNjZXNzICovCisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBmaWxlIGZyb20gL3N5cyBpbnRvIGdpdmVuIGJ1ZmZlcgorICogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHVYL2NwdWlkbGUvc3RhdGVYLyIgZGlyCisgKiBjc3RhdGVzIHN0YXJ0aW5nIHdpdGggMCwgQzAgaXMgbm90IGNvdW50ZWQgYXMgY3N0YXRlLgorICogVGhpcyBtZWFucyBpZiB5b3Ugd2FudCBDMSBpbmZvLCBwYXNzIDAgYXMgaWRsZXN0YXRlIHBhcmFtCisgKi8KK3Vuc2lnbmVkIGludCBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisJc3NpemVfdCBudW1yZWFkOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1aWRsZS9zdGF0ZSV1LyVzIiwKKwkJIGNwdSwgaWRsZXN0YXRlLCBmbmFtZSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAobnVtcmVhZCA8IDEpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBudW1lcmljIHZhbHVlICovCisKK2VudW0gaWRsZXN0YXRlX3ZhbHVlIHsKKwlJRExFU1RBVEVfVVNBR0UsCisJSURMRVNUQVRFX1BPV0VSLAorCUlETEVTVEFURV9MQVRFTkNZLAorCUlETEVTVEFURV9USU1FLAorCU1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGxlc3RhdGVfdmFsdWVfZmlsZXNbTUFYX0lETEVTVEFURV9WQUxVRV9GSUxFU10gPSB7CisJW0lETEVTVEFURV9VU0FHRV0gPSAidXNhZ2UiLAorCVtJRExFU1RBVEVfUE9XRVJdID0gInBvd2VyIiwKKwlbSURMRVNUQVRFX0xBVEVOQ1ldID0gImxhdGVuY3kiLAorCVtJRExFU1RBVEVfVElNRV0gID0gInRpbWUiLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlLAorCQkJCQkJICAgICBlbnVtIGlkbGVzdGF0ZV92YWx1ZSB3aGljaCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IGxlbjsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCisJaWYgKHdoaWNoID49IE1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMpCisJCXJldHVybiAwOworCisJbGVuID0gc3lzZnNfaWRsZXN0YXRlX3JlYWRfZmlsZShjcHUsIGlkbGVzdGF0ZSwKKwkJCQkJaWRsZXN0YXRlX3ZhbHVlX2ZpbGVzW3doaWNoXSwKKwkJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJdmFsdWUgPSBzdHJ0b3VsbChsaW5lYnVmLCAmZW5kcCwgMCk7CisKKwlpZiAoZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIHN0cmluZyAqLworCitlbnVtIGlkbGVzdGF0ZV9zdHJpbmcgeworCUlETEVTVEFURV9ERVNDLAorCUlETEVTVEFURV9OQU1FLAorCU1BWF9JRExFU1RBVEVfU1RSSU5HX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaWRsZXN0YXRlX3N0cmluZ19maWxlc1tNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFU10gPSB7CisJW0lETEVTVEFURV9ERVNDXSA9ICJkZXNjIiwKKwlbSURMRVNUQVRFX05BTUVdID0gIm5hbWUiLAorfTsKKworCitzdGF0aWMgY2hhciAqc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfc3RyaW5nKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkJCWVudW0gaWRsZXN0YXRlX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKGNwdSwgaWRsZXN0YXRlLAorCQkJCQlpZGxlc3RhdGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpOworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9MQVRFTkNZKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVVNBR0UpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVElNRSk7Cit9CisKK2NoYXIgKnN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV9zdHJpbmcoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9OQU1FKTsKK30KKworY2hhciAqc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3N0cmluZyhjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX0RFU0MpOworfQorCisvKgorICogUmV0dXJucyBudW1iZXIgb2Ygc3VwcG9ydGVkIEMtc3RhdGVzIG9mIENQVSBjb3JlIGNwdQorICogTmVnYXRpdiBpbiBlcnJvciBjYXNlCisgKiBaZXJvIGlmIGNwdWlkbGUgZG9lcyBub3QgZXhwb3J0IGFueSBDLXN0YXRlcworICovCitpbnQgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgZmlsZVtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwlpbnQgaWRsZXN0YXRlcyA9IDE7CisKKworCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVSAiY3B1aWRsZSIpOworCWlmIChzdGF0KGZpbGUsICZzdGF0YnVmKSAhPSAwIHx8ICFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVpZGxlL3N0YXRlMCIsIGNwdSk7CisJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoc3RhdChmaWxlLCAmc3RhdGJ1ZikgPT0gMCAmJiBTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKwkJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVCisJCQkgImNwdSV1L2NwdWlkbGUvc3RhdGUlZCIsIGNwdSwgaWRsZXN0YXRlcyk7CisJCWlkbGVzdGF0ZXMrKzsKKwl9CisJaWRsZXN0YXRlcy0tOworCXJldHVybiBpZGxlc3RhdGVzOworfQorCisvKiBDUFVpZGxlIGdlbmVyYWwgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1aWRsZS8gc3lzZnMgYWNjZXNzICoqKioqKioqLworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBmcm9tIC9zeXMgaW50byBnaXZlbiBidWZmZXIKKyAqIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1L2NwdWlkbGUvIiBkaXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19jcHVpZGxlX3JlYWRfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqYnVmLAorCQkJCQkgICAgc2l6ZV90IGJ1ZmxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1aWRsZS8lcyIsIGZuYW1lKTsKKworCXJldHVybiBzeXNmc19yZWFkX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4pOworfQorCisKKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgc3RyaW5nICovCisKK2VudW0gY3B1aWRsZV9zdHJpbmcgeworCUNQVUlETEVfR09WRVJOT1IsCisJQ1BVSURMRV9HT1ZFUk5PUl9STywKKwlDUFVJRExFX0RSSVZFUiwKKwlNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVpZGxlX3N0cmluZ19maWxlc1tNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVNdID0geworCVtDUFVJRExFX0dPVkVSTk9SXQk9ICJjdXJyZW50X2dvdmVybm9yIiwKKwlbQ1BVSURMRV9HT1ZFUk5PUl9ST10JPSAiY3VycmVudF9nb3Zlcm5vcl9ybyIsCisJW0NQVUlETEVfRFJJVkVSXQk9ICJjdXJyZW50X2RyaXZlciIsCit9OworCisKK3N0YXRpYyBjaGFyICpzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKGVudW0gY3B1aWRsZV9zdHJpbmcgd2hpY2gpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqcmVzdWx0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAod2hpY2ggPj0gTUFYX0NQVUlETEVfU1RSSU5HX0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN5c2ZzX2NwdWlkbGVfcmVhZF9maWxlKGNwdWlkbGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQlsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXN1bHQgPSBzdHJkdXAobGluZWJ1Zik7CisJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9PSAnXG4nKQorCQlyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitjaGFyICpzeXNmc19nZXRfY3B1aWRsZV9nb3Zlcm5vcih2b2lkKQoreworCWNoYXIgKnRtcCA9IHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9HT1ZFUk5PUl9STyk7CisJaWYgKCF0bXApCisJCXJldHVybiBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKENQVUlETEVfR09WRVJOT1IpOworCWVsc2UKKwkJcmV0dXJuIHRtcDsKK30KKworY2hhciAqc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKHZvaWQpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9EUklWRVIpOworfQorLyogQ1BVaWRsZSBpZGxlc3RhdGUgc3BlY2lmaWMgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9jcHVpZGxlLyBhY2Nlc3MgKi8KKworLyoKKyAqIEdldCBzY2hlZF9tYyBvciBzY2hlZF9zbXQgc2V0dGluZ3MKKyAqIFBhc3MgIm1jIiBvciAic210IiBhcyBhcmd1bWVudAorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQorICovCitpbnQgc3lzZnNfZ2V0X3NjaGVkKGNvbnN0IGNoYXIgKnNtdF9tYykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAorCQlQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJaWYgKHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDApCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCWlmIChlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogR2V0IHNjaGVkX21jIG9yIHNjaGVkX3NtdCBzZXR0aW5ncworICogUGFzcyAibWMiIG9yICJzbXQiIGFzIGFyZ3VtZW50CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK2ludCBzeXNmc19zZXRfc2NoZWQoY29uc3QgY2hhciAqc210X21jLCBpbnQgdmFsKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAorCQlQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJc3ByaW50ZihsaW5lYnVmLCAiJWQiLCB2YWwpOworCisJaWYgKHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHN5c2ZzX3dyaXRlX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiNzk3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18KKyNkZWZpbmUgX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXworCisjZGVmaW5lIFBBVEhfVE9fQ1BVICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS8iCisjZGVmaW5lIE1BWF9MSU5FX0xFTiAyNTUKKyNkZWZpbmUgU1lTRlNfUEFUSF9NQVggMjU1CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisKK2V4dGVybiBpbnQgc3lzZnNfaXNfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQl1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gaW50IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQodW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiBjaGFyICpzeXNmc19nZXRfY3B1aWRsZV9nb3Zlcm5vcih2b2lkKTsKK2V4dGVybiBjaGFyICpzeXNmc19nZXRfY3B1aWRsZV9kcml2ZXIodm9pZCk7CisKK2V4dGVybiBpbnQgc3lzZnNfZ2V0X3NjaGVkKGNvbnN0IGNoYXIgKnNtdF9tYyk7CitleHRlcm4gaW50IHN5c2ZzX3NldF9zY2hlZChjb25zdCBjaGFyICpzbXRfbWMsIGludCB2YWwpOworCisjZW5kaWYgLyogX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYWUyYzQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3RvcG9sb2d5LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIFRvRG86IE5lZWRzIHRvIGJlIGRvbmUgbW9yZSBwcm9wZXJseSBmb3IgQU1EL0ludGVsIHNwZWNpZmljcworICovCisKKy8qIEhlbHBlciBzdHJ1Y3QgZm9yIHFzb3J0LCBtdXN0IGJlIGluIHN5bmMgd2l0aCBjcHVwb3dlcl90b3BvbG9neS5jcHVfaW5mbyAqLworLyogQmUgY2FyZWZ1bDogTmVlZCB0byBwYXNzIHVuc2lnbmVkIHRvIHRoZSBzb3J0LCBzbyB0aGF0IG9mZmxpbmVkIGNvcmVzIGFyZQorICAgaW4gdGhlIGVuZCwgYnV0IGRvdWJsZSBjaGVjayBmb3IgLTEgZm9yIG9mZmxpbmVkIGNwdXMgYXQgb3RoZXIgcGxhY2VzICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGhlbHBlcnMvaGVscGVycy5oPgorI2luY2x1ZGUgPGhlbHBlcnMvc3lzZnMuaD4KKworLyogcmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MgKi8KK2ludCBzeXNmc190b3BvbG9neV9yZWFkX2ZpbGUodW5zaWduZWQgaW50IGNwdSwgY29uc3QgY2hhciAqZm5hbWUpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS90b3BvbG9neS8lcyIsCisJCQkgY3B1LCBmbmFtZSk7CisJaWYgKHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDApCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCWlmIChlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbHVlOworfQorCitzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgcGtnOworCXVuc2lnbmVkIGludCB0aHJlYWQ7CisJdW5zaWduZWQgaW50IGNwdTsKKwkvKiBmbGFncyAqLworCXVuc2lnbmVkIGludCBpc19vbmxpbmU6MTsKK307CisKK3N0YXRpYyBpbnQgX19jb21wYXJlKGNvbnN0IHZvaWQgKnQxLCBjb25zdCB2b2lkICp0MikKK3sKKwlzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICp0b3AxID0gKHN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKil0MTsKKwlzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICp0b3AyID0gKHN0cnVjdCBjcHVpZF9jb3JlX2luZm8gKil0MjsKKwlpZiAodG9wMS0+cGtnIDwgdG9wMi0+cGtnKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAodG9wMS0+cGtnID4gdG9wMi0+cGtnKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICh0b3AxLT50aHJlYWQgPCB0b3AyLT50aHJlYWQpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICh0b3AxLT50aHJlYWQgPiB0b3AyLT50aHJlYWQpCisJCXJldHVybiAxOworCWVsc2UgaWYgKHRvcDEtPmNwdSA8IHRvcDItPmNwdSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHRvcDEtPmNwdSA+IHRvcDItPmNwdSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybnMgYW1vdW50IG9mIGNwdXMsIG5lZ2F0aXZlIG9uIGVycm9yLCBjcHVfdG9wIG11c3QgYmUKKyAqIHBhc3NlZCB0byBjcHVfdG9wb2xvZ3lfcmVsZWFzZSB0byBmcmVlIHJlc291cmNlcworICoKKyAqIEFycmF5IGlzIHNvcnRlZCBhZnRlciAtPnBrZywgLT5jb3JlLCB0aGVuIC0+Y3B1CisgKi8KK2ludCBnZXRfY3B1X3RvcG9sb2d5KHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSAqY3B1X3RvcCkKK3sKKwlpbnQgY3B1LCBjcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfQ09ORik7CisKKwljcHVfdG9wLT5jb3JlX2luZm8gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSkgKiBjcHVzKTsKKwlpZiAoY3B1X3RvcC0+Y29yZV9pbmZvID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWNwdV90b3AtPnBrZ3MgPSBjcHVfdG9wLT5jb3JlcyA9IDA7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzOyBjcHUrKykgeworCQljcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5jcHUgPSBjcHU7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmlzX29ubGluZSA9IHN5c2ZzX2lzX2NwdV9vbmxpbmUoY3B1KTsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID0KKwkJCXN5c2ZzX3RvcG9sb2d5X3JlYWRfZmlsZShjcHUsICJwaHlzaWNhbF9wYWNrYWdlX2lkIik7CisJCWlmICgoaW50KWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyAhPSAtMSAmJgorCQkgICAgY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID4gY3B1X3RvcC0+cGtncykKKwkJCWNwdV90b3AtPnBrZ3MgPSBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2c7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNvcmUgPQorCQkJc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKGNwdSwgImNvcmVfaWQiKTsKKwl9CisJY3B1X3RvcC0+cGtncysrOworCisJcXNvcnQoY3B1X3RvcC0+Y29yZV9pbmZvLCBjcHVzLCBzaXplb2Yoc3RydWN0IGNwdWlkX2NvcmVfaW5mbyksCisJICAgICAgX19jb21wYXJlKTsKKworCS8qIEludGVsJ3MgY29yZXMgY291bnQgaXMgbm90IGNvbnNlY3V0aXZlbHkgbnVtYmVyZWQsIHRoZXJlIG1heQorCSAqIGJlIGEgY29yZV9pZCBvZiAzLCBidXQgbm9uZSBvZiAyLiBBc3N1bWUgdGhlcmUgYWx3YXlzIGlzIDAKKwkgKiBHZXQgYW1vdW50IG9mIGNvcmVzIGJ5IGNvdW50aW5nIGR1cGxpY2F0ZXMgaW4gYSBwYWNrYWdlCisJZm9yIChjcHUgPSAwOyBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2cgPSAwICYmIGNwdSA8IGNwdXM7IGNwdSsrKSB7CisJCWlmIChjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5jb3JlID09IDApCisJY3B1X3RvcC0+Y29yZXMrKzsKKwkqLworCXJldHVybiBjcHVzOworfQorCit2b2lkIGNwdV90b3BvbG9neV9yZWxlYXNlKHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSBjcHVfdG9wKQoreworCWZyZWUoY3B1X3RvcC5jb3JlX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMmU1NTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIFBDSSBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiBleGFtcGxlIGNvZGUgZnJvbToKKyAqICBBbmRyZWFzIEhlcnJtYW5uIDxhbmRyZWFzLmhlcnJtYW5uM0BhbWQuY29tPgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHBjaS9wY2kuaD4KKworI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qKioqKioqKiBQQ0kgcGFydHMgY291bGQgZ28gaW50byBvd24gZmlsZSBhbmQgZ2V0IHNoYXJlZCAqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUENJX05PTl9QQzBfT0ZGU0VUCTB4YjAKKyNkZWZpbmUgUENJX1BDMV9PRkZTRVQJCTB4YjQKKyNkZWZpbmUgUENJX1BDNl9PRkZTRVQJCTB4YjgKKworI2RlZmluZSBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHICAweGUwCisKKyNkZWZpbmUgUENJX05PTl9QQzBfRU5BQkxFX0JJVAkwCisjZGVmaW5lIFBDSV9QQzFfRU5BQkxFX0JJVAkxCisjZGVmaW5lIFBDSV9QQzZfRU5BQkxFX0JJVAkyCisKKyNkZWZpbmUgUENJX05CUDFfU1RBVF9PRkZTRVQJMHg5OAorI2RlZmluZSBQQ0lfTkJQMV9BQ1RJVkVfQklUCTIKKyNkZWZpbmUgUENJX05CUDFfRU5URVJFRF9CSVQJMQorCisjZGVmaW5lIFBDSV9OQlAxX0NBUF9PRkZTRVQJMHg5MAorI2RlZmluZSBQQ0lfTkJQMV9DQVBBQkxFX0JJVCAgICAzMQorCisjZGVmaW5lIE9WRVJGTE9XX01TCQkzNDM1OTcgLyogMzIgYml0IHJlZ2lzdGVyIGZpbGxlZCBhdCAxMjUwMCBIWgorCQkJCQkgICgxIHRpY2sgcGVyIDgwbnMpICovCisKK2VudW0gYW1kX2ZhbTE0aF9zdGF0ZXMge05PTl9QQzAgPSAwLCBQQzEsIFBDNiwgTkJQMSwKKwkJCUFNRF9GQU0xNEhfU1RBVEVfTlVNfTsKKworc3RhdGljIGludCBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNwdSk7CitzdGF0aWMgaW50IGZhbTE0aF9uYnAxX2NvdW50KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBhbWRfZmFtMTRoX2NzdGF0ZXNbQU1EX0ZBTTE0SF9TVEFURV9OVU1dID0geworCXsKKwkJLm5hbWUJCQk9ICIhUEMwIiwKKwkJLmRlc2MJCQk9IE5fKCJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIpLAorCQkuaWQJCQk9IE5PTl9QQzAsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDMSIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzEiKSwKKwkJLmlkCQkJPSBQQzEsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDNiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzYiKSwKKwkJLmlkCQkJPSBQQzYsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gZmFtMTRoX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIk5CUDEiLAorCQkuZGVzYwkJCT0gTl8oIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIpLAorCQkuaWQJCQk9IE5CUDEsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudAkJPSBmYW0xNGhfbmJwMV9jb3VudCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfYWNjZXNzICpwY2lfYWNjOworc3RhdGljIGludCBwY2lfdmVuZG9yX2lkID0gMHgxMDIyOworc3RhdGljIGludCBwY2lfZGV2X2lkc1syXSA9IHsweDE3MTYsIDB9Oworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICphbWRfZmFtMTRoX3BjaV9kZXY7CisKK3N0YXRpYyBpbnQgbmJwMV9lbnRlcmVkOworCitzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdGltZWRpZmY7CisKKyNpZmRlZiBERUJVRworc3RydWN0IHRpbWVzcGVjIGRiZ190aW1lOworbG9uZyBkYmdfdGltZWRpZmY7CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbQU1EX0ZBTTE0SF9TVEFURV9OVU1dOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3VycmVudF9jb3VudFtBTURfRkFNMTRIX1NUQVRFX05VTV07CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RydWN0IGNzdGF0ZSAqc3RhdGUsCisJCQkJICAgdW5zaWduZWQgaW50ICpwY2lfb2Zmc2V0LAorCQkJCSAgIHVuc2lnbmVkIGludCAqZW5hYmxlX2JpdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXN3aXRjaCAoc3RhdGUtPmlkKSB7CisJY2FzZSBOT05fUEMwOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9OT05fUEMwX0VOQUJMRV9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX05PTl9QQzBfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBDMToKKwkJKmVuYWJsZV9iaXQgPSBQQ0lfUEMxX0VOQUJMRV9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX1BDMV9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUEM2OgorCQkqZW5hYmxlX2JpdCA9IFBDSV9QQzZfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfUEM2X09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBOQlAxOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9OQlAxX0VOVEVSRURfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9OQlAxX1NUQVRfT0ZGU0VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX2luaXQoY3N0YXRlX3QgKnN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0LCByZXQ7CisJdWludDMyX3QgdmFsOworCisJcmV0ID0gYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RhdGUsICZwY2lfb2Zmc2V0LCAmZW5hYmxlX2JpdCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTkJQMSBuZWVkcyBleHRyYSB0cmVhdGluZyAtPiB3cml0ZSAxIHRvIEQxOEY2eDk4IGJpdCAxIGZvciBpbml0ICovCisJaWYgKHN0YXRlLT5pZCA9PSBOQlAxKSB7CisJCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0KTsKKwkJdmFsIHw9IDEgPDwgZW5hYmxlX2JpdDsKKwkJdmFsID0gcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0LCB2YWwpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEVuYWJsZSBtb25pdG9yICovCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcpOworCWRwcmludCgiSW5pdCAlczogcmVhZCBhdCBvZmZzZXQ6IDB4JXggdmFsOiAldVxuIiwgc3RhdGUtPm5hbWUsCisJICAgICAgIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsICh1bnNpZ25lZCBpbnQpIHZhbCk7CisJdmFsIHw9IDEgPDwgZW5hYmxlX2JpdDsKKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIHZhbCk7CisKKwlkcHJpbnQoIkluaXQgJXM6IG9mZnNldDogMHgleCBlbmFibGVfYml0OiAlZCAtIHZhbDogJXUgKCV1KVxuIiwKKwkgICAgICAgc3RhdGUtPm5hbWUsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIGVuYWJsZV9iaXQsCisJICAgICAgICh1bnNpZ25lZCBpbnQpIHZhbCwgY3B1KTsKKworCS8qIFNldCBjb3VudGVyIHRvIHplcm8gKi8KKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQsIDApOworCXByZXZpb3VzX2NvdW50W3N0YXRlLT5pZF1bY3B1XSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfZmFtMTRoX2Rpc2FibGUoY3N0YXRlX3QgKnN0YXRlLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0LCByZXQ7CisJdWludDMyX3QgdmFsOworCisJcmV0ID0gYW1kX2ZhbTE0aF9nZXRfcGNpX2luZm8oc3RhdGUsICZwY2lfb2Zmc2V0LCAmZW5hYmxlX2JpdCwgY3B1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQpOworCWRwcmludCgiJXM6IG9mZnNldDogMHgleCAldVxuIiwgc3RhdGUtPm5hbWUsIHBjaV9vZmZzZXQsIHZhbCk7CisJaWYgKHN0YXRlLT5pZCA9PSBOQlAxKSB7CisJCS8qIHdhcyB0aGUgYml0IHdoZXRoZXIgTkJQMSBnb3QgZW50ZXJlZCBzZXQ/ICovCisJCW5icDFfZW50ZXJlZCA9ICh2YWwgJiAoMSA8PCBQQ0lfTkJQMV9BQ1RJVkVfQklUKSkgfAorCQkJKHZhbCAmICgxIDw8IFBDSV9OQlAxX0VOVEVSRURfQklUKSk7CisKKwkJZHByaW50KCJOQlAxIHdhcyAlc2VudGVyZWQgLSAweCV4IC0gZW5hYmxlX2JpdDogIgorCQkgICAgICAgIiVkIC0gcGNpX29mZnNldDogMHgleFxuIiwKKwkJICAgICAgIG5icDFfZW50ZXJlZCA/ICIiIDogIm5vdCAiLAorCQkgICAgICAgdmFsLCBlbmFibGVfYml0LCBwY2lfb2Zmc2V0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJY3VycmVudF9jb3VudFtzdGF0ZS0+aWRdW2NwdV0gPSB2YWw7CisKKwlkcHJpbnQoIiVzOiBDdXJyZW50IC0gICVsbHUgKCV1KVxuIiwgc3RhdGUtPm5hbWUsCisJICAgICAgIGN1cnJlbnRfY291bnRbc3RhdGUtPmlkXVtjcHVdLCBjcHUpOworCWRwcmludCgiJXM6IFByZXZpb3VzIC0gJWxsdSAoJXUpXG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgcHJldmlvdXNfY291bnRbc3RhdGUtPmlkXVtjcHVdLCBjcHUpOworCisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcpOworCXZhbCAmPSB+KDEgPDwgZW5hYmxlX2JpdCk7CisJcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFtMTRoX25icDFfY291bnQodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCWlmIChpZCA9PSBOQlAxKSB7CisJCWlmIChuYnAxX2VudGVyZWQpCisJCQkqY291bnQgPSAxOworCQllbHNlCisJCQkqY291bnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorc3RhdGljIGludCBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBkaWZmOworCisJaWYgKGlkID49IEFNRF9GQU0xNEhfU1RBVEVfTlVNKQorCQlyZXR1cm4gLTE7CisJLyogcmVzaWRlbmN5IGNvdW50IGluIDgwbnMgLT4gZGl2aWRlIHRocm91Z2ggMTIuNSB0byBnZXQgdXMgcmVzaWRlbmN5ICovCisJZGlmZiA9IGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XTsKKworCWlmICh0aW1lZGlmZiA9PSAwKQorCQkqcGVyY2VudCA9IDAuMDsKKwllbHNlCisJCSpwZXJjZW50ID0gMTAwLjAgKiBkaWZmIC8gdGltZWRpZmYgLyAxMi41OworCisJZHByaW50KCJUaW1lZGlmZjogJWxsdSAtIHJlc346ICVsdSB1cyAtIHBlcmNlbnQ6ICUuMmYgJSVcbiIsCisJICAgICAgIHRpbWVkaWZmLCBkaWZmICogMTAgLyAxMjUsICpwZXJjZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfc3RhcnQodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0X3RpbWUpOworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU07IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykKKwkJCWFtZF9mYW0xNGhfaW5pdCgmYW1kX2ZhbTE0aF9jc3RhdGVzW251bV0sIGNwdSk7CisJfQorI2lmZGVmIERFQlVHCisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmRiZ190aW1lKTsKKwlkYmdfdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0X3RpbWUsIGRiZ190aW1lKTsKKwlkcHJpbnQoIkVuYWJsaW5nIGNvdW50ZXJzIHRvb2s6ICVsdSB1c1xuIiwKKwkgICAgICAgZGJnX3RpbWVkaWZmKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfc3RvcCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kX3RpbWUpOworCisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTTsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKQorCQkJYW1kX2ZhbTE0aF9kaXNhYmxlKCZhbWRfZmFtMTRoX2NzdGF0ZXNbbnVtXSwgY3B1KTsKKwl9CisjaWZkZWYgREVCVUcKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZGJnX3RpbWUpOworCWRiZ190aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoZW5kX3RpbWUsIGRiZ190aW1lKTsKKwlkcHJpbnQoIkRpc2FibGluZyBjb3VudGVycyB0b29rOiAlbHUgbnNcbiIsIGRiZ190aW1lZGlmZik7CisjZW5kaWYKKwl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZW5kX3RpbWUpOworCWlmICh0aW1lZGlmZiAvIDEwMDAgPiBPVkVSRkxPV19NUykKKwkJcHJpbnRfb3ZlcmZsb3dfZXJyKCh1bnNpZ25lZCBpbnQpdGltZWRpZmYgLyAxMDAwMDAwLAorCQkJCSAgIE9WRVJGTE9XX01TIC8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19uYnAxX2NhcGFibGUodm9pZCkKK3sKKwl1aW50MzJfdCB2YWw7CisJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9OQlAxX0NBUF9PRkZTRVQpOworCXJldHVybiB2YWwgJiAoMSA8PCAzMSk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgKmFtZF9mYW0xNGhfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5ID09IDB4MTQpIHsKKwkJaWYgKGNwdV9jb3VudCA8PSAwIHx8IGNwdV9jb3VudCA+IDIpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQU1EIGZhbTE0aDogSW52YWxpZCBjcHUgY291bnQ6ICVkXG4iLAorCQkJCWNwdV9jb3VudCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFdlIGRvIG5vdCBhbGxvYyBmb3IgbmJwMSBtYWNoaW5lIHdpZGUgY291bnRlciAqLworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU0gLSAxOyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gY2FsbG9jKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCQljdXJyZW50X2NvdW50W251bV0gID0gY2FsbG9jKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCX0KKworCWFtZF9mYW0xNGhfcGNpX2RldiA9IHBjaV9hY2NfaW5pdCgmcGNpX2FjYywgcGNpX3ZlbmRvcl9pZCwgcGNpX2Rldl9pZHMpOworCWlmIChhbWRfZmFtMTRoX3BjaV9kZXYgPT0gTlVMTCB8fCBwY2lfYWNjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFpc19uYnAxX2NhcGFibGUoKSkKKwkJYW1kX2ZhbTE0aF9tb25pdG9yLmh3X3N0YXRlc19udW0gPSBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7CisKKwlhbWRfZmFtMTRoX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oYW1kX2ZhbTE0aF9tb25pdG9yLm5hbWUpOworCXJldHVybiAmYW1kX2ZhbTE0aF9tb25pdG9yOworfQorCitzdGF0aWMgdm9pZCBhbWRfZmFtMTRoX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWZvciAobnVtID0gMDsgbnVtIDwgQU1EX0ZBTTE0SF9TVEFURV9OVU0gLSAxOyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorCXBjaV9jbGVhbnVwKHBjaV9hY2MpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGFtZF9mYW0xNGhfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIk9udGFyaW8iLAorCS5od19zdGF0ZXMJCT0gYW1kX2ZhbTE0aF9jc3RhdGVzLAorCS5od19zdGF0ZXNfbnVtCQk9IEFNRF9GQU0xNEhfU1RBVEVfTlVNLAorCS5zdGFydAkJCT0gYW1kX2ZhbTE0aF9zdGFydCwKKwkuc3RvcAkJCT0gYW1kX2ZhbTE0aF9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBhbWRfZmFtMTRoX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IGFtZF9mYW0xNGhfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IE9WRVJGTE9XX01TIC8gMTAwMCwKK307CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDIyYTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIENQVUlETEVfU1RBVEVTX01BWCAxMAorc3RhdGljIGNzdGF0ZV90IGNwdWlkbGVfY3N0YXRlc1tDUFVJRExFX1NUQVRFU19NQVhdOworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBjcHVpZGxlX3N5c2ZzX21vbml0b3I7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKipwcmV2aW91c19jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKipjdXJyZW50X2NvdW50Oworc3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVkaWZmOworCitzdGF0aWMgaW50IGNwdWlkbGVfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZWRpZmYgPSBjdXJyZW50X2NvdW50W2NwdV1baWRdCisJCS0gcHJldmlvdXNfY291bnRbY3B1XVtpZF07CisJZHByaW50KCIlczogLSBkaWZmOiAlbGx1IC0gcGVyY2VudDogJWYgKCV1KVxuIiwKKwkgICAgICAgY3B1aWRsZV9jc3RhdGVzW2lkXS5uYW1lLCB0aW1lZGlmZiwgKnBlcmNlbnQsIGNwdSk7CisKKwlpZiAodGltZWRpZmYgPT0gMCkKKwkJKnBlcmNlbnQgPSAwLjA7CisJZWxzZQorCQkqcGVyY2VudCA9ICgoMTAwLjAgKiBzdGF0ZWRpZmYpIC8gdGltZWRpZmYpOworCisJZHByaW50KCIlczogLSB0aW1lZGlmZjogJWxsdSAtIHN0YXRlZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICVmICgldSlcbiIsCisJICAgICAgIGNwdWlkbGVfY3N0YXRlc1tpZF0ubmFtZSwgdGltZWRpZmYsIHN0YXRlZGlmZiwgKnBlcmNlbnQsIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVpZGxlX3N0YXJ0KHZvaWQpCit7CisJaW50IGNwdSwgc3RhdGU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0X3RpbWUpOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bTsKKwkJICAgICBzdGF0ZSsrKSB7CisJCQlwcmV2aW91c19jb3VudFtjcHVdW3N0YXRlXSA9CisJCQkJc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgc3RhdGUpOworCQkJZHByaW50KCJDUFUgJWQgLSBTdGF0ZTogJWQgLSBWYWw6ICVsbHVcbiIsCisJCQkgICAgICAgY3B1LCBzdGF0ZSwgcHJldmlvdXNfY291bnRbY3B1XVtzdGF0ZV0pOworCQl9CisJfTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVpZGxlX3N0b3Aodm9pZCkKK3sKKwlpbnQgY3B1LCBzdGF0ZTsKKwlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmVuZF90aW1lKTsKKwl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZW5kX3RpbWUpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOworCQkgICAgIHN0YXRlKyspIHsKKwkJCWN1cnJlbnRfY291bnRbY3B1XVtzdGF0ZV0gPQorCQkJCXN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIHN0YXRlKTsKKwkJCWRwcmludCgiQ1BVICVkIC0gU3RhdGU6ICVkIC0gVmFsOiAlbGx1XG4iLAorCQkJICAgICAgIGNwdSwgc3RhdGUsIHByZXZpb3VzX2NvdW50W2NwdV1bc3RhdGVdKTsKKwkJfQorCX07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZml4X3VwX2ludGVsX2lkbGVfZHJpdmVyX25hbWUoY2hhciAqdG1wLCBpbnQgbnVtKQoreworCS8qIGZpeCB1cCBjcHVpZGxlIG5hbWUgZm9yIGludGVsIGlkbGUgZHJpdmVyICovCisJaWYgKCFzdHJuY21wKHRtcCwgIk5ITS0iLCA0KSkgeworCQlzd2l0Y2ggKG51bSkgeworCQljYXNlIDE6CisJCQlzdHJjcHkodG1wLCAiQzEiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJjcHkodG1wLCAiQzMiKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJjcHkodG1wLCAiQzYiKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcCh0bXAsICJTTkItIiwgNCkpIHsKKwkJc3dpdGNoIChudW0pIHsKKwkJY2FzZSAxOgorCQkJc3RyY3B5KHRtcCwgIkMxIik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RyY3B5KHRtcCwgIkMzIik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc3RyY3B5KHRtcCwgIkM2Iik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJc3RyY3B5KHRtcCwgIkM3Iik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cm5jbXAodG1wLCAiQVRNLSIsIDQpKSB7CisJCXN3aXRjaCAobnVtKSB7CisJCWNhc2UgMToKKwkJCXN0cmNweSh0bXAsICJDMSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0cmNweSh0bXAsICJDMiIpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXN0cmNweSh0bXAsICJDNCIpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXN0cmNweSh0bXAsICJDNiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICpjcHVpZGxlX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKwljaGFyICp0bXA7CisKKwkvKiBBc3N1bWUgaWRsZSBzdGF0ZSBjb3VudCBpcyB0aGUgc2FtZSBmb3IgYWxsIENQVXMgKi8KKwljcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfY291bnQoMCk7CisKKwlpZiAoY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0gPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOyBudW0rKykgeworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoMCwgbnVtKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJZml4X3VwX2ludGVsX2lkbGVfZHJpdmVyX25hbWUodG1wLCBudW0pOworCQlzdHJuY3B5KGNwdWlkbGVfY3N0YXRlc1tudW1dLm5hbWUsIHRtcCwgQ1NUQVRFX05BTUVfTEVOIC0gMSk7CisJCWZyZWUodG1wKTsKKworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2MoMCwgbnVtKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXN0cm5jcHkoY3B1aWRsZV9jc3RhdGVzW251bV0uZGVzYywgdG1wLAlDU1RBVEVfREVTQ19MRU4gLSAxKTsKKwkJZnJlZSh0bXApOworCisJCWNwdWlkbGVfY3N0YXRlc1tudW1dLnJhbmdlID0gUkFOR0VfVEhSRUFEOworCQljcHVpZGxlX2NzdGF0ZXNbbnVtXS5pZCA9IG51bTsKKwkJY3B1aWRsZV9jc3RhdGVzW251bV0uZ2V0X2NvdW50X3BlcmNlbnQgPQorCQkJY3B1aWRsZV9nZXRfY291bnRfcGVyY2VudDsKKwl9OworCisJLyogRnJlZSB0aGlzIGF0IHByb2dyYW0gdGVybWluYXRpb24gKi8KKwlwcmV2aW91c19jb3VudCA9IG1hbGxvYyhzaXplb2YobG9uZyBsb25nICopICogY3B1X2NvdW50KTsKKwljdXJyZW50X2NvdW50ID0gbWFsbG9jKHNpemVvZihsb25nIGxvbmcgKikgKiBjcHVfY291bnQpOworCWZvciAobnVtID0gMDsgbnVtIDwgY3B1X2NvdW50OyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gbWFsbG9jKHNpemVvZihsb25nIGxvbmcpICoKKwkJCQkJY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0pOworCQljdXJyZW50X2NvdW50W251bV0gPSBtYWxsb2Moc2l6ZW9mKGxvbmcgbG9uZykgKgorCQkJCQljcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSk7CisJfQorCisJY3B1aWRsZV9zeXNmc19tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGNwdWlkbGVfc3lzZnNfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmNwdWlkbGVfc3lzZnNfbW9uaXRvcjsKK30KKwordm9pZCBjcHVpZGxlX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCisJZm9yIChudW0gPSAwOyBudW0gPCBjcHVfY291bnQ7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJZnJlZShwcmV2aW91c19jb3VudCk7CisJZnJlZShjdXJyZW50X2NvdW50KTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBjcHVpZGxlX3N5c2ZzX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJJZGxlX1N0YXRzIiwKKwkuaHdfc3RhdGVzCQk9IGNwdWlkbGVfY3N0YXRlcywKKwkuc3RhcnQJCQk9IGNwdWlkbGVfc3RhcnQsCisJLnN0b3AJCQk9IGNwdWlkbGVfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gY3B1aWRsZV9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBjcHVpZGxlX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMCwKKwkub3ZlcmZsb3dfcwkJPSBVSU5UX01BWCwKK307CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY1NzFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYwpAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIE91dHB1dCBmb3JtYXQgaW5zcGlyZWQgYnkgTGVuIEJyb3duJ3MgPGxlbmJAa2VybmVsLm9yZz4gdHVyYm9zdGF0IHRvb2wuCisgKgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKy8qIERlZmluZSBwb2ludGVycyB0byBhbGwgbW9uaXRvcnMuICAqLworI2RlZmluZSBERUYoeCkgJiB4ICMjIF9tb25pdG9yICwKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgKmFsbF9tb25pdG9yc1tdID0geworI2luY2x1ZGUgImlkbGVfbW9uaXRvcnMuZGVmIgorMAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgKm1vbml0b3JzW01PTklUT1JTX01BWF07CitzdGF0aWMgdW5zaWduZWQgaW50IGF2YWlsX21vbml0b3JzOworCitzdGF0aWMgY2hhciAqcHJvZ25hbWU7CisKK2VudW0gb3BlcmF0aW9uX21vZGVfZSB7IGxpc3QgPSAxLCBzaG93LCBzaG93X2FsbCB9Oworc3RhdGljIGludCBtb2RlOworc3RhdGljIGludCBpbnRlcnZhbCA9IDE7CitzdGF0aWMgY2hhciAqc2hvd19tb25pdG9yc19wYXJhbTsKK3N0YXRpYyBzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcDsKKworLyogVG9EbzogRG9jdW1lbnQgdGhpcyBpbiB0aGUgbWFucGFnZSAqLworc3RhdGljIGNoYXIgcmFuZ2VfYWJicltSQU5HRV9NQVhdID0geyAnVCcsICdDJywgJ1AnLCAnTScsIH07CisKK3N0YXRpYyB2b2lkIHByaW50X3dyb25nX2FyZ19leGl0KHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworbG9uZyBsb25nIHRpbWVzcGVjX2RpZmZfdXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMgZW5kKQoreworCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOworCWlmICgoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKSA8IDApIHsKKwkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjIC0gMTsKKwkJdGVtcC50dl9uc2VjID0gMTAwMDAwMDAwMCArIGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9IGVsc2UgeworCQl0ZW1wLnR2X3NlYyA9IGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWM7CisJCXRlbXAudHZfbnNlYyA9IGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9CisJcmV0dXJuICh0ZW1wLnR2X3NlYyAqIDEwMDAwMDApICsgKHRlbXAudHZfbnNlYyAvIDEwMDApOworfQorCit2b2lkIHByaW50X25fc3BhY2VzKGludCBuKQoreworCWludCB4OworCWZvciAoeCA9IDA7IHggPCBuOyB4KyspCisJCXByaW50ZigiICIpOworfQorCisvKiBzaXplIG9mIHMgbXVzdCBiZSBhdCBsZWFzdCBuICsgMSAqLworaW50IGZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGNoYXIgKnMsIGludCBuKQoreworCWludCBsZW4gPSBzdHJsZW4ocyk7CisJaWYgKGxlbiA+IG4pCisJCXJldHVybiAtMTsKKwlmb3IgKDsgbGVuIDwgbjsgbGVuKyspCisJCXNbbGVuXSA9ICcgJzsKKwlzW2xlbl0gPSAnXDAnOworCXJldHVybiAwOworfQorCit2b2lkIHByaW50X2hlYWRlcihpbnQgdG9wb2xvZ3lfZGVwdGgpCit7CisJaW50IHVuc2lnbmVkIG1vbjsKKwlpbnQgc3RhdGUsIG5lZWRfbGVuLCBwcl9tb25fbGVuOworCWNzdGF0ZV90IHM7CisJY2hhciBidWZbMTI4XSA9ICIiOworCWludCBwZXJjZW50X3dpZHRoID0gNDsKKworCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgdG9wb2xvZ3lfZGVwdGggKiA1IC0gMSk7CisJcHJpbnRmKCIlc3wiLCBidWYpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJcHJfbW9uX2xlbiA9IDA7CisJCW5lZWRfbGVuID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bSAqIChwZXJjZW50X3dpZHRoICsgMykKKwkJCS0gMTsKKwkJaWYgKG1vbiAhPSAwKSB7CisJCQlwcmludGYoInx8ICIpOworCQkJbmVlZF9sZW4tLTsKKwkJfQorCQlzcHJpbnRmKGJ1ZiwgIiVzIiwgbW9uaXRvcnNbbW9uXS0+bmFtZSk7CisJCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgbmVlZF9sZW4pOworCQlwcmludGYoIiVzIiwgYnVmKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMikKKwkJcHJpbnRmKCJQS0cgfCIpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDEpCisJCXByaW50ZigiQ09SRXwiKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAwKQorCQlwcmludGYoIkNQVSB8Iik7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlpZiAobW9uICE9IDApCisJCQlwcmludGYoInx8ICIpOworCQllbHNlCisJCQlwcmludGYoIiAiKTsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bTsgc3RhdGUrKykgeworCQkJaWYgKHN0YXRlICE9IDApCisJCQkJcHJpbnRmKCIgfCAiKTsKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCQkJc3ByaW50ZihidWYsICIlcyIsIHMubmFtZSk7CisJCQlmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhidWYsIHBlcmNlbnRfd2lkdGgpOworCQkJcHJpbnRmKCIlcyIsIGJ1Zik7CisJCX0KKwkJcHJpbnRmKCIgIik7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworCit2b2lkIHByaW50X3Jlc3VsdHMoaW50IHRvcG9sb2d5X2RlcHRoLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBtb247CisJaW50IHN0YXRlLCByZXQ7CisJZG91YmxlIHBlcmNlbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdDsKKwljc3RhdGVfdCBzOworCisJLyogQmUgY2FyZWZ1bCBDUFVzIG1heSBnb3QgcmVzb3J0ZWQgZm9yIHBrZyB2YWx1ZSBkbyBub3QganVzdCB1c2UgY3B1ICovCisJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNwdSkpCisJCXJldHVybjsKKworCWlmICh0b3BvbG9neV9kZXB0aCA+IDIpCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0ucGtnKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAxKQorCQlwcmludGYoIiU0ZHwiLCBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNvcmUpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDApCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY3B1KTsKKworCWZvciAobW9uID0gMDsgbW9uIDwgYXZhaWxfbW9uaXRvcnM7IG1vbisrKSB7CisJCWlmIChtb24gIT0gMCkKKwkJCXByaW50ZigifHwiKTsKKworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtOyBzdGF0ZSsrKSB7CisJCQlpZiAoc3RhdGUgIT0gMCkKKwkJCQlwcmludGYoInwiKTsKKworCQkJcyA9IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc1tzdGF0ZV07CisKKwkJCWlmIChzLmdldF9jb3VudF9wZXJjZW50KSB7CisJCQkJcmV0ID0gcy5nZXRfY291bnRfcGVyY2VudChzLmlkLCAmcGVyY2VudCwKKwkJCQkJCSAgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCQkJCWlmIChyZXQpCisJCQkJCXByaW50ZigiKioqKioqIik7CisJCQkJZWxzZSBpZiAocGVyY2VudCA+PSAxMDAuMCkKKwkJCQkJcHJpbnRmKCIlNi4xZiIsIHBlcmNlbnQpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIlNi4yZiIsIHBlcmNlbnQpOworCQkJfSBlbHNlIGlmIChzLmdldF9jb3VudCkgeworCQkJCXJldCA9IHMuZ2V0X2NvdW50KHMuaWQsICZyZXN1bHQsCisJCQkJCQkgIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY3B1KTsKKwkJCQlpZiAocmV0KQorCQkJCQlwcmludGYoIioqKioqKiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIlNmxsdSIsIHJlc3VsdCk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZihfKCJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCAiCisJCQkJCSAiZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iKSwKKwkJCQkgICAgICAgbW9uaXRvcnNbbW9uXS0+bmFtZSwgcy5uYW1lKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCX0KKwl9CisJLyoKKwkgKiBUaGUgbW9uaXRvciBjb3VsZCBzdGlsbCBwcm92aWRlIHVzZWZ1bCBkYXRhLCBmb3IgZXhhbXBsZQorCSAqIEFNRCBIVyBjb3VudGVycyBwYXJ0bHkgc2l0IGluIFBDSSBjb25maWcgc3BhY2UuCisJICogSXQncyB1cCB0byB0aGUgbW9uaXRvciBwbHVnLWluIHRvIGNoZWNrIC5pc19vbmxpbmUsIHRoaXMgb25lCisJICogaXMganVzdCBmb3IgYWRkaXRpb25hbCBpbmZvLgorCSAqLworCWlmICghY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5pc19vbmxpbmUpIHsKKwkJcHJpbnRmKF8oIiAqaXMgb2ZmbGluZVxuIikpOworCQlyZXR1cm47CisJfSBlbHNlCisJCXByaW50ZigiXG4iKTsKK30KKworCisvKiBwYXJhbTogc3RyaW5nIHBhc3NlZCBieSAtbSBwYXJhbSAoVGhlIGxpc3Qgb2YgbW9uaXRvcnMgdG8gc2hvdykKKyAqCisgKiBNb25pdG9ycyBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGFscmVhZHksIG1hdGNoaW5nIG1vbml0b3JzCisgKiBhcmUgcGlja2VkIG91dCBhbmQgYXZhaWxhYmxlIG1vbml0b3JzIGFycmF5IGlzIG92ZXJyaWRkZW4KKyAqIHdpdGggbWF0Y2hpbmcgb25lcworICoKKyAqIE1vbml0b3JzIGdldCBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIHVzZXIgcGFzc2VzIHRoZW0KKyovCisKK3N0YXRpYyB2b2lkIHBhcnNlX21vbml0b3JfcGFyYW0oY2hhciAqcGFyYW0pCit7CisJdW5zaWduZWQgaW50IG51bTsKKwlpbnQgbW9uLCBoaXRzID0gMDsKKwljaGFyICp0bXAgPSBwYXJhbSwgKnRva2VuOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRtcF9tb25zW01PTklUT1JTX01BWF07CisKKworCWZvciAobW9uID0gMDsgbW9uIDwgTU9OSVRPUlNfTUFYOyBtb24rKywgdG1wID0gTlVMTCkgeworCQl0b2tlbiA9IHN0cnRvayh0bXAsICIsIik7CisJCWlmICh0b2tlbiA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChzdHJsZW4odG9rZW4pID49IE1PTklUT1JfTkFNRV9MRU4pIHsKKwkJCXByaW50ZihfKCIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGgiCisJCQkJICIgKCVkKSBleGNlZWRlZFxuIiksIHRva2VuLCBNT05JVE9SX05BTUVfTEVOKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJCWlmICghc3RyY21wKG1vbml0b3JzW251bV0tPm5hbWUsIHRva2VuKSkgeworCQkJCWRwcmludCgiRm91bmQgcmVxdWVzdGVkIG1vbml0b3I6ICVzXG4iLCB0b2tlbik7CisJCQkJdG1wX21vbnNbaGl0c10gPSBtb25pdG9yc1tudW1dOworCQkJCWhpdHMrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaGl0cyA9PSAwKSB7CisJCXByaW50ZihfKCJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCAiCisJCQkgInRyeSAtbCBvcHRpb25cbiIpLCBwYXJhbSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogT3ZlcnJpZGUgZGV0ZWN0ZWQvcmVnaXN0ZXJkIG1vbml0b3JzIGFycmF5IHdpdGggcmVxdWVzdGVkIG9uZSAqLworCW1lbWNweShtb25pdG9ycywgdG1wX21vbnMsCisJCXNpemVvZihzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICopICogTU9OSVRPUlNfTUFYKTsKKwlhdmFpbF9tb25pdG9ycyA9IGhpdHM7Cit9CisKK3ZvaWQgbGlzdF9tb25pdG9ycyh2b2lkKQoreworCXVuc2lnbmVkIGludCBtb247CisJaW50IHN0YXRlOworCWNzdGF0ZV90IHM7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlwcmludGYoXygiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSAiCisJCQkgInNcbiIpLAorCQkJbW9uaXRvcnNbbW9uXS0+bmFtZSwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bSwKKwkJCW1vbml0b3JzW21vbl0tPm92ZXJmbG93X3MpOworCisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW07IHN0YXRlKyspIHsKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCQkJLyoKKwkJCSAqIFRvRG8gc2hvdyBtb3JlIHN0YXRlIGNhcGFiaWxpdGllczoKKwkJCSAqIHBlcmNlbnQsIHRpbWUgKGdyYW5sYXJpdHkpCisJCQkgKi8KKwkJCXByaW50ZigiJXNcdFslY10gLT4gJXNcbiIsIHMubmFtZSwgcmFuZ2VfYWJicltzLnJhbmdlXSwKKwkJCSAgICAgICBnZXR0ZXh0KHMuZGVzYykpOworCQl9CisJfQorfQorCitpbnQgZm9ya19pdChjaGFyICoqYXJndikKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBudW07CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVkaWZmOworCXBpZF90IGNoaWxkX3BpZDsKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKworCWNoaWxkX3BpZCA9IGZvcmsoKTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnQpOworCisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspCisJCW1vbml0b3JzW251bV0tPnN0YXJ0KCk7CisKKwlpZiAoIWNoaWxkX3BpZCkgeworCQkvKiBjaGlsZCAqLworCQlleGVjdnAoYXJndlswXSwgYXJndik7CisJfSBlbHNlIHsKKwkJLyogcGFyZW50ICovCisJCWlmIChjaGlsZF9waWQgPT0gLTEpIHsKKwkJCXBlcnJvcigiZm9yayIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCXNpZ25hbChTSUdJTlQsIFNJR19JR04pOworCQlzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisJCWlmICh3YWl0cGlkKGNoaWxkX3BpZCwgJnN0YXR1cywgMCkgPT0gLTEpIHsKKwkJCXBlcnJvcigid2FpdCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykKKwkJbW9uaXRvcnNbbnVtXS0+c3RvcCgpOworCisJdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0LCBlbmQpOworCWlmIChXSUZFWElURUQoc3RhdHVzKSkKKwkJcHJpbnRmKF8oIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIpLAorCQkJYXJndlswXSwgdGltZWRpZmYgLyAoMTAwMC4wICogMTAwMCksCisJCQlXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX2ludGVydmFsX21lYXN1cmUoaW50IGkpCit7CisJdW5zaWduZWQgaW50IG51bTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKSB7CisJCWRwcmludCgiSFcgQy1zdGF0ZSByZXNpZGVuY3kgbW9uaXRvcjogJXMgLSBTdGF0ZXM6ICVkXG4iLAorCQkgICAgICAgbW9uaXRvcnNbbnVtXS0+bmFtZSwgbW9uaXRvcnNbbnVtXS0+aHdfc3RhdGVzX251bSk7CisJCW1vbml0b3JzW251bV0tPnN0YXJ0KCk7CisJfQorCXNsZWVwKGkpOworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKQorCQltb25pdG9yc1tudW1dLT5zdG9wKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21kbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBvcHQ7CisJcHJvZ25hbWUgPSBiYXNlbmFtZShhcmd2WzBdKTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICIrbGk6bToiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnbCc6CisJCQlpZiAobW9kZSkKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJbW9kZSA9IGxpc3Q7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQkvKiBvbmx5IGFsbG93IC1pIHdpdGggLW0gb3Igbm8gb3B0aW9uICovCisJCQlpZiAobW9kZSAmJiBtb2RlICE9IHNob3cpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCWludGVydmFsID0gYXRvaShvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKG1vZGUpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCW1vZGUgPSBzaG93OworCQkJc2hvd19tb25pdG9yc19wYXJhbSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJfQorCX0KKwlpZiAoIW1vZGUpCisJCW1vZGUgPSBzaG93X2FsbDsKK30KKworaW50IGNtZF9tb25pdG9yKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRlc3RfbW9uOworCWludCBjcHU7CisKKwljbWRsaW5lKGFyZ2MsIGFyZ3YpOworCWNwdV9jb3VudCA9IGdldF9jcHVfdG9wb2xvZ3koJmNwdV90b3ApOworCWlmIChjcHVfY291bnQgPCAwKSB7CisJCXByaW50ZihfKCJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwkvKiBEZWZhdWx0IGlzOiBtb25pdG9yIGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCWRwcmludCgiU3lzdGVtIGhhcyB1cCB0byAlZCBDUFUgY29yZXNcbiIsIGNwdV9jb3VudCk7CisKKwlmb3IgKG51bSA9IDA7IGFsbF9tb25pdG9yc1tudW1dOyBudW0rKykgeworCQlkcHJpbnQoIlRyeSB0byByZWdpc3RlcjogJXNcbiIsIGFsbF9tb25pdG9yc1tudW1dLT5uYW1lKTsKKwkJdGVzdF9tb24gPSBhbGxfbW9uaXRvcnNbbnVtXS0+ZG9fcmVnaXN0ZXIoKTsKKwkJaWYgKHRlc3RfbW9uKSB7CisJCQlpZiAodGVzdF9tb24tPm5lZWRzX3Jvb3QgJiYgIXJ1bl9hc19yb290KSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzICIKKwkJCQkJICAicm9vdCBhY2Nlc3NcbiIpLCB0ZXN0X21vbi0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQltb25pdG9yc1thdmFpbF9tb25pdG9yc10gPSB0ZXN0X21vbjsKKwkJCWRwcmludCgiJXMgcmVnaXN0ZXJlZFxuIiwgYWxsX21vbml0b3JzW251bV0tPm5hbWUpOworCQkJYXZhaWxfbW9uaXRvcnMrKzsKKwkJfQorCX0KKworCWlmIChhdmFpbF9tb25pdG9ycyA9PSAwKSB7CisJCXByaW50ZihfKCJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKG1vZGUgPT0gbGlzdCkgeworCQlsaXN0X21vbml0b3JzKCk7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlpZiAobW9kZSA9PSBzaG93KQorCQlwYXJzZV9tb25pdG9yX3BhcmFtKHNob3dfbW9uaXRvcnNfcGFyYW0pOworCisJZHByaW50KCJQYWNrYWdlczogJWQgLSBDb3JlczogJWQgLSBDUFVzOiAlZFxuIiwKKwkgICAgICAgY3B1X3RvcC5wa2dzLCBjcHVfdG9wLmNvcmVzLCBjcHVfY291bnQpOworCisJLyoKKwkgKiBpZiBhbnkgcGFyYW1zIGxlZnQsIGl0IG11c3QgYmUgYSBjb21tYW5kIHRvIGZvcmsKKwkgKi8KKwlpZiAoYXJnYyAtIG9wdGluZCkKKwkJZm9ya19pdChhcmd2ICsgb3B0aW5kKTsKKwllbHNlCisJCWRvX2ludGVydmFsX21lYXN1cmUoaW50ZXJ2YWwpOworCisJLyogVG9EbzogVG9wb2xvZ3kgcGFyc2luZyBuZWVkcyBmaXhpbmcgZmlyc3QgdG8gZG8KKwkgICB0aGlzIG1vcmUgZ2VuZXJpY2FsbHkgKi8KKwlpZiAoY3B1X3RvcC5wa2dzID4gMSkKKwkJcHJpbnRfaGVhZGVyKDMpOworCWVsc2UKKwkJcHJpbnRfaGVhZGVyKDEpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWlmIChjcHVfdG9wLnBrZ3MgPiAxKQorCQkJcHJpbnRfcmVzdWx0cygzLCBjcHUpOworCQllbHNlCisJCQlwcmludF9yZXN1bHRzKDEsIGNwdSk7CisJfQorCisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspCisJCW1vbml0b3JzW251bV0tPnVucmVnaXN0ZXIoKTsKKworCWNwdV90b3BvbG9neV9yZWxlYXNlKGNwdV90b3ApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxMmVlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgX19DUFVJRExFX0lORk9fSFdfXworI2RlZmluZSBfX0NQVUlETEVfSU5GT19IV19fCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIgorCisjZGVmaW5lIE1PTklUT1JTX01BWCAyMAorI2RlZmluZSBNT05JVE9SX05BTUVfTEVOIDIwCisjZGVmaW5lIENTVEFURV9OQU1FX0xFTiA1CisjZGVmaW5lIENTVEFURV9ERVNDX0xFTiA2MAorCitpbnQgY3B1X2NvdW50OworCisvKiBIYXJkIHRvIGRlZmluZSB0aGUgcmlnaHQgbmFtZXMgLi4uOiAqLworZW51bSBwb3dlcl9yYW5nZV9lIHsKKwlSQU5HRV9USFJFQUQsCS8qIExvd2VzdCBpbiB0b3BvbG9neSBoaWVyYXJjeSwgQU1EOiBjb3JlLCBJbnRlbDogdGhyZWFkCisJCQkgICBrZXJuZWwgc3lzZnM6IGNwdSAqLworCVJBTkdFX0NPUkUsCS8qIEFNRDogdW5pdCwgSW50ZWw6IGNvcmUsIGtlcm5lbF9zeXNmczogY29yZV9pZCAqLworCVJBTkdFX1BBQ0tBR0UsCS8qIFBhY2thZ2UsIHByb2Nlc3NvciBzb2NrZXQgKi8KKwlSQU5HRV9NQUNISU5FLAkvKiBNYWNoaW5lLCBwbGF0Zm9ybSB3aWRlICovCisJUkFOR0VfTUFYIH07CisKK3R5cGVkZWYgc3RydWN0IGNzdGF0ZSB7CisJaW50ICBpZDsKKwllbnVtIHBvd2VyX3JhbmdlX2UgcmFuZ2U7CisJY2hhciBuYW1lW0NTVEFURV9OQU1FX0xFTl07CisJY2hhciBkZXNjW0NTVEFURV9ERVNDX0xFTl07CisKKwkvKiBlaXRoZXIgcHJvdmlkZSBhIHBlcmNlbnRhZ2Ugb3IgYSBnZW5lcmFsIGNvdW50ICovCisJaW50ICgqZ2V0X2NvdW50X3BlcmNlbnQpKHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCWludCAoKmdldF9jb3VudCkodW5zaWduZWQgaW50IHNlbGZfaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgdW5zaWduZWQgaW50IGNwdSk7Cit9IGNzdGF0ZV90OworCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIHsKKwkvKiBOYW1lIG11c3Qgbm90IGNvbnRhaW4gd2hpdGVzcGFjZXMgKi8KKwljaGFyIG5hbWVbTU9OSVRPUl9OQU1FX0xFTl07CisJaW50IG5hbWVfbGVuOworCWludCBod19zdGF0ZXNfbnVtOworCWNzdGF0ZV90ICpod19zdGF0ZXM7CisJaW50ICgqc3RhcnQpICh2b2lkKTsKKwlpbnQgKCpzdG9wKSAodm9pZCk7CisJc3RydWN0IGNwdWlkbGVfbW9uaXRvciogKCpkb19yZWdpc3RlcikgKHZvaWQpOworCXZvaWQgKCp1bnJlZ2lzdGVyKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQgb3ZlcmZsb3dfczsKKwlpbnQgbmVlZHNfcm9vdDsKK307CisKK2V4dGVybiBsb25nIGxvbmcgdGltZXNwZWNfZGlmZl91cyhzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIHN0cnVjdCB0aW1lc3BlYyBlbmQpOworCisjZGVmaW5lIHByaW50X292ZXJmbG93X2VycihtZXMsIG92KQkJCQkJCVwKK3sJCQkJCQkJCQkJXAorCWZwcmludGYoc3RkZXJyLCBnZXR0ZXh0KCJNZWFzdXJlIHRvb2sgJXUgc2Vjb25kcywgYnV0IHJlZ2lzdGVycyBjb3VsZCAiCVwKKwkJCQkib3ZlcmZsb3cgYXQgJXUgc2Vjb25kcywgcmVzdWx0cyAiCQlcCisJCQkJImNvdWxkIGJlIGluYWNjdXJhdGVcbiIpLCBtZXMsIG92KTsJCVwKK30KKworI2VuZGlmIC8qIF9fQ1BVSURMRV9JTkZPX0hXX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZiBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Y4ZDliCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuZGVmCkBAIC0wLDAgKzEsNyBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKK0RFRihhbWRfZmFtMTRoKQorREVGKGludGVsX25obSkKK0RFRihpbnRlbF9zbmIpCitERUYobXBlcmYpCisjZW5kaWYKK0RFRihjcHVpZGxlX3N5c2ZzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjZGViMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIHRoZSBpZGVhIGZyb20gTWljaGFlbCBNYXR6IDxtYXR6QHN1c2UuZGU+CisgKgorICovCisKKyNpZm5kZWYgX0NQVUlETEVfSURMRV9NT05JVE9SU19IXworI2RlZmluZSBfQ1BVSURMRV9JRExFX01PTklUT1JTX0hfCisKKyNkZWZpbmUgREVGKHgpIGV4dGVybiBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIHggIyNfbW9uaXRvcjsKKyNpbmNsdWRlICJpZGxlX21vbml0b3JzLmRlZiIKKyN1bmRlZiBERUYKK2V4dGVybiBzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICphbGxfbW9uaXRvcnNbXTsKKworI2VuZGlmIC8qIF9DUFVJRExFX0lETEVfTU9OSVRPUlNfSF8gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTBhYjUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgTVNSX0FQRVJGCTB4RTgKKyNkZWZpbmUgTVNSX01QRVJGCTB4RTcKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworI2RlZmluZSBNU1JfQU1EX0hXQ1IgMHhjMDAxMDAxNQorCitlbnVtIG1wZXJmX2lkIHsgQzAgPSAwLCBDeCwgQVZHX0ZSRVEsIE1QRVJGX0NTVEFURV9DT1VOVCB9OworCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGNwdSk7CitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9mcmVxKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCQl1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdGltZV9zdGFydCwgdGltZV9lbmQ7CisKK3N0YXRpYyBjc3RhdGVfdCBtcGVyZl9jc3RhdGVzW01QRVJGX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkMwIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIpLAorCQkuaWQJCQk9IEMwLAorCQkucmFuZ2UJCQk9IFJBTkdFX1RIUkVBRCwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiQ3giLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiKSwKKwkJLmlkCQkJPSBDeCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9USFJFQUQsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG1wZXJmX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisKKwl7CisJCS5uYW1lCQkJPSAiRnJlcSIsCisJCS5kZXNjCQkJPSBOXygiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IiksCisJCS5pZAkJCT0gQVZHX0ZSRVEsCisJCS5yYW5nZQkJCT0gUkFOR0VfVEhSRUFELAorCQkuZ2V0X2NvdW50CQk9IG1wZXJmX2dldF9jb3VudF9mcmVxLAorCX0sCit9OworCitlbnVtIE1BWF9GUkVRX01PREUgeyBNQVhfRlJFUV9TWVNGUywgTUFYX0ZSRVFfVFNDX1JFRiB9Oworc3RhdGljIGludCBtYXhfZnJlcV9tb2RlOworLyoKKyAqIFRoZSBtYXggZnJlcXVlbmN5IG1wZXJmIGlzIHRpY2tpbmcgYXQgKGluIEMwKSwgZWl0aGVyIHJldHJpZXZlZCB2aWE6CisgKiAgIDEpIGNhbGN1bGF0ZWQgYWZ0ZXIgbWVhc3VyZW1lbnRzIGlmIHdlIGtub3cgVFNDIHRpY2tzIGF0IG1wZXJmL1AwIGZyZXF1ZW5jeQorICogICAyKSBjcHVmcmVxIC9zeXMvZGV2aWNlcy8uLi4vY3B1MC9jcHVmcmVxL2NwdWluZm9fbWF4X2ZyZXEgYXQgaW5pdCB0aW1lCisgKiAxLiBJcyBwcmVmZXJyZWQgYXMgaXQgYWxzbyB3b3JrcyB3aXRob3V0IGNwdWZyZXEgc3Vic3lzdGVtIChlLmcuIG9uIFhlbikKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXF1ZW5jeTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqbXBlcmZfcHJldmlvdXNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICphcGVyZl9wcmV2aW91c19jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKm1wZXJmX2N1cnJlbnRfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICphcGVyZl9jdXJyZW50X2NvdW50OworCisvKiB2YWxpZCBmbGFnIGZvciBhbGwgQ1BVcy4gSWYgYSBNU1IgcmVhZCBmYWlsZWQgaXQgd2lsbCBiZSB6ZXJvICovCitzdGF0aWMgaW50ICppc192YWxpZDsKKworc3RhdGljIGludCBtcGVyZl9nZXRfdHNjKHVuc2lnbmVkIGxvbmcgbG9uZyAqdHNjKQoreworCWludCByZXQ7CisJcmV0ID0gcmVhZF9tc3IoMCwgTVNSX1RTQywgdHNjKTsKKwlpZiAocmV0KQorCQlkcHJpbnQoIlJlYWRpbmcgVFNDIE1TUiBmYWlsZWQsIHJldHVybmluZyAlbGx1XG4iLCAqdHNjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1wZXJmX2luaXRfc3RhdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9BUEVSRiwgJnZhbCk7CisJYXBlcmZfcHJldmlvdXNfY291bnRbY3B1XSA9IHZhbDsKKwlyZXQgfD0gcmVhZF9tc3IoY3B1LCBNU1JfTVBFUkYsICZ2YWwpOworCW1wZXJmX3ByZXZpb3VzX2NvdW50W2NwdV0gPSB2YWw7CisJaXNfdmFsaWRbY3B1XSA9ICFyZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9tZWFzdXJlX3N0YXRzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfQVBFUkYsICZ2YWwpOworCWFwZXJmX2N1cnJlbnRfY291bnRbY3B1XSA9IHZhbDsKKwlyZXQgfD0gcmVhZF9tc3IoY3B1LCBNU1JfTVBFUkYsICZ2YWwpOworCW1wZXJmX2N1cnJlbnRfY291bnRbY3B1XSA9IHZhbDsKKwlpc192YWxpZFtjcHVdID0gIXJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGFwZXJmX2RpZmYsIG1wZXJmX2RpZmYsIHRzY19kaWZmOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkICE9IEMwICYmIGlkICE9IEN4KQorCQlyZXR1cm4gLTE7CisKKwltcGVyZl9kaWZmID0gbXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gbXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKwlhcGVyZl9kaWZmID0gYXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gYXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKworCWlmIChtYXhfZnJlcV9tb2RlID09IE1BWF9GUkVRX1RTQ19SRUYpIHsKKwkJdHNjX2RpZmYgPSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydDsKKwkJKnBlcmNlbnQgPSAxMDAuMCAqIG1wZXJmX2RpZmYgLyB0c2NfZGlmZjsKKwkJZHByaW50KCIlczogVFNDIFJlZiAtIG1wZXJmX2RpZmY6ICVsbHUsIHRzY19kaWZmOiAlbGx1XG4iLAorCQkgICAgICAgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgbXBlcmZfZGlmZiwgdHNjX2RpZmYpOworCX0gZWxzZSBpZiAobWF4X2ZyZXFfbW9kZSA9PSBNQVhfRlJFUV9TWVNGUykgeworCQl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXModGltZV9zdGFydCwgdGltZV9lbmQpOworCQkqcGVyY2VudCA9IDEwMC4wICogbXBlcmZfZGlmZiAvIHRpbWVkaWZmOworCQlkcHJpbnQoIiVzOiBNQVhGUkVRIC0gbXBlcmZfZGlmZjogJWxsdSwgdGltZV9kaWZmOiAlbGx1XG4iLAorCQkgICAgICAgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgbXBlcmZfZGlmZiwgdGltZWRpZmYpOworCX0gZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWQgPT0gQ3gpCisJCSpwZXJjZW50ID0gMTAwLjAgLSAqcGVyY2VudDsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsCisJCW1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsIG1wZXJmX2RpZmYsIGFwZXJmX2RpZmYsIGNwdSk7CisJZHByaW50KCIlczogJWZcbiIsIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsICpwZXJjZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfZnJlcSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkJdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmZfZGlmZiwgbXBlcmZfZGlmZiwgdGltZV9kaWZmLCB0c2NfZGlmZjsKKworCWlmIChpZCAhPSBBVkdfRlJFUSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCW1wZXJmX2RpZmYgPSBtcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBtcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCWFwZXJmX2RpZmYgPSBhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCisJaWYgKG1heF9mcmVxX21vZGUgPT0gTUFYX0ZSRVFfVFNDX1JFRikgeworCQkvKiBDYWxjdWxhdGUgbWF4X2ZyZXEgZnJvbSBUU0MgY291bnQgKi8KKwkJdHNjX2RpZmYgPSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydDsKKwkJdGltZV9kaWZmID0gdGltZXNwZWNfZGlmZl91cyh0aW1lX3N0YXJ0LCB0aW1lX2VuZCk7CisJCW1heF9mcmVxdWVuY3kgPSB0c2NfZGlmZiAvIHRpbWVfZGlmZjsKKwl9CisKKwkqY291bnQgPSBtYXhfZnJlcXVlbmN5ICogKChkb3VibGUpYXBlcmZfZGlmZiAvIG1wZXJmX2RpZmYpOworCWRwcmludCgiJXM6IEF2ZXJhZ2UgZnJlcSBiYXNlZCBvbiAlcyBtYXhpbXVtIGZyZXF1ZW5jeTpcbiIsCisJICAgICAgIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgIChtYXhfZnJlcV9tb2RlID09IE1BWF9GUkVRX1RTQ19SRUYpID8gIlRTQyBjYWxjdWxhdGVkIiA6ICJzeXNmcyByZWFkIik7CisJZHByaW50KCIlbWF4X2ZyZXF1ZW5jeTogJWx1IiwgbWF4X2ZyZXF1ZW5jeSk7CisJZHByaW50KCJhcGVyZl9kaWZmOiAlbGx1XG4iLCBhcGVyZl9kaWZmKTsKKwlkcHJpbnQoIm1wZXJmX2RpZmY6ICVsbHVcbiIsIG1wZXJmX2RpZmYpOworCWRwcmludCgiYXZnIGZyZXE6ICAgJWxsdVxuIiwgKmNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9zdGFydCh2b2lkKQoreworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0aW1lX3N0YXJ0KTsKKwltcGVyZl9nZXRfdHNjKCZ0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspCisJCW1wZXJmX2luaXRfc3RhdHMoY3B1KTsKKworCW1wZXJmX2dldF90c2MoJmRiZyk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnOworCWludCBjcHU7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspCisJCW1wZXJmX21lYXN1cmVfc3RhdHMoY3B1KTsKKworCW1wZXJmX2dldF90c2MoJnRzY19hdF9tZWFzdXJlX2VuZCk7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRpbWVfZW5kKTsKKworCW1wZXJmX2dldF90c2MoJmRiZyk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCXJldHVybiAwOworfQorCisvKgorICogTXBlcmYgcmVnaXN0ZXIgaXMgZGVmaW5lZCB0byB0aWNrIGF0IFAwIChtYXhpbXVtKSBmcmVxdWVuY3kKKyAqCisgKiBJbnN0ZWFkIG9mIHJlYWRpbmcgb3V0IFAwIHdoaWNoIGNhbiBiZSB0cmlja3kgdG8gcmVhZCBvdXQgZnJvbSBIVywKKyAqIHdlIHVzZSBUU0MgY291bnRlciBpZiBpdCByZWxpYWJseSB0aWNrcyBhdCBQMC9tcGVyZiBmcmVxdWVuY3kuCisgKgorICogU3RpbGwgdHJ5IHRvIGZhbGwgYmFjayB0bzoKKyAqIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9jcHVpbmZvX21heF9mcmVxCisgKiBvbiBvbGRlciBJbnRlbCBIVyB3aXRob3V0IGludmFyaWFudCBUU0MgZmVhdHVyZS4KKyAqIE9yIG9uIEFNRCBtYWNoaW5lcyB3aGVyZSBUU0MgZG9lcyBub3QgdGljayBhdCBQMCAoZG8gbm90IGV4aXN0IHlldCwgYnV0CisgKiBpdCdzIHN0aWxsIGRvdWJsZSBjaGVja2VkIChNU1JfQU1EX0hXQ1IpKS4KKyAqCisgKiBPbiB0aGVzZSBtYWNoaW5lcyB0aGUgdXNlciB3b3VsZCBzdGlsbCBnZXQgdXNlZnVsIG1wZXJmCisgKiBzdGF0cyB3aGVuIGFjcGktY3B1ZnJlcSBkcml2ZXIgaXMgbG9hZGVkLgorICovCitzdGF0aWMgaW50IGluaXRfbWF4ZnJlcV9tb2RlKHZvaWQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgaHdjcjsKKwl1bnNpZ25lZCBsb25nIG1pbjsKKworCWlmICghY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9JTlZfVFNDKQorCQlnb3RvIHVzZV9zeXNmczsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKKwkJLyogTVNSX0FNRF9IV0NSIHRlbGxzIHVzIHdoZXRoZXIgVFNDIHJ1bnMgYXQgUDAvbXBlcmYKKwkJICogZnJlcS4KKwkJICogQSB0ZXN0IHdoZXRoZXIgaHdjciBpcyBhY2Nlc3NhYmxlL2F2YWlsYWJsZSB3b3VsZCBiZToKKwkJICogKGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSA+IDB4MTAgfHwKKwkJICogICBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgPT0gMHgxMCAmJgorCQkgKiAgIGNwdXBvd2VyX2NwdV9pbmZvLm1vZGVsID49IDB4MikpCisJCSAqIFRoaXMgc2hvdWxkIGJlIHRoZSBjYXNlIGZvciBhbGwgYXBlcmYvbXBlcmYKKwkJICogY2FwYWJsZSBBTUQgbWFjaGluZXMgYW5kIGlzIHRoZXJlZm9yZSBzYWZlIHRvIHRlc3QgaGVyZS4KKwkJICogQ29tcGFyZSB3aXRoIExpbnVzIGtlcm5lbCBnaXQgY29tbWl0OiBhY2YwMTczNGIxNzQ3YjFlYzQKKwkJICovCisJCXJldCA9IHJlYWRfbXNyKDAsIE1TUl9BTURfSFdDUiwgJmh3Y3IpOworCQkvKgorCQkgKiBJZiB0aGUgTVNSIHJlYWQgZmFpbGVkLCBhc3N1bWUgYSBYZW4gc3lzdGVtIHRoYXQgZGlkCisJCSAqIG5vdCBleHBsaWNpdGx5IHByb3ZpZGUgYWNjZXNzIHRvIGl0IGFuZCBhc3N1bWUgVFNDIHdvcmtzCisJCSovCisJCWlmIChyZXQgIT0gMCkgeworCQkJZHByaW50KCJUU0MgcmVhZCAweCV4IGZhaWxlZCAtIGFzc3VtZSBUU0Mgd29ya2luZ1xuIiwKKwkJCSAgICAgICBNU1JfQU1EX0hXQ1IpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoMSAmIChod2NyID4+IDI0KSkgeworCQkJbWF4X2ZyZXFfbW9kZSA9IE1BWF9GUkVRX1RTQ19SRUY7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsgLyogVXNlIHN5c2ZzIG1heCBmcmVxdWVuY3kgaWYgYXZhaWxhYmxlICovIH0KKwl9IGVsc2UgaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCS8qCisJCSAqIE9uIEludGVsIHdlIGFzc3VtZSBtcGVyZiAoaW4gQzApIGlzIHRpY2tpbmcgYXQgc2FtZQorCQkgKiByYXRlIHRoYW4gVFNDCisJCSAqLworCQltYXhfZnJlcV9tb2RlID0gTUFYX0ZSRVFfVFNDX1JFRjsKKwkJcmV0dXJuIDA7CisJfQordXNlX3N5c2ZzOgorCWlmIChjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHMoMCwgJm1pbiwgJm1heF9mcmVxdWVuY3kpKSB7CisJCWRwcmludCgiQ2Fubm90IHJldHJpZXZlIG1heCBmcmVxIGZyb20gY3B1ZnJlcSBrZXJuZWwgIgorCQkgICAgICAgInN1YnN5c3RlbVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWF4X2ZyZXFfbW9kZSA9IE1BWF9GUkVRX1NZU0ZTOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBtb25pdG9yIHByb3ZpZGVzOgorICoKKyAqIDEpIEF2ZXJhZ2UgZnJlcXVlbmN5IGEgQ1BVIHJlc2lkZWQgaW4KKyAqICAgIFRoaXMgYWx3YXlzIHdvcmtzIGlmIHRoZSBDUFUgaGFzIGFwZXJmL21wZXJmIGNhcGFiaWxpdGllcworICoKKyAqIDIpIEMwIGFuZCBDeCAoYW55IHNsZWVwIHN0YXRlKSB0aW1lIGEgQ1BVIHJlc2lkZWQgaW4KKyAqICAgIFdvcmtzIGlmIG1wZXJmIHRpbWVyIHN0b3BzIHRpY2tpbmcgaW4gc2xlZXAgc3RhdGVzIHdoaWNoCisgKiAgICBzZWVtIHRvIGJlIHRoZSBjYXNlIG9uIGFsbCBjdXJyZW50IEhXLgorICogQm90aCBpcyBkaXJlY3RseSByZXRyaWV2ZWQgZnJvbSBIVyByZWdpc3RlcnMgYW5kIGlzIGluZGVwZW5kZW50CisgKiBmcm9tIGtlcm5lbCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIG1wZXJmX21vbml0b3I7CitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICptcGVyZl9yZWdpc3Rlcih2b2lkKQoreworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQVBFUkYpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChpbml0X21heGZyZXFfbW9kZSgpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZyZWUgdGhpcyBhdCBwcm9ncmFtIHRlcm1pbmF0aW9uICovCisJaXNfdmFsaWQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YoaW50KSk7CisJbXBlcmZfcHJldmlvdXNfY291bnQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJYXBlcmZfcHJldmlvdXNfY291bnQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJbXBlcmZfY3VycmVudF9jb3VudCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwlhcGVyZl9jdXJyZW50X2NvdW50ID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCisJbXBlcmZfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihtcGVyZl9tb25pdG9yLm5hbWUpOworCXJldHVybiAmbXBlcmZfbW9uaXRvcjsKK30KKwordm9pZCBtcGVyZl91bnJlZ2lzdGVyKHZvaWQpCit7CisJZnJlZShtcGVyZl9wcmV2aW91c19jb3VudCk7CisJZnJlZShhcGVyZl9wcmV2aW91c19jb3VudCk7CisJZnJlZShtcGVyZl9jdXJyZW50X2NvdW50KTsKKwlmcmVlKGFwZXJmX2N1cnJlbnRfY291bnQpOworCWZyZWUoaXNfdmFsaWQpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIG1wZXJmX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJNcGVyZiIsCisJLmh3X3N0YXRlc19udW0JCT0gTVBFUkZfQ1NUQVRFX0NPVU5ULAorCS5od19zdGF0ZXMJCT0gbXBlcmZfY3N0YXRlcywKKwkuc3RhcnQJCQk9IG1wZXJmX3N0YXJ0LAorCS5zdG9wCQkJPSBtcGVyZl9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBtcGVyZl9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBtcGVyZl91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gOTIyMDAwMDAwIC8qIDkyMjMzNzIwMyBzZWNvbmRzIFRTQyBvdmVyZmxvdworCQkJCQkgICAgICAgYXQgMjBHSHogKi8KK307CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhOTFkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgQmFzZWQgb24gTGVuIEJyb3duJ3MgPGxlbmJAa2VybmVsLm9yZz4gdHVyYm9zdGF0IHRvb2wuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIE1TUl9QS0dfQzNfUkVTSURFTkNZCTB4M0Y4CisjZGVmaW5lIE1TUl9QS0dfQzZfUkVTSURFTkNZCTB4M0Y5CisjZGVmaW5lIE1TUl9DT1JFX0MzX1JFU0lERU5DWQkweDNGQworI2RlZmluZSBNU1JfQ09SRV9DNl9SRVNJREVOQ1kJMHgzRkQKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworI2RlZmluZSBOSE1fQ1NUQVRFX0NPVU5UIDQKKworZW51bSBpbnRlbF9uaG1faWQgeyBDMyA9IDAsIEM2LCBQQzMsIFBDNiwgVFNDID0gMHhGRkZGIH07CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3QgbmhtX2NzdGF0ZXNbTkhNX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkMzIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBDMyIpLAorCQkuaWQJCQk9IEMzLAorCQkucmFuZ2UJCQk9IFJBTkdFX0NPUkUsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJDNiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgQzYiKSwKKwkJLmlkCQkJPSBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9DT1JFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKworCXsKKwkJLm5hbWUJCQk9ICJQQzMiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEMzIiksCisJCS5pZAkJCT0gUEMzLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzYiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEM2IiksCisJCS5pZAkJCT0gUEM2LAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbTkhNX0NTVEFURV9DT1VOVF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W05ITV9DU1RBVEVfQ09VTlRdOworLyogdmFsaWQgZmxhZyBmb3IgYWxsIENQVXMuIElmIGEgTVNSIHJlYWQgZmFpbGVkIGl0IHdpbGwgYmUgemVybyAqLworc3RhdGljIGludCAqaXNfdmFsaWQ7CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudChlbnVtIGludGVsX25obV9pZCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwsCisJCQl1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBtc3I7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBDMzoKKwkJbXNyID0gTVNSX0NPUkVfQzNfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIEM2OgorCQltc3IgPSBNU1JfQ09SRV9DNl9SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEMzOgorCQltc3IgPSBNU1JfUEtHX0MzX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzY6CisJCW1zciA9IE1TUl9QS0dfQzZfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFRTQzoKKwkJbXNyID0gTVNSX1RTQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX07CisJaWYgKHJlYWRfbXNyKGNwdSwgbXNyLCB2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaG1fZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpCit7CisJKnBlcmNlbnQgPSAwLjA7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCSpwZXJjZW50ID0gKDEwMC4wICoKKwkJKGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSkpIC8KKwkJKHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsCisJCW5obV9jc3RhdGVzW2lkXS5uYW1lLCBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwKKwkJY3VycmVudF9jb3VudFtpZF1bY3B1XSwgY3B1KTsKKworCWRwcmludCgiJXM6IHRzY19kaWZmOiAlbGx1IC0gY291bnRfZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICUyLmYgKCV1KVxuIiwKKwkgICAgICAgbmhtX2NzdGF0ZXNbaWRdLm5hbWUsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRzY19hdF9tZWFzdXJlX2VuZCAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0LAorCSAgICAgICBjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0sCisJICAgICAgICpwZXJjZW50LCBjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX3N0YXJ0KHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmcsIHZhbDsKKworCW5obV9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfc3RhcnQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhbmhtX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQlwcmV2aW91c19jb3VudFtudW1dW2NwdV0gPSB2YWw7CisJCX0KKwl9CisJbmhtX2dldF9jb3VudChUU0MsICZkYmcsIDApOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaG1fc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKwlpbnQgbnVtLCBjcHU7CisKKwluaG1fZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX2VuZCwgMCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJaXNfdmFsaWRbY3B1XSA9ICFuaG1fZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCWN1cnJlbnRfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCW5obV9nZXRfY291bnQoVFNDLCAmZGJnLCAwKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9lbmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfbmhtX21vbml0b3I7CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgKmludGVsX25obV9yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9JTlZfVFNDKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0FQRVJGKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKGludCkpOworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IGNhbGxvYyhjcHVfY291bnQsCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkJY3VycmVudF9jb3VudFtudW1dICA9IGNhbGxvYyhjcHVfY291bnQsCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwl9CisKKwlpbnRlbF9uaG1fbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihpbnRlbF9uaG1fbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmludGVsX25obV9tb25pdG9yOworfQorCit2b2lkIGludGVsX25obV91bnJlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KKwlmcmVlKGlzX3ZhbGlkKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9uaG1fbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIk5laGFsZW0iLAorCS5od19zdGF0ZXNfbnVtCQk9IE5ITV9DU1RBVEVfQ09VTlQsCisJLmh3X3N0YXRlcwkJPSBuaG1fY3N0YXRlcywKKwkuc3RhcnQJCQk9IG5obV9zdGFydCwKKwkuc3RvcAkJCT0gbmhtX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IGludGVsX25obV9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBpbnRlbF9uaG1fdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmMwN2MKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIExlbiBCcm93bidzIDxsZW5iQGtlcm5lbC5vcmc+IHR1cmJvc3RhdCB0b29sLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBNU1JfUEtHX0MyX1JFU0lERU5DWQkweDYwRAorI2RlZmluZSBNU1JfUEtHX0M3X1JFU0lERU5DWQkweDNGQQorI2RlZmluZSBNU1JfQ09SRV9DN19SRVNJREVOQ1kJMHgzRkUKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworZW51bSBpbnRlbF9zbmJfaWQgeyBDNyA9IDAsIFBDMiwgUEM3LCBTTkJfQ1NUQVRFX0NPVU5ULCBUU0MgPSAweEZGRkYgfTsKKworc3RhdGljIGludCBzbmJfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSk7CisKK3N0YXRpYyBjc3RhdGVfdCBzbmJfY3N0YXRlc1tTTkJfQ1NUQVRFX0NPVU5UXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiQzciLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIEM3IiksCisJCS5pZAkJCT0gQzcsCisJCS5yYW5nZQkJCT0gUkFOR0VfQ09SRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDMiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzIiKSwKKwkJLmlkCQkJPSBQQzIsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIlBDNyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIFBhY2thZ2UgQzciKSwKKwkJLmlkCQkJPSBQQzcsCisJCS5yYW5nZQkJCT0gUkFOR0VfUEFDS0FHRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gc25iX2dldF9jb3VudF9wZXJjZW50LAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpwcmV2aW91c19jb3VudFtTTkJfQ1NUQVRFX0NPVU5UXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKmN1cnJlbnRfY291bnRbU05CX0NTVEFURV9DT1VOVF07CisvKiB2YWxpZCBmbGFnIGZvciBhbGwgQ1BVcy4gSWYgYSBNU1IgcmVhZCBmYWlsZWQgaXQgd2lsbCBiZSB6ZXJvICovCitzdGF0aWMgaW50ICppc192YWxpZDsKKworc3RhdGljIGludCBzbmJfZ2V0X2NvdW50KGVudW0gaW50ZWxfc25iX2lkIGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCwKKwkJCXVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IG1zcjsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEM3OgorCQltc3IgPSBNU1JfQ09SRV9DN19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEMyOgorCQltc3IgPSBNU1JfUEtHX0MyX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzc6CisJCW1zciA9IE1TUl9QS0dfQzdfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFRTQzoKKwkJbXNyID0gTVNSX1RTQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX07CisJaWYgKHJlYWRfbXNyKGNwdSwgbXNyLCB2YWwpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworCSpwZXJjZW50ID0gMC4wOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwkqcGVyY2VudCA9ICgxMDAuMCAqCisJCShjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0pKSAvCisJCSh0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlkcHJpbnQoIiVzOiBwcmV2aW91czogJWxsdSAtIGN1cnJlbnQ6ICVsbHUgLSAoJXUpXG4iLAorCQlzbmJfY3N0YXRlc1tpZF0ubmFtZSwgcHJldmlvdXNfY291bnRbaWRdW2NwdV0sCisJCWN1cnJlbnRfY291bnRbaWRdW2NwdV0sIGNwdSk7CisKKwlkcHJpbnQoIiVzOiB0c2NfZGlmZjogJWxsdSAtIGNvdW50X2RpZmY6ICVsbHUgLSBwZXJjZW50OiAlMi5mICgldSlcbiIsCisJICAgICAgIHNuYl9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCwKKwkgICAgICAgY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLAorCSAgICAgICAqcGVyY2VudCwgY3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCXNuYl9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJcHJldmlvdXNfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCXNuYl9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfc3RhcnQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgbnVtLCBjcHU7CisKKwlzbmJfZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX2VuZCwgMCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJaXNfdmFsaWRbY3B1XSA9ICFzbmJfZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCWN1cnJlbnRfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX3NuYl9tb25pdG9yOworCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqc25iX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTAorCSAgICB8fCBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgIT0gNikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8ubW9kZWwgIT0gMHgyQQorCSAgICAmJiBjcHVwb3dlcl9jcHVfaW5mby5tb2RlbCAhPSAweDJEKQorCQlyZXR1cm4gTlVMTDsKKworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKGludCkpOworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJcHJldmlvdXNfY291bnRbbnVtXSA9IGNhbGxvYyhjcHVfY291bnQsCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkJY3VycmVudF9jb3VudFtudW1dICA9IGNhbGxvYyhjcHVfY291bnQsCisJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwl9CisJaW50ZWxfc25iX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oaW50ZWxfc25iX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZpbnRlbF9zbmJfbW9uaXRvcjsKK30KKwordm9pZCBzbmJfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisJZnJlZShpc192YWxpZCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX3NuYl9tb25pdG9yID0geworCS5uYW1lCQkJPSAiU2FuZHlCcmlkZ2UiLAorCS5od19zdGF0ZXMJCT0gc25iX2NzdGF0ZXMsCisJLmh3X3N0YXRlc19udW0JCT0gU05CX0NTVEFURV9DT1VOVCwKKwkuc3RhcnQJCQk9IHNuYl9zdGFydCwKKwkuc3RvcAkJCT0gc25iX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IHNuYl9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBzbmJfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL3ZlcnNpb24tZ2VuLnNoIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvdmVyc2lvbi1nZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWVjNDFjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL3ZlcnNpb24tZ2VuLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBTY3JpcHQgd2hpY2ggcHJpbnRzIG91dCB0aGUgdmVyc2lvbiB0byB1c2UgZm9yIGJ1aWxkaW5nIGNwdXBvd2VydXRpbHMuCisjIE11c3QgYmUgY2FsbGVkIGZyb20gdG9vbHMvcG93ZXIvY3B1cG93ZXIvCisjIAorIyBIZWF2aWx5IGJhc2VkIG9uIHRvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIC4KKworTEY9JworJworCisjIEZpcnN0IGNoZWNrIGlmIHRoZXJlIGlzIGEgLmdpdCB0byBnZXQgdGhlIHZlcnNpb24gZnJvbSBnaXQgZGVzY3JpYmUKKyMgb3RoZXJ3aXNlIHRyeSB0byBnZXQgdGhlIHZlcnNpb24gZnJvbSB0aGUga2VybmVsIG1ha2VmaWxlCitpZiB0ZXN0IC1kIC4uLy4uLy4uLy5naXQgLW8gLWYgLi4vLi4vLi4vLmdpdCAmJgorCVZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKwljYXNlICIkVk4iIGluCisJKiRMRiopIChleGl0IDEpIDs7CisJdlswLTldKikKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKwkJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEIC0tKSIgfHwKKwkJVk49IiRWTi1kaXJ0eSIgOzsKKwllc2FjCit0aGVuCisJVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzLy0vLi9nJyk7CitlbHNlCisJZXZhbCAkKGdyZXAgJ15WRVJTSU9OW1s6c3BhY2U6XV0qPScgLi4vLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQorCWV2YWwgJChncmVwICdeUEFUQ0hMRVZFTFtbOnNwYWNlOl1dKj0nIC4uLy4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKKwlldmFsICQoZ3JlcCAnXlNVQkxFVkVMW1s6c3BhY2U6XV0qPScgLi4vLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQorCWV2YWwgJChncmVwICdeRVhUUkFWRVJTSU9OW1s6c3BhY2U6XV0qPScgLi4vLi4vLi4vTWFrZWZpbGV8dHIgLWQgJyAnKQorCisJVk49IiR7VkVSU0lPTn0uJHtQQVRDSExFVkVMfS4ke1NVQkxFVkVMfSR7RVhUUkFWRVJTSU9OfSIKK2ZpCisKK1ZOPSQoZXhwciAiJFZOIiA6IHYqJ1woLipcKScpCisKK2VjaG8gJFZOCmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwppbmRleCA2ZDhlZjRhLi44YjJkMzdiIDEwMDY0NAotLS0gYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKQEAgLTEyOCwzNCArMTI4LDM0IEBACiB2b2lkIHByaW50X2hlYWRlcih2b2lkKQogewogCWlmIChzaG93X3BrZykKLQkJZnByaW50ZihzdGRlcnIsICJwa2cgIik7CisJCWZwcmludGYoc3RkZXJyLCAicGsiKTsKIAlpZiAoc2hvd19jb3JlKQotCQlmcHJpbnRmKHN0ZGVyciwgImNvcmUiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgY3IiKTsKIAlpZiAoc2hvd19jcHUpCiAJCWZwcmludGYoc3RkZXJyLCAiIENQVSIpOwogCWlmIChkb19uaG1fY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIgICAlJWMwICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAlJWMwICIpOwogCWlmIChoYXNfYXBlcmYpCi0JCWZwcmludGYoc3RkZXJyLCAiICBHSHoiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgR0h6Iik7CiAJZnByaW50ZihzdGRlcnIsICIgIFRTQyIpOwogCWlmIChkb19uaG1fY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIgICAlJWMxICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAlJWMxIik7CiAJaWYgKGRvX25obV9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgICUlYzMgIik7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICUlYzMiKTsKIAlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCWZwcmludGYoc3RkZXJyLCAiICAgJSVjNiAiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgJSVjNiIpOwogCWlmIChkb19zbmJfY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIgICAlJWM3ICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAlJWM3Iik7CiAJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzIgIik7CisJCWZwcmludGYoc3RkZXJyLCAiICAlJXBjMiIpOwogCWlmIChkb19uaG1fY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIgICUlcGMzICIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzMiKTsKIAlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCWZwcmludGYoc3RkZXJyLCAiICAlJXBjNiAiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgICUlcGM2Iik7CiAJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgJSVwYzcgIik7CisJCWZwcmludGYoc3RkZXJyLCAiICAlJXBjNyIpOwogCWlmIChleHRyYV9tc3Jfb2Zmc2V0KQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgICBNU1IgMHgleCAiLCBleHRyYV9tc3Jfb2Zmc2V0KTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICAgIE1TUiAweCV4ICIsIGV4dHJhX21zcl9vZmZzZXQpOwogCiAJcHV0YygnXG4nLCBzdGRlcnIpOwogfQpAQCAtMTk0LDE0ICsxOTQsMTQgQEAKIAkvKiB0b3BvbG9neSBjb2x1bW5zLCBwcmludCBibGFua3Mgb24gMXN0IChhdmVyYWdlKSBsaW5lICovCiAJaWYgKHAgPT0gY250X2F2ZXJhZ2UpIHsKIAkJaWYgKHNob3dfcGtnKQotCQkJZnByaW50ZihzdGRlcnIsICIgICAgIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAiKTsKIAkJaWYgKHNob3dfY29yZSkKIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICIpOwogCQlpZiAoc2hvd19jcHUpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKIAl9IGVsc2UgewogCQlpZiAoc2hvd19wa2cpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiU0ZCIsIHAtPnBrZyk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVkIiwgcC0+cGtnKTsKIAkJaWYgKHNob3dfY29yZSkKIAkJCWZwcmludGYoc3RkZXJyLCAiJTRkIiwgcC0+Y29yZSk7CiAJCWlmIChzaG93X2NwdSkKQEAgLTI0MSwyMiArMjQxLDIyIEBACiAJCWlmICghc2tpcF9jMSkKIAkJCWZwcmludGYoc3RkZXJyLCAiJTcuMmYiLCAxMDAuMCAqIHAtPmMxL3AtPnRzYyk7CiAJCWVsc2UKLQkJCWZwcmludGYoc3RkZXJyLCAiICAgKioqKiIpOworCQkJZnByaW50ZihzdGRlcnIsICIgICoqKioiKTsKIAl9CiAJaWYgKGRvX25obV9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5jMy9wLT50c2MpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAlNi4yZiIsIDEwMC4wICogcC0+YzMvcC0+dHNjKTsKIAlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCWZwcmludGYoc3RkZXJyLCAiJTcuMmYiLCAxMDAuMCAqIHAtPmM2L3AtPnRzYyk7CisJCWZwcmludGYoc3RkZXJyLCAiICU2LjJmIiwgMTAwLjAgKiBwLT5jNi9wLT50c2MpOwogCWlmIChkb19zbmJfY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIlNy4yZiIsIDEwMC4wICogcC0+YzcvcC0+dHNjKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJTYuMmYiLCAxMDAuMCAqIHAtPmM3L3AtPnRzYyk7CiAJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5wYzIvcC0+dHNjKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJTUuMmYiLCAxMDAuMCAqIHAtPnBjMi9wLT50c2MpOwogCWlmIChkb19uaG1fY3N0YXRlcykKLQkJZnByaW50ZihzdGRlcnIsICIlNy4yZiIsIDEwMC4wICogcC0+cGMzL3AtPnRzYyk7CisJCWZwcmludGYoc3RkZXJyLCAiICU1LjJmIiwgMTAwLjAgKiBwLT5wYzMvcC0+dHNjKTsKIAlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCWZwcmludGYoc3RkZXJyLCAiJTcuMmYiLCAxMDAuMCAqIHAtPnBjNi9wLT50c2MpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAlNS4yZiIsIDEwMC4wICogcC0+cGM2L3AtPnRzYyk7CiAJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQlmcHJpbnRmKHN0ZGVyciwgIiU3LjJmIiwgMTAwLjAgKiBwLT5wYzcvcC0+dHNjKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJTUuMmYiLCAxMDAuMCAqIHAtPnBjNy9wLT50c2MpOwogCWlmIChleHRyYV9tc3Jfb2Zmc2V0KQogCQlmcHJpbnRmKHN0ZGVyciwgIiAgMHglMDE2bGx4IiwgcC0+ZXh0cmFfbXNyKTsKIAlwdXRjKCdcbicsIHN0ZGVycik7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMgYi90b29scy9wb3dlci94ODYveDg2X2VuZXJneV9wZXJmX3BvbGljeS94ODZfZW5lcmd5X3BlcmZfcG9saWN5LmMKaW5kZXggMjYxOGVmMi4uMzNjNWM3ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIveDg2L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kveDg2X2VuZXJneV9wZXJmX3BvbGljeS5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni94ODZfZW5lcmd5X3BlcmZfcG9saWN5L3g4Nl9lbmVyZ3lfcGVyZl9wb2xpY3kuYwpAQCAtMTM3LDcgKzEzNyw2IEBACiB2b2lkIHZhbGlkYXRlX2NwdWlkKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeCwgbWF4X2xldmVsOwotCWNoYXIgYnJhbmRbMTZdOwogCXVuc2lnbmVkIGludCBmbXMsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nOwogCiAJZWF4ID0gZWJ4ID0gZWN4ID0gZWR4ID0gMDsKQEAgLTE2MCw4ICsxNTksOCBAQAogCQltb2RlbCArPSAoKGZtcyA+PiAxNikgJiAweGYpIDw8IDQ7CiAKIAlpZiAodmVyYm9zZSA+IDEpCi0JCXByaW50ZigiQ1BVSUQgJXMgJWQgbGV2ZWxzIGZhbWlseTptb2RlbDpzdGVwcGluZyAiCi0JCQkiMHgleDoleDoleCAoJWQ6JWQ6JWQpXG4iLCBicmFuZCwgbWF4X2xldmVsLAorCQlwcmludGYoIkNQVUlEICVkIGxldmVscyBmYW1pbHk6bW9kZWw6c3RlcHBpbmcgIgorCQkJIjB4JXg6JXg6JXggKCVkOiVkOiVkKVxuIiwgbWF4X2xldmVsLAogCQkJZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcsIGZhbWlseSwgbW9kZWwsIHN0ZXBwaW5nKTsKIAogCWlmICghKGVkeCAmICgxIDw8IDUpKSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvc2x1Yi9zbGFiaW5mby5jIGIvdG9vbHMvc2x1Yi9zbGFiaW5mby5jCmluZGV4IDUxNjU1MWMuLjg2OGNjOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NsdWIvc2xhYmluZm8uYworKysgYi90b29scy9zbHViL3NsYWJpbmZvLmMKQEAgLTIsOCArMiw5IEBACiAgKiBTbGFiaW5mbzogVG9vbCB0byBnZXQgcmVwb3J0cyBhYm91dCBzbGFicwogICoKICAqIChDKSAyMDA3IHNnaSwgQ2hyaXN0b3BoIExhbWV0ZXIKKyAqIChDKSAyMDExIExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyCiAgKgotICogQ29tcGlsZSBieToKKyAqIENvbXBpbGUgd2l0aDoKICAqCiAgKiBnY2MgLW8gc2xhYmluZm8gc2xhYmluZm8uYwogICovCkBAIC0zOSw2ICs0MCw4IEBACiAJdW5zaWduZWQgbG9uZyBjcHVzbGFiX2ZsdXNoLCBkZWFjdGl2YXRlX2Z1bGwsIGRlYWN0aXZhdGVfZW1wdHk7CiAJdW5zaWduZWQgbG9uZyBkZWFjdGl2YXRlX3RvX2hlYWQsIGRlYWN0aXZhdGVfdG9fdGFpbDsKIAl1bnNpZ25lZCBsb25nIGRlYWN0aXZhdGVfcmVtb3RlX2ZyZWVzLCBvcmRlcl9mYWxsYmFjazsKKwl1bnNpZ25lZCBsb25nIGNtcHhjaGdfZG91YmxlX2NwdV9mYWlsLCBjbXB4Y2hnX2RvdWJsZV9mYWlsOworCXVuc2lnbmVkIGxvbmcgYWxsb2Nfbm9kZV9taXNtYXRjaCwgZGVhY3RpdmF0ZV9ieXBhc3M7CiAJaW50IG51bWFbTUFYX05PREVTXTsKIAlpbnQgbnVtYV9wYXJ0aWFsW01BWF9OT0RFU107CiB9IHNsYWJpbmZvW01BWF9TTEFCU107CkBAIC05OSw3ICsxMDIsNyBAQAogCiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewotCXByaW50Zigic2xhYmluZm8gNS83LzIwMDcuIChjKSAyMDA3IHNnaS5cblxuIgorCXByaW50Zigic2xhYmluZm8gNC8xNS8yMDExLiAoYykgMjAwNyBzZ2kvKGMpIDIwMTEgTGludXggRm91bmRhdGlvbi5cblxuIgogCQkic2xhYmluZm8gWy1haG5wdnRzel0gWy1kIGRlYnVnb3B0c10gW3NsYWItcmVnZXhwXVxuIgogCQkiLWF8LS1hbGlhc2VzICAgICAgICAgICBTaG93IGFsaWFzZXNcbiIKIAkJIi1BfC0tYWN0aXZpdHkgICAgICAgICAgTW9zdCBhY3RpdmUgc2xhYnMgZmlyc3RcbiIKQEAgLTI5Myw3ICsyOTYsNyBAQAogc3RhdGljIHZvaWQgZmlyc3RfbGluZSh2b2lkKQogewogCWlmIChzaG93X2FjdGl2aXR5KQotCQlwcmludGYoIk5hbWUgICAgICAgICAgICAgICAgICAgT2JqZWN0cyAgICAgIEFsbG9jICAgICAgIEZyZWUgICAlJUZhc3QgRmFsbGIgT1xuIik7CisJCXByaW50ZigiTmFtZSAgICAgICAgICAgICAgICAgICBPYmplY3RzICAgICAgQWxsb2MgICAgICAgRnJlZSAgICUlRmFzdCBGYWxsYiBPIENtcFggICBVTFxuIik7CiAJZWxzZQogCQlwcmludGYoIk5hbWUgICAgICAgICAgICAgICAgICAgT2JqZWN0cyBPYmpzaXplICAgIFNwYWNlICIKIAkJCSJTbGFicy9QYXJ0L0NwdSAgTy9TIE8gJSVGciAlJUVmIEZsZ1xuIik7CkBAIC0zNzksMTQgKzM4MiwxNCBAQAogCXByaW50ZigiXG4lczogS2VybmVsIG9iamVjdCBhbGxvY2F0aW9uXG4iLCBzLT5uYW1lKTsKIAlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlpZiAocmVhZF9zbGFiX29iaihzLCAiYWxsb2NfY2FsbHMiKSkKLQkJcHJpbnRmKGJ1ZmZlcik7CisJCXByaW50ZigiJXMiLCBidWZmZXIpOwogCWVsc2UKIAkJcHJpbnRmKCJObyBEYXRhXG4iKTsKIAogCXByaW50ZigiXG4lczogS2VybmVsIG9iamVjdCBmcmVlaW5nXG4iLCBzLT5uYW1lKTsKIAlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJaWYgKHJlYWRfc2xhYl9vYmoocywgImZyZWVfY2FsbHMiKSkKLQkJcHJpbnRmKGJ1ZmZlcik7CisJCXByaW50ZigiJXMiLCBidWZmZXIpOwogCWVsc2UKIAkJcHJpbnRmKCJObyBEYXRhXG4iKTsKIApAQCAtNDAwLDcgKzQwMyw3IEBACiAJaWYgKHJlYWRfc2xhYl9vYmoocywgIm9wcyIpKSB7CiAJCXByaW50ZigiXG4lczoga21lbV9jYWNoZSBvcGVyYXRpb25zXG4iLCBzLT5uYW1lKTsKIAkJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXByaW50ZihidWZmZXIpOworCQlwcmludGYoIiVzIiwgYnVmZmVyKTsKIAl9IGVsc2UKIAkJcHJpbnRmKCJcbiVzIGhhcyBubyBrbWVtX2NhY2hlIG9wZXJhdGlvbnNcbiIsIHMtPm5hbWUpOwogfQpAQCAtNDYyLDE5ICs0NjUsMzIgQEAKIAlpZiAocy0+Y3B1c2xhYl9mbHVzaCkKIAkJcHJpbnRmKCJGbHVzaGVzICU4bHVcbiIsIHMtPmNwdXNsYWJfZmx1c2gpOwogCi0JaWYgKHMtPmFsbG9jX3JlZmlsbCkKLQkJcHJpbnRmKCJSZWZpbGwgJThsdVxuIiwgcy0+YWxsb2NfcmVmaWxsKTsKLQogCXRvdGFsID0gcy0+ZGVhY3RpdmF0ZV9mdWxsICsgcy0+ZGVhY3RpdmF0ZV9lbXB0eSArCi0JCQlzLT5kZWFjdGl2YXRlX3RvX2hlYWQgKyBzLT5kZWFjdGl2YXRlX3RvX3RhaWw7CisJCQlzLT5kZWFjdGl2YXRlX3RvX2hlYWQgKyBzLT5kZWFjdGl2YXRlX3RvX3RhaWwgKyBzLT5kZWFjdGl2YXRlX2J5cGFzczsKIAotCWlmICh0b3RhbCkKLQkJcHJpbnRmKCJEZWFjdGl2YXRlIEZ1bGw9JWx1KCVsdSUlKSBFbXB0eT0lbHUoJWx1JSUpICIKLQkJCSJUb0hlYWQ9JWx1KCVsdSUlKSBUb1RhaWw9JWx1KCVsdSUlKVxuIiwKLQkJCXMtPmRlYWN0aXZhdGVfZnVsbCwgKHMtPmRlYWN0aXZhdGVfZnVsbCAqIDEwMCkgLyB0b3RhbCwKLQkJCXMtPmRlYWN0aXZhdGVfZW1wdHksIChzLT5kZWFjdGl2YXRlX2VtcHR5ICogMTAwKSAvIHRvdGFsLAotCQkJcy0+ZGVhY3RpdmF0ZV90b19oZWFkLCAocy0+ZGVhY3RpdmF0ZV90b19oZWFkICogMTAwKSAvIHRvdGFsLAorCWlmICh0b3RhbCkgeworCQlwcmludGYoIlxuU2xhYiBEZWFjdGl2YXRpb24gICAgICAgICAgICAgT2N1cnJlbmNlcyAgJSVcbiIpOworCQlwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlwcmludGYoIlNsYWIgZnVsbCAgICAgICAgICAgICAgICAgICAgICU3bHUgICUzbHUlJVxuIiwKKwkJCXMtPmRlYWN0aXZhdGVfZnVsbCwgKHMtPmRlYWN0aXZhdGVfZnVsbCAqIDEwMCkgLyB0b3RhbCk7CisJCXByaW50ZigiU2xhYiBlbXB0eSAgICAgICAgICAgICAgICAgICAgJTdsdSAgJTNsdSUlXG4iLAorCQkJcy0+ZGVhY3RpdmF0ZV9lbXB0eSwgKHMtPmRlYWN0aXZhdGVfZW1wdHkgKiAxMDApIC8gdG90YWwpOworCQlwcmludGYoIk1vdmVkIHRvIGhlYWQgb2YgcGFydGlhbCBsaXN0ICU3bHUgICUzbHUlJVxuIiwKKwkJCXMtPmRlYWN0aXZhdGVfdG9faGVhZCwgKHMtPmRlYWN0aXZhdGVfdG9faGVhZCAqIDEwMCkgLyB0b3RhbCk7CisJCXByaW50ZigiTW92ZWQgdG8gdGFpbCBvZiBwYXJ0aWFsIGxpc3QgJTdsdSAgJTNsdSUlXG4iLAogCQkJcy0+ZGVhY3RpdmF0ZV90b190YWlsLCAocy0+ZGVhY3RpdmF0ZV90b190YWlsICogMTAwKSAvIHRvdGFsKTsKKwkJcHJpbnRmKCJEZWFjdGl2YXRpb24gYnlwYXNzICAgICAgICAgICAlN2x1ICAlM2x1JSVcbiIsCisJCQlzLT5kZWFjdGl2YXRlX2J5cGFzcywgKHMtPmRlYWN0aXZhdGVfYnlwYXNzICogMTAwKSAvIHRvdGFsKTsKKwkJcHJpbnRmKCJSZWZpbGxlZCBmcm9tIGZvcmVpZ24gZnJlZXMgICAlN2x1ICAlM2x1JSVcbiIsCisJCQlzLT5hbGxvY19yZWZpbGwsIChzLT5hbGxvY19yZWZpbGwgKiAxMDApIC8gdG90YWwpOworCQlwcmludGYoIk5vZGUgbWlzbWF0Y2ggICAgICAgICAgICAgICAgICU3bHUgICUzbHUlJVxuIiwKKwkJCXMtPmFsbG9jX25vZGVfbWlzbWF0Y2gsIChzLT5hbGxvY19ub2RlX21pc21hdGNoICogMTAwKSAvIHRvdGFsKTsKKwl9CisKKwlpZiAocy0+Y21weGNoZ19kb3VibGVfZmFpbCB8fCBzLT5jbXB4Y2hnX2RvdWJsZV9jcHVfZmFpbCkKKwkJcHJpbnRmKCJcbkNtcHhjaGdfZG91YmxlIExvb3Bpbmdcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXByaW50ZigiTG9ja2VkIENtcHhjaGcgRG91YmxlIHJlZG9zICAgJWx1XG5VbmxvY2tlZCBDbXB4Y2hnIERvdWJsZSByZWRvcyAlbHVcbiIsCisJCQlzLT5jbXB4Y2hnX2RvdWJsZV9mYWlsLCBzLT5jbXB4Y2hnX2RvdWJsZV9jcHVfZmFpbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlcG9ydChzdHJ1Y3Qgc2xhYmluZm8gKnMpCkBAIC01NzMsMTIgKzU4OSwxMyBAQAogCQl0b3RhbF9hbGxvYyA9IHMtPmFsbG9jX2Zhc3RwYXRoICsgcy0+YWxsb2Nfc2xvd3BhdGg7CiAJCXRvdGFsX2ZyZWUgPSBzLT5mcmVlX2Zhc3RwYXRoICsgcy0+ZnJlZV9zbG93cGF0aDsKIAotCQlwcmludGYoIiUtMjFzICU4bGQgJTEwbGQgJTEwbGQgJTNsZCAlM2xkICU1bGQgJTFkXG4iLAorCQlwcmludGYoIiUtMjFzICU4bGQgJTEwbGQgJTEwbGQgJTNsZCAlM2xkICU1bGQgJTFkICU0bGQgJTRsZFxuIiwKIAkJCXMtPm5hbWUsIHMtPm9iamVjdHMsCiAJCQl0b3RhbF9hbGxvYywgdG90YWxfZnJlZSwKIAkJCXRvdGFsX2FsbG9jID8gKHMtPmFsbG9jX2Zhc3RwYXRoICogMTAwIC8gdG90YWxfYWxsb2MpIDogMCwKIAkJCXRvdGFsX2ZyZWUgPyAocy0+ZnJlZV9mYXN0cGF0aCAqIDEwMCAvIHRvdGFsX2ZyZWUpIDogMCwKLQkJCXMtPm9yZGVyX2ZhbGxiYWNrLCBzLT5vcmRlcik7CisJCQlzLT5vcmRlcl9mYWxsYmFjaywgcy0+b3JkZXIsIHMtPmNtcHhjaGdfZG91YmxlX2ZhaWwsCisJCQlzLT5jbXB4Y2hnX2RvdWJsZV9jcHVfZmFpbCk7CiAJfQogCWVsc2UKIAkJcHJpbnRmKCIlLTIxcyAlOGxkICU3ZCAlOHMgJTE0cyAlNGQgJTFkICUzbGQgJTNsZCAlc1xuIiwKQEAgLTExOTAsNiArMTIwNywxMCBAQAogCQkJc2xhYi0+ZGVhY3RpdmF0ZV90b190YWlsID0gZ2V0X29iaigiZGVhY3RpdmF0ZV90b190YWlsIik7CiAJCQlzbGFiLT5kZWFjdGl2YXRlX3JlbW90ZV9mcmVlcyA9IGdldF9vYmooImRlYWN0aXZhdGVfcmVtb3RlX2ZyZWVzIik7CiAJCQlzbGFiLT5vcmRlcl9mYWxsYmFjayA9IGdldF9vYmooIm9yZGVyX2ZhbGxiYWNrIik7CisJCQlzbGFiLT5jbXB4Y2hnX2RvdWJsZV9jcHVfZmFpbCA9IGdldF9vYmooImNtcHhjaGdfZG91YmxlX2NwdV9mYWlsIik7CisJCQlzbGFiLT5jbXB4Y2hnX2RvdWJsZV9mYWlsID0gZ2V0X29iaigiY21weGNoZ19kb3VibGVfZmFpbCIpOworCQkJc2xhYi0+YWxsb2Nfbm9kZV9taXNtYXRjaCA9IGdldF9vYmooImFsbG9jX25vZGVfbWlzbWF0Y2giKTsKKwkJCXNsYWItPmRlYWN0aXZhdGVfYnlwYXNzID0gZ2V0X29iaigiZGVhY3RpdmF0ZV9ieXBhc3MiKTsKIAkJCWNoZGlyKCIuLiIpOwogCQkJaWYgKHNsYWItPm5hbWVbMF0gPT0gJzonKQogCQkJCWFsaWFzX3RhcmdldHMrKzsK